Merge branch 'master' into terencehill/clear_button
authorterencehill <piuntn@gmail.com>
Thu, 26 Jan 2012 19:19:03 +0000 (20:19 +0100)
committerterencehill <piuntn@gmail.com>
Thu, 26 Jan 2012 19:24:48 +0000 (20:24 +0100)
Conflicts:
qcsrc/menu/item/inputbox.c
qcsrc/menu/xonotic/dialog_multiplayer_demo.c
qcsrc/menu/xonotic/dialog_settings_misc_cvars.c
qcsrc/menu/xonotic/dialog_settings_network.c

1  2 
gfx/menu/luminos/skinvalues.txt
gfx/menu/wickedx/skinvalues.txt
gfx/menu/xaw/skinvalues.txt
qcsrc/menu/item/inputbox.c
qcsrc/menu/skin-customizables.inc
qcsrc/menu/xonotic/dialog_multiplayer_demo.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c
qcsrc/menu/xonotic/dialog_settings_misc.c
qcsrc/menu/xonotic/dialog_settings_misc_cvars.c

@@@ -1,4 -1,4 +1,4 @@@
- title Luminos
+ title Luminos (default)
  author sev
  
  // Colors: 'Red Green Blue'
@@@ -23,7 -23,7 +23,7 @@@ MARGIN_COLORPICKER              '0 0 0
  //   uses "border" images
  //   uses "closebutton" images
  MARGIN_TOP                      8
- MARGIN_BOTTOM                   8
+ MARGIN_BOTTOM                   12
  MARGIN_LEFT                     16
  MARGIN_RIGHT                    16
  MARGIN_COLUMNS                  4
@@@ -96,8 -96,8 +96,8 @@@ WIDTH_CREDITS                   0.
  ALPHA_CVARLIST_SAVED            1
  ALPHA_CVARLIST_TEMPORARY        0.7    
  COLOR_CVARLIST_CHANGED          '1 0 0' 
- COLOR_CVARLIST_REVERTBUTTON     '1 0 0'
  COLOR_CVARLIST_UNCHANGED        '1 1 1'
+ COLOR_CVARLIST_CONTROLS         '1 0 0'
  
  // item: list box
  COLOR_LISTBOX_SELECTED          '1 0.4375 0'
@@@ -175,16 -175,19 +175,20 @@@ COLOR_DIALOG_USERBIND           '1 1 1
  COLOR_DIALOG_SINGLEPLAYER       '1 1 1'
  COLOR_DIALOG_CREDITS            '1 1 1'
  COLOR_DIALOG_WEAPONS            '1 1 1'
- COLOR_DIALOG_WAYPOINTS          '1 1 1'
+ COLOR_DIALOG_VIEW               '1 1 1'
+ COLOR_DIALOG_MODEL              '1 1 1'
+ COLOR_DIALOG_CROSSHAIR          '1 1 1'
+ COLOR_DIALOG_HUD                '1 1 1'
  COLOR_DIALOG_SERVERINFO         '1 1 1'
  COLOR_DIALOG_CVARS              '1 0 0'
+ COLOR_DIALOG_HUDCONFIRM         '1 0 0'
  
  // item: input box
  //   uses "inputbox" images
  COLOR_INPUTBOX_N                '1 1 1'
  COLOR_INPUTBOX_F                '1 1 1'
  MARGIN_INPUTBOX_CHARS           1
 +OFFSET_CLEARBUTTON              -0.3
  
  // item: key grabber
  COLOR_KEYGRABBER_TITLES         '1 1 1'
@@@ -1,4 -1,4 +1,4 @@@
- title Default // "WickedX"
+ title WickedX
  author sev
  
  // Colors: 'Red Green Blue'
@@@ -23,7 -23,7 +23,7 @@@ MARGIN_COLORPICKER              '0 0 0
  //   uses "border" images
  //   uses "closebutton" images
  MARGIN_TOP                      8
- MARGIN_BOTTOM                   8
+ MARGIN_BOTTOM                   12
  MARGIN_LEFT                     16
  MARGIN_RIGHT                    16
  MARGIN_COLUMNS                  4
@@@ -96,8 -96,8 +96,8 @@@ WIDTH_CREDITS                   0.
  ALPHA_CVARLIST_SAVED            1
  ALPHA_CVARLIST_TEMPORARY        0.7    
  COLOR_CVARLIST_CHANGED          '0 0.375 0.75' 
- COLOR_CVARLIST_REVERTBUTTON     '1 0 0'
  COLOR_CVARLIST_UNCHANGED        '1 1 1'
+ COLOR_CVARLIST_CONTROLS         '1 0 0'
  
  // item: list box
  COLOR_LISTBOX_SELECTED          '0.875 0.375 0'
@@@ -175,16 -175,19 +175,20 @@@ COLOR_DIALOG_USERBIND           '1 1 1
  COLOR_DIALOG_SINGLEPLAYER       '1 1 1'
  COLOR_DIALOG_CREDITS            '1 1 1'
  COLOR_DIALOG_WEAPONS            '1 1 1'
- COLOR_DIALOG_WAYPOINTS          '1 1 1'
+ COLOR_DIALOG_VIEW               '1 1 1'
+ COLOR_DIALOG_MODEL              '1 1 1'
+ COLOR_DIALOG_CROSSHAIR          '1 1 1'
+ COLOR_DIALOG_HUD                '1 1 1'
  COLOR_DIALOG_SERVERINFO         '1 1 1'
  COLOR_DIALOG_CVARS              '1 0 0'
+ COLOR_DIALOG_HUDCONFIRM         '1 0 0'
  
  // item: input box
  //   uses "inputbox" images
  COLOR_INPUTBOX_N                '1 1 1'
  COLOR_INPUTBOX_F                '1 1 1'
  MARGIN_INPUTBOX_CHARS           1
 +OFFSET_CLEARBUTTON              -0.5
  
  // item: key grabber
  COLOR_KEYGRABBER_TITLES         '1 1 1'
@@@ -30,9 -30,13 +30,13 @@@ COLOR_DIALOG_USERBIND           '1 1 1
  COLOR_DIALOG_SINGLEPLAYER       '1 1 1'
  COLOR_DIALOG_CREDITS            '1 1 1'
  COLOR_DIALOG_WEAPONS            '1 1 1'
- COLOR_DIALOG_WAYPOINTS          '1 1 1'
+ COLOR_DIALOG_VIEW               '1 1 1'
+ COLOR_DIALOG_MODEL              '1 1 1'
+ COLOR_DIALOG_CROSSHAIR          '1 1 1'
+ COLOR_DIALOG_HUD                '1 1 1'
  COLOR_DIALOG_SERVERINFO         '1 1 1'
  COLOR_DIALOG_CVARS              '1 0 0'
+ COLOR_DIALOG_HUDCONFIRM         '1 0 0'
  
  // nexposee positions of windows (they are the scale transformation
  // centers, NOT the actual positions of the windows!)
@@@ -95,8 -99,8 +99,8 @@@ COLOR_CREDITS_FUNCTION          '0 0 0
  ALPHA_CREDITS_FUNCTION          1
  COLOR_CREDITS_PERSON            '0 0 0'
  ALPHA_CREDITS_PERSON            1
- ROWS_CREDITS                    10
- WIDTH_CREDITS                   0.75
+ ROWS_CREDITS                    20
+ WIDTH_CREDITS                   0.5
  
  // item: crosshair button
  //   uses "crosshairbutton" images
  ALPHA_CVARLIST_SAVED            1
  ALPHA_CVARLIST_TEMPORARY        0.7    
  COLOR_CVARLIST_CHANGED          '1 0 0' 
- COLOR_CVARLIST_REVERTBUTTON     '1 0 0'
  COLOR_CVARLIST_UNCHANGED        '1 1 1'
+ COLOR_CVARLIST_CONTROLS         '1 0 0'
  
  // item: dialog
  //   uses "border" images
  //   uses "closebutton" images
  MARGIN_TOP                      8
- MARGIN_BOTTOM                   8
+ MARGIN_BOTTOM                   12
  MARGIN_LEFT                     16
  MARGIN_RIGHT                    16
  MARGIN_COLUMNS                  4
@@@ -124,7 -128,6 +128,7 @@@ HEIGHT_DIALOGBORDER             
  COLOR_INPUTBOX_N                '1 1 1'
  COLOR_INPUTBOX_F                '1 1 1'
  MARGIN_INPUTBOX_CHARS           1
 +OFFSET_CLEARBUTTON              0
  
  // item: key grabber
  COLOR_KEYGRABBER_TITLES         '1 1 1'
@@@ -5,12 -5,10 +5,12 @@@ CLASS(InputBox) EXTENDS(Label
        METHOD(InputBox, setText, void(entity, string))
        METHOD(InputBox, enterText, void(entity, string))
        METHOD(InputBox, keyDown, float(entity, float, float, float))
 +      METHOD(InputBox, mouseMove, float(entity, vector))
        METHOD(InputBox, mouseRelease, float(entity, vector))
        METHOD(InputBox, mousePress, float(entity, vector))
        METHOD(InputBox, mouseDrag, float(entity, vector))
        METHOD(InputBox, showNotify, void(entity))
 +      METHOD(InputBox, resizeNotify, void(entity, vector, vector, vector, vector))
  
        ATTRIB(InputBox, src, string, string_null)
  
        ATTRIB(InputBox, color, vector, '1 1 1')
        ATTRIB(InputBox, colorF, vector, '1 1 1')
        ATTRIB(InputBox, maxLength, float, 255) // if negative, it counts bytes, not chars
 +
 +      ATTRIB(InputBox, enableClearButton, float, 1)
 +      ATTRIB(InputBox, clearButton, entity, NULL)
 +      ATTRIB(InputBox, cb_width, float, 0)
 +      ATTRIB(InputBox, cb_pressed, float, 0)
 +      ATTRIB(InputBox, cb_focused, float, 0)
  ENDCLASS(InputBox)
  void InputBox_Clear_Click(entity btn, entity me);
  #endif
@@@ -45,16 -37,6 +45,16 @@@ void InputBox_configureInputBox(entity 
        me.src = gfx;
        me.cursorPos = theCursorPos;
  }
 +void InputBox_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
 +{
 +      SUPER(InputBox).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
 +      if (me.enableClearButton)
 +      {
 +              me.cb_width = absSize_y / absSize_x;
 +              me.cb_offset = bound(-1, me.cb_offset, 0) * me.cb_width; // bound to range -1, 0
 +              me.keepspaceRight = me.keepspaceRight - me.cb_offset + me.cb_width;
 +      }
 +}
  
  void InputBox_setText(entity me, string txt)
  {
@@@ -68,60 -50,18 +68,60 @@@ void InputBox_Clear_Click(entity btn, e
        me.setText(me, "");
  }
  
 +float over_ClearButton(entity me, vector pos)
 +{
 +      if (pos_x >= 1 + me.cb_offset - me.cb_width)
 +      if (pos_x < 1 + me.cb_offset)
 +      if (pos_y >= 0)
 +      if (pos_y < 1)
 +              return 1;
 +      return 0;
 +}
 +
 +float InputBox_mouseMove(entity me, vector pos)
 +{
 +      if (me.enableClearButton)
 +      {
 +              if (over_ClearButton(me, pos))
 +              {
 +                      me.cb_focused = 1;
 +                      return 1;
 +              }
 +              me.cb_focused = 0;
 +      }
 +      return 1;
 +}
 +
  float InputBox_mouseDrag(entity me, vector pos)
  {
        float p;
 -      me.dragScrollPos = pos;
 -      p = me.scrollPos + pos_x - me.keepspaceLeft;
 -      me.cursorPos = draw_TextLengthUpToWidth(me.text, p, 0, me.realFontSize);
 -      me.lastChangeTime = time;
 +      if(me.pressed)
 +      {
 +              me.dragScrollPos = pos;
 +              p = me.scrollPos + pos_x - me.keepspaceLeft;
 +              me.cursorPos = draw_TextLengthUpToWidth(me.text, p, 0, me.realFontSize);
 +              me.lastChangeTime = time;
 +      }
 +      else if (me.enableClearButton)
 +      {
 +              if (over_ClearButton(me, pos))
 +              {
 +                      me.cb_pressed = 1;
 +                      return 1;
 +              }
 +      }
 +      me.cb_pressed = 0;
        return 1;
  }
  
  float InputBox_mousePress(entity me, vector pos)
  {
 +      if (me.enableClearButton)
 +      if (over_ClearButton(me, pos))
 +      {
 +              me.cb_pressed = 1;
 +              return 1;
 +      }
        me.dragScrollTimer = time;
        me.pressed = 1;
        return InputBox_mouseDrag(me, pos);
  
  float InputBox_mouseRelease(entity me, vector pos)
  {
 +      if(me.cb_pressed)
 +      if (over_ClearButton(me, pos))
 +      {
 +              me.cb_pressed = 0;
 +              InputBox_Clear_Click(world, me);
 +              return 1;
 +      }
 +      float r = InputBox_mouseDrag(me, pos);
 +      //reset cb_pressed after mouseDrag, mouseDrag could set cb_pressed in this case:
 +      //mouse press out of the clear button, drag and then mouse release over the clear button
 +      me.cb_pressed = 0;
        me.pressed = 0;
 -      return InputBox_mouseDrag(me, pos);
 +      return r;
  }
  
  void InputBox_enterText(entity me, string ch)
@@@ -358,22 -287,14 +358,25 @@@ void InputBox_draw(entity me
        }
        else
                draw_Text(me.realOrigin - eX * me.scrollPos, me.text, me.realFontSize, '1 1 1', 1, 0);
-               // skipping SUPER(InputBox).draw(me);
        if(!me.focused || (time - me.lastChangeTime) < floor(time - me.lastChangeTime) + 0.5)
                draw_Text(me.realOrigin + eX * (cursorPosInWidths - me.scrollPos), CURSOR, me.realFontSize, '1 1 1', 1, 0);
  
        draw_ClearClip();
  
 +      if (me.enableClearButton)
 +      if (me.text != "")
 +      {
 +              if(me.focused && me.cb_pressed)
 +                      draw_Picture(eX * (1 + me.cb_offset - me.cb_width), strcat(me.cb_src, "_c"), eX * me.cb_width + eY, '1 1 1', 1);
 +              else if(me.focused && me.cb_focused)
 +                      draw_Picture(eX * (1 + me.cb_offset - me.cb_width), strcat(me.cb_src, "_f"), eX * me.cb_width + eY, '1 1 1', 1);
 +              else
 +                      draw_Picture(eX * (1 + me.cb_offset - me.cb_width), strcat(me.cb_src, "_n"), eX * me.cb_width + eY, '1 1 1', 1);
 +      }
++
+       // skipping SUPER(InputBox).draw(me);
+       Item_draw(me);
  }
  
  void InputBox_showNotify(entity me)
@@@ -64,9 -64,13 +64,13 @@@ SKINBEGI
        SKINVECTOR(COLOR_DIALOG_SINGLEPLAYER, '1 1 0.7');
        SKINVECTOR(COLOR_DIALOG_CREDITS, '0.7 0.7 1');
        SKINVECTOR(COLOR_DIALOG_WEAPONS, '1 0.7 0.7');
-       SKINVECTOR(COLOR_DIALOG_WAYPOINTS, '0.7 0.7 1');
+       SKINVECTOR(COLOR_DIALOG_VIEW, '1 0.7 0.7');
+       SKINVECTOR(COLOR_DIALOG_MODEL, '1 0.7 0.7');
+       SKINVECTOR(COLOR_DIALOG_CROSSHAIR, '1 0.7 0.7');
+       SKINVECTOR(COLOR_DIALOG_HUD, '1 0.7 0.7');
        SKINVECTOR(COLOR_DIALOG_SERVERINFO, '0.7 0.7 1');
        SKINVECTOR(COLOR_DIALOG_CVARS, '1 0 0');
+       SKINVECTOR(COLOR_DIALOG_HUDCONFIRM, '1 0 0');
  
        // nexposee positions of windows (they are the scale transformation
        // centers, NOT the actual positions of the windows!)
        SKINFLOAT(ALPHA_CVARLIST_SAVED, 1);
        SKINFLOAT(ALPHA_CVARLIST_TEMPORARY, 0.7);
        SKINVECTOR(COLOR_CVARLIST_CHANGED, '1 1 0.4');
-       SKINVECTOR(COLOR_CVARLIST_REVERTBUTTON, '1 0 0');
        SKINVECTOR(COLOR_CVARLIST_UNCHANGED, '1 1 1');
+       SKINVECTOR(COLOR_CVARLIST_CONTROLS, '1 0 0');
  
        // item: dialog
        SKINSTRING(GFX_DIALOGBORDER, "border");
        SKINSTRING(GFX_INPUTBOX, "inputbox");
        SKINVECTOR(COLOR_INPUTBOX_N, '1 1 1');
        SKINVECTOR(COLOR_INPUTBOX_F, '1 1 1');
 +      SKINSTRING(GFX_CLEARBUTTON, "clearbutton");
 +      SKINFLOAT(OFFSET_CLEARBUTTON, 0);
        SKINFLOAT(MARGIN_INPUTBOX_CHARS, 1);
  
        // item: key grabber
@@@ -4,7 -4,7 +4,7 @@@ CLASS(XonoticDemoBrowserTab) EXTENDS(Xo
        ATTRIB(XonoticDemoBrowserTab, title, string, _("Demo"))
        ATTRIB(XonoticDemoBrowserTab, intendedWidth, float, 0.9)
        ATTRIB(XonoticDemoBrowserTab, rows, float, 22)
-       ATTRIB(XonoticDemoBrowserTab, columns, float, 6.5)
+       ATTRIB(XonoticDemoBrowserTab, columns, float, 4)
        ATTRIB(XonoticDemoBrowserTab, name, string, "DemoBroswer")      
  ENDCLASS(XonoticDemoBrowserTab)
  entity makeXonoticDemoBrowserTab();
@@@ -20,20 -20,27 +20,22 @@@ entity makeXonoticDemoBrowserTab(
  }
  void XonoticDemoBrowserTab_fill(entity me)
  {
 -      entity e;
 -      entity btn;
 -      entity dlist;
 +      entity e, dlist;
  
        me.TR(me);
-               me.TD(me, 1, me.columns, e = makeXonoticCheckBox(0, "cl_autodemo", _("Record demos while playing")));
+               me.TD(me, 1, 4, e = makeXonoticCheckBox(0, "cl_autodemo", _("Automatically record demos while playing")));
        me.TR(me);
-       dlist = makeXonoticDemoList();
        me.TR(me);
                me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, _("Filter:")));
-               me.TD(me, 1, me.columns - 0.5, e = makeXonoticInputBox(0, string_null));
 -              me.TD(me, 1, 0.5, btn = makeXonoticButton(_("Clear"), '0 0 0'));
 -                      btn.onClick = InputBox_Clear_Click;     
 -              me.TD(me, 1, 3, e = makeXonoticInputBox(0, string_null));
++              me.TD(me, 1, 3.5, e = makeXonoticInputBox(0, string_null));
+                       dlist = makeXonoticDemoList();
                        e.onChange = DemoList_Filter_Change;
                        e.onChangeEntity = dlist;
 -                      btn.onClickEntity = e;
                        dlist.controlledTextbox = e;
+                       
        me.TR(me);
                me.TD(me, me.rows - 4, me.columns, dlist);
+               
        me.gotoRC(me, me.rows - 1, 0);
                me.TD(me, 1, me.columns / 2, e = makeXonoticButton(_("Timedemo"), '0 0 0'));
                        e.onClick = TimeDemo_Click;
@@@ -5,17 -5,14 +5,14 @@@ CLASS(XonoticPlayerSettingsTab) EXTENDS
        ATTRIB(XonoticPlayerSettingsTab, title, string, _("Player Setup"))
        ATTRIB(XonoticPlayerSettingsTab, intendedWidth, float, 0.9)
        ATTRIB(XonoticPlayerSettingsTab, rows, float, 22)
-       ATTRIB(XonoticPlayerSettingsTab, columns, float, 6.5)
+       ATTRIB(XonoticPlayerSettingsTab, columns, float, 6.2) // added extra .2 for center space 
        ATTRIB(XonoticPlayerSettingsTab, playerNameLabel, entity, NULL)
        ATTRIB(XonoticPlayerSettingsTab, playerNameLabelAlpha, float, 0)
  ENDCLASS(XonoticPlayerSettingsTab)
  entity makeXonoticPlayerSettingsTab();
- void HUDSetup_Join_Click(entity me, entity btn);
  #endif
  
  #ifdef IMPLEMENTATION
  entity makeXonoticPlayerSettingsTab()
  {
        entity me;
@@@ -48,7 -45,6 +45,7 @@@ void XonoticPlayerSettingsTab_fill(enti
                        box.forbiddenCharacters = "\r\n\\\"$"; // don't care, isn't getting saved
                        box.maxLength = -127; // negative means encoded length in bytes
                        box.saveImmediately = 1;
 +                      box.enableClearButton = 0;
                        label.textEntity = box;
        me.TR(me);
                me.TD(me, 5, 1, e = makeXonoticColorpicker(box));
                me.TD(me, 1, 0.3, e = makeXonoticButton("<<", '0 0 0'));
                        e.onClick = PlayerModelSelector_Prev_Click;
                        e.onClickEntity = pms;
-               me.TD(me, me.rows - (me.currentRow + 3), 1.8, pms);
+               me.TD(me, me.rows - (me.currentRow + 2), 1.8, pms);
                me.TD(me, 1, 0.3, e = makeXonoticButton(">>", '0 0 0'));
                        e.onClick = PlayerModelSelector_Next_Click;
                        e.onClickEntity = pms;
        me.TR(me);
                r = me.currentRow;
-               m = me.rows - (r + 4);
+               m = me.rows - (r + 3);
                n = 16 - !cvar("developer");
                m = m / (n - 1);
                for(i = 0; i < n; ++i)
                        me.gotoRC(me, r + i * m, 0.4);
                        me.TDNoMargin(me, m, 0.2, e = makeXonoticColorButton(2, 1, i), '0 1 0');
                }
-       me.gotoRC(me, me.rows - 3, 0);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_forceplayermodels", _("Force player models to mine")));
-       me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_forceplayercolors", _("Force player colors to mine")));
  
-       me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Field of view:")));
-               me.TD(me, 1, 2, e = makeXonoticSlider(60, 130, 1, "fov"));
-       me.TR(me);
-               sl = makeXonoticSlider(0.45, 0.75, 0.01, "cl_bobcycle");
-               me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, sl, _("View bobbing:")));
-               makeMulti(sl, "cl_bob2cycle");
-               me.TD(me, 1, 2, sl);
-       me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Zoom factor:")));
-               me.TD(me, 1, 2, e = makeXonoticSlider(2, 16, 0.5, "cl_zoomfactor"));
-       me.TR(me);
-               sl = makeXonoticSlider(1, 8, 0.5, "cl_zoomspeed");
-               me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1, 1, sl, _("Zoom speed:")));
-               me.TD(me, 1, 2, sl);
+       // crosshair_enabled: 0 = no crosshair options, 1 = no crosshair selection, but everything else enabled, 2 = all crosshair options enabled
+       // FIXME: In the future, perhaps make one global crosshair_type cvar which has 0 for disabled, 1 for custom, 2 for per weapon, etc?
+       me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
+               me.TD(me, 1, 3, e = makeXonoticRadioButton(3, "crosshair_enabled", "0", _("No crosshair")));
        me.TR(me);
-               me.TD(me, 1, 1.5, e = makeXonoticButton(_("Weapon settings..."), '0 0 0'));
-                       e.onClick = DialogOpenButton_Click;
-                       e.onClickEntity = main.weaponsDialog;
-               me.TD(me, 1, 1.5, e0 = makeXonoticTextLabel(0, string_null));
-                       e0.textEntity = main.weaponsDialog;
-                       e0.allowCut = 1;
+               me.TD(me, 1, 3, e = makeXonoticRadioButton(3, "crosshair_per_weapon", string_null, _("Per weapon crosshair")));
+               makeMulti(e, "crosshair_enabled");
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair:")));
-               me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "crosshair_per_weapon", _("Per weapon")));
+               me.TD(me, 1, 3, e = makeXonoticRadioButton(3, "crosshair_enabled", "2", _("Custom crosshair")));
        me.TR(me);
-               me.TDempty(me, 0.2);
+               me.TDempty(me, 0.1);
                for(i = 1; i <= 14; ++i) {
-                       me.TDNoMargin(me, 1, 2 / 14, e = makeXonoticCrosshairButton(3, i), '1 1 0');
-                       setDependent(e, "crosshair_per_weapon", 0, 0);
+                       me.TDNoMargin(me, 1, 2 / 14, e = makeXonoticCrosshairButton(4, i), '1 1 0');
+                               setDependentAND(e, "crosshair_per_weapon", 0, 0, "crosshair_enabled", 1, 2);
                }
                // show a larger preview of the selected crosshair
-               me.TDempty(me, 0.2);
-               me.TDNoMargin(me, 2, 2 / 5, e = makeXonoticCrosshairButton(7, -1), '1 1 0'); // crosshair -1 makes this a preview
-               setDependent(e, "crosshair_per_weapon", 0, 0);
+               me.TDempty(me, 0.1);
+               me.TDNoMargin(me, 3, 0.8, e = makeXonoticCrosshairButton(7, -1), '1 1 0'); // crosshair -1 makes this a preview
+                       setDependentAND(e, "crosshair_per_weapon", 0, 0, "crosshair_enabled", 1, 2);
        me.TR(me);
-               me.TDempty(me, 0.2);
+               me.TDempty(me, 0.1);
                for(i = 15; i <= 28; ++i) {
-                       me.TDNoMargin(me, 1, 2 / 14, e = makeXonoticCrosshairButton(3, i), '1 1 0');
-                       setDependent(e, "crosshair_per_weapon", 0, 0);
+                       me.TDNoMargin(me, 1, 2 / 14, e = makeXonoticCrosshairButton(4, i), '1 1 0');
+                               setDependentAND(e, "crosshair_per_weapon", 0, 0, "crosshair_enabled", 1, 2);
                }
        me.TR(me);
-               me.TDempty(me, 0.2);
+       me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair size:")));
-               me.TD(me, 1, 1.8, e = makeXonoticSlider(0.1, 1.0, 0.01, "crosshair_size"));
+                       setDependent(e, "crosshair_enabled", 1, 2);
+               me.TD(me, 1, 2, e = makeXonoticSlider(0.1, 1.0, 0.01, "crosshair_size"));
+                       setDependent(e, "crosshair_enabled", 1, 2);
        me.TR(me);
-               me.TDempty(me, 0.2);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair alpha:")));
-               me.TD(me, 1, 1.8, e = makeXonoticSlider(0, 1, 0.1, "crosshair_alpha"));
+                       setDependent(e, "crosshair_enabled", 1, 2);
+               me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.1, "crosshair_alpha"));
+                       setDependent(e, "crosshair_enabled", 1, 2);
+       me.TR(me);
        me.TR(me);
-               me.TDempty(me, 0.2);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair color:")));
-               me.TD(me, 1, 0.9, e = makeXonoticRadioButton(4, "crosshair_color_per_weapon", string_null, _("Per weapon")));
-               me.TD(me, 1, 0.9, e = makeXonoticRadioButton(4, "crosshair_color_by_health", string_null, _("By health")));
+                       setDependent(e, "crosshair_enabled", 1, 2);
+               me.TD(me, 1, 1, e = makeXonoticRadioButton(5, "crosshair_color_per_weapon", string_null, _("Per weapon")));
+                       setDependent(e, "crosshair_enabled", 1, 2);
+               me.TD(me, 1, 1, e = makeXonoticRadioButton(5, "crosshair_color_by_health", string_null, _("By health")));
+                       setDependent(e, "crosshair_enabled", 1, 2);
        me.TR(me);
-               me.TDempty(me, 0.3);
-               me.TD(me, 1, 0.9, e = makeXonoticRadioButton(4, string_null, string_null, _("Custom")));
-               me.TD(me, 2, 1.8, e = makeXonoticColorpickerString("crosshair_color", "crosshair_color"));
-                       setDependentAND(e, "crosshair_color_per_weapon", 0, 0, "crosshair_color_by_health", 0, 0);
+               me.TDempty(me, 0.1);
+               me.TD(me, 1, 0.9, e = makeXonoticRadioButton(5, string_null, string_null, _("Custom")));
+                       setDependent(e, "crosshair_enabled", 1, 2);
+               me.TD(me, 2, 2, e = makeXonoticColorpickerString("crosshair_color", "crosshair_color"));
+                       setDependentAND3(e, "crosshair_color_per_weapon", 0, 0, "crosshair_color_by_health", 0, 0, "crosshair_enabled", 1, 2);
        me.TR(me);
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "crosshair_dot", _("Enable center dot")));
        me.TR(me);
-               me.TDempty(me, 0.2);
-               me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, _("Size:")));
-               me.TD(me, 1, 0.9, e = makeXonoticSlider(0.2, 2, 0.1, "crosshair_dot_size"));
-                       setDependent(e, "crosshair_dot", 1, 1);
-               me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, _("Alpha:")));
-               me.TD(me, 1, 0.9, e = makeXonoticSlider(0.10, 1, 0.1, "crosshair_dot_alpha"));
-                       setDependent(e, "crosshair_dot", 1, 1);
+               me.TDempty(me, 0.5);
+               me.TD(me, 1, 2, e = makeXonoticButton(_("Other crosshair settings"), '0 0 0'));
+                       e.onClick = DialogOpenButton_Click;
+                       e.onClickEntity = main.crosshairDialog;
+               setDependent(e, "crosshair_enabled", 1, 2);
+               // TODO: show status of crosshair dot and hittest and pickups and such here with text
+       me.TR(me);
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Hit test:")));
-               me.TD(me, 1, 2/3, e = makeXonoticRadioButton(5, "crosshair_hittest", "0",    ZCTX(_("HTST^None"))));
-               me.TD(me, 1, 2/3, e = makeXonoticRadioButton(5, "crosshair_hittest", "1",    _("TrueAim")));
-               me.TD(me, 1, 2/3, e = makeXonoticRadioButton(5, "crosshair_hittest", "1.25", _("Enemies")));
+               me.TDempty(me, 0.5);
+               me.TD(me, 1, 2, e = makeXonoticButton(_("Model settings"), '0 0 0'));
+                       e.onClick = DialogOpenButton_Click;
+                       e.onClickEntity = main.modelDialog;
+               // TODO: show csqc model settings like forcemyplayer and deglowing/ghosting bodies with text here
+       me.TR(me);
+               me.TDempty(me, 0.5);
+               me.TD(me, 1, 2, e = makeXonoticButton(_("View settings"), '0 0 0'));
+                       e.onClick = DialogOpenButton_Click;
+                       e.onClickEntity = main.viewDialog;
+               // TODO: show fov and other settings with text here
        me.TR(me);
-               me.TDempty(me, 0.4);
-               me.TD(me, 1, 2.2, e = makeXonoticButton(_("Waypoints setup..."), '0 0 0'));
+               me.TDempty(me, 0.5);
+               me.TD(me, 1, 2, e = makeXonoticButton(_("Weapon settings"), '0 0 0'));
                        e.onClick = DialogOpenButton_Click;
-                       e.onClickEntity = main.waypointDialog;
-       me.TR(me);
-               me.TDempty(me, 0.4);
-               me.TD(me, 1, 2.2, e = makeXonoticButton(_("Enter HUD editor"), '0 0 0'));
-                       e.onClick = HUDSetup_Join_Click;
-                       e.onClickEntity = me;
-       #ifdef ALLOW_FORCEMODELS
-       me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Force models:")));
-               me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, string_null, string_null, ZCTX(_("MDL^None"))));
-               me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, "cl_forceplayermodelsfromxonotic", string_null, ZCTX(_("MDL^Custom"))));
-               me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, "cl_forceplayermodels", string_null, ZCTX(_("MDL^All"))));
-       #endif
-       me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_gentle", _("Disable gore effects")));
-       me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gibs:")));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_nogibs"));
-                       e.addValue(e, ZCTX(_("GIBS^None")), "1");
-                       e.addValue(e, ZCTX(_("GIBS^Few")), "0.75");
-                       e.addValue(e, ZCTX(_("GIBS^Many")), "0.5");
-                       e.addValue(e, ZCTX(_("GIBS^Lots")), "0");
-                       e.configureXonoticTextSliderValues(e);
-                       setDependent(e, "cl_gentle", 0, 0);
-       me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Damage splash:")));
-               me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.05, "hud_damage"));
+                       e.onClickEntity = main.weaponsDialog;
+               // I don't really think this is useful as is, and especially it doesn't look very clean...
+               // In the future, if ALL of these buttons had some information, then it would be justified/clean
+               //me.TD(me, 1, 1, e0 = makeXonoticTextLabel(0, string_null)); 
+               //      e0.textEntity = main.weaponsDialog;
+               //      e0.allowCut = 1;
+       me.TR(me);
+               me.TDempty(me, 0.5);
+               me.TD(me, 1, 2, e = makeXonoticButton(_("HUD settings"), '0 0 0'));
+                       e.onClick = DialogOpenButton_Click;
+                       e.onClickEntity = main.hudDialog;
+               // TODO: show hud config name with text here 
  
        me.gotoRC(me, me.rows - 1, 0);
-               me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "color -1 -1;name \"$_cl_name\";cl_cmd sendcvar cl_weaponpriority;sendcvar cl_zoomfactor;sendcvar cl_zoomspeed;sendcvar cl_autoswitch;sendcvar cl_forceplayermodelsfromxonotic;sendcvar cl_forceplayermodels;playermodel $_cl_playermodel;playerskin $_cl_playerskin", COMMANDBUTTON_APPLY));
- }
- void HUDSetup_Join_Click(entity me, entity btn)
- {
-       if(! (gamestatus & (GAME_CONNECTED | GAME_ISSERVER)))
-       {
-               localcmd("map hudsetup/hudsetup", "\n");
-       }
-       else
-               localcmd("togglemenu 0\n");
-       localcmd("_hud_configure 1", "\n");
+               me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "color -1 -1;name \"$_cl_name\";sendcvar cl_weaponpriority;sendcvar cl_autoswitch;sendcvar cl_forceplayermodels;sendcvar cl_forceplayermodelsfromxonotic;playermodel $_cl_playermodel;playerskin $_cl_playerskin", COMMANDBUTTON_APPLY));
  }
  #endif
@@@ -4,7 -4,7 +4,7 @@@ CLASS(XonoticMiscSettingsTab) EXTENDS(X
        ATTRIB(XonoticMiscSettingsTab, title, string, _("Misc"))
        ATTRIB(XonoticMiscSettingsTab, intendedWidth, float, 0.9)
        ATTRIB(XonoticMiscSettingsTab, rows, float, 17)
-       ATTRIB(XonoticMiscSettingsTab, columns, float, 6.5)
+       ATTRIB(XonoticMiscSettingsTab, columns, float, 6.2)
  ENDCLASS(XonoticMiscSettingsTab)
  entity makeXonoticMiscSettingsTab();
  #endif
@@@ -23,50 -23,128 +23,129 @@@ void XonoticMiscSettingsTab_fill(entit
        entity sk;
  
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Menu skins:")));
+               me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Network:")));
        me.TR(me);
-               me.TD(me, me.rows - 2, 3, sk = makeXonoticSkinList());
-       me.gotoRC(me, me.rows - 1, 0);
-               me.TD(me, 1, 3, e = makeXonoticButton(_("Apply immediately"), '0 0 0'));
-                       e.onClick = SetSkin_Click;
-                       e.onClickEntity = sk;
-       me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
-               me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Text language:")));
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Speed:")));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider("_cl_rate"));
+                       e.addValue(e, _("56k"), "4000");
+                       e.addValue(e, _("ISDN"), "7000");
+                       e.addValue(e, _("Slow ADSL"), "15000");
+                       e.addValue(e, _("Fast ADSL"), "20000");
+                       e.addValue(e, _("Broadband"), "66666");
+                       e.configureXonoticTextSliderValues(e);
+       me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Input packets/s:")));
+               me.TD(me, 1, 2, e = makeXonoticSlider(20, 100, 5, "cl_netfps"));
+       me.TR(me);
+               if(cvar("developer"))
+               {
+                       me.TDempty(me, 0.2);
+                       me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Local latency:")));
+                       me.TD(me, 1, 2, e = makeXonoticSlider(0, 1000, 25, "cl_netlocalping"));
+               }
+       me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 1.8, e = makeXonoticTextLabel(0, _("Client UDP port:")));
+               me.TD(me, 1, 1, e = makeXonoticInputBox(0, "cl_port"));
++                      e.enableClearButton = 0;
+       me.TR(me);
+       me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "shownetgraph", _("Show netgraph")));
        me.TR(me);
-               me.TD(me, 3, 3, sk = makeXonoticLanguageList());
        me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_movement", _("Client-side movement prediction")));
        me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_movement_errorcompensation", _("Movement error compensation")));
+               setDependent(e, "cl_movement", 1, 1);
+       me.TR(me);
+       me.TR(me);
+               me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Downloads:")));
+       me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Maximum:")));
+               me.TD(me, 1, 2, e = makeXonoticSlider(1, 5, 1, "cl_curl_maxdownloads"));
+       me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Speed (kB/s):")));
+               me.TD(me, 1, 2, e = makeXonoticSlider(10, 1500, 10, "cl_curl_maxspeed"));
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticButton(_("Apply immediately"), '0 0 0'));
-                       e.onClick = SetLanguage_Click;
-                       e.onClickEntity = sk;
  
+       me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
+               me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Framerate:")));
+       me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Maximum:")));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_maxfps"));
+                       e.addValue(e, ZCTX(_("MAXFPS^5 fps")), "5");
+                       e.addValue(e, ZCTX(_("MAXFPS^10 fps")), "10");
+                       e.addValue(e, ZCTX(_("MAXFPS^20 fps")), "20");
+                       e.addValue(e, ZCTX(_("MAXFPS^30 fps")), "30");
+                       e.addValue(e, ZCTX(_("MAXFPS^40 fps")), "40");
+                       e.addValue(e, ZCTX(_("MAXFPS^50 fps")), "50");
+                       e.addValue(e, ZCTX(_("MAXFPS^60 fps")), "60");
+                       e.addValue(e, ZCTX(_("MAXFPS^70 fps")), "70");
+                       e.addValue(e, ZCTX(_("MAXFPS^100 fps")), "100");
+                       e.addValue(e, ZCTX(_("MAXFPS^125 fps")), "125");
+                       e.addValue(e, ZCTX(_("MAXFPS^200 fps")), "200");
+                       e.addValue(e, ZCTX(_("MAXFPS^Unlimited")), "0");
+                       e.configureXonoticTextSliderValues(e);
+       me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Target:")));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_minfps"));
+                       e.addValue(e, ZCTX(_("TRGT^Disabled")), "0");
+                       e.addValue(e, ZCTX(_("TRGT^30 fps")), "30");
+                       e.addValue(e, ZCTX(_("TRGT^40 fps")), "40");
+                       e.addValue(e, ZCTX(_("TRGT^50 fps")), "50");
+                       e.addValue(e, ZCTX(_("TRGT^60 fps")), "60");
+                       e.addValue(e, ZCTX(_("TRGT^100 fps")), "100");
+                       e.addValue(e, ZCTX(_("TRGT^125 fps")), "125");
+                       e.addValue(e, ZCTX(_("TRGT^200 fps")), "200");
+                       e.configureXonoticTextSliderValues(e);
+       me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Idle limit:")));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_maxidlefps"));
+                       e.addValue(e, ZCTX(_("IDLFPS^10 fps")), "10");
+                       e.addValue(e, ZCTX(_("IDLFPS^20 fps")), "20");
+                       e.addValue(e, ZCTX(_("IDLFPS^30 fps")), "30");
+                       e.addValue(e, ZCTX(_("IDLFPS^60 fps")), "60");
+                       e.addValue(e, ZCTX(_("IDLFPS^Unlimited")), "0");
+                       e.configureXonoticTextSliderValues(e);
+       me.TR(me);
+       me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "showfps", _("Show frames per second")));
+       me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_maxfps_alwayssleep", _("Save processing time for other apps")));
+               setDependent(e, "cl_maxfps", 1, 1000);
+       me.TR(me);
+       me.TR(me);
+               me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Menu tooltips:")));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider("menu_tooltips"));
+                       e.addValue(e, ZCTX(_("TLTIP^Disabled")), "0");
+                       e.addValue(e, ZCTX(_("TLTIP^Standard")), "1");
+                       e.addValue(e, ZCTX(_("TLTIP^Advanced")), "2");
+                       e.configureXonoticTextSliderValues(e);
        me.TR(me);
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showtime", _("Show current time")));
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showdate", _("Show current date")));
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showfps", _("Show frames per second")));
-       me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_maxfps_alwayssleep", _("Minimize input latency")));
-       if(cvar("developer"))
-       {
-               me.TR(me);
-               me.TR(me);
-                       me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Menu Tooltips:")));
-                       me.TD(me, 1, 0.4, e = makeXonoticRadioButton(2, "menu_tooltips", "0", _("Off")));
-                       me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "menu_tooltips", "1", _("Standard")));
-                       me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "menu_tooltips", "2", _("Advanced")));
-       }
+               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "developer", _("Enable developer mode")));
        me.TR(me);
        me.TR(me);
                me.TDempty(me, 0.5);
                me.TD(me, 1, 2, e = makeXonoticButton(_("Advanced settings..."), '0 0 0'));
                        e.onClick = DialogOpenButton_Click;
                        e.onClickEntity = main.cvarsDialog;
+       me.TR(me);
  }
  #endif
@@@ -15,15 -15,28 +15,26 @@@ void XonoticCvarsDialog_showNotify(enti
  {
        loadAllCvars(me);
  }
- void XonoticCvarsDialog_fill(entity me)
+ void XonoticCvarsDialog_fill(entity me) // in this dialog, use SKINCOLOR_CVARLIST_CONTROLS to color ALL controls 
  {
 -      entity e, cvarlist, btn;
 -      
++
 +      entity e, cvarlist;
++
        cvarlist = makeXonoticCvarList();
 -      
++
+       cvarlist.color = 
+               cvarlist.colorF = 
+               cvarlist.color2 = 
+               cvarlist.colorC = 
+               SKINCOLOR_CVARLIST_CONTROLS;
 -      
++
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Cvar filter:")));
 -              me.TD(me, 1, 0.5, btn = makeXonoticButton(_("Clear"), SKINCOLOR_CVARLIST_CONTROLS));
--              me.TD(me, 1, me.columns - 1.5, e = makeXonoticInputBox(0, string_null));
++              me.TD(me, 1, me.columns - 1, e = makeXonoticInputBox(0, string_null));
+                       e.color = SKINCOLOR_CVARLIST_CONTROLS;
+                       e.colorF = SKINCOLOR_CVARLIST_CONTROLS;
                        e.onChange = CvarList_Filter_Change;
                        e.onChangeEntity = cvarlist;
 -                      btn.onClick = InputBox_Clear_Click;
 -                      btn.onClickEntity = e;
                        cvarlist.controlledTextbox = e; // this COULD also be the Value box, but this leads to accidentally editing stuff
        me.TR(me);
                me.TD(me, me.rows - me.currentRow - 7, me.columns, cvarlist);
                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.onChange = CvarList_Value_Change;
                        e.onChangeEntity = cvarlist;
                        e.onEnter = CvarList_End_Editing;
                        e.onEnterEntity = cvarlist;
-               me.TD(me, 1, 1, e = makeXonoticButton(string_null, SKINCOLOR_CVARLIST_REVERTBUTTON));
+               me.TD(me, 1, 1, e = makeXonoticButton(string_null, SKINCOLOR_CVARLIST_CONTROLS));
                        cvarlist.cvarDefaultBox = e;
                        e.onClick = CvarList_Revert_Click;
                        e.onClickEntity = cvarlist;
@@@ -55,7 -70,7 +68,7 @@@
                        cvarlist.cvarDescriptionBox = e;
                        e.allowWrap = 1;
        me.gotoRC(me, me.rows - 1, 0);
-               me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
+               me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), SKINCOLOR_CVARLIST_CONTROLS));
                        e.onClick = Dialog_Close;
                        e.onClickEntity = me;
  }