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 + -
显示快捷键?