gtkbuilder 0.1 → 0.2
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/gtkbuilder.rb +3 -0
- data/lib/proxies/box.rb +13 -0
- data/lib/proxies/layout.rb +36 -8
- data/lib/proxies/window.rb +3 -0
- metadata +4 -4
data/lib/gtkbuilder.rb
CHANGED
@@ -2,6 +2,9 @@ module Builder
|
|
2
2
|
|
3
3
|
module Gtk
|
4
4
|
|
5
|
+
## Defines a new Gtk window
|
6
|
+
# @param block A block that will be passed a builder proxy object
|
7
|
+
# @return the created window
|
5
8
|
def self.new(*args, &block)
|
6
9
|
proxy = Builder::Gtk::WindowProxy.new(*args)
|
7
10
|
block.call(proxy) if block
|
data/lib/proxies/box.rb
CHANGED
@@ -2,10 +2,13 @@ require 'proxies/layout.rb'
|
|
2
2
|
|
3
3
|
module Builder::Gtk
|
4
4
|
|
5
|
+
## Proxies both VBox and HBox
|
5
6
|
class BoxProxy
|
6
7
|
|
7
8
|
include LayoutProxy
|
8
9
|
|
10
|
+
## Creates a new proxy for the given VBox or HBox widget
|
11
|
+
# The default packing is @pack_start(widget, false, false, 0)@.
|
9
12
|
def initialize(widget)
|
10
13
|
@widget = widget
|
11
14
|
@data = {
|
@@ -14,16 +17,25 @@ module Builder::Gtk
|
|
14
17
|
}
|
15
18
|
end
|
16
19
|
|
20
|
+
## Sets the pack mode to pack_start.
|
21
|
+
# The arguments are passed to pack_start for every
|
22
|
+
# following widget definition.
|
17
23
|
def start(*args, &block)
|
18
24
|
return _pack(:start, args, block)
|
19
25
|
end
|
20
26
|
|
27
|
+
## Sets the pack mode to pack_end
|
28
|
+
# The arguments are passed to pack_end for every
|
29
|
+
# following widget definition.
|
21
30
|
def end(*args, &block)
|
22
31
|
return _pack(:end, args, block)
|
23
32
|
end
|
24
33
|
|
25
34
|
private
|
26
35
|
|
36
|
+
## Common function for both pack modes.
|
37
|
+
# The arguments are passed to the pack function for every
|
38
|
+
# following widget definition.
|
27
39
|
def _pack(position, args, block)
|
28
40
|
@data = {
|
29
41
|
:position => position,
|
@@ -33,6 +45,7 @@ module Builder::Gtk
|
|
33
45
|
return self
|
34
46
|
end
|
35
47
|
|
48
|
+
## Actually packs the given widget using the saved position and arguments.
|
36
49
|
def _pack_widget(widget)
|
37
50
|
@widget.send("pack_#{@data[:position]}", widget, *@data[:args])
|
38
51
|
end
|
data/lib/proxies/layout.rb
CHANGED
@@ -2,13 +2,32 @@ require 'gtk2'
|
|
2
2
|
|
3
3
|
module Builder::Gtk
|
4
4
|
|
5
|
+
## Base class for all widgets that can have children
|
5
6
|
module LayoutProxy
|
6
7
|
|
8
|
+
## The widget that is being proxied
|
7
9
|
attr_accessor :widget
|
8
10
|
|
11
|
+
## Handles constructing Gtk widgets
|
12
|
+
#
|
13
|
+
# Example:
|
14
|
+
#
|
15
|
+
# proxy.entry --> Gtk::Entry.new
|
16
|
+
# proxy.vbox(true, 10) --> Gtk::VBox.new(true, 10)
|
17
|
+
# proxy.drawing_area --> Gtk::DrawingArea.new
|
18
|
+
#
|
19
|
+
# @param name The name of the widget in snake case
|
20
|
+
# @param args The arguments to pass to the constructor of
|
21
|
+
# the Gtk widget
|
22
|
+
# @param block A block that will be executed with the created widget
|
23
|
+
# or a proxy if one is available.
|
9
24
|
def method_missing(name, *args, &block)
|
10
|
-
widget
|
11
|
-
|
25
|
+
if @widget.respond_to?(name)
|
26
|
+
return @widget.__send__(name, *args, &block)
|
27
|
+
end
|
28
|
+
|
29
|
+
widget = _get_widget(name, args)
|
30
|
+
proxy = _get_proxy(name, widget)
|
12
31
|
block.call(proxy) if block
|
13
32
|
_pack_widget(widget)
|
14
33
|
return self
|
@@ -16,13 +35,17 @@ module Builder::Gtk
|
|
16
35
|
|
17
36
|
private
|
18
37
|
|
19
|
-
|
38
|
+
## Tries to create a Gtk widget with the given name.
|
39
|
+
# All arguments are forwarded to the widget.
|
40
|
+
def _get_widget(name, args)
|
20
41
|
class_name = _find_gtk_class(name)
|
21
|
-
raise RuntimeError.new("no widget found for name
|
42
|
+
raise RuntimeError.new("no widget found for name `#{name}'") unless class_name
|
22
43
|
klass = ::Gtk.const_get(class_name)
|
23
|
-
return klass.new(*args
|
44
|
+
return klass.new(*args)
|
24
45
|
end
|
25
46
|
|
47
|
+
## Tries to find a Gtk widget for the given name
|
48
|
+
# @return the found widget class or nil.
|
26
49
|
def _find_gtk_class(name)
|
27
50
|
name = name.to_s.gsub("_", "").downcase
|
28
51
|
return ::Gtk.constants.find do |constant|
|
@@ -30,17 +53,22 @@ module Builder::Gtk
|
|
30
53
|
end
|
31
54
|
end
|
32
55
|
|
56
|
+
## Creates a proxy for the given widget with the given name.
|
57
|
+
# If no proxy can be created, returns the widget itself.
|
33
58
|
def _get_proxy(name, widget)
|
34
59
|
case name.to_s
|
35
|
-
when "
|
60
|
+
when "window" then return WindowvboxProxy.new(widget)
|
36
61
|
when "vbox" then return BoxProxy.new(widget)
|
37
62
|
when "hbox" then return BoxProxy.new(widget)
|
38
|
-
else return
|
63
|
+
else return widget
|
39
64
|
end
|
40
65
|
end
|
41
66
|
|
67
|
+
## Must be reimplemented by subclasses to actually pack the
|
68
|
+
# given widget.
|
69
|
+
# Raises an exception by default.
|
42
70
|
def _pack_widget(widget)
|
43
|
-
raise RuntimeError.new("cannot pack inside this widget")
|
71
|
+
raise RuntimeError.new("cannot pack inside this widget. This is a bug in the gtkbuilder implementation")
|
44
72
|
end
|
45
73
|
|
46
74
|
end
|
data/lib/proxies/window.rb
CHANGED
@@ -2,16 +2,19 @@ require 'proxies/layout.rb'
|
|
2
2
|
|
3
3
|
module Builder::Gtk
|
4
4
|
|
5
|
+
## Proxies a window.
|
5
6
|
class WindowProxy
|
6
7
|
|
7
8
|
include LayoutProxy
|
8
9
|
|
10
|
+
## Creates a new window proxy and a new window.
|
9
11
|
def initialize(*args)
|
10
12
|
@widget = ::Gtk::Window.new(*args)
|
11
13
|
end
|
12
14
|
|
13
15
|
private
|
14
16
|
|
17
|
+
## Packs the given widget into the window.
|
15
18
|
def _pack_widget(widget)
|
16
19
|
@widget.add(widget)
|
17
20
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gtkbuilder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.2'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,9 +9,9 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-21 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
|
-
description: Builder::Gtk
|
14
|
+
description: Builder::Gtk let's you build Gtk windows using a simple DSL
|
15
15
|
email:
|
16
16
|
- github@rottenrei.be
|
17
17
|
executables: []
|
@@ -47,5 +47,5 @@ rubyforge_project:
|
|
47
47
|
rubygems_version: 1.8.11
|
48
48
|
signing_key:
|
49
49
|
specification_version: 3
|
50
|
-
summary: Easy
|
50
|
+
summary: Easy way to generate simple Gtk GUIs
|
51
51
|
test_files: []
|