Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorenricoturri1966 <enricoturri@seznam.cz>2021-04-06 11:00:17 +0300
committerenricoturri1966 <enricoturri@seznam.cz>2021-04-06 11:00:17 +0300
commit144e37c2745b188c99e8c88fde7c6f4da3603ef3 (patch)
tree98502f1183c7b17283848e8a27d8a407a026fc8e /src/slic3r
parent04526d5c284adb53c71cac48f2129b4c0a5fbad6 (diff)
1st installment of project dirty state manager
Diffstat (limited to 'src/slic3r')
-rw-r--r--src/slic3r/CMakeLists.txt2
-rw-r--r--src/slic3r/GUI/GLCanvas3D.cpp5
-rw-r--r--src/slic3r/GUI/Plater.cpp17
-rw-r--r--src/slic3r/GUI/Plater.hpp6
-rw-r--r--src/slic3r/GUI/ProjectDirtyStateManager.cpp47
-rw-r--r--src/slic3r/GUI/ProjectDirtyStateManager.hpp35
6 files changed, 108 insertions, 4 deletions
diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
index 4b3a1c6ca..5b904c87d 100644
--- a/src/slic3r/CMakeLists.txt
+++ b/src/slic3r/CMakeLists.txt
@@ -189,6 +189,8 @@ set(SLIC3R_GUI_SOURCES
GUI/UnsavedChangesDialog.hpp
GUI/ExtraRenderers.cpp
GUI/ExtraRenderers.hpp
+ GUI/ProjectDirtyStateManager.hpp
+ GUI/ProjectDirtyStateManager.cpp
Utils/Http.cpp
Utils/Http.hpp
Utils/FixModelByWin10.cpp
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 7bbdc72b1..4570670cb 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1718,6 +1718,11 @@ void GLCanvas3D::render()
}
#endif // ENABLE_RENDER_STATISTICS
+#if ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
+ if (wxGetApp().is_editor() && wxGetApp().plater()->is_view3D_shown())
+ wxGetApp().plater()->render_project_state_debug_window();
+#endif // ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
+
#if ENABLE_CAMERA_STATISTICS
camera.debug_render();
#endif // ENABLE_CAMERA_STATISTICS
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index b4b025cd2..0434d2555 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -81,6 +81,9 @@
#include "InstanceCheck.hpp"
#include "NotificationManager.hpp"
#include "PresetComboBoxes.hpp"
+#if ENABLE_PROJECT_DIRTY_STATE
+#include "ProjectDirtyStateManager.hpp"
+#endif // ENABLE_PROJECT_DIRTY_STATE
#ifdef __APPLE__
#include "Gizmos/GLGizmosManager.hpp"
@@ -1434,6 +1437,10 @@ struct Plater::priv
Preview *preview;
NotificationManager* notification_manager { nullptr };
+#if ENABLE_PROJECT_DIRTY_STATE
+ ProjectDirtyStateManager dirty_state;
+#endif // ENABLE_PROJECT_DIRTY_STATE
+
BackgroundSlicingProcess background_process;
bool suppressed_backround_processing_update { false };
@@ -1504,6 +1511,10 @@ struct Plater::priv
priv(Plater *q, MainFrame *main_frame);
~priv();
+#if ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
+ void render_project_state_debug_window() const { dirty_state.render_debug_window(); }
+#endif // ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
+
enum class UpdateParams {
FORCE_FULL_SCREEN_REFRESH = 1,
FORCE_BACKGROUND_PROCESSING_UPDATE = 2,
@@ -4418,9 +4429,9 @@ Plater::Plater(wxWindow *parent, MainFrame *main_frame)
// Initialization performed in the private c-tor
}
-Plater::~Plater()
-{
-}
+#if ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
+void Plater::render_project_state_debug_window() const { p->render_project_state_debug_window(); }
+#endif // ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
Sidebar& Plater::sidebar() { return *p->sidebar; }
Model& Plater::model() { return p->model; }
diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp
index ff81dad26..f2d60d801 100644
--- a/src/slic3r/GUI/Plater.hpp
+++ b/src/slic3r/GUI/Plater.hpp
@@ -128,7 +128,11 @@ public:
Plater(const Plater &) = delete;
Plater &operator=(Plater &&) = delete;
Plater &operator=(const Plater &) = delete;
- ~Plater();
+ ~Plater() = default;
+
+#if ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
+ void render_project_state_debug_window() const;
+#endif // ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
Sidebar& sidebar();
Model& model();
diff --git a/src/slic3r/GUI/ProjectDirtyStateManager.cpp b/src/slic3r/GUI/ProjectDirtyStateManager.cpp
new file mode 100644
index 000000000..9a19676b2
--- /dev/null
+++ b/src/slic3r/GUI/ProjectDirtyStateManager.cpp
@@ -0,0 +1,47 @@
+#include "libslic3r/libslic3r.h"
+#include "ProjectDirtyStateManager.hpp"
+#include "ImGuiWrapper.hpp"
+#include "GUI_App.hpp"
+
+#if ENABLE_PROJECT_DIRTY_STATE
+
+namespace Slic3r {
+namespace GUI {
+
+#if ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
+void ProjectDirtyStateManager::render_debug_window() const
+{
+ auto color = [](bool value) {
+ return value ? ImVec4(1.0f, 0.49f, 0.216f, 1.0f) : ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
+ };
+ auto text = [](bool value) {
+ return value ? "true" : "false";
+ };
+
+ std::string title = "Project dirty state statistics";
+ ImGuiWrapper& imgui = *wxGetApp().imgui();
+ imgui.begin(title, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse);
+
+ bool dirty = is_dirty();
+ imgui.text_colored(color(dirty), "State:");
+ ImGui::SameLine();
+ imgui.text_colored(color(dirty), text(dirty));
+
+ ImGui::Separator();
+ imgui.text_colored(color(m_state.plater), "Plater:");
+ ImGui::SameLine();
+ imgui.text_colored(color(m_state.plater), text(m_state.plater));
+
+ imgui.text_colored(color(m_state.presets), "Presets:");
+ ImGui::SameLine();
+ imgui.text_colored(color(m_state.presets), text(m_state.presets));
+
+ imgui.end();
+}
+#endif // ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
+
+} // namespace GUI
+} // namespace Slic3r
+
+#endif // ENABLE_PROJECT_DIRTY_STATE
+
diff --git a/src/slic3r/GUI/ProjectDirtyStateManager.hpp b/src/slic3r/GUI/ProjectDirtyStateManager.hpp
new file mode 100644
index 000000000..81ac28915
--- /dev/null
+++ b/src/slic3r/GUI/ProjectDirtyStateManager.hpp
@@ -0,0 +1,35 @@
+#ifndef slic3r_ProjectDirtyStateManager_hpp_
+#define slic3r_ProjectDirtyStateManager_hpp_
+
+#if ENABLE_PROJECT_DIRTY_STATE
+
+namespace Slic3r {
+namespace GUI {
+
+class ProjectDirtyStateManager
+{
+ struct DirtyState
+ {
+ bool plater{ false };
+ bool presets{ false };
+
+ bool is_dirty() const { return plater || presets; }
+ };
+
+ DirtyState m_state;
+
+public:
+ bool is_dirty() const { return m_state.is_dirty(); }
+
+#if ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
+ void render_debug_window() const;
+#endif // ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
+};
+
+} // namespace GUI
+} // namespace Slic3r
+
+#endif // ENABLE_PROJECT_DIRTY_STATE
+
+#endif // slic3r_ProjectDirtyStateManager_hpp_
+