1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-10-25 15:53:52 +02:00

Do rollback of cancelled Preview for Spectrogram settings/prefs

This commit is contained in:
Paul Licameli
2017-06-25 11:13:24 -04:00
parent 48202284b2
commit 5b229847d5
2 changed files with 79 additions and 13 deletions

View File

@@ -41,16 +41,16 @@ SpectrumPrefs::SpectrumPrefs(wxWindow * parent, WaveTrack *wt)
{
if (mWt) {
SpectrogramSettings &settings = wt->GetSpectrogramSettings();
mDefaulted = (&SpectrogramSettings::defaults() == &settings);
mTempSettings = settings;
float minFreq, maxFreq;
wt->GetSpectrumBounds(&minFreq, &maxFreq);
mTempSettings.maxFreq = maxFreq;
mTempSettings.minFreq = minFreq;
mOrigDefaulted = mDefaulted = (&SpectrogramSettings::defaults() == &settings);
mTempSettings = mOrigSettings = settings;
wt->GetSpectrumBounds(&mOrigMin, &mOrigMax);
mTempSettings.maxFreq = mOrigMax;
mTempSettings.minFreq = mOrigMin;
mOrigDisplay = mWt->GetDisplay();
}
else {
mTempSettings = SpectrogramSettings::defaults();
mDefaulted = false;
mTempSettings = mOrigSettings = SpectrogramSettings::defaults();
mOrigDefaulted = mDefaulted = false;
}
const auto windowSize = mTempSettings.WindowSize();
@@ -60,6 +60,8 @@ SpectrumPrefs::SpectrumPrefs(wxWindow * parent, WaveTrack *wt)
SpectrumPrefs::~SpectrumPrefs()
{
if (!mCommitted)
Rollback();
}
enum {
@@ -365,7 +367,56 @@ bool SpectrumPrefs::Validate()
return result;
}
bool SpectrumPrefs::Commit()
void SpectrumPrefs::Rollback()
{
const auto partner =
mWt ?
// Assume linked track is wave or null
static_cast<WaveTrack*>(mWt->GetLink())
: nullptr;
if (mWt) {
if (mOrigDefaulted) {
mWt->SetSpectrogramSettings({});
mWt->SetSpectrumBounds(-1, -1);
if (partner) {
partner->SetSpectrogramSettings({});
partner->SetSpectrumBounds(-1, -1);
}
}
else {
SpectrogramSettings *pSettings =
&mWt->GetIndependentSpectrogramSettings();
mWt->SetSpectrumBounds(mOrigMin, mOrigMax);
*pSettings = mOrigSettings;
if (partner) {
pSettings = &partner->GetIndependentSpectrogramSettings();
partner->SetSpectrumBounds(mOrigMin, mOrigMax);
*pSettings = mOrigSettings;
}
}
}
if (!mWt || mOrigDefaulted) {
SpectrogramSettings *const pSettings = &SpectrogramSettings::defaults();
*pSettings = mOrigSettings;
}
const bool isOpenPage = this->IsShown();
if (mWt && isOpenPage) {
mWt->SetDisplay(mOrigDisplay);
if (partner)
partner->SetDisplay(mOrigDisplay);
}
if (isOpenPage) {
TrackPanel *const tp = ::GetActiveProject()->GetTrackPanel();
tp->UpdateVRulers();
tp->Refresh(false);
}
}
bool SpectrumPrefs::Preview()
{
if (!Validate())
return false;
@@ -383,7 +434,6 @@ bool SpectrumPrefs::Commit()
mTempSettings.ConvertToActualWindowSizes();
SpectrogramSettings::Globals::Get().SavePrefs(); // always
if (mWt) {
if (mDefaulted) {
@@ -411,7 +461,6 @@ bool SpectrumPrefs::Commit()
if (!mWt || mDefaulted) {
SpectrogramSettings *const pSettings = &SpectrogramSettings::defaults();
*pSettings = mTempSettings;
pSettings->SavePrefs();
}
mTempSettings.ConvertToEnumeratedWindowSizes();
@@ -430,6 +479,16 @@ bool SpectrumPrefs::Commit()
return true;
}
bool SpectrumPrefs::Commit()
{
mCommitted = true;
SpectrogramSettings::Globals::Get().SavePrefs(); // always
if (!mWt || mDefaulted) {
SpectrogramSettings *const pSettings = &SpectrogramSettings::defaults();
pSettings->SavePrefs();
}
}
bool SpectrumPrefs::ShowsPreviewButton()
{
return true;

View File

@@ -26,6 +26,7 @@
#include <wx/window.h>
#include "../Experimental.h"
#include "../WaveTrack.h"
#include "PrefsPanel.h"
#include "SpectrogramSettings.h"
@@ -43,7 +44,9 @@ class SpectrumPrefs final : public PrefsPanel
public:
SpectrumPrefs(wxWindow * parent, WaveTrack *wt);
virtual ~SpectrumPrefs();
bool Preview() override;
bool Commit() override;
void Rollback();
bool ShowsPreviewButton() override;
bool Validate() override;
wxString HelpPageName() override;
@@ -62,7 +65,7 @@ class SpectrumPrefs final : public PrefsPanel
void EnableDisableSTFTOnlyControls();
WaveTrack *const mWt;
bool mDefaulted;
bool mDefaulted, mOrigDefaulted;
wxTextCtrl *mMinFreq;
wxTextCtrl *mMaxFreq;
@@ -92,9 +95,13 @@ class SpectrumPrefs final : public PrefsPanel
wxCheckBox *mDefaultsCheckbox;
SpectrogramSettings mTempSettings;
SpectrogramSettings mTempSettings, mOrigSettings;
WaveTrack::WaveTrackDisplay mOrigDisplay;
float mOrigMin, mOrigMax;
bool mPopulating;
bool mCommitted{};
};
class SpectrumPrefsFactory final : public PrefsPanelFactory