fxruby 1.6.5 → 1.6.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/doc/apes02.html +2 -2
  2. data/doc/apes03.html +1 -1
  3. data/doc/book.html +1 -1
  4. data/doc/changes.html +55 -21
  5. data/doc/differences.html +9 -9
  6. data/doc/implementation.html +1 -1
  7. data/doc/library.html +5 -5
  8. data/doc/opengl.html +5 -5
  9. data/doc/pt02.html +1 -1
  10. data/doc/scintilla.html +4 -4
  11. data/doc/subversion.html +1 -1
  12. data/examples/accell.rb +36 -0
  13. data/examples/babelfish.rb +6 -9
  14. data/examples/bounce.rb +5 -4
  15. data/examples/button.rb +19 -21
  16. data/examples/datatarget.rb +9 -8
  17. data/examples/dctest.rb +7 -13
  18. data/examples/dialog.rb +12 -16
  19. data/examples/dilbert.rb +4 -4
  20. data/examples/dirlist.rb +6 -5
  21. data/examples/dragdrop.rb +30 -33
  22. data/examples/dragsource.rb +22 -22
  23. data/examples/dropsite.rb +16 -17
  24. data/examples/foursplit.rb +8 -13
  25. data/examples/gltest.rb +21 -24
  26. data/examples/glviewer.rb +56 -58
  27. data/examples/header.rb +25 -25
  28. data/examples/iconlist.rb +12 -8
  29. data/examples/image.rb +36 -34
  30. data/examples/imageviewer.rb +44 -43
  31. data/examples/inputs.rb +15 -15
  32. data/examples/mditest.rb +6 -5
  33. data/examples/pig.rb +1 -0
  34. data/examples/raabrowser.rb +31 -40
  35. data/examples/ratio.rb +27 -16
  36. data/examples/rulerview.rb +4 -3
  37. data/examples/scribble.rb +14 -17
  38. data/examples/shutter.rb +10 -9
  39. data/examples/splitter.rb +7 -6
  40. data/examples/tabbook.rb +59 -17
  41. data/examples/table.rb +12 -16
  42. data/ext/fox16/FXRuby.cpp +2 -2
  43. data/lib/fox16/glshapes.rb +6 -6
  44. data/lib/fox16/iterators.rb +13 -8
  45. data/lib/fox16/kwargs.rb +604 -380
  46. data/lib/fox16/version.rb +1 -1
  47. data/tests/TC_FXTreeList.rb +13 -13
  48. data/tests/TC_FXTreeListBox.rb +3 -3
  49. metadata +4 -3
data/examples/dragdrop.rb CHANGED
@@ -1,29 +1,31 @@
1
1
  require 'fox16'
2
+ require 'fox16/kwargs'
2
3
 
3
4
  include Fox
4
5
 
5
6
  class DragDropWindow < FXMainWindow
7
+
6
8
  def initialize(anApp)
7
9
  # Initialize base class
8
- super(anApp, "Drag and Drop", nil, nil, DECOR_ALL, 0, 0, 400, 300)
10
+ super(anApp, "Drag and Drop", :opts => DECOR_ALL, :width => 400, :height => 300)
9
11
 
10
12
  # Fill main window with canvas
11
- @canvas = FXCanvas.new(self, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y)
13
+ @canvas = FXCanvas.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
12
14
  @canvas.backColor = "red"
13
15
 
14
16
  # Enable canvas for drag-and-drop messages
15
17
  @canvas.dropEnable
16
18
 
17
19
  # Handle expose events on the canvas
18
- @canvas.connect(SEL_PAINT) { |sender, sel, event|
19
- FXDCWindow.new(@canvas, event) { |dc|
20
+ @canvas.connect(SEL_PAINT) do |sender, sel, event|
21
+ FXDCWindow.new(@canvas, event) do |dc|
20
22
  dc.foreground = @canvas.backColor
21
23
  dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
22
- }
23
- }
24
+ end
25
+ end
24
26
 
25
27
  # Handle left button press
26
- @canvas.connect(SEL_LEFTBUTTONPRESS) {
28
+ @canvas.connect(SEL_LEFTBUTTONPRESS) do
27
29
  #
28
30
  # Capture (grab) the mouse when the button goes down, so that all future
29
31
  # mouse events will be reported to this widget, even if those events occur
@@ -34,49 +36,44 @@ class DragDropWindow < FXMainWindow
34
36
  # Advertise which drag types we can offer
35
37
  dragTypes = [FXWindow.colorType]
36
38
  @canvas.beginDrag(dragTypes)
37
- }
39
+ end
38
40
 
39
41
  # Handle mouse motion events
40
- @canvas.connect(SEL_MOTION) { |sender, sel, event|
42
+ @canvas.connect(SEL_MOTION) do |sender, sel, event|
41
43
  if @canvas.dragging?
42
44
  @canvas.handleDrag(event.root_x, event.root_y)
43
- unless @canvas.didAccept == DRAG_REJECT
44
- @canvas.dragCursor = getApp().getDefaultCursor(DEF_SWATCH_CURSOR)
45
- else
46
- @canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
47
- end
45
+ unless @canvas.didAccept == DRAG_REJECT
46
+ @canvas.dragCursor = getApp().getDefaultCursor(DEF_SWATCH_CURSOR)
47
+ else
48
+ @canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
49
+ end
48
50
  end
49
- }
51
+ end
50
52
 
51
53
  # Handle SEL_DND_MOTION messages from the canvas
52
- @canvas.connect(SEL_DND_MOTION) {
53
- if @canvas.offeredDNDType?(FROM_DRAGNDROP, FXWindow.colorType)
54
- @canvas.acceptDrop
55
- end
56
- }
54
+ @canvas.connect(SEL_DND_MOTION) do
55
+ @canvas.acceptDrop if @canvas.offeredDNDType?(FROM_DRAGNDROP, FXWindow.colorType)
56
+ end
57
57
 
58
58
  # Handle left button release
59
- @canvas.connect(SEL_LEFTBUTTONRELEASE) {
59
+ @canvas.connect(SEL_LEFTBUTTONRELEASE) do
60
60
  @canvas.ungrab
61
61
  @canvas.endDrag
62
- }
62
+ end
63
63
 
64
64
  # Handle SEL_DND_DROP message from the canvas
65
- @canvas.connect(SEL_DND_DROP) {
65
+ @canvas.connect(SEL_DND_DROP) do
66
66
  # Try to obtain the data as color values first
67
67
  data = @canvas.getDNDData(FROM_DRAGNDROP, FXWindow.colorType)
68
- unless data.nil?
69
- # Update canvas background color
70
- @canvas.backColor = Fox.fxdecodeColorData(data)
71
- end
72
- }
68
+
69
+ # Update canvas background color
70
+ @canvas.backColor = Fox.fxdecodeColorData(data) unless data.nil?
71
+ end
73
72
 
74
73
  # Handle request for DND data
75
- @canvas.connect(SEL_DND_REQUEST) { |sender, sel, event|
76
- if event.target == FXWindow.colorType
77
- @canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
78
- end
79
- }
74
+ @canvas.connect(SEL_DND_REQUEST) do |sender, sel, event|
75
+ @canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor)) if event.target == FXWindow.colorType
76
+ end
80
77
  end
81
78
 
82
79
  def create
@@ -1,26 +1,28 @@
1
1
  require 'fox16'
2
+ require 'fox16/kwargs'
2
3
 
3
4
  include Fox
4
5
 
5
6
  class DragSource < FXMainWindow
7
+
6
8
  def initialize(anApp)
7
9
  # Initialize base class
8
- super(anApp, "Drag Source", nil, nil, DECOR_ALL, 0, 0, 400, 300)
10
+ super(anApp, "Drag Source", :opts => DECOR_ALL, :width => 400, :height => 300)
9
11
 
10
12
  # Fill main window with canvas
11
- @canvas = FXCanvas.new(self, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y)
13
+ @canvas = FXCanvas.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
12
14
  @canvas.backColor = "red"
13
15
 
14
16
  # Handle expose events on the canvas
15
- @canvas.connect(SEL_PAINT) { |sender, sel, event|
16
- FXDCWindow.new(@canvas, event) { |dc|
17
+ @canvas.connect(SEL_PAINT) do |sender, sel, event|
18
+ FXDCWindow.new(@canvas, event) do |dc|
17
19
  dc.foreground = @canvas.backColor
18
20
  dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
19
- }
20
- }
21
+ end
22
+ end
21
23
 
22
24
  # Handle left button press
23
- @canvas.connect(SEL_LEFTBUTTONPRESS) {
25
+ @canvas.connect(SEL_LEFTBUTTONPRESS) do
24
26
  #
25
27
  # Capture (grab) the mouse when the button goes down, so that all future
26
28
  # mouse events will be reported to this widget, even if those events occur
@@ -31,32 +33,30 @@ class DragSource < FXMainWindow
31
33
  # Advertise which drag types we can offer
32
34
  dragTypes = [FXWindow.colorType]
33
35
  @canvas.beginDrag(dragTypes)
34
- }
36
+ end
35
37
 
36
38
  # Handle mouse motion events
37
- @canvas.connect(SEL_MOTION) { |sender, sel, event|
39
+ @canvas.connect(SEL_MOTION) do |sender, sel, event|
38
40
  if @canvas.dragging?
39
41
  @canvas.handleDrag(event.root_x, event.root_y)
40
- unless @canvas.didAccept == DRAG_REJECT
41
- @canvas.dragCursor = getApp().getDefaultCursor(DEF_SWATCH_CURSOR)
42
- else
43
- @canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
44
- end
42
+ unless @canvas.didAccept == DRAG_REJECT
43
+ @canvas.dragCursor = getApp().getDefaultCursor(DEF_SWATCH_CURSOR)
44
+ else
45
+ @canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
46
+ end
45
47
  end
46
- }
48
+ end
47
49
 
48
50
  # Handle left button release
49
- @canvas.connect(SEL_LEFTBUTTONRELEASE) {
51
+ @canvas.connect(SEL_LEFTBUTTONRELEASE) do
50
52
  @canvas.ungrab
51
53
  @canvas.endDrag
52
- }
54
+ end
53
55
 
54
56
  # Handle request for DND data
55
- @canvas.connect(SEL_DND_REQUEST) { |sender, sel, event|
56
- if event.target == FXWindow.colorType
57
- @canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
58
- end
59
- }
57
+ @canvas.connect(SEL_DND_REQUEST) do |sender, sel, event|
58
+ @canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor)) if event.target == FXWindow.colorType
59
+ end
60
60
  end
61
61
 
62
62
  def create
data/examples/dropsite.rb CHANGED
@@ -1,42 +1,41 @@
1
1
  require 'fox16'
2
+ require 'fox16/kwargs'
2
3
 
3
4
  include Fox
4
5
 
5
6
  class DropSite < FXMainWindow
7
+
6
8
  def initialize(anApp)
7
9
  # Initialize base class
8
- super(anApp, "Drop Site", nil, nil, DECOR_ALL, 0, 0, 400, 300)
10
+ super(anApp, "Drop Site",:opts => DECOR_ALL, :width => 400, :height => 300)
9
11
 
10
12
  # Fill main window with canvas
11
- @canvas = FXCanvas.new(self, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y)
13
+ @canvas = FXCanvas.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
12
14
 
13
15
  # Handle expose events on the canvas
14
- @canvas.connect(SEL_PAINT) { |sender, sel, event|
15
- FXDCWindow.new(@canvas, event) { |dc|
16
+ @canvas.connect(SEL_PAINT) do |sender, sel, event|
17
+ FXDCWindow.new(@canvas, event) do |dc|
16
18
  dc.foreground = @canvas.backColor
17
19
  dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
18
- }
19
- }
20
+ end
21
+ end
20
22
 
21
23
  # Enable canvas for drag-and-drop messages
22
24
  @canvas.dropEnable
23
25
 
24
26
  # Handle SEL_DND_MOTION messages from the canvas
25
- @canvas.connect(SEL_DND_MOTION) {
26
- if @canvas.offeredDNDType?(FROM_DRAGNDROP, FXWindow.colorType)
27
- @canvas.acceptDrop
28
- end
29
- }
27
+ @canvas.connect(SEL_DND_MOTION) do
28
+ @canvas.acceptDrop if @canvas.offeredDNDType?(FROM_DRAGNDROP, FXWindow.colorType)
29
+ end
30
30
 
31
31
  # Handle SEL_DND_DROP message from the canvas
32
- @canvas.connect(SEL_DND_DROP) {
32
+ @canvas.connect(SEL_DND_DROP) do
33
33
  # Try to obtain the data as color values first
34
34
  data = @canvas.getDNDData(FROM_DRAGNDROP, FXWindow.colorType)
35
- unless data.nil?
36
- # Update canvas background color
37
- @canvas.backColor = Fox.fxdecodeColorData(data)
38
- end
39
- }
35
+
36
+ # Update canvas background color
37
+ @canvas.backColor = Fox.fxdecodeColorData(data) unless data.nil?
38
+ end
40
39
  end
41
40
 
42
41
  def create
@@ -1,13 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'fox16'
4
+ require 'fox16/kwargs'
4
5
 
5
6
  include Fox
6
7
 
7
8
  class FourSplitWindow < FXMainWindow
8
9
  def initialize(app)
9
10
  # Call the base class initialize() first
10
- super(app, "4-Way Splitter Test", nil, nil, DECOR_ALL, 0, 0, 800, 600, 0, 0)
11
+ super(app, "4-Way Splitter Test", :opts => DECOR_ALL, :width => 800, :height => 600)
11
12
 
12
13
  # Menu bar, along the top
13
14
  menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
@@ -47,14 +48,11 @@ class FourSplitWindow < FXMainWindow
47
48
  # but the fourth is itself another 4-splitter. There is no
48
49
  # restriction on nesting these kinds of widgets.
49
50
 
50
- FXButton.new(splitter, "Top &Left\tThis splitter tracks", nil,
51
- nil, 0, FRAME_RAISED|FRAME_THICK)
51
+ FXButton.new(splitter, "Top &Left\tThis splitter tracks", :opts => FRAME_RAISED|FRAME_THICK)
52
52
 
53
- FXButton.new(splitter, "Top &Right\tThis splitter tracks", nil,
54
- nil, 0, FRAME_RAISED|FRAME_THICK)
53
+ FXButton.new(splitter, "Top &Right\tThis splitter tracks", :opts => FRAME_RAISED|FRAME_THICK)
55
54
 
56
- FXButton.new(splitter, "&Bottom Left\tThis splitter tracks", nil,
57
- nil, 0, FRAME_SUNKEN|FRAME_THICK)
55
+ FXButton.new(splitter, "&Bottom Left\tThis splitter tracks", :opts => FRAME_SUNKEN|FRAME_THICK)
58
56
 
59
57
  subsplitter = FX4Splitter.new(splitter, LAYOUT_FILL_X|LAYOUT_FILL_Y)
60
58
 
@@ -66,20 +64,17 @@ class FourSplitWindow < FXMainWindow
66
64
  end
67
65
 
68
66
  button = FXButton.new(subsplitter,
69
- "the&y CAN\tThis splitter does NOT track", nil,
70
- nil, 0, FRAME_SUNKEN|FRAME_THICK)
67
+ "the&y CAN\tThis splitter does NOT track", :opts => FRAME_SUNKEN|FRAME_THICK)
71
68
  button.backColor = FXRGB(128, 0, 0)
72
69
  button.textColor = FXRGB(255, 255, 255)
73
70
 
74
71
  button = FXButton.new(subsplitter,
75
- "be &NESTED\tThis splitter does NOT track", nil,
76
- nil, 0, FRAME_SUNKEN|FRAME_THICK)
72
+ "be &NESTED\tThis splitter does NOT track", :opts => FRAME_SUNKEN|FRAME_THICK)
77
73
  button.backColor = FXRGB(0, 0, 200)
78
74
  button.textColor = FXRGB(255, 255, 255)
79
75
 
80
76
  button = FXButton.new(subsplitter,
81
- "&arbitrarily!\tThis splitter does NOT track", nil,
82
- nil, 0, FRAME_SUNKEN|FRAME_THICK)
77
+ "&arbitrarily!\tThis splitter does NOT track", :opts => FRAME_SUNKEN|FRAME_THICK)
83
78
  button.backColor = FXRGB(128, 128, 0)
84
79
  button.textColor = FXRGB(255, 255, 255)
85
80
 
data/examples/gltest.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'fox16'
4
+ require 'fox16/kwargs'
4
5
  begin
5
6
  require 'opengl'
6
7
  rescue LoadError
@@ -193,7 +194,7 @@ class GLTestWindow < FXMainWindow
193
194
 
194
195
  def initialize(app)
195
196
  # Invoke the base class initializer
196
- super(app, "OpenGL Test Application", nil, nil, DECOR_ALL, 0, 0, 800, 600)
197
+ super(app, "OpenGL Test Application", :opts => DECOR_ALL, :width => 800, :height => 600)
197
198
 
198
199
  # Construct the main window elements
199
200
  frame = FXHorizontalFrame.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y)
@@ -223,17 +224,14 @@ class GLTestWindow < FXMainWindow
223
224
  @glvisual = FXGLVisual.new(getApp(), VISUAL_DOUBLEBUFFER)
224
225
 
225
226
  # Drawing glcanvas
226
- @glcanvas = FXGLCanvas.new(glpanel, @glvisual, nil, 0,
227
- LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT)
228
- @glcanvas.connect(SEL_PAINT) {
229
- drawScene
230
- }
231
- @glcanvas.connect(SEL_CONFIGURE) {
227
+ @glcanvas = FXGLCanvas.new(glpanel, @glvisual, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT)
228
+ @glcanvas.connect(SEL_PAINT) { drawScene }
229
+ @glcanvas.connect(SEL_CONFIGURE) do
232
230
  if @glcanvas.makeCurrent
233
231
  GL.Viewport(0, 0, @glcanvas.width, @glcanvas.height)
234
232
  @glcanvas.makeNonCurrent
235
233
  end
236
- }
234
+ end
237
235
 
238
236
  # Right pane for the buttons
239
237
  buttonFrame = FXVerticalFrame.new(frame, LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT)
@@ -251,37 +249,36 @@ class GLTestWindow < FXMainWindow
251
249
  spinTimerBtn = FXButton.new(buttonFrame, "Spin &Timer\tSpin using interval timers\nNote the app blocks until the interal has elapsed...",nil,nil,0,FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT)
252
250
  spinTimerBtn.padLeft, spinTimerBtn.padRight = 10, 10
253
251
  spinTimerBtn.padTop, spinTimerBtn.padBottom = 5, 5
254
- spinTimerBtn.connect(SEL_COMMAND) {
252
+ spinTimerBtn.connect(SEL_COMMAND) do
255
253
  @spinning = true
256
254
  @timer = getApp().addTimeout(TIMER_INTERVAL, method(:onTimeout))
257
- }
258
- spinTimerBtn.connect(SEL_UPDATE) { |sender, sel, ptr|
255
+ end
256
+ spinTimerBtn.connect(SEL_UPDATE) do |sender, sel, ptr|
259
257
  @spinning ? sender.disable : sender.enable
260
- }
258
+ end
261
259
 
262
260
  # Spin according to chore
263
261
  spinChoreBtn = FXButton.new(buttonFrame,
264
262
  "Spin &Chore\tSpin as fast as possible using chores\nNote even though the
265
263
  app is very responsive, it never blocks;\nthere is always something to
266
- do...", nil,
267
- nil, 0, FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT)
264
+ do...", :opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT)
268
265
  spinChoreBtn.padLeft, spinChoreBtn.padRight = 10, 10
269
266
  spinChoreBtn.padTop, spinChoreBtn.padBottom = 5, 5
270
- spinChoreBtn.connect(SEL_COMMAND) {
267
+ spinChoreBtn.connect(SEL_COMMAND) do
271
268
  @spinning = true
272
269
  @chore = getApp().addChore(method(:onChore))
273
- }
274
- spinChoreBtn.connect(SEL_UPDATE) { |sender, sel, ptr|
270
+ end
271
+ spinChoreBtn.connect(SEL_UPDATE) do |sender, sel, ptr|
275
272
  @spinning ? sender.disable : sender.enable
276
- }
273
+ end
277
274
 
278
275
  # Stop spinning
279
276
  stopBtn = FXButton.new(buttonFrame,
280
- "&Stop Spin\tStop this mad spinning, I'm getting dizzy", nil,
281
- nil, 0, FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT)
277
+ "&Stop Spin\tStop this mad spinning, I'm getting dizzy",
278
+ :opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT)
282
279
  stopBtn.padLeft, stopBtn.padRight = 10, 10
283
280
  stopBtn.padTop, stopBtn.padBottom = 5, 5
284
- stopBtn.connect(SEL_COMMAND) {
281
+ stopBtn.connect(SEL_COMMAND) do
285
282
  @spinning = false
286
283
  if @timer
287
284
  getApp().removeTimeout(@timer)
@@ -291,10 +288,10 @@ class GLTestWindow < FXMainWindow
291
288
  getApp().removeChore(@chore)
292
289
  @chore = nil
293
290
  end
294
- }
295
- stopBtn.connect(SEL_UPDATE) { |sender, sel, ptr|
291
+ end
292
+ stopBtn.connect(SEL_UPDATE) do |sender, sel, ptr|
296
293
  @spinning ? sender.enable : sender.disable
297
- }
294
+ end
298
295
 
299
296
  # Exit button
300
297
  exitBtn = FXButton.new(buttonFrame, "&Exit\tExit the application", nil,
data/examples/glviewer.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'fox16'
4
4
  require 'fox16/responder'
5
+ require 'fox16/kwargs'
5
6
  begin
6
7
  require 'fox16/glshapes'
7
8
  rescue LoadError
@@ -23,67 +24,67 @@ class TabBook < FXTabBook
23
24
  "Angles\tCamera Angles\tSwitch to camera angles panel.")
24
25
 
25
26
  # Angles page
26
- angles = FXMatrix.new(panels, 3, (FRAME_THICK|FRAME_RAISED|
27
- MATRIX_BY_COLUMNS|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT))
28
- angles.padLeft = 10
29
- angles.padRight = 10
30
- angles.padTop = 10
31
- angles.padBottom = 10
27
+ angles = FXMatrix.new(panels, 3,
28
+ :opts => FRAME_THICK|FRAME_RAISED|MATRIX_BY_COLUMNS|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
29
+ :padding => 10)
32
30
 
33
31
  FXLabel.new(angles, "X:")
34
- FXTextField.new(angles, 6, mdiclient, FXGLViewer::ID_ROLL,
32
+ FXTextField.new(angles, 6,
33
+ mdiclient, FXGLViewer::ID_ROLL,
35
34
  TEXTFIELD_INTEGER|JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
36
- x_dial = FXDial.new(angles, mdiclient, FXGLViewer::ID_DIAL_X,
37
- (FRAME_SUNKEN|FRAME_THICK|DIAL_CYCLIC|DIAL_HORIZONTAL|
38
- LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_CENTER_Y),
39
- 0, 0, 160, 14, 0, 0, 0, 0)
35
+ x_dial = FXDial.new(angles,
36
+ mdiclient, FXGLViewer::ID_DIAL_X,
37
+ :opts => FRAME_SUNKEN|FRAME_THICK|DIAL_CYCLIC|DIAL_HORIZONTAL|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_CENTER_Y,
38
+ :width => 160, :height => 14, :padding => 0)
40
39
  x_dial.tipText = "Rotate about X"
41
40
  x_dial.notchOffset = 900
42
41
 
43
42
  FXLabel.new(angles, "Y:")
44
- FXTextField.new(angles, 6, mdiclient, FXGLViewer::ID_PITCH,
43
+ FXTextField.new(angles, 6,
44
+ mdiclient, FXGLViewer::ID_PITCH,
45
45
  TEXTFIELD_INTEGER|JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
46
- y_dial = FXDial.new(angles, mdiclient, FXGLViewer::ID_DIAL_Y,
47
- (FRAME_SUNKEN|FRAME_THICK|DIAL_CYCLIC|DIAL_HORIZONTAL|
48
- LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_CENTER_Y),
49
- 0, 0, 160, 14, 0, 0, 0, 0)
46
+ y_dial = FXDial.new(angles,
47
+ mdiclient, FXGLViewer::ID_DIAL_Y,
48
+ :opts => FRAME_SUNKEN|FRAME_THICK|DIAL_CYCLIC|DIAL_HORIZONTAL|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_CENTER_Y,
49
+ :width => 160, :height => 14, :padding => 0)
50
50
  y_dial.tipText = "Rotate about Y"
51
51
  y_dial.notchOffset = 900
52
52
 
53
53
  FXLabel.new(angles, "Z:")
54
- FXTextField.new(angles, 6, mdiclient, FXGLViewer::ID_YAW,
54
+ FXTextField.new(angles, 6,
55
+ mdiclient, FXGLViewer::ID_YAW,
55
56
  TEXTFIELD_INTEGER|JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
56
- z_dial = FXDial.new(angles, mdiclient, FXGLViewer::ID_DIAL_Z,
57
- (FRAME_SUNKEN|FRAME_THICK|DIAL_CYCLIC|DIAL_HORIZONTAL|
58
- LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_CENTER_Y),
59
- 0, 0, 160, 14, 0, 0, 0, 0)
57
+ z_dial = FXDial.new(angles,
58
+ mdiclient, FXGLViewer::ID_DIAL_Z,
59
+ :opts => FRAME_SUNKEN|FRAME_THICK|DIAL_CYCLIC|DIAL_HORIZONTAL|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_CENTER_Y,
60
+ :width => 160, :height => 14, :padding => 0)
60
61
  z_dial.tipText = "Rotate about Z"
61
62
  z_dial.notchOffset = 900
62
63
 
63
64
  FXLabel.new(angles, "FOV:")
64
65
  fov = FXTextField.new(angles, 5, mdiclient, FXGLViewer::ID_FOV,
65
66
  JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
66
- FXFrame.new(angles, 0)
67
+ FXFrame.new(angles, :opts => FRAME_NONE)
67
68
  fov.tipText = "Field of view"
68
69
 
69
70
  FXLabel.new(angles, "Zoom:")
70
71
  zz = FXTextField.new(angles, 5, mdiclient, FXGLViewer::ID_ZOOM,
71
72
  JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
72
- FXFrame.new(angles, 0)
73
+ FXFrame.new(angles, :opts => FRAME_NONE)
73
74
  zz.tipText = "Zooming"
74
75
 
75
76
  FXLabel.new(angles, "Scale X:")
76
77
  FXTextField.new(angles, 5, mdiclient, FXGLViewer::ID_SCALE_X,
77
78
  JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
78
- FXFrame.new(angles, 0)
79
+ FXFrame.new(angles, :opts => FRAME_NONE)
79
80
  FXLabel.new(angles, "Scale Y:")
80
81
  FXTextField.new(angles, 5, mdiclient, FXGLViewer::ID_SCALE_Y,
81
82
  JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
82
- FXFrame.new(angles, 0)
83
+ FXFrame.new(angles, :opts => FRAME_NONE)
83
84
  FXLabel.new(angles, "Scale Z:")
84
85
  FXTextField.new(angles, 5, mdiclient, FXGLViewer::ID_SCALE_Z,
85
86
  JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
86
- FXFrame.new(angles, 0)
87
+ FXFrame.new(angles, :opts => FRAME_NONE)
87
88
  end
88
89
 
89
90
  def createColorsPage(panels, mdiclient)
@@ -91,33 +92,30 @@ class TabBook < FXTabBook
91
92
  FXTabItem.new(panels, "Colors\tColors\tSwitch to color panel.")
92
93
 
93
94
  # Colors page
94
- colors = FXMatrix.new(panels, 2, (MATRIX_BY_COLUMNS|FRAME_THICK|
95
- FRAME_RAISED|LAYOUT_FILL_Y|LAYOUT_CENTER_X|LAYOUT_TOP|LAYOUT_LEFT))
96
- colors.padLeft = 10
97
- colors.padRight = 10
98
- colors.padTop = 10
99
- colors.padBottom = 10
95
+ colors = FXMatrix.new(panels, 2,
96
+ MATRIX_BY_COLUMNS|FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_Y|LAYOUT_CENTER_X|LAYOUT_TOP|LAYOUT_LEFT,
97
+ :padding => 10)
100
98
  FXLabel.new(colors, "Background:", nil,
101
99
  LAYOUT_RIGHT|LAYOUT_CENTER_Y|JUSTIFY_RIGHT)
102
100
  FXColorWell.new(colors, 0, mdiclient, FXGLViewer::ID_BACK_COLOR,
103
- COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0)
101
+ COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, :padding => 0)
104
102
  FXLabel.new(colors, "Ambient:", nil,
105
103
  LAYOUT_RIGHT|LAYOUT_CENTER_Y|JUSTIFY_RIGHT)
106
104
  FXColorWell.new(colors, 0, mdiclient, FXGLViewer::ID_AMBIENT_COLOR,
107
- COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0)
105
+ COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, :padding => 0)
108
106
 
109
107
  FXLabel.new(colors, "Light Amb:", nil,
110
108
  LAYOUT_RIGHT|LAYOUT_CENTER_Y|JUSTIFY_RIGHT)
111
109
  FXColorWell.new(colors, 0, mdiclient, FXGLViewer::ID_LIGHT_AMBIENT,
112
- COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0)
110
+ COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, :padding => 0)
113
111
  FXLabel.new(colors, "Light Diff:", nil,
114
112
  LAYOUT_RIGHT|LAYOUT_CENTER_Y|JUSTIFY_RIGHT)
115
113
  FXColorWell.new(colors, 0, mdiclient, FXGLViewer::ID_LIGHT_DIFFUSE,
116
- COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0)
114
+ COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, :padding => 0)
117
115
  FXLabel.new(colors, "Light Spec:", nil,
118
116
  LAYOUT_RIGHT|LAYOUT_CENTER_Y|JUSTIFY_RIGHT)
119
117
  FXColorWell.new(colors, 0, mdiclient, FXGLViewer::ID_LIGHT_SPECULAR,
120
- COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0)
118
+ COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, :padding => 0)
121
119
  end
122
120
 
123
121
  def createSwitchesPage(panels, mdiclient)
@@ -125,12 +123,9 @@ class TabBook < FXTabBook
125
123
  FXTabItem.new(panels, "Settings\tSettings\tSwitche to settings panel.")
126
124
 
127
125
  # Settings page
128
- settings = FXVerticalFrame.new(panels, (FRAME_THICK|FRAME_RAISED|
129
- LAYOUT_FILL_Y|LAYOUT_CENTER_X|LAYOUT_TOP|LAYOUT_LEFT))
130
- settings.padLeft = 10
131
- settings.padRight = 10
132
- settings.padTop = 10
133
- settings.padBottom = 10
126
+ settings = FXVerticalFrame.new(panels,
127
+ FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_Y|LAYOUT_CENTER_X|LAYOUT_TOP|LAYOUT_LEFT,
128
+ :padding => 10)
134
129
  FXCheckButton.new(settings, "Lighting", mdiclient, FXGLViewer::ID_LIGHTING,
135
130
  ICON_BEFORE_TEXT)
136
131
  FXCheckButton.new(settings, "Fog", mdiclient, FXGLViewer::ID_FOG,
@@ -161,9 +156,9 @@ class GLViewWindow < FXMainWindow
161
156
  begin
162
157
  filename = File.join("icons", filename) + ".png"
163
158
  icon = nil
164
- File.open(filename, "rb") { |f|
159
+ File.open(filename, "rb") do |f|
165
160
  icon = FXPNGIcon.new(getApp(), f.read)
166
- }
161
+ end
167
162
  icon
168
163
  rescue
169
164
  raise RuntimeError, "Couldn't load icon: #{filename}"
@@ -172,7 +167,7 @@ class GLViewWindow < FXMainWindow
172
167
 
173
168
  def initialize(app)
174
169
  # Initialize base class first
175
- super(app, "OpenGL Example Application", nil, nil, DECOR_ALL, 0, 0, 800, 600)
170
+ super(app, "OpenGL Example Application", :opts => DECOR_ALL, :width => 800, :height => 600)
176
171
 
177
172
  # Define message identifiers for this class
178
173
 
@@ -194,22 +189,25 @@ class GLViewWindow < FXMainWindow
194
189
  FXHorizontalSeparator.new(self,
195
190
  LAYOUT_SIDE_TOP|SEPARATOR_GROOVE|LAYOUT_FILL_X);
196
191
  toolbar = FXToolBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X,
197
- 0, 0, 0, 0, 4, 4, 0, 0, 0, 0)
192
+ :padLeft => 4, :padRight => 4, :padTop => 0, :padBottom => 0,
193
+ :hSpacing => 0, :vSpacing => 0)
198
194
 
199
195
  # Make status bar
200
196
  statusbar = FXStatusBar.new(self,
201
197
  LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER)
202
198
 
203
199
  # The good old penguin, what would we be without it?
204
- FXButton.new(statusbar, "\tHello, I'm Tux...\nThe symbol for the Linux Operating System.\nAnd all it stands for.", peng, nil, 0, LAYOUT_RIGHT)
200
+ FXButton.new(statusbar,
201
+ "\tHello, I'm Tux...\nThe symbol for the Linux Operating System.\nAnd all it stands for.",
202
+ :icon => peng, :opts => LAYOUT_RIGHT)
205
203
 
206
204
  # Contents
207
205
  frame = FXHorizontalFrame.new(self,
208
- LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
206
+ LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0, :hSpacing => 0, :vSpacing => 0)
209
207
 
210
208
  # Nice sunken box around GL viewer
211
209
  box = FXVerticalFrame.new(frame,
212
- FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0, 0, 0, 0)
210
+ FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
213
211
 
214
212
  # MDI Client
215
213
  @mdiclient = FXMDIClient.new(box, LAYOUT_FILL_X|LAYOUT_FILL_Y)
@@ -299,14 +297,14 @@ class GLViewWindow < FXMainWindow
299
297
 
300
298
  # Print
301
299
  FXFrame.new(toolbar,
302
- LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, 0, 0, 4, 20)
300
+ LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, :width => 4, :height => 20)
303
301
  FXButton.new(toolbar, "\tPrint Image\tPrint shapshot image.",
304
302
  loadIcon("printicon"), @mdiclient, FXGLViewer::ID_PRINT_IMAGE,
305
303
  BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
306
304
 
307
305
  # Editing
308
306
  FXFrame.new(toolbar,
309
- LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, 0, 0, 4, 20)
307
+ LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, :width => 4, :height => 20)
310
308
  FXButton.new(toolbar, "\tCut", loadIcon("cut"), @mdiclient,
311
309
  FXGLViewer::ID_CUT_SEL, (BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|
312
310
  LAYOUT_TOP|LAYOUT_LEFT))
@@ -319,7 +317,7 @@ class GLViewWindow < FXMainWindow
319
317
 
320
318
  # Projections
321
319
  FXFrame.new(toolbar, (LAYOUT_TOP|LAYOUT_LEFT|
322
- LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT), 0, 0, 8, 20)
320
+ LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT), :width => 8, :height => 20)
323
321
  FXButton.new(toolbar, "\tPerspective\tSwitch to perspective projection.",
324
322
  loadIcon("perspective"), @mdiclient, FXGLViewer::ID_PERSPECTIVE,
325
323
  BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
@@ -329,7 +327,7 @@ class GLViewWindow < FXMainWindow
329
327
 
330
328
  # Shading model
331
329
  FXFrame.new(toolbar, (LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|
332
- LAYOUT_FIX_HEIGHT), 0, 0, 8, 20)
330
+ LAYOUT_FIX_HEIGHT), :width => 8, :height => 20)
333
331
  FXButton.new(toolbar, "\tNo shading\tTurn light sources off.",
334
332
  loadIcon("nolight"), @mdiclient, FXGLShape::ID_SHADEOFF,
335
333
  BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
@@ -340,14 +338,14 @@ class GLViewWindow < FXMainWindow
340
338
  loadIcon("smoothlight"), @mdiclient, FXGLShape::ID_SHADESMOOTH,
341
339
  BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
342
340
  FXFrame.new(toolbar, (LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|
343
- LAYOUT_FIX_HEIGHT), 0, 0, 8, 20)
341
+ LAYOUT_FIX_HEIGHT), :width => 8, :height => 20)
344
342
  FXToggleButton.new(toolbar, "\tToggle Light\tToggle light source.", nil,
345
343
  loadIcon("nolight"), loadIcon("light"), nil, 0,
346
344
  FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
347
345
 
348
346
  # View orientation
349
347
  FXFrame.new(toolbar, (LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|
350
- LAYOUT_FIX_HEIGHT), 0, 0, 8, 20)
348
+ LAYOUT_FIX_HEIGHT), :width => 8, :height => 20)
351
349
  FXButton.new(toolbar, "\tFront View\tView objects from the front.",
352
350
  loadIcon("frontview"), @mdiclient, FXGLViewer::ID_FRONT,
353
351
  BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
@@ -369,7 +367,7 @@ class GLViewWindow < FXMainWindow
369
367
 
370
368
  # Miscellaneous buttons
371
369
  FXFrame.new(toolbar, (LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|
372
- LAYOUT_FIX_HEIGHT), 0, 0, 8, 20)
370
+ LAYOUT_FIX_HEIGHT), :width => 8, :height => 20)
373
371
  FXButton.new(toolbar, nil, loadIcon("zoom"), nil, 0,
374
372
  FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
375
373
  FXButton.new(toolbar, "\tColors\tDisplay color dialog.",
@@ -382,7 +380,7 @@ class GLViewWindow < FXMainWindow
382
380
 
383
381
  # Dangerous delete a bit on the side
384
382
  FXFrame.new(toolbar, (LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|
385
- LAYOUT_FIX_HEIGHT), 0, 0, 10, 20)
383
+ LAYOUT_FIX_HEIGHT), :width => 10, :height => 20)
386
384
  FXButton.new(toolbar, "\tDelete\tDelete the selected object.",
387
385
  loadIcon("kill"), @mdiclient, FXGLViewer::ID_DELETE_SEL,
388
386
  BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)