#ifndef FORM_EDITOR_PROPERTIES__COMMON_H #define FORM_EDITOR_PROPERTIES__COMMON_H #include #include /////////////////////////////////////////////////////////////////////////////////////////////// // For PropertyCaller automatic argument conversion /////////////////////////////////////////////////////////////////////////////////////////////// class SProperty { public: SProperty(const Vector& args) { _args <<= args; } SProperty& operator=(const Value& v) { Return = v; return *this; } Value GetArg(int i) { if (i < 0 || i >= _args.GetCount()) return Value(); return _args[i]; } Value Return; private: Vector _args; }; template void PropReturn(P p, SProperty& e) { } template<> inline void PropReturn(EscValue p, SProperty& e) { e = p.ToString(); } template<> inline void PropReturn(WString p, SProperty& e) { e = p.ToString(); } template<> inline void PropReturn(String p, SProperty& e) { e = p; } template<> inline void PropReturn(double p, SProperty& e) { e = p; } template<> inline void PropReturn(dword p, SProperty& e) { e = (int)p; } template<> inline void PropReturn(char* p, SProperty& e) { e = String(p); } template<> inline void PropReturn(bool p, SProperty& e) { e = (int)p; } template<> inline void PropReturn(long p, SProperty& e) { e = (int)p; } template<> inline void PropReturn(int p, SProperty& e) { e = p; } template<> inline void PropReturn(Size p, SProperty& e) { e = p; } template<> inline void PropReturn(Rect p, SProperty& e) { e = p; } template<> inline void PropReturn(Point p, SProperty& e) { e = p; } template<> inline void PropReturn(Color p, SProperty& e) { e = p; } template<> inline void PropReturn(const EscValue& p, SProperty& e){ e = p.ToString();} template<> inline void PropReturn(const WString& p, SProperty& e) { e = p.ToString(); } template<> inline void PropReturn(const String& p, SProperty& e) { e = p; } template<> inline void PropReturn(const double& p, SProperty& e) { e = p; } template<> inline void PropReturn(const dword& p, SProperty& e) { e = (int)p; } template<> inline void PropReturn(const char* p, SProperty& e) { e = String(p); } template<> inline void PropReturn(const bool& p, SProperty& e) { e = p; } template<> inline void PropReturn(const long& p, SProperty& e) { e = (int)p; } template<> inline void PropReturn(const int& p, SProperty& e) { e = p; } template<> inline void PropReturn(const Size& p, SProperty& e) { e = p; } template<> inline void PropReturn(const Rect& p, SProperty& e) { e = p; } template<> inline void PropReturn(const Point& p, SProperty& e) { e = p; } template<> inline void PropReturn(const Color& p, SProperty& e) { e = p; } class ValueConvert { private: String _Str; Value _Val; public: virtual ~ValueConvert() {} ValueConvert(const Value& v) { if (IsString(v)) _Str = v.ToString(); else _Val = v; } operator const char*() const { return (const char*)_Str; } String ToString() const { return _Str; } operator String() const { return _Str; } operator Value() const { return _Val; } operator dword() const { return ScanInt(_Val.ToString()); } operator Color() const { if (_Val.GetType() == COLOR_V) return _Val; return Color(); } operator Point() const { if (_Val.GetType() == POINT_V) return _Val; return Point(); } operator Rect() const { if (_Val.GetType() == RECT_V) return _Val; return Rect(); } operator Size() const { if (_Val.GetType() == SIZE_V) return _Val; return Size(); } operator bool() const { return ToBool(_Val); } operator int () const { return ScanInt(_Val.ToString()); } operator double() const { return ScanDouble(_Val.ToString()); } }; #endif