]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add a checkbox in the cvar list dialog to show only the modified cvars
authorterencehill <piuntn@gmail.com>
Fri, 15 Apr 2016 14:09:24 +0000 (16:09 +0200)
committerterencehill <piuntn@gmail.com>
Fri, 15 Apr 2016 14:09:24 +0000 (16:09 +0200)
qcsrc/menu/xonotic/cvarlist.qc
qcsrc/menu/xonotic/cvarlist.qh
qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc

index 956285ec8b71f218da1e95ef9ddca1658c22b8ac..e41223277f77f8790c1b9fcd33041cf04af6b749 100644 (file)
@@ -16,13 +16,33 @@ void XonoticCvarList_configureXonoticCvarList(entity me)
        me.handle = buf_create();
        me.nItems = 0;
 }
+void CvarList_Load(entity me, string filter)
+{
+       if(me.handle < 0)
+               return;
+
+       buf_cvarlist(me.handle, filter, "_");
+       me.nItems = buf_getsize(me.handle);
+       if(autocvar_menu_cvarlist_onlymodified)
+       {
+               float newbuf = buf_create();
+               for (int i = 0; i < me.nItems; ++i)
+               {
+                       string k = bufstr_get(me.handle, i);
+                       if(cvar_string(k) != cvar_defstring(k))
+                               bufstr_add(newbuf, k, false);
+               }
+               buf_del(me.handle);
+               me.handle = newbuf;
+               me.nItems = buf_getsize(me.handle);
+       }
+}
 void XonoticCvarList_showNotify(entity me)
 {
        bool force_initial_selection = false;
        if(me.handle >= 0 && me.nItems <= 0) // me.handle not loaded yet?
                force_initial_selection = true;
-       buf_cvarlist(me.handle, "", "_");
-       me.nItems = buf_getsize(me.handle);
+       CvarList_Load(me, me.controlledTextbox.text);
        if(force_initial_selection)
                me.setSelected(me, 0);
 }
@@ -102,9 +122,14 @@ void XonoticCvarList_setSelected(entity me, float i)
 }
 void CvarList_Filter_Change(entity box, entity me)
 {
-       buf_cvarlist(me.handle, box.text, "_");
-       me.nItems = buf_getsize(me.handle);
-
+       CvarList_Load(me, box.text);
+       me.setSelected(me, 0);
+}
+void CvarList_Filter_ModifiedCvars(entity box, entity me)
+{
+       cvar_set("menu_cvarlist_onlymodified", ftos(!autocvar_menu_cvarlist_onlymodified));
+       box.setChecked(box, autocvar_menu_cvarlist_onlymodified);
+       CvarList_Load(me, me.controlledTextbox.text);
        me.setSelected(me, 0);
 }
 void XonoticCvarList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
index 4bc56b3b8de93a3f2954489587f7358b85b35c14..11ab45f351e0a7fba377d7daec1aec4c72edff83 100644 (file)
@@ -38,6 +38,9 @@ CLASS(XonoticCvarList, XonoticListBox)
 ENDCLASS(XonoticCvarList)
 entity makeXonoticCvarList();
 void CvarList_Filter_Change(entity box, entity me);
+void CvarList_Filter_ModifiedCvars(entity box, entity me);
 void CvarList_Value_Change(entity box, entity me);
 void CvarList_Revert_Click(entity btn, entity me);
 void CvarList_End_Editing(entity box, entity me);
+
+float autocvar_menu_cvarlist_onlymodified;
index f1fec78cf22e44140895a7837033bc7fe66fa037..d34588ce80861dde233ed77289a2ac289bafa0f6 100644 (file)
@@ -28,15 +28,16 @@ void XonoticCvarsDialog_fill(entity me) // in this dialog, use SKINCOLOR_CVARLIS
 
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Cvar filter:")));
-               me.TD(me, 1, me.columns - 1, e = makeXonoticInputBox(0, string_null));
-                       e.color = SKINCOLOR_CVARLIST_CONTROLS;
-                       e.colorF = SKINCOLOR_CVARLIST_CONTROLS;
-                       e.cb_color = SKINCOLOR_CVARLIST_CONTROLS;
-                       e.cb_colorC = SKINCOLOR_CVARLIST_CONTROLS;
-                       e.cb_colorF = SKINCOLOR_CVARLIST_CONTROLS;
+               me.TD(me, 1, 3, e = makeXonoticInputBox(0, string_null));
+                       e.color = e.colorF = SKINCOLOR_CVARLIST_CONTROLS;
+                       e.cb_color = e.cb_colorC = e.cb_colorF = SKINCOLOR_CVARLIST_CONTROLS;
                        e.onChange = CvarList_Filter_Change;
                        e.onChangeEntity = cvarlist;
                        cvarlist.controlledTextbox = e; // this COULD also be the Value box, but this leads to accidentally editing stuff
+               me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "menu_cvarlist_onlymodified", _("Modified cvars only")));
+                       e.color = e.colorC = e.colorF = e.colorD = SKINCOLOR_CVARLIST_CONTROLS;
+                       e.onClickEntity = cvarlist;
+                       e.onClick = CvarList_Filter_ModifiedCvars;
        me.TR(me);
                me.TD(me, me.rows - me.currentRow - 9, me.columns, cvarlist);
        me.gotoRC(me, me.rows - 8, 0);
@@ -51,11 +52,8 @@ void XonoticCvarsDialog_fill(entity me) // in this dialog, use SKINCOLOR_CVARLIS
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Value:")));
                me.TD(me, 1, me.columns - 2, e = makeXonoticInputBox(0, string_null));
                        cvarlist.cvarValueBox = e;
-                       e.color = SKINCOLOR_CVARLIST_CONTROLS;
-                       e.colorF = SKINCOLOR_CVARLIST_CONTROLS;
-                       e.cb_color = SKINCOLOR_CVARLIST_CONTROLS;
-                       e.cb_colorC = SKINCOLOR_CVARLIST_CONTROLS;
-                       e.cb_colorF = SKINCOLOR_CVARLIST_CONTROLS;
+                       e.color = e.colorF = SKINCOLOR_CVARLIST_CONTROLS;
+                       e.cb_color = e.cb_colorC = e.cb_colorF = SKINCOLOR_CVARLIST_CONTROLS;
                        e.onChange = CvarList_Value_Change;
                        e.onChangeEntity = cvarlist;
                        e.onEnter = CvarList_End_Editing;