diff options
| author | Randy Morgan <[email protected]> | 2012-07-18 08:50:43 +0900 |
|---|---|---|
| committer | Randy Morgan <[email protected]> | 2012-07-18 08:50:43 +0900 |
| commit | 51ec0287e61e4c65e6312d041869ccd9a9538c84 (patch) | |
| tree | d6b78662995448a7f16c826432917c28fc45f0cb /lib | |
| parent | f6cf8b9ffd4e1f8c25b3237cc529bc657c52e32f (diff) | |
| download | caxlsx-51ec0287e61e4c65e6312d041869ccd9a9538c84.tar.gz caxlsx-51ec0287e61e4c65e6312d041869ccd9a9538c84.zip | |
#113 implement data labels for pie charts
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/axlsx/drawing/chart.rb | 4 | ||||
| -rw-r--r-- | lib/axlsx/drawing/d_lbls.rb | 67 | ||||
| -rw-r--r-- | lib/axlsx/drawing/drawing.rb | 1 | ||||
| -rw-r--r-- | lib/axlsx/drawing/pie_3D_chart.rb | 2 |
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 |
