wxruby-ruby19 1.9.8-x86-darwin-9 → 1.9.10-x86-darwin-9
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +53 -0
- data/README +297 -0
- data/lib/wx.rb +2 -2
- data/lib/wx/accessors.rb +7 -1
- data/lib/wx/classes/app.rb +10 -4
- data/lib/wx/classes/bitmap.rb +29 -1
- data/lib/wx/classes/clipboard.rb +19 -3
- data/lib/wx/classes/colour.rb +6 -4
- data/lib/wx/classes/data_object.rb +14 -0
- data/lib/wx/classes/data_object_simple.rb +6 -0
- data/lib/wx/classes/dataformat.rb +23 -0
- data/lib/wx/classes/evthandler.rb +79 -4
- data/lib/wx/classes/genericdirctrl.rb +36 -0
- data/lib/wx/classes/grid.rb +8 -0
- data/lib/wx/classes/hboxsizer.rb +6 -0
- data/lib/wx/classes/icon.rb +12 -1
- data/lib/wx/classes/image.rb +13 -1
- data/lib/wx/classes/listctrl.rb +12 -0
- data/lib/wx/classes/point.rb +8 -0
- data/lib/wx/classes/rect.rb +10 -1
- data/lib/wx/classes/richtextctrl.rb +63 -0
- data/lib/wx/classes/size.rb +9 -0
- data/lib/wx/classes/sizer.rb +18 -3
- data/lib/wx/classes/standardpaths.rb +9 -0
- data/lib/wx/classes/texturlevent.rb +14 -2
- data/lib/wx/classes/toolbar.rb +4 -6
- data/lib/wx/classes/vboxsizer.rb +6 -0
- data/lib/wx/classes/window.rb +7 -0
- data/lib/wx/classes/xmlresource.rb +17 -0
- data/lib/wx/helpers.rb +16 -1
- data/lib/wx/keyword_ctors.rb +3 -2
- data/lib/wx/keyword_defs.rb +56 -5
- data/lib/wx/version.rb +1 -1
- data/lib/wxruby2.bundle +0 -0
- data/samples/SAMPLES-LICENSE.TXT +18 -0
- data/samples/aui/aui.rb +1356 -0
- data/samples/bigdemo/About.rbw +39 -0
- data/samples/bigdemo/ColorPanel.rbw +23 -0
- data/samples/bigdemo/GridSimple.rbw +78 -0
- data/samples/bigdemo/MDIDemo.rbw +57 -0
- data/samples/bigdemo/PopupMenu.rbw +149 -0
- data/samples/bigdemo/ShapedWindow.rbw +131 -0
- data/samples/bigdemo/Sizers.rbw +543 -0
- data/samples/bigdemo/bigdemo.rb +823 -0
- data/samples/bigdemo/demoTemplate.rbw +33 -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 +90 -0
- data/samples/bigdemo/tips.txt +7 -0
- data/samples/bigdemo/utils.rb +12 -0
- data/samples/bigdemo/wxArtProvider.rbw +281 -0
- data/samples/bigdemo/wxBitmapButton.rbw +65 -0
- data/samples/bigdemo/wxButton.rbw +64 -0
- data/samples/bigdemo/wxCalendarCtrl.rbw +60 -0
- data/samples/bigdemo/wxCheckBox.rbw +50 -0
- data/samples/bigdemo/wxCheckListBox.rbw +65 -0
- data/samples/bigdemo/wxChoice.rbw +47 -0
- data/samples/bigdemo/wxChoicebook.rbw +78 -0
- data/samples/bigdemo/wxColourDialog.rbw +31 -0
- data/samples/bigdemo/wxComboBox.rbw +77 -0
- data/samples/bigdemo/wxCursor.rbw +136 -0
- data/samples/bigdemo/wxDialog.rbw +74 -0
- data/samples/bigdemo/wxDirDialog.rbw +29 -0
- data/samples/bigdemo/wxDragImage.rbw +70 -0
- data/samples/bigdemo/wxFileDialog.rbw +37 -0
- data/samples/bigdemo/wxFileDialog_Save.rbw +35 -0
- data/samples/bigdemo/wxFindReplaceDialog.rbw +82 -0
- data/samples/bigdemo/wxFontDialog.rbw +173 -0
- data/samples/bigdemo/wxFrame.rbw +53 -0
- data/samples/bigdemo/wxGauge.rbw +71 -0
- data/samples/bigdemo/wxGenericDirCtrl.rbw +74 -0
- data/samples/bigdemo/wxGrid.rbw +66 -0
- data/samples/bigdemo/wxHtmlHelpController.rbw +52 -0
- data/samples/bigdemo/wxListBox.rbw +140 -0
- data/samples/bigdemo/wxListCtrl_virtual.rbw +112 -0
- data/samples/bigdemo/wxMDIWindows.rbw +50 -0
- data/samples/bigdemo/wxMenu.rbw +236 -0
- data/samples/bigdemo/wxMessageDialog.rbw +27 -0
- data/samples/bigdemo/wxMiniFrame.rbw +70 -0
- data/samples/bigdemo/wxMultipleChoiceDialog.rbw +32 -0
- data/samples/bigdemo/wxNotebook.rbw +136 -0
- data/samples/bigdemo/wxProgressDialog.rbw +43 -0
- data/samples/bigdemo/wxRadioBox.rbw +72 -0
- data/samples/bigdemo/wxRadioButton.rbw +125 -0
- data/samples/bigdemo/wxSashWindow.rbw +141 -0
- data/samples/bigdemo/wxScrolledMessageDialog.rbw +57 -0
- data/samples/bigdemo/wxScrolledWindow.rbw +199 -0
- data/samples/bigdemo/wxSingleChoiceDialog.rbw +33 -0
- data/samples/bigdemo/wxSlider.rbw +42 -0
- data/samples/bigdemo/wxSpinButton.rbw +50 -0
- data/samples/bigdemo/wxSpinCtrl.rbw +51 -0
- data/samples/bigdemo/wxSplitterWindow.rbw +63 -0
- data/samples/bigdemo/wxStaticBitmap.rbw +51 -0
- data/samples/bigdemo/wxStaticText.rbw +55 -0
- data/samples/bigdemo/wxStatusBar.rbw +126 -0
- data/samples/bigdemo/wxTextCtrl.rbw +149 -0
- data/samples/bigdemo/wxTextEntryDialog.rbw +31 -0
- data/samples/bigdemo/wxToggleButton.rbw +49 -0
- data/samples/bigdemo/wxToolBar.rbw +131 -0
- data/samples/bigdemo/wxTreeCtrl.rbw +191 -0
- data/samples/calendar/calendar.rb +256 -0
- data/samples/caret/caret.rb +282 -0
- data/samples/caret/mondrian.xpm +44 -0
- data/samples/controls/controls.rb +1136 -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 +797 -0
- data/samples/dialogs/tips.txt +18 -0
- data/samples/dragdrop/dragdrop.rb +177 -0
- data/samples/drawing/graphics_drawing.rb +235 -0
- data/samples/drawing/images.rb +37 -0
- data/samples/drawing/paperclip.png +0 -0
- data/samples/etc/activation.rb +102 -0
- data/samples/etc/choice.rb +67 -0
- data/samples/etc/miniframe.rb +79 -0
- data/samples/etc/sash.rb +130 -0
- data/samples/etc/scrollwin.rb +110 -0
- data/samples/etc/system_settings.rb +252 -0
- data/samples/etc/threaded.rb +72 -0
- data/samples/etc/toolbar_sizer_additem.rb +55 -0
- data/samples/etc/wizard.rb +74 -0
- data/samples/event/event.rb +182 -0
- data/samples/event/update_ui_event.rb +70 -0
- data/samples/grid/grid.rb +198 -0
- data/samples/grid/gridtablebase.rb +148 -0
- data/samples/html/html.rb +262 -0
- data/samples/listbook/listbook.rb +174 -0
- data/samples/listbook/listbook.xrc +370 -0
- data/samples/mdi/mdi.rb +85 -0
- data/samples/media/mediactrl.rb +167 -0
- data/samples/minimal/minimal.rb +77 -0
- data/samples/minimal/mondrian.ico +0 -0
- data/samples/minimal/mondrian.png +0 -0
- data/samples/minimal/nothing.rb +16 -0
- data/samples/opengl/cube.rb +117 -0
- data/samples/printing/mondrian.ico +0 -0
- data/samples/printing/mondrian.xpm +44 -0
- data/samples/printing/printing.rb +487 -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/format-text-bold.png +0 -0
- data/samples/text/format-text-italic.png +0 -0
- data/samples/text/format-text-underline.png +0 -0
- data/samples/text/mondrian.ico +0 -0
- data/samples/text/mondrian.xpm +44 -0
- data/samples/text/rich_textctrl.rb +98 -0
- data/samples/text/scintilla.rb +169 -0
- data/samples/text/textctrl.rb +111 -0
- data/samples/text/unicode.rb +242 -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 +1166 -0
- data/samples/xrc/samples.xrc +46 -0
- data/samples/xrc/xrc_sample.rb +76 -0
- metadata +17 -3
@@ -0,0 +1,18 @@
|
|
1
|
+
Startup tips are documented in the "Startup tips overview" section of wxWindows documentation.
|
2
|
+
These tips are being read from the tips.txt text file in this directory. Each line of the file contains a single tip.
|
3
|
+
If you close and open this tips dialog, you will notice that the tip numbers start at the point you were at when you closed the dialog last time. This allows easy cycling through the entire list of tips, instead of always showing the initial tips over and over.
|
4
|
+
Often you will want to save to the application's wxConfig, the last tip that the user saw, as well as whether they want to see tips on startup.
|
5
|
+
Comments in the tips file have a # as the first character. Comments are automatically skipped over. See the tips.txt file in this directory for the example.
|
6
|
+
# This line is a comment since it started with a #, and is skipped.
|
7
|
+
Blank lines in the tip file are also automatically skipped over. Lines with only spaces are also considered empty.
|
8
|
+
The next line in this tip file is empty, so it will be automatically skipped.
|
9
|
+
|
10
|
+
The next line in this tip file is just empty spaces, so it is considered empty too, and is also automatically skipped.
|
11
|
+
|
12
|
+
You can easily add translations to your startup tips via the usual gettext methods by wrapping a string in a gettext macro, which is _(""). See next tip for example.
|
13
|
+
_("This tip is marked as a translatable string by wrapping it inside the usual gettext macro, so it can be collected by gettext and added to a translation catalog. Your application can then use this catalog and serve out a translated version of the tip.")
|
14
|
+
Translatable strings must strictly begin with _(", not _( " or wxGetTranslation(" or something else.
|
15
|
+
If you are using gettext translatable strings, don't forget to escape to replace any " characters within the tip with a \" instead
|
16
|
+
_("This is a translatable tip with the quoted words \"Escape me\" properly escaped.")
|
17
|
+
If you have very specialized needs, you can derive your own wxTipProvider and use that instead.
|
18
|
+
If you want to modify the tip content at runtime for purposes other than translation (for example, variable expansion), one easy option is to use a custom tip provider derived from wxFileTipProvider. Your custom tip provider would contain a single virtual function to override: PreprocessTip().
|
@@ -0,0 +1,177 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# wxRuby2 Sample Code. Copyright (c) 2004-2008 wxRuby development team
|
3
|
+
# Freely reusable code: see SAMPLES-LICENSE.TXT for details
|
4
|
+
begin
|
5
|
+
require 'rubygems'
|
6
|
+
rescue LoadError
|
7
|
+
end
|
8
|
+
require 'wx'
|
9
|
+
|
10
|
+
# This sample demonstrates the use of the Clipboard and Drag and Drop
|
11
|
+
# classes. Whilst the functionality of these is slightly different, they
|
12
|
+
# are both based around the use of the DataObject classes to exchange
|
13
|
+
# data of various sorts between applications (i.e. into and out of
|
14
|
+
# wxRuby)
|
15
|
+
|
16
|
+
# A ListBox that collects file names dropped onto it
|
17
|
+
class FileDropList < Wx::ListBox
|
18
|
+
def initialize(*args)
|
19
|
+
super
|
20
|
+
# Set the handler for drag and drop actions
|
21
|
+
self.drop_target = ListFileDropTarget.new(self)
|
22
|
+
end
|
23
|
+
|
24
|
+
# The class that actually handles the dropped files; it keeps a
|
25
|
+
# reference to the ListBox, and appends items as they are added
|
26
|
+
class ListFileDropTarget < Wx::FileDropTarget
|
27
|
+
def initialize(list)
|
28
|
+
super()
|
29
|
+
@list = list
|
30
|
+
end
|
31
|
+
|
32
|
+
# This method is overridden to specify what happens when a file is
|
33
|
+
# dropped
|
34
|
+
def on_drop_files(x, y, files)
|
35
|
+
files.each { | file | @list.append(file) }
|
36
|
+
true # currently need to return boolean from this method
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class FileDropPane < Wx::Panel
|
42
|
+
LABEL = "Drag and drop files from Explorer/Finder/etc to here\n" +
|
43
|
+
"to add them to the list."
|
44
|
+
def initialize(parent)
|
45
|
+
super
|
46
|
+
sizer = Wx::BoxSizer.new(Wx::VERTICAL)
|
47
|
+
txt = Wx::StaticText.new( self, :label => LABEL)
|
48
|
+
sizer.add(txt, 0, Wx::ALL, 4)
|
49
|
+
|
50
|
+
@drop = FileDropList.new(self)
|
51
|
+
sizer.add(@drop, 1, Wx::GROW|Wx::ALL, 4)
|
52
|
+
self.sizer = sizer
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# A canvas which can display a pasted image
|
57
|
+
class PasteCanvas < Wx::Window
|
58
|
+
attr_accessor :bitmap
|
59
|
+
def initialize(parent)
|
60
|
+
super(parent, :style => Wx::SUNKEN_BORDER)
|
61
|
+
self.size = [ 200, 200 ]
|
62
|
+
@bitmap = Wx::NULL_BITMAP
|
63
|
+
evt_paint :on_paint
|
64
|
+
end
|
65
|
+
|
66
|
+
def on_paint(evt)
|
67
|
+
paint do | dc |
|
68
|
+
dc.clear
|
69
|
+
if bitmap.ok?
|
70
|
+
dc.draw_bitmap(bitmap, 0, 0, false)
|
71
|
+
end
|
72
|
+
dc.pen = Wx::BLACK_PEN
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# A Notebook panel to hold an image-paste canvas
|
78
|
+
class PastePane < Wx::Panel
|
79
|
+
LABEL = "Use the buttons below to paste text and images from\n" +
|
80
|
+
"the system clipboard, and then to copy them back."
|
81
|
+
def initialize(parent)
|
82
|
+
super
|
83
|
+
sizer = Wx::BoxSizer.new(Wx::VERTICAL)
|
84
|
+
txt = Wx::StaticText.new( self, :label => LABEL)
|
85
|
+
sizer.add(txt, 0, Wx::ALL, 4)
|
86
|
+
|
87
|
+
# Sizer for displaying text and image from the clipboard
|
88
|
+
paste_sizer = Wx::FlexGridSizer.new(2, 2, 2, 2)
|
89
|
+
paste_sizer.add_growable_col(0, 1)
|
90
|
+
paste_sizer.add_growable_col(1, 1)
|
91
|
+
paste_sizer.add_growable_row(1)
|
92
|
+
|
93
|
+
paste_sizer.add( Wx::StaticText.new(self, :label => 'Clipboard text') )
|
94
|
+
paste_sizer.add( Wx::StaticText.new(self, :label => 'Clipboard image') )
|
95
|
+
|
96
|
+
# Target for displaying text from the clipboard
|
97
|
+
@text = Wx::TextCtrl.new(self, :style => Wx::TE_MULTILINE)
|
98
|
+
paste_sizer.add(@text, 1, Wx::GROW)
|
99
|
+
|
100
|
+
# Target for displaying images from the clipboard
|
101
|
+
@canvas = PasteCanvas.new(self)
|
102
|
+
paste_sizer.add(@canvas, 1, Wx::GROW)
|
103
|
+
|
104
|
+
sizer.add(paste_sizer, 1, Wx::ALL|Wx::GROW, 4)
|
105
|
+
|
106
|
+
button_sizer = Wx::BoxSizer.new(Wx::HORIZONTAL)
|
107
|
+
|
108
|
+
@paste_bt = Wx::Button.new(self, :label => 'Paste')
|
109
|
+
evt_button @paste_bt, :on_paste
|
110
|
+
button_sizer.add(@paste_bt, 0, Wx::ALL, 4)
|
111
|
+
|
112
|
+
@copy_img_bt = Wx::Button.new(self, :label => 'Copy image')
|
113
|
+
evt_button @copy_img_bt, :on_copy_image
|
114
|
+
button_sizer.add(@copy_img_bt, 0, Wx::ALL, 4)
|
115
|
+
|
116
|
+
@copy_txt_bt = Wx::Button.new(self, :label => 'Copy text')
|
117
|
+
evt_button @copy_txt_bt, :on_copy_text
|
118
|
+
button_sizer.add(@copy_txt_bt, 0, Wx::ALL, 4)
|
119
|
+
|
120
|
+
sizer.add(button_sizer, 0)
|
121
|
+
self.sizer = sizer
|
122
|
+
end
|
123
|
+
|
124
|
+
# Receive data from the clipboard
|
125
|
+
def on_paste(evt)
|
126
|
+
# Temporarily open the clipboard
|
127
|
+
Wx::Clipboard.open do | clip |
|
128
|
+
# Test if bitmap data is available on the clipboard; if so, copy
|
129
|
+
if clip.supported?(Wx::DF_BITMAP)
|
130
|
+
bmp = Wx::BitmapDataObject.new
|
131
|
+
clip.get_data(bmp) # Fill the data object with bitmap`
|
132
|
+
@canvas.bitmap = bmp.bitmap
|
133
|
+
@canvas.refresh
|
134
|
+
end
|
135
|
+
# Test if text data is available on the clipboard; if so, copy
|
136
|
+
if clip.supported?(Wx::DF_TEXT)
|
137
|
+
txt = Wx::TextDataObject.new
|
138
|
+
clip.get_data(txt) # Fill the data object with text
|
139
|
+
@text.value = txt.text
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
# Paste an image to the clipboard
|
145
|
+
def on_copy_image
|
146
|
+
Wx::Clipboard.open do | clip |
|
147
|
+
clip.data = Wx::BitmapDataObject.new(@canvas.bitmap)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
# Paste text to the clipboard
|
152
|
+
def on_copy_text
|
153
|
+
Wx::Clipboard.open do | clip |
|
154
|
+
clip.data = Wx::TextDataObject.new(@text.value)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
class DataObjectFrame < Wx::Frame
|
160
|
+
def initialize(parent)
|
161
|
+
super
|
162
|
+
panel = Wx::Panel.new(self)
|
163
|
+
panel.sizer = Wx::BoxSizer.new(Wx::VERTICAL)
|
164
|
+
nb = Wx::Notebook.new(panel)
|
165
|
+
panel.sizer.add(nb, 1, Wx::ALL|Wx::GROW, 8)
|
166
|
+
fd = FileDropPane.new(nb)
|
167
|
+
nb.add_page(fd, 'Drag and Drop')
|
168
|
+
cv = PastePane.new(nb)
|
169
|
+
nb.add_page(cv, 'Clipboard')
|
170
|
+
# urldrop = URLDropList.new(self)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
Wx::App.run do
|
175
|
+
frame = DataObjectFrame.new(nil)
|
176
|
+
frame.show
|
177
|
+
end
|
@@ -0,0 +1,235 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# wxRuby2 Sample Code. Copyright (c) 2004-2008 wxRuby development team
|
3
|
+
# Freely reusable code: see SAMPLES-LICENSE.TXT for details
|
4
|
+
begin
|
5
|
+
require 'rubygems'
|
6
|
+
rescue LoadError
|
7
|
+
end
|
8
|
+
require 'wx'
|
9
|
+
|
10
|
+
class GfxInfo
|
11
|
+
attr_accessor :font, :w, :h, :x, :y, :x_axis, :y_axis, :txt, :rotation
|
12
|
+
def initialize()
|
13
|
+
@font = nil
|
14
|
+
@w = 0
|
15
|
+
@h = 0
|
16
|
+
@x = 0
|
17
|
+
@y = 0
|
18
|
+
@x_axis = 0
|
19
|
+
@y_axis = 0
|
20
|
+
@txt = ""
|
21
|
+
@rotation = 0
|
22
|
+
end
|
23
|
+
|
24
|
+
def move(max_x,max_y,max_sp)
|
25
|
+
@x += @x_axis
|
26
|
+
@y += @y_axis
|
27
|
+
if @x <= 0
|
28
|
+
@x_axis = rand(max_sp)
|
29
|
+
@x = 0
|
30
|
+
elsif (@x+@w) >= max_x
|
31
|
+
@x_axis = (rand(max_sp)*-1)
|
32
|
+
@x = max_x - @w
|
33
|
+
end
|
34
|
+
if @y <= 0
|
35
|
+
@y_axis = rand(max_sp)
|
36
|
+
@y = 0
|
37
|
+
elsif (@y+@h) >= max_y
|
38
|
+
@y_axis = (rand(max_sp)*-1)
|
39
|
+
@y = max_y - @h
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def rotate(run)
|
44
|
+
@rotation += run
|
45
|
+
if @rotation > 360
|
46
|
+
@rotation = 0
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def draw(gdc)
|
51
|
+
gdc.set_font(font)
|
52
|
+
gdc.draw_text(txt,x,y,rotation)
|
53
|
+
end
|
54
|
+
|
55
|
+
def [](symbol)
|
56
|
+
self.__send__(symbol,*[])
|
57
|
+
end
|
58
|
+
|
59
|
+
def []=(symbol,val)
|
60
|
+
self.__send__((symbol.to_s + "=").to_sym,*[val])
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
class GraphicsWindow < Wx::Window
|
66
|
+
# Create Needed Brushes and Pens
|
67
|
+
RED_BRUSH = Wx::Brush.new
|
68
|
+
GREEN_BRUSH = Wx::Brush.new
|
69
|
+
BLUE_BRUSH = Wx::Brush.new
|
70
|
+
RED_PEN = Wx::Pen.new
|
71
|
+
GREEN_PEN = Wx::Pen.new
|
72
|
+
BLUE_PEN = Wx::Pen.new
|
73
|
+
|
74
|
+
# Instance Methods to keep track of toggle for corner, rect, and counter for frames per second
|
75
|
+
attr_accessor :corner, :rect, :fps
|
76
|
+
|
77
|
+
def initialize(parent)
|
78
|
+
super(parent)
|
79
|
+
# Create the font we'll use to create our pre-defined fonts for the painting
|
80
|
+
@font = Wx::Font.new(18,Wx::FONTFAMILY_TELETYPE,
|
81
|
+
Wx::FONTSTYLE_NORMAL,Wx::FONTWEIGHT_NORMAL)
|
82
|
+
# Setup the actual data to be stored in Brushes and Pens
|
83
|
+
RED_BRUSH.set_colour(Wx::RED)
|
84
|
+
RED_PEN.set_colour(Wx::RED)
|
85
|
+
GREEN_BRUSH.set_colour(Wx::GREEN)
|
86
|
+
GREEN_PEN.set_colour(Wx::GREEN)
|
87
|
+
BLUE_BRUSH.set_colour(Wx::BLUE)
|
88
|
+
BLUE_PEN.set_colour(Wx::BLUE)
|
89
|
+
# Create our Animation Timer
|
90
|
+
@timer = Wx::Timer.new(self,1000)
|
91
|
+
@fps = 0
|
92
|
+
# Set it to run every 25 milliseconds, you can set this value higher, to get
|
93
|
+
# higher frame rates, however, it may cause non-responsiveness of normal
|
94
|
+
# gui controls.
|
95
|
+
@timer.start(25)
|
96
|
+
# Setup the event Handler to do the drawing on this window.
|
97
|
+
evt_paint :on_paint
|
98
|
+
evt_timer 1000, :animate
|
99
|
+
end
|
100
|
+
|
101
|
+
def create_resources(gdc)
|
102
|
+
# Create our Resource Class for holding the Text to be displayed
|
103
|
+
@rtxt = GfxInfo.new()
|
104
|
+
@gtxt = GfxInfo.new()
|
105
|
+
@btxt = GfxInfo.new()
|
106
|
+
# Store our fonts, and strings into the classes
|
107
|
+
@rtxt[:font] = gdc.create_font(@font,Wx::RED); @rtxt[:txt] = "This is a red string"
|
108
|
+
@gtxt[:font] = gdc.create_font(@font,Wx::GREEN); @gtxt[:txt] = "This is a green string"
|
109
|
+
@btxt[:font] = gdc.create_font(@font,Wx::BLUE); @btxt[:txt] = "This is a blue string"
|
110
|
+
# Create the GraphicsContext resources. For some reason, unable to utilize
|
111
|
+
# GraphicsContext#create(wxWindow) to create these resources in initialize().
|
112
|
+
@rbrush = gdc.create_brush(RED_BRUSH)
|
113
|
+
@gbrush = gdc.create_brush(GREEN_BRUSH)
|
114
|
+
@bbrush = gdc.create_brush(BLUE_BRUSH)
|
115
|
+
@rpen = gdc.create_pen(RED_PEN)
|
116
|
+
@gpen = gdc.create_pen(GREEN_PEN)
|
117
|
+
@bpen = gdc.create_pen(BLUE_PEN)
|
118
|
+
end
|
119
|
+
|
120
|
+
def get_extents(gdc)
|
121
|
+
# Since we need a GDC and the text to get the extents, we do this in a
|
122
|
+
# separate method, though we should be able to do it with create_resources()
|
123
|
+
width,height,*garbage = gdc.get_text_extent(@rtxt[:txt])
|
124
|
+
@rtxt[:w] = width.to_i; @rtxt[:h] = height.to_i
|
125
|
+
width,height,*garbage = gdc.get_text_extent(@gtxt[:txt])
|
126
|
+
@gtxt[:w] = width.to_i; @gtxt[:h] = height.to_i
|
127
|
+
width,height,*garbage = gdc.get_text_extent(@btxt[:txt])
|
128
|
+
@btxt[:w] = width.to_i; @btxt[:h] = height.to_i
|
129
|
+
end
|
130
|
+
|
131
|
+
def setup_positions()
|
132
|
+
# Setup our initial positions for drawing.
|
133
|
+
@rtxt[:x] = @rtxt[:y] = 0
|
134
|
+
size = self.get_client_size()
|
135
|
+
pos_x = (size.width / 2) #- (@gtxt[:w] / 2)
|
136
|
+
pos_y = (size.height / 2) #- (@gtxt[:h] / 2)
|
137
|
+
@gtxt[:x] = pos_x
|
138
|
+
@gtxt[:y] = pos_y
|
139
|
+
@btxt[:x] = (size.width - @btxt[:w])
|
140
|
+
@btxt[:y] = (size.height - @btxt[:h])
|
141
|
+
end
|
142
|
+
|
143
|
+
def animate()
|
144
|
+
# This routine manily animates the Text, which is also is handled by the
|
145
|
+
# GfxInfo class as well. Mainly in #rotate and #move.
|
146
|
+
rect = self.get_client_size()
|
147
|
+
@rtxt.move(rect.width,rect.height,8) unless @rtxt.nil?
|
148
|
+
@gtxt.rotate(-0.01) unless @gtxt.nil?
|
149
|
+
@btxt.move(rect.width,rect.height,5) unless @btxt.nil?
|
150
|
+
# We're now ready to draw our stuff to the window
|
151
|
+
refresh()
|
152
|
+
end
|
153
|
+
|
154
|
+
def on_paint
|
155
|
+
# We do our drawing now
|
156
|
+
rect = self.get_client_size
|
157
|
+
paint do |dc|
|
158
|
+
gdc = Wx::GraphicsContext.create(dc)
|
159
|
+
unless !@rtxt.nil?
|
160
|
+
create_resources(gdc)
|
161
|
+
end
|
162
|
+
|
163
|
+
unless !(@rtxt[:w] == 0)
|
164
|
+
gdc.set_font(@rtxt[:font])
|
165
|
+
get_extents(gdc)
|
166
|
+
setup_positions()
|
167
|
+
end
|
168
|
+
@rtxt.draw(gdc)
|
169
|
+
@gtxt.draw(gdc)
|
170
|
+
@btxt.draw(gdc)
|
171
|
+
# Draw our rectangles, if they are checked
|
172
|
+
15.times do
|
173
|
+
pen = gdc.create_pen(Wx::Pen.new(Wx::Colour.new(rand(256),rand(256),rand(256),rand(256))))
|
174
|
+
if @corner.is_checked
|
175
|
+
x = rand(rect.width)
|
176
|
+
y = rand(rect.height)
|
177
|
+
gdc.set_pen(pen)
|
178
|
+
gdc.draw_rectangle(x,y,x,1)
|
179
|
+
gdc.draw_rectangle(x,y,1,y)
|
180
|
+
end
|
181
|
+
if @rect.is_checked
|
182
|
+
x = rand(rect.width)
|
183
|
+
y = rand(rect.height)
|
184
|
+
w = rand(rect.width)
|
185
|
+
h = rand(rect.height)
|
186
|
+
w + x > rect.width ? (w -= x; w -= rand(150)) : 0
|
187
|
+
h + y > rect.height ? (h -= y; h -= rand(150)) : 0
|
188
|
+
gdc.set_pen(pen)
|
189
|
+
gdc.draw_rectangle(x,y,w,h)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
@fps += 1
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
class GraphicsFrame < Wx::Frame
|
198
|
+
def initialize()
|
199
|
+
super(nil,:title=>"Graphics Context example",:size=>[500,400])
|
200
|
+
@win = GraphicsWindow.new(self)
|
201
|
+
|
202
|
+
create_status_bar(3)
|
203
|
+
status_bar.set_status_text("Frames per sec: 0", 0)
|
204
|
+
@win.rect = Wx::CheckBox.new(status_bar,:label=>"Draw Rectangles")
|
205
|
+
@win.corner = Wx::CheckBox.new(status_bar,:label=>"Draw Corners")
|
206
|
+
|
207
|
+
Wx::Timer.every(1000) { fps_display }
|
208
|
+
evt_size :on_size
|
209
|
+
end
|
210
|
+
|
211
|
+
|
212
|
+
# Place the two control checkboxes within the StatusBar
|
213
|
+
def on_size
|
214
|
+
rect = status_bar.field_rect(1)
|
215
|
+
@win.rect.move [ rect.x + 2, rect.y + 2]
|
216
|
+
@win.rect.size = [ rect.width - 4, rect.height - 4 ]
|
217
|
+
|
218
|
+
rect = status_bar.field_rect(2)
|
219
|
+
@win.corner.move [ rect.x + 2, rect.y + 2]
|
220
|
+
@win.corner.size = [ rect.width - 4, rect.height - 4 ]
|
221
|
+
end
|
222
|
+
|
223
|
+
def fps_display()
|
224
|
+
get_status_bar.set_status_text("Frames per sec: #{@win.fps}", 0)
|
225
|
+
@win.fps = 0
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
class GraphicsApp < Wx::App
|
230
|
+
def on_init()
|
231
|
+
GraphicsFrame.new.show
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
GraphicsApp.new.main_loop()
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# wxRuby2 Sample Code. Copyright (c) 2004-2008 wxRuby development team
|
3
|
+
# Freely reusable code: see SAMPLES-LICENSE.TXT for details
|
4
|
+
begin
|
5
|
+
require 'rubygems'
|
6
|
+
rescue LoadError
|
7
|
+
end
|
8
|
+
require 'wx'
|
9
|
+
|
10
|
+
|
11
|
+
# This sample demonstrates how to draw an image from a file onto a
|
12
|
+
# window. This one uses a small PNG file, but other formats such as JPEG
|
13
|
+
# are supported - see documentation for more details.
|
14
|
+
|
15
|
+
class ImageFrame < Wx::Frame
|
16
|
+
def initialize
|
17
|
+
super(nil, :title => 'Simple image demo')
|
18
|
+
|
19
|
+
# Load a PNG bitmap from a file for drawing
|
20
|
+
img_file = File.join( File.dirname(__FILE__), 'paperclip.png')
|
21
|
+
@bitmap = Wx::Bitmap.new(img_file, Wx::BITMAP_TYPE_PNG)
|
22
|
+
|
23
|
+
# Set up the drawing to be done when the frame needs re-painting
|
24
|
+
evt_paint :on_paint
|
25
|
+
end
|
26
|
+
|
27
|
+
def on_paint
|
28
|
+
paint do | dc |
|
29
|
+
dc.draw_bitmap(@bitmap, 0, 0, false)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
Wx::App.run do
|
35
|
+
ImageFrame.new.show
|
36
|
+
end
|
37
|
+
|