Bir tane giriş kutumuz var. İçerisindeki metin değiştiğinde verileri süzmek istiyoruz ama bir türlü bu setVisibleFunc işlevine ne göndereceğimizi bulamadım.
Örneğin buradaki örnekte (http://www.mono-project.com/docs/gui/gtksharp/widgets/treeview-tutorial/#filtering-data) TreeModel geçmiş ama ben daha önce C örneğini de kodlamıştım.
typedef struct
{
GtkListStore * mallar;
GtkTreeModelSort * siralanmis;
GtkTreeModelFilter * suzulmus;
gdouble enYuksekFiyat;
}Depo;
/* ... */
gtk_tree_model_filter_set_visible_func (depo->suzulmus,
(GtkTreeModelFilterVisibleFunc) satirGorunurMu,
depo, NULL);
static gboolean satirGorunurMu (GtkTreeModel * model, GtkTreeIter * erisici, Depo * depo)
{
gdouble fiyat;
gtk_tree_model_get (model, erisici, FIYAT_SUTUNU, &fiyat, -1);
return fiyat <= depo->enYuksekFiyat;
}
C örneğinde TreeModel yerine TreeModelFilter geçiyorum kabul ediyor ama D kabul etmiyor. Ya da bir yerlerde gözümden kaçan bir şey olabilir.
Sizin bu konuda fikriniz var mı acaba.
import gtk.Main;
import gtk.MainWindow;
import gtk.Box;
import gtk.Entry;
import gtk.EditableIF;
import gtk.TreeModelFilter;
import gtk.TreeView;
import gtk.HBox;
import gtk.VBox;
import gtk.Label;
import gtk.ListStore;
import gtk.TreeViewColumn;
import gtk.CellRendererText;
import gtk.TreeModel;
import gtk.TreeIter;
import std.conv;
import std.stdio;
class Pencere: MainWindow
{
Box anaKutu;
Entry giriş;
TreeModelFilter süz;
TreeIter erişici;
this()
{
super("Ağaç örneği 3");
setSizeRequest(500, 200);
giriş = new Entry();
// giriş.addOnChanged((giriş) {metinDeğişti(giriş);});
auto girişEtiket = new Label("Sanatçı ara");
auto ağaç = new TreeView();
auto kutu = new VBox(false, 0);
auto veriModeli = new ListStore([GType.STRING, GType.STRING]);
auto sanatçıSütunu = new TreeViewColumn("Sanatçı", new CellRendererText(), "text", 0);
ağaç.appendColumn(sanatçıSütunu);
auto şarkıSütunu = new TreeViewColumn("Şarkı ismi", new CellRendererText(), "text", 1);
ağaç.appendColumn(şarkıSütunu);
erişici = veriModeli.createIter();
veriModeli.setValue(erişici, 0, "Ali Veli");
veriModeli.setValue(erişici, 1, "Bir şeyler söyle");
erişici = veriModeli.createIter();
veriModeli.setValue(erişici, 0, "Ali Veli");
veriModeli.setValue(erişici, 1, "Başka bir şeyler söyle");
erişici = veriModeli.createIter();
veriModeli.setValue(erişici, 0, "Ahmet fuat özkan");
veriModeli.setValue(erişici, 1, "Çorba yapalım");
süz = new TreeModelFilter(veriModeli, null);
süz.setVisibleFunc(cast(GtkTreeModelFilterVisibleFunc) ağacıSüz(süz, erişici), null, null);
ağaç.setModel(süz);
auto anaKutu = new HBox(false, 0);
anaKutu.packStart(girişEtiket, false, false, 5);
anaKutu.packStart(giriş, true, true, 5);
kutu.packStart(anaKutu, false, false, 5);
kutu.packStart(ağaç, true, true, 5);
add(kutu);
showAll();
}
bool ağacıSüz(TreeModelFilter model, TreeIter eriş)
{
string sanatçıİsmi = to!string(model.getValue(eriş, 0));
// writeln(sanatçıİsmi);
return true;
}
void metinDeğişti(EditableIF giriş)
{
süz.refilter();
}
// void metinDeğişti(ParamSpec parametre, ObjectG nesne)
// {
// süz.refilter();
// }
}
void main(string[] args)
{
Main.init(args);
new Pencere();
Main.run();
}
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
Permalink
Reply