#pragma once
+
+#include "datasource.qh"
+CLASS(SettingSource, DataSource)
+ METHOD(SettingSource, getEntry, entity(entity this, int i, void(string name, string icon) returns));
+ METHOD(SettingSource, getEntryTooltip, entity(entity this, int i, void(string theTooltip) returns));
+ METHOD(SettingSource, reload, int(entity this, string filter));
+ENDCLASS(SettingSource)
+
+#include "listbox.qh"
+CLASS(XonoticRegisteredSettingsList, XonoticListBox)
+ ATTRIB(XonoticRegisteredSettingsList, alphaBG, float, 0);
+ ATTRIB(XonoticRegisteredSettingsList, itemAbsSize, vector, '0 0 0');
+ ATTRIB(XonoticRegisteredSettingsList, origin, vector, '0 0 0');
+ ATTRIB(XonoticRegisteredSettingsList, realFontSize, vector, '0 0 0');
+ ATTRIB(XonoticRegisteredSettingsList, realUpperMargin, float, 0);
+ ATTRIB(XonoticRegisteredSettingsList, rowsPerItem, float, 2);
+ ATTRIB(XonoticRegisteredSettingsList, stringFilterBox, entity);
+ ATTRIB(XonoticRegisteredSettingsList, stringFilter, string);
+ ATTRIB(XonoticRegisteredSettingsList, typeToSearchString, string);
+ ATTRIB(XonoticRegisteredSettingsList, typeToSearchTime, float, 0);
+ ATTRIB(XonoticRegisteredSettingsList, source, DataSource);
+ ATTRIB(XonoticRegisteredSettingsList, onChange, void(entity, entity));
+ ATTRIB(XonoticRegisteredSettingsList, onChangeEntity, entity);
+ METHOD(XonoticRegisteredSettingsList, focusedItemChangeNotify, void(entity));
+ METHOD(XonoticRegisteredSettingsList, drawListBoxItem, void(entity this, int i, vector absSize, bool isSelected, bool isFocused));
+ METHOD(XonoticRegisteredSettingsList, focusedItemChangeNotify, void(entity this));
+ METHOD(XonoticRegisteredSettingsList, refilter, void(entity this));
+ METHOD(XonoticRegisteredSettingsList, resizeNotify, void(entity this, vector relOrigin, vector relSize, vector absOrigin, vector absSize));
+ METHOD(XonoticRegisteredSettingsList, setSelected, void(entity this, int i));
+ CONSTRUCTOR(XonoticRegisteredSettingsList, DataSource _source);
+ENDCLASS(XonoticRegisteredSettingsList)
+
+#include "tab.qh"
+#include "scrollpanel.qh"
+CLASS(XonoticGameSettingsTab, XonoticTab)
+ ATTRIB(XonoticGameSettingsTab, intendedWidth, float, 0.9);
+ ATTRIB(XonoticGameSettingsTab, rows, float, 15.5);
+ ATTRIB(XonoticGameSettingsTab, columns, float, 6.5);
+ ATTRIB(XonoticGameSettingsTab, source, DataSource, NEW(SettingSource));
+ ATTRIB(XonoticGameSettingsTab, topicList, entity, NEW(XonoticRegisteredSettingsList, this.source));
+ // XonoticScrollPanel disabled because it's broken, see https://gitlab.com/xonotic/xonotic-data.pk3dir/merge_requests/548
+ // It will probably require a different implementation since XonoticScrollPanel should be an instance of Container, not ListBox
+ //ATTRIB(XonoticGameSettingsTab, currentPanel, entity, NEW(XonoticScrollPanel));
+ ATTRIB(XonoticGameSettingsTab, currentPanel, entity, NEW(XonoticTab));
+ ATTRIB(XonoticGameSettingsTab, currentItem, entity);
+ METHOD(XonoticGameSettingsTab, topicChangeNotify, void(entity, entity this));
+ METHOD(XonoticGameSettingsTab, fill, void(entity this));
+ INIT(XonoticGameSettingsTab)
+ {
+ this.configureDialog(this);
+ }
+ENDCLASS(XonoticGameSettingsTab)