diff --git a/include/FxLine.h b/include/FxLine.h index 46490044f07..5bb04da2f2d 100644 --- a/include/FxLine.h +++ b/include/FxLine.h @@ -79,6 +79,10 @@ class FxLine : public QWidget static const int FxLineHeight; + void renameChannel(); + + bool eventFilter (QObject *dist, QEvent *event); + private: void drawFxLine( QPainter* p, const FxLine *fxLine, bool isActive, bool sendToThis, bool receiveFromThis ); QString elideName( const QString & name ); @@ -98,7 +102,6 @@ class FxLine : public QWidget QGraphicsView * m_view; private slots: - void renameChannel(); void renameFinished(); void removeChannel(); void removeUnusedChannels(); diff --git a/include/FxMixerView.h b/include/FxMixerView.h index 973195bb38d..30c75983885 100644 --- a/include/FxMixerView.h +++ b/include/FxMixerView.h @@ -100,6 +100,8 @@ class EXPORT FxMixerView : public QWidget, public ModelView, void moveChannelLeft(int index, int focusIndex); void moveChannelRight(int index); + void renameChannel(int index); + // make sure the display syncs up with the fx mixer. // useful for loading projects void refreshDisplay(); diff --git a/src/gui/FxMixerView.cpp b/src/gui/FxMixerView.cpp index 8da1cb4e0a5..cbcfd0a47eb 100644 --- a/src/gui/FxMixerView.cpp +++ b/src/gui/FxMixerView.cpp @@ -491,6 +491,12 @@ void FxMixerView::moveChannelRight(int index) } +void FxMixerView::renameChannel(int index) +{ + m_fxChannelViews[index]->m_fxLine->renameChannel(); +} + + void FxMixerView::keyPressEvent(QKeyEvent * e) { @@ -527,6 +533,11 @@ void FxMixerView::keyPressEvent(QKeyEvent * e) addNewChannel(); } break; + case Qt::Key_Enter: + case Qt::Key_Return: + case Qt::Key_F2: + renameChannel( m_currentFxLine->channelIndex() ); + break; } } diff --git a/src/gui/widgets/FxLine.cpp b/src/gui/widgets/FxLine.cpp index c6e6fd9aef8..309ef6a1c7c 100644 --- a/src/gui/widgets/FxLine.cpp +++ b/src/gui/widgets/FxLine.cpp @@ -34,6 +34,24 @@ #include "GuiApplication.h" #include "Song.h" +bool FxLine::eventFilter( QObject *dist, QEvent *event ) +{ + // If we are in a rename, capture the enter/return events and handle them + if ( event->type() == QEvent::KeyPress ) + { + QKeyEvent * keyEvent = static_cast(event); + if( keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return ) + { + if( m_inRename ) + { + renameFinished(); + event->accept(); // Stop the event from propagating + return true; + } + } + } + return false; +} const int FxLine::FxLineHeight = 287; QPixmap * FxLine::s_sendBgArrow = NULL; @@ -100,6 +118,7 @@ FxLine::FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex ) : m_renameLineEdit->setFixedWidth( 65 ); m_renameLineEdit->setFont( pointSizeF( font(), 7.5f ) ); m_renameLineEdit->setReadOnly( true ); + m_renameLineEdit->installEventFilter( this ); QGraphicsScene * scene = new QGraphicsScene(); scene->setSceneRect( 0, 0, 33, FxLineHeight );