tkwrapper 1.3.0 → 1.4.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 957efe49807e9800759aa22439bc99f5ea4ef0ec620bc7ea0b7d549474839a7a
4
- data.tar.gz: f654e23817c14ce6e59d67e7893f55c33c9168686faf66cbf0a96f955f4e7c6e
3
+ metadata.gz: 81c1971220f794d1e17288aac5b75221393727be934288a4993a621c35b3282d
4
+ data.tar.gz: f2a841f6f3a6a7ee040c85fe0f2081234780bf1ff0bf4aeb70de9cf4c2a75055
5
5
  SHA512:
6
- metadata.gz: 4891b05ca78bff3d2119b6b4d8ba0be178836d1cdd7475e07ddc3be19100d766e0ca0d9878d4afc9be330ffbf3ea008914d4f4432b0e3eff2df8cc02534b74f4
7
- data.tar.gz: 3ece495be24159cefde0ca65899c3022b181a3bb0d92e40727a9cbc2ca4494d376504a58313190a94fbf4dc8751949873753ec1c2313d9db4cc28fb29174a466
6
+ metadata.gz: 22cf843324096411be2441088df910d723ecc353aa6b54dd64ba5703b2fcd47bec3c2424a38e910fefb187fdcf23ec60dd44640de3f0657a3cb2969e84da016c
7
+ data.tar.gz: acb296b0e78c570e7d80ba96d91c4ebf62ecfd1ce7c97fac088546d599e0468a23dafac325ee14ae9fa0d4d08a9c8c70e5972df849346a05d8e2ac3ee9fb1154
data/lib/tkwrapper.rb CHANGED
@@ -7,5 +7,6 @@ module TkWrapper end
7
7
  require_relative 'widgets/widgets'
8
8
 
9
9
  module TkWrapper
10
+ Manager = TkWrapper::Widgets::Base::Manager
10
11
  Widget = TkWrapper::Widgets::Base::Widget
11
12
  end
@@ -21,7 +21,7 @@ class TkWrapper::Util::Tk::Finder
21
21
  end
22
22
  end
23
23
 
24
- def find_widget(comparators, widgets = @widgets)
24
+ def find(comparators, widgets = @widgets)
25
25
  matchers = create_value_matchers(comparators)
26
26
 
27
27
  each_widget_match(widgets, matchers) do |match|
@@ -29,7 +29,7 @@ class TkWrapper::Util::Tk::Finder
29
29
  end
30
30
  end
31
31
 
32
- def find_all_widgets(comparators, widgets = @widgets)
32
+ def find_all(comparators, widgets = @widgets)
33
33
  matchers = create_value_matchers(comparators)
34
34
  matches = TkWrapper::Widgets::Base::Matches.new
35
35
 
@@ -4,14 +4,14 @@ class TkWrapper::Widgets::AutoResizeEntry < TkWrapper::Widgets::Entry
4
4
  # auto resizes on user input, only works if in the grid geometry manager of tk
5
5
  attr_accessor :min_width, :add_width
6
6
 
7
- def initialize(config: {}, childs: [], id: nil)
8
- @min_width = config[:min_width] || 0
9
- @add_width = config[:add_width] || 0
10
- super(config: config, childs: childs, id: id)
7
+ def initialize(**args)
8
+ @min_width = args[:config][:min_width] || 0
9
+ @add_width = args[:config][:add_width] || 0
10
+ super(**args)
11
11
  end
12
12
 
13
- def build(parent, configure: true)
14
- super(parent, configure: configure)
13
+ def build(parent, **args)
14
+ super(parent, **args)
15
15
  parent.tk_widget.bind('Configure') { resize }
16
16
  tk_widget.textvariable = TkVariable.new unless tk_widget.textvariable
17
17
  tk_widget.textvariable.trace('write') { resize }
@@ -21,7 +21,7 @@ class TkWrapper::Widgets::Base::Configuration
21
21
  }.freeze
22
22
 
23
23
  NON_TK_OPTIONS = %i[
24
- id tk_class tearoff weights menu min_width add_width
24
+ tk_class tearoff weights menu min_width add_width
25
25
  ].freeze
26
26
 
27
27
  def initialize(config)
@@ -112,6 +112,8 @@ class TkWrapper::Widgets::Base::Configuration
112
112
  end
113
113
 
114
114
  def merge_global_configurations(manager, widget)
115
+ return unless manager
116
+
115
117
  merge(*manager.configurations(widget))
116
118
  end
117
119
  end
@@ -37,4 +37,11 @@ class TkWrapper::Widgets::Base::Manager
37
37
  end
38
38
  end
39
39
  end
40
+
41
+ def configure(widget)
42
+ widget.config.merge(*configurations(widget))
43
+ end
44
+
45
+ alias modify add_modification
46
+ alias config add_configurations
40
47
  end
@@ -1,11 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
- require 'tk'
4
-
5
- require "#{LIB_DIR}/tk_extensions"
6
- require "#{LIB_DIR}/util/tk/font"
7
1
  require "#{LIB_DIR}/util/tk/cell"
8
2
  require "#{LIB_DIR}/util/tk/finder"
3
+ require "#{LIB_DIR}/tk_extensions"
9
4
 
10
5
  require_relative 'base'
11
6
 
@@ -14,54 +9,20 @@ class TkWrapper::Widgets::Base::Widget
14
9
  include TkExtensions
15
10
  include Enumerable
16
11
 
17
- def_delegator :@finder, :find_widget, :find
18
- def_delegator :@finder, :find_all_widgets, :find_all
12
+ def_delegators :@finder, :find, :find_all
19
13
 
20
14
  attr_accessor :config
21
- attr_reader :parent, :ids, :cell, :childs
15
+ attr_reader :parent, :ids, :cell, :childs, :manager
22
16
 
23
17
  def tk_class() end
24
18
 
25
- def self.manager
26
- @manager ||= TkWrapper::Widgets::Base::Manager.new
27
- end
28
-
29
- def self.config(matcher = nil, configuration = nil, **configurations)
30
- manager.add_configurations(matcher, configuration, **configurations)
31
- end
32
-
33
- def self.modify(matcher, &callback)
34
- manager.add_modification(matcher, &callback)
35
- end
36
-
37
- def manager
38
- TkWrapper::Widgets::Base::Widget.manager
39
- end
40
-
41
- def each(&block)
42
- nodes_to_walk = [self]
43
- until nodes_to_walk.empty?
44
- node = nodes_to_walk.pop
45
- block.call(node)
46
- nodes_to_walk = node.childs + nodes_to_walk
47
- end
48
- end
49
-
50
- def initialize(config: {}, childs: [], id: nil)
19
+ def initialize(config: {}, childs: [], manager: nil, ids: [])
51
20
  @cell = TkWrapper::Util::Tk::Cell.new(self)
52
21
  @finder = TkWrapper::Util::Tk::Finder.new(widgets: self)
53
22
  @config = TkWrapper::Widgets::Base::Configuration.new(config)
54
23
  @childs = childs.is_a?(Array) ? childs : [childs]
55
- @ids = []
56
- add_ids(id)
57
- add_ids(config[:id])
58
- end
59
-
60
- def add_ids(ids)
61
- return unless ids
62
-
63
- ids = [ids] unless ids.is_a?(Array)
64
- @ids.concat(ids)
24
+ @manager = manager
25
+ @ids = ids.is_a?(Array) ? ids : [ids]
65
26
  end
66
27
 
67
28
  def create_tk_widget(parent)
@@ -80,41 +41,33 @@ class TkWrapper::Widgets::Base::Widget
80
41
  (@tk_widget = create_tk_widget(parent)) || parent&.tk_widget
81
42
  end
82
43
 
83
- def build(parent, configure: true)
44
+ def build(parent, configure: true, manager: nil)
84
45
  @parent = parent
85
46
  tk_widget # creates the widget if possible and not yet created
86
47
  @font = TkWrapper::Util::Tk::Font.new(tk_widget)
48
+ @manager ||= manager
49
+ @config.merge(*@manager.configurations(self)) if @manager
87
50
  self.configure if configure
88
- manager.execute_modifications(self)
89
- @childs.each { |child| child.build(self) }
90
- end
91
-
92
- def push(child)
93
- @childs.push(child)
94
- child.build(self)
51
+ @manager&.execute_modifications(self)
52
+ @childs.each { |child| child.build(self, manager: @manager) }
95
53
  end
96
54
 
97
55
  def configure
98
- @config.merge_global_configurations(manager, self)
99
56
  @config.configure_tk_widget(tk_widget)
100
57
  @config.configure_tearoff
101
58
  end
102
59
 
103
- def modify(matchers, &callback)
104
- items = find_all(matchers)
105
-
106
- callback.call(items)
60
+ def each(&block)
61
+ nodes_to_walk = [self]
62
+ until nodes_to_walk.empty?
63
+ node = nodes_to_walk.pop
64
+ block.call(node)
65
+ nodes_to_walk = node.childs + nodes_to_walk
66
+ end
107
67
  end
108
68
 
109
- def modify_each(matchers, &callback)
110
- items = find_all(matchers)
111
-
112
- return unless items
113
-
114
- with_match = items[0].is_a?(Array)
115
-
116
- items.each do |item|
117
- with_match ? callback.call(item[0], item[1]) : callback.call(item)
118
- end
69
+ def push(child)
70
+ @childs.push(child)
71
+ child.build(self)
119
72
  end
120
73
  end
data/lib/widgets/grid.rb CHANGED
@@ -10,8 +10,8 @@ class TkWrapper::Widgets::Grid < TkWrapper::Widgets::Base::Widget
10
10
  TkWidgets::Frame
11
11
  end
12
12
 
13
- def initialize(config: {}, childs: [], id: nil)
14
- super(config: config, childs: childs, id: id)
13
+ def initialize(**arguments)
14
+ super(**arguments)
15
15
  @childs.map! { |row| row.is_a?(Array) ? row : [row] }
16
16
  configure_cells_for_grid
17
17
  @childs.flatten! && @childs.select! { |cell| cell.is_a?(Widget) }
data/lib/widgets/menu.rb CHANGED
@@ -5,8 +5,8 @@ class TkWrapper::Widgets::Menu < TkWrapper::Widgets::Base::Widget
5
5
  TkWidgets::TkMenu
6
6
  end
7
7
 
8
- def build(parent)
9
- super(parent)
8
+ def build(parent, **args)
9
+ super(parent, **args)
10
10
  parent.tk_widget['menu'] = tk_widget
11
11
  end
12
12
 
@@ -15,15 +15,18 @@ class TkWrapper::Widgets::Menu < TkWrapper::Widgets::Base::Widget
15
15
  TkWidgets::TkMenu
16
16
  end
17
17
 
18
- def build(parent)
19
- super(parent, configure: false)
18
+ def build(parent, **args)
19
+ args[:configure] = false
20
+ super(parent, **args)
20
21
  @config[:menu] = tk_widget
21
22
  parent.tk_widget.add :cascade, **@config.config
22
23
  end
23
24
  end
24
25
 
25
26
  class Command < TkWrapper::Widgets::Base::Widget
26
- def build(parent)
27
+ def build(parent, **args)
28
+ args[:configure] = false
29
+ super(parent, **args)
27
30
  parent.tk_widget.add :command, **@config.config
28
31
  end
29
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tkwrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Schnitzler