Files
lmms/src/gui/widgets/EffectRackView.cpp
T
Tobias Doerffel 1d5cb23385 File and class renames part 1
Most files and most of the core classes and their methods have been
renamed to match new coding style conventions:

391 files changed, 25400 insertions(+), 25598 deletions(-)

Furthermore splitted some files where model and view classes were
declared or implemented together in the same file.

Should be tested thoroughly as I might have missed renaming some virtual
methods or SIGNAL/SLOT parameters.
(cherry picked from commit 8c9a9dd14c)
2009-08-25 01:30:41 +02:00

256 lines
5.5 KiB
C++

/*
* EffectRackView.cpp - view for effectChain model
*
* Copyright (c) 2006-2007 Danny McRae <khjklujn@netscape.net>
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program (see COPYING); if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
*/
#include <QtGui/QApplication>
#include <QtGui/QLayout>
#include <QtGui/QPushButton>
#include <QtGui/QScrollArea>
#include <QtGui/QVBoxLayout>
#include "EffectRackView.h"
#include "EffectSelectDialog.h"
#include "EffectView.h"
#include "group_box.h"
EffectRackView::EffectRackView( EffectChain * _model, QWidget * _parent ) :
QWidget( _parent ),
ModelView( NULL, this )
{
setFixedSize( 250, 250 );
m_mainLayout = new QVBoxLayout( this );
m_mainLayout->setSpacing( 0 );
m_mainLayout->setMargin( 5 );
m_effectsGroupBox = new groupBox( tr( "EFFECTS CHAIN" ) );
m_mainLayout->addWidget( m_effectsGroupBox );
m_scrollArea = new QScrollArea( m_effectsGroupBox );
m_scrollArea->setFixedSize( 230, 184 );
m_scrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn );
m_scrollArea->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
m_scrollArea->setPalette( QApplication::palette( m_scrollArea ) );
m_scrollArea->setWidget( new QWidget );
m_scrollArea->move( 6, 22 );
QPushButton * addButton = new QPushButton( m_effectsGroupBox );
addButton->setText( tr( "Add effect" ) );
addButton->move( 8, 210 );
connect( addButton, SIGNAL( clicked() ), this, SLOT( addEffect() ) );
m_lastY = 0;
setModel( _model );
}
EffectRackView::~EffectRackView()
{
clearViews();
}
void EffectRackView::clearViews()
{
for( QVector<EffectView *>::Iterator it = m_effectViews.begin();
it != m_effectViews.end(); ++it )
{
delete *it;
}
m_effectViews.clear();
}
void EffectRackView::moveUp( EffectView * _view )
{
fxChain()->moveUp( _view->effect() );
if( _view != m_effectViews.first() )
{
int i = 0;
for( QVector<EffectView *>::Iterator it = m_effectViews.begin();
it != m_effectViews.end(); it++, i++ )
{
if( *it == _view )
{
break;
}
}
EffectView * temp = m_effectViews[ i - 1 ];
m_effectViews[i - 1] = _view;
m_effectViews[i] = temp;
update();
}
}
void EffectRackView::moveDown( EffectView * _view )
{
if( _view != m_effectViews.last() )
{
// moving next effect up is the same
moveUp( *( qFind( m_effectViews.begin(), m_effectViews.end(), _view ) + 1 ) );
}
}
void EffectRackView::deletePlugin( EffectView * _view )
{
Effect * e = _view->effect();
m_effectViews.erase( qFind( m_effectViews.begin(), m_effectViews.end(),
_view ) );
delete _view;
fxChain()->removeEffect( e );
e->deleteLater();
update();
}
void EffectRackView::update()
{
QWidget * w = m_scrollArea->widget();
QVector<bool> view_map( qMax<int>( fxChain()->m_effects.size(),
m_effectViews.size() ), false );
for( QVector<Effect *>::Iterator it = fxChain()->m_effects.begin();
it != fxChain()->m_effects.end(); ++it )
{
int i = 0;
for( QVector<EffectView *>::Iterator vit = m_effectViews.begin();
vit != m_effectViews.end(); ++vit, ++i )
{
if( ( *vit )->model() == *it )
{
view_map[i] = true;
break;
}
}
if( i >= m_effectViews.size() )
{
EffectView * view = new EffectView( *it, w );
connect( view, SIGNAL( moveUp( EffectView * ) ),
this, SLOT( moveUp( EffectView * ) ) );
connect( view, SIGNAL( moveDown( EffectView * ) ),
this, SLOT( moveDown( EffectView * ) ) );
connect( view, SIGNAL( deletePlugin( EffectView * ) ),
this, SLOT( deletePlugin( EffectView * ) ),
Qt::QueuedConnection );
view->show();
m_effectViews.append( view );
view_map[i] = true;
}
}
int i = m_lastY = 0;
for( QVector<EffectView *>::Iterator it = m_effectViews.begin();
it != m_effectViews.end(); )
{
if( i < view_map.size() && i < m_effectViews.size() &&
view_map[i] == false )
{
delete m_effectViews[i];
m_effectViews.erase( it );
}
else
{
( *it )->move( 0, m_lastY );
m_lastY += ( *it )->height();
++it;
++i;
}
}
w->setFixedSize( 210, m_lastY );
QWidget::update();
}
void EffectRackView::addEffect()
{
EffectSelectDialog esd( this );
esd.exec();
if( esd.result() == QDialog::Rejected )
{
return;
}
Effect * fx = esd.instantiateSelectedPlugin( fxChain() );
fxChain()->m_enabledModel.setValue( true );
fxChain()->appendEffect( fx );
update();
// Find the effectView, and show the controls
for( QVector<EffectView *>::Iterator vit = m_effectViews.begin();
vit != m_effectViews.end(); ++vit )
{
if( ( *vit )->effect() == fx )
{
( *vit )->editControls();
break;
}
}
}
void EffectRackView::modelChanged()
{
clearViews();
m_effectsGroupBox->setModel( &fxChain()->m_enabledModel );
connect( fxChain(), SIGNAL( aboutToClear() ),
this, SLOT( clearViews() ) );
update();
}
#include "moc_EffectRackView.cxx"