33 #include <QtCore/QAbstractEventDispatcher>
34 #include <QtCore/QTimer>
35 #include <QtCore/QFile>
37 #include <QtGui/QLayout>
38 #include <QtGui/QTreeView>
39 #include <QtGui/QStandardItemModel>
40 #include <QtGui/QStandardItem>
41 #include <QtGui/QPainter>
43 #include <kapplication.h>
44 #include <kmessagebox.h>
46 #include <ktoolinvocation.h>
64 :
QWidget(parent), mOptionDialog(0), mPopup(0), mTimer(0)
66 connect(&mDiskList , SIGNAL(readDFDone()),
68 connect(&mDiskList , SIGNAL(criticallyFull(
DiskEntry*)),
69 this, SLOT (criticallyFull(
DiskEntry*)) );
71 m_columnList.append(
Column( QLatin1String(
"Icon" ), QLatin1String(
"" ), 20,
IconCol ));
72 m_columnList.append(
Column( QLatin1String(
"Device" ), i18nc(
"Device of the storage",
"Device"), 100,
DeviceCol ));
73 m_columnList.append(
Column( QLatin1String(
"Type" ), i18nc(
"Filesystem on storage",
"Type"), 80,
TypeCol ));
74 m_columnList.append(
Column( QLatin1String(
"Size" ), i18nc(
"Total size of the storage",
"Size"), 80,
SizeCol ));
75 m_columnList.append(
Column( QLatin1String(
"MountPoint" ), i18nc(
"Mount point of storage",
"Mount Point"), 120,
MountPointCol ));
76 m_columnList.append(
Column( QLatin1String(
"Free" ), i18nc(
"Free space in storage",
"Free"), 80,
FreeCol ));
77 m_columnList.append(
Column( QLatin1String(
"Full%" ), i18nc(
"Used storage space in %",
"Full %"), 50,
FullCol ));
78 m_columnList.append(
Column( QLatin1String(
"UsageBar" ), i18nc(
"Usage graphical bar",
"Usage"), 200,
UsageBarCol ));
83 QVBoxLayout *topLayout =
new QVBoxLayout(
this );
84 topLayout->setSpacing( 0 );
85 topLayout->setMargin( 0 );
87 m_listModel =
new QStandardItemModel(
this );
89 m_sortModel->setSourceModel( m_listModel );
91 m_listWidget =
new QTreeView(
this );
92 m_listWidget->setModel( m_sortModel );
96 m_listWidget->setItemDelegate( m_itemDelegate );
97 m_listWidget->setRootIsDecorated(
false );
98 m_listWidget->setSortingEnabled(
true );
99 m_listWidget->setContextMenuPolicy( Qt::CustomContextMenu );
100 m_listWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
102 topLayout->addWidget( m_listWidget );
104 connect( m_listWidget, SIGNAL(customContextMenuRequested(QPoint)),
105 this, SLOT(contextMenuRequested(QPoint)));
109 mIsTopLevel = QLatin1String(parent->metaObject()->className()) == QLatin1String(
"KDFTopLevel" ) ?
true :
false;
121 delete m_itemDelegate;
125 void KDFWidget::makeColumns(
void )
129 Q_FOREACH(
const Column &c, m_columnList){
132 m_listModel->setHorizontalHeaderLabels( columns );
157 KConfigGroup config( &m_config,
"KDiskFree" );
161 Q_FOREACH(
const Column &c, m_columnList){
162 if( !m_listWidget->isColumnHidden( c.
number ) )
163 config.writeEntry( c.
name, m_listWidget->columnWidth(c.
number) );
166 config.writeEntry(
"SortColumn", m_sortModel->sortColumn());
167 config.writeEntry(
"SortOrder", (
int)m_sortModel->sortOrder());
170 QHeaderView * header = m_listWidget->header();
171 QList<int> sectionIndices;
172 for (
int i = 0; i < header->count(); i++) {
173 sectionIndices.append(header->visualIndex(i));
175 config.writeEntry(
"HeaderSectionIndices", sectionIndices);
191 KConfigGroup config(KGlobal::config(),
"KDiskFree");
192 Q_FOREACH(
const Column &c, m_columnList){
194 m_listWidget->setColumnWidth( c.
number, width );
197 KConfigGroup config_visible(KGlobal::config(),
"KDFConfig");
198 Q_FOREACH(
const Column &c, m_columnList){
199 bool visible = config_visible.readEntry( c.
name ,
true );
200 m_listWidget->setColumnHidden( c.
number, !visible );
203 int sortColumn = config.readEntry(
"SortColumn",0);
204 int sortOrder = config.readEntry(
"SortOrder",(
int)Qt::AscendingOrder);
205 m_listWidget->sortByColumn(sortColumn,Qt::SortOrder(sortOrder));
210 QHeaderView * header = m_listWidget->header();
211 QList<int> sectionIndices;
212 sectionIndices = config.readEntry(
"HeaderSectionIndices",sectionIndices);
213 if (sectionIndices.count() == header->count()) {
214 for (
int i = 0; i < header->count(); i++) {
215 int sectionIndex = sectionIndices.at(i);
216 int oldVisualIndex = header->visualIndex(sectionIndex);
217 header->moveSection(oldVisualIndex,i);
232 if( mIsTopLevel ==
true )
234 if( mOptionDialog == 0 )
237 if( mOptionDialog == 0 )
241 connect( mOptionDialog, SIGNAL(valueChanged()),
244 mOptionDialog->show();
252 void KDFWidget::setUpdateFrequency(
int frequency )
258 QAbstractEventDispatcher::instance()->unregisterTimers(
this);
261 startTimer( frequency * 1000 );
298 m_listModel->removeRows(0,m_listModel->rowCount());
302 for (; itr != end; ++itr)
306 QString size,percent;
309 percent = KGlobal::locale()->formatNumber(disk->
percentFull(), 1) + QLatin1Char(
'%' );
314 percent = i18n(
"N/A");
318 bool root = !disk->
mountOptions().contains(QLatin1String(
"user" ), Qt::CaseInsensitive);
320 QStandardItem * IconItem =
new QStandardItem( generateIcon(disk->
iconName(), root, disk->
mounted() ), QLatin1String(
"" ) );
322 QStandardItem * DeviceItem =
new QStandardItem( disk->
deviceName() );
324 QStandardItem * TypeItem =
new QStandardItem( disk->
fsType() );
326 QStandardItem * SizeItem =
new QStandardItem( size );
327 SizeItem->setData( disk->
kBSize(), Qt::UserRole );
329 QStandardItem * MountPointItem =
new QStandardItem( disk->
mountPoint() );
331 QStandardItem * FreeItem =
new QStandardItem( disk->
prettyKBAvail() );
332 FreeItem->setData( disk->
kBAvail(), Qt::UserRole );
334 QStandardItem * FullItem =
new QStandardItem( percent );
335 FullItem->setData( disk->
percentFull() , Qt::UserRole );
337 QStandardItem * UsageBarItem =
new QStandardItem( QLatin1String(
"" ) );
338 UsageBarItem->setData( disk->
percentFull(), Qt::UserRole );
340 m_listModel->appendRow( QList<QStandardItem*>() << IconItem << DeviceItem << TypeItem << SizeItem << MountPointItem <<
341 FreeItem << FullItem << UsageBarItem);
350 QIcon KDFWidget::generateIcon( QString iconName,
bool mode,
bool mounted)
352 QPixmap pix = SmallIcon(iconName);
354 QPainter painter(&pix);
357 painter.drawPixmap( QRect(0,6,10,10), SmallIcon(QLatin1String(
"object-locked" )) );
360 painter.drawPixmap( QRect(6,6,12,12) , SmallIcon(QLatin1String(
"emblem-mounted" )) );
367 void KDFWidget::criticallyFull(
DiskEntry *disk )
371 QString msg = i18n(
"Device [%1] on [%2] is critically full.",
373 KMessageBox::sorry(
this, msg, i18nc(
"Warning device getting critically full",
"Warning"));
377 DiskEntry * KDFWidget::selectedDisk( QModelIndex index )
379 if( !index.isValid() )
382 QStandardItem * itemDevice = m_listModel->item( index.row() ,
DeviceCol );
383 QStandardItem * itemMountPoint = m_listModel->item( index.row() ,
MountPointCol );
388 int pos = mDiskList.
find( disk );
391 return mDiskList.
at(pos);
395 void KDFWidget::contextMenuRequested(
const QPoint &p )
400 QModelIndex index = m_listWidget->indexAt( p );
402 if( !index.isValid() )
404 QList<QModelIndex> selected = m_listWidget->selectionModel()->selectedIndexes();
405 if ( selected.size() > 0 )
406 index = selected.at(0);
411 index = m_sortModel->mapToSource( index );
414 DiskEntry * disk = selectedDisk( index );
419 mPopup =
new KMenu( 0 );
421 QAction *mountPointAction = mPopup->addAction( i18n(
"Mount Device") );
422 QAction *umountPointAction = mPopup->addAction( i18n(
"Unmount Device") );
423 mPopup->addSeparator();
424 QAction *openFileManagerAction = mPopup->addAction( i18n(
"Open in File Manager") );
425 mountPointAction->setEnabled( !disk->
mounted() );
426 umountPointAction->setEnabled( disk->
mounted() );
427 openFileManagerAction->setEnabled( disk->
mounted() );
428 QAction *position = mPopup->exec( m_listWidget->mapToGlobal(p) );
430 bool openFileManager =
false;
438 else if( position == mountPointAction || position == umountPointAction )
440 QStandardItem * SizeItem = m_listModel->item( index.row() ,
SizeCol );
441 SizeItem->setText( i18n(
"MOUNTING") );
443 QStandardItem * FreeItem = m_listModel->item( index.row() ,
FreeCol );
444 FreeItem->setText( i18n(
"MOUNTING") );
446 QStandardItem * IconItem = m_listModel->item( index.row() ,
IconCol );
447 IconItem->setIcon( SmallIcon(QLatin1String(
"user-away" )) );
455 && (position == mountPointAction) )
457 openFileManager =
true;
463 else if( position == openFileManagerAction )
465 openFileManager =
true;
468 if( openFileManager ==
true )
470 kDebug() <<
"opening filemanager" ;
474 int pos = cmd.indexOf(QLatin1String(
"%m" ));
477 cmd = cmd.replace( pos, 2, KShell::quoteArg(disk->
mountPoint()) ) + QLatin1String(
" &" );
481 cmd += QLatin1Char(
' ' ) + KShell::quoteArg(disk->
mountPoint()) + QLatin1String(
" &" );
483 system( QFile::encodeName(cmd) );
492 if( position != openFileManagerAction )
499 void KDFWidget::invokeHelp()
501 KToolInvocation::invokeHelp(QLatin1String(
"" ), QLatin1String(
"kcontrol/kdf" ));
504 #include "kdfwidget.moc"
QList< DiskEntry * >::const_iterator DisksConstIterator
QString mountOptions() const
DisksConstIterator disksConstIteratorBegin()
DiskEntry * at(uint index)
bool openFileManager(void)
qulonglong kBAvail() const
QString prettyKBSize() const
QString prettyKBAvail() const
DisksConstIterator disksConstIteratorEnd()
float percentFull() const
qulonglong kBSize() const
QString fileManager(void)
QString mountPoint() const
void deleteAllMountedAt(const QString &mountpoint)
int find(DiskEntry *disk)
QString deviceName() const
int updateFrequency(void)
void setMountPoint(const QString &mountPoint)
void setUpdatesDisabled(bool disable)
Updated need to be disabled sometimes to avoid pulling the DiskEntry out from the popupmenu handler...
void updateConfiguration(void)