← Back to team overview

linuxdcpp-team team mailing list archive

[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 3307: plugin menus

 

------------------------------------------------------------
revno: 3307
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Mon 2013-06-03 14:14:18 +0200
message:
  plugin menus
modified:
  win32/MainWindow.cpp
  win32/MainWindow.h
  win32/PluginApiWin.cpp


--
lp:dcplusplus
https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk

Your team Dcplusplus-team is subscribed to branch lp:dcplusplus.
To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'win32/MainWindow.cpp'
--- win32/MainWindow.cpp	2013-05-14 23:30:49 +0000
+++ win32/MainWindow.cpp	2013-06-03 12:14:18 +0000
@@ -668,8 +668,7 @@
 	pluginCommands[guid][text] = make_pair(command, icon);
 
 	if(WinUtil::mainWindow && !WinUtil::mainWindow->closing()) {
-		WinUtil::mainWindow->pluginMenu->clear();
-		WinUtil::mainWindow->addPluginCommands(WinUtil::mainWindow->pluginMenu);
+		WinUtil::mainWindow->refreshPluginMenu();
 	}
 }
 
@@ -687,11 +686,15 @@
 	}
 
 	if(WinUtil::mainWindow && !WinUtil::mainWindow->closing()) {
-		WinUtil::mainWindow->pluginMenu->clear();
-		WinUtil::mainWindow->addPluginCommands(WinUtil::mainWindow->pluginMenu);
+		WinUtil::mainWindow->refreshPluginMenu();
 	}
 }
 
+void MainWindow::refreshPluginMenu() {
+	pluginMenu->clear();
+	addPluginCommands(pluginMenu);
+}
+
 void MainWindow::addPluginCommands(Menu* menu) {
 	menu->appendItem(T_("Add"), [this] { PluginUtils::addPlugin(this); });
 	menu->appendItem(T_("Configure"), [this] { handlePluginSettings(); });
@@ -703,12 +706,13 @@
 
 	for(auto& guid: plugins) {
 		auto sub = menu->appendPopup(Text::toT(PluginManager::getInstance()->getPlugin(guid).name));
-		sub->appendItem(T_("Configure"), [this, guid] { PluginUtils::configPlugin(guid, this); });
-		if(PluginManager::getInstance()->isLoaded(guid)) {
-			sub->appendItem(T_("Disable"), [this, guid] { PluginUtils::disablePlugin(guid, this); });
-		} else {
-			sub->appendItem(T_("Enable"), [this, guid] { PluginUtils::enablePlugin(guid, this); });
-		}
+
+		const auto enabled = PluginManager::getInstance()->isLoaded(guid);
+		sub->appendItem(T_("Enable"), [this, guid] { PluginUtils::enablePlugin(guid, this); }, nullptr, !enabled);
+		sub->appendItem(T_("Disable"), [this, guid] { PluginUtils::disablePlugin(guid, this); }, nullptr, enabled);
+
+		sub->appendSeparator();
+		sub->appendItem(T_("Configure"), [this, guid] { PluginUtils::configPlugin(guid, this); }, nullptr, enabled);
 
 		auto commandIt = pluginCommands.find(guid);
 		if(commandIt != pluginCommands.end()) {
@@ -1320,8 +1324,7 @@
 		if(SETTING(SETTINGS_SAVE_INTERVAL) != prevSettingsSave)
 			setSaveTimer();
 
-		pluginMenu->clear();
-		addPluginCommands(pluginMenu);
+		refreshPluginMenu();
 	}
 }
 

=== modified file 'win32/MainWindow.h'
--- win32/MainWindow.h	2013-05-14 23:30:49 +0000
+++ win32/MainWindow.h	2013-06-03 12:14:18 +0000
@@ -70,6 +70,7 @@
 
 	static void addPluginCommand(const string& guid, const tstring& text, function<void ()> command, const tstring& icon);
 	static void removePluginCommand(const string& guid, const tstring& text);
+	void refreshPluginMenu();
 
 	/** show a balloon popup. refer to the dwt::Notification::addMessage doc for info about parameters. */
 	void notify(const tstring& title, const tstring& message, function<void ()> callback = nullptr, const dwt::IconPtr& balloonIcon = nullptr);

=== modified file 'win32/PluginApiWin.cpp'
--- win32/PluginApiWin.cpp	2013-05-14 21:10:23 +0000
+++ win32/PluginApiWin.cpp	2013-06-03 12:14:18 +0000
@@ -75,6 +75,7 @@
 		auto path = Text::fromT(path_t);
 		if(Util::getFileExt(path) == ".dcext") {
 			PluginInfoDlg(w, path).run();
+			WinUtil::mainWindow->refreshPluginMenu();
 		} else {
 			try {
 				PluginManager::getInstance()->addPlugin(path);
@@ -91,12 +92,15 @@
 		dwt::MessageBox(w).show(
 			str(TF_("%1% doesn't need any additional configuration") % Text::toT(PluginManager::getInstance()->getPlugin(guid).name)),
 			_T(APPNAME) _T(" ") _T(VERSIONSTRING), dwt::MessageBox::BOX_OK, dwt::MessageBox::BOX_ICONINFORMATION);
+		return;
 	}
+	WinUtil::mainWindow->refreshPluginMenu();
 }
 
 void PluginUtils::enablePlugin(const string& guid, dwt::Widget* w) {
 	try {
 		PluginManager::getInstance()->enablePlugin(guid);
+		WinUtil::mainWindow->refreshPluginMenu();
 	} catch(const Exception& e) {
 		dwt::MessageBox(w).show(tstring(T_("Cannot enable the plugin:")) + _T("\r\n\r\n") + Text::toT(e.getError()),
 			Text::toT(PluginManager::getInstance()->getPlugin(guid).name), dwt::MessageBox::BOX_OK, dwt::MessageBox::BOX_ICONSTOP);
@@ -105,4 +109,5 @@
 
 void PluginUtils::disablePlugin(const string& guid, dwt::Widget*) {
 	PluginManager::getInstance()->disablePlugin(guid);
+	WinUtil::mainWindow->refreshPluginMenu();
 }