+//-----------------------------------------------------------------------------
+// wxGtkTreeModelNode
+//-----------------------------------------------------------------------------
+
+void wxGtkTreeModelNode::Resort()
+{
+ size_t count = m_children->GetCount();
+ if (count == 0)
+ return;
+
+ if (count == 1)
+ {
+ wxGtkTreeModelNode *node = m_children->Item( 0 );
+ node->Resort();
+ return;
+ }
+
+ wxGtkTreeModelNodes *new_array = new wxGtkTreeModelNodes( wxGtkTreeModelNodeCmp );
+
+ size_t pos;
+
+ for (pos = 0; pos < count; pos++)
+ new_array->Add( m_children->Item( pos ) );
+
+
+ gint *new_order = new gint[count];
+
+ for (pos = 0; pos < count; pos++)
+ {
+ wxGtkTreeModelNode *node = new_array->Item( pos );
+ size_t old_pos;
+ for (old_pos = 0; old_pos < count; old_pos++)
+ {
+ if (node == m_children->Item(old_pos))
+ {
+ new_order[pos] = old_pos;
+ break;
+ }
+ }
+ }
+
+// for (pos = 0; pos < count; pos++)
+// m_children->Clear();
+ delete m_children;
+
+ m_children = new_array;
+
+ GtkTreeModel *gtk_tree_model = GTK_TREE_MODEL( m_internal->GetGtkModel() );
+
+ GtkTreeIter iter;
+ iter.user_data = (gpointer) GetItem().GetID();
+ iter.stamp = m_internal->GetGtkModel()->stamp;
+ GtkTreePath *path = wxgtk_tree_model_get_path( gtk_tree_model, &iter );
+
+ gtk_tree_model_rows_reordered( gtk_tree_model, path, &iter, new_order );
+
+ gtk_tree_path_free (path);
+
+ delete [] new_order;
+
+ for (pos = 0; pos < count; pos++)
+ {
+ wxGtkTreeModelNode *node = m_children->Item( pos );
+ node->Resort();
+ }
+}
+