Frage zu GTK(mm) Tree View



  • Hey,

    ich habe mich mit GTKkmm befasst. Mit dem Ergebnis war ich ganz zufrieden. Nur hakt es jetzt mit den Treeviews:

    Ich möchte ein Treeview mit mehreren Spalten machen.

    1.Problem:
    Die 3.Spalte soll abhängig von einem string-array entweder ein normales Texteingabefeld, eine Combobox oder eine Clickbox enthalten

    2.Problem:
    Ich muss auch andere (nicht in der Dokumentation erwähnten) Renderer verwenden. In die Dritte Spalte sollte so etwas wie ein File Selector (vllt ein Button mit dem FileSelector-Stock), in die vierte ein Button.

    Ist mindestens eines der beiden Probleme lösbar? Wie könnte so eine Lösung jeweils aussehen?

    Gruß,
    Johannes



  • voidpointer schrieb:

    Hey,

    ich habe mich mit GTKkmm befasst. Mit dem Ergebnis war ich ganz zufrieden. Nur hakt es jetzt mit den Treeviews:

    Ich möchte ein Treeview mit mehreren Spalten machen.

    1.Problem:
    Die 3.Spalte soll abhängig von einem string-array entweder ein normales Texteingabefeld, eine Combobox oder eine Clickbox enthalten

    http://gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/sec-treeview.html (Abschnitt "More than one Model Column per View Column")

    2.Problem:
    Ich muss auch andere (nicht in der Dokumentation erwähnten) Renderer verwenden. In die Dritte Spalte sollte so etwas wie ein File Selector (vllt ein Button mit dem FileSelector-Stock), in die vierte ein Button.

    Habe ich noch nie gemacht, könnte aber machbar sein.



  • Ich war in letzter Zeit mit anderen Sachen beschäftigt und musste damit erst einmal warten. Sorry.

    Ich kann mir überhaupt nicht vorstellen, wie das funktionieren soll... Ich verstehe leider nicht mal die Überschrift.

    Es heißt, die Demo sei von "demos/gtk-demo/example_stockbrowser.cc"

    Aber ich kann diese Datei weder auf meinem System, noch im Internet finden. Wo kann man sich dieses demo-paket runterladen?



  • Wenn du gtkmm runterlädst ist es dabei. Wenn du die binaries geladen hast, ist es im $GTK_BASEPATH/gtkmm_demo Verzeichnis. Wenn du gtkmm als Source-tarball geladen hast, ist's sicher auch irgendwo dabei.

    Hier, hab se dir kurz hochgeladen: http://rafb.net/p/RyfbLC37.html



  • Habe Linux und habe ein RPM-Paket heruntergeladen... Aber ich habe leider diese Demo nirgends auf meinem PC. Danke, dass du mr die eine Datei zum Anschauen hochgeladen hast. Leider reicht die ja noch nicht zum kompilieren...

    Wie heißt diese Demo, wo kriegt man sie?



  • Sie heißt einfach gtkmm-demo. Und wie gesagt, geh' auf die gtkmm-Homepage und lad dir den Tarball runter, da sind die Sourcen für die demo dabei



  • OK, bin schon ne ganze Menge weiter jetzt... das mit der demo hat jetzt geklappt, nachdem ich alle files einzeln runter geladen habe...

    Ein aktuelles Bild habe ich auf http://intelcentino.in.funpic.de/upload/tmp.png, der Code entspricht in etwa dem von dem example.

    Beim adden habe ich das so geschrieben:

    TreeModel::Row row1 = *(OptTreeModel->append());
    row1[OptCols.col_value] = "links";
    row1[OptCols.col_checkbox] = false;
    
    TreeModel::Row row2 = *(OptTreeModel->append());
    row2[OptCols.col_value] = "links";
    row2[OptCols.col_textedit] = "test";
    

    Probleme:
    1.) In der ersten Zeile ist zwar kein String, aber die Checkbox ist trotzdem rechts. Das sieht doof aus. Die Widgets sollten natürlich alle übereinanderstehen
    2.) Die Checkbox in der 2ten Zeile sollte da gar nicht hin. Ich habe sie nicht hinzugefügt.

    Es sollte ja nicht so sein:

    Textfeld1 Checkbox1
    Textfeld2 Checkbox2

    sondern so:

    Textfeld1 (hier soll der Benutzer einen Text eingeben)
    Checkbox1 (das ist ein boolescher Wert... ein Text wäre ja hier sinnlos)
    etc.

    Wie kann man sowas erreichen?



  • Hm, habe dich falsch verstanden, sorry. Ich war irgendwie der Meinung, du willst mehrere Widgets in eine Spalte bringen.

    Okay, dein Problem ist mir nun klar. Leider kann ich dir keine Lösung anbieten, da ich noch nie so etwas gemacht habe und mir auch nichts einfällt, was in diese Richtung führt. Mir fällt es auch schwer, mir eine Lösung vorzustellen, da man praktisch für jede Zeile ein eigenes ColumnModel setzen müsste. Evtl. geht was mit den CellRenderern, aber die sind eigentlich nur für das Rendern der Spalten zuständig.

    Als Alternative könntest du noch die gtkmm mailing list probieren.

    Cheers

    GPC



  • Hey,

    vielleicht funktioniert es, wenn man die verschiedenen möglichen Widgets alle der Spalte hinzufügt (wie in "More than one...") und dann abhängig von einem Kennzeichen in einer versteckten Spalte des TreeModels die Sichtbarkeit der einzelnen Widgets steuert (in einer Funktion, die mit set_cell_data_func an die Spalte gebunden wird -- Vorlage dazu: das Beispiel "Editable Cells" im Abschnitt "The TreeView widget/Examples").

    Vielleicht ist aber auch ein TreeView nicht das richtige Widget, sondern ein von Hand gefülltes Table besser geeignet?


Anmelden zum Antworten