tkwrapper 1.5.0 → 1.6.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: abffb1cc7ae4efaf8b26ebdd49acca56837989829713473f21971f8a5f5a9063
4
- data.tar.gz: 1e659e3049a41d4aff307f700ac27cc86d014ec844134aa65bc7bd20c2f692db
3
+ metadata.gz: 25ebb6c8831b18ae3b55f4d98896cc5cf824d628fd4bc245b6fc1ed9fd8c5ef0
4
+ data.tar.gz: b90ca62d87faa02e1a07f5f1145e175d55dfcfeacd71782c709a484038701dfc
5
5
  SHA512:
6
- metadata.gz: efbad85fe488198ff115feac31872163da0da8b796ef0a21babf33d21976e14da0f809a93a502cbfc0f9225e4446e30c1b567680af2b3c7e7eae862cf0b5f64b
7
- data.tar.gz: 7d0addd32901d46c6d0175219ee83dd4478f699bc05ec7804f0a76dac02b1950a11f7a22dafa494996961bc8f25582c1f6be4f36c3cf19c9b3a3e5050cb0df9f
6
+ metadata.gz: b4d1820254e60b3d9ce4be52a8875b0acbda213dac7aa200352d794ff1146611e84ac1f9bb16589f6fa6d61ba3b65468c940cf27d965ead1e3913fbc5b1cce7e
7
+ data.tar.gz: fd00a3c5ae1c29aa66762f554a43223a5ce32ef538c340a8549ba56fb12853743f80ae90862aac30f99383be61497fe1744bbb85e7ca7ef1e83d32785e4f5133
data/lib/tk_extensions.rb CHANGED
@@ -26,12 +26,13 @@ module TkExtensions
26
26
  # the class names may be aliases (e.g. Tk::Tile::Entry is an alias for
27
27
  # Tk::Tile::TEntry)
28
28
  tk_class_names = [
29
- 'TkRoot', # becomes TkExtensions::TkRoot
30
- 'TkText', # becomes TkExtensions::TkText
31
- 'TkMenu', # becomes TkExtensions::TkMenu
32
- 'Tk::Tile::Entry', # becomes TkExtensions::Entry
33
- 'Tk::Tile::Frame', # becomes TkExtensions::Frame
34
- 'Tk::Tile::Label' # becomes TkExtensions::Label
29
+ 'TkRoot', # becomes TkExtensions::TkWidgets::TkRoot
30
+ 'TkText', # becomes TkExtensions::TkWidgets::TkText
31
+ 'TkMenu', # becomes TkExtensions::TkWidgets::TkMenu
32
+ 'Tk::Tile::Entry', # becomes TkExtensions::TkWidgets::Entry
33
+ 'Tk::Tile::Frame', # becomes TkExtensions::TkWidgets::Frame
34
+ 'Tk::Tile::Label', # becomes TkExtensions::TkWidgets::Label
35
+ 'Tk::Tile::Button' # becomes TkExtensions::TkWidgets::Button
35
36
  ]
36
37
  tk_class_names.each do |tk_class_name|
37
38
  # extract last part of the name (e.g. Tk::Tile::Entry => Entry)
data/lib/util/tk/cell.rb CHANGED
@@ -17,6 +17,7 @@ class TkWrapper::Util::Tk::Cell
17
17
  start_row = grid_info['row']
18
18
  end_row = start_row + grid_info['rowspan'] - 1
19
19
 
20
+ container.tk_widget.update
20
21
  TkGrid.bbox(container.tk_widget, start_col, start_row, end_col, end_row)
21
22
  end
22
23
 
@@ -15,6 +15,7 @@ class TkWrapper::Util::Tk::Finder
15
15
  end
16
16
 
17
17
  def iter(comparators, widgets = @widgets, lookup = @lookup)
18
+ comparators = [comparators] unless comparators.is_a?(Array)
18
19
  Enumerator.new do |y|
19
20
  comparators = each_widget_lookup_match(lookup, comparators) { |m| y << m }
20
21
  each_widget_comparator_match(widgets, comparators) { |m| y << m }
@@ -33,7 +34,6 @@ class TkWrapper::Util::Tk::Finder
33
34
  private
34
35
 
35
36
  def create_value_matchers(comparators)
36
- comparators = [comparators] unless comparators.is_a?(Array)
37
37
  comparators.map { |comparator| Matcher.new(comparator: comparator) }
38
38
  end
39
39
 
@@ -55,7 +55,8 @@ class TkWrapper::Util::Tk::Finder
55
55
  matchers = create_value_matchers(comparators)
56
56
 
57
57
  widgets.each do |widget|
58
- widget.ids.each do |id|
58
+ ids = widget.ids.empty? ? [nil] : widget.ids
59
+ ids.each do |id|
59
60
  matchers.each do |matcher|
60
61
  (match = matcher.match(id, widget)) && block.call(match)
61
62
  end
@@ -77,17 +77,23 @@ class TkWrapper::Widgets::Base::Configuration
77
77
  @config[:grid].reject { |option, _| NON_TK_OPTIONS.include?(option) }
78
78
  end
79
79
 
80
+ def configure_grid(tk_widget)
81
+ grid = grid(only_tk_options: true)
82
+ return if grid.empty?
83
+
84
+ tk_widget.grid(grid)
85
+ end
86
+
80
87
  def configure_tk_widget(tk_widget)
81
88
  @config.each do |option, value|
82
89
  next if NON_TK_OPTIONS.include?(option)
83
90
 
84
- if option == :grid
85
- grid = grid(only_tk_options: true)
86
- next if grid.empty?
87
- next tk_widget.grid(grid) if option == :grid
91
+ case option
92
+ when :grid then configure_grid(tk_widget)
93
+ when :pack then tk_widget.pack(value)
94
+ when :place then tk_widget.place(value)
95
+ else tk_widget[option] = value
88
96
  end
89
-
90
- tk_widget[option] = value
91
97
  end
92
98
 
93
99
  configure_weights(tk_widget)
@@ -47,6 +47,10 @@ class TkWrapper::Widgets::Base::Manager
47
47
  widget.config.merge(*configurations(widget))
48
48
  end
49
49
 
50
+ def tk_widget(id)
51
+ @widgets[id].tk_widget
52
+ end
53
+
50
54
  alias modify add_modification
51
55
  alias config add_configurations
52
56
  end
@@ -3,6 +3,7 @@ require "#{LIB_DIR}/util/tk/finder"
3
3
  require "#{LIB_DIR}/tk_extensions"
4
4
 
5
5
  require_relative 'base'
6
+ require_relative 'window_info'
6
7
 
7
8
  class TkWrapper::Widgets::Base::Widget
8
9
  extend Forwardable
@@ -12,12 +13,13 @@ class TkWrapper::Widgets::Base::Widget
12
13
  def_delegators :@finder, :find, :find_all
13
14
 
14
15
  attr_accessor :config
15
- attr_reader :parent, :ids, :cell, :childs, :manager
16
+ attr_reader :parent, :ids, :cell, :childs, :manager, :winfo
16
17
 
17
18
  def tk_class() end
18
19
 
19
20
  def initialize(config: {}, childs: [], manager: nil, ids: [])
20
21
  @cell = TkWrapper::Util::Tk::Cell.new(self)
22
+ @winfo = TkWrapper::Widgets::Base::WindowInfo.new(self)
21
23
  @finder = TkWrapper::Util::Tk::Finder.new(widgets: self)
22
24
  @config = TkWrapper::Widgets::Base::Configuration.new(config)
23
25
  @childs = childs.is_a?(Array) ? childs : [childs]
@@ -30,7 +32,7 @@ class TkWrapper::Widgets::Base::Widget
30
32
 
31
33
  return unless tk_class
32
34
 
33
- parent&.tk_widget ? tk_class.new(parent.tk_widget) : tk_class.new
35
+ tk_class.new(parent&.tk_widget)
34
36
  end
35
37
 
36
38
  # if parent is provided and self has no tk_class, the tk_widget of the
@@ -41,6 +43,10 @@ class TkWrapper::Widgets::Base::Widget
41
43
  (@tk_widget = create_tk_widget(parent)) || parent&.tk_widget
42
44
  end
43
45
 
46
+ def build_childs
47
+ @childs.each { |child| child.build(self, manager: @manager) }
48
+ end
49
+
44
50
  def build(parent, configure: true, manager: nil)
45
51
  @parent = parent
46
52
  tk_widget # creates the widget if possible and not yet created
@@ -50,7 +56,7 @@ class TkWrapper::Widgets::Base::Widget
50
56
  self.configure if configure
51
57
  @manager&.execute_modifications(self)
52
58
  @manager&.widgets&.push(self)
53
- @childs.each { |child| child.build(self, manager: @manager) }
59
+ build_childs
54
60
  end
55
61
 
56
62
  def configure
@@ -69,6 +75,6 @@ class TkWrapper::Widgets::Base::Widget
69
75
 
70
76
  def push(child)
71
77
  @childs.push(child)
72
- child.build(self)
78
+ child.build(self, manager: @manager)
73
79
  end
74
80
  end
@@ -17,6 +17,7 @@ class TkWrapper::Widgets::Base::WidgetStore
17
17
  widget.ids.each do |id|
18
18
  (@lookup[id] ||= []).push(widget)
19
19
  end
20
+ (@lookup[nil] ||= []).push(widget) if widget.ids.empty?
20
21
  end
21
22
 
22
23
  def each(&block)
@@ -26,7 +27,7 @@ class TkWrapper::Widgets::Base::WidgetStore
26
27
  end
27
28
 
28
29
  def [](key)
29
- @lookup[key].size == 1 ? @lookup[key].first : @lookup[key]
30
+ @lookup[key]&.size == 1 ? @lookup[key].first : @lookup[key]
30
31
  end
31
32
 
32
33
  private
@@ -0,0 +1,13 @@
1
+ class TkWrapper::Widgets::Base::WindowInfo
2
+ def initialize(widget)
3
+ @widget = widget
4
+ end
5
+
6
+ def method_missing(name, *args)
7
+ if @widget.tk_widget.respond_to?("winfo_#{name}")
8
+ @widget.tk_widget.send("winfo_#{name}", *args)
9
+ else
10
+ super
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TkWrapper::Widgets::Button < TkWrapper::Widgets::Base::Widget
4
+ def tk_class
5
+ TkWidgets::Button
6
+ end
7
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TkWrapper::Widgets::MountPoint < TkWrapper::Widgets::Base::Widget
4
+ def initialize(**args)
5
+ super(**args)
6
+ end
7
+
8
+ def build_childs(skip: true)
9
+ super() unless skip
10
+ end
11
+
12
+ def mount=(childs)
13
+ mount(childs)
14
+ end
15
+
16
+ def mount(childs = nil)
17
+ if childs
18
+ @childs = childs.is_a?(Array) ? childs : [childs]
19
+ end
20
+ @childs.each do |child|
21
+ child.config.merge(@config)
22
+ end
23
+ build_childs(skip: false)
24
+ end
25
+ end
@@ -12,3 +12,5 @@ require_relative 'text'
12
12
  require_relative 'entry'
13
13
  require_relative 'auto_resize_entry'
14
14
  require_relative 'grid'
15
+ require_relative 'mount_point'
16
+ require_relative 'button'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tkwrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Schnitzler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-19 00:00:00.000000000 Z
11
+ date: 2021-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tk
@@ -48,11 +48,14 @@ files:
48
48
  - lib/widgets/base/matches.rb
49
49
  - lib/widgets/base/widget.rb
50
50
  - lib/widgets/base/widget_store.rb
51
+ - lib/widgets/base/window_info.rb
52
+ - lib/widgets/button.rb
51
53
  - lib/widgets/entry.rb
52
54
  - lib/widgets/frame.rb
53
55
  - lib/widgets/grid.rb
54
56
  - lib/widgets/label.rb
55
57
  - lib/widgets/menu.rb
58
+ - lib/widgets/mount_point.rb
56
59
  - lib/widgets/root.rb
57
60
  - lib/widgets/text.rb
58
61
  - lib/widgets/widgets.rb