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

List:       kde-commits
Subject:    KDE/kdegraphics/gwenview
From:       Aurélien Gâteau <agateau () kde ! org>
Date:       2010-11-10 23:31:09
Message-ID: 20101110233109.8C8C7AC89E () svn ! kde ! org
[Download RAW message or body]

SVN commit 1195404 by gateau:

Simplified the UI of the share/export button

It is now always a menu. The last used plugin is shown at the top.

 M  +38 -38    app/kipiexportaction.cpp  
 M  +0 -1      app/kipiexportaction.h  
 M  +0 -2      lib/gwenviewconfig.kcfg  


--- trunk/KDE/kdegraphics/gwenview/app/kipiexportaction.cpp #1195403:1195404
@@ -26,6 +26,7 @@
 
 // KDE
 #include <kdebug.h>
+#include <kmenu.h>
 #include <klocale.h>
 
 // Local
@@ -38,24 +39,25 @@
 struct KIPIExportActionPrivate {
 	KIPIExportAction* q;
 	KIPIInterface* mKIPIInterface;
-	QString mDefaultActionText;
+	KMenu* mMenu;
 	QAction* mDefaultAction;
+	QList<QAction*> mExportActionList;
 
-	void initFromStoredDefaultAction() {
-		mDefaultActionText = GwenviewConfig::defaultExportPluginText();
-		if (!mDefaultActionText.isEmpty()) {
-			q->setText(mDefaultActionText);
-			q->setIcon(KIcon(GwenviewConfig::defaultExportPluginIconName()));
+	void updateMenu() {
+		mMenu->clear();
+
+		if (mDefaultAction) {
+			mMenu->addTitle(i18n("Last Used Plugin"));
+			mMenu->addAction(mDefaultAction);
+			mMenu->addTitle(i18n("Other Plugins"));
 		}
-		mDefaultAction = 0;
-		updateButtonBehavior();
+		Q_FOREACH(QAction* action, mExportActionList) {
+			action->setIconVisibleInMenu(true);
+			if (action != mDefaultAction) {
+				mMenu->addAction(action);
 	}
-
-	void updateButtonBehavior() {
-		bool splitButton = !mDefaultActionText.isEmpty() || mDefaultAction != 0;
-		q->setDelayed(splitButton);
-		q->setStickyMenu(splitButton);
 	}
+	}
 };
 
 /**
@@ -64,18 +66,22 @@
  * When an action in the menu is triggered, it is set as the default action
  */
 KIPIExportAction::KIPIExportAction(QObject* parent)
-: KToolBarPopupAction(KIcon("document-export"), i18n("Export"), parent)
+: KToolBarPopupAction(KIcon("document-export"), i18n("Share"), parent)
 , d(new KIPIExportActionPrivate) {
 	d->q = this;
 	d->mKIPIInterface = 0;
-	d->initFromStoredDefaultAction();
+	d->mMenu = new KMenu;
+	d->mDefaultAction = 0;
 
-	connect(this, SIGNAL(triggered(bool)), SLOT(triggerDefaultAction()));
-	connect(menu(), SIGNAL(aboutToShow()), SLOT(init()));
+	setDelayed(false);
+	setMenu(d->mMenu);
+	connect(d->mMenu, SIGNAL(aboutToShow()), SLOT(init()));
+	connect(d->mMenu, SIGNAL(triggered(QAction*)), SLOT(setDefaultAction(QAction*)));
 }
 
 
 KIPIExportAction::~KIPIExportAction() {
+	delete d->mMenu;
 	delete d;
 }
 
@@ -85,40 +91,34 @@
 }
 
 
-void KIPIExportAction::triggerDefaultAction() {
-	init();
-	if (!d->mDefaultAction) {
-		kWarning() << "No default action, this should not happen!";
-		return;
-	}
-	d->mDefaultAction->trigger();
-}
-
-
 void KIPIExportAction::init() {
-	if (!menu()->isEmpty()) {
+	if (!d->mMenu->isEmpty()) {
 		return;
 	}
-	// Fill the menu and init mDefaultAction if we find it
 	d->mKIPIInterface->loadPlugins();
-	connect(menu(), SIGNAL(triggered(QAction*)), SLOT(setDefaultAction(QAction*)));
-	Q_FOREACH(QAction* action, d->mKIPIInterface->pluginActions(KIPI::ExportPlugin)) {
-		menu()->addAction(action);
-		if (action->text() == d->mDefaultActionText) {
-			d->mDefaultAction = action;
-			d->updateButtonBehavior();
+	d->mExportActionList = d->mKIPIInterface->pluginActions(KIPI::ExportPlugin);
+
+	// Look for default action
+	QString defaultActionText = GwenviewConfig::defaultExportPluginText();
+	Q_FOREACH(QAction* action, d->mExportActionList) {
+		if (action->text() == defaultActionText) {
+			setDefaultAction(action);
+			break;
 		}
 	}
+
+	d->updateMenu();
 }
 
 
 void KIPIExportAction::setDefaultAction(QAction* action) {
+	if (action == d->mDefaultAction) {
+		return;
+	}
 	d->mDefaultAction = action;
-	setIcon(action->icon());
-	setText(action->text());
 
 	GwenviewConfig::setDefaultExportPluginText(action->text());
-	GwenviewConfig::setDefaultExportPluginIconName(action->icon().name());
+	d->updateMenu();
 }
 
 
--- trunk/KDE/kdegraphics/gwenview/app/kipiexportaction.h #1195403:1195404
@@ -42,7 +42,6 @@
 	void setKIPIInterface(KIPIInterface*);
 
 private Q_SLOTS:
-	void triggerDefaultAction();
 	void init();
 	void setDefaultAction(QAction*);
 
--- trunk/KDE/kdegraphics/gwenview/lib/gwenviewconfig.kcfg #1195403:1195404
@@ -67,8 +67,6 @@
 
 		<entry name="DefaultExportPluginText" type="String">
 		</entry>
-		<entry name="DefaultExportPluginIconName" type="String">
-		</entry>
 	</group>
 
 	<group name="FullScreen">
[prev in list] [next in list] [prev in thread] [next in thread] 

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