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

List:       kde-commits
Subject:    KDE/kdegraphics/gwenview/app
From:       Aurélien Gâteau <aurelien.gateau () free ! fr>
Date:       2008-08-27 11:21:49
Message-ID: 1219836109.003424.12946.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 853153 by gateau:

Do not allow user to edit images which Gwenview can't edit.


 M  +21 -0     gvcore.cpp  
 M  +7 -0      gvcore.h  
 M  +26 -0     imageopscontextmanageritem.cpp  


--- trunk/KDE/kdegraphics/gwenview/app/gvcore.cpp #853152:853153
@@ -22,6 +22,7 @@
 #include "gvcore.h"
 
 // Qt
+#include <QApplication>
 #include <QFuture>
 #include <QFutureWatcher>
 #include <QList>
@@ -195,6 +196,9 @@
 
 
 void GvCore::rotateLeft(const KUrl& url) {
+	if (!ensureDocumentIsEditable(url)) {
+		return;
+	}
 	TransformImageOperation* op = new TransformImageOperation(ROT_270);
 	Document::Ptr doc = DocumentFactory::instance()->load(url);
 	doc->loadFullImage();
@@ -205,6 +209,9 @@
 
 
 void GvCore::rotateRight(const KUrl& url) {
+	if (!ensureDocumentIsEditable(url)) {
+		return;
+	}
 	TransformImageOperation* op = new TransformImageOperation(ROT_90);
 	Document::Ptr doc = DocumentFactory::instance()->load(url);
 	doc->loadFullImage();
@@ -214,4 +221,18 @@
 }
 
 
+bool GvCore::ensureDocumentIsEditable(const KUrl& url) {
+	Document::Ptr doc = DocumentFactory::instance()->load(url);
+	if (doc->isEditable()) {
+		return true;
+	}
+
+	KMessageBox::sorry(
+		QApplication::activeWindow(),
+		i18nc("@info", "Gwenview cannot edit this kind of image.")
+		);
+	return false;
+}
+
+
 } // namespace
--- trunk/KDE/kdegraphics/gwenview/app/gvcore.h #853152:853153
@@ -49,6 +49,13 @@
 	void rotateLeft(const KUrl&);
 	void rotateRight(const KUrl&);
 
+	/**
+	 * Checks if the document referenced by url is editable, shows a sorry
+	 * dialog if it's not.
+	 * @return true if editable, false if not
+	 */
+	static bool ensureDocumentIsEditable(const KUrl& url);
+
 private:
 	GvCorePrivate* const d;
 };
--- trunk/KDE/kdegraphics/gwenview/app/imageopscontextmanageritem.cpp #853152:853153
@@ -28,11 +28,13 @@
 #include <kdebug.h>
 #include <kinputdialog.h>
 #include <klocale.h>
+#include <kmessagebox.h>
 #include <kactioncollection.h>
 
 // Local
 #include "contextmanager.h"
 #include "documentpanel.h"
+#include "gvcore.h"
 #include "mainwindow.h"
 #include "sidebar.h"
 #include <lib/cropsidebar.h>
@@ -128,6 +130,12 @@
 		op->setDocument(doc);
 		doc->undoStack()->push(op);
 	}
+
+
+	bool ensureEditable() {
+		KUrl url = that->contextManager()->currentUrl();
+		return GvCore::ensureDocumentIsEditable(url);
+	}
 };
 
 
@@ -211,30 +219,45 @@
 
 
 void ImageOpsContextManagerItem::rotateLeft() {
+	if (!d->ensureEditable()) {
+		return;
+	}
 	TransformImageOperation* op = new TransformImageOperation(ROT_270);
 	d->applyImageOperation(op);
 }
 
 
 void ImageOpsContextManagerItem::rotateRight() {
+	if (!d->ensureEditable()) {
+		return;
+	}
 	TransformImageOperation* op = new TransformImageOperation(ROT_90);
 	d->applyImageOperation(op);
 }
 
 
 void ImageOpsContextManagerItem::mirror() {
+	if (!d->ensureEditable()) {
+		return;
+	}
 	TransformImageOperation* op = new TransformImageOperation(HFLIP);
 	d->applyImageOperation(op);
 }
 
 
 void ImageOpsContextManagerItem::flip() {
+	if (!d->ensureEditable()) {
+		return;
+	}
 	TransformImageOperation* op = new TransformImageOperation(VFLIP);
 	d->applyImageOperation(op);
 }
 
 
 void ImageOpsContextManagerItem::resizeImage() {
+	if (!d->ensureEditable()) {
+		return;
+	}
 	Document::Ptr doc = DocumentFactory::instance()->load(contextManager()->currentUrl());
 	doc->loadFullImage();
 	doc->waitUntilLoaded();
@@ -259,6 +282,9 @@
 
 
 void ImageOpsContextManagerItem::showCropSideBar() {
+	if (!d->ensureEditable()) {
+		return;
+	}
 	ImageView* imageView = d->mMainWindow->documentPanel()->imageView();
 	if (!imageView) {
 		kError() << "No ImageView available!";
[prev in list] [next in list] [prev in thread] [next in thread] 

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