1 /
55
56
57 package org.apache.poi.hssf.record;
58
59
60
61 import org.apache.poi.util.*;
62
63
70 public class TextRecord
71 extends Record
72 {
73 public final static short sid = 0x1025;
74 private byte field_1_horizontalAlignment;
75 public final static byte HORIZONTAL_ALIGNMENT_LEFT = 1;
76 public final static byte HORIZONTAL_ALIGNMENT_CENTER = 2;
77 public final static byte HORIZONTAL_ALIGNMENT_BOTTOM = 3;
78 public final static byte HORIZONTAL_ALIGNMENT_JUSTIFY = 4;
79 private byte field_2_verticalAlignment;
80 public final static byte VERTICAL_ALIGNMENT_TOP = 1;
81 public final static byte VERTICAL_ALIGNMENT_CENTER = 2;
82 public final static byte VERTICAL_ALIGNMENT_BOTTOM = 3;
83 public final static byte VERTICAL_ALIGNMENT_JUSTIFY = 4;
84 private short field_3_displayMode;
85 public final static short DISPLAY_MODE_TRANSPARENT = 1;
86 public final static short DISPLAY_MODE_OPAQUE = 2;
87 private int field_4_rgbColor;
88 private int field_5_x;
89 private int field_6_y;
90 private int field_7_width;
91 private int field_8_height;
92 private short field_9_options1;
93 private BitField autoColor = new BitField(0x1);
94 private BitField showKey = new BitField(0x2);
95 private BitField showValue = new BitField(0x4);
96 private BitField vertical = new BitField(0x8);
97 private BitField autoGeneratedText = new BitField(0x10);
98 private BitField generated = new BitField(0x20);
99 private BitField autoLabelDeleted = new BitField(0x40);
100 private BitField autoBackground = new BitField(0x80);
101 private BitField rotation = new BitField(0x0700);
102 public final static short ROTATION_NONE = 0;
103 public final static short ROTATION_TOP_TO_BOTTOM = 1;
104 public final static short ROTATION_ROTATED_90_DEGREES = 2;
105 public final static short ROTATION_ROTATED_90_DEGREES_CLOCKWISE = 3;
106 private BitField showCategoryLabelAsPercentage = new BitField(0x800);
107 private BitField showValueAsPercentage = new BitField(0x1000);
108 private BitField showBubbleSizes = new BitField(0x2000);
109 private BitField showLabel = new BitField(0x4000);
110 private short field_10_indexOfColorValue;
111 private short field_11_options2;
112 private BitField dataLabelPlacement = new BitField(0x000F);
113 public final static short DATA_LABEL_PLACEMENT_CHART_DEPENDENT = 0;
114 public final static short DATA_LABEL_PLACEMENT_OUTSIDE = 1;
115 public final static short DATA_LABEL_PLACEMENT_INSIDE = 2;
116 public final static short DATA_LABEL_PLACEMENT_CENTER = 3;
117 public final static short DATA_LABEL_PLACEMENT_AXIS = 4;
118 public final static short DATA_LABEL_PLACEMENT_ABOVE = 5;
119 public final static short DATA_LABEL_PLACEMENT_BELOW = 6;
120 public final static short DATA_LABEL_PLACEMENT_LEFT = 7;
121 public final static short DATA_LABEL_PLACEMENT_RIGHT = 8;
122 public final static short DATA_LABEL_PLACEMENT_AUTO = 9;
123 public final static short DATA_LABEL_PLACEMENT_USER_MOVED = 10;
124 private short field_12_textRotation;
125
126
127 public TextRecord()
128 {
129
130 }
131
132
140
141 public TextRecord(short id, short size, byte [] data)
142 {
143 super(id, size, data);
144
145 }
146
147
156
157 public TextRecord(short id, short size, byte [] data, int offset)
158 {
159 super(id, size, data, offset);
160
161 }
162
163
168 protected void validateSid(short id)
169 {
170 if (id != sid)
171 {
172 throw new RecordFormatException("Not a Text record");
173 }
174 }
175
176 protected void fillFields(byte [] data, short size, int offset)
177 {
178
179 int pos = 0;
180 field_1_horizontalAlignment = data[ pos + 0x0 + offset ];
181 field_2_verticalAlignment = data[ pos + 0x1 + offset ];
182 field_3_displayMode = LittleEndian.getShort(data, pos + 0x2 + offset);
183 field_4_rgbColor = LittleEndian.getInt(data, pos + 0x4 + offset);
184 field_5_x = LittleEndian.getInt(data, pos + 0x8 + offset);
185 field_6_y = LittleEndian.getInt(data, pos + 0xc + offset);
186 field_7_width = LittleEndian.getInt(data, pos + 0x10 + offset);
187 field_8_height = LittleEndian.getInt(data, pos + 0x14 + offset);
188 field_9_options1 = LittleEndian.getShort(data, pos + 0x18 + offset);
189 field_10_indexOfColorValue = LittleEndian.getShort(data, pos + 0x1a + offset);
190 field_11_options2 = LittleEndian.getShort(data, pos + 0x1c + offset);
191 field_12_textRotation = LittleEndian.getShort(data, pos + 0x1e + offset);
192
193 }
194
195 public String toString()
196 {
197 StringBuffer buffer = new StringBuffer();
198
199 buffer.append("[TEXT]\n");
200 buffer.append(" .horizontalAlignment = ")
201 .append("0x").append(HexDump.toHex( getHorizontalAlignment ()))
202 .append(" (").append( getHorizontalAlignment() ).append(" )");
203 buffer.append(System.getProperty("line.separator"));
204 buffer.append(" .verticalAlignment = ")
205 .append("0x").append(HexDump.toHex( getVerticalAlignment ()))
206 .append(" (").append( getVerticalAlignment() ).append(" )");
207 buffer.append(System.getProperty("line.separator"));
208 buffer.append(" .displayMode = ")
209 .append("0x").append(HexDump.toHex( getDisplayMode ()))
210 .append(" (").append( getDisplayMode() ).append(" )");
211 buffer.append(System.getProperty("line.separator"));
212 buffer.append(" .rgbColor = ")
213 .append("0x").append(HexDump.toHex( getRgbColor ()))
214 .append(" (").append( getRgbColor() ).append(" )");
215 buffer.append(System.getProperty("line.separator"));
216 buffer.append(" .x = ")
217 .append("0x").append(HexDump.toHex( getX ()))
218 .append(" (").append( getX() ).append(" )");
219 buffer.append(System.getProperty("line.separator"));
220 buffer.append(" .y = ")
221 .append("0x").append(HexDump.toHex( getY ()))
222 .append(" (").append( getY() ).append(" )");
223 buffer.append(System.getProperty("line.separator"));
224 buffer.append(" .width = ")
225 .append("0x").append(HexDump.toHex( getWidth ()))
226 .append(" (").append( getWidth() ).append(" )");
227 buffer.append(System.getProperty("line.separator"));
228 buffer.append(" .height = ")
229 .append("0x").append(HexDump.toHex( getHeight ()))
230 .append(" (").append( getHeight() ).append(" )");
231 buffer.append(System.getProperty("line.separator"));
232 buffer.append(" .options1 = ")
233 .append("0x").append(HexDump.toHex( getOptions1 ()))
234 .append(" (").append( getOptions1() ).append(" )");
235 buffer.append(System.getProperty("line.separator"));
236 buffer.append(" .autoColor = ").append(isAutoColor()).append('\n');
237 buffer.append(" .showKey = ").append(isShowKey()).append('\n');
238 buffer.append(" .showValue = ").append(isShowValue()).append('\n');
239 buffer.append(" .vertical = ").append(isVertical()).append('\n');
240 buffer.append(" .autoGeneratedText = ").append(isAutoGeneratedText()).append('\n');
241 buffer.append(" .generated = ").append(isGenerated()).append('\n');
242 buffer.append(" .autoLabelDeleted = ").append(isAutoLabelDeleted()).append('\n');
243 buffer.append(" .autoBackground = ").append(isAutoBackground()).append('\n');
244 buffer.append(" .rotation = ").append(getRotation()).append('\n');
245 buffer.append(" .showCategoryLabelAsPercentage = ").append(isShowCategoryLabelAsPercentage()).append('\n');
246 buffer.append(" .showValueAsPercentage = ").append(isShowValueAsPercentage()).append('\n');
247 buffer.append(" .showBubbleSizes = ").append(isShowBubbleSizes()).append('\n');
248 buffer.append(" .showLabel = ").append(isShowLabel()).append('\n');
249 buffer.append(" .indexOfColorValue = ")
250 .append("0x").append(HexDump.toHex( getIndexOfColorValue ()))
251 .append(" (").append( getIndexOfColorValue() ).append(" )");
252 buffer.append(System.getProperty("line.separator"));
253 buffer.append(" .options2 = ")
254 .append("0x").append(HexDump.toHex( getOptions2 ()))
255 .append(" (").append( getOptions2() ).append(" )");
256 buffer.append(System.getProperty("line.separator"));
257 buffer.append(" .dataLabelPlacement = ").append(getDataLabelPlacement()).append('\n');
258 buffer.append(" .textRotation = ")
259 .append("0x").append(HexDump.toHex( getTextRotation ()))
260 .append(" (").append( getTextRotation() ).append(" )");
261 buffer.append(System.getProperty("line.separator"));
262
263 buffer.append("[/TEXT]\n");
264 return buffer.toString();
265 }
266
267 public int serialize(int offset, byte[] data)
268 {
269 int pos = 0;
270
271 LittleEndian.putShort(data, 0 + offset, sid);
272 LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize() - 4));
273
274 data[ 4 + offset + pos ] = field_1_horizontalAlignment;
275 data[ 5 + offset + pos ] = field_2_verticalAlignment;
276 LittleEndian.putShort(data, 6 + offset + pos, field_3_displayMode);
277 LittleEndian.putInt(data, 8 + offset + pos, field_4_rgbColor);
278 LittleEndian.putInt(data, 12 + offset + pos, field_5_x);
279 LittleEndian.putInt(data, 16 + offset + pos, field_6_y);
280 LittleEndian.putInt(data, 20 + offset + pos, field_7_width);
281 LittleEndian.putInt(data, 24 + offset + pos, field_8_height);
282 LittleEndian.putShort(data, 28 + offset + pos, field_9_options1);
283 LittleEndian.putShort(data, 30 + offset + pos, field_10_indexOfColorValue);
284 LittleEndian.putShort(data, 32 + offset + pos, field_11_options2);
285 LittleEndian.putShort(data, 34 + offset + pos, field_12_textRotation);
286
287 return getRecordSize();
288 }
289
290
293 public int getRecordSize()
294 {
295 return 4 + 1 + 1 + 2 + 4 + 4 + 4 + 4 + 4 + 2 + 2 + 2 + 2;
296 }
297
298 public short getSid()
299 {
300 return this.sid;
301 }
302
303 public Object clone() {
304 TextRecord rec = new TextRecord();
305
306 rec.field_1_horizontalAlignment = field_1_horizontalAlignment;
307 rec.field_2_verticalAlignment = field_2_verticalAlignment;
308 rec.field_3_displayMode = field_3_displayMode;
309 rec.field_4_rgbColor = field_4_rgbColor;
310 rec.field_5_x = field_5_x;
311 rec.field_6_y = field_6_y;
312 rec.field_7_width = field_7_width;
313 rec.field_8_height = field_8_height;
314 rec.field_9_options1 = field_9_options1;
315 rec.field_10_indexOfColorValue = field_10_indexOfColorValue;
316 rec.field_11_options2 = field_11_options2;
317 rec.field_12_textRotation = field_12_textRotation;
318 return rec;
319 }
320
321
322
323
324
333 public byte getHorizontalAlignment()
334 {
335 return field_1_horizontalAlignment;
336 }
337
338
348 public void setHorizontalAlignment(byte field_1_horizontalAlignment)
349 {
350 this.field_1_horizontalAlignment = field_1_horizontalAlignment;
351 }
352
353
362 public byte getVerticalAlignment()
363 {
364 return field_2_verticalAlignment;
365 }
366
367
377 public void setVerticalAlignment(byte field_2_verticalAlignment)
378 {
379 this.field_2_verticalAlignment = field_2_verticalAlignment;
380 }
381
382
389 public short getDisplayMode()
390 {
391 return field_3_displayMode;
392 }
393
394
402 public void setDisplayMode(short field_3_displayMode)
403 {
404 this.field_3_displayMode = field_3_displayMode;
405 }
406
407
410 public int getRgbColor()
411 {
412 return field_4_rgbColor;
413 }
414
415
418 public void setRgbColor(int field_4_rgbColor)
419 {
420 this.field_4_rgbColor = field_4_rgbColor;
421 }
422
423
426 public int getX()
427 {
428 return field_5_x;
429 }
430
431
434 public void setX(int field_5_x)
435 {
436 this.field_5_x = field_5_x;
437 }
438
439
442 public int getY()
443 {
444 return field_6_y;
445 }
446
447
450 public void setY(int field_6_y)
451 {
452 this.field_6_y = field_6_y;
453 }
454
455
458 public int getWidth()
459 {
460 return field_7_width;
461 }
462
463
466 public void setWidth(int field_7_width)
467 {
468 this.field_7_width = field_7_width;
469 }
470
471
474 public int getHeight()
475 {
476 return field_8_height;
477 }
478
479
482 public void setHeight(int field_8_height)
483 {
484 this.field_8_height = field_8_height;
485 }
486
487
490 public short getOptions1()
491 {
492 return field_9_options1;
493 }
494
495
498 public void setOptions1(short field_9_options1)
499 {
500 this.field_9_options1 = field_9_options1;
501 }
502
503
506 public short getIndexOfColorValue()
507 {
508 return field_10_indexOfColorValue;
509 }
510
511
514 public void setIndexOfColorValue(short field_10_indexOfColorValue)
515 {
516 this.field_10_indexOfColorValue = field_10_indexOfColorValue;
517 }
518
519
522 public short getOptions2()
523 {
524 return field_11_options2;
525 }
526
527
530 public void setOptions2(short field_11_options2)
531 {
532 this.field_11_options2 = field_11_options2;
533 }
534
535
538 public short getTextRotation()
539 {
540 return field_12_textRotation;
541 }
542
543
546 public void setTextRotation(short field_12_textRotation)
547 {
548 this.field_12_textRotation = field_12_textRotation;
549 }
550
551
555 public void setAutoColor(boolean value)
556 {
557 field_9_options1 = autoColor.setShortBoolean(field_9_options1, value);
558 }
559
560
564 public boolean isAutoColor()
565 {
566 return autoColor.isSet(field_9_options1);
567 }
568
569
573 public void setShowKey(boolean value)
574 {
575 field_9_options1 = showKey.setShortBoolean(field_9_options1, value);
576 }
577
578
582 public boolean isShowKey()
583 {
584 return showKey.isSet(field_9_options1);
585 }
586
587
591 public void setShowValue(boolean value)
592 {
593 field_9_options1 = showValue.setShortBoolean(field_9_options1, value);
594 }
595
596
600 public boolean isShowValue()
601 {
602 return showValue.isSet(field_9_options1);
603 }
604
605
609 public void setVertical(boolean value)
610 {
611 field_9_options1 = vertical.setShortBoolean(field_9_options1, value);
612 }
613
614
618 public boolean isVertical()
619 {
620 return vertical.isSet(field_9_options1);
621 }
622
623
627 public void setAutoGeneratedText(boolean value)
628 {
629 field_9_options1 = autoGeneratedText.setShortBoolean(field_9_options1, value);
630 }
631
632
636 public boolean isAutoGeneratedText()
637 {
638 return autoGeneratedText.isSet(field_9_options1);
639 }
640
641
645 public void setGenerated(boolean value)
646 {
647 field_9_options1 = generated.setShortBoolean(field_9_options1, value);
648 }
649
650
654 public boolean isGenerated()
655 {
656 return generated.isSet(field_9_options1);
657 }
658
659
663 public void setAutoLabelDeleted(boolean value)
664 {
665 field_9_options1 = autoLabelDeleted.setShortBoolean(field_9_options1, value);
666 }
667
668
672 public boolean isAutoLabelDeleted()
673 {
674 return autoLabelDeleted.isSet(field_9_options1);
675 }
676
677
681 public void setAutoBackground(boolean value)
682 {
683 field_9_options1 = autoBackground.setShortBoolean(field_9_options1, value);
684 }
685
686
690 public boolean isAutoBackground()
691 {
692 return autoBackground.isSet(field_9_options1);
693 }
694
695
699 public void setRotation(short value)
700 {
701 field_9_options1 = rotation.setShortValue(field_9_options1, value);
702 }
703
704
708 public short getRotation()
709 {
710 return rotation.getShortValue(field_9_options1);
711 }
712
713
717 public void setShowCategoryLabelAsPercentage(boolean value)
718 {
719 field_9_options1 = showCategoryLabelAsPercentage.setShortBoolean(field_9_options1, value);
720 }
721
722
726 public boolean isShowCategoryLabelAsPercentage()
727 {
728 return showCategoryLabelAsPercentage.isSet(field_9_options1);
729 }
730
731
735 public void setShowValueAsPercentage(boolean value)
736 {
737 field_9_options1 = showValueAsPercentage.setShortBoolean(field_9_options1, value);
738 }
739
740
744 public boolean isShowValueAsPercentage()
745 {
746 return showValueAsPercentage.isSet(field_9_options1);
747 }
748
749
753 public void setShowBubbleSizes(boolean value)
754 {
755 field_9_options1 = showBubbleSizes.setShortBoolean(field_9_options1, value);
756 }
757
758
762 public boolean isShowBubbleSizes()
763 {
764 return showBubbleSizes.isSet(field_9_options1);
765 }
766
767
771 public void setShowLabel(boolean value)
772 {
773 field_9_options1 = showLabel.setShortBoolean(field_9_options1, value);
774 }
775
776
780 public boolean isShowLabel()
781 {
782 return showLabel.isSet(field_9_options1);
783 }
784
785
789 public void setDataLabelPlacement(short value)
790 {
791 field_11_options2 = dataLabelPlacement.setShortValue(field_11_options2, value);
792 }
793
794
798 public short getDataLabelPlacement()
799 {
800 return dataLabelPlacement.getShortValue(field_11_options2);
801 }
802
803
804 }
805
806
807
808
809