]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/window.h
one additional assign
[wxWidgets.git] / include / wx / window.h
index 972fb886b45ca5c53714b166fb27c78415e6ef7b..b4008d2ec9183c4a98112722aa5132adb2bb330b 100644 (file)
@@ -201,11 +201,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 +214,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 +417,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?
 
@@ -627,9 +627,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 +642,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;
@@ -1253,13 +1258,17 @@ 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);
@@ -1361,6 +1370,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;
@@ -1478,6 +1491,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
@@ -1528,9 +1545,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