]> git.saurik.com Git - wxWidgets.git/commitdiff
Add possibility to hide panels in wxRibbon.
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 6 Jan 2011 22:02:07 +0000 (22:02 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 6 Jan 2011 22:02:07 +0000 (22:02 +0000)
Add wxRibbonBar::{Show,Hide}Panels() and ArePanelsShown() accessor.

Also add a toggle button to the sample to test the new functionality
(unfortunately it couldn't be done by a control in the ribbon itself as there
would be no way to show the panels back then).

Closes #12707.

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

docs/changes.txt
include/wx/ribbon/bar.h
interface/wx/ribbon/bar.h
samples/ribbon/ribbondemo.cpp
src/ribbon/bar.cpp

index 74d76dcd1e1f95488760b98909f42d291c0ba56c..bfb639063235c4459a6dd48b969390d4a4dacda1 100644 (file)
@@ -437,6 +437,7 @@ All (GUI):
 - Added possibility to disable individual wxDataViewCtrl items (Neno Ganchev).
 - wxHTML: render in RTL order inside RTL window (Richard Bullington-McGuire).
 - wxRibbon: added EVT_RIBBONGALLERY_CLICKED event (John Roberts).
 - Added possibility to disable individual wxDataViewCtrl items (Neno Ganchev).
 - wxHTML: render in RTL order inside RTL window (Richard Bullington-McGuire).
 - wxRibbon: added EVT_RIBBONGALLERY_CLICKED event (John Roberts).
+- wxRibbon: allow hiding the panels and showing tabs only (snowleopard).
 - Add support for CP-866 encoding to wxEncodingConverter (madnut).
 - Consistency fixes for keyboard events across all major ports.
 - Added EVT_RIBBONBAR_TAB_LEFT_DCLICK event (snowleopard).
 - Add support for CP-866 encoding to wxEncodingConverter (madnut).
 - Consistency fixes for keyboard events across all major ports.
 - Added EVT_RIBBONBAR_TAB_LEFT_DCLICK event (snowleopard).
index 08cf7c20e2f98154d498d2a7d071daef4fed82be..4b26f6e42849c42fe2a3918df895b14da611336b 100644 (file)
@@ -115,6 +115,10 @@ public:
     wxRibbonPage* GetPage(int n);
     bool DismissExpandedPanel();
 
     wxRibbonPage* GetPage(int n);
     bool DismissExpandedPanel();
 
+    void ShowPanels(bool show = true);
+    void HidePanels() { ShowPanels(false); }
+    bool ArePanelsShown() const { return m_arePanelsShown; }
+
     virtual bool HasMultiplePages() const { return true; }
 
     void SetWindowStyleFlag(long style);
     virtual bool HasMultiplePages() const { return true; }
 
     void SetWindowStyleFlag(long style);
@@ -166,6 +170,7 @@ protected:
     int m_tab_scroll_left_button_state;
     int m_tab_scroll_right_button_state;
     bool m_tab_scroll_buttons_shown;
     int m_tab_scroll_left_button_state;
     int m_tab_scroll_right_button_state;
     bool m_tab_scroll_buttons_shown;
+    bool m_arePanelsShown;
 
 #ifndef SWIG
     DECLARE_CLASS(wxRibbonBar)
 
 #ifndef SWIG
     DECLARE_CLASS(wxRibbonBar)
index e7ef600e7c0b64c40c74380afe49eac1e9badf0c..4b520cc5b9b70a429ea0d4380b84de8d37dd709a 100644 (file)
@@ -213,6 +213,35 @@ public:
         for the currently active page, or @false if there is no active page.
     */
     bool DismissExpandedPanel();
         for the currently active page, or @false if there is no active page.
     */
     bool DismissExpandedPanel();
+
+    /**
+        Shows or hides the panel area of the ribbon bar.
+
+        If the panel area is hidden, then only the tab of the ribbon bar will
+        be shown. This is useful for giving the user more screen space to work
+        with when he/she doesn't need to see the ribbon's options.
+
+        @since 2.9.2
+    */
+    void ShowPanels(bool show = true);
+
+    /**
+        Hides the panel area of the ribbon bar.
+
+        This method simply calls ShowPanels() with @false argument.
+
+        @since 2.9.2
+    */
+    void HidePanels();
+
+    /**
+        Indicates whether the panel area of the ribbon bar is shown.
+
+        @see ShowPanels()
+
+        @since 2.9.2
+    */
+    bool ArePanelsShown() const;
     
     /**
         Perform initial layout and size calculations of the bar and its
     
     /**
         Perform initial layout and size calculations of the bar and its
index 976544ee40d133197cec5a1560377d90e3f80e5e..95b7a9dd2b45d7e21b218906f6b37335c8241889 100644 (file)
@@ -28,6 +28,7 @@
 #include "wx/colordlg.h"
 #include "wx/artprov.h"
 #include "wx/combobox.h"
 #include "wx/colordlg.h"
 #include "wx/artprov.h"
 #include "wx/combobox.h"
+#include "wx/tglbtn.h"
 #include "wx/wrapsizer.h"
 
 // -- application --
 #include "wx/wrapsizer.h"
 
 // -- application --
@@ -71,6 +72,7 @@ public:
         ID_POSITION_LEFT,
         ID_POSITION_LEFT_LABELS,
         ID_POSITION_LEFT_BOTH,
         ID_POSITION_LEFT,
         ID_POSITION_LEFT_LABELS,
         ID_POSITION_LEFT_BOTH,
+        ID_TOGGLE_PANELS
     };
 
     void OnCircleButton(wxRibbonButtonBarEvent& evt);
     };
 
     void OnCircleButton(wxRibbonButtonBarEvent& evt);
@@ -106,6 +108,8 @@ public:
     void OnPositionLeftBoth(wxCommandEvent& evt);
     void OnPositionLeftDropdown(wxRibbonToolBarEvent& evt);
 
     void OnPositionLeftBoth(wxCommandEvent& evt);
     void OnPositionLeftDropdown(wxRibbonToolBarEvent& evt);
 
+    void OnTogglePanels(wxCommandEvent& evt);
+
 protected:
     wxRibbonGallery* PopulateColoursPanel(wxWindow* panel, wxColour def,
         int gallery_id);
 protected:
     wxRibbonGallery* PopulateColoursPanel(wxWindow* panel, wxColour def,
         int gallery_id);
@@ -122,6 +126,8 @@ protected:
     wxRibbonGallery* m_primary_gallery;
     wxRibbonGallery* m_secondary_gallery;
     wxTextCtrl* m_logwindow;
     wxRibbonGallery* m_primary_gallery;
     wxRibbonGallery* m_secondary_gallery;
     wxTextCtrl* m_logwindow;
+    wxToggleButton* m_togglePanels;
+
     wxColourData m_colour_data;
     wxColour m_default_primary;
     wxColour m_default_secondary;
     wxColourData m_colour_data;
     wxColour m_default_primary;
     wxColour m_default_secondary;
@@ -179,6 +185,7 @@ EVT_MENU(ID_POSITION_LEFT_BOTH, MyFrame::OnPositionLeftBoth)
 EVT_MENU(ID_POSITION_TOP, MyFrame::OnPositionTopLabels)
 EVT_MENU(ID_POSITION_TOP_ICONS, MyFrame::OnPositionTopIcons)
 EVT_MENU(ID_POSITION_TOP_BOTH, MyFrame::OnPositionTopBoth)
 EVT_MENU(ID_POSITION_TOP, MyFrame::OnPositionTopLabels)
 EVT_MENU(ID_POSITION_TOP_ICONS, MyFrame::OnPositionTopIcons)
 EVT_MENU(ID_POSITION_TOP_BOTH, MyFrame::OnPositionTopBoth)
+EVT_TOGGLEBUTTON(ID_TOGGLE_PANELS, MyFrame::OnTogglePanels)
 END_EVENT_TABLE()
 
 #include "align_center.xpm"
 END_EVENT_TABLE()
 
 #include "align_center.xpm"
@@ -317,10 +324,14 @@ MyFrame::MyFrame()
         wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY |
         wxTE_LEFT | wxTE_BESTWRAP | wxBORDER_NONE);
 
         wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY |
         wxTE_LEFT | wxTE_BESTWRAP | wxBORDER_NONE);
 
+    m_togglePanels = new wxToggleButton(this, ID_TOGGLE_PANELS, "&Toggle panels");
+    m_togglePanels->SetValue(true);
+
     wxSizer *s = new wxBoxSizer(wxVERTICAL);
 
     s->Add(m_ribbon, 0, wxEXPAND);
     s->Add(m_logwindow, 1, wxEXPAND);
     wxSizer *s = new wxBoxSizer(wxVERTICAL);
 
     s->Add(m_ribbon, 0, wxEXPAND);
     s->Add(m_logwindow, 1, wxEXPAND);
+    s->Add(m_togglePanels, wxSizerFlags().Border());
 
     SetSizer(s);
 }
 
     SetSizer(s);
 }
@@ -665,6 +676,11 @@ void MyFrame::OnPositionLeftDropdown(wxRibbonToolBarEvent& evt)
     evt.PopupMenu(&menu);
 }
 
     evt.PopupMenu(&menu);
 }
 
+void MyFrame::OnTogglePanels(wxCommandEvent& WXUNUSED(evt))
+{
+    m_ribbon->ShowPanels(m_togglePanels->GetValue());
+}
+
 void MyFrame::AddText(wxString msg)
 {
     m_logwindow->AppendText(msg);
 void MyFrame::AddText(wxString msg)
 {
     m_logwindow->AppendText(msg);
index 9e5c6435dcd9511e2aacc91c5e89a37b6b10d192..e922cecc0e850f11083814fe4766de851937db7d 100644 (file)
@@ -109,6 +109,14 @@ bool wxRibbonBar::DismissExpandedPanel()
     return m_pages.Item(m_current_page).page->DismissExpandedPanel();
 }
 
     return m_pages.Item(m_current_page).page->DismissExpandedPanel();
 }
 
+void wxRibbonBar::ShowPanels(const bool show)
+{
+    m_arePanelsShown = show;
+    SetMinSize(wxSize(GetSize().GetWidth(), DoGetBestSize().GetHeight()));
+    Realise();
+    GetParent()->Layout();
+}
+
 void wxRibbonBar::SetWindowStyleFlag(long style)
 {
     m_flags = style;
 void wxRibbonBar::SetWindowStyleFlag(long style)
 {
     m_flags = style;
@@ -538,6 +546,7 @@ wxRibbonBar::wxRibbonBar()
     m_tab_scroll_left_button_state = wxRIBBON_SCROLL_BTN_NORMAL;
     m_tab_scroll_right_button_state = wxRIBBON_SCROLL_BTN_NORMAL;
     m_tab_scroll_buttons_shown = false;
     m_tab_scroll_left_button_state = wxRIBBON_SCROLL_BTN_NORMAL;
     m_tab_scroll_right_button_state = wxRIBBON_SCROLL_BTN_NORMAL;
     m_tab_scroll_buttons_shown = false;
+    m_arePanelsShown = true;
 }
 
 wxRibbonBar::wxRibbonBar(wxWindow* parent,
 }
 
 wxRibbonBar::wxRibbonBar(wxWindow* parent,
@@ -585,6 +594,7 @@ void wxRibbonBar::CommonInit(long style)
     m_tab_scroll_left_button_state = wxRIBBON_SCROLL_BTN_NORMAL;
     m_tab_scroll_right_button_state = wxRIBBON_SCROLL_BTN_NORMAL;
     m_tab_scroll_buttons_shown = false;
     m_tab_scroll_left_button_state = wxRIBBON_SCROLL_BTN_NORMAL;
     m_tab_scroll_right_button_state = wxRIBBON_SCROLL_BTN_NORMAL;
     m_tab_scroll_buttons_shown = false;
+    m_arePanelsShown = true;
 
     if(m_art == NULL)
     {
 
     if(m_art == NULL)
     {
@@ -946,7 +956,7 @@ void wxRibbonBar::RecalculateMinSize()
     }
 
     m_minWidth = min_size.GetWidth();
     }
 
     m_minWidth = min_size.GetWidth();
-    m_minHeight = min_size.GetHeight();
+    m_minHeight = m_arePanelsShown ? min_size.GetHeight() : m_tab_height;
 }
 
 wxSize wxRibbonBar::DoGetBestSize() const
 }
 
 wxSize wxRibbonBar::DoGetBestSize() const
@@ -964,6 +974,10 @@ wxSize wxRibbonBar::DoGetBestSize() const
     {
         best.IncBy(0, m_tab_height);
     }
     {
         best.IncBy(0, m_tab_height);
     }
+    if(!m_arePanelsShown)
+    {
+        best.SetHeight(m_tab_height);
+    }
     return best;
 }
 
     return best;
 }