110 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			110 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #ifndef QT_HELPERS_HPP_ | ||
|  | #define QT_HELPERS_HPP_ | ||
|  | 
 | ||
|  | #include <stdexcept> | ||
|  | 
 | ||
|  | #include <QString> | ||
|  | #include <QMetaObject> | ||
|  | #include <QHostAddress> | ||
|  | #include <QDataStream> | ||
|  | #include <QMetaType> | ||
|  | #include <QMetaEnum> | ||
|  | 
 | ||
|  | #define ENUM_QDATASTREAM_OPS_DECL(CLASS, ENUM)				\ | ||
|  |   QDataStream& operator << (QDataStream&, CLASS::ENUM const&);			\ | ||
|  |   QDataStream& operator >> (QDataStream&, CLASS::ENUM&); | ||
|  | 
 | ||
|  | #define ENUM_QDATASTREAM_OPS_IMPL(CLASS, ENUM)				\ | ||
|  |   QDataStream& operator << (QDataStream& os, CLASS::ENUM const& v)		\ | ||
|  |   {									\ | ||
|  |     auto const& mo = CLASS::staticMetaObject;				\ | ||
|  |     return os << mo.enumerator (mo.indexOfEnumerator (#ENUM)).valueToKey (v); \ | ||
|  |   }									\ | ||
|  | 									\ | ||
|  |   QDataStream& operator >> (QDataStream& is, CLASS::ENUM& v)		\ | ||
|  |   {									\ | ||
|  |     char * buffer;							\ | ||
|  |     is >> buffer;							\ | ||
|  |     bool ok {false};							\ | ||
|  |     auto const& mo = CLASS::staticMetaObject;				\ | ||
|  |     auto const& me = mo.enumerator (mo.indexOfEnumerator (#ENUM)); \ | ||
|  |     if (buffer)								\ | ||
|  |       {									\ | ||
|  | 	v = static_cast<CLASS::ENUM> (me.keyToValue (buffer, &ok));	\ | ||
|  | 	delete [] buffer;						\ | ||
|  |       }									\ | ||
|  |     if (!ok)								\ | ||
|  |       {									\ | ||
|  | 	v = static_cast<CLASS::ENUM> (me.value (0));			\ | ||
|  |       }									\ | ||
|  |     return is;								\ | ||
|  |   } | ||
|  | 
 | ||
|  | #define ENUM_CONVERSION_OPS_DECL(CLASS, ENUM)	\ | ||
|  |   QString enum_to_qstring (CLASS::ENUM const&); | ||
|  | 
 | ||
|  | #define ENUM_CONVERSION_OPS_IMPL(CLASS, ENUM)				\ | ||
|  |   QString enum_to_qstring (CLASS::ENUM const& m)				\ | ||
|  |   {									\ | ||
|  |     auto const& mo = CLASS::staticMetaObject;				\ | ||
|  |     return QString {mo.enumerator (mo.indexOfEnumerator (#ENUM)).valueToKey (m)}; \ | ||
|  |   } | ||
|  | 
 | ||
|  | #if QT_VERSION >= 0x050500 | ||
|  | 
 | ||
|  | // Qt 5.5 now has Q_ENUM which registers enumns better | ||
|  | #define ENUM_QDEBUG_OPS_DECL(CLASS, ENUM) | ||
|  | #define ENUM_QDEBUG_OPS_IMPL(CLASS, ENUM) | ||
|  | 
 | ||
|  | #else | ||
|  | 
 | ||
|  | #define Q_ENUM(E) | ||
|  | 
 | ||
|  | #include <QDebug> | ||
|  | 
 | ||
|  | class QVariant; | ||
|  | 
 | ||
|  | #define ENUM_QDEBUG_OPS_DECL(CLASS, ENUM)				\ | ||
|  |   QDebug operator << (QDebug, CLASS::ENUM const&); | ||
|  | 
 | ||
|  | #define ENUM_QDEBUG_OPS_IMPL(CLASS, ENUM)				\ | ||
|  |   QDebug operator << (QDebug d, CLASS::ENUM const& m)				\ | ||
|  |   {									\ | ||
|  |     auto const& mo = CLASS::staticMetaObject;				\ | ||
|  |     return d << mo.enumerator (mo.indexOfEnumerator (#ENUM)).valueToKey (m); \ | ||
|  |   } | ||
|  | 
 | ||
|  | #endif | ||
|  | 
 | ||
|  | inline | ||
|  | void throw_qstring (QString const& qs) | ||
|  | { | ||
|  |   throw std::runtime_error {qs.toLocal8Bit ().constData ()}; | ||
|  | } | ||
|  | 
 | ||
|  | QString font_as_stylesheet (QFont const&); | ||
|  | 
 | ||
|  | // do what is necessary to change a dynamic property and trigger any | ||
|  | // conditional style sheet updates | ||
|  | void update_dynamic_property (QWidget *, char const * property, QVariant const& value); | ||
|  | 
 | ||
|  | template <class T> | ||
|  | class VPtr | ||
|  | { | ||
|  | public: | ||
|  |   static T * asPtr (QVariant v) | ||
|  |   { | ||
|  |     return reinterpret_cast<T *> (v.value<void *> ()); | ||
|  |   } | ||
|  | 
 | ||
|  |   static QVariant asQVariant(T * ptr) | ||
|  |   { | ||
|  |     return qVariantFromValue (reinterpret_cast<void *> (ptr)); | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | // Register some useful Qt types with QMetaType | ||
|  | Q_DECLARE_METATYPE (QHostAddress); | ||
|  | 
 | ||
|  | #endif |