diff --git a/include/lcd_spinbox.h b/include/lcd_spinbox.h index d431f90a0..d8b7faa9d 100644 --- a/include/lcd_spinbox.h +++ b/include/lcd_spinbox.h @@ -52,7 +52,8 @@ class lcdSpinBox : public QWidget, public automatableObject Q_OBJECT public: lcdSpinBox( int _min, int _max, int _num_digits, QWidget * _parent, - engine * _engine ); + const QString & _name, + engine * _engine, track * _track ); virtual ~lcdSpinBox(); virtual void setStep( const int _step ); @@ -71,6 +72,7 @@ public slots: protected: + virtual void contextMenuEvent( QContextMenuEvent * _me ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseMoveEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); diff --git a/src/widgets/lcd_spinbox.cpp b/src/widgets/lcd_spinbox.cpp index 29496d636..4e197004d 100644 --- a/src/widgets/lcd_spinbox.cpp +++ b/src/widgets/lcd_spinbox.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #else @@ -39,19 +40,26 @@ #include #include #include +#include #endif #include "lcd_spinbox.h" +#include "embed.h" #include "gui_templates.h" #include "templates.h" -lcdSpinBox::lcdSpinBox( int _min, int _max, int _num_digits, - QWidget * _parent, engine * _engine ) : - QWidget( _parent ), - autoObj( _engine, NULL, 0, _min, _max ), +lcdSpinBox::lcdSpinBox( int _min, int _max, int _num_digits, QWidget * _parent, + const QString & _name, + engine * _engine, track * _track ) : + QWidget( _parent +#ifndef QT4 + , _name.ascii() +#endif + ), + autoObj( _engine, _track, 0, _min, _max ), m_label( NULL ), m_origMousePos() { @@ -70,8 +78,16 @@ lcdSpinBox::lcdSpinBox( int _min, int _max, int _num_digits, #endif setEnabled( TRUE ); + if( _track != NULL ) + { + getAutomationPattern(); + } + // value is automatically limited to given range setInitValue( 0 ); +#ifdef QT4 + setAccessibleName( _name ); +#endif m_number->setFixedSize( m_number->sizeHint() * 0.9 ); setFixedSize( m_number->size() ); @@ -155,6 +171,43 @@ void lcdSpinBox::setEnabled( bool _on ) +void lcdSpinBox::contextMenuEvent( QContextMenuEvent * _me ) +{ + m_origMousePos = _me->globalPos(); + + if( nullTrack() ) + { + QWidget::contextMenuEvent( _me ); + return; + } + + // for the case, the user clicked right while pressing left mouse- + // button, the context-menu appears while mouse-cursor is still hidden + // and it isn't shown again until user does something which causes + // an QApplication::restoreOverrideCursor()-call... + mouseReleaseEvent( NULL ); + + QMenu contextMenu( this ); +#ifdef QT4 + contextMenu.setTitle( accessibleName() ); +#else + QLabel * caption = new QLabel( "" + + QString( accessibleName() ) + "", this ); + caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) ); + caption->setAlignment( Qt::AlignCenter ); + contextMenu.addAction( caption ); +#endif +//TODO: Change icon + contextMenu.addAction( embed::getIconPixmap( "piano" ), + tr( "&Open in automation editor" ), + getAutomationPattern(), + SLOT( openInAutomationEditor() ) ); + contextMenu.exec( QCursor::pos() ); +} + + + + void lcdSpinBox::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::LeftButton && _me->y() < m_number->height() ) @@ -205,7 +258,7 @@ void lcdSpinBox::mouseReleaseEvent( QMouseEvent * _me ) void lcdSpinBox::wheelEvent( QWheelEvent * _we ) { _we->accept(); - setValue( value() + ( ( _we->delta() > 0 ) ? 1 : -1 ) * step() ); + setInitValue( value() + ( ( _we->delta() > 0 ) ? 1 : -1 ) * step() ); emit valueChanged( value() ); }