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/header.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'fox16'
4
+ require 'fox16/kwargs'
4
5
 
5
6
  include Fox
6
7
 
@@ -13,7 +14,7 @@ class HeaderWindow < FXMainWindow
13
14
 
14
15
  def initialize(app)
15
16
  # Invoke base class initializer first
16
- super(app, "Header Control Test", nil, nil, DECOR_ALL, 0, 0, 800, 600)
17
+ super(app, "Header Control Test", :opts => DECOR_ALL, :width => 800, :height => 600)
17
18
 
18
19
  # Menu bar stretched along the top of the main window
19
20
  menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
@@ -29,34 +30,35 @@ class HeaderWindow < FXMainWindow
29
30
 
30
31
  # Help menu
31
32
  helpmenu = FXMenuPane.new(self)
32
- FXMenuCommand.new(helpmenu, "&About Header...").connect(SEL_COMMAND) {
33
+ FXMenuCommand.new(helpmenu, "&About Header...").connect(SEL_COMMAND) do
33
34
  FXMessageBox.information(self, MBOX_OK, "About Header",
34
35
  "An example of how to work with the header control.")
35
- }
36
+ end
36
37
  FXMenuTitle.new(menubar, "&Help", nil, helpmenu, LAYOUT_RIGHT)
37
38
 
38
39
  # Make Main Window contents
39
40
  contents = FXVerticalFrame.new(self,
40
41
  FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y,
41
- 0,0,0,0, 0,0,0,0, 0,0)
42
+ :padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0,
43
+ :hSpacing => 0, :vSpacing => 0)
42
44
 
43
45
  # Make header control
44
- @header1 = FXHeader.new(contents, nil, 0,
45
- HEADER_BUTTON|HEADER_RESIZE|FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X)
46
- @header1.connect(SEL_CHANGED) { |sender, sel, which|
46
+ @header1 = FXHeader.new(contents,
47
+ :opts => HEADER_BUTTON|HEADER_RESIZE|FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X)
48
+ @header1.connect(SEL_CHANGED) do |sender, sel, which|
47
49
  @lists[which].width = @header1.getItemSize(which)
48
- }
49
- @header1.connect(SEL_COMMAND) { |sender, sel, which|
50
+ end
51
+ @header1.connect(SEL_COMMAND) do |sender, sel, which|
50
52
  @lists[which].numItems.times do |i|
51
53
  @lists[which].selectItem(i)
52
54
  end
53
- }
55
+ end
54
56
 
55
57
  # Document icon
56
58
  doc = nil
57
- File.open(File.join("icons", "minidoc.png"), "rb") { |f|
59
+ File.open(File.join("icons", "minidoc.png"), "rb") do |f|
58
60
  doc = FXPNGIcon.new(getApp(), f.read)
59
- }
61
+ end
60
62
 
61
63
  @header1.appendItem("Name", doc, 150)
62
64
  @header1.appendItem("Type", nil, 140)
@@ -66,18 +68,15 @@ class HeaderWindow < FXMainWindow
66
68
  # Below header
67
69
  panes = FXHorizontalFrame.new(contents,
68
70
  FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y,
69
- 0,0,0,0, 0,0,0,0, 0,0)
71
+ :padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0,
72
+ :hSpacing => 0, :vSpacing => 0)
70
73
 
71
74
  # Make 4 lists
72
75
  @lists = []
73
- @lists.push(FXList.new(panes, nil, 0,
74
- LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH|LIST_BROWSESELECT, 0, 0, 150, 0))
75
- @lists.push(FXList.new(panes, nil, 0,
76
- LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH|LIST_SINGLESELECT, 0, 0, 140, 0))
77
- @lists.push(FXList.new(panes, nil, 0,
78
- LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH|LIST_MULTIPLESELECT, 0, 0, 230, 0))
79
- @lists.push(FXList.new(panes, nil, 0,
80
- LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH|LIST_EXTENDEDSELECT, 0, 0, 80, 0))
76
+ @lists.push(FXList.new(panes, :opts => LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH|LIST_BROWSESELECT, :width => 150))
77
+ @lists.push(FXList.new(panes, :opts => LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH|LIST_SINGLESELECT, :width => 140))
78
+ @lists.push(FXList.new(panes, :opts => LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH|LIST_MULTIPLESELECT, :width => 230))
79
+ @lists.push(FXList.new(panes, :opts => LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH|LIST_EXTENDEDSELECT, :width => 80))
81
80
 
82
81
  @lists[0].backColor = FXRGB(255, 240, 240)
83
82
  @lists[1].backColor = FXRGB(240, 255, 240)
@@ -113,8 +112,8 @@ class HeaderWindow < FXMainWindow
113
112
  @lists[3].appendItem("E")
114
113
  @lists[3].appendItem("F")
115
114
 
116
- @header2 = FXHeader.new(panes, nil, 0,
117
- HEADER_VERTICAL|HEADER_BUTTON|HEADER_RESIZE|FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_Y)
115
+ @header2 = FXHeader.new(panes,
116
+ :opts => HEADER_VERTICAL|HEADER_BUTTON|HEADER_RESIZE|FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_Y)
118
117
  @header2.appendItem("Example", nil, 30)
119
118
  @header2.appendItem("Of", nil, 30)
120
119
  @header2.appendItem("Vertical", nil, 30)
@@ -125,10 +124,11 @@ class HeaderWindow < FXMainWindow
125
124
  GROUPBOX_TITLE_CENTER|LAYOUT_FILL_X|LAYOUT_FILL_Y)
126
125
  check = FXCheckButton.new(groupie,
127
126
  "Continuous Tracking\tContinuous\tTrack Header continuously",
128
- nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP).connect(SEL_COMMAND) {
127
+ :opts => ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
128
+ check.connect(SEL_COMMAND) do
129
129
  @header1.headerStyle ^= HEADER_TRACKING
130
130
  @header2.headerStyle ^= HEADER_TRACKING
131
- }
131
+ end
132
132
 
133
133
  # Whip out a tooltip control, jeez, that's hard
134
134
  FXToolTip.new(getApp())
data/examples/iconlist.rb CHANGED
@@ -1,16 +1,18 @@
1
1
  require 'fox16'
2
+ require 'fox16/kwargs'
2
3
 
3
4
  include Fox
4
5
 
5
6
  class IconListWindow < FXMainWindow
7
+
6
8
  # Load the named PNG icon from a file
7
9
  def loadIcon(filename)
8
10
  begin
9
11
  filename = File.join("icons", filename)
10
12
  icon = nil
11
- File.open(filename, "rb") { |f|
13
+ File.open(filename, "rb") do |f|
12
14
  icon = FXPNGIcon.new(getApp(), f.read)
13
- }
15
+ end
14
16
  icon
15
17
  rescue
16
18
  raise RuntimeError, "Couldn't load icon: #{filename}"
@@ -20,7 +22,7 @@ class IconListWindow < FXMainWindow
20
22
  # Main window constructor
21
23
  def initialize(app)
22
24
  # Initialize base class first
23
- super(app, "Icon List Test", nil, nil, DECOR_ALL, 0, 0, 800, 600)
25
+ super(app, "Icon List Test", :opts => DECOR_ALL, :width => 800, :height => 600)
24
26
 
25
27
  # Menu bar
26
28
  menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
@@ -34,14 +36,16 @@ class IconListWindow < FXMainWindow
34
36
  status = FXStatusBar.new(self, LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER)
35
37
 
36
38
  # Main window interior
37
- group = FXVerticalFrame.new(self, LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0, 0, 0, 0, 0)
39
+ group = FXVerticalFrame.new(self, LAYOUT_FILL_X|LAYOUT_FILL_Y,
40
+ :padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0)
38
41
 
39
42
  # Files
40
43
  FXLabel.new(group, "Icon List Widget", nil, LAYOUT_TOP|LAYOUT_FILL_X|FRAME_SUNKEN)
41
- subgroup = FXVerticalFrame.new(group, FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0, 0, 0, 0, 0)
44
+ subgroup = FXVerticalFrame.new(group, FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y,
45
+ :padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0)
42
46
 
43
47
  # Icon list on the right
44
- iconlist = FXIconList.new(subgroup, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y|ICONLIST_BIG_ICONS|ICONLIST_EXTENDEDSELECT)
48
+ iconlist = FXIconList.new(subgroup, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|ICONLIST_BIG_ICONS|ICONLIST_EXTENDEDSELECT)
45
49
 
46
50
  iconlist.appendHeader("Name", nil, 200)
47
51
  iconlist.appendHeader("Type", nil, 100)
@@ -54,9 +58,9 @@ class IconListWindow < FXMainWindow
54
58
  mini_folder = loadIcon("minifolder.png")
55
59
 
56
60
  iconlist.appendItem("Really BIG and wide item to test\tDocument\t10000\tJune 13, 1999\tUser\tSoftware", big_folder, mini_folder)
57
- 1.upto(400) { |i|
61
+ 1.upto(400) do |i|
58
62
  iconlist.appendItem("Filename_#{i}\tDocument\t10000\tJune 13, 1999\tUser\tSoftware", big_folder, mini_folder)
59
- }
63
+ end
60
64
  iconlist.currentItem = iconlist.numItems - 1
61
65
 
62
66
  # Arrange menu
data/examples/image.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'fox16'
4
4
  require 'fox16/colors'
5
+ require 'fox16/kwargs'
5
6
 
6
7
  include Fox
7
8
 
@@ -9,34 +10,36 @@ class ImageWindow < FXMainWindow
9
10
 
10
11
  def initialize(app)
11
12
  # Invoke base class initializer first
12
- super(app, "Image Application", nil, nil, DECOR_ALL, 0, 0, 800, 600)
13
+ super(app, "Image Application", :opts => DECOR_ALL, :width => 800, :height => 600)
13
14
 
14
15
  # Create a color dialog for later use
15
16
  colordlg = FXColorDialog.new(self, "Color Dialog")
16
17
 
17
18
  contents = FXHorizontalFrame.new(self,
18
- LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0, 0, 0, 0, 0)
19
+ LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y,
20
+ :padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0)
19
21
 
20
22
  # LEFT pane to contain the canvas
21
23
  canvasFrame = FXVerticalFrame.new(contents,
22
24
  FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
23
- 0, 0, 0, 0, 10, 10, 10, 10)
25
+ :padLeft => 10, :padRight => 10, :padTop => 10, :padBottom => 10)
24
26
 
25
27
  # Label above the canvas
26
- FXLabel.new(canvasFrame, "Canvas Frame", nil,
27
- JUSTIFY_CENTER_X|LAYOUT_FILL_X)
28
+ FXLabel.new(canvasFrame, "Canvas Frame", :opts => JUSTIFY_CENTER_X|LAYOUT_FILL_X)
28
29
 
29
30
  # Horizontal divider line
30
31
  FXHorizontalSeparator.new(canvasFrame, SEPARATOR_GROOVE|LAYOUT_FILL_X)
31
32
 
32
33
  # Drawing canvas
33
- @canvas = FXCanvas.new(canvasFrame, nil, 0, (FRAME_SUNKEN|
34
+ @canvas = FXCanvas.new(canvasFrame, :opts => (FRAME_SUNKEN|
34
35
  FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT))
35
36
  @canvas.connect(SEL_PAINT, method(:onCanvasRepaint))
36
37
 
37
38
  # RIGHT pane for the buttons
38
- buttonFrame = FXVerticalFrame.new(contents, (FRAME_SUNKEN|LAYOUT_FILL_Y|
39
- LAYOUT_TOP|LAYOUT_LEFT), 0, 0, 0, 0, 10, 10, 10, 10)
39
+ buttonFrame = FXVerticalFrame.new(contents,
40
+ :opts => FRAME_SUNKEN|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
41
+ :padLeft => 10, :padRight => 10, :padTop => 10, :padBottom => 10)
42
+
40
43
 
41
44
  # Label above the buttons
42
45
  FXLabel.new(buttonFrame, "Button Frame", nil,
@@ -45,43 +48,42 @@ class ImageWindow < FXMainWindow
45
48
  # Horizontal divider line
46
49
  FXHorizontalSeparator.new(buttonFrame, SEPARATOR_RIDGE|LAYOUT_FILL_X)
47
50
 
48
- FXLabel.new(buttonFrame, "&Background\nColor well", nil,
49
- JUSTIFY_CENTER_X|LAYOUT_FILL_X)
51
+ FXLabel.new(buttonFrame, "&Background\nColor well", :opts => JUSTIFY_CENTER_X|LAYOUT_FILL_X)
50
52
  @backwell = FXColorWell.new(buttonFrame, FXColor::White,
51
- nil, 0, (LAYOUT_CENTER_X|LAYOUT_TOP|LAYOUT_LEFT|
52
- LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT), 0, 0, 100, 30)
53
+ :opts => LAYOUT_CENTER_X|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,
54
+ :width => 100, :height => 30)
53
55
  @backwell.connect(SEL_COMMAND, method(:onCmdWell))
54
56
 
55
- FXLabel.new(buttonFrame, "B&order\nColor well", nil,
56
- JUSTIFY_CENTER_X|LAYOUT_FILL_X)
57
+ FXLabel.new(buttonFrame, "B&order\nColor well", :opts => JUSTIFY_CENTER_X|LAYOUT_FILL_X)
57
58
  @borderwell = FXColorWell.new(buttonFrame, FXColor::Black,
58
- nil, 0, (LAYOUT_CENTER_X|LAYOUT_TOP|LAYOUT_LEFT|
59
- LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT), 0, 0, 100, 30)
59
+ :opts => LAYOUT_CENTER_X|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,
60
+ :width => 100, :height => 30)
60
61
  @borderwell.connect(SEL_COMMAND, method(:onCmdWell))
61
62
 
62
- FXLabel.new(buttonFrame, "&Text\nColor well", nil,
63
- JUSTIFY_CENTER_X|LAYOUT_FILL_X)
63
+ FXLabel.new(buttonFrame, "&Text\nColor well", :opts => JUSTIFY_CENTER_X|LAYOUT_FILL_X)
64
64
  @textwell = FXColorWell.new(buttonFrame, FXColor::Black,
65
- nil, 0, (LAYOUT_CENTER_X|LAYOUT_TOP|LAYOUT_LEFT|
66
- LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT), 0, 0, 100, 30)
65
+ :opts => LAYOUT_CENTER_X|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,
66
+ :width => 100, :height => 30)
67
67
  @textwell.connect(SEL_COMMAND, method(:onCmdWell))
68
68
 
69
69
  # Button to draw
70
70
  FXButton.new(buttonFrame, "&Colors...\tPop the color dialog", nil,
71
- colordlg, FXWindow::ID_SHOW, (FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|
72
- LAYOUT_TOP|LAYOUT_LEFT), 0, 0, 0, 0, 10, 10, 5, 5)
71
+ colordlg, FXWindow::ID_SHOW,
72
+ :opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
73
+ :padLeft => 10, :padRight => 10, :padTop => 5, :padBottom => 5)
73
74
 
74
75
  # Button to draw
75
76
  saveBtn = FXButton.new(buttonFrame,
76
77
  "Save Image...\tRead back image and save to file",
77
- nil, nil, 0, (FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|
78
- LAYOUT_TOP|LAYOUT_LEFT), 0, 0, 0, 0, 10, 10, 5, 5)
78
+ :opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
79
+ :padLeft => 10, :padRight => 10, :padTop => 5, :padBottom => 5)
79
80
  saveBtn.connect(SEL_COMMAND, method(:onCmdRestore))
80
81
 
81
82
  # Exit button
82
83
  FXButton.new(buttonFrame, "E&xit\tQuit ImageApp", nil,
83
- getApp(), FXApp::ID_QUIT, (FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|
84
- LAYOUT_TOP|LAYOUT_LEFT), 0, 0, 0, 0, 10, 10, 5, 5)
84
+ getApp(), FXApp::ID_QUIT,
85
+ :opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
86
+ :padLeft => 10, :padRight => 10, :padTop => 5, :padBottom => 5)
85
87
 
86
88
  # Allocate the color arrays
87
89
  imgWidth = 512
@@ -122,15 +124,15 @@ class ImageWindow < FXMainWindow
122
124
  (0...512).each { |x|
123
125
  halfX = x >> 1
124
126
  (0...50).each { |y|
125
- z = (y << 9) + x
127
+ z = (y << 9) + x
126
128
  grey_data[z] = FXRGB(halfX, halfX, halfX)
127
- grey_nodither_data[z] = grey_data[z]
129
+ grey_nodither_data[z] = grey_data[z]
128
130
  red_data[z] = FXRGB(halfX, 0, 0)
129
- red_nodither_data[z] = red_data[z]
131
+ red_nodither_data[z] = red_data[z]
130
132
  green_data[z] = FXRGB(0, halfX, 0)
131
- green_nodither_data[z] = green_data[z]
133
+ green_nodither_data[z] = green_data[z]
132
134
  blue_data[z] = FXRGB(0, 0, halfX)
133
- blue_nodither_data[z] = blue_data[z]
135
+ blue_nodither_data[z] = blue_data[z]
134
136
  }
135
137
  }
136
138
 
@@ -168,7 +170,7 @@ class ImageWindow < FXMainWindow
168
170
  end
169
171
 
170
172
  def onCanvasRepaint(sender, sel, event)
171
- if event.synthetic
173
+ if event.synthetic?
172
174
  dc = FXDCWindow.new(@picture)
173
175
 
174
176
  # Erase the canvas, color comes from well
@@ -190,10 +192,10 @@ class ImageWindow < FXMainWindow
190
192
  dc.fillStyle = FILL_OPAQUESTIPPLED
191
193
  dc.foreground = FXColor::Black
192
194
  dc.background = FXColor::White
193
- (STIPPLE_0..STIPPLE_16).each { |pat|
195
+ (STIPPLE_0..STIPPLE_16).each do |pat|
194
196
  dc.stipple = pat
195
197
  dc.fillRectangle(10 + (512*pat)/17, 490, 31, 50)
196
- }
198
+ end
197
199
  dc.fillStyle = FILL_SOLID
198
200
 
199
201
  # Draw borders
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'fox16'
4
+ require 'fox16/kwargs'
4
5
 
5
6
  include Fox
6
7
 
@@ -10,8 +11,7 @@ class ImageWindow < FXMainWindow
10
11
 
11
12
  def initialize(app)
12
13
  # Invoke base class initialize first
13
- super(app, "FOX Image Viewer: - untitled", nil, nil, DECOR_ALL,
14
- 0, 0, 850, 600, 0, 0)
14
+ super(app, "FOX Image Viewer: - untitled", :opts => DECOR_ALL, :width => 850, :height => 600)
15
15
 
16
16
  # Recently used files list
17
17
  @mrufiles = FXRecentFiles.new
@@ -74,22 +74,22 @@ class ImageWindow < FXMainWindow
74
74
  # Sunken border for image widget
75
75
  imagebox = FXHorizontalFrame.new(splitter,
76
76
  FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y,
77
- 0, 0, 0, 0, 0, 0, 0, 0)
77
+ :padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0)
78
78
 
79
79
  # Make image widget
80
- @imageview = FXImageView.new(imagebox, nil, nil, 0,
81
- LAYOUT_FILL_X|LAYOUT_FILL_Y)
80
+ @imageview = FXImageView.new(imagebox, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
82
81
 
83
82
  # Sunken border for file list
84
- @filebox = FXHorizontalFrame.new(splitter, LAYOUT_FILL_X|LAYOUT_FILL_Y,
85
- 0, 0, 0, 0, 0, 0, 0, 0)
83
+ @filebox = FXHorizontalFrame.new(splitter,
84
+ LAYOUT_FILL_X|LAYOUT_FILL_Y,
85
+ :padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0)
86
86
 
87
87
  # Make file list
88
88
  fileframe = FXHorizontalFrame.new(@filebox,
89
89
  FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y,
90
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
91
- @filelist = FXFileList.new(fileframe, nil, 0,
92
- LAYOUT_FILL_X|LAYOUT_FILL_Y|ICONLIST_MINI_ICONS|ICONLIST_AUTOSIZE)
90
+ :padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0. :hSpacing => 0, :vSpacing => 0)
91
+ @filelist = FXFileList.new(fileframe,
92
+ :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|ICONLIST_MINI_ICONS|ICONLIST_AUTOSIZE)
93
93
  @filelist.connect(SEL_DOUBLECLICKED, method(:onCmdFileList))
94
94
  FXButton.new(@filebox, "\tUp one level\tGo up to higher directory.",
95
95
  uplevelicon, @filelist, FXFileList::ID_DIRECTORY_UP,
@@ -97,19 +97,19 @@ class ImageWindow < FXMainWindow
97
97
 
98
98
  # Toobar buttons: File manipulation
99
99
  openBtn = FXButton.new(toolbar, "&Open\tOpen Image\tOpen image file.", fileopenicon,
100
- nil, 0, ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED)
100
+ :opts => ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED)
101
101
  openBtn.connect(SEL_COMMAND, method(:onCmdOpen))
102
102
  saveBtn = FXButton.new(toolbar, "&Save\tSave Image\tSave image file.", filesaveicon,
103
- nil, 0, ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED)
103
+ :opts => ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED)
104
104
  saveBtn.connect(SEL_COMMAND, method(:onCmdSave))
105
105
 
106
106
  # Toobar buttons: Editing
107
- FXButton.new(toolbar, "Cut\tCut", cuticon, nil, 0,
108
- ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED)
109
- FXButton.new(toolbar, "Copy\tCopy", copyicon, nil, 0,
110
- ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED)
111
- FXButton.new(toolbar, "Paste\tPaste", pasteicon, nil, 0,
112
- ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED)
107
+ FXButton.new(toolbar, "Cut\tCut", cuticon,
108
+ :opts => ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED)
109
+ FXButton.new(toolbar, "Copy\tCopy", copyicon,
110
+ :opts => ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED)
111
+ FXButton.new(toolbar, "Paste\tPaste", pasteicon,
112
+ :opts => ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED)
113
113
 
114
114
  # Color
115
115
  FXButton.new(toolbar, "&Colors\tColors\tDisplay color dialog.", paletteicon,
@@ -145,13 +145,10 @@ class ImageWindow < FXMainWindow
145
145
  # Edit Menu entries
146
146
  FXMenuCommand.new(editmenu, "&Undo\tCtl-Z\tUndo last change.")
147
147
  FXMenuCommand.new(editmenu, "&Redo\tCtl-R\tRedo last undo.")
148
- FXMenuCommand.new(editmenu, "&Copy\tCtl-C\tCopy selection to clipboard.",
149
- copyicon, nil, 0)
150
- FXMenuCommand.new(editmenu, "C&ut\tCtl-X\tCut selection to clipboard.",
151
- cuticon, nil, 0)
152
- FXMenuCommand.new(editmenu, "&Paste\tCtl-V\tPaste from clipboard.",
153
- pasteicon, nil, 0)
154
- FXMenuCommand.new(editmenu, "&Delete\t\tDelete selection.", nil, nil, 0)
148
+ FXMenuCommand.new(editmenu, "&Copy\tCtl-C\tCopy selection to clipboard.", copyicon)
149
+ FXMenuCommand.new(editmenu, "C&ut\tCtl-X\tCut selection to clipboard.", cuticon)
150
+ FXMenuCommand.new(editmenu, "&Paste\tCtl-V\tPaste from clipboard.", pasteicon)
151
+ FXMenuCommand.new(editmenu, "&Delete\t\tDelete selection.")
155
152
 
156
153
  # Manipulation Menu entries
157
154
  rotate90Cmd = FXMenuCommand.new(manipmenu, "Rotate 90\t\tRotate 90 degrees.")
@@ -247,44 +244,44 @@ class ImageWindow < FXMainWindow
247
244
  begin
248
245
  filename = File.join("icons", filename)
249
246
  icon = nil
250
- File.open(filename, "rb") { |f|
247
+ File.open(filename, "rb") do |f|
251
248
  icon = FXPNGIcon.new(getApp(), f.read)
252
- }
249
+ end
253
250
  icon
254
251
  rescue
255
252
  raise RuntimeError, "Couldn't load icon: #{filename}"
256
253
  end
257
254
  end
258
255
 
259
- def hasExtension(filename, ext)
256
+ def hasExtension?(filename, ext)
260
257
  File.basename(filename, ext) != File.basename(filename)
261
258
  end
262
259
 
263
260
  # Load the named image file
264
261
  def loadImage(file)
265
262
  img = nil
266
- if hasExtension(file, ".gif")
263
+ if hasExtension?(file, ".gif")
267
264
  img = FXGIFImage.new(getApp(), nil, IMAGE_KEEP|IMAGE_SHMI|IMAGE_SHMP)
268
- elsif hasExtension(file, ".bmp")
265
+ elsif hasExtension?(file, ".bmp")
269
266
  img = FXBMPImage.new(getApp(), nil, IMAGE_KEEP|IMAGE_SHMI|IMAGE_SHMP)
270
- elsif hasExtension(file, ".xpm")
267
+ elsif hasExtension?(file, ".xpm")
271
268
  img = FXXPMImage.new(getApp(), nil, IMAGE_KEEP|IMAGE_SHMI|IMAGE_SHMP)
272
- elsif hasExtension(file, ".png")
269
+ elsif hasExtension?(file, ".png")
273
270
  img = FXPNGImage.new(getApp(), nil, IMAGE_KEEP|IMAGE_SHMI|IMAGE_SHMP)
274
- elsif hasExtension(file, ".jpg")
271
+ elsif hasExtension?(file, ".jpg")
275
272
  img = FXJPGImage.new(getApp(), nil, IMAGE_KEEP|IMAGE_SHMI|IMAGE_SHMP)
276
- elsif hasExtension(file, ".pcx")
273
+ elsif hasExtension?(file, ".pcx")
277
274
  img = FXPCXImage.new(getApp(), nil, IMAGE_KEEP|IMAGE_SHMI|IMAGE_SHMP)
278
- elsif hasExtension(file, ".tif")
275
+ elsif hasExtension?(file, ".tif")
279
276
  img = FXTIFImage.new(getApp(), nil, IMAGE_KEEP|IMAGE_SHMI|IMAGE_SHMP)
280
- elsif hasExtension(file, ".tga")
277
+ elsif hasExtension?(file, ".tga")
281
278
  img = FXTGAImage.new(getApp(), nil, IMAGE_KEEP|IMAGE_SHMI|IMAGE_SHMP)
282
- elsif hasExtension(file, ".ico")
279
+ elsif hasExtension?(file, ".ico")
283
280
  img = FXICOImage.new(getApp(), nil, IMAGE_KEEP|IMAGE_SHMI|IMAGE_SHMP)
284
281
  end
285
282
 
286
283
  # Perhaps failed?
287
- if !img
284
+ if img.nil?
288
285
  FXMessageBox.error(self, MBOX_OK, "Error loading image",
289
286
  "Unsupported image type: #{file}")
290
287
  return
@@ -340,7 +337,7 @@ class ImageWindow < FXMainWindow
340
337
  if MBOX_CLICKED_NO == FXMessageBox.question(self, MBOX_YES_NO,
341
338
  "Overwrite Image", "Overwrite existing image?")
342
339
  return 1
343
- end
340
+ end
344
341
  end
345
342
  @filename = saveDialog.filename
346
343
  @filelist.currentFile = @filename
@@ -400,9 +397,11 @@ class ImageWindow < FXMainWindow
400
397
  FXTextField.new(frame, 5, sy, FXDataTarget::ID_VALUE,
401
398
  LAYOUT_CENTER_Y|FRAME_SUNKEN|FRAME_THICK|JUSTIFY_RIGHT)
402
399
  FXButton.new(frame, "Cancel", nil, scalepanel, FXDialogBox::ID_CANCEL,
403
- LAYOUT_CENTER_Y|FRAME_RAISED|FRAME_THICK, 0, 0, 0, 0, 20, 20, 4, 4)
400
+ LAYOUT_CENTER_Y|FRAME_RAISED|FRAME_THICK,
401
+ :padLeft => 20, :padRight => 20, :padTop => 4, :padBottom => 4)
404
402
  FXButton.new(frame, "OK", nil, scalepanel, FXDialogBox::ID_ACCEPT,
405
- LAYOUT_CENTER_Y|FRAME_RAISED|FRAME_THICK, 0, 0, 0, 0, 30, 30, 4, 4)
403
+ LAYOUT_CENTER_Y|FRAME_RAISED|FRAME_THICK,
404
+ :padLeft => 30, :padRight => 30, :padTop => 4, :padBottom => 4)
406
405
  return 1 if (scalepanel.execute == 0)
407
406
  return 1 if (sx.value < 1 || sy.value < 1)
408
407
  image.scale(sx.value, sy.value)
@@ -432,9 +431,11 @@ class ImageWindow < FXMainWindow
432
431
  FXTextField.new(frame, 5, ch, FXDataTarget::ID_VALUE,
433
432
  LAYOUT_CENTER_Y|FRAME_SUNKEN|FRAME_THICK|JUSTIFY_RIGHT)
434
433
  FXButton.new(frame, "Cancel", nil, croppanel, FXDialogBox::ID_CANCEL,
435
- LAYOUT_CENTER_Y|FRAME_RAISED|FRAME_THICK, 0, 0, 0, 0, 20, 20, 4, 4)
434
+ LAYOUT_CENTER_Y|FRAME_RAISED|FRAME_THICK,
435
+ :padLeft => 20, :padRight => 20, :padTop => 4, :padBottom => 4)
436
436
  FXButton.new(frame, "OK", nil, croppanel, FXDialogBox::ID_ACCEPT,
437
- LAYOUT_CENTER_Y|FRAME_RAISED|FRAME_THICK, 0, 0, 0, 0, 30, 30, 4, 4)
437
+ LAYOUT_CENTER_Y|FRAME_RAISED|FRAME_THICK,
438
+ :padLeft => 30, :padRight => 30, :padTop => 4, :padBottom => 4)
438
439
  return 1 if (croppanel.execute == 0)
439
440
  return 1 if (cx.value < 0 || cy.value < 0 ||
440
441
  cx.value+cw.value > image.width ||