Class: TkWrapper::Widgets::Base::Configuration
- Inherits:
-
Object
- Object
- TkWrapper::Widgets::Base::Configuration
- Defined in:
- lib/widgets/base/configuration.rb
Constant Summary collapse
- GRID_SPECIAL_VALUES =
{ onecell: { weights: { rows: [1], cols: [1] } }, fullcell: { column: 0, row: 0, sticky: 'nsew' }, default: { weights: { rows: [1], cols: [1] }, column: 0, row: 0, sticky: 'nsew' } }.freeze
- NON_TK_OPTIONS =
%i[ tk_class tearoff weights menu min_width add_width ].freeze
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
- #configure_grid(tk_widget) ⇒ Object
- #configure_tearoff ⇒ Object
- #configure_tk_widget(tk_widget) ⇒ Object
- #configure_weights(tk_widget) ⇒ Object
- #grid(only_tk_options: false) ⇒ Object
-
#initialize(config) ⇒ Configuration
constructor
A new instance of Configuration.
- #merge(*configurations, overwrite: true) ⇒ Object
- #merge_global_configurations(manager, widget) ⇒ Object
- #parse_and_clone(value, key = nil) ⇒ Object
- #parse_grid_value(value) ⇒ Object
- #parse_value(key, value) ⇒ Object
Constructor Details
#initialize(config) ⇒ Configuration
Returns a new instance of Configuration.
27 28 29 |
# File 'lib/widgets/base/configuration.rb', line 27 def initialize(config) @config = parse_and_clone(config) end |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
8 9 10 |
# File 'lib/widgets/base/configuration.rb', line 8 def config @config end |
Instance Method Details
#[](key) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/widgets/base/configuration.rb', line 41 def [](key) key = key.to_sym return self.class.new(@config[key]) if @config[key].is_a?(Hash) @config[key] end |
#[]=(key, value) ⇒ Object
48 49 50 51 |
# File 'lib/widgets/base/configuration.rb', line 48 def []=(key, value) key = key.to_sym @config[key] = parse_and_clone(value, key) end |
#configure_grid(tk_widget) ⇒ Object
80 81 82 83 84 85 |
# File 'lib/widgets/base/configuration.rb', line 80 def configure_grid() grid = grid(only_tk_options: true) return if grid.empty? .grid(grid) end |
#configure_tearoff ⇒ Object
114 115 116 117 118 |
# File 'lib/widgets/base/configuration.rb', line 114 def configure_tearoff return if (tearoff = @config[:tearoff]).nil? TkOption.add '*tearOff', (tearoff ? 1 : 0) end |
#configure_tk_widget(tk_widget) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/widgets/base/configuration.rb', line 87 def () @config.each do |option, value| next if NON_TK_OPTIONS.include?(option) case option when :grid then configure_grid() when :pack then .pack(value) when :place then .place(value) else [option] = value end end configure_weights() end |
#configure_weights(tk_widget) ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/widgets/base/configuration.rb', line 102 def configure_weights() return unless (weights = @config.dig(:grid, :weights)) (weights[:rows] || []).each_with_index do |weight, index| TkGrid.rowconfigure(, index, weight: weight) end (weights[:cols] || []).each_with_index do |weight, index| TkGrid.columnconfigure(, index, weight: weight) end end |
#grid(only_tk_options: false) ⇒ Object
74 75 76 77 78 |
# File 'lib/widgets/base/configuration.rb', line 74 def grid(only_tk_options: false) return @config[:grid] unless @config[:grid].reject { |option, _| NON_TK_OPTIONS.include?(option) } end |
#merge(*configurations, overwrite: true) ⇒ Object
31 32 33 34 35 36 37 38 39 |
# File 'lib/widgets/base/configuration.rb', line 31 def merge(*configurations, overwrite: true) configurations = configurations.map do |configuration| configuration = configuration.config if configuration.is_a?(self.class) parse_and_clone(configuration) end Util.merge_recursive!(@config, *configurations, overwrite: overwrite) end |
#merge_global_configurations(manager, widget) ⇒ Object
120 121 122 123 124 |
# File 'lib/widgets/base/configuration.rb', line 120 def merge_global_configurations(manager, ) return unless manager merge(*manager.configurations()) end |
#parse_and_clone(value, key = nil) ⇒ Object
53 54 55 56 57 |
# File 'lib/widgets/base/configuration.rb', line 53 def parse_and_clone(value, key = nil) return parse_value(key, value) unless value.is_a?(Hash) value.each_with_object({}) { |(k, v), h| h[k] = parse_and_clone(v, k) } end |
#parse_grid_value(value) ⇒ Object
68 69 70 71 72 |
# File 'lib/widgets/base/configuration.rb', line 68 def parse_grid_value(value) return GRID_SPECIAL_VALUES[value] if value.is_a?(Symbol) value end |
#parse_value(key, value) ⇒ Object
59 60 61 62 63 64 65 66 |
# File 'lib/widgets/base/configuration.rb', line 59 def parse_value(key, value) case key when :grid parse_grid_value(value) else value end end |