Vala kaynak kullanımı

Bu derste Vala ile kaynak kullanımını izah etmeye çalışacağız

Giriş

Bu derste Vala ile kaynak kullanımını izah etmeye çalışacağız.

Basit bir pencere tasarımı

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.

Vala kaynak ekleme

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 vala ile erişmek

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.

Vala kaynak ekleme

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ı C koduna gömme

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 kaynak kodu

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

yorum yaz

Yorum yaz

Henüz yorum yok.