Example #1
0
    def check_for_add_to_toolbars(self, plugin, previously_installed=True):
        from calibre.gui2.preferences.toolbar import ConfigWidget
        from calibre.customize import InterfaceActionBase, EditBookToolPlugin

        if isinstance(plugin, EditBookToolPlugin):
            return self.check_for_add_to_editor_toolbar(
                plugin, previously_installed)

        if not isinstance(plugin, InterfaceActionBase):
            return

        all_locations = OrderedDict(ConfigWidget.LOCATIONS)
        try:
            plugin_action = plugin.load_actual_plugin(self.gui)
        except:
            # Broken plugin, fails to initialize. Given that, it's probably
            # already configured, so we can just quit.
            return
        installed_actions = OrderedDict([
            (key, list(gprefs.get('action-layout-' + key, [])))
            for key in all_locations
        ])

        # If this is an update, do nothing
        if previously_installed:
            return
        # If already installed in a GUI container, do nothing
        for action_names in itervalues(installed_actions):
            if plugin_action.name in action_names:
                return

        allowed_locations = [(key, text)
                             for key, text in iteritems(all_locations)
                             if key not in plugin_action.dont_add_to]
        if not allowed_locations:
            return  # This plugin doesn't want to live in the GUI

        from calibre.gui2.dialogs.choose_plugin_toolbars import ChoosePluginToolbarsDialog
        d = ChoosePluginToolbarsDialog(self, plugin_action, allowed_locations)
        if d.exec() == QDialog.DialogCode.Accepted:
            for key, text in d.selected_locations():
                installed_actions = list(gprefs.get('action-layout-' + key,
                                                    []))
                installed_actions.append(plugin_action.name)
                gprefs['action-layout-' + key] = tuple(installed_actions)