(svn r10033) -Feature [FS#760]: skip to the selected order in the order list when clicking on the "skip" button while pressing CTRL.
authorrubidium
Mon, 04 Jun 2007 19:32:45 +0000
changeset 7290 647d6416cdfe
parent 7289 d6a004877931
child 7291 b77a88be0fd8
(svn r10033) -Feature [FS#760]: skip to the selected order in the order list when clicking on the "skip" button while pressing CTRL.
src/ai/trolly/trolly.cpp
src/command.cpp
src/command.h
src/lang/english.txt
src/order_cmd.cpp
src/order_gui.cpp
--- a/src/ai/trolly/trolly.cpp	Mon Jun 04 16:07:22 2007 +0000
+++ b/src/ai/trolly/trolly.cpp	Mon Jun 04 19:32:45 2007 +0000
@@ -1224,7 +1224,7 @@
 	// Skip the first order if it is a second vehicle
 	//  This to make vehicles go different ways..
 	if (p->ainew.cur_veh & 1)
-		AI_DoCommand(0, p->ainew.veh_id, 0, DC_EXEC, CMD_SKIP_ORDER);
+		AI_DoCommand(0, p->ainew.veh_id, 1, DC_EXEC, CMD_SKIP_TO_ORDER);
 
 	// 3, 2, 1... go! (give START_STOP command ;))
 	AI_DoCommand(0, p->ainew.veh_id, 0, DC_EXEC, CMD_START_STOP_ROADVEH);
--- a/src/command.cpp	Mon Jun 04 16:07:22 2007 +0000
+++ b/src/command.cpp	Mon Jun 04 19:32:45 2007 +0000
@@ -79,7 +79,7 @@
 DEF_COMMAND(CmdReverseTrainDirection);
 
 DEF_COMMAND(CmdModifyOrder);
-DEF_COMMAND(CmdSkipOrder);
+DEF_COMMAND(CmdSkipToOrder);
 DEF_COMMAND(CmdDeleteOrder);
 DEF_COMMAND(CmdInsertOrder);
 DEF_COMMAND(CmdChangeServiceInt);
@@ -222,7 +222,7 @@
 	{CmdReverseTrainDirection,               0}, /*  41 */
 
 	{CmdModifyOrder,                         0}, /*  42 */
-	{CmdSkipOrder,                           0}, /*  43 */
+	{CmdSkipToOrder,                         0}, /*  43 */
 	{CmdDeleteOrder,                         0}, /*  44 */
 	{CmdInsertOrder,                         0}, /*  45 */
 
--- a/src/command.h	Mon Jun 04 16:07:22 2007 +0000
+++ b/src/command.h	Mon Jun 04 19:32:45 2007 +0000
@@ -57,7 +57,7 @@
 	CMD_REVERSE_TRAIN_DIRECTION      =  41,
 
 	CMD_MODIFY_ORDER                 =  42,
-	CMD_SKIP_ORDER                   =  43,
+	CMD_SKIP_TO_ORDER                =  43,
 	CMD_DELETE_ORDER                 =  44,
 	CMD_INSERT_ORDER                 =  45,
 
--- a/src/lang/english.txt	Mon Jun 04 16:07:22 2007 +0000
+++ b/src/lang/english.txt	Mon Jun 04 19:32:45 2007 +0000
@@ -2663,6 +2663,8 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Can't insert new order...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Can't delete this order...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Can't modify this order...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Can't skip current order...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Can't skip to selected order...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Can't move vehicle...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}The rear engine will always follow its front counterpart
 STR_8838_N_A                                                    :N/A{SKIP}
@@ -2694,7 +2696,7 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Show capacities of each vehicle
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Show total capacity of train, split by cargo type
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Orders list - click on an order to highlight it. CTRL + click scrolls to the station
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Skip the current order, and start the next
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Skip the current order, and start the next. CTRL + click skips to the selected order
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Delete the highlighted order
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Make the highlighted order non-stop
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Insert a new order before the highlighted order, or add to end of list
--- a/src/order_cmd.cpp	Mon Jun 04 16:07:22 2007 +0000
+++ b/src/order_cmd.cpp	Mon Jun 04 19:32:45 2007 +0000
@@ -557,29 +557,27 @@
 	return 0;
 }
 
-/** Goto next order of order-list.
+/** Goto order of order-list.
  * @param tile unused
  * @param flags operation to perform
  * @param p1 The ID of the vehicle which order is skipped
- * @param p2 unused
+ * @param p2 the selected order to which we want to skip
  */
-int32 CmdSkipOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+int32 CmdSkipToOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	VehicleID veh_id = p1;
+	VehicleOrderID sel_ord = p2;
 
 	if (!IsValidVehicleID(veh_id)) return CMD_ERROR;
 
 	v = GetVehicle(veh_id);
 
-	if (!CheckOwnership(v->owner)) return CMD_ERROR;
+	if (!CheckOwnership(v->owner) || sel_ord == v->cur_order_index ||
+			sel_ord >= v->num_orders || v->num_orders < 2) return CMD_ERROR;
 
 	if (flags & DC_EXEC) {
-		/* Goto next order */
-		VehicleOrderID b = v->cur_order_index + 1;
-		if (b >= v->num_orders) b = 0;
-
-		v->cur_order_index = b;
+		v->cur_order_index = sel_ord;
 
 		if (v->type == VEH_ROAD) ClearSlot(v);
 
--- a/src/order_gui.cpp	Mon Jun 04 16:07:22 2007 +0000
+++ b/src/order_gui.cpp	Mon Jun 04 19:32:45 2007 +0000
@@ -93,7 +93,7 @@
 
 	if (v->owner == _local_player) {
 		/* skip */
-		SetWindowWidgetDisabledState(w, ORDER_WIDGET_SKIP, v->num_orders == 0);
+		SetWindowWidgetDisabledState(w, ORDER_WIDGET_SKIP, v->num_orders <= 1);
 
 		/* delete */
 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_DELETE,
@@ -390,7 +390,11 @@
 
 static void OrderClick_Skip(Window *w, const Vehicle *v)
 {
-	DoCommandP(v->tile, v->index, 0, NULL, CMD_SKIP_ORDER);
+	/* Don't skip when there's nothing to skip */
+	if (_ctrl_pressed && v->cur_order_index == OrderGetSel(w)) return;
+
+	DoCommandP(v->tile, v->index, _ctrl_pressed ? OrderGetSel(w) : ((v->cur_order_index + 1) % v->num_orders),
+			NULL, CMD_SKIP_TO_ORDER | CMD_MSG(_ctrl_pressed ? STR_CAN_T_SKIP_TO_ORDER : STR_CAN_T_SKIP_ORDER));
 }
 
 static void OrderClick_Delete(Window *w, const Vehicle *v)