wxruby-ruby19 1.9.8-x86-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/lib/wx.rb +53 -0
- data/lib/wx/accessors.rb +52 -0
- data/lib/wx/classes/acceleratortable.rb +28 -0
- data/lib/wx/classes/animation.rb +18 -0
- data/lib/wx/classes/app.rb +45 -0
- data/lib/wx/classes/artprovider.rb +31 -0
- data/lib/wx/classes/auinotebook.rb +9 -0
- data/lib/wx/classes/bitmap.rb +28 -0
- data/lib/wx/classes/busycursor.rb +12 -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 +964 -0
- data/lib/wx/classes/font.rb +118 -0
- data/lib/wx/classes/functions.rb +44 -0
- data/lib/wx/classes/gauge.rb +12 -0
- data/lib/wx/classes/grid.rb +138 -0
- data/lib/wx/classes/helpcontroller.rb +5 -0
- data/lib/wx/classes/helpcontrollerhelpprovider.rb +23 -0
- data/lib/wx/classes/helpprovider.rb +15 -0
- data/lib/wx/classes/htmlhelpcontroller.rb +5 -0
- data/lib/wx/classes/htmlwindow.rb +14 -0
- data/lib/wx/classes/icon.rb +21 -0
- data/lib/wx/classes/iconbundle.rb +3 -0
- data/lib/wx/classes/image.rb +31 -0
- data/lib/wx/classes/imagelist.rb +3 -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 +48 -0
- data/lib/wx/classes/menu.rb +62 -0
- data/lib/wx/classes/menuitem.rb +7 -0
- data/lib/wx/classes/notebook.rb +9 -0
- data/lib/wx/classes/object.rb +14 -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/simplehelpprovider.rb +38 -0
- data/lib/wx/classes/size.rb +49 -0
- data/lib/wx/classes/sizer.rb +22 -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/toolbar.rb +29 -0
- data/lib/wx/classes/toolbartool.rb +4 -0
- data/lib/wx/classes/treectrl.rb +44 -0
- data/lib/wx/classes/window.rb +82 -0
- data/lib/wx/classes/xmlresource.rb +37 -0
- data/lib/wx/helpers.rb +30 -0
- data/lib/wx/keyword_ctors.rb +203 -0
- data/lib/wx/keyword_defs.rb +507 -0
- data/lib/wx/version.rb +3 -0
- data/lib/wxruby2.bundle +0 -0
- metadata +323 -0
data/lib/wx.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# Copyright 2004-2006 by Kevin Smith
|
2
|
+
# released under the MIT-style wxruby2 license
|
3
|
+
|
4
|
+
# This wrapper serves three functions:
|
5
|
+
# 1. It loads the binary library 'wxruby2.so' or 'wxruby.dll', while
|
6
|
+
# still allowing applications to just require 'wx'.
|
7
|
+
# 2. It sets up the version information
|
8
|
+
# 3. It loads in ruby extensions to the core Wx classes.
|
9
|
+
|
10
|
+
|
11
|
+
# load the binary library
|
12
|
+
require 'wxruby2'
|
13
|
+
|
14
|
+
# alias the module
|
15
|
+
Wx = Wxruby2
|
16
|
+
|
17
|
+
# Load the version information (should be bundled with all released versions)
|
18
|
+
begin
|
19
|
+
require 'wx/version'
|
20
|
+
rescue LoadError
|
21
|
+
Wx::WXRUBY_VERSION = '0.0.0'
|
22
|
+
end
|
23
|
+
# Convenience string for WxWidgets version info
|
24
|
+
Wx::WXWIDGETS_VERSION = '%i.%i.%i' % [ Wx::WXWIDGETS_MAJOR_VERSION,
|
25
|
+
Wx::WXWIDGETS_MINOR_VERSION,
|
26
|
+
Wx::WXWIDGETS_RELEASE_NUMBER ]
|
27
|
+
|
28
|
+
# Helper functions
|
29
|
+
require 'wx/helpers'
|
30
|
+
|
31
|
+
# Load in all the class extension methods written in ruby
|
32
|
+
# evthandler must be required first b/c it sets up methods modified elsewhere
|
33
|
+
require 'wx/classes/evthandler.rb'
|
34
|
+
class_files = File.join( File.dirname(__FILE__), 'wx', 'classes', '*.rb')
|
35
|
+
Dir.glob(class_files) do | class_file |
|
36
|
+
require 'wx/classes/' + class_file[/\w+\.rb$/]
|
37
|
+
end
|
38
|
+
|
39
|
+
# Load in syntax sweeteners
|
40
|
+
require 'wx/accessors'
|
41
|
+
require 'wx/keyword_ctors'
|
42
|
+
require 'wx/keyword_defs'
|
43
|
+
|
44
|
+
# If a program is ended by ruby's exit, it can bypass doing the proper
|
45
|
+
# Wx clean-up routines called by Wx::App#on_exit. This can under some
|
46
|
+
# circumstances cause crashes as the application ends.
|
47
|
+
Kernel::at_exit do
|
48
|
+
# This is set in wxRubyApp.OnExit (see swig/classes/App.i)
|
49
|
+
if not $__wx_app_ended__
|
50
|
+
Wx::THE_APP.on_exit
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
data/lib/wx/accessors.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# = WxSugar - Accessors
|
2
|
+
#
|
3
|
+
# The default WxRuby interface has lots and lots of methods like
|
4
|
+
#
|
5
|
+
# * get_position()
|
6
|
+
# * set_size(a_size)
|
7
|
+
# * is_checked()
|
8
|
+
#
|
9
|
+
# and so on. Methods that retrieve set, or query attributes of an object
|
10
|
+
# are more normally in Ruby called simply by the attribute name:
|
11
|
+
#
|
12
|
+
# * position()
|
13
|
+
# * size = a_size
|
14
|
+
# * checked?
|
15
|
+
#
|
16
|
+
# This extension creates an alias for every WxRuby instance method that
|
17
|
+
# begins with +get_+, +set_+ or +is_+. Note that if you are calling a
|
18
|
+
# 'setter' method on self, you must explicitly send the message to self:
|
19
|
+
#
|
20
|
+
# # set's self size to be 100px by 100px
|
21
|
+
# self.size = Wx::Size.new(100, 100)
|
22
|
+
# # only sets the value of a local variable 'size'
|
23
|
+
# size = Wx::Size.new
|
24
|
+
|
25
|
+
module WxRubyStyleAccessors
|
26
|
+
def method_missing(sym, *args)
|
27
|
+
case sym.to_s
|
28
|
+
when /^(.*)\=$/
|
29
|
+
meth = "set_#{$1}"
|
30
|
+
when /^(.*)\?$/
|
31
|
+
meth = "is_#{$1}"
|
32
|
+
else
|
33
|
+
meth = "get_#{sym}"
|
34
|
+
end
|
35
|
+
if respond_to?(meth)
|
36
|
+
send(meth, *args)
|
37
|
+
else
|
38
|
+
e = NoMethodError.new("undefined method '#{sym}' for #{self.inspect}")
|
39
|
+
e.set_backtrace(caller)
|
40
|
+
Kernel.raise e
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
all_classes = Wx::constants.collect { | c | Wx::const_get(c) }.grep(Class)
|
46
|
+
|
47
|
+
all_classes.each do | klass |
|
48
|
+
klass.class_eval do
|
49
|
+
include WxRubyStyleAccessors
|
50
|
+
extend WxRubyStyleAccessors
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Wx::AcceleratorTable
|
2
|
+
# Allow new to be called as []
|
3
|
+
class << self
|
4
|
+
alias :[] :new
|
5
|
+
end
|
6
|
+
|
7
|
+
# Allow initialize to be called with a splat-like list of arguments,
|
8
|
+
# and allow entries to be specified in terser form [mod, key, id]
|
9
|
+
# rather than full AcceleratorEntry.new call.
|
10
|
+
wx_init = self.instance_method(:initialize)
|
11
|
+
define_method(:initialize) do | *args |
|
12
|
+
# Test for old-style arg passing in a single array
|
13
|
+
if args.length == 1 and args.first.kind_of?(Array) and
|
14
|
+
args.first.all? { | e | e.kind_of?(Wx::AcceleratorEntry) }
|
15
|
+
args = args[0]
|
16
|
+
end
|
17
|
+
# Convert to array of AccEntries, to pass in as single array
|
18
|
+
args = args.map do | entry |
|
19
|
+
case entry
|
20
|
+
when Wx::AcceleratorEntry then entry
|
21
|
+
when Array then Wx::AcceleratorEntry.new(*entry)
|
22
|
+
else Kernel.raise ArgumentError,
|
23
|
+
"#{entry.inspect} is not a valid AcceleratorTable entry"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
wx_init.bind(self).call(args)
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Wx::Animation < Wx::GDIObject
|
2
|
+
# Redefine the initialize method so it raises an exception if a
|
3
|
+
# non-existent file is given to the constructor; otherwise, wx Widgets
|
4
|
+
# just carries on with an empty bitmap, which may cause faults later
|
5
|
+
wx_init = self.instance_method(:initialize)
|
6
|
+
define_method(:initialize) do | *args |
|
7
|
+
if args[0].kind_of? String
|
8
|
+
if not File.exist?( File.expand_path(args[0]) )
|
9
|
+
Kernel.raise( ArgumentError,
|
10
|
+
"Animation file does not exist: #{args[0]}" )
|
11
|
+
end
|
12
|
+
res = wx_init.bind(self).call()
|
13
|
+
res.load_file(args[0], args[1] || Wx::ANIMATION_TYPE_ANY)
|
14
|
+
else
|
15
|
+
wx_init.bind(self).call(*args)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# Copyright 2004-2006 by Kevin Smith
|
2
|
+
# released under the MIT-style wxruby2 license
|
3
|
+
|
4
|
+
# Controller class which creates and manages all windows.
|
5
|
+
class Wx::App
|
6
|
+
# Convenience class method to create simple apps. Starts an
|
7
|
+
# application main_loop, setting up initial windows etc as specified
|
8
|
+
# in the passed block.
|
9
|
+
# block
|
10
|
+
def self.run(&block)
|
11
|
+
app_klass = Class.new(self)
|
12
|
+
app_klass.class_eval do
|
13
|
+
define_method(:on_init, &block)
|
14
|
+
end
|
15
|
+
the_app = app_klass.new
|
16
|
+
the_app.main_loop
|
17
|
+
end
|
18
|
+
|
19
|
+
# This is a class method in Wx, but permit it to be an instance method
|
20
|
+
# in wxRuby
|
21
|
+
def is_main_loop_running
|
22
|
+
Wx::App.is_main_loop_running
|
23
|
+
end
|
24
|
+
|
25
|
+
# This method handles failed assertions from within the WxWidgets C++
|
26
|
+
# code. These messages are only generated by a DEBUG build of
|
27
|
+
# WxRuby. Such messages usually indicate that the API is being used
|
28
|
+
# incorrectly; the file/line reference points to the place in the
|
29
|
+
# WxWidgets source code where the assertion was made.
|
30
|
+
define_method(:on_assert_failure) do | file, line, condition, message |
|
31
|
+
warn "Wx WARNING: #{message} (#{file}:#{line})"
|
32
|
+
end
|
33
|
+
|
34
|
+
# For use in development only, of no practical use in production code.
|
35
|
+
# This method causes Ruby's garbage collection to run (roughly) at
|
36
|
+
# interval +interval+ (seconds) - the default is 1, i.e. every
|
37
|
+
# second. This should help ferret out bugs in memory management more
|
38
|
+
# quickly.
|
39
|
+
def gc_stress(interval = 1)
|
40
|
+
t = Wx::Timer.new(self, 9999)
|
41
|
+
evt_timer(9999) { Thread.pass }
|
42
|
+
Thread.new { loop { sleep interval; GC.start } }
|
43
|
+
t.start(100)
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# Class which can supply icons and bitmaps
|
2
|
+
class Wx::ArtProvider
|
3
|
+
# Keep a note of supplied ArtProviders to prevent them being GC'd
|
4
|
+
@__art_provs = []
|
5
|
+
|
6
|
+
class << self
|
7
|
+
wx_insert = instance_method(:insert)
|
8
|
+
define_method(:insert) do | art_prov |
|
9
|
+
wx_insert.bind(self).call(art_prov)
|
10
|
+
@__art_provs.unshift(art_prov)
|
11
|
+
end
|
12
|
+
|
13
|
+
wx_pop = instance_method(:pop)
|
14
|
+
define_method(:pop) do
|
15
|
+
wx_pop.bind(self).call
|
16
|
+
@__art_provs.pop
|
17
|
+
end
|
18
|
+
|
19
|
+
wx_push = instance_method(:push)
|
20
|
+
define_method(:push) do | art_prov |
|
21
|
+
wx_push.bind(self).call(art_prov)
|
22
|
+
@__art_provs.push(art_prov)
|
23
|
+
end
|
24
|
+
|
25
|
+
wx_remove = instance_method(:remove)
|
26
|
+
define_method(:remove) do | art_prov |
|
27
|
+
wx_push.bind(self).call(art_prov)
|
28
|
+
@__art_provs.delete(art_prov)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Wx::Bitmap
|
2
|
+
# Constructor copying data from an image
|
3
|
+
def self.from_image(img, depth = -1)
|
4
|
+
new(img, depth)
|
5
|
+
end
|
6
|
+
|
7
|
+
# Redefine the initialize method so it raises an exception if a
|
8
|
+
# non-existent file is given to the constructor; otherwise, wx Widgets
|
9
|
+
# just carries on with an empty bitmap, which may cause faults later
|
10
|
+
wx_init = self.instance_method(:initialize)
|
11
|
+
define_method(:initialize) do | *args |
|
12
|
+
if args[0].kind_of? String
|
13
|
+
if not File.exist?( File.expand_path(args[0]) )
|
14
|
+
Kernel.raise(ArgumentError, "Bitmap file does not exist: #{args[0]}")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
wx_init.bind(self).call(*args)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Accepts a block, which will be passed a device context which can be
|
21
|
+
# used to draw upon the Bitmap
|
22
|
+
def draw
|
23
|
+
dc = Wx::MemoryDC.new
|
24
|
+
dc.select_object(self)
|
25
|
+
yield dc
|
26
|
+
dc.select_object( Wx::NULL_BITMAP )
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# Emulates the wxWidgets BusyCursor class, by providing a scope within
|
2
|
+
# which a busy cursor will be shown
|
3
|
+
class Wx::BusyCursor
|
4
|
+
# Only one class method, optionally accepting a cursor that should be
|
5
|
+
# shown, defaulting to an hour glass cursor.
|
6
|
+
def self.busy(cursor = Wx::HOURGLASS_CURSOR)
|
7
|
+
Wx::begin_busy_cursor(cursor)
|
8
|
+
yield
|
9
|
+
ensure
|
10
|
+
Wx::end_busy_cursor
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# A ListBox, where each item has a checkbox next to it
|
2
|
+
class Wx::CheckListBox
|
3
|
+
# wxRuby redefinitions of core methods to add item data support (not
|
4
|
+
# available in wxWidgets). Use a private method to initialize and
|
5
|
+
# access the data, rather than in initialize(), b/c can't guarantee
|
6
|
+
# that initialize will be called (eg when loaded from XRC)
|
7
|
+
def __wx_item_data
|
8
|
+
@__wx_item_data ||= []
|
9
|
+
end
|
10
|
+
private :__wx_item_data
|
11
|
+
|
12
|
+
# Call method in ControlWithItems, then sync item data
|
13
|
+
def append(item, data = nil)
|
14
|
+
super(item)
|
15
|
+
__wx_item_data[count - 1] = data
|
16
|
+
end
|
17
|
+
|
18
|
+
# Call method in ControlWithItems, then sync item data
|
19
|
+
def clear
|
20
|
+
super
|
21
|
+
__wx_item_data.clear
|
22
|
+
end
|
23
|
+
|
24
|
+
# delete is defined in Wx::CheckListBox, so must be called in this class
|
25
|
+
wx_delete = self.instance_method(:delete)
|
26
|
+
define_method(:delete) do | n |
|
27
|
+
wx_delete.bind(self).call(n)
|
28
|
+
__wx_item_data.delete_at(n)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns an array of indices of items that are currently checked.
|
32
|
+
def get_checked_items
|
33
|
+
find_all { | i | checked?(i) }
|
34
|
+
end
|
35
|
+
|
36
|
+
# Wholly redefined here
|
37
|
+
def get_item_data(n)
|
38
|
+
__wx_item_data[n]
|
39
|
+
end
|
40
|
+
|
41
|
+
# Wholly redefined here
|
42
|
+
def set_item_data(n, data)
|
43
|
+
__wx_item_data[n] = data
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# Device Context to paint on a window outside an on_paint handler. It is
|
2
|
+
# recommended that PaintDC is used in preference to this class.
|
3
|
+
class Wx::ClientDC
|
4
|
+
# This class should not be instantiated directly in wxRuby; it should
|
5
|
+
# always be used via Window#paint, which takes a block receiving the
|
6
|
+
# DC. This ensures that the DC is cleaned up at the correct time,
|
7
|
+
# avoiding errors and segfaults on exit.
|
8
|
+
define_method(:initialize) do | *args |
|
9
|
+
Kernel.raise RuntimeError,
|
10
|
+
"Do not instantiate ClientDC directly; use Window#paint",
|
11
|
+
caller[1..-1]
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Wx::Clipboard
|
2
|
+
class << self
|
3
|
+
# Class method to provide access to the clipboard within a ruby
|
4
|
+
# block. Tests that the clipboard could be accessed, and ensures
|
5
|
+
# that it is closed when the block is finished.
|
6
|
+
def open
|
7
|
+
clip = Wx::Clipboard.new
|
8
|
+
unless clip.open
|
9
|
+
Kernel.raise "Could not open clipboard"
|
10
|
+
end
|
11
|
+
yield clip
|
12
|
+
ensure
|
13
|
+
clip.close
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class Wx::Colour
|
2
|
+
# Redefine the initialize method so it raises an exception if an
|
3
|
+
# invalid colour value is given. This might be an unknown colour
|
4
|
+
# string (eg 'dark blue') or out-of-bounds integer values (<0 or >255)
|
5
|
+
wx_init = self.instance_method(:initialize)
|
6
|
+
define_method(:initialize) do | *args |
|
7
|
+
begin
|
8
|
+
wx_init.bind(self).call(*args)
|
9
|
+
# Invalid integer values raise SWIG 'no matching func'
|
10
|
+
rescue ArgumentError
|
11
|
+
Kernel.raise ArgumentError, "Invalid colour values #{args.inspect}"
|
12
|
+
end
|
13
|
+
|
14
|
+
if not is_ok
|
15
|
+
Kernel.raise ArgumentError, "Invalid colour values #{args.inspect}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# Standard colours, corresponding to WxWidgets stock colours.
|
20
|
+
Wx::WHITE = new(255, 255, 255)
|
21
|
+
Wx::BLACK = new(0, 0, 0)
|
22
|
+
|
23
|
+
Wx::RED = new(255, 0, 0)
|
24
|
+
Wx::GREEN = new(0, 255, 0)
|
25
|
+
Wx::BLUE = new(0, 0, 255)
|
26
|
+
|
27
|
+
Wx::YELLOW = new(255, 255, 0)
|
28
|
+
Wx::MAGENTA = new(255, 0, 255)
|
29
|
+
Wx::CYAN = new(0, 255, 255)
|
30
|
+
|
31
|
+
Wx::LIGHT_GREY = new(192, 192, 192)
|
32
|
+
|
33
|
+
# Colours are equal to one another if they have the same red, green
|
34
|
+
# and blue intensity, and the same alpha
|
35
|
+
def ==(other)
|
36
|
+
if not other.is_a?(self.class)
|
37
|
+
raise ArgumentError, "No comparison of #{self} to #{other}"
|
38
|
+
end
|
39
|
+
[ red, green, blue, alpha ] ==
|
40
|
+
[ other.red, other.green, other.blue, other.alpha ]
|
41
|
+
end
|
42
|
+
|
43
|
+
# More informative output for inspect etc
|
44
|
+
def to_s
|
45
|
+
"#<Wx::Colour: (#{red}, #{green}, #{blue} *#{alpha})>"
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Class representing interactions with controls such as ListBox
|
2
|
+
class Wx::CommandEvent
|
3
|
+
# get_int and get_selection are already synonyms, but neither name
|
4
|
+
# accurately describes what the method does as the event may be a
|
5
|
+
# (de)selection or a check in a CheckListBox
|
6
|
+
alias :get_index :get_int
|
7
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Superclass of a variety of controls that display lists of items (eg
|
2
|
+
# Choice, ListBox, CheckListBox)
|
3
|
+
class Wx::ControlWithItems
|
4
|
+
# Make these ruby enumerables so find, find_all, map etc are available
|
5
|
+
include Enumerable
|
6
|
+
# Passes each valid item index into the passed block
|
7
|
+
def each
|
8
|
+
0.upto(get_count - 1) { | i | yield i }
|
9
|
+
end
|
10
|
+
end
|