Index: src/lang/english.txt =================================================================== --- src/lang/english.txt (Revision 10043) +++ src/lang/english.txt (Arbeitskopie) @@ -2663,6 +2663,7 @@ 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_MOVE_THIS_ORDER :{WHITE}Can't move 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... Index: src/order_cmd.cpp =================================================================== --- src/order_cmd.cpp (Revision 10043) +++ src/order_cmd.cpp (Arbeitskopie) @@ -598,7 +598,99 @@ return 0; } +/** Move an order inside the orderlist + * @param tile unused + * @param p1 the ID of the vehicle + * @param p2 + * bit 0-15 : the order to move + * bit 16-31 : the target order + * @note The target order will move one place down in the orderlist + * if you move the order upwards else it'll move it one place down + */ +int32 CmdMoveOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) +{ + Vehicle *v; + VehicleID veh = p1; + VehicleOrderID moving_order, target_order; + Order *moving_one, *one_before, *one_past; + moving_order = GB(p2, 0, 16); + target_order = GB(p2, 16, 16); + + if (!IsValidVehicleID(veh)) return CMD_ERROR; + + v = GetVehicle(veh); + if (!CheckOwnership(v->owner)) return CMD_ERROR; + + /* Don't make senseless movements */ + if (moving_order >= v->num_orders || target_order >= v->num_orders || + moving_order == target_order || v->num_orders <= 1) + return CMD_ERROR; + + moving_one = GetVehicleOrder(v, moving_order); + /* Don't move an empty order */ + if (moving_one == NULL) return CMD_ERROR; + + if (flags & DC_EXEC) { + Vehicle *u; + + /* take the moving order out of the pointer-chain */ + one_before = GetVehicleOrder(v, moving_order - 1); + one_past = GetVehicleOrder(v, moving_order + 1); + + if (one_before == NULL) { + /* first order edit */ + v->orders = moving_one->next; + } else { + one_before->next = moving_one->next; + } + + /* Insert the moving_order again in the pointer-chain */ + one_before = GetVehicleOrder(v, target_order - 1); + one_past = GetVehicleOrder(v, target_order); + + moving_one->next = one_past; + + if (one_before == NULL) { + /* first order edit */ + SwapOrders(v->orders, moving_one); + v->orders->next = moving_one; + } else { + one_before->next = moving_one; + } + + if (v->type == VEH_ROAD) ClearSlot(v); + + /* Update shared list */ + u = GetFirstVehicleFromSharedList(v); + + DeleteOrderWarnings(u); + + for (; u != NULL; u = u->next_shared) { + /* update the first order */ + if (u->orders != v->orders) u->orders = v->orders; + + /* update the current order */ + if (u->cur_order_index == moving_order) { + u->cur_order_index = target_order; + } else if(u->cur_order_index > moving_order && u->cur_order_index <= target_order) { + u->cur_order_index--; + } else if(u->cur_order_index < moving_order && u->cur_order_index >= target_order) { + u->cur_order_index++; + } + + assert(v->orders == u->orders); + /* Update any possible open window of the vehicle */ + InvalidateVehicleOrder(u); + } + + /* Make sure to rebuild the whole list */ + RebuildVehicleLists(); + } + + return 0; +} + /** Modify an order in the orderlist of a vehicle. * @param tile unused * @param flags operation to perform Index: src/command.cpp =================================================================== --- src/command.cpp (Revision 10043) +++ src/command.cpp (Arbeitskopie) @@ -176,6 +176,8 @@ DEF_COMMAND(CmdRemoveAllVehiclesGroup); DEF_COMMAND(CmdSetGroupReplaceProtection); +DEF_COMMAND(CmdMoveOrder); + /* The master command table */ static const Command _command_proc_table[] = { {CmdBuildRailroadTrack, 0}, /* 0 */ @@ -328,6 +330,7 @@ {CmdAddSharedVehicleGroup, 0}, /* 124 */ {CmdRemoveAllVehiclesGroup, 0}, /* 125 */ {CmdSetGroupReplaceProtection, 0}, /* 126 */ + {CmdMoveOrder, 0}, /* 127 */ }; /* This function range-checks a cmd, and checks if the cmd is not NULL */ Index: src/order_gui.cpp =================================================================== --- src/order_gui.cpp (Revision 10043) +++ src/order_gui.cpp (Arbeitskopie) @@ -44,6 +44,13 @@ ORDER_WIDGET_RESIZE, }; +/** + * Return the memorised selected order. + * + * @param w current window + * @return the memorised order if it is a vaild one + * else return the number of orders + */ static int OrderGetSel(const Window *w) { const Vehicle *v = GetVehicle(w->window_number); @@ -52,6 +59,33 @@ return (num >= 0 && num < v->num_orders) ? num : v->num_orders; } +/** + * Calculate the selected order. + * The calculation is based on the relative (to the window) y click position and + * the position of the scrollbar. + * + * @param w current window + * @param y Y-value of the click relative to the window origin + * @param v current vehicle + * @return the new selected order if the order is valid else return that + * an invalid one has been selected. + */ +static int GetOrderFromOrderWndPt(Window *w, int y, const Vehicle *v) +{ + /* + * Calculation description: + * 15 = 14 (w->widget[ORDER_WIDGET_ORDER_LIST].top) + 1 (frame-line) + * 10 = order text hight + */ + int sel = (y - 15) / 10; + + if ((uint)sel >= w->vscroll.cap) return INVALID_ORDER; + + sel += w->vscroll.pos; + + return (sel <= v->num_orders && sel >= 0) ? sel : INVALID_ORDER; +} + static StringID StationOrderStrings[] = { STR_8806_GO_TO, STR_8807_GO_TO_TRANSFER, @@ -356,6 +390,12 @@ } } +/** + * Handle the click on the goto button. + * + * @param w current window + * @param v current vehicle + */ static void OrderClick_Goto(Window *w, const Vehicle *v) { InvalidateWidget(w, ORDER_WIDGET_GOTO); @@ -368,26 +408,58 @@ } } +/** + * Handle the click on the full load button. + * + * @param w current window + * @param v current vehicle + */ static void OrderClick_FullLoad(Window *w, const Vehicle *v) { DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), OFB_FULL_LOAD, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); } +/** + * Handle the click on the unload button. + * + * @param w current window + * @param v current vehicle + */ static void OrderClick_Unload(Window *w, const Vehicle *v) { DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), OFB_UNLOAD, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); } +/** + * Handle the click on the nonstop button. + * + * @param w current window + * @param v current vehicle + */ static void OrderClick_Nonstop(Window *w, const Vehicle *v) { DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), OFB_NON_STOP, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); } +/** + * Handle the click on the transfer button. + * + * @param w current window + * @param v current vehicle + */ static void OrderClick_Transfer(Window* w, const Vehicle* v) { DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), OFB_TRANSFER, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); } +/** + * Handle the click on the skip button. + * If ctrl is pressed skip to selected order. + * Else skip to current order + 1 + * + * @param w current window + * @param v current vehicle + */ static void OrderClick_Skip(Window *w, const Vehicle *v) { /* Don't skip when there's nothing to skip */ @@ -397,11 +469,25 @@ NULL, CMD_SKIP_TO_ORDER | CMD_MSG(_ctrl_pressed ? STR_CAN_T_SKIP_TO_ORDER : STR_CAN_T_SKIP_ORDER)); } +/** + * Handle the click on the unload button. + * + * @param w current window + * @param v current vehicle + */ static void OrderClick_Delete(Window *w, const Vehicle *v) { DoCommandP(v->tile, v->index, OrderGetSel(w), NULL, CMD_DELETE_ORDER | CMD_MSG(STR_8834_CAN_T_DELETE_THIS_ORDER)); } +/** + * Handle the click on the refit button. + * If ctrl is pressed cancel refitting. + * Else show the refit window. + * + * @param w current window + * @param v current vehicle + */ static void OrderClick_Refit(Window *w, const Vehicle *v) { if (_ctrl_pressed) { @@ -414,6 +500,12 @@ typedef void OnButtonVehClick(Window *w, const Vehicle *v); +/** + * Keycode function mapping. + * + * @see _order_keycodes[] + * @note Keep them allways in sync with _order_keycodes[]! + */ static OnButtonVehClick* const _order_button_proc[] = { OrderClick_Skip, OrderClick_Delete, @@ -455,14 +547,14 @@ break; case WE_CLICK: { - Vehicle *v = GetVehicle(w->window_number); + const Vehicle *v = GetVehicle(w->window_number); switch (e->we.click.widget) { case ORDER_WIDGET_ORDER_LIST: { - int sel = (e->we.click.pt.y - 15) / 10; + ResetObjectToPlace(); - if ((uint)sel >= w->vscroll.cap) return; + int sel = GetOrderFromOrderWndPt(w, e->we.click.pt.y, v); - sel += w->vscroll.pos; + if (sel == INVALID_ORDER) return; if (_ctrl_pressed && sel < v->num_orders) { const Order *ord = GetVehicleOrder(v, sel); @@ -477,10 +569,21 @@ if (xy != 0) ScrollMainWindowToTile(xy); return; + } else { + if (sel == WP(w,order_d).sel) { + /* Deselect clicked order */ + WP(w,order_d).sel = -1; + } else { + /* Select clicked order */ + WP(w,order_d).sel = sel; + + if (v->owner == _local_player) { + /* Activate drag and drop */ + SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, 4, w); + } + } } - if (sel == WP(w,order_d).sel) sel = -1; - WP(w,order_d).sel = sel; SetWindowDirty(w); } break; @@ -520,6 +623,31 @@ } } break; + case WE_DRAGDROP: { + const Vehicle *v = GetVehicle(w->window_number); + + switch (e->we.click.widget) { + case ORDER_WIDGET_ORDER_LIST: { + int from_order = OrderGetSel(w); + int to_order = GetOrderFromOrderWndPt(w, e->we.dragdrop.pt.y, v); + + if (!(from_order == to_order || from_order == INVALID_ORDER || from_order > v->num_orders || to_order == INVALID_ORDER || to_order > v->num_orders) && + DoCommandP(v->tile, v->index, from_order | (to_order << 16), NULL, CMD_MOVE_ORDER | CMD_MSG(STR_CAN_T_MOVE_THIS_ORDER))) { + WP(w, order_d).sel = -1; + } + + break; + } + + case ORDER_WIDGET_DELETE: + OrderClick_Delete(w, v); + break; + } + + ResetObjectToPlace(); + break; + } + case WE_KEYPRESS: { Vehicle *v = GetVehicle(w->window_number); uint i; @@ -593,23 +721,32 @@ } } +/** + * Widget definition for player train orders + */ static const Widget _orders_train_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_RIGHT, 14, 11, 398, 0, 13, STR_8829_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_PANEL, RESIZE_RB, 14, 0, 386, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, -{ WWT_SCROLLBAR, RESIZE_LRB, 14, 387, 398, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, -{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 52, 76, 87, STR_8823_SKIP, STR_8853_SKIP_THE_CURRENT_ORDER}, -{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 53, 105, 76, 87, STR_8824_DELETE, STR_8854_DELETE_THE_HIGHLIGHTED}, -{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 106, 158, 76, 87, STR_8825_NON_STOP, STR_8855_MAKE_THE_HIGHLIGHTED_ORDER}, -{ WWT_TEXTBTN, RESIZE_TB, 14, 159, 211, 76, 87, STR_8826_GO_TO, STR_8856_INSERT_A_NEW_ORDER_BEFORE}, -{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 212, 264, 76, 87, STR_FULLLOAD_OR_SERVICE, STR_NULL}, -{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 265, 319, 76, 87, STR_8828_UNLOAD, STR_8858_MAKE_THE_HIGHLIGHTED_ORDER}, -{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 265, 319, 76, 87, STR_REFIT, STR_REFIT_TIP}, -{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 320, 372, 76, 87, STR_886F_TRANSFER, STR_886D_MAKE_THE_HIGHLIGHTED_ORDER}, -{ WWT_PUSHIMGBTN, RESIZE_TB, 14, 373, 386, 76, 87, SPR_SHARED_ORDERS_ICON, STR_VEH_WITH_SHARED_ORDERS_LIST_TIP}, -{ WWT_PANEL, RESIZE_RTB, 14, 387, 386, 76, 87, 0x0, STR_NULL}, -{ WWT_RESIZEBOX, RESIZE_LRTB, 14, 387, 398, 76, 87, 0x0, STR_RESIZE_BUTTON}, -{ WIDGETS_END}, + { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // ORDER_WIDGET_CLOSEBOX + { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 398, 0, 13, STR_8829_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, // ORDER_WIDGET_CAPTION + + { WWT_PANEL, RESIZE_RB, 14, 0, 386, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST + + { WWT_SCROLLBAR, RESIZE_LRB, 14, 387, 398, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // ORDER_WIDGET_SCROLLBAR + + { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 52, 76, 87, STR_8823_SKIP, STR_8853_SKIP_THE_CURRENT_ORDER}, // ORDER_WIDGET_SKIP + { WWT_PUSHTXTBTN, RESIZE_TB, 14, 53, 105, 76, 87, STR_8824_DELETE, STR_8854_DELETE_THE_HIGHLIGHTED}, // ORDER_WIDGET_DELETE + { WWT_PUSHTXTBTN, RESIZE_TB, 14, 106, 158, 76, 87, STR_8825_NON_STOP, STR_8855_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_NON_STOP + { WWT_TEXTBTN, RESIZE_TB, 14, 159, 211, 76, 87, STR_8826_GO_TO, STR_8856_INSERT_A_NEW_ORDER_BEFORE}, // ORDER_WIDGET_GOTO + { WWT_PUSHTXTBTN, RESIZE_TB, 14, 212, 264, 76, 87, STR_FULLLOAD_OR_SERVICE, STR_NULL}, // ORDER_WIDGET_FULL_LOAD + { WWT_PUSHTXTBTN, RESIZE_TB, 14, 265, 319, 76, 87, STR_8828_UNLOAD, STR_8858_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_UNLOAD + { WWT_PUSHTXTBTN, RESIZE_TB, 14, 265, 319, 76, 87, STR_REFIT, STR_REFIT_TIP}, // ORDER_WIDGET_REFIT + { WWT_PUSHTXTBTN, RESIZE_TB, 14, 320, 372, 76, 87, STR_886F_TRANSFER, STR_886D_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_TRANSFER + + { WWT_PUSHIMGBTN, RESIZE_TB, 14, 373, 386, 76, 87, SPR_SHARED_ORDERS_ICON, STR_VEH_WITH_SHARED_ORDERS_LIST_TIP}, // ORDER_WIDGET_SHARED_ORDER_LIST + + { WWT_PANEL, RESIZE_RTB, 14, 387, 386, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_RESIZE_BAR + + { WWT_RESIZEBOX, RESIZE_LRTB, 14, 387, 398, 76, 87, 0x0, STR_RESIZE_BUTTON}, // ORDER_WIDGET_RESIZE + { WIDGETS_END}, }; static const WindowDesc _orders_train_desc = { @@ -620,23 +757,32 @@ OrdersWndProc }; +/** + * Widget definition for player orders (!train) + */ static const Widget _orders_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_RIGHT, 14, 11, 409, 0, 13, STR_8829_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_PANEL, RESIZE_RB, 14, 0, 397, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, -{ WWT_SCROLLBAR, RESIZE_LRB, 14, 398, 409, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, -{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 63, 76, 87, STR_8823_SKIP, STR_8853_SKIP_THE_CURRENT_ORDER}, -{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 64, 128, 76, 87, STR_8824_DELETE, STR_8854_DELETE_THE_HIGHLIGHTED}, -{ WWT_EMPTY, RESIZE_TB, 14, 0, 0, 76, 87, 0x0, 0x0}, -{ WWT_TEXTBTN, RESIZE_TB, 14, 129, 192, 76, 87, STR_8826_GO_TO, STR_8856_INSERT_A_NEW_ORDER_BEFORE}, -{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 193, 256, 76, 87, STR_FULLLOAD_OR_SERVICE, STR_NULL}, -{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 257, 319, 76, 87, STR_8828_UNLOAD, STR_8858_MAKE_THE_HIGHLIGHTED_ORDER}, -{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 257, 319, 76, 87, STR_REFIT, STR_REFIT_TIP}, -{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 320, 383, 76, 87, STR_886F_TRANSFER, STR_886D_MAKE_THE_HIGHLIGHTED_ORDER}, -{ WWT_PUSHIMGBTN, RESIZE_TB, 14, 384, 397, 76, 87, SPR_SHARED_ORDERS_ICON, STR_VEH_WITH_SHARED_ORDERS_LIST_TIP}, -{ WWT_PANEL, RESIZE_RTB, 14, 397, 396, 76, 87, 0x0, STR_NULL}, -{ WWT_RESIZEBOX, RESIZE_LRTB, 14, 398, 409, 76, 87, 0x0, STR_RESIZE_BUTTON}, -{ WIDGETS_END}, + { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // ORDER_WIDGET_CLOSEBOX + { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 409, 0, 13, STR_8829_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, // ORDER_WIDGET_CAPTION + + { WWT_PANEL, RESIZE_RB, 14, 0, 397, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST + + { WWT_SCROLLBAR, RESIZE_LRB, 14, 398, 409, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // ORDER_WIDGET_SCROLLBAR + + { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 63, 76, 87, STR_8823_SKIP, STR_8853_SKIP_THE_CURRENT_ORDER}, // ORDER_WIDGET_SKIP + { WWT_PUSHTXTBTN, RESIZE_TB, 14, 64, 128, 76, 87, STR_8824_DELETE, STR_8854_DELETE_THE_HIGHLIGHTED}, // ORDER_WIDGET_DELETE + { WWT_EMPTY, RESIZE_TB, 14, 0, 0, 76, 87, 0x0, 0x0}, // ORDER_WIDGET_NON_STOP + { WWT_TEXTBTN, RESIZE_TB, 14, 129, 192, 76, 87, STR_8826_GO_TO, STR_8856_INSERT_A_NEW_ORDER_BEFORE}, // ORDER_WIDGET_GOTO + { WWT_PUSHTXTBTN, RESIZE_TB, 14, 193, 256, 76, 87, STR_FULLLOAD_OR_SERVICE, STR_NULL}, // ORDER_WIDGET_FULL_LOAD + { WWT_PUSHTXTBTN, RESIZE_TB, 14, 257, 319, 76, 87, STR_8828_UNLOAD, STR_8858_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_UNLOAD + { WWT_PUSHTXTBTN, RESIZE_TB, 14, 257, 319, 76, 87, STR_REFIT, STR_REFIT_TIP}, // ORDER_WIDGET_REFIT + { WWT_PUSHTXTBTN, RESIZE_TB, 14, 320, 383, 76, 87, STR_886F_TRANSFER, STR_886D_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_TRANSFER + + { WWT_PUSHIMGBTN, RESIZE_TB, 14, 384, 397, 76, 87, SPR_SHARED_ORDERS_ICON, STR_VEH_WITH_SHARED_ORDERS_LIST_TIP}, // ORDER_WIDGET_SHARED_ORDER_LIST + + { WWT_PANEL, RESIZE_RTB, 14, 397, 396, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_RESIZE_BAR + + { WWT_RESIZEBOX, RESIZE_LRTB, 14, 398, 409, 76, 87, 0x0, STR_RESIZE_BUTTON}, // ORDER_WIDGET_RESIZE + { WIDGETS_END}, }; static const WindowDesc _orders_desc = { @@ -647,20 +793,32 @@ OrdersWndProc }; +/** + * Widget definition for competitor orders + */ static const Widget _other_orders_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_RIGHT, 14, 11, 331, 0, 13, STR_A00B_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_PANEL, RESIZE_RB, 14, 0, 319, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, -{ WWT_SCROLLBAR, RESIZE_LRB, 14, 320, 331, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, -{ WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, -{ WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, -{ WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, -{ WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, -{ WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, -{ WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_RTB, 14, 0, 319, 76, 87, 0x0, STR_NULL}, -{ WWT_RESIZEBOX, RESIZE_LRTB, 14, 320, 331, 76, 87, 0x0, STR_RESIZE_BUTTON}, -{ WIDGETS_END}, + { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // ORDER_WIDGET_CLOSEBOX + { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 331, 0, 13, STR_A00B_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, // ORDER_WIDGET_CAPTION + + { WWT_PANEL, RESIZE_RB, 14, 0, 319, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST + + { WWT_SCROLLBAR, RESIZE_LRB, 14, 320, 331, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // ORDER_WIDGET_SCROLLBAR + + { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_SKIP + { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_DELETE + { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_NON_STOP + { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_GOTO + { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_FULL_LOAD + { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_UNLOAD + { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_REFIT + { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_TRANSFER + + { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_SHARED_ORDER_LIST + + { WWT_PANEL, RESIZE_RTB, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_RESIZE_BAR + + { WWT_RESIZEBOX, RESIZE_LRTB, 14, 320, 331, 76, 87, 0x0, STR_RESIZE_BUTTON}, // ORDER_WIDGET_RESIZE + { WIDGETS_END}, }; static const WindowDesc _other_orders_desc = { Index: src/command.h =================================================================== --- src/command.h (Revision 10043) +++ src/command.h (Arbeitskopie) @@ -143,6 +143,7 @@ CMD_MASS_START_STOP = 117, CMD_DEPOT_SELL_ALL_VEHICLES = 118, CMD_DEPOT_MASS_AUTOREPLACE = 119, + CMD_CREATE_GROUP = 120, CMD_DELETE_GROUP = 121, CMD_RENAME_GROUP = 122, @@ -150,6 +151,8 @@ CMD_ADD_SHARED_VEHICLE_GROUP = 124, CMD_REMOVE_ALL_VEHICLES_GROUP = 125, CMD_SET_GROUP_REPLACE_PROTECTION = 126, + + CMD_MOVE_ORDER = 127, }; enum {