tk_component 0.1.0 → 0.1.1

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.
@@ -0,0 +1,4 @@
1
+ module TkComponent
2
+ class Menu
3
+ end
4
+ end
@@ -0,0 +1,33 @@
1
+ require_relative 'browser_column_component'
2
+
3
+ module TkComponent
4
+ class RBrowserComponent < TkComponent::Base
5
+
6
+ attr_accessor :data_source
7
+ attr_accessor :selected_path
8
+ attr_accessor :paned
9
+ attr_accessor :max_columns
10
+
11
+ def initialize(options = {})
12
+ super
13
+ @data_source = options[:data_source]
14
+ @selected_path = options[:selected_path] || []
15
+ @paned = !!options[:paned]
16
+ @max_columns = options[:max_columns]
17
+ end
18
+
19
+ def generate(parent_component, options = {})
20
+ parse_component(parent_component, options) do |p|
21
+ p.insert_component(TkComponent::BrowserColumnComponent, self,
22
+ browser: self,
23
+ column_index: 0,
24
+ sticky: 'nsew', x_flex: 1, y_flex: 1) do |bc|
25
+ bc.on_event 'ItemSelected', ->(e) do
26
+ puts "ItemSelected"
27
+ emit('PathChanged')
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,90 @@
1
+ module TkComponent
2
+ class TableViewComponent < TkComponent::Base
3
+
4
+ attr_accessor :data_source
5
+ attr_accessor :columns
6
+ attr_accessor :nested
7
+ attr_accessor :lazy
8
+ attr_accessor :scrollers
9
+
10
+ def initialize(options = {})
11
+ super
12
+ @data_source = options[:data_source]
13
+ @columns = options[:columns]
14
+ @nested = !!options[:nested]
15
+ @lazy = !!options[:lazy]
16
+ @scrollers = options[:scrollers] || 'y'
17
+ @to_load = {}
18
+ end
19
+
20
+ def generate(parent_component, options = {})
21
+ @to_load = {}
22
+ parse_component(parent_component, options) do |p|
23
+ @tree = p.tree(sticky: 'nsew', x_flex: 1, y_flex: 1, scrollers: @scrollers,
24
+ column_defs: columns,
25
+ on_item_open: :item_open,
26
+ on_select: :item_selected
27
+ )
28
+ end
29
+ end
30
+
31
+ def component_did_build
32
+ items = data_source.items_for_path(nil)
33
+ items.each do |item|
34
+ add_item(@tree, item)
35
+ end
36
+ end
37
+
38
+ def add_item(tree, item, parent_items = [], parent_item = nil)
39
+ tree_item = tree.native_item.insert(parent_item || '', 'end', item_to_options(item))
40
+ return unless nested && ((sub_path = parent_items + [ item ]) && data_source.has_sub_items?(sub_path))
41
+ if lazy
42
+ dummy_item = tree.native_item.insert(tree_item, 'end')
43
+ @to_load[tree_item] = sub_path
44
+ else
45
+ sub_items = data_source.items_for_path(sub_path)
46
+ sub_items.each do |sub_item|
47
+ add_item(tree, sub_item, sub_path, tree_item)
48
+ end
49
+ end
50
+ end
51
+
52
+ def selected_item
53
+ (tree_item = @tree.native_item.focus_item) && tree_item_to_item(tree_item)
54
+ end
55
+
56
+ def item_to_options(item)
57
+ { text: item[text_key], values: item.slice(*values_keys).values }
58
+ end
59
+
60
+ def tree_item_to_item(tree_item)
61
+ columns.map.with_index do |c, i|
62
+ [c[:key],
63
+ i == 0 ? tree_item.text : tree_item.get(c[:key])]
64
+ end.to_h
65
+ end
66
+
67
+ def item_open(e)
68
+ open_item = e.sender.native_item.focus_item
69
+ return unless open_item.present?
70
+ path = @to_load.delete(open_item)
71
+ return unless path.present?
72
+ @tree.native_item.delete(open_item.children)
73
+ sub_items = data_source.items_for_path(path)
74
+ sub_items.each do |sub_item|
75
+ add_item(@tree, sub_item, path, open_item)
76
+ end
77
+ end
78
+
79
+ def item_selected(e)
80
+ end
81
+
82
+ def text_key
83
+ @text_key ||= columns.first[:key]
84
+ end
85
+
86
+ def values_keys
87
+ @values_keys ||= columns[1..-1].map { |c| c[:key] }
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,100 @@
1
+ module TkComponent
2
+ class Turtle
3
+ FULL_CIRCLE = 2 * Math::PI
4
+
5
+ attr_accessor :canvas
6
+ attr_accessor :current_x
7
+ attr_accessor :current_y
8
+ attr_accessor :color
9
+ attr_accessor :width
10
+
11
+ def initialize(options = {})
12
+ @canvas = options[:canvas]
13
+ @current_x = 0
14
+ @current_y = 0
15
+ @angle_unit = :radians
16
+ @current_angle = FULL_CIRCLE / 4.0
17
+ @turtle_down = false
18
+ @color = options[:color] || 'black'
19
+ @width = options[:width] || 1
20
+ end
21
+
22
+ def clear
23
+ @canvas.delete('all')
24
+ end
25
+
26
+ def down
27
+ @turtle_down = true
28
+ end
29
+
30
+ def up
31
+ @turtle_down = false
32
+ end
33
+
34
+ def down?
35
+ @turtle_down
36
+ end
37
+
38
+ def up?
39
+ !down?
40
+ end
41
+
42
+ def current_point
43
+ [@current_x, @current_y]
44
+ end
45
+
46
+ def move_to_center
47
+ @current_x = @canvas.winfo_width / 2
48
+ @current_y = @canvas.winfo_height / 2
49
+ end
50
+
51
+ def forward(length)
52
+ new_x = @current_x + length * Math.cos(@current_angle)
53
+ new_y = @current_y - length * Math.sin(@current_angle)
54
+ if down?
55
+ TkcLine.new(@canvas, [current_point, [new_x, new_y]], fill: @color, width: @width)
56
+ end
57
+ @current_x = new_x
58
+ @current_y = new_y
59
+ end
60
+
61
+ def turn_left(angle)
62
+ @current_angle = (@current_angle + user_angle(angle)) % FULL_CIRCLE
63
+ end
64
+
65
+ def turn_right(angle)
66
+ @current_angle = (@current_angle - user_angle(angle)) % FULL_CIRCLE
67
+ end
68
+
69
+ def point_north
70
+ @current_angle = FULL_CIRCLE / 4.0
71
+ end
72
+
73
+ def point_east
74
+ @current_angle = 0.0
75
+ end
76
+
77
+ def point_south
78
+ @current_angle = FULL_CIRCLE * 3.0 / 4.0
79
+ end
80
+
81
+ def point_west
82
+ @current_angle = FULL_CIRCLE / 2.0
83
+ end
84
+
85
+ def degrees
86
+ @angle_unit = :degrees
87
+ end
88
+ alias :deg :degrees
89
+
90
+ def radians
91
+ @angle_unit = :radians
92
+ end
93
+ alias :rad :radians
94
+
95
+ def user_angle(angle)
96
+ return angle if @angle_unit == :radians
97
+ (angle % 360.0) * FULL_CIRCLE / 360.0
98
+ end
99
+ end
100
+ end
@@ -1,3 +1,3 @@
1
1
  module TkComponent
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -13,10 +13,10 @@ module TkComponent
13
13
  component.parent = self
14
14
  component.generate(self)
15
15
  component.build(self)
16
- h_weight = options[:h_weight] || 1
17
- v_weight = options[:v_weight] || 1
18
- TkGrid.columnconfigure tk_item.native_item, 0, weight: h_weight
19
- TkGrid.rowconfigure tk_item.native_item, 0, weight: v_weight
16
+ x_flex = options[:x_flex] || 1
17
+ y_flex = options[:y_flex] || 1
18
+ TkGrid.columnconfigure tk_item.native_item, 0, weight: x_flex
19
+ TkGrid.rowconfigure tk_item.native_item, 0, weight: y_flex
20
20
  add_child(component)
21
21
  end
22
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tk_component
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Egea
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-29 00:00:00.000000000 Z
11
+ date: 2021-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tk
@@ -97,16 +97,26 @@ files:
97
97
  - LICENSE.txt
98
98
  - README.md
99
99
  - Rakefile
100
+ - bin/browser_demo.rb
100
101
  - bin/console
101
102
  - bin/setup
103
+ - bin/table_view_demo.rb
104
+ - bin/tiles_demo.rb
102
105
  - lib/tk_component.rb
103
106
  - lib/tk_component/base.rb
107
+ - lib/tk_component/basic_component.rb
108
+ - lib/tk_component/browser_column_component.rb
109
+ - lib/tk_component/browser_component.rb
104
110
  - lib/tk_component/builder.rb
105
111
  - lib/tk_component/builder/event.rb
106
112
  - lib/tk_component/builder/event_handler.rb
107
113
  - lib/tk_component/builder/grid_map.rb
108
114
  - lib/tk_component/builder/node.rb
109
115
  - lib/tk_component/builder/tk_item.rb
116
+ - lib/tk_component/menu.rb
117
+ - lib/tk_component/r_browser_component.rb
118
+ - lib/tk_component/table_view_component.rb
119
+ - lib/tk_component/turtle.rb
110
120
  - lib/tk_component/version.rb
111
121
  - lib/tk_component/window.rb
112
122
  - tk_component.gemspec
@@ -118,7 +128,7 @@ metadata:
118
128
  homepage_uri: https://github.com/josepegea/tk_component
119
129
  source_code_uri: https://github.com/josepegea/tk_component
120
130
  changelog_uri: https://github.com/josepegea/tk_component/releases
121
- post_install_message:
131
+ post_install_message:
122
132
  rdoc_options: []
123
133
  require_paths:
124
134
  - lib
@@ -133,9 +143,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
143
  - !ruby/object:Gem::Version
134
144
  version: '0'
135
145
  requirements: []
136
- rubyforge_project:
146
+ rubyforge_project:
137
147
  rubygems_version: 2.7.8
138
- signing_key:
148
+ signing_key:
139
149
  specification_version: 4
140
150
  summary: Use TK from Ruby in a component oriented fashion
141
151
  test_files: []