diff options
author | YuSanka <yusanka@gmail.com> | 2018-11-09 20:39:07 +0300 |
---|---|---|
committer | YuSanka <yusanka@gmail.com> | 2018-11-09 20:42:06 +0300 |
commit | 7f4a8bccd5cb93d282bdb82333fb8955e3f2a783 (patch) | |
tree | 898f312bed49f36b0f45a5c37106757171b354f0 /src/slic3r/GUI/GUI_ObjectSettings.cpp | |
parent | 5b34e54ce9febac699a92de913c5c6b1c91357e3 (diff) |
Fixed controls layout on right panel.
+ Split ObjectManipulation class to ObjectManipulation and ObjectSettings
+ fixed typo-bug in GetItemByVolumeId
Diffstat (limited to 'src/slic3r/GUI/GUI_ObjectSettings.cpp')
-rw-r--r-- | src/slic3r/GUI/GUI_ObjectSettings.cpp | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp new file mode 100644 index 000000000..50274ec99 --- /dev/null +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -0,0 +1,159 @@ +#include "GUI_ObjectSettings.hpp" +#include "GUI_ObjectList.hpp" + +#include "OptionsGroup.hpp" +#include "wxExtensions.hpp" +#include "PresetBundle.hpp" +#include "Model.hpp" + +#include <boost/algorithm/string.hpp> + +namespace Slic3r +{ +namespace GUI +{ + +OG_Settings::OG_Settings(wxWindow* parent, const bool staticbox) : + m_parent(parent) +{ + wxString title = staticbox ? " " : ""; // temporary workaround - #ys_FIXME + m_og = std::make_shared<ConfigOptionsGroup>(parent, title); +} + +bool OG_Settings::IsShown() +{ + return m_og->sizer->IsEmpty() ? false : m_og->sizer->IsShown(size_t(0)); +} + +void OG_Settings::Show(const bool show) +{ + m_og->Show(show); +} + +void OG_Settings::Hide() +{ + Show(false); +} + +void OG_Settings::UpdateAndShow(const bool show) +{ + Show(show); + m_parent->Layout(); +} + +wxSizer* OG_Settings::get_sizer() +{ + return m_og->sizer; +} + + + +ObjectSettings::ObjectSettings(wxWindow* parent) : + OG_Settings(parent, true) +{ + m_og->set_name(_(L("Additional Settings"))); + + m_settings_list_sizer = new wxBoxSizer(wxVERTICAL); + m_og->sizer->Add(m_settings_list_sizer, 1, wxEXPAND | wxLEFT, 5); +} + +void ObjectSettings::update_settings_list() +{ + m_settings_list_sizer->Clear(true); + + auto objects_ctrl = wxGetApp().obj_list(); + auto objects_model = wxGetApp().obj_list()->m_objects_model; + auto config = wxGetApp().obj_list()->m_config; + + const auto item = objects_ctrl->GetSelection(); + if (item && !objects_ctrl->multiple_selection() && + config && objects_model->IsSettingsItem(item)) + { + auto extra_column = [config, this](wxWindow* parent, const Line& line) + { + auto opt_key = (line.get_options())[0].opt_id; //we assume that we have one option per line + + auto btn = new wxBitmapButton(parent, wxID_ANY, wxBitmap(from_u8(var("colorchange_delete_on.png")), wxBITMAP_TYPE_PNG), + wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); +#ifdef __WXMSW__ + btn->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); +#endif // __WXMSW__ + btn->Bind(wxEVT_BUTTON, [opt_key, config, this](wxEvent &event) { + config->erase(opt_key); + wxTheApp->CallAfter([this]() { + update_settings_list(); + m_parent->Layout(); + }); + }); + return btn; + }; + + std::map<std::string, std::vector<std::string>> cat_options; + auto opt_keys = config->keys(); + m_og_settings.resize(0); + std::vector<std::string> categories; + if (!(opt_keys.size() == 1 && opt_keys[0] == "extruder"))// return; + { + auto extruders_cnt = wxGetApp().preset_bundle->printers.get_selected_preset().printer_technology() == ptSLA ? 1 : + wxGetApp().preset_bundle->printers.get_edited_preset().config.option<ConfigOptionFloats>("nozzle_diameter")->values.size(); + + for (auto& opt_key : opt_keys) { + auto category = config->def()->get(opt_key)->category; + if (category.empty() || + (category == "Extruders" && extruders_cnt == 1)) continue; + + std::vector< std::string > new_category; + + auto& cat_opt = cat_options.find(category) == cat_options.end() ? new_category : cat_options.at(category); + cat_opt.push_back(opt_key); + if (cat_opt.size() == 1) + cat_options[category] = cat_opt; + } + + for (auto& cat : cat_options) { + if (cat.second.size() == 1 && cat.second[0] == "extruder") + continue; + + auto optgroup = std::make_shared<ConfigOptionsGroup>(m_parent, cat.first, config, false, extra_column); + optgroup->label_width = 150; + optgroup->sidetext_width = 70; + + optgroup->m_on_change = [](const t_config_option_key& opt_id, const boost::any& value) { + wxGetApp().obj_list()->part_settings_changed(); }; + + for (auto& opt : cat.second) + { + if (opt == "extruder") + continue; + Option option = optgroup->get_option(opt); + option.opt.width = 70; + optgroup->append_single_option_line(option); + } + optgroup->reload_config(); + m_settings_list_sizer->Add(optgroup->sizer, 0, wxEXPAND | wxALL, 0); + m_og_settings.push_back(optgroup); + + categories.push_back(cat.first); + } + } + + if (m_og_settings.empty()) { + objects_ctrl->select_item(objects_model->Delete(item)); + } + else { + if (!categories.empty()) + objects_model->UpdateSettingsDigest(item, categories); + } + } +} + +void ObjectSettings::UpdateAndShow(const bool show) +{ + if (show) + update_settings_list(); + + OG_Settings::UpdateAndShow(show); +} + +} //namespace GUI +} //namespace Slic3r
\ No newline at end of file |