------------------------------------------------------------ revno: 3272 committer: poy <p...@123gen.com> branch nick: trunk timestamp: Tue 2013-04-23 19:41:14 +0200 message: plugin commands can have an icon modified: dcpp/PluginApiImpl.cpp dcpp/PluginApiImpl.h dcpp/PluginDefs.h dcpp/PluginManager.cpp dcpp/PluginManager.h win32/MainWindow.cpp win32/MainWindow.h win32/PluginApiWin.cpp win32/PluginApiWin.h
-- 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 'dcpp/PluginApiImpl.cpp' --- dcpp/PluginApiImpl.cpp 2013-03-03 19:19:41 +0000 +++ dcpp/PluginApiImpl.cpp 2013-04-23 17:41:14 +0000 @@ -95,7 +95,9 @@ &PluginApiImpl::getConfig, &PluginApiImpl::copyData, - &PluginApiImpl::releaseData + &PluginApiImpl::releaseData, + + &PluginApiImpl::getInstallPath }; DCLog PluginApiImpl::dcLog = { @@ -168,9 +170,9 @@ DCTagger PluginApiImpl::dcTagger = { DCINTF_DCPP_TAGGER_VER, + &PluginApiImpl::getText, + &PluginApiImpl::addTag, - - &PluginApiImpl::getText, &PluginApiImpl::replaceText }; @@ -429,6 +431,12 @@ } } +ConfigStrPtr DCAPI PluginApiImpl::getInstallPath(const char* guid) { + auto str = PluginManager::getInstallPath(guid); + ConfigStr value = { CFG_TYPE_STRING, str.c_str() }; + return reinterpret_cast<ConfigStrPtr>(copyData(reinterpret_cast<ConfigValuePtr>(&value))); +} + // Functions for DCLog void PluginApiImpl::log(const char* msg) { LogManager::getInstance()->message(msg); @@ -504,14 +512,14 @@ } // Functions for DCTagger +const char* PluginApiImpl::getText(TagDataPtr hTags) { + return reinterpret_cast<Tagger*>(hTags->object)->getText().c_str(); +} + void PluginApiImpl::addTag(TagDataPtr hTags, size_t start, size_t end, const char* id, const char* attributes) { reinterpret_cast<Tagger*>(hTags->object)->addTag(start, end, id, attributes); } -const char* PluginApiImpl::getText(TagDataPtr hTags) { - return reinterpret_cast<Tagger*>(hTags->object)->getText().c_str(); -} - void PluginApiImpl::replaceText(TagDataPtr hTags, size_t start, size_t end, const char* replacement) { reinterpret_cast<Tagger*>(hTags->object)->replaceText(start, end, replacement); } === modified file 'dcpp/PluginApiImpl.h' --- dcpp/PluginApiImpl.h 2013-01-29 18:08:36 +0000 +++ dcpp/PluginApiImpl.h 2013-04-23 17:41:14 +0000 @@ -71,6 +71,8 @@ static void DCAPI setConfig(const char* guid, const char* setting, ConfigValuePtr val); static ConfigValuePtr DCAPI getConfig(const char* guid, const char* setting, ConfigType type); + static ConfigStrPtr DCAPI getInstallPath(const char* guid); + // Functions for DCLog static void DCAPI log(const char* msg); @@ -92,9 +94,9 @@ static size_t DCAPI fromBase32(uint8_t* dst, const char* src, size_t n); // Functions for DCTagger + static const char* DCAPI getText(TagDataPtr hTags); + static void DCAPI addTag(TagDataPtr hTags, size_t start, size_t end, const char* id, const char* attributes); - - static const char* DCAPI getText(TagDataPtr hTags); static void DCAPI replaceText(TagDataPtr hTags, size_t start, size_t end, const char* replacement); // Functions for DCQueue === modified file 'dcpp/PluginDefs.h' --- dcpp/PluginDefs.h 2013-03-03 19:19:41 +0000 +++ dcpp/PluginDefs.h 2013-04-23 17:41:14 +0000 @@ -32,7 +32,7 @@ #endif /* Version of the plugin api (must change if old plugins simply can't be seen as viably working) */ -#define DCAPI_CORE_VER 6 +#define DCAPI_CORE_VER 7 #ifdef _WIN32 # define DCAPI __stdcall @@ -58,7 +58,7 @@ /* Recommended interfaces */ #define DCINTF_CONFIG "generic.plugins.DCConfig" /* Config management */ -#define DCINTF_CONFIG_VER 1 +#define DCINTF_CONFIG_VER 2 #define DCINTF_LOGGING "generic.plugins.DCLog" /* Logging functions */ #define DCINTF_LOGGING_VER 1 @@ -74,10 +74,10 @@ #define DCINTF_DCPP_QUEUE_VER 2 #define DCINTF_DCPP_UTILS "dcpp.utils.DCUtils" /* Utility and convenience functions */ -#define DCINTF_DCPP_UTILS_VER 2 +#define DCINTF_DCPP_UTILS_VER 1 #define DCINTF_DCPP_TAGGER "dcpp.xml.DCTagger" /* Manipulation of an XML tagger */ -#define DCINTF_DCPP_TAGGER_VER 2 +#define DCINTF_DCPP_TAGGER_VER 1 #define DCINTF_DCPP_UI "dcpp.ui.DCUI" /* User interface */ #define DCINTF_DCPP_UI_VER 1 @@ -336,6 +336,9 @@ ConfigValuePtr (DCAPI *copy) (const ConfigValuePtr val); void (DCAPI *release) (ConfigValuePtr val); + + /* Version 2 functions */ + ConfigStrPtr (DCAPI *get_install_path) (const char* guid); } DCConfig, *DCConfigPtr; /* Logging functions */ @@ -426,10 +429,9 @@ /* Tagger API version */ uint32_t apiVersion; + const char* (DCAPI *get_text) (TagDataPtr hTags); + void (DCAPI *add_tag) (TagDataPtr hTags, size_t start, size_t end, const char* id, const char* attributes); - - /* Version 2 functions */ - const char* (DCAPI *get_text) (TagDataPtr hTags); void (DCAPI *replace_text) (TagDataPtr hTags, size_t start, size_t end, const char* replacement); } DCTagger, *DCTaggerPtr; @@ -440,7 +442,10 @@ /* User interface API version */ uint32_t apiVersion; - void (DCAPI *add_command) (const char* name, DCCommandFunc command); + /* Add a command identified by "name". + "icon" is optional; it is the path to an icon file used to illustrate the command. */ + void (DCAPI *add_command) (const char* name, DCCommandFunc command, const char* icon); + /* Remove a command previously added with add_command. */ void (DCAPI *remove_command) (const char* name); void (DCAPI *play_sound) (const char* path); === modified file 'dcpp/PluginManager.cpp' --- dcpp/PluginManager.cpp 2013-04-23 15:34:45 +0000 +++ dcpp/PluginManager.cpp 2013-04-23 17:41:14 +0000 @@ -167,7 +167,7 @@ } const auto source = Util::getTempPath() + "dcext" PATH_SEPARATOR_STR; - const auto target = Util::getPath(Util::PATH_USER_LOCAL) + "Plugins" PATH_SEPARATOR_STR + uuid + PATH_SEPARATOR_STR; + const auto target = getInstallPath(uuid); const auto lib = target + Util::getFileName(plugin); File::ensureDirectory(lib); @@ -531,6 +531,10 @@ } } +string PluginManager::getInstallPath(const string& uuid) { + return Util::getPath(Util::PATH_USER_LOCAL) + "Plugins" PATH_SEPARATOR_STR + uuid + PATH_SEPARATOR_STR; +} + // Listeners void PluginManager::on(ClientManagerListener::ClientConnected, Client* aClient) noexcept { runHook(HOOK_HUB_ONLINE, aClient); === modified file 'dcpp/PluginManager.h' --- dcpp/PluginManager.h 2013-04-23 15:34:45 +0000 +++ dcpp/PluginManager.h 2013-04-23 17:41:14 +0000 @@ -175,6 +175,8 @@ const string& getPluginSetting(const string& pluginName, const string& setting); void removePluginSetting(const string& pluginName, const string& setting); + static string getInstallPath(const string& uuid); + private: void loadSettings() noexcept; void saveSettings() noexcept; === modified file 'win32/MainWindow.cpp' --- win32/MainWindow.cpp 2013-04-22 22:31:37 +0000 +++ win32/MainWindow.cpp 2013-04-23 17:41:14 +0000 @@ -45,6 +45,7 @@ #include <dcpp/WindowInfo.h> #include <dwt/Application.h> +#include <dwt/DWTException.h> #include <dwt/widgets/Grid.h> #include <dwt/widgets/MessageBox.h> #include <dwt/widgets/Notification.h> @@ -89,7 +90,7 @@ using dwt::Spinner; using dwt::ToolBar; -map<tstring, function<void ()>, noCaseStringLess> MainWindow::pluginCommands; +decltype(MainWindow::pluginCommands) MainWindow::pluginCommands; static dwt::IconPtr mainIcon(WinUtil::createIcon(IDI_DCPP, 32)); static dwt::IconPtr mainSmallIcon(WinUtil::createIcon(IDI_DCPP, 16)); @@ -655,8 +656,8 @@ return false; } -void MainWindow::addPluginCommand(const tstring& text, function<void ()> command) { - pluginCommands[text] = command; +void MainWindow::addPluginCommand(const tstring& text, function<void ()> command, const tstring& icon) { + pluginCommands[text] = make_pair(command, icon); if(WinUtil::mainWindow && !WinUtil::mainWindow->closing()) { WinUtil::mainWindow->pluginMenu->clear(); @@ -683,7 +684,12 @@ pluginMenu->appendItem(T_("(No plugin command found)"), nullptr, nullptr, false); } else { for(auto& i: pluginCommands) { - pluginMenu->appendItem(i.first, i.second); + dwt::IconPtr icon; + if(!i.second.second.empty()) { + try { icon = new dwt::Icon(i.second.second, dwt::Point(16, 16)); } + catch(const dwt::DWTException&) { } + } + pluginMenu->appendItem(i.first, i.second.first, icon); } } } === modified file 'win32/MainWindow.h' --- win32/MainWindow.h 2013-04-16 16:11:50 +0000 +++ win32/MainWindow.h 2013-04-23 17:41:14 +0000 @@ -67,7 +67,7 @@ void handleSettings(); - static void addPluginCommand(const tstring& text, function<void ()> command); + static void addPluginCommand(const tstring& text, function<void ()> command, const tstring& icon); static void removePluginCommand(const tstring& text); /** show a balloon popup. refer to the dwt::Notification::addMessage doc for info about parameters. */ @@ -138,8 +138,9 @@ bool tray_pm; /* sorted list of plugin commands. static because they may be added before the window has - actually been created. */ - static map<tstring, function<void ()>, noCaseStringLess> pluginCommands; + actually been created. + command name -> pair<callback, icon path> */ + static map<tstring, pair<function<void ()>, tstring>, noCaseStringLess> pluginCommands; HttpConnection* conns[CONN_LAST]; unique_ptr<File> geo6File, geo4File; === modified file 'win32/PluginApiWin.cpp' --- win32/PluginApiWin.cpp 2013-01-18 21:28:38 +0000 +++ win32/PluginApiWin.cpp 2013-04-23 17:41:14 +0000 @@ -21,6 +21,7 @@ #include <dcpp/PluginManager.h> #include <dcpp/Text.h> +#include <dcpp/Util.h> #include "MainWindow.h" #include "WinUtil.h" @@ -39,8 +40,8 @@ } // Functions for DCUI -void PluginApiWin::addCommand(const char* name, DCCommandFunc command) { - MainWindow::addPluginCommand(Text::toT(name), [=] { command(name); }); +void PluginApiWin::addCommand(const char* name, DCCommandFunc command, const char* icon) { + MainWindow::addPluginCommand(Text::toT(name), [=] { command(name); }, icon ? Text::toT(icon) : Util::emptyStringT); } void PluginApiWin::removeCommand(const char* name) { === modified file 'win32/PluginApiWin.h' --- win32/PluginApiWin.h 2013-01-18 21:28:38 +0000 +++ win32/PluginApiWin.h 2013-04-23 17:41:14 +0000 @@ -29,7 +29,7 @@ private: // Functions for DCUI - static void DCAPI addCommand(const char* name, DCCommandFunc command); + static void DCAPI addCommand(const char* name, DCCommandFunc command, const char* icon); static void DCAPI removeCommand(const char* name); static void DCAPI playSound(const char* path);
_______________________________________________ Mailing list: https://launchpad.net/~linuxdcpp-team Post to : linuxdcpp-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~linuxdcpp-team More help : https://help.launchpad.net/ListHelp