(svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
authordarkvater
Mon, 31 Jan 2005 11:03:23 +0000
changeset 1246 45f15251412b
parent 1245 768d9bc95aaa
child 1247 01711347f9ac
(svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
aircraft_gui.c
gui.h
roadveh_gui.c
ship_gui.c
train_gui.c
ttd.c
vehicle_gui.c
vehicle_gui.h
--- a/aircraft_gui.c	Mon Jan 31 07:23:15 2005 +0000
+++ b/aircraft_gui.c	Mon Jan 31 11:03:23 2005 +0000
@@ -1021,8 +1021,7 @@
 		/* draw sorting criteria string */
 		DrawString(85, 15, _vehicle_sort_listing[vl->sort_type], 0x10);
 		/* draw arrow pointing up/down for ascending/descending sorting */
-		DoDrawString(
-			vl->flags & VL_DESC ? "\xAA" : "\xA0", 69, 15, 0x10);
+		DoDrawString(vl->flags & VL_DESC ? "\xAA" : "\xA0", 69, 15, 0x10);
 
 		max = min(w->vscroll.pos + w->vscroll.cap, vl->list_length);
 		for (i = w->vscroll.pos; i < max; ++i) {
@@ -1061,6 +1060,7 @@
 		case 3: /* Flip sorting method ascending/descending */
 			vl->flags ^= VL_DESC;
 			vl->flags |= VL_RESORT;
+			_sorting.aircraft.order = !!(vl->flags & VL_DESC);
 			SetWindowDirty(w);
 			break;
 
@@ -1123,18 +1123,19 @@
 			// value has changed -> resort
 			vl->flags |= VL_RESORT;
 			vl->sort_type = e->dropdown.index;
+			_sorting.aircraft.criteria = vl->sort_type;
 
 			// enable 'Sort By' if a sorter criteria is chosen
 			if (vl->sort_type != SORT_BY_UNSORTED)
-				w->disabled_state &= ~(1 << 3);
+				CLRBIT(w->disabled_state, 3);
 		}
 		SetWindowDirty(w);
 		break;
 
 	case WE_CREATE: /* set up resort timer */
 		vl->sort_list = NULL;
-		vl->flags = VL_REBUILD;
-		vl->sort_type = SORT_BY_UNSORTED;
+		vl->flags = VL_REBUILD | (_sorting.aircraft.order << (VL_DESC - 1));
+		vl->sort_type = _sorting.aircraft.criteria;
 		vl->resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
 		break;
 
--- a/gui.h	Mon Jan 31 07:23:15 2005 +0000
+++ b/gui.h	Mon Jan 31 11:03:23 2005 +0000
@@ -126,4 +126,7 @@
 VARDEF PlaceProc *_place_proc;
 VARDEF bool _no_button_sound;
 
+/* vehicle_gui.c */
+void InitializeGUI(void);
+
 #endif /* GUI_H */
--- a/roadveh_gui.c	Mon Jan 31 07:23:15 2005 +0000
+++ b/roadveh_gui.c	Mon Jan 31 11:03:23 2005 +0000
@@ -808,8 +808,7 @@
 		/* draw sorting criteria string */
 		DrawString(85, 15, _vehicle_sort_listing[vl->sort_type], 0x10);
 		/* draw arrow pointing up/down for ascending/descending sorting */
-		DoDrawString(
-			vl->flags & VL_DESC ? "\xAA" : "\xA0", 69, 15, 0x10);
+		DoDrawString(vl->flags & VL_DESC ? "\xAA" : "\xA0", 69, 15, 0x10);
 
 		max = min(w->vscroll.pos + w->vscroll.cap, vl->list_length);
 		for (i = w->vscroll.pos; i < max; ++i) {
@@ -846,6 +845,7 @@
 		case 3: /* Flip sorting method ascending/descending */
 			vl->flags ^= VL_DESC;
 			vl->flags |= VL_RESORT;
+			_sorting.roadveh.order = !!(vl->flags & VL_DESC);
 			SetWindowDirty(w);
 			break;
 
@@ -906,18 +906,19 @@
 			// value has changed -> resort
 			vl->flags |= VL_RESORT;
 			vl->sort_type = e->dropdown.index;
+			_sorting.roadveh.criteria = vl->sort_type;
 
 			// enable 'Sort By' if a sorter criteria is chosen
 			if (vl->sort_type != SORT_BY_UNSORTED)
-				w->disabled_state &= ~(1 << 3);
+				CLRBIT(w->disabled_state, 3);
 		}
 		SetWindowDirty(w);
 		break;
 
 	case WE_CREATE: /* set up resort timer */
 		vl->sort_list = NULL;
-		vl->flags = VL_REBUILD;
-		vl->sort_type = SORT_BY_UNSORTED;
+		vl->flags = VL_REBUILD | (_sorting.roadveh.order << (VL_DESC - 1));
+		vl->sort_type = _sorting.roadveh.criteria;
 		vl->resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
 		break;
 
@@ -935,7 +936,6 @@
 		}
 		break;
 
-
 	case WE_RESIZE:
 		/* Update the scroll + matrix */
 		w->vscroll.cap += e->sizing.diff.y / PLY_WND_PRC__SIZE_OF_ROW_SMALL;
--- a/ship_gui.c	Mon Jan 31 07:23:15 2005 +0000
+++ b/ship_gui.c	Mon Jan 31 11:03:23 2005 +0000
@@ -965,8 +965,7 @@
 		/* draw sorting criteria string */
 		DrawString(85, 15, _vehicle_sort_listing[vl->sort_type], 0x10);
 		/* draw arrow pointing up/down for ascending/descending sorting */
-		DoDrawString(
-			vl->flags & VL_DESC ? "\xAA" : "\xA0", 69, 15, 0x10);
+		DoDrawString(vl->flags & VL_DESC ? "\xAA" : "\xA0", 69, 15, 0x10);
 
 		max = min(w->vscroll.pos + w->vscroll.cap, vl->list_length);
 		for (i = w->vscroll.pos; i < max; ++i) {
@@ -1005,6 +1004,7 @@
 		case 3: /* Flip sorting method ascending/descending */
 			vl->flags ^= VL_DESC;
 			vl->flags |= VL_RESORT;
+			_sorting.ship.order = !!(vl->flags & VL_DESC);
 			SetWindowDirty(w);
 			break;
 		case 4: case 5:/* Select sorting criteria dropdown menu */
@@ -1066,18 +1066,19 @@
 			// value has changed -> resort
 			vl->flags |= VL_RESORT;
 			vl->sort_type = e->dropdown.index;
+			_sorting.ship.criteria = vl->sort_type;
 
 			// enable 'Sort By' if a sorter criteria is chosen
 			if (vl->sort_type != SORT_BY_UNSORTED)
-				w->disabled_state &= ~(1 << 3);
+				CLRBIT(w->disabled_state, 3);
 		}
 		SetWindowDirty(w);
 		break;
 
 	case WE_CREATE: /* set up resort timer */
 		vl->sort_list = NULL;
-		vl->flags = VL_REBUILD;
-		vl->sort_type = SORT_BY_UNSORTED;
+		vl->flags = VL_REBUILD | (_sorting.ship.order << (VL_DESC - 1));
+		vl->sort_type = _sorting.ship.criteria;
 		vl->resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
 		break;
 
--- a/train_gui.c	Mon Jan 31 07:23:15 2005 +0000
+++ b/train_gui.c	Mon Jan 31 11:03:23 2005 +0000
@@ -1307,8 +1307,7 @@
 		/* draw sorting criteria string */
 		DrawString(85, 15, _vehicle_sort_listing[vl->sort_type], 0x10);
 		/* draw arrow pointing up/down for ascending/descending sorting */
-		DoDrawString(
-			vl->flags & VL_DESC ? "\xAA" : "\xA0", 69, 15, 0x10);
+		DoDrawString(vl->flags & VL_DESC ? "\xAA" : "\xA0", 69, 15, 0x10);
 
 		max = min(w->vscroll.pos + w->vscroll.cap, vl->list_length);
 		for (i = w->vscroll.pos; i < max; ++i) {
@@ -1347,6 +1346,7 @@
 		case 3: /* Flip sorting method ascending/descending */
 			vl->flags ^= VL_DESC;
 			vl->flags |= VL_RESORT;
+			_sorting.train.order = !!(vl->flags & VL_DESC);
 			SetWindowDirty(w);
 			break;
 
@@ -1409,18 +1409,19 @@
 			// value has changed -> resort
 			vl->flags |= VL_RESORT;
 			vl->sort_type = e->dropdown.index;
+			_sorting.train.criteria = vl->sort_type;
 
 			// enable 'Sort By' if a sorter criteria is chosen
 			if (vl->sort_type != SORT_BY_UNSORTED)
-				w->disabled_state &= ~(1 << 3);
+				CLRBIT(w->disabled_state, 3);
 		}
 		SetWindowDirty(w);
 		break;
 
 	case WE_CREATE: /* set up resort timer */
 		vl->sort_list = NULL;
-		vl->flags = VL_REBUILD;
-		vl->sort_type = SORT_BY_UNSORTED;
+		vl->flags = VL_REBUILD | (_sorting.train.order << (VL_DESC - 1));
+		vl->sort_type = _sorting.train.criteria;
 		vl->resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
 		break;
 
--- a/ttd.c	Mon Jan 31 07:23:15 2005 +0000
+++ b/ttd.c	Mon Jan 31 11:03:23 2005 +0000
@@ -721,6 +721,7 @@
 
 	// initialize the ingame console
 	IConsoleInit();
+	InitializeGUI();
 	IConsoleCmdExec("exec scripts/autoexec.scr 0");
 
 	InitPlayerRandoms();
--- a/vehicle_gui.c	Mon Jan 31 07:23:15 2005 +0000
+++ b/vehicle_gui.c	Mon Jan 31 11:03:23 2005 +0000
@@ -1011,3 +1011,8 @@
 	WP(w,replaceveh_d).vehicletype = vehicletype;
 	w->vscroll2.cap = w->vscroll.cap;   // these two are always the same
 }
+
+void InitializeGUI(void)
+{
+	memset(&_sorting, 0, sizeof(_sorting));
+}
--- a/vehicle_gui.h	Mon Jan 31 07:23:15 2005 +0000
+++ b/vehicle_gui.h	Mon Jan 31 11:03:23 2005 +0000
@@ -45,12 +45,26 @@
 extern const StringID _rail_types_list[];
 
 enum VehicleSortTypes {
-	VEHTRAIN		= 0,
-	VEHROAD			= 1,
-	VEHSHIP			= 2,
-	VEHAIRCRAFT		= 3
+	VEHTRAIN     = 0,
+	VEHROAD      = 1,
+	VEHSHIP      = 2,
+	VEHAIRCRAFT  = 3
 };
 
+typedef struct Listing {
+	bool order;	// Ascending/descending?
+	byte criteria;	// Sorting criteria
+} Listing;
+
+typedef struct Sorting {
+	Listing aircraft;
+	Listing roadveh;
+	Listing ship;
+	Listing train;
+} Sorting;
+
+VARDEF Sorting _sorting;
+
 enum {
   PLY_WND_PRC__OFFSET_TOP_WIDGET	= 26,
 	PLY_WND_PRC__SIZE_OF_ROW_SMALL	= 26,