AlbumsFilterBar::AlbumsFilterBar( QGraphicsItem *parent, Qt::WindowFlags wFlags ) : QGraphicsWidget( parent, wFlags ) , m_editor( new KLineEdit ) , m_closeIcon( new Plasma::IconWidget( KIcon("dialog-close"), QString(), this ) ) { QGraphicsProxyWidget *editProxy = new QGraphicsProxyWidget( this ); editProxy->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); editProxy->setWidget( m_editor ); m_editor->installEventFilter( this ); m_editor->setAttribute( Qt::WA_NoSystemBackground ); m_editor->setAutoFillBackground( true ); m_editor->setClearButtonShown( true ); m_editor->setClickMessage( i18n( "Filter Albums" ) ); m_editor->setContentsMargins( 0, 0, 0, 0 ); QSizeF iconSize = m_closeIcon->sizeFromIconSize( 16 ); m_closeIcon->setMaximumSize( iconSize ); m_closeIcon->setMinimumSize( iconSize ); QGraphicsLinearLayout *layout = new QGraphicsLinearLayout( Qt::Horizontal, this ); layout->setSpacing( 1 ); layout->addItem( editProxy ); layout->addItem( m_closeIcon ); layout->setStretchFactor( editProxy, 100 ); layout->setAlignment( editProxy, Qt::AlignCenter ); layout->setAlignment( m_closeIcon, Qt::AlignCenter ); layout->setContentsMargins( 0, 2, 0, 0 ); m_closeIcon->setToolTip( i18n( "Close" ) ); connect( m_closeIcon, SIGNAL(clicked()), SIGNAL(closeRequested()) ); connect( m_editor, SIGNAL(textChanged(QString)), SIGNAL(filterTextChanged(QString)) ); }
static QGraphicsProxyWidget *createItem(const QSizeF &minimum = QSizeF(100.0, 100.0), const QSizeF &preferred = QSize(150.0, 100.0), const QSizeF &maximum = QSizeF(200.0, 100.0), const QString &name = "0") { QGraphicsProxyWidget *w = new QGraphicsProxyWidget; w->setWidget(new QPushButton(name)); w->setData(0, name); w->setMinimumSize(minimum); w->setPreferredSize(preferred); w->setMaximumSize(maximum); w->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); return w; }
ArtistWidget::ArtistWidget( const SimilarArtistPtr &artist, QGraphicsWidget *parent, Qt::WindowFlags wFlags ) : QGraphicsWidget( parent, wFlags ) , m_artist( artist ) { setAttribute( Qt::WA_NoSystemBackground, true ); m_image = new QLabel; m_image->setAttribute( Qt::WA_NoSystemBackground, true ); m_image->setFixedSize( 128, 128 ); m_image->setCursor( Qt::PointingHandCursor ); QGraphicsProxyWidget *imageProxy = new QGraphicsProxyWidget( this ); imageProxy->setWidget( m_image ); m_image->installEventFilter( this ); m_nameLabel = new QLabel; m_match = new QLabel; m_tagsLabel = new QLabel; m_topTrackLabel = new QLabel; m_bio = new QGraphicsWidget( this ); QGraphicsProxyWidget *nameProxy = new QGraphicsProxyWidget( this ); QGraphicsProxyWidget *matchProxy = new QGraphicsProxyWidget( this ); QGraphicsProxyWidget *topTrackProxy = new QGraphicsProxyWidget( this ); QGraphicsProxyWidget *tagsProxy = new QGraphicsProxyWidget( this ); nameProxy->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); matchProxy->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred ); topTrackProxy->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); tagsProxy->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); imageProxy->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); nameProxy->setWidget( m_nameLabel ); matchProxy->setWidget( m_match ); topTrackProxy->setWidget( m_topTrackLabel ); tagsProxy->setWidget( m_tagsLabel ); m_nameLabel->setAttribute( Qt::WA_NoSystemBackground ); m_match->setAttribute( Qt::WA_NoSystemBackground ); m_topTrackLabel->setAttribute( Qt::WA_NoSystemBackground ); m_tagsLabel->setAttribute( Qt::WA_NoSystemBackground ); m_image->setAlignment( Qt::AlignCenter ); m_match->setAlignment( Qt::AlignRight | Qt::AlignVCenter ); m_nameLabel->setAlignment( Qt::AlignLeft | Qt::AlignVCenter ); m_topTrackLabel->setAlignment( Qt::AlignLeft | Qt::AlignVCenter ); m_tagsLabel->setAlignment( Qt::AlignLeft | Qt::AlignVCenter ); m_nameLabel->setWordWrap( false ); m_match->setWordWrap( false ); m_topTrackLabel->setWordWrap( false ); m_tagsLabel->setWordWrap( false ); m_match->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); m_topTrackLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); m_match->setMinimumWidth( 10 ); m_topTrackLabel->setMinimumWidth( 10 ); m_nameLabel->setMinimumWidth( 10 ); m_tagsLabel->setMinimumWidth( 10 ); QFontMetricsF fm( font() ); m_bio->setMinimumHeight( fm.lineSpacing() * 5 ); m_bio->setMaximumHeight( fm.lineSpacing() * 5 ); m_bio->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); m_bioLayout.setCacheEnabled( true ); QFont artistFont; artistFont.setPointSize( artistFont.pointSize() + 2 ); artistFont.setBold( true ); m_nameLabel->setFont( artistFont ); m_topTrackLabel->setFont( KGlobalSettings::smallestReadableFont() ); m_tagsLabel->setFont( KGlobalSettings::smallestReadableFont() ); m_match->setFont( KGlobalSettings::smallestReadableFont() ); m_navigateButton = new Plasma::PushButton( this ); m_navigateButton->setMaximumSize( QSizeF( 22, 22 ) ); m_navigateButton->setIcon( KIcon( "edit-find" ) ); m_navigateButton->setToolTip( i18n( "Show in Media Sources" ) ); connect( m_navigateButton, SIGNAL(clicked()), this, SLOT(navigateToArtist()) ); m_lastfmStationButton = new Plasma::PushButton( this ); m_lastfmStationButton->setMaximumSize( QSizeF( 22, 22 ) ); m_lastfmStationButton->setIcon( KIcon("view-services-lastfm-amarok") ); m_lastfmStationButton->setToolTip( i18n( "Add Last.fm artist station to the Playlist" ) ); connect( m_lastfmStationButton, SIGNAL(clicked()), this, SLOT(addLastfmArtistStation()) ); m_topTrackButton = new Plasma::PushButton( this ); m_topTrackButton->setMaximumSize( QSizeF( 22, 22 ) ); m_topTrackButton->setIcon( KIcon( "media-track-add-amarok" ) ); m_topTrackButton->setToolTip( i18n( "Add top track to the Playlist" ) ); m_topTrackButton->hide(); connect( m_topTrackButton, SIGNAL(clicked()), this, SLOT(addTopTrackToPlaylist()) ); m_similarArtistButton = new Plasma::PushButton( this ); m_similarArtistButton->setMaximumSize( QSizeF( 22, 22 ) ); m_similarArtistButton->setIcon( KIcon( "similarartists-amarok" ) ); m_similarArtistButton->setToolTip( i18n( "Show Similar Artists of %1", m_artist->name() ) ); connect( m_similarArtistButton, SIGNAL(clicked()), this, SIGNAL(showSimilarArtists()) ); QGraphicsLinearLayout *buttonsLayout = new QGraphicsLinearLayout( Qt::Horizontal ); buttonsLayout->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred ); buttonsLayout->addItem( m_topTrackButton ); buttonsLayout->addItem( m_navigateButton ); buttonsLayout->addItem( m_lastfmStationButton ); QString artistUrl = m_artist->url().url(); if( !artistUrl.isEmpty() ) { m_urlButton = new Plasma::PushButton( this ); m_urlButton->setMaximumSize( QSizeF( 22, 22 ) ); m_urlButton->setIcon( KIcon("applications-internet") ); m_urlButton->setToolTip( i18n( "Open Last.fm webpage for this artist" ) ); connect( m_urlButton, SIGNAL(clicked()), this, SLOT(openArtistUrl()) ); buttonsLayout->addItem( m_urlButton ); } buttonsLayout->addItem( m_similarArtistButton ); // the image display is extended on two row m_layout = new QGraphicsGridLayout( this ); m_layout->addItem( imageProxy, 0, 0, 4, 1 ); m_layout->addItem( nameProxy, 0, 1 ); m_layout->addItem( buttonsLayout, 0, 2, Qt::AlignRight ); m_layout->addItem( topTrackProxy, 1, 1 ); m_layout->addItem( matchProxy, 1, 2, Qt::AlignRight ); m_layout->addItem( tagsProxy, 2, 1, 1, 2 ); m_layout->addItem( m_bio, 3, 1, 1, 2 ); m_match->setText( i18n( "Match: %1%", QString::number( m_artist->match() ) ) ); m_nameLabel->setText( m_artist->name() ); QTimer::singleShot( 0, this, SLOT(updateInfo()) ); }