X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/00a77b7c5d9e1714198cd5d7e3a905bca2df2534..05dff6b0756ec639d4d05ed88ef47e57a8dbbae8:/include/wx/window.h?ds=sidebyside diff --git a/include/wx/window.h b/include/wx/window.h index 62396ddcac..852c4c3b59 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -117,6 +117,16 @@ enum wxWindowVariant #define wxWINDOW_DEFAULT_VARIANT wxT("window-default-variant") #endif +// valid values for Show/HideWithEffect() +enum wxShowEffect +{ + wxSHOW_EFFECT_ROLL, + wxSHOW_EFFECT_SLIDE, + wxSHOW_EFFECT_BLEND, + wxSHOW_EFFECT_EXPAND, + wxSHOW_EFFECT_MAX +}; + // ---------------------------------------------------------------------------- // (pseudo)template list classes // ---------------------------------------------------------------------------- @@ -201,11 +211,6 @@ public: wxWindowVariant GetWindowVariant() const { return m_windowVariant; } - // window id uniquely identifies the window among its siblings unless - // it is wxID_ANY which means "don't care" - void SetId( wxWindowID winid ) { m_windowId = winid; } - wxWindowID GetId() const { return m_windowId; } - // get or change the layout direction (LTR or RTL) for this window, // wxLayout_Default is returned if layout direction is not supported virtual wxLayoutDirection GetLayoutDirection() const @@ -219,15 +224,24 @@ public: wxCoord width, wxCoord widthTotal) const; - // generate a control id for the controls which were not given one by - // user - static int NewControlId() { return --ms_lastControlId; } - // get the id of the control following the one with the given - // (autogenerated) id - 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 winid) { return winid + 1; } + + // window id uniquely identifies the window among its siblings unless + // it is wxID_ANY which means "don't care" + void SetId( wxWindowID winid ) { m_windowId = winid; } + wxWindowID GetId() const { return m_windowId; } + + // returns true if this id value belong to the range reserved for the + // auto-generated (by NewControlId()) ids (they're always negative) + static bool IsAutoGeneratedId(wxWindowID id); + + // generate a unique id (or count of them consecutively), returns a + // valid id in IsAutoGeneratedId() range or wxID_NONE if failed + static wxWindowID NewControlId(int count = 1); + + // mark an id previously returned by NewControlId() as being unused any + // more so that it can be reused again for another control later + static void ReleaseControlId(wxWindowID id); + // moving/resizing // --------------- @@ -413,10 +427,6 @@ public: const wxSize& incSize=wxDefaultSize) { DoSetSizeHints(minSize.x, minSize.y, maxSize.x, maxSize.y, incSize.x, incSize.y); } - virtual void DoSetSizeHints( int minW, int minH, - int maxW, int maxH, - int incW, int incH ); - // Methods for setting virtual size hints // FIXME: What are virtual size hints? @@ -499,6 +509,35 @@ public: virtual bool Show( bool show = true ); bool Hide() { return Show(false); } + // show or hide the window with a special effect, not implemented on + // most platforms (where it is the same as Show()/Hide() respectively) + // + // timeout specifies how long the animation should take, in ms, the + // default value of 0 means to use the default (system-dependent) value + // + // direction is only used with wxSHOW_EFFECT_ROLL and SLIDE values + virtual bool ShowWithEffect(wxShowEffect effect, + unsigned timeout = 0, + wxDirection dir = wxBOTTOM) + { + wxUnusedVar(effect); + wxUnusedVar(timeout); + wxUnusedVar(dir); + + return Show(); + } + + virtual bool HideWithEffect(wxShowEffect effect, + unsigned timeout = 0, + wxDirection dir = wxBOTTOM) + { + wxUnusedVar(effect); + wxUnusedVar(timeout); + wxUnusedVar(dir); + + return Hide(); + } + // returns true if window was enabled/disabled, false if nothing done virtual bool Enable( bool enable = true ); bool Disable() { return Enable(false); } @@ -627,9 +666,9 @@ public: // move this window just before/after the specified one in tab order // (the other window must be our sibling!) void MoveBeforeInTabOrder(wxWindow *win) - { DoMoveInTabOrder(win, MoveBefore); } + { DoMoveInTabOrder(win, OrderBefore); } void MoveAfterInTabOrder(wxWindow *win) - { DoMoveInTabOrder(win, MoveAfter); } + { DoMoveInTabOrder(win, OrderAfter); } // parent/children relations @@ -642,6 +681,11 @@ public: // needed just for extended runtime const wxWindowList& GetWindowChildren() const { return GetChildren() ; } + // get the window before/after this one in the parents children list, + // returns NULL if this is the first/last window + wxWindow *GetPrevSibling() const { return DoGetSibling(OrderBefore); } + wxWindow *GetNextSibling() const { return DoGetSibling(OrderAfter); } + // get the parent or the parent of the parent wxWindow *GetParent() const { return m_parent; } inline wxWindow *GetGrandParent() const; @@ -701,6 +745,13 @@ public: // 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. + bool HandleWindowEvent(wxEvent& event) const; + // validators // ---------- @@ -1044,6 +1095,20 @@ public: bool PageUp() { return ScrollPages(-1); } bool PageDown() { return ScrollPages(1); } + // call this to always show one or both scrollbars, even if the window + // is big enough to not require them + virtual void AlwaysShowScrollbars(bool WXUNUSED(horz) = true, + bool WXUNUSED(vert) = true) + { + } + + // return true if AlwaysShowScrollbars() had been called before for the + // corresponding orientation + virtual bool IsScrollbarAlwaysShown(int WXUNUSED(orient)) const + { + return false; + } + // context-sensitive help // ---------------------- @@ -1230,7 +1295,8 @@ public: // area (normal windows can't, but e.g. menubar or statusbar can): virtual bool CanBeOutsideClientArea() const { return false; } - // returns true if the platform should explicitly apply a theme border + // returns true if the platform should explicitly apply a theme border. Currently + // used only by Windows virtual bool CanApplyThemeBorder() const { return true; } protected: @@ -1238,18 +1304,21 @@ protected: virtual bool TryValidator(wxEvent& event); virtual bool TryParent(wxEvent& event); - // common part of MoveBefore/AfterInTabOrder() - enum MoveKind + enum WindowOrder { - MoveBefore, // insert before the given window - MoveAfter // insert after the given window + OrderBefore, // insert before the given window + OrderAfter // insert after the given window }; - virtual void DoMoveInTabOrder(wxWindow *win, MoveKind move); + + // common part of GetPrev/NextSibling() + wxWindow *DoGetSibling(WindowOrder order) const; + + // common part of MoveBefore/AfterInTabOrder() + virtual void DoMoveInTabOrder(wxWindow *win, WindowOrder move); // implementation of Navigate() and NavigateIn() virtual bool DoNavigateIn(int flags); - #if wxUSE_CONSTRAINTS // satisfy the constraints for the windows but don't set the window sizes void SatisfyConstraints(); @@ -1347,6 +1416,10 @@ protected: // Layout() window automatically when its size changes? bool m_autoLayout:1; + // true if we had automatically allocated the id value for this window + // (i.e. wxID_ANY had been passed to the ctor) + bool m_freeId:1; + // window state bool m_isShown:1; bool m_isEnabled:1; @@ -1396,7 +1469,7 @@ protected: // this allows you to implement standard control borders without // repeating the code in different classes that are not derived from // wxControl - virtual wxBorder GetDefaultBorderForControl() const { return wxBORDER_SUNKEN; } + virtual wxBorder GetDefaultBorderForControl() const { return wxBORDER_THEME; } // Get the default size for the new window if no explicit size given. TLWs // have their own default size so this is just for non top-level windows. @@ -1464,6 +1537,10 @@ protected: // same as DoSetSize() for the client size virtual void DoSetClientSize(int width, int height) = 0; + virtual void DoSetSizeHints( int minW, int minH, + int maxW, int maxH, + int incW, int incH ); + // move the window to the specified location and resize it: this is called // from both DoSetSize() and DoSetClientSize() and would usually just // reposition this window except for composite controls which will want to @@ -1514,9 +1591,6 @@ private: int DoGetPopupMenuSelectionFromUser(wxMenu& menu, int x, int y); #endif // wxUSE_MENUS - // contains the last id generated by NewControlId - static int ms_lastControlId; - // the stack of windows which have captured the mouse static struct WXDLLIMPEXP_FWD_CORE wxWindowNext *ms_winCaptureNext; // the window that currently has mouse capture