diff --git a/eeschema/sim/sim_plot_frame.cpp b/eeschema/sim/sim_plot_frame.cpp index cca1f26ad4..bf04f24e3b 100644 --- a/eeschema/sim/sim_plot_frame.cpp +++ b/eeschema/sim/sim_plot_frame.cpp @@ -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(); diff --git a/eeschema/sim/sim_plot_frame.h b/eeschema/sim/sim_plot_frame.h index a0434bd1fd..e5227827b6 100644 --- a/eeschema/sim/sim_plot_frame.h +++ b/eeschema/sim/sim_plot_frame.h @@ -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 diff --git a/eeschema/sim/sim_plot_frame_base.cpp b/eeschema/sim/sim_plot_frame_base.cpp index ba359b9e43..30e8864d0b 100644 --- a/eeschema/sim/sim_plot_frame_base.cpp +++ b/eeschema/sim/sim_plot_frame_base.cpp @@ -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 ); - + } diff --git a/eeschema/sim/sim_plot_frame_base.fbp b/eeschema/sim/sim_plot_frame_base.fbp index 599a849df9..ba2458662f 100644 --- a/eeschema/sim/sim_plot_frame_base.fbp +++ b/eeschema/sim/sim_plot_frame_base.fbp @@ -41,13 +41,13 @@ 0 wxID_ANY - + 600,500 SIM_PLOT_FRAME_BASE - 1000,700 + 883,594 wxDEFAULT_FRAME_STYLE KIWAY_PLAYER; kiway_player.h - Simulation Workbook + Spice Simulator SIM_PLOT_FRAME @@ -415,7 +415,7 @@ - m_sizer1 + m_sizerMain wxVERTICAL protected @@ -538,12 +538,12 @@ 0 - 0 + 50 0 1 - m_splitterPlot + m_splitterLeftRight 1 @@ -551,7 +551,7 @@ 1 Resizable - 0.8 + 0.7 700 -1 1 @@ -625,9 +625,9 @@ 0 - + 300,-1 1 - m_panel2 + m_panelLeft 1 @@ -706,12 +706,12 @@ 0 - 0 + 50 0 1 - m_splitterConsole + m_splitterPlotAndConsole 1 @@ -793,7 +793,7 @@ 0 - + -1,200 1 m_plotPanel 1 @@ -836,7 +836,7 @@ - m_sizer5 + m_sizerPlot wxHORIZONTAL protected @@ -905,6 +905,7 @@ onPlotChanged onPlotClose + @@ -1187,9 +1188,9 @@ 0 - + -1,100 1 - m_panel5 + m_panelConsole 1 @@ -1230,7 +1231,7 @@ - m_sizer13 + m_sizerConsole wxVERTICAL protected @@ -1366,7 +1367,7 @@ 0 - + 200,-1 1 m_sidePanel 1 @@ -1447,12 +1448,12 @@ 0 - 10 + 20 0 1 - m_splitter3 + m_splitterSignals 1 @@ -1460,7 +1461,7 @@ 1 Resizable - 0.0 + 0.3 0 -1 1 @@ -1534,9 +1535,9 @@ 0 - + -1,100 1 - m_panel6 + m_panelSignals 1 @@ -1581,13 +1582,14 @@ sbSizer1 wxVERTICAL + 1 none - + 5 wxALL|wxEXPAND 1 - + 1 1 1 @@ -1725,9 +1727,9 @@ 0 - + -1,300 1 - m_panel9 + m_panelCursorsAndTune 1 @@ -1806,12 +1808,12 @@ 0 - 10 + 20 0 1 - m_splitter5 + m_splitterTuneValues 1 @@ -1819,7 +1821,7 @@ 1 Resizable - 0.0 + 0.5 0 -1 1 @@ -1893,9 +1895,9 @@ 0 - + -1,100 1 - m_panel10 + m_panelCursors 1 @@ -1940,6 +1942,7 @@ sbSizer3 wxVERTICAL + 1 none @@ -2084,7 +2087,7 @@ 0 - + -1,200 1 m_tunePanel 1 @@ -2129,15 +2132,16 @@ wxID_ANY Tune - sbSizer4 - wxVERTICAL + m_tuneSizerStb + wxHORIZONTAL + 1 protected - + 5 wxEXPAND 1 - + m_tuneSizer wxHORIZONTAL diff --git a/eeschema/sim/sim_plot_frame_base.h b/eeschema/sim/sim_plot_frame_base.h index c76c8825fa..ca3ceaf979 100644 --- a/eeschema/sim/sim_plot_frame_base.h +++ b/eeschema/sim/sim_plot_frame_base.h @@ -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__