40.3.2.1. Kostra aplikace

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"                                              (1)
include Fox                                                (2)

application = FXApp.new
application.normalFont = FXFont.new(application,           (3)
		"-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-iso8859-2")
mainWindow = FXMainWindow.new(application, "Ahoj", nil, nil(4), DECOR_ALL,
                              0, 0, 88, 21)
FXLabel.new(mainWindow, "Ahoj světe")
application.create
mainWindow.show(PLACEMENT_SCREEN)
application.run
1

Potřebujeme knihovnu fox.

2

Z této knihovny přímo includujeme modul Fox.

3

Protože používáme české znaky je třeba nastavit font v kódování ISO-8859-2.

4

Vytvoříme hlavní okno aplikace.

5

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 
Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .