diff --git a/krita/plugins/extensions/pykrita/libkis/CMakeLists.txt b/krita/plugins/extensions/pykrita/libkis/CMakeLists.txt index b9c25a1f86..18aa1370bb 100644 --- a/krita/plugins/extensions/pykrita/libkis/CMakeLists.txt +++ b/krita/plugins/extensions/pykrita/libkis/CMakeLists.txt @@ -1,30 +1,30 @@ include_directories(${KOMAIN_INCLUDES} ${KRITA_INCLUDES}) set(kritalibkis_LIB_SRCS application.cpp document.cpp image.cpp mainwindow.cpp - module.cpp + krita.cpp node.cpp view.cpp ) kde4_add_library(kritalibkis SHARED ${kritalibkis_LIB_SRCS} ) if (WIN32) target_link_libraries(kritalibkis kritaui kritaimage ${WIN32_PLATFORM_NET_LIBS}) else (WIN32) target_link_libraries(kritalibkis kritaui kritaimage) endif (WIN32) target_link_libraries(kritalibkis LINK_INTERFACE_LIBRARIES kritaimage kritaui) set_target_properties(kritalibkis PROPERTIES VERSION ${GENERIC_CALLIGRA_LIB_VERSION} SOVERSION ${GENERIC_CALLIGRA_LIB_SOVERSION} ) install(TARGETS kritalibkis ${INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/krita/plugins/extensions/pykrita/libkis/document.cpp b/krita/plugins/extensions/pykrita/libkis/document.cpp index 1e6e3f912d..eacb5d9fcf 100644 --- a/krita/plugins/extensions/pykrita/libkis/document.cpp +++ b/krita/plugins/extensions/pykrita/libkis/document.cpp @@ -1,15 +1,15 @@ #include "document.h" #include "image.h" #include -Document::Document(KisDoc2 *document, QObject *parent) +Document::Document(QObject *document, QObject *parent) : QObject(parent) - , m_document(document) + , m_document(qobject_cast(document)) { } Image *Document::image() { - return new Image(m_document->image(), this); + return new Image(m_document->image().data(), this); } diff --git a/krita/plugins/extensions/pykrita/libkis/document.h b/krita/plugins/extensions/pykrita/libkis/document.h index d85ea1ed48..fbc4cfc1d6 100644 --- a/krita/plugins/extensions/pykrita/libkis/document.h +++ b/krita/plugins/extensions/pykrita/libkis/document.h @@ -1,26 +1,26 @@ #ifndef LIBKIS_DOCUMENT_H #define LIBKIS_DOCUMENT_H #include #include class KisDoc2; class Image; class LIBKIS_EXPORT Document : public QObject { Q_OBJECT public: - explicit Document(KisDoc2 *document, QObject *parent = 0); + explicit Document(QObject *document, QObject *parent = 0); Image *image(); signals: public slots: private: KisDoc2 *m_document; }; #endif // LIBKIS_DOCUMENT_H diff --git a/krita/plugins/extensions/pykrita/libkis/image.cpp b/krita/plugins/extensions/pykrita/libkis/image.cpp index 2a85ed6176..83316b0b41 100644 --- a/krita/plugins/extensions/pykrita/libkis/image.cpp +++ b/krita/plugins/extensions/pykrita/libkis/image.cpp @@ -1,7 +1,7 @@ #include "image.h" -Image::Image(KisImageWSP image, QObject *parent) +Image::Image(QObject *image, QObject *parent) : QObject(parent) - , m_image(image) + , m_image(qobject_cast(image)) { } diff --git a/krita/plugins/extensions/pykrita/libkis/image.h b/krita/plugins/extensions/pykrita/libkis/image.h index 9a877e666c..4f23613608 100644 --- a/krita/plugins/extensions/pykrita/libkis/image.h +++ b/krita/plugins/extensions/pykrita/libkis/image.h @@ -1,21 +1,21 @@ #ifndef LIBKIS_IMAGE_H #define LIBKIS_IMAGE_H #include #include #include class LIBKIS_EXPORT Image : public QObject { Q_OBJECT public: - explicit Image(KisImageWSP image, QObject *parent = 0); + explicit Image(QObject *image, QObject *parent = 0); signals: public slots: private: KisImageWSP m_image; }; #endif // LIBKIS_IMAGE_H diff --git a/krita/plugins/extensions/pykrita/libkis/module.cpp b/krita/plugins/extensions/pykrita/libkis/krita.cpp similarity index 83% rename from krita/plugins/extensions/pykrita/libkis/module.cpp rename to krita/plugins/extensions/pykrita/libkis/krita.cpp index c9d15e4f0c..d12fc7733d 100644 --- a/krita/plugins/extensions/pykrita/libkis/module.cpp +++ b/krita/plugins/extensions/pykrita/libkis/krita.cpp @@ -1,60 +1,60 @@ -#include "module.h" +#include "krita.h" #include #include #include #include "kis_view2.h" #include "kis_doc2.h" #include "kis_image.h" -Module::Module(QObject *parent) : +Krita::Krita(QObject *parent) : QObject(parent) { } -QList Module::mainWindows() +QList Krita::mainWindows() { QList ret; foreach(KoPart *part, koApp->partList()) { if (part) { foreach(KoMainWindow *mainWin, part->mainWindows()) { ret << new MainWindow(mainWin, this); } } } return ret; } -QList Module::views() +QList Krita::views() { QList ret; foreach(MainWindow *mainWin, mainWindows()) { ret << mainWin->views(); } return ret; } -QList Module::documents() +QList Krita::documents() { QList ret; foreach(KoPart *part, koApp->partList()) { if (part) { KisDoc2 *doc = qobject_cast(part->document()); if (doc) { ret << new Document(doc, this); } } } return ret; } -QList Module::images() +QList Krita::images() { QList ret; foreach(Document *doc, documents()) { ret << doc->image(); } return ret; } diff --git a/krita/plugins/extensions/pykrita/libkis/module.h b/krita/plugins/extensions/pykrita/libkis/krita.h similarity index 69% rename from krita/plugins/extensions/pykrita/libkis/module.h rename to krita/plugins/extensions/pykrita/libkis/krita.h index 489882ae28..c04839e1a4 100644 --- a/krita/plugins/extensions/pykrita/libkis/module.h +++ b/krita/plugins/extensions/pykrita/libkis/krita.h @@ -1,33 +1,33 @@ -#ifndef LIBKIS_MODULE_H -#define LIBKIS_MODULE_H +#ifndef LIBKIS_KRITA_H +#define LIBKIS_KRITA_H #include #include #include "application.h" #include "mainwindow.h" #include "view.h" #include "document.h" #include "image.h" #include -class LIBKIS_EXPORT Module : public QObject +class LIBKIS_EXPORT Krita : public QObject { Q_OBJECT public: - explicit Module(QObject *parent = 0); + explicit Krita(QObject *parent = 0); QList mainWindows(); QList views(); QList documents(); QList images(); signals: public slots: private: }; -#endif // LIBKIS_MODULE_H +#endif // LIBKIS_KRITA_H diff --git a/krita/plugins/extensions/pykrita/libkis/mainwindow.cpp b/krita/plugins/extensions/pykrita/libkis/mainwindow.cpp index cc330f26d4..1a7abe7598 100644 --- a/krita/plugins/extensions/pykrita/libkis/mainwindow.cpp +++ b/krita/plugins/extensions/pykrita/libkis/mainwindow.cpp @@ -1,22 +1,22 @@ #include "mainwindow.h" #include #include #include "view.h" -MainWindow::MainWindow(KoMainWindow *mainWin, QObject *parent) +MainWindow::MainWindow(QObject *mainWin, QObject *parent) : QObject(parent) - , m_mainWindow(mainWin) + , m_mainWindow(qobject_cast(mainWin)) { } QList MainWindow::views() { QList ret; KisView2 *view = qobject_cast(m_mainWindow->rootView()); if (view) { ret << new View(view, this); } return ret; } diff --git a/krita/plugins/extensions/pykrita/libkis/mainwindow.h b/krita/plugins/extensions/pykrita/libkis/mainwindow.h index 66efc8956b..3304859fba 100644 --- a/krita/plugins/extensions/pykrita/libkis/mainwindow.h +++ b/krita/plugins/extensions/pykrita/libkis/mainwindow.h @@ -1,27 +1,27 @@ #ifndef LIBKIS_MAINWINDOW_H #define LIBKIS_MAINWINDOW_H #include #include class KoMainWindow; #include class LIBKIS_EXPORT MainWindow : public QObject { Q_OBJECT public: - explicit MainWindow(KoMainWindow *mainWin, QObject *parent = 0); + explicit MainWindow(QObject *mainWin, QObject *parent = 0); QList views(); signals: public slots: private: KoMainWindow *m_mainWindow; }; #endif // MAINWINDOW_H diff --git a/krita/plugins/extensions/pykrita/libkis/view.cpp b/krita/plugins/extensions/pykrita/libkis/view.cpp index 61cf272f5c..90d1084212 100644 --- a/krita/plugins/extensions/pykrita/libkis/view.cpp +++ b/krita/plugins/extensions/pykrita/libkis/view.cpp @@ -1,7 +1,9 @@ #include "view.h" -View::View(KisView2 *view, QObject *parent) +#include + +View::View(QObject *view, QObject *parent) : QObject(parent) - , m_view(view) + , m_view(qobject_cast(view)) { } diff --git a/krita/plugins/extensions/pykrita/libkis/view.h b/krita/plugins/extensions/pykrita/libkis/view.h index 37bc15826d..b76069e093 100644 --- a/krita/plugins/extensions/pykrita/libkis/view.h +++ b/krita/plugins/extensions/pykrita/libkis/view.h @@ -1,26 +1,26 @@ #ifndef LIBKIS_VIEW_H #define LIBKIS_VIEW_H #include #include class KisView2; class LIBKIS_EXPORT View : public QObject { Q_OBJECT public: - explicit View(KisView2 *view, QObject *parent = 0); + explicit View(QObject *view, QObject *parent = 0); signals: public slots: private: KisView2 *m_view; }; #endif // LIBKIS_VIEW_H diff --git a/krita/plugins/extensions/pykrita/sip/CMakeLists.txt b/krita/plugins/extensions/pykrita/sip/CMakeLists.txt index f7cc864ae1..55a7a0fe28 100644 --- a/krita/plugins/extensions/pykrita/sip/CMakeLists.txt +++ b/krita/plugins/extensions/pykrita/sip/CMakeLists.txt @@ -1,19 +1,21 @@ include(SIPMacros) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../libkis) + set(SIP_INCLUDES ${PYQT4_SIP_DIR} ./krita) set(SIP_CONCAT_PARTS 1) set(SIP_TAGS ALL WS_X11 ${PYQT4_VERSION_TAG}) if(PYQT4_VERSION STRLESS "040905") set(SIP_EXTRA_OPTIONS -g) else (PYQT4_VERSION STRLESS "040905") # Disable QVector for newer PyQt set(SIP_EXTRA_OPTIONS -g -x PyKDE_QVector) endif(PYQT4_VERSION STRLESS "040905") add_sip_python_module(PyKrita4.krita ./krita/kritamod.sip kritalibkis kritaui kritaimage kritalibbrush) install(FILES ./__init__.py DESTINATION ${PYTHON_SITE_PACKAGES_INSTALL_DIR}/PyKrita4/) diff --git a/krita/plugins/extensions/pykrita/sip/krita/application.sip b/krita/plugins/extensions/pykrita/sip/krita/application.sip index e8a24ca693..2cc0d337d5 100644 --- a/krita/plugins/extensions/pykrita/sip/krita/application.sip +++ b/krita/plugins/extensions/pykrita/sip/krita/application.sip @@ -1,14 +1,12 @@ -%Module PyKrita4.Application - %Import QtCore/QtCoremod.sip %Import QtGui/QtGuimod.sip class Application : public QObject { %TypeHeaderCode -#include <../../libkis/application.h> +#include "application.h" %End public: explicit Application(QObject *parent /TransferThis/ = 0); }; diff --git a/krita/plugins/extensions/pykrita/sip/krita/document.sip b/krita/plugins/extensions/pykrita/sip/krita/document.sip index 9b3281bcac..8a3acc74bf 100644 --- a/krita/plugins/extensions/pykrita/sip/krita/document.sip +++ b/krita/plugins/extensions/pykrita/sip/krita/document.sip @@ -1,16 +1,14 @@ -%Module PyKrita4.Document - %Import QtCore/QtCoremod.sip %Import QtGui/QtGuimod.sip class Document : public QObject { %TypeHeaderCode -#include <../../libkis/document.h> +#include "document.h" %End public: - explicit Document(void */In/, QObject *parent /TransferThis/ = 0); + explicit Document(QObject *document, QObject *parent /TransferThis/ = 0); Image *image(); }; diff --git a/krita/plugins/extensions/pykrita/sip/krita/image.sip b/krita/plugins/extensions/pykrita/sip/krita/image.sip index 5c18f4db1d..8789487d8b 100644 --- a/krita/plugins/extensions/pykrita/sip/krita/image.sip +++ b/krita/plugins/extensions/pykrita/sip/krita/image.sip @@ -1,15 +1,13 @@ -%Module PyKrita4.Image - %Import QtCore/QtCoremod.sip %Import QtGui/QtGuimod.sip class Image : public QObject { %TypeHeaderCode -#include <../../libkis/image.h> +#include "image.h" %End public: - explicit Image(void */In/, QObject *parent /TransferThis/ = 0); + explicit Image(QObject *image, QObject *parent /TransferThis/ = 0); -}; \ No newline at end of file +}; diff --git a/krita/plugins/extensions/pykrita/sip/krita/module.sip b/krita/plugins/extensions/pykrita/sip/krita/krita.sip similarity index 64% rename from krita/plugins/extensions/pykrita/sip/krita/module.sip rename to krita/plugins/extensions/pykrita/sip/krita/krita.sip index 53030867e6..9a7d30ecfd 100644 --- a/krita/plugins/extensions/pykrita/sip/krita/module.sip +++ b/krita/plugins/extensions/pykrita/sip/krita/krita.sip @@ -1,21 +1,19 @@ -%Module PyKrita4.Module - %Import QtCore/QtCoremod.sip %Import QtGui/QtGuimod.sip -class Module : public QObject +class Krita : public QObject { %TypeHeaderCode -#include +#include "krita.h" %End public: - Module(QObject *parent /TransferThis/ = 0); + Krita(QObject *parent /TransferThis/ = 0); QList mainWindows(); QList views(); QList documents(); QList images(); }; diff --git a/krita/plugins/extensions/pykrita/sip/krita/kritamod.sip b/krita/plugins/extensions/pykrita/sip/krita/kritamod.sip index 94256ec677..af67f6f2e8 100644 --- a/krita/plugins/extensions/pykrita/sip/krita/kritamod.sip +++ b/krita/plugins/extensions/pykrita/sip/krita/kritamod.sip @@ -1,20 +1,20 @@ %Module PyKrita4.krita %Import QtCore/QtCoremod.sip %Import QtGui/QtGuimod.sip %ModuleHeaderCode #pragma GCC visibility push(default) %End %Import QtCore/QtCoremod.sip %Import QtGui/QtGuimod.sip %Import QtXml/QtXmlmod.sip %Include application.sip %Include document.sip %Include image.sip %Include mainwindow.sip -%Include module.sip +%Include krita.sip %Include node.sip -%Include view.sip \ No newline at end of file +%Include view.sip diff --git a/krita/plugins/extensions/pykrita/sip/krita/mainwindow.sip b/krita/plugins/extensions/pykrita/sip/krita/mainwindow.sip index 413998bab7..de0757005c 100644 --- a/krita/plugins/extensions/pykrita/sip/krita/mainwindow.sip +++ b/krita/plugins/extensions/pykrita/sip/krita/mainwindow.sip @@ -1,16 +1,14 @@ -%Module PyKrita4.MainWindow - %Import QtCore/QtCoremod.sip %Import QtGui/QtGuimod.sip class MainWindow : public QObject { %TypeHeaderCode -#include +#include "mainwindow.h" %End public: - MainWindow(void */In/, QObject *parent /TransferThis/ = 0); + MainWindow(QObject *mainWin, QObject *parent /TransferThis/ = 0); QList views(); }; diff --git a/krita/plugins/extensions/pykrita/sip/krita/node.sip b/krita/plugins/extensions/pykrita/sip/krita/node.sip index d3465c5823..d81dcb22d6 100644 --- a/krita/plugins/extensions/pykrita/sip/krita/node.sip +++ b/krita/plugins/extensions/pykrita/sip/krita/node.sip @@ -1,16 +1,14 @@ -%Module PyKrita4.Node - %Import QtCore/QtCoremod.sip %Import QtGui/QtGuimod.sip class Node : public QObject { %TypeHeaderCode -#include <../../libkis/node.h> +#include "node.h" %End public: explicit Node(QObject *parent /TransferThis/ = 0); }; diff --git a/krita/plugins/extensions/pykrita/sip/krita/view.sip b/krita/plugins/extensions/pykrita/sip/krita/view.sip index 78d915d69e..b8ddd5754e 100644 --- a/krita/plugins/extensions/pykrita/sip/krita/view.sip +++ b/krita/plugins/extensions/pykrita/sip/krita/view.sip @@ -1,15 +1,13 @@ -%Module PyKrita4.View - %Import QtCore/QtCoremod.sip %Import QtGui/QtGuimod.sip class View : public QObject { %TypeHeaderCode -#include <../../libkis/view.h> +#include "view.h" %End public: - explicit View(void */In/, QObject *parent /TransferThis/ = 0); + explicit View(QObject *view, QObject *parent /TransferThis/ = 0); }; diff --git a/krita/plugins/extensions/pykrita/src/krita/api.py b/krita/plugins/extensions/pykrita/src/krita/api.py index 53bb8c43b5..debe9ee5ea 100644 --- a/krita/plugins/extensions/pykrita/src/krita/api.py +++ b/krita/plugins/extensions/pykrita/src/krita/api.py @@ -1,49 +1,51 @@ # -*- coding: utf-8 -*- # This file is part of Pate, Kate' Python scripting plugin. # # Copyright (C) 2006 Paul Giannaros # Copyright (C) 2013 Shaheed Haque # Copyright (C) 2013 Alex Turbov # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) version 3. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public License # along with this library; see the file COPYING.LIB. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. '''Provide shortcuts to access kate internals from plugins''' import contextlib import os import sys +from PyKrita4.krita import * + import pykrita def objectIsAlive(obj): ''' Test whether an object is alive; that is, whether the pointer to the object still exists. ''' import sip try: sip.unwrapinstance(obj) except RuntimeError: return False return True def kDebug(text): '''Use KDE way to show debug info TODO Add a way to control debug output from partucular plugins (?) ''' plugin = sys._getframe(1).f_globals['__name__'] - pate.kDebug('{}: {}'.format(plugin, text)) + pykrita.kDebug('{}: {}'.format(plugin, text)) diff --git a/krita/plugins/extensions/pykrita/src/plugin.cpp b/krita/plugins/extensions/pykrita/src/plugin.cpp index e767545979..02b192c843 100644 --- a/krita/plugins/extensions/pykrita/src/plugin.cpp +++ b/krita/plugins/extensions/pykrita/src/plugin.cpp @@ -1,79 +1,77 @@ /* * Copyright (c) 2014 Boudewijn Rempt (boud@valdyas.org) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "plugin.h" #include "engine.h" #include "utilities.h" #include #include #include #include #include #include K_PLUGIN_FACTORY(KritaPyQtPluginFactory, registerPlugin();) K_EXPORT_PLUGIN(KritaPyQtPluginFactory("krita")) KritaPyQtPlugin::KritaPyQtPlugin(QObject *parent, const QVariantList &) : KisViewPlugin(parent, "kritaplugins/kritapykritaplugin.rc") , m_engineFailureReason(m_engine.tryInitializeGetFailureReason()) , m_autoReload(false) { - qDebug() << ">>>>>>>>>>>>>>>" << m_engineFailureReason; - KisPreferenceSetRegistry *preferenceSetRegistry = KisPreferenceSetRegistry::instance(); PyQtPluginSettingsFactory* settingsFactory = new PyQtPluginSettingsFactory(&m_engine); //load and save preferences //if something in kritarc is missing, then the default from this load function will be used and saved back to kconfig. //this way, cfg.readEntry() in any part won't be able to set its own default KisPreferenceSet* settings = settingsFactory->createPreferenceSet(); Q_ASSERT(settings); settings->loadPreferences(); settings->savePreferences(); delete settings; preferenceSetRegistry->add("PyQtPluginSettingsFactory", settingsFactory); // Try to import the `pykrita` module PyKrita::Python py = PyKrita::Python(); PyObject* pykritaPackage = py.moduleImport("pykrita"); pykritaPackage = py.moduleImport("krita"); if (pykritaPackage) { dbgKrita << "Loaded pykrita, now load plugins"; m_engine.tryLoadEnabledPlugins(); py.functionCall("_pykritaLoaded", PyKrita::Python::PYKRITA_ENGINE); } else { dbgScript << "Cannot load pykrita module"; m_engine.setBroken(); } } KritaPyQtPlugin::~KritaPyQtPlugin() { } diff --git a/krita/plugins/extensions/pykrita/src/plugins/hello/hello.py b/krita/plugins/extensions/pykrita/src/plugins/hello/hello.py index da21e93dd6..712673c59e 100644 --- a/krita/plugins/extensions/pykrita/src/plugins/hello/hello.py +++ b/krita/plugins/extensions/pykrita/src/plugins/hello/hello.py @@ -1,5 +1,7 @@ from PyQt4.QtGui import * +from PyKrita4.krita import * def hello(): + QMessageBox.information(QWidget(), "Test", "Hello World")