summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorRandy Morgan <[email protected]>2013-01-15 21:53:47 +0900
committerRandy Morgan <[email protected]>2013-01-15 21:53:47 +0900
commit40c85619885de848447479b99c08e5feaea89a90 (patch)
tree61cebfceb3ac1d404e4893b376f9f3a5d72e3bd0 /lib
parente14682fb484cd72ba5f479cc1f7d46a7a9fd6007 (diff)
downloadcaxlsx-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.rb6
-rw-r--r--lib/axlsx/drawing/drawing.rb17
-rw-r--r--lib/axlsx/drawing/graphic_frame.rb11
-rw-r--r--lib/axlsx/drawing/hyperlink.rb5
-rw-r--r--lib/axlsx/drawing/pic.rb6
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