From: terencehill Date: Thu, 26 Jan 2012 19:19:03 +0000 (+0100) Subject: Merge branch 'master' into terencehill/clear_button X-Git-Tag: xonotic-v0.7.0~55^2~13^2~4 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=2bfd748e228cc992041a15827d3f126916efed22;hp=-c Merge branch 'master' into terencehill/clear_button 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 --- 2bfd748e228cc992041a15827d3f126916efed22 diff --combined gfx/menu/luminos/skinvalues.txt index c9d958e958,316ae273f8..de95791772 --- a/gfx/menu/luminos/skinvalues.txt +++ b/gfx/menu/luminos/skinvalues.txt @@@ -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' diff --combined gfx/menu/wickedx/skinvalues.txt index ed8ff8ad15,3259d7122a..eee5cc649e --- a/gfx/menu/wickedx/skinvalues.txt +++ b/gfx/menu/wickedx/skinvalues.txt @@@ -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' diff --combined gfx/menu/xaw/skinvalues.txt index d5b7a47916,36db25d5cd..c5e5120372 --- a/gfx/menu/xaw/skinvalues.txt +++ b/gfx/menu/xaw/skinvalues.txt @@@ -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 @@@ -105,14 -109,14 +109,14 @@@ 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' diff --combined qcsrc/menu/item/inputbox.c index e057991e17,13351cfd32..83bb916dad --- a/qcsrc/menu/item/inputbox.c +++ b/qcsrc/menu/item/inputbox.c @@@ -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) @@@ -28,12 -26,6 +28,12 @@@ 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); @@@ -129,19 -69,8 +129,19 @@@ 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) diff --combined qcsrc/menu/skin-customizables.inc index 948b2311e8,3eb91ee9d4..2afc1d9b25 --- a/qcsrc/menu/skin-customizables.inc +++ b/qcsrc/menu/skin-customizables.inc @@@ -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!) @@@ -142,8 -146,8 +146,8 @@@ 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"); @@@ -160,8 -164,6 +164,8 @@@ 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 diff --combined qcsrc/menu/xonotic/dialog_multiplayer_demo.c index bfcd1f2567,9538c9afd2..ddfd829f58 --- a/qcsrc/menu/xonotic/dialog_multiplayer_demo.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_demo.c @@@ -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; diff --combined qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c index a57dd6ea40,b187c007a3..ddef675a7f --- a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c @@@ -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)); @@@ -65,13 -61,13 +62,13 @@@ 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) @@@ -84,129 -80,98 +81,98 @@@ 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 diff --combined qcsrc/menu/xonotic/dialog_settings_misc.c index 61295359aa,051520549d..03d6ca470b --- a/qcsrc/menu/xonotic/dialog_settings_misc.c +++ b/qcsrc/menu/xonotic/dialog_settings_misc.c @@@ -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 diff --combined qcsrc/menu/xonotic/dialog_settings_misc_cvars.c index dbf0e4a65b,5dd1c5a5b2..01f4f5f718 --- a/qcsrc/menu/xonotic/dialog_settings_misc_cvars.c +++ b/qcsrc/menu/xonotic/dialog_settings_misc_cvars.c @@@ -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); @@@ -39,11 -52,13 +50,13 @@@ 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; }