mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 16:10:06 +02:00
Generalize WaveTrackView::GetDisplay to return multiple values...
... something better might be done in Nyquist Lisp, where we still pass a single value
This commit is contained in:
parent
2f544bda7a
commit
fa6b5dea88
@ -544,8 +544,11 @@ bool NyquistEffect::Init()
|
|||||||
|
|
||||||
for ( auto t :
|
for ( auto t :
|
||||||
TrackList::Get( *project ).Selected< const WaveTrack >() ) {
|
TrackList::Get( *project ).Selected< const WaveTrack >() ) {
|
||||||
if (WaveTrackView::Get(*t).GetDisplay()
|
const auto displays = WaveTrackView::Get(*t).GetDisplays();
|
||||||
!= WaveTrackViewConstants::Spectrum ||
|
bool hasSpectral =
|
||||||
|
make_iterator_range( displays.begin(), displays.end())
|
||||||
|
.contains( WaveTrackViewConstants::Spectrum );
|
||||||
|
if ( !hasSpectral ||
|
||||||
!(t->GetSpectrogramSettings().SpectralSelectionEnabled())) {
|
!(t->GetSpectrogramSettings().SpectralSelectionEnabled())) {
|
||||||
bAllowSpectralEditing = false;
|
bAllowSpectralEditing = false;
|
||||||
break;
|
break;
|
||||||
@ -1069,7 +1072,12 @@ bool NyquistEffect::ProcessOne()
|
|||||||
[&](const WaveTrack *wt) {
|
[&](const WaveTrack *wt) {
|
||||||
type = wxT("wave");
|
type = wxT("wave");
|
||||||
spectralEditp = mCurTrack[0]->GetSpectrogramSettings().SpectralSelectionEnabled()? wxT("T") : wxT("NIL");
|
spectralEditp = mCurTrack[0]->GetSpectrogramSettings().SpectralSelectionEnabled()? wxT("T") : wxT("NIL");
|
||||||
switch ( WaveTrackView::Get( *wt ).GetDisplay() )
|
// To do: accommodate split views
|
||||||
|
auto viewType = WaveTrackViewConstants::NoDisplay;
|
||||||
|
auto displays = WaveTrackView::Get( *wt ).GetDisplays();
|
||||||
|
if (!displays.empty())
|
||||||
|
viewType = displays[0];
|
||||||
|
switch ( viewType )
|
||||||
{
|
{
|
||||||
case Waveform:
|
case Waveform:
|
||||||
view = (mCurTrack[0]->GetWaveformSettings().scaleType == 0) ? wxT("\"Waveform\"") : wxT("\"Waveform (dB)\"");
|
view = (mCurTrack[0]->GetWaveformSettings().scaleType == 0) ? wxT("\"Waveform\"") : wxT("\"Waveform (dB)\"");
|
||||||
|
@ -35,8 +35,9 @@ void DoNextPeakFrequency(AudacityProject &project, bool up)
|
|||||||
// Find the first selected wave track that is in a spectrogram view.
|
// Find the first selected wave track that is in a spectrogram view.
|
||||||
const WaveTrack *pTrack {};
|
const WaveTrack *pTrack {};
|
||||||
for ( auto wt : tracks.Selected< const WaveTrack >() ) {
|
for ( auto wt : tracks.Selected< const WaveTrack >() ) {
|
||||||
const auto display = WaveTrackView::Get( *wt ).GetDisplay();
|
const auto displays = WaveTrackView::Get( *wt ).GetDisplays();
|
||||||
if (display == WaveTrackViewConstants::Spectrum) {
|
if ( make_iterator_range( displays.begin(), displays.end() )
|
||||||
|
.contains( WaveTrackViewConstants::Spectrum) ) {
|
||||||
pTrack = wt;
|
pTrack = wt;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -599,19 +599,23 @@ void WaveTrackMenuTable::InitMenu(Menu *pMenu, void *pUserData)
|
|||||||
|
|
||||||
std::vector<int> checkedIds;
|
std::vector<int> checkedIds;
|
||||||
|
|
||||||
const auto display = WaveTrackView::Get( *pTrack ).GetDisplay();
|
const auto displays = WaveTrackView::Get( *pTrack ).GetDisplays();
|
||||||
checkedIds.push_back(
|
for ( auto display : displays ) {
|
||||||
display == WaveTrackViewConstants::Waveform
|
checkedIds.push_back(
|
||||||
? (pTrack->GetWaveformSettings().isLinear()
|
display == WaveTrackViewConstants::Waveform
|
||||||
? OnWaveformID : OnWaveformDBID)
|
? (pTrack->GetWaveformSettings().isLinear()
|
||||||
: OnSpectrumID);
|
? OnWaveformID : OnWaveformDBID)
|
||||||
|
: OnSpectrumID);
|
||||||
|
}
|
||||||
|
|
||||||
// Bug 1253. Shouldn't open preferences if audio is busy.
|
// Bug 1253. Shouldn't open preferences if audio is busy.
|
||||||
// We can't change them on the fly yet anyway.
|
// We can't change them on the fly yet anyway.
|
||||||
auto gAudioIO = AudioIOBase::Get();
|
auto gAudioIO = AudioIOBase::Get();
|
||||||
const bool bAudioBusy = gAudioIO->IsBusy();
|
const bool bAudioBusy = gAudioIO->IsBusy();
|
||||||
pMenu->Enable(OnSpectrogramSettingsID,
|
bool hasSpectrum =
|
||||||
(display == WaveTrackViewConstants::Spectrum) && !bAudioBusy);
|
make_iterator_range( displays.begin(), displays.end() )
|
||||||
|
.contains( WaveTrackViewConstants::Spectrum );
|
||||||
|
pMenu->Enable(OnSpectrogramSettingsID, hasSpectrum && !bAudioBusy);
|
||||||
|
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = ::GetActiveProject();
|
||||||
auto &tracks = TrackList::Get( *project );
|
auto &tracks = TrackList::Get( *project );
|
||||||
@ -683,9 +687,9 @@ void WaveTrackMenuTable::InitMenu(Menu *pMenu, void *pUserData)
|
|||||||
BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
||||||
POPUP_MENU_SEPARATOR()
|
POPUP_MENU_SEPARATOR()
|
||||||
|
|
||||||
POPUP_MENU_RADIO_ITEM(OnWaveformID, _("Wa&veform"), OnSetDisplay)
|
POPUP_MENU_CHECK_ITEM(OnWaveformID, _("Wa&veform"), OnSetDisplay)
|
||||||
POPUP_MENU_RADIO_ITEM(OnWaveformDBID, _("&Waveform (dB)"), OnSetDisplay)
|
POPUP_MENU_CHECK_ITEM(OnWaveformDBID, _("&Waveform (dB)"), OnSetDisplay)
|
||||||
POPUP_MENU_RADIO_ITEM(OnSpectrumID, _("&Spectrogram"), OnSetDisplay)
|
POPUP_MENU_CHECK_ITEM(OnSpectrumID, _("&Spectrogram"), OnSetDisplay)
|
||||||
POPUP_MENU_ITEM(OnSpectrogramSettingsID, _("S&pectrogram Settings..."), OnSpectrogramSettings)
|
POPUP_MENU_ITEM(OnSpectrogramSettingsID, _("S&pectrogram Settings..."), OnSpectrogramSettings)
|
||||||
POPUP_MENU_SEPARATOR()
|
POPUP_MENU_SEPARATOR()
|
||||||
|
|
||||||
@ -702,11 +706,15 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpTrack);
|
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpTrack);
|
||||||
if( pTrack &&
|
if ( pTrack ) {
|
||||||
WaveTrackView::Get( *pTrack ).GetDisplay()
|
const auto displays = WaveTrackView::Get( *pTrack ).GetDisplays();
|
||||||
!= WaveTrackViewConstants::Spectrum ){
|
bool hasWaveform =
|
||||||
POPUP_MENU_SEPARATOR()
|
make_iterator_range( displays.begin(), displays.end() )
|
||||||
POPUP_MENU_SUB_MENU(OnWaveColorID, _("&Wave Color"), WaveColorMenuTable)
|
.contains( WaveTrackViewConstants::Waveform );
|
||||||
|
if( hasWaveform ){
|
||||||
|
POPUP_MENU_SEPARATOR()
|
||||||
|
POPUP_MENU_SUB_MENU(OnWaveColorID, _("&Wave Color"), WaveColorMenuTable)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
POPUP_MENU_SEPARATOR()
|
POPUP_MENU_SEPARATOR()
|
||||||
@ -736,7 +744,8 @@ void WaveTrackMenuTable::OnSetDisplay(wxCommandEvent & event)
|
|||||||
id = Spectrum; break;
|
id = Spectrum; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool wrongType = WaveTrackView::Get( *pTrack ).GetDisplay() != id;
|
const auto displays = WaveTrackView::Get( *pTrack ).GetDisplays();
|
||||||
|
const bool wrongType = !(displays.size() == 1 && displays[0] == id);
|
||||||
const bool wrongScale =
|
const bool wrongScale =
|
||||||
(id == Waveform &&
|
(id == Waveform &&
|
||||||
pTrack->GetWaveformSettings().isLinear() != linear);
|
pTrack->GetWaveformSettings().isLinear() != linear);
|
||||||
|
@ -113,18 +113,23 @@ WaveTrackView::DoDetailedHitTest
|
|||||||
return { false, results };
|
return { false, results };
|
||||||
}
|
}
|
||||||
|
|
||||||
auto WaveTrackView::GetDisplay() const -> WaveTrackDisplay
|
auto WaveTrackView::GetDisplays() const -> std::vector<WaveTrackDisplay>
|
||||||
{
|
{
|
||||||
// To do: make the return a vector of values. For now, just report the
|
// Collect the display types of visible views and sort them by position
|
||||||
// last sub-view that is visible.
|
using Pair = std::pair< int, WaveTrackDisplay >;
|
||||||
WaveTrackDisplay display{ WaveTrackViewConstants::NoDisplay };
|
std::vector< Pair > pairs;
|
||||||
size_t ii = 0;
|
size_t ii = 0;
|
||||||
WaveTrackSubViews::ForEach( [&]( const WaveTrackSubView &subView ){
|
WaveTrackSubViews::ForEach( [&]( const WaveTrackSubView &subView ){
|
||||||
if ( mPlacements[ii].fraction > 0 )
|
auto &placement = mPlacements[ii];
|
||||||
display = subView.SubViewType();
|
if ( placement.fraction > 0 )
|
||||||
|
pairs.emplace_back( placement.index, subView.SubViewType() );
|
||||||
++ii;
|
++ii;
|
||||||
} );
|
} );
|
||||||
return display;
|
std::sort( pairs.begin(), pairs.end() );
|
||||||
|
std::vector<WaveTrackDisplay> results;
|
||||||
|
for ( const auto &pair : pairs )
|
||||||
|
results.push_back( pair.second );
|
||||||
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WaveTrackView::SetDisplay(WaveTrackDisplay display)
|
void WaveTrackView::SetDisplay(WaveTrackDisplay display)
|
||||||
|
@ -69,7 +69,7 @@ public:
|
|||||||
|
|
||||||
using WaveTrackDisplay = WaveTrackViewConstants::Display;
|
using WaveTrackDisplay = WaveTrackViewConstants::Display;
|
||||||
|
|
||||||
WaveTrackDisplay GetDisplay() const;
|
std::vector<WaveTrackDisplay> GetDisplays() const;
|
||||||
void SetDisplay(WaveTrackDisplay display);
|
void SetDisplay(WaveTrackDisplay display);
|
||||||
|
|
||||||
const WaveTrackSubViewPlacements &SavePlacements() const
|
const WaveTrackSubViewPlacements &SavePlacements() const
|
||||||
|
Loading…
x
Reference in New Issue
Block a user