KEYTypes.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 KEYTYPES_H_INCLUDED
00011 #define KEYTYPES_H_INCLUDED
00012 
00013 #include <deque>
00014 
00015 #include <boost/optional.hpp>
00016 
00017 #include "libetonyek_utils.h"
00018 #include "KEYObject.h"
00019 #include "KEYPath_fwd.h"
00020 #include "KEYStyle.h"
00021 #include "KEYText_fwd.h"
00022 #include "KEYTypes_fwd.h"
00023 
00024 namespace libetonyek
00025 {
00026 
00027 struct KEYSize
00028 {
00029   double width;
00030   double height;
00031 
00032   KEYSize();
00033   KEYSize(double w, double h);
00034 };
00035 
00036 struct KEYPosition
00037 {
00038   double x;
00039   double y;
00040 
00041   KEYPosition();
00042   KEYPosition(double x_, double y_);
00043 };
00044 
00045 struct KEYGeometry
00046 {
00047   KEYSize naturalSize;
00048   KEYPosition position;
00049   boost::optional<double> angle;
00050   boost::optional<double> shearXAngle;
00051   boost::optional<double> shearYAngle;
00052   boost::optional<bool> horizontalFlip;
00053   boost::optional<bool> verticalFlip;
00054   boost::optional<bool> aspectRatioLocked;
00055   boost::optional<bool> sizesLocked;
00056 
00057   KEYGeometry();
00058 };
00059 
00060 struct KEYColor
00061 {
00062   double red;
00063   double green;
00064   double blue;
00065   double alpha;
00066 
00067   KEYColor();
00068   KEYColor(double r, double g, double b, double a);
00069 };
00070 
00071 struct KEYPadding
00072 {
00073   boost::optional<int> top;
00074   boost::optional<int> right;
00075   boost::optional<int> bottom;
00076   boost::optional<int> left;
00077 
00078   KEYPadding();
00079 };
00080 
00081 struct KEYLine
00082 {
00083   KEYGeometryPtr_t geometry;
00084   KEYStylePtr_t style;
00085   boost::optional<double> x1;
00086   boost::optional<double> y1;
00087   boost::optional<double> x2;
00088   boost::optional<double> y2;
00089 
00090   KEYLine();
00091 };
00092 
00093 struct KEYData
00094 {
00095   WPXInputStreamPtr_t stream;
00096   boost::optional<std::string> displayName;
00097   boost::optional<int> type;
00098 
00099   KEYData();
00100 };
00101 
00102 struct KEYMediaContent
00103 {
00104   boost::optional<KEYSize> size;
00105   KEYDataPtr_t data;
00106 
00107   KEYMediaContent();
00108 };
00109 
00110 struct KEYBinary
00111 {
00112   boost::optional<KEYSize> size;
00113   boost::optional<std::string> path;
00114   boost::optional<std::string> type;
00115   boost::optional<unsigned> dataSize;
00116 
00117   KEYBinary();
00118 };
00119 
00120 struct KEYImage
00121 {
00122   boost::optional<bool> locked;
00123   KEYGeometryPtr_t geometry;
00124   boost::optional<KEYBinary> binary;
00125 
00126   KEYImage();
00127 };
00128 
00129 struct KEYMedia
00130 {
00131   KEYGeometryPtr_t geometry;
00132   KEYGraphicStylePtr_t style;
00133   boost::optional<bool> placeholder;
00134   boost::optional<KEYSize> placeholderSize;
00135   KEYMediaContentPtr_t content;
00136 
00137   KEYMedia();
00138 };
00139 
00140 struct KEYWrap
00141 {
00142   KEYPathPtr_t path;
00143   KEYGeometryPtr_t geometry;
00144 
00145   KEYWrap();
00146 };
00147 
00148 struct KEYGroup
00149 {
00150   KEYObjectList_t objects;
00151 
00152   KEYGroup();
00153 };
00154 
00155 struct KEYLayer
00156 {
00157   boost::optional<std::string> type;
00158   KEYObjectList_t objects;
00159 
00160   KEYLayer();
00161 };
00162 
00163 struct KEYPlaceholder
00164 {
00165   boost::optional<bool> title;
00166   boost::optional<bool> empty;
00167   KEYPlaceholderStylePtr_t style;
00168   KEYGeometryPtr_t geometry;
00169   KEYTextPtr_t text;
00170 
00171   KEYPlaceholder();
00172 };
00173 
00174 struct KEYStickyNote
00175 {
00176   KEYGeometryPtr_t geometry;
00177   KEYTextPtr_t text;
00178 
00179   KEYStickyNote();
00180   KEYStickyNote(const KEYGeometryPtr_t &geometry, const KEYTextPtr_t &text);
00181 };
00182 
00183 typedef std::deque<KEYStickyNote> KEYStickyNotes_t;
00184 
00185 struct KEYTabStop
00186 {
00187   double pos;
00188 
00189   explicit KEYTabStop(double pos_);
00190 };
00191 
00192 typedef std::deque<KEYTabStop> KEYTabStops_t;
00193 
00194 KEYObjectPtr_t makeObject(const KEYGroupPtr_t &group);
00195 KEYObjectPtr_t makeObject(const KEYImagePtr_t &image);
00196 KEYObjectPtr_t makeObject(const KEYLinePtr_t &line);
00197 KEYObjectPtr_t makeObject(const KEYMediaPtr_t &media);
00198 KEYObjectPtr_t makeObject(const KEYPlaceholderPtr_t &placeholder);
00199 
00200 }
00201 
00202 #endif //  KEYTYPES_H_INCLUDED
00203 
00204 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */