mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-06 06:07:37 +02:00
* Added OverlayWidget, a helper class to display neat little info / osd-like overlays in another QWidget.
This commit is contained in:
@@ -104,6 +104,7 @@ set( libSources
|
|||||||
|
|
||||||
widgets/newplaylistwidget.cpp
|
widgets/newplaylistwidget.cpp
|
||||||
widgets/welcomewidget.cpp
|
widgets/welcomewidget.cpp
|
||||||
|
widgets/overlaywidget.cpp
|
||||||
widgets/infowidgets/sourceinfowidget.cpp
|
widgets/infowidgets/sourceinfowidget.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -203,6 +204,7 @@ set( libHeaders
|
|||||||
|
|
||||||
widgets/newplaylistwidget.h
|
widgets/newplaylistwidget.h
|
||||||
widgets/welcomewidget.h
|
widgets/welcomewidget.h
|
||||||
|
widgets/overlaywidget.h
|
||||||
widgets/infowidgets/sourceinfowidget.h
|
widgets/infowidgets/sourceinfowidget.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -2,8 +2,10 @@
|
|||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QDragEnterEvent>
|
#include <QDragEnterEvent>
|
||||||
|
#include <QPainter>
|
||||||
|
|
||||||
#include "playlist/collectionproxymodel.h"
|
#include "playlist/collectionproxymodel.h"
|
||||||
|
#include "widgets/overlaywidget.h"
|
||||||
|
|
||||||
using namespace Tomahawk;
|
using namespace Tomahawk;
|
||||||
|
|
||||||
@@ -69,3 +71,17 @@ CollectionView::onCustomContextMenu( const QPoint& pos )
|
|||||||
|
|
||||||
m_itemMenu.exec( mapToGlobal( pos ) );
|
m_itemMenu.exec( mapToGlobal( pos ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
CollectionView::paintEvent( QPaintEvent* event )
|
||||||
|
{
|
||||||
|
TrackView::paintEvent( event );
|
||||||
|
QPainter painter( viewport() );
|
||||||
|
|
||||||
|
if ( !model()->trackCount() )
|
||||||
|
{
|
||||||
|
overlay()->setText( tr( "This collection is empty." ) );
|
||||||
|
overlay()->paint( &painter );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -20,6 +20,7 @@ private slots:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void dragEnterEvent( QDragEnterEvent* event );
|
virtual void dragEnterEvent( QDragEnterEvent* event );
|
||||||
|
void paintEvent( QPaintEvent* event );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setupMenus();
|
void setupMenus();
|
||||||
|
@@ -2,8 +2,10 @@
|
|||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
|
#include <QPainter>
|
||||||
|
|
||||||
#include "playlist/playlistproxymodel.h"
|
#include "playlist/playlistproxymodel.h"
|
||||||
|
#include "widgets/overlaywidget.h"
|
||||||
|
|
||||||
using namespace Tomahawk;
|
using namespace Tomahawk;
|
||||||
|
|
||||||
@@ -105,3 +107,17 @@ PlaylistView::deleteItems()
|
|||||||
{
|
{
|
||||||
proxyModel()->removeIndexes( selectedIndexes() );
|
proxyModel()->removeIndexes( selectedIndexes() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
PlaylistView::paintEvent( QPaintEvent* event )
|
||||||
|
{
|
||||||
|
TrackView::paintEvent( event );
|
||||||
|
QPainter painter( viewport() );
|
||||||
|
|
||||||
|
if ( !model()->trackCount() )
|
||||||
|
{
|
||||||
|
overlay()->setText( tr( "This playlist is currently empty. Add some tracks to it and enjoy the music!" ) );
|
||||||
|
overlay()->paint( &painter );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -19,6 +19,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void keyPressEvent( QKeyEvent* event );
|
void keyPressEvent( QKeyEvent* event );
|
||||||
|
void paintEvent( QPaintEvent* event );
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onCustomContextMenu( const QPoint& pos );
|
void onCustomContextMenu( const QPoint& pos );
|
||||||
|
@@ -30,6 +30,7 @@ public:
|
|||||||
|
|
||||||
virtual Tomahawk::result_ptr siblingItem( int itemsAway );
|
virtual Tomahawk::result_ptr siblingItem( int itemsAway );
|
||||||
|
|
||||||
|
virtual QString filter() const { return filterRegExp().pattern(); }
|
||||||
virtual void setFilter( const QString& pattern );
|
virtual void setFilter( const QString& pattern );
|
||||||
|
|
||||||
virtual PlaylistInterface::RepeatMode repeatMode() const { return m_repeatMode; }
|
virtual PlaylistInterface::RepeatMode repeatMode() const { return m_repeatMode; }
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "audio/audioengine.h"
|
#include "audio/audioengine.h"
|
||||||
#include "utils/tomahawkutils.h"
|
#include "utils/tomahawkutils.h"
|
||||||
|
#include "widgets/overlaywidget.h"
|
||||||
|
|
||||||
#include "trackheader.h"
|
#include "trackheader.h"
|
||||||
#include "playlistmanager.h"
|
#include "playlistmanager.h"
|
||||||
@@ -23,6 +24,7 @@ TrackView::TrackView( QWidget* parent )
|
|||||||
, m_proxyModel( 0 )
|
, m_proxyModel( 0 )
|
||||||
, m_delegate( 0 )
|
, m_delegate( 0 )
|
||||||
, m_header( new TrackHeader( this ) )
|
, m_header( new TrackHeader( this ) )
|
||||||
|
, m_overlay( new OverlayWidget() )
|
||||||
, m_resizing( false )
|
, m_resizing( false )
|
||||||
{
|
{
|
||||||
setSortingEnabled( false );
|
setSortingEnabled( false );
|
||||||
@@ -54,6 +56,8 @@ TrackView::TrackView( QWidget* parent )
|
|||||||
TrackView::~TrackView()
|
TrackView::~TrackView()
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
|
|
||||||
|
delete m_overlay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -245,11 +249,18 @@ void
|
|||||||
TrackView::paintEvent( QPaintEvent* event )
|
TrackView::paintEvent( QPaintEvent* event )
|
||||||
{
|
{
|
||||||
QTreeView::paintEvent( event );
|
QTreeView::paintEvent( event );
|
||||||
|
QPainter painter( viewport() );
|
||||||
|
|
||||||
|
if ( !proxyModel()->filter().isEmpty() && !proxyModel()->trackCount() &&
|
||||||
|
model()->trackCount() )
|
||||||
|
{
|
||||||
|
m_overlay->setText( tr( "Sorry, your filter '%1' did not match any results." ).arg( proxyModel()->filter() ) );
|
||||||
|
m_overlay->paint( &painter );
|
||||||
|
}
|
||||||
|
|
||||||
if ( m_dragging )
|
if ( m_dragging )
|
||||||
{
|
{
|
||||||
// draw drop indicator
|
// draw drop indicator
|
||||||
QPainter painter( viewport() );
|
|
||||||
{
|
{
|
||||||
// draw indicator for inserting items
|
// draw indicator for inserting items
|
||||||
QBrush blendedBrush = viewOptions().palette.brush( QPalette::Normal, QPalette::Highlight );
|
QBrush blendedBrush = viewOptions().palette.brush( QPalette::Normal, QPalette::Highlight );
|
||||||
@@ -278,6 +289,8 @@ TrackView::onFilterChanged( const QString& )
|
|||||||
{
|
{
|
||||||
if ( selectedIndexes().count() )
|
if ( selectedIndexes().count() )
|
||||||
scrollTo( selectedIndexes().at( 0 ), QAbstractItemView::PositionAtCenter );
|
scrollTo( selectedIndexes().at( 0 ), QAbstractItemView::PositionAtCenter );
|
||||||
|
|
||||||
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -12,6 +12,7 @@ class PlaylistInterface;
|
|||||||
class TrackHeader;
|
class TrackHeader;
|
||||||
class TrackModel;
|
class TrackModel;
|
||||||
class TrackProxyModel;
|
class TrackProxyModel;
|
||||||
|
class OverlayWidget;
|
||||||
|
|
||||||
class DLLEXPORT TrackView : public QTreeView
|
class DLLEXPORT TrackView : public QTreeView
|
||||||
{
|
{
|
||||||
@@ -23,10 +24,11 @@ public:
|
|||||||
|
|
||||||
void setProxyModel( TrackProxyModel* model );
|
void setProxyModel( TrackProxyModel* model );
|
||||||
|
|
||||||
TrackModel* model() { return m_model; }
|
TrackModel* model() const { return m_model; }
|
||||||
TrackProxyModel* proxyModel() { return m_proxyModel; }
|
TrackProxyModel* proxyModel() const { return m_proxyModel; }
|
||||||
PlaylistItemDelegate* delegate() { return m_delegate; }
|
PlaylistItemDelegate* delegate() const { return m_delegate; }
|
||||||
TrackHeader* header() { return m_header; }
|
TrackHeader* header() const { return m_header; }
|
||||||
|
OverlayWidget* overlay() const { return m_overlay; }
|
||||||
|
|
||||||
void setModel( TrackModel* model );
|
void setModel( TrackModel* model );
|
||||||
|
|
||||||
@@ -61,6 +63,7 @@ private:
|
|||||||
TrackProxyModel* m_proxyModel;
|
TrackProxyModel* m_proxyModel;
|
||||||
PlaylistItemDelegate* m_delegate;
|
PlaylistItemDelegate* m_delegate;
|
||||||
TrackHeader* m_header;
|
TrackHeader* m_header;
|
||||||
|
OverlayWidget* m_overlay;
|
||||||
|
|
||||||
bool m_resizing;
|
bool m_resizing;
|
||||||
bool m_dragging;
|
bool m_dragging;
|
||||||
|
86
src/libtomahawk/widgets/overlaywidget.cpp
Normal file
86
src/libtomahawk/widgets/overlaywidget.cpp
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
#include "overlaywidget.h"
|
||||||
|
|
||||||
|
#include <QPainter>
|
||||||
|
|
||||||
|
|
||||||
|
OverlayWidget::OverlayWidget()
|
||||||
|
: QWidget()
|
||||||
|
{
|
||||||
|
resize( 380, 220 );
|
||||||
|
setAttribute( Qt::WA_TranslucentBackground, true );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
OverlayWidget::~OverlayWidget()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
OverlayWidget::setText( const QString& text )
|
||||||
|
{
|
||||||
|
if ( text == m_text )
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_text = text;
|
||||||
|
m_pixmap = QPixmap();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QPixmap
|
||||||
|
OverlayWidget::pixmap()
|
||||||
|
{
|
||||||
|
if ( m_pixmap.isNull() )
|
||||||
|
{
|
||||||
|
QPixmap p( contentsRect().size() );
|
||||||
|
p.fill( Qt::transparent );
|
||||||
|
render( &p );
|
||||||
|
|
||||||
|
m_pixmap = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_pixmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
OverlayWidget::paint( QPainter* painter )
|
||||||
|
{
|
||||||
|
pixmap(); // cache the image
|
||||||
|
|
||||||
|
QRect center( QPoint( ( painter->viewport().width() - m_pixmap.width() ) / 2,
|
||||||
|
( painter->viewport().height() - m_pixmap.height() ) / 2 ), m_pixmap.size() );
|
||||||
|
|
||||||
|
painter->drawPixmap( center, m_pixmap );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
OverlayWidget::paintEvent( QPaintEvent* event )
|
||||||
|
{
|
||||||
|
QPainter p( this );
|
||||||
|
QRect r = contentsRect();
|
||||||
|
|
||||||
|
p.save();
|
||||||
|
p.setBackgroundMode( Qt::TransparentMode );
|
||||||
|
p.setRenderHint( QPainter::Antialiasing );
|
||||||
|
|
||||||
|
p.setPen( palette().shadow().color() );
|
||||||
|
p.setBrush( palette().shadow() );
|
||||||
|
p.setOpacity( 0.7 );
|
||||||
|
|
||||||
|
p.drawRoundedRect( r, 32.0, 32.0 );
|
||||||
|
|
||||||
|
QTextOption to( Qt::AlignCenter );
|
||||||
|
to.setWrapMode( QTextOption::WrapAtWordBoundaryOrAnywhere );
|
||||||
|
|
||||||
|
QFont f( font() );
|
||||||
|
f.setPixelSize( 18 );
|
||||||
|
f.setBold( true );
|
||||||
|
|
||||||
|
p.setFont( f );
|
||||||
|
p.setPen( palette().light().color() );
|
||||||
|
p.drawText( r.adjusted( 16, 16, -16, -16 ), text(), to );
|
||||||
|
|
||||||
|
p.restore();
|
||||||
|
}
|
32
src/libtomahawk/widgets/overlaywidget.h
Normal file
32
src/libtomahawk/widgets/overlaywidget.h
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#ifndef OVERLAYWIDGET_H
|
||||||
|
#define OVERLAYWIDGET_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
#include "dllmacro.h"
|
||||||
|
|
||||||
|
class DLLEXPORT OverlayWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
OverlayWidget();
|
||||||
|
~OverlayWidget();
|
||||||
|
|
||||||
|
QPixmap pixmap();
|
||||||
|
|
||||||
|
QString text() const { return m_text; }
|
||||||
|
void setText( const QString& text );
|
||||||
|
|
||||||
|
void paint( QPainter* painter );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// void changeEvent( QEvent* e );
|
||||||
|
void paintEvent( QPaintEvent* event );
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString m_text;
|
||||||
|
QPixmap m_pixmap;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // WELCOMEWIDGET_H
|
Reference in New Issue
Block a user