Ruby ile GUI Toolkits – 2 (Güncellendi)

Merhabalar arkadaÅŸlar,

Bu yazımızda Ruby ile GUI Toolkits – 1 (VRuby) ile baÅŸlattığımız akımı devam ettiriyoruz. Geçen yazımızda konuya giriÅŸ yapmış daha sonra VRuby ile ilgili güzel bir örnek yapmıştık. Bugün Fox isimli kütüphaneye deÄŸineceÄŸiz. Fox kütüphanesinin Ruby (FxRuby), FxPy (Python), EiffelFox (Eiffel) dillerine baÅŸlayıcıları(bindings) bulunan ve pek çok iÅŸletim sisteminde çalışan bir uygulama olduÄŸunu belirtmek gerekir. Yazılımların oluÅŸturulması her ne kadar Windows’a benzemese de, sonuç yani görünüm gerçekten Windows’a çok benziyor.. Ä°yi mi, kötü mü, ben bilemem ama benziyor..?

FxRuby, form designer‘ı, dökümantasyonu ve kullanıcı kılavuzu bulunan, gerçekten güzel ve geliÅŸmiÅŸ bir kütüphanedir. VRuby gibi deÄŸildir… Hız ve kolaylık acısından VRuby, FxRuby’i açık ara geride bırakır :). Fakat elbetteki FxRuby’nin birçok iÅŸletim sisteminde çalışması bir avantaj olarak kabul edilebilir.

Windows iÅŸletim sisteminde kurmak için, sadece “One-Click Ruby Installer” yeterli. Fakat bu yazının yazıldığı tarihlerde “One-Click Ruby Installer” içerisinde gelen FxRuby’nin 1.6.1 sürümünde bazı problemler mevcut. Herhangi bir FxRuby programı çalıştırdığınızda bir çok ‘warning’ ile karşılacaksınız. Bu sorunu gidermek için ‘gem update –include-dependencies fxruby‘ komutunu uygulayarak FxRuby kütüphanesini (ÅŸu anki sürümü)1.6.5’e güncellenmesi gerekir.

Linux için, “gem” kullanarak FxRuby’yi kurmak yeterli. Kurulumu basit olan kütüphaneleri kim sevmez :).

Bu yazımda örnek vermek pek içimden gelmedi ama gene de bir tane verdim :). Ama bu örneklere bakmanızı tavsiye ederim. Gerçekten çok güzel örnekler mevcut.
FxRuby’nin VRuby’den farkıdır. VRuby’nin Visual Basic’e benzerken, FxRuby’de çalışmak daha farklıdır. Bu nedenle biraz nasıl kullanıldığından bahsetmek gerekir;

FxRuby’de tüm iÅŸlemler bir ‘MainWindow’ ile baÅŸlar. MainWindow’un üzerinde yer alacak nesneler Html’de olduÄŸu gibi dizilirler. Genelde temel kanı, öncelikle bir VerticalFrame açıp var olan formu saÄŸdan sola doÄŸru bölmek olur. Bu iÅŸlemden sonra HorizontalFrame ile önceden saÄŸdan sola doÄŸru bölünmüş olan form yukarıdan aÅŸağıya doÄŸru da bölünür. Daha sonra bu iki iÅŸlemle ızgara haline gelmiÅŸ olan form üzerine Button, TextField, Label gibi elementler eklenir.
AÅŸağıda yer alan örnek foxGUIb 0.7.1 ile libGUIb16 aracılığı ile yapılmıştır. Bu nedenle bu programı çalıştırabilmek için FxRuby’nin yanında libGUIb16 kütüphanesinin de sistemde kurulu olması gerekir. Ä°ÅŸte bizim örneÄŸimiz;
[ruby]
# source generated by foxGUIb 0.7.1

class FxTest
def initialize( parent)
construct_widget_tree( parent)
init if respond_to? ‘init’
end

def construct_widget_tree( parent)
@topwin=
FX::MainWindow.new(parent){|w|
@fxTest=w
w.wdg_name=’fxTest’
w.width=261
w.shown=true
w.y=357
w.height=119
w.title=”Test – 01″
w.x=319
FX::VerticalFrame.new(@fxTest){|w|
@verticalframe1=w
w.wdg_name=’verticalframe1′
w.width=261
w.height=119
FX::HorizontalFrame.new(@verticalframe1){|w|
@horizontalframe2=w
w.wdg_name=’horizontalframe2′
w.width=261
w.height=38
FX::VerticalFrame.new(@horizontalframe2){|w|
@verticalframe2=w
w.wdg_name=’verticalframe2′
w.width=80
w.height=38
w.layoutHints=3104
FX::Label.new(@verticalframe2){|w|
@label1=w
w.wdg_name=’label1′
w.text=”User Name”
w.width=56
w.y=10
w.height=17
w.layoutHints=36
w.x=24
}
}
FX::VerticalFrame.new(@horizontalframe2){|w|
@verticalframe3=w
w.wdg_name=’verticalframe3′
w.width=181
w.height=38
w.layoutHints=3104
w.x=80
FX::TextField.new(@verticalframe3){|w|
@userName=w
w.wdg_name=’userName’
w.width=126
w.y=9
w.height=19
w.numColumns=20
w.layoutHints=32
}
}
}
FX::HorizontalFrame.new(@verticalframe1){|w|
@horizontalframe1=w
w.wdg_name=’horizontalframe1′
w.width=261
w.y=38
w.height=81
FX::VerticalFrame.new(@horizontalframe1){|w|
@verticalframe4=w
w.wdg_name=’verticalframe4′
w.width=153
w.height=81
FX::Button.new(@verticalframe4){|w|
@sayHello=w
w.wdg_name=’sayHello’
w.text=”Say Hello…!”
w.width=100
w.y=20
w.height=40
w.layoutHints=808
w.x=26
@sayHello.connect(Fox::SEL_COMMAND){
Fox::FXMessageBox.information(parent, Fox::MBOX_OK, “Test – 01”, “Hi, #{userName.text}”)
}
}
}
FX::VerticalFrame.new(@horizontalframe1){|w|
@verticalframe5=w
w.wdg_name=’verticalframe5′
w.width=108
w.height=81
w.x=153
FX::Button.new(@verticalframe5){|w|
@close=w
w.wdg_name=’close’
w.text=”Close”
w.width=70
w.buttonButtonStyle=67108864
w.y=20
w.height=40
w.layoutHints=808
w.x=19
@close.connect(Fox::SEL_COMMAND){
exit if Fox::FXMessageBox.information(parent, Fox::MBOX_OK_CANCEL, “Test – 01”, “Are you sure ?”) == Fox::MBOX_CLICKED_OK
}
}
}
}
}
@fxTest.connect(Fox::SEL_CLOSE){
@fxTest.close if Fox::FXMessageBox.information(parent, Fox::MBOX_OK_CANCEL, “Test – 01”, “Are you sure ?”) == Fox::MBOX_CLICKED_OK
}
}
end
attr_reader :topwin, :fxTest, :verticalframe1,:horizontalframe2,:verticalframe2,:label1,:verticalframe3
attr_reader :sayHello,:verticalframe5,:close,:verticalframe4,:horizontalframe1,:userName
end

#unit test
if __FILE__==$0
require ‘libGUIb16’
app=FX::App.new
fxTest=FxTest.new app
fxTest.topwin.show(Fox::PLACEMENT_SCREEN)
app.create
app.run
end[/ruby]

Kolay gelsin.. :)

Ruby ile GUI Toolkits – 2 (Güncellendi)” üzerine 2 yorum

  1. Hocam; sanki tipografide bi duzenleme yapmak gerekli gibi geldi bana.

    kolay gelsin :)

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir