You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.3 KiB
61 lines
1.3 KiB
#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_*/
|
|
|