diff --git a/.gitignore b/.gitignore index 1b855f204cb..cc2823ba06a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ -/build -/target +/build/ +/target/ .*.sw? .DS_Store *~ diff --git a/include/ControllerRackView.h b/include/ControllerRackView.h index 303cc2b401f..a4bf0901b27 100644 --- a/include/ControllerRackView.h +++ b/include/ControllerRackView.h @@ -66,6 +66,8 @@ class ControllerRackView : public QWidget, public SerializingObject public slots: void deleteController( lmms::gui::ControllerView * _view ); + void moveUp(lmms::gui::ControllerView* _view); + void moveDown(lmms::gui::ControllerView* _view); void onControllerAdded( lmms::Controller * ); void onControllerRemoved( lmms::Controller * ); diff --git a/include/ControllerView.h b/include/ControllerView.h index d1ba533a1a0..1a367e248f8 100644 --- a/include/ControllerView.h +++ b/include/ControllerView.h @@ -66,8 +66,12 @@ public slots: void deleteController(); void closeControls(); void renameController(); + void moveUp(); + void moveDown(); signals: + void moveUp(lmms::gui::ControllerView* _view); + void moveDown(lmms::gui::ControllerView* _view); void deleteController( lmms::gui::ControllerView * _view ); diff --git a/src/gui/ControllerRackView.cpp b/src/gui/ControllerRackView.cpp index 54c325dc660..52b8de242ba 100644 --- a/src/gui/ControllerRackView.cpp +++ b/src/gui/ControllerRackView.cpp @@ -24,6 +24,7 @@ */ #include +#include #include #include #include @@ -132,6 +133,33 @@ void ControllerRackView::deleteController( ControllerView * _view ) song->removeController( c ); } +void ControllerRackView::moveUp(ControllerView* view) +{ + // cannot delete the first module + if (view == m_controllerViews.first()) { return; } + + int i = 0; + for (auto it = m_controllerViews.begin(); it != m_controllerViews.end(); ++it, ++i) + { + if (*it == view) { break; } + } + ControllerView* temp = m_controllerViews[i - 1]; + m_controllerViews[i - 1] = view; + m_controllerViews[i] = temp; + + m_scrollAreaLayout->removeWidget(view); + m_scrollAreaLayout->insertWidget(i - 1, view); +} + +void ControllerRackView::moveDown(ControllerView* view) +{ + if(view != m_controllerViews.last()) + { + // moving next controller up is the same + moveUp(*(std::find(m_controllerViews.begin(), m_controllerViews.end(), view) + 1)); + } +} + @@ -141,9 +169,26 @@ void ControllerRackView::onControllerAdded( Controller * controller ) auto controllerView = new ControllerView(controller, scrollAreaWidget); + connect(controllerView, SIGNAL(moveUp(lmms::gui::ControllerView* )), this, + SLOT(moveUp(lmms::gui::ControllerView* )), Qt::QueuedConnection); + connect(controllerView, SIGNAL(moveDown(lmms::gui::ControllerView* )), this, + SLOT(moveDown(lmms::gui::ControllerView* )), Qt::QueuedConnection); connect( controllerView, SIGNAL(deleteController(lmms::gui::ControllerView*)), this, SLOT(deleteController(lmms::gui::ControllerView*)), Qt::QueuedConnection ); + QAction* moveUpAction = new QAction(controllerView); + moveUpAction->setShortcut(Qt::Key_Up | Qt::AltModifier); + moveUpAction->setShortcutContext(Qt::WidgetShortcut); + connect(moveUpAction, SIGNAL(triggered()), controllerView, SLOT(moveUp())); + controllerView->addAction( moveUpAction ); + + QAction* moveDownAction = new QAction(controllerView); + moveDownAction->setShortcut(Qt::Key_Down | Qt::AltModifier); + moveDownAction->setShortcutContext(Qt::WidgetShortcut); + connect(moveDownAction, SIGNAL(triggered()), controllerView, SLOT(moveDown())); + controllerView->addAction(moveDownAction); + + m_controllerViews.append( controllerView ); m_scrollAreaLayout->insertWidget( m_nextIndex, controllerView ); diff --git a/src/gui/ControllerView.cpp b/src/gui/ControllerView.cpp index d32e8d49c09..ad8cad9ff72 100644 --- a/src/gui/ControllerView.cpp +++ b/src/gui/ControllerView.cpp @@ -53,6 +53,7 @@ ControllerView::ControllerView( Controller * _model, QWidget * _parent ) : { this->setFrameStyle( QFrame::StyledPanel ); this->setFrameShadow( QFrame::Raised ); + this->setFocusPolicy(Qt::StrongFocus); auto vBoxLayout = new QVBoxLayout(this); @@ -132,6 +133,9 @@ void ControllerView::closeControls() m_show = true; } +void ControllerView::moveUp() { emit moveUp(this); } + +void ControllerView::moveDown() { emit moveDown(this); } void ControllerView::deleteController() { @@ -173,7 +177,11 @@ void ControllerView::modelChanged() void ControllerView::contextMenuEvent( QContextMenuEvent * ) { - QPointer contextMenu = new CaptionMenu( model()->displayName(), this ); + Controller* c = castModel(); + QPointer contextMenu = new CaptionMenu(c->name(), this); + contextMenu->addAction(embed::getIconPixmap("arp_up"), tr("Move &up"), this, SLOT(moveUp())); + contextMenu->addAction(embed::getIconPixmap("arp_down"), tr("Move &down"), this, SLOT(moveDown())); + contextMenu->addSeparator(); contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "&Remove this controller" ), this, SLOT(deleteController())); diff --git a/src/gui/EffectRackView.cpp b/src/gui/EffectRackView.cpp index aa790d74dfc..58cb4006380 100644 --- a/src/gui/EffectRackView.cpp +++ b/src/gui/EffectRackView.cpp @@ -24,6 +24,7 @@ */ #include +#include #include #include #include @@ -177,6 +178,19 @@ void EffectRackView::update() connect( view, SIGNAL(deletePlugin(lmms::gui::EffectView*)), this, SLOT(deletePlugin(lmms::gui::EffectView*)), Qt::QueuedConnection ); + + QAction* moveUpAction = new QAction(view); + moveUpAction->setShortcut(Qt::Key_Up | Qt::AltModifier); + moveUpAction->setShortcutContext(Qt::WidgetShortcut); + connect(moveUpAction, SIGNAL(triggered()), view, SLOT(moveUp())); + view->addAction(moveUpAction); + + QAction* moveDownAction = new QAction(view); + moveDownAction->setShortcut(Qt::Key_Down | Qt::AltModifier); + moveDownAction->setShortcutContext(Qt::WidgetShortcut); + connect(moveDownAction, SIGNAL(triggered()), view, SLOT(moveDown())); + view->addAction(moveDownAction); + view->show(); m_effectViews.append( view ); if( i < view_map.size() ) diff --git a/src/gui/EffectView.cpp b/src/gui/EffectView.cpp index cbe2e4e95ed..9460bc24137 100644 --- a/src/gui/EffectView.cpp +++ b/src/gui/EffectView.cpp @@ -53,6 +53,7 @@ EffectView::EffectView( Effect * _model, QWidget * _parent ) : m_dragging(false) { setFixedSize(EffectView::DEFAULT_WIDTH, EffectView::DEFAULT_HEIGHT); + this->setFocusPolicy(Qt::StrongFocus); // Disable effects that are of type "DummyEffect" bool isEnabled = !dynamic_cast( effect() );