42 #define YUILogComponent "qt-pkg"
46 #include <QHeaderView>
49 #include <zypp/ZYppFactory.h>
52 #include "YQPkgDiskUsageList.h"
53 #include "YQPkgDiskUsageWarningDialog.h"
68 #define MIN_FREE_MB_WARN 400
69 #define MIN_FREE_MB_PROXIMITY 700
71 #define MIN_PERCENT_WARN 90
72 #define MIN_PERCENT_PROXIMITY 80
74 #define OVERFLOW_MB_WARN 0
75 #define OVERFLOW_MB_PROXIMITY 300
78 typedef zypp::DiskUsageCounter::MountPointSet ZyppDuSet;
79 typedef zypp::DiskUsageCounter::MountPointSet::iterator ZyppDuSetIterator;
84 : QY2DiskUsageList( parent, true )
88 ZyppDuSet diskUsage = zypp::getZYpp()->diskUsage();
90 if ( diskUsage.empty() )
92 zypp::getZYpp()->setPartitions( zypp::DiskUsageCounter::detectMountPoints() );
93 diskUsage = zypp::getZYpp()->diskUsage();
97 for ( ZyppDuSetIterator it = diskUsage.begin();
98 it != diskUsage.end();
101 const ZyppPartitionDu & partitionDu = *it;
103 if ( ! partitionDu.readonly )
108 _items.insert( QString::fromUtf8(partitionDu.dir.c_str()), item );
112 resizeColumnToContents( nameCol() );
113 resizeColumnToContents( totalSizeCol() );
115 resizeColumnToContents( freeSizeCol() );
117 sortByColumn( percentageBarCol(), Qt::DescendingOrder );
119 header()->setSectionResizeMode( nameCol(), QHeaderView::Stretch );
120 header()->setSectionResizeMode( QHeaderView::Interactive );
130 ZyppDuSet diskUsage = zypp::getZYpp()->diskUsage();
132 for ( ZyppDuSetIterator it = diskUsage.begin();
133 it != diskUsage.end();
136 const ZyppPartitionDu & partitionDu = *it;
142 yuiError() <<
"No entry for mount point " << partitionDu.dir << endl;
145 resizeColumnToContents( totalSizeCol() );
165 MIN_PERCENT_WARN, _(
"&OK" ) );
180 QFontMetrics fms( font() );
181 return QSize( fms.width(
"/var/usr/home 100% 100.32GB 100.3GB" ) + 50, 100 );
184 int width = header()->headerWidth()
185 + style().pixelMetric( QStyle::PM_ScrollBarExtent, verticalScrollBar() );
187 int width = header()->sizeHint().width()
191 return QSize( width, 100 );
201 Qt::KeyboardModifiers special_combo = ( Qt::ControlModifier| Qt::ShiftModifier | Qt::AltModifier );
203 if ( ( event->modifiers() & special_combo ) == special_combo )
205 if ( event->key() == Qt::Key_Q )
208 yuiMilestone() <<
"Debug mode: " << _debug << endl;
213 if ( _debug && currentItem() )
220 int percent = item->usedPercent();
222 switch ( event->key() )
224 case Qt::Key_1: percent = 10;
break;
225 case Qt::Key_2: percent = 20;
break;
226 case Qt::Key_3: percent = 30;
break;
227 case Qt::Key_4: percent = 40;
break;
228 case Qt::Key_5: percent = 50;
break;
229 case Qt::Key_6: percent = 60;
break;
230 case Qt::Key_7: percent = 70;
break;
231 case Qt::Key_8: percent = 80;
break;
232 case Qt::Key_9: percent = 90;
break;
233 case Qt::Key_0: percent = 100;
break;
234 case Qt::Key_Plus: percent += 3;
break;
235 case Qt::Key_Minus: percent -= 3;
break;
245 100,
"&Continue anyway",
"&Cancel" );
252 ZyppPartitionDu partitionDu( item->
partitionDu() );
254 if ( percent != item->usedPercent() )
256 partitionDu.pkg_size = partitionDu.total_size * percent / 100;
269 QY2DiskUsageList::keyPressEvent( event );
278 const ZyppPartitionDu & partitionDu )
279 : QY2DiskUsageListItem( parent )
280 , _partitionDu( partitionDu )
281 , _pkgDiskUsageList( parent )
283 yuiDebug() <<
"disk usage list entry for " << partitionDu.dir << endl;
290 return FSize( _partitionDu.pkg_size, FSize::K );
297 return FSize( _partitionDu.total_size, FSize::K );
304 return fromUTF8( _partitionDu.dir.c_str() );
311 _partitionDu = fromData;
320 int percent = usedPercent();
321 int free = freeSize() / FSize::MB;
323 if ( percent > MIN_PERCENT_WARN )
328 if ( free < MIN_FREE_MB_PROXIMITY )
331 if ( free < MIN_FREE_MB_WARN )
335 if ( free < MIN_FREE_MB_PROXIMITY )
337 if ( percent > MIN_PERCENT_PROXIMITY )
341 if ( free < OVERFLOW_MB_WARN )
344 if ( free < OVERFLOW_MB_PROXIMITY )
363 _hasBeenClose = _isClose;
372 _hasBeenClose =
false;
373 _warningPosted =
false;
389 _hasBeenClose =
true;
396 _warningPosted =
true;
410 return ! _isClose && ! _hasBeenClose;
417 return _inRange && ! _warningPosted;
423 #include "YQPkgDiskUsageList.moc"
virtual FSize totalSize() const
The total size of this partition.
bool inRange() const
Check if the value is in range, i.e.
YQPkgWarningRangeNotifier overflowWarning
Warning range notifier about disk space overflow warning.
YQPkgDiskUsageListItem(YQPkgDiskUsageList *parent, const ZyppPartitionDu &partitionDu)
Constructor.
YQPkgDiskUsageList(QWidget *parent, int thresholdPercent=0)
Constructor.
void postPendingWarnings()
Post all pending disk space warnings based on the warning range notifiers.
void checkRemainingDiskSpace()
Check the remaining disk space of this partition based on percentage and absolute free MB...
virtual void keyPressEvent(QKeyEvent *ev)
Event handler for keyboard input - for debugging and testing.
void updateDiskUsage()
Update all statistical data in the list.
virtual QString name() const
The name to display for this partition ( the mount point ).
virtual FSize usedSize() const
The currently used size of this partition.
void enterProximity()
Notification that the proximity range is entered, i.e.
YQPkgWarningRangeNotifier()
Constructor.
bool needWarning() const
Check if a warning should be posted, i.e.
void clear()
Clear the current values, i.e.
virtual QSize sizeHint() const
Suggest reasonable default size.
YQPkgWarningRangeNotifier runningOutWarning
Warning range notifier about running out of disk space warning.
static bool diskUsageWarning(const QString &message, int thresholdPercent, const QString &acceptButtonLabel, const QString &rejectButtonLabel=QString::null)
Static convenience method: Post a disk usage warning with text 'message', a list of partitions that a...
void enterRange()
Notification that the inner range is entered.
void clearHistory()
Clear everything, including all history values such as if a warning has been posted.
bool leavingProximity() const
Check if the value is leaving the proximity range.
void warningPostedNotify()
Notification that a warning has been posted.
ZyppPartitionDu partitionDu() const
Returns the corresponding disk usage data.
List of disk usage of all attached partitions.
void updateDuData(const ZyppPartitionDu &fromData)
Update the disk usage data.