Renamed HasChildren() to IsContainer(), added GetParent() to wxDataViewModel

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47589 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2007-07-20 09:01:52 +00:00
parent ee5aa9d44f
commit ed903e4242
4 changed files with 37 additions and 14 deletions

View File

@@ -104,7 +104,8 @@ public:
const wxDataViewItem &item, unsigned int col ) = 0; const wxDataViewItem &item, unsigned int col ) = 0;
// define hierachy // define hierachy
virtual bool HasChildren( const wxDataViewItem &item ) const = 0; virtual wxDataViewItem GetParent( const wxDataViewItem &item ) const = 0;
virtual bool IsContainer( const wxDataViewItem &item ) const = 0;
virtual wxDataViewItem GetFirstChild( const wxDataViewItem &parent ) const = 0; virtual wxDataViewItem GetFirstChild( const wxDataViewItem &parent ) const = 0;
virtual wxDataViewItem GetNextSibling( const wxDataViewItem &item ) const = 0; virtual wxDataViewItem GetNextSibling( const wxDataViewItem &item ) const = 0;

View File

@@ -171,7 +171,7 @@ public:
int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2 ) int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2 )
{ {
if (HasChildren(item1) && HasChildren(item2)) if (IsContainer(item1) && IsContainer(item2))
{ {
wxVariant value1,value2; wxVariant value1,value2;
GetValue( value1, item1, 0 ); GetValue( value1, item1, 0 );
@@ -230,12 +230,29 @@ public:
} }
} }
virtual bool HasChildren( const wxDataViewItem &item ) const virtual wxDataViewItem GetParent( const wxDataViewItem &item ) const
{ {
// the invisble root node has no parent
if (!item.IsOk())
return wxDataViewItem(0);
MyMusicModelNode *node = (MyMusicModelNode*) item.GetID(); MyMusicModelNode *node = (MyMusicModelNode*) item.GetID();
if (!node)
// "MyMusic" also has no parent
if (node == m_root)
return wxDataViewItem(0);
return wxDataViewItem( (void*) node->GetParent() );
}
virtual bool IsContainer( const wxDataViewItem &item ) const
{
// the invisble root node can have children (in
// our model always "MyMusic")
if (!item.IsOk())
return true; return true;
MyMusicModelNode *node = (MyMusicModelNode*) item.GetID();
return node->IsContainer(); return node->IsContainer();
} }
@@ -261,14 +278,19 @@ public:
virtual wxDataViewItem GetNextSibling( const wxDataViewItem &item ) const virtual wxDataViewItem GetNextSibling( const wxDataViewItem &item ) const
{ {
MyMusicModelNode *node = (MyMusicModelNode*) item.GetID(); MyMusicModelNode *node = (MyMusicModelNode*) item.GetID();
MyMusicModelNode *parent = node->GetParent();
if (!parent) // "MyMusic" has no siblings in our model
if (node == m_root)
return wxDataViewItem(0); return wxDataViewItem(0);
MyMusicModelNode *parent = node->GetParent();
int pos = parent->GetChildren().Index( node ); int pos = parent->GetChildren().Index( node );
// Something went wrong
if (pos == wxNOT_FOUND) if (pos == wxNOT_FOUND)
return wxDataViewItem(0); return wxDataViewItem(0);
// No more children
if (pos == parent->GetChildCount()-1) if (pos == parent->GetChildCount()-1)
return wxDataViewItem(0); return wxDataViewItem(0);

View File

@@ -148,12 +148,12 @@ void wxDataViewModel::RemoveNotifier( wxDataViewModelNotifier *notifier )
int wxDataViewModel::Compare( const wxDataViewItem &item1, const wxDataViewItem &item2 ) int wxDataViewModel::Compare( const wxDataViewItem &item1, const wxDataViewItem &item2 )
{ {
// sort branches before leaves // sort branches before leaves
bool item1_has_children = HasChildren(item1); bool item1_is_container = IsContainer(item1);
bool item2_has_children = HasChildren(item2); bool item2_is_container = IsContainer(item2);
if (item1_has_children && !item2_has_children) if (item1_is_container && !item2_is_container)
return 1; return 1;
if (item2_has_children && !item1_has_children) if (item2_is_container && !item1_is_container)
return -1; return -1;
wxVariant value1,value2; wxVariant value1,value2;

View File

@@ -2307,7 +2307,7 @@ gboolean wxDataViewCtrlInternal::iter_children( GtkTreeIter *iter, GtkTreeIter *
{ {
wxDataViewItem item( (void*) parent->user_data ); wxDataViewItem item( (void*) parent->user_data );
if (!m_wx_model->HasChildren( item )) if (!m_wx_model->IsContainer( item ))
return FALSE; return FALSE;
wxGtkTreeModelNode *parent_node = FindNode( parent ); wxGtkTreeModelNode *parent_node = FindNode( parent );
@@ -2327,7 +2327,7 @@ gboolean wxDataViewCtrlInternal::iter_children( GtkTreeIter *iter, GtkTreeIter *
gboolean wxDataViewCtrlInternal::iter_has_child( GtkTreeIter *iter ) gboolean wxDataViewCtrlInternal::iter_has_child( GtkTreeIter *iter )
{ {
wxDataViewItem item( (void*) iter->user_data ); wxDataViewItem item( (void*) iter->user_data );
bool res = m_wx_model->HasChildren( item ); bool res = m_wx_model->IsContainer( item );
if (!res) if (!res)
return FALSE; return FALSE;
@@ -2342,7 +2342,7 @@ gint wxDataViewCtrlInternal::iter_n_children( GtkTreeIter *iter )
{ {
wxDataViewItem item( (void*) iter->user_data ); wxDataViewItem item( (void*) iter->user_data );
if (!m_wx_model->HasChildren( item )) if (!m_wx_model->IsContainer( item ))
return 0; return 0;
wxGtkTreeModelNode *parent_node = FindNode( iter ); wxGtkTreeModelNode *parent_node = FindNode( iter );
@@ -2359,7 +2359,7 @@ gboolean wxDataViewCtrlInternal::iter_nth_child( GtkTreeIter *iter, GtkTreeIter
if (parent) id = (void*) parent->user_data; if (parent) id = (void*) parent->user_data;
wxDataViewItem item( id ); wxDataViewItem item( id );
if (!m_wx_model->HasChildren( item )) if (!m_wx_model->IsContainer( item ))
return FALSE; return FALSE;
wxGtkTreeModelNode *parent_node = FindNode( parent ); wxGtkTreeModelNode *parent_node = FindNode( parent );