wxruby 1.9.0-powerpc-darwin8.10.0 → 1.9.2-powerpc-darwin8.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/LICENSE +53 -0
  2. data/README +299 -0
  3. data/lib/wx.rb +7 -0
  4. data/lib/wx/accessors.rb +52 -0
  5. data/lib/wx/classes/app.rb +15 -1
  6. data/lib/wx/classes/bitmap.rb +2 -2
  7. data/lib/wx/classes/checklistbox.rb +30 -0
  8. data/lib/wx/classes/clientdc.rb +1 -1
  9. data/lib/wx/classes/commandevent.rb +7 -0
  10. data/lib/wx/classes/controlwithitems.rb +10 -0
  11. data/lib/wx/classes/evthandler.rb +99 -39
  12. data/lib/wx/classes/grid.rb +13 -13
  13. data/lib/wx/classes/listctrl.rb +9 -0
  14. data/lib/wx/classes/menu.rb +62 -0
  15. data/lib/wx/classes/menuitem.rb +7 -0
  16. data/lib/wx/classes/paintdc.rb +1 -1
  17. data/lib/wx/classes/point.rb +43 -0
  18. data/lib/wx/classes/size.rb +44 -0
  19. data/lib/wx/classes/styledtextctrl.rb +92 -0
  20. data/lib/wx/classes/textctrl.rb +14 -0
  21. data/lib/wx/classes/timer.rb +2 -2
  22. data/lib/wx/classes/treectrl.rb +18 -0
  23. data/lib/wx/classes/window.rb +13 -2
  24. data/lib/wx/keyword_ctors.rb +205 -0
  25. data/lib/wx/keyword_defs.rb +465 -0
  26. data/lib/wx/version.rb +1 -1
  27. data/lib/wxruby2.bundle +0 -0
  28. data/samples/aui/aui.rb +6 -5
  29. data/samples/bigdemo/wxListCtrl_virtual.rbw +21 -21
  30. data/samples/bigdemo/wxScrolledWindow.rbw +8 -3
  31. data/samples/calendar/calendar.rb +1 -1
  32. data/samples/caret/caret.rb +29 -39
  33. data/samples/etc/threaded.rb +81 -0
  34. data/samples/etc/wizard.rb +22 -24
  35. data/samples/event/event.rb +184 -0
  36. data/samples/html/html.rb +25 -12
  37. data/samples/listbook/listbook.rb +65 -67
  38. data/samples/minimal/minimal.rb +40 -50
  39. data/samples/minimal/mondrian.png +0 -0
  40. data/samples/minimal/nothing.rb +5 -30
  41. data/samples/text/scintilla.rb +22 -28
  42. data/samples/text/unicode.rb +1 -1
  43. data/samples/treectrl/treectrl.rb +197 -226
  44. metadata +20 -4
  45. data/samples/minimal/mondrian.xpm +0 -44
  46. data/samples/minimal/text.rb +0 -35
@@ -1,3 +1,3 @@
1
1
  module Wx
2
- WXRUBY_VERSION = '1.9.0'
2
+ WXRUBY_VERSION = '1.9.2'
3
3
  end
Binary file
@@ -564,7 +564,8 @@ class AuiFrame < Wx::Frame
564
564
  evt_update_ui(ID_VerticalGradient) { | e | on_update_ui(e) }
565
565
  evt_update_ui(ID_HorizontalGradient) { | e | on_update_ui(e) }
566
566
  evt_menu_range( ID_FirstPerspective,
567
- ID_FirstPerspective + @perspectives.length) { | e | }
567
+ ID_FirstPerspective +
568
+ @perspectives.length) { | e | on_restore_perspective(e) }
568
569
  evt_aui_pane_close { | e | on_pane_close(e) }
569
570
  evt_auinotebook_page_close(Wx::ID_ANY) { | e | on_notebook_page_close(e) }
570
571
  end
@@ -800,7 +801,7 @@ class AuiFrame < Wx::Frame
800
801
  def setup_perspectives
801
802
  perspective_all = @mgr.save_perspective
802
803
 
803
- @mgr.get_all_panes.each do | pane |
804
+ @mgr.each_pane do | pane |
804
805
  pane.hide unless pane.is_toolbar
805
806
  end
806
807
 
@@ -935,7 +936,7 @@ class AuiFrame < Wx::Frame
935
936
  end
936
937
 
937
938
 
938
- @mgr.get_all_panes.each do | pane |
939
+ @mgr.each_pane do | pane |
939
940
  maybe_nb = pane.get_window
940
941
  next unless maybe_nb.kind_of?(Wx::AuiNotebook)
941
942
  if e_id == ID_NotebookArtGloss
@@ -1023,8 +1024,8 @@ class AuiFrame < Wx::Frame
1023
1024
  def on_create_perspective
1024
1025
  msg = "Enter a name for the new perspective:"
1025
1026
  dlg = Wx::TextEntryDialog.new(self, msg, "Wx::AUI Test")
1026
- dlg.set_value("Perspective %d" % @perspectives.length + 1)
1027
- return unless dlg.show_modal != Wx::ID_OK
1027
+ dlg.set_value("Perspective %d" % [ @perspectives.length + 1 ] )
1028
+ return unless dlg.show_modal == Wx::ID_OK
1028
1029
  if @perspectives.length.zero?
1029
1030
  @perspectives_menu.append_separator
1030
1031
  end
@@ -60,33 +60,33 @@ class TestVirtualList < Wx::ListCtrl
60
60
  @log.write_text("on_item_deselected: %s" % event.get_index())
61
61
  end
62
62
 
63
- #---------------------------------------------------
64
- # These methods are callbacks for implementing the
65
- # "virtualness" of the list... Normally you would
66
- # determine the text, attributes and/or image based
67
- # on values from some external data source, but for
68
- # this demo we'll just calculate them
69
-
63
+ # These three following methods are callbacks for implementing the
64
+ # "virtualness" of the list; they *must* be defined by any ListCtrl
65
+ # object with the style LC_VIRTUAL.
66
+
67
+ # Normally you would determine the text, attributes and/or image
68
+ # based on values from some external data source, but for this demo
69
+ # we'll just calculate them based on order.
70
70
  def on_get_item_text(item, col)
71
- return "Item %d, column %d" % [item,col]
71
+ return "Item %d, column %d" % [item,col]
72
72
  end
73
73
 
74
- def on_get_item_image(item)
75
- if item % 3 == 0
76
- return @idx1
77
- else
78
- return -1
79
- end
74
+ def on_get_item_column_image(item, col)
75
+ if item % 4 == 0
76
+ return @idx1
77
+ else
78
+ return -1
79
+ end
80
80
  end
81
81
 
82
82
  def on_get_item_attr(item)
83
- if item % 3 == 1
84
- return @attr1
85
- elsif item % 3 == 2
86
- return @attr2
87
- else
88
- return nil
89
- end
83
+ if item % 3 == 1
84
+ return @attr1
85
+ elsif item % 3 == 2
86
+ return @attr2
87
+ else
88
+ return nil
89
+ end
90
90
  end
91
91
  end
92
92
 
@@ -139,6 +139,8 @@ class MyCanvas < Wx::ScrolledWindow
139
139
  if event.left_is_down() and !@drawing
140
140
  set_focus()
141
141
  set_XY(event)
142
+ @event_x_old = event.get_x # added this to save the current absolute...
143
+ @event_y_old = event.get_y # ... mouse position
142
144
  @curLine = []
143
145
  capture_mouse()
144
146
  @drawing = true
@@ -167,11 +169,14 @@ class MyCanvas < Wx::ScrolledWindow
167
169
 
168
170
  paint do | dc |
169
171
  dc.set_pen(Wx::Pen.new("MEDIUM FOREST GREEN", 4, Wx::SOLID))
170
- coords = [@x, @y] + convert_event_coords(event)
171
- @curLine.push(coords)
172
+ save_coords = [@x, @y] + convert_event_coords(event) # translate the absolute coords to save them in the array
173
+ coords = [@event_x_old, @event_y_old, event.get_x, event.get_y] # the absolute coords to use for the first draw
174
+ @curLine.push(save_coords) # use the translated coords here
172
175
  coords.flatten!()
173
- dc.draw_line(coords[0], coords[1], coords[2], coords[3])
176
+ dc.draw_line(coords[0], coords[1], coords[2], coords[3]) # and the absolute coords here
174
177
  set_XY(event)
178
+ @event_x_old = event.get_x # saving the new ...
179
+ @event_y_old = event.get_y # ... absolute coords
175
180
  end
176
181
  end
177
182
  end
@@ -232,7 +232,7 @@ class MyFrame < Frame
232
232
  end
233
233
  @calendar = MyCalendar.new(@panel, self, date, style)
234
234
  @sizer.add(@calendar, 0, Wx::ALIGN_CENTRE|Wx::ALL, 5)
235
- layout
235
+ @panel.layout
236
236
  end
237
237
 
238
238
  def highlight_special(on)
@@ -15,8 +15,6 @@ end
15
15
  include Wx
16
16
 
17
17
  # menu items
18
- Caret_Quit = ID_EXIT
19
- Caret_About = ID_ABOUT
20
18
  Caret_set_blink_time = 3
21
19
  Caret_Move = 4
22
20
 
@@ -27,26 +25,22 @@ Caret_Text = 1000
27
25
  # MyCanvas is a canvas on which you can type
28
26
  class MyCanvas < ScrolledWindow
29
27
  def initialize(parent)
30
- super(parent, -1,
31
- DEFAULT_POSITION, DEFAULT_SIZE,
32
- SUNKEN_BORDER )
28
+ super(parent, :style => SUNKEN_BORDER)
33
29
 
34
- set_background_colour(WHITE)
30
+ self.background_colour = WHITE
35
31
 
36
32
  @font = Font.new(12, FONTFAMILY_TELETYPE,
37
33
  FONTSTYLE_NORMAL, FONTWEIGHT_NORMAL)
38
34
 
39
- @x_caret = @y_caret =
40
- @x_chars = @y_chars = 0
41
-
35
+ @x_caret = @y_caret = @x_chars = @y_chars = 0
42
36
  @x_margin = @y_margin = 5
43
37
  @text = nil
44
38
 
45
39
  create_caret
46
40
 
47
- evt_paint {on_paint}
48
- evt_size {|event| on_size(event)}
49
- evt_char {|event| on_char(event)}
41
+ evt_paint :on_paint
42
+ evt_size :on_size
43
+ evt_char :on_char
50
44
  end
51
45
 
52
46
  def [](x,y)
@@ -108,14 +102,14 @@ class MyCanvas < ScrolledWindow
108
102
 
109
103
  def create_caret
110
104
  paint do | dc |
111
- dc.set_font(@font)
112
- @height_char = dc.get_char_height
113
- @width_char = dc.get_char_width
105
+ dc.font = @font
106
+ @height_char = dc.char_height
107
+ @width_char = dc.char_width
114
108
 
115
- caret = Caret.new(self, Size.new(@width_char, @height_char))
116
- set_caret(caret)
109
+ my_caret = Caret.new(self, Size.new(@width_char, @height_char))
110
+ self.caret = my_caret
117
111
 
118
- caret.move(Point.new(@x_margin, @y_margin))
112
+ caret.move [ @x_margin, @y_margin ]
119
113
  caret.show
120
114
  end
121
115
  end
@@ -130,13 +124,13 @@ class MyCanvas < ScrolledWindow
130
124
  def do_move_caret
131
125
  log_status("Caret is at (%d, %d)", @x_caret, @y_caret)
132
126
 
133
- get_caret.move_xy(@x_margin + @x_caret * @width_char,
134
- @y_margin + @y_caret * @height_char)
127
+ caret.move_xy( @x_margin + @x_caret * @width_char,
128
+ @y_margin + @y_caret * @height_char)
135
129
  end
136
130
 
137
131
  def on_size(event)
138
- @x_chars = (event.get_size.x - 2*@x_margin) / @width_char
139
- @y_chars = (event.get_size.y - 2*@y_margin) / @height_char
132
+ @x_chars = (event.size.x - 2 * @x_margin) / @width_char
133
+ @y_chars = (event.size.y - 2 * @y_margin) / @height_char
140
134
  if @x_chars <= 0
141
135
  @x_chars = 1
142
136
  end
@@ -152,17 +146,15 @@ class MyCanvas < ScrolledWindow
152
146
 
153
147
  @text = " " * @x_chars * @y_chars
154
148
 
155
- frame = get_parent
156
- if frame && frame.get_status_bar
149
+ if parent && parent.status_bar
157
150
  msg = sprintf("Panel size is (%d, %d)", @x_chars, @y_chars)
158
- frame.set_status_text(msg, 1)
159
- frame.refresh
151
+ parent.set_status_text(msg, 1)
152
+ parent.refresh
160
153
  end
161
154
  event.skip
162
155
  end
163
156
 
164
157
  def on_paint
165
- caret = get_caret
166
158
  if caret
167
159
  caret.hide
168
160
  end
@@ -180,7 +172,6 @@ class MyCanvas < ScrolledWindow
180
172
  if caret
181
173
  caret.show
182
174
  end
183
-
184
175
  end
185
176
 
186
177
  def on_char(event)
@@ -212,15 +203,14 @@ class MyCanvas < ScrolledWindow
212
203
  end
213
204
  do_move_caret
214
205
  end
215
-
216
206
  end
217
207
 
218
208
  class MyFrame < Frame
219
- def initialize(title,pos,size)
209
+ def initialize(title, pos, size)
220
210
  super(nil, -1, title, pos, size)
221
211
  # set the frame icon
222
212
  icon_file = File.join(File.dirname(__FILE__), 'mondrian.xpm')
223
- set_icon(Icon.new(icon_file, BITMAP_TYPE_XPM))
213
+ self.icon = Icon.new(icon_file, BITMAP_TYPE_XPM)
224
214
 
225
215
  # create a menu bar
226
216
  menu_file = Menu.new
@@ -228,16 +218,16 @@ class MyFrame < Frame
228
218
  menu_file.append(Caret_set_blink_time, "&Blink time...\tCtrl-B")
229
219
  menu_file.append(Caret_Move, "&Move caret\tCtrl-C")
230
220
  menu_file.append_separator
231
- menu_file.append(Caret_About, "&About...\tCtrl-A", "Show about dialog")
221
+ menu_file.append(Wx::ID_ABOUT, "&About...\tCtrl-A", "Show about dialog")
232
222
  menu_file.append_separator
233
- menu_file.append(Caret_Quit, "E&xit\tAlt-X", "Quit self program")
223
+ menu_file.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit self program")
234
224
 
235
225
  # now append the freshly created menu to the menu bar...
236
226
  menu_bar = MenuBar.new
237
227
  menu_bar.append(menu_file, "&File")
238
228
 
239
229
  # ... and attach self menu bar to the frame
240
- set_menu_bar(menu_bar)
230
+ self.menu_bar = menu_bar
241
231
 
242
232
  @canvas = MyCanvas.new(self)
243
233
 
@@ -247,12 +237,12 @@ class MyFrame < Frame
247
237
 
248
238
  # create a status bar just for fun (by default with 1 pane only)
249
239
  create_status_bar(2)
250
- set_status_text("Welcome to Windows!")
240
+ self.status_text = "Welcome to Windows!"
251
241
 
252
- evt_menu(Caret_Quit) {on_quit}
253
- evt_menu(Caret_About) {on_about}
254
- evt_menu(Caret_set_blink_time) {on_set_blink_time}
255
- evt_menu(Caret_Move) {on_caret_move}
242
+ evt_menu Wx::ID_EXIT, :on_quit
243
+ evt_menu Wx::ID_ABOUT, :on_about
244
+ evt_menu Caret_set_blink_time, :on_set_blink_time
245
+ evt_menu Caret_Move, :on_caret_move
256
246
  end
257
247
 
258
248
  def on_quit
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env ruby
2
+ # wxRuby2 Sample Code. Copyright (c) 2004-2006 Kevin B. Smith
3
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
+
5
+ begin
6
+ require 'wx'
7
+ rescue LoadError => no_wx_err
8
+ begin
9
+ require 'rubygems'
10
+ require 'wx'
11
+ rescue LoadError
12
+ raise no_wx_err
13
+ end
14
+ end
15
+
16
+ # This simple sample demonstrates how to use Ruby 1.8's lightweight
17
+ # (green) threads to execute non-GUI code in parallel with a wxRuby
18
+ # GUI. This strategy is useful in a number of situations:
19
+ #
20
+ # * To keep the GUI responsive whilst computationally intensive
21
+ # operations are carried out in the background
22
+ # * To keep the GUI responsive while waiting for networking operations
23
+ # to complete
24
+ #
25
+ # The basic problem is that, as with other Ruby GUI toolkits, non-GUI
26
+ # threads will not, by default, get allocated time to run while Ruby is
27
+ # busy in Wx code - the main wxRuby event loop. Strategies to deal with
28
+ # this include using non-blocking IO, and, more generically, using
29
+ # wxRuby's Timer class to explicitly allocate time for non-GUI threads
30
+ # to run. The latter technique is shown here.
31
+
32
+ # This frame shows a set of progress bars which monitor progress of
33
+ # long-running tasks. In this example, this long-running task is
34
+ # emulated by simply sleep-ing for random periods, but could equally be
35
+ # downloading from a socket or parsing a file.
36
+ class ProgressFrame < Wx::Frame
37
+ STEPS = 20
38
+ def initialize
39
+ super(nil, :title => 'Threading demo')
40
+ @gauges = []
41
+ panel = Wx::Panel.new(self)
42
+ sizer = Wx::BoxSizer.new(Wx::VERTICAL)
43
+ # show ten gauges
44
+ 10.times do
45
+ gauge = Wx::Gauge.new(panel, :range => STEPS)
46
+ # For each gauge, start a new thread in which the task runs
47
+ Thread.new do
48
+ # The long-running task
49
+ STEPS.times do | i |
50
+ sleep rand(100) / 50.0
51
+ # Update the main GUI
52
+ gauge.value = i + 1
53
+ end
54
+ end
55
+ @gauges << gauge
56
+ sizer.add(gauge, 0, Wx::GROW|Wx::ALL, 2)
57
+ end
58
+ panel.sizer = sizer
59
+ sizer.fit(panel)
60
+ end
61
+ end
62
+
63
+ # This app class creates a frame, and, importantly, a timer to allow
64
+ class GaugeApp < Wx::App
65
+ # Get a guaranteed-unique id
66
+ THREAD_TIMER_ID = Wx::ID_HIGHEST + 1
67
+ def on_init
68
+ # Create a global application timer
69
+ t = Wx::Timer.new(self, THREAD_TIMER_ID)
70
+ # When the timer "ticks", switch control to other ruby threads
71
+ evt_timer(THREAD_TIMER_ID) { Thread.pass }
72
+ # Start the timer to run every 1/40 second (25ms); higher values
73
+ # will make the other threads run more often, but will eventually
74
+ # degrade the responsiveness of the GUI.
75
+ t.start(25)
76
+ prog = ProgressFrame.new
77
+ prog.show
78
+ end
79
+ end
80
+
81
+ GaugeApp.new.main_loop
@@ -14,42 +14,41 @@ rescue LoadError => no_wx_err
14
14
  end
15
15
 
16
16
  class MyFrame < Wx::Frame
17
- def initialize(title, pos, size, style = Wx::DEFAULT_FRAME_STYLE)
18
- super(nil, -1, title, pos, size, style)
17
+ def initialize(title, pos, size)
18
+ super(nil, :title => title, :position => pos, :size => size)
19
19
 
20
-
21
- menuFile = Wx::Menu.new()
22
- helpMenu = Wx::Menu.new()
20
+ menuFile = Wx::Menu.new
21
+ helpMenu = Wx::Menu.new
23
22
  helpMenu.append(Wx::ID_ABOUT, "&About...\tF1", "Show about dialog")
24
23
  menuFile.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit this program")
25
- menuBar = Wx::MenuBar.new()
24
+ menuBar = Wx::MenuBar.new
26
25
  menuBar.append(menuFile, "&File")
27
26
  menuBar.append(helpMenu, "&Help")
28
- set_menu_bar(menuBar)
29
-
30
- create_status_bar(2)
31
- set_status_text("Welcome to wxRuby!")
32
- s = Wx::StaticText.new(self, -1, 'The Wizard has completed')
27
+ self.menu_bar = menuBar
33
28
 
29
+ create_status_bar(1)
30
+ self.status_text = "Welcome to wxRuby!"
31
+ s = Wx::StaticText.new(self, :label => 'The Wizard has completed')
32
+ evt_menu Wx::ID_EXIT, :on_quit
33
+ evt_menu Wx::ID_ABOUT, :on_about
34
34
 
35
- evt_menu(Wx::ID_EXIT) { on_quit }
36
- evt_menu(Wx::ID_ABOUT) { on_about }
37
- w = Wx::Wizard.new(self, -1, 'The WxRuby Wizard')
35
+ w = Wx::Wizard.new(self, :title => 'The WxRuby Wizard')
38
36
  p1 = Wx::WizardPageSimple.new(w)
39
- s = Wx::StaticText.new(p1, -1, 'This is the first page')
37
+ s = Wx::StaticText.new(p1, :label => 'This is the first page')
38
+
40
39
  p2 = Wx::WizardPageSimple.new(w, p1)
41
40
  p1.set_next(p2)
42
- s = Wx::StaticText.new(p2, -1, 'This is the second page')
41
+ s = Wx::StaticText.new(p2, :label => 'This is the second page')
42
+
43
43
  p3 = Wx::WizardPageSimple.new(w, p2)
44
44
  p2.set_next(p3)
45
- s = Wx::StaticText.new(p3, -1, 'This is the final page')
46
-
47
- evt_wizard_page_changed(w.get_id) { p "page changed" }
48
- evt_wizard_page_changing(w.get_id) { p "page changing" }
49
- evt_wizard_help(w.get_id) { p "wizard help" }
50
- evt_wizard_cancel(w.get_id) { p "wizard cancelled" }
51
- evt_wizard_finished(w.get_id) { p "wizard finished" }
45
+ s = Wx::StaticText.new(p3, :label => 'This is the final page')
52
46
 
47
+ evt_wizard_page_changed(w) { p "page changed" }
48
+ evt_wizard_page_changing(w) { p "page changing" }
49
+ evt_wizard_help(w) { p "wizard help" }
50
+ evt_wizard_cancel(w) { p "wizard cancelled" }
51
+ evt_wizard_finished(w) { p "wizard finished" }
53
52
 
54
53
  w.run_wizard(p1)
55
54
  end
@@ -70,7 +69,6 @@ class RbApp < Wx::App
70
69
  frame = MyFrame.new("Wizard wxRuby App",
71
70
  Wx::Point.new(50, 50),
72
71
  Wx::Size.new(450, 340))
73
-
74
72
  frame.show(true)
75
73
 
76
74
  end