“KDE Dialogs” ile Kabuk Programlama Mucizesi -2

“KDE Dialogs” ile Kabuk Programlama Mucizesi -1 için tıklayınız…

Dosyaların Görüntülenmesi

Kabuk programlama da ortak bir gereksinim de dosyaları listeleme ve görüntüleme kabiliyetidir. Kdialog bunu –textbox diyaloğu ile destekler. –textbox diyaloğunun zorunlu tek bir parametresi vardır. Bu da görüntülenecek dosyanın ismidir. Ayrıca iki adette tercihe bağlı parametresi vardır. Bunlar –textbox diyaloğunun boyutlarının kaç pixel olacağını ayarlamamıza olanak sağlar. Örneğin;

Örnek 21: –textbox diyalog kutusu

Öncelikle bir metin belgesi içerisine birşeyler yazın… Ben “pardus” isimli bir belge oluşturdum.

$ kdialog --textbox pardus

Figür 16 –textbox Diyalog Kutusu

Örnek 22: boyutları ile –textbox diyaloğu

$ kdialog --textbox pardus 400 400

Figure 17 Boyutları ile –textbox Diyaloğu

Menü ve Seçim Diyalogları

Bu bölüm basit menüleri kapsamaktadır. Kontrol listeleri, radyo butonlar ve çoklu kutular (checklists, radio buttons, combo-boxes). Bu menüler bir seçenek yelpazesi sunar. Her seçenek iki argüman gerektirir. İlki seçilmesi düşünülen bilginin anahtarı, ikincisi etiketi. Şöyle ki;

Örnek 23 –menu diyalog kutusu

$ kdialog --menu "Select a language:" a "American English" b French c "Oz' English" d "Türkçe"

Figür 18 –menu Diyalog Kutusu

Eğer Figür 18 de görüldüğü gibi “Türkçe” yi seçerseniz. Kdialog “Türkçe” için belirtilen değeri çıktı olarak gönderecektir. Yani “d” yi. Küçük harf veya harf kullanmak zorunda değilsiniz. Büyük harf veya sayılar da kullanabilirsiniz. Hatta değişken niteliği taşıyan sözcükler de kullanabilirsiniz.

Eğer örneğimiz de “Tamam” butonuna tıklarsak dönen değer “0” “İptal” butonunu seçersek dönen değer “1” olacaktır.

Kontrol listesi (checklist) diyaloğu da menü seçeneği ile benzerdir. Bu seçeneğin farkı ise kullanıcı birden fazla seçim yapabilir. –checklist diyaloğu üç argümana gereksinim duyar. İlki gönderilecek değer /değişken, ikincisi etiket ve sonuncusu ise varsayılan seçim. Şöyle ki;

Örnek 24 –checklist diyalog kutusu

$ kdialog --checklist "Select a language:" 1 "American English" off 2 "French" off 3 "English" off 4 "Türkçe" on

Figür 19 –checklist Diyalog Kutusu

Sonuç olarak kullanıcı bu diyalog ile birden fazla seçim yapabilecektir. Eğer bu durumda birden fazla seçim yapılırsa, gönderilen çıktı tek satır üzerinde bitişik değerlerle olacaktır. Bu seçili değerleri ayırmamız için –separate-output parametresini kullanmamız gerekecektir. Şöyleki ;

Örnek 25: –checklist diyalog kutusu
İlk durum için ;

$ kdialog --checklist "Select a language:" 1 "American English" off 2 "French" off 3 "English" off 4 "Türkçe" on

Çıktı;

"1" "2" "3" "4"

2. durum için;

$ kdialog --separate-output --checklist "Select a language:" 1 "American English" off 2 "French" off 3 "English" off 4 "Türkçe" on

Çıktı;

1
2
3
4

Menu diyaloğunda da olduğu gibi. Eğer örneğimiz de “Tamam” butonuna tıklarsak dönen değer “0” “İptal” butonunu seçersek dönen değer “1” olacaktır.

–radiolist diyaloğu kontrol listesi diyaloğu ile çok benzerdir. Fakat bu diyalogda kullanıcı yalnızca bir seçenek seçebilir. Şöyle ki;

Örnek 26: –radiolist diyalog kutusu

$ kdialog --radiolist "Select a language:" 1 "American English" off 2 "French" off 3 "English" off 4 "Türkçe" on

Figür 20. –radiolist Diyalog Kutusu

Not: Eğer birden fazla seçeneği seçili tutmak istediğiniz zaman, sadece son seçenekte seçili olan değer seçili gelecektir. Eğer hiçbir seçeneği seçili ayarlamadığınız taktirde kullanıcı “Tamam” a tıklarsa ilk değer varsayılan olarak seçilmiş olacaktır. Lütfen bu tür durumlara dikkat ediniz ve bu şekilde kullanmaktan kaçınınız.

Combo-box diğer menü diyaloglardan biraz farklıdır. Bu seçeneği kullanabilmek için seçimin yerini tutan değişken veya değerler kullanmayız, sadece metini yazmamız yeterlidir. Şöyle ki;

Örnek 27: –combobox diyalog kutusu

$ kdialog --combobox "Neli pasta seversiniz?" "Vanilyalı" "Kremalı" "Çikolatalı" "Çilekli" "Sade" "Pasta Sevmem" "Diğer"

Figür 21 –combobox Diyalog Kutusu

Dosya Seçim Diyalogları

Bu bölüm kdialog ile “dosya seçmek”, “açmak” ve “kaydetmek” konularını kapsamaktadır. KDE dialogs bize ileri filtreleme teknikleri ile dosya yollarına ve URL’ lere erişim konusunda büyük kolaylıklar sağlayacaktır.

Dosya seçim diyaloğu ile dosya açmak -getopenfilename veya –getopenurl komutları ile yapılmaktadır. Bu iki komut da aynı amaç için kullanılır. Sadece çıktının formatı değişir. Her iki komutta burada örneklendirilecektir. Dosya taramak için özel bir klasör seçebilirsiniz. Ve bir filtreleme kullanabilirsiniz. Burada bulunulan klasörde ,filtreleme kullanmadan basit bir örnek verecek olursak;

Örnek 28: –getopenfilename diyalog kutusu

kdialog --getopenfilename ./

Figür 22 –getopenfilename Diyaloğu

Önceki örneklerde olduğu gibi. Eğer örneğimiz de “Tamam” butonuna tıklarsak dönen değer “0” “İptal” butonunu seçersek dönen değer “1” olacaktır.

Bahsettiğimiz üzere, –getopenfilename ve –getopenurl komutları arasındaki çıktı formatları şu şekilde farklılık gösterir.

Örnek 29: –getopenfilename diyalog kutusu

$ kdialog --getopenfilename ./ 

Çıktı;

/home/professor/Belgeler/aegron.jpg

Komut ;

$ kdialog --getopenurl ./

Çıktı;

file:///home/professor/Belgeler/aegron.jpg

Basit görünümden sonra filtre seçeneklerine bakalım. Bunlardan en iyi bileni MIME tipi filtrelemedir. Şöyle ki;

Örnek 30: MIME filtresi ile –getopenfilename diyalog kutusu


$ kdialog --getopenfilename ~/Masaüstü/ "image/png text/html text/plain"

Figür 23 MIME filtresi ile –getopenfilename Diyalog Kutusu

Eğer MIME ile istediğiniz tür mümkün olmaz ise. Filtrelemeyi wildcards ile yaparak,  yeni etiket ekleyebilirsiniz. Şöyle ki;

Örnek 31: wildcard filtresi ile –getopenfilename diyalog kutusu

kdialog --getopenfilename ~/Masaüstü/ "*.cpp *.cc *.c |C ve C++ Kaynak Dosyaları"

Figür 24 wildcard filtresi ile –getopenfilename Diyalog Kutusu

–getsavefilename ve –getsaveurl komutları dosya açım komutları ile benzerdir. Şöyle ki;

Örnek 34. –getsavefilename diyalog kutusu

$ kdialog --getsavefilename .

Figür 25 –getsavefilename Diyalog Kutusu

Kullanıcı kaydedilecek dosyanın türünü MIME ve wildcards filtreleme seçeneklerinde olduğu gibi belirleyebilir. Şöyle ki;

Örnek 33: filtre ile –getsavefilename diyalog kutusu

$ kdialog --getsavefilename :label1  "*.cpp *.cc *.c |C ve C++ Kaynak Dosyaları"

Figür 26 Filtre ile –getsavefilename Diyalog Kutusu

Bazen dosya ismini özelleştirmek istemeyiz fakat, özel bir klasöre ihtiyaç duyarız. Bunun için getexistingdirectory komutu bizim için kullanışlı olabilir. Şöyle ki;

Örnek 34 –getexistingdirectory diyalog kutusu

$ kdialog --getexistingdirectory .

Figür 26. –getexistingdirectory diyalog kutusu

Not: –getexistingdirectory filtreleme seçeneği sunmaz .

İlerleme(Progress) Diyaloğu

İlerleme çubuğu diyaloğu bir işlem uzun süre alacağı zaman kullanışlı bir GUI bileşenidir. Ve bu sayede, kullanıcıya ne olup bittiği hakkında bilgi sunmamıza da olanak sağlar. Böylece kullanıcıyı da makinanın donup kalmış olma ihtimalini düşündürmek zorunda bırakmayız. Eğer yapılan işlem hakkında yazacak bir şey bulamıyorsanız şunu yazmanızı öneririz. “Bu işlem uzun sürebilir…”. Eğer böyle bir durumla karşılaşırsanız, ilerleme çubuğu sizin için biçilmiş kaftandır diyebiliriz…

–progressbar komutunun basit bir kullanım şekli aşağıda ki gibidir.

Örnek 35: –progressbar diyalog kutusu

Terminalde ;

$ nano ilerleme_cubugu.sh

komutunu veriniz ve karşınıza gelen editörde aşağıdaki satırları yapıştırınız.


#!/bin/bash

dcopRef=`kdialog --progressbar "Kuruluyor..." 4`

dcop $dcopRef setProgress 1

dcop $dcopRef setLabel "Düşünmek gerçekten zor..."

sleep 2

dcop $dcopRef setProgress 2

sleep 2

dcop $dcopRef setLabel "Biraz daha düşünelim"

dcop $dcopRef setProgress 3

sleep 2

dcop $dcopRef setProgress 4

sleep 2

dcop $dcopRef close

Sonra ;

$ chmod +x ilerleme_cubugu.sh
$ ./ilerleme_cubugu.sh

komutunu veriniz. Çalışması gerekiyor ama ben de çalışmadı. Pardus 2009.1 de ilerleme çubuğu geldi fakat ilerlemedi:) “dcop: command not found” hatası aldım. Dcop komutu bulunamadı. Bunu araştıracağım. Geçelim…(YK)

Örnek 36: İptal ile –progressbar diyalog kutusu

Örnek 36 D-Bus kullanılarak ;

Terminalde;

$ nano ilerleme_cubugu_dbus.sh 

Karşınıza gelen nano editöre aşağıdaki satırları yapıştırınız.


#!/bin/bash

dbusRef=`kdialog --progressbar "Dilediğiniz zaman İptal butonuna tıklayınız" 10`

qdbus $dbusRef showCancelButton true

until test "true" = `qdbus $dbusRef wasCancelled`; do

sleep 1

inc=$((`qdbus $dbusRef Get "" "value"` + 1))

qdbus $dbusRef Set "" "value" $inc;

done

qdbus $dbusRef close 
$ chmod +x  ilerleme_cubugu_dbus.sh

$ ./ilerleme_cubugu_dbus.sh

Figür 27 İptal ile –progressbar Diyalog Kutusu

Burada görüldüğü gibi sadece dbus’lı ilerleme çubuğu çalıştı. Benim tercihim de muhtemelen İptal seçeneği olduğu için bu olacak. Aşağıdaki betikte de “dcop” komutu olduğu için Pardus 2009.1 de çalışmayacaktır. Bu yüzden “Örnek 36 D-Bus kullanılarak” betiğini tercih ediniz.(YK)

Örnek 36 eski DCOP  kullanarak;

#!/bin/bash

dcopRef=`kdialog --progressbar "Press Cancel at Any time" 10`
dcop $dcopRef showCancelButton true
until test "true" = `dcop $dcopRef wasCancelled`; do
	sleep 1
	inc=$((`dcop $dcopRef progress` + 1))
	dcop $dcopRef setProgress $inc;
done
dcop $dcopRef close

Bu doküman ile artık KDE ortamında kabuk programlama daha zevkli hale gelecektir. Daha fazlası için aşağıda ki komutu veriniz.

$ kdialog --help

Kullanım: kdialog [Qt-seçenekleri] [KDE-seçenekleri] [seçenekler] [arg]

KDialog, kabuk betikleri kullanarak güzel görünümlü pencereler oluşturmanızı sağlar.

Genel seçenekler:

  --help                    Seçeneklerle ilgili yardım göster

  --help-qt                 Qt ile ilgili seçenekleri göster

  --help-kde                KDE ile ilgili seçenekleri göster

  --help-all                Tüm seçenekleri göster

  --author                  Yazar bilgisini göster

  -v, --version             Sürüm bilgisini göster

  --license                 Lisans bilgisini göster

  --                        Seçeneklerin sonu

Seçenekler:

  --yesno <text>            Evet/hayır düğmeleri içeren soru penceresi

  --yesnocancel <text>      Evet/hayır/iptal düğmeleri içeren soru penceresi

  --warningyesno <text>     Evet/hayır düğmeleri içeren uyarı penceresi

  --warningcontinuecancel <text> Devam/iptal düğmelerini içeren uyarı penceresi

  --warningyesnocancel <text> Evet/hayır/iptal düğmelerini içeren uyarı penceresi

  --sorry <text>            'Üzgünüm' mesaj kutusu

  --error <text>            'Hata' mesaj kutusu

  --msgbox <text>           Mesaj Kutusu penceresi

  --inputbox <text> <init>  Girdi Kutusu penceresi

  --password <text>         Parola penceresi

  --textbox <file> [width] [height] Metin Kutusu penceresi

  --textinputbox <text> <init> [width] [height] Metin Girdi Kutusu penceresi

  --combobox <text> item [item] [item] ... Açılır Kutu penceresi

  --menu <text> [tag item] [tag item] ... Menü penceresi

  --checklist <text> [tag item status] ... Onay Listesi penceresi

  --radiolist <text> [tag item status] ... Radyo Listesi penceresi

  --passivepopup <text> <timeout> Pasif Açılabilir Pencere

  --getopenfilename [startDir] [filter] Mevcut bir dosyayı açmak için dosya penceresi

  --getsavefilename [startDir] [filter] Bir dosyayı kaydetmek için kaydet penceresi

  --getexistingdirectory [startDir] Mevcut bir dizini seçmek için dosya penceresi

  --getopenurl [startDir] [filter] Mevcut bir URL açmak için dosya penceresi

  --getsaveurl [startDir] [filter] Bir URL kaydetmek için dosya penceresi

  --geticon [group] [context] Simge seçme penceresi

  --progressbar <text> [totalsteps] İlerleme çubuğu penceresi, iletişim için bir D-Bus referansı döndürür

  --getcolor                Renk seçmek için renk penceresi

  --title <text>            Pencere başlığı

  --default <text>          Çoklu kutucuk, menü ve renk için öntanımlı girdi

  --multiple                Birden fazla dosya için  --getopenurl ve --getopenfilename seçeneklerine izin verir

  --separate-output         Liste ögelerini ayrı satırlarda döndür (işaretleme listesi seçeneği ve --multiple ile dosya açmak için)

  --print-winid             Her pencerenin pencere numarasını çıkartır

  --dontagain <file:entry>  "bir daha gösterme/sorma"  durumunu kaydetmek için yapılandırma dosyası ve seçenek adı

  --slider <text> [minvalue] [maxvalue] [step] Ayırıcı kutu penceresi, seçilen değeri döndürür

  --calendar <text>         Takvim kutu penceresi, seçilen günü döndürür

  --attach <winid>          Pencereyi, pencere numarası belirtilen X uygulaması için geçici yapar

Argümanlar:

  arg                       Argümanlar

Görüldüğü gibi artık önümüzde hiçbir engel kalmadı. Bu çalışma umarım gelecekte bu alanda çalışma yapacak herkese fayda sağlar. Kdialogs ile hepinize iyi çalışmalar diliyorum.

Çeviren ve Derleyen: Yücel KILIÇ

http://yamci.com

Telif Hakkı ve Lisans

Bu dökümanın telif hakkı Brad Hards’a aittir. 2003, 2004.

Bu doküman GNU Ücretsiz Dökümantasyon Sürüm 1.1 Lisansı ile lisanlanmıştır.

KAYNAK

http://techbase.kde.org/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs

kdialog –getopenfilename ./
/home/professor/Belgeler/aegron.jpg
kdialog –getopenurl ./
file:///home/professor/Belgeler/aegron.jpg