diff --git a/data/images/view-toggle-pressed-left.svg b/data/images/view-toggle-pressed-left.svg
index 7ea9c32f7..c58c0ad03 100644
--- a/data/images/view-toggle-pressed-left.svg
+++ b/data/images/view-toggle-pressed-left.svg
@@ -1,6 +1,6 @@
\ No newline at end of file
diff --git a/data/images/view-toggle-pressed-right.svg b/data/images/view-toggle-pressed-right.svg
index c58c0ad03..7ea9c32f7 100644
--- a/data/images/view-toggle-pressed-right.svg
+++ b/data/images/view-toggle-pressed-right.svg
@@ -1,6 +1,6 @@
\ No newline at end of file
diff --git a/data/qml/tomahawkimports/FlexibleHeader.qml b/data/qml/tomahawkimports/FlexibleHeader.qml
new file mode 100644
index 000000000..94809cd68
--- /dev/null
+++ b/data/qml/tomahawkimports/FlexibleHeader.qml
@@ -0,0 +1,122 @@
+import QtQuick 1.1
+import tomahawk 1.0
+
+Rectangle {
+ id: root
+ anchors.fill: parent
+
+ property bool showSearchField: true
+
+ property int spacing: defaultFontHeight / 2
+
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#615858" }
+ GradientStop { position: 1.0; color: "#231F1F" }
+ }
+
+ Row {
+ anchors.fill: parent
+ anchors.margins: root.spacing
+ spacing: root.spacing
+
+ Image {
+ id: iconImage
+ source: iconSource
+ height: parent.height * 0.8
+ width: height
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ Column {
+ height: parent.height
+ width: parent.width - iconImage.width - toggleViewButtons.width - searchField.width - parent.spacing * 5
+
+ Item {
+ id: titleItem
+ height: captionText1.height
+ width: parent.width
+ clip: true
+
+ property string titleText: caption
+
+ onTitleTextChanged: {
+ if(captionText1.text.length > 0) {
+ captionText2.text = caption;
+ renewTitleAnimation.start();
+ } else {
+ captionText1.text = titleText;
+ }
+ }
+
+ ParallelAnimation {
+ id: renewTitleAnimation
+ property int duration: 500
+ property variant easingType: Easing.OutBounce;
+
+ NumberAnimation { target: captionText2; property: "anchors.topMargin"; to: 0; duration: renewTitleAnimation.duration; easing.type: renewTitleAnimation.easingType }
+ NumberAnimation { target: captionText1; property: "anchors.topMargin"; to: captionText1.height * 2; duration: renewTitleAnimation.duration; easing.type: renewTitleAnimation.easingType }
+
+ onCompleted: {
+ captionText1.text = titleItem.titleText
+ captionText2.anchors.topMargin = -captionText2.height * 2
+ captionText1.anchors.topMargin = 0
+ }
+ }
+
+ Text {
+ id: captionText1
+ color: "white"
+ anchors.left: parent.left
+ anchors.top: parent.top
+
+ font.pointSize: defaultFontSize + 4
+ font.bold: true
+ width: parent.width
+ elide: Text.ElideRight
+ }
+ Text {
+ id: captionText2
+ color: "white"
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.topMargin: -height * 2
+ font.pointSize: defaultFontSize + 4
+ font.bold: true
+ width: parent.width
+ elide: Text.ElideRight
+ }
+
+ }
+ Text {
+ text: description
+ color: "white"
+ font.pointSize: defaultFontSize + 1
+ width: parent.width
+ elide: Text.ElideRight
+ }
+ }
+
+ ToggleViewButtons {
+ id: toggleViewButtons
+ anchors.verticalCenter: parent.verticalCenter
+ height: defaultFontHeight * 1.5
+ model: toggleViewButtonModel
+
+ onCurrentIndexChanged: mainView.viewModeSelected(currentIndex)
+ }
+
+
+ SearchField {
+ id: searchField
+ opacity: root.showSearchField ? 1 : 0
+ anchors {
+ right: parent.right
+ verticalCenter: parent.verticalCenter
+ rightMargin: root.spacing
+ }
+
+ onTextChanged: mainView.setFilterText(text)
+
+ }
+ }
+}
diff --git a/data/qml/tomahawkimports/ToggleViewButtons.qml b/data/qml/tomahawkimports/ToggleViewButtons.qml
new file mode 100644
index 000000000..80714fd12
--- /dev/null
+++ b/data/qml/tomahawkimports/ToggleViewButtons.qml
@@ -0,0 +1,34 @@
+import QtQuick 1.1
+import tomahawk 1.0
+
+Row {
+ id: root
+ width: repeater.width
+
+ property alias model: repeater.model
+ property int currentIndex: 0
+
+ Repeater {
+ id: repeater
+ height: root.height
+ width: count * height
+
+
+ delegate: Image {
+ height: repeater.height
+ width: height
+
+ source: "../../images/view-toggle-" + (index === root.currentIndex ? "pressed-" : "inactive-" ) + (index === 0 ? "left" : ( index === repeater.count - 1 ? "right" : "centre" )) + ".svg"
+ smooth: true
+ Image {
+ anchors.fill: parent
+ source: "../../images/" + modelData + (index === root.currentIndex ? "-active.svg" : "-inactive.svg")
+ }
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ onClicked: root.currentIndex = index
+ }
+ }
+ }
+}
diff --git a/resources.qrc b/resources.qrc
index b95ff53f5..38b72ece3 100644
--- a/resources.qrc
+++ b/resources.qrc
@@ -35,21 +35,21 @@
data/images/skip-pressed.svg
data/images/skip-rest.svg
data/images/user-avatar.svg
- data/images/view-toggle-active-centre.png
- data/images/view-toggle-active-left.png
- data/images/view-toggle-active-right.png
+ data/images/view-toggle-active-centre.svg
+ data/images/view-toggle-active-left.svg
+ data/images/view-toggle-active-right.svg
data/images/view-toggle-icon-artist-active.svg
data/images/view-toggle-icon-artist-inactive.svg
data/images/view-toggle-icon-grid-active.svg
data/images/view-toggle-icon-grid-inactive.svg
data/images/view-toggle-icon-list-active.svg
data/images/view-toggle-icon-list-inactive.svg
- data/images/view-toggle-inactive-centre.png
- data/images/view-toggle-inactive-left.png
- data/images/view-toggle-inactive-right.png
- data/images/view-toggle-pressed-centre.png
- data/images/view-toggle-pressed-left.png
- data/images/view-toggle-pressed-right.png
+ data/images/view-toggle-inactive-centre.svg
+ data/images/view-toggle-inactive-left.svg
+ data/images/view-toggle-inactive-right.svg
+ data/images/view-toggle-pressed-centre.svg
+ data/images/view-toggle-pressed-left.svg
+ data/images/view-toggle-pressed-right.svg
data/images/list-add.svg
data/images/list-remove.svg
data/images/arrow-up-double.svg
@@ -166,5 +166,7 @@
data/images/cancel.svg
data/images/delete.svg
data/images/ok.svg
+ data/qml/tomahawkimports/FlexibleHeader.qml
+ data/qml/tomahawkimports/ToggleViewButtons.qml
diff --git a/src/libtomahawk/CMakeLists.txt b/src/libtomahawk/CMakeLists.txt
index 87958d586..654b38357 100644
--- a/src/libtomahawk/CMakeLists.txt
+++ b/src/libtomahawk/CMakeLists.txt
@@ -55,7 +55,6 @@ set( libGuiSources
infobar/InfoBar.cpp
- playlist/FlexibleHeader.cpp
playlist/FlexibleView.cpp
playlist/TreeModel.cpp
playlist/TreeProxyModel.cpp
@@ -124,6 +123,7 @@ set( libGuiSources
widgets/AnimatedCounterLabel.cpp
widgets/BasicHeader.cpp
+ widgets/DeclarativeHeader.cpp
widgets/Breadcrumb.cpp
widgets/BreadcrumbButton.cpp
widgets/CheckDirTree.cpp
diff --git a/src/libtomahawk/ViewManager.cpp b/src/libtomahawk/ViewManager.cpp
index 986bf5ff4..0e7c57919 100644
--- a/src/libtomahawk/ViewManager.cpp
+++ b/src/libtomahawk/ViewManager.cpp
@@ -137,7 +137,7 @@ ViewManager::createPageForPlaylist( const playlist_ptr& playlist )
PlaylistView* pv = new PlaylistView();
view->setDetailedView( pv );
- view->setPixmap( pv->pixmap() );
+ view->setHeaderIconSource( pv->iconSource() );
view->setEmptyTip( tr( "This playlist is empty!" ) );
// We need to set the model on the view before loading the playlist, so spinners & co are connected
@@ -392,7 +392,7 @@ ViewManager::showRecentPlaysPage()
if ( !m_recentPlaysWidget )
{
FlexibleView* pv = new FlexibleView( m_widget );
- pv->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RecentlyPlayed ) );
+ pv->setHeaderIconSource( TomahawkUtils::defaultImagePath( TomahawkUtils::RecentlyPlayed ) );
RecentlyPlayedModel* raModel = new RecentlyPlayedModel( pv );
raModel->setTitle( tr( "Recently Played Tracks" ) );
@@ -568,8 +568,8 @@ ViewManager::setPage( ViewPage* page, bool trackHistory )
if( obj->metaObject()->indexOfSignal( "nameChanged(QString)" ) > -1 )
connect( obj, SIGNAL( nameChanged( QString ) ), m_infobar, SLOT( setCaption( QString ) ), Qt::UniqueConnection );
- if( obj->metaObject()->indexOfSignal( "pixmapChanged(QPixmap)" ) > -1 )
- connect( obj, SIGNAL( pixmapChanged( QPixmap ) ), m_infobar, SLOT( setPixmap( QPixmap ) ), Qt::UniqueConnection );
+ if( obj->metaObject()->indexOfSignal( "iconSourceChanged(QString)" ) > -1 )
+ connect( obj, SIGNAL( iconSourceChanged( QString ) ), m_infobar, SLOT( setPixmap( QPixmap ) ), Qt::UniqueConnection );
if( obj->metaObject()->indexOfSignal( "destroyed(QWidget*)" ) > -1 )
connect( obj, SIGNAL( destroyed( QWidget* ) ), SLOT( onWidgetDestroyed( QWidget* ) ), Qt::UniqueConnection );
@@ -646,7 +646,7 @@ ViewManager::updateView()
}
m_infobar->setLongDescription( currentPage()->longDescription() );
- m_infobar->setPixmap( currentPage()->pixmap() );
+ m_infobar->setIconSource( currentPage()->iconSource() );
}
diff --git a/src/libtomahawk/ViewPage.h b/src/libtomahawk/ViewPage.h
index 6535221e0..963a1a314 100644
--- a/src/libtomahawk/ViewPage.h
+++ b/src/libtomahawk/ViewPage.h
@@ -56,7 +56,7 @@ public:
virtual Tomahawk::album_ptr descriptionAlbum() const { return Tomahawk::album_ptr(); }
virtual QString longDescription() const { return QString(); }
- virtual QPixmap pixmap() const { return QPixmap( RESPATH "icons/tomahawk-icon-128x128.png" ); }
+ virtual QString iconSource() const { return QLatin1String(RESPATH "icons/tomahawk-icon.svg"); }
virtual bool showInfoBar() const { return true; }
virtual bool showFilter() const { return false; }
diff --git a/src/libtomahawk/infobar/InfoBar.cpp b/src/libtomahawk/infobar/InfoBar.cpp
index cf1fc62fd..09b5d2e0c 100644
--- a/src/libtomahawk/infobar/InfoBar.cpp
+++ b/src/libtomahawk/infobar/InfoBar.cpp
@@ -184,9 +184,9 @@ InfoBar::setLongDescription( const QString& s )
void
-InfoBar::setPixmap( const QPixmap& p )
+InfoBar::setIconSource( const QString& iconSource )
{
- ui->imageLabel->setPixmap( p.scaledToHeight( IMAGE_HEIGHT, Qt::SmoothTransformation ) );
+ ui->imageLabel->setPixmap( QPixmap( iconSource ).scaledToHeight( IMAGE_HEIGHT, Qt::SmoothTransformation ) );
}
diff --git a/src/libtomahawk/infobar/InfoBar.h b/src/libtomahawk/infobar/InfoBar.h
index 7b4b512d9..5166cec9a 100644
--- a/src/libtomahawk/infobar/InfoBar.h
+++ b/src/libtomahawk/infobar/InfoBar.h
@@ -58,7 +58,7 @@ public slots:
void setDescription( const Tomahawk::album_ptr& album_ptr );
void setLongDescription( const QString& s );
- void setPixmap( const QPixmap& p );
+ void setIconSource( const QString& iconSource );
void setFilter( const QString& filter );
void setFilterAvailable( bool b );
diff --git a/src/libtomahawk/playlist/FlexibleHeader.cpp b/src/libtomahawk/playlist/FlexibleHeader.cpp
deleted file mode 100644
index 7c574fa08..000000000
--- a/src/libtomahawk/playlist/FlexibleHeader.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/* === This file is part of Tomahawk Player - ===
- *
- * Copyright 2010-2011, Christian Muehlhaeuser
- * Copyright 2012, Teo Mrnjavac
- *
- * Tomahawk is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Tomahawk is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Tomahawk. If not, see .
- */
-
-#include "FlexibleHeader.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "playlist/FlexibleView.h"
-#include "ViewManager.h"
-#include "thirdparty/Qocoa/qsearchfield.h"
-#include "utils/Closure.h"
-#include "utils/TomahawkUtilsGui.h"
-#include "utils/Logger.h"
-#include "widgets/QueryLabel.h"
-#include "Source.h"
-
-using namespace Tomahawk;
-
-
-FlexibleHeader::FlexibleHeader( FlexibleView* parent )
- : BasicHeader( parent )
- , m_parent( parent )
-{
- QFile f( RESPATH "stylesheets/topbar-radiobuttons.css" );
- f.open( QFile::ReadOnly );
- QString css = QString::fromAscii( f.readAll() );
- f.close();
-
- QHBoxLayout* outerModeLayout = new QHBoxLayout;
- m_verticalLayout->addLayout( outerModeLayout );
- outerModeLayout->addSpacing( 156 );
- outerModeLayout->addStretch();
-
- QWidget* modeWidget = new QWidget( this );
- QHBoxLayout* modeLayout = new QHBoxLayout;
- modeWidget->setLayout( modeLayout );
- modeWidget->setStyleSheet( css );
-
- m_radioNormal = new QRadioButton( modeWidget );
- m_radioDetailed = new QRadioButton( modeWidget );
- m_radioCloud = new QRadioButton( modeWidget );
- //for the CSS:
- m_radioNormal->setObjectName( "radioNormal" );
- m_radioCloud->setObjectName( "radioCloud" );
-
- m_radioNormal->setFocusPolicy( Qt::NoFocus );
- m_radioDetailed->setFocusPolicy( Qt::NoFocus );
- m_radioCloud->setFocusPolicy( Qt::NoFocus );
-
- modeLayout->addWidget( m_radioNormal );
- modeLayout->addWidget( m_radioDetailed );
- modeLayout->addWidget( m_radioCloud );
-
- modeWidget->setFixedSize( 87, 30 );
-
- m_radioNormal->setChecked( true );
-
- outerModeLayout->addWidget( modeWidget );
- outerModeLayout->addStretch();
-
- m_filterField = new QSearchField( this );
- m_filterField->setPlaceholderText( tr( "Filter..." ) );
- m_filterField->setFixedWidth( 220 );
- m_mainLayout->addWidget( m_filterField );
-
- TomahawkUtils::unmarginLayout( outerModeLayout );
- TomahawkUtils::unmarginLayout( modeLayout );
-
- connect( &m_filterTimer, SIGNAL( timeout() ), SLOT( applyFilter() ) );
- connect( m_filterField, SIGNAL( textChanged( QString ) ), SLOT( onFilterEdited() ) );
-
- NewClosure( m_radioNormal, SIGNAL( clicked() ), const_cast< FlexibleView* >( parent ), SLOT( setCurrentMode( FlexibleViewMode ) ), FlexibleView::Flat )->setAutoDelete( false );
- NewClosure( m_radioDetailed, SIGNAL( clicked() ), const_cast< FlexibleView* >( parent ), SLOT( setCurrentMode( FlexibleViewMode ) ), FlexibleView::Detailed )->setAutoDelete( false );
- NewClosure( m_radioCloud, SIGNAL( clicked() ), const_cast< FlexibleView* >( parent ), SLOT( setCurrentMode( FlexibleViewMode ) ), FlexibleView::Grid )->setAutoDelete( false );
-}
-
-
-FlexibleHeader::~FlexibleHeader()
-{
-}
-
-
-void
-FlexibleHeader::setFilter( const QString& filter )
-{
- m_filterField->setText( filter );
-}
-
-
-void
-FlexibleHeader::onFilterEdited()
-{
- m_filter = m_filterField->text();
-
- m_filterTimer.stop();
- m_filterTimer.setInterval( 280 );
- m_filterTimer.setSingleShot( true );
- m_filterTimer.start();
-}
-
-
-void
-FlexibleHeader::applyFilter()
-{
- emit filterTextChanged( m_filterField->text() );
-}
-
-
-void
-FlexibleHeader::changeEvent( QEvent* e )
-{
- QWidget::changeEvent( e );
- switch ( e->type() )
- {
- case QEvent::LanguageChange:
-// ui->retranslateUi( this );
- break;
-
- default:
- break;
- }
-}
-
diff --git a/src/libtomahawk/playlist/FlexibleHeader.h b/src/libtomahawk/playlist/FlexibleHeader.h
deleted file mode 100644
index c55de483d..000000000
--- a/src/libtomahawk/playlist/FlexibleHeader.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* === This file is part of Tomahawk Player - ===
- *
- * Copyright 2010-2011, Christian Muehlhaeuser
- * Copyright 2012, Teo Mrnjavac
- *
- * Tomahawk is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Tomahawk is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Tomahawk. If not, see .
- */
-
-#ifndef FLEXIBLEHEADER_H
-#define FLEXIBLEHEADER_H
-
-#include
-
-#include "widgets/BasicHeader.h"
-#include "DllMacro.h"
-#include "Artist.h"
-
-class QPaintEvent;
-class FlexibleView;
-class QRadioButton;
-class QSearchField;
-
-class DLLEXPORT FlexibleHeader : public BasicHeader
-{
- Q_OBJECT
-
-public:
- FlexibleHeader( FlexibleView* parent );
- ~FlexibleHeader();
-
-public slots:
- void setFilter( const QString& filter );
-
-signals:
- void filterTextChanged( const QString& filter );
-
-protected:
- void changeEvent( QEvent* e );
-
-private slots:
- void onFilterEdited();
- void applyFilter();
-
-private:
- FlexibleView* m_parent;
-
- QString m_filter;
- QTimer m_filterTimer;
-
- QRadioButton* m_radioCloud;
- QRadioButton* m_radioDetailed;
- QRadioButton* m_radioNormal;
-
- QSearchField* m_filterField;
-};
-
-#endif
diff --git a/src/libtomahawk/playlist/FlexibleView.cpp b/src/libtomahawk/playlist/FlexibleView.cpp
index 038e6caf1..7fc2596e1 100644
--- a/src/libtomahawk/playlist/FlexibleView.cpp
+++ b/src/libtomahawk/playlist/FlexibleView.cpp
@@ -22,7 +22,7 @@
#include
#include
-#include "playlist/FlexibleHeader.h"
+#include "widgets/DeclarativeHeader.h"
#include "playlist/PlayableModel.h"
#include "playlist/PlaylistModel.h"
#include "playlist/TrackView.h"
@@ -37,13 +37,13 @@ using namespace Tomahawk;
FlexibleView::FlexibleView( QWidget* parent )
: QWidget( parent )
- , m_header( new FlexibleHeader( this ) )
+ , m_header( new DeclarativeHeader( this ) )
, m_trackView( new TrackView() )
, m_detailedView( new TrackView() )
, m_gridView( new GridView() )
, m_model( 0 )
{
- qRegisterMetaType< FlexibleViewMode >( "FlexibleViewMode" );
+ qRegisterMetaType< TomahawkUtils::ViewMode >( "TomahawkUtils::ViewMode" );
// m_trackView->setPlaylistInterface( m_playlistInterface );
m_detailedView->setPlaylistInterface( m_trackView->proxyModel()->playlistInterface() );
@@ -69,9 +69,10 @@ FlexibleView::FlexibleView( QWidget* parent )
m_stack->addWidget( m_detailedView );
m_stack->addWidget( m_gridView );
- setCurrentMode( Flat );
+ setCurrentMode( TomahawkUtils::ViewModeFlat );
connect( m_header, SIGNAL( filterTextChanged( QString ) ), SLOT( setFilter( QString ) ) );
+ connect( m_header, SIGNAL(viewModeChanged(TomahawkUtils::ViewMode)), SLOT(setCurrentMode(TomahawkUtils::ViewMode)));
}
@@ -178,26 +179,26 @@ FlexibleView::setPlaylistModel( PlaylistModel* model )
void
-FlexibleView::setCurrentMode( FlexibleViewMode mode )
+FlexibleView::setCurrentMode( TomahawkUtils::ViewMode mode )
{
m_mode = mode;
switch ( mode )
{
- case Flat:
+ case TomahawkUtils::ViewModeFlat:
{
tDebug() << "m_trackView:" << m_trackView << m_stack->indexOf( m_trackView );
m_stack->setCurrentWidget( m_trackView );
break;
}
- case Detailed:
+ case TomahawkUtils::ViewModeDetailed:
{
m_stack->setCurrentWidget( m_detailedView );
break;
}
- case Grid:
+ case TomahawkUtils::ViewModeGrid:
{
m_stack->setCurrentWidget( m_gridView );
break;
@@ -229,10 +230,10 @@ FlexibleView::description() const
}
-QPixmap
-FlexibleView::pixmap() const
+QString
+FlexibleView::headerIconSource() const
{
- return m_pixmap;
+ return m_headerIconSource;
}
@@ -275,17 +276,17 @@ FlexibleView::setEmptyTip( const QString& tip )
void
-FlexibleView::setPixmap( const QPixmap& pixmap )
+FlexibleView::setHeaderIconSource( const QString& headerIconSource )
{
- m_pixmap = pixmap;
- m_header->setPixmap( pixmap );
+ m_headerIconSource = headerIconSource;
+ m_header->setIconSource( headerIconSource );
}
void
FlexibleView::onModelChanged()
{
- m_header->setPixmap( m_pixmap );
+ m_header->setIconSource( m_headerIconSource );
m_header->setCaption( m_model->title() );
m_header->setDescription( m_model->description() );
diff --git a/src/libtomahawk/playlist/FlexibleView.h b/src/libtomahawk/playlist/FlexibleView.h
index 2c16f9614..add01ca31 100644
--- a/src/libtomahawk/playlist/FlexibleView.h
+++ b/src/libtomahawk/playlist/FlexibleView.h
@@ -29,16 +29,19 @@ class GridView;
class TrackView;
class PlayableModel;
class PlaylistModel;
-class FlexibleHeader;
+
+namespace Tomahawk
+{
+class DeclarativeHeader;
+}
+
+using namespace Tomahawk;
class DLLEXPORT FlexibleView : public QWidget, public Tomahawk::ViewPage
{
Q_OBJECT
public:
- enum FlexibleViewMode
- { Flat = 0, Detailed = 1, Grid = 2 };
-
explicit FlexibleView( QWidget* parent = 0 );
~FlexibleView();
@@ -47,7 +50,7 @@ public:
virtual QString title() const;
virtual QString description() const;
- virtual QPixmap pixmap() const;
+ virtual QString headerIconSource() const;
virtual bool showInfoBar() const { return false; }
virtual bool jumpToCurrentTrack();
@@ -65,15 +68,15 @@ public:
void setPlayableModel( PlayableModel* model );
void setPlaylistModel( PlaylistModel* model );
- void setPixmap( const QPixmap& pixmap );
+ void setHeaderIconSource( const QString& headerIconSource );
void setEmptyTip( const QString& tip );
public slots:
- void setCurrentMode( FlexibleViewMode mode );
+ void setCurrentMode( TomahawkUtils::ViewMode mode );
virtual bool setFilter( const QString& pattern );
signals:
- void modeChanged( FlexibleViewMode mode );
+ void modeChanged( TomahawkUtils::ViewMode mode );
void destroyed( QWidget* widget );
private slots:
@@ -81,8 +84,8 @@ private slots:
void onWidgetDestroyed( QWidget* widget );
private:
- FlexibleHeader* m_header;
- QPixmap m_pixmap;
+ DeclarativeHeader* m_header;
+ QString m_headerIconSource;
TrackView* m_trackView;
TrackView* m_detailedView;
@@ -91,9 +94,7 @@ private:
PlayableModel* m_model;
QStackedWidget* m_stack;
- FlexibleViewMode m_mode;
+ TomahawkUtils::ViewMode m_mode;
};
-Q_DECLARE_METATYPE( FlexibleView::FlexibleViewMode );
-
#endif // FLEXIBLEVIEW_H
diff --git a/src/libtomahawk/playlist/PlaylistView.cpp b/src/libtomahawk/playlist/PlaylistView.cpp
index a22f8301b..296016b22 100644
--- a/src/libtomahawk/playlist/PlaylistView.cpp
+++ b/src/libtomahawk/playlist/PlaylistView.cpp
@@ -163,8 +163,8 @@ PlaylistView::onMenuTriggered( int action )
}
-QPixmap
-PlaylistView::pixmap() const
+QString
+PlaylistView::iconSource() const
{
- return TomahawkUtils::defaultPixmap( TomahawkUtils::Playlist );
+ return TomahawkUtils::defaultImagePath( TomahawkUtils::Playlist );
}
diff --git a/src/libtomahawk/playlist/PlaylistView.h b/src/libtomahawk/playlist/PlaylistView.h
index 8bfe68f44..584d9bd4a 100644
--- a/src/libtomahawk/playlist/PlaylistView.h
+++ b/src/libtomahawk/playlist/PlaylistView.h
@@ -40,7 +40,7 @@ public:
virtual QList updaters() const;
- virtual QPixmap pixmap() const;
+ virtual QString iconSource() const;
virtual bool isTemporaryPage() const;
signals:
diff --git a/src/libtomahawk/playlist/dynamic/widgets/DynamicQmlWidget.cpp b/src/libtomahawk/playlist/dynamic/widgets/DynamicQmlWidget.cpp
index d334873b2..19dbb0e02 100644
--- a/src/libtomahawk/playlist/dynamic/widgets/DynamicQmlWidget.cpp
+++ b/src/libtomahawk/playlist/dynamic/widgets/DynamicQmlWidget.cpp
@@ -90,10 +90,10 @@ DynamicQmlWidget::description() const
}
-QPixmap
-DynamicQmlWidget::pixmap() const
+QString
+DynamicQmlWidget::iconSource() const
{
- return QPixmap( RESPATH "images/station.png" );
+ return QLatin1String( RESPATH "images/station.png" );
}
diff --git a/src/libtomahawk/playlist/dynamic/widgets/DynamicQmlWidget.h b/src/libtomahawk/playlist/dynamic/widgets/DynamicQmlWidget.h
index 0d0cd0c32..be2dd731e 100644
--- a/src/libtomahawk/playlist/dynamic/widgets/DynamicQmlWidget.h
+++ b/src/libtomahawk/playlist/dynamic/widgets/DynamicQmlWidget.h
@@ -50,7 +50,7 @@ public:
virtual QString title() const;
virtual QString description() const;
- virtual QPixmap pixmap() const;
+ virtual QString iconSource() const;
virtual bool showInfoBar() const { return false; }
virtual bool showModes() const { return false; }
diff --git a/src/libtomahawk/thirdparty/Qocoa/qsearchfield.cpp b/src/libtomahawk/thirdparty/Qocoa/qsearchfield.cpp
index a1aa829e2..a09399240 100644
--- a/src/libtomahawk/thirdparty/Qocoa/qsearchfield.cpp
+++ b/src/libtomahawk/thirdparty/Qocoa/qsearchfield.cpp
@@ -56,12 +56,14 @@ QSearchField::QSearchField(QWidget *parent) : QWidget(parent)
lineEdit->setStyleSheet( "QLineEdit { border: 1px solid gray; border-radius: 6px; }" );
lineEdit->setMinimumHeight(27);
- setFixedHeight(27);
+ QFontMetrics fm(lineEdit->font());
+ setFixedHeight(fm.height() + fm.xHeight() * 2);
#ifdef Q_WS_MAC
lineEdit->setContentsMargins(0, 0, 0, 0);
#else
- lineEdit->setContentsMargins(2, 2, 2, 2);
+ const int margins = fm.xHeight() / 2;
+ lineEdit->setContentsMargins(margins, margins, margins, margins);
#endif
}
diff --git a/src/libtomahawk/utils/TomahawkUtils.h b/src/libtomahawk/utils/TomahawkUtils.h
index b78f22ecb..a2afcccb2 100644
--- a/src/libtomahawk/utils/TomahawkUtils.h
+++ b/src/libtomahawk/utils/TomahawkUtils.h
@@ -133,6 +133,12 @@ namespace TomahawkUtils
RoundedCorners
};
+ enum ViewMode
+ {
+ ViewModeFlat = 0,
+ ViewModeDetailed = 1,
+ ViewModeGrid = 2
+ };
class DLLEXPORT NetworkProxyFactory : public QNetworkProxyFactory
{
@@ -214,5 +220,6 @@ namespace TomahawkUtils
DLLEXPORT void crash();
}
+Q_DECLARE_METATYPE( TomahawkUtils::ViewMode );
#endif // TOMAHAWKUTILS_H
diff --git a/src/libtomahawk/utils/TomahawkUtilsGui.cpp b/src/libtomahawk/utils/TomahawkUtilsGui.cpp
index 9137949d9..4a630bc01 100644
--- a/src/libtomahawk/utils/TomahawkUtilsGui.cpp
+++ b/src/libtomahawk/utils/TomahawkUtilsGui.cpp
@@ -413,297 +413,304 @@ alphaBlend( const QColor& colorFrom, const QColor& colorTo, float opacity )
}
-QPixmap
-defaultPixmap( ImageType type, ImageMode mode, const QSize& size )
+QString
+defaultImagePath( ImageType type, ImageMode mode )
{
- QPixmap pixmap;
-
switch ( type )
{
case DefaultAlbumCover:
if ( mode == CoverInCase )
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/no-album-art-placeholder.svg", size );
+ return QLatin1String( RESPATH "images/no-album-art-placeholder.svg" );
else if ( mode == Grid )
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/album-placeholder-grid.svg", size );
+ return QLatin1String( RESPATH "images/album-placeholder-grid.svg" );
else
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/album-icon.svg", size );
+ return QLatin1String( RESPATH "images/album-icon.svg" );
break;
case DefaultArtistImage:
if ( mode == Grid )
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/artist-placeholder-grid.svg", size );
+ return QLatin1String( RESPATH "images/artist-placeholder-grid.svg" );
else
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/artist-icon.svg", size );
+ return QLatin1String( RESPATH "images/artist-icon.svg" );
break;
case DefaultTrackImage:
if ( mode == Grid )
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/track-placeholder-grid.svg", size );
+ return QLatin1String( RESPATH "images/track-placeholder-grid.svg" );
else
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/track-icon.svg", size );
+ return QLatin1String( RESPATH "images/track-icon.svg" );
break;
case DefaultSourceAvatar:
- if ( mode == RoundedCorners )
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/user-avatar.svg", size, TomahawkUtils::RoundedCorners );
- else
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/user-avatar.svg", size );
+ return QLatin1String( RESPATH "images/user-avatar.svg" );
break;
case DefaultResolver:
- if ( mode == RoundedCorners )
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/resolver-default.svg", size, TomahawkUtils::RoundedCorners );
- else
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/resolver-default.svg", size );
+ return QLatin1String( RESPATH "images/resolver-default.svg" );
break;
case DefaultCollection:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/collection.svg", size );
+ return QLatin1String( RESPATH "images/collection.svg" );
break;
case NowPlayingSpeaker:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/now-playing-speaker.svg", size );
+ return QLatin1String( RESPATH "images/now-playing-speaker.svg" );
break;
case NowPlayingSpeakerDark:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/now-playing-speaker-dark.svg", size );
+ return QLatin1String( RESPATH "images/now-playing-speaker-dark.svg" );
break;
case InfoIcon:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/info.svg", size );
+ return QLatin1String( RESPATH "images/info.svg" );
break;
case PlayButton:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/play-rest.svg", size );
+ return QLatin1String( RESPATH "images/play-rest.svg" );
break;
case PlayButtonPressed:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/play-pressed.svg", size );
+ return QLatin1String( RESPATH "images/play-pressed.svg" );
break;
case PauseButton:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/pause-rest.svg", size );
+ return QLatin1String( RESPATH "images/pause-rest.svg" );
break;
case PauseButtonPressed:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/pause-pressed.svg", size );
+ return QLatin1String( RESPATH "images/pause-pressed.svg" );
break;
case PrevButton:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/back-rest.svg", size );
+ return QLatin1String( RESPATH "images/back-rest.svg" );
break;
case PrevButtonPressed:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/back-pressed.svg", size );
+ return QLatin1String( RESPATH "images/back-pressed.svg" );
break;
case NextButton:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/skip-rest.svg", size );
+ return QLatin1String( RESPATH "images/skip-rest.svg" );
break;
case NextButtonPressed:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/skip-pressed.svg", size );
+ return QLatin1String( RESPATH "images/skip-pressed.svg" );
break;
case ShuffleOff:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/shuffle-off-rest.svg", size );
+ return QLatin1String( RESPATH "images/shuffle-off-rest.svg" );
break;
case ShuffleOffPressed:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/shuffle-off-pressed.svg", size );
+ return QLatin1String( RESPATH "images/shuffle-off-pressed.svg" );
break;
case ShuffleOn:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/shuffle-on-rest.svg", size );
+ return QLatin1String( RESPATH "images/shuffle-on-rest.svg" );
break;
case ShuffleOnPressed:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/shuffle-on-pressed.svg", size );
+ return QLatin1String( RESPATH "images/shuffle-on-pressed.svg" );
break;
case RepeatOne:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-1-on-rest.svg", size );
+ return QLatin1String( RESPATH "images/repeat-1-on-rest.svg" );
break;
case RepeatOnePressed:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-1-on-pressed.svg", size );
+ return QLatin1String( RESPATH "images/repeat-1-on-pressed.svg" );
break;
case RepeatAll:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-all-on-rest.svg", size );
+ return QLatin1String( RESPATH "images/repeat-all-on-rest.svg" );
break;
case RepeatAllPressed:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-all-on-pressed.svg", size );
+ return QLatin1String( RESPATH "images/repeat-all-on-pressed.svg" );
break;
case RepeatOff:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-off-rest.svg", size );
+ return QLatin1String( RESPATH "images/repeat-off-rest.svg" );
break;
case RepeatOffPressed:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-off-pressed.svg", size );
+ return QLatin1String( RESPATH "images/repeat-off-pressed.svg" );
break;
case VolumeMuted:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/volume-icon-muted.svg", size );
+ return QLatin1String( RESPATH "images/volume-icon-muted.svg" );
break;
case VolumeFull:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/volume-icon-full.svg", size );
+ return QLatin1String( RESPATH "images/volume-icon-full.svg" );
break;
case Share:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/share.svg", size );
+ return QLatin1String( RESPATH "images/share.svg" );
break;
case NotLoved:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/not-loved.svg", size );
+ return QLatin1String( RESPATH "images/not-loved.svg" );
break;
case Loved:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/loved.svg", size );
+ return QLatin1String( RESPATH "images/loved.svg" );
break;
case Configure:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/configure.svg", size );
+ return QLatin1String( RESPATH "images/configure.svg" );
break;
case GreenDot:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/green-dot.svg", size );
+ return QLatin1String( RESPATH "images/green-dot.svg" );
break;
case AddContact:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/add-contact.svg", size );
+ return QLatin1String( RESPATH "images/add-contact.svg" );
break;
case SubscribeOn:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/subscribe-on.svg", size );
+ return QLatin1String( RESPATH "images/subscribe-on.svg" );
break;
case SubscribeOff:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/subscribe-off.svg", size );
+ return QLatin1String( RESPATH "images/subscribe-off.svg" );
break;
case JumpLink:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/jump-link.svg", size );
+ return QLatin1String( RESPATH "images/jump-link.svg" );
break;
case ProcessStop:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/process-stop.svg", size );
+ return QLatin1String( RESPATH "images/process-stop.svg" );
break;
case HeadphonesOn:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/headphones.svg", size );
+ return QLatin1String( RESPATH "images/headphones.svg" );
break;
case HeadphonesOff:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/headphones-off.svg", size );
+ return QLatin1String( RESPATH "images/headphones-off.svg" );
break;
case PadlockClosed:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/closed-padlock.svg", size );
+ return QLatin1String( RESPATH "images/closed-padlock.svg" );
break;
case PadlockOpen:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/open-padlock.svg", size );
+ return QLatin1String( RESPATH "images/open-padlock.svg" );
break;
case Downloading:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/downloading.svg", size );
+ return QLatin1String( RESPATH "images/downloading.svg" );
break;
case Uploading:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/uploading.svg", size );
+ return QLatin1String( RESPATH "images/uploading.svg" );
break;
case ViewRefresh:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/view-refresh.svg", size );
+ return QLatin1String( RESPATH "images/view-refresh.svg" );
break;
case SuperCollection:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/supercollection.svg", size );
+ return QLatin1String( RESPATH "images/supercollection.svg" );
break;
case LovedPlaylist:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/loved_playlist.svg", size );
+ return QLatin1String( RESPATH "images/loved_playlist.svg" );
break;
case NewReleases:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/new-releases.svg", size );
+ return QLatin1String( RESPATH "images/new-releases.svg" );
break;
case NewAdditions:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/new-additions.svg", size );
+ return QLatin1String( RESPATH "images/new-additions.svg" );
break;
case RecentlyPlayed:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/recently-played.svg", size );
+ return QLatin1String( RESPATH "images/recently-played.svg" );
break;
case Charts:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/charts.svg", size );
+ return QLatin1String( RESPATH "images/charts.svg" );
break;
case AutomaticPlaylist:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/automatic-playlist.svg", size );
+ return QLatin1String( RESPATH "images/automatic-playlist.svg" );
break;
case Station:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/station.svg", size );
+ return QLatin1String( RESPATH "images/station.svg" );
break;
case Playlist:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/playlist-icon.svg", size );
+ return QLatin1String( RESPATH "images/playlist-icon.svg" );
break;
case Search:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/search-icon.svg", size );
+ return QLatin1String( RESPATH "images/search-icon.svg" );
break;
case Add:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/add.svg", size );
+ return QLatin1String( RESPATH "images/add.svg" );
break;
case ListAdd:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/list-add.svg", size );
+ return QLatin1String( RESPATH "images/list-add.svg" );
break;
case ListRemove:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/list-remove.svg", size );
+ return QLatin1String( RESPATH "images/list-remove.svg" );
break;
case AdvancedSettings:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/advanced-settings.svg", size );
+ return QLatin1String( RESPATH "images/advanced-settings.svg" );
break;
case AccountSettings:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/account-settings.svg", size );
+ return QLatin1String( RESPATH "images/account-settings.svg" );
break;
case MusicSettings:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/music-settings.svg", size );
+ return QLatin1String( RESPATH "images/music-settings.svg" );
break;
case DropSong:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-song.svg", size );
+ return QLatin1String( RESPATH "images/drop-song.svg" );
break;
case DropAlbum:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-album.svg", size );
+ return QLatin1String( RESPATH "images/drop-album.svg" );
break;
case DropAllSongs:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-all-songs.svg", size );
+ return QLatin1String( RESPATH "images/drop-all-songs.svg" );
break;
case DropLocalSongs:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-local-songs.svg", size );
+ return QLatin1String( RESPATH "images/drop-local-songs.svg" );
break;
case DropTopSongs:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-top-songs.svg", size );
+ return QLatin1String( RESPATH "images/drop-top-songs.svg" );
break;
case Starred:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/starred.svg", size );
+ return QLatin1String( RESPATH "images/starred.svg" );
break;
case Unstarred:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/star-unstarred.svg", size );
+ return QLatin1String( RESPATH "images/star-unstarred.svg" );
break;
case StarHovered:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/star-hover.svg", size );
+ return QLatin1String( RESPATH "images/star-hover.svg" );
break;
case SipPluginOnline:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/sipplugin-online.svg", size );
+ return QLatin1String( RESPATH "images/sipplugin-online.svg" );
break;
case SipPluginOffline:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/sipplugin-offline.svg", size );
+ return QLatin1String( RESPATH "images/sipplugin-offline.svg" );
break;
case AccountNone:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/account-none.svg", size );
+ return QLatin1String( RESPATH "images/account-none.svg" );
break;
case LastfmIcon:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/lastfm-icon.svg", size );
+ return QLatin1String( RESPATH "images/lastfm-icon.svg" );
break;
case SpotifyIcon:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/spotify-sourceicon.svg", size );
+ return QLatin1String( RESPATH "images/spotify-sourceicon.svg" );
break;
case SoundcloudIcon:
- pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/soundcloud.svg", size );
+ return QLatin1String( RESPATH "images/soundcloud.svg" );
break;
default:
break;
}
+ Q_ASSERT(false);
+ return QString();
+}
+
+
+QPixmap
+defaultPixmap( ImageType type, ImageMode mode, const QSize& size )
+{
+ QPixmap pixmap;
+ if ( mode == RoundedCorners ) {
+ pixmap = ImageRegistry::instance()->pixmap( defaultImagePath( type, mode ), size, TomahawkUtils::RoundedCorners );
+ } else {
+ pixmap = ImageRegistry::instance()->pixmap( defaultImagePath( type, mode ), size );
+ }
+
if ( pixmap.isNull() )
{
Q_ASSERT( false );
@@ -711,6 +718,7 @@ defaultPixmap( ImageType type, ImageMode mode, const QSize& size )
}
return pixmap;
+
}
diff --git a/src/libtomahawk/utils/TomahawkUtilsGui.h b/src/libtomahawk/utils/TomahawkUtilsGui.h
index 206a016cd..64ce6c1f3 100644
--- a/src/libtomahawk/utils/TomahawkUtilsGui.h
+++ b/src/libtomahawk/utils/TomahawkUtilsGui.h
@@ -69,6 +69,7 @@ namespace TomahawkUtils
DLLEXPORT void styleScrollBar( QScrollBar* scrollBar );
DLLEXPORT QPixmap defaultPixmap( ImageType type, ImageMode mode = TomahawkUtils::Original, const QSize& size = QSize( 0, 0 ) );
+ DLLEXPORT QString defaultImagePath( ImageType type, ImageMode mode = TomahawkUtils::Original );
DLLEXPORT QPixmap createTiledPixmap( int width, int height, const QImage& src );
DLLEXPORT QPixmap addDropShadow( const QPixmap& sourceImage, const QSize& targetSize );
DLLEXPORT QPixmap squareCenterPixmap( const QPixmap& sourceImage );
diff --git a/src/libtomahawk/widgets/DeclarativeHeader.cpp b/src/libtomahawk/widgets/DeclarativeHeader.cpp
new file mode 100644
index 000000000..cbf30c1c0
--- /dev/null
+++ b/src/libtomahawk/widgets/DeclarativeHeader.cpp
@@ -0,0 +1,64 @@
+#include "DeclarativeHeader.h"
+#include "utils/TomahawkUtilsGui.h"
+
+#include
+
+namespace Tomahawk
+{
+
+DeclarativeHeader::DeclarativeHeader(QWidget *parent)
+ : DeclarativeView(parent)
+{
+
+ QStringList buttonList;
+ buttonList << "view-toggle-icon-artist" << "view-toggle-icon-list" << "view-toggle-icon-grid";
+ rootContext()->setContextProperty("toggleViewButtonModel", buttonList );
+
+ setSource( QUrl( "qrc" RESPATH "qml/tomahawkimports/FlexibleHeader.qml" ) );
+
+ connect(&m_filterTimer, SIGNAL(timeout()), SLOT(applyFilter()));
+}
+
+void DeclarativeHeader::setIconSource(const QString &iconSource)
+{
+ rootContext()->setContextProperty("iconSource", iconSource);
+}
+
+void DeclarativeHeader::setCaption(const QString &caption)
+{
+ rootContext()->setContextProperty("caption", caption);
+}
+
+void DeclarativeHeader::setDescription(const QString &description)
+{
+ rootContext()->setContextProperty("description", description);
+}
+
+QSize DeclarativeHeader::sizeHint() const
+{
+ return QSize(0, TomahawkUtils::defaultFontHeight() * 4);
+}
+
+void DeclarativeHeader::viewModeSelected(int viewMode)
+{
+ emit viewModeChanged((TomahawkUtils::ViewMode)viewMode);
+}
+
+void DeclarativeHeader::setFilterText(const QString &filterText)
+{
+ m_filter = filterText;
+
+ m_filterTimer.stop();
+ m_filterTimer.setInterval( 280 );
+ m_filterTimer.setSingleShot( true );
+ m_filterTimer.start();
+}
+
+void
+DeclarativeHeader::applyFilter()
+{
+ emit filterTextChanged( m_filter );
+}
+
+
+}
diff --git a/src/libtomahawk/widgets/DeclarativeHeader.h b/src/libtomahawk/widgets/DeclarativeHeader.h
new file mode 100644
index 000000000..db339dd86
--- /dev/null
+++ b/src/libtomahawk/widgets/DeclarativeHeader.h
@@ -0,0 +1,42 @@
+#ifndef DECLARATIVEHEADER_H
+#define DECLARATIVEHEADER_H
+
+#include "DeclarativeView.h"
+#include "utils/TomahawkUtils.h"
+
+#include
+
+namespace Tomahawk
+{
+
+class DeclarativeHeader: public DeclarativeView
+{
+ Q_OBJECT
+public:
+ DeclarativeHeader(QWidget *parent = 0);
+
+ void setIconSource(const QString &iconSource);
+ void setCaption(const QString &caption);
+ void setDescription(const QString &description);
+
+ QSize sizeHint() const;
+
+signals:
+ void viewModeChanged(TomahawkUtils::ViewMode viewMode);
+ void filterTextChanged(const QString &filterText);
+
+public slots:
+ void viewModeSelected(int viewMode);
+ void setFilterText(const QString &filterText);
+
+private slots:
+ void applyFilter();
+
+private:
+ QTimer m_filterTimer;
+ QString m_filter;
+};
+
+}
+
+#endif
diff --git a/src/libtomahawk/widgets/SearchFieldQmlProxy.cpp b/src/libtomahawk/widgets/SearchFieldQmlProxy.cpp
index f65998882..13e97f445 100644
--- a/src/libtomahawk/widgets/SearchFieldQmlProxy.cpp
+++ b/src/libtomahawk/widgets/SearchFieldQmlProxy.cpp
@@ -9,4 +9,8 @@ SearchFieldQmlProxy::SearchFieldQmlProxy(QGraphicsItem *parent) :
m_searchField->setAttribute(Qt::WA_NoSystemBackground);
setWidget(m_searchField);
+ connect(m_searchField, SIGNAL(textChanged(QString)), SIGNAL(textChanged(QString)));
+ connect(m_searchField, SIGNAL(editingFinished()), SIGNAL(editingFinished()));
+ connect(m_searchField, SIGNAL(returnPressed()), SIGNAL(returnPressed()));
+
}
diff --git a/src/libtomahawk/widgets/SearchFieldQmlProxy.h b/src/libtomahawk/widgets/SearchFieldQmlProxy.h
index 359b562b4..2cbe672f7 100644
--- a/src/libtomahawk/widgets/SearchFieldQmlProxy.h
+++ b/src/libtomahawk/widgets/SearchFieldQmlProxy.h
@@ -11,6 +11,11 @@ class SearchFieldQmlProxy: public QGraphicsProxyWidget
public:
SearchFieldQmlProxy(QGraphicsItem* parent = 0);
+signals:
+ void textChanged(const QString &text);
+ void editingFinished();
+ void returnPressed();
+
private:
QSearchField *m_searchField;
};
diff --git a/src/libtomahawk/widgets/SocialPlaylistWidget.h b/src/libtomahawk/widgets/SocialPlaylistWidget.h
index b60231541..30f367170 100644
--- a/src/libtomahawk/widgets/SocialPlaylistWidget.h
+++ b/src/libtomahawk/widgets/SocialPlaylistWidget.h
@@ -61,7 +61,7 @@ public:
virtual QString title() const { return m_title; }
virtual QString description() const { return m_description; }
virtual QString longDescription() const { return m_longDescription; }
- virtual QPixmap pixmap() const { if ( m_pixmap.isNull() ) return Tomahawk::ViewPage::pixmap(); else return m_pixmap; }
+ virtual QString iconSource() const { if ( m_iconSource.isEmpty() ) return Tomahawk::ViewPage::iconSource(); else return m_iconSource; }
virtual bool jumpToCurrentTrack() { return false; }
signals:
@@ -83,7 +83,7 @@ private:
QString m_title;
QString m_description;
QString m_longDescription;
- QPixmap m_pixmap;
+ QString m_iconSource;
static QString s_popularAlbumsQuery;
static QString s_mostPlayedPlaylistsQuery;
diff --git a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.cpp
index aaa889a2a..1719160b1 100644
--- a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.cpp
+++ b/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.cpp
@@ -76,7 +76,7 @@ AlbumInfoWidget::AlbumInfoWidget( const Tomahawk::album_ptr& album, QWidget* par
ui->tracks->setFrameShape( QFrame::StyledPanel );
ui->tracks->setAttribute( Qt::WA_MacShowFocusRect, 0 );
- m_pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, TomahawkUtils::ScaledCover, QSize( 48, 48 ) );
+ m_iconSource = TomahawkUtils::defaultImagePath( TomahawkUtils::DefaultArtistImage, TomahawkUtils::ScaledCover );
ui->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultAlbumCover, TomahawkUtils::ScaledCover, QSize( ui->cover->sizeHint() ) ) );
ui->biography->setFrameShape( QFrame::NoFrame );
@@ -233,8 +233,8 @@ AlbumInfoWidget::onAlbumImageUpdated()
if ( m_album->cover( QSize( 0, 0 ) ).isNull() )
return;
- m_pixmap = m_album->cover( QSize( 0, 0 ) );
- emit pixmapChanged( m_pixmap );
+ m_iconSource = QLatin1String( "image://albumart/" ) + m_album->coverId();
+ emit imageSourceChanged( m_iconSource );
ui->cover->setPixmap( TomahawkUtils::createRoundedImage( m_album->cover( ui->cover->sizeHint() ), QSize( 0, 0 ) ) );
}
diff --git a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.h b/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.h
index ac96ed578..34743debd 100644
--- a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.h
+++ b/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.h
@@ -64,7 +64,7 @@ public:
virtual QString title() const { return m_title; }
virtual QString description() const { return m_description; }
virtual QString longDescription() const { return m_longDescription; }
- virtual QPixmap pixmap() const { if ( m_pixmap.isNull() ) return Tomahawk::ViewPage::pixmap(); else return m_pixmap; }
+ virtual QString iconSource() const { if ( m_iconSource.isNull() ) return Tomahawk::ViewPage::iconSource(); else return m_iconSource; }
virtual bool isTemporaryPage() const { return true; }
virtual bool showInfoBar() const { return false; }
@@ -86,7 +86,7 @@ public slots:
signals:
void longDescriptionChanged( const QString& description );
void descriptionChanged( const Tomahawk::artist_ptr& artist );
- void pixmapChanged( const QPixmap& pixmap );
+ void imageSourceChanged( const QString& imageSource );
protected:
void changeEvent( QEvent* e );
@@ -111,7 +111,7 @@ private:
QString m_title;
QString m_description;
QString m_longDescription;
- QPixmap m_pixmap;
+ QString m_iconSource;
friend class MetaAlbumInfoInterface;
};
diff --git a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp
index b420992a9..0657fe4fa 100644
--- a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp
+++ b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp
@@ -96,7 +96,7 @@ ArtistInfoWidget::ArtistInfoWidget( const Tomahawk::artist_ptr& artist, QWidget*
ui->topHits->setFrameShape( QFrame::StyledPanel );
ui->topHits->setAttribute( Qt::WA_MacShowFocusRect, 0 );
- m_pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, TomahawkUtils::ScaledCover, QSize( 48, 48 ) );
+ m_iconSource = TomahawkUtils::defaultImagePath( TomahawkUtils::DefaultArtistImage, TomahawkUtils::ScaledCover );
ui->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, TomahawkUtils::ScaledCover, QSize( ui->cover->sizeHint() ) ) );
QFont f = font();
@@ -317,8 +317,8 @@ ArtistInfoWidget::onArtistImageUpdated()
if ( m_artist->cover( QSize( 0, 0 ) ).isNull() )
return;
- m_pixmap = m_artist->cover( QSize( 0, 0 ) );
- emit pixmapChanged( m_pixmap );
+ m_iconSource = QLatin1String( "image://albumart/" ) + m_artist->coverId();
+ emit pixmapChanged( m_iconSource );
ui->cover->setPixmap( TomahawkUtils::createRoundedImage( m_artist->cover( ui->cover->sizeHint() ), QSize( 0, 0 ) ) );
}
diff --git a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h
index 6bab39a51..a0cb8d9d9 100644
--- a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h
+++ b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h
@@ -76,7 +76,7 @@ public:
virtual QString title() const { return m_title; }
virtual QString description() const { return m_description; }
virtual QString longDescription() const { return m_longDescription; }
- virtual QPixmap pixmap() const { if ( m_pixmap.isNull() ) return Tomahawk::ViewPage::pixmap(); else return m_pixmap; }
+ virtual QString iconSource() const { if ( m_iconSource.isNull() ) return Tomahawk::ViewPage::iconSource(); else return m_iconSource; }
virtual bool isTemporaryPage() const { return true; }
virtual bool showInfoBar() const { return false; }
@@ -115,7 +115,7 @@ private:
QString m_title;
QString m_description;
QString m_longDescription;
- QPixmap m_pixmap;
+ QString m_iconSource;
friend class ::MetaArtistInfoInterface;
};
diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp
index 8af7a0c7f..aa2c55c4c 100644
--- a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp
+++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp
@@ -96,7 +96,7 @@ TrackInfoWidget::TrackInfoWidget( const Tomahawk::query_ptr& query, QWidget* par
ui->similarTracksView->proxyModel()->sort( -1 );
ui->similarTracksView->setEmptyTip( tr( "Sorry, but we could not find similar tracks for this song!" ) );
- m_pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultAlbumCover, TomahawkUtils::ScaledCover, QSize( 48, 48 ) );
+ m_iconSource = TomahawkUtils::defaultImagePath( TomahawkUtils::DefaultAlbumCover, TomahawkUtils::ScaledCover);
ui->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultTrackImage, TomahawkUtils::ScaledCover, QSize( ui->cover->sizeHint() ) ) );
m_scrollArea = new QScrollArea();
@@ -218,8 +218,8 @@ TrackInfoWidget::onCoverUpdated()
if ( m_query->cover( QSize( 0, 0 ) ).isNull() )
return;
- m_pixmap = m_query->cover( ui->cover->size() );
- ui->cover->setPixmap( TomahawkUtils::createRoundedImage( m_pixmap, QSize( 0, 0 ) ) );
+ m_iconSource = m_query->coverId();
+ ui->cover->setPixmap( TomahawkUtils::createRoundedImage( m_query->cover( ui->cover->size() ), QSize( 0, 0 ) ) );
}
diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h
index dfc8b26a1..2de457d43 100644
--- a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h
+++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h
@@ -63,7 +63,7 @@ public:
virtual QString title() const { return m_title; }
virtual QString description() const { return QString(); }
virtual QString longDescription() const { return QString(); }
- virtual QPixmap pixmap() const { if ( m_pixmap.isNull() ) return Tomahawk::ViewPage::pixmap(); else return m_pixmap; }
+ virtual QString iconSource() const { if ( m_iconSource.isEmpty() ) return Tomahawk::ViewPage::iconSource(); else return m_iconSource; }
virtual bool isBeingPlayed() const;
virtual bool isTemporaryPage() const { return true; }
@@ -96,7 +96,7 @@ private:
PlayableModel* m_relatedTracksModel;
QString m_title;
- QPixmap m_pixmap;
+ QString m_iconSource;
};
#endif // TRACKINFOWIDGET_H
diff --git a/src/sourcetree/items/LovedTracksItem.cpp b/src/sourcetree/items/LovedTracksItem.cpp
index 6d40ffbad..7f932e666 100644
--- a/src/sourcetree/items/LovedTracksItem.cpp
+++ b/src/sourcetree/items/LovedTracksItem.cpp
@@ -73,7 +73,7 @@ LovedTracksItem::activate()
{
SourceItem* par = dynamic_cast< SourceItem* >( parent() );
FlexibleView* pv = new FlexibleView( ViewManager::instance()->widget() );
- pv->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::LovedPlaylist, TomahawkUtils::Original, QSize( 128, 128 ) ) );
+ pv->setHeaderIconSource( TomahawkUtils::defaultImagePath( TomahawkUtils::LovedPlaylist, TomahawkUtils::Original ) );
LovedTracksModel* raModel = new LovedTracksModel( pv );
raModel->setTitle( text() );
diff --git a/src/sourcetree/items/SourceItem.cpp b/src/sourcetree/items/SourceItem.cpp
index 50f4234d0..e6a18c4eb 100644
--- a/src/sourcetree/items/SourceItem.cpp
+++ b/src/sourcetree/items/SourceItem.cpp
@@ -516,7 +516,7 @@ SourceItem::latestAdditionsClicked()
if ( !m_latestAdditionsPage )
{
FlexibleView* pv = new FlexibleView( ViewManager::instance()->widget() );
- pv->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::NewAdditions, TomahawkUtils::Original ) );
+ pv->setHeaderIconSource( TomahawkUtils::defaultImagePath( TomahawkUtils::NewAdditions, TomahawkUtils::Original ) );
RecentlyAddedModel* raModel = new RecentlyAddedModel( pv );
raModel->setTitle( tr( "Latest Additions" ) );
@@ -559,7 +559,7 @@ SourceItem::recentPlaysClicked()
if ( !m_recentPlaysPage )
{
FlexibleView* pv = new FlexibleView( ViewManager::instance()->widget() );
- pv->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RecentlyPlayed ) );
+ pv->setHeaderIconSource( TomahawkUtils::defaultImagePath( TomahawkUtils::RecentlyPlayed ) );
RecentlyPlayedModel* raModel = new RecentlyPlayedModel( pv );
raModel->setTitle( tr( "Recently Played Tracks" ) );