Make Graphic EQ vertically stretchable

Drag to enlarge the window, and the length of the graphic sliders.
This was part of splitting EQ.  The split effect would look strange if we did not do this.

Graphic EQ sliders are now in a sizer, and so we no longer lay them out 'by hand' in the way we previously did.
This commit is contained in:
James Crook 2019-08-22 19:34:43 +01:00
parent 9cfff86763
commit 3e98a109c9
2 changed files with 46 additions and 94 deletions

View File

@ -668,28 +668,30 @@ void EffectEqualization::PopulateOrExchange(ShuttleGui & S)
S.SetBorder(0);
S.SetSizerProportion(1);
S.StartMultiColumn(1, wxEXPAND);
S.Prop(1).StartMultiColumn(1, wxEXPAND);
{
S.SetStretchyCol(0);
S.SetStretchyRow(1);
//S.SetStretchyRow(0); // The 5px Top border
S.SetStretchyRow(1); // The Graph
S.SetStretchyRow(2); // The EQ sliders
szrV = S.GetSizer();
// -------------------------------------------------------------------
// ROW 1: Top border
// ROW 0: Top border
// -------------------------------------------------------------------
S.AddSpace(5);
// -------------------------------------------------------------------
// ROW 1: Equalization panel and sliders for vertical scale
// -------------------------------------------------------------------
S.SetSizerProportion(1);
S.StartMultiColumn(3, wxEXPAND);
S.Prop(1).StartMultiColumn(3, wxEXPAND);
{
S.SetStretchyCol(1);
S.SetStretchyRow(0);
szr1 = S.GetSizer();
// -------------------------------------------------------------------
// ROW 2: Equalization panel and sliders for vertical scale
// -------------------------------------------------------------------
S.StartVerticalLay();
S.StartVerticalLay(wxEXPAND, 1);
{
mdBRuler = safenew RulerPanel(
parent, wxID_ANY, wxVERTICAL,
@ -703,7 +705,7 @@ void EffectEqualization::PopulateOrExchange(ShuttleGui & S)
.TickColour( { 0, 0, 0 } )
);
S.AddSpace(0, 1);
S.Prop(0).AddSpace(0, 1);
S.Prop(1).AddWindow(mdBRuler, wxEXPAND );
S.AddSpace(0, 1);
}
@ -737,7 +739,7 @@ void EffectEqualization::PopulateOrExchange(ShuttleGui & S)
S.SetBorder(0);
// -------------------------------------------------------------------
// ROW 3: Frequency ruler
// Frequency ruler below graph
// -------------------------------------------------------------------
// Column 1 is empty
@ -767,19 +769,21 @@ void EffectEqualization::PopulateOrExchange(ShuttleGui & S)
S.EndMultiColumn();
// -------------------------------------------------------------------
// ROW 3: Graphic EQ - this gets laid out horizontally in onSize
// ROW 2: Graphic EQ
// -------------------------------------------------------------------
S.StartHorizontalLay(wxEXPAND, 0);
S.SetSizerProportion(1);
S.StartHorizontalLay(wxEXPAND, 1);
{
szrG = S.GetSizer();
// Panel used to host the sliders since they will be positioned manually.
mGraphicPanel = safenew wxPanelWrapper(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, 150));
S.Prop(1).AddWindow(mGraphicPanel, wxEXPAND);
//mGraphicPanel = safenew wxPanelWrapper(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, 150));
//S.Prop(1).AddWindow(mGraphicPanel, wxEXPAND);
wxWindow *pParent = S.GetParent();
S.AddSpace(15,0);
for (int i = 0; (i < NUMBER_OF_BANDS) && (kThirdOct[i] <= mHiFreq); ++i)
{
mSliders[i] = safenew wxSliderWrapper(mGraphicPanel, ID_Slider + i, 0, -20, +20,
mSliders[i] = safenew wxSlider(pParent, ID_Slider + i, 0, -20, +20,
wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE);
mSliders[i]->Bind(wxEVT_ERASE_BACKGROUND,
@ -796,17 +800,21 @@ void EffectEqualization::PopulateOrExchange(ShuttleGui & S)
#endif
mSlidersOld[i] = 0;
mEQVals[i] = 0.;
//S.SetSizerProportion(1);
S.Prop(1).AddWindow( mSliders[i], wxEXPAND );
}
S.AddSpace(15,0);
}
S.EndHorizontalLay();
S.StartMultiColumn(7, wxALIGN_CENTER_HORIZONTAL);
// -------------------------------------------------------------------
// ROW 4: Various controls
// -------------------------------------------------------------------
S.SetSizerProportion(1);
S.Prop(1).StartMultiColumn(7, wxALIGN_CENTER_HORIZONTAL);
{
S.SetBorder(5);
// -------------------------------------------------------------------
// ROWS 4:
// -------------------------------------------------------------------
S.AddSpace(5, 5);
if( mOptions == kEqLegacy )
@ -832,7 +840,7 @@ void EffectEqualization::PopulateOrExchange(ShuttleGui & S)
S.EndHorizontalLay();
}
S.StartHorizontalLay(wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 1);
S.StartHorizontalLay(wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0);
{
szrH = S.GetSizer();
@ -862,7 +870,7 @@ void EffectEqualization::PopulateOrExchange(ShuttleGui & S)
// Filter length grouping
// -------------------------------------------------------------------
S.StartHorizontalLay(wxEXPAND, 1);
S.StartHorizontalLay(wxEXPAND, 0);
{
S.StartHorizontalLay(wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0);
{
@ -893,9 +901,6 @@ void EffectEqualization::PopulateOrExchange(ShuttleGui & S)
S.AddSpace(5, 5);
// -------------------------------------------------------------------
// ROW 5:
// -------------------------------------------------------------------
if( mOptions == kEqLegacy ){
S.AddSpace(5, 5);
S.StartHorizontalLay(wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
@ -1019,11 +1024,11 @@ void EffectEqualization::PopulateOrExchange(ShuttleGui & S)
sz += wxSize( 30, 0);
mUIParent->SetSizeHints(sz);
}
else
else{
mPanel->Show( true );
szrV->Show(szr1, true);
mUIParent->SetSizeHints(mUIParent->GetBestSize());
// szrL->SetMinSize( szrI->GetSize() );
}
return;
}
@ -1060,23 +1065,19 @@ bool EffectEqualization::TransferDataToWindow()
if( mOptions == kEqOptionGraphic)
mDrawMode = false;
if( mDraw )
mDraw->SetValue(mDrawMode);
szrV->Show(szr1,mOptions != kEqOptionGraphic); // Graph
szrV->Show(szrG,!mDrawMode); // eq sliders
szrH->Show(szrI,!mDrawMode); // interpolation choice
szrH->Show(szrL, mDrawMode); // linear freq checkbox
if( mGraphic)
mGraphic->SetValue(!mDrawMode);
mGridOnOff->Show( mDrawMode );
// Set Graphic (Fader) or Draw mode
if (mDrawMode)
{
if( mDraw )
mDraw->SetValue(true);
szrV->Show(szrG,false); // eq sliders
szrH->Show(szrI,false); // interpolation choice
szrH->Show(szrL,true); // linear freq checkbox
}
else
{
if( mGraphic)
mGraphic->SetValue(true);
szrV->Show(szr1,false);
mGridOnOff->Show( false );
if (!mDrawMode)
UpdateGraphic();
}
TransferDataFromWindow();
@ -1119,7 +1120,6 @@ bool EffectEqualization::TransferDataFromWindow()
if( w1 != w2 ) // Reduces flicker
{
mdBRuler->SetSize(wxSize(w2,h));
LayoutEQSliders();
mFreqRuler->Refresh(false);
}
mdBRuler->Refresh(false);
@ -2184,37 +2184,6 @@ void EffectEqualization::WriteXML(XMLWriter &xmlFile) const
//
///////////////////////////////////////////////////////////////////////////////
void EffectEqualization::LayoutEQSliders()
{
// layout the Graphic EQ sliders here
int sliderW = mSliders[0]->GetSize().GetWidth();
int sliderH = mGraphicPanel->GetRect().GetHeight();
#ifdef BEFORE_EQ_WAS_SPLIT
wxRect rulerR = mFreqRuler->GetRect();
int start = rulerR.GetLeft() - (sliderW / 2);
float range = rulerR.GetWidth();
#else
wxRect rulerR = mGraphicPanel->GetRect();
int start = rulerR.GetLeft() + (sliderW / 2);
float range = rulerR.GetWidth() - sliderW *1.5;
#endif
double loLog = log10(mLoFreq);
double hiLog = log10(mHiFreq);
double denom = hiLog - loLog;
for (int i = 0; (i < NUMBER_OF_BANDS) && (kThirdOct[i] <= mHiFreq); ++i)
{
// centre of this slider, from start
float posn = range * (log10(kThirdOct[i]) - loLog) / denom;
mSliders[i]->SetSize(start + (posn + 0.5), 0, sliderW, sliderH);
}
mGraphicPanel->Refresh();
}
void EffectEqualization::UpdateCurves()
{
@ -2350,20 +2319,9 @@ void EffectEqualization::UpdateGraphic()
mUIParent->Layout();
wxGetTopLevelParent(mUIParent)->Layout();
// mUIParent->Layout(); // Make all sizers get resized first
LayoutEQSliders(); // Then layout sliders
mUIParent->Layout();
wxGetTopLevelParent(mUIParent)->Layout();
// mUIParent->Layout(); // And layout again to resize dialog
#if 0
wxSize wsz = mUIParent->GetSize();
wxSize ssz = szrV->GetSize();
if (ssz.x > wsz.x || ssz.y > wsz.y)
{
mUIParent->Fit();
}
#endif
GraphicEQ(mLogEnvelope.get());
mDrawMode = false;
}
@ -2694,12 +2652,6 @@ double EffectEqualization::splint(double x[], double y[], size_t n, double y2[],
void EffectEqualization::OnSize(wxSizeEvent & event)
{
mUIParent->Layout();
if (!mDrawMode)
{
LayoutEQSliders();
}
event.Skip();
}

View File

@ -178,7 +178,7 @@ private:
void UpdateCurves();
void UpdateDraw();
void LayoutEQSliders();
//void LayoutEQSliders();
void UpdateGraphic(void);
void EnvLogToLin(void);
void EnvLinToLog(void);