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.. :)

Share