Ctrl+click on shared list button in order/timetable window to add veh to group

pull/26/head
Jonathan G Rennison 7 years ago
parent 4255d8a131
commit 2e7e712f06

@ -4469,6 +4469,8 @@ STR_ORDERS_OCCUPANCY_BUTTON_TOOLTIP :{BLACK}Show occ
STR_ORDERS_OCCUPANCY_LIST_TOOLTIP :{BLACK}Order occupancy - this shows running averages of recent occupancy levels when leaving a station, for all vehicles sharing these orders
STR_ORDERS_OCCUPANCY_PERCENT :{NUM}%
STR_ORDERS_NEW_GROUP_TOOLTIP :{BLACK}Create group from single vehicle
# String parts to build the order string
STR_ORDER_GO_TO_WAYPOINT :Go via {WAYPOINT}
STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Go non-stop via {WAYPOINT}
@ -5723,6 +5725,7 @@ STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING
STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT}
STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE}
STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW}
STR_BLACK_PLUS :{BLACK}+
STR_WHITE :{WHITE}
STR_BLACK :{BLACK}

@ -30,6 +30,7 @@
#include "hotkeys.h"
#include "aircraft.h"
#include "engine_func.h"
#include "vehiclelist.h"
#include "widgets/order_widget.h"
@ -1021,6 +1022,10 @@ private:
/* WID_O_SEL_BOTTOM_MIDDLE */
DP_BOTTOM_MIDDLE_DELETE = 0, ///< Display 'delete' in the middle button of the bottom row of the vehicle order window.
DP_BOTTOM_MIDDLE_STOP_SHARING = 1, ///< Display 'stop sharing' in the middle button of the bottom row of the vehicle order window.
/* WID_O_SEL_SHARED */
DP_SHARED_LIST = 0, ///< Display shared order list button
DP_SHARED_VEH_GROUP = 1, ///< Display add veh to new group button
};
int selected_order;
@ -1032,6 +1037,7 @@ private:
bool can_do_autorefit; ///< Vehicle chain can be auto-refitted.
StringID cargo_names_list[NUM_CARGO + 1];
uint32 cargo_bitmask;
int query_text_widget; ///< widget which most recently called ShowQueryString
/**
* Return the memorised selected order.
@ -1490,6 +1496,12 @@ public:
}
}
virtual EventState OnCTRLStateChange() OVERRIDE
{
this->UpdateButtonState();
return ES_NOT_HANDLED;
}
void UpdateButtonState()
{
if (this->vehicle->owner != _local_company) return; // No buttons are displayed with competitor order windows.
@ -1657,6 +1669,8 @@ public:
}
}
this->GetWidget<NWidgetStacked>(WID_O_SEL_SHARED)->SetDisplayedPlane(_ctrl_pressed ? DP_SHARED_VEH_GROUP : DP_SHARED_LIST);
/* Disable list of vehicles with the same shared orders if there is no list */
this->SetWidgetDisabledState(WID_O_SHARED_ORDER_LIST, !(shared_orders || _settings_client.gui.enable_single_veh_shared_order_gui));
@ -1973,6 +1987,7 @@ public:
const Order *order = this->vehicle->GetOrder(this->OrderGetSel());
uint value = order->GetConditionValue();
if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value);
this->query_text_widget = WID_O_COND_VALUE;
SetDParam(0, value);
ShowQueryString(STR_JUST_INT, STR_ORDER_CONDITIONAL_VALUE_CAPT, 5, this, CS_NUMERAL, QSF_NONE);
break;
@ -1982,6 +1997,12 @@ public:
ShowVehicleListWindow(this->vehicle);
break;
case WID_O_ADD_VEH_GROUP: {
this->query_text_widget = WID_O_ADD_VEH_GROUP;
ShowQueryString(STR_EMPTY, STR_GROUP_RENAME_CAPTION, MAX_LENGTH_GROUP_NAME_CHARS, this, CS_ALPHANUMERAL, QSF_ENABLE_DEFAULT | QSF_LEN_IN_CHARS);
break;
}
case WID_O_OCCUPANCY_TOGGLE:
ToggleWidgetLoweredState(WID_O_OCCUPANCY_TOGGLE);
this->UpdateButtonState();
@ -1992,7 +2013,7 @@ public:
virtual void OnQueryTextFinished(char *str) OVERRIDE
{
if (!StrEmpty(str)) {
if (this->query_text_widget == WID_O_COND_VALUE && !StrEmpty(str)) {
VehicleOrderID sel = this->OrderGetSel();
uint value = atoi(str);
@ -2012,6 +2033,10 @@ public:
}
DoCommandP(this->vehicle->tile, this->vehicle->index + (sel << 20), MOF_COND_VALUE | Clamp(value, 0, 2047) << 4, CMD_MODIFY_ORDER | CMD_MSG(STR_ERROR_CAN_T_MODIFY_THIS_ORDER));
}
if (this->query_text_widget == WID_O_ADD_VEH_GROUP) {
DoCommandP(0, VehicleListIdentifier(VL_SINGLE_VEH, this->vehicle->type, this->vehicle->owner, this->vehicle->index).Pack(), 0, CMD_CREATE_GROUP_FROM_LIST | CMD_MSG(STR_ERROR_GROUP_CAN_T_CREATE), NULL, str);
}
}
virtual void OnDropdownSelect(int widget, int index) OVERRIDE
@ -2284,7 +2309,10 @@ static const NWidgetPart _nested_orders_train_widgets[] = {
EndContainer(),
EndContainer(),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_O_OCCUPANCY_TOGGLE), SetMinimalSize(36, 12), SetDataTip(STR_ORDERS_OCCUPANCY_BUTTON, STR_ORDERS_OCCUPANCY_BUTTON_TOOLTIP),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetMinimalSize(12, 12), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_SHARED),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetMinimalSize(12, 12), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_O_ADD_VEH_GROUP), SetMinimalSize(12, 12), SetDataTip(STR_BLACK_PLUS, STR_ORDERS_NEW_GROUP_TOOLTIP),
EndContainer(),
EndContainer(),
/* Second button row. */
@ -2368,7 +2396,10 @@ static const NWidgetPart _nested_orders_widgets[] = {
EndContainer(),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_O_OCCUPANCY_TOGGLE), SetMinimalSize(36, 12), SetDataTip(STR_ORDERS_OCCUPANCY_BUTTON, STR_ORDERS_OCCUPANCY_BUTTON_TOOLTIP),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetMinimalSize(12, 12), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_SHARED),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetMinimalSize(12, 12), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_O_ADD_VEH_GROUP), SetMinimalSize(12, 12), SetDataTip(STR_BLACK_PLUS, STR_ORDERS_NEW_GROUP_TOOLTIP),
EndContainer(),
EndContainer(),
/* Second button row. */

@ -26,6 +26,7 @@
#include "settings_type.h"
#include "viewport_func.h"
#include "schdispatch.h"
#include "vehiclelist.h"
#include "widgets/timetable_widget.h"
@ -330,6 +331,12 @@ struct TimetableWindow : Window {
}
}
virtual EventState OnCTRLStateChange() OVERRIDE
{
this->UpdateSelectionStates();
this->SetDirty();
return ES_NOT_HANDLED;
}
virtual void OnPaint()
{
@ -363,6 +370,7 @@ struct TimetableWindow : Window {
this->SetWidgetDisabledState(WID_VT_AUTOFILL, v->orders.list == NULL || HasBit(v->vehicle_flags, VF_AUTOMATE_TIMETABLE));
this->SetWidgetDisabledState(WID_VT_AUTO_SEPARATION, HasBit(v->vehicle_flags, VF_SCHEDULED_DISPATCH));
this->EnableWidget(WID_VT_AUTOMATE);
this->EnableWidget(WID_VT_ADD_VEH_GROUP);
} else {
this->DisableWidget(WID_VT_START_DATE);
this->DisableWidget(WID_VT_CHANGE_TIME);
@ -374,6 +382,7 @@ struct TimetableWindow : Window {
this->DisableWidget(WID_VT_AUTOMATE);
this->DisableWidget(WID_VT_AUTO_SEPARATION);
this->DisableWidget(WID_VT_SHARED_ORDER_LIST);
this->DisableWidget(WID_VT_ADD_VEH_GROUP);
}
this->SetWidgetLoweredState(WID_VT_AUTOFILL, HasBit(v->vehicle_flags, VF_AUTOFILL_TIMETABLE));
@ -700,6 +709,11 @@ struct TimetableWindow : Window {
case WID_VT_SHARED_ORDER_LIST:
ShowVehicleListWindow(v);
break;
case WID_VT_ADD_VEH_GROUP: {
ShowQueryString(STR_EMPTY, STR_GROUP_RENAME_CAPTION, MAX_LENGTH_GROUP_NAME_CHARS, this, CS_ALPHANUMERAL, QSF_ENABLE_DEFAULT | QSF_LEN_IN_CHARS);
break;
}
}
this->SetDirty();
@ -747,6 +761,11 @@ struct TimetableWindow : Window {
}
break;
}
case WID_VT_ADD_VEH_GROUP: {
DoCommandP(0, VehicleListIdentifier(VL_SINGLE_VEH, v->type, v->owner, v->index).Pack(), 0, CMD_CREATE_GROUP_FROM_LIST | CMD_MSG(STR_ERROR_GROUP_CAN_T_CREATE), NULL, str);
break;
}
}
}
@ -763,6 +782,7 @@ struct TimetableWindow : Window {
{
this->GetWidget<NWidgetStacked>(WID_VT_ARRIVAL_DEPARTURE_SELECTION)->SetDisplayedPlane(_settings_client.gui.timetable_arrival_departure ? 0 : SZSP_NONE);
this->GetWidget<NWidgetStacked>(WID_VT_EXPECTED_SELECTION)->SetDisplayedPlane(_settings_client.gui.timetable_arrival_departure ? 0 : 1);
this->GetWidget<NWidgetStacked>(WID_VT_SEL_SHARED)->SetDisplayedPlane(this->vehicle->owner == _local_company && _ctrl_pressed ? 1 : 0);
}
virtual void OnFocus(Window *previously_focused_window)
@ -830,7 +850,10 @@ static const NWidgetPart _nested_timetable_widgets[] = {
EndContainer(),
EndContainer(),
NWidget(NWID_VERTICAL, NC_EQUALSIZE),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VT_SHARED_ORDER_LIST), SetFill(0, 1), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_VT_SEL_SHARED),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VT_SHARED_ORDER_LIST), SetFill(0, 1), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_ADD_VEH_GROUP), SetFill(0, 1), SetDataTip(STR_BLACK_PLUS, STR_ORDERS_NEW_GROUP_TOOLTIP),
EndContainer(),
NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), SetFill(1, 1), EndContainer(),
NWidget(WWT_RESIZEBOX, COLOUR_GREY), SetFill(0, 1),
EndContainer(),

@ -200,6 +200,12 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli
break;
}
case VL_SINGLE_VEH: {
v = Vehicle::GetIfValid(vli.index);
if (v != NULL) *list->Append() = v;
break;
}
default: return false;
}

@ -25,6 +25,7 @@ enum VehicleListType {
VL_DEPOT_LIST,
VL_GROUP_LIST,
VL_SLOT_LIST,
VL_SINGLE_VEH,
VLT_END
};

@ -43,7 +43,9 @@ enum OrderWidgets {
WID_O_SEL_TOP_ROW_GROUNDVEHICLE, ///< #NWID_SELECTION widget for the top row of the 'your train' order window.
WID_O_SEL_TOP_ROW, ///< #NWID_SELECTION widget for the top row of the 'your non-trains' order window.
WID_O_SEL_BOTTOM_MIDDLE, ///< #NWID_SELECTION widget for the middle part of the bottom row of the 'your train' order window.
WID_O_SEL_SHARED, ///< #NWID_SELECTION widget for WID_O_SHARED_ORDER_LIST and WID_O_ADD_VEH_GROUP
WID_O_SHARED_ORDER_LIST, ///< Open list of shared vehicles.
WID_O_ADD_VEH_GROUP, ///< Add single vehicle to new group button.
WID_O_SEL_OCCUPANCY, ///< #NWID_SELECTION widget for the occupancy list panel.
WID_O_OCCUPANCY_LIST, ///< Occupancy list panel.
WID_O_OCCUPANCY_TOGGLE, ///< Toggle display of occupancy measures.

@ -28,7 +28,9 @@ enum VehicleTimetableWidgets {
WID_VT_AUTOMATE, ///< Automate button.
WID_VT_AUTO_SEPARATION, ///< Auto separation button.
WID_VT_EXPECTED, ///< Toggle between expected and scheduled arrivals.
WID_VT_SEL_SHARED, ///< #NWID_SELECTION widget for WID_VT_SHARED_ORDER_LIST and WID_VT_ADD_VEH_GROUP
WID_VT_SHARED_ORDER_LIST, ///< Show the shared order list.
WID_VT_ADD_VEH_GROUP, ///< Create new group from single vehicle
WID_VT_ARRIVAL_DEPARTURE_SELECTION, ///< Disable/hide the arrival departure panel.
WID_VT_AUTO_SELECTION, ///< Disable/hide the automate button.
WID_VT_EXPECTED_SELECTION, ///< Disable/hide the expected selection button.

Loading…
Cancel
Save