blob: 701456f3fcc3134f8aea1a1602382eea4196195c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
module Axlsx
# A VmlShape is used to position and render a comment.
class VmlShape
include Axlsx::OptionsParser
# Creates a new VmlShape
# @option options [Integer|String] left_column
# @option options [Integer|String] left_offset
# @option options [Integer|String] top_row
# @option options [Integer|String] top_offset
# @option options [Integer|String] right_column
# @option options [Integer|String] right_offset
# @option options [Integer|String] bottom_row
# @option options [Integer|String] bottom_offset
def initialize(options={})
@row = @column = @left_column = @top_row = @right_column = @bottom_row = 0
@left_offset = 15
@top_offset = 2
@right_offset = 50
@bottom_offset = 5
@id = (0...8).map{65.+(rand(25)).chr}.join
parse_options options
yield self if block_given?
end
# The row anchor position for this shape determined by the comment's ref value
# @return [Integer]
attr_reader :row
# The column anchor position for this shape determined by the comment's ref value
# @return [Integer]
attr_reader :column
# The left column for this shape
# @return [Integer]
attr_reader :left_column
# The left offset for this shape
# @return [Integer]
attr_reader :left_offset
# The top row for this shape
# @return [Integer]
attr_reader :top_row
# The top offset for this shape
# @return [Integer]
attr_reader :top_offset
# The right column for this shape
# @return [Integer]
attr_reader :right_column
# The right offset for this shape
# @return [Integer]
attr_reader :right_offset
# The botttom row for this shape
# @return [Integer]
attr_reader :bottom_row
# The bottom offset for this shape
# @return [Integer]
attr_reader :bottom_offset
# @see column
def column=(v); Axlsx::validate_integerish(v); @column = v.to_i end
# @see row
def row=(v); Axlsx::validate_integerish(v); @row = v.to_i end
# @see left_column
def left_column=(v); Axlsx::validate_integerish(v); @left_column = v.to_i end
# @see left_offset
def left_offset=(v); Axlsx::validate_integerish(v); @left_offset = v.to_i end
# @see top_row
def top_row=(v); Axlsx::validate_integerish(v); @top_row = v.to_i end
# @see top_offset
def top_offset=(v); Axlsx::validate_integerish(v); @top_offset = v.to_i end
# @see right_column
def right_column=(v); Axlsx::validate_integerish(v); @right_column = v.to_i end
# @see right_offset
def right_offset=(v); Axlsx::validate_integerish(v); @right_offset = v.to_i end
# @see bottom_row
def bottom_row=(v); Axlsx::validate_integerish(v); @bottom_row = v.to_i end
# @see bottom_offset
def bottom_offset=(v); Axlsx::validate_integerish(v); @bottom_offset = v.to_i end
# serialize the shape to a string
# @param [String] str
# @return [String]
def to_xml_string(str ='')
str << <<SHAME_ON_YOU
<v:shape id="#{@id}" type="#_x0000_t202" fillcolor="#ffffa1 [80]" o:insetmode="auto">
<v:fill color2="#ffffa1 [80]"/>
<v:shadow on="t" obscured="t"/>
<v:path o:connecttype="none"/>
<v:textbox style='mso-fit-text-with-word-wrap:t'>
<div style='text-align:left'></div>
</v:textbox>
<x:ClientData ObjectType="Note">
<x:MoveWithCells/>
<x:SizeWithCells/>
<x:Anchor>#{left_column}, #{left_offset}, #{top_row}, #{top_offset}, #{right_column}, #{right_offset}, #{bottom_row}, #{bottom_offset}</x:Anchor>
<x:AutoFill>False</x:AutoFill>
<x:Row>#{row}</x:Row>
<x:Column>#{column}</x:Column>
<x:Visible/>
</x:ClientData>
</v:shape>
SHAME_ON_YOU
end
end
end
|