changeset 4211:9b4dcc3bcbdf draft

(svn r5714) Backport from branches/TGP (r5701 and r5711) -Fix: < > boxes in patch-settings didn't grey out when they hit the limit of their range -Codechange: while at it, prettyfied DrawArrowButtons() a bit -Fix: < > boxes in industry production window (when cheat enabled) had a minor glitch
author miham <miham@openttd.org>
date Wed, 02 Aug 2006 18:36:53 +0000
parents e13ddc218438
children 210c91e0eced
files gui.h industry_gui.c misc_gui.c settings_gui.c
diffstat 4 files changed, 46 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/gui.h
+++ b/gui.h
@@ -17,7 +17,7 @@
 void ShowGameDifficulty(void);
 void ShowPatchesSelection(void);
 void ShowNewgrf(void);
-void DrawArrowButtons(int x, int y, int ctab, byte state, bool enabled);
+void DrawArrowButtons(int x, int y, int ctab, byte state, bool clickable_left, bool clickable_right);
 
 /* graph_gui.c */
 void ShowOperatingProfitGraph(void);
--- a/industry_gui.c
+++ b/industry_gui.c
@@ -270,6 +270,14 @@
 	AllocateWindowDescFront(_industry_window_desc[_patches.build_rawmaterial_ind][_opt_ptr->landscape],0);
 }
 
+static inline bool isProductionMinimum(const Industry *i, int pt) {
+	return i->production_rate[pt] == 1;
+}
+
+static inline bool isProductionMaximum(const Industry *i, int pt) {
+	return i->production_rate[pt] == 255;
+}
+
 static inline bool IsProductionAlterable(const Industry *i)
 {
 	return ((_game_mode == GM_EDITOR || _cheats.setup_prod.value) &&
@@ -314,8 +322,10 @@
 			SetDParam(2, i->pct_transported[0] * 100 >> 8);
 			DrawString(4 + (IsProductionAlterable(i) ? 30 : 0), 127, STR_482B_TRANSPORTED, 0);
 			// Let's put out those buttons..
-			if (IsProductionAlterable(i))
-				DrawArrowButtons(5, 127, 3, (WP(w,vp2_d).data_2 == 1) ? WP(w,vp2_d).data_3 : 0, true);
+			if (IsProductionAlterable(i)) {
+				DrawArrowButtons(5, 127, 3, (WP(w,vp2_d).data_2 == 1) ? WP(w,vp2_d).data_3 : 0,
+						!isProductionMinimum(i, 0), !isProductionMaximum(i, 0));
+			}
 
 			if (i->produced_cargo[1] != CT_INVALID) {
 				SetDParam(0, _cargoc.names_long[i->produced_cargo[1]]);
@@ -323,8 +333,10 @@
 				SetDParam(2, i->pct_transported[1] * 100 >> 8);
 				DrawString(4 + (IsProductionAlterable(i) ? 30 : 0), 137, STR_482B_TRANSPORTED, 0);
 				// Let's put out those buttons..
-				if (IsProductionAlterable(i))
-					DrawArrowButtons(5, 137, 3, (WP(w,vp2_d).data_2 == 2) ? WP(w,vp2_d).data_3 : 0, true);
+				if (IsProductionAlterable(i)) {
+					DrawArrowButtons(5, 137, 3, (WP(w,vp2_d).data_2 == 2) ? WP(w,vp2_d).data_3 : 0,
+						!isProductionMinimum(i, 1), !isProductionMaximum(i, 1));
+				}
 			}
 		}
 
@@ -350,8 +362,10 @@
 				if (IS_INT_INSIDE(x, 5, 25) ) {
 					/* Clicked buttons, decrease or increase production */
 					if (x < 15) {
+						if (isProductionMinimum(i, line)) return;
 						i->production_rate[line] = maxu(i->production_rate[line] / 2, 1);
 					} else {
+						if (isProductionMaximum(i, line)) return;
 						i->production_rate[line] = minu(i->production_rate[line] * 2, 255);
 					}
 
--- a/misc_gui.c
+++ b/misc_gui.c
@@ -1776,7 +1776,7 @@
 				char buf[512];
 
 				/* Draw [<][>] boxes for settings of an integer-type */
-				DrawArrowButtons(x + 20, y, 3, clk - (i * 2), true);
+				DrawArrowButtons(x + 20, y, 3, clk - (i * 2), true, true);
 
 				switch (ce->str) {
 				/* Display date for change date cheat */
--- a/settings_gui.c
+++ b/settings_gui.c
@@ -734,10 +734,10 @@
 			} else {
 				int32 value;
 
+				value = (int32)ReadValue(var, sd->save.conv);
+
 				/* Draw [<][>] boxes for settings of an integer-type */
-				DrawArrowButtons(x, y, 3, WP(w,def_d).data_2 - (i * 2), editable);
-
-				value = (int32)ReadValue(var, sd->save.conv);
+				DrawArrowButtons(x, y, 3, WP(w,def_d).data_2 - (i * 2), (editable && value != sdb->min), (editable && value != sdb->max));
 
 				disabled = (value == 0) && (sdb->flags & SGF_0ISDISABLED);
 				if (disabled) {
@@ -1049,20 +1049,29 @@
 	w->disabled_state = (1 << 5) | (1 << 6) | (1 << 7);
 }
 
-/** Draw [<][>] boxes
- * state: 0 = none clicked, 1 = first clicked, 2 = second clicked */
-void DrawArrowButtons(int x, int y, int ctab, byte state, bool enabled)
+/**
+ * Draw [<][>] boxes.
+ * @param x the x position to draw
+ * @param y the y position to draw
+ * @param ctab the color of the buttons
+ * @param state 0 = none clicked, 1 = first clicked, 2 = second clicked
+ * @param clickable_left is the left button clickable?
+ * @param clickable_right is the right button clickable?
+ */
+void DrawArrowButtons(int x, int y, int ctab, byte state, bool clickable_left, bool clickable_right)
 {
-	DrawFrameRect(x,    y+1, x + 9, y+9, ctab, (state == 1) ? FR_LOWERED : 0);
-	DrawFrameRect(x+10, y+1, x +19, y+9, ctab, (state == 2) ? FR_LOWERED : 0);
-	DrawStringCentered(x+ 5, y+1, STR_6819, 0); // [<]
-	DrawStringCentered(x+15, y+1, STR_681A, 0); // [>]
+	int color = PALETTE_MODIFIER_GREYOUT | _color_list[3].unk2;
 
-	if (!enabled) {
-		int color = PALETTE_MODIFIER_GREYOUT | _color_list[3].unk2;
-		GfxFillRect(x+ 1, y+1, x+ 1+8, y+8, color);
-		GfxFillRect(x+11, y+1, x+11+8, y+8, color);
-	}
+	DrawFrameRect(x,      y + 1, x +  9, y + 9, ctab, (state == 1) ? FR_LOWERED : 0);
+	DrawFrameRect(x + 10, y + 1, x + 19, y + 9, ctab, (state == 2) ? FR_LOWERED : 0);
+	DrawStringCentered(x +  5, y + 1, STR_6819, 0); // [<]
+	DrawStringCentered(x + 15, y + 1, STR_681A, 0); // [>]
+
+	/* Grey out the buttons that aren't clickable */
+	if (!clickable_left)
+		GfxFillRect(x +  1, y + 1, x +  1 + 8, y + 8, color);
+	if (!clickable_right)
+		GfxFillRect(x + 11, y + 1, x + 11 + 8, y + 8, color);
 }
 
 static char _str_separator[2];
@@ -1076,7 +1085,7 @@
 		DrawWindowWidgets(w);
 
 		// exchange rate
-		DrawArrowButtons(10, y, 3, (clk >> (i*2)) & 0x03, true);
+		DrawArrowButtons(10, y, 3, (clk >> (i*2)) & 0x03, true, true);
 		SetDParam(0, 1);
 		SetDParam(1, 1);
 		DrawString(x, y + 1, STR_CURRENCY_EXCHANGE_RATE, 0);
@@ -1109,7 +1118,7 @@
 		i++;
 
 		// switch to euro
-		DrawArrowButtons(10, y, 3, (clk >> (i*2)) & 0x03, true);
+		DrawArrowButtons(10, y, 3, (clk >> (i*2)) & 0x03, true, true);
 		SetDParam(0, _custom_currency.to_euro);
 		DrawString(x, y + 1, (_custom_currency.to_euro != CF_NOEURO) ? STR_CURRENCY_SWITCH_TO_EURO : STR_CURRENCY_SWITCH_TO_EURO_NEVER, 0);
 		x = 35;