mirror of
				https://github.com/redmine/redmine.git
				synced 2025-10-31 02:15:52 +01:00 
			
		
		
		
	git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11269 e93f8b46-1217-0410-a6f0-8f06a7374b81
		
			
				
	
	
		
			140 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'rexml/document'
 | |
| require 'SVG/Graph/Graph'
 | |
| 
 | |
| module SVG
 | |
|   module Graph
 | |
| 		# = Synopsis
 | |
| 		#
 | |
| 		# A superclass for bar-style graphs.  Do not attempt to instantiate
 | |
| 		# directly; use one of the subclasses instead.
 | |
| 		#
 | |
|     # = Author
 | |
|     #
 | |
|     # Sean E. Russell <serATgermaneHYPHENsoftwareDOTcom>
 | |
| 		#
 | |
|     # Copyright 2004 Sean E. Russell
 | |
| 		# This software is available under the Ruby license[LICENSE.txt]
 | |
|     #
 | |
|     class BarBase < SVG::Graph::Graph
 | |
| 			# Ensures that :fields are provided in the configuration.
 | |
|       def initialize config
 | |
|         raise "fields was not supplied or is empty" unless config[:fields] &&
 | |
|         config[:fields].kind_of?(Array) &&
 | |
|         config[:fields].length > 0
 | |
| 				super
 | |
| 			end
 | |
| 
 | |
| 			# In addition to the defaults set in Graph::initialize, sets
 | |
| 			# [bar_gap] true
 | |
| 			# [stack] :overlap
 | |
| 			def set_defaults
 | |
|         init_with( :bar_gap => true, :stack => :overlap )
 | |
|       end
 | |
| 
 | |
|       #   Whether to have a gap between the bars or not, default
 | |
|       #   is true, set to false if you don't want gaps.
 | |
|       attr_accessor :bar_gap
 | |
|       #   How to stack data sets.  :overlap overlaps bars with
 | |
|       #   transparent colors, :top stacks bars on top of one another,
 | |
|       #   :side stacks the bars side-by-side. Defaults to :overlap.
 | |
|       attr_accessor :stack
 | |
| 
 | |
| 
 | |
| 			protected
 | |
| 
 | |
|       def max_value
 | |
|         @data.collect{|x| x[:data].max}.max
 | |
|       end
 | |
| 
 | |
|       def min_value
 | |
|         min = 0
 | |
|         if min_scale_value.nil? 
 | |
|           min = @data.collect{|x| x[:data].min}.min
 | |
|           min = min > 0 ? 0 : min
 | |
|         else
 | |
|           min = min_scale_value
 | |
|         end
 | |
|         return min
 | |
|       end
 | |
| 
 | |
|       def get_css
 | |
|         return <<EOL
 | |
| /* default fill styles for multiple datasets (probably only use a single dataset on this graph though) */
 | |
| .key1,.fill1{
 | |
| 	fill: #ff0000;
 | |
| 	fill-opacity: 0.5;
 | |
| 	stroke: none;
 | |
| 	stroke-width: 0.5px;	
 | |
| }
 | |
| .key2,.fill2{
 | |
| 	fill: #0000ff;
 | |
| 	fill-opacity: 0.5;
 | |
| 	stroke: none;
 | |
| 	stroke-width: 1px;	
 | |
| }
 | |
| .key3,.fill3{
 | |
| 	fill: #00ff00;
 | |
| 	fill-opacity: 0.5;
 | |
| 	stroke: none;
 | |
| 	stroke-width: 1px;	
 | |
| }
 | |
| .key4,.fill4{
 | |
| 	fill: #ffcc00;
 | |
| 	fill-opacity: 0.5;
 | |
| 	stroke: none;
 | |
| 	stroke-width: 1px;	
 | |
| }
 | |
| .key5,.fill5{
 | |
| 	fill: #00ccff;
 | |
| 	fill-opacity: 0.5;
 | |
| 	stroke: none;
 | |
| 	stroke-width: 1px;	
 | |
| }
 | |
| .key6,.fill6{
 | |
| 	fill: #ff00ff;
 | |
| 	fill-opacity: 0.5;
 | |
| 	stroke: none;
 | |
| 	stroke-width: 1px;	
 | |
| }
 | |
| .key7,.fill7{
 | |
| 	fill: #00ffff;
 | |
| 	fill-opacity: 0.5;
 | |
| 	stroke: none;
 | |
| 	stroke-width: 1px;	
 | |
| }
 | |
| .key8,.fill8{
 | |
| 	fill: #ffff00;
 | |
| 	fill-opacity: 0.5;
 | |
| 	stroke: none;
 | |
| 	stroke-width: 1px;	
 | |
| }
 | |
| .key9,.fill9{
 | |
| 	fill: #cc6666;
 | |
| 	fill-opacity: 0.5;
 | |
| 	stroke: none;
 | |
| 	stroke-width: 1px;	
 | |
| }
 | |
| .key10,.fill10{
 | |
| 	fill: #663399;
 | |
| 	fill-opacity: 0.5;
 | |
| 	stroke: none;
 | |
| 	stroke-width: 1px;	
 | |
| }
 | |
| .key11,.fill11{
 | |
| 	fill: #339900;
 | |
| 	fill-opacity: 0.5;
 | |
| 	stroke: none;
 | |
| 	stroke-width: 1px;	
 | |
| }
 | |
| .key12,.fill12{
 | |
| 	fill: #9966FF;
 | |
| 	fill-opacity: 0.5;
 | |
| 	stroke: none;
 | |
| 	stroke-width: 1px;	
 | |
| }
 | |
| EOL
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |