[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [calligra/calligra/2.9] krita: [FEATURE] Create a copy of a currently open image
From:       Boudewijn Rempt <boud () valdyas ! org>
Date:       2015-06-02 19:15:34
Message-ID: E1Yzrew-0005r2-Bm () scm ! kde ! org
[Download RAW message or body]

Git commit 5012d8da10496b4494d5ea7415ee093f0d8a8bc2 by Boudewijn Rempt.
Committed on 02/06/2015 at 19:15.
Pushed by rempt into branch 'calligra/2.9'.

[FEATURE] Create a copy of a currently open image

The create copy menu option will create an independent copy of the currently open
image.

BUG:348256

M  +3    -1    krita/krita.rc
M  +0    -1    krita/ui/KisMainWindow.cpp
M  +28   -0    krita/ui/KisViewManager.cpp
M  +1    -0    krita/ui/KisViewManager.h

http://commits.kde.org/calligra/5012d8da10496b4494d5ea7415ee093f0d8a8bc2

diff --git a/krita/krita.rc b/krita/krita.rc
index 0df46c7..70abe63 100644
--- a/krita/krita.rc
+++ b/krita/krita.rc
@@ -2,7 +2,7 @@
 <kpartgui xmlns="http://www.kde.org/standards/kxmlgui/1.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 name="Krita"
-version="71"
+version="72"
 xsi:schemaLocation="http://www.kde.org/standards/kxmlgui/1.0  \
http://www.kde.org/standards/kxmlgui/1.0/kxmlgui.xsd">  <MenuBar>
     <Menu name="file" noMerge="1">
@@ -14,6 +14,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kxmlgui/1.0  \
http://www.kde.org  <Action name="file_save"/>
       <Action name="file_save_as"/>
       <Action name="file_reload_file"/>
+      <Action name="file_reload_file"/>
       <Separator/>
       <Action name="file_import_file"/>
       <Action name="file_export_file"/>
@@ -22,6 +23,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kxmlgui/1.0  \
http://www.kde.org  <Action name="save_incremental_version"/>
       <Action name="save_incremental_backup"/>
       <Action name="create_template"/>
+      <Action name="create_copy"/>
       <Separator/>
       <Action name="file_print"/>
       <Action name="file_print_preview"/>
diff --git a/krita/ui/KisMainWindow.cpp b/krita/ui/KisMainWindow.cpp
index 8b3a784..331aba3 100644
--- a/krita/ui/KisMainWindow.cpp
+++ b/krita/ui/KisMainWindow.cpp
@@ -686,7 +686,6 @@ bool KisMainWindow::openDocumentInternal(const KUrl & url, \
KisDocument *newdoc)  KisPart::instance()->addDocument(newdoc);
     updateReloadFileAction(newdoc);
 
-
     KFileItem file(url, newdoc->mimeType(), KFileItem::Unknown);
     if (!file.isWritable()) {
         setReadWrite(false);
diff --git a/krita/ui/KisViewManager.cpp b/krita/ui/KisViewManager.cpp
index e93824a..8f9973f 100644
--- a/krita/ui/KisViewManager.cpp
+++ b/krita/ui/KisViewManager.cpp
@@ -264,6 +264,7 @@ public:
     KisFilterManager *filterManager;
     KisStatusBar *statusBar;
     KisAction *createTemplate;
+    KisAction *createCopy;
     KisAction *saveIncremental;
     KisAction *saveIncrementalBackup;
     KisAction *openResourcesDirectory;
@@ -677,6 +678,11 @@ void KisViewManager::createActions()
     actionManager()->addAction("create_template", d->createTemplate);
     connect(d->createTemplate, SIGNAL(triggered()), this, \
SLOT(slotCreateTemplate()));  
+    d->createCopy = new KisAction( i18n( "&Create Copy From Current Image" ), this);
+    d->createCopy->setActivationFlags(KisAction::ACTIVE_IMAGE);
+    actionManager()->addAction("create_copy", d->createCopy);
+    connect(d->createCopy, SIGNAL(triggered()), this, SLOT(slotCreateCopy()));
+
     d->openResourcesDirectory = new KisAction(i18n("Open Resources Folder"), this);
     d->openResourcesDirectory->setToolTip(i18n("Opens a file browser at the location \
                Krita saves resources such as brushes to."));
     d->openResourcesDirectory->setWhatsThis(i18n("Opens a file browser at the \
location Krita saves resources such as brushes to.")); @@ -857,6 +863,28 @@ void \
                KisViewManager::slotCreateTemplate()
                                         KisFactory::componentData(), document(), \
mainWindow());  }
 
+void KisViewManager::slotCreateCopy()
+{
+    if (!document()) return;
+    KisDocument *doc = KisPart::instance()->createDocument();
+
+    QString name = document()->documentInfo()->aboutInfo("name");
+    if (name.isEmpty()) {
+        name = document()->url().toLocalFile();
+    }
+    name = i18n("%1 (Copy)", name);
+    doc->documentInfo()->setAboutInfo("title", name);
+    KisImageWSP image = document()->image();
+    KisImageSP newImage = new KisImage(doc->createUndoStore(), image->width(), \
image->height(), image->colorSpace(), name); +    \
newImage->setRootLayer(dynamic_cast<KisGroupLayer*>(image->rootLayer()->clone().data()));
 +    doc->setCurrentImage(newImage);
+    KisPart::instance()->addDocument(doc);
+    KisMainWindow *mw  = qobject_cast<KisMainWindow*>(d->mainWindow);
+    KisView *view = KisPart::instance()->createView(doc, \
resourceProvider()->resourceManager(), mw->actionCollection(), mw); +    \
mw->addView(view); +}
+
+
 QMainWindow* KisViewManager::qtMainWindow() const
 {
     if (d->mainWindow)
diff --git a/krita/ui/KisViewManager.h b/krita/ui/KisViewManager.h
index 7215c62..ba5804e 100644
--- a/krita/ui/KisViewManager.h
+++ b/krita/ui/KisViewManager.h
@@ -225,6 +225,7 @@ private Q_SLOTS:
 
     void slotBlacklistCleanup();
     void slotCreateTemplate();
+    void slotCreateCopy();
     void slotDocumentSaved();
     void slotSaveIncremental();
     void slotSaveIncrementalBackup();


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic