The GTK TreeView widget is powerfull but complex widget. Though Dlang has very good GTK bindings.
go into directory
Change dub.json
Change ./source/app.d
run:
Code:
dub init
go into directory
Change dub.json
JSON:
{
"authors": [
"x"
],
"copyright": "Copyright © 2021, x",
"dependencies": {
"gtk-d": "~>3.9.0"
},
"description": "A minimal D application.",
"license": "proprietary",
"name": "gtkd_treeview"
}
Change ./source/app.d
Code:
import gtk.Main;
import gtk.MainWindow;
import gtk.Box;
import gtk.Button;
import gtk.Widget;
import gtk.ListStore;
import gtk.TreeViewColumn;
import gtk.CellRendererText;
import gtk.TreeView;
import gtk.TreeIter;
import gtk.TreeSelection;
import gtk.TreePath;
import gtk.TreeModelIF;
import gtk.TreeIter;
import std.stdio;
import gdk.Event;
class MyWindow : MainWindow {
Box vbox;
ListStore store;
void quit(){
Main.quit();
}
void store_addrow(ref ListStore store,string name,int age){
TreeIter it=store.createIter();
store.setValue(it,0,name);
store.setValue(it,1,age);
}
void view_addcolumn(ref TreeView tv, string name, int colindex) {
TreeViewColumn col = new TreeViewColumn();
col.setTitle(name);
col.setSortColumnId(colindex);
CellRendererText r = new CellRendererText();
// 1. Pack the renderer into the column first
col.packStart(r, true);
// 2. Now you can add the attribute
col.addAttribute(r, "text", colindex);
r.setAlignment(1.0, 1.0);
tv.appendColumn(col);
}
TreeIter store_get_row(int index){
TreeIter it;
store.getIterFirst(it);
for(int t=0;t<index;t++){
store.iterNext(it);
}
return it;
}
this(){
super("Treeview");
setSizeRequest(400,300);
setHexpand(0);
addOnDestroy(delegate void(Widget w) { quit(); } );
vbox=new Box(Orientation.VERTICAL,5);
auto mytreeview=new TreeView();
store=new ListStore([GType.STRING,GType.INT]);
store_addrow(store,"Alain.............................",10);
store_addrow(store,"Eddy",5);
TreeView tv=new TreeView();
view_addcolumn(tv,"Name",0);
view_addcolumn(tv,"Age",1);
tv.setModel(store);
vbox.packStart(tv,true,true,0);
Button remove=new Button("Remove");
remove.addOnButtonRelease(&removeme);
vbox.packStart(remove,false,false,0);
store_addrow(store,"Jan",15);
add(vbox);
showAll();
}
private bool removeme(Event event,Widget widget){
writeln("Hallo");
TreeIter it;
bool result=true;
//store.getIterFirst(it);
//result=store.remove(it);
store.clear();
return true;
}
}
int main(string[] args){
Main.init(args);
MyWindow window=new MyWindow();
Main.run();
return 0;
}
run:
Code:
dub run