123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- #include "precomp__gen_ff.h"
- #include "embedwndguid.h"
- #include "wa2wndembed.h"
- #include "wa2frontend.h"
- #include "wa2cfgitems.h"
- #include <bfc/string/stringW.h>
- extern void initFFApi();
- EmbedWndGuidMgr embedWndGuidMgr;
- EmbedWndGuid::EmbedWndGuid(embedWindowState *_ws)
- {
- hwnd = NULL;
- guid = INVALID_GUID;
- if (_ws == NULL) return ;
- ws = _ws;
- hwnd = ws->me;
- embedWndGuidMgr.getGuid(this);
- }
- EmbedWndGuid::EmbedWndGuid(EmbedWndGuid *wg)
- {
- hwnd = NULL;
- guid = INVALID_GUID;
- if (wg == NULL) return ;
- ws = wg->getEmbedWindowState();
- hwnd = ws->me;
- guid = wg->getGuid();
- }
- GUID EmbedWndGuidMgr::getGuid(embedWindowState *ws)
- {
- foreach(table)
- EmbedWndGuid *ewg = table.getfor();
- if (ewg->getEmbedWindowState() == ws)
- {
- return ewg->getGuid();
- }
- endfor;
- return INVALID_GUID;
- }
- GUID EmbedWndGuidMgr::getGuid(EmbedWndGuid *wg)
- {
- if (wg == NULL) return INVALID_GUID;
- // if we aren't loaded yet, init wasabi, otherwise ignore
- initFFApi();
- int gotit = 0;
- int nowrite = 0;
- wchar_t windowTitle[256] = L"";
- HWND child;
- GUID newGuid = INVALID_GUID;
- if (wg->getEmbedWindowState()->flags & EMBED_FLAGS_GUID)
- {
- newGuid = GET_EMBED_GUID(wg->getEmbedWindowState());
- nowrite=1;
- goto bypass;
- }
- if (wa2.isVis(wg->getEmbedWindowState()->me))
- {
- newGuid = avs_guid;
- nowrite = 1;
- extern int disable_send_visrandom;
- extern _bool visrandom;
- wa2.pollVisRandom();
- goto bypass;
- }
- child = GetWindow(wg->getEmbedWindowState()->me, GW_CHILD);
- if (child == wa2.getMediaLibrary())
- { newGuid = library_guid; nowrite = 1; goto bypass; }
- if (!gotit)
- {
- foreach(table)
- EmbedWndGuid *ewg = table.getfor();
- if (ewg->getEmbedWindowState() == wg->getEmbedWindowState())
- {
- wg->setGuid(ewg->getGuid());
- gotit = 1;
- break;
- }
- endfor;
- }
- if (!gotit)
- {
- // not found, look for window title in saved table
- GetWindowTextW(wg->getEmbedWindowState()->me, windowTitle, 256);
- if (*windowTitle)
- {
- wchar_t str[256] = L"";
- StringW configString = windowTitle;
- configString += L"_guid";
- WASABI_API_CONFIG->getStringPrivate(configString, str, 256, L"");
- if (*str)
- {
- wg->setGuid(nsGUID::fromCharW(str));
- table.addItem(new EmbedWndGuid(wg));
- gotit = 1;
- }
- }
- }
- if (!gotit)
- {
- // not found in saved table, or no title for the window, assign a new guid
- if (!_wcsicmp(windowTitle, L"AVS"))
- { newGuid = avs_guid; nowrite = 1; }
- else
- CoCreateGuid(&newGuid);
- bypass:
- wg->setGuid(newGuid);
- // save a copy of the element
- table.addItem(new EmbedWndGuid(wg));
- // write the guid in the saved table
- if (*windowTitle && !nowrite)
- {
- wchar_t str[256] = {0};
- nsGUID::toCharW(newGuid, str);
- StringW configString = windowTitle;
- configString += L"_guid";
- WASABI_API_CONFIG->setStringPrivate(configString, str);
- }
- }
- return wg->getGuid();
- }
- embedWindowState *EmbedWndGuidMgr::getEmbedWindowState(GUID g)
- {
- foreach(table)
- EmbedWndGuid *ewg = table.getfor();
- if (ewg->getGuid() == g)
- {
- embedWindowState *ews = ewg->getEmbedWindowState();
- if (wa2.isValidEmbedWndState(ews))
- return ews;
- }
- endfor;
- return NULL;
- }
- void EmbedWndGuidMgr::retireEmbedWindowState(embedWindowState *ws)
- {
- foreach(table)
- EmbedWndGuid *ewg = table.getfor();
- if (ewg->getEmbedWindowState() == ws)
- {
- delete table.getfor();
- table.removeByPos(foreach_index);
- break;
- }
- endfor;
- }
- int EmbedWndGuidMgr::testGuid(GUID g)
- {
- // if (g == library_guid) return 1;
- // if (g == avs_guid) return 1;
- foreach(table)
- EmbedWndGuid *ewg = table.getfor();
- if (ewg->getGuid() == g)
- {
- if (!wa2.isValidEmbedWndState(ewg->getEmbedWindowState())) retireEmbedWindowState(ewg->getEmbedWindowState());
- else return 1;
- }
- endfor;
- return 0;
- }
- int EmbedWndGuidMgr::getNumWindowStates()
- {
- return table.getNumItems();
- }
- GUID EmbedWndGuidMgr::enumWindowState(int n, embedWindowState **ws)
- {
- EmbedWndGuid *ewg = table.enumItem(n);
- if (ewg)
- {
- embedWindowState *ews = ewg->getEmbedWindowState();
- if (wa2.isValidEmbedWndState(ews))
- {
- if (ws) *ws = ews;
- return ewg->getGuid();
- }
- }
- return INVALID_GUID;
- }
|