axlsx 1.0.7 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
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