[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [calligra] krita/ui
From: Sven Langkamp <sven.langkamp () gmail ! com>
Date: 2011-01-21 19:56:25
Message-ID: 20110121195625.B3DCBA6092 () git ! kde ! org
[Download RAW message or body]
Git commit 4dce98f2489c19797d5d9bc6d6f5d505b1d33be1 by Sven Langkamp
Pushed by langkamp into branch master
added workspaces
M +2 -0 krita/ui/CMakeLists.txt
M +9 -2 krita/ui/kis_paintop_box.cc
M +1 -0 krita/ui/kis_paintop_box.h
M +20 -2 krita/ui/kis_resource_server_provider.cpp
M +5 -0 krita/ui/kis_resource_server_provider.h
A +102 -0 krita/ui/kis_workspace_resource.cpp [License: LGPL (v2+)]
A +43 -0 krita/ui/kis_workspace_resource.h [License: LGPL (v2+)]
A +141 -0 krita/ui/widgets/kis_workspace_chooser.cpp [License: LGPL \
(v2+)] A +48 -0 krita/ui/widgets/kis_workspace_chooser.h [License: LGPL \
(v2+)]
http://commits.kde.org/47e7010d/4dce98f2489c19797d5d9bc6d6f5d505b1d33be1
diff --git a/krita/ui/CMakeLists.txt b/krita/ui/CMakeLists.txt
index c7591d1..2a149f0 100644
--- a/krita/ui/CMakeLists.txt
+++ b/krita/ui/CMakeLists.txt
@@ -95,6 +95,7 @@ set(kritaui_LIB_SRCS
kis_view2.cpp
kis_zoom_manager.cc
ko_favorite_resource_manager.cpp
+ kis_workspace_resource.cpp
kisexiv2/kis_exif_io.cpp
kisexiv2/kis_exiv2.cpp
kisexiv2/kis_iptc_io.cpp
@@ -159,6 +160,7 @@ set(kritaui_LIB_SRCS
widgets/kis_tree_view_popup.cc
widgets/kis_slider_spin_box.cpp
widgets/kis_wdg_generator.cpp
+ widgets/kis_workspace_chooser.cpp
widgets/squeezedcombobox.cpp
)
diff --git a/krita/ui/kis_paintop_box.cc b/krita/ui/kis_paintop_box.cc
index 63f63a3..d1220e0 100644
--- a/krita/ui/kis_paintop_box.cc
+++ b/krita/ui/kis_paintop_box.cc
@@ -2,7 +2,7 @@
* kis_paintop_box.cc - part of KImageShop/Krayon/Krita
*
* Copyright (c) 2004 Boudewijn Rempt (boud@valdyas.org)
- * Copyright (c) 2009 Sven Langkamp (sven.langkamp@gmail.com)
+ * Copyright (c) 2009-2011 Sven Langkamp (sven.langkamp@gmail.com)
* Copyright (c) 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
* Copyright (C) 2011 Silvio Heinrich <plassy@web.de>
*
@@ -67,6 +67,7 @@
#include "widgets/kis_popup_button.h"
#include "widgets/kis_paintop_presets_popup.h"
#include "widgets/kis_paintop_presets_chooser_popup.h"
+#include "widgets/kis_workspace_chooser.h"
#include "kis_paintop_settings_widget.h"
#include "kis_brushengine_selector.h"
#include "ko_favorite_resource_manager.h"
@@ -145,6 +146,12 @@ KisPaintopBox::KisPaintopBox(KisView2 * view, QWidget *parent, \
const char * name //view->actionCollection()->addAction("palette_manager", action);
//action->setDefaultWidget(m_paletteButton);
+ m_workspaceWidget = new KisPopupButton(this);
+ m_workspaceWidget->setIcon(KIcon("document-multiple"));
+ m_workspaceWidget->setToolTip(i18n("Choose workspace"));
+ m_workspaceWidget->setFixedSize(32, 32);
+ m_workspaceWidget->setPopupWidget(new KisWorkspaceChooser(view));
+
m_layout = new QHBoxLayout(this);
m_layout->addWidget(m_cmbPaintops);
m_layout->addWidget(m_settingsWidget);
@@ -154,7 +161,7 @@ KisPaintopBox::KisPaintopBox(KisView2 * view, QWidget *parent, \
const char * name m_layout->addWidget(m_eraseModeButton);
m_layout->addWidget(m_paletteButton);
m_layout->addSpacerItem(new QSpacerItem(10, 1, QSizePolicy::Expanding, \
QSizePolicy::Minimum));
-// m_layout->addWidget(m_brushChooser);
+ m_layout->addWidget(m_workspaceWidget);
m_presetsPopup = new KisPaintOpPresetsPopup(m_resourceProvider);
m_settingsWidget->setPopupWidget(m_presetsPopup);
diff --git a/krita/ui/kis_paintop_box.h b/krita/ui/kis_paintop_box.h
index e7a7e80..5bc8f23 100644
--- a/krita/ui/kis_paintop_box.h
+++ b/krita/ui/kis_paintop_box.h
@@ -135,6 +135,7 @@ private:
KisBrushEngineSelector* m_brushEngineSelector;
KisView2* m_view;
QPushButton* m_paletteButton;
+ KisPopupButton* m_workspaceWidget;
QMap<KoID, KisPaintOpSettingsWidget*> m_paintopOptionWidgets;
KisPaintOpPresetSP m_activePreset;
diff --git a/krita/ui/kis_resource_server_provider.cpp \
b/krita/ui/kis_resource_server_provider.cpp index 5ee3746..0e76f0d 100644
--- a/krita/ui/kis_resource_server_provider.cpp
+++ b/krita/ui/kis_resource_server_provider.cpp
@@ -35,6 +35,7 @@
#include <kis_debug.h>
#include <kis_pattern.h>
#include <kis_paintop_preset.h>
+#include <kis_workspace_resource.h>
KisResourceServerProvider::KisResourceServerProvider()
{
@@ -45,7 +46,8 @@ KisResourceServerProvider::KisResourceServerProvider()
KGlobal::mainComponent().dirs()->addResourceType("kis_paintoppresets", "data", \
"krita/paintoppresets/");
KGlobal::mainComponent().dirs()->addResourceDir("kis_paintoppresets", \
QDir::homePath() + QString("/.create/paintoppresets/krita"));
-
+ KGlobal::mainComponent().dirs()->addResourceType("kis_workspaces", "data", \
"krita/workspaces/"); +
m_patternServer = new KoResourceServer<KisPattern>("kis_patterns", \
"*.jpg:*.gif:*.png:*.tif:*.xpm:*.bmp:*.pat"); patternThread = new \
KoResourceLoaderThread(m_patternServer);
connect(patternThread, SIGNAL(finished()), this, SLOT(patternThreadDone()));
@@ -55,7 +57,11 @@ KisResourceServerProvider::KisResourceServerProvider()
paintOpPresetThread = new KoResourceLoaderThread(m_paintOpPresetServer);
connect(paintOpPresetThread, SIGNAL(finished()), this, \
SLOT(paintOpPresetThreadDone())); paintOpPresetThread->start();
-
+
+ m_workspaceServer = new KoResourceServer<KisWorkspaceResource>("kis_workspaces", \
"*.kws"); + workspaceThread = new KoResourceLoaderThread(m_workspaceServer);
+ connect(workspaceThread, SIGNAL(finished()), this, SLOT(workspaceThreadDone()));
+ workspaceThread->start();
}
KisResourceServerProvider::~KisResourceServerProvider()
@@ -63,6 +69,7 @@ KisResourceServerProvider::~KisResourceServerProvider()
dbgRegistry << "deleting KisResourceServerProvider";
delete m_patternServer;
delete m_paintOpPresetServer;
+ delete m_workspaceServer;
}
KisResourceServerProvider* KisResourceServerProvider::instance()
@@ -82,6 +89,11 @@ KoResourceServer<KisPaintOpPreset>* \
KisResourceServerProvider::paintOpPresetServ return m_paintOpPresetServer;
}
+KoResourceServer< KisWorkspaceResource >* \
KisResourceServerProvider::workspaceServer() +{
+ return m_workspaceServer;
+}
+
void KisResourceServerProvider::patternThreadDone()
{
delete patternThread;
@@ -94,4 +106,10 @@ void KisResourceServerProvider::paintOpPresetThreadDone()
paintOpPresetThread = 0;
}
+void KisResourceServerProvider::workspaceThreadDone()
+{
+ delete workspaceThread;
+ workspaceThread = 0;
+}
+
#include "kis_resource_server_provider.moc"
diff --git a/krita/ui/kis_resource_server_provider.h \
b/krita/ui/kis_resource_server_provider.h index ee65ace..b09b3fe 100644
--- a/krita/ui/kis_resource_server_provider.h
+++ b/krita/ui/kis_resource_server_provider.h
@@ -34,6 +34,7 @@
class KoResource;
class KisPattern;
class KisPaintOpPreset;
+class KisWorkspaceResource;
class KRITAUI_EXPORT KisResourceServerProvider : public QObject
{
@@ -46,6 +47,7 @@ public:
KoResourceServer<KisPattern>* patternServer();
KoResourceServer<KisPaintOpPreset>* paintOpPresetServer();
+ KoResourceServer<KisWorkspaceResource>* workspaceServer();
private:
@@ -55,16 +57,19 @@ private:
KoResourceServer<KisPattern>* m_patternServer;
KoResourceServer<KisPaintOpPreset>* m_paintOpPresetServer;
+ KoResourceServer<KisWorkspaceResource>* m_workspaceServer;
private slots:
void patternThreadDone();
void paintOpPresetThreadDone();
+ void workspaceThreadDone();
private:
QThread * patternThread;
QThread * paintOpPresetThread;
+ QThread * workspaceThread;
};
#endif // KIS_RESOURCESERVERPROVIDER_H_
diff --git a/krita/ui/kis_workspace_resource.cpp \
b/krita/ui/kis_workspace_resource.cpp new file mode 100644
index 0000000..3e7992a
--- /dev/null
+++ b/krita/ui/kis_workspace_resource.cpp
@@ -0,0 +1,102 @@
+/* This file is part of the KDE project
+ * Copyright (C) 2011 Sven Langkamp <sven.langkamp@gmail.com>
+ *
+ * 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) any later version.
+ *
+ * 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.
+ */
+
+#include "kis_workspace_resource.h"
+
+#include <QFile>
+#include <QDomDocument>
+#include <QTextStream>
+
+#define WORKSPACE_VERSION 1
+
+KisWorkspaceResource::KisWorkspaceResource(const QString& filename): \
KoResource(filename) +{
+}
+
+KisWorkspaceResource::~KisWorkspaceResource()
+{
+}
+
+bool KisWorkspaceResource::save()
+{
+ if (filename().isEmpty())
+ return false;
+
+ QFile file(filename());
+ file.open(QIODevice::WriteOnly);
+
+ QDomDocument doc;
+ QDomElement root = doc.createElement("Workspace");
+ root.setAttribute("name", name() );
+ root.setAttribute("version", WORKSPACE_VERSION);
+ QDomElement state = doc.createElement("state");
+ state.appendChild(doc.createCDATASection(m_dockerState.toBase64()));
+ root.appendChild(state);
+ doc.appendChild(root);
+
+ QTextStream textStream(&file);
+ doc.save(textStream, 4);
+ file.close();
+
+ return true;
+}
+
+bool KisWorkspaceResource::load()
+{
+ if (filename().isEmpty())
+ return false;
+
+ QFile file(filename());
+
+ QDomDocument doc;
+ if (!file.open(QIODevice::ReadOnly))
+ return false;
+ if (!doc.setContent(&file)) {
+ file.close();
+ return false;
+ }
+ file.close();
+
+ QDomElement element = doc.documentElement();
+ setName(element.attribute("name"));
+
+
+ QDomElement state = element.firstChildElement("state");
+
+ if(!state.isNull()) {
+ m_dockerState = QByteArray::fromBase64(state.text().toAscii());
+ }
+ setValid(true);
+ return true;
+}
+
+QString KisWorkspaceResource::defaultFileExtension() const
+{
+ return QString(".kws");
+}
+
+void KisWorkspaceResource::setDockerState(const QByteArray& state)
+{
+ m_dockerState = state;
+}
+
+QByteArray KisWorkspaceResource::dockerState()
+{
+ return m_dockerState;
+}
\ No newline at end of file
diff --git a/krita/ui/kis_workspace_resource.h b/krita/ui/kis_workspace_resource.h
new file mode 100644
index 0000000..94c50a7
--- /dev/null
+++ b/krita/ui/kis_workspace_resource.h
@@ -0,0 +1,43 @@
+/* This file is part of the KDE project
+ * Copyright (C) 2011 Sven Langkamp <sven.langkamp@gmail.com>
+ *
+ * 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) any later version.
+ *
+ * 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.
+ */
+
+#ifndef KIS_WORKSPACE_RESOURCE_H
+#define KIS_WORKSPACE_RESOURCE_H
+
+#include <KoResource.h>
+
+/// Resource for storing of workspaces
+class KisWorkspaceResource : public KoResource
+{
+
+public:
+ KisWorkspaceResource(const QString& filename);
+ virtual ~KisWorkspaceResource();
+ virtual bool save();
+ virtual bool load();
+ virtual QString defaultFileExtension() const;
+
+ void setDockerState(const QByteArray& state);
+ QByteArray dockerState();
+
+private:
+ QByteArray m_dockerState;
+};
+
+#endif // KIS_WORKSPACE_RESOURCE_H
diff --git a/krita/ui/widgets/kis_workspace_chooser.cpp \
b/krita/ui/widgets/kis_workspace_chooser.cpp new file mode 100644
index 0000000..1c90d95
--- /dev/null
+++ b/krita/ui/widgets/kis_workspace_chooser.cpp
@@ -0,0 +1,141 @@
+/* This file is part of the KDE project
+ * Copyright (C) 2011 Sven Langkamp <sven.langkamp@gmail.com>
+ *
+ * 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) any later version.
+ *
+ * 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.
+ */
+
+#include "kis_workspace_chooser.h"
+
+#include <QVBoxLayout>
+#include <QAbstractItemDelegate>
+#include <QPainter>
+#include <QPushButton>
+
+#include <klocale.h>
+
+#include <KoResourceItemChooser.h>
+#include <KoResourceServerAdapter.h>
+#include <KoMainWindow.h>
+#include <KoResource.h>
+
+#include "kis_pattern.h"
+#include "kis_resource_server_provider.h"
+#include "kis_workspace_resource.h"
+#include "kis_view2.h"
+#include <QGridLayout>
+#include <klineedit.h>
+
+class KisWorkspaceDelegate : public QAbstractItemDelegate
+{
+public:
+ KisWorkspaceDelegate(QObject * parent = 0) : QAbstractItemDelegate(parent) {}
+ virtual ~KisWorkspaceDelegate() {}
+ /// reimplemented
+ virtual void paint(QPainter *, const QStyleOptionViewItem &, const QModelIndex \
&) const; + /// reimplemented
+ QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex &) const {
+ return option.decorationSize;
+ }
+};
+
+void KisWorkspaceDelegate::paint(QPainter * painter, const QStyleOptionViewItem & \
option, const QModelIndex & index) const +{
+ if (! index.isValid())
+ return;
+
+ KisWorkspaceResource* workspace = \
static_cast<KisWorkspaceResource*>(index.internalPointer()); +
+ if (option.state & QStyle::State_Selected) {
+ painter->setPen(QPen(option.palette.highlight(), 2.0));
+ painter->fillRect(option.rect, option.palette.highlight());
+ }
+
+ painter->setPen(Qt::black);
+ painter->drawText(option.rect.x() + 5, option.rect.y() + \
painter->fontMetrics().ascent() + 5, workspace->name()); +
+}
+
+KisWorkspaceChooser::KisWorkspaceChooser(KisView2 * view, QWidget* parent): \
QWidget(parent), m_view(view) +{
+ KoResourceServer<KisWorkspaceResource> * rserver = \
KisResourceServerProvider::instance()->workspaceServer(); + \
KoAbstractResourceServerAdapter* adapter = new \
KoResourceServerAdapter<KisWorkspaceResource>(rserver); + m_itemChooser = new \
KoResourceItemChooser(adapter, this); + m_itemChooser->setItemDelegate(new \
KisWorkspaceDelegate(this)); + m_itemChooser->setFixedSize(250, 250);
+ m_itemChooser->setRowHeight(30);
+ m_itemChooser->setColumnCount(1);
+ connect(m_itemChooser, SIGNAL(resourceSelected(KoResource*)),
+ this, SLOT(resourceSelected(KoResource*)));
+
+ QPushButton* saveButton = new QPushButton(i18n("Save"));
+ connect(saveButton, SIGNAL(clicked(bool)), this, SLOT(slotSave()));
+
+ m_nameEdit = new KLineEdit(this);
+ m_nameEdit->setClickMessage(i18n("Insert name"));
+ m_nameEdit->setClearButtonShown(true);
+
+ QGridLayout* layout = new QGridLayout(this);
+ layout->setMargin(0);
+ layout->addWidget(m_itemChooser, 0, 0, 1, 2);
+ layout->addWidget(m_nameEdit, 1, 0, 1, 1);
+ layout->addWidget(saveButton, 1, 1, 1, 1);
+}
+
+KisWorkspaceChooser::~KisWorkspaceChooser()
+{
+
+}
+
+void KisWorkspaceChooser::slotSave()
+{
+ if(!m_view->shell()) {
+ return;
+ }
+ KoResourceServer<KisWorkspaceResource> * rserver = \
KisResourceServerProvider::instance()->workspaceServer(); +
+ KisWorkspaceResource* workspace = new KisWorkspaceResource("");
+ workspace->setDockerState(m_view->shell()->saveState());
+ workspace->setValid(true);
+ QString saveLocation = rserver->saveLocation();
+ QString name = m_nameEdit->text();
+
+ bool newName = false;
+ if(name.isEmpty()) {
+ newName = true;
+ name = i18n("Workspace");
+ }
+ QFileInfo fileInfo(saveLocation + name + workspace->defaultFileExtension());
+
+ int i = 1;
+ while (fileInfo.exists()) {
+ fileInfo.setFile(saveLocation + name + QString("%1").arg(i) + \
workspace->defaultFileExtension()); + i++;
+ }
+ workspace->setFilename(fileInfo.filePath());
+ if(newName) {
+ name = i18n("Workspace %1").arg(i);
+ }
+ workspace->setName(name);
+ rserver->addResource(workspace);
+}
+
+void KisWorkspaceChooser::resourceSelected(KoResource* resource)
+{
+ if(!m_view->shell()) {
+ return;
+ }
+ m_view->shell()->restoreState(static_cast<KisWorkspaceResource*>(resource)->dockerState());
+}
diff --git a/krita/ui/widgets/kis_workspace_chooser.h \
b/krita/ui/widgets/kis_workspace_chooser.h new file mode 100644
index 0000000..3431533
--- /dev/null
+++ b/krita/ui/widgets/kis_workspace_chooser.h
@@ -0,0 +1,48 @@
+/* This file is part of the KDE project
+ * Copyright (C) 2011 Sven Langkamp <sven.langkamp@gmail.com>
+ *
+ * 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) any later version.
+ *
+ * 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.
+ */
+
+
+#ifndef KIS_WORKSPACE_CHOOSER_H
+#define KIS_WORKSPACE_CHOOSER_H
+
+#include <QWidget>
+
+class KLineEdit;
+class KoResourceItemChooser;
+class KisView2;
+class KoResource;
+
+class KisWorkspaceChooser : public QWidget
+{
+ Q_OBJECT
+public:
+ KisWorkspaceChooser(KisView2 * view, QWidget* parent = 0);
+ virtual ~KisWorkspaceChooser();
+
+private slots:
+ void slotSave();
+ void resourceSelected( KoResource * resource );
+
+private:
+ KoResourceItemChooser * m_itemChooser;
+ KisView2* m_view;
+ KLineEdit* m_nameEdit;
+};
+
+#endif // KIS_WORKSPACE_CHOOSER_H
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic