// animated busy pointer #include "kbusyptr.h" #include #include #include //----------------------------------------------------------------------------- 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