X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d577d610a32d7c10f47cc76224a02c5d80166c9e..29c99ad3597ad722ed540b1e600f3ae3afe0f872:/include/wx/window.h diff --git a/include/wx/window.h b/include/wx/window.h index 94f9919e5d..7839127ea9 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -12,7 +12,7 @@ #ifndef _WX_WINDOW_H_BASE_ #define _WX_WINDOW_H_BASE_ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "windowbase.h" #endif @@ -33,7 +33,6 @@ #include "wx/validate.h" // for wxDefaultValidator (always include it) #if wxUSE_PALETTE - #include "wx/dcclient.h" #include "wx/palette.h" #endif // wxUSE_PALETTE @@ -41,6 +40,10 @@ #include "wx/accel.h" #endif // wxUSE_ACCEL +#if wxUSE_ACCESSIBILITY +#include "wx/access.h" +#endif + // when building wxUniv/Foo we don't want the code for native menu use to be // compiled in - it should only be used when building real wxFoo #ifdef __WXUNIVERSAL__ @@ -66,6 +69,10 @@ class WXDLLEXPORT wxToolTip; class WXDLLEXPORT wxWindowBase; class WXDLLEXPORT wxWindow; +#if wxUSE_ACCESSIBILITY +class WXDLLEXPORT wxAccessible; +#endif + // ---------------------------------------------------------------------------- // (pseudo)template list classes // ---------------------------------------------------------------------------- @@ -100,7 +107,7 @@ public: // pseudo ctor (can't be virtual, called from ctor) bool CreateBase(wxWindowBase *parent, - wxWindowID id, + wxWindowID winid, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, @@ -109,16 +116,6 @@ public: virtual ~wxWindowBase(); -#if wxUSE_WX_RESOURCES - // these functions are implemented in resource.cpp and resourc2.cpp - virtual bool LoadFromResource(wxWindow *parent, - const wxString& resourceName, - const wxResourceTable *table = (const wxResourceTable *) NULL); - virtual wxControl *CreateItem(const wxItemResource* childResource, - const wxItemResource* parentResource, - const wxResourceTable *table = (const wxResourceTable *) NULL); -#endif // wxUSE_WX_RESOURCES - // deleting the window // ------------------- @@ -162,7 +159,7 @@ public: // window id uniquely identifies the window among its siblings unless // it is -1 which means "don't care" - void SetId( wxWindowID id ) { m_windowId = id; } + void SetId( wxWindowID winid ) { m_windowId = winid; } wxWindowID GetId() const { return m_windowId; } // generate a control id for the controls which were not given one by @@ -170,10 +167,10 @@ public: static int NewControlId() { return --ms_lastControlId; } // get the id of the control following the one with the given // (autogenerated) id - static int NextControlId(int id) { return id - 1; } + static int NextControlId(int winid) { return winid - 1; } // get the id of the control preceding the one with the given // (autogenerated) id - static int PrevControlId(int id) { return id + 1; } + static int PrevControlId(int winid) { return winid + 1; } // moving/resizing // --------------- @@ -271,7 +268,18 @@ public: *h = s.y; } - // the generic centre function - centers the window on parent by + // There are times (and windows) where 'Best' size and 'Min' size + // are vastly out of sync. This should be remedied somehow, but in + // the meantime, this method will return the larger of BestSize + // (the window's smallest legible size), and any user specified + // MinSize hint. + wxSize GetAdjustedBestSize() const + { + wxSize s( DoGetBestSize() ); + return wxSize( wxMax( s.x, GetMinWidth() ), wxMax( s.y, GetMinHeight() ) ); + } + + // the generic centre function - centers the window on parent by` // default or on screen if it doesn't have parent or // wxCENTER_ON_SCREEN flag is given void Centre( int direction = wxBOTH ); @@ -288,6 +296,9 @@ public: // set window size to wrap around its children virtual void Fit(); + // set virtual size to satisfy children + virtual void FitInside(); + // set min/max size of the window virtual void SetSizeHints( int minW, int minH, int maxW = -1, int maxH = -1, @@ -331,6 +342,17 @@ public: virtual void DoSetVirtualSize( int x, int y ); virtual wxSize DoGetVirtualSize() const; // { return m_virtualSize; } + // Return the largest of ClientSize and BestSize (as determined + // by a sizer, interior children, or other means) + + virtual wxSize GetBestVirtualSize() const + { + wxSize client( GetClientSize() ); + wxSize best( GetBestSize() ); + + return wxSize( wxMax( client.x, best.x ), wxMax( client.y, best.y ) ); + } + // window state // ------------ @@ -400,6 +422,9 @@ public: virtual wxWindow *SetDefaultItem(wxWindow * WXUNUSED(child)) { return NULL; } + // set this child as temporary default + virtual void SetTmpDefaultItem(wxWindow * WXUNUSED(win)) { } + // parent/children relations // ------------------------- @@ -420,14 +445,24 @@ public: // was changed, FALSE otherwise (error or newParent == oldParent) virtual bool Reparent( wxWindowBase *newParent ); + // implementation mostly + virtual void AddChild( wxWindowBase *child ); + virtual void RemoveChild( wxWindowBase *child ); + + // looking for windows + // ------------------- + // find window among the descendants of this one either by id or by // name (return NULL if not found) - wxWindow *FindWindow( long id ); + wxWindow *FindWindow( long winid ); wxWindow *FindWindow( const wxString& name ); - // implementation mostly - virtual void AddChild( wxWindowBase *child ); - virtual void RemoveChild( wxWindowBase *child ); + // Find a window among any window (all return NULL if not found) + static wxWindow *FindWindowById( long winid, const wxWindow *parent = NULL ); + static wxWindow *FindWindowByName( const wxString& name, + const wxWindow *parent = NULL ); + static wxWindow *FindWindowByLabel( const wxString& label, + const wxWindow *parent = NULL ); // event handler stuff // ------------------- @@ -645,11 +680,19 @@ public: // misc // ---- - // get the window border style: uses the current style and falls back to - // the default style for this class otherwise (see GetDefaultBorder()) - wxBorder GetBorder() const; + // get the window border style from the given flags: this is different from + // simply doing flags & wxBORDER_MASK because it uses GetDefaultBorder() to + // translate wxBORDER_DEFAULT to something reasonable + wxBorder GetBorder(long flags) const; - void UpdateWindowUI(); + // get border for the flags of this window + wxBorder GetBorder() const { return GetBorder(GetWindowStyleFlag()); } + + // send wxUpdateUIEvents to this window, and children if recurse is TRUE + virtual void UpdateWindowUI(long flags = wxUPDATE_UI_NONE); + + // do the window-specific processing after processing the update event + virtual void DoUpdateWindowUI(wxUpdateUIEvent& event) ; #if wxUSE_MENUS bool PopupMenu( wxMenu *menu, const wxPoint& pos ) @@ -781,6 +824,22 @@ public: void SetContainingSizer(wxSizer* sizer) { m_containingSizer = sizer; } wxSizer *GetContainingSizer() const { return m_containingSizer; } + // accessibility + // ---------------------- +#if wxUSE_ACCESSIBILITY + // Override to create a specific accessible object. + virtual wxAccessible* CreateAccessible(); + + // Sets the accessible object. + void SetAccessible(wxAccessible* accessible) ; + + // Returns the accessible object. + wxAccessible* GetAccessible() { return m_accessible; }; + + // Returns the accessible object, creating if necessary. + wxAccessible* GetOrCreateAccessible() ; +#endif + // backward compatibility // ---------------------- #if WXWIN_COMPATIBILITY @@ -803,7 +862,14 @@ public: void OnHelp(wxHelpEvent& event); #endif // wxUSE_HELP - // get the haqndle of the window for the underlying window system: this + // virtual function for implementing internal idle + // behaviour + virtual void OnInternalIdle() {} + + // call internal idle recursively + void ProcessInternalIdle() ; + + // get the handle of the window for the underlying window system: this // is only used for wxWin itself or for user code which wants to call // platform-specific APIs virtual WXWidget GetHandle() const = 0; @@ -825,6 +891,20 @@ public: #endif // wxUSE_PALETTE protected: + // event handling specific to wxWindow +#if wxUSE_VALIDATORS + virtual bool TryValidator(wxEvent& event); +#endif // wxUSE_VALIDATORS + virtual bool TryParent(wxEvent& event); + + +#if wxUSE_CONSTRAINTS + // satisfy the constraints for the windows but don't set the window sizes + void SatisfyConstraints(); +#endif // wxUSE_CONSTRAINTS + + // Send the wxWindowDestroyEvent + void SendDestroyEvent(); // the window id - a number which uniquely identifies a window among // its siblings unless it is -1 @@ -837,7 +917,10 @@ protected: // the minimal allowed size for the window (no minimal size if variable(s) // contain(s) -1) - int m_minWidth, m_minHeight, m_maxWidth, m_maxHeight; + int m_minWidth, + m_minHeight, + m_maxWidth, + m_maxHeight; // event handler for this window: usually is just 'this' but may be // changed with SetEventHandler() @@ -914,6 +997,9 @@ protected: bool m_hasCustomPalette; #endif // wxUSE_PALETTE +#if wxUSE_ACCESSIBILITY + wxAccessible* m_accessible; +#endif // Virtual size (scrolling) wxSize m_virtualSize; @@ -938,8 +1024,16 @@ protected: // set the best size for the control if the default size was given: // replaces the fields of size == -1 with the best values for them and // calls SetSize() if needed + // + // This function is rather unfortunately named.. it's really just a + // smarter SetSize / convenience function for expanding wxDefaultSize. + // Note that it does not influence the value returned by GetBestSize + // at all. void SetBestSize(const wxSize& size) { + // the size only needs to be changed if the current size is incomplete, + // i.e. one of the components was specified as default -- so if both + // were given, simply don't do anything if ( size.x == -1 || size.y == -1 ) { wxSize sizeBest = DoGetBestSize(); @@ -1073,6 +1167,14 @@ private: #define sm_classwxWindowMac sm_classwxWindow #endif // wxUniv #include "wx/mac/window.h" +#elif defined(__WXCOCOA__) + #ifdef __WXUNIVERSAL__ + #define wxWindowNative wxWindowCocoa + #else // !wxUniv + #define wxWindowCocoa wxWindow + #define sm_classwxWindowCocoa sm_classwxWindow + #endif // wxUniv + #include "wx/cocoa/window.h" #elif defined(__WXPM__) #ifdef __WXUNIVERSAL__ #define wxWindowNative wxWindowOS2 @@ -1123,6 +1225,102 @@ WXDLLEXPORT wxWindow* wxGetTopLevelParent(wxWindow *win); // deprecated (doesn't start with 'wx' prefix), use wxWindow::NewControlId() inline int NewControlId() { return wxWindowBase::NewControlId(); } +#if wxUSE_ACCESSIBILITY +// ---------------------------------------------------------------------------- +// accessible object for windows +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxWindowAccessible: public wxAccessible +{ +public: + wxWindowAccessible(wxWindow* win): wxAccessible(win) { if (win) win->SetAccessible(this); } + virtual ~wxWindowAccessible() {}; + +// Overridables + + // Can return either a child object, or an integer + // representing the child element, starting from 1. + virtual wxAccStatus HitTest(const wxPoint& pt, int* childId, wxAccessible** childObject); + + // Returns the rectangle for this object (id = 0) or a child element (id > 0). + virtual wxAccStatus GetLocation(wxRect& rect, int elementId); + + // Navigates from fromId to toId/toObject. + virtual wxAccStatus Navigate(wxNavDir navDir, int fromId, + int* toId, wxAccessible** toObject); + + // Gets the name of the specified object. + virtual wxAccStatus GetName(int childId, wxString* name); + + // Gets the number of children. + virtual wxAccStatus GetChildCount(int* childCount); + + // Gets the specified child (starting from 1). + // If *child is NULL and return value is wxACC_OK, + // this means that the child is a simple element and + // not an accessible object. + virtual wxAccStatus GetChild(int childId, wxAccessible** child); + + // Gets the parent, or NULL. + virtual wxAccStatus GetParent(wxAccessible** parent); + + // Performs the default action. childId is 0 (the action for this object) + // or > 0 (the action for a child). + // Return wxACC_NOT_SUPPORTED if there is no default action for this + // window (e.g. an edit control). + virtual wxAccStatus DoDefaultAction(int childId); + + // Gets the default action for this object (0) or > 0 (the action for a child). + // Return wxACC_OK even if there is no action. actionName is the action, or the empty + // string if there is no action. + // The retrieved string describes the action that is performed on an object, + // not what the object does as a result. For example, a toolbar button that prints + // a document has a default action of "Press" rather than "Prints the current document." + virtual wxAccStatus GetDefaultAction(int childId, wxString* actionName); + + // Returns the description for this object or a child. + virtual wxAccStatus GetDescription(int childId, wxString* description); + + // Returns help text for this object or a child, similar to tooltip text. + virtual wxAccStatus GetHelpText(int childId, wxString* helpText); + + // Returns the keyboard shortcut for this object or child. + // Return e.g. ALT+K + virtual wxAccStatus GetKeyboardShortcut(int childId, wxString* shortcut); + + // Returns a role constant. + virtual wxAccStatus GetRole(int childId, wxAccRole* role); + + // Returns a state constant. + virtual wxAccStatus GetState(int childId, long* state); + + // Returns a localized string representing the value for the object + // or child. + virtual wxAccStatus GetValue(int childId, wxString* strValue); + + // Selects the object or child. + virtual wxAccStatus Select(int childId, wxAccSelectionFlags selectFlags); + + // Gets the window with the keyboard focus. + // If childId is 0 and child is NULL, no object in + // this subhierarchy has the focus. + // If this object has the focus, child should be 'this'. + virtual wxAccStatus GetFocus(int* childId, wxAccessible** child); + + // Gets a variant representing the selected children + // of this object. + // Acceptable values: + // - a null variant (IsNull() returns TRUE) + // - a list variant (GetType() == wxT("list") + // - an integer representing the selected child element, + // or 0 if this object is selected (GetType() == wxT("long") + // - a "void*" pointer to a wxAccessible child object + virtual wxAccStatus GetSelections(wxVariant* selections); +}; + +#endif // wxUSE_ACCESSIBILITY + + #endif // _WX_WINDOW_H_BASE_