From 3b6ea446f128e2b29c9964d3f1ad2eedd806d8d1 Mon Sep 17 00:00:00 2001 From: pescuma Date: Sat, 2 May 2009 16:36:37 +0000 Subject: extraicons: 0.2.4.0 * Fix for removing grouped icon git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@175 c086bb3d-8645-0410-b8da-73a8550f86e7 --- Plugins/extraicons/Docs/extraicons_changelog.txt | 3 ++ Plugins/extraicons/Docs/extraicons_version.txt | 2 +- Plugins/extraicons/ExtraIconGroup.cpp | 68 ++++++++++++++++++------ Plugins/extraicons/ExtraIconGroup.h | 1 + Plugins/extraicons/extraicons.cpp | 2 +- 5 files changed, 57 insertions(+), 19 deletions(-) (limited to 'Plugins') diff --git a/Plugins/extraicons/Docs/extraicons_changelog.txt b/Plugins/extraicons/Docs/extraicons_changelog.txt index 2691db4..789981b 100644 --- a/Plugins/extraicons/Docs/extraicons_changelog.txt +++ b/Plugins/extraicons/Docs/extraicons_changelog.txt @@ -2,6 +2,9 @@ Extra Icons Service Changelog: +. 0.2.4.0 + * Fix for removing grouped icon + . 0.2.3.0 * Fix for initial position of icons diff --git a/Plugins/extraicons/Docs/extraicons_version.txt b/Plugins/extraicons/Docs/extraicons_version.txt index d375c54..9ce190c 100644 --- a/Plugins/extraicons/Docs/extraicons_version.txt +++ b/Plugins/extraicons/Docs/extraicons_version.txt @@ -1 +1 @@ -Extra Icons Service 0.2.3.0 \ No newline at end of file +Extra Icons Service 0.2.4.0 \ No newline at end of file diff --git a/Plugins/extraicons/ExtraIconGroup.cpp b/Plugins/extraicons/ExtraIconGroup.cpp index 64edf5b..b7862e0 100644 --- a/Plugins/extraicons/ExtraIconGroup.cpp +++ b/Plugins/extraicons/ExtraIconGroup.cpp @@ -20,7 +20,7 @@ #include "commons.h" ExtraIconGroup::ExtraIconGroup(const char *name) : - ExtraIcon(name), setValidExtraIcon(false) + ExtraIcon(name), setValidExtraIcon(false), insideApply(false) { char setting[512]; mir_snprintf(setting, MAX_REGS(setting), "%s/%s", MODULE_NAME, name); @@ -53,11 +53,13 @@ void ExtraIconGroup::rebuildIcons() void ExtraIconGroup::applyIcon(HANDLE hContact) { - if (hContact == NULL) + if (!isEnabled() || hContact == NULL) return; setValidExtraIcon = false; + insideApply = true; + unsigned int i; for (i = 0; i < items.size(); ++i) { @@ -67,6 +69,8 @@ void ExtraIconGroup::applyIcon(HANDLE hContact) break; } + insideApply = false; + DBWriteContactSettingDword(hContact, MODULE_NAME, name.c_str(), setValidExtraIcon ? items[i]->getID() : 0); } @@ -108,42 +112,72 @@ void ExtraIconGroup::onClick(HANDLE hContact) int ExtraIconGroup::setIcon(int id, HANDLE hContact, void *icon) { + if (insideApply) + { + for (unsigned int i = 0; i < items.size(); ++i) + if (items[i]->getID() == id) + return items[i]->setIcon(id, hContact, icon); + + return -1; + } + ExtraIcon *current = getCurrentItem(hContact); int currentPos = items.size(); - ExtraIcon *store = NULL; int storePos = items.size(); for (unsigned int i = 0; i < items.size(); ++i) { if (items[i]->getID() == id) - { - store = items[i]; storePos = i; - } if (items[i] == current) - { currentPos = i; - } } - if (store == NULL) + if (storePos == items.size()) { return -1; } - else if (storePos < currentPos) + else if (storePos > currentPos) { - DBWriteContactSettingDword(hContact, MODULE_NAME, name.c_str(), id); - return store->setIcon(id, hContact, icon); + items[storePos]->storeIcon(hContact, icon); + return 0; } - else if (storePos == currentPos) // store == current + + // Ok, we have to set the icon, but we have to assert it is a valid icon + + setValidExtraIcon = false; + + int ret = items[storePos]->setIcon(id, hContact, icon); + + if (storePos < currentPos) { - return store->setIcon(id, hContact, icon); + if (setValidExtraIcon) + DBWriteContactSettingDword(hContact, MODULE_NAME, name.c_str(), items[storePos]->getID()); } - else // if (storePos > currentPos) + else if (storePos == currentPos) { - store->storeIcon(hContact, icon); - return 0; + if (!setValidExtraIcon) + { + DBWriteContactSettingDword(hContact, MODULE_NAME, name.c_str(), 0); + + insideApply = true; + + for (++storePos; storePos < items.size(); ++storePos) + { + items[storePos]->applyIcon(hContact); + + if (setValidExtraIcon) + break; + } + + insideApply = false; + + if (setValidExtraIcon) + DBWriteContactSettingDword(hContact, MODULE_NAME, name.c_str(), items[storePos]->getID()); + } } + + return ret; } void ExtraIconGroup::storeIcon(HANDLE hContact, void *icon) diff --git a/Plugins/extraicons/ExtraIconGroup.h b/Plugins/extraicons/ExtraIconGroup.h index aa02a03..9065099 100644 --- a/Plugins/extraicons/ExtraIconGroup.h +++ b/Plugins/extraicons/ExtraIconGroup.h @@ -54,6 +54,7 @@ public: protected: std::string description; bool setValidExtraIcon; + bool insideApply; virtual ExtraIcon * getCurrentItem(HANDLE hContact) const; }; diff --git a/Plugins/extraicons/extraicons.cpp b/Plugins/extraicons/extraicons.cpp index cf87a3b..26dd9b5 100644 --- a/Plugins/extraicons/extraicons.cpp +++ b/Plugins/extraicons/extraicons.cpp @@ -24,7 +24,7 @@ PLUGININFOEX pluginInfo = { sizeof(PLUGININFOEX), "Extra Icons Service", - PLUGIN_MAKE_VERSION(0,2,3,0), + PLUGIN_MAKE_VERSION(0,2,4,0), "Extra Icons Service", "Ricardo Pescuma Domenecci", "", -- cgit v1.2.3