def optics(self):
toolbar = QToolBar()
toolbar.setToolButtonStyle( Qt.ToolButtonTextUnderIcon)
toolbar.setIconSize(QSize(42, 42))
self.run = QAction(QIcon_load("media-playback-start"), wrap_text(_("Calculate"),5), self)
toolbar.addAction(self.run)
self.export = QAction(QIcon_load("document-export"), wrap_text(_("Export spectrum"),5), self)
#self.export.triggered.connect(self.save_image)
toolbar.addAction(self.export)
spacer = QWidget()
spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
toolbar.addWidget(spacer)
self.help = QAction(QIcon_load("help"), _("Help"), self)
toolbar.addAction(self.help)
return toolbar
python类QAction()的实例源码
def initUI(self):
textEdit = QTextEdit()
self.setCentralWidget(textEdit)
exitAction = QAction(QIcon('exit24.png'), 'Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit application')
exitAction.triggered.connect(self.close)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exitAction)
toolbar = self.addToolBar('Exit')
toolbar.addAction(exitAction)
self.setGeometry(300, 300, 350, 250)
self.setWindowTitle('Main window')
self.show()
def submit_line(self):
""" Writes the input to the text browser, adds it to the history, and
adds it to the message queue to be sent to the binary """
raw = self._textbox.text()
line = self.decode(raw)
if line is None:
return
if raw not in self.history:
self.history.append(raw)
action = QtWidgets.QAction(str(raw), self)
action.triggered.connect(partial(self.set_text_box_contents, raw))
self._hist_menu.insertAction(self._hist_menu.actions()[0], action)
self._messages.put((line, None))
self._autoscroll()
# self._textBrowser.setTextColor(usercolor)
# self._textBrowser.insertPlainText(line + "\n")
# self._textBrowser.setTextColor(self.palette().color(QPalette.WindowText))
self._textbox.clear()
self._autoscroll()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
mainMenu = self.menuBar()
fileMenu = mainMenu.addMenu('File')
editMenu = mainMenu.addMenu('Edit')
viewMenu = mainMenu.addMenu('View')
searchMenu = mainMenu.addMenu('Search')
toolsMenu = mainMenu.addMenu('Tools')
helpMenu = mainMenu.addMenu('Help')
exitButton = QAction(QIcon('exit24.png'), 'Exit', self)
exitButton.setShortcut('Ctrl+Q')
exitButton.setStatusTip('Exit application')
exitButton.triggered.connect(self.close)
fileMenu.addAction(exitButton)
self.show()
def __init__(self, parent=None):
super().__init__(parent)
"""style is relying on object names so make sure they are set
before registering widgets"""
self.setObjectName('HubSearch')
search_action = QtWidgets.QAction(self)
search_action.setObjectName('search_action')
close_action = QtWidgets.QAction(self)
close_action.setObjectName('close_action')
close_action.triggered.connect(self.cancel.emit)
close_action.triggered.connect(self.clear)
self.addAction(search_action, QtWidgets.QLineEdit.LeadingPosition)
self.addAction(close_action, QtWidgets.QLineEdit.TrailingPosition)
plexdesktop.style.Style.Instance().widget.register(search_action, 'glyphicons-search')
plexdesktop.style.Style.Instance().widget.register(close_action, 'cancel')
def submit_line(self):
""" Writes the input to the text browser, adds it to the history, and
adds it to the message queue to be sent to the binary """
raw = self._textbox.text()
line = self.decode(raw)
if line is None:
return
if raw not in self.history:
self.history.append(raw)
action = QtWidgets.QAction(str(raw), self)
action.triggered.connect(partial(self.set_text_box_contents, raw))
self._hist_menu.insertAction(self._hist_menu.actions()[0], action)
self._messages.put((line, None))
self._autoscroll()
# self._textBrowser.setTextColor(usercolor)
# self._textBrowser.insertPlainText(line + "\n")
# self._textBrowser.setTextColor(self.palette().color(QPalette.WindowText))
self._textbox.clear()
self._autoscroll()
def __init__(self):
QToolBar.__init__(self)
self.setToolButtonStyle( Qt.ToolButtonTextUnderIcon)
self.setIconSize(QSize(42, 42))
self.materials = QAction(QIcon_load("organic_material"), _("Materials\ndatabase"), self)
self.materials.triggered.connect(self.callback_view_materials)
self.addAction(self.materials)
self.spectra_file = QAction(QIcon_load("spectra_file"), _("Optical\ndatabase"), self)
self.spectra_file.triggered.connect(self.callback_view_optical)
self.addAction(self.spectra_file)
if enable_betafeatures()==True:
self.tb_import_pvlighthouse = QAction(QIcon_load("sync"), _("Update materials\nfrom PVLighthouse"), self)
self.tb_import_pvlighthouse.triggered.connect(self.callback_pvlighthouse)
self.addAction(self.tb_import_pvlighthouse)
self.tb_import_refractiveindex = QAction(QIcon_load("sync"), _("Update materials\nfrom refractiveindex.info"), self)
self.tb_import_refractiveindex.triggered.connect(self.callback_refractiveindex)
self.addAction(self.tb_import_refractiveindex)
def file(self):
toolbar = QToolBar()
toolbar.setToolButtonStyle( Qt.ToolButtonTextUnderIcon)
toolbar.setIconSize(QSize(42, 42))
self.home_new = QAction(QIcon_load("document-new"), _("New simulation").replace(" ","\n"), self)
#self.home_new.setText(_("New\nsimulation"))
toolbar.addAction(self.home_new)
self.home_open = QAction(QIcon_load("document-open"), _("Open\nsimulation"), self)
toolbar.addAction(self.home_open)
self.home_export = QAction(QIcon_load("document-export"), _("Export\ndata"), self)
toolbar.addAction(self.home_export)
spacer = QWidget()
spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
toolbar.addWidget(spacer)
self.home_help = QAction(QIcon_load("internet-web-browser"), _("Help"), self)
toolbar.addAction(self.home_help)
return toolbar
def _create_menu(self, parent, actions_list):
for action_item in actions_list:
if 'type' in action_item:
if action_item['type'] == 'separator':
parent.addSeparator()
elif 'action' in action_item:
action = QtWidgets.QAction(self)
parent.addAction(action)
action.setText(action_item['title'])
action.triggered.connect(action_item['action'])
if 'shortcut' in action_item:
action.setShortcut(action_item['shortcut'])
if 'icon' in action_item:
action.setIcon(QtGui.QIcon(action_item['icon']))
if 'status_tip' in action_item:
action.setStatusTip(action_item['status_tip'])
if 'property' in action_item:
self.menu_property[action_item['property']] = action
else:
menu = QtWidgets.QMenu(parent)
menu.setTitle(action_item['title'])
self._create_menu(menu, action_item['actions'])
parent.addAction(menu.menuAction())
def __init__(self, view):
QObject.__init__(self, view)
self.view = view
self.model = QStandardItemModel()
self.view.setModel(self.model)
self.nodesets = []
self.server_mgr = None
self._nodeset_to_delete = None
self.view.header().setSectionResizeMode(1)
addNodeSetAction = QAction("Add Reference Node Set", self.model)
addNodeSetAction.triggered.connect(self.add_nodeset)
self.removeNodeSetAction = QAction("Remove Reference Node Set", self.model)
self.removeNodeSetAction.triggered.connect(self.remove_nodeset)
self.view.setContextMenuPolicy(Qt.CustomContextMenu)
self.view.customContextMenuRequested.connect(self.showContextMenu)
self._contextMenu = QMenu()
self._contextMenu.addAction(addNodeSetAction)
self._contextMenu.addAction(self.removeNodeSetAction)
def __init__(self, view):
QObject.__init__(self, view)
self.view = view
self.model = QStandardItemModel()
self.view.setModel(self.model)
delegate = MyDelegate(self.view, self)
delegate.error.connect(self.error.emit)
self.view.setItemDelegate(delegate)
self.node = None
self.view.header().setSectionResizeMode(1)
self.addNamespaceAction = QAction("Add Namespace", self.model)
self.addNamespaceAction.triggered.connect(self.add_namespace)
self.removeNamespaceAction = QAction("Remove Namespace", self.model)
self.removeNamespaceAction.triggered.connect(self.remove_namespace)
self.view.setContextMenuPolicy(Qt.CustomContextMenu)
self.view.customContextMenuRequested.connect(self.showContextMenu)
self._contextMenu = QMenu()
self._contextMenu.addAction(self.addNamespaceAction)
self._contextMenu.addAction(self.removeNamespaceAction)
def __init__(self, parent=None):
super(ShapedClock, self).__init__(parent,
Qt.FramelessWindowHint | Qt.WindowSystemMenuHint)
timer = QTimer(self)
timer.timeout.connect(self.update)
timer.start(1000)
quitAction = QAction("E&xit", self, shortcut="Ctrl+Q",
triggered=QApplication.instance().quit)
self.addAction(quitAction)
self.setContextMenuPolicy(Qt.ActionsContextMenu)
self.setToolTip("Drag the clock with the left mouse button.\n"
"Use the right mouse button to open a context menu.")
self.setWindowTitle(self.tr("Shaped Analog Clock"))
def __init__(self, parent=None):
super(ShapedClock, self).__init__(parent,
Qt.FramelessWindowHint | Qt.WindowSystemMenuHint)
timer = QTimer(self)
timer.timeout.connect(self.update)
timer.start(1000)
quitAction = QAction("E&xit", self, shortcut="Ctrl+Q",
triggered=QApplication.instance().quit)
self.addAction(quitAction)
self.setContextMenuPolicy(Qt.ActionsContextMenu)
self.setToolTip("Drag the clock with the left mouse button.\n"
"Use the right mouse button to open a context menu.")
self.setWindowTitle(self.tr("Shaped Analog Clock"))
def build_menu(self, workset_names = None):
self.menu.clear()
worksets = self.controller.get_worksets()
for workset in worksets:
action = QAction(workset.name, self)
action.setCheckable(True)
if workset_names is not None:
if action.text() in workset_names:
action.setChecked(True)
self.menu.addAction(action)
action.triggered.connect(functools.partial(
self.handle_workset,
action))
self.menu.addSeparator()
create_action = self.menu.addAction(_("Manage worksets"))
create_action.triggered.connect(self.manage_worksets)
settings_action = self.menu.addAction(_("Settings"))
settings_action.triggered.connect(self.settings)
exit_action = self.menu.addAction(_("Quit"))
exit_action.triggered.connect(self.close)
universal_tool_template_1020.py 文件源码
项目:universal_tool_template.py
作者: shiningdesign
项目源码
文件源码
阅读 26
收藏 0
点赞 0
评论 0
def qui_menu(self, action_list_str, menu_str):
# qui menu creation
# syntax: self.qui_menu('right_menu_createFolder_atn;Create Folder,Ctrl+D | right_menu_openFolder_atn;Open Folder', 'right_menu')
if menu_str not in self.uiList.keys():
self.uiList[menu_str] = QtWidgets.QMenu()
create_opt_list = [ x.strip() for x in action_list_str.split('|') ]
for each_creation in create_opt_list:
ui_info = [ x.strip() for x in each_creation.split(';') ]
atn_name = ui_info[0]
atn_title = ''
atn_hotkey = ''
if len(ui_info) > 1:
options = ui_info[1].split(',')
atn_title = '' if len(options) < 1 else options[0]
atn_hotkey = '' if len(options) < 2 else options[1]
if atn_name != '':
if atn_name == '_':
self.uiList[menu_str].addSeparator()
else:
if atn_name not in self.uiList.keys():
self.uiList[atn_name] = QtWidgets.QAction(atn_title, self)
if atn_hotkey != '':
self.uiList[atn_name].setShortcut(QtGui.QKeySequence(atn_hotkey))
self.uiList[menu_str].addAction(self.uiList[atn_name])
def setLang(self, langName):
uiList_lang_read = self.memoData['lang'][langName]
for ui_name in uiList_lang_read:
ui_element = self.uiList[ui_name]
if type(ui_element) in [ QtWidgets.QLabel, QtWidgets.QPushButton, QtWidgets.QAction, QtWidgets.QCheckBox ]:
# uiType: QLabel, QPushButton, QAction(menuItem), QCheckBox
if uiList_lang_read[ui_name] != "":
ui_element.setText(uiList_lang_read[ui_name])
elif type(ui_element) in [ QtWidgets.QGroupBox, QtWidgets.QMenu ]:
# uiType: QMenu, QGroupBox
if uiList_lang_read[ui_name] != "":
ui_element.setTitle(uiList_lang_read[ui_name])
elif type(ui_element) in [ QtWidgets.QTabWidget]:
# uiType: QTabWidget
tabCnt = ui_element.count()
if uiList_lang_read[ui_name] != "":
tabNameList = uiList_lang_read[ui_name].split(';')
if len(tabNameList) == tabCnt:
for i in range(tabCnt):
if tabNameList[i] != "":
ui_element.setTabText(i,tabNameList[i])
elif type(ui_element) == str:
# uiType: string for msg
if uiList_lang_read[ui_name] != "":
self.uiList[ui_name] = uiList_lang_read[ui_name]
universal_tool_template_0904.py 文件源码
项目:universal_tool_template.py
作者: shiningdesign
项目源码
文件源码
阅读 25
收藏 0
点赞 0
评论 0
def setLang(self, langName):
uiList_lang_read = self.memoData['lang'][langName]
for ui_name in uiList_lang_read:
ui_element = self.uiList[ui_name]
if type(ui_element) in [ QtWidgets.QLabel, QtWidgets.QPushButton, QtWidgets.QAction, QtWidgets.QCheckBox ]:
# uiType: QLabel, QPushButton, QAction(menuItem), QCheckBox
if uiList_lang_read[ui_name] != "":
ui_element.setText(uiList_lang_read[ui_name])
elif type(ui_element) in [ QtWidgets.QGroupBox, QtWidgets.QMenu ]:
# uiType: QMenu, QGroupBox
if uiList_lang_read[ui_name] != "":
ui_element.setTitle(uiList_lang_read[ui_name])
elif type(ui_element) in [ QtWidgets.QTabWidget]:
# uiType: QTabWidget
tabCnt = ui_element.count()
if uiList_lang_read[ui_name] != "":
tabNameList = uiList_lang_read[ui_name].split(';')
if len(tabNameList) == tabCnt:
for i in range(tabCnt):
if tabNameList[i] != "":
ui_element.setTabText(i,tabNameList[i])
elif type(ui_element) == str:
# uiType: string for msg
if uiList_lang_read[ui_name] != "":
self.uiList[ui_name] = uiList_lang_read[ui_name]
universal_tool_template_0803.py 文件源码
项目:universal_tool_template.py
作者: shiningdesign
项目源码
文件源码
阅读 39
收藏 0
点赞 0
评论 0
def setLang(self, langName):
uiList_lang_read = self.memoData['lang'][langName]
for ui_name in uiList_lang_read:
ui_element = self.uiList[ui_name]
if type(ui_element) in [ QtWidgets.QLabel, QtWidgets.QPushButton, QtWidgets.QAction, QtWidgets.QCheckBox ]:
# uiType: QLabel, QPushButton, QAction(menuItem), QCheckBox
if uiList_lang_read[ui_name] != "":
ui_element.setText(uiList_lang_read[ui_name])
elif type(ui_element) in [ QtWidgets.QGroupBox, QtWidgets.QMenu ]:
# uiType: QMenu, QGroupBox
if uiList_lang_read[ui_name] != "":
ui_element.setTitle(uiList_lang_read[ui_name])
elif type(ui_element) in [ QtWidgets.QTabWidget]:
# uiType: QTabWidget
tabCnt = ui_element.count()
if uiList_lang_read[ui_name] != "":
tabNameList = uiList_lang_read[ui_name].split(';')
if len(tabNameList) == tabCnt:
for i in range(tabCnt):
if tabNameList[i] != "":
ui_element.setTabText(i,tabNameList[i])
elif type(ui_element) == str:
# uiType: string for msg
if uiList_lang_read[ui_name] != "":
self.uiList[ui_name] = uiList_lang_read[ui_name]
universal_tool_template_v8.1.py 文件源码
项目:universal_tool_template.py
作者: shiningdesign
项目源码
文件源码
阅读 23
收藏 0
点赞 0
评论 0
def setLang(self, langName):
uiList_lang_read = self.memoData['lang'][langName]
for ui_name in uiList_lang_read:
ui_element = self.uiList[ui_name]
if type(ui_element) in [ QtWidgets.QLabel, QtWidgets.QPushButton, QtWidgets.QAction, QtWidgets.QCheckBox ]:
# uiType: QLabel, QPushButton, QAction(menuItem), QCheckBox
if uiList_lang_read[ui_name] != "":
ui_element.setText(uiList_lang_read[ui_name])
elif type(ui_element) in [ QtWidgets.QGroupBox, QtWidgets.QMenu ]:
# uiType: QMenu, QGroupBox
if uiList_lang_read[ui_name] != "":
ui_element.setTitle(uiList_lang_read[ui_name])
elif type(ui_element) in [ QtWidgets.QTabWidget]:
# uiType: QTabWidget
tabCnt = ui_element.count()
if uiList_lang_read[ui_name] != "":
tabNameList = uiList_lang_read[ui_name].split(';')
if len(tabNameList) == tabCnt:
for i in range(tabCnt):
if tabNameList[i] != "":
ui_element.setTabText(i,tabNameList[i])
elif type(ui_element) == str:
# uiType: string for msg
if uiList_lang_read[ui_name] != "":
self.uiList[ui_name] = uiList_lang_read[ui_name]
def contextMenuEvent(self, event):
menu = QtWidgets.QMenu()
listOfLabelsAndFunctions = [
("interpolation Type", self.changeInterpolationType),
("CC Value", self.changeCCValue),
("delete", self.delete), #deletes the last hover item which is of course the current one.
]
for text, function in listOfLabelsAndFunctions:
if text == "separator":
self.addSeparator()
else:
a = QtWidgets.QAction(text, menu)
menu.addAction(a)
a.triggered.connect(function)
pos = QtGui.QCursor.pos()
pos.setY(pos.y() + 5)
self.ungrabMouse() #if we don't ungrab and the user clicks the context menu "away" by clicking in an empty area this will still get registered as mouseclick belonging to the current item and change the value to some insane amount, breaking the point.
menu.exec_(pos)
def contextMenuEvent(self, event):
menu = QtWidgets.QMenu()
listOfLabelsAndFunctions = [
("interpolation type", self.changeInterpolationType),
("units per minute", self.changeTempoUnits),
("reference note", self.changeTempoReference),
]
if not self.staticExportItem["positionInBlock"] == 0:
listOfLabelsAndFunctions.append(("delete", lambda: api.removeTempoItem(self.staticExportItem["id"])))
for text, function in listOfLabelsAndFunctions:
if text == "separator":
self.addSeparator()
else:
a = QtWidgets.QAction(text, menu)
menu.addAction(a)
a.triggered.connect(function)
pos = QtGui.QCursor.pos()
pos.setY(pos.y() + 5)
self.ungrabMouse() #if we don't ungrab and the user clicks the context menu "away" by clicking in an empty area this will still get registered as mouseclick belonging to the current item
menu.exec_(pos)
def deactivate_contextMenuEvent(self, event):
menu = QtWidgets.QMenu()
listOfLabelsAndFunctions = [
("restore to full duration ", self.contextRestore),
]
for text, function in listOfLabelsAndFunctions:
if text == "separator":
self.addSeparator()
else:
a = QtWidgets.QAction(text, menu)
menu.addAction(a)
a.triggered.connect(function)
pos = QtGui.QCursor.pos()
pos.setY(pos.y() + 5)
self.ungrabMouse() #if we don't ungrab and the user clicks the context menu "away" by clicking in an empty area this will still get registered as mouseclick belonging to the current item
menu.exec_(pos)
def CreateAction(self, shortname, function, icon, text, statustext, shortcut, toggle=False):
"""
Helper function to create an action
From Miyamoto
"""
if icon is not None:
act = QtWidgets.QAction(icon, text, self)
else:
act = QtWidgets.QAction(text, self)
if shortcut is not None: act.setShortcut(shortcut)
if statustext is not None: act.setStatusTip(statustext)
if toggle:
act.setCheckable(True)
if function is not None: act.triggered.connect(function)
self.actions[shortname] = act
def initUI(self):
exitAction = QAction(QIcon('exit.png'), '&Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit application')
exitAction.triggered.connect(qApp.quit)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exitAction)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Menubar')
self.show()
def __init__(self, view):
QObject.__init__(self, view)
self.view = view
self.model = TreeViewModel()
self.model.clear() # FIXME: do we need this?
self.model.error.connect(self.error)
self.view.setModel(self.model)
#self.view.setUniformRowHeights(True)
self.model.setHorizontalHeaderLabels(['DisplayName', "BrowseName", 'NodeId'])
self.view.header().setSectionResizeMode(0)
self.view.header().setStretchLastSection(True)
self.view.setSelectionBehavior(QAbstractItemView.SelectRows)
self.settings = QSettings()
state = self.settings.value("tree_widget_state", None)
if state is not None:
self.view.header().restoreState(state)
self.actionReload = QAction("Reload", self)
self.actionReload.triggered.connect(self.reload_current)
def contextMenuEvent(self, event: QContextMenuEvent):
menu = QMenu()
sel_indexes = [index.row() for index in self.selectedIndexes()]
edit_action = QAction("Edit", self)
if len(sel_indexes) == 0:
edit_action.setEnabled(False)
menu.addAction(edit_action)
if self.count() > 0:
edit_all_action = QAction("Edit all", self)
edit_all_action.triggered.connect(self.on_edit_all_action_triggered)
menu.addAction(edit_all_action)
action = menu.exec_(self.mapToGlobal(event.pos()))
if action == edit_action:
selected_indx = sel_indexes[0]
self.item_edit_clicked.emit(selected_indx)
def __init__(self, parent=None):
super().__init__(parent)
self.verticalHeader().setSectionResizeMode(QHeaderView.Fixed)
self.horizontalHeader().setSectionResizeMode(QHeaderView.Fixed)
self.ref_message_action = QAction(self.tr("Mark as reference message"), self)
self.ref_message_action.setShortcut(QKeySequence("R"))
self.ref_message_action.setShortcutContext(Qt.WidgetWithChildrenShortcut)
self.ref_message_action.triggered.connect(self.set_ref_message)
self.hide_row_action = QAction("Hide selected rows", self)
self.hide_row_action.setShortcut(QKeySequence("H"))
self.hide_row_action.setShortcutContext(Qt.WidgetWithChildrenShortcut)
self.hide_row_action.triggered.connect(self.hide_row)
self.addAction(self.ref_message_action)
self.addAction(self.hide_row_action)
def get_action(self, parent, undo_stack: QUndoStack, sel_range, protocol: ProtocolAnalyzer, view: int):
"""
:type parent: QTableView
:type undo_stack: QUndoStack
:type protocol_analyzers: list of ProtocolAnalyzer
"""
min_row, max_row, start, end = sel_range
if min_row == -1 or max_row == -1 or start == -1 or end == -1:
return None
if max_row != min_row:
QMessageBox.critical(parent, self.tr("Error in MessageBreak"),
self.tr("You can only break one line per action."))
return None
end = protocol.convert_index(end, view, 0, True, message_indx=min_row)[0]
# factor = 1 if view == 0 else 4 if view == 1 else 8
self.command = MessageBreakAction(protocol, max_row, end)
action = QAction(self.command.text(), parent)
action.triggered.connect(self.action_triggered)
self.undo_stack = undo_stack
return action
def applied_custom_menu(self, point):
index = self.applied_tree_view.indexAt(point)
address = index.data(FIRSTUI.ROLE_ADDRESS)
if not address:
return
menu = QtWidgets.QMenu(self.applied_tree_view)
goto_action = QtWidgets.QAction('&Go to Function', self.applied_tree_view)
goto_action.triggered.connect(lambda:IDAW.Jump(address))
menu.addAction(goto_action)
metadata_id = index.data(FIRSTUI.ROLE_ID)
if metadata_id:
history_action = QtWidgets.QAction('View &History', self.applied_tree_view)
history_action.triggered.connect(lambda:self._metadata_history(metadata_id))
menu.addAction(history_action)
menu.exec_(QtGui.QCursor.pos())
def custom_menu(self, point):
index = self.tree_view.indexAt(point)
address = index.data(FIRSTUI.ROLE_ADDRESS)
if not address:
return
menu = QtWidgets.QMenu(self.tree_view)
goto_action = QtWidgets.QAction('&Go to Function', self.tree_view)
goto_action.triggered.connect(lambda:IDAW.Jump(address))
menu.addAction(goto_action)
metadata_id = index.data(FIRSTUI.ROLE_ID)
if metadata_id:
history_action = QtWidgets.QAction('View &History', self.tree_view)
history_action.triggered.connect(lambda:self.metadata_history(metadata_id))
menu.addAction(history_action)
menu.exec_(QtGui.QCursor.pos())