(svn r1498) -Feature: Addded keyboard shortcuts for the order window
authorCelestar
Thu, 13 Jan 2005 16:55:17 +0000
changeset 1000 a418026097f6
parent 999 8b2a34061963
child 1001 9d9b34d7a4bc
(svn r1498) -Feature: Addded keyboard shortcuts for the order window
order_gui.c
--- a/order_gui.c	Thu Jan 13 16:50:20 2005 +0000
+++ b/order_gui.c	Thu Jan 13 16:55:17 2005 +0000
@@ -317,6 +317,68 @@
 	}
 }
 
+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 @@
 
 	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 @@
 		}	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 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},