mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-15 10:47:50 -06:00
Add the full source of BambuStudio
using version 1.0.10
This commit is contained in:
parent
30bcadab3e
commit
1555904bef
3771 changed files with 1251328 additions and 0 deletions
215
src/slic3r/GUI/Widgets/SideTools.cpp
Normal file
215
src/slic3r/GUI/Widgets/SideTools.cpp
Normal file
|
@ -0,0 +1,215 @@
|
|||
#include "SideTools.hpp"
|
||||
#include <wx/dcmemory.h>
|
||||
#include <wx/dcgraph.h>
|
||||
#include "Label.hpp"
|
||||
#include "../wxExtensions.hpp"
|
||||
#include "../I18N.hpp"
|
||||
#include "../GUI.hpp"
|
||||
|
||||
namespace Slic3r { namespace GUI {
|
||||
SideTools::SideTools(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size)
|
||||
{
|
||||
wxPanel::Create(parent, id, pos, wxSize(0, FromDIP(50)));
|
||||
Bind(wxEVT_PAINT, &SideTools::OnPaint, this);
|
||||
|
||||
SetBackgroundColour(*wxWHITE);
|
||||
|
||||
m_printing_img = create_scaled_bitmap("printer", nullptr, 16);
|
||||
m_arrow_img = create_scaled_bitmap("monitor_arrow", nullptr, 14);
|
||||
|
||||
m_none_printing_img = create_scaled_bitmap("tab_monitor_active", nullptr, 24);
|
||||
m_none_arrow_img = create_scaled_bitmap("monitor_none_arrow", nullptr, 14);
|
||||
m_none_add_img = create_scaled_bitmap("monitor_none_add", nullptr, 14);
|
||||
|
||||
m_wifi_none_img = create_scaled_bitmap("monitor_signal_no", nullptr, 18);
|
||||
m_wifi_weak_img = create_scaled_bitmap("monitor_signal_weak", nullptr, 18);
|
||||
m_wifi_middle_img = create_scaled_bitmap("monitor_signal_middle", nullptr, 18);
|
||||
m_wifi_strong_img = create_scaled_bitmap("monitor_signal_strong", nullptr, 18);
|
||||
|
||||
m_intetval_timer = new wxTimer();
|
||||
m_intetval_timer->SetOwner(this);
|
||||
|
||||
this->Bind(wxEVT_TIMER, &SideTools::stop_interval, this);
|
||||
this->Bind(wxEVT_ENTER_WINDOW, &SideTools::on_mouse_enter, this);
|
||||
this->Bind(wxEVT_LEAVE_WINDOW, &SideTools::on_mouse_leave, this);
|
||||
this->Bind(wxEVT_LEFT_DOWN, &SideTools::on_mouse_left_down, this);
|
||||
this->Bind(wxEVT_LEFT_UP, &SideTools::on_mouse_left_up, this);
|
||||
}
|
||||
|
||||
SideTools::~SideTools() {}
|
||||
|
||||
void SideTools::set_none_printer_mode()
|
||||
{
|
||||
m_none_printer = true;
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void SideTools::on_timer(wxTimerEvent &event)
|
||||
{
|
||||
}
|
||||
|
||||
void SideTools::set_current_printer_name(std::string dev_name)
|
||||
{
|
||||
m_none_printer = false;
|
||||
m_dev_name = from_u8(dev_name);
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void SideTools::set_current_printer_signal(WifiSignal sign)
|
||||
{
|
||||
if (last_printer_signal == sign) return;
|
||||
|
||||
last_printer_signal = sign;
|
||||
m_none_printer = false;
|
||||
m_wifi_type = sign;
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void SideTools::start_interval()
|
||||
{
|
||||
m_intetval_timer->Start(SIDE_TOOL_CLICK_INTERVAL);
|
||||
m_is_in_interval = true;
|
||||
}
|
||||
|
||||
void SideTools::stop_interval(wxTimerEvent& event)
|
||||
{
|
||||
m_is_in_interval = false;
|
||||
m_intetval_timer->Stop();
|
||||
}
|
||||
|
||||
|
||||
bool SideTools::is_in_interval()
|
||||
{
|
||||
return m_is_in_interval;
|
||||
}
|
||||
|
||||
void SideTools::msw_rescale()
|
||||
{
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void SideTools::OnPaint(wxPaintEvent &event)
|
||||
{
|
||||
wxPaintDC dc(this);
|
||||
doRender(dc);
|
||||
}
|
||||
|
||||
void SideTools::render(wxDC &dc)
|
||||
{
|
||||
#ifdef __WXMSW__
|
||||
wxSize size = GetSize();
|
||||
wxMemoryDC memdc;
|
||||
wxBitmap bmp(size.x, size.y);
|
||||
memdc.SelectObject(bmp);
|
||||
memdc.Blit({0, 0}, size, &dc, {0, 0});
|
||||
|
||||
{
|
||||
wxGCDC dc2(memdc);
|
||||
doRender(dc2);
|
||||
}
|
||||
|
||||
memdc.SelectObject(wxNullBitmap);
|
||||
dc.DrawBitmap(bmp, 0, 0);
|
||||
#else
|
||||
doRender(dc);
|
||||
#endif
|
||||
}
|
||||
|
||||
void SideTools::doRender(wxDC &dc)
|
||||
{
|
||||
auto left = FromDIP(15);
|
||||
wxSize size = GetSize();
|
||||
|
||||
//if (m_none_printer) {
|
||||
// dc.SetPen(SIDE_TOOLS_LIGHT_GREEN);
|
||||
// dc.SetBrush(SIDE_TOOLS_LIGHT_GREEN);
|
||||
// dc.DrawRectangle(0, 0, size.x, size.y);
|
||||
//}
|
||||
|
||||
if (m_none_printer) {
|
||||
dc.SetPen(SIDE_TOOLS_BRAND);
|
||||
dc.SetBrush(SIDE_TOOLS_BRAND);
|
||||
dc.DrawRectangle(0, 0, size.x, size.y);
|
||||
|
||||
dc.DrawBitmap(m_none_printing_img, left, (size.y - m_none_printing_img.GetSize().y) / 2);
|
||||
|
||||
left += (m_none_printing_img.GetSize().x + FromDIP(15));
|
||||
dc.DrawBitmap(m_none_arrow_img, left, (size.y - m_none_arrow_img.GetSize().y) / 2);
|
||||
|
||||
left += (m_none_arrow_img.GetSize().x + FromDIP(6));
|
||||
dc.SetFont(::Label::Body_14);
|
||||
dc.SetBackgroundMode(wxTRANSPARENT);
|
||||
dc.SetTextForeground(*wxWHITE);
|
||||
|
||||
auto sizet = dc.GetTextExtent(_L("No printer"));
|
||||
dc.DrawText(_L("No printer"), wxPoint(left, (size.y - sizet.y) / 2));
|
||||
|
||||
left = size.x - FromDIP(30) - m_wifi_none_img.GetSize().x;
|
||||
dc.DrawBitmap(m_none_add_img, left, (size.y - m_none_add_img.GetSize().y) / 2);
|
||||
} else {
|
||||
dc.DrawBitmap(m_printing_img, left, (size.y - m_printing_img.GetSize().y) / 2);
|
||||
|
||||
left += (m_printing_img.GetSize().x + FromDIP(5));
|
||||
dc.DrawBitmap(m_arrow_img, left, (size.y - m_arrow_img.GetSize().y) / 2);
|
||||
|
||||
left += (m_arrow_img.GetSize().x + FromDIP(6));
|
||||
dc.SetFont(::Label::Body_14);
|
||||
dc.SetBackgroundMode(wxTRANSPARENT);
|
||||
dc.SetTextForeground(SIDE_TOOLS_GREY900);
|
||||
|
||||
auto sizet = dc.GetTextExtent(m_dev_name);
|
||||
auto text_end = size.x - m_wifi_none_img.GetSize().x - 20;
|
||||
|
||||
std::string finally_name = m_dev_name.ToStdString();
|
||||
if (sizet.x > (text_end - left)) {
|
||||
auto limit_width = text_end - left - dc.GetTextExtent("...").x - 20;
|
||||
for (auto i = 0; i < m_dev_name.length(); i++) {
|
||||
auto curr_width = dc.GetTextExtent(m_dev_name.substr(0, i));
|
||||
if (curr_width.x >= limit_width) {
|
||||
finally_name = (m_dev_name.substr(0, i) + wxString("...")).ToStdString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
dc.DrawText(finally_name, wxPoint(left, (size.y - sizet.y) / 2));
|
||||
|
||||
left = size.x - FromDIP(18) - m_wifi_none_img.GetSize().x;
|
||||
if (m_wifi_type == WifiSignal::NONE) dc.DrawBitmap(m_wifi_none_img, left, (size.y - m_wifi_none_img.GetSize().y) / 2);
|
||||
if (m_wifi_type == WifiSignal::WEAK) dc.DrawBitmap(m_wifi_weak_img, left, (size.y - m_wifi_weak_img.GetSize().y) / 2);
|
||||
if (m_wifi_type == WifiSignal::MIDDLE) dc.DrawBitmap(m_wifi_middle_img, left, (size.y - m_wifi_middle_img.GetSize().y) / 2);
|
||||
if (m_wifi_type == WifiSignal::STRONG) dc.DrawBitmap(m_wifi_strong_img, left, (size.y - m_wifi_strong_img.GetSize().y) / 2);
|
||||
}
|
||||
|
||||
if (m_hover) {
|
||||
dc.SetPen(SIDE_TOOLS_BRAND);
|
||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||
dc.DrawRectangle(0, 0, size.x, size.y);
|
||||
}
|
||||
}
|
||||
|
||||
void SideTools::on_mouse_left_down(wxMouseEvent &evt)
|
||||
{
|
||||
m_click = true;
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void SideTools::on_mouse_left_up(wxMouseEvent &evt)
|
||||
{
|
||||
m_click = false;
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void SideTools::on_mouse_enter(wxMouseEvent &evt)
|
||||
{
|
||||
m_hover = true;
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void SideTools::on_mouse_leave(wxMouseEvent &evt)
|
||||
{
|
||||
m_hover = false;
|
||||
Refresh();
|
||||
}
|
||||
}}
|
Loading…
Add table
Add a link
Reference in a new issue