Bu derste Vala ile kaynak kullanımını izah etmeye çalışacağız
Bu derste Vala ile kaynak kullanımını izah etmeye çalışacağız.
Glade isimli yazılımla çay uygulamasının penceresini tasarladık.
Tasarımı rize.glade
olarak kaydediniz.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkWindow" id="pencere">
<property name="can-focus">False</property>
<property name="title" translatable="yes">Çay</property>
<property name="window-position">center</property>
<property name="default-width">320</property>
<child>
<object class="GtkBox" id="kutu">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="saat">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">69</property>
<property name="margin-bottom">69</property>
<property name="label" translatable="yes">00:00</property>
<property name="justify">center</property>
<attributes>
<attribute name="scale" value="5"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
Aşağıdaki resimde daha net görülebilir.
Burada bir penceremiz var. Pencerenin içinde nesneleri tutan bir kutu var. Kutunun içinde ise bir etiket var.
Tasarım bu kadar basit.
Pencerenin başındaki object
kelimesi pencerenin de bir nesne olduğunu belirtiyor.
Nesnelere erişmek için aşağıdaki örneği rize.vala
ismi ile kaydediniz.
using Gtk;
int main(string[] secenekler)
{
Gtk.init (ref secenekler);
var kurucu = new Builder();
kurucu.add_from_file("rize.glade");
var pencere = kurucu.get_object("pencere") as Window;
var saat = kurucu.get_object("saat") as Label;
saat.set_label("07:10");
pencere.show_all();
pencere.destroy.connect(Gtk.main_quit);
Gtk.main();
return 0;
}
Burada saati değiştiriyoruz.
valac --pkg gtk+-3.0 --pkg gmodule-2.0 rize.vala -o rize
Uygulamayı derlemek için yukarıdaki komutu veriniz.
Uygulamayı çalıştırdığınızda saatin gerçekten de değiştiğini görebilirsiniz.
Saati 07:10
yapan kısmı yorum haline getirip tekrar uygulamayı derleyiniz.
Uygulamayı tekrar çalıştırırsanız saatin 00:00
olduğunu ve başlığın Rize
olduğunu görebilirsiniz.
Uygulama içinde bunlara değer vermedik.
Açık olarak new
anahtar kelimesi ile nesne oluşturmadık.
Bunun yerine kaynakta object
anahtar kelimesi ile tanımlanmış pencere
ve saat
isimli nesneleri alıp uygulamaya ekledik.
Eğer uygulamayı *.glade
uzantılı kütük olmadan başka bir yere kopyalarsanız hata verecektir.
Kaynakları belirtmek için bir xml kütüğü oluşturuyoruz.
İsmine rize.xml
veriniz.
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/bir/cay/koy">
<file compressed="true" preprocess="xml-stripblanks">rize.glade</file>
</gresource>
</gresources>
Daha sonra kaynakları C koduna gömmek için aşağıdaki komutu veriniz.
glib-compile-resources --generate-source --target rize.c rize.xml
Önceki uygulamada kurucu bir kütükten nesneleri getiriyordu.
Bu sefer kurucuyu kaynaktan okuyarak oluşturuyoruz.
rize.vala
kütüğünü aşağıdaki gibi değiştiriniz.
using Gtk;
int main(string[] secenekler)
{
Gtk.init (ref secenekler);
var kurucu = new Builder.from_resource("/bir/cay/koy/rize.glade");
var pencere = kurucu.get_object("pencere") as Window;
var saat = kurucu.get_object("saat") as Label;
saat.set_label("07:10");
pencere.show_all();
pencere.destroy.connect(Gtk.main_quit);
Gtk.main();
return 0;
}
Oluşturduğumuz C kaynak kütüğü ve xml dosyasını derleyiciye geçiyoruz.
valac --pkg gtk+-3.0 --pkg gmodule-2.0 --gresources=rize.xml rize.c rize.vala -o rize
Artık uygulamanın çalıştırılabilir kütüğünü farklı yerlere kopyalasanız bile çalışacaktır.
Çünkü kaynakları uygulamaya gömmüş olduk.
Uygulamanın kaynağını buradan indirebilirsiniz.
Eğer git kullanarak indirmek indirmek isterseniz
git clone https://codeberg.org/erdem/rizeden.git --branch Ders3
komutu ile bu dersi indirebilirsiniz.
Yorumlar