📄 qmcontrolbar.cpp
字号:
m_pBrowserMenu->setItemEnabled(m_BrowserTopId, menu_flag); m_pBrowserMenu->setItemEnabled(m_BrowserBottomId, menu_flag); m_pBrowserMenu->setItemEnabled(m_BrowserFullId, menu_flag); int full_browser; QmConfig::instance()->get("main-window", "full-browser", full_browser); if(full_browser == 0) m_pBrowserMenu->setItemChecked(m_BrowserFullId, false); else m_pBrowserMenu->setItemChecked(m_BrowserFullId, true); }/*! */QmControlBar::~QmControlBar(){}QAction *QmControlBar::systrayAction( ActionItem i ) const{ QAction * a = 0; if ( m_pSystrayActionMap.find( i ) != m_pSystrayActionMap.end() ) a = m_pSystrayActionMap[i]; return a;}/*! Saves whether the browser is visible or not and whether it is in full mode or not. It appears that this checking must be done through the menu state and not by actually checking whether the widgets themselves are visible or not. The latter approach would be appropriate to do in QmMainWindow's destructor or closeEvent(), but it appears that by then, the widgets are never visible. */voidQmControlBar::save(){ if(m_pBrowserMenu->isItemChecked(m_BrowserId)) QmConfig::instance()->set("main-window", "show-browser", 1); else QmConfig::instance()->set("main-window", "show-browser", 0); if(m_pBrowserMenu->isItemChecked(m_BrowserFullId)) QmConfig::instance()->set("main-window", "full-browser", 1); else QmConfig::instance()->set("main-window", "full-browser", 0); }/*! \return A pointer to the (file) dialog. */QmFileDialog*QmControlBar::makeDialog(){ QmFileDialog *dlg = 0; if ( m_MainFileDialogAvailable ) { dlg = m_pMainFileDialog; m_MainFileDialogAvailable = false; } else dlg = new QmFileDialog( 0, "file-dialog", false ); return dlg;}/*! */voidQmControlBar::destroyDialog( QFileDialog *dlg){ if ( dlg != m_pMainFileDialog ) trash( dlg ); else m_MainFileDialogAvailable = true;}/*! */voidQmControlBar::showDialog( QFileDialog *dlg){ QRect file_rect = QmConfig::instance()->getRect( "file-dialog", "geometry" ); if ( file_rect.isValid() ) { dlg->resize( file_rect.size() ); dlg->move( file_rect.topLeft() ); } dlg->show();}/*! Adds one or more songs to the list. \sa addDir(), addPlayList() */voidQmControlBar::addFiles(){ if ( m_pMainWindow->state() == QmMainWindow::Busy ) // Do not show dialogs when busy return; QmFileDialog *dlg = makeDialog(); connect( dlg, SIGNAL( dialogDone( QFileDialog *, int ) ), this, SLOT( doAddFiles( QFileDialog *, int ) ) ); QmConfig *conf = QmConfig::instance(); dlg->setCaption( tr("Apollo - Add MP3 files")); dlg->setDir( QDir( conf->getString( "path", "music" ) ) ); QStringList tmp; tmp.append( "MP3 files (*.mp3)" ); tmp.append( "All Files (*)" ); dlg->setFilters( tmp ); dlg->setMode( QFileDialog::ExistingFiles ); showDialog(dlg);}/*! Adds a directory to the play list. \sa addFiles(), addPlayList() */voidQmControlBar::addDir(){ if ( m_pMainWindow->state() == QmMainWindow::Busy ) // Do not show dialogs when busy return; QmFileDialog *dlg = makeDialog(); connect( dlg, SIGNAL( dialogDone( QFileDialog *, int ) ), this, SLOT( doAddDir( QFileDialog *, int ) ) ); QmConfig *conf = QmConfig::instance(); dlg->setCaption(tr("Apollo - Add directory")); dlg->setDir( QDir( conf->getString( "path", "music" ) ) ); dlg->setMode( QFileDialog::Directory ); showDialog(dlg);}/*! Adds a playlist to the playlist. \sa addFiles(), addDir()*/voidQmControlBar::addPlayList(){ if ( m_pMainWindow->state() == QmMainWindow::Busy ) // Do not show dialogs when busy return; QmFileDialog *dlg = makeDialog(); connect( dlg, SIGNAL( dialogDone( QFileDialog *, int ) ), this, SLOT( doAddPlayList( QFileDialog *, int ) ) ); QmConfig *conf = QmConfig::instance(); dlg->setCaption(tr("Apollo - Add playlist")); dlg->setDir( QDir( conf->getString( "path", "playlist" ) ) ); QStringList tmp; tmp.append( "Playlists (*.m3u *.xml)" ); tmp.append( "All Files (*)" ); dlg->setFilters( tmp ); dlg->setMode( QFileDialog::ExistingFile ); showDialog(dlg);}/*! Adds the files selected in the \c dlg object if \c val is Accepted.*/voidQmControlBar::doAddFiles( QFileDialog *dlg, int val ){ if ( val == QDialog::Accepted ) { QmConfig *conf = QmConfig::instance(); conf->set( "path", "music", dlg->dir()->absPath() ); conf->set( "file-dialog", "geometry", QRect( dlg->pos(), dlg->size() ) ); QStringList strlist = dlg->selectedFiles(); if( ! strlist.isEmpty()) { m_pMainWindow->setState( QmMainWindow::Busy ); for(QStringList::ConstIterator it = strlist.begin(); it != strlist.end(); ++it) { m_pMainWindow->playListAppendFile(*it); } int w = m_pMainWindow->playList()->header()->width(); w = w > 400 ? w : 400; setMaximumSize(w, maximumSize().height()); m_pMainWindow->setState( QmMainWindow::Ready ); updateControls(); } } disconnect( dlg, SIGNAL( dialogDone( QFileDialog *, int ) ), this, SLOT( doAddFiles( QFileDialog *, int ) ) ); destroyDialog(dlg);}/*! Adds the directory selected in the \c dlg object if \c val is accepted.*/voidQmControlBar::doAddDir( QFileDialog *dlg, int val ){ if ( val == QDialog::Accepted ) { // We do not want the selected directory to be the directory shown // next time we open the dialog, so here we use dir() QmConfig *conf = QmConfig::instance(); conf->set( "path", "music", dlg->dir()->absPath() ); conf->set( "file-dialog", "geometry", QRect( dlg->pos(), dlg->size() ) ); QString dirname = dlg->selectedFile(); // everything is a file :) // If no directory is selected, use the parent directory if ( dirname.isNull() ) dirname = dlg->dir()->absPath(); if( ! dirname.isEmpty()) { m_pMainWindow->setState( QmMainWindow::Busy ); m_pMainWindow->playListAppendDir(dirname); m_pMainWindow->setState( QmMainWindow::Ready ); updateControls(); } } disconnect( dlg, SIGNAL( dialogDone( QFileDialog *, int ) ), this, SLOT( doAddDir( QFileDialog *, int ) ) ); destroyDialog(dlg);}/*! Adds the playlist selected in the \c dlg object if \c val is accepted.*/voidQmControlBar::doAddPlayList( QFileDialog *dlg, int val ){ if ( val == QDialog::Accepted ) { QmConfig *conf = QmConfig::instance(); conf->set( "path", "playlist", dlg->dir()->absPath() ); conf->set( "file-dialog", "geometry", QRect( dlg->pos(), dlg->size() ) ); QString s = dlg->selectedFile(); if( ! s.isEmpty() ) { m_pMainWindow->setState( QmMainWindow::Busy ); m_pMainWindow->playListAppendList(s); m_pMainWindow->setState( QmMainWindow::Ready ); updateControls(); } } disconnect( dlg, SIGNAL( dialogDone( QFileDialog *, int ) ), this, SLOT( doAddPlayList( QFileDialog *, int ) ) ); destroyDialog(dlg);}/*! Opens up a file requester asking to save the play list. */voidQmControlBar::savePlayList(){ if ( m_pMainWindow->state() == QmMainWindow::Busy ) // Do not show dialogs when busy return; QmFileDialog *dlg = new QmFileDialog( 0, "file-dialog", false ); connect( dlg, SIGNAL( dialogDone( QFileDialog *, int ) ), this, SLOT( doSavePlayList( QFileDialog *, int ) ) ); QmConfig *conf = QmConfig::instance(); dlg->setDir( QDir( conf->getString( "path", "playlist" ) ) ); dlg->setMode( QFileDialog::AnyFile ); QStringList tmp; tmp.append( "Playlists (*.m3u *.xml)" ); tmp.append( "All Files (*)" ); dlg->setFilters( tmp ); dlg->setCaption( "Apollo - Save playlist" ); QRect file_rect = conf->getRect( "file-dialog", "geometry" ); if ( file_rect.isValid() ) { dlg->resize( file_rect.size() ); dlg->move( file_rect.topLeft() ); } dlg->show();}/*! Helper function which saves the selected file in the dialog \c dlg. \sa savePlayList()*/voidQmControlBar::doSavePlayList( QFileDialog *dlg, int val ){ if ( val == QDialog::Accepted ) { QmConfig *conf = QmConfig::instance(); conf->set( "path", "playlist", dlg->dir()->absPath() ); conf->set( "file-dialog", "geometry", QRect( dlg->pos(), dlg->size() ) ); QString s = dlg->selectedFile(); if ( ! s.isEmpty() ) { if ( s.findRev(".m3u", -1, false) != static_cast<int>(s.length()) - 4 && s.findRev(".xml", -1, false) != static_cast<int>(s.length()) - 4 ) { s += ".xml";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -