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:
@@ -269,118 +269,116 @@ 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)
|
||||||
else
|
m_open = true;
|
||||||
open = false;
|
else
|
||||||
hasChildren = false;
|
m_open = false;
|
||||||
subTreeCount = 0;
|
m_hasChildren = false;
|
||||||
|
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 ;
|
||||||
wxDataViewTreeNode * node = this;
|
wxDataViewTreeNode * node = this;
|
||||||
while( node->GetParent()->GetParent() != NULL )
|
while( node->GetParent()->GetParent() != NULL )
|
||||||
{
|
{
|
||||||
node = node->GetParent();
|
node = node->GetParent();
|
||||||
ret ++;
|
ret ++;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
@@ -2400,14 +2398,16 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
|
|||||||
{
|
{
|
||||||
// get the cell value and set it into the renderer
|
// get the cell value and set it into the renderer
|
||||||
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();
|
||||||
model->GetValue( value, dataitem, col->GetModelColumn());
|
|
||||||
|
if ((i > 0) && model->IsContainer(dataitem) && !model->HasContainerColumns(dataitem))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
model->GetValue( value, dataitem, col->GetModelColumn());
|
||||||
cell->SetValue( value );
|
cell->SetValue( value );
|
||||||
|
|
||||||
// update the y offset
|
// update the y offset
|
||||||
@@ -3402,7 +3402,7 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
|||||||
m_underMouse = node;
|
m_underMouse = node;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (node!=NULL && !node->HasChildren())
|
if (node!=NULL && !node->HasChildren())
|
||||||
delete node;
|
delete node;
|
||||||
}
|
}
|
||||||
if (!hover)
|
if (!hover)
|
||||||
@@ -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) )
|
||||||
|
Reference in New Issue
Block a user