playlistwindow.cpp
来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C++ 代码 · 共 1,244 行 · 第 1/4 页
CPP
1,244 行
void PlaylistWindow::addLastfmNeighbor() //SLOT{ if( !LastFm::Controller::checkCredentials() ) return; const KURL url( QString( "lastfm://user/%1/neighbours" ) .arg( AmarokConfig::scrobblerUsername() ) ); Playlist::instance()->insertMedia( url );}void PlaylistWindow::playLastfmCustom() //SLOT{ const QString token = LastFm::Controller::createCustomStation(); if( token.isEmpty() ) return; const KURL url( "lastfm://artist/" + token + "/similarartists" ); Playlist::instance()->insertMedia( url, Playlist::Append|Playlist::DirectPlay );}void PlaylistWindow::addLastfmCustom() //SLOT{ const QString token = LastFm::Controller::createCustomStation(); if( token.isEmpty() ) return; const KURL url( "lastfm://artist/" + token + "/similarartists" ); Playlist::instance()->insertMedia( url );}void PlaylistWindow::playLastfmGlobaltag( int id ) //SLOT{ if( !LastFm::Controller::checkCredentials() ) return; const QString tag = m_lastfmTags[id].lower(); const KURL url( "lastfm://globaltags/" + tag ); Playlist::instance()->insertMedia( url, Playlist::Append|Playlist::DirectPlay );}void PlaylistWindow::addLastfmGlobaltag( int id ) //SLOT{ if( !LastFm::Controller::checkCredentials() ) return; const QString tag = m_lastfmTags[id].lower(); const KURL url( "lastfm://globaltags/" + tag ); Playlist::instance()->insertMedia( url );}void PlaylistWindow::playAudioCD() //SLOT{ KURL::List urls; if( EngineController::engine()->getAudioCDContents(QString::null, urls) ) { if (!urls.isEmpty()) Playlist::instance()->insertMedia(urls, Playlist::Replace); } else { // Default behaviour m_browsers->showBrowser( "FileBrowser" ); FileBrowser *fb = static_cast<FileBrowser *>( m_browsers->browser("FileBrowser") ); fb->setUrl( KURL("audiocd:/Wav/") ); }}void PlaylistWindow::showScriptSelector() //SLOT{ ScriptManager::instance()->show(); ScriptManager::instance()->raise();}void PlaylistWindow::showQueueManager() //SLOT{ Playlist::instance()->showQueueManager();}void PlaylistWindow::showStatistics() //SLOT{ if( Statistics::instance() ) { Statistics::instance()->raise(); return; } Statistics dialog; dialog.exec();}void PlaylistWindow::slotToggleFocus() //SLOT{ if( m_browsers->currentBrowser() && ( Playlist::instance()->hasFocus() || m_lineEdit->hasFocus() ) ) m_browsers->currentBrowser()->setFocus(); else Playlist::instance()->setFocus();}void PlaylistWindow::slotMenuActivated( int index ) //SLOT{ switch( index ) { default: //saves duplicating the code and header requirements Amarok::Menu::instance()->slotActivated( index ); break; case ID_SHOW_TOOLBAR: m_toolbar->setShown( !m_toolbar->isShown() ); AmarokConfig::setShowToolbar( !AmarokConfig::showToolbar() ); m_settingsMenu->changeItem( index, m_toolbar->isShown() ? i18n("Hide Toolbar") : i18n("Show Toolbar") ); break; case ID_SHOW_PLAYERWINDOW: AmarokConfig::setShowPlayerWindow( !AmarokConfig::showPlayerWindow() ); m_settingsMenu->changeItem( index, AmarokConfig::showPlayerWindow() ? i18n("Hide Player &Window") : i18n("Show Player &Window") ); QTimer::singleShot( 0, kapp, SLOT( applySettings() ) ); break; case Amarok::Menu::ID_RESCAN_COLLECTION: CollectionDB::instance()->startScan(); break; }}void PlaylistWindow::actionsMenuAboutToShow() //SLOT{}void PlaylistWindow::toolsMenuAboutToShow() //SLOT{ m_toolsMenu->setItemEnabled( Amarok::Menu::ID_CONFIGURE_EQUALIZER, EngineController::hasEngineProperty( "HasEqualizer" ) ); m_toolsMenu->setItemEnabled( Amarok::Menu::ID_RESCAN_COLLECTION, !ThreadManager::instance()->isJobPending( "CollectionScanner" ) );}#include <kwin.h>#include <kwinmodule.h>/** * Show/hide playlist global shortcut and PlayerWindow PlaylistButton connect to this slot * RULES: * 1. hidden & iconified -> deiconify & show @n * 2. hidden & deiconified -> show @n * 3. shown & iconified -> deiconify @n * 4. shown & deiconified -> hide @n * 5. don't hide if there is no tray icon or playerWindow. todo (I can't be arsed) @n * * @note isMinimized() can only be true if the window isShown() * this has taken me hours to get right, change at your peril! * there are more contingencies than you can believe */void PlaylistWindow::showHide() //SLOT{#ifdef Q_WS_X11 const KWin::WindowInfo info = KWin::windowInfo( winId() ); const uint desktop = KWin::currentDesktop(); const bool isOnThisDesktop = info.isOnDesktop( desktop ); const bool isShaded = false; if( isShaded ) { KWin::clearState( winId(), NET::Shaded ); setShown( true ); } if( !isOnThisDesktop ) { KWin::setOnDesktop( winId(), desktop ); setShown( true ); } else if( !info.isMinimized() && !isShaded ) setShown( !isShown() ); if( isShown() ) KWin::deIconifyWindow( winId() );#else setShown( !isShown() );#endif}void PlaylistWindow::activate(){#ifdef Q_WS_X11 const KWin::WindowInfo info = KWin::windowInfo( winId() ); if( KWinModule( NULL, KWinModule::INFO_DESKTOP ).activeWindow() != winId()) setShown( true ); else if( !info.isMinimized() ) setShown( true ); if( isShown() ) KWin::activateWindow( winId() );#else setShown( true );#endif}bool PlaylistWindow::isReallyShown() const{#ifdef Q_WS_X11 const KWin::WindowInfo info = KWin::windowInfo( winId() ); return isShown() && !info.isMinimized() && info.isOnDesktop( KWin::currentDesktop() );#else return isShown();#endif}voidPlaylistWindow::mbAvailabilityChanged( bool isAvailable ) //SLOT{ if( isAvailable ) { if( m_browsers->indexForName( "MediaBrowser" ) == -1 ) m_browsers->addBrowser( "MediaBrowser", MediaBrowser::instance(), i18n( "Media Device" ), Amarok::icon( "device" ) ); } else { if( m_browsers->indexForName( "MediaBrowser" ) != -1 ) { showBrowser( "CollectionBrowser" ); m_browsers->removeMediaBrowser( MediaBrowser::instance() ); } }}///////////////////////////////////////////////////////////////////////////////////////////// DynamicBar//////////////////////////////////////////////////////////////////////////////////////////DynamicBar::DynamicBar(QWidget* parent) : QHBox( parent, "DynamicModeStatusBar" ){ m_titleWidget = new DynamicTitle(this); setSpacing( KDialog::spacingHint() ); QWidget *spacer = new QWidget( this ); setStretchFactor( spacer, 10 );}// necessary because it has to be constructed before Playlist::instance(), but also connect to itvoid DynamicBar::init(){ connect(Playlist::instance()->qscrollview(), SIGNAL(dynamicModeChanged(const DynamicMode*)), SLOT(slotNewDynamicMode(const DynamicMode*))); KPushButton* editDynamicButton = new KPushButton( i18n("Edit"), this, "DynamicModeEdit" ); connect( editDynamicButton, SIGNAL(clicked()), Playlist::instance()->qscrollview(), SLOT(editActiveDynamicMode()) ); KPushButton* repopButton = new KPushButton( i18n("Repopulate"), this, "DynamicModeRepopulate" ); connect( repopButton, SIGNAL(clicked()), Playlist::instance()->qscrollview(), SLOT(repopulate()) ); KPushButton* disableButton = new KPushButton( i18n("Turn Off"), this, "DynamicModeDisable" ); connect( disableButton, SIGNAL(clicked()), Playlist::instance()->qscrollview(), SLOT(disableDynamicMode()) ); slotNewDynamicMode( Playlist::instance()->dynamicMode() );}void DynamicBar::slotNewDynamicMode(const DynamicMode* mode){ setShown(mode); if (mode) changeTitle(mode->title());}void DynamicBar::changeTitle(const QString& title){ m_titleWidget->setTitle(title);}///////////////////////////////////////////////////////////////////////////////////////////// DynamicTitle//////////////////////////////////////////////////////////////////////////////////////////DynamicTitle::DynamicTitle(QWidget* w) : QWidget(w, "dynamic title"){ m_font.setBold( true ); setTitle("");}void DynamicTitle::setTitle(const QString& newTitle){ m_title = newTitle; QFontMetrics fm(m_font); setMinimumWidth( s_curveWidth*3 + fm.width(m_title) + s_imageSize ); setMinimumHeight( fm.height() );}void DynamicTitle::paintEvent(QPaintEvent* /*e*/){ QPainter p; p.begin( this, false ); QPen pen( colorGroup().highlightedText(), 0, Qt::NoPen ); p.setPen( pen ); p.setBrush( colorGroup().highlight() ); p.setFont(m_font); QFontMetrics fm(m_font); int textHeight = fm.height(); if (textHeight < s_imageSize) textHeight = s_imageSize; int textWidth = fm.width(m_title); int yStart = (height() - textHeight) / 2; if(yStart < 0) yStart = 0; p.drawEllipse( 0, yStart, s_curveWidth * 2, textHeight); p.drawEllipse( s_curveWidth + textWidth + s_imageSize, yStart, s_curveWidth*2, textHeight); p.fillRect( s_curveWidth, yStart, textWidth + s_imageSize + s_curveWidth, textHeight , QBrush( colorGroup().highlight()) ); p.drawPixmap( s_curveWidth, yStart + ((textHeight - s_imageSize) /2), SmallIcon("dynamic") ); //not sure why first arg of Rect shouldn't add @curveWidth p.drawText( QRect(s_imageSize, yStart, s_curveWidth + textWidth +s_imageSize, textHeight), Qt::AlignCenter, m_title);}#include "playlistwindow.moc"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?