def create_toolbar(self, toolbar_id): """ Create and add an auxiliary toolbar to the top of the plugin. Parameters ---------- toolbar_id: str Unique toolbar string identifier. Returns ------- SpyderPluginToolbar The auxiliary toolbar that was created and added to the plugin interface. """ toolbar = MainWidgetToolbar(parent=self) toolbar.ID = toolbar_id TOOLBAR_REGISTRY.register_reference( toolbar, toolbar_id, self.PLUGIN_NAME, self.CONTEXT_NAME) self._auxiliary_toolbars[toolbar_id] = toolbar self._toolbars_layout.addWidget(toolbar) return toolbar
def create_application_toolbar(self, toolbar_id, title): """ Create an application toolbar and add it to the main window. Parameters ---------- toolbar_id: str The toolbar unique identifier string. title: str The localized toolbar title to be displayed. Returns ------- spyder.api.widgets.toolbar.ApplicationToolbar The created application toolbar. """ if toolbar_id in self._APPLICATION_TOOLBARS: raise SpyderAPIError( 'Toolbar with ID "{}" already added!'.format(toolbar_id)) toolbar = ApplicationToolbar(self, title) toolbar.ID = toolbar_id toolbar.setObjectName(toolbar_id) TOOLBAR_REGISTRY.register_reference( toolbar, toolbar_id, self.PLUGIN_NAME, self.CONTEXT_NAME) self._APPLICATION_TOOLBARS[toolbar_id] = toolbar return toolbar
def create_toolbar(self, name: str) -> QToolBar: """ Create a Spyder toolbar. """ toolbar = QToolBar(self) TOOLBAR_REGISTRY.register_reference(toolbar, name, self.PLUGIN_NAME, self.CONTEXT_NAME) return toolbar
def get_toolbar(self, name: str, context: Optional[str] = None, plugin: Optional[str] = None) -> QToolBar: """ Return toolbar by name, plugin and context. Parameters ---------- name: str Name of the toolbar to retrieve. context: Optional[str] Widget or context identifier under which the toolbar was stored. If None, then `CONTEXT_NAME` is used instead plugin: Optional[str] Name of the plugin where the toolbar was defined. If None, then `PLUGIN_NAME` is used. Returns ------- toolbar: QToolBar The corresponding toolbar stored under the given `name`, `context` and `plugin`. Raises ------ KeyError If either of `name`, `context` or `plugin` keys do not exist in the toolbar registry. """ plugin = self.PLUGIN_NAME if plugin is None else plugin context = self.CONTEXT_NAME if context is None else context return TOOLBAR_REGISTRY.get_reference(name, plugin, context)
def get_toolbars(self, context: Optional[str] = None, plugin: Optional[str] = None) -> Dict[str, QToolBar]: """ Return all toolbars defined by a context on a given plugin. Parameters ---------- context: Optional[str] Widget or context identifier under which the toolbars were stored. If None, then `CONTEXT_NAME` is used instead plugin: Optional[str] Name of the plugin where the toolbars were defined. If None, then `PLUGIN_NAME` is used. Returns ------- toolbars: Dict[str, QToolBar] A dictionary that maps string keys to their corresponding toolbars. """ plugin = self.PLUGIN_NAME if plugin is None else plugin context = self.CONTEXT_NAME if context is None else context return TOOLBAR_REGISTRY.get_references(plugin, context)
def __init__(self, name, plugin, parent=None): if PYQT5: super().__init__(parent=parent, class_parent=plugin) else: QWidget.__init__(self, parent) SpyderWidgetMixin.__init__(self, class_parent=plugin) # Attributes # -------------------------------------------------------------------- self._is_tab = False self._name = name self._plugin = plugin self._parent = parent self._default_margins = None self.is_maximized = None self.is_visible = None self.dock_action = None self.undock_action = None self.close_action = None self._toolbars_already_rendered = False # Attribute used to access the action, toolbar, toolbutton and menu # registries self.PLUGIN_NAME = name # We create our toggle action instead of using the one that comes with # dockwidget because it was not possible to raise and focus the plugin self.toggle_view_action = None self._toolbars = OrderedDict() self._auxiliary_toolbars = OrderedDict() # Widgets # -------------------------------------------------------------------- self.windowwidget = None self.dockwidget = None self._icon = QIcon() self._spinner = None if self.ENABLE_SPINNER: self._spinner = create_waitspinner(size=16, parent=self) self._corner_widget = MainCornerWidget( parent=self, name=PluginMainWidgetWidgets.CornerWidget, ) self._corner_widget.ID = 'main_corner' self._main_toolbar = MainWidgetToolbar( parent=self, title=_("Main widget toolbar"), ) self._main_toolbar.ID = 'main_toolbar' TOOLBAR_REGISTRY.register_reference( self._main_toolbar, self._main_toolbar.ID, self.PLUGIN_NAME, self.CONTEXT_NAME) self._corner_toolbar = MainWidgetToolbar( parent=self, title=_("Main widget corner toolbar"), ) self._corner_toolbar.ID = 'corner_toolbar', TOOLBAR_REGISTRY.register_reference( self._corner_toolbar, self._corner_toolbar.ID, self.PLUGIN_NAME, self.CONTEXT_NAME) self._corner_toolbar.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding) self._options_menu = self.create_menu( PluginMainWidgetMenus.Options, title=_('Options menu'), ) # Layout # -------------------------------------------------------------------- # These margins are necessary to give some space between the widgets # inside this widget and the window vertical separator. self._margin_left = 1 self._margin_right = 1 self._main_layout = QVBoxLayout() self._toolbars_layout = QVBoxLayout() self._main_toolbar_layout = QHBoxLayout() self._toolbars_layout.setContentsMargins( self._margin_left, 0, self._margin_right, 0) self._toolbars_layout.setSpacing(0) self._main_toolbar_layout.setContentsMargins(0, 0, 0, 0) self._main_toolbar_layout.setSpacing(0) self._main_layout.setContentsMargins(0, 0, 0, 0) self._main_layout.setSpacing(0) # Add inititals layouts self._main_toolbar_layout.addWidget(self._main_toolbar, stretch=10000) self._main_toolbar_layout.addWidget(self._corner_toolbar, stretch=1) self._toolbars_layout.addLayout(self._main_toolbar_layout) self._main_layout.addLayout(self._toolbars_layout, stretch=1)