]> git.saurik.com Git - wxWidgets.git/blobdiff - src/ribbon/buttonbar.cpp
calling explicit base class constructor from copy constructor
[wxWidgets.git] / src / ribbon / buttonbar.cpp
index b70f563f40f7b738e8bd5a4d95e1aeab1b3e5356..a1404abbb8d2450e98966d27ca66be7b46ebaa49 100644 (file)
     #pragma hdrstop
 #endif
 
-#include "wx/ribbon/buttonbar.h"
-
 #if wxUSE_RIBBON
 
+#include "wx/ribbon/buttonbar.h"
 #include "wx/ribbon/art.h"
 #include "wx/dcbuffer.h"
 
@@ -124,8 +123,8 @@ public:
 };
 
 WX_DECLARE_OBJARRAY(wxRibbonButtonBarButtonInstance, wxArrayRibbonButtonBarButtonInstance);
-#include <wx/arrimpl.cpp>
-WX_DEFINE_OBJARRAY(wxArrayRibbonButtonBarButtonInstance);
+#include "wx/arrimpl.cpp"
+WX_DEFINE_OBJARRAY(wxArrayRibbonButtonBarButtonInstance)
 
 class wxRibbonButtonBarLayout
 {
@@ -179,6 +178,7 @@ public:
 wxRibbonButtonBar::wxRibbonButtonBar()
 {
     m_layouts_valid = false;
+    CommonInit (0);
 }
 
 wxRibbonButtonBar::wxRibbonButtonBar(wxWindow* parent,
@@ -249,6 +249,16 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddDropdownButton(
         wxRIBBON_BUTTON_DROPDOWN);
 }
 
+wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddToggleButton(
+                int button_id,
+                const wxString& label,
+                const wxBitmap& bitmap,
+                const wxString& help_string)
+{
+    return AddButton(button_id, label, bitmap, help_string,
+        wxRIBBON_BUTTON_TOGGLE);
+}
+
 wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddHybridButton(
                 int button_id,
                 const wxString& label,
@@ -258,7 +268,7 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddHybridButton(
     return AddButton(button_id, label, bitmap, help_string,
         wxRIBBON_BUTTON_HYBRID);
 }
-    
+
 wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddButton(
                 int button_id,
                 const wxString& label,
@@ -333,7 +343,7 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddButton(
     base->client_data = client_data;
     base->state = 0;
 
-    wxMemoryDC temp_dc;
+    wxClientDC temp_dc(this);
     FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_SMALL, temp_dc);
     FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM, temp_dc);
     FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_LARGE, temp_dc);
@@ -445,6 +455,36 @@ void wxRibbonButtonBar::EnableButton(int button_id, bool enable)
     }
 }
 
+void wxRibbonButtonBar::ToggleButton(int button_id, bool checked)
+{
+    size_t count = m_buttons.GetCount();
+    size_t i;
+    for(i = 0; i < count; ++i)
+    {
+        wxRibbonButtonBarButtonBase* button = m_buttons.Item(i);
+        if(button->id == button_id)
+        {
+            if(checked)
+            {
+                if((button->state & wxRIBBON_BUTTONBAR_BUTTON_TOGGLED) == 0)
+                {
+                    button->state |= wxRIBBON_BUTTONBAR_BUTTON_TOGGLED;
+                    Refresh();
+                }
+            }
+            else
+            {
+                if(button->state & wxRIBBON_BUTTONBAR_BUTTON_TOGGLED)
+                {
+                    button->state &= ~wxRIBBON_BUTTONBAR_BUTTON_TOGGLED;
+                    Refresh();
+                }
+            }
+            return;
+        }
+    }
+}
+
 void wxRibbonButtonBar::SetArtProvider(wxRibbonArtProvider* art)
 {
     if(art == m_art)
@@ -454,7 +494,7 @@ void wxRibbonButtonBar::SetArtProvider(wxRibbonArtProvider* art)
 
     wxRibbonControl::SetArtProvider(art);
 
-    wxMemoryDC temp_dc;
+    wxClientDC temp_dc(this);
     size_t btn_count = m_buttons.Count();
     size_t btn_i;
     for(btn_i = 0; btn_i < btn_count; ++btn_i)
@@ -585,7 +625,7 @@ void wxRibbonButtonBar::OnPaint(wxPaintEvent& WXUNUSED(evt))
             bitmap_small = &base->bitmap_small_disabled;
         }
         wxRect rect(button.position + m_layout_offset, base->sizes[button.size].size);
-        
+
         m_art->DrawButtonBarButton(dc, this, rect, base->kind,
             base->state | button.size, base->label, *bitmap, *bitmap_small);
     }
@@ -627,7 +667,7 @@ void wxRibbonButtonBar::CommonInit(long WXUNUSED(style))
     m_lock_active_state = false;
 
     SetBackgroundStyle(wxBG_STYLE_CUSTOM);
-};
+}
 
 wxSize wxRibbonButtonBar::GetMinSize() const
 {
@@ -787,7 +827,7 @@ bool wxRibbonButtonBar::TryCollapseLayout(wxRibbonButtonBarLayout* original,
         layout->overall_size.GetHeight() > original->overall_size.GetHeight())
     {
         delete layout;
-        wxASSERT_MSG(false, wxT("Layout collapse resulted in increased size"));
+        wxFAIL_MSG("Layout collapse resulted in increased size");
         return false;
     }
 
@@ -936,6 +976,13 @@ void wxRibbonButtonBar::OnMouseUp(wxMouseEvent& evt)
                 else
                     break;
                 wxRibbonButtonBarEvent notification(event_type, id);
+                if(m_active_button->base->kind == wxRIBBON_BUTTON_TOGGLE)
+                {
+                    m_active_button->base->state ^=
+                        wxRIBBON_BUTTONBAR_BUTTON_TOGGLED;
+                    notification.SetInt(m_active_button->base->state &
+                        wxRIBBON_BUTTONBAR_BUTTON_TOGGLED);
+                }
                 notification.SetEventObject(this);
                 notification.SetBar(this);
                 m_lock_active_state = true;