]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/event.h
support for iPhone callbacks
[wxWidgets.git] / interface / wx / event.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: event.h
03e8dc0e
VZ
3// Purpose: interface of wxEvtHandler, wxEventBlocker and many
4// wxEvent-derived classes
23324ae1
FM
5// Author: wxWidgets team
6// RCS-ID: $Id$
526954c5 7// Licence: wxWindows licence
23324ae1
FM
8/////////////////////////////////////////////////////////////////////////////
9
551048c2
VZ
10#if wxUSE_BASE
11
03e8dc0e
VZ
12/**
13 The predefined constants for the number of times we propagate event
14 upwards window child-parent chain.
15*/
16enum wxEventPropagation
17{
18 /// don't propagate it at all
19 wxEVENT_PROPAGATE_NONE = 0,
20
21 /// propagate it until it is processed
22 wxEVENT_PROPAGATE_MAX = INT_MAX
23};
24
25/**
26 The different categories for a wxEvent; see wxEvent::GetEventCategory.
27
28 @note They are used as OR-combinable flags by wxEventLoopBase::YieldFor.
29*/
30enum wxEventCategory
31{
32 /**
33 This is the category for those events which are generated to update
34 the appearance of the GUI but which (usually) do not comport data
35 processing, i.e. which do not provide input or output data
36 (e.g. size events, scroll events, etc).
37 They are events NOT directly generated by the user's input devices.
38 */
39 wxEVT_CATEGORY_UI = 1,
40
41 /**
42 This category groups those events which are generated directly from the
43 user through input devices like mouse and keyboard and usually result in
44 data to be processed from the application
45 (e.g. mouse clicks, key presses, etc).
46 */
47 wxEVT_CATEGORY_USER_INPUT = 2,
48
49 /// This category is for wxSocketEvent
50 wxEVT_CATEGORY_SOCKET = 4,
51
52 /// This category is for wxTimerEvent
53 wxEVT_CATEGORY_TIMER = 8,
54
55 /**
56 This category is for any event used to send notifications from the
57 secondary threads to the main one or in general for notifications among
58 different threads (which may or may not be user-generated).
59 See e.g. wxThreadEvent.
60 */
61 wxEVT_CATEGORY_THREAD = 16,
62
63 /**
64 This mask is used in wxEventLoopBase::YieldFor to specify that all event
65 categories should be processed.
66 */
67 wxEVT_CATEGORY_ALL =
68 wxEVT_CATEGORY_UI|wxEVT_CATEGORY_USER_INPUT|wxEVT_CATEGORY_SOCKET| \
69 wxEVT_CATEGORY_TIMER|wxEVT_CATEGORY_THREAD
70};
71
72/**
73 @class wxEvent
74
75 An event is a structure holding information about an event passed to a
76 callback or member function.
77
78 wxEvent used to be a multipurpose event object, and is an abstract base class
79 for other event classes (see below).
80
81 For more information about events, see the @ref overview_events overview.
82
83 @beginWxPerlOnly
84 In wxPerl custom event classes should be derived from
85 @c Wx::PlEvent and @c Wx::PlCommandEvent.
86 @endWxPerlOnly
87
88 @library{wxbase}
89 @category{events}
90
91 @see wxCommandEvent, wxMouseEvent
92*/
93class wxEvent : public wxObject
94{
95public:
96 /**
97 Constructor.
98
99 Notice that events are usually created by wxWidgets itself and creating
100 e.g. a wxPaintEvent in your code and sending it to e.g. a wxTextCtrl
101 will not usually affect it at all as native controls have no specific
102 knowledge about wxWidgets events. However you may construct objects of
103 specific types and pass them to wxEvtHandler::ProcessEvent() if you
104 want to create your own custom control and want to process its events
105 in the same manner as the standard ones.
106
107 Also please notice that the order of parameters in this constructor is
108 different from almost all the derived classes which specify the event
109 type as the first argument.
110
111 @param id
112 The identifier of the object (window, timer, ...) which generated
113 this event.
114 @param eventType
115 The unique type of event, e.g. @c wxEVT_PAINT, @c wxEVT_SIZE or
ce7fe42e 116 @c wxEVT_BUTTON.
03e8dc0e
VZ
117 */
118 wxEvent(int id = 0, wxEventType eventType = wxEVT_NULL);
119
120 /**
121 Returns a copy of the event.
122
123 Any event that is posted to the wxWidgets event system for later action
124 (via wxEvtHandler::AddPendingEvent, wxEvtHandler::QueueEvent or wxPostEvent())
125 must implement this method.
126
127 All wxWidgets events fully implement this method, but any derived events
128 implemented by the user should also implement this method just in case they
129 (or some event derived from them) are ever posted.
130
131 All wxWidgets events implement a copy constructor, so the easiest way of
132 implementing the Clone function is to implement a copy constructor for
133 a new event (call it MyEvent) and then define the Clone function like this:
134
135 @code
136 wxEvent *Clone() const { return new MyEvent(*this); }
137 @endcode
138 */
139 virtual wxEvent* Clone() const = 0;
140
141 /**
142 Returns the object (usually a window) associated with the event, if any.
143 */
144 wxObject* GetEventObject() const;
145
146 /**
ce7fe42e 147 Returns the identifier of the given event type, such as @c wxEVT_BUTTON.
03e8dc0e
VZ
148 */
149 wxEventType GetEventType() const;
150
151 /**
152 Returns a generic category for this event.
153 wxEvent implementation returns @c wxEVT_CATEGORY_UI by default.
154
155 This function is used to selectively process events in wxEventLoopBase::YieldFor.
156 */
157 virtual wxEventCategory GetEventCategory() const;
158
159 /**
160 Returns the identifier associated with this event, such as a button command id.
161 */
162 int GetId() const;
163
164 /**
165 Return the user data associated with a dynamically connected event handler.
166
167 wxEvtHandler::Connect() and wxEvtHandler::Bind() allow associating
168 optional @c userData pointer with the handler and this method returns
169 the value of this pointer.
170
171 The returned pointer is owned by wxWidgets and must not be deleted.
172
173 @since 2.9.5
174 */
175 wxObject *GetEventUserData() const;
176
177 /**
178 Returns @true if the event handler should be skipped, @false otherwise.
179 */
180 bool GetSkipped() const;
181
182 /**
183 Gets the timestamp for the event. The timestamp is the time in milliseconds
184 since some fixed moment (not necessarily the standard Unix Epoch, so only
185 differences between the timestamps and not their absolute values usually make sense).
186
187 @warning
188 wxWidgets returns a non-NULL timestamp only for mouse and key events
189 (see wxMouseEvent and wxKeyEvent).
190 */
191 long GetTimestamp() const;
192
193 /**
194 Returns @true if the event is or is derived from wxCommandEvent else it returns @false.
195
196 @note exists only for optimization purposes.
197 */
198 bool IsCommandEvent() const;
199
200 /**
201 Sets the propagation level to the given value (for example returned from an
202 earlier call to wxEvent::StopPropagation).
203 */
204 void ResumePropagation(int propagationLevel);
205
206 /**
207 Sets the originating object.
208 */
209 void SetEventObject(wxObject* object);
210
211 /**
212 Sets the event type.
213 */
214 void SetEventType(wxEventType type);
215
216 /**
217 Sets the identifier associated with this event, such as a button command id.
218 */
219 void SetId(int id);
220
221 /**
222 Sets the timestamp for the event.
223 */
224 void SetTimestamp(long timeStamp = 0);
225
226 /**
0824e369 227 Test if this event should be propagated or not, i.e.\ if the propagation level
03e8dc0e
VZ
228 is currently greater than 0.
229 */
230 bool ShouldPropagate() const;
231
232 /**
233 This method can be used inside an event handler to control whether further
234 event handlers bound to this event will be called after the current one returns.
235
236 Without Skip() (or equivalently if Skip(@false) is used), the event will not
237 be processed any more. If Skip(@true) is called, the event processing system
238 continues searching for a further handler function for this event, even though
239 it has been processed already in the current handler.
240
241 In general, it is recommended to skip all non-command events to allow the
242 default handling to take place. The command events are, however, normally not
243 skipped as usually a single command such as a button click or menu item
244 selection must only be processed by one handler.
245 */
246 void Skip(bool skip = true);
247
248 /**
249 Stop the event from propagating to its parent window.
250
251 Returns the old propagation level value which may be later passed to
252 ResumePropagation() to allow propagating the event again.
253 */
254 int StopPropagation();
255
256protected:
257 /**
258 Indicates how many levels the event can propagate.
259
260 This member is protected and should typically only be set in the constructors
261 of the derived classes. It may be temporarily changed by StopPropagation()
262 and ResumePropagation() and tested with ShouldPropagate().
263
264 The initial value is set to either @c wxEVENT_PROPAGATE_NONE (by default)
265 meaning that the event shouldn't be propagated at all or to
266 @c wxEVENT_PROPAGATE_MAX (for command events) meaning that it should be
267 propagated as much as necessary.
268
269 Any positive number means that the event should be propagated but no more than
270 the given number of times. E.g. the propagation level may be set to 1 to
271 propagate the event to its parent only, but not to its grandparent.
272 */
273 int m_propagationLevel;
274};
275
551048c2
VZ
276#endif // wxUSE_BASE
277
278#if wxUSE_GUI
279
03e8dc0e
VZ
280/**
281 @class wxEventBlocker
282
283 This class is a special event handler which allows to discard
284 any event (or a set of event types) directed to a specific window.
285
286 Example:
287
288 @code
289 void MyWindow::DoSomething()
290 {
291 {
292 // block all events directed to this window while
293 // we do the 1000 FunctionWhichSendsEvents() calls
294 wxEventBlocker blocker(this);
295
296 for ( int i = 0; i 1000; i++ )
297 FunctionWhichSendsEvents(i);
298
299 } // ~wxEventBlocker called, old event handler is restored
300
301 // the event generated by this call will be processed:
302 FunctionWhichSendsEvents(0)
303 }
304 @endcode
305
306 @library{wxcore}
307 @category{events}
308
309 @see @ref overview_events_processing, wxEvtHandler
310*/
311class wxEventBlocker : public wxEvtHandler
312{
313public:
314 /**
315 Constructs the blocker for the given window and for the given event type.
316
317 If @a type is @c wxEVT_ANY, then all events for that window are blocked.
318 You can call Block() after creation to add other event types to the list
319 of events to block.
320
321 Note that the @a win window @b must remain alive until the
322 wxEventBlocker object destruction.
323 */
324 wxEventBlocker(wxWindow* win, wxEventType type = -1);
325
326 /**
327 Destructor. The blocker will remove itself from the chain of event handlers for
328 the window provided in the constructor, thus restoring normal processing of events.
329 */
330 virtual ~wxEventBlocker();
331
332 /**
333 Adds to the list of event types which should be blocked the given @a eventType.
334 */
335 void Block(wxEventType eventType);
336};
337
338
339
340/**
341 Helper class to temporarily change an event to not propagate.
342*/
343class wxPropagationDisabler
344{
345public:
346 wxPropagationDisabler(wxEvent& event);
347 ~wxPropagationDisabler();
348};
349
350
351/**
352 Helper class to temporarily lower propagation level.
353*/
354class wxPropagateOnce
355{
356public:
357 wxPropagateOnce(wxEvent& event);
358 ~wxPropagateOnce();
359};
360
551048c2 361#endif // wxUSE_GUI
03e8dc0e 362
551048c2 363#if wxUSE_BASE
03e8dc0e
VZ
364
365/**
366 @class wxEvtHandler
367
368 A class that can handle events from the windowing system.
369 wxWindow is (and therefore all window classes are) derived from this class.
370
371 When events are received, wxEvtHandler invokes the method listed in the
372 event table using itself as the object. When using multiple inheritance
373 <b>it is imperative that the wxEvtHandler(-derived) class is the first
374 class inherited</b> such that the @c this pointer for the overall object
375 will be identical to the @c this pointer of the wxEvtHandler portion.
376
377 @library{wxbase}
378 @category{events}
379
380 @see @ref overview_events_processing, wxEventBlocker, wxEventLoopBase
381*/
382class wxEvtHandler : public wxObject, public wxTrackable
383{
384public:
385 /**
386 Constructor.
387 */
388 wxEvtHandler();
389
390 /**
391 Destructor.
392
393 If the handler is part of a chain, the destructor will unlink itself
394 (see Unlink()).
395 */
396 virtual ~wxEvtHandler();
397
398
399 /**
400 @name Event queuing and processing
401 */
402 //@{
403
404 /**
405 Queue event for a later processing.
406
407 This method is similar to ProcessEvent() but while the latter is
408 synchronous, i.e. the event is processed immediately, before the
409 function returns, this one is asynchronous and returns immediately
410 while the event will be processed at some later time (usually during
411 the next event loop iteration).
412
413 Another important difference is that this method takes ownership of the
414 @a event parameter, i.e. it will delete it itself. This implies that
415 the event should be allocated on the heap and that the pointer can't be
416 used any more after the function returns (as it can be deleted at any
417 moment).
418
419 QueueEvent() can be used for inter-thread communication from the worker
420 threads to the main thread, it is safe in the sense that it uses
421 locking internally and avoids the problem mentioned in AddPendingEvent()
422 documentation by ensuring that the @a event object is not used by the
423 calling thread any more. Care should still be taken to avoid that some
424 fields of this object are used by it, notably any wxString members of
425 the event object must not be shallow copies of another wxString object
426 as this would result in them still using the same string buffer behind
427 the scenes. For example:
428 @code
429 void FunctionInAWorkerThread(const wxString& str)
430 {
431 wxCommandEvent* evt = new wxCommandEvent;
432
433 // NOT evt->SetString(str) as this would be a shallow copy
434 evt->SetString(str.c_str()); // make a deep copy
435
436 wxTheApp->QueueEvent( evt );
437 }
438 @endcode
439
440 Note that you can use wxThreadEvent instead of wxCommandEvent
441 to avoid this problem:
442 @code
443 void FunctionInAWorkerThread(const wxString& str)
444 {
445 wxThreadEvent evt;
446 evt->SetString(str);
447
448 // wxThreadEvent::Clone() makes sure that the internal wxString
449 // member is not shared by other wxString instances:
450 wxTheApp->QueueEvent( evt.Clone() );
451 }
452 @endcode
453
454 Finally notice that this method automatically wakes up the event loop
455 if it is currently idle by calling ::wxWakeUpIdle() so there is no need
456 to do it manually when using it.
457
458 @since 2.9.0
459
460 @param event
461 A heap-allocated event to be queued, QueueEvent() takes ownership
462 of it. This parameter shouldn't be @c NULL.
463 */
464 virtual void QueueEvent(wxEvent *event);
465
466 /**
467 Post an event to be processed later.
468
469 This function is similar to QueueEvent() but can't be used to post
470 events from worker threads for the event objects with wxString fields
471 (i.e. in practice most of them) because of an unsafe use of the same
472 wxString object which happens because the wxString field in the
473 original @a event object and its copy made internally by this function
474 share the same string buffer internally. Use QueueEvent() to avoid
475 this.
476
477 A copy of @a event is made by the function, so the original can be deleted
478 as soon as function returns (it is common that the original is created
479 on the stack). This requires that the wxEvent::Clone() method be
480 implemented by event so that it can be duplicated and stored until it
481 gets processed.
482
483 @param event
484 Event to add to the pending events queue.
485 */
486 virtual void AddPendingEvent(const wxEvent& event);
487
488 /**
489 Asynchronously call the given method.
490
491 Calling this function on an object schedules an asynchronous call to
492 the method specified as CallAfter() argument at a (slightly) later
493 time. This is useful when processing some events as certain actions
494 typically can't be performed inside their handlers, e.g. you shouldn't
495 show a modal dialog from a mouse click event handler as this would
496 break the mouse capture state -- but you can call a method showing
497 this message dialog after the current event handler completes.
498
499 The method being called must be the method of the object on which
500 CallAfter() itself is called.
501
502 Notice that it is safe to use CallAfter() from other, non-GUI,
503 threads, but that the method will be always called in the main, GUI,
504 thread context.
505
506 Example of use:
507 @code
508 class MyFrame : public wxFrame {
509 void OnClick(wxMouseEvent& event) {
510 CallAfter(&MyFrame::ShowPosition, event.GetPosition());
511 }
512
513 void ShowPosition(const wxPoint& pos) {
514 if ( wxMessageBox(
515 wxString::Format("Perform click at (%d, %d)?",
516 pos.x, pos.y), "", wxYES_NO) == wxYES )
517 {
518 ... do take this click into account ...
519 }
520 }
521 };
522 @endcode
523
524 @param method The method to call.
525 @param x1 The (optional) first parameter to pass to the method.
526 @param x2 The (optional) second parameter to pass to the method.
527
cbc8576a
VS
528 Note that currently only up to 2 arguments can be passed. For more
529 complicated needs, you can use the CallAfter<T>(const T& fn) overload
530 that can call any functor.
03e8dc0e 531
f0facad0
VZ
532 @note This method is not available with Visual C++ before version 8
533 (Visual Studio 2005) as earlier versions of the compiler don't
03e8dc0e
VZ
534 have the required support for C++ templates to implement it.
535
536 @since 2.9.5
537 */
538 template<typename T, typename T1, ...>
539 void CallAfter(void (T::*method)(T1, ...), T1 x1, ...);
540
cbc8576a
VS
541 /**
542 Asynchronously call the given functor.
543
544 Calling this function on an object schedules an asynchronous call to
545 the functor specified as CallAfter() argument at a (slightly) later
546 time. This is useful when processing some events as certain actions
547 typically can't be performed inside their handlers, e.g. you shouldn't
548 show a modal dialog from a mouse click event handler as this would
549 break the mouse capture state -- but you can call a function showing
550 this message dialog after the current event handler completes.
551
552 Notice that it is safe to use CallAfter() from other, non-GUI,
553 threads, but that the method will be always called in the main, GUI,
554 thread context.
555
556 This overload is particularly useful in combination with C++11 lambdas:
557 @code
558 wxGetApp().CallAfter([]{
559 wxBell();
560 });
561 @endcode
562
563 @param functor The functor to call.
564
565 @note This method is not available with Visual C++ before version 8
566 (Visual Studio 2005) as earlier versions of the compiler don't
567 have the required support for C++ templates to implement it.
568
569 @since 2.9.6
570 */
571 template<typename T>
572 void CallAfter(const T& functor);
573
03e8dc0e
VZ
574 /**
575 Processes an event, searching event tables and calling zero or more suitable
576 event handler function(s).
577
578 Normally, your application would not call this function: it is called in the
579 wxWidgets implementation to dispatch incoming user interface events to the
580 framework (and application).
581
582 However, you might need to call it if implementing new functionality
583 (such as a new control) where you define new event types, as opposed to
584 allowing the user to override virtual functions.
585
586 Notice that you don't usually need to override ProcessEvent() to
587 customize the event handling, overriding the specially provided
588 TryBefore() and TryAfter() functions is usually enough. For example,
589 wxMDIParentFrame may override TryBefore() to ensure that the menu
590 events are processed in the active child frame before being processed
591 in the parent frame itself.
592
593 The normal order of event table searching is as follows:
594 -# wxApp::FilterEvent() is called. If it returns anything but @c -1
595 (default) the processing stops here.
596 -# TryBefore() is called (this is where wxValidator are taken into
597 account for wxWindow objects). If this returns @true, the function exits.
598 -# If the object is disabled (via a call to wxEvtHandler::SetEvtHandlerEnabled)
599 the function skips to step (7).
600 -# Dynamic event table of the handlers bound using Bind<>() is
601 searched. If a handler is found, it is executed and the function
602 returns @true unless the handler used wxEvent::Skip() to indicate
603 that it didn't handle the event in which case the search continues.
604 -# Static events table of the handlers bound using event table
605 macros is searched for this event handler. If this fails, the base
606 class event table is tried, and so on until no more tables
607 exist or an appropriate function was found. If a handler is found,
608 the same logic as in the previous step applies.
609 -# The search is applied down the entire chain of event handlers (usually the
610 chain has a length of one). This chain can be formed using wxEvtHandler::SetNextHandler():
611 @image html overview_events_chain.png
612 (referring to the image, if @c A->ProcessEvent is called and it doesn't handle
613 the event, @c B->ProcessEvent will be called and so on...).
614 Note that in the case of wxWindow you can build a stack of event handlers
615 (see wxWindow::PushEventHandler() for more info).
616 If any of the handlers of the chain return @true, the function exits.
617 -# TryAfter() is called: for the wxWindow object this may propagate the
618 event to the window parent (recursively). If the event is still not
619 processed, ProcessEvent() on wxTheApp object is called as the last
620 step.
621
622 Notice that steps (2)-(6) are performed in ProcessEventLocally()
623 which is called by this function.
624
625 @param event
626 Event to process.
627 @return
628 @true if a suitable event handler function was found and executed,
629 and the function did not call wxEvent::Skip.
630
631 @see SearchEventTable()
632 */
633 virtual bool ProcessEvent(wxEvent& event);
634
635 /**
636 Try to process the event in this handler and all those chained to it.
637
638 As explained in ProcessEvent() documentation, the event handlers may be
639 chained in a doubly-linked list. This function tries to process the
640 event in this handler (including performing any pre-processing done in
641 TryBefore(), e.g. applying validators) and all those following it in
642 the chain until the event is processed or the chain is exhausted.
643
644 This function is called from ProcessEvent() and, in turn, calls
645 TryBefore() and TryAfter(). It is not virtual and so cannot be
646 overridden but can, and should, be called to forward an event to
647 another handler instead of ProcessEvent() which would result in a
648 duplicate call to TryAfter(), e.g. resulting in all unprocessed events
649 being sent to the application object multiple times.
650
651 @since 2.9.1
652
653 @param event
654 Event to process.
655 @return
656 @true if this handler of one of those chained to it processed the
657 event.
658 */
659 bool ProcessEventLocally(wxEvent& event);
660
661 /**
662 Processes an event by calling ProcessEvent() and handles any exceptions
663 that occur in the process.
664 If an exception is thrown in event handler, wxApp::OnExceptionInMainLoop is called.
665
666 @param event
667 Event to process.
668
669 @return @true if the event was processed, @false if no handler was found
670 or an exception was thrown.
671
672 @see wxWindow::HandleWindowEvent
673 */
674 bool SafelyProcessEvent(wxEvent& event);
675
676 /**
677 Processes the pending events previously queued using QueueEvent() or
678 AddPendingEvent(); you must call this function only if you are sure
679 there are pending events for this handler, otherwise a @c wxCHECK
680 will fail.
681
682 The real processing still happens in ProcessEvent() which is called by this
683 function.
684
685 Note that this function needs a valid application object (see
686 wxAppConsole::GetInstance()) because wxApp holds the list of the event
687 handlers with pending events and this function manipulates that list.
688 */
689 void ProcessPendingEvents();
690
691 /**
692 Deletes all events queued on this event handler using QueueEvent() or
693 AddPendingEvent().
694
695 Use with care because the events which are deleted are (obviously) not
696 processed and this may have unwanted consequences (e.g. user actions events
697 will be lost).
698 */
699 void DeletePendingEvents();
700
701 /**
702 Searches the event table, executing an event handler function if an appropriate
703 one is found.
704
705 @param table
706 Event table to be searched.
707 @param event
708 Event to be matched against an event table entry.
709
710 @return @true if a suitable event handler function was found and
711 executed, and the function did not call wxEvent::Skip.
712
713 @remarks This function looks through the object's event table and tries
714 to find an entry that will match the event.
715 An entry will match if:
716 @li The event type matches, and
717 @li the identifier or identifier range matches, or the event table
718 entry's identifier is zero.
719
720 If a suitable function is called but calls wxEvent::Skip, this
721 function will fail, and searching will continue.
722
723 @todo this function in the header is listed as an "implementation only" function;
724 are we sure we want to document it?
725
726 @see ProcessEvent()
727 */
728 virtual bool SearchEventTable(wxEventTable& table,
729 wxEvent& event);
730
731 //@}
732
733
734 /**
735 @name Connecting and disconnecting
736 */
737 //@{
738
739 /**
740 Connects the given function dynamically with the event handler, id and
741 event type.
742
743 Notice that Bind() provides a more flexible and safer way to do the
744 same thing as Connect(), please use it in any new code -- while
745 Connect() is not formally deprecated due to its existing widespread
746 usage, it has no advantages compared to Bind().
747
748 This is an alternative to the use of static event tables. It is more
749 flexible as it allows to connect events generated by some object to an
750 event handler defined in a different object of a different class (which
751 is impossible to do directly with the event tables -- the events can be
752 only handled in another object if they are propagated upwards to it).
753 Do make sure to specify the correct @a eventSink when connecting to an
754 event of a different object.
755
756 See @ref overview_events_bind for more detailed explanation
757 of this function and the @ref page_samples_event sample for usage
758 examples.
759
760 This specific overload allows you to connect an event handler to a @e range
761 of @e source IDs.
762 Do not confuse @e source IDs with event @e types: source IDs identify the
763 event generator objects (typically wxMenuItem or wxWindow objects) while the
764 event @e type identify which type of events should be handled by the
765 given @e function (an event generator object may generate many different
766 types of events!).
767
768 @param id
769 The first ID of the identifier range to be associated with the event
770 handler function.
771 @param lastId
772 The last ID of the identifier range to be associated with the event
773 handler function.
774 @param eventType
775 The event type to be associated with this event handler.
776 @param function
777 The event handler function. Note that this function should
778 be explicitly converted to the correct type which can be done using a macro
779 called @c wxFooEventHandler for the handler for any @c wxFooEvent.
780 @param userData
781 Optional data to be associated with the event table entry.
782 wxWidgets will take ownership of this pointer, i.e. it will be
783 destroyed when the event handler is disconnected or at the program
784 termination. This pointer can be retrieved using
785 wxEvent::GetEventUserData() later.
786 @param eventSink
787 Object whose member function should be called. It must be specified
788 when connecting an event generated by one object to a member
789 function of a different object. If it is omitted, @c this is used.
790
791 @beginWxPerlOnly
792 In wxPerl this function takes 4 arguments: @a id, @a lastid,
793 @a type, @a method; if @a method is undef, the handler is
794 disconnected.}
795 @endWxPerlOnly
796
797 @see Bind<>()
798 */
799 void Connect(int id, int lastId, wxEventType eventType,
800 wxObjectEventFunction function,
801 wxObject* userData = NULL,
802 wxEvtHandler* eventSink = NULL);
803
804 /**
805 See the Connect(int, int, wxEventType, wxObjectEventFunction, wxObject*, wxEvtHandler*)
806 overload for more info.
807
808 This overload can be used to attach an event handler to a single source ID:
809
810 Example:
811 @code
812 frame->Connect( wxID_EXIT,
ce7fe42e 813 wxEVT_MENU,
03e8dc0e
VZ
814 wxCommandEventHandler(MyFrame::OnQuit) );
815 @endcode
816
817 @beginWxPerlOnly
818 Not supported by wxPerl.
819 @endWxPerlOnly
820 */
821 void Connect(int id, wxEventType eventType,
822 wxObjectEventFunction function,
823 wxObject* userData = NULL,
824 wxEvtHandler* eventSink = NULL);
825
826 /**
827 See the Connect(int, int, wxEventType, wxObjectEventFunction, wxObject*, wxEvtHandler*)
828 overload for more info.
829
830 This overload will connect the given event handler so that regardless of the
831 ID of the event source, the handler will be called.
832
833 @beginWxPerlOnly
834 Not supported by wxPerl.
835 @endWxPerlOnly
836 */
837 void Connect(wxEventType eventType,
838 wxObjectEventFunction function,
839 wxObject* userData = NULL,
840 wxEvtHandler* eventSink = NULL);
841
842 /**
843 Disconnects the given function dynamically from the event handler, using the
844 specified parameters as search criteria and returning @true if a matching
845 function has been found and removed.
846
847 This method can only disconnect functions which have been added using the
848 Connect() method. There is no way to disconnect functions connected using
849 the (static) event tables.
850
851 @param eventType
852 The event type associated with this event handler.
853 @param function
854 The event handler function.
855 @param userData
856 Data associated with the event table entry.
857 @param eventSink
858 Object whose member function should be called.
859
860 @beginWxPerlOnly
861 Not supported by wxPerl.
862 @endWxPerlOnly
863 */
864 bool Disconnect(wxEventType eventType,
865 wxObjectEventFunction function,
866 wxObject* userData = NULL,
867 wxEvtHandler* eventSink = NULL);
868
869 /**
870 See the Disconnect(wxEventType, wxObjectEventFunction, wxObject*, wxEvtHandler*)
871 overload for more info.
872
873 This overload takes the additional @a id parameter.
874
875 @beginWxPerlOnly
876 Not supported by wxPerl.
877 @endWxPerlOnly
878 */
879 bool Disconnect(int id = wxID_ANY,
880 wxEventType eventType = wxEVT_NULL,
881 wxObjectEventFunction function = NULL,
882 wxObject* userData = NULL,
883 wxEvtHandler* eventSink = NULL);
884
885 /**
886 See the Disconnect(wxEventType, wxObjectEventFunction, wxObject*, wxEvtHandler*)
887 overload for more info.
888
889 This overload takes an additional range of source IDs.
890
891 @beginWxPerlOnly
892 In wxPerl this function takes 3 arguments: @a id,
893 @a lastid, @a type.
894 @endWxPerlOnly
895 */
896 bool Disconnect(int id, int lastId,
897 wxEventType eventType,
898 wxObjectEventFunction function = NULL,
899 wxObject* userData = NULL,
900 wxEvtHandler* eventSink = NULL);
901 //@}
902
903
904 /**
905 @name Binding and Unbinding
906 */
907 //@{
908
909 /**
910 Binds the given function, functor or method dynamically with the event.
911
912 This offers basically the same functionality as Connect(), but it is
913 more flexible as it also allows you to use ordinary functions and
914 arbitrary functors as event handlers. It is also less restrictive then
915 Connect() because you can use an arbitrary method as an event handler,
916 whereas Connect() requires a wxEvtHandler derived handler.
917
918 See @ref overview_events_bind for more detailed explanation
919 of this function and the @ref page_samples_event sample for usage
920 examples.
921
922 @param eventType
923 The event type to be associated with this event handler.
924 @param functor
925 The event handler functor. This can be an ordinary function but also
926 an arbitrary functor like boost::function<>.
927 @param id
928 The first ID of the identifier range to be associated with the event
929 handler.
930 @param lastId
931 The last ID of the identifier range to be associated with the event
932 handler.
933 @param userData
934 Optional data to be associated with the event table entry.
935 wxWidgets will take ownership of this pointer, i.e. it will be
936 destroyed when the event handler is disconnected or at the program
937 termination. This pointer can be retrieved using
938 wxEvent::GetEventUserData() later.
939
940 @see @ref overview_cpp_rtti_disabled
941
942 @since 2.9.0
943 */
944 template <typename EventTag, typename Functor>
945 void Bind(const EventTag& eventType,
946 Functor functor,
947 int id = wxID_ANY,
948 int lastId = wxID_ANY,
949 wxObject *userData = NULL);
950
951 /**
952 See the Bind<>(const EventTag&, Functor, int, int, wxObject*) overload for
953 more info.
954
955 This overload will bind the given method as the event handler.
956
957 @param eventType
958 The event type to be associated with this event handler.
959 @param method
960 The event handler method. This can be an arbitrary method (doesn't need
961 to be from a wxEvtHandler derived class).
962 @param handler
963 Object whose method should be called. It must always be specified
964 so it can be checked at compile time whether the given method is an
965 actual member of the given handler.
966 @param id
967 The first ID of the identifier range to be associated with the event
968 handler.
969 @param lastId
970 The last ID of the identifier range to be associated with the event
971 handler.
972 @param userData
973 Optional data to be associated with the event table entry.
974 wxWidgets will take ownership of this pointer, i.e. it will be
975 destroyed when the event handler is disconnected or at the program
976 termination. This pointer can be retrieved using
977 wxEvent::GetEventUserData() later.
978
979 @see @ref overview_cpp_rtti_disabled
980
981 @since 2.9.0
982 */
983 template <typename EventTag, typename Class, typename EventArg, typename EventHandler>
984 void Bind(const EventTag &eventType,
985 void (Class::*method)(EventArg &),
986 EventHandler *handler,
987 int id = wxID_ANY,
988 int lastId = wxID_ANY,
989 wxObject *userData = NULL);
990 /**
991 Unbinds the given function, functor or method dynamically from the
992 event handler, using the specified parameters as search criteria and
993 returning @true if a matching function has been found and removed.
994
995 This method can only unbind functions, functors or methods which have
996 been added using the Bind<>() method. There is no way to unbind
997 functions bound using the (static) event tables.
998
999 @param eventType
1000 The event type associated with this event handler.
1001 @param functor
1002 The event handler functor. This can be an ordinary function but also
1003 an arbitrary functor like boost::function<>.
1004 @param id
1005 The first ID of the identifier range associated with the event
1006 handler.
1007 @param lastId
1008 The last ID of the identifier range associated with the event
1009 handler.
1010 @param userData
1011 Data associated with the event table entry.
1012
1013 @see @ref overview_cpp_rtti_disabled
1014
1015 @since 2.9.0
1016 */
1017 template <typename EventTag, typename Functor>
1018 bool Unbind(const EventTag& eventType,
1019 Functor functor,
1020 int id = wxID_ANY,
1021 int lastId = wxID_ANY,
1022 wxObject *userData = NULL);
1023
1024 /**
1025 See the Unbind<>(const EventTag&, Functor, int, int, wxObject*)
1026 overload for more info.
1027
1028 This overload unbinds the given method from the event..
1029
1030 @param eventType
1031 The event type associated with this event handler.
1032 @param method
1033 The event handler method associated with this event.
1034 @param handler
1035 Object whose method was called.
1036 @param id
1037 The first ID of the identifier range associated with the event
1038 handler.
1039 @param lastId
1040 The last ID of the identifier range associated with the event
1041 handler.
1042 @param userData
1043 Data associated with the event table entry.
1044
1045 @see @ref overview_cpp_rtti_disabled
1046
1047 @since 2.9.0
1048 */
1049 template <typename EventTag, typename Class, typename EventArg, typename EventHandler>
1050 bool Unbind(const EventTag &eventType,
1051 void (Class::*method)(EventArg&),
1052 EventHandler *handler,
1053 int id = wxID_ANY,
1054 int lastId = wxID_ANY,
1055 wxObject *userData = NULL );
1056 //@}
1057 /**
1058 @name User-supplied data
1059 */
1060 //@{
1061
1062 /**
1063 Returns user-supplied client data.
1064
1065 @remarks Normally, any extra data the programmer wishes to associate with
1066 the object should be made available by deriving a new class with
1067 new data members.
1068
1069 @see SetClientData()
1070 */
1071 void* GetClientData() const;
1072
1073 /**
1074 Returns a pointer to the user-supplied client data object.
1075
1076 @see SetClientObject(), wxClientData
1077 */
1078 wxClientData* GetClientObject() const;
1079
1080 /**
1081 Sets user-supplied client data.
1082
1083 @param data
1084 Data to be associated with the event handler.
1085
1086 @remarks Normally, any extra data the programmer wishes to associate
1087 with the object should be made available by deriving a new
1088 class with new data members. You must not call this method
1089 and SetClientObject on the same class - only one of them.
1090
1091 @see GetClientData()
1092 */
1093 void SetClientData(void* data);
1094
1095 /**
1096 Set the client data object. Any previous object will be deleted.
1097
1098 @see GetClientObject(), wxClientData
1099 */
1100 void SetClientObject(wxClientData* data);
1101
1102 //@}
1103
1104
1105 /**
1106 @name Event handler chaining
1107
1108 wxEvtHandler can be arranged in a double-linked list of handlers
1109 which is automatically iterated by ProcessEvent() if needed.
1110 */
1111 //@{
42013f4c 1112
03e8dc0e
VZ
1113 /**
1114 Returns @true if the event handler is enabled, @false otherwise.
42013f4c 1115
03e8dc0e
VZ
1116 @see SetEvtHandlerEnabled()
1117 */
1118 bool GetEvtHandlerEnabled() const;
42013f4c 1119
03e8dc0e
VZ
1120 /**
1121 Returns the pointer to the next handler in the chain.
42013f4c 1122
03e8dc0e
VZ
1123 @see SetNextHandler(), GetPreviousHandler(), SetPreviousHandler(),
1124 wxWindow::PushEventHandler, wxWindow::PopEventHandler
1125 */
1126 wxEvtHandler* GetNextHandler() const;
23324ae1 1127
03e8dc0e
VZ
1128 /**
1129 Returns the pointer to the previous handler in the chain.
42013f4c 1130
03e8dc0e
VZ
1131 @see SetPreviousHandler(), GetNextHandler(), SetNextHandler(),
1132 wxWindow::PushEventHandler, wxWindow::PopEventHandler
1133 */
1134 wxEvtHandler* GetPreviousHandler() const;
7f853dd0 1135
03e8dc0e
VZ
1136 /**
1137 Enables or disables the event handler.
42013f4c 1138
03e8dc0e
VZ
1139 @param enabled
1140 @true if the event handler is to be enabled, @false if it is to be disabled.
1141
1142 @remarks You can use this function to avoid having to remove the event
1143 handler from the chain, for example when implementing a
1144 dialog editor and changing from edit to test mode.
1145
1146 @see GetEvtHandlerEnabled()
1147 */
1148 void SetEvtHandlerEnabled(bool enabled);
42013f4c
FM
1149
1150 /**
03e8dc0e 1151 Sets the pointer to the next handler.
42013f4c 1152
03e8dc0e
VZ
1153 @remarks
1154 See ProcessEvent() for more info about how the chains of event handlers
1155 are internally used.
1156 Also remember that wxEvtHandler uses double-linked lists and thus if you
1157 use this function, you should also call SetPreviousHandler() on the
1158 argument passed to this function:
1159 @code
1160 handlerA->SetNextHandler(handlerB);
1161 handlerB->SetPreviousHandler(handlerA);
1162 @endcode
7f853dd0 1163
03e8dc0e
VZ
1164 @param handler
1165 The event handler to be set as the next handler.
1166 Cannot be @NULL.
1167
1168 @see @ref overview_events_processing
7f853dd0 1169 */
03e8dc0e 1170 virtual void SetNextHandler(wxEvtHandler* handler);
7f853dd0
FM
1171
1172 /**
03e8dc0e
VZ
1173 Sets the pointer to the previous handler.
1174 All remarks about SetNextHandler() apply to this function as well.
1175
1176 @param handler
1177 The event handler to be set as the previous handler.
1178 Cannot be @NULL.
1179
1180 @see @ref overview_events_processing
7f853dd0 1181 */
03e8dc0e 1182 virtual void SetPreviousHandler(wxEvtHandler* handler);
7f853dd0
FM
1183
1184 /**
03e8dc0e
VZ
1185 Unlinks this event handler from the chain it's part of (if any);
1186 then links the "previous" event handler to the "next" one
1187 (so that the chain won't be interrupted).
1188
1189 E.g. if before calling Unlink() you have the following chain:
1190 @image html evthandler_unlink_before.png
1191 then after calling @c B->Unlink() you'll have:
1192 @image html evthandler_unlink_after.png
1193
1194 @since 2.9.0
42013f4c 1195 */
03e8dc0e 1196 void Unlink();
8cc208e3 1197
03e8dc0e
VZ
1198 /**
1199 Returns @true if the next and the previous handler pointers of this
1200 event handler instance are @NULL.
8cc208e3 1201
03e8dc0e 1202 @since 2.9.0
8cc208e3 1203
03e8dc0e
VZ
1204 @see SetPreviousHandler(), SetNextHandler()
1205 */
1206 bool IsUnlinked() const;
8cc208e3 1207
03e8dc0e 1208 //@}
8cc208e3 1209
03e8dc0e
VZ
1210 /**
1211 @name Global event filters.
1212
1213 Methods for working with the global list of event filters.
1214
1215 Event filters can be defined to pre-process all the events that happen
1216 in an application, see wxEventFilter documentation for more information.
1217 */
1218 //@{
1219
1220 /**
1221 Add an event filter whose FilterEvent() method will be called for each
1222 and every event processed by wxWidgets.
1223
1224 The filters are called in LIFO order and wxApp is registered as an
1225 event filter by default. The pointer must remain valid until it's
1226 removed with RemoveFilter() and is not deleted by wxEvtHandler.
1227
1228 @since 2.9.3
1229 */
1230 static void AddFilter(wxEventFilter* filter);
1231
1232 /**
1233 Remove a filter previously installed with AddFilter().
1234
1235 It's an error to remove a filter that hadn't been previously added or
1236 was already removed.
1237
1238 @since 2.9.3
1239 */
1240 static void RemoveFilter(wxEventFilter* filter);
1241
1242 //@}
1243
1244protected:
1245 /**
1246 Method called by ProcessEvent() before examining this object event
1247 tables.
1248
1249 This method can be overridden to hook into the event processing logic
1250 as early as possible. You should usually call the base class version
1251 when overriding this method, even if wxEvtHandler itself does nothing
1252 here, some derived classes do use this method, e.g. wxWindow implements
1253 support for wxValidator in it.
1254
1255 Example:
1256 @code
1257 class MyClass : public BaseClass // inheriting from wxEvtHandler
1258 {
1259 ...
1260 protected:
1261 virtual bool TryBefore(wxEvent& event)
1262 {
1263 if ( MyPreProcess(event) )
1264 return true;
1265
1266 return BaseClass::TryBefore(event);
1267 }
1268 };
1269 @endcode
1270
1271 @see ProcessEvent()
1272 */
1273 virtual bool TryBefore(wxEvent& event);
1274
1275 /**
1276 Method called by ProcessEvent() as last resort.
1277
1278 This method can be overridden to implement post-processing for the
1279 events which were not processed anywhere else.
1280
1281 The base class version handles forwarding the unprocessed events to
1282 wxApp at wxEvtHandler level and propagating them upwards the window
1283 child-parent chain at wxWindow level and so should usually be called
1284 when overriding this method:
1285 @code
1286 class MyClass : public BaseClass // inheriting from wxEvtHandler
1287 {
1288 ...
1289 protected:
1290 virtual bool TryAfter(wxEvent& event)
1291 {
1292 if ( BaseClass::TryAfter(event) )
1293 return true;
1294
1295 return MyPostProcess(event);
1296 }
1297 };
1298 @endcode
23324ae1 1299
03e8dc0e
VZ
1300 @see ProcessEvent()
1301 */
1302 virtual bool TryAfter(wxEvent& event);
1303};
e54c96f1 1304
551048c2
VZ
1305#endif // wxUSE_BASE
1306
1307#if wxUSE_GUI
71abf17e 1308
7a34307e
VZ
1309/**
1310 Flags for categories of keys.
1311
1312 These values are used by wxKeyEvent::IsKeyInCategory(). They may be
1313 combined via the bitwise operators |, &, and ~.
1314
1315 @since 2.9.1
1316*/
1317enum wxKeyCategoryFlags
1318{
1319 /// arrow keys, on and off numeric keypads
1320 WXK_CATEGORY_ARROW,
1321
1322 /// page up and page down keys, on and off numeric keypads
1323 WXK_CATEGORY_PAGING,
1324
1325 /// home and end keys, on and off numeric keypads
1326 WXK_CATEGORY_JUMP,
1327
4f742042 1328 /// tab key, on and off numeric keypads
7a34307e
VZ
1329 WXK_CATEGORY_TAB,
1330
1331 /// backspace and delete keys, on and off numeric keypads
1332 WXK_CATEGORY_CUT,
1333
1334 /// union of WXK_CATEGORY_ARROW, WXK_CATEGORY_PAGING, and WXK_CATEGORY_JUMP categories
1335 WXK_CATEGORY_NAVIGATION
1336};
1337
1338
23324ae1 1339/**
42013f4c 1340 @class wxKeyEvent
7c913512 1341
0d2f3b9d 1342 This event class contains information about key press and release events.
7c913512 1343
7333c0ef
VZ
1344 The main information carried by this event is the key being pressed or
1345 released. It can be accessed using either GetKeyCode() function or
1346 GetUnicodeKey(). For the printable characters, the latter should be used as
1347 it works for any keys, including non-Latin-1 characters that can be entered
1348 when using national keyboard layouts. GetKeyCode() should be used to handle
1349 special characters (such as cursor arrows keys or @c HOME or @c INS and so
1350 on) which correspond to ::wxKeyCode enum elements above the @c WXK_START
1351 constant. While GetKeyCode() also returns the character code for Latin-1
1352 keys for compatibility, it doesn't work for Unicode characters in general
1353 and will return @c WXK_NONE for any non-Latin-1 ones. For this reason, it's
1354 recommended to always use GetUnicodeKey() and only fall back to GetKeyCode()
1355 if GetUnicodeKey() returned @c WXK_NONE meaning that the event corresponds
1356 to a non-printable special keys.
1357
1358 While both of these functions can be used with the events of @c
1359 wxEVT_KEY_DOWN, @c wxEVT_KEY_UP and @c wxEVT_CHAR types, the values
1360 returned by them are different for the first two events and the last one.
1361 For the latter, the key returned corresponds to the character that would
1362 appear in e.g. a text zone if the user pressed the key in it. As such, its
1363 value depends on the current state of the Shift key and, for the letters,
1364 on the state of Caps Lock modifier. For example, if @c A key is pressed
1365 without Shift being held down, wxKeyEvent of type @c wxEVT_CHAR generated
1366 for this key press will return (from either GetKeyCode() or GetUnicodeKey()
1367 as their meanings coincide for ASCII characters) key code of 97
1368 corresponding the ASCII value of @c a. And if the same key is pressed but
1369 with Shift being held (or Caps Lock being active), then the key could would
1370 be 65, i.e. ASCII value of capital @c A.
1371
1372 However for the key down and up events the returned key code will instead
1373 be @c A independently of the state of the modifier keys i.e. it depends
1374 only on physical key being pressed and is not translated to its logical
1375 representation using the current keyboard state. Such untranslated key
1376 codes are defined as follows:
1377 - For the letters they correspond to the @e upper case value of the
1378 letter.
1379 - For the other alphanumeric keys (e.g. @c 7 or @c +), the untranslated
1380 key code corresponds to the character produced by the key when it is
1381 pressed without Shift. E.g. in standard US keyboard layout the
1382 untranslated key code for the key @c =/+ in the upper right corner of
1383 the keyboard is 61 which is the ASCII value of @c =.
1384 - For the rest of the keys (i.e. special non-printable keys) it is the
1385 same as the normal key code as no translation is used anyhow.
1386
1387 Notice that the first rule applies to all Unicode letters, not just the
1388 usual Latin-1 ones. However for non-Latin-1 letters only GetUnicodeKey()
1389 can be used to retrieve the key code as GetKeyCode() just returns @c
1390 WXK_NONE in this case.
1391
1392 To summarize: you should handle @c wxEVT_CHAR if you need the translated
1393 key and @c wxEVT_KEY_DOWN if you only need the value of the key itself,
1394 independent of the current keyboard state.
1395
1396 @note Not all key down events may be generated by the user. As an example,
1397 @c wxEVT_KEY_DOWN with @c = key code can be generated using the
1398 standard US keyboard layout but not using the German one because the @c
1399 = key corresponds to Shift-0 key combination in this layout and the key
1400 code for it is @c 0, not @c =. Because of this you should avoid
1401 requiring your users to type key events that might be impossible to
1402 enter on their keyboard.
1403
1404
1405 Another difference between key and char events is that another kind of
1406 translation is done for the latter ones when the Control key is pressed:
1407 char events for ASCII letters in this case carry codes corresponding to the
1408 ASCII value of Ctrl-Latter, i.e. 1 for Ctrl-A, 2 for Ctrl-B and so on until
1409 26 for Ctrl-Z. This is convenient for terminal-like applications and can be
1410 completely ignored by all the other ones (if you need to handle Ctrl-A it
1411 is probably a better idea to use the key event rather than the char one).
1412 Notice that currently no translation is done for the presses of @c [, @c
1413 \\, @c ], @c ^ and @c _ keys which might be mapped to ASCII values from 27
1414 to 31.
09bdb1cb
VZ
1415 Since version 2.9.2, the enum values @c WXK_CONTROL_A - @c WXK_CONTROL_Z
1416 can be used instead of the non-descriptive constant values 1-26.
7333c0ef
VZ
1417
1418 Finally, modifier keys only generate key events but no char events at all.
1419 The modifiers keys are @c WXK_SHIFT, @c WXK_CONTROL, @c WXK_ALT and various
1420 @c WXK_WINDOWS_XXX from ::wxKeyCode enum.
0d2f3b9d 1421
d0fb62a6
VZ
1422 Modifier keys events are special in one additional aspect: usually the
1423 keyboard state associated with a key press is well defined, e.g.
1424 wxKeyboardState::ShiftDown() returns @c true only if the Shift key was held
1425 pressed when the key that generated this event itself was pressed. There is
1426 an ambiguity for the key press events for Shift key itself however. By
1427 convention, it is considered to be already pressed when it is pressed and
1428 already released when it is released. In other words, @c wxEVT_KEY_DOWN
1429 event for the Shift key itself will have @c wxMOD_SHIFT in GetModifiers()
1430 and ShiftDown() will return true while the @c wxEVT_KEY_UP event for Shift
1431 itself will not have @c wxMOD_SHIFT in its modifiers and ShiftDown() will
1432 return false.
1433
1434
1435 @b Tip: You may discover the key codes and modifiers generated by all the
1436 keys on your system interactively by running the @ref
1437 page_samples_keyboard wxWidgets sample and pressing some keys in it.
1f1d2182 1438
42013f4c
FM
1439 @note If a key down (@c EVT_KEY_DOWN) event is caught and the event handler
1440 does not call @c event.Skip() then the corresponding char event
d0fb62a6
VZ
1441 (@c EVT_CHAR) will not happen. This is by design and enables the
1442 programs that handle both types of events to avoid processing the
1443 same key twice. As a consequence, if you do not want to suppress the
1444 @c wxEVT_CHAR events for the keys you handle, always call @c
1445 event.Skip() in your @c wxEVT_KEY_DOWN handler. Not doing may also
1446 prevent accelerators defined using this key from working.
1f1d2182 1447
5effc1cf
VZ
1448 @note If a key is maintained in a pressed state, you will typically get a
1449 lot of (automatically generated) key down events but only one key up
1450 one at the end when the key is released so it is wrong to assume that
1451 there is one up event corresponding to each down one.
1452
42013f4c
FM
1453 @note For Windows programmers: The key and char events in wxWidgets are
1454 similar to but slightly different from Windows @c WM_KEYDOWN and
1455 @c WM_CHAR events. In particular, Alt-x combination will generate a
0d2f3b9d
VZ
1456 char event in wxWidgets (unless it is used as an accelerator) and
1457 almost all keys, including ones without ASCII equivalents, generate
1458 char events too.
1f1d2182
FM
1459
1460
42013f4c 1461 @beginEventTable{wxKeyEvent}
8c6791e4 1462 @event{EVT_KEY_DOWN(func)}
f47a3591
VZ
1463 Process a @c wxEVT_KEY_DOWN event (any key has been pressed). If this
1464 event is handled and not skipped, @c wxEVT_CHAR will not be generated
1465 at all for this key press (but @c wxEVT_KEY_UP will be).
8c6791e4 1466 @event{EVT_KEY_UP(func)}
3051a44a 1467 Process a @c wxEVT_KEY_UP event (any key has been released).
8c6791e4 1468 @event{EVT_CHAR(func)}
3051a44a 1469 Process a @c wxEVT_CHAR event.
ff450486 1470 @event{EVT_CHAR_HOOK(func)}
3a95f73c
VZ
1471 Process a @c wxEVT_CHAR_HOOK event. Unlike all the other key events,
1472 this event is propagated upwards the window hierarchy which allows
1473 intercepting it in the parent window of the focused window to which it
1474 is sent initially (if there is no focused window, this event is sent to
1475 the wxApp global object). It is also generated before any other key
1476 events and so gives the parent window an opportunity to modify the
1477 keyboard handling of its children, e.g. it is used internally by
1478 wxWidgets in some ports to intercept pressing Esc key in any child of a
4cf1a9bf
VZ
1479 dialog to close the dialog itself when it's pressed. By default, if
1480 this event is handled, i.e. the handler doesn't call wxEvent::Skip(),
1481 neither @c wxEVT_KEY_DOWN nor @c wxEVT_CHAR events will be generated
1482 (although @c wxEVT_KEY_UP still will be), i.e. it replaces the normal
1483 key events. However by calling the special DoAllowNextEvent() method
1484 you can handle @c wxEVT_CHAR_HOOK and still allow normal events
1485 generation. This is something that is rarely useful but can be required
1486 if you need to prevent a parent @c wxEVT_CHAR_HOOK handler from running
1487 without suppressing the normal key events. Finally notice that this
1488 event is not generated when the mouse is captured as it is considered
1489 that the window which has the capture should receive all the keyboard
1490 events too without allowing its parent wxTopLevelWindow to interfere
1491 with their processing.
1f1d2182 1492 @endEventTable
7c913512 1493
0e097789
VZ
1494 @see wxKeyboardState
1495
23324ae1
FM
1496 @library{wxcore}
1497 @category{events}
23324ae1 1498*/
0e097789
VZ
1499class wxKeyEvent : public wxEvent,
1500 public wxKeyboardState
23324ae1
FM
1501{
1502public:
1503 /**
1504 Constructor.
42013f4c 1505 Currently, the only valid event types are @c wxEVT_CHAR and @c wxEVT_CHAR_HOOK.
23324ae1 1506 */
42013f4c 1507 wxKeyEvent(wxEventType keyEventType = wxEVT_NULL);
23324ae1 1508
42013f4c 1509 /**
b6885972
VZ
1510 Returns the key code of the key that generated this event.
1511
1512 ASCII symbols return normal ASCII values, while events from special
1513 keys such as "left cursor arrow" (@c WXK_LEFT) return values outside of
1514 the ASCII range. See ::wxKeyCode for a full list of the virtual key
1515 codes.
1516
1517 Note that this method returns a meaningful value only for special
ecad2757
VZ
1518 non-alphanumeric keys or if the user entered a Latin-1 character (this
1519 includes ASCII and the accented letters found in Western European
1520 languages but not letters of other alphabets such as e.g. Cyrillic).
1521 Otherwise it simply method returns @c WXK_NONE and GetUnicodeKey()
1522 should be used to obtain the corresponding Unicode character.
b6885972
VZ
1523
1524 Using GetUnicodeKey() is in general the right thing to do if you are
1525 interested in the characters typed by the user, GetKeyCode() should be
1526 only used for special keys (for which GetUnicodeKey() returns @c
1527 WXK_NONE). To handle both kinds of keys you might write:
1528 @code
1529 void MyHandler::OnChar(wxKeyEvent& event)
1530 {
9a1b36af
VZ
1531 wxChar uc = event.GetUnicodeKey();
1532 if ( uc != WXK_NONE )
b6885972 1533 {
9a1b36af
VZ
1534 // It's a "normal" character. Notice that this includes
1535 // control characters in 1..31 range, e.g. WXK_RETURN or
6b7bcbf1
VZ
1536 // WXK_BACK, so check for them explicitly.
1537 if ( uc >= 32 )
9a1b36af
VZ
1538 {
1539 wxLogMessage("You pressed '%c'", uc);
1540 }
1541 else
1542 {
1543 // It's a control character
1544 ...
1545 }
b6885972 1546 }
9a1b36af 1547 else // No Unicode equivalent.
b6885972
VZ
1548 {
1549 // It's a special key, deal with all the known ones:
6884a3b6 1550 switch ( event.GetKeyCode() )
b6885972
VZ
1551 {
1552 case WXK_LEFT:
1553 case WXK_RIGHT:
1554 ... move cursor ...
1555 break;
1556
1557 case WXK_F1:
1558 ... give help ...
1559 break;
1560 }
1561 }
1562 }
1563 @endcode
42013f4c
FM
1564 */
1565 int GetKeyCode() const;
1566
7a34307e
VZ
1567 /**
1568 Returns true if the key is in the given key category.
1569
1570 @param category
1571 A bitwise combination of named ::wxKeyCategoryFlags constants.
1572
1573 @since 2.9.1
1574 */
1575 bool IsKeyInCategory(int category) const;
1576
42013f4c
FM
1577 //@{
1578 /**
1579 Obtains the position (in client coordinates) at which the key was pressed.
2f7baaec 1580
e0e6f3dc
VZ
1581 Notice that under most platforms this position is simply the current
1582 mouse pointer position and has no special relationship to the key event
1583 itself.
1584
1585 @a x and @a y may be @NULL if the corresponding coordinate is not
1586 needed.
42013f4c
FM
1587 */
1588 wxPoint GetPosition() const;
e0e6f3dc 1589 void GetPosition(wxCoord* x, wxCoord* y) const;
42013f4c
FM
1590 //@}
1591
1592 /**
5995a84f
VZ
1593 Returns the raw key code for this event.
1594
1595 The flags are platform-dependent and should only be used if the
1596 functionality provided by other wxKeyEvent methods is insufficient.
1597
1598 Under MSW, the raw key code is the value of @c wParam parameter of the
1599 corresponding message.
1600
1601 Under GTK, the raw key code is the @c keyval field of the corresponding
1602 GDK event.
1603
1604 Under OS X, the raw key code is the @c keyCode field of the
1605 corresponding NSEvent.
42013f4c
FM
1606
1607 @note Currently the raw key codes are not supported by all ports, use
1608 @ifdef_ wxHAS_RAW_KEY_CODES to determine if this feature is available.
1609 */
1610 wxUint32 GetRawKeyCode() const;
1611
1612 /**
5995a84f
VZ
1613 Returns the low level key flags for this event.
1614
1615 The flags are platform-dependent and should only be used if the
1616 functionality provided by other wxKeyEvent methods is insufficient.
1617
1618 Under MSW, the raw flags are just the value of @c lParam parameter of
1619 the corresponding message.
1620
1621 Under GTK, the raw flags contain the @c hardware_keycode field of the
1622 corresponding GDK event.
1623
1624 Under OS X, the raw flags contain the modifiers state.
42013f4c
FM
1625
1626 @note Currently the raw key flags are not supported by all ports, use
1627 @ifdef_ wxHAS_RAW_KEY_CODES to determine if this feature is available.
1628 */
1629 wxUint32 GetRawKeyFlags() const;
1630
1631 /**
1632 Returns the Unicode character corresponding to this key event.
1633
0d2f3b9d 1634 If the key pressed doesn't have any character value (e.g. a cursor key)
86408a03
VZ
1635 this method will return @c WXK_NONE. In this case you should use
1636 GetKeyCode() to retrieve the value of the key.
0d2f3b9d 1637
42013f4c
FM
1638 This function is only available in Unicode build, i.e. when
1639 @c wxUSE_UNICODE is 1.
1640 */
1641 wxChar GetUnicodeKey() const;
1642
1643 /**
1644 Returns the X position (in client coordinates) of the event.
2f7baaec
VZ
1645
1646 @see GetPosition()
42013f4c
FM
1647 */
1648 wxCoord GetX() const;
1649
1650 /**
1651 Returns the Y position (in client coordinates) of the event.
2f7baaec
VZ
1652
1653 @see GetPosition()
42013f4c
FM
1654 */
1655 wxCoord GetY() const;
4cf1a9bf
VZ
1656
1657 /**
1658 Allow normal key events generation.
1659
1660 Can be called from @c wxEVT_CHAR_HOOK handler to indicate that the
1661 generation of normal events should @em not be suppressed, as it happens
1662 by default when this event is handled.
1663
1664 The intended use of this method is to allow some window object to
1665 prevent @c wxEVT_CHAR_HOOK handler in its parent window from running by
1666 defining its own handler for this event. Without calling this method,
1667 this would result in not generating @c wxEVT_KEY_DOWN nor @c wxEVT_CHAR
1668 events at all but by calling it you can ensure that these events would
1669 still be generated, even if @c wxEVT_CHAR_HOOK event was handled.
1670
1671 @since 2.9.3
1672 */
1673 void DoAllowNextEvent();
1674
1675 /**
1676 Returns @true if DoAllowNextEvent() had been called, @false by default.
1677
1678 This method is used by wxWidgets itself to determine whether the normal
1679 key events should be generated after @c wxEVT_CHAR_HOOK processing.
1680
1681 @since 2.9.3
1682 */
1683 bool IsNextEventAllowed() const;
23324ae1
FM
1684};
1685
1686
e54c96f1 1687
50e55c13
RD
1688enum
1689{
1690 wxJOYSTICK1,
1691 wxJOYSTICK2
1692};
1693
1694// Which button is down?
1695enum
1696{
1697 wxJOY_BUTTON_ANY = -1,
1698 wxJOY_BUTTON1 = 1,
1699 wxJOY_BUTTON2 = 2,
1700 wxJOY_BUTTON3 = 4,
1701 wxJOY_BUTTON4 = 8
1702};
1703
1704
23324ae1 1705/**
42013f4c 1706 @class wxJoystickEvent
7c913512 1707
42013f4c
FM
1708 This event class contains information about joystick events, particularly
1709 events received by windows.
1f1d2182 1710
42013f4c 1711 @beginEventTable{wxJoystickEvent}
3051a44a
FM
1712 @event{EVT_JOY_BUTTON_DOWN(func)}
1713 Process a @c wxEVT_JOY_BUTTON_DOWN event.
1714 @event{EVT_JOY_BUTTON_UP(func)}
1715 Process a @c wxEVT_JOY_BUTTON_UP event.
1716 @event{EVT_JOY_MOVE(func)}
1717 Process a @c wxEVT_JOY_MOVE event.
1718 @event{EVT_JOY_ZMOVE(func)}
1719 Process a @c wxEVT_JOY_ZMOVE event.
1720 @event{EVT_JOYSTICK_EVENTS(func)}
42013f4c 1721 Processes all joystick events.
1f1d2182
FM
1722 @endEventTable
1723
23324ae1
FM
1724 @library{wxcore}
1725 @category{events}
7c913512 1726
42013f4c 1727 @see wxJoystick
23324ae1 1728*/
42013f4c 1729class wxJoystickEvent : public wxEvent
23324ae1
FM
1730{
1731public:
1732 /**
1733 Constructor.
1734 */
42013f4c
FM
1735 wxJoystickEvent(wxEventType eventType = wxEVT_NULL, int state = 0,
1736 int joystick = wxJOYSTICK1,
1737 int change = 0);
23324ae1
FM
1738
1739 /**
42013f4c
FM
1740 Returns @true if the event was a down event from the specified button
1741 (or any button).
23324ae1 1742
42013f4c
FM
1743 @param button
1744 Can be @c wxJOY_BUTTONn where @c n is 1, 2, 3 or 4; or @c wxJOY_BUTTON_ANY to
1745 indicate any button down event.
23324ae1 1746 */
42013f4c 1747 bool ButtonDown(int button = wxJOY_BUTTON_ANY) const;
23324ae1
FM
1748
1749 /**
42013f4c 1750 Returns @true if the specified button (or any button) was in a down state.
23324ae1 1751
42013f4c
FM
1752 @param button
1753 Can be @c wxJOY_BUTTONn where @c n is 1, 2, 3 or 4; or @c wxJOY_BUTTON_ANY to
1754 indicate any button down event.
23324ae1 1755 */
42013f4c 1756 bool ButtonIsDown(int button = wxJOY_BUTTON_ANY) const;
23324ae1
FM
1757
1758 /**
42013f4c
FM
1759 Returns @true if the event was an up event from the specified button
1760 (or any button).
1761
1762 @param button
1763 Can be @c wxJOY_BUTTONn where @c n is 1, 2, 3 or 4; or @c wxJOY_BUTTON_ANY to
1764 indicate any button down event.
23324ae1 1765 */
42013f4c 1766 bool ButtonUp(int button = wxJOY_BUTTON_ANY) const;
23324ae1
FM
1767
1768 /**
42013f4c
FM
1769 Returns the identifier of the button changing state.
1770
1771 This is a @c wxJOY_BUTTONn identifier, where @c n is one of 1, 2, 3, 4.
23324ae1 1772 */
42013f4c 1773 int GetButtonChange() const;
23324ae1
FM
1774
1775 /**
42013f4c
FM
1776 Returns the down state of the buttons.
1777
1778 This is a @c wxJOY_BUTTONn identifier, where @c n is one of 1, 2, 3, 4.
23324ae1 1779 */
42013f4c 1780 int GetButtonState() const;
23324ae1
FM
1781
1782 /**
42013f4c
FM
1783 Returns the identifier of the joystick generating the event - one of
1784 wxJOYSTICK1 and wxJOYSTICK2.
23324ae1 1785 */
42013f4c 1786 int GetJoystick() const;
23324ae1
FM
1787
1788 /**
42013f4c 1789 Returns the x, y position of the joystick event.
3b2f80c2
VZ
1790
1791 These coordinates are valid for all the events except wxEVT_JOY_ZMOVE.
23324ae1 1792 */
42013f4c 1793 wxPoint GetPosition() const;
23324ae1
FM
1794
1795 /**
42013f4c 1796 Returns the z position of the joystick event.
3b2f80c2
VZ
1797
1798 This method can only be used for wxEVT_JOY_ZMOVE events.
23324ae1 1799 */
42013f4c 1800 int GetZPosition() const;
23324ae1
FM
1801
1802 /**
42013f4c
FM
1803 Returns @true if this was a button up or down event
1804 (@e not 'is any button down?').
23324ae1 1805 */
42013f4c 1806 bool IsButton() const;
23324ae1
FM
1807
1808 /**
42013f4c 1809 Returns @true if this was an x, y move event.
23324ae1 1810 */
42013f4c 1811 bool IsMove() const;
23324ae1
FM
1812
1813 /**
42013f4c 1814 Returns @true if this was a z move event.
23324ae1 1815 */
42013f4c
FM
1816 bool IsZMove() const;
1817};
23324ae1 1818
3c4f71cc 1819
23324ae1 1820
42013f4c
FM
1821/**
1822 @class wxScrollWinEvent
42013f4c
FM
1823
1824 A scroll event holds information about events sent from scrolling windows.
1825
3051a44a
FM
1826 Note that you can use the EVT_SCROLLWIN* macros for intercepting scroll window events
1827 from the receiving window.
23324ae1 1828
42013f4c 1829 @beginEventTable{wxScrollWinEvent}
8c6791e4 1830 @event{EVT_SCROLLWIN(func)}
42013f4c 1831 Process all scroll events.
8c6791e4 1832 @event{EVT_SCROLLWIN_TOP(func)}
3a194bda 1833 Process @c wxEVT_SCROLLWIN_TOP scroll-to-top events.
8c6791e4 1834 @event{EVT_SCROLLWIN_BOTTOM(func)}
3a194bda 1835 Process @c wxEVT_SCROLLWIN_BOTTOM scroll-to-bottom events.
8c6791e4 1836 @event{EVT_SCROLLWIN_LINEUP(func)}
3a194bda 1837 Process @c wxEVT_SCROLLWIN_LINEUP line up events.
8c6791e4 1838 @event{EVT_SCROLLWIN_LINEDOWN(func)}
3a194bda 1839 Process @c wxEVT_SCROLLWIN_LINEDOWN line down events.
8c6791e4 1840 @event{EVT_SCROLLWIN_PAGEUP(func)}
3a194bda 1841 Process @c wxEVT_SCROLLWIN_PAGEUP page up events.
8c6791e4 1842 @event{EVT_SCROLLWIN_PAGEDOWN(func)}
3a194bda 1843 Process @c wxEVT_SCROLLWIN_PAGEDOWN page down events.
8c6791e4 1844 @event{EVT_SCROLLWIN_THUMBTRACK(func)}
3a194bda 1845 Process @c wxEVT_SCROLLWIN_THUMBTRACK thumbtrack events
42013f4c 1846 (frequent events sent as the user drags the thumbtrack).
8c6791e4 1847 @event{EVT_SCROLLWIN_THUMBRELEASE(func)}
3a194bda 1848 Process @c wxEVT_SCROLLWIN_THUMBRELEASE thumb release events.
42013f4c
FM
1849 @endEventTable
1850
1851
1852 @library{wxcore}
1853 @category{events}
1854
3e083d65 1855 @see wxScrollEvent, @ref overview_events
42013f4c
FM
1856*/
1857class wxScrollWinEvent : public wxEvent
1858{
1859public:
23324ae1 1860 /**
42013f4c 1861 Constructor.
23324ae1 1862 */
42013f4c
FM
1863 wxScrollWinEvent(wxEventType commandType = wxEVT_NULL, int pos = 0,
1864 int orientation = 0);
23324ae1
FM
1865
1866 /**
42013f4c
FM
1867 Returns wxHORIZONTAL or wxVERTICAL, depending on the orientation of the
1868 scrollbar.
1869
1870 @todo wxHORIZONTAL and wxVERTICAL should go in their own enum
23324ae1 1871 */
42013f4c 1872 int GetOrientation() const;
23324ae1
FM
1873
1874 /**
42013f4c
FM
1875 Returns the position of the scrollbar for the thumb track and release events.
1876
1877 Note that this field can't be used for the other events, you need to query
1878 the window itself for the current position in that case.
23324ae1 1879 */
42013f4c 1880 int GetPosition() const;
a90e69f7
RD
1881
1882 void SetOrientation(int orient);
1883 void SetPosition(int pos);
23324ae1
FM
1884};
1885
1886
e54c96f1 1887
23324ae1 1888/**
42013f4c 1889 @class wxSysColourChangedEvent
7c913512 1890
42013f4c
FM
1891 This class is used for system colour change events, which are generated
1892 when the user changes the colour settings using the control panel.
1893 This is only appropriate under Windows.
7c913512 1894
42013f4c
FM
1895 @remarks
1896 The default event handler for this event propagates the event to child windows,
1897 since Windows only sends the events to top-level windows.
1898 If intercepting this event for a top-level window, remember to call the base
1899 class handler, or to pass the event on to the window's children explicitly.
3d6c68c1 1900
42013f4c 1901 @beginEventTable{wxSysColourChangedEvent}
8c6791e4 1902 @event{EVT_SYS_COLOUR_CHANGED(func)}
3051a44a 1903 Process a @c wxEVT_SYS_COLOUR_CHANGED event.
3d6c68c1
VS
1904 @endEventTable
1905
23324ae1
FM
1906 @library{wxcore}
1907 @category{events}
7c913512 1908
3e083d65 1909 @see @ref overview_events
23324ae1 1910*/
42013f4c 1911class wxSysColourChangedEvent : public wxEvent
23324ae1
FM
1912{
1913public:
1914 /**
3d6c68c1 1915 Constructor.
23324ae1 1916 */
42013f4c 1917 wxSysColourChangedEvent();
23324ae1
FM
1918};
1919
1920
e54c96f1 1921
551048c2
VZ
1922/**
1923 @class wxCommandEvent
1924
1925 This event class contains information about command events, which originate
1926 from a variety of simple controls.
1927
1928 Note that wxCommandEvents and wxCommandEvent-derived event classes by default
1929 and unlike other wxEvent-derived classes propagate upward from the source
1930 window (the window which emits the event) up to the first parent which processes
1931 the event. Be sure to read @ref overview_events_propagation.
1932
1933 More complex controls, such as wxTreeCtrl, have separate command event classes.
1934
1935 @beginEventTable{wxCommandEvent}
1936 @event{EVT_COMMAND(id, event, func)}
1937 Process a command, supplying the window identifier, command event identifier,
1938 and member function.
1939 @event{EVT_COMMAND_RANGE(id1, id2, event, func)}
1940 Process a command for a range of window identifiers, supplying the minimum and
1941 maximum window identifiers, command event identifier, and member function.
1942 @event{EVT_BUTTON(id, func)}
ce7fe42e 1943 Process a @c wxEVT_BUTTON command, which is generated by a wxButton control.
551048c2 1944 @event{EVT_CHECKBOX(id, func)}
ce7fe42e 1945 Process a @c wxEVT_CHECKBOX command, which is generated by a wxCheckBox control.
551048c2 1946 @event{EVT_CHOICE(id, func)}
ce7fe42e 1947 Process a @c wxEVT_CHOICE command, which is generated by a wxChoice control.
551048c2 1948 @event{EVT_COMBOBOX(id, func)}
ce7fe42e 1949 Process a @c wxEVT_COMBOBOX command, which is generated by a wxComboBox control.
551048c2 1950 @event{EVT_LISTBOX(id, func)}
ce7fe42e 1951 Process a @c wxEVT_LISTBOX command, which is generated by a wxListBox control.
551048c2 1952 @event{EVT_LISTBOX_DCLICK(id, func)}
ce7fe42e 1953 Process a @c wxEVT_LISTBOX_DCLICK command, which is generated by a wxListBox control.
551048c2 1954 @event{EVT_CHECKLISTBOX(id, func)}
ce7fe42e 1955 Process a @c wxEVT_CHECKLISTBOX command, which is generated by a wxCheckListBox control.
551048c2 1956 @event{EVT_MENU(id, func)}
ce7fe42e 1957 Process a @c wxEVT_MENU command, which is generated by a menu item.
551048c2 1958 @event{EVT_MENU_RANGE(id1, id2, func)}
ce7fe42e 1959 Process a @c wxEVT_MENU command, which is generated by a range of menu items.
551048c2
VZ
1960 @event{EVT_CONTEXT_MENU(func)}
1961 Process the event generated when the user has requested a popup menu to appear by
1962 pressing a special keyboard key (under Windows) or by right clicking the mouse.
1963 @event{EVT_RADIOBOX(id, func)}
ce7fe42e 1964 Process a @c wxEVT_RADIOBOX command, which is generated by a wxRadioBox control.
551048c2 1965 @event{EVT_RADIOBUTTON(id, func)}
ce7fe42e 1966 Process a @c wxEVT_RADIOBUTTON command, which is generated by a wxRadioButton control.
551048c2 1967 @event{EVT_SCROLLBAR(id, func)}
ce7fe42e 1968 Process a @c wxEVT_SCROLLBAR command, which is generated by a wxScrollBar
551048c2
VZ
1969 control. This is provided for compatibility only; more specific scrollbar event macros
1970 should be used instead (see wxScrollEvent).
1971 @event{EVT_SLIDER(id, func)}
ce7fe42e 1972 Process a @c wxEVT_SLIDER command, which is generated by a wxSlider control.
551048c2 1973 @event{EVT_TEXT(id, func)}
ce7fe42e 1974 Process a @c wxEVT_TEXT command, which is generated by a wxTextCtrl control.
551048c2 1975 @event{EVT_TEXT_ENTER(id, func)}
ce7fe42e 1976 Process a @c wxEVT_TEXT_ENTER command, which is generated by a wxTextCtrl control.
551048c2
VZ
1977 Note that you must use wxTE_PROCESS_ENTER flag when creating the control if you want it
1978 to generate such events.
1979 @event{EVT_TEXT_MAXLEN(id, func)}
ce7fe42e 1980 Process a @c wxEVT_TEXT_MAXLEN command, which is generated by a wxTextCtrl control
551048c2
VZ
1981 when the user tries to enter more characters into it than the limit previously set
1982 with SetMaxLength().
1983 @event{EVT_TOGGLEBUTTON(id, func)}
ce7fe42e 1984 Process a @c wxEVT_TOGGLEBUTTON event.
551048c2 1985 @event{EVT_TOOL(id, func)}
ce7fe42e 1986 Process a @c wxEVT_TOOL event (a synonym for @c wxEVT_MENU).
551048c2
VZ
1987 Pass the id of the tool.
1988 @event{EVT_TOOL_RANGE(id1, id2, func)}
ce7fe42e 1989 Process a @c wxEVT_TOOL event for a range of identifiers. Pass the ids of the tools.
551048c2 1990 @event{EVT_TOOL_RCLICKED(id, func)}
ce7fe42e 1991 Process a @c wxEVT_TOOL_RCLICKED event. Pass the id of the tool. (Not available on wxOSX.)
551048c2 1992 @event{EVT_TOOL_RCLICKED_RANGE(id1, id2, func)}
ce7fe42e 1993 Process a @c wxEVT_TOOL_RCLICKED event for a range of ids. Pass the ids of the tools. (Not available on wxOSX.)
551048c2 1994 @event{EVT_TOOL_ENTER(id, func)}
ce7fe42e 1995 Process a @c wxEVT_TOOL_ENTER event. Pass the id of the toolbar itself.
551048c2
VZ
1996 The value of wxCommandEvent::GetSelection() is the tool id, or -1 if the mouse cursor
1997 has moved off a tool. (Not available on wxOSX.)
1998 @event{EVT_COMMAND_LEFT_CLICK(id, func)}
1999 Process a @c wxEVT_COMMAND_LEFT_CLICK command, which is generated by a control (wxMSW only).
2000 @event{EVT_COMMAND_LEFT_DCLICK(id, func)}
2001 Process a @c wxEVT_COMMAND_LEFT_DCLICK command, which is generated by a control (wxMSW only).
2002 @event{EVT_COMMAND_RIGHT_CLICK(id, func)}
2003 Process a @c wxEVT_COMMAND_RIGHT_CLICK command, which is generated by a control (wxMSW only).
2004 @event{EVT_COMMAND_SET_FOCUS(id, func)}
2005 Process a @c wxEVT_COMMAND_SET_FOCUS command, which is generated by a control (wxMSW only).
2006 @event{EVT_COMMAND_KILL_FOCUS(id, func)}
2007 Process a @c wxEVT_COMMAND_KILL_FOCUS command, which is generated by a control (wxMSW only).
2008 @event{EVT_COMMAND_ENTER(id, func)}
2009 Process a @c wxEVT_COMMAND_ENTER command, which is generated by a control.
2010 @endEventTable
2011
2012 @library{wxcore}
2013 @category{events}
2014*/
2015class wxCommandEvent : public wxEvent
2016{
2017public:
2018 /**
2019 Constructor.
2020 */
2021 wxCommandEvent(wxEventType commandEventType = wxEVT_NULL, int id = 0);
2022
2023 /**
2024 Returns client data pointer for a listbox or choice selection event
2025 (not valid for a deselection).
2026 */
2027 void* GetClientData() const;
2028
2029 /**
2030 Returns client object pointer for a listbox or choice selection event
2031 (not valid for a deselection).
2032 */
2033 wxClientData* GetClientObject() const;
2034
2035 /**
2036 Returns extra information dependent on the event objects type.
2037
2038 If the event comes from a listbox selection, it is a boolean
2039 determining whether the event was a selection (@true) or a
2040 deselection (@false). A listbox deselection only occurs for
2041 multiple-selection boxes, and in this case the index and string values
2042 are indeterminate and the listbox must be examined by the application.
2043 */
2044 long GetExtraLong() const;
2045
2046 /**
2047 Returns the integer identifier corresponding to a listbox, choice or
2048 radiobox selection (only if the event was a selection, not a deselection),
2049 or a boolean value representing the value of a checkbox.
2050
2051 For a menu item, this method returns -1 if the item is not checkable or
2052 a boolean value (true or false) for checkable items indicating the new
2053 state of the item.
2054 */
2055 int GetInt() const;
2056
2057 /**
2058 Returns item index for a listbox or choice selection event (not valid for
2059 a deselection).
2060 */
2061 int GetSelection() const;
2062
2063 /**
2064 Returns item string for a listbox or choice selection event. If one
2065 or several items have been deselected, returns the index of the first
2066 deselected item. If some items have been selected and others deselected
2067 at the same time, it will return the index of the first selected item.
2068 */
2069 wxString GetString() const;
2070
2071 /**
2072 This method can be used with checkbox and menu events: for the checkboxes, the
2073 method returns @true for a selection event and @false for a deselection one.
2074 For the menu events, this method indicates if the menu item just has become
2075 checked or unchecked (and thus only makes sense for checkable menu items).
2076
2077 Notice that this method cannot be used with wxCheckListBox currently.
2078 */
2079 bool IsChecked() const;
2080
2081 /**
2082 For a listbox or similar event, returns @true if it is a selection, @false
2083 if it is a deselection. If some items have been selected and others deselected
2084 at the same time, it will return @true.
2085 */
2086 bool IsSelection() const;
2087
2088 /**
2089 Sets the client data for this event.
2090 */
2091 void SetClientData(void* clientData);
2092
2093 /**
2094 Sets the client object for this event. The client object is not owned by the
2095 event object and the event object will not delete the client object in its destructor.
2096
2097 The client object must be owned and deleted by another object (e.g. a control)
2098 that has longer life time than the event object.
2099 */
2100 void SetClientObject(wxClientData* clientObject);
2101
2102 /**
2103 Sets the @b m_extraLong member.
2104 */
2105 void SetExtraLong(long extraLong);
2106
2107 /**
2108 Sets the @b m_commandInt member.
2109 */
2110 void SetInt(int intCommand);
2111
2112 /**
2113 Sets the @b m_commandString member.
2114 */
2115 void SetString(const wxString& string);
2116};
2117
2118
2119
23324ae1 2120/**
42013f4c 2121 @class wxWindowCreateEvent
7c913512 2122
42013f4c
FM
2123 This event is sent just after the actual window associated with a wxWindow
2124 object has been created.
7c913512 2125
42013f4c
FM
2126 Since it is derived from wxCommandEvent, the event propagates up
2127 the window hierarchy.
7c913512 2128
42013f4c 2129 @beginEventTable{wxWindowCreateEvent}
8c6791e4 2130 @event{EVT_WINDOW_CREATE(func)}
3051a44a 2131 Process a @c wxEVT_CREATE event.
42013f4c 2132 @endEventTable
7c913512 2133
23324ae1
FM
2134 @library{wxcore}
2135 @category{events}
7c913512 2136
3e083d65 2137 @see @ref overview_events, wxWindowDestroyEvent
23324ae1 2138*/
42013f4c 2139class wxWindowCreateEvent : public wxCommandEvent
23324ae1
FM
2140{
2141public:
2142 /**
42013f4c
FM
2143 Constructor.
2144 */
2145 wxWindowCreateEvent(wxWindow* win = NULL);
a79a6671 2146
57ab6f23 2147 /// Return the window being created.
a79a6671 2148 wxWindow *GetWindow() const;
42013f4c 2149};
3c4f71cc 2150
23324ae1 2151
23324ae1 2152
42013f4c
FM
2153/**
2154 @class wxPaintEvent
23324ae1 2155
42013f4c 2156 A paint event is sent when a window's contents needs to be repainted.
23324ae1 2157
7ca106e8
VZ
2158 The handler of this event must create a wxPaintDC object and use it for
2159 painting the window contents. For example:
42013f4c
FM
2160 @code
2161 void MyWindow::OnPaint(wxPaintEvent& event)
2162 {
2163 wxPaintDC dc(this);
23324ae1 2164
42013f4c
FM
2165 DrawMyDocument(dc);
2166 }
2167 @endcode
7ca106e8
VZ
2168
2169 Notice that you must @e not create other kinds of wxDC (e.g. wxClientDC or
2170 wxWindowDC) in EVT_PAINT handlers and also don't create wxPaintDC outside
2171 of this event handlers.
2172
2173
42013f4c
FM
2174 You can optimize painting by retrieving the rectangles that have been damaged
2175 and only repainting these. The rectangles are in terms of the client area,
2176 and are unscrolled, so you will need to do some calculations using the current
2177 view position to obtain logical, scrolled units.
2178 Here is an example of using the wxRegionIterator class:
2179 @code
2180 // Called when window needs to be repainted.
2181 void MyWindow::OnPaint(wxPaintEvent& event)
2182 {
2183 wxPaintDC dc(this);
23324ae1 2184
42013f4c
FM
2185 // Find Out where the window is scrolled to
2186 int vbX,vbY; // Top left corner of client
2187 GetViewStart(&vbX,&vbY);
23324ae1 2188
42013f4c
FM
2189 int vX,vY,vW,vH; // Dimensions of client area in pixels
2190 wxRegionIterator upd(GetUpdateRegion()); // get the update rect list
23324ae1 2191
42013f4c
FM
2192 while (upd)
2193 {
2194 vX = upd.GetX();
2195 vY = upd.GetY();
2196 vW = upd.GetW();
2197 vH = upd.GetH();
23324ae1 2198
42013f4c
FM
2199 // Alternatively we can do this:
2200 // wxRect rect(upd.GetRect());
3c4f71cc 2201
42013f4c
FM
2202 // Repaint this rectangle
2203 ...some code...
3c4f71cc 2204
42013f4c
FM
2205 upd ++ ;
2206 }
2207 }
2208 @endcode
3c4f71cc 2209
7ca106e8
VZ
2210 @remarks
2211 Please notice that in general it is impossible to change the drawing of a
2212 standard control (such as wxButton) and so you shouldn't attempt to handle
2213 paint events for them as even if it might work on some platforms, this is
2214 inherently not portable and won't work everywhere.
2215
3c4f71cc 2216
42013f4c 2217 @beginEventTable{wxPaintEvent}
8c6791e4 2218 @event{EVT_PAINT(func)}
3051a44a 2219 Process a @c wxEVT_PAINT event.
42013f4c 2220 @endEventTable
3c4f71cc 2221
42013f4c
FM
2222 @library{wxcore}
2223 @category{events}
3c4f71cc 2224
3e083d65 2225 @see @ref overview_events
42013f4c
FM
2226*/
2227class wxPaintEvent : public wxEvent
2228{
2229public:
2230 /**
2231 Constructor.
2232 */
2233 wxPaintEvent(int id = 0);
2234};
3c4f71cc 2235
3c4f71cc 2236
3c4f71cc 2237
42013f4c
FM
2238/**
2239 @class wxMaximizeEvent
3c4f71cc 2240
42013f4c
FM
2241 An event being sent when a top level window is maximized. Notice that it is
2242 not sent when the window is restored to its original size after it had been
2243 maximized, only a normal wxSizeEvent is generated in this case.
3c4f71cc 2244
89c6e024 2245 Currently this event is only generated in wxMSW, wxGTK, wxOSX/Cocoa and wxOS2
e22e5ee4
VZ
2246 ports so portable programs should only rely on receiving @c wxEVT_SIZE and
2247 not necessarily this event when the window is maximized.
2248
42013f4c 2249 @beginEventTable{wxMaximizeEvent}
8c6791e4 2250 @event{EVT_MAXIMIZE(func)}
3051a44a 2251 Process a @c wxEVT_MAXIMIZE event.
42013f4c 2252 @endEventTable
3c4f71cc 2253
42013f4c
FM
2254 @library{wxcore}
2255 @category{events}
23324ae1 2256
3e083d65 2257 @see @ref overview_events, wxTopLevelWindow::Maximize,
42013f4c
FM
2258 wxTopLevelWindow::IsMaximized
2259*/
2260class wxMaximizeEvent : public wxEvent
2261{
2262public:
23324ae1 2263 /**
42013f4c 2264 Constructor. Only used by wxWidgets internally.
23324ae1 2265 */
42013f4c
FM
2266 wxMaximizeEvent(int id = 0);
2267};
23324ae1 2268
42013f4c
FM
2269/**
2270 The possibles modes to pass to wxUpdateUIEvent::SetMode().
2271*/
2272enum wxUpdateUIMode
2273{
2274 /** Send UI update events to all windows. */
2275 wxUPDATE_UI_PROCESS_ALL,
23324ae1 2276
42013f4c
FM
2277 /** Send UI update events to windows that have
2278 the wxWS_EX_PROCESS_UI_UPDATES flag specified. */
2279 wxUPDATE_UI_PROCESS_SPECIFIED
2280};
23324ae1 2281
3c4f71cc 2282
42013f4c
FM
2283/**
2284 @class wxUpdateUIEvent
23324ae1 2285
42013f4c
FM
2286 This class is used for pseudo-events which are called by wxWidgets
2287 to give an application the chance to update various user interface elements.
23324ae1 2288
42013f4c
FM
2289 Without update UI events, an application has to work hard to check/uncheck,
2290 enable/disable, show/hide, and set the text for elements such as menu items
2291 and toolbar buttons. The code for doing this has to be mixed up with the code
2292 that is invoked when an action is invoked for a menu item or button.
3c4f71cc 2293
42013f4c
FM
2294 With update UI events, you define an event handler to look at the state of the
2295 application and change UI elements accordingly. wxWidgets will call your member
2296 functions in idle time, so you don't have to worry where to call this code.
23324ae1 2297
42013f4c
FM
2298 In addition to being a clearer and more declarative method, it also means you don't
2299 have to worry whether you're updating a toolbar or menubar identifier. The same
2300 handler can update a menu item and toolbar button, if the identifier is the same.
2301 Instead of directly manipulating the menu or button, you call functions in the event
2302 object, such as wxUpdateUIEvent::Check. wxWidgets will determine whether such a
2303 call has been made, and which UI element to update.
23324ae1 2304
42013f4c
FM
2305 These events will work for popup menus as well as menubars. Just before a menu is
2306 popped up, wxMenu::UpdateUI is called to process any UI events for the window that
2307 owns the menu.
23324ae1 2308
42013f4c
FM
2309 If you find that the overhead of UI update processing is affecting your application,
2310 you can do one or both of the following:
2311 @li Call wxUpdateUIEvent::SetMode with a value of wxUPDATE_UI_PROCESS_SPECIFIED,
2312 and set the extra style wxWS_EX_PROCESS_UI_UPDATES for every window that should
2313 receive update events. No other windows will receive update events.
2314 @li Call wxUpdateUIEvent::SetUpdateInterval with a millisecond value to set the delay
2315 between updates. You may need to call wxWindow::UpdateWindowUI at critical points,
2316 for example when a dialog is about to be shown, in case the user sees a slight
2317 delay before windows are updated.
3c4f71cc 2318
42013f4c
FM
2319 Note that although events are sent in idle time, defining a wxIdleEvent handler
2320 for a window does not affect this because the events are sent from wxWindow::OnInternalIdle
2321 which is always called in idle time.
23324ae1 2322
42013f4c
FM
2323 wxWidgets tries to optimize update events on some platforms.
2324 On Windows and GTK+, events for menubar items are only sent when the menu is about
2325 to be shown, and not in idle time.
23324ae1 2326
23324ae1 2327
42013f4c 2328 @beginEventTable{wxUpdateUIEvent}
8c6791e4 2329 @event{EVT_UPDATE_UI(id, func)}
3051a44a 2330 Process a @c wxEVT_UPDATE_UI event for the command with the given id.
8c6791e4 2331 @event{EVT_UPDATE_UI_RANGE(id1, id2, func)}
3051a44a 2332 Process a @c wxEVT_UPDATE_UI event for any command with id included in the given range.
42013f4c 2333 @endEventTable
23324ae1 2334
42013f4c
FM
2335 @library{wxcore}
2336 @category{events}
23324ae1 2337
3e083d65 2338 @see @ref overview_events
42013f4c
FM
2339*/
2340class wxUpdateUIEvent : public wxCommandEvent
2341{
2342public:
23324ae1 2343 /**
42013f4c 2344 Constructor.
23324ae1 2345 */
42013f4c 2346 wxUpdateUIEvent(wxWindowID commandId = 0);
23324ae1
FM
2347
2348 /**
42013f4c
FM
2349 Returns @true if it is appropriate to update (send UI update events to)
2350 this window.
23324ae1 2351
42013f4c
FM
2352 This function looks at the mode used (see wxUpdateUIEvent::SetMode),
2353 the wxWS_EX_PROCESS_UI_UPDATES flag in @a window, the time update events
2354 were last sent in idle time, and the update interval, to determine whether
2355 events should be sent to this window now. By default this will always
2356 return @true because the update mode is initially wxUPDATE_UI_PROCESS_ALL
2357 and the interval is set to 0; so update events will be sent as often as
2358 possible. You can reduce the frequency that events are sent by changing the
2359 mode and/or setting an update interval.
23324ae1 2360
42013f4c 2361 @see ResetUpdateTime(), SetUpdateInterval(), SetMode()
23324ae1 2362 */
42013f4c 2363 static bool CanUpdate(wxWindow* window);
23324ae1
FM
2364
2365 /**
42013f4c 2366 Check or uncheck the UI element.
23324ae1 2367 */
42013f4c 2368 void Check(bool check);
23324ae1
FM
2369
2370 /**
42013f4c 2371 Enable or disable the UI element.
23324ae1 2372 */
42013f4c 2373 void Enable(bool enable);
23324ae1
FM
2374
2375 /**
42013f4c 2376 Returns @true if the UI element should be checked.
23324ae1 2377 */
42013f4c 2378 bool GetChecked() const;
23324ae1
FM
2379
2380 /**
42013f4c 2381 Returns @true if the UI element should be enabled.
23324ae1 2382 */
42013f4c 2383 bool GetEnabled() const;
23324ae1
FM
2384
2385 /**
42013f4c
FM
2386 Static function returning a value specifying how wxWidgets will send update
2387 events: to all windows, or only to those which specify that they will process
2388 the events.
23324ae1 2389
42013f4c 2390 @see SetMode()
23324ae1 2391 */
42013f4c 2392 static wxUpdateUIMode GetMode();
23324ae1
FM
2393
2394 /**
42013f4c
FM
2395 Returns @true if the application has called Check().
2396 For wxWidgets internal use only.
23324ae1 2397 */
42013f4c 2398 bool GetSetChecked() const;
23324ae1
FM
2399
2400 /**
42013f4c
FM
2401 Returns @true if the application has called Enable().
2402 For wxWidgets internal use only.
23324ae1 2403 */
42013f4c 2404 bool GetSetEnabled() const;
23324ae1
FM
2405
2406 /**
42013f4c
FM
2407 Returns @true if the application has called Show().
2408 For wxWidgets internal use only.
23324ae1 2409 */
42013f4c 2410 bool GetSetShown() const;
23324ae1
FM
2411
2412 /**
42013f4c
FM
2413 Returns @true if the application has called SetText().
2414 For wxWidgets internal use only.
23324ae1 2415 */
42013f4c 2416 bool GetSetText() const;
23324ae1
FM
2417
2418 /**
42013f4c 2419 Returns @true if the UI element should be shown.
23324ae1 2420 */
42013f4c 2421 bool GetShown() const;
23324ae1
FM
2422
2423 /**
42013f4c 2424 Returns the text that should be set for the UI element.
23324ae1 2425 */
42013f4c 2426 wxString GetText() const;
23324ae1
FM
2427
2428 /**
42013f4c
FM
2429 Returns the current interval between updates in milliseconds.
2430 The value -1 disables updates, 0 updates as frequently as possible.
23324ae1 2431
42013f4c 2432 @see SetUpdateInterval().
23324ae1 2433 */
42013f4c 2434 static long GetUpdateInterval();
23324ae1
FM
2435
2436 /**
42013f4c 2437 Used internally to reset the last-updated time to the current time.
23324ae1 2438
42013f4c
FM
2439 It is assumed that update events are normally sent in idle time, so this
2440 is called at the end of idle processing.
23324ae1 2441
42013f4c 2442 @see CanUpdate(), SetUpdateInterval(), SetMode()
23324ae1 2443 */
42013f4c 2444 static void ResetUpdateTime();
23324ae1
FM
2445
2446 /**
42013f4c
FM
2447 Specify how wxWidgets will send update events: to all windows, or only to
2448 those which specify that they will process the events.
23324ae1 2449
42013f4c
FM
2450 @param mode
2451 this parameter may be one of the ::wxUpdateUIMode enumeration values.
2452 The default mode is wxUPDATE_UI_PROCESS_ALL.
23324ae1 2453 */
42013f4c 2454 static void SetMode(wxUpdateUIMode mode);
23324ae1
FM
2455
2456 /**
42013f4c 2457 Sets the text for this UI element.
23324ae1 2458 */
42013f4c 2459 void SetText(const wxString& text);
23324ae1
FM
2460
2461 /**
42013f4c 2462 Sets the interval between updates in milliseconds.
23324ae1 2463
42013f4c
FM
2464 Set to -1 to disable updates, or to 0 to update as frequently as possible.
2465 The default is 0.
23324ae1 2466
42013f4c
FM
2467 Use this to reduce the overhead of UI update events if your application
2468 has a lot of windows. If you set the value to -1 or greater than 0,
2469 you may also need to call wxWindow::UpdateWindowUI at appropriate points
2470 in your application, such as when a dialog is about to be shown.
23324ae1 2471 */
42013f4c 2472 static void SetUpdateInterval(long updateInterval);
23324ae1
FM
2473
2474 /**
42013f4c 2475 Show or hide the UI element.
23324ae1 2476 */
42013f4c
FM
2477 void Show(bool show);
2478};
23324ae1
FM
2479
2480
23324ae1 2481
42013f4c
FM
2482/**
2483 @class wxClipboardTextEvent
23324ae1 2484
42013f4c
FM
2485 This class represents the events generated by a control (typically a
2486 wxTextCtrl but other windows can generate these events as well) when its
2487 content gets copied or cut to, or pasted from the clipboard.
23324ae1 2488
ce7fe42e
VZ
2489 There are three types of corresponding events @c wxEVT_TEXT_COPY,
2490 @c wxEVT_TEXT_CUT and @c wxEVT_TEXT_PASTE.
23324ae1 2491
42013f4c
FM
2492 If any of these events is processed (without being skipped) by an event
2493 handler, the corresponding operation doesn't take place which allows to
2494 prevent the text from being copied from or pasted to a control. It is also
2495 possible to examine the clipboard contents in the PASTE event handler and
2496 transform it in some way before inserting in a control -- for example,
2497 changing its case or removing invalid characters.
23324ae1 2498
42013f4c
FM
2499 Finally notice that a CUT event is always preceded by the COPY event which
2500 makes it possible to only process the latter if it doesn't matter if the
2501 text was copied or cut.
23324ae1 2502
42013f4c 2503 @note
75aaa4c5
VZ
2504 These events are currently only generated by wxTextCtrl in wxGTK and wxOSX
2505 but are also generated by wxComboBox without wxCB_READONLY style in wxMSW.
23324ae1 2506
42013f4c 2507 @beginEventTable{wxClipboardTextEvent}
8c6791e4 2508 @event{EVT_TEXT_COPY(id, func)}
42013f4c 2509 Some or all of the controls content was copied to the clipboard.
8c6791e4 2510 @event{EVT_TEXT_CUT(id, func)}
42013f4c
FM
2511 Some or all of the controls content was cut (i.e. copied and
2512 deleted).
8c6791e4 2513 @event{EVT_TEXT_PASTE(id, func)}
42013f4c
FM
2514 Clipboard content was pasted into the control.
2515 @endEventTable
23324ae1 2516
23324ae1 2517
42013f4c
FM
2518 @library{wxcore}
2519 @category{events}
23324ae1 2520
42013f4c
FM
2521 @see wxClipboard
2522*/
2523class wxClipboardTextEvent : public wxCommandEvent
2524{
2525public:
23324ae1 2526 /**
42013f4c 2527 Constructor.
23324ae1 2528 */
42013f4c 2529 wxClipboardTextEvent(wxEventType commandType = wxEVT_NULL, int id = 0);
23324ae1
FM
2530};
2531
41469c9e
VZ
2532/**
2533 Possible axis values for mouse wheel scroll events.
2534
2535 @since 2.9.4
2536 */
2537enum wxMouseWheelAxis
2538{
2539 wxMOUSE_WHEEL_VERTICAL, ///< Vertical scroll event.
2540 wxMOUSE_WHEEL_HORIZONTAL ///< Horizontal scroll event.
2541};
23324ae1 2542
e54c96f1 2543
23324ae1 2544/**
42013f4c 2545 @class wxMouseEvent
7c913512 2546
42013f4c
FM
2547 This event class contains information about the events generated by the mouse:
2548 they include mouse buttons press and release events and mouse move events.
7c913512 2549
42013f4c
FM
2550 All mouse events involving the buttons use @c wxMOUSE_BTN_LEFT for the
2551 left mouse button, @c wxMOUSE_BTN_MIDDLE for the middle one and
2552 @c wxMOUSE_BTN_RIGHT for the right one. And if the system supports more
2553 buttons, the @c wxMOUSE_BTN_AUX1 and @c wxMOUSE_BTN_AUX2 events
2554 can also be generated. Note that not all mice have even a middle button so a
2555 portable application should avoid relying on the events from it (but the right
2556 button click can be emulated using the left mouse button with the control key
2557 under Mac platforms with a single button mouse).
2558
2559 For the @c wxEVT_ENTER_WINDOW and @c wxEVT_LEAVE_WINDOW events
2560 purposes, the mouse is considered to be inside the window if it is in the
2561 window client area and not inside one of its children. In other words, the
2562 parent window receives @c wxEVT_LEAVE_WINDOW event not only when the
2563 mouse leaves the window entirely but also when it enters one of its children.
2564
92dbce73
VZ
2565 The position associated with a mouse event is expressed in the window
2566 coordinates of the window which generated the event, you can use
2567 wxWindow::ClientToScreen() to convert it to screen coordinates and possibly
2568 call wxWindow::ScreenToClient() next to convert it to window coordinates of
2569 another window.
2570
42013f4c
FM
2571 @note Note that under Windows CE mouse enter and leave events are not natively
2572 supported by the system but are generated by wxWidgets itself. This has several
2573 drawbacks: the LEAVE_WINDOW event might be received some time after the mouse
2574 left the window and the state variables for it may have changed during this time.
2575
2576 @note Note the difference between methods like wxMouseEvent::LeftDown and
ab826fd8
VZ
2577 the inherited wxMouseState::LeftIsDown: the former returns @true when
2578 the event corresponds to the left mouse button click while the latter
2579 returns @true if the left mouse button is currently being pressed.
2580 For example, when the user is dragging the mouse you can use
2581 wxMouseEvent::LeftIsDown to test whether the left mouse button is
2582 (still) depressed. Also, by convention, if wxMouseEvent::LeftDown
2583 returns @true, wxMouseEvent::LeftIsDown will also return @true in
2584 wxWidgets whatever the underlying GUI behaviour is (which is
2585 platform-dependent). The same applies, of course, to other mouse
2586 buttons as well.
42013f4c
FM
2587
2588
2589 @beginEventTable{wxMouseEvent}
8c6791e4 2590 @event{EVT_LEFT_DOWN(func)}
3051a44a 2591 Process a @c wxEVT_LEFT_DOWN event. The handler of this event should normally
42013f4c
FM
2592 call event.Skip() to allow the default processing to take place as otherwise
2593 the window under mouse wouldn't get the focus.
8c6791e4 2594 @event{EVT_LEFT_UP(func)}
3051a44a 2595 Process a @c wxEVT_LEFT_UP event.
8c6791e4 2596 @event{EVT_LEFT_DCLICK(func)}
3051a44a 2597 Process a @c wxEVT_LEFT_DCLICK event.
8c6791e4 2598 @event{EVT_MIDDLE_DOWN(func)}
3051a44a 2599 Process a @c wxEVT_MIDDLE_DOWN event.
8c6791e4 2600 @event{EVT_MIDDLE_UP(func)}
3051a44a 2601 Process a @c wxEVT_MIDDLE_UP event.
8c6791e4 2602 @event{EVT_MIDDLE_DCLICK(func)}
3051a44a 2603 Process a @c wxEVT_MIDDLE_DCLICK event.
8c6791e4 2604 @event{EVT_RIGHT_DOWN(func)}
3051a44a 2605 Process a @c wxEVT_RIGHT_DOWN event.
8c6791e4 2606 @event{EVT_RIGHT_UP(func)}
3051a44a 2607 Process a @c wxEVT_RIGHT_UP event.
8c6791e4 2608 @event{EVT_RIGHT_DCLICK(func)}
3051a44a 2609 Process a @c wxEVT_RIGHT_DCLICK event.
8c6791e4 2610 @event{EVT_MOUSE_AUX1_DOWN(func)}
7f4f5e8c 2611 Process a @c wxEVT_AUX1_DOWN event.
8c6791e4 2612 @event{EVT_MOUSE_AUX1_UP(func)}
7f4f5e8c 2613 Process a @c wxEVT_AUX1_UP event.
8c6791e4 2614 @event{EVT_MOUSE_AUX1_DCLICK(func)}
7f4f5e8c 2615 Process a @c wxEVT_AUX1_DCLICK event.
8c6791e4 2616 @event{EVT_MOUSE_AUX2_DOWN(func)}
7f4f5e8c 2617 Process a @c wxEVT_AUX2_DOWN event.
8c6791e4 2618 @event{EVT_MOUSE_AUX2_UP(func)}
7f4f5e8c 2619 Process a @c wxEVT_AUX2_UP event.
8c6791e4 2620 @event{EVT_MOUSE_AUX2_DCLICK(func)}
7f4f5e8c 2621 Process a @c wxEVT_AUX2_DCLICK event.
8c6791e4 2622 @event{EVT_MOTION(func)}
3051a44a 2623 Process a @c wxEVT_MOTION event.
8c6791e4 2624 @event{EVT_ENTER_WINDOW(func)}
3051a44a 2625 Process a @c wxEVT_ENTER_WINDOW event.
8c6791e4 2626 @event{EVT_LEAVE_WINDOW(func)}
3051a44a 2627 Process a @c wxEVT_LEAVE_WINDOW event.
8c6791e4 2628 @event{EVT_MOUSEWHEEL(func)}
3051a44a 2629 Process a @c wxEVT_MOUSEWHEEL event.
8c6791e4 2630 @event{EVT_MOUSE_EVENTS(func)}
42013f4c
FM
2631 Process all mouse events.
2632 @endEventTable
7c913512 2633
23324ae1
FM
2634 @library{wxcore}
2635 @category{events}
7c913512 2636
0e097789 2637 @see wxKeyEvent
23324ae1 2638*/
0e097789
VZ
2639class wxMouseEvent : public wxEvent,
2640 public wxMouseState
23324ae1
FM
2641{
2642public:
2643 /**
42013f4c 2644 Constructor. Valid event types are:
23324ae1 2645
3a194bda
SL
2646 @li @c wxEVT_ENTER_WINDOW
2647 @li @c wxEVT_LEAVE_WINDOW
2648 @li @c wxEVT_LEFT_DOWN
2649 @li @c wxEVT_LEFT_UP
2650 @li @c wxEVT_LEFT_DCLICK
2651 @li @c wxEVT_MIDDLE_DOWN
2652 @li @c wxEVT_MIDDLE_UP
2653 @li @c wxEVT_MIDDLE_DCLICK
2654 @li @c wxEVT_RIGHT_DOWN
2655 @li @c wxEVT_RIGHT_UP
2656 @li @c wxEVT_RIGHT_DCLICK
31a9fc93
VZ
2657 @li @c wxEVT_AUX1_DOWN
2658 @li @c wxEVT_AUX1_UP
2659 @li @c wxEVT_AUX1_DCLICK
2660 @li @c wxEVT_AUX2_DOWN
2661 @li @c wxEVT_AUX2_UP
2662 @li @c wxEVT_AUX2_DCLICK
3a194bda
SL
2663 @li @c wxEVT_MOTION
2664 @li @c wxEVT_MOUSEWHEEL
42013f4c
FM
2665 */
2666 wxMouseEvent(wxEventType mouseEventType = wxEVT_NULL);
23324ae1 2667
23324ae1 2668 /**
42013f4c 2669 Returns @true if the event was a first extra button double click.
23324ae1 2670 */
42013f4c 2671 bool Aux1DClick() const;
23324ae1
FM
2672
2673 /**
42013f4c 2674 Returns @true if the first extra button mouse button changed to down.
23324ae1 2675 */
42013f4c 2676 bool Aux1Down() const;
7c913512 2677
23324ae1 2678 /**
42013f4c 2679 Returns @true if the first extra button mouse button changed to up.
23324ae1 2680 */
42013f4c 2681 bool Aux1Up() const;
23324ae1
FM
2682
2683 /**
42013f4c 2684 Returns @true if the event was a second extra button double click.
23324ae1 2685 */
42013f4c 2686 bool Aux2DClick() const;
23324ae1
FM
2687
2688 /**
42013f4c 2689 Returns @true if the second extra button mouse button changed to down.
23324ae1 2690 */
42013f4c 2691 bool Aux2Down() const;
23324ae1 2692
23324ae1 2693 /**
42013f4c 2694 Returns @true if the second extra button mouse button changed to up.
23324ae1 2695 */
42013f4c 2696 bool Aux2Up() const;
23324ae1
FM
2697
2698 /**
ab826fd8 2699 Returns @true if the event was generated by the specified button.
42013f4c 2700
ab826fd8 2701 @see wxMouseState::ButtoinIsDown()
23324ae1 2702 */
ab826fd8 2703 bool Button(wxMouseButton but) const;
23324ae1
FM
2704
2705 /**
42013f4c
FM
2706 If the argument is omitted, this returns @true if the event was a mouse
2707 double click event. Otherwise the argument specifies which double click event
2708 was generated (see Button() for the possible values).
23324ae1 2709 */
ab826fd8 2710 bool ButtonDClick(wxMouseButton but = wxMOUSE_BTN_ANY) const;
23324ae1
FM
2711
2712 /**
42013f4c
FM
2713 If the argument is omitted, this returns @true if the event was a mouse
2714 button down event. Otherwise the argument specifies which button-down event
2715 was generated (see Button() for the possible values).
23324ae1 2716 */
ab826fd8 2717 bool ButtonDown(wxMouseButton but = wxMOUSE_BTN_ANY) const;
23324ae1
FM
2718
2719 /**
42013f4c
FM
2720 If the argument is omitted, this returns @true if the event was a mouse
2721 button up event. Otherwise the argument specifies which button-up event
2722 was generated (see Button() for the possible values).
23324ae1 2723 */
ab826fd8 2724 bool ButtonUp(wxMouseButton but = wxMOUSE_BTN_ANY) const;
23324ae1 2725
23324ae1 2726 /**
42013f4c
FM
2727 Returns @true if this was a dragging event (motion while a button is depressed).
2728
2729 @see Moving()
23324ae1 2730 */
42013f4c 2731 bool Dragging() const;
23324ae1
FM
2732
2733 /**
42013f4c
FM
2734 Returns @true if the mouse was entering the window.
2735
2736 @see Leaving()
23324ae1 2737 */
42013f4c 2738 bool Entering() const;
23324ae1
FM
2739
2740 /**
42013f4c
FM
2741 Returns the mouse button which generated this event or @c wxMOUSE_BTN_NONE
2742 if no button is involved (for mouse move, enter or leave event, for example).
2743 Otherwise @c wxMOUSE_BTN_LEFT is returned for the left button down, up and
2744 double click events, @c wxMOUSE_BTN_MIDDLE and @c wxMOUSE_BTN_RIGHT
2745 for the same events for the middle and the right buttons respectively.
23324ae1 2746 */
42013f4c 2747 int GetButton() const;
e54c96f1 2748
42013f4c
FM
2749 /**
2750 Returns the number of mouse clicks for this event: 1 for a simple click, 2
2751 for a double-click, 3 for a triple-click and so on.
7c913512 2752
42013f4c
FM
2753 Currently this function is implemented only in wxMac and returns -1 for the
2754 other platforms (you can still distinguish simple clicks from double-clicks as
2755 they generate different kinds of events however).
7c913512 2756
1e24c2af 2757 @since 2.9.0
42013f4c
FM
2758 */
2759 int GetClickCount() const;
7c913512 2760
23324ae1 2761 /**
42013f4c 2762 Returns the configured number of lines (or whatever) to be scrolled per
5833988c
VZ
2763 wheel action.
2764
2765 Default value under most platforms is three.
2766
2767 @see GetColumnsPerAction()
23324ae1 2768 */
42013f4c 2769 int GetLinesPerAction() const;
23324ae1 2770
5833988c
VZ
2771 /**
2772 Returns the configured number of columns (or whatever) to be scrolled per
2773 wheel action.
2774
2775 Default value under most platforms is three.
2776
2777 @see GetLinesPerAction()
2778
2779 @since 2.9.5
2780 */
2781 int GetColumnsPerAction() const;
2782
23324ae1 2783 /**
0824e369 2784 Returns the logical mouse position in pixels (i.e.\ translated according to the
42013f4c
FM
2785 translation set for the DC, which usually indicates that the window has been
2786 scrolled).
23324ae1 2787 */
42013f4c 2788 wxPoint GetLogicalPosition(const wxDC& dc) const;
23324ae1 2789
42013f4c
FM
2790 /**
2791 Get wheel delta, normally 120.
7c913512 2792
42013f4c
FM
2793 This is the threshold for action to be taken, and one such action
2794 (for example, scrolling one increment) should occur for each delta.
2795 */
2796 int GetWheelDelta() const;
7c913512 2797
42013f4c
FM
2798 /**
2799 Get wheel rotation, positive or negative indicates direction of rotation.
7c913512 2800
42013f4c
FM
2801 Current devices all send an event when rotation is at least +/-WheelDelta, but
2802 finer resolution devices can be created in the future.
7c913512 2803
42013f4c
FM
2804 Because of this you shouldn't assume that one event is equal to 1 line, but you
2805 should be able to either do partial line scrolling or wait until several
2806 events accumulate before scrolling.
23324ae1 2807 */
42013f4c 2808 int GetWheelRotation() const;
23324ae1 2809
ec6278a1 2810 /**
41469c9e
VZ
2811 Gets the axis the wheel operation concerns.
2812
2813 Usually the mouse wheel is used to scroll vertically so @c
2814 wxMOUSE_WHEEL_VERTICAL is returned but some mice (and most trackpads)
2815 also allow to use the wheel to scroll horizontally in which case
2816 @c wxMOUSE_WHEEL_HORIZONTAL is returned.
ec6278a1 2817
41469c9e 2818 Notice that before wxWidgets 2.9.4 this method returned @c int.
ec6278a1 2819 */
41469c9e 2820 wxMouseWheelAxis GetWheelAxis() const;
ec6278a1 2821
23324ae1 2822 /**
42013f4c
FM
2823 Returns @true if the event was a mouse button event (not necessarily a button
2824 down event - that may be tested using ButtonDown()).
23324ae1 2825 */
42013f4c 2826 bool IsButton() const;
23324ae1
FM
2827
2828 /**
42013f4c
FM
2829 Returns @true if the system has been setup to do page scrolling with
2830 the mouse wheel instead of line scrolling.
23324ae1 2831 */
42013f4c 2832 bool IsPageScroll() const;
7c913512 2833
42013f4c
FM
2834 /**
2835 Returns @true if the mouse was leaving the window.
7c913512 2836
42013f4c
FM
2837 @see Entering().
2838 */
2839 bool Leaving() const;
7c913512 2840
23324ae1 2841 /**
42013f4c 2842 Returns @true if the event was a left double click.
23324ae1 2843 */
42013f4c 2844 bool LeftDClick() const;
23324ae1
FM
2845
2846 /**
42013f4c 2847 Returns @true if the left mouse button changed to down.
23324ae1 2848 */
42013f4c 2849 bool LeftDown() const;
7c913512 2850
42013f4c
FM
2851 /**
2852 Returns @true if the left mouse button changed to up.
2853 */
2854 bool LeftUp() const;
7c913512 2855
23324ae1 2856 /**
42013f4c
FM
2857 Returns @true if the Meta key was down at the time of the event.
2858 */
2859 bool MetaDown() const;
3c4f71cc 2860
42013f4c
FM
2861 /**
2862 Returns @true if the event was a middle double click.
23324ae1 2863 */
42013f4c 2864 bool MiddleDClick() const;
23324ae1
FM
2865
2866 /**
42013f4c 2867 Returns @true if the middle mouse button changed to down.
23324ae1 2868 */
42013f4c 2869 bool MiddleDown() const;
23324ae1 2870
42013f4c
FM
2871 /**
2872 Returns @true if the middle mouse button changed to up.
2873 */
2874 bool MiddleUp() const;
e54c96f1 2875
42013f4c
FM
2876 /**
2877 Returns @true if this was a motion event and no mouse buttons were pressed.
2878 If any mouse button is held pressed, then this method returns @false and
2879 Dragging() returns @true.
2880 */
2881 bool Moving() const;
7c913512 2882
42013f4c
FM
2883 /**
2884 Returns @true if the event was a right double click.
2885 */
2886 bool RightDClick() const;
7c913512 2887
42013f4c
FM
2888 /**
2889 Returns @true if the right mouse button changed to down.
2890 */
2891 bool RightDown() const;
7c913512 2892
42013f4c
FM
2893 /**
2894 Returns @true if the right mouse button changed to up.
2895 */
2896 bool RightUp() const;
23324ae1
FM
2897};
2898
2899
e54c96f1 2900
23324ae1 2901/**
42013f4c 2902 @class wxDropFilesEvent
7c913512 2903
42013f4c
FM
2904 This class is used for drop files events, that is, when files have been dropped
2905 onto the window. This functionality is currently only available under Windows.
7c913512 2906
42013f4c
FM
2907 The window must have previously been enabled for dropping by calling
2908 wxWindow::DragAcceptFiles().
2909
2910 Important note: this is a separate implementation to the more general drag and drop
2911 implementation documented in the @ref overview_dnd. It uses the older, Windows
2912 message-based approach of dropping files.
2913
2914 @beginEventTable{wxDropFilesEvent}
8c6791e4 2915 @event{EVT_DROP_FILES(func)}
3051a44a 2916 Process a @c wxEVT_DROP_FILES event.
42013f4c
FM
2917 @endEventTable
2918
2919 @onlyfor{wxmsw}
7c913512 2920
23324ae1
FM
2921 @library{wxcore}
2922 @category{events}
7c913512 2923
3e083d65 2924 @see @ref overview_events
23324ae1 2925*/
42013f4c 2926class wxDropFilesEvent : public wxEvent
23324ae1
FM
2927{
2928public:
2929 /**
42013f4c 2930 Constructor.
23324ae1 2931 */
42013f4c
FM
2932 wxDropFilesEvent(wxEventType id = 0, int noFiles = 0,
2933 wxString* files = NULL);
23324ae1
FM
2934
2935 /**
42013f4c 2936 Returns an array of filenames.
23324ae1 2937 */
42013f4c 2938 wxString* GetFiles() const;
23324ae1
FM
2939
2940 /**
42013f4c 2941 Returns the number of files dropped.
23324ae1 2942 */
42013f4c 2943 int GetNumberOfFiles() const;
23324ae1
FM
2944
2945 /**
42013f4c
FM
2946 Returns the position at which the files were dropped.
2947 Returns an array of filenames.
23324ae1 2948 */
42013f4c 2949 wxPoint GetPosition() const;
23324ae1
FM
2950};
2951
2952
e54c96f1 2953
23324ae1 2954/**
42013f4c 2955 @class wxActivateEvent
7c913512 2956
42013f4c
FM
2957 An activate event is sent when a window or application is being activated
2958 or deactivated.
7c913512 2959
42013f4c 2960 @beginEventTable{wxActivateEvent}
8c6791e4 2961 @event{EVT_ACTIVATE(func)}
3051a44a 2962 Process a @c wxEVT_ACTIVATE event.
8c6791e4 2963 @event{EVT_ACTIVATE_APP(func)}
3051a44a
FM
2964 Process a @c wxEVT_ACTIVATE_APP event.
2965 This event is received by the wxApp-derived instance only.
8c6791e4 2966 @event{EVT_HIBERNATE(func)}
42013f4c
FM
2967 Process a hibernate event, supplying the member function. This event applies
2968 to wxApp only, and only on Windows SmartPhone and PocketPC.
2969 It is generated when the system is low on memory; the application should free
2970 up as much memory as possible, and restore full working state when it receives
3a194bda 2971 a @c wxEVT_ACTIVATE or @c wxEVT_ACTIVATE_APP event.
42013f4c
FM
2972 @endEventTable
2973
42013f4c 2974 @library{wxcore}
23324ae1 2975 @category{events}
7c913512 2976
3e083d65 2977 @see @ref overview_events, wxApp::IsActive
23324ae1 2978*/
42013f4c 2979class wxActivateEvent : public wxEvent
23324ae1
FM
2980{
2981public:
2982 /**
2983 Constructor.
2984 */
42013f4c
FM
2985 wxActivateEvent(wxEventType eventType = wxEVT_NULL, bool active = true,
2986 int id = 0);
23324ae1
FM
2987
2988 /**
42013f4c 2989 Returns @true if the application or window is being activated, @false otherwise.
23324ae1 2990 */
42013f4c 2991 bool GetActive() const;
23324ae1
FM
2992};
2993
2994
e54c96f1 2995
23324ae1 2996/**
42013f4c 2997 @class wxContextMenuEvent
7c913512 2998
42013f4c 2999 This class is used for context menu events, sent to give
3051a44a 3000 the application a chance to show a context (popup) menu for a wxWindow.
42013f4c
FM
3001
3002 Note that if wxContextMenuEvent::GetPosition returns wxDefaultPosition, this
3003 means that the event originated from a keyboard context button event, and you
3004 should compute a suitable position yourself, for example by calling wxGetMousePosition().
3005
2abce4af
VZ
3006 Notice that the exact sequence of mouse events is different across the
3007 platforms. For example, under MSW the context menu event is generated after
3008 @c EVT_RIGHT_UP event and only if it was not handled but under GTK the
3009 context menu event is generated after @c EVT_RIGHT_DOWN event. This is
3010 correct in the sense that it ensures that the context menu is shown
3011 according to the current platform UI conventions and also means that you
3012 must not handle (or call wxEvent::Skip() in your handler if you do have
3013 one) neither right mouse down nor right mouse up event if you plan on
3014 handling @c EVT_CONTEXT_MENU event.
42013f4c
FM
3015
3016 @beginEventTable{wxContextMenuEvent}
8c6791e4 3017 @event{EVT_CONTEXT_MENU(func)}
42013f4c
FM
3018 A right click (or other context menu command depending on platform) has been detected.
3019 @endEventTable
3020
7c913512 3021
23324ae1
FM
3022 @library{wxcore}
3023 @category{events}
7c913512 3024
3e083d65 3025 @see wxCommandEvent, @ref overview_events
23324ae1 3026*/
42013f4c 3027class wxContextMenuEvent : public wxCommandEvent
23324ae1
FM
3028{
3029public:
3030 /**
3031 Constructor.
3032 */
a90e69f7 3033 wxContextMenuEvent(wxEventType type = wxEVT_NULL, int id = 0,
42013f4c
FM
3034 const wxPoint& pos = wxDefaultPosition);
3035
3036 /**
3037 Returns the position in screen coordinates at which the menu should be shown.
3038 Use wxWindow::ScreenToClient to convert to client coordinates.
3039
3040 You can also omit a position from wxWindow::PopupMenu in order to use
3041 the current mouse pointer position.
3042
3043 If the event originated from a keyboard event, the value returned from this
3044 function will be wxDefaultPosition.
3045 */
3046 const wxPoint& GetPosition() const;
3047
3048 /**
3049 Sets the position at which the menu should be shown.
3050 */
3051 void SetPosition(const wxPoint& point);
23324ae1
FM
3052};
3053
3054
e54c96f1 3055
23324ae1 3056/**
42013f4c 3057 @class wxEraseEvent
7c913512 3058
42013f4c 3059 An erase event is sent when a window's background needs to be repainted.
7c913512 3060
42013f4c
FM
3061 On some platforms, such as GTK+, this event is simulated (simply generated just
3062 before the paint event) and may cause flicker. It is therefore recommended that
3063 you set the text background colour explicitly in order to prevent flicker.
3064 The default background colour under GTK+ is grey.
3065
3066 To intercept this event, use the EVT_ERASE_BACKGROUND macro in an event table
3067 definition.
3068
5fafec4d
VZ
3069 You must use the device context returned by GetDC() to draw on, don't create
3070 a wxPaintDC in the event handler.
7c913512 3071
42013f4c 3072 @beginEventTable{wxEraseEvent}
8c6791e4 3073 @event{EVT_ERASE_BACKGROUND(func)}
3051a44a 3074 Process a @c wxEVT_ERASE_BACKGROUND event.
42013f4c 3075 @endEventTable
7c913512 3076
23324ae1
FM
3077 @library{wxcore}
3078 @category{events}
7c913512 3079
3e083d65 3080 @see @ref overview_events
23324ae1 3081*/
42013f4c 3082class wxEraseEvent : public wxEvent
23324ae1
FM
3083{
3084public:
3085 /**
3086 Constructor.
3087 */
42013f4c
FM
3088 wxEraseEvent(int id = 0, wxDC* dc = NULL);
3089
3090 /**
3091 Returns the device context associated with the erase event to draw on.
5fafec4d
VZ
3092
3093 The returned pointer is never @NULL.
42013f4c
FM
3094 */
3095 wxDC* GetDC() const;
23324ae1
FM
3096};
3097
3098
e54c96f1 3099
23324ae1 3100/**
42013f4c 3101 @class wxFocusEvent
7c913512 3102
42013f4c
FM
3103 A focus event is sent when a window's focus changes. The window losing focus
3104 receives a "kill focus" event while the window gaining it gets a "set focus" one.
7c913512 3105
42013f4c
FM
3106 Notice that the set focus event happens both when the user gives focus to the
3107 window (whether using the mouse or keyboard) and when it is done from the
3108 program itself using wxWindow::SetFocus.
3109
9a25f336
VZ
3110 The focus event handlers should almost invariably call wxEvent::Skip() on
3111 their event argument to allow the default handling to take place. Failure
3112 to do this may result in incorrect behaviour of the native controls. Also
3113 note that wxEVT_KILL_FOCUS handler must not call wxWindow::SetFocus() as
3114 this, again, is not supported by all native controls. If you need to do
3115 this, consider using the @ref sec_delayed_action described in wxIdleEvent
3116 documentation.
3117
42013f4c 3118 @beginEventTable{wxFocusEvent}
8c6791e4 3119 @event{EVT_SET_FOCUS(func)}
3051a44a 3120 Process a @c wxEVT_SET_FOCUS event.
8c6791e4 3121 @event{EVT_KILL_FOCUS(func)}
3051a44a 3122 Process a @c wxEVT_KILL_FOCUS event.
42013f4c 3123 @endEventTable
7c913512 3124
23324ae1
FM
3125 @library{wxcore}
3126 @category{events}
7c913512 3127
3e083d65 3128 @see @ref overview_events
23324ae1 3129*/
42013f4c 3130class wxFocusEvent : public wxEvent
23324ae1
FM
3131{
3132public:
23324ae1
FM
3133 /**
3134 Constructor.
3135 */
42013f4c 3136 wxFocusEvent(wxEventType eventType = wxEVT_NULL, int id = 0);
23324ae1
FM
3137
3138 /**
42013f4c
FM
3139 Returns the window associated with this event, that is the window which had the
3140 focus before for the @c wxEVT_SET_FOCUS event and the window which is
3141 going to receive focus for the @c wxEVT_KILL_FOCUS one.
23324ae1 3142
42013f4c 3143 Warning: the window pointer may be @NULL!
23324ae1 3144 */
42013f4c 3145 wxWindow *GetWindow() const;
a90e69f7
RD
3146
3147 void SetWindow(wxWindow *win);
42013f4c 3148};
23324ae1 3149
23324ae1 3150
23324ae1 3151
42013f4c
FM
3152/**
3153 @class wxChildFocusEvent
23324ae1 3154
42013f4c
FM
3155 A child focus event is sent to a (parent-)window when one of its child windows
3156 gains focus, so that the window could restore the focus back to its corresponding
3157 child if it loses it now and regains later.
23324ae1 3158
42013f4c 3159 Notice that child window is the direct child of the window receiving event.
57ab6f23 3160 Use wxWindow::FindFocus() to retrieve the window which is actually getting focus.
42013f4c
FM
3161
3162 @beginEventTable{wxChildFocusEvent}
8c6791e4 3163 @event{EVT_CHILD_FOCUS(func)}
3051a44a 3164 Process a @c wxEVT_CHILD_FOCUS event.
42013f4c
FM
3165 @endEventTable
3166
3167 @library{wxcore}
3168 @category{events}
23324ae1 3169
3e083d65 3170 @see @ref overview_events
42013f4c
FM
3171*/
3172class wxChildFocusEvent : public wxCommandEvent
3173{
3174public:
23324ae1 3175 /**
42013f4c
FM
3176 Constructor.
3177
3178 @param win
3179 The direct child which is (or which contains the window which is) receiving
3180 the focus.
23324ae1 3181 */
42013f4c 3182 wxChildFocusEvent(wxWindow* win = NULL);
23324ae1
FM
3183
3184 /**
42013f4c
FM
3185 Returns the direct child which receives the focus, or a (grand-)parent of the
3186 control receiving the focus.
3187
3188 To get the actually focused control use wxWindow::FindFocus.
23324ae1 3189 */
42013f4c 3190 wxWindow *GetWindow() const;
23324ae1
FM
3191};
3192
3193
e54c96f1 3194
23324ae1 3195/**
42013f4c 3196 @class wxMouseCaptureLostEvent
7c913512 3197
0af4bd16
VZ
3198 A mouse capture lost event is sent to a window that had obtained mouse capture,
3199 which was subsequently lost due to an "external" event (for example, when a dialog
3200 box is shown or if another application captures the mouse).
42013f4c 3201
0af4bd16 3202 If this happens, this event is sent to all windows that are on the capture stack
42013f4c
FM
3203 (i.e. called CaptureMouse, but didn't call ReleaseMouse yet). The event is
3204 not sent if the capture changes because of a call to CaptureMouse or
3205 ReleaseMouse.
3206
3207 This event is currently emitted under Windows only.
3208
3209 @beginEventTable{wxMouseCaptureLostEvent}
8c6791e4 3210 @event{EVT_MOUSE_CAPTURE_LOST(func)}
3051a44a 3211 Process a @c wxEVT_MOUSE_CAPTURE_LOST event.
42013f4c 3212 @endEventTable
7c913512 3213
42013f4c 3214 @onlyfor{wxmsw}
7c913512 3215
23324ae1
FM
3216 @library{wxcore}
3217 @category{events}
7c913512 3218
3e083d65 3219 @see wxMouseCaptureChangedEvent, @ref overview_events,
3051a44a 3220 wxWindow::CaptureMouse, wxWindow::ReleaseMouse, wxWindow::GetCapture
23324ae1 3221*/
42013f4c 3222class wxMouseCaptureLostEvent : public wxEvent
23324ae1
FM
3223{
3224public:
3225 /**
3226 Constructor.
3227 */
42013f4c 3228 wxMouseCaptureLostEvent(wxWindowID windowId = 0);
23324ae1
FM
3229};
3230
3231
e54c96f1 3232
a90e69f7
RD
3233class wxDisplayChangedEvent : public wxEvent
3234{
3235public:
3236 wxDisplayChangedEvent();
3237};
3238
3239
3240class wxPaletteChangedEvent : public wxEvent
3241{
3242public:
3243 wxPaletteChangedEvent(wxWindowID winid = 0);
3244
3245 void SetChangedWindow(wxWindow* win);
3246 wxWindow* GetChangedWindow() const;
3247};
3248
3249
3250class wxQueryNewPaletteEvent : public wxEvent
3251{
3252public:
3253 wxQueryNewPaletteEvent(wxWindowID winid = 0);
3254
3255 void SetPaletteRealized(bool realized);
3256 bool GetPaletteRealized();
3257};
3258
3259
3260
3261
23324ae1 3262/**
42013f4c 3263 @class wxNotifyEvent
7c913512 3264
42013f4c 3265 This class is not used by the event handlers by itself, but is a base class
3e97a905 3266 for other event classes (such as wxBookCtrlEvent).
7c913512 3267
42013f4c
FM
3268 It (or an object of a derived class) is sent when the controls state is being
3269 changed and allows the program to wxNotifyEvent::Veto() this change if it wants
3270 to prevent it from happening.
7c913512 3271
23324ae1
FM
3272 @library{wxcore}
3273 @category{events}
7c913512 3274
3e97a905 3275 @see wxBookCtrlEvent
23324ae1 3276*/
42013f4c 3277class wxNotifyEvent : public wxCommandEvent
23324ae1
FM
3278{
3279public:
3280 /**
42013f4c 3281 Constructor (used internally by wxWidgets only).
23324ae1 3282 */
42013f4c 3283 wxNotifyEvent(wxEventType eventType = wxEVT_NULL, int id = 0);
23324ae1
FM
3284
3285 /**
42013f4c
FM
3286 This is the opposite of Veto(): it explicitly allows the event to be processed.
3287 For most events it is not necessary to call this method as the events are allowed
3288 anyhow but some are forbidden by default (this will be mentioned in the corresponding
3289 event description).
23324ae1 3290 */
42013f4c 3291 void Allow();
23324ae1
FM
3292
3293 /**
42013f4c
FM
3294 Returns @true if the change is allowed (Veto() hasn't been called) or @false
3295 otherwise (if it was).
23324ae1 3296 */
42013f4c 3297 bool IsAllowed() const;
23324ae1
FM
3298
3299 /**
42013f4c 3300 Prevents the change announced by this event from happening.
23324ae1 3301
42013f4c
FM
3302 It is in general a good idea to notify the user about the reasons for vetoing
3303 the change because otherwise the applications behaviour (which just refuses to
3304 do what the user wants) might be quite surprising.
23324ae1 3305 */
42013f4c
FM
3306 void Veto();
3307};
3308
23324ae1 3309
d48b06bd
FM
3310/**
3311 @class wxThreadEvent
23324ae1 3312
5d4a0504
VZ
3313 This class adds some simple functionality to wxEvent to facilitate
3314 inter-thread communication.
23324ae1 3315
5d4a0504
VZ
3316 This event is not natively emitted by any control/class: it is just
3317 a helper class for the user.
3a567740 3318 Its most important feature is the GetEventCategory() implementation which
5d4a0504 3319 allows thread events @b NOT to be processed by wxEventLoopBase::YieldFor calls
3a567740
FM
3320 (unless the @c wxEVT_CATEGORY_THREAD is specified - which is never in wx code).
3321
d48b06bd 3322 @library{wxcore}
3c99e2fd 3323 @category{events,threading}
d48b06bd 3324
dde19c21 3325 @see @ref overview_thread, wxEventLoopBase::YieldFor
c1b293bb
VS
3326
3327 @since 2.9.0
d48b06bd 3328*/
c1b293bb 3329class wxThreadEvent : public wxEvent
42013f4c 3330{
d48b06bd
FM
3331public:
3332 /**
3333 Constructor.
d48b06bd 3334 */
c1b293bb 3335 wxThreadEvent(wxEventType eventType = wxEVT_THREAD, int id = wxID_ANY);
23324ae1 3336
d48b06bd
FM
3337 /**
3338 Clones this event making sure that all internal members which use
3339 COW (only @c m_commandString for now; see @ref overview_refcount)
3340 are unshared (see wxObject::UnShare).
3341 */
3342 virtual wxEvent *Clone() const;
3343
3344 /**
3345 Returns @c wxEVT_CATEGORY_THREAD.
3346
74d60f66 3347 This is important to avoid unwanted processing of thread events
dde19c21 3348 when calling wxEventLoopBase::YieldFor().
d48b06bd
FM
3349 */
3350 virtual wxEventCategory GetEventCategory() const;
dae60aee
VS
3351
3352 /**
3353 Sets custom data payload.
3354
3355 The @a payload argument may be of any type that wxAny can handle
3356 (i.e. pretty much anything). Note that T's copy constructor must be
3357 thread-safe, i.e. create a copy that doesn't share anything with
3358 the original (see Clone()).
3359
3360 @note This method is not available with Visual C++ 6.
3361
3362 @since 2.9.1
3363
3364 @see GetPayload(), wxAny
3365 */
3366 template<typename T>
3367 void SetPayload(const T& payload);
3368
3369 /**
3370 Get custom data payload.
3371
3372 Correct type is checked in debug builds.
3373
3374 @note This method is not available with Visual C++ 6.
3375
3376 @since 2.9.1
3377
3378 @see SetPayload(), wxAny
3379 */
3380 template<typename T>
3381 T GetPayload() const;
c1b293bb
VS
3382
3383 /**
3384 Returns extra information integer value.
3385 */
3386 long GetExtraLong() const;
3387
3388 /**
3389 Returns stored integer value.
3390 */
3391 int GetInt() const;
3392
3393 /**
3394 Returns stored string value.
3395 */
3396 wxString GetString() const;
3397
3398
3399 /**
3400 Sets the extra information value.
3401 */
3402 void SetExtraLong(long extraLong);
3403
3404 /**
3405 Sets the integer value.
3406 */
3407 void SetInt(int intCommand);
3408
3409 /**
3410 Sets the string value.
3411 */
3412 void SetString(const wxString& string);
42013f4c 3413};
e54c96f1 3414
d48b06bd 3415
23324ae1 3416/**
42013f4c 3417 @class wxHelpEvent
7c913512 3418
42013f4c
FM
3419 A help event is sent when the user has requested context-sensitive help.
3420 This can either be caused by the application requesting context-sensitive help mode
3421 via wxContextHelp, or (on MS Windows) by the system generating a WM_HELP message when
3422 the user pressed F1 or clicked on the query button in a dialog caption.
7c913512 3423
42013f4c
FM
3424 A help event is sent to the window that the user clicked on, and is propagated
3425 up the window hierarchy until the event is processed or there are no more event
3426 handlers.
3427
3428 The application should call wxEvent::GetId to check the identity of the
3429 clicked-on window, and then either show some suitable help or call wxEvent::Skip()
3430 if the identifier is unrecognised.
3431
3432 Calling Skip is important because it allows wxWidgets to generate further
3433 events for ancestors of the clicked-on window. Otherwise it would be impossible to
3434 show help for container windows, since processing would stop after the first window
3435 found.
3436
3437 @beginEventTable{wxHelpEvent}
8c6791e4 3438 @event{EVT_HELP(id, func)}
3051a44a 3439 Process a @c wxEVT_HELP event.
8c6791e4 3440 @event{EVT_HELP_RANGE(id1, id2, func)}
3051a44a 3441 Process a @c wxEVT_HELP event for a range of ids.
42013f4c 3442 @endEventTable
7c913512 3443
23324ae1
FM
3444 @library{wxcore}
3445 @category{events}
7c913512 3446
3e083d65 3447 @see wxContextHelp, wxDialog, @ref overview_events
23324ae1 3448*/
42013f4c 3449class wxHelpEvent : public wxCommandEvent
23324ae1
FM
3450{
3451public:
a44f3b5a
FM
3452 /**
3453 Indicates how a wxHelpEvent was generated.
3454 */
3455 enum Origin
3456 {
3457 Origin_Unknown, /**< unrecognized event source. */
3458 Origin_Keyboard, /**< event generated from F1 key press. */
3459
3460 /** event generated by wxContextHelp or from the [?] button on
3461 the title bar (Windows). */
3462 Origin_HelpButton
3463 };
3464
23324ae1
FM
3465 /**
3466 Constructor.
3467 */
42013f4c
FM
3468 wxHelpEvent(wxEventType type = wxEVT_NULL,
3469 wxWindowID winid = 0,
3470 const wxPoint& pt = wxDefaultPosition,
a44f3b5a 3471 wxHelpEvent::Origin origin = Origin_Unknown);
42013f4c
FM
3472
3473 /**
3474 Returns the origin of the help event which is one of the ::wxHelpEventOrigin
3475 values.
3476
3477 The application may handle events generated using the keyboard or mouse
3478 differently, e.g. by using wxGetMousePosition() for the mouse events.
3479
3480 @see SetOrigin()
3481 */
43c48e1e 3482 wxHelpEvent::Origin GetOrigin() const;
23324ae1
FM
3483
3484 /**
42013f4c
FM
3485 Returns the left-click position of the mouse, in screen coordinates.
3486 This allows the application to position the help appropriately.
23324ae1 3487 */
42013f4c 3488 const wxPoint& GetPosition() const;
23324ae1
FM
3489
3490 /**
42013f4c
FM
3491 Set the help event origin, only used internally by wxWidgets normally.
3492
3493 @see GetOrigin()
23324ae1 3494 */
43c48e1e 3495 void SetOrigin(wxHelpEvent::Origin origin);
23324ae1
FM
3496
3497 /**
42013f4c 3498 Sets the left-click position of the mouse, in screen coordinates.
23324ae1 3499 */
42013f4c 3500 void SetPosition(const wxPoint& pt);
23324ae1
FM
3501};
3502
3503
e54c96f1 3504
23324ae1 3505/**
42013f4c 3506 @class wxScrollEvent
7c913512 3507
42013f4c
FM
3508 A scroll event holds information about events sent from stand-alone
3509 scrollbars (see wxScrollBar) and sliders (see wxSlider).
7c913512 3510
42013f4c
FM
3511 Note that scrolled windows send the wxScrollWinEvent which does not derive from
3512 wxCommandEvent, but from wxEvent directly - don't confuse these two kinds of
3513 events and use the event table macros mentioned below only for the scrollbar-like
3514 controls.
7c913512 3515
3a74a290 3516 @section scrollevent_diff The difference between EVT_SCROLL_THUMBRELEASE and EVT_SCROLL_CHANGED
7c913512 3517
42013f4c
FM
3518 The EVT_SCROLL_THUMBRELEASE event is only emitted when actually dragging the thumb
3519 using the mouse and releasing it (This EVT_SCROLL_THUMBRELEASE event is also followed
3520 by an EVT_SCROLL_CHANGED event).
7c913512 3521
42013f4c
FM
3522 The EVT_SCROLL_CHANGED event also occurs when using the keyboard to change the thumb
3523 position, and when clicking next to the thumb (In all these cases the EVT_SCROLL_THUMBRELEASE
3524 event does not happen).
7c913512 3525
42013f4c
FM
3526 In short, the EVT_SCROLL_CHANGED event is triggered when scrolling/ moving has finished
3527 independently of the way it had started. Please see the widgets sample ("Slider" page)
3528 to see the difference between EVT_SCROLL_THUMBRELEASE and EVT_SCROLL_CHANGED in action.
3529
3530 @remarks
3531 Note that unless specifying a scroll control identifier, you will need to test for scrollbar
3532 orientation with wxScrollEvent::GetOrientation, since horizontal and vertical scroll events
3533 are processed using the same event handler.
3534
3535 @beginEventTable{wxScrollEvent}
3536 You can use EVT_COMMAND_SCROLL... macros with window IDs for when intercepting
3537 scroll events from controls, or EVT_SCROLL... macros without window IDs for
3538 intercepting scroll events from the receiving window -- except for this, the
3539 macros behave exactly the same.
8c6791e4 3540 @event{EVT_SCROLL(func)}
42013f4c 3541 Process all scroll events.
8c6791e4 3542 @event{EVT_SCROLL_TOP(func)}
3a194bda 3543 Process @c wxEVT_SCROLL_TOP scroll-to-top events (minimum position).
8c6791e4 3544 @event{EVT_SCROLL_BOTTOM(func)}
3a194bda 3545 Process @c wxEVT_SCROLL_BOTTOM scroll-to-bottom events (maximum position).
8c6791e4 3546 @event{EVT_SCROLL_LINEUP(func)}
3a194bda 3547 Process @c wxEVT_SCROLL_LINEUP line up events.
8c6791e4 3548 @event{EVT_SCROLL_LINEDOWN(func)}
3a194bda 3549 Process @c wxEVT_SCROLL_LINEDOWN line down events.
8c6791e4 3550 @event{EVT_SCROLL_PAGEUP(func)}
3a194bda 3551 Process @c wxEVT_SCROLL_PAGEUP page up events.
8c6791e4 3552 @event{EVT_SCROLL_PAGEDOWN(func)}
3a194bda 3553 Process @c wxEVT_SCROLL_PAGEDOWN page down events.
8c6791e4 3554 @event{EVT_SCROLL_THUMBTRACK(func)}
3a194bda 3555 Process @c wxEVT_SCROLL_THUMBTRACK thumbtrack events (frequent events sent as the
42013f4c 3556 user drags the thumbtrack).
8c6791e4 3557 @event{EVT_SCROLL_THUMBRELEASE(func)}
3a194bda 3558 Process @c wxEVT_SCROLL_THUMBRELEASE thumb release events.
8c6791e4 3559 @event{EVT_SCROLL_CHANGED(func)}
3a194bda 3560 Process @c wxEVT_SCROLL_CHANGED end of scrolling events (MSW only).
8c6791e4 3561 @event{EVT_COMMAND_SCROLL(id, func)}
42013f4c 3562 Process all scroll events.
8c6791e4 3563 @event{EVT_COMMAND_SCROLL_TOP(id, func)}
3a194bda 3564 Process @c wxEVT_SCROLL_TOP scroll-to-top events (minimum position).
8c6791e4 3565 @event{EVT_COMMAND_SCROLL_BOTTOM(id, func)}
3a194bda 3566 Process @c wxEVT_SCROLL_BOTTOM scroll-to-bottom events (maximum position).
8c6791e4 3567 @event{EVT_COMMAND_SCROLL_LINEUP(id, func)}
3a194bda 3568 Process @c wxEVT_SCROLL_LINEUP line up events.
8c6791e4 3569 @event{EVT_COMMAND_SCROLL_LINEDOWN(id, func)}
3a194bda 3570 Process @c wxEVT_SCROLL_LINEDOWN line down events.
8c6791e4 3571 @event{EVT_COMMAND_SCROLL_PAGEUP(id, func)}
3a194bda 3572 Process @c wxEVT_SCROLL_PAGEUP page up events.
8c6791e4 3573 @event{EVT_COMMAND_SCROLL_PAGEDOWN(id, func)}
3a194bda 3574 Process @c wxEVT_SCROLL_PAGEDOWN page down events.
8c6791e4 3575 @event{EVT_COMMAND_SCROLL_THUMBTRACK(id, func)}
3a194bda 3576 Process @c wxEVT_SCROLL_THUMBTRACK thumbtrack events (frequent events sent
42013f4c 3577 as the user drags the thumbtrack).
8c6791e4 3578 @event{EVT_COMMAND_SCROLL_THUMBRELEASE(func)}
3a194bda 3579 Process @c wxEVT_SCROLL_THUMBRELEASE thumb release events.
8c6791e4 3580 @event{EVT_COMMAND_SCROLL_CHANGED(func)}
3a194bda 3581 Process @c wxEVT_SCROLL_CHANGED end of scrolling events (MSW only).
42013f4c 3582 @endEventTable
7c913512 3583
23324ae1 3584 @library{wxcore}
1f1d2182 3585 @category{events}
7c913512 3586
3e083d65 3587 @see wxScrollBar, wxSlider, wxSpinButton, wxScrollWinEvent, @ref overview_events
23324ae1 3588*/
42013f4c 3589class wxScrollEvent : public wxCommandEvent
23324ae1
FM
3590{
3591public:
3592 /**
42013f4c 3593 Constructor.
23324ae1 3594 */
42013f4c
FM
3595 wxScrollEvent(wxEventType commandType = wxEVT_NULL, int id = 0, int pos = 0,
3596 int orientation = 0);
23324ae1
FM
3597
3598 /**
42013f4c
FM
3599 Returns wxHORIZONTAL or wxVERTICAL, depending on the orientation of the
3600 scrollbar.
23324ae1 3601 */
42013f4c 3602 int GetOrientation() const;
23324ae1
FM
3603
3604 /**
42013f4c 3605 Returns the position of the scrollbar.
23324ae1 3606 */
42013f4c 3607 int GetPosition() const;
a90e69f7
RD
3608
3609
3610 void SetOrientation(int orient);
3611 void SetPosition(int pos);
23324ae1
FM
3612};
3613
551048c2
VZ
3614#endif // wxUSE_GUI
3615
3616#if wxUSE_BASE
3617
03e8dc0e
VZ
3618/**
3619 See wxIdleEvent::SetMode() for more info.
3620*/
3621enum wxIdleMode
3622{
3623 /** Send idle events to all windows */
3624 wxIDLE_PROCESS_ALL,
3625
3626 /** Send idle events to windows that have the wxWS_EX_PROCESS_IDLE flag specified */
3627 wxIDLE_PROCESS_SPECIFIED
3628};
3629
3630
3631/**
3632 @class wxIdleEvent
3633
3634 This class is used for idle events, which are generated when the system becomes
3635 idle. Note that, unless you do something specifically, the idle events are not
3636 sent if the system remains idle once it has become it, e.g. only a single idle
3637 event will be generated until something else resulting in more normal events
3638 happens and only then is the next idle event sent again.
3639
3640 If you need to ensure a continuous stream of idle events, you can either use
3641 wxIdleEvent::RequestMore method in your handler or call wxWakeUpIdle() periodically
3642 (for example from a timer event handler), but note that both of these approaches
3643 (and especially the first one) increase the system load and so should be avoided
3644 if possible.
3645
3646 By default, idle events are sent to all windows, including even the hidden
3647 ones because they may be shown if some condition is met from their @c
3648 wxEVT_IDLE (or related @c wxEVT_UPDATE_UI) handler. The children of hidden
3649 windows do not receive idle events however as they can't change their state
3650 in any way noticeable by the user. Finally, the global wxApp object also
3651 receives these events, as usual, so it can be used for any global idle time
3652 processing.
3653
3654 If sending idle events to all windows is causing a significant overhead in
3655 your application, you can call wxIdleEvent::SetMode with the value
3656 wxIDLE_PROCESS_SPECIFIED, and set the wxWS_EX_PROCESS_IDLE extra window
3657 style for every window which should receive idle events, all the other ones
3658 will not receive them in this case.
3659
3660 @beginEventTable{wxIdleEvent}
3661 @event{EVT_IDLE(func)}
3662 Process a @c wxEVT_IDLE event.
3663 @endEventTable
3664
3665 @library{wxbase}
3666 @category{events}
3667
3668 @section sec_delayed_action Delayed Action Mechanism
3669
3670 wxIdleEvent can be used to perform some action "at slightly later time".
3671 This can be necessary in several circumstances when, for whatever reason,
3672 something can't be done in the current event handler. For example, if a
3673 mouse event handler is called with the mouse button pressed, the mouse can
3674 be currently captured and some operations with it -- notably capturing it
3675 again -- might be impossible or lead to undesirable results. If you still
3676 want to capture it, you can do it from @c wxEVT_IDLE handler when it is
3677 called the next time instead of doing it immediately.
3678
3679 This can be achieved in two different ways: when using static event tables,
3680 you will need a flag indicating to the (always connected) idle event
3681 handler whether the desired action should be performed. The originally
3682 called handler would then set it to indicate that it should indeed be done
3683 and the idle handler itself would reset it to prevent it from doing the
3684 same action again.
3685
3686 Using dynamically connected event handlers things are even simpler as the
3687 original event handler can simply wxEvtHandler::Connect() or
3688 wxEvtHandler::Bind() the idle event handler which would only be executed
3689 then and could wxEvtHandler::Disconnect() or wxEvtHandler::Unbind() itself.
3690
3691
3692 @see @ref overview_events, wxUpdateUIEvent, wxWindow::OnInternalIdle
3693*/
3694class wxIdleEvent : public wxEvent
3695{
3696public:
3697 /**
3698 Constructor.
3699 */
3700 wxIdleEvent();
3701
3702 /**
3703 Static function returning a value specifying how wxWidgets will send idle
3704 events: to all windows, or only to those which specify that they
3705 will process the events.
3706
3707 @see SetMode().
3708 */
3709 static wxIdleMode GetMode();
3710
3711 /**
3712 Returns @true if the OnIdle function processing this event requested more
3713 processing time.
3714
3715 @see RequestMore()
3716 */
3717 bool MoreRequested() const;
3718
3719 /**
3720 Tells wxWidgets that more processing is required.
3721
3722 This function can be called by an OnIdle handler for a window or window event
3723 handler to indicate that wxApp::OnIdle should forward the OnIdle event once
3724 more to the application windows.
3725
3726 If no window calls this function during OnIdle, then the application will
3727 remain in a passive event loop (not calling OnIdle) until a new event is
3728 posted to the application by the windowing system.
3729
3730 @see MoreRequested()
3731 */
3732 void RequestMore(bool needMore = true);
3733
3734 /**
3735 Static function for specifying how wxWidgets will send idle events: to
3736 all windows, or only to those which specify that they will process the events.
3737
3738 @param mode
3739 Can be one of the ::wxIdleMode values.
3740 The default is wxIDLE_PROCESS_ALL.
3741 */
3742 static void SetMode(wxIdleMode mode);
3743};
23324ae1 3744
551048c2 3745#endif // wxUSE_BASE
3c4f71cc 3746
551048c2 3747#if wxUSE_GUI
23324ae1 3748
42013f4c
FM
3749/**
3750 @class wxInitDialogEvent
3c4f71cc 3751
42013f4c
FM
3752 A wxInitDialogEvent is sent as a dialog or panel is being initialised.
3753 Handlers for this event can transfer data to the window.
23324ae1 3754
42013f4c 3755 The default handler calls wxWindow::TransferDataToWindow.
3c4f71cc 3756
42013f4c 3757 @beginEventTable{wxInitDialogEvent}
8c6791e4 3758 @event{EVT_INIT_DIALOG(func)}
3051a44a 3759 Process a @c wxEVT_INIT_DIALOG event.
42013f4c
FM
3760 @endEventTable
3761
3762 @library{wxcore}
3763 @category{events}
23324ae1 3764
3e083d65 3765 @see @ref overview_events
42013f4c
FM
3766*/
3767class wxInitDialogEvent : public wxEvent
3768{
3769public:
23324ae1 3770 /**
42013f4c
FM
3771 Constructor.
3772 */
3773 wxInitDialogEvent(int id = 0);
3774};
3c4f71cc 3775
3c4f71cc 3776
3c4f71cc 3777
42013f4c
FM
3778/**
3779 @class wxWindowDestroyEvent
3c4f71cc 3780
a79a6671
VZ
3781 This event is sent as early as possible during the window destruction
3782 process.
3783
3784 For the top level windows, as early as possible means that this is done by
3785 wxFrame or wxDialog destructor, i.e. after the destructor of the derived
3786 class was executed and so any methods specific to the derived class can't
3787 be called any more from this event handler. If you need to do this, you
3788 must call wxWindow::SendDestroyEvent() from your derived class destructor.
23324ae1 3789
a79a6671
VZ
3790 For the child windows, this event is generated just before deleting the
3791 window from wxWindow::Destroy() (which is also called when the parent
3792 window is deleted) or from the window destructor if operator @c delete was
3793 used directly (which is not recommended for this very reason).
3c4f71cc 3794
a79a6671
VZ
3795 It is usually pointless to handle this event in the window itself but it ca
3796 be very useful to receive notifications about the window destruction in the
3797 parent window or in any other object interested in this window.
3c4f71cc 3798
42013f4c
FM
3799 @library{wxcore}
3800 @category{events}
3c4f71cc 3801
3e083d65 3802 @see @ref overview_events, wxWindowCreateEvent
42013f4c
FM
3803*/
3804class wxWindowDestroyEvent : public wxCommandEvent
3805{
3806public:
3807 /**
3808 Constructor.
23324ae1 3809 */
42013f4c 3810 wxWindowDestroyEvent(wxWindow* win = NULL);
a79a6671 3811
57ab6f23 3812 /// Return the window being destroyed.
a79a6671 3813 wxWindow *GetWindow() const;
42013f4c 3814};
23324ae1 3815
3c4f71cc 3816
42013f4c
FM
3817/**
3818 @class wxNavigationKeyEvent
3c4f71cc 3819
42013f4c
FM
3820 This event class contains information about navigation events,
3821 generated by navigation keys such as tab and page down.
23324ae1 3822
42013f4c
FM
3823 This event is mainly used by wxWidgets implementations.
3824 A wxNavigationKeyEvent handler is automatically provided by wxWidgets
90230407
VZ
3825 when you enable keyboard navigation inside a window by inheriting it from
3826 wxNavigationEnabled<>.
3c4f71cc 3827
42013f4c 3828 @beginEventTable{wxNavigationKeyEvent}
8c6791e4 3829 @event{EVT_NAVIGATION_KEY(func)}
42013f4c
FM
3830 Process a navigation key event.
3831 @endEventTable
3c4f71cc 3832
42013f4c
FM
3833 @library{wxcore}
3834 @category{events}
3c4f71cc 3835
42013f4c
FM
3836 @see wxWindow::Navigate, wxWindow::NavigateIn
3837*/
3838class wxNavigationKeyEvent : public wxEvent
3839{
3840public:
3051a44a
FM
3841 /**
3842 Flags which can be used with wxNavigationKeyEvent.
3843 */
3844 enum wxNavigationKeyEventFlags
3845 {
3846 IsBackward = 0x0000,
3847 IsForward = 0x0001,
3848 WinChange = 0x0002,
3849 FromTab = 0x0004
3850 };
3851
42013f4c
FM
3852 wxNavigationKeyEvent();
3853 wxNavigationKeyEvent(const wxNavigationKeyEvent& event);
23324ae1
FM
3854
3855 /**
42013f4c 3856 Returns the child that has the focus, or @NULL.
23324ae1 3857 */
42013f4c 3858 wxWindow* GetCurrentFocus() const;
23324ae1
FM
3859
3860 /**
42013f4c
FM
3861 Returns @true if the navigation was in the forward direction.
3862 */
3863 bool GetDirection() const;
3c4f71cc 3864
42013f4c
FM
3865 /**
3866 Returns @true if the navigation event was from a tab key.
3867 This is required for proper navigation over radio buttons.
3868 */
3869 bool IsFromTab() const;
3c4f71cc 3870
42013f4c
FM
3871 /**
3872 Returns @true if the navigation event represents a window change
3873 (for example, from Ctrl-Page Down in a notebook).
23324ae1 3874 */
42013f4c 3875 bool IsWindowChange() const;
23324ae1
FM
3876
3877 /**
42013f4c
FM
3878 Sets the current focus window member.
3879 */
3880 void SetCurrentFocus(wxWindow* currentFocus);
3c4f71cc 3881
42013f4c
FM
3882 /**
3883 Sets the direction to forward if @a direction is @true, or backward
3884 if @false.
3885 */
3886 void SetDirection(bool direction);
3c4f71cc 3887
42013f4c
FM
3888 /**
3889 Sets the flags for this event.
3890 The @a flags can be a combination of the ::wxNavigationKeyEventFlags values.
23324ae1 3891 */
42013f4c 3892 void SetFlags(long flags);
23324ae1
FM
3893
3894 /**
42013f4c
FM
3895 Marks the navigation event as from a tab key.
3896 */
3897 void SetFromTab(bool fromTab);
3c4f71cc 3898
42013f4c
FM
3899 /**
3900 Marks the event as a window change event.
23324ae1 3901 */
42013f4c 3902 void SetWindowChange(bool windowChange);
23324ae1
FM
3903};
3904
3905
e54c96f1 3906
23324ae1 3907/**
42013f4c 3908 @class wxMouseCaptureChangedEvent
7c913512 3909
42013f4c 3910 An mouse capture changed event is sent to a window that loses its
3051a44a 3911 mouse capture. This is called even if wxWindow::ReleaseMouse
42013f4c
FM
3912 was called by the application code. Handling this event allows
3913 an application to cater for unexpected capture releases which
3914 might otherwise confuse mouse handling code.
7c913512 3915
42013f4c
FM
3916 @onlyfor{wxmsw}
3917
3918 @beginEventTable{wxMouseCaptureChangedEvent}
8c6791e4 3919 @event{EVT_MOUSE_CAPTURE_CHANGED(func)}
3051a44a 3920 Process a @c wxEVT_MOUSE_CAPTURE_CHANGED event.
42013f4c 3921 @endEventTable
7c913512 3922
23324ae1
FM
3923 @library{wxcore}
3924 @category{events}
7c913512 3925
3e083d65 3926 @see wxMouseCaptureLostEvent, @ref overview_events,
3051a44a 3927 wxWindow::CaptureMouse, wxWindow::ReleaseMouse, wxWindow::GetCapture
23324ae1 3928*/
42013f4c 3929class wxMouseCaptureChangedEvent : public wxEvent
23324ae1
FM
3930{
3931public:
3932 /**
3933 Constructor.
3934 */
42013f4c
FM
3935 wxMouseCaptureChangedEvent(wxWindowID windowId = 0,
3936 wxWindow* gainedCapture = NULL);
23324ae1
FM
3937
3938 /**
42013f4c
FM
3939 Returns the window that gained the capture, or @NULL if it was a
3940 non-wxWidgets window.
23324ae1 3941 */
42013f4c 3942 wxWindow* GetCapturedWindow() const;
23324ae1
FM
3943};
3944
3945
e54c96f1 3946
23324ae1 3947/**
42013f4c 3948 @class wxCloseEvent
7c913512 3949
42013f4c
FM
3950 This event class contains information about window and session close events.
3951
3952 The handler function for EVT_CLOSE is called when the user has tried to close a
3953 a frame or dialog box using the window manager (X) or system menu (Windows).
3954 It can also be invoked by the application itself programmatically, for example by
3955 calling the wxWindow::Close function.
3956
3957 You should check whether the application is forcing the deletion of the window
3958 using wxCloseEvent::CanVeto. If this is @false, you @e must destroy the window
3959 using wxWindow::Destroy.
3960
3961 If the return value is @true, it is up to you whether you respond by destroying
3962 the window.
3963
3964 If you don't destroy the window, you should call wxCloseEvent::Veto to
3965 let the calling code know that you did not destroy the window.
3966 This allows the wxWindow::Close function to return @true or @false depending
3967 on whether the close instruction was honoured or not.
3968
195be56d
FM
3969 Example of a wxCloseEvent handler:
3970
3971 @code
3972 void MyFrame::OnClose(wxCloseEvent& event)
3973 {
3974 if ( event.CanVeto() && m_bFileNotSaved )
3975 {
3976 if ( wxMessageBox("The file has not been saved... continue closing?",
3977 "Please confirm",
3978 wxICON_QUESTION | wxYES_NO) != wxYES )
3979 {
3980 event.Veto();
3981 return;
3982 }
3983 }
3984
3985 Destroy(); // you may also do: event.Skip();
3986 // since the default event handler does call Destroy(), too
3987 }
3988 @endcode
3989
9fb99466
VZ
3990 The EVT_END_SESSION event is slightly different as it is sent by the system
3991 when the user session is ending (e.g. because of log out or shutdown) and
3992 so all windows are being forcefully closed. At least under MSW, after the
3993 handler for this event is executed the program is simply killed by the
3994 system. Because of this, the default handler for this event provided by
3995 wxWidgets calls all the usual cleanup code (including wxApp::OnExit()) so
3996 that it could still be executed and exit()s the process itself, without
3997 waiting for being killed. If this behaviour is for some reason undesirable,
3998 make sure that you define a handler for this event in your wxApp-derived
3999 class and do not call @c event.Skip() in it (but be aware that the system
4000 will still kill your application).
4001
42013f4c 4002 @beginEventTable{wxCloseEvent}
8c6791e4 4003 @event{EVT_CLOSE(func)}
869aa92d 4004 Process a @c wxEVT_CLOSE_WINDOW command event, supplying the member function.
42013f4c 4005 This event applies to wxFrame and wxDialog classes.
8c6791e4 4006 @event{EVT_QUERY_END_SESSION(func)}
869aa92d 4007 Process a @c wxEVT_QUERY_END_SESSION session event, supplying the member function.
9fb99466 4008 This event can be handled in wxApp-derived class only.
8c6791e4 4009 @event{EVT_END_SESSION(func)}
869aa92d 4010 Process a @c wxEVT_END_SESSION session event, supplying the member function.
9fb99466 4011 This event can be handled in wxApp-derived class only.
42013f4c 4012 @endEventTable
7c913512 4013
23324ae1
FM
4014 @library{wxcore}
4015 @category{events}
7c913512 4016
42013f4c 4017 @see wxWindow::Close, @ref overview_windowdeletion
23324ae1 4018*/
42013f4c 4019class wxCloseEvent : public wxEvent
23324ae1
FM
4020{
4021public:
4022 /**
4023 Constructor.
4024 */
42013f4c 4025 wxCloseEvent(wxEventType commandEventType = wxEVT_NULL, int id = 0);
23324ae1
FM
4026
4027 /**
42013f4c
FM
4028 Returns @true if you can veto a system shutdown or a window close event.
4029 Vetoing a window close event is not possible if the calling code wishes to
4030 force the application to exit, and so this function must be called to check this.
23324ae1 4031 */
42013f4c
FM
4032 bool CanVeto() const;
4033
4034 /**
4035 Returns @true if the user is just logging off or @false if the system is
4036 shutting down. This method can only be called for end session and query end
4037 session events, it doesn't make sense for close window event.
4038 */
4039 bool GetLoggingOff() const;
4040
4041 /**
4042 Sets the 'can veto' flag.
4043 */
4044 void SetCanVeto(bool canVeto);
4045
42013f4c
FM
4046 /**
4047 Sets the 'logging off' flag.
4048 */
4049 void SetLoggingOff(bool loggingOff);
4050
4051 /**
4052 Call this from your event handler to veto a system shutdown or to signal
4053 to the calling application that a window close did not happen.
4054
4055 You can only veto a shutdown if CanVeto() returns @true.
4056 */
4057 void Veto(bool veto = true);
23324ae1
FM
4058};
4059
4060
e54c96f1 4061
23324ae1 4062/**
42013f4c 4063 @class wxMenuEvent
7c913512 4064
42013f4c
FM
4065 This class is used for a variety of menu-related events. Note that
4066 these do not include menu command events, which are
4067 handled using wxCommandEvent objects.
7c913512 4068
b476cde6 4069 The default handler for @c wxEVT_MENU_HIGHLIGHT displays help
42013f4c 4070 text in the first field of the status bar.
7c913512 4071
42013f4c 4072 @beginEventTable{wxMenuEvent}
8c6791e4 4073 @event{EVT_MENU_OPEN(func)}
42013f4c
FM
4074 A menu is about to be opened. On Windows, this is only sent once for each
4075 navigation of the menubar (up until all menus have closed).
8c6791e4 4076 @event{EVT_MENU_CLOSE(func)}
42013f4c 4077 A menu has been just closed.
8c6791e4 4078 @event{EVT_MENU_HIGHLIGHT(id, func)}
42013f4c
FM
4079 The menu item with the specified id has been highlighted: used to show
4080 help prompts in the status bar by wxFrame
8c6791e4 4081 @event{EVT_MENU_HIGHLIGHT_ALL(func)}
42013f4c
FM
4082 A menu item has been highlighted, i.e. the currently selected menu item has changed.
4083 @endEventTable
7c913512 4084
42013f4c 4085 @library{wxcore}
23324ae1 4086 @category{events}
7c913512 4087
3e083d65 4088 @see wxCommandEvent, @ref overview_events
23324ae1 4089*/
42013f4c 4090class wxMenuEvent : public wxEvent
23324ae1
FM
4091{
4092public:
4093 /**
42013f4c 4094 Constructor.
23324ae1 4095 */
a90e69f7 4096 wxMenuEvent(wxEventType type = wxEVT_NULL, int id = 0, wxMenu* menu = NULL);
23324ae1
FM
4097
4098 /**
7f3f059a
VZ
4099 Returns the menu which is being opened or closed.
4100
4101 This method can only be used with the @c OPEN and @c CLOSE events.
4102
4103 The returned value is never @NULL in the ports implementing this
4104 function, which currently includes all the major ones.
23324ae1 4105 */
42013f4c 4106 wxMenu* GetMenu() const;
23324ae1
FM
4107
4108 /**
42013f4c
FM
4109 Returns the menu identifier associated with the event.
4110 This method should be only used with the @c HIGHLIGHT events.
23324ae1 4111 */
42013f4c 4112 int GetMenuId() const;
23324ae1
FM
4113
4114 /**
42013f4c
FM
4115 Returns @true if the menu which is being opened or closed is a popup menu,
4116 @false if it is a normal one.
23324ae1 4117
42013f4c 4118 This method should only be used with the @c OPEN and @c CLOSE events.
23324ae1 4119 */
42013f4c
FM
4120 bool IsPopup() const;
4121};
23324ae1 4122
d317fdeb
VZ
4123/**
4124 @class wxShowEvent
d317fdeb
VZ
4125
4126 An event being sent when the window is shown or hidden.
a183ec70
VZ
4127 The event is triggered by calls to wxWindow::Show(), and any user
4128 action showing a previously hidden window or vice versa (if allowed by
4129 the current platform and/or window manager).
4130 Notice that the event is not triggered when the application is iconized
4131 (minimized) or restored under wxMSW.
d317fdeb 4132
d317fdeb
VZ
4133 @onlyfor{wxmsw,wxgtk,wxos2}
4134
4135 @beginEventTable{wxShowEvent}
4136 @event{EVT_SHOW(func)}
3051a44a 4137 Process a @c wxEVT_SHOW event.
d317fdeb
VZ
4138 @endEventTable
4139
4140 @library{wxcore}
4141 @category{events}
4142
3e083d65 4143 @see @ref overview_events, wxWindow::Show,
d317fdeb
VZ
4144 wxWindow::IsShown
4145*/
4146
4147class wxShowEvent : public wxEvent
4148{
4149public:
4150 /**
4151 Constructor.
4152 */
4153 wxShowEvent(int winid = 0, bool show = false);
4154
4155 /**
4156 Set whether the windows was shown or hidden.
4157 */
4158 void SetShow(bool show);
4159
4160 /**
4161 Return @true if the window has been shown, @false if it has been
4162 hidden.
4163 */
4164 bool IsShown() const;
4165
4166 /**
4167 @deprecated This function is deprecated in favour of IsShown().
4168 */
4169 bool GetShow() const;
4170};
4171
4172
23324ae1 4173
42013f4c
FM
4174/**
4175 @class wxIconizeEvent
23324ae1 4176
42013f4c 4177 An event being sent when the frame is iconized (minimized) or restored.
23324ae1 4178
42013f4c 4179 Currently only wxMSW and wxGTK generate such events.
23324ae1 4180
42013f4c 4181 @onlyfor{wxmsw,wxgtk}
23324ae1 4182
42013f4c 4183 @beginEventTable{wxIconizeEvent}
8c6791e4 4184 @event{EVT_ICONIZE(func)}
3051a44a 4185 Process a @c wxEVT_ICONIZE event.
42013f4c 4186 @endEventTable
23324ae1 4187
42013f4c
FM
4188 @library{wxcore}
4189 @category{events}
23324ae1 4190
3e083d65 4191 @see @ref overview_events, wxTopLevelWindow::Iconize,
42013f4c
FM
4192 wxTopLevelWindow::IsIconized
4193*/
4194class wxIconizeEvent : public wxEvent
4195{
4196public:
23324ae1 4197 /**
42013f4c 4198 Constructor.
23324ae1 4199 */
42013f4c 4200 wxIconizeEvent(int id = 0, bool iconized = true);
23324ae1
FM
4201
4202 /**
42013f4c
FM
4203 Returns @true if the frame has been iconized, @false if it has been
4204 restored.
23324ae1 4205 */
d317fdeb
VZ
4206 bool IsIconized() const;
4207
4208 /**
4209 @deprecated This function is deprecated in favour of IsIconized().
4210 */
42013f4c
FM
4211 bool Iconized() const;
4212};
23324ae1 4213
23324ae1 4214
42013f4c
FM
4215
4216/**
4217 @class wxMoveEvent
42013f4c 4218
3051a44a 4219 A move event holds information about wxTopLevelWindow move change events.
42013f4c 4220
77211166
VZ
4221 These events are currently only generated by wxMSW port.
4222
42013f4c 4223 @beginEventTable{wxMoveEvent}
8c6791e4 4224 @event{EVT_MOVE(func)}
3051a44a 4225 Process a @c wxEVT_MOVE event, which is generated when a window is moved.
8c6791e4 4226 @event{EVT_MOVE_START(func)}
3051a44a 4227 Process a @c wxEVT_MOVE_START event, which is generated when the user starts
42013f4c 4228 to move or size a window. wxMSW only.
37fff49c
VZ
4229 @event{EVT_MOVING(func)}
4230 Process a @c wxEVT_MOVING event, which is generated while the user is
4231 moving the window. wxMSW only.
8c6791e4 4232 @event{EVT_MOVE_END(func)}
3051a44a 4233 Process a @c wxEVT_MOVE_END event, which is generated when the user stops
42013f4c
FM
4234 moving or sizing a window. wxMSW only.
4235 @endEventTable
4236
4237 @library{wxcore}
4238 @category{events}
4239
3e083d65 4240 @see wxPoint, @ref overview_events
42013f4c
FM
4241*/
4242class wxMoveEvent : public wxEvent
4243{
4244public:
23324ae1 4245 /**
42013f4c 4246 Constructor.
23324ae1 4247 */
42013f4c 4248 wxMoveEvent(const wxPoint& pt, int id = 0);
23324ae1
FM
4249
4250 /**
42013f4c 4251 Returns the position of the window generating the move change event.
23324ae1 4252 */
42013f4c 4253 wxPoint GetPosition() const;
a90e69f7
RD
4254
4255 wxRect GetRect() const;
4256 void SetRect(const wxRect& rect);
4257 void SetPosition(const wxPoint& pos);
23324ae1
FM
4258};
4259
4260
4261/**
4262 @class wxSizeEvent
7c913512 4263
3051a44a 4264 A size event holds information about size change events of wxWindow.
7c913512 4265
23324ae1 4266 The EVT_SIZE handler function will be called when the window has been resized.
7c913512 4267
42013f4c 4268 You may wish to use this for frames to resize their child windows as appropriate.
7c913512 4269
0ddf0ac6 4270 Note that the size passed is of the whole window: call wxWindow::GetClientSize()
42013f4c 4271 for the area which may be used by the application.
7c913512 4272
23324ae1 4273 When a window is resized, usually only a small part of the window is damaged
42013f4c
FM
4274 and you may only need to repaint that area. However, if your drawing depends on the
4275 size of the window, you may need to clear the DC explicitly and repaint the whole window.
4276 In which case, you may need to call wxWindow::Refresh to invalidate the entire window.
4277
b0162e32
SC
4278 @b Important : Sizers ( see @ref overview_sizer ) rely on size events to function
4279 correctly. Therefore, in a sizer-based layout, do not forget to call Skip on all
4280 size events you catch (and don't catch size events at all when you don't need to).
4281
42013f4c 4282 @beginEventTable{wxSizeEvent}
8c6791e4 4283 @event{EVT_SIZE(func)}
3051a44a 4284 Process a @c wxEVT_SIZE event.
42013f4c 4285 @endEventTable
7c913512 4286
23324ae1
FM
4287 @library{wxcore}
4288 @category{events}
7c913512 4289
3e083d65 4290 @see wxSize, @ref overview_events
23324ae1
FM
4291*/
4292class wxSizeEvent : public wxEvent
4293{
4294public:
4295 /**
4296 Constructor.
4297 */
4298 wxSizeEvent(const wxSize& sz, int id = 0);
4299
4300 /**
4301 Returns the entire size of the window generating the size change event.
0ddf0ac6
VZ
4302
4303 This is the new total size of the window, i.e. the same size as would
4304 be returned by wxWindow::GetSize() if it were called now. Use
4305 wxWindow::GetClientSize() if you catch this event in a top level window
4306 such as wxFrame to find the size available for the window contents.
23324ae1 4307 */
328f5751 4308 wxSize GetSize() const;
a90e69f7
RD
4309 void SetSize(wxSize size);
4310
4311 wxRect GetRect() const;
4312 void SetRect(wxRect rect);
23324ae1
FM
4313};
4314
4315
e54c96f1 4316
23324ae1
FM
4317/**
4318 @class wxSetCursorEvent
7c913512 4319
3051a44a
FM
4320 A wxSetCursorEvent is generated from wxWindow when the mouse cursor is about
4321 to be set as a result of mouse motion.
42013f4c
FM
4322
4323 This event gives the application the chance to perform specific mouse cursor
4324 processing based on the current position of the mouse within the window.
4325 Use wxSetCursorEvent::SetCursor to specify the cursor you want to be displayed.
4326
4327 @beginEventTable{wxSetCursorEvent}
8c6791e4 4328 @event{EVT_SET_CURSOR(func)}
3051a44a 4329 Process a @c wxEVT_SET_CURSOR event.
42013f4c 4330 @endEventTable
7c913512 4331
23324ae1 4332 @library{wxcore}
1f1d2182 4333 @category{events}
7c913512 4334
3497ab0e 4335 @see ::wxSetCursor, wxWindow::SetCursor
23324ae1
FM
4336*/
4337class wxSetCursorEvent : public wxEvent
4338{
4339public:
4340 /**
4341 Constructor, used by the library itself internally to initialize the event
4342 object.
4343 */
4344 wxSetCursorEvent(wxCoord x = 0, wxCoord y = 0);
4345
4346 /**
4347 Returns a reference to the cursor specified by this event.
4348 */
a6052817 4349 const wxCursor& GetCursor() const;
23324ae1
FM
4350
4351 /**
4352 Returns the X coordinate of the mouse in client coordinates.
4353 */
328f5751 4354 wxCoord GetX() const;
23324ae1
FM
4355
4356 /**
4357 Returns the Y coordinate of the mouse in client coordinates.
4358 */
328f5751 4359 wxCoord GetY() const;
23324ae1
FM
4360
4361 /**
4362 Returns @true if the cursor specified by this event is a valid cursor.
3c4f71cc 4363
23324ae1 4364 @remarks You cannot specify wxNullCursor with this event, as it is not
4cc4bfaf 4365 considered a valid cursor.
23324ae1 4366 */
328f5751 4367 bool HasCursor() const;
23324ae1
FM
4368
4369 /**
4370 Sets the cursor associated with this event.
4371 */
4372 void SetCursor(const wxCursor& cursor);
4373};
e54c96f1 4374
551048c2 4375#endif // wxUSE_GUI
39fb8056 4376
7fa7088e
BP
4377// ============================================================================
4378// Global functions/macros
4379// ============================================================================
4380
b21126db 4381/** @addtogroup group_funcmacro_events */
7fa7088e
BP
4382//@{
4383
551048c2
VZ
4384#if wxUSE_BASE
4385
03e8dc0e
VZ
4386/**
4387 A value uniquely identifying the type of the event.
4388
4389 The values of this type should only be created using wxNewEventType().
4390
4391 See the macro DEFINE_EVENT_TYPE() for more info.
4392
831e1028 4393 @see @ref overview_events
03e8dc0e
VZ
4394*/
4395typedef int wxEventType;
4396
4397/**
4398 A special event type usually used to indicate that some wxEvent has yet
4399 no type assigned.
4400*/
4401wxEventType wxEVT_NULL;
4402
4403wxEventType wxEVT_ANY;
4404
4405/**
4406 Generates a new unique event type.
4407
4408 Usually this function is only used by wxDEFINE_EVENT() and not called
4409 directly.
4410*/
4411wxEventType wxNewEventType();
4412
4413/**
4414 Define a new event type associated with the specified event class.
4415
4416 This macro defines a new unique event type @a name associated with the
4417 event class @a cls.
4418
4419 For example:
4420 @code
4421 wxDEFINE_EVENT(MY_COMMAND_EVENT, wxCommandEvent);
4422
4423 class MyCustomEvent : public wxEvent { ... };
4424 wxDEFINE_EVENT(MY_CUSTOM_EVENT, MyCustomEvent);
4425 @endcode
4426
4427 @see wxDECLARE_EVENT(), @ref overview_events_custom
4428 */
4429#define wxDEFINE_EVENT(name, cls) \
4430 const wxEventTypeTag< cls > name(wxNewEventType())
4431
4432/**
4433 Declares a custom event type.
4434
4435 This macro declares a variable called @a name which must be defined
4436 elsewhere using wxDEFINE_EVENT().
4437
4438 The class @a cls must be the wxEvent-derived class associated with the
4439 events of this type and its full declaration must be visible from the point
4440 of use of this macro.
4441
4442 For example:
4443 @code
4444 wxDECLARE_EVENT(MY_COMMAND_EVENT, wxCommandEvent);
4445
4446 class MyCustomEvent : public wxEvent { ... };
4447 wxDECLARE_EVENT(MY_CUSTOM_EVENT, MyCustomEvent);
4448 @endcode
4449 */
4450#define wxDECLARE_EVENT(name, cls) \
4451 wxDECLARE_EXPORTED_EVENT(wxEMPTY_PARAMETER_VALUE, name, cls)
4452
4453/**
4454 Variant of wxDECLARE_EVENT() used for event types defined inside a shared
4455 library.
4456
4457 This is mostly used by wxWidgets internally, e.g.
4458 @code
ce7fe42e 4459 wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_BUTTON, wxCommandEvent)
03e8dc0e
VZ
4460 @endcode
4461 */
4462#define wxDECLARE_EXPORTED_EVENT( expdecl, name, cls ) \
4463 extern const expdecl wxEventTypeTag< cls > name;
4464
4465/**
4466 Helper macro for definition of custom event table macros.
4467
4468 This macro must only be used if wxEVENTS_COMPATIBILITY_2_8 is 1, otherwise
4469 it is better and more clear to just use the address of the function
4470 directly as this is all this macro does in this case. However it needs to
4471 explicitly cast @a func to @a functype, which is the type of wxEvtHandler
4472 member function taking the custom event argument when
4473 wxEVENTS_COMPATIBILITY_2_8 is 0.
4474
4475 See wx__DECLARE_EVT0 for an example of use.
4476
4477 @see @ref overview_events_custom_ownclass
4478 */
4479#define wxEVENT_HANDLER_CAST(functype, func) (&func)
4480
4481/**
4482 This macro is used to define event table macros for handling custom
4483 events.
4484
4485 Example of use:
4486 @code
4487 class MyEvent : public wxEvent { ... };
4488
4489 // note that this is not necessary unless using old compilers: for the
4490 // reasonably new ones just use &func instead of MyEventHandler(func)
4491 typedef void (wxEvtHandler::*MyEventFunction)(MyEvent&);
4492 #define MyEventHandler(func) wxEVENT_HANDLER_CAST(MyEventFunction, func)
4493
4494 wxDEFINE_EVENT(MY_EVENT_TYPE, MyEvent);
4495
4496 #define EVT_MY(id, func) \
4497 wx__DECLARE_EVT1(MY_EVENT_TYPE, id, MyEventHandler(func))
4498
4499 ...
4500
4501 wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
4502 EVT_MY(wxID_ANY, MyFrame::OnMyEvent)
4503 wxEND_EVENT_TABLE()
4504 @endcode
4505
4506 @param evt
4507 The event type to handle.
4508 @param id
4509 The identifier of events to handle.
4510 @param fn
4511 The event handler method.
4512 */
4513#define wx__DECLARE_EVT1(evt, id, fn) \
4514 wx__DECLARE_EVT2(evt, id, wxID_ANY, fn)
4515
4516/**
4517 Generalized version of the wx__DECLARE_EVT1() macro taking a range of
4518 IDs instead of a single one.
4519 Argument @a id1 is the first identifier of the range, @a id2 is the
4520 second identifier of the range.
4521*/
4522#define wx__DECLARE_EVT2(evt, id1, id2, fn) \
4523 DECLARE_EVENT_TABLE_ENTRY(evt, id1, id2, fn, NULL),
4524
4525/**
4526 Simplified version of the wx__DECLARE_EVT1() macro, to be used when the
4527 event type must be handled regardless of the ID associated with the
4528 specific event instances.
4529*/
4530#define wx__DECLARE_EVT0(evt, fn) \
4531 wx__DECLARE_EVT1(evt, wxID_ANY, fn)
4532
4533/**
4534 Use this macro inside a class declaration to declare a @e static event table
4535 for that class.
4536
4537 In the implementation file you'll need to use the wxBEGIN_EVENT_TABLE()
4538 and the wxEND_EVENT_TABLE() macros, plus some additional @c EVT_xxx macro
4539 to capture events.
4540
4541 Note that this macro requires a final semicolon.
4542
4543 @see @ref overview_events_eventtables
4544*/
4545#define wxDECLARE_EVENT_TABLE()
4546
4547/**
4548 Use this macro in a source file to start listing @e static event handlers
4549 for a specific class.
4550
4551 Use wxEND_EVENT_TABLE() to terminate the event-declaration block.
4552
4553 @see @ref overview_events_eventtables
4554*/
4555#define wxBEGIN_EVENT_TABLE(theClass, baseClass)
4556
4557/**
4558 Use this macro in a source file to end listing @e static event handlers
4559 for a specific class.
4560
4561 Use wxBEGIN_EVENT_TABLE() to start the event-declaration block.
4562
4563 @see @ref overview_events_eventtables
4564*/
4565#define wxEND_EVENT_TABLE()
4566
4567/**
4568 In a GUI application, this function posts @a event to the specified @e dest
4569 object using wxEvtHandler::AddPendingEvent().
4570
4571 Otherwise, it dispatches @a event immediately using
4572 wxEvtHandler::ProcessEvent(). See the respective documentation for details
4573 (and caveats). Because of limitation of wxEvtHandler::AddPendingEvent()
4574 this function is not thread-safe for event objects having wxString fields,
4575 use wxQueueEvent() instead.
4576
4577 @header{wx/event.h}
4578*/
4579void wxPostEvent(wxEvtHandler* dest, const wxEvent& event);
4580
4581/**
4582 Queue an event for processing on the given object.
4583
4584 This is a wrapper around wxEvtHandler::QueueEvent(), see its documentation
4585 for more details.
4586
4587 @header{wx/event.h}
4588
4589 @param dest
4590 The object to queue the event on, can't be @c NULL.
4591 @param event
4592 The heap-allocated and non-@c NULL event to queue, the function takes
4593 ownership of it.
4594 */
4595void wxQueueEvent(wxEvtHandler* dest, wxEvent *event);
4596
551048c2 4597#endif // wxUSE_BASE
03e8dc0e 4598
551048c2 4599#if wxUSE_GUI
a90e69f7 4600
ce7fe42e
VZ
4601wxEventType wxEVT_BUTTON;
4602wxEventType wxEVT_CHECKBOX;
4603wxEventType wxEVT_CHOICE;
4604wxEventType wxEVT_LISTBOX;
4605wxEventType wxEVT_LISTBOX_DCLICK;
4606wxEventType wxEVT_CHECKLISTBOX;
4607wxEventType wxEVT_MENU;
4608wxEventType wxEVT_SLIDER;
4609wxEventType wxEVT_RADIOBOX;
4610wxEventType wxEVT_RADIOBUTTON;
4611wxEventType wxEVT_SCROLLBAR;
4612wxEventType wxEVT_VLBOX;
4613wxEventType wxEVT_COMBOBOX;
4614wxEventType wxEVT_TOOL_RCLICKED;
4615wxEventType wxEVT_TOOL_DROPDOWN;
4616wxEventType wxEVT_TOOL_ENTER;
4617wxEventType wxEVT_COMBOBOX_DROPDOWN;
4618wxEventType wxEVT_COMBOBOX_CLOSEUP;
c1b293bb 4619wxEventType wxEVT_THREAD;
a90e69f7
RD
4620wxEventType wxEVT_LEFT_DOWN;
4621wxEventType wxEVT_LEFT_UP;
4622wxEventType wxEVT_MIDDLE_DOWN;
4623wxEventType wxEVT_MIDDLE_UP;
4624wxEventType wxEVT_RIGHT_DOWN;
4625wxEventType wxEVT_RIGHT_UP;
4626wxEventType wxEVT_MOTION;
4627wxEventType wxEVT_ENTER_WINDOW;
4628wxEventType wxEVT_LEAVE_WINDOW;
4629wxEventType wxEVT_LEFT_DCLICK;
4630wxEventType wxEVT_MIDDLE_DCLICK;
4631wxEventType wxEVT_RIGHT_DCLICK;
4632wxEventType wxEVT_SET_FOCUS;
4633wxEventType wxEVT_KILL_FOCUS;
4634wxEventType wxEVT_CHILD_FOCUS;
4635wxEventType wxEVT_MOUSEWHEEL;
4636wxEventType wxEVT_AUX1_DOWN;
4637wxEventType wxEVT_AUX1_UP;
4638wxEventType wxEVT_AUX1_DCLICK;
4639wxEventType wxEVT_AUX2_DOWN;
4640wxEventType wxEVT_AUX2_UP;
4641wxEventType wxEVT_AUX2_DCLICK;
4642wxEventType wxEVT_CHAR;
4643wxEventType wxEVT_CHAR_HOOK;
4644wxEventType wxEVT_NAVIGATION_KEY;
4645wxEventType wxEVT_KEY_DOWN;
4646wxEventType wxEVT_KEY_UP;
4647wxEventType wxEVT_HOTKEY;
4648wxEventType wxEVT_SET_CURSOR;
4649wxEventType wxEVT_SCROLL_TOP;
4650wxEventType wxEVT_SCROLL_BOTTOM;
4651wxEventType wxEVT_SCROLL_LINEUP;
4652wxEventType wxEVT_SCROLL_LINEDOWN;
4653wxEventType wxEVT_SCROLL_PAGEUP;
4654wxEventType wxEVT_SCROLL_PAGEDOWN;
4655wxEventType wxEVT_SCROLL_THUMBTRACK;
4656wxEventType wxEVT_SCROLL_THUMBRELEASE;
4657wxEventType wxEVT_SCROLL_CHANGED;
4658wxEventType wxEVT_SPIN_UP;
4659wxEventType wxEVT_SPIN_DOWN;
4660wxEventType wxEVT_SPIN;
4661wxEventType wxEVT_SCROLLWIN_TOP;
4662wxEventType wxEVT_SCROLLWIN_BOTTOM;
4663wxEventType wxEVT_SCROLLWIN_LINEUP;
4664wxEventType wxEVT_SCROLLWIN_LINEDOWN;
4665wxEventType wxEVT_SCROLLWIN_PAGEUP;
4666wxEventType wxEVT_SCROLLWIN_PAGEDOWN;
4667wxEventType wxEVT_SCROLLWIN_THUMBTRACK;
4668wxEventType wxEVT_SCROLLWIN_THUMBRELEASE;
4669wxEventType wxEVT_SIZE;
4670wxEventType wxEVT_MOVE;
4671wxEventType wxEVT_CLOSE_WINDOW;
4672wxEventType wxEVT_END_SESSION;
4673wxEventType wxEVT_QUERY_END_SESSION;
4674wxEventType wxEVT_ACTIVATE_APP;
4675wxEventType wxEVT_ACTIVATE;
4676wxEventType wxEVT_CREATE;
4677wxEventType wxEVT_DESTROY;
4678wxEventType wxEVT_SHOW;
4679wxEventType wxEVT_ICONIZE;
4680wxEventType wxEVT_MAXIMIZE;
4681wxEventType wxEVT_MOUSE_CAPTURE_CHANGED;
4682wxEventType wxEVT_MOUSE_CAPTURE_LOST;
4683wxEventType wxEVT_PAINT;
4684wxEventType wxEVT_ERASE_BACKGROUND;
4685wxEventType wxEVT_NC_PAINT;
4686wxEventType wxEVT_MENU_OPEN;
4687wxEventType wxEVT_MENU_CLOSE;
4688wxEventType wxEVT_MENU_HIGHLIGHT;
4689wxEventType wxEVT_CONTEXT_MENU;
4690wxEventType wxEVT_SYS_COLOUR_CHANGED;
4691wxEventType wxEVT_DISPLAY_CHANGED;
4692wxEventType wxEVT_QUERY_NEW_PALETTE;
4693wxEventType wxEVT_PALETTE_CHANGED;
4694wxEventType wxEVT_JOY_BUTTON_DOWN;
4695wxEventType wxEVT_JOY_BUTTON_UP;
4696wxEventType wxEVT_JOY_MOVE;
4697wxEventType wxEVT_JOY_ZMOVE;
4698wxEventType wxEVT_DROP_FILES;
4699wxEventType wxEVT_INIT_DIALOG;
4700wxEventType wxEVT_IDLE;
4701wxEventType wxEVT_UPDATE_UI;
4702wxEventType wxEVT_SIZING;
4703wxEventType wxEVT_MOVING;
4704wxEventType wxEVT_MOVE_START;
4705wxEventType wxEVT_MOVE_END;
4706wxEventType wxEVT_HIBERNATE;
ce7fe42e
VZ
4707wxEventType wxEVT_TEXT_COPY;
4708wxEventType wxEVT_TEXT_CUT;
4709wxEventType wxEVT_TEXT_PASTE;
a90e69f7
RD
4710wxEventType wxEVT_COMMAND_LEFT_CLICK;
4711wxEventType wxEVT_COMMAND_LEFT_DCLICK;
4712wxEventType wxEVT_COMMAND_RIGHT_CLICK;
4713wxEventType wxEVT_COMMAND_RIGHT_DCLICK;
4714wxEventType wxEVT_COMMAND_SET_FOCUS;
4715wxEventType wxEVT_COMMAND_KILL_FOCUS;
4716wxEventType wxEVT_COMMAND_ENTER;
4717wxEventType wxEVT_HELP;
4718wxEventType wxEVT_DETAILED_HELP;
ce7fe42e 4719wxEventType wxEVT_TOOL;
ea8fa3c4 4720wxEventType wxEVT_WINDOW_MODAL_DIALOG_CLOSED;
a90e69f7 4721
551048c2 4722#endif // wxUSE_GUI
a90e69f7 4723
7fa7088e
BP
4724//@}
4725