Simulator frame: fix a min size for panels, and now stores in config the position and size of the frame and panels

This commit is contained in:
jean-pierre charras 2016-12-02 15:34:23 +01:00
parent c6cbc9ec95
commit 54c5f6bbb0
5 changed files with 336 additions and 233 deletions

View File

@ -120,6 +120,9 @@ SIM_PLOT_FRAME::SIM_PLOT_FRAME( KIWAY* aKiway, wxWindow* aParent )
icon.CopyFromBitmap( KiBitmap( simulator_xpm ) );
SetIcon( icon );
// Get the previous size and position of windows:
LoadSettings( config() );
m_simulator = SPICE_SIMULATOR::CreateInstance( "ngspice" );
if( !m_simulator )
@ -159,11 +162,16 @@ SIM_PLOT_FRAME::SIM_PLOT_FRAME( KIWAY* aKiway, wxWindow* aParent )
m_toolSettings = m_toolBar->AddTool( wxID_ANY, _( "Settings" ),
KiBitmap( sim_settings_xpm ), _( "Simulation settings" ), wxITEM_NORMAL );
Connect( m_toolSimulate->GetId(), wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler( SIM_PLOT_FRAME::onSimulate ), NULL, this );
Connect( m_toolAddSignals->GetId(), wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler( SIM_PLOT_FRAME::onAddSignal ), NULL, this );
Connect( m_toolProbe->GetId(), wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler( SIM_PLOT_FRAME::onProbe ), NULL, this );
Connect( m_toolTune->GetId(), wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler( SIM_PLOT_FRAME::onTune ), NULL, this );
Connect( m_toolSettings->GetId(), wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler( SIM_PLOT_FRAME::onSettings ), NULL, this );
Connect( m_toolSimulate->GetId(), wxEVT_COMMAND_TOOL_CLICKED,
wxCommandEventHandler( SIM_PLOT_FRAME::onSimulate ), NULL, this );
Connect( m_toolAddSignals->GetId(), wxEVT_COMMAND_TOOL_CLICKED,
wxCommandEventHandler( SIM_PLOT_FRAME::onAddSignal ), NULL, this );
Connect( m_toolProbe->GetId(), wxEVT_COMMAND_TOOL_CLICKED,
wxCommandEventHandler( SIM_PLOT_FRAME::onProbe ), NULL, this );
Connect( m_toolTune->GetId(), wxEVT_COMMAND_TOOL_CLICKED,
wxCommandEventHandler( SIM_PLOT_FRAME::onTune ), NULL, this );
Connect( m_toolSettings->GetId(), wxEVT_COMMAND_TOOL_CLICKED,
wxCommandEventHandler( SIM_PLOT_FRAME::onSettings ), NULL, this );
// Bind toolbar buttons event to existing menu event handlers, so they behave the same
Bind( wxEVT_COMMAND_MENU_SELECTED, &SIM_PLOT_FRAME::onSimulate, this, m_runSimulation->GetId() );
@ -178,8 +186,16 @@ SIM_PLOT_FRAME::SIM_PLOT_FRAME( KIWAY* aKiway, wxWindow* aParent )
// the settings dialog will be created later, on demand.
// if created in the ctor, for some obscure reason, there is an issue
// on Windows: when open it, the simulator frame is sent to the background.
// instead of beeing behind the dialog frame (as it does)
// instead of being behind the dialog frame (as it does)
m_settingsDlg = NULL;
// resize the subwindows size. At least on Windows, calling wxSafeYield before
// resizing the subwindows forces the wxSplitWindows size events automatically generated
// by wxWidgets to be executed before our resize code.
// Otherwise, the changes made by setSubWindowsSashSize are overwritten by one these
// events
wxSafeYield();
setSubWindowsSashSize();
}
@ -193,6 +209,53 @@ SIM_PLOT_FRAME::~SIM_PLOT_FRAME()
m_settingsDlg->Destroy();
}
#define PLOT_PANEL_WIDTH_ENTRY "SimPlotPanelWidth"
#define PLOT_PANEL_HEIGHT_ENTRY "SimPlotPanelHeight"
#define SIGNALS_PANEL_HEIGHT_ENTRY "SimSignalPanelHeight"
#define CURSORS_PANEL_HEIGHT_ENTRY "SimCursorsPanelHeight"
void SIM_PLOT_FRAME::SaveSettings( wxConfigBase* aCfg )
{
// Save main frame size and position:
EDA_BASE_FRAME::SaveSettings( aCfg );
// Save subwindows sizes
aCfg->Write( PLOT_PANEL_WIDTH_ENTRY, m_splitterLeftRight->GetSashPosition() );
aCfg->Write( PLOT_PANEL_HEIGHT_ENTRY, m_splitterPlotAndConsole->GetSashPosition() );
aCfg->Write( SIGNALS_PANEL_HEIGHT_ENTRY, m_splitterSignals->GetSashPosition() );
aCfg->Write( CURSORS_PANEL_HEIGHT_ENTRY, m_splitterTuneValues->GetSashPosition() );
}
void SIM_PLOT_FRAME::LoadSettings( wxConfigBase* aCfg )
{
// Read main frame size and position:
EDA_BASE_FRAME::LoadSettings( aCfg );
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
// Read subwindows sizes (should be > 0 )
aCfg->Read( PLOT_PANEL_WIDTH_ENTRY, &m_splitterLeftRightSashPosition, -1 );
aCfg->Read( PLOT_PANEL_HEIGHT_ENTRY, &m_splitterPlotAndConsoleSashPosition, -1 );
aCfg->Read( SIGNALS_PANEL_HEIGHT_ENTRY, &m_splitterSignalsSashPosition, -1 );
aCfg->Read( CURSORS_PANEL_HEIGHT_ENTRY, &m_splitterTuneValuesSashPosition, -1 );
}
void SIM_PLOT_FRAME::setSubWindowsSashSize()
{
if( m_splitterLeftRightSashPosition > 0 )
m_splitterLeftRight->SetSashPosition( m_splitterLeftRightSashPosition );
if( m_splitterPlotAndConsoleSashPosition > 0 )
m_splitterPlotAndConsole->SetSashPosition( m_splitterPlotAndConsoleSashPosition );
if( m_splitterSignalsSashPosition > 0 )
m_splitterSignals->SetSashPosition( m_splitterSignalsSashPosition );
if( m_splitterTuneValuesSashPosition > 0 )
m_splitterTuneValues->SetSashPosition( m_splitterTuneValuesSashPosition );
}
void SIM_PLOT_FRAME::StartSimulation()
{
@ -998,6 +1061,8 @@ void SIM_PLOT_FRAME::onTune( wxCommandEvent& event )
void SIM_PLOT_FRAME::onClose( wxCloseEvent& aEvent )
{
SaveSettings( config() );
if( IsSimulationRunning() )
m_simulator->Stop();

View File

@ -153,6 +153,9 @@ public:
SIM_PLOT_PANEL* CurrentPlot() const;
private:
void LoadSettings( wxConfigBase* aCfg ) override;
void SaveSettings( wxConfigBase* aCfg ) override;
/**
* @brief Adds a new plot to the current panel.
* @param aName is the device/net name.
@ -263,6 +266,12 @@ private:
void onSimStarted( wxCommandEvent& aEvent );
void onSimFinished( wxCommandEvent& aEvent );
// adjust the sash dimension of splitter windows after reading
// the config settings
// must be called after the config settings are read, and once the
// frame is initialized (end of the Ctor)
void setSubWindowsSashSize();
// Toolbar buttons
wxToolBarToolBase* m_toolSimulate;
wxToolBarToolBase* m_toolAddSignals;
@ -327,6 +336,12 @@ private:
///> A string to store the path of saved workbooks during a session
static wxString m_savedWorkbooksPath;
// Variables for temporary storage:
int m_splitterLeftRightSashPosition;
int m_splitterPlotAndConsoleSashPosition;
int m_splitterSignalsSashPosition;
int m_splitterTuneValuesSashPosition;
};
// Commands

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Nov 30 2016)
// C++ code generated with wxFormBuilder (version Sep 8 2016)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
@ -11,245 +11,264 @@
SIM_PLOT_FRAME_BASE::SIM_PLOT_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : KIWAY_PLAYER( parent, id, title, pos, size, style, name )
{
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
this->SetSizeHints( wxSize( 600,500 ), wxDefaultSize );
m_mainMenu = new wxMenuBar( 0 );
m_fileMenu = new wxMenu();
wxMenuItem* m_newPlot;
m_newPlot = new wxMenuItem( m_fileMenu, wxID_NEW, wxString( _("New Plot") ) , wxEmptyString, wxITEM_NORMAL );
m_fileMenu->Append( m_newPlot );
m_fileMenu->AppendSeparator();
wxMenuItem* m_openWorkbook;
m_openWorkbook = new wxMenuItem( m_fileMenu, wxID_OPEN, wxString( _("Open Workbook") ) , wxEmptyString, wxITEM_NORMAL );
m_fileMenu->Append( m_openWorkbook );
wxMenuItem* m_saveWorkbook;
m_saveWorkbook = new wxMenuItem( m_fileMenu, wxID_SAVE, wxString( _("Save Workbook") ) , wxEmptyString, wxITEM_NORMAL );
m_fileMenu->Append( m_saveWorkbook );
m_fileMenu->AppendSeparator();
wxMenuItem* m_saveImage;
m_saveImage = new wxMenuItem( m_fileMenu, wxID_ANY, wxString( _("Save as image") ) , wxEmptyString, wxITEM_NORMAL );
m_fileMenu->Append( m_saveImage );
wxMenuItem* m_saveCsv;
m_saveCsv = new wxMenuItem( m_fileMenu, wxID_ANY, wxString( _("Save as .csv file") ) , wxEmptyString, wxITEM_NORMAL );
m_fileMenu->Append( m_saveCsv );
m_fileMenu->AppendSeparator();
wxMenuItem* m_exitSim;
m_exitSim = new wxMenuItem( m_fileMenu, wxID_CLOSE, wxString( _("Exit Simulation") ) , wxEmptyString, wxITEM_NORMAL );
m_fileMenu->Append( m_exitSim );
m_mainMenu->Append( m_fileMenu, _("File") );
m_mainMenu->Append( m_fileMenu, _("File") );
m_simulationMenu = new wxMenu();
m_runSimulation = new wxMenuItem( m_simulationMenu, wxID_ANY, wxString( _("Run Simulation") ) , wxEmptyString, wxITEM_NORMAL );
m_simulationMenu->Append( m_runSimulation );
m_simulationMenu->AppendSeparator();
m_addSignals = new wxMenuItem( m_simulationMenu, wxID_ANY, wxString( _("Add signals...") ) , wxEmptyString, wxITEM_NORMAL );
m_simulationMenu->Append( m_addSignals );
m_probeSignals = new wxMenuItem( m_simulationMenu, wxID_ANY, wxString( _("Probe from schematics") ) , wxEmptyString, wxITEM_NORMAL );
m_simulationMenu->Append( m_probeSignals );
m_tuneValue = new wxMenuItem( m_simulationMenu, wxID_ANY, wxString( _("Tune component value") ) , wxEmptyString, wxITEM_NORMAL );
m_simulationMenu->Append( m_tuneValue );
m_simulationMenu->AppendSeparator();
m_settings = new wxMenuItem( m_simulationMenu, wxID_ANY, wxString( _("Settings...") ) , wxEmptyString, wxITEM_NORMAL );
m_simulationMenu->Append( m_settings );
m_mainMenu->Append( m_simulationMenu, _("Simulation") );
m_mainMenu->Append( m_simulationMenu, _("Simulation") );
m_viewMenu = new wxMenu();
wxMenuItem* m_zoomIn;
m_zoomIn = new wxMenuItem( m_viewMenu, wxID_ZOOM_IN, wxString( _("Zoom In") ) , wxEmptyString, wxITEM_NORMAL );
m_viewMenu->Append( m_zoomIn );
wxMenuItem* m_zoomOut;
m_zoomOut = new wxMenuItem( m_viewMenu, wxID_ZOOM_OUT, wxString( _("Zoom Out") ) , wxEmptyString, wxITEM_NORMAL );
m_viewMenu->Append( m_zoomOut );
wxMenuItem* m_zoomFit;
m_zoomFit = new wxMenuItem( m_viewMenu, wxID_ZOOM_FIT, wxString( _("Fit on Screen") ) , wxEmptyString, wxITEM_NORMAL );
m_viewMenu->Append( m_zoomFit );
m_viewMenu->AppendSeparator();
wxMenuItem* m_showGrid;
m_showGrid = new wxMenuItem( m_viewMenu, wxID_ANY, wxString( _("Show &grid") ) , wxEmptyString, wxITEM_CHECK );
m_viewMenu->Append( m_showGrid );
wxMenuItem* m_showLegend;
m_showLegend = new wxMenuItem( m_viewMenu, wxID_ANY, wxString( _("Show &legend") ) , wxEmptyString, wxITEM_CHECK );
m_viewMenu->Append( m_showLegend );
m_mainMenu->Append( m_viewMenu, _("View") );
m_mainMenu->Append( m_viewMenu, _("View") );
this->SetMenuBar( m_mainMenu );
m_sizer1 = new wxBoxSizer( wxVERTICAL );
m_toolBar = new wxToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTB_FLAT|wxTB_HORIZONTAL|wxTB_TEXT );
m_toolBar->Realize();
m_sizer1->Add( m_toolBar, 0, wxEXPAND, 5 );
m_splitterPlot = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D );
m_splitterPlot->SetSashGravity( 0.8 );
m_splitterPlot->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterPlotOnIdle ), NULL, this );
m_panel2 = new wxPanel( m_splitterPlot, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_sizerMain = new wxBoxSizer( wxVERTICAL );
m_toolBar = new wxToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTB_FLAT|wxTB_HORIZONTAL|wxTB_TEXT );
m_toolBar->Realize();
m_sizerMain->Add( m_toolBar, 0, wxEXPAND, 5 );
m_splitterLeftRight = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D );
m_splitterLeftRight->SetSashGravity( 0.7 );
m_splitterLeftRight->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterLeftRightOnIdle ), NULL, this );
m_splitterLeftRight->SetMinimumPaneSize( 50 );
m_panelLeft = new wxPanel( m_splitterLeftRight, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panelLeft->SetMinSize( wxSize( 300,-1 ) );
m_sizer11 = new wxBoxSizer( wxVERTICAL );
m_splitterConsole = new wxSplitterWindow( m_panel2, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D );
m_splitterConsole->SetSashGravity( 0.8 );
m_splitterConsole->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterConsoleOnIdle ), NULL, this );
m_plotPanel = new wxPanel( m_splitterConsole, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_sizer5 = new wxBoxSizer( wxHORIZONTAL );
m_splitterPlotAndConsole = new wxSplitterWindow( m_panelLeft, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D );
m_splitterPlotAndConsole->SetSashGravity( 0.8 );
m_splitterPlotAndConsole->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterPlotAndConsoleOnIdle ), NULL, this );
m_splitterPlotAndConsole->SetMinimumPaneSize( 50 );
m_plotPanel = new wxPanel( m_splitterPlotAndConsole, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_plotPanel->SetMinSize( wxSize( -1,200 ) );
m_sizerPlot = new wxBoxSizer( wxHORIZONTAL );
m_plotNotebook = new wxAuiNotebook( m_plotPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_NB_MIDDLE_CLICK_CLOSE|wxAUI_NB_TAB_MOVE|wxAUI_NB_TAB_SPLIT|wxAUI_NB_TOP );
m_welcomePanel = new wxPanel( m_plotNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_sizer8 = new wxBoxSizer( wxVERTICAL );
m_sizer8->Add( 0, 0, 1, wxEXPAND, 5 );
wxBoxSizer* bSizer81;
bSizer81 = new wxBoxSizer( wxHORIZONTAL );
bSizer81->Add( 0, 0, 1, wxEXPAND, 5 );
m_staticText2 = new wxStaticText( m_welcomePanel, wxID_ANY, _("Start the simulation by clicking the Run Simulation button"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText2->Wrap( -1 );
m_staticText2->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
m_staticText2->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
m_staticText2->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
bSizer81->Add( m_staticText2, 0, wxALIGN_RIGHT|wxALL|wxEXPAND, 5 );
bSizer81->Add( 0, 0, 1, wxEXPAND, 5 );
m_sizer8->Add( bSizer81, 0, wxEXPAND, 5 );
m_sizer8->Add( 0, 0, 1, wxEXPAND, 5 );
m_welcomePanel->SetSizer( m_sizer8 );
m_welcomePanel->Layout();
m_sizer8->Fit( m_welcomePanel );
m_plotNotebook->AddPage( m_welcomePanel, _("a page"), false, wxNullBitmap );
m_sizer5->Add( m_plotNotebook, 1, wxEXPAND | wxALL, 5 );
m_plotPanel->SetSizer( m_sizer5 );
m_sizerPlot->Add( m_plotNotebook, 1, wxEXPAND | wxALL, 5 );
m_plotPanel->SetSizer( m_sizerPlot );
m_plotPanel->Layout();
m_sizer5->Fit( m_plotPanel );
m_panel5 = new wxPanel( m_splitterConsole, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_sizer13 = new wxBoxSizer( wxVERTICAL );
m_simConsole = new wxTextCtrl( m_panel5, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY );
m_simConsole->SetMaxLength( 0 );
m_simConsole->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 76, 90, 90, false, wxEmptyString ) );
m_sizer13->Add( m_simConsole, 1, wxALL|wxEXPAND, 5 );
m_panel5->SetSizer( m_sizer13 );
m_panel5->Layout();
m_sizer13->Fit( m_panel5 );
m_splitterConsole->SplitHorizontally( m_plotPanel, m_panel5, 500 );
m_sizer11->Add( m_splitterConsole, 1, wxEXPAND, 5 );
m_panel2->SetSizer( m_sizer11 );
m_panel2->Layout();
m_sizer11->Fit( m_panel2 );
m_sidePanel = new wxPanel( m_splitterPlot, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_sizerPlot->Fit( m_plotPanel );
m_panelConsole = new wxPanel( m_splitterPlotAndConsole, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panelConsole->SetMinSize( wxSize( -1,100 ) );
m_sizerConsole = new wxBoxSizer( wxVERTICAL );
m_simConsole = new wxTextCtrl( m_panelConsole, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY );
m_simConsole->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) );
m_sizerConsole->Add( m_simConsole, 1, wxALL|wxEXPAND, 5 );
m_panelConsole->SetSizer( m_sizerConsole );
m_panelConsole->Layout();
m_sizerConsole->Fit( m_panelConsole );
m_splitterPlotAndConsole->SplitHorizontally( m_plotPanel, m_panelConsole, 500 );
m_sizer11->Add( m_splitterPlotAndConsole, 1, wxEXPAND, 5 );
m_panelLeft->SetSizer( m_sizer11 );
m_panelLeft->Layout();
m_sizer11->Fit( m_panelLeft );
m_sidePanel = new wxPanel( m_splitterLeftRight, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_sidePanel->SetMinSize( wxSize( 200,-1 ) );
m_sideSizer = new wxBoxSizer( wxVERTICAL );
m_splitter3 = new wxSplitterWindow( m_sidePanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D );
m_splitter3->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitter3OnIdle ), NULL, this );
m_splitter3->SetMinimumPaneSize( 10 );
m_panel6 = new wxPanel( m_splitter3, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_splitterSignals = new wxSplitterWindow( m_sidePanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D );
m_splitterSignals->SetSashGravity( 0.3 );
m_splitterSignals->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterSignalsOnIdle ), NULL, this );
m_splitterSignals->SetMinimumPaneSize( 20 );
m_panelSignals = new wxPanel( m_splitterSignals, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panelSignals->SetMinSize( wxSize( -1,100 ) );
wxStaticBoxSizer* sbSizer1;
sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( m_panel6, wxID_ANY, _("Signals") ), wxVERTICAL );
m_signals = new wxListView( m_panel6, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_SINGLE_SEL );
sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( m_panelSignals, wxID_ANY, _("Signals") ), wxVERTICAL );
m_signals = new wxListView( sbSizer1->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_SINGLE_SEL );
sbSizer1->Add( m_signals, 1, wxALL|wxEXPAND, 5 );
m_panel6->SetSizer( sbSizer1 );
m_panel6->Layout();
sbSizer1->Fit( m_panel6 );
m_panel9 = new wxPanel( m_splitter3, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panelSignals->SetSizer( sbSizer1 );
m_panelSignals->Layout();
sbSizer1->Fit( m_panelSignals );
m_panelCursorsAndTune = new wxPanel( m_splitterSignals, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panelCursorsAndTune->SetMinSize( wxSize( -1,300 ) );
wxBoxSizer* bSizer9;
bSizer9 = new wxBoxSizer( wxVERTICAL );
m_splitter5 = new wxSplitterWindow( m_panel9, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D );
m_splitter5->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitter5OnIdle ), NULL, this );
m_splitter5->SetMinimumPaneSize( 10 );
m_panel10 = new wxPanel( m_splitter5, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_splitterTuneValues = new wxSplitterWindow( m_panelCursorsAndTune, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D );
m_splitterTuneValues->SetSashGravity( 0.5 );
m_splitterTuneValues->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterTuneValuesOnIdle ), NULL, this );
m_splitterTuneValues->SetMinimumPaneSize( 20 );
m_panelCursors = new wxPanel( m_splitterTuneValues, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panelCursors->SetMinSize( wxSize( -1,100 ) );
wxStaticBoxSizer* sbSizer3;
sbSizer3 = new wxStaticBoxSizer( new wxStaticBox( m_panel10, wxID_ANY, _("Cursors") ), wxVERTICAL );
m_cursors = new wxListCtrl( m_panel10, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL );
sbSizer3 = new wxStaticBoxSizer( new wxStaticBox( m_panelCursors, wxID_ANY, _("Cursors") ), wxVERTICAL );
m_cursors = new wxListCtrl( sbSizer3->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL );
sbSizer3->Add( m_cursors, 1, wxALL|wxEXPAND, 5 );
m_panel10->SetSizer( sbSizer3 );
m_panel10->Layout();
sbSizer3->Fit( m_panel10 );
m_tunePanel = new wxPanel( m_splitter5, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
sbSizer4 = new wxStaticBoxSizer( new wxStaticBox( m_tunePanel, wxID_ANY, _("Tune") ), wxVERTICAL );
m_panelCursors->SetSizer( sbSizer3 );
m_panelCursors->Layout();
sbSizer3->Fit( m_panelCursors );
m_tunePanel = new wxPanel( m_splitterTuneValues, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_tunePanel->SetMinSize( wxSize( -1,200 ) );
m_tuneSizerStb = new wxStaticBoxSizer( new wxStaticBox( m_tunePanel, wxID_ANY, _("Tune") ), wxHORIZONTAL );
m_tuneSizer = new wxBoxSizer( wxHORIZONTAL );
sbSizer4->Add( m_tuneSizer, 1, wxEXPAND, 5 );
m_tunePanel->SetSizer( sbSizer4 );
m_tuneSizerStb->Add( m_tuneSizer, 1, wxEXPAND, 5 );
m_tunePanel->SetSizer( m_tuneSizerStb );
m_tunePanel->Layout();
sbSizer4->Fit( m_tunePanel );
m_splitter5->SplitHorizontally( m_panel10, m_tunePanel, 0 );
bSizer9->Add( m_splitter5, 1, wxEXPAND, 5 );
m_panel9->SetSizer( bSizer9 );
m_panel9->Layout();
bSizer9->Fit( m_panel9 );
m_splitter3->SplitHorizontally( m_panel6, m_panel9, 0 );
m_sideSizer->Add( m_splitter3, 1, wxEXPAND, 5 );
m_tuneSizerStb->Fit( m_tunePanel );
m_splitterTuneValues->SplitHorizontally( m_panelCursors, m_tunePanel, 0 );
bSizer9->Add( m_splitterTuneValues, 1, wxEXPAND, 5 );
m_panelCursorsAndTune->SetSizer( bSizer9 );
m_panelCursorsAndTune->Layout();
bSizer9->Fit( m_panelCursorsAndTune );
m_splitterSignals->SplitHorizontally( m_panelSignals, m_panelCursorsAndTune, 0 );
m_sideSizer->Add( m_splitterSignals, 1, wxEXPAND, 5 );
m_sidePanel->SetSizer( m_sideSizer );
m_sidePanel->Layout();
m_sideSizer->Fit( m_sidePanel );
m_splitterPlot->SplitVertically( m_panel2, m_sidePanel, 700 );
m_sizer1->Add( m_splitterPlot, 1, wxEXPAND, 5 );
this->SetSizer( m_sizer1 );
m_splitterLeftRight->SplitVertically( m_panelLeft, m_sidePanel, 700 );
m_sizerMain->Add( m_splitterLeftRight, 1, wxEXPAND, 5 );
this->SetSizer( m_sizerMain );
this->Layout();
this->Centre( wxBOTH );
// Connect Events
this->Connect( m_newPlot->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuNewPlot ) );
this->Connect( m_openWorkbook->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuOpenWorkbook ) );
@ -290,5 +309,5 @@ SIM_PLOT_FRAME_BASE::~SIM_PLOT_FRAME_BASE()
m_plotNotebook->Disconnect( wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, wxAuiNotebookEventHandler( SIM_PLOT_FRAME_BASE::onPlotClose ), NULL, this );
m_signals->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SIM_PLOT_FRAME_BASE::onSignalDblClick ), NULL, this );
m_signals->Disconnect( wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, wxListEventHandler( SIM_PLOT_FRAME_BASE::onSignalRClick ), NULL, this );
}

View File

@ -41,13 +41,13 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="minimum_size">600,500</property>
<property name="name">SIM_PLOT_FRAME_BASE</property>
<property name="pos"></property>
<property name="size">1000,700</property>
<property name="size">883,594</property>
<property name="style">wxDEFAULT_FRAME_STYLE</property>
<property name="subclass">KIWAY_PLAYER; kiway_player.h</property>
<property name="title">Simulation Workbook</property>
<property name="title">Spice Simulator</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name">SIM_PLOT_FRAME</property>
@ -415,7 +415,7 @@
</object>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">m_sizer1</property>
<property name="name">m_sizerMain</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">protected</property>
<object class="sizeritem" expanded="0">
@ -538,12 +538,12 @@
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_pane_size">0</property>
<property name="min_pane_size">50</property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_splitterPlot</property>
<property name="name">m_splitterLeftRight</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -551,7 +551,7 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="sashgravity">0.8</property>
<property name="sashgravity">0.7</property>
<property name="sashpos">700</property>
<property name="sashsize">-1</property>
<property name="show">1</property>
@ -625,9 +625,9 @@
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="minimum_size">300,-1</property>
<property name="moveable">1</property>
<property name="name">m_panel2</property>
<property name="name">m_panelLeft</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -706,12 +706,12 @@
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_pane_size">0</property>
<property name="min_pane_size">50</property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_splitterConsole</property>
<property name="name">m_splitterPlotAndConsole</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -793,7 +793,7 @@
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="minimum_size">-1,200</property>
<property name="moveable">1</property>
<property name="name">m_plotPanel</property>
<property name="pane_border">1</property>
@ -836,7 +836,7 @@
<event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">m_sizer5</property>
<property name="name">m_sizerPlot</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">protected</property>
<object class="sizeritem" expanded="0">
@ -905,6 +905,7 @@
<event name="OnAuiNotebookPageChanged">onPlotChanged</event>
<event name="OnAuiNotebookPageChanging"></event>
<event name="OnAuiNotebookPageClose">onPlotClose</event>
<event name="OnAuiNotebookPageClosed"></event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@ -1187,9 +1188,9 @@
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="minimum_size">-1,100</property>
<property name="moveable">1</property>
<property name="name">m_panel5</property>
<property name="name">m_panelConsole</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -1230,7 +1231,7 @@
<event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">m_sizer13</property>
<property name="name">m_sizerConsole</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">protected</property>
<object class="sizeritem" expanded="0">
@ -1366,7 +1367,7 @@
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="minimum_size">200,-1</property>
<property name="moveable">1</property>
<property name="name">m_sidePanel</property>
<property name="pane_border">1</property>
@ -1447,12 +1448,12 @@
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_pane_size">10</property>
<property name="min_pane_size">20</property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_splitter3</property>
<property name="name">m_splitterSignals</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -1460,7 +1461,7 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="sashgravity">0.0</property>
<property name="sashgravity">0.3</property>
<property name="sashpos">0</property>
<property name="sashsize">-1</property>
<property name="show">1</property>
@ -1534,9 +1535,9 @@
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="minimum_size">-1,100</property>
<property name="moveable">1</property>
<property name="name">m_panel6</property>
<property name="name">m_panelSignals</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -1581,13 +1582,14 @@
<property name="minimum_size"></property>
<property name="name">sbSizer1</property>
<property name="orient">wxVERTICAL</property>
<property name="parent">1</property>
<property name="permission">none</property>
<event name="OnUpdateUI"></event>
<object class="sizeritem" expanded="1">
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxListCtrl" expanded="1">
<object class="wxListCtrl" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -1725,9 +1727,9 @@
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="minimum_size">-1,300</property>
<property name="moveable">1</property>
<property name="name">m_panel9</property>
<property name="name">m_panelCursorsAndTune</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -1806,12 +1808,12 @@
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_pane_size">10</property>
<property name="min_pane_size">20</property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_splitter5</property>
<property name="name">m_splitterTuneValues</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -1819,7 +1821,7 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="sashgravity">0.0</property>
<property name="sashgravity">0.5</property>
<property name="sashpos">0</property>
<property name="sashsize">-1</property>
<property name="show">1</property>
@ -1893,9 +1895,9 @@
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="minimum_size">-1,100</property>
<property name="moveable">1</property>
<property name="name">m_panel10</property>
<property name="name">m_panelCursors</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -1940,6 +1942,7 @@
<property name="minimum_size"></property>
<property name="name">sbSizer3</property>
<property name="orient">wxVERTICAL</property>
<property name="parent">1</property>
<property name="permission">none</property>
<event name="OnUpdateUI"></event>
<object class="sizeritem" expanded="0">
@ -2084,7 +2087,7 @@
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="minimum_size">-1,200</property>
<property name="moveable">1</property>
<property name="name">m_tunePanel</property>
<property name="pane_border">1</property>
@ -2129,15 +2132,16 @@
<property name="id">wxID_ANY</property>
<property name="label">Tune</property>
<property name="minimum_size"></property>
<property name="name">sbSizer4</property>
<property name="orient">wxVERTICAL</property>
<property name="name">m_tuneSizerStb</property>
<property name="orient">wxHORIZONTAL</property>
<property name="parent">1</property>
<property name="permission">protected</property>
<event name="OnUpdateUI"></event>
<object class="sizeritem" expanded="0">
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="0">
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">m_tuneSizer</property>
<property name="orient">wxHORIZONTAL</property>

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Nov 30 2016)
// C++ code generated with wxFormBuilder (version Sep 8 2016)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
@ -44,7 +44,7 @@ class wxListView;
class SIM_PLOT_FRAME_BASE : public KIWAY_PLAYER
{
private:
protected:
wxMenuBar* m_mainMenu;
wxMenu* m_fileMenu;
@ -55,34 +55,34 @@ class SIM_PLOT_FRAME_BASE : public KIWAY_PLAYER
wxMenuItem* m_tuneValue;
wxMenuItem* m_settings;
wxMenu* m_viewMenu;
wxBoxSizer* m_sizer1;
wxBoxSizer* m_sizerMain;
wxToolBar* m_toolBar;
wxSplitterWindow* m_splitterPlot;
wxPanel* m_panel2;
wxSplitterWindow* m_splitterLeftRight;
wxPanel* m_panelLeft;
wxBoxSizer* m_sizer11;
wxSplitterWindow* m_splitterConsole;
wxSplitterWindow* m_splitterPlotAndConsole;
wxPanel* m_plotPanel;
wxBoxSizer* m_sizer5;
wxBoxSizer* m_sizerPlot;
wxAuiNotebook* m_plotNotebook;
wxPanel* m_welcomePanel;
wxBoxSizer* m_sizer8;
wxStaticText* m_staticText2;
wxPanel* m_panel5;
wxBoxSizer* m_sizer13;
wxPanel* m_panelConsole;
wxBoxSizer* m_sizerConsole;
wxTextCtrl* m_simConsole;
wxPanel* m_sidePanel;
wxBoxSizer* m_sideSizer;
wxSplitterWindow* m_splitter3;
wxPanel* m_panel6;
wxSplitterWindow* m_splitterSignals;
wxPanel* m_panelSignals;
wxListView* m_signals;
wxPanel* m_panel9;
wxSplitterWindow* m_splitter5;
wxPanel* m_panel10;
wxPanel* m_panelCursorsAndTune;
wxSplitterWindow* m_splitterTuneValues;
wxPanel* m_panelCursors;
wxListCtrl* m_cursors;
wxPanel* m_tunePanel;
wxStaticBoxSizer* sbSizer4;
wxStaticBoxSizer* m_tuneSizerStb;
wxBoxSizer* m_tuneSizer;
// Virtual event handlers, overide them in your derived class
virtual void menuNewPlot( wxCommandEvent& event ) { event.Skip(); }
virtual void menuOpenWorkbook( wxCommandEvent& event ) { event.Skip(); }
@ -101,38 +101,38 @@ class SIM_PLOT_FRAME_BASE : public KIWAY_PLAYER
virtual void onPlotClose( wxAuiNotebookEvent& event ) { event.Skip(); }
virtual void onSignalDblClick( wxMouseEvent& event ) { event.Skip(); }
virtual void onSignalRClick( wxListEvent& event ) { event.Skip(); }
public:
SIM_PLOT_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Simulation Workbook"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 1000,700 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL, const wxString& name = wxT("SIM_PLOT_FRAME") );
SIM_PLOT_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Spice Simulator"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 883,594 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL, const wxString& name = wxT("SIM_PLOT_FRAME") );
~SIM_PLOT_FRAME_BASE();
void m_splitterPlotOnIdle( wxIdleEvent& )
void m_splitterLeftRightOnIdle( wxIdleEvent& )
{
m_splitterPlot->SetSashPosition( 700 );
m_splitterPlot->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterPlotOnIdle ), NULL, this );
m_splitterLeftRight->SetSashPosition( 700 );
m_splitterLeftRight->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterLeftRightOnIdle ), NULL, this );
}
void m_splitterConsoleOnIdle( wxIdleEvent& )
void m_splitterPlotAndConsoleOnIdle( wxIdleEvent& )
{
m_splitterConsole->SetSashPosition( 500 );
m_splitterConsole->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterConsoleOnIdle ), NULL, this );
m_splitterPlotAndConsole->SetSashPosition( 500 );
m_splitterPlotAndConsole->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterPlotAndConsoleOnIdle ), NULL, this );
}
void m_splitter3OnIdle( wxIdleEvent& )
void m_splitterSignalsOnIdle( wxIdleEvent& )
{
m_splitter3->SetSashPosition( 0 );
m_splitter3->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitter3OnIdle ), NULL, this );
m_splitterSignals->SetSashPosition( 0 );
m_splitterSignals->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterSignalsOnIdle ), NULL, this );
}
void m_splitter5OnIdle( wxIdleEvent& )
void m_splitterTuneValuesOnIdle( wxIdleEvent& )
{
m_splitter5->SetSashPosition( 0 );
m_splitter5->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitter5OnIdle ), NULL, this );
m_splitterTuneValues->SetSashPosition( 0 );
m_splitterTuneValues->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterTuneValuesOnIdle ), NULL, this );
}
};
#endif //__SIM_PLOT_FRAME_BASE_H__