Skip to content

Commit

Permalink
Add ability to move Controllers in ControllerRack
Browse files Browse the repository at this point in the history
This commit adds UI changes, signals, and handlers required for moving
controllers up and down in a controller rack. The feature was requested
in the issue LMMS#5773
  • Loading branch information
ejaaskel committed Oct 13, 2021
1 parent 3d7ef9f commit ffddc6a
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 0 deletions.
2 changes: 2 additions & 0 deletions include/ControllerRackView.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ class ControllerRackView : public QWidget, public SerializingObject

public slots:
void deleteController( ControllerView * _view );
void moveUp( ControllerView * _view );
void moveDown( ControllerView * _view );
void onControllerAdded( Controller * );
void onControllerRemoved( Controller * );

Expand Down
4 changes: 4 additions & 0 deletions include/ControllerView.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,15 @@ class ControllerView : public QFrame, public ModelView

public slots:
void editControls();
void moveUp();
void moveDown();
void deleteController();
void closeControls();
void renameController();

signals:
void moveUp( ControllerView * _plugin );
void moveDown( ControllerView * _plugin );
void deleteController( ControllerView * _view );


Expand Down
36 changes: 36 additions & 0 deletions src/gui/widgets/ControllerRackView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,38 @@ void ControllerRackView::deleteController( ControllerView * _view )
}


void ControllerRackView::moveUp( ControllerView* view )
{
if( view != m_controllerViews.first() )
{
int i = 0;
for( QVector<ControllerView *>::Iterator 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 effect up is the same
moveUp( *( std::find( m_controllerViews.begin(), m_controllerViews.end(), view ) + 1 ) );
}
}


void ControllerRackView::onControllerAdded( Controller * controller )
Expand All @@ -147,6 +179,10 @@ void ControllerRackView::onControllerAdded( Controller * controller )

ControllerView * controllerView = new ControllerView( controller, scrollAreaWidget );

connect( controllerView, SIGNAL( moveUp( ControllerView * ) ),
this, SLOT( moveUp( ControllerView * ) ), Qt::QueuedConnection );
connect( controllerView, SIGNAL( moveDown( ControllerView * ) ),
this, SLOT( moveDown( ControllerView * ) ), Qt::QueuedConnection );
connect( controllerView, SIGNAL( deleteController( ControllerView * ) ),
this, SLOT( deleteController( ControllerView * ) ), Qt::QueuedConnection );

Expand Down
16 changes: 16 additions & 0 deletions src/gui/widgets/ControllerView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,15 @@ void ControllerView::closeControls()
m_show = true;
}

void ControllerView::moveUp()
{
emit moveUp( this );
}

void ControllerView::moveDown()
{
emit moveDown( this );
}

void ControllerView::deleteController()
{
Expand Down Expand Up @@ -174,6 +183,13 @@ void ControllerView::modelChanged()
void ControllerView::contextMenuEvent( QContextMenuEvent * )
{
QPointer<CaptionMenu> contextMenu = new CaptionMenu( model()->displayName(), 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() ) );
Expand Down

0 comments on commit ffddc6a

Please sign in to comment.