bool DestroyChildren();
// is the window being deleted?
- bool IsBeingDeleted() const { return m_isBeingDeleted; }
+ bool IsBeingDeleted() const;
// window attributes
// -----------------
// get the size best suited for the window (in fact, minimal
// acceptable size using which it will still look "nice" in
// most situations)
- wxSize GetBestSize() const
- {
- if (m_bestSizeCache.IsFullySpecified())
- return m_bestSizeCache;
- return DoGetBestSize();
- }
+ wxSize GetBestSize() const;
+
void GetBestSize(int *w, int *h) const
{
wxSize s = GetBestSize();
// This function will merge the window's best size into the window's
// minimum size, giving priority to the min size components, and
// returns the results.
- wxSize GetEffectiveMinSize() const;
+ virtual wxSize GetEffectiveMinSize() const;
wxDEPRECATED( wxSize GetBestFittingSize() const ); // replaced by GetEffectiveMinSize
wxDEPRECATED( wxSize GetAdjustedMinSize() const ); // replaced by GetEffectiveMinSize
// Call these to override what GetBestSize() returns. This
// method is only virtual because it is overriden in wxTLW
// as a different API for SetSizeHints().
- virtual void SetMinSize(const wxSize& minSize) { m_minWidth = minSize.x; m_minHeight = minSize.y; }
- virtual void SetMaxSize(const wxSize& maxSize) { m_maxWidth = maxSize.x; m_maxHeight = maxSize.y; }
+ virtual void SetMinSize(const wxSize& minSize);
+ virtual void SetMaxSize(const wxSize& maxSize);
// Like Set*Size, but for client, not window, size
virtual void SetMinClientSize(const wxSize& size)
// 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(): this
+ // is a straightforward replacement for ProcessEvent() itself which
+ // shouldn't be used directly with windows as it doesn't take into
+ // account any event handlers associated with the window
+ bool ProcessWindowEvent(wxEvent& event)
+ { return GetEventHandler()->ProcessEvent(event); }
+
+ // 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;
+#if wxUSE_THREADS
+ using wxEvtHandler::ProcessThreadEvent;
+#endif
+ 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
protected:
// event handling specific to wxWindow
- virtual bool TryValidator(wxEvent& event);
- virtual bool TryParent(wxEvent& event);
+ virtual bool TryBefore(wxEvent& event);
+ virtual bool TryAfter(wxEvent& event);
enum WindowOrder
{
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);
DECLARE_ABSTRACT_CLASS(wxWindowBase)
- DECLARE_NO_COPY_CLASS(wxWindowBase)
+ wxDECLARE_NO_COPY_CLASS(wxWindowBase);
DECLARE_EVENT_TABLE()
};
inline wxWindow *wxWindowBase::GetGrandParent() const
{
- return m_parent ? m_parent->GetParent() : (wxWindow *)NULL;
+ return m_parent ? m_parent->GetParent() : NULL;
}
// ----------------------------------------------------------------------------