protected:
WObject(){}
WObject(const WObject&){}
+ WObject(WObject&&){}
WObject(const QDomElement&){}
virtual ~WObject(){}
virtual QDomElement toXml(QDomDocument&,QString name="Object");
virtual WObject& operator=(const WObject&){return *this;}
+ virtual WObject& operator=(WObject&&){return *this;}
virtual void toXml(QDomDocument&,QDomElement&){}
/**helper for de-serializers: returns direct child elements with given tag name (necessary because QDomElement::elementsByTagName traverses all children)*/
#define WOBJECT(wob) public: \
wob():wob ## Abstract(){} \
wob(const wob&w):wob ## Abstract(w){} \
+ wob(wob&&w):wob ## Abstract(w){} \
wob(const wob ## Abstract&w):wob ## Abstract(w){} \
+ wob(wob ## Abstract&&w):wob ## Abstract(w){} \
wob(const QDomElement&w):wob ## Abstract(w){} \
wob& operator=(const wob&w){wob ## Abstract::operator=(w);return *this;} \
wob& operator=(const wob ## Abstract&w){wob ## Abstract::operator=(w);return *this;} \
+ wob& operator=(wob&&w){wob ## Abstract::operator=(w);return *this;} \
+ wob& operator=(wob ## Abstract&&w){wob ## Abstract::operator=(w);return *this;} \
private:\
QString tr(const char*text,const char*comment=nullptr)const{return QCoreApplication::translate("" # wob ,text,comment);}