wxruby 1.9.5-universal-darwin-9
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/LICENSE +53 -0
- data/README +297 -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/dc.rb +57 -0
- data/lib/wx/classes/event.rb +5 -0
- data/lib/wx/classes/evthandler.rb +906 -0
- data/lib/wx/classes/font.rb +118 -0
- data/lib/wx/classes/gauge.rb +12 -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 +10 -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 +94 -0
- data/lib/wx/classes/treectrl.rb +44 -0
- data/lib/wx/classes/window.rb +82 -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/wx.rb +42 -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 +824 -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 +76 -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 +236 -0
- data/samples/drawing/images.rb +42 -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 +78 -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 +268 -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 +305 -0
@@ -0,0 +1,184 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# wxRuby2 Sample Code. Copyright (c) 2004-2007 wxRuby development team
|
3
|
+
# Freely reusable code: see SAMPLES-LICENSE.TXT for details
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'rubygems'
|
7
|
+
require 'wx'
|
8
|
+
rescue LoadError
|
9
|
+
require 'wx'
|
10
|
+
end
|
11
|
+
|
12
|
+
# This sample demonstrates how to dynamically connect and disconnect
|
13
|
+
# event handlers, and how to create custom event types and listeners
|
14
|
+
# associated with user-defined control classes.
|
15
|
+
|
16
|
+
# A custom type of event associated with a target control. Note that for
|
17
|
+
# user-defined controls, the associated event should inherit from
|
18
|
+
# Wx::CommandEvent rather than Wx::Event.
|
19
|
+
class TargetHitEvent < Wx::CommandEvent
|
20
|
+
# Create a new unique constant identifier, associate this class
|
21
|
+
# with events of that identifier, and create a shortcut 'evt_target'
|
22
|
+
# method for setting up this handler.
|
23
|
+
EVT_HIT_TARGET = Wx::EvtHandler.register_class(self, nil, 'evt_target', 1)
|
24
|
+
|
25
|
+
def initialize(target, score, distance)
|
26
|
+
# The constant id is the arg to super
|
27
|
+
super(EVT_HIT_TARGET)
|
28
|
+
# client_data should be used to store any information associated
|
29
|
+
# with the event.
|
30
|
+
self.client_data = { :score => score, :distance => distance }
|
31
|
+
self.id = target.get_id
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns the points score associated with this event
|
35
|
+
def score
|
36
|
+
client_data[:score]
|
37
|
+
end
|
38
|
+
|
39
|
+
# Returns the distance (in pixels) from the centre of the target
|
40
|
+
def distance
|
41
|
+
client_data[:distance]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# An example of a simple user-written control, which displays a
|
46
|
+
# "bulls-eye" like target, and sends events with a score and distance
|
47
|
+
class TargetControl < Wx::Window
|
48
|
+
TargetCircle = Struct.new(:radius, :score, :brush)
|
49
|
+
|
50
|
+
def initialize(parent, *args)
|
51
|
+
super(parent, *args)
|
52
|
+
|
53
|
+
# Set up the scores and sizes of the rings
|
54
|
+
@radii = [
|
55
|
+
TargetCircle[ 0.1, 20, Wx::RED_BRUSH ],
|
56
|
+
TargetCircle[ 0.25, 10, Wx::BLUE_BRUSH ],
|
57
|
+
TargetCircle[ 0.4, 5, Wx::GREEN_BRUSH ] ]
|
58
|
+
evt_paint { | e | on_paint(e) }
|
59
|
+
evt_left_down { | e | on_left_down(e) }
|
60
|
+
end
|
61
|
+
|
62
|
+
# What point is at the centre (assuming this control is always square)
|
63
|
+
def centre_point
|
64
|
+
size.width / 2
|
65
|
+
end
|
66
|
+
|
67
|
+
# Called whenever the target is repainted, draws a series of
|
68
|
+
# concentric circles
|
69
|
+
def on_paint(evt)
|
70
|
+
paint do | dc |
|
71
|
+
dc.clear
|
72
|
+
@radii.reverse_each do | circ |
|
73
|
+
dc.brush = circ.brush
|
74
|
+
dc.draw_circle(centre_point, centre_point,
|
75
|
+
( size.width * circ.radius).to_i )
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Test if the target was hit, and generate a TargetHitEvent if so
|
81
|
+
def on_left_down(evt)
|
82
|
+
# quick bit of pythagoras...
|
83
|
+
distance = Math.sqrt( ( evt.x - centre_point ) ** 2 +
|
84
|
+
( evt.y - centre_point ) ** 2 )
|
85
|
+
# See which target ring, if any, was hit by the event
|
86
|
+
@radii.each do | circ |
|
87
|
+
if distance < ( size.width * circ.radius)
|
88
|
+
# Create an instance of the event
|
89
|
+
evt = TargetHitEvent.new(self, circ.score, distance)
|
90
|
+
# This sends the event for processing by listeners
|
91
|
+
event_handler.process_event(evt)
|
92
|
+
break
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# Container frame for the target control
|
99
|
+
class TargetFrame < Wx::Frame
|
100
|
+
def initialize(title)
|
101
|
+
super(nil, :title => title, :size => [300, 300])
|
102
|
+
@tgt = TargetControl.new(self)
|
103
|
+
# This user-defined event handling method was set up by
|
104
|
+
# EvtHandler.register_class, above
|
105
|
+
evt_target(@tgt.get_id) { | e | on_target(e) }
|
106
|
+
@listening = true
|
107
|
+
evt_size { | e | on_size(e) }
|
108
|
+
setup_menus
|
109
|
+
create_status_bar
|
110
|
+
end
|
111
|
+
|
112
|
+
# What's done when the target is hit
|
113
|
+
def on_target(evt)
|
114
|
+
msg = "Target hit for score %i, %.2f pixels from centre" %
|
115
|
+
[ evt.score, evt.distance ]
|
116
|
+
self.status_text = msg
|
117
|
+
end
|
118
|
+
|
119
|
+
# Keep the target centred and square
|
120
|
+
def on_size(evt)
|
121
|
+
smaller = [ evt.size.width, evt.size.height ].min
|
122
|
+
@tgt.centre
|
123
|
+
@tgt.size = Wx::Size.new(smaller, smaller)
|
124
|
+
@tgt.refresh
|
125
|
+
end
|
126
|
+
|
127
|
+
# Toggle whether or not we are listening for events from the bulls-eye
|
128
|
+
# target
|
129
|
+
def on_toggle_connect
|
130
|
+
if @listening
|
131
|
+
# Remove :evt_target event handler for the @tgt
|
132
|
+
disconnect(@tgt.get_id, Wx::ID_ANY, :evt_target)
|
133
|
+
menu_bar.check(TOGGLE_LISTEN, false)
|
134
|
+
self.status_text = "Ignoring target events"
|
135
|
+
@listening = false
|
136
|
+
else
|
137
|
+
# Restore evt_target event handler for the @tgt
|
138
|
+
evt_target(@tgt.get_id) { | e | on_target(e) }
|
139
|
+
menu_bar.check(TOGGLE_LISTEN, true)
|
140
|
+
self.status_text = ''
|
141
|
+
@listening = true
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def on_about
|
146
|
+
msg = sprintf("This is the About dialog of the event handling sample.\n" \
|
147
|
+
"Welcome to wxRuby, version %s", Wx::WXRUBY_VERSION)
|
148
|
+
|
149
|
+
about_dlg = Wx::MessageDialog.new( self, msg, 'About Event Handling',
|
150
|
+
Wx::OK|Wx::ICON_INFORMATION )
|
151
|
+
about_dlg.show_modal
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
TOGGLE_LISTEN = 1001
|
156
|
+
def setup_menus
|
157
|
+
menu_file = Wx::Menu.new
|
158
|
+
menu_help = Wx::Menu.new
|
159
|
+
menu_help.append(Wx::ID_ABOUT, "&About...\tF1", "Show about dialog")
|
160
|
+
evt_menu(Wx::ID_ABOUT) { on_about }
|
161
|
+
menu_file.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit this program")
|
162
|
+
evt_menu(Wx::ID_EXIT) { self.close }
|
163
|
+
menu_file.append_check_item(TOGGLE_LISTEN, "L&isten for events",
|
164
|
+
"Toggle listening for target events")
|
165
|
+
evt_menu(TOGGLE_LISTEN) { on_toggle_connect }
|
166
|
+
|
167
|
+
menu_bar = Wx::MenuBar.new
|
168
|
+
menu_bar.append(menu_file, "&File")
|
169
|
+
menu_bar.append(menu_help, "&Help")
|
170
|
+
|
171
|
+
self.menu_bar = menu_bar
|
172
|
+
menu_bar.check(TOGGLE_LISTEN, true)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
class TargetApp < Wx::App
|
177
|
+
def on_init
|
178
|
+
TargetFrame.new("Event Handling Sample").show
|
179
|
+
return true
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
a = TargetApp.new
|
184
|
+
a.main_loop()
|
@@ -0,0 +1,202 @@
|
|
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_editor(6, 0, Wx::GridCellBoolEditor.new)
|
185
|
+
@grid.set_cell_renderer(6, 0, Wx::GridCellBoolRenderer.new)
|
186
|
+
@grid.set_cell_value(6, 1, 'Cell to the left displayed as boolean')
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
class GridApp < Wx::App
|
192
|
+
def on_init
|
193
|
+
frame = GridFrame.new(nil, -1, "Grid Sample",
|
194
|
+
Wx::Point.new(10, 100),
|
195
|
+
Wx::Size.new(630,400))
|
196
|
+
|
197
|
+
set_top_window(frame)
|
198
|
+
frame.show()
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
GridApp.new.main_loop()
|
@@ -0,0 +1,268 @@
|
|
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 initialize(*args)
|
22
|
+
super
|
23
|
+
evt_html_link_clicked self, :on_link_clicked
|
24
|
+
evt_html_cell_hover self, :on_hover
|
25
|
+
end
|
26
|
+
|
27
|
+
def load_page_from_uri(uri)
|
28
|
+
case uri
|
29
|
+
when URI::HTTP
|
30
|
+
Wx::BusyCursor.busy do
|
31
|
+
begin
|
32
|
+
res = Net::HTTP.start(uri.host, uri.port) do | http |
|
33
|
+
http.get(uri.path)
|
34
|
+
end
|
35
|
+
@loaded_uri = uri
|
36
|
+
set_page(res.body)
|
37
|
+
rescue => err
|
38
|
+
msg = "Could not load page:\n#{err}"
|
39
|
+
Wx::MessageDialog.new(nil, msg, 'Error loading page',
|
40
|
+
Wx::OK|Wx::ICON_ERROR).show_modal
|
41
|
+
return ''
|
42
|
+
end
|
43
|
+
end
|
44
|
+
return @loaded_uri
|
45
|
+
when URI::Generic
|
46
|
+
if @loaded_uri and @loaded_uri.kind_of?(URI::HTTP)
|
47
|
+
return load_page_from_uri( @loaded_uri.merge(uri) )
|
48
|
+
elsif @loaded_uri # current viewing a file
|
49
|
+
if uri.to_s =~ /^\//
|
50
|
+
return load_file(uri.path)
|
51
|
+
elsif not uri.path.empty?
|
52
|
+
local_file = File.join( File.dirname(@loaded_uri.path), uri.path)
|
53
|
+
return load_file( local_file )
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
dlg = Wx::MessageDialog.new(nil, "Can't load link",
|
59
|
+
"Unable to load the link #{uri}",
|
60
|
+
Wx::ICON_ERROR)
|
61
|
+
dlg.show_modal
|
62
|
+
end
|
63
|
+
|
64
|
+
def load_file(file)
|
65
|
+
@loaded_uri = URI.parse("file:////" + file)
|
66
|
+
super file
|
67
|
+
@loaded_uri
|
68
|
+
end
|
69
|
+
|
70
|
+
def set_page(html)
|
71
|
+
super html
|
72
|
+
@html_src = html
|
73
|
+
related_frame.addr_bar.value = @loaded_uri.to_s
|
74
|
+
end
|
75
|
+
|
76
|
+
def on_link_clicked(event)
|
77
|
+
href = event.link_info.href
|
78
|
+
return if href =~ /^#/
|
79
|
+
link_uri = URI.parse(href)
|
80
|
+
@loaded_uri = load_page_from_uri(link_uri)
|
81
|
+
end
|
82
|
+
|
83
|
+
def on_hover(event)
|
84
|
+
if link = event.cell.link
|
85
|
+
related_frame.set_status_text(link.href)
|
86
|
+
else
|
87
|
+
related_frame.status_text = ''
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# The frame or self-contained window for this application
|
93
|
+
class HtmlFrame < Wx::Frame
|
94
|
+
attr_reader :html_win, :addr_bar
|
95
|
+
|
96
|
+
def initialize(title, pos, size, style = Wx::DEFAULT_FRAME_STYLE)
|
97
|
+
# A main application frame has no parent (nil)
|
98
|
+
# -1 means this frame will be supplied a default id
|
99
|
+
super(nil, -1, title, pos, size, style)
|
100
|
+
setup_menus
|
101
|
+
setup_panel
|
102
|
+
create_status_bar
|
103
|
+
self.status_text = "Welcome to wxRuby!"
|
104
|
+
end
|
105
|
+
|
106
|
+
def setup_panel
|
107
|
+
panel = Wx::Panel.new(self, -1)
|
108
|
+
|
109
|
+
sizer = Wx::BoxSizer.new(Wx::VERTICAL)
|
110
|
+
top_sizer = Wx::BoxSizer.new(Wx::HORIZONTAL)
|
111
|
+
|
112
|
+
@go_butt = Wx::StaticText.new(panel, -1, 'Location:')
|
113
|
+
top_sizer.add(@go_butt, 0, Wx::ALL, 4)
|
114
|
+
@addr_bar = Wx::TextCtrl.new(panel, -1, 'HOME', Wx::DEFAULT_POSITION,
|
115
|
+
Wx::DEFAULT_SIZE, Wx::TE_READONLY)
|
116
|
+
top_sizer.add(@addr_bar, 1, Wx::ALL, 4)
|
117
|
+
sizer.add(top_sizer, 0, Wx::EXPAND|Wx::TOP|Wx::BOTTOM, 4)
|
118
|
+
|
119
|
+
@html_win = MyHtmlWindow.new(panel, -1)
|
120
|
+
@html_win.set_related_frame(self, 'HTML Window: %s')
|
121
|
+
|
122
|
+
@html_win.set_page(DATA.read)
|
123
|
+
sizer.add(@html_win, 1, Wx::ALL|Wx::GROW, 4)
|
124
|
+
panel.set_sizer(sizer)
|
125
|
+
end
|
126
|
+
|
127
|
+
def setup_menus
|
128
|
+
menu_file = Wx::Menu.new()
|
129
|
+
menu_help = Wx::Menu.new()
|
130
|
+
# Using Wx::ID_ABOUT default id means the menu item will be placed
|
131
|
+
# in the correct platform-specific place
|
132
|
+
menu_help.append(Wx::ID_ABOUT, "&About...\tF1", "Show about dialog")
|
133
|
+
menu_file.append(Wx::ID_OPEN, "&Open File...\tCtrl-O", "Open File")
|
134
|
+
menu_file.append(Wx::ID_HIGHEST + 1, "&Open URL...\tCtrl-U", "Open URL")
|
135
|
+
menu_file.append(Wx::ID_PRINT, "&Print...\tCtrl-P", "Print")
|
136
|
+
|
137
|
+
menu_file.append(Wx::ID_PREVIEW, "&Preview...\tCtrl-Shift-P",
|
138
|
+
"Print Preview")
|
139
|
+
menu_file.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit this program")
|
140
|
+
|
141
|
+
menu_bar = Wx::MenuBar.new()
|
142
|
+
menu_bar.append(menu_file, "&File")
|
143
|
+
menu_bar.append(menu_help, "&Help")
|
144
|
+
# Assign the menus to this frame
|
145
|
+
self.menu_bar = menu_bar
|
146
|
+
# handle menu events
|
147
|
+
evt_menu Wx::ID_OPEN, :on_open_file
|
148
|
+
evt_menu Wx::ID_HIGHEST + 1, :on_open_url
|
149
|
+
evt_menu Wx::ID_PRINT, :on_print
|
150
|
+
evt_menu Wx::ID_PREVIEW, :on_preview
|
151
|
+
evt_menu Wx::ID_EXIT, :on_quit
|
152
|
+
evt_menu Wx::ID_ABOUT, :on_about
|
153
|
+
end
|
154
|
+
|
155
|
+
# end the application
|
156
|
+
def on_quit
|
157
|
+
close
|
158
|
+
end
|
159
|
+
|
160
|
+
def on_open_file
|
161
|
+
f_dlg = Wx::FileDialog.new(self, "Open an HTML file", "", "",
|
162
|
+
"HTML files (*.html;*.htm)|*.html;*.htm)",
|
163
|
+
Wx::OPEN)
|
164
|
+
if not f_dlg.show_modal == Wx::ID_OK
|
165
|
+
return
|
166
|
+
end
|
167
|
+
html_file = f_dlg.get_path
|
168
|
+
if html_file.index("\\")
|
169
|
+
html_file = html_file.split("\\").join("/")
|
170
|
+
end
|
171
|
+
@html_win.load_file(html_file)
|
172
|
+
end
|
173
|
+
|
174
|
+
def on_open_url
|
175
|
+
url = Wx::get_text_from_user('Enter URL to open', 'Enter URL')
|
176
|
+
if not url.empty?
|
177
|
+
uri = URI.parse(url)
|
178
|
+
uri.path = '/' if uri.path.empty?
|
179
|
+
@html_win.load_page_from_uri(uri)
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
# show an 'About' dialog
|
184
|
+
def on_about
|
185
|
+
msg = sprintf("This is the About dialog of the HTML sample.\n" \
|
186
|
+
"Welcome to wxRuby, version %s", Wx::WXRUBY_VERSION)
|
187
|
+
|
188
|
+
# create a simple message dialog with OK button
|
189
|
+
about_dlg = Wx::MessageDialog.new( self, msg, 'About WxRuby HTML',
|
190
|
+
Wx::OK|Wx::ICON_INFORMATION )
|
191
|
+
about_dlg.show_modal()
|
192
|
+
about_dlg.destroy()
|
193
|
+
end
|
194
|
+
|
195
|
+
def on_preview
|
196
|
+
print = Wx::HtmlEasyPrinting.new('Print HTML', self)
|
197
|
+
print.preview_text(@html_win.html_src)
|
198
|
+
end
|
199
|
+
|
200
|
+
def on_print
|
201
|
+
print = Wx::HtmlEasyPrinting.new('Print HTML', self)
|
202
|
+
print.print_text(@html_win.html_src)
|
203
|
+
end
|
204
|
+
|
205
|
+
# utility function to find an icon relative to this ruby script
|
206
|
+
def local_icon_file(icon_name)
|
207
|
+
File.join( File.dirname(__FILE__), icon_name)
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
# Wx::App is the container class for any wxruby app - only a single
|
212
|
+
# instance is required
|
213
|
+
class HtmlApp < Wx::App
|
214
|
+
def on_init
|
215
|
+
frame = HtmlFrame.new("Minimal wxRuby App",
|
216
|
+
Wx::Point.new(50, 50),
|
217
|
+
Wx::Size.new(450, 340))
|
218
|
+
set_app_name('HtmlDemo')
|
219
|
+
# required
|
220
|
+
frame.show()
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
# Create an instance ...
|
225
|
+
app = HtmlApp.new
|
226
|
+
# ... and run the application
|
227
|
+
app.main_loop()
|
228
|
+
|
229
|
+
__END__
|
230
|
+
<html>
|
231
|
+
<head>
|
232
|
+
<title>WxRuby HTML Demo</title>
|
233
|
+
</head>
|
234
|
+
|
235
|
+
<body bgcolor="#ffffff">
|
236
|
+
<h1>The HtmlWindow widget</h1>
|
237
|
+
<p>This is a very simple demonstration of
|
238
|
+
<strong>Wx::HtmlWindow</strong>, a control for displaying hypertext. The
|
239
|
+
control understands most HTML tags, including links, tables, images,
|
240
|
+
lists and the venerable FONT tag. It does not know about CSS or
|
241
|
+
Javascript; it is not really intended for building a general-purpose
|
242
|
+
web browser.</p>
|
243
|
+
<h2>This demo</h2>
|
244
|
+
<p>In this demo you can open local files for viewing (by choosing the
|
245
|
+
File / Open). If you have an internet connection http:// links will be
|
246
|
+
downloaded as well. Its features are otherwise limited - for example,
|
247
|
+
this example doesn't know about HTML anchor targets, because it has
|
248
|
+
over-ridden default link handling to show how to subclass and
|
249
|
+
specialise HtmlWindow in Ruby.</a>
|
250
|
+
<h2>Html Easy Printing</h2>
|
251
|
+
<p>A useful feature included with WxRuby is a simple interface for
|
252
|
+
printing HTML. You can see this in action by choosing 'Print' or
|
253
|
+
'Preview' from the File menu.</p>
|
254
|
+
<h3>Further information</h3>
|
255
|
+
<p>Here's a table with some links</p>
|
256
|
+
<table border="1">
|
257
|
+
<tr>
|
258
|
+
<td>WxRuby online documentation</td>
|
259
|
+
<td><a href="http://wxruby.rubyforge.org/doc/">http://wxruby.rubyforge.org/doc/</a></td>
|
260
|
+
</tr>
|
261
|
+
<tr>
|
262
|
+
<td>WxRuby Wiki</td>
|
263
|
+
<td><a href="http://wxruby.rubyforge.org/wiki/wiki.pl">http://wxruby.rubyforge.org/wiki/wiki.pl</a></td>
|
264
|
+
</tr>
|
265
|
+
</table>
|
266
|
+
|
267
|
+
</body>
|
268
|
+
</html>
|