diff --git a/krita/plugins/extensions/pykrita/libkis/CMakeLists.txt b/krita/plugins/extensions/pykrita/libkis/CMakeLists.txt index 33a9649979..417a57177a 100644 --- a/krita/plugins/extensions/pykrita/libkis/CMakeLists.txt +++ b/krita/plugins/extensions/pykrita/libkis/CMakeLists.txt @@ -1,32 +1,34 @@ include_directories(${KOMAIN_INCLUDES} ${KRITA_INCLUDES}) set(kritalibkis_LIB_SRCS application.cpp document.cpp + dockwidget.cpp + dockwidgetfactory.cpp image.cpp mainwindow.cpp krita.cpp node.cpp view.cpp viewextension.cpp viewmanager.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/dockwidget.cpp b/krita/plugins/extensions/pykrita/libkis/dockwidget.cpp new file mode 100644 index 0000000000..5029a78c91 --- /dev/null +++ b/krita/plugins/extensions/pykrita/libkis/dockwidget.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2015 Cyrille Berger + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * 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 "dockwidget.h" + +DockWidget::DockWidget(): QDockWidget() +{ + +} + +DockWidget::~DockWidget() +{ + +} + +void DockWidget::setCanvas(KoCanvasBase* canvas) +{ + +} + +void DockWidget::unsetCanvas() +{ + +} diff --git a/krita/plugins/extensions/pykrita/libkis/dockwidget.h b/krita/plugins/extensions/pykrita/libkis/dockwidget.h new file mode 100644 index 0000000000..542528214a --- /dev/null +++ b/krita/plugins/extensions/pykrita/libkis/dockwidget.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2015 Cyrille Berger + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * 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. + */ + +#ifndef LIBKIS_DOCKWIDGET_H +#define LIBKIS_DOCKWIDGET_H + +#include +#include + +#include + +class LIBKIS_EXPORT DockWidget : public QDockWidget, public KoCanvasObserverBase { + Q_OBJECT +public: + DockWidget(); + virtual ~DockWidget(); +protected: + virtual void setCanvas(KoCanvasBase* canvas); + virtual void unsetCanvas(); +}; + +#endif diff --git a/krita/plugins/extensions/pykrita/libkis/dockwidgetfactory.cpp b/krita/plugins/extensions/pykrita/libkis/dockwidgetfactory.cpp new file mode 100644 index 0000000000..0abb28ff0a --- /dev/null +++ b/krita/plugins/extensions/pykrita/libkis/dockwidgetfactory.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2015 Cyrille Berger + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * 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 "dockwidgetfactory.h" +#include +DockWidgetFactory::DockWidgetFactory(const QString& _id, KoDockFactoryBase::DockPosition _dockPosition, bool _isCollapsable, bool _defaultCollapsed) + : m_id(_id), + m_dockPosition(_dockPosition), + m_isCollapsable(_isCollapsable), + m_defaultCollapsed(_defaultCollapsed) +{ + +} + +DockWidgetFactory::~DockWidgetFactory() +{ +qDebug() << "Iamdying"; +} + +bool DockWidgetFactory::defaultCollapsed() const +{ + return m_defaultCollapsed; +} + +KoDockFactoryBase::DockPosition DockWidgetFactory::defaultDockPosition() const +{ + return m_dockPosition; +} + +QString DockWidgetFactory::id() const +{ + return m_id; +} + +bool DockWidgetFactory::isCollapsable() const +{ + return m_isCollapsable; +} diff --git a/krita/plugins/extensions/pykrita/libkis/dockwidgetfactory.h b/krita/plugins/extensions/pykrita/libkis/dockwidgetfactory.h new file mode 100644 index 0000000000..3f75ef5c21 --- /dev/null +++ b/krita/plugins/extensions/pykrita/libkis/dockwidgetfactory.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2015 Cyrille Berger + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * 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. + */ + +#ifndef LIBKIS_DOCKWIDGETFACTORY_H +#define LIBKIS_DOCKWIDGETFACTORY_H + +#include +#include + +#include + +class LIBKIS_EXPORT DockWidgetFactory : public KoDockFactoryBase +{ +public: + DockWidgetFactory(const QString& _id, DockPosition _dockPosition, bool _isCollapsable = true, bool _defaultCollapsed = false); + virtual ~DockWidgetFactory(); + virtual QString id() const; + virtual DockPosition defaultDockPosition() const; + virtual bool isCollapsable() const; + virtual bool defaultCollapsed() const; +private: + QString m_id; + DockPosition m_dockPosition; + bool m_isCollapsable, m_defaultCollapsed; +}; + +#endif diff --git a/krita/plugins/extensions/pykrita/libkis/krita.cpp b/krita/plugins/extensions/pykrita/libkis/krita.cpp index ab2bc17632..97c2e6e5f3 100644 --- a/krita/plugins/extensions/pykrita/libkis/krita.cpp +++ b/krita/plugins/extensions/pykrita/libkis/krita.cpp @@ -1,99 +1,108 @@ /* * Copyright (c) 2014 Boudewijn Rempt * * 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; either version 2 of the License, or * (at your option) any later version. * * 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 "krita.h" -#include "viewextension.h" + +#include #include #include #include #include #include #include +#include "dockwidgetfactory.h" +#include "viewextension.h" + Krita* Krita::s_instance = 0; Krita::Krita(QObject *parent) : QObject(parent) { } QList Krita::mainWindows() { QList ret; foreach(QPointer mainWin, KisPart::instance()->mainWindows()) { ret << new MainWindow(mainWin, this); } return ret; } QList Krita::views() { QList ret; foreach(QPointer view, KisPart::instance()->views()) { ret << new View(view, this); } return ret; } QList Krita::documents() { QList ret; foreach(QPointer doc, KisPart::instance()->documents()) { ret << new Document(doc, this); } return ret; } QList Krita::images() { QList ret; foreach(Document *doc, documents()) { ret << doc->image(); } return ret; } QAction *Krita::createAction(const QString &text) { KisAction *action = new KisAction(text, this); foreach(KisMainWindow *mainWin, KisPart::instance()->mainWindows()) { mainWin->viewManager()->scriptManager()->addAction(action); } return action; } void Krita::addViewExtension(ViewExtension* _viewExtension) { m_viewExtensions.append(_viewExtension); } QList< ViewExtension* > Krita::viewExtensions() { return m_viewExtensions; } +void Krita::addDockWidgetFactory(DockWidgetFactory* _factory) +{ + KoDockRegistry::instance()->add(_factory); +} + Krita* Krita::instance() { if (!s_instance) { s_instance = new Krita; } return s_instance; } diff --git a/krita/plugins/extensions/pykrita/libkis/krita.h b/krita/plugins/extensions/pykrita/libkis/krita.h index 75d58386a9..22a4a2cc28 100644 --- a/krita/plugins/extensions/pykrita/libkis/krita.h +++ b/krita/plugins/extensions/pykrita/libkis/krita.h @@ -1,61 +1,63 @@ /* * Copyright (c) 2014 Boudewijn Rempt * * 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; either version 2 of the License, or * (at your option) any later version. * * 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. */ #ifndef LIBKIS_KRITA_H #define LIBKIS_KRITA_H #include #include #include #include "application.h" #include "mainwindow.h" #include "view.h" #include "document.h" #include "image.h" #include +class DockWidgetFactory; class ViewExtension; class LIBKIS_EXPORT Krita : public QObject { Q_OBJECT public: explicit Krita(QObject *parent = 0); QList mainWindows(); QList views(); QList documents(); QList images(); QAction *createAction(const QString &text); void addViewExtension(ViewExtension* _viewExtension); QList viewExtensions(); + void addDockWidgetFactory(DockWidgetFactory* _factory ); static Krita* instance(); Q_SIGNALS: public Q_SLOTS: private: static Krita* s_instance; QList m_viewExtensions; }; #endif // LIBKIS_KRITA_H diff --git a/krita/plugins/extensions/pykrita/sip/krita/dockwidget.sip b/krita/plugins/extensions/pykrita/sip/krita/dockwidget.sip new file mode 100644 index 0000000000..3db6d2bd8c --- /dev/null +++ b/krita/plugins/extensions/pykrita/sip/krita/dockwidget.sip @@ -0,0 +1,13 @@ +%Import QtCore/QtCoremod.sip +%Import QtGui/QtGuimod.sip + +class DockWidget : public QDockWidget /NoDefaultCtors/ +{ +%TypeHeaderCode +#include "dockwidget.h" +%End + +public: + DockWidget(); + +}; diff --git a/krita/plugins/extensions/pykrita/sip/krita/dockwidgetfactory.sip b/krita/plugins/extensions/pykrita/sip/krita/dockwidgetfactory.sip new file mode 100644 index 0000000000..42e8377ab3 --- /dev/null +++ b/krita/plugins/extensions/pykrita/sip/krita/dockwidgetfactory.sip @@ -0,0 +1,22 @@ +%Import QtCore/QtCoremod.sip +%Import QtGui/QtGuimod.sip + +class DockWidgetFactory +{ +%TypeHeaderCode +#include "dockwidgetfactory.h" +%End + +public: + enum DockPosition { + DockTornOff, ///< Floating as its own top level window + DockTop, ///< Above the central widget + DockBottom, ///< Below the central widget + DockRight, ///< Right of the centra widget + DockLeft, ///< Left of the centra widget + DockMinimized ///< Not docked, but reachable via the menu + }; + DockWidgetFactory(const QString& _id, DockPosition _dockPosition, bool _isCollapsable = true, bool _defaultCollapsed = false); + virtual QDockWidget* createDockWidget() = 0 /Factory/; +}; + diff --git a/krita/plugins/extensions/pykrita/sip/krita/krita.sip b/krita/plugins/extensions/pykrita/sip/krita/krita.sip index 11e33dd5d3..6e132b46c3 100644 --- a/krita/plugins/extensions/pykrita/sip/krita/krita.sip +++ b/krita/plugins/extensions/pykrita/sip/krita/krita.sip @@ -1,22 +1,23 @@ %Import QtCore/QtCoremod.sip %Import QtGui/QtGuimod.sip class Krita : public QObject { %TypeHeaderCode #include "krita.h" %End Krita(QObject *parent /TransferThis/ = 0); public: static Krita* instance(); QList mainWindows(); QList views(); QList documents(); QList images(); QAction *createAction(const QString &text); - void addViewExtension(ViewExtension* _viewExtension /TransferThis/); + void addViewExtension(ViewExtension* _viewExtension /Transfer/); + void addDockWidgetFactory(DockWidgetFactory* _factory /Transfer, TransferThis/); }; diff --git a/krita/plugins/extensions/pykrita/sip/krita/kritamod.sip b/krita/plugins/extensions/pykrita/sip/krita/kritamod.sip index 50d35e5d83..a571e91e7e 100644 --- a/krita/plugins/extensions/pykrita/sip/krita/kritamod.sip +++ b/krita/plugins/extensions/pykrita/sip/krita/kritamod.sip @@ -1,22 +1,24 @@ %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 dockwidget.sip +%Include dockwidgetfactory.sip %Include image.sip %Include mainwindow.sip %Include krita.sip %Include node.sip %Include view.sip %Include viewextension.sip %Include viewmanager.sip diff --git a/krita/plugins/extensions/pykrita/sip/krita/viewextension.sip b/krita/plugins/extensions/pykrita/sip/krita/viewextension.sip index 416a6046d6..e8e2c7ccf8 100644 --- a/krita/plugins/extensions/pykrita/sip/krita/viewextension.sip +++ b/krita/plugins/extensions/pykrita/sip/krita/viewextension.sip @@ -1,16 +1,15 @@ %Import QtCore/QtCoremod.sip %Import QtGui/QtGuimod.sip class ViewExtension : public QObject { %TypeHeaderCode #include "viewextension.h" -#include %End public: explicit ViewExtension(QObject *parent /TransferThis/ = 0); virtual void setup(ViewManager* _viewManager) = 0; }; diff --git a/krita/plugins/extensions/pykrita/src/plugins/hello/hello.py b/krita/plugins/extensions/pykrita/src/plugins/hello/hello.py index 42527b9cbe..3970ed9659 100644 --- a/krita/plugins/extensions/pykrita/src/plugins/hello/hello.py +++ b/krita/plugins/extensions/pykrita/src/plugins/hello/hello.py @@ -1,14 +1,28 @@ from PyQt4.QtGui import * from PyKrita4.krita import * def hello(): QMessageBox.information(QWidget(), "Test", "Hello World") class HelloViewExtension(ViewExtension): def __init__(self, parent): super().__init__(parent) def setup(self, viewManager): action = viewManager.createAction("Hello") action.triggered.connect(hello) Krita.instance().addViewExtension(HelloViewExtension(Krita.instance())) + +class HelloDocker(DockWidget): + def __init__(self): + super().__init__() + label = QLabel("Hello", self) + self.setWidget(label) + +class HelloDockerFactory(DockWidgetFactory): + def __init__(self): + super().__init__("hello", DockWidgetFactory.DockRight) + def createDockWidget(self): + return HelloDocker() + +Krita.instance().addDockWidgetFactory(HelloDockerFactory())