rodecomp/Source/UI/Lists/UIListBoxTemplate.h
ragnarok-clanker 18770c1ebf Maintenance: [forced, user-approved] Window-class layout correction (supersedes batches 10282 and 10283). Removed placeholder members
Batch #10284 by ragnarok-clanker: forced by an admin (109 lower score(s), 2846 changed function(s)); checked with 403 compiled unit(s), including every includer of Source/Contents/SignBoard/SignBoard.h, Source/UI/Acceptance/UIJoinPartyAcceptWnd.h, Source/UI/AdventureGuide/UIAdventureGuide.h, Source/UI/Buttons/UIBasicButton.h, Source/UI/Buttons/UIBitmapButton.h, Source/UI/Buttons/UIBmpRadioBtn.h, Source/UI/Buttons/UIBmpTextButton.h, Source/UI/Buttons/UIButton.h, Source/UI/Buttons/UICheckBox.h, Source/UI/Buttons/UIItemTagButton.h, Source/UI/Buttons/UIJobSlotButton.h, Source/UI/Buttons/UINaviLinkButton.h, Source/UI/Buttons/UIRadioBtn.h, Source/UI/Buttons/UITextButton.h, Source/UI/Buttons/UITextureButton.h, Source/UI/CashShop/UICashShopWnd.h, Source/UI/Chat/UIChatRoomTitle.h, Source/UI/Chat/UINewChatWnd.h, Source/UI/Chat/UISubChatHisWnd.h, Source/UI/Chat/UIWhisperWnd.h, Source/UI/Clan/UIClanWnd.h, Source/UI/Dialogs/UIChooseWarpWnd.h, Source/UI/Dialogs/UIChooseWnd.h, Source/UI/Dialogs/UIDisconnectedServerMsgWnd.h, Source/UI/Dialogs/UIEditctrlWnd.h, Source/UI/Dialogs/UIEmailAddressWnd.h, Source/UI/Dialogs/UIGraffiStrboxWnd.h, Source/UI/Dialogs/UIMemorialDunWnd.h, Source/UI/Dialogs/UIMenuWnd.h, Source/UI/Dialogs/UIMiniMapWnd.h, Source/UI/Dialogs/UIMinimapZoomWnd.h, Source/UI/Dialogs/UINoticeConfirmWnd.h, Source/UI/Dialogs/UINotifyLevelUpWnd.h, Source/UI/Dialogs/UINotifyQuestWnd.h, Source/UI/Dialogs/UINpcEditDialogWnd.h, Source/UI/Dialogs/UIPasswordWnd.h, Source/UI/Dialogs/UIProhibitListWnd.h, Source/UI/Dialogs/UIQuitWnd.h, Source/UI/Dialogs/UIRestartWnd.h, Source/UI/Dialogs/UISelectCartWnd.h, Source/UI/Dialogs/UITipOfTheDayWnd.h, Source/UI/Dialogs/UITipboxWnd.h, Source/UI/Dialogs/UIWaitWnd.h, Source/UI/Edit/UICandidateWnd.h, Source/UI/Edit/UIEditCtrl.h, Source/UI/EntryQueue/UIEntryQueueWnd.h, Source/UI/GameSettings/GameSettingsUI.h, Source/UI/Gauges/UIPcGage.h, Source/UI/Guild/UIAgitWnd.h, Source/UI/Guild/UIGuildHelperWnd.h, Source/UI/Guild/UIGuildWnd.h, Source/UI/Guild/UIGuild_Storage_Log.h, Source/UI/Item/UIItemBaseWnd.h, Source/UI/Item/UIItemStoreSubWnd.h, Source/UI/Item/UIParaItemShopWnd.h, Source/UI/Items/MergeItemWnd.h, Source/UI/Items/UICardItemIllustWnd.h, Source/UI/Items/UIIllustWnd.h, Source/UI/Items/UIItemParamChangeDisplayWnd.h, Source/UI/Items/UIItemRepairWnd.h, Source/UI/Items/UIMakeTargetListWnd.h, Source/UI/Items/UIMakeTargetProcessWnd.h, Source/UI/Items/UIMakeTargetResultWnd.h, Source/UI/Items/UISpellListWnd.h, Source/UI/Items/UISwapEquipmentWnd.h, Source/UI/Items/UIWeaponRefineWnd.h, Source/UI/Lists/UIChatHisBox.h, Source/UI/Lists/UIComboBox.h, Source/UI/Lists/UIComboBoxDefWnd.h, Source/UI/Lists/UIComboBoxEx.h, Source/UI/Lists/UIDropDownBox.h, Source/UI/Lists/UIImgMenu.h, Source/UI/Lists/UIListBox.h, Source/UI/Lists/UIListBoxEx.h, Source/UI/Lists/UIListBoxID.h, Source/UI/Lists/UIListBoxTemplate.h, Source/UI/Lists/UIMemberListBox.h, Source/UI/Lists/UITabControl.h, Source/UI/Lists/UIThumb.h, Source/UI/Lists/UITreeView.h, Source/UI/Lists/UIVScrollBar.h, Source/UI/Navigation/UINavigationV4Wnd.h, Source/UI/Party/UIAdvenPartyBoardWnd.h, Source/UI/Party/UIApplyForPartyWnd.h, Source/UI/Party/UIPartyInfoWnd.h, Source/UI/Party/UIPartySettingWnd.h, Source/UI/Party/UIRegisterPartyWnd.h, Source/UI/Party/UIRequestJoinPartyWnd.h, Source/UI/Quest/UIOngoingQuestInfo.h, Source/UI/Quest/UIQuestDisplay.h, Source/UI/Quest/UIRenewQuestUI.h, Source/UI/Quest/UIRenewQuestWnd.h, Source/UI/Rodex/UIRodexComposeWnd.h, Source/UI/Shop/UIMerchantItemPurchaseMSGWnd.h, Source/UI/Shop/UIMerchantShopMakeWnd.h, Source/UI/Shop/UIMerchantShopTitle.h, Source/UI/Shop/UINoticeMessageBox_LockSellItem.h, Source/UI/Shortcuts/UIQuickSlotWnd.h, Source/UI/Shortcuts/UIShortCutWnd.h, Source/UI/Skill/UISkillListWnd.h, Source/UI/Skill/UISkillNameChangeWnd.h, Source/UI/Status/UIStatusWnd.h, Source/UI/StylingShop/UIStylingShopWnd.h, Source/UI/Text/UIAchWnd.h, Source/UI/Text/UIBalloonText.h, Source/UI/Text/UIStaticText.h, Source/UI/Text/UIStaticTextControl.h, Source/UI/Text/UITextViewer.h, Source/UI/Text/UITransBalloonText.h, Source/UI/UIBarGraph.h, Source/UI/UIBasicCtrl.h, Source/UI/UIBroadcastBalloon.h, Source/UI/UICaptchaPreviewWnd.h, Source/UI/UICaptchaRegisterWnd.h, Source/UI/UIChangeMaterialWnd.h, Source/UI/UICheckAttendanceWnd.h, Source/UI/UIGradeEnchantWnd.h, Source/UI/UIHotkeyGuideWnd.h, Source/UI/UIItemReformWnd.h, Source/UI/UILapineScrollBar.h, Source/UI/UILapineUpgradeBoxWnd.h, Source/UI/UIMacroBlackListCheckWnd.h, Source/UI/UIMacroDetectorWnd.h, Source/UI/UIMacroUserInfoWnd.h, Source/UI/UIPreviewEquipWnd.h, Source/UI/UIRefiningWnd.h, Source/UI/UIReputeWnd.h, Source/UI/UIRoundBoxTooltipWnd.h, Source/UI/UIScrollWnd.h, Source/UI/UIStaticBitmap.h, Source/UI/UIStaticItem.h, Source/UI/Window/UIAccountLimitedToolWnd.h, Source/UI/Window/UIBalloonOpenBtn.h, Source/UI/Window/UIBank_NewWnd.h, Source/UI/Window/UIBasicInfoWnd.h, Source/UI/Window/UIBattleMsgOptionWnd.h, Source/UI/Window/UIChangeNameWnd.h, Source/UI/Window/UIChatRoomWnd.h, Source/UI/Window/UICntWnd.h, Source/UI/Window/UIControl.h, Source/UI/Window/UIDebuffRemoveWnd.h, Source/UI/Window/UIEscOptionWnd.h, Source/UI/Window/UIFrameWnd.h, Source/UI/Window/UIHomunInfoWnd.h, Source/UI/Window/UIJobListWnd.h, Source/UI/Window/UILoginOTPWnd.h, Source/UI/Window/UIMakeCharWnd.h, Source/UI/Window/UIMerInfoWnd.h, Source/UI/Window/UIMessageBox.h, Source/UI/Window/UIMileageWnd.h, Source/UI/Window/UIMonsterDisplayWnd.h, Source/UI/Window/UIMonsterInfoWnd.h, Source/UI/Window/UINavigationHelpWnd.h, Source/UI/Window/UINavigationWnd.h, Source/UI/Window/UINewMakeCharWnd.h, Source/UI/Window/UINewSelectCharWnd.h, Source/UI/Window/UINewSkillListWnd.h, Source/UI/Window/UINormalMB.h, Source/UI/Window/UINoteWnd.h, Source/UI/Window/UINoticeWnd.h, Source/UI/Window/UIOpenMailBoxWnd.h, Source/UI/Window/UIOpenRoulletteWnd.h, Source/UI/Window/UIPartyBookingHelpWnd.h, Source/UI/Window/UIPayConfirmWnd.h, Source/UI/Window/UIPetEvolutionWnd.h, Source/UI/Window/UIPetInfoWnd.h, Source/UI/Window/UIRebirthWnd.h, Source/UI/Window/UIReplayControlWnd.h, Source/UI/Window/UIReplayRECControlWnd.h, Source/UI/Window/UIRodexContentsWnd.h, Source/UI/Window/UIRoulletteWnd.h, Source/UI/Window/UISecondCostumeWnd.h, Source/UI/Window/UISeekPartyListWnd.h, Source/UI/Window/UISeekPartyMBWnd.h, Source/UI/Window/UISeekPartyWnd.h, Source/UI/Window/UISelectReplayDataWnd.h, Source/UI/Window/UISelectServerWnd.h, Source/UI/Window/UISerachStoreInfoWnd.h, Source/UI/Window/UIShowWarpWnd.h, Source/UI/Window/UITalkboxTrapInputWnd.h, Source/UI/Window/UITransMenuWnd.h, Source/UI/Window/UIViewCameraInfoWnd.h, Source/UI/Window/UIWindow.h.
2026-11-03 18:46:49 +00:00

495 lines
13 KiB
C++

#ifndef RAGNAROK_SOURCE_UI_LISTS_UILISTBOXTEMPLATE_H
#define RAGNAROK_SOURCE_UI_LISTS_UILISTBOXTEMPLATE_H
#include "UI/Lists/UIVScrollBar.h"
#include "UI/Window/UIControl.h"
#include <algorithm>
#include <cstddef>
#include <cstdint>
#include <functional>
#include <list>
#include <map>
#include <string>
#include <vector>
class CUIListItem : public CUIControl {
public:
__declspec(noinline) CUIListItem();
~CUIListItem() override;
void Slot25(int x, int y) override;
void Slot27(int x, int y) override;
void Slot31(int x, int y) override;
void Slot47() override;
void Paint() override;
virtual void SetSelected(bool selected);
virtual void SetHighlighted(bool highlighted);
virtual void SetFrozen(bool frozen);
__declspec(noinline) void SetImageResources(CBitmapRes* normal, CBitmapRes* hover, CBitmapRes* pressed, CBitmapRes* disabled);
/* 0080 */ std::map<int, CBitmapRes*> images;
/* 0088 */ int selected;
/* 008C */ CBitmapRes* disabledImage;
/* 0090 */ unsigned char frozen;
/* 0094 */ int index;
/* 0098 */ std::function<void(CUIListItem*)> onHover;
/* 00C0 */ std::function<void(CUIListItem*)> onPress;
};
class CUIStaticText;
class CSprRes;
class CActRes;
template <class T> class CUIListBox;
namespace AdventureGuide {
class CUIPage;
class CUISubTab : public CUIListItem {
public:
CUISubTab();
void Slot15(int width, int height) override;
void Slot16() override;
/* 00E8 */ CUIStaticText* unknown_00E8;
/* 00EC */ CUIStaticImage* unknown_00EC;
/* 00F0 */ int id;
/* 00F4 */ unsigned int unknown_00F4;
};
class CUITab : public CUIListItem {
public:
CUITab();
void Slot15(int width, int height) override;
void Slot16() override;
void SetSelected(bool selected) override;
void OnSelectSubTab(CUISubTab* subTab);
CUIListBox<CUISubTab>* CreateSubTabList();
/* 00E8 */ CUIStaticText* unknown_00E8;
/* 00EC */ CUIListBox<CUISubTab>* subTabs;
/* 00F0 */ std::string unknown_00F0;
/* 0108 */ int type;
/* 010C */ CUIPage* page;
/* 0110 */ int unknown_0110;
};
class CUIItemInfo : public CUIListItem {
public:
CUIItemInfo();
void Slot15(int width, int height) override;
void Slot16() override;
void Slot32(int x, int y) override;
void SetDescription(int type, const std::vector<const char*>& description);
union {
/* 00E8 */ unsigned char unknown_00E8[0x08];
struct {
/* 00E8 */ CUIStaticImage* image;
/* 00EC */ CUIStaticText* nameText;
};
};
/* 00F0 */ CUIStaticText* unknown_00F0;
/* 00F4 */ CUIStaticText* unknown_00F4;
/* 00F8 */ CUIStaticText* unknown_00F8;
/* 00FC */ int itemId;
/* 0100 */ int type;
/* 0104 */ int location;
/* 0108 */ std::string unknown_0108;
};
class CUIMonsterInfo : public CUIListItem {
public:
CUIMonsterInfo();
void Slot15(int width, int height) override;
void Slot16() override;
void Paint() override;
void SetMonster(const std::string& title);
/* 00E8 */ CUIStaticText* unknown_00E8;
/* 00EC */ CUIStaticText* unknown_00EC;
/* 00F0 */ CUIStaticText* unknown_00F0;
/* 00F4 */ CSprRes* sprite;
/* 00F8 */ CActRes* action;
};
class CUIQuestInfo : public CUIListItem {
public:
CUIQuestInfo();
void Slot15(int width, int height) override;
void Slot16() override;
void SetTitle(int id);
void SetTip(int id);
void SetStatusLines(bool first, bool second, bool third);
void SetViewerLines(const std::vector<std::string>& lines);
/* 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 {
public:
CUITabInfo();
void Slot15(int width, int height) override;
void Slot16() override;
/* 00E8 */ CUIStaticText* unknown_00E8;
/* 00EC */ CUIStaticText* unknown_00EC;
};
class CItemData {
public:
/* 0000 */ int id;
/* 0004 */ std::uint8_t first;
/* 0005 */ std::uint8_t second;
/* 0006 */ std::uint8_t third;
/* 0008 */ int unknown_0008;
/* 000C */ int unknown_000C;
/* 0010 */ std::string text;
/* 0028 */ std::vector<std::string> values;
/* 0034 */ int type;
};
class CMonsterData {
public:
/* 0000 */ std::string name;
/* 0018 */ std::vector<std::string> values;
};
class CQuestInfo {
public:
/* 0000 */ int id;
/* 0004 */ std::uint8_t unknown_0004;
/* 0008 */ int unknown_0008;
/* 000C */ int unknown_000C;
/* 0010 */ int questId;
/* 0014 */ std::string title;
/* 002C */ std::string text;
/* 0044 */ std::vector<std::string> rewards;
/* 0050 */ int type;
};
}
namespace Guide_Intro {
struct Contents {
Contents(const std::string& first, const std::string& second) : first(first), second(second) {
}
/* 0000 */ std::string first;
/* 0018 */ std::string second;
};
}
template <class T> class CUIListBox : public CUIControl {
public:
// INLINED
explicit CUIListBox()
: CUIControl(), scrollBar(nullptr), itemWidth(0), rowHeight(0), itemX(0), itemY(0), selected(nullptr), locked(0) {
}
~CUIListBox() override;
void Slot15(int width, int height) override;
// OFFSET: 0x009D23B0
// OFFSET: 0x009D23C0
// FUNCTION: fn_14011
// FUNCTION: fn_14012
void Paint() override {
this->ClearSurface(0xFFFF00FF);
}
// OFFSET: 0x009D2410
// OFFSET: 0x009D2450
// FUNCTION: fn_14017
// FUNCTION: fn_14018
void Slot35(int value) override {
if (!this->scrollBar->dragging && this->scrollBar->total > this->scrollBar->visible) {
this->scrollBar->Slot35(value);
} else if (this->parent) {
this->parent->Slot35(value);
}
}
// OFFSET: 0x009D3FD0
// OFFSET: 0x009D4040
// FUNCTION: fn_14037
// FUNCTION: fn_14038
void Resize(int width, int height) override {
UIWindow::Resize(width, height);
this->scrollBar->Resize(this->scrollBar->geometry.width, height);
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);
}
// 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);
}
void Slot53(int resolveSkin) override;
void SelectItem(CUIListItem* item);
T* CreateItem();
// INLINED
void SetOnSelect(std::function<void(T*)> handler) {
this->onSelect = handler;
}
// INLINED
void SetImages(const std::string& normal, const std::string& hover, const std::string& pressed, const std::string& disabled) {
this->imageNames[0] = normal;
this->imageNames[1] = hover;
this->imageNames[2] = pressed;
this->disabledName = disabled;
this->Slot53(0);
this->Invalidate();
}
CResPtr<CBitmapRes>& NormalImage() {
return this->unknown_0080;
}
/* 0080 */ CResPtr<CBitmapRes> unknown_0080;
/* 0084 */ CResPtr<CBitmapRes> unknown_0084;
/* 0088 */ CResPtr<CBitmapRes> unknown_0088;
/* 008C */ CResPtr<CBitmapRes> unknown_008C;
/* 0090 */ std::map<int, std::string> imageNames;
/* 0098 */ std::string disabledName;
/* 00B0 */ CUIVScrollBar* scrollBar;
/* 00B4 */ int itemWidth;
/* 00B8 */ int rowHeight;
/* 00BC */ int itemX;
/* 00C0 */ int itemY;
/* 00C4 */ std::list<T*> items;
/* 00CC */ T* selected;
/* 00D0 */ unsigned char locked;
/* 00D1 */ unsigned char unknown_00D1[0x07];
/* 00D8 */ std::function<void(T*)> onSelect;
};
template <class T, class D> class CUIListBoxEx : public CUIControl {
public:
CUIListBoxEx();
~CUIListBoxEx() override;
void Slot15(int width, int height) override;
// OFFSET: 0x00A01E70
// OFFSET: 0x00A01E80
// OFFSET: 0x00A0CE60
// OFFSET: 0x00A63890
// FUNCTION: fn_14832
// FUNCTION: fn_14833
// FUNCTION: fn_15037
// FUNCTION: fn_16437
void Paint() override {
this->ClearSurface(0xFFFF00FF);
}
// OFFSET: 0x00A01E90
// OFFSET: 0x00A01ED0
// OFFSET: 0x00A0CE70
// OFFSET: 0x00A638A0
// FUNCTION: fn_14834
// FUNCTION: fn_14835
// FUNCTION: fn_15038
// FUNCTION: fn_16438
void Slot35(int value) override {
if (!this->scrollBar->dragging && this->scrollBar->total > this->scrollBar->visible) {
this->scrollBar->Slot35(value);
} else if (this->parent) {
this->parent->Slot35(value);
}
}
// OFFSET: 0x009F9890
// OFFSET: 0x009F98F0
// OFFSET: 0x00A08DE0
// FUNCTION: fn_14810
// FUNCTION: fn_14811
// FUNCTION: fn_15032
void ClearItems() {
for (T* item : this->items) {
this->RemoveChild(item, 1);
}
this->items.clear();
this->selected = static_cast<unsigned int>(-1);
}
bool RebindIndex(int index);
void SelectItem(CUIListItem* item);
bool SelectIndex(int index);
void AddNewItem() {
}
__declspec(noinline) T* CreateItem();
void Resize(int width, int height) override {
UIWindow::Resize(width, height);
}
void Slot53(int resolveSkin) override {
(void)resolveSkin;
}
// OFFSET: 0x00A04B30
// FUNCTION: fn_14963
int AddData(const D& value, bool refresh) {
this->data.push_back(value);
if (refresh) {
this->UpdateScrollBar();
}
return this->data.size() - 1;
}
// OFFSET: 0x00A051E0
// OFFSET: 0x00A662D0
// FUNCTION: fn_14971
// FUNCTION: fn_16614
void ClearData() {
this->data.clear();
this->selected = static_cast<unsigned int>(-1);
this->UpdateScrollBar();
}
// OFFSET: 0x00A15450
// FUNCTION: fn_15196
void SetOnSelect(std::function<void(T*, const D&)> handler) {
this->onSelect = handler;
}
// OFFSET: 0x00A154C0
// FUNCTION: fn_15197
void SetBinder(std::function<void(T*, const D&)> handler) {
this->binder = handler;
}
// OFFSET: 0x00A15AA0
// FUNCTION: fn_15201
void SetImages(const std::string& normal, const std::string& hover, const std::string& pressed, const std::string& disabled) {
this->imageNames[0] = normal;
this->imageNames[1] = hover;
this->imageNames[2] = pressed;
this->disabledName = disabled;
this->Slot53(0);
this->Invalidate();
}
// OFFSET: 0x009DD950
// OFFSET: 0x00A06300
// FUNCTION: fn_14344
// FUNCTION: fn_15001
void UpdateScrollBar() {
this->scrollBar->SetTotal(this->data.size() * this->rowHeight + this->itemY);
this->scrollBar->SetVisible(this->geometry.height);
this->scrollBar->SetPosition(this->scrollBar->position);
this->rebind = 1;
}
// OFFSET: 0x009D43D0
// OFFSET: 0x009D45D0
// OFFSET: 0x009D47D0
// OFFSET: 0x009D49D0
// OFFSET: 0x00A027C0
// OFFSET: 0x00A029C0
// FUNCTION: fn_14043
// FUNCTION: fn_14044
// FUNCTION: fn_14045
// FUNCTION: fn_14046
// FUNCTION: fn_14843
// FUNCTION: fn_14844
void OnScroll(int position) {
auto it = this->items.begin();
if (it == this->items.end()) {
return;
}
if (this->data.size() == 0) {
for (; it != this->items.end(); ++it) {
(*it)->index = -1;
(*it)->Show(0);
}
return;
}
const int first = (*it)->index;
unsigned int row = position / this->rowHeight;
if (first != -1) {
if (first < static_cast<int>(row)) {
if (row - first < static_cast<unsigned int>(this->items.size())) {
std::rotate(this->items.begin(), this->items.begin() + (row - first), this->items.end());
}
} else if (first > static_cast<int>(row)) {
if (first - row < static_cast<unsigned int>(this->items.size())) {
std::rotate(this->items.begin(), this->items.end() - (first - row), this->items.end());
}
}
}
it = this->items.begin();
for (int y = this->itemY - position % this->rowHeight; y < this->geometry.height; y += this->rowHeight, ++it, ++row) {
if (it == this->items.end() || row >= this->data.size()) {
break;
}
T* item = *it;
if (item) {
if (this->rebind || row != static_cast<unsigned int>(item->index)) {
item->index = row;
if (this->binder) {
auto node = this->data.begin();
std::advance(node, static_cast<int>(row));
this->binder(item, *node);
}
}
item->SetSelected(row == this->selected);
item->Move(this->itemX, y);
item->Show(1);
}
}
for (; it != this->items.end(); ++it) {
(*it)->index = -1;
(*it)->Show(0);
}
}
CResPtr<CBitmapRes>& NormalImage() {
return this->unknown_0080;
}
/* 0080 */ CResPtr<CBitmapRes> unknown_0080;
/* 0084 */ CResPtr<CBitmapRes> unknown_0084;
/* 0088 */ CResPtr<CBitmapRes> unknown_0088;
/* 008C */ CResPtr<CBitmapRes> unknown_008C;
/* 0090 */ std::map<int, std::string> imageNames;
/* 0098 */ std::string disabledName;
/* 00B0 */ CUIVScrollBar* scrollBar;
/* 00B4 */ int itemWidth;
/* 00B8 */ int rowHeight;
/* 00BC */ int itemX;
/* 00C0 */ int itemY;
/* 00C4 */ unsigned char unknown_00C4;
/* 00C5 */ unsigned char unknown_00C5[0x03];
/* 00C8 */ std::vector<T*> items;
/* 00D4 */ std::list<D> data;
/* 00DC */ unsigned int selected;
/* 00E0 */ unsigned char unknown_00E0;
/* 00E1 */ unsigned char rebind;
/* 00E2 */ unsigned char unknown_00E2[0x06];
/* 00E8 */ std::function<void(T*, const D&)> onSelect;
/* 0110 */ std::function<void(T*, const D&)> binder;
};
#endif