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

📄 filebrowser.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#else    //#### revise set perms under WINNT?#endif    return success;}void FileView::cut(){    int err;    // ##### a better inmplementation might be to rename the CUT file    // ##### to ".QPE-FILEBROWSER-MOVING" rather than copying it.    QString cmd, dest, basename, cd = "/tmp/qpemoving";    endRenaming();	QStringList newflist;	newflist.clear();		cmd = "rm -rf " + cd;	system ( (const char *) cmd );	cmd = "mkdir " + cd;	system( (const char *) cmd );// get the names of the files to cut    FileItem * item;     if((item = (FileItem *) firstChild()) == 0) return;     flist.clear();    while( item ){        if( item->isSelected() /*&& !item->isDir()*/ ){            flist += item->getFilePath();        }        item = (FileItem *) item->nextSibling();    }// move these files into a tmp dir    for ( QStringList::Iterator it = flist.begin(); it != flist.end(); ++it ) {        basename = (*it).mid((*it).findRev("/") + 1, (*it).length());         dest = cd + "/" + basename;		newflist += dest;         cmd = "/bin/mv -f \"" + (*it) +"\" " + "\"" + dest + "\"";        err = system( (const char *) cmd );         if ( err != 0 ) {            QMessageBox::warning( this, tr("Cut file"), tr("Cut failed!"),                                  tr("OK") );            break;        } else {            updateDir();            QListViewItem * im = firstChild();            basename = dest.mid( dest.findRev("/") + 1, dest.length() );             while( im ){                if( im->text(0) == basename ){                    setCurrentItem( im );                    ensureItemVisible( im );                    break;                }                im = im->nextSibling();            }        }    }	// update the filelist to point to tmp dir so paste works nicely	flist = newflist;}void FileView::del(){    FileItem * i;    QStringList fl;    QString cmd;    int err;    if((i = (FileItem *) firstChild()) == 0) return;    while( i ){		if( i->isSelected() ){			fl += i->getFilePath();		}		i = (FileItem *) i->nextSibling();    }    if( fl.count() < 1 ) return;    if( QMessageBox::warning( this, tr("Delete"), tr("Are you sure?"),							  tr("Yes"), tr("No") ) == 0)    {		//		// Dependant upon the "rm" command - will probably have to be replaced		//		for ( QStringList::Iterator it = fl.begin(); it != fl.end(); ++it ) {			cmd = "/bin/rm -rf \"" + (*it) + "\"";			err = system( (const char *) cmd );			if ( err != 0 ) {				QMessageBox::warning( this, tr("Delete"), tr("Delete failed!"),									  tr("OK") );				break;			}		}		updateDir();    }}void FileView::newFolder(){    int t = 1;    FileItem * i;    QString nd = currentDir + "/NewFolder";    endRenaming();    while( QFile( nd ).exists() ){		nd.sprintf( "%s/NewFolder (%d)", (const char *) currentDir, t++ );    }    QDir d;    if(d.mkdir( nd) == FALSE){		QMessageBox::warning( this, tr( "New folder" ),							  tr( "Folder creation failed!" ),							  tr( "OK" ) );		return;    }    updateDir();    if((i = (FileItem *) firstChild()) == 0) return;    while( i ){		if( i->isDir() && ( i->getFilePath() == nd ) ){			setCurrentItem( i );			rename();			break;		}		i = (FileItem *) i->nextSibling();    }}void FileView::viewAsText(){    FileItem * i = (FileItem *) currentItem();    Config cfg(Service::appConfig("View/text/plain"),Config::File);    cfg.setGroup("Standard");    const char* msg = "setDocument(QString)";    if ( cfg.readNumEntry("Version") > 100 )	msg = "viewFile(QString)";    QCopEnvelope e(Service::channel("View/text/*"), msg);    e << i->getFilePath();}void FileView::itemClicked( QListViewItem * i){    FileItem * t = (FileItem *) i;    if( t == NULL ) return;    if( t->isDir() ){	setDir( t->getFilePath() );    }}void FileView::itemDblClicked( QListViewItem * i){    FileItem * t = (FileItem *) i;    if(t == NULL) return;    if(t->launch() == -1){		QMessageBox::warning( this, tr( "Launch Application" ),							  tr( "Launch failed!" ), tr( "OK" ) );    }}void FileView::parentDir(){    endRenaming();    setDir( currentDir + "./.." );}void FileView::lastDir(){    endRenaming();    if( dirHistory.count() == 0 ) return;    QString newDir = dirHistory.last();    dirHistory.remove( dirHistory.last() );    generateDir( newDir );}void FileView::contentsMousePressEvent( QMouseEvent * e ){    QListView::contentsMousePressEvent( e );    menuTimer.start( 750, TRUE );}void FileView::contentsMouseReleaseEvent( QMouseEvent * e ){    QListView::contentsMouseReleaseEvent( e );    menuTimer.stop();}void FileView::cancelMenuTimer(){    if( menuTimer.isActive() )		menuTimer.stop();}void FileView::addToDocuments(){    FileItem * i = (FileItem *) currentItem();    DocLnk f;    QString n = i->text(0);    n.replace(QRegExp("\\..*"),"");    f.setName( n );    f.setFile( i->getFilePath() );    f.writeLink();}void FileView::run(){    FileItem * i = (FileItem *) currentItem();    i->launch();}void FileView::showFileMenu(){    FileItem * i = (FileItem *) currentItem();    if ( !i )		return;    QPopupMenu * m = new QPopupMenu( this );    MimeType mt(i->getFilePath());    const AppLnk* app = mt.application();    // Opening .desktop files is too ambiguous - disabled.    // If the user *really* wants to touch those files, and take    // responsibility for whatever mess they make, they can use Terminal.    if ( !i->isDir() && i->getFilePath().right(8) != ".desktop" ) {		m->insertItem( tr( "Add to Documents" ), this, SLOT( addToDocuments() ) );		m->insertSeparator();		if ( app )			m->insertItem( app->pixmap(), tr("Open in %1","eg. text editor").arg(app->name()), this, SLOT( run() ) );		else if( i->isExecutable() )			m->insertItem( Resource::loadIconSet( i->text( 0 ) ), tr( "Run" ), this, SLOT( run() ) );		m->insertItem( Resource::loadIconSet( "txt" ), tr( "View as text" ),					   this, SLOT( viewAsText() ) );		m->insertSeparator();    }    m->insertItem( tr( "Rename" ), this, SLOT( rename() ) );    m->insertItem( Resource::loadIconSet("cut"),				    tr( "Cut" ), this, SLOT( cut() ) );    m->insertItem( Resource::loadIconSet("copy"),				   tr( "Copy" ), this, SLOT( copy() ) );    m->insertItem( Resource::loadIconSet("paste"),				   tr( "Paste" ), this, SLOT( paste() ) );    m->insertItem( tr( "Delete" ), this, SLOT( del() ) );    m->insertSeparator();    m->insertItem( tr( "Select all" ), this, SLOT( selectAll() ) );    m->insertItem( tr( "Deselect all" ), this, SLOT( deselectAll() ) );    m->popup( QCursor::pos() );}//// Load and scale the pixmaps that we load manually, according to the// iconsize that Applnk tells us.  We trust the size returned by AppLnk,// as it's the same size that MimeTypeData uses.//void    FileView::scaleIcons(void){    int	    iconsize = AppLnk::smallIconSize();    QImage  img;    pmLockedFolder = new QPixmap();    pmFolder = new QPixmap();    pmLocked = new QPixmap();    pmLibrary = new QPixmap();    pmUnknown = new QPixmap();    img = Resource::loadImage("lockedfolder").smoothScale(iconsize, iconsize);    pmLockedFolder->convertFromImage(img);    img = Resource::loadImage("folder").smoothScale(iconsize, iconsize);    pmFolder->convertFromImage(img);    img = Resource::loadImage("locked").smoothScale(iconsize, iconsize);    pmLocked->convertFromImage(img);    img = Resource::loadImage("library").smoothScale(iconsize, iconsize);    pmLibrary->convertFromImage(img);    img = Resource::loadImage("UnknownDocument-14").	smoothScale(iconsize, iconsize);    pmUnknown->convertFromImage(img);}////  FileBrowser//FileBrowser::FileBrowser( QWidget * parent,						  const char * name, WFlags f ) :    QMainWindow( parent, name, f ){    init( QDir::current().canonicalPath() );}FileBrowser::FileBrowser( const QString & dir, QWidget * parent,						  const char * name, WFlags f ) :    QMainWindow( parent, name, f ){    init( dir );}void FileBrowser::init(const QString & dir){    setCaption( tr("File Manager") );    setIcon( Resource::loadPixmap( "FileBrowser" ) );    setBackgroundMode( PaletteButton );    fileView = new FileView( dir, this );    fileView->setAllColumnsShowFocus( TRUE );    setCentralWidget( fileView );    setToolBarsMovable( FALSE );    QPEToolBar* toolBar = new QPEToolBar( this );    toolBar->setHorizontalStretchable( TRUE );    QPEMenuBar* menuBar = new QPEMenuBar( toolBar );    dirMenu = new QPopupMenu( this );    menuBar->insertItem( tr( "Dir" ), dirMenu );    sortMenu = new QPopupMenu( this );    menuBar->insertItem( tr( "Sort" ), sortMenu );    sortMenu->insertItem( tr( "by Name "), this, SLOT( sortName() ) );    sortMenu->insertItem( tr( "by Size "), this, SLOT( sortSize() ) );    sortMenu->insertItem( tr( "by Date "), this, SLOT( sortDate() ) );    sortMenu->insertItem( tr( "by Type "), this, SLOT( sortType() ) );    sortMenu->insertSeparator();    sortMenu->insertItem( tr( "Ascending" ), this, SLOT( updateSorting() ) );    sortMenu->setItemChecked( sortMenu->idAt( 5 ), TRUE );    sortMenu->setItemChecked( sortMenu->idAt( 0 ), TRUE );    toolBar = new QPEToolBar( this );    lastAction = new QAction( tr("Previous dir"), Resource::loadIconSet( "back" ),							  QString::null, 0, this, 0 );    connect( lastAction, SIGNAL( activated() ), fileView, SLOT( lastDir() ) );    lastAction->addTo( toolBar );    lastAction->setEnabled( FALSE );    lastAction->setWhatsThis( tr("Changes location to the previous directory") );    upAction = new QAction( tr("Parent dir"), Resource::loadIconSet( "up" ),					 QString::null, 0, this, 0 );    connect( upAction, SIGNAL( activated() ), fileView, SLOT( parentDir() ) );    upAction->addTo( toolBar );    upAction->setWhatsThis( tr("Changes location to the parent directory") );    QAction *a = new QAction( tr("New folder"), Resource::loadIconSet( "newfolder" ),					 QString::null, 0, this, 0 );    connect( a, SIGNAL( activated() ), fileView, SLOT( newFolder() ) );    a->addTo( toolBar );    a->setWhatsThis( tr("Creates a new folder") );    a = new QAction( tr("Cut"), Resource::loadIconSet( "cut" ),					 QString::null, 0, this, 0 );    connect( a, SIGNAL( activated() ), fileView, SLOT( cut() ) );    a->addTo( toolBar );    a->setWhatsThis( tr("Deletes the selected item") );    a = new QAction( tr("Copy"), Resource::loadIconSet( "copy" ),					 QString::null, 0, this, 0 );    connect( a, SIGNAL( activated() ), fileView, SLOT( copy() ) );    a->addTo( toolBar );    a->setWhatsThis( tr("Copies the selected item") );    pasteAction = new QAction( tr("Paste"), Resource::loadIconSet( "paste" ),							   QString::null, 0, this, 0 );    connect( pasteAction, SIGNAL( activated() ), fileView, SLOT( paste() ) );    pasteAction->addTo( toolBar );    pasteAction->setWhatsThis( tr("Paste the contents of the last copy or cut operation") );    connect( fileView, SIGNAL( dirChanged() ), SLOT( updateDirMenu() ) );    updateDirMenu();#ifndef QT_NO_COP    QCopChannel* pcmciaChannel = new QCopChannel( "QPE/Card", this );    connect( pcmciaChannel, SIGNAL(received(const QCString &, const QByteArray &)),	 this, SLOT(pcmciaMessage( const QCString &, const QByteArray &)) );#endif}void FileBrowser::pcmciaMessage( const QCString &msg, const QByteArray &){    if ( msg == "mtabChanged()" ) {	// ## Only really needed if current dir is on a card        fileView->updateDir();    }}void FileBrowser::dirSelected( int id ){    int i = 0, j;    QString dir;    // Bulid target dir from menu    while( (j = dirMenu->idAt( i )) != id ){		dir += dirMenu->text( j ).stripWhiteSpace();		if( dirMenu->text( j ) != "/" ) dir += "/";		i++;    }    dir += dirMenu->text( dirMenu->idAt( i ) ).stripWhiteSpace();    fileView->setDir( dir );}void FileBrowser::updateDirMenu(){    QString spc, cd = fileView->cd();    QStringList l = QStringList::split( "/", cd );    int i = 0;    dirMenu->clear();    dirMenu->insertItem( tr( "/" ), this, SLOT( dirSelected(int) ) );    for ( QStringList::Iterator it = l.begin(); it != l.end(); ++it ) {		spc.fill( ' ', i++);		dirMenu->insertItem( spc + (*it), this,							 SLOT( dirSelected(int) ) );    }    dirMenu->setItemChecked( dirMenu->idAt( l.count() ), TRUE );    lastAction->setEnabled( fileView->history().count() != 0 );    upAction->setEnabled( cd != "/" );}void FileBrowser::sortName(){    fileView->setSorting( 0, sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) );    fileView->sort();    sortMenu->setItemChecked( sortMenu->idAt( 0 ), TRUE );    sortMenu->setItemChecked( sortMenu->idAt( 1 ), FALSE );    sortMenu->setItemChecked( sortMenu->idAt( 2 ), FALSE );    sortMenu->setItemChecked( sortMenu->idAt( 3 ), FALSE );}void FileBrowser::sortSize(){    fileView->setSorting( 1, sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) );    fileView->sort();    sortMenu->setItemChecked( sortMenu->idAt( 0 ), FALSE );    sortMenu->setItemChecked( sortMenu->idAt( 1 ), TRUE );    sortMenu->setItemChecked( sortMenu->idAt( 2 ), FALSE );    sortMenu->setItemChecked( sortMenu->idAt( 3 ), FALSE );}void FileBrowser::sortDate(){    fileView->setSorting( 2, sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) );    fileView->sort();    sortMenu->setItemChecked( sortMenu->idAt( 0 ), FALSE );    sortMenu->setItemChecked( sortMenu->idAt( 1 ), FALSE );    sortMenu->setItemChecked( sortMenu->idAt( 2 ), TRUE );    sortMenu->setItemChecked( sortMenu->idAt( 3 ), FALSE );}void FileBrowser::sortType(){    fileView->setSorting( 3, sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) );    fileView->sort();    sortMenu->setItemChecked( sortMenu->idAt( 0 ), FALSE );    sortMenu->setItemChecked( sortMenu->idAt( 1 ), FALSE );    sortMenu->setItemChecked( sortMenu->idAt( 2 ), FALSE );    sortMenu->setItemChecked( sortMenu->idAt( 3 ), TRUE );}void FileBrowser::updateSorting(){    sortMenu->setItemChecked( sortMenu->idAt( 5 ), !sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) );    if ( sortMenu->isItemChecked( sortMenu->idAt( 0 ) ) )		sortName();    else if ( sortMenu->isItemChecked( sortMenu->idAt( 1 ) ) )		sortSize();    else if ( sortMenu->isItemChecked( sortMenu->idAt( 2 ) ) )		sortDate();    else		sortType();}

⌨️ 快捷键说明

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