On Wednesday, 24 April 2019 at 18:56:50 UTC, Ron Tarrant wrote:

For anyone else who comes along looking for the same answer, here's what I did:


I'm trying to do it with multi-selection. It works now but I wonder if it's right to just create a dummy TreeModelIF to call getSelectedRows()? Same question for creating a TreeIter to call getIter()?

```
import std.stdio;

import gtk.Main;
import gtk.MainWindow;
import gtk.TreeView;
import gtk.CellRendererText;
import gtk.TreeViewColumn;
import gtk.ListStore;
import gtk.TreeStore;
import gtk.TreeIter;
import gtk.TreeSelection;
import gtk.TreePath;

void main(string[] args)
{
        Main.init(args);

        MainWindow window = new MainWindow("title");
        window.setSizeRequest(400, 200);

        TreeView treeView = new TreeView();

        CellRendererText cellRendererText;
        TreeViewColumn treeViewColumn;

        CellRendererText cellRendererTextA = new CellRendererText();
        CellRendererText cellRendererTextB = new CellRendererText();
        treeViewColumn = new TreeViewColumn();
        treeViewColumn.setTitle("A and B");
        treeViewColumn.packStart(cellRendererTextA, true);
        treeViewColumn.packStart(cellRendererTextB, true);
        treeViewColumn.addAttribute(cellRendererTextA, "text", 0);
        treeViewColumn.addAttribute(cellRendererTextB, "text", 1);
        treeView.appendColumn(treeViewColumn);

        cellRendererText = new CellRendererText();
treeViewColumn = new TreeViewColumn("C", cellRendererText, "text", 2);
        treeView.appendColumn(treeViewColumn);

//ListStore listStore = new ListStore([GType.STRING, GType.STRING, GType.STRING]); TreeStore treeStore = new TreeStore([GType.STRING, GType.STRING, GType.STRING]);
        treeView.setModel(treeStore);

        TreeIter treeIter;

        treeIter = treeStore.createIter();
        treeStore.setValue(treeIter, 0, "a");
        treeStore.setValue(treeIter, 1, "b");
        treeStore.setValue(treeIter, 2, "c");

        treeIter = treeStore.createIter();
        treeStore.setValue(treeIter, 0, "a2");
        treeStore.setValue(treeIter, 1, "b2");
        treeStore.setValue(treeIter, 2, "c2");

        TreeSelection treeSelection = treeView.getSelection();
        treeSelection.setMode(SelectionMode.MULTIPLE);
treeSelection.addOnChanged(delegate void(TreeSelection treeSelection) {
                writeln("----");
                if (treeSelection.getMode() == SelectionMode.MULTIPLE)
                {
                        import gtk.TreeModelIF;
                        TreeModelIF tm;
                        //writeln(tm);
                        TreePath[] treePaths = 
treeSelection.getSelectedRows(tm);
                        writeln("nb selected: ", 
treeSelection.countSelectedRows());
                        if (treePaths.length)
                        {
                                foreach (i, treePath; treePaths)
                                {
                                        writefln("path(%s) : %s", i, treePath);
                                        TreeIter treeIter = new TreeIter();
                                        treeStore.getIter(treeIter, treePath);
                                        writefln("%s, %s, %s"
                                                , 
treeStore.getValueString(treeIter, 0)
                                                , 
treeStore.getValueString(treeIter, 1)
                                                , 
treeStore.getValueString(treeIter, 2)
                                        );
                                }
                        }
                        else
                        {
                                writeln("nothing");
                        }
                }
                else
                {
                        TreeIter treeIter = treeSelection.getSelected();
                        if (treeIter)
                        {
                                writefln("%s, %s, %s"
                                        , treeStore.getValueString(treeIter, 0)
                                        , treeStore.getValueString(treeIter, 1)
                                        , treeStore.getValueString(treeIter, 2)
                                );
                        }
                        else
                        {
                                writeln("nothing");
                        }
                }
        });

        window.add(treeView);

        window.showAll();
        Main.run();
}

```

Reply via email to