From 8d9c7347ba90a6b9fce42e88501181cbee74476c Mon Sep 17 00:00:00 2001 From: fschuelke <42418283+fschuelke@users.noreply.github.com> Date: Sat, 3 Apr 2021 21:18:27 +0200 Subject: [PATCH] Added message box prompt when user tries to delete track (#5274) * Added messagebox when user tries to delete track * Code review refactorings * Update Track.h * Changed message box title to "Confirm removal" * Merge changes from master * Add option to disable warning * Default to showing warning if no config found Co-authored-by: Hyunjin Song Co-authored-by: Spekular --- include/SetupDialog.h | 2 ++ include/TrackOperationsWidget.h | 1 + src/gui/SetupDialog.cpp | 12 +++++++ src/gui/widgets/TrackOperationsWidget.cpp | 42 ++++++++++++++++++++++- 4 files changed, 56 insertions(+), 1 deletion(-) diff --git a/include/SetupDialog.h b/include/SetupDialog.h index 931708b6a..760d86fbc 100644 --- a/include/SetupDialog.h +++ b/include/SetupDialog.h @@ -77,6 +77,7 @@ private slots: void toggleSideBarOnRight(bool enabled); void toggleLetPreviewsFinish(bool enabled); void toggleSoloLegacyBehavior(bool enabled); + void toggleTrackDeletionWarning(bool enabled); void toggleMMPZ(bool enabled); void toggleDisableBackup(bool enabled); void toggleOpenLastProject(bool enabled); @@ -136,6 +137,7 @@ private: bool m_sideBarOnRight; bool m_letPreviewsFinish; bool m_soloLegacyBehavior; + bool m_trackDeletionWarning; bool m_MMPZ; bool m_disableBackup; bool m_openLastProject; diff --git a/include/TrackOperationsWidget.h b/include/TrackOperationsWidget.h index f78e0a209..0c165920e 100644 --- a/include/TrackOperationsWidget.h +++ b/include/TrackOperationsWidget.h @@ -43,6 +43,7 @@ public: protected: void mousePressEvent( QMouseEvent * me ) override; void paintEvent( QPaintEvent * pe ) override; + bool confirmRemoval(); private slots: diff --git a/src/gui/SetupDialog.cpp b/src/gui/SetupDialog.cpp index cf6b7b7e0..fd306e682 100644 --- a/src/gui/SetupDialog.cpp +++ b/src/gui/SetupDialog.cpp @@ -108,6 +108,8 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : "ui", "letpreviewsfinish").toInt()), m_soloLegacyBehavior(ConfigManager::inst()->value( "app", "sololegacybehavior", "0").toInt()), + m_trackDeletionWarning(ConfigManager::inst()->value( + "ui", "trackdeletionwarning", "1").toInt()), m_MMPZ(!ConfigManager::inst()->value( "app", "nommpz").toInt()), m_disableBackup(!ConfigManager::inst()->value( @@ -243,6 +245,8 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : m_letPreviewsFinish, SLOT(toggleLetPreviewsFinish(bool)), false); addLedCheckBox(tr("Mute automation tracks during solo"), gui_tw, counter, m_soloLegacyBehavior, SLOT(toggleSoloLegacyBehavior(bool)), false); + addLedCheckBox(tr("Show warning when deleting tracks"), gui_tw, counter, + m_trackDeletionWarning, SLOT(toggleTrackDeletionWarning(bool)), false); gui_tw->setFixedHeight(YDelta + YDelta * counter); @@ -919,6 +923,8 @@ void SetupDialog::accept() QString::number(m_letPreviewsFinish)); ConfigManager::inst()->setValue("app", "sololegacybehavior", QString::number(m_soloLegacyBehavior)); + ConfigManager::inst()->setValue("ui", "trackdeletionwarning", + QString::number(m_trackDeletionWarning)); ConfigManager::inst()->setValue("app", "nommpz", QString::number(!m_MMPZ)); ConfigManager::inst()->setValue("app", "disablebackup", @@ -1037,6 +1043,12 @@ void SetupDialog::toggleLetPreviewsFinish(bool enabled) } +void SetupDialog::toggleTrackDeletionWarning(bool enabled) +{ + m_trackDeletionWarning = enabled; +} + + void SetupDialog::toggleMMPZ(bool enabled) { m_MMPZ = enabled; diff --git a/src/gui/widgets/TrackOperationsWidget.cpp b/src/gui/widgets/TrackOperationsWidget.cpp index 8588aeb5a..7e6d636ab 100644 --- a/src/gui/widgets/TrackOperationsWidget.cpp +++ b/src/gui/widgets/TrackOperationsWidget.cpp @@ -25,9 +25,11 @@ #include "TrackOperationsWidget.h" #include +#include #include #include #include +#include #include "AutomationPattern.h" #include "AutomationTrack.h" @@ -193,6 +195,41 @@ void TrackOperationsWidget::paintEvent( QPaintEvent * pe ) } +/*! \brief Show a message box warning the user that this track is about to be closed */ +bool TrackOperationsWidget::confirmRemoval() +{ + bool needConfirm = ConfigManager::inst()->value("ui", "trackdeletionwarning", "1").toInt(); + if (!needConfirm){ return true; } + + QString messageRemoveTrack = tr("After removing a track, it can not " + "be recovered. Are you sure you want to remove track \"%1\"?") + .arg(m_trackView->getTrack()->name()); + QString messageTitleRemoveTrack = tr("Confirm removal"); + QString askAgainText = tr("Don't ask again"); + QCheckBox* askAgainCheckBox = new QCheckBox(askAgainText, nullptr); + connect(askAgainCheckBox, &QCheckBox::stateChanged, [this](int state){ + // Invert button state, if it's checked we *shouldn't* ask again + ConfigManager::inst()->setValue("ui", "trackdeletionwarning", state ? "0" : "1"); + }); + + QMessageBox mb(this); + mb.setText(messageRemoveTrack); + mb.setWindowTitle(messageTitleRemoveTrack); + mb.setIcon(QMessageBox::Warning); + mb.addButton(QMessageBox::Cancel); + mb.addButton(QMessageBox::Ok); + mb.setCheckBox(askAgainCheckBox); + mb.setDefaultButton(QMessageBox::Cancel); + + int answer = mb.exec(); + + if( answer == QMessageBox::Ok ) + { + return true; + } + return false; +} + /*! \brief Clone this track @@ -232,7 +269,10 @@ void TrackOperationsWidget::clearTrack() */ void TrackOperationsWidget::removeTrack() { - emit trackRemovalScheduled( m_trackView ); + if (confirmRemoval()) + { + emit trackRemovalScheduled(m_trackView); + } } void TrackOperationsWidget::changeTrackColor()