whirled_peas 0.8.0 → 0.11.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.
- checksums.yaml +4 -4
- data/.gitignore +0 -2
- data/CHANGELOG.md +23 -0
- data/README.md +9 -777
- data/doc/application.md +92 -0
- data/doc/cli.md +115 -0
- data/doc/components.md +55 -0
- data/doc/easing.md +257 -0
- data/doc/elements.md +69 -0
- data/doc/screen_test.md +23 -0
- data/doc/settings.md +466 -0
- data/doc/template_factory.md +53 -0
- data/doc/themes.md +15 -0
- data/examples/components.rb +35 -0
- data/examples/graph.rb +54 -0
- data/examples/scrolling.rb +9 -20
- data/lib/data/themes.yaml +17 -0
- data/lib/whirled_peas.rb +31 -9
- data/lib/whirled_peas/animator/frameset.rb +1 -1
- data/lib/whirled_peas/animator/producer.rb +1 -1
- data/lib/whirled_peas/command/config_command.rb +3 -3
- data/lib/whirled_peas/command/play.rb +4 -0
- data/lib/whirled_peas/command/themes.rb +77 -0
- data/lib/whirled_peas/command_line.rb +3 -1
- data/lib/whirled_peas/component.rb +35 -0
- data/lib/whirled_peas/component/list_with_active.rb +88 -0
- data/lib/whirled_peas/graphics/box_painter.rb +4 -4
- data/lib/whirled_peas/graphics/composer.rb +27 -2
- data/lib/whirled_peas/graphics/container_coords.rb +23 -25
- data/lib/whirled_peas/graphics/container_dimensions.rb +24 -0
- data/lib/whirled_peas/graphics/container_painter.rb +27 -139
- data/lib/whirled_peas/graphics/content_dimensions.rb +19 -0
- data/lib/whirled_peas/graphics/content_painter.rb +20 -0
- data/lib/whirled_peas/graphics/debugger.rb +2 -7
- data/lib/whirled_peas/graphics/graph_dimensions.rb +12 -0
- data/lib/whirled_peas/graphics/graph_painter.rb +104 -0
- data/lib/whirled_peas/graphics/grid_painter.rb +0 -3
- data/lib/whirled_peas/graphics/scrollbar_helper.rb +126 -0
- data/lib/whirled_peas/graphics/text_painter.rb +7 -11
- data/lib/whirled_peas/null_logger.rb +0 -1
- data/lib/whirled_peas/settings/bg_color.rb +5 -1
- data/lib/whirled_peas/settings/border.rb +25 -4
- data/lib/whirled_peas/settings/color.rb +8 -4
- data/lib/whirled_peas/settings/container_settings.rb +14 -9
- data/lib/whirled_peas/settings/debugger.rb +3 -1
- data/lib/whirled_peas/settings/element_settings.rb +22 -5
- data/lib/whirled_peas/settings/graph_settings.rb +21 -0
- data/lib/whirled_peas/settings/grid_settings.rb +7 -0
- data/lib/whirled_peas/settings/position.rb +17 -5
- data/lib/whirled_peas/settings/text_color.rb +5 -0
- data/lib/whirled_peas/settings/text_settings.rb +1 -0
- data/lib/whirled_peas/settings/theme.rb +61 -0
- data/lib/whirled_peas/settings/theme_library.rb +69 -0
- data/lib/whirled_peas/utils/ansi.rb +1 -1
- data/lib/whirled_peas/version.rb +1 -1
- data/screen_test/components/list_with_active/l2r_active_color.frame +1 -0
- data/screen_test/components/list_with_active/l2r_active_color.rb +18 -0
- data/screen_test/components/list_with_active/l2r_position_end.frame +1 -0
- data/screen_test/components/list_with_active/l2r_position_end.rb +16 -0
- data/screen_test/components/list_with_active/l2r_position_middle.frame +1 -0
- data/screen_test/components/list_with_active/l2r_position_middle.rb +16 -0
- data/screen_test/components/list_with_active/l2r_position_start.frame +1 -0
- data/screen_test/components/list_with_active/l2r_position_start.rb +16 -0
- data/screen_test/components/list_with_active/l2r_separator.frame +1 -0
- data/screen_test/components/list_with_active/l2r_separator.rb +17 -0
- data/screen_test/components/list_with_active/t2b_active_color.frame +1 -0
- data/screen_test/components/list_with_active/t2b_active_color.rb +19 -0
- data/screen_test/components/list_with_active/t2b_position_end.frame +1 -0
- data/screen_test/components/list_with_active/t2b_position_end.rb +17 -0
- data/screen_test/components/list_with_active/t2b_position_middle.frame +1 -0
- data/screen_test/components/list_with_active/t2b_position_middle.rb +17 -0
- data/screen_test/components/list_with_active/t2b_position_start.frame +1 -0
- data/screen_test/components/list_with_active/t2b_position_start.rb +17 -0
- data/screen_test/components/list_with_active/t2b_separator.frame +1 -0
- data/screen_test/components/list_with_active/t2b_separator.rb +18 -0
- data/screen_test/elements/box.frame +1 -1
- data/screen_test/elements/box.rb +1 -1
- data/screen_test/elements/graph_asc.frame +1 -0
- data/screen_test/elements/graph_asc.rb +12 -0
- data/screen_test/elements/graph_desc.frame +1 -0
- data/screen_test/elements/graph_desc.rb +12 -0
- data/screen_test/elements/graph_horiz.frame +1 -0
- data/screen_test/elements/graph_horiz.rb +12 -0
- data/screen_test/elements/graph_sin.frame +1 -0
- data/screen_test/elements/graph_sin.rb +12 -0
- data/screen_test/elements/grid.frame +1 -1
- data/screen_test/elements/grid.rb +1 -1
- data/screen_test/elements/screen_overflow_x.frame +1 -1
- data/screen_test/elements/screen_overflow_x.rb +1 -1
- data/screen_test/elements/screen_overflow_y.frame +1 -1
- data/screen_test/elements/screen_overflow_y.rb +1 -1
- data/screen_test/elements/text.frame +1 -1
- data/screen_test/elements/text.rb +1 -1
- data/screen_test/elements/text_multiline.frame +1 -1
- data/screen_test/elements/text_multiline.rb +1 -1
- data/screen_test/elements/theme.frame +1 -0
- data/screen_test/elements/theme.rb +26 -0
- data/screen_test/settings/align/box_around.frame +1 -1
- data/screen_test/settings/align/box_around.rb +1 -1
- data/screen_test/settings/align/box_between.frame +1 -1
- data/screen_test/settings/align/box_between.rb +1 -1
- data/screen_test/settings/align/box_center.frame +1 -1
- data/screen_test/settings/align/box_center.rb +1 -1
- data/screen_test/settings/align/box_default.frame +1 -1
- data/screen_test/settings/align/box_default.rb +1 -1
- data/screen_test/settings/align/box_evenly.frame +1 -1
- data/screen_test/settings/align/box_evenly.rb +1 -1
- data/screen_test/settings/align/box_left.frame +1 -1
- data/screen_test/settings/align/box_left.rb +1 -1
- data/screen_test/settings/align/box_right.frame +1 -1
- data/screen_test/settings/align/box_right.rb +1 -1
- data/screen_test/settings/align/children_center.frame +1 -1
- data/screen_test/settings/align/children_center.rb +1 -1
- data/screen_test/settings/align/children_left.frame +1 -1
- data/screen_test/settings/align/children_left.rb +1 -1
- data/screen_test/settings/align/children_right.frame +1 -1
- data/screen_test/settings/align/children_right.rb +1 -1
- data/screen_test/settings/align/grid_center.frame +1 -1
- data/screen_test/settings/align/grid_center.rb +1 -1
- data/screen_test/settings/align/grid_default.frame +1 -1
- data/screen_test/settings/align/grid_default.rb +1 -1
- data/screen_test/settings/align/grid_left.frame +1 -1
- data/screen_test/settings/align/grid_left.rb +1 -1
- data/screen_test/settings/align/grid_right.frame +1 -1
- data/screen_test/settings/align/grid_right.rb +1 -1
- data/screen_test/settings/ansi/bold.frame +1 -1
- data/screen_test/settings/ansi/bold.rb +1 -1
- data/screen_test/settings/ansi/color.frame +1 -1
- data/screen_test/settings/ansi/color.rb +1 -1
- data/screen_test/settings/ansi/underline.frame +1 -1
- data/screen_test/settings/ansi/underline.rb +1 -1
- data/screen_test/settings/border.frame +1 -1
- data/screen_test/settings/border.rb +1 -1
- data/screen_test/settings/content_start/box_bottom.frame +1 -0
- data/screen_test/settings/content_start/box_bottom.rb +17 -0
- data/screen_test/settings/content_start/box_left.frame +1 -0
- data/screen_test/settings/{position → content_start}/box_left.rb +2 -2
- data/screen_test/settings/content_start/box_left_negative.frame +1 -0
- data/screen_test/settings/{position → content_start}/box_left_negative.rb +2 -2
- data/screen_test/settings/content_start/box_right.frame +1 -0
- data/screen_test/settings/content_start/box_right.rb +17 -0
- data/screen_test/settings/content_start/box_top.frame +1 -0
- data/screen_test/settings/{position → content_start}/box_top.rb +2 -2
- data/screen_test/settings/content_start/box_top_negative.frame +1 -0
- data/screen_test/settings/{position → content_start}/box_top_negative.rb +2 -2
- data/screen_test/settings/content_start/grid_left.frame +1 -0
- data/screen_test/settings/{position → content_start}/grid_left.rb +2 -2
- data/screen_test/settings/content_start/grid_left_negative.frame +1 -0
- data/screen_test/settings/{position → content_start}/grid_left_negative.rb +2 -2
- data/screen_test/settings/content_start/grid_top.frame +1 -0
- data/screen_test/settings/{position → content_start}/grid_top.rb +2 -2
- data/screen_test/settings/content_start/grid_top_negative.frame +1 -0
- data/screen_test/settings/{position → content_start}/grid_top_negative.rb +2 -2
- data/screen_test/settings/flow/box_b2t.frame +1 -1
- data/screen_test/settings/flow/box_b2t.rb +1 -1
- data/screen_test/settings/flow/box_l2r.frame +1 -1
- data/screen_test/settings/flow/box_l2r.rb +1 -1
- data/screen_test/settings/flow/box_r2l.frame +1 -1
- data/screen_test/settings/flow/box_r2l.rb +1 -1
- data/screen_test/settings/flow/box_t2b.frame +1 -1
- data/screen_test/settings/flow/box_t2b.rb +1 -1
- data/screen_test/settings/flow/grid_b2t.frame +1 -1
- data/screen_test/settings/flow/grid_b2t.rb +1 -1
- data/screen_test/settings/flow/grid_l2r.frame +1 -1
- data/screen_test/settings/flow/grid_l2r.rb +1 -1
- data/screen_test/settings/flow/grid_r2l.frame +1 -1
- data/screen_test/settings/flow/grid_r2l.rb +1 -1
- data/screen_test/settings/flow/grid_t2b.frame +1 -1
- data/screen_test/settings/flow/grid_t2b.rb +1 -1
- data/screen_test/settings/height/box.frame +1 -1
- data/screen_test/settings/height/box.rb +1 -1
- data/screen_test/settings/height/box_border_sizing.frame +1 -1
- data/screen_test/settings/height/box_border_sizing.rb +1 -1
- data/screen_test/settings/height/grid.frame +1 -1
- data/screen_test/settings/height/grid.rb +1 -1
- data/screen_test/settings/height/overflow_box.frame +1 -1
- data/screen_test/settings/height/overflow_box.rb +1 -1
- data/screen_test/settings/height/overflow_box_l2r.frame +1 -1
- data/screen_test/settings/height/overflow_box_l2r.rb +1 -1
- data/screen_test/settings/height/overflow_box_t2b.frame +1 -1
- data/screen_test/settings/height/overflow_box_t2b.rb +1 -1
- data/screen_test/settings/height/overflow_grid.frame +1 -1
- data/screen_test/settings/height/overflow_grid.rb +1 -1
- data/screen_test/settings/margin.frame +1 -1
- data/screen_test/settings/margin.rb +1 -1
- data/screen_test/settings/padding.frame +1 -1
- data/screen_test/settings/padding.rb +1 -1
- data/screen_test/settings/scroll/horiz_box.frame +1 -1
- data/screen_test/settings/scroll/horiz_box.rb +3 -5
- data/screen_test/settings/scroll/horiz_box_align_center.rb +3 -5
- data/screen_test/settings/scroll/horiz_box_align_right.rb +3 -5
- data/screen_test/settings/scroll/vert_box.frame +1 -1
- data/screen_test/settings/scroll/vert_box.rb +6 -8
- data/screen_test/settings/title_font.frame +1 -1
- data/screen_test/settings/title_font.rb +1 -1
- data/screen_test/settings/valign/box_around.frame +1 -1
- data/screen_test/settings/valign/box_around.rb +1 -1
- data/screen_test/settings/valign/box_between.frame +1 -1
- data/screen_test/settings/valign/box_between.rb +1 -1
- data/screen_test/settings/valign/box_bottom.frame +1 -1
- data/screen_test/settings/valign/box_bottom.rb +1 -1
- data/screen_test/settings/valign/box_default.frame +1 -1
- data/screen_test/settings/valign/box_default.rb +1 -1
- data/screen_test/settings/valign/box_evenly.frame +1 -1
- data/screen_test/settings/valign/box_evenly.rb +1 -1
- data/screen_test/settings/valign/box_middle.frame +1 -1
- data/screen_test/settings/valign/box_middle.rb +1 -1
- data/screen_test/settings/valign/box_top.frame +1 -1
- data/screen_test/settings/valign/box_top.rb +1 -1
- data/screen_test/settings/valign/grid_bottom.frame +1 -1
- data/screen_test/settings/valign/grid_bottom.rb +1 -1
- data/screen_test/settings/valign/grid_default.frame +1 -1
- data/screen_test/settings/valign/grid_default.rb +1 -1
- data/screen_test/settings/valign/grid_middle.frame +1 -1
- data/screen_test/settings/valign/grid_middle.rb +1 -1
- data/screen_test/settings/valign/grid_top.frame +1 -1
- data/screen_test/settings/valign/grid_top.rb +1 -1
- data/screen_test/settings/width/box_border_sizing.frame +1 -1
- data/screen_test/settings/width/box_border_sizing.rb +1 -1
- data/screen_test/settings/width/box_content.frame +1 -1
- data/screen_test/settings/width/box_content.rb +1 -1
- data/screen_test/settings/width/box_default.frame +1 -1
- data/screen_test/settings/width/box_default.rb +1 -1
- data/screen_test/settings/width/grid.frame +1 -1
- data/screen_test/settings/width/grid.rb +1 -1
- data/screen_test/settings/width/overflow_align_center.frame +1 -1
- data/screen_test/settings/width/overflow_align_center.rb +1 -1
- data/screen_test/settings/width/overflow_align_right.frame +1 -1
- data/screen_test/settings/width/overflow_align_right.rb +1 -1
- data/screen_test/settings/width/overflow_box.frame +1 -1
- data/screen_test/settings/width/overflow_box.rb +1 -1
- data/screen_test/settings/width/overflow_box_l2r.frame +1 -1
- data/screen_test/settings/width/overflow_box_l2r.rb +1 -1
- data/screen_test/settings/width/overflow_box_t2b.frame +1 -1
- data/screen_test/settings/width/overflow_box_t2b.rb +1 -1
- data/screen_test/settings/width/overflow_grid.frame +1 -1
- data/screen_test/settings/width/overflow_grid.rb +1 -1
- data/tools/whirled_peas/tools/screen_tester.rb +15 -1
- metadata +75 -20
- data/lib/whirled_peas/graphics/mock_screen.rb +0 -26
- data/lib/whirled_peas/graphics/text_dimensions.rb +0 -15
- data/screen_test/settings/position/box_left.frame +0 -1
- data/screen_test/settings/position/box_left_negative.frame +0 -1
- data/screen_test/settings/position/box_top.frame +0 -1
- data/screen_test/settings/position/box_top_negative.frame +0 -1
- data/screen_test/settings/position/grid_left.frame +0 -1
- data/screen_test/settings/position/grid_left_negative.frame +0 -1
- data/screen_test/settings/position/grid_top.frame +0 -1
- data/screen_test/settings/position/grid_top_negative.frame +0 -1
@@ -12,8 +12,6 @@ require_relative 'vert_alignment'
|
|
12
12
|
module WhirledPeas
|
13
13
|
module Settings
|
14
14
|
class ContainerSettings < ElementSettings
|
15
|
-
attr_accessor :width, :height
|
16
|
-
|
17
15
|
def align
|
18
16
|
@_align || Alignment::DEFAULT
|
19
17
|
end
|
@@ -98,7 +96,7 @@ module WhirledPeas
|
|
98
96
|
end
|
99
97
|
|
100
98
|
def border
|
101
|
-
@_border ||= Border.new
|
99
|
+
@_border ||= Border.new(theme)
|
102
100
|
end
|
103
101
|
|
104
102
|
def flow=(flow)
|
@@ -177,13 +175,20 @@ module WhirledPeas
|
|
177
175
|
@_padding ||= Padding.new
|
178
176
|
end
|
179
177
|
|
180
|
-
def
|
181
|
-
|
182
|
-
|
178
|
+
def set_content_start(left: nil, top: nil, right: nil, bottom: nil)
|
179
|
+
if left && right
|
180
|
+
raise ArgumentError, 'Setting left and right content_start is not supported'
|
181
|
+
elsif top && bottom
|
182
|
+
raise ArgumentError, 'Setting top and bottom content_start is not supported'
|
183
|
+
end
|
184
|
+
content_start.left = left if left
|
185
|
+
content_start.top = top if top
|
186
|
+
content_start.right = right if right
|
187
|
+
content_start.bottom = bottom if bottom
|
183
188
|
end
|
184
189
|
|
185
|
-
def
|
186
|
-
@
|
190
|
+
def content_start
|
191
|
+
@_content_start ||= Position.new
|
187
192
|
end
|
188
193
|
|
189
194
|
def set_scrollbar(horiz: nil, vert: nil)
|
@@ -214,7 +219,7 @@ module WhirledPeas
|
|
214
219
|
def inherit(parent)
|
215
220
|
super
|
216
221
|
return unless parent.is_a?(ContainerSettings)
|
217
|
-
|
222
|
+
@_border = Border.inherit(parent.border)
|
218
223
|
end
|
219
224
|
|
220
225
|
protected
|
@@ -34,6 +34,8 @@ module WhirledPeas
|
|
34
34
|
def debug_value(value)
|
35
35
|
return if value.nil?
|
36
36
|
case value
|
37
|
+
when Theme
|
38
|
+
nil
|
37
39
|
when Position
|
38
40
|
position_value(value)
|
39
41
|
when Margin
|
@@ -73,7 +75,7 @@ module WhirledPeas
|
|
73
75
|
def border_value(border)
|
74
76
|
values = non_defaults(
|
75
77
|
border,
|
76
|
-
Border.new,
|
78
|
+
Border.new(settings.theme),
|
77
79
|
%i[left? top? right? bottom? inner_horiz? inner_vert? style color]
|
78
80
|
)
|
79
81
|
return if values == ''
|
@@ -8,17 +8,30 @@ module WhirledPeas
|
|
8
8
|
module Settings
|
9
9
|
class ElementSettings
|
10
10
|
def self.inherit(parent)
|
11
|
-
child = self.new
|
11
|
+
child = self.new(parent.theme)
|
12
12
|
child.inherit(parent)
|
13
13
|
child
|
14
14
|
end
|
15
15
|
|
16
|
+
attr_accessor :theme, :width, :height
|
17
|
+
|
18
|
+
def initialize(theme)
|
19
|
+
@theme = theme
|
20
|
+
end
|
21
|
+
|
22
|
+
def validate!
|
23
|
+
end
|
24
|
+
|
16
25
|
def bg_color
|
17
|
-
@_bg_color ||
|
26
|
+
@_bg_color || theme.bg_color
|
18
27
|
end
|
19
28
|
|
20
29
|
def bg_color=(color)
|
21
|
-
|
30
|
+
if color == :highlight
|
31
|
+
@_bg_color = theme.highlight_bg_color
|
32
|
+
else
|
33
|
+
@_bg_color = BgColor.validate!(color)
|
34
|
+
end
|
22
35
|
end
|
23
36
|
|
24
37
|
def bold?
|
@@ -30,11 +43,15 @@ module WhirledPeas
|
|
30
43
|
end
|
31
44
|
|
32
45
|
def color
|
33
|
-
@_color ||
|
46
|
+
@_color || theme.color
|
34
47
|
end
|
35
48
|
|
36
49
|
def color=(color)
|
37
|
-
|
50
|
+
if color == :highlight
|
51
|
+
@_color = theme.highlight_color
|
52
|
+
else
|
53
|
+
@_color = TextColor.validate!(color)
|
54
|
+
end
|
38
55
|
end
|
39
56
|
|
40
57
|
def underline?
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative 'text_color'
|
2
|
+
require_relative 'element_settings'
|
3
|
+
|
4
|
+
module WhirledPeas
|
5
|
+
module Settings
|
6
|
+
class GraphSettings < ElementSettings
|
7
|
+
def axis_color
|
8
|
+
@_axis_color || theme.axis_color
|
9
|
+
end
|
10
|
+
|
11
|
+
def axis_color=(color)
|
12
|
+
@_axis_color = TextColor.validate!(color)
|
13
|
+
end
|
14
|
+
|
15
|
+
def validate!
|
16
|
+
super
|
17
|
+
raise SettingsError, "`height` must be set for GraphSettings" if height.nil?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -7,6 +7,13 @@ module WhirledPeas
|
|
7
7
|
class GridSettings < ContainerSettings
|
8
8
|
attr_accessor :num_cols
|
9
9
|
|
10
|
+
def validate!
|
11
|
+
super
|
12
|
+
if num_cols.nil? || num_cols <= 0
|
13
|
+
raise SettingsError, "`num_cols` must be set to a positive number for GridSettings"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
10
17
|
def set_scrollbar(*)
|
11
18
|
raise NotImplementedError, 'Grids do not support scrollbars'
|
12
19
|
end
|
@@ -1,14 +1,26 @@
|
|
1
1
|
module WhirledPeas
|
2
2
|
module Settings
|
3
3
|
class Position
|
4
|
-
|
4
|
+
attr_reader :left, :top, :right, :bottom
|
5
5
|
|
6
|
-
def left
|
7
|
-
@
|
6
|
+
def left=(value)
|
7
|
+
@right = nil
|
8
|
+
@left = value
|
8
9
|
end
|
9
10
|
|
10
|
-
def top
|
11
|
-
@
|
11
|
+
def top=(value)
|
12
|
+
@bottom = nil
|
13
|
+
@top = value
|
14
|
+
end
|
15
|
+
|
16
|
+
def right=(value)
|
17
|
+
@left = nil
|
18
|
+
@right = value
|
19
|
+
end
|
20
|
+
|
21
|
+
def bottom=(value)
|
22
|
+
@top = nil
|
23
|
+
@bottom = value
|
12
24
|
end
|
13
25
|
end
|
14
26
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'whirled_peas/utils/ansi'
|
2
2
|
|
3
|
+
require_relative 'bg_color'
|
3
4
|
require_relative 'color'
|
4
5
|
|
5
6
|
module WhirledPeas
|
@@ -16,6 +17,10 @@ module WhirledPeas
|
|
16
17
|
GRAY = BLACK.bright
|
17
18
|
|
18
19
|
DEFAULT = nil # Use system defined default
|
20
|
+
|
21
|
+
def as_bg_color
|
22
|
+
BgColor.new(code + BgColor::BG_OFFSET, bright?)
|
23
|
+
end
|
19
24
|
end
|
20
25
|
end
|
21
26
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'whirled_peas/utils/title_font'
|
2
|
+
|
3
|
+
require_relative 'bg_color'
|
4
|
+
require_relative 'border'
|
5
|
+
require_relative 'text_color'
|
6
|
+
|
7
|
+
module WhirledPeas
|
8
|
+
module Settings
|
9
|
+
class Theme
|
10
|
+
attr_reader :bg_color, :border_style, :color, :title_font
|
11
|
+
|
12
|
+
def axis_color=(value)
|
13
|
+
@axis_color = TextColor.validate!(value)
|
14
|
+
end
|
15
|
+
|
16
|
+
def axis_color
|
17
|
+
@axis_color || border_color
|
18
|
+
end
|
19
|
+
|
20
|
+
def bg_color=(value)
|
21
|
+
@bg_color = BgColor.validate!(value)
|
22
|
+
end
|
23
|
+
|
24
|
+
def border_color=(value)
|
25
|
+
@border_color = TextColor.validate!(value)
|
26
|
+
end
|
27
|
+
|
28
|
+
def border_color
|
29
|
+
@border_color || color
|
30
|
+
end
|
31
|
+
|
32
|
+
def border_style=(value)
|
33
|
+
@border_style = Border::Styles.validate!(value)
|
34
|
+
end
|
35
|
+
|
36
|
+
def color=(value)
|
37
|
+
@color = TextColor.validate!(value)
|
38
|
+
end
|
39
|
+
|
40
|
+
def highlight_bg_color=(value)
|
41
|
+
@highlight_bg_color = BgColor.validate!(value)
|
42
|
+
end
|
43
|
+
|
44
|
+
def highlight_bg_color
|
45
|
+
@highlight_bg_color || color.as_bg_color
|
46
|
+
end
|
47
|
+
|
48
|
+
def highlight_color=(value)
|
49
|
+
@highlight_color = TextColor.validate!(value)
|
50
|
+
end
|
51
|
+
|
52
|
+
def highlight_color
|
53
|
+
@highlight_color || bg_color.as_text_color
|
54
|
+
end
|
55
|
+
|
56
|
+
def title_font=(value)
|
57
|
+
@title_font = Utils::TitleFont.validate!(value)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
require_relative 'theme'
|
4
|
+
|
5
|
+
module WhirledPeas
|
6
|
+
module Settings
|
7
|
+
module ThemeLibrary
|
8
|
+
CONFIG_FILE = File.join(File.dirname(File.dirname(File.dirname(__FILE__))), 'data', 'themes.yaml')
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def theme_names
|
12
|
+
themes.keys
|
13
|
+
end
|
14
|
+
|
15
|
+
def add(name, theme)
|
16
|
+
themes[name] = theme
|
17
|
+
end
|
18
|
+
|
19
|
+
def get(name)
|
20
|
+
unless themes.key?(name)
|
21
|
+
expected = themes.keys.map(&:inspect).join(', ')
|
22
|
+
raise ArgumentError, "Unknown theme: #{name.inspect}, expecting one of #{expected}"
|
23
|
+
end
|
24
|
+
themes[name]
|
25
|
+
end
|
26
|
+
|
27
|
+
def default_name
|
28
|
+
themes.keys.first
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def themes
|
34
|
+
return @themes if @themes
|
35
|
+
@themes = {}
|
36
|
+
config = YAML.load_file(CONFIG_FILE)
|
37
|
+
config.each do |name, settings|
|
38
|
+
name = name.to_sym
|
39
|
+
theme = Theme.new
|
40
|
+
settings.each do |key, value|
|
41
|
+
case key
|
42
|
+
when 'axis_color'
|
43
|
+
theme.axis_color = value
|
44
|
+
when 'bg_color'
|
45
|
+
theme.bg_color = value
|
46
|
+
when 'border_color'
|
47
|
+
theme.border_color = value
|
48
|
+
when 'border_style'
|
49
|
+
theme.border_style = value
|
50
|
+
when 'color'
|
51
|
+
theme.color = value
|
52
|
+
when 'highlight_bg_color'
|
53
|
+
theme.highlight_bg_color = value
|
54
|
+
when 'highlight_color'
|
55
|
+
theme.highlight_color = value
|
56
|
+
when 'title_font'
|
57
|
+
theme.title_font = value
|
58
|
+
else
|
59
|
+
raise ArgumentError, "Unexpected theme setting: #{key} in #{CONFIG_FILE}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
@themes[name] = theme
|
63
|
+
end
|
64
|
+
@themes
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -28,7 +28,7 @@ module WhirledPeas
|
|
28
28
|
BRIGHT_OFFSET = 60
|
29
29
|
|
30
30
|
class << self
|
31
|
-
def with_screen(output, width: nil, height: nil, &block)
|
31
|
+
def with_screen(output=STDOUT, width: nil, height: nil, &block)
|
32
32
|
require 'highline'
|
33
33
|
unless width && height
|
34
34
|
width, height = HighLine.new.terminal.terminal_size
|
data/lib/whirled_peas/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[1;1H[97m[40m [0m[2;1H[97m[40m [0m[3;1H[97m[40m [0m[4;1H[97m[40m [0m[5;1H[97m[40m [0m[6;1H[97m[40m [0m[7;1H[97m[40m [0m[8;1H[97m[40m [0m[9;1H[97m[40m [0m[10;1H[97m[40m [0m[11;1H[97m[40m [0m[12;1H[97m[40m [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[1;1H[97m[40m┏━━━━━━━━━━┓[0m[2;1H[97m[40m┃ ┃[0m[3;1H[97m[40m┃ ▗▄▄▄▖ ┃[0m[4;1H[97m[40m┗━━━━━━━━━━┛[0m[2;2H[97m[40mH[0m[2;3H[97m[40mI[0m[2;4H[97m[40mJ[0m[2;5H[97m[40mK[0m[2;6H[97m[40mL[0m[2;7H[97m[40mM[0m[2;8H[90m[107mN[0m[2;9H[97m[40mO[0m[2;10H[97m[40mP[0m[2;11H[97m[40mQ[0m[0m[24;1H[?25h
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
require 'whirled_peas/component/list_with_active'
|
3
|
+
|
4
|
+
class TemplateFactory
|
5
|
+
ITEMS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
6
|
+
|
7
|
+
def build(*)
|
8
|
+
WhirledPeas.template(:test) do |composer, settings|
|
9
|
+
WhirledPeas.component(composer, settings, :list_with_active) do |component|
|
10
|
+
component.items = ITEMS
|
11
|
+
component.active_index = ITEMS.length / 2
|
12
|
+
component.viewport_size = 10
|
13
|
+
component.active_color = :gray
|
14
|
+
component.active_bg_color = :bright_white
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[1;1H[97m[40m [0m[2;1H[97m[40m [0m[3;1H[97m[40m [0m[4;1H[97m[40m [0m[5;1H[97m[40m [0m[6;1H[97m[40m [0m[7;1H[97m[40m [0m[8;1H[97m[40m [0m[9;1H[97m[40m [0m[10;1H[97m[40m [0m[11;1H[97m[40m [0m[12;1H[97m[40m [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[1;1H[97m[40m┏━━━━━━━━━━┓[0m[2;1H[97m[40m┃ ┃[0m[3;1H[97m[40m┃ ▄▄▄▄┃[0m[4;1H[97m[40m┗━━━━━━━━━━┛[0m[2;2H[97m[40mQ[0m[2;3H[97m[40mR[0m[2;4H[97m[40mS[0m[2;5H[97m[40mT[0m[2;6H[97m[40mU[0m[2;7H[97m[40mV[0m[2;8H[97m[40mW[0m[2;9H[97m[40mX[0m[2;10H[97m[40mY[0m[2;11H[97m[40mZ[0m[0m[24;1H[?25h
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
require 'whirled_peas/component/list_with_active'
|
3
|
+
|
4
|
+
class TemplateFactory
|
5
|
+
ITEMS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
6
|
+
|
7
|
+
def build(*)
|
8
|
+
WhirledPeas.template(:test) do |composer, settings|
|
9
|
+
WhirledPeas.component(composer, settings, :list_with_active) do |component|
|
10
|
+
component.items = ITEMS
|
11
|
+
component.active_index = ITEMS.size - 1
|
12
|
+
component.viewport_size = 10
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[1;1H[97m[40m [0m[2;1H[97m[40m [0m[3;1H[97m[40m [0m[4;1H[97m[40m [0m[5;1H[97m[40m [0m[6;1H[97m[40m [0m[7;1H[97m[40m [0m[8;1H[97m[40m [0m[9;1H[97m[40m [0m[10;1H[97m[40m [0m[11;1H[97m[40m [0m[12;1H[97m[40m [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[1;1H[97m[40m┏━━━━━━━━━━┓[0m[2;1H[97m[40m┃ ┃[0m[3;1H[97m[40m┃ ▗▄▄▄▖ ┃[0m[4;1H[97m[40m┗━━━━━━━━━━┛[0m[2;2H[97m[40mH[0m[2;3H[97m[40mI[0m[2;4H[97m[40mJ[0m[2;5H[97m[40mK[0m[2;6H[97m[40mL[0m[2;7H[97m[40mM[0m[2;8H[97m[40mN[0m[2;9H[97m[40mO[0m[2;10H[97m[40mP[0m[2;11H[97m[40mQ[0m[0m[24;1H[?25h
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
require 'whirled_peas/component/list_with_active'
|
3
|
+
|
4
|
+
class TemplateFactory
|
5
|
+
ITEMS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
6
|
+
|
7
|
+
def build(*)
|
8
|
+
WhirledPeas.template(:test) do |composer, settings|
|
9
|
+
WhirledPeas.component(composer, settings, :list_with_active) do |component|
|
10
|
+
component.items = ITEMS
|
11
|
+
component.active_index = ITEMS.length / 2
|
12
|
+
component.viewport_size = 10
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[1;1H[97m[40m [0m[2;1H[97m[40m [0m[3;1H[97m[40m [0m[4;1H[97m[40m [0m[5;1H[97m[40m [0m[6;1H[97m[40m [0m[7;1H[97m[40m [0m[8;1H[97m[40m [0m[9;1H[97m[40m [0m[10;1H[97m[40m [0m[11;1H[97m[40m [0m[12;1H[97m[40m [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[1;1H[97m[40m┏━━━━━━━━━━┓[0m[2;1H[97m[40m┃ ┃[0m[3;1H[97m[40m┃▄▄▄▄ ┃[0m[4;1H[97m[40m┗━━━━━━━━━━┛[0m[2;2H[97m[40mA[0m[2;3H[97m[40mB[0m[2;4H[97m[40mC[0m[2;5H[97m[40mD[0m[2;6H[97m[40mE[0m[2;7H[97m[40mF[0m[2;8H[97m[40mG[0m[2;9H[97m[40mH[0m[2;10H[97m[40mI[0m[2;11H[97m[40mJ[0m[0m[24;1H[?25h
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
require 'whirled_peas/component/list_with_active'
|
3
|
+
|
4
|
+
class TemplateFactory
|
5
|
+
ITEMS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
6
|
+
|
7
|
+
def build(*)
|
8
|
+
WhirledPeas.template(:test) do |composer, settings|
|
9
|
+
WhirledPeas.component(composer, settings, :list_with_active) do |component|
|
10
|
+
component.items = ITEMS
|
11
|
+
component.active_index = 0
|
12
|
+
component.viewport_size = 10
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|