Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
200
Src/Plugins/General/gen_ff/embedwndguid.cpp
Normal file
200
Src/Plugins/General/gen_ff/embedwndguid.cpp
Normal file
|
@ -0,0 +1,200 @@
|
|||
#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;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue