Class: Glimmer::LibUI::ControlProxy

Inherits:
Object
  • Object
show all
Includes:
DataBindable
Defined in:
lib/glimmer/libui/control_proxy.rb,
lib/glimmer/libui/control_proxy/box.rb,
lib/glimmer/libui/control_proxy/column.rb,
lib/glimmer/libui/control_proxy/area_proxy.rb,
lib/glimmer/libui/control_proxy/form_proxy.rb,
lib/glimmer/libui/control_proxy/grid_proxy.rb,
lib/glimmer/libui/control_proxy/menu_proxy.rb,
lib/glimmer/libui/control_proxy/path_proxy.rb,
lib/glimmer/libui/control_proxy/text_proxy.rb,
lib/glimmer/libui/control_proxy/dual_column.rb,
lib/glimmer/libui/control_proxy/entry_proxy.rb,
lib/glimmer/libui/control_proxy/group_proxy.rb,
lib/glimmer/libui/control_proxy/image_proxy.rb,
lib/glimmer/libui/control_proxy/label_proxy.rb,
lib/glimmer/libui/control_proxy/message_box.rb,
lib/glimmer/libui/control_proxy/table_proxy.rb,
lib/glimmer/libui/control_proxy/button_proxy.rb,
lib/glimmer/libui/control_proxy/matrix_proxy.rb,
lib/glimmer/libui/control_proxy/slider_proxy.rb,
lib/glimmer/libui/control_proxy/window_proxy.rb,
lib/glimmer/libui/control_proxy/spinbox_proxy.rb,
lib/glimmer/libui/control_proxy/triple_column.rb,
lib/glimmer/libui/control_proxy/checkbox_proxy.rb,
lib/glimmer/libui/control_proxy/combobox_proxy.rb,
lib/glimmer/libui/control_proxy/tab_item_proxy.rb,
lib/glimmer/libui/control_proxy/editable_column.rb,
lib/glimmer/libui/control_proxy/menu_item_proxy.rb,
lib/glimmer/libui/control_proxy/image_part_proxy.rb,
lib/glimmer/libui/control_proxy/enableable_column.rb,
lib/glimmer/libui/control_proxy/font_button_proxy.rb,
lib/glimmer/libui/control_proxy/color_button_proxy.rb,
lib/glimmer/libui/control_proxy/open_type_tag_proxy.rb,
lib/glimmer/libui/control_proxy/radio_buttons_proxy.rb,
lib/glimmer/libui/control_proxy/multiline_entry_proxy.rb,
lib/glimmer/libui/control_proxy/box/vertical_box_proxy.rb,
lib/glimmer/libui/control_proxy/date_time_picker_proxy.rb,
lib/glimmer/libui/control_proxy/editable_combobox_proxy.rb,
lib/glimmer/libui/control_proxy/box/horizontal_box_proxy.rb,
lib/glimmer/libui/control_proxy/column/text_column_proxy.rb,
lib/glimmer/libui/control_proxy/open_type_features_proxy.rb,
lib/glimmer/libui/control_proxy/column/image_column_proxy.rb,
lib/glimmer/libui/control_proxy/message_box/msg_box_proxy.rb,
lib/glimmer/libui/control_proxy/column/button_column_proxy.rb,
lib/glimmer/libui/control_proxy/column/checkbox_column_proxy.rb,
lib/glimmer/libui/control_proxy/column/image_text_column_proxy.rb,
lib/glimmer/libui/control_proxy/column/text_color_column_proxy.rb,
lib/glimmer/libui/control_proxy/entry_proxy/search_entry_proxy.rb,
lib/glimmer/libui/control_proxy/area_proxy/scrolling_area_proxy.rb,
lib/glimmer/libui/control_proxy/message_box/msg_box_error_proxy.rb,
lib/glimmer/libui/control_proxy/column/progress_bar_column_proxy.rb,
lib/glimmer/libui/control_proxy/entry_proxy/password_entry_proxy.rb,
lib/glimmer/libui/control_proxy/column/checkbox_text_column_proxy.rb,
lib/glimmer/libui/control_proxy/column/background_color_column_proxy.rb,
lib/glimmer/libui/control_proxy/column/image_text_color_column_proxy.rb,
lib/glimmer/libui/control_proxy/menu_item_proxy/quit_menu_item_proxy.rb,
lib/glimmer/libui/control_proxy/menu_item_proxy/about_menu_item_proxy.rb,
lib/glimmer/libui/control_proxy/menu_item_proxy/check_menu_item_proxy.rb,
lib/glimmer/libui/control_proxy/menu_item_proxy/radio_menu_item_proxy.rb,
lib/glimmer/libui/control_proxy/column/checkbox_text_color_column_proxy.rb,
lib/glimmer/libui/control_proxy/date_time_picker_proxy/date_picker_proxy.rb,
lib/glimmer/libui/control_proxy/date_time_picker_proxy/time_picker_proxy.rb,
lib/glimmer/libui/control_proxy/menu_item_proxy/separator_menu_item_proxy.rb,
lib/glimmer/libui/control_proxy/menu_item_proxy/preferences_menu_item_proxy.rb,
lib/glimmer/libui/control_proxy/multiline_entry_proxy/non_wrapping_multiline_entry_proxy.rb

Overview

Proxy for LibUI control objects

Follows the Proxy Design Pattern

Defined Under Namespace

Modules: Box, Column, DualColumn, EditableColumn, EnableableColumn, MessageBox, TripleColumn Classes: AreaProxy, ButtonProxy, CheckboxProxy, ColorButtonProxy, ComboboxProxy, DateTimePickerProxy, EditableComboboxProxy, EntryProxy, FontButtonProxy, FormProxy, GridProxy, GroupProxy, ImagePartProxy, ImageProxy, LabelProxy, MatrixProxy, MenuItemProxy, MenuProxy, MultilineEntryProxy, NonWrappingMultilineEntryProxy, OpenTypeFeaturesProxy, OpenTypeTagProxy, PathProxy, PreferencesMenuItemProxy, RadioButtonsProxy, SliderProxy, SpinboxProxy, TabItemProxy, TableProxy, TextProxy, WindowProxy

Constant Summary collapse

KEYWORD_ALIASES =
{
  'message_box'       => 'msg_box',
  'message_box_error' => 'msg_box_error',
}
BOOLEAN_PROPERTIES =
%w[
  padded
  checked
  enabled toplevel visible
  read_only
  margined
  borderless fullscreen
  stretchy
]
STRING_PROPERTIES =
%w[
  text
  title
]
TransformProxy =

alias

MatrixProxy

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from DataBindable

#data_bind, #data_bind_read, #data_bind_write, #data_binding_model_attribute_observer_registrations

Constructor Details

#initialize(keyword, parent, args, &block) ⇒ ControlProxy

Returns a new instance of ControlProxy.



132
133
134
135
136
137
138
139
140
# File 'lib/glimmer/libui/control_proxy.rb', line 132

def initialize(keyword, parent, args, &block)
  @keyword = keyword
  @parent_proxy = parent
  @args = args
  @block = block
  @enabled = true
  build_control
  post_add_content if @block.nil?
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args, &block) ⇒ Object



260
261
262
263
264
265
266
267
268
269
270
271
# File 'lib/glimmer/libui/control_proxy.rb', line 260

def method_missing(method_name, *args, &block)
  if respond_to_libui?(method_name, *args, &block)
    send_to_libui(method_name, *args, &block)
  elsif append_properties.include?(method_name.to_s) ||
      append_properties.include?(method_name.to_s.sub(/(=|\?)$/, ''))
    append_property(method_name, *args)
  elsif can_handle_listener?(method_name.to_s)
    handle_listener(method_name.to_s, &block)
  else
    super
  end
end

Instance Attribute Details

#argsObject (readonly)

libui returns the contained LibUI object



129
130
131
# File 'lib/glimmer/libui/control_proxy.rb', line 129

def args
  @args
end

#blockObject (readonly)

libui returns the contained LibUI object



129
130
131
# File 'lib/glimmer/libui/control_proxy.rb', line 129

def block
  @block
end

#content_addedObject (readonly) Also known as: content_added?

libui returns the contained LibUI object



129
130
131
# File 'lib/glimmer/libui/control_proxy.rb', line 129

def content_added
  @content_added
end

#keywordObject (readonly)

libui returns the contained LibUI object



129
130
131
# File 'lib/glimmer/libui/control_proxy.rb', line 129

def keyword
  @keyword
end

#libuiObject (readonly)

libui returns the contained LibUI object



129
130
131
# File 'lib/glimmer/libui/control_proxy.rb', line 129

def libui
  @libui
end

#parent_proxyObject (readonly)

libui returns the contained LibUI object



129
130
131
# File 'lib/glimmer/libui/control_proxy.rb', line 129

def parent_proxy
  @parent_proxy
end

Class Method Details

.constant_symbol(keyword) ⇒ Object



67
68
69
# File 'lib/glimmer/libui/control_proxy.rb', line 67

def constant_symbol(keyword)
  "#{keyword.camelcase(:upper)}Proxy".to_sym
end

.control_proxiesObject

autosave all controls in this array to avoid garbage collection



46
47
48
49
# File 'lib/glimmer/libui/control_proxy.rb', line 46

def control_proxies
  @@control_proxies = [] unless defined?(@@control_proxies)
  @@control_proxies
end

.control_proxy_class(keyword) ⇒ Object



41
42
43
# File 'lib/glimmer/libui/control_proxy.rb', line 41

def control_proxy_class(keyword)
  descendant_keyword_constant_map[keyword] || ControlProxy
end

.create(keyword, parent, args, &block) ⇒ Object



37
38
39
# File 'lib/glimmer/libui/control_proxy.rb', line 37

def create(keyword, parent, args, &block)
  control_proxy_class(keyword).new(keyword, parent, args, &block).tap {|c| control_proxies << c}
end

.descendant_keyword_constant_mapObject



75
76
77
# File 'lib/glimmer/libui/control_proxy.rb', line 75

def descendant_keyword_constant_map
  @descendant_keyword_constant_map ||= add_aliases_to_keyword_constant_map(map_descendant_keyword_constants_for(self))
end

.exists?(keyword) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
34
35
# File 'lib/glimmer/libui/control_proxy.rb', line 31

def exists?(keyword)
  ::LibUI.respond_to?("new_#{keyword}") or
    ::LibUI.respond_to?(keyword) or
    descendant_keyword_constant_map.keys.include?(keyword)
end

.image_proxiesObject



59
60
61
# File 'lib/glimmer/libui/control_proxy.rb', line 59

def image_proxies
  control_proxies.select {|c| c.keyword == 'image' }
end

.keyword(constant_symbol) ⇒ Object



71
72
73
# File 'lib/glimmer/libui/control_proxy.rb', line 71

def keyword(constant_symbol)
  constant_symbol.to_s.underscore.sub(/_proxy$/, '')
end

.main_window_proxyObject



51
52
53
# File 'lib/glimmer/libui/control_proxy.rb', line 51

def main_window_proxy
  control_proxies.find {|c| c.is_a?(WindowProxy)}
end

.map_descendant_keyword_constants_for(klass, accumulator: {}) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
# File 'lib/glimmer/libui/control_proxy.rb', line 84

def map_descendant_keyword_constants_for(klass, accumulator: {})
  klass.constants.map do |constant_symbol|
    [constant_symbol, klass.const_get(constant_symbol)]
  end.select do |constant_symbol, constant|
    constant.is_a?(Module) && !accumulator.values.include?(constant)
  end.each do |constant_symbol, constant|
    accumulator[keyword(constant_symbol)] = constant
    map_descendant_keyword_constants_for(constant, accumulator: accumulator)
  end
  accumulator
end


55
56
57
# File 'lib/glimmer/libui/control_proxy.rb', line 55

def menu_proxies
  control_proxies.select {|c| c.keyword == 'menu' }
end

.new_control(keyword, args) ⇒ Object



63
64
65
# File 'lib/glimmer/libui/control_proxy.rb', line 63

def new_control(keyword, args)
  ::LibUI.send("new_#{keyword}", *args)
end

.reset_descendant_keyword_constant_mapObject



79
80
81
82
# File 'lib/glimmer/libui/control_proxy.rb', line 79

def reset_descendant_keyword_constant_map
  @descendant_keyword_constant_map = nil
  descendant_keyword_constant_map
end

Instance Method Details

#append_propertiesObject



309
310
311
# File 'lib/glimmer/libui/control_proxy.rb', line 309

def append_properties
  @parent_proxy&.class&.constants&.include?(:APPEND_PROPERTIES) ? @parent_proxy.class::APPEND_PROPERTIES : []
end

#append_property(property, value = nil) ⇒ Object



313
314
315
316
317
318
319
320
321
322
323
# File 'lib/glimmer/libui/control_proxy.rb', line 313

def append_property(property, value = nil)
  property = property.to_s.sub(/(=|\?)$/, '')
  @append_property_hash ||= {}
  if value.nil?
    value = @append_property_hash[property]
    handle_string_property(property, handle_boolean_property(property, value))
  else
    value = Glimmer::LibUI.boolean_to_integer(value) if BOOLEAN_PROPERTIES.include?(property) && (value.is_a?(TrueClass) || value.is_a?(FalseClass))
    @append_property_hash[property] = value
  end
end

#can_handle_listener?(listener_name) ⇒ Boolean

Returns:

  • (Boolean)


163
164
165
166
167
# File 'lib/glimmer/libui/control_proxy.rb', line 163

def can_handle_listener?(listener_name)
  ::LibUI.respond_to?("#{libui_api_keyword}_#{listener_name}") ||
    ::LibUI.respond_to?("control_#{listener_name}") ||
    has_custom_listener?(listener_name)
end

#content(&block) ⇒ Object



383
384
385
# File 'lib/glimmer/libui/control_proxy.rb', line 383

def content(&block)
  Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::Libui::ControlExpression.new, @keyword, {post_add_content: @content_added}, &block)
end

#custom_listener_name_aliasesObject



208
209
210
# File 'lib/glimmer/libui/control_proxy.rb', line 208

def custom_listener_name_aliases
  self.class.constants.include?(:CUSTOM_LISTENER_NAME_ALIASES) ? self.class::CUSTOM_LISTENER_NAME_ALIASES : {}
end

#custom_listener_namesObject



204
205
206
# File 'lib/glimmer/libui/control_proxy.rb', line 204

def custom_listener_names
  self.class.constants.include?(:CUSTOM_LISTENER_NAMES) ? self.class::CUSTOM_LISTENER_NAMES : []
end

#default_destroyObject



345
346
347
348
349
# File 'lib/glimmer/libui/control_proxy.rb', line 345

def default_destroy
  deregister_all_custom_listeners
  send_to_libui('destroy')
  ControlProxy.control_proxies.delete(self)
end

#deregister_all_custom_listenersObject

deregisters all custom listeners except on_destroy, which can only be deregistered after destruction of a control, using deregister_custom_listeners



236
237
238
# File 'lib/glimmer/libui/control_proxy.rb', line 236

def deregister_all_custom_listeners
  (custom_listener_names - ['on_destroy']).each { |listener_name| deregister_custom_listeners(listener_name) }
end

#deregister_custom_listeners(listener_name) ⇒ Object



231
232
233
# File 'lib/glimmer/libui/control_proxy.rb', line 231

def deregister_custom_listeners(listener_name)
  handle_custom_listener(listener_name).clear
end

#destroyObject



329
330
331
332
333
334
335
336
337
338
# File 'lib/glimmer/libui/control_proxy.rb', line 329

def destroy
  # TODO exclude menus from this initial return
  return if !is_a?(ControlProxy::WindowProxy) && ControlProxy.main_window_proxy&.destroying?
  data_binding_model_attribute_observer_registrations.each(&:deregister)
  if parent_proxy.nil?
    default_destroy
  else
    parent_proxy.destroy_child(self)
  end
end

#destroy_child(child) ⇒ Object



340
341
342
343
# File 'lib/glimmer/libui/control_proxy.rb', line 340

def destroy_child(child)
  child.default_destroy
  children.delete(child)
end

#enabled(value = nil) ⇒ Object Also known as: enabled?, set_enabled, enabled=



351
352
353
354
355
356
357
358
359
360
361
362
# File 'lib/glimmer/libui/control_proxy.rb', line 351

def enabled(value = nil)
  if value.nil?
    @enabled
  elsif value != @enabled
    @enabled = value == 1 || value
    if value == 1 || value
      send_to_libui('enable')
    else
      send_to_libui('disable')
    end
  end
end

#handle_custom_listener(listener_name, &listener) ⇒ Object



212
213
214
215
216
217
218
219
220
221
222
223
# File 'lib/glimmer/libui/control_proxy.rb', line 212

def handle_custom_listener(listener_name, &listener)
  listener_name = listener_name.to_s
  listener_name = custom_listener_name_aliases.stringify_keys[listener_name] || listener_name
  instance_variable_name = "@#{listener_name}_procs" # TODO ensure clearing custom listeners on destroy of a control
  instance_variable_set(instance_variable_name, []) if instance_variable_get(instance_variable_name).nil?
  if listener.nil?
    instance_variable_get(instance_variable_name)
  else
    instance_variable_get(instance_variable_name) << listener
    listener
  end
end

#handle_listener(listener_name, &listener) ⇒ Object



169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/glimmer/libui/control_proxy.rb', line 169

def handle_listener(listener_name, &listener)
  # replace first listener argument (control libui pointer) with actual Ruby libui object
  safe_listener = Proc.new { |*args| listener.call(self, *args[1..-1]) }
  if ::LibUI.respond_to?("#{libui_api_keyword}_#{listener_name}")
    if listeners[listener_name].nil?
      ::LibUI.send("#{libui_api_keyword}_#{listener_name}", libui) do |*args|
        listeners_for(listener_name).map { |listener| listener.call(*args) }.last
      end
    end
    listeners_for(listener_name) << safe_listener
  elsif ::LibUI.respond_to?("control_#{listener_name}")
    if listeners[listener_name].nil?
      ::LibUI.send("control_#{listener_name}", libui) do |*args|
        listeners_for(listener_name).map { |listener| listener.call(*args) }.last
      end
    end
    listeners_for(listener_name) << safe_listener
  elsif has_custom_listener?(listener_name)
    handle_custom_listener(listener_name, &listener)
  end
end

#has_custom_listener?(listener_name) ⇒ Boolean

Returns:

  • (Boolean)


199
200
201
202
# File 'lib/glimmer/libui/control_proxy.rb', line 199

def has_custom_listener?(listener_name)
  listener_name = listener_name.to_s
  custom_listener_names.include?(listener_name) || custom_listener_name_aliases.stringify_keys.keys.include?(listener_name)
end

#libui_api_keywordObject



325
326
327
# File 'lib/glimmer/libui/control_proxy.rb', line 325

def libui_api_keyword
  @keyword
end

#listenersObject



191
192
193
# File 'lib/glimmer/libui/control_proxy.rb', line 191

def listeners
  @listeners ||= {}
end

#listeners_for(listener_name) ⇒ Object



195
196
197
# File 'lib/glimmer/libui/control_proxy.rb', line 195

def listeners_for(listener_name)
  listeners[listener_name] ||= []
end

#notify_custom_listeners(listener_name, *args) ⇒ Object



225
226
227
228
229
# File 'lib/glimmer/libui/control_proxy.rb', line 225

def notify_custom_listeners(listener_name, *args)
  handle_custom_listener(listener_name).map do |listener|
    listener.call(*args)
  end
end

#post_add_contentObject

Subclasses may override to perform post add_content work (normally must call super)



143
144
145
146
147
148
# File 'lib/glimmer/libui/control_proxy.rb', line 143

def post_add_content
  unless @content_added
    @parent_proxy&.post_initialize_child(self)
    @content_added = true
  end
end

#post_initialize_child(child) ⇒ Object

Subclasses may override to perform post initialization work on an added child



151
152
153
# File 'lib/glimmer/libui/control_proxy.rb', line 151

def post_initialize_child(child)
  # No Op by default
end

#respond_to?(method_name, *args, &block) ⇒ Boolean

Returns:

  • (Boolean)


240
241
242
243
244
245
246
247
248
249
# File 'lib/glimmer/libui/control_proxy.rb', line 240

def respond_to?(method_name, *args, &block)
  respond_to_libui?(method_name, *args, &block) ||
    (
      append_properties.include?(method_name.to_s) ||
      (append_properties.include?(method_name.to_s.sub(/\?$/, '')) && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, ''))) ||
      append_properties.include?(method_name.to_s.sub(/=$/, ''))
    ) ||
    can_handle_listener?(method_name.to_s) ||
    super(method_name, true)
end

#respond_to_libui?(method_name, *args, &block) ⇒ Boolean

Returns:

  • (Boolean)


251
252
253
254
255
256
257
258
# File 'lib/glimmer/libui/control_proxy.rb', line 251

def respond_to_libui?(method_name, *args, &block)
  ::LibUI.respond_to?("control_#{method_name}") or
    (::LibUI.respond_to?("control_#{method_name.to_s.sub(/\?$/, '')}") && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, '')) ) or
    ::LibUI.respond_to?("control_set_#{method_name.to_s.sub(/=$/, '')}") or
    ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name}") or
    (::LibUI.respond_to?("#{libui_api_keyword}_#{method_name.to_s.sub(/\?$/, '')}") && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, '')) ) or
    ::LibUI.respond_to?("#{libui_api_keyword}_set_#{method_name.to_s.sub(/=$/, '')}")
end

#send_to_libui(method_name, *args, &block) ⇒ Object



273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
# File 'lib/glimmer/libui/control_proxy.rb', line 273

def send_to_libui(method_name, *args, &block)
  if ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name.to_s.sub(/\?$/, '')}") && args.empty?
    property = method_name.to_s.sub(/\?$/, '')
    value = ::LibUI.send("#{libui_api_keyword}_#{property}", libui, *args)
    handle_string_property(property, handle_boolean_property(property, value))
  elsif ::LibUI.respond_to?("#{libui_api_keyword}_get_#{method_name.to_s.sub(/\?$/, '')}") && args.empty?
    property = method_name.to_s.sub(/\?$/, '')
    value = ::LibUI.send("#{libui_api_keyword}_get_#{property}", libui, *args)
    handle_string_property(property, handle_boolean_property(property, value))
  elsif ::LibUI.respond_to?("#{libui_api_keyword}_set_#{method_name.to_s.sub(/=$/, '')}") && !args.empty?
    property = method_name.to_s.sub(/=$/, '')
    args[0] = Glimmer::LibUI.boolean_to_integer(args.first) if BOOLEAN_PROPERTIES.include?(property) && (args.first.is_a?(TrueClass) || args.first.is_a?(FalseClass))
    args[0] = '' if STRING_PROPERTIES.include?(property) && args.first == nil
    if property.to_s == 'checked'
      current_value = Glimmer::LibUI.integer_to_boolean(::LibUI.send("#{libui_api_keyword}_checked", libui), allow_nil: false)
      new_value = Glimmer::LibUI.integer_to_boolean(args[0], allow_nil: false)
      ::LibUI.send("#{libui_api_keyword}_set_#{property}", libui, *args) if new_value != current_value
    else
      ::LibUI.send("#{libui_api_keyword}_set_#{property}", libui, *args)
    end
  elsif ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name}") && !args.empty?
    ::LibUI.send("#{libui_api_keyword}_#{method_name}", libui, *args)
  elsif ::LibUI.respond_to?("control_#{method_name.to_s.sub(/\?$/, '')}") && args.empty?
    property = method_name.to_s.sub(/\?$/, '')
    value = ::LibUI.send("control_#{property}", libui, *args)
    handle_string_property(property, handle_boolean_property(property, value))
  elsif ::LibUI.respond_to?("control_set_#{method_name.to_s.sub(/=$/, '')}")
    property = method_name.to_s.sub(/=$/, '')
    args[0] = Glimmer::LibUI.boolean_to_integer(args.first) if BOOLEAN_PROPERTIES.include?(property) && (args.first.is_a?(TrueClass) || args.first.is_a?(FalseClass))
    args[0] = '' if STRING_PROPERTIES.include?(property) && args.first == nil
    ::LibUI.send("control_set_#{method_name.to_s.sub(/=$/, '')}", libui, *args)
  elsif ::LibUI.respond_to?("control_#{method_name}") && !args.empty?
    ::LibUI.send("control_#{method_name}", libui, *args)
  end
end

#visible(value = nil) ⇒ Object Also known as: visible?, set_visible, visible=



367
368
369
370
371
372
373
374
375
376
377
378
# File 'lib/glimmer/libui/control_proxy.rb', line 367

def visible(value = nil)
  current_value = send_to_libui('visible')
  if value.nil?
    current_value
  elsif value != current_value
    if value == 1 || value
      send_to_libui('show')
    else
      send_to_libui('hide')
    end
  end
end

#window_proxyObject



155
156
157
158
159
160
161
# File 'lib/glimmer/libui/control_proxy.rb', line 155

def window_proxy
  found_proxy = self
  until found_proxy.nil? || found_proxy.is_a?(WindowProxy)
    found_proxy = found_proxy.parent_proxy
  end
  found_proxy
end