diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 445967a88..cccf4f2ed 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -311,6 +311,7 @@ IF(wxWidgets_FOUND) ${GUI_LIBDIR}/OptionsGroup/UI_Point.cpp ${GUI_LIBDIR}/OptionsGroup/UI_Point3.cpp ${GUI_LIBDIR}/OptionsGroup/UI_Color.cpp + ${GUI_LIBDIR}/OptionsGroup/UI_Slider.cpp ${LIBDIR}/slic3r/GUI/3DScene.cpp ) target_compile_features(slic3r_gui PUBLIC cxx_std_14) diff --git a/src/GUI/OptionsGroup/Field.hpp b/src/GUI/OptionsGroup/Field.hpp index 54ec12b78..e831bf40e 100644 --- a/src/GUI/OptionsGroup/Field.hpp +++ b/src/GUI/OptionsGroup/Field.hpp @@ -20,6 +20,7 @@ #include "wx/sizer.h" #include #include +#include namespace Slic3r { namespace GUI { @@ -418,6 +419,37 @@ private: wxColourPickerCtrl* _picker {nullptr}; }; +class UI_Slider : public UI_Sizer { +public: + UI_Slider(wxWindow* parent, Slic3r::ConfigOptionDef _opt); + UI_Slider(wxWindow* parent, Slic3r::ConfigOptionDef _opt, size_t scale); + + ~UI_Slider(); + + void set_value(boost::any value) override; + std::string get_string() override; + double get_double() override; + int get_int() override; + + /// Change the scale of the slider bar. Return value from get_X functions does not change. + void set_scale(size_t new_scale); + + wxSlider* slider() { return _slider;} + wxTextCtrl* textctrl() { return _textctrl;} + std::function on_change {nullptr}; +protected: + virtual std::string LogChannel() override { return "UI_Slider"s; } +private: + void _on_change(std::string opt_id) override { + if (!this->disable_change_event && this->_slider->IsEnabled() && this->on_change != nullptr) { + this->on_change(opt_id, _slider->GetValue() / _scale); + } + } + wxTextCtrl* _textctrl {nullptr}; + wxSlider* _slider {nullptr}; + size_t _scale {10}; +}; + } } // Namespace Slic3r::GUI #endif // SLIC3R_FIELD_HPP diff --git a/src/GUI/OptionsGroup/UI_Slider.cpp b/src/GUI/OptionsGroup/UI_Slider.cpp new file mode 100644 index 000000000..be53650b9 --- /dev/null +++ b/src/GUI/OptionsGroup/UI_Slider.cpp @@ -0,0 +1,30 @@ +#include "OptionsGroup/Field.hpp" +#include "misc_ui.hpp" + +namespace Slic3r { namespace GUI { + +UI_Slider::UI_Slider(wxWindow* parent, Slic3r::ConfigOptionDef _opt) : UI_Sizer(parent, _opt), _scale(10) { +} +UI_Slider::UI_Slider(wxWindow* parent, Slic3r::ConfigOptionDef _opt, size_t scale ) : UI_Sizer(parent, _opt), _scale(scale) { + +} +UI_Slider::~UI_Slider() { _slider->Destroy(); _textctrl->Destroy(); } + +void UI_Slider::set_value(boost::any value) { +} + +double UI_Slider::get_double() { + return 0.0; +} + +int UI_Slider::get_int() { + return 0; +} + +std::string UI_Slider::get_string() { + return std::string(); +} + +void UI_Slider::set_scale(size_t new_scale) { +} +} } // Namespace Slic3r::GUI