#ifndef RAGNAROK_SOURCE_UI_ITEMS_UICHANGEMATERIALWND_H #define RAGNAROK_SOURCE_UI_ITEMS_UICHANGEMATERIALWND_H #include "Contents/Items/ItemInfo.h" #include "UI/Buttons/UICheckBox.h" #include "UI/Lists/UIScrollBar.h" #include "UI/Window/UIFrameWnd.h" #include #include #include class UIButton; class UIBitmapButton; class UIEditCtrl; class UIChangeMaterialWnd_List; struct MaterialSlotPos { /* 0000 */ int x; /* 0004 */ int y; }; struct MaterialReq { /* 0000 */ int id; /* 0004 */ int quantity; }; struct MaterialResult { /* 0000 */ int id; /* 0004 */ int quantity; /* 0008 */ int amount; }; struct MaterialListEntry { /* 0000 */ unsigned char state; /* 0004 */ std::vector materials; /* 0010 */ std::vector results; }; struct MaterialNameLess { // INLINED explicit MaterialNameLess(const std::vector& entries) : entries(entries) { } bool operator()(unsigned int first, unsigned int second) const; /* 0000 */ std::vector entries; }; class UIChangeMaterialWnd_ScrollBar : public UIScrollBar { public: // VTABLE: vt_00211 UIChangeMaterialWnd_ScrollBar(); void Paint() override; }; class UIChangeMaterialWnd_CheckBox : public UICheckBox { public: // INLINED UIChangeMaterialWnd_CheckBox() : UICheckBox() {} void Paint() override; void SetLabels(std::string ascending, std::string descending); /* 010C */ std::string ascendingText; /* 0124 */ std::string descendingText; }; class UIChangeMaterialWnd : public UIFrameWnd { public: UIChangeMaterialWnd(); void OnCreate(int width, int height) override; bool IsFrameWnd() override; void Paint() override; void OnMouseHover(int x, int y) override; void OnRBtnUp(int x, int y) override; ITEM_INFO* GetItemAt(int x, int y); void SendChangeMaterial(); void OnProcess() override; int SendMsg(UIWindow* sender, int message, std::intptr_t argument1, std::intptr_t argument2, std::intptr_t argument3, std::intptr_t argument4) override; /* 00B4 */ UIChangeMaterialWnd_List* itemList; /* 00B8 */ UIEditCtrl* searchEdit; /* 00BC */ UIChangeMaterialWnd_CheckBox* m_sortBox; /* 00C0 */ UIBitmapButton* m_button; /* 00C4 */ int m_resultX; /* 00C8 */ int m_resultY; /* 00D0 */ ITEM_INFO m_resultItem; /* 01C8 */ MaterialSlotPos m_materialPos[6]; /* 01F8 */ std::vector m_materials; /* 0204 */ int m_resultAmount; /* 0208 */ std::string m_resultText; }; class UIChangeMaterialWnd_List : public UIFrameWnd { public: UIChangeMaterialWnd_List(); void Paint() override; void Move(int x, int y) override; // INLINED void OnLBtnDown(int, int) override {} void OnMouseHover(int x, int y) override; void OnMouseMove(int x, int y) override; void OnWheel(int argument) override; int SendMsg(UIWindow* sender, int message, std::intptr_t argument1, std::intptr_t argument2, std::intptr_t argument3, std::intptr_t argument4) override; void ApplyFilter(std::string text); void SortItems(bool ascending); void RefreshVisibleEntries(); void UpdateScrollBar(); void SetSelectedIndex(int index); void OnLBtnUp(int x, int position) override; void SelectNextItem(int delta); void ShiftSelectedIndex(int value); void OnCreate(int width, int height) override; const MaterialListEntry* GetEntry(unsigned int index) const; /* 00B4 */ int rowHeight; /* 00B8 */ int scrollBarWidth; /* 00BC */ int m_pageSize; /* 00C0 */ int64_t m_selectedIndex; /* 00C8 */ int64_t m_hoverIndex; /* 00D0 */ int m_scrollOffset; /* 00D4 */ int m_previousScrollOffset; /* 00D8 */ UIScrollBar* m_scrollBar; /* 00DC */ std::vector m_items; /* 00E8 */ std::vector m_entries; /* 00F4 */ std::uint32_t padding_00F4; }; #if defined(_WIN32) && !defined(_WIN64) static_assert(offsetof(UIChangeMaterialWnd, m_resultX) == 0xC4); static_assert(offsetof(UIChangeMaterialWnd, m_resultItem) == 0xD0); static_assert(offsetof(UIChangeMaterialWnd, m_materialPos) == 0x1C8); static_assert(offsetof(UIChangeMaterialWnd, m_materials) == 0x1F8); static_assert(offsetof(UIChangeMaterialWnd, m_resultAmount) == 0x204); static_assert(offsetof(UIChangeMaterialWnd, m_resultText) == 0x208); static_assert(sizeof(UIChangeMaterialWnd_List) == 0xF8); static_assert(offsetof(UIChangeMaterialWnd_List, m_pageSize) == 0xBC); static_assert(offsetof(UIChangeMaterialWnd_List, m_selectedIndex) == 0xC0); static_assert(offsetof(UIChangeMaterialWnd_List, m_hoverIndex) == 0xC8); static_assert(offsetof(UIChangeMaterialWnd_List, m_scrollOffset) == 0xD0); static_assert(offsetof(UIChangeMaterialWnd_List, m_previousScrollOffset) == 0xD4); static_assert(offsetof(UIChangeMaterialWnd_List, m_items) == 0xDC); static_assert(offsetof(UIChangeMaterialWnd_List, m_entries) == 0xE8); static_assert(sizeof(MaterialListEntry) == 0x1C); static_assert(offsetof(MaterialListEntry, materials) == 0x4); static_assert(offsetof(MaterialListEntry, results) == 0x10); static_assert(sizeof(MaterialResult) == 0xC); static_assert(sizeof(MaterialReq) == 0x8); #endif #endif