royw-shoeshine 0.0.2 → 0.0.3

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.
@@ -4,15 +4,15 @@ This is a collection of UI elements for shoes (http://shoooes.net).
4
4
 
5
5
  The collection currently includes:
6
6
 
7
- * UnorderedList is an unordered lists with various bullets
8
- * with/without bullets
7
+ * List displays lists with various optional bullets or indexes
8
+ * bullets (circle, star, plus, or custom)
9
+ * indexes (anything that responds to a .next())
9
10
  * vertical or horizontal orientation
10
11
  * ListItems is a handy wrapper for placing things in the list
11
12
  * DropDownMenu is an inplace drop down menu that can serve as popup menus
12
13
  * An example application to show them off with
13
14
 
14
15
  TODOs include:
15
- * ordered lists
16
16
  * toolbar (horizontal list of icons)
17
17
  * maybe a menubar
18
18
 
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 2
2
+ :patch: 3
3
3
  :major: 0
4
4
  :minor: 0
@@ -5,16 +5,13 @@ class CommandWidget
5
5
  def show(opt={})
6
6
  app.stack(opt) do
7
7
  app.background app.gradient(app.rgb(0, 255, 255), app.rgb(255, 0, 255), :angle => -35)
8
- command_list = UnorderedList.new(app, :left_margin => 0)
8
+ command_list = List.new(app, :left_margin => 0)
9
9
  command_list.add ListItem.new("Index",
10
10
  :click => lambda{app.visit(INDEX_PAGE)},
11
11
  :bullet => List::STAR_BULLET)
12
12
  command_list.add HorizontalRule.new(:width => opt[:width])
13
- command_list.add ListItem.new("Unordered Lists",
14
- :click => lambda {app.visit(UNORDERED_LIST_PAGE)},
15
- :bullet => List::CIRCLE_BULLET)
16
- command_list.add ListItem.new("Ordered Lists",
17
- :click => lambda {app.visit(ORDERED_LIST_PAGE)},
13
+ command_list.add ListItem.new("Lists",
14
+ :click => lambda {app.visit(LIST_PAGE)},
18
15
  :bullet => List::CIRCLE_BULLET)
19
16
  command_list.add ListItem.new("DropDownMenus",
20
17
  :click => lambda {app.visit(DROP_DOWN_MENU_PAGE)},
@@ -12,7 +12,8 @@ class DDMenuWidget
12
12
  app.para "Both columns close the menu when the mouse leaves it."
13
13
  app.flow do
14
14
  app.stack(:width => 100) do
15
- list = UnorderedList.new(app)
15
+ app.para "right click"
16
+ list = List.new(app)
16
17
  numbers = %w(one two three four five).collect do |item|
17
18
  ListItem.new(item,
18
19
  :click => lambda{alert("#{item} was clicked")})
@@ -27,9 +28,11 @@ class DDMenuWidget
27
28
  ))
28
29
  end
29
30
  list.show
31
+ app.rect(90, 0, 1, 180)
30
32
  end
31
33
  app.stack(:width => 100) do
32
- list = UnorderedList.new(app)
34
+ app.para 'hover'
35
+ list = List.new(app)
33
36
  numbers = %w(six seven eight nine).collect do |item|
34
37
  ListItem.new(item,
35
38
  :click => lambda{alert("#{item} was clicked")})
@@ -11,8 +11,7 @@ require 'nav'
11
11
  require 'action'
12
12
  require 'dd_menu_action'
13
13
  require 'index_action'
14
- require 'ordered_list_action'
15
- require 'unordered_list_action'
14
+ require 'list_action'
16
15
 
17
16
  class ListExample < Shoes
18
17
  include Nav
@@ -42,8 +41,7 @@ class ListExample < Shoes
42
41
 
43
42
  # define our pages
44
43
  page_def INDEX_PAGE, :index, IndexAction
45
- page_def UNORDERED_LIST_PAGE, :ul, UnorderedListAction
46
- page_def ORDERED_LIST_PAGE, :ol, OrderedListAction
44
+ page_def LIST_PAGE, :list, ListAction
47
45
  page_def DROP_DOWN_MENU_PAGE, :drop_down_menu, DropDownMenuAction
48
46
 
49
47
  private
@@ -1,13 +1,13 @@
1
1
  require 'action'
2
2
  require 'nav'
3
- require 'unordered_list_widget'
3
+ require 'list_widget'
4
4
 
5
- class UnorderedListAction < Action
5
+ class ListAction < Action
6
6
  include Nav
7
7
 
8
8
  def initialize
9
9
  super
10
- @widget = UnorderedListWidget.new
10
+ @widget = ListWidget.new
11
11
  end
12
12
 
13
13
  def execute()
@@ -0,0 +1,93 @@
1
+ require 'shoeshine/widget'
2
+
3
+ class ListWidget
4
+ include Widget
5
+ include Nav
6
+
7
+ def initialize
8
+ end
9
+
10
+ def show(opt={})
11
+ opt = opt.merge(VIEW_AREA_OPTS)
12
+ app.stack(opt) do
13
+ app.background(app.floralwhite) if $DEBUG
14
+ app.caption "Vertical Lists"
15
+
16
+ app.para "Various Bullets"
17
+ app.flow do
18
+ app.background(app.gainsboro) if $DEBUG
19
+ @x = 0
20
+ list_one(80, {})
21
+ list_one(80, {:bullet => List::CIRCLE_BULLET})
22
+ list_one(100, {:bullet => List::STAR_BULLET, :indent => 40, :background => app.yellow})
23
+ list_one(80, {:bullet => List::PLUS_BULLET, :background => app.cyan})
24
+ list_one(80, {:bullet => List::INDEX_BULLET, :index_seed => '1', :index_separator => '.'})
25
+ list_one(80, {:bullet => List::INDEX_BULLET, :index_seed => 'a', :index_separator => ')'})
26
+ list_one(80, {:bullet => List::INDEX_BULLET, :index_seed => 'G', :index_separator => ''})
27
+ end
28
+
29
+ app.para "With Links"
30
+ app.flow do
31
+ app.background(app.lavender) if $DEBUG
32
+ @x = 0
33
+ list_two(80, {})
34
+ list_two(80, {:bullet => List::CIRCLE_BULLET})
35
+ list_two(80, {:bullet => List::STAR_BULLET})
36
+ list_two(80, {:bullet => List::PLUS_BULLET})
37
+ end
38
+
39
+ app.caption "Horizontal Lists"
40
+ app.stack do
41
+ app.background(app.khaki) if $DEBUG
42
+ @y = 0
43
+ list_horizontal(30, {:column_width => 90})
44
+ list_horizontal(30, {:column_width => 100, :bullet => List::CIRCLE_BULLET})
45
+ list_horizontal(30, {:column_width => 110, :bullet => List::STAR_BULLET})
46
+ list_horizontal(30, {:column_width => 120, :bullet => List::PLUS_BULLET})
47
+ end
48
+
49
+ app.para ''
50
+ end
51
+ end
52
+
53
+ def list_one(width, options)
54
+ app.stack({:width => width}) do
55
+ list = List.new(app, options)
56
+ %w(alpha bravo charlie delta echo foxtrot).each do |item|
57
+ list.add(ListItem.new(item))
58
+ end
59
+ list.show
60
+ end
61
+ @x += width
62
+ app.rect(@x,0,1,140)
63
+ end
64
+
65
+ def list_two(width, options)
66
+ app.stack({:width => width}) do
67
+ list = List.new(app, options)
68
+ %w(alpha bravo charlie delta echo foxtrot).each do |item|
69
+ list.add(ListItem.new(item, :click => lambda{alert("#{item} clicked")}))
70
+ end
71
+ list.show
72
+ end
73
+ @x += width
74
+ app.rect(@x,0,1,140)
75
+ end
76
+
77
+ def list_horizontal(height, options)
78
+ app.stack(:height => height, :width => '100%') do
79
+ app.background(app.deeppink) if $DEBUG
80
+ list = List.new(app, options.merge(:orientation => :horizontal, :width => '100%'))
81
+ %w(alpha bravo charlie).each do |item|
82
+ list.add(ListItem.new(item))
83
+ end
84
+ %w(delta echo).each do |item|
85
+ list.add(ListItem.new(item, :click => lambda{alert("#{item} clicked")}))
86
+ end
87
+ list.show
88
+ end
89
+ @y += height
90
+ app.rect(0, @y, 5 * options[:column_width], 1)
91
+ end
92
+
93
+ end
@@ -1,9 +1,8 @@
1
1
  module Nav
2
2
  INDEX_PAGE = '/'
3
- UNORDERED_LIST_PAGE = '/ul'
4
- ORDERED_LIST_PAGE = '/ol'
3
+ LIST_PAGE = '/list'
5
4
  DROP_DOWN_MENU_PAGE = '/drop_down_menu'
6
5
 
7
- COMMAND_AREA_WIDTH = 150
6
+ COMMAND_AREA_WIDTH = 160
8
7
  VIEW_AREA_OPTS = {:width => -COMMAND_AREA_WIDTH, :margin_left => 10, :margin_right => @gutter}
9
8
  end
@@ -8,6 +8,5 @@ $:.push(File.join(File.dirname(__FILE__)))
8
8
  require 'shoeshine/widget'
9
9
  require 'shoeshine/list'
10
10
  require 'shoeshine/list_item'
11
- require 'shoeshine/unordered_list'
12
11
  require 'shoeshine/drop_down_menu'
13
12
  require 'shoeshine/horizontal_rule'
@@ -1,6 +1,8 @@
1
1
  class HorizontalRule
2
2
  include Widget
3
3
 
4
+ attr_accessor :counter
5
+
4
6
  def initialize(opts={})
5
7
  @options = opts
6
8
  @options ||= {}
@@ -1,19 +1,114 @@
1
+ require 'shoeshine/widget'
2
+
1
3
  class List
2
- STAR_BULLET = :star
3
- CIRCLE_BULLET = :circle
4
- PLUS_BULLET = :plus
5
- SPACE_BULLET = :space
6
-
7
- BULLETS = {
8
- :star => lambda{|app| app.star(-3,13,5,6,3)},
9
- :circle => lambda{|app| app.oval(-7,10,7)},
10
- :plus => lambda do |app|
11
- # rect(x,y,w,h) NOTE, docs are wrong
12
- length = 9
13
- beam = 1
14
- app.rect(-5,8,beam,length,1) # vertical bar
15
- app.rect(-9,12,length,beam,1) # horizontal bar
16
- end,
17
- :space => lambda {|app| }
18
- }
4
+ include Widget
5
+
6
+ STAR_BULLET = lambda{ |app, *ignore| List.star_image(app) }
7
+ CIRCLE_BULLET = lambda{ |app, *ignore| List.circle_image(app) }
8
+ PLUS_BULLET = lambda{ |app, *ignore| List.plus_image(app) }
9
+ SPACE_BULLET = lambda{ |app, *ignore| ' '}
10
+ INDEX_BULLET = lambda{ |app, counter, separator| List.index_string(app, counter, separator) }
11
+ IMAGE_BULLET = lambda{ |app, image_url, *ignore| app.image(image_url) unless image_url.nil? }
12
+
13
+ IMAGE_SIZE = 20
14
+
15
+ def initialize(app, list_opts={})
16
+ self.app = app
17
+ @list_opts = list_opts
18
+ @list_opts ||= {}
19
+ @list_items = []
20
+ end
21
+
22
+ def add(list_item)
23
+ @list_items << list_item
24
+ end
25
+
26
+ # list_opts => {
27
+ # :bullet => one_of(BULLETS.keys),
28
+ # :background => app.background argument
29
+ # }
30
+ def show(opts={})
31
+ show_options = {:margin_bottom => 10}.merge(@list_opts.merge(opts)) unless opts.nil?
32
+ column_options = {}
33
+ column_options[:width] = show_options[:column_width] unless show_options[:column_width].nil?
34
+ counter = show_options[:index_seed]
35
+ orientation = show_options[:orientation]
36
+ orientation = :vertical if orientation.nil?
37
+ case orientation.to_sym
38
+ when :vertical
39
+ app.stack(show_options) do
40
+ @list_items.each do |item|
41
+ item.app = app
42
+ app.flow do
43
+ item.counter = counter
44
+ item.show @list_opts
45
+ counter = counter.next unless counter.nil?
46
+ end
47
+ end
48
+ end
49
+ when :horizontal
50
+ app.flow(show_options.merge(:width => '100%')) do
51
+ app.background(app.cyan) if $DEBUG
52
+ @list_items.each do |item|
53
+ item.app = app
54
+ app.stack(column_options) do
55
+ app.background(app.red) if $DEBUG
56
+ app.flow do
57
+ app.background(app.yellow) if $DEBUG
58
+ item.counter = counter
59
+ item.show @list_opts
60
+ counter = counter.next unless counter.nil?
61
+ end
62
+ end
63
+ end
64
+ end
65
+ else
66
+ app.error "Invalid orientation value: '#{orientation.to_s}'"
67
+ end
68
+ end
69
+
70
+ protected
71
+
72
+ def self.star_image(app)
73
+ app.image IMAGE_SIZE, IMAGE_SIZE do
74
+ top = IMAGE_SIZE / 2 + 2
75
+ left = IMAGE_SIZE / 2
76
+ points = 5
77
+ outer = IMAGE_SIZE / 3
78
+ inner = IMAGE_SIZE / 6
79
+ app.star(left, top, points, outer, inner)
80
+ end
81
+ end
82
+
83
+ def self.circle_image(app)
84
+ app.image IMAGE_SIZE, IMAGE_SIZE do
85
+ top = (IMAGE_SIZE / 2)
86
+ left = (IMAGE_SIZE / 2)
87
+ radius = IMAGE_SIZE / 3
88
+ app.oval(left, top, radius)
89
+ end
90
+ end
91
+
92
+ def self.plus_image(app)
93
+ app.image IMAGE_SIZE, IMAGE_SIZE do
94
+ # rect(x,y,w,h) NOTE, docs are wrong
95
+ length = (IMAGE_SIZE * 2) / 3
96
+ beam = 3
97
+ top = ((IMAGE_SIZE - length) / 2) + 2
98
+ left = ((IMAGE_SIZE - length) / 2) + 2
99
+ vertical_center = IMAGE_SIZE / 2
100
+ horizontal_center = IMAGE_SIZE / 2
101
+ app.rect(horizontal_center, top, beam, length, 1) # vertical bar
102
+ app.rect(left, vertical_center, length, beam, 1) # horizontal bar
103
+ end
104
+ end
105
+
106
+ def self.index_string(app, counter, separator)
107
+ str = ''
108
+ separator ||= ''
109
+ unless counter.nil?
110
+ str = "#{counter}#{separator}"
111
+ end
112
+ app.para(str, :margin_bottom => 0)
113
+ end
19
114
  end
@@ -2,45 +2,46 @@ class ListItem
2
2
  include Widget
3
3
 
4
4
  attr_reader :options
5
+ attr_accessor :counter
5
6
 
6
7
  def initialize(text, opts={})
7
8
  @text = text
8
9
  @options = opts
9
10
  @options ||= {}
11
+ @counter = nil
10
12
  end
11
13
 
12
14
  def show(list_options={})
13
15
  list_options ||= {}
14
16
  show_options = list_options.merge(self.options)
17
+ bullet_options = {}
18
+ bullet_options[:width] = show_options[:indent].nil? ? 20 : show_options[:indent]
15
19
 
16
20
  bullet = show_options[:bullet]
17
- icon = show_options[:image]
18
21
  menu_items = show_options[:menu_items]
19
22
 
20
- indent = (bullet.nil? ? 0 : 15)
21
- right = (show_options[:margin_right].nil? ? 0 : show_options[:margin_right])
22
- left = (show_options[:margin_left].nil? ? 10 : show_options[:margin_left])
23
+ # right = (show_options[:margin_right].nil? ? 0 : show_options[:margin_right])
24
+ # left = (show_options[:margin_left].nil? ? 10 : show_options[:margin_left])
25
+ # left = (show_options[:indent].nil? ? 10 : show_options[:indent])
23
26
 
24
- unless icon.nil?
25
- icon_image = app.image icon
26
- indent = icon_image.full_width + 5
27
- else
28
- unless bullet.nil?
29
- indent = 15
30
- List::BULLETS[bullet].call(app)
31
- end
27
+ unless show_options[:background].nil?
28
+ app.background(show_options[:background], :margin_left => bullet_options[:width])
29
+ # app.background(show_options[:background])
30
+ # left += 5
32
31
  end
33
32
 
34
- unless show_options[:background].nil?
35
- app.background(show_options[:background], :margin_left => left)
36
- left += 5
33
+ unless bullet.nil?
34
+ app.flow(bullet_options) do
35
+ bullet_image = bullet.call(app, @counter, show_options[:index_separator])
36
+ end
37
37
  end
38
+
38
39
  unless menu_items.nil?
39
40
  trigger = show_options[:menu_trigger] || DropDownMenuWidget::RIGHT_BUTTON
40
41
  menu = DropDownMenuWidget.new(app, self, trigger, menu_items, menu_options(show_options))
41
42
  menu.show
42
43
  else
43
- para_opts = {:margin_left => left, :margin_right => right, :margin_bottom => 0}
44
+ para_opts = {:margin_bottom => 0}
44
45
  app.para(self.as_value(app), para_opts)
45
46
  end
46
47
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: royw-shoeshine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roy Wright
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-30 00:00:00 -07:00
12
+ date: 2009-05-01 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -34,19 +34,18 @@ files:
34
34
  - examples/example_app.rb
35
35
  - examples/index_action.rb
36
36
  - examples/index_widget.rb
37
+ - examples/list_action.rb
38
+ - examples/list_widget.rb
37
39
  - examples/nav.rb
38
40
  - examples/ordered_list_action.rb
39
41
  - examples/ordered_list_widget.rb
40
42
  - examples/page_widget.rb
41
43
  - examples/title_widget.rb
42
- - examples/unordered_list_action.rb
43
- - examples/unordered_list_widget.rb
44
44
  - lib/shoeshine.rb
45
45
  - lib/shoeshine/drop_down_menu.rb
46
46
  - lib/shoeshine/horizontal_rule.rb
47
47
  - lib/shoeshine/list.rb
48
48
  - lib/shoeshine/list_item.rb
49
- - lib/shoeshine/unordered_list.rb
50
49
  - lib/shoeshine/widget.rb
51
50
  - spec/drop_down_menu_spec.rb
52
51
  - spec/spec_helper.rb
@@ -81,15 +80,15 @@ test_files:
81
80
  - spec/drop_down_menu_spec.rb
82
81
  - examples/example_app.rb
83
82
  - examples/dd_menu_action.rb
83
+ - examples/list_action.rb
84
84
  - examples/nav.rb
85
85
  - examples/title_widget.rb
86
86
  - examples/dd_menu_widget.rb
87
- - examples/unordered_list_action.rb
88
87
  - examples/ordered_list_widget.rb
89
88
  - examples/ordered_list_action.rb
90
89
  - examples/index_action.rb
90
+ - examples/list_widget.rb
91
91
  - examples/index_widget.rb
92
92
  - examples/page_widget.rb
93
93
  - examples/action.rb
94
- - examples/unordered_list_widget.rb
95
94
  - examples/command_widget.rb
@@ -1,68 +0,0 @@
1
- require 'shoeshine/widget'
2
-
3
- class UnorderedListWidget
4
- include Widget
5
- include Nav
6
-
7
- def initialize
8
- end
9
-
10
- def show(opt={})
11
- app.stack(opt) do
12
- app.flow do
13
- app.para "Various bullets"
14
- list_one({})
15
- list_one({:bullet => List::CIRCLE_BULLET})
16
- list_one({:bullet => List::STAR_BULLET})
17
- list_one({:bullet => List::PLUS_BULLET})
18
- end
19
- app.flow(opt) do
20
- app.para "With links"
21
- list_two({})
22
- list_two({:bullet => List::CIRCLE_BULLET})
23
- list_two({:bullet => List::STAR_BULLET})
24
- list_two({:bullet => List::PLUS_BULLET})
25
- end
26
- app.stack(opt) do
27
- list_horizontal({})
28
- list_horizontal({:bullet => List::CIRCLE_BULLET})
29
- list_horizontal({:bullet => List::STAR_BULLET})
30
- list_horizontal({:bullet => List::PLUS_BULLET})
31
- end
32
- end
33
- end
34
-
35
- def list_one(options)
36
- app.stack({:width => 80}) do
37
- list = UnorderedList.new(app, options)
38
- %w(alpha bravo charlie delta echo foxtrot).each do |item|
39
- list.add(ListItem.new(item))
40
- end
41
- list.show
42
- end
43
- end
44
-
45
- def list_two(options)
46
- app.stack({:width => 80}) do
47
- list = UnorderedList.new(app, options)
48
- %w(alpha bravo charlie delta echo foxtrot).each do |item|
49
- list.add(ListItem.new(item, :click => lambda{alert("#{item} clicked")}))
50
- end
51
- list.show
52
- end
53
- end
54
-
55
- def list_horizontal(options)
56
- app.stack do
57
- list = UnorderedList.new(app, options.merge(:orientation => :horizontal, :width => '100%'))
58
- %w(alpha bravo charlie).each do |item|
59
- list.add(ListItem.new(item))
60
- end
61
- %w(delta echo foxtrot).each do |item|
62
- list.add(ListItem.new(item, :click => lambda{alert("#{item} clicked")}))
63
- end
64
- list.show
65
- end
66
- end
67
-
68
- end
@@ -1,52 +0,0 @@
1
- class UnorderedList < List
2
- include Widget
3
-
4
- public
5
-
6
- def initialize(app, list_opts={})
7
- self.app = app
8
- @list_opts = list_opts
9
- @list_opts ||= {}
10
- @list_items = []
11
- end
12
-
13
- def add(list_item)
14
- @list_items << list_item
15
- end
16
-
17
- # list_opts => {
18
- # :bullet => one_of(BULLETS.keys),
19
- # :background => app.background argument
20
- # }
21
- def show(opts={})
22
- show_options = {:margin_bottom => 10}.merge(@list_opts.merge(opts)) unless opts.nil?
23
-
24
- orientation = show_options[:orientation]
25
- orientation = :vertical if orientation.nil?
26
- case orientation.to_sym
27
- when :vertical
28
- app.stack(show_options) do
29
- @list_items.each do |item|
30
- item.app = app
31
- app.flow do
32
- item.show @list_opts
33
- end
34
- end
35
- end
36
- when :horizontal
37
- app.flow(show_options) do
38
- @list_items.each do |item|
39
- item.app = app
40
- app.stack(:width => 80) do
41
- item.show @list_opts
42
- end
43
- end
44
- end
45
- else
46
- app.error "Invalid orientation value: '#{orientation.to_s}'"
47
- end
48
- end
49
-
50
- def show_items
51
- end
52
- end