lib/axlsx/drawing/pic.rb in axlsx-1.0.15 vs lib/axlsx/drawing/pic.rb in axlsx-1.0.16

- old
+ new

@@ -45,11 +45,28 @@ end start_at(*options[:start_at]) if options[:start_at] yield self if block_given? @picture_locking = PictureLocking.new(options) end + + attr_reader :hyperlink + # sets or updates a hyperlink for this image. + # @param [String] v The href value for the hyper link + # @option options @see Hyperlink#initialize All options available to the Hyperlink class apply - however href will be overridden with the v parameter value. + def hyperlink=(v, options={}) + options[:href] = v + if @hyperlink.is_a?(Hyperlink) + options.each do |o| + @hyperlink.send("#{o[0]}=", o[1]) if @hyperlink.respond_to? "#{o[0]}=" + end + else + @hyperlink = Hyperlink.new(self, options) + end + @hyperlink + end + def image_src=(v) Axlsx::validate_string(v) RestrictionValidator.validate 'Pic.image_src', ALLOWED_EXTENSIONS, File.extname(v).delete('.') raise ArgumentError, "File does not exist" unless File.exist?(v) @image_src = v @@ -73,21 +90,26 @@ def extname File.extname(image_src).delete('.') unless image_src.nil? end # The index of this image in the workbooks images collections - # @return [Index] + # @return [Index] def index @anchor.drawing.worksheet.workbook.images.index(self) end # The part name for this image used in serialization and relationship building # @return [String] def pn "#{IMAGE_PN % [(index+1), extname]}" end + # The relational id withing the drawing's relationships + def id + @anchor.drawing.charts.size + @anchor.drawing.images.index(self) + 1 + end + # providing access to the anchor's width attribute # @param [Integer] v # @see OneCellAnchor.width def width @anchor.width @@ -125,16 +147,20 @@ # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to. # @return [String] def to_xml(xml) xml.pic { xml.nvPicPr { - xml.cNvPr :id=>"2", :name=>name, :descr=>descr + xml.cNvPr(:id=>"2", :name=>name, :descr=>descr) { + if @hyperlink.is_a?(Hyperlink) + @hyperlink.to_xml(xml) + end + } xml.cNvPicPr { picture_locking.to_xml(xml) } } xml.blipFill { - xml[:a].blip :'xmlns:r' => XML_NS_R, :'r:embed'=>"rId1" + xml[:a].blip :'xmlns:r' => XML_NS_R, :'r:embed'=>"rId#{id}" xml[:a].stretch { xml.fillRect } } xml.spPr {