Option to allow auto save while playing (#3088)

* Option to allow auto save while playing
This commit is contained in:
Oskar Wallgren
2017-02-01 17:05:32 +01:00
committed by GitHub
parent 3e21e4ee13
commit c54171ba48
4 changed files with 68 additions and 39 deletions

View File

@@ -29,6 +29,7 @@
#include <QDialog>
#include <QtCore/QMap>
#include "LedCheckbox.h"
#include "lmmsconfig.h"
#include "AudioDevice.h"
#include "MidiClient.h"
@@ -84,7 +85,7 @@ private slots:
// performance settings widget
void setAutoSaveInterval( int time );
void resetAutoSaveInterval();
void resetAutoSave();
void displaySaveIntervalHelp();
// audio settings widget
@@ -116,6 +117,7 @@ private slots:
void toggleSmoothScroll( bool _enabled );
void toggleAutoSave( bool _enabled );
void toggleRunningAutoSave( bool _enabled );
void toggleOneInstrumentTrackWindow( bool _enabled );
void toggleCompactTrackButtons( bool _enabled );
void toggleSyncVSTPlugins( bool _enabled );
@@ -174,10 +176,13 @@ private:
QString m_backgroundArtwork;
bool m_smoothScroll;
bool m_enableAutoSave;
bool m_disableAutoSave;
bool m_disableRunningAutoSave;
int m_saveInterval;
QSlider * m_saveIntervalSlider;
QLabel * m_saveIntervalLbl;
LedCheckBox * m_autoSave;
LedCheckBox * m_runningAutoSave;
bool m_oneInstrumentTrackWindow;
bool m_compactTrackButtons;

View File

@@ -725,7 +725,7 @@ int main( int argc, char * * argv )
bool recoveryFilePresent = QFileInfo( recoveryFile ).exists() &&
QFileInfo( recoveryFile ).isFile();
bool autoSaveEnabled =
ConfigManager::inst()->value( "ui", "enableautosave" ).toInt();
!ConfigManager::inst()->value( "ui", "disableautosave" ).toInt();
if( recoveryFilePresent )
{
QMessageBox mb;

View File

@@ -199,7 +199,7 @@ MainWindow::MainWindow() :
m_updateTimer.start( 1000 / 20, this ); // 20 fps
if( ConfigManager::inst()->value( "ui", "enableautosave" ).toInt() )
if( !ConfigManager::inst()->value( "ui", "disableautosave" ).toInt() )
{
// connect auto save
connect(&m_autoSaveTimer, SIGNAL(timeout()), this, SLOT(autoSave()));
@@ -1373,7 +1373,7 @@ void MainWindow::closeEvent( QCloseEvent * _ce )
if( mayChangeProject(true) )
{
// delete recovery file
if( ConfigManager::inst()->value( "ui", "enableautosave" ).toInt()
if( !ConfigManager::inst()->value( "ui", "disableautosave" ).toInt()
&& getSession() != Limited )
{
sessionCleanup();
@@ -1529,9 +1529,10 @@ void MainWindow::browseHelp()
void MainWindow::autoSave()
{
if( !( Engine::getSong()->isPlaying() ||
Engine::getSong()->isExporting() ||
QApplication::mouseButtons() ) )
if( ( !ConfigManager::inst()->value( "ui", "disablerunningautosave" ).toInt() ||
! Engine::getSong()->isPlaying() ) &&
!( Engine::getSong()->isExporting() ||
QApplication::mouseButtons() ) )
{
Engine::getSong()->saveProjectFile(ConfigManager::inst()->recoveryFile());
autoSaveTimerReset(); // Reset timer
@@ -1551,7 +1552,7 @@ void MainWindow::autoSave()
// from the timer where we need to do extra tests.
void MainWindow::runAutoSave()
{
if( ConfigManager::inst()->value( "ui", "enableautosave" ).toInt() &&
if( !ConfigManager::inst()->value( "ui", "disableautosave" ).toInt() &&
getSession() != Limited )
{
autoSave();

View File

@@ -45,7 +45,7 @@
#include "Engine.h"
#include "debug.h"
#include "ToolTip.h"
#include "LedCheckbox.h"
#include "LcdSpinBox.h"
#include "FileDialog.h"
@@ -124,7 +124,8 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) :
#endif
m_backgroundArtwork( QDir::toNativeSeparators( ConfigManager::inst()->backgroundArtwork() ) ),
m_smoothScroll( ConfigManager::inst()->value( "ui", "smoothscroll" ).toInt() ),
m_enableAutoSave( ConfigManager::inst()->value( "ui", "enableautosave" ).toInt() ),
m_disableAutoSave( !ConfigManager::inst()->value( "ui", "disableautosave" ).toInt() ),
m_disableRunningAutoSave( !ConfigManager::inst()->value( "ui", "disablerunningautosave" ).toInt() ),
m_saveInterval( ConfigManager::inst()->value( "ui", "saveinterval" ).toInt() < 1 ?
MainWindow::DEFAULT_SAVE_INTERVAL_MINUTES :
ConfigManager::inst()->value( "ui", "saveinterval" ).toInt() ),
@@ -645,7 +646,7 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) :
TabWidget * auto_save_tw = new TabWidget(
tr( "Auto save" ).toUpper(), performance );
auto_save_tw->setFixedHeight( 100 );
auto_save_tw->setFixedHeight( 110 );
m_saveIntervalSlider = new QSlider( Qt::Horizontal, auto_save_tw );
m_saveIntervalSlider->setRange( 1, 20 );
@@ -662,27 +663,37 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) :
m_saveIntervalLbl->setGeometry( 10, 40, 200, 24 );
setAutoSaveInterval( m_saveIntervalSlider->value() );
LedCheckBox * autoSave = new LedCheckBox(
tr( "Enable auto save feature" ), auto_save_tw );
autoSave->move( 10, 70 );
autoSave->setChecked( m_enableAutoSave );
connect( autoSave, SIGNAL( toggled( bool ) ),
m_autoSave = new LedCheckBox(
tr( "Enable auto-save" ), auto_save_tw );
m_autoSave->move( 10, 70 );
m_autoSave->setChecked( m_disableAutoSave );
connect( m_autoSave, SIGNAL( toggled( bool ) ),
this, SLOT( toggleAutoSave( bool ) ) );
if( ! m_enableAutoSave ){ m_saveIntervalSlider->setEnabled( false ); }
QPushButton * saveIntervalResetBtn = new QPushButton(
m_runningAutoSave = new LedCheckBox(
tr( "Allow auto-save while playing" ), auto_save_tw );
m_runningAutoSave->move( 20, 90 );
m_runningAutoSave->setChecked( m_disableRunningAutoSave );
connect( m_runningAutoSave, SIGNAL( toggled( bool ) ),
this, SLOT( toggleRunningAutoSave( bool ) ) );
QPushButton * autoSaveResetBtn = new QPushButton(
embed::getIconPixmap( "reload" ), "", auto_save_tw );
saveIntervalResetBtn->setGeometry( 290, 50, 28, 28 );
connect( saveIntervalResetBtn, SIGNAL( clicked() ), this,
SLOT( resetAutoSaveInterval() ) );
ToolTip::add( bufsize_reset_btn, tr( "Reset to default-value" ) );
autoSaveResetBtn->setGeometry( 290, 70, 28, 28 );
connect( autoSaveResetBtn, SIGNAL( clicked() ), this,
SLOT( resetAutoSave() ) );
ToolTip::add( autoSaveResetBtn, tr( "Reset to default-value" ) );
QPushButton * saventervalBtn = new QPushButton(
QPushButton * saveIntervalBtn = new QPushButton(
embed::getIconPixmap( "help" ), "", auto_save_tw );
saventervalBtn->setGeometry( 320, 50, 28, 28 );
connect( saventervalBtn, SIGNAL( clicked() ), this,
saveIntervalBtn->setGeometry( 320, 70, 28, 28 );
connect( saveIntervalBtn, SIGNAL( clicked() ), this,
SLOT( displaySaveIntervalHelp() ) );
m_saveIntervalSlider->setEnabled( m_disableAutoSave );
m_runningAutoSave->setVisible( m_disableAutoSave );
perf_layout->addWidget( auto_save_tw );
perf_layout->addSpacing( 10 );
@@ -825,7 +836,6 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) :
QWidget * midi = new QWidget( ws );
QVBoxLayout * midi_layout = new QVBoxLayout( midi );
midi_layout->setSpacing( 0 );
@@ -1017,10 +1027,12 @@ void SetupDialog::accept()
QString::number( m_hqAudioDev ) );
ConfigManager::inst()->setValue( "ui", "smoothscroll",
QString::number( m_smoothScroll ) );
ConfigManager::inst()->setValue( "ui", "enableautosave",
QString::number( m_enableAutoSave ) );
ConfigManager::inst()->setValue( "ui", "disableautosave",
QString::number( !m_disableAutoSave ) );
ConfigManager::inst()->setValue( "ui", "saveinterval",
QString::number( m_saveInterval ) );
ConfigManager::inst()->setValue( "ui", "disablerunningautosave",
QString::number( !m_disableRunningAutoSave ) );
ConfigManager::inst()->setValue( "ui", "oneinstrumenttrackwindow",
QString::number( m_oneInstrumentTrackWindow ) );
ConfigManager::inst()->setValue( "ui", "compacttrackbuttons",
@@ -1200,15 +1212,25 @@ void SetupDialog::toggleSmoothScroll( bool _enabled )
void SetupDialog::toggleAutoSave( bool _enabled )
{
m_enableAutoSave = _enabled;
m_disableAutoSave = _enabled;
m_saveIntervalSlider->setEnabled( _enabled );
m_runningAutoSave->setVisible( _enabled );
setAutoSaveInterval( m_saveIntervalSlider->value() );
}
void SetupDialog::toggleRunningAutoSave( bool _enabled )
{
m_disableRunningAutoSave = _enabled;
}
void SetupDialog::toggleCompactTrackButtons( bool _enabled )
@@ -1489,20 +1511,19 @@ void SetupDialog::setAutoSaveInterval( int value )
m_saveInterval = value;
m_saveIntervalSlider->setValue( m_saveInterval );
QString minutes = m_saveInterval > 1 ? tr( "minutes" ) : tr( "minute" );
m_saveIntervalLbl->setText( tr( "Auto save interval: %1 %2" ).arg(
QString::number( m_saveInterval ), minutes ) );
minutes = QString( "%1 %2" ).arg( QString::number( m_saveInterval ), minutes );
minutes = m_disableAutoSave ? minutes : tr( "Disabled" );
m_saveIntervalLbl->setText( tr( "Auto-save interval: %1" ).arg( minutes ) );
}
void SetupDialog::resetAutoSaveInterval()
void SetupDialog::resetAutoSave()
{
if( m_enableAutoSave )
{
setAutoSaveInterval( MainWindow::DEFAULT_SAVE_INTERVAL_MINUTES );
}
setAutoSaveInterval( MainWindow::DEFAULT_SAVE_INTERVAL_MINUTES );
m_autoSave->setChecked( true );
m_runningAutoSave->setChecked( true );
}
@@ -1512,7 +1533,9 @@ void SetupDialog::displaySaveIntervalHelp()
{
QWhatsThis::showText( QCursor::pos(),
tr( "Set the time between automatic backup to %1.\n"
"Remember to also save your project manually." ).arg(
"Remember to also save your project manually. "
"You can also choose to disable saving while playing, "
"something some older systems find difficult." ).arg(
ConfigManager::inst()->recoveryFile() ) );
}