diff --git a/Source/UI/AdventureGuide/UIAdventureGuide.cpp b/Source/UI/AdventureGuide/UIAdventureGuide.cpp index 8fa420ea..8912c585 100644 --- a/Source/UI/AdventureGuide/UIAdventureGuide.cpp +++ b/Source/UI/AdventureGuide/UIAdventureGuide.cpp @@ -105,6 +105,15 @@ void CUIItem::OnSelectItem(CUIItemInfo* item, const CItemData&) { this->unknown_0088->Show(selected); } +// OFFSET: 0x009DC270 +// FUNCTION: fn_14319 +void CUIMonster::OnSelectMonster(CUIMonsterInfo* item, const CMonsterData&) { + if (item) { + this->unknown_0088 = item->unknown_00E8->unknown_0098; + } + this->unknown_0084->Show(!this->unknown_0088.empty()); +} + // OFFSET: 0x009DC2C0 // FUNCTION: fn_14320 void CUIQuest::OnSelectQuest(CUIQuestInfo* item, const CQuestInfo&) { @@ -237,4 +246,51 @@ void CUIMonster::Slot54(int, int) { this->unknown_0084->Show(0); } + +// OFFSET: 0x009DE410 +// FUNCTION: fn_14353 +void CUITab::SetSelected(bool selected) { + CUIListItem::SetSelected(selected); + const bool expand = selected && this->subTabs && !this->subTabs->geometry.visible; + if (this->subTabs) { + this->subTabs->Show(expand); + } + this->Resize(this->geometry.width, this->unknown_0110 + (expand ? this->subTabs->geometry.height : 0)); + CUIListBox* list = dynamic_cast*>(this->parent); + if (list) { + list->UpdateScrollBar(); + } + if (this->page) { + this->page->Show(selected); + } } + +} + +// OFFSET: 0x009DE4C0 +// FUNCTION: fn_14354 +template <> +void CUIListBox::SelectItem(CUIListItem* item) { + if (this->locked) { + return; + } + for (AdventureGuide::CUISubTab* entry : this->items) { + if (entry != item) { + entry->SetSelected(false); + } + } + item->SetSelected(true); + if (this->selected != item) { + AdventureGuide::CUISubTab* selected = dynamic_cast(item); + if (selected) { + this->selected = selected; + if (this->onSelect) { + this->onSelect(selected); + } + } + } +} + +// OFFSET: 0x009DE560 + +// OFFSET: 0x009DEBF0 diff --git a/Source/UI/AdventureGuide/UIAdventureGuide.h b/Source/UI/AdventureGuide/UIAdventureGuide.h index 4240cc67..b4de65c5 100644 --- a/Source/UI/AdventureGuide/UIAdventureGuide.h +++ b/Source/UI/AdventureGuide/UIAdventureGuide.h @@ -12,6 +12,10 @@ public: virtual void Slot53(); void OnButtonClick(); + void MarkQuest(int questId); + + /* 00D8 */ unsigned char unknown_00D8[0x20]; + /* 00F8 */ CUIListBox* tabs; }; namespace AdventureGuide { @@ -52,6 +56,8 @@ public: void Paint() override; void Slot54(int first, int second) override; + void OnSelectMonster(CUIMonsterInfo* item, const CMonsterData& data); + /* 0084 */ UIWindow* unknown_0084; /* 0088 */ std::string unknown_0088; /* 0080 */ CUIListBoxEx* monsterList; @@ -67,6 +73,7 @@ public: /* 0084 */ UIWindow* unknown_0084; /* 0088 */ UIWindow* unknown_0088; /* 008C */ std::string unknown_008C; + /* 0080 */ CUIListBoxEx* questList; }; } @@ -75,7 +82,7 @@ public: static_assert(sizeof(AdventureGuide::CUIIntro) == 0x8C); static_assert(sizeof(AdventureGuide::CUIItem) == 0xA8); static_assert(sizeof(AdventureGuide::CUIMonster) == 0xA4); -static_assert(sizeof(AdventureGuide::CUIQuest) == 0xA4); +static_assert(sizeof(AdventureGuide::CUIQuest) == 0xA8); #endif #endif diff --git a/Source/UI/Lists/UIListBoxTemplate.h b/Source/UI/Lists/UIListBoxTemplate.h index 33e1c0b5..722eb254 100644 --- a/Source/UI/Lists/UIListBoxTemplate.h +++ b/Source/UI/Lists/UIListBoxTemplate.h @@ -33,6 +33,8 @@ public: class CUIStaticText; +template class CUIListBox; + namespace AdventureGuide { class CUIPage; @@ -49,13 +51,16 @@ public: class CUITab : public CUIListItem { public: void Slot16() override; + void SetSelected(bool selected) override; void OnSelectSubTab(CUISubTab* subTab); - /* 00E8 */ unsigned char unknown_00E8[0x08]; + /* 00E8 */ unsigned char unknown_00E8[0x04]; + /* 00EC */ CUIListBox* subTabs; /* 00F0 */ std::string unknown_00F0; /* 0108 */ int type; /* 010C */ CUIPage* page; + /* 0110 */ int unknown_0110; }; class CUIItemInfo : public CUIListItem { @@ -74,7 +79,7 @@ class CUIMonsterInfo : public CUIListItem { public: void Slot16() override; - /* 00E8 */ unsigned char unknown_00E8[0x04]; + /* 00E8 */ CUIStaticText* unknown_00E8; /* 00EC */ CUIStaticText* unknown_00EC; /* 00F0 */ CUIStaticText* unknown_00F0; }; @@ -83,11 +88,12 @@ class CUIQuestInfo : public CUIListItem { public: void Slot16() override; - /* 00E8 */ unsigned char unknown_00E8[0x04]; + /* 00E8 */ UIWindow* unknown_00E8; /* 00EC */ CUIStaticText* unknown_00EC; /* 00F0 */ CUIStaticText* unknown_00F0; /* 00F4 */ CUIStaticText* unknown_00F4; /* 00F8 */ std::string unknown_00F8; + /* 0110 */ int questId; }; class CUITabInfo : public CUIListItem { @@ -165,10 +171,16 @@ public: this->scrollBar->SetPosition(this->scrollBar->position); } + void SelectItem(CUIListItem* item); + /* 0084 */ unsigned char unknown_0084[0x2C]; /* 00B0 */ CUIVScrollBar* scrollBar; /* 00B4 */ unsigned char unknown_00B4[0x10]; /* 00C4 */ std::list items; + /* 00CC */ T* selected; + /* 00D0 */ unsigned char locked; + /* 00D1 */ unsigned char unknown_00D1[0x07]; + /* 00D8 */ std::function onSelect; }; template class CUIListBoxEx : public CUIControl { diff --git a/Source/UI/Text/UIStaticTextControl.h b/Source/UI/Text/UIStaticTextControl.h index 50881d5f..523aab54 100644 --- a/Source/UI/Text/UIStaticTextControl.h +++ b/Source/UI/Text/UIStaticTextControl.h @@ -3,11 +3,15 @@ #include "UI/Window/UIControl.h" +#include + class CUIVScrollBar; class CUIStaticText : public CUIControl { public: - /* 0084 */ unsigned char unknown_0084[0x3C]; + /* 0080 */ std::string text; + /* 0098 */ std::string unknown_0098; + /* 00B0 */ unsigned char unknown_00B0[0x0C]; /* 00C0 */ CUIVScrollBar* scrollBar; /* 00C4 */ unsigned char unknown_00C4[0x38]; };