]> git.cworth.org Git - sup/blobdiff - lib/sup/horizontal-selector.rb
whoops, forgot to add this to svn
[sup] / lib / sup / horizontal-selector.rb
diff --git a/lib/sup/horizontal-selector.rb b/lib/sup/horizontal-selector.rb
new file mode 100644 (file)
index 0000000..8ef30fe
--- /dev/null
@@ -0,0 +1,66 @@
+module Redwood
+
+class HorizontalSelector
+  attr_accessor :label
+
+  def initialize label, vals, labels, base_color=:horizontal_selector_unselected_color, selected_color=:horizontal_selector_selected_color
+    @label = label
+    @vals = vals
+    @labels = labels
+    @base_color = base_color
+    @selected_color = selected_color
+    @selection = 0
+  end
+
+  def set_to val; @selection = @vals.index(val) end
+
+  def val; @vals[@selection] end
+
+  def old_line width=nil
+    label =
+      if width
+        sprintf "%#{width}s ", @label
+      else
+        "#{@label} "
+      end
+
+    [[:none, label]] + 
+      (0 ... @labels.length).inject([]) do |array, i|
+        array + [
+          if i == @selection
+            [@selected_color, "[" + @labels[i] + "]"]
+          else
+            [@base_color, " " + @labels[i] + " "]
+          end] + [[:none, " "]]
+      end + [[:none, ""]]
+  end
+
+  def line width=nil
+    label =
+      if width
+        sprintf "%#{width}s ", @label
+      else
+        "#{@label} "
+      end
+
+    [[:none, label]] + 
+      (0 ... @labels.length).inject([]) do |array, i|
+        array + [
+          if i == @selection
+            [@selected_color, @labels[i]]
+          else
+            [@base_color, @labels[i]]
+          end] + [[:none, "  "]]
+      end + [[:none, ""]]
+  end
+
+  def roll_left
+    @selection = (@selection - 1) % @labels.length
+  end
+
+  def roll_right
+    @selection = (@selection + 1) % @labels.length
+  end
+end
+
+end