wx_sugar 0.1.13 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/wx_sugar/all.rb CHANGED
@@ -1,71 +1,3 @@
1
- # = WxSugar
2
- #
3
- # WxSugar is a set of additions to the WxRuby API, written in pure
4
- # ruby. They're intended to:
5
- #
6
- # * Make some tricky WxWidgets things easier and more consistent
7
- # * Reduce repetitiveness and redundancy for common tasks
8
- # * Make code more expressive
9
- # * Make code more idiomatically Rubyish
10
- #
11
- # Not everyone will like all the extensions to WxRuby here. So the
12
- # Sugar modules:
13
- #
14
- # * Can generally be used separately, without depending on each other
15
- # * Supplement rather than replace the underlying 'raw' API
16
- #
17
- # == Using WxSugar
18
- #
19
- # The extensions can currently be used with WxRuby2 or the old WxRuby
20
- # (0.6.0). WxRuby2 is strongly recommended, and support for the old
21
- # series may be dropped in the future.
22
- #
23
- # The simplest way to use WxSugar is to load all the behaviours. You
24
- # should load the wx library first:
25
- #
26
- # require 'wx'
27
- # # OR ... old non-SWIG beta veresion
28
- # require 'wxruby'
29
- #
30
- # require 'wx_sugar/all'
31
- # ...
32
- #
33
- # If you only want to load specific WxSugar behaviours, just +require+
34
- # the desired extensions only
35
- #
36
- # require 'wx_sugar/keyword_constructors'
37
- # require 'wx_sugar/acccessors'
38
- #
39
- # == Overview of extensions
40
- #
41
- # The following are the WxSugar behaviours that are available. In
42
- # general you require one of these extensions, it modifies the behaviour
43
- # of all relevant Wx classes, and affects all new instances.
44
- #
45
- # [accessors]
46
- # Provide ruby-style getters, setters and question-mark methods
47
- # [delayed_constructors]
48
- # Required by +layout+, of limited independent interest
49
- # [event_connector]
50
- # Neater syntax for connecting event listeners
51
- # [keyword_constructors]
52
- # Use keyword-style hash arguments to construct widgets
53
- # [layout]
54
- # Easy interface to using WxWidgets Sizers to arrange controls
55
- # [menu]
56
- # Create and update menus without a mess of system ids
57
- # [wx_classes]
58
- # Useful ruby methods added to individual Wx classes.
59
- #
60
- # === Deprecated extensions
61
- #
62
- # This module is deprecated and will soon be removed.
63
- #
64
- # [itemdata.rb]
65
- # Linking ruby objects with wx controls; use the
66
- # get/set_item_data methods in core wxruby2 instead.
67
-
68
-
69
1
  %w[ accessors delayed_constructors event_connector
70
2
  keyword_constructors layout menu wx_classes ].each do | ext_feature |
71
3
  require 'wx_sugar/' + ext_feature
@@ -5,13 +5,6 @@
5
5
  # and is no use on its own - except if you are looking for a bug or want
6
6
  # to add a missing class.
7
7
 
8
- # This is a dummy, this variable is not loaded until Wx init
9
- # hush warnings if it has already been loaded when we get here
10
- v = $VERBOSE
11
- $VERBOSE = nil
12
- Wx::NULL_BITMAP = nil
13
- $VERBOSE = v
14
-
15
8
  module WxSugar
16
9
  @defined_classes = {}
17
10
 
@@ -85,6 +78,18 @@ WxSugar.define_keyword_ctors('MiniFrame') do
85
78
  end
86
79
 
87
80
  # wxSplashScreen Splash screen class
81
+ # FIXME - this probably won't work at present because the 'parent' arg
82
+ # comes in a funny place in this class's ctor
83
+ #
84
+ # WxSugar.define_keyword_ctors('SplashScreen') do
85
+ # wx_ctor_params :bitmap => Wx::NULL_BITMAP
86
+ # wx_ctor_params :splashstyle, :milliseconds, :id => 1
87
+ # wx_ctor_params :parent => nil
88
+ # wx_ctor_params :title => ''
89
+ # wx_ctor_params :pos, :size
90
+ # wx_ctor_params :style => Wx::SIMPLE_BORDER|Wx::FRAME_NO_TASKBAR|Wx::STAY_ON_TOP
91
+ # end
92
+
88
93
  # wxPropertySheetDialog Property sheet dialog
89
94
  # wxTipWindow Shows text in a small window
90
95
 
@@ -262,18 +267,19 @@ end
262
267
  WxSugar.define_keyword_ctors('Button') do
263
268
  wx_ctor_params :label => ''
264
269
  wx_ctor_params :pos, :size, :style
265
- # wx_ctor_params :validator, :name => 'button'
270
+ wx_ctor_params :validator, :name => 'button'
266
271
  end
267
272
 
268
273
  # Push button control, displaying a bitmap
269
274
  WxSugar.define_keyword_ctors('BitmapButton') do
270
275
  wx_ctor_params :bitmap, :pos, :size, :style => Wx::BU_AUTODRAW
276
+ wx_ctor_params :validator, :name => 'button'
271
277
  end
272
278
 
273
279
  # A button which stays pressed when clicked by user.
274
280
  WxSugar.define_keyword_ctors('ToggleButton') do
275
281
  wx_ctor_params :label, :pos, :size, :style
276
- # wx_ctor_params :validator, :name => 'checkBox'
282
+ wx_ctor_params :validator, :name => 'checkBox'
277
283
  end
278
284
 
279
285
  # Control showing an entire calendar month
@@ -287,27 +293,27 @@ end
287
293
  WxSugar.define_keyword_ctors('CheckBox') do
288
294
  wx_ctor_params :label => ''
289
295
  wx_ctor_params :pos, :size, :style
290
- # wx_ctor_params :validator, :name => 'checkBox'
296
+ wx_ctor_params :validator, :name => 'checkBox'
291
297
  end
292
298
 
293
299
  # A listbox with a checkbox to the left of each item
294
300
  WxSugar.define_keyword_ctors('CheckListBox') do
295
301
  wx_ctor_params :pos, :size, :choices, :style
296
- # wx_ctor_params :validator, :name => 'listBox'
302
+ wx_ctor_params :validator, :name => 'listBox'
297
303
  end
298
304
 
299
305
  # wxChoice Choice control (a combobox without the editable area)
300
306
  WxSugar.define_keyword_ctors('Choice') do
301
307
  wx_ctor_params :pos, :size, :choices, :style
302
- # wx_ctor_params :validator, :name => 'choice'
308
+ wx_ctor_params :validator, :name => 'choice'
303
309
  end
304
310
 
305
311
  # wxComboBox A choice with an editable area
306
312
  WxSugar.define_keyword_ctors('ComboBox') do
307
313
  wx_ctor_params :value => ''
308
314
  wx_ctor_params :pos, :size, :choices => []
309
- wx_ctor_params :style
310
- # wx_ctor_params :validator, :name => 'comboBox'
315
+ wx_ctor_params :style
316
+ wx_ctor_params :validator, :name => 'comboBox'
311
317
  end
312
318
 
313
319
  # wxDatePickerCtrl Small date picker control
@@ -316,7 +322,7 @@ end
316
322
  # remaining
317
323
  WxSugar.define_keyword_ctors('Gauge') do
318
324
  wx_ctor_params :range, :pos, :size, :style => Wx::GA_HORIZONTAL
319
- # wx_ctor_params :validator, :name
325
+ wx_ctor_params :validator, :name
320
326
  end
321
327
 
322
328
  # wxGenericDirCtrl A control for displaying a directory tree
@@ -336,12 +342,13 @@ end
336
342
  WxSugar.define_keyword_ctors('ListBox') do
337
343
  wx_ctor_params :pos, :size, :choices => []
338
344
  wx_ctor_params :style
345
+ wx_ctor_params :validator, :name => 'listBox'
339
346
  end
340
347
 
341
348
  # wxListCtrl A control for displaying lists of strings and/or icons, plus a multicolumn report view
342
349
  WxSugar.define_keyword_ctors('ListCtrl') do
343
350
  wx_ctor_params :pos, :size, :style => Wx::LC_ICON
344
- # wx_ctor_params :validator, :name => 'listCtrlNameStr'
351
+ wx_ctor_params :validator, :name => 'listCtrl'
345
352
  end
346
353
 
347
354
  # wxListView A simpler interface (facade for wxListCtrl in report mode
@@ -349,7 +356,7 @@ end
349
356
  # wxTreeCtrl Tree (hierarchy) control
350
357
  WxSugar.define_keyword_ctors('TreeCtrl') do
351
358
  wx_ctor_params :pos, :size, :style => Wx::TR_HAS_BUTTONS
352
- # wx_ctor_params :validator, :name => 'treeCtrl'
359
+ wx_ctor_params :validator, :name => 'treeCtrl'
353
360
  end
354
361
 
355
362
  # wxSpinCtrl A spin control - i.e. spin button and text control
@@ -388,14 +395,14 @@ WxSugar.define_keyword_ctors('RadioBox') do
388
395
  wx_ctor_params :pos, :size, :choices => []
389
396
  wx_ctor_params :major_dimension => 0
390
397
  wx_ctor_params :style => Wx::RA_SPECIFY_COLS
391
- # wx_ctor_params :validator, :name => 'radioBox'
398
+ wx_ctor_params :validator, :name => 'radioBox'
392
399
  end
393
400
 
394
- # wxRadioButton A round button to be used with others in a mutually exclusive way
401
+ # wxRadioButton: A round button used with others in a mutually exclusive way
395
402
  WxSugar.define_keyword_ctors('RadioButton') do
396
403
  wx_ctor_params :label => ''
397
404
  wx_ctor_params :pos, :size, :style => 0
398
- # wx_ctor_params :validator, :name => 'radioButton'
405
+ wx_ctor_params :validator, :name => 'radioButton'
399
406
  end
400
407
 
401
408
  # wxSlider A slider that can be dragged by the user
@@ -403,10 +410,9 @@ WxSugar.define_keyword_ctors('Slider') do
403
410
  wx_ctor_params :value => 0
404
411
  wx_ctor_params :min_value, :max_value
405
412
  wx_ctor_params :pos, :size, :style => Wx::SL_HORIZONTAL
406
- # wx_ctor_params :validator, :name => 'radioButton'
413
+ wx_ctor_params :validator, :name => 'slider'
407
414
  end
408
415
 
409
-
410
416
  # wxSpinButton - Has two small up and down (or left and right) arrow buttons
411
417
  WxSugar.define_keyword_ctors('SpinButton') do
412
418
  wx_ctor_params :pos, :size, :style => Wx::SP_HORIZONTAL
@@ -419,7 +425,7 @@ end
419
425
  WxSugar.define_keyword_ctors('TextCtrl') do
420
426
  wx_ctor_params :value => ''
421
427
  wx_ctor_params :pos, :size, :style
422
- # wx_ctor_params validator, :name => 'textCtrl'
428
+ wx_ctor_params :validator, :name => 'textCtrl'
423
429
  end
424
430
 
425
431
  # wxHtmlWindow - Control for displaying HTML
@@ -106,7 +106,7 @@ module KeywordConstructor
106
106
  :size => Wx::DEFAULT_SIZE,
107
107
  :pos => Wx::DEFAULT_POSITION,
108
108
  :style => 0,
109
- :validator => nil, # Should be Wx::DefaultValidator
109
+ :validator => Wx::DEFAULT_VALIDATOR,
110
110
  :choices => [] # for Choice, ComboBox etc
111
111
  }
112
112
 
@@ -67,7 +67,9 @@ module Arranger
67
67
  elsif sizer = self.get_sizer
68
68
  return sizer
69
69
  else
70
- return @current_sizer = Wx::BoxSizer.new(Wx::VERTICAL)
70
+ @current_sizer = Wx::BoxSizer.new(Wx::VERTICAL)
71
+ self.set_sizer(@current_sizer)
72
+ @current_sizer
71
73
  end
72
74
  end
73
75
 
@@ -93,7 +95,7 @@ module Arranger
93
95
  end
94
96
 
95
97
  superior_sizer, @current_sizer = @current_sizer, a_sizer
96
- yield(self)
98
+ yield(a_sizer)
97
99
  @current_sizer = superior_sizer
98
100
  proportion = layout[:proportion] || 0
99
101
  this_padding = padding || 0
@@ -106,9 +108,12 @@ module Arranger
106
108
  end
107
109
  # set as main sizer
108
110
  else
111
+ if @current_sizer
112
+ warn "Sizer already specified, redefining layout for #{self}"
113
+ end
109
114
  @padding = layout[:padding] if layout[:padding]
110
115
  @current_sizer = a_sizer
111
- yield(self) if block_given?
116
+ yield(a_sizer) if block_given?
112
117
  self.set_sizer(a_sizer)
113
118
  end
114
119
  end
@@ -123,7 +128,7 @@ module Arranger
123
128
  child = build_child(child)
124
129
  layout = hints_to_constants(layout_hints)
125
130
  proportion = layout_hints[:proportion] || 0
126
- siz = self.current_sizer()
131
+ siz = self.current_sizer
127
132
  padding = layout_hints[:padding] || @padding
128
133
  siz.add(child, proportion, layout, padding || 0)
129
134
  siz.layout()
@@ -205,11 +210,17 @@ module Arranger
205
210
  end
206
211
  end
207
212
 
208
-
209
213
  # Convert a hash of layout hints to WxWidgets Sizer constants
214
+
210
215
  def hints_to_constants(layout_hints)
211
- layout = Wx::ALL
212
-
216
+ if layout_hints[:pad]
217
+ layout = layout_hints[:pad].split(',').inject(0) do | l, edge |
218
+ l | Wx::const_get(edge.upcase)
219
+ end
220
+ else
221
+ layout = Wx::ALL
222
+ end
223
+
213
224
  if layout_hints[:minsize]
214
225
  layout = layout | Wx::ADJUST_MINSIZE|Wx::EXPAND
215
226
  end
@@ -218,9 +229,9 @@ module Arranger
218
229
  end
219
230
 
220
231
 
221
- if layout_hints[:align]
232
+ if align = layout_hints[:align]
222
233
  begin
223
- align_const = Wx::const_get('ALIGN_' << layout_hints[:align].to_s.upcase)
234
+ align_const = Wx::const_get('ALIGN_' << align.to_s.upcase)
224
235
  layout = layout | align_const
225
236
  rescue NameError
226
237
  Kernel.raise ArgumentError,
@@ -1,3 +1,3 @@
1
1
  module WxSugar
2
- VERSION = '0.1.13'
2
+ VERSION = '0.1.14'
3
3
  end
@@ -0,0 +1,7 @@
1
+ class Wx::Position
2
+ # Checks if this equal to Wx::DEFAULT_POSITION (i.e. no explicit
3
+ # co-ordinates set)
4
+ def default?
5
+ x == -1 and y == -1
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class Wx::Size
2
+ # Checks if this equal to Wx::DEFAULT_SIZE (i.e. no explicit
3
+ # dimensions set)
4
+ def default?
5
+ get_width == -1 and get_height == -1
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ class Wx::TreeCtrl
2
+ # Recurses over the tree item +start_item+ and its descendants,
3
+ # yielding each Wx::TreeItemId in turn into the passed block. This
4
+ # TreeItemId can be used as an argument to many other methods within
5
+ # TreeCtrl (for example, get_item_text).
6
+ #
7
+ # If +start_item+ is not specified, this method will recurse over
8
+ # every item within the tree, starting with the root item.
9
+ def traverse(start_item = self.get_root_item, &block)
10
+ block.call(start_item)
11
+ if has_children(start_item)
12
+ child, cookie = get_first_child(start_item)
13
+ while child.nonzero?
14
+ traverse(child, &block)
15
+ child = get_next_sibling(child)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,5 +1,26 @@
1
1
  # extensions to Wx::Window
2
2
  class Wx::Window
3
+ # Returns an array containing this window and all windows descended
4
+ # from it.
5
+ def get_descendants
6
+ get_children.inject([ self ]) do | desc, child |
7
+ desc + child.get_descendants
8
+ end
9
+ end
10
+
11
+ # Passed a block, returns the first window within self's window
12
+ # hierarchy for which the block evaluates to true. A class name may
13
+ # optionally be passed to restrict the search to windows of that class
14
+ # (or its subclasses) only - this can be useful if the search
15
+ # specification calls methods that are only defined for certain
16
+ # classes.
17
+ #
18
+ # # Example - find a StaticText with a label matching /foo/
19
+ # a_frame.find_window(Wx::StaticText) { | tx | tx.label =~ /foo/ }
20
+ def find_window(a_class = Wx::Window, &block)
21
+ descendants.grep(a_class).detect(&block)
22
+ end
23
+
3
24
  # Returns the window's current size as a two element array
4
25
  def get_size_xy
5
26
  size = get_size
data/lib/wx_sugar.rb CHANGED
@@ -1 +1,66 @@
1
+ # = WxSugar
2
+ #
3
+ # WxSugar is a set of additions to the WxRuby API, written in pure
4
+ # ruby. They're intended to:
5
+ #
6
+ # * Make some tricky WxWidgets things easier and more consistent
7
+ # * Reduce repetitiveness and redundancy for common tasks
8
+ # * Make code more expressive
9
+ # * Make code more idiomatically Rubyish
10
+ #
11
+ # Not everyone will like all the extensions to WxRuby here. So the
12
+ # Sugar modules:
13
+ #
14
+ # * Can generally be used separately, without depending on each other
15
+ # * Supplement rather than replace the underlying 'raw' API
16
+ #
17
+ # == Using WxSugar
18
+ #
19
+ # As of version 0.1.14, the WxSugar extensions require the latest
20
+ # version of WxRuby2, preview 0.0.39. Support for the old series of
21
+ # WxRuby (version 0.6.0) has now been dropped.
22
+ #
23
+ # The simplest way to use WxSugar is to load all the behaviours. You
24
+ # should load the wx library first:
25
+ #
26
+ # require 'wx'
27
+ # require 'wx_sugar'
28
+ # ...
29
+ #
30
+ # If you only want to load specific WxSugar behaviours, just +require+
31
+ # the desired extensions only
32
+ #
33
+ # require 'wx_sugar/keyword_constructors'
34
+ # require 'wx_sugar/acccessors'
35
+ #
36
+ # == Overview of extensions
37
+ #
38
+ # The following are the WxSugar behaviours that are available. In
39
+ # general you require one of these extensions, it modifies the behaviour
40
+ # of all relevant Wx classes, and affects all new instances.
41
+ #
42
+ # [accessors]
43
+ # Provide ruby-style getters, setters and question-mark methods
44
+ # [delayed_constructors]
45
+ # Required by +layout+, of limited independent interest
46
+ # [event_connector]
47
+ # Neater syntax for connecting event listeners
48
+ # [keyword_constructors]
49
+ # Use keyword-style hash arguments to construct widgets
50
+ # [layout]
51
+ # Easy interface to using WxWidgets Sizers to arrange controls
52
+ # [menu]
53
+ # Create and update menus without a mess of system ids
54
+ # [wx_classes]
55
+ # Useful ruby methods added to individual Wx classes.
56
+ #
57
+ # === Deprecated extensions
58
+ #
59
+ # This module is deprecated and will soon be removed.
60
+ #
61
+ # [itemdata.rb]
62
+ # Linking ruby objects with wx controls; use the
63
+ # get/set_item_data methods in core wxruby2 instead.
64
+
65
+
1
66
  require 'wx_sugar/all'
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.10
2
+ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: wx_sugar
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.13
7
- date: 2006-12-03
6
+ version: 0.1.14
7
+ date: 2007-03-22 00:00:00 +00:00
8
8
  summary: Syntax extensions for WxRuby.
9
9
  require_paths:
10
10
  - lib
@@ -24,6 +24,9 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
24
24
  version: 1.8.1
25
25
  version:
26
26
  platform: ruby
27
+ signing_key:
28
+ cert_chain:
29
+ post_install_message:
27
30
  authors:
28
31
  - Alex Fenton
29
32
  files:
@@ -43,6 +46,9 @@ files:
43
46
  - lib/wx_sugar/wx_classes
44
47
  - lib/wx_sugar/wx_classes.rb
45
48
  - lib/wx_sugar/wx_classes/colour.rb
49
+ - lib/wx_sugar/wx_classes/position.rb
50
+ - lib/wx_sugar/wx_classes/size.rb
51
+ - lib/wx_sugar/wx_classes/treectrl.rb
46
52
  - lib/wx_sugar/wx_classes/window.rb
47
53
  - samples/sugar-sample.rb
48
54
  - LICENCE