Gtkd ile otomatik tamamlama
Bazen kullanıcının girdiği bilgileri uzun uzun yazması uğraştırıcı olabilir.
Bu nedenle otomatik tamamlama kullanmak isteyebiliriz.
Öncelikle şehir isminde bir dizin oluşturalım.
Bu dizinin içinde dub.sdl isimli bir kütük oluşturup içerisine şunları girelim.
name "şehir"
targetType "executable"
sourcePaths "kaynak"
dependency "gtk-d" version="~>3.11.0"
Daha sonra kaynak isminde bir alt dizin oluşturalım.
Bu dizinin içinde ana.d isimli bir kütük oluşturalım.
import gtk.Window;
import gtk.Main;
import gtk.Widget;
import gtk.Entry;
import gtk.EntryCompletion;
import gtk.TreeIter;
import gtk.ListStore;
import std;
class Pencere : Window
{
this()
{
super("Şehirler");
this.setPosition = GtkWindowPosition.CENTER;
this.setDefaultSize(350, 70);
auto giriş = new Entry();
this.add(giriş);
auto tamamla = new EntryCompletion();
giriş.setCompletion(tamamla);
auto şehirler = new ListStore([ GType.STRING ]);
tamamla.setModel(şehirler);
tamamla.setTextColumn(0);
TreeIter gezici;
şehirler.append(gezici);
şehirler.setValue(gezici,0, "Ankara");
şehirler.append(gezici);
şehirler.setValue(gezici,0, "Eskişehir");
şehirler.append(gezici);
şehirler.setValue(gezici,0, "Erzurum");
şehirler.append(gezici);
şehirler.setValue(gezici,0, "Erzincan");
şehirler.append(gezici);
şehirler.setValue(gezici,0, "İstanbul");
şehirler.append(gezici);
şehirler.setValue(gezici,0, "İzmir");
this.addOnDestroy(delegate void(Widget w) { çıkış(); } );
showAll();
}
}
void çıkış()
{
Main.quit();
}
void main(string[] seçenekler)
{
Main.init(seçenekler);
Pencere pencere = new Pencere();
Main.run();
}
Uygulamayı şehir dizinin içinde iken dub ile derleyelim.
Uygulamayı çalıştırdığınızda şehirleri seçerek tamamlama yapabildiğinizi görebilirsiniz.

İlk önce ana.d kütüğüne aşağıdaki gibi bir ekleme yapıyoruz.
tamamla.setInlineCompletion(true);
Böylece kendiliğinden tamamlama etkinleşmiş oldu.
Yapacağımız bir diğer değişiklik ise şehirleri tek tek girmek yerine bir listeden okuyabiliriz.
Kaynak dizininde bulunan ana.d kütüğünü aşağıdaki gibi değiştirelim.
import gtk.Window;
import gtk.Main;
import gtk.Widget;
import gtk.Entry;
import gtk.EntryCompletion;
import gtk.TreeIter;
import gtk.ListStore;
import std;
class Pencere : Window
{
this()
{
super("Şehirler");
this.setPosition = GtkWindowPosition.CENTER;
this.setDefaultSize(350, 70);
auto giriş = new Entry();
this.add(giriş);
auto tamamla = new EntryCompletion();
tamamla.setInlineCompletion(true);
giriş.setCompletion(tamamla);
auto şehirler = new ListStore([ GType.STRING ]);
tamamla.setModel(şehirler);
tamamla.setTextColumn(0);
TreeIter gezici;
string[] liste = ["Ankara", "Eskişehir", "Erzurum", "Erzincan",
"İzmir", "Manisa", "Mersin"];
int[] sıfırlar = null;
foreach (l; liste)
{
sıfırlar ~= 0;
şehirler.append(gezici);
şehirler.set(gezici, sıfırlar, liste);
}
this.addOnDestroy(delegate void(Widget w) { çıkış(); } );
showAll();
}
}
void çıkış()
{
Main.quit();
}
void main(string[] seçenekler)
{
Main.init(seçenekler);
Pencere pencere = new Pencere();
Main.run();
}
Uygulamayı dub ile derleyip çalıştıralım.
Çalıştırdığımızda bu sefer listeden elemanı seçmeye gerek kalmadan tamamlıyor.

Ok tuşu ile tamamlama yapabiliyor.
Yorumlar