From 1976debefa7f6579f4e7a3d8b1736a1a76eff676 Mon Sep 17 00:00:00 2001 From: Celestar Date: Thu, 13 Jan 2005 16:55:17 +0000 Subject: [PATCH] (svn r1498) -Feature: Addded keyboard shortcuts for the order window --- order_gui.c | 109 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 90 insertions(+), 19 deletions(-) diff --git a/order_gui.c b/order_gui.c index dce170c1f8..208a561ad9 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},