Ilwis-Objects  1.0
GIS and Remote Sensing framework for data access and processing
 All Classes Functions Enumerations Pages
domain.h
1 #ifndef DOMAINDATA_H
2 #define DOMAINDATA_H
3 
4 #include "Kernel_global.h"
5 
6 namespace Ilwis {
7 
8 class Domain;
9 class Range;
10 
11 typedef Ilwis::IlwisData<Ilwis::Domain> IDomain;
12 
21 class KERNELSHARED_EXPORT Domain : public IlwisObject
22 {
23 public:
31  enum Containement{cSELF=1, cPARENT=2, cDECLARED=3, cNONE=0};
32 
36  Domain();
37 
43  Domain(const Resource& resource);
44 
52  bool isStrict() const;
53 
61  void setStrict(bool yesno);
62 
63  //override
64  virtual IlwisTypes valueType() const = 0;
65 
69  virtual QVariant impliedValue(const QVariant& v) const { return v ;}
70 
79  IDomain parent() const;
80 
89  virtual void setParent(const IDomain& dm);
90 
97  virtual Containement contains(const QVariant& value) const = 0;
98 
105  virtual bool isCompatibleWith(const IDomain& dom) const = 0;
106 
107  template<typename T=Range> QSharedPointer<T> range2range() const{
108  return this->getRange().dynamicCast<T>();
109  }
110 
116  virtual void range(Range *rng) = 0;
117 
136  static IlwisTypes ilwType(const QVariant &v);
137 
155  static IlwisTypes ilwType(const QString &impliedValue);
156 
157 protected:
158  void addChildDomain(quint64 idchild);
159  bool removeChildDomain(quint64 idchild);
160 
161  virtual QSharedPointer<Range> getRange() const = 0;
162  std::map<quint64, quint32> _childDomains;
163 private:
164  bool _strict;
165  IDomain _parentDomain;
166 };
167 }
168 
169 Q_DECLARE_METATYPE(Ilwis::IDomain)
170 
171 #endif // DOMAINDATA_H