bool DestroyChildren();
// is the window being deleted?
- bool IsBeingDeleted() const { return m_isBeingDeleted; }
+ bool IsBeingDeleted() const;
// window attributes
// -----------------
// replace the event handler (allows to completely subclass the
// window)
- void SetEventHandler( wxEvtHandler *handler ) { m_eventHandler = handler; }
+ void SetEventHandler( wxEvtHandler *handler );
// push/pop event handler: allows to chain a custom event handler to
// alreasy existing ones
// be there)
bool RemoveEventHandler(wxEvtHandler *handler);
- // Process an event by calling GetEventHandler()->ProcessEvent() and
- // handling any exceptions thrown by event handlers. It's mostly useful
- // when processing wx events when called from C code (e.g. in GTK+
- // callback) when the exception wouldn't correctly propagate to
- // wxEventLoop.
+ // Process an event by calling GetEventHandler()->ProcessEvent() and
+ // handling any exceptions thrown by event handlers. It's mostly useful
+ // when processing wx events when called from C code (e.g. in GTK+
+ // callback) when the exception wouldn't correctly propagate to
+ // wxEventLoop.
bool HandleWindowEvent(wxEvent& event) const;
+ // disable wxEvtHandler double-linked list mechanism:
+ virtual void SetNextHandler(wxEvtHandler *handler);
+ virtual void SetPreviousHandler(wxEvtHandler *handler);
+
+protected:
+
+ // NOTE: we change the access specifier of the following wxEvtHandler functions
+ // so that the user won't be able to call them directly.
+ // Calling wxWindow::ProcessEvent in fact only works when there are NO
+ // event handlers pushed on the window.
+ // To ensure correct operation, instead of wxWindow::ProcessEvent
+ // you must always call wxWindow::GetEventHandler()->ProcessEvent()
+ // or HandleWindowEvent().
+ // The same holds for all other wxEvtHandler functions.
+
+ using wxEvtHandler::ProcessEvent;
+ using wxEvtHandler::ProcessThreadEvent;
+ using wxEvtHandler::SafelyProcessEvent;
+ using wxEvtHandler::ProcessPendingEvents;
+ using wxEvtHandler::AddPendingEvent;
+ using wxEvtHandler::QueueEvent;
+
+public:
+
// validators
// ----------
// font
virtual void GetTextExtent(const wxString& string,
int *x, int *y,
- int *descent = (int *) NULL,
- int *externalLeading = (int *) NULL,
+ int *descent = NULL,
+ int *externalLeading = NULL,
const wxFont *theFont = (const wxFont *) NULL)
const = 0;
// scroll window to the specified position
virtual void ScrollWindow( int dx, int dy,
- const wxRect* rect = (wxRect *) NULL ) = 0;
+ const wxRect* rect = NULL ) = 0;
// scrolls window by line/page: note that not all controls support this
//
#if wxUSE_TOOLTIPS
// the easiest way to set a tooltip for a window is to use this method
void SetToolTip( const wxString &tip );
- // attach a tooltip to the window
+ // attach a tooltip to the window, pointer can be NULL to remove
+ // existing tooltip
void SetToolTip( wxToolTip *tip ) { DoSetToolTip(tip); }
+ // more readable synonym for SetToolTip(NULL)
+ void UnsetToolTip() { SetToolTip(NULL); }
// get the associated tooltip or NULL if none
wxToolTip* GetToolTip() const { return m_tooltip; }
- wxString GetToolTipText() const ;
-#else
+ wxString GetToolTipText() const;
+#else // !wxUSE_TOOLTIPS
// make it much easier to compile apps in an environment
// that doesn't support tooltips, such as PocketPC
- inline void SetToolTip( const wxString & WXUNUSED(tip) ) {}
-#endif // wxUSE_TOOLTIPS
+ void SetToolTip(const wxString & WXUNUSED(tip)) { }
+ void UnsetToolTip() { }
+#endif // wxUSE_TOOLTIPS/!wxUSE_TOOLTIPS
// drag and drop
// -------------
// NULL; it's owned by the window and will be deleted by it)
virtual void SetDropTarget( wxDropTarget *dropTarget ) = 0;
virtual wxDropTarget *GetDropTarget() const { return m_dropTarget; }
+
+ // Accept files for dragging
+ virtual void DragAcceptFiles(bool accept)
+#ifdef __WXMSW__
+ // it does have common implementation but not for MSW which has its own
+ // native version of it
+ = 0
+#endif // __WXMSW__
+ ;
+
#endif // wxUSE_DRAG_AND_DROP
// constraints and sizers
void SatisfyConstraints();
#endif // wxUSE_CONSTRAINTS
- // Send the wxWindowDestroyEvent
+ // Send the wxWindowDestroyEvent if not done yet and sets m_isBeingDeleted
+ // to true
void SendDestroyEvent();
// returns the main window of composite control; this is the window
void NotifyWindowOnEnableChange(bool enabled);
#if wxUSE_MENUS
- // temporary event handler used by GetPopupMenuSelectionFromUser()
+ // temporary event handlers used by GetPopupMenuSelectionFromUser()
void InternalOnPopupMenu(wxCommandEvent& event);
+ void InternalOnPopupMenuUpdate(wxUpdateUIEvent& event);
// implementation of the public GetPopupMenuSelectionFromUser() method
int DoGetPopupMenuSelectionFromUser(wxMenu& menu, int x, int y);
inline wxWindow *wxWindowBase::GetGrandParent() const
{
- return m_parent ? m_parent->GetParent() : (wxWindow *)NULL;
+ return m_parent ? m_parent->GetParent() : NULL;
}
// ----------------------------------------------------------------------------