dynamic list

This commit is contained in:
SoftFever 2024-07-07 00:11:37 +08:00
parent c2320e03a5
commit 8ff7b0fac2
3 changed files with 72 additions and 11 deletions

View file

@ -545,7 +545,7 @@ std::vector<int> get_min_flush_volumes(const DynamicPrintConfig& full_config)
// Sidebar / public
static struct DynamicFilamentList : DynamicList
struct DynamicFilamentList : DynamicList
{
std::vector<std::pair<wxString, wxBitmap *>> items;
@ -590,13 +590,69 @@ static struct DynamicFilamentList : DynamicList
}
DynamicList::update();
}
} dynamic_filament_list;
};
struct DynamicFilamentList1Based : DynamicFilamentList
{
void apply_on(Choice *c) override
{
if (items.empty())
update(true);
auto cb = dynamic_cast<ComboBox *>(c->window);
auto n = cb->GetSelection();
cb->Clear();
for (auto i : items) {
cb->Append(i.first, *i.second);
}
if (n < cb->GetCount())
cb->SetSelection(n);
}
wxString get_value(int index) override
{
wxString str;
str << index+1;
return str;
}
int index_of(wxString value) override
{
long n = 0;
if(!value.ToLong(&n))
return -1;
--n;
return (n >= 0 && n <= items.size()) ? int(n) : -1;
}
void update(bool force = false)
{
items.clear();
if (!force && m_choices.empty())
return;
auto icons = get_extruder_color_icons(true);
auto presets = wxGetApp().preset_bundle->filament_presets;
for (int i = 0; i < presets.size(); ++i) {
wxString str;
std::string type;
wxGetApp().preset_bundle->filaments.find_preset(presets[i])->get_filament_type(type);
str << type;
items.push_back({str, icons[i]});
}
DynamicList::update();
}
};
static DynamicFilamentList dynamic_filament_list;
static DynamicFilamentList1Based dynamic_filament_list_1_based;
Sidebar::Sidebar(Plater *parent)
: wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(42 * wxGetApp().em_unit(), -1)), p(new priv(parent))
{
Choice::register_dynamic_list("support_filament", &dynamic_filament_list);
Choice::register_dynamic_list("support_interface_filament", &dynamic_filament_list);
Choice::register_dynamic_list("wall_filament", &dynamic_filament_list_1_based);
Choice::register_dynamic_list("sparse_infill_filament", &dynamic_filament_list_1_based);
Choice::register_dynamic_list("solid_infill_filament", &dynamic_filament_list_1_based);
Choice::register_dynamic_list("wipe_tower_filament", &dynamic_filament_list);
p->scrolled = new wxPanel(this);
// p->scrolled->SetScrollbars(0, 100, 1, 2); // ys_DELETE_after_testing. pixelsPerUnitY = 100