wxruby 1.9.0-powerpc-darwin8.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. data/lib/wx.rb +35 -0
  2. data/lib/wx/classes/app.rb +25 -0
  3. data/lib/wx/classes/artprovider.rb +31 -0
  4. data/lib/wx/classes/bitmap.rb +23 -0
  5. data/lib/wx/classes/choice.rb +4 -0
  6. data/lib/wx/classes/clientdc.rb +13 -0
  7. data/lib/wx/classes/colour.rb +47 -0
  8. data/lib/wx/classes/combobox.rb +4 -0
  9. data/lib/wx/classes/evthandler.rb +824 -0
  10. data/lib/wx/classes/font.rb +118 -0
  11. data/lib/wx/classes/grid.rb +130 -0
  12. data/lib/wx/classes/helpcontroller.rb +5 -0
  13. data/lib/wx/classes/htmlhelpcontroller.rb +5 -0
  14. data/lib/wx/classes/htmlwindow.rb +6 -0
  15. data/lib/wx/classes/icon.rb +14 -0
  16. data/lib/wx/classes/image.rb +14 -0
  17. data/lib/wx/classes/listbox.rb +4 -0
  18. data/lib/wx/classes/locale.rb +28 -0
  19. data/lib/wx/classes/object.rb +7 -0
  20. data/lib/wx/classes/paintdc.rb +12 -0
  21. data/lib/wx/classes/point.rb +5 -0
  22. data/lib/wx/classes/previewframe.rb +13 -0
  23. data/lib/wx/classes/rect.rb +5 -0
  24. data/lib/wx/classes/size.rb +5 -0
  25. data/lib/wx/classes/texturlevent.rb +6 -0
  26. data/lib/wx/classes/timer.rb +69 -0
  27. data/lib/wx/classes/window.rb +38 -0
  28. data/lib/wx/classes/xmlresource.rb +16 -0
  29. data/lib/wx/version.rb +3 -0
  30. data/lib/wxruby2.bundle +0 -0
  31. data/samples/SAMPLES-LICENSE.TXT +18 -0
  32. data/samples/aui/aui.rb +1352 -0
  33. data/samples/bigdemo/About.rbw +39 -0
  34. data/samples/bigdemo/ColorPanel.rbw +25 -0
  35. data/samples/bigdemo/GridSimple.rbw +80 -0
  36. data/samples/bigdemo/MDIDemo.rbw +59 -0
  37. data/samples/bigdemo/PopupMenu.rbw +151 -0
  38. data/samples/bigdemo/ShapedWindow.rbw +135 -0
  39. data/samples/bigdemo/Sizers.rbw +545 -0
  40. data/samples/bigdemo/bigdemo.rb +826 -0
  41. data/samples/bigdemo/demoTemplate.rbw +37 -0
  42. data/samples/bigdemo/helpfile.htb +0 -0
  43. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  44. data/samples/bigdemo/icons/Test 015.png +0 -0
  45. data/samples/bigdemo/icons/choice.bmp +0 -0
  46. data/samples/bigdemo/icons/choice.xpm +27 -0
  47. data/samples/bigdemo/icons/combo.bmp +0 -0
  48. data/samples/bigdemo/icons/combo.xpm +27 -0
  49. data/samples/bigdemo/icons/copy.xpm +25 -0
  50. data/samples/bigdemo/icons/cut.xpm +24 -0
  51. data/samples/bigdemo/icons/gauge.bmp +0 -0
  52. data/samples/bigdemo/icons/gauge.xpm +27 -0
  53. data/samples/bigdemo/icons/help.xpm +25 -0
  54. data/samples/bigdemo/icons/list.bmp +0 -0
  55. data/samples/bigdemo/icons/list.xpm +27 -0
  56. data/samples/bigdemo/icons/mondrian.ico +0 -0
  57. data/samples/bigdemo/icons/mondrian.xpm +44 -0
  58. data/samples/bigdemo/icons/new.xpm +24 -0
  59. data/samples/bigdemo/icons/ogl.ico +0 -0
  60. data/samples/bigdemo/icons/ogl.xpm +45 -0
  61. data/samples/bigdemo/icons/open.xpm +26 -0
  62. data/samples/bigdemo/icons/paste.bmp +0 -0
  63. data/samples/bigdemo/icons/paste.xpm +38 -0
  64. data/samples/bigdemo/icons/pointy.png +0 -0
  65. data/samples/bigdemo/icons/preview.xpm +26 -0
  66. data/samples/bigdemo/icons/print.xpm +26 -0
  67. data/samples/bigdemo/icons/radio.bmp +0 -0
  68. data/samples/bigdemo/icons/radio.xpm +27 -0
  69. data/samples/bigdemo/icons/robert.xpm +415 -0
  70. data/samples/bigdemo/icons/ruby.png +0 -0
  71. data/samples/bigdemo/icons/sashtest.ico +0 -0
  72. data/samples/bigdemo/icons/save.xpm +25 -0
  73. data/samples/bigdemo/icons/smiles.bmp +0 -0
  74. data/samples/bigdemo/icons/smiles.xpm +39 -0
  75. data/samples/bigdemo/icons/smiley.ico +0 -0
  76. data/samples/bigdemo/icons/smiley.xpm +42 -0
  77. data/samples/bigdemo/icons/stattext.xpm +24 -0
  78. data/samples/bigdemo/icons/test2.bmp +0 -0
  79. data/samples/bigdemo/icons/test2.png +0 -0
  80. data/samples/bigdemo/icons/test2.xpm +79 -0
  81. data/samples/bigdemo/icons/text.bmp +0 -0
  82. data/samples/bigdemo/icons/text.xpm +27 -0
  83. data/samples/bigdemo/icons/tog1.bmp +0 -0
  84. data/samples/bigdemo/icons/tog1.xpm +38 -0
  85. data/samples/bigdemo/icons/tog2.bmp +0 -0
  86. data/samples/bigdemo/icons/tog2.xpm +38 -0
  87. data/samples/bigdemo/icons/wxwin.ico +0 -0
  88. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  89. data/samples/bigdemo/icons/wxwin16x16.xpm +25 -0
  90. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  91. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  92. data/samples/bigdemo/run.rb +94 -0
  93. data/samples/bigdemo/tips.txt +7 -0
  94. data/samples/bigdemo/utils.rb +12 -0
  95. data/samples/bigdemo/wxArtProvider.rbw +285 -0
  96. data/samples/bigdemo/wxBitmapButton.rbw +64 -0
  97. data/samples/bigdemo/wxButton.rbw +66 -0
  98. data/samples/bigdemo/wxCalendarCtrl.rbw +72 -0
  99. data/samples/bigdemo/wxCheckBox.rbw +52 -0
  100. data/samples/bigdemo/wxCheckListBox.rbw +77 -0
  101. data/samples/bigdemo/wxChoice.rbw +49 -0
  102. data/samples/bigdemo/wxChoicebook.rbw +80 -0
  103. data/samples/bigdemo/wxColourDialog.rbw +34 -0
  104. data/samples/bigdemo/wxComboBox.rbw +79 -0
  105. data/samples/bigdemo/wxCursor.rbw +140 -0
  106. data/samples/bigdemo/wxDialog.rbw +92 -0
  107. data/samples/bigdemo/wxDirDialog.rbw +32 -0
  108. data/samples/bigdemo/wxDragImage.rbw +74 -0
  109. data/samples/bigdemo/wxFileDialog.rbw +39 -0
  110. data/samples/bigdemo/wxFileDialog_Save.rbw +38 -0
  111. data/samples/bigdemo/wxFindReplaceDialog.rbw +85 -0
  112. data/samples/bigdemo/wxFontDialog.rbw +176 -0
  113. data/samples/bigdemo/wxFrame.rbw +55 -0
  114. data/samples/bigdemo/wxGauge.rbw +73 -0
  115. data/samples/bigdemo/wxGenericDirCtrl.rbw +78 -0
  116. data/samples/bigdemo/wxGrid.rbw +68 -0
  117. data/samples/bigdemo/wxHtmlHelpController.rbw +57 -0
  118. data/samples/bigdemo/wxListBox.rbw +142 -0
  119. data/samples/bigdemo/wxListCtrl_virtual.rbw +109 -0
  120. data/samples/bigdemo/wxMDIWindows.rbw +52 -0
  121. data/samples/bigdemo/wxMenu.rbw +238 -0
  122. data/samples/bigdemo/wxMessageDialog.rbw +30 -0
  123. data/samples/bigdemo/wxMiniFrame.rbw +74 -0
  124. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +34 -0
  125. data/samples/bigdemo/wxNotebook.rbw +138 -0
  126. data/samples/bigdemo/wxProgressDialog.rbw +45 -0
  127. data/samples/bigdemo/wxRadioBox.rbw +74 -0
  128. data/samples/bigdemo/wxRadioButton.rbw +127 -0
  129. data/samples/bigdemo/wxSashWindow.rbw +155 -0
  130. data/samples/bigdemo/wxScrolledMessageDialog.rbw +59 -0
  131. data/samples/bigdemo/wxScrolledWindow.rbw +196 -0
  132. data/samples/bigdemo/wxSingleChoiceDialog.rbw +35 -0
  133. data/samples/bigdemo/wxSlider.rbw +44 -0
  134. data/samples/bigdemo/wxSpinButton.rbw +52 -0
  135. data/samples/bigdemo/wxSpinCtrl.rbw +53 -0
  136. data/samples/bigdemo/wxSplitterWindow.rbw +65 -0
  137. data/samples/bigdemo/wxStaticBitmap.rbw +53 -0
  138. data/samples/bigdemo/wxStaticText.rbw +57 -0
  139. data/samples/bigdemo/wxStatusBar.rbw +128 -0
  140. data/samples/bigdemo/wxTextCtrl.rbw +151 -0
  141. data/samples/bigdemo/wxTextEntryDialog.rbw +34 -0
  142. data/samples/bigdemo/wxToggleButton.rbw +51 -0
  143. data/samples/bigdemo/wxToolBar.rbw +133 -0
  144. data/samples/bigdemo/wxTreeCtrl.rbw +192 -0
  145. data/samples/calendar/calendar.rb +275 -0
  146. data/samples/caret/caret.rb +296 -0
  147. data/samples/caret/mondrian.xpm +44 -0
  148. data/samples/controls/controls.rb +1140 -0
  149. data/samples/controls/get_item_sample.rb +87 -0
  150. data/samples/controls/icons/choice.xpm +27 -0
  151. data/samples/controls/icons/combo.xpm +27 -0
  152. data/samples/controls/icons/gauge.xpm +27 -0
  153. data/samples/controls/icons/list.xpm +27 -0
  154. data/samples/controls/icons/radio.xpm +27 -0
  155. data/samples/controls/icons/stattext.xpm +24 -0
  156. data/samples/controls/icons/text.xpm +27 -0
  157. data/samples/controls/mondrian.ico +0 -0
  158. data/samples/controls/mondrian.xpm +44 -0
  159. data/samples/controls/test2.bmp +0 -0
  160. data/samples/dialogs/dialogs.rb +724 -0
  161. data/samples/dialogs/tips.txt +18 -0
  162. data/samples/etc/activation.rb +108 -0
  163. data/samples/etc/choice.rb +72 -0
  164. data/samples/etc/miniframe.rb +84 -0
  165. data/samples/etc/sash.rb +135 -0
  166. data/samples/etc/scrollwin.rb +116 -0
  167. data/samples/etc/system_settings.rb +258 -0
  168. data/samples/etc/wizard.rb +81 -0
  169. data/samples/grid/grid.rb +201 -0
  170. data/samples/html/html.rb +251 -0
  171. data/samples/images/Thumbs.db +0 -0
  172. data/samples/images/images.rb +48 -0
  173. data/samples/images/paperclip.png +0 -0
  174. data/samples/listbook/listbook.rb +183 -0
  175. data/samples/listbook/listbook.xrc +370 -0
  176. data/samples/mdi/mdi.rb +87 -0
  177. data/samples/minimal/minimal.rb +95 -0
  178. data/samples/minimal/mondrian.ico +0 -0
  179. data/samples/minimal/mondrian.xpm +44 -0
  180. data/samples/minimal/nothing.rb +46 -0
  181. data/samples/minimal/text.rb +35 -0
  182. data/samples/printing/mondrian.ico +0 -0
  183. data/samples/printing/mondrian.xpm +44 -0
  184. data/samples/printing/printing.rb +484 -0
  185. data/samples/text/mondrian.ico +0 -0
  186. data/samples/text/mondrian.xpm +44 -0
  187. data/samples/text/scintilla.rb +180 -0
  188. data/samples/text/textctrl.rb +124 -0
  189. data/samples/text/unicode.rb +238 -0
  190. data/samples/text/utf8.txt +15 -0
  191. data/samples/treectrl/icon1.xpm +79 -0
  192. data/samples/treectrl/icon2.xpm +53 -0
  193. data/samples/treectrl/icon3.xpm +79 -0
  194. data/samples/treectrl/icon4.xpm +43 -0
  195. data/samples/treectrl/icon5.xpm +79 -0
  196. data/samples/treectrl/treectrl.rb +1210 -0
  197. data/samples/xrc/samples.xrc +46 -0
  198. data/samples/xrc/xrc_sample.rb +107 -0
  199. metadata +264 -0
Binary file
@@ -0,0 +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
+ };
@@ -0,0 +1,180 @@
1
+ #!/usr/bin/env ruby
2
+ # wxRuby2 Sample Code. Copyright (c) 2004-2006 Kevin B. Smith
3
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
+
5
+ begin
6
+ require 'wx'
7
+ rescue LoadError => no_wx_err
8
+ begin
9
+ require 'rubygems'
10
+ require 'wx'
11
+ rescue LoadError
12
+ raise no_wx_err
13
+ end
14
+ end
15
+ include Wx
16
+
17
+
18
+ Minimal_Quit = 1
19
+ Minimal_About = ID_ABOUT
20
+ Toggle_Whitespace = 5000
21
+ Toggle_EOL = 5001
22
+
23
+ class MyFrame < Frame
24
+ def initialize(title,pos,size,style=DEFAULT_FRAME_STYLE)
25
+ super(nil,-1,title,pos,size,style)
26
+
27
+ if Wx::PLATFORM == "WXMSW"
28
+ set_icon(Icon.new("mondrian.ico",BITMAP_TYPE_ICO))
29
+ else
30
+ set_icon(Icon.new("mondrian.xpm",BITMAP_TYPE_XPM))
31
+ end
32
+
33
+ menuFile = Menu.new()
34
+ menuFile.append(Minimal_Quit, "E&xit\tAlt-X", "Quit this program")
35
+
36
+ menuView = Menu.new()
37
+ menuView.append(Toggle_Whitespace, "Show &Whitespace\tF6", "Show Whitespace", ITEM_CHECK)
38
+ menuView.append(Toggle_EOL, "Show &End of Line\tF7", "Show End of Line characters", ITEM_CHECK)
39
+
40
+ menuHelp = Menu.new()
41
+ menuHelp.append(Minimal_About, "&About...\tF1", "Show about dialog")
42
+
43
+ menuBar = MenuBar.new()
44
+ menuBar.append(menuFile, "&File")
45
+ menuBar.append(menuView, "&View")
46
+ menuBar.append(menuHelp, "&Help")
47
+ set_menu_bar(menuBar)
48
+
49
+ tb = create_tool_bar(Wx::TB_HORIZONTAL | Wx::NO_BORDER | Wx::TB_FLAT | Wx::TB_TEXT)
50
+
51
+ create_status_bar(2)
52
+ set_status_text("Welcome to wxRuby!")
53
+
54
+ @sci = Wx::Scintilla.new(self)
55
+
56
+ font = Font.new(10, TELETYPE, NORMAL, NORMAL)
57
+ @sci.style_set_font(SCI_STYLE_DEFAULT, font);
58
+
59
+ @ws_visible = false
60
+ @eol_visible = false
61
+ @sci.set_edge_mode(SCI_EDGE_LINE)
62
+
63
+ line_num_margin = @sci.text_width(SCI_STYLE_LINENUMBER, "_99999")
64
+ @sci.set_margin_width(0, line_num_margin)
65
+
66
+ @sci.style_set_foreground(SCI_STYLE_DEFAULT, BLACK);
67
+ @sci.style_set_background(SCI_STYLE_DEFAULT, WHITE);
68
+ @sci.style_set_foreground(SCI_STYLE_LINENUMBER, LIGHT_GREY);
69
+ @sci.style_set_background(SCI_STYLE_LINENUMBER, WHITE);
70
+ @sci.style_set_foreground(SCI_STYLE_INDENTGUIDE, LIGHT_GREY);
71
+
72
+ @sci.set_tab_width(4)
73
+ @sci.set_use_tabs(false)
74
+ @sci.set_tab_indents(true)
75
+ @sci.set_back_space_un_indents(true)
76
+ @sci.set_indent(4)
77
+ @sci.set_edge_column(80)
78
+
79
+ @sci.set_lexer(SCI_LEX_RUBY)
80
+ @sci.style_clear_all
81
+ @sci.style_set_foreground(2, RED)
82
+ @sci.style_set_foreground(3, GREEN)
83
+ @sci.style_set_foreground(5, BLUE)
84
+ @sci.style_set_foreground(6, BLUE)
85
+ @sci.style_set_foreground(7, BLUE)
86
+ @sci.set_key_words(0, "begin break elsif module retry unless end case next return until class ensure nil self when def false not super while alias defined? for or then yield and do if redo true else in rescue undef")
87
+
88
+ @sci.set_property("fold","1")
89
+ @sci.set_property("fold.compact", "0")
90
+ @sci.set_property("fold.comment", "1")
91
+ @sci.set_property("fold.preprocessor", "1")
92
+
93
+ @sci.set_margin_width(1, 0)
94
+ @sci.set_margin_type(1, SCI_MARGIN_SYMBOL)
95
+ @sci.set_margin_mask(1, SCI_MASK_FOLDERS)
96
+ @sci.set_margin_width(1, 20)
97
+
98
+ @sci.marker_define(SCI_MARKNUM_FOLDER, SCI_MARK_PLUS)
99
+ @sci.marker_define(SCI_MARKNUM_FOLDEROPEN, SCI_MARK_MINUS)
100
+ @sci.marker_define(SCI_MARKNUM_FOLDEREND, SCI_MARK_EMPTY)
101
+ @sci.marker_define(SCI_MARKNUM_FOLDERMIDTAIL, SCI_MARK_EMPTY)
102
+ @sci.marker_define(SCI_MARKNUM_FOLDEROPENMID, SCI_MARK_EMPTY)
103
+ @sci.marker_define(SCI_MARKNUM_FOLDERSUB, SCI_MARK_EMPTY)
104
+ @sci.marker_define(SCI_MARKNUM_FOLDERTAIL, SCI_MARK_EMPTY)
105
+ @sci.set_fold_flags(16)
106
+
107
+ @sci.set_margin_sensitive(1,1)
108
+
109
+ evt_menu(Minimal_Quit) {onQuit}
110
+ evt_menu(Minimal_About) {onAbout}
111
+ evt_menu(Toggle_Whitespace) {onWhitespace}
112
+ evt_menu(Toggle_EOL) {onEOL}
113
+ evt_sci_charadded {|evt| onCharadded(evt)}
114
+ evt_sci_marginclick {|evt| onMarginClick(evt)}
115
+
116
+ end
117
+
118
+ def onQuit
119
+ close(TRUE)
120
+ end
121
+
122
+ def onAbout
123
+ GC.start
124
+ msg = sprintf("This is the About dialog of the scintilla sample.\n" \
125
+ "Welcome to %s", VERSION_STRING)
126
+
127
+ message_box(msg, "About Scintilla", OK | ICON_INFORMATION, self)
128
+
129
+ end
130
+
131
+ def onWhitespace
132
+ @ws_visible = !@ws_visible
133
+ @sci.set_view_white_space(@ws_visible ? SCI_WS_VISIBLEALWAYS : SCI_WS_INVISIBLE)
134
+ end
135
+
136
+ def onEOL
137
+ @eol_visible = !@eol_visible
138
+ @sci.set_view_eol(@eol_visible)
139
+ end
140
+
141
+ def onCharadded(evt)
142
+ chr = evt.get_key
143
+ curr_line = @sci.get_current_line
144
+
145
+ if(chr == 13)
146
+ if curr_line > 0
147
+ line_ind = @sci.get_line_indentation(curr_line - 1)
148
+ if line_ind > 0
149
+ @sci.set_line_indentation(curr_line, line_ind)
150
+ @sci.goto_pos(@sci.position_from_line(curr_line)+line_ind)
151
+ end
152
+ end
153
+ end
154
+ end
155
+
156
+ def onMarginClick(evt)
157
+ line_num = @sci.line_from_position(evt.get_position)
158
+ margin = evt.get_margin
159
+
160
+ if(margin == 1)
161
+ @sci.toggle_fold(line_num)
162
+ end
163
+ end
164
+
165
+ end
166
+
167
+ class RbApp < App
168
+ def on_init
169
+ frame = MyFrame.new("wxRuby Scintilla App",Point.new(50, 50), Size.new(450, 340))
170
+
171
+ frame.show(TRUE)
172
+
173
+ end
174
+ end
175
+
176
+ a = RbApp.new
177
+ a.main_loop()
178
+ puts("back from main_loop...")
179
+ GC.start
180
+ puts("survived gc")
@@ -0,0 +1,124 @@
1
+ #!/usr/bin/env ruby
2
+ # wxRuby2 Sample Code. Copyright (c) 2004-2006 Kevin B. Smith
3
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
+
5
+ begin
6
+ require 'wx'
7
+ rescue LoadError => no_wx_err
8
+ begin
9
+ require 'rubygems'
10
+ require 'wx'
11
+ rescue LoadError
12
+ raise no_wx_err
13
+ end
14
+ end
15
+
16
+ class InformativeTextCtrl < Wx::TextCtrl
17
+ NEWLINE_CORRECTION_FACTOR = 0
18
+
19
+ # These text controls are multiline, and may have rich (coloured,
20
+ # styled) text in them
21
+ STYLE = Wx::TE_MULTILINE|Wx::TE_RICH|Wx::TE_RICH2
22
+ def initialize(parent, text)
23
+ super(parent, -1, text, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, STYLE)
24
+ end
25
+
26
+ # more ruby-ish
27
+ alias :<< :append_text
28
+
29
+ # run through a few useful methods of textctrl and report the results
30
+ # as a string
31
+ def report()
32
+ report = ''
33
+ report << 'Insertion Point: ' << get_insertion_point.to_s() << "\n"
34
+ report << 'First Line Text: ' << get_line_text(0) << "\n"
35
+ report << 'Final Position: ' << get_last_position().to_s() << "\n"
36
+ report << 'Selection: ' << get_selection().inspect() << "\n"
37
+ report << 'String Selection: ' << get_string_selection().inspect << "\n"
38
+ report << 'Position to X, Y: ' <<
39
+ position_to_xy( get_insertion_point ).inspect
40
+ return report
41
+ end
42
+ end
43
+
44
+ # A read-only text ctrl useful for displaying output
45
+ class LogTextCtrl < Wx::TextCtrl
46
+ STYLE = Wx::TE_READONLY|Wx::TE_MULTILINE
47
+ def initialize(parent)
48
+ super(parent, -1, '', Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, STYLE)
49
+ end
50
+ end
51
+
52
+ class TextCtrlFrame < Wx::Frame
53
+ def initialize(title, pos, size)
54
+ super(nil, -1, title, pos, size)
55
+
56
+ panel = Wx::Panel.new(self, -1)
57
+ sizer = Wx::BoxSizer.new(Wx::VERTICAL)
58
+
59
+ @textctrl = InformativeTextCtrl.new(panel, '')
60
+ populate_textctrl()
61
+ sizer.add(@textctrl, 2, Wx::GROW|Wx::ALL, 2)
62
+
63
+ button = Wx::Button.new(panel, -1, 'Get Info')
64
+ sizer.add(button, 0, Wx::ADJUST_MINSIZE|Wx::ALL, 2 )
65
+ evt_button(button.get_id) { | e | on_click(e) }
66
+
67
+ @log = LogTextCtrl.new(panel)
68
+ sizer.add(@log, 1, Wx::GROW|Wx::ALL, 2)
69
+
70
+ panel.set_sizer( sizer )
71
+ end
72
+
73
+ def populate_textctrl()
74
+ @textctrl << "This is some plain text\n"
75
+ @textctrl << "Text with green letters and yellow background\n"
76
+ @textctrl << "This is some more plain text"
77
+ # create a new rich text style
78
+ attr = Wx::TextAttr.new(Wx::GREEN, Wx::Colour.new(255, 255, 0) )
79
+ # apply the style from character 26 to character 76
80
+ @textctrl.set_style(24, 69, attr)
81
+ end
82
+
83
+ def construct_menus()
84
+ menu_bar = Wx::MenuBar.new()
85
+
86
+ menu_file = Wx::Menu.new()
87
+ menu_file.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit this program")
88
+ menu_bar.append(menu_file, "&File")
89
+ evt_menu(Wx::ID_EXIT) { on_quit() }
90
+
91
+ menu_help = Wx::Menu.new()
92
+ menu_help.append(Wx::ID_ABOUT, "&About...\tF1", "Show about dialog")
93
+ evt_menu(Wx::ID_ABOUT) { on_about() }
94
+ menu_bar.append(menu_help, "&Help")
95
+
96
+ set_menu_bar(menu_bar)
97
+ end
98
+
99
+ def on_click(e)
100
+ @log.set_value( @textctrl.report() )
101
+ end
102
+
103
+ def on_quit()
104
+ close(TRUE)
105
+ end
106
+
107
+ def on_about()
108
+ msg = sprintf("This is the About dialog of the textctrl sample.\n" \
109
+ "Welcome to %s", Wx::VERSION_STRING)
110
+ message_box(msg, "About Minimal", Wx::OK|Wx::ICON_INFORMATION, self)
111
+ end
112
+ end
113
+
114
+ class RbApp < Wx::App
115
+ def on_init()
116
+ frame = TextCtrlFrame.new("TextCtrl demonstration",
117
+ Wx::Point.new(50, 50),
118
+ Wx::Size.new(450, 340) )
119
+
120
+ frame.show(true)
121
+ end
122
+ end
123
+
124
+ RbApp.new().main_loop()
@@ -0,0 +1,238 @@
1
+ # wxRuby2 Sample Code. Copyright (c) 2004-2006 Kevin B. Smith
2
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
3
+
4
+ # Tell ruby this script is written in UTF-8 encoded text.
5
+ $KCODE = 'u'
6
+
7
+ # Library to get character lengths (as opposed to byte lengths) from
8
+ # Ruby strings.
9
+ require 'jcode'
10
+
11
+ require 'wx'
12
+
13
+ $utf8_file = File.join( File.dirname(__FILE__), 'utf8.txt')
14
+
15
+ class UnicodeDemoTextCtrl < Wx::TextCtrl
16
+ NEWLINE_CORRECTION_FACTOR = 0
17
+
18
+ DEFAULT_TEXT = "If you have a unicode version of wxruby, you should be able to see a range of characters from different languages displayed, and be able to type multilingual strings in the text area. Note that some scripts may only be displayed if you are using a suitable font; otherwise characters will appear as blank boxes.
19
+
20
+ " << File.read( $utf8_file )
21
+
22
+ def initialize(parent, text = DEFAULT_TEXT)
23
+ super(parent, -1, text,
24
+ Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TE_MULTILINE)
25
+ end
26
+
27
+ # run through a few useful methods of textctrl and report the results
28
+ # as a string
29
+ def report()
30
+ report = ''
31
+ sel = get_string_selection()
32
+ report << 'Selected string byte length: ' << sel.length.to_s << "\n"
33
+ report << 'Selected string character length: ' << sel.jlength.to_s << "\n"
34
+ report << 'Selected string:: ' << sel.inspect << "\n"
35
+ return report
36
+ end
37
+ end
38
+
39
+ # A read-only text ctrl useful for displaying output
40
+ class LogTextCtrl < Wx::TextCtrl
41
+ STYLE = Wx::TE_READONLY|Wx::TE_MULTILINE
42
+ def initialize(parent)
43
+ super(parent, -1, '', Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, STYLE)
44
+ end
45
+ end
46
+
47
+ class IConvFrame < Wx::Frame
48
+ # Ruby stdlib for converting strings between encodings
49
+ begin
50
+ require 'iconv'
51
+ ICONV_LOADED = 1
52
+ rescue LoadError
53
+ end
54
+
55
+ # The encodings we're going to make importable and exportable in this
56
+ # application - see construct_import_export_menus below
57
+ ENCODINGS = { 'US ASCII' => 'ASCII',
58
+ 'UTF-8' => 'UTF-8',
59
+ 'UTF-16' => 'UTF-16',
60
+ 'Windows Latin CP1252' => 'CP1252',
61
+ 'Latin ISO-8859-1' => 'ISO-8859-1',
62
+ 'Japanese SHIFT-JIS' => 'SHIFT-JIS' }
63
+
64
+ def initialize(title, pos, size)
65
+ super(nil, -1, title, pos, size)
66
+ panel = Wx::Panel.new(self)
67
+ sizer = Wx::BoxSizer.new(Wx::VERTICAL)
68
+
69
+ sys_lang = Wx::Locale.get_system_language_name
70
+ text = Wx::StaticText.new(panel, -1, "System language: #{sys_lang}")
71
+ sizer.add(text, 0, Wx::ALL, 5)
72
+
73
+ sys_enc = Wx::Locale.get_system_encoding_name
74
+ text = Wx::StaticText.new(panel, -1, "System default encoding: #{sys_enc}")
75
+ sizer.add(text, 0, Wx::ALL, 5)
76
+
77
+ # The text input and display
78
+ @textctrl = UnicodeDemoTextCtrl.new(panel)
79
+ sizer.add(@textctrl, 3, Wx::GROW|Wx::ALL, 2)
80
+
81
+ # The button to show what's selected
82
+ button = Wx::Button.new(panel, -1, 'Describe text selection')
83
+ sizer.add(button, 0, Wx::ADJUST_MINSIZE|Wx::ALL, 2 )
84
+ evt_button(button.get_id) { | e | on_click(e) }
85
+
86
+ @log = LogTextCtrl.new(panel)
87
+ sizer.add(@log, 1, Wx::GROW|Wx::ALL, 2)
88
+ sizer.add( Wx::StaticText.new(panel, -1, 'Some controls with unicode'),
89
+ 0, Wx::ADJUST_MINSIZE|Wx::ALL, 2 )
90
+ ctrl_sizer = Wx::BoxSizer.new(Wx::HORIZONTAL)
91
+
92
+ test_button = Wx::Button.new(panel, -1, '万')
93
+ ctrl_sizer.add(test_button, 0, Wx::ADJUST_MINSIZE|Wx::ALL, 2)
94
+ choice = Wx::Choice.new(panel, -1, Wx::DEFAULT_POSITION,
95
+ Wx::DEFAULT_SIZE, [])
96
+ File.readlines($utf8_file).each do | line |
97
+ next if line.chomp.empty?
98
+ choice.append(line.chomp)
99
+ end
100
+ choice.set_selection(0)
101
+ ctrl_sizer.add(choice, 0, Wx::ADJUST_MINSIZE|Wx::ALL, 2)
102
+
103
+ sizer.add(ctrl_sizer, 0, Wx::ADJUST_MINSIZE|Wx::ALL, 2)
104
+ construct_menus()
105
+ panel.set_sizer( sizer )
106
+ end
107
+
108
+ # Prompt the user to specify a file whose contents should be loaded
109
+ # into the text ctrl. The file should be encoded in +encoding+
110
+ def on_import_file(encoding)
111
+ fd = Wx::FileDialog.new( nil, 'Import file', "", "",
112
+ "*.*", Wx::OPEN|Wx::FILE_MUST_EXIST )
113
+ return unless fd.show_modal() == Wx::ID_OK
114
+ File.open( fd.get_path ) do | file |
115
+ import_file( file, encoding )
116
+ end
117
+ rescue Iconv::IllegalSequence
118
+ message = "The file %s does not seem to be in %s encoding " %
119
+ [ fd.get_filename, encoding ]
120
+ Wx::MessageDialog.new(self, message, 'Wrong encoding',
121
+ Wx::OK|Wx::ICON_EXCLAMATION).show_modal()
122
+ end
123
+
124
+ # Read +io+, which should be text file encoding in +source_encoding+,
125
+ # and display the contents in the textctrl.
126
+ def import_file(io, source_encoding = 'UTF-8')
127
+ case source_encoding
128
+ when /UTF-?8/
129
+ @textctrl.set_value( io.read() )
130
+ else
131
+ output = ''
132
+ Iconv.open('UTF-8', source_encoding) do | converter |
133
+ output << converter.iconv( io.read() )
134
+ output << converter.iconv(nil)
135
+ end
136
+ @textctrl.set_value( output )
137
+ end
138
+ end
139
+
140
+ # Ask the user for a file path, and then export the content of the
141
+ # textctrl to it in the encoding +encoding+
142
+ def on_export_file(encoding)
143
+ fd = Wx::FileDialog.new( nil, 'Export file', "", "",
144
+ "*.*", Wx::SAVE|Wx::OVERWRITE_PROMPT )
145
+ return unless fd.show_modal() == Wx::ID_OK
146
+ File.open( fd.get_path, 'w' ) do | file |
147
+ export_file( file, encoding )
148
+ end
149
+ rescue Iconv::IllegalSequence
150
+ message = "The text content containts characters that " <<
151
+ "cannot be encoded using %s" % encoding
152
+ Wx::MessageDialog.new(self, message, 'Invalid encoding',
153
+ Wx::OK|Wx::ICON_EXCLAMATION).show_modal()
154
+ end
155
+
156
+ # Write the content of the textctrl to the file or io +io+, encoding
157
+ # the text in encoding +target_encoding+
158
+ def export_file(io, target_encoding = 'utf-8')
159
+ case target_encoding
160
+ when /UTF-?8/
161
+ io.write( @textctrl.get_value )
162
+ else
163
+ Iconv.open(target_encoding, 'UTF-8') do | converter |
164
+ io << converter.iconv( @textctrl.get_value )
165
+ io << converter.iconv(nil)
166
+ end
167
+ end
168
+ end
169
+
170
+ def construct_menus()
171
+ menu_bar = Wx::MenuBar.new()
172
+
173
+ menu_file = Wx::Menu.new()
174
+ menu_file.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit this program")
175
+ evt_menu(Wx::ID_EXIT) { on_quit() }
176
+ menu_bar.append(menu_file, "&File")
177
+ if self.class.const_defined?(:ICONV_LOADED)
178
+ construct_import_export_menus(menu_bar)
179
+ end
180
+
181
+ menu_help = Wx::Menu.new()
182
+ menu_help.append(Wx::ID_ABOUT, "&About...\tF1", "Show about dialog")
183
+ evt_menu(Wx::ID_ABOUT) { on_about() }
184
+ menu_bar.append(menu_help, "&Help")
185
+
186
+ set_menu_bar(menu_bar)
187
+ end
188
+
189
+ def construct_import_export_menus(menu_bar)
190
+ id_counter = 0
191
+ menu_import = Wx::Menu.new()
192
+
193
+ ENCODINGS.each do | desc, enc |
194
+ id_counter += 1
195
+ menu_import.append(id_counter, "Import (#{desc})",
196
+ "Import a file in #{desc} encoding")
197
+
198
+ evt_menu(id_counter) { on_import_file(enc) }
199
+ end
200
+ menu_bar.append(menu_import, '&Import')
201
+
202
+ menu_export = Wx::Menu.new()
203
+ ENCODINGS.each do | desc, enc |
204
+ id_counter += 1
205
+ menu_export.append(id_counter, "Export (#{desc})",
206
+ "Export a file in #{desc} encoding")
207
+
208
+ evt_menu(id_counter) { on_export_file(enc) }
209
+ end
210
+ menu_bar.append(menu_export, '&Export')
211
+ end
212
+
213
+ def on_click(e)
214
+ @log.set_value( @textctrl.report() )
215
+ end
216
+
217
+ def on_quit()
218
+ close(TRUE)
219
+ end
220
+
221
+ def on_about()
222
+ msg = sprintf("This is the About dialog of the Unicode sample.\n" \
223
+ "Welcome to %s", Wx::VERSION_STRING)
224
+ Wx::message_box(msg, "About Minimal", Wx::OK|Wx::ICON_INFORMATION, self)
225
+ end
226
+ end
227
+
228
+ class IConvApp < Wx::App
229
+ def on_init()
230
+ frame = IConvFrame.new("Unicode demonstration - ",
231
+ Wx::Point.new(50, 50),
232
+ Wx::Size.new(450, 450) )
233
+
234
+ frame.show(true)
235
+ end
236
+ end
237
+
238
+ IConvApp.new().main_loop()