animated busy pointer

svn path=/trunk/kdenetwork/kmail/; revision=225
wilder-work
Stefan Taferner 29 years ago
parent defd6f44a9
commit 8d8d9ea4a3
  1. 139
      kbusyptr.cpp
  2. 42
      kbusyptr.h

@ -0,0 +1,139 @@
// animated busy pointer
#include "kbusyptr.h"
#include <kapp.h>
#include <qcursor.h>
#include <qtimer.h>
//-----------------------------------------------------------------------------
KBusyPtr :: KBusyPtr (KApplication* aApp)
{
app = aApp;
if (!app) printf ("KBusyPtr error: KApplication required\n");
busyLevel = 0;
numCursors = 0;
frameDelay = 500;
cursorList = NULL;
bitmapList = NULL;
loadCursor("./pics/stopwatch.xbm","./pics/stopwatchMask.xbm");
//connect(timer, SIGNAL(timeout()), this, SLOT(timeout()));
}
//-----------------------------------------------------------------------------
KBusyPtr :: ~KBusyPtr()
{
if (cursorList) delete cursorList;
if (bitmapList) delete bitmapList;
cursorList = NULL;
bitmapList = NULL;
}
//-----------------------------------------------------------------------------
void KBusyPtr :: busy (void)
{
KAlarmTimer* kat;
if (busyLevel <= 0)
{
currentCursor = 0;
if (!cursorList)
{
app->setOverrideCursor(waitCursor);
}
else
{
app->setOverrideCursor(cursorList[currentCursor]);
start(500);
}
}
busyLevel++;
}
//-----------------------------------------------------------------------------
void KBusyPtr :: idle (void)
{
busyLevel--;
if (busyLevel < 0) busyLevel = 0;
if (busyLevel <= 0)
{
stop();
app->restoreOverrideCursor();
}
}
//-----------------------------------------------------------------------------
void KBusyPtr :: timerEvent (void)
{
if (busyLevel <= 0) return;
if (++currentCursor >= numCursors) currentCursor = 0;
if (cursorList)
app->setOverrideCursor(cursorList[currentCursor], TRUE);
}
//-----------------------------------------------------------------------------
bool KBusyPtr :: loadBitmap (QBitmap& bm, const QString& filename)
{
QString f;
bool rc;
if (filename[0]=='/' || filename[0]=='.')
{
f = filename;
}
else
{
f = kapp->kdedir();
f.detach();
f += "/lib/pics/";
f += filename;
}
rc = bm.load(f);
if (!rc) printf ("ERROR: cannot load bitmap %s\n", f.data());
return rc;
}
//-----------------------------------------------------------------------------
void KBusyPtr :: loadCursor (const char* cursorName,const char* maskName)
{
int i, ix, iy, numX, numY, x, y;
QBitmap map, mask;
QBitmap cmap(16,16), cmask(16,16);
numCursors = 0;
if (!loadBitmap(map,cursorName)) return;
if (!loadBitmap(mask,maskName)) return;
numX = map.width() >> 4;
numY = map.height() >> 4;
numCursors = numX * numY;
if (bitmapList) delete[] bitmapList;
bitmapList = new QBitmap[numCursors](16,16);
if (cursorList) delete[] cursorList;
cursorList = new QCursor[numCursors];
for (i=0,iy=0,y=0; iy<numY; iy++, y+=16)
{
for (ix=0,x=0; ix<numX; ix++, x+=16, i++)
{
bitBlt(&cmap, 0, 0, &map, x, y, 16, 16);
bitBlt(&cmask, 0, 0, &mask, x, y, 16, 16);
cursorList[i] = QCursor(cmap, cmask, 8, 8);
}
}
}
#include "kbusyptr.moc"

@ -0,0 +1,42 @@
/* animated busy pointer handling
*/
#ifndef kbusyptr_h_
#define kbusyptr_h_
#include "kalarmtimer.h"
class KApplication;
class QCursor;
class KBusyPtr: public KAlarmTimer
{
Q_OBJECT;
public:
KBusyPtr(KApplication*);
virtual ~KBusyPtr();
virtual void busy(void);
virtual void idle(void);
virtual void loadCursor(const char* cursorName, const char* maskName);
// Load cursor from given bitmap files. When the filename
// is relative the $KDEDIR/lib/pics directory is searched
protected:
virtual void timerEvent(void);
private:
bool loadBitmap(QBitmap& bitmap, const QString& fileName);
protected:
KApplication* app;
int busyLevel;
int numCursors;
int frameDelay;
int currentCursor;
QCursor* cursorList;
QBitmap* bitmapList;
};
#endif /*kbusyptr_h_*/
Loading…
Cancel
Save