summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorRandy Morgan <[email protected]>2012-07-18 08:50:43 +0900
committerRandy Morgan <[email protected]>2012-07-18 08:50:43 +0900
commit51ec0287e61e4c65e6312d041869ccd9a9538c84 (patch)
treed6b78662995448a7f16c826432917c28fc45f0cb /lib
parentf6cf8b9ffd4e1f8c25b3237cc529bc657c52e32f (diff)
downloadcaxlsx-51ec0287e61e4c65e6312d041869ccd9a9538c84.tar.gz
caxlsx-51ec0287e61e4c65e6312d041869ccd9a9538c84.zip
#113 implement data labels for pie charts
Diffstat (limited to 'lib')
-rw-r--r--lib/axlsx/drawing/chart.rb4
-rw-r--r--lib/axlsx/drawing/d_lbls.rb67
-rw-r--r--lib/axlsx/drawing/drawing.rb1
-rw-r--r--lib/axlsx/drawing/pie_3D_chart.rb2
4 files changed, 73 insertions, 1 deletions
diff --git a/lib/axlsx/drawing/chart.rb b/lib/axlsx/drawing/chart.rb
index 3047fec2..c99d4878 100644
--- a/lib/axlsx/drawing/chart.rb
+++ b/lib/axlsx/drawing/chart.rb
@@ -46,7 +46,9 @@ module Axlsx
attr_reader :series_type
#TODO data labels!
- #attr_reader :dLabls
+ def d_lbls
+ @d_lbls ||= DLbls.new
+ end
# The title object for the chart.
# @return [Title]
diff --git a/lib/axlsx/drawing/d_lbls.rb b/lib/axlsx/drawing/d_lbls.rb
new file mode 100644
index 00000000..b1c010f1
--- /dev/null
+++ b/lib/axlsx/drawing/d_lbls.rb
@@ -0,0 +1,67 @@
+module Axlsx
+ # <c:dLbls>
+ #<c:dLblPos val="outEnd"/>
+ #<c:showLegendKey val="0"/>
+ #<c:showVal val="0"/>
+ #<c:showCatName val="1"/>
+ #<c:showSerName val="0"/>
+ #<c:showPercent val="1"/>
+ #<c:showBubbleSize val="0"/>
+ #<c:showLeaderLines val="1"/>
+ #</c:dLbls>
+
+ #The DLbls class manages serialization of data labels
+ class DLbls
+ BOOLEAN_ATTRIBUTES = [:show_legend_key, :show_val, :show_cat_name, :show_ser_name, :show_percent, :show_bubble_size, :show_leader_lines]
+
+ # creates a new DLbls object
+ def initialize(options={})
+ d_lbl_pos = :best_fit
+ initialize_defaults
+ options.each do |o|
+ self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
+ end
+
+ end
+
+ def initialize_defaults
+ BOOLEAN_ATTRIBUTES.each do |attr|
+ self.send("#{attr}=", false)
+ end
+ end
+
+ attr_reader :d_lbl_pos
+
+ # @see DLbls#d_lbl_pos
+ # Assigns the label postion for this data labels on this chart.
+ # Allowed positions are :bestFilt, :b, :ctr, :inBase, :inEnd, :l,
+ # :outEnd, :r and :t
+ # The default is :best_fit
+ # @param [Symbol] label_postion the postion you want to use.
+ def d_lbl_pos=(label_position)
+ Axlsx::RestrictionValidator.validate 'DLbls#d_lbl_pos', [:bestFit, :b, :ctr, :inBase, :inEnd, :l, :outEnd, :r, :t], label_position
+ @d_lbl_pos = label_position
+ end
+
+ BOOLEAN_ATTRIBUTES.each do |attr|
+ class_eval %{
+ attr_reader :#{attr}
+
+ def #{attr}=(v)
+ Axlsx::validate_boolean(v)
+ @#{attr} = v
+ end
+ }
+ end
+
+
+ # serializes the data labels
+ # @return [String]
+ def to_xml_string(str = '')
+ str << '<c:dLbls>'
+ instance_values.each { |name, value| str << "<c:#{Axlsx::camel(name, false)} val='#{value}' />" }
+ str << '</c:dLbls>'
+ end
+ end
+end
+
diff --git a/lib/axlsx/drawing/drawing.rb b/lib/axlsx/drawing/drawing.rb
index c1b41503..48b9320f 100644
--- a/lib/axlsx/drawing/drawing.rb
+++ b/lib/axlsx/drawing/drawing.rb
@@ -1,5 +1,6 @@
# encoding: UTF-8
module Axlsx
+ require 'axlsx/drawing/d_lbls.rb'
require 'axlsx/drawing/title.rb'
require 'axlsx/drawing/series_title.rb'
require 'axlsx/drawing/series.rb'
diff --git a/lib/axlsx/drawing/pie_3D_chart.rb b/lib/axlsx/drawing/pie_3D_chart.rb
index 20e8cd62..059d4148 100644
--- a/lib/axlsx/drawing/pie_3D_chart.rb
+++ b/lib/axlsx/drawing/pie_3D_chart.rb
@@ -26,6 +26,7 @@ module Axlsx
super(frame, options)
@series_type = PieSeries
@view_3D = View3D.new({:rot_x =>30, :perspective=>30}.merge(options))
+ @d_lbls = nil
end
# Serializes the object
@@ -36,6 +37,7 @@ module Axlsx
str_inner << '<c:pie3DChart>'
str_inner << '<c:varyColors val="1"/>'
@series.each { |ser| ser.to_xml_string(str_inner) }
+ @d_lbls.to_xml_string(str) if @d_lbls
str_inner << '</c:pie3DChart>'
end
end