]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix bugs related to two phase creation of wxRibbon classes.
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 7 May 2010 23:38:21 +0000 (23:38 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 7 May 2010 23:38:21 +0000 (23:38 +0000)
Add missing wxRibbonControl::Create() method. Ensure that member variables are
always initialized by the ctor. Check that we're fully initialized in EVT_SIZE
handler.

Closes #12018.

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

include/wx/ribbon/control.h
src/ribbon/buttonbar.cpp
src/ribbon/control.cpp
src/ribbon/page.cpp
src/ribbon/panel.cpp

index e1066a615c4caebe3c36d9d667197248898b80e0..7edb02d2f2729ad348999e81a36cebcab05c0ba2 100644 (file)
@@ -24,13 +24,24 @@ class wxRibbonArtProvider;
 class WXDLLIMPEXP_RIBBON wxRibbonControl : public wxControl
 {
 public:
-    wxRibbonControl() { m_art = NULL; }
+    wxRibbonControl() { Init(); }
 
     wxRibbonControl(wxWindow *parent, wxWindowID id,
                     const wxPoint& pos = wxDefaultPosition,
                     const wxSize& size = wxDefaultSize, long style = 0,
                     const wxValidator& validator = wxDefaultValidator,
-                    const wxString& name = wxControlNameStr);
+                    const wxString& name = wxControlNameStr)
+    {
+        Init();
+
+        Create(parent, id, pos, size, style, validator, name);
+    }
+
+    bool Create(wxWindow *parent, wxWindowID id,
+            const wxPoint& pos = wxDefaultPosition,
+            const wxSize& size = wxDefaultSize, long style = 0,
+            const wxValidator& validator = wxDefaultValidator,
+            const wxString& name = wxControlNameStr);
 
     virtual void SetArtProvider(wxRibbonArtProvider* art);
     wxRibbonArtProvider* GetArtProvider() const {return m_art;}
@@ -52,6 +63,9 @@ protected:
     virtual wxSize DoGetNextLargerSize(wxOrientation direction,
                                        wxSize relative_to) const;
 
+private:
+    void Init() { m_art = NULL; }
+
 #ifndef SWIG
     DECLARE_CLASS(wxRibbonControl)
 #endif
index 3262c3b257d5ab157b2e74161764db6fc9afe5ad..ce05643b1220f12cf09407f9ca19b0f36a5060b0 100644 (file)
@@ -178,6 +178,7 @@ public:
 wxRibbonButtonBar::wxRibbonButtonBar()
 {
     m_layouts_valid = false;
+    CommonInit (0);
 }
 
 wxRibbonButtonBar::wxRibbonButtonBar(wxWindow* parent,
index beb97ab70a856cdb725d58cef6a8c0b74ff98e94..d80449445e475324f2a7f75f83998cbf3b9bfa77 100644 (file)
 
 IMPLEMENT_CLASS(wxRibbonControl, wxControl)
 
-wxRibbonControl::wxRibbonControl(wxWindow *parent, wxWindowID id,
+bool wxRibbonControl::Create(wxWindow *parent, wxWindowID id,
                     const wxPoint& pos,
                     const wxSize& size, long style,
                     const wxValidator& validator,
                     const wxString& name)
-    : wxControl(parent, id, pos, size, style, validator, name)
 {
-    m_art = NULL;
+    if ( !wxControl::Create(parent, id, pos, size, style, validator, name) )
+        return false;
 
     wxRibbonControl *ribbon_parent = wxDynamicCast(parent, wxRibbonControl);
     if(ribbon_parent)
     {
         m_art = ribbon_parent->GetArtProvider();
     }
+
+    return true;
 }
 
 void wxRibbonControl::SetArtProvider(wxRibbonArtProvider* art)
index fed553be373e03b6639ecc8b085d558c1dcbc5e5..3448462420b4bfe709af4b5a3c81e97e2f127818 100644 (file)
@@ -415,9 +415,12 @@ void wxRibbonPage::OnSize(wxSizeEvent& evt)
 {
     wxSize new_size = evt.GetSize();
 
-    wxMemoryDC temp_dc;
-    wxRect invalid_rect = m_art->GetPageBackgroundRedrawArea(temp_dc, this, m_old_size, new_size);
-    Refresh(true, &invalid_rect);
+    if (m_art)
+    {
+        wxMemoryDC temp_dc;
+        wxRect invalid_rect = m_art->GetPageBackgroundRedrawArea(temp_dc, this, m_old_size, new_size);
+        Refresh(true, &invalid_rect);
+    }
 
     m_old_size = new_size;
 
index 481b9a0597e78ba5c0b1e29fc0987f52f5c5648f..bb6257dfcf27cb7d48be03f6f9a04c176d642a02 100644 (file)
@@ -43,7 +43,7 @@ BEGIN_EVENT_TABLE(wxRibbonPanel, wxRibbonControl)
     EVT_SIZE(wxRibbonPanel::OnSize)
 END_EVENT_TABLE()
 
-wxRibbonPanel::wxRibbonPanel()
+wxRibbonPanel::wxRibbonPanel() : m_expanded_dummy(NULL), m_expanded_panel(NULL)
 {
 }