mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 16:10:06 +02:00
Bug 2279 - Multi-view: turning it on does not cause a split Multi-view to be displayed
This commit is contained in:
parent
05e24ec760
commit
596fd7c02f
@ -770,16 +770,18 @@ void WaveTrackMenuTable::OnMultiView(wxCommandEvent & event)
|
||||
{
|
||||
const auto pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
||||
const auto &view = WaveTrackView::Get( *pTrack );
|
||||
const int nViewTypes = 2;
|
||||
bool multi = !view.GetMultiView();
|
||||
WaveTrackView::WaveTrackDisplay display;
|
||||
if ( !multi )
|
||||
display = *view.GetDisplays().begin();
|
||||
display = *view.GetDisplays().begin();
|
||||
for (const auto channel : TrackList::Channels(pTrack)) {
|
||||
auto &channelView = WaveTrackView::Get( *channel );
|
||||
channelView.SetMultiView( multi );
|
||||
if ( !multi )
|
||||
// Whichever sub-view was on top will take up all
|
||||
channelView.SetDisplay( display );
|
||||
|
||||
// Whichever sub-view was on top stays on top
|
||||
// If going into Multi-view, it will be 1/nth the height.
|
||||
// If exiting multi-view, it will be full height.
|
||||
channelView.SetDisplay(display, multi ? 1.0/nViewTypes :1.0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -540,10 +540,10 @@ auto WaveTrackView::GetDisplays() const -> std::vector<WaveTrackDisplay>
|
||||
return results;
|
||||
}
|
||||
|
||||
void WaveTrackView::SetDisplay(WaveTrackDisplay display)
|
||||
void WaveTrackView::SetDisplay(WaveTrackDisplay display, float frac)
|
||||
{
|
||||
BuildSubViews();
|
||||
DoSetDisplay( display );
|
||||
DoSetDisplay( display, frac );
|
||||
}
|
||||
|
||||
void WaveTrackView::ToggleSubView(WaveTrackDisplay display)
|
||||
@ -587,15 +587,31 @@ void WaveTrackView::ToggleSubView(WaveTrackDisplay display)
|
||||
}
|
||||
}
|
||||
|
||||
void WaveTrackView::DoSetDisplay(WaveTrackDisplay display)
|
||||
// frac sets proportion/height of the chosen display, which will be first.
|
||||
// use 1.0 to take up entire space
|
||||
// use some fraction to take up that proportion, leaving the rest for
|
||||
// one each of the other types.
|
||||
// use 1.0/number-of-types for equal spacing.
|
||||
void WaveTrackView::DoSetDisplay(WaveTrackDisplay display,float frac)
|
||||
{
|
||||
size_t ii = 0;
|
||||
size_t jj = 1;
|
||||
const int nViewTypes = 2;
|
||||
WaveTrackSubViews::ForEach( [&,display]( WaveTrackSubView &subView ){
|
||||
if ( subView.SubViewType() == display )
|
||||
mPlacements[ii] = { 0, 1.0 };
|
||||
else
|
||||
auto viewType = subView.SubViewType();
|
||||
if (viewType == display) {
|
||||
// 0 for first view
|
||||
mPlacements[ii] = { 0, frac };
|
||||
--jj;
|
||||
}
|
||||
else if( frac > 0.999)
|
||||
// -1 for not displayed
|
||||
mPlacements[ii] = { -1, 0.0 };
|
||||
else
|
||||
// jj for positions excluding the first.
|
||||
mPlacements[ii] = { (int)jj, (1.0f-frac)/(nViewTypes-1) };
|
||||
++ii;
|
||||
++jj;
|
||||
} );
|
||||
}
|
||||
|
||||
@ -904,7 +920,7 @@ void WaveTrackView::BuildSubViews() const
|
||||
settings.scaleType = WaveformSettings::stLogarithmic;
|
||||
}
|
||||
|
||||
pThis->DoSetDisplay( display );
|
||||
pThis->DoSetDisplay( display, 1.0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -84,7 +84,7 @@ public:
|
||||
using WaveTrackDisplay = WaveTrackViewConstants::Display;
|
||||
|
||||
std::vector<WaveTrackDisplay> GetDisplays() const;
|
||||
void SetDisplay(WaveTrackDisplay display);
|
||||
void SetDisplay(WaveTrackDisplay display, float frac=1.0);
|
||||
|
||||
const WaveTrackSubViewPlacements &SavePlacements() const
|
||||
{ return mPlacements; }
|
||||
@ -105,7 +105,7 @@ public:
|
||||
|
||||
private:
|
||||
void BuildSubViews() const;
|
||||
void DoSetDisplay(WaveTrackDisplay display);
|
||||
void DoSetDisplay(WaveTrackDisplay display, float frac);
|
||||
|
||||
// TrackPanelDrawable implementation
|
||||
void Draw(
|
||||
|
Loading…
x
Reference in New Issue
Block a user