def create_action(parent, text, shortcut=None, icon=None, tip=None, toggled=None, triggered=None, data=None, menurole=None, context=Qt.WindowShortcut, option=None, section=None, id_=None, plugin=None, context_name=None, register_action=False, overwrite=False): """Create a QAction""" action = SpyderAction(text, parent, action_id=id_) if triggered is not None: action.triggered.connect(triggered) if toggled is not None: setup_toggled_action(action, toggled, section, option) if icon is not None: if is_text_string(icon): icon = ima.get_icon(icon) action.setIcon(icon) if tip is not None: action.setToolTip(tip) action.setStatusTip(tip) if data is not None: action.setData(to_qvariant(data)) if menurole is not None: action.setMenuRole(menurole) # Workround for Mac because setting context=Qt.WidgetShortcut # there doesn't have any effect if sys.platform == 'darwin': action._shown_shortcut = None if context == Qt.WidgetShortcut: if shortcut is not None: action._shown_shortcut = shortcut else: # This is going to be filled by # main.register_shortcut action._shown_shortcut = 'missing' else: if shortcut is not None: action.setShortcut(shortcut) action.setShortcutContext(context) else: if shortcut is not None: action.setShortcut(shortcut) action.setShortcutContext(context) if register_action: ACTION_REGISTRY.register_reference(action, id_, plugin, context_name, overwrite) return action
def get_action(self, name: str, context: Optional[str] = None, plugin: Optional[str] = None) -> Any: """ Return an action by name, context and plugin. Parameters ---------- name: str Name of the action to retrieve. context: Optional[str] Widget or context identifier under which the action was stored. If None, then `CONTEXT_NAME` is used instead plugin: Optional[str] Name of the plugin where the action was defined. If None, then `PLUGIN_NAME` is used. Returns ------- action: SpyderAction The corresponding action 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 ACTION_REGISTRY.get_reference(name, plugin, context)
def get_action(self, name, context: Optional[str] = None, plugin: Optional[str] = None): """ Return action by name. """ plugin = self.PLUGIN_NAME if plugin is None else plugin context = self.CONTEXT_NAME if context is None else context return ACTION_REGISTRY.get_reference(name, plugin, context)
def get_actions(self, context: Optional[str] = None, plugin: Optional[str] = None) -> dict: """ Return all actions defined by a context on a given plugin. Parameters ---------- context: Optional[str] Widget or context identifier under which the actions were stored. If None, then `CONTEXT_NAME` is used instead plugin: Optional[str] Name of the plugin where the actions were defined. If None, then `PLUGIN_NAME` is used. Returns ------- actions: Dict[str, SpyderAction] A dictionary that maps string keys to their corresponding actions. Notes ----- 1. Actions should be created once. Creating new actions on menu popup is *highly* discouraged. 2. Actions can be created directly on a PluginMainWidget or PluginMainContainer subclass. Child widgets can also create actions, but they need to subclass SpyderWidgetMixin. 3. PluginMainWidget or PluginMainContainer will collect any actions defined in subwidgets (if defined) and expose them in the get_actions method at the plugin level. 4. Any action created this way is now exposed as a possible shortcut automatically without manual shortcut registration. If an option is found in the config system then it is assigned, otherwise it's left with an empty shortcut. 5. There is no need to override this method. """ plugin = self.PLUGIN_NAME if plugin is None else plugin context = self.CONTEXT_NAME if context is None else context return ACTION_REGISTRY.get_references(plugin, context)