mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-04-13 20:41:58 +02:00
* Added OverlayWidget, a helper class to display neat little info / osd-like overlays in another QWidget.
This commit is contained in:
parent
78a786e878
commit
0acb83a778
@ -104,6 +104,7 @@ set( libSources
|
||||
|
||||
widgets/newplaylistwidget.cpp
|
||||
widgets/welcomewidget.cpp
|
||||
widgets/overlaywidget.cpp
|
||||
widgets/infowidgets/sourceinfowidget.cpp
|
||||
)
|
||||
|
||||
@ -203,6 +204,7 @@ set( libHeaders
|
||||
|
||||
widgets/newplaylistwidget.h
|
||||
widgets/welcomewidget.h
|
||||
widgets/overlaywidget.h
|
||||
widgets/infowidgets/sourceinfowidget.h
|
||||
)
|
||||
|
||||
|
@ -2,8 +2,10 @@
|
||||
|
||||
#include <QDebug>
|
||||
#include <QDragEnterEvent>
|
||||
#include <QPainter>
|
||||
|
||||
#include "playlist/collectionproxymodel.h"
|
||||
#include "widgets/overlaywidget.h"
|
||||
|
||||
using namespace Tomahawk;
|
||||
|
||||
@ -69,3 +71,17 @@ CollectionView::onCustomContextMenu( const QPoint& 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:
|
||||
virtual void dragEnterEvent( QDragEnterEvent* event );
|
||||
void paintEvent( QPaintEvent* event );
|
||||
|
||||
private:
|
||||
void setupMenus();
|
||||
|
@ -2,8 +2,10 @@
|
||||
|
||||
#include <QDebug>
|
||||
#include <QKeyEvent>
|
||||
#include <QPainter>
|
||||
|
||||
#include "playlist/playlistproxymodel.h"
|
||||
#include "widgets/overlaywidget.h"
|
||||
|
||||
using namespace Tomahawk;
|
||||
|
||||
@ -105,3 +107,17 @@ PlaylistView::deleteItems()
|
||||
{
|
||||
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:
|
||||
void keyPressEvent( QKeyEvent* event );
|
||||
void paintEvent( QPaintEvent* event );
|
||||
|
||||
private slots:
|
||||
void onCustomContextMenu( const QPoint& pos );
|
||||
|
@ -30,6 +30,7 @@ public:
|
||||
|
||||
virtual Tomahawk::result_ptr siblingItem( int itemsAway );
|
||||
|
||||
virtual QString filter() const { return filterRegExp().pattern(); }
|
||||
virtual void setFilter( const QString& pattern );
|
||||
|
||||
virtual PlaylistInterface::RepeatMode repeatMode() const { return m_repeatMode; }
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
#include "audio/audioengine.h"
|
||||
#include "utils/tomahawkutils.h"
|
||||
#include "widgets/overlaywidget.h"
|
||||
|
||||
#include "trackheader.h"
|
||||
#include "playlistmanager.h"
|
||||
@ -23,6 +24,7 @@ TrackView::TrackView( QWidget* parent )
|
||||
, m_proxyModel( 0 )
|
||||
, m_delegate( 0 )
|
||||
, m_header( new TrackHeader( this ) )
|
||||
, m_overlay( new OverlayWidget() )
|
||||
, m_resizing( false )
|
||||
{
|
||||
setSortingEnabled( false );
|
||||
@ -54,6 +56,8 @@ TrackView::TrackView( QWidget* parent )
|
||||
TrackView::~TrackView()
|
||||
{
|
||||
qDebug() << Q_FUNC_INFO;
|
||||
|
||||
delete m_overlay;
|
||||
}
|
||||
|
||||
|
||||
@ -245,11 +249,18 @@ void
|
||||
TrackView::paintEvent( QPaintEvent* 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 )
|
||||
{
|
||||
// draw drop indicator
|
||||
QPainter painter( viewport() );
|
||||
{
|
||||
// draw indicator for inserting items
|
||||
QBrush blendedBrush = viewOptions().palette.brush( QPalette::Normal, QPalette::Highlight );
|
||||
@ -278,6 +289,8 @@ TrackView::onFilterChanged( const QString& )
|
||||
{
|
||||
if ( selectedIndexes().count() )
|
||||
scrollTo( selectedIndexes().at( 0 ), QAbstractItemView::PositionAtCenter );
|
||||
|
||||
reset();
|
||||
}
|
||||
|
||||
|
||||
|
@ -12,6 +12,7 @@ class PlaylistInterface;
|
||||
class TrackHeader;
|
||||
class TrackModel;
|
||||
class TrackProxyModel;
|
||||
class OverlayWidget;
|
||||
|
||||
class DLLEXPORT TrackView : public QTreeView
|
||||
{
|
||||
@ -23,10 +24,11 @@ public:
|
||||
|
||||
void setProxyModel( TrackProxyModel* model );
|
||||
|
||||
TrackModel* model() { return m_model; }
|
||||
TrackProxyModel* proxyModel() { return m_proxyModel; }
|
||||
PlaylistItemDelegate* delegate() { return m_delegate; }
|
||||
TrackHeader* header() { return m_header; }
|
||||
TrackModel* model() const { return m_model; }
|
||||
TrackProxyModel* proxyModel() const { return m_proxyModel; }
|
||||
PlaylistItemDelegate* delegate() const { return m_delegate; }
|
||||
TrackHeader* header() const { return m_header; }
|
||||
OverlayWidget* overlay() const { return m_overlay; }
|
||||
|
||||
void setModel( TrackModel* model );
|
||||
|
||||
@ -61,6 +63,7 @@ private:
|
||||
TrackProxyModel* m_proxyModel;
|
||||
PlaylistItemDelegate* m_delegate;
|
||||
TrackHeader* m_header;
|
||||
OverlayWidget* m_overlay;
|
||||
|
||||
bool m_resizing;
|
||||
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
|
Loading…
x
Reference in New Issue
Block a user