Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef KEYSTYLES_H_INCLUDED
00011 #define KEYSTYLES_H_INCLUDED
00012
00013 #include <string>
00014
00015 #include <boost/optional.hpp>
00016 #include <boost/shared_ptr.hpp>
00017 #include <boost/unordered_map.hpp>
00018
00019 #include "KEYEnum.h"
00020 #include "KEYPropertyMap.h"
00021 #include "KEYStyle.h"
00022 #include "KEYStyleContext.h"
00023 #include "KEYStyles_fwd.h"
00024 #include "KEYTypes.h"
00025
00026 namespace libetonyek
00027 {
00028
00031 class KEYStyleBase : public KEYStyle
00032 {
00033 public:
00034 virtual bool link(const KEYStylesheetPtr_t &stylesheet);
00035
00036 virtual void flatten();
00037
00038
00039 protected:
00040 KEYStyleBase(const KEYPropertyMap &props, const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent);
00041 virtual ~KEYStyleBase();
00042
00043 virtual const KEYPropertyMap &getPropertyMap() const;
00044
00045 virtual KEYStylePtr_t find(const KEYStylesheetPtr_t &stylesheet, const std::string &ident) const = 0;
00046
00053 boost::any lookup(const char *property, const KEYStyleContext &context = KEYStyleContext()) const;
00054
00055 private:
00056 KEYPropertyMap m_props;
00057
00058 const boost::optional<std::string> m_ident;
00059 const boost::optional<std::string> m_parentIdent;
00060 KEYStylePtr_t m_parent;
00061 };
00062
00065 class KEYCellStyle : public KEYStyleBase
00066 {
00067 public:
00068 KEYCellStyle(const KEYPropertyMap &props, const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent);
00069
00070 private:
00071 virtual KEYStylePtr_t find(const KEYStylesheetPtr_t &stylesheet, const std::string &ident) const;
00072 };
00073
00076 class KEYCharacterStyle : public KEYStyleBase
00077 {
00078 public:
00079 KEYCharacterStyle(const KEYPropertyMap &props, const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent);
00080
00081 boost::optional<KEYBaseline> getBaseline(const KEYStyleContext &context = KEYStyleContext()) const;
00082 boost::optional<double> getBaselineShift(const KEYStyleContext &context = KEYStyleContext()) const;
00083 boost::optional<bool> getBold(const KEYStyleContext &context = KEYStyleContext()) const;
00084 boost::optional<KEYCapitalization> getCapitalization(const KEYStyleContext &context = KEYStyleContext()) const;
00085 boost::optional<bool> getItalic(const KEYStyleContext &context = KEYStyleContext()) const;
00086 boost::optional<KEYColor> getFontColor(const KEYStyleContext &context = KEYStyleContext()) const;
00087 boost::optional<double> getFontSize(const KEYStyleContext &context = KEYStyleContext()) const;
00088 boost::optional<std::string> getFontName(const KEYStyleContext &context = KEYStyleContext()) const;
00089 boost::optional<bool> getOutline(const KEYStyleContext &context = KEYStyleContext()) const;
00090 boost::optional<bool> getStrikethru(const KEYStyleContext &context = KEYStyleContext()) const;
00091 boost::optional<bool> getUnderline(const KEYStyleContext &context = KEYStyleContext()) const;
00092
00093 private:
00094 virtual KEYStylePtr_t find(const KEYStylesheetPtr_t &stylesheet, const std::string &ident) const;
00095 };
00096
00099 class KEYConnectionStyle : public KEYStyleBase
00100 {
00101 public:
00102 KEYConnectionStyle(const KEYPropertyMap &props, const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent);
00103
00104 private:
00105 virtual KEYStylePtr_t find(const KEYStylesheetPtr_t &stylesheet, const std::string &ident) const;
00106 };
00107
00110 class KEYGraphicStyle : public KEYStyleBase
00111 {
00112 public:
00113 KEYGraphicStyle(const KEYPropertyMap &props, const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent);
00114
00115 private:
00116 virtual KEYStylePtr_t find(const KEYStylesheetPtr_t &stylesheet, const std::string &ident) const;
00117 };
00118
00121 class KEYLayoutStyle : public KEYStyleBase
00122 {
00123 public:
00124 KEYLayoutStyle(const KEYPropertyMap &props, const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent);
00125
00126 private:
00127 virtual KEYStylePtr_t find(const KEYStylesheetPtr_t &stylesheet, const std::string &ident) const;
00128 };
00129
00132 class KEYListStyle : public KEYStyleBase
00133 {
00134 public:
00135 KEYListStyle(const KEYPropertyMap &props, const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent);
00136
00137 private:
00138 virtual KEYStylePtr_t find(const KEYStylesheetPtr_t &stylesheet, const std::string &ident) const;
00139 };
00140
00143 class KEYParagraphStyle : public KEYCharacterStyle
00144 {
00145 public:
00146 KEYParagraphStyle(const KEYPropertyMap &props, const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent);
00147
00148 boost::optional<KEYAlignment> getAlignment(const KEYStyleContext &context = KEYStyleContext()) const;
00149 boost::optional<KEYTabStops_t> getTabs(const KEYStyleContext &context = KEYStyleContext()) const;
00150
00151 private:
00152 virtual KEYStylePtr_t find(const KEYStylesheetPtr_t &stylesheet, const std::string &ident) const;
00153 };
00154
00157 class KEYPlaceholderStyle : public KEYStyleBase
00158 {
00159 public:
00160 KEYPlaceholderStyle(const KEYPropertyMap &props, const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent);
00161
00162 KEYGeometryPtr_t getGeometry(const KEYStyleContext &context = KEYStyleContext()) const;
00163
00164 private:
00165 virtual KEYStylePtr_t find(const KEYStylesheetPtr_t &stylesheet, const std::string &ident) const;
00166 };
00167
00170 class KEYSlideStyle : public KEYStyleBase
00171 {
00172 public:
00173 KEYSlideStyle(const KEYPropertyMap &props, const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent);
00174
00175 private:
00176 virtual KEYStylePtr_t find(const KEYStylesheetPtr_t &stylesheet, const std::string &ident) const;
00177 };
00178
00181 class KEYTabularStyle : public KEYStyleBase
00182 {
00183 public:
00184 KEYTabularStyle(const KEYPropertyMap &props, const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent);
00185
00186 private:
00187 virtual KEYStylePtr_t find(const KEYStylesheetPtr_t &stylesheet, const std::string &ident) const;
00188 };
00189
00192 class KEYVectorStyle : public KEYStyleBase
00193 {
00194 public:
00195 KEYVectorStyle(const KEYPropertyMap &props, const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent);
00196
00197 private:
00198 virtual KEYStylePtr_t find(const KEYStylesheetPtr_t &stylesheet, const std::string &ident) const;
00199 };
00200
00201 }
00202
00203 #endif // KEYSTYLES_H_INCLUDED
00204
00205