rodecomp/Source/UI/Window/UIWindowFactory.cpp
ragnarok-clanker 14a432d922 Maintenance: [forced, user-approved] Family F3: remove WindowDialogs, WindowResponseRecorder, UIMessageBoxContext, UIEntryQueueContex
Batch #10232 by ragnarok-clanker: forced by an admin (22 lower score(s), 263 changed function(s)); checked with 562 compiled unit(s), including every includer of Source/Client/Mode/CLoginMode.h, Source/Client/ReplayPacketRecorder.h, Source/Client/Session.h, Source/Contents/NavigationManager.h, Source/UI/Acceptance/UIJoinPartyAcceptWnd.h, Source/UI/EntryQueue/UIEntryQueueWnd.h, Source/UI/Guild/UIAgitWnd.h, Source/UI/Item/UIParaItemShopWnd.h, Source/UI/Items/UIItemRepairWnd.h, Source/UI/Items/UIMakeTargetListWnd.h, Source/UI/Items/UIMakeTargetProcessWnd.h, Source/UI/Items/UIWeaponRefineWnd.h, Source/UI/Window/UIHomunInfoWnd.h, Source/UI/Window/UIMerInfoWnd.h, Source/UI/Window/UIMessageBox.h, Source/UI/Window/UINavigationWnd.h, Source/UI/Window/UIPayConfirmWnd.h, Source/UI/Window/UIPetInfoWnd.h, Source/UI/Window/UIShowWarpWnd.h, Source/UI/Window/UIWindow.h, Source/UI/Window/UIWindowMgr.h, Source/UI/Window/WindowDialogs.h.
2026-11-03 10:23:36 +00:00

92 lines
2.6 KiB
C++

#include "UI/Window/UIWindowFactory.h"
#include "Client/Session.h"
#include "Render/Renderer.h"
#include "Script/LuaScript.h"
#include "UI/EntryQueue/UIEntryQueueWnd.h"
#include "UI/Shortcuts/UIQuickSlotWnd.h"
#include "UI/Window/UIHotKeyWnd.h"
#include "UI/Window/UISerachStoreInfoWnd.h"
#include "UI/Window/UIWindow.h"
#include "UI/Window/UIWindowMgr.h"
#include <string>
struct LayoutWindowContexts {
QuickSlotPainting& quickSlots;
};
// GLOBAL: gl_25184
bool g_searchStoreInfoCreated;
// OFFSET: 0x00AA1350
// FUNCTION: fn_17208
UIWindow* UIWindowMgr::CreateLayoutWindow(int id) {
int width = 0;
int height = 0;
int x = 0;
int y = 0;
if (!g_luaScript->Call("GetWindowInfo", "d>dddd", id, &width, &height, &x, &y)) {
return nullptr;
}
x = g_renderer->viewport.width * x / 1024;
y = g_renderer->viewport.height * y / 768;
UIWindow* window = this->LookupWindow(id);
std::string yKey;
std::string xKey;
if (window == nullptr) {
LayoutWindowContexts& contexts = *reinterpret_cast<LayoutWindowContexts*>(this);
switch (id) {
case 0x9C:
window = new UIHotKeyWnd();
this->unknown_0404 = window;
break;
case 0x9D:
window = new UIEntryQueueWnd();
break;
case 0x9F:
window = new UIQuickSlotWnd(contexts.quickSlots);
break;
case 0xB5:
window = new UISerachStoreInfoWnd();
g_searchStoreInfoCreated = true;
break;
case 0xD1:
window = new UIEntryQueueStandByWnd();
break;
}
int savedX;
int savedY;
auto saved = this->savedRectangles.find(id);
if (saved != this->savedRectangles.end() && saved->second != nullptr) {
savedX = saved->second->x;
savedY = saved->second->y;
} else {
savedX = g_session.GetOptionInteger(xKey.c_str(), x);
savedY = g_session.GetOptionInteger(yKey.c_str(), y);
}
window->SetId(id);
window->SetSize(width, height);
if (savedX >= 0 && savedX <= g_renderer->viewport.width - window->geometry.width && savedY >= 0 &&
savedY <= g_renderer->viewport.height - window->geometry.height) {
x = savedX;
y = savedY;
}
window->Move(x, y);
this->rendered.push_back(window);
if (id == 0x9F) {
window->SendMsg(nullptr, 0x22, reinterpret_cast<std::intptr_t>(this->unknown_0934), 0, 0, 0);
} else if (id == 0x9D) {
window->SendMsg(nullptr, 0x22, reinterpret_cast<std::intptr_t>(this->unknown_0944), 0, 0, 0);
} else if (id == 0xD4) {
window->SendMsg(nullptr, 0x22, reinterpret_cast<std::intptr_t>(this->unknown_09D4), 0, 0, 0);
}
}
return window;
}