wxruby 1.9.9-x86-mingw32 → 1.9.10-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. data/LICENSE +53 -53
  2. data/README +297 -297
  3. data/lib/wx.rb +53 -53
  4. data/lib/wx/classes/bitmap.rb +29 -1
  5. data/lib/wx/classes/clipboard.rb +19 -3
  6. data/lib/wx/classes/colour.rb +6 -4
  7. data/lib/wx/classes/data_object.rb +14 -0
  8. data/lib/wx/classes/data_object_simple.rb +6 -0
  9. data/lib/wx/classes/dataformat.rb +23 -0
  10. data/lib/wx/classes/evthandler.rb +31 -4
  11. data/lib/wx/classes/genericdirctrl.rb +36 -0
  12. data/lib/wx/classes/grid.rb +8 -0
  13. data/lib/wx/classes/hboxsizer.rb +6 -0
  14. data/lib/wx/classes/icon.rb +12 -1
  15. data/lib/wx/classes/image.rb +13 -1
  16. data/lib/wx/classes/listctrl.rb +12 -0
  17. data/lib/wx/classes/point.rb +8 -0
  18. data/lib/wx/classes/rect.rb +10 -1
  19. data/lib/wx/classes/richtextctrl.rb +22 -0
  20. data/lib/wx/classes/size.rb +9 -0
  21. data/lib/wx/classes/sizer.rb +18 -3
  22. data/lib/wx/classes/toolbar.rb +4 -6
  23. data/lib/wx/classes/vboxsizer.rb +6 -0
  24. data/lib/wx/classes/window.rb +7 -0
  25. data/lib/wx/classes/xmlresource.rb +17 -0
  26. data/lib/wx/helpers.rb +16 -1
  27. data/lib/wx/keyword_ctors.rb +3 -2
  28. data/lib/wx/keyword_defs.rb +27 -5
  29. data/lib/wx/version.rb +1 -1
  30. data/lib/wxruby2.so +0 -0
  31. data/samples/SAMPLES-LICENSE.TXT +17 -17
  32. data/samples/bigdemo/About.rbw +39 -39
  33. data/samples/bigdemo/ColorPanel.rbw +23 -23
  34. data/samples/bigdemo/GridSimple.rbw +78 -78
  35. data/samples/bigdemo/MDIDemo.rbw +57 -57
  36. data/samples/bigdemo/PopupMenu.rbw +149 -149
  37. data/samples/bigdemo/Sizers.rbw +543 -543
  38. data/samples/bigdemo/bigdemo.rb +823 -823
  39. data/samples/bigdemo/demoTemplate.rbw +33 -33
  40. data/samples/bigdemo/icons/choice.xpm +27 -27
  41. data/samples/bigdemo/icons/combo.xpm +27 -27
  42. data/samples/bigdemo/icons/copy.xpm +25 -25
  43. data/samples/bigdemo/icons/cut.xpm +24 -24
  44. data/samples/bigdemo/icons/gauge.xpm +27 -27
  45. data/samples/bigdemo/icons/help.xpm +25 -25
  46. data/samples/bigdemo/icons/list.xpm +27 -27
  47. data/samples/bigdemo/icons/mondrian.xpm +44 -44
  48. data/samples/bigdemo/icons/new.xpm +24 -24
  49. data/samples/bigdemo/icons/ogl.ico +0 -0
  50. data/samples/bigdemo/icons/ogl.xpm +45 -45
  51. data/samples/bigdemo/icons/open.xpm +26 -26
  52. data/samples/bigdemo/icons/paste.xpm +38 -38
  53. data/samples/bigdemo/icons/preview.xpm +26 -26
  54. data/samples/bigdemo/icons/print.xpm +26 -26
  55. data/samples/bigdemo/icons/radio.xpm +27 -27
  56. data/samples/bigdemo/icons/robert.xpm +415 -415
  57. data/samples/bigdemo/icons/save.xpm +25 -25
  58. data/samples/bigdemo/icons/smiles.xpm +39 -39
  59. data/samples/bigdemo/icons/smiley.xpm +42 -42
  60. data/samples/bigdemo/icons/stattext.xpm +24 -24
  61. data/samples/bigdemo/icons/test2.bmp +0 -0
  62. data/samples/bigdemo/icons/test2.xpm +79 -79
  63. data/samples/bigdemo/icons/text.xpm +27 -27
  64. data/samples/bigdemo/icons/tog1.xpm +38 -38
  65. data/samples/bigdemo/icons/tog2.xpm +38 -38
  66. data/samples/bigdemo/icons/wxwin16x16.xpm +25 -25
  67. data/samples/bigdemo/tips.txt +7 -7
  68. data/samples/bigdemo/utils.rb +11 -11
  69. data/samples/bigdemo/wxButton.rbw +64 -64
  70. data/samples/bigdemo/wxCalendarCtrl.rbw +60 -60
  71. data/samples/bigdemo/wxCheckBox.rbw +50 -50
  72. data/samples/bigdemo/wxCheckListBox.rbw +65 -75
  73. data/samples/bigdemo/wxChoice.rbw +47 -47
  74. data/samples/bigdemo/wxColourDialog.rbw +31 -31
  75. data/samples/bigdemo/wxComboBox.rbw +77 -77
  76. data/samples/bigdemo/wxDialog.rbw +74 -74
  77. data/samples/bigdemo/wxDirDialog.rbw +29 -29
  78. data/samples/bigdemo/wxFileDialog.rbw +37 -37
  79. data/samples/bigdemo/wxFileDialog_Save.rbw +35 -35
  80. data/samples/bigdemo/wxFindReplaceDialog.rbw +82 -82
  81. data/samples/bigdemo/wxFontDialog.rbw +173 -173
  82. data/samples/bigdemo/wxFrame.rbw +53 -53
  83. data/samples/bigdemo/wxGauge.rbw +71 -71
  84. data/samples/bigdemo/wxGrid.rbw +66 -66
  85. data/samples/bigdemo/wxListBox.rbw +140 -140
  86. data/samples/bigdemo/wxListCtrl_virtual.rbw +112 -107
  87. data/samples/bigdemo/wxMDIWindows.rbw +50 -50
  88. data/samples/bigdemo/wxMenu.rbw +236 -236
  89. data/samples/bigdemo/wxMessageDialog.rbw +27 -27
  90. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +32 -32
  91. data/samples/bigdemo/wxNotebook.rbw +136 -136
  92. data/samples/bigdemo/wxProgressDialog.rbw +43 -43
  93. data/samples/bigdemo/wxRadioBox.rbw +72 -72
  94. data/samples/bigdemo/wxRadioButton.rbw +125 -125
  95. data/samples/bigdemo/wxSashWindow.rbw +2 -2
  96. data/samples/bigdemo/wxScrolledMessageDialog.rbw +57 -57
  97. data/samples/bigdemo/wxScrolledWindow.rbw +199 -199
  98. data/samples/bigdemo/wxSingleChoiceDialog.rbw +33 -33
  99. data/samples/bigdemo/wxSlider.rbw +42 -42
  100. data/samples/bigdemo/wxSpinButton.rbw +50 -50
  101. data/samples/bigdemo/wxSpinCtrl.rbw +51 -51
  102. data/samples/bigdemo/wxSplitterWindow.rbw +63 -63
  103. data/samples/bigdemo/wxStaticBitmap.rbw +51 -51
  104. data/samples/bigdemo/wxStaticText.rbw +55 -55
  105. data/samples/bigdemo/wxStatusBar.rbw +126 -126
  106. data/samples/bigdemo/wxTextCtrl.rbw +149 -149
  107. data/samples/bigdemo/wxTextEntryDialog.rbw +31 -31
  108. data/samples/bigdemo/wxToggleButton.rbw +49 -49
  109. data/samples/bigdemo/wxToolBar.rbw +131 -131
  110. data/samples/bigdemo/wxTreeCtrl.rbw +191 -190
  111. data/samples/calendar/calendar.rb +256 -271
  112. data/samples/caret/caret.rb +282 -282
  113. data/samples/caret/mondrian.xpm +44 -44
  114. data/samples/controls/controls.rb +1136 -1136
  115. data/samples/controls/get_item_sample.rb +87 -87
  116. data/samples/controls/icons/choice.xpm +27 -27
  117. data/samples/controls/icons/combo.xpm +27 -27
  118. data/samples/controls/icons/gauge.xpm +27 -27
  119. data/samples/controls/icons/list.xpm +27 -27
  120. data/samples/controls/icons/radio.xpm +27 -27
  121. data/samples/controls/icons/stattext.xpm +24 -24
  122. data/samples/controls/icons/text.xpm +27 -27
  123. data/samples/controls/mondrian.xpm +44 -44
  124. data/samples/dialogs/dialogs.rb +797 -723
  125. data/samples/dialogs/tips.txt +18 -18
  126. data/samples/drawing/images.rb +37 -37
  127. data/samples/etc/activation.rb +102 -102
  128. data/samples/etc/choice.rb +67 -67
  129. data/samples/etc/miniframe.rb +79 -79
  130. data/samples/etc/sash.rb +130 -130
  131. data/samples/etc/scrollwin.rb +110 -110
  132. data/samples/etc/system_settings.rb +252 -252
  133. data/samples/etc/toolbar_sizer_additem.rb +55 -0
  134. data/samples/etc/wizard.rb +74 -74
  135. data/samples/event/update_ui_event.rb +70 -0
  136. data/samples/grid/gridtablebase.rb +43 -29
  137. data/samples/listbook/listbook.rb +174 -174
  138. data/samples/listbook/listbook.xrc +370 -370
  139. data/samples/mdi/mdi.rb +85 -77
  140. data/samples/minimal/minimal.rb +77 -77
  141. data/samples/minimal/nothing.rb +16 -16
  142. data/samples/text/format-text-bold.png +0 -0
  143. data/samples/text/format-text-italic.png +0 -0
  144. data/samples/text/format-text-underline.png +0 -0
  145. data/samples/text/rich_textctrl.rb +98 -0
  146. data/samples/text/textctrl.rb +111 -113
  147. data/samples/text/unicode.rb +242 -242
  148. data/samples/text/utf8.txt +14 -14
  149. data/samples/treectrl/treectrl.rb +1166 -1174
  150. data/samples/xrc/samples.xrc +46 -46
  151. data/samples/xrc/xrc_sample.rb +76 -96
  152. metadata +15 -3
@@ -1,44 +1,44 @@
1
- /* XPM */
2
- static char *mondrian_xpm[] = {
3
- /* columns rows colors chars-per-pixel */
4
- "32 32 6 1",
5
- " c Black",
6
- ". c Blue",
7
- "X c #00bf00",
8
- "o c Red",
9
- "O c Yellow",
10
- "+ c Gray100",
11
- /* pixels */
12
- " ",
13
- " oooooo +++++++++++++++++++++++ ",
14
- " oooooo +++++++++++++++++++++++ ",
15
- " oooooo +++++++++++++++++++++++ ",
16
- " oooooo +++++++++++++++++++++++ ",
17
- " oooooo +++++++++++++++++++++++ ",
18
- " oooooo +++++++++++++++++++++++ ",
19
- " oooooo +++++++++++++++++++++++ ",
20
- " ",
21
- " ++++++ ++++++++++++++++++ .... ",
22
- " ++++++ ++++++++++++++++++ .... ",
23
- " ++++++ ++++++++++++++++++ .... ",
24
- " ++++++ ++++++++++++++++++ .... ",
25
- " ++++++ ++++++++++++++++++ .... ",
26
- " ++++++ ++++++++++++++++++ ",
27
- " ++++++ ++++++++++++++++++ ++++ ",
28
- " ++++++ ++++++++++++++++++ ++++ ",
29
- " ++++++ ++++++++++++++++++ ++++ ",
30
- " ++++++ ++++++++++++++++++ ++++ ",
31
- " ++++++ ++++++++++++++++++ ++++ ",
32
- " ++++++ ++++++++++++++++++ ++++ ",
33
- " ++++++ ++++++++++++++++++ ++++ ",
34
- " ++++++ ++++++++++++++++++ ++++ ",
35
- " ++++++ ++++++++++++++++++ ++++ ",
36
- " ++++++ ++++ ",
37
- " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
38
- " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
39
- " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
40
- " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
41
- " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
42
- " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
43
- " "
44
- };
1
+ /* XPM */
2
+ static char *mondrian_xpm[] = {
3
+ /* columns rows colors chars-per-pixel */
4
+ "32 32 6 1",
5
+ " c Black",
6
+ ". c Blue",
7
+ "X c #00bf00",
8
+ "o c Red",
9
+ "O c Yellow",
10
+ "+ c Gray100",
11
+ /* pixels */
12
+ " ",
13
+ " oooooo +++++++++++++++++++++++ ",
14
+ " oooooo +++++++++++++++++++++++ ",
15
+ " oooooo +++++++++++++++++++++++ ",
16
+ " oooooo +++++++++++++++++++++++ ",
17
+ " oooooo +++++++++++++++++++++++ ",
18
+ " oooooo +++++++++++++++++++++++ ",
19
+ " oooooo +++++++++++++++++++++++ ",
20
+ " ",
21
+ " ++++++ ++++++++++++++++++ .... ",
22
+ " ++++++ ++++++++++++++++++ .... ",
23
+ " ++++++ ++++++++++++++++++ .... ",
24
+ " ++++++ ++++++++++++++++++ .... ",
25
+ " ++++++ ++++++++++++++++++ .... ",
26
+ " ++++++ ++++++++++++++++++ ",
27
+ " ++++++ ++++++++++++++++++ ++++ ",
28
+ " ++++++ ++++++++++++++++++ ++++ ",
29
+ " ++++++ ++++++++++++++++++ ++++ ",
30
+ " ++++++ ++++++++++++++++++ ++++ ",
31
+ " ++++++ ++++++++++++++++++ ++++ ",
32
+ " ++++++ ++++++++++++++++++ ++++ ",
33
+ " ++++++ ++++++++++++++++++ ++++ ",
34
+ " ++++++ ++++++++++++++++++ ++++ ",
35
+ " ++++++ ++++++++++++++++++ ++++ ",
36
+ " ++++++ ++++ ",
37
+ " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
38
+ " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
39
+ " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
40
+ " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
41
+ " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
42
+ " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
43
+ " "
44
+ };
@@ -1,1136 +1,1136 @@
1
- #!/usr/bin/env ruby
2
- # wxRuby2 Sample Code. Copyright (c) 2004-2008 wxRuby development team
3
- # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
- begin
5
- require 'rubygems'
6
- rescue LoadError
7
- end
8
- require 'wx'
9
-
10
-
11
- include Wx
12
-
13
- CONTROLS_QUIT = ID_EXIT
14
- CONTROLS_TEXT = 101
15
- CONTROLS_ABOUT = ID_ABOUT
16
- CONTROLS_CLEAR_LOG = 103
17
- # tooltip menu
18
- CONTROLS_SET_TOOLTIP_DELAY = 200
19
- CONTROLS_ENABLE_TOOLTIPS = 201
20
- # panel menu
21
- CONTROLS_ENABLE_ALL = 202
22
-
23
-
24
- ID_NOTEBOOK = 1000
25
-
26
- ID_LISTBOX = 130
27
- ID_LISTBOX_SEL_NUM = 131
28
- ID_LISTBOX_SEL_STR = 132
29
- ID_LISTBOX_CLEAR = 133
30
- ID_LISTBOX_APPEND = 134
31
- ID_LISTBOX_DELETE = 135
32
- ID_LISTBOX_FONT = 136
33
- ID_LISTBOX_ENABLE = 137
34
- ID_LISTBOX_SORTED = 138
35
-
36
- ID_CHOICE = 120
37
- ID_CHOICE_SEL_NUM = 121
38
- ID_CHOICE_SEL_STR = 122
39
- ID_CHOICE_CLEAR = 123
40
- ID_CHOICE_APPEND = 124
41
- ID_CHOICE_DELETE = 125
42
- ID_CHOICE_FONT = 126
43
- ID_CHOICE_ENABLE = 127
44
- ID_CHOICE_SORTED = 128
45
-
46
- ID_COMBO = 140
47
- ID_COMBO_SEL_NUM = 141
48
- ID_COMBO_SEL_STR = 142
49
- ID_COMBO_CLEAR = 143
50
- ID_COMBO_APPEND = 144
51
- ID_COMBO_DELETE = 145
52
- ID_COMBO_FONT = 146
53
- ID_COMBO_ENABLE = 147
54
-
55
- ID_RADIOBOX = 160
56
- ID_RADIOBOX_SEL_NUM = 161
57
- ID_RADIOBOX_SEL_STR = 162
58
- ID_RADIOBOX_FONT = 163
59
- ID_RADIOBOX_ENABLE = 164
60
-
61
- ID_RADIOBUTTON_1 = 166
62
- ID_RADIOBUTTON_2 = 167
63
-
64
- ID_SET_FONT = 170
65
-
66
- ID_GAUGE = 180
67
- ID_SLIDER = 181
68
-
69
- ID_SPIN = 182
70
- ID_BTNPROGRESS = 183
71
- ID_BUTTON_LABEL = 184
72
- ID_SPINCTRL = 185
73
-
74
- ID_BUTTON_TEST1 = 190
75
- ID_BUTTON_TEST2 = 191
76
- ID_BITMAP_BTN = 192
77
-
78
- ID_CHANGE_COLOUR = 200
79
-
80
- ID_SIZER_CHECK1 = 201
81
- ID_SIZER_CHECK2 = 202
82
- ID_SIZER_CHECK3 = 203
83
- ID_SIZER_CHECK4 = 204
84
- ID_SIZER_CHECK14 = 205
85
- ID_SIZER_CHECKBIG = 206
86
-
87
- Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max = (0..6).to_a
88
-
89
-
90
- # a button which intercepts double clicks (for testing...)
91
- class MyButton < Button
92
- def initialize(parent,id,label = EmptyString,pos = DEFAULT_POSITION,size = DEFAULT_SIZE)
93
- super(parent,id,label,pos,size)
94
-
95
- evt_left_dclick {|event| onDClick(event)}
96
- end
97
-
98
- def onDClick(event)
99
- log_message("MyButton::OnDClick")
100
- event.skip()
101
- end
102
-
103
- end
104
-
105
- # a combo which intercepts chars (to test Windows behaviour)
106
- class MyComboBox < ComboBox
107
- def initialize(parent,id,value = EmptyString,
108
- pos = DEFAULT_POSITION,
109
- size = DEFAULT_SIZE,
110
- choices = [],
111
- style = 0)
112
- super(parent, id, value, pos, size, choices)#, style)
113
-
114
- evt_char {|event| onChar(event)}
115
- evt_key_down {|event| onKeyDown(event)}
116
- evt_key_up {|event| onKeyUp(event)}
117
-
118
- evt_set_focus {|event| onFocusGot(event)}
119
- end
120
-
121
- def onChar(event)
122
- log_message("MyComboBox::OnChar")
123
- if event.key_code() == ?w
124
- log_message("MyComboBox: 'w' will be ignored.")
125
- else
126
- event.skip()
127
- end
128
- end
129
-
130
- def onKeyDown(event)
131
- log_message("MyComboBox::OnKeyDown")
132
- if event.key_code() == ?w
133
- log_message("MyComboBox: 'w' will be ignored.")
134
- else
135
- event.skip()
136
- end
137
- end
138
-
139
- def onKeyUp(event)
140
- #log_message("MyComboBox::OnKeyUp")
141
- event.skip()
142
- end
143
-
144
- def onFocusGot(event)
145
- #log_message("MyComboBox::OnFocusGot")
146
- event.skip()
147
- end
148
-
149
- end
150
-
151
- # a radiobox which handles focus set/kill (for testing)
152
- class MyRadioBox < RadioBox
153
- def initialize(parent,
154
- id,title = EmptyString,
155
- pos = DEFAULT_POSITION,
156
- size = DEFAULT_SIZE,
157
- choices = [],
158
- majorDim = 1,
159
- style = RA_HORIZONTAL)
160
- super(parent, id, title, pos, size, choices, majorDim,style)
161
- set_foreground_colour(RED)
162
-
163
- evt_set_focus {|event| onFocusGot(event)}
164
- evt_kill_focus {|event| onFocusLost(event)}
165
-
166
- end
167
-
168
- def onFocusGot(event)
169
- log_message("MyRadioBox::OnFocusGot")
170
- event.skip()
171
- end
172
-
173
- def onFocusLost(event)
174
- log_message("MyRadioBox::OnFocusLost")
175
- event.skip()
176
- end
177
-
178
- end
179
-
180
-
181
- class MyPanel < Panel
182
-
183
- # delete Log::set_active_target(@m_logTargetOld)
184
- # delete @m_notebook.GetImageList()
185
- attr_reader :m_text,:m_logTargetOld
186
-
187
- def initialize(frame,x,y,w,h)
188
- super( frame, -1, Point.new(x, y), Size.new(w, h) )
189
-
190
- @s_colOld = NULL_COLOUR
191
-
192
- @m_text = TextCtrl.new(self, -1, "This is the log window.\n",
193
- Point.new(0, 250), Size.new(100, 50), TE_MULTILINE)
194
- @m_text.set_background_colour(Colour.new("wheat"))
195
-
196
- #@m_logTargetOld = Log::set_active_target(LogTextCtrl.new(@m_text))
197
-
198
- @m_notebook = Wx::Notebook.new(self, ID_NOTEBOOK)
199
-
200
- choices = [
201
- "This",
202
- "is one of my",
203
- "really",
204
- "wonderful",
205
- "examples."
206
- ]
207
-
208
- # fill the image list
209
-
210
- imagelist = ImageList.new(16, 16)
211
-
212
- imagelist.add( Bitmap.new( local_icon_file("list.xpm"),
213
- Wx::BITMAP_TYPE_XPM))
214
- imagelist.add( Bitmap.new( local_icon_file("choice.xpm"),
215
- Wx::BITMAP_TYPE_XPM))
216
- imagelist.add( Bitmap.new( local_icon_file("combo.xpm"),
217
- Wx::BITMAP_TYPE_XPM))
218
- imagelist.add( Bitmap.new( local_icon_file("text.xpm"),
219
- Wx::BITMAP_TYPE_XPM))
220
- imagelist.add( Bitmap.new( local_icon_file("radio.xpm"),
221
- Wx::BITMAP_TYPE_XPM))
222
- imagelist.add( Bitmap.new( local_icon_file("gauge.xpm"),
223
- Wx::BITMAP_TYPE_XPM))
224
-
225
- @m_notebook.set_image_list(imagelist)
226
-
227
- panel = Panel.new(@m_notebook)
228
- @m_listbox = ListBox.new( panel, ID_LISTBOX,
229
- Point.new(10,10), Size.new(120,70),
230
- choices, LB_ALWAYS_SB )
231
-
232
- @m_listboxSorted = ListBox.new( panel, ID_LISTBOX_SORTED,
233
- Point.new(10,90), Size.new(120,70),
234
- choices, LB_SORT )
235
-
236
-
237
- @m_listbox.set_cursor(CROSS_CURSOR)
238
-
239
- @m_listbox.set_tool_tip( "This is a list box" )
240
-
241
-
242
- @m_lbSelectNum = Button.new( panel, ID_LISTBOX_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
243
- @m_lbSelectThis = Button.new( panel, ID_LISTBOX_SEL_STR, "&Select 'This'", Point.new(340,30), Size.new(140,30) )
244
- Button.new( panel, ID_LISTBOX_CLEAR, "&clear", Point.new(180,80), Size.new(140,30) )
245
- MyButton.new( panel, ID_LISTBOX_APPEND, "&append 'Hi!'", Point.new(340,80), Size.new(140,30) )
246
- Button.new( panel, ID_LISTBOX_DELETE, "D&elete selected item", Point.new(180,130), Size.new(140,30) )
247
- button = MyButton.new( panel, ID_LISTBOX_FONT, "Set &Italic font", Point.new(340,130), Size.new(140,30) )
248
-
249
- button.set_default()
250
-
251
- button.set_foreground_colour(BLUE)
252
-
253
- button.set_tool_tip( "Press here to set italic font" )
254
-
255
- @m_checkbox = CheckBox.new( panel, ID_LISTBOX_ENABLE, "&Disable", Point.new(20,170) )
256
- @m_checkbox.set_value(FALSE)
257
- @m_checkbox.set_tool_tip( "Click here to disable the listbox" )
258
- @m_toggle_color = CheckBox.new( panel, ID_CHANGE_COLOUR, "&Toggle colour",
259
- Point.new(110,170) )
260
- panel.set_cursor(Cursor.new(CURSOR_HAND))
261
- @m_notebook.add_page(panel, "ListBox", TRUE, Image_List)
262
-
263
- panel = Panel.new(@m_notebook)
264
- @m_choice = Choice.new( panel, ID_CHOICE, Point.new(10,10), Size.new(120,-1), choices )
265
- @m_choiceSorted = Choice.new( panel, ID_CHOICE_SORTED, Point.new(10,70), Size.new(120,-1),
266
- choices, CB_SORT )
267
-
268
- @m_choice.set_selection(2)
269
- @m_choice.set_background_colour(Colour.new("red"))
270
- Button.new( panel, ID_CHOICE_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
271
- Button.new( panel, ID_CHOICE_SEL_STR, "&Select 'This'", Point.new(340,30), Size.new(140,30) )
272
- Button.new( panel, ID_CHOICE_CLEAR, "&clear", Point.new(180,80), Size.new(140,30) )
273
- Button.new( panel, ID_CHOICE_APPEND, "&append 'Hi!'", Point.new(340,80), Size.new(140,30) )
274
- Button.new( panel, ID_CHOICE_DELETE, "D&elete selected item", Point.new(180,130), Size.new(140,30) )
275
- Button.new( panel, ID_CHOICE_FONT, "Set &Italic font", Point.new(340,130), Size.new(140,30) )
276
- CheckBox.new( panel, ID_CHOICE_ENABLE, "&Disable", Point.new(20,130), Size.new(140,30) )
277
-
278
- @m_notebook.add_page(panel, "Choice", FALSE, Image_Choice)
279
-
280
- panel = Panel.new(@m_notebook)
281
- StaticBox.new( panel, -1, "&Box around combobox",
282
- Point.new(5, 5), Size.new(150, 100))
283
- @m_combo = MyComboBox.new( panel, ID_COMBO, "This",
284
- Point.new(20,25), Size.new(120, -1),
285
- choices,PROCESS_ENTER)
286
- # CB_READONLY | PROCESS_ENTER)
287
-
288
- @m_combo.set_tool_tip("This is a natural\ncombobox - can you believe me?")
289
-
290
- Button.new( panel, ID_COMBO_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
291
- Button.new( panel, ID_COMBO_SEL_STR, "&Select 'This'", Point.new(340,30), Size.new(140,30) )
292
- Button.new( panel, ID_COMBO_CLEAR, "&clear", Point.new(180,80), Size.new(140,30) )
293
- Button.new( panel, ID_COMBO_APPEND, "&append 'Hi!'", Point.new(340,80), Size.new(140,30) )
294
- Button.new( panel, ID_COMBO_DELETE, "D&elete selected item", Point.new(180,130), Size.new(140,30) )
295
- Button.new( panel, ID_COMBO_FONT, "Set &Italic font", Point.new(340,130), Size.new(140,30) )
296
- CheckBox.new( panel, ID_COMBO_ENABLE, "&Disable", Point.new(20,130), Size.new(140,30) )
297
- @m_notebook.add_page(panel, "ComboBox", FALSE, Image_Combo)
298
-
299
- choices2 = ["First", "Second"]
300
- # "Third",
301
- #"Fourth", "Fifth", "Sixth",
302
- #"Seventh", "Eighth", "Nineth", "Tenth" */
303
-
304
- panel = Panel.new(@m_notebook)
305
- MyRadioBox.new( panel, ID_RADIOBOX, "&That", Point.new(10,160), Size.new(-1,-1), choices2, 1, RA_SPECIFY_ROWS )
306
- @m_radio = RadioBox.new( panel, ID_RADIOBOX, "T&his", Point.new(10,10), Size.new(-1,-1), choices, 1, RA_SPECIFY_COLS )
307
- @m_radio.set_foreground_colour(RED)
308
-
309
- @m_radio.set_tool_tip("Ever seen a radiobox?")
310
-
311
- Button.new( panel, ID_RADIOBOX_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
312
- Button.new( panel, ID_RADIOBOX_SEL_STR, "&Select 'This'", Point.new(180,80), Size.new(140,30) )
313
- @m_fontButton = Button.new( panel, ID_SET_FONT, "Set &more Italic font", Point.new(340,30), Size.new(140,30) )
314
- Button.new( panel, ID_RADIOBOX_FONT, "Set &Italic font", Point.new(340,80), Size.new(140,30) )
315
- CheckBox.new( panel, ID_RADIOBOX_ENABLE, "&Disable", Point.new(340,130), DEFAULT_SIZE )
316
- rb = RadioButton.new( panel, ID_RADIOBUTTON_1, "Radiobutton1", Point.new(210,170), DEFAULT_SIZE, RB_GROUP )
317
- rb.set_value( FALSE )
318
- RadioButton.new( panel, ID_RADIOBUTTON_2, "&Radiobutton2", Point.new(340,170), DEFAULT_SIZE )
319
- @m_notebook.add_page(panel, "RadioBox", FALSE, Image_Radio)
320
-
321
- panel = Panel.new(@m_notebook)
322
- StaticBox.new( panel, -1, "&Gauge and Slider", Point.new(10,10), Size.new(222,130) )
323
- @m_gauge = Gauge.new( panel, -1, 200, Point.new(18,50), Size.new(155, 30), GA_HORIZONTAL|NO_BORDER )
324
- @m_gauge.set_background_colour(GREEN)
325
- @m_gauge.set_foreground_colour(RED)
326
- @m_gaugeVert = Gauge.new( panel, -1, 100,
327
- Point.new(195,35), Size.new(30, 90),
328
- GA_VERTICAL | GA_SMOOTH | NO_BORDER )
329
- @m_slider = Slider.new( panel, ID_SLIDER, 0, 0, 200, Point.new(18,90), Size.new(155,-1),
330
- SL_AUTOTICKS | SL_LABELS )
331
- @m_slider.set_tick_freq(40, 0)
332
- @m_slider.set_tool_tip("This is a sliding slider")
333
-
334
- StaticBox.new( panel, -1, "&Explanation",
335
- Point.new(230,10), Size.new(270,130),
336
- ALIGN_CENTER )
337
-
338
- StaticText.new( panel, -1,
339
- "In order see the gauge (aka progress bar)\n"+
340
- "control do something you have to drag the\n"+
341
- "handle of the slider to the right.\n"+
342
- "\n"+
343
- "This is also supposed to demonstrate how\n"+
344
- "to use static controls.\n",
345
- Point.new(250,25),
346
- Size.new(240, 110))
347
- initialSpinValue = -5
348
- s = initialSpinValue.to_s
349
- @m_spintext = TextCtrl.new( panel, -1, s, Point.new(20,160), Size.new(80,-1) )
350
- @m_spinbutton = SpinButton.new( panel, ID_SPIN, Point.new(103,160), Size.new(80, -1) )
351
- @m_spinbutton.set_range(-40,30)
352
- @m_spinbutton.set_value(initialSpinValue)
353
-
354
- @m_btnProgress = Button.new( panel, ID_BTNPROGRESS, "&Show progress dialog",
355
- Point.new(300, 160) )
356
-
357
- @m_spinctrl = SpinCtrl.new( panel, ID_SPINCTRL, "", Point.new(200, 160), Size.new(80, -1) )
358
- @m_spinctrl.set_range(10,30)
359
- @m_spinctrl.set_value(15)
360
-
361
- @m_notebook.add_page(panel, "Gauge", FALSE, Image_Gauge)
362
-
363
- panel = Panel.new(@m_notebook)
364
-
365
- icon = ArtProvider::get_icon(ART_INFORMATION)
366
- StaticBitmap.new( panel, -1, icon, Point.new(10, 10) )
367
-
368
- bitmap = Bitmap.new( 100, 100 )
369
- bitmap.draw do | dc |
370
- dc.clear()
371
- dc.set_pen(GREEN_PEN)
372
- dc.draw_ellipse(5, 5, 90, 90)
373
- dc.draw_text("Bitmap", 30, 40)
374
- end
375
-
376
- BitmapButton.new(panel, ID_BITMAP_BTN, bitmap, Point.new(100, 20))
377
-
378
- # test for masked bitmap display
379
- bitmap = Bitmap.new( File.join(File.dirname(__FILE__), "test2.bmp"),
380
- BITMAP_TYPE_BMP)
381
- if bitmap.is_ok()
382
- bitmap.set_mask(Mask.new(bitmap, BLUE))
383
- StaticBitmap.new(panel, -1, bitmap, Point.new(300, 120))
384
- end
385
- # bmp1 = ArtProvider::get_bitmap(ART_INFORMATION)
386
- # bmp2 = ArtProvider::get_bitmap(ART_WARNING)
387
- # bmp3 = ArtProvider::get_bitmap(ART_QUESTION)
388
- # bmpBtn = BitmapButton.new(panel, -1,
389
- # bmp1,
390
- # Point.new(30, 70))
391
-
392
- # bmpBtn.set_bitmap_selected(bmp2)
393
- # bmpBtn.set_bitmap_focus(bmp3)
394
- ToggleButton.new(panel, ID_BUTTON_LABEL,
395
- "&Toggle label", Point.new(250, 20))
396
- @m_label = StaticText.new(panel, -1, "Label with some long text",
397
- Point.new(250, 60), DEFAULT_SIZE,
398
- ALIGN_RIGHT)
399
- @m_label.set_foreground_colour(BLUE )
400
-
401
- @m_notebook.add_page(panel, "BitmapXXX")
402
-
403
- # sizer
404
-
405
- panel = Panel.new(@m_notebook)
406
- panel.set_auto_layout( TRUE )
407
-
408
- sizer = BoxSizer.new( VERTICAL )
409
-
410
- csizer =
411
- StaticBoxSizer.new(StaticBox.new(panel, -1, "Show Buttons"),
412
- HORIZONTAL )
413
-
414
- check1 = CheckBox.new(panel, ID_SIZER_CHECK1, "1")
415
- check1.set_value(TRUE)
416
- csizer.add(check1)
417
- check2 = CheckBox.new(panel, ID_SIZER_CHECK2, "2")
418
- check2.set_value(TRUE)
419
- csizer.add(check2)
420
- check3 = CheckBox.new(panel, ID_SIZER_CHECK3, "3")
421
- check3.set_value(TRUE)
422
- csizer.add(check3)
423
- check4 = CheckBox.new(panel, ID_SIZER_CHECK4, "4")
424
- check4.set_value(TRUE)
425
- csizer.add(check4)
426
- check14 = CheckBox.new(panel, ID_SIZER_CHECK14, "1-4")
427
- check14.set_value(TRUE)
428
- csizer.add(check14)
429
- checkBig = CheckBox.new(panel, ID_SIZER_CHECKBIG, "Big")
430
- checkBig.set_value(TRUE)
431
- csizer.add(checkBig)
432
-
433
- sizer.add(csizer)
434
-
435
- @m_hsizer = BoxSizer.new( HORIZONTAL )
436
-
437
- @m_buttonSizer = BoxSizer.new(VERTICAL)
438
-
439
- @m_sizerBtn1 = Button.new(panel, -1, "Test Button &1" )
440
- @m_buttonSizer.add( @m_sizerBtn1, 0, ALL, 10 )
441
- @m_sizerBtn2 = Button.new(panel, -1, "Test Button &2" )
442
- @m_buttonSizer.add( @m_sizerBtn2, 0, ALL, 10 )
443
- @m_sizerBtn3 = Button.new(panel, -1, "Test Button &3" )
444
- @m_buttonSizer.add( @m_sizerBtn3, 0, ALL, 10 )
445
- @m_sizerBtn4 = Button.new(panel, -1, "Test Button &4" )
446
- @m_buttonSizer.add( @m_sizerBtn4, 0, ALL, 10 )
447
-
448
- @m_hsizer.add(@m_buttonSizer)
449
- @m_hsizer.add( 20,20, 1 )
450
- @m_bigBtn = Button.new(panel, -1, "Multiline\nbutton" )
451
- @m_hsizer.add( @m_bigBtn , 3, GROW|ALL, 10 )
452
-
453
- sizer.add(@m_hsizer, 1, GROW)
454
-
455
- panel.set_sizer( sizer )
456
-
457
- @m_notebook.add_page(panel, "Sizer")
458
-
459
- evt_size {|event| onSize(event) }
460
- evt_notebook_page_changing(ID_NOTEBOOK) {|event| onPageChanging(event) }
461
- evt_notebook_page_changed(ID_NOTEBOOK) {|event| onPageChanged(event) }
462
- evt_listbox(ID_LISTBOX) {|event| onListBox(event) }
463
- evt_listbox(ID_LISTBOX_SORTED) {|event| onListBox(event) }
464
- evt_listbox_dclick(ID_LISTBOX) {|event| onListBoxDoubleClick(event) }
465
- evt_button(ID_LISTBOX_SEL_NUM) {|event| onListBoxButtons(event) }
466
- evt_button(ID_LISTBOX_SEL_STR) {|event| onListBoxButtons(event) }
467
- evt_button(ID_LISTBOX_CLEAR) {|event| onListBoxButtons(event) }
468
- evt_button(ID_LISTBOX_APPEND) {|event| onListBoxButtons(event) }
469
- evt_button(ID_LISTBOX_DELETE) {|event| onListBoxButtons(event) }
470
- evt_button(ID_LISTBOX_FONT) {|event| onListBoxButtons(event) }
471
- evt_checkbox(ID_LISTBOX_ENABLE) {|event| onListBoxButtons(event) }
472
- evt_choice(ID_CHOICE) {|event| onChoice(event) }
473
- evt_choice(ID_CHOICE_SORTED) {|event| onChoice(event) }
474
- evt_button(ID_CHOICE_SEL_NUM) {|event| onChoiceButtons(event) }
475
- evt_button(ID_CHOICE_SEL_STR) {|event| onChoiceButtons(event) }
476
- evt_button(ID_CHOICE_CLEAR) {|event| onChoiceButtons(event) }
477
- evt_button(ID_CHOICE_APPEND) {|event| onChoiceButtons(event) }
478
- evt_button(ID_CHOICE_DELETE) {|event| onChoiceButtons(event) }
479
- evt_button(ID_CHOICE_FONT) {|event| onChoiceButtons(event) }
480
- evt_checkbox(ID_CHOICE_ENABLE) {|event| onChoiceButtons(event) }
481
- evt_combobox(ID_COMBO) {|event| onCombo(event) }
482
- evt_text(ID_COMBO) {|event| onComboTextChanged(event) }
483
- evt_text_enter(ID_COMBO) {|event| onComboTextEnter(event) }
484
- evt_button(ID_COMBO_SEL_NUM) {|event| onComboButtons(event) }
485
- evt_button(ID_COMBO_SEL_STR) {|event| onComboButtons(event) }
486
- evt_button(ID_COMBO_CLEAR) {|event| onComboButtons(event) }
487
- evt_button(ID_COMBO_APPEND) {|event| onComboButtons(event) }
488
- evt_button(ID_COMBO_DELETE) {|event| onComboButtons(event) }
489
- evt_button(ID_COMBO_FONT) {|event| onComboButtons(event) }
490
- evt_checkbox(ID_COMBO_ENABLE) {|event| onComboButtons(event) }
491
- evt_radiobox(ID_RADIOBOX) {|event| onRadio(event) }
492
- evt_button(ID_RADIOBOX_SEL_NUM) {|event| onRadioButtons(event) }
493
- evt_button(ID_RADIOBOX_SEL_STR) {|event| onRadioButtons(event) }
494
- evt_button(ID_RADIOBOX_FONT) {|event| onRadioButtons(event) }
495
- evt_checkbox(ID_RADIOBOX_ENABLE) {|event| onRadioButtons(event) }
496
- evt_button(ID_SET_FONT) {|event| onSetFont(event) }
497
- evt_slider(ID_SLIDER) {|event| onSliderupdate(event) }
498
- evt_spin(ID_SPIN) {|event| onSpinupdate(event) }
499
- evt_spin_up(ID_SPIN) {|event| onSpinUp(event) }
500
- evt_spin_down(ID_SPIN) {|event| onSpinDown(event) }
501
- evt_update_ui(ID_BTNPROGRESS) {|event| onupdateShowProgress(event) }
502
- evt_button(ID_BTNPROGRESS) {|event| onShowProgress(event) }
503
- evt_spinctrl(ID_SPINCTRL) {|event| onSpinCtrl(event) }
504
- evt_spin_up(ID_SPINCTRL) {|event| onSpinCtrlUp(event) }
505
- evt_spin_down(ID_SPINCTRL) {|event| onSpinCtrlDown(event) }
506
- evt_text(ID_SPINCTRL) {|event| onSpinCtrlText(event) }
507
- if (RUBY_PLATFORM =~ /mswin/)
508
- evt_togglebutton(ID_BUTTON_LABEL) {|event| onupdateLabel(event) }
509
- end
510
- evt_checkbox(ID_CHANGE_COLOUR) {|event| onChangeColour(event) }
511
- evt_button(ID_BUTTON_TEST1) {|event| onTestButton(event) }
512
- evt_button(ID_BUTTON_TEST2) {|event| onTestButton(event) }
513
- evt_button(ID_BITMAP_BTN) {|event| onBmpButton(event) }
514
-
515
- evt_checkbox(ID_SIZER_CHECK1) {|event| onSizerCheck(event) }
516
- evt_checkbox(ID_SIZER_CHECK2) {|event| onSizerCheck(event) }
517
- evt_checkbox(ID_SIZER_CHECK3) {|event| onSizerCheck(event) }
518
- evt_checkbox(ID_SIZER_CHECK4) {|event| onSizerCheck(event) }
519
- evt_checkbox(ID_SIZER_CHECK14) {|event| onSizerCheck(event) }
520
- evt_checkbox(ID_SIZER_CHECKBIG) {|event| onSizerCheck(event) }
521
-
522
- end
523
-
524
- # utility function to find an icon relative to this ruby script
525
- def local_icon_file(icon_name)
526
- File.join( File.dirname(__FILE__), 'icons', icon_name)
527
- end
528
-
529
-
530
- def onSize(event)
531
- size = get_client_size()
532
- x = size.get_width
533
- y = size.get_height
534
- if @m_notebook
535
- @m_notebook.set_dimensions( 2, 2, x-4, y*2/3-4 )
536
- end
537
- if @m_text
538
- @m_text.set_dimensions( 2, y*2/3+2, x-4, y/3-4 )
539
- end
540
- end
541
-
542
- def onPageChanging(event)
543
-
544
- selOld = event.get_old_selection()
545
- if selOld == 2
546
- if message_box("This demonstrates how a program may prevent the\n"+
547
- "page change from taking place - if you select\n"+
548
- "[No] the current page will stay the third one\n",
549
- "Control sample",
550
- ICON_QUESTION | YES_NO, self) != YES
551
- event.veto()
552
- return nil
553
- end
554
- end
555
- @m_text << "Notebook selection is being changed from " << selOld \
556
- << " to " << event.get_selection() \
557
- << " (current page from notebook is " \
558
- << @m_notebook.get_selection() << ")\n"
559
- end
560
-
561
- def onPageChanged(event)
562
- @m_text << "Notebook selection is now " << event.get_selection() \
563
- << " (from notebook: " << @m_notebook.get_selection() \
564
- << ")\n"
565
- end
566
-
567
- def onTestButton(event)
568
- log_message("Button %s clicked.",
569
- event.get_id() == ID_BUTTON_TEST1 ? '1' : '2')
570
- end
571
-
572
- def onBmpButton(event)
573
- log_message("Bitmap button clicked.")
574
- end
575
-
576
- def onChangeColour(event)
577
- # test panel colour changing and propagation to the subcontrols
578
- if @s_colOld.is_ok()
579
-
580
- set_background_colour(@s_colOld)
581
- @s_colOld = NULL_COLOUR
582
-
583
- @m_lbSelectThis.set_foreground_colour(Colour.new("red"))
584
- @m_lbSelectThis.set_background_colour(Colour.new("white"))
585
- else
586
- @s_colOld = Colour.new("red")
587
- set_background_colour(Colour.new("white"))
588
-
589
- @m_lbSelectThis.set_foreground_colour(Colour.new("white"))
590
- @m_lbSelectThis.set_background_colour(Colour.new("red"))
591
- end
592
-
593
- @m_lbSelectThis.refresh()
594
- refresh()
595
- end
596
-
597
- def onListBox(event)
598
- # GetParent().Move(100, 100)
599
- if event.get_int() == -1
600
- @m_text.append_text( "ListBox has no selections anymore\n" )
601
- return Qnil
602
- end
603
-
604
- listbox = (event.get_id() == ID_LISTBOX) ? @m_listbox : @m_listboxSorted
605
-
606
- @m_text.append_text( "ListBox event selection string is: '" )
607
- @m_text.append_text( event.get_string() )
608
- @m_text.append_text( "'\n" )
609
- @m_text.append_text( "ListBox control selection string is: '" )
610
- @m_text.append_text( listbox.get_string_selection() )
611
- @m_text.append_text( "'\n" )
612
-
613
- # NOTE: get_client_data and set_client_data have been removed from wxRuby 0.4
614
- # because they could cause crashes
615
- # obj = event.get_client_data()
616
- # @m_text.append_text( "ListBox event client data string is: '" )
617
- # if obj
618
- # @m_text.append_text( obj )
619
- # else
620
- # @m_text.append_text( "none" )
621
- # end
622
-
623
- # @m_text.append_text( "'\n" )
624
- # @m_text.append_text( "ListBox control client data string is: '" )
625
- # obj = listbox.get_client_data(listbox.get_selection())
626
- # if obj
627
- # @m_text.append_text( obj )
628
- # else
629
- # @m_text.append_text( "none" )
630
- # end
631
- # @m_text.append_text( "'\n" )
632
- end
633
-
634
- def onListBoxDoubleClick(event)
635
- @m_text.append_text( "ListBox double click string is: " )
636
- @m_text.append_text( event.get_string() )
637
- @m_text.append_text( "\n" )
638
- end
639
-
640
- def onListBoxButtons(event)
641
- case event.get_id()
642
- when ID_LISTBOX_ENABLE
643
- @m_text.append_text("Checkbox clicked.\n")
644
- if event.get_int() != 0
645
- @m_checkbox.set_tool_tip( "Click to enable listbox" )
646
- @m_toggle_color.enable(false)
647
- else
648
- @m_checkbox.set_tool_tip( "Click to disable listbox" )
649
- @m_toggle_color.enable(true)
650
- end
651
- @m_listbox.enable( event.get_int() == 0 )
652
- @m_lbSelectThis.enable( event.get_int() == 0 )
653
- @m_lbSelectNum.enable( event.get_int() == 0 )
654
- @m_listboxSorted.enable( event.get_int() == 0 )
655
- #w = Window::find_window_by_id(ID_CHANGE_COLOUR)
656
- #if(w)
657
- # w.enable( event.get_int() == 0 )
658
- #else
659
- # puts("Window ID_CHANGE_COLOR not found")
660
- #end
661
- when ID_LISTBOX_SEL_NUM
662
- @m_listbox.set_selection( 2 )
663
- @m_listboxSorted.set_selection( 2 )
664
- @m_lbSelectThis.warp_pointer( 40, 14 )
665
- when ID_LISTBOX_SEL_STR
666
- @m_listbox.set_string_selection( "This" )
667
- @m_listboxSorted.set_string_selection( "This" )
668
- @m_lbSelectNum.warp_pointer( 40, 14 )
669
- when ID_LISTBOX_CLEAR
670
- @m_listbox.clear()
671
- @m_listboxSorted.clear()
672
- when ID_LISTBOX_APPEND
673
- @m_listbox.append( "Hi!" )
674
- @m_listboxSorted.append( "Hi!" )
675
- when ID_LISTBOX_DELETE
676
- idx = @m_listbox.get_selection()
677
- if idx != NOT_FOUND
678
- @m_listbox.delete( idx )
679
- end
680
- idx = @m_listboxSorted.get_selection()
681
- if idx != NOT_FOUND
682
- @m_listboxSorted.delete( idx )
683
- end
684
- when ID_LISTBOX_FONT
685
- @m_listbox.set_font( ITALIC_FONT )
686
- @m_listboxSorted.set_font( ITALIC_FONT )
687
- @m_checkbox.set_font( ITALIC_FONT )
688
- end
689
- end
690
-
691
-
692
- def onChoice(event)
693
-
694
- choice = (event.get_id() == ID_CHOICE) ? @m_choice : @m_choiceSorted
695
-
696
- @m_text.append_text( "Choice event selection string is: '" )
697
- @m_text.append_text( event.get_string() )
698
- @m_text.append_text( "'\n" )
699
- @m_text.append_text( "Choice control selection string is: '" )
700
- @m_text.append_text( choice.get_string_selection() )
701
- @m_text.append_text( "'\n" )
702
-
703
- # NOTE: get_client_data and set_client_data have been removed from wxRuby 0.4
704
- # because they could cause crashes
705
- # obj = event.get_client_data()
706
- # @m_text.append_text( "Choice event client data string is: '" )
707
-
708
- # if obj
709
- # @m_text.append_text( obj )
710
- # else
711
- # @m_text.append_text( "none" )
712
- # end
713
-
714
- # @m_text.append_text( "'\n" )
715
- # @m_text.append_text( "Choice control client data string is: '" )
716
-
717
- # obj = choice.get_client_data(choice.get_selection())
718
- # if obj
719
- # @m_text.append_text( obj )
720
- # else
721
- # @m_text.append_text( "none" )
722
- # end
723
- # @m_text.append_text( "'\n" )
724
- end
725
-
726
- def onChoiceButtons(event)
727
- case event.get_id()
728
- when ID_CHOICE_ENABLE
729
- @m_choice.enable( event.get_int() == 0 )
730
- @m_choiceSorted.enable( event.get_int() == 0 )
731
- when ID_CHOICE_SEL_NUM
732
- @m_choice.set_selection( 2 )
733
- @m_choiceSorted.set_selection( 2 )
734
- when ID_CHOICE_SEL_STR
735
- @m_choice.set_string_selection( "This" )
736
- @m_choiceSorted.set_string_selection( "This" )
737
- when ID_CHOICE_CLEAR
738
- @m_choice.clear()
739
- @m_choiceSorted.clear()
740
- when ID_CHOICE_APPEND
741
- @m_choice.append( "Hi!" )
742
- @m_choiceSorted.append( "Hi!" )
743
- when ID_CHOICE_DELETE
744
- idx = @m_choice.get_selection()
745
- if idx != NOT_FOUND
746
- @m_choice.delete( idx )
747
- end
748
- idx = @m_choiceSorted.get_selection()
749
- if idx != NOT_FOUND
750
- @m_choiceSorted.delete( idx )
751
- end
752
- when ID_CHOICE_FONT
753
- @m_choice.set_font( ITALIC_FONT )
754
- @m_choiceSorted.set_font( ITALIC_FONT )
755
- end
756
- end
757
-
758
- def onCombo(event)
759
- @m_text.append_text( "ComboBox event selection string is: " )
760
- @m_text.append_text( event.get_string() )
761
- @m_text.append_text( "\n" )
762
- @m_text.append_text( "ComboBox control selection string is: " )
763
- @m_text.append_text( @m_combo.get_string_selection() )
764
- @m_text.append_text( "\n" )
765
- end
766
-
767
- def onComboTextChanged(event)
768
- str = sprintf( "Text in the combobox changed: now is '%s'.",
769
- event.get_string())
770
- log_message( str )
771
- end
772
-
773
- def onComboTextEnter(event)
774
- log_message("Enter pressed in the combobox: value is '%s'.",
775
- @m_combo.get_value())
776
- end
777
-
778
- def onComboButtons(event)
779
- case event.get_id()
780
- when ID_COMBO_ENABLE
781
- @m_combo.enable( event.get_int() == 0 )
782
- when ID_COMBO_SEL_NUM
783
- @m_combo.set_selection( 2 )
784
- when ID_COMBO_SEL_STR
785
- @m_combo.set_string_selection( "This" )
786
- when ID_COMBO_CLEAR
787
- @m_combo.clear()
788
- when ID_COMBO_APPEND
789
- @m_combo.append( "Hi!" )
790
- when ID_COMBO_DELETE
791
- idx = @m_combo.get_selection()
792
- @m_combo.delete( idx )
793
- when ID_COMBO_FONT
794
- @m_combo.set_font( ITALIC_FONT )
795
- end
796
- end
797
-
798
- def onRadio(event)
799
- @m_text.append_text( "RadioBox selection string is: " )
800
- @m_text.append_text( event.get_string() )
801
- @m_text.append_text( "\n" )
802
- end
803
-
804
- def onRadioButtons(event)
805
- case event.get_id()
806
- when ID_RADIOBOX_ENABLE
807
- @m_radio.enable( event.get_int() == 0 )
808
- when ID_RADIOBOX_SEL_NUM
809
- @m_radio.set_selection( 2 )
810
- when ID_RADIOBOX_SEL_STR
811
- @m_radio.set_string_selection( "This" )
812
- when ID_RADIOBOX_FONT
813
- @m_radio.set_foreground_colour(GREEN)
814
- @m_radio.set_font( ITALIC_FONT )
815
- end
816
- end
817
-
818
- def onSetFont(event)
819
- @m_fontButton.set_font( ITALIC_FONT )
820
- @m_text.set_font( ITALIC_FONT )
821
- end
822
-
823
- def onupdateLabel(event)
824
- @m_label.set_label(event.get_int() != 0 ? "Very very very very very long text." : "Shorter text.")
825
- end
826
-
827
- def onSliderupdate(event)
828
- @m_gauge.set_value( @m_slider.get_value() )
829
- @m_gaugeVert.set_value( @m_slider.get_value() / 2 )
830
- end
831
-
832
-
833
- def onSpinCtrlText(event)
834
- if @m_spinctrl
835
- s = sprintf( "Spin ctrl text changed: now %d (from event: %s)\n",
836
- @m_spinctrl.get_value(), event.get_string() )
837
- @m_text.append_text(s)
838
- end
839
- end
840
-
841
- def onSpinCtrl(event)
842
- if @m_spinctrl
843
- s = sprintf( "Spin ctrl changed: now %d (from event: %d)\n",
844
- @m_spinctrl.get_value(), event.get_int() )
845
- @m_text.append_text(s)
846
- end
847
- end
848
-
849
- def onSpinCtrlUp(event)
850
- if @m_spinctrl
851
- @m_text.append_text( sprintf(
852
- "Spin up: %d (from event: %d)\n",
853
- @m_spinctrl.get_value(), event.get_int() ) )
854
- end
855
- end
856
-
857
- def onSpinCtrlDown(event)
858
- if @m_spinctrl
859
- @m_text.append_text( sprintf(
860
- "Spin down: %d (from event: %d)\n",
861
- @m_spinctrl.get_value(), event.get_int() ) )
862
- end
863
- end
864
-
865
-
866
- def onSpinUp(event)
867
- value = sprintf( "Spin control up: current = %d\n",
868
- @m_spinbutton.get_value())
869
-
870
- if event.get_position() > 17
871
- value += "Preventing the spin button from going above 17.\n"
872
- event.veto()
873
- end
874
-
875
- @m_text.append_text(value)
876
- end
877
-
878
- def onSpinDown(event)
879
- value = sprintf( "Spin control down: current = %d\n",
880
- @m_spinbutton.get_value())
881
-
882
- if event.get_position() < -17
883
- value += "Preventing the spin button from going below -17.\n"
884
- event.veto()
885
- end
886
-
887
- @m_text.append_text(value)
888
- end
889
-
890
- def onSpinupdate(event)
891
- value = sprintf( "%d", event.get_position() )
892
- @m_spintext.set_value( value )
893
-
894
- value = sprintf( "Spin control range: (%d, %d), current = %d\n",
895
- @m_spinbutton.get_min(), @m_spinbutton.get_max(),
896
- @m_spinbutton.get_value())
897
-
898
- @m_text.append_text(value)
899
- end
900
-
901
- def onupdateShowProgress(event)
902
- event.enable( @m_spinbutton.get_value() > 0 )
903
- end
904
-
905
- def onShowProgress(event)
906
- max = @m_spinbutton.get_value()
907
- if max <= 0
908
- log_error("You must set positive range!")
909
- return nil
910
- end
911
-
912
- dialog = ProgressDialog.new("Progress dialog example",
913
- "An informative message",
914
- max, # range
915
- self, # parent
916
- PD_CAN_ABORT |
917
- PD_AUTO_HIDE |
918
- PD_APP_MODAL |
919
- PD_ELAPSED_TIME |
920
- PD_ESTIMATED_TIME |
921
- PD_REMAINING_TIME)
922
-
923
- cont = TRUE
924
- 0.upto(max) {|i|
925
- break if !cont
926
- sleep(1)
927
- if i == max
928
- cont = dialog.update(i, "That's all, folks!")
929
- elsif i == max / 2
930
- cont = dialog.update(i, "Only a half left (very long message)!")
931
- else
932
- cont = dialog.update(i)
933
- end
934
- }
935
- dialog.destroy()
936
- if !cont
937
- @m_text << "Progress dialog aborted!\n"
938
- else
939
- @m_text << "Countdown from " << max << " finished.\n"
940
- end
941
- end
942
-
943
- def onSizerCheck(event)
944
- case event.get_id()
945
- when ID_SIZER_CHECK1
946
- @m_buttonSizer.show(@m_sizerBtn1, event.is_checked())
947
- @m_buttonSizer.layout()
948
- when ID_SIZER_CHECK2
949
- @m_buttonSizer.show(@m_sizerBtn2, event.is_checked())
950
- @m_buttonSizer.layout()
951
- when ID_SIZER_CHECK3
952
- @m_buttonSizer.show(@m_sizerBtn3, event.is_checked())
953
- @m_buttonSizer.layout()
954
- when ID_SIZER_CHECK4
955
- @m_buttonSizer.show(@m_sizerBtn4, event.is_checked())
956
- @m_buttonSizer.layout()
957
- when ID_SIZER_CHECK14
958
- @m_hsizer.show(@m_buttonSizer, event.is_checked())
959
- @m_hsizer.layout()
960
- when ID_SIZER_CHECKBIG
961
- @m_hsizer.show(@m_bigBtn, event.is_checked())
962
- @m_hsizer.layout()
963
- end
964
- end
965
- end
966
-
967
-
968
- class MyFrame < Frame
969
- def initialize(title,x,y)
970
- super(nil, -1, title, Point.new(x, y), Size.new(500, 430))
971
-
972
- @s_delay = 5000
973
- @s_enabled = TRUE
974
- @s_enable2 = TRUE
975
- @s_windowFocus = nil
976
- mondrian_icon =
977
- case Wx::PLATFORM
978
- when "WXMSW"
979
- Icon.new( File.join( File.dirname(__FILE__), "mondrian.ico"),
980
- Wx::BITMAP_TYPE_ICO )
981
- else
982
- Icon.new( File.join( File.dirname(__FILE__), "mondrian.xpm"),
983
- Wx::BITMAP_TYPE_XPM )
984
- end
985
-
986
- set_icon(mondrian_icon)
987
-
988
- file_menu = Menu.new
989
-
990
- file_menu.append(CONTROLS_CLEAR_LOG, "&clear log\tCtrl-L")
991
- file_menu.append_separator()
992
- file_menu.append(CONTROLS_ABOUT, "&About\tF1")
993
- file_menu.append_separator()
994
- file_menu.append(CONTROLS_QUIT, "E&xit\tAlt-X", "Quit controls sample")
995
-
996
- menu_bar = MenuBar.new
997
- menu_bar.append(file_menu, "&File")
998
-
999
- tooltip_menu = Menu.new
1000
- tooltip_menu.append(CONTROLS_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D")
1001
- tooltip_menu.append_separator()
1002
- tooltip_menu.append(CONTROLS_ENABLE_TOOLTIPS, "&Toggle tooltips\tCtrl-T",
1003
- "enable/disable tooltips", ITEM_CHECK)
1004
- tooltip_menu.check(CONTROLS_ENABLE_TOOLTIPS, TRUE)
1005
- menu_bar.append(tooltip_menu, "&Tooltips")
1006
-
1007
- panel_menu = Menu.new
1008
- panel_menu.append(CONTROLS_ENABLE_ALL, "&Disable all\tCtrl-E",
1009
- "enable/disable all panel controls", ITEM_CHECK)
1010
- menu_bar.append(panel_menu, "&Panel")
1011
-
1012
- set_menu_bar(menu_bar)
1013
-
1014
- create_status_bar(2)
1015
-
1016
- @m_panel = MyPanel.new( self, 10, 10, 300, 100 )
1017
-
1018
- set_size_hints( 500, 425 )
1019
-
1020
- evt_menu(CONTROLS_QUIT) {|event| onQuit(event) }
1021
- evt_menu(CONTROLS_ABOUT) {|event| onAbout(event) }
1022
- evt_menu(CONTROLS_CLEAR_LOG) {|event| onClearLog(event) }
1023
- evt_menu(CONTROLS_SET_TOOLTIP_DELAY) {|event| onSetTooltipDelay(event) }
1024
- evt_menu(CONTROLS_ENABLE_TOOLTIPS) {|event| onToggleTooltips(event) }
1025
- evt_menu(CONTROLS_ENABLE_ALL) {|event| onenableAll(event) }
1026
-
1027
- evt_size() {|event| onSize(event) }
1028
- evt_move() {|event| onMove(event) }
1029
- evt_idle() {|event| onIdle(event) }
1030
- evt_close() {|event| onClose(event) }
1031
- end
1032
-
1033
- def onClose(event)
1034
- Log::set_active_target(@m_panel.m_logTargetOld)
1035
- destroy()
1036
- end
1037
-
1038
- def onQuit(event)
1039
- close(TRUE)
1040
- end
1041
-
1042
- def onAbout(event)
1043
- BusyCursor.busy do
1044
- dialog = MessageDialog.new(self, "This is a control sample", "About Controls", OK)
1045
- dialog.show_modal()
1046
- end
1047
- end
1048
-
1049
- def onClearLog(event)
1050
- @m_panel.m_text.clear()
1051
- end
1052
-
1053
- def onSetTooltipDelay(event)
1054
- delay = @s_delay.to_s
1055
-
1056
- delay = get_text_from_user("Enter delay (in milliseconds)",
1057
- "Set tooltip delay",
1058
- delay,
1059
- self)
1060
- if !delay
1061
- return Qnil # cancelled
1062
- end
1063
-
1064
- @s_delay = delay.to_i
1065
-
1066
- ToolTip::set_delay(@s_delay)
1067
-
1068
- log_status(self, "Tooltip delay set to %d milliseconds", @s_delay)
1069
- end
1070
-
1071
- def onToggleTooltips(event)
1072
- @s_enabled = ! @s_enabled
1073
- ToolTip::enable(@s_enabled)
1074
- log_status(self, "Tooltips %sabled", @s_enabled ? "en" : "dis" )
1075
- end
1076
-
1077
- def onenableAll(event)
1078
- @s_enable2 = ! @s_enable2
1079
- @m_panel.enable(@s_enable2)
1080
- end
1081
-
1082
- def onMove(event)
1083
- update_status_bar(event.get_position(), get_size())
1084
- event.skip()
1085
- end
1086
-
1087
- def onSize(event)
1088
- update_status_bar(get_position(), event.get_size())
1089
- event.skip()
1090
- end
1091
-
1092
- def onIdle(event)
1093
-
1094
- # track the window which has the focus in the status bar
1095
- focus = Window::find_focus()
1096
- if focus && (focus != @s_windowFocus)
1097
- @s_windowFocus = focus
1098
- msg = sprintf( "Focus: %s, HWND = %08x",
1099
- @s_windowFocus.wx_class,
1100
- @s_windowFocus.get_handle )
1101
- set_status_text(msg)
1102
- end
1103
- end
1104
-
1105
- def GetPanel()
1106
- @m_panel
1107
- end
1108
-
1109
- def update_status_bar(pos,size)
1110
- if get_status_bar()
1111
- sizeAll = get_size()
1112
- sizeCl = get_client_size()
1113
- msg = sprintf("pos=(%d, %d), size=%dx%d or %dx%d (client=%dx%d)",
1114
- pos.x, pos.y,
1115
- size.x, size.y,
1116
- sizeAll.x, sizeAll.y,
1117
- sizeCl.x, sizeCl.y)
1118
- set_status_text(msg, 1)
1119
- end
1120
- end
1121
-
1122
- end
1123
-
1124
- class MyApp < App
1125
- def on_init()
1126
- # parse the cmd line
1127
- x = 50
1128
- y = 50
1129
- # Create the main frame window
1130
- frame = MyFrame.new("Controls Windows App", x, y)
1131
- frame.show(TRUE)
1132
- end
1133
- end
1134
-
1135
- a = MyApp.new
1136
- a.main_loop
1
+ #!/usr/bin/env ruby
2
+ # wxRuby2 Sample Code. Copyright (c) 2004-2008 wxRuby development team
3
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
+ begin
5
+ require 'rubygems'
6
+ rescue LoadError
7
+ end
8
+ require 'wx'
9
+
10
+
11
+ include Wx
12
+
13
+ CONTROLS_QUIT = ID_EXIT
14
+ CONTROLS_TEXT = 101
15
+ CONTROLS_ABOUT = ID_ABOUT
16
+ CONTROLS_CLEAR_LOG = 103
17
+ # tooltip menu
18
+ CONTROLS_SET_TOOLTIP_DELAY = 200
19
+ CONTROLS_ENABLE_TOOLTIPS = 201
20
+ # panel menu
21
+ CONTROLS_ENABLE_ALL = 202
22
+
23
+
24
+ ID_NOTEBOOK = 1000
25
+
26
+ ID_LISTBOX = 130
27
+ ID_LISTBOX_SEL_NUM = 131
28
+ ID_LISTBOX_SEL_STR = 132
29
+ ID_LISTBOX_CLEAR = 133
30
+ ID_LISTBOX_APPEND = 134
31
+ ID_LISTBOX_DELETE = 135
32
+ ID_LISTBOX_FONT = 136
33
+ ID_LISTBOX_ENABLE = 137
34
+ ID_LISTBOX_SORTED = 138
35
+
36
+ ID_CHOICE = 120
37
+ ID_CHOICE_SEL_NUM = 121
38
+ ID_CHOICE_SEL_STR = 122
39
+ ID_CHOICE_CLEAR = 123
40
+ ID_CHOICE_APPEND = 124
41
+ ID_CHOICE_DELETE = 125
42
+ ID_CHOICE_FONT = 126
43
+ ID_CHOICE_ENABLE = 127
44
+ ID_CHOICE_SORTED = 128
45
+
46
+ ID_COMBO = 140
47
+ ID_COMBO_SEL_NUM = 141
48
+ ID_COMBO_SEL_STR = 142
49
+ ID_COMBO_CLEAR = 143
50
+ ID_COMBO_APPEND = 144
51
+ ID_COMBO_DELETE = 145
52
+ ID_COMBO_FONT = 146
53
+ ID_COMBO_ENABLE = 147
54
+
55
+ ID_RADIOBOX = 160
56
+ ID_RADIOBOX_SEL_NUM = 161
57
+ ID_RADIOBOX_SEL_STR = 162
58
+ ID_RADIOBOX_FONT = 163
59
+ ID_RADIOBOX_ENABLE = 164
60
+
61
+ ID_RADIOBUTTON_1 = 166
62
+ ID_RADIOBUTTON_2 = 167
63
+
64
+ ID_SET_FONT = 170
65
+
66
+ ID_GAUGE = 180
67
+ ID_SLIDER = 181
68
+
69
+ ID_SPIN = 182
70
+ ID_BTNPROGRESS = 183
71
+ ID_BUTTON_LABEL = 184
72
+ ID_SPINCTRL = 185
73
+
74
+ ID_BUTTON_TEST1 = 190
75
+ ID_BUTTON_TEST2 = 191
76
+ ID_BITMAP_BTN = 192
77
+
78
+ ID_CHANGE_COLOUR = 200
79
+
80
+ ID_SIZER_CHECK1 = 201
81
+ ID_SIZER_CHECK2 = 202
82
+ ID_SIZER_CHECK3 = 203
83
+ ID_SIZER_CHECK4 = 204
84
+ ID_SIZER_CHECK14 = 205
85
+ ID_SIZER_CHECKBIG = 206
86
+
87
+ Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max = (0..6).to_a
88
+
89
+
90
+ # a button which intercepts double clicks (for testing...)
91
+ class MyButton < Button
92
+ def initialize(parent,id,label = EmptyString,pos = DEFAULT_POSITION,size = DEFAULT_SIZE)
93
+ super(parent,id,label,pos,size)
94
+
95
+ evt_left_dclick {|event| onDClick(event)}
96
+ end
97
+
98
+ def onDClick(event)
99
+ log_message("MyButton::OnDClick")
100
+ event.skip()
101
+ end
102
+
103
+ end
104
+
105
+ # a combo which intercepts chars (to test Windows behaviour)
106
+ class MyComboBox < ComboBox
107
+ def initialize(parent,id,value = EmptyString,
108
+ pos = DEFAULT_POSITION,
109
+ size = DEFAULT_SIZE,
110
+ choices = [],
111
+ style = 0)
112
+ super(parent, id, value, pos, size, choices)#, style)
113
+
114
+ evt_char {|event| onChar(event)}
115
+ evt_key_down {|event| onKeyDown(event)}
116
+ evt_key_up {|event| onKeyUp(event)}
117
+
118
+ evt_set_focus {|event| onFocusGot(event)}
119
+ end
120
+
121
+ def onChar(event)
122
+ log_message("MyComboBox::OnChar")
123
+ if event.key_code() == ?w
124
+ log_message("MyComboBox: 'w' will be ignored.")
125
+ else
126
+ event.skip()
127
+ end
128
+ end
129
+
130
+ def onKeyDown(event)
131
+ log_message("MyComboBox::OnKeyDown")
132
+ if event.key_code() == ?w
133
+ log_message("MyComboBox: 'w' will be ignored.")
134
+ else
135
+ event.skip()
136
+ end
137
+ end
138
+
139
+ def onKeyUp(event)
140
+ #log_message("MyComboBox::OnKeyUp")
141
+ event.skip()
142
+ end
143
+
144
+ def onFocusGot(event)
145
+ #log_message("MyComboBox::OnFocusGot")
146
+ event.skip()
147
+ end
148
+
149
+ end
150
+
151
+ # a radiobox which handles focus set/kill (for testing)
152
+ class MyRadioBox < RadioBox
153
+ def initialize(parent,
154
+ id,title = EmptyString,
155
+ pos = DEFAULT_POSITION,
156
+ size = DEFAULT_SIZE,
157
+ choices = [],
158
+ majorDim = 1,
159
+ style = RA_HORIZONTAL)
160
+ super(parent, id, title, pos, size, choices, majorDim,style)
161
+ set_foreground_colour(RED)
162
+
163
+ evt_set_focus {|event| onFocusGot(event)}
164
+ evt_kill_focus {|event| onFocusLost(event)}
165
+
166
+ end
167
+
168
+ def onFocusGot(event)
169
+ log_message("MyRadioBox::OnFocusGot")
170
+ event.skip()
171
+ end
172
+
173
+ def onFocusLost(event)
174
+ log_message("MyRadioBox::OnFocusLost")
175
+ event.skip()
176
+ end
177
+
178
+ end
179
+
180
+
181
+ class MyPanel < Panel
182
+
183
+ # delete Log::set_active_target(@m_logTargetOld)
184
+ # delete @m_notebook.GetImageList()
185
+ attr_reader :m_text,:m_logTargetOld
186
+
187
+ def initialize(frame,x,y,w,h)
188
+ super( frame, -1, Point.new(x, y), Size.new(w, h) )
189
+
190
+ @s_colOld = NULL_COLOUR
191
+
192
+ @m_text = TextCtrl.new(self, -1, "This is the log window.\n",
193
+ Point.new(0, 250), Size.new(100, 50), TE_MULTILINE)
194
+ @m_text.set_background_colour(Colour.new("wheat"))
195
+
196
+ #@m_logTargetOld = Log::set_active_target(LogTextCtrl.new(@m_text))
197
+
198
+ @m_notebook = Wx::Notebook.new(self, ID_NOTEBOOK)
199
+
200
+ choices = [
201
+ "This",
202
+ "is one of my",
203
+ "really",
204
+ "wonderful",
205
+ "examples."
206
+ ]
207
+
208
+ # fill the image list
209
+
210
+ imagelist = ImageList.new(16, 16)
211
+
212
+ imagelist.add( Bitmap.new( local_icon_file("list.xpm"),
213
+ Wx::BITMAP_TYPE_XPM))
214
+ imagelist.add( Bitmap.new( local_icon_file("choice.xpm"),
215
+ Wx::BITMAP_TYPE_XPM))
216
+ imagelist.add( Bitmap.new( local_icon_file("combo.xpm"),
217
+ Wx::BITMAP_TYPE_XPM))
218
+ imagelist.add( Bitmap.new( local_icon_file("text.xpm"),
219
+ Wx::BITMAP_TYPE_XPM))
220
+ imagelist.add( Bitmap.new( local_icon_file("radio.xpm"),
221
+ Wx::BITMAP_TYPE_XPM))
222
+ imagelist.add( Bitmap.new( local_icon_file("gauge.xpm"),
223
+ Wx::BITMAP_TYPE_XPM))
224
+
225
+ @m_notebook.set_image_list(imagelist)
226
+
227
+ panel = Panel.new(@m_notebook)
228
+ @m_listbox = ListBox.new( panel, ID_LISTBOX,
229
+ Point.new(10,10), Size.new(120,70),
230
+ choices, LB_ALWAYS_SB )
231
+
232
+ @m_listboxSorted = ListBox.new( panel, ID_LISTBOX_SORTED,
233
+ Point.new(10,90), Size.new(120,70),
234
+ choices, LB_SORT )
235
+
236
+
237
+ @m_listbox.set_cursor(CROSS_CURSOR)
238
+
239
+ @m_listbox.set_tool_tip( "This is a list box" )
240
+
241
+
242
+ @m_lbSelectNum = Button.new( panel, ID_LISTBOX_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
243
+ @m_lbSelectThis = Button.new( panel, ID_LISTBOX_SEL_STR, "&Select 'This'", Point.new(340,30), Size.new(140,30) )
244
+ Button.new( panel, ID_LISTBOX_CLEAR, "&clear", Point.new(180,80), Size.new(140,30) )
245
+ MyButton.new( panel, ID_LISTBOX_APPEND, "&append 'Hi!'", Point.new(340,80), Size.new(140,30) )
246
+ Button.new( panel, ID_LISTBOX_DELETE, "D&elete selected item", Point.new(180,130), Size.new(140,30) )
247
+ button = MyButton.new( panel, ID_LISTBOX_FONT, "Set &Italic font", Point.new(340,130), Size.new(140,30) )
248
+
249
+ button.set_default()
250
+
251
+ button.set_foreground_colour(BLUE)
252
+
253
+ button.set_tool_tip( "Press here to set italic font" )
254
+
255
+ @m_checkbox = CheckBox.new( panel, ID_LISTBOX_ENABLE, "&Disable", Point.new(20,170) )
256
+ @m_checkbox.set_value(FALSE)
257
+ @m_checkbox.set_tool_tip( "Click here to disable the listbox" )
258
+ @m_toggle_color = CheckBox.new( panel, ID_CHANGE_COLOUR, "&Toggle colour",
259
+ Point.new(110,170) )
260
+ panel.set_cursor(Cursor.new(CURSOR_HAND))
261
+ @m_notebook.add_page(panel, "ListBox", TRUE, Image_List)
262
+
263
+ panel = Panel.new(@m_notebook)
264
+ @m_choice = Choice.new( panel, ID_CHOICE, Point.new(10,10), Size.new(120,-1), choices )
265
+ @m_choiceSorted = Choice.new( panel, ID_CHOICE_SORTED, Point.new(10,70), Size.new(120,-1),
266
+ choices, CB_SORT )
267
+
268
+ @m_choice.set_selection(2)
269
+ @m_choice.set_background_colour(Colour.new("red"))
270
+ Button.new( panel, ID_CHOICE_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
271
+ Button.new( panel, ID_CHOICE_SEL_STR, "&Select 'This'", Point.new(340,30), Size.new(140,30) )
272
+ Button.new( panel, ID_CHOICE_CLEAR, "&clear", Point.new(180,80), Size.new(140,30) )
273
+ Button.new( panel, ID_CHOICE_APPEND, "&append 'Hi!'", Point.new(340,80), Size.new(140,30) )
274
+ Button.new( panel, ID_CHOICE_DELETE, "D&elete selected item", Point.new(180,130), Size.new(140,30) )
275
+ Button.new( panel, ID_CHOICE_FONT, "Set &Italic font", Point.new(340,130), Size.new(140,30) )
276
+ CheckBox.new( panel, ID_CHOICE_ENABLE, "&Disable", Point.new(20,130), Size.new(140,30) )
277
+
278
+ @m_notebook.add_page(panel, "Choice", FALSE, Image_Choice)
279
+
280
+ panel = Panel.new(@m_notebook)
281
+ StaticBox.new( panel, -1, "&Box around combobox",
282
+ Point.new(5, 5), Size.new(150, 100))
283
+ @m_combo = MyComboBox.new( panel, ID_COMBO, "This",
284
+ Point.new(20,25), Size.new(120, -1),
285
+ choices,PROCESS_ENTER)
286
+ # CB_READONLY | PROCESS_ENTER)
287
+
288
+ @m_combo.set_tool_tip("This is a natural\ncombobox - can you believe me?")
289
+
290
+ Button.new( panel, ID_COMBO_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
291
+ Button.new( panel, ID_COMBO_SEL_STR, "&Select 'This'", Point.new(340,30), Size.new(140,30) )
292
+ Button.new( panel, ID_COMBO_CLEAR, "&clear", Point.new(180,80), Size.new(140,30) )
293
+ Button.new( panel, ID_COMBO_APPEND, "&append 'Hi!'", Point.new(340,80), Size.new(140,30) )
294
+ Button.new( panel, ID_COMBO_DELETE, "D&elete selected item", Point.new(180,130), Size.new(140,30) )
295
+ Button.new( panel, ID_COMBO_FONT, "Set &Italic font", Point.new(340,130), Size.new(140,30) )
296
+ CheckBox.new( panel, ID_COMBO_ENABLE, "&Disable", Point.new(20,130), Size.new(140,30) )
297
+ @m_notebook.add_page(panel, "ComboBox", FALSE, Image_Combo)
298
+
299
+ choices2 = ["First", "Second"]
300
+ # "Third",
301
+ #"Fourth", "Fifth", "Sixth",
302
+ #"Seventh", "Eighth", "Nineth", "Tenth" */
303
+
304
+ panel = Panel.new(@m_notebook)
305
+ MyRadioBox.new( panel, ID_RADIOBOX, "&That", Point.new(10,160), Size.new(-1,-1), choices2, 1, RA_SPECIFY_ROWS )
306
+ @m_radio = RadioBox.new( panel, ID_RADIOBOX, "T&his", Point.new(10,10), Size.new(-1,-1), choices, 1, RA_SPECIFY_COLS )
307
+ @m_radio.set_foreground_colour(RED)
308
+
309
+ @m_radio.set_tool_tip("Ever seen a radiobox?")
310
+
311
+ Button.new( panel, ID_RADIOBOX_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
312
+ Button.new( panel, ID_RADIOBOX_SEL_STR, "&Select 'This'", Point.new(180,80), Size.new(140,30) )
313
+ @m_fontButton = Button.new( panel, ID_SET_FONT, "Set &more Italic font", Point.new(340,30), Size.new(140,30) )
314
+ Button.new( panel, ID_RADIOBOX_FONT, "Set &Italic font", Point.new(340,80), Size.new(140,30) )
315
+ CheckBox.new( panel, ID_RADIOBOX_ENABLE, "&Disable", Point.new(340,130), DEFAULT_SIZE )
316
+ rb = RadioButton.new( panel, ID_RADIOBUTTON_1, "Radiobutton1", Point.new(210,170), DEFAULT_SIZE, RB_GROUP )
317
+ rb.set_value( FALSE )
318
+ RadioButton.new( panel, ID_RADIOBUTTON_2, "&Radiobutton2", Point.new(340,170), DEFAULT_SIZE )
319
+ @m_notebook.add_page(panel, "RadioBox", FALSE, Image_Radio)
320
+
321
+ panel = Panel.new(@m_notebook)
322
+ StaticBox.new( panel, -1, "&Gauge and Slider", Point.new(10,10), Size.new(222,130) )
323
+ @m_gauge = Gauge.new( panel, -1, 200, Point.new(18,50), Size.new(155, 30), GA_HORIZONTAL|NO_BORDER )
324
+ @m_gauge.set_background_colour(GREEN)
325
+ @m_gauge.set_foreground_colour(RED)
326
+ @m_gaugeVert = Gauge.new( panel, -1, 100,
327
+ Point.new(195,35), Size.new(30, 90),
328
+ GA_VERTICAL | GA_SMOOTH | NO_BORDER )
329
+ @m_slider = Slider.new( panel, ID_SLIDER, 0, 0, 200, Point.new(18,90), Size.new(155,-1),
330
+ SL_AUTOTICKS | SL_LABELS )
331
+ @m_slider.set_tick_freq(40, 0)
332
+ @m_slider.set_tool_tip("This is a sliding slider")
333
+
334
+ StaticBox.new( panel, -1, "&Explanation",
335
+ Point.new(230,10), Size.new(270,130),
336
+ ALIGN_CENTER )
337
+
338
+ StaticText.new( panel, -1,
339
+ "In order see the gauge (aka progress bar)\n"+
340
+ "control do something you have to drag the\n"+
341
+ "handle of the slider to the right.\n"+
342
+ "\n"+
343
+ "This is also supposed to demonstrate how\n"+
344
+ "to use static controls.\n",
345
+ Point.new(250,25),
346
+ Size.new(240, 110))
347
+ initialSpinValue = -5
348
+ s = initialSpinValue.to_s
349
+ @m_spintext = TextCtrl.new( panel, -1, s, Point.new(20,160), Size.new(80,-1) )
350
+ @m_spinbutton = SpinButton.new( panel, ID_SPIN, Point.new(103,160), Size.new(80, -1) )
351
+ @m_spinbutton.set_range(-40,30)
352
+ @m_spinbutton.set_value(initialSpinValue)
353
+
354
+ @m_btnProgress = Button.new( panel, ID_BTNPROGRESS, "&Show progress dialog",
355
+ Point.new(300, 160) )
356
+
357
+ @m_spinctrl = SpinCtrl.new( panel, ID_SPINCTRL, "", Point.new(200, 160), Size.new(80, -1) )
358
+ @m_spinctrl.set_range(10,30)
359
+ @m_spinctrl.set_value(15)
360
+
361
+ @m_notebook.add_page(panel, "Gauge", FALSE, Image_Gauge)
362
+
363
+ panel = Panel.new(@m_notebook)
364
+
365
+ icon = ArtProvider::get_icon(ART_INFORMATION)
366
+ StaticBitmap.new( panel, -1, icon, Point.new(10, 10) )
367
+
368
+ bitmap = Bitmap.new( 100, 100 )
369
+ bitmap.draw do | dc |
370
+ dc.clear()
371
+ dc.set_pen(GREEN_PEN)
372
+ dc.draw_ellipse(5, 5, 90, 90)
373
+ dc.draw_text("Bitmap", 30, 40)
374
+ end
375
+
376
+ BitmapButton.new(panel, ID_BITMAP_BTN, bitmap, Point.new(100, 20))
377
+
378
+ # test for masked bitmap display
379
+ bitmap = Bitmap.new( File.join(File.dirname(__FILE__), "test2.bmp"),
380
+ BITMAP_TYPE_BMP)
381
+ if bitmap.is_ok()
382
+ bitmap.set_mask(Mask.new(bitmap, BLUE))
383
+ StaticBitmap.new(panel, -1, bitmap, Point.new(300, 120))
384
+ end
385
+ # bmp1 = ArtProvider::get_bitmap(ART_INFORMATION)
386
+ # bmp2 = ArtProvider::get_bitmap(ART_WARNING)
387
+ # bmp3 = ArtProvider::get_bitmap(ART_QUESTION)
388
+ # bmpBtn = BitmapButton.new(panel, -1,
389
+ # bmp1,
390
+ # Point.new(30, 70))
391
+
392
+ # bmpBtn.set_bitmap_selected(bmp2)
393
+ # bmpBtn.set_bitmap_focus(bmp3)
394
+ ToggleButton.new(panel, ID_BUTTON_LABEL,
395
+ "&Toggle label", Point.new(250, 20))
396
+ @m_label = StaticText.new(panel, -1, "Label with some long text",
397
+ Point.new(250, 60), DEFAULT_SIZE,
398
+ ALIGN_RIGHT)
399
+ @m_label.set_foreground_colour(BLUE )
400
+
401
+ @m_notebook.add_page(panel, "BitmapXXX")
402
+
403
+ # sizer
404
+
405
+ panel = Panel.new(@m_notebook)
406
+ panel.set_auto_layout( TRUE )
407
+
408
+ sizer = BoxSizer.new( VERTICAL )
409
+
410
+ csizer =
411
+ StaticBoxSizer.new(StaticBox.new(panel, -1, "Show Buttons"),
412
+ HORIZONTAL )
413
+
414
+ check1 = CheckBox.new(panel, ID_SIZER_CHECK1, "1")
415
+ check1.set_value(TRUE)
416
+ csizer.add(check1)
417
+ check2 = CheckBox.new(panel, ID_SIZER_CHECK2, "2")
418
+ check2.set_value(TRUE)
419
+ csizer.add(check2)
420
+ check3 = CheckBox.new(panel, ID_SIZER_CHECK3, "3")
421
+ check3.set_value(TRUE)
422
+ csizer.add(check3)
423
+ check4 = CheckBox.new(panel, ID_SIZER_CHECK4, "4")
424
+ check4.set_value(TRUE)
425
+ csizer.add(check4)
426
+ check14 = CheckBox.new(panel, ID_SIZER_CHECK14, "1-4")
427
+ check14.set_value(TRUE)
428
+ csizer.add(check14)
429
+ checkBig = CheckBox.new(panel, ID_SIZER_CHECKBIG, "Big")
430
+ checkBig.set_value(TRUE)
431
+ csizer.add(checkBig)
432
+
433
+ sizer.add(csizer)
434
+
435
+ @m_hsizer = BoxSizer.new( HORIZONTAL )
436
+
437
+ @m_buttonSizer = BoxSizer.new(VERTICAL)
438
+
439
+ @m_sizerBtn1 = Button.new(panel, -1, "Test Button &1" )
440
+ @m_buttonSizer.add( @m_sizerBtn1, 0, ALL, 10 )
441
+ @m_sizerBtn2 = Button.new(panel, -1, "Test Button &2" )
442
+ @m_buttonSizer.add( @m_sizerBtn2, 0, ALL, 10 )
443
+ @m_sizerBtn3 = Button.new(panel, -1, "Test Button &3" )
444
+ @m_buttonSizer.add( @m_sizerBtn3, 0, ALL, 10 )
445
+ @m_sizerBtn4 = Button.new(panel, -1, "Test Button &4" )
446
+ @m_buttonSizer.add( @m_sizerBtn4, 0, ALL, 10 )
447
+
448
+ @m_hsizer.add(@m_buttonSizer)
449
+ @m_hsizer.add( 20,20, 1 )
450
+ @m_bigBtn = Button.new(panel, -1, "Multiline\nbutton" )
451
+ @m_hsizer.add( @m_bigBtn , 3, GROW|ALL, 10 )
452
+
453
+ sizer.add(@m_hsizer, 1, GROW)
454
+
455
+ panel.set_sizer( sizer )
456
+
457
+ @m_notebook.add_page(panel, "Sizer")
458
+
459
+ evt_size {|event| onSize(event) }
460
+ evt_notebook_page_changing(ID_NOTEBOOK) {|event| onPageChanging(event) }
461
+ evt_notebook_page_changed(ID_NOTEBOOK) {|event| onPageChanged(event) }
462
+ evt_listbox(ID_LISTBOX) {|event| onListBox(event) }
463
+ evt_listbox(ID_LISTBOX_SORTED) {|event| onListBox(event) }
464
+ evt_listbox_dclick(ID_LISTBOX) {|event| onListBoxDoubleClick(event) }
465
+ evt_button(ID_LISTBOX_SEL_NUM) {|event| onListBoxButtons(event) }
466
+ evt_button(ID_LISTBOX_SEL_STR) {|event| onListBoxButtons(event) }
467
+ evt_button(ID_LISTBOX_CLEAR) {|event| onListBoxButtons(event) }
468
+ evt_button(ID_LISTBOX_APPEND) {|event| onListBoxButtons(event) }
469
+ evt_button(ID_LISTBOX_DELETE) {|event| onListBoxButtons(event) }
470
+ evt_button(ID_LISTBOX_FONT) {|event| onListBoxButtons(event) }
471
+ evt_checkbox(ID_LISTBOX_ENABLE) {|event| onListBoxButtons(event) }
472
+ evt_choice(ID_CHOICE) {|event| onChoice(event) }
473
+ evt_choice(ID_CHOICE_SORTED) {|event| onChoice(event) }
474
+ evt_button(ID_CHOICE_SEL_NUM) {|event| onChoiceButtons(event) }
475
+ evt_button(ID_CHOICE_SEL_STR) {|event| onChoiceButtons(event) }
476
+ evt_button(ID_CHOICE_CLEAR) {|event| onChoiceButtons(event) }
477
+ evt_button(ID_CHOICE_APPEND) {|event| onChoiceButtons(event) }
478
+ evt_button(ID_CHOICE_DELETE) {|event| onChoiceButtons(event) }
479
+ evt_button(ID_CHOICE_FONT) {|event| onChoiceButtons(event) }
480
+ evt_checkbox(ID_CHOICE_ENABLE) {|event| onChoiceButtons(event) }
481
+ evt_combobox(ID_COMBO) {|event| onCombo(event) }
482
+ evt_text(ID_COMBO) {|event| onComboTextChanged(event) }
483
+ evt_text_enter(ID_COMBO) {|event| onComboTextEnter(event) }
484
+ evt_button(ID_COMBO_SEL_NUM) {|event| onComboButtons(event) }
485
+ evt_button(ID_COMBO_SEL_STR) {|event| onComboButtons(event) }
486
+ evt_button(ID_COMBO_CLEAR) {|event| onComboButtons(event) }
487
+ evt_button(ID_COMBO_APPEND) {|event| onComboButtons(event) }
488
+ evt_button(ID_COMBO_DELETE) {|event| onComboButtons(event) }
489
+ evt_button(ID_COMBO_FONT) {|event| onComboButtons(event) }
490
+ evt_checkbox(ID_COMBO_ENABLE) {|event| onComboButtons(event) }
491
+ evt_radiobox(ID_RADIOBOX) {|event| onRadio(event) }
492
+ evt_button(ID_RADIOBOX_SEL_NUM) {|event| onRadioButtons(event) }
493
+ evt_button(ID_RADIOBOX_SEL_STR) {|event| onRadioButtons(event) }
494
+ evt_button(ID_RADIOBOX_FONT) {|event| onRadioButtons(event) }
495
+ evt_checkbox(ID_RADIOBOX_ENABLE) {|event| onRadioButtons(event) }
496
+ evt_button(ID_SET_FONT) {|event| onSetFont(event) }
497
+ evt_slider(ID_SLIDER) {|event| onSliderupdate(event) }
498
+ evt_spin(ID_SPIN) {|event| onSpinupdate(event) }
499
+ evt_spin_up(ID_SPIN) {|event| onSpinUp(event) }
500
+ evt_spin_down(ID_SPIN) {|event| onSpinDown(event) }
501
+ evt_update_ui(ID_BTNPROGRESS) {|event| onupdateShowProgress(event) }
502
+ evt_button(ID_BTNPROGRESS) {|event| onShowProgress(event) }
503
+ evt_spinctrl(ID_SPINCTRL) {|event| onSpinCtrl(event) }
504
+ evt_spin_up(ID_SPINCTRL) {|event| onSpinCtrlUp(event) }
505
+ evt_spin_down(ID_SPINCTRL) {|event| onSpinCtrlDown(event) }
506
+ evt_text(ID_SPINCTRL) {|event| onSpinCtrlText(event) }
507
+ if (RUBY_PLATFORM =~ /mswin/)
508
+ evt_togglebutton(ID_BUTTON_LABEL) {|event| onupdateLabel(event) }
509
+ end
510
+ evt_checkbox(ID_CHANGE_COLOUR) {|event| onChangeColour(event) }
511
+ evt_button(ID_BUTTON_TEST1) {|event| onTestButton(event) }
512
+ evt_button(ID_BUTTON_TEST2) {|event| onTestButton(event) }
513
+ evt_button(ID_BITMAP_BTN) {|event| onBmpButton(event) }
514
+
515
+ evt_checkbox(ID_SIZER_CHECK1) {|event| onSizerCheck(event) }
516
+ evt_checkbox(ID_SIZER_CHECK2) {|event| onSizerCheck(event) }
517
+ evt_checkbox(ID_SIZER_CHECK3) {|event| onSizerCheck(event) }
518
+ evt_checkbox(ID_SIZER_CHECK4) {|event| onSizerCheck(event) }
519
+ evt_checkbox(ID_SIZER_CHECK14) {|event| onSizerCheck(event) }
520
+ evt_checkbox(ID_SIZER_CHECKBIG) {|event| onSizerCheck(event) }
521
+
522
+ end
523
+
524
+ # utility function to find an icon relative to this ruby script
525
+ def local_icon_file(icon_name)
526
+ File.join( File.dirname(__FILE__), 'icons', icon_name)
527
+ end
528
+
529
+
530
+ def onSize(event)
531
+ size = get_client_size()
532
+ x = size.get_width
533
+ y = size.get_height
534
+ if @m_notebook
535
+ @m_notebook.set_dimensions( 2, 2, x-4, y*2/3-4 )
536
+ end
537
+ if @m_text
538
+ @m_text.set_dimensions( 2, y*2/3+2, x-4, y/3-4 )
539
+ end
540
+ end
541
+
542
+ def onPageChanging(event)
543
+
544
+ selOld = event.get_old_selection()
545
+ if selOld == 2
546
+ if message_box("This demonstrates how a program may prevent the\n"+
547
+ "page change from taking place - if you select\n"+
548
+ "[No] the current page will stay the third one\n",
549
+ "Control sample",
550
+ ICON_QUESTION | YES_NO, self) != YES
551
+ event.veto()
552
+ return nil
553
+ end
554
+ end
555
+ @m_text << "Notebook selection is being changed from " << selOld \
556
+ << " to " << event.get_selection() \
557
+ << " (current page from notebook is " \
558
+ << @m_notebook.get_selection() << ")\n"
559
+ end
560
+
561
+ def onPageChanged(event)
562
+ @m_text << "Notebook selection is now " << event.get_selection() \
563
+ << " (from notebook: " << @m_notebook.get_selection() \
564
+ << ")\n"
565
+ end
566
+
567
+ def onTestButton(event)
568
+ log_message("Button %s clicked.",
569
+ event.get_id() == ID_BUTTON_TEST1 ? '1' : '2')
570
+ end
571
+
572
+ def onBmpButton(event)
573
+ log_message("Bitmap button clicked.")
574
+ end
575
+
576
+ def onChangeColour(event)
577
+ # test panel colour changing and propagation to the subcontrols
578
+ if @s_colOld.is_ok()
579
+
580
+ set_background_colour(@s_colOld)
581
+ @s_colOld = NULL_COLOUR
582
+
583
+ @m_lbSelectThis.set_foreground_colour(Colour.new("red"))
584
+ @m_lbSelectThis.set_background_colour(Colour.new("white"))
585
+ else
586
+ @s_colOld = Colour.new("red")
587
+ set_background_colour(Colour.new("white"))
588
+
589
+ @m_lbSelectThis.set_foreground_colour(Colour.new("white"))
590
+ @m_lbSelectThis.set_background_colour(Colour.new("red"))
591
+ end
592
+
593
+ @m_lbSelectThis.refresh()
594
+ refresh()
595
+ end
596
+
597
+ def onListBox(event)
598
+ # GetParent().Move(100, 100)
599
+ if event.get_int() == -1
600
+ @m_text.append_text( "ListBox has no selections anymore\n" )
601
+ return Qnil
602
+ end
603
+
604
+ listbox = (event.get_id() == ID_LISTBOX) ? @m_listbox : @m_listboxSorted
605
+
606
+ @m_text.append_text( "ListBox event selection string is: '" )
607
+ @m_text.append_text( event.get_string() )
608
+ @m_text.append_text( "'\n" )
609
+ @m_text.append_text( "ListBox control selection string is: '" )
610
+ @m_text.append_text( listbox.get_string_selection() )
611
+ @m_text.append_text( "'\n" )
612
+
613
+ # NOTE: get_client_data and set_client_data have been removed from wxRuby 0.4
614
+ # because they could cause crashes
615
+ # obj = event.get_client_data()
616
+ # @m_text.append_text( "ListBox event client data string is: '" )
617
+ # if obj
618
+ # @m_text.append_text( obj )
619
+ # else
620
+ # @m_text.append_text( "none" )
621
+ # end
622
+
623
+ # @m_text.append_text( "'\n" )
624
+ # @m_text.append_text( "ListBox control client data string is: '" )
625
+ # obj = listbox.get_client_data(listbox.get_selection())
626
+ # if obj
627
+ # @m_text.append_text( obj )
628
+ # else
629
+ # @m_text.append_text( "none" )
630
+ # end
631
+ # @m_text.append_text( "'\n" )
632
+ end
633
+
634
+ def onListBoxDoubleClick(event)
635
+ @m_text.append_text( "ListBox double click string is: " )
636
+ @m_text.append_text( event.get_string() )
637
+ @m_text.append_text( "\n" )
638
+ end
639
+
640
+ def onListBoxButtons(event)
641
+ case event.get_id()
642
+ when ID_LISTBOX_ENABLE
643
+ @m_text.append_text("Checkbox clicked.\n")
644
+ if event.get_int() != 0
645
+ @m_checkbox.set_tool_tip( "Click to enable listbox" )
646
+ @m_toggle_color.enable(false)
647
+ else
648
+ @m_checkbox.set_tool_tip( "Click to disable listbox" )
649
+ @m_toggle_color.enable(true)
650
+ end
651
+ @m_listbox.enable( event.get_int() == 0 )
652
+ @m_lbSelectThis.enable( event.get_int() == 0 )
653
+ @m_lbSelectNum.enable( event.get_int() == 0 )
654
+ @m_listboxSorted.enable( event.get_int() == 0 )
655
+ #w = Window::find_window_by_id(ID_CHANGE_COLOUR)
656
+ #if(w)
657
+ # w.enable( event.get_int() == 0 )
658
+ #else
659
+ # puts("Window ID_CHANGE_COLOR not found")
660
+ #end
661
+ when ID_LISTBOX_SEL_NUM
662
+ @m_listbox.set_selection( 2 )
663
+ @m_listboxSorted.set_selection( 2 )
664
+ @m_lbSelectThis.warp_pointer( 40, 14 )
665
+ when ID_LISTBOX_SEL_STR
666
+ @m_listbox.set_string_selection( "This" )
667
+ @m_listboxSorted.set_string_selection( "This" )
668
+ @m_lbSelectNum.warp_pointer( 40, 14 )
669
+ when ID_LISTBOX_CLEAR
670
+ @m_listbox.clear()
671
+ @m_listboxSorted.clear()
672
+ when ID_LISTBOX_APPEND
673
+ @m_listbox.append( "Hi!" )
674
+ @m_listboxSorted.append( "Hi!" )
675
+ when ID_LISTBOX_DELETE
676
+ idx = @m_listbox.get_selection()
677
+ if idx != NOT_FOUND
678
+ @m_listbox.delete( idx )
679
+ end
680
+ idx = @m_listboxSorted.get_selection()
681
+ if idx != NOT_FOUND
682
+ @m_listboxSorted.delete( idx )
683
+ end
684
+ when ID_LISTBOX_FONT
685
+ @m_listbox.set_font( ITALIC_FONT )
686
+ @m_listboxSorted.set_font( ITALIC_FONT )
687
+ @m_checkbox.set_font( ITALIC_FONT )
688
+ end
689
+ end
690
+
691
+
692
+ def onChoice(event)
693
+
694
+ choice = (event.get_id() == ID_CHOICE) ? @m_choice : @m_choiceSorted
695
+
696
+ @m_text.append_text( "Choice event selection string is: '" )
697
+ @m_text.append_text( event.get_string() )
698
+ @m_text.append_text( "'\n" )
699
+ @m_text.append_text( "Choice control selection string is: '" )
700
+ @m_text.append_text( choice.get_string_selection() )
701
+ @m_text.append_text( "'\n" )
702
+
703
+ # NOTE: get_client_data and set_client_data have been removed from wxRuby 0.4
704
+ # because they could cause crashes
705
+ # obj = event.get_client_data()
706
+ # @m_text.append_text( "Choice event client data string is: '" )
707
+
708
+ # if obj
709
+ # @m_text.append_text( obj )
710
+ # else
711
+ # @m_text.append_text( "none" )
712
+ # end
713
+
714
+ # @m_text.append_text( "'\n" )
715
+ # @m_text.append_text( "Choice control client data string is: '" )
716
+
717
+ # obj = choice.get_client_data(choice.get_selection())
718
+ # if obj
719
+ # @m_text.append_text( obj )
720
+ # else
721
+ # @m_text.append_text( "none" )
722
+ # end
723
+ # @m_text.append_text( "'\n" )
724
+ end
725
+
726
+ def onChoiceButtons(event)
727
+ case event.get_id()
728
+ when ID_CHOICE_ENABLE
729
+ @m_choice.enable( event.get_int() == 0 )
730
+ @m_choiceSorted.enable( event.get_int() == 0 )
731
+ when ID_CHOICE_SEL_NUM
732
+ @m_choice.set_selection( 2 )
733
+ @m_choiceSorted.set_selection( 2 )
734
+ when ID_CHOICE_SEL_STR
735
+ @m_choice.set_string_selection( "This" )
736
+ @m_choiceSorted.set_string_selection( "This" )
737
+ when ID_CHOICE_CLEAR
738
+ @m_choice.clear()
739
+ @m_choiceSorted.clear()
740
+ when ID_CHOICE_APPEND
741
+ @m_choice.append( "Hi!" )
742
+ @m_choiceSorted.append( "Hi!" )
743
+ when ID_CHOICE_DELETE
744
+ idx = @m_choice.get_selection()
745
+ if idx != NOT_FOUND
746
+ @m_choice.delete( idx )
747
+ end
748
+ idx = @m_choiceSorted.get_selection()
749
+ if idx != NOT_FOUND
750
+ @m_choiceSorted.delete( idx )
751
+ end
752
+ when ID_CHOICE_FONT
753
+ @m_choice.set_font( ITALIC_FONT )
754
+ @m_choiceSorted.set_font( ITALIC_FONT )
755
+ end
756
+ end
757
+
758
+ def onCombo(event)
759
+ @m_text.append_text( "ComboBox event selection string is: " )
760
+ @m_text.append_text( event.get_string() )
761
+ @m_text.append_text( "\n" )
762
+ @m_text.append_text( "ComboBox control selection string is: " )
763
+ @m_text.append_text( @m_combo.get_string_selection() )
764
+ @m_text.append_text( "\n" )
765
+ end
766
+
767
+ def onComboTextChanged(event)
768
+ str = sprintf( "Text in the combobox changed: now is '%s'.",
769
+ event.get_string())
770
+ log_message( str )
771
+ end
772
+
773
+ def onComboTextEnter(event)
774
+ log_message("Enter pressed in the combobox: value is '%s'.",
775
+ @m_combo.get_value())
776
+ end
777
+
778
+ def onComboButtons(event)
779
+ case event.get_id()
780
+ when ID_COMBO_ENABLE
781
+ @m_combo.enable( event.get_int() == 0 )
782
+ when ID_COMBO_SEL_NUM
783
+ @m_combo.set_selection( 2 )
784
+ when ID_COMBO_SEL_STR
785
+ @m_combo.set_string_selection( "This" )
786
+ when ID_COMBO_CLEAR
787
+ @m_combo.clear()
788
+ when ID_COMBO_APPEND
789
+ @m_combo.append( "Hi!" )
790
+ when ID_COMBO_DELETE
791
+ idx = @m_combo.get_selection()
792
+ @m_combo.delete( idx )
793
+ when ID_COMBO_FONT
794
+ @m_combo.set_font( ITALIC_FONT )
795
+ end
796
+ end
797
+
798
+ def onRadio(event)
799
+ @m_text.append_text( "RadioBox selection string is: " )
800
+ @m_text.append_text( event.get_string() )
801
+ @m_text.append_text( "\n" )
802
+ end
803
+
804
+ def onRadioButtons(event)
805
+ case event.get_id()
806
+ when ID_RADIOBOX_ENABLE
807
+ @m_radio.enable( event.get_int() == 0 )
808
+ when ID_RADIOBOX_SEL_NUM
809
+ @m_radio.set_selection( 2 )
810
+ when ID_RADIOBOX_SEL_STR
811
+ @m_radio.set_string_selection( "This" )
812
+ when ID_RADIOBOX_FONT
813
+ @m_radio.set_foreground_colour(GREEN)
814
+ @m_radio.set_font( ITALIC_FONT )
815
+ end
816
+ end
817
+
818
+ def onSetFont(event)
819
+ @m_fontButton.set_font( ITALIC_FONT )
820
+ @m_text.set_font( ITALIC_FONT )
821
+ end
822
+
823
+ def onupdateLabel(event)
824
+ @m_label.set_label(event.get_int() != 0 ? "Very very very very very long text." : "Shorter text.")
825
+ end
826
+
827
+ def onSliderupdate(event)
828
+ @m_gauge.set_value( @m_slider.get_value() )
829
+ @m_gaugeVert.set_value( @m_slider.get_value() / 2 )
830
+ end
831
+
832
+
833
+ def onSpinCtrlText(event)
834
+ if @m_spinctrl
835
+ s = sprintf( "Spin ctrl text changed: now %d (from event: %s)\n",
836
+ @m_spinctrl.get_value(), event.get_string() )
837
+ @m_text.append_text(s)
838
+ end
839
+ end
840
+
841
+ def onSpinCtrl(event)
842
+ if @m_spinctrl
843
+ s = sprintf( "Spin ctrl changed: now %d (from event: %d)\n",
844
+ @m_spinctrl.get_value(), event.get_int() )
845
+ @m_text.append_text(s)
846
+ end
847
+ end
848
+
849
+ def onSpinCtrlUp(event)
850
+ if @m_spinctrl
851
+ @m_text.append_text( sprintf(
852
+ "Spin up: %d (from event: %d)\n",
853
+ @m_spinctrl.get_value(), event.get_int() ) )
854
+ end
855
+ end
856
+
857
+ def onSpinCtrlDown(event)
858
+ if @m_spinctrl
859
+ @m_text.append_text( sprintf(
860
+ "Spin down: %d (from event: %d)\n",
861
+ @m_spinctrl.get_value(), event.get_int() ) )
862
+ end
863
+ end
864
+
865
+
866
+ def onSpinUp(event)
867
+ value = sprintf( "Spin control up: current = %d\n",
868
+ @m_spinbutton.get_value())
869
+
870
+ if event.get_position() > 17
871
+ value += "Preventing the spin button from going above 17.\n"
872
+ event.veto()
873
+ end
874
+
875
+ @m_text.append_text(value)
876
+ end
877
+
878
+ def onSpinDown(event)
879
+ value = sprintf( "Spin control down: current = %d\n",
880
+ @m_spinbutton.get_value())
881
+
882
+ if event.get_position() < -17
883
+ value += "Preventing the spin button from going below -17.\n"
884
+ event.veto()
885
+ end
886
+
887
+ @m_text.append_text(value)
888
+ end
889
+
890
+ def onSpinupdate(event)
891
+ value = sprintf( "%d", event.get_position() )
892
+ @m_spintext.set_value( value )
893
+
894
+ value = sprintf( "Spin control range: (%d, %d), current = %d\n",
895
+ @m_spinbutton.get_min(), @m_spinbutton.get_max(),
896
+ @m_spinbutton.get_value())
897
+
898
+ @m_text.append_text(value)
899
+ end
900
+
901
+ def onupdateShowProgress(event)
902
+ event.enable( @m_spinbutton.get_value() > 0 )
903
+ end
904
+
905
+ def onShowProgress(event)
906
+ max = @m_spinbutton.get_value()
907
+ if max <= 0
908
+ log_error("You must set positive range!")
909
+ return nil
910
+ end
911
+
912
+ dialog = ProgressDialog.new("Progress dialog example",
913
+ "An informative message",
914
+ max, # range
915
+ self, # parent
916
+ PD_CAN_ABORT |
917
+ PD_AUTO_HIDE |
918
+ PD_APP_MODAL |
919
+ PD_ELAPSED_TIME |
920
+ PD_ESTIMATED_TIME |
921
+ PD_REMAINING_TIME)
922
+
923
+ cont = TRUE
924
+ 0.upto(max) {|i|
925
+ break if !cont
926
+ sleep(1)
927
+ if i == max
928
+ cont = dialog.update(i, "That's all, folks!")
929
+ elsif i == max / 2
930
+ cont = dialog.update(i, "Only a half left (very long message)!")
931
+ else
932
+ cont = dialog.update(i)
933
+ end
934
+ }
935
+ dialog.destroy()
936
+ if !cont
937
+ @m_text << "Progress dialog aborted!\n"
938
+ else
939
+ @m_text << "Countdown from " << max << " finished.\n"
940
+ end
941
+ end
942
+
943
+ def onSizerCheck(event)
944
+ case event.get_id()
945
+ when ID_SIZER_CHECK1
946
+ @m_buttonSizer.show(@m_sizerBtn1, event.is_checked())
947
+ @m_buttonSizer.layout()
948
+ when ID_SIZER_CHECK2
949
+ @m_buttonSizer.show(@m_sizerBtn2, event.is_checked())
950
+ @m_buttonSizer.layout()
951
+ when ID_SIZER_CHECK3
952
+ @m_buttonSizer.show(@m_sizerBtn3, event.is_checked())
953
+ @m_buttonSizer.layout()
954
+ when ID_SIZER_CHECK4
955
+ @m_buttonSizer.show(@m_sizerBtn4, event.is_checked())
956
+ @m_buttonSizer.layout()
957
+ when ID_SIZER_CHECK14
958
+ @m_hsizer.show(@m_buttonSizer, event.is_checked())
959
+ @m_hsizer.layout()
960
+ when ID_SIZER_CHECKBIG
961
+ @m_hsizer.show(@m_bigBtn, event.is_checked())
962
+ @m_hsizer.layout()
963
+ end
964
+ end
965
+ end
966
+
967
+
968
+ class MyFrame < Frame
969
+ def initialize(title,x,y)
970
+ super(nil, -1, title, Point.new(x, y), Size.new(500, 430))
971
+
972
+ @s_delay = 5000
973
+ @s_enabled = TRUE
974
+ @s_enable2 = TRUE
975
+ @s_windowFocus = nil
976
+ mondrian_icon =
977
+ case Wx::PLATFORM
978
+ when "WXMSW"
979
+ Icon.new( File.join( File.dirname(__FILE__), "mondrian.ico"),
980
+ Wx::BITMAP_TYPE_ICO )
981
+ else
982
+ Icon.new( File.join( File.dirname(__FILE__), "mondrian.xpm"),
983
+ Wx::BITMAP_TYPE_XPM )
984
+ end
985
+
986
+ set_icon(mondrian_icon)
987
+
988
+ file_menu = Menu.new
989
+
990
+ file_menu.append(CONTROLS_CLEAR_LOG, "&clear log\tCtrl-L")
991
+ file_menu.append_separator()
992
+ file_menu.append(CONTROLS_ABOUT, "&About\tF1")
993
+ file_menu.append_separator()
994
+ file_menu.append(CONTROLS_QUIT, "E&xit\tAlt-X", "Quit controls sample")
995
+
996
+ menu_bar = MenuBar.new
997
+ menu_bar.append(file_menu, "&File")
998
+
999
+ tooltip_menu = Menu.new
1000
+ tooltip_menu.append(CONTROLS_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D")
1001
+ tooltip_menu.append_separator()
1002
+ tooltip_menu.append(CONTROLS_ENABLE_TOOLTIPS, "&Toggle tooltips\tCtrl-T",
1003
+ "enable/disable tooltips", ITEM_CHECK)
1004
+ tooltip_menu.check(CONTROLS_ENABLE_TOOLTIPS, TRUE)
1005
+ menu_bar.append(tooltip_menu, "&Tooltips")
1006
+
1007
+ panel_menu = Menu.new
1008
+ panel_menu.append(CONTROLS_ENABLE_ALL, "&Disable all\tCtrl-E",
1009
+ "enable/disable all panel controls", ITEM_CHECK)
1010
+ menu_bar.append(panel_menu, "&Panel")
1011
+
1012
+ set_menu_bar(menu_bar)
1013
+
1014
+ create_status_bar(2)
1015
+
1016
+ @m_panel = MyPanel.new( self, 10, 10, 300, 100 )
1017
+
1018
+ set_size_hints( 500, 425 )
1019
+
1020
+ evt_menu(CONTROLS_QUIT) {|event| onQuit(event) }
1021
+ evt_menu(CONTROLS_ABOUT) {|event| onAbout(event) }
1022
+ evt_menu(CONTROLS_CLEAR_LOG) {|event| onClearLog(event) }
1023
+ evt_menu(CONTROLS_SET_TOOLTIP_DELAY) {|event| onSetTooltipDelay(event) }
1024
+ evt_menu(CONTROLS_ENABLE_TOOLTIPS) {|event| onToggleTooltips(event) }
1025
+ evt_menu(CONTROLS_ENABLE_ALL) {|event| onenableAll(event) }
1026
+
1027
+ evt_size() {|event| onSize(event) }
1028
+ evt_move() {|event| onMove(event) }
1029
+ evt_idle() {|event| onIdle(event) }
1030
+ evt_close() {|event| onClose(event) }
1031
+ end
1032
+
1033
+ def onClose(event)
1034
+ Log::set_active_target(@m_panel.m_logTargetOld)
1035
+ destroy()
1036
+ end
1037
+
1038
+ def onQuit(event)
1039
+ close(TRUE)
1040
+ end
1041
+
1042
+ def onAbout(event)
1043
+ BusyCursor.busy do
1044
+ dialog = MessageDialog.new(self, "This is a control sample", "About Controls", OK)
1045
+ dialog.show_modal()
1046
+ end
1047
+ end
1048
+
1049
+ def onClearLog(event)
1050
+ @m_panel.m_text.clear()
1051
+ end
1052
+
1053
+ def onSetTooltipDelay(event)
1054
+ delay = @s_delay.to_s
1055
+
1056
+ delay = get_text_from_user("Enter delay (in milliseconds)",
1057
+ "Set tooltip delay",
1058
+ delay,
1059
+ self)
1060
+ if !delay
1061
+ return Qnil # cancelled
1062
+ end
1063
+
1064
+ @s_delay = delay.to_i
1065
+
1066
+ ToolTip::set_delay(@s_delay)
1067
+
1068
+ log_status(self, "Tooltip delay set to %d milliseconds", @s_delay)
1069
+ end
1070
+
1071
+ def onToggleTooltips(event)
1072
+ @s_enabled = ! @s_enabled
1073
+ ToolTip::enable(@s_enabled)
1074
+ log_status(self, "Tooltips %sabled", @s_enabled ? "en" : "dis" )
1075
+ end
1076
+
1077
+ def onenableAll(event)
1078
+ @s_enable2 = ! @s_enable2
1079
+ @m_panel.enable(@s_enable2)
1080
+ end
1081
+
1082
+ def onMove(event)
1083
+ update_status_bar(event.get_position(), get_size())
1084
+ event.skip()
1085
+ end
1086
+
1087
+ def onSize(event)
1088
+ update_status_bar(get_position(), event.get_size())
1089
+ event.skip()
1090
+ end
1091
+
1092
+ def onIdle(event)
1093
+
1094
+ # track the window which has the focus in the status bar
1095
+ focus = Window::find_focus()
1096
+ if focus && (focus != @s_windowFocus)
1097
+ @s_windowFocus = focus
1098
+ msg = sprintf( "Focus: %s, HWND = %08x",
1099
+ @s_windowFocus.wx_class,
1100
+ @s_windowFocus.get_handle )
1101
+ set_status_text(msg)
1102
+ end
1103
+ end
1104
+
1105
+ def GetPanel()
1106
+ @m_panel
1107
+ end
1108
+
1109
+ def update_status_bar(pos,size)
1110
+ if get_status_bar()
1111
+ sizeAll = get_size()
1112
+ sizeCl = get_client_size()
1113
+ msg = sprintf("pos=(%d, %d), size=%dx%d or %dx%d (client=%dx%d)",
1114
+ pos.x, pos.y,
1115
+ size.x, size.y,
1116
+ sizeAll.x, sizeAll.y,
1117
+ sizeCl.x, sizeCl.y)
1118
+ set_status_text(msg, 1)
1119
+ end
1120
+ end
1121
+
1122
+ end
1123
+
1124
+ class MyApp < App
1125
+ def on_init()
1126
+ # parse the cmd line
1127
+ x = 50
1128
+ y = 50
1129
+ # Create the main frame window
1130
+ frame = MyFrame.new("Controls Windows App", x, y)
1131
+ frame.show(TRUE)
1132
+ end
1133
+ end
1134
+
1135
+ a = MyApp.new
1136
+ a.main_loop