diff options
Diffstat (limited to 'kmail/kcursorsaver.h')
-rw-r--r-- | kmail/kcursorsaver.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/kmail/kcursorsaver.h b/kmail/kcursorsaver.h new file mode 100644 index 000000000..930cab6f0 --- /dev/null +++ b/kmail/kcursorsaver.h @@ -0,0 +1,61 @@ +#ifndef kcursorsaver_h +#define kcursorsaver_h + +#include <qcursor.h> +#include <qapplication.h> + +/** + * @short sets a cursor and makes sure it's restored on destruction + * Create a KCursorSaver object when you want to set the cursor. + * As soon as it gets out of scope, it will restore the original + * cursor. + */ +class KCursorSaver : public Qt +{ +public: + /// constructor taking QCursor shapes + KCursorSaver(Qt::CursorShape shape) { + QApplication::setOverrideCursor( QCursor(shape) ); + inited = true; + } + + /// copy constructor. The right side won't restore the cursor + KCursorSaver( const KCursorSaver &rhs ) { + *this = rhs; + } + + /// restore the cursor + ~KCursorSaver() { + if (inited) + QApplication::restoreOverrideCursor(); + } + + /// call this to explitly restore the cursor + inline void restoreCursor(void) { + QApplication::restoreOverrideCursor(); + inited = false; + } + +protected: + void operator=( const KCursorSaver &rhs ) { + inited = rhs.inited; + rhs.inited = false; + } + +private: + mutable bool inited; +}; + +/** + * convenience functions + */ +namespace KBusyPtr { + inline KCursorSaver idle() { + return KCursorSaver(QCursor::ArrowCursor); + } + inline KCursorSaver busy() { + return KCursorSaver(QCursor::WaitCursor); + } +} + +#endif /*kbusyptr_h_*/ |