#ifndef RAGNAROK_SOURCE_UI_WINDOW_UIWINDOWMGR_H #define RAGNAROK_SOURCE_UI_WINDOW_UIWINDOWMGR_H #include "UI/Layout/SnapRectangle.h" #include #include #include #include #include #include #include #include #include #include class UIWindow; class CWebBrowser; struct WindowTextEntry { /* 0000 */ std::string text; /* 0018 */ std::uint32_t unknown_0018; }; struct WindowTextRecord { /* 0000 */ std::string text; /* 0018 */ std::uint32_t unknown_0018; /* 001C */ std::uint32_t unknown_001C; }; struct SavedWindowRectangle { /* 0000 */ int x; /* 0004 */ int y; /* 0008 */ int width; /* 000C */ int height; }; struct WindowPolicyEntry { /* 0000 */ int actions[8]; }; class UIRoulletteWnd; class UIWindowMgr { public: int SendNotice(int selector, std::intptr_t a, std::intptr_t b, std::intptr_t c, std::intptr_t d, std::intptr_t e); /* 0004 */ int activeWindowId; /* 0008 */ std::map windows; /* 0010 */ unsigned char unknown_0010[8]; /* 0018 */ std::list windowHistory; /* 0020 */ int lastWindowId; /* 0024 */ unsigned char unknown_0024; /* 0025 */ unsigned char unknown_0025; /* 0026 */ unsigned char unknown_0026; /* 0028 */ std::map retainedWindows; /* 0030 */ int unknown_0030; /* 0034 */ int unknown_0034; /* 0038 */ int unknown_0038; /* 003C */ int unknown_003C; /* 0040 */ int unknown_0040; /* 0044 */ int unknown_0044; /* 0048 */ int unknown_0048; /* 004C */ int unknown_004C; /* 0050 */ float unknown_0050; /* 0054 */ unsigned char unknown_0054; /* 0055 */ unsigned char unknown_0055[3]; /* 0058 */ int unknown_0058; /* 005C */ std::uint32_t unknown_005C; /* 0060 */ int unknown_0060; /* 0064 */ int unknown_0064; /* 0068 */ int unknown_0068; /* 006C */ int unknown_006C; /* 0070 */ int unknown_0070; /* 0074 */ int unknown_0074; /* 0078 */ int unknown_0078; /* 007C */ int unknown_007C; /* 0080 */ int unknown_0080; /* 0084 */ int unknown_0084; /* 0088 */ int unknown_0088; /* 008C */ int unknown_008C; /* 0090 */ int unknown_0090; /* 0094 */ int unknown_0094; /* 0098 */ int unknown_0098; /* 009C */ int unknown_009C; /* 00A0 */ int unknown_00A0; /* 00A4 */ int unknown_00A4; /* 00A8 */ int unknown_00A8; /* 00AC */ int unknown_00AC; /* 00B0 */ int unknown_00B0; /* 00B4 */ int unknown_00B4; /* 00B8 */ int unknown_00B8; /* 00BC */ int unknown_00BC; /* 00C0 */ int unknown_00C0; /* 00C4 */ int unknown_00C4; /* 00C8 */ int unknown_00C8; /* 00CC */ int unknown_00CC; /* 00D0 */ int unknown_00D0; /* 00D4 */ int unknown_00D4; /* 00D8 */ int unknown_00D8; /* 00DC */ int unknown_00DC; /* 00E0 */ int unknown_00E0; /* 00E4 */ int unknown_00E4; /* 00E8 */ int unknown_00E8; /* 00EC */ int unknown_00EC; /* 00F0 */ int unknown_00F0; /* 00F4 */ int unknown_00F4; /* 00F8 */ int unknown_00F8; /* 00FC */ int unknown_00FC; /* 0100 */ int unknown_0100; /* 0104 */ int unknown_0104; /* 0108 */ int unknown_0108; /* 010C */ int unknown_010C; /* 0110 */ int unknown_0110; /* 0114 */ int unknown_0114; /* 0118 */ int unknown_0118; /* 011C */ int unknown_011C; /* 0120 */ int unknown_0120; /* 0124 */ int unknown_0124; /* 0128 */ int unknown_0128; /* 012C */ int unknown_012C; /* 0130 */ int unknown_0130; /* 0134 */ int unknown_0134; /* 0138 */ int unknown_0138; /* 013C */ int unknown_013C; /* 0140 */ int unknown_0140; /* 0144 */ int unknown_0144; /* 0148 */ int unknown_0148; /* 014C */ int unknown_014C; /* 0150 */ int unknown_0150; /* 0154 */ int unknown_0154; /* 0158 */ int unknown_0158; /* 015C */ int unknown_015C; /* 0160 */ int unknown_0160; /* 0164 */ int unknown_0164; /* 0168 */ int unknown_0168; /* 016C */ int unknown_016C; /* 0170 */ std::set persistentWindows; /* 0178 */ bool retainedPersistentWindow; /* 017C */ std::list rendered; /* 0184 */ std::list retired; /* 018C */ std::list registeredWindows; /* 0194 */ std::map snapRectangles; /* 019C */ UIWindow* inputWindow; /* 01A0 */ UIWindow* hoverWindow; /* 01A4 */ std::deque modalWindows; /* 01B8 */ UIWindow* window_01B8; /* 01BC */ std::uint32_t unknown_01BC; /* 01C0 */ std::uint32_t unknown_01C0; /* 01C4 */ std::uint32_t unknown_01C4; /* 01C8 */ UIWindow* window_01C8; /* 01CC */ UIWindow* window_01CC; /* 01D0 */ UIWindow* window_01D0; /* 01D4 */ std::uint32_t unknown_01D4; /* 01D8 */ std::uint32_t unknown_01D8; /* 01DC */ std::uint32_t unknown_01DC; /* 01E0 */ UIWindow* unknown_01E0; /* 01E4 */ std::uint32_t unknown_01E4; /* 01E8 */ UIWindow* window_01E8; /* 01EC */ UIWindow* window_01EC; /* 01F0 */ std::uint32_t unknown_01F0; /* 01F4 */ std::uint32_t unknown_01F4; /* 01F8 */ std::uint32_t unknown_01F8; /* 01FC */ std::uint32_t unknown_01FC; /* 0200 */ std::uint32_t unknown_0200; /* 0204 */ std::uint32_t unknown_0204; /* 0208 */ std::uint32_t unknown_0208; /* 020C */ std::uint32_t unknown_020C; /* 0210 */ std::uint32_t unknown_0210; /* 0214 */ std::uint32_t unknown_0214; /* 0218 */ std::uint32_t unknown_0218; /* 021C */ std::uint32_t unknown_021C; /* 0220 */ std::uint32_t unknown_0220; /* 0224 */ std::uint32_t unknown_0224; /* 0228 */ std::uint32_t unknown_0228; /* 022C */ std::uint32_t unknown_022C; /* 0230 */ UIWindow* window_0230; /* 0234 */ std::uint32_t unknown_0234; /* 0238 */ std::uint32_t unknown_0238; /* 023C */ std::uint32_t unknown_023C; /* 0240 */ std::uint32_t unknown_0240; /* 0244 */ std::uint32_t unknown_0244; /* 0248 */ std::uint32_t unknown_0248; /* 024C */ std::uint32_t unknown_024C; /* 0250 */ std::uint32_t unknown_0250; /* 0254 */ std::uint32_t unknown_0254; /* 0258 */ std::uint32_t unknown_0258; /* 025C */ std::uint32_t unknown_025C; /* 0260 */ std::uint32_t unknown_0260; /* 0264 */ std::uint32_t unknown_0264; /* 0268 */ std::uint32_t unknown_0268; /* 026C */ std::uint32_t unknown_026C; /* 0270 */ UIWindow* window_0270; /* 0274 */ UIWindow* window_0274; /* 0278 */ UIWindow* window_0278; /* 027C */ UIWindow* window_027C; /* 0280 */ std::uint32_t unknown_0280; /* 0284 */ std::uint32_t unknown_0284; /* 0288 */ UIWindow* window_0288; /* 028C */ std::uint32_t unknown_028C; /* 0290 */ std::uint32_t unknown_0290; /* 0294 */ std::uint32_t unknown_0294; /* 0298 */ std::uint32_t unknown_0298; /* 029C */ std::uint32_t unknown_029C; /* 02A0 */ std::uint32_t unknown_02A0; /* 02A4 */ std::uint32_t unknown_02A4; /* 02A8 */ std::uint32_t unknown_02A8; /* 02AC */ std::uint32_t unknown_02AC; /* 02B0 */ std::uint32_t unknown_02B0; /* 02B4 */ std::uint32_t unknown_02B4; /* 02B8 */ std::uint32_t unknown_02B8; /* 02BC */ std::uint32_t unknown_02BC; /* 02C0 */ std::uint32_t unknown_02C0; /* 02C4 */ UIWindow* window_02C4; /* 02C8 */ UIWindow* window_02C8; /* 02CC */ std::uint32_t unknown_02CC; /* 02D0 */ std::uint32_t unknown_02D0; /* 02D4 */ std::uint32_t unknown_02D4; /* 02D8 */ std::uint32_t unknown_02D8; /* 02DC */ std::uint32_t unknown_02DC; /* 02E0 */ std::uint32_t unknown_02E0; /* 02E4 */ std::uint32_t unknown_02E4; /* 02E8 */ std::uint32_t unknown_02E8; /* 02EC */ std::uint32_t unknown_02EC; /* 02F0 */ std::uint32_t unknown_02F0; /* 02F4 */ std::uint32_t unknown_02F4; /* 02F8 */ std::uint32_t unknown_02F8; /* 02FC */ std::uint32_t unknown_02FC; /* 0300 */ std::uint32_t unknown_0300; /* 0304 */ std::uint32_t unknown_0304; /* 0308 */ std::uint32_t unknown_0308; /* 030C */ std::uint32_t unknown_030C; /* 0310 */ std::uint32_t unknown_0310; /* 0314 */ std::uint32_t unknown_0314; /* 0318 */ std::uint32_t unknown_0318; /* 031C */ std::uint32_t unknown_031C; /* 0320 */ UIWindow* window_0320; /* 0324 */ UIWindow* window_0324; /* 0328 */ UIWindow* unknown_0328; /* 032C */ UIWindow* window_032C; /* 0330 */ UIWindow* unknown_0330; /* 0334 */ UIWindow* unknown_0334; /* 0338 */ UIWindow* unknown_0338; /* 033C */ std::uint32_t unknown_033C; /* 0340 */ std::uint32_t unknown_0340; /* 0344 */ std::uint32_t unknown_0344; /* 0348 */ std::uint32_t unknown_0348; /* 034C */ std::uint32_t unknown_034C; /* 0350 */ std::uint32_t unknown_0350; /* 0354 */ std::uint32_t unknown_0354; /* 0358 */ std::uint32_t unknown_0358; /* 035C */ std::uint32_t unknown_035C; /* 0360 */ std::uint32_t unknown_0360; /* 0364 */ std::uint32_t unknown_0364; /* 0368 */ std::uint32_t unknown_0368; /* 036C */ std::uint32_t unknown_036C; /* 0370 */ std::uint32_t unknown_0370; /* 0374 */ std::uint32_t unknown_0374; /* 0378 */ std::uint32_t unknown_0378; /* 037C */ std::uint32_t unknown_037C; /* 0380 */ std::uint32_t unknown_0380; /* 0384 */ std::uint32_t unknown_0384; /* 0388 */ UIWindow* window_0388; /* 038C */ UIWindow* window_038C; /* 0390 */ std::uint32_t unknown_0390; /* 0394 */ std::uint32_t unknown_0394; /* 0398 */ std::uint32_t unknown_0398; /* 039C */ std::uint32_t unknown_039C; /* 03A0 */ std::uint32_t unknown_03A0; /* 03A4 */ UIWindow* window_03A4; /* 03A8 */ std::uint32_t unknown_03A8; /* 03AC */ UIWindow* window_03AC; /* 03B0 */ std::uint32_t unknown_03B0; /* 03B4 */ std::uint32_t unknown_03B4; /* 03B8 */ std::uint32_t unknown_03B8; /* 03BC */ std::uint32_t unknown_03BC; /* 03C0 */ UIWindow* window_03C0; /* 03C4 */ UIWindow* window_03C4; /* 03C8 */ UIWindow* window_03C8; /* 03CC */ UIWindow* window_03CC; /* 03D0 */ std::uint32_t unknown_03D0; /* 03D4 */ UIWindow* window_03D4; /* 03D8 */ UIWindow* window_03D8; /* 03DC */ UIWindow* window_03DC; /* 03E0 */ std::uint32_t unknown_03E0; /* 03E4 */ std::uint32_t unknown_03E4; /* 03E8 */ std::uint32_t unknown_03E8; /* 03EC */ std::uint32_t unknown_03EC; /* 03F0 */ std::uint32_t unknown_03F0; /* 03F4 */ unsigned short unknown_03F4; /* 03F6 */ unsigned char unknown_03F6; /* 03F7 */ unsigned char unknown_03F7; /* 03F8 */ std::uint32_t unknown_03F8; /* 03FC */ std::uint32_t unknown_03FC; /* 0400 */ int modal; /* 0404 */ std::uint32_t unknown_0404; /* 0408 */ std::uint32_t unknown_0408; /* 040C */ std::uint32_t unknown_040C; /* 0410 */ std::uint32_t unknown_0410; /* 0414 */ std::uint32_t unknown_0414; /* 0418 */ std::uint32_t unknown_0418; /* 041C */ std::uint32_t unknown_041C; /* 0420 */ std::uint32_t unknown_0420; /* 0424 */ std::uint32_t unknown_0424; /* 0428 */ UIWindow* window_0428; /* 042C */ std::uint32_t unknown_042C; /* 0430 */ std::uint32_t unknown_0430; /* 0434 */ std::uint32_t unknown_0434; /* 0438 */ std::uint32_t unknown_0438; /* 043C */ std::uint32_t unknown_043C; /* 0440 */ std::uint32_t unknown_0440; /* 0444 */ UIWindow* window_0444; /* 0448 */ UIWindow* window_0448; /* 044C */ UIWindow* window_044C; /* 0450 */ std::uint32_t unknown_0450; /* 0454 */ std::uint32_t unknown_0454; /* 0458 */ std::uint32_t unknown_0458; /* 045C */ std::uint32_t unknown_045C; /* 0460 */ std::uint32_t unknown_0460; /* 0464 */ UIRoulletteWnd* unknown_0464; /* 0468 */ UIWindow* window_0468; /* 046C */ int unknown_046C; /* 0470 */ int unknown_0470; /* 0474 */ int unknown_0474; /* 0478 */ UIWindow* unknown_0478; /* 047C */ int unknown_047C; /* 0480 */ int unknown_0480; /* 0484 */ std::string unknown_0484; /* 049C */ short unknown_049C; /* 049E */ short unknown_049E; /* 04A0 */ int unknown_04A0; /* 04A4 */ int unknown_04A4; /* 04A8 */ int unknown_04A8; /* 04AC */ int unknown_04AC; /* 04B0 */ unsigned char unknown_04B0; /* 04B1 */ unsigned char unknown_04B1[3]; /* 04B4 */ int unknown_04B4; /* 04B8 */ int unknown_04B8; /* 04BC */ int unknown_04BC; /* 04C0 */ int unknown_04C0; /* 04C4 */ std::list unknown_04C4; /* 04CC */ std::list unknown_04CC; /* 04D4 */ std::list unknown_04D4; /* 04DC */ std::string unknown_04DC; /* 04F4 */ int unknown_04F4; /* 04F8 */ int unknown_04F8; /* 04FC */ int unknown_04FC; /* 0500 */ std::map namedWindows; /* 0508 */ int unknown_0508; /* 050C */ std::list hiddenWindows; /* 0514 */ unsigned char unknown_0514[0x12]; /* 0526 */ bool unknown_0526; /* 0527 */ unsigned char unknown_0527[0x49D]; /* 09C4 */ std::map browsers; /* 09CC */ int unknown_09CC; /* 09D0 */ CWebBrowser* browser_09D0; /* 09D4 */ unsigned char unknown_09D4[0x10]; /* 09E4 */ std::vector messageBoxes; /* 09F0 */ unsigned char unknown_09F0[0x40]; /* 0A30 */ UIWindow* window_0A30; /* 0A34 */ WindowPolicyEntry policy[10041]; /* 4F154 */ unsigned char unknown_4F154[16]; /* 4F164 */ UIWindow* window_4F164; /* 4F168 */ UIWindow* window_4F168; /* 4F16C */ UIWindow* window_4F16C; /* 4F170 */ UIWindow* window_4F170; /* 4F174 */ UIWindow* window_4F174; /* 4F178 */ UIWindow* window_4F178; /* 4F17C */ UIWindow* window_4F17C; /* 4F180 */ UIWindow* window_4F180; /* 4F184 */ UIWindow* window_4F184; /* 4F188 */ UIWindow* window_4F188; /* 4F18C */ UIWindow* window_4F18C; /* 4F190 */ std::map savedRectangles; /* 4F198 */ std::map overlays; /* 4F1A0 */ unsigned previousHitUid; /* 4F1A4 */ unsigned currentHitUid; /* 4F1A8 */ unsigned char unknown_4F1A8[0x24]; /* 4F1CC */ UIWindow* window_4F1CC; /* 4F1D0 */ UIWindow* window_4F1D0; /* 4F1D4 */ UIWindow* window_4F1D4; /* 4F1D8 */ UIWindow* window_4F1D8; /* 4F1DC */ UIWindow* window_4F1DC; /* 4F1E0 */ int visible_276; /* 4F1E4 */ UIWindow* window_4F1E4; /* 4F1E8 */ UIWindow* window_4F1E8; /* 4F1EC */ UIWindow* window_4F1EC; /* 4F1F0 */ UIWindow* window_4F1F0; /* 4F1F4 */ UIWindow* window_4F1F4; /* 4F1F8 */ UIWindow* window_4F1F8; /* 4F1FC */ UIWindow* window_4F1FC; /* 4F200 */ unsigned char unknown_4F200[16]; /* 4F210 */ bool unknown_4F210; /* 4F211 */ bool unknown_4F211; /* 4F214 */ std::vector unknown_4F214; /* 4F220 */ unsigned char unknown_4F220[0x18]; /* 4F238 */ int unknown_4F238; /* 4F23C */ int unknown_4F23C; /* 4F240 */ std::list snapExcluded; /* 4F248 */ std::list unknown_4F248; /* 4F250 */ UIWindow* window_4F250; /* 4F254 */ UIWindow* window_4F254; /* 4F258 */ UIWindow* window_4F258; /* 4F25C */ UIWindow* window_4F25C; /* 4F260 */ UIWindow* window_4F260; /* 4F264 */ UIWindow* window_4F264; /* 4F268 */ UIWindow* window_4F268; /* 4F26C */ UIWindow* window_4F26C; /* 4F270 */ UIWindow* window_4F270; /* 4F274 */ UIWindow* window_4F274; /* 4F278 */ UIWindow* window_4F278; /* 4F27C */ UIWindow* window_4F27C; /* 4F280 */ std::list savedWindowIds; /* 4F288 */ UIWindow* window_4F288; /* 4F28C */ std::unordered_set deferredDeletion; /* 4F2AC */ UIWindow* window_4F2AC; virtual ~UIWindowMgr(); UIWindowMgr(); void InitializeWindowPolicy(); void ResetWindows(); void Shutdown(); void SetScreenSize(int width, int height); UIWindow* LookupWindow(int id); void GetMiniPartyUsableArea(RECT* area); void Schedule(UIWindow* window); void SetUnknown04DC(const char* text); void Destroy(UIWindow* window); void ForgetWindowReferences(UIWindow* removed); void DismissTransient(); void RegisterNamedWindow(std::string name, UIWindow* window); void InvalidateAll(); void RefreshClanWnd(); void RefreshGuildWindows(); void RefreshRouletteWnd(); void EnableRouletteWnd(); char UpdateSnapRectangles(); bool ProcessDialogKey(int unused, int key); void NotifyMode(); void NotifyItemWindows(int accountId, int lower, int upper); int SendMsg(int message, std::intptr_t argument1, std::intptr_t argument2, std::intptr_t argument3, std::intptr_t argument4, std::intptr_t argument5); bool IsOrderFixed(int id); void RemoveOrder(int id); void BringToFront(int id); void SetCapture(UIWindow* window); void ReleaseCapture(); UIWindow* Capture() const; }; extern UIWindowMgr g_windowMgr; extern int g_dragWindowId; void __fastcall RefreshItemWindows(UIWindowMgr* mgr); #if defined(_WIN32) && !defined(_WIN64) static_assert(sizeof(WindowTextEntry) == 0x1C); static_assert(sizeof(WindowTextRecord) == 0x20); static_assert(sizeof(SavedWindowRectangle) == 0x10); static_assert(sizeof(WindowPolicyEntry) == 0x20); static_assert(offsetof(UIWindowMgr, windows) == 0x8); static_assert(offsetof(UIWindowMgr, windowHistory) == 0x18); static_assert(offsetof(UIWindowMgr, retainedWindows) == 0x28); static_assert(offsetof(UIWindowMgr, persistentWindows) == 0x170); static_assert(offsetof(UIWindowMgr, rendered) == 0x17C); static_assert(offsetof(UIWindowMgr, retired) == 0x184); static_assert(offsetof(UIWindowMgr, registeredWindows) == 0x18C); static_assert(offsetof(UIWindowMgr, snapRectangles) == 0x194); static_assert(offsetof(UIWindowMgr, modalWindows) == 0x1A4); static_assert(offsetof(UIWindowMgr, window_01C8) == 0x1C8); static_assert(offsetof(UIWindowMgr, window_01E8) == 0x1E8); static_assert(offsetof(UIWindowMgr, window_0230) == 0x230); static_assert(offsetof(UIWindowMgr, modal) == 0x400); static_assert(offsetof(UIWindowMgr, unknown_0484) == 0x484); static_assert(offsetof(UIWindowMgr, unknown_04C4) == 0x4C4); static_assert(offsetof(UIWindowMgr, unknown_04CC) == 0x4CC); static_assert(offsetof(UIWindowMgr, unknown_04D4) == 0x4D4); static_assert(offsetof(UIWindowMgr, unknown_04DC) == 0x4DC); static_assert(offsetof(UIWindowMgr, namedWindows) == 0x500); static_assert(offsetof(UIWindowMgr, hiddenWindows) == 0x50C); static_assert(offsetof(UIWindowMgr, browsers) == 0x9C4); static_assert(offsetof(UIWindowMgr, messageBoxes) == 0x9E4); static_assert(offsetof(UIWindowMgr, policy) == 0xA34); static_assert(offsetof(UIWindowMgr, savedRectangles) == 0x4F190); static_assert(offsetof(UIWindowMgr, overlays) == 0x4F198); static_assert(offsetof(UIWindowMgr, unknown_4F214) == 0x4F214); static_assert(offsetof(UIWindowMgr, snapExcluded) == 0x4F240); static_assert(offsetof(UIWindowMgr, unknown_4F248) == 0x4F248); static_assert(offsetof(UIWindowMgr, savedWindowIds) == 0x4F280); static_assert(offsetof(UIWindowMgr, deferredDeletion) == 0x4F28C); static_assert(offsetof(UIWindowMgr, window_4F2AC) == 0x4F2AC); static_assert(sizeof(UIWindowMgr) == 0x4F2B0); #endif #endif