axlsx 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. data/README.md +21 -3
  2. data/doc/Axlsx.html +150 -6
  3. data/doc/Axlsx/App.html +1 -1
  4. data/doc/Axlsx/Axis.html +1 -1
  5. data/doc/Axlsx/Bar3DChart.html +1 -1
  6. data/doc/Axlsx/BarSeries.html +1 -1
  7. data/doc/Axlsx/Border.html +1 -1
  8. data/doc/Axlsx/BorderPr.html +1 -1
  9. data/doc/Axlsx/CatAxis.html +1 -1
  10. data/doc/Axlsx/CatAxisData.html +7 -5
  11. data/doc/Axlsx/Cell.html +1 -1
  12. data/doc/Axlsx/CellAlignment.html +1 -1
  13. data/doc/Axlsx/CellProtection.html +1 -1
  14. data/doc/Axlsx/CellStyle.html +1 -1
  15. data/doc/Axlsx/Chart.html +16 -16
  16. data/doc/Axlsx/Color.html +1 -1
  17. data/doc/Axlsx/ContentType.html +1 -1
  18. data/doc/Axlsx/Core.html +1 -1
  19. data/doc/Axlsx/DataTypeValidator.html +1 -1
  20. data/doc/Axlsx/Default.html +1 -1
  21. data/doc/Axlsx/Drawing.html +243 -65
  22. data/doc/Axlsx/Fill.html +1 -1
  23. data/doc/Axlsx/Font.html +1 -1
  24. data/doc/Axlsx/GradientFill.html +1 -1
  25. data/doc/Axlsx/GradientStop.html +1 -1
  26. data/doc/Axlsx/GraphicFrame.html +21 -21
  27. data/doc/Axlsx/Line3DChart.html +1 -1
  28. data/doc/Axlsx/LineSeries.html +6 -8
  29. data/doc/Axlsx/Marker.html +1 -1
  30. data/doc/Axlsx/NumFmt.html +1 -1
  31. data/doc/Axlsx/OneCellAnchor.html +988 -0
  32. data/doc/Axlsx/Override.html +1 -1
  33. data/doc/Axlsx/Package.html +127 -75
  34. data/doc/Axlsx/PatternFill.html +1 -1
  35. data/doc/Axlsx/Pic.html +1532 -0
  36. data/doc/Axlsx/Pie3DChart.html +5 -7
  37. data/doc/Axlsx/PieSeries.html +1 -1
  38. data/doc/Axlsx/RegexValidator.html +1 -1
  39. data/doc/Axlsx/Relationship.html +6 -6
  40. data/doc/Axlsx/Relationships.html +1 -1
  41. data/doc/Axlsx/RestrictionValidator.html +1 -1
  42. data/doc/Axlsx/Row.html +1 -1
  43. data/doc/Axlsx/Scaling.html +1 -1
  44. data/doc/Axlsx/SerAxis.html +1 -1
  45. data/doc/Axlsx/Series.html +1 -1
  46. data/doc/Axlsx/SeriesTitle.html +1 -1
  47. data/doc/Axlsx/SimpleTypedList.html +1 -1
  48. data/doc/Axlsx/Styles.html +1 -1
  49. data/doc/Axlsx/TableStyle.html +1 -1
  50. data/doc/Axlsx/TableStyleElement.html +1 -1
  51. data/doc/Axlsx/TableStyles.html +1 -1
  52. data/doc/Axlsx/Title.html +1 -1
  53. data/doc/Axlsx/TwoCellAnchor.html +165 -61
  54. data/doc/Axlsx/ValAxis.html +1 -1
  55. data/doc/Axlsx/ValAxisData.html +1 -1
  56. data/doc/Axlsx/View3D.html +1 -1
  57. data/doc/Axlsx/Workbook.html +151 -47
  58. data/doc/Axlsx/Worksheet.html +172 -35
  59. data/doc/Axlsx/Xf.html +1 -1
  60. data/doc/_index.html +15 -1
  61. data/doc/class_list.html +1 -1
  62. data/doc/file.README.html +29 -4
  63. data/doc/index.html +29 -4
  64. data/doc/method_list.html +571 -363
  65. data/doc/top-level-namespace.html +1 -1
  66. data/examples/example.rb +13 -0
  67. data/examples/image1.gif +0 -0
  68. data/examples/image1.jpeg +0 -0
  69. data/examples/image1.jpg +0 -0
  70. data/examples/image1.png +0 -0
  71. data/lib/axlsx/drawing/bar_series.rb +0 -1
  72. data/lib/axlsx/drawing/cat_axis_data.rb +1 -0
  73. data/lib/axlsx/drawing/chart.rb +0 -1
  74. data/lib/axlsx/drawing/drawing.rb +31 -7
  75. data/lib/axlsx/drawing/graphic_frame.rb +0 -2
  76. data/lib/axlsx/drawing/line_series.rb +0 -1
  77. data/lib/axlsx/drawing/one_cell_anchor.rb +89 -0
  78. data/lib/axlsx/drawing/pic.rb +158 -0
  79. data/lib/axlsx/drawing/pie_3D_chart.rb +0 -1
  80. data/lib/axlsx/drawing/two_cell_anchor.rb +17 -4
  81. data/lib/axlsx/package.rb +31 -5
  82. data/lib/axlsx/rels/relationship.rb +1 -2
  83. data/lib/axlsx/util/constants.rb +24 -0
  84. data/lib/axlsx/util/validators.rb +2 -2
  85. data/lib/axlsx/version.rb +1 -1
  86. data/lib/axlsx/workbook/workbook.rb +8 -0
  87. data/lib/axlsx/workbook/worksheet/worksheet.rb +10 -1
  88. data/test/drawing/tc_drawing.rb +10 -1
  89. data/test/drawing/tc_one_cell_anchor.rb +67 -0
  90. data/test/drawing/tc_pic.rb +71 -0
  91. data/test/tc_package.rb +0 -2
  92. metadata +13 -118
  93. data/examples/#example.rb# +0 -87
  94. data/examples/example.rb~ +0 -79
  95. data/examples/multi_chart.xlsx +0 -0
  96. data/lib/axlsx.rb~ +0 -67
  97. data/lib/axlsx/content_type/content_type.rb~ +0 -20
  98. data/lib/axlsx/content_type/default.rb~ +0 -32
  99. data/lib/axlsx/content_type/override.rb~ +0 -30
  100. data/lib/axlsx/doc_props/app.rb~ +0 -127
  101. data/lib/axlsx/doc_props/core.rb~ +0 -25
  102. data/lib/axlsx/drawing/#bar_series.rb# +0 -62
  103. data/lib/axlsx/drawing/axis.rb~ +0 -0
  104. data/lib/axlsx/drawing/bar_3D_chart.rb~ +0 -64
  105. data/lib/axlsx/drawing/bar_series.rb~ +0 -92
  106. data/lib/axlsx/drawing/cat_axis.rb~ +0 -32
  107. data/lib/axlsx/drawing/cat_axis_data.rb~ +0 -28
  108. data/lib/axlsx/drawing/chart.rb~ +0 -0
  109. data/lib/axlsx/drawing/drawing.rb~ +0 -102
  110. data/lib/axlsx/drawing/graphic_frame.rb~ +0 -40
  111. data/lib/axlsx/drawing/line_3D_chart.rb~ +0 -138
  112. data/lib/axlsx/drawing/line_series.rb~ +0 -91
  113. data/lib/axlsx/drawing/marker.rb~ +0 -50
  114. data/lib/axlsx/drawing/pie_3D_chart.rb~ +0 -132
  115. data/lib/axlsx/drawing/pie_series.rb~ +0 -0
  116. data/lib/axlsx/drawing/scaling.rb~ +0 -0
  117. data/lib/axlsx/drawing/ser_axis.rb~ +0 -48
  118. data/lib/axlsx/drawing/series.rb~ +0 -114
  119. data/lib/axlsx/drawing/series_title.rb~ +0 -18
  120. data/lib/axlsx/drawing/title.rb~ +0 -69
  121. data/lib/axlsx/drawing/two_cell_anchor.rb~ +0 -70
  122. data/lib/axlsx/drawing/val_axis.rb~ +0 -34
  123. data/lib/axlsx/drawing/val_axis_data.rb~ +0 -29
  124. data/lib/axlsx/drawing/view_3D.rb~ +0 -21
  125. data/lib/axlsx/package.rb~ +0 -181
  126. data/lib/axlsx/rels/relationship.rb~ +0 -18
  127. data/lib/axlsx/rels/relationships.rb~ +0 -23
  128. data/lib/axlsx/stylesheet/border.rb~ +0 -24
  129. data/lib/axlsx/stylesheet/border_pr.rb~ +0 -64
  130. data/lib/axlsx/stylesheet/cell_alignment.rb~ +0 -93
  131. data/lib/axlsx/stylesheet/cell_protection.rb~ +0 -16
  132. data/lib/axlsx/stylesheet/cell_style.rb~ +0 -61
  133. data/lib/axlsx/stylesheet/color.rb~ +0 -56
  134. data/lib/axlsx/stylesheet/fill.rb~ +0 -31
  135. data/lib/axlsx/stylesheet/font.rb~ +0 -33
  136. data/lib/axlsx/stylesheet/gradient_fill.rb~ +0 -70
  137. data/lib/axlsx/stylesheet/gradient_stop.rb~ +0 -15
  138. data/lib/axlsx/stylesheet/num_fmt.rb~ +0 -60
  139. data/lib/axlsx/stylesheet/pattern_fill.rb~ +0 -63
  140. data/lib/axlsx/stylesheet/styles.rb~ +0 -279
  141. data/lib/axlsx/stylesheet/table_style.rb~ +0 -43
  142. data/lib/axlsx/stylesheet/table_style_element.rb~ +0 -66
  143. data/lib/axlsx/stylesheet/table_styles.rb~ +0 -36
  144. data/lib/axlsx/stylesheet/xf.rb~ +0 -37
  145. data/lib/axlsx/util/constants.rb~ +0 -187
  146. data/lib/axlsx/util/monkey_patches_for_true_zip_stream.rb~ +0 -61
  147. data/lib/axlsx/util/simple_typed_list.rb~ +0 -79
  148. data/lib/axlsx/util/validators.rb~ +0 -132
  149. data/lib/axlsx/util/xml_escape.rb~ +0 -6
  150. data/lib/axlsx/workbook/workbook.rb~ +0 -130
  151. data/lib/axlsx/workbook/worksheet/cell.rb~ +0 -185
  152. data/lib/axlsx/workbook/worksheet/row.rb~ +0 -92
  153. data/lib/axlsx/workbook/worksheet/worksheet.rb~ +0 -194
  154. data/test/content_type/tc_content_type.rb~ +0 -81
  155. data/test/content_type/tc_default.rb~ +0 -40
  156. data/test/content_type/tc_override.rb~ +0 -40
  157. data/test/doc_props/tc_app.rb~ +0 -19
  158. data/test/drawing/tc_axis.rb~ +0 -0
  159. data/test/drawing/tc_bar_3D_chart.rb~ +0 -66
  160. data/test/drawing/tc_bar_series.rb~ +0 -31
  161. data/test/drawing/tc_cat_axis.rb~ +0 -39
  162. data/test/drawing/tc_cat_axis_data.rb~ +0 -32
  163. data/test/drawing/tc_chart.rb~ +0 -59
  164. data/test/drawing/tc_graphic_frame.rb~ +0 -21
  165. data/test/drawing/tc_line_3d_chart.rb~ +0 -48
  166. data/test/drawing/tc_line_series.rb~ +0 -34
  167. data/test/drawing/tc_marker.rb~ +0 -26
  168. data/test/drawing/tc_pie_3D_chart.rb~ +0 -33
  169. data/test/drawing/tc_pie_series.rb~ +0 -26
  170. data/test/drawing/tc_scaling.rb~ +0 -45
  171. data/test/drawing/tc_ser_axis.rb~ +0 -20
  172. data/test/drawing/tc_series.rb~ +0 -31
  173. data/test/drawing/tc_series_title.rb~ +0 -34
  174. data/test/drawing/tc_title.rb~ +0 -34
  175. data/test/drawing/tc_two_cell_anchor.rb~ +0 -37
  176. data/test/drawing/tc_val_axis.rb~ +0 -32
  177. data/test/drawing/tc_val_axis_data.rb~ +0 -18
  178. data/test/drawing/tc_view_3D.rb~ +0 -37
  179. data/test/rels/tc_relationship.rb~ +0 -39
  180. data/test/rels/tc_relationships.rb~ +0 -37
  181. data/test/stylesheet/tc_border.rb~ +0 -31
  182. data/test/stylesheet/tc_border_pr.rb~ +0 -31
  183. data/test/stylesheet/tc_cell_alignment.rb~ +0 -38
  184. data/test/stylesheet/tc_cell_protection.rb~ +0 -77
  185. data/test/stylesheet/tc_cell_style.rb~ +0 -30
  186. data/test/stylesheet/tc_color.rb~ +0 -38
  187. data/test/stylesheet/tc_fill.rb~ +0 -19
  188. data/test/stylesheet/tc_font.rb~ +0 -19
  189. data/test/stylesheet/tc_gradient_fill.rb~ +0 -114
  190. data/test/stylesheet/tc_gradient_stop.rb~ +0 -65
  191. data/test/stylesheet/tc_num_fmt.rb~ +0 -32
  192. data/test/stylesheet/tc_pattern_fill.rb~ +0 -31
  193. data/test/stylesheet/tc_table_style.rb~ +0 -38
  194. data/test/stylesheet/tc_table_style_element.rb~ +0 -37
  195. data/test/stylesheet/tc_table_styles.rb~ +0 -37
  196. data/test/stylesheet/tc_xf.rb~ +0 -30
  197. data/test/tc_app.rb~ +0 -19
  198. data/test/tc_border_pr.rb~ +0 -21
  199. data/test/tc_package.rb~ +0 -64
  200. data/test/tc_pie_3D_chart.rb~ +0 -66
  201. data/test/tc_relationships.rb~ +0 -37
  202. data/test/tc_series.rb~ +0 -31
  203. data/test/tc_styles.rb~ +0 -64
  204. data/test/tc_validators.rb~ +0 -77
  205. data/test/tc_worksheet.rb~ +0 -85
  206. data/test/workbook/worksheet/tc_row.rb~ +0 -30
  207. data/test/workbook/worksheet/tc_worksheet.rb~ +0 -85
@@ -94,7 +94,7 @@
94
94
  </div>
95
95
 
96
96
  <div id="footer">
97
- Generated on Wed Nov 23 12:30:35 2011 by
97
+ Generated on Wed Nov 23 21:48:07 2011 by
98
98
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
99
99
  0.7.3 (ruby-1.8.7).
100
100
  </div>
@@ -82,5 +82,18 @@
82
82
  chart.add_series :data=>sheet.rows.first.cells[(1..-1)], :title=> sheet.rows.first.cells.first
83
83
  chart.add_series :data=>sheet.rows.last.cells[(1..-1)], :title=> sheet.rows.last.cells.first
84
84
  end
85
+
85
86
  end
86
87
  p.serialize("example6.xlsx")
88
+
89
+ #Add an Image
90
+
91
+ p = Axlsx::Package.new
92
+ p.workbook.add_worksheet do |sheet|
93
+ sheet.add_image(:image_src => (File.dirname(__FILE__) + "/image1.png")) do |image|
94
+ image.width=720
95
+ image.height=666
96
+ image.start_at 2, 2
97
+ end
98
+ end
99
+ p.serialize("example7.xlsx")
Binary file
Binary file
Binary file
Binary file
@@ -51,7 +51,6 @@ module Axlsx
51
51
 
52
52
  private
53
53
 
54
-
55
54
  # assigns the data for this series
56
55
  def data=(v) DataTypeValidator.validate "Series.data", [SimpleTypedList], v; @data = v; end
57
56
 
@@ -7,6 +7,7 @@ module Axlsx
7
7
  def initialize(data=[])
8
8
  super Object
9
9
  @list.concat data if data.is_a?(Array)
10
+ data.each { |i| @list << i } if data.is_a?(SimpleTypedList)
10
11
  end
11
12
 
12
13
  # Serializes the category axis data
@@ -90,7 +90,6 @@ module Axlsx
90
90
 
91
91
  # backwards compatibility to allow chart.to and chart.from access to anchor markers
92
92
  # @note This will be disconinued in version 2.0.0. please use the start_at method
93
- #
94
93
  def from
95
94
  @graphic_frame.anchor.from
96
95
  end
@@ -16,6 +16,8 @@ module Axlsx
16
16
  require 'axlsx/drawing/val_axis_data.rb'
17
17
 
18
18
  require 'axlsx/drawing/marker.rb'
19
+
20
+ require 'axlsx/drawing/one_cell_anchor.rb'
19
21
  require 'axlsx/drawing/two_cell_anchor.rb'
20
22
  require 'axlsx/drawing/graphic_frame.rb'
21
23
 
@@ -25,6 +27,9 @@ module Axlsx
25
27
  require 'axlsx/drawing/bar_3D_chart.rb'
26
28
  require 'axlsx/drawing/line_3D_chart.rb'
27
29
 
30
+
31
+ require 'axlsx/drawing/pic.rb'
32
+
28
33
  # A Drawing is a canvas for charts. Each worksheet has a single drawing that manages anchors.
29
34
  # The anchors reference the charts via graphical frames. This is not a trivial relationship so please do follow the advice in the note.
30
35
  # @note The recommended way to manage drawings is to use the Worksheet.add_chart method.
@@ -46,6 +51,10 @@ module Axlsx
46
51
  # @return [Array]
47
52
  attr_reader :charts
48
53
 
54
+ # An array of image objects that are associated with this drawing's anchors
55
+ # @return [Array]
56
+ attr_reader :images
57
+
49
58
  # The index of this drawing in the owning workbooks's drawings collection.
50
59
  # @return [Integer]
51
60
  attr_reader :index
@@ -72,20 +81,33 @@ module Axlsx
72
81
  DataTypeValidator.validate "Drawing.worksheet", Worksheet, worksheet
73
82
  @worksheet = worksheet
74
83
  @worksheet.workbook.drawings << self
75
- @anchors = SimpleTypedList.new TwoCellAnchor
84
+ @anchors = SimpleTypedList.new [TwoCellAnchor, OneCellAnchor]
85
+ end
86
+
87
+ # Adds an image to the chart
88
+ # @note The recommended way to manage images is to use Worksheet.add_image. Please refer to that method for documentation.
89
+ # @see Worksheet#add_image
90
+ def add_image(options={})
91
+ OneCellAnchor.new(self, options)
92
+ @anchors.last.object
76
93
  end
77
-
78
94
 
79
95
  # Adds a chart to the drawing.
80
96
  # @note The recommended way to manage charts is to use Worksheet.add_chart. Please refer to that method for documentation.
81
97
  # @see Worksheet#add_chart
82
98
  def add_chart(chart_type, options={})
83
- TwoCellAnchor.new(self, chart_type, options)
84
- @anchors.last.graphic_frame.chart
99
+ TwoCellAnchor.new(self, options)
100
+ @anchors.last.add_chart(chart_type, options)
85
101
  end
86
102
 
87
103
  def charts
88
- @anchors.map { |a| a.graphic_frame.chart }
104
+ charts = @anchors.select { |a| a.object.is_a?(GraphicFrame) }
105
+ charts.map { |a| a.object.chart }
106
+ end
107
+
108
+ def images
109
+ images = @anchors.select { |a| a.object.is_a?(Pic) }
110
+ images.map { |a| a.object }
89
111
  end
90
112
 
91
113
  def index
@@ -106,10 +128,12 @@ module Axlsx
106
128
 
107
129
  def relationships
108
130
  r = Relationships.new
109
- @anchors.each do |anchor|
110
- chart = anchor.graphic_frame.chart
131
+ charts.each do |chart|
111
132
  r << Relationship.new(CHART_R, "../#{chart.pn}")
112
133
  end
134
+ images.each do |image|
135
+ r << Relationship.new(IMAGE_R, "../#{image.pn}")
136
+ end
113
137
  r
114
138
  end
115
139
 
@@ -4,8 +4,6 @@ module Axlsx
4
4
  # @see Worksheet#add_chart
5
5
  class GraphicFrame
6
6
 
7
- #TODO add in support for other graphical objects, primarily images.
8
-
9
7
  # A reference to the chart object associated with this frame
10
8
  # @return [Chart]
11
9
  attr_reader :chart
@@ -26,7 +26,6 @@ module Axlsx
26
26
  # Serializes the series
27
27
  # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
28
28
  # @return [String]
29
- # TODO create series_cat and series_val classes as this serialization is duplicated
30
29
  def to_xml(xml)
31
30
  super(xml) do |xml|
32
31
  @labels.to_xml(xml) unless @labels.nil?
@@ -0,0 +1,89 @@
1
+ module Axlsx
2
+ # This class details a single cell anchor for drawings.
3
+ # @note The recommended way to manage drawings, images and charts is Worksheet#add_chart or Worksheet#add_image.
4
+ # @see Worksheet#add_chart
5
+ # @see Worksheet#add_image
6
+ class OneCellAnchor
7
+
8
+ # A marker that defines the from cell anchor. The default from column and row are 0 and 0 respectively
9
+ # @return [Marker]
10
+ attr_reader :from
11
+
12
+ # The object this anchor hosts
13
+ # @return [Pic]
14
+ attr_reader :object
15
+
16
+ # The drawing that holds this anchor
17
+ # @return [Drawing]
18
+ attr_reader :drawing
19
+
20
+ # The index of this anchor in the drawing
21
+ # @return [Integer]
22
+ attr_reader :index
23
+
24
+
25
+ # the width of the graphic object in pixels.
26
+ # this is converted to EMU at a 92 ppi resolution
27
+ # @return [Integer]
28
+ attr_accessor :width
29
+
30
+ # the height of the graphic object in pixels
31
+ # this is converted to EMU at a 92 ppi resolution
32
+ # @return [Integer]
33
+ attr_accessor :height
34
+
35
+
36
+ # Creates a new OneCellAnchor object and an Pic associated with it.
37
+ # @param [Drawing] drawing
38
+ # @option options [Array] start_at the col, row to start at
39
+ # @option options [Integer] width
40
+ # @option options [Integer] height
41
+ # @option options [String] image_src the file location of the image you will render
42
+ # @option options [String] name the name attribute for the rendered image
43
+ # @option options [String] descr the description of the image rendered
44
+ def initialize(drawing, options={})
45
+ @drawing = drawing
46
+ @width = 0
47
+ @height = 0
48
+ drawing.anchors << self
49
+ @from = Marker.new
50
+ options.each do |o|
51
+ self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
52
+ end
53
+ @object = Pic.new(self, options)
54
+ end
55
+
56
+ def height=(v) Axlsx::validate_unsigned_int(v); @height = v; end
57
+ def width=(v) Axlsx::validate_unsigned_int(v); @width = v; end
58
+
59
+ def index
60
+ @drawing.anchors.index(self)
61
+ end
62
+
63
+ # Serializes the anchor
64
+ # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
65
+ # @return [String]
66
+ def to_xml(xml)
67
+ xml.send('xdr:oneCellAnchor') {
68
+ xml.send('xdr:from') {
69
+ from.to_xml(xml)
70
+ }
71
+ xml.send('xdr:ext', ext)
72
+ @object.to_xml(xml)
73
+ xml.send('xdr:clientData')
74
+ }
75
+ end
76
+
77
+ private
78
+
79
+ # converts the pixel width and height to EMU units and returns a hash of
80
+ # !{:cx=>[Integer], :cy=>[Integer]
81
+ # @return [Hash]
82
+ def ext
83
+ cy = @height * 914400 / 96
84
+ cx = @width * 914400 / 96
85
+ {:cy=>cy, :cx=>cx}
86
+ end
87
+
88
+ end
89
+ end
@@ -0,0 +1,158 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Axlsx
3
+ # a Pic object represents an image in your worksheet
4
+ # Worksheet#add_image is the recommended way to manage images in your sheets
5
+ # @see Worksheet#add_image
6
+ class Pic
7
+
8
+ # allowed file extenstions
9
+ ALLOWED_EXTENSIONS = ['gif', 'jpeg', 'png', 'jpg']
10
+
11
+ # The name to use for this picture
12
+ # @return [String]
13
+ attr_accessor :name
14
+
15
+ # providing access to the anchor's width attribute
16
+ # @param [Integer] v
17
+ # @see OneCellAnchor.width
18
+ attr_accessor :width
19
+
20
+ # providing access to update the anchor's height attribute
21
+ # @param [Integer] v
22
+ # @see OneCellAnchor.width
23
+ attr_accessor :height
24
+
25
+ # A description of the picture
26
+ # @return [String]
27
+ attr_accessor :descr
28
+
29
+ # The path to the image you want to include
30
+ # Only local images are supported at this time and only jpg support
31
+ # @return [String]
32
+ attr_accessor :image_src
33
+
34
+ # The anchor for this image
35
+ # @return [OneCellAnchor]
36
+ attr_reader :anchor
37
+
38
+ # returns the extension of image_src without the preceeding '.'
39
+ # @return [String]
40
+ attr_reader :extname
41
+
42
+ # The file name of image_src without any path information
43
+ # @return [String]
44
+ attr_reader :file_name
45
+
46
+ # The part name for this image used in serialization and relationship building
47
+ # @return [String]
48
+ attr_reader :pn
49
+
50
+ # The index of this image in the workbooks images collections
51
+ # @return [Index]
52
+ attr_reader :index
53
+
54
+ # The name of the image file, sans directory info
55
+ # @return [String]
56
+ attr_reader :file_name
57
+
58
+ # Creates a new Pic(ture) object
59
+ # @param [Anchor] anchor the anchor that holds this image
60
+ # @option options [String] name
61
+ # @option options [String] descr
62
+ # @option options [String] image_src
63
+ # @option options [Array] start_at
64
+ # @option options [Intger] width
65
+ # @option options [Intger] height
66
+ def initialize(anchor, options={})
67
+ @anchor = anchor
68
+ @anchor.drawing.worksheet.workbook.images << self
69
+ options.each do |o|
70
+ self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
71
+ end
72
+ start_at *options[:start_at] if options[:start_at]
73
+ yield self if block_given?
74
+ end
75
+
76
+ def image_src=(v)
77
+ Axlsx::validate_string(v)
78
+ RestrictionValidator.validate 'Pic.image_src', ALLOWED_EXTENSIONS, File.extname(v).delete('.')
79
+ raise ArgumentError, "File does not exist" unless File.exist?(v)
80
+ @image_src = v
81
+ end
82
+
83
+ def name=(v) Axlsx::validate_string(v); @name = v; end
84
+ def descr=(v) Axlsx::validate_string(v); @descr = v; end
85
+
86
+ def file_name
87
+ File.basename(image_src) unless image_src.nil?
88
+ end
89
+
90
+ def extname
91
+ File.extname(image_src).delete('.') unless image_src.nil?
92
+ end
93
+
94
+ def index
95
+ @anchor.drawing.worksheet.workbook.images.index(self)
96
+ end
97
+
98
+ def pn
99
+ "#{IMAGE_PN % [(index+1), extname]}"
100
+ end
101
+
102
+ def width
103
+ @anchor.width
104
+ end
105
+
106
+ def width=(v)
107
+ @anchor.width = v
108
+ end
109
+
110
+ def height=(v)
111
+ @anchor.height = v
112
+ end
113
+
114
+ def height
115
+ @anchor.height
116
+ end
117
+
118
+ # This is a short cut method to set the start anchor position
119
+ # If you need finer granularity in positioning use
120
+ # graphic_frame.anchor.from.colOff / rowOff
121
+ # @param [Integer] x The column
122
+ # @param [Integer] y The row
123
+ # @return [Marker]
124
+ def start_at(x, y)
125
+ @anchor.from.col = x
126
+ @anchor.from.row = y
127
+ end
128
+
129
+ # Serializes the picture
130
+ # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
131
+ # @return [String]
132
+ def to_xml(xml)
133
+ xml.send('xdr:pic') {
134
+ xml.send('xdr:nvPicPr') {
135
+ xml.send('xdr:cNvPr', :id=>"2", :name=>name, :descr=>descr)
136
+ xml.send('xdr:cNvPicPr') {
137
+ xml.send('a:picLocks', :noChangeAspect=>1)
138
+ }
139
+ }
140
+ xml.send('xdr:blipFill') {
141
+ xml.send('a:blip', :'xmlns:r' => XML_NS_R, :'r:embed'=>"rId1")
142
+ xml.send('a:stretch') {
143
+ xml.send('a:fillRect')
144
+ }
145
+ }
146
+ xml.send('xdr:spPr') {
147
+ xml.send('a:xfrm') {
148
+ xml.send('a:off', :x=>0, :y=>0)
149
+ xml.send('a:ext', :cx=>2336800, :cy=>2161540)
150
+ }
151
+ xml.send('a:prstGeom', :prst=>:rect) {
152
+ xml.send('a:avLst')
153
+ }
154
+ }
155
+ }
156
+ end
157
+ end
158
+ end
@@ -25,7 +25,6 @@ module Axlsx
25
25
  super(frame, options)
26
26
  @series_type = PieSeries
27
27
  @view3D = View3D.new({:rotX=>30, :perspective=>30}.merge(options))
28
-
29
28
  end
30
29
 
31
30
  # Serializes the pie chart
@@ -12,8 +12,13 @@ module Axlsx
12
12
  attr_reader :to
13
13
 
14
14
  # The frame for your chart
15
+ # @note this will be discontinued in version 2.0 please use object
15
16
  # @return [GraphicFrame]
16
- attr_reader :graphic_frame
17
+ # attr_reader :graphic_frame
18
+
19
+ # The object this anchor hosts
20
+ # @return [Pic, GraphicFrame]
21
+ attr_reader :object
17
22
 
18
23
  # The drawing that holds this anchor
19
24
  # @return [Drawing]
@@ -27,15 +32,23 @@ module Axlsx
27
32
  # graphic_frame's chart. That means that you can do stuff like
28
33
  # c = worksheet.add_chart Axlsx::Chart
29
34
  # c.start_at 5, 9
35
+ # @note the chart_type parameter will be replaced with object in v. 2.0.0
30
36
  # @param [Drawing] drawing
31
37
  # @param [Class] chart_type This is passed to the graphic frame for instantiation. must be Chart or a subclass of Chart
38
+ # @param object The object this anchor holds.
32
39
  # @option options [Array] start_at the col, row to start at
33
40
  # @option options [Array] end_at the col, row to end at
34
- def initialize(drawing, chart_type, options)
41
+ def initialize(drawing, options={})
35
42
  @drawing = drawing
36
43
  drawing.anchors << self
37
44
  @from, @to = Marker.new, Marker.new(:col => 5, :row=>10)
38
- @graphic_frame = GraphicFrame.new(self, chart_type, options)
45
+ end
46
+
47
+ # Creates a graphic frame and chart object associated with this anchor
48
+ # @return [Chart]
49
+ def add_chart(chart_type, options)
50
+ @object = GraphicFrame.new(self, chart_type, options)
51
+ @object.chart
39
52
  end
40
53
 
41
54
  def index
@@ -53,7 +66,7 @@ module Axlsx
53
66
  xml.send('xdr:to') {
54
67
  to.to_xml(xml)
55
68
  }
56
- @graphic_frame.to_xml(xml)
69
+ @object.to_xml(xml)
57
70
  xml.send('xdr:clientData')
58
71
  }
59
72
  end