white_gold 0.0.2 → 0.0.4
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.
- checksums.yaml +4 -4
- data/ext/dll/tgui.dll +0 -0
- data/ext/so/libtgui.so +0 -0
- data/lib/white_gold/abi/enum.rb +1 -1
- data/lib/white_gold/abi/extern_object.rb +6 -1
- data/lib/white_gold/abi/interface/interface.rb +3 -7
- data/lib/white_gold/abi/unpacker.rb +4 -2
- data/lib/white_gold/convention/bang_def.rb +14 -0
- data/lib/white_gold/convention/bang_nest.rb +12 -2
- data/lib/white_gold/convention/bang_nested_caller.rb +65 -32
- data/lib/white_gold/convention/container_widgets.rb +61 -96
- data/lib/white_gold/convention/page.rb +28 -4
- data/lib/white_gold/convention/theme/boolean_attribute.rb +11 -9
- data/lib/white_gold/convention/theme/color_attribute.rb +11 -9
- data/lib/white_gold/convention/theme/float_attribute.rb +11 -9
- data/lib/white_gold/convention/theme/outline_attribute.rb +11 -9
- data/lib/white_gold/convention/theme/text_styles_attribute.rb +16 -9
- data/lib/white_gold/convention/theme/texture_attribute.rb +14 -12
- data/lib/white_gold/convention/theme/theme_attributed.rb +1 -1
- data/lib/white_gold/convention/theme/theme_component.rb +1 -1
- data/lib/white_gold/convention/theme_attributes.rb +6 -2
- data/lib/white_gold/convention/tree_node.rb +43 -0
- data/lib/white_gold/convention/widget/keyboard_control.rb +30 -0
- data/lib/white_gold/convention/widget_class_aliases.rb +24 -0
- data/lib/white_gold/convention/widget_like.rb +0 -6
- data/lib/white_gold/dsl/backend_gui.rb +1 -0
- data/lib/white_gold/dsl/canvas.rb +40 -0
- data/lib/white_gold/dsl/chat_box.rb +1 -1
- data/lib/white_gold/dsl/child_window.rb +1 -1
- data/lib/white_gold/dsl/color.rb +9 -4
- data/lib/white_gold/dsl/combo_box.rb +2 -2
- data/lib/white_gold/dsl/container.rb +18 -12
- data/lib/white_gold/dsl/custom_widget.rb +28 -0
- data/lib/white_gold/dsl/font.rb +5 -1
- data/lib/white_gold/dsl/grid.rb +37 -13
- data/lib/white_gold/dsl/gui.rb +10 -1
- data/lib/white_gold/dsl/label.rb +3 -0
- data/lib/white_gold/dsl/list_box.rb +7 -11
- data/lib/white_gold/dsl/list_view.rb +6 -6
- data/lib/white_gold/dsl/menu_bar.rb +5 -48
- data/lib/white_gold/dsl/message_box.rb +3 -3
- data/lib/white_gold/dsl/panel.rb +8 -0
- data/lib/white_gold/dsl/panel_list_box.rb +12 -3
- data/lib/white_gold/dsl/radio_button.rb +15 -2
- data/lib/white_gold/dsl/scrollable_panel.rb +7 -0
- data/lib/white_gold/dsl/sfml/circle_shape.rb +11 -0
- data/lib/white_gold/dsl/sfml/convex_shape.rb +19 -0
- data/lib/white_gold/dsl/sfml/rectangle_shape.rb +11 -0
- data/lib/white_gold/dsl/sfml/shape.rb +19 -0
- data/lib/white_gold/dsl/sfml/text.rb +26 -0
- data/lib/white_gold/dsl/signal/global_signal.rb +1 -1
- data/lib/white_gold/dsl/signal/signal.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_animation_type.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_bool.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_color.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_float.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_int.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_pointer.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_range.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_show_effect.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_string.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_u_int.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_vector2f.rb +1 -1
- data/lib/white_gold/dsl/tab_container.rb +2 -2
- data/lib/white_gold/dsl/tabs.rb +2 -2
- data/lib/white_gold/dsl/theme.rb +2 -2
- data/lib/white_gold/dsl/toggle_button.rb +3 -0
- data/lib/white_gold/dsl/tree_view.rb +21 -33
- data/lib/white_gold/dsl/widget.rb +112 -49
- data/lib/white_gold/dsl/window.rb +7 -0
- data/lib/white_gold/generated/tgui-abi-loader.gf.rb +273 -48
- data/lib/white_gold/library/theme/light.rb +8 -1
- data/lib/white_gold/master.rb +43 -42
- data/lib/white_gold/path/array.path.rb +16 -0
- data/lib/white_gold/tgui-abi.rb +48 -38
- data/lib/white_gold/version.rb +3 -0
- data/lib/white_gold.rb +31 -28
- metadata +20 -6
- data/lib/white_gold/abi/reducer.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ef8367abb4fbdbbcab9b6fb824a8660bbe43e60ff818dfb4838205a1ff4c97c
|
4
|
+
data.tar.gz: ffda1d2acecfd09228b7650cf08142d7c5bdb8efc5113e33dd66b2a111be887a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b201a718db038a62788d2e3a89e51adb692fee0667c79037ae331c97f18f4b4756a02048ae82b7fb33204ab423b02088406b7f4e62b76ee849ff5f59c0113182
|
7
|
+
data.tar.gz: af5a2ee75a76096a46bd4c6d0b8f28058ca45eb04d1e213c2d686822be1a109d4bded3eddcfca902d0a18d032ba0f4c3ec07c3bb111c40567dad63206e22482c
|
data/ext/dll/tgui.dll
CHANGED
Binary file
|
data/ext/so/libtgui.so
CHANGED
Binary file
|
data/lib/white_gold/abi/enum.rb
CHANGED
@@ -17,6 +17,7 @@ class ExternObject
|
|
17
17
|
end
|
18
18
|
ObjectSpace.define_finalizer(self, cl.proc.finalizer(pointer))
|
19
19
|
end
|
20
|
+
initialized
|
20
21
|
end
|
21
22
|
|
22
23
|
def initialized
|
@@ -102,7 +103,11 @@ class ExternObject
|
|
102
103
|
getter = "#{original_name}#{name}".delete_suffix("?").to_sym
|
103
104
|
setter = "set_#{name}".delete_suffix("?").to_sym
|
104
105
|
else
|
105
|
-
|
106
|
+
if name.end_with? "?"
|
107
|
+
getter = "is_#{original_name}".to_sym
|
108
|
+
else
|
109
|
+
getter = "get_#{original_name}".to_sym
|
110
|
+
end
|
106
111
|
setter = "set_#{original_name}".to_sym
|
107
112
|
end
|
108
113
|
else
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require_relative '../reducer'
|
2
|
-
|
3
1
|
module Interface
|
4
2
|
|
5
3
|
def self.abi_const_string_method_suffix str
|
@@ -8,17 +6,15 @@ module Interface
|
|
8
6
|
|
9
7
|
def self.parse_packer packer
|
10
8
|
case packer
|
11
|
-
when Proc
|
9
|
+
when Proc
|
12
10
|
packer
|
13
11
|
when Array
|
14
12
|
packers = packer.map{ parse_packer _1 }
|
15
13
|
proc do |host, *a|
|
16
|
-
|
17
|
-
packers.map do |packer|
|
14
|
+
packers.zip(a).map do |packer, arg|
|
18
15
|
case packer
|
19
|
-
when Proc then packer.call host, *
|
16
|
+
when Proc then packer.call host, *arg
|
20
17
|
when nil then ai.next
|
21
|
-
when Reducer then packer.call host, *(0..packer.reduction).map{ ai.next }
|
22
18
|
else packer
|
23
19
|
end
|
24
20
|
end.flatten
|
@@ -2,15 +2,17 @@ require_relative 'interface/interface'
|
|
2
2
|
|
3
3
|
module Unpacker
|
4
4
|
def abi_unpacker base, &body
|
5
|
+
method_name = abi_unpacker_method_name(base)
|
5
6
|
if block_given?
|
6
|
-
define_method
|
7
|
+
define_method method_name, &body
|
7
8
|
elsif base.is_a? Module
|
8
|
-
define_method
|
9
|
+
define_method method_name do |o|
|
9
10
|
base.new pointer: o
|
10
11
|
end
|
11
12
|
else
|
12
13
|
raise "..."
|
13
14
|
end
|
15
|
+
method_name
|
14
16
|
end
|
15
17
|
|
16
18
|
def abi_unpacker_method_name base
|
@@ -1,5 +1,19 @@
|
|
1
|
+
require_relative 'bang_nested_caller'
|
2
|
+
|
1
3
|
module BangDef
|
2
4
|
def def! name, &b
|
3
5
|
define_method "api_bang_#{name}", &b
|
4
6
|
end
|
7
|
+
|
8
|
+
@@redef_index = 0
|
9
|
+
|
10
|
+
def redef! name, &b
|
11
|
+
@@redef_index = index = @@redef_index.next
|
12
|
+
old = "api_bang_#{index}_#{name}"
|
13
|
+
news = "api_bang_#{name}"
|
14
|
+
alias_method old, news
|
15
|
+
define_method news do |*a, **na, &bl|
|
16
|
+
b.call old, *a, **na, &bl
|
17
|
+
end
|
18
|
+
end
|
5
19
|
end
|
@@ -4,13 +4,23 @@ module BangNest
|
|
4
4
|
include BangNestedCaller
|
5
5
|
|
6
6
|
def respond_to? name
|
7
|
-
super || bang_respond_to?(name)
|
7
|
+
super || (name.end_with?("!") && bang_respond_to?(name[...-1]))
|
8
8
|
end
|
9
9
|
|
10
10
|
def method_missing name, *a, **na, &b
|
11
11
|
if name.end_with? "!"
|
12
|
-
bang_method_missing name, *a, **na, &b
|
12
|
+
bang_method_missing name[...-1], *a, **na, &b
|
13
13
|
else super
|
14
14
|
end
|
15
15
|
end
|
16
|
+
|
17
|
+
def host! *a, **na, &b
|
18
|
+
a.each do |k|
|
19
|
+
send("#{k}=", true)
|
20
|
+
end
|
21
|
+
na.each do |k, v|
|
22
|
+
send("#{k}=", v)
|
23
|
+
end
|
24
|
+
super(&b)
|
25
|
+
end
|
16
26
|
end
|
@@ -1,48 +1,81 @@
|
|
1
1
|
module BangNestedCaller
|
2
|
-
|
3
|
-
name.end_with?("!") && (respond_to?("#{name[...-1]}=") || respond_to?("api_bang_#{name[...-1]}") || (@bang_target && @bang_target.respond_to?(name)))
|
4
|
-
end
|
2
|
+
API_BANG_PREFIX = "api_bang_".freeze
|
5
3
|
|
6
|
-
|
7
|
-
|
4
|
+
@@bang_stack = []
|
5
|
+
@@bang_roots = []
|
8
6
|
|
9
|
-
|
10
|
-
|
7
|
+
class << self
|
8
|
+
def stack
|
9
|
+
@@bang_stack
|
10
|
+
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
return send(setter, a) if !a.empty?
|
15
|
-
return send(setter, na) if !na.empty?
|
16
|
-
return send(setter, b) if block_given?
|
17
|
-
return send(setter)
|
12
|
+
def roots
|
13
|
+
@@bang_roots
|
18
14
|
end
|
19
15
|
|
20
|
-
|
21
|
-
|
16
|
+
def current root
|
17
|
+
@@bang_roots.include?(root) ? @@bang_stack.last : root
|
18
|
+
end
|
19
|
+
|
20
|
+
def push object
|
21
|
+
@@bang_stack.push object
|
22
|
+
end
|
23
|
+
|
24
|
+
def pop
|
25
|
+
@@bang_stack.pop
|
26
|
+
end
|
27
|
+
|
28
|
+
def open_scope object
|
29
|
+
@@bang_roots << object
|
30
|
+
end
|
31
|
+
|
32
|
+
def close_scope object
|
33
|
+
@@bang_roots.delete_at @@bang_roots.index(object)
|
34
|
+
end
|
22
35
|
end
|
23
36
|
|
24
37
|
def self!
|
25
|
-
|
38
|
+
BangNestedCaller.current self
|
26
39
|
end
|
27
40
|
|
28
|
-
def
|
29
|
-
|
30
|
-
|
31
|
-
stack << @bang_target if @bang_target
|
32
|
-
stack += @bang_target.bang_object_stack(false) if @bang_target&.respond_to? :bang_object_stack
|
33
|
-
return stack
|
41
|
+
def bang_respond_to? name
|
42
|
+
top = BangNestedCaller.current self
|
43
|
+
top.respond_to?("#{name}=") || top.respond_to?("#{API_BANG_PREFIX}#{name}")
|
34
44
|
end
|
35
45
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
if
|
42
|
-
|
43
|
-
|
44
|
-
|
46
|
+
def bang_method_missing name, *a, **na, &b
|
47
|
+
top = BangNestedCaller.current self
|
48
|
+
api_bang_name = "#{API_BANG_PREFIX}#{name}".to_sym
|
49
|
+
return top.send(api_bang_name, *a, **na, &b) if top.respond_to? api_bang_name
|
50
|
+
setter = "#{name}=".to_sym
|
51
|
+
if top.respond_to? setter
|
52
|
+
return top.send(setter, a) if !a.empty?
|
53
|
+
return top.send(setter, na) if !na.empty?
|
54
|
+
return top.send(setter, b) if block_given?
|
55
|
+
return top.send(setter)
|
45
56
|
end
|
46
|
-
|
57
|
+
no_method_error = NoMethodError.new("bang method missing `#{name}!` for #{top.class}")
|
58
|
+
raise no_method_error
|
59
|
+
end
|
60
|
+
|
61
|
+
def send! method, *a, **na, &b
|
62
|
+
send "api_bang_#{method}", *a, **na, &b
|
63
|
+
end
|
64
|
+
|
65
|
+
def host! &b
|
66
|
+
return self if !b
|
67
|
+
BangNestedCaller.push self
|
68
|
+
result = b.call self
|
69
|
+
BangNestedCaller.pop
|
70
|
+
result
|
71
|
+
end
|
72
|
+
|
73
|
+
def scope! scoped = nil, *a, **na, &b
|
74
|
+
scoped ||= self
|
75
|
+
BangNestedCaller.open_scope self
|
76
|
+
scoped.host! *a, **na, &b
|
77
|
+
BangNestedCaller.close_scope self
|
78
|
+
scoped
|
47
79
|
end
|
80
|
+
|
48
81
|
end
|
@@ -2,88 +2,68 @@ require_relative '../convention/api_child'
|
|
2
2
|
|
3
3
|
module Tgui
|
4
4
|
|
5
|
-
|
5
|
+
ORDINARY_WIDGETS = {
|
6
6
|
bitmap_button: Tgui::BitmapButton,
|
7
7
|
button: Tgui::Button,
|
8
|
-
|
9
|
-
|
8
|
+
canvas: Tgui::Canvas,
|
9
|
+
chatbox: Tgui::Chatbox,
|
10
|
+
checkbox: Tgui::Checkbox,
|
10
11
|
child_window: Tgui::ChildWindow,
|
11
12
|
color_picker: Tgui::ColorPicker,
|
12
|
-
combobox: Tgui::
|
13
|
-
editbox: Tgui::
|
13
|
+
combobox: Tgui::Combobox,
|
14
|
+
editbox: Tgui::Editbox,
|
14
15
|
file_dialog: Tgui::FileDialog,
|
15
16
|
grid: Tgui::Grid,
|
16
17
|
group: Tgui::Group,
|
17
|
-
|
18
|
-
|
18
|
+
hlayout: Tgui::Hlayout,
|
19
|
+
hwrap: Tgui::Hwrap,
|
19
20
|
knob: Tgui::Knob,
|
20
21
|
label: Tgui::Label,
|
21
|
-
listbox: Tgui::
|
22
|
-
listview: Tgui::
|
23
|
-
menu: Tgui::
|
24
|
-
messagebox: Tgui::MessageBox,
|
22
|
+
listbox: Tgui::Listbox,
|
23
|
+
listview: Tgui::Listview,
|
24
|
+
menu: Tgui::Menu,
|
25
25
|
panel: Tgui::Panel,
|
26
|
-
panel_listbox: Tgui::
|
27
|
-
panel_tabs: Tgui::
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
radio_button: Tgui::RadioButton,
|
32
|
-
radio_button_group: Tgui::RadioButtonGroup,
|
26
|
+
panel_listbox: Tgui::PanelListbox,
|
27
|
+
panel_tabs: Tgui::PanelTabs,
|
28
|
+
progressbar: Tgui::Progressbar,
|
29
|
+
radio: Tgui::RadioButton,
|
30
|
+
radio_group: Tgui::RadioGroup,
|
33
31
|
range_slider: Tgui::RangeSlider,
|
34
|
-
fancy_label: Tgui::
|
32
|
+
fancy_label: Tgui::FancyLabel,
|
35
33
|
scrollbar: Tgui::Scrollbar,
|
36
|
-
separator: Tgui::
|
34
|
+
separator: Tgui::Separator,
|
37
35
|
slider: Tgui::Slider,
|
38
|
-
|
39
|
-
|
36
|
+
spinner: Tgui::Spinner,
|
37
|
+
spinbox: Tgui::Spinbox,
|
40
38
|
tabs: Tgui::Tabs,
|
41
|
-
textarea: Tgui::
|
39
|
+
textarea: Tgui::Textarea,
|
42
40
|
toggle_button: Tgui::ToggleButton,
|
43
|
-
treeview: Tgui::
|
44
|
-
|
41
|
+
treeview: Tgui::Treeview,
|
42
|
+
vlayout: Tgui::Vlayout,
|
45
43
|
}.freeze
|
46
44
|
|
45
|
+
UNORDINARY_WIDGETS = {
|
46
|
+
messagebox: Tgui::Messagebox,
|
47
|
+
picture: Tgui::Picture,
|
48
|
+
keyboard_control: Tgui::KeyboardControl
|
49
|
+
}
|
50
|
+
|
51
|
+
def self.widget_set
|
52
|
+
{}.merge ORDINARY_WIDGETS, UNORDINARY_WIDGETS
|
53
|
+
end
|
54
|
+
|
47
55
|
module WidgetOwner
|
48
56
|
extend BangDef
|
49
57
|
|
50
|
-
def
|
51
|
-
club_params = {}
|
52
|
-
Enumerator.new do |e|
|
53
|
-
cl = widget.class
|
54
|
-
while cl != Object
|
55
|
-
e << cl
|
56
|
-
cl = cl.superclass
|
57
|
-
end
|
58
|
-
e << Object
|
59
|
-
end.to_a.reverse!.each do |key|
|
60
|
-
if key == widget.class
|
61
|
-
club = page.club key
|
62
|
-
club.join id if id
|
63
|
-
else
|
64
|
-
club = page.club key, create_on_missing: false
|
65
|
-
end
|
66
|
-
club_params.merge! club.params if club
|
67
|
-
end
|
68
|
-
|
69
|
-
keys.each do |key|
|
70
|
-
club = page.club key
|
71
|
-
club.join id if id
|
72
|
-
club_params.merge! club.params
|
73
|
-
end
|
74
|
-
|
75
|
-
upon! widget, **club_params, **na, &b
|
76
|
-
end
|
77
|
-
|
78
|
-
def child_methods
|
58
|
+
def self_child_methods
|
79
59
|
## TO OPTIMIZE
|
80
60
|
methods.filter{ _1.start_with? ApiChild::API_CHILD_PREFIX }
|
81
61
|
end
|
82
62
|
|
83
|
-
def
|
63
|
+
def self_equip_widget widget
|
84
64
|
widget.page = page
|
85
65
|
parent = self
|
86
|
-
|
66
|
+
self_child_methods.each do |method|
|
87
67
|
widget.define_singleton_method method[ApiChild::API_CHILD_PREFIX.length..] do |*a|
|
88
68
|
parent.send(method, self, *a)
|
89
69
|
end
|
@@ -91,11 +71,11 @@ module Tgui
|
|
91
71
|
widget
|
92
72
|
end
|
93
73
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
74
|
+
ORDINARY_WIDGETS.each do |m, c|
|
75
|
+
def! m do |*a, **na, &b|
|
76
|
+
widget = c.new
|
77
|
+
add! widget
|
78
|
+
scope! widget, *a, **na, &b
|
99
79
|
end
|
100
80
|
end
|
101
81
|
|
@@ -110,35 +90,23 @@ module Tgui
|
|
110
90
|
)
|
111
91
|
transparent = na[:transparent] || false
|
112
92
|
pic = Tgui::Picture.new texture, transparent
|
113
|
-
|
114
|
-
|
93
|
+
add! pic
|
94
|
+
scope! pic, *a, **na.except(:url, :part_rect, :smooth, :transparent), &b
|
115
95
|
end
|
116
96
|
|
117
|
-
|
118
|
-
radio = RadioButton.new
|
119
|
-
equip_child_widget radio
|
120
|
-
radio.object = object
|
121
|
-
na[:text] ||= object.to_s
|
122
|
-
common_widget_post_initialize radio, *a, **na, &b
|
123
|
-
end
|
124
|
-
|
125
|
-
def! :msg do |text, **buttons|
|
126
|
-
buttons["OK"] = nil if buttons.empty?
|
127
|
-
api_bang_message_box text:, position: :center, label_alignment: :center, buttons: (buttons.map do |k, v|
|
128
|
-
procedure = proc do |o, b, w|
|
129
|
-
v&.call
|
130
|
-
w.close true
|
131
|
-
end
|
132
|
-
[k, procedure]
|
133
|
-
end)
|
134
|
-
end
|
135
|
-
|
136
|
-
@@auto_button_name = "Button0"
|
97
|
+
@@auto_btn_name = "Button0"
|
137
98
|
|
138
99
|
def! :btn do |text = nil, **na, &on_press|
|
139
|
-
text = @@
|
100
|
+
text = @@auto_btn_name = @@auto_btn_name.next if !text
|
140
101
|
api_bang_button text:, on_press:, **na
|
141
102
|
end
|
103
|
+
|
104
|
+
def! :keyboard_control do |*a, focus: true, **na, &b|
|
105
|
+
keyboard_control = KeyboardControl.new
|
106
|
+
add! keyboard_control
|
107
|
+
keyboard_control.focus! if focus
|
108
|
+
scope! keyboard_control, *a, **na, &b
|
109
|
+
end
|
142
110
|
end
|
143
111
|
|
144
112
|
class Container
|
@@ -146,22 +114,19 @@ module Tgui
|
|
146
114
|
|
147
115
|
@@auto_widget_id = "@/"
|
148
116
|
|
149
|
-
def
|
117
|
+
def! :add do |widget|
|
118
|
+
self_equip_widget widget
|
150
119
|
@@auto_widget_id = id = @@auto_widget_id.next
|
151
|
-
|
152
|
-
common_widget_nest widget, *keys, id:, **na, &b
|
120
|
+
self_add widget, id
|
153
121
|
end
|
154
|
-
|
155
122
|
end
|
156
123
|
|
157
124
|
class TabContainer
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
raise NoMethodError.new("Method `#{m}` should be called on Panel from TabContainer, not TabContainer itself")
|
162
|
-
end
|
163
|
-
end
|
125
|
+
|
126
|
+
def self_add widget, name
|
127
|
+
raise NoMethodError.new("Widget can't be added to TabContainer directly. Add it to TabContainer panel instead.")
|
164
128
|
end
|
129
|
+
|
165
130
|
end
|
166
131
|
|
167
132
|
class ToolTip
|
@@ -169,9 +134,9 @@ module Tgui
|
|
169
134
|
|
170
135
|
attr :widget
|
171
136
|
|
172
|
-
def
|
137
|
+
def! :add do |widget, *keys, **na, &b|
|
173
138
|
@widget = widget
|
174
|
-
|
139
|
+
scope! widget, *keys, **na, &b
|
175
140
|
end
|
176
141
|
end
|
177
142
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative "club"
|
2
2
|
|
3
|
-
class Page < Tgui::
|
3
|
+
class Page < Tgui::Panel
|
4
4
|
|
5
5
|
def initialize tgui
|
6
6
|
super()
|
@@ -22,6 +22,24 @@ class Page < Tgui::Group
|
|
22
22
|
def build
|
23
23
|
end
|
24
24
|
|
25
|
+
def respond_to? name
|
26
|
+
super ||
|
27
|
+
(name.end_with?("!") && bang_respond_to?(name[...-1])) ||
|
28
|
+
@tgui.gui.respond_to?(name) ||
|
29
|
+
@tgui.window.respond_to?(name)
|
30
|
+
end
|
31
|
+
|
32
|
+
def method_missing name, *a, **na, &b
|
33
|
+
if name.end_with? "!"
|
34
|
+
bang_method_missing name[...-1], *a, **na, &b
|
35
|
+
elsif @tgui.gui.respond_to? name
|
36
|
+
@tgui.gui.send name, *a, **na, &b
|
37
|
+
elsif @tgui.window.respond_to? name
|
38
|
+
@tgui.window.send name, *a, **na, &b
|
39
|
+
else super
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
25
43
|
def disconnect
|
26
44
|
@global_callbacks.each do |id, signal|
|
27
45
|
signal.disconnect id
|
@@ -79,11 +97,11 @@ class Page < Tgui::Group
|
|
79
97
|
theme = self.theme
|
80
98
|
if seed
|
81
99
|
theme.reset_attributes
|
82
|
-
|
83
|
-
|
100
|
+
scope! theme do
|
101
|
+
eval File.read(Tgui::Theme.loadpath(seed))
|
84
102
|
end
|
85
103
|
end
|
86
|
-
|
104
|
+
scope! theme, **na, &b
|
87
105
|
theme.self_commit @custom_renderers
|
88
106
|
end
|
89
107
|
|
@@ -93,4 +111,10 @@ class Page < Tgui::Group
|
|
93
111
|
theme.source = path
|
94
112
|
theme.self_commit @custom_renderers
|
95
113
|
end
|
114
|
+
|
115
|
+
def! :messagebox do |*a, **na, &b|
|
116
|
+
messagebox = MessageBox.new
|
117
|
+
add! messagebox
|
118
|
+
scope! messagebox, *a, **na, &b
|
119
|
+
end
|
96
120
|
end
|
@@ -1,13 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module Tgui
|
2
|
+
class BooleanAttribute
|
3
|
+
def initialize name, value
|
4
|
+
@name = name
|
5
|
+
@value = value[0]
|
6
|
+
end
|
6
7
|
|
7
|
-
|
8
|
-
|
8
|
+
attr :name
|
9
|
+
attr :value
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
def to_theme
|
12
|
+
"#{name} = #{value};"
|
13
|
+
end
|
12
14
|
end
|
13
15
|
end
|
@@ -1,15 +1,17 @@
|
|
1
1
|
require_relative '../../dsl/color'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
module Tgui
|
4
|
+
class ColorAttribute
|
5
|
+
def initialize name, value
|
6
|
+
@name = name
|
7
|
+
@value = Color.from *value
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
10
|
+
attr :name
|
11
|
+
attr :value
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
def to_theme
|
14
|
+
"#{name} = #{value.to_s};"
|
15
|
+
end
|
14
16
|
end
|
15
17
|
end
|
@@ -1,13 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module Tgui
|
2
|
+
class FloatAttribute
|
3
|
+
def initialize name, value
|
4
|
+
@name = name
|
5
|
+
@value = value[0]
|
6
|
+
end
|
6
7
|
|
7
|
-
|
8
|
-
|
8
|
+
attr :name
|
9
|
+
attr :value
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
def to_theme
|
12
|
+
"#{name} = #{value};"
|
13
|
+
end
|
12
14
|
end
|
13
15
|
end
|
@@ -1,15 +1,17 @@
|
|
1
1
|
require_relative '../../dsl/outline'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
module Tgui
|
4
|
+
class OutlineAttribute
|
5
|
+
def initialize name, value
|
6
|
+
@name = name
|
7
|
+
@value = Outline.from *value
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
10
|
+
attr :name
|
11
|
+
attr :value
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
def to_theme
|
14
|
+
"#{name} = #{value.to_s};"
|
15
|
+
end
|
14
16
|
end
|
15
17
|
end
|