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 currentl= y 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 @@ @@ -14,6 +14,7 @@ xsi:schemaLocation=3D"http://www.kde.org/standards/kxmlgu= i/1.0 http://www.kde.org + @@ -22,6 +23,7 @@ xsi:schemaLocation=3D"http://www.kde.org/standards/kxmlgu= i/1.0 http://www.kde.org + 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 & u= rl, 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(slotCreateT= emplate())); = + d->createCopy =3D new KisAction( i18n( "&Create Copy From Current Imag= e" ), this); + d->createCopy->setActivationFlags(KisAction::ACTIVE_IMAGE); + actionManager()->addAction("create_copy", d->createCopy); + connect(d->createCopy, SIGNAL(triggered()), this, SLOT(slotCreateCopy(= ))); + d->openResourcesDirectory =3D new KisAction(i18n("Open Resources Folde= r"), this); d->openResourcesDirectory->setToolTip(i18n("Opens a file browser at th= e 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(), docum= ent(), mainWindow()); } = +void KisViewManager::slotCreateCopy() +{ + if (!document()) return; + KisDocument *doc =3D KisPart::instance()->createDocument(); + + QString name =3D document()->documentInfo()->aboutInfo("name"); + if (name.isEmpty()) { + name =3D document()->url().toLocalFile(); + } + name =3D i18n("%1 (Copy)", name); + doc->documentInfo()->setAboutInfo("title", name); + KisImageWSP image =3D document()->image(); + KisImageSP newImage =3D new KisImage(doc->createUndoStore(), image->wi= dth(), image->height(), image->colorSpace(), name); + newImage->setRootLayer(dynamic_cast(image->rootLayer()= ->clone().data())); + doc->setCurrentImage(newImage); + KisPart::instance()->addDocument(doc); + KisMainWindow *mw =3D qobject_cast(d->mainWindow); + KisView *view =3D KisPart::instance()->createView(doc, resourceProvide= r()->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();