Implement HasContainerColumns in generic code

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49221 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2007-10-18 14:40:08 +00:00
parent 43ea4e37eb
commit 438fb233a0

View File

@@ -269,46 +269,46 @@ class wxDataViewTreeNode
{ {
public: public:
wxDataViewTreeNode( wxDataViewTreeNode * parent = NULL ) wxDataViewTreeNode( wxDataViewTreeNode * parent = NULL )
{ this->parent = parent; {
if( parent == NULL ) m_parent = parent;
open = true; if (!parent)
m_open = true;
else else
open = false; m_open = false;
hasChildren = false; m_hasChildren = false;
subTreeCount = 0; m_subTreeCount = 0;
} }
//I don't know what I need to do in the destructure
~wxDataViewTreeNode() ~wxDataViewTreeNode()
{ {
} }
wxDataViewTreeNode * GetParent() { return parent; } wxDataViewTreeNode * GetParent() { return m_parent; }
void SetParent( wxDataViewTreeNode * parent ) { this->parent = parent; } void SetParent( wxDataViewTreeNode * parent ) { m_parent = parent; }
wxDataViewTreeNodes & GetNodes() { return nodes; } wxDataViewTreeNodes & GetNodes() { return m_nodes; }
wxDataViewTreeLeaves & GetChildren() { return leaves; } wxDataViewTreeLeaves & GetChildren() { return m_leaves; }
void AddNode( wxDataViewTreeNode * node ) void AddNode( wxDataViewTreeNode * node )
{ {
leaves.Add( node->GetItem().GetID() ); m_leaves.Add( node->GetItem().GetID() );
if (g_column >= -1) if (g_column >= -1)
leaves.Sort( &wxGenericTreeModelItemCmp ); m_leaves.Sort( &wxGenericTreeModelItemCmp );
nodes.Add( node ); m_nodes.Add( node );
if (g_column >= -1) if (g_column >= -1)
nodes.Sort( &wxGenericTreeModelNodeCmp ); m_nodes.Sort( &wxGenericTreeModelNodeCmp );
} }
void AddLeaf( void * leaf ) void AddLeaf( void * leaf )
{ {
leaves.Add( leaf ); m_leaves.Add( leaf );
if (g_column >= -1) if (g_column >= -1)
leaves.Sort( &wxGenericTreeModelItemCmp ); m_leaves.Sort( &wxGenericTreeModelItemCmp );
} }
wxDataViewItem & GetItem() { return item; } wxDataViewItem & GetItem() { return m_item; }
void SetItem( const wxDataViewItem & item ) { this->item = item; } void SetItem( const wxDataViewItem & item ) { m_item = item; }
unsigned int GetChildrenNumber() { return leaves.GetCount(); } unsigned int GetChildrenNumber() { return m_leaves.GetCount(); }
unsigned int GetNodeNumber() { return nodes.GetCount(); } unsigned int GetNodeNumber() { return m_nodes.GetCount(); }
int GetIndentLevel() int GetIndentLevel()
{ {
int ret = 0 ; int ret = 0 ;
@@ -323,64 +323,62 @@ public:
bool IsOpen() bool IsOpen()
{ {
return open ; return m_open ;
} }
void ToggleOpen() void ToggleOpen()
{ {
int len = nodes.GetCount(); int len = m_nodes.GetCount();
int sum = 0; int sum = 0;
for ( int i = 0 ;i < len ; i ++) for ( int i = 0 ;i < len ; i ++)
sum += nodes[i]->GetSubTreeCount(); sum += m_nodes[i]->GetSubTreeCount();
sum += leaves.GetCount(); sum += m_leaves.GetCount();
if( open ) if (m_open)
{ {
ChangeSubTreeCount(-sum); ChangeSubTreeCount(-sum);
open = !open; m_open = !m_open;
} }
else else
{ {
open = !open; m_open = !m_open;
ChangeSubTreeCount(sum); ChangeSubTreeCount(sum);
} }
} }
bool HasChildren() { return hasChildren; } bool HasChildren() { return m_hasChildren; }
void SetHasChildren( bool has ){ hasChildren = has; } void SetHasChildren( bool has ){ m_hasChildren = has; }
void SetSubTreeCount( int num ) { subTreeCount = num; } void SetSubTreeCount( int num ) { m_subTreeCount = num; }
int GetSubTreeCount() { return subTreeCount; } int GetSubTreeCount() { return m_subTreeCount; }
void ChangeSubTreeCount( int num ) void ChangeSubTreeCount( int num )
{ {
if( !open ) if( !m_open )
return ; return ;
subTreeCount += num; m_subTreeCount += num;
if( parent ) if( m_parent )
parent->ChangeSubTreeCount(num); m_parent->ChangeSubTreeCount(num);
} }
void Resort() void Resort()
{ {
if (g_column >= -1) if (g_column >= -1)
{ {
nodes.Sort( &wxGenericTreeModelNodeCmp ); m_nodes.Sort( &wxGenericTreeModelNodeCmp );
int len = nodes.GetCount(); int len = m_nodes.GetCount();
for (int i = 0; i < len; i ++) for (int i = 0; i < len; i ++)
{ m_nodes[i]->Resort();
nodes[i]->Resort(); m_leaves.Sort( &wxGenericTreeModelItemCmp );
}
leaves.Sort( &wxGenericTreeModelItemCmp );
} }
} }
private: private:
wxDataViewTreeNode * parent; wxDataViewTreeNode *m_parent;
wxDataViewTreeNodes nodes; wxDataViewTreeNodes m_nodes;
wxDataViewTreeLeaves leaves; wxDataViewTreeLeaves m_leaves;
wxDataViewItem item; wxDataViewItem m_item;
bool open; bool m_open;
bool hasChildren; bool m_hasChildren;
int subTreeCount; int m_subTreeCount;
}; };
int LINKAGEMODE wxGenericTreeModelNodeCmp( wxDataViewTreeNode ** node1, wxDataViewTreeNode ** node2) int LINKAGEMODE wxGenericTreeModelNodeCmp( wxDataViewTreeNode ** node1, wxDataViewTreeNode ** node2)
@@ -2402,11 +2400,13 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
wxVariant value; wxVariant value;
wxDataViewTreeNode * node = GetTreeNodeByRow(item); wxDataViewTreeNode * node = GetTreeNodeByRow(item);
if( node == NULL ) if( node == NULL )
{
continue; continue;
}
wxDataViewItem dataitem = node->GetItem(); wxDataViewItem dataitem = node->GetItem();
if ((i > 0) && model->IsContainer(dataitem) && !model->HasContainerColumns(dataitem))
continue;
model->GetValue( value, dataitem, col->GetModelColumn()); model->GetValue( value, dataitem, col->GetModelColumn());
cell->SetValue( value ); cell->SetValue( value );
@@ -3451,13 +3451,18 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
m_lastOnSame = false; m_lastOnSame = false;
} }
wxDataViewItem item = GetItemByRow(current);
bool ignore_other_columns =
((GetOwner()->GetExpanderColumn() != col) &&
(model->IsContainer(item)) &&
(!model->HasContainerColumns(item)));
if (event.LeftDClick()) if (event.LeftDClick())
{ {
if ( current == m_lineLastClicked ) if ( current == m_lineLastClicked )
{ {
if (cell->GetMode() == wxDATAVIEW_CELL_ACTIVATABLE) if ((!ignore_other_columns) && (cell->GetMode() == wxDATAVIEW_CELL_ACTIVATABLE))
{ {
wxDataViewItem item = GetItemByRow(current);
wxVariant value; wxVariant value;
model->GetValue( value, item, col->GetModelColumn() ); model->GetValue( value, item, col->GetModelColumn() );
cell->SetValue( value ); cell->SetValue( value );
@@ -3516,7 +3521,7 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
} }
} }
//If the user click the expander, we do not do editing even if the column with expander are editable //If the user click the expander, we do not do editing even if the column with expander are editable
if (m_lastOnSame && !expander ) if (m_lastOnSame && !expander && !ignore_other_columns)
{ {
if ((col == m_currentCol) && (current == m_currentRow) && if ((col == m_currentCol) && (current == m_currentRow) &&
(cell->GetMode() == wxDATAVIEW_CELL_EDITABLE) ) (cell->GetMode() == wxDATAVIEW_CELL_EDITABLE) )