diff options
Diffstat (limited to 'krusader/DiskUsage/diskusagegui.cpp')
-rw-r--r-- | krusader/DiskUsage/diskusagegui.cpp | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/krusader/DiskUsage/diskusagegui.cpp b/krusader/DiskUsage/diskusagegui.cpp new file mode 100644 index 0000000..f2bc140 --- /dev/null +++ b/krusader/DiskUsage/diskusagegui.cpp @@ -0,0 +1,227 @@ +/*************************************************************************** + diskusagegui.cpp - description + ------------------- + copyright : (C) 2004 by Csaba Karai + e-mail : krusader@users.sourceforge.net + web site : http://krusader.sourceforge.net + --------------------------------------------------------------------------- + Description + *************************************************************************** + + A + + db dD d8888b. db db .d8888. .d8b. d8888b. d88888b d8888b. + 88 ,8P' 88 `8D 88 88 88' YP d8' `8b 88 `8D 88' 88 `8D + 88,8P 88oobY' 88 88 `8bo. 88ooo88 88 88 88ooooo 88oobY' + 88`8b 88`8b 88 88 `Y8b. 88~~~88 88 88 88~~~~~ 88`8b + 88 `88. 88 `88. 88b d88 db 8D 88 88 88 .8D 88. 88 `88. + YP YD 88 YD ~Y8888P' `8888Y' YP YP Y8888D' Y88888P 88 YD + + S o u r c e F i l e + + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "diskusagegui.h" +#include "../kicons.h" +#include "../krusader.h" +#include "../VFS/vfs.h" +#include "../Dialogs/krdialogs.h" + +#include <qtimer.h> +#include <qhbox.h> +#include <klocale.h> +#include <qtooltip.h> + +DiskUsageGUI::DiskUsageGUI( KURL openDir, QWidget* parent, const char *name ) + : QDialog( parent, name, false, 0 ), exitAtFailure( true ) +{ + setCaption( i18n("Krusader::Disk Usage") ); + + baseDirectory = openDir; + if( !newSearch() ) + return; + + QGridLayout *duGrid = new QGridLayout( this ); + duGrid->setSpacing( 6 ); + duGrid->setMargin( 11 ); + + QHBox *duTools = new QHBox( this, "duTools" ); + duTools->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); + + btnNewSearch = new QToolButton( duTools, "btnNewSearch" ); + btnNewSearch->setIconSet( QIconSet(krLoader->loadIcon("fileopen",KIcon::Desktop)) ); + QToolTip::add( btnNewSearch, i18n( "Start new disk usage search" ) ); + + btnRefresh = new QToolButton( duTools, "btnRefresh" ); + btnRefresh->setIconSet( QIconSet(krLoader->loadIcon("reload",KIcon::Desktop)) ); + QToolTip::add( btnRefresh, i18n( "Refresh" ) ); + + btnDirUp = new QToolButton( duTools, "btnDirUp" ); + btnDirUp->setIconSet( QIconSet(krLoader->loadIcon("up",KIcon::Desktop)) ); + QToolTip::add( btnDirUp, i18n( "Parent directory" ) ); + + QWidget * separatorWidget = new QWidget( duTools, "separatorWidget" ); + separatorWidget->setMinimumWidth( 10 ); + + btnLines = new QToolButton( duTools, "btnLines" ); + btnLines->setIconSet( QIconSet(krLoader->loadIcon("leftjust",KIcon::Desktop)) ); + btnLines->setToggleButton( true ); + QToolTip::add( btnLines, i18n( "Line view" ) ); + + btnDetailed = new QToolButton( duTools, "btnDetailed" ); + btnDetailed->setIconSet( QIconSet(krLoader->loadIcon("view_detailed",KIcon::Desktop)) ); + btnDetailed->setToggleButton( true ); + QToolTip::add( btnDetailed, i18n( "Detailed view" ) ); + + btnFilelight = new QToolButton( duTools, "btnFilelight" ); + btnFilelight->setIconSet( QIconSet(krLoader->loadIcon("kr_diskusage",KIcon::Desktop)) ); + btnFilelight->setToggleButton( true ); + QToolTip::add( btnFilelight, i18n( "Filelight view" ) ); + + QWidget *spacerWidget = new QWidget( duTools, "spacerWidget" ); + QHBoxLayout *hboxlayout = new QHBoxLayout( spacerWidget ); + QSpacerItem* spacer = new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed ); + hboxlayout->addItem( spacer ); + + duGrid->addWidget( duTools, 0, 0 ); + + diskUsage = new DiskUsage( "DiskUsage", this ); + duGrid->addWidget( diskUsage, 1, 0 ); + + status = new KSqueezedTextLabel( this ); + status->setFrameShape( QLabel::StyledPanel ); + status->setFrameShadow( QLabel::Sunken ); + duGrid->addWidget( status, 2, 0 ); + + connect( diskUsage, SIGNAL( status( QString ) ), this, SLOT( setStatus( QString ) ) ); + connect( diskUsage, SIGNAL( viewChanged( int ) ), this, SLOT( slotViewChanged( int ) ) ); + connect( diskUsage, SIGNAL( newSearch() ), this, SLOT( newSearch() ) ); + connect( diskUsage, SIGNAL( loadFinished( bool ) ), this, SLOT( slotLoadFinished( bool ) ) ); + connect( btnNewSearch, SIGNAL( clicked() ), this, SLOT( newSearch() ) ); + connect( btnRefresh, SIGNAL( clicked() ), this, SLOT( loadUsageInfo() ) ); + connect( btnDirUp, SIGNAL( clicked() ), diskUsage, SLOT( dirUp() ) ); + connect( btnLines, SIGNAL( clicked() ), this, SLOT( selectLinesView() ) ); + connect( btnDetailed, SIGNAL( clicked() ), this, SLOT( selectListView() ) ); + connect( btnFilelight, SIGNAL( clicked() ), this, SLOT( selectFilelightView() ) ); + + krConfig->setGroup( "DiskUsage" ); + + int view = krConfig->readNumEntry( "View", VIEW_LINES ); + if( view < VIEW_LINES || view > VIEW_FILELIGHT ) + view = VIEW_LINES; + diskUsage->setView( view ); + + sizeX = krConfig->readNumEntry( "Window Width", QFontMetrics(font()).width("W") * 70 ); + sizeY = krConfig->readNumEntry( "Window Height", QFontMetrics(font()).height() * 25 ); + resize( sizeX, sizeY ); + + if( krConfig->readBoolEntry( "Window Maximized", false ) ) + showMaximized(); + else + show(); + + exec(); +} + +DiskUsageGUI::~DiskUsageGUI() +{ +} + +void DiskUsageGUI::slotLoadFinished( bool result ) +{ + if( exitAtFailure && !result ) + reject(); + else + exitAtFailure = false; +} + +void DiskUsageGUI::enableButtons( bool isOn ) +{ + btnNewSearch->setEnabled( isOn ); + btnRefresh->setEnabled( isOn ); + btnDirUp->setEnabled( isOn ); + btnLines->setEnabled( isOn ); + btnDetailed->setEnabled( isOn ); + btnFilelight->setEnabled( isOn ); +} + +void DiskUsageGUI::resizeEvent( QResizeEvent *e ) +{ + if( !isMaximized() ) + { + sizeX = e->size().width(); + sizeY = e->size().height(); + } + QDialog::resizeEvent( e ); +} + +void DiskUsageGUI::reject() +{ + krConfig->setGroup( "DiskUsage" ); + krConfig->writeEntry("Window Width", sizeX ); + krConfig->writeEntry("Window Height", sizeY ); + krConfig->writeEntry("Window Maximized", isMaximized() ); + krConfig->writeEntry("View", diskUsage->getActiveView() ); + + QDialog::reject(); +} + +void DiskUsageGUI::loadUsageInfo() +{ + diskUsage->load( baseDirectory ); +} + +void DiskUsageGUI::setStatus( QString stat ) +{ + status->setText( stat ); +} + +void DiskUsageGUI::slotViewChanged( int view ) +{ + if( view == VIEW_LOADER ) + { + enableButtons( false ); + return; + } + enableButtons( true ); + + btnLines->setOn( false ); + btnDetailed->setOn( false ); + btnFilelight->setOn( false ); + + switch( view ) + { + case VIEW_LINES: + btnLines->setOn( true ); + break; + case VIEW_DETAILED: + btnDetailed->setOn( true ); + break; + case VIEW_FILELIGHT: + btnFilelight->setOn( true ); + break; + case VIEW_LOADER: + break; + } +} + +bool DiskUsageGUI::newSearch() +{ + // ask the user for the copy dest + + KURL tmp = KChooseDir::getDir(i18n( "Viewing the usage of directory:" ), baseDirectory, baseDirectory); + if (tmp.isEmpty()) return false; + baseDirectory = tmp; + + QTimer::singleShot( 0, this, SLOT( loadUsageInfo() ) ); + return true; +} + +#include "diskusagegui.moc" |