fxruby 1.6.5 → 1.6.6
Sign up to get free protection for your applications and to get access to all the features.
- data/doc/apes02.html +2 -2
- data/doc/apes03.html +1 -1
- data/doc/book.html +1 -1
- data/doc/changes.html +55 -21
- data/doc/differences.html +9 -9
- data/doc/implementation.html +1 -1
- data/doc/library.html +5 -5
- data/doc/opengl.html +5 -5
- data/doc/pt02.html +1 -1
- data/doc/scintilla.html +4 -4
- data/doc/subversion.html +1 -1
- data/examples/accell.rb +36 -0
- data/examples/babelfish.rb +6 -9
- data/examples/bounce.rb +5 -4
- data/examples/button.rb +19 -21
- data/examples/datatarget.rb +9 -8
- data/examples/dctest.rb +7 -13
- data/examples/dialog.rb +12 -16
- data/examples/dilbert.rb +4 -4
- data/examples/dirlist.rb +6 -5
- data/examples/dragdrop.rb +30 -33
- data/examples/dragsource.rb +22 -22
- data/examples/dropsite.rb +16 -17
- data/examples/foursplit.rb +8 -13
- data/examples/gltest.rb +21 -24
- data/examples/glviewer.rb +56 -58
- data/examples/header.rb +25 -25
- data/examples/iconlist.rb +12 -8
- data/examples/image.rb +36 -34
- data/examples/imageviewer.rb +44 -43
- data/examples/inputs.rb +15 -15
- data/examples/mditest.rb +6 -5
- data/examples/pig.rb +1 -0
- data/examples/raabrowser.rb +31 -40
- data/examples/ratio.rb +27 -16
- data/examples/rulerview.rb +4 -3
- data/examples/scribble.rb +14 -17
- data/examples/shutter.rb +10 -9
- data/examples/splitter.rb +7 -6
- data/examples/tabbook.rb +59 -17
- data/examples/table.rb +12 -16
- data/ext/fox16/FXRuby.cpp +2 -2
- data/lib/fox16/glshapes.rb +6 -6
- data/lib/fox16/iterators.rb +13 -8
- data/lib/fox16/kwargs.rb +604 -380
- data/lib/fox16/version.rb +1 -1
- data/tests/TC_FXTreeList.rb +13 -13
- data/tests/TC_FXTreeListBox.rb +3 -3
- metadata +4 -3
data/examples/inputs.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
|
|
@@ -8,20 +9,19 @@ class InputHandlerWindow < FXMainWindow
|
|
8
9
|
|
9
10
|
def initialize(app)
|
10
11
|
# Initialize base class first
|
11
|
-
super(app, "Input Handlers Test",
|
12
|
+
super(app, "Input Handlers Test", :opts => DECOR_ALL, :width => 400, :height => 300)
|
12
13
|
|
13
14
|
# Text area plus a button
|
14
15
|
commands = FXHorizontalFrame.new(self, LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X)
|
15
16
|
FXLabel.new(commands, "Command:")
|
16
|
-
@cmdInput = FXTextField.new(commands, 30,
|
17
|
-
nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X)
|
17
|
+
@cmdInput = FXTextField.new(commands, 30, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X)
|
18
18
|
@cmdInput.connect(SEL_COMMAND, method(:onCmdText))
|
19
19
|
FXHorizontalSeparator.new(self, LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X)
|
20
20
|
textFrame = FXVerticalFrame.new(self,
|
21
21
|
FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
22
22
|
|
23
23
|
# Output will be displayed in a multiline text area
|
24
|
-
@cmdOutput = FXText.new(textFrame,
|
24
|
+
@cmdOutput = FXText.new(textFrame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
25
25
|
|
26
26
|
# Initialize the pipe
|
27
27
|
@pipe = nil
|
@@ -52,19 +52,19 @@ class InputHandlerWindow < FXMainWindow
|
|
52
52
|
@pipe = IO.popen(@cmdInput.text)
|
53
53
|
|
54
54
|
# Register input callbacks and return
|
55
|
-
getApp().addInput(@pipe, INPUT_READ|INPUT_EXCEPT)
|
55
|
+
getApp().addInput(@pipe, INPUT_READ|INPUT_EXCEPT) do |sender, sel, ptr|
|
56
56
|
case FXSELTYPE(sel)
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
# puts 'onPipeExcept'
|
57
|
+
when SEL_IO_READ
|
58
|
+
text = @pipe.read
|
59
|
+
if text && text.length > 0
|
60
|
+
@cmdOutput.appendText(text)
|
61
|
+
else
|
62
|
+
closePipe
|
63
|
+
end
|
64
|
+
when SEL_IO_EXCEPT
|
65
|
+
# puts 'onPipeExcept'
|
66
66
|
end
|
67
|
-
|
67
|
+
end
|
68
68
|
return 1
|
69
69
|
end
|
70
70
|
end
|
data/examples/mditest.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
|
|
@@ -47,7 +48,7 @@ class MDITestWindow < FXMainWindow
|
|
47
48
|
|
48
49
|
def initialize(app)
|
49
50
|
# Invoke base class initialize method first
|
50
|
-
super(app, "MDI Widget Test",
|
51
|
+
super(app, "MDI Widget Test", :opts => DECOR_ALL, :width => 800, :height => 600)
|
51
52
|
|
52
53
|
# Create the font
|
53
54
|
@font = FXFont.new(getApp(), "courier", 15, FONTWEIGHT_BOLD)
|
@@ -64,9 +65,9 @@ class MDITestWindow < FXMainWindow
|
|
64
65
|
|
65
66
|
# Icon for MDI Child
|
66
67
|
@mdiicon = nil
|
67
|
-
File.open(File.join("icons", "penguin.png"), "rb")
|
68
|
+
File.open(File.join("icons", "penguin.png"), "rb") do |f|
|
68
69
|
@mdiicon = FXPNGIcon.new(getApp(), f.read)
|
69
|
-
|
70
|
+
end
|
70
71
|
|
71
72
|
# Make MDI Menu
|
72
73
|
@mdimenu = FXMDIMenu.new(self, @mdiclient)
|
@@ -133,8 +134,8 @@ class MDITestWindow < FXMainWindow
|
|
133
134
|
0, x, y, w, h)
|
134
135
|
scrollwindow = FXScrollWindow.new(mdichild, 0)
|
135
136
|
scrollwindow.verticalScrollBar.setLine(@font.fontHeight)
|
136
|
-
btn = FXButton.new(scrollwindow, TYGER,
|
137
|
-
LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,
|
137
|
+
btn = FXButton.new(scrollwindow, TYGER,
|
138
|
+
:opts => LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, :width => 600, :height => 1000)
|
138
139
|
btn.font = @font
|
139
140
|
btn.backColor = FXColor::White
|
140
141
|
mdichild
|
data/examples/pig.rb
CHANGED
data/examples/raabrowser.rb
CHANGED
@@ -1,60 +1,51 @@
|
|
1
|
-
require 'cgi'
|
2
1
|
require 'fox16'
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
require 'fox16/missingdep'
|
7
|
-
MSG = <<EOM
|
8
|
-
Sorry, this example depends on the SOAP4R extension. Please
|
9
|
-
check the Ruby Application Archives for an appropriate
|
10
|
-
download site.
|
11
|
-
EOM
|
12
|
-
missingDependency(MSG)
|
13
|
-
end
|
2
|
+
require 'fox16/kwargs'
|
3
|
+
require 'cgi'
|
4
|
+
require 'soap/wsdlDriver'
|
14
5
|
|
15
6
|
include Fox
|
16
7
|
|
17
8
|
class RAABrowserWindow < FXMainWindow
|
9
|
+
|
18
10
|
def initialize(app)
|
19
11
|
# Initialize base class
|
20
|
-
super(app, "Ruby Application Archive",
|
21
|
-
|
12
|
+
super(app, "Ruby Application Archive", :opts => DECOR_ALL, :width => 600, :height => 600)
|
13
|
+
|
22
14
|
# Contents
|
23
15
|
contents = FXHorizontalFrame.new(self, LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
24
16
|
|
25
17
|
# Horizontal splitter
|
26
18
|
splitter = FXSplitter.new(contents, (LAYOUT_SIDE_TOP|LAYOUT_FILL_X|
|
27
|
-
|
19
|
+
LAYOUT_FILL_Y|SPLITTER_TRACKING|SPLITTER_HORIZONTAL))
|
28
20
|
|
29
21
|
# Create a sunken frame to hold the tree list
|
30
22
|
groupbox = FXGroupBox.new(splitter, "Contents",
|
31
|
-
|
23
|
+
LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE)
|
32
24
|
frame = FXHorizontalFrame.new(groupbox,
|
33
|
-
|
25
|
+
LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK)
|
34
26
|
|
35
27
|
# Create the empty tree list
|
36
|
-
@treeList = FXTreeList.new(frame,
|
37
|
-
|
38
|
-
TREELIST_ROOT_BOXES|LAYOUT_FILL_X|LAYOUT_FILL_Y))
|
28
|
+
@treeList = FXTreeList.new(frame,
|
29
|
+
:opts => TREELIST_BROWSESELECT|TREELIST_SHOWS_LINES|TREELIST_SHOWS_BOXES|TREELIST_ROOT_BOXES|LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
39
30
|
@treeList.connect(SEL_COMMAND) do |sender, sel, item|
|
40
31
|
if @treeList.isItemLeaf(item)
|
41
32
|
getApp().beginWaitCursor do
|
42
33
|
begin
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
34
|
+
gem = @raa.gem(item.text)
|
35
|
+
@category.value = gem.category.major + "/" + gem.category.minor
|
36
|
+
@projectName.value = gem.project.name
|
37
|
+
@version.value = gem.project.version
|
38
|
+
@status.value = gem.project.status
|
39
|
+
@lastUpdate.value = gem.updated.strftime("%F %T GMT")
|
40
|
+
@owner.value = "#{gem.owner.name} (#{gem.owner.email.to_s})"
|
41
|
+
@homepage.value = gem.project.url.to_s
|
42
|
+
@download.value = gem.project.download.to_s
|
43
|
+
@license.value = gem.project.license
|
44
|
+
@description.value = CGI::unescapeHTML(gem.project.description).gsub(/\r\n/, "\n")
|
45
|
+
rescue SOAP::PostUnavailableError => ex
|
46
|
+
getApp().endWaitCursor
|
47
|
+
FXMessageBox.error(self, MBOX_OK, "SOAP Error", ex.message)
|
48
|
+
end
|
58
49
|
end
|
59
50
|
end
|
60
51
|
end
|
@@ -100,18 +91,18 @@ class RAABrowserWindow < FXMainWindow
|
|
100
91
|
FXText.new(descriptionFrame, @description, FXDataTarget::ID_VALUE, TEXT_READONLY|TEXT_WORDWRAP|LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
101
92
|
|
102
93
|
# Initialize the service
|
103
|
-
@raa =
|
94
|
+
@raa = SOAP::WSDLDriverFactory.new("http://www2.ruby-lang.org/xmlns/soap/interface/RAA/0.0.4/").create_rpc_driver
|
104
95
|
|
105
96
|
# Set up the product tree list
|
106
|
-
@productTree = @raa.
|
97
|
+
@productTree = @raa.tree_by_category
|
107
98
|
@productTree.keys.sort.each do |sectionName|
|
108
99
|
sectionHash = @productTree[sectionName]
|
109
|
-
sectionItem = @treeList.
|
100
|
+
sectionItem = @treeList.appendItem(nil, sectionName)
|
110
101
|
sectionHash.keys.sort.each do |categoryName|
|
111
102
|
categoryArray = sectionHash[categoryName]
|
112
|
-
categoryItem = @treeList.
|
103
|
+
categoryItem = @treeList.appendItem(sectionItem, categoryName)
|
113
104
|
categoryArray.each do |productName|
|
114
|
-
productItem = @treeList.
|
105
|
+
productItem = @treeList.appendItem(categoryItem, productName)
|
115
106
|
end
|
116
107
|
end
|
117
108
|
end
|
data/examples/ratio.rb
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
|
7
7
|
require 'fox16'
|
8
8
|
require 'fox16/colors'
|
9
|
+
require 'fox16/kwargs'
|
9
10
|
|
10
11
|
include Fox
|
11
12
|
|
@@ -13,36 +14,46 @@ class MainWindow < FXMainWindow
|
|
13
14
|
|
14
15
|
def initialize(app)
|
15
16
|
# Initialize base class first
|
16
|
-
super(app, 'Ratio',
|
17
|
+
super(app, 'Ratio', :opts => DECOR_ALL,
|
18
|
+
:width => 400, :height => 200,
|
19
|
+
:padLeft => 8, :padRight => 8, :padTop => 8, :padBottom =>8,
|
20
|
+
:hSpacing => 6, :vSpacing => 6)
|
17
21
|
|
18
22
|
# Add quit button and connect it to application
|
19
|
-
FXButton.new(self, "&Quit", nil, app, FXApp::ID_QUIT,
|
23
|
+
FXButton.new(self, "&Quit", nil, app, FXApp::ID_QUIT,
|
24
|
+
:opts => FRAME_RAISED|FRAME_THICK|LAYOUT_SIDE_BOTTOM|LAYOUT_CENTER_X,
|
25
|
+
:padLeft => 20, :padRight => 20, :padTop => 2, :padBottom => 2)
|
20
26
|
|
21
27
|
# Label above it
|
22
|
-
FXLabel.new(self,
|
28
|
+
FXLabel.new(self,
|
29
|
+
"FXSpring can be used to keep widgets at fixed size ratios.\n\nResize the window to see how it behaves!",
|
30
|
+
:opts => LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
23
31
|
|
24
32
|
# Layout manager to place the springs
|
25
|
-
horz = FXHorizontalFrame.new(self, FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y,
|
33
|
+
horz = FXHorizontalFrame.new(self, FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y,
|
34
|
+
:padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0,
|
35
|
+
:hSpacing => 0, :vSpacing => 0)
|
26
36
|
|
27
37
|
# First spring is set to behave normally in Y direction,
|
28
38
|
# but to have a ratio 1 for the X direction
|
29
|
-
FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y,
|
30
|
-
FXLabel.new(
|
31
|
-
|
39
|
+
FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y, :relw => 1, :padding => 0) do |spring|
|
40
|
+
FXLabel.new(spring, "1", :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y) do |label|
|
41
|
+
label.backColor = FXColor::Red
|
32
42
|
end
|
33
43
|
end
|
34
44
|
|
35
45
|
# Second spring has ratio 2 in the X direction
|
36
|
-
FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y,
|
37
|
-
FXLabel.new(
|
38
|
-
|
46
|
+
FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y, :relw => 2, :padding => 0) do |spring|
|
47
|
+
FXLabel.new(spring, "2", :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y) do |label|
|
48
|
+
label.backColor = FXColor::Green
|
39
49
|
end
|
40
50
|
end
|
41
51
|
|
42
52
|
# Third spring has ratio 3 in the X direction
|
43
|
-
FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y,
|
44
|
-
|
45
|
-
|
53
|
+
FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y, :relw => 3, :padding => 0) do |spring|
|
54
|
+
puts "pl, pr, pt, pb = #{spring.padLeft}, #{spring.padRight}, #{spring.padTop}, #{spring.padBottom}"
|
55
|
+
FXLabel.new(spring, "3", :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y) do |label|
|
56
|
+
label.backColor = FXColor::Blue
|
46
57
|
end
|
47
58
|
end
|
48
59
|
end
|
@@ -55,16 +66,16 @@ class MainWindow < FXMainWindow
|
|
55
66
|
end # class MainWindow
|
56
67
|
|
57
68
|
if __FILE__ == $0
|
58
|
-
# Construct an application
|
69
|
+
# Construct an application
|
59
70
|
FXApp.new('Smithy', 'Max') do |theApp|
|
60
71
|
|
61
|
-
# Construct the main window
|
72
|
+
# Construct the main window
|
62
73
|
MainWindow.new(theApp)
|
63
74
|
|
64
75
|
# Create and show the application windows
|
65
76
|
theApp.create
|
66
77
|
|
67
|
-
# Run the application
|
78
|
+
# Run the application
|
68
79
|
theApp.run
|
69
80
|
end
|
70
81
|
end
|
data/examples/rulerview.rb
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
require 'fox16'
|
2
|
+
require 'fox16/kwargs'
|
2
3
|
|
3
4
|
include Fox
|
4
5
|
|
5
6
|
class RulerViewExample < FXMainWindow
|
6
7
|
def initialize(app)
|
7
8
|
# Initialize base class
|
8
|
-
super(app, "Ruler View",
|
9
|
+
super(app, "Ruler View", :opts => DECOR_ALL, :width => 400, :height => 400)
|
9
10
|
|
10
11
|
# Construct a ruler view inside
|
11
|
-
ruler_view = FXRulerView.new(self,
|
12
|
+
ruler_view = FXRulerView.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
12
13
|
|
13
14
|
# And put some content inside that
|
14
|
-
contents = FXText.new(ruler_view,
|
15
|
+
contents = FXText.new(ruler_view, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
15
16
|
contents.text = "This is a test."
|
16
17
|
end
|
17
18
|
end
|
data/examples/scribble.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
|
|
@@ -8,28 +9,26 @@ class ScribbleWindow < FXMainWindow
|
|
8
9
|
|
9
10
|
def initialize(app)
|
10
11
|
# Call base class initializer first
|
11
|
-
super(app, "Scribble Application",
|
12
|
-
0, 0, 800, 600)
|
12
|
+
super(app, "Scribble Application", :width => 800, :height => 600)
|
13
13
|
|
14
14
|
# Construct a horizontal frame to hold the main window's contents
|
15
15
|
@contents = FXHorizontalFrame.new(self,
|
16
|
-
LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y,
|
16
|
+
LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y,
|
17
|
+
:padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0)
|
17
18
|
|
18
19
|
# Left pane contains the canvas
|
19
20
|
@canvasFrame = FXVerticalFrame.new(@contents,
|
20
21
|
FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
|
21
|
-
|
22
|
+
:padLeft => 10, :padRight => 10, :padTop => 10, :padBottom => 10)
|
22
23
|
|
23
24
|
# Place a label above the canvas
|
24
|
-
FXLabel.new(@canvasFrame, "Canvas Frame", nil,
|
25
|
-
JUSTIFY_CENTER_X|LAYOUT_FILL_X)
|
25
|
+
FXLabel.new(@canvasFrame, "Canvas Frame", nil, JUSTIFY_CENTER_X|LAYOUT_FILL_X)
|
26
26
|
|
27
27
|
# Horizontal divider line
|
28
28
|
FXHorizontalSeparator.new(@canvasFrame, SEPARATOR_GROOVE|LAYOUT_FILL_X)
|
29
29
|
|
30
30
|
# Drawing canvas
|
31
|
-
@canvas = FXCanvas.new(@canvasFrame,
|
32
|
-
LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT)
|
31
|
+
@canvas = FXCanvas.new(@canvasFrame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT)
|
33
32
|
@canvas.connect(SEL_PAINT) do |sender, sel, event|
|
34
33
|
FXDCWindow.new(@canvas, event) do |dc|
|
35
34
|
dc.foreground = @canvas.backColor
|
@@ -94,24 +93,22 @@ class ScribbleWindow < FXMainWindow
|
|
94
93
|
# Right pane for the buttons
|
95
94
|
@buttonFrame = FXVerticalFrame.new(@contents,
|
96
95
|
FRAME_SUNKEN|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
|
97
|
-
|
96
|
+
:padLeft => 10, :padRight => 10, :padTop => 10, :padBottom => 10)
|
98
97
|
|
99
98
|
# Label above the buttons
|
100
|
-
FXLabel.new(@buttonFrame, "Button Frame", nil,
|
101
|
-
JUSTIFY_CENTER_X|LAYOUT_FILL_X)
|
99
|
+
FXLabel.new(@buttonFrame, "Button Frame", nil, JUSTIFY_CENTER_X|LAYOUT_FILL_X)
|
102
100
|
|
103
101
|
# Horizontal divider line
|
104
|
-
FXHorizontalSeparator.new(@buttonFrame,
|
105
|
-
SEPARATOR_RIDGE|LAYOUT_FILL_X)
|
102
|
+
FXHorizontalSeparator.new(@buttonFrame, SEPARATOR_RIDGE|LAYOUT_FILL_X)
|
106
103
|
|
107
104
|
# Enable or disable mirror mode
|
108
105
|
@mirrorMode = FXDataTarget.new(false)
|
109
106
|
FXCheckButton.new(@buttonFrame, "Mirror", @mirrorMode, FXDataTarget::ID_VALUE, CHECKBUTTON_NORMAL|LAYOUT_FILL_X)
|
110
107
|
|
111
108
|
# Button to clear the canvas
|
112
|
-
clearButton = FXButton.new(@buttonFrame, "&Clear",
|
113
|
-
FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
|
114
|
-
|
109
|
+
clearButton = FXButton.new(@buttonFrame, "&Clear",
|
110
|
+
:opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
|
111
|
+
:padLeft => 10, :padRight => 10, :padTop => 5, :padBottom => 5)
|
115
112
|
clearButton.connect(SEL_COMMAND) do
|
116
113
|
FXDCWindow.new(@canvas) do |dc|
|
117
114
|
dc.foreground = @canvas.backColor
|
@@ -136,7 +133,7 @@ class ScribbleWindow < FXMainWindow
|
|
136
133
|
# Exit button
|
137
134
|
FXButton.new(@buttonFrame, "&Exit", nil, app, FXApp::ID_QUIT,
|
138
135
|
FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
|
139
|
-
|
136
|
+
:padLeft => 10, :padRight => 10, :padTop => 5, :padBottom => 5)
|
140
137
|
|
141
138
|
# Initialize other member variables
|
142
139
|
@drawColor = "red"
|
data/examples/shutter.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
|
|
@@ -8,7 +9,7 @@ GORTS_BLURB = "Icons courtesy of Gort's Icons:\nhttp://www.forrestwalter.com/ico
|
|
8
9
|
|
9
10
|
class ShutterItem < FXShutterItem
|
10
11
|
def initialize(p, text, icon=nil, opts=0)
|
11
|
-
super(p, text, icon, opts|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
|
12
|
+
super(p, text, icon, opts|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT, :padding => 10, :hSpacing => 10, :vSpacing => 10)
|
12
13
|
button.padTop = 2
|
13
14
|
button.padBottom = 2
|
14
15
|
end
|
@@ -16,7 +17,7 @@ end
|
|
16
17
|
|
17
18
|
class ShutterButton < FXButton
|
18
19
|
def initialize(p, txt, ic=nil)
|
19
|
-
super(p, txt, ic,
|
20
|
+
super(p, txt, ic, :opts => BUTTON_TOOLBAR|TEXT_BELOW_ICON|FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT)
|
20
21
|
self.backColor = p.backColor
|
21
22
|
self.textColor = FXRGB(255, 255, 255)
|
22
23
|
end
|
@@ -31,9 +32,9 @@ class ShutterWindow < FXMainWindow
|
|
31
32
|
begin
|
32
33
|
filename = File.join("icons", filename)
|
33
34
|
icon = nil
|
34
|
-
File.open(filename, "rb")
|
35
|
+
File.open(filename, "rb") do |f|
|
35
36
|
icon = FXICOIcon.new(getApp(), f.read)
|
36
|
-
|
37
|
+
end
|
37
38
|
icon
|
38
39
|
rescue
|
39
40
|
raise RuntimeError, "Couldn't load icon: #{filename}"
|
@@ -42,7 +43,7 @@ class ShutterWindow < FXMainWindow
|
|
42
43
|
|
43
44
|
def initialize(app)
|
44
45
|
# Invoke base class initialize first
|
45
|
-
super(app, "Look Out!",
|
46
|
+
super(app, "Look Out!", :opts => DECOR_ALL, :width => 600, :height => 600)
|
46
47
|
|
47
48
|
# Menubar along the top
|
48
49
|
menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
@@ -85,9 +86,9 @@ class ShutterWindow < FXMainWindow
|
|
85
86
|
LAYOUT_FILL_Y|SPLITTER_TRACKING))
|
86
87
|
|
87
88
|
# Shutter area on the left
|
88
|
-
@shutter = FXShutter.new(splitter,
|
89
|
-
FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y,
|
90
|
-
|
89
|
+
@shutter = FXShutter.new(splitter,
|
90
|
+
:opts => FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y,
|
91
|
+
:padding => 0, :hSpacing => 0, :vSpacing => 0)
|
91
92
|
|
92
93
|
fatBot = loadIcon("FatBot.ico")
|
93
94
|
angryGuy = loadIcon("AngryGuyInBunnySuit.ico")
|
@@ -121,7 +122,7 @@ class ShutterWindow < FXMainWindow
|
|
121
122
|
# Right pane is a switcher
|
122
123
|
# For a real application, each panel in the switcher would have real, working contents...
|
123
124
|
@switcher = FXSwitcher.new(splitter,
|
124
|
-
FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y,
|
125
|
+
FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
|
125
126
|
|
126
127
|
FXLabel.new(@switcher,
|
127
128
|
"Lookout Today!\n\n#{GORTS_BLURB}", nil, LAYOUT_FILL_X|LAYOUT_FILL_Y)
|