From 8d3d5f067a7be01be3e8c81355883e2b2a23c0a5 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Fri, 9 Mar 2012 15:26:37 +0000 Subject: [PATCH] Added wxRIBBON_PANEL_STRETCH to allow a single panel to stretch to fill the parent page. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70852 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/ribbon/panel.h | 9 +++--- interface/wx/ribbon/panel.h | 58 +++++++++++++++++++------------------ src/ribbon/panel.cpp | 23 +++++++++------ 3 files changed, 49 insertions(+), 41 deletions(-) diff --git a/include/wx/ribbon/panel.h b/include/wx/ribbon/panel.h index 83add15ef3..8a48c836fb 100644 --- a/include/wx/ribbon/panel.h +++ b/include/wx/ribbon/panel.h @@ -20,11 +20,12 @@ enum wxRibbonPanelOption { - wxRIBBON_PANEL_NO_AUTO_MINIMISE = 1 << 0, - wxRIBBON_PANEL_EXT_BUTTON = 1 << 3, - wxRIBBON_PANEL_MINIMISE_BUTTON = 1 << 4, + wxRIBBON_PANEL_NO_AUTO_MINIMISE = 1 << 0, + wxRIBBON_PANEL_EXT_BUTTON = 1 << 3, + wxRIBBON_PANEL_MINIMISE_BUTTON = 1 << 4, + wxRIBBON_PANEL_STRETCH = 1 << 5, - wxRIBBON_PANEL_DEFAULT_STYLE = 0 + wxRIBBON_PANEL_DEFAULT_STYLE = 0 }; class WXDLLIMPEXP_RIBBON wxRibbonPanel : public wxRibbonControl diff --git a/interface/wx/ribbon/panel.h b/interface/wx/ribbon/panel.h index aa56900d81..fd455fe32a 100644 --- a/interface/wx/ribbon/panel.h +++ b/interface/wx/ribbon/panel.h @@ -12,18 +12,18 @@ Serves as a container for a group of (ribbon) controls. A wxRibbonPage will typically have panels for children, with the controls for that page placed on the panels. - + A panel adds a border and label to a group of controls, and can be minimised (either automatically to conserve space, or manually by the user). - Non ribbon controls can be placed on a panel using wxSizers to manage - layout. Panel size is governed by the sizer's minimum calculated size and - the parent wxRibbonPage's dimensions. For functional and aesthetic reasons + Non ribbon controls can be placed on a panel using wxSizers to manage + layout. Panel size is governed by the sizer's minimum calculated size and + the parent wxRibbonPage's dimensions. For functional and aesthetic reasons it is recommended that ribbon and non ribbon controls are not mixed in one panel. - + @sa wxRibbonPage - + @beginStyleTable @style{wxRIBBON_PANEL_DEFAULT_STYLE} Defined as no other flags set. @@ -43,6 +43,8 @@ typically combined with wxRIBBON_PANEL_NO_AUTO_MINIMISE to make a panel which the user always has manual control over when it minimises. + @style{wxRIBBON_PANEL_STRETCH} + Stretches a single panel to fit the parent page. @endStyleTable @library{wxribbon} @@ -52,7 +54,7 @@ class wxRibbonPanel : public wxRibbonControl { public: /** - Default constructor. + Default constructor. With this constructor, Create() should be called in order to create the ribbon panel. */ @@ -60,7 +62,7 @@ public: /** Constructs a ribbon panel. - + @param parent Pointer to a parent window, which is typically a wxRibbonPage, though it can be any window. @@ -89,7 +91,7 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxRIBBON_PANEL_DEFAULT_STYLE); - + /** Create a ribbon panel in two-step ribbon panel construction. Should only be called when the default constructor is used, and @@ -114,53 +116,53 @@ public: */ wxBitmap& GetMinimisedIcon(); const wxBitmap& GetMinimisedIcon() const; - + /** Query if the panel is currently minimised. */ bool IsMinimised() const; - + /** Query if the panel would be minimised at a given size. */ bool IsMinimised(wxSize at_size) const; - + /** Query is the mouse is currently hovered over the panel. @return @true if the cursor is within the bounds of the panel (i.e. hovered over the panel or one of its children), @false otherwise. */ bool IsHovered() const; - + /** Query if the panel can automatically minimise itself at small sizes. */ bool CanAutoMinimise() const; - + /** Show the panel externally expanded. - + When a panel is minimised, it can be shown full-size in a pop-out window, which is referred to as being (externally) expanded. Note that when a panel is expanded, there exist two panels - the original panel (which is referred to as the dummy panel) and the expanded panel. The original is termed a dummy as it sits in the ribbon bar doing nothing, while the expanded panel holds the panel children. - + @return @true if the panel was expanded, @false if it was not (possibly due to it not being minimised, or already being expanded). - + @see HideExpanded() @see GetExpandedPanel() */ bool ShowExpanded(); - + /** Hide the panel's external expansion. - + @return @true if the panel was un-expanded, @false if it was not (normally due to it not being expanded in the first place). - + @see HideExpanded() @see GetExpandedPanel() */ @@ -170,35 +172,35 @@ public: Set the art provider to be used. Normally called automatically by wxRibbonPage when the panel is created, or the art provider changed on the page. - + The new art provider will be propagated to the children of the panel. */ void SetArtProvider(wxRibbonArtProvider* art); - + /** Realize all children of the panel. */ bool Realize(); - + /** Get the dummy panel of an expanded panel. - + Note that this should be called on an expanded panel to get the dummy associated with it - it will return NULL when called on the dummy itself. - + @see ShowExpanded() @see GetExpandedPanel() */ wxRibbonPanel* GetExpandedDummy(); - + /** Get the expanded panel of a dummy panel. - + Note that this should be called on a dummy panel to get the expanded panel associated with it - it will return NULL when called on the expanded panel itself. - + @see ShowExpanded() @see GetExpandedDummy() */ diff --git a/src/ribbon/panel.cpp b/src/ribbon/panel.cpp index 06ad53dd89..a14bb7336b 100644 --- a/src/ribbon/panel.cpp +++ b/src/ribbon/panel.cpp @@ -238,7 +238,7 @@ void wxRibbonPanel::DoSetSize(int x, int y, int width, int height, int sizeFlags if(minimised != m_minimised) { m_minimised = minimised; - // Note that for sizers, this routine disallows the use of mixed shown + // Note that for sizers, this routine disallows the use of mixed shown // and hidden controls // TODO ? use some list of user set invisible children to restore status. for (wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); @@ -259,7 +259,7 @@ bool wxRibbonPanel::IsMinimised(wxSize at_size) const { if(GetSizer()) { - // we have no information on size change direction + // we have no information on size change direction // so check both wxSize size = GetMinNotMinimisedSize(); if(size.x > at_size.x || size.y > at_size.y) @@ -303,7 +303,12 @@ bool wxRibbonPanel::IsSizingContinuous() const { // A panel never sizes continuously, even if all of its children can, // as it would appear out of place along side non-continuous panels. - return false; + + // JS 2012-03-09: introducing wxRIBBON_PANEL_STRETCH to allow + // the panel to fill its parent page. For example we might have + // a list of styles in one of the pages, which should stretch to + // fill available space. + return (m_flags & wxRIBBON_PANEL_STRETCH) != 0; } wxSize wxRibbonPanel::DoGetNextSmallerSize(wxOrientation direction, @@ -348,7 +353,7 @@ wxSize wxRibbonPanel::DoGetNextSmallerSize(wxOrientation direction, wxRibbonControl* ribbon_child = wxDynamicCast(child, wxRibbonControl); if(ribbon_child != NULL) { - smaller = ribbon_child->GetNextSmallerSize(direction, child_relative); + smaller = ribbon_child->GetNextSmallerSize(direction, child_relative); minimise = (smaller == child_relative); } } @@ -445,7 +450,7 @@ wxSize wxRibbonPanel::DoGetNextLargerSize(wxOrientation direction, if(GetSizer()) { - // We could just let the sizer expand in flow direction but see comment + // We could just let the sizer expand in flow direction but see comment // in IsSizingContinuous() larger = GetPanelSizerBestSize(); // and adjust for page in non flow direction @@ -560,8 +565,8 @@ wxSize wxRibbonPanel::GetPanelSizerMinSize() const } // else use previously calculated m_smallest_unminimised_size wxClientDC dc((wxRibbonPanel*) this); - return m_art->GetPanelClientSize(dc, - this, + return m_art->GetPanelClientSize(dc, + this, m_smallest_unminimised_size, NULL); } @@ -766,10 +771,10 @@ bool wxRibbonPanel::ShowExpanded() } // Move sizer to new panel - if(GetSizer()) + if(GetSizer()) { wxSizer* sizer = GetSizer(); - SetSizer(NULL, false); + SetSizer(NULL, false); m_expanded_panel->SetSizer(sizer); } -- 2.47.2