]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/datavgen.cpp
Don't limit window size to (0, 0) in wxSizer if getting display size failed.
[wxWidgets.git] / src / generic / datavgen.cpp
index e0ea95454823b8ff6c3f1005eb98edb2eeb6028a..46ea2141e1bbaae70e8e8796aadf231958aaf5cc 100644 (file)
@@ -83,6 +83,30 @@ static wxDataViewModel* g_model;
 static int g_column = -2;
 static bool g_asending = true;
 
+// ----------------------------------------------------------------------------
+// helper functions
+// ----------------------------------------------------------------------------
+
+namespace
+{
+
+// Return the expander column or, if it is not set, the first column and also
+// set it as the expander one for the future.
+wxDataViewColumn* GetExpanderColumnOrFirstOne(wxDataViewCtrl* dataview)
+{
+    wxDataViewColumn* expander = dataview->GetExpanderColumn();
+    if (!expander)
+    {
+        // TODO-RTL: last column for RTL support
+        expander = dataview->GetColumnAt( 0 );
+        dataview->SetExpanderColumn(expander);
+    }
+
+    return expander;
+}
+
+} // anonymous namespace
+
 //-----------------------------------------------------------------------------
 // wxDataViewColumn
 //-----------------------------------------------------------------------------
@@ -169,7 +193,7 @@ private:
 
         // for events created by wxDataViewHeaderWindow the
         // row / value fields are not valid
-        return owner->GetEventHandler()->ProcessEvent(event);
+        return owner->ProcessWindowEvent(event);
     }
 
     void OnClick(wxHeaderCtrlEvent& event)
@@ -1627,14 +1651,8 @@ wxBitmap wxDataViewMainWindow::CreateItemBitmap( unsigned int row, int &indent )
 
     wxDataViewModel *model = m_owner->GetModel();
 
-    wxDataViewColumn *expander = GetOwner()->GetExpanderColumn();
-    if (!expander)
-    {
-        // TODO-RTL: last column for RTL support
-        expander = GetOwner()->GetColumnAt( 0 );
-        GetOwner()->SetExpanderColumn(expander);
-    }
-
+    wxDataViewColumn * const
+        expander = GetExpanderColumnOrFirstOne(GetOwner());
 
     int x = 0;
     for (col = 0; col < cols; col++)
@@ -1818,13 +1836,8 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
     }
 #endif // wxUSE_DRAG_AND_DROP
 
-    wxDataViewColumn *expander = GetOwner()->GetExpanderColumn();
-    if (!expander)
-    {
-        // TODO-RTL: last column for RTL support
-        expander = GetOwner()->GetColumnAt( 0 );
-        GetOwner()->SetExpanderColumn(expander);
-    }
+    wxDataViewColumn * const
+        expander = GetExpanderColumnOrFirstOne(GetOwner());
 
     // redraw all cells for all rows which must be repainted and all columns
     wxRect cell_rect;
@@ -1854,7 +1867,7 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
 
                 // Skip all columns of "container" rows except the expander
                 // column itself unless HasContainerColumns() overrides this.
-                if ( col != GetOwner()->GetExpanderColumn() &&
+                if ( col != expander &&
                         model->IsContainer(dataitem) &&
                             !model->HasContainerColumns(dataitem) )
                     continue;
@@ -2196,7 +2209,7 @@ bool wxDataViewMainWindow::ItemChanged(const wxDataViewItem & item)
     le.SetEventObject(parent);
     le.SetModel(GetModel());
     le.SetItem(item);
-    parent->GetEventHandler()->ProcessEvent(le);
+    parent->ProcessWindowEvent(le);
 
     return true;
 }
@@ -2239,7 +2252,7 @@ bool wxDataViewMainWindow::ValueChanged( const wxDataViewItem & item, unsigned i
     le.SetItem(item);
     le.SetColumn(view_column);
     le.SetDataViewColumn(GetOwner()->GetColumn(view_column));
-    parent->GetEventHandler()->ProcessEvent(le);
+    parent->ProcessWindowEvent(le);
 
     return true;
 }
@@ -2508,7 +2521,7 @@ void wxDataViewMainWindow::SendSelectionChangedEvent( const wxDataViewItem& item
     le.SetModel(GetModel());
     le.SetItem( item );
 
-    parent->GetEventHandler()->ProcessEvent(le);
+    parent->ProcessWindowEvent(le);
 }
 
 void wxDataViewMainWindow::RefreshRow( unsigned int row )
@@ -3086,7 +3099,8 @@ wxRect wxDataViewMainWindow::GetItemRect( const wxDataViewItem & item,
     // to get the correct x position where the actual text is
     int indent = 0;
     int row = GetRowByItem(item);
-    if (!IsList() && (column == 0 || GetOwner()->GetExpanderColumn() == column) )
+    if (!IsList() &&
+            (column == 0 || GetExpanderColumnOrFirstOne(GetOwner()) == column) )
     {
         wxDataViewTreeNode* node = GetTreeNodeByRow(row);
         indent = GetOwner()->GetIndent() * node->GetIndentLevel();
@@ -3288,7 +3302,7 @@ void wxDataViewMainWindow::OnChar( wxKeyEvent &event )
                 le.SetEventObject(parent);
                 le.SetModel(GetModel());
 
-                if ( parent->GetEventHandler()->ProcessEvent(le) )
+                if ( parent->ProcessWindowEvent(le) )
                     break;
                 // else: fall through to WXK_SPACE handling
             }
@@ -3379,7 +3393,7 @@ void wxDataViewMainWindow::OnChar( wxKeyEvent &event )
 
         case WXK_F2:
             {
-                if(m_selection.size() == 1)
+                if( !m_selection.empty() )
                 {
                     // TODO: we need to revise that when we have a concept for a 'current column'
                     GetOwner()->StartEditor(GetItemByRow(m_selection[0]), 0);
@@ -3541,12 +3555,15 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
         return;
     }
 
+    wxDataViewColumn* const
+        expander = GetExpanderColumnOrFirstOne(GetOwner());
+
     // Test whether the mouse is hovering over the expander (a.k.a tree "+"
     // button) and also determine the offset of the real cell start, skipping
     // the indentation and the expander itself.
     bool hoverOverExpander = false;
     int itemOffset = 0;
-    if ((!IsList()) && (GetOwner()->GetExpanderColumn() == col))
+    if ((!IsList()) && (expander == col))
     {
         wxDataViewTreeNode * node = GetTreeNodeByRow(current);
 
@@ -3656,7 +3673,7 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
 
     wxDataViewItem item = GetItemByRow(current);
     bool ignore_other_columns =
-        ((GetOwner()->GetExpanderColumn() != col) &&
+        ((expander != col) &&
         (model->IsContainer(item)) &&
         (!model->HasContainerColumns(item)));
 
@@ -3692,7 +3709,7 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
                 le.SetEventObject(parent);
                 le.SetModel(GetModel());
 
-                parent->GetEventHandler()->ProcessEvent(le);
+                parent->ProcessWindowEvent(le);
             }
             return;
         }
@@ -3766,7 +3783,7 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
         le.SetEventObject(parent);
         le.SetModel(GetModel());
         le.SetValue(value);
-        parent->GetEventHandler()->ProcessEvent(le);
+        parent->ProcessWindowEvent(le);
     }
     else if (event.MiddleDown())
     {
@@ -4357,6 +4374,7 @@ bool wxDataViewCtrl::DeleteColumn( wxDataViewColumn *column )
 
 bool wxDataViewCtrl::ClearColumns()
 {
+    SetExpanderColumn(NULL);
     m_cols.Clear();
     m_colsBestWidths.clear();
     OnColumnsCountChanged();
@@ -4381,12 +4399,11 @@ void wxDataViewCtrl::UpdateColWidths()
     if ( !m_headerArea )
         return;
 
-    for ( wxVector<int>::const_iterator i = m_colsBestWidths.begin();
-          i != m_colsBestWidths.end();
-          ++i )
+    const unsigned len = m_colsBestWidths.size();
+    for ( unsigned i = 0; i < len; i++ )
     {
-        if ( m_colsBestWidths[*i] == 0 )
-            m_headerArea->UpdateColumn(*i);
+        if ( m_colsBestWidths[i] == 0 )
+            m_headerArea->UpdateColumn(i);
     }
 }