winamp/Src/Wasabi/api/wndmgr/skinwnd.cpp
2024-09-24 14:54:57 +02:00

100 lines
2.5 KiB
C++

#include <precomp.h>
#include "skinwnd.h"
#include <api/wnd/api_window.h>
#include <api/wnd/wndclass/guiobjwnd.h>
#include <api/script/scriptguid.h>
#include <api/script/objects/c_script/c_group.h>
#include <api/script/objects/c_script/c_layout.h>
#include <api/script/objects/c_script/c_container.h>
#include <api/wnd/wndclass/wndholder.h>
SkinWnd::SkinWnd(const wchar_t *group_id, const wchar_t *prefered_container, int container_flag, RECT *animated_rect_source, int transcient, int starthidden)
{
isnew = 0;
wnd = WASABI_API_WNDMGR->skinwnd_createByGroupId(group_id, prefered_container, container_flag, animated_rect_source, transcient, starthidden, &isnew);
notifyMinMaxChanged();
}
SkinWnd::SkinWnd(GUID svc_or_group_guid, const wchar_t *prefered_container, int container_flag, RECT *animated_rect_source, int transcient, int starthidden)
{
isnew = 0;
wnd = WASABI_API_WNDMGR->skinwnd_createByGuid(svc_or_group_guid, prefered_container, container_flag, animated_rect_source, transcient, starthidden, &isnew);
notifyMinMaxChanged();
}
SkinWnd::~SkinWnd()
{}
void SkinWnd::destroy(RECT *animated_rect_dest)
{
if (wnd == NULL) return ;
if (!isnew)
{
ifc_window *w = wnd->findWindowByInterface(windowHolderGuid);
WindowHolder *wh = static_cast<WindowHolder*>(w->getInterface(windowHolderGuid));
if (wh != NULL)
{
wh->onRemoveWindow();
return ;
}
}
WASABI_API_WNDMGR->skinwnd_destroy(wnd, animated_rect_dest);
}
int SkinWnd::runModal(int center)
{
if (wnd == NULL) return 0;
ifc_window *w = wnd->getDesktopParent();
if (center)
{
C_Layout l(getLayout());
l.center();
}
w->setVisible(1);
return w->runModal();
}
void SkinWnd::endModal(int retcode)
{
if (wnd == NULL) return ;
wnd->endModal(retcode);
}
GuiObject *SkinWnd::findObject(const wchar_t *object_id)
{
if (wnd == NULL) return NULL;
GuiObject *obj = NULL;
obj = static_cast<GuiObject *>(wnd->getInterface(guiObjectGuid));
return obj->guiobject_findObject(object_id);
}
ScriptObject *SkinWnd::getContainer()
{
if (wnd == NULL) return NULL;
ifc_window *dw = wnd->getDesktopParent();
if (!dw) return NULL;
ScriptObject *o = static_cast<ScriptObject *>(dw->getInterface(scriptObjectGuid));
if (o != NULL)
{
return C_Layout(o).getContainer();
}
return NULL;
}
ScriptObject *SkinWnd::getLayout()
{
if (wnd == NULL) return NULL;
ifc_window *dw = wnd->getDesktopParent();
if (!dw) return NULL;
ScriptObject *o = static_cast<ScriptObject *>(dw->getInterface(scriptObjectGuid));
return o;
}
void SkinWnd::notifyMinMaxChanged()
{
if (wnd != NULL)
{
wnd->signalMinMaxEnforcerChanged();
}
}