To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / lib / SVG / Graph / BarBase.rb @ 442:753f1380d6bc

History | View | Annotate | Download (2.93 KB)

1
require 'rexml/document'
2
require 'SVG/Graph/Graph'
3

    
4
module SVG
5
  module Graph
6
                # = Synopsis
7
                #
8
                # A superclass for bar-style graphs.  Do not attempt to instantiate
9
                # directly; use one of the subclasses instead.
10
                #
11
    # = Author
12
    #
13
    # Sean E. Russell <serATgermaneHYPHENsoftwareDOTcom>
14
                #
15
    # Copyright 2004 Sean E. Russell
16
                # This software is available under the Ruby license[LICENSE.txt]
17
    #
18
    class BarBase < SVG::Graph::Graph
19
                        # Ensures that :fields are provided in the configuration.
20
      def initialize config
21
        raise "fields was not supplied or is empty" unless config[:fields] &&
22
        config[:fields].kind_of?(Array) &&
23
        config[:fields].length > 0
24
                                super
25
                        end
26

    
27
                        # In addition to the defaults set in Graph::initialize, sets
28
                        # [bar_gap] true
29
                        # [stack] :overlap
30
                        def set_defaults
31
        init_with( :bar_gap => true, :stack => :overlap )
32
      end
33

    
34
      #   Whether to have a gap between the bars or not, default
35
      #   is true, set to false if you don't want gaps.
36
      attr_accessor :bar_gap
37
      #   How to stack data sets.  :overlap overlaps bars with
38
      #   transparent colors, :top stacks bars on top of one another,
39
      #   :side stacks the bars side-by-side. Defaults to :overlap.
40
      attr_accessor :stack
41

    
42

    
43
                        protected
44

    
45
      def max_value
46
        @data.collect{|x| x[:data].max}.max
47
      end
48

    
49
      def min_value
50
        min = 0
51
        if min_scale_value.nil? 
52
          min = @data.collect{|x| x[:data].min}.min
53
          min = min > 0 ? 0 : min
54
        else
55
          min = min_scale_value
56
        end
57
        return min
58
      end
59

    
60
      def get_css
61
        return <<EOL
62
/* default fill styles for multiple datasets (probably only use a single dataset on this graph though) */
63
.key1,.fill1{
64
        fill: #ff0000;
65
        fill-opacity: 0.5;
66
        stroke: none;
67
        stroke-width: 0.5px;        
68
}
69
.key2,.fill2{
70
        fill: #0000ff;
71
        fill-opacity: 0.5;
72
        stroke: none;
73
        stroke-width: 1px;        
74
}
75
.key3,.fill3{
76
        fill: #00ff00;
77
        fill-opacity: 0.5;
78
        stroke: none;
79
        stroke-width: 1px;        
80
}
81
.key4,.fill4{
82
        fill: #ffcc00;
83
        fill-opacity: 0.5;
84
        stroke: none;
85
        stroke-width: 1px;        
86
}
87
.key5,.fill5{
88
        fill: #00ccff;
89
        fill-opacity: 0.5;
90
        stroke: none;
91
        stroke-width: 1px;        
92
}
93
.key6,.fill6{
94
        fill: #ff00ff;
95
        fill-opacity: 0.5;
96
        stroke: none;
97
        stroke-width: 1px;        
98
}
99
.key7,.fill7{
100
        fill: #00ffff;
101
        fill-opacity: 0.5;
102
        stroke: none;
103
        stroke-width: 1px;        
104
}
105
.key8,.fill8{
106
        fill: #ffff00;
107
        fill-opacity: 0.5;
108
        stroke: none;
109
        stroke-width: 1px;        
110
}
111
.key9,.fill9{
112
        fill: #cc6666;
113
        fill-opacity: 0.5;
114
        stroke: none;
115
        stroke-width: 1px;        
116
}
117
.key10,.fill10{
118
        fill: #663399;
119
        fill-opacity: 0.5;
120
        stroke: none;
121
        stroke-width: 1px;        
122
}
123
.key11,.fill11{
124
        fill: #339900;
125
        fill-opacity: 0.5;
126
        stroke: none;
127
        stroke-width: 1px;        
128
}
129
.key12,.fill12{
130
        fill: #9966FF;
131
        fill-opacity: 0.5;
132
        stroke: none;
133
        stroke-width: 1px;        
134
}
135
EOL
136
      end
137
    end
138
  end
139
end