linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #06792
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 3272: plugin commands can have an icon
------------------------------------------------------------
revno: 3272
committer: poy <poy@xxxxxxxxxx>
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);