X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fmenu%2Fxonotic%2Fdialog_settings_game.qc;h=fc87261a538b736546e2481b29d992d6d3abc2eb;hb=c0582a52156c4e74e4c5313e5f360275493a8733;hp=e8fd42d5d5a1bef1d097e21f76b8277c3a1b4c29;hpb=b09b7687da385e1cdc51e2f63fb7de4c9f9e12a3;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/menu/xonotic/dialog_settings_game.qc b/qcsrc/menu/xonotic/dialog_settings_game.qc index e8fd42d5d..fc87261a5 100644 --- a/qcsrc/menu/xonotic/dialog_settings_game.qc +++ b/qcsrc/menu/xonotic/dialog_settings_game.qc @@ -1,56 +1,129 @@ #ifndef DIALOG_SETTINGS_GAME_H #define DIALOG_SETTINGS_GAME_H + +#include "../gamesettings.qh" + +#include "datasource.qc" +CLASS(SettingSource, DataSource) + METHOD(SettingSource, getEntry, entity(int i, void(string name, string icon) returns)) + { + Lazy l = SETTINGS[i]; + entity it = l.m_get(); + if (returns) returns(it.title, string_null); + return it; + } + METHOD(SettingSource, reload, int(string filter)) { return SETTINGS_COUNT; } +ENDCLASS(SettingSource) + +#include "listbox.qc" +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, NULL) + ATTRIB(XonoticRegisteredSettingsList, stringFilter, string, string_null) + ATTRIB(XonoticRegisteredSettingsList, typeToSearchString, string, string_null) + ATTRIB(XonoticRegisteredSettingsList, typeToSearchTime, float, 0) + ATTRIB(XonoticRegisteredSettingsList, source, DataSource, NULL) + ATTRIB(XonoticRegisteredSettingsList, onChange, void(entity, entity), func_null) + ATTRIB(XonoticRegisteredSettingsList, onChangeEntity, entity, NULL) + string XonoticRegisteredSettingsList_cb_name; + void XonoticRegisteredSettingsList_cb(string _name, string _icon) + { + XonoticRegisteredSettingsList_cb_name = _name; + } + METHOD(XonoticRegisteredSettingsList, drawListBoxItem, void(entity this, int i, vector absSize, bool isSelected, bool isFocused)) + { + if (!this.source) return; + if (!this.source.getEntry(i, XonoticRegisteredSettingsList_cb)) return; + string name = XonoticRegisteredSettingsList_cb_name; + if (isSelected) { + draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED); + } else if (isFocused) { + this.focusedItemAlpha = getFadedAlpha(this.focusedItemAlpha, SKINALPHA_LISTBOX_FOCUSED, SKINFADEALPHA_LISTBOX_FOCUSED); + draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_FOCUSED, this.focusedItemAlpha); + } + string s = draw_TextShortenToWidth(strdecolorize(name), 1, 0, this.realFontSize); + draw_Text(this.realUpperMargin * eY + (0.5 * this.realFontSize.x) * eX, s, this.realFontSize, '1 1 1', SKINALPHA_TEXT, 0); + } + METHOD(XonoticRegisteredSettingsList, refilter, void(entity this)) + { + if (!this.source) { + this.nItems = 0; + return; + } + this.nItems = this.source.reload(this.stringFilter); + } + METHOD(XonoticRegisteredSettingsList, resizeNotify, void(entity this, vector relOrigin, vector relSize, vector absOrigin, vector absSize)) + { + super.resizeNotify(this, relOrigin, relSize, absOrigin, absSize); + + this.itemAbsSize = '0 0 0'; + this.realFontSize_y = this.fontSize / (this.itemAbsSize_y = (absSize.y * this.itemHeight)); + this.realFontSize_x = this.fontSize / (this.itemAbsSize_x = (absSize.x * (1 - this.controlWidth))); + this.realUpperMargin = 0.5 * (1 - this.realFontSize.y); + } + METHOD(XonoticRegisteredSettingsList, setSelected, void(entity this, int i)) + { + super.setSelected(this, i); + this.onChange(this, this.onChangeEntity); + } + CONSTRUCTOR(XonoticRegisteredSettingsList, DataSource _source) { + CONSTRUCT(XonoticRegisteredSettingsList); + this.source = _source; + this.configureXonoticListBox(this); + this.refilter(this); + } +ENDCLASS(XonoticRegisteredSettingsList) + #include "tab.qc" CLASS(XonoticGameSettingsTab, XonoticTab) - METHOD(XonoticGameSettingsTab, fill, void(entity)) - ATTRIB(XonoticGameSettingsTab, title, string, _("Game")) ATTRIB(XonoticGameSettingsTab, intendedWidth, float, 0.9) - ATTRIB(XonoticGameSettingsTab, rows, float, 15.5) - ATTRIB(XonoticGameSettingsTab, columns, float, 6.5) -ENDCLASS(XonoticGameSettingsTab) -entity makeXonoticGameSettingsTab(); -#endif + 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)) + ATTRIB(XonoticGameSettingsTab, currentPanel, entity, NEW(XonoticTab)) + ATTRIB(XonoticGameSettingsTab, currentItem, entity, NULL) + METHOD(XonoticGameSettingsTab, topicChangeNotify, void(entity, entity this)) + { + entity c = this.currentPanel; + entity removing = this.currentItem; + entity adding = this.topicList.source.getEntry(this.topicList.selectedItem, func_null); + if (removing == adding) return; + if (removing) { + this.currentItem = NULL; + c.removeItem(c, removing); + } + if (adding) { + this.currentItem = adding; + adding.resizeNotify(adding, '0 0 0', c.size, '0 0 0', c.size); + c.addItem(c, adding, '0 0 0', '1 1 0', 1); + } + } + METHOD(XonoticGameSettingsTab, fill, void(entity this)) + { + entity topics = this.topicList; + topics.onChange = this.topicChangeNotify; + topics.onChangeEntity = this; + + int + col = 0, width = 1.5; + this.gotoRC(this, 0, col); + this.TD(this, this.rows, width, topics); -#ifdef IMPLEMENTATION -entity makeXonoticGameSettingsTab() -{ - entity me; - me = NEW(XonoticGameSettingsTab); - me.configureDialog(me); - return me; -} - -void XonoticGameSettingsTab_fill(entity me) -{ - entity mc; - mc = makeXonoticTabController(me.rows - 2.5); - - me.TR(me); - me.TDempty(me, 0.25); - me.TD(me, 1, 1, mc.makeTabButton(mc, _("View"), makeXonoticGameViewSettingsTab())); - me.TD(me, 1, 1, mc.makeTabButton(mc, _("Crosshair"), makeXonoticGameCrosshairSettingsTab())); - me.TD(me, 1, 1, mc.makeTabButton(mc, _("HUD"), makeXonoticGameHUDSettingsTab())); - me.TD(me, 1, 1, mc.makeTabButton(mc, _("Messages"), makeXonoticGameMessageSettingsTab())); - me.TD(me, 1, 1, mc.makeTabButton(mc, _("Weapons"), makeXonoticGameWeaponsSettingsTab())); - me.TD(me, 1, 1, mc.makeTabButton(mc, _("Models"), makeXonoticGameModelSettingsTab())); - - me.gotoRC(me, 1.5, 0); - me.TD(me, me.rows - 1.5, me.columns, mc); - - /* - - makeXonoticGameViewSettingsTab())); - makeXonoticGameGeneralSettingsTab())); - makeXonoticGameCrosshairSettingsTab())); - - makeXonoticGameWeaponSettingsTab())); - l"), makeXonoticGamePlayermodelSettingsTab())); - makeXonoticGameHUDSettingsTab())); - on"), makeXonoticGameNotificationSettingsTab())); - - - me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_gentle", _("Disable gore effects and harsh language"))); // also set sv_gentle - */ -} + col += width, width = this.columns - col; + this.gotoRC(this, 0, col); this.setFirstColumn(this, this.currentColumn); + this.TD(this, this.rows, width, this.currentPanel); + + this.topicChangeNotify(topics, this); + } + INIT(XonoticGameSettingsTab) + { + this.configureDialog(this); + } +ENDCLASS(XonoticGameSettingsTab) #endif