mirror of
https://git.mirrors.martin98.com/https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-13 02:51:47 +08: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. ...
245 lines
7.8 KiB
C++
245 lines
7.8 KiB
C++
#include "Notebook.hpp"
|
|
|
|
//#ifdef _WIN32
|
|
|
|
#include "GUI_App.hpp"
|
|
#include "wxExtensions.hpp"
|
|
#include "Widgets/Button.hpp"
|
|
|
|
//BBS set font size
|
|
#include "Widgets/Label.hpp"
|
|
|
|
#include <wx/button.h>
|
|
#include <wx/sizer.h>
|
|
|
|
wxDEFINE_EVENT(wxCUSTOMEVT_NOTEBOOK_SEL_CHANGED, wxCommandEvent);
|
|
|
|
ButtonsListCtrl::ButtonsListCtrl(wxWindow *parent, wxBoxSizer* side_tools) :
|
|
wxControl(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE | wxTAB_TRAVERSAL)
|
|
{
|
|
#ifdef __WINDOWS__
|
|
SetDoubleBuffered(true);
|
|
#endif //__WINDOWS__
|
|
wxColour default_btn_bg("#3B4446"); // Gradient #414B4E
|
|
SetBackgroundColour(default_btn_bg);
|
|
|
|
int em = em_unit(this);// Slic3r::GUI::wxGetApp().em_unit();
|
|
// BBS: no gap
|
|
m_btn_margin = 0; // std::lround(0.3 * em);
|
|
m_line_margin = std::lround(0.1 * em);
|
|
|
|
m_sizer = new wxBoxSizer(wxHORIZONTAL);
|
|
this->SetSizer(m_sizer);
|
|
|
|
m_buttons_sizer = new wxFlexGridSizer(1, m_btn_margin, m_btn_margin);
|
|
m_sizer->Add(m_buttons_sizer, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxBOTTOM, m_btn_margin);
|
|
|
|
if (side_tools != NULL) {
|
|
m_sizer->AddStretchSpacer(1);
|
|
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, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxBOTTOM, m_btn_margin);
|
|
}
|
|
|
|
// BBS: disable custom paint
|
|
//this->Bind(wxEVT_PAINT, &ButtonsListCtrl::OnPaint, this);
|
|
}
|
|
|
|
void ButtonsListCtrl::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;
|
|
|
|
wxColour selected_btn_bg("#1F8EEA");
|
|
wxColour default_btn_bg("#3B4446"); // Gradient #414B4E
|
|
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++) {
|
|
Button* btn = m_pageButtons[idx];
|
|
|
|
btn->SetBackgroundColor(idx == m_selection ? selected_btn_bg : default_btn_bg);
|
|
|
|
wxPoint pos = btn->GetPosition();
|
|
wxSize size = btn->GetSize();
|
|
const wxColour& clr = idx == m_selection ? btn_marker_color : default_btn_bg;
|
|
dc.SetPen(clr);
|
|
dc.SetBrush(clr);
|
|
dc.DrawRectangle(pos.x, pos.y + size.y, size.x, sz.y - size.y);
|
|
}
|
|
|
|
#if 0
|
|
// highlight selected mode button
|
|
if (m_mode_sizer) {
|
|
const std::vector<ModeButton*>& mode_btns = m_mode_sizer->get_btns();
|
|
for (int idx = 0; idx < int(mode_btns.size()); idx++) {
|
|
ModeButton* btn = mode_btns[idx];
|
|
btn->SetBackgroundColor(btn->is_selected() ? selected_btn_bg : default_btn_bg);
|
|
|
|
//wxPoint pos = btn->GetPosition();
|
|
//wxSize size = btn->GetSize();
|
|
//const wxColour& clr = btn->is_selected() ? btn_marker_color : default_btn_bg;
|
|
//dc.SetPen(clr);
|
|
//dc.SetBrush(clr);
|
|
//dc.DrawRectangle(pos.x, pos.y + size.y, size.x, sz.y - size.y);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
// Draw orange bottom line
|
|
|
|
dc.SetPen(btn_marker_color);
|
|
dc.SetBrush(btn_marker_color);
|
|
dc.DrawRectangle(1, sz.y - m_line_margin, sz.x, m_line_margin);
|
|
}
|
|
|
|
void ButtonsListCtrl::UpdateMode()
|
|
{
|
|
//m_mode_sizer->SetMode(Slic3r::GUI::wxGetApp().get_mode());
|
|
}
|
|
|
|
void ButtonsListCtrl::Rescale()
|
|
{
|
|
//m_mode_sizer->msw_rescale();
|
|
int em = em_unit(this);
|
|
for (Button* btn : m_pageButtons) {
|
|
//BBS
|
|
btn->SetMinSize({(btn->GetLabel().empty() ? 40 : 132) * em / 10, 36 * em / 10});
|
|
btn->Rescale();
|
|
}
|
|
|
|
// BBS: no gap
|
|
//m_btn_margin = std::lround(0.3 * em);
|
|
//m_line_margin = std::lround(0.1 * em);
|
|
//m_buttons_sizer->SetVGap(m_btn_margin);
|
|
//m_buttons_sizer->SetHGap(m_btn_margin);
|
|
|
|
m_sizer->Layout();
|
|
}
|
|
|
|
void ButtonsListCtrl::SetSelection(int sel)
|
|
{
|
|
if (m_selection == sel)
|
|
return;
|
|
// BBS: change button color
|
|
wxColour selected_btn_bg("#00AE42"); // Gradient #00AE42
|
|
if (m_selection >= 0) {
|
|
StateColor bg_color = StateColor(
|
|
std::pair{wxColour(107, 107, 107), (int) StateColor::Hovered},
|
|
std::pair{wxColour(59, 68, 70), (int) StateColor::Normal});
|
|
m_pageButtons[m_selection]->SetBackgroundColor(bg_color);
|
|
StateColor text_color = StateColor(
|
|
std::pair{wxColour(255, 255, 255), (int) StateColor::Hovered},
|
|
std::pair{wxColour(238,238, 238), (int) StateColor::Normal}
|
|
);
|
|
m_pageButtons[m_selection]->SetSelected(false);
|
|
m_pageButtons[m_selection]->SetTextColor(text_color);
|
|
}
|
|
m_selection = sel;
|
|
|
|
StateColor bg_color = StateColor(
|
|
std::pair{wxColour(0, 174, 66), (int) StateColor::Hovered},
|
|
std::pair{wxColour(0,174, 66), (int) StateColor::Normal});
|
|
m_pageButtons[m_selection]->SetBackgroundColor(bg_color);
|
|
|
|
StateColor text_color = StateColor(
|
|
std::pair{wxColour(255, 255, 255), (int) StateColor::Hovered},
|
|
std::pair{wxColour(255, 255, 255), (int) StateColor::Normal}
|
|
);
|
|
m_pageButtons[m_selection]->SetSelected(true);
|
|
m_pageButtons[m_selection]->SetTextColor(text_color);
|
|
|
|
Refresh();
|
|
}
|
|
|
|
bool ButtonsListCtrl::InsertPage(size_t n, const wxString &text, bool bSelect /* = false*/, const std::string &bmp_name /* = ""*/, const std::string &inactive_bmp_name)
|
|
{
|
|
Button * btn = new Button(this, text.empty() ? text : " " + text, bmp_name, wxNO_BORDER);
|
|
btn->SetCornerRadius(0);
|
|
|
|
int em = em_unit(this);
|
|
//BBS set size for button
|
|
btn->SetMinSize({(text.empty() ? 40 : 136) * em / 10, 36 * em / 10});
|
|
|
|
StateColor bg_color = StateColor(
|
|
std::pair{wxColour(107, 107, 107), (int) StateColor::Hovered},
|
|
std::pair{wxColour(59, 68, 70), (int) StateColor::Normal});
|
|
|
|
btn->SetBackgroundColor(bg_color);
|
|
StateColor text_color = StateColor(
|
|
std::pair{wxColour(255, 255, 255), (int) StateColor::Hovered},
|
|
std::pair{wxColour(238,238, 238), (int) StateColor::Normal});
|
|
btn->SetTextColor(text_color);
|
|
btn->SetInactiveIcon(inactive_bmp_name);
|
|
btn->SetSelected(false);
|
|
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();
|
|
//do it later
|
|
//SetSelection(sel);
|
|
|
|
wxCommandEvent evt = wxCommandEvent(wxCUSTOMEVT_NOTEBOOK_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->SetCols(m_buttons_sizer->GetCols() + 1);
|
|
m_sizer->Layout();
|
|
return true;
|
|
}
|
|
|
|
void ButtonsListCtrl::RemovePage(size_t n)
|
|
{
|
|
Button* btn = m_pageButtons[n];
|
|
m_pageButtons.erase(m_pageButtons.begin() + n);
|
|
m_buttons_sizer->Remove(n);
|
|
#if __WXOSX__
|
|
RemoveChild(btn);
|
|
#else
|
|
btn->Reparent(nullptr);
|
|
#endif
|
|
btn->Destroy();
|
|
m_sizer->Layout();
|
|
}
|
|
|
|
bool ButtonsListCtrl::SetPageImage(size_t n, const std::string& bmp_name) const
|
|
{
|
|
if (n >= m_pageButtons.size())
|
|
return false;
|
|
|
|
// BBS
|
|
//return m_pageButtons[n]->SetBitmap_(bmp_name);
|
|
ScalableBitmap bitmap(NULL, bmp_name);
|
|
//m_pageButtons[n]->SetBitmap_(bitmap);
|
|
return true;
|
|
}
|
|
|
|
void ButtonsListCtrl::SetPageText(size_t n, const wxString& strText)
|
|
{
|
|
Button* btn = m_pageButtons[n];
|
|
btn->SetLabel(strText);
|
|
}
|
|
|
|
wxString ButtonsListCtrl::GetPageText(size_t n) const
|
|
{
|
|
Button* btn = m_pageButtons[n];
|
|
return btn->GetLabel();
|
|
}
|
|
|
|
//#endif // _WIN32
|
|
|
|
|