]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/scrolwin.h
Don't create multiple parent-less top level frames in layout sample.
[wxWidgets.git] / include / wx / scrolwin.h
index 8e106a6babb5fd3d7683d9fa112e4b4d0c6b2600..73d93aaf613eb39a5ed00693c992d8748017aeff 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        include/wx/scrolwin.h
+// Name:        wx/scrolwin.h
 // Purpose:     wxScrolledWindow, wxScrolledControl and wxScrollHelper
 // Author:      Vadim Zeitlin
 // Modified by:
 // Purpose:     wxScrolledWindow, wxScrolledControl and wxScrollHelper
 // Author:      Vadim Zeitlin
 // Modified by:
@@ -106,8 +106,23 @@ public:
     // Clear() is necessary. If false, the whole canvas is invalidated and a
     // Clear() is necessary. Disable for when the scroll increment is used to
     // actually scroll a non-constant distance
     // Clear() is necessary. If false, the whole canvas is invalidated and a
     // Clear() is necessary. Disable for when the scroll increment is used to
     // actually scroll a non-constant distance
+    //
+    // Notice that calling this method with a false argument doesn't disable
+    // scrolling the window in this direction, it just changes the mechanism by
+    // which it is implemented to not use wxWindow::ScrollWindow().
     virtual void EnableScrolling(bool x_scrolling, bool y_scrolling);
 
     virtual void EnableScrolling(bool x_scrolling, bool y_scrolling);
 
+    // Disable use of keyboard keys for scrolling. By default cursor movement
+    // keys (including Home, End, Page Up and Down) are used to scroll the
+    // window appropriately. If the derived class uses these keys for something
+    // else, e.g. changing the currently selected item, this function can be
+    // used to disable this behaviour as it's not only not necessary then but
+    // can actually be actively harmful if another object forwards a keyboard
+    // event corresponding to one of the above keys to us using
+    // ProcessWindowEvent() because the event will always be processed which
+    // can be undesirable.
+    void DisableKeyboardScrolling() { m_kbdScrollingEnabled = false; }
+
     // Get the view start
     void GetViewStart(int *x, int *y) const { DoGetViewStart(x, y); }
 
     // Get the view start
     void GetViewStart(int *x, int *y) const { DoGetViewStart(x, y); }
 
@@ -241,10 +256,6 @@ protected:
     // delete the event handler we installed
     void DeleteEvtHandler();
 
     // delete the event handler we installed
     void DeleteEvtHandler();
 
-    // calls wxScrollHelperEvtHandler::ResetDrawnFlag(), see explanation
-    // in wxScrollHelperEvtHandler::ProcessEvent()
-    void ResetDrawnFlag();
-
     // this function should be overridden to return the size available for
     // m_targetWindow inside m_win of the given size
     //
     // this function should be overridden to return the size available for
     // m_targetWindow inside m_win of the given size
     //
@@ -272,6 +283,10 @@ protected:
 
     wxTimer              *m_timerAutoScroll;
 
 
     wxTimer              *m_timerAutoScroll;
 
+    // The number of pixels to scroll in horizontal and vertical directions
+    // respectively.
+    //
+    // If 0, means that the scrolling in the given direction is disabled.
     int                   m_xScrollPixelsPerLine;
     int                   m_yScrollPixelsPerLine;
     int                   m_xScrollPosition;
     int                   m_xScrollPixelsPerLine;
     int                   m_yScrollPixelsPerLine;
     int                   m_xScrollPosition;
@@ -284,6 +299,8 @@ protected:
     bool                  m_xScrollingEnabled;
     bool                  m_yScrollingEnabled;
 
     bool                  m_xScrollingEnabled;
     bool                  m_yScrollingEnabled;
 
+    bool                  m_kbdScrollingEnabled;
+
 #if wxUSE_MOUSEWHEEL
     int m_wheelRotation;
 #endif // wxUSE_MOUSEWHEEL
 #if wxUSE_MOUSEWHEEL
     int m_wheelRotation;
 #endif // wxUSE_MOUSEWHEEL
@@ -363,24 +380,38 @@ public:
         this->MacSetClipChildren(true);
 #endif
 
         this->MacSetClipChildren(true);
 #endif
 
-        this->Connect(wxEVT_PAINT, wxPaintEventHandler(wxScrolled::OnPaint));
-
         // by default, we're scrollable in both directions (but if one of the
         // styles is specified explicitly, we shouldn't add the other one
         // automatically)
         if ( !(style & (wxHSCROLL | wxVSCROLL)) )
             style |= wxHSCROLL | wxVSCROLL;
 
         // by default, we're scrollable in both directions (but if one of the
         // styles is specified explicitly, we shouldn't add the other one
         // automatically)
         if ( !(style & (wxHSCROLL | wxVSCROLL)) )
             style |= wxHSCROLL | wxVSCROLL;
 
+#ifdef __WXOSX__
+        bool retval = T::Create(parent, winid, pos, size, style, name);
+        if ( retval && (style & wxALWAYS_SHOW_SB) )
+            ShowScrollbars(wxSHOW_SB_ALWAYS, wxSHOW_SB_ALWAYS);
+        return retval;
+#else
+        if ( style & wxALWAYS_SHOW_SB )
+            ShowScrollbars(wxSHOW_SB_ALWAYS, wxSHOW_SB_ALWAYS);
+
         return T::Create(parent, winid, pos, size, style, name);
         return T::Create(parent, winid, pos, size, style, name);
+#endif
     }
 
     }
 
+#ifdef __WXMSW__
     // we need to return a special WM_GETDLGCODE value to process just the
     // arrows but let the other navigation characters through
     // we need to return a special WM_GETDLGCODE value to process just the
     // arrows but let the other navigation characters through
-#ifdef __WXMSW__
     virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
     {
         return FilterMSWWindowProc(nMsg, T::MSWWindowProc(nMsg, wParam, lParam));
     }
     virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
     {
         return FilterMSWWindowProc(nMsg, T::MSWWindowProc(nMsg, wParam, lParam));
     }
+
+    // Take into account the scroll origin.
+    virtual void MSWAdjustBrushOrg(int* xOrg, int* yOrg) const
+    {
+        CalcUnscrolledPosition(*xOrg, *yOrg, xOrg, yOrg);
+    }
 #endif // __WXMSW__
 
     WX_FORWARD_TO_SCROLL_HELPER()
 #endif // __WXMSW__
 
     WX_FORWARD_TO_SCROLL_HELPER()
@@ -392,23 +423,20 @@ protected:
     }
 
 private:
     }
 
 private:
-    // this is needed for wxEVT_PAINT processing hack described in
-    // wxScrollHelperEvtHandler::ProcessEvent()
-    void OnPaint(wxPaintEvent& event)
-    {
-        // the user code didn't really draw the window if we got here, so set
-        // this flag to try to call OnDraw() later
-        ResetDrawnFlag();
-        event.Skip();
-    }
-
     // VC++ 6 gives warning for the declaration of template member function
     // without definition
     // VC++ 6 gives warning for the declaration of template member function
     // without definition
-#if !defined(__VISUALC__) || wxCHECK_VISUALC_VERSION(7)
+#ifndef __VISUALC6__
     wxDECLARE_NO_COPY_CLASS(wxScrolled);
 #endif
 };
 
     wxDECLARE_NO_COPY_CLASS(wxScrolled);
 #endif
 };
 
+#ifdef __VISUALC6__
+    // disable the warning about non dll-interface class used as base for
+    // dll-interface class: it's harmless in this case
+    #pragma warning(push)
+    #pragma warning(disable:4275)
+#endif
+
 // for compatibility with existing code, we provide wxScrolledWindow
 // "typedef" for wxScrolled<wxPanel>. It's not a real typedef because we
 // want wxScrolledWindow to show in wxRTTI information (the class is widely
 // for compatibility with existing code, we provide wxScrolledWindow
 // "typedef" for wxScrolled<wxPanel>. It's not a real typedef because we
 // want wxScrolledWindow to show in wxRTTI information (the class is widely
@@ -430,4 +458,8 @@ public:
 
 typedef wxScrolled<wxWindow> wxScrolledCanvas;
 
 
 typedef wxScrolled<wxWindow> wxScrolledCanvas;
 
+#ifdef __VISUALC6__
+    #pragma warning(pop)
+#endif
+
 #endif // _WX_SCROLWIN_H_BASE_
 #endif // _WX_SCROLWIN_H_BASE_