Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuSanka <yusanka@gmail.com>2020-01-23 17:07:31 +0300
committerYuSanka <yusanka@gmail.com>2020-01-23 18:11:21 +0300
commit5ff8ae955be3dfcae2387fe04386ee40ec868598 (patch)
tree495b376960bdf9dac2eac31275100ea44813ff38 /src/slic3r/GUI/wxExtensions.hpp
parent1ed313ab7983bed9a1911da153ce2e3e0b473d6f (diff)
Implemented editing for extruder of existing ToolChangeCode tick
+ Code refactoring: DoubleSlider is extracted from wxExtensions
Diffstat (limited to 'src/slic3r/GUI/wxExtensions.hpp')
-rw-r--r--src/slic3r/GUI/wxExtensions.hpp312
1 files changed, 3 insertions, 309 deletions
diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp
index 322358ffe..a6f8862ac 100644
--- a/src/slic3r/GUI/wxExtensions.hpp
+++ b/src/slic3r/GUI/wxExtensions.hpp
@@ -5,19 +5,15 @@
#include <wx/combo.h>
#include <wx/dataview.h>
#include <wx/dc.h>
-#include <wx/collpane.h>
#include <wx/wupdlock.h>
#include <wx/button.h>
#include <wx/sizer.h>
-#include <wx/slider.h>
#include <wx/menu.h>
#include <wx/wx.h>
#include <vector>
#include <set>
#include <functional>
-#include "libslic3r/Model.hpp"
-#include "libslic3r/GCodeWriter.hpp"
namespace Slic3r {
enum class ModelVolumeType : int;
@@ -49,12 +45,15 @@ wxMenuItem* append_menu_radio_item(wxMenu* menu, int id, const wxString& string,
wxMenuItem* append_menu_check_item(wxMenu* menu, int id, const wxString& string, const wxString& description,
std::function<void(wxCommandEvent& event)> cb, wxEvtHandler* event_handler);
+void enable_menu_item(wxUpdateUIEvent& evt, std::function<bool()> const cb_condition, wxMenuItem* item, wxWindow* win);
+
class wxDialog;
class wxBitmapComboBox;
void edit_tooltip(wxString& tooltip);
void msw_buttons_rescale(wxDialog* dlg, const int em_unit, const std::vector<int>& btn_ids);
int em_unit(wxWindow* win);
+float get_svg_scale_factor(wxWindow* win);
wxBitmap create_scaled_bitmap(wxWindow *win, const std::string& bmp_name,
const int px_cnt = 16, const bool is_horizontal = false, const bool grayscale = false);
@@ -743,311 +742,6 @@ private:
// ----------------------------------------------------------------------------
-// DoubleSlider
-// ----------------------------------------------------------------------------
-
-// custom message the slider sends to its parent to notify a tick-change:
-wxDECLARE_EVENT(wxCUSTOMEVT_TICKSCHANGED, wxEvent);
-
-enum SelectedSlider {
- ssUndef,
- ssLower,
- ssHigher
-};
-enum TicksAction{
- taOnIcon,
- taAdd,
- taDel
-};
-
-class DoubleSlider : public wxControl
-{
- enum IconFocus {
- ifNone,
- ifRevert,
- ifCog
- };
-public:
- DoubleSlider(
- wxWindow *parent,
- wxWindowID id,
- int lowerValue,
- int higherValue,
- int minValue,
- int maxValue,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxSL_VERTICAL,
- const wxValidator& val = wxDefaultValidator,
- const wxString& name = wxEmptyString);
- ~DoubleSlider() {}
-
- using t_mode = Slic3r::CustomGCode::Mode;
-
- /* For exporting GCode in GCodeWriter is used XYZF_NUM(val) = PRECISION(val, 3) for XYZ values.
- * So, let use same value as a permissible error for layer height.
- */
- static double epsilon() { return 0.0011;}
-
- void msw_rescale();
-
- int GetMinValue() const { return m_min_value; }
- int GetMaxValue() const { return m_max_value; }
- double GetMinValueD() { return m_values.empty() ? 0. : m_values[m_min_value]; }
- double GetMaxValueD() { return m_values.empty() ? 0. : m_values[m_max_value]; }
- int GetLowerValue() const { return m_lower_value; }
- int GetHigherValue() const { return m_higher_value; }
- int GetActiveValue() const;
- wxSize get_min_size() const ;
- double GetLowerValueD() { return get_double_value(ssLower); }
- double GetHigherValueD() { return get_double_value(ssHigher); }
- wxSize DoGetBestSize() const override;
- void SetLowerValue(const int lower_val);
- void SetHigherValue(const int higher_val);
- // Set low and high slider position. If the span is non-empty, disable the "one layer" mode.
- void SetSelectionSpan(const int lower_val, const int higher_val);
- void SetMaxValue(const int max_value);
- void SetKoefForLabels(const double koef) { m_label_koef = koef; }
- void SetSliderValues(const std::vector<double>& values) { m_values = values; }
- void ChangeOneLayerLock();
- Slic3r::CustomGCode::Info GetTicksValues() const;
- void SetTicksValues(const Slic3r::CustomGCode::Info &custom_gcode_per_print_z);
- void EnableTickManipulation(bool enable = true) { m_is_enabled_tick_manipulation = enable; }
- void DisableTickManipulation() { EnableTickManipulation(false); }
-
- void SetManipulationMode(t_mode mode) { m_mode = mode; }
- t_mode GetManipulationMode() const { return m_mode; }
-
- void SetModeAndOnlyExtruder(const bool is_one_extruder_printed_model, const int only_extruder)
- {
- m_mode = !is_one_extruder_printed_model ? t_mode::MultiExtruder :
- only_extruder < 0 ? t_mode::SingleExtruder :
- t_mode::MultiAsSingle;
- m_only_extruder = only_extruder;
- }
-
- bool is_horizontal() const { return m_style == wxSL_HORIZONTAL; }
- bool is_one_layer() const { return m_is_one_layer; }
- bool is_lower_at_min() const { return m_lower_value == m_min_value; }
- bool is_higher_at_max() const { return m_higher_value == m_max_value; }
- bool is_full_span() const { return this->is_lower_at_min() && this->is_higher_at_max(); }
-
- void OnPaint(wxPaintEvent& ) { render();}
- void OnLeftDown(wxMouseEvent& event);
- void OnMotion(wxMouseEvent& event);
- void OnLeftUp(wxMouseEvent& event);
- void OnEnterWin(wxMouseEvent& event) { enter_window(event, true); }
- void OnLeaveWin(wxMouseEvent& event) { enter_window(event, false); }
- void OnWheel(wxMouseEvent& event);
- void OnKeyDown(wxKeyEvent &event);
- void OnKeyUp(wxKeyEvent &event);
- void OnChar(wxKeyEvent &event);
- void OnRightDown(wxMouseEvent& event);
- void OnRightUp(wxMouseEvent& event);
-
- void add_code_as_tick(std::string code, int selected_extruder = -1);
- // add default action for tick, when press "+"
- void add_current_tick(bool call_from_keyboard = false);
- // delete current tick, when press "-"
- void delete_current_tick();
- void edit_tick();
- void edit_extruder_sequence();
-
- struct TICK_CODE
- {
- bool operator<(const TICK_CODE& other) const { return other.tick > this->tick; }
- bool operator>(const TICK_CODE& other) const { return other.tick < this->tick; }
-
- int tick = 0;
- std::string gcode = Slic3r::ColorChangeCode;
- int extruder = 0;
- std::string color;
- };
-
-protected:
-
- void render();
- void draw_focus_rect();
- void draw_action_icon(wxDC& dc, const wxPoint pt_beg, const wxPoint pt_end);
- void draw_scroll_line(wxDC& dc, const int lower_pos, const int higher_pos);
- void draw_thumb(wxDC& dc, const wxCoord& pos_coord, const SelectedSlider& selection);
- void draw_thumbs(wxDC& dc, const wxCoord& lower_pos, const wxCoord& higher_pos);
- void draw_ticks(wxDC& dc);
- void draw_colored_band(wxDC& dc);
- void draw_one_layer_icon(wxDC& dc);
- void draw_revert_icon(wxDC& dc);
- void draw_cog_icon(wxDC &dc);
- void draw_thumb_item(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection);
- void draw_info_line_with_icon(wxDC& dc, const wxPoint& pos, SelectedSlider selection);
- void draw_thumb_text(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection) const;
-
- void update_thumb_rect(const wxCoord& begin_x, const wxCoord& begin_y, const SelectedSlider& selection);
- void detect_selected_slider(const wxPoint& pt);
- void correct_lower_value();
- void correct_higher_value();
- void move_current_thumb(const bool condition);
- void enter_window(wxMouseEvent& event, const bool enter);
-
-private:
-
- bool is_point_in_rect(const wxPoint& pt, const wxRect& rect);
- int is_point_near_tick(const wxPoint& pt);
-
- double get_scroll_step();
- wxString get_label(const SelectedSlider& selection) const;
- void get_lower_and_higher_position(int& lower_pos, int& higher_pos);
- int get_value_from_position(const wxCoord x, const wxCoord y);
- wxCoord get_position_from_value(const int value);
- wxSize get_size();
- void get_size(int *w, int *h);
- double get_double_value(const SelectedSlider& selection);
- wxString get_tooltip(IconFocus icon_focus);
-
- std::string get_color_for_tool_change_tick(std::set<TICK_CODE>::const_iterator it) const;
- std::string get_color_for_color_change_tick(std::set<TICK_CODE>::const_iterator it) const;
- int get_extruder_for_tick(int tick);
- std::set<int> get_used_extruders_for_tick(int tick);
-
- void post_ticks_changed_event(const std::string& gcode = "");
- bool check_ticks_changed_event(const std::string& gcode);
- void append_change_extruder_menu_item (wxMenu*, bool switch_current_code = false);
- void append_add_color_change_menu_item(wxMenu*, bool switch_current_code = false);
-
- bool is_osx { false };
- wxFont m_font;
- int m_min_value;
- int m_max_value;
- int m_lower_value;
- int m_higher_value;
- ScalableBitmap m_bmp_thumb_higher;
- ScalableBitmap m_bmp_thumb_lower;
- ScalableBitmap m_bmp_add_tick_on;
- ScalableBitmap m_bmp_add_tick_off;
- ScalableBitmap m_bmp_del_tick_on;
- ScalableBitmap m_bmp_del_tick_off;
- ScalableBitmap m_bmp_one_layer_lock_on;
- ScalableBitmap m_bmp_one_layer_lock_off;
- ScalableBitmap m_bmp_one_layer_unlock_on;
- ScalableBitmap m_bmp_one_layer_unlock_off;
- ScalableBitmap m_bmp_revert;
- ScalableBitmap m_bmp_cog;
- SelectedSlider m_selection;
- bool m_is_left_down = false;
- bool m_is_right_down = false;
- bool m_is_one_layer = false;
- bool m_is_focused = false;
- bool m_is_action_icon_focesed = false;
- bool m_is_one_layer_icon_focesed = false;
- bool m_is_enabled_tick_manipulation = true;
- bool m_show_context_menu = false;
- bool m_show_edit_menu = false;
- bool m_force_edit_extruder_sequence = false;
- bool m_force_mode_apply = true;
- bool m_force_add_tick = false;
- bool m_force_delete_tick = false;
- t_mode m_mode = t_mode::SingleExtruder;
- int m_only_extruder = -1;
-
- wxRect m_rect_lower_thumb;
- wxRect m_rect_higher_thumb;
- wxRect m_rect_tick_action;
- wxRect m_rect_one_layer_icon;
- wxRect m_rect_revert_icon;
- wxRect m_rect_cog_icon;
- wxSize m_thumb_size;
- int m_tick_icon_dim;
- int m_lock_icon_dim;
- int m_revert_icon_dim;
- int m_cog_icon_dim;
- long m_style;
- float m_label_koef = 1.0;
-
-// control's view variables
- wxCoord SLIDER_MARGIN; // margin around slider
-
- wxPen DARK_ORANGE_PEN;
- wxPen ORANGE_PEN;
- wxPen LIGHT_ORANGE_PEN;
-
- wxPen DARK_GREY_PEN;
- wxPen GREY_PEN;
- wxPen LIGHT_GREY_PEN;
-
- std::vector<wxPen*> m_line_pens;
- std::vector<wxPen*> m_segm_pens;
- std::vector<double> m_values;
-
- struct TICK_CODE_INFO
- {
- std::set<TICK_CODE> ticks;
- t_mode mode = t_mode::SingleExtruder;
-
- bool empty() const { return ticks.empty(); }
- void set_pause_print_msg(const std::string& message) { pause_print_msg = message; }
-
- bool add_tick (const int tick, std::string &code, int extruder, double print_z);
- bool edit_tick (std::set<TICK_CODE>::iterator it, double print_z);
- void switch_code(const std::string& code_from, const std::string& code_to);
- bool switch_code_for_tick (std::set<TICK_CODE>::iterator it, const std::string& code_to, const int extruder);
- void erase_all_ticks_with_code (const std::string& gcode);
- bool has_tick_with_code (const std::string& gcode);
-
- void suppress_plus (bool suppress) { m_suppress_plus = suppress;}
- void suppress_minus(bool suppress) { m_suppress_minus = suppress;}
- bool suppressed_plus () { return m_suppress_plus ; }
- bool suppressed_minus() { return m_suppress_minus; }
-
- private:
-
- std::string custom_gcode = "";
- std::string pause_print_msg = "";
- bool m_suppress_plus = false;
- bool m_suppress_minus = false;
-
- std::string get_color_for_tick(TICK_CODE tick, const std::string& code, const int extruder);
- }
- m_ticks;
-
-public:
- struct ExtrudersSequence
- {
- bool is_mm_intervals = true;
- double interval_by_mm = 3.0;
- int interval_by_layers = 10;
- std::vector<size_t> extruders = { 0 };
-
- bool operator==(const ExtrudersSequence& other) const
- {
- return (other.is_mm_intervals == this->is_mm_intervals ) &&
- (other.interval_by_mm == this->interval_by_mm ) &&
- (other.interval_by_layers == this->interval_by_layers ) &&
- (other.extruders == this->extruders ) ;
- }
- bool operator!=(const ExtrudersSequence& other) const
- {
- return (other.is_mm_intervals != this->is_mm_intervals ) &&
- (other.interval_by_mm != this->interval_by_mm ) &&
- (other.interval_by_layers != this->interval_by_layers ) &&
- (other.extruders != this->extruders ) ;
- }
-
- void add_extruder(size_t pos)
- {
- extruders.insert(extruders.begin() + pos+1, size_t(0));
- }
-
- void delete_extruder(size_t pos)
- {
- if (extruders.size() == 1)
- return;// last item can't be deleted
- extruders.erase(extruders.begin() + pos);
- }
- }
- m_extruders_sequence;
-};
-
-
-// ----------------------------------------------------------------------------
// LockButton
// ----------------------------------------------------------------------------