wxruby 1.9.3-universal-darwin

Sign up to get free protection for your applications and to get access to all the features.
Files changed (226) hide show
  1. data/LICENSE +53 -0
  2. data/README +299 -0
  3. data/lib/wx.rb +42 -0
  4. data/lib/wx/accessors.rb +52 -0
  5. data/lib/wx/classes/app.rb +45 -0
  6. data/lib/wx/classes/artprovider.rb +31 -0
  7. data/lib/wx/classes/bitmap.rb +23 -0
  8. data/lib/wx/classes/checklistbox.rb +45 -0
  9. data/lib/wx/classes/choice.rb +4 -0
  10. data/lib/wx/classes/clientdc.rb +13 -0
  11. data/lib/wx/classes/clipboard.rb +16 -0
  12. data/lib/wx/classes/colour.rb +47 -0
  13. data/lib/wx/classes/combobox.rb +4 -0
  14. data/lib/wx/classes/commandevent.rb +7 -0
  15. data/lib/wx/classes/controlwithitems.rb +10 -0
  16. data/lib/wx/classes/event.rb +5 -0
  17. data/lib/wx/classes/evthandler.rb +894 -0
  18. data/lib/wx/classes/font.rb +118 -0
  19. data/lib/wx/classes/grid.rb +129 -0
  20. data/lib/wx/classes/helpcontroller.rb +5 -0
  21. data/lib/wx/classes/htmlhelpcontroller.rb +5 -0
  22. data/lib/wx/classes/htmlwindow.rb +6 -0
  23. data/lib/wx/classes/icon.rb +14 -0
  24. data/lib/wx/classes/image.rb +14 -0
  25. data/lib/wx/classes/listbox.rb +4 -0
  26. data/lib/wx/classes/listctrl.rb +21 -0
  27. data/lib/wx/classes/locale.rb +28 -0
  28. data/lib/wx/classes/mediactrl.rb +22 -0
  29. data/lib/wx/classes/menu.rb +62 -0
  30. data/lib/wx/classes/menuitem.rb +7 -0
  31. data/lib/wx/classes/object.rb +7 -0
  32. data/lib/wx/classes/paintdc.rb +12 -0
  33. data/lib/wx/classes/point.rb +48 -0
  34. data/lib/wx/classes/previewframe.rb +13 -0
  35. data/lib/wx/classes/rect.rb +5 -0
  36. data/lib/wx/classes/size.rb +49 -0
  37. data/lib/wx/classes/sound.rb +23 -0
  38. data/lib/wx/classes/styledtextctrl.rb +92 -0
  39. data/lib/wx/classes/textctrl.rb +14 -0
  40. data/lib/wx/classes/texturlevent.rb +6 -0
  41. data/lib/wx/classes/timer.rb +69 -0
  42. data/lib/wx/classes/treectrl.rb +44 -0
  43. data/lib/wx/classes/window.rb +49 -0
  44. data/lib/wx/classes/xmlresource.rb +16 -0
  45. data/lib/wx/keyword_ctors.rb +219 -0
  46. data/lib/wx/keyword_defs.rb +485 -0
  47. data/lib/wx/version.rb +3 -0
  48. data/lib/wxruby2.bundle +0 -0
  49. data/samples/SAMPLES-LICENSE.TXT +18 -0
  50. data/samples/aui/aui.rb +1360 -0
  51. data/samples/bigdemo/About.rbw +39 -0
  52. data/samples/bigdemo/ColorPanel.rbw +25 -0
  53. data/samples/bigdemo/GridSimple.rbw +80 -0
  54. data/samples/bigdemo/MDIDemo.rbw +59 -0
  55. data/samples/bigdemo/PopupMenu.rbw +151 -0
  56. data/samples/bigdemo/ShapedWindow.rbw +135 -0
  57. data/samples/bigdemo/Sizers.rbw +545 -0
  58. data/samples/bigdemo/bigdemo.rb +826 -0
  59. data/samples/bigdemo/demoTemplate.rbw +37 -0
  60. data/samples/bigdemo/helpfile.htb +0 -0
  61. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  62. data/samples/bigdemo/icons/Test 015.png +0 -0
  63. data/samples/bigdemo/icons/choice.bmp +0 -0
  64. data/samples/bigdemo/icons/choice.xpm +27 -0
  65. data/samples/bigdemo/icons/combo.bmp +0 -0
  66. data/samples/bigdemo/icons/combo.xpm +27 -0
  67. data/samples/bigdemo/icons/copy.xpm +25 -0
  68. data/samples/bigdemo/icons/cut.xpm +24 -0
  69. data/samples/bigdemo/icons/gauge.bmp +0 -0
  70. data/samples/bigdemo/icons/gauge.xpm +27 -0
  71. data/samples/bigdemo/icons/help.xpm +25 -0
  72. data/samples/bigdemo/icons/list.bmp +0 -0
  73. data/samples/bigdemo/icons/list.xpm +27 -0
  74. data/samples/bigdemo/icons/mondrian.ico +0 -0
  75. data/samples/bigdemo/icons/mondrian.xpm +44 -0
  76. data/samples/bigdemo/icons/new.xpm +24 -0
  77. data/samples/bigdemo/icons/ogl.ico +0 -0
  78. data/samples/bigdemo/icons/ogl.xpm +45 -0
  79. data/samples/bigdemo/icons/open.xpm +26 -0
  80. data/samples/bigdemo/icons/paste.bmp +0 -0
  81. data/samples/bigdemo/icons/paste.xpm +38 -0
  82. data/samples/bigdemo/icons/pointy.png +0 -0
  83. data/samples/bigdemo/icons/preview.xpm +26 -0
  84. data/samples/bigdemo/icons/print.xpm +26 -0
  85. data/samples/bigdemo/icons/radio.bmp +0 -0
  86. data/samples/bigdemo/icons/radio.xpm +27 -0
  87. data/samples/bigdemo/icons/robert.xpm +415 -0
  88. data/samples/bigdemo/icons/ruby.png +0 -0
  89. data/samples/bigdemo/icons/sashtest.ico +0 -0
  90. data/samples/bigdemo/icons/save.xpm +25 -0
  91. data/samples/bigdemo/icons/smiles.bmp +0 -0
  92. data/samples/bigdemo/icons/smiles.xpm +39 -0
  93. data/samples/bigdemo/icons/smiley.ico +0 -0
  94. data/samples/bigdemo/icons/smiley.xpm +42 -0
  95. data/samples/bigdemo/icons/stattext.xpm +24 -0
  96. data/samples/bigdemo/icons/test2.bmp +0 -0
  97. data/samples/bigdemo/icons/test2.png +0 -0
  98. data/samples/bigdemo/icons/test2.xpm +79 -0
  99. data/samples/bigdemo/icons/text.bmp +0 -0
  100. data/samples/bigdemo/icons/text.xpm +27 -0
  101. data/samples/bigdemo/icons/tog1.bmp +0 -0
  102. data/samples/bigdemo/icons/tog1.xpm +38 -0
  103. data/samples/bigdemo/icons/tog2.bmp +0 -0
  104. data/samples/bigdemo/icons/tog2.xpm +38 -0
  105. data/samples/bigdemo/icons/wxwin.ico +0 -0
  106. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  107. data/samples/bigdemo/icons/wxwin16x16.xpm +25 -0
  108. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  109. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  110. data/samples/bigdemo/run.rb +94 -0
  111. data/samples/bigdemo/tips.txt +7 -0
  112. data/samples/bigdemo/utils.rb +12 -0
  113. data/samples/bigdemo/wxArtProvider.rbw +285 -0
  114. data/samples/bigdemo/wxBitmapButton.rbw +64 -0
  115. data/samples/bigdemo/wxButton.rbw +66 -0
  116. data/samples/bigdemo/wxCalendarCtrl.rbw +72 -0
  117. data/samples/bigdemo/wxCheckBox.rbw +52 -0
  118. data/samples/bigdemo/wxCheckListBox.rbw +77 -0
  119. data/samples/bigdemo/wxChoice.rbw +49 -0
  120. data/samples/bigdemo/wxChoicebook.rbw +80 -0
  121. data/samples/bigdemo/wxColourDialog.rbw +34 -0
  122. data/samples/bigdemo/wxComboBox.rbw +79 -0
  123. data/samples/bigdemo/wxCursor.rbw +140 -0
  124. data/samples/bigdemo/wxDialog.rbw +92 -0
  125. data/samples/bigdemo/wxDirDialog.rbw +32 -0
  126. data/samples/bigdemo/wxDragImage.rbw +74 -0
  127. data/samples/bigdemo/wxFileDialog.rbw +39 -0
  128. data/samples/bigdemo/wxFileDialog_Save.rbw +38 -0
  129. data/samples/bigdemo/wxFindReplaceDialog.rbw +85 -0
  130. data/samples/bigdemo/wxFontDialog.rbw +176 -0
  131. data/samples/bigdemo/wxFrame.rbw +55 -0
  132. data/samples/bigdemo/wxGauge.rbw +73 -0
  133. data/samples/bigdemo/wxGenericDirCtrl.rbw +78 -0
  134. data/samples/bigdemo/wxGrid.rbw +68 -0
  135. data/samples/bigdemo/wxHtmlHelpController.rbw +57 -0
  136. data/samples/bigdemo/wxListBox.rbw +142 -0
  137. data/samples/bigdemo/wxListCtrl_virtual.rbw +109 -0
  138. data/samples/bigdemo/wxMDIWindows.rbw +52 -0
  139. data/samples/bigdemo/wxMenu.rbw +238 -0
  140. data/samples/bigdemo/wxMessageDialog.rbw +30 -0
  141. data/samples/bigdemo/wxMiniFrame.rbw +74 -0
  142. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +34 -0
  143. data/samples/bigdemo/wxNotebook.rbw +138 -0
  144. data/samples/bigdemo/wxProgressDialog.rbw +45 -0
  145. data/samples/bigdemo/wxRadioBox.rbw +74 -0
  146. data/samples/bigdemo/wxRadioButton.rbw +127 -0
  147. data/samples/bigdemo/wxSashWindow.rbw +145 -0
  148. data/samples/bigdemo/wxScrolledMessageDialog.rbw +59 -0
  149. data/samples/bigdemo/wxScrolledWindow.rbw +201 -0
  150. data/samples/bigdemo/wxSingleChoiceDialog.rbw +35 -0
  151. data/samples/bigdemo/wxSlider.rbw +44 -0
  152. data/samples/bigdemo/wxSpinButton.rbw +52 -0
  153. data/samples/bigdemo/wxSpinCtrl.rbw +53 -0
  154. data/samples/bigdemo/wxSplitterWindow.rbw +65 -0
  155. data/samples/bigdemo/wxStaticBitmap.rbw +53 -0
  156. data/samples/bigdemo/wxStaticText.rbw +57 -0
  157. data/samples/bigdemo/wxStatusBar.rbw +128 -0
  158. data/samples/bigdemo/wxTextCtrl.rbw +151 -0
  159. data/samples/bigdemo/wxTextEntryDialog.rbw +34 -0
  160. data/samples/bigdemo/wxToggleButton.rbw +51 -0
  161. data/samples/bigdemo/wxToolBar.rbw +133 -0
  162. data/samples/bigdemo/wxTreeCtrl.rbw +192 -0
  163. data/samples/calendar/calendar.rb +275 -0
  164. data/samples/caret/caret.rb +286 -0
  165. data/samples/caret/mondrian.xpm +44 -0
  166. data/samples/controls/controls.rb +1140 -0
  167. data/samples/controls/get_item_sample.rb +87 -0
  168. data/samples/controls/icons/choice.xpm +27 -0
  169. data/samples/controls/icons/combo.xpm +27 -0
  170. data/samples/controls/icons/gauge.xpm +27 -0
  171. data/samples/controls/icons/list.xpm +27 -0
  172. data/samples/controls/icons/radio.xpm +27 -0
  173. data/samples/controls/icons/stattext.xpm +24 -0
  174. data/samples/controls/icons/text.xpm +27 -0
  175. data/samples/controls/mondrian.ico +0 -0
  176. data/samples/controls/mondrian.xpm +44 -0
  177. data/samples/controls/test2.bmp +0 -0
  178. data/samples/dialogs/dialogs.rb +724 -0
  179. data/samples/dialogs/tips.txt +18 -0
  180. data/samples/drawing/graphics_drawing.rb +232 -0
  181. data/samples/drawing/images.rb +48 -0
  182. data/samples/drawing/paperclip.png +0 -0
  183. data/samples/etc/activation.rb +108 -0
  184. data/samples/etc/choice.rb +72 -0
  185. data/samples/etc/miniframe.rb +84 -0
  186. data/samples/etc/sash.rb +135 -0
  187. data/samples/etc/scrollwin.rb +116 -0
  188. data/samples/etc/system_settings.rb +258 -0
  189. data/samples/etc/threaded.rb +81 -0
  190. data/samples/etc/wizard.rb +79 -0
  191. data/samples/event/event.rb +184 -0
  192. data/samples/grid/grid.rb +202 -0
  193. data/samples/html/html.rb +264 -0
  194. data/samples/listbook/listbook.rb +181 -0
  195. data/samples/listbook/listbook.xrc +370 -0
  196. data/samples/mdi/mdi.rb +87 -0
  197. data/samples/media/mediactrl.rb +173 -0
  198. data/samples/minimal/minimal.rb +85 -0
  199. data/samples/minimal/mondrian.ico +0 -0
  200. data/samples/minimal/mondrian.png +0 -0
  201. data/samples/minimal/nothing.rb +21 -0
  202. data/samples/opengl/cube.rb +123 -0
  203. data/samples/printing/mondrian.ico +0 -0
  204. data/samples/printing/mondrian.xpm +44 -0
  205. data/samples/printing/printing.rb +484 -0
  206. data/samples/sockets/SocketPackets.rb +27 -0
  207. data/samples/sockets/res/message-new.png +0 -0
  208. data/samples/sockets/res/user.png +0 -0
  209. data/samples/sockets/wxClient.rb +395 -0
  210. data/samples/sockets/wxServer.rb +422 -0
  211. data/samples/sockets/wxSocketGUI.rb +97 -0
  212. data/samples/text/mondrian.ico +0 -0
  213. data/samples/text/mondrian.xpm +44 -0
  214. data/samples/text/scintilla.rb +174 -0
  215. data/samples/text/textctrl.rb +124 -0
  216. data/samples/text/unicode.rb +238 -0
  217. data/samples/text/utf8.txt +15 -0
  218. data/samples/treectrl/icon1.xpm +79 -0
  219. data/samples/treectrl/icon2.xpm +53 -0
  220. data/samples/treectrl/icon3.xpm +79 -0
  221. data/samples/treectrl/icon4.xpm +43 -0
  222. data/samples/treectrl/icon5.xpm +79 -0
  223. data/samples/treectrl/treectrl.rb +1180 -0
  224. data/samples/xrc/samples.xrc +46 -0
  225. data/samples/xrc/xrc_sample.rb +107 -0
  226. metadata +296 -0
@@ -0,0 +1,97 @@
1
+ # wxRuby2 Sample Code. Copyright (c) 2007-???? Mario J. Steele
2
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
3
+
4
+ if /darwin/ =~ RUBY_PLATFORM
5
+ $LOCALHOST_NAME = "127.0.0.1"
6
+ else
7
+ $LOCALHOST_NAME = "localhost"
8
+ end
9
+
10
+ class SocketGUI < Wx::Frame
11
+ @@constants = []
12
+
13
+ def initialize(*args)
14
+ super
15
+ icon_file = File.join( File.dirname(__FILE__), 'res', 'message-new.png')
16
+ self.icon = Wx::Icon.new(icon_file,Wx::BITMAP_TYPE_PNG)
17
+
18
+ @il = Wx::ImageList.new(16,16)
19
+ # User icon courtesy of http://www.famfamfam.com/lab/icons/silk/
20
+ icon_file = File.join( File.dirname(__FILE__), 'res', 'user.png')
21
+ @il.add( Wx::Bitmap.new(icon_file, Wx::BITMAP_TYPE_PNG) )
22
+ hbox = Wx::BoxSizer.new(Wx::HORIZONTAL)
23
+ vbox = Wx::BoxSizer.new(Wx::VERTICAL)
24
+
25
+ # For display of Text Events
26
+ @output = Wx::TextCtrl.new( self, :style => Wx::TE_RICH2|
27
+ Wx::TE_READONLY|Wx::SUNKEN_BORDER|
28
+ Wx::TE_MULTILINE|Wx::TE_AUTO_URL)
29
+ # List of Users
30
+ @users = Wx::ListCtrl.new( self, :style => Wx::LC_REPORT|
31
+ Wx::LC_NO_HEADER|Wx::LC_SINGLE_SEL)
32
+ @users.set_image_list(@il,Wx::IMAGE_LIST_SMALL)
33
+ @users.insert_column(0,"Users")
34
+ # For Input from the User
35
+ @input = Wx::TextCtrl.new(self, :style => Wx::TE_PROCESS_ENTER)
36
+ vbox.add(@output,2,Wx::EXPAND)
37
+ vbox.add(@input,0,Wx::GROW)
38
+ hbox.add(vbox,2,Wx::EXPAND)
39
+ hbox.add(@users,0,Wx::GROW)
40
+ self.sizer = hbox
41
+ @@constants.each_with_index do |const,i|
42
+ self.class.const_set(const,1001+i)
43
+ end
44
+ create_menus()
45
+ create_status_bar()
46
+ on_init()
47
+ @font = Wx::Font.new(10,Wx::FONTFAMILY_TELETYPE,Wx::NORMAL,Wx::NORMAL)
48
+ @progStyle = Wx::TextAttr.new(Wx::BLUE, Wx::YELLOW, @font)
49
+ @defStyle = Wx::TextAttr.new(Wx::BLACK, Wx::WHITE, @font)
50
+ @errStyle = Wx::TextAttr.new(Wx::RED, Wx::GREEN, @font)
51
+ self.set_size([640,480])
52
+ end
53
+
54
+ def add_user(user)
55
+ #@users.append_item(@root,user,0)
56
+ @users.insert_item(0,user,0)
57
+ end
58
+
59
+ def clear_users()
60
+ @users.delete_all_items
61
+ end
62
+
63
+ def create_menus()
64
+ # Holder Function
65
+ end
66
+
67
+ def on_init()
68
+ # Holder Function
69
+ end
70
+
71
+ def append_text(msg)
72
+ @output.freeze
73
+ c, sl = @output.position_to_xy(@output.get_last_position)
74
+ @output.append_text(msg)
75
+ @output.thaw
76
+ c, el = @output.position_to_xy(@output.get_last_position)
77
+ @output.scroll_lines((el-sl)+2) unless sl == nil || el == nil
78
+ end
79
+
80
+ def append_prog_msg(msg)
81
+ @output.set_default_style(@progStyle)
82
+ msg += "\n" if msg[-1].chr != "\n"
83
+ append_text(msg)
84
+ end
85
+
86
+ def append_msg(msg)
87
+ @output.set_default_style(@defStyle)
88
+ msg += "\n" if msg[-1].chr != "\n"
89
+ append_text(msg)
90
+ end
91
+
92
+ def append_error(msg)
93
+ @output.set_default_style(@errStyle)
94
+ msg += "\n" if msg[-1].chr != "\n"
95
+ append_text(msg)
96
+ end
97
+ end
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,174 @@
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
+ menuFile = Menu.new()
28
+ menuFile.append(Minimal_Quit, "E&xit\tAlt-X", "Quit this program")
29
+
30
+ menuView = Menu.new()
31
+ menuView.append(Toggle_Whitespace, "Show &Whitespace\tF6", "Show Whitespace", ITEM_CHECK)
32
+ menuView.append(Toggle_EOL, "Show &End of Line\tF7", "Show End of Line characters", ITEM_CHECK)
33
+
34
+ menuHelp = Menu.new()
35
+ menuHelp.append(Minimal_About, "&About...\tF1", "Show about dialog")
36
+
37
+ menuBar = MenuBar.new()
38
+ menuBar.append(menuFile, "&File")
39
+ menuBar.append(menuView, "&View")
40
+ menuBar.append(menuHelp, "&Help")
41
+ set_menu_bar(menuBar)
42
+
43
+ tb = create_tool_bar(Wx::TB_HORIZONTAL | Wx::NO_BORDER | Wx::TB_FLAT | Wx::TB_TEXT)
44
+
45
+ create_status_bar(2)
46
+ set_status_text("Welcome to wxRuby!")
47
+
48
+ @sci = Wx::StyledTextCtrl.new(self)
49
+
50
+ font = Font.new(10, TELETYPE, NORMAL, NORMAL)
51
+ @sci.style_set_font(STC_STYLE_DEFAULT, font);
52
+
53
+ @ws_visible = false
54
+ @eol_visible = false
55
+ @sci.set_edge_mode(STC_EDGE_LINE)
56
+
57
+ line_num_margin = @sci.text_width(STC_STYLE_LINENUMBER, "_99999")
58
+ @sci.set_margin_width(0, line_num_margin)
59
+
60
+ @sci.style_set_foreground(STC_STYLE_DEFAULT, BLACK);
61
+ @sci.style_set_background(STC_STYLE_DEFAULT, WHITE);
62
+ @sci.style_set_foreground(STC_STYLE_LINENUMBER, LIGHT_GREY);
63
+ @sci.style_set_background(STC_STYLE_LINENUMBER, WHITE);
64
+ @sci.style_set_foreground(STC_STYLE_INDENTGUIDE, LIGHT_GREY);
65
+
66
+ @sci.set_tab_width(4)
67
+ @sci.set_use_tabs(false)
68
+ @sci.set_tab_indents(true)
69
+ @sci.set_back_space_un_indents(true)
70
+ @sci.set_indent(4)
71
+ @sci.set_edge_column(80)
72
+
73
+ @sci.set_lexer(STC_LEX_RUBY)
74
+ @sci.style_clear_all
75
+ @sci.style_set_foreground(2, RED)
76
+ @sci.style_set_foreground(3, GREEN)
77
+ @sci.style_set_foreground(5, BLUE)
78
+ @sci.style_set_foreground(6, BLUE)
79
+ @sci.style_set_foreground(7, BLUE)
80
+ @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")
81
+
82
+ @sci.set_property("fold","1")
83
+ @sci.set_property("fold.compact", "0")
84
+ @sci.set_property("fold.comment", "1")
85
+ @sci.set_property("fold.preprocessor", "1")
86
+
87
+ @sci.set_margin_width(1, 0)
88
+ @sci.set_margin_type(1, STC_MARGIN_SYMBOL)
89
+ @sci.set_margin_mask(1, STC_MASK_FOLDERS)
90
+ @sci.set_margin_width(1, 20)
91
+
92
+ @sci.marker_define(STC_MARKNUM_FOLDER, STC_MARK_PLUS)
93
+ @sci.marker_define(STC_MARKNUM_FOLDEROPEN, STC_MARK_MINUS)
94
+ @sci.marker_define(STC_MARKNUM_FOLDEREND, STC_MARK_EMPTY)
95
+ @sci.marker_define(STC_MARKNUM_FOLDERMIDTAIL, STC_MARK_EMPTY)
96
+ @sci.marker_define(STC_MARKNUM_FOLDEROPENMID, STC_MARK_EMPTY)
97
+ @sci.marker_define(STC_MARKNUM_FOLDERSUB, STC_MARK_EMPTY)
98
+ @sci.marker_define(STC_MARKNUM_FOLDERTAIL, STC_MARK_EMPTY)
99
+ @sci.set_fold_flags(16)
100
+
101
+ @sci.set_margin_sensitive(1,1)
102
+
103
+ evt_menu(Minimal_Quit) {onQuit}
104
+ evt_menu(Minimal_About) {onAbout}
105
+ evt_menu(Toggle_Whitespace) {onWhitespace}
106
+ evt_menu(Toggle_EOL) {onEOL}
107
+ evt_stc_charadded(@sci.get_id) {|evt| onCharadded(evt)}
108
+ evt_stc_marginclick(@sci.get_id) {|evt| onMarginClick(evt)}
109
+
110
+ end
111
+
112
+ def onQuit
113
+ close(TRUE)
114
+ end
115
+
116
+ def onAbout
117
+ GC.start
118
+ msg = sprintf("This is the About dialog of the scintilla sample.\n" \
119
+ "Welcome to %s", VERSION_STRING)
120
+
121
+ message_box(msg, "About Scintilla", OK | ICON_INFORMATION, self)
122
+
123
+ end
124
+
125
+ def onWhitespace
126
+ @ws_visible = !@ws_visible
127
+ @sci.set_view_white_space(@ws_visible ? STC_WS_VISIBLEALWAYS : STC_WS_INVISIBLE)
128
+ end
129
+
130
+ def onEOL
131
+ @eol_visible = !@eol_visible
132
+ @sci.set_view_eol(@eol_visible)
133
+ end
134
+
135
+ def onCharadded(evt)
136
+ chr = evt.get_key
137
+ curr_line = @sci.get_current_line
138
+
139
+ if(chr == 13)
140
+ if curr_line > 0
141
+ line_ind = @sci.get_line_indentation(curr_line - 1)
142
+ if line_ind > 0
143
+ @sci.set_line_indentation(curr_line, line_ind)
144
+ @sci.goto_pos(@sci.position_from_line(curr_line)+line_ind)
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ def onMarginClick(evt)
151
+ line_num = @sci.line_from_position(evt.get_position)
152
+ margin = evt.get_margin
153
+
154
+ if(margin == 1)
155
+ @sci.toggle_fold(line_num)
156
+ end
157
+ end
158
+
159
+ end
160
+
161
+ class RbApp < App
162
+ def on_init
163
+ frame = MyFrame.new("wxRuby Scintilla App",Point.new(50, 50), Size.new(450, 340))
164
+
165
+ frame.show(TRUE)
166
+
167
+ end
168
+ end
169
+
170
+ a = RbApp.new
171
+ a.main_loop()
172
+ puts("back from main_loop...")
173
+ GC.start
174
+ 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_and_fit( 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()