100 lines
2.5 KiB
C++
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();
|
||
|
}
|
||
|
}
|