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.
This commit is contained in:
Jeff Young 2019-08-05 00:47:38 -06:00
parent 6c0a3b4534
commit 23d824de66
10 changed files with 1327 additions and 387 deletions

View File

@ -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/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // 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 ); 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 ); 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 = new wxCheckBox( this, wxID_ANY, _("Add full path for .include library directives"), wxDefaultPosition, wxDefaultSize, 0 );
m_fixIncludePaths->SetValue(true); 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_sdbSizer = new wxStdDialogButtonSizer();
m_sdbSizerOK = new wxButton( this, wxID_OK ); m_sdbSizerOK = new wxButton( this, wxID_OK );

View File

@ -14,7 +14,6 @@
<property name="file">dialog_sim_settings_base</property> <property name="file">dialog_sim_settings_base</property>
<property name="first_id">1000</property> <property name="first_id">1000</property>
<property name="help_provider">none</property> <property name="help_provider">none</property>
<property name="indent_with_spaces"></property>
<property name="internationalize">1</property> <property name="internationalize">1</property>
<property name="name">DIALOG_SIM_SETTINGS_BASE</property> <property name="name">DIALOG_SIM_SETTINGS_BASE</property>
<property name="namespace"></property> <property name="namespace"></property>
@ -6604,178 +6603,189 @@
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL</property> <property name="flag">wxEXPAND|wxALL</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxCheckBox" expanded="1"> <object class="wxBoxSizer" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="checked">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Adjust passive symbol values (e.g. M -&gt; Meg; 100 nF -&gt; 100n)</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<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"></property>
<property name="moveable">1</property> <property name="name">bSizer88</property>
<property name="name">m_fixPassiveVals</property> <property name="orient">wxVERTICAL</property>
<property name="pane_border">1</property> <property name="permission">none</property>
<property name="pane_position"></property> <object class="sizeritem" expanded="1">
<property name="pane_size"></property> <property name="border">5</property>
<property name="permission">protected</property> <property name="flag">wxALL</property>
<property name="pin_button">1</property> <property name="proportion">0</property>
<property name="pos"></property> <object class="wxCheckBox" expanded="1">
<property name="resize">Resizable</property> <property name="BottomDockable">1</property>
<property name="show">1</property> <property name="LeftDockable">1</property>
<property name="size"></property> <property name="RightDockable">1</property>
<property name="style"></property> <property name="TopDockable">1</property>
<property name="subclass"></property> <property name="aui_layer"></property>
<property name="toolbar_pane">0</property> <property name="aui_name"></property>
<property name="tooltip"></property> <property name="aui_position"></property>
<property name="validator_data_type"></property> <property name="aui_row"></property>
<property name="validator_style">wxFILTER_NONE</property> <property name="best_size"></property>
<property name="validator_type">wxDefaultValidator</property> <property name="bg"></property>
<property name="validator_variable"></property> <property name="caption"></property>
<property name="window_extra_style"></property> <property name="caption_visible">1</property>
<property name="window_name"></property> <property name="center_pane">0</property>
<property name="window_style"></property> <property name="checked">0</property>
<event name="OnChar"></event> <property name="close_button">1</property>
<event name="OnCheckBox"></event> <property name="context_help"></property>
<event name="OnEnterWindow"></event> <property name="context_menu">1</property>
<event name="OnEraseBackground"></event> <property name="default_pane">0</property>
<event name="OnKeyDown"></event> <property name="dock">Dock</property>
<event name="OnKeyUp"></event> <property name="dock_fixed">0</property>
<event name="OnKillFocus"></event> <property name="docking">Left</property>
<event name="OnLeaveWindow"></event> <property name="enabled">1</property>
<event name="OnLeftDClick"></event> <property name="fg"></property>
<event name="OnLeftDown"></event> <property name="floatable">1</property>
<event name="OnLeftUp"></event> <property name="font"></property>
<event name="OnMiddleDClick"></event> <property name="gripper">0</property>
<event name="OnMiddleDown"></event> <property name="hidden">0</property>
<event name="OnMiddleUp"></event> <property name="id">wxID_ANY</property>
<event name="OnMotion"></event> <property name="label">Adjust passive symbol values (e.g. M -&gt; Meg; 100 nF -&gt; 100n)</property>
<event name="OnMouseEvents"></event> <property name="max_size"></property>
<event name="OnMouseWheel"></event> <property name="maximize_button">0</property>
<event name="OnPaint"></event> <property name="maximum_size"></property>
<event name="OnRightDClick"></event> <property name="min_size"></property>
<event name="OnRightDown"></event> <property name="minimize_button">0</property>
<event name="OnRightUp"></event> <property name="minimum_size"></property>
<event name="OnSetFocus"></event> <property name="moveable">1</property>
<event name="OnSize"></event> <property name="name">m_fixPassiveVals</property>
<event name="OnUpdateUI"></event> <property name="pane_border">1</property>
</object> <property name="pane_position"></property>
</object> <property name="pane_size"></property>
<object class="sizeritem" expanded="1"> <property name="permission">protected</property>
<property name="border">5</property> <property name="pin_button">1</property>
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property> <property name="pos"></property>
<property name="proportion">0</property> <property name="resize">Resizable</property>
<object class="wxCheckBox" expanded="1"> <property name="show">1</property>
<property name="BottomDockable">1</property> <property name="size"></property>
<property name="LeftDockable">1</property> <property name="style"></property>
<property name="RightDockable">1</property> <property name="subclass"></property>
<property name="TopDockable">1</property> <property name="toolbar_pane">0</property>
<property name="aui_layer"></property> <property name="tooltip"></property>
<property name="aui_name"></property> <property name="validator_data_type"></property>
<property name="aui_position"></property> <property name="validator_style">wxFILTER_NONE</property>
<property name="aui_row"></property> <property name="validator_type">wxDefaultValidator</property>
<property name="best_size"></property> <property name="validator_variable"></property>
<property name="bg"></property> <property name="window_extra_style"></property>
<property name="caption"></property> <property name="window_name"></property>
<property name="caption_visible">1</property> <property name="window_style"></property>
<property name="center_pane">0</property> <event name="OnChar"></event>
<property name="checked">1</property> <event name="OnCheckBox"></event>
<property name="close_button">1</property> <event name="OnEnterWindow"></event>
<property name="context_help"></property> <event name="OnEraseBackground"></event>
<property name="context_menu">1</property> <event name="OnKeyDown"></event>
<property name="default_pane">0</property> <event name="OnKeyUp"></event>
<property name="dock">Dock</property> <event name="OnKillFocus"></event>
<property name="dock_fixed">0</property> <event name="OnLeaveWindow"></event>
<property name="docking">Left</property> <event name="OnLeftDClick"></event>
<property name="enabled">1</property> <event name="OnLeftDown"></event>
<property name="fg"></property> <event name="OnLeftUp"></event>
<property name="floatable">1</property> <event name="OnMiddleDClick"></event>
<property name="font"></property> <event name="OnMiddleDown"></event>
<property name="gripper">0</property> <event name="OnMiddleUp"></event>
<property name="hidden">0</property> <event name="OnMotion"></event>
<property name="id">wxID_ANY</property> <event name="OnMouseEvents"></event>
<property name="label">Add full path for .include library directives</property> <event name="OnMouseWheel"></event>
<property name="max_size"></property> <event name="OnPaint"></event>
<property name="maximize_button">0</property> <event name="OnRightDClick"></event>
<property name="maximum_size"></property> <event name="OnRightDown"></event>
<property name="min_size"></property> <event name="OnRightUp"></event>
<property name="minimize_button">0</property> <event name="OnSetFocus"></event>
<property name="minimum_size"></property> <event name="OnSize"></event>
<property name="moveable">1</property> <event name="OnUpdateUI"></event>
<property name="name">m_fixIncludePaths</property> </object>
<property name="pane_border">1</property> </object>
<property name="pane_position"></property> <object class="sizeritem" expanded="1">
<property name="pane_size"></property> <property name="border">5</property>
<property name="permission">protected</property> <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property>
<property name="pin_button">1</property> <property name="proportion">0</property>
<property name="pos"></property> <object class="wxCheckBox" expanded="1">
<property name="resize">Resizable</property> <property name="BottomDockable">1</property>
<property name="show">1</property> <property name="LeftDockable">1</property>
<property name="size"></property> <property name="RightDockable">1</property>
<property name="style"></property> <property name="TopDockable">1</property>
<property name="subclass"></property> <property name="aui_layer"></property>
<property name="toolbar_pane">0</property> <property name="aui_name"></property>
<property name="tooltip"></property> <property name="aui_position"></property>
<property name="validator_data_type"></property> <property name="aui_row"></property>
<property name="validator_style">wxFILTER_NONE</property> <property name="best_size"></property>
<property name="validator_type">wxDefaultValidator</property> <property name="bg"></property>
<property name="validator_variable"></property> <property name="caption"></property>
<property name="window_extra_style"></property> <property name="caption_visible">1</property>
<property name="window_name"></property> <property name="center_pane">0</property>
<property name="window_style"></property> <property name="checked">1</property>
<event name="OnChar"></event> <property name="close_button">1</property>
<event name="OnCheckBox"></event> <property name="context_help"></property>
<event name="OnEnterWindow"></event> <property name="context_menu">1</property>
<event name="OnEraseBackground"></event> <property name="default_pane">0</property>
<event name="OnKeyDown"></event> <property name="dock">Dock</property>
<event name="OnKeyUp"></event> <property name="dock_fixed">0</property>
<event name="OnKillFocus"></event> <property name="docking">Left</property>
<event name="OnLeaveWindow"></event> <property name="enabled">1</property>
<event name="OnLeftDClick"></event> <property name="fg"></property>
<event name="OnLeftDown"></event> <property name="floatable">1</property>
<event name="OnLeftUp"></event> <property name="font"></property>
<event name="OnMiddleDClick"></event> <property name="gripper">0</property>
<event name="OnMiddleDown"></event> <property name="hidden">0</property>
<event name="OnMiddleUp"></event> <property name="id">wxID_ANY</property>
<event name="OnMotion"></event> <property name="label">Add full path for .include library directives</property>
<event name="OnMouseEvents"></event> <property name="max_size"></property>
<event name="OnMouseWheel"></event> <property name="maximize_button">0</property>
<event name="OnPaint"></event> <property name="maximum_size"></property>
<event name="OnRightDClick"></event> <property name="min_size"></property>
<event name="OnRightDown"></event> <property name="minimize_button">0</property>
<event name="OnRightUp"></event> <property name="minimum_size"></property>
<event name="OnSetFocus"></event> <property name="moveable">1</property>
<event name="OnSize"></event> <property name="name">m_fixIncludePaths</property>
<event name="OnUpdateUI"></event> <property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">

View File

@ -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/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!

View File

@ -245,16 +245,19 @@ COLOR4D SCH_PAINTER::getRenderColor( const EDA_ITEM* aItem, int aLayer, bool aDr
if( aItem->Type() == SCH_LINE_T ) if( aItem->Type() == SCH_LINE_T )
color = static_cast<const SCH_LINE*>( aItem )->GetLineColor(); color = static_cast<const SCH_LINE*>( aItem )->GetLineColor();
if( aItem->IsBrightened() ) // Selection disambiguation, etc. if( aItem->IsBrightened() && !aDrawingShadows ) // Selection disambiguation, etc.
{ {
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED ); color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
if( aLayer == LAYER_DEVICE_BACKGROUND || aLayer == LAYER_SHEET_BACKGROUND )
color = color.WithAlpha( 0.2 );
} }
else if( aItem->IsSelected() ) else if( aItem->IsSelected() )
{ {
if( aDrawingShadows ) if( aDrawingShadows )
color = selectionColor.WithAlpha( 0.8 ); color = selectionColor.WithAlpha( 0.8 );
} }
else if( aItem->IsHighlighted() ) // Cross-probing else if( aItem->IsHighlighted() ) // Cross-probing
{ {
color = highlightColor; color = highlightColor;
} }

View File

@ -490,8 +490,18 @@ void SIM_PLOT_FRAME::addPlot( const wxString& aName, SIM_PLOT_TYPE aType, const
{ {
SIM_TYPE simType = m_exporter->GetSimType(); SIM_TYPE simType = m_exporter->GetSimType();
if( !SIM_PLOT_PANEL::IsPlottable( simType ) ) if( simType == ST_UNKNOWN )
return; // TODO else write out in console? {
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 // Create a new plot if the current one displays a different type
SIM_PLOT_PANEL* plotPanel = CurrentPlot(); SIM_PLOT_PANEL* plotPanel = CurrentPlot();

View File

@ -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/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // 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 ) 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_mainMenu = new wxMenuBar( 0 );
m_fileMenu = new wxMenu(); m_fileMenu = new wxMenu();
wxMenuItem* m_newPlot; wxMenuItem* m_newPlot;
m_newPlot = new wxMenuItem( m_fileMenu, wxID_NEW, wxString( _("New Plot") ) , wxEmptyString, wxITEM_NORMAL ); m_newPlot = new wxMenuItem( m_fileMenu, wxID_NEW, wxString( _("New Plot") ) , wxEmptyString, wxITEM_NORMAL );
m_fileMenu->Append( m_newPlot ); m_fileMenu->Append( m_newPlot );
m_fileMenu->AppendSeparator(); m_fileMenu->AppendSeparator();
wxMenuItem* m_openWorkbook; wxMenuItem* m_openWorkbook;
m_openWorkbook = new wxMenuItem( m_fileMenu, wxID_OPEN, wxString( _("Open Workbook") ) , wxEmptyString, wxITEM_NORMAL ); m_openWorkbook = new wxMenuItem( m_fileMenu, wxID_OPEN, wxString( _("Open Workbook") ) , wxEmptyString, wxITEM_NORMAL );
m_fileMenu->Append( m_openWorkbook ); m_fileMenu->Append( m_openWorkbook );
wxMenuItem* m_saveWorkbook; wxMenuItem* m_saveWorkbook;
m_saveWorkbook = new wxMenuItem( m_fileMenu, wxID_SAVE, wxString( _("Save Workbook") ) , wxEmptyString, wxITEM_NORMAL ); m_saveWorkbook = new wxMenuItem( m_fileMenu, wxID_SAVE, wxString( _("Save Workbook") ) , wxEmptyString, wxITEM_NORMAL );
m_fileMenu->Append( m_saveWorkbook ); m_fileMenu->Append( m_saveWorkbook );
m_fileMenu->AppendSeparator(); m_fileMenu->AppendSeparator();
wxMenuItem* m_saveImage; wxMenuItem* m_saveImage;
m_saveImage = new wxMenuItem( m_fileMenu, ID_SAVE_AS_IMAGE, wxString( _("Save as Image") ) , wxEmptyString, wxITEM_NORMAL ); m_saveImage = new wxMenuItem( m_fileMenu, ID_SAVE_AS_IMAGE, wxString( _("Save as Image") ) , wxEmptyString, wxITEM_NORMAL );
m_fileMenu->Append( m_saveImage ); m_fileMenu->Append( m_saveImage );
wxMenuItem* m_saveCsv; wxMenuItem* m_saveCsv;
m_saveCsv = new wxMenuItem( m_fileMenu, ID_SAVE_AS_CSV, wxString( _("Save as .csv File") ) , wxEmptyString, wxITEM_NORMAL ); 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->Append( m_saveCsv );
m_fileMenu->AppendSeparator(); m_fileMenu->AppendSeparator();
wxMenuItem* m_exitSim; 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_fileMenu->Append( m_exitSim );
m_mainMenu->Append( m_fileMenu, _("File") ); m_mainMenu->Append( m_fileMenu, _("File") );
m_simulationMenu = new wxMenu(); m_simulationMenu = new wxMenu();
m_runSimulation = new wxMenuItem( m_simulationMenu, ID_MENU_RUN_SIM, wxString( _("Run Simulation") ) , wxEmptyString, wxITEM_NORMAL ); m_runSimulation = new wxMenuItem( m_simulationMenu, ID_MENU_RUN_SIM, wxString( _("Run Simulation") ) , wxEmptyString, wxITEM_NORMAL );
m_simulationMenu->Append( m_runSimulation ); m_simulationMenu->Append( m_runSimulation );
m_simulationMenu->AppendSeparator(); m_simulationMenu->AppendSeparator();
m_addSignals = new wxMenuItem( m_simulationMenu, ID_MENU_ADD_SIGNAL, wxString( _("Add Signals...") ) , wxEmptyString, wxITEM_NORMAL ); m_addSignals = new wxMenuItem( m_simulationMenu, ID_MENU_ADD_SIGNAL, wxString( _("Add Signals...") ) , wxEmptyString, wxITEM_NORMAL );
m_simulationMenu->Append( m_addSignals ); m_simulationMenu->Append( m_addSignals );
m_probeSignals = new wxMenuItem( m_simulationMenu, ID_MENU_PROBE_SIGNALS, wxString( _("Probe from schematics") ) , wxEmptyString, wxITEM_NORMAL ); m_probeSignals = new wxMenuItem( m_simulationMenu, ID_MENU_PROBE_SIGNALS, wxString( _("Probe from schematics") ) , wxEmptyString, wxITEM_NORMAL );
m_simulationMenu->Append( m_probeSignals ); m_simulationMenu->Append( m_probeSignals );
m_tuneValue = new wxMenuItem( m_simulationMenu, ID_MENU_TUNE_SIGNALS, wxString( _("Tune Component Value") ) , wxEmptyString, wxITEM_NORMAL ); m_tuneValue = new wxMenuItem( m_simulationMenu, ID_MENU_TUNE_SIGNALS, wxString( _("Tune Component Value") ) , wxEmptyString, wxITEM_NORMAL );
m_simulationMenu->Append( m_tuneValue ); m_simulationMenu->Append( m_tuneValue );
m_simulationMenu->AppendSeparator(); 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_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->Append( m_showNetlist );
m_simulationMenu->AppendSeparator(); m_simulationMenu->AppendSeparator();
m_settings = new wxMenuItem( m_simulationMenu, ID_MENU_SET_SIMUL, wxString( _("Settings...") ) , wxEmptyString, wxITEM_NORMAL ); m_settings = new wxMenuItem( m_simulationMenu, ID_MENU_SET_SIMUL, wxString( _("Settings...") ) , wxEmptyString, wxITEM_NORMAL );
m_simulationMenu->Append( m_settings ); m_simulationMenu->Append( m_settings );
m_mainMenu->Append( m_simulationMenu, _("Simulation") ); m_mainMenu->Append( m_simulationMenu, _("Simulation") );
m_viewMenu = new wxMenu(); m_viewMenu = new wxMenu();
wxMenuItem* m_zoomIn; wxMenuItem* m_zoomIn;
m_zoomIn = new wxMenuItem( m_viewMenu, wxID_ZOOM_IN, wxString( _("Zoom In") ) , wxEmptyString, wxITEM_NORMAL ); m_zoomIn = new wxMenuItem( m_viewMenu, wxID_ZOOM_IN, wxString( _("Zoom In") ) , wxEmptyString, wxITEM_NORMAL );
m_viewMenu->Append( m_zoomIn ); m_viewMenu->Append( m_zoomIn );
wxMenuItem* m_zoomOut; wxMenuItem* m_zoomOut;
m_zoomOut = new wxMenuItem( m_viewMenu, wxID_ZOOM_OUT, wxString( _("Zoom Out") ) , wxEmptyString, wxITEM_NORMAL ); m_zoomOut = new wxMenuItem( m_viewMenu, wxID_ZOOM_OUT, wxString( _("Zoom Out") ) , wxEmptyString, wxITEM_NORMAL );
m_viewMenu->Append( m_zoomOut ); m_viewMenu->Append( m_zoomOut );
wxMenuItem* m_zoomFit; wxMenuItem* m_zoomFit;
m_zoomFit = new wxMenuItem( m_viewMenu, wxID_ZOOM_FIT, wxString( _("Fit on Screen") ) , wxEmptyString, wxITEM_NORMAL ); m_zoomFit = new wxMenuItem( m_viewMenu, wxID_ZOOM_FIT, wxString( _("Fit on Screen") ) , wxEmptyString, wxITEM_NORMAL );
m_viewMenu->Append( m_zoomFit ); m_viewMenu->Append( m_zoomFit );
m_viewMenu->AppendSeparator(); m_viewMenu->AppendSeparator();
wxMenuItem* m_showGrid; wxMenuItem* m_showGrid;
m_showGrid = new wxMenuItem( m_viewMenu, ID_MENU_SHOW_GRID, wxString( _("Show &Grid") ) , wxEmptyString, wxITEM_CHECK ); m_showGrid = new wxMenuItem( m_viewMenu, ID_MENU_SHOW_GRID, wxString( _("Show &Grid") ) , wxEmptyString, wxITEM_CHECK );
m_viewMenu->Append( m_showGrid ); m_viewMenu->Append( m_showGrid );
wxMenuItem* m_showLegend; wxMenuItem* m_showLegend;
m_showLegend = new wxMenuItem( m_viewMenu, ID_MENU_SHOW_LEGEND, wxString( _("Show &Legend") ) , wxEmptyString, wxITEM_CHECK ); m_showLegend = new wxMenuItem( m_viewMenu, ID_MENU_SHOW_LEGEND, wxString( _("Show &Legend") ) , wxEmptyString, wxITEM_CHECK );
m_viewMenu->Append( m_showLegend ); m_viewMenu->Append( m_showLegend );
m_mainMenu->Append( m_viewMenu, _("View") ); m_mainMenu->Append( m_viewMenu, _("View") );
this->SetMenuBar( m_mainMenu ); this->SetMenuBar( m_mainMenu );
m_sizerMain = new wxBoxSizer( wxVERTICAL ); m_sizerMain = new wxBoxSizer( wxVERTICAL );
m_toolBar = new wxToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTB_FLAT|wxTB_HORIZONTAL|wxTB_TEXT ); m_toolBar = new wxToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTB_FLAT|wxTB_HORIZONTAL|wxTB_TEXT );
m_toolBar->Realize(); m_toolBar->Realize();
m_sizerMain->Add( m_toolBar, 0, wxEXPAND, 5 ); 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->SetSashGravity( 0.7 );
m_splitterLeftRight->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterLeftRightOnIdle ), NULL, this ); m_splitterLeftRight->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterLeftRightOnIdle ), NULL, this );
m_splitterLeftRight->SetMinimumPaneSize( 50 ); m_splitterLeftRight->SetMinimumPaneSize( 50 );
m_panelLeft = new wxPanel( m_splitterLeftRight, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_panelLeft = new wxPanel( m_splitterLeftRight, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panelLeft->SetMinSize( wxSize( 300,-1 ) ); m_panelLeft->SetMinSize( wxSize( 300,-1 ) );
m_sizer11 = new wxBoxSizer( wxVERTICAL ); 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->SetSashGravity( 0.8 );
m_splitterPlotAndConsole->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterPlotAndConsoleOnIdle ), NULL, this ); m_splitterPlotAndConsole->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterPlotAndConsoleOnIdle ), NULL, this );
m_splitterPlotAndConsole->SetMinimumPaneSize( 50 ); m_splitterPlotAndConsole->SetMinimumPaneSize( 50 );
m_plotPanel = new wxPanel( m_splitterPlotAndConsole, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_plotPanel = new wxPanel( m_splitterPlotAndConsole, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_plotPanel->SetMinSize( wxSize( -1,200 ) ); m_plotPanel->SetMinSize( wxSize( -1,200 ) );
m_sizerPlot = new wxBoxSizer( wxHORIZONTAL ); 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 = 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_welcomePanel = new wxPanel( m_plotNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_sizer8 = new wxBoxSizer( wxVERTICAL ); m_sizer8 = new wxBoxSizer( wxVERTICAL );
m_sizer8->Add( 0, 0, 1, wxEXPAND, 5 ); m_sizer8->Add( 0, 0, 1, wxEXPAND, 5 );
wxBoxSizer* bSizer81; wxBoxSizer* bSizer81;
bSizer81 = new wxBoxSizer( wxHORIZONTAL ); bSizer81 = new wxBoxSizer( wxHORIZONTAL );
bSizer81->Add( 0, 0, 1, wxEXPAND, 5 ); 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 = new wxStaticText( m_welcomePanel, wxID_ANY, _("Start the simulation by clicking the Run Simulation button"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextInfo->Wrap( -1 ); m_staticTextInfo->Wrap( -1 );
m_staticTextInfo->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); m_staticTextInfo->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
m_staticTextInfo->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); m_staticTextInfo->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
bSizer81->Add( m_staticTextInfo, 0, wxALL|wxEXPAND, 5 ); bSizer81->Add( m_staticTextInfo, 0, wxALL|wxEXPAND, 5 );
bSizer81->Add( 0, 0, 1, wxEXPAND, 5 ); bSizer81->Add( 0, 0, 1, wxEXPAND, 5 );
m_sizer8->Add( bSizer81, 0, wxEXPAND, 5 ); m_sizer8->Add( bSizer81, 0, wxEXPAND, 5 );
m_sizer8->Add( 0, 0, 1, wxEXPAND, 5 ); m_sizer8->Add( 0, 0, 1, wxEXPAND, 5 );
m_welcomePanel->SetSizer( m_sizer8 ); m_welcomePanel->SetSizer( m_sizer8 );
m_welcomePanel->Layout(); m_welcomePanel->Layout();
m_sizer8->Fit( m_welcomePanel ); m_sizer8->Fit( m_welcomePanel );
m_plotNotebook->AddPage( m_welcomePanel, _("a page"), false, wxNullBitmap ); 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->SetSizer( m_sizerPlot );
m_plotPanel->Layout(); m_plotPanel->Layout();
m_sizerPlot->Fit( m_plotPanel ); m_sizerPlot->Fit( m_plotPanel );
m_panelConsole = new wxPanel( m_splitterPlotAndConsole, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_panelConsole = new wxPanel( m_splitterPlotAndConsole, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panelConsole->SetMinSize( wxSize( -1,100 ) ); m_panelConsole->SetMinSize( wxSize( -1,100 ) );
m_sizerConsole = new wxBoxSizer( wxVERTICAL ); m_sizerConsole = new wxBoxSizer( wxVERTICAL );
m_simConsole = new wxTextCtrl( m_panelConsole, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY ); 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_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->SetSizer( m_sizerConsole );
m_panelConsole->Layout(); m_panelConsole->Layout();
m_sizerConsole->Fit( m_panelConsole ); m_sizerConsole->Fit( m_panelConsole );
m_splitterPlotAndConsole->SplitHorizontally( m_plotPanel, m_panelConsole, 500 ); m_splitterPlotAndConsole->SplitHorizontally( m_plotPanel, m_panelConsole, 500 );
m_sizer11->Add( m_splitterPlotAndConsole, 1, wxEXPAND, 5 ); m_sizer11->Add( m_splitterPlotAndConsole, 1, wxEXPAND, 5 );
m_panelLeft->SetSizer( m_sizer11 ); m_panelLeft->SetSizer( m_sizer11 );
m_panelLeft->Layout(); m_panelLeft->Layout();
m_sizer11->Fit( m_panelLeft ); m_sizer11->Fit( m_panelLeft );
m_sidePanel = new wxPanel( m_splitterLeftRight, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_sidePanel = new wxPanel( m_splitterLeftRight, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_sidePanel->SetMinSize( wxSize( 200,-1 ) ); m_sidePanel->SetMinSize( wxSize( 200,-1 ) );
m_sideSizer = new wxBoxSizer( wxVERTICAL ); m_sideSizer = new wxBoxSizer( wxVERTICAL );
m_splitterSignals = new wxSplitterWindow( m_sidePanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D ); m_splitterSignals = new wxSplitterWindow( m_sidePanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH|wxSP_LIVE_UPDATE );
m_splitterSignals->SetSashGravity( 0.3 ); m_splitterSignals->SetSashGravity( 0.33 );
m_splitterSignals->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterSignalsOnIdle ), NULL, this ); m_splitterSignals->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterSignalsOnIdle ), NULL, this );
m_splitterSignals->SetMinimumPaneSize( 20 ); m_splitterSignals->SetMinimumPaneSize( 20 );
m_panelSignals = new wxPanel( m_splitterSignals, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_panelSignals = new wxPanel( m_splitterSignals, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panelSignals->SetMinSize( wxSize( -1,100 ) ); wxBoxSizer* bSizer10;
bSizer10 = new wxBoxSizer( wxVERTICAL );
wxStaticBoxSizer* sbSizer1;
sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( m_panelSignals, wxID_ANY, _("Signals") ), wxVERTICAL ); m_staticText2 = new wxStaticText( m_panelSignals, wxID_ANY, _("Signals"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText2->Wrap( -1 );
m_signals = new wxListView( sbSizer1->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_SINGLE_SEL ); bSizer10->Add( m_staticText2, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 );
sbSizer1->Add( m_signals, 1, wxALL|wxEXPAND, 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( sbSizer1 );
m_panelSignals->SetSizer( bSizer10 );
m_panelSignals->Layout(); 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 = new wxPanel( m_splitterSignals, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panelCursorsAndTune->SetMinSize( wxSize( -1,300 ) ); m_panelCursorsAndTune->SetMinSize( wxSize( -1,300 ) );
wxBoxSizer* bSizer9; wxBoxSizer* bSizer9;
bSizer9 = new wxBoxSizer( wxVERTICAL ); 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->SetSashGravity( 0.5 );
m_splitterTuneValues->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterTuneValuesOnIdle ), NULL, this ); m_splitterTuneValues->Connect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterTuneValuesOnIdle ), NULL, this );
m_splitterTuneValues->SetMinimumPaneSize( 20 ); m_splitterTuneValues->SetMinimumPaneSize( 20 );
m_panelCursors = new wxPanel( m_splitterTuneValues, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_panelCursors = new wxPanel( m_splitterTuneValues, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panelCursors->SetMinSize( wxSize( -1,100 ) ); wxBoxSizer* bSizer12;
bSizer12 = new wxBoxSizer( wxVERTICAL );
wxStaticBoxSizer* sbSizer3;
sbSizer3 = new wxStaticBoxSizer( new wxStaticBox( m_panelCursors, wxID_ANY, _("Cursors") ), wxVERTICAL ); m_staticText3 = new wxStaticText( m_panelCursors, wxID_ANY, _("Cursors"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText3->Wrap( -1 );
m_cursors = new wxListCtrl( sbSizer3->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL ); bSizer12->Add( m_staticText3, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 );
sbSizer3->Add( m_cursors, 1, wxALL|wxEXPAND, 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( sbSizer3 );
m_panelCursors->SetSizer( bSizer12 );
m_panelCursors->Layout(); 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 = new wxPanel( m_splitterTuneValues, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_tunePanel->SetMinSize( wxSize( -1,200 ) ); wxBoxSizer* bSizer13;
bSizer13 = new wxBoxSizer( wxVERTICAL );
m_tuneSizerStb = new wxStaticBoxSizer( new wxStaticBox( m_tunePanel, wxID_ANY, _("Tune") ), wxHORIZONTAL );
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_tuneSizer = new wxBoxSizer( wxHORIZONTAL );
m_tuneSizerStb->Add( m_tuneSizer, 1, wxEXPAND, 5 ); bSizer13->Add( m_tuneSizer, 1, wxEXPAND, 5 );
m_tunePanel->SetSizer( m_tuneSizerStb ); m_tunePanel->SetSizer( bSizer13 );
m_tunePanel->Layout(); m_tunePanel->Layout();
m_tuneSizerStb->Fit( m_tunePanel ); bSizer13->Fit( m_tunePanel );
m_splitterTuneValues->SplitHorizontally( m_panelCursors, m_tunePanel, 0 ); m_splitterTuneValues->SplitHorizontally( m_panelCursors, m_tunePanel, 0 );
bSizer9->Add( m_splitterTuneValues, 1, wxEXPAND, 5 ); bSizer9->Add( m_splitterTuneValues, 1, wxEXPAND, 5 );
m_panelCursorsAndTune->SetSizer( bSizer9 ); m_panelCursorsAndTune->SetSizer( bSizer9 );
m_panelCursorsAndTune->Layout(); m_panelCursorsAndTune->Layout();
bSizer9->Fit( m_panelCursorsAndTune ); bSizer9->Fit( m_panelCursorsAndTune );
m_splitterSignals->SplitHorizontally( m_panelSignals, m_panelCursorsAndTune, 0 ); m_splitterSignals->SplitHorizontally( m_panelSignals, m_panelCursorsAndTune, 0 );
m_sideSizer->Add( m_splitterSignals, 1, wxEXPAND, 5 ); m_sideSizer->Add( m_splitterSignals, 1, wxEXPAND, 5 );
m_sidePanel->SetSizer( m_sideSizer ); m_sidePanel->SetSizer( m_sideSizer );
m_sidePanel->Layout(); m_sidePanel->Layout();
m_sideSizer->Fit( m_sidePanel ); m_sideSizer->Fit( m_sidePanel );
m_splitterLeftRight->SplitVertically( m_panelLeft, m_sidePanel, 700 ); m_splitterLeftRight->SplitVertically( m_panelLeft, m_sidePanel, 700 );
m_sizerMain->Add( m_splitterLeftRight, 1, wxEXPAND, 5 ); m_sizerMain->Add( m_splitterLeftRight, 1, wxEXPAND, 5 );
this->SetSizer( m_sizerMain ); this->SetSizer( m_sizerMain );
this->Layout(); this->Layout();
m_sizerMain->Fit( this );
this->Centre( wxBOTH ); this->Centre( wxBOTH );
// Connect Events // Connect Events
m_fileMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuNewPlot ), this, m_newPlot->GetId()); this->Connect( m_newPlot->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuNewPlot ) );
m_fileMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuOpenWorkbook ), this, m_openWorkbook->GetId()); this->Connect( m_openWorkbook->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuOpenWorkbook ) );
m_fileMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveWorkbook ), this, m_saveWorkbook->GetId()); this->Connect( m_saveWorkbook->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveWorkbook ) );
m_fileMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveImage ), this, m_saveImage->GetId()); this->Connect( m_saveImage->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveImage ) );
m_fileMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveCsv ), this, m_saveCsv->GetId()); this->Connect( m_saveCsv->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuSaveCsv ) );
m_fileMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuExit ), this, m_exitSim->GetId()); this->Connect( m_exitSim->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuExit ) );
m_viewMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomIn ), this, m_zoomIn->GetId()); this->Connect( m_zoomIn->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomIn ) );
m_viewMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomOut ), this, m_zoomOut->GetId()); this->Connect( m_zoomOut->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomOut ) );
m_viewMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomFit ), this, m_zoomFit->GetId()); this->Connect( m_zoomFit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuZoomFit ) );
m_viewMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIM_PLOT_FRAME_BASE::menuShowGrid ), this, m_showGrid->GetId()); 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 ) ); 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 ) ); 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_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 ); 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() SIM_PLOT_FRAME_BASE::~SIM_PLOT_FRAME_BASE()
{ {
// Disconnect Events // 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_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 ) ); 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_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_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_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 ); m_signals->Disconnect( wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, wxListEventHandler( SIM_PLOT_FRAME_BASE::onSignalRClick ), NULL, this );
} }

File diff suppressed because it is too large Load Diff

View File

@ -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/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
#pragma once #ifndef __SIM_PLOT_FRAME_BASE_H__
#define __SIM_PLOT_FRAME_BASE_H__
#include <wx/artprov.h> #include <wx/artprov.h>
#include <wx/xrc/xmlres.h> #include <wx/xrc/xmlres.h>
@ -28,7 +29,6 @@
#include <wx/textctrl.h> #include <wx/textctrl.h>
#include <wx/splitter.h> #include <wx/splitter.h>
#include <wx/listctrl.h> #include <wx/listctrl.h>
#include <wx/statbox.h>
#include <wx/frame.h> #include <wx/frame.h>
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -50,7 +50,7 @@
class SIM_PLOT_FRAME_BASE : public KIWAY_PLAYER class SIM_PLOT_FRAME_BASE : public KIWAY_PLAYER
{ {
private: private:
protected: protected:
wxMenuBar* m_mainMenu; wxMenuBar* m_mainMenu;
wxMenu* m_fileMenu; wxMenu* m_fileMenu;
@ -81,15 +81,17 @@ class SIM_PLOT_FRAME_BASE : public KIWAY_PLAYER
wxBoxSizer* m_sideSizer; wxBoxSizer* m_sideSizer;
wxSplitterWindow* m_splitterSignals; wxSplitterWindow* m_splitterSignals;
wxPanel* m_panelSignals; wxPanel* m_panelSignals;
wxStaticText* m_staticText2;
wxListView* m_signals; wxListView* m_signals;
wxPanel* m_panelCursorsAndTune; wxPanel* m_panelCursorsAndTune;
wxSplitterWindow* m_splitterTuneValues; wxSplitterWindow* m_splitterTuneValues;
wxPanel* m_panelCursors; wxPanel* m_panelCursors;
wxStaticText* m_staticText3;
wxListCtrl* m_cursors; wxListCtrl* m_cursors;
wxPanel* m_tunePanel; wxPanel* m_tunePanel;
wxStaticBoxSizer* m_tuneSizerStb; wxStaticText* m_staticText4;
wxBoxSizer* m_tuneSizer; wxBoxSizer* m_tuneSizer;
// Virtual event handlers, overide them in your derived class // Virtual event handlers, overide them in your derived class
virtual void menuNewPlot( wxCommandEvent& event ) { event.Skip(); } virtual void menuNewPlot( wxCommandEvent& event ) { event.Skip(); }
virtual void menuOpenWorkbook( 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 onPlotClose( wxAuiNotebookEvent& event ) { event.Skip(); }
virtual void onSignalDblClick( wxMouseEvent& event ) { event.Skip(); } virtual void onSignalDblClick( wxMouseEvent& event ) { event.Skip(); }
virtual void onSignalRClick( wxListEvent& event ) { event.Skip(); } virtual void onSignalRClick( wxListEvent& event ) { event.Skip(); }
public: 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(); ~SIM_PLOT_FRAME_BASE();
void m_splitterLeftRightOnIdle( wxIdleEvent& ) void m_splitterLeftRightOnIdle( wxIdleEvent& )
{ {
m_splitterLeftRight->SetSashPosition( 700 ); m_splitterLeftRight->SetSashPosition( 700 );
m_splitterLeftRight->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterLeftRightOnIdle ), NULL, this ); m_splitterLeftRight->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterLeftRightOnIdle ), NULL, this );
} }
void m_splitterPlotAndConsoleOnIdle( wxIdleEvent& ) void m_splitterPlotAndConsoleOnIdle( wxIdleEvent& )
{ {
m_splitterPlotAndConsole->SetSashPosition( 500 ); m_splitterPlotAndConsole->SetSashPosition( 500 );
m_splitterPlotAndConsole->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterPlotAndConsoleOnIdle ), NULL, this ); m_splitterPlotAndConsole->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterPlotAndConsoleOnIdle ), NULL, this );
} }
void m_splitterSignalsOnIdle( wxIdleEvent& ) void m_splitterSignalsOnIdle( wxIdleEvent& )
{ {
m_splitterSignals->SetSashPosition( 0 ); m_splitterSignals->SetSashPosition( 0 );
m_splitterSignals->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterSignalsOnIdle ), NULL, this ); m_splitterSignals->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterSignalsOnIdle ), NULL, this );
} }
void m_splitterTuneValuesOnIdle( wxIdleEvent& ) void m_splitterTuneValuesOnIdle( wxIdleEvent& )
{ {
m_splitterTuneValues->SetSashPosition( 0 ); m_splitterTuneValues->SetSashPosition( 0 );
m_splitterTuneValues->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterTuneValuesOnIdle ), NULL, this ); m_splitterTuneValues->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SIM_PLOT_FRAME_BASE::m_splitterTuneValuesOnIdle ), NULL, this );
} }
}; };
#endif //__SIM_PLOT_FRAME_BASE_H__

View File

@ -427,6 +427,13 @@ void SCH_EDITOR_CONTROL::doCrossProbeSchToPcb( const TOOL_EVENT& aEvent, bool aF
#ifdef KICAD_SPICE #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 ) int SCH_EDITOR_CONTROL::SimProbe( const TOOL_EVENT& aEvent )
{ {
PICKER_TOOL* picker = m_toolMgr->GetTool<PICKER_TOOL>(); PICKER_TOOL* picker = m_toolMgr->GetTool<PICKER_TOOL>();
@ -439,10 +446,8 @@ int SCH_EDITOR_CONTROL::SimProbe( const TOOL_EVENT& aEvent )
picker->SetClickHandler( picker->SetClickHandler(
[this] ( const VECTOR2D& aPosition ) [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<EE_SELECTION_TOOL>(); EE_SELECTION_TOOL* selTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
EDA_ITEM* item = selTool->SelectPoint( aPosition, wiresAndComponents ); EDA_ITEM* item = selTool->SelectPoint( aPosition, wiresAndPins );
if( !item ) if( !item )
return false; return false;
@ -454,10 +459,10 @@ int SCH_EDITOR_CONTROL::SimProbe( const TOOL_EVENT& aEvent )
if( obj->m_Comp == item ) if( obj->m_Comp == item )
{ {
SIM_PLOT_FRAME* simFrame = 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 ) if( simFrame )
simFrame->AddVoltagePlot( obj->GetNetName() ); simFrame->AddVoltagePlot( UnescapeString( obj->GetNetName() ) );
break; break;
} }
@ -466,6 +471,37 @@ int SCH_EDITOR_CONTROL::SimProbe( const TOOL_EVENT& aEvent )
return true; 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<EE_SELECTION_TOOL>();
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<EE_SELECTION_TOOL>()->UnbrightenItem( m_pickerItem );
} );
std::string tool = aEvent.GetCommandStr().get(); std::string tool = aEvent.GetCommandStr().get();
m_toolMgr->RunAction( ACTIONS::pickerTool, true, &tool ); m_toolMgr->RunAction( ACTIONS::pickerTool, true, &tool );
@ -485,8 +521,6 @@ int SCH_EDITOR_CONTROL::SimTune( const TOOL_EVENT& aEvent )
picker->SetClickHandler( picker->SetClickHandler(
[this] ( const VECTOR2D& aPosition ) [this] ( const VECTOR2D& aPosition )
{ {
KICAD_T fieldsAndComponents[] = { SCH_COMPONENT_T, SCH_FIELD_T, EOT };
EE_SELECTION_TOOL* selTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>(); EE_SELECTION_TOOL* selTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
EDA_ITEM* item = selTool->SelectPoint( aPosition, fieldsAndComponents ); EDA_ITEM* item = selTool->SelectPoint( aPosition, fieldsAndComponents );
@ -501,7 +535,8 @@ int SCH_EDITOR_CONTROL::SimTune( const TOOL_EVENT& aEvent )
return false; 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 ) if( simFrame )
simFrame->AddTuner( static_cast<SCH_COMPONENT*>( item ) ); simFrame->AddTuner( static_cast<SCH_COMPONENT*>( item ) );
@ -509,6 +544,37 @@ int SCH_EDITOR_CONTROL::SimTune( const TOOL_EVENT& aEvent )
return true; 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<EE_SELECTION_TOOL>();
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<EE_SELECTION_TOOL>()->UnbrightenItem( m_pickerItem );
} );
std::string tool = aEvent.GetCommandStr().get(); std::string tool = aEvent.GetCommandStr().get();
m_toolMgr->RunAction( ACTIONS::pickerTool, true, &tool ); m_toolMgr->RunAction( ACTIONS::pickerTool, true, &tool );

View File

@ -41,7 +41,8 @@ class SCH_EDITOR_CONTROL : public wxEvtHandler, public EE_TOOL_BASE<SCH_EDIT_FRA
public: public:
SCH_EDITOR_CONTROL() : SCH_EDITOR_CONTROL() :
EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.EditorControl" ), EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.EditorControl" ),
m_probingPcbToSch( false ) m_probingPcbToSch( false ),
m_pickerItem( nullptr )
{ } { }
~SCH_EDITOR_CONTROL() { } ~SCH_EDITOR_CONTROL() { }
@ -176,7 +177,8 @@ private:
void setTransitions() override; void setTransitions() override;
private: 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.
}; };