summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--aircraft_gui.c11
-rw-r--r--gui.h3
-rw-r--r--roadveh_gui.c12
-rw-r--r--ship_gui.c11
-rw-r--r--train_gui.c11
-rw-r--r--ttd.c1
-rw-r--r--vehicle_gui.c5
-rw-r--r--vehicle_gui.h22
8 files changed, 51 insertions, 25 deletions
diff --git a/aircraft_gui.c b/aircraft_gui.c
index 7526d3583..769abc65f 100644
--- a/aircraft_gui.c
+++ b/aircraft_gui.c
@@ -1021,8 +1021,7 @@ static void PlayerAircraftWndProc(Window *w, WindowEvent *e)
/* 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 @@ static void PlayerAircraftWndProc(Window *w, WindowEvent *e)
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 @@ static void PlayerAircraftWndProc(Window *w, WindowEvent *e)
// 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;
diff --git a/gui.h b/gui.h
index 2f790f15e..7a820b675 100644
--- a/gui.h
+++ b/gui.h
@@ -126,4 +126,7 @@ VARDEF byte _station_show_coverage;
VARDEF PlaceProc *_place_proc;
VARDEF bool _no_button_sound;
+/* vehicle_gui.c */
+void InitializeGUI(void);
+
#endif /* GUI_H */
diff --git a/roadveh_gui.c b/roadveh_gui.c
index 7286803d4..009b8b6a4 100644
--- a/roadveh_gui.c
+++ b/roadveh_gui.c
@@ -808,8 +808,7 @@ static void PlayerRoadVehWndProc(Window *w, WindowEvent *e)
/* 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 @@ static void PlayerRoadVehWndProc(Window *w, WindowEvent *e)
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 @@ static void PlayerRoadVehWndProc(Window *w, WindowEvent *e)
// 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 @@ static void PlayerRoadVehWndProc(Window *w, WindowEvent *e)
}
break;
-
case WE_RESIZE:
/* Update the scroll + matrix */
w->vscroll.cap += e->sizing.diff.y / PLY_WND_PRC__SIZE_OF_ROW_SMALL;
diff --git a/ship_gui.c b/ship_gui.c
index 6966a7095..7c454b151 100644
--- a/ship_gui.c
+++ b/ship_gui.c
@@ -965,8 +965,7 @@ static void PlayerShipsWndProc(Window *w, WindowEvent *e)
/* 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 @@ static void PlayerShipsWndProc(Window *w, WindowEvent *e)
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 @@ static void PlayerShipsWndProc(Window *w, WindowEvent *e)
// 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;
diff --git a/train_gui.c b/train_gui.c
index 15e17ceb4..7bfa0fc29 100644
--- a/train_gui.c
+++ b/train_gui.c
@@ -1307,8 +1307,7 @@ static void PlayerTrainsWndProc(Window *w, WindowEvent *e)
/* 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 @@ static void PlayerTrainsWndProc(Window *w, WindowEvent *e)
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 @@ static void PlayerTrainsWndProc(Window *w, WindowEvent *e)
// 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;
diff --git a/ttd.c b/ttd.c
index 0fe6af5a7..0b15b06a3 100644
--- a/ttd.c
+++ b/ttd.c
@@ -721,6 +721,7 @@ int ttd_main(int argc, char* argv[])
// initialize the ingame console
IConsoleInit();
+ InitializeGUI();
IConsoleCmdExec("exec scripts/autoexec.scr 0");
InitPlayerRandoms();
diff --git a/vehicle_gui.c b/vehicle_gui.c
index 3c9b5f441..830a6bb46 100644
--- a/vehicle_gui.c
+++ b/vehicle_gui.c
@@ -1011,3 +1011,8 @@ void ShowReplaceVehicleWindow(byte vehicletype)
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));
+}
diff --git a/vehicle_gui.h b/vehicle_gui.h
index 8e33e8ad5..487653b88 100644
--- a/vehicle_gui.h
+++ b/vehicle_gui.h
@@ -45,12 +45,26 @@ extern const StringID _vehicle_sort_listing[];
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,