#include #include "skinwnd.h" #include #include #include #include #include #include #include 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(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(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(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(dw->getInterface(scriptObjectGuid)); return o; } void SkinWnd::notifyMinMaxChanged() { if (wnd != NULL) { wnd->signalMinMaxEnforcerChanged(); } }