def handleEvents(self, event, signals): att = self.axisOrder[self.findAxisIndex(event.x)] # context menu if event.contextRequested: contextMenu = QMenu(self) contextMenu.addAction(u'Select all') contextMenu.addAction(u'Select none') contextMenu.addSeparator() act = QAction(u'Hide Axis', self) contextMenu.addAction(act) if len(self.axisOrder) <= 1: act.setEnabled(False) axesMenu = QMenu(u'Show/Hide Axes', self) axesActions = QActionGroup(self) for a in self.axisOrder: act = QAction(a,self,checkable=True) if self.axes[a].visible: act.toggle() if len(self.axisOrder) <= 1: act.setEnabled(False) axesActions.addAction(act) for act in axesActions.actions(): axesMenu.addAction(act) contextMenu.addMenu(axesMenu) contextMenu.addSeparator() contextMenu.addAction(u'Use as X axis') contextMenu.addAction(u'Use as Y axis') resultAction = contextMenu.exec_(QCursor.pos()) if resultAction != None and resultAction != 0: # Select all if resultAction.text() == u'Select all': self.app.intMan.newOperation(operation.ALL,att=att.dataAxis) # Select none if resultAction.text() == u'Select none': self.app.intMan.newOperation(operation.NONE,att=att.dataAxis) # Hide axis if resultAction.text() == u'Hide Axis': self.toggleVisible(att) # Toggle axis if resultAction.actionGroup() == axesActions: self.toggleVisible(resultAction.text()) # X axis if resultAction.text() == u'Use as X axis': if self.app.currentYattribute != self.app.currentXattribute: self.axes[self.app.currentXattribute].visAxis.handle.background.setAttribute('fill',self.normalHandleColor) self.axes[self.app.currentXattribute].visAxis.handle.originalBackgroundColor = self.normalHandleColor self.axes[att].visAxis.handle.background.setAttribute('fill',self.activeHandleColor) self.axes[att].visAxis.handle.originalBackgroundColor = self.activeHandleColor self.app.notifyAxisChange(att,xAxis=True) # Y axis if resultAction.text() == u'Use as Y axis': if self.app.currentXattribute != self.app.currentYattribute: self.axes[self.app.currentYattribute].visAxis.handle.background.setAttribute('fill',self.normalHandleColor) self.axes[self.app.currentYattribute].visAxis.handle.originalBackgroundColor = self.normalHandleColor self.axes[att].visAxis.handle.background.setAttribute('fill',self.activeHandleColor) self.axes[att].visAxis.handle.originalBackgroundColor = self.activeHandleColor self.app.notifyAxisChange(att,xAxis=False) #if linesMoved: # self.highlightedLayer.refreshLines(self.app.highlightedRsNumbers) return signals
class PluginBaseInstruments(IPlugin): def __init__(self, data_singleton): self.data_singleton = data_singleton self.mw = self.data_singleton.mainWindow self.menu_instruments = None self.base_inst_tool_bar = None self.base_inst_action_group = None self.instruments = [] def name(self): return 'Base Instruments' def version(self): return '0.0.1' def description(self): return 'Base Instruments' def initialize(self): self.instruments.append(EraserInstrument(self.data_singleton)) self.instruments.append(PencilInstrument(self.data_singleton)) self.instruments.append(LineInstrument(self.data_singleton)) self.instruments.append(RectangleInstrument(self.data_singleton)) self.instruments.append(FillInstrument(self.data_singleton)) self.base_inst_tool_bar = self.mw.addToolBar(self.description()) self.base_inst_tool_bar.setObjectName(self.name()) self.base_inst_tool_bar.setToolButtonStyle(Qt.ToolButtonIconOnly) self.base_inst_action_group = QActionGroup(self.base_inst_tool_bar) self.base_inst_action_group.setExclusive(True) self.base_inst_action_group.triggered.connect(lambda x: self.triggered_action_instrument(x)) self.menu_instruments = self.mw.ui.menuInstruments for inst in self.instruments: act = self.base_inst_tool_bar.addAction(inst.name()) # TODO: objectName вида <class 'baseinstruments.rectangleinstrument.RectangleInstrument'> # кажется неудобным, может другое значение составлять act.setObjectName(str(type(inst))) act.setToolTip(inst.description()) if inst.icon(): act.setIcon(inst.icon()) act.setCheckable(True) self.base_inst_action_group.addAction(act) self.menu_instruments.addActions(self.base_inst_action_group.actions()) self.data_singleton.action_inst_dict[act] = inst def destroy(self): self.instruments.clear() self.mw.removeToolBar(self.base_inst_tool_bar) # base_inst_tool_bar удалит и base_inst_action_group, и действия self.base_inst_tool_bar.deleteLater() self.base_inst_tool_bar = None self.base_inst_action_group = None self.data_singleton.action_inst_dict.clear() self.data_singleton.current_instrument = None def triggered_action_instrument(self, action): instrument = self.data_singleton.action_inst_dict[action] self.data_singleton.current_instrument = instrument
class LogFilter(QFrame): def __init__(self, parent=None): super(LogFilter, self).__init__(parent=parent) setup_ui(self) self.filter_model = FilterModel(parent=self) self._viewer = None self.revs_menu = QMenu(parent=self) self.revs_separator = None self.rev_actions = QActionGroup(self) self.rev_actions.addAction(self.action_all_refs) self.select_revs_button.setMenu(self.revs_menu) self.action_all_refs.revs = None self.action_all_refs.triggered.connect(self.show_all_refs) self.action_select_branches.triggered.connect(self.pick_branches) self.filter_text.textEdited.connect(self.filter_text_edited) @property def source_model(self): return self.filter_model.sourceModel() @source_model.setter def source_model(self, model): self.filter_model.setSourceModel(model) self.revs_menu.clear() for action in self.rev_actions.actions(): if action is not self.action_all_refs: self.rev_actions.removeAction(action) self.revs_menu.addAction(self.action_all_refs) if not model.repo.head_ref: self.revs_menu.addAction(self.create_rev_action(model.repo, 'HEAD')) for branch in model.repo.branches: self.revs_menu.addAction(self.create_rev_action(model.repo, branch)) if model.all: self._select_action(self.action_all_refs) else: selected_revs = model.revs if not selected_revs: if model.repo.head_ref: selected_revs = (model.repo.head_ref,) else: selected_revs = ('HEAD',) action = self._find_rev_action(selected_revs) if not action: action = self.create_rev_action(model.repo, model.revs) self.revs_menu.addAction(action) self._select_action(action) self.revs_separator = self.revs_menu.addSeparator() self.revs_menu.addAction(self.action_select_branches) @property def viewer(self): return self._viewer @viewer.setter def viewer(self, new_viewer): self._viewer = new_viewer self._viewer.setModel(self.filter_model) def create_rev_action(self, repo, *revs): action = QAction(self.revs_menu) action.revs = revs action.setText(', '.join(str(rev) for rev in revs)) action.setCheckable(True) action.setActionGroup(self.rev_actions) action.triggered.connect(self._revs_action_triggered) return action def show_all_refs(self): self._select_action(self.action_all_refs) with busy_cursor(): self.source_model.revs = () self.source_model.all = True self.source_model.refresh() def pick_branches(self): dialog = PickBranchesDialog(repo=self.source_model.repo, parent=self) if dialog.exec_() == dialog.Accepted: self.show_revs(*dialog.selected_branches) def _select_action(self, action): action.setChecked(True) self.select_revs_button.setText(action.text()) def _revs_action_triggered(self): self._select_action(self.sender()) with busy_cursor(): self.source_model.revs = self.sender().revs self.source_model.all = False self.source_model.refresh() def _find_rev_action(self, revs): return next((action for action in self.rev_actions.actions() if action.revs == revs), None) def show_revs(self, *revs): action = self._find_rev_action(revs) if not action: action = self.create_rev_action(self.source_model.repo, *revs) self.revs_menu.insertAction(self.revs_separator, action) self._select_action(action) with busy_cursor(): self.source_model.revs = revs self.source_model.all = False self.source_model.refresh() def filter_text_edited(self, text): if text: self.viewer.hideColumn(0) self.filter_model.filters += self.filter_graph_row else: self.filter_model.filters -= self.filter_graph_row self.viewer.showColumn(0) def filter_graph_row(self, graph_row): return commit_matches_text(graph_row.log_entry, self.filter_text.text())