Collapse toolbar moved from GLCanvas3D to Plater::priv

This commit is contained in:
enricoturri1966 2020-06-05 12:33:09 +02:00
parent 1e3290fee1
commit 4f63095d9a
6 changed files with 96 additions and 79 deletions

View file

@ -1534,9 +1534,8 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas)
, m_retina_helper(nullptr) , m_retina_helper(nullptr)
#endif #endif
, m_in_render(false) , m_in_render(false)
, m_main_toolbar(GLToolbar::Normal, "Top") , m_main_toolbar(GLToolbar::Normal, "Main")
, m_undoredo_toolbar(GLToolbar::Normal, "Top") , m_undoredo_toolbar(GLToolbar::Normal, "Undo_Redo")
, m_collapse_toolbar(GLToolbar::Normal, "Top")
, m_gizmos(*this) , m_gizmos(*this)
, m_use_clipping_planes(false) , m_use_clipping_planes(false)
, m_sidebar_field("") , m_sidebar_field("")
@ -1914,11 +1913,6 @@ void GLCanvas3D::enable_undoredo_toolbar(bool enable)
m_undoredo_toolbar.set_enabled(enable); m_undoredo_toolbar.set_enabled(enable);
} }
void GLCanvas3D::enable_collapse_toolbar(bool enable)
{
m_collapse_toolbar.set_enabled(enable);
}
void GLCanvas3D::enable_dynamic_background(bool enable) void GLCanvas3D::enable_dynamic_background(bool enable)
{ {
m_dynamic_background_enabled = enable; m_dynamic_background_enabled = enable;
@ -2112,7 +2106,7 @@ void GLCanvas3D::render()
tooltip = m_undoredo_toolbar.get_tooltip(); tooltip = m_undoredo_toolbar.get_tooltip();
if (tooltip.empty()) if (tooltip.empty())
tooltip = m_collapse_toolbar.get_tooltip(); tooltip = wxGetApp().plater()->get_collapse_toolbar().get_tooltip();
if (tooltip.empty()) if (tooltip.empty())
tooltip = wxGetApp().plater()->get_view_toolbar().get_tooltip(); tooltip = wxGetApp().plater()->get_view_toolbar().get_tooltip();
@ -2854,8 +2848,8 @@ void GLCanvas3D::on_idle(wxIdleEvent& evt)
m_dirty |= m_main_toolbar.update_items_state(); m_dirty |= m_main_toolbar.update_items_state();
m_dirty |= m_undoredo_toolbar.update_items_state(); m_dirty |= m_undoredo_toolbar.update_items_state();
m_dirty |= m_collapse_toolbar.update_items_state();
m_dirty |= wxGetApp().plater()->get_view_toolbar().update_items_state(); m_dirty |= wxGetApp().plater()->get_view_toolbar().update_items_state();
m_dirty |= wxGetApp().plater()->get_collapse_toolbar().update_items_state();
bool mouse3d_controller_applied = wxGetApp().plater()->get_mouse3d_controller().apply(wxGetApp().plater()->get_camera()); bool mouse3d_controller_applied = wxGetApp().plater()->get_mouse3d_controller().apply(wxGetApp().plater()->get_camera());
m_dirty |= mouse3d_controller_applied; m_dirty |= mouse3d_controller_applied;
@ -3473,7 +3467,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
return; return;
} }
if (m_collapse_toolbar.on_mouse(evt, *this)) if (wxGetApp().plater()->get_collapse_toolbar().on_mouse(evt, *this))
{ {
if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp())
mouse_up_cleanup(); mouse_up_cleanup();
@ -4187,7 +4181,7 @@ void GLCanvas3D::update_ui_from_settings()
#endif // ENABLE_RETINA_GL #endif // ENABLE_RETINA_GL
bool enable_collapse = wxGetApp().app_config->get("show_collapse_button") == "1"; bool enable_collapse = wxGetApp().app_config->get("show_collapse_button") == "1";
enable_collapse_toolbar(enable_collapse); wxGetApp().plater()->get_collapse_toolbar().set_enabled(enable_collapse);
} }
@ -5055,51 +5049,7 @@ bool GLCanvas3D::_init_view_toolbar()
bool GLCanvas3D::_init_collapse_toolbar() bool GLCanvas3D::_init_collapse_toolbar()
{ {
if (!m_collapse_toolbar.is_enabled() && m_collapse_toolbar.get_items_count() > 0) return wxGetApp().plater()->init_collapse_toolbar();
return true;
BackgroundTexture::Metadata background_data;
background_data.filename = "toolbar_background.png";
background_data.left = 16;
background_data.top = 16;
background_data.right = 16;
background_data.bottom = 16;
if (!m_collapse_toolbar.init(background_data))
{
// unable to init the toolbar texture, disable it
m_collapse_toolbar.set_enabled(false);
return true;
}
m_collapse_toolbar.set_layout_type(GLToolbar::Layout::Vertical);
m_collapse_toolbar.set_horizontal_orientation(GLToolbar::Layout::HO_Right);
m_collapse_toolbar.set_vertical_orientation(GLToolbar::Layout::VO_Top);
m_collapse_toolbar.set_border(5.0f);
m_collapse_toolbar.set_separator_size(5);
m_collapse_toolbar.set_gap_size(2);
GLToolbarItem::Data item;
item.name = "collapse_sidebar";
item.icon_filename = "collapse.svg";
item.tooltip = wxGetApp().plater()->is_sidebar_collapsed() ? _utf8(L("Expand right panel")) : _utf8(L("Collapse right panel"));
item.sprite_id = 0;
item.left.action_callback = [this, item]() {
std::string new_tooltip = wxGetApp().plater()->is_sidebar_collapsed() ?
_utf8(L("Collapse right panel")) : _utf8(L("Expand right panel"));
int id = m_collapse_toolbar.get_item_id("collapse_sidebar");
m_collapse_toolbar.set_tooltip(id, new_tooltip);
set_tooltip("");
wxGetApp().plater()->collapse_sidebar(!wxGetApp().plater()->is_sidebar_collapsed());
};
if (!m_collapse_toolbar.add_item(item))
return false;
return true;
} }
bool GLCanvas3D::_set_current() bool GLCanvas3D::_set_current()
@ -5427,20 +5377,21 @@ void GLCanvas3D::_check_and_update_toolbar_icon_scale() const
float size = GLToolbar::Default_Icons_Size * scale; float size = GLToolbar::Default_Icons_Size * scale;
// Set current size for all top toolbars. It will be used for next calculations // Set current size for all top toolbars. It will be used for next calculations
GLToolbar& collapse_toolbar = wxGetApp().plater()->get_collapse_toolbar();
#if ENABLE_RETINA_GL #if ENABLE_RETINA_GL
const float sc = m_retina_helper->get_scale_factor() * scale; const float sc = m_retina_helper->get_scale_factor() * scale;
m_main_toolbar.set_scale(sc); m_main_toolbar.set_scale(sc);
m_undoredo_toolbar.set_scale(sc); m_undoredo_toolbar.set_scale(sc);
m_collapse_toolbar.set_scale(sc); collapse_toolbar.set_scale(sc);
size *= m_retina_helper->get_scale_factor(); size *= m_retina_helper->get_scale_factor();
#else #else
m_main_toolbar.set_icons_size(size); m_main_toolbar.set_icons_size(size);
m_undoredo_toolbar.set_icons_size(size); m_undoredo_toolbar.set_icons_size(size);
m_collapse_toolbar.set_icons_size(size); collapse_toolbar.set_icons_size(size);
#endif // ENABLE_RETINA_GL #endif // ENABLE_RETINA_GL
float top_tb_width = m_main_toolbar.get_width() + m_undoredo_toolbar.get_width() + m_collapse_toolbar.get_width(); float top_tb_width = m_main_toolbar.get_width() + m_undoredo_toolbar.get_width() + collapse_toolbar.get_width();
int items_cnt = m_main_toolbar.get_visible_items_cnt() + m_undoredo_toolbar.get_visible_items_cnt() + m_collapse_toolbar.get_visible_items_cnt(); int items_cnt = m_main_toolbar.get_visible_items_cnt() + m_undoredo_toolbar.get_visible_items_cnt() + collapse_toolbar.get_visible_items_cnt();
float noitems_width = top_tb_width - size * items_cnt; // width of separators and borders in top toolbars float noitems_width = top_tb_width - size * items_cnt; // width of separators and borders in top toolbars
// calculate scale needed for items in all top toolbars // calculate scale needed for items in all top toolbars
@ -5460,7 +5411,6 @@ void GLCanvas3D::_check_and_update_toolbar_icon_scale() const
wxGetApp().set_auto_toolbar_icon_scale(new_scale); wxGetApp().set_auto_toolbar_icon_scale(new_scale);
} }
void GLCanvas3D::_render_overlays() const void GLCanvas3D::_render_overlays() const
{ {
glsafe(::glDisable(GL_DEPTH_TEST)); glsafe(::glDisable(GL_DEPTH_TEST));
@ -5485,12 +5435,12 @@ void GLCanvas3D::_render_overlays() const
const float scale = m_retina_helper->get_scale_factor() * wxGetApp().toolbar_icon_scale(/*true*/); const float scale = m_retina_helper->get_scale_factor() * wxGetApp().toolbar_icon_scale(/*true*/);
m_main_toolbar.set_scale(scale); m_main_toolbar.set_scale(scale);
m_undoredo_toolbar.set_scale(scale); m_undoredo_toolbar.set_scale(scale);
m_collapse_toolbar.set_scale(scale); wxGetApp().plater()->get_collapse_toolbar().set_scale(scale);
#else #else
const float size = int(GLToolbar::Default_Icons_Size * wxGetApp().toolbar_icon_scale(/*true*/)); const float size = int(GLToolbar::Default_Icons_Size * wxGetApp().toolbar_icon_scale(/*true*/));
m_main_toolbar.set_icons_size(size); m_main_toolbar.set_icons_size(size);
m_undoredo_toolbar.set_icons_size(size); m_undoredo_toolbar.set_icons_size(size);
m_collapse_toolbar.set_icons_size(size); wxGetApp().plater()->get_collapse_toolbar().set_icons_size(size);
#endif // ENABLE_RETINA_GL #endif // ENABLE_RETINA_GL
_render_main_toolbar(); _render_main_toolbar();
@ -5594,7 +5544,8 @@ void GLCanvas3D::_render_main_toolbar() const
float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom();
float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; float top = 0.5f * (float)cnv_size.get_height() * inv_zoom;
float collapse_toolbar_width = m_collapse_toolbar.is_enabled() ? m_collapse_toolbar.get_width() : 0.0f; const GLToolbar& collapse_toolbar = wxGetApp().plater()->get_collapse_toolbar();
float collapse_toolbar_width = collapse_toolbar.is_enabled() ? collapse_toolbar.get_width() : 0.0f;
float left = -0.5f * (m_main_toolbar.get_width() + m_undoredo_toolbar.get_width() + collapse_toolbar_width) * inv_zoom; float left = -0.5f * (m_main_toolbar.get_width() + m_undoredo_toolbar.get_width() + collapse_toolbar_width) * inv_zoom;
m_main_toolbar.set_position(top, left); m_main_toolbar.set_position(top, left);
@ -5610,7 +5561,8 @@ void GLCanvas3D::_render_undoredo_toolbar() const
float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom();
float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; float top = 0.5f * (float)cnv_size.get_height() * inv_zoom;
float collapse_toolbar_width = m_collapse_toolbar.is_enabled() ? m_collapse_toolbar.get_width() : 0.0f; const GLToolbar& collapse_toolbar = wxGetApp().plater()->get_collapse_toolbar();
float collapse_toolbar_width = collapse_toolbar.is_enabled() ? collapse_toolbar.get_width() : 0.0f;
float left = (m_main_toolbar.get_width() - 0.5f * (m_main_toolbar.get_width() + m_undoredo_toolbar.get_width() + collapse_toolbar_width)) * inv_zoom; float left = (m_main_toolbar.get_width() - 0.5f * (m_main_toolbar.get_width() + m_undoredo_toolbar.get_width() + collapse_toolbar_width)) * inv_zoom;
m_undoredo_toolbar.set_position(top, left); m_undoredo_toolbar.set_position(top, left);
m_undoredo_toolbar.render(*this); m_undoredo_toolbar.render(*this);
@ -5618,8 +5570,7 @@ void GLCanvas3D::_render_undoredo_toolbar() const
void GLCanvas3D::_render_collapse_toolbar() const void GLCanvas3D::_render_collapse_toolbar() const
{ {
if (!m_collapse_toolbar.is_enabled()) GLToolbar& collapse_toolbar = wxGetApp().plater()->get_collapse_toolbar();
return;
Size cnv_size = get_canvas_size(); Size cnv_size = get_canvas_size();
float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom();
@ -5627,10 +5578,10 @@ void GLCanvas3D::_render_collapse_toolbar() const
float band = m_layers_editing.is_enabled() ? (wxGetApp().imgui()->get_style_scaling() * LayersEditing::THICKNESS_BAR_WIDTH) : 0.0; float band = m_layers_editing.is_enabled() ? (wxGetApp().imgui()->get_style_scaling() * LayersEditing::THICKNESS_BAR_WIDTH) : 0.0;
float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; float top = 0.5f * (float)cnv_size.get_height() * inv_zoom;
float left = (0.5f * (float)cnv_size.get_width() - (float)m_collapse_toolbar.get_width() - band) * inv_zoom; float left = (0.5f * (float)cnv_size.get_width() - (float)collapse_toolbar.get_width() - band) * inv_zoom;
m_collapse_toolbar.set_position(top, left); collapse_toolbar.set_position(top, left);
m_collapse_toolbar.render(*this); collapse_toolbar.render(*this);
} }
void GLCanvas3D::_render_view_toolbar() const void GLCanvas3D::_render_view_toolbar() const
@ -7164,9 +7115,10 @@ bool GLCanvas3D::_activate_search_toolbar_item()
bool GLCanvas3D::_deactivate_collapse_toolbar_items() bool GLCanvas3D::_deactivate_collapse_toolbar_items()
{ {
if (m_collapse_toolbar.is_item_pressed("print")) GLToolbar& collapse_toolbar = wxGetApp().plater()->get_collapse_toolbar();
if (collapse_toolbar.is_item_pressed("print"))
{ {
m_collapse_toolbar.force_left_action(m_collapse_toolbar.get_item_id("print"), *this); collapse_toolbar.force_left_action(collapse_toolbar.get_item_id("print"), *this);
return true; return true;
} }

View file

@ -452,7 +452,6 @@ private:
mutable GLGizmosManager m_gizmos; mutable GLGizmosManager m_gizmos;
mutable GLToolbar m_main_toolbar; mutable GLToolbar m_main_toolbar;
mutable GLToolbar m_undoredo_toolbar; mutable GLToolbar m_undoredo_toolbar;
mutable GLToolbar m_collapse_toolbar;
ClippingPlane m_clipping_planes[2]; ClippingPlane m_clipping_planes[2];
mutable ClippingPlane m_camera_clipping_plane; mutable ClippingPlane m_camera_clipping_plane;
bool m_use_clipping_planes; bool m_use_clipping_planes;
@ -588,7 +587,6 @@ public:
void enable_selection(bool enable); void enable_selection(bool enable);
void enable_main_toolbar(bool enable); void enable_main_toolbar(bool enable);
void enable_undoredo_toolbar(bool enable); void enable_undoredo_toolbar(bool enable);
void enable_collapse_toolbar(bool enable);
void enable_dynamic_background(bool enable); void enable_dynamic_background(bool enable);
void enable_labels(bool enable) { m_labels.enable(enable); } void enable_labels(bool enable) { m_labels.enable(enable); }
#if ENABLE_SLOPE_RENDERING #if ENABLE_SLOPE_RENDERING

View file

@ -1238,7 +1238,7 @@ bool GLToolbar::generate_icons_texture() const
} }
std::vector<std::pair<int, bool>> states; std::vector<std::pair<int, bool>> states;
if (m_name == "Top") if (m_type == Normal)
{ {
states.push_back({ 1, false }); // Normal states.push_back({ 1, false }); // Normal
states.push_back({ 0, false }); // Pressed states.push_back({ 0, false }); // Pressed
@ -1247,7 +1247,7 @@ bool GLToolbar::generate_icons_texture() const
states.push_back({ 0, false }); // HoverPressed states.push_back({ 0, false }); // HoverPressed
states.push_back({ 2, false }); // HoverDisabled states.push_back({ 2, false }); // HoverDisabled
} }
else if (m_name == "View") else
{ {
states.push_back({ 1, false }); // Normal states.push_back({ 1, false }); // Normal
states.push_back({ 1, true }); // Pressed states.push_back({ 1, true }); // Pressed

View file

@ -68,7 +68,6 @@ bool View3D::init(wxWindow* parent, Model* model, DynamicPrintConfig* config, Ba
m_canvas->enable_selection(true); m_canvas->enable_selection(true);
m_canvas->enable_main_toolbar(true); m_canvas->enable_main_toolbar(true);
m_canvas->enable_undoredo_toolbar(true); m_canvas->enable_undoredo_toolbar(true);
m_canvas->enable_collapse_toolbar(true);
m_canvas->enable_labels(true); m_canvas->enable_labels(true);
#if ENABLE_SLOPE_RENDERING #if ENABLE_SLOPE_RENDERING
m_canvas->enable_slope(true); m_canvas->enable_slope(true);
@ -222,7 +221,6 @@ bool Preview::init(wxWindow* parent, Model* model)
m_canvas->set_process(m_process); m_canvas->set_process(m_process);
m_canvas->enable_legend_texture(true); m_canvas->enable_legend_texture(true);
m_canvas->enable_dynamic_background(true); m_canvas->enable_dynamic_background(true);
m_canvas->enable_collapse_toolbar(true);
m_double_slider_sizer = new wxBoxSizer(wxHORIZONTAL); m_double_slider_sizer = new wxBoxSizer(wxHORIZONTAL);
create_double_slider(); create_double_slider();

View file

@ -1589,6 +1589,7 @@ struct Plater::priv
Mouse3DController mouse3d_controller; Mouse3DController mouse3d_controller;
View3D* view3D; View3D* view3D;
GLToolbar view_toolbar; GLToolbar view_toolbar;
GLToolbar collapse_toolbar;
Preview *preview; Preview *preview;
BackgroundSlicingProcess background_process; BackgroundSlicingProcess background_process;
@ -1683,6 +1684,7 @@ struct Plater::priv
void reset_canvas_volumes(); void reset_canvas_volumes();
bool init_view_toolbar(); bool init_view_toolbar();
bool init_collapse_toolbar();
void reset_all_gizmos(); void reset_all_gizmos();
void update_ui_from_settings(); void update_ui_from_settings();
@ -1878,6 +1880,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
, m_ui_jobs(this) , m_ui_jobs(this)
, delayed_scene_refresh(false) , delayed_scene_refresh(false)
, view_toolbar(GLToolbar::Radio, "View") , view_toolbar(GLToolbar::Radio, "View")
, collapse_toolbar(GLToolbar::Normal, "Collapse")
, m_project_filename(wxEmptyString) , m_project_filename(wxEmptyString)
{ {
this->q->SetFont(Slic3r::GUI::wxGetApp().normal_font()); this->q->SetFont(Slic3r::GUI::wxGetApp().normal_font());
@ -3922,6 +3925,53 @@ bool Plater::priv::init_view_toolbar()
return true; return true;
} }
bool Plater::priv::init_collapse_toolbar()
{
if (collapse_toolbar.get_items_count() > 0)
// already initialized
return true;
BackgroundTexture::Metadata background_data;
background_data.filename = "toolbar_background.png";
background_data.left = 16;
background_data.top = 16;
background_data.right = 16;
background_data.bottom = 16;
if (!collapse_toolbar.init(background_data))
return false;
collapse_toolbar.set_layout_type(GLToolbar::Layout::Vertical);
collapse_toolbar.set_horizontal_orientation(GLToolbar::Layout::HO_Right);
collapse_toolbar.set_vertical_orientation(GLToolbar::Layout::VO_Top);
collapse_toolbar.set_border(5.0f);
collapse_toolbar.set_separator_size(5);
collapse_toolbar.set_gap_size(2);
GLToolbarItem::Data item;
item.name = "collapse_sidebar";
item.icon_filename = "collapse.svg";
item.tooltip = wxGetApp().plater()->is_sidebar_collapsed() ? _utf8(L("Expand right panel")) : _utf8(L("Collapse right panel"));
item.sprite_id = 0;
item.left.action_callback = [this, item]() {
std::string new_tooltip = wxGetApp().plater()->is_sidebar_collapsed() ?
_utf8(L("Collapse right panel")) : _utf8(L("Expand right panel"));
int id = collapse_toolbar.get_item_id("collapse_sidebar");
collapse_toolbar.set_tooltip(id, new_tooltip);
wxGetApp().plater()->collapse_sidebar(!wxGetApp().plater()->is_sidebar_collapsed());
};
if (!collapse_toolbar.add_item(item))
return false;
collapse_toolbar.set_enabled(true);
return true;
}
bool Plater::priv::can_set_instance_to_object() const bool Plater::priv::can_set_instance_to_object() const
{ {
const int obj_idx = get_selected_object_idx(); const int obj_idx = get_selected_object_idx();
@ -5531,6 +5581,11 @@ bool Plater::init_view_toolbar()
return p->init_view_toolbar(); return p->init_view_toolbar();
} }
bool Plater::init_collapse_toolbar()
{
return p->init_collapse_toolbar();
}
const Camera& Plater::get_camera() const const Camera& Plater::get_camera() const
{ {
return p->camera; return p->camera;
@ -5574,6 +5629,16 @@ GLToolbar& Plater::get_view_toolbar()
return p->view_toolbar; return p->view_toolbar;
} }
const GLToolbar& Plater::get_collapse_toolbar() const
{
return p->collapse_toolbar;
}
GLToolbar& Plater::get_collapse_toolbar()
{
return p->collapse_toolbar;
}
const Mouse3DController& Plater::get_mouse3d_controller() const const Mouse3DController& Plater::get_mouse3d_controller() const
{ {
return p->mouse3d_controller; return p->mouse3d_controller;

View file

@ -315,6 +315,7 @@ public:
void sys_color_changed(); void sys_color_changed();
bool init_view_toolbar(); bool init_view_toolbar();
bool init_collapse_toolbar();
const Camera& get_camera() const; const Camera& get_camera() const;
Camera& get_camera(); Camera& get_camera();
@ -330,6 +331,9 @@ public:
const GLToolbar& get_view_toolbar() const; const GLToolbar& get_view_toolbar() const;
GLToolbar& get_view_toolbar(); GLToolbar& get_view_toolbar();
const GLToolbar& get_collapse_toolbar() const;
GLToolbar& get_collapse_toolbar();
const Mouse3DController& get_mouse3d_controller() const; const Mouse3DController& get_mouse3d_controller() const;
Mouse3DController& get_mouse3d_controller(); Mouse3DController& get_mouse3d_controller();