From d81978f1f357e27794c9127100d8a2c1b6abf16a Mon Sep 17 00:00:00 2001 From: Braden Ganetsky Date: Fri, 26 Sep 2025 18:29:38 -0500 Subject: [PATCH] Fix part multi-select bug, where the quantities would be zeroed out --- src/pstack/gui/controls.hpp | 1 + src/pstack/gui/main_window.cpp | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/pstack/gui/controls.hpp b/src/pstack/gui/controls.hpp index d04afb3..3602fb1 100644 --- a/src/pstack/gui/controls.hpp +++ b/src/pstack/gui/controls.hpp @@ -45,6 +45,7 @@ struct controls { wxStaticText* min_hole_text; wxStaticText* minimize_text; wxSpinCtrl* quantity_spinner; + std::optional quantity_spinner_last_value{ 1 }; wxSpinCtrl* min_hole_spinner; wxCheckBox* minimize_checkbox; wxStaticText* rotation_text; diff --git a/src/pstack/gui/main_window.cpp b/src/pstack/gui/main_window.cpp index e18ad3a..f821f87 100644 --- a/src/pstack/gui/main_window.cpp +++ b/src/pstack/gui/main_window.cpp @@ -86,8 +86,10 @@ void main_window::on_select_parts(const std::vector& indices) { } if (quantity.has_value()) { _controls.quantity_spinner->SetValue(*quantity); + _controls.quantity_spinner_last_value.emplace(*quantity); } else { _controls.quantity_spinner->SetValue(""); + _controls.quantity_spinner_last_value.reset(); } if (min_hole.has_value()) { _controls.min_hole_spinner->SetValue(*min_hole); @@ -425,9 +427,13 @@ void main_window::bind_all_controls() { _controls.sinterbox_result_button->Bind(wxEVT_BUTTON, &main_window::on_sinterbox_result, this); _controls.quantity_spinner->Bind(wxEVT_SPINCTRL, [this](wxSpinEvent& event) { - for (auto& current_part : _current_parts) { - current_part.part->quantity = event.GetPosition(); - _parts_list.reload_quantity(current_part.index); + if (not _controls.quantity_spinner_last_value.has_value() and event.GetPosition() == 0) { + _controls.quantity_spinner->SetValue(""); + } else { + for (auto& current_part : _current_parts) { + current_part.part->quantity = event.GetPosition(); + _parts_list.reload_quantity(current_part.index); + } } event.Skip(); });