QGIS API Documentation  2.2.0-Valmiera
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
qgsprojectproperty.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsproject.h
3 
4  Implements persistent project state.
5 
6  -------------------
7  begin : February 24, 2005
8  copyright : (C) 2005 by Mark Coletti
9  email : mcoletti at gmail.com
10 ***************************************************************************/
11 
12 /***************************************************************************
13  * *
14  * This program is free software; you can redistribute it and/or modify *
15  * it under the terms of the GNU General Public License as published by *
16  * the Free Software Foundation; either version 2 of the License, or *
17  * (at your option) any later version. *
18  * *
19  ***************************************************************************/
20 
21 
22 #ifndef QGSPROJECTPROPERTY_H
23 #define QGSPROJECTPROPERTY_H
24 
25 #include <QHash>
26 #include <QVariant>
27 #include <QStringList>
28 
29 class QDomNode;
30 class QDomElement;
31 class QDomDocument;
32 
33 
47 class CORE_EXPORT QgsProperty
48 {
49  public:
50 
52  {}
53 
54  virtual ~ QgsProperty()
55  {}
56 
62  virtual void dump( int tabs = 0 ) const = 0;
63 
65  virtual bool isKey() const = 0;
66 
68  virtual bool isValue() const = 0;
69 
77  virtual bool isLeaf() const = 0;
78 
84  virtual bool readXML( QDomNode & keyNode ) = 0;
85 
95  virtual bool writeXML( const QString & nodeName,
96  QDomElement & element,
97  QDomDocument & document ) = 0;
98 
108  virtual QVariant value() const = 0;
109 
110 }; // class QgsProperty
111 
112 
113 
114 
119 class CORE_EXPORT QgsPropertyValue : public QgsProperty
120 {
121  public:
123 
124  QgsPropertyValue( const QVariant &value )
125  : value_( value )
126  {}
127 
128  virtual ~ QgsPropertyValue() {}
129 
131  virtual bool isKey() const { return false; }
132 
134  virtual bool isValue() const { return true; }
135 
136  QVariant value() const { return value_; }
137 
143  bool isLeaf() const { return true; }
144 
145  void dump( int tabs = 0 ) const;
146 
147  bool readXML( QDomNode & keyNode );
148 
149  bool writeXML( const QString & nodeName,
150  QDomElement & element,
151  QDomDocument & document );
152 
153  int count() const { return 0; }
154 
159  void entryList( QStringList & keyName, QStringList & entries ) const
160  { Q_UNUSED( keyName ); Q_UNUSED( entries ); /* NOP */ }
161 
162  private:
163 
167  QVariant value_;
168 
169 }; // class QgsPropertyValue
170 
171 
172 
173 
190 class CORE_EXPORT QgsPropertyKey : public QgsProperty
191 {
192  public:
193  QgsPropertyKey( const QString &name = "" );
194  virtual ~ QgsPropertyKey();
195 
197  // @{
198  const QString &name() const
199  { return mName; }
200 
201  QString & name()
202  { return mName; }
203  // @}
204 
205 
209  QVariant value() const;
210 
211 
213  QgsPropertyKey * addKey( const QString & keyName )
214  {
215  delete mProperties.take( keyName );
216  mProperties.insert( keyName, new QgsPropertyKey( keyName ) );
217 
218  return dynamic_cast<QgsPropertyKey*>( mProperties.value( keyName ) );
219  }
220 
221 
223  void removeKey( const QString & keyName )
224  {
225  delete mProperties.take( keyName );
226  }
227 
233  QgsPropertyValue * setValue( const QString & name, const QVariant & value )
234  {
235  delete mProperties.take( name );
236  mProperties.insert( name, new QgsPropertyValue( value ) );
237 
238  return dynamic_cast<QgsPropertyValue*>( mProperties.value( name ) );
239  }
240 
246  QgsPropertyValue * setValue( const QVariant & value )
247  {
248  return setValue( name(), value );
249  }
250 
251 
252 
253  void dump( int tabs = 0 ) const;
254 
255  bool readXML( QDomNode & keyNode );
256 
257  bool writeXML( const QString &nodeName, QDomElement & element, QDomDocument & document );
258 
260  int count() const { return mProperties.count(); }
261 
263  /* virtual */ bool isEmpty() const { return mProperties.isEmpty(); }
264 
266  virtual bool isKey() const { return true; }
267 
269  virtual bool isValue() const { return false; }
270 
272  void entryList( QStringList & entries ) const;
273 
275  void subkeyList( QStringList & entries ) const;
276 
282  bool isLeaf() const;
283 
285  virtual void clear()
286  {
287  mName = "";
288  clearKeys();
289  }
290 
292  virtual void clearKeys()
293  {
294  qDeleteAll( mProperties );
295  mProperties.clear();
296  }
297 
298  QgsProperty * find( QString & propertyName )
299  {
300  return mProperties.value( propertyName );
301  }
302 
303  private:
304 
306  QString mName;
307 
309  QHash < QString, QgsProperty* > mProperties;
310 
311 }; // class QgsPropertyKey
312 
313 #endif