tkwrapper 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
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