def get_context_menu(self, pos): """ Returns a context menu containing split/collapse actions pos : position (in global coordinates) where the context menu was requested """ menu = Menu() splitter = None splitter = None for tabwidget in self.tabwidgets(): # obtain tabwidget's bounding rectangle in global coordinates global_rect = QtCore.QRect(tabwidget.mapToGlobal(QtCore.QPoint(0, 0)), tabwidget.size()) if global_rect.contains(pos): splitter = tabwidget.parent() # no split/collapse context menu for positions outside any tabwidget # region if not splitter: return # add split actions (only show for non-empty tabwidgets) if not splitter.is_empty(): actions = [ Action( id="split_hor", name="Create new pane to the right", on_perform=lambda: splitter.split(orientation=QtCore.Qt.Horizontal), ), Action( id="split_ver", name="Create new pane to the bottom", on_perform=lambda: splitter.split(orientation=QtCore.Qt.Vertical), ), ] splitgroup = Group(*actions, id="split") menu.append(splitgroup) # add collapse action (only show for collapsible splitters) if splitter.is_collapsible(): if splitter is splitter.parent().leftchild: if splitter.parent().orientation() is QtCore.Qt.Horizontal: text = "Merge with right pane" else: text = "Merge with bottom pane" else: if splitter.parent().orientation() is QtCore.Qt.Horizontal: text = "Merge with left pane" else: text = "Merge with top pane" actions = [Action(id="merge", name=text, on_perform=lambda: splitter.collapse())] collapsegroup = Group(*actions, id="collapse") menu.append(collapsegroup) # return QMenu object return menu
def get_context_menu(self, pos): """ Returns a context menu containing split/collapse actions pos : position (in global coordinates) where the context menu was requested """ menu = Menu() splitter = None splitter = None for tabwidget in self.tabwidgets(): # obtain tabwidget's bounding rectangle in global coordinates global_rect = QtCore.QRect(tabwidget.mapToGlobal(QtCore.QPoint(0, 0)), tabwidget.size()) if global_rect.contains(pos): splitter = tabwidget.parent() # no split/collapse context menu for positions outside any tabwidget # region if not splitter: return # add split actions (only show for non-empty tabwidgets) if not splitter.is_empty(): actions = [Action(id='split_hor', name='Create new pane to the right', on_perform=lambda : splitter.split(orientation= QtCore.Qt.Horizontal)), Action(id='split_ver', name='Create new pane to the bottom', on_perform=lambda : splitter.split(orientation= QtCore.Qt.Vertical))] splitgroup = Group(*actions, id='split') menu.append(splitgroup) # add collapse action (only show for collapsible splitters) if splitter.is_collapsible(): if splitter is splitter.parent().leftchild: if splitter.parent().orientation() is QtCore.Qt.Horizontal: text = 'Merge with right pane' else: text = 'Merge with bottom pane' else: if splitter.parent().orientation() is QtCore.Qt.Horizontal: text = 'Merge with left pane' else: text = 'Merge with top pane' actions = [Action(id='merge', name=text, on_perform=lambda : splitter.collapse())] collapsegroup = Group(*actions, id='collapse') menu.append(collapsegroup) # return QMenu object return menu