KEYStyles.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 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 // ensure that this class cannot be instantiated
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 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */