Gtk::Tree und Objekte synchronisieren

Hi
Ich habe eine eine Klasse, die wie folgt aufgebaut ist:

Code:
class A
{
     struct list
     {
      list* next;
      A* child;
     };
};

maw: Eine Objekt kann beliebig viele Unterobjekte haben, aber auch ein übergeördnetes Objekt haben.

Die ganze Geschichte soll nun vom User gemanaged werden (also welches Objekt welche Unterobjekte hat, und welches die Übergeordneten sind).
Dazu möchte ich das TreeView-Widget der Gtkmm-Bibliotheken verwenden.

Ich bekomme die ganze Sache bereits in das Gtk::TreeStore rein, aber wie komme ich jetzt an die neue Struktur?

Den Ablauf hatte ich wie folgt geplant:
* TreeView zusammenbauen
* Fenster mit dem TreeView anzeigen und den user walten lassen
* Alle zusammenhänge (zwischen den Objekten) löschen
* Die Objekte neu anordnen, so wie der user sie in TreeView zusammengesetzt hat

Dieser letzt Punkt ist mein Problem... Aus der Gtk-Doku werde ich nicht schlau...
Fals es eine bessere Lösung gibt, könnt ihr mir das natürlich auch sagen :)

-- edit --
Die Spache ist natürlich C++

-- edit --

So, inzwischen bin ich der lösung ein ganz kleines stück näher gekommen:
Code:
void ELEMENT::SetChildren(Gtk::TreeModel::Children parent)
{
 CHILDLIST_MODELCOLUMNS col;
 ELEMENT *element;

 Gtk::TreeModel::Children children = parent->children(); //1. ebene holen (die gruppen)

 for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) //Alle gruppen durchgehen
 {
  Gtk::TreeModel::Row row = *iter;
  element = row[col.element];
  this->AddChild(element); //Das element in die Liste einfügen
  element->SetChildren(/*???*/); //Und jetzt soll dieses element seine children bekommen
 }
}

Das Problem ist jetzt, dass ich nicht an das "teil" komme, auf dass der iterator zeigt, da dieser nur die reihe hergibt.
Wie komme ich an das Gtk::TreeModel::Children objekt?

Ein bischen ungünstig, dass ich auf meinen Beitag nicht antworten kann, da man so nicht erkennt, dass ich diesen Post seit dem 13. bearbeitet habe. Somit merken die user nicht, dass ich einiges herrausgefunden habe, was ihnen hilf, mir zuhelfen...

-- edit --
So habe nun endlich eine Lösung für das Problem gefunden.

Code:
//Inhalt des TreeView wird AUSGELESEN
void ELEMENT::AddChildren(Gtk::TreeModel::Row &parent)
{
 CHILDLIST_MODELCOLUMNS col;
 ELEMENT *element;
 //zunächst sollte besser mal die alte liste geleert werden, fals noch was drin is
 this->ClearList();

 Gtk::TreeModel::Children children = parent.children();

 if(!bool(children))return; //wenns keine kinder gibt, ist jetzt schicht
/// ich hoffe das ist so auch sicher. Die Doku ist da leider sehr spaarsam mit infos

 for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) //Alle gruppen durchgehen
 {
  Gtk::TreeModel::Row row = *iter;
  element = row[col.element];
  this->AddChild(element);
  element->AddChildren(row);
 }
}

////////////////////////////////////////////////////////////////////////////////////
//Alle wird IN den TreeView gepackt
void ELEMENT::GetChildren(Glib::RefPtr<Gtk::TreeStore> &refTreeModel, Gtk::TreeModel::Row &parent)
{
 CHILDLIST_MODELCOLUMNS col;
 Gtk::TreeModel::Row    row;

 row = *(refTreeModel->append(parent.children()));

 row[col.id]      = this->ID;
 row[col.name]    = Glib::ustring(this->name);
 row[col.element] = this;

 CHILDLIST *list;
 list = this->children;
 while(list->child != NULL)//liste durchgehen
 {
  list->child->GetChildren(refTreeModel,row);
  list = list->next;
 }
}
 
Zurück
Oben