white_gold 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/ext/dll/tgui.dll +0 -0
  3. data/ext/so/libtgui.so +0 -0
  4. data/lib/white_gold/abi/enum.rb +1 -1
  5. data/lib/white_gold/abi/extern_object.rb +2 -2
  6. data/lib/white_gold/abi/interface/interface.rb +3 -7
  7. data/lib/white_gold/convention/container_widgets.rb +47 -87
  8. data/lib/white_gold/convention/page.rb +18 -8
  9. data/lib/white_gold/convention/theme/boolean_attribute.rb +11 -9
  10. data/lib/white_gold/convention/theme/color_attribute.rb +11 -9
  11. data/lib/white_gold/convention/theme/float_attribute.rb +11 -9
  12. data/lib/white_gold/convention/theme/outline_attribute.rb +11 -9
  13. data/lib/white_gold/convention/theme/text_styles_attribute.rb +14 -12
  14. data/lib/white_gold/convention/theme/texture_attribute.rb +14 -12
  15. data/lib/white_gold/convention/theme/theme_attributed.rb +2 -2
  16. data/lib/white_gold/convention/theme/theme_component.rb +2 -2
  17. data/lib/white_gold/convention/theme_attributes.rb +6 -2
  18. data/lib/white_gold/convention/widget/keyboard_control.rb +30 -0
  19. data/lib/white_gold/convention/widget_class_aliases.rb +24 -0
  20. data/lib/white_gold/convention/widget_like.rb +1 -4
  21. data/lib/white_gold/dsl/backend_gui.rb +5 -4
  22. data/lib/white_gold/dsl/canvas.rb +5 -5
  23. data/lib/white_gold/dsl/chat_box.rb +1 -1
  24. data/lib/white_gold/dsl/child_window.rb +2 -2
  25. data/lib/white_gold/dsl/color.rb +39 -29
  26. data/lib/white_gold/dsl/combo_box.rb +2 -2
  27. data/lib/white_gold/dsl/container.rb +1 -1
  28. data/lib/white_gold/dsl/custom_widget.rb +28 -0
  29. data/lib/white_gold/dsl/edit_box.rb +1 -2
  30. data/lib/white_gold/dsl/font.rb +4 -0
  31. data/lib/white_gold/dsl/grid.rb +34 -10
  32. data/lib/white_gold/dsl/gui.rb +14 -1
  33. data/lib/white_gold/dsl/label.rb +3 -2
  34. data/lib/white_gold/dsl/list_box.rb +2 -2
  35. data/lib/white_gold/dsl/list_view.rb +12 -12
  36. data/lib/white_gold/dsl/menu_bar.rb +4 -4
  37. data/lib/white_gold/dsl/message_box.rb +3 -3
  38. data/lib/white_gold/dsl/outline.rb +4 -0
  39. data/lib/white_gold/dsl/panel.rb +8 -0
  40. data/lib/white_gold/dsl/panel_list_box.rb +12 -3
  41. data/lib/white_gold/dsl/picture.rb +0 -2
  42. data/lib/white_gold/dsl/radio_button.rb +16 -3
  43. data/lib/white_gold/dsl/scrollable_panel.rb +7 -0
  44. data/lib/white_gold/dsl/sfml/circle_shape.rb +4 -0
  45. data/lib/white_gold/dsl/sfml/convex_shape.rb +4 -0
  46. data/lib/white_gold/dsl/sfml/rectangle_shape.rb +4 -0
  47. data/lib/white_gold/dsl/sfml/shape.rb +3 -2
  48. data/lib/white_gold/dsl/sfml/text.rb +7 -1
  49. data/lib/white_gold/dsl/signal/global_signal.rb +1 -1
  50. data/lib/white_gold/dsl/signal/signal.rb +1 -1
  51. data/lib/white_gold/dsl/signal/signal_animation_type.rb +1 -1
  52. data/lib/white_gold/dsl/signal/signal_bool.rb +4 -4
  53. data/lib/white_gold/dsl/signal/signal_color.rb +1 -1
  54. data/lib/white_gold/dsl/signal/signal_float.rb +1 -1
  55. data/lib/white_gold/dsl/signal/signal_int.rb +1 -1
  56. data/lib/white_gold/dsl/signal/signal_pointer.rb +1 -1
  57. data/lib/white_gold/dsl/signal/signal_range.rb +1 -1
  58. data/lib/white_gold/dsl/signal/signal_show_effect.rb +1 -1
  59. data/lib/white_gold/dsl/signal/signal_string.rb +1 -1
  60. data/lib/white_gold/dsl/signal/signal_u_int.rb +1 -1
  61. data/lib/white_gold/dsl/signal/signal_vector2f.rb +1 -1
  62. data/lib/white_gold/dsl/tab_container.rb +2 -2
  63. data/lib/white_gold/dsl/tabs.rb +2 -2
  64. data/lib/white_gold/dsl/texture.rb +6 -1
  65. data/lib/white_gold/dsl/theme.rb +3 -4
  66. data/lib/white_gold/dsl/toggle_button.rb +3 -0
  67. data/lib/white_gold/dsl/tree_view.rb +2 -2
  68. data/lib/white_gold/dsl/util.rb +3 -1
  69. data/lib/white_gold/dsl/widget.rb +59 -27
  70. data/lib/white_gold/dsl/window.rb +12 -2
  71. data/lib/white_gold/generated/tgui-abi-loader.gf.rb +106 -15
  72. data/lib/white_gold/library/theme/light.rb +8 -1
  73. data/lib/white_gold/master.rb +77 -44
  74. data/lib/white_gold/path/array.path.rb +9 -0
  75. data/lib/white_gold/path/object.path.rb +0 -6
  76. data/lib/white_gold/tgui-abi.rb +36 -31
  77. data/lib/white_gold/version.rb +1 -1
  78. data/lib/white_gold.rb +8 -6
  79. metadata +37 -9
  80. data/lib/white_gold/abi/reducer.rb +0 -12
  81. data/lib/white_gold/convention/bang_def.rb +0 -5
  82. data/lib/white_gold/convention/bang_nest.rb +0 -26
  83. data/lib/white_gold/convention/bang_nested_caller.rb +0 -48
  84. data/lib/white_gold/convention/proc_method_factory.rb +0 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6727469d73967f049141a5c7b128bfb88b5c18cb128ce7b00417e7f889648138
4
- data.tar.gz: f30fed9fdbfc915eb0fb70fded0aabe9593991037af91253427d59b22f053913
3
+ metadata.gz: b6e9f03a09822b6e1c71191072bc13cc29023a6a3f961153216d30f02e70a017
4
+ data.tar.gz: bc946f160aa4db22056fb561b25fe3654739b2fd65ff4863471993f5d1ec4c7f
5
5
  SHA512:
6
- metadata.gz: c9373c37d6ccbbb45b973b55c92dd924ec9bc9511ee4a5b1e244859f956f9133d767b30874255535b3fd715d396fb5b96787076014fcfdd5354005973631ac7e
7
- data.tar.gz: 240acb40c4ef8d00788e704c40eff66c93535b20d57c3973c9a04e50c18e7dae3c3fc808a1f63308700eb11efe4458dcc970033b385f922e38d72ea53e9c88f0
6
+ metadata.gz: e599b9ea2a700c7c106c0109caba34de0d9dbc23777d064f00193af989e56c6fb03a7bfa0200101351d19b49e8c0cca556f19c994b34bdb0b2b26e852e149ce6
7
+ data.tar.gz: 3cccc9cec49e91a52e8f53cbdada968ad5319e64dd612f56814457f238b0343ca3a562da3b4e636f25821579b5514e62fa09e86aeaf06e992a0d521049a1c7d4
data/ext/dll/tgui.dll CHANGED
Binary file
data/ext/so/libtgui.so CHANGED
Binary file
@@ -22,7 +22,7 @@ class Enum
22
22
  end
23
23
 
24
24
  def pack *k
25
- k.map{ @symbol_to_int[_1] }.reduce(0, &:|)
25
+ k.map{ sym_to_i _1 }.reduce(0, &:|)
26
26
  end
27
27
 
28
28
  def unpack m
@@ -1,11 +1,10 @@
1
- require_relative '../convention/bang_def'
2
1
  require_relative 'packer'
3
2
  require_relative 'unpacker'
4
3
 
5
4
  class ExternObject
6
5
  extend Packer
7
6
  extend Unpacker
8
- extend BangDef
7
+ include Extree
9
8
 
10
9
  def initialize pointer:, autofree: true
11
10
  @pointer = pointer
@@ -14,6 +13,7 @@ class ExternObject
14
13
  cl = self.class
15
14
  while !cl.respond_to?(:finalizer)
16
15
  cl = cl.superclass
16
+ raise "Undefined finalizer for #{self.class}" if cl == ExternObject
17
17
  end
18
18
  ObjectSpace.define_finalizer(self, cl.proc.finalizer(pointer))
19
19
  end
@@ -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, Reducer
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
- ai = a.each
17
- packers.map do |packer|
14
+ packers.zip(a).map do |packer, arg|
18
15
  case packer
19
- when Proc then packer.call host, *ai.next
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
@@ -6,45 +6,46 @@ module Tgui
6
6
  bitmap_button: Tgui::BitmapButton,
7
7
  button: Tgui::Button,
8
8
  canvas: Tgui::Canvas,
9
- chatbox: Tgui::ChatBox,
10
- checkbox: Tgui::CheckBox,
9
+ chatbox: Tgui::Chatbox,
10
+ checkbox: Tgui::Checkbox,
11
11
  child_window: Tgui::ChildWindow,
12
12
  color_picker: Tgui::ColorPicker,
13
- combobox: Tgui::ComboBox,
14
- editbox: Tgui::EditBox,
13
+ combobox: Tgui::Combobox,
14
+ editbox: Tgui::Editbox,
15
15
  file_dialog: Tgui::FileDialog,
16
16
  grid: Tgui::Grid,
17
17
  group: Tgui::Group,
18
- hola: Tgui::HorizontalLayout,
19
- howr: Tgui::HorizontalWrap,
18
+ hlayout: Tgui::Hlayout,
19
+ hwrap: Tgui::Hwrap,
20
20
  knob: Tgui::Knob,
21
21
  label: Tgui::Label,
22
- listbox: Tgui::ListBox,
23
- listview: Tgui::ListView,
24
- menu: Tgui::MenuBar,
25
- messagebox: Tgui::MessageBox,
22
+ listbox: Tgui::Listbox,
23
+ listview: Tgui::Listview,
24
+ menu: Tgui::Menu,
26
25
  panel: Tgui::Panel,
27
- panel_listbox: Tgui::PanelListBox,
28
- panel_tabs: Tgui::TabContainer,
29
- progressbar: Tgui::ProgressBar,
30
- radio_button: Tgui::RadioButton,
31
- 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,
32
31
  range_slider: Tgui::RangeSlider,
33
- fancy_label: Tgui::RichTextLabel,
32
+ fancy_label: Tgui::FancyLabel,
34
33
  scrollbar: Tgui::Scrollbar,
35
- separator: Tgui::SeparatorLine,
34
+ separator: Tgui::Separator,
36
35
  slider: Tgui::Slider,
37
- spin_button: Tgui::SpinButton,
38
- spin_control: Tgui::SpinControl,
36
+ spinner: Tgui::Spinner,
37
+ spinbox: Tgui::Spinbox,
39
38
  tabs: Tgui::Tabs,
40
- textarea: Tgui::TextArea,
39
+ textarea: Tgui::Textarea,
41
40
  toggle_button: Tgui::ToggleButton,
42
- treeview: Tgui::TreeView,
43
- vela: Tgui::VerticalLayout,
41
+ treeview: Tgui::Treeview,
42
+ vlayout: Tgui::Vlayout,
44
43
  }.freeze
45
44
 
46
45
  UNORDINARY_WIDGETS = {
47
- picture: Tgui::Picture
46
+ messagebox: Tgui::Messagebox,
47
+ picture: Tgui::Picture,
48
+ keyboard_control: Tgui::KeyboardControl
48
49
  }
49
50
 
50
51
  def self.widget_set
@@ -52,42 +53,14 @@ module Tgui
52
53
  end
53
54
 
54
55
  module WidgetOwner
55
- extend BangDef
56
-
57
- def self_common_widget_nest widget, *keys, id: nil, **na, &b
58
- club_params = {}
59
- Enumerator.new do |e|
60
- cl = widget.class
61
- while cl != Object
62
- e << cl
63
- cl = cl.superclass
64
- end
65
- e << Object
66
- end.to_a.reverse!.each do |key|
67
- if key == widget.class
68
- club = page.club key
69
- club.join id if id
70
- else
71
- club = page.club key, create_on_missing: false
72
- end
73
- club_params.merge! club.params if club
74
- end
75
-
76
- keys.each do |key|
77
- club = page.club key
78
- club.join id if id
79
- club_params.merge! club.params
80
- end
81
-
82
- widget.send! **club_params, **na, &b
83
- end
56
+ include Extree
84
57
 
85
58
  def self_child_methods
86
59
  ## TO OPTIMIZE
87
60
  methods.filter{ _1.start_with? ApiChild::API_CHILD_PREFIX }
88
61
  end
89
62
 
90
- def self_equip_child_widget widget
63
+ def self_equip_widget widget
91
64
  widget.page = page
92
65
  parent = self
93
66
  self_child_methods.each do |method|
@@ -99,10 +72,10 @@ module Tgui
99
72
  end
100
73
 
101
74
  ORDINARY_WIDGETS.each do |m, c|
102
- if c
103
- def! m do |*a, **na, &b|
104
- self_common_widget_equip self_equip_child_widget(c.new), *a, **na, &b
105
- end
75
+ def! m do |*a, **na, &b|
76
+ widget = c.new
77
+ add! widget
78
+ scope! widget, *a, **na, &b
106
79
  end
107
80
  end
108
81
 
@@ -117,34 +90,22 @@ module Tgui
117
90
  )
118
91
  transparent = na[:transparent] || false
119
92
  pic = Tgui::Picture.new texture, transparent
120
- self_equip_child_widget pic
121
- self_common_widget_equip pic, *a, **na.except(:url, :part_rect, :smooth, :transparent), &b
93
+ add! pic
94
+ scope! pic, *a, **na.except(:url, :part_rect, :smooth, :transparent), &b
122
95
  end
123
96
 
124
- def! :radio do |object, *a, **na, &b|
125
- radio = RadioButton.new
126
- self_equip_child_widget radio
127
- radio.object = object
128
- na[:text] ||= object.to_s
129
- self_common_widget_equip radio, *a, **na, &b
130
- end
97
+ @@auto_btn_name = "Button0"
131
98
 
132
- def! :msg do |text, **buttons|
133
- buttons["OK"] = nil if buttons.empty?
134
- api_bang_message_box text:, position: :center, label_alignment: :center, buttons: (buttons.map do |k, v|
135
- procedure = proc do |o, b, w|
136
- v&.call
137
- w.close true
138
- end
139
- [k, procedure]
140
- end)
99
+ def! :btn do |text = nil, **na, &on_press|
100
+ text = @@auto_btn_name = @@auto_btn_name.next if !text
101
+ send! :button, text:, on_press:, **na
141
102
  end
142
103
 
143
- @@auto_button_name = "Button0"
144
-
145
- def! :btn do |text = nil, **na, &on_press|
146
- text = @@auto_button_name = @@auto_button_name.next if !text
147
- api_bang_button text:, on_press:, **na
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
148
109
  end
149
110
  end
150
111
 
@@ -153,17 +114,16 @@ module Tgui
153
114
 
154
115
  @@auto_widget_id = "@/"
155
116
 
156
- def self_common_widget_equip widget, *keys, **na, &b
117
+ def! :add do |widget|
118
+ self_equip_widget widget
157
119
  @@auto_widget_id = id = @@auto_widget_id.next
158
- add widget, id
159
- self_common_widget_nest widget, *keys, id:, **na, &b
120
+ self_add widget, id
160
121
  end
161
-
162
122
  end
163
123
 
164
124
  class TabContainer
165
125
 
166
- def add widget, name
126
+ def self_add widget, name
167
127
  raise NoMethodError.new("Widget can't be added to TabContainer directly. Add it to TabContainer panel instead.")
168
128
  end
169
129
 
@@ -174,9 +134,9 @@ module Tgui
174
134
 
175
135
  attr :widget
176
136
 
177
- def self_common_widget_equip widget, *keys, **na, &b
137
+ def! :add do |widget, *keys, **na, &b|
178
138
  @widget = widget
179
- self_common_widget_nest widget, *keys, **na, &b
139
+ scope! widget, *keys, **na, &b
180
140
  end
181
141
  end
182
142
 
@@ -1,6 +1,6 @@
1
1
  require_relative "club"
2
2
 
3
- class Page < Tgui::Group
3
+ class Page < Tgui::Panel
4
4
 
5
5
  def initialize tgui
6
6
  super()
@@ -24,14 +24,14 @@ class Page < Tgui::Group
24
24
 
25
25
  def respond_to? name
26
26
  super ||
27
- (name.end_with?("!") && bang_respond_to?(name[...-1])) ||
27
+ (name.end_with?("!") && extree_respond_to?(name[...-1])) ||
28
28
  @tgui.gui.respond_to?(name) ||
29
29
  @tgui.window.respond_to?(name)
30
30
  end
31
31
 
32
32
  def method_missing name, *a, **na, &b
33
33
  if name.end_with? "!"
34
- bang_method_missing name[...-1], *a, **na, &b
34
+ extree_method_missing name[...-1], *a, **na, &b
35
35
  elsif @tgui.gui.respond_to? name
36
36
  @tgui.gui.send name, *a, **na, &b
37
37
  elsif @tgui.window.respond_to? name
@@ -52,14 +52,18 @@ class Page < Tgui::Group
52
52
  @tgui.next_page_id = page
53
53
  end
54
54
 
55
- def job **na, &b
56
- @tgui.job **na, &b
55
+ def job *a, **na, &b
56
+ @tgui.job *a, **na, &b
57
57
  end
58
58
 
59
59
  def timer *a, **na, &b
60
60
  @tgui.timer *a, **na, &b
61
61
  end
62
62
 
63
+ def after *a, **na, &b
64
+ @tgui.after *a, **na, &b
65
+ end
66
+
63
67
  def gui
64
68
  @tgui.gui
65
69
  end
@@ -97,11 +101,11 @@ class Page < Tgui::Group
97
101
  theme = self.theme
98
102
  if seed
99
103
  theme.reset_attributes
100
- theme.send! do
101
- load Tgui::Theme.loadpath(seed)
104
+ scope! theme do
105
+ eval File.read(Tgui::Theme.loadpath(seed))
102
106
  end
103
107
  end
104
- theme.send! **na, &b
108
+ scope! theme, **na, &b
105
109
  theme.self_commit @custom_renderers
106
110
  end
107
111
 
@@ -111,4 +115,10 @@ class Page < Tgui::Group
111
115
  theme.source = path
112
116
  theme.self_commit @custom_renderers
113
117
  end
118
+
119
+ def! :messagebox do |*a, **na, &b|
120
+ messagebox = MessageBox.new
121
+ add! messagebox
122
+ scope! messagebox, *a, **na, &b
123
+ end
114
124
  end
@@ -1,13 +1,15 @@
1
- class BooleanAttribute
2
- def initialize name, value
3
- @name = name
4
- @value = value[0]
5
- end
1
+ module Tgui
2
+ class BooleanAttribute
3
+ def initialize name, value
4
+ @name = name
5
+ @value = value[0]
6
+ end
6
7
 
7
- attr :name
8
- attr :value
8
+ attr :name
9
+ attr :value
9
10
 
10
- def to_theme
11
- "#{name} = #{value};"
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
- class ColorAttribute
4
- def initialize name, value
5
- @name = name
6
- @value = Color.from *value
7
- end
3
+ module Tgui
4
+ class ColorAttribute
5
+ def initialize name, value
6
+ @name = name
7
+ @value = Color.from *value
8
+ end
8
9
 
9
- attr :name
10
- attr :value
10
+ attr :name
11
+ attr :value
11
12
 
12
- def to_theme
13
- "#{name} = #{value.to_s};"
13
+ def to_theme
14
+ "#{name} = #{value.to_s};"
15
+ end
14
16
  end
15
17
  end
@@ -1,13 +1,15 @@
1
- class FloatAttribute
2
- def initialize name, value
3
- @name = name
4
- @value = value[0]
5
- end
1
+ module Tgui
2
+ class FloatAttribute
3
+ def initialize name, value
4
+ @name = name
5
+ @value = value[0]
6
+ end
6
7
 
7
- attr :name
8
- attr :value
8
+ attr :name
9
+ attr :value
9
10
 
10
- def to_theme
11
- "#{name} = #{value};"
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
- class OutlineAttribute
4
- def initialize name, value
5
- @name = name
6
- @value = Outline.from *value
7
- end
3
+ module Tgui
4
+ class OutlineAttribute
5
+ def initialize name, value
6
+ @name = name
7
+ @value = Outline.from *value
8
+ end
8
9
 
9
- attr :name
10
- attr :value
10
+ attr :name
11
+ attr :value
11
12
 
12
- def to_theme
13
- "#{name} = #{value.to_s};"
13
+ def to_theme
14
+ "#{name} = #{value.to_s};"
15
+ end
14
16
  end
15
17
  end
@@ -1,18 +1,20 @@
1
1
  require_relative '../../abi/extern_object'
2
2
 
3
- class TextStylesAttribute
4
- def initialize name, value
5
- @name = name
6
- @value = Array(value).map do |style|
7
- raise "Invalid style #{style}" if !ExternObject::TextStyles[style]
8
- style.to_s.upcase
9
- end.join("|")
10
- end
3
+ module Tgui
4
+ class TextStylesAttribute
5
+ def initialize name, value
6
+ @name = name
7
+ @value = Array(value).map do |style|
8
+ raise "Invalid style #{style}" if !ExternObject::TextStyles[style]
9
+ style.to_s.upcase
10
+ end.join("|")
11
+ end
11
12
 
12
- attr :name
13
- attr :value
13
+ attr :name
14
+ attr :value
14
15
 
15
- def to_theme
16
- "#{name} = #{value};"
16
+ def to_theme
17
+ "#{name} = #{value};"
18
+ end
17
19
  end
18
20
  end
@@ -1,19 +1,21 @@
1
1
  require_relative '../../dsl/texture'
2
2
 
3
- class TextureAttribute
4
- def initialize name, value
5
- @name = name
6
- @value = Texture.from *value
7
- end
3
+ module Tgui
4
+ class TextureAttribute
5
+ def initialize name, value
6
+ @name = name
7
+ @value = Texture.from *value
8
+ end
8
9
 
9
- attr :name
10
- attr :value
10
+ attr :name
11
+ attr :value
11
12
 
12
- def to_theme
13
- "#{name} = #{value.to_theme};"
14
- end
13
+ def to_theme
14
+ "#{name} = #{value.to_theme};"
15
+ end
15
16
 
16
- def self.base_class
17
- Texture
17
+ def self.base_class
18
+ Texture
19
+ end
18
20
  end
19
21
  end
@@ -7,7 +7,7 @@ require_relative 'texture_attribute'
7
7
 
8
8
  module Tgui
9
9
  module ThemeAttributed
10
- include BangDef
10
+ include Extree
11
11
 
12
12
  ATTRIBUTE_TYPES = {
13
13
  boolean: BooleanAttribute,
@@ -30,7 +30,7 @@ module Tgui
30
30
  def! name do |custom_name = nil, base_name = nil, **na, &b|
31
31
  attribute = type.new(base_name, custom_name)
32
32
  attribute = attributes[attribute.name] ||= attribute
33
- attribute.send! **na, &b
33
+ attribute.host! **na, &b
34
34
  end
35
35
  end
36
36
  end
@@ -2,7 +2,7 @@ require_relative 'theme_attributed'
2
2
 
3
3
  module Tgui
4
4
  class ThemeComponent
5
- include BangNest
5
+ include Extree
6
6
  extend ThemeAttributed
7
7
 
8
8
  def initialize name, custom_name
@@ -26,7 +26,7 @@ module Tgui
26
26
  end
27
27
 
28
28
  def to_theme
29
- return "" if @attributes.empty? && !@custom_name
29
+ # return "" if @attributes.empty? && !@custom_name
30
30
  header = @custom_name ? "#{@custom_name} : #{base_name}" : name
31
31
  "#{header} {\n#{@attributes.values.map(&:to_theme).join("\n")}\n}"
32
32
  end
@@ -22,6 +22,7 @@ module Tgui
22
22
 
23
23
  theme_comp :button, ButtonBase::Theme
24
24
  theme_comp :chatbox, ChatBox::Theme
25
+ theme_comp :checkbox, RadioButton::Theme
25
26
  theme_comp :child_window, ChildWindow::Theme
26
27
  theme_comp :color_picker, ColorPicker::Theme
27
28
  theme_comp :combobox, ComboBox::Theme
@@ -34,6 +35,8 @@ module Tgui
34
35
  theme_comp :listview, ListView::Theme
35
36
  theme_comp :menu, MenuBar::Theme
36
37
  theme_comp :messagebox, MessageBox::Theme
38
+ theme_comp :panel, Panel::Theme
39
+ theme_comp :panel_listbox, PanelListBox::Theme
37
40
  theme_comp :progressbar, ProgressBar::Theme
38
41
  theme_comp :radio_button, RadioButton::Theme
39
42
  theme_comp :range_slider, RangeSlider::Theme
@@ -42,8 +45,9 @@ module Tgui
42
45
  theme_comp :slider, Slider::Theme
43
46
  theme_comp :spin_button, SpinButton::Theme
44
47
  theme_comp :tabs, Tabs::Theme
45
- theme_comp :text_area, TextArea::Theme
46
- theme_comp :tree_view, TreeView::Theme
48
+ theme_comp :textarea, TextArea::Theme
49
+ theme_comp :toggle_button, ToggleButton::Theme
50
+ theme_comp :treeview, TreeView::Theme
47
51
  theme_comp :widget, Widget::Theme
48
52
  end
49
53
  end
@@ -0,0 +1,30 @@
1
+ require_relative '../../dsl/custom_widget'
2
+
3
+ module Tgui
4
+ class KeyboardControl < CustomWidget
5
+
6
+ api_attr :key_press_listeners do
7
+ {}
8
+ end
9
+
10
+ def initialized
11
+ self.self_can_gain_focus = proc do
12
+ 1
13
+ end
14
+
15
+ self.self_key_press = proc do |key, alt, control, shift, system|
16
+ key_symbol = KeyCode[key]
17
+ self.key_press_listeners[key_symbol]&.each do |listener|
18
+ listener.call(key_symbol, alt, control, shift, system)
19
+ end
20
+ end
21
+ end
22
+
23
+ def! :on_key do |*keys, &b|
24
+ keys.each do |k|
25
+ (self.key_press_listeners[k] ||= []) << b
26
+ end
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,24 @@
1
+ module Tgui
2
+ Chatbox = ChatBox
3
+ Checkbox = CheckBox
4
+ Combobox = ComboBox
5
+ Editbox = EditBox
6
+ Hlayout = HorizontalLayout
7
+ Hwrap = HorizontalWrap
8
+ Listbox = ListBox
9
+ Listview = ListView
10
+ Menu = MenuBar
11
+ Messagebox = MessageBox
12
+ PanelListbox = PanelListBox
13
+ PanelTabs = TabContainer
14
+ Progressbar = ProgressBar
15
+ FancyLabel = RichTextLabel
16
+ Radio = RadioButton
17
+ RadioGroup = RadioButtonGroup
18
+ Separator = SeparatorLine
19
+ Spinner = SpinButton
20
+ Spinbox = SpinControl
21
+ Textarea = TextArea
22
+ Treeview = TreeView
23
+ Vlayout = VerticalLayout
24
+ end
@@ -1,9 +1,6 @@
1
- require_relative 'bang_def'
2
- require_relative 'bang_nest'
3
1
 
4
2
  class WidgetLike
5
- extend BangDef
6
- include BangNest
3
+ include Extree
7
4
 
8
5
  class << self
9
6
  def abi_def name, original_name = nil, id: false, **na