diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 80b801a4c0..14d0835b36 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -475,7 +475,9 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ update_edge_panels(); #endif wxQueueEvent(wxGetApp().plater(), new SimpleEvent(EVT_NOTICE_CHILDE_SIZE_CHANGED)); - }); + + fit_tab_labels(); // ORCA on resize + }); //BBS Bind(EVT_SELECT_TAB, [this](wxCommandEvent&evt) { @@ -1345,8 +1347,10 @@ void MainFrame::init_tabpanel() { void MainFrame::show_device(bool bBBLPrinter) { auto idx = -1; if (bBBLPrinter) { - if (m_tabpanel->FindPage(m_monitor) != wxNOT_FOUND) + if (m_tabpanel->FindPage(m_monitor) != wxNOT_FOUND) { + fit_tab_labels(); // ORCA on printer change - same button layout return; + } // Remove printer view if ((idx = m_tabpanel->FindPage(m_printer_view)) != wxNOT_FOUND) { m_printer_view->Show(false); @@ -1386,9 +1390,10 @@ void MainFrame::show_device(bool bBBLPrinter) { #endif // _MSW_DARK_MODE } else { - if (m_tabpanel->FindPage(m_printer_view) != wxNOT_FOUND) + if (m_tabpanel->FindPage(m_printer_view) != wxNOT_FOUND) { + fit_tab_labels(); // ORCA on printer change - same button layout return; - + } if ((idx = m_tabpanel->FindPage(m_calibration)) != wxNOT_FOUND) { m_calibration->Show(false); m_tabpanel->RemovePage(idx); @@ -1414,6 +1419,33 @@ void MainFrame::show_device(bool bBBLPrinter) { m_tabpanel->InsertPage(tpMonitor, m_printer_view, _L("Device"), std::string("tab_monitor_active"), std::string("tab_monitor_active")); } + fit_tab_labels(); // ORCA on printer change +} + +void MainFrame::fit_tab_labels() +{ + if (!m_tabpanel || !m_slice_option_btn) // ignore layout change while slice/print buttons not visible + return; + + auto* ctrl = m_tabpanel->GetBtnsListCtrl(); + auto* sizer = ctrl->GetBtnsSizer(); + int count = sizer->GetItemCount(); + + // Restore all + for (size_t i = 1; i < count; ++i) + ctrl->SetCompact(i, false); + m_tabpanel->Refresh(); + Layout(); + + // Compact (last to first) + for (size_t i = count - 1; i >= 1; --i) { + int right = ScreenToClient(m_slice_option_btn->ClientToScreen({})).x; + int left = sizer->GetSize().GetWidth(); + if (right - left - FromDIP(15) > 0) return; + ctrl->SetCompact(i, true); + m_tabpanel->Refresh(); + Layout(); + } } bool MainFrame::preview_only_hint() @@ -1790,7 +1822,7 @@ wxBoxSizer* MainFrame::create_side_tools() update_side_button_style(); m_slice_option_btn->Enable(); m_print_option_btn->Enable(); - sizer->Add(FromDIP(15), 0, 0, 0, 0); + //sizer->Add(FromDIP(15), 0, 0, 0, 0); sizer->Add(slice_panel); sizer->Add(FromDIP(15), 0, 0, 0, 0); sizer->Add(print_panel); @@ -1915,6 +1947,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_slice_enable = get_enable_slice_status(); m_slice_btn->Enable(m_slice_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change if(m_slice_option_pop_up) m_slice_option_pop_up->Dismiss(); }); @@ -1925,6 +1958,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_slice_enable = get_enable_slice_status(); m_slice_btn->Enable(m_slice_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change if(m_slice_option_pop_up) m_slice_option_pop_up->Dismiss(); }); @@ -1949,6 +1983,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -1961,6 +1996,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -1987,6 +2023,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -1998,6 +2035,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -2007,6 +2045,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -2018,6 +2057,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -2027,6 +2067,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -2036,6 +2077,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -2074,6 +2116,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); p->append_button(print_multi_machine_btn); @@ -2088,6 +2131,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); p->append_button(export_gcode_btn); @@ -2400,6 +2444,8 @@ void MainFrame::on_dpi_changed(const wxRect& suggested_rect) this->SetSize(sz); this->Maximize(is_maximized); + + fit_tab_labels(); // ORCA } void MainFrame::on_sys_color_changed() diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index c7f27d52af..8cb5961d5a 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -359,6 +359,7 @@ public: //SoftFever void show_device(bool bBBLPrinter); + void fit_tab_labels(); // ORCA PA_Calibration_Dlg* m_pa_calib_dlg{ nullptr }; Temp_Calibration_Dlg* m_temp_calib_dlg{ nullptr }; diff --git a/src/slic3r/GUI/Notebook.cpp b/src/slic3r/GUI/Notebook.cpp index 84bbf9950a..89f00f9447 100644 --- a/src/slic3r/GUI/Notebook.cpp +++ b/src/slic3r/GUI/Notebook.cpp @@ -202,6 +202,7 @@ bool ButtonsListCtrl::InsertPage(size_t n, const wxString &text, bool bSelect /* }); Slic3r::GUI::wxGetApp().UpdateDarkUI(btn); m_pageButtons.insert(m_pageButtons.begin() + n, btn); + m_pageLabels.insert(m_pageLabels.begin() + n, text); // ORCA m_buttons_sizer->Insert(n, new wxSizerItem(btn)); m_buttons_sizer->SetCols(m_buttons_sizer->GetCols() + 1); m_sizer->Layout(); @@ -212,6 +213,7 @@ void ButtonsListCtrl::RemovePage(size_t n) { Button* btn = m_pageButtons[n]; m_pageButtons.erase(m_pageButtons.begin() + n); + m_pageLabels.erase(m_pageLabels.begin() + n); // ORCA m_buttons_sizer->Remove(n); #if __WXOSX__ RemoveChild(btn); @@ -238,6 +240,17 @@ void ButtonsListCtrl::SetPageText(size_t n, const wxString& strText) { Button* btn = m_pageButtons[n]; btn->SetLabel(strText); + if(!strText.empty()) // ORCA + m_pageLabels[n] = strText; +} + +// ORCA +void ButtonsListCtrl::SetCompact(size_t n, bool compact) +{ + int em = em_unit(this); + Button* btn = m_pageButtons[n]; + btn->SetMinSize({(compact ? 40 : 136) * em / 10, 36 * em / 10}); + btn->SetLabel(compact ? "" : (" " + m_pageLabels[n])); } wxString ButtonsListCtrl::GetPageText(size_t n) const diff --git a/src/slic3r/GUI/Notebook.hpp b/src/slic3r/GUI/Notebook.hpp index 7e6e94da3a..10abfedb95 100644 --- a/src/slic3r/GUI/Notebook.hpp +++ b/src/slic3r/GUI/Notebook.hpp @@ -28,7 +28,9 @@ public: void RemovePage(size_t n); bool SetPageImage(size_t n, const std::string& bmp_name) const; void SetPageText(size_t n, const wxString& strText); + void SetCompact(size_t n, bool compact); // ORCA wxString GetPageText(size_t n) const; + wxFlexGridSizer* GetBtnsSizer(){return m_buttons_sizer;}; // ORCA private: wxFlexGridSizer* m_buttons_sizer; @@ -39,6 +41,7 @@ private: int m_btn_margin; int m_line_margin; //ModeSizer* m_mode_sizer {nullptr}; + std::vector m_pageLabels; // ORCA }; class Notebook: public wxBookCtrlBase