]> git.saurik.com Git - wxWidgets.git/commitdiff
Made wxWindow::HasScrollbar() do what it says.
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 10 Aug 2009 11:18:09 +0000 (11:18 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 10 Aug 2009 11:18:09 +0000 (11:18 +0000)
Added wxWindow::CanScroll() with the old HasScrollbar() meaning but changed
HasScrollbar() to check for the scrollbar existence instead of just checking
if it might exist.

Closes #10897.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61634 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/window.h
interface/wx/window.h
src/common/wincmn.cpp

index 6a2a7384a793022c0543afcac2df412503c74512..a3f2ff23e27155d4989b5cbc20062085ee68bacc 100644 (file)
@@ -391,6 +391,8 @@ All (GUI):
 - Added EVT_DATAVIEW_CACHE_HINT() event (Trigve).
 - Added wxLB_NO_SB style (implemented for MSW only; Dario Senic).
 - Added long version field to wxAboutDialogInfo (Jeff Tupper).
+- Added wxWindow::CanScroll() behaving like the old HasScrollbar() and made
+  HasScrollbar() really check for the scrollbar existence.
 
 GTK:
 
index b481080beb82670f6d6b51ce86c6b2573de6eace..9d863ee5167908b59cc72fcfa6bca167bee28328 100644 (file)
@@ -377,7 +377,7 @@ public:
         // acceptable size using which it will still look "nice" in
         // most situations)
     wxSize GetBestSize() const;
-    
+
     void GetBestSize(int *w, int *h) const
     {
         wxSize s = GetBestSize();
@@ -1160,13 +1160,16 @@ public:
     // scrollbars
     // ----------
 
-        // does the window have the scrollbar for this orientation?
-    bool HasScrollbar(int orient) const
+        // can the window have the scrollbar in this orientation?
+    bool CanScroll(int orient) const
     {
         return (m_windowStyle &
                 (orient == wxHORIZONTAL ? wxHSCROLL : wxVSCROLL)) != 0;
     }
 
+        // does the window have the scrollbar in this orientation?
+    bool HasScrollbar(int orient) const;
+
         // configure the window scrollbars
     virtual void SetScrollbar( int orient,
                                int pos,
index 7d1f81473c5aeab0e90fcfd57f5af2cfd45a34d4..f14f24f050161a53b2b9bd3a5016bb2c59d54aea 100644 (file)
@@ -513,7 +513,23 @@ public:
     virtual int GetScrollThumb(int orientation) const;
 
     /**
-        Returns @true if this window has a scroll bar for this orientation.
+        Returns @true if this window can have a scroll bar in this orientation.
+
+        @param orient
+            Orientation to check, either wxHORIZONTAL or wxVERTICAL.
+
+        @since 2.9.1
+    */
+    bool CanScroll(int orient) const;
+
+    /**
+        Returns @true if this window currently has a scroll bar for this
+        orientation.
+
+        This method may return @false even when CanScroll() for the same
+        orientation returns @true, but if CanScroll() returns @false, i.e.
+        scrolling in this direction is not enabled at all, HasScrollbar()
+        always returns @false as well.
 
         @param orient
             Orientation to check, either wxHORIZONTAL or wxVERTICAL.
index b337a659e4e41693d1ced64483f4e2b276ca3596..d36b727cf0d97187cee33e5343d32a86ab08ba83 100644 (file)
@@ -474,7 +474,7 @@ static bool wxHasRealChildren(const wxWindowBase* win)
           node = node->GetNext() )
     {
         wxWindow *win = node->GetData();
-        if ( !win->IsTopLevel() && win->IsShown() 
+        if ( !win->IsTopLevel() && win->IsShown()
 #if wxUSE_SCROLLBAR
             && !win->IsKindOf(CLASSINFO(wxScrollBar))
 #endif
@@ -896,6 +896,20 @@ void wxWindowBase::SendSizeEventToParent(int flags)
         parent->SendSizeEvent(flags);
 }
 
+bool wxWindowBase::HasScrollbar(int orient) const
+{
+    // if scrolling in the given direction is disabled, we can't have the
+    // corresponding scrollbar no matter what
+    if ( !CanScroll(orient) )
+        return false;
+
+    const wxSize sizeVirt = GetVirtualSize();
+    const wxSize sizeClient = GetClientSize();
+
+    return orient == wxHORIZONTAL ? sizeVirt.x > sizeClient.x
+                                  : sizeVirt.y > sizeClient.y;
+}
+
 // ----------------------------------------------------------------------------
 // show/hide/enable/disable the window
 // ----------------------------------------------------------------------------