From 23d824de66c62d049b76df483d0c5fbeb7be49f6 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Mon, 5 Aug 2019 00:47:38 -0600 Subject: [PATCH] Simulator improvements. 1) Add highlighting to simProbe and simTune tools. 2) Probe tool should accept wires and pins, not wires and components. 3) Give simulator window a flat look to match rest of Kicad. 4) Collapse whitespace out of simulator window. 5) Add some error messages. 6) Add some whitespace to simulation setting dialog. --- eeschema/dialogs/dialog_sim_settings_base.cpp | 12 +- eeschema/dialogs/dialog_sim_settings_base.fbp | 352 +++---- eeschema/dialogs/dialog_sim_settings_base.h | 2 +- eeschema/sch_painter.cpp | 7 +- eeschema/sim/sim_plot_frame.cpp | 14 +- eeschema/sim/sim_plot_frame_base.cpp | 295 +++--- eeschema/sim/sim_plot_frame_base.fbp | 909 +++++++++++++++++- eeschema/sim/sim_plot_frame_base.h | 35 +- eeschema/tools/sch_editor_control.cpp | 82 +- eeschema/tools/sch_editor_control.h | 6 +- 10 files changed, 1327 insertions(+), 387 deletions(-) diff --git a/eeschema/dialogs/dialog_sim_settings_base.cpp b/eeschema/dialogs/dialog_sim_settings_base.cpp index a3daed8100..03a2978b69 100644 --- a/eeschema/dialogs/dialog_sim_settings_base.cpp +++ b/eeschema/dialogs/dialog_sim_settings_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Jun 5 2018) +// C++ code generated with wxFormBuilder (version Dec 30 2017) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -439,12 +439,18 @@ DIALOG_SIM_SETTINGS_BASE::DIALOG_SIM_SETTINGS_BASE( wxWindow* parent, wxWindowID bSizer1->Add( m_simPages, 1, wxEXPAND | wxALL, 5 ); + wxBoxSizer* bSizer88; + bSizer88 = new wxBoxSizer( wxVERTICAL ); + m_fixPassiveVals = new wxCheckBox( this, wxID_ANY, _("Adjust passive symbol values (e.g. M -> Meg; 100 nF -> 100n)"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer1->Add( m_fixPassiveVals, 0, wxALL, 5 ); + bSizer88->Add( m_fixPassiveVals, 0, wxALL, 5 ); m_fixIncludePaths = new wxCheckBox( this, wxID_ANY, _("Add full path for .include library directives"), wxDefaultPosition, wxDefaultSize, 0 ); m_fixIncludePaths->SetValue(true); - bSizer1->Add( m_fixIncludePaths, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizer88->Add( m_fixIncludePaths, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer1->Add( bSizer88, 0, wxEXPAND|wxALL, 5 ); m_sdbSizer = new wxStdDialogButtonSizer(); m_sdbSizerOK = new wxButton( this, wxID_OK ); diff --git a/eeschema/dialogs/dialog_sim_settings_base.fbp b/eeschema/dialogs/dialog_sim_settings_base.fbp index 1fae4ae578..f0ff065048 100644 --- a/eeschema/dialogs/dialog_sim_settings_base.fbp +++ b/eeschema/dialogs/dialog_sim_settings_base.fbp @@ -14,7 +14,6 @@ dialog_sim_settings_base 1000 none - 1 DIALOG_SIM_SETTINGS_BASE @@ -6604,178 +6603,189 @@ 5 - wxALL + wxEXPAND|wxALL 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Adjust passive symbol values (e.g. M -> Meg; 100 nF -> 100n) - - 0 - - - 0 + - 1 - m_fixPassiveVals - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxBOTTOM|wxRIGHT|wxLEFT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Add full path for .include library directives - - 0 - - - 0 - - 1 - m_fixIncludePaths - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - + bSizer88 + wxVERTICAL + none + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Adjust passive symbol values (e.g. M -> Meg; 100 nF -> 100n) + + 0 + + + 0 + + 1 + m_fixPassiveVals + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Add full path for .include library directives + + 0 + + + 0 + + 1 + m_fixIncludePaths + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eeschema/dialogs/dialog_sim_settings_base.h b/eeschema/dialogs/dialog_sim_settings_base.h index adeda57072..51f9046e73 100644 --- a/eeschema/dialogs/dialog_sim_settings_base.h +++ b/eeschema/dialogs/dialog_sim_settings_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Jun 5 2018) +// C++ code generated with wxFormBuilder (version Dec 30 2017) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! diff --git a/eeschema/sch_painter.cpp b/eeschema/sch_painter.cpp index a0b5b67bbb..fe5f316361 100644 --- a/eeschema/sch_painter.cpp +++ b/eeschema/sch_painter.cpp @@ -245,16 +245,19 @@ COLOR4D SCH_PAINTER::getRenderColor( const EDA_ITEM* aItem, int aLayer, bool aDr if( aItem->Type() == SCH_LINE_T ) color = static_cast( aItem )->GetLineColor(); - if( aItem->IsBrightened() ) // Selection disambiguation, etc. + if( aItem->IsBrightened() && !aDrawingShadows ) // Selection disambiguation, etc. { color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED ); + + if( aLayer == LAYER_DEVICE_BACKGROUND || aLayer == LAYER_SHEET_BACKGROUND ) + color = color.WithAlpha( 0.2 ); } else if( aItem->IsSelected() ) { if( aDrawingShadows ) color = selectionColor.WithAlpha( 0.8 ); } - else if( aItem->IsHighlighted() ) // Cross-probing + else if( aItem->IsHighlighted() ) // Cross-probing { color = highlightColor; } diff --git a/eeschema/sim/sim_plot_frame.cpp b/eeschema/sim/sim_plot_frame.cpp index 2e8045f965..c24b0e165d 100644 --- a/eeschema/sim/sim_plot_frame.cpp +++ b/eeschema/sim/sim_plot_frame.cpp @@ -490,8 +490,18 @@ void SIM_PLOT_FRAME::addPlot( const wxString& aName, SIM_PLOT_TYPE aType, const { SIM_TYPE simType = m_exporter->GetSimType(); - if( !SIM_PLOT_PANEL::IsPlottable( simType ) ) - return; // TODO else write out in console? + if( simType == ST_UNKNOWN ) + { + m_simConsole->AppendText( _( "Error: simulation type not defined!\n" ) ); + m_simConsole->SetInsertionPointEnd(); + return; + } + else if( !SIM_PLOT_PANEL::IsPlottable( simType ) ) + { + m_simConsole->AppendText( _( "Error: simulation type doesn't support plotting!\n" ) ); + m_simConsole->SetInsertionPointEnd(); + return; + } // Create a new plot if the current one displays a different type SIM_PLOT_PANEL* plotPanel = CurrentPlot(); diff --git a/eeschema/sim/sim_plot_frame_base.cpp b/eeschema/sim/sim_plot_frame_base.cpp index 44b7a9c2ca..fc6d1c7d1d 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 Dec 1 2018) +// C++ code generated with wxFormBuilder (version Dec 30 2017) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -11,282 +11,292 @@ 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( wxSize( 200,200 ), wxDefaultSize ); - + this->SetSizeHints( wxSize( -1,-1 ), 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, ID_SAVE_AS_IMAGE, wxString( _("Save as Image") ) , wxEmptyString, wxITEM_NORMAL ); m_fileMenu->Append( m_saveImage ); - + wxMenuItem* m_saveCsv; m_saveCsv = new wxMenuItem( m_fileMenu, ID_SAVE_AS_CSV, 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_exitSim = new wxMenuItem( m_fileMenu, wxID_CLOSE, wxString( _("Close Simulation") ) + wxT('\t') + wxT("CTRL+W"), 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, ID_MENU_RUN_SIM, wxString( _("Run Simulation") ) , wxEmptyString, wxITEM_NORMAL ); m_simulationMenu->Append( m_runSimulation ); - + m_simulationMenu->AppendSeparator(); - + m_addSignals = new wxMenuItem( m_simulationMenu, ID_MENU_ADD_SIGNAL, wxString( _("Add Signals...") ) , wxEmptyString, wxITEM_NORMAL ); m_simulationMenu->Append( m_addSignals ); - + m_probeSignals = new wxMenuItem( m_simulationMenu, ID_MENU_PROBE_SIGNALS, wxString( _("Probe from schematics") ) , wxEmptyString, wxITEM_NORMAL ); m_simulationMenu->Append( m_probeSignals ); - + m_tuneValue = new wxMenuItem( m_simulationMenu, ID_MENU_TUNE_SIGNALS, wxString( _("Tune Component Value") ) , wxEmptyString, wxITEM_NORMAL ); m_simulationMenu->Append( m_tuneValue ); - + m_simulationMenu->AppendSeparator(); - + m_showNetlist = new wxMenuItem( m_simulationMenu, ID_MENU_SHOW_NETLIST, wxString( _("Show SPICE Netlist...") ) , _("Shows current simulation's netlist. Useful for debugging SPICE errors."), wxITEM_NORMAL ); m_simulationMenu->Append( m_showNetlist ); - + m_simulationMenu->AppendSeparator(); - + m_settings = new wxMenuItem( m_simulationMenu, ID_MENU_SET_SIMUL, 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, ID_MENU_SHOW_GRID, wxString( _("Show &Grid") ) , wxEmptyString, wxITEM_CHECK ); m_viewMenu->Append( m_showGrid ); - + wxMenuItem* m_showLegend; m_showLegend = new wxMenuItem( m_viewMenu, ID_MENU_SHOW_LEGEND, 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_sizerMain = new wxBoxSizer( wxVERTICAL ); - - m_toolBar = new wxToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTB_FLAT|wxTB_HORIZONTAL|wxTB_TEXT ); - m_toolBar->Realize(); - + + 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 = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH|wxSP_LIVE_UPDATE|wxNO_BORDER ); 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_splitterPlotAndConsole = new wxSplitterWindow( m_panelLeft, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D ); + + m_splitterPlotAndConsole = new wxSplitterWindow( m_panelLeft, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH|wxSP_LIVE_UPDATE ); 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_CLOSE_ON_ALL_TABS|wxAUI_NB_MIDDLE_CLICK_CLOSE|wxAUI_NB_TAB_MOVE|wxAUI_NB_TAB_SPLIT|wxAUI_NB_TOP ); + m_plotNotebook->SetMinSize( wxSize( 200,-1 ) ); + 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_staticTextInfo = new wxStaticText( m_welcomePanel, wxID_ANY, _("Start the simulation by clicking the Run Simulation button"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextInfo->Wrap( -1 ); m_staticTextInfo->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); m_staticTextInfo->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - + bSizer81->Add( m_staticTextInfo, 0, 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_sizerPlot->Add( m_plotNotebook, 1, wxEXPAND | wxALL, 5 ); - - + + m_sizerPlot->Add( m_plotNotebook, 1, wxEXPAND, 5 ); + + m_plotPanel->SetSizer( m_sizerPlot ); m_plotPanel->Layout(); 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_sizerConsole->Add( m_simConsole, 1, 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_splitterSignals = new wxSplitterWindow( m_sidePanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D ); - m_splitterSignals->SetSashGravity( 0.3 ); + + m_splitterSignals = new wxSplitterWindow( m_sidePanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH|wxSP_LIVE_UPDATE ); + m_splitterSignals->SetSashGravity( 0.33 ); 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_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_panelSignals->SetSizer( sbSizer1 ); + wxBoxSizer* bSizer10; + bSizer10 = new wxBoxSizer( wxVERTICAL ); + + m_staticText2 = new wxStaticText( m_panelSignals, wxID_ANY, _("Signals"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText2->Wrap( -1 ); + bSizer10->Add( m_staticText2, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + m_signals = new wxListView( m_panelSignals, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_SINGLE_SEL ); + bSizer10->Add( m_signals, 1, wxEXPAND, 5 ); + + + m_panelSignals->SetSizer( bSizer10 ); m_panelSignals->Layout(); - sbSizer1->Fit( m_panelSignals ); + bSizer10->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_splitterTuneValues = new wxSplitterWindow( m_panelCursorsAndTune, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D ); + + m_splitterTuneValues = new wxSplitterWindow( m_panelCursorsAndTune, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH|wxSP_LIVE_UPDATE|wxNO_BORDER ); 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_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_panelCursors->SetSizer( sbSizer3 ); + wxBoxSizer* bSizer12; + bSizer12 = new wxBoxSizer( wxVERTICAL ); + + m_staticText3 = new wxStaticText( m_panelCursors, wxID_ANY, _("Cursors"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText3->Wrap( -1 ); + bSizer12->Add( m_staticText3, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + m_cursors = new wxListCtrl( m_panelCursors, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL ); + bSizer12->Add( m_cursors, 1, wxEXPAND, 5 ); + + + m_panelCursors->SetSizer( bSizer12 ); m_panelCursors->Layout(); - sbSizer3->Fit( m_panelCursors ); + bSizer12->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 ); - + wxBoxSizer* bSizer13; + bSizer13 = new wxBoxSizer( wxVERTICAL ); + + m_staticText4 = new wxStaticText( m_tunePanel, wxID_ANY, _("Tune"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText4->Wrap( -1 ); + bSizer13->Add( m_staticText4, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_tuneSizer = new wxBoxSizer( wxHORIZONTAL ); - - - m_tuneSizerStb->Add( m_tuneSizer, 1, wxEXPAND, 5 ); - - - m_tunePanel->SetSizer( m_tuneSizerStb ); + + + bSizer13->Add( m_tuneSizer, 1, wxEXPAND, 5 ); + + + m_tunePanel->SetSizer( bSizer13 ); m_tunePanel->Layout(); - m_tuneSizerStb->Fit( m_tunePanel ); + bSizer13->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_splitterLeftRight->SplitVertically( m_panelLeft, m_sidePanel, 700 ); m_sizerMain->Add( m_splitterLeftRight, 1, wxEXPAND, 5 ); - - + + this->SetSizer( m_sizerMain ); this->Layout(); - + m_sizerMain->Fit( this ); + this->Centre( wxBOTH ); - + // Connect Events - m_fileMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuNewPlot ), this, m_newPlot->GetId()); - m_fileMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuOpenWorkbook ), this, m_openWorkbook->GetId()); - m_fileMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveWorkbook ), this, m_saveWorkbook->GetId()); - m_fileMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveImage ), this, m_saveImage->GetId()); - m_fileMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveCsv ), this, m_saveCsv->GetId()); - m_fileMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuExit ), this, m_exitSim->GetId()); - m_viewMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomIn ), this, m_zoomIn->GetId()); - m_viewMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomOut ), this, m_zoomOut->GetId()); - m_viewMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomFit ), this, m_zoomFit->GetId()); - m_viewMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuShowGrid ), this, m_showGrid->GetId()); + 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 ) ); + this->Connect( m_saveWorkbook->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveWorkbook ) ); + this->Connect( m_saveImage->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveImage ) ); + this->Connect( m_saveCsv->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveCsv ) ); + this->Connect( m_exitSim->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuExit ) ); + this->Connect( m_zoomIn->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomIn ) ); + this->Connect( m_zoomOut->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomOut ) ); + this->Connect( m_zoomFit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomFit ) ); + this->Connect( m_showGrid->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuShowGrid ) ); this->Connect( m_showGrid->GetId(), wxEVT_UPDATE_UI, wxUpdateUIEventHandler( SIM_PLOT_FRAME_BASE::menuShowGridUpdate ) ); - m_viewMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuShowLegend ), this, m_showLegend->GetId()); + this->Connect( m_showLegend->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuShowLegend ) ); this->Connect( m_showLegend->GetId(), wxEVT_UPDATE_UI, wxUpdateUIEventHandler( SIM_PLOT_FRAME_BASE::menuShowLegendUpdate ) ); m_plotNotebook->Connect( wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, wxAuiNotebookEventHandler( SIM_PLOT_FRAME_BASE::onPlotChanged ), NULL, this ); m_plotNotebook->Connect( wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, wxAuiNotebookEventHandler( SIM_PLOT_FRAME_BASE::onPlotClose ), NULL, this ); @@ -297,11 +307,22 @@ SIM_PLOT_FRAME_BASE::SIM_PLOT_FRAME_BASE( wxWindow* parent, wxWindowID id, const SIM_PLOT_FRAME_BASE::~SIM_PLOT_FRAME_BASE() { // Disconnect Events + this->Disconnect( wxID_NEW, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuNewPlot ) ); + this->Disconnect( wxID_OPEN, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuOpenWorkbook ) ); + this->Disconnect( wxID_SAVE, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveWorkbook ) ); + this->Disconnect( ID_SAVE_AS_IMAGE, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveImage ) ); + this->Disconnect( ID_SAVE_AS_CSV, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveCsv ) ); + this->Disconnect( wxID_CLOSE, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuExit ) ); + this->Disconnect( wxID_ZOOM_IN, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomIn ) ); + this->Disconnect( wxID_ZOOM_OUT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomOut ) ); + this->Disconnect( wxID_ZOOM_FIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomFit ) ); + this->Disconnect( ID_MENU_SHOW_GRID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuShowGrid ) ); this->Disconnect( ID_MENU_SHOW_GRID, wxEVT_UPDATE_UI, wxUpdateUIEventHandler( SIM_PLOT_FRAME_BASE::menuShowGridUpdate ) ); + this->Disconnect( ID_MENU_SHOW_LEGEND, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuShowLegend ) ); this->Disconnect( ID_MENU_SHOW_LEGEND, wxEVT_UPDATE_UI, wxUpdateUIEventHandler( SIM_PLOT_FRAME_BASE::menuShowLegendUpdate ) ); m_plotNotebook->Disconnect( wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, wxAuiNotebookEventHandler( SIM_PLOT_FRAME_BASE::onPlotChanged ), NULL, this ); 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 dd7ae91cc0..b176336a10 100644 --- a/eeschema/sim/sim_plot_frame_base.fbp +++ b/eeschema/sim/sim_plot_frame_base.fbp @@ -1,6 +1,6 @@ - + C++ @@ -14,7 +14,6 @@ sim_plot_frame_base 1000 none - 1 SpiceWindow @@ -42,10 +41,10 @@ 0 wxID_ANY - 200,200 + -1,-1 SIM_PLOT_FRAME_BASE - 511,468 + -1,-1 wxDEFAULT_FRAME_STYLE KIWAY_PLAYER; kiway_player.h Spice Simulator @@ -54,7 +53,42 @@ SIM_PLOT_FRAME wxTAB_TRAVERSAL 1 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 @@ -76,7 +110,30 @@ - + + + + + + + + + + + + + + + + + + + + + + + + File m_fileMenu protected @@ -93,6 +150,7 @@ menuNewPlot + m_separator3 @@ -111,6 +169,7 @@ menuOpenWorkbook + @@ -125,6 +184,7 @@ menuSaveWorkbook + m_separator1 @@ -143,6 +203,7 @@ menuSaveImage + @@ -157,6 +218,7 @@ menuSaveCsv + m_separator4 @@ -169,15 +231,16 @@ wxID_CLOSE wxITEM_NORMAL - Exit Simulation + Close Simulation m_exitSim none - + CTRL+W menuExit + - + Simulation m_simulationMenu protected @@ -193,6 +256,8 @@ protected + + m_separator31 @@ -210,6 +275,8 @@ protected + + @@ -223,6 +290,8 @@ protected + + @@ -236,8 +305,10 @@ protected + + - + m_separator7 none @@ -253,6 +324,8 @@ protected + + m_separator41 @@ -270,9 +343,11 @@ protected + + - + View m_viewMenu protected @@ -289,6 +364,7 @@ menuZoomIn + @@ -303,6 +379,7 @@ menuZoomOut + @@ -317,6 +394,7 @@ menuZoomFit + m_separator2 @@ -419,6 +497,29 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -475,13 +576,40 @@ 1 wxSPLIT_VERTICAL - wxSP_3D + wxSP_3DSASH|wxSP_LIVE_UPDATE 0 - + wxNO_BORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 @@ -534,8 +662,31 @@ wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + - + -1,-1 m_sizer11 wxVERTICAL protected @@ -593,13 +744,40 @@ 1 wxSPLIT_HORIZONTAL - wxSP_3D + wxSP_3DSASH|wxSP_LIVE_UPDATE 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 @@ -652,6 +830,29 @@ wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + m_sizerPlot @@ -659,7 +860,7 @@ protected 5 - wxEXPAND | wxALL + wxEXPAND 1 1 @@ -694,7 +895,7 @@ 0 - + 200,-1 1 m_plotNotebook 1 @@ -715,8 +916,38 @@ + + + + + onPlotChanged + onPlotClose + + + + + + + + + + + + + + + + + + + + + + + + a page @@ -772,6 +1003,29 @@ wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + m_sizer8 @@ -839,7 +1093,6 @@ 0 wxID_ANY Start the simulation by clicking the Run Simulation button - 0 0 @@ -865,6 +1118,29 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + @@ -949,6 +1225,29 @@ wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + m_sizerConsole @@ -956,7 +1255,7 @@ protected 5 - wxALL|wxEXPAND + wxEXPAND 1 1 @@ -1016,6 +1315,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1078,6 +1404,29 @@ wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + m_sideSizer @@ -1131,19 +1480,46 @@ 1 Resizable - 0.3 + 0.33 0 -1 1 wxSPLIT_HORIZONTAL - wxSP_3D + wxSP_3DSASH|wxSP_LIVE_UPDATE 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 @@ -1178,7 +1554,7 @@ 0 - -1,100 + -1,-1 1 m_panelSignals 1 @@ -1196,17 +1572,120 @@ wxTAB_TRAVERSAL - - wxID_ANY - Signals + + + + + + + + + + + + + + + + + + + + + + + + - sbSizer1 + bSizer10 wxVERTICAL - 1 none + + 5 + wxTOP|wxBOTTOM|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Signals + + 0 + + + 0 + + 1 + m_staticText2 + 1 + + + protected + 1 + + Resizable + 1 + + + ; forward_declare + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + 5 - wxALL|wxEXPAND + wxEXPAND 1 1 @@ -1264,8 +1743,49 @@ + + + + + + + onSignalDblClick + + + + + + + + + + + + + + + + + + + onSignalRClick + + + + + + + + + + + + + + + @@ -1323,6 +1843,29 @@ wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + bSizer9 @@ -1382,13 +1925,40 @@ 1 wxSPLIT_HORIZONTAL - wxSP_3D + wxSP_3DSASH|wxSP_LIVE_UPDATE 0 - + wxNO_BORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 @@ -1423,7 +1993,7 @@ 0 - -1,100 + -1,-1 1 m_panelCursors 1 @@ -1441,17 +2011,120 @@ wxTAB_TRAVERSAL - - wxID_ANY - Cursors + + + + + + + + + + + + + + + + + + + + + + + + - sbSizer3 + bSizer12 wxVERTICAL - 1 none + + 5 + wxTOP|wxBOTTOM|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Cursors + + 0 + + + 0 + + 1 + m_staticText3 + 1 + + + protected + 1 + + Resizable + 1 + + + ; forward_declare + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + 5 - wxALL|wxEXPAND + wxEXPAND 1 1 @@ -1509,6 +2182,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1548,7 +2264,7 @@ 0 - -1,200 + -1,-1 1 m_tunePanel 1 @@ -1566,14 +2282,117 @@ wxTAB_TRAVERSAL - - wxID_ANY - Tune + + + + + + + + + + + + + + + + + + + + + + + + - m_tuneSizerStb - wxHORIZONTAL - 1 - protected + bSizer13 + wxVERTICAL + none + + 5 + wxTOP|wxBOTTOM|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Tune + + 0 + + + 0 + + 1 + m_staticText4 + 1 + + + protected + 1 + + Resizable + 1 + + + ; forward_declare + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + 5 wxEXPAND diff --git a/eeschema/sim/sim_plot_frame_base.h b/eeschema/sim/sim_plot_frame_base.h index 6b7f4997d0..543a841722 100644 --- a/eeschema/sim/sim_plot_frame_base.h +++ b/eeschema/sim/sim_plot_frame_base.h @@ -1,11 +1,12 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Dec 1 2018) +// C++ code generated with wxFormBuilder (version Dec 30 2017) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// -#pragma once +#ifndef __SIM_PLOT_FRAME_BASE_H__ +#define __SIM_PLOT_FRAME_BASE_H__ #include #include @@ -28,7 +29,6 @@ #include #include #include -#include #include /////////////////////////////////////////////////////////////////////////// @@ -50,7 +50,7 @@ class SIM_PLOT_FRAME_BASE : public KIWAY_PLAYER { private: - + protected: wxMenuBar* m_mainMenu; wxMenu* m_fileMenu; @@ -81,15 +81,17 @@ class SIM_PLOT_FRAME_BASE : public KIWAY_PLAYER wxBoxSizer* m_sideSizer; wxSplitterWindow* m_splitterSignals; wxPanel* m_panelSignals; + wxStaticText* m_staticText2; wxListView* m_signals; wxPanel* m_panelCursorsAndTune; wxSplitterWindow* m_splitterTuneValues; wxPanel* m_panelCursors; + wxStaticText* m_staticText3; wxListCtrl* m_cursors; wxPanel* m_tunePanel; - wxStaticBoxSizer* m_tuneSizerStb; + wxStaticText* m_staticText4; 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(); } @@ -108,37 +110,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 = _("Spice Simulator"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 511,468 ), 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( -1,-1 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL, const wxString& name = wxT("SIM_PLOT_FRAME") ); + ~SIM_PLOT_FRAME_BASE(); - + void m_splitterLeftRightOnIdle( wxIdleEvent& ) { m_splitterLeftRight->SetSashPosition( 700 ); m_splitterLeftRight->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterLeftRightOnIdle ), NULL, this ); } - + void m_splitterPlotAndConsoleOnIdle( wxIdleEvent& ) { m_splitterPlotAndConsole->SetSashPosition( 500 ); m_splitterPlotAndConsole->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterPlotAndConsoleOnIdle ), NULL, this ); } - + void m_splitterSignalsOnIdle( wxIdleEvent& ) { m_splitterSignals->SetSashPosition( 0 ); m_splitterSignals->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterSignalsOnIdle ), NULL, this ); } - + void m_splitterTuneValuesOnIdle( wxIdleEvent& ) { m_splitterTuneValues->SetSashPosition( 0 ); m_splitterTuneValues->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterTuneValuesOnIdle ), NULL, this ); } - + }; +#endif //__SIM_PLOT_FRAME_BASE_H__ diff --git a/eeschema/tools/sch_editor_control.cpp b/eeschema/tools/sch_editor_control.cpp index a81daf98f1..eb3c59b00e 100644 --- a/eeschema/tools/sch_editor_control.cpp +++ b/eeschema/tools/sch_editor_control.cpp @@ -427,6 +427,13 @@ void SCH_EDITOR_CONTROL::doCrossProbeSchToPcb( const TOOL_EVENT& aEvent, bool aF #ifdef KICAD_SPICE + +static KICAD_T wiresAndPins[] = { SCH_LINE_T, SCH_PIN_T, SCH_SHEET_PIN_T, EOT }; +static KICAD_T fieldsAndComponents[] = { SCH_COMPONENT_T, SCH_FIELD_T, EOT }; + +#define HITTEST_THRESHOLD_PIXELS 5 + + int SCH_EDITOR_CONTROL::SimProbe( const TOOL_EVENT& aEvent ) { PICKER_TOOL* picker = m_toolMgr->GetTool(); @@ -439,10 +446,8 @@ int SCH_EDITOR_CONTROL::SimProbe( const TOOL_EVENT& aEvent ) picker->SetClickHandler( [this] ( const VECTOR2D& aPosition ) { - KICAD_T wiresAndComponents[] = { SCH_LINE_T, SCH_COMPONENT_T, SCH_SHEET_PIN_T, EOT }; - EE_SELECTION_TOOL* selTool = m_toolMgr->GetTool(); - EDA_ITEM* item = selTool->SelectPoint( aPosition, wiresAndComponents ); + EDA_ITEM* item = selTool->SelectPoint( aPosition, wiresAndPins ); if( !item ) return false; @@ -454,10 +459,10 @@ int SCH_EDITOR_CONTROL::SimProbe( const TOOL_EVENT& aEvent ) if( obj->m_Comp == item ) { SIM_PLOT_FRAME* simFrame = - (SIM_PLOT_FRAME*) m_frame->Kiway().Player( FRAME_SIMULATOR, false ); + (SIM_PLOT_FRAME*) m_frame->Kiway().Player( FRAME_SIMULATOR, false ); if( simFrame ) - simFrame->AddVoltagePlot( obj->GetNetName() ); + simFrame->AddVoltagePlot( UnescapeString( obj->GetNetName() ) ); break; } @@ -466,6 +471,37 @@ int SCH_EDITOR_CONTROL::SimProbe( const TOOL_EVENT& aEvent ) return true; } ); + picker->SetMotionHandler( + [this] ( const VECTOR2D& aPos ) + { + EE_COLLECTOR collector; + collector.m_Threshold = KiROUND( getView()->ToWorld( HITTEST_THRESHOLD_PIXELS ) ); + collector.Collect( m_frame->GetScreen()->GetDrawItems(), wiresAndPins, (wxPoint) aPos ); + + EE_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool(); + selectionTool->GuessSelectionCandidates( collector, aPos ); + + EDA_ITEM* item = collector.GetCount() == 1 ? collector[ 0 ] : nullptr; + + if( m_pickerItem != item ) + { + if( m_pickerItem ) + selectionTool->UnbrightenItem( m_pickerItem ); + + m_pickerItem = item; + + if( m_pickerItem ) + selectionTool->BrightenItem( m_pickerItem ); + } + } ); + + picker->SetFinalizeHandler( + [this] ( const int& aFinalState ) + { + if( m_pickerItem ) + m_toolMgr->GetTool()->UnbrightenItem( m_pickerItem ); + } ); + std::string tool = aEvent.GetCommandStr().get(); m_toolMgr->RunAction( ACTIONS::pickerTool, true, &tool ); @@ -485,8 +521,6 @@ int SCH_EDITOR_CONTROL::SimTune( const TOOL_EVENT& aEvent ) picker->SetClickHandler( [this] ( const VECTOR2D& aPosition ) { - KICAD_T fieldsAndComponents[] = { SCH_COMPONENT_T, SCH_FIELD_T, EOT }; - EE_SELECTION_TOOL* selTool = m_toolMgr->GetTool(); EDA_ITEM* item = selTool->SelectPoint( aPosition, fieldsAndComponents ); @@ -501,7 +535,8 @@ int SCH_EDITOR_CONTROL::SimTune( const TOOL_EVENT& aEvent ) return false; } - SIM_PLOT_FRAME* simFrame = (SIM_PLOT_FRAME*) m_frame->Kiway().Player( FRAME_SIMULATOR, false ); + SIM_PLOT_FRAME* simFrame = + (SIM_PLOT_FRAME*) m_frame->Kiway().Player( FRAME_SIMULATOR, false ); if( simFrame ) simFrame->AddTuner( static_cast( item ) ); @@ -509,6 +544,37 @@ int SCH_EDITOR_CONTROL::SimTune( const TOOL_EVENT& aEvent ) return true; } ); + picker->SetMotionHandler( + [this] ( const VECTOR2D& aPos ) + { + EE_COLLECTOR collector; + collector.m_Threshold = KiROUND( getView()->ToWorld( HITTEST_THRESHOLD_PIXELS ) ); + collector.Collect( m_frame->GetScreen()->GetDrawItems(), fieldsAndComponents, (wxPoint) aPos ); + + EE_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool(); + selectionTool->GuessSelectionCandidates( collector, aPos ); + + EDA_ITEM* item = collector.GetCount() == 1 ? collector[ 0 ] : nullptr; + + if( m_pickerItem != item ) + { + if( m_pickerItem ) + selectionTool->UnbrightenItem( m_pickerItem ); + + m_pickerItem = item; + + if( m_pickerItem ) + selectionTool->BrightenItem( m_pickerItem ); + } + } ); + + picker->SetFinalizeHandler( + [this] ( const int& aFinalState ) + { + if( m_pickerItem ) + m_toolMgr->GetTool()->UnbrightenItem( m_pickerItem ); + } ); + std::string tool = aEvent.GetCommandStr().get(); m_toolMgr->RunAction( ACTIONS::pickerTool, true, &tool ); diff --git a/eeschema/tools/sch_editor_control.h b/eeschema/tools/sch_editor_control.h index eb8ae5a40f..d972ae94fe 100644 --- a/eeschema/tools/sch_editor_control.h +++ b/eeschema/tools/sch_editor_control.h @@ -41,7 +41,8 @@ class SCH_EDITOR_CONTROL : public wxEvtHandler, public EE_TOOL_BASE( "eeschema.EditorControl" ), - m_probingPcbToSch( false ) + m_probingPcbToSch( false ), + m_pickerItem( nullptr ) { } ~SCH_EDITOR_CONTROL() { } @@ -176,7 +177,8 @@ private: void setTransitions() override; private: - bool m_probingPcbToSch; ///> Recursion guard when cross-probing to PCBNew + bool m_probingPcbToSch; // Recursion guard when cross-probing to PCBNew + EDA_ITEM* m_pickerItem; // Current item for picker highlighting. };