wxruby 1.9.3-universal-darwin
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 +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,34 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'wx'
|
5
|
+
rescue LoadError => no_wx_err
|
6
|
+
begin
|
7
|
+
require 'rubygems'
|
8
|
+
require 'wx'
|
9
|
+
rescue LoadError
|
10
|
+
raise no_wx_err
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module Demo
|
15
|
+
def Demo.run(frame, nb, log)
|
16
|
+
dlg = Wx::TextEntryDialog.new(frame, "What is your favorite programming language?", "Duh??", "Ruby")
|
17
|
+
dlg.set_value("Ruby is the best!")
|
18
|
+
if dlg.show_modal() == Wx::ID_OK
|
19
|
+
log.write_text("You entered: " + dlg.get_value().to_s + "\n")
|
20
|
+
end
|
21
|
+
dlg.destroy()
|
22
|
+
return nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def Demo.overview
|
26
|
+
return "This dialog allows the user to input text"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
if __FILE__ == $0
|
31
|
+
run_solo_lib = File.join( File.dirname(__FILE__), 'run.rb')
|
32
|
+
load run_solo_lib
|
33
|
+
run File.basename($0)
|
34
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'wx'
|
5
|
+
rescue LoadError => no_wx_err
|
6
|
+
begin
|
7
|
+
require 'rubygems'
|
8
|
+
require 'wx'
|
9
|
+
rescue LoadError
|
10
|
+
raise no_wx_err
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class TestPanel < Wx::Panel
|
15
|
+
def initialize(parent, log)
|
16
|
+
super(parent, -1)
|
17
|
+
@log = log
|
18
|
+
panel = Wx::Panel.new(self, -1)
|
19
|
+
buttons = Wx::BoxSizer.new(Wx::HORIZONTAL)
|
20
|
+
"These are toggle buttons".split().each do |word|
|
21
|
+
b = Wx::ToggleButton.new(panel, -1, word)
|
22
|
+
evt_togglebutton(b.get_id()) {|event| on_toggle(event)}
|
23
|
+
buttons.add(b, 0, Wx::ALL, 5)
|
24
|
+
end
|
25
|
+
panel.set_sizer(buttons)
|
26
|
+
buttons.fit(panel)
|
27
|
+
panel.move(Wx::Point.new(50,50))
|
28
|
+
end
|
29
|
+
|
30
|
+
def on_toggle(event)
|
31
|
+
@log.write_text("Button " + event.get_id().to_s() + " toggled")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
module Demo
|
36
|
+
def Demo.run(frame,nb,log)
|
37
|
+
win = TestPanel.new(nb, log)
|
38
|
+
return win
|
39
|
+
end
|
40
|
+
|
41
|
+
def Demo.overview
|
42
|
+
"Wx::ToggleButton is a button that stays pressed when clicked by the user. In other words, it is similar to Wx::CheckBox in functionality but looks like a Wx::Button."
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
if __FILE__ == $0
|
48
|
+
run_solo_lib = File.join( File.dirname(__FILE__), 'run.rb')
|
49
|
+
load run_solo_lib
|
50
|
+
run File.basename($0)
|
51
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'wx'
|
5
|
+
rescue LoadError => no_wx_err
|
6
|
+
begin
|
7
|
+
require 'rubygems'
|
8
|
+
require 'wx'
|
9
|
+
rescue LoadError
|
10
|
+
raise no_wx_err
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class TestToolBar < Wx::Frame
|
15
|
+
# returns a Bitmap icon object
|
16
|
+
def xpm_bitmap(base_name)
|
17
|
+
|
18
|
+
xpm_file = File.join( File.dirname(__FILE__), 'icons', base_name )
|
19
|
+
Wx::Bitmap.new(xpm_file, Wx::BITMAP_TYPE_XPM)
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(parent, log)
|
23
|
+
super(parent, -1, "Test ToolBar", Wx::DEFAULT_POSITION, Wx::Size.new(500,300))
|
24
|
+
@log = log
|
25
|
+
@timer = nil
|
26
|
+
evt_close {|event| on_close_window(event)}
|
27
|
+
|
28
|
+
Wx::Window.new(self, -1).set_background_colour(Wx::WHITE)
|
29
|
+
|
30
|
+
tb = create_tool_bar(Wx::TB_HORIZONTAL | Wx::NO_BORDER | Wx::TB_FLAT | Wx::TB_TEXT)
|
31
|
+
|
32
|
+
create_status_bar()
|
33
|
+
tb.add_tool(10, "New", xpm_bitmap('new.xpm'), "Long help for New")
|
34
|
+
evt_tool(10) {|event| on_tool_click(event)}
|
35
|
+
evt_tool_rclicked(10) {|event| on_tool_rclick(event)}
|
36
|
+
|
37
|
+
tb.add_tool(20, "Open", xpm_bitmap('open.xpm'), "Long help for Open")
|
38
|
+
evt_tool(20) {|event| on_tool_click(event)}
|
39
|
+
evt_tool_rclicked(20) {|event| on_tool_rclick(event)}
|
40
|
+
|
41
|
+
tb.add_separator()
|
42
|
+
|
43
|
+
tb.add_tool(30, "Copy", xpm_bitmap('copy.xpm'), "Long help for Copy")
|
44
|
+
evt_tool(30) {|event| on_tool_click(event)}
|
45
|
+
evt_tool_rclicked(30) {|event| on_tool_rclick(event)}
|
46
|
+
|
47
|
+
tb.add_tool(40, "Paste", xpm_bitmap('paste.xpm'), "Long help for Paste")
|
48
|
+
evt_tool(40) {|event| on_tool_click(event)}
|
49
|
+
evt_tool_rclicked(40) {|event| on_tool_rclick(event)}
|
50
|
+
|
51
|
+
tb.add_separator()
|
52
|
+
|
53
|
+
tb.add_check_tool(50, "", xpm_bitmap('tog1.xpm'),
|
54
|
+
Wx::NULL_BITMAP, "Toggle this")
|
55
|
+
evt_tool(50) {|event| on_tool_click(event)}
|
56
|
+
|
57
|
+
evt_tool_enter(-1) {|event| on_tool_enter(event)}
|
58
|
+
evt_tool_rclicked(-1) {|event| on_tool_rclick(event)}
|
59
|
+
evt_timer(5000) {|event| on_clear_sb(event)}
|
60
|
+
|
61
|
+
tb.add_separator()
|
62
|
+
cbID = 5000
|
63
|
+
choices = ["", "This", "is a", "wxComboBox"]
|
64
|
+
|
65
|
+
tb.add_control(Wx::ComboBox.new(tb, cbID, "", Wx::DEFAULT_POSITION, Wx::Size.new(150,-1), choices,
|
66
|
+
Wx::CB_DROPDOWN))
|
67
|
+
evt_combobox(cbID) {|event| on_combo(event)}
|
68
|
+
tb.add_control(Wx::TextCtrl.new(tb, -1, "ToolBar controls!!", Wx::DEFAULT_POSITION, Wx::Size.new(150,-1)))
|
69
|
+
|
70
|
+
tb.realize()
|
71
|
+
end
|
72
|
+
|
73
|
+
def on_tool_click(event)
|
74
|
+
@log.write_text("tool " + event.get_id().to_s() + " clicked")
|
75
|
+
tb = get_tool_bar()
|
76
|
+
tb.enable_tool(10, tb.get_tool_enabled(10) ? false : true)
|
77
|
+
end
|
78
|
+
|
79
|
+
def on_tool_rclick(event)
|
80
|
+
@log.write_text("tool " + event.get_id().to_s() + " right-clicked")
|
81
|
+
end
|
82
|
+
|
83
|
+
def on_combo(event)
|
84
|
+
@log.write_text("combobox item selected " + event.get_string())
|
85
|
+
end
|
86
|
+
|
87
|
+
def on_tool_enter(event)
|
88
|
+
@log.write_text("on_tool_enter: " + event.get_id().to_s + ", " + event.get_int().to_s())
|
89
|
+
if @timer == nil
|
90
|
+
@timer = Wx::Timer.new(self, 5000)
|
91
|
+
end
|
92
|
+
if @timer != nil
|
93
|
+
@timer.stop()
|
94
|
+
end
|
95
|
+
@timer.start(2000)
|
96
|
+
@timer.stop()
|
97
|
+
@timer.start(2000)
|
98
|
+
event.skip()
|
99
|
+
end
|
100
|
+
|
101
|
+
def on_clear_sb(event) # called for the timer event handler
|
102
|
+
set_status_text("")
|
103
|
+
@timer.stop()
|
104
|
+
@timer = nil
|
105
|
+
end
|
106
|
+
|
107
|
+
def on_close_window(event)
|
108
|
+
if @timer != nil
|
109
|
+
@timer.stop()
|
110
|
+
@timer = nil
|
111
|
+
end
|
112
|
+
destroy()
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
module Demo
|
117
|
+
def Demo.run(frame,nb,log)
|
118
|
+
win = TestToolBar.new(frame, log)
|
119
|
+
frame.otherWin = win
|
120
|
+
win.show()
|
121
|
+
end
|
122
|
+
|
123
|
+
def Demo.overview
|
124
|
+
"A toolbar is that familiar little rectangular strip below the menubar that hosts various 'buttons', which are usually shortcuts to menu commands."
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
|
129
|
+
if __FILE__ == $0
|
130
|
+
run_solo_lib = File.join( File.dirname(__FILE__), 'run.rb')
|
131
|
+
load run_solo_lib
|
132
|
+
run File.basename($0)
|
133
|
+
end
|
@@ -0,0 +1,192 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'wx'
|
5
|
+
rescue LoadError => no_wx_err
|
6
|
+
begin
|
7
|
+
require 'rubygems'
|
8
|
+
require 'wx'
|
9
|
+
rescue LoadError
|
10
|
+
raise no_wx_err
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class MyTreeCtrl < Wx::TreeCtrl
|
15
|
+
def initialize(parent, id, pos, size, style, log)
|
16
|
+
super(parent,id,pos,size,style)
|
17
|
+
@log = log
|
18
|
+
|
19
|
+
evt_left_dclick {|event| on_left_dclick(event)}
|
20
|
+
evt_right_down {|event| on_right_click(event)}
|
21
|
+
evt_right_up {|event| on_right_up(event)}
|
22
|
+
end
|
23
|
+
|
24
|
+
def on_left_dclick(event)
|
25
|
+
pt = Wx::Point.new(event.get_x(), event.get_y())
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def on_right_click(event)
|
30
|
+
pt = Wx::Point.new(event.get_x(), event.get_y())
|
31
|
+
id = hit_test(pt)
|
32
|
+
if id
|
33
|
+
@log.write_text("on_right_click: ")# + @tree.get_item_text(id))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def on_right_up(event)
|
38
|
+
pt = Wx::Point.new(event.get_x(), event.get_y())
|
39
|
+
id = hit_test(pt)
|
40
|
+
if id
|
41
|
+
@log.write_text("on_right_up: ")#+ @tree.get_item_text(id) + " (manually starting label edit)")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def on_compare_items(item1, item2)
|
46
|
+
t1 = get_item_text(item1)
|
47
|
+
t2 = get_item_text(item2)
|
48
|
+
@log.write_text('compare: ' + t1 + ' <> ' + t2)
|
49
|
+
if t1 < t2 then return -1 end
|
50
|
+
if t1 == t2 then return 0 end
|
51
|
+
return 1
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class TestTreeCtrlPanel < Wx::Panel
|
56
|
+
def initialize(parent, log)
|
57
|
+
# Use the WANTS_CHARS style so the panel doesn't eat the Return key
|
58
|
+
super(parent, -1, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::WANTS_CHARS)
|
59
|
+
evt_size {|event| on_size(event)}
|
60
|
+
|
61
|
+
@log = log
|
62
|
+
tID = 5000
|
63
|
+
|
64
|
+
@tree = MyTreeCtrl.new(self, tID, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TR_HAS_BUTTONS | Wx::TR_EDIT_LABELS, @log)
|
65
|
+
|
66
|
+
isz = Wx::Size.new(16,16)
|
67
|
+
il = Wx::ImageList.new(16,16)
|
68
|
+
bm = Wx::Bitmap.new
|
69
|
+
bm.copy_from_icon(Wx::ArtProvider::get_icon(Wx::ART_FOLDER, Wx::ART_OTHER, isz))
|
70
|
+
fldridx = il.add(bm)
|
71
|
+
bm.copy_from_icon(Wx::ArtProvider::get_icon(Wx::ART_FILE_OPEN, Wx::ART_OTHER, isz))
|
72
|
+
fldropenidx = il.add(bm)
|
73
|
+
bm.copy_from_icon(Wx::ArtProvider::get_icon(Wx::ART_FILE_OPEN, Wx::ART_OTHER, isz))
|
74
|
+
fileidx = il.add(bm)
|
75
|
+
bmp_file = File.join(File.dirname(__FILE__), 'icons', 'wxwin16x16.xpm')
|
76
|
+
smileidx = il.add(Wx::Bitmap.new(bmp_file))
|
77
|
+
|
78
|
+
@tree.set_image_list(il)
|
79
|
+
@il = il
|
80
|
+
|
81
|
+
@root = @tree.add_root("The Root Item")
|
82
|
+
@tree.set_item_image(@root, fldridx, Wx::TREE_ITEM_ICON_NORMAL)
|
83
|
+
@tree.set_item_image(@root, fldropenidx, Wx::TREE_ITEM_ICON_EXPANDED)
|
84
|
+
|
85
|
+
0.upto(15) do |x|
|
86
|
+
child = @tree.append_item(@root, "Item " + x.to_s())
|
87
|
+
@tree.set_item_image(child, fldridx, Wx::TREE_ITEM_ICON_NORMAL)
|
88
|
+
@tree.set_item_image(child, fldropenidx, Wx::TREE_ITEM_ICON_EXPANDED)
|
89
|
+
0.upto(4) do |y|
|
90
|
+
last = @tree.append_item(child, "item " + x.to_s() + "-" + (?a + y).chr)
|
91
|
+
@tree.set_item_image(last, fldridx, Wx::TREE_ITEM_ICON_NORMAL)
|
92
|
+
@tree.set_item_image(last, fldropenidx, Wx::TREE_ITEM_ICON_EXPANDED)
|
93
|
+
0.upto(4) do |z|
|
94
|
+
item = @tree.append_item(last, "item " + x.to_s() + "-" + (?a + y).chr + "-" + z.to_s())
|
95
|
+
@tree.set_item_image(item, fileidx, Wx::TREE_ITEM_ICON_NORMAL)
|
96
|
+
@tree.set_item_image(item, smileidx, Wx::TREE_ITEM_ICON_SELECTED)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
@tree.expand(@root)
|
102
|
+
evt_tree_item_expanded(tID) {|event| on_item_expanded(event)}
|
103
|
+
evt_tree_item_collapsed(tID) {|event| on_item_collapsed(event)}
|
104
|
+
evt_tree_sel_changed(tID) {|event| on_sel_changed(event)}
|
105
|
+
evt_tree_begin_label_edit(tID) {|event| on_begin_edit(event)}
|
106
|
+
evt_tree_end_label_edit(tID) {|event| on_end_edit(event)}
|
107
|
+
evt_tree_item_activated(tID) {|event| on_activate(event)}
|
108
|
+
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
def on_begin_edit(event)
|
114
|
+
@log.write_text("on_begin_edit")
|
115
|
+
# show how to prevent edit
|
116
|
+
if @tree.get_item_text(event.get_item()) == "The Root Item"
|
117
|
+
@log.write_text("You can't edit this one...")
|
118
|
+
|
119
|
+
# Let's just see what's visible of its children
|
120
|
+
cookie = 0
|
121
|
+
root = event.get_item()
|
122
|
+
child, cookie = @tree.get_first_child(root)
|
123
|
+
while child != nil
|
124
|
+
@log.write_text("Child [" + @tree.get_item_text(child) + "] visible = " + @tree.is_visible(child).to_s())
|
125
|
+
child,cookie = @tree.get_next_child(root, cookie)
|
126
|
+
end
|
127
|
+
event.veto()
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def on_end_edit(event)
|
132
|
+
@log.write_text("on_end_edit")
|
133
|
+
#show how to reject edit, we'll not allow any digits
|
134
|
+
nums = ("0".."9").to_a()
|
135
|
+
x = event.get_label()
|
136
|
+
x.each_byte do |byte|
|
137
|
+
if nums.include?(byte.chr())
|
138
|
+
@log.write_text("You can't enter digits...")
|
139
|
+
event.veto()
|
140
|
+
return
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def on_size(event)
|
146
|
+
size = get_client_size()
|
147
|
+
@tree.set_dimensions(0,0,size.x, size.y)
|
148
|
+
end
|
149
|
+
|
150
|
+
def on_item_expanded(event)
|
151
|
+
item = event.get_item()
|
152
|
+
@log.write_text("on_item_expanded: " + @tree.get_item_text(item))
|
153
|
+
end
|
154
|
+
|
155
|
+
def on_item_collapsed(event)
|
156
|
+
item = event.get_item()
|
157
|
+
@log.write_text("on_item_collapsed: " + @tree.get_item_text(item))
|
158
|
+
end
|
159
|
+
|
160
|
+
def on_sel_changed(event)
|
161
|
+
@item = event.get_item()
|
162
|
+
if @item.nonzero?
|
163
|
+
@log.write_text("on_sel_changed: " + @tree.get_item_text(@item))
|
164
|
+
# if Wx::PLATFORM == "WXMSW"
|
165
|
+
#@log.write_text("BoundingRect: " + @tree.get_bounding_rect(@item))
|
166
|
+
#end
|
167
|
+
end
|
168
|
+
event.skip()
|
169
|
+
end
|
170
|
+
|
171
|
+
def on_activate(event)
|
172
|
+
@log.write_text("on_activate: " + @tree.get_item_text(@item))
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
module Demo
|
177
|
+
def Demo.run(frame, nb, log)
|
178
|
+
win = TestTreeCtrlPanel.new(nb, log)
|
179
|
+
return win
|
180
|
+
end
|
181
|
+
|
182
|
+
def Demo.overview
|
183
|
+
return ""
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
|
188
|
+
if __FILE__ == $0
|
189
|
+
run_solo_lib = File.join( File.dirname(__FILE__), 'run.rb')
|
190
|
+
load run_solo_lib
|
191
|
+
run File.basename($0)
|
192
|
+
end
|
@@ -0,0 +1,275 @@
|
|
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
|
+
require 'date'
|
18
|
+
|
19
|
+
|
20
|
+
Calendar_File_About = ID_ABOUT
|
21
|
+
Calendar_File_Quit = ID_EXIT
|
22
|
+
Calendar_Cal_Monday = 200
|
23
|
+
Calendar_Cal_Holidays = 201
|
24
|
+
Calendar_Cal_Special = 202
|
25
|
+
Calendar_Cal_Month = 203
|
26
|
+
Calendar_Cal_Year = 204
|
27
|
+
Calendar_Cal_SeqMonth = 205
|
28
|
+
Calendar_Cal_SurroundWeeks = 206
|
29
|
+
|
30
|
+
|
31
|
+
def format_date(d)
|
32
|
+
return "#{d.year}-#{d.mon}-#{d.day}"
|
33
|
+
end
|
34
|
+
|
35
|
+
class MyCalendar < CalendarCtrl
|
36
|
+
def initialize(parent, display_frame, initial_date, calendar_flags)
|
37
|
+
super(parent, -1,
|
38
|
+
initial_date,
|
39
|
+
DEFAULT_POSITION,
|
40
|
+
DEFAULT_SIZE,
|
41
|
+
calendar_flags | RAISED_BORDER)
|
42
|
+
|
43
|
+
@display = display_frame
|
44
|
+
@date = initial_date
|
45
|
+
@weekday_names = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
|
46
|
+
|
47
|
+
id = get_id
|
48
|
+
evt_calendar(id) {|event| on_calendar(event)}
|
49
|
+
evt_calendar_month(id) {on_cal_month_change}
|
50
|
+
evt_calendar_year(id) {on_cal_year_change}
|
51
|
+
evt_calendar_sel_changed(id) {|event| on_calendar_change(event)}
|
52
|
+
evt_calendar_weekday_clicked(id) {|event| on_calendar_weekday_click(event)}
|
53
|
+
end
|
54
|
+
|
55
|
+
def on_calendar(event)
|
56
|
+
@date = event.get_date
|
57
|
+
@display.set_date(@date)
|
58
|
+
end
|
59
|
+
|
60
|
+
def on_calendar_change(event)
|
61
|
+
@date = event.get_date
|
62
|
+
log_status("Selected date: #{format_date(@date)}")
|
63
|
+
end
|
64
|
+
|
65
|
+
def on_cal_month_change
|
66
|
+
log_status("Calendar month changed")
|
67
|
+
end
|
68
|
+
|
69
|
+
def on_cal_year_change
|
70
|
+
log_status("Calendar year changed")
|
71
|
+
end
|
72
|
+
|
73
|
+
def on_calendar_weekday_click(event)
|
74
|
+
wday = event.get_week_day
|
75
|
+
log_status("Clicked on #{@weekday_names[wday]}")
|
76
|
+
end
|
77
|
+
|
78
|
+
attr_reader :date
|
79
|
+
end
|
80
|
+
|
81
|
+
class MyFrame < Frame
|
82
|
+
def initialize(title)
|
83
|
+
super(nil, -1, title)
|
84
|
+
@panel = Wx::Panel.new(self)
|
85
|
+
add_menu_bar
|
86
|
+
add_status_bar
|
87
|
+
|
88
|
+
@calendar_flags = CAL_MONDAY_FIRST | CAL_SHOW_HOLIDAYS
|
89
|
+
|
90
|
+
now = DateTime.now
|
91
|
+
@calendar = MyCalendar.new(@panel, self, now, @calendar_flags)
|
92
|
+
|
93
|
+
@sizer = BoxSizer.new(VERTICAL)
|
94
|
+
configure_window
|
95
|
+
|
96
|
+
evt_menu(Calendar_File_Quit) {on_quit}
|
97
|
+
evt_menu(Calendar_File_About) {on_about}
|
98
|
+
|
99
|
+
evt_menu(Calendar_Cal_Monday) {|event| on_cal_monday(event)}
|
100
|
+
evt_menu(Calendar_Cal_Holidays) {|event| on_cal_holidays(event)}
|
101
|
+
evt_menu(Calendar_Cal_Special) {|event| on_cal_special(event)}
|
102
|
+
|
103
|
+
evt_menu(Calendar_Cal_Month) {|event| on_cal_allow_month(event)}
|
104
|
+
evt_menu(Calendar_Cal_Year) {|event| on_cal_allow_year(event)}
|
105
|
+
|
106
|
+
evt_menu(Calendar_Cal_SeqMonth) {|event| on_cal_seq_month(event)}
|
107
|
+
evt_menu(Calendar_Cal_SurroundWeeks) {|event| on_cal_show_surrounding_weeks(event)}
|
108
|
+
|
109
|
+
evt_update_ui(Calendar_Cal_Year) {|event| on_allow_year_update(event)}
|
110
|
+
end
|
111
|
+
|
112
|
+
def add_menu_bar
|
113
|
+
# create a menu bar
|
114
|
+
menu_file = Menu.new
|
115
|
+
|
116
|
+
menu_file.append(Calendar_File_About, "&About...\tCtrl-A", "Show about dialog")
|
117
|
+
menu_file.append_separator()
|
118
|
+
menu_file.append(Calendar_File_Quit, "E&xit\tAlt-X", "Quit self program")
|
119
|
+
|
120
|
+
menu_cal = Menu.new
|
121
|
+
menu_cal.append(Calendar_Cal_Monday,
|
122
|
+
"Monday &first weekday\tCtrl-F",
|
123
|
+
"Toggle between Mon and Sun as the first week day",
|
124
|
+
ITEM_CHECK)
|
125
|
+
menu_cal.append(Calendar_Cal_Holidays, "Show &holidays\tCtrl-H",
|
126
|
+
"Toggle highlighting the holidays",
|
127
|
+
ITEM_CHECK)
|
128
|
+
menu_cal.append(Calendar_Cal_Special, "Highlight &special dates\tCtrl-S",
|
129
|
+
"Test custom highlighting",
|
130
|
+
ITEM_CHECK)
|
131
|
+
menu_cal.append(Calendar_Cal_SurroundWeeks,
|
132
|
+
"Show s&urrounding weeks\tCtrl-W",
|
133
|
+
"Show the neighbouring weeks in the prev/next month",
|
134
|
+
ITEM_CHECK)
|
135
|
+
menu_cal.append_separator()
|
136
|
+
menu_cal.append(Calendar_Cal_SeqMonth,
|
137
|
+
"To&ggle month selector style\tCtrl-G",
|
138
|
+
"Use another style for the calendar controls",
|
139
|
+
ITEM_CHECK)
|
140
|
+
menu_cal.append(Calendar_Cal_Month, "&Month can be changed\tCtrl-M",
|
141
|
+
"Allow changing the month in the calendar",
|
142
|
+
ITEM_CHECK)
|
143
|
+
menu_cal.append(Calendar_Cal_Year, "&Year can be changed\tCtrl-Y",
|
144
|
+
"Allow changing the year in the calendar",
|
145
|
+
ITEM_CHECK)
|
146
|
+
|
147
|
+
# now append the freshly created menu to the menu bar...
|
148
|
+
menu_bar = MenuBar.new
|
149
|
+
menu_bar.append(menu_file, "&File")
|
150
|
+
menu_bar.append(menu_cal, "&Calendar")
|
151
|
+
|
152
|
+
menu_bar.check(Calendar_Cal_Monday, TRUE)
|
153
|
+
menu_bar.check(Calendar_Cal_Holidays, TRUE)
|
154
|
+
menu_bar.check(Calendar_Cal_Month, TRUE)
|
155
|
+
menu_bar.check(Calendar_Cal_Year, TRUE)
|
156
|
+
|
157
|
+
# ... and attach self menu bar to the frame
|
158
|
+
set_menu_bar(menu_bar)
|
159
|
+
end
|
160
|
+
|
161
|
+
def add_status_bar
|
162
|
+
# create a status bar just for fun (by default with 1 pane only)
|
163
|
+
create_status_bar
|
164
|
+
set_status_text("Welcome to Windows!")
|
165
|
+
end
|
166
|
+
|
167
|
+
def configure_window
|
168
|
+
@sizer.add(@calendar, 0, Wx::ALIGN_CENTRE|Wx::ALL, 5)
|
169
|
+
@sizer.set_size_hints(@panel)
|
170
|
+
layout
|
171
|
+
@panel.set_sizer(@sizer)
|
172
|
+
end
|
173
|
+
|
174
|
+
def on_quit
|
175
|
+
# true is to force the frame to close
|
176
|
+
close(true)
|
177
|
+
end
|
178
|
+
|
179
|
+
def on_about
|
180
|
+
message_box("wxRuby CalendarCtrl sample\nby Kevin Smith\n" +
|
181
|
+
"based on the wxWidgets version by Vadim Zeitlin",
|
182
|
+
"About Calendar", OK | ICON_INFORMATION, self)
|
183
|
+
end
|
184
|
+
|
185
|
+
def on_cal_monday(event)
|
186
|
+
enable = get_menu_bar().is_checked(event.get_id())
|
187
|
+
toggle_cal_style(enable, CAL_MONDAY_FIRST)
|
188
|
+
end
|
189
|
+
|
190
|
+
def on_cal_holidays(event)
|
191
|
+
enable = get_menu_bar().is_checked(event.get_id())
|
192
|
+
@calendar.enable_holiday_display(enable)
|
193
|
+
end
|
194
|
+
|
195
|
+
def on_cal_special(event)
|
196
|
+
highlight_special(get_menu_bar().is_checked(event.get_id()))
|
197
|
+
end
|
198
|
+
|
199
|
+
def on_cal_allow_month(event)
|
200
|
+
allow = get_menu_bar().is_checked(event.get_id())
|
201
|
+
@calendar.enable_month_change(allow)
|
202
|
+
end
|
203
|
+
|
204
|
+
def on_cal_allow_year(event)
|
205
|
+
allow = get_menu_bar().is_checked(event.get_id())
|
206
|
+
@calendar.enable_year_change(allow)
|
207
|
+
end
|
208
|
+
|
209
|
+
def on_cal_seq_month(event)
|
210
|
+
allow = get_menu_bar().is_checked(event.get_id())
|
211
|
+
toggle_cal_style(allow, CAL_SEQUENTIAL_MONTH_SELECTION)
|
212
|
+
end
|
213
|
+
|
214
|
+
def on_cal_show_surrounding_weeks(event)
|
215
|
+
allow = get_menu_bar().is_checked(event.get_id())
|
216
|
+
toggle_cal_style(allow, CAL_SHOW_SURROUNDING_WEEKS)
|
217
|
+
end
|
218
|
+
|
219
|
+
def on_allow_year_update(event)
|
220
|
+
event.enable( get_menu_bar().is_checked(Calendar_Cal_Month))
|
221
|
+
end
|
222
|
+
|
223
|
+
def toggle_cal_style(on,flag)
|
224
|
+
style = @calendar.get_window_style_flag
|
225
|
+
date = @calendar.date
|
226
|
+
@sizer.detach(@calendar)
|
227
|
+
@calendar.destroy
|
228
|
+
if on
|
229
|
+
style |= flag
|
230
|
+
else
|
231
|
+
style &= ~flag
|
232
|
+
end
|
233
|
+
@calendar = MyCalendar.new(@panel, self, date, style)
|
234
|
+
@sizer.add(@calendar, 0, Wx::ALIGN_CENTRE|Wx::ALL, 5)
|
235
|
+
@panel.layout
|
236
|
+
end
|
237
|
+
|
238
|
+
def highlight_special(on)
|
239
|
+
if on
|
240
|
+
attr_red_circle = CalendarDateAttr.new(CAL_BORDER_ROUND, RED)
|
241
|
+
attr_green_square = CalendarDateAttr.new(CAL_BORDER_SQUARE, GREEN)
|
242
|
+
# This wraps correctly, but causes problems because the colour is freed
|
243
|
+
# when the attribute is reset.
|
244
|
+
#
|
245
|
+
# attr_header_like = CalendarDateAttr.new(BLUE, LIGHT_GREY)
|
246
|
+
|
247
|
+
@calendar.set_attr(17, attr_red_circle)
|
248
|
+
@calendar.set_attr(29, attr_green_square)
|
249
|
+
# @calendar.set_attr(13, attr_header_like)
|
250
|
+
else
|
251
|
+
@calendar.reset_attr(17)
|
252
|
+
@calendar.reset_attr(29)
|
253
|
+
# @calendar.reset_attr(13)
|
254
|
+
end
|
255
|
+
@calendar.refresh()
|
256
|
+
end
|
257
|
+
|
258
|
+
def set_date(d)
|
259
|
+
str = "%s-%s-%s" % [ d.year, d.mon, d.day ]
|
260
|
+
Wx::MessageDialog.new( self, "The selected date is #{str}",
|
261
|
+
"Date chosen" ).show_modal
|
262
|
+
end
|
263
|
+
|
264
|
+
end
|
265
|
+
|
266
|
+
|
267
|
+
class RbApp < App
|
268
|
+
def on_init()
|
269
|
+
frame = MyFrame.new("Calendar Windows sample")
|
270
|
+
frame.show(true)
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
a = RbApp.new
|
275
|
+
a.main_loop()
|