From c4569c93f2afc988de3c8b11fd1c9ce51af41b55 Mon Sep 17 00:00:00 2001 From: YuSanka <yusanka@gmail.com> Date: Fri, 7 Aug 2020 15:09:58 +0200 Subject: [PATCH] UnsavedChangesDialog: Fixed get_string_from_enum() in respect to the InfillPattern --- src/slic3r/GUI/UnsavedChangesDialog.cpp | 47 ++++++++++++++++--------- src/slic3r/GUI/UnsavedChangesDialog.hpp | 11 ------ 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index ab2c36ebd..3f85ac742 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -2,11 +2,9 @@ #include <cstddef> #include <string> +#include <vector> #include <boost/algorithm/string.hpp> #include <boost/optional.hpp> -#include <boost/nowide/convert.hpp> - -#include "wx/dataview.h" #include "libslic3r/PrintConfig.hpp" #include "libslic3r/PresetBundle.hpp" @@ -15,8 +13,8 @@ #include "Tab.hpp" #include "ObjectDataViewModel.hpp" -#define FTS_FUZZY_MATCH_IMPLEMENTATION -#include "fts_fuzzy_match.h" +//#define FTS_FUZZY_MATCH_IMPLEMENTATION +//#include "fts_fuzzy_match.h" #include "BitmapCache.hpp" @@ -195,8 +193,10 @@ ModelNode* UnsavedChangesModel::AddOption(ModelNode* group_node, wxString option { ModelNode* option = new ModelNode(group_node, option_name, old_value, new_value); group_node->Append(option); - ItemAdded(wxDataViewItem((void*)group_node), wxDataViewItem((void*)option)); + wxDataViewItem group_item = wxDataViewItem((void*)group_node); + ItemAdded(group_item, wxDataViewItem((void*)option)); + m_ctrl->Expand(group_item); return option; } @@ -204,9 +204,7 @@ ModelNode* UnsavedChangesModel::AddOptionWithGroup(ModelNode* category_node, wxS { ModelNode* group_node = new ModelNode(category_node, group_name); category_node->Append(group_node); - wxDataViewItem group_item = wxDataViewItem((void*)group_node); - ItemAdded(wxDataViewItem((void*)category_node), group_item); - m_ctrl->Expand(group_item); + ItemAdded(wxDataViewItem((void*)category_node), wxDataViewItem((void*)group_node)); return AddOption(group_node, option_name, old_value, new_value); } @@ -435,16 +433,19 @@ UnsavedChangesDialog::UnsavedChangesDialog(Preset::Type type) int border = 10; int em = em_unit(); - m_tree = new wxDataViewCtrl(this, wxID_ANY, wxDefaultPosition, wxSize(em * 80, em * 30), wxBORDER_SIMPLE | wxDV_VARIABLE_LINE_HEIGHT); + m_tree = new wxDataViewCtrl(this, wxID_ANY, wxDefaultPosition, wxSize(em * 80, em * 30), wxBORDER_SIMPLE | wxDV_VARIABLE_LINE_HEIGHT | wxDV_ROW_LINES); m_tree_model = new UnsavedChangesModel(this); m_tree->AssociateModel(m_tree_model); m_tree_model->SetAssociatedControl(m_tree); - m_tree->AppendToggleColumn(L"\u2714", UnsavedChangesModel::colToggle, wxDATAVIEW_CELL_ACTIVATABLE, 6 * em);//2610,11,12 //2714 - m_tree->AppendColumn(new wxDataViewColumn("", new BitmapTextRenderer(true), UnsavedChangesModel::colIconText, 30 * em, wxALIGN_TOP, wxDATAVIEW_COL_RESIZABLE)); + m_tree->AppendToggleColumn(L"\u2714", UnsavedChangesModel::colToggle, wxDATAVIEW_CELL_ACTIVATABLE/*, 6 * em*/);//2610,11,12 //2714 + wxDataViewColumn* icon_text_clmn = new wxDataViewColumn("", new BitmapTextRenderer(true), UnsavedChangesModel::colIconText, 30 * em, wxALIGN_TOP, wxDATAVIEW_COL_RESIZABLE); + m_tree->AppendColumn(icon_text_clmn); m_tree->AppendColumn(new wxDataViewColumn("Old value", new BitmapTextRenderer(true), UnsavedChangesModel::colOldValue, 20 * em, wxALIGN_TOP)); m_tree->AppendColumn(new wxDataViewColumn("New value", new BitmapTextRenderer(true), UnsavedChangesModel::colNewValue, 20 * em, wxALIGN_TOP)); + m_tree->SetExpanderColumn(icon_text_clmn); + m_tree->Bind(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, &UnsavedChangesDialog::item_value_changed, this); wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxCANCEL); @@ -498,11 +499,25 @@ void UnsavedChangesDialog::close(Action action) } template<class T> -wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConfig& config) +wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConfig& config, bool is_infill = false) { - const std::vector<std::string>& names = config.def()->options.at(opt_key).enum_labels;//ConfigOptionEnum<T>::get_enum_names(); + const ConfigOptionDef& def = config.def()->options.at(opt_key); + const std::vector<std::string>& names = def.enum_labels;//ConfigOptionEnum<T>::get_enum_names(); T val = config.option<ConfigOptionEnum<T>>(opt_key)->value; - return from_u8(_u8L(names[static_cast<int>(val)])); + + // Each infill doesn't use all list of infill declared in PrintConfig.hpp. + // So we should "convert" val to the correct one + if (is_infill) { + for (auto key_val : *def.enum_keys_map) + if ((int)key_val.second == (int)val) { + auto it = std::find(def.enum_values.begin(), def.enum_values.end(), key_val.first); + if (it == def.enum_values.end()) + return ""; + return from_u8(_utf8(names[it - def.enum_values.begin()])); + } + return _L("Undef"); + } + return from_u8(_utf8(names[static_cast<int>(val)])); } static wxString get_string_value(const std::string& opt_key, const DynamicPrintConfig& config) @@ -575,7 +590,7 @@ static wxString get_string_value(const std::string& opt_key, const DynamicPrintC if (opt_key == "top_fill_pattern" || opt_key == "bottom_fill_pattern" || opt_key == "fill_pattern") - return get_string_from_enum<InfillPattern>(opt_key, config); + return get_string_from_enum<InfillPattern>(opt_key, config, true); if (opt_key == "gcode_flavor") return get_string_from_enum<GCodeFlavor>(opt_key, config); if (opt_key == "ironing_type") diff --git a/src/slic3r/GUI/UnsavedChangesDialog.hpp b/src/slic3r/GUI/UnsavedChangesDialog.hpp index c4a02d7bc..8afd97896 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.hpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.hpp @@ -1,19 +1,8 @@ #ifndef slic3r_UnsavedChangesDialog_hpp_ #define slic3r_UnsavedChangesDialog_hpp_ -#include <vector> -#include <map> - -#include <wx/panel.h> -#include <wx/sizer.h> -#include <wx/listctrl.h> #include <wx/dataview.h> -#include <wx/combo.h> - -#include <wx/checkbox.h> -#include <wx/dialog.h> - #include "GUI_Utils.hpp" #include "wxExtensions.hpp" #include "libslic3r/Preset.hpp"