summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--order_gui.c109
1 files changed, 90 insertions, 19 deletions
diff --git a/order_gui.c b/order_gui.c
index dce170c1f..208a561ad 100644
--- a/order_gui.c
+++ b/order_gui.c
@@ -317,6 +317,68 @@ static void OrdersPlaceObj(Vehicle *v, uint tile, Window *w)
}
}
+enum OrderFlags {
+ FULL_LOAD = 0,
+ UNLOAD = 1,
+ NON_STOP = 2
+};
+
+static void OrderClick_Goto(Window *w, Vehicle *v)
+{
+ InvalidateWidget(w, 7);
+ TOGGLEBIT(w->click_state, 7);
+ if (HASBIT(w->click_state, 7)) {
+ _place_clicked_vehicle = NULL;
+ SetObjectToPlaceWnd(ANIMCURSOR_PICKSTATION, 1, w);
+ } else {
+ ResetObjectToPlace();
+ }
+}
+
+static void OrderClick_FullLoad(Window *w, Vehicle *v)
+{
+ DoCommandP(v->tile, v->index, OrderGetSel(w) | (FULL_LOAD << 8), NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
+}
+
+static void OrderClick_Unload(Window *w, Vehicle *v)
+{
+ DoCommandP(v->tile, v->index, OrderGetSel(w) | (UNLOAD << 8), NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
+}
+
+static void OrderClick_Skip(Window *w, Vehicle *v)
+{
+ DoCommandP(v->tile,v->index, 0, NULL, CMD_SKIP_ORDER);
+}
+
+static void OrderClick_Delete(Window *w, Vehicle *v)
+{
+ DoCommandP(v->tile,v->index, OrderGetSel(w), NULL, CMD_DELETE_ORDER | CMD_MSG(STR_8834_CAN_T_DELETE_THIS_ORDER));
+}
+
+static void OrderClick_Nonstop(Window *w, Vehicle *v)
+{
+ DoCommandP(v->tile, v->index, OrderGetSel(w) | (NON_STOP << 8), NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
+}
+
+typedef void OnButtonClick(Window *w, Vehicle *v);
+
+static OnButtonClick * const _order_button_proc[] = {
+ OrderClick_Skip,
+ OrderClick_Delete,
+ OrderClick_Nonstop,
+ OrderClick_Goto,
+ OrderClick_FullLoad,
+ OrderClick_Unload
+};
+
+static const uint16 _order_keycodes[] = {
+ 'D', //skip order
+ 'F', //delete order
+ 'G', //non-stop
+ 'H', //goto order
+ 'J', //full load
+ 'K' //unload
+};
static void OrdersWndProc(Window *w, WindowEvent *e)
{
@@ -327,7 +389,6 @@ static void OrdersWndProc(Window *w, WindowEvent *e)
case WE_CLICK: {
Vehicle *v = GetVehicle(w->window_number);
- int mode;
switch(e->click.widget) {
case 2: {/* orders list */
int sel;
@@ -364,40 +425,49 @@ static void OrdersWndProc(Window *w, WindowEvent *e)
} break;
case 4: /* skip button */
- DoCommandP(v->tile,v->index, 0, NULL, CMD_SKIP_ORDER);
+ OrderClick_Skip(w, v);
break;
case 5: /* delete button */
- DoCommandP(v->tile,v->index, OrderGetSel(w), NULL, CMD_DELETE_ORDER | CMD_MSG(STR_8834_CAN_T_DELETE_THIS_ORDER));
+ OrderClick_Delete(w, v);
break;
+ case 6: /* non stop button */
+ OrderClick_Nonstop(w, v);
+ break;
+
case 7: /* goto button */
- InvalidateWidget(w, 7);
- w->click_state ^= 1<<7;
- if (HASBIT(w->click_state, 7)) {
- _place_clicked_vehicle = NULL;
- SetObjectToPlaceWnd(ANIMCURSOR_PICKSTATION, 1, w);
- } else {
- ResetObjectToPlace();
- }
+ OrderClick_Goto(w, v);
break;
case 8: /* full load button */
- mode = 0;
- DoCommandP(v->tile, v->index, OrderGetSel(w) | (mode << 8), NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
+ OrderClick_FullLoad(w, v);
break;
case 9: /* unload button */
- mode = 1;
- DoCommandP(v->tile, v->index, OrderGetSel(w) | (mode << 8), NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
+ OrderClick_Unload(w, v);
break;
- case 6: /* non stop button */
- mode = 2;
- DoCommandP(v->tile, v->index, OrderGetSel(w) | (mode << 8), NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
- break;
}
} break;
+
+ case WE_KEYPRESS: {
+ Vehicle *v = GetVehicle(w->window_number);
+ uint i;
+
+ for(i = 0; i < lengthof(_order_keycodes); i++) {
+ if (e->keypress.keycode == _order_keycodes[i]) {
+ e->keypress.cont = false;
+ //see if the button is disabled
+ if (!(HASBIT(w->disabled_state, (i + 4)))) {
+ _order_button_proc[i](w, v);
+ }
+ break;
+ }
+ }
+ break;
+ }
+
case WE_RCLICK: {
@@ -443,6 +513,7 @@ static void OrdersWndProc(Window *w, WindowEvent *e)
}
}
+
static const Widget _orders_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 14, 11, 319, 0, 13, STR_8829_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS},