Added global playback support. Press space to play/pause from any window in LMMS.

git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@1993 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
Andrew Kelley
2009-02-02 07:55:52 +00:00
parent 59d2e07da0
commit 3341f3d711
9 changed files with 210 additions and 30 deletions

View File

@@ -149,6 +149,8 @@ void bbEditor::removeBBView( int _bb )
void bbEditor::play( void )
{
engine::getMainWindow()->setPlaybackMode( PPM_BB );
if( engine::getSong()->isPlaying() )
{
if( engine::getSong()->playMode() != song::Mode_PlayBB )

View File

@@ -37,6 +37,8 @@
#include <QtGui/QMessageBox>
#include <QtGui/QSplitter>
#include <QtGui/QCheckBox>
#include <QtGui/QRadioButton>
#include <QShortcut>
#include "lmmsversion.h"
@@ -632,7 +634,7 @@ void mainWindow::finalize( void )
m_toolBarLayout->addWidget( vc_w, 0, Qt::AlignLeft );
m_toolBarLayout->insertSpacing( -1, 10 );
/*
// global playback and record controls
// main box
QWidget * gpbr_w = new QWidget( m_toolBar );
@@ -647,23 +649,24 @@ void mainWindow::finalize( void )
QWidget * btns = new QWidget( gpb_w );
QHBoxLayout * btns_layout = new QHBoxLayout( btns );
btns_layout->setMargin(0);
btns_layout->setSpacing(0);
toolButton * m_playButton =
new toolButton(
embed::getIconPixmap( "play" ),
tr( "Play/pause the current window (Space)" ),
engine::getSong(),
SLOT( play() ),
tr( "Play/pause the project (Space)" ),
this,
SLOT(play()),
btns );
toolButton * m_recordButton =
new toolButton(
embed::getIconPixmap( "record" ),
tr( "Record from the checked items to the right" ),
engine::getSong(),
SLOT( record() ),
this,
SLOT(record()),
btns );
toolButton * m_recordAccompanyButton =
@@ -671,8 +674,8 @@ void mainWindow::finalize( void )
embed::getIconPixmap( "record_accompany" ),
tr( "Record from the checked items to "
"the right while playing" ),
engine::getSong(),
SLOT( playAndRecord() ),
this,
SLOT(playAndRecord()),
btns );
toolButton * m_stopButton =
@@ -683,8 +686,6 @@ void mainWindow::finalize( void )
SLOT( stop() ),
btns );
btns_layout->setMargin(0);
btns_layout->setSpacing(0);
btns_layout->addWidget( m_playButton );
btns_layout->addWidget( m_recordButton );
btns_layout->addWidget( m_recordAccompanyButton );
@@ -692,13 +693,39 @@ void mainWindow::finalize( void )
gpbw_layout->addWidget( btns );
// choose between song or BB to playback
QWidget * pbopt_w = new QWidget( gpb_w );
QHBoxLayout * pbopt_layout = new QHBoxLayout( pbopt_w );
pbopt_layout->setSpacing(0);
pbopt_layout->setMargin(0);
m_radpSong = new QRadioButton( tr( "Song" ), pbopt_w );
m_radpSong->setToolTip( tr("Playback: song mode") );
connect(m_radpSong, SIGNAL(clicked(bool)), SLOT(playbackSongClicked(bool)));
m_radpBB = new QRadioButton( tr( "B+B" ), pbopt_w );
m_radpBB->setToolTip( tr("Playback: beat+bassline mode") );
connect(m_radpBB, SIGNAL(clicked(bool)), SLOT(playbackBBClicked(bool)));
m_radpPianoRoll = new QRadioButton( tr( "Piano Roll" ), pbopt_w );
m_radpPianoRoll->setToolTip( tr("Playback: piano roll mode") );
connect(m_radpPianoRoll, SIGNAL(clicked(bool)), SLOT(playbackPianoRollClicked(bool)));
pbopt_layout->setMargin(0);
pbopt_layout->setSpacing(0);
pbopt_layout->addWidget( m_radpSong );
pbopt_layout->addWidget( m_radpBB );
pbopt_layout->addWidget( m_radpPianoRoll );
gpbw_layout->addWidget( pbopt_w );
gpbw_layout->addStretch();
QWidget * gr_w = new QWidget( gpbr_w );
QVBoxLayout * grw_layout = new QVBoxLayout( gr_w );
grw_layout->setMargin( 0 );
grw_layout->setSpacing( 0 );
m_chkrAudio = new QCheckBox( tr( "Audio-device" ), gr_w );
m_chkrAutomation = new QCheckBox( tr( "Automation" ), gr_w );
m_chkrMidi = new QCheckBox( tr( "MIDI" ), gr_w );
@@ -717,8 +744,16 @@ void mainWindow::finalize( void )
gpbrw_layout->addStretch();
m_toolBarLayout->addWidget( gpbr_w );*/
m_toolBarLayout->addWidget( gpbr_w );
// initial toolbar settings
m_chkrAutomation->click();
m_chkrMidi->click();
m_radpSong->click();
// global keyboard shortcuts
QShortcut * space = new QShortcut(QKeySequence(Qt::Key_Space), this);
connect(space, SIGNAL(activated()), SLOT(spacePressed()));
// setup-dialog opened before?
if( !configManager::inst()->value( "app", "configured" ).toInt() )
@@ -942,8 +977,22 @@ void mainWindow::updateRecentlyOpenedProjectsMenu( void )
}
}
void mainWindow::playbackSongClicked( bool checked )
{
m_playbackMode = PPM_Song;
}
void mainWindow::playbackBBClicked( bool checked )
{
m_playbackMode = PPM_BB;
}
void mainWindow::playbackPianoRollClicked( bool checked )
{
m_playbackMode = PPM_PianoRoll;
}
void mainWindow::openRecentlyOpenedProject( QAction * _action )
{
@@ -1163,6 +1212,78 @@ void mainWindow::keyPressEvent( QKeyEvent * _ke )
}
}
void mainWindow::spacePressed( void )
{
play();
}
void mainWindow::play( void )
{
if( m_playbackMode == PPM_BB )
{
engine::getBBEditor()->play();
}
else if( m_playbackMode == PPM_PianoRoll )
{
engine::getPianoRoll()->play();
}
else
{
engine::getSongEditor()->play();
}
}
void mainWindow::record( void )
{
if( m_playbackMode == PPM_BB )
{
printf("beat+bassline does not support recording\n");
}
else if( m_playbackMode == PPM_PianoRoll )
{
engine::getPianoRoll()->record();
}
else
{
engine::getSongEditor()->record();
}
}
void mainWindow::playAndRecord( void )
{
if( m_playbackMode == PPM_BB )
{
printf("bb editor does not support record accompany\n");
}
else if( m_playbackMode == PPM_PianoRoll )
{
engine::getPianoRoll()->recordAccompany();
}
else
{
engine::getSongEditor()->recordAccompany();
}
}
void mainWindow::setPlaybackMode( ProjectPlaybackMode _playbackMode )
{
if( _playbackMode == PPM_BB )
{
m_radpBB->click();
}
else if( _playbackMode == PPM_Song )
{
m_radpSong->click();
}
else
{
m_radpPianoRoll->click();
}
}

View File

@@ -2956,6 +2956,8 @@ int pianoRoll::getKey( int _y ) const
void pianoRoll::play( void )
{
engine::getMainWindow()->setPlaybackMode( PPM_PianoRoll );
if( validPattern() == false )
{
return;
@@ -2993,6 +2995,8 @@ void pianoRoll::play( void )
void pianoRoll::record( void )
{
engine::getMainWindow()->setPlaybackMode( PPM_PianoRoll );
if( engine::getSong()->isPlaying() )
{
stop();
@@ -3012,6 +3016,8 @@ void pianoRoll::record( void )
void pianoRoll::recordAccompany( void )
{
engine::getMainWindow()->setPlaybackMode( PPM_PianoRoll );
if( engine::getSong()->isPlaying() )
{
stop();

View File

@@ -277,6 +277,8 @@ void songEditor::scrolled( int _new_pos )
void songEditor::play( void )
{
engine::getMainWindow()->setPlaybackMode( PPM_Song );
m_s->play();
if( m_s->playMode() == song::Mode_PlaySong )
{
@@ -293,6 +295,8 @@ void songEditor::play( void )
void songEditor::record( void )
{
engine::getMainWindow()->setPlaybackMode( PPM_Song );
m_s->record();
}
@@ -301,6 +305,8 @@ void songEditor::record( void )
void songEditor::recordAccompany( void )
{
engine::getMainWindow()->setPlaybackMode( PPM_Song );
m_s->playAndRecord();
}