mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-09-01 09:53:57 +02:00
Say hello to DeclarativeHeader
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<svg width="38px" height="38px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
<svg width="38px" height="38px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||||
<title>view-toggle-pressed-left</title>
|
<title>view-toggle-pressed-right</title>
|
||||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||||
<defs>
|
<defs>
|
||||||
<radialGradient cx="50%" cy="50%" fx="50%" fy="50%" r="57.2162807%" id="radialGradient-1">
|
<radialGradient cx="50%" cy="50%" fx="50%" fy="50%" r="57.2162807%" id="radialGradient-1">
|
||||||
@@ -9,6 +9,6 @@
|
|||||||
</radialGradient>
|
</radialGradient>
|
||||||
</defs>
|
</defs>
|
||||||
<g id="Page 1" fill="rgb(215,215,215)" fill-rule="evenodd">
|
<g id="Page 1" fill="rgb(215,215,215)" fill-rule="evenodd">
|
||||||
<path d="M0,0 L0,38 L29.9992049,38 C34.417922,38 38,34.4250523 38,29.9992049 L38,8.00079513 C38,3.582078 34.4250523,0 29.9992049,0 L0,0 Z M0,0" id="Rectangle 1" stroke="rgb(150,150,150)" stroke-width="1" fill="url(#radialGradient-1)"></path>
|
<path d="M8.00079513,0 C3.582078,0 0,3.57494774 0,8.00079513 L0,29.9992049 C0,34.417922 3.57494774,38 8.00079513,38 L38,38 L38,0 L8.00079513,0 Z M8.00079513,0" id="Rectangle 1" stroke="rgb(150,150,150)" stroke-width="1" fill="url(#radialGradient-1)"></path>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
Before Width: | Height: | Size: 975 B After Width: | Height: | Size: 992 B |
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<svg width="38px" height="38px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
<svg width="38px" height="38px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||||
<title>view-toggle-pressed-right</title>
|
<title>view-toggle-pressed-left</title>
|
||||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||||
<defs>
|
<defs>
|
||||||
<radialGradient cx="50%" cy="50%" fx="50%" fy="50%" r="57.2162807%" id="radialGradient-1">
|
<radialGradient cx="50%" cy="50%" fx="50%" fy="50%" r="57.2162807%" id="radialGradient-1">
|
||||||
@@ -9,6 +9,6 @@
|
|||||||
</radialGradient>
|
</radialGradient>
|
||||||
</defs>
|
</defs>
|
||||||
<g id="Page 1" fill="rgb(215,215,215)" fill-rule="evenodd">
|
<g id="Page 1" fill="rgb(215,215,215)" fill-rule="evenodd">
|
||||||
<path d="M8.00079513,0 C3.582078,0 0,3.57494774 0,8.00079513 L0,29.9992049 C0,34.417922 3.57494774,38 8.00079513,38 L38,38 L38,0 L8.00079513,0 Z M8.00079513,0" id="Rectangle 1" stroke="rgb(150,150,150)" stroke-width="1" fill="url(#radialGradient-1)"></path>
|
<path d="M0,0 L0,38 L29.9992049,38 C34.417922,38 38,34.4250523 38,29.9992049 L38,8.00079513 C38,3.582078 34.4250523,0 29.9992049,0 L0,0 Z M0,0" id="Rectangle 1" stroke="rgb(150,150,150)" stroke-width="1" fill="url(#radialGradient-1)"></path>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
Before Width: | Height: | Size: 992 B After Width: | Height: | Size: 975 B |
122
data/qml/tomahawkimports/FlexibleHeader.qml
Normal file
122
data/qml/tomahawkimports/FlexibleHeader.qml
Normal file
@@ -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)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
34
data/qml/tomahawkimports/ToggleViewButtons.qml
Normal file
34
data/qml/tomahawkimports/ToggleViewButtons.qml
Normal file
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -35,21 +35,21 @@
|
|||||||
<file>data/images/skip-pressed.svg</file>
|
<file>data/images/skip-pressed.svg</file>
|
||||||
<file>data/images/skip-rest.svg</file>
|
<file>data/images/skip-rest.svg</file>
|
||||||
<file>data/images/user-avatar.svg</file>
|
<file>data/images/user-avatar.svg</file>
|
||||||
<file>data/images/view-toggle-active-centre.png</file>
|
<file>data/images/view-toggle-active-centre.svg</file>
|
||||||
<file>data/images/view-toggle-active-left.png</file>
|
<file>data/images/view-toggle-active-left.svg</file>
|
||||||
<file>data/images/view-toggle-active-right.png</file>
|
<file>data/images/view-toggle-active-right.svg</file>
|
||||||
<file>data/images/view-toggle-icon-artist-active.svg</file>
|
<file>data/images/view-toggle-icon-artist-active.svg</file>
|
||||||
<file>data/images/view-toggle-icon-artist-inactive.svg</file>
|
<file>data/images/view-toggle-icon-artist-inactive.svg</file>
|
||||||
<file>data/images/view-toggle-icon-grid-active.svg</file>
|
<file>data/images/view-toggle-icon-grid-active.svg</file>
|
||||||
<file>data/images/view-toggle-icon-grid-inactive.svg</file>
|
<file>data/images/view-toggle-icon-grid-inactive.svg</file>
|
||||||
<file>data/images/view-toggle-icon-list-active.svg</file>
|
<file>data/images/view-toggle-icon-list-active.svg</file>
|
||||||
<file>data/images/view-toggle-icon-list-inactive.svg</file>
|
<file>data/images/view-toggle-icon-list-inactive.svg</file>
|
||||||
<file>data/images/view-toggle-inactive-centre.png</file>
|
<file>data/images/view-toggle-inactive-centre.svg</file>
|
||||||
<file>data/images/view-toggle-inactive-left.png</file>
|
<file>data/images/view-toggle-inactive-left.svg</file>
|
||||||
<file>data/images/view-toggle-inactive-right.png</file>
|
<file>data/images/view-toggle-inactive-right.svg</file>
|
||||||
<file>data/images/view-toggle-pressed-centre.png</file>
|
<file>data/images/view-toggle-pressed-centre.svg</file>
|
||||||
<file>data/images/view-toggle-pressed-left.png</file>
|
<file>data/images/view-toggle-pressed-left.svg</file>
|
||||||
<file>data/images/view-toggle-pressed-right.png</file>
|
<file>data/images/view-toggle-pressed-right.svg</file>
|
||||||
<file>data/images/list-add.svg</file>
|
<file>data/images/list-add.svg</file>
|
||||||
<file>data/images/list-remove.svg</file>
|
<file>data/images/list-remove.svg</file>
|
||||||
<file>data/images/arrow-up-double.svg</file>
|
<file>data/images/arrow-up-double.svg</file>
|
||||||
@@ -166,5 +166,7 @@
|
|||||||
<file>data/images/cancel.svg</file>
|
<file>data/images/cancel.svg</file>
|
||||||
<file>data/images/delete.svg</file>
|
<file>data/images/delete.svg</file>
|
||||||
<file>data/images/ok.svg</file>
|
<file>data/images/ok.svg</file>
|
||||||
|
<file>data/qml/tomahawkimports/FlexibleHeader.qml</file>
|
||||||
|
<file>data/qml/tomahawkimports/ToggleViewButtons.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
@@ -55,7 +55,6 @@ set( libGuiSources
|
|||||||
|
|
||||||
infobar/InfoBar.cpp
|
infobar/InfoBar.cpp
|
||||||
|
|
||||||
playlist/FlexibleHeader.cpp
|
|
||||||
playlist/FlexibleView.cpp
|
playlist/FlexibleView.cpp
|
||||||
playlist/TreeModel.cpp
|
playlist/TreeModel.cpp
|
||||||
playlist/TreeProxyModel.cpp
|
playlist/TreeProxyModel.cpp
|
||||||
@@ -124,6 +123,7 @@ set( libGuiSources
|
|||||||
|
|
||||||
widgets/AnimatedCounterLabel.cpp
|
widgets/AnimatedCounterLabel.cpp
|
||||||
widgets/BasicHeader.cpp
|
widgets/BasicHeader.cpp
|
||||||
|
widgets/DeclarativeHeader.cpp
|
||||||
widgets/Breadcrumb.cpp
|
widgets/Breadcrumb.cpp
|
||||||
widgets/BreadcrumbButton.cpp
|
widgets/BreadcrumbButton.cpp
|
||||||
widgets/CheckDirTree.cpp
|
widgets/CheckDirTree.cpp
|
||||||
|
@@ -137,7 +137,7 @@ ViewManager::createPageForPlaylist( const playlist_ptr& playlist )
|
|||||||
|
|
||||||
PlaylistView* pv = new PlaylistView();
|
PlaylistView* pv = new PlaylistView();
|
||||||
view->setDetailedView( pv );
|
view->setDetailedView( pv );
|
||||||
view->setPixmap( pv->pixmap() );
|
view->setHeaderIconSource( pv->iconSource() );
|
||||||
view->setEmptyTip( tr( "This playlist is empty!" ) );
|
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
|
// 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 )
|
if ( !m_recentPlaysWidget )
|
||||||
{
|
{
|
||||||
FlexibleView* pv = new FlexibleView( m_widget );
|
FlexibleView* pv = new FlexibleView( m_widget );
|
||||||
pv->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RecentlyPlayed ) );
|
pv->setHeaderIconSource( TomahawkUtils::defaultImagePath( TomahawkUtils::RecentlyPlayed ) );
|
||||||
|
|
||||||
RecentlyPlayedModel* raModel = new RecentlyPlayedModel( pv );
|
RecentlyPlayedModel* raModel = new RecentlyPlayedModel( pv );
|
||||||
raModel->setTitle( tr( "Recently Played Tracks" ) );
|
raModel->setTitle( tr( "Recently Played Tracks" ) );
|
||||||
@@ -568,8 +568,8 @@ ViewManager::setPage( ViewPage* page, bool trackHistory )
|
|||||||
if( obj->metaObject()->indexOfSignal( "nameChanged(QString)" ) > -1 )
|
if( obj->metaObject()->indexOfSignal( "nameChanged(QString)" ) > -1 )
|
||||||
connect( obj, SIGNAL( nameChanged( QString ) ), m_infobar, SLOT( setCaption( QString ) ), Qt::UniqueConnection );
|
connect( obj, SIGNAL( nameChanged( QString ) ), m_infobar, SLOT( setCaption( QString ) ), Qt::UniqueConnection );
|
||||||
|
|
||||||
if( obj->metaObject()->indexOfSignal( "pixmapChanged(QPixmap)" ) > -1 )
|
if( obj->metaObject()->indexOfSignal( "iconSourceChanged(QString)" ) > -1 )
|
||||||
connect( obj, SIGNAL( pixmapChanged( QPixmap ) ), m_infobar, SLOT( setPixmap( QPixmap ) ), Qt::UniqueConnection );
|
connect( obj, SIGNAL( iconSourceChanged( QString ) ), m_infobar, SLOT( setPixmap( QPixmap ) ), Qt::UniqueConnection );
|
||||||
|
|
||||||
if( obj->metaObject()->indexOfSignal( "destroyed(QWidget*)" ) > -1 )
|
if( obj->metaObject()->indexOfSignal( "destroyed(QWidget*)" ) > -1 )
|
||||||
connect( obj, SIGNAL( destroyed( QWidget* ) ), SLOT( onWidgetDestroyed( QWidget* ) ), Qt::UniqueConnection );
|
connect( obj, SIGNAL( destroyed( QWidget* ) ), SLOT( onWidgetDestroyed( QWidget* ) ), Qt::UniqueConnection );
|
||||||
@@ -646,7 +646,7 @@ ViewManager::updateView()
|
|||||||
|
|
||||||
}
|
}
|
||||||
m_infobar->setLongDescription( currentPage()->longDescription() );
|
m_infobar->setLongDescription( currentPage()->longDescription() );
|
||||||
m_infobar->setPixmap( currentPage()->pixmap() );
|
m_infobar->setIconSource( currentPage()->iconSource() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -56,7 +56,7 @@ public:
|
|||||||
virtual Tomahawk::album_ptr descriptionAlbum() const { return Tomahawk::album_ptr(); }
|
virtual Tomahawk::album_ptr descriptionAlbum() const { return Tomahawk::album_ptr(); }
|
||||||
|
|
||||||
virtual QString longDescription() const { return QString(); }
|
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 showInfoBar() const { return true; }
|
||||||
virtual bool showFilter() const { return false; }
|
virtual bool showFilter() const { return false; }
|
||||||
|
@@ -184,9 +184,9 @@ InfoBar::setLongDescription( const QString& s )
|
|||||||
|
|
||||||
|
|
||||||
void
|
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 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -58,7 +58,7 @@ public slots:
|
|||||||
void setDescription( const Tomahawk::album_ptr& album_ptr );
|
void setDescription( const Tomahawk::album_ptr& album_ptr );
|
||||||
|
|
||||||
void setLongDescription( const QString& s );
|
void setLongDescription( const QString& s );
|
||||||
void setPixmap( const QPixmap& p );
|
void setIconSource( const QString& iconSource );
|
||||||
|
|
||||||
void setFilter( const QString& filter );
|
void setFilter( const QString& filter );
|
||||||
void setFilterAvailable( bool b );
|
void setFilterAvailable( bool b );
|
||||||
|
@@ -1,145 +0,0 @@
|
|||||||
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
|
||||||
*
|
|
||||||
* Copyright 2010-2011, Christian Muehlhaeuser <muesli@tomahawk-player.org>
|
|
||||||
* Copyright 2012, Teo Mrnjavac <teo@kde.org>
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "FlexibleHeader.h"
|
|
||||||
|
|
||||||
#include <QBoxLayout>
|
|
||||||
#include <QLabel>
|
|
||||||
#include <QPixmap>
|
|
||||||
#include <QCheckBox>
|
|
||||||
#include <QPaintEvent>
|
|
||||||
#include <QPainter>
|
|
||||||
#include <QRadioButton>
|
|
||||||
|
|
||||||
#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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@@ -1,68 +0,0 @@
|
|||||||
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
|
||||||
*
|
|
||||||
* Copyright 2010-2011, Christian Muehlhaeuser <muesli@tomahawk-player.org>
|
|
||||||
* Copyright 2012, Teo Mrnjavac <teo@kde.org>
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef FLEXIBLEHEADER_H
|
|
||||||
#define FLEXIBLEHEADER_H
|
|
||||||
|
|
||||||
#include <QTimer>
|
|
||||||
|
|
||||||
#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
|
|
@@ -22,7 +22,7 @@
|
|||||||
#include <QStackedWidget>
|
#include <QStackedWidget>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
#include "playlist/FlexibleHeader.h"
|
#include "widgets/DeclarativeHeader.h"
|
||||||
#include "playlist/PlayableModel.h"
|
#include "playlist/PlayableModel.h"
|
||||||
#include "playlist/PlaylistModel.h"
|
#include "playlist/PlaylistModel.h"
|
||||||
#include "playlist/TrackView.h"
|
#include "playlist/TrackView.h"
|
||||||
@@ -37,13 +37,13 @@ using namespace Tomahawk;
|
|||||||
|
|
||||||
FlexibleView::FlexibleView( QWidget* parent )
|
FlexibleView::FlexibleView( QWidget* parent )
|
||||||
: QWidget( parent )
|
: QWidget( parent )
|
||||||
, m_header( new FlexibleHeader( this ) )
|
, m_header( new DeclarativeHeader( this ) )
|
||||||
, m_trackView( new TrackView() )
|
, m_trackView( new TrackView() )
|
||||||
, m_detailedView( new TrackView() )
|
, m_detailedView( new TrackView() )
|
||||||
, m_gridView( new GridView() )
|
, m_gridView( new GridView() )
|
||||||
, m_model( 0 )
|
, m_model( 0 )
|
||||||
{
|
{
|
||||||
qRegisterMetaType< FlexibleViewMode >( "FlexibleViewMode" );
|
qRegisterMetaType< TomahawkUtils::ViewMode >( "TomahawkUtils::ViewMode" );
|
||||||
|
|
||||||
// m_trackView->setPlaylistInterface( m_playlistInterface );
|
// m_trackView->setPlaylistInterface( m_playlistInterface );
|
||||||
m_detailedView->setPlaylistInterface( m_trackView->proxyModel()->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_detailedView );
|
||||||
m_stack->addWidget( m_gridView );
|
m_stack->addWidget( m_gridView );
|
||||||
|
|
||||||
setCurrentMode( Flat );
|
setCurrentMode( TomahawkUtils::ViewModeFlat );
|
||||||
|
|
||||||
connect( m_header, SIGNAL( filterTextChanged( QString ) ), SLOT( setFilter( QString ) ) );
|
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
|
void
|
||||||
FlexibleView::setCurrentMode( FlexibleViewMode mode )
|
FlexibleView::setCurrentMode( TomahawkUtils::ViewMode mode )
|
||||||
{
|
{
|
||||||
m_mode = mode;
|
m_mode = mode;
|
||||||
|
|
||||||
switch ( mode )
|
switch ( mode )
|
||||||
{
|
{
|
||||||
case Flat:
|
case TomahawkUtils::ViewModeFlat:
|
||||||
{
|
{
|
||||||
tDebug() << "m_trackView:" << m_trackView << m_stack->indexOf( m_trackView );
|
tDebug() << "m_trackView:" << m_trackView << m_stack->indexOf( m_trackView );
|
||||||
m_stack->setCurrentWidget( m_trackView );
|
m_stack->setCurrentWidget( m_trackView );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case Detailed:
|
case TomahawkUtils::ViewModeDetailed:
|
||||||
{
|
{
|
||||||
m_stack->setCurrentWidget( m_detailedView );
|
m_stack->setCurrentWidget( m_detailedView );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case Grid:
|
case TomahawkUtils::ViewModeGrid:
|
||||||
{
|
{
|
||||||
m_stack->setCurrentWidget( m_gridView );
|
m_stack->setCurrentWidget( m_gridView );
|
||||||
break;
|
break;
|
||||||
@@ -229,10 +230,10 @@ FlexibleView::description() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QPixmap
|
QString
|
||||||
FlexibleView::pixmap() const
|
FlexibleView::headerIconSource() const
|
||||||
{
|
{
|
||||||
return m_pixmap;
|
return m_headerIconSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -275,17 +276,17 @@ FlexibleView::setEmptyTip( const QString& tip )
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FlexibleView::setPixmap( const QPixmap& pixmap )
|
FlexibleView::setHeaderIconSource( const QString& headerIconSource )
|
||||||
{
|
{
|
||||||
m_pixmap = pixmap;
|
m_headerIconSource = headerIconSource;
|
||||||
m_header->setPixmap( pixmap );
|
m_header->setIconSource( headerIconSource );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FlexibleView::onModelChanged()
|
FlexibleView::onModelChanged()
|
||||||
{
|
{
|
||||||
m_header->setPixmap( m_pixmap );
|
m_header->setIconSource( m_headerIconSource );
|
||||||
m_header->setCaption( m_model->title() );
|
m_header->setCaption( m_model->title() );
|
||||||
m_header->setDescription( m_model->description() );
|
m_header->setDescription( m_model->description() );
|
||||||
|
|
||||||
|
@@ -29,16 +29,19 @@ class GridView;
|
|||||||
class TrackView;
|
class TrackView;
|
||||||
class PlayableModel;
|
class PlayableModel;
|
||||||
class PlaylistModel;
|
class PlaylistModel;
|
||||||
class FlexibleHeader;
|
|
||||||
|
namespace Tomahawk
|
||||||
|
{
|
||||||
|
class DeclarativeHeader;
|
||||||
|
}
|
||||||
|
|
||||||
|
using namespace Tomahawk;
|
||||||
|
|
||||||
class DLLEXPORT FlexibleView : public QWidget, public Tomahawk::ViewPage
|
class DLLEXPORT FlexibleView : public QWidget, public Tomahawk::ViewPage
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum FlexibleViewMode
|
|
||||||
{ Flat = 0, Detailed = 1, Grid = 2 };
|
|
||||||
|
|
||||||
explicit FlexibleView( QWidget* parent = 0 );
|
explicit FlexibleView( QWidget* parent = 0 );
|
||||||
~FlexibleView();
|
~FlexibleView();
|
||||||
|
|
||||||
@@ -47,7 +50,7 @@ public:
|
|||||||
|
|
||||||
virtual QString title() const;
|
virtual QString title() const;
|
||||||
virtual QString description() const;
|
virtual QString description() const;
|
||||||
virtual QPixmap pixmap() const;
|
virtual QString headerIconSource() const;
|
||||||
|
|
||||||
virtual bool showInfoBar() const { return false; }
|
virtual bool showInfoBar() const { return false; }
|
||||||
virtual bool jumpToCurrentTrack();
|
virtual bool jumpToCurrentTrack();
|
||||||
@@ -65,15 +68,15 @@ public:
|
|||||||
void setPlayableModel( PlayableModel* model );
|
void setPlayableModel( PlayableModel* model );
|
||||||
void setPlaylistModel( PlaylistModel* model );
|
void setPlaylistModel( PlaylistModel* model );
|
||||||
|
|
||||||
void setPixmap( const QPixmap& pixmap );
|
void setHeaderIconSource( const QString& headerIconSource );
|
||||||
void setEmptyTip( const QString& tip );
|
void setEmptyTip( const QString& tip );
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setCurrentMode( FlexibleViewMode mode );
|
void setCurrentMode( TomahawkUtils::ViewMode mode );
|
||||||
virtual bool setFilter( const QString& pattern );
|
virtual bool setFilter( const QString& pattern );
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void modeChanged( FlexibleViewMode mode );
|
void modeChanged( TomahawkUtils::ViewMode mode );
|
||||||
void destroyed( QWidget* widget );
|
void destroyed( QWidget* widget );
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
@@ -81,8 +84,8 @@ private slots:
|
|||||||
void onWidgetDestroyed( QWidget* widget );
|
void onWidgetDestroyed( QWidget* widget );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FlexibleHeader* m_header;
|
DeclarativeHeader* m_header;
|
||||||
QPixmap m_pixmap;
|
QString m_headerIconSource;
|
||||||
|
|
||||||
TrackView* m_trackView;
|
TrackView* m_trackView;
|
||||||
TrackView* m_detailedView;
|
TrackView* m_detailedView;
|
||||||
@@ -91,9 +94,7 @@ private:
|
|||||||
PlayableModel* m_model;
|
PlayableModel* m_model;
|
||||||
QStackedWidget* m_stack;
|
QStackedWidget* m_stack;
|
||||||
|
|
||||||
FlexibleViewMode m_mode;
|
TomahawkUtils::ViewMode m_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_DECLARE_METATYPE( FlexibleView::FlexibleViewMode );
|
|
||||||
|
|
||||||
#endif // FLEXIBLEVIEW_H
|
#endif // FLEXIBLEVIEW_H
|
||||||
|
@@ -163,8 +163,8 @@ PlaylistView::onMenuTriggered( int action )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QPixmap
|
QString
|
||||||
PlaylistView::pixmap() const
|
PlaylistView::iconSource() const
|
||||||
{
|
{
|
||||||
return TomahawkUtils::defaultPixmap( TomahawkUtils::Playlist );
|
return TomahawkUtils::defaultImagePath( TomahawkUtils::Playlist );
|
||||||
}
|
}
|
||||||
|
@@ -40,7 +40,7 @@ public:
|
|||||||
|
|
||||||
virtual QList<Tomahawk::PlaylistUpdaterInterface*> updaters() const;
|
virtual QList<Tomahawk::PlaylistUpdaterInterface*> updaters() const;
|
||||||
|
|
||||||
virtual QPixmap pixmap() const;
|
virtual QString iconSource() const;
|
||||||
virtual bool isTemporaryPage() const;
|
virtual bool isTemporaryPage() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
@@ -90,10 +90,10 @@ DynamicQmlWidget::description() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QPixmap
|
QString
|
||||||
DynamicQmlWidget::pixmap() const
|
DynamicQmlWidget::iconSource() const
|
||||||
{
|
{
|
||||||
return QPixmap( RESPATH "images/station.png" );
|
return QLatin1String( RESPATH "images/station.png" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -50,7 +50,7 @@ public:
|
|||||||
|
|
||||||
virtual QString title() const;
|
virtual QString title() const;
|
||||||
virtual QString description() const;
|
virtual QString description() const;
|
||||||
virtual QPixmap pixmap() const;
|
virtual QString iconSource() const;
|
||||||
|
|
||||||
virtual bool showInfoBar() const { return false; }
|
virtual bool showInfoBar() const { return false; }
|
||||||
virtual bool showModes() const { return false; }
|
virtual bool showModes() const { return false; }
|
||||||
|
@@ -56,12 +56,14 @@ QSearchField::QSearchField(QWidget *parent) : QWidget(parent)
|
|||||||
|
|
||||||
lineEdit->setStyleSheet( "QLineEdit { border: 1px solid gray; border-radius: 6px; }" );
|
lineEdit->setStyleSheet( "QLineEdit { border: 1px solid gray; border-radius: 6px; }" );
|
||||||
lineEdit->setMinimumHeight(27);
|
lineEdit->setMinimumHeight(27);
|
||||||
setFixedHeight(27);
|
QFontMetrics fm(lineEdit->font());
|
||||||
|
setFixedHeight(fm.height() + fm.xHeight() * 2);
|
||||||
|
|
||||||
#ifdef Q_WS_MAC
|
#ifdef Q_WS_MAC
|
||||||
lineEdit->setContentsMargins(0, 0, 0, 0);
|
lineEdit->setContentsMargins(0, 0, 0, 0);
|
||||||
#else
|
#else
|
||||||
lineEdit->setContentsMargins(2, 2, 2, 2);
|
const int margins = fm.xHeight() / 2;
|
||||||
|
lineEdit->setContentsMargins(margins, margins, margins, margins);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -133,6 +133,12 @@ namespace TomahawkUtils
|
|||||||
RoundedCorners
|
RoundedCorners
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum ViewMode
|
||||||
|
{
|
||||||
|
ViewModeFlat = 0,
|
||||||
|
ViewModeDetailed = 1,
|
||||||
|
ViewModeGrid = 2
|
||||||
|
};
|
||||||
|
|
||||||
class DLLEXPORT NetworkProxyFactory : public QNetworkProxyFactory
|
class DLLEXPORT NetworkProxyFactory : public QNetworkProxyFactory
|
||||||
{
|
{
|
||||||
@@ -214,5 +220,6 @@ namespace TomahawkUtils
|
|||||||
|
|
||||||
DLLEXPORT void crash();
|
DLLEXPORT void crash();
|
||||||
}
|
}
|
||||||
|
Q_DECLARE_METATYPE( TomahawkUtils::ViewMode );
|
||||||
|
|
||||||
#endif // TOMAHAWKUTILS_H
|
#endif // TOMAHAWKUTILS_H
|
||||||
|
@@ -413,297 +413,304 @@ alphaBlend( const QColor& colorFrom, const QColor& colorTo, float opacity )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QPixmap
|
QString
|
||||||
defaultPixmap( ImageType type, ImageMode mode, const QSize& size )
|
defaultImagePath( ImageType type, ImageMode mode )
|
||||||
{
|
{
|
||||||
QPixmap pixmap;
|
|
||||||
|
|
||||||
switch ( type )
|
switch ( type )
|
||||||
{
|
{
|
||||||
case DefaultAlbumCover:
|
case DefaultAlbumCover:
|
||||||
if ( mode == CoverInCase )
|
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 )
|
else if ( mode == Grid )
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/album-placeholder-grid.svg", size );
|
return QLatin1String( RESPATH "images/album-placeholder-grid.svg" );
|
||||||
else
|
else
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/album-icon.svg", size );
|
return QLatin1String( RESPATH "images/album-icon.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DefaultArtistImage:
|
case DefaultArtistImage:
|
||||||
if ( mode == Grid )
|
if ( mode == Grid )
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/artist-placeholder-grid.svg", size );
|
return QLatin1String( RESPATH "images/artist-placeholder-grid.svg" );
|
||||||
else
|
else
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/artist-icon.svg", size );
|
return QLatin1String( RESPATH "images/artist-icon.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DefaultTrackImage:
|
case DefaultTrackImage:
|
||||||
if ( mode == Grid )
|
if ( mode == Grid )
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/track-placeholder-grid.svg", size );
|
return QLatin1String( RESPATH "images/track-placeholder-grid.svg" );
|
||||||
else
|
else
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/track-icon.svg", size );
|
return QLatin1String( RESPATH "images/track-icon.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DefaultSourceAvatar:
|
case DefaultSourceAvatar:
|
||||||
if ( mode == RoundedCorners )
|
return QLatin1String( RESPATH "images/user-avatar.svg" );
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/user-avatar.svg", size, TomahawkUtils::RoundedCorners );
|
|
||||||
else
|
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/user-avatar.svg", size );
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DefaultResolver:
|
case DefaultResolver:
|
||||||
if ( mode == RoundedCorners )
|
return QLatin1String( RESPATH "images/resolver-default.svg" );
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/resolver-default.svg", size, TomahawkUtils::RoundedCorners );
|
|
||||||
else
|
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/resolver-default.svg", size );
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DefaultCollection:
|
case DefaultCollection:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/collection.svg", size );
|
return QLatin1String( RESPATH "images/collection.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NowPlayingSpeaker:
|
case NowPlayingSpeaker:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/now-playing-speaker.svg", size );
|
return QLatin1String( RESPATH "images/now-playing-speaker.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NowPlayingSpeakerDark:
|
case NowPlayingSpeakerDark:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/now-playing-speaker-dark.svg", size );
|
return QLatin1String( RESPATH "images/now-playing-speaker-dark.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case InfoIcon:
|
case InfoIcon:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/info.svg", size );
|
return QLatin1String( RESPATH "images/info.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PlayButton:
|
case PlayButton:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/play-rest.svg", size );
|
return QLatin1String( RESPATH "images/play-rest.svg" );
|
||||||
break;
|
break;
|
||||||
case PlayButtonPressed:
|
case PlayButtonPressed:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/play-pressed.svg", size );
|
return QLatin1String( RESPATH "images/play-pressed.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PauseButton:
|
case PauseButton:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/pause-rest.svg", size );
|
return QLatin1String( RESPATH "images/pause-rest.svg" );
|
||||||
break;
|
break;
|
||||||
case PauseButtonPressed:
|
case PauseButtonPressed:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/pause-pressed.svg", size );
|
return QLatin1String( RESPATH "images/pause-pressed.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PrevButton:
|
case PrevButton:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/back-rest.svg", size );
|
return QLatin1String( RESPATH "images/back-rest.svg" );
|
||||||
break;
|
break;
|
||||||
case PrevButtonPressed:
|
case PrevButtonPressed:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/back-pressed.svg", size );
|
return QLatin1String( RESPATH "images/back-pressed.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NextButton:
|
case NextButton:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/skip-rest.svg", size );
|
return QLatin1String( RESPATH "images/skip-rest.svg" );
|
||||||
break;
|
break;
|
||||||
case NextButtonPressed:
|
case NextButtonPressed:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/skip-pressed.svg", size );
|
return QLatin1String( RESPATH "images/skip-pressed.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ShuffleOff:
|
case ShuffleOff:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/shuffle-off-rest.svg", size );
|
return QLatin1String( RESPATH "images/shuffle-off-rest.svg" );
|
||||||
break;
|
break;
|
||||||
case ShuffleOffPressed:
|
case ShuffleOffPressed:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/shuffle-off-pressed.svg", size );
|
return QLatin1String( RESPATH "images/shuffle-off-pressed.svg" );
|
||||||
break;
|
break;
|
||||||
case ShuffleOn:
|
case ShuffleOn:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/shuffle-on-rest.svg", size );
|
return QLatin1String( RESPATH "images/shuffle-on-rest.svg" );
|
||||||
break;
|
break;
|
||||||
case ShuffleOnPressed:
|
case ShuffleOnPressed:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/shuffle-on-pressed.svg", size );
|
return QLatin1String( RESPATH "images/shuffle-on-pressed.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RepeatOne:
|
case RepeatOne:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-1-on-rest.svg", size );
|
return QLatin1String( RESPATH "images/repeat-1-on-rest.svg" );
|
||||||
break;
|
break;
|
||||||
case RepeatOnePressed:
|
case RepeatOnePressed:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-1-on-pressed.svg", size );
|
return QLatin1String( RESPATH "images/repeat-1-on-pressed.svg" );
|
||||||
break;
|
break;
|
||||||
case RepeatAll:
|
case RepeatAll:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-all-on-rest.svg", size );
|
return QLatin1String( RESPATH "images/repeat-all-on-rest.svg" );
|
||||||
break;
|
break;
|
||||||
case RepeatAllPressed:
|
case RepeatAllPressed:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-all-on-pressed.svg", size );
|
return QLatin1String( RESPATH "images/repeat-all-on-pressed.svg" );
|
||||||
break;
|
break;
|
||||||
case RepeatOff:
|
case RepeatOff:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-off-rest.svg", size );
|
return QLatin1String( RESPATH "images/repeat-off-rest.svg" );
|
||||||
break;
|
break;
|
||||||
case RepeatOffPressed:
|
case RepeatOffPressed:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-off-pressed.svg", size );
|
return QLatin1String( RESPATH "images/repeat-off-pressed.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VolumeMuted:
|
case VolumeMuted:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/volume-icon-muted.svg", size );
|
return QLatin1String( RESPATH "images/volume-icon-muted.svg" );
|
||||||
break;
|
break;
|
||||||
case VolumeFull:
|
case VolumeFull:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/volume-icon-full.svg", size );
|
return QLatin1String( RESPATH "images/volume-icon-full.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Share:
|
case Share:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/share.svg", size );
|
return QLatin1String( RESPATH "images/share.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NotLoved:
|
case NotLoved:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/not-loved.svg", size );
|
return QLatin1String( RESPATH "images/not-loved.svg" );
|
||||||
break;
|
break;
|
||||||
case Loved:
|
case Loved:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/loved.svg", size );
|
return QLatin1String( RESPATH "images/loved.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Configure:
|
case Configure:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/configure.svg", size );
|
return QLatin1String( RESPATH "images/configure.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GreenDot:
|
case GreenDot:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/green-dot.svg", size );
|
return QLatin1String( RESPATH "images/green-dot.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AddContact:
|
case AddContact:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/add-contact.svg", size );
|
return QLatin1String( RESPATH "images/add-contact.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SubscribeOn:
|
case SubscribeOn:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/subscribe-on.svg", size );
|
return QLatin1String( RESPATH "images/subscribe-on.svg" );
|
||||||
break;
|
break;
|
||||||
case SubscribeOff:
|
case SubscribeOff:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/subscribe-off.svg", size );
|
return QLatin1String( RESPATH "images/subscribe-off.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case JumpLink:
|
case JumpLink:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/jump-link.svg", size );
|
return QLatin1String( RESPATH "images/jump-link.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ProcessStop:
|
case ProcessStop:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/process-stop.svg", size );
|
return QLatin1String( RESPATH "images/process-stop.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HeadphonesOn:
|
case HeadphonesOn:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/headphones.svg", size );
|
return QLatin1String( RESPATH "images/headphones.svg" );
|
||||||
break;
|
break;
|
||||||
case HeadphonesOff:
|
case HeadphonesOff:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/headphones-off.svg", size );
|
return QLatin1String( RESPATH "images/headphones-off.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PadlockClosed:
|
case PadlockClosed:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/closed-padlock.svg", size );
|
return QLatin1String( RESPATH "images/closed-padlock.svg" );
|
||||||
break;
|
break;
|
||||||
case PadlockOpen:
|
case PadlockOpen:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/open-padlock.svg", size );
|
return QLatin1String( RESPATH "images/open-padlock.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Downloading:
|
case Downloading:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/downloading.svg", size );
|
return QLatin1String( RESPATH "images/downloading.svg" );
|
||||||
break;
|
break;
|
||||||
case Uploading:
|
case Uploading:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/uploading.svg", size );
|
return QLatin1String( RESPATH "images/uploading.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ViewRefresh:
|
case ViewRefresh:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/view-refresh.svg", size );
|
return QLatin1String( RESPATH "images/view-refresh.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SuperCollection:
|
case SuperCollection:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/supercollection.svg", size );
|
return QLatin1String( RESPATH "images/supercollection.svg" );
|
||||||
break;
|
break;
|
||||||
case LovedPlaylist:
|
case LovedPlaylist:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/loved_playlist.svg", size );
|
return QLatin1String( RESPATH "images/loved_playlist.svg" );
|
||||||
break;
|
break;
|
||||||
case NewReleases:
|
case NewReleases:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/new-releases.svg", size );
|
return QLatin1String( RESPATH "images/new-releases.svg" );
|
||||||
break;
|
break;
|
||||||
case NewAdditions:
|
case NewAdditions:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/new-additions.svg", size );
|
return QLatin1String( RESPATH "images/new-additions.svg" );
|
||||||
break;
|
break;
|
||||||
case RecentlyPlayed:
|
case RecentlyPlayed:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/recently-played.svg", size );
|
return QLatin1String( RESPATH "images/recently-played.svg" );
|
||||||
break;
|
break;
|
||||||
case Charts:
|
case Charts:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/charts.svg", size );
|
return QLatin1String( RESPATH "images/charts.svg" );
|
||||||
break;
|
break;
|
||||||
case AutomaticPlaylist:
|
case AutomaticPlaylist:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/automatic-playlist.svg", size );
|
return QLatin1String( RESPATH "images/automatic-playlist.svg" );
|
||||||
break;
|
break;
|
||||||
case Station:
|
case Station:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/station.svg", size );
|
return QLatin1String( RESPATH "images/station.svg" );
|
||||||
break;
|
break;
|
||||||
case Playlist:
|
case Playlist:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/playlist-icon.svg", size );
|
return QLatin1String( RESPATH "images/playlist-icon.svg" );
|
||||||
break;
|
break;
|
||||||
case Search:
|
case Search:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/search-icon.svg", size );
|
return QLatin1String( RESPATH "images/search-icon.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Add:
|
case Add:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/add.svg", size );
|
return QLatin1String( RESPATH "images/add.svg" );
|
||||||
break;
|
break;
|
||||||
case ListAdd:
|
case ListAdd:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/list-add.svg", size );
|
return QLatin1String( RESPATH "images/list-add.svg" );
|
||||||
break;
|
break;
|
||||||
case ListRemove:
|
case ListRemove:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/list-remove.svg", size );
|
return QLatin1String( RESPATH "images/list-remove.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AdvancedSettings:
|
case AdvancedSettings:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/advanced-settings.svg", size );
|
return QLatin1String( RESPATH "images/advanced-settings.svg" );
|
||||||
break;
|
break;
|
||||||
case AccountSettings:
|
case AccountSettings:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/account-settings.svg", size );
|
return QLatin1String( RESPATH "images/account-settings.svg" );
|
||||||
break;
|
break;
|
||||||
case MusicSettings:
|
case MusicSettings:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/music-settings.svg", size );
|
return QLatin1String( RESPATH "images/music-settings.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DropSong:
|
case DropSong:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-song.svg", size );
|
return QLatin1String( RESPATH "images/drop-song.svg" );
|
||||||
break;
|
break;
|
||||||
case DropAlbum:
|
case DropAlbum:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-album.svg", size );
|
return QLatin1String( RESPATH "images/drop-album.svg" );
|
||||||
break;
|
break;
|
||||||
case DropAllSongs:
|
case DropAllSongs:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-all-songs.svg", size );
|
return QLatin1String( RESPATH "images/drop-all-songs.svg" );
|
||||||
break;
|
break;
|
||||||
case DropLocalSongs:
|
case DropLocalSongs:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-local-songs.svg", size );
|
return QLatin1String( RESPATH "images/drop-local-songs.svg" );
|
||||||
break;
|
break;
|
||||||
case DropTopSongs:
|
case DropTopSongs:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-top-songs.svg", size );
|
return QLatin1String( RESPATH "images/drop-top-songs.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Starred:
|
case Starred:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/starred.svg", size );
|
return QLatin1String( RESPATH "images/starred.svg" );
|
||||||
break;
|
break;
|
||||||
case Unstarred:
|
case Unstarred:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/star-unstarred.svg", size );
|
return QLatin1String( RESPATH "images/star-unstarred.svg" );
|
||||||
break;
|
break;
|
||||||
case StarHovered:
|
case StarHovered:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/star-hover.svg", size );
|
return QLatin1String( RESPATH "images/star-hover.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SipPluginOnline:
|
case SipPluginOnline:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/sipplugin-online.svg", size );
|
return QLatin1String( RESPATH "images/sipplugin-online.svg" );
|
||||||
break;
|
break;
|
||||||
case SipPluginOffline:
|
case SipPluginOffline:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/sipplugin-offline.svg", size );
|
return QLatin1String( RESPATH "images/sipplugin-offline.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AccountNone:
|
case AccountNone:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/account-none.svg", size );
|
return QLatin1String( RESPATH "images/account-none.svg" );
|
||||||
break;
|
break;
|
||||||
case LastfmIcon:
|
case LastfmIcon:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/lastfm-icon.svg", size );
|
return QLatin1String( RESPATH "images/lastfm-icon.svg" );
|
||||||
break;
|
break;
|
||||||
case SpotifyIcon:
|
case SpotifyIcon:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/spotify-sourceicon.svg", size );
|
return QLatin1String( RESPATH "images/spotify-sourceicon.svg" );
|
||||||
break;
|
break;
|
||||||
case SoundcloudIcon:
|
case SoundcloudIcon:
|
||||||
pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/soundcloud.svg", size );
|
return QLatin1String( RESPATH "images/soundcloud.svg" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
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() )
|
if ( pixmap.isNull() )
|
||||||
{
|
{
|
||||||
Q_ASSERT( false );
|
Q_ASSERT( false );
|
||||||
@@ -711,6 +718,7 @@ defaultPixmap( ImageType type, ImageMode mode, const QSize& size )
|
|||||||
}
|
}
|
||||||
|
|
||||||
return pixmap;
|
return pixmap;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -69,6 +69,7 @@ namespace TomahawkUtils
|
|||||||
DLLEXPORT void styleScrollBar( QScrollBar* scrollBar );
|
DLLEXPORT void styleScrollBar( QScrollBar* scrollBar );
|
||||||
|
|
||||||
DLLEXPORT QPixmap defaultPixmap( ImageType type, ImageMode mode = TomahawkUtils::Original, const QSize& size = QSize( 0, 0 ) );
|
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 createTiledPixmap( int width, int height, const QImage& src );
|
||||||
DLLEXPORT QPixmap addDropShadow( const QPixmap& sourceImage, const QSize& targetSize );
|
DLLEXPORT QPixmap addDropShadow( const QPixmap& sourceImage, const QSize& targetSize );
|
||||||
DLLEXPORT QPixmap squareCenterPixmap( const QPixmap& sourceImage );
|
DLLEXPORT QPixmap squareCenterPixmap( const QPixmap& sourceImage );
|
||||||
|
64
src/libtomahawk/widgets/DeclarativeHeader.cpp
Normal file
64
src/libtomahawk/widgets/DeclarativeHeader.cpp
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
#include "DeclarativeHeader.h"
|
||||||
|
#include "utils/TomahawkUtilsGui.h"
|
||||||
|
|
||||||
|
#include <QDeclarativeContext>
|
||||||
|
|
||||||
|
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 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
42
src/libtomahawk/widgets/DeclarativeHeader.h
Normal file
42
src/libtomahawk/widgets/DeclarativeHeader.h
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
#ifndef DECLARATIVEHEADER_H
|
||||||
|
#define DECLARATIVEHEADER_H
|
||||||
|
|
||||||
|
#include "DeclarativeView.h"
|
||||||
|
#include "utils/TomahawkUtils.h"
|
||||||
|
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
|
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
|
@@ -9,4 +9,8 @@ SearchFieldQmlProxy::SearchFieldQmlProxy(QGraphicsItem *parent) :
|
|||||||
m_searchField->setAttribute(Qt::WA_NoSystemBackground);
|
m_searchField->setAttribute(Qt::WA_NoSystemBackground);
|
||||||
setWidget(m_searchField);
|
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()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -11,6 +11,11 @@ class SearchFieldQmlProxy: public QGraphicsProxyWidget
|
|||||||
public:
|
public:
|
||||||
SearchFieldQmlProxy(QGraphicsItem* parent = 0);
|
SearchFieldQmlProxy(QGraphicsItem* parent = 0);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void textChanged(const QString &text);
|
||||||
|
void editingFinished();
|
||||||
|
void returnPressed();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QSearchField *m_searchField;
|
QSearchField *m_searchField;
|
||||||
};
|
};
|
||||||
|
@@ -61,7 +61,7 @@ public:
|
|||||||
virtual QString title() const { return m_title; }
|
virtual QString title() const { return m_title; }
|
||||||
virtual QString description() const { return m_description; }
|
virtual QString description() const { return m_description; }
|
||||||
virtual QString longDescription() const { return m_longDescription; }
|
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; }
|
virtual bool jumpToCurrentTrack() { return false; }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@@ -83,7 +83,7 @@ private:
|
|||||||
QString m_title;
|
QString m_title;
|
||||||
QString m_description;
|
QString m_description;
|
||||||
QString m_longDescription;
|
QString m_longDescription;
|
||||||
QPixmap m_pixmap;
|
QString m_iconSource;
|
||||||
|
|
||||||
static QString s_popularAlbumsQuery;
|
static QString s_popularAlbumsQuery;
|
||||||
static QString s_mostPlayedPlaylistsQuery;
|
static QString s_mostPlayedPlaylistsQuery;
|
||||||
|
@@ -76,7 +76,7 @@ AlbumInfoWidget::AlbumInfoWidget( const Tomahawk::album_ptr& album, QWidget* par
|
|||||||
ui->tracks->setFrameShape( QFrame::StyledPanel );
|
ui->tracks->setFrameShape( QFrame::StyledPanel );
|
||||||
ui->tracks->setAttribute( Qt::WA_MacShowFocusRect, 0 );
|
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->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultAlbumCover, TomahawkUtils::ScaledCover, QSize( ui->cover->sizeHint() ) ) );
|
||||||
|
|
||||||
ui->biography->setFrameShape( QFrame::NoFrame );
|
ui->biography->setFrameShape( QFrame::NoFrame );
|
||||||
@@ -233,8 +233,8 @@ AlbumInfoWidget::onAlbumImageUpdated()
|
|||||||
if ( m_album->cover( QSize( 0, 0 ) ).isNull() )
|
if ( m_album->cover( QSize( 0, 0 ) ).isNull() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_pixmap = m_album->cover( QSize( 0, 0 ) );
|
m_iconSource = QLatin1String( "image://albumart/" ) + m_album->coverId();
|
||||||
emit pixmapChanged( m_pixmap );
|
emit imageSourceChanged( m_iconSource );
|
||||||
|
|
||||||
ui->cover->setPixmap( TomahawkUtils::createRoundedImage( m_album->cover( ui->cover->sizeHint() ), QSize( 0, 0 ) ) );
|
ui->cover->setPixmap( TomahawkUtils::createRoundedImage( m_album->cover( ui->cover->sizeHint() ), QSize( 0, 0 ) ) );
|
||||||
}
|
}
|
||||||
|
@@ -64,7 +64,7 @@ public:
|
|||||||
virtual QString title() const { return m_title; }
|
virtual QString title() const { return m_title; }
|
||||||
virtual QString description() const { return m_description; }
|
virtual QString description() const { return m_description; }
|
||||||
virtual QString longDescription() const { return m_longDescription; }
|
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 isTemporaryPage() const { return true; }
|
||||||
virtual bool showInfoBar() const { return false; }
|
virtual bool showInfoBar() const { return false; }
|
||||||
@@ -86,7 +86,7 @@ public slots:
|
|||||||
signals:
|
signals:
|
||||||
void longDescriptionChanged( const QString& description );
|
void longDescriptionChanged( const QString& description );
|
||||||
void descriptionChanged( const Tomahawk::artist_ptr& artist );
|
void descriptionChanged( const Tomahawk::artist_ptr& artist );
|
||||||
void pixmapChanged( const QPixmap& pixmap );
|
void imageSourceChanged( const QString& imageSource );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void changeEvent( QEvent* e );
|
void changeEvent( QEvent* e );
|
||||||
@@ -111,7 +111,7 @@ private:
|
|||||||
QString m_title;
|
QString m_title;
|
||||||
QString m_description;
|
QString m_description;
|
||||||
QString m_longDescription;
|
QString m_longDescription;
|
||||||
QPixmap m_pixmap;
|
QString m_iconSource;
|
||||||
|
|
||||||
friend class MetaAlbumInfoInterface;
|
friend class MetaAlbumInfoInterface;
|
||||||
};
|
};
|
||||||
|
@@ -96,7 +96,7 @@ ArtistInfoWidget::ArtistInfoWidget( const Tomahawk::artist_ptr& artist, QWidget*
|
|||||||
ui->topHits->setFrameShape( QFrame::StyledPanel );
|
ui->topHits->setFrameShape( QFrame::StyledPanel );
|
||||||
ui->topHits->setAttribute( Qt::WA_MacShowFocusRect, 0 );
|
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() ) ) );
|
ui->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, TomahawkUtils::ScaledCover, QSize( ui->cover->sizeHint() ) ) );
|
||||||
|
|
||||||
QFont f = font();
|
QFont f = font();
|
||||||
@@ -317,8 +317,8 @@ ArtistInfoWidget::onArtistImageUpdated()
|
|||||||
if ( m_artist->cover( QSize( 0, 0 ) ).isNull() )
|
if ( m_artist->cover( QSize( 0, 0 ) ).isNull() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_pixmap = m_artist->cover( QSize( 0, 0 ) );
|
m_iconSource = QLatin1String( "image://albumart/" ) + m_artist->coverId();
|
||||||
emit pixmapChanged( m_pixmap );
|
emit pixmapChanged( m_iconSource );
|
||||||
|
|
||||||
ui->cover->setPixmap( TomahawkUtils::createRoundedImage( m_artist->cover( ui->cover->sizeHint() ), QSize( 0, 0 ) ) );
|
ui->cover->setPixmap( TomahawkUtils::createRoundedImage( m_artist->cover( ui->cover->sizeHint() ), QSize( 0, 0 ) ) );
|
||||||
}
|
}
|
||||||
|
@@ -76,7 +76,7 @@ public:
|
|||||||
virtual QString title() const { return m_title; }
|
virtual QString title() const { return m_title; }
|
||||||
virtual QString description() const { return m_description; }
|
virtual QString description() const { return m_description; }
|
||||||
virtual QString longDescription() const { return m_longDescription; }
|
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 isTemporaryPage() const { return true; }
|
||||||
virtual bool showInfoBar() const { return false; }
|
virtual bool showInfoBar() const { return false; }
|
||||||
@@ -115,7 +115,7 @@ private:
|
|||||||
QString m_title;
|
QString m_title;
|
||||||
QString m_description;
|
QString m_description;
|
||||||
QString m_longDescription;
|
QString m_longDescription;
|
||||||
QPixmap m_pixmap;
|
QString m_iconSource;
|
||||||
|
|
||||||
friend class ::MetaArtistInfoInterface;
|
friend class ::MetaArtistInfoInterface;
|
||||||
};
|
};
|
||||||
|
@@ -96,7 +96,7 @@ TrackInfoWidget::TrackInfoWidget( const Tomahawk::query_ptr& query, QWidget* par
|
|||||||
ui->similarTracksView->proxyModel()->sort( -1 );
|
ui->similarTracksView->proxyModel()->sort( -1 );
|
||||||
ui->similarTracksView->setEmptyTip( tr( "Sorry, but we could not find similar tracks for this song!" ) );
|
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() ) ) );
|
ui->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultTrackImage, TomahawkUtils::ScaledCover, QSize( ui->cover->sizeHint() ) ) );
|
||||||
|
|
||||||
m_scrollArea = new QScrollArea();
|
m_scrollArea = new QScrollArea();
|
||||||
@@ -218,8 +218,8 @@ TrackInfoWidget::onCoverUpdated()
|
|||||||
if ( m_query->cover( QSize( 0, 0 ) ).isNull() )
|
if ( m_query->cover( QSize( 0, 0 ) ).isNull() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_pixmap = m_query->cover( ui->cover->size() );
|
m_iconSource = m_query->coverId();
|
||||||
ui->cover->setPixmap( TomahawkUtils::createRoundedImage( m_pixmap, QSize( 0, 0 ) ) );
|
ui->cover->setPixmap( TomahawkUtils::createRoundedImage( m_query->cover( ui->cover->size() ), QSize( 0, 0 ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -63,7 +63,7 @@ public:
|
|||||||
virtual QString title() const { return m_title; }
|
virtual QString title() const { return m_title; }
|
||||||
virtual QString description() const { return QString(); }
|
virtual QString description() const { return QString(); }
|
||||||
virtual QString longDescription() 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 isBeingPlayed() const;
|
||||||
virtual bool isTemporaryPage() const { return true; }
|
virtual bool isTemporaryPage() const { return true; }
|
||||||
@@ -96,7 +96,7 @@ private:
|
|||||||
|
|
||||||
PlayableModel* m_relatedTracksModel;
|
PlayableModel* m_relatedTracksModel;
|
||||||
QString m_title;
|
QString m_title;
|
||||||
QPixmap m_pixmap;
|
QString m_iconSource;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TRACKINFOWIDGET_H
|
#endif // TRACKINFOWIDGET_H
|
||||||
|
@@ -73,7 +73,7 @@ LovedTracksItem::activate()
|
|||||||
{
|
{
|
||||||
SourceItem* par = dynamic_cast< SourceItem* >( parent() );
|
SourceItem* par = dynamic_cast< SourceItem* >( parent() );
|
||||||
FlexibleView* pv = new FlexibleView( ViewManager::instance()->widget() );
|
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 );
|
LovedTracksModel* raModel = new LovedTracksModel( pv );
|
||||||
raModel->setTitle( text() );
|
raModel->setTitle( text() );
|
||||||
|
@@ -516,7 +516,7 @@ SourceItem::latestAdditionsClicked()
|
|||||||
if ( !m_latestAdditionsPage )
|
if ( !m_latestAdditionsPage )
|
||||||
{
|
{
|
||||||
FlexibleView* pv = new FlexibleView( ViewManager::instance()->widget() );
|
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 );
|
RecentlyAddedModel* raModel = new RecentlyAddedModel( pv );
|
||||||
raModel->setTitle( tr( "Latest Additions" ) );
|
raModel->setTitle( tr( "Latest Additions" ) );
|
||||||
@@ -559,7 +559,7 @@ SourceItem::recentPlaysClicked()
|
|||||||
if ( !m_recentPlaysPage )
|
if ( !m_recentPlaysPage )
|
||||||
{
|
{
|
||||||
FlexibleView* pv = new FlexibleView( ViewManager::instance()->widget() );
|
FlexibleView* pv = new FlexibleView( ViewManager::instance()->widget() );
|
||||||
pv->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RecentlyPlayed ) );
|
pv->setHeaderIconSource( TomahawkUtils::defaultImagePath( TomahawkUtils::RecentlyPlayed ) );
|
||||||
|
|
||||||
RecentlyPlayedModel* raModel = new RecentlyPlayedModel( pv );
|
RecentlyPlayedModel* raModel = new RecentlyPlayedModel( pv );
|
||||||
raModel->setTitle( tr( "Recently Played Tracks" ) );
|
raModel->setTitle( tr( "Recently Played Tracks" ) );
|
||||||
|
Reference in New Issue
Block a user