Tracerestrict: Do not change copy button selection plane when active

This commit is contained in:
Jonathan G Rennison
2023-05-16 19:53:24 +01:00
parent cd0cc13724
commit 9f89f1fb42

View File

@@ -1758,6 +1758,7 @@ class TraceRestrictWindow: public Window {
TraceRestrictItem expecting_inserted_item; ///< set to instruction when performing an instruction insertion, used to handle selection update on insertion TraceRestrictItem expecting_inserted_item; ///< set to instruction when performing an instruction insertion, used to handle selection update on insertion
int current_placement_widget; ///< which widget has a SetObjectToPlaceWnd, if any int current_placement_widget; ///< which widget has a SetObjectToPlaceWnd, if any
int current_left_aux_plane; ///< current plane for TR_WIDGET_SEL_TOP_LEFT_AUX widget int current_left_aux_plane; ///< current plane for TR_WIDGET_SEL_TOP_LEFT_AUX widget
int base_copy_plane; ///< base plane for TR_WIDGET_SEL_COPY widget
public: public:
TraceRestrictWindow(WindowDesc *desc, TileIndex tile, Track track) TraceRestrictWindow(WindowDesc *desc, TileIndex tile, Track track)
@@ -2341,7 +2342,7 @@ public:
virtual void OnPlaceObject(Point pt, TileIndex tile) override virtual void OnPlaceObject(Point pt, TileIndex tile) override
{ {
int widget = this->current_placement_widget; int widget = this->current_placement_widget;
this->current_placement_widget = -1; this->ResetObjectToPlaceAction();
this->RaiseButtons(); this->RaiseButtons();
ResetObjectToPlace(); ResetObjectToPlace();
@@ -2536,7 +2537,7 @@ public:
virtual void OnPlaceObjectAbort() override virtual void OnPlaceObjectAbort() override
{ {
this->RaiseButtons(); this->RaiseButtons();
this->current_placement_widget = -1; this->ResetObjectToPlaceAction();
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
@@ -2839,6 +2840,16 @@ private:
return false; return false;
} }
void UpdateCopySelPlane()
{
int widget = this->current_placement_widget;
if (widget == TR_WIDGET_COPY || widget == TR_WIDGET_COPY_APPEND || widget == TR_WIDGET_COPY_APPEND) return;
NWidgetStacked *copy_sel = this->GetWidget<NWidgetStacked>(TR_WIDGET_SEL_COPY);
copy_sel->SetDisplayedPlane(_ctrl_pressed ? DPC_APPEND : this->base_copy_plane);
this->SetDirty();
}
/** /**
* Update button states, text values, etc. * Update button states, text values, etc.
*/ */
@@ -2866,7 +2877,6 @@ private:
NWidgetStacked *middle_sel = this->GetWidget<NWidgetStacked>(TR_WIDGET_SEL_TOP_MIDDLE); NWidgetStacked *middle_sel = this->GetWidget<NWidgetStacked>(TR_WIDGET_SEL_TOP_MIDDLE);
NWidgetStacked *right_sel = this->GetWidget<NWidgetStacked>(TR_WIDGET_SEL_TOP_RIGHT); NWidgetStacked *right_sel = this->GetWidget<NWidgetStacked>(TR_WIDGET_SEL_TOP_RIGHT);
NWidgetStacked *share_sel = this->GetWidget<NWidgetStacked>(TR_WIDGET_SEL_SHARE); NWidgetStacked *share_sel = this->GetWidget<NWidgetStacked>(TR_WIDGET_SEL_SHARE);
NWidgetStacked *copy_sel = this->GetWidget<NWidgetStacked>(TR_WIDGET_SEL_COPY);
this->DisableWidget(TR_WIDGET_TYPE_COND); this->DisableWidget(TR_WIDGET_TYPE_COND);
this->DisableWidget(TR_WIDGET_TYPE_NONCOND); this->DisableWidget(TR_WIDGET_TYPE_NONCOND);
@@ -2929,9 +2939,9 @@ private:
return; return;
} }
int copy_panel = DPC_DUPLICATE; this->base_copy_plane = DPC_DUPLICATE;
if (prog && prog->refcount > 1) { if (prog != nullptr && prog->refcount > 1) {
// program is shared, show and enable unshare button, and reset button // program is shared, show and enable unshare button, and reset button
share_sel->SetDisplayedPlane(DPS_UNSHARE); share_sel->SetDisplayedPlane(DPS_UNSHARE);
this->EnableWidget(TR_WIDGET_UNSHARE); this->EnableWidget(TR_WIDGET_UNSHARE);
@@ -2943,11 +2953,11 @@ private:
// program is empty and not shared, show copy and share buttons // program is empty and not shared, show copy and share buttons
this->EnableWidget(TR_WIDGET_COPY); this->EnableWidget(TR_WIDGET_COPY);
this->EnableWidget(TR_WIDGET_SHARE); this->EnableWidget(TR_WIDGET_SHARE);
copy_panel = DPC_COPY; this->base_copy_plane = DPC_COPY;
} }
this->GetWidget<NWidgetCore>(TR_WIDGET_COPY_APPEND)->tool_tip = (copy_panel == DPC_DUPLICATE) ? STR_TRACE_RESTRICT_DUPLICATE_TOOLTIP : STR_TRACE_RESTRICT_COPY_TOOLTIP; this->GetWidget<NWidgetCore>(TR_WIDGET_COPY_APPEND)->tool_tip = (this->base_copy_plane == DPC_DUPLICATE) ? STR_TRACE_RESTRICT_DUPLICATE_TOOLTIP : STR_TRACE_RESTRICT_COPY_TOOLTIP;
copy_sel->SetDisplayedPlane(_ctrl_pressed ? DPC_APPEND : copy_panel); UpdateCopySelPlane();
// haven't selected instruction // haven't selected instruction
if (this->selected_instruction < 1) { if (this->selected_instruction < 1) {
@@ -3360,6 +3370,13 @@ private:
ResetObjectToPlace(); ResetObjectToPlace();
this->current_placement_widget = -1; this->current_placement_widget = -1;
} }
this->UpdateCopySelPlane();
}
void ResetObjectToPlaceAction()
{
this->current_placement_widget = -1;
this->UpdateCopySelPlane();
} }
/** /**