Retrieving Column Data from a ListStore?

number putimalitze at gmx.de
Thu Apr 25 11:29:04 UTC 2019


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();
}

```


More information about the Digitalmars-d-learn mailing list