(svn r4830) - Codechange: simplify station sorting a bit by recalculating the clicked-states on drawing the window. This also allows the 'Sort by' button to be visually clickable
authorDarkvater
Thu, 11 May 2006 15:14:50 +0000
changeset 3820 952119a1503d
parent 3819 64c55c77567a
child 3821 57db5bab0f24
(svn r4830) - Codechange: simplify station sorting a bit by recalculating the clicked-states on drawing the window. This also allows the 'Sort by' button to be visually clickable
station_gui.c
--- a/station_gui.c	Thu May 11 14:24:33 2006 +0000
+++ b/station_gui.c	Thu May 11 15:14:50 2006 +0000
@@ -245,8 +245,15 @@
 	static byte facilities = FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK;
 	static uint16 cargo_filter = 0x1FFF;
 	plstations_d *sl = &WP(w, plstations_d);
+
 	switch (e->event) {
 	case WE_PAINT: {
+		/* Set up cargo click-states. Toggle the all-vehicle and all-cargo types button
+		* depending on if all types are clicked or not */
+		SB(w->click_state, 6, 5, facilities);
+		SB(w->click_state, 26, 1, facilities == (FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK));
+		SB(w->click_state, 12, NUM_CARGO + 1, cargo_filter);
+		SB(w->click_state, 27, 1, cargo_filter == 0x1FFF);
 
 		BuildStationsList(sl, owner, facilities, cargo_filter);
 		SortStationsList(sl);
@@ -330,15 +337,12 @@
 
 			id_v += w->vscroll.pos;
 
-			{
-				const Station* st;
+			if (id_v >= sl->list_length) return; // click out of list bound
 
-				if (id_v >= sl->list_length) return; // click out of list bound
-
-				st = GetStation(sl->sort_list[id_v].index);
+			{
+				const Station *st = GetStation(sl->sort_list[id_v].index);
 
 				assert(st->owner == owner);
-
 				ScrollMainWindowToTile(st->xy);
 			}
 		} break;
@@ -349,39 +353,20 @@
 		case 10: /* dock */
 			if (_ctrl_pressed) {
 				TOGGLEBIT(facilities, e->click.widget - 6);
-				TOGGLEBIT(w->click_state, e->click.widget);
-				if (facilities == 0) { /* None selected, so select all */
-					facilities = FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK;
-				}
 			} else {
-				/* We click on the only active button */
-				if (HAS_SINGLE_BIT(GB(w->click_state, 6, 5)) && HASBIT(w->click_state, e->click.widget)) {
-					facilities = FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK;
-				} else {
-					facilities = 0;
-					SETBIT(facilities, e->click.widget - 6);
-				}
+				facilities = 0;
+				SETBIT(facilities, e->click.widget - 6);
 			}
-			SB(w->click_state, 6, 5, facilities);
 			sl->flags |= SL_REBUILD;
 			SetWindowDirty(w);
-			if (facilities == (FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK)) {
-				SETBIT(w->click_state, 26);
-			} else {
-				CLRBIT(w->click_state, 26);
-			}
 		break;
 		case 26:
 			facilities = FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK;
-			SB(w->click_state, 6, 5, facilities);
-			SETBIT(w->click_state, e->click.widget);
 			sl->flags |= SL_REBUILD;
 			SetWindowDirty(w);
 			break;
 		case 27:
 			cargo_filter = 0x1FFF; /* select everything */
-			SB(w->click_state, 12, NUM_CARGO + 1, cargo_filter);
-			SETBIT(w->click_state, e->click.widget);
 			sl->flags |= SL_REBUILD;
 			SetWindowDirty(w);
 			break;
@@ -397,28 +382,13 @@
 			if (e->click.widget >= 12 && e->click.widget <= 24) { //change cargo_filter
 				if (_ctrl_pressed) {
 					TOGGLEBIT(cargo_filter, e->click.widget - 12);
-					TOGGLEBIT(w->click_state, e->click.widget);
-					if (cargo_filter == 0) {
-						cargo_filter = 0x1FFF; /* select everything */
-					}
 				} else {
-				/* We click on the only active button */
-					if (HAS_SINGLE_BIT(GB(w->click_state, 12, NUM_CARGO + 1)) && HASBIT(w->click_state, e->click.widget)) {
-						cargo_filter = 0x1FFF;
-					} else {
-						cargo_filter = 0;
-						SETBIT(cargo_filter, e->click.widget - 12);
-					}
+					cargo_filter = 0;
+					SETBIT(cargo_filter, e->click.widget - 12);
 				}
-				SB(w->click_state, 12, NUM_CARGO + 1, cargo_filter);
 				sl->flags |= SL_REBUILD;
 				SetWindowDirty(w);
 			}
-			if (cargo_filter == 0x1FFF) {
-				SETBIT(w->click_state, 27);
-			} else {
-				CLRBIT(w->click_state, 27);
-			}
 		}
 	} break;
 	case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */
@@ -444,18 +414,8 @@
 		sl->flags = SL_REBUILD;
 		sl->sort_type = 0;
 		sl->resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
-		w->click_state = 0;
-		SB(w->click_state, 6, 5, facilities);
-		SB(w->click_state, 12, NUM_CARGO + 1, cargo_filter);
-		if (facilities == (FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK)) {
-			SETBIT(w->click_state, 26);
-		}
-		if (cargo_filter == 0x1FFF) {
-			SETBIT(w->click_state, 27);
-		}
 		break;
 
-
 	case WE_RESIZE:
 		w->vscroll.cap += e->sizing.diff.y / 10;
 		break;
@@ -497,7 +457,7 @@
 {      WWT_PANEL,   RESIZE_NONE,    14,   271,   284,    14,    24, 0x0, STR_SELECT_ALL_TYPES},
 
 //28
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     0,    80,    25,    36, STR_SORT_BY, STR_SORT_ORDER_TIP},
+{ WWT_PUSHTXTBTN,   RESIZE_NONE,    14,     0,    80,    25,    36, STR_SORT_BY, STR_SORT_ORDER_TIP},
 {      WWT_PANEL,   RESIZE_NONE,    14,    81,   232,    25,    36, 0x0,         STR_SORT_CRITERIA_TIP},
 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   233,   243,    25,    36, STR_0225,    STR_SORT_CRITERIA_TIP},
 {      WWT_PANEL,  RESIZE_RIGHT,    14,   244,   345,    25,    36, 0x0,         STR_NULL},
@@ -507,7 +467,7 @@
 static const WindowDesc _player_stations_desc = {
 	-1, -1, 358, 162,
 	WC_STATION_LIST,0,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON | WDF_RESIZABLE,
+	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
 	_player_stations_widgets,
 	PlayerStationsWndProc
 };