?? filebrowser.cpp
字號:
m_dir->setNameFilter( filter ); } m_dir->updateDir();}voidFileBrowser::dropped( const KFileItem* /*item*/, QDropEvent* event, const KURL::List &urls){ //Do nothing right now event->ignore(); //Run into const problems iterating over the list, so copy it to a malleable one //(besides, need to filter for local giles) KURL::List list(urls); for ( KURL::List::iterator it = list.begin(); it != list.end(); ){ if ( m_medium && !(*it).isLocalFile() ) it = list.erase( it ); else{ debug() << "Dropped: " << (*it) << endl; it++; } }}//END Public Slots//BEGIN Private Slotsinline voidFileBrowser::urlChanged( const KURL &u ){ //the DirOperator's URL has changed QString url = u.isLocalFile() ? u.path() : u.prettyURL(); if( m_medium ){ //remove the leading mountPoint value url.remove( 0, m_medium->mountPoint().length() ); } QStringList urls = m_combo->urls(); urls.remove( url ); urls.prepend( url ); m_combo->setURLs( urls, KURLComboBox::RemoveBottom );}inline voidFileBrowser::slotViewChanged( KFileView *view ){ if( view->widget()->inherits( "KListView" ) ) { using namespace Amarok::ColorScheme; static_cast<KListView*>(view->widget())->setAlternateBackground( AltBase ); }}inline voidFileBrowser::activate( const KFileItem *item ){ Playlist::instance()->insertMedia( item->url(), Playlist::DefaultOptions );}inline voidFileBrowser::prepareContextMenu(){ const KFileItemList &items = *m_dir->selectedItems(); static_cast<KActionMenu*>(m_dir->actionCollection()->action("popupMenu"))->popupMenu()->setItemVisible( SavePlaylist, items.count() > 1 || ( items.count() == 1 && items.getFirst()->isDir() ) ); static_cast<KActionMenu*>(m_dir->actionCollection()->action("popupMenu"))->popupMenu()->setItemVisible( QueueTrack, items.count() == 1 ); static_cast<KActionMenu*>(m_dir->actionCollection()->action("popupMenu"))->popupMenu()->setItemVisible( QueueTracks, items.count() > 1 ); static_cast<KActionMenu*>(m_dir->actionCollection()->action("popupMenu"))->popupMenu()->setItemVisible( MediaDevice, MediaBrowser::isAvailable() ); static_cast<KActionMenu*>(m_dir->actionCollection()->action("popupMenu"))->popupMenu()->setItemVisible( MoveToCollection, !CollectionDB::instance()->isDirInCollection( url().path() ) ); static_cast<KActionMenu*>(m_dir->actionCollection()->action("popupMenu"))->popupMenu()->setItemVisible( CopyToCollection, !CollectionDB::instance()->isDirInCollection( url().path() ) ); static_cast<KActionMenu*>(m_dir->actionCollection()->action("popupMenu"))->popupMenu()->setItemVisible( OrganizeFiles, CollectionDB::instance()->isDirInCollection( url().path() ) );}inline voidFileBrowser::contextMenuActivated( int id ){ switch( id ) { case MakePlaylist: Playlist::instance()->insertMedia( selectedItems(), Playlist::Replace ); break; case SavePlaylist: playlistFromURLs( selectedItems() ); break; case AppendToPlaylist: Playlist::instance()->insertMedia( selectedItems() ); break; case QueueTrack: case QueueTracks: Playlist::instance()->insertMedia( selectedItems(), Playlist::Queue ); break; case EditTags: { KURL::List list = Amarok::recursiveUrlExpand( selectedItems() ); TagDialog *dialog = NULL; if( list.count() == 1 ) { dialog = new TagDialog( list.first(), this ); } else { dialog = new TagDialog( list, this ); } dialog->show(); } break; case CopyToCollection: CollectionView::instance()->organizeFiles( selectedItems(), i18n( "Copy Files To Collection" ), true ); break; case MoveToCollection: CollectionView::instance()->organizeFiles( selectedItems(), i18n( "Move Files To Collection" ), false ); break; case OrganizeFiles: CollectionView::instance()->organizeFiles( selectedItems(), i18n( "Organize Collection Files" ), false ); break; case MediaDevice: MediaBrowser::queue()->addURLs( selectedItems() ); break; case SelectAllFiles: selectAll(); break; case BurnCd: K3bExporter::instance()->exportTracks( selectedItems() ); break; }}inline voidFileBrowser::gotoCurrentFolder(){ const KURL &url = EngineController::instance()->bundle().url(); KURL dirURL = KURL::fromPathOrURL( url.directory() ); m_combo->setURL( dirURL ); setUrl( dirURL );}//END Private SlotsvoidFileBrowser::selectAll(){ KFileItemList list( *m_dir->view()->items() ); // Select all items which represent files for( KFileItem* item = list.first(); item; item = list.next() ) m_dir->view()->setSelected( item, item->isFile() );}#include <kurldrag.h>#include <qpainter.h>#include <qsimplerichtext.h>class KURLView : public KListView{public: KURLView( QWidget *parent ) : KListView( parent ) { reinterpret_cast<QWidget*>(header())->hide(); addColumn( QString() ); setResizeMode( KListView::LastColumn ); setDragEnabled( true ); setSelectionMode( QListView::Extended ); } class Item : public KListViewItem { public: Item( const KURL &url, KURLView *parent ) : KListViewItem( parent, url.fileName() ), m_url( url ) {} KURL m_url; }; virtual QDragObject *dragObject() { QPtrList<QListViewItem> items = selectedItems(); KURL::List urls; for( Item *item = static_cast<Item*>( items.first() ); item; item = static_cast<Item*>( items.next() ) ) urls += item->m_url; return new KURLDrag( urls, this ); } virtual void viewportPaintEvent( QPaintEvent *e ) { KListView::viewportPaintEvent( e ); if ( childCount() == 0 ) { QPainter p( viewport() ); if ( m_text.isEmpty() ) { //TODO Perhaps it's time to put this in some header, as we use it in three places now QSimpleRichText t( i18n( "<div align=center>" "Enter a search term above; you can use wildcards like * and ?" "</div>" ), font() ); t.setWidth( width() - 50 ); const uint w = t.width() + 20; const uint h = t.height() + 20; p.setBrush( colorGroup().background() ); p.drawRoundRect( 15, 15, w, h, (8*200)/w, (8*200)/h ); t.draw( &p, 20, 20, QRect(), colorGroup() ); } else { p.setPen( palette().color( QPalette::Disabled, QColorGroup::Text ) ); p.drawText( rect(), Qt::AlignCenter | Qt::WordBreak, m_text ); } } } void unsetText() { setText( QString::null ); } void setText( const QString &text ) { m_text = text; viewport()->update(); }private: QString m_text;};SearchPane::SearchPane( FileBrowser *parent ) : QVBox( parent ) , m_lineEdit( 0 ) , m_listView( 0 ) , m_lister( 0 ){ QFrame *container = new QVBox( this, "container" ); container->hide(); { QFrame *box = new QHBox( container ); box->setMargin( 5 ); box->setBackgroundMode( Qt::PaletteBase ); m_lineEdit = new ClickLineEdit( i18n("Search here..."), box ); connect( m_lineEdit, SIGNAL(textChanged( const QString& )), SLOT(searchTextChanged( const QString& )) ); m_listView = new KURLView( container ); container->setFrameStyle( m_listView->frameStyle() ); container->setMargin( 5 ); container->setBackgroundMode( Qt::PaletteBase ); m_listView->setFrameStyle( QFrame::NoFrame ); connect( m_listView, SIGNAL(executed( QListViewItem* )), SLOT(activate( QListViewItem* )) ); } KPushButton *button = new KPushButton( KGuiItem( i18n("&Show Search Panel"), "find" ), this ); button->setToggleButton( true ); connect( button, SIGNAL(toggled( bool )), SLOT(toggle( bool )) ); m_lister = new MyDirLister( true /*delay mimetypes*/ ); insertChild( m_lister ); connect( m_lister, SIGNAL(newItems( const KFileItemList& )), SLOT(searchMatches( const KFileItemList& )) ); connect( m_lister, SIGNAL(completed()), SLOT(searchComplete()) );}voidSearchPane::toggle( bool toggled ){ if ( toggled ) m_lineEdit->setFocus(); static_cast<QWidget*>(child("container"))->setShown( toggled );}voidSearchPane::urlChanged( const KURL& ){ searchTextChanged( m_lineEdit->text() );}voidSearchPane::searchTextChanged( const QString &text ){ //TODO if user changes search directory then we need to update the search too m_lister->stop(); m_listView->clear(); m_dirs.clear(); if ( text.isEmpty() ) { m_listView->unsetText(); return; } m_filter = QRegExp( text.contains( "*" ) ? text : '*'+text+'*', false, true ); m_lister->openURL( searchURL() ); m_listView->setText( i18n( "Searching..." ) );}voidSearchPane::searchMatches( const KFileItemList &list ){ for( KFileItemList::ConstIterator it = list.begin(), end = list.end(); it != end; ++it ) { if( (*it)->isDir() ) m_dirs += (*it)->url(); else if( m_filter.exactMatch( (*it)->name() ) ) new KURLView::Item( (*it)->url(), static_cast<KURLView*>( m_listView ) ); }}voidSearchPane::searchComplete(){ //KDirLister crashes if you call openURL() from a slot //connected to KDirLister::complete() //TODO fix crappy KDElibs QTimer::singleShot( 0, this, SLOT(_searchComplete()) );}voidSearchPane::_searchComplete(){ if ( !m_dirs.isEmpty() ) { KURL url = m_dirs.first(); m_dirs.pop_front(); m_lister->openURL( url ); } else m_listView->setText( i18n("No results found") ); //only displayed if the listview is empty}voidSearchPane::activate( QListViewItem *item ){ Playlist::instance()->insertMedia( static_cast<KURLView::Item*>(item)->m_url, Playlist::DirectPlay );}#include "filebrowser.moc"
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -