mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-08-05 09:07:39 +00:00
feat: Python Plugins
This commit is contained in:
66
src/slic3r/GUI/PluginProgressDialog.hpp
Normal file
66
src/slic3r/GUI/PluginProgressDialog.hpp
Normal file
@@ -0,0 +1,66 @@
|
||||
#ifndef slic3r_GUI_PluginProgressDialog_hpp_
|
||||
#define slic3r_GUI_PluginProgressDialog_hpp_
|
||||
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
|
||||
#include <wx/event.h>
|
||||
#include <wx/progdlg.h>
|
||||
#include <wx/string.h>
|
||||
#include <wx/timer.h>
|
||||
#include <wx/window.h>
|
||||
|
||||
namespace Slic3r { namespace GUI {
|
||||
|
||||
// A host-owned progress dialog for Python plugins. This class is deliberately
|
||||
// Python-agnostic; the plugin layer owns any pybind/GIL concerns and marshals
|
||||
// all calls to the UI thread.
|
||||
class PluginProgressDialog : public wxProgressDialog
|
||||
{
|
||||
public:
|
||||
using CloseHandler = std::function<void()>;
|
||||
|
||||
// on_destroyed runs from the destructor on every path and must touch
|
||||
// host-side state only (no Python / no derived members).
|
||||
PluginProgressDialog(wxWindow* parent,
|
||||
const wxString& title,
|
||||
const wxString& message,
|
||||
int maximum,
|
||||
int style,
|
||||
CloseHandler on_destroyed = nullptr);
|
||||
~PluginProgressDialog() override;
|
||||
|
||||
// Convenience helpers for plugin-host callers. MAIN-THREAD ONLY.
|
||||
static PluginProgressDialog* create_dialog(wxWindow* parent,
|
||||
const wxString& title,
|
||||
const wxString& message,
|
||||
int maximum,
|
||||
int style,
|
||||
CloseHandler on_destroyed);
|
||||
static bool pulse(PluginProgressDialog* dialog, const wxString& message = wxEmptyString);
|
||||
static bool update(PluginProgressDialog* dialog, int value, const wxString& message = wxEmptyString);
|
||||
static void start_pulse(PluginProgressDialog* dialog, int interval_ms, const wxString& message = wxEmptyString);
|
||||
static void stop_pulse(PluginProgressDialog* dialog);
|
||||
static void request_close(PluginProgressDialog* dialog);
|
||||
|
||||
// MAIN-THREAD ONLY.
|
||||
bool pulse(const wxString& message = wxEmptyString);
|
||||
bool update(int value, const wxString& message = wxEmptyString);
|
||||
void start_pulse(int interval_ms, const wxString& message = wxEmptyString);
|
||||
void stop_pulse();
|
||||
void close();
|
||||
bool is_open() const { return m_open; }
|
||||
|
||||
private:
|
||||
void on_close_window(wxCloseEvent& event);
|
||||
void on_timer(wxTimerEvent& event);
|
||||
|
||||
bool m_open{true};
|
||||
wxString m_pulse_message;
|
||||
std::unique_ptr<wxTimer> m_timer;
|
||||
CloseHandler m_on_destroyed;
|
||||
};
|
||||
|
||||
}} // namespace Slic3r::GUI
|
||||
|
||||
#endif // slic3r_GUI_PluginProgressDialog_hpp_
|
||||
Reference in New Issue
Block a user