1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-27 17:48:38 +02:00

Settings UI Spectrogram views only. Retract the Waveforms page development.

This commit is contained in:
Paul Licameli 2015-08-19 10:21:23 -04:00
commit 42cd2ab3ee
8 changed files with 164 additions and 85 deletions

View File

@ -292,8 +292,9 @@ enum {
OnFloatID, // <--- OnFloatID, // <---
OnWaveformID, OnWaveformID,
OnWaveformDBID,
OnSpectrumID, OnSpectrumID,
OnViewSettingsID, OnSpectrogramSettingsID,
OnSplitStereoID, OnSplitStereoID,
OnSplitStereoMonoID, OnSplitStereoMonoID,
@ -342,7 +343,7 @@ BEGIN_EVENT_TABLE(TrackPanel, wxWindow)
EVT_MENU_RANGE(OnChannelLeftID, OnChannelMonoID, EVT_MENU_RANGE(OnChannelLeftID, OnChannelMonoID,
TrackPanel::OnChannelChange) TrackPanel::OnChannelChange)
EVT_MENU_RANGE(OnWaveformID, OnSpectrumID, TrackPanel::OnSetDisplay) EVT_MENU_RANGE(OnWaveformID, OnSpectrumID, TrackPanel::OnSetDisplay)
EVT_MENU(OnViewSettingsID, TrackPanel::OnViewSettings) EVT_MENU(OnSpectrogramSettingsID, TrackPanel::OnSpectrogramSettings)
EVT_MENU_RANGE(OnRate8ID, OnRate384ID, TrackPanel::OnRateChange) EVT_MENU_RANGE(OnRate8ID, OnRate384ID, TrackPanel::OnRateChange)
EVT_MENU_RANGE(On16BitID, OnFloatID, TrackPanel::OnFormatChange) EVT_MENU_RANGE(On16BitID, OnFloatID, TrackPanel::OnFormatChange)
EVT_MENU(OnRateOtherID, TrackPanel::OnRateOther) EVT_MENU(OnRateOtherID, TrackPanel::OnRateOther)
@ -751,9 +752,10 @@ void TrackPanel::BuildMenus(void)
/* build the pop-down menu used on wave (sampled audio) tracks */ /* build the pop-down menu used on wave (sampled audio) tracks */
mWaveTrackMenu = new wxMenu(); mWaveTrackMenu = new wxMenu();
BuildCommonDropMenuItems(mWaveTrackMenu); // does name, up/down etc BuildCommonDropMenuItems(mWaveTrackMenu); // does name, up/down etc
mWaveTrackMenu->AppendRadioItem(OnWaveformID, _("&Waveform")); mWaveTrackMenu->AppendRadioItem(OnWaveformID, _("Wa&veform"));
mWaveTrackMenu->AppendRadioItem(OnWaveformDBID, _("&Waveform (dB)"));
mWaveTrackMenu->AppendRadioItem(OnSpectrumID, _("&Spectrogram")); mWaveTrackMenu->AppendRadioItem(OnSpectrumID, _("&Spectrogram"));
mWaveTrackMenu->Append(OnViewSettingsID, _("&View Settings...")); mWaveTrackMenu->Append(OnSpectrogramSettingsID, _("S&pectrogram Settings..."));
mWaveTrackMenu->AppendSeparator(); mWaveTrackMenu->AppendSeparator();
mChannelItemsInsertionPoint = mWaveTrackMenu->GetMenuItemCount(); mChannelItemsInsertionPoint = mWaveTrackMenu->GetMenuItemCount();
@ -8741,13 +8743,16 @@ void TrackPanel::OnTrackMenu(Track *t)
} }
} }
const int display = static_cast<WaveTrack *>(t)->GetDisplay(); WaveTrack *const track = (WaveTrack *)t;
const int display = track->GetDisplay();
theMenu->Check( theMenu->Check(
(display == WaveTrack::Waveform) ? OnWaveformID : OnSpectrumID, (display == WaveTrack::Waveform)
? (track->GetWaveformSettings().isLinear() ? OnWaveformID : OnWaveformDBID)
: OnSpectrumID,
true true
); );
theMenu->Enable(OnSpectrogramSettingsID, display == WaveTrack::Spectrum);
WaveTrack * track = (WaveTrack *)t;
SetMenuCheck(*mRateMenu, IdOfRate((int) track->GetRate())); SetMenuCheck(*mRateMenu, IdOfRate((int) track->GetRate()));
SetMenuCheck(*mFormatMenu, IdOfFormat(track->GetSampleFormat())); SetMenuCheck(*mFormatMenu, IdOfFormat(track->GetSampleFormat()));
@ -9287,15 +9292,14 @@ private:
const int mPage; const int mPage;
}; };
void TrackPanel::OnViewSettings(wxCommandEvent &) void TrackPanel::OnSpectrogramSettings(wxCommandEvent &)
{ {
WaveTrack *const wt = static_cast<WaveTrack*>(mPopupMenuTarget); WaveTrack *const wt = static_cast<WaveTrack*>(mPopupMenuTarget);
WaveformPrefsFactory waveformFactory(wt); // WaveformPrefsFactory waveformFactory(wt);
SpectrumPrefsFactory spectrumFactory(wt); SpectrumPrefsFactory spectrumFactory(wt);
// Put Waveform page first
PrefsDialog::Factories factories; PrefsDialog::Factories factories;
factories.push_back(&waveformFactory); // factories.push_back(&waveformFactory);
factories.push_back(&spectrumFactory); factories.push_back(&spectrumFactory);
const int page = (wt->GetDisplay() == WaveTrack::Spectrum) const int page = (wt->GetDisplay() == WaveTrack::Spectrum)
? 1 : 0; ? 1 : 0;
@ -9319,21 +9323,37 @@ void TrackPanel::OnSetDisplay(wxCommandEvent & event)
wxASSERT(mPopupMenuTarget wxASSERT(mPopupMenuTarget
&& mPopupMenuTarget->GetKind() == Track::Wave); && mPopupMenuTarget->GetKind() == Track::Wave);
bool linear = false;
WaveTrack::WaveTrackDisplay id; WaveTrack::WaveTrackDisplay id;
switch (idInt) { switch (idInt) {
default: default:
case OnWaveformID: case OnWaveformID:
linear = true, id = WaveTrack::Waveform; break;
case OnWaveformDBID:
id = WaveTrack::Waveform; break; id = WaveTrack::Waveform; break;
case OnSpectrumID: case OnSpectrumID:
id = WaveTrack::Spectrum; break; id = WaveTrack::Spectrum; break;
} }
WaveTrack *wt = (WaveTrack *) mPopupMenuTarget; WaveTrack *wt = (WaveTrack *) mPopupMenuTarget;
if (wt->GetDisplay() != id) { const bool wrongType = wt->GetDisplay() != id;
const bool wrongScale =
(id == WaveTrack::Waveform &&
wt->GetWaveformSettings().isLinear() != linear);
if (wrongType || wrongScale) {
wt->SetDisplay(WaveTrack::WaveTrackDisplay(id)); wt->SetDisplay(WaveTrack::WaveTrackDisplay(id));
if (wrongScale)
wt->GetIndependentWaveformSettings().scaleType = linear
? WaveformSettings::stLinear
: WaveformSettings::stLogarithmic;
WaveTrack *l = static_cast<WaveTrack *>(wt->GetLink()); WaveTrack *l = static_cast<WaveTrack *>(wt->GetLink());
if (l) if (l) {
l->SetDisplay(WaveTrack::WaveTrackDisplay(id)); l->SetDisplay(WaveTrack::WaveTrackDisplay(id));
if (wrongScale)
l->GetIndependentWaveformSettings().scaleType = linear
? WaveformSettings::stLinear
: WaveformSettings::stLogarithmic;
}
#ifdef EXPERIMENTAL_OUTPUT_DISPLAY #ifdef EXPERIMENTAL_OUTPUT_DISPLAY
if (wt->GetDisplay() == WaveTrack::WaveformDisplay) { if (wt->GetDisplay() == WaveTrack::WaveformDisplay) {
wt->SetVirtualState(false); wt->SetVirtualState(false);

View File

@ -484,7 +484,7 @@ protected:
virtual void MoveTrack(Track* target, int eventId); virtual void MoveTrack(Track* target, int eventId);
virtual void OnChangeOctave (wxCommandEvent &event); virtual void OnChangeOctave (wxCommandEvent &event);
virtual void OnChannelChange(wxCommandEvent &event); virtual void OnChannelChange(wxCommandEvent &event);
virtual void OnViewSettings(wxCommandEvent &event); virtual void OnSpectrogramSettings(wxCommandEvent &event);
virtual void OnSetDisplay (wxCommandEvent &event); virtual void OnSetDisplay (wxCommandEvent &event);
virtual void OnSetTimeTrackRange (wxCommandEvent &event); virtual void OnSetTimeTrackRange (wxCommandEvent &event);
virtual void OnTimeTrackLin(wxCommandEvent &event); virtual void OnTimeTrackLin(wxCommandEvent &event);

View File

@ -86,7 +86,14 @@ WaveTrack::WaveTrack(DirManager *projDirManager, sampleFormat format, double rat
rate = GetActiveProject()->GetRate(); rate = GetActiveProject()->GetRate();
} }
// Force creation always:
WaveformSettings &settings = GetIndependentWaveformSettings();
mDisplay = FindDefaultViewMode(); mDisplay = FindDefaultViewMode();
if (mDisplay == obsoleteWaveformDBDisplay) {
mDisplay = Waveform;
settings.scaleType = WaveformSettings::stLogarithmic;
}
mLegacyProjectFileOffset = 0; mLegacyProjectFileOffset = 0;
@ -113,7 +120,14 @@ WaveTrack::WaveTrack(WaveTrack &orig):
, mpWaveformSettings(orig.mpWaveformSettings , mpWaveformSettings(orig.mpWaveformSettings
? new WaveformSettings(*orig.mpWaveformSettings) : 0) ? new WaveformSettings(*orig.mpWaveformSettings) : 0)
{ {
// Force creation always:
WaveformSettings &settings = GetIndependentWaveformSettings();
mDisplay = FindDefaultViewMode(); mDisplay = FindDefaultViewMode();
if (mDisplay == obsoleteWaveformDBDisplay) {
mDisplay = Waveform;
settings.scaleType = WaveformSettings::stLinear;
}
mLastScaleType = -1; mLastScaleType = -1;
mLegacyProjectFileOffset = 0; mLegacyProjectFileOffset = 0;
@ -236,12 +250,9 @@ WaveTrack::ConvertLegacyDisplayValue(int oldValue)
switch (oldValue) { switch (oldValue) {
default: default:
case Waveform: case Waveform:
case WaveformDB:
newValue = WaveTrack::Waveform; break; newValue = WaveTrack::Waveform; break;
/*
case WaveformDB: case WaveformDB:
newValue = WaveTrack::WaveformDBDisplay; break; newValue = WaveTrack::obsoleteWaveformDBDisplay; break;
*/
case Spectrogram: case Spectrogram:
case SpectrogramLogF: case SpectrogramLogF:
case Pitch: case Pitch:
@ -263,6 +274,7 @@ WaveTrack::ValidateWaveTrackDisplay(WaveTrackDisplay display)
switch (display) { switch (display) {
// non-obsolete codes // non-obsolete codes
case Waveform: case Waveform:
case obsoleteWaveformDBDisplay:
case Spectrum: case Spectrum:
return display; return display;
@ -273,9 +285,6 @@ WaveTrack::ValidateWaveTrackDisplay(WaveTrackDisplay display)
case obsolete4: // was PitchDisplay case obsolete4: // was PitchDisplay
return Spectrum; return Spectrum;
case obsolete5: // was WaveformDBDisplay
return Waveform;
// codes out of bounds (from future prefs files?) // codes out of bounds (from future prefs files?)
default: default:
return MinDisplay; return MinDisplay;

View File

@ -407,7 +407,7 @@ class AUDACITY_DLL_API WaveTrack : public Track {
Waveform = 0, Waveform = 0,
MinDisplay = Waveform, MinDisplay = Waveform,
obsolete5, // was WaveformDBDisplay obsoleteWaveformDBDisplay,
Spectrum, Spectrum,

View File

@ -64,7 +64,8 @@
#include "ThemePrefs.h" #include "ThemePrefs.h"
#include "TracksPrefs.h" #include "TracksPrefs.h"
#include "WarningsPrefs.h" #include "WarningsPrefs.h"
#include "WaveformPrefs.h" // #include "WaveformPrefs.h"
#include "WaveformSettings.h"
#include "ExtImportPrefs.h" #include "ExtImportPrefs.h"
#ifdef EXPERIMENTAL_MIDI_OUT #ifdef EXPERIMENTAL_MIDI_OUT
@ -132,7 +133,7 @@ PrefsDialog::Factories
#if !defined(DISABLE_DYNAMIC_LOADING_FFMPEG) || !defined(DISABLE_DYNAMIC_LOADING_LAME) #if !defined(DISABLE_DYNAMIC_LOADING_FFMPEG) || !defined(DISABLE_DYNAMIC_LOADING_LAME)
static LibraryPrefsFactory libraryPrefsFactory; static LibraryPrefsFactory libraryPrefsFactory;
#endif #endif
static WaveformPrefsFactory waveformPrefsFactory; // static WaveformPrefsFactory waveformPrefsFactory;
static SpectrumPrefsFactory spectrumPrefsFactory; static SpectrumPrefsFactory spectrumPrefsFactory;
static DirectoriesPrefsFactory directoriesPrefsFactory; static DirectoriesPrefsFactory directoriesPrefsFactory;
static WarningsPrefsFactory warningsPrefsFactory; static WarningsPrefsFactory warningsPrefsFactory;
@ -157,10 +158,9 @@ PrefsDialog::Factories
&qualityPrefsFactory, &qualityPrefsFactory,
&guiPrefsFactory, &guiPrefsFactory,
// Group two other pages &tracksPrefsFactory,
PrefsNode(&tracksPrefsFactory, 2, true), // &waveformPrefsFactory,
&waveformPrefsFactory, // &spectrumPrefsFactory,
&spectrumPrefsFactory,
// Group one other page // Group one other page
PrefsNode(&importExportPrefsFactory, 1, true), PrefsNode(&importExportPrefsFactory, 1, true),
@ -170,6 +170,7 @@ PrefsDialog::Factories
#if !defined(DISABLE_DYNAMIC_LOADING_FFMPEG) || !defined(DISABLE_DYNAMIC_LOADING_LAME) #if !defined(DISABLE_DYNAMIC_LOADING_FFMPEG) || !defined(DISABLE_DYNAMIC_LOADING_LAME)
&libraryPrefsFactory, &libraryPrefsFactory,
#endif #endif
&spectrumPrefsFactory,
&directoriesPrefsFactory, &directoriesPrefsFactory,
&warningsPrefsFactory, &warningsPrefsFactory,
&effectsPrefsFactory, &effectsPrefsFactory,
@ -196,15 +197,22 @@ PrefsDialog::PrefsDialog
wxDefaultSize, wxDefaultSize,
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
, mFactories(factories) , mFactories(factories)
, mCategories(NULL)
, mUniquePage(NULL)
, mTitlePrefix(titlePrefix) , mTitlePrefix(titlePrefix)
{ {
wxASSERT(factories.size() > 0);
const bool uniquePage = (factories.size() == 1);
ShuttleGui S(this, eIsCreating); ShuttleGui S(this, eIsCreating);
S.StartVerticalLay(true); S.StartVerticalLay(true);
{ {
wxASSERT(factories.size() > 0);
if (!uniquePage) {
mCategories = new wxTreebookExt(this, wxID_ANY, mTitlePrefix);
S.StartHorizontalLay(wxALIGN_LEFT | wxEXPAND, true); S.StartHorizontalLay(wxALIGN_LEFT | wxEXPAND, true);
{ {
mCategories = new wxTreebookExt(this, wxID_ANY, mTitlePrefix);
S.Prop(1); S.Prop(1);
S.AddWindow(mCategories, wxEXPAND); S.AddWindow(mCategories, wxEXPAND);
@ -237,6 +245,14 @@ PrefsDialog::PrefsDialog
} }
S.EndHorizontalLay(); S.EndHorizontalLay();
} }
else {
// Unique page, don't show the factory
const PrefsNode &node = factories[0];
PrefsPanelFactory &factory = *node.pFactory;
mUniquePage = factory.Create(this);
S.AddWindow(mUniquePage, wxEXPAND);
}
}
S.EndVerticalLay(); S.EndVerticalLay();
S.AddStandardButtons(eOkButton | eCancelButton); S.AddStandardButtons(eOkButton | eCancelButton);
@ -251,6 +267,7 @@ PrefsDialog::PrefsDialog
wxSize sz = GetSize(); wxSize sz = GetSize();
// Collapse nodes only after layout so the tree is wide enough // Collapse nodes only after layout so the tree is wide enough
if (mCategories)
{ {
int iPage = 0; int iPage = 0;
for (Factories::const_iterator it = factories.begin(), end = factories.end(); for (Factories::const_iterator it = factories.begin(), end = factories.end();
@ -290,6 +307,7 @@ PrefsDialog::~PrefsDialog()
int PrefsDialog::ShowModal() int PrefsDialog::ShowModal()
{ {
if (mCategories) {
/* long is signed, size_t is unsigned. On some platforms they are different /* long is signed, size_t is unsigned. On some platforms they are different
* lengths as well. So we must check that the stored category is both > 0 * lengths as well. So we must check that the stored category is both > 0
* and within the possible range of categories, making the first check on the * and within the possible range of categories, making the first check on the
@ -299,6 +317,12 @@ int PrefsDialog::ShowModal()
if (selected < 0 || size_t(selected) >= mCategories->GetPageCount()) if (selected < 0 || size_t(selected) >= mCategories->GetPageCount())
selected = 0; // clamp to available range of tabs selected = 0; // clamp to available range of tabs
mCategories->SetSelection(selected); mCategories->SetSelection(selected);
}
else {
wxString Temp = mTitlePrefix + mUniquePage->GetLabel();
SetTitle(Temp);
SetName(Temp);
}
return wxDialog::ShowModal(); return wxDialog::ShowModal();
} }
@ -307,9 +331,13 @@ void PrefsDialog::OnCancel(wxCommandEvent & WXUNUSED(event))
{ {
RecordExpansionState(); RecordExpansionState();
if (mCategories) {
for (size_t i = 0; i < mCategories->GetPageCount(); i++) { for (size_t i = 0; i < mCategories->GetPageCount(); i++) {
((PrefsPanel *)mCategories->GetPage(i))->Cancel(); ((PrefsPanel *)mCategories->GetPage(i))->Cancel();
} }
}
else
mUniquePage->Cancel();
EndModal(false); EndModal(false);
} }
@ -327,6 +355,7 @@ void PrefsDialog::OnOK(wxCommandEvent & WXUNUSED(event))
RecordExpansionState(); RecordExpansionState();
// Validate all pages first // Validate all pages first
if (mCategories) {
for (size_t i = 0; i < mCategories->GetPageCount(); i++) { for (size_t i = 0; i < mCategories->GetPageCount(); i++) {
PrefsPanel *panel = (PrefsPanel *)mCategories->GetPage(i); PrefsPanel *panel = (PrefsPanel *)mCategories->GetPage(i);
@ -336,13 +365,22 @@ void PrefsDialog::OnOK(wxCommandEvent & WXUNUSED(event))
return; return;
} }
} }
}
else {
if (!mUniquePage->Validate())
return;
}
if (mCategories) {
// Now apply the changes // Now apply the changes
for (size_t i = 0; i < mCategories->GetPageCount(); i++) { for (size_t i = 0; i < mCategories->GetPageCount(); i++) {
PrefsPanel *panel = (PrefsPanel *)mCategories->GetPage(i); PrefsPanel *panel = (PrefsPanel *)mCategories->GetPage(i);
panel->Apply(); panel->Apply();
} }
}
else
mUniquePage->Apply();
SavePreferredPage(); SavePreferredPage();
@ -386,6 +424,7 @@ void PrefsDialog::OnOK(wxCommandEvent & WXUNUSED(event))
void PrefsDialog::SelectPageByName(wxString pageName) void PrefsDialog::SelectPageByName(wxString pageName)
{ {
if (mCategories) {
size_t n = mCategories->GetPageCount(); size_t n = mCategories->GetPageCount();
for (size_t i = 0; i < n; i++) { for (size_t i = 0; i < n; i++) {
@ -395,10 +434,14 @@ void PrefsDialog::SelectPageByName(wxString pageName)
} }
} }
} }
}
int PrefsDialog::GetSelectedPage() const int PrefsDialog::GetSelectedPage() const
{ {
if (mCategories)
return mCategories->GetSelection(); return mCategories->GetSelection();
else
return 0;
} }
GlobalPrefsDialog::GlobalPrefsDialog(wxWindow * parent, Factories &factories) GlobalPrefsDialog::GlobalPrefsDialog(wxWindow * parent, Factories &factories)
@ -425,10 +468,13 @@ void GlobalPrefsDialog::SavePreferredPage()
void PrefsDialog::RecordExpansionState() void PrefsDialog::RecordExpansionState()
{ {
// Remember expansion state of the tree control // Remember expansion state of the tree control
if (mCategories)
{ {
int iPage = 0; int iPage = 0;
for (Factories::iterator it = mFactories.begin(), end = mFactories.end(); for (Factories::iterator it = mFactories.begin(), end = mFactories.end();
it != end; ++it, ++iPage) it != end; ++it, ++iPage)
it->expanded = mCategories->IsNodeExpanded(iPage); it->expanded = mCategories->IsNodeExpanded(iPage);
} }
else
mFactories[0].expanded = true;
} }

View File

@ -20,6 +20,7 @@
#include <wx/treebook.h> #include <wx/treebook.h>
#include <wx/window.h> #include <wx/window.h>
class PrefsPanel;
class PrefsPanelFactory; class PrefsPanelFactory;
#ifdef __GNUC__ #ifdef __GNUC__
@ -75,6 +76,7 @@ class PrefsDialog:public wxDialog
private: private:
void RecordExpansionState(); void RecordExpansionState();
wxTreebook *mCategories; wxTreebook *mCategories;
PrefsPanel *mUniquePage;
Factories &mFactories; Factories &mFactories;
const wxString mTitlePrefix; const wxString mTitlePrefix;

View File

@ -31,7 +31,7 @@
#include <algorithm> #include <algorithm>
SpectrumPrefs::SpectrumPrefs(wxWindow * parent, WaveTrack *wt) SpectrumPrefs::SpectrumPrefs(wxWindow * parent, WaveTrack *wt)
: PrefsPanel(parent, _("Spectrograms")) : PrefsPanel(parent, wt ? _("Spectrogram Settings") : _("Spectrograms"))
, mWt(wt) , mWt(wt)
, mPopulating(false) , mPopulating(false)
{ {
@ -403,7 +403,6 @@ bool SpectrumPrefs::Apply()
mTempSettings.ConvertToEnumeratedWindowSizes(); mTempSettings.ConvertToEnumeratedWindowSizes();
if (mWt && isOpenPage) { if (mWt && isOpenPage) {
// Future: open page will determine the track view type
mWt->SetDisplay(WaveTrack::Spectrum); mWt->SetDisplay(WaveTrack::Spectrum);
if (partner) if (partner)
partner->SetDisplay(WaveTrack::Spectrum); partner->SetDisplay(WaveTrack::Spectrum);

View File

@ -62,6 +62,9 @@ void TracksPrefs::Populate()
mViewChoices.Add(_("Waveform")); mViewChoices.Add(_("Waveform"));
mViewCodes.Add(int(WaveTrack::Waveform)); mViewCodes.Add(int(WaveTrack::Waveform));
mViewChoices.Add(_("Waveform (dB)"));
mViewCodes.Add(int(WaveTrack::obsoleteWaveformDBDisplay));
mViewChoices.Add(_("Spectrum")); mViewChoices.Add(_("Spectrum"));
mViewCodes.Add(WaveTrack::Spectrum); mViewCodes.Add(WaveTrack::Spectrum);