1
0
Fork 0

(svn r25407) -Codechange: Use order hotkey enum instead of function pointers.

release/1.4
frosch 2013-06-15 15:27:08 +00:00
parent 59b71b5666
commit cd0a57fba3
1 changed files with 63 additions and 41 deletions

View File

@ -436,6 +436,21 @@ static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile)
return order; return order;
} }
/** Hotkeys for order window. */
enum {
OHK_SKIP,
OHK_DELETE,
OHK_GOTO,
OHK_NONSTOP,
OHK_FULLLOAD,
OHK_UNLOAD,
OHK_NEAREST_DEPOT,
OHK_ALWAYS_SERVICE,
OHK_TRANSFER,
OHK_NO_UNLOAD,
OHK_NO_LOAD,
};
/** /**
* %Order window code for all vehicles. * %Order window code for all vehicles.
* *
@ -553,9 +568,8 @@ private:
/** /**
* Handle the click on the goto button. * Handle the click on the goto button.
* @param i Dummy parameter.
*/ */
void OrderClick_Goto(int i) void OrderClick_Goto()
{ {
this->SetWidgetDirty(WID_O_GOTO); this->SetWidgetDirty(WID_O_GOTO);
this->ToggleWidgetLoweredState(WID_O_GOTO); this->ToggleWidgetLoweredState(WID_O_GOTO);
@ -587,7 +601,7 @@ private:
/** /**
* Handle the 'no loading' hotkey * Handle the 'no loading' hotkey
*/ */
void OrderHotkey_NoLoad(int i) void OrderHotkey_NoLoad()
{ {
this->OrderClick_FullLoad(OLFB_NO_LOAD); this->OrderClick_FullLoad(OLFB_NO_LOAD);
} }
@ -609,9 +623,8 @@ private:
/** /**
* Handle the click on the service in nearest depot button. * Handle the click on the service in nearest depot button.
* @param i Dummy parameter.
*/ */
void OrderClick_NearestDepot(int i) void OrderClick_NearestDepot()
{ {
Order order; Order order;
order.next = NULL; order.next = NULL;
@ -625,9 +638,8 @@ private:
/** /**
* Handle the click on the conditional order button. * Handle the click on the conditional order button.
* @param i Dummy parameter.
*/ */
void OrderClick_Conditional(int i) void OrderClick_Conditional()
{ {
this->LowerWidget(WID_O_GOTO); this->LowerWidget(WID_O_GOTO);
this->SetWidgetDirty(WID_O_GOTO); this->SetWidgetDirty(WID_O_GOTO);
@ -637,9 +649,8 @@ private:
/** /**
* Handle the click on the share button. * Handle the click on the share button.
* @param i Dummy parameter.
*/ */
void OrderClick_Share(int i) void OrderClick_Share()
{ {
this->LowerWidget(WID_O_GOTO); this->LowerWidget(WID_O_GOTO);
this->SetWidgetDirty(WID_O_GOTO); this->SetWidgetDirty(WID_O_GOTO);
@ -673,7 +684,7 @@ private:
/** /**
* Handle the transfer hotkey * Handle the transfer hotkey
*/ */
void OrderHotkey_Transfer(int i) void OrderHotkey_Transfer()
{ {
this->OrderClick_Unload(OUFB_TRANSFER); this->OrderClick_Unload(OUFB_TRANSFER);
} }
@ -681,7 +692,7 @@ private:
/** /**
* Handle the 'no unload' hotkey * Handle the 'no unload' hotkey
*/ */
void OrderHotkey_NoUnload(int i) void OrderHotkey_NoUnload()
{ {
this->OrderClick_Unload(OUFB_NO_UNLOAD); this->OrderClick_Unload(OUFB_NO_UNLOAD);
} }
@ -711,9 +722,8 @@ private:
/** /**
* Handle the click on the skip button. * Handle the click on the skip button.
* If ctrl is pressed, skip to selected order, else skip to current order + 1 * If ctrl is pressed, skip to selected order, else skip to current order + 1
* @param i Dummy parameter.
*/ */
void OrderClick_Skip(int i) void OrderClick_Skip()
{ {
/* Don't skip when there's nothing to skip */ /* Don't skip when there's nothing to skip */
if (_ctrl_pressed && this->vehicle->cur_implicit_order_index == this->OrderGetSel()) return; if (_ctrl_pressed && this->vehicle->cur_implicit_order_index == this->OrderGetSel()) return;
@ -725,9 +735,8 @@ private:
/** /**
* Handle the click on the delete button. * Handle the click on the delete button.
* @param i Dummy parameter.
*/ */
void OrderClick_Delete(int i) void OrderClick_Delete()
{ {
/* When networking, move one order lower */ /* When networking, move one order lower */
int selected = this->selected_order + (int)_networking; int selected = this->selected_order + (int)_networking;
@ -743,15 +752,14 @@ private:
* If 'End of Shared Orders' isn't selected, do nothing. If Ctrl is pressed, call OrderClick_Delete and exit. * If 'End of Shared Orders' isn't selected, do nothing. If Ctrl is pressed, call OrderClick_Delete and exit.
* To stop sharing this vehicle order list, we copy the orders of a vehicle that share this order list. That way we * To stop sharing this vehicle order list, we copy the orders of a vehicle that share this order list. That way we
* exit the group of shared vehicles while keeping the same order list. * exit the group of shared vehicles while keeping the same order list.
* @param i Dummy parameter.
*/ */
void OrderClick_StopSharing(int i) void OrderClick_StopSharing()
{ {
/* Don't try to stop sharing orders if 'End of Shared Orders' isn't selected. */ /* Don't try to stop sharing orders if 'End of Shared Orders' isn't selected. */
if (!this->vehicle->IsOrderListShared() || this->selected_order != this->vehicle->GetNumOrders()) return; if (!this->vehicle->IsOrderListShared() || this->selected_order != this->vehicle->GetNumOrders()) return;
/* If Ctrl is pressed, delete the order list as if we clicked the 'Delete' button. */ /* If Ctrl is pressed, delete the order list as if we clicked the 'Delete' button. */
if (_ctrl_pressed) { if (_ctrl_pressed) {
this->OrderClick_Delete(0); this->OrderClick_Delete();
return; return;
} }
@ -818,7 +826,7 @@ public:
if (order->IsType(OT_GOTO_STATION)) station_orders++; if (order->IsType(OT_GOTO_STATION)) station_orders++;
} }
if (station_orders < 2) this->OrderClick_Goto(0); if (station_orders < 2) this->OrderClick_Goto();
} }
this->OnInvalidateData(VIWD_MODIFY_ORDERS); this->OnInvalidateData(VIWD_MODIFY_ORDERS);
} }
@ -1230,15 +1238,15 @@ public:
} }
case WID_O_SKIP: case WID_O_SKIP:
this->OrderClick_Skip(0); this->OrderClick_Skip();
break; break;
case WID_O_DELETE: case WID_O_DELETE:
this->OrderClick_Delete(0); this->OrderClick_Delete();
break; break;
case WID_O_STOP_SHARING: case WID_O_STOP_SHARING:
this->OrderClick_StopSharing(0); this->OrderClick_StopSharing();
break; break;
case WID_O_NON_STOP: case WID_O_NON_STOP:
@ -1253,7 +1261,7 @@ public:
case WID_O_GOTO: case WID_O_GOTO:
if (this->GetWidget<NWidgetLeaf>(widget)->ButtonHit(pt)) { if (this->GetWidget<NWidgetLeaf>(widget)->ButtonHit(pt)) {
this->OrderClick_Goto(0); this->OrderClick_Goto();
} else { } else {
ShowDropDownMenu(this, this->vehicle->type == VEH_AIRCRAFT ? _order_goto_dropdown_aircraft : _order_goto_dropdown, 0, WID_O_GOTO, 0, 0); ShowDropDownMenu(this, this->vehicle->type == VEH_AIRCRAFT ? _order_goto_dropdown_aircraft : _order_goto_dropdown, 0, WID_O_GOTO, 0, 0);
} }
@ -1369,10 +1377,10 @@ public:
case WID_O_GOTO: case WID_O_GOTO:
switch (index) { switch (index) {
case 0: this->OrderClick_Goto(0); break; case 0: this->OrderClick_Goto(); break;
case 1: this->OrderClick_NearestDepot(0); break; case 1: this->OrderClick_NearestDepot(); break;
case 2: this->OrderClick_Conditional(0); break; case 2: this->OrderClick_Conditional(); break;
case 3: this->OrderClick_Share(0); break; case 3: this->OrderClick_Share(); break;
default: NOT_REACHED(); default: NOT_REACHED();
} }
break; break;
@ -1411,11 +1419,11 @@ public:
} }
case WID_O_DELETE: case WID_O_DELETE:
this->OrderClick_Delete(0); this->OrderClick_Delete();
break; break;
case WID_O_STOP_SHARING: case WID_O_STOP_SHARING:
this->OrderClick_StopSharing(0); this->OrderClick_StopSharing();
break; break;
} }
@ -1432,7 +1440,21 @@ public:
{ {
if (this->vehicle->owner != _local_company) return ES_NOT_HANDLED; if (this->vehicle->owner != _local_company) return ES_NOT_HANDLED;
return CheckHotkeyMatch<OrdersWindow>(order_hotkeys, keycode, this) != -1 ? ES_HANDLED : ES_NOT_HANDLED; switch (CheckHotkeyMatch<OrdersWindow>(order_hotkeys, keycode, this)) {
case OHK_SKIP: this->OrderClick_Skip(); break;
case OHK_DELETE: this->OrderClick_Delete(); break;
case OHK_GOTO: this->OrderClick_Goto(); break;
case OHK_NONSTOP: this->OrderClick_Nonstop(-1); break;
case OHK_FULLLOAD: this->OrderClick_FullLoad(-1); break;
case OHK_UNLOAD: this->OrderClick_Unload(-1); break;
case OHK_NEAREST_DEPOT: this->OrderClick_NearestDepot(); break;
case OHK_ALWAYS_SERVICE: this->OrderClick_Service(-1); break;
case OHK_TRANSFER: this->OrderHotkey_Transfer(); break;
case OHK_NO_UNLOAD: this->OrderHotkey_NoUnload(); break;
case OHK_NO_LOAD: this->OrderHotkey_NoLoad(); break;
default: return ES_NOT_HANDLED;
}
return ES_HANDLED;
} }
virtual void OnPlaceObject(Point pt, TileIndex tile) virtual void OnPlaceObject(Point pt, TileIndex tile)
@ -1508,17 +1530,17 @@ public:
}; };
Hotkey<OrdersWindow> OrdersWindow::order_hotkeys[] = { Hotkey<OrdersWindow> OrdersWindow::order_hotkeys[] = {
Hotkey<OrdersWindow>('D', "skip", 0, &OrdersWindow::OrderClick_Skip), Hotkey<OrdersWindow>('D', "skip", OHK_SKIP),
Hotkey<OrdersWindow>('F', "delete", 0, &OrdersWindow::OrderClick_Delete), Hotkey<OrdersWindow>('F', "delete", OHK_DELETE),
Hotkey<OrdersWindow>('G', "goto", 0, &OrdersWindow::OrderClick_Goto), Hotkey<OrdersWindow>('G', "goto", OHK_GOTO),
Hotkey<OrdersWindow>('H', "nonstop", 0, &OrdersWindow::OrderClick_Nonstop), Hotkey<OrdersWindow>('H', "nonstop", OHK_NONSTOP),
Hotkey<OrdersWindow>('J', "fullload", 0, &OrdersWindow::OrderClick_FullLoad), Hotkey<OrdersWindow>('J', "fullload", OHK_FULLLOAD),
Hotkey<OrdersWindow>('K', "unload", 0, &OrdersWindow::OrderClick_Unload), Hotkey<OrdersWindow>('K', "unload", OHK_UNLOAD),
Hotkey<OrdersWindow>((uint16)0, "nearest_depot", 0, &OrdersWindow::OrderClick_NearestDepot), Hotkey<OrdersWindow>((uint16)0, "nearest_depot", OHK_NEAREST_DEPOT),
Hotkey<OrdersWindow>((uint16)0, "always_service", 0, &OrdersWindow::OrderClick_Service), Hotkey<OrdersWindow>((uint16)0, "always_service", OHK_ALWAYS_SERVICE),
Hotkey<OrdersWindow>((uint16)0, "transfer", 0, &OrdersWindow::OrderHotkey_Transfer), Hotkey<OrdersWindow>((uint16)0, "transfer", OHK_TRANSFER),
Hotkey<OrdersWindow>((uint16)0, "no_unload", 0, &OrdersWindow::OrderHotkey_NoUnload), Hotkey<OrdersWindow>((uint16)0, "no_unload", OHK_NO_UNLOAD),
Hotkey<OrdersWindow>((uint16)0, "no_load", 0, &OrdersWindow::OrderHotkey_NoLoad), Hotkey<OrdersWindow>((uint16)0, "no_load", OHK_NO_LOAD),
HOTKEY_LIST_END(OrdersWindow) HOTKEY_LIST_END(OrdersWindow)
}; };
Hotkey<OrdersWindow> *_order_hotkeys = OrdersWindow::order_hotkeys; Hotkey<OrdersWindow> *_order_hotkeys = OrdersWindow::order_hotkeys;