31 #include <QDataStream>
32 #include <QTextStream>
36 #include <QStringList>
71 virtual QString objectKind()
const = 0;
97 virtual bool setProperty(
const QString& pname,
const QVariant& value) = 0;
129 virtual bool hasFixedTypes()
const {
return false; }
155 virtual bool setSpecification(
const QByteArray& data) = 0;
164 KLFEnumType(
int initvalue = 0) : val(initvalue), enumVals()
172 inline int value()
const
176 inline void setValue(
int v)
181 inline QString enumValue()
const
183 if (val < 0 || val >= enumVals.
size()) {
184 klfWarning(
"Invalid value: "<<val<<
" for enum values "<<enumVals) ;
187 return enumVals[val];
323 virtual bool hasPropertyValue(
const QString& propName)
const;
331 virtual bool hasPropertyValue(
int propId)
const;
424 void setAllPropertiesFromByteArray(
const QByteArray& data);
458 ToStringUseHtml = 0x0001,
459 ToStringUseHtmlDiv = 0x0002,
460 ToStringQuoteValues = 0x0004,
461 ToStringAllProperties = 0x0008
467 virtual QString toString(uint toStringFlags = 0)
const;
472 int propertyMaxId()
const;
477 bool propertyIdRegistered(
int propId)
const;
482 bool propertyNameRegistered(
const QString& propertyName)
const;
487 int propertyIdForName(
const QString& propertyName)
const;
522 virtual void propertyValueChanged(
int propId,
const QVariant& oldValue,
530 virtual bool doSetProperty(
const QString& propname,
const QVariant& value);
543 virtual int doLoadProperty(
const QString& propname,
const QVariant& value);
548 void registerBuiltInProperty(
int propId,
const QString& propName)
const;
554 int registerProperty(
const QString& propertyName)
const;
605 static void registerBuiltInProperty(
const QString& propNameSpace,
int propId,
621 static int registerProperty(
const QString& propNameSpace,
const QString& propertyName);
630 static int propertyMaxId(
const QString& propNameSpace);
639 static bool propertyIdRegistered(
const QString& propNameSpace,
int propId);
648 static bool propertyNameRegistered(
const QString& propNameSpace,
const QString& propertyName);
662 static int propertyIdForName(
const QString& propNameSpace,
const QString& propertyName);
697 QString propertyNameSpace()
const {
return pPropNameSpace; }
715 static int internalRegisterProperty(
const QString& propNameSpace,
const QString& name,
765 : pPObj(pobj), pPropId(
propId)
769 : pPObj(other.pPObj), pPropId(other.pPropId)
779 : pPObj(pobj), pPropId(builtInPropId)
790 : pPObj(pobj), pPropId(builtInPropId)
798 return variantValue();
804 const T operator ()()
const
810 pPObj->setProperty(pPropId, v);
815 pPObj->setProperty(pPropId, QVariant::fromValue<T>(value));
821 return this->operator=(value.
value());
826 return pPObj->property(pPropId);
829 const T value()
const
834 template<
class VariantType>
835 const T value()
const
837 QVariant v = pPObj->property(pPropId);
838 return T(v.
value<VariantType>());
841 template<
class VariantType>
842 void set(
const T& value)
844 pPObj->setProperty(pPropId, QVariant::fromValue<VariantType>(value));
846 void set(
const T& value)
851 template<
class VariantType>
854 return (value<VariantType>() == other.
value<VariantType>());
858 return equals<T>(other);
863 return (value() == val);
867 return (value() == other.
value());
871 void init(
const QString& pname)
873 if (!pPObj->propertyIdRegistered(pPropId)) {
880 <<
" does not have name "<<pname<<
" !",
902 doregister(Register, name);
907 return doregister(Query, name);
911 enum Action { Query, Register };
912 static int doregister(Action action,
const char * name)
924 fprintf(stderr,
"ERRORORROOERROR: %s: what is your action?? `%d' for name `%s'\n",
936 #define KLF_DECLARE_POBJ_TYPE(TYPE) \
937 static KLFPObjRegisteredType __klf_pobj_regtype_##TYPE = KLFPObjRegisteredType(#TYPE) ;
944 doregister(Register, name);
949 return doregister(Query, name);
953 enum Action { Query, Register };
954 static int doregister(Action action,
const char * name)
966 fprintf(stderr,
"ERRORORROORORR: %s: what is your action?? `%d' for name `%s'\n",
974 #define KLF_DECLARE_SPECIFYABLE_TYPE(TYPE) \
975 static KLFSpecifyableRegisteredType __klf_specifyable_regtype_##TYPE = KLFSpecifyableRegisteredType(#TYPE) ;