X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/39fb805670c28f2977f7336633a191a432ef433c..cdbcf4c286ea989bfb8922a54d9e3f80b3fc9bcb:/interface/event.h?ds=sidebyside diff --git a/interface/event.h b/interface/event.h index 28e44fed5d..e97a4d699a 100644 --- a/interface/event.h +++ b/interface/event.h @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: event.h -// Purpose: interface of wxKeyEvent +// Purpose: interface of wx*Event classes // Author: wxWidgets team // RCS-ID: $Id$ // Licence: wxWindows license @@ -23,9 +23,10 @@ Both key events provide untranslated key codes while the char event carries the translated one. The untranslated code for alphanumeric keys is always an upper case value. For the other keys it is one of @c WXK_XXX values - from the @ref overview_keycodes "keycodes table". The translated key is, in - general, the character the user expects to appear as the result of the key - combination when typing the text into a text entry zone, for example. + from the @ref page_keycodes. + The translated key is, in general, the character the user expects to appear + as the result of the key combination when typing the text into a text entry + zone, for example. A few examples to clarify this (all assume that CAPS LOCK is unpressed and the standard US keyboard): when the @c 'A' key is pressed, the key down @@ -37,33 +38,43 @@ Although in this simple case it is clear that the correct key code could be found in the key down event handler by checking the value returned by - wxKeyEvent::ShiftDown, in general you should use - @c EVT_CHAR for this as for non-alphanumeric keys the translation is - keyboard-layout dependent and can only be done properly by the system itself. + wxKeyEvent::ShiftDown(), in general you should use @c EVT_CHAR for this as + for non-alphanumeric keys the translation is keyboard-layout dependent and + can only be done properly by the system itself. Another kind of translation is done when the control key is pressed: for example, for CTRL-A key press the key down event still carries the - same key code @c 'a' as usual but the char event will have key code of - 1, the ASCII value of this key combination. + same key code @c 'a' as usual but the char event will have key code of 1, + the ASCII value of this key combination. You may discover how the other keys on your system behave interactively by - running the text() wxWidgets sample and pressing some keys + running the @ref page_samples_text wxWidgets sample and pressing some keys in any of the text controls shown in it. - @b Note: If a key down (@c EVT_KEY_DOWN) event is caught and - the event handler does not call @c event.Skip() then the corresponding - char event (@c EVT_CHAR) will not happen. This is by design and - enables the programs that handle both types of events to be a bit - simpler. - - @b Note for Windows programmers: The key and char events in wxWidgets are - similar to but slightly different from Windows @c WM_KEYDOWN and - @c WM_CHAR events. In particular, Alt-x combination will generate a char - event in wxWidgets (unless it is used as an accelerator). - @b Tip: be sure to call @c event.Skip() for events that you don't process in key event function, otherwise menu shortcuts may cease to work under Windows. + @note If a key down (@c EVT_KEY_DOWN) event is caught and the event handler + does not call @c event.Skip() then the corresponding char event + (@c EVT_CHAR) will not happen. + This is by design and enables the programs that handle both types of + events to be a bit simpler. + + @note For Windows programmers: The key and char events in wxWidgets are + similar to but slightly different from Windows @c WM_KEYDOWN and + @c WM_CHAR events. In particular, Alt-x combination will generate a + char event in wxWidgets (unless it is used as an accelerator). + + + @beginEventTable{wxKeyEvent} + @event{EVT_KEY_DOWN(func)}: + Process a wxEVT_KEY_DOWN event (any key has been pressed). + @event{EVT_KEY_UP(func)}: + Process a wxEVT_KEY_UP event (any key has been released). + @event{EVT_CHAR(func)}: + Process a wxEVT_CHAR event. + @endEventTable + @library{wxcore} @category{events} */ @@ -71,62 +82,71 @@ class wxKeyEvent : public wxEvent { public: /** - Constructor. Currently, the only valid event types are wxEVT_CHAR and - wxEVT_CHAR_HOOK. + Constructor. + Currently, the only valid event types are @c wxEVT_CHAR and @c wxEVT_CHAR_HOOK. */ - wxKeyEvent(WXTYPE keyEventType); + wxKeyEvent(wxEventType keyEventType = wxEVT_NULL); /** Returns @true if the Alt key was down at the time of the key event. - Notice that GetModifiers() is easier to use - correctly than this function so you should consider using it in new code. + + Notice that GetModifiers() is easier to use correctly than this function + so you should consider using it in new code. */ bool AltDown() const; /** CMD is a pseudo key which is the same as Control for PC and Unix - platforms but the special APPLE (a.k.a as COMMAND) key under - Macs: it makes often sense to use it instead of, say, ControlDown() because Cmd + platforms but the special APPLE (a.k.a as COMMAND) key under Macs: + it makes often sense to use it instead of, say, ControlDown() because Cmd key is used for the same thing under Mac as Ctrl elsewhere (but Ctrl still exists, just not used for this purpose under Mac). So for non-Mac platforms - this is the same as ControlDown() and under - Mac this is the same as MetaDown(). + this is the same as ControlDown() and under Mac this is the same as MetaDown(). */ bool CmdDown() const; /** Returns @true if the control key was down at the time of the key event. - Notice that GetModifiers() is easier to use - correctly than this function so you should consider using it in new code. + + Notice that GetModifiers() is easier to use correctly than this function + so you should consider using it in new code. */ bool ControlDown() const; /** Returns the virtual key code. ASCII events return normal ASCII values, - while non-ASCII events return values such as @b WXK_LEFT for the - left cursor key. See Keycodes() for a full list of - the virtual key codes. + while non-ASCII events return values such as @b WXK_LEFT for the left cursor + key. See @ref page_keycodes for a full list of the virtual key codes. + Note that in Unicode build, the returned value is meaningful only if the user entered a character that can be represented in current locale's default - charset. You can obtain the corresponding Unicode character using - GetUnicodeKey(). + charset. You can obtain the corresponding Unicode character using GetUnicodeKey(). */ int GetKeyCode() const; /** Return the bitmask of modifier keys which were pressed when this event - happened. See @ref overview_keymodifiers "key modifier constants" for the full - list - of modifiers. + happened. See @ref page_keymodifiers for the full list of modifiers. + Notice that this function is easier to use correctly than, for example, - ControlDown() because when using the latter you - also have to remember to test that none of the other modifiers is pressed: - - and forgetting to do it can result in serious program bugs (e.g. program not - working with European keyboard layout where ALTGR key which is seen by - the program as combination of CTRL and ALT is used). On the - other hand, you can simply write - + ControlDown() because when using the latter you also have to remember to + test that none of the other modifiers is pressed: + + @code + if ( ControlDown() && !AltDown() && !ShiftDown() && !MetaDown() ) + ... handle Ctrl-XXX ... + @endcode + + and forgetting to do it can result in serious program bugs (e.g. program + not working with European keyboard layout where ALTGR key which is seen by + the program as combination of CTRL and ALT is used). On the other hand, + you can simply write: + + @code + if ( GetModifiers() == wxMOD_CONTROL ) + ... handle Ctrl-XXX ... + @endcode + with this function. */ int GetModifiers() const; @@ -136,27 +156,30 @@ public: Obtains the position (in client coordinates) at which the key was pressed. */ wxPoint GetPosition() const; - const void GetPosition(long* x, long* y) const; + void GetPosition(long* x, long* y) const; //@} /** Returns the raw key code for this event. This is a platform-dependent scan code which should only be used in advanced applications. - @b NB: Currently the raw key codes are not supported by all ports, use - @c #ifdef wxHAS_RAW_KEY_CODES to determine if this feature is available. + + @note Currently the raw key codes are not supported by all ports, use + @ifdef_ wxHAS_RAW_KEY_CODES to determine if this feature is available. */ wxUint32 GetRawKeyCode() const; /** Returns the low level key flags for this event. The flags are platform-dependent and should only be used in advanced applications. - @b NB: Currently the raw key flags are not supported by all ports, use - @c #ifdef wxHAS_RAW_KEY_CODES to determine if this feature is available. + + @note Currently the raw key flags are not supported by all ports, use + @ifdef_ wxHAS_RAW_KEY_CODES to determine if this feature is available. */ wxUint32 GetRawKeyFlags() const; /** Returns the Unicode character corresponding to this key event. + This function is only available in Unicode build, i.e. when @c wxUSE_UNICODE is 1. */ @@ -165,89 +188,39 @@ public: /** Returns the X position (in client coordinates) of the event. */ - long GetX() const; + wxCoord GetX() const; /** - Returns the Y (in client coordinates) position of the event. + Returns the Y position (in client coordinates) of the event. */ - long GetY() const; + wxCoord GetY() const; /** - Returns @true if either CTRL or ALT keys was down - at the time of the key event. Note that this function does not take into - account neither SHIFT nor META key states (the reason for ignoring - the latter is that it is common for NUMLOCK key to be configured as - META under X but the key presses even while NUMLOCK is on should - be still processed normally). + Returns @true if either CTRL or ALT keys was down at the time of the + key event. + + Note that this function does not take into account neither SHIFT nor + META key states (the reason for ignoring the latter is that it is + common for NUMLOCK key to be configured as META under X but the key + presses even while NUMLOCK is on should be still processed normally). */ bool HasModifiers() const; /** Returns @true if the Meta key was down at the time of the key event. - Notice that GetModifiers() is easier to use - correctly than this function so you should consider using it in new code. + + Notice that GetModifiers() is easier to use correctly than this function + so you should consider using it in new code. */ bool MetaDown() const; /** Returns @true if the shift key was down at the time of the key event. - Notice that GetModifiers() is easier to use - correctly than this function so you should consider using it in new code. - */ - bool ShiftDown() const; - - /** - bool m_altDown - @b Deprecated: Please use GetModifiers() - instead! - @true if the Alt key is pressed down. - */ - - - /** - bool m_controlDown - @b Deprecated: Please use GetModifiers() - instead! - @true if control is pressed down. - */ - - - /** - long m_keyCode - @b Deprecated: Please use GetKeyCode() - instead! - Virtual keycode. See Keycodes() for a list of identifiers. - */ - - - /** - bool m_metaDown - @b Deprecated: Please use GetModifiers() - instead! - @true if the Meta key is pressed down. - */ - - - /** - bool m_shiftDown - @b Deprecated: Please use GetModifiers() - instead! - @true if shift is pressed down. - */ - - - /** - int m_x - @b Deprecated: Please use GetX() instead! - X position of the event. - */ - - /** - int m_y - @b Deprecated: Please use GetY() instead! - Y position of the event. + Notice that GetModifiers() is easier to use correctly than this function + so you should consider using it in new code. */ + bool ShiftDown() const; }; @@ -256,9 +229,22 @@ public: @class wxJoystickEvent @wxheader{event.h} - This event class contains information about mouse events, particularly + This event class contains information about joystick events, particularly events received by windows. + @beginEventTable{wxJoystickEvent} + @style{EVT_JOY_BUTTON_DOWN(func)}: + Process a wxEVT_JOY_BUTTON_DOWN event. + @style{EVT_JOY_BUTTON_UP(func)}: + Process a wxEVT_JOY_BUTTON_UP event. + @style{EVT_JOY_MOVE(func)}: + Process a wxEVT_JOY_MOVE event. + @style{EVT_JOY_ZMOVE(func)}: + Process a wxEVT_JOY_ZMOVE event. + @style{EVT_JOYSTICK_EVENTS(func)}: + Processes all joystick events. + @endEventTable + @library{wxcore} @category{events} @@ -270,50 +256,50 @@ public: /** Constructor. */ - wxJoystickEvent(WXTYPE eventType = 0, int state = 0, + wxJoystickEvent(wxEventType eventType = wxEVT_NULL, int state = 0, int joystick = wxJOYSTICK1, int change = 0); /** - Returns @true if the event was a down event from the specified button (or any - button). - + Returns @true if the event was a down event from the specified button + (or any button). + @param button - Can be wxJOY_BUTTONn where n is 1, 2, 3 or 4; or wxJOY_BUTTON_ANY to + Can be @c wxJOY_BUTTONn where @c n is 1, 2, 3 or 4; or @c wxJOY_BUTTON_ANY to indicate any button down event. */ bool ButtonDown(int button = wxJOY_BUTTON_ANY) const; /** Returns @true if the specified button (or any button) was in a down state. - + @param button - Can be wxJOY_BUTTONn where n is 1, 2, 3 or 4; or wxJOY_BUTTON_ANY to + Can be @c wxJOY_BUTTONn where @c n is 1, 2, 3 or 4; or @c wxJOY_BUTTON_ANY to indicate any button down event. */ bool ButtonIsDown(int button = wxJOY_BUTTON_ANY) const; /** - Returns @true if the event was an up event from the specified button (or any - button). - + Returns @true if the event was an up event from the specified button + (or any button). + @param button - Can be wxJOY_BUTTONn where n is 1, 2, 3 or 4; or wxJOY_BUTTON_ANY to + Can be @c wxJOY_BUTTONn where @c n is 1, 2, 3 or 4; or @c wxJOY_BUTTON_ANY to indicate any button down event. */ bool ButtonUp(int button = wxJOY_BUTTON_ANY) const; /** - Returns the identifier of the button changing state. This is a wxJOY_BUTTONn - identifier, where - n is one of 1, 2, 3, 4. + Returns the identifier of the button changing state. + + This is a @c wxJOY_BUTTONn identifier, where @c n is one of 1, 2, 3, 4. */ int GetButtonChange() const; /** - Returns the down state of the buttons. This is a bitlist of wxJOY_BUTTONn - identifiers, where - n is one of 1, 2, 3, 4. + Returns the down state of the buttons. + + This is a @c wxJOY_BUTTONn identifier, where @c n is one of 1, 2, 3, 4. */ int GetButtonState() const; @@ -334,8 +320,8 @@ public: int GetZPosition() const; /** - Returns @true if this was a button up or down event (@e not 'is any button - down?'). + Returns @true if this was a button up or down event + (@e not 'is any button down?'). */ bool IsButton() const; @@ -358,10 +344,36 @@ public: A scroll event holds information about events sent from scrolling windows. + + @beginEventTable{wxScrollWinEvent} + You can use the EVT_SCROLLWIN* macros for intercepting scroll window events + from the receiving window. + @event{EVT_SCROLLWIN(func)}: + Process all scroll events. + @event{EVT_SCROLLWIN_TOP(func)}: + Process wxEVT_SCROLLWIN_TOP scroll-to-top events. + @event{EVT_SCROLLWIN_BOTTOM(func)}: + Process wxEVT_SCROLLWIN_BOTTOM scroll-to-bottom events. + @event{EVT_SCROLLWIN_LINEUP(func)}: + Process wxEVT_SCROLLWIN_LINEUP line up events. + @event{EVT_SCROLLWIN_LINEDOWN(func)}: + Process wxEVT_SCROLLWIN_LINEDOWN line down events. + @event{EVT_SCROLLWIN_PAGEUP(func)}: + Process wxEVT_SCROLLWIN_PAGEUP page up events. + @event{EVT_SCROLLWIN_PAGEDOWN(func)}: + Process wxEVT_SCROLLWIN_PAGEDOWN page down events. + @event{EVT_SCROLLWIN_THUMBTRACK(func)}: + Process wxEVT_SCROLLWIN_THUMBTRACK thumbtrack events + (frequent events sent as the user drags the thumbtrack). + @event{EVT_SCROLLWIN_THUMBRELEASE(func)}: + Process wxEVT_SCROLLWIN_THUMBRELEASE thumb release events. + @endEventTable + + @library{wxcore} @category{events} - @see wxScrollEvent, @ref overview_eventhandlingoverview + @see wxScrollEvent, @ref overview_eventhandling */ class wxScrollWinEvent : public wxEvent { @@ -369,17 +381,20 @@ public: /** Constructor. */ - wxScrollWinEvent(WXTYPE commandType = 0, int pos = 0, + wxScrollWinEvent(wxEventType commandType = wxEVT_NULL, int pos = 0, int orientation = 0); /** Returns wxHORIZONTAL or wxVERTICAL, depending on the orientation of the scrollbar. + + @todo wxHORIZONTAL and wxVERTICAL should go in their own enum */ int GetOrientation() const; /** Returns the position of the scrollbar for the thumb track and release events. + Note that this field can't be used for the other events, you need to query the window itself for the current position in that case. */ @@ -396,10 +411,21 @@ public: when the user changes the colour settings using the control panel. This is only appropriate under Windows. + @remarks + The default event handler for this event propagates the event to child windows, + since Windows only sends the events to top-level windows. + If intercepting this event for a top-level window, remember to call the base + class handler, or to pass the event on to the window's children explicitly. + + @beginEventTable{wxSysColourChangedEvent} + @event{EVT_SYS_COLOUR_CHANGED(func)}: + Process a wxEVT_SYS_COLOUR_CHANGED event. + @endEventTable + @library{wxcore} @category{events} - @see @ref overview_eventhandlingoverview + @see @ref overview_eventhandling */ class wxSysColourChangedEvent : public wxEvent { @@ -417,15 +443,20 @@ public: @wxheader{event.h} This event is sent just after the actual window associated with a wxWindow - object - has been created. Since it is derived from wxCommandEvent, the event propagates - up + object has been created. + + Since it is derived from wxCommandEvent, the event propagates up the window hierarchy. + @beginEventTable{wxWindowCreateEvent} + @event{EVT_WINDOW_CREATE(func)}: + Process a wxEVT_CREATE event. + @endEventTable + @library{wxcore} @category{events} - @see @ref overview_eventhandlingoverview, wxWindowDestroyEvent + @see @ref overview_eventhandling, wxWindowDestroyEvent */ class wxWindowCreateEvent : public wxCommandEvent { @@ -445,14 +476,69 @@ public: A paint event is sent when a window's contents needs to be repainted. Please notice that in general it is impossible to change the drawing of a - standard control (such as wxButton) and so you shouldn't - attempt to handle paint events for them as even if it might work on some - platforms, this is inherently not portable and won't work everywhere. + standard control (such as wxButton) and so you shouldn't attempt to handle + paint events for them as even if it might work on some platforms, this is + inherently not portable and won't work everywhere. + + @remarks + Note that in a paint event handler, the application must always create a + wxPaintDC object, even if you do not use it. Otherwise, under MS Windows, + refreshing for this and other windows will go wrong. + For example: + @code + void MyWindow::OnPaint(wxPaintEvent& event) + { + wxPaintDC dc(this); + + DrawMyDocument(dc); + } + @endcode + You can optimize painting by retrieving the rectangles that have been damaged + and only repainting these. The rectangles are in terms of the client area, + and are unscrolled, so you will need to do some calculations using the current + view position to obtain logical, scrolled units. + Here is an example of using the wxRegionIterator class: + @code + // Called when window needs to be repainted. + void MyWindow::OnPaint(wxPaintEvent& event) + { + wxPaintDC dc(this); + + // Find Out where the window is scrolled to + int vbX,vbY; // Top left corner of client + GetViewStart(&vbX,&vbY); + + int vX,vY,vW,vH; // Dimensions of client area in pixels + wxRegionIterator upd(GetUpdateRegion()); // get the update rect list + + while (upd) + { + vX = upd.GetX(); + vY = upd.GetY(); + vW = upd.GetW(); + vH = upd.GetH(); + + // Alternatively we can do this: + // wxRect rect(upd.GetRect()); + + // Repaint this rectangle + ...some code... + + upd ++ ; + } + } + @endcode + + + @beginEventTable{wxPaintEvent} + @event{EVT_PAINT(func)}: + Process a wxEVT_PAINT event. + @endEventTable @library{wxcore} @category{events} - @see @ref overview_eventhandlingoverview + @see @ref overview_eventhandling */ class wxPaintEvent : public wxEvent { @@ -471,14 +557,18 @@ public: An event being sent when a top level window is maximized. Notice that it is not sent when the window is restored to its original size after it had been - maximized, only a normal wxSizeEvent is generated in - this case. + maximized, only a normal wxSizeEvent is generated in this case. + + @beginEventTable{wxMaximizeEvent} + @event{EVT_MAXIMIZE(func)}: + Process a wxEVT_MAXIMIZE event. + @endEventTable @library{wxcore} @category{events} - @see @ref overview_eventhandlingoverview, wxTopLevelWindow::Maximize, - wxTopLevelWindow::IsMaximized + @see @ref overview_eventhandling, wxTopLevelWindow::Maximize, + wxTopLevelWindow::IsMaximized */ class wxMaximizeEvent : public wxEvent { @@ -498,10 +588,51 @@ public: This class is used for pseudo-events which are called by wxWidgets to give an application the chance to update various user interface elements. + @remarks + Without update UI events, an application has to work hard to check/uncheck, + enable/disable, show/hide, and set the text for elements such as menu items + and toolbar buttons. The code for doing this has to be mixed up with the code + that is invoked when an action is invoked for a menu item or button. + With update UI events, you define an event handler to look at the state of the + application and change UI elements accordingly. wxWidgets will call your member + functions in idle time, so you don't have to worry where to call this code. + In addition to being a clearer and more declarative method, it also means you don't + have to worry whether you're updating a toolbar or menubar identifier. The same + handler can update a menu item and toolbar button, if the identifier is the same. + Instead of directly manipulating the menu or button, you call functions in the event + object, such as wxUpdateUIEvent::Check. wxWidgets will determine whether such a + call has been made, and which UI element to update. + These events will work for popup menus as well as menubars. Just before a menu is + popped up, wxMenu::UpdateUI is called to process any UI events for the window that + owns the menu. + If you find that the overhead of UI update processing is affecting your application, + you can do one or both of the following: + @li Call wxUpdateUIEvent::SetMode with a value of wxUPDATE_UI_PROCESS_SPECIFIED, + and set the extra style wxWS_EX_PROCESS_UI_UPDATES for every window that should + receive update events. No other windows will receive update events. + @li Call wxUpdateUIEvent::SetUpdateInterval with a millisecond value to set the delay + between updates. You may need to call wxWindow::UpdateWindowUI at critical points, + for example when a dialog is about to be shown, in case the user sees a slight + delay before windows are updated. + Note that although events are sent in idle time, defining a wxIdleEvent handler + for a window does not affect this because the events are sent from wxWindow::OnInternalIdle + which is always called in idle time. + wxWidgets tries to optimize update events on some platforms. + On Windows and GTK+, events for menubar items are only sent when the menu is about + to be shown, and not in idle time. + + @beginEventTable{wxUpdateUIEvent} + @event{EVT_UPDATE_UI(id, func)}: + Process a wxEVT_UPDATE_UI event for the command with the given id. + @event{EVT_UPDATE_UI_RANGE(id1, id2, func)}: + Process a wxEVT_UPDATE_UI event for any command with id included in the given range. + @endEventTable + + @library{wxcore} @category{events} - @see @ref overview_eventhandlingoverview + @see @ref overview_eventhandling */ class wxUpdateUIEvent : public wxCommandEvent { @@ -523,7 +654,7 @@ public: the interval is set to 0; so update events will be sent as often as possible. You can reduce the frequency that events are sent by changing the mode and/or setting an update interval. - + @see ResetUpdateTime(), SetUpdateInterval(), SetMode() */ @@ -604,7 +735,7 @@ public: current time. It is assumed that update events are normally sent in idle time, so this is called at the end of idle processing. - + @see CanUpdate(), SetUpdateInterval(), SetMode() */ @@ -655,15 +786,29 @@ public: wxEVT_COMMAND_TEXT_CUT and wxEVT_COMMAND_TEXT_PASTE. If any of these events is processed (without being skipped) by an event - handler, the corresponding operation doesn't take place which allows to prevent - the text from being copied from or pasted to a control. It is also possible to - examine the clipboard contents in the PASTE event handler and transform it in - some way before inserting in a control -- for example, changing its case or - removing invalid characters. + handler, the corresponding operation doesn't take place which allows to + prevent the text from being copied from or pasted to a control. It is also + possible to examine the clipboard contents in the PASTE event handler and + transform it in some way before inserting in a control -- for example, + changing its case or removing invalid characters. Finally notice that a CUT event is always preceded by the COPY event which - makes it possible to only process the latter if it doesn't matter if the text - was copied or cut. + makes it possible to only process the latter if it doesn't matter if the + text was copied or cut. + + @beginEventTable{wxClipboardTextEvent} + @event{EVT_TEXT_COPY(id, func)}: + Some or all of the controls content was copied to the clipboard. + @event{EVT_TEXT_CUT(id, func)}: + Some or all of the controls content was cut (i.e. copied and + deleted). + @event{EVT_TEXT_PASTE(id, func)}: + Clipboard content was pasted into the control. + @endEventTable + + @note + These events are currently only generated by wxTextCtrl under GTK+. They + are generated by all controls under Windows. @library{wxcore} @category{events} @@ -674,10 +819,9 @@ class wxClipboardTextEvent : public wxCommandEvent { public: /** - + Constructor. */ - wxClipboardTextEvent(wxEventType commandType = wxEVT_NULL, - int id = 0); + wxClipboardTextEvent(wxEventType commandType = wxEVT_NULL, int id = 0); }; @@ -704,14 +848,14 @@ public: parent window receives @c wxEVT_LEAVE_WINDOW event not only when the mouse leaves the window entirely but also when it enters one of its children. - @b NB: Note that under Windows CE mouse enter and leave events are not natively + @note Note that under Windows CE mouse enter and leave events are not natively supported by the system but are generated by wxWidgets itself. This has several drawbacks: the LEAVE_WINDOW event might be received some time after the mouse left the window and the state variables for it may have changed during this time. - @b NB: Note the difference between methods like + @note Note the difference between methods like wxMouseEvent::LeftDown and wxMouseEvent::LeftIsDown: the former returns @true when the event corresponds to the left mouse button click while the latter @@ -735,7 +879,7 @@ class wxMouseEvent : public wxEvent public: /** Constructor. Valid event types are: - + @b wxEVT_ENTER_WINDOW @b wxEVT_LEAVE_WINDOW @b wxEVT_LEFT_DOWN @@ -756,12 +900,12 @@ public: @b wxEVT_MOTION @b wxEVT_MOUSEWHEEL */ - wxMouseEvent(WXTYPE mouseEventType = 0); + wxMouseEvent(wxEventType mouseEventType = 0); /** Returns @true if the Alt key was down at the time of the event. */ - bool AltDown(); + bool AltDown() const; /** Returns @true if the event was a first extra button double click. @@ -810,32 +954,32 @@ public: /** Returns @true if the identified mouse button is changing state. Valid values of @a button are: - + @c wxMOUSE_BTN_LEFT - + check if left button was pressed - + @c wxMOUSE_BTN_MIDDLE - + check if middle button was pressed - + @c wxMOUSE_BTN_RIGHT - + check if right button was pressed - + @c wxMOUSE_BTN_AUX1 - + check if the first extra button was pressed - + @c wxMOUSE_BTN_AUX2 - + check if the second extra button was pressed - + @c wxMOUSE_BTN_ANY - + check if any button was pressed */ - bool Button(int button); + bool Button(int button) const; /** If the argument is omitted, this returns @true if the event was a mouse @@ -843,7 +987,7 @@ public: was generated (see Button() for the possible values). */ - bool ButtonDClick(int but = wxMOUSE_BTN_ANY); + bool ButtonDClick(int but = wxMOUSE_BTN_ANY) const; /** If the argument is omitted, this returns @true if the event was a mouse @@ -851,7 +995,7 @@ public: was generated (see Button() for the possible values). */ - bool ButtonDown(int but = -1); + bool ButtonDown(int = wxMOUSE_BTN_ANY) const; /** If the argument is omitted, this returns @true if the event was a mouse @@ -859,12 +1003,12 @@ public: was generated (see Button() for the possible values). */ - bool ButtonUp(int but = -1); + bool ButtonUp(int = wxMOUSE_BTN_ANY) const; /** Same as MetaDown() under Mac, same as ControlDown() elsewhere. - + @see wxKeyEvent::CmdDown */ bool CmdDown() const; @@ -872,20 +1016,20 @@ public: /** Returns @true if the control key was down at the time of the event. */ - bool ControlDown(); + bool ControlDown() const; /** Returns @true if this was a dragging event (motion while a button is depressed). - + @see Moving() */ - bool Dragging(); + bool Dragging() const; /** Returns @true if the mouse was entering the window. See also Leaving(). */ - bool Entering(); + bool Entering() const; /** Returns the mouse button which generated this event or @c wxMOUSE_BTN_NONE @@ -902,7 +1046,7 @@ public: Currently this function is implemented only in wxMac and returns -1 for the other platforms (you can still distinguish simple clicks from double-clicks as they generate different kinds of events however). - + @wxsince{2.9.0} */ int GetClickCount() const; @@ -953,12 +1097,12 @@ public: /** Returns X coordinate of the physical mouse event position. */ - long GetX() const; + wxCoord GetX() const; /** Returns Y coordinate of the physical mouse event position. */ - long GetY(); + wxCoord GetY() const; /** Returns @true if the event was a mouse button event (not necessarily a button @@ -1158,7 +1302,7 @@ public: @library{wxcore} @category{events} - @see @ref overview_eventhandlingoverview + @see @ref overview_eventhandling */ class wxDropFilesEvent : public wxEvent { @@ -1166,7 +1310,7 @@ public: /** Constructor. */ - wxDropFilesEvent(WXTYPE id = 0, int noFiles = 0, + wxDropFilesEvent(wxEventType id = 0, int noFiles = 0, wxString* files = NULL); /** @@ -1223,7 +1367,7 @@ public: /** Constructor. */ - wxCommandEvent(WXTYPE commandEventType = 0, int id = 0); + wxCommandEvent(wxEventType commandEventType = 0, int id = 0); /** Deprecated, use IsChecked() instead. @@ -1234,13 +1378,13 @@ public: Returns client data pointer for a listbox or choice selection event (not valid for a deselection). */ - void* GetClientData(); + void* GetClientData() const; /** Returns client object pointer for a listbox or choice selection event (not valid for a deselection). */ - wxClientData* GetClientObject(); + wxClientData* GetClientObject() const; /** Returns extra information dependant on the event objects type. @@ -1250,26 +1394,26 @@ public: multiple-selection boxes, and in this case the index and string values are indeterminate and the listbox must be examined by the application. */ - long GetExtraLong(); + long GetExtraLong() const; /** Returns the integer identifier corresponding to a listbox, choice or radiobox selection (only if the event was a selection, not a deselection), or a boolean value representing the value of a checkbox. */ - int GetInt(); + int GetInt() const; /** Returns item index for a listbox or choice selection event (not valid for a deselection). */ - int GetSelection(); + int GetSelection() const; /** Returns item string for a listbox or choice selection event (not valid for a deselection). */ - wxString GetString(); + wxString GetString() const; /** This method can be used with checkbox and menu events: for the checkboxes, the @@ -1286,7 +1430,7 @@ public: For a listbox or similar event, returns @true if it is a selection, @false if it is a deselection. */ - bool IsSelection(); + bool IsSelection() const; /** Sets the client data for this event. @@ -1330,7 +1474,7 @@ public: @library{wxcore} @category{events} - @see @ref overview_eventhandlingoverview, wxApp::IsActive + @see @ref overview_eventhandling, wxApp::IsActive */ class wxActivateEvent : public wxEvent { @@ -1338,7 +1482,7 @@ public: /** Constructor. */ - wxActivateEvent(WXTYPE eventType = 0, bool active = true, + wxActivateEvent(wxEventType eventType = wxEVT_NULL, bool active = true, int id = 0); /** @@ -1372,7 +1516,7 @@ public: @category{events} @see @ref overview_wxcommandevent "Command events", @ref - overview_eventhandlingoverview + overview_eventhandling */ class wxContextMenuEvent : public wxCommandEvent { @@ -1380,7 +1524,7 @@ public: /** Constructor. */ - wxContextMenuEvent(WXTYPE id = 0, int id = 0, + wxContextMenuEvent(wxEventType id = 0, int id = 0, const wxPoint& pos = wxDefaultPosition); /** @@ -1392,7 +1536,7 @@ public: If the event originated from a keyboard event, the value returned from this function will be wxDefaultPosition. */ - wxPoint GetPosition() const; + const wxPoint& GetPosition() const; /** Sets the position at which the menu should be shown. @@ -1424,7 +1568,7 @@ public: @library{wxcore} @category{events} - @see @ref overview_eventhandlingoverview + @see @ref overview_eventhandling */ class wxEraseEvent : public wxEvent { @@ -1457,7 +1601,7 @@ public: @library{wxcore} @category{events} - @see @ref overview_eventhandlingoverview + @see @ref overview_eventhandling */ class wxFocusEvent : public wxEvent { @@ -1465,7 +1609,7 @@ public: /** Constructor. */ - wxFocusEvent(WXTYPE eventType = 0, int id = 0); + wxFocusEvent(wxEventType eventType = 0, int id = 0); /** Returns the window associated with this event, that is the window which had the @@ -1492,14 +1636,14 @@ public: @library{wxcore} @category{events} - @see @ref overview_eventhandlingoverview + @see @ref overview_eventhandling */ class wxChildFocusEvent : public wxCommandEvent { public: /** Constructor. - + @param win The direct child which is (or which contains the window which is) receiving the focus. @@ -1533,7 +1677,7 @@ public: @library{wxcore} @category{events} - @see wxMouseCaptureChangedEvent, @ref overview_eventhandlingoverview, + @see wxMouseCaptureChangedEvent, @ref overview_eventhandling, wxWindow::CaptureMouse, wxWindow::ReleaseMouse, wxWindow::GetCapture */ class wxMouseCaptureLostEvent : public wxEvent @@ -1622,56 +1766,66 @@ public: since processing would stop after the first window found. @library{wxcore} - @category{FIXME} + @category{events} - @see wxContextHelp, wxDialog, @ref overview_eventhandlingoverview + @see wxContextHelp, wxDialog, @ref overview_eventhandling */ class wxHelpEvent : public wxCommandEvent { public: + // how was this help event generated? + enum Origin + { + Origin_Unknown, // unrecognized event source + Origin_Keyboard, // event generated from F1 key press + Origin_HelpButton // event from [?] button on the title bar (Windows) + }; + /** Constructor. */ - wxHelpEvent(WXTYPE eventType = 0, wxWindowID id = 0, - const wxPoint& point); + wxHelpEvent(wxEventType type = wxEVT_NULL, + wxWindowID winid = 0, + const wxPoint& pt = wxDefaultPosition, + Origin origin = Origin_Unknown); /** Returns the origin of the help event which is one of the following values: - + @b Origin_Unknown - + Unrecognized event source. - + @b Origin_Keyboard - + Event generated by @c F1 key press. - + @b Origin_HelpButton - + Event generated by wxContextHelp or using the "?" title bur button under MS Windows. - + The application may handle events generated using the keyboard or mouse differently, e.g. by using wxGetMousePosition() for the mouse events. - + @see SetOrigin() */ - wxHelpEvent::Origin GetOrigin() const; + Origin GetOrigin() const; /** Returns the left-click position of the mouse, in screen coordinates. This allows the application to position the help appropriately. */ - const wxPoint GetPosition() const; + const wxPoint& GetPosition() const; /** Set the help event origin, only used internally by wxWidgets normally. - + @see GetOrigin() */ - void SetOrigin(wxHelpEvent::Origin origin); + void SetOrigin(Origin); /** Sets the left-click position of the mouse, in screen coordinates. @@ -1697,7 +1851,7 @@ public: @category{events} @see wxScrollBar, wxSlider, wxSpinButton, , wxScrollWinEvent, @ref - overview_eventhandlingoverview + overview_eventhandling */ class wxScrollEvent : public wxCommandEvent { @@ -1705,7 +1859,7 @@ public: /** Constructor. */ - wxScrollEvent(WXTYPE commandType = 0, int id = 0, int pos = 0, + wxScrollEvent(wxEventType commandType = 0, int id = 0, int pos = 0, int orientation = 0); /** @@ -1746,7 +1900,7 @@ public: @library{wxbase} @category{events} - @see @ref overview_eventhandlingoverview, wxUpdateUIEvent, + @see @ref overview_eventhandling, wxUpdateUIEvent, wxWindow::OnInternalIdle */ class wxIdleEvent : public wxEvent @@ -1767,7 +1921,7 @@ public: the update mode is initially wxIDLE_PROCESS_ALL. You can change the mode to only send idle events to windows with the wxWS_EX_PROCESS_IDLE extra window style set. - + @see SetMode() */ static bool CanSend(wxWindow* window); @@ -1783,7 +1937,7 @@ public: /** Returns @true if the OnIdle function processing this event requested more processing time. - + @see RequestMore() */ bool MoreRequested() const; @@ -1798,7 +1952,7 @@ public: during OnIdle, then the application will remain in a passive event loop (not calling OnIdle) until a new event is posted to the application by the windowing system. - + @see MoreRequested() */ void RequestMore(bool needMore = true); @@ -1826,7 +1980,7 @@ public: @library{wxcore} @category{events} - @see @ref overview_eventhandlingoverview + @see @ref overview_eventhandling */ class wxInitDialogEvent : public wxEvent { @@ -1859,7 +2013,7 @@ public: @library{wxcore} @category{events} - @see @ref overview_eventhandlingoverview, wxWindowCreateEvent + @see @ref overview_eventhandling, wxWindowCreateEvent */ class wxWindowDestroyEvent : public wxCommandEvent { @@ -1967,7 +2121,7 @@ public: @library{wxcore} @category{events} - @see wxMouseCaptureLostEvent, @ref overview_eventhandlingoverview, + @see wxMouseCaptureLostEvent, @ref overview_eventhandling, wxWindow::CaptureMouse, wxWindow::ReleaseMouse, wxWindow::GetCapture */ class wxMouseCaptureChangedEvent : public wxEvent @@ -2024,7 +2178,7 @@ public: /** Constructor. */ - wxCloseEvent(WXTYPE commandEventType = 0, int id = 0); + wxCloseEvent(wxEventType commandEventType = 0, int id = 0); /** Returns @true if you can veto a system shutdown or a window close event. @@ -2032,7 +2186,7 @@ public: force the application to exit, and so this function must be called to check this. */ - bool CanVeto(); + bool CanVeto() const; /** Returns @true if the user is just logging off or @false if the system is @@ -2054,7 +2208,7 @@ public: /** Sets the 'logging off' flag. */ - void SetLoggingOff(bool loggingOff) const; + void SetLoggingOff(bool loggingOff); /** Call this from your event handler to veto a system shutdown or to signal @@ -2082,7 +2236,7 @@ public: @category{events} @see @ref overview_wxcommandevent "Command events", @ref - overview_eventhandlingoverview + overview_eventhandling */ class wxMenuEvent : public wxEvent { @@ -2090,7 +2244,7 @@ public: /** Constructor. */ - wxMenuEvent(WXTYPE id = 0, int id = 0, wxMenu* menu = NULL); + wxMenuEvent(wxEventType id = 0, int id = 0, wxMenu* menu = NULL); /** Returns the menu which is being opened or closed. This method should only be @@ -2140,9 +2294,9 @@ public: @endcode @library{wxcore} - @category{FIXME} + @category{events} - @see @ref overview_eventhandlingoverview, wxEvtHandler + @see @ref overview_eventhandling, wxEvtHandler */ class wxEventBlocker : public wxEvtHandler { @@ -2155,14 +2309,14 @@ public: Note that the @a win window @b must remain alive until the wxEventBlocker object destruction. */ - wxEventBlocker(wxWindow* win, wxEventType type = wxEVT_ANY); + wxEventBlocker(wxWindow* win, wxEventType = -0x000000001); /** Destructor. The blocker will remove itself from the chain of event handlers for the window provided in the constructor, thus restoring normal processing of events. */ - ~wxEventBlocker(); + virtual ~wxEventBlocker(); /** Adds to the list of event types which should be blocked the given @e eventType. @@ -2187,9 +2341,9 @@ public: will be identical to the "this" pointer for the wxEvtHandler portion. @library{wxbase} - @category{FIXME} + @category{events} - @see @ref overview_eventhandlingoverview + @see @ref overview_eventhandling */ class wxEvtHandler : public wxObject { @@ -2204,14 +2358,14 @@ public: unlink itself and restore the previous and next handlers so that they point to each other. */ - ~wxEvtHandler(); + virtual ~wxEvtHandler(); /** This function posts an event to be processed later. - + @param event Event to add to process queue. - + @remarks The difference between sending an event (using the ProcessEvent method) and posting it is that in the first case the event is processed before the function returns, while @@ -2227,7 +2381,7 @@ public: type. This is an alternative to the use of static event tables. See the 'event' or the old 'dynamic' sample for usage. - + @param id The identifier (or first of the identifier range) to be associated with the event handler function. For the version not taking this @@ -2270,7 +2424,7 @@ public: added using the Connect() method. There is no way to disconnect functions connected using the (static) event tables. - + @param id The identifier (or first of the identifier range) associated with the event handler function. @@ -2304,62 +2458,62 @@ public: /** Gets user-supplied client data. - + @remarks Normally, any extra data the programmer wishes to associate with the object should be made available by deriving a new class with new data members. - + @see SetClientData() */ - void* GetClientData(); + void* GetClientData() const; /** Get a pointer to the user-supplied client data object. - + @see SetClientObject(), wxClientData */ wxClientData* GetClientObject() const; /** Returns @true if the event handler is enabled, @false otherwise. - + @see SetEvtHandlerEnabled() */ - bool GetEvtHandlerEnabled(); + bool GetEvtHandlerEnabled() const; /** Gets the pointer to the next handler in the chain. - + @see SetNextHandler(), GetPreviousHandler(), SetPreviousHandler(), wxWindow::PushEventHandler, wxWindow::PopEventHandler */ - wxEvtHandler* GetNextHandler(); + wxEvtHandler* GetNextHandler() const; /** Gets the pointer to the previous handler in the chain. - + @see SetPreviousHandler(), GetNextHandler(), SetNextHandler(), wxWindow::PushEventHandler, wxWindow::PopEventHandler */ - wxEvtHandler* GetPreviousHandler(); + wxEvtHandler* GetPreviousHandler() const; /** Processes an event, searching event tables and calling zero or more suitable event handler function(s). - + @param event Event to process. - + @returns @true if a suitable event handler function was found and executed, and the function did not call wxEvent::Skip. - + @remarks Normally, your application would not call this function: it is called in the wxWidgets implementation to dispatch incoming user interface events to the framework (and application). - + @see SearchEventTable() */ virtual bool ProcessEvent(wxEvent& event); @@ -2369,13 +2523,13 @@ public: and handles any exceptions that occur in the process. If an exception is thrown in event handler, wxApp::OnExceptionInMainLoop is called. - + @param event Event to process. - + @returns @true if the event was processed, @false if no handler was found or an exception was thrown. - + @see wxWindow::HandleWindowEvent */ bool SafelyProcessEvent(wxEvent& event); @@ -2384,18 +2538,18 @@ public: Searches the event table, executing an event handler function if an appropriate one is found. - + @param table Event table to be searched. @param event Event to be matched against an event table entry. - + @returns @true if a suitable event handler function was found and executed, and the function did not call wxEvent::Skip. - + @remarks This function looks through the object's event table and tries to find an entry that will match the event. - + @see ProcessEvent() */ virtual bool SearchEventTable(wxEventTable& table, @@ -2403,47 +2557,47 @@ public: /** Sets user-supplied client data. - + @param data Data to be associated with the event handler. - + @remarks Normally, any extra data the programmer wishes to associate with the object should be made available by deriving a new class with new data members. You must not call this method and SetClientObject on the same class - only one of them. - + @see GetClientData() */ void SetClientData(void* data); /** Set the client data object. Any previous object will be deleted. - + @see GetClientObject(), wxClientData */ void SetClientObject(wxClientData* data); /** Enables or disables the event handler. - + @param enabled @true if the event handler is to be enabled, @false if it is to be disabled. - + @remarks You can use this function to avoid having to remove the event handler from the chain, for example when implementing a dialog editor and changing from edit to test mode. - + @see GetEvtHandlerEnabled() */ void SetEvtHandlerEnabled(bool enabled); /** Sets the pointer to the next handler. - + @param handler Event handler to be set as the next handler. - + @see GetNextHandler(), SetPreviousHandler(), GetPreviousHandler(), wxWindow::PushEventHandler, wxWindow::PopEventHandler @@ -2452,7 +2606,7 @@ public: /** Sets the pointer to the previous handler. - + @param handler Event handler to be set as the previous handler. */ @@ -2472,7 +2626,7 @@ public: @library{wxcore} @category{events} - @see @ref overview_eventhandlingoverview, wxTopLevelWindow::Iconize, + @see @ref overview_eventhandling, wxTopLevelWindow::Iconize, wxTopLevelWindow::IsIconized */ class wxIconizeEvent : public wxEvent @@ -2501,7 +2655,7 @@ public: @library{wxcore} @category{events} - @see wxPoint, @ref overview_eventhandlingoverview + @see wxPoint, @ref overview_eventhandling */ class wxMoveEvent : public wxEvent { @@ -2527,7 +2681,7 @@ public: callback or member function. @b wxEvent used to be a multipurpose event object, and is an abstract base class for other event classes (see below). - For more information about events, see the @ref overview_eventhandlingoverview. + For more information about events, see the @ref overview_eventhandling. @b wxPerl note: In wxPerl custom event classes should be derived from @c Wx::PlEvent and @c Wx::PlCommandEvent. @@ -2557,19 +2711,19 @@ public: implementing the Clone function is to implement a copy constructor for a new event (call it MyEvent) and then define the Clone function like this: */ - virtual wxEvent* Clone() const; + virtual wxEvent* Clone() const = 0; /** Returns the object (usually a window) associated with the event, if any. */ - wxObject* GetEventObject(); + wxObject* GetEventObject() const; /** Returns the identifier of the given event type, such as @c wxEVT_COMMAND_BUTTON_CLICKED. */ - wxEventType GetEventType(); + wxEventType GetEventType() const; /** Returns the identifier associated with this event, such as a button command id. @@ -2587,7 +2741,7 @@ public: only differences between the timestamps and not their absolute values usually make sense). */ - long GetTimestamp(); + long GetTimestamp() const; /** Returns @true if the event is or is derived from @@ -2620,7 +2774,7 @@ public: /** Sets the timestamp for the event. */ - void SetTimestamp(long timeStamp); + void SetTimestamp(long = 0); /** Test if this event should be propagated or not, i.e. if the propagation level @@ -2695,7 +2849,7 @@ public: @library{wxcore} @category{events} - @see wxSize, @ref overview_eventhandlingoverview + @see wxSize, @ref overview_eventhandling */ class wxSizeEvent : public wxEvent { @@ -2724,7 +2878,7 @@ public: specify the cursor you want to be displayed. @library{wxcore} - @category{FIXME} + @category{events} @see ::wxSetCursor, wxWindow::wxSetCursor */ @@ -2740,7 +2894,7 @@ public: /** Returns a reference to the cursor specified by this event. */ - wxCursor GetCursor() const; + const wxCursor& GetCursor() const; /** Returns the X coordinate of the mouse in client coordinates. @@ -2754,7 +2908,7 @@ public: /** Returns @true if the cursor specified by this event is a valid cursor. - + @remarks You cannot specify wxNullCursor with this event, as it is not considered a valid cursor. */ @@ -2768,11 +2922,24 @@ public: +// ============================================================================ +// Global functions/macros +// ============================================================================ + +/** @ingroup group_funcmacro_misc */ +//@{ + /** In a GUI application, this function posts @a event to the specified @e dest - object using wxEvtHandler::AddPendingEvent. + object using wxEvtHandler::AddPendingEvent(). + + Otherwise, it dispatches @a event immediately using + wxEvtHandler::ProcessEvent(). See the respective documentation for details + (and caveats). - Otherwise, it dispatches @a event immediately using wxEvtHandler::ProcessEvent. - See the respective documentation for details (and caveats). + @header{wx/event.h} */ -void wxPostEvent(wxEvtHandler* dest, wxEvent& event); \ No newline at end of file +void wxPostEvent(wxEvtHandler* dest, wxEvent& event); + +//@} +