diff --git a/libs/libkis/Krita.h b/libs/libkis/Krita.h --- a/libs/libkis/Krita.h +++ b/libs/libkis/Krita.h @@ -206,6 +206,13 @@ */ QMap resources(const QString &type) const; + + /** + * @brief return all recent documents registered in the RecentFiles group of the kritarc + */ + QStringList recentDocuments() const; + + /** * @brief createDocument creates a new document and image and registers the document with the Krita application. * diff --git a/libs/libkis/Krita.cpp b/libs/libkis/Krita.cpp --- a/libs/libkis/Krita.cpp +++ b/libs/libkis/Krita.cpp @@ -299,6 +299,18 @@ return resources; } +QStringList Krita::recentDocuments() const +{ + KConfigGroup grp = KSharedConfig::openConfig()->group(QString("RecentFiles")); + QStringList keys = grp.keyList(); + QStringList recentDocuments; + + for(int i = 0; i <= keys.filter("File").count(); i++) + recentDocuments << grp.readEntry(QString("File%1").arg(i), QString("")); + + return recentDocuments; +} + Document* Krita::createDocument(int width, int height, const QString &name, const QString &colorModel, const QString &colorDepth, const QString &profile) { KisDocument *document = KisPart::instance()->createDocument(); diff --git a/plugins/extensions/pykrita/plugin/plugins/CMakeLists.txt b/plugins/extensions/pykrita/plugin/plugins/CMakeLists.txt --- a/plugins/extensions/pykrita/plugin/plugins/CMakeLists.txt +++ b/plugins/extensions/pykrita/plugin/plugins/CMakeLists.txt @@ -87,6 +87,7 @@ install_pykrita_plugin(palette_docker) install_pykrita_plugin(quick_settings_docker) +install_pykrita_plugin(lastdocumentsdocker) # if(PYTHON_VERSION_MAJOR VERSION_EQUAL 3) # install_pykrita_plugin(cmake_utils) diff --git a/plugins/extensions/pykrita/plugin/plugins/lastdocumentsdocker/__init__.py b/plugins/extensions/pykrita/plugin/plugins/lastdocumentsdocker/__init__.py new file mode 100644 --- /dev/null +++ b/plugins/extensions/pykrita/plugin/plugins/lastdocumentsdocker/__init__.py @@ -0,0 +1,2 @@ + # let's make a module +from .lastdocumentsdocker import * diff --git a/plugins/extensions/pykrita/plugin/plugins/lastdocumentsdocker/kritapykrita_lastdocumentsdocker.desktop b/plugins/extensions/pykrita/plugin/plugins/lastdocumentsdocker/kritapykrita_lastdocumentsdocker.desktop new file mode 100644 --- /dev/null +++ b/plugins/extensions/pykrita/plugin/plugins/lastdocumentsdocker/kritapykrita_lastdocumentsdocker.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Type=Service +ServiceTypes=Krita/PythonPlugin +X-KDE-Library=lastdocumentsdocker +X-Python-2-Compatible=false +Name=Last Documents Docker +Comment=A Python-based docker for show thumbnails to last ten documents diff --git a/plugins/extensions/pykrita/plugin/plugins/lastdocumentsdocker/lastdocumentsdocker.py b/plugins/extensions/pykrita/plugin/plugins/lastdocumentsdocker/lastdocumentsdocker.py new file mode 100644 --- /dev/null +++ b/plugins/extensions/pykrita/plugin/plugins/lastdocumentsdocker/lastdocumentsdocker.py @@ -0,0 +1,29 @@ +from PyQt5.QtWidgets import QWidget, QVBoxLayout, QListView +import krita +from lastdocumentsdocker import lastdocumentslistmodel + + +class LastDocumentsDocker(krita.DockWidget): + + def __init__(self): + super(LastDocumentsDocker, self).__init__() + + self.baseWidget = QWidget() + self.layout = QVBoxLayout() + self.listView = QListView() + + self.listView.setFlow(QListView.LeftToRight) + + self.layout.addWidget(self.listView) + + self.baseWidget.setLayout(self.layout) + self.setWidget(self.baseWidget) + + self.listView.setModel(lastdocumentslistmodel.LastDocumentsListModel()) + self.setWindowTitle("Last Documents Docker") + + def canvasChanged(self, canvas): + pass + + +Application.addDockWidgetFactory(krita.DockWidgetFactory("lastdocumentsdocker", krita.DockWidgetFactoryBase.DockRight, LastDocumentsDocker)) diff --git a/plugins/extensions/pykrita/plugin/plugins/lastdocumentsdocker/lastdocumentslistmodel.py b/plugins/extensions/pykrita/plugin/plugins/lastdocumentsdocker/lastdocumentslistmodel.py new file mode 100644 --- /dev/null +++ b/plugins/extensions/pykrita/plugin/plugins/lastdocumentsdocker/lastdocumentslistmodel.py @@ -0,0 +1,43 @@ +from PyQt5.QtCore import QAbstractListModel, Qt +import krita + + +class LastDocumentsListModel(QAbstractListModel): + + def __init__(self, parent=None): + super(LastDocumentsListModel, self).__init__(parent) + + self.rootItem = ('Path',) + self.kritaInstance = krita.Krita.instance() + self.recentDocuments = [] + + self._loadRecentDocuments() + + def data(self, index, role): + if not index.isValid(): + return None + + if index.row() >= len(self.recentDocuments): + return None + + if role == Qt.DecorationRole: + return self.recentDocuments[index.row()] + else: + return None + + def rowCount(self, parent): + return len(self.recentDocuments) + + def headerData(self, section, orientation, role): + if orientation == Qt.Horizontal and role == Qt.DisplayRole: + return self.rootItem[section] + + return None + + def _loadRecentDocuments(self): + recentDocumentsPaths = self.kritaInstance.recentDocuments() + + for path in recentDocumentsPaths: + document = self.kritaInstance.openDocument(path) + if document: + self.recentDocuments.append(document.thumbnail(70, 60)) diff --git a/plugins/extensions/pykrita/sip/krita/Krita.sip b/plugins/extensions/pykrita/sip/krita/Krita.sip --- a/plugins/extensions/pykrita/sip/krita/Krita.sip +++ b/plugins/extensions/pykrita/sip/krita/Krita.sip @@ -28,6 +28,7 @@ Window * activeWindow() const /Factory/; QList windows() const /Factory/; QMap resources(const QString &type) const /Factory/; + QStringList recentDocuments() const; Document * createDocument(int width, int height, const QString &name, const QString &colorModel, const QString &colorDepth, const QString &profile) /Factory/; Document * openDocument(const QString &filename) /Factory/; Window * openWindow();