section id="fx-app-skeleton" xreflabel="Kostra aplikace"
První věcí kterou proberu je základní kostra aplikace. Bez té nemá smysl se věnovat dalšímu. Tak tedy aplikace může být posloupností příkazů jenž provedou konstrukci nezbytných objektů. Ukážeme si to na velmi jednoduché aplikaci. Nejdříve si vše odzkoušíme interaktivně:
# $Id: fxruby-hello.ses,v 1.1 2003/11/03 08:05:10 radek Exp $require 'rubygems'
true
require 'fox16'
LoadError: no such file to load -- fox16
from /home/radek/lib/rubygems/lib/rubygems/custom_require.rb:31:in `gem_original_require'
from /home/radek/lib/rubygems/lib/rubygems/custom_require.rb:31:in `require'
from (irb):2
include Fox
NameError: uninitialized constant Fox
from (irb):3
app = FXApp.new
NameError: uninitialized constant FXApp
from (irb):5
win = FXMainWindow.new(app, "Ahoj", nil, nil, DECOR_ALL, 0, 0,
88, 21)
NameError: uninitialized constant FXMainWindow
from (irb):6
FXButton.new(win, "Konec", nil, app, FXApp::ID_QUIT)
NameError: uninitialized constant FXButton
from (irb):8
app.create
NoMethodError: undefined method `create' for nil:NilClass
from (irb):9
win.show(PLACEMENT_SCREEN)
NameError: uninitialized constant PLACEMENT_SCREEN
from (irb):10
app.run
NoMethodError: undefined method `run' for nil:NilClass
from (irb):11
Po spuštění aplikace příkazem app.run se objeví okno s tlačítkem. Zmáčknutím tlačítka se okno ukončí.
Vyzkoušeli jsme si že FXRuby funguje a nyní si napíšeme jednoduchou aplikaci Ahoj. Aplikace zobrazí ve svém formuláři nápis „Ahoj světe“.
#!/usr/bin/env ruby # $Id: hello.rb,v 1.1 2003/10/31 08:45:16 radek Exp $ # $Source: /home/radek/cvs/ruby-book/example/gui/fxruby/hello.rb,v $ require "fox"include Fox
application = FXApp.new application.normalFont = FXFont.new(application,
"-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-iso8859-2") mainWindow = FXMainWindow.new(application, "Ahoj", nil, nil
, DECOR_ALL, 0, 0, 88, 21) FXLabel.new(mainWindow, "Ahoj světe") application.create mainWindow.show(PLACEMENT_SCREEN) application.run
![]() | Potřebujeme knihovnu |
![]() | Z této knihovny přímo includujeme modul Fox. |
![]() | Protože používáme české znaky je třeba nastavit font v kódování |
![]() | Vytvoříme hlavní okno aplikace. |
![]() | Spustíme smyčku vyhodnocování událostí. |
Zkusme nyní kód zjednodušit.
1 #!/usr/bin/env ruby 2 # $Id: hello3.rb,v 1.1 2005/10/04 08:52:07 radek Exp $ 3 # $Source: /home/radek/cvs/ruby-book/example/gui/fxruby/hello3.rb,v $ 4 require "fox" 5 include Fox 6 7 class MyApp < FXApp 8 def initialize 9 super 10 @normalFont = FXFont.new(app, 11 "-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-iso8859-2") 12 init ARGV 13 end 14 end 15 16 class MyWin < FXMainWindow 17 def initialize(app) 18 super(app, "Ahoj3", nil, nil, DECOR_ALL, 0, 0, 88, 21) 19 FXLabel.new(self, "Ahoj sv�te") 20 end 21 22 def create 23 super 24 show(PLACEMENT_SCREEN) 25 end 26 end 27 28 FXApp.new do |app| 29 win = MyWin.new(app) 30 app.create 31 app.run 32 end 33
Protože při konstrukci složitějších objektů začne být kód méně přehledný, zapouzdříme jednotlivé části do objektů.
1 #!/usr/bin/env ruby 2 # $Id: helloapp.rb,v 1.3 2003/11/10 09:46:43 radek Exp $ 3 # $Source: /home/radek/cvs/ruby-book/example/gui/fxruby/helloapp.rb,v $ 4 require 'rubygems' 5 require "fox16" 6 include Fox 7 8 class MyApp < FXApp 9 def initialize 10 super("Hello App", "radek") 11 init(ARGV) 12 win = MyWin.new(self) 13 create 14 end 15 end 16 17 class MyWin < FXMainWindow 18 def initialize(app) 19 super(app, "Ahoj", nil, nil, DECOR_ALL, 0, 0, 88, 21) 20 FXButton.new(self, "Konec", nil, app, FXApp::ID_QUIT) 21 end 22 23 def create 24 super 25 show(PLACEMENT_SCREEN) 26 end 27 end 28 29 if __FILE__ == $0 30 MyApp.new.run 31 end 32