Krita Source Code Documentation
Loading...
Searching...
No Matches
KritaPyQtPlugin Class Reference

#include <plugin.h>

+ Inheritance diagram for KritaPyQtPlugin:

Public Member Functions

 KritaPyQtPlugin (QObject *parent, const QVariantList &)
 
virtual ~KritaPyQtPlugin ()
 

Private Attributes

bool m_autoReload {false}
 
PythonPluginManagerpluginManager {nullptr}
 

Detailed Description

Definition at line 17 of file plugin.h.

Constructor & Destructor Documentation

◆ KritaPyQtPlugin()

KritaPyQtPlugin::KritaPyQtPlugin ( QObject * parent,
const QVariantList &  )

Definition at line 22 of file plugin.cpp.

23 : QObject(parent)
24 , m_autoReload(false)
25{
26 dbgScript << "Loading Python plugin";
27
29 switch (initResult) {
31 break;
33 qWarning() << i18n("Cannot load Python library");
34 return;
36 qWarning() << i18n("Cannot set Python paths");
37 return;
39 qWarning() << i18n("Cannot load built-in pykrita module");
40 return;
41 default:
42 qWarning() << i18n("Unexpected error initializing python plugin.");
43 return;
44 }
45
47
50
51 //load and save preferences
52 //if something in kritarc is missing, then the default from this load function will be used and saved back to kconfig.
53 //this way, cfg.readEntry() in any part won't be able to set its own default
54 KisPreferenceSet* settings = settingsFactory->createPreferenceSet();
56 settings->loadPreferences();
57 settings->savePreferences();
58 delete settings;
59
60 preferenceSetRegistry->add("PyQtPluginSettingsFactory", settingsFactory);
61
62 // Try to import the `pykrita` module
64 PyObject* pykritaPackage = py.moduleImport("pykrita");
65 pykritaPackage = py.moduleImport("krita");
66
67 if (pykritaPackage) {
68 dbgScript << "Loaded pykrita, now load plugins";
71 //py.functionCall("_pykritaLoaded", PyKrita::Python::PYKRITA_ENGINE);
72 } else {
73 dbgScript << "Cannot load pykrita module";
74 }
75
76 Q_FOREACH (Extension *extension, Krita::instance()->extensions()) {
77 extension->setup();
78 }
79
80 // This ensures that QObject's owned by Python are destructed before
81 // the destructor of QCoreApplication is called, in order to prevent
82 // a crash on exit.
83 // See https://bugs.kde.org/show_bug.cgi?id=417465
84 // XXX: Commented out because this still can cause crashes:
85 // https://invent.kde.org/graphics/krita/-/commit/a0c29913114164ff3f2ba4e255ccee1c52cb3e86#note_260688
86 // connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, this, []() { PyKrita::finalize(); });
87}
static KisPreferenceSetRegistry * instance()
virtual void loadPreferences()=0
virtual void savePreferences() const =0
bool m_autoReload
Definition plugin.h:25
PythonPluginManager * pluginManager
Definition plugin.h:24
static Krita * instance()
instance retrieve the singleton instance of the Application object.
Definition Krita.cpp:390
PyObject * moduleImport(const char *moduleName)
KisPreferenceSet * createPreferenceSet() override
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
#define dbgScript
Definition kis_debug.h:56
@ INIT_CANNOT_LOAD_PYKRITA_MODULE
Definition utilities.h:32
@ INIT_CANNOT_LOAD_PYTHON_LIBRARY
Definition utilities.h:30
@ INIT_CANNOT_SET_PYTHON_PATHS
Definition utilities.h:31
@ INIT_OK
Definition utilities.h:29
InitResult initialize()
Definition utilities.cpp:44
PythonPluginManager * pluginManager()
Definition utilities.cpp:92

References KoGenericRegistry< T >::add(), PyQtPluginSettingsFactory::createPreferenceSet(), dbgScript, PyKrita::INIT_CANNOT_LOAD_PYKRITA_MODULE, PyKrita::INIT_CANNOT_LOAD_PYTHON_LIBRARY, PyKrita::INIT_CANNOT_SET_PYTHON_PATHS, PyKrita::INIT_OK, PyKrita::initialize(), Krita::instance(), KisPreferenceSetRegistry::instance(), KIS_SAFE_ASSERT_RECOVER_RETURN, KisPreferenceSet::loadPreferences(), PyKrita::Python::moduleImport(), PyKrita::pluginManager(), KisPreferenceSet::savePreferences(), PythonPluginManager::scanPlugins(), and PythonPluginManager::tryLoadEnabledPlugins().

◆ ~KritaPyQtPlugin()

KritaPyQtPlugin::~KritaPyQtPlugin ( )
virtual

Definition at line 89 of file plugin.cpp.

90{
91 // Don't call PyKrita::finalize here, because that can result in a crash
92 // deep inside Qt.
93}

Member Data Documentation

◆ m_autoReload

bool KritaPyQtPlugin::m_autoReload {false}
private

Definition at line 25 of file plugin.h.

25{false};

◆ pluginManager

PythonPluginManager* KritaPyQtPlugin::pluginManager {nullptr}
private

Definition at line 24 of file plugin.h.

24{nullptr};

The documentation for this class was generated from the following files: