Add menu option and hotkeys to move controllers/effects (#7139)
* added controller rack modules * remove this-> from setFocusPolicy() and obsolete comment Co-authored-by: saker <sakertooth@gmail.com> * Use std::swap Co-authored-by: saker <sakertooth@gmail.com> * some more cleanup Co-authored-by: saker <sakertooth@gmail.com> * Replace slots with function pointers Co-authored-by: saker <sakertooth@gmail.com> * Apply fixes --------- Co-authored-by: ejaaskel <esa.jaaskela@suomi24.fi> Co-authored-by: saker <sakertooth@gmail.com>
This commit is contained in:
@@ -65,9 +65,11 @@ public:
|
||||
|
||||
|
||||
public slots:
|
||||
void deleteController( lmms::gui::ControllerView * _view );
|
||||
void onControllerAdded( lmms::Controller * );
|
||||
void onControllerRemoved( lmms::Controller * );
|
||||
void deleteController(ControllerView* view);
|
||||
void moveUp(ControllerView* view);
|
||||
void moveDown(ControllerView* view);
|
||||
void addController(Controller* controller);
|
||||
void removeController(Controller* controller);
|
||||
|
||||
protected:
|
||||
void closeEvent( QCloseEvent * _ce ) override;
|
||||
|
||||
@@ -63,12 +63,16 @@ public:
|
||||
|
||||
public slots:
|
||||
void editControls();
|
||||
void deleteController();
|
||||
void removeController();
|
||||
void closeControls();
|
||||
void renameController();
|
||||
void moveUp();
|
||||
void moveDown();
|
||||
|
||||
signals:
|
||||
void deleteController( lmms::gui::ControllerView * _view );
|
||||
void movedUp(ControllerView* view);
|
||||
void movedDown(ControllerView* view);
|
||||
void removedController(ControllerView* view);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
@@ -53,10 +53,9 @@ public:
|
||||
|
||||
public slots:
|
||||
void clearViews();
|
||||
void moveUp( lmms::gui::EffectView* view );
|
||||
void moveDown( lmms::gui::EffectView* view );
|
||||
void deletePlugin( lmms::gui::EffectView* view );
|
||||
|
||||
void moveUp(EffectView* view);
|
||||
void moveDown(EffectView* view);
|
||||
void deletePlugin(EffectView* view);
|
||||
|
||||
private slots:
|
||||
virtual void update();
|
||||
|
||||
@@ -77,10 +77,9 @@ public slots:
|
||||
|
||||
|
||||
signals:
|
||||
void moveUp( lmms::gui::EffectView * _plugin );
|
||||
void moveDown( lmms::gui::EffectView * _plugin );
|
||||
void deletePlugin( lmms::gui::EffectView * _plugin );
|
||||
|
||||
void movedUp(EffectView* view);
|
||||
void movedDown(EffectView* view);
|
||||
void deletedPlugin(EffectView* view);
|
||||
|
||||
protected:
|
||||
void contextMenuEvent( QContextMenuEvent * _me ) override;
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
*/
|
||||
|
||||
#include <QApplication>
|
||||
#include <QAction>
|
||||
#include <QPushButton>
|
||||
#include <QScrollArea>
|
||||
#include <QMessageBox>
|
||||
@@ -68,8 +69,8 @@ ControllerRackView::ControllerRackView() :
|
||||
this, SLOT(addController()));
|
||||
|
||||
Song * song = Engine::getSong();
|
||||
connect( song, SIGNAL(controllerAdded(lmms::Controller*)), SLOT(onControllerAdded(lmms::Controller*)));
|
||||
connect( song, SIGNAL(controllerRemoved(lmms::Controller*)), SLOT(onControllerRemoved(lmms::Controller*)));
|
||||
connect(song, &Song::controllerAdded, this, qOverload<Controller*>(&ControllerRackView::addController));
|
||||
connect(song, &Song::controllerRemoved, this, &ControllerRackView::removeController);
|
||||
|
||||
auto layout = new QVBoxLayout();
|
||||
layout->addWidget( m_scrollArea );
|
||||
@@ -132,17 +133,51 @@ void ControllerRackView::deleteController( ControllerView * _view )
|
||||
song->removeController( c );
|
||||
}
|
||||
|
||||
void ControllerRackView::moveUp(ControllerView* view)
|
||||
{
|
||||
if (view == m_controllerViews.first()) { return; }
|
||||
|
||||
const auto storedView = std::find(m_controllerViews.begin(), m_controllerViews.end(), view);
|
||||
assert(storedView != m_controllerViews.end());
|
||||
|
||||
const auto index = std::distance(m_controllerViews.begin(), storedView);
|
||||
|
||||
void ControllerRackView::onControllerAdded( Controller * controller )
|
||||
std::swap(m_controllerViews[index - 1], m_controllerViews[index]);
|
||||
m_scrollAreaLayout->removeWidget(view);
|
||||
m_scrollAreaLayout->insertWidget(index - 1, view);
|
||||
}
|
||||
|
||||
void ControllerRackView::moveDown(ControllerView* view)
|
||||
{
|
||||
if (view == m_controllerViews.last()) { return; }
|
||||
|
||||
const auto storedView = std::find(m_controllerViews.begin(), m_controllerViews.end(), view);
|
||||
assert(storedView != m_controllerViews.end());
|
||||
moveUp(*std::next(storedView));
|
||||
}
|
||||
|
||||
void ControllerRackView::addController(Controller* controller)
|
||||
{
|
||||
QWidget * scrollAreaWidget = m_scrollArea->widget();
|
||||
|
||||
auto controllerView = new ControllerView(controller, scrollAreaWidget);
|
||||
|
||||
connect( controllerView, SIGNAL(deleteController(lmms::gui::ControllerView*)),
|
||||
this, SLOT(deleteController(lmms::gui::ControllerView*)), Qt::QueuedConnection );
|
||||
connect(controllerView, &ControllerView::movedUp, this, &ControllerRackView::moveUp);
|
||||
connect(controllerView, &ControllerView::movedDown, this, &ControllerRackView::moveDown);
|
||||
connect(controllerView, &ControllerView::removedController, this, &ControllerRackView::deleteController, Qt::QueuedConnection);
|
||||
|
||||
auto moveUpAction = new QAction(controllerView);
|
||||
moveUpAction->setShortcut(Qt::Key_Up | Qt::AltModifier);
|
||||
moveUpAction->setShortcutContext(Qt::WidgetShortcut);
|
||||
connect(moveUpAction, &QAction::triggered, controllerView, &ControllerView::moveUp);
|
||||
controllerView->addAction(moveUpAction);
|
||||
|
||||
auto moveDownAction = new QAction(controllerView);
|
||||
moveDownAction->setShortcut(Qt::Key_Down | Qt::AltModifier);
|
||||
moveDownAction->setShortcutContext(Qt::WidgetShortcut);
|
||||
connect(moveDownAction, &QAction::triggered, controllerView, &ControllerView::moveDown);
|
||||
controllerView->addAction(moveDownAction);
|
||||
|
||||
|
||||
m_controllerViews.append( controllerView );
|
||||
m_scrollAreaLayout->insertWidget( m_nextIndex, controllerView );
|
||||
@@ -153,7 +188,7 @@ void ControllerRackView::onControllerAdded( Controller * controller )
|
||||
|
||||
|
||||
|
||||
void ControllerRackView::onControllerRemoved( Controller * removedController )
|
||||
void ControllerRackView::removeController(Controller* removedController)
|
||||
{
|
||||
ControllerView * viewOfRemovedController = 0;
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@ ControllerView::ControllerView( Controller * _model, QWidget * _parent ) :
|
||||
{
|
||||
this->setFrameStyle( QFrame::StyledPanel );
|
||||
this->setFrameShadow( QFrame::Raised );
|
||||
setFocusPolicy(Qt::StrongFocus);
|
||||
|
||||
auto vBoxLayout = new QVBoxLayout(this);
|
||||
|
||||
@@ -132,11 +133,11 @@ void ControllerView::closeControls()
|
||||
m_show = true;
|
||||
}
|
||||
|
||||
void ControllerView::moveUp() { emit movedUp(this); }
|
||||
|
||||
void ControllerView::deleteController()
|
||||
{
|
||||
emit( deleteController( this ) );
|
||||
}
|
||||
void ControllerView::moveDown() { emit movedDown(this); }
|
||||
|
||||
void ControllerView::removeController() { emit removedController(this); }
|
||||
|
||||
void ControllerView::renameController()
|
||||
{
|
||||
@@ -173,10 +174,13 @@ void ControllerView::modelChanged()
|
||||
|
||||
void ControllerView::contextMenuEvent( QContextMenuEvent * )
|
||||
{
|
||||
QPointer<CaptionMenu> contextMenu = new CaptionMenu( model()->displayName(), this );
|
||||
contextMenu->addAction( embed::getIconPixmap( "cancel" ),
|
||||
tr( "&Remove this controller" ),
|
||||
this, SLOT(deleteController()));
|
||||
Controller* c = castModel<Controller>();
|
||||
QPointer<CaptionMenu> contextMenu = new CaptionMenu(c->name(), this);
|
||||
contextMenu->addAction(embed::getIconPixmap("arp_up"), tr("Move &up"), this, &ControllerView::moveUp);
|
||||
contextMenu->addAction(embed::getIconPixmap("arp_down"), tr("Move &down"), this, &ControllerView::moveDown);
|
||||
contextMenu->addSeparator();
|
||||
contextMenu->addAction(
|
||||
embed::getIconPixmap("cancel"), tr("&Remove this controller"), this, &ControllerView::removeController);
|
||||
contextMenu->addAction( tr("Re&name this controller"), this, SLOT(renameController()));
|
||||
contextMenu->addSeparator();
|
||||
contextMenu->exec( QCursor::pos() );
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
*/
|
||||
|
||||
#include <QApplication>
|
||||
#include <QAction>
|
||||
#include <QPushButton>
|
||||
#include <QScrollArea>
|
||||
#include <QVBoxLayout>
|
||||
@@ -170,13 +171,22 @@ void EffectRackView::update()
|
||||
if( i >= m_effectViews.size() )
|
||||
{
|
||||
auto view = new EffectView(effect, w);
|
||||
connect( view, SIGNAL(moveUp(lmms::gui::EffectView*)),
|
||||
this, SLOT(moveUp(lmms::gui::EffectView*)));
|
||||
connect( view, SIGNAL(moveDown(lmms::gui::EffectView*)),
|
||||
this, SLOT(moveDown(lmms::gui::EffectView*)));
|
||||
connect( view, SIGNAL(deletePlugin(lmms::gui::EffectView*)),
|
||||
this, SLOT(deletePlugin(lmms::gui::EffectView*)),
|
||||
Qt::QueuedConnection );
|
||||
connect(view, &EffectView::movedUp, this, &EffectRackView::moveUp);
|
||||
connect(view, &EffectView::movedDown, this, &EffectRackView::moveDown);
|
||||
connect(view, &EffectView::deletedPlugin, this, &EffectRackView::deletePlugin, Qt::QueuedConnection);
|
||||
|
||||
QAction* moveUpAction = new QAction(view);
|
||||
moveUpAction->setShortcut(Qt::Key_Up | Qt::AltModifier);
|
||||
moveUpAction->setShortcutContext(Qt::WidgetShortcut);
|
||||
connect(moveUpAction, &QAction::triggered, view, &EffectView::moveUp);
|
||||
view->addAction(moveUpAction);
|
||||
|
||||
QAction* moveDownAction = new QAction(view);
|
||||
moveDownAction->setShortcut(Qt::Key_Down | Qt::AltModifier);
|
||||
moveDownAction->setShortcutContext(Qt::WidgetShortcut);
|
||||
connect(moveDownAction, &QAction::triggered, view, &EffectView::moveDown);
|
||||
view->addAction(moveDownAction);
|
||||
|
||||
view->show();
|
||||
m_effectViews.append( view );
|
||||
if( i < view_map.size() )
|
||||
|
||||
@@ -53,6 +53,7 @@ EffectView::EffectView( Effect * _model, QWidget * _parent ) :
|
||||
m_dragging(false)
|
||||
{
|
||||
setFixedSize(EffectView::DEFAULT_WIDTH, EffectView::DEFAULT_HEIGHT);
|
||||
setFocusPolicy(Qt::StrongFocus);
|
||||
|
||||
// Disable effects that are of type "DummyEffect"
|
||||
bool isEnabled = !dynamic_cast<DummyEffect *>( effect() );
|
||||
@@ -162,7 +163,7 @@ void EffectView::editControls()
|
||||
|
||||
void EffectView::moveUp()
|
||||
{
|
||||
emit moveUp( this );
|
||||
emit movedUp(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -170,14 +171,14 @@ void EffectView::moveUp()
|
||||
|
||||
void EffectView::moveDown()
|
||||
{
|
||||
emit moveDown( this );
|
||||
emit movedDown(this);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void EffectView::deletePlugin()
|
||||
{
|
||||
emit deletePlugin( this );
|
||||
emit deletedPlugin(this);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user