📄 locate.cpp
字号:
QString fileName = (*it).stripWhiteSpace(); if( fileName.endsWith( "/" ) && fileName != "/" ) fileName.truncate( fileName.length() -1 ); fileName = fileName.mid( fileName.findRev( '/' ) + 1 ); if( !regExp.exactMatch( fileName ) ) continue; } if( onlyExist ) { KFileItem file(KFileItem::Unknown, KFileItem::Unknown, (*it).stripWhiteSpace() ); if( !file.isReadable() ) continue; } if( lastItem ) lastItem = new KListViewItem( resultList, lastItem, *it ); else lastItem = new KListViewItem( resultList, *it ); lastItem->setDragEnabled( true ); } } if( stopping ) proc->kill( SIGKILL ); qApp->processEvents();}void LocateDlg::processStderr(KProcess *, char *buffer, int length){ char *buf = new char[ length+1 ]; memcpy( buf, buffer, length ); buf[ length ] = 0; collectedErr += QString::fromLocal8Bit( buf ); delete []buf; }void LocateDlg::slotRightClick(QListViewItem *item){ if ( !item ) return; // create the menu KPopupMenu popup; popup.insertTitle(i18n("Locate")); popup.insertItem(i18n("View (F3)"), VIEW_ID); popup.insertItem(i18n("Edit (F4)"), EDIT_ID); popup.insertSeparator(); popup.insertItem(i18n("Find (Ctrl+F)"), FIND_ID); popup.insertItem(i18n("Find next (Ctrl+N)"), FIND_NEXT_ID); popup.insertItem(i18n("Find previous (Ctrl+P)"), FIND_PREV_ID); popup.insertSeparator(); popup.insertItem(i18n("Copy selected to clipboard"), COPY_SELECTED_TO_CLIPBOARD); int result=popup.exec(QCursor::pos()); // check out the user's option switch (result) { case VIEW_ID: case EDIT_ID: case FIND_ID: case FIND_NEXT_ID: case FIND_PREV_ID: case COPY_SELECTED_TO_CLIPBOARD: operate( item, result ); break; }}void LocateDlg::slotDoubleClick(QListViewItem *item){ if ( !item ) return; QString dirName = item->text(0); QString fileName; if( !QDir( dirName ).exists() ) { fileName = dirName.mid( dirName.findRev( '/' ) + 1 ); dirName.truncate( dirName.findRev( '/' ) ); } ACTIVE_FUNC->openUrl(vfs::fromPathOrURL( dirName ), fileName ); KDialogBase::accept();}void LocateDlg::keyPressEvent( QKeyEvent *e ){ if( Krusader::actCopy->shortcut().contains( KKey( e ) ) ) { operate( 0, COPY_SELECTED_TO_CLIPBOARD ); e->accept(); return; } switch ( e->key() ) { case Key_M : if( e->state() == ControlButton ) { resultList->setFocus(); e->accept(); } break; case Key_F3 : if( resultList->currentItem() ) operate( resultList->currentItem(), VIEW_ID ); break; case Key_F4 : if( resultList->currentItem() ) operate( resultList->currentItem(), EDIT_ID ); break; case Key_N : if ( e->state() == ControlButton ) operate( resultList->currentItem(), FIND_NEXT_ID ); break; case Key_P : if ( e->state() == ControlButton ) operate( resultList->currentItem(), FIND_PREV_ID ); break; case Key_F : if ( e->state() == ControlButton ) operate( resultList->currentItem(), FIND_ID ); break; } QDialog::keyPressEvent( e );}void LocateDlg::operate( QListViewItem *item, int task ){ KURL name; if( item != 0 ) name = vfs::fromPathOrURL( item->text( 0 ) ); switch ( task ) { case VIEW_ID: KrViewer::view( name, this ); // view the file break; case EDIT_ID: KrViewer::edit( name, this ); // view the file break; case FIND_ID: { krConfig->setGroup("Locate"); long options = krConfig->readNumEntry("Find Options", 0); QStringList list = krConfig->readListEntry("Find Patterns"); KFindDialog dlg( this, "locateFindDialog", options, list ); if ( dlg.exec() != QDialog::Accepted ) return; if( list.first() != ( findPattern = dlg.pattern() ) ) list.push_front( dlg.pattern() ); krConfig->writeEntry( "Find Options", findOptions = dlg.options() ); krConfig->writeEntry( "Find Patterns", list ); if( !( findOptions & KFindDialog::FromCursor ) ) resultList->setCurrentItem( ( findOptions & KFindDialog::FindBackwards ) ? resultList->lastItem() : resultList->firstChild() ); findCurrentItem = (KListViewItem *)resultList->currentItem(); if( find() && findCurrentItem ) resultList->setCurrentItem( findCurrentItem ); else KMessageBox::information( 0, i18n( "Search string not found!" ) ); resultList->ensureItemVisible( resultList->currentItem() ); } break; case FIND_NEXT_ID: case FIND_PREV_ID: { if( task == FIND_PREV_ID ) findOptions ^= KFindDialog::FindBackwards; findCurrentItem = (KListViewItem *)resultList->currentItem(); nextLine(); if( find() && findCurrentItem ) resultList->setCurrentItem( findCurrentItem ); else KMessageBox::information( 0, i18n( "Search string not found!" ) ); resultList->ensureItemVisible( resultList->currentItem() ); if( task == FIND_PREV_ID ) findOptions ^= KFindDialog::FindBackwards; } break; case COPY_SELECTED_TO_CLIPBOARD: { KURL::List urls; QListViewItem * item = resultList->firstChild(); while( item ) { if( item->isSelected() ) urls.push_back( vfs::fromPathOrURL( item->text( 0 ) ) ); item = item->nextSibling(); } if( urls.count() == 0 ) return; KURLDrag *d = new KURLDrag(urls, this); d->setPixmap( FL_LOADICON( "file" ), QPoint( -7, 0 ) ); QApplication::clipboard()->setData( d ); } break; }}void LocateDlg::nextLine(){ if( findOptions & KFindDialog::FindBackwards ) findCurrentItem = (KListViewItem *)findCurrentItem->itemAbove(); else findCurrentItem = (KListViewItem *)findCurrentItem->itemBelow();}bool LocateDlg::find(){ while( findCurrentItem ) { QString item = findCurrentItem->text( 0 ); if( findOptions & KFindDialog::RegularExpression ) { if( item.contains( QRegExp( findPattern, findOptions & KFindDialog::CaseSensitive ) ) ) return true; } else { if( item.contains( findPattern, findOptions & KFindDialog::CaseSensitive ) ) return true; } nextLine(); } return false;}void LocateDlg::feedToListBox(){ virt_vfs v(0,true); v.vfs_refresh( KURL( "/" ) ); krConfig->setGroup( "Locate" ); int listBoxNum = krConfig->readNumEntry( "Feed To Listbox Counter", 1 ); QString queryName; do { queryName = i18n("Locate results")+QString( " %1" ).arg( listBoxNum++ ); }while( v.vfs_search( queryName ) != 0 ); krConfig->writeEntry( "Feed To Listbox Counter", listBoxNum ); krConfig->setGroup( "Advanced" ); if ( krConfig->readBoolEntry( "Confirm Feed to Listbox", _ConfirmFeedToListbox ) ) { bool ok; queryName = KInputDialog::getText( i18n("Query name"), // Caption i18n("Here you can name the file collection"), // Questiontext queryName, // Default &ok ); if ( ! ok) return; } KURL::List urlList; QListViewItem * item = resultList->firstChild(); while( item ) { urlList.push_back( vfs::fromPathOrURL( item->text( 0 ) ) ); item = item->nextSibling(); } KURL url = KURL::fromPathOrURL(QString("virt:/")+ queryName); v.vfs_refresh( url ); v.vfs_addFiles( &urlList, KIO::CopyJob::Copy, 0 ); //ACTIVE_FUNC->openUrl(url); ACTIVE_MNG->slotNewTab(url.prettyURL()); accept();}void LocateDlg::reset(){ locateSearchFor->lineEdit()->setFocus(); locateSearchFor->lineEdit()->selectAll();}#include "locate.moc"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -