|
@@ -17,8 +17,74 @@
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
+#include <wx/window.h>
|
|
|
+#include <wx/event.h>
|
|
|
+
|
|
|
struct gs_window;
|
|
|
-class wxWindow;
|
|
|
|
|
|
gs_window WxToGSWindow(const wxWindow *window);
|
|
|
void OBSErrorBox(wxWindow *parent, const char *message, ...);
|
|
|
+
|
|
|
+/*
|
|
|
+ * RAII wx connection wrapper
|
|
|
+ *
|
|
|
+ * Automatically disconnects events on destruction rather than having to
|
|
|
+ * manually call Disconnect for every Connect.
|
|
|
+ */
|
|
|
+
|
|
|
+class WXConnector {
|
|
|
+ wxEvtHandler *obj;
|
|
|
+ wxEventType eventType;
|
|
|
+ wxObjectEventFunction func;
|
|
|
+ wxObject *userData;
|
|
|
+ wxEvtHandler *eventSink;
|
|
|
+
|
|
|
+public:
|
|
|
+ inline WXConnector()
|
|
|
+ : obj (NULL),
|
|
|
+ eventType (0),
|
|
|
+ func (NULL),
|
|
|
+ userData (NULL),
|
|
|
+ eventSink (NULL)
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ inline WXConnector(wxEvtHandler *obj, wxEventType eventType,
|
|
|
+ wxObjectEventFunction func, wxObject *userData,
|
|
|
+ wxEvtHandler *eventSink)
|
|
|
+ : obj (obj),
|
|
|
+ eventType (eventType),
|
|
|
+ func (func),
|
|
|
+ userData (userData),
|
|
|
+ eventSink (eventSink)
|
|
|
+ {
|
|
|
+ obj->Connect(eventType, func, userData, eventSink);
|
|
|
+ }
|
|
|
+
|
|
|
+ inline ~WXConnector()
|
|
|
+ {
|
|
|
+ Disconnect();
|
|
|
+ }
|
|
|
+
|
|
|
+ inline void Connect(wxEvtHandler *obj, wxEventType eventType,
|
|
|
+ wxObjectEventFunction func, wxObject *userData,
|
|
|
+ wxEvtHandler *eventSink)
|
|
|
+ {
|
|
|
+ Disconnect();
|
|
|
+
|
|
|
+ this->obj = obj;
|
|
|
+ this->eventType = eventType;
|
|
|
+ this->func = func;
|
|
|
+ this->userData = userData;
|
|
|
+ this->eventSink = eventSink;
|
|
|
+
|
|
|
+ obj->Connect(eventType, func, userData, eventSink);
|
|
|
+ }
|
|
|
+
|
|
|
+ inline void Disconnect()
|
|
|
+ {
|
|
|
+ if (obj)
|
|
|
+ obj->Disconnect(eventType, func, userData, eventSink);
|
|
|
+ obj = NULL;
|
|
|
+ }
|
|
|
+};
|