kicad/eeschema/sim/toolbars_simulator_frame.cpp

177 lines
6.1 KiB
C++
Raw Normal View History

2023-01-01 23:37:24 +00:00
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2023 CERN
* Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <sim/simulator_frame.h>
2023-01-01 23:37:24 +00:00
#include <tool/action_menu.h>
#include <tool/action_toolbar.h>
#include <tool/common_control.h>
#include <tool/tool_manager.h>
#include <tools/ee_actions.h>
#include <widgets/wx_menubar.h>
void SIMULATOR_FRAME::ReCreateHToolbar()
2023-01-01 23:37:24 +00:00
{
if( m_toolBar )
{
m_toolBar->ClearToolbar();
m_toolBar->SetToolManager( GetToolManager() );
}
else
{
2023-03-04 18:02:05 +00:00
EDA_BASE_FRAME* parent = dynamic_cast<EDA_BASE_FRAME*>( this );
wxCHECK( parent, /* void */ );
m_toolBar = new ACTION_TOOLBAR( parent, wxID_ANY, wxDefaultPosition, wxDefaultSize,
2023-01-01 23:37:24 +00:00
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
}
m_toolBar->Add( EE_ACTIONS::openWorkbook );
m_toolBar->Add( EE_ACTIONS::saveWorkbook );
m_toolBar->AddScaledSeparator( this );
m_toolBar->Add( EE_ACTIONS::newAnalysisTab );
m_toolBar->Add( EE_ACTIONS::simAnalysisProperties );
2023-01-01 23:37:24 +00:00
m_toolBar->AddScaledSeparator( this );
m_toolBar->Add( EE_ACTIONS::runSimulation );
m_toolBar->Add( EE_ACTIONS::stopSimulation );
m_toolBar->AddScaledSeparator( this );
m_toolBar->Add( ACTIONS::zoomInCenter );
m_toolBar->Add( ACTIONS::zoomOutCenter );
Horizontal/vertical zoom for Simulator plots ADDED: Horizontal/vertical zoom for simulator plots, via mouse wheel, toolbar buttons, menu commands, and hotkeys. ADDED: Simulator preferences panel, populated with mouse wheel and trackpad settings that control pan and zoom of simulator plots. ADDED: Zoom In/Out Horizontally/Vertically commands that can be bound to hotkeys. CHANGED: Simulator plot scroll wheel gestures are no longer hard-coded and can now be configured via the new Simulator preferences panel. Fixes https://gitlab.com/kicad/code/kicad/-/issues/16597 Other unreported bugs that were fixed: - Fixed wierd, jumpy simulator plot view limiting behavior. - Fixed Zoom In Center and Zoom Out Center commands not preserving the simulator plot center point. - Fixed simulator plot nudging when exported as PNGs. - Fixed rectangular selection zoom being able to exceed simulator plot view limits. Notes: - Provided new SIM_PREFERENCES struct to be used for future simulator preferences set via the simulator preferences dialog. - Bundled pre-existing EESCHEMA_SETTINGS::SIMULATOR settings into EESCHEMA_SETTINGS::SIMULATOR::VIEW. - Replaced mpWindow::EnableMouseWheelPan with more general SetMouseWheelActions. - Refactored and tidied up wxMathPlot's mpWindow code involved with fitting, zooming, and panning. - Consolidated long lists of duplicated member variable initializers to a new mpWindow private delegated constructor. - Provided provisional Zoom In/Out Horizontally/Vertically toolbar icons that need improvement by a graphics designer. - Provided gitignore entries for the Qt Creator IDE
2024-01-23 01:02:50 +00:00
m_toolBar->Add( ACTIONS::zoomInHorizontally );
m_toolBar->Add( ACTIONS::zoomOutHorizontally );
m_toolBar->Add( ACTIONS::zoomInVertically );
m_toolBar->Add( ACTIONS::zoomOutVertically );
2023-01-01 23:37:24 +00:00
m_toolBar->Add( ACTIONS::zoomFitScreen );
m_toolBar->AddScaledSeparator( this );
m_toolBar->Add( EE_ACTIONS::simProbe );
m_toolBar->Add( EE_ACTIONS::simTune );
m_toolBar->AddScaledSeparator( this );
2023-02-21 09:06:02 +00:00
m_toolBar->Add( EE_ACTIONS::editUserDefinedSignals );
2023-01-01 23:37:24 +00:00
m_toolBar->Add( EE_ACTIONS::showNetlist );
// after adding the buttons to the toolbar, must call Realize() to reflect the changes
m_toolBar->KiRealize();
m_toolBar->Refresh();
}
void SIMULATOR_FRAME::doReCreateMenuBar()
2023-01-01 23:37:24 +00:00
{
COMMON_CONTROL* tool = m_toolManager->GetTool<COMMON_CONTROL>();
EDA_BASE_FRAME* base_frame = dynamic_cast<EDA_BASE_FRAME*>( this );
// base_frame == nullptr should not happen, but it makes Coverity happy
wxCHECK( base_frame, /* void */ );
2023-01-01 23:37:24 +00:00
// wxWidgets handles the OSX Application menu behind the scenes, but that means
// we always have to start from scratch with a new wxMenuBar.
wxMenuBar* oldMenuBar = base_frame->GetMenuBar();
2023-01-01 23:37:24 +00:00
WX_MENUBAR* menuBar = new WX_MENUBAR();
//-- File menu -----------------------------------------------------------
//
ACTION_MENU* fileMenu = new ACTION_MENU( false, tool );
fileMenu->Add( EE_ACTIONS::newAnalysisTab );
2023-01-01 23:37:24 +00:00
fileMenu->AppendSeparator();
fileMenu->Add( EE_ACTIONS::openWorkbook );
fileMenu->Add( EE_ACTIONS::saveWorkbook );
fileMenu->Add( EE_ACTIONS::saveWorkbookAs );
fileMenu->AppendSeparator();
fileMenu->Add( EE_ACTIONS::exportPlotAsPNG );
fileMenu->Add( EE_ACTIONS::exportPlotAsCSV );
fileMenu->AppendSeparator();
fileMenu->AddClose( _( "Simulator" ) );
2023-01-01 23:37:24 +00:00
//-- View menu -----------------------------------------------------------
//
ACTION_MENU* viewMenu = new ACTION_MENU( false, tool );
viewMenu->Add( ACTIONS::zoomUndo );
viewMenu->Add( ACTIONS::zoomRedo );
viewMenu->AppendSeparator();
2023-01-01 23:37:24 +00:00
viewMenu->Add( ACTIONS::zoomInCenter );
viewMenu->Add( ACTIONS::zoomOutCenter );
Horizontal/vertical zoom for Simulator plots ADDED: Horizontal/vertical zoom for simulator plots, via mouse wheel, toolbar buttons, menu commands, and hotkeys. ADDED: Simulator preferences panel, populated with mouse wheel and trackpad settings that control pan and zoom of simulator plots. ADDED: Zoom In/Out Horizontally/Vertically commands that can be bound to hotkeys. CHANGED: Simulator plot scroll wheel gestures are no longer hard-coded and can now be configured via the new Simulator preferences panel. Fixes https://gitlab.com/kicad/code/kicad/-/issues/16597 Other unreported bugs that were fixed: - Fixed wierd, jumpy simulator plot view limiting behavior. - Fixed Zoom In Center and Zoom Out Center commands not preserving the simulator plot center point. - Fixed simulator plot nudging when exported as PNGs. - Fixed rectangular selection zoom being able to exceed simulator plot view limits. Notes: - Provided new SIM_PREFERENCES struct to be used for future simulator preferences set via the simulator preferences dialog. - Bundled pre-existing EESCHEMA_SETTINGS::SIMULATOR settings into EESCHEMA_SETTINGS::SIMULATOR::VIEW. - Replaced mpWindow::EnableMouseWheelPan with more general SetMouseWheelActions. - Refactored and tidied up wxMathPlot's mpWindow code involved with fitting, zooming, and panning. - Consolidated long lists of duplicated member variable initializers to a new mpWindow private delegated constructor. - Provided provisional Zoom In/Out Horizontally/Vertically toolbar icons that need improvement by a graphics designer. - Provided gitignore entries for the Qt Creator IDE
2024-01-23 01:02:50 +00:00
viewMenu->Add( ACTIONS::zoomInHorizontally );
viewMenu->Add( ACTIONS::zoomOutHorizontally );
viewMenu->Add( ACTIONS::zoomInVertically );
viewMenu->Add( ACTIONS::zoomOutVertically );
2023-01-01 23:37:24 +00:00
viewMenu->Add( ACTIONS::zoomFitScreen );
viewMenu->AppendSeparator();
viewMenu->Add( ACTIONS::toggleGrid, ACTION_MENU::CHECK );
viewMenu->Add( EE_ACTIONS::toggleLegend, ACTION_MENU::CHECK );
viewMenu->Add( EE_ACTIONS::toggleDottedSecondary, ACTION_MENU::CHECK );
viewMenu->Add( EE_ACTIONS::toggleDarkModePlots, ACTION_MENU::CHECK );
2023-01-01 23:37:24 +00:00
//-- Simulation menu -----------------------------------------------------------
//
ACTION_MENU* simulationMenu = new ACTION_MENU( false, tool );
simulationMenu->Add( EE_ACTIONS::newAnalysisTab );
simulationMenu->Add( EE_ACTIONS::simAnalysisProperties );
2023-01-01 23:37:24 +00:00
simulationMenu->Add( EE_ACTIONS::runSimulation );
simulationMenu->AppendSeparator();
simulationMenu->Add( EE_ACTIONS::simProbe );
simulationMenu->Add( EE_ACTIONS::simTune );
simulationMenu->AppendSeparator();
simulationMenu->Add( EE_ACTIONS::editUserDefinedSignals );
2023-01-01 23:37:24 +00:00
simulationMenu->Add( EE_ACTIONS::showNetlist );
//-- Preferences menu -----------------------------------------------
//
ACTION_MENU* prefsMenu = new ACTION_MENU( false, tool );
//prefsMenu->Add( ACTIONS::configurePaths );
//prefsMenu->Add( EE_ACTIONS::showSimLibTable );
prefsMenu->Add( ACTIONS::openPreferences );
prefsMenu->AppendSeparator();
AddMenuLanguageList( prefsMenu, tool );
2023-01-01 23:37:24 +00:00
//-- Menubar -------------------------------------------------------------
//
menuBar->Append( fileMenu, _( "&File" ) );
menuBar->Append( viewMenu, _( "&View" ) );
menuBar->Append( simulationMenu, _( "&Simulation" ) );
menuBar->Append( prefsMenu, _( "&Preferences" ) );
base_frame->AddStandardHelpMenu( menuBar );
2023-01-01 23:37:24 +00:00
base_frame->SetMenuBar( menuBar );
2023-01-01 23:37:24 +00:00
delete oldMenuBar;
}