diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index 849faa4eba..689cc4944c 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -55,7 +55,6 @@ #define ENABLE_GCODE_VIEWER (1 && ENABLE_2_3_0_ALPHA1) #define ENABLE_GCODE_VIEWER_STATISTICS (0 && ENABLE_GCODE_VIEWER) #define ENABLE_GCODE_VIEWER_DATA_CHECKING (0 && ENABLE_GCODE_VIEWER) -#define ENABLE_GCODE_VIEWER_TASKBAR_ICON (0 && ENABLE_GCODE_VIEWER) #define ENABLE_GCODE_APP_CONFIG (1 && ENABLE_GCODE_VIEWER) #define ENABLE_GCODE_DRAG_AND_DROP_GCODE_FILES (1 && ENABLE_GCODE_VIEWER) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 13b9de3c6e..b43786968f 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -49,6 +49,35 @@ enum class ERescaleTarget SettingsDialog }; +#ifdef __APPLE__ +class PrusaSlicerTaskBarIcon : public wxTaskBarIcon +{ +public: + PrusaSlicerTaskBarIcon(wxTaskBarIconType iconType = wxTBI_DEFAULT_TYPE) : wxTaskBarIcon(iconType) {} + void OnLeftButtonDClick(wxTaskBarIconEvent&) { wxMessageBox("Doubleclick on docker icon"); } + wxMenu *CreatePopupMenu() override { + wxMenu *menu = new wxMenu; + int id; + auto *item = menu->Append(id = wxNewId(), "&Test menu"); + menu->Bind(wxEVT_MENU, [this](wxCommandEvent &) { wxMessageBox("Test menu"); }, id); + return menu; + } +}; +class GCodeViewerTaskBarIcon : public wxTaskBarIcon +{ +public: + GCodeViewerTaskBarIcon(wxTaskBarIconType iconType = wxTBI_DEFAULT_TYPE) : wxTaskBarIcon(iconType) {} + void OnLeftButtonDClick(wxTaskBarIconEvent&) { wxMessageBox("Doubleclick on docker icon"); } + wxMenu *CreatePopupMenu() override { + wxMenu *menu = new wxMenu; + int id; + auto *item = menu->Append(id = wxNewId(), "&Test menu"); + menu->Bind(wxEVT_MENU, [this](wxCommandEvent &) { wxMessageBox("Test menu"); }, id); + return menu; + } +}; +#endif // __APPLE__ + MainFrame::MainFrame() : DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, "mainframe"), m_printhost_queue_dlg(new PrintHostQueueDialog(this)) @@ -64,27 +93,20 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S // Font is already set in DPIFrame constructor */ -#if ENABLE_GCODE_VIEWER_TASKBAR_ICON - if (wxTaskBarIcon::IsAvailable()) { -#if defined(__WXOSX__) && wxOSX_USE_COCOA - m_taskbar_icon = new wxTaskBarIcon(wxTBI_DOCK); -#else - m_taskbar_icon = new wxTaskBarIcon(); -#endif +#ifdef __APPLE__ + // Initialize the docker task bar icon. + switch (wxGetApp().get_app_mode()) { + default: + case GUI_App::EAppMode::Editor: + m_taskbar_icon = std::make_unique(wxTBI_DOCK); m_taskbar_icon->SetIcon(wxIcon(Slic3r::var("PrusaSlicer_128px.png"), wxBITMAP_TYPE_PNG), "PrusaSlicer"); - - m_taskbar_icon->Bind(wxEVT_TASKBAR_CLICK, [this](wxTaskBarIconEvent& evt) { - wxString msg = _L("You pressed the icon in taskbar for ") + "\n"; - if (m_mode == EMode::Editor) - msg += wxString(SLIC3R_APP_NAME); - else - msg += wxString(SLIC3R_APP_NAME) + "-GCode viewer"; - - wxMessageDialog dialog(nullptr, msg, _("Taskbar icon clicked"), wxOK); - dialog.ShowModal(); - }); + break; + case GUI_App::EAppMode::GCodeViewer: + m_taskbar_icon = std::make_unique(wxTBI_DOCK); + m_taskbar_icon->SetIcon(wxIcon(Slic3r::var("PrusaSlicerGCodeViewer_128px.png"), wxBITMAP_TYPE_PNG), "G-code Viewer"); + break; } -#endif // ENABLE_GCODE_VIEWER_TASKBAR_ICON +#endif // __APPLE__ // Load the icon either from the exe, or from the ico file. #if _WIN32 @@ -288,13 +310,6 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S } } -#if ENABLE_GCODE_VIEWER_TASKBAR_ICON -MainFrame::~MainFrame() -{ - delete m_taskbar_icon; -} -#endif // ENABLE_GCODE_VIEWER_TASKBAR_ICON - void MainFrame::update_layout() { auto restore_to_creation = [this]() { diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 0a6cefd9a1..9be9bbad91 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -7,9 +7,9 @@ #include #include #include -#if ENABLE_GCODE_VIEWER_TASKBAR_ICON +#ifdef __APPLE__ #include -#endif // ENABLE_GCODE_VIEWER_TASKBAR_ICON +#endif __APPLE__ #include #include @@ -141,11 +141,7 @@ protected: public: MainFrame(); -#if ENABLE_GCODE_VIEWER_TASKBAR_ICON - ~MainFrame(); -#else ~MainFrame() = default; -#endif // ENABLE_GCODE_VIEWER_TASKBAR_ICON void update_layout(); @@ -202,9 +198,9 @@ public: wxProgressDialog* m_progress_dialog { nullptr }; std::shared_ptr m_statusbar; -#if ENABLE_GCODE_VIEWER_TASKBAR_ICON - wxTaskBarIcon* m_taskbar_icon{ nullptr }; -#endif // ENABLE_GCODE_VIEWER_TASKBAR_ICON +#ifdef __APPLE__ + std::unique_ptr m_taskbar_icon; +#endif // __APPLE__ #ifdef _WIN32 void* m_hDeviceNotify { nullptr };