Move wxThreadEvent into wxBase.
For this, it cannot derive from wxCommandEvent. Extracted the bits from wxCommandEvent useful for passing data between threads into wxEventBasicPayloadMixin helper class shared by both. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68076 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -455,6 +455,7 @@ All:
|
|||||||
- Added wxThread::Wait() and Delete() "wait mode" parameter (Catalin Raceanu).
|
- Added wxThread::Wait() and Delete() "wait mode" parameter (Catalin Raceanu).
|
||||||
- Allow showing milliseconds in wxLog time stamps (tan).
|
- Allow showing milliseconds in wxLog time stamps (tan).
|
||||||
- Added support for processing instructions in wxXmlDocument (Nick Matthews).
|
- Added support for processing instructions in wxXmlDocument (Nick Matthews).
|
||||||
|
- Added wxThreadEvent for communicating between threads to wxBase.
|
||||||
|
|
||||||
Unix:
|
Unix:
|
||||||
|
|
||||||
|
@@ -615,8 +615,9 @@ extern WXDLLIMPEXP_BASE const wxEventType wxEVT_FIRST;
|
|||||||
extern WXDLLIMPEXP_BASE const wxEventType wxEVT_USER_FIRST;
|
extern WXDLLIMPEXP_BASE const wxEventType wxEVT_USER_FIRST;
|
||||||
|
|
||||||
// Need events declared to do this
|
// Need events declared to do this
|
||||||
|
class WXDLLIMPEXP_FWD_BASE wxIdleEvent;
|
||||||
|
class WXDLLIMPEXP_FWD_BASE wxThreadEvent;
|
||||||
class WXDLLIMPEXP_FWD_CORE wxCommandEvent;
|
class WXDLLIMPEXP_FWD_CORE wxCommandEvent;
|
||||||
class WXDLLIMPEXP_FWD_CORE wxThreadEvent;
|
|
||||||
class WXDLLIMPEXP_FWD_CORE wxMouseEvent;
|
class WXDLLIMPEXP_FWD_CORE wxMouseEvent;
|
||||||
class WXDLLIMPEXP_FWD_CORE wxFocusEvent;
|
class WXDLLIMPEXP_FWD_CORE wxFocusEvent;
|
||||||
class WXDLLIMPEXP_FWD_CORE wxChildFocusEvent;
|
class WXDLLIMPEXP_FWD_CORE wxChildFocusEvent;
|
||||||
@@ -649,7 +650,6 @@ class WXDLLIMPEXP_FWD_CORE wxPaletteChangedEvent;
|
|||||||
class WXDLLIMPEXP_FWD_CORE wxJoystickEvent;
|
class WXDLLIMPEXP_FWD_CORE wxJoystickEvent;
|
||||||
class WXDLLIMPEXP_FWD_CORE wxDropFilesEvent;
|
class WXDLLIMPEXP_FWD_CORE wxDropFilesEvent;
|
||||||
class WXDLLIMPEXP_FWD_CORE wxInitDialogEvent;
|
class WXDLLIMPEXP_FWD_CORE wxInitDialogEvent;
|
||||||
class WXDLLIMPEXP_FWD_CORE wxIdleEvent;
|
|
||||||
class WXDLLIMPEXP_FWD_CORE wxUpdateUIEvent;
|
class WXDLLIMPEXP_FWD_CORE wxUpdateUIEvent;
|
||||||
class WXDLLIMPEXP_FWD_CORE wxClipboardTextEvent;
|
class WXDLLIMPEXP_FWD_CORE wxClipboardTextEvent;
|
||||||
class WXDLLIMPEXP_FWD_CORE wxHelpEvent;
|
class WXDLLIMPEXP_FWD_CORE wxHelpEvent;
|
||||||
@@ -678,7 +678,7 @@ wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_COMBOBOX_DROPDOWN, wxCo
|
|||||||
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_COMBOBOX_CLOSEUP, wxCommandEvent);
|
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_COMBOBOX_CLOSEUP, wxCommandEvent);
|
||||||
|
|
||||||
// Thread events
|
// Thread events
|
||||||
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_THREAD, wxThreadEvent);
|
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_BASE, wxEVT_THREAD, wxThreadEvent);
|
||||||
|
|
||||||
// Mouse event types
|
// Mouse event types
|
||||||
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_LEFT_DOWN, wxMouseEvent);
|
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_LEFT_DOWN, wxMouseEvent);
|
||||||
@@ -1116,6 +1116,148 @@ private:
|
|||||||
wxDECLARE_NO_COPY_CLASS(wxEventProcessInHandlerOnly);
|
wxDECLARE_NO_COPY_CLASS(wxEventProcessInHandlerOnly);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_BASE wxEventBasicPayloadMixin
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxEventBasicPayloadMixin()
|
||||||
|
: m_commandInt(0),
|
||||||
|
m_extraLong(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetString(const wxString& s) { m_cmdString = s; }
|
||||||
|
const wxString& GetString() const { return m_cmdString; }
|
||||||
|
|
||||||
|
void SetInt(int i) { m_commandInt = i; }
|
||||||
|
int GetInt() const { return m_commandInt; }
|
||||||
|
|
||||||
|
void SetExtraLong(long extraLong) { m_extraLong = extraLong; }
|
||||||
|
long GetExtraLong() const { return m_extraLong; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// Note: these variables have "cmd" or "command" in their name for backward compatibility:
|
||||||
|
// they used to be part of wxCommandEvent, not this mixin.
|
||||||
|
wxString m_cmdString; // String event argument
|
||||||
|
int m_commandInt;
|
||||||
|
long m_extraLong; // Additional information (e.g. select/deselect)
|
||||||
|
|
||||||
|
wxDECLARE_NO_ASSIGN_CLASS(wxEventBasicPayloadMixin);
|
||||||
|
};
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_BASE wxEventAnyPayloadMixin : public wxEventBasicPayloadMixin
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxEventAnyPayloadMixin() : wxEventBasicPayloadMixin() {}
|
||||||
|
|
||||||
|
#if wxUSE_ANY && (!defined(__VISUALC__) || wxCHECK_VISUALC_VERSION(7))
|
||||||
|
template<typename T>
|
||||||
|
void SetPayload(const T& payload)
|
||||||
|
{
|
||||||
|
m_payload = payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
T GetPayload() const
|
||||||
|
{
|
||||||
|
return m_payload.As<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
wxAny m_payload;
|
||||||
|
#endif // wxUSE_ANY && (!defined(__VISUALC__) || wxCHECK_VISUALC_VERSION(7))
|
||||||
|
|
||||||
|
wxDECLARE_NO_ASSIGN_CLASS(wxEventBasicPayloadMixin);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Idle event
|
||||||
|
/*
|
||||||
|
wxEVT_IDLE
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Whether to always send idle events to windows, or
|
||||||
|
// to only send update events to those with the
|
||||||
|
// wxWS_EX_PROCESS_IDLE style.
|
||||||
|
|
||||||
|
enum wxIdleMode
|
||||||
|
{
|
||||||
|
// Send idle events to all windows
|
||||||
|
wxIDLE_PROCESS_ALL,
|
||||||
|
|
||||||
|
// Send idle events to windows that have
|
||||||
|
// the wxWS_EX_PROCESS_IDLE flag specified
|
||||||
|
wxIDLE_PROCESS_SPECIFIED
|
||||||
|
};
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_BASE wxIdleEvent : public wxEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxIdleEvent()
|
||||||
|
: wxEvent(0, wxEVT_IDLE),
|
||||||
|
m_requestMore(false)
|
||||||
|
{ }
|
||||||
|
wxIdleEvent(const wxIdleEvent& event)
|
||||||
|
: wxEvent(event),
|
||||||
|
m_requestMore(event.m_requestMore)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
void RequestMore(bool needMore = true) { m_requestMore = needMore; }
|
||||||
|
bool MoreRequested() const { return m_requestMore; }
|
||||||
|
|
||||||
|
virtual wxEvent *Clone() const { return new wxIdleEvent(*this); }
|
||||||
|
|
||||||
|
// Specify how wxWidgets will send idle events: to
|
||||||
|
// all windows, or only to those which specify that they
|
||||||
|
// will process the events.
|
||||||
|
static void SetMode(wxIdleMode mode) { sm_idleMode = mode; }
|
||||||
|
|
||||||
|
// Returns the idle event mode
|
||||||
|
static wxIdleMode GetMode() { return sm_idleMode; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool m_requestMore;
|
||||||
|
static wxIdleMode sm_idleMode;
|
||||||
|
|
||||||
|
private:
|
||||||
|
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxIdleEvent)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Thread event
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_BASE wxThreadEvent : public wxEvent,
|
||||||
|
public wxEventAnyPayloadMixin
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxThreadEvent(wxEventType eventType = wxEVT_THREAD, int id = wxID_ANY)
|
||||||
|
: wxEvent(id, eventType)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
wxThreadEvent(const wxThreadEvent& event)
|
||||||
|
: wxEvent(event),
|
||||||
|
wxEventAnyPayloadMixin(event)
|
||||||
|
{
|
||||||
|
// make sure our string member (which uses COW, aka refcounting) is not
|
||||||
|
// shared by other wxString instances:
|
||||||
|
SetString(GetString().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual wxEvent *Clone() const
|
||||||
|
{
|
||||||
|
return new wxThreadEvent(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// this is important to avoid that calling wxEventLoopBase::YieldFor thread events
|
||||||
|
// gets processed when this is unwanted:
|
||||||
|
virtual wxEventCategory GetEventCategory() const
|
||||||
|
{ return wxEVT_CATEGORY_THREAD; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxThreadEvent)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#if wxUSE_GUI
|
#if wxUSE_GUI
|
||||||
|
|
||||||
|
|
||||||
@@ -1138,16 +1280,15 @@ private:
|
|||||||
wxEVT_COMMAND_TOGGLEBUTTON_CLICKED
|
wxEVT_COMMAND_TOGGLEBUTTON_CLICKED
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent
|
class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent,
|
||||||
|
public wxEventBasicPayloadMixin
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxCommandEvent(wxEventType commandType = wxEVT_NULL, int winid = 0);
|
wxCommandEvent(wxEventType commandType = wxEVT_NULL, int winid = 0);
|
||||||
|
|
||||||
wxCommandEvent(const wxCommandEvent& event)
|
wxCommandEvent(const wxCommandEvent& event)
|
||||||
: wxEvent(event),
|
: wxEvent(event),
|
||||||
m_cmdString(event.m_cmdString),
|
wxEventBasicPayloadMixin(event),
|
||||||
m_commandInt(event.m_commandInt),
|
|
||||||
m_extraLong(event.m_extraLong),
|
|
||||||
m_clientData(event.m_clientData),
|
m_clientData(event.m_clientData),
|
||||||
m_clientObject(event.m_clientObject)
|
m_clientObject(event.m_clientObject)
|
||||||
{ }
|
{ }
|
||||||
@@ -1160,32 +1301,23 @@ public:
|
|||||||
void SetClientObject(wxClientData* clientObject) { m_clientObject = clientObject; }
|
void SetClientObject(wxClientData* clientObject) { m_clientObject = clientObject; }
|
||||||
wxClientData *GetClientObject() const { return m_clientObject; }
|
wxClientData *GetClientObject() const { return m_clientObject; }
|
||||||
|
|
||||||
|
// Note: this shadows wxEventBasicPayloadMixin::GetString(), because it does some
|
||||||
|
// GUI-specific hacks
|
||||||
|
wxString GetString() const;
|
||||||
|
|
||||||
// Get listbox selection if single-choice
|
// Get listbox selection if single-choice
|
||||||
int GetSelection() const { return m_commandInt; }
|
int GetSelection() const { return m_commandInt; }
|
||||||
|
|
||||||
// Set/Get listbox/choice selection string
|
|
||||||
void SetString(const wxString& s) { m_cmdString = s; }
|
|
||||||
wxString GetString() const;
|
|
||||||
|
|
||||||
// Get checkbox value
|
// Get checkbox value
|
||||||
bool IsChecked() const { return m_commandInt != 0; }
|
bool IsChecked() const { return m_commandInt != 0; }
|
||||||
|
|
||||||
// true if the listbox event was a selection.
|
// true if the listbox event was a selection.
|
||||||
bool IsSelection() const { return (m_extraLong != 0); }
|
bool IsSelection() const { return (m_extraLong != 0); }
|
||||||
|
|
||||||
void SetExtraLong(long extraLong) { m_extraLong = extraLong; }
|
|
||||||
long GetExtraLong() const { return m_extraLong; }
|
|
||||||
|
|
||||||
void SetInt(int i) { m_commandInt = i; }
|
|
||||||
int GetInt() const { return m_commandInt; }
|
|
||||||
|
|
||||||
virtual wxEvent *Clone() const { return new wxCommandEvent(*this); }
|
virtual wxEvent *Clone() const { return new wxCommandEvent(*this); }
|
||||||
virtual wxEventCategory GetEventCategory() const { return wxEVT_CATEGORY_USER_INPUT; }
|
virtual wxEventCategory GetEventCategory() const { return wxEVT_CATEGORY_USER_INPUT; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
wxString m_cmdString; // String event argument
|
|
||||||
int m_commandInt;
|
|
||||||
long m_extraLong; // Additional information (e.g. select/deselect)
|
|
||||||
void* m_clientData; // Arbitrary client data
|
void* m_clientData; // Arbitrary client data
|
||||||
wxClientData* m_clientObject; // Arbitrary client object
|
wxClientData* m_clientObject; // Arbitrary client object
|
||||||
|
|
||||||
@@ -1225,60 +1357,6 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Thread event
|
|
||||||
|
|
||||||
class WXDLLIMPEXP_CORE wxThreadEvent : public wxCommandEvent
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
wxThreadEvent(wxEventType eventType = wxEVT_COMMAND_THREAD, int id = wxID_ANY)
|
|
||||||
: wxCommandEvent(eventType, id)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
wxThreadEvent(const wxThreadEvent& event)
|
|
||||||
: wxCommandEvent(event)
|
|
||||||
{
|
|
||||||
// make sure our string member (which uses COW, aka refcounting) is not
|
|
||||||
// shared by other wxString instances:
|
|
||||||
SetString(GetString().c_str());
|
|
||||||
|
|
||||||
#if wxUSE_ANY && (!defined(__VISUALC__) || wxCHECK_VISUALC_VERSION(7))
|
|
||||||
m_payload = event.m_payload;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual wxEvent *Clone() const
|
|
||||||
{
|
|
||||||
return new wxThreadEvent(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// this is important to avoid that calling wxEventLoopBase::YieldFor thread events
|
|
||||||
// gets processed when this is unwanted:
|
|
||||||
virtual wxEventCategory GetEventCategory() const
|
|
||||||
{ return wxEVT_CATEGORY_THREAD; }
|
|
||||||
|
|
||||||
#if wxUSE_ANY && (!defined(__VISUALC__) || wxCHECK_VISUALC_VERSION(7))
|
|
||||||
template<typename T>
|
|
||||||
void SetPayload(const T& payload)
|
|
||||||
{
|
|
||||||
m_payload = payload;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
T GetPayload() const
|
|
||||||
{
|
|
||||||
return m_payload.As<T>();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
wxAny m_payload;
|
|
||||||
#endif // wxUSE_ANY && (!defined(__VISUALC__) || wxCHECK_VISUALC_VERSION(7))
|
|
||||||
|
|
||||||
private:
|
|
||||||
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxThreadEvent)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Scroll event class, derived form wxCommandEvent. wxScrollEvents are
|
// Scroll event class, derived form wxCommandEvent. wxScrollEvents are
|
||||||
// sent by wxSlider and wxScrollBar.
|
// sent by wxSlider and wxScrollBar.
|
||||||
/*
|
/*
|
||||||
@@ -2726,59 +2804,6 @@ private:
|
|||||||
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxContextMenuEvent)
|
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxContextMenuEvent)
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // wxUSE_GUI
|
|
||||||
|
|
||||||
// Idle event
|
|
||||||
/*
|
|
||||||
wxEVT_IDLE
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Whether to always send idle events to windows, or
|
|
||||||
// to only send update events to those with the
|
|
||||||
// wxWS_EX_PROCESS_IDLE style.
|
|
||||||
|
|
||||||
enum wxIdleMode
|
|
||||||
{
|
|
||||||
// Send idle events to all windows
|
|
||||||
wxIDLE_PROCESS_ALL,
|
|
||||||
|
|
||||||
// Send idle events to windows that have
|
|
||||||
// the wxWS_EX_PROCESS_IDLE flag specified
|
|
||||||
wxIDLE_PROCESS_SPECIFIED
|
|
||||||
};
|
|
||||||
|
|
||||||
class WXDLLIMPEXP_BASE wxIdleEvent : public wxEvent
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
wxIdleEvent()
|
|
||||||
: wxEvent(0, wxEVT_IDLE),
|
|
||||||
m_requestMore(false)
|
|
||||||
{ }
|
|
||||||
wxIdleEvent(const wxIdleEvent& event)
|
|
||||||
: wxEvent(event),
|
|
||||||
m_requestMore(event.m_requestMore)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
void RequestMore(bool needMore = true) { m_requestMore = needMore; }
|
|
||||||
bool MoreRequested() const { return m_requestMore; }
|
|
||||||
|
|
||||||
virtual wxEvent *Clone() const { return new wxIdleEvent(*this); }
|
|
||||||
|
|
||||||
// Specify how wxWidgets will send idle events: to
|
|
||||||
// all windows, or only to those which specify that they
|
|
||||||
// will process the events.
|
|
||||||
static void SetMode(wxIdleMode mode) { sm_idleMode = mode; }
|
|
||||||
|
|
||||||
// Returns the idle event mode
|
|
||||||
static wxIdleMode GetMode() { return sm_idleMode; }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
bool m_requestMore;
|
|
||||||
static wxIdleMode sm_idleMode;
|
|
||||||
|
|
||||||
private:
|
|
||||||
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxIdleEvent)
|
|
||||||
};
|
|
||||||
|
|
||||||
/* TODO
|
/* TODO
|
||||||
wxEVT_MOUSE_CAPTURE_CHANGED,
|
wxEVT_MOUSE_CAPTURE_CHANGED,
|
||||||
@@ -2790,6 +2815,7 @@ private:
|
|||||||
wxEVT_COMPARE_ITEM
|
wxEVT_COMPARE_ITEM
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#endif // wxUSE_GUI
|
||||||
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -3422,11 +3448,14 @@ inline void wxQueueEvent(wxEvtHandler *dest, wxEvent *event)
|
|||||||
|
|
||||||
typedef void (wxEvtHandler::*wxEventFunction)(wxEvent&);
|
typedef void (wxEvtHandler::*wxEventFunction)(wxEvent&);
|
||||||
typedef void (wxEvtHandler::*wxIdleEventFunction)(wxIdleEvent&);
|
typedef void (wxEvtHandler::*wxIdleEventFunction)(wxIdleEvent&);
|
||||||
|
typedef void (wxEvtHandler::*wxThreadEventFunction)(wxThreadEvent&);
|
||||||
|
|
||||||
#define wxEventHandler(func) \
|
#define wxEventHandler(func) \
|
||||||
wxEVENT_HANDLER_CAST(wxEventFunction, func)
|
wxEVENT_HANDLER_CAST(wxEventFunction, func)
|
||||||
#define wxIdleEventHandler(func) \
|
#define wxIdleEventHandler(func) \
|
||||||
wxEVENT_HANDLER_CAST(wxIdleEventFunction, func)
|
wxEVENT_HANDLER_CAST(wxIdleEventFunction, func)
|
||||||
|
#define wxThreadEventHandler(func) \
|
||||||
|
wxEVENT_HANDLER_CAST(wxThreadEventFunction, func)
|
||||||
|
|
||||||
#if wxUSE_GUI
|
#if wxUSE_GUI
|
||||||
|
|
||||||
@@ -3455,7 +3484,6 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
typedef void (wxEvtHandler::*wxCommandEventFunction)(wxCommandEvent&);
|
typedef void (wxEvtHandler::*wxCommandEventFunction)(wxCommandEvent&);
|
||||||
typedef void (wxEvtHandler::*wxThreadEventFunction)(wxThreadEvent&);
|
|
||||||
typedef void (wxEvtHandler::*wxScrollEventFunction)(wxScrollEvent&);
|
typedef void (wxEvtHandler::*wxScrollEventFunction)(wxScrollEvent&);
|
||||||
typedef void (wxEvtHandler::*wxScrollWinEventFunction)(wxScrollWinEvent&);
|
typedef void (wxEvtHandler::*wxScrollWinEventFunction)(wxScrollWinEvent&);
|
||||||
typedef void (wxEvtHandler::*wxSizeEventFunction)(wxSizeEvent&);
|
typedef void (wxEvtHandler::*wxSizeEventFunction)(wxSizeEvent&);
|
||||||
@@ -3495,8 +3523,6 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&
|
|||||||
|
|
||||||
#define wxCommandEventHandler(func) \
|
#define wxCommandEventHandler(func) \
|
||||||
wxEVENT_HANDLER_CAST(wxCommandEventFunction, func)
|
wxEVENT_HANDLER_CAST(wxCommandEventFunction, func)
|
||||||
#define wxThreadEventHandler(func) \
|
|
||||||
wxEVENT_HANDLER_CAST(wxThreadEventFunction, func)
|
|
||||||
#define wxScrollEventHandler(func) \
|
#define wxScrollEventHandler(func) \
|
||||||
wxEVENT_HANDLER_CAST(wxScrollEventFunction, func)
|
wxEVENT_HANDLER_CAST(wxScrollEventFunction, func)
|
||||||
#define wxScrollWinEventHandler(func) \
|
#define wxScrollWinEventHandler(func) \
|
||||||
@@ -3980,7 +4006,9 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&
|
|||||||
#define EVT_TEXT_PASTE(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_PASTE, winid, wxClipboardTextEventHandler(func))
|
#define EVT_TEXT_PASTE(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_PASTE, winid, wxClipboardTextEventHandler(func))
|
||||||
|
|
||||||
// Thread events
|
// Thread events
|
||||||
#define EVT_THREAD(id, func) wx__DECLARE_EVT1(wxEVT_COMMAND_THREAD, id, wxThreadEventHandler(func))
|
#define EVT_THREAD(id, func) wx__DECLARE_EVT1(wxEVT_THREAD, id, wxThreadEventHandler(func))
|
||||||
|
// alias for backward compatibility with 2.9.0:
|
||||||
|
#define wxEVT_COMMAND_THREAD wxEVT_THREAD
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Helper functions
|
// Helper functions
|
||||||
|
@@ -3036,14 +3036,16 @@ public:
|
|||||||
@category{events,threading}
|
@category{events,threading}
|
||||||
|
|
||||||
@see @ref overview_thread, wxEventLoopBase::YieldFor
|
@see @ref overview_thread, wxEventLoopBase::YieldFor
|
||||||
|
|
||||||
|
@since 2.9.0
|
||||||
*/
|
*/
|
||||||
class wxThreadEvent : public wxCommandEvent
|
class wxThreadEvent : public wxEvent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
Constructor.
|
Constructor.
|
||||||
*/
|
*/
|
||||||
wxThreadEvent(wxEventType eventType = wxEVT_COMMAND_THREAD, int id = wxID_ANY);
|
wxThreadEvent(wxEventType eventType = wxEVT_THREAD, int id = wxID_ANY);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Clones this event making sure that all internal members which use
|
Clones this event making sure that all internal members which use
|
||||||
@@ -3090,6 +3092,37 @@ public:
|
|||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T GetPayload() const;
|
T GetPayload() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns extra information integer value.
|
||||||
|
*/
|
||||||
|
long GetExtraLong() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns stored integer value.
|
||||||
|
*/
|
||||||
|
int GetInt() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns stored string value.
|
||||||
|
*/
|
||||||
|
wxString GetString() const;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Sets the extra information value.
|
||||||
|
*/
|
||||||
|
void SetExtraLong(long extraLong);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Sets the integer value.
|
||||||
|
*/
|
||||||
|
void SetInt(int intCommand);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Sets the string value.
|
||||||
|
*/
|
||||||
|
void SetString(const wxString& string);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -4244,7 +4277,7 @@ wxEventType wxEVT_COMMAND_TOOL_DROPDOWN_CLICKED;
|
|||||||
wxEventType wxEVT_COMMAND_TOOL_ENTER;
|
wxEventType wxEVT_COMMAND_TOOL_ENTER;
|
||||||
wxEventType wxEVT_COMMAND_COMBOBOX_DROPDOWN;
|
wxEventType wxEVT_COMMAND_COMBOBOX_DROPDOWN;
|
||||||
wxEventType wxEVT_COMMAND_COMBOBOX_CLOSEUP;
|
wxEventType wxEVT_COMMAND_COMBOBOX_CLOSEUP;
|
||||||
wxEventType wxEVT_COMMAND_THREAD;
|
wxEventType wxEVT_THREAD;
|
||||||
wxEventType wxEVT_LEFT_DOWN;
|
wxEventType wxEVT_LEFT_DOWN;
|
||||||
wxEventType wxEVT_LEFT_UP;
|
wxEventType wxEVT_LEFT_UP;
|
||||||
wxEventType wxEVT_MIDDLE_DOWN;
|
wxEventType wxEVT_MIDDLE_DOWN;
|
||||||
|
@@ -150,10 +150,10 @@ MyDllApp::MyDllApp()
|
|||||||
|
|
||||||
Connect(wxEVT_IDLE, wxIdleEventHandler(MyDllApp::OnIdle));
|
Connect(wxEVT_IDLE, wxIdleEventHandler(MyDllApp::OnIdle));
|
||||||
Connect(CMD_SHOW_WINDOW,
|
Connect(CMD_SHOW_WINDOW,
|
||||||
wxEVT_COMMAND_THREAD,
|
wxEVT_THREAD,
|
||||||
wxThreadEventHandler(MyDllApp::OnShowWindow));
|
wxThreadEventHandler(MyDllApp::OnShowWindow));
|
||||||
Connect(CMD_TERMINATE,
|
Connect(CMD_TERMINATE,
|
||||||
wxEVT_COMMAND_THREAD,
|
wxEVT_THREAD,
|
||||||
wxThreadEventHandler(MyDllApp::OnTerminate));
|
wxThreadEventHandler(MyDllApp::OnTerminate));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,7 +288,7 @@ void run_wx_gui_from_dll(const char *title)
|
|||||||
|
|
||||||
// Send a message to wx thread to show a new frame:
|
// Send a message to wx thread to show a new frame:
|
||||||
wxThreadEvent *event =
|
wxThreadEvent *event =
|
||||||
new wxThreadEvent(wxEVT_COMMAND_THREAD, CMD_SHOW_WINDOW);
|
new wxThreadEvent(wxEVT_THREAD, CMD_SHOW_WINDOW);
|
||||||
event->SetString(title);
|
event->SetString(title);
|
||||||
wxQueueEvent(wxApp::GetInstance(), event);
|
wxQueueEvent(wxApp::GetInstance(), event);
|
||||||
}
|
}
|
||||||
@@ -303,7 +303,7 @@ void wx_dll_cleanup()
|
|||||||
// If wx main thread is running, we need to stop it. To accomplish this,
|
// If wx main thread is running, we need to stop it. To accomplish this,
|
||||||
// send a message telling it to terminate the app.
|
// send a message telling it to terminate the app.
|
||||||
wxThreadEvent *event =
|
wxThreadEvent *event =
|
||||||
new wxThreadEvent(wxEVT_COMMAND_THREAD, CMD_TERMINATE);
|
new wxThreadEvent(wxEVT_THREAD, CMD_TERMINATE);
|
||||||
wxQueueEvent(wxApp::GetInstance(), event);
|
wxQueueEvent(wxApp::GetInstance(), event);
|
||||||
|
|
||||||
// We must then wait for the thread to actually terminate.
|
// We must then wait for the thread to actually terminate.
|
||||||
|
@@ -969,7 +969,7 @@ wxThread::ExitCode MyWorkerThread::Entry()
|
|||||||
if ( TestDestroy() )
|
if ( TestDestroy() )
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
wxThreadEvent event( wxEVT_COMMAND_THREAD, WORKER_EVENT );
|
wxThreadEvent event( wxEVT_THREAD, WORKER_EVENT );
|
||||||
|
|
||||||
event.SetInt( 50 );
|
event.SetInt( 50 );
|
||||||
wxQueueEvent( m_frame, event.Clone() );
|
wxQueueEvent( m_frame, event.Clone() );
|
||||||
@@ -984,7 +984,7 @@ wxThread::ExitCode MyWorkerThread::Entry()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
// create any type of command event here
|
// create any type of command event here
|
||||||
wxThreadEvent event( wxEVT_COMMAND_THREAD, WORKER_EVENT );
|
wxThreadEvent event( wxEVT_THREAD, WORKER_EVENT );
|
||||||
event.SetInt( m_count );
|
event.SetInt( m_count );
|
||||||
|
|
||||||
// send in a thread-safe way
|
// send in a thread-safe way
|
||||||
@@ -993,7 +993,7 @@ wxThread::ExitCode MyWorkerThread::Entry()
|
|||||||
wxMilliSleep(200);
|
wxMilliSleep(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxThreadEvent event( wxEVT_COMMAND_THREAD, WORKER_EVENT );
|
wxThreadEvent event( wxEVT_THREAD, WORKER_EVENT );
|
||||||
event.SetInt(-1); // that's all
|
event.SetInt(-1); // that's all
|
||||||
wxQueueEvent( m_frame, event.Clone() );
|
wxQueueEvent( m_frame, event.Clone() );
|
||||||
#endif
|
#endif
|
||||||
@@ -1043,7 +1043,7 @@ wxThread::ExitCode MyGUIThread::Entry()
|
|||||||
wxMutexGuiLeave();
|
wxMutexGuiLeave();
|
||||||
|
|
||||||
// notify the dialog that another piece of our masterpiece is complete:
|
// notify the dialog that another piece of our masterpiece is complete:
|
||||||
wxThreadEvent event( wxEVT_COMMAND_THREAD, GUITHREAD_EVENT );
|
wxThreadEvent event( wxEVT_THREAD, GUITHREAD_EVENT );
|
||||||
event.SetInt(i+1);
|
event.SetInt(i+1);
|
||||||
wxQueueEvent( m_dlg, event.Clone() );
|
wxQueueEvent( m_dlg, event.Clone() );
|
||||||
|
|
||||||
|
@@ -62,11 +62,11 @@
|
|||||||
IMPLEMENT_DYNAMIC_CLASS(wxEvtHandler, wxObject)
|
IMPLEMENT_DYNAMIC_CLASS(wxEvtHandler, wxObject)
|
||||||
IMPLEMENT_ABSTRACT_CLASS(wxEvent, wxObject)
|
IMPLEMENT_ABSTRACT_CLASS(wxEvent, wxObject)
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxIdleEvent, wxEvent)
|
IMPLEMENT_DYNAMIC_CLASS(wxIdleEvent, wxEvent)
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxThreadEvent, wxEvent)
|
||||||
#endif // wxUSE_BASE
|
#endif // wxUSE_BASE
|
||||||
|
|
||||||
#if wxUSE_GUI
|
#if wxUSE_GUI
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxCommandEvent, wxEvent)
|
IMPLEMENT_DYNAMIC_CLASS(wxCommandEvent, wxEvent)
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadEvent, wxCommandEvent)
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxNotifyEvent, wxCommandEvent)
|
IMPLEMENT_DYNAMIC_CLASS(wxNotifyEvent, wxCommandEvent)
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxScrollEvent, wxCommandEvent)
|
IMPLEMENT_DYNAMIC_CLASS(wxScrollEvent, wxCommandEvent)
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxScrollWinEvent, wxEvent)
|
IMPLEMENT_DYNAMIC_CLASS(wxScrollWinEvent, wxEvent)
|
||||||
@@ -155,6 +155,9 @@ const wxEventType wxEVT_NULL = wxNewEventType();
|
|||||||
|
|
||||||
wxDEFINE_EVENT( wxEVT_IDLE, wxIdleEvent );
|
wxDEFINE_EVENT( wxEVT_IDLE, wxIdleEvent );
|
||||||
|
|
||||||
|
// Thread event
|
||||||
|
wxDEFINE_EVENT( wxEVT_THREAD, wxThreadEvent );
|
||||||
|
|
||||||
#endif // wxUSE_BASE
|
#endif // wxUSE_BASE
|
||||||
|
|
||||||
#if wxUSE_GUI
|
#if wxUSE_GUI
|
||||||
@@ -312,9 +315,6 @@ wxDEFINE_EVENT( wxEVT_COMMAND_ENTER, wxCommandEvent );
|
|||||||
wxDEFINE_EVENT( wxEVT_HELP, wxHelpEvent );
|
wxDEFINE_EVENT( wxEVT_HELP, wxHelpEvent );
|
||||||
wxDEFINE_EVENT( wxEVT_DETAILED_HELP, wxHelpEvent );
|
wxDEFINE_EVENT( wxEVT_DETAILED_HELP, wxHelpEvent );
|
||||||
|
|
||||||
// Thread event
|
|
||||||
wxDEFINE_EVENT( wxEVT_COMMAND_THREAD, wxThreadEvent );
|
|
||||||
|
|
||||||
#endif // wxUSE_GUI
|
#endif // wxUSE_GUI
|
||||||
|
|
||||||
#if wxUSE_BASE
|
#if wxUSE_BASE
|
||||||
@@ -422,8 +422,6 @@ wxCommandEvent::wxCommandEvent(wxEventType commandType, int theId)
|
|||||||
{
|
{
|
||||||
m_clientData = NULL;
|
m_clientData = NULL;
|
||||||
m_clientObject = NULL;
|
m_clientObject = NULL;
|
||||||
m_extraLong = 0;
|
|
||||||
m_commandInt = 0;
|
|
||||||
m_isCommandEvent = true;
|
m_isCommandEvent = true;
|
||||||
|
|
||||||
// the command events are propagated upwards by default
|
// the command events are propagated upwards by default
|
||||||
|
Reference in New Issue
Block a user