11from krita
import Krita, Extension, FileDialog
17from builtins
import i18n, Application
19from .plugin_importer
import PluginImporter, PluginImportError
20from .plugin_downloader
import download_plugin, PluginDownloadError
33 action = window.createAction(
34 'plugin_importer_file',
35 i18n(
'Import Python Plugin from File...'),
38 action = window.createAction(
39 'plugin_importer_web',
40 i18n(
'Import Python Plugin from Web...'),
45 reply = QMessageBox.question(
46 self.
parent.activeWindow().qwindow(),
47 i18n(
'Overwrite Plugin'),
48 i18n(
'The plugin "%s" already exists. Overwrite it?') % (
50 QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)
51 return reply == QMessageBox.StandardButton.Yes
56 i18n(
'The following plugins were imported:'),
60 for plugin
in plugins:
61 txt.append(
'<li>%s</li>' % plugin[
'ui_name'])
64 txt.append(
'<p><strong>')
66 'Enable plugins now? (Requires restart)'))
67 txt.append(
'</strong></p>')
69 reply = QMessageBox.question(
70 self.
parent.activeWindow().qwindow(),
71 i18n(
'Activate Plugins?'),
73 QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)
74 return reply == QMessageBox.StandardButton.Yes
77 msg =
'<p>%s</p><pre>%s</pre>' % (
78 i18n(
'Error during import:'),
79 html.escape(str(error)))
81 self.
parent.activeWindow().qwindow(),
86 for plugin
in plugins:
87 Application.writeSetting(
89 'enable_%s' % plugin[
'name'],
97 '<p><strong>Enter download URL</strong></p>'
100 '<li>Zip download link (http://example.com/plugin.zip)</li>'
101 '<li>Github repository (https://github.com/test/plugin)</li>'
103 url = QInputDialog.getText(
104 self.
parent.activeWindow().qwindow(),
105 i18n(
'Import Plugin'),
108 with tempfile.TemporaryDirectory()
as tmpdir:
110 zipfile = download_plugin(url=url, dest_dir=tmpdir)
111 except PluginDownloadError
as e:
118 self.
parent.activeWindow().qwindow(),
119 i18n(
'Import Plugin'),
120 os.path.expanduser(
'~'),
121 '%s (*.zip)' % i18n(
'Zip Archives')
136 except PluginImportError
as e:
static QString getOpenFileName(QWidget *parent=nullptr, const QString &caption=QString(), const QString &directory=QString(), const QString &filter=QString(), const QString &selectedFilter=QString(), const QString &dialogName=QString())
Create and show a file dialog and return the name of an existing file selected by the user.
static Krita * instance()
instance retrieve the singleton instance of the Application object.
import_plugin_from_file(self)
confirm_overwrite(self, plugin)
import_plugin_from_web(self)
display_errors(self, error)
createActions(self, window)
confirm_activate(self, plugins)
activate_plugins(self, plugins)