|  | 
        
            | 
                    
                        | Mono ile Glade Kullanımı |  |  
                        | 
	
    
		
            | Gönderiliyor lütfen bekleyin... | 
 |  | 
        
            | Mono ile program geliştirirken her şeyi container 
kontrollerinin kodları ile geliştirmemiz beklenemez. Zaten böyle bir yaklaşım 
hem anlamsız hem de zaman alıcı olur. Bu yüzden Mono ile form uygulamaları geliştiriken 
Linux’ta GUI(Graphical Unit Interface)’leri düzenlemek için kullanılan Glade kütüphanelerini 
kullanacağız. Şunu kesinlikle aklımızdan çıkarmamalıyız:Eğer Gnome,KDE gibi masaüstü 
yöneticilerine görsel program geliştiriyorsak Glade olmazsa olmazlar arasındadır. 
Bu yüzden ilk önce Glade’in ne olduğunu incelememiz gerekir. 
Glade nedir? 
 
  
 Glade’in logosundan da gördüğünüz gibi gtk+ için 
  arayüz tasarlamadan bahsediyor. Gtk+ gnome için kullandığımız button, label, 
  ve window gibi kontrollerden başka bir şey değil. Fakat aklımıza şöyle bir soru 
  gelebilir. Biz mono’da Gtk# kullanmıyor muyuz? Evet biz mono’da gtk# kullanıyoruz 
  ama gtk# ,gtk+’dan farklı bir yapı değil. Gtk+’ın gelişmiş bir versiyonu olarak 
  düşünebiliriz.
 
 Glade’in çalışma mantığı System.Windows.Form 
  isim uzayının kullanımından biraz farklı. Sonuçta biz windows formu kullandığımız 
  zaman System.Windows.Form kütüphanesini referans olarak belirtiyoruz. Kullanmak 
  istediğimiz kontrle ait nesneyi kaynak kod içinde yaratıp kullanıyoruz. Bu gerçekten 
  kullanım açısından şu andaki en kullanışlı durum. Glade ile arayüzü designer 
  kısmında tasarladıktan sonra bu arayüzü derliyoruz. Dikkat ederseniz 
  derliyoruz diyorum, çünkü gtk+ kontrollerinin de bir kaynak kodu var. 
  Bu kaynak kodlar şu an için C/C++,Ada95, Python & Perl dillerinde mevcut. 
  Fakat bunların hangi dilde derlendiğinden çok bizim kullandığımız programlama 
  dilinin glade’e desteğinin olup olmaması önemli. Peki destekten neyi kastediyoruz? 
  Glade ile derlediğimiz kaynak kodlar kendisine Xml’den oluşmuş bir harita da 
  oluşturur. Bu harita sayesinde kaynak kodumuz içinde kullandığımız sınıfı üzerinde 
  serilizasyon işlemi gerçekleştirerek bu işlemi yaparız. Bu serilizasyon işlemini 
  nasıl gerçekleştiriyoruz dediğinizi duyuyorum. Bunun için mono ile gelen Glade 
  isim uzayının XML sınıfının autoconnect methodunu kullanarak kolay 
  bir şekilde gerçekleştiriyoruz. Bu işlemleri adım adım diğer bölümde gerçekleştireceğiz.Burada 
  önemli olan çalışma mantığını anlamamızdır.
 
 Glade ile Programımızı Geliştiriyoruz:
 
 
  
 Eğer kullandığınız linuxta glade yüklü değilse 
   http://glade.gnome.org/download.html 
  adresine girerek ücretsiz olarak glade’i elde edebilirsiniz. Glade’i ilk açtıktan 
  sonra New project kısmını seçip yeni bir proje açalım. Bu ekranda proje tipinin 
  GTK+ mı yoksa GNOME’mu olduğu sorulmaktadır.
 
 
  
 Gtk+ ile uygulama geliştireceğimiz için yeni 
  bir Gtk+ projesi açalım. Açtığımız projede artık tasarıma başlayabiliriz.Tasarıma 
  başlamadan önce bir  Window eklememiz gerekli. Bunun için palette 
  menusunden aşağıdaki gibi window ekleyelim.
 
 
  
 Bu window’a ekleyeceğimiz her kontrol’ün hizalarını 
  VBox(vertical box) ve HBox(horizantol box) koyarak ayarlıyoruz. VBox ile dikey 
  sutunlar, HBox ile yatay satırlar oluşturuyoruz.VBox ve HBox’lar buttonları, 
  labelleri içerisinde taşıyarak görünümü ayarlamamızı sağlar. VBox’ın ve HBox’ın 
  özelliklerini rahatlıkla ayarlayabilmemizi sağlayan properties penceresi ise 
  aşağıdaki gibidir.
 
 
  
 Gerekli ekran tasarımını yaptıktan sonra formumuz(yani 
  window’umuz)aşağıdaki şekli aldı.
 
 
  
 Glade ile yazılım geliştirirken en fazla kullandığımız 
  özelliklerden birisi de sinyaller yani windows’taki adıyla event’ler. Event’leri 
  de signals kısmından ekleyerek Handler’ımızı ve kullanacağımız olayı ekliyoruz. 
  Mesela örneğimizdeki button’a clicked eventini aşağıdaki gibi ekliyoruz.
 
 
  
 Sinyal eklerken dikkat etmemiz gereken bir nokta 
  var; eğer eklediğimiz sinyalin handler’ ını kaynak kod içinde bulamazsa uygulama 
  serilizasyonu tamamlayamadan hata verir. Bu yüzden kullandığımız her sinyalin 
  mutlaka eventini belirtmemiz gerekir. Evet button’a clicked event’ini de eklediğimize 
  göre artık geliştirdiğimiz glade uygulamasını derleyebiliriz.
 
 
  
 
  
 İstersek kaynak kodların hangi dil ile derleneceğini 
  seçebiliriz. Ama biz burada XML serilizasyonu yapacağımız için glade arayüzünün 
  kaynak kodları bizi pek ilgilendirmiyor. Derlediğimiz kaynak kodlar beraberinde 
  bir XML dosyası oluşturuyor demiştik. İşte bu dosya .glade uzantılı dosyadır. 
  Bu dosya ile serilizasyon işlemini gerçekleştireceğiz. Evet şimdilik glade ile 
  işimiz bitti. Şimdi monodevelop IDE’mizden bir glade uygulaması açarak programımızın 
  içini dolduralım.
 
 
  
 Monodevelop ile açtığımız glade projesi beraberinde 
  resource’lara default(varsayılan) bir .glade dosyasını eklemektedir. Bu uygulamayı 
  derlediğimiz zaman boş bir pencerenin açılacağını görebiliriz. Varsayılan olarak 
  gelen bu .glade dosyasını kaldırıp yerine daha önce glade ile hazırlayıp derlediğimiz 
  dosyayı resource dosyalara ekliyoruz.
 
 
  
 Evet resource Files kısmına kendi 
  .glade dosyamızı ekledikten sonra XML serilizasyonunu yapacak kodumuzu inceleyelim. 
  Bu işlemi Mono’daki Glade isim uzayının metotlarını kullanarak yapacağız. Bunun 
  için using Glade ifadesini aşağıdaki gibi eklememiz gerekir.
 
 
 
	makale_glade.glade arayüzünü kodumuza 
  bağlarken, Glade isimuzayının XML class’ının resource olarak belirttiğimiz glade 
  dosyasınının ismini string olarak giriyoruz. Diğer parametreler ise (System.Reflection.Assembly,"glade 
  ismi.glade","window ismi","belirleyici adres"). Burada 
  bizim sadece glade ismi yazan kısma kendi glade projemizin ismini girmemiz yeterli. 
  Daha sonra yarattığımız nesnenin autoconnect metoduna  this anahtar kelimesini 
  parametre olarak vererek bu arayüzü bağlamış oluyoruz. Uygulamayı bu hali ile 
  derleyip çalıştırırsak aşağıdaki sonuç ile karşılaşırız.
		| using System; using Gtk;
 using Glade;
 
 public class GladeApp
 {
 public static void 
		Main(string[] args)
 {
 new 
		GladeApp(args);
 }
 public GladeApp(string[] args)
 {
 Application.Init();
 Glade.XML gxml=new Glade.XML(null,"makale_glade.glade","window1",null);
 gxml.Autoconnect(this);
 Application.Run();
 }
 public void 
		OnWindowDeleteEvent(object o,DeleteEventArgs args)
 {
 Application.Quit();
 args.RetVal=true;
 }
 }
 |  
 
  
 Peki neden hata aldık? Exception(istisna)’ı incelersek 
  handler bulamadığından bahsetmekte. Hatırlarsanız glade projesini hazırlarken, 
  buttonun clicked eventine bir metot bağlamıştık. Ama bu event’e ilişkin metodu 
  kaynak kodumuz içinde belirtmedik. Bu durum XML serilizasyonu sırasında ilgili 
  event’e ilişkin metot bulunmadığından bir exception oluşmasına neden oldu ve 
  uygulamamızın çalışması durdu. Bu yüzden aşadaki metodu kaynak kodumuza ekleyerek 
  bu hatayı önlüyoruz.
 
 
 
  Glade ile oluşturduğumuz projede clicked eventi 
  meydana geldiğinde çalaşacak metodun ismi on_OK_clicked olduğu 
  için aynı ismi kodumuzda da kullanmak zorundayız. Diyelimki on değilde 
  On şeklinde bir kullanım yaparsak sonuç olumsuz olacaktır. Kaynak kodumuza 
  eklediğimiz event’e ilişkin metottan sonra projemizi derledikten sonra aşadaki 
  gibi bir görüntü elde ederiz. 
    | void on_OK_clicked(object o,EventArgs args) { 
      //kodlar
 
 }
 |  
 
  
 Evet ,glade ile tasarladığımız arayüzü programımızda 
  kullanmayı başardık. Diyelim ki isim kısmındaki Entry’den değer almak istersek 
  bu Entry hangisi gibi bir soru aklımıza gelmesi doğaldır. Bu işlemide serilizasyon 
  sırasında belirttiğimiz Entry’ler ile sağlıyoruz şöyle ki:
 
 
 
  Gördüğümüz gibi serilizasyona koyduğumuz widget’lere 
  niteliklerini kazandırdık. Widget’lerin isimleri glade içinde hazırladığımız 
  isimler ile aynı olmak zorundadır. Ayrıca glade ile hazırladığımız arayuzde 
  bulunmayan bir widgeti serilizasyona katarsak bu widgetin nitelik kazanmayacağı 
  açıktır. 
    | using System; using Gtk;
 using Glade;
 
 public class GladeApp
 { 
               
        [Widget]Gtk.Button OK;
 [Widget]Gtk.Window 
        window1;
 [Widget]Gtk.Entry 
        entry1;
 [Widget]Gtk.Entry 
        entry2;
 public static void Main(string[] 
        args)
 {
 new GladeApp(args);
 }
 
 public GladeApp(string[] 
        args)
 {
 Application.Init();
 Glade.XML gxml=new Glade.XML(null,"makale_glade.glade","window1",null);
 gxml.Autoconnect(this);
 Application.Run();
 }
 
 void on_OK_clicked(object o,EventArgs args)
 {
 window1.Title=entry1.Text+" "+entry2.Text;
 entry1.Text="isim windowun başlığında";
 entry2.Text="soyad windowun başlığında";
 OK.Label="Bitti";
 }
 
 }
 
 }
 |  
 Programın bitmiş kodlarını derleyip çalıştırdığımız 
  zaman sonuç olarak;
 
 
  
 
  
 Mono ile Glade’in kullanımı bir hayli kolaylaşmış 
  durumda.Fakat ilerleyen zamanlarda Glade’in monodevelopa entegrasyonu sağlandığında 
  daha verimli çalışmasını beklemekteyim.
 
 
 
                Makale:Mono ile Glade Kullanımı Mono - Linux'ta .NET  Caner Şahan
 | 
        
            |  | 
        
            |  | 
        
            | 
                    
                        
                            
                        
                            Eklenen Son 10 
                            Bu Konuda Geçmiş 10 
                        
                            Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
                         
                            Son Eklenen 10 Makale Yükleniyor
                         
                            Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
                         | 
        
            |  |