1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-06 14:16:32 +02:00

* Make HeaderLabel an alternative drag-for-resize method.

This commit is contained in:
Christian Muehlhaeuser
2012-05-28 17:45:40 +02:00
parent ab86a48ef7
commit fac2e2fc5b
2 changed files with 40 additions and 3 deletions

View File

@@ -20,17 +20,20 @@
#include <QApplication> #include <QApplication>
#include <QPainter> #include <QPainter>
#include <QMouseEvent>
#include "utils/Logger.h" #include "utils/Logger.h"
#include "utils/StyleHelper.h" #include "utils/StyleHelper.h"
#include "utils/TomahawkUtilsGui.h" #include "utils/TomahawkUtilsGui.h"
static const int s_defaultFontSize = 12; static const int s_defaultFontSize = 12;
HeaderLabel::HeaderLabel( QWidget* parent ) HeaderLabel::HeaderLabel( QWidget* parent )
: QLabel( parent ) : QLabel( parent )
, m_parent( parent ) , m_parent( parent )
, m_pressed( false )
, m_moved( false )
{ {
QFont f( font() ); QFont f( font() );
f.setBold( true ); f.setBold( true );
@@ -38,6 +41,7 @@ HeaderLabel::HeaderLabel( QWidget* parent )
setFont( f ); setFont( f );
setFixedHeight( TomahawkUtils::headerHeight() ); setFixedHeight( TomahawkUtils::headerHeight() );
setMouseTracking( true );
} }
@@ -52,6 +56,7 @@ HeaderLabel::sizeHint() const
return QLabel::sizeHint(); return QLabel::sizeHint();
} }
int int
HeaderLabel::defaultFontSize() HeaderLabel::defaultFontSize()
{ {
@@ -63,7 +68,14 @@ void
HeaderLabel::mousePressEvent( QMouseEvent* event ) HeaderLabel::mousePressEvent( QMouseEvent* event )
{ {
QFrame::mousePressEvent( event ); QFrame::mousePressEvent( event );
m_time.start();
if ( !m_moved )
{
m_time.start();
m_pressed = true;
m_dragPoint = event->pos();
}
} }
@@ -71,8 +83,27 @@ void
HeaderLabel::mouseReleaseEvent( QMouseEvent* event ) HeaderLabel::mouseReleaseEvent( QMouseEvent* event )
{ {
QFrame::mouseReleaseEvent( event ); QFrame::mouseReleaseEvent( event );
if ( m_time.elapsed() < qApp->doubleClickInterval() )
if ( !m_moved && m_time.elapsed() < qApp->doubleClickInterval() )
emit clicked(); emit clicked();
m_pressed = false;
m_moved = false;
}
void
HeaderLabel::mouseMoveEvent( QMouseEvent* event )
{
if ( m_pressed )
{
QPoint delta = m_dragPoint - event->pos();
if ( abs( delta.y() ) > 3 )
{
m_moved = true;
emit resized( delta );
}
}
} }

View File

@@ -43,6 +43,7 @@ public:
signals: signals:
void clicked(); void clicked();
void resized( const QPoint& delta );
protected: protected:
// void changeEvent( QEvent* e ); // void changeEvent( QEvent* e );
@@ -50,10 +51,15 @@ protected:
void mousePressEvent( QMouseEvent* event ); void mousePressEvent( QMouseEvent* event );
void mouseReleaseEvent( QMouseEvent* event ); void mouseReleaseEvent( QMouseEvent* event );
void mouseMoveEvent( QMouseEvent* event );
private: private:
QWidget* m_parent; QWidget* m_parent;
QTime m_time; QTime m_time;
QPoint m_dragPoint;
bool m_pressed;
bool m_moved;
}; };
#endif // HEADERLABEL_H #endif // HEADERLABEL_H