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

Class Index

kdf'DockWidget (./kdeutils/kdf/kwikdisk.h:86)

class DockWidget : public QLabel
{ 
  Q_OBJECT

  public:
    DockWidget(QWidget *parent=0, const char *name=0);
    ~DockWidget( void );

  public slots:
    void loadSettings();

  private slots:
    void criticallyFull(DiskEntry *disk);
    void toggleMount( void );
    void settingsBtnClicked( void );
    void invokeHTMLHelp( void );
    void quit( void );
    void startKDF( void );
    void updateDF( void );
    void updateDFDone( void );
    void setUpdateFrequency( int frequency );
    void sysCallError(DiskEntry *disk, int errno);

  protected:
    void mousePressEvent(QMouseEvent *);
    void  timerEvent( QTimerEvent * );

  private:
    DiskEntry *selectedDisk( void );
    void showPopupMenu( void );

  signals:
    void quitProgram( void );

  private:
    MyPopupMenu   *mPopupMenu;
    COptionDialog *mOptionDialog;
    bool mReadingDF;
    bool mDirty;         
    DiskList mDiskList;
    CStdOption mStd;
};


/***************************************************************/

kdf'DockWidget::DockWidget() (./kdeutils/kdf/kwikdisk.cpp:167)

DockWidget::DockWidget(QWidget *parent, const char *name)
  : QLabel(parent,name), mPopupMenu(0), mOptionDialog(0), mReadingDF(false),
    mDirty(true)
{
  connect( &mDiskList, SIGNAL(readDFDone()), this, SLOT(updateDFDone()) );
  connect( &mDiskList , SIGNAL(criticallyFull(DiskEntry*)),
           this, SLOT(criticallyFull(DiskEntry*)) );
  loadSettings();
}



kdf'DockWidget::~DockWidget() (./kdeutils/kdf/kwikdisk.cpp:178)

DockWidget::~DockWidget( void ) 
{ 
  delete mPopupMenu; 
}



/***************************************************************************
  * reads the KConfig
**/

kdf'DockWidget::loadSettings() (./kdeutils/kdf/kwikdisk.cpp:188)

void DockWidget::loadSettings( void )
{
  mStd.updateConfiguration();
  setUpdateFrequency( mStd.updateFrequency() );
}

 
/**************************************************************************
  * connected with diskList
**/

kdf'DockWidget::criticallyFull() (./kdeutils/kdf/kwikdisk.cpp:198)

void DockWidget::criticallyFull( DiskEntry *disk )
{
  if( mStd.popupIfFull() == true )
  {
    QString msg = i18n("Device [%1] on [%1] is getting critically full!").
      arg(disk->deviceName()).arg(disk->mountPoint());
    KMessageBox::sorry( this, msg, i18n("Warning"));
  }
}




kdf'DockWidget::selectedDisk() (./kdeutils/kdf/kwikdisk.cpp:210)

DiskEntry *DockWidget::selectedDisk( void )
{
  if( mPopupMenu == 0 || mPopupMenu->activeIndex() == -1 )
  {
    return( 0 );
  }
 
  return( mDiskList.at(mPopupMenu->activeIndex()) );
}



/***************************************************************************
  * resets the timer for automatic df-refreshes
**/

kdf'DockWidget::setUpdateFrequency() (./kdeutils/kdf/kwikdisk.cpp:225)

void DockWidget::setUpdateFrequency(int frequency )
{
  //
  // Kill current timer and restart it if the frequency is
  // larger than zero.
  //
  killTimers();
  if( frequency > 0 )
  {
    startTimer( frequency * 1000 );
  }
}

/***************************************************************************
 * Mark the list as dirty thus forcing a reload the next time the 
 * popup menu is about to become visible. Note: A current visible popup
 * will not be update now.
 **/

kdf'DockWidget::timerEvent() (./kdeutils/kdf/kwikdisk.cpp:243)

void DockWidget::timerEvent(QTimerEvent *) 
{ 
  mDirty = true;
}



kdf'DockWidget::startKDF() (./kdeutils/kdf/kwikdisk.cpp:249)

void DockWidget::startKDF( void ) 
{
  system("kdf &");
}



kdf'DockWidget::mousePressEvent() (./kdeutils/kdf/kwikdisk.cpp:255)

void DockWidget::mousePressEvent( QMouseEvent * )
{ 
  if( mPopupMenu != 0 && mDirty == false )
  {
    showPopupMenu();
  }
  else
  {
    updateDF();
  }
}



kdf'DockWidget::sysCallError() (./kdeutils/kdf/kwikdisk.cpp:268)

void DockWidget::sysCallError( DiskEntry *disk, int errno )
{ 
  if( errno != 0 )
  {
    KMessageBox::sorry( this, disk->lastSysError() );
  }
}


/***************************************************************************
  * checks fstab & df 
**/

kdf'DockWidget::updateDF() (./kdeutils/kdf/kwikdisk.cpp:280)

void DockWidget::updateDF( void )
{
  mReadingDF = true;
  mDiskList.readFSTAB();
  mDiskList.readDF(); 
}



kdf'DockWidget::toggleMount() (./kdeutils/kdf/kwikdisk.cpp:288)

void DockWidget::toggleMount( void )
{
  DiskEntry *disk = selectedDisk();
  if( disk == 0 )
  {
    return;
  }

  int val = disk->toggleMount();
  if( val != 0 )
  {
    KMessageBox::error( this, disk->lastSysError() );
  }
  else if( mStd.openFileManager() == true && disk->mounted() == false )
  {
    if( mStd.fileManager().isEmpty() == false ) 
    {
      QString cmd = mStd.fileManager();
      int pos = cmd.find("%m");
      if( pos > 0 )
      {
	cmd = cmd.replace( pos, 2, disk->mountPoint() ) + " &";
      }
      else
      {
	cmd += " " + disk->mountPoint() +" &";
      }
      system( cmd.latin1() );
    }
  }
  mDirty = true;
}



kdf'DockWidget::updateDFDone() (./kdeutils/kdf/kwikdisk.cpp:322)

void DockWidget::updateDFDone( void )
{ 
  mReadingDF = false;
  mDirty     = false;

  if (mPopupMenu!=0) delete mPopupMenu;
  mPopupMenu = new MyPopupMenu; CHECK_PTR(mPopupMenu);

  for( DiskEntry *disk = mDiskList.first(); disk!=0; disk = mDiskList.next()) 
  {
    QString *toolTipText = new QString( i18n("%1 (%2) %3 on %4").
      arg( disk->mounted() ? i18n("Unmount") : i18n("Mount")).
      arg(disk->fsType()).arg(disk->deviceName()).arg(disk->mountPoint()) );
    if( toolTipText == 0 ) { return; }

    QString entryName = disk->mountPoint();
    if( disk->mounted() )
    {
      entryName += QString("   [%1]").arg(disk->prettyKBAvail());
    }
    int id = mPopupMenu->insertItem("",this, SLOT(toggleMount()) );

    QPixmap *pix = new QPixmap(SmallIcon(disk->iconName()));
 
    if( getuid() !=0 && disk->mountOptions().find("user",0, false) == -1 ) 
    {
      //
      // Special root icon, normal user canīt mount.
      //
      // 2000-01-23 Espen Sand
      // Careful here: If the mask has not been defined we can
      // not use QPixmap::mask() because it returns 0 => segfault
      //
      if( pix->mask() != 0 )
      {
	QBitmap *bm = new QBitmap(*(pix->mask()));
	if( bm != 0 ) 
	{ 
	  QPainter qp( bm );
	  qp.setPen(QPen(white,1));
	  qp.drawRect(0,0,bm->width(),bm->height());
	  qp.end();
	  pix->setMask(*bm);
	}
	QPainter qp( pix );
	qp.setPen(QPen(red,1));
	qp.drawRect(0,0,pix->width(),pix->height());
	qp.end();
      }
      mPopupMenu->disconnectItem(id,disk,SLOT(toggleMount()));
      *toolTipText = i18n("Sorry, you must be root to mount this disk");
    }

    mPopupMenu->changeItem(*pix,entryName,id);    
    // mPopupMenu->changeItem(DevIcon(disk->iconName()),entryName,id);    
    connect(disk, SIGNAL(sysCallError(DiskEntry *, int) ),
            this, SLOT(sysCallError(DiskEntry *, int)) );
    mPopupMenu->setToolTip(id, toolTipText );
  }

  mPopupMenu->insertSeparator();

  mPopupMenu->insertItem(
    UserIcon( "kdf" ),
    i18n("&Start KDiskFree"), this, SLOT(startKDF()),0);

  mPopupMenu->insertItem(
    BarIcon( "options" ),
    i18n("&Customize"), this, SLOT(settingsBtnClicked()),0);

  mPopupMenu->insertItem(
    BarIcon( "help" ),
    i18n("&Help"), this, SLOT(invokeHTMLHelp()),0);

  mPopupMenu->insertSeparator();

  mPopupMenu->insertItem(
    BarIcon( "exit" ),
    i18n("&Quit"), this, SLOT(quit()) );

  mPopupMenu->move(-1000,-1000);
  showPopupMenu();

  setCursor(ArrowCursor);
}



kdf'DockWidget::showPopupMenu() (./kdeutils/kdf/kwikdisk.cpp:409)

void DockWidget::showPopupMenu( void )
{
  if( mPopupMenu == 0 )
  {
    return;
  }
  
  QRect g = KWM::geometry( winId() );
  QSize s = mPopupMenu->sizeHint();

  if( g.x() > QApplication::desktop()->width()/2 &&
      g.y() + s.height() > QApplication::desktop()->height() )
  {
    mPopupMenu->popup(QPoint( g.x(), g.y() - s.height()));
  } 
  else
  {
    mPopupMenu->popup(QPoint( g.x() + g.width(), g.y() + g.height())); 
  }
}





/***************************************************************************
  * pops up the SettingsBox if the settingsBtn is clicked
**/

kdf'DockWidget::settingsBtnClicked() (./kdeutils/kdf/kwikdisk.cpp:437)

void DockWidget::settingsBtnClicked( void )
{
  if( mOptionDialog == 0 )
  {
    mOptionDialog = new COptionDialog( this, "options", false );
    if( mOptionDialog == 0 ) { return; }
    connect( mOptionDialog, SIGNAL(valueChanged()), 
	     this, SLOT(loadSettings()) );
  }
  mOptionDialog->show();
}



kdf'DockWidget::invokeHTMLHelp() (./kdeutils/kdf/kwikdisk.cpp:450)

void DockWidget::invokeHTMLHelp( void ) 
{
  kapp->invokeHTMLHelp("kcontrol/kdf/index.html","");
}



kdf'DockWidget::quit() (./kdeutils/kdf/kwikdisk.cpp:456)

void DockWidget::quit( void ) 
{
  emit quitProgram();
}


/***************************************************************/