Vala ile Rize çayı uygulaması

Vala ile Rize çayı uygulaması

Giriş

Vala öğrenme amacı ile geliştirdiğimiz basit yazılım Allah'ın izni ile daha önce geliştirdiğimiz Rize isimli yazılıma benzedi.

Rize çayı uygulaması

Öncelikle uygulamanın kaynak kodu ile başlayalım.

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

using Gtk;
using Gdk;
using GLib;
using Posix;

[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");
        uygulama = ayarlar.get_string("uygulama");
        GLib.Timeout.add(1000, saatiAzalt);
        show_all();
    }

    private GLib.Settings ayarlar;
    private bool saatiAyarla;
    private string uygulama;

    [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 bool saatiAzalt()
    {
        int simdikiSaat = saniyeyeCevir(saat.get_label());

        // 10 saniye kala saati gizle
        if (simdikiSaat < 10)
            this.visible = false;

        if (simdikiSaat != 0)
            simdikiSaat = simdikiSaat - 1;
        else
        {
            Posix.system(uygulama);
            return false;
        }

        saat.set_label(metneCevir(simdikiSaat));
        if (saatiAyarla)
        {
            ayarlar.set_string("saat", metneCevir(simdikiSaat));
            return false;
        }
        return true;
    }

    private void saatiArttir()
    {
        int simdikiSaat = saniyeyeCevir(saat.get_label());
        simdikiSaat = simdikiSaat + 1;

        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);

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

        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;
}

Uygulamanın kaynak kodunun açıklaması

Daha önce kullanıcı saati + ve - tuşlarını kullanarak arttırıp azaltabiliyordu.

Burada şu işleve dikkat ediniz.

    GLib.Timeout.add(1000, saatiAzalt);

Bu işlev her 1 saniyede, bir diğer ifade ile 1000 mili saniyede saatiAzalt işlevini çağırıyor.

saatiAzalt işlevi true döndürdüğü sürece her bir saniyede saati azaltmaya devam ediyor.

Ama hatırlayabileceğiniz üzere kullanıcı a tuşuna basarak ayar yapabiliyordu.

    if (saatiAyarla)
    {
        ayarlar.set_string("saat", metneCevir(simdikiSaat));
        return false;
    }

Burada eğer saati ayarlama kipine geçmiş isek false döndürüyoruz. Böylece bu zamanlayıcı iptal oluyor.

Kullanıcı önceki derslerde olduğu gibi saati ayarlayabiliyor.

10 saniye kala saati gizliyoruz.

    // 10 saniye kala saati gizle
    if (simdikiSaat < 10)
        this.visible = false;

Eğer şimdiki saat 0 değil ise saati azaltmaya devam ediyor. Eğer 0 ise uygulama isimli uygulamayı çalıştırıyor.

    if (simdikiSaat != 0)
        simdikiSaat = simdikiSaat - 1;
    else
    {
        Posix.system(uygulama);
        return false;
    }

Uygulama ayarları bölümüne uygulama isimli yeni bir anahtar ekledik. Bu anahtar süre bitince çalışacak uygulamayı gösteriyor.

    uygulama = ayarlar.get_string("uygulama");

Varsayılan olarak süre tamamlanınca dairesel isimli bir betiği çalıştırıyor. Ama dilerseniz değiştirebilirsiniz.

Kaynak dizinindeki değişiklikler

Uygulamanın kaynak dizinindeki meson.build kütüğüne aşağıdaki gibi bir ekleme yaptık.

install_data(
    'dairesel',
    install_dir: get_option('bindir')
)

Bu ifade dairesel ismi betiği çalıştırılabilir dizine kopyalamasını söylüyor.

Aynı dizinde çaycı ve dairesel isimli iki tane betik ekledik.

Bunlardan dairesel isimli betik basitçe fareyi ekranda döndürüyor.

Uygulamanın çalışma şekli gereği fare dönerken durdurabilmeliyiz.

Uygulamayı çaycı isimli betik kullanarak çağırıyoruz ki uygulama çalışmıyorsa çalıştırsın, çalışıyor ise sonlandırsın.

Veri dizininde değişiklikler

Veri dizininde bulunan meson.build kütüğüne uygulama simgesini ve *.desktop uzantılı kütüğü kuran eklemeler yaptık.

Uygulamanın farklı büyüklükteki 16'dan başlayarak 128'e kadar simgelerini ekledik.

Veri dizininde bulunan rize.desktop kütüğü uygulama hakkında bilgiler içeriyor.

[Desktop Entry]
Type=Application
Icon=rize
Name=rize
Exec=rize
Terminal=false
Hidden=false
Categories=Utility;Clock;
Comment=Rize çayı uygulaması

Örneğin hangi simgeyi tutacağı bilgisini içeriyor.

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 Ders7

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.

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

sudo ninja uninstall

komutu vermek yeterlidir.

Uygulama için kısayol oluşturmak

Eğer Gnome ya da Budgie masa üstü kullanıyorsanız uygulama için kısayol oluşturabilirsiniz.

Diğer masa üstleri için de benzer şekilde kısayol oluşturabilirsiniz.

Ayarlar bölümünden Klavye bölümünü bulunuz.

En altta bulunanKısayolları Gör ve Özelleştir bölümüne tıklayınız.

Tekrar en alta gelip buradan Özel Kısayollar bölümüne tıklayınız. Buradan + işaretine basınız.

Ad bölümüne Çaycı

Komut bölümüne çaycı giriniz.

Daha sonra Kısayol Ayarla tuşuna basınız.

Ctrl - Alt - R tuşlarına beraber basınız.

Ekle tuşuna basınız.

Rize uygulaması için kısayol

Artık Ctrl - Alt - R tuşlarına beraber bastığınızda Rize uygulaması başlayacak.

Uygulamanın çalışmasını iptal etmek için ya da farenin dönmesini durdurmak için Ctrl - Alt - R tuşlarına tekrar basınız.

Yorumlar

yorum yaz

Yorum yaz

Henüz yorum yok.