diff options
Diffstat (limited to 'Src/Wasabi/api/skin/feeds/textfeed.cpp')
-rw-r--r-- | Src/Wasabi/api/skin/feeds/textfeed.cpp | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/feeds/textfeed.cpp b/Src/Wasabi/api/skin/feeds/textfeed.cpp new file mode 100644 index 00000000..feebe097 --- /dev/null +++ b/Src/Wasabi/api/skin/feeds/textfeed.cpp @@ -0,0 +1,116 @@ +#include <precomp.h> +#include "textfeed.h" +#include <bfc/pair.h> + +int TextFeed::registerFeed(const wchar_t *feedid, const wchar_t *initial_text, const wchar_t *description) +{ + //if (feeds.getItem(StringW(feedid))) + // return FALSE; + auto it = feeds.find(feedid); + if (feeds.end() != it) + { + return FALSE; + } + + //std::pair<std::wstring, std::wstring> pair(initial_text, description); + + feeds.insert({ feedid, {initial_text, description} }); + + dependent_sendEvent(svc_textFeed::depend_getClassGuid(), Event_TEXTCHANGE, (intptr_t)feedid, (void*)initial_text, wcslen(initial_text) + 1); + return TRUE; +} + +int TextFeed::sendFeed(const wchar_t *feedid, const wchar_t *text) +{ + //Pair <StringW, StringW> ft(L"", L""); + //if (!feeds.getItem(StringW(feedid), &ft)) + //{ + // //CUT ASSERTALWAYS("hey, you're trying to send a feed you didn't register. stop it."); + // DebugString("TextFeed::sendFeed(), feedid '%s' not registered", feedid); + // return FALSE; + //} + auto it = feeds.find(feedid); + if (feeds.end() == it) + { + return FALSE; + } + + //StringW id(feedid); + //feeds.getItem(id, &ft); + //ft.a = StringW(text); + //feeds.setItem(StringW(feedid), ft); + + auto &ft = feeds[feedid]; + ft.first = text; + + dependent_sendEvent(svc_textFeed::depend_getClassGuid(), Event_TEXTCHANGE, (intptr_t)feedid, (void*)text, wcslen(text) + 1); + return TRUE; +} + +const wchar_t *TextFeed::getFeedText(const wchar_t *name) +{ + //const Pair<StringW, StringW> *ft = feeds.getItemRef(StringW(name)); + //if (ft == NULL) + // return NULL; + //ft->a.getValue(); + + auto it = feeds.find(name); + if (it == feeds.end()) + { + return NULL; + } + auto& ft = it->second; + return ft.first.c_str(); +} + +const wchar_t *TextFeed::getFeedDescription(const wchar_t *name) +{ + //const Pair<StringW, StringW> *ft = feeds.getItemRef(StringW(name)); + //if (ft == NULL) return NULL; + //return ft->b.getValue(); + + auto it = feeds.find(name); + if (it == feeds.end()) + { + return NULL; + } + + auto& ft = it->second; + return ft.second.c_str(); +} + +int TextFeed::hasFeed(const wchar_t *name) +{ + return feeds.count(name); +} + +void TextFeed::dependent_onRegViewer(api_dependentviewer *viewer, int add) +{ + if (add) + { + //for (int i = 0; i < feeds.getNumItems(); i++) + //{ + // StringW a = feeds.enumIndexByPos(i, StringW(L"")); + // Pair<StringW, StringW> sp(L"", L""); + // StringW b = feeds.enumItemByPos(i, sp).a; + // dependent_sendEvent(svc_textFeed::depend_getClassGuid(), Event_TEXTCHANGE, (intptr_t)a.getValue(), (void*)b.getValue(), b.len() + 1, viewer); //send to this viewer only + //} + + for (auto it = feeds.begin(); it != feeds.end(); it++) + { + std::wstring key = it->first; + auto val = it->second; + std::wstring val_first = val.first; + dependent_sendEvent(svc_textFeed::depend_getClassGuid(), Event_TEXTCHANGE, (intptr_t)key.c_str(), (void*)val_first.c_str(), wcslen(val_first.c_str()) + 1, viewer); //send to this viewer only + } + } + + if (add) onRegClient(); + else onDeregClient(); +} + +void *TextFeed::dependent_getInterface(const GUID *classguid) +{ + HANDLEGETINTERFACE(svc_textFeed); + return NULL; +} |