- Added support for drop down toolbar buttons (Tim Kosse).
- Added support for labels for toolbar controls (Vince Harron).
- Added wxMessageDialog::SetMessage() and SetExtendedMessage().
+- Added wxWindow::AlwaysShowScrollbars() (Julian Scheid)
- Added wxMouseEvent::GetClickCount() (Julian Scheid)
- Added wxBG_STYLE_TRANSPARENT background style (Julian Scheid)
- Added XRCSIZERITEM() macro for obtaining sizers from XRC (Brian Vanderburg II)
\docparam{child}{Child window to add.}
+\membersection{wxWindow::AlwaysShowScrollbars}\label{wxwindowalwaysshowscrollbars}
+
+\func{void}{AlwaysShowScrollbars}{\param{bool}{ hflag}, \param{bool}{ vflag}}
+
+Call this function to force one or both scrollbars to be always shown, even if
+the window is big enough to show its entire contents without scrolling.
+
+\newsince{2.9.0}
+
+\wxheading{Parameters}
+
+\docparam{hflag}{Whether the horizontal scroll bar should always be visible.}
+
+\docparam{vflag}{Whether the vertical scroll bar should always be visible.}
+
+\wxheading{Remarks}
+
+This function is currently only implemented under Mac/Carbon.
+
+
\membersection{wxWindow::CacheBestSize}\label{wxwindowcachebestsize}
\constfunc{void}{CacheBestSize}{\param{const wxSize\& }{size}}
Retained windows are only available on X platforms.
+\membersection{wxWindow::IsScrollbarAlwaysShown}\label{wxwindowisscrollbaralwaysshown}
+
+\func{bool}{IsScrollbarAlwaysShown}{\param{int}{ orient}}
+
+Return whether a scrollbar is always shown.
+
+\wxheading{Parameters}
+
+\docparam{orient}{Orientation to check, either {\tt wxHORIZONTAL} or {\tt wxVERTICAL}.}
+
+\wxheading{See also}
+
+\helpref{wxWindow::AlwaysShowScrollbars}{wxwindowalwaysshowscrollbars}
+
+
\membersection{wxWindow::IsShown}\label{wxwindowisshown}
\constfunc{virtual bool}{IsShown}{\void}
virtual void Freeze();
virtual void Thaw();
virtual bool IsFrozen() const;
-
+
virtual void Update() ;
virtual void ClearBackground();
virtual void DoEnable( bool enable );
virtual void OnEnabled( bool enabled );
virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
+
public:
virtual void SetScrollbar( int orient, int pos, int thumbVisible,
int range, bool refresh = true );
virtual int GetScrollRange( int orient ) const;
virtual void ScrollWindow( int dx, int dy,
const wxRect* rect = (wxRect *) NULL );
+ virtual void AlwaysShowScrollbars(bool horz = true, bool vert = true);
+ virtual bool IsScrollbarAlwaysShown(int orient) const
+ {
+ return orient == wxHORIZONTAL ? m_hScrollBarAlwaysShown
+ : m_vScrollBarAlwaysShown;
+ }
+
virtual bool Reparent( wxWindowBase *newParent );
#if wxUSE_DRAG_AND_DROP
virtual bool SetTransparent(wxByte alpha);
virtual bool CanSetTransparent();
virtual wxByte GetTransparent() const ;
-
+
// event handlers
// --------------
void OnSetFocus( wxFocusEvent& event );
wxScrollBar* m_hScrollBar ;
wxScrollBar* m_vScrollBar ;
+ bool m_hScrollBarAlwaysShown;
+ bool m_vScrollBarAlwaysShown;
wxString m_label ;
// set to true if we do a sharp clip at the content area of this window
// common part of all ctors
void Init();
+ // show/hide scrollbars as needed, common part of SetScrollbar() and
+ // AlwaysShowScrollbars()
+ void DoUpdateScrollbarVisibility();
+
+
WXEVENTHANDLERREF m_macControlEventHandler ;
DECLARE_NO_COPY_CLASS(wxWindowMac)
int range, int pageSize,
bool refresh = true) = 0;
+ // implementation-only
+ bool IsNeeded() const { return GetRange() > GetThumbSize(); }
+
private:
DECLARE_NO_COPY_CLASS(wxScrollBarBase)
};
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
// ----------------------
// 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();
m_hScrollBar = NULL ;
m_vScrollBar = NULL ;
+ m_hScrollBarAlwaysShown = false;
+ m_vScrollBarAlwaysShown = false;
+
m_macBackgroundBrush = wxNullBrush ;
m_macIsUserPane = true;
}
}
+void
+wxWindowMac::AlwaysShowScrollbars(bool hflag, bool vflag)
+{
+ bool needVisibilityUpdate = false;
+
+ if ( m_hScrollBarAlwaysShown != hflag )
+ {
+ m_hScrollBarAlwaysShown = hflag;
+ needVisibilityUpdate = true;
+ }
+
+ if ( m_vScrollBarAlwaysShown != vflag )
+ {
+ m_vScrollBarAlwaysShown = vflag;
+ needVisibilityUpdate = true;
+ }
+
+ if ( needVisibilityUpdate )
+ DoUpdateScrollbarVisibility();
+}
//
// we draw borders and grow boxes, are already set up and clipped in the current port / cgContextRef
// our own window origin is at leftOrigin/rightOrigin
wxWindowBase::RemoveChild( child ) ;
}
-// New function that will replace some of the above.
-void wxWindowMac::SetScrollbar(int orient, int pos, int thumbVisible,
- int range, bool refresh)
+void wxWindowMac::DoUpdateScrollbarVisibility()
{
- bool showScroller;
bool triggerSizeEvent = false;
- if ( orient == wxHORIZONTAL )
+ if ( m_hScrollBar )
{
- if ( m_hScrollBar )
- {
- showScroller = ((range != 0) && (range > thumbVisible));
- if ( m_hScrollBar->IsShown() != showScroller )
- {
- m_hScrollBar->Show( showScroller );
- triggerSizeEvent = true;
- }
+ bool showHScrollBar = m_hScrollBarAlwaysShown || m_hScrollBar->IsNeeded();
- m_hScrollBar->SetScrollbar( pos , thumbVisible , range , thumbVisible , refresh ) ;
+ if ( m_hScrollBar->IsShown() != showHScrollBar )
+ {
+ m_hScrollBar->Show( showHScrollBar );
+ triggerSizeEvent = true;
}
}
- else
+
+ if ( m_vScrollBar)
{
- if ( m_vScrollBar )
- {
- showScroller = ((range != 0) && (range > thumbVisible));
- if ( m_vScrollBar->IsShown() != showScroller )
- {
- m_vScrollBar->Show( showScroller ) ;
- triggerSizeEvent = true;
- }
+ bool showVScrollBar = m_vScrollBarAlwaysShown || m_vScrollBar->IsNeeded();
- m_vScrollBar->SetScrollbar( pos , thumbVisible , range , thumbVisible , refresh ) ;
+ if ( m_vScrollBar->IsShown() != showVScrollBar )
+ {
+ m_vScrollBar->Show( showVScrollBar ) ;
+ triggerSizeEvent = true;
}
}
}
}
+// New function that will replace some of the above.
+void wxWindowMac::SetScrollbar(int orient, int pos, int thumb,
+ int range, bool refresh)
+{
+ if ( orient == wxHORIZONTAL && m_hScrollBar )
+ m_hScrollBar->SetScrollbar(pos, thumb, range, thumb, refresh);
+ else if ( orient == wxVERTICAL && m_vScrollBar )
+ m_vScrollBar->SetScrollbar(pos, thumb, range, thumb, refresh);
+
+ DoUpdateScrollbarVisibility();
+}
+
// Does a physical scroll
void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
{