From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/Wasabi/api/wndmgr/skinwnd.cpp | 99 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Src/Wasabi/api/wndmgr/skinwnd.cpp (limited to 'Src/Wasabi/api/wndmgr/skinwnd.cpp') diff --git a/Src/Wasabi/api/wndmgr/skinwnd.cpp b/Src/Wasabi/api/wndmgr/skinwnd.cpp new file mode 100644 index 00000000..5ac895a0 --- /dev/null +++ b/Src/Wasabi/api/wndmgr/skinwnd.cpp @@ -0,0 +1,99 @@ +#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(); + } +} -- cgit