]> git.saurik.com Git - wxWidgets.git/commitdiff
ignore invisble columns in height calculation
authorRobert Roebling <robert@roebling.de>
Fri, 16 May 2008 20:08:09 +0000 (20:08 +0000)
committerRobert Roebling <robert@roebling.de>
Fri, 16 May 2008 20:08:09 +0000 (20:08 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53609 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/generic/datavgen.cpp

index 38c3281ec56265183e75e6269327d570a3565823..c8e867396dd0f5e70dbaf0a61b7684593e00b34c 100644 (file)
@@ -2935,6 +2935,8 @@ wxRect wxDataViewMainWindow::GetLineRect( unsigned int row ) const
 
 int wxDataViewMainWindow::GetLineStart( unsigned int row ) const
 {
 
 int wxDataViewMainWindow::GetLineStart( unsigned int row ) const
 {
+    const wxDataViewModel *model = GetOwner()->GetModel();
+    
     if (GetOwner()->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT)
     {
         // TODO make more efficient
     if (GetOwner()->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT)
     {
         // TODO make more efficient
@@ -2947,6 +2949,8 @@ int wxDataViewMainWindow::GetLineStart( unsigned int row ) const
            const wxDataViewTreeNode* node = GetTreeNodeByRow(r);
            if (!node) return start;
            
            const wxDataViewTreeNode* node = GetTreeNodeByRow(r);
            if (!node) return start;
            
+           wxDataViewItem item = node->GetItem();
+           
            unsigned int cols = GetOwner()->GetColumnCount();
            unsigned int col;
            int height = 0;
            unsigned int cols = GetOwner()->GetColumnCount();
            unsigned int col;
            int height = 0;
@@ -2956,7 +2960,14 @@ int wxDataViewMainWindow::GetLineStart( unsigned int row ) const
                 if (column->IsHidden())
                     continue;      // skip it!
             
                 if (column->IsHidden())
                     continue;      // skip it!
             
+                if ((col != 0) && model->IsContainer(item) && !model->HasContainerColumns(item))
+                    continue;      // skip it!
+            
                 const wxDataViewRenderer *renderer = column->GetRenderer();
                 const wxDataViewRenderer *renderer = column->GetRenderer();
+                wxVariant value;
+                model->GetValue( value, item, column->GetModelColumn() );
+                wxDataViewRenderer *renderer2 = const_cast<wxDataViewRenderer*>(renderer);
+                renderer2->SetValue( value );
                 height = wxMax( height, renderer->GetSize().y );
            }
            
                 height = wxMax( height, renderer->GetSize().y );
            }
            
@@ -2973,6 +2984,8 @@ int wxDataViewMainWindow::GetLineStart( unsigned int row ) const
 
 int wxDataViewMainWindow::GetLineAt( unsigned int y ) const
 {
 
 int wxDataViewMainWindow::GetLineAt( unsigned int y ) const
 {
+    const wxDataViewModel *model = GetOwner()->GetModel();
+
     if (GetOwner()->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT)
     {
         // TODO make more efficient
     if (GetOwner()->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT)
     {
         // TODO make more efficient
@@ -2988,6 +3001,8 @@ int wxDataViewMainWindow::GetLineAt( unsigned int y ) const
                return row + ((y-yy) / m_lineHeight);
            }
            
                return row + ((y-yy) / m_lineHeight);
            }
            
+           wxDataViewItem item = node->GetItem();
+           
            unsigned int cols = GetOwner()->GetColumnCount();
            unsigned int col;
            int height = 0;
            unsigned int cols = GetOwner()->GetColumnCount();
            unsigned int col;
            int height = 0;
@@ -2996,8 +3011,15 @@ int wxDataViewMainWindow::GetLineAt( unsigned int y ) const
                 const wxDataViewColumn *column = GetOwner()->GetColumn(col);
                 if (column->IsHidden())
                     continue;      // skip it!
                 const wxDataViewColumn *column = GetOwner()->GetColumn(col);
                 if (column->IsHidden())
                     continue;      // skip it!
+                
+                if ((col != 0) && model->IsContainer(item) && !model->HasContainerColumns(item))
+                    continue;      // skip it!
             
                 const wxDataViewRenderer *renderer = column->GetRenderer();
             
                 const wxDataViewRenderer *renderer = column->GetRenderer();
+                wxVariant value;
+                model->GetValue( value, item, column->GetModelColumn() );
+                wxDataViewRenderer *renderer2 = const_cast<wxDataViewRenderer*>(renderer);
+                renderer2->SetValue( value );
                 height = wxMax( height, renderer->GetSize().y );
            }
            
                 height = wxMax( height, renderer->GetSize().y );
            }
            
@@ -3018,6 +3040,8 @@ int wxDataViewMainWindow::GetLineAt( unsigned int y ) const
 
 int wxDataViewMainWindow::GetLineHeight( unsigned int row ) const
 {
 
 int wxDataViewMainWindow::GetLineHeight( unsigned int row ) const
 {
+    const wxDataViewModel *model = GetOwner()->GetModel();
+    
     if (GetOwner()->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT)
     {
         wxASSERT( !IsVirtualList() );
     if (GetOwner()->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT)
     {
         wxASSERT( !IsVirtualList() );
@@ -3026,7 +3050,7 @@ int wxDataViewMainWindow::GetLineHeight( unsigned int row ) const
         // wxASSERT( node );
         if (!node) return m_lineHeight;
 
         // wxASSERT( node );
         if (!node) return m_lineHeight;
 
-        wxDataViewItem item( node->GetItem() );
+        wxDataViewItem item = node->GetItem();
         
         int height = 0;
         
         
         int height = 0;
         
@@ -3037,8 +3061,15 @@ int wxDataViewMainWindow::GetLineHeight( unsigned int row ) const
             const wxDataViewColumn *column = GetOwner()->GetColumn(col);
             if (column->IsHidden())
                 continue;      // skip it!
             const wxDataViewColumn *column = GetOwner()->GetColumn(col);
             if (column->IsHidden())
                 continue;      // skip it!
+
+            if ((col != 0) && model->IsContainer(item) && !model->HasContainerColumns(item))
+                continue;      // skip it!
             
             const wxDataViewRenderer *renderer = column->GetRenderer();
             
             const wxDataViewRenderer *renderer = column->GetRenderer();
+            wxVariant value;
+            model->GetValue( value, item, column->GetModelColumn() );
+            wxDataViewRenderer *renderer2 = const_cast<wxDataViewRenderer*>(renderer);
+            renderer2->SetValue( value );
             height = wxMax( height, renderer->GetSize().y );
         }
 
             height = wxMax( height, renderer->GetSize().y );
         }