From ab556a398b579b65802cfa7fdd39d543ab49fbec Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Tue, 8 Sep 2020 11:40:06 +0200 Subject: [PATCH 1/5] GCode viewer using the proper layout when started as a standalone application --- .../icons/PrusaSlicer-gcodeviewer_128px.png | Bin 0 -> 5069 bytes .../icons/PrusaSlicerGCodeViewer_128px.png | Bin 15949 -> 0 bytes src/PrusaSlicer.cpp | 4 + src/libslic3r/AppConfig.cpp | 5 + src/libslic3r/AppConfig.hpp | 11 ++ src/libslic3r/Technologies.hpp | 1 + src/slic3r/GUI/GCodeViewer.cpp | 8 ++ src/slic3r/GUI/GLCanvas3D.cpp | 16 +++ src/slic3r/GUI/GUI_App.cpp | 93 ++++++++---- src/slic3r/GUI/GUI_App.hpp | 25 ++++ src/slic3r/GUI/GUI_Preview.cpp | 4 + src/slic3r/GUI/GUI_Preview.hpp | 5 + src/slic3r/GUI/KBShortcutsDialog.cpp | 6 + src/slic3r/GUI/MainFrame.cpp | 125 ++++++++++++---- src/slic3r/GUI/MainFrame.hpp | 17 ++- src/slic3r/GUI/Plater.cpp | 136 ++++++++++-------- 16 files changed, 341 insertions(+), 115 deletions(-) create mode 100644 resources/icons/PrusaSlicer-gcodeviewer_128px.png delete mode 100644 resources/icons/PrusaSlicerGCodeViewer_128px.png diff --git a/resources/icons/PrusaSlicer-gcodeviewer_128px.png b/resources/icons/PrusaSlicer-gcodeviewer_128px.png new file mode 100644 index 0000000000000000000000000000000000000000..d8e3e438be6c5fc64f7ebc8744a842bdcbfd6aa5 GIT binary patch literal 5069 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 literal 0 HcmV?d00001 diff --git a/resources/icons/PrusaSlicerGCodeViewer_128px.png b/resources/icons/PrusaSlicerGCodeViewer_128px.png deleted file mode 100644 index 0bf85abbd6ea0585d127686a8200b4a647a030b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15949 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Ʊ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 AMF0Q* diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp index 2962f0cdfe..ea56124e6a 100644 --- a/src/PrusaSlicer.cpp +++ b/src/PrusaSlicer.cpp @@ -534,7 +534,11 @@ int CLI::run(int argc, char **argv) if (start_gui) { #ifdef SLIC3R_GUI // #ifdef USE_WX +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + GUI::GUI_App* gui = new GUI::GUI_App(start_as_gcodeviewer ? GUI::GUI_App::EAppMode::GCodeViewer : GUI::GUI_App::EAppMode::Editor); +#else GUI::GUI_App *gui = new GUI::GUI_App(); +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION bool gui_single_instance_setting = gui->app_config->get("single_instance") == "1"; if (Slic3r::instance_check(argc, argv, gui_single_instance_setting)) { diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 8b41bd2716..db3bd78ddf 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -179,6 +179,11 @@ std::string AppConfig::load() void AppConfig::save() { +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (!m_save_enabled) + return; +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + // The config is first written to a file with a PID suffix and then moved // to avoid race conditions with multiple instances of Slic3r const auto path = config_path(); diff --git a/src/libslic3r/AppConfig.hpp b/src/libslic3r/AppConfig.hpp index ffd1b9fdf5..3f4ce20089 100644 --- a/src/libslic3r/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -18,6 +18,9 @@ public: AppConfig() : m_dirty(false), m_orig_version(Semver::invalid()), +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + m_save_enabled(true), +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION m_legacy_datadir(false) { this->reset(); @@ -157,6 +160,10 @@ public: bool get_mouse_device_swap_yz(const std::string& name, bool& swap) const { return get_3dmouse_device_numeric_value(name, "swap_yz", swap); } +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + void enable_save(bool enable) { m_save_enabled = enable; } +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + static const std::string SECTION_FILAMENTS; static const std::string SECTION_MATERIALS; @@ -183,6 +190,10 @@ private: bool m_dirty; // Original version found in the ini file before it was overwritten Semver m_orig_version; +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + // Whether or not calls to save() should take effect + bool m_save_enabled; +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION // Whether the existing version is before system profiles & configuration updating bool m_legacy_datadir; }; diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index a0484b259c..2dbad472fe 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -59,5 +59,6 @@ #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_VIEWER_AS_STANDALONE_APPLICATION (1 && ENABLE_GCODE_VIEWER) #endif // _prusaslicer_technologies_h_ diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index bc424466bf..2b9bf8ca46 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -339,7 +339,11 @@ void GCodeViewer::load(const GCodeProcessor::Result& gcode_result, const Print& reset(); load_toolpaths(gcode_result); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_editor()) +#else if (wxGetApp().mainframe->get_mode() != MainFrame::EMode::GCodeViewer) +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION load_shells(print, initialized); else { Pointfs bed_shape; @@ -875,7 +879,11 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result) for (size_t i = 0; i < m_vertices_count; ++i) { const GCodeProcessor::MoveVertex& move = gcode_result.moves[i]; +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_gcode_viewer()) +#else if (wxGetApp().mainframe->get_mode() == MainFrame::EMode::GCodeViewer) +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION // for the gcode viewer we need all moves to correctly size the printbed m_paths_bounding_box.merge(move.position.cast()); else { diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index e7f0f094db..2f9f9464cd 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2732,7 +2732,11 @@ static void load_gcode_retractions(const GCodePreviewData::Retraction& retractio void GLCanvas3D::load_gcode_preview(const GCodeProcessor::Result& gcode_result) { m_gcode_viewer.load(gcode_result, *this->fff_print(), m_initialized); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_editor()) +#else if (wxGetApp().mainframe->get_mode() != MainFrame::EMode::GCodeViewer) +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION _show_warning_texture_if_needed(WarningTexture::ToolpathOutside); } @@ -4302,7 +4306,11 @@ void GLCanvas3D::update_ui_from_settings() #endif // ENABLE_RETINA_GL #if ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_editor()) +#else if (wxGetApp().mainframe != nullptr && wxGetApp().mainframe->get_mode() != MainFrame::EMode::GCodeViewer) +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION wxGetApp().plater()->get_collapse_toolbar().set_enabled(wxGetApp().app_config->get("show_collapse_button") == "1"); #else bool enable_collapse = wxGetApp().app_config->get("show_collapse_button") == "1"; @@ -5405,7 +5413,11 @@ void GLCanvas3D::_render_background() const { #if ENABLE_GCODE_VIEWER bool use_error_color = false; +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_editor()) { +#else if (wxGetApp().mainframe->get_mode() != MainFrame::EMode::GCodeViewer) { +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION use_error_color = m_dynamic_background_enabled; if (!m_volumes.empty()) use_error_color &= _is_any_volume_outside(); @@ -7134,7 +7146,11 @@ void GLCanvas3D::_show_warning_texture_if_needed(WarningTexture::Warning warning if (!m_volumes.empty()) show = _is_any_volume_outside(); else { +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_editor()) { +#else if (wxGetApp().mainframe->get_mode() != MainFrame::EMode::GCodeViewer) { +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION BoundingBoxf3 test_volume = (m_config != nullptr) ? print_volume(*m_config) : BoundingBoxf3(); const BoundingBoxf3& paths_volume = m_gcode_viewer.get_paths_bounding_box(); if (test_volume.radius() > 0.0 && paths_volume.radius() > 0.0) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 08219ed865..65aa026b54 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1,3 +1,4 @@ +#include "libslic3r/Technologies.hpp" #include "GUI_App.hpp" #include "GUI_ObjectList.hpp" #include "GUI_ObjectManipulation.hpp" @@ -309,8 +310,15 @@ static void generic_exception_handle() IMPLEMENT_APP(GUI_App) +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION +GUI_App::GUI_App(EAppMode mode) +#else GUI_App::GUI_App() +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION : wxApp() +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + , m_app_mode(mode) +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION , m_em_unit(10) , m_imgui(new ImGuiWrapper()) , m_wizard(nullptr) @@ -366,6 +374,12 @@ void GUI_App::init_app_config() if (!app_config) app_config = new AppConfig(); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (is_gcode_viewer()) + // disable config save to avoid to mess it up for the editor + app_config->enable_save(false); +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + // load settings app_conf_exists = app_config->exists(); if (app_conf_exists) { @@ -402,18 +416,18 @@ bool GUI_App::on_init_inner() wxCHECK_MSG(wxDirExists(resources_dir), false, wxString::Format("Resources path does not exist or is not a directory: %s", resources_dir)); - // Enable this to get the default Win32 COMCTRL32 behavior of static boxes. + // Enable this to get the default Win32 COMCTRL32 behavior of static boxes. // wxSystemOptions::SetOption("msw.staticbox.optimized-paint", 0); // Enable this to disable Windows Vista themes for all wxNotebooks. The themes seem to lead to terrible // performance when working on high resolution multi-display setups. // wxSystemOptions::SetOption("msw.notebook.themed-background", 0); // Slic3r::debugf "wxWidgets version %s, Wx version %s\n", wxVERSION_STRING, wxVERSION; - + std::string msg = Http::tls_global_init(); std::string ssl_cert_store = app_config->get("tls_accepted_cert_store_location"); bool ssl_accept = app_config->get("tls_cert_store_accepted") == "yes" && ssl_cert_store == Http::tls_system_cert_store(); - + if (!msg.empty() && !ssl_accept) { wxRichMessageDialog dlg(nullptr, @@ -423,38 +437,44 @@ bool GUI_App::on_init_inner() if (dlg.ShowModal() != wxID_YES) return false; app_config->set("tls_cert_store_accepted", - dlg.IsCheckBoxChecked() ? "yes" : "no"); + dlg.IsCheckBoxChecked() ? "yes" : "no"); app_config->set("tls_accepted_cert_store_location", - dlg.IsCheckBoxChecked() ? Http::tls_system_cert_store() : ""); + dlg.IsCheckBoxChecked() ? Http::tls_system_cert_store() : ""); } - + app_config->set("version", SLIC3R_VERSION); app_config->save(); wxBitmap bitmap = create_scaled_bitmap("prusa_slicer_logo", nullptr, 400); SplashScreen* scrn = new SplashScreen(bitmap, wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_TIMEOUT, 4000, nullptr); scrn->SetText(_L("Loading configuration...")); - + preset_bundle = new PresetBundle(); - + // just checking for existence of Slic3r::data_dir is not enough : it may be an empty directory // supplied as argument to --datadir; in that case we should still run the wizard preset_bundle->setup_directories(); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (is_editor()) { +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #ifdef __WXMSW__ - associate_3mf_files(); + associate_3mf_files(); #endif // __WXMSW__ - preset_updater = new PresetUpdater(); - Bind(EVT_SLIC3R_VERSION_ONLINE, [this](const wxCommandEvent &evt) { - app_config->set("version_online", into_u8(evt.GetString())); - app_config->save(); - if(this->plater_ != nullptr) { - if (*Semver::parse(SLIC3R_VERSION) < * Semver::parse(into_u8(evt.GetString()))) { - this->plater_->get_notification_manager()->push_notification(NotificationType::NewAppAviable, *(this->plater_->get_current_canvas3D())); - } - } - }); + preset_updater = new PresetUpdater(); + Bind(EVT_SLIC3R_VERSION_ONLINE, [this](const wxCommandEvent& evt) { + app_config->set("version_online", into_u8(evt.GetString())); + app_config->save(); + if (this->plater_ != nullptr) { + if (*Semver::parse(SLIC3R_VERSION) < *Semver::parse(into_u8(evt.GetString()))) { + this->plater_->get_notification_manager()->push_notification(NotificationType::NewAppAviable, *(this->plater_->get_current_canvas3D())); + } + } + }); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + } +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION // initialize label colors and fonts init_label_colours(); @@ -484,7 +504,11 @@ bool GUI_App::on_init_inner() // application frame if (wxImage::FindHandler(wxBITMAP_TYPE_PNG) == nullptr) wxImage::AddHandler(new wxPNGHandler()); - scrn->SetText(_L("Creating settings tabs...")); + +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (is_editor()) +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + scrn->SetText(_L("Creating settings tabs...")); mainframe = new MainFrame(); // hide settings tabs after first Layout @@ -519,13 +543,20 @@ bool GUI_App::on_init_inner() static bool once = true; if (once) { once = false; - check_updates(false); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (preset_updater != nullptr) { +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + check_updates(false); + + CallAfter([this] { + config_wizard_startup(); + preset_updater->slic3r_update_notify(); + preset_updater->sync(preset_bundle); + }); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + } +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION - CallAfter([this] { - config_wizard_startup(); - preset_updater->slic3r_update_notify(); - preset_updater->sync(preset_bundle); - }); #ifdef _WIN32 //sets window property to mainframe so other instances can indentify it OtherInstanceMessageHandler::init_windows_properties(mainframe, m_instance_hash_int); @@ -533,8 +564,16 @@ bool GUI_App::on_init_inner() } }); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (is_gcode_viewer()) { + mainframe->update_layout(); + if (plater_ != nullptr) + // ensure the selected technology is ptFFF + plater_->set_printer_technology(ptFFF); + } +#else load_current_presets(); - +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION mainframe->Show(true); /* Temporary workaround for the correct behavior of the Scrolled sidebar panel: diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 34114c03cb..d63825de3e 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -94,8 +94,22 @@ static wxString dots("…", wxConvUTF8); class GUI_App : public wxApp { +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION +public: + enum class EAppMode : unsigned char + { + Editor, + GCodeViewer + }; + +private: +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + bool m_initialized { false }; bool app_conf_exists{ false }; +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + EAppMode m_app_mode{ EAppMode::Editor }; +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION wxColour m_color_label_modified; wxColour m_color_label_sys; @@ -125,13 +139,24 @@ class GUI_App : public wxApp std::unique_ptr m_single_instance_checker; std::string m_instance_hash_string; size_t m_instance_hash_int; + public: bool OnInit() override; bool initialized() const { return m_initialized; } +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + explicit GUI_App(EAppMode mode = EAppMode::Editor); +#else GUI_App(); +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION ~GUI_App() override; +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + EAppMode get_app_mode() const { return m_app_mode; } + bool is_editor() const { return m_app_mode == EAppMode::Editor; } + bool is_gcode_viewer() const { return m_app_mode == EAppMode::GCodeViewer; } +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + static std::string get_gl_info(bool format_as_html, bool extensions); wxGLContext* init_glcontext(wxGLCanvas& canvas); bool init_opengl(); diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 5dcd26a877..530b3358e2 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -1234,7 +1234,11 @@ void Preview::load_print_as_fff(bool keep_z_range) } #if ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_editor() && !has_layers) +#else if (wxGetApp().mainframe->get_mode() != MainFrame::EMode::GCodeViewer && !has_layers) +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #else if (! has_layers) #endif // ENABLE_GCODE_VIEWER diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp index d9ce44bd62..6297663067 100644 --- a/src/slic3r/GUI/GUI_Preview.hpp +++ b/src/slic3r/GUI/GUI_Preview.hpp @@ -194,6 +194,9 @@ Preview(wxWindow* parent, Model* model, DynamicPrintConfig* config, #if ENABLE_GCODE_VIEWER void update_bottom_toolbar(); void update_moves_slider(); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + void hide_layers_slider(); +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #endif // ENABLE_GCODE_VIEWER private: @@ -203,7 +206,9 @@ private: void unbind_event_handlers(); #if ENABLE_GCODE_VIEWER +#if !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION void hide_layers_slider(); +#endif // !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #else void show_hide_ui_elements(const std::string& what); diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index 1eceea22e4..632bc48ed0 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -95,9 +95,15 @@ void KBShortcutsDialog::fill_shortcuts() const std::string& alt = GUI::shortkey_alt_prefix(); #if ENABLE_GCODE_VIEWER +#if !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION bool is_gcode_viewer = wxGetApp().mainframe->get_mode() == MainFrame::EMode::GCodeViewer; +#endif // !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_editor()) { +#else if (!is_gcode_viewer) { +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #endif // ENABLE_GCODE_VIEWER Shortcuts commands_shortcuts = { // File diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index f6fd939e25..853d9a6d75 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -92,7 +92,6 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S } #endif // ENABLE_GCODE_VIEWER_TASKBAR_ICON -// SetIcon(wxIcon(Slic3r::var("PrusaSlicer_128px.png"), wxBITMAP_TYPE_PNG)); // Load the icon either from the exe, or from the ico file. #if _WIN32 { @@ -102,7 +101,24 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S SetIcon(wxIcon(szExeFileName, wxBITMAP_TYPE_ICO)); } #else - SetIcon(wxIcon(Slic3r::var("PrusaSlicer_128px.png"), wxBITMAP_TYPE_PNG)); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + switch (wxGetApp().get_mode()) + { + default: + case GUI_App::EMode::Editor: + { +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + SetIcon(wxIcon(Slic3r::var("PrusaSlicer_128px.png"), wxBITMAP_TYPE_PNG)); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + break; + } + case GUI_App::EMode::GCodeViewer: + { + SetIcon(wxIcon(Slic3r::var("PrusaSlicer-gcodeviewer_128px.png"), wxBITMAP_TYPE_PNG)); + break; + } + } +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #endif // _WIN32 // initialize status bar @@ -116,8 +132,15 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S // initialize tabpanel and menubar init_tabpanel(); #if ENABLE_GCODE_VIEWER - init_editor_menubar(); - init_gcodeviewer_menubar(); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_gcode_viewer()) + init_menubar_as_gcodeviewer(); + else + init_menubar_as_editor(); +#else + init_menubar_as_editor(); + init_menubar_as_gcodeviewer(); +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #if _WIN32 // This is needed on Windows to fake the CTRL+# of the window menu when using the numpad @@ -148,7 +171,10 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S sizer->Add(m_main_sizer, 1, wxEXPAND); SetSizer(sizer); // initialize layout from config - update_layout(); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_editor()) +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + update_layout(); sizer->SetSizeHints(this); Fit(); @@ -300,10 +326,17 @@ void MainFrame::update_layout() }; #if ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + ESettingsLayout layout = wxGetApp().is_gcode_viewer() ? ESettingsLayout::GCodeViewer : + (wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? ESettingsLayout::Old : + wxGetApp().app_config->get("new_settings_layout_mode") == "1" ? ESettingsLayout::New : + wxGetApp().app_config->get("dlg_settings_layout_mode") == "1" ? ESettingsLayout::Dlg : ESettingsLayout::Old); +#else ESettingsLayout layout = (m_mode == EMode::GCodeViewer) ? ESettingsLayout::GCodeViewer : (wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? ESettingsLayout::Old : wxGetApp().app_config->get("new_settings_layout_mode") == "1" ? ESettingsLayout::New : wxGetApp().app_config->get("dlg_settings_layout_mode") == "1" ? ESettingsLayout::Dlg : ESettingsLayout::Old); +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #else ESettingsLayout layout = wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? ESettingsLayout::Old : wxGetApp().app_config->get("new_settings_layout_mode") == "1" ? ESettingsLayout::New : @@ -375,6 +408,12 @@ void MainFrame::update_layout() case ESettingsLayout::GCodeViewer: { m_main_sizer->Add(m_plater, 1, wxEXPAND); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + m_plater->set_bed_shape({ { 0.0, 0.0 }, { 200.0, 0.0 }, { 200.0, 200.0 }, { 0.0, 200.0 } }, "", "", true); + m_plater->enable_view_toolbar(false); + m_plater->get_collapse_toolbar().set_enabled(false); + m_plater->collapse_sidebar(true); +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION m_plater->Show(); break; } @@ -482,6 +521,7 @@ void MainFrame::shutdown() if (m_plater != nullptr) { #if ENABLE_GCODE_VIEWER +#if !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION // restore sidebar if it was hidden when switching to gcode viewer mode if (m_restore_from_gcode_viewer.collapsed_sidebar) m_plater->collapse_sidebar(false); @@ -489,6 +529,7 @@ void MainFrame::shutdown() // restore sla printer if it was deselected when switching to gcode viewer mode if (m_restore_from_gcode_viewer.sla_technology) m_plater->set_printer_technology(ptSLA); +#endif // !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #endif // ENABLE_GCODE_VIEWER // Stop the background thread (Windows and Linux). // Disconnect from a 3DConnextion driver (OSX). @@ -590,7 +631,10 @@ void MainFrame::init_tabpanel() // or when the preset's "modified" status changes. Bind(EVT_TAB_PRESETS_CHANGED, &MainFrame::on_presets_changed, this); // #ys_FIXME_to_delete - create_preset_tabs(); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_editor()) +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + create_preset_tabs(); if (m_plater) { // load initial config @@ -891,7 +935,7 @@ static void add_common_view_menu_items(wxMenu* view_menu, MainFrame* mainFrame, "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); } -void MainFrame::init_editor_menubar() +void MainFrame::init_menubar_as_editor() #else void MainFrame::init_menubar() #endif // ENABLE_GCODE_VIEWER @@ -1055,6 +1099,7 @@ void MainFrame::init_menubar() [this](wxCommandEvent&) { repair_stl(); }, "wrench", nullptr, [this]() { return true; }, this); #if ENABLE_GCODE_VIEWER +#if !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION fileMenu->AppendSeparator(); append_menu_item(fileMenu, wxID_ANY, _L("&G-code preview"), _L("Switch to G-code preview mode"), [this](wxCommandEvent&) { @@ -1063,6 +1108,7 @@ void MainFrame::init_menubar() wxString(SLIC3R_APP_NAME) + " - " + _L("Switch to G-code preview mode"), wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION | wxCENTRE).ShowModal() == wxID_YES) set_mode(EMode::GCodeViewer); }, "", nullptr); +#endif // !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #endif // ENABLE_GCODE_VIEWER fileMenu->AppendSeparator(); append_menu_item(fileMenu, wxID_EXIT, _L("&Quit"), wxString::Format(_L("Quit %s"), SLIC3R_APP_NAME), @@ -1286,6 +1332,17 @@ void MainFrame::init_menubar() // assign menubar to frame after appending items, otherwise special items // will not be handled correctly #if ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + m_menubar = new wxMenuBar(); + m_menubar->Append(fileMenu, _L("&File")); + if (editMenu) m_menubar->Append(editMenu, _L("&Edit")); + m_menubar->Append(windowMenu, _L("&Window")); + if (viewMenu) m_menubar->Append(viewMenu, _L("&View")); + // Add additional menus from C++ + wxGetApp().add_config_menu(m_menubar); + m_menubar->Append(helpMenu, _L("&Help")); + SetMenuBar(m_menubar); +#else m_editor_menubar = new wxMenuBar(); m_editor_menubar->Append(fileMenu, _L("&File")); if (editMenu) m_editor_menubar->Append(editMenu, _L("&Edit")); @@ -1295,6 +1352,7 @@ void MainFrame::init_menubar() wxGetApp().add_config_menu(m_editor_menubar); m_editor_menubar->Append(helpMenu, _L("&Help")); SetMenuBar(m_editor_menubar); +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #else auto menubar = new wxMenuBar(); menubar->Append(fileMenu, _(L("&File"))); @@ -1323,15 +1381,11 @@ void MainFrame::init_menubar() #endif if (plater()->printer_technology() == ptSLA) -#if ENABLE_GCODE_VIEWER - update_editor_menubar(); -#else update_menubar(); -#endif // ENABLE_GCODE_VIEWER } #if ENABLE_GCODE_VIEWER -void MainFrame::init_gcodeviewer_menubar() +void MainFrame::init_menubar_as_gcodeviewer() { wxMenu* fileMenu = new wxMenu; { @@ -1342,9 +1396,11 @@ void MainFrame::init_gcodeviewer_menubar() append_menu_item(fileMenu, wxID_ANY, _L("Export &toolpaths as OBJ") + dots, _L("Export toolpaths as OBJ"), [this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->export_toolpaths_to_obj(); }, "export_plater", nullptr, [this]() {return can_export_toolpaths(); }, this); +#if !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION fileMenu->AppendSeparator(); append_menu_item(fileMenu, wxID_ANY, _L("Exit &G-code preview"), _L("Switch to editor mode"), [this](wxCommandEvent&) { set_mode(EMode::Editor); }); +#endif // !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION fileMenu->AppendSeparator(); append_menu_item(fileMenu, wxID_EXIT, _L("&Quit"), wxString::Format(_L("Quit %s"), SLIC3R_APP_NAME), [this](wxCommandEvent&) { Close(false); }); @@ -1360,13 +1416,22 @@ void MainFrame::init_gcodeviewer_menubar() // helpmenu auto helpMenu = generate_help_menu(); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + m_menubar = new wxMenuBar(); + m_menubar->Append(fileMenu, _L("&File")); + if (viewMenu != nullptr) m_menubar->Append(viewMenu, _L("&View")); + m_menubar->Append(helpMenu, _L("&Help")); + SetMenuBar(m_menubar); +#else m_gcodeviewer_menubar = new wxMenuBar(); m_gcodeviewer_menubar->Append(fileMenu, _L("&File")); - if ((viewMenu != nullptr)) + if (viewMenu != nullptr) m_gcodeviewer_menubar->Append(viewMenu, _L("&View")); m_gcodeviewer_menubar->Append(helpMenu, _L("&Help")); +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION } +#if !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION void MainFrame::set_mode(EMode mode) { if (m_mode == mode) @@ -1432,7 +1497,7 @@ void MainFrame::set_mode(EMode mode) TCHAR szExeFileName[MAX_PATH]; GetModuleFileName(nullptr, szExeFileName, MAX_PATH); SetIcon(wxIcon(szExeFileName, wxBITMAP_TYPE_ICO)); - } + } #else SetIcon(wxIcon(Slic3r::var("PrusaSlicer_128px.png"), wxBITMAP_TYPE_PNG)); #endif // _WIN32 @@ -1488,11 +1553,11 @@ void MainFrame::set_mode(EMode mode) m_plater->Thaw(); - SetIcon(wxIcon(Slic3r::var("PrusaSlicerGCodeViewer_128px.png"), wxBITMAP_TYPE_PNG)); + SetIcon(wxIcon(Slic3r::var("PrusaSlicer-gcodeviewer_128px.png"), wxBITMAP_TYPE_PNG)); #if ENABLE_GCODE_VIEWER_TASKBAR_ICON if (m_taskbar_icon != nullptr) { m_taskbar_icon->RemoveIcon(); - m_taskbar_icon->SetIcon(wxIcon(Slic3r::var("PrusaSlicerGCodeViewer_128px.png"), wxBITMAP_TYPE_PNG), "PrusaSlicer-GCode viewer"); + m_taskbar_icon->SetIcon(wxIcon(Slic3r::var("PrusaSlicer-gcodeviewer_128px.png"), wxBITMAP_TYPE_PNG), "PrusaSlicer-GCode viewer"); } #endif // ENABLE_GCODE_VIEWER_TASKBAR_ICON @@ -1500,20 +1565,22 @@ void MainFrame::set_mode(EMode mode) } } } +#endif // !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #endif // ENABLE_GCODE_VIEWER -#if ENABLE_GCODE_VIEWER -void MainFrame::update_editor_menubar() -#else void MainFrame::update_menubar() -#endif // ENABLE_GCODE_VIEWER { +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_gcode_viewer()) + return; +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + const bool is_fff = plater()->printer_technology() == ptFFF; - m_changeable_menu_items[miExport] ->SetItemLabel((is_fff ? _(L("Export &G-code")) : _(L("E&xport")) ) + dots + "\tCtrl+G"); - m_changeable_menu_items[miSend] ->SetItemLabel((is_fff ? _(L("S&end G-code")) : _(L("S&end to print"))) + dots + "\tCtrl+Shift+G"); + m_changeable_menu_items[miExport] ->SetItemLabel((is_fff ? _L("Export &G-code") : _L("E&xport")) + dots + "\tCtrl+G"); + m_changeable_menu_items[miSend] ->SetItemLabel((is_fff ? _L("S&end G-code") : _L("S&end to print")) + dots + "\tCtrl+Shift+G"); - m_changeable_menu_items[miMaterialTab] ->SetItemLabel((is_fff ? _(L("&Filament Settings Tab")) : _(L("Mate&rial Settings Tab"))) + "\tCtrl+3"); + m_changeable_menu_items[miMaterialTab] ->SetItemLabel((is_fff ? _L("&Filament Settings Tab") : _L("Mate&rial Settings Tab")) + "\tCtrl+3"); m_changeable_menu_items[miMaterialTab] ->SetBitmap(create_scaled_bitmap(is_fff ? "spool" : "resin")); m_changeable_menu_items[miPrinterTab] ->SetBitmap(create_scaled_bitmap(is_fff ? "printer" : "sla_printer")); @@ -1996,6 +2063,11 @@ SettingsDialog::SettingsDialog(MainFrame* mainframe) wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMINIMIZE_BOX | wxMAXIMIZE_BOX, "settings_dialog"), m_main_frame(mainframe) { +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_gcode_viewer()) + return; +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + #if ENABLE_WX_3_1_3_DPI_CHANGED_EVENT && defined(__WXMSW__) // ys_FIXME! temporary workaround for correct font scaling // Because of from wxWidgets 3.1.3 auto rescaling is implemented for the Fonts, @@ -2006,8 +2078,6 @@ SettingsDialog::SettingsDialog(MainFrame* mainframe) #endif // ENABLE_WX_3_1_3_DPI_CHANGED_EVENT this->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); - -// SetIcon(wxIcon(Slic3r::var("PrusaSlicer_128px.png"), wxBITMAP_TYPE_PNG)); // Load the icon either from the exe, or from the ico file. #if _WIN32 { @@ -2070,6 +2140,11 @@ SettingsDialog::SettingsDialog(MainFrame* mainframe) void SettingsDialog::on_dpi_changed(const wxRect& suggested_rect) { +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_gcode_viewer()) + return; +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + const int& em = em_unit(); const wxSize& size = wxSize(85 * em, 50 * em); diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 7777a053d2..867e11e86b 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -57,7 +57,7 @@ class SettingsDialog : public DPIDialog MainFrame* m_main_frame { nullptr }; public: SettingsDialog(MainFrame* mainframe); - ~SettingsDialog() {} + ~SettingsDialog() = default; void set_tabpanel(wxNotebook* tabpanel) { m_tabpanel = tabpanel; } protected: @@ -72,6 +72,9 @@ class MainFrame : public DPIFrame wxString m_qs_last_output_file = wxEmptyString; wxString m_last_config = wxEmptyString; #if ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + wxMenuBar* m_menubar{ nullptr }; +#else wxMenuBar* m_editor_menubar{ nullptr }; wxMenuBar* m_gcodeviewer_menubar{ nullptr }; @@ -83,6 +86,7 @@ class MainFrame : public DPIFrame }; RestoreFromGCodeViewer m_restore_from_gcode_viewer; +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #endif // ENABLE_GCODE_VIEWER #if 0 @@ -146,6 +150,7 @@ class MainFrame : public DPIFrame ESettingsLayout m_layout{ ESettingsLayout::Unknown }; #if ENABLE_GCODE_VIEWER +#if !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION public: enum class EMode : unsigned char { @@ -155,6 +160,7 @@ public: private: EMode m_mode{ EMode::Editor }; +#endif // !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #endif // ENABLE_GCODE_VIEWER protected: @@ -182,16 +188,17 @@ public: void create_preset_tabs(); void add_created_tab(Tab* panel); #if ENABLE_GCODE_VIEWER - void init_editor_menubar(); - void update_editor_menubar(); - void init_gcodeviewer_menubar(); + void init_menubar_as_editor(); + void init_menubar_as_gcodeviewer(); +#if !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION EMode get_mode() const { return m_mode; } void set_mode(EMode mode); +#endif // !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #else void init_menubar(); - void update_menubar(); #endif // ENABLE_GCODE_VIEWER + void update_menubar(); void update_ui_from_settings(); bool is_loaded() const { return m_loaded; } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 45a1f6ea82..09640ebaf4 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1369,41 +1369,52 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi this->MSWUpdateDragImageOnLeave(); #endif // WIN32 - // gcode section - for (const auto& filename : filenames) { - fs::path path(into_path(filename)); - if (std::regex_match(path.string(), pattern_gcode_drop)) - paths.push_back(std::move(path)); - } - - if (paths.size() > 1) { - wxMessageDialog((wxWindow*)plater, _L("You can open only one .gcode file at a time."), - wxString(SLIC3R_APP_NAME) + " - " + _L("Drag and drop G-code file"), wxCLOSE | wxICON_WARNING | wxCENTRE).ShowModal(); - return false; - } - else if (paths.size() == 1) { - if (wxGetApp().mainframe->get_mode() == MainFrame::EMode::GCodeViewer) { - plater->load_gcode(from_path(paths.front())); - return true; +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_gcode_viewer()) { +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + // gcode section + for (const auto& filename : filenames) { + fs::path path(into_path(filename)); + if (std::regex_match(path.string(), pattern_gcode_drop)) + paths.push_back(std::move(path)); } - else { - if (wxMessageDialog((wxWindow*)plater, _L("Do you want to switch to G-code preview ?"), - wxString(SLIC3R_APP_NAME) + " - " + _L("Drag and drop G-code file"), wxYES_NO | wxICON_QUESTION | wxYES_DEFAULT | wxCENTRE).ShowModal() == wxID_YES) { - if (plater->model().objects.empty() || - wxMessageDialog((wxWindow*)plater, _L("Switching to G-code preview mode will remove all objects, continue?"), - wxString(SLIC3R_APP_NAME) + " - " + _L("Switch to G-code preview mode"), wxYES_NO | wxICON_QUESTION | wxYES_DEFAULT | wxCENTRE).ShowModal() == wxID_YES) { - wxGetApp().mainframe->set_mode(MainFrame::EMode::GCodeViewer); - plater->load_gcode(from_path(paths.front())); - return true; - } - } + if (paths.size() > 1) { + wxMessageDialog((wxWindow*)plater, _L("You can open only one .gcode file at a time."), + wxString(SLIC3R_APP_NAME) + " - " + _L("Drag and drop G-code file"), wxCLOSE | wxICON_WARNING | wxCENTRE).ShowModal(); return false; } + else if (paths.size() == 1) { +#if !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().mainframe->get_mode() == MainFrame::EMode::GCodeViewer) { +#endif // !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + plater->load_gcode(from_path(paths.front())); + return true; +#if !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + } + else { + if (wxMessageDialog((wxWindow*)plater, _L("Do you want to switch to G-code preview ?"), + wxString(SLIC3R_APP_NAME) + " - " + _L("Drag and drop G-code file"), wxYES_NO | wxICON_QUESTION | wxYES_DEFAULT | wxCENTRE).ShowModal() == wxID_YES) { + + if (plater->model().objects.empty() || + wxMessageDialog((wxWindow*)plater, _L("Switching to G-code preview mode will remove all objects, continue?"), + wxString(SLIC3R_APP_NAME) + " - " + _L("Switch to G-code preview mode"), wxYES_NO | wxICON_QUESTION | wxYES_DEFAULT | wxCENTRE).ShowModal() == wxID_YES) { + wxGetApp().mainframe->set_mode(MainFrame::EMode::GCodeViewer); + plater->load_gcode(from_path(paths.front())); + return true; + } + } + return false; + } +#endif // !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + } +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + return false; } +#endif //ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #endif // ENABLE_GCODE_VIEWER - // model section + // editor section for (const auto &filename : filenames) { fs::path path(into_path(filename)); if (std::regex_match(path.string(), pattern_drop)) @@ -1413,6 +1424,7 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi } #if ENABLE_GCODE_VIEWER +#if !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION if (wxGetApp().mainframe->get_mode() == MainFrame::EMode::GCodeViewer) { if (wxMessageDialog((wxWindow*)plater, _L("Do you want to exit G-code preview ?"), wxString(SLIC3R_APP_NAME) + " - " + _L("Drag and drop model file"), wxYES_NO | wxICON_QUESTION | wxYES_DEFAULT | wxCENTRE).ShowModal() == wxID_YES) @@ -1420,6 +1432,7 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi else return false; } +#endif // !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #endif // ENABLE_GCODE_VIEWER wxString snapshot_label; @@ -1970,7 +1983,13 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) q->SetDropTarget(new PlaterDropTarget(q)); // if my understanding is right, wxWindow takes the owenership q->Layout(); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + set_current_panel(wxGetApp().is_editor() ? (wxPanel*)view3D : (wxPanel*)preview); + if (wxGetApp().is_gcode_viewer()) + preview->hide_layers_slider(); +#else set_current_panel(view3D); +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION // updates camera type from .ini file camera.set_type(get_config("use_perspective_camera")); @@ -1990,33 +2009,38 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) #endif /* _WIN32 */ notification_manager = new NotificationManager(this->q); - this->q->Bind(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, [this](EjectDriveNotificationClickedEvent&) { this->q->eject_drive(); }); - this->q->Bind(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, [this](ExportGcodeNotificationClickedEvent&) { this->q->export_gcode(true); }); - this->q->Bind(EVT_PRESET_UPDATE_AVIABLE_CLICKED, [this](PresetUpdateAviableClickedEvent&) { wxGetApp().get_preset_updater()->on_update_notification_confirm(); }); - - this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this, q](RemovableDriveEjectEvent &evt) { - if (evt.data.second) { - this->show_action_buttons(this->ready_to_slice); - notification_manager->push_notification(format(_L("Unmounting successful. The device %s(%s) can now be safely removed from the computer."),evt.data.first.name, evt.data.first.path), - NotificationManager::NotificationLevel::RegularNotification, *q->get_current_canvas3D()); - } else { - notification_manager->push_notification(format(_L("Ejecting of device %s(%s) has failed."), evt.data.first.name, evt.data.first.path), - NotificationManager::NotificationLevel::ErrorNotification, *q->get_current_canvas3D()); - } - }); - this->q->Bind(EVT_REMOVABLE_DRIVES_CHANGED, [this, q](RemovableDrivesChangedEvent &) { - this->show_action_buttons(this->ready_to_slice); - if (!this->sidebar->get_eject_shown()) { - notification_manager->close_notification_of_type(NotificationType::ExportToRemovableFinished); - } - }); - // Start the background thread and register this window as a target for update events. - wxGetApp().removable_drive_manager()->init(this->q); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (wxGetApp().is_editor()) { +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + this->q->Bind(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, [this](EjectDriveNotificationClickedEvent&) { this->q->eject_drive(); }); + this->q->Bind(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, [this](ExportGcodeNotificationClickedEvent&) { this->q->export_gcode(true); }); + this->q->Bind(EVT_PRESET_UPDATE_AVIABLE_CLICKED, [this](PresetUpdateAviableClickedEvent&) { wxGetApp().get_preset_updater()->on_update_notification_confirm(); }); + this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this, q](RemovableDriveEjectEvent &evt) { + if (evt.data.second) { + this->show_action_buttons(this->ready_to_slice); + notification_manager->push_notification(format(_L("Unmounting successful. The device %s(%s) can now be safely removed from the computer."),evt.data.first.name, evt.data.first.path), + NotificationManager::NotificationLevel::RegularNotification, *q->get_current_canvas3D()); + } else { + notification_manager->push_notification(format(_L("Ejecting of device %s(%s) has failed."), evt.data.first.name, evt.data.first.path), + NotificationManager::NotificationLevel::ErrorNotification, *q->get_current_canvas3D()); + } + }); + this->q->Bind(EVT_REMOVABLE_DRIVES_CHANGED, [this, q](RemovableDrivesChangedEvent &) { + this->show_action_buttons(this->ready_to_slice); + if (!this->sidebar->get_eject_shown()) { + notification_manager->close_notification_of_type(NotificationType::ExportToRemovableFinished); + } + }); + // Start the background thread and register this window as a target for update events. + wxGetApp().removable_drive_manager()->init(this->q); #ifdef _WIN32 - // Trigger enumeration of removable media on Win32 notification. - this->q->Bind(EVT_VOLUME_ATTACHED, [this](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); - this->q->Bind(EVT_VOLUME_DETACHED, [this](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); + // Trigger enumeration of removable media on Win32 notification. + this->q->Bind(EVT_VOLUME_ATTACHED, [this](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); + this->q->Bind(EVT_VOLUME_DETACHED, [this](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); #endif /* _WIN32 */ +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + } +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION // Initialize the Undo / Redo stack with a first snapshot. this->take_snapshot(_L("New Project")); @@ -5384,7 +5408,7 @@ void Plater::on_config_change(const DynamicPrintConfig &config) this->set_printer_technology(config.opt_enum(opt_key)); // print technology is changed, so we should to update a search list p->sidebar->update_searcher(); - } + } else if ((opt_key == "bed_shape") || (opt_key == "bed_custom_texture") || (opt_key == "bed_custom_model")) { bed_shape_changed = true; update_scheduled = true; @@ -5628,11 +5652,7 @@ void Plater::set_printer_technology(PrinterTechnology printer_technology) p->label_btn_send = printer_technology == ptFFF ? L("Send G-code") : L("Send to printer"); if (wxGetApp().mainframe != nullptr) -#if ENABLE_GCODE_VIEWER - wxGetApp().mainframe->update_editor_menubar(); -#else wxGetApp().mainframe->update_menubar(); -#endif // ENABLE_GCODE_VIEWER p->update_main_toolbar_tooltips(); From 2443b7aaeaa7e1769fed84fe2e5d57572ca85337 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Tue, 8 Sep 2020 11:55:21 +0200 Subject: [PATCH 2/5] Splash screen for gcode viewer --- resources/icons/splashscreen-gcodeviewer.jpg | Bin 0 -> 135897 bytes src/slic3r/GUI/GUI_App.cpp | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 resources/icons/splashscreen-gcodeviewer.jpg diff --git a/resources/icons/splashscreen-gcodeviewer.jpg b/resources/icons/splashscreen-gcodeviewer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f170f390c2b822410ef2853041ce58563410ed25 GIT binary patch literal 135897 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 literal 0 HcmV?d00001 diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 426dfc81c7..738c41210f 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -562,7 +562,7 @@ bool GUI_App::on_init_inner() wxInitAllImageHandlers(); wxBitmap bitmap = create_scaled_bitmap("prusa_slicer_logo", nullptr, 400); - wxBitmap bmp(from_u8(var("splashscreen.jpg")), wxBITMAP_TYPE_JPEG); + wxBitmap bmp(is_editor() ? from_u8(var("splashscreen.jpg")) : from_u8(var("splashscreen-gcodeviewer.jpg")), wxBITMAP_TYPE_JPEG); DecorateSplashScreen(bmp); From 7270d222dfe410eefda01bcfab487d9b28c2e9f0 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Tue, 8 Sep 2020 12:10:07 +0200 Subject: [PATCH 3/5] Fix build on OsX --- src/slic3r/GUI/GUI_App.cpp | 4 ++++ src/slic3r/GUI/MainFrame.cpp | 37 +++++++++++++++++++++++++++--------- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 738c41210f..65c0bd878d 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -562,7 +562,11 @@ bool GUI_App::on_init_inner() wxInitAllImageHandlers(); wxBitmap bitmap = create_scaled_bitmap("prusa_slicer_logo", nullptr, 400); +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION wxBitmap bmp(is_editor() ? from_u8(var("splashscreen.jpg")) : from_u8(var("splashscreen-gcodeviewer.jpg")), wxBITMAP_TYPE_JPEG); +#else + wxBitmap bmp(from_u8(var("splashscreen.jpg")), wxBITMAP_TYPE_JPEG); +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION DecorateSplashScreen(bmp); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 853d9a6d75..5a140f9a9c 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -102,17 +102,17 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S } #else #if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION - switch (wxGetApp().get_mode()) + switch (wxGetApp().get_app_mode()) { default: - case GUI_App::EMode::Editor: + case GUI_App::EAppMode::Editor: { #endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION SetIcon(wxIcon(Slic3r::var("PrusaSlicer_128px.png"), wxBITMAP_TYPE_PNG)); #if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION break; } - case GUI_App::EMode::GCodeViewer: + case GUI_App::EAppMode::GCodeViewer: { SetIcon(wxIcon(Slic3r::var("PrusaSlicer-gcodeviewer_128px.png"), wxBITMAP_TYPE_PNG)); break; @@ -1355,13 +1355,13 @@ void MainFrame::init_menubar() #endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #else auto menubar = new wxMenuBar(); - menubar->Append(fileMenu, _(L("&File"))); - if (editMenu) menubar->Append(editMenu, _(L("&Edit"))); - menubar->Append(windowMenu, _(L("&Window"))); - if (viewMenu) menubar->Append(viewMenu, _(L("&View"))); + menubar->Append(fileMenu, _L("&File")); + if (editMenu) menubar->Append(editMenu, _L("&Edit")); + menubar->Append(windowMenu, _L("&Window")); + if (viewMenu) menubar->Append(viewMenu, _L("&View")); // Add additional menus from C++ wxGetApp().add_config_menu(menubar); - menubar->Append(helpMenu, _(L("&Help"))); + menubar->Append(helpMenu, _L("&Help")); SetMenuBar(menubar); #endif // ENABLE_GCODE_VIEWER @@ -1369,7 +1369,11 @@ void MainFrame::init_menubar() // This fixes a bug on Mac OS where the quit command doesn't emit window close events // wx bug: https://trac.wxwidgets.org/ticket/18328 #if ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + wxMenu* apple_menu = menubar->OSXGetAppleMenu(); +#else wxMenu* apple_menu = m_editor_menubar->OSXGetAppleMenu(); +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION #else wxMenu *apple_menu = menubar->OSXGetAppleMenu(); #endif // ENABLE_GCODE_VIEWER @@ -1378,7 +1382,7 @@ void MainFrame::init_menubar() Close(); }, wxID_EXIT); } -#endif +#endif // __APPLE__ if (plater()->printer_technology() == ptSLA) update_menubar(); @@ -1429,6 +1433,21 @@ void MainFrame::init_menubar_as_gcodeviewer() m_gcodeviewer_menubar->Append(viewMenu, _L("&View")); m_gcodeviewer_menubar->Append(helpMenu, _L("&Help")); #endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + +#ifdef __APPLE__ + // This fixes a bug on Mac OS where the quit command doesn't emit window close events + // wx bug: https://trac.wxwidgets.org/ticket/18328 +#if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + wxMenu* apple_menu = menubar->OSXGetAppleMenu(); +#else + wxMenu* apple_menu = m_gcodeviewer_menubar->OSXGetAppleMenu(); +#endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + if (apple_menu != nullptr) { + apple_menu->Bind(wxEVT_MENU, [this](wxCommandEvent&) { + Close(); + }, wxID_EXIT); + } +#endif // __APPLE__ } #if !ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION From f6534f5f7a3cdc41d005212278d9d89604c116d4 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Tue, 8 Sep 2020 12:36:57 +0200 Subject: [PATCH 4/5] Follow-up of 7270d222dfe410eefda01bcfab487d9b28c2e9f0 -> Fix of build on OsX and Linux --- src/slic3r/GUI/MainFrame.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 5a140f9a9c..151648740d 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1370,7 +1370,7 @@ void MainFrame::init_menubar() // wx bug: https://trac.wxwidgets.org/ticket/18328 #if ENABLE_GCODE_VIEWER #if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION - wxMenu* apple_menu = menubar->OSXGetAppleMenu(); + wxMenu* apple_menu = m_menubar->OSXGetAppleMenu(); #else wxMenu* apple_menu = m_editor_menubar->OSXGetAppleMenu(); #endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION @@ -1438,7 +1438,7 @@ void MainFrame::init_menubar_as_gcodeviewer() // This fixes a bug on Mac OS where the quit command doesn't emit window close events // wx bug: https://trac.wxwidgets.org/ticket/18328 #if ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION - wxMenu* apple_menu = menubar->OSXGetAppleMenu(); + wxMenu* apple_menu = m_menubar->OSXGetAppleMenu(); #else wxMenu* apple_menu = m_gcodeviewer_menubar->OSXGetAppleMenu(); #endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION From a13b732f278ad5a7afda879a5ad617648d1a85de Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Tue, 8 Sep 2020 15:30:01 +0200 Subject: [PATCH 5/5] Fixed loading current presets --- src/slic3r/GUI/GUI_App.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 65c0bd878d..612b44d5b0 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -692,9 +692,9 @@ bool GUI_App::on_init_inner() // ensure the selected technology is ptFFF plater_->set_printer_technology(ptFFF); } -#else - load_current_presets(); + else #endif // ENABLE_GCODE_VIEWER_AS_STANDALONE_APPLICATION + load_current_presets(); mainframe->Show(true); /* Temporary workaround for the correct behavior of the Scrolled sidebar panel: