wxruby 1.9.3-universal-darwin
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +53 -0
- data/README +299 -0
- data/lib/wx.rb +42 -0
- data/lib/wx/accessors.rb +52 -0
- data/lib/wx/classes/app.rb +45 -0
- data/lib/wx/classes/artprovider.rb +31 -0
- data/lib/wx/classes/bitmap.rb +23 -0
- data/lib/wx/classes/checklistbox.rb +45 -0
- data/lib/wx/classes/choice.rb +4 -0
- data/lib/wx/classes/clientdc.rb +13 -0
- data/lib/wx/classes/clipboard.rb +16 -0
- data/lib/wx/classes/colour.rb +47 -0
- data/lib/wx/classes/combobox.rb +4 -0
- data/lib/wx/classes/commandevent.rb +7 -0
- data/lib/wx/classes/controlwithitems.rb +10 -0
- data/lib/wx/classes/event.rb +5 -0
- data/lib/wx/classes/evthandler.rb +894 -0
- data/lib/wx/classes/font.rb +118 -0
- data/lib/wx/classes/grid.rb +129 -0
- data/lib/wx/classes/helpcontroller.rb +5 -0
- data/lib/wx/classes/htmlhelpcontroller.rb +5 -0
- data/lib/wx/classes/htmlwindow.rb +6 -0
- data/lib/wx/classes/icon.rb +14 -0
- data/lib/wx/classes/image.rb +14 -0
- data/lib/wx/classes/listbox.rb +4 -0
- data/lib/wx/classes/listctrl.rb +21 -0
- data/lib/wx/classes/locale.rb +28 -0
- data/lib/wx/classes/mediactrl.rb +22 -0
- data/lib/wx/classes/menu.rb +62 -0
- data/lib/wx/classes/menuitem.rb +7 -0
- data/lib/wx/classes/object.rb +7 -0
- data/lib/wx/classes/paintdc.rb +12 -0
- data/lib/wx/classes/point.rb +48 -0
- data/lib/wx/classes/previewframe.rb +13 -0
- data/lib/wx/classes/rect.rb +5 -0
- data/lib/wx/classes/size.rb +49 -0
- data/lib/wx/classes/sound.rb +23 -0
- data/lib/wx/classes/styledtextctrl.rb +92 -0
- data/lib/wx/classes/textctrl.rb +14 -0
- data/lib/wx/classes/texturlevent.rb +6 -0
- data/lib/wx/classes/timer.rb +69 -0
- data/lib/wx/classes/treectrl.rb +44 -0
- data/lib/wx/classes/window.rb +49 -0
- data/lib/wx/classes/xmlresource.rb +16 -0
- data/lib/wx/keyword_ctors.rb +219 -0
- data/lib/wx/keyword_defs.rb +485 -0
- data/lib/wx/version.rb +3 -0
- data/lib/wxruby2.bundle +0 -0
- data/samples/SAMPLES-LICENSE.TXT +18 -0
- data/samples/aui/aui.rb +1360 -0
- data/samples/bigdemo/About.rbw +39 -0
- data/samples/bigdemo/ColorPanel.rbw +25 -0
- data/samples/bigdemo/GridSimple.rbw +80 -0
- data/samples/bigdemo/MDIDemo.rbw +59 -0
- data/samples/bigdemo/PopupMenu.rbw +151 -0
- data/samples/bigdemo/ShapedWindow.rbw +135 -0
- data/samples/bigdemo/Sizers.rbw +545 -0
- data/samples/bigdemo/bigdemo.rb +826 -0
- data/samples/bigdemo/demoTemplate.rbw +37 -0
- data/samples/bigdemo/helpfile.htb +0 -0
- data/samples/bigdemo/icons/Test 015.jpg +0 -0
- data/samples/bigdemo/icons/Test 015.png +0 -0
- data/samples/bigdemo/icons/choice.bmp +0 -0
- data/samples/bigdemo/icons/choice.xpm +27 -0
- data/samples/bigdemo/icons/combo.bmp +0 -0
- data/samples/bigdemo/icons/combo.xpm +27 -0
- data/samples/bigdemo/icons/copy.xpm +25 -0
- data/samples/bigdemo/icons/cut.xpm +24 -0
- data/samples/bigdemo/icons/gauge.bmp +0 -0
- data/samples/bigdemo/icons/gauge.xpm +27 -0
- data/samples/bigdemo/icons/help.xpm +25 -0
- data/samples/bigdemo/icons/list.bmp +0 -0
- data/samples/bigdemo/icons/list.xpm +27 -0
- data/samples/bigdemo/icons/mondrian.ico +0 -0
- data/samples/bigdemo/icons/mondrian.xpm +44 -0
- data/samples/bigdemo/icons/new.xpm +24 -0
- data/samples/bigdemo/icons/ogl.ico +0 -0
- data/samples/bigdemo/icons/ogl.xpm +45 -0
- data/samples/bigdemo/icons/open.xpm +26 -0
- data/samples/bigdemo/icons/paste.bmp +0 -0
- data/samples/bigdemo/icons/paste.xpm +38 -0
- data/samples/bigdemo/icons/pointy.png +0 -0
- data/samples/bigdemo/icons/preview.xpm +26 -0
- data/samples/bigdemo/icons/print.xpm +26 -0
- data/samples/bigdemo/icons/radio.bmp +0 -0
- data/samples/bigdemo/icons/radio.xpm +27 -0
- data/samples/bigdemo/icons/robert.xpm +415 -0
- data/samples/bigdemo/icons/ruby.png +0 -0
- data/samples/bigdemo/icons/sashtest.ico +0 -0
- data/samples/bigdemo/icons/save.xpm +25 -0
- data/samples/bigdemo/icons/smiles.bmp +0 -0
- data/samples/bigdemo/icons/smiles.xpm +39 -0
- data/samples/bigdemo/icons/smiley.ico +0 -0
- data/samples/bigdemo/icons/smiley.xpm +42 -0
- data/samples/bigdemo/icons/stattext.xpm +24 -0
- data/samples/bigdemo/icons/test2.bmp +0 -0
- data/samples/bigdemo/icons/test2.png +0 -0
- data/samples/bigdemo/icons/test2.xpm +79 -0
- data/samples/bigdemo/icons/text.bmp +0 -0
- data/samples/bigdemo/icons/text.xpm +27 -0
- data/samples/bigdemo/icons/tog1.bmp +0 -0
- data/samples/bigdemo/icons/tog1.xpm +38 -0
- data/samples/bigdemo/icons/tog2.bmp +0 -0
- data/samples/bigdemo/icons/tog2.xpm +38 -0
- data/samples/bigdemo/icons/wxwin.ico +0 -0
- data/samples/bigdemo/icons/wxwin16x16.png +0 -0
- data/samples/bigdemo/icons/wxwin16x16.xpm +25 -0
- data/samples/bigdemo/icons/wxwin32x32.png +0 -0
- data/samples/bigdemo/icons/wxwin48x48.png +0 -0
- data/samples/bigdemo/run.rb +94 -0
- data/samples/bigdemo/tips.txt +7 -0
- data/samples/bigdemo/utils.rb +12 -0
- data/samples/bigdemo/wxArtProvider.rbw +285 -0
- data/samples/bigdemo/wxBitmapButton.rbw +64 -0
- data/samples/bigdemo/wxButton.rbw +66 -0
- data/samples/bigdemo/wxCalendarCtrl.rbw +72 -0
- data/samples/bigdemo/wxCheckBox.rbw +52 -0
- data/samples/bigdemo/wxCheckListBox.rbw +77 -0
- data/samples/bigdemo/wxChoice.rbw +49 -0
- data/samples/bigdemo/wxChoicebook.rbw +80 -0
- data/samples/bigdemo/wxColourDialog.rbw +34 -0
- data/samples/bigdemo/wxComboBox.rbw +79 -0
- data/samples/bigdemo/wxCursor.rbw +140 -0
- data/samples/bigdemo/wxDialog.rbw +92 -0
- data/samples/bigdemo/wxDirDialog.rbw +32 -0
- data/samples/bigdemo/wxDragImage.rbw +74 -0
- data/samples/bigdemo/wxFileDialog.rbw +39 -0
- data/samples/bigdemo/wxFileDialog_Save.rbw +38 -0
- data/samples/bigdemo/wxFindReplaceDialog.rbw +85 -0
- data/samples/bigdemo/wxFontDialog.rbw +176 -0
- data/samples/bigdemo/wxFrame.rbw +55 -0
- data/samples/bigdemo/wxGauge.rbw +73 -0
- data/samples/bigdemo/wxGenericDirCtrl.rbw +78 -0
- data/samples/bigdemo/wxGrid.rbw +68 -0
- data/samples/bigdemo/wxHtmlHelpController.rbw +57 -0
- data/samples/bigdemo/wxListBox.rbw +142 -0
- data/samples/bigdemo/wxListCtrl_virtual.rbw +109 -0
- data/samples/bigdemo/wxMDIWindows.rbw +52 -0
- data/samples/bigdemo/wxMenu.rbw +238 -0
- data/samples/bigdemo/wxMessageDialog.rbw +30 -0
- data/samples/bigdemo/wxMiniFrame.rbw +74 -0
- data/samples/bigdemo/wxMultipleChoiceDialog.rbw +34 -0
- data/samples/bigdemo/wxNotebook.rbw +138 -0
- data/samples/bigdemo/wxProgressDialog.rbw +45 -0
- data/samples/bigdemo/wxRadioBox.rbw +74 -0
- data/samples/bigdemo/wxRadioButton.rbw +127 -0
- data/samples/bigdemo/wxSashWindow.rbw +145 -0
- data/samples/bigdemo/wxScrolledMessageDialog.rbw +59 -0
- data/samples/bigdemo/wxScrolledWindow.rbw +201 -0
- data/samples/bigdemo/wxSingleChoiceDialog.rbw +35 -0
- data/samples/bigdemo/wxSlider.rbw +44 -0
- data/samples/bigdemo/wxSpinButton.rbw +52 -0
- data/samples/bigdemo/wxSpinCtrl.rbw +53 -0
- data/samples/bigdemo/wxSplitterWindow.rbw +65 -0
- data/samples/bigdemo/wxStaticBitmap.rbw +53 -0
- data/samples/bigdemo/wxStaticText.rbw +57 -0
- data/samples/bigdemo/wxStatusBar.rbw +128 -0
- data/samples/bigdemo/wxTextCtrl.rbw +151 -0
- data/samples/bigdemo/wxTextEntryDialog.rbw +34 -0
- data/samples/bigdemo/wxToggleButton.rbw +51 -0
- data/samples/bigdemo/wxToolBar.rbw +133 -0
- data/samples/bigdemo/wxTreeCtrl.rbw +192 -0
- data/samples/calendar/calendar.rb +275 -0
- data/samples/caret/caret.rb +286 -0
- data/samples/caret/mondrian.xpm +44 -0
- data/samples/controls/controls.rb +1140 -0
- data/samples/controls/get_item_sample.rb +87 -0
- data/samples/controls/icons/choice.xpm +27 -0
- data/samples/controls/icons/combo.xpm +27 -0
- data/samples/controls/icons/gauge.xpm +27 -0
- data/samples/controls/icons/list.xpm +27 -0
- data/samples/controls/icons/radio.xpm +27 -0
- data/samples/controls/icons/stattext.xpm +24 -0
- data/samples/controls/icons/text.xpm +27 -0
- data/samples/controls/mondrian.ico +0 -0
- data/samples/controls/mondrian.xpm +44 -0
- data/samples/controls/test2.bmp +0 -0
- data/samples/dialogs/dialogs.rb +724 -0
- data/samples/dialogs/tips.txt +18 -0
- data/samples/drawing/graphics_drawing.rb +232 -0
- data/samples/drawing/images.rb +48 -0
- data/samples/drawing/paperclip.png +0 -0
- data/samples/etc/activation.rb +108 -0
- data/samples/etc/choice.rb +72 -0
- data/samples/etc/miniframe.rb +84 -0
- data/samples/etc/sash.rb +135 -0
- data/samples/etc/scrollwin.rb +116 -0
- data/samples/etc/system_settings.rb +258 -0
- data/samples/etc/threaded.rb +81 -0
- data/samples/etc/wizard.rb +79 -0
- data/samples/event/event.rb +184 -0
- data/samples/grid/grid.rb +202 -0
- data/samples/html/html.rb +264 -0
- data/samples/listbook/listbook.rb +181 -0
- data/samples/listbook/listbook.xrc +370 -0
- data/samples/mdi/mdi.rb +87 -0
- data/samples/media/mediactrl.rb +173 -0
- data/samples/minimal/minimal.rb +85 -0
- data/samples/minimal/mondrian.ico +0 -0
- data/samples/minimal/mondrian.png +0 -0
- data/samples/minimal/nothing.rb +21 -0
- data/samples/opengl/cube.rb +123 -0
- data/samples/printing/mondrian.ico +0 -0
- data/samples/printing/mondrian.xpm +44 -0
- data/samples/printing/printing.rb +484 -0
- data/samples/sockets/SocketPackets.rb +27 -0
- data/samples/sockets/res/message-new.png +0 -0
- data/samples/sockets/res/user.png +0 -0
- data/samples/sockets/wxClient.rb +395 -0
- data/samples/sockets/wxServer.rb +422 -0
- data/samples/sockets/wxSocketGUI.rb +97 -0
- data/samples/text/mondrian.ico +0 -0
- data/samples/text/mondrian.xpm +44 -0
- data/samples/text/scintilla.rb +174 -0
- data/samples/text/textctrl.rb +124 -0
- data/samples/text/unicode.rb +238 -0
- data/samples/text/utf8.txt +15 -0
- data/samples/treectrl/icon1.xpm +79 -0
- data/samples/treectrl/icon2.xpm +53 -0
- data/samples/treectrl/icon3.xpm +79 -0
- data/samples/treectrl/icon4.xpm +43 -0
- data/samples/treectrl/icon5.xpm +79 -0
- data/samples/treectrl/treectrl.rb +1180 -0
- data/samples/xrc/samples.xrc +46 -0
- data/samples/xrc/xrc_sample.rb +107 -0
- 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()
|