wxruby 1.9.1-powerpc-darwin8.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/wx.rb +42 -0
- data/lib/wx/accessors.rb +52 -0
- data/lib/wx/classes/app.rb +25 -0
- data/lib/wx/classes/artprovider.rb +31 -0
- data/lib/wx/classes/bitmap.rb +23 -0
- data/lib/wx/classes/choice.rb +4 -0
- data/lib/wx/classes/clientdc.rb +13 -0
- data/lib/wx/classes/colour.rb +47 -0
- data/lib/wx/classes/combobox.rb +4 -0
- data/lib/wx/classes/evthandler.rb +828 -0
- data/lib/wx/classes/font.rb +118 -0
- data/lib/wx/classes/grid.rb +130 -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/locale.rb +28 -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/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/window.rb +42 -0
- data/lib/wx/classes/xmlresource.rb +16 -0
- data/lib/wx/keyword_ctors.rb +219 -0
- data/lib/wx/keyword_defs.rb +455 -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 +1353 -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 +155 -0
- data/samples/bigdemo/wxScrolledMessageDialog.rbw +59 -0
- data/samples/bigdemo/wxScrolledWindow.rbw +196 -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 +296 -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/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/wizard.rb +81 -0
- data/samples/event/event.rb +184 -0
- data/samples/grid/grid.rb +201 -0
- data/samples/html/html.rb +251 -0
- data/samples/images/Thumbs.db +0 -0
- data/samples/images/images.rb +48 -0
- data/samples/images/paperclip.png +0 -0
- data/samples/listbook/listbook.rb +183 -0
- data/samples/listbook/listbook.xrc +370 -0
- data/samples/mdi/mdi.rb +87 -0
- data/samples/minimal/minimal.rb +83 -0
- data/samples/minimal/mondrian.png +0 -0
- data/samples/minimal/nothing.rb +46 -0
- data/samples/minimal/text.rb +35 -0
- data/samples/printing/mondrian.ico +0 -0
- data/samples/printing/mondrian.xpm +44 -0
- data/samples/printing/printing.rb +484 -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 +1210 -0
- data/samples/xrc/samples.xrc +46 -0
- data/samples/xrc/xrc_sample.rb +107 -0
- metadata +263 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
begin
|
|
3
|
+
require 'wx'
|
|
4
|
+
rescue LoadError => no_wx_err
|
|
5
|
+
begin
|
|
6
|
+
require 'rubygems'
|
|
7
|
+
load 'wx'
|
|
8
|
+
rescue
|
|
9
|
+
raise no_wx_err
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class GridFrame < Wx::Frame
|
|
15
|
+
|
|
16
|
+
def initialize(parent, id = -1, title = "MyFrame",
|
|
17
|
+
pos = Wx::DEFAULT_POSITION,
|
|
18
|
+
size = Wx::DEFAULT_SIZE,
|
|
19
|
+
style = Wx::DEFAULT_FRAME_STYLE)
|
|
20
|
+
|
|
21
|
+
super(parent, id, title, pos, size, style)
|
|
22
|
+
sizer = Wx::BoxSizer.new(Wx::VERTICAL)
|
|
23
|
+
create_status_bar()
|
|
24
|
+
set_status_text(Wx::VERSION_STRING)
|
|
25
|
+
|
|
26
|
+
# panel = Wx::Panel.new(self)
|
|
27
|
+
sel_menu = Wx::Menu.new
|
|
28
|
+
sel_menu.append(1002, 'Select all', 'Select all')
|
|
29
|
+
evt_menu(1002) { @grid.select_all }
|
|
30
|
+
sel_menu.append(1003, 'Select row 2', 'Select row 2')
|
|
31
|
+
evt_menu(1003) { @grid.select_row(1) }
|
|
32
|
+
sel_menu.append(1004, 'Select column 4', 'Select col 4')
|
|
33
|
+
evt_menu(1004) { @grid.select_col(3) }
|
|
34
|
+
sel_menu.append(1005, 'Select block', 'Select block')
|
|
35
|
+
evt_menu(1005) { @grid.select_block(1, 1, 6, 3) }
|
|
36
|
+
menu_bar = Wx::MenuBar.new
|
|
37
|
+
menu_bar.append(sel_menu, 'Select')
|
|
38
|
+
set_menu_bar(menu_bar)
|
|
39
|
+
|
|
40
|
+
make_grid(self)
|
|
41
|
+
sizer.add(@grid, 1, Wx::ALL|Wx::GROW, 4)
|
|
42
|
+
set_sizer(sizer)
|
|
43
|
+
|
|
44
|
+
evt_grid_cell_left_click() do |evt|
|
|
45
|
+
set_status_text("#{evt.get_row} x #{evt.get_col} is clicked")
|
|
46
|
+
evt.skip
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
evt_grid_cell_right_click() do |evt|
|
|
50
|
+
set_status_text("#{evt.get_row} x #{evt.get_col} is right clicked")
|
|
51
|
+
evt.skip
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
evt_grid_cell_left_dclick() do |evt|
|
|
55
|
+
set_status_text("#{evt.get_row} x #{evt.get_col} is double clicked")
|
|
56
|
+
evt.skip
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
evt_grid_cell_right_dclick() do |evt|
|
|
60
|
+
set_status_text("#{evt.get_row} x #{evt.get_col} is right double clicked")
|
|
61
|
+
evt.skip
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
evt_grid_label_left_click() do |evt|
|
|
65
|
+
set_status_text("#{evt.get_row} x #{evt.get_col} label is clicked")
|
|
66
|
+
evt.skip
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
evt_grid_label_right_click() do |evt|
|
|
70
|
+
set_status_text("#{evt.get_row} x #{evt.get_col} label is right clicked")
|
|
71
|
+
evt.skip
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
evt_grid_label_left_dclick() do |evt|
|
|
75
|
+
set_status_text("#{evt.get_row} x #{evt.get_col} labelis double clicked")
|
|
76
|
+
evt.skip
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
evt_grid_label_right_dclick() do |evt|
|
|
80
|
+
set_status_text("#{evt.get_row} x #{evt.get_col} label is right double clicked")
|
|
81
|
+
evt.skip
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
evt_grid_select_cell() do |evt|
|
|
85
|
+
set_status_text("#{evt.get_row} x #{evt.get_col} cell is selected")
|
|
86
|
+
evt.skip
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
evt_grid_row_size do |evt|
|
|
90
|
+
set_status_text("Row #{evt.get_row_or_col} size changed")
|
|
91
|
+
evt.skip
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
evt_grid_col_size do |evt|
|
|
95
|
+
set_status_text("Column #{evt.get_row_or_col} size changed")
|
|
96
|
+
evt.skip
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
evt_grid_editor_shown do |evt|
|
|
100
|
+
set_status_text("Begin editing")
|
|
101
|
+
evt.skip
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
evt_grid_editor_hidden do |evt|
|
|
105
|
+
set_status_text("End editing")
|
|
106
|
+
evt.skip
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
evt_grid_range_select do |evt|
|
|
110
|
+
top = evt.get_top_left_coords
|
|
111
|
+
bottom = evt.get_bottom_right_coords
|
|
112
|
+
set_status_text("[ #{top[0].to_s} x #{top[1].to_s} ] to [ #{bottom[0].to_s} x #{bottom[1].to_s} ] is selected")
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
evt_grid_editor_created do |evt|
|
|
116
|
+
set_status_text("Control #{evt.get_control} created")
|
|
117
|
+
evt.skip
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
evt_grid_cell_change() do |evt|
|
|
121
|
+
set_status_text("Cell #{evt.get_row} x #{evt.get_col} has changed")
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Create a wxGrid object
|
|
126
|
+
def make_grid(panel)
|
|
127
|
+
@grid = Wx::Grid.new(panel, -1)
|
|
128
|
+
|
|
129
|
+
# Then we call CreateGrid to set the dimensions of the grid
|
|
130
|
+
# (11 rows and 12 columns in this example)
|
|
131
|
+
@grid.create_grid( 20, 12 )
|
|
132
|
+
@grid.set_default_cell_background_colour(Wx::WHITE)
|
|
133
|
+
# We can set the sizes of individual rows and columns
|
|
134
|
+
# in pixels, and the label value string
|
|
135
|
+
@grid.set_row_size( 0, 60 )
|
|
136
|
+
@grid.set_row_label_value( 0, "Row1" )
|
|
137
|
+
@grid.set_row_label_alignment(Wx::ALIGN_CENTRE, Wx::ALIGN_CENTRE)
|
|
138
|
+
|
|
139
|
+
@grid.set_col_size( 0, 120 )
|
|
140
|
+
@grid.set_col_label_value( 0, "Col1" )
|
|
141
|
+
@grid.set_col_label_alignment(Wx::ALIGN_CENTRE, Wx::ALIGN_CENTRE)
|
|
142
|
+
|
|
143
|
+
# And set grid cell contents as strings
|
|
144
|
+
@grid.set_cell_value( 0, 0, "wxGrid is good" )
|
|
145
|
+
|
|
146
|
+
# We can specify that some cells are read-only
|
|
147
|
+
@grid.set_cell_value( 0, 2, "Read-only" )
|
|
148
|
+
@grid.set_read_only( 0, 2 )
|
|
149
|
+
|
|
150
|
+
# Colours can be specified for grid cell contents
|
|
151
|
+
@grid.set_cell_value(1, 1, "white on red")
|
|
152
|
+
@grid.set_cell_text_colour(1, 1, Wx::WHITE)
|
|
153
|
+
@grid.set_cell_background_colour(1, 1, Wx::RED)
|
|
154
|
+
|
|
155
|
+
# We can specify the some cells will store numeric
|
|
156
|
+
# values rather than strings. Here we set grid column 6
|
|
157
|
+
# to hold floating point values displayed with width
|
|
158
|
+
# of 2 and precision of 2. The column is highlighted in light grey
|
|
159
|
+
cell_attr = Wx::GridCellAttr.new
|
|
160
|
+
cell_attr.set_background_colour( Wx::LIGHT_GREY )
|
|
161
|
+
cell_attr.set_renderer( Wx::GridCellFloatRenderer.new(2, 2) )
|
|
162
|
+
|
|
163
|
+
@grid.set_col_attr(5, cell_attr)
|
|
164
|
+
@grid.set_cell_value(0, 5, "3.1415")
|
|
165
|
+
@grid.set_cell_value(0, 6,
|
|
166
|
+
"The whole column to the left uses float format")
|
|
167
|
+
|
|
168
|
+
# Custom Editors Can be used
|
|
169
|
+
editor = Wx::GridCellNumberEditor.new(5, 20)
|
|
170
|
+
@grid.set_cell_value(3, 1, 'Number editor below')
|
|
171
|
+
@grid.set_cell_editor(4, 1, editor)
|
|
172
|
+
|
|
173
|
+
editor = Wx::GridCellFloatEditor.new(4, 2)
|
|
174
|
+
@grid.set_cell_value(3, 2, 'Float editor below')
|
|
175
|
+
@grid.set_cell_editor(4, 2, editor)
|
|
176
|
+
|
|
177
|
+
editor = Wx::GridCellChoiceEditor.new(['foo', 'bar', 'baz'])
|
|
178
|
+
@grid.set_cell_value(3, 3, 'Choice editor below')
|
|
179
|
+
@grid.set_cell_editor(4, 3, editor)
|
|
180
|
+
|
|
181
|
+
@grid.auto_size_row(3, true)
|
|
182
|
+
|
|
183
|
+
# Display of cells can be customised
|
|
184
|
+
@grid.set_cell_renderer(6, 0, Wx::GridCellBoolRenderer.new)
|
|
185
|
+
@grid.set_cell_value(6, 1, 'Cell to the left displayed as boolean')
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
class GridApp < Wx::App
|
|
191
|
+
def on_init
|
|
192
|
+
frame = GridFrame.new(nil, -1, "Grid Sample",
|
|
193
|
+
Wx::Point.new(10, 100),
|
|
194
|
+
Wx::Size.new(630,400))
|
|
195
|
+
|
|
196
|
+
set_top_window(frame)
|
|
197
|
+
frame.show()
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
GridApp.new.main_loop()
|
|
@@ -0,0 +1,251 @@
|
|
|
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
|
+
require 'net/http'
|
|
17
|
+
require 'uri'
|
|
18
|
+
|
|
19
|
+
class MyHtmlWindow < Wx::HtmlWindow
|
|
20
|
+
attr_reader :html_src
|
|
21
|
+
def load_page_from_uri(uri)
|
|
22
|
+
case uri
|
|
23
|
+
when URI::HTTP
|
|
24
|
+
Wx::BusyCursor.busy do
|
|
25
|
+
begin
|
|
26
|
+
res = Net::HTTP.start(uri.host, uri.port) do | http |
|
|
27
|
+
http.get(uri.path)
|
|
28
|
+
end
|
|
29
|
+
@loaded_uri = uri
|
|
30
|
+
set_page(res.body)
|
|
31
|
+
rescue => err
|
|
32
|
+
msg = "Could not load page:\n#{err}"
|
|
33
|
+
Wx::MessageDialog.new(nil, msg, 'Error loading page',
|
|
34
|
+
Wx::OK|Wx::ICON_ERROR).show_modal
|
|
35
|
+
return ''
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
return @loaded_uri
|
|
39
|
+
when URI::Generic
|
|
40
|
+
if @loaded_uri and @loaded_uri.kind_of?(URI::HTTP)
|
|
41
|
+
return load_page_from_uri( @loaded_uri.merge(uri) )
|
|
42
|
+
elsif @loaded_uri # current viewing a file
|
|
43
|
+
if uri.to_s =~ /^\//
|
|
44
|
+
return load_file(uri.path)
|
|
45
|
+
elsif not uri.path.empty?
|
|
46
|
+
local_file = File.join( File.dirname(@loaded_uri.path), uri.path)
|
|
47
|
+
return load_file( local_file )
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
dlg = Wx::MessageDialog.new(nil, "Can't load link",
|
|
53
|
+
"Unable to load the link #{uri}",
|
|
54
|
+
Wx::ICON_ERROR)
|
|
55
|
+
dlg.show_modal
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def load_file(file)
|
|
59
|
+
@loaded_uri = URI.parse("file:////" + file)
|
|
60
|
+
super file
|
|
61
|
+
@loaded_uri
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def set_page(html)
|
|
65
|
+
super html
|
|
66
|
+
@html_src = html
|
|
67
|
+
get_related_frame.addr_bar.set_value(@loaded_uri.to_s)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def on_link_clicked(link)
|
|
71
|
+
href = link.get_href
|
|
72
|
+
if href =~ /^#/
|
|
73
|
+
super(link)
|
|
74
|
+
end
|
|
75
|
+
link_uri = URI.parse(href)
|
|
76
|
+
@loaded_uri = load_page_from_uri(link_uri)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def on_cell_mouse_hover(cell, x, y)
|
|
80
|
+
if link = cell.get_link
|
|
81
|
+
get_related_frame.set_status_text(link.get_href)
|
|
82
|
+
else
|
|
83
|
+
get_related_frame.set_status_text('')
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# The frame or self-contained window for this application
|
|
89
|
+
class HtmlFrame < Wx::Frame
|
|
90
|
+
attr_reader :html_win, :addr_bar
|
|
91
|
+
|
|
92
|
+
def initialize(title, pos, size, style = Wx::DEFAULT_FRAME_STYLE)
|
|
93
|
+
# A main application frame has no parent (nil)
|
|
94
|
+
# -1 means this frame will be supplied a default id
|
|
95
|
+
super(nil, -1, title, pos, size, style)
|
|
96
|
+
setup_menus
|
|
97
|
+
setup_panel
|
|
98
|
+
create_status_bar(2)
|
|
99
|
+
set_status_text("Welcome to wxRuby!")
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def setup_panel
|
|
103
|
+
panel = Wx::Panel.new(self, -1)
|
|
104
|
+
|
|
105
|
+
sizer = Wx::BoxSizer.new(Wx::VERTICAL)
|
|
106
|
+
top_sizer = Wx::BoxSizer.new(Wx::HORIZONTAL)
|
|
107
|
+
|
|
108
|
+
@go_butt = Wx::StaticText.new(panel, -1, 'Location:')
|
|
109
|
+
top_sizer.add(@go_butt, 0, Wx::ALL, 4)
|
|
110
|
+
@addr_bar = Wx::TextCtrl.new(panel, -1, 'HOME', Wx::DEFAULT_POSITION,
|
|
111
|
+
Wx::DEFAULT_SIZE, Wx::TE_READONLY)
|
|
112
|
+
top_sizer.add(@addr_bar, 1, Wx::ALL, 4)
|
|
113
|
+
sizer.add(top_sizer, 0, Wx::EXPAND|Wx::TOP|Wx::BOTTOM, 4)
|
|
114
|
+
|
|
115
|
+
@html_win = MyHtmlWindow.new(panel, -1)
|
|
116
|
+
@html_win.set_related_frame(self, 'HTML Window: %s')
|
|
117
|
+
@html_win.set_related_status_bar(2)
|
|
118
|
+
@html_win.set_page(DATA.read)
|
|
119
|
+
sizer.add(@html_win, 1, Wx::ALL|Wx::GROW, 4)
|
|
120
|
+
panel.set_sizer(sizer)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def setup_menus
|
|
124
|
+
menu_file = Wx::Menu.new()
|
|
125
|
+
menu_help = Wx::Menu.new()
|
|
126
|
+
# Using Wx::ID_ABOUT default id means the menu item will be placed
|
|
127
|
+
# in the correct platform-specific place
|
|
128
|
+
menu_help.append(Wx::ID_ABOUT, "&About...\tF1", "Show about dialog")
|
|
129
|
+
menu_file.append(Wx::ID_OPEN, "&Open File...\tCtrl-O", "Open File")
|
|
130
|
+
menu_file.append(Wx::ID_PRINT, "&Print...\tCtrl-P", "Print")
|
|
131
|
+
|
|
132
|
+
menu_file.append(Wx::ID_PREVIEW, "&Preview...\tCtrl-Shift-P",
|
|
133
|
+
"Print Preview")
|
|
134
|
+
menu_file.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit this program")
|
|
135
|
+
|
|
136
|
+
menu_bar = Wx::MenuBar.new()
|
|
137
|
+
menu_bar.append(menu_file, "&File")
|
|
138
|
+
menu_bar.append(menu_help, "&Help")
|
|
139
|
+
# Assign the menus to this frame
|
|
140
|
+
set_menu_bar(menu_bar)
|
|
141
|
+
# handle menu events
|
|
142
|
+
evt_menu(Wx::ID_OPEN) { on_open_file }
|
|
143
|
+
evt_menu(Wx::ID_PRINT) { on_print }
|
|
144
|
+
evt_menu(Wx::ID_PREVIEW) { on_preview }
|
|
145
|
+
evt_menu(Wx::ID_EXIT) { on_quit }
|
|
146
|
+
evt_menu(Wx::ID_ABOUT) { on_about }
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# end the application
|
|
150
|
+
def on_quit
|
|
151
|
+
close
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def on_open_file
|
|
155
|
+
f_dlg = Wx::FileDialog.new(self, "Open an HTML file", "", "",
|
|
156
|
+
"HTML files (*.html;*.htm)|.html;.htm)",
|
|
157
|
+
Wx::OPEN)
|
|
158
|
+
if not f_dlg.show_modal == Wx::ID_OK
|
|
159
|
+
return
|
|
160
|
+
end
|
|
161
|
+
html_file = f_dlg.get_path
|
|
162
|
+
|
|
163
|
+
@html_win.load_file(html_file)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# show an 'About' dialog
|
|
167
|
+
def on_about
|
|
168
|
+
msg = sprintf("This is the About dialog of the HTML sample.\n" \
|
|
169
|
+
"Welcome to wxRuby, version %s", Wx::WXRUBY_VERSION)
|
|
170
|
+
|
|
171
|
+
# create a simple message dialog with OK button
|
|
172
|
+
about_dlg = Wx::MessageDialog.new( self, msg, 'About WxRuby HTML',
|
|
173
|
+
Wx::OK|Wx::ICON_INFORMATION )
|
|
174
|
+
about_dlg.show_modal()
|
|
175
|
+
about_dlg.destroy()
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def on_preview
|
|
179
|
+
print = Wx::HtmlEasyPrinting.new('Print HTML', self)
|
|
180
|
+
print.preview_text(@html_win.html_src)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def on_print
|
|
184
|
+
print = Wx::HtmlEasyPrinting.new('Print HTML', self)
|
|
185
|
+
print.print_text(@html_win.html_src)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# utility function to find an icon relative to this ruby script
|
|
189
|
+
def local_icon_file(icon_name)
|
|
190
|
+
File.join( File.dirname(__FILE__), icon_name)
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# Wx::App is the container class for any wxruby app - only a single
|
|
195
|
+
# instance is required
|
|
196
|
+
class HtmlApp < Wx::App
|
|
197
|
+
def on_init
|
|
198
|
+
frame = HtmlFrame.new("Minimal wxRuby App",
|
|
199
|
+
Wx::Point.new(50, 50),
|
|
200
|
+
Wx::Size.new(450, 340))
|
|
201
|
+
set_app_name('HtmlDemo')
|
|
202
|
+
# required
|
|
203
|
+
frame.show()
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# Create an instance ...
|
|
208
|
+
app = HtmlApp.new
|
|
209
|
+
# ... and run the application
|
|
210
|
+
app.main_loop()
|
|
211
|
+
|
|
212
|
+
__END__
|
|
213
|
+
<html>
|
|
214
|
+
<head>
|
|
215
|
+
<title>WxRuby HTML Demo</title>
|
|
216
|
+
</head>
|
|
217
|
+
|
|
218
|
+
<body bgcolor="#ffffff">
|
|
219
|
+
<h1>The HtmlWindow widget</h1>
|
|
220
|
+
<p>This is a very simple demonstration of
|
|
221
|
+
<strong>Wx::HtmlWindow</strong>, a control for displaying hypertext. The
|
|
222
|
+
control understands most HTML tags, including links, tables, images,
|
|
223
|
+
lists and the venerable FONT tag. It does not know about CSS or
|
|
224
|
+
Javascript; it is not really intended for building a general-purpose
|
|
225
|
+
web browser.</p>
|
|
226
|
+
<h2>This demo</h2>
|
|
227
|
+
<p>In this demo you can open local files for viewing (by choosing the
|
|
228
|
+
File / Open). If you have an internet connection http:// links will be
|
|
229
|
+
downloaded as well. Its features are otherwise limited - for example,
|
|
230
|
+
this example doesn't know about HTML anchor targets, because it has
|
|
231
|
+
over-ridden default link handling to show how to subclass and
|
|
232
|
+
specialise HtmlWindow in Ruby.</a>
|
|
233
|
+
<h2>Html Easy Printing</h2>
|
|
234
|
+
<p>A useful feature included with WxRuby is a simple interface for
|
|
235
|
+
printing HTML. You can see this in action by choosing 'Print' or
|
|
236
|
+
'Preview' from the File menu.</p>
|
|
237
|
+
<h3>Further information</h3>
|
|
238
|
+
<p>Here's a table with some links</p>
|
|
239
|
+
<table border="1">
|
|
240
|
+
<tr>
|
|
241
|
+
<td>WxRuby online documentation</td>
|
|
242
|
+
<td><a href="http://wxruby.rubyforge.org/doc/">http://wxruby.rubyforge.org/doc/</a></td>
|
|
243
|
+
</tr>
|
|
244
|
+
<tr>
|
|
245
|
+
<td>WxRuby Wiki</td>
|
|
246
|
+
<td><a href="http://wxruby.rubyforge.org/wiki/wiki.pl">http://wxruby.rubyforge.org/wiki/wiki.pl</a></td>
|
|
247
|
+
</tr>
|
|
248
|
+
</table>
|
|
249
|
+
|
|
250
|
+
</body>
|
|
251
|
+
</html>
|