rodecomp/Source/UI/Window/UIWindowMgr.h
ragnarok-clanker 4e5f7335ff Decompile fn_17124 (UIWindowMgr::RegisterNamedWindow)
Batch #1049 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review.

- fn_17124 UIWindowMgr::RegisterNamedWindow: logic confirmed by peer review

Reviewed-by: ragnarok-clanker
2026-10-27 12:14:55 +00:00

468 lines
17 KiB
C++

#ifndef RAGNAROK_SOURCE_UI_WINDOW_UIWINDOWMGR_H
#define RAGNAROK_SOURCE_UI_WINDOW_UIWINDOWMGR_H
#include "UI/Layout/SnapRectangle.h"
#include <windows.h>
#include <cstddef>
#include <cstdint>
#include <deque>
#include <list>
#include <map>
#include <set>
#include <string>
#include <unordered_set>
#include <vector>
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 UIWindowMgr {
public:
/* 0004 */ int activeWindowId;
/* 0008 */ std::map<int, UIWindow*> windows;
/* 0010 */ unsigned char unknown_0010[8];
/* 0018 */ std::list<int> windowHistory;
/* 0020 */ int lastWindowId;
/* 0024 */ unsigned char unknown_0024;
/* 0025 */ unsigned char unknown_0025;
/* 0026 */ unsigned char unknown_0026;
/* 0028 */ std::map<int, UIWindow*> 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<UIWindow*> persistentWindows;
/* 0178 */ bool retainedPersistentWindow;
/* 017C */ std::list<UIWindow*> rendered;
/* 0184 */ std::list<UIWindow*> retired;
/* 018C */ std::list<UIWindow*> registeredWindows;
/* 0194 */ std::map<UIWindow*, SnapRectangle> snapRectangles;
/* 019C */ UIWindow* inputWindow;
/* 01A0 */ UIWindow* hoverWindow;
/* 01A4 */ std::deque<UIWindow*> 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 */ std::uint32_t 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 */ std::uint32_t unknown_0328;
/* 032C */ UIWindow* window_032C;
/* 0330 */ std::uint32_t unknown_0330;
/* 0334 */ std::uint32_t unknown_0334;
/* 0338 */ std::uint32_t 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 */ std::uint32_t unknown_03A4;
/* 03A8 */ std::uint32_t unknown_03A8;
/* 03AC */ std::uint32_t unknown_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 */ std::uint32_t 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<WindowTextEntry> unknown_04C4;
/* 04CC */ std::list<std::string> unknown_04CC;
/* 04D4 */ std::list<std::string> unknown_04D4;
/* 04DC */ std::string unknown_04DC;
/* 04F4 */ int unknown_04F4;
/* 04F8 */ int unknown_04F8;
/* 04FC */ int unknown_04FC;
/* 0500 */ std::map<std::string, UIWindow*> namedWindows;
/* 0508 */ int unknown_0508;
/* 050C */ std::list<UIWindow*> hiddenWindows;
/* 0514 */ unsigned char unknown_0514[0x12];
/* 0526 */ bool unknown_0526;
/* 0527 */ unsigned char unknown_0527[0x49D];
/* 09C4 */ std::map<HWND, CWebBrowser*> browsers;
/* 09CC */ int unknown_09CC;
/* 09D0 */ CWebBrowser* browser_09D0;
/* 09D4 */ unsigned char unknown_09D4[0x10];
/* 09E4 */ std::vector<UIWindow*> 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<int, SavedWindowRectangle*> savedRectangles;
/* 4F198 */ std::map<int, UIWindow*> 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<WindowTextRecord> unknown_4F214;
/* 4F220 */ unsigned char unknown_4F220[0x18];
/* 4F238 */ int unknown_4F238;
/* 4F23C */ int unknown_4F23C;
/* 4F240 */ std::list<UIWindow*> snapExcluded;
/* 4F248 */ std::list<int> 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<int> savedWindowIds;
/* 4F288 */ UIWindow* window_4F288;
/* 4F28C */ std::unordered_set<UIWindow*> deferredDeletion;
/* 4F2AC */ UIWindow* window_4F2AC;
virtual ~UIWindowMgr();
UIWindowMgr();
void InitializeWindowPolicy();
void ResetWindows();
void Shutdown();
UIWindow* LookupWindow(int id);
void Schedule(UIWindow* window);
void Destroy(UIWindow* window);
void DismissTransient();
void RegisterNamedWindow(std::string name, UIWindow* window);
};
extern UIWindowMgr g_windowMgr;
#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