Bu derste Vala uygulama ayarlarını nasıl saklayabileceğimizi öğreniyoruz
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.
Ö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.
Anahtarları istersek değiştirebiliyoruz.
Uygulama ayarlarının karışmaması için böyle sıralı bir düzen geliştirilmiş.
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;
}
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 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.
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