Vala uygulama ayarları

Bu derste Vala uygulama ayarlarını nasıl saklayabileceğimizi öğreniyoruz

Giriş

Bu derste Vala uygulama ayarlarını nasıl saklayabileceğimizi öğreneceğiz.

Allah'ın izni ile geliştirmekte olduğumuz Rize yazılımını göz önüne alalım.

Örneğin saat bilgisini saklayabiliriz.

Diyelim ki 5 dakikada değil, 3 dakikada saatin çalmasını ya da kullanıcıyı uyaracak şekilde bir yazılımı tetiklemesini istiyoruz.

İlk akla gelen yöntem bu ayarları basitçe bir metin kütüğüne yazıp okumak olabilir.

Vala ise bu iş için XML kütükleri kullanıyor. Daha sonra da derlenip ikili olarak erişilebiliyor.

Meson kullanarak uygulama ayarlarını derleme

Öncelikle meson kullanarak uygulama ayarlarını nasıl derleyebileceğimize bakalım.

Bunun için bir önce geliştirdiğimiz uygulamanın veri dizinindeki meson.build kütüğünü aşağıdaki gibi değiştirelim.

kaynaklar = gnome.compile_resources(
    uygulamaIsmi + '-resources',
    'rize.xml'
)

install_data('rize.gschema.xml', install_dir: get_option('datadir') / 'glib-2.0' / 'schemas')
meson.add_install_script('kur.py')

Burada sonradan eklediğimiz satırlardan ilki rize.gschema.xml ismindeki ayar kütüğünü bilgisayara kur diyor.

Bir sonraki satır ise ayarları derleyen kur.py isimli Python betiğini çalıştırmak istediğimizi belirtiyor.

Aynı dizinde kur.py ismi ile bu Python betiğini oluşturuyoruz.

#!/usr/bin/env python3

import os
import subprocess

ayarDizini = os.path.join(os.environ['MESON_INSTALL_PREFIX'], 'share', 'glib-2.0', 'schemas')

if not os.environ.get('DESTDIR'):
    print('Ayarlar derleniyor...')
    subprocess.call(['glib-compile-schemas', ayarDizini])

Gene veri dizininde rize.gschema.xml ismi ile ayar kütüğünü oluşturuyoruz.

<schemalist>
  <schema id="bir.cay.koy" path="/bir/cay/koy/">

    <key name="saat" type="s">
      <default>"03:15"</default>
      <summary>Alarm süresi</summary>
      <description>
        Saatin süresi
      </description>
    </key>

    <key name="ayarla" type="b">
      <default>false</default>
      <summary>Saati ayarlayacak mıyız?</summary>
      <description>
        Saati ayarlayacak mıyız?
      </description>
    </key>

  </schema>
</schemalist>

Ayar kütüğünde bulunan saat değişkeni dizge yani düz metin tutuyor. En sondaki s bunu ifade ediyor.

ayarla isimli değişken ise DOĞRU ya da YANLIŞ şeklinde ikili bir değer tutuyor.

Ayar kütüğünün başında bir.cay.koy gibi bir değer girilmiş.

Bunu gösterebilmek için öncelikle diğer derslerde anlatıldığı gibi meson kullanarak uygulamayı derleyiniz.

sudo ninja install

En sonunda da uygulamayı kurunuz.

Bu ayarları göstermek için dconf-editor isimli bir yazılımı kullanacağız. Eğer kurulu değilse kurunuz.

Vala uygulama ayarları

Anahtarları istersek değiştirebiliyoruz.

Uygulama ayarlarının karışmaması için böyle sıralı bir düzen geliştirilmiş.

Alarm süresini ayarlayalım

Daha önce geliştirdiğimiz uygulamada saatin süresine rastgele bir değer veriyorduk.

Bunun yerine bu ayarlardan okuyabiliriz.

Ayrıca kullanıcıya alarm süresini değiştirme imkanı sunabiliriz.

Örneğin kullanıcı a tuşuna basarsa uygulama ayarlama kipine girsin. Kullanıcının ayarladığı saat değerini saklayalım.

Bunun için kaynak dizinindeki rize.vala kütüğünü aşağıdaki gibi değiştiriniz.

using Gtk;
using Gdk;
using GLib;

[GtkTemplate (ui = "/bir/cay/koy/rize.glade")]
class Pencere : Gtk.Window
{
    public Pencere ()
    {
        ayarlar = new GLib.Settings("bir.cay.koy");
        saat.set_label(ayarlar.get_string("saat"));
        saatiAyarla = ayarlar.get_boolean("ayarla");
        show_all();
    }

    private GLib.Settings ayarlar;
    private bool saatiAyarla;

    [GtkChild]
    private unowned Label saat;

    private int saniyeyeCevir(string sure)
    {
        int dakika = sure.split(":")[0].to_int();
        int saniye = sure.split(":")[1].to_int();
        return dakika * 60 + saniye;
    }

    private string metneCevir(int sureDakika)
    {
        int dakika = sureDakika / 60;
        int saniye = sureDakika - dakika * 60;
        if (dakika > 9)
            if (saniye > 9)
                return (dakika.to_string() + ":" + saniye.to_string());
            else
                return (dakika.to_string() + ":" + "0" + saniye.to_string());
        else
            if (saniye > 9)
                return ("0" + dakika.to_string() + ":" + saniye.to_string());
            else
                return ("0" + dakika.to_string() + ":" + "0" + saniye.to_string());
    }

    private void saatiAzalt()
    {
        int simdikiSaat = saniyeyeCevir(saat.get_label());
        stdout.printf("Saati azaltıyorum\n");
        if (simdikiSaat != 0)
            simdikiSaat = simdikiSaat - 1;
        if (!saatiAyarla)
            stdout.printf("Şimdiki saat %s\n", metneCevir(simdikiSaat));
        saat.set_label(metneCevir(simdikiSaat));
        if (saatiAyarla)
            ayarlar.set_string("saat", metneCevir(simdikiSaat));
    }

    private void saatiArttir()
    {
        int simdikiSaat = saniyeyeCevir(saat.get_label());
        stdout.printf("Saati arttırıyorum\n");
        simdikiSaat = simdikiSaat + 1;
        if (!saatiAyarla)
            stdout.printf("Şimdiki saat %s\n", metneCevir(simdikiSaat));
        saat.set_label(metneCevir(simdikiSaat));
        if (saatiAyarla)
            ayarlar.set_string("saat", metneCevir(simdikiSaat));
    }

    [GtkCallback]
    private bool tusaBasildi(EventKey tus )
    {
        string tusIsmi = Gdk.keyval_name(tus.keyval);
        stdout.printf("%s tuşuna basıldı\n", tusIsmi);

        if (tusIsmi == "a" || tusIsmi == "A")
        {
            saatiAyarla = !saatiAyarla;
            if (saatiAyarla)
                stdout.printf(" - Saati ayarlama açık - \n");
            else
                stdout.printf(" - Saati ayarlama kapalı - \n");
        }

        if (tusIsmi == "minus" || tusIsmi == "KP_Subtract")
            saatiAzalt();
        if (tusIsmi == "plus" || tusIsmi == "KP_Add")
            saatiArttir();

        return true;
    }
}

int main (string[] secenekler)
{
    Gtk.init (ref secenekler);
    var pencere = new Pencere();
    pencere.destroy.connect(Gtk.main_quit);
    Gtk.main();
    return 0;
}

Ayarları silmek

Bir nedenden dolayı ayarları silmek isterseniz öncelikle ayar dizinine geliniz.

cd /usr/local/share/glib-2.0/schemas

Ayar kütüğünü siliyoruz.

sudo rm rize.gschema.xml

En sonunda tüm ayarları tekrar derliyoruz.

sudo glib-compile-schemas /usr/local/share/glib-2.0/schemas/

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 Ders6

komutu ile bu dersi indirebilirsiniz.

Dersi derlemek

rizeden dizinin içine giriniz.

cd rizeden

Öncelikle derleme yapacağımız dizini oluşturuyoruz.

meson setup oluştur

Sonra bu oluşturduğumuz dizine girelim.

cd oluştur/

Burada uygulamayı derleyip kurmak için

sudo ninja install

komutunu verebilirsiniz.

Artık uygulamaya rize yazarak erişebilirsiniz.

Uygulama çalışırken a tuşuna basarak alarm süresini değiştirmeyi deneyiniz.

Bilgisayarı kapatıp açtığınızda ayarlar saklanıyor mu?

Uygulamayı kaldırmak için aynı dizinin içinde

sudo ninja uninstall

komutu vermek yeterlidir.

Yorumlar

yorum yaz

Yorum yaz

Henüz yorum yok.