IWORKTypes.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /*
00003  * This file is part of the libetonyek project.
00004  *
00005  * This Source Code Form is subject to the terms of the Mozilla Public
00006  * License, v. 2.0. If a copy of the MPL was not distributed with this
00007  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
00008  */
00009 
00010 #ifndef IWORKTYPES_H_INCLUDED
00011 #define IWORKTYPES_H_INCLUDED
00012 
00013 #include "IWORKTypes_fwd.h"
00014 
00015 #include <deque>
00016 #include <map>
00017 #include <string>
00018 
00019 #include <boost/optional.hpp>
00020 #include <boost/variant.hpp>
00021 
00022 #include <mdds/flat_segment_tree.hpp>
00023 
00024 #include "libetonyek_utils.h"
00025 #include "IWORKEnum.h"
00026 #include "IWORKPath_fwd.h"
00027 #include "IWORKStyle_fwd.h"
00028 #include "IWORKFormula.h"
00029 
00030 namespace libetonyek
00031 {
00032 
00033 class IWORKOutputElements;
00034 
00035 typedef boost::unordered_map<std::string, IWORKOutputElements> IWORKHeaderFooterMap_t;
00036 
00037 struct IWORKSize
00038 {
00039   double m_width;
00040   double m_height;
00041 
00042   IWORKSize();
00043   IWORKSize(double w, double h);
00044 };
00045 
00046 struct IWORKPosition
00047 {
00048   double m_x;
00049   double m_y;
00050 
00051   IWORKPosition();
00052   IWORKPosition(double x_, double y_);
00053 };
00054 
00055 struct IWORKGeometry
00056 {
00057   IWORKSize m_naturalSize;
00058   IWORKSize m_size;
00059   IWORKPosition m_position;
00060   boost::optional<double> m_angle;
00061   boost::optional<double> m_shearXAngle;
00062   boost::optional<double> m_shearYAngle;
00063   boost::optional<bool> m_horizontalFlip;
00064   boost::optional<bool> m_verticalFlip;
00065   boost::optional<bool> m_aspectRatioLocked;
00066   boost::optional<bool> m_sizesLocked;
00067 
00068   IWORKGeometry();
00069 };
00070 
00071 struct IWORKColor
00072 {
00073   double m_red;
00074   double m_green;
00075   double m_blue;
00076   double m_alpha;
00077 
00078   IWORKColor();
00079   IWORKColor(double r, double g, double b, double a);
00080 };
00081 
00082 struct IWORKPadding
00083 {
00084   boost::optional<double> m_top;
00085   boost::optional<double> m_right;
00086   boost::optional<double> m_bottom;
00087   boost::optional<double> m_left;
00088 
00089   IWORKPadding();
00090 };
00091 
00092 struct IWORKTabStop
00093 {
00094   double m_pos;
00095 
00096   explicit IWORKTabStop(double pos_);
00097 };
00098 
00099 typedef std::deque<IWORKTabStop> IWORKTabStops_t;
00100 typedef boost::unordered_map<ID_t, IWORKTabStops_t> IWORKTabStopsMap_t;
00101 typedef mdds::flat_segment_tree<unsigned, IWORKStylePtr_t> IWORKGridLine_t;
00102 typedef std::vector<IWORKGridLine_t> IWORKGridLineList_t;
00103 
00104 struct IWORKLine
00105 {
00106   IWORKGeometryPtr_t m_geometry;
00107   IWORKStylePtr_t m_style;
00108   boost::optional<double> m_x1;
00109   boost::optional<double> m_y1;
00110   boost::optional<double> m_x2;
00111   boost::optional<double> m_y2;
00112 
00113   IWORKLine();
00114 };
00115 
00116 struct IWORKData
00117 {
00118   RVNGInputStreamPtr_t m_stream;
00119   boost::optional<std::string> m_displayName;
00120   std::string m_mimeType;
00121 
00122   IWORKData();
00123 };
00124 
00125 struct IWORKMediaContent
00126 {
00127   boost::optional<IWORKSize> m_size;
00128   IWORKDataPtr_t m_data;
00129 
00130   IWORKMediaContent();
00131 };
00132 
00133 struct IWORKBinary
00134 {
00135   boost::optional<IWORKSize> m_size;
00136   boost::optional<std::string> m_path;
00137   boost::optional<std::string> m_type;
00138   boost::optional<unsigned> m_dataSize;
00139 
00140   IWORKBinary();
00141 };
00142 
00143 struct IWORKImage
00144 {
00145   boost::optional<bool> m_locked;
00146   IWORKGeometryPtr_t m_geometry;
00147   boost::optional<IWORKBinary> m_binary;
00148 
00149   IWORKImage();
00150 };
00151 
00152 struct IWORKMedia
00153 {
00154   IWORKGeometryPtr_t m_geometry;
00155   IWORKStylePtr_t m_style;
00156   boost::optional<bool> m_placeholder;
00157   boost::optional<IWORKSize> m_placeholderSize;
00158   IWORKMediaContentPtr_t m_content;
00159 
00160   IWORKMedia();
00161 };
00162 
00163 struct IWORKWrap
00164 {
00165   IWORKPathPtr_t m_path;
00166   IWORKGeometryPtr_t m_geometry;
00167 
00168   IWORKWrap();
00169 };
00170 
00171 struct IWORKLineSpacing
00172 {
00173   IWORKLineSpacing(double amount, bool relative);
00174 
00175   double m_amount;
00176   bool m_relative;
00177 };
00178 
00179 struct IWORKTableData
00180 {
00181   IWORKTableData();
00182 
00183   IWORKColumnSizes_t m_columnSizes;
00184   IWORKRowSizes_t m_rowSizes;
00185 
00186   unsigned m_column;
00187   unsigned m_row;
00188   unsigned m_numColumns;
00189   unsigned m_numRows;
00190 
00191   boost::optional<unsigned> m_columnSpan;
00192   boost::optional<unsigned> m_rowSpan;
00193   boost::optional<unsigned> m_cellMove;
00194   boost::optional<std::string> m_content;
00195   boost::optional<IWORKFormula> m_formula;
00196   IWORKGridLineList_t m_horizontalLines;
00197   IWORKGridLineList_t m_verticalLines;
00198   IWORKStylePtr_t m_style;
00199   IWORKCellType m_type;
00200 };
00201 
00202 struct IWORKStroke
00203 {
00204   IWORKStroke();
00205 
00206   IWORKStrokeType m_type;
00207   double m_width;
00208   IWORKColor m_color;
00209   IWORKLineJoin m_join;
00210   IWORKLineCap m_cap;
00211   std::deque<double> m_pattern;
00212 };
00213 
00214 struct IWORKGradientStop
00215 {
00216   IWORKGradientStop();
00217 
00218   IWORKColor m_color;
00219   double m_fraction;
00220   double m_inflection;
00221 };
00222 
00223 struct IWORKGradient
00224 {
00225   IWORKGradient();
00226 
00227   IWORKGradientType m_type;
00228   std::deque<IWORKGradientStop> m_stops;
00229   double m_angle;
00230 };
00231 
00232 struct IWORKFillImage
00233 {
00234   IWORKFillImage();
00235 
00236   IWORKFillImageType m_type;
00237   boost::optional<IWORKColor> m_color;
00238   IWORKSize m_size;
00239   RVNGInputStreamPtr_t m_stream;
00240   std::string m_mimeType;
00241 };
00242 
00243 typedef boost::variant<IWORKColor, IWORKGradient, IWORKFillImage> IWORKFill;
00244 
00245 struct IWORKShadow
00246 {
00247   IWORKShadow();
00248 
00249   IWORKColor m_color;
00250   double m_angle;
00251   double m_offset;
00252   double m_opacity;
00253 };
00254 
00255 struct IWORKMetadata
00256 {
00257   IWORKMetadata();
00258 
00259   std::string m_title;
00260   std::string m_author;
00261   std::string m_keywords;
00262   std::string m_comment;
00263 };
00264 
00265 struct IWORKColumns
00266 {
00267   struct Column
00268   {
00269     Column();
00270 
00271     double m_width;
00272     double m_spacing;
00273   };
00274 
00275   typedef std::deque<Column> Columns_t;
00276 
00277   IWORKColumns();
00278 
00279   bool m_equal;
00280   Columns_t m_columns;
00281 };
00282 
00283 struct IWORKNumberFormat
00284 {
00285   IWORKNumberFormat();
00286 
00287   IWORKCellNumberType m_type;
00288   std::string m_string;
00289   int m_decimalPlaces;
00290   std::string m_currencyCode;
00291   int m_negativeStyle;
00292   bool m_thousandsSeperator;
00293   int m_fractionAccuracy;
00294   bool m_accountingStyle;
00295   int m_base;
00296   int m_basePlaces;
00297 };
00298 
00299 struct IWORKDateTimeFormat
00300 {
00301   IWORKDateTimeFormat();
00302 
00303   std::string m_format;
00304 };
00305 
00306 struct IWORKDurationFormat
00307 {
00308   IWORKDurationFormat();
00309 
00310   std::string m_format;
00311 };
00312 
00313 struct IWORKFilterDescriptor
00314 {
00315   IWORKFilterDescriptor();
00316 
00317   bool m_isShadow;
00318 };
00319 
00320 typedef boost::unordered_map<ID_t, IWORKFilterDescriptor> IWORKFilterDescriptorMap_t;
00321 
00322 struct IWORKListLabelGeometry
00323 {
00324   IWORKListLabelGeometry();
00325 
00326   IWORKAlignment m_align;
00327   double m_scale;
00328   double m_offset;
00329   bool m_scaleWithText;
00330 };
00331 
00332 typedef boost::unordered_map<ID_t, IWORKListLabelGeometry> IWORKListLabelGeometryMap_t;
00333 
00334 struct IWORKTextLabelFormat
00335 {
00336   IWORKTextLabelFormat();
00337 
00338   IWORKLabelNumFormatSurrounding m_prefix;
00339   IWORKLabelNumFormat m_format;
00340   IWORKLabelNumFormatSurrounding m_suffix;
00341 };
00342 
00343 struct IWORKTextLabel
00344 {
00345   IWORKTextLabel();
00346 
00347   IWORKTextLabelFormat m_format;
00348   bool m_tiered;
00349   unsigned m_first;
00350 };
00351 
00352 // Type of list label. One of: none, bullet, text, image.
00353 // Note: The bool type, representing 'none', is just a placeholder. The
00354 // value is not important.
00355 typedef boost::variant<bool, std::string, IWORKTextLabel, IWORKMediaContentPtr_t> IWORKListLabelTypeInfo_t;
00356 typedef boost::unordered_map<ID_t, IWORKListLabelTypeInfo_t> IWORKListLabelTypeInfoMap_t;
00357 
00358 typedef std::map<unsigned, IWORKStylePtr_t> IWORKListStyle_t;
00359 typedef boost::unordered_map<ID_t, IWORKListStyle_t> IWORKListStyleMap_t;
00360 
00361 }
00362 
00363 #endif //  IWORKTYPES_H_INCLUDED
00364 
00365 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */