diff options
| author | Randy Morgan <[email protected]> | 2013-01-15 21:53:47 +0900 |
|---|---|---|
| committer | Randy Morgan <[email protected]> | 2013-01-15 21:53:47 +0900 |
| commit | 40c85619885de848447479b99c08e5feaea89a90 (patch) | |
| tree | 61cebfceb3ac1d404e4893b376f9f3a5d72e3bd0 /lib | |
| parent | e14682fb484cd72ba5f479cc1f7d46a7a9fd6007 (diff) | |
| download | caxlsx-40c85619885de848447479b99c08e5feaea89a90.tar.gz caxlsx-40c85619885de848447479b99c08e5feaea89a90.zip | |
Refactored relationship management for drawings
This should fix #160
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/axlsx/drawing/chart.rb | 6 | ||||
| -rw-r--r-- | lib/axlsx/drawing/drawing.rb | 17 | ||||
| -rw-r--r-- | lib/axlsx/drawing/graphic_frame.rb | 11 | ||||
| -rw-r--r-- | lib/axlsx/drawing/hyperlink.rb | 5 | ||||
| -rw-r--r-- | lib/axlsx/drawing/pic.rb | 6 |
5 files changed, 33 insertions, 12 deletions
diff --git a/lib/axlsx/drawing/chart.rb b/lib/axlsx/drawing/chart.rb index 1006f25e..081be949 100644 --- a/lib/axlsx/drawing/chart.rb +++ b/lib/axlsx/drawing/chart.rb @@ -63,6 +63,12 @@ module Axlsx # @return [Boolean] attr_reader :show_legend + # returns a relationship object for the chart + # @return [Axlsx::Relationship] + def relationship + Relationship.new(CHART_R, "../#{pn}") + end + # The index of this chart in the workbooks charts collection # @return [Integer] def index diff --git a/lib/axlsx/drawing/drawing.rb b/lib/axlsx/drawing/drawing.rb index 769d67c5..7eaf29b6 100644 --- a/lib/axlsx/drawing/drawing.rb +++ b/lib/axlsx/drawing/drawing.rb @@ -132,6 +132,7 @@ module Axlsx end # The relational part name for this drawing + # #NOTE This should be rewritten to return an Axlsx::Relationship object. # @return [String] def rels_pn "#{DRAWING_RELS_PN % (index+1)}" @@ -139,23 +140,17 @@ module Axlsx # The index of a chart, image or hyperlink object this drawing contains def index_of(object) - objects = charts + images + hyperlinks - objects.index(object) + child_objects.index(object) end + def child_objects + charts + images + hyperlinks + end # The drawing's relationships. # @return [Relationships] def relationships r = Relationships.new - charts.each do |chart| - r << Relationship.new(CHART_R, "../#{chart.pn}") - end - images.each do |image| - r << Relationship.new(IMAGE_R, "../#{image.pn}") - end - hyperlinks.each do |hyperlink| - r << Relationship.new(HYPERLINK_R, hyperlink.href, :target_mode => :External) - end + child_objects.each { |child| r << child.relationship } r end diff --git a/lib/axlsx/drawing/graphic_frame.rb b/lib/axlsx/drawing/graphic_frame.rb index a829e5ea..888cde76 100644 --- a/lib/axlsx/drawing/graphic_frame.rb +++ b/lib/axlsx/drawing/graphic_frame.rb @@ -24,7 +24,16 @@ module Axlsx # The relationship id for this graphic # @return [String] + # + # NOTE: Discontinued. This should not be part of GraphicFrame. + # The drawing object maintains relationships and needs to be queried to determine the relationship id of any given graphic data child object. + # + # @example + # <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/chart"> + # <c:chart xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" r:id="rId2"/> + # </a:graphicData> def rId + warn('axlsx::DEPRECIATED: GraphicFrame#rId has been depreciated. relationship id is determed by the drawing object') "rId#{@anchor.index+1}" end @@ -44,7 +53,7 @@ module Axlsx str << '</xdr:xfrm>' str << '<a:graphic>' str << '<a:graphicData uri="' << XML_NS_C << '">' - str << '<c:chart xmlns:c="' << XML_NS_C << '" xmlns:r="' << XML_NS_R << '" r:id="' << rId.to_s << '"/>' + str << '<c:chart xmlns:c="' << XML_NS_C << '" xmlns:r="' << XML_NS_R << '" r:id="rId' << (@anchor.drawing.index_of(@chart)+1).to_s << '"/>' str << '</a:graphicData>' str << '</a:graphic>' str << '</xdr:graphicFrame>' diff --git a/lib/axlsx/drawing/hyperlink.rb b/lib/axlsx/drawing/hyperlink.rb index aa763e1f..e886f766 100644 --- a/lib/axlsx/drawing/hyperlink.rb +++ b/lib/axlsx/drawing/hyperlink.rb @@ -83,6 +83,11 @@ module Axlsx # @return [String] attr_accessor :tooltip + # Returns a relationship object for this hyperlink + # @return [Axlsx::Relationship] + def relationship + Relationship.new(HYPERLINK_R, href, :target_mode => :External) + end # Serializes the object # @param [String] str # @return [String] diff --git a/lib/axlsx/drawing/pic.rb b/lib/axlsx/drawing/pic.rb index 9375f20c..8ed8d042 100644 --- a/lib/axlsx/drawing/pic.rb +++ b/lib/axlsx/drawing/pic.rb @@ -107,6 +107,12 @@ module Axlsx @anchor.drawing.charts.size + @anchor.drawing.images.index(self) + 1 end + # Returns a relationship object for this object + # @return Axlsx::Relationship + def relationship + Relationship.new(IMAGE_R, "../#{pn}") + end + # providing access to the anchor's width attribute # @param [Integer] v # @see OneCellAnchor.width |
