Simulator: Use SIM_WORKBOOK in place of wxAuiNotebook
SIM_WORKBOOK is now a subclass of wxAuiNotebook, removing the problem of having to maintain two separate workbook states.
This commit is contained in:
committed by
Jon Evans
parent
cd0c8a5676
commit
28531a982d
@@ -206,7 +206,7 @@ SIM_PLOT_FRAME::SIM_PLOT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
|
||||
#ifndef wxHAS_NATIVE_TABART
|
||||
// Non-native default tab art has ulgy gradients we don't want
|
||||
m_plotNotebook->SetArtProvider( new wxAuiSimpleTabArt() );
|
||||
m_workbook->SetArtProvider( new wxAuiSimpleTabArt() );
|
||||
#endif
|
||||
|
||||
// Ensure new items are taken in account by sizers:
|
||||
@@ -304,7 +304,7 @@ WINDOW_SETTINGS* SIM_PLOT_FRAME::GetWindowSettings( APP_SETTINGS_BASE* aCfg )
|
||||
|
||||
void SIM_PLOT_FRAME::initWorkbook()
|
||||
{
|
||||
m_workbook = std::make_unique<SIM_WORKBOOK>();
|
||||
m_workbook->DeleteAllPages();
|
||||
|
||||
if( !m_simulator->Settings()->GetWorkbookFilename().IsEmpty() )
|
||||
{
|
||||
@@ -352,15 +352,6 @@ void SIM_PLOT_FRAME::updateTitle()
|
||||
}
|
||||
|
||||
|
||||
void SIM_PLOT_FRAME::updateWorkbook()
|
||||
{
|
||||
// We need to keep track of the plot panel positions
|
||||
for( unsigned int i = 0; i < m_plotNotebook->GetPageCount(); i++ )
|
||||
m_workbook->SetPlotPanelPosition(
|
||||
dynamic_cast<SIM_PANEL_BASE*>( m_plotNotebook->GetPage( i ) ), i );
|
||||
}
|
||||
|
||||
|
||||
void SIM_PLOT_FRAME::updateFrame()
|
||||
{
|
||||
updateTitle();
|
||||
@@ -471,7 +462,7 @@ void SIM_PLOT_FRAME::StartSimulation( const wxString& aSimCommand )
|
||||
{
|
||||
SIM_PANEL_BASE* plotPanel = currentPlotWindow();
|
||||
|
||||
if( plotPanel && m_workbook->HasPlotPanel( plotPanel ) )
|
||||
if( plotPanel && m_workbook->GetPageIndex( plotPanel ) != wxNOT_FOUND )
|
||||
m_exporter->SetSimCommand( m_workbook->GetSimCommand( plotPanel ) );
|
||||
}
|
||||
else
|
||||
@@ -518,7 +509,7 @@ SIM_PANEL_BASE* SIM_PLOT_FRAME::NewPlotPanel( wxString aSimCommand )
|
||||
if( SIM_PANEL_BASE::IsPlottable( simType ) )
|
||||
{
|
||||
SIM_PLOT_PANEL* panel;
|
||||
panel = new SIM_PLOT_PANEL( aSimCommand, m_plotNotebook, this, wxID_ANY );
|
||||
panel = new SIM_PLOT_PANEL( aSimCommand, m_workbook, this, wxID_ANY );
|
||||
|
||||
panel->GetPlotWin()->EnableMouseWheelPan(
|
||||
Pgm().GetCommonSettings()->m_Input.scroll_modifier_zoom != 0 );
|
||||
@@ -528,16 +519,14 @@ SIM_PANEL_BASE* SIM_PLOT_FRAME::NewPlotPanel( wxString aSimCommand )
|
||||
else
|
||||
{
|
||||
SIM_NOPLOT_PANEL* panel;
|
||||
panel = new SIM_NOPLOT_PANEL( aSimCommand, m_plotNotebook, wxID_ANY );
|
||||
panel = new SIM_NOPLOT_PANEL( aSimCommand, m_workbook, wxID_ANY );
|
||||
plotPanel = dynamic_cast<SIM_PANEL_BASE*>( panel );
|
||||
}
|
||||
|
||||
wxString pageTitle( m_simulator->TypeToName( simType, true ) );
|
||||
pageTitle.Prepend( wxString::Format( _( "Plot%u - " ), (unsigned int) ++m_plotNumber ) );
|
||||
|
||||
m_workbook->AddPlotPanel( plotPanel );
|
||||
|
||||
m_plotNotebook->AddPage( dynamic_cast<wxWindow*>( plotPanel ), pageTitle, true );
|
||||
m_workbook->AddPage( dynamic_cast<wxWindow*>( plotPanel ), pageTitle, true );
|
||||
|
||||
updateFrame();
|
||||
return plotPanel;
|
||||
@@ -687,18 +676,15 @@ void SIM_PLOT_FRAME::addPlot( const wxString& aName, SIM_PLOT_TYPE aType, const
|
||||
}
|
||||
|
||||
|
||||
void SIM_PLOT_FRAME::removePlot( const wxString& aPlotName, bool aErase )
|
||||
void SIM_PLOT_FRAME::removePlot( const wxString& aPlotName )
|
||||
{
|
||||
SIM_PLOT_PANEL* plotPanel = CurrentPlot();
|
||||
|
||||
if( !plotPanel )
|
||||
return;
|
||||
|
||||
if( aErase )
|
||||
m_workbook->RemoveTrace( plotPanel, aPlotName );
|
||||
|
||||
wxASSERT( plotPanel->TraceShown( aPlotName ) );
|
||||
plotPanel->DeleteTrace( aPlotName );
|
||||
m_workbook->DeleteTrace( plotPanel, aPlotName );
|
||||
plotPanel->GetPlotWin()->Fit();
|
||||
|
||||
updateSignalList();
|
||||
@@ -718,7 +704,7 @@ void SIM_PLOT_FRAME::updateNetlistExporter()
|
||||
|
||||
|
||||
bool SIM_PLOT_FRAME::updatePlot( const wxString& aName, SIM_PLOT_TYPE aType, const wxString& aParam,
|
||||
SIM_PLOT_PANEL* aPanel )
|
||||
SIM_PLOT_PANEL* aPlotPanel )
|
||||
{
|
||||
SIM_TYPE simType = m_exporter->GetSimType();
|
||||
wxString spiceVector = m_exporter->ComponentToVector( aName, aType, aParam );
|
||||
@@ -803,8 +789,9 @@ bool SIM_PLOT_FRAME::updatePlot( const wxString& aName, SIM_PLOT_TYPE aType, con
|
||||
std::vector<double> sub_y( data_y.begin() + offset,
|
||||
data_y.begin() + offset + inner );
|
||||
|
||||
if( aPanel->AddTrace( name, inner, sub_x.data(), sub_y.data(), aType, aParam ) )
|
||||
m_workbook->AddTrace( aPanel, name );
|
||||
//if( aPlotPanel->AddTrace( name, inner, sub_x.data(), sub_y.data(), aType, aParam ) )
|
||||
m_workbook->AddTrace( aPlotPanel, name, inner, sub_x.data(), sub_y.data(), aType,
|
||||
aParam );
|
||||
|
||||
v = v + source2.m_vincrement;
|
||||
offset += inner;
|
||||
@@ -814,9 +801,8 @@ bool SIM_PLOT_FRAME::updatePlot( const wxString& aName, SIM_PLOT_TYPE aType, con
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if( aPanel->AddTrace( aName, size, data_x.data(), data_y.data(), aType, aParam ) )
|
||||
m_workbook->AddTrace( aPanel, aName );
|
||||
|
||||
m_workbook->AddTrace( aPlotPanel, aName, size, data_x.data(), data_y.data(), aType, aParam );
|
||||
|
||||
updateFrame();
|
||||
return true;
|
||||
@@ -930,8 +916,7 @@ void SIM_PLOT_FRAME::applyTuners()
|
||||
|
||||
bool SIM_PLOT_FRAME::loadWorkbook( const wxString& aPath )
|
||||
{
|
||||
m_workbook->Clear();
|
||||
m_plotNotebook->DeleteAllPages();
|
||||
m_workbook->DeleteAllPages();
|
||||
|
||||
wxTextFile file( aPath );
|
||||
|
||||
@@ -1034,26 +1019,26 @@ bool SIM_PLOT_FRAME::saveWorkbook( const wxString& aPath )
|
||||
file.Create();
|
||||
}
|
||||
|
||||
std::vector<const SIM_PANEL_BASE*> plotPanels = m_workbook->GetSortedPlotPanels();
|
||||
file.AddLine( wxString::Format( "%llu", m_workbook->GetPageCount() ) );
|
||||
|
||||
file.AddLine( wxString::Format( "%llu", plotPanels.size() ) );
|
||||
|
||||
for( const SIM_PANEL_BASE*& plotPanel : plotPanels )
|
||||
for( size_t i = 0; i < m_workbook->GetPageCount(); i++ )
|
||||
{
|
||||
file.AddLine( wxString::Format( "%d", plotPanel->GetType() ) );
|
||||
file.AddLine( m_workbook->GetSimCommand( plotPanel ) );
|
||||
const SIM_PANEL_BASE* basePanel = dynamic_cast<const SIM_PANEL_BASE*>( m_workbook->GetPage( i ) );
|
||||
|
||||
const SIM_PLOT_PANEL* panel = dynamic_cast<const SIM_PLOT_PANEL*>( plotPanel );
|
||||
file.AddLine( wxString::Format( "%d", basePanel->GetType() ) );
|
||||
file.AddLine( m_workbook->GetSimCommand( basePanel ) );
|
||||
|
||||
if( !panel )
|
||||
const SIM_PLOT_PANEL* plotPanel = dynamic_cast<const SIM_PLOT_PANEL*>( basePanel );
|
||||
|
||||
if( !plotPanel )
|
||||
{
|
||||
file.AddLine( wxString::Format( "%llu", 0ull ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
file.AddLine( wxString::Format( "%llu", panel->GetTraces().size() ) );
|
||||
file.AddLine( wxString::Format( "%llu", plotPanel->GetTraces().size() ) );
|
||||
|
||||
for( const auto& trace : panel->GetTraces() )
|
||||
for( const auto& trace : plotPanel->GetTraces() )
|
||||
{
|
||||
file.AddLine( wxString::Format( "%d", trace.second->GetType() ) );
|
||||
file.AddLine( trace.second->GetName() );
|
||||
@@ -1293,9 +1278,9 @@ void SIM_PLOT_FRAME::menuWhiteBackground( wxCommandEvent& event )
|
||||
SIM_PLOT_COLORS::FillDefaultColorList( GetPlotBgOpt() );
|
||||
|
||||
// Now send changes to all SIM_PLOT_PANEL
|
||||
for( size_t page = 0; page < m_plotNotebook->GetPageCount(); page++ )
|
||||
for( size_t page = 0; page < m_workbook->GetPageCount(); page++ )
|
||||
{
|
||||
wxWindow* curPage = m_plotNotebook->GetPage( page );
|
||||
wxWindow* curPage = m_workbook->GetPage( page );
|
||||
|
||||
// ensure it is truly a plot panel and not the (zero plots) placeholder
|
||||
// which is only SIM_PLOT_PANEL_BASE
|
||||
@@ -1314,9 +1299,6 @@ void SIM_PLOT_FRAME::onPlotClose( wxAuiNotebookEvent& event )
|
||||
if( idx == wxNOT_FOUND )
|
||||
return;
|
||||
|
||||
SIM_PANEL_BASE* plotPanel = dynamic_cast<SIM_PANEL_BASE*>( m_plotNotebook->GetPage( idx ) );
|
||||
|
||||
m_workbook->RemovePlotPanel( plotPanel );
|
||||
wxCommandEvent dummy;
|
||||
onCursorUpdate( dummy );
|
||||
}
|
||||
@@ -1324,7 +1306,6 @@ void SIM_PLOT_FRAME::onPlotClose( wxAuiNotebookEvent& event )
|
||||
|
||||
void SIM_PLOT_FRAME::onPlotClosed( wxAuiNotebookEvent& event )
|
||||
{
|
||||
updateWorkbook();
|
||||
updateFrame();
|
||||
}
|
||||
|
||||
@@ -1335,14 +1316,12 @@ void SIM_PLOT_FRAME::onPlotChanged( wxAuiNotebookEvent& event )
|
||||
wxCommandEvent dummy;
|
||||
onCursorUpdate( dummy );
|
||||
|
||||
updateWorkbook();
|
||||
updateFrame();
|
||||
}
|
||||
|
||||
|
||||
void SIM_PLOT_FRAME::onPlotDragged( wxAuiNotebookEvent& event )
|
||||
{
|
||||
updateWorkbook();
|
||||
updateFrame();
|
||||
}
|
||||
|
||||
@@ -1400,14 +1379,14 @@ void SIM_PLOT_FRAME::onSettings( wxCommandEvent& event )
|
||||
return;
|
||||
}
|
||||
|
||||
if( m_workbook->HasPlotPanel( plotPanelWindow ) )
|
||||
if( m_workbook->GetPageIndex( plotPanelWindow ) != wxNOT_FOUND )
|
||||
m_settingsDlg->SetSimCommand( m_workbook->GetSimCommand( plotPanelWindow ) );
|
||||
|
||||
if( m_settingsDlg->ShowModal() == wxID_OK )
|
||||
{
|
||||
wxString oldCommand;
|
||||
|
||||
if( m_workbook->HasPlotPanel( plotPanelWindow ) )
|
||||
if( m_workbook->GetPageIndex( plotPanelWindow ) != wxNOT_FOUND )
|
||||
oldCommand = m_workbook->GetSimCommand( plotPanelWindow );
|
||||
else
|
||||
oldCommand = wxString();
|
||||
@@ -1681,10 +1660,7 @@ void SIM_PLOT_FRAME::onSimFinished( wxCommandEvent& aEvent )
|
||||
for( auto& trace : traceInfo )
|
||||
{
|
||||
if( !updatePlot( trace.m_name, trace.m_type, trace.m_param, plotPanel ) )
|
||||
{
|
||||
removePlot( trace.m_name, false );
|
||||
m_workbook->RemoveTrace( plotPanel, trace.m_name );
|
||||
}
|
||||
removePlot( trace.m_name );
|
||||
}
|
||||
|
||||
updateSignalList();
|
||||
|
||||
Reference in New Issue
Block a user