annotate lib/SVG/Graph/BarBase.rb @ 1169:492ff72268e3 bug_521

Close obsolete branch bug_521
author Chris Cannam
date Thu, 18 Oct 2012 10:42:48 +0100
parents 513646585e45
children 3e4c3460b6ca
rev   line source
Chris@0 1 require 'rexml/document'
Chris@0 2 require 'SVG/Graph/Graph'
Chris@0 3
Chris@0 4 module SVG
Chris@0 5 module Graph
Chris@0 6 # = Synopsis
Chris@0 7 #
Chris@0 8 # A superclass for bar-style graphs. Do not attempt to instantiate
Chris@0 9 # directly; use one of the subclasses instead.
Chris@0 10 #
Chris@0 11 # = Author
Chris@0 12 #
Chris@0 13 # Sean E. Russell <serATgermaneHYPHENsoftwareDOTcom>
Chris@0 14 #
Chris@0 15 # Copyright 2004 Sean E. Russell
Chris@0 16 # This software is available under the Ruby license[LICENSE.txt]
Chris@0 17 #
Chris@0 18 class BarBase < SVG::Graph::Graph
Chris@0 19 # Ensures that :fields are provided in the configuration.
Chris@0 20 def initialize config
Chris@0 21 raise "fields was not supplied or is empty" unless config[:fields] &&
Chris@0 22 config[:fields].kind_of?(Array) &&
Chris@0 23 config[:fields].length > 0
Chris@0 24 super
Chris@0 25 end
Chris@0 26
Chris@0 27 # In addition to the defaults set in Graph::initialize, sets
Chris@0 28 # [bar_gap] true
Chris@0 29 # [stack] :overlap
Chris@0 30 def set_defaults
Chris@0 31 init_with( :bar_gap => true, :stack => :overlap )
Chris@0 32 end
Chris@0 33
Chris@0 34 # Whether to have a gap between the bars or not, default
Chris@0 35 # is true, set to false if you don't want gaps.
Chris@0 36 attr_accessor :bar_gap
Chris@0 37 # How to stack data sets. :overlap overlaps bars with
Chris@0 38 # transparent colors, :top stacks bars on top of one another,
Chris@0 39 # :side stacks the bars side-by-side. Defaults to :overlap.
Chris@0 40 attr_accessor :stack
Chris@0 41
Chris@0 42
Chris@0 43 protected
Chris@0 44
Chris@0 45 def max_value
Chris@0 46 @data.collect{|x| x[:data].max}.max
Chris@0 47 end
Chris@0 48
Chris@0 49 def min_value
Chris@0 50 min = 0
Chris@0 51 if min_scale_value.nil?
Chris@0 52 min = @data.collect{|x| x[:data].min}.min
Chris@0 53 min = min > 0 ? 0 : min
Chris@0 54 else
Chris@0 55 min = min_scale_value
Chris@0 56 end
Chris@0 57 return min
Chris@0 58 end
Chris@0 59
Chris@0 60 def get_css
Chris@0 61 return <<EOL
Chris@0 62 /* default fill styles for multiple datasets (probably only use a single dataset on this graph though) */
Chris@0 63 .key1,.fill1{
Chris@0 64 fill: #ff0000;
Chris@0 65 fill-opacity: 0.5;
Chris@0 66 stroke: none;
Chris@0 67 stroke-width: 0.5px;
Chris@0 68 }
Chris@0 69 .key2,.fill2{
Chris@0 70 fill: #0000ff;
Chris@0 71 fill-opacity: 0.5;
Chris@0 72 stroke: none;
Chris@0 73 stroke-width: 1px;
Chris@0 74 }
Chris@0 75 .key3,.fill3{
Chris@0 76 fill: #00ff00;
Chris@0 77 fill-opacity: 0.5;
Chris@0 78 stroke: none;
Chris@0 79 stroke-width: 1px;
Chris@0 80 }
Chris@0 81 .key4,.fill4{
Chris@0 82 fill: #ffcc00;
Chris@0 83 fill-opacity: 0.5;
Chris@0 84 stroke: none;
Chris@0 85 stroke-width: 1px;
Chris@0 86 }
Chris@0 87 .key5,.fill5{
Chris@0 88 fill: #00ccff;
Chris@0 89 fill-opacity: 0.5;
Chris@0 90 stroke: none;
Chris@0 91 stroke-width: 1px;
Chris@0 92 }
Chris@0 93 .key6,.fill6{
Chris@0 94 fill: #ff00ff;
Chris@0 95 fill-opacity: 0.5;
Chris@0 96 stroke: none;
Chris@0 97 stroke-width: 1px;
Chris@0 98 }
Chris@0 99 .key7,.fill7{
Chris@0 100 fill: #00ffff;
Chris@0 101 fill-opacity: 0.5;
Chris@0 102 stroke: none;
Chris@0 103 stroke-width: 1px;
Chris@0 104 }
Chris@0 105 .key8,.fill8{
Chris@0 106 fill: #ffff00;
Chris@0 107 fill-opacity: 0.5;
Chris@0 108 stroke: none;
Chris@0 109 stroke-width: 1px;
Chris@0 110 }
Chris@0 111 .key9,.fill9{
Chris@0 112 fill: #cc6666;
Chris@0 113 fill-opacity: 0.5;
Chris@0 114 stroke: none;
Chris@0 115 stroke-width: 1px;
Chris@0 116 }
Chris@0 117 .key10,.fill10{
Chris@0 118 fill: #663399;
Chris@0 119 fill-opacity: 0.5;
Chris@0 120 stroke: none;
Chris@0 121 stroke-width: 1px;
Chris@0 122 }
Chris@0 123 .key11,.fill11{
Chris@0 124 fill: #339900;
Chris@0 125 fill-opacity: 0.5;
Chris@0 126 stroke: none;
Chris@0 127 stroke-width: 1px;
Chris@0 128 }
Chris@0 129 .key12,.fill12{
Chris@0 130 fill: #9966FF;
Chris@0 131 fill-opacity: 0.5;
Chris@0 132 stroke: none;
Chris@0 133 stroke-width: 1px;
Chris@0 134 }
Chris@0 135 EOL
Chris@0 136 end
Chris@0 137 end
Chris@0 138 end
Chris@0 139 end