Source Code (Use browser search to find items of interest.)

Class Index

kmail'KBusyPtr (./kdenetwork/kmail/kbusyptr.h:14)

class KBusyPtr: public KAlarmTimer
{
  Q_OBJECT

public:
  KBusyPtr();
  virtual ~KBusyPtr();

  /** Show busy pointer. Subsequent calls increase the "busy level" */
  virtual void busy(void);

  /** Hide busy pointer if the "busy level" is reduced to zero. */
  virtual void idle(void);

  /** Stop pointer animation. This is necessary for some system calls. */
  virtual void stopAnimation(void);

  /** Continue pointer animation. */
  virtual void continueAnimation(void);

  /** Load cursor from given bitmap files. When the filename is relative
    the $KDEDIR/lib/pics directory is searched. */
  virtual void loadCursor(const char* cursorName, const char* maskName);



protected:
  virtual void timerEvent(void);

private:
  bool loadBitmap(QBitmap& bitmap, const QString& fileName);

protected:
  KApplication* app;
  int busyLevel;
  int numCursors;
  int frameDelay;
  int currentCursor;
  bool animated;
  QCursor* cursorList;
  QBitmap* bitmapList;
};

kmail'KBusyPtr::KBusyPtr() (./kdenetwork/kmail/kbusyptr.cpp:14)

KBusyPtr :: KBusyPtr ()
{
  app = KApplication::kApplication();

  busyLevel  = 0;
  numCursors = 0;
  frameDelay = 500;
  cursorList = NULL;
  bitmapList = NULL;
  //animated   = TRUE;
  animated   = FALSE;

  loadCursor("stopwatch.xbm","stopwatchMask.xbm");

  //connect(timer, SIGNAL(timeout()), this, SLOT(timeout()));
}


//-----------------------------------------------------------------------------

kmail'KBusyPtr::~KBusyPtr() (./kdenetwork/kmail/kbusyptr.cpp:33)

KBusyPtr :: ~KBusyPtr()
{
  if (cursorList) delete[] cursorList;
  if (bitmapList) delete[] bitmapList;
  cursorList = NULL;
  bitmapList = NULL;
}


//-----------------------------------------------------------------------------

kmail'KBusyPtr::busy() (./kdenetwork/kmail/kbusyptr.cpp:43)

void KBusyPtr :: busy (void)
{
  if (busyLevel <= 0)
  {
    currentCursor = 0;
    if (!cursorList)
    {
      if (animated) kapp->setOverrideCursor(waitCursor);
      else kapp->setOverrideCursor(KCursor::waitCursor());
    }
    else
    {
      kapp->setOverrideCursor(cursorList[currentCursor]);
      if (animated) start(frameDelay);
    }
    kapp->processEvents(200);
  }
  busyLevel++;
}


//-----------------------------------------------------------------------------

kmail'KBusyPtr::idle() (./kdenetwork/kmail/kbusyptr.cpp:65)

void KBusyPtr :: idle (void)
{
  busyLevel--;
  if (busyLevel < 0) busyLevel = 0;

  if (busyLevel <= 0)
  {
    stop();
    kapp->restoreOverrideCursor();
    kapp->processEvents(200);
  }
}


//-----------------------------------------------------------------------------

kmail'KBusyPtr::timerEvent() (./kdenetwork/kmail/kbusyptr.cpp:80)

void KBusyPtr :: timerEvent (void)
{
  if (busyLevel <= 0) return;

  if (++currentCursor >= numCursors) currentCursor = 0;

  if (cursorList)
    kapp->setOverrideCursor(cursorList[currentCursor], TRUE);
}


//-----------------------------------------------------------------------------

kmail'KBusyPtr::stopAnimation() (./kdenetwork/kmail/kbusyptr.cpp:92)

void KBusyPtr :: stopAnimation (void)
{
  if (animated) stop();
  animated = FALSE;
}


//-----------------------------------------------------------------------------

kmail'KBusyPtr::continueAnimation() (./kdenetwork/kmail/kbusyptr.cpp:100)

void KBusyPtr :: continueAnimation (void)
{
  animated = TRUE;
  start(frameDelay);
}


//-----------------------------------------------------------------------------

kmail'KBusyPtr::loadBitmap() (./kdenetwork/kmail/kbusyptr.cpp:108)

bool KBusyPtr :: loadBitmap (QBitmap& bm, const QString& filename)
{
  QString f;
  bool rc;

  if (filename[0]=='/' || filename[0]=='.')
  {
    f = filename;
  }
  else 
  {
    f = locate("data", "kmail/pics/" + filename);
  }
  rc = bm.load(f);
  if (!rc) printf ("ERROR: cannot load bitmap %s\n", f.data());
  return rc;
}


//-----------------------------------------------------------------------------

kmail'KBusyPtr::loadCursor() (./kdenetwork/kmail/kbusyptr.cpp:128)

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;
  QSize size(16,16);
  bitmapList = new QBitmap[numCursors](size);
  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);
    }
  }
}