digitalmars.D.learn - GTKD TreeView - Delete TreeView SubItem with Button?
- TheDGuy (43/43) Nov 20 2015 Hello,
- Michael Robertson (19/63) Nov 20 2015 TreeIter iter = treeView.getSelectedIter;
- TheDGuy (44/44) Nov 20 2015 Thanks for your reply,
- Justin Whear (8/16) Nov 20 2015 You need to declare them at the module scope but initialize them inside
- TheDGuy (49/49) Nov 20 2015 Thanks for your reply,
- Justin Whear (5/12) Nov 20 2015 rowDeleted is just to emit the signal that a row has been removed, not
- TheDGuy (6/6) Nov 20 2015 So like this?
- Justin Whear (11/19) Nov 20 2015 That's creating an infinite recursion as the method simply calls itself.
- TheDGuy (2/2) Nov 20 2015 Ahh, okay. Thank you very much for your help, now everything
- Michael Robertson (7/13) Nov 20 2015 Your List inherits from TreeStore correct? just get rid of your
Hello,
is it possible, to delete a selected TreeView SubItem with a
Button-Click?
My Code currently looks like this:
import gtk.MainWindow;
import gtk.Box;
import gtk.Main;
import gtk.Button;
import gdk.Event;
import gtk.Widget;
import List, Languages;
void main(string[] args){
Main.init(args);
MainWindow win = new MainWindow("TreeView Example");
win.setDefaultSize(500,300);
Box box = new Box(Orientation.VERTICAL, 0);
auto list = new List();
auto german = list.addCountry("German", "Germany");
auto city = list.addCountryCity(german, "German", "Munich");
auto sweden = list.addCountry("Swedish", "Sweden");
auto cit = list.addCountryCity(sweden, "Swedish", "Stockholm");
auto treeView = new LanguageTree(list);
box.packStart(treeView, true, true, 0);
auto btn_Delete = new Button("Delete");
box.add(btn_Delete);
win.add(box);
win.showAll();
Main.run();
}
class DeleteButton : Button
{
this(in string text)
{
super(text);
addOnButtonRelease(&del);
}
private bool del(Event event, Widget widget)
{
return true;
}
}
But i neither know how i get the currently selected item nor how
i could delete it within the "del"-Event of the "DeleteButton"?
Nov 20 2015
On Friday, 20 November 2015 at 17:09:50 UTC, TheDGuy wrote:
Hello,
is it possible, to delete a selected TreeView SubItem with a
Button-Click?
My Code currently looks like this:
import gtk.MainWindow;
import gtk.Box;
import gtk.Main;
import gtk.Button;
import gdk.Event;
import gtk.Widget;
import List, Languages;
void main(string[] args){
Main.init(args);
MainWindow win = new MainWindow("TreeView Example");
win.setDefaultSize(500,300);
Box box = new Box(Orientation.VERTICAL, 0);
auto list = new List();
auto german = list.addCountry("German", "Germany");
auto city = list.addCountryCity(german, "German", "Munich");
auto sweden = list.addCountry("Swedish", "Sweden");
auto cit = list.addCountryCity(sweden, "Swedish", "Stockholm");
auto treeView = new LanguageTree(list);
box.packStart(treeView, true, true, 0);
auto btn_Delete = new Button("Delete");
box.add(btn_Delete);
win.add(box);
win.showAll();
Main.run();
}
class DeleteButton : Button
{
this(in string text)
{
super(text);
addOnButtonRelease(&del);
}
private bool del(Event event, Widget widget)
{
return true;
}
}
But i neither know how i get the currently selected item nor
how i could delete it within the "del"-Event of the
"DeleteButton"?
TreeIter iter = treeView.getSelectedIter;
then you can use the TreeIter to delete the item.
If your List is a ListStore or TreeStore, it has a remove method
that you can call.
If its a custom store you will have to implement it yourself like
this
class List:TreeModel
{
.....
void remove(TreeIter iter)
{
//maybe remove item from your actual data structure or other
processing
//send rowDeleted signal
rowDeleted(iter);
}
.....
}
Nov 20 2015
Thanks for your reply,
now it gets more clear for me but how am i able to access the
TreeView within the CustomButton-Class? If i declare TreeView and
TreeStore public i get "static variable list cannot be read at
compile time"?
import gtk.MainWindow;
import gtk.Box;
import gtk.Main;
import gtk.Button;
import gdk.Event;
import gtk.Widget;
import List, Languages;
auto list = new List();
auto treeView = new LanguageTree(list);
void main(string[] args){
Main.init(args);
MainWindow win = new MainWindow("TreeView Example");
win.setDefaultSize(500,300);
Box box = new Box(Orientation.VERTICAL, 0);
auto german = list.addCountry("German", "Germany");
auto city = list.addCountryCity(german, "German", "Munich");
auto sweden = list.addCountry("Swedish", "Sweden");
auto cit = list.addCountryCity(sweden, "Swedish", "Stockholm");
//auto treeView = new LanguageTree(list);
box.packStart(treeView, true, true, 0);
auto btn_Delete = new Button("Delete");
box.add(btn_Delete);
win.add(box);
win.showAll();
Main.run();
}
class DeleteButton : Button
{
this(in string text)
{
super(text);
addOnButtonRelease(&del);
}
private bool del(Event event, Widget widget)
{
list.remove(treeView.getSelectedIter);
return true;
}
}
Nov 20 2015
On Fri, 20 Nov 2015 18:57:10 +0000, TheDGuy wrote:Thanks for your reply, now it gets more clear for me but how am i able to access the TreeView within the CustomButton-Class? If i declare TreeView and TreeStore public i get "static variable list cannot be read at compile time"? auto list = new List(); auto treeView = new LanguageTree(list);You need to declare them at the module scope but initialize them inside your main function, so: List list; LanguageTree treeView; then inside your main function: list = new List(); treeView = new LanguageTree(list);
Nov 20 2015
Thanks for your reply,
is it also possible to do it like this?
import gtk.MainWindow;
import gtk.Box;
import gtk.Main;
import gtk.Button;
import gdk.Event;
import gtk.Widget;
import List, Languages;
void main(string[] args){
Main.init(args);
MainWindow win = new MainWindow("TreeView Example");
win.setDefaultSize(500,300);
Box box = new Box(Orientation.VERTICAL, 0);
auto list = new List();
auto german = list.addCountry("German", "Germany");
auto city = list.addCountryCity(german, "German", "Munich");
auto sweden = list.addCountry("Swedish", "Sweden");
auto cit = list.addCountryCity(sweden, "Swedish", "Stockholm");
auto treeView = new LanguageTree(list);
auto btn_Delete = new DeleteButton("Delete", treeView, list);
box.packStart(treeView, true, true, 0);
box.add(btn_Delete);
win.add(box);
win.showAll();
Main.run();
}
class DeleteButton : Button
{
private LanguageTree mLT;
private List mTStore;
this(in string text, LanguageTree lT, List tStore){
super(text);
this.mLT = lT;
this.mTStore = tStore;
addOnButtonRelease(&del);
}
private bool del(Event event, Widget widget){
mTStore.remove(mLT.getSelectedIter);
return true;
}
}
and in my TreeStore-Class:
public void remove(TreeIter iter)
{
rowDeleted(iter);
}
but now i get the error:
"rowDeleted is not callable using argument types (TreeIter)"?
Nov 20 2015
On Fri, 20 Nov 2015 19:34:01 +0000, TheDGuy wrote:Thanks for your reply, is it also possible to do it like this?Yeah, that'll work.but now i get the error: "rowDeleted is not callable using argument types (TreeIter)"?rowDeleted is just to emit the signal that a row has been removed, not actually remove it. You probably want to use the ListStore's remove method.
Nov 20 2015
So like this?
public void remove(TreeIter iter)
{
this.remove(iter);
}
If i do this, i get a stackoverflow error :(
Nov 20 2015
On Fri, 20 Nov 2015 19:45:25 +0000, TheDGuy wrote:
So like this?
public void remove(TreeIter iter)
{
this.remove(iter);
}
If i do this, i get a stackoverflow error :(
That's creating an infinite recursion as the method simply calls itself.
Assuming the class inherits from ListStore, you can just erase the remove
method entirely and let the base class handle it. If you want to do
something extra, use:
override void remove(TreeIter iter)
{
// Anything custom
super.remove(iter);
// Anything custom
}
Nov 20 2015
Ahh, okay. Thank you very much for your help, now everything works fine :)
Nov 20 2015
On Friday, 20 November 2015 at 19:45:26 UTC, TheDGuy wrote:
So like this?
public void remove(TreeIter iter)
{
this.remove(iter);
}
If i do this, i get a stackoverflow error :(
Your List inherits from TreeStore correct? just get rid of your
custom remove method entirely, or correctly override it
public override void remove(TreeIter iter)
{
super.remove(iter);
}
Nov 20 2015









TheDGuy <loder.feuer googlemail.com> 