diff options
-rw-r--r-- | order_gui.c | 109 |
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}, |