Permalink
Browse files

Added knowledge of virtual size to wx(Scrolled)Windows, they can now

manage their own scrollbars with the help of a sizer or other user
clues (SetVirtualSizeHints) without the need for an ancillary container.
Added SetSizerAndFit convenience method.
SetSizer now enables/disables AutoLayout automagically.
Logic bugfix for scrollsub sample.
Syntax bugfix in parser.y.
Compiler warning fix in textctrl.cpp.

 Modified Files:
    docs/latex/wx/scrolwin.tex docs/latex/wx/sizer.tex
    docs/latex/wx/window.tex include/wx/scrolwin.h
    include/wx/sizer.h include/wx/window.h
    include/wx/generic/scrolwin.h include/wx/gtk/scrolwin.h
    samples/scrollsub/scrollsub.cpp src/common/parser.y
    src/common/sizer.cpp src/common/wincmn.cpp
    src/generic/scrlwing.cpp src/gtk/scrolwin.cpp
    src/msw/textctrl.cpp


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15210 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
  • Loading branch information...
1 parent 347eb1f commit 0a4013fc8f21218c55ab97d7cc17120d4731c633 Ron Lee committed Apr 19, 2002
View
@@ -358,11 +358,22 @@ \section{\class{wxScrolledWindow}}\label{wxscrolledwindow}
necessary to derive a new class from wxWindow, overriding {\bf OnSize} and
adjusting the scrollbars appropriately.
+\wxheading{See also}
+
+\helpref{wxWindow::SetVirtualSize}{wxwindowsetvirtualsize}
+
+\membersection{wxScrolledWindow::SetScrollRate}\label{wxscrolledwindowsetscrollrate}
+
+\func{void}{SetScrollRate}{\param{int}{xstep}, \param{int}{ystep}}
+
+Set the horizontal and vertical scrolling increment only. See the pixelsPerUnit
+parameter in SetScrollbars.
+
\membersection{wxScrolledWindow::SetTargetWindow}\label{wxscrolledwindowsettargetwindow}
\func{void}{SetTargetWindow}{\param{wxWindow* }{window}}
-Call this function to tell wxScrolledWindow to perform the actually scrolling on
+Call this function to tell wxScrolledWindow to perform the actual scrolling on
a different window (not on itself).
\membersection{wxScrolledWindow::GetViewStart}\label{wxscrolledwindowgetviewstart}
View
@@ -131,6 +131,20 @@ \section{\class{wxSizer}}\label{wxsizer}
is commonly done in the constructor of the window itself, see sample in the description
of \helpref{wxBoxSizer}{wxboxsizer}.
+\membersection{wxSizer::FitInside}\label{wxsizerfitinside}
+
+\func{void}{FitInside}{\param{wxWindow* }{window}}
+
+Tell the sizer to resize the virtual size of the {\it window} to match the sizer's
+minimal size. This will not alter the on screen size of the window, but may cause
+the addition/removal/alteration of scrollbars required to view the virtual area in
+windows which manage it.
+
+\wxheading{See also}
+
+\helpref{wxScrolledWindow::SetScrollbars}{wxscrolledwindowsetscrollbars},\rtfsp
+\helpref{wxSizer::SetVirtualSizeHints}{wxsizersetvirtualsizehints}
+
\membersection{wxSizer::GetSize}\label{wxsizergetsize}
\func{wxSize}{GetSize}{\void}
@@ -230,8 +244,19 @@ \section{\class{wxSizer}}\label{wxsizer}
\func{void}{SetSizeHints}{\param{wxWindow* }{window}}
-Tell the sizer to set the minimal size of the {\it window} to match the sizer's minimal size.
-This is commonly done in the constructor of the window itself, see sample in the description
-of \helpref{wxBoxSizer}{wxboxsizer} if the window is resizable (as are many dialogs under Unix and
-frames on probably all platforms).
+Tell the sizer to set (and \helpref{Fit}{wxsizerfit}) the minimal size of the {\it window} to
+match the sizer's minimal size. This is commonly done in the constructor of the window itself,
+see sample in the description of \helpref{wxBoxSizer}{wxboxsizer} if the window is resizable
+(as are many dialogs under Unix and frames on probably all platforms).
+
+\membersection{wxSizer::SetVirtualSizeHints}\label{wxsizersetvirtualsizehints}
+
+\func{void}{SetVirtualSizeHints}{\param{wxWindow* }{window}}
+
+Tell the sizer to set the minimal size of the {\it window} virtual area to match the sizer's
+minimal size. For windows with managed scrollbars this will set them appropriately.
+
+\wxheading{See also}
+
+\helpref{wxScrolledWindow::SetScrollbars}{wxscrolledwindowsetscrollbars}
View
@@ -570,6 +570,7 @@ \section{\class{wxWindow}}\label{wxwindow}
\wxheading{See also}
\helpref{GetSize}{wxwindowgetsize}
+\helpref{GetVirtualSize}{wxwindowgetvirtualsize}
\membersection{wxWindow::GetConstraints}\label{wxwindowgetconstraints}
@@ -826,7 +827,8 @@ \section{\class{wxWindow}}\label{wxwindow}
\wxheading{See also}
-\helpref{GetClientSize}{wxwindowgetclientsize}
+\helpref{GetClientSize}{wxwindowgetclientsize},\rtfsp
+\helpref{GetVirtualSize}{wxwindowgetvirtualsize}
\membersection{wxWindow::GetSizer}\label{wxwindowgetsizer}
@@ -902,6 +904,23 @@ \section{\class{wxWindow}}\label{wxwindow}
Returns a pointer to the current validator for the window, or NULL if there is none.
+\membersection{wxWindow::GetVirtualSize}\label{wxwindowgetvirtualsize}
+
+\constfunc{void}{GetVirtualSize}{\param{int* }{width}, \param{int* }{height}}
+
+\constfunc{wxSize}{GetVirtualSize}{\void}
+
+This gets the virtual size of the window in pixels.
+
+\wxheading{Parameters}
+
+\docparam{width}{Receives the window virtual width.}
+
+\docparam{height}{Receives the window virtual height.}
+
+\helpref{GetSize}{wxwindowgetsize},\rtfsp
+\helpref{GetClientSize}{wxwindowgetclientsize}
+
\membersection{wxWindow::GetWindowStyleFlag}\label{wxwindowgetwindowstyleflag}
\constfunc{long}{GetWindowStyleFlag}{\void}
@@ -2405,11 +2424,21 @@ \section{\class{wxWindow}}\label{wxwindow}
\wxheading{Remarks}
+SetSizer now enables and disables Layout automatically, but prior to wxWindows 2.3.3
+the following applied:
+
You must call \helpref{wxWindow::SetAutoLayout}{wxwindowsetautolayout} to tell a window to use
the sizer automatically in OnSize; otherwise, you must override OnSize and call Layout()
explicitly. When setting both a wxSizer and a \helpref{wxLayoutConstraints}{wxlayoutconstraints},
only the sizer will have effect.
+\membersection{wxWindow::SetSizerAndFit}\label{wxwindowsetsizerandfit}
+
+\func{void}{SetSizerAndFit}{\param{wxSizer* }{sizer}, \param{bool }{deleteOld=TRUE}}
+
+The same as \helpref{SetSizer}{wxwindowsetsizer}, except it also sets the size hints
+for the window based on the sizer's minimum size.
+
\membersection{wxWindow::SetTitle}\label{wxwindowsettitle}
\func{virtual void}{SetTitle}{\param{const wxString\& }{title}}
@@ -2450,6 +2479,37 @@ \section{\class{wxWindow}}\label{wxwindow}
Get the associated tooltip or NULL if none.
+\membersection{wxWindow::SetVirtualSize}\label{wxwindowsetvirtualsize}
+
+\func{void}{SetVirtualSize}{\param{int}{ width}, \param{int}{ height}}
+
+\func{void}{SetVirtualSize}{\param{const wxSize\&}{ size}}
+
+Sets the virtual size of the window in pixels.
+
+
+\membersection{wxWindow::SetVirtualSizeHints}\label{wxwindowsetvirtualsizehints}
+
+\func{virtual void}{SetVirtualSizeHints}{\param{int}{ minW},\param{int}{ minH}, \param{int}{ maxW=-1}, \param{int}{ maxH=-1}}
+
+Allows specification of minimum and maximum virtual window sizes.
+If a pair of values is not set (or set to -1), the default values
+will be used.
+
+\wxheading{Parameters}
+
+\docparam{minW}{Specifies the minimum width allowable.}
+
+\docparam{minH}{Specifies the minimum height allowable.}
+
+\docparam{maxW}{Specifies the maximum width allowable.}
+
+\docparam{maxH}{Specifies the maximum height allowable.}
+
+\wxheading{Remarks}
+
+If this function is called, the user will not be able to size the virtual area
+of the window outside the given bounds.
\membersection{wxWindow::SetWindowStyle}\label{wxwindowsetwindowstyle}
@@ -69,6 +69,8 @@ class WXDLLEXPORT wxGenericScrolledWindow : public wxPanel,
// lay out the window and its children
virtual bool Layout();
+ virtual void DoSetVirtualSize( int x, int y );
+
protected:
// this is needed for wxEVT_PAINT processing hack described in
// wxScrollHelperEvtHandler::ProcessEvent()
@@ -91,3 +93,5 @@ class WXDLLEXPORT wxGenericScrolledWindow : public wxPanel,
#endif
// _WX_GENERIC_SCROLLWIN_H_
+
+// vi:sts=4:sw=4:et
View
@@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////////
-// Name: wx/generic/scrolwin.h
+// Name: wx/gtk/scrolwin.h
// Purpose: wxScrolledWindow class
// Author: Robert Roebling
// Modified by:
@@ -65,9 +65,17 @@ class WXDLLEXPORT wxScrolledWindow : public wxPanel
virtual void SetTargetWindow( wxWindow *target, bool pushEventHandler = FALSE );
virtual wxWindow *GetTargetWindow();
+ // Set the scrolled area of the window.
+ virtual void DoSetVirtualSize( int x, int y );
+
+ // Set the x, y scrolling increments.
+ void SetScrollRate( int xstep, int ystep );
+
// Number of pixels per user unit (0 or -1 for no scrollbar)
// Length of virtual canvas in user units
// Length of page in user units
+ // Default action is to set the virtual size and alter scrollbars
+ // accordingly.
virtual void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY,
int noUnitsX, int noUnitsY,
int xPos = 0, int yPos = 0,
@@ -95,9 +103,6 @@ class WXDLLEXPORT wxScrolledWindow : public wxPanel
void ViewStart(int *x, int *y) const
{ GetViewStart( x, y ); }
- // Actual size in pixels when scrolling is taken into account
- virtual void GetVirtualSize(int *x, int *y) const;
-
// translate between scrolled and unscrolled coordinates
void CalcScrolledPosition(int x, int y, int *xx, int *yy) const
{ DoCalcScrolledPosition(x, y, xx, yy); }
@@ -163,10 +168,12 @@ class WXDLLEXPORT wxScrolledWindow : public wxPanel
int m_yScrollPixelsPerLine;
bool m_xScrollingEnabled;
bool m_yScrollingEnabled;
+
+ // FIXME: these next four members are duplicated in the GtkAdjustment
+ // members of wxWindow. Can they be safely removed from here?
+
int m_xScrollPosition;
int m_yScrollPosition;
- int m_xScrollLines;
- int m_yScrollLines;
int m_xScrollLinesPerPage;
int m_yScrollLinesPerPage;
@@ -179,3 +186,5 @@ class WXDLLEXPORT wxScrolledWindow : public wxPanel
#endif
// _WX_GTK_SCROLLWIN_H_
+
+// vi:sts=4:sw=4:et
View
@@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////////
-// Name: wx/generic/scrolwin.h
+// Name: wx/gtk/scrolwin.h
// Purpose: wxScrolledWindow class
// Author: Robert Roebling
// Modified by:
@@ -65,9 +65,17 @@ class WXDLLEXPORT wxScrolledWindow : public wxPanel
virtual void SetTargetWindow( wxWindow *target, bool pushEventHandler = FALSE );
virtual wxWindow *GetTargetWindow();
+ // Set the scrolled area of the window.
+ virtual void DoSetVirtualSize( int x, int y );
+
+ // Set the x, y scrolling increments.
+ void SetScrollRate( int xstep, int ystep );
+
// Number of pixels per user unit (0 or -1 for no scrollbar)
// Length of virtual canvas in user units
// Length of page in user units
+ // Default action is to set the virtual size and alter scrollbars
+ // accordingly.
virtual void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY,
int noUnitsX, int noUnitsY,
int xPos = 0, int yPos = 0,
@@ -95,9 +103,6 @@ class WXDLLEXPORT wxScrolledWindow : public wxPanel
void ViewStart(int *x, int *y) const
{ GetViewStart( x, y ); }
- // Actual size in pixels when scrolling is taken into account
- virtual void GetVirtualSize(int *x, int *y) const;
-
// translate between scrolled and unscrolled coordinates
void CalcScrolledPosition(int x, int y, int *xx, int *yy) const
{ DoCalcScrolledPosition(x, y, xx, yy); }
@@ -163,10 +168,12 @@ class WXDLLEXPORT wxScrolledWindow : public wxPanel
int m_yScrollPixelsPerLine;
bool m_xScrollingEnabled;
bool m_yScrollingEnabled;
+
+ // FIXME: these next four members are duplicated in the GtkAdjustment
+ // members of wxWindow. Can they be safely removed from here?
+
int m_xScrollPosition;
int m_yScrollPosition;
- int m_xScrollLines;
- int m_yScrollLines;
int m_xScrollLinesPerPage;
int m_yScrollLinesPerPage;
@@ -179,3 +186,5 @@ class WXDLLEXPORT wxScrolledWindow : public wxPanel
#endif
// _WX_GTK_SCROLLWIN_H_
+
+// vi:sts=4:sw=4:et
View
@@ -44,6 +44,9 @@ class WXDLLEXPORT wxScrollHelper
int GetScrollPageSize(int orient) const;
void SetScrollPageSize(int orient, int pageSize);
+ // Set the x, y scrolling increments.
+ void SetScrollRate( int xstep, int ystep );
+
// get the size of one logical unit in physical ones
virtual void GetScrollPixelsPerUnit(int *pixelsPerUnitX,
int *pixelsPerUnitY) const;
@@ -58,9 +61,6 @@ class WXDLLEXPORT wxScrollHelper
// Get the view start
virtual void GetViewStart(int *x, int *y) const;
- // Actual size in pixels when scrolling is taken into account
- virtual void GetVirtualSize(int *x, int *y) const;
-
// Set the scale factor, used in PrepareDC
void SetScale(double xs, double ys) { m_scaleX = xs; m_scaleY = ys; }
double GetScaleX() const { return m_scaleX; }
@@ -230,3 +230,5 @@ class WXDLLEXPORT wxScrollHelper
#endif
// _WX_SCROLWIN_H_BASE_
+
+// vi:sts=4:sw=4:et
View
@@ -2,7 +2,7 @@
// Name: sizer.h
// Purpose: provide wxSizer class for layouting
// Author: Robert Roebling and Robin Dunn
-// Modified by:
+// Modified by: Ron Lee
// Created:
// RCS-ID: $Id$
// Copyright: (c) Robin Dunn, Dirk Holtwick and Robert Roebling
@@ -185,7 +185,9 @@ class WXDLLEXPORT wxSizer: public wxObject, public wxClientDataContainer
virtual void Layout();
void Fit( wxWindow *window );
+ void FitInside( wxWindow *window );
void SetSizeHints( wxWindow *window );
+ void SetVirtualSizeHints( wxWindow *window );
wxList& GetChildren()
{ return m_children; }
@@ -200,7 +202,10 @@ class WXDLLEXPORT wxSizer: public wxObject, public wxClientDataContainer
wxSize GetMaxWindowSize( wxWindow *window );
wxSize GetMinWindowSize( wxWindow *window );
+ wxSize GetMaxClientSize( wxWindow *window );
+ wxSize GetMinClientSize( wxWindow *window );
wxSize FitSize( wxWindow *window );
+ wxSize VirtualFitSize( wxWindow *window );
virtual void DoSetMinSize( int width, int height );
virtual bool DoSetItemMinSize( wxWindow *window, int width, int height );
Oops, something went wrong.

0 comments on commit 0a4013f

Please sign in to comment.