]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/xonotic/cvarlist.qc
Merge branch 'terencehill/campaign_balance_fix' into 'master'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / cvarlist.qc
index 956285ec8b71f218da1e95ef9ddca1658c22b8ac..9587d5432d83c7ebc80dcbac53a26dfc0af370e8 100644 (file)
@@ -1,7 +1,9 @@
 #include "cvarlist.qh"
 
 #include "inputbox.qh"
+#include "../item/checkbox.qh"
 #include "../item/container.qh"
+#include "../item/checkbox.qh"
 
 entity makeXonoticCvarList()
 {
@@ -16,19 +18,47 @@ 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);
 }
+void XonoticCvarList_hideNotify(entity me)
+{
+       if(me.handle)
+               buf_del(me.handle);
+       me.handle = buf_create();
+       me.nItems = 0;
+}
 void XonoticCvarList_destroy(entity me)
 {
-       buf_del(me.handle);
+       if(me.handle)
+               buf_del(me.handle);
 }
 string autocvar_menu_forced_saved_cvars;
 string autocvar_menu_reverted_nonsaved_cvars;
@@ -77,17 +107,10 @@ void XonoticCvarList_setSelected(entity me, float i)
        if(me.nItems == 0)
                return;
 
-       if(me.cvarName)
-               strunzone(me.cvarName);
-       if(me.cvarDescription)
-               strunzone(me.cvarDescription);
-       if(me.cvarType)
-               strunzone(me.cvarType);
-       if(me.cvarDefault)
-               strunzone(me.cvarDefault);
-       me.cvarName = strzone(bufstr_get(me.handle, me.selectedItem));
-       me.cvarDescription = strzone(cvar_description(me.cvarName));
-       me.cvarDefault = strzone(cvar_defstring(me.cvarName));
+       strfree(me.cvarType);
+       strcpy(me.cvarName, bufstr_get(me.handle, me.selectedItem));
+       strcpy(me.cvarDescription, cvar_description(me.cvarName));
+       strcpy(me.cvarDefault, cvar_defstring(me.cvarName));
        me.cvarNameBox.setText(me.cvarNameBox, me.cvarName);
        me.cvarDescriptionBox.setText(me.cvarDescriptionBox, me.cvarDescription);
        float needsForcing = me.updateCvarType(me);
@@ -102,9 +125,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)