mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-14 17:12:07 +00:00
1. first formal version of macos 2. add the bambu networking plugin install logic 3. auto compute the wipe volume when filament change 4. add the logic of wiping into support 5. refine the GUI layout and icons, improve the gui apperance in lots of small places 6. serveral improve to support 7. support AMS auto-mapping 8. disable lots of unstable features: such as params table, media file download, HMS 9. fix serveral kinds of bugs 10. update the document of building 11. ...
178 lines
5.3 KiB
C++
178 lines
5.3 KiB
C++
#include "Tabbook.hpp"
|
|
|
|
//#ifdef _WIN32
|
|
|
|
#include "GUI_App.hpp"
|
|
#include "wxExtensions.hpp"
|
|
#include "TabButton.hpp"
|
|
|
|
//BBS set font size
|
|
#include "Widgets/Label.hpp"
|
|
|
|
#include <wx/button.h>
|
|
#include <wx/sizer.h>
|
|
|
|
wxDEFINE_EVENT(wxCUSTOMEVT_TABBOOK_SEL_CHANGED, wxCommandEvent);
|
|
|
|
const static wxColour TAB_BUTTON_BG = wxColour(255, 255, 255, 255);
|
|
const static wxColour TAB_BUTTON_SEL = wxColour(219, 253, 213, 255);
|
|
|
|
static const wxFont& TAB_BUTTON_FONT = Label::Body_14;
|
|
static const wxFont& TAB_BUTTON_FONT_SEL = Label::Head_14;
|
|
|
|
|
|
static const int BUTTON_DEF_HEIGHT = 46;
|
|
static const int BUTTON_DEF_WIDTH = 220;
|
|
|
|
|
|
TabButtonsListCtrl::TabButtonsListCtrl(wxWindow *parent, wxBoxSizer *side_tools) :
|
|
wxControl(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE | wxTAB_TRAVERSAL)
|
|
{
|
|
#ifdef __WINDOWS__
|
|
SetDoubleBuffered(true);
|
|
#endif //__WINDOWS__
|
|
SetBackgroundColour(TAB_BUTTON_BG);
|
|
|
|
int em = em_unit(this);
|
|
// BBS: no gap
|
|
m_btn_margin = 0;
|
|
m_line_margin = std::lround(0.1 * em);
|
|
|
|
m_arrow_img = create_scaled_bitmap("monitor_arrow", nullptr, 14);
|
|
|
|
m_sizer = new wxBoxSizer(wxVERTICAL);
|
|
this->SetSizer(m_sizer);
|
|
if (side_tools != NULL) {
|
|
for (size_t idx = 0; idx < side_tools->GetItemCount(); idx++) {
|
|
wxSizerItem *item = side_tools->GetItem(idx);
|
|
wxWindow * item_win = item->GetWindow();
|
|
if (item_win) { item_win->Reparent(this); }
|
|
}
|
|
m_sizer->Add(side_tools, 0, wxEXPAND | wxLEFT | wxTOP, m_btn_margin);
|
|
}
|
|
|
|
m_buttons_sizer = new wxFlexGridSizer(1, m_btn_margin, m_btn_margin);
|
|
m_sizer->Add(m_buttons_sizer, 0, wxLEFT | wxTOP, m_btn_margin);
|
|
m_sizer->AddStretchSpacer(1);
|
|
}
|
|
|
|
void TabButtonsListCtrl::OnPaint(wxPaintEvent &)
|
|
{
|
|
Slic3r::GUI::wxGetApp().UpdateDarkUI(this);
|
|
const wxSize sz = GetSize();
|
|
wxPaintDC dc(this);
|
|
|
|
if (m_selection < 0 || m_selection >= (int)m_pageButtons.size())
|
|
return;
|
|
|
|
const wxColour& btn_marker_color = Slic3r::GUI::wxGetApp().get_color_hovered_btn_label();
|
|
|
|
// highlight selected notebook button
|
|
|
|
for (int idx = 0; idx < int(m_pageButtons.size()); idx++) {
|
|
TabButton *btn = m_pageButtons[idx];
|
|
btn->SetBackgroundColor(idx == m_selection ? TAB_BUTTON_SEL : TAB_BUTTON_BG);
|
|
|
|
wxPoint pos = btn->GetPosition();
|
|
wxSize size = btn->GetSize();
|
|
const wxColour &clr = idx == m_selection ? btn_marker_color : TAB_BUTTON_BG;
|
|
dc.SetPen(clr);
|
|
dc.SetBrush(clr);
|
|
dc.DrawRectangle(pos.x, pos.y + size.y, size.x, sz.y - size.y);
|
|
}
|
|
dc.SetPen(btn_marker_color);
|
|
dc.SetBrush(btn_marker_color);
|
|
dc.DrawRectangle(1, sz.y - m_line_margin, sz.x, m_line_margin);
|
|
}
|
|
|
|
void TabButtonsListCtrl::Rescale()
|
|
{
|
|
m_arrow_img = create_scaled_bitmap("monitor_arrow", nullptr, 14);
|
|
|
|
int em = em_unit(this);
|
|
for (TabButton *btn : m_pageButtons) {
|
|
btn->SetMinSize({BUTTON_DEF_WIDTH * em / 10, BUTTON_DEF_HEIGHT * em / 10});
|
|
btn->SetBitmap(m_arrow_img);
|
|
btn->Rescale();
|
|
}
|
|
|
|
m_sizer->Layout();
|
|
}
|
|
|
|
void TabButtonsListCtrl::SetSelection(int sel)
|
|
{
|
|
if (m_selection == sel)
|
|
return;
|
|
if (m_selection >= 0) {
|
|
m_pageButtons[m_selection]->SetBackgroundColor(TAB_BUTTON_BG);
|
|
m_pageButtons[m_selection]->SetFont(TAB_BUTTON_FONT);
|
|
}
|
|
m_selection = sel;
|
|
m_pageButtons[m_selection]->SetBackgroundColor(TAB_BUTTON_SEL);
|
|
m_pageButtons[m_selection]->SetFont(TAB_BUTTON_FONT_SEL);
|
|
Refresh();
|
|
}
|
|
|
|
bool TabButtonsListCtrl::InsertPage(size_t n, const wxString &text, bool bSelect /* = false*/, const std::string &bmp_name /* = ""*/)
|
|
{
|
|
TabButton *btn = new TabButton(this, text, m_arrow_img, wxNO_BORDER);
|
|
btn->SetCornerRadius(0);
|
|
|
|
int em = em_unit(this);
|
|
btn->SetMinSize({BUTTON_DEF_WIDTH * em / 10, BUTTON_DEF_HEIGHT * em / 10});
|
|
|
|
btn->SetBackgroundColor(TAB_BUTTON_BG);
|
|
btn->SetTextColor(*wxBLACK);
|
|
btn->Bind(wxEVT_BUTTON, [this, btn](wxCommandEvent& event) {
|
|
if (auto it = std::find(m_pageButtons.begin(), m_pageButtons.end(), btn); it != m_pageButtons.end()) {
|
|
auto sel = it - m_pageButtons.begin();
|
|
SetSelection(sel);
|
|
wxCommandEvent evt = wxCommandEvent(wxCUSTOMEVT_TABBOOK_SEL_CHANGED);
|
|
evt.SetId(sel);
|
|
wxPostEvent(this->GetParent(), evt);
|
|
}
|
|
});
|
|
Slic3r::GUI::wxGetApp().UpdateDarkUI(btn);
|
|
m_pageButtons.insert(m_pageButtons.begin() + n, btn);
|
|
m_buttons_sizer->Insert(n, new wxSizerItem(btn));
|
|
m_buttons_sizer->SetRows(m_pageButtons.size() + 1);
|
|
m_sizer->Layout();
|
|
return true;
|
|
}
|
|
|
|
void TabButtonsListCtrl::RemovePage(size_t n)
|
|
{
|
|
if (n >= m_pageButtons.size()) return;
|
|
TabButton *btn = m_pageButtons[n];
|
|
m_pageButtons.erase(m_pageButtons.begin() + n);
|
|
m_buttons_sizer->Remove(n);
|
|
btn->Reparent(nullptr);
|
|
btn->Destroy();
|
|
m_sizer->Layout();
|
|
}
|
|
|
|
bool TabButtonsListCtrl::SetPageImage(size_t n, const std::string &bmp_name) const
|
|
{
|
|
if (n >= m_pageButtons.size())
|
|
return false;
|
|
|
|
ScalableBitmap bitmap(NULL, bmp_name);
|
|
return true;
|
|
}
|
|
|
|
void TabButtonsListCtrl::SetPageText(size_t n, const wxString &strText)
|
|
{
|
|
TabButton *btn = m_pageButtons[n];
|
|
btn->SetLabel(strText);
|
|
}
|
|
|
|
wxString TabButtonsListCtrl::GetPageText(size_t n) const
|
|
{
|
|
TabButton *btn = m_pageButtons[n];
|
|
return btn->GetLabel();
|
|
}
|
|
|
|
//#endif // _WIN32
|
|
|
|
|