From 11d8a2ad8e8635a568d1ba4f6ea5e83151eb4d2f Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Fri, 2 Oct 2020 11:40:21 +0200
Subject: [PATCH] Start PrusaSlicer in gcode viewer mode when dragging and
 dropping a .gcode file on the application icon

---
 src/PrusaSlicer.cpp            | 11 +++++++++++
 src/libslic3r/Technologies.hpp |  1 +
 src/slic3r/GUI/MainFrame.cpp   | 19 +++++++++++++++++--
 3 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp
index d79196cfa..8f96de3ed 100644
--- a/src/PrusaSlicer.cpp
+++ b/src/PrusaSlicer.cpp
@@ -154,6 +154,17 @@ int CLI::run(int argc, char **argv)
 
     // Read input file(s) if any.
 #if ENABLE_GCODE_VIEWER
+#if ENABLE_GCODE_DRAG_AND_DROP_GCODE_FILES
+    for (const std::string& file : m_input_files) {
+        std::string ext = boost::filesystem::path(file).extension().string();
+        if (boost::filesystem::path(file).extension().string() == ".gcode") {
+            if (boost::filesystem::exists(file)) {
+                start_as_gcodeviewer = true;
+                break;
+            }
+        }
+    }
+#endif // ENABLE_GCODE_DRAG_AND_DROP_GCODE_FILES
     if (!start_as_gcodeviewer) {
 #endif // ENABLE_GCODE_VIEWER
         for (const std::string& file : m_input_files) {
diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index a0484b259..786557cf1 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_DRAG_AND_DROP_GCODE_FILES (1 && ENABLE_GCODE_VIEWER)
 
 #endif // _prusaslicer_technologies_h_
diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp
index ca9ddf512..4ecd36c7f 100644
--- a/src/slic3r/GUI/MainFrame.cpp
+++ b/src/slic3r/GUI/MainFrame.cpp
@@ -89,10 +89,26 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
     // Load the icon either from the exe, or from the ico file.
 #if _WIN32
     {
-
+#if ENABLE_GCODE_DRAG_AND_DROP_GCODE_FILES
+        switch (wxGetApp().get_app_mode())
+        {
+        default:
+        case GUI_App::EAppMode::Editor:
+        {
+            SetIcon(wxIcon(Slic3r::var("PrusaSlicer.ico"), wxBITMAP_TYPE_ICO));
+            break;
+        }
+        case GUI_App::EAppMode::GCodeViewer:
+        {
+            SetIcon(wxIcon(Slic3r::var("PrusaSlicer-gcodeviewer.ico"), wxBITMAP_TYPE_ICO));
+            break;
+        }
+        }
+#else
         TCHAR szExeFileName[MAX_PATH];
         GetModuleFileName(nullptr, szExeFileName, MAX_PATH);
         SetIcon(wxIcon(szExeFileName, wxBITMAP_TYPE_ICO));
+#endif // ENABLE_GCODE_DRAG_AND_DROP_GCODE_FILES
     }
 #else
 #if ENABLE_GCODE_VIEWER
@@ -1965,7 +1981,6 @@ SettingsDialog::SettingsDialog(MainFrame* mainframe)
     // Load the icon either from the exe, or from the ico file.
 #if _WIN32
     {
-
         TCHAR szExeFileName[MAX_PATH];
         GetModuleFileName(nullptr, szExeFileName, MAX_PATH);
         SetIcon(wxIcon(szExeFileName, wxBITMAP_TYPE_ICO));