diff --git a/Source/UI/AdventureGuide/UIAdventureGuide.cpp b/Source/UI/AdventureGuide/UIAdventureGuide.cpp index e23eb56e..a499822c 100644 --- a/Source/UI/AdventureGuide/UIAdventureGuide.cpp +++ b/Source/UI/AdventureGuide/UIAdventureGuide.cpp @@ -1,4 +1,11 @@ #include "UI/AdventureGuide/UIAdventureGuide.h" +#include "UI/Lists/UIListBoxTemplate.h" +#include "UI/Lists/UIVScrollBar.h" +#include "UI/Text/UIStaticTextControl.h" + +template void CUIListBoxEx::UpdateScrollBar(); +template void CUIListBox::UpdateScrollBar(); +template void CUIListBox::UpdateScrollBar(); namespace AdventureGuide { @@ -36,6 +43,50 @@ void CUIItem::Slot16() { void CUIQuest::Slot16() { } +// OFFSET: 0x009DD1D0 +// FUNCTION: fn_14334 +void CUIItemInfo::Slot16() { + this->unknown_00F0->scrollBar->SetHidden(1); + this->unknown_00F4->scrollBar->SetHidden(1); + this->unknown_00F8->scrollBar->SetHidden(1); +} + +// OFFSET: 0x009DD680 +// FUNCTION: fn_14337 +void CUIMonsterInfo::Slot16() { + this->unknown_00EC->scrollBar->SetHidden(1); + this->unknown_00F0->scrollBar->SetHidden(1); +} + +// OFFSET: 0x009DD6C0 +// FUNCTION: fn_14339 +void CUIQuestInfo::Slot16() { + this->unknown_00EC->scrollBar->SetHidden(1); + CUIVScrollBar* first = this->unknown_00EC->scrollBar; + first->dragging = 0; + first->Invalidate(); + this->unknown_00F0->scrollBar->SetHidden(1); + CUIVScrollBar* last = this->unknown_00F4->scrollBar; + last->dragging = 1; + last->Invalidate(); +} + +// OFFSET: 0x009DD720 +// FUNCTION: fn_14340 +void CUISubTab::Slot16() { + this->unknown_00EC->Show(0); +} + +// OFFSET: 0x009DD730 +// FUNCTION: fn_14341 +void CUITab::Slot16() { +} + +// OFFSET: 0x009DD740 +// FUNCTION: fn_14342 +void CUITabInfo::Slot16() { +} + // OFFSET: 0x009DDA40 // FUNCTION: fn_14347 void CUIIntro::Slot54(int, int) { diff --git a/Source/UI/Lists/UIListBoxTemplate.h b/Source/UI/Lists/UIListBoxTemplate.h index bd166f63..8ce73fab 100644 --- a/Source/UI/Lists/UIListBoxTemplate.h +++ b/Source/UI/Lists/UIListBoxTemplate.h @@ -29,13 +29,55 @@ public: /* 00C0 */ std::function onPress; }; +class CUIStaticText; + namespace AdventureGuide { -class CUISubTab : public CUIListItem {}; -class CUITab : public CUIListItem {}; -class CUIItemInfo : public CUIListItem {}; -class CUIMonsterInfo : public CUIListItem {}; -class CUIQuestInfo : public CUIListItem {}; -class CUITabInfo : public CUIListItem {}; +class CUISubTab : public CUIListItem { +public: + void Slot16() override; + + /* 00E8 */ unsigned char unknown_00E8[0x04]; + /* 00EC */ UIWindow* unknown_00EC; +}; + +class CUITab : public CUIListItem { +public: + void Slot16() override; +}; + +class CUIItemInfo : public CUIListItem { +public: + void Slot16() override; + + /* 00E8 */ unsigned char unknown_00E8[0x08]; + /* 00F0 */ CUIStaticText* unknown_00F0; + /* 00F4 */ CUIStaticText* unknown_00F4; + /* 00F8 */ CUIStaticText* unknown_00F8; +}; + +class CUIMonsterInfo : public CUIListItem { +public: + void Slot16() override; + + /* 00E8 */ unsigned char unknown_00E8[0x04]; + /* 00EC */ CUIStaticText* unknown_00EC; + /* 00F0 */ CUIStaticText* unknown_00F0; +}; + +class CUIQuestInfo : public CUIListItem { +public: + void Slot16() override; + + /* 00E8 */ unsigned char unknown_00E8[0x04]; + /* 00EC */ CUIStaticText* unknown_00EC; + /* 00F0 */ CUIStaticText* unknown_00F0; + /* 00F4 */ CUIStaticText* unknown_00F4; +}; + +class CUITabInfo : public CUIListItem { +public: + void Slot16() override; +}; class CItemData {}; class CMonsterData {}; class CQuestInfo {}; @@ -63,6 +105,20 @@ public: this->scrollBar->SetPosition(this->scrollBar->position); } + // OFFSET: 0x009DD9A0 + // OFFSET: 0x009DD9F0 + // FUNCTION: fn_14345 + // FUNCTION: fn_14346 + void UpdateScrollBar() { + int total = 0; + for (T* item : this->items) { + total += item->geometry.height; + } + this->scrollBar->SetTotal(total); + this->scrollBar->SetVisible(this->geometry.height); + this->scrollBar->SetPosition(this->scrollBar->position); + } + /* 0084 */ unsigned char unknown_0084[0x2C]; /* 00B0 */ CUIVScrollBar* scrollBar; /* 00B4 */ unsigned char unknown_00B4[0x10]; @@ -123,7 +179,9 @@ public: this->UpdateScrollBar(); } + // OFFSET: 0x009DD950 // OFFSET: 0x00A06300 + // FUNCTION: fn_14344 // FUNCTION: fn_15001 void UpdateScrollBar() { this->scrollBar->SetTotal(this->data.size() * this->rowHeight + this->itemY); diff --git a/Source/UI/Text/UIStaticTextControl.h b/Source/UI/Text/UIStaticTextControl.h new file mode 100644 index 00000000..50881d5f --- /dev/null +++ b/Source/UI/Text/UIStaticTextControl.h @@ -0,0 +1,19 @@ +#ifndef RAGNAROK_SOURCE_UI_TEXT_UISTATICTEXTCONTROL_H +#define RAGNAROK_SOURCE_UI_TEXT_UISTATICTEXTCONTROL_H + +#include "UI/Window/UIControl.h" + +class CUIVScrollBar; + +class CUIStaticText : public CUIControl { +public: + /* 0084 */ unsigned char unknown_0084[0x3C]; + /* 00C0 */ CUIVScrollBar* scrollBar; + /* 00C4 */ unsigned char unknown_00C4[0x38]; +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(sizeof(CUIStaticText) == 0xFC); +#endif + +#endif