wxruby 1.9.0-i386-mswin32 → 1.9.1-i386-mswin32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. data/lib/wx.rb +42 -35
  2. data/lib/wx/accessors.rb +52 -0
  3. data/lib/wx/classes/evthandler.rb +36 -32
  4. data/lib/wx/classes/grid.rb +13 -13
  5. data/lib/wx/classes/point.rb +43 -0
  6. data/lib/wx/classes/size.rb +44 -0
  7. data/lib/wx/classes/styledtextctrl.rb +92 -0
  8. data/lib/wx/classes/textctrl.rb +14 -0
  9. data/lib/wx/classes/window.rb +4 -0
  10. data/lib/wx/keyword_ctors.rb +219 -0
  11. data/lib/wx/keyword_defs.rb +455 -0
  12. data/lib/wx/version.rb +1 -1
  13. data/lib/wxruby2.exp +0 -0
  14. data/lib/wxruby2.lib +0 -0
  15. data/lib/wxruby2.so +0 -0
  16. data/samples/SAMPLES-LICENSE.TXT +17 -17
  17. data/samples/aui/aui.rb +6 -5
  18. data/samples/bigdemo/About.rbw +39 -39
  19. data/samples/bigdemo/ColorPanel.rbw +25 -25
  20. data/samples/bigdemo/GridSimple.rbw +80 -80
  21. data/samples/bigdemo/MDIDemo.rbw +59 -59
  22. data/samples/bigdemo/PopupMenu.rbw +151 -151
  23. data/samples/bigdemo/Sizers.rbw +545 -545
  24. data/samples/bigdemo/bigdemo.rb +826 -826
  25. data/samples/bigdemo/demoTemplate.rbw +37 -37
  26. data/samples/bigdemo/icons/choice.xpm +27 -27
  27. data/samples/bigdemo/icons/combo.xpm +27 -27
  28. data/samples/bigdemo/icons/copy.xpm +25 -25
  29. data/samples/bigdemo/icons/cut.xpm +24 -24
  30. data/samples/bigdemo/icons/gauge.xpm +27 -27
  31. data/samples/bigdemo/icons/help.xpm +25 -25
  32. data/samples/bigdemo/icons/list.xpm +27 -27
  33. data/samples/bigdemo/icons/mondrian.xpm +44 -44
  34. data/samples/bigdemo/icons/new.xpm +24 -24
  35. data/samples/bigdemo/icons/ogl.ico +0 -0
  36. data/samples/bigdemo/icons/ogl.xpm +45 -45
  37. data/samples/bigdemo/icons/open.xpm +26 -26
  38. data/samples/bigdemo/icons/paste.xpm +38 -38
  39. data/samples/bigdemo/icons/preview.xpm +26 -26
  40. data/samples/bigdemo/icons/print.xpm +26 -26
  41. data/samples/bigdemo/icons/radio.xpm +27 -27
  42. data/samples/bigdemo/icons/robert.xpm +415 -415
  43. data/samples/bigdemo/icons/save.xpm +25 -25
  44. data/samples/bigdemo/icons/smiles.xpm +39 -39
  45. data/samples/bigdemo/icons/smiley.xpm +42 -42
  46. data/samples/bigdemo/icons/stattext.xpm +24 -24
  47. data/samples/bigdemo/icons/test2.bmp +0 -0
  48. data/samples/bigdemo/icons/test2.xpm +79 -79
  49. data/samples/bigdemo/icons/text.xpm +27 -27
  50. data/samples/bigdemo/icons/tog1.xpm +38 -38
  51. data/samples/bigdemo/icons/tog2.xpm +38 -38
  52. data/samples/bigdemo/icons/wxwin16x16.xpm +25 -25
  53. data/samples/bigdemo/tips.txt +7 -7
  54. data/samples/bigdemo/utils.rb +11 -11
  55. data/samples/bigdemo/wxButton.rbw +66 -66
  56. data/samples/bigdemo/wxCalendarCtrl.rbw +72 -72
  57. data/samples/bigdemo/wxCheckBox.rbw +52 -52
  58. data/samples/bigdemo/wxCheckListBox.rbw +77 -77
  59. data/samples/bigdemo/wxChoice.rbw +49 -49
  60. data/samples/bigdemo/wxColourDialog.rbw +34 -34
  61. data/samples/bigdemo/wxComboBox.rbw +79 -79
  62. data/samples/bigdemo/wxDialog.rbw +92 -92
  63. data/samples/bigdemo/wxDirDialog.rbw +32 -32
  64. data/samples/bigdemo/wxFileDialog.rbw +39 -39
  65. data/samples/bigdemo/wxFileDialog_Save.rbw +38 -38
  66. data/samples/bigdemo/wxFindReplaceDialog.rbw +85 -85
  67. data/samples/bigdemo/wxFontDialog.rbw +176 -176
  68. data/samples/bigdemo/wxFrame.rbw +55 -55
  69. data/samples/bigdemo/wxGauge.rbw +73 -73
  70. data/samples/bigdemo/wxGrid.rbw +68 -68
  71. data/samples/bigdemo/wxListBox.rbw +142 -142
  72. data/samples/bigdemo/wxListCtrl_virtual.rbw +109 -109
  73. data/samples/bigdemo/wxMDIWindows.rbw +52 -52
  74. data/samples/bigdemo/wxMenu.rbw +238 -238
  75. data/samples/bigdemo/wxMessageDialog.rbw +30 -30
  76. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +34 -34
  77. data/samples/bigdemo/wxNotebook.rbw +138 -138
  78. data/samples/bigdemo/wxProgressDialog.rbw +45 -45
  79. data/samples/bigdemo/wxRadioBox.rbw +74 -74
  80. data/samples/bigdemo/wxRadioButton.rbw +127 -127
  81. data/samples/bigdemo/wxScrolledMessageDialog.rbw +59 -59
  82. data/samples/bigdemo/wxScrolledWindow.rbw +196 -196
  83. data/samples/bigdemo/wxSingleChoiceDialog.rbw +35 -35
  84. data/samples/bigdemo/wxSlider.rbw +44 -44
  85. data/samples/bigdemo/wxSpinButton.rbw +52 -52
  86. data/samples/bigdemo/wxSpinCtrl.rbw +53 -53
  87. data/samples/bigdemo/wxSplitterWindow.rbw +65 -65
  88. data/samples/bigdemo/wxStaticBitmap.rbw +53 -53
  89. data/samples/bigdemo/wxStaticText.rbw +57 -57
  90. data/samples/bigdemo/wxStatusBar.rbw +128 -128
  91. data/samples/bigdemo/wxTextCtrl.rbw +151 -151
  92. data/samples/bigdemo/wxTextEntryDialog.rbw +34 -34
  93. data/samples/bigdemo/wxToggleButton.rbw +51 -51
  94. data/samples/bigdemo/wxToolBar.rbw +133 -133
  95. data/samples/bigdemo/wxTreeCtrl.rbw +192 -192
  96. data/samples/calendar/calendar.rb +275 -275
  97. data/samples/caret/caret.rb +296 -296
  98. data/samples/caret/mondrian.xpm +44 -44
  99. data/samples/controls/controls.rb +1140 -1140
  100. data/samples/controls/get_item_sample.rb +87 -87
  101. data/samples/controls/icons/choice.xpm +27 -27
  102. data/samples/controls/icons/combo.xpm +27 -27
  103. data/samples/controls/icons/gauge.xpm +27 -27
  104. data/samples/controls/icons/list.xpm +27 -27
  105. data/samples/controls/icons/radio.xpm +27 -27
  106. data/samples/controls/icons/stattext.xpm +24 -24
  107. data/samples/controls/icons/text.xpm +27 -27
  108. data/samples/controls/mondrian.xpm +44 -44
  109. data/samples/dialogs/dialogs.rb +724 -724
  110. data/samples/dialogs/tips.txt +18 -18
  111. data/samples/etc/activation.rb +108 -108
  112. data/samples/etc/choice.rb +72 -72
  113. data/samples/etc/miniframe.rb +84 -84
  114. data/samples/etc/sash.rb +135 -135
  115. data/samples/etc/scrollwin.rb +116 -116
  116. data/samples/etc/system_settings.rb +258 -258
  117. data/samples/etc/wizard.rb +81 -81
  118. data/samples/event/event.rb +184 -0
  119. data/samples/images/images.rb +48 -48
  120. data/samples/listbook/listbook.rb +183 -183
  121. data/samples/listbook/listbook.xrc +370 -370
  122. data/samples/mdi/mdi.rb +87 -87
  123. data/samples/minimal/minimal.rb +83 -95
  124. data/samples/minimal/mondrian.png +0 -0
  125. data/samples/minimal/nothing.rb +46 -46
  126. data/samples/minimal/text.rb +35 -35
  127. data/samples/text/scintilla.rb +22 -28
  128. data/samples/text/textctrl.rb +124 -124
  129. data/samples/text/unicode.rb +238 -238
  130. data/samples/text/utf8.txt +14 -14
  131. data/samples/treectrl/treectrl.rb +1210 -1210
  132. data/samples/xrc/samples.xrc +46 -46
  133. data/samples/xrc/xrc_sample.rb +107 -107
  134. metadata +13 -5
  135. data/samples/minimal/mondrian.ico +0 -0
  136. data/samples/minimal/mondrian.xpm +0 -44
@@ -1,73 +1,73 @@
1
- #!/usr/bin/env ruby
2
-
3
- begin
4
- require 'wx'
5
- rescue LoadError => no_wx_err
6
- begin
7
- require 'rubygems'
8
- require 'wx'
9
- rescue LoadError
10
- raise no_wx_err
11
- end
12
- end
13
-
14
- class TestPanel < Wx::Panel
15
- def initialize(parent, log)
16
- super(parent, -1)
17
- @log = log
18
- @count = 0
19
-
20
- Wx::StaticText.new( self, -1, "This example shows the wxGauge control.",
21
- Wx::Point.new(45,15))
22
-
23
- @g1 = Wx::Gauge.new( self, -1, 50,
24
- Wx::Point.new(110,50), Wx::Size.new(250,25))
25
- @g1.set_bezel_face(3)
26
- @g1.set_shadow_width(3)
27
-
28
- @g2 = Wx::Gauge.new( self, -1, 50,
29
- Wx::Point.new(110,95), Wx::Size.new(250,25),
30
- Wx::GA_HORIZONTAL|Wx::GA_SMOOTH)
31
- @g2.set_bezel_face(5)
32
- @g2.set_shadow_width(5)
33
-
34
- @g3 = Wx::Gauge.new( self, -1, 50,
35
- Wx::Point.new(110, 140), Wx::Size.new(25,250),
36
- Wx::GA_VERTICAL)
37
- @g3.set_bezel_face(3)
38
- @g3.set_shadow_width(3)
39
-
40
- # start a timer to move the gauges forward every 1/4 s
41
- timer = Wx::Timer.new(self, 5001)
42
- evt_timer(5001) { move_gauges }
43
- timer.start(250)
44
- end
45
-
46
- # advance the gauges
47
- def move_gauges
48
- @count +=1
49
- if @count > 50
50
- @count = 0
51
- end
52
- @g1.set_value(@count)
53
- @g2.set_value(@count)
54
- @g3.set_value(@count)
55
- end
56
- end
57
-
58
- module Demo
59
- def Demo.run(frame, nb, log)
60
- win = TestPanel.new(nb, log)
61
- return win
62
- end
63
-
64
- def Demo.overview
65
- return "A gauge is a horizontal or vertical bar which shows a quantity (often time). "
66
- end
67
- end
68
-
69
- if __FILE__ == $0
70
- run_solo_lib = File.join( File.dirname(__FILE__), 'run.rb')
71
- load run_solo_lib
72
- run File.basename($0)
73
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'wx'
5
+ rescue LoadError => no_wx_err
6
+ begin
7
+ require 'rubygems'
8
+ require 'wx'
9
+ rescue LoadError
10
+ raise no_wx_err
11
+ end
12
+ end
13
+
14
+ class TestPanel < Wx::Panel
15
+ def initialize(parent, log)
16
+ super(parent, -1)
17
+ @log = log
18
+ @count = 0
19
+
20
+ Wx::StaticText.new( self, -1, "This example shows the wxGauge control.",
21
+ Wx::Point.new(45,15))
22
+
23
+ @g1 = Wx::Gauge.new( self, -1, 50,
24
+ Wx::Point.new(110,50), Wx::Size.new(250,25))
25
+ @g1.set_bezel_face(3)
26
+ @g1.set_shadow_width(3)
27
+
28
+ @g2 = Wx::Gauge.new( self, -1, 50,
29
+ Wx::Point.new(110,95), Wx::Size.new(250,25),
30
+ Wx::GA_HORIZONTAL|Wx::GA_SMOOTH)
31
+ @g2.set_bezel_face(5)
32
+ @g2.set_shadow_width(5)
33
+
34
+ @g3 = Wx::Gauge.new( self, -1, 50,
35
+ Wx::Point.new(110, 140), Wx::Size.new(25,250),
36
+ Wx::GA_VERTICAL)
37
+ @g3.set_bezel_face(3)
38
+ @g3.set_shadow_width(3)
39
+
40
+ # start a timer to move the gauges forward every 1/4 s
41
+ timer = Wx::Timer.new(self, 5001)
42
+ evt_timer(5001) { move_gauges }
43
+ timer.start(250)
44
+ end
45
+
46
+ # advance the gauges
47
+ def move_gauges
48
+ @count +=1
49
+ if @count > 50
50
+ @count = 0
51
+ end
52
+ @g1.set_value(@count)
53
+ @g2.set_value(@count)
54
+ @g3.set_value(@count)
55
+ end
56
+ end
57
+
58
+ module Demo
59
+ def Demo.run(frame, nb, log)
60
+ win = TestPanel.new(nb, log)
61
+ return win
62
+ end
63
+
64
+ def Demo.overview
65
+ return "A gauge is a horizontal or vertical bar which shows a quantity (often time). "
66
+ end
67
+ end
68
+
69
+ if __FILE__ == $0
70
+ run_solo_lib = File.join( File.dirname(__FILE__), 'run.rb')
71
+ load run_solo_lib
72
+ run File.basename($0)
73
+ end
@@ -1,68 +1,68 @@
1
- #!/usr/bin/env ruby
2
-
3
- begin
4
- require 'wx'
5
- rescue LoadError => no_wx_err
6
- begin
7
- require 'rubygems'
8
- require 'wx'
9
- rescue LoadError
10
- raise no_wx_err
11
- end
12
- end
13
-
14
- $buttonDefs = {
15
- 814 => ['GridSimple', ' Simple wxGrid'] # , catching all events '] ,
16
- # 815 => ['GridStdEdRend', ' wxGrid showing Editors and Renderers '],
17
- # 818 => ['GridHugeTable', ' A wxGrid with a HUGE table [100 MILLION cells!] '],
18
- # 817 => ['GridCustTable', ' wxGrid using a custom Table, with non-string data '],
19
- # 819 => ['GridEnterHandler',' Remapping keys to behave differently '],
20
- # 820 => ['GridCustEditor', ' Shows how to create a custom Cell Editor '],
21
- # 821 => ['GridDragable', ' A wxGrid with dragable rows and columns '],
22
- # 822 => ['GridDragAndDrop', 'Shows how to make a grid a drop target for files'],
23
- }
24
-
25
- class ButtonPanel < Wx::Panel
26
- def initialize(parent, log)
27
- super(parent, -1)
28
- @log = log
29
-
30
- box = Wx::BoxSizer.new(Wx::VERTICAL)
31
- box.add(20,30)
32
- keys = $buttonDefs.keys().sort()
33
- keys.each do |key|
34
- text = $buttonDefs[key][1]
35
- btn = Wx::Button.new(self, key, text)
36
- box.add(btn, 0, Wx::ALIGN_CENTER | Wx::ALL, 10)
37
- evt_button(key) {|event| on_button(event)}
38
- end
39
- set_sizer(box)
40
- end
41
-
42
- def on_button(event)
43
- modName = $buttonDefs[event.get_id()][0]
44
- mod_file = File.join(File.dirname(__FILE__), modName + ".rbw")
45
- load mod_file
46
-
47
- frame = GridDemo::TestFrame.new(nil, @log)
48
- frame.show()
49
- end
50
- end
51
-
52
- module Demo
53
- def Demo.run(frame,nb,log)
54
- win = ButtonPanel.new(nb, log)
55
- return win
56
- end
57
-
58
- def Demo.overview
59
- "A simple grid."
60
- end
61
- end
62
-
63
-
64
- if __FILE__ == $0
65
- run_solo_lib = File.join( File.dirname(__FILE__), 'run.rb')
66
- load run_solo_lib
67
- run File.basename($0)
68
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'wx'
5
+ rescue LoadError => no_wx_err
6
+ begin
7
+ require 'rubygems'
8
+ require 'wx'
9
+ rescue LoadError
10
+ raise no_wx_err
11
+ end
12
+ end
13
+
14
+ $buttonDefs = {
15
+ 814 => ['GridSimple', ' Simple wxGrid'] # , catching all events '] ,
16
+ # 815 => ['GridStdEdRend', ' wxGrid showing Editors and Renderers '],
17
+ # 818 => ['GridHugeTable', ' A wxGrid with a HUGE table [100 MILLION cells!] '],
18
+ # 817 => ['GridCustTable', ' wxGrid using a custom Table, with non-string data '],
19
+ # 819 => ['GridEnterHandler',' Remapping keys to behave differently '],
20
+ # 820 => ['GridCustEditor', ' Shows how to create a custom Cell Editor '],
21
+ # 821 => ['GridDragable', ' A wxGrid with dragable rows and columns '],
22
+ # 822 => ['GridDragAndDrop', 'Shows how to make a grid a drop target for files'],
23
+ }
24
+
25
+ class ButtonPanel < Wx::Panel
26
+ def initialize(parent, log)
27
+ super(parent, -1)
28
+ @log = log
29
+
30
+ box = Wx::BoxSizer.new(Wx::VERTICAL)
31
+ box.add(20,30)
32
+ keys = $buttonDefs.keys().sort()
33
+ keys.each do |key|
34
+ text = $buttonDefs[key][1]
35
+ btn = Wx::Button.new(self, key, text)
36
+ box.add(btn, 0, Wx::ALIGN_CENTER | Wx::ALL, 10)
37
+ evt_button(key) {|event| on_button(event)}
38
+ end
39
+ set_sizer(box)
40
+ end
41
+
42
+ def on_button(event)
43
+ modName = $buttonDefs[event.get_id()][0]
44
+ mod_file = File.join(File.dirname(__FILE__), modName + ".rbw")
45
+ load mod_file
46
+
47
+ frame = GridDemo::TestFrame.new(nil, @log)
48
+ frame.show()
49
+ end
50
+ end
51
+
52
+ module Demo
53
+ def Demo.run(frame,nb,log)
54
+ win = ButtonPanel.new(nb, log)
55
+ return win
56
+ end
57
+
58
+ def Demo.overview
59
+ "A simple grid."
60
+ end
61
+ end
62
+
63
+
64
+ if __FILE__ == $0
65
+ run_solo_lib = File.join( File.dirname(__FILE__), 'run.rb')
66
+ load run_solo_lib
67
+ run File.basename($0)
68
+ end
@@ -1,142 +1,142 @@
1
- #!/usr/bin/env ruby
2
-
3
- begin
4
- require 'wx'
5
- rescue LoadError => no_wx_err
6
- begin
7
- require 'rubygems'
8
- require 'wx'
9
- rescue LoadError
10
- raise no_wx_err
11
- end
12
- end
13
-
14
- class FindPrefixListBox < Wx::ListBox
15
- def initialize(parent, id, pos=Wx::DEFAULT_POSITION, size=Wx::DEFAULT_SIZE, choices=[], style=0)
16
- super(parent, id, pos, size, choices, style)
17
- @typedText = ""
18
- @log = parent.log
19
- evt_key_down {|event| on_key(event)}
20
- end
21
-
22
- def find_prefix(prefix)
23
- @log.write_text("Looking for prefix: " + prefix.to_s)
24
- if prefix
25
- prefix.downcase!
26
- length = prefix.length
27
- 0.upto(get_count) do |x|
28
- text = get_string(x).to_s.downcase
29
- if text[0,length] == prefix
30
- @log.write_text("Prefix " + prefix + " is found.")
31
- return x
32
- end
33
- end
34
- end
35
- @log.write_text("Prefix " + prefix + " is not found.")
36
- return -1
37
- end
38
-
39
- def on_key(event)
40
- key = event.get_key_code
41
- if key >= 32 and key <= 127
42
- @typedText += key.chr
43
- item = find_prefix(@typedText)
44
- if item != -1
45
- set_selection(item)
46
- end
47
- elsif key == Wx::K_BACK # backspace removes one character and backs up
48
- @typedText = @typedText[0..-2]
49
- if not @typedText
50
- set_selection(0)
51
- else
52
- item = find_prefix(@typedText)
53
- if item != -1
54
- set_selection(item)
55
- end
56
- end
57
-
58
- else
59
- @typedText = ""
60
- event.skip
61
- end
62
- end
63
-
64
- def on_key_down(event)
65
-
66
- end
67
- end
68
-
69
- class TestListBox < Wx::Panel
70
- attr_reader :log
71
- def initialize(parent, log)
72
- @log = log
73
- super(parent, -1)
74
-
75
- sampleList = %w(zero one two three four five six seven eight nine ten eleven twelve thirteen fourteen)
76
-
77
- Wx::StaticText.new(self, -1, "This example uses the wxListBox control.", Wx::Point.new(45,10))
78
-
79
- Wx::StaticText.new(self, -1, "Select one:", Wx::Point.new(15,50), Wx::Size.new(65,18))
80
- @lb1 = Wx::ListBox.new(self, 60, Wx::Point.new(80,50), Wx::Size.new(80,120), sampleList, Wx::LB_SINGLE)
81
- evt_listbox(@lb1.get_id) {|event| on_evt_listbox(event)}
82
- evt_listbox_dclick(@lb1.get_id) {|event| on_evt_listbox_dclick(event)}
83
- @lb1.set_selection(3)
84
- @lb1.append("with data", "This one has data")
85
- @lb1.set_client_data(2, "This one has data")
86
-
87
- Wx::StaticText.new(self, -1, "Select many:", Wx::Point.new(200,50), Wx::Size.new(65,18))
88
- @lb2 = Wx::ListBox.new(self, 70, Wx::Point.new(280,50), Wx::Size.new(80,120), sampleList, Wx::LB_EXTENDED)
89
- evt_listbox(@lb2.get_id) {|event| on_evt_multi_listbox(event)}
90
- @lb2.evt_right_up {|event| on_evt_right_button(event)}
91
- @lb2.set_selection(0)
92
-
93
- sampleList += ["test a", "test aa", "test aab", "test ab", "test abc", "test abcc", "test abcd"]
94
- sampleList.sort!
95
- Wx::StaticText.new(self, -1, "Find typed prefix:", Wx::Point.new(15,250))
96
- fp = FindPrefixListBox.new(self, -1, Wx::Point.new(110,250), Wx::Size.new(80,120), sampleList, Wx::LB_SINGLE)
97
- fp.set_selection(0)
98
- end
99
-
100
- def on_evt_listbox(event)
101
- @log.write_text("evt_listbox: #{event.get_string}, #{event.is_selection}, #{event.get_selection}, #{event.get_client_data}")
102
- end
103
-
104
- def on_evt_listbox_dclick(event)
105
- @log.write_text("evt_listbox_dclick: " + @lb1.get_selection.to_s)
106
- @lb1.delete(@lb1.get_selection)
107
- end
108
-
109
- def on_evt_multi_listbox(event)
110
- @log.write_text("evt_multi_listbox: (" +
111
- @lb2.get_selections.join(',') + ")")
112
- end
113
-
114
- def on_evt_right_button(event)
115
- @log.write_text("evt_right_button: " + event.get_position.to_s)
116
- if event.get_event_object.get_id == 70
117
- selections = @lb2.get_selections
118
- selections.reverse!
119
- selections.each do |index|
120
- @lb2.delete(index)
121
- end
122
- end
123
- end
124
- end
125
-
126
- module Demo
127
- def Demo.run(frame,nb,log)
128
- win = TestListBox.new(nb, log)
129
- return win
130
- end
131
-
132
- def Demo.overview
133
- "A listbox is used to select one or more of a list of strings. The strings are displayed in a scrolling box, with the selected string(s) marked in reverse video. A listbox can be single selection (if an item is selected, the previous selection is removed) or multiple selection (clicking an item toggles the item on or off independently of other selections)."
134
- end
135
- end
136
-
137
-
138
- if __FILE__ == $0
139
- run_solo_lib = File.join( File.dirname(__FILE__), 'run.rb')
140
- load run_solo_lib
141
- run File.basename($0)
142
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'wx'
5
+ rescue LoadError => no_wx_err
6
+ begin
7
+ require 'rubygems'
8
+ require 'wx'
9
+ rescue LoadError
10
+ raise no_wx_err
11
+ end
12
+ end
13
+
14
+ class FindPrefixListBox < Wx::ListBox
15
+ def initialize(parent, id, pos=Wx::DEFAULT_POSITION, size=Wx::DEFAULT_SIZE, choices=[], style=0)
16
+ super(parent, id, pos, size, choices, style)
17
+ @typedText = ""
18
+ @log = parent.log
19
+ evt_key_down {|event| on_key(event)}
20
+ end
21
+
22
+ def find_prefix(prefix)
23
+ @log.write_text("Looking for prefix: " + prefix.to_s)
24
+ if prefix
25
+ prefix.downcase!
26
+ length = prefix.length
27
+ 0.upto(get_count) do |x|
28
+ text = get_string(x).to_s.downcase
29
+ if text[0,length] == prefix
30
+ @log.write_text("Prefix " + prefix + " is found.")
31
+ return x
32
+ end
33
+ end
34
+ end
35
+ @log.write_text("Prefix " + prefix + " is not found.")
36
+ return -1
37
+ end
38
+
39
+ def on_key(event)
40
+ key = event.get_key_code
41
+ if key >= 32 and key <= 127
42
+ @typedText += key.chr
43
+ item = find_prefix(@typedText)
44
+ if item != -1
45
+ set_selection(item)
46
+ end
47
+ elsif key == Wx::K_BACK # backspace removes one character and backs up
48
+ @typedText = @typedText[0..-2]
49
+ if not @typedText
50
+ set_selection(0)
51
+ else
52
+ item = find_prefix(@typedText)
53
+ if item != -1
54
+ set_selection(item)
55
+ end
56
+ end
57
+
58
+ else
59
+ @typedText = ""
60
+ event.skip
61
+ end
62
+ end
63
+
64
+ def on_key_down(event)
65
+
66
+ end
67
+ end
68
+
69
+ class TestListBox < Wx::Panel
70
+ attr_reader :log
71
+ def initialize(parent, log)
72
+ @log = log
73
+ super(parent, -1)
74
+
75
+ sampleList = %w(zero one two three four five six seven eight nine ten eleven twelve thirteen fourteen)
76
+
77
+ Wx::StaticText.new(self, -1, "This example uses the wxListBox control.", Wx::Point.new(45,10))
78
+
79
+ Wx::StaticText.new(self, -1, "Select one:", Wx::Point.new(15,50), Wx::Size.new(65,18))
80
+ @lb1 = Wx::ListBox.new(self, 60, Wx::Point.new(80,50), Wx::Size.new(80,120), sampleList, Wx::LB_SINGLE)
81
+ evt_listbox(@lb1.get_id) {|event| on_evt_listbox(event)}
82
+ evt_listbox_dclick(@lb1.get_id) {|event| on_evt_listbox_dclick(event)}
83
+ @lb1.set_selection(3)
84
+ @lb1.append("with data", "This one has data")
85
+ @lb1.set_client_data(2, "This one has data")
86
+
87
+ Wx::StaticText.new(self, -1, "Select many:", Wx::Point.new(200,50), Wx::Size.new(65,18))
88
+ @lb2 = Wx::ListBox.new(self, 70, Wx::Point.new(280,50), Wx::Size.new(80,120), sampleList, Wx::LB_EXTENDED)
89
+ evt_listbox(@lb2.get_id) {|event| on_evt_multi_listbox(event)}
90
+ @lb2.evt_right_up {|event| on_evt_right_button(event)}
91
+ @lb2.set_selection(0)
92
+
93
+ sampleList += ["test a", "test aa", "test aab", "test ab", "test abc", "test abcc", "test abcd"]
94
+ sampleList.sort!
95
+ Wx::StaticText.new(self, -1, "Find typed prefix:", Wx::Point.new(15,250))
96
+ fp = FindPrefixListBox.new(self, -1, Wx::Point.new(110,250), Wx::Size.new(80,120), sampleList, Wx::LB_SINGLE)
97
+ fp.set_selection(0)
98
+ end
99
+
100
+ def on_evt_listbox(event)
101
+ @log.write_text("evt_listbox: #{event.get_string}, #{event.is_selection}, #{event.get_selection}, #{event.get_client_data}")
102
+ end
103
+
104
+ def on_evt_listbox_dclick(event)
105
+ @log.write_text("evt_listbox_dclick: " + @lb1.get_selection.to_s)
106
+ @lb1.delete(@lb1.get_selection)
107
+ end
108
+
109
+ def on_evt_multi_listbox(event)
110
+ @log.write_text("evt_multi_listbox: (" +
111
+ @lb2.get_selections.join(',') + ")")
112
+ end
113
+
114
+ def on_evt_right_button(event)
115
+ @log.write_text("evt_right_button: " + event.get_position.to_s)
116
+ if event.get_event_object.get_id == 70
117
+ selections = @lb2.get_selections
118
+ selections.reverse!
119
+ selections.each do |index|
120
+ @lb2.delete(index)
121
+ end
122
+ end
123
+ end
124
+ end
125
+
126
+ module Demo
127
+ def Demo.run(frame,nb,log)
128
+ win = TestListBox.new(nb, log)
129
+ return win
130
+ end
131
+
132
+ def Demo.overview
133
+ "A listbox is used to select one or more of a list of strings. The strings are displayed in a scrolling box, with the selected string(s) marked in reverse video. A listbox can be single selection (if an item is selected, the previous selection is removed) or multiple selection (clicking an item toggles the item on or off independently of other selections)."
134
+ end
135
+ end
136
+
137
+
138
+ if __FILE__ == $0
139
+ run_solo_lib = File.join( File.dirname(__FILE__), 'run.rb')
140
+ load run_solo_lib
141
+ run File.basename($0)
142
+ end