36 #include <QtCore/QFile>
37 #include <QtCore/QAbstractEventDispatcher>
39 #include <QtGui/QPainter>
40 #include <QtGui/QPixmap>
41 #include <QtGui/QActionGroup>
44 #include <kapplication.h>
45 #include <kaboutdata.h>
46 #include <kcmdlineargs.h>
47 #include <kmessagebox.h>
50 #include <ktoolinvocation.h>
55 I18N_NOOP(
"KDE Free disk space utility");
70 contextMenu()->setTitle(i18n(
"KwikDisk"));
71 setIcon(KSystemTrayIcon::loadIcon(QLatin1String(
"kdf" )));
74 connect( &m_diskList, SIGNAL(readDFDone()),
this, SLOT(updateDFDone()) );
75 connect( &m_diskList, SIGNAL(criticallyFull(
DiskEntry*)),
78 connect(
this, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
79 SLOT(slotActivated(QSystemTrayIcon::ActivationReason)));
81 m_actionGroup =
new QActionGroup(
this );
82 connect( m_actionGroup, SIGNAL(triggered(QAction*)) ,
this, SLOT(toggleMount(QAction*)) );
84 m_actionSeparator = contextMenu()->addSeparator();
86 contextMenu()->addAction(
87 KSystemTrayIcon::loadIcon(QLatin1String(
"kdf" )),
88 i18n(
"&Start KDiskFree"),
this, SLOT(startKDF()));
90 contextMenu()->addAction(
91 KSystemTrayIcon::loadIcon(QLatin1String(
"configure" )),
92 i18n(
"&Configure KwikDisk..."),
this, SLOT(changeSettings()));
94 contextMenu()->addAction(
95 KSystemTrayIcon::loadIcon(QLatin1String(
"help-contents" )),
96 KStandardGuiItem::help().text(),
this, SLOT(invokeHelp()));
103 void KwikDisk::enterEvent(QEvent *)
109 void KwikDisk::leaveEvent(QEvent *)
115 void KwikDisk::slotActivated(QSystemTrayIcon::ActivationReason)
123 void KwikDisk::loadSettings()
131 void KwikDisk::setUpdateFrequency(
int frequency)
139 QAbstractEventDispatcher::instance()->unregisterTimers(
this);
142 startTimer(frequency * 1000);
151 void KwikDisk::timerEvent(QTimerEvent *)
157 void KwikDisk::updateDF()
166 void KwikDisk::clearDeviceActions()
168 QList<QAction*> listActions = m_actionGroup->actions();
169 QMutableListIterator<QAction*> it(listActions);
170 while( it.hasNext() )
172 QAction * action = it.next();
173 m_actionGroup->removeAction( action );
174 contextMenu()->removeAction( action );
178 void KwikDisk::updateDFDone()
185 clearDeviceActions();
191 for (; itr != end; ++itr)
195 QString toolTipText = QString::fromLatin1(
"%1 (%2) %3 on %4")
196 .arg( disk->
mounted() ? i18nc(
"Unmount the storage device",
"Unmount") : i18nc(
"Mount the storage device",
"Mount") )
197 .arg( disk->fsType().trimmed() ).arg( disk->deviceName().trimmed() ).arg( disk->mountPoint().trimmed() );
199 QString entryName = disk->
mountPoint().trimmed();
202 entryName += QString::fromLatin1(
"\t[%1]").arg(disk->
prettyKBAvail());
205 QAction * action =
new QAction(entryName, m_actionGroup);
206 action->setToolTip( toolTipText );
207 action->setData( itemNo );
210 QPixmap pix = KSystemTrayIcon::loadIcon(disk->
iconName()).pixmap( QSize(32,32) );
212 if( getuid() !=0 && !disk->
mountOptions().contains(QLatin1String(
"user" ),Qt::CaseInsensitive) )
214 QPainter painter( &pix );
215 painter.drawPixmap( QRect(0,0,16,16) , SmallIcon(QLatin1String(
"object-locked" )), QRect(0,0,16,16));
218 toolTipText = i18n(
"You must login as root to mount this disk");
219 action->setToolTip( toolTipText );
224 QPainter painter ( &pix );
225 painter.drawPixmap( QRect(8,8,16,16) , SmallIcon(QLatin1String(
"emblem-mounted" )), QRect(0,0,16,16) );
229 action->setIcon( pix );
233 contextMenu()->insertActions( m_actionSeparator, m_actionGroup->actions() );
237 void KwikDisk::toggleMount(QAction * action)
243 DiskEntry *disk = m_diskList.
at( action->data().toInt() );
256 kDebug() <<
"opening filemanager" ;
260 int pos = cmd.indexOf(QLatin1String(
"%m" ));
263 cmd = cmd.replace( pos, 2, KShell::quoteArg(disk->
mountPoint()) ) + QLatin1String(
" &" );
267 cmd += QLatin1Char(
' ' ) + KShell::quoteArg(disk->
mountPoint()) +QLatin1String(
" &" );
269 system( QFile::encodeName(cmd) );
275 void KwikDisk::criticallyFull(
DiskEntry *disk)
281 QString msg = i18n(
"Device [%1] on [%2] is critically full.",
283 KMessageBox::sorry( 0, msg, i18nc(
"Device is getting critically full",
"Warning"));
287 void KwikDisk::changeSettings()
289 if( m_optionDialog == 0 )
292 if( !m_optionDialog )
294 connect(m_optionDialog, SIGNAL(valueChanged()),
295 this, SLOT(loadSettings()));
297 m_optionDialog->show();
300 void KwikDisk::startKDF()
304 KRun::runCommand(QLatin1String(
"kdf" ),NULL);
307 void KwikDisk::invokeHelp()
309 KToolInvocation::invokeHelp(QLatin1String(
"" ), QLatin1String(
"kdf" ));
314 int main(
int argc,
char **argv)
317 KAboutData::License_GPL, ki18n(
"(C) 2004 Stanislav Karchebny"),
318 KLocalizedString(),
"http://utils.kde.org/projects/kdf",
319 "Stanislav.Karchebny@kdemail.net");
320 about.addAuthor( ki18n(
"Michael Kropfberger"), ki18n(
"Original author"),
321 "michael.kropfberger@gmx.net" );
322 about.addAuthor( ki18n(
"Espen Sand"), ki18n(
"KDE 2 changes"));
323 about.addAuthor( ki18n(
"Stanislav Karchebny"), ki18n(
"KDE 3 changes"),
324 "Stanislav.Karchebny@kdemail.net" );
325 KCmdLineArgs::init(argc, argv, &about);
327 KCmdLineOptions options;
328 KCmdLineArgs::addCmdLineOptions( options );
334 app.setQuitOnLastWindowClosed(
false );
342 #include "kwikdisk.moc"
QList< DiskEntry * >::const_iterator DisksConstIterator
QString mountOptions() const
DisksConstIterator disksConstIteratorBegin()
DiskEntry * at(uint index)
bool openFileManager(void)
static const char version[]
QString prettyKBAvail() const
DisksConstIterator disksConstIteratorEnd()
QString fileManager(void)
static const char description[]
QString mountPoint() const
int main(int argc, char **argv)
QString deviceName() const
Application Main Window (however in Tray)
int updateFrequency(void)
void updateConfiguration(void)