annotate .svn/pristine/05/05cdc085e6ab746bd3734a56f879f137f280e27b.svn-base @ 1298:4f746d8966dd redmine_2.3_integration

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