⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dulistview.cpp

📁 LINUX 下, 以 QT/KDE 写的档案管理员
💻 CPP
字号:
/***************************************************************************                        dulistview.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 "dulistview.h"#include "../krusader.h"#include "../kicons.h"#include "../VFS/krpermhandler.h"#include <qfontmetrics.h>#include <klocale.h>#include <kmimetype.h>#include <kglobal.h>#include <qheader.h>#include <time.h>DUListView::DUListView( DiskUsage *usage, const char *name )     : QListView( usage, name ), diskUsage( usage ){    setAllColumnsShowFocus(true);  setVScrollBarMode(QScrollView::Auto);  setHScrollBarMode(QScrollView::Auto);  setShowSortIndicator(true);  setRootIsDecorated( true );  setTreeStepSize( 10 );  int defaultSize = QFontMetrics(font()).width("W");    krConfig->setGroup( diskUsage->getConfigGroup() );   int nameWidth  = krConfig->readNumEntry("D Name Width",  defaultSize * 20 );      addColumn( i18n("Name"), nameWidth );  setColumnWidthMode(0,QListView::Manual);  int percentWidth  = krConfig->readNumEntry("D Percent Width",  defaultSize * 5 );      addColumn( i18n("Percent"), percentWidth );  setColumnWidthMode(1,QListView::Manual);  int totalSizeWidth  = krConfig->readNumEntry("D Total Size Width",  defaultSize * 10 );      addColumn( i18n("Total size"), totalSizeWidth );  setColumnWidthMode(1,QListView::Manual);  int ownSizeWidth  = krConfig->readNumEntry("D Own Size Width",  defaultSize * 10 );      addColumn( i18n("Own size"), ownSizeWidth );  setColumnWidthMode(2,QListView::Manual);  int typeWidth  = krConfig->readNumEntry("D Type Width",  defaultSize * 10 );  addColumn( i18n("Type"), typeWidth );  setColumnWidthMode(3,QListView::Manual);  int dateWidth  = krConfig->readNumEntry("D Date Width",  defaultSize * 10 );  addColumn( i18n("Date"), dateWidth );  setColumnWidthMode(4,QListView::Manual);  int permissionsWidth  = krConfig->readNumEntry("D Permissions Width",  defaultSize * 6 );  addColumn( i18n("Permissions"), permissionsWidth );  setColumnWidthMode(5,QListView::Manual);  int ownerWidth  = krConfig->readNumEntry("D Owner Width",  defaultSize * 5 );      addColumn( i18n("Owner"), ownerWidth );  setColumnWidthMode(6,QListView::Manual);  int groupWidth  = krConfig->readNumEntry("D Group Width",  defaultSize * 5 );      addColumn( i18n("Group"), groupWidth );  setColumnWidthMode(7,QListView::Manual);    setColumnAlignment( 1, Qt::AlignRight );  setColumnAlignment( 2, Qt::AlignRight );  setColumnAlignment( 3, Qt::AlignRight );    setSorting( 2 );  connect( diskUsage, SIGNAL( enteringDirectory( Directory * ) ), this, SLOT( slotDirChanged( Directory * ) ) );  connect( diskUsage, SIGNAL( clearing() ), this, SLOT( clear() ) );  connect( diskUsage, SIGNAL( changed( File * ) ), this, SLOT( slotChanged( File * ) ) );  connect( diskUsage, SIGNAL( deleted( File * ) ), this, SLOT( slotDeleted( File * ) ) );  connect( this, SIGNAL(rightButtonPressed(QListViewItem *, const QPoint &, int)),           this, SLOT( slotRightClicked(QListViewItem *) ) );  connect( this, SIGNAL( expanded ( QListViewItem * ) ),            this, SLOT( slotExpanded( QListViewItem * ) ) ); }DUListView::~ DUListView(){  krConfig->setGroup( diskUsage->getConfigGroup() );   krConfig->writeEntry("D Name Width",        columnWidth( 0 ) );  krConfig->writeEntry("D Percent Width",     columnWidth( 1 ) );  krConfig->writeEntry("D Total Size Width",  columnWidth( 2 ) );  krConfig->writeEntry("D Own Size Width",    columnWidth( 3 ) );  krConfig->writeEntry("D Type Width",        columnWidth( 4 ) );  krConfig->writeEntry("D Date Width",        columnWidth( 5 ) );  krConfig->writeEntry("D Permissions Width", columnWidth( 6 ) );  krConfig->writeEntry("D Owner Width",       columnWidth( 7 ) );  krConfig->writeEntry("D Group Width",       columnWidth( 8 ) );}void DUListView::addDirectory( Directory *dirEntry, QListViewItem *parent ){  QListViewItem * lastItem = 0;      if( parent == 0 && ! ( dirEntry->parent() == 0 ) )  {    lastItem = new QListViewItem( this, ".." );    lastItem->setPixmap( 0, FL_LOADICON( "up" ) );    lastItem->setSelectable( false );  }            for( Iterator<File> it = dirEntry->iterator(); it != dirEntry->end(); ++it )  {    File *item = *it;        KMimeType::Ptr mimePtr = KMimeType::mimeType( item->mime() );    QString mime = mimePtr->comment();           time_t tma = item->time();    struct tm* t=localtime((time_t *)&tma);    QDateTime tmp(QDate(t->tm_year+1900, t->tm_mon+1, t->tm_mday), QTime(t->tm_hour, t->tm_min));    QString date = KGlobal::locale()->formatDateTime(tmp);            QString totalSize = KRpermHandler::parseSize( item->size() ) + " ";    QString ownSize = KRpermHandler::parseSize( item->ownSize() ) + " ";    QString percent = item->percent();        if( lastItem == 0 && parent == 0 )      lastItem = new DUListViewItem( diskUsage, item, this, item->name(), percent, totalSize, ownSize,                                      mime, date, item->perm(), item->owner(), item->group() );    else if ( lastItem == 0 )      lastItem = new DUListViewItem( diskUsage, item, parent, item->name(), percent, totalSize, ownSize,                                      mime, date, item->perm(), item->owner(), item->group() );    else if ( parent == 0 )      lastItem = new DUListViewItem( diskUsage, item, this, lastItem, item->name(), percent, totalSize,                                     ownSize, mime, date, item->perm(), item->owner(), item->group() );    else      lastItem = new DUListViewItem( diskUsage, item, parent, lastItem, item->name(), percent, totalSize,                                      ownSize, mime, date, item->perm(), item->owner(), item->group() );       if( item->isExcluded() )      lastItem->setVisible( false );                                        lastItem->setPixmap( 0, diskUsage->getIcon( item->mime() ) );        if( item->isDir() && !item->isSymLink() )      lastItem->setExpandable( true );  }    QListViewItem *first = firstChild();  if( first )    setCurrentItem( first );}void DUListView::slotDirChanged( Directory *dirEntry ){  clear();    addDirectory( dirEntry, 0 );}File * DUListView::getCurrentFile(){  QListViewItem *item = currentItem();    if( item == 0 || item->text( 0 ) == ".." )    return 0;    return ((DUListViewItem *)item)->getFile();}void DUListView::slotChanged( File * item ){  void * itemPtr = diskUsage->getProperty( item, "ListView-Ref" );  if( itemPtr == 0 )    return;      DUListViewItem *duItem = (DUListViewItem *)itemPtr;  duItem->setVisible( !item->isExcluded() );  duItem->setText( 1, item->percent() );  duItem->setText( 2, KRpermHandler::parseSize( item->size() ) + " " );  duItem->setText( 3, KRpermHandler::parseSize( item->ownSize() ) + " " );}void DUListView::slotDeleted( File * item ){  void * itemPtr = diskUsage->getProperty( item, "ListView-Ref" );  if( itemPtr == 0 )    return;      DUListViewItem *duItem = (DUListViewItem *)itemPtr;  delete duItem;}  void DUListView::slotRightClicked( QListViewItem *item ){  File * file = 0;    if ( item && item->text( 0 ) != ".." )    file = ((DUListViewItem *)item)->getFile();  diskUsage->rightClickMenu( file );}bool DUListView::doubleClicked( QListViewItem * item ){  if( item )  {    if( item->text( 0 ) != ".." )    {      File *fileItem = ((DUListViewItem *)item)->getFile();      if( fileItem->isDir() )        diskUsage->changeDirectory( dynamic_cast<Directory *> ( fileItem ) );      return true;    }    else    {      Directory *upDir = (Directory *)diskUsage->getCurrentDir()->parent();          if( upDir )        diskUsage->changeDirectory( upDir );      return true;    }  }  return false;}void DUListView::contentsMouseDoubleClickEvent ( QMouseEvent * e ){  if ( e || e->button() == LeftButton )  {    QPoint vp = contentsToViewport(e->pos());    QListViewItem * item = itemAt( vp );    if( doubleClicked( item ) )      return;      }  QListView::contentsMouseDoubleClickEvent( e );}void DUListView::keyPressEvent( QKeyEvent *e ){  switch ( e->key() )  {  case Key_Return :  case Key_Enter :    if( doubleClicked( currentItem() ) )      return;    break;  case Key_Left :  case Key_Right :  case Key_Up :  case Key_Down :    if( e->state() == ShiftButton )    {      e->ignore();      return;    }    break;  case Key_Delete :    e->ignore();    return;  }  QListView::keyPressEvent( e );}void DUListView::slotExpanded( QListViewItem *item ){  if( item == 0 || item->text( 0 ) == ".." )    return;   if( item->childCount() == 0 )  {    File *fileItem = ((DUListViewItem *)item)->getFile();    if( fileItem->isDir() )      addDirectory( dynamic_cast<Directory *>( fileItem ), item );     }}#include "dulistview.moc"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -