Grantlee  0.3.0
template.h
1 /*
2  This file is part of the Grantlee template system.
3 
4  Copyright (c) 2009,2010 Stephen Kelly <steveire@gmail.com>
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public
8  License as published by the Free Software Foundation; either version
9  2.1 of the Licence, or (at your option) any later version.
10 
11  This library is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public
17  License along with this library. If not, see <http://www.gnu.org/licenses/>.
18 
19 */
20 
21 #ifndef GRANTLEE_TEMPLATE_H
22 #define GRANTLEE_TEMPLATE_H
23 
24 #include "exception.h"
25 #include "grantlee_core_export.h"
26 #include "node.h"
27 
28 #include <QtCore/QSharedPointer>
29 #include <QtCore/QStringList>
30 
31 namespace Grantlee
32 {
33 class Context;
34 class Engine;
35 class TemplateImpl;
36 class OutputStream;
37 
38 #ifdef Q_QDOC
39 #define TemplateImpl Template
40 #else
41 typedef QSharedPointer<TemplateImpl> Template;
42 #endif
43 
44 class TemplatePrivate;
45 
47 
89 class GRANTLEE_CORE_EXPORT TemplateImpl : public QObject
90 {
91  Q_OBJECT
92 public:
93  ~TemplateImpl();
94 
98  virtual QString render( Context *c );
99 
103  // ### BIC make this const and non-virtual.
104  virtual OutputStream* render( OutputStream *stream, Context *c );
105 
106 #ifndef Q_QDOC
107 
110  NodeList nodeList() const;
111 
115  void setNodeList( const NodeList &list );
116 #endif
117 
121  Error error();
122 
126  QString errorString();
127 
131  Engine const * engine() const;
132 
133 #ifndef Q_QDOC
134 protected:
135  TemplateImpl( Engine const *engine, QObject *parent = 0 );
136  TemplateImpl( Engine const *engine, bool smartTrim, QObject *parent = 0 );
137 
138  void setContent( const QString &templateString );
139 #endif
140 
141 private:
142  //Don't allow setting the parent on a Template, which is memory managed as a QSharedPointer.
143  using QObject::setParent;
144 
145 private:
146  Q_DECLARE_PRIVATE( Template )
147  TemplatePrivate * const d_ptr;
148 #ifndef Q_QDOC
149  friend class Engine;
150  friend class Parser;
151 #endif
152 };
153 
154 }
155 
156 Q_DECLARE_METATYPE( Grantlee::Template )
157 
158 #endif
159