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
|
2025-01-01 13:30:11 -08:00
|
|
|
* Copyright The KiCad Developers, see AUTHORS.txt for contributors.
|
2023-01-01 23:37:24 +00:00
|
|
|
*
|
|
|
|
* 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/>.
|
|
|
|
*/
|
|
|
|
|
2025-02-26 03:22:49 +00:00
|
|
|
#include <sim/toolbars_simulator_frame.h>
|
|
|
|
|
2023-03-03 22:36:07 +00:00
|
|
|
#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>
|
2025-03-12 14:41:25 +00:00
|
|
|
#include <tools/sch_actions.h>
|
2023-01-01 23:37:24 +00:00
|
|
|
#include <widgets/wx_menubar.h>
|
|
|
|
|
|
|
|
|
2025-02-26 03:22:49 +00:00
|
|
|
std::optional<TOOLBAR_CONFIGURATION> SIMULATOR_TOOLBAR_SETTINGS::DefaultToolbarConfig( TOOLBAR_LOC aToolbar )
|
2023-01-01 23:37:24 +00:00
|
|
|
{
|
2025-02-20 02:53:15 +00:00
|
|
|
TOOLBAR_CONFIGURATION config;
|
|
|
|
|
|
|
|
// clang-format off
|
2025-02-26 03:22:49 +00:00
|
|
|
switch( aToolbar )
|
|
|
|
{
|
|
|
|
case TOOLBAR_LOC::LEFT:
|
|
|
|
case TOOLBAR_LOC::RIGHT:
|
|
|
|
case TOOLBAR_LOC::TOP_AUX:
|
|
|
|
return std::nullopt;
|
|
|
|
|
|
|
|
case TOOLBAR_LOC::TOP_MAIN:
|
2025-03-12 14:41:25 +00:00
|
|
|
config.AppendAction( SCH_ACTIONS::openWorkbook )
|
|
|
|
.AppendAction( SCH_ACTIONS::saveWorkbook );
|
2025-02-26 03:22:49 +00:00
|
|
|
|
|
|
|
config.AppendSeparator()
|
2025-03-12 14:41:25 +00:00
|
|
|
.AppendAction( SCH_ACTIONS::newAnalysisTab )
|
|
|
|
.AppendAction( SCH_ACTIONS::simAnalysisProperties );
|
2025-02-26 03:22:49 +00:00
|
|
|
|
|
|
|
config.AppendSeparator()
|
2025-03-12 14:41:25 +00:00
|
|
|
.AppendAction( SCH_ACTIONS::runSimulation )
|
|
|
|
.AppendAction( SCH_ACTIONS::stopSimulation );
|
2025-02-26 03:22:49 +00:00
|
|
|
|
|
|
|
config.AppendSeparator()
|
|
|
|
.AppendAction( ACTIONS::zoomInCenter )
|
|
|
|
.AppendAction( ACTIONS::zoomOutCenter )
|
|
|
|
.AppendAction( ACTIONS::zoomInHorizontally )
|
|
|
|
.AppendAction( ACTIONS::zoomOutHorizontally )
|
|
|
|
.AppendAction( ACTIONS::zoomInVertically )
|
|
|
|
.AppendAction( ACTIONS::zoomOutVertically )
|
|
|
|
.AppendAction( ACTIONS::zoomFitScreen );
|
|
|
|
|
|
|
|
config.AppendSeparator()
|
2025-03-12 14:41:25 +00:00
|
|
|
.AppendAction( SCH_ACTIONS::simProbe )
|
|
|
|
.AppendAction( SCH_ACTIONS::simTune );
|
2025-02-26 03:22:49 +00:00
|
|
|
|
|
|
|
config.AppendSeparator()
|
2025-03-12 14:41:25 +00:00
|
|
|
.AppendAction( SCH_ACTIONS::editUserDefinedSignals )
|
|
|
|
.AppendAction( SCH_ACTIONS::showNetlist );
|
2025-02-26 03:22:49 +00:00
|
|
|
break;
|
|
|
|
}
|
2025-02-20 02:53:15 +00:00
|
|
|
|
|
|
|
// clang-format on
|
|
|
|
return config;
|
2023-01-01 23:37:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2023-03-03 22:36:07 +00:00
|
|
|
void SIMULATOR_FRAME::doReCreateMenuBar()
|
2023-01-01 23:37:24 +00:00
|
|
|
{
|
|
|
|
COMMON_CONTROL* tool = m_toolManager->GetTool<COMMON_CONTROL>();
|
2023-02-18 13:04:30 +01:00
|
|
|
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.
|
2023-02-18 13:04:30 +01:00
|
|
|
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 );
|
|
|
|
|
2025-03-12 14:41:25 +00:00
|
|
|
fileMenu->Add( SCH_ACTIONS::newAnalysisTab );
|
2023-01-01 23:37:24 +00:00
|
|
|
|
|
|
|
fileMenu->AppendSeparator();
|
2025-03-12 14:41:25 +00:00
|
|
|
fileMenu->Add( SCH_ACTIONS::openWorkbook );
|
|
|
|
fileMenu->Add( SCH_ACTIONS::saveWorkbook );
|
|
|
|
fileMenu->Add( SCH_ACTIONS::saveWorkbookAs );
|
2023-01-01 23:37:24 +00:00
|
|
|
|
|
|
|
fileMenu->AppendSeparator();
|
2025-03-12 14:41:25 +00:00
|
|
|
fileMenu->Add( SCH_ACTIONS::exportPlotAsPNG );
|
|
|
|
fileMenu->Add( SCH_ACTIONS::exportPlotAsCSV );
|
2024-03-19 17:04:42 +01:00
|
|
|
fileMenu->AppendSeparator();
|
2025-03-12 14:41:25 +00:00
|
|
|
fileMenu->Add( SCH_ACTIONS::exportPlotToClipboard );
|
|
|
|
fileMenu->Add( SCH_ACTIONS::exportPlotToSchematic );
|
2023-01-01 23:37:24 +00:00
|
|
|
|
|
|
|
fileMenu->AppendSeparator();
|
|
|
|
fileMenu->AddClose( _( "Simulator" ) );
|
|
|
|
|
2023-01-04 18:06:04 +00:00
|
|
|
|
2023-01-01 23:37:24 +00:00
|
|
|
//-- View menu -----------------------------------------------------------
|
|
|
|
//
|
|
|
|
ACTION_MENU* viewMenu = new ACTION_MENU( false, tool );
|
|
|
|
|
2025-02-27 22:42:11 +00:00
|
|
|
viewMenu->Add( ACTIONS::toggleSimulationSidePanel, ACTION_MENU::CHECK );
|
|
|
|
viewMenu->Add( ACTIONS::toggleConsole, ACTION_MENU::CHECK );
|
|
|
|
|
|
|
|
viewMenu->AppendSeparator();
|
2023-09-26 13:18:28 +01:00
|
|
|
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 );
|
2024-01-22 21:02:50 -04: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 );
|
2025-03-12 14:41:25 +00:00
|
|
|
viewMenu->Add( SCH_ACTIONS::toggleLegend, ACTION_MENU::CHECK );
|
|
|
|
viewMenu->Add( SCH_ACTIONS::toggleDottedSecondary, ACTION_MENU::CHECK );
|
|
|
|
viewMenu->Add( SCH_ACTIONS::toggleDarkModePlots, ACTION_MENU::CHECK );
|
2023-01-01 23:37:24 +00:00
|
|
|
|
2023-01-04 18:06:04 +00:00
|
|
|
|
2023-01-01 23:37:24 +00:00
|
|
|
//-- Simulation menu -----------------------------------------------------------
|
|
|
|
//
|
|
|
|
ACTION_MENU* simulationMenu = new ACTION_MENU( false, tool );
|
|
|
|
|
2025-03-12 14:41:25 +00:00
|
|
|
simulationMenu->Add( SCH_ACTIONS::newAnalysisTab );
|
|
|
|
simulationMenu->Add( SCH_ACTIONS::simAnalysisProperties );
|
|
|
|
simulationMenu->Add( SCH_ACTIONS::runSimulation );
|
2023-01-01 23:37:24 +00:00
|
|
|
|
|
|
|
simulationMenu->AppendSeparator();
|
2025-03-12 14:41:25 +00:00
|
|
|
simulationMenu->Add( SCH_ACTIONS::simProbe );
|
|
|
|
simulationMenu->Add( SCH_ACTIONS::simTune );
|
2023-01-01 23:37:24 +00:00
|
|
|
|
|
|
|
simulationMenu->AppendSeparator();
|
2025-03-12 14:41:25 +00:00
|
|
|
simulationMenu->Add( SCH_ACTIONS::editUserDefinedSignals );
|
|
|
|
simulationMenu->Add( SCH_ACTIONS::showNetlist );
|
2023-01-01 23:37:24 +00:00
|
|
|
|
2023-01-04 18:06:04 +00:00
|
|
|
|
|
|
|
//-- Preferences menu -----------------------------------------------
|
|
|
|
//
|
|
|
|
ACTION_MENU* prefsMenu = new ACTION_MENU( false, tool );
|
|
|
|
|
|
|
|
//prefsMenu->Add( ACTIONS::configurePaths );
|
2025-03-12 14:41:25 +00:00
|
|
|
//prefsMenu->Add( SCH_ACTIONS::showSimLibTable );
|
2023-08-08 00:51:22 +01:00
|
|
|
prefsMenu->Add( ACTIONS::openPreferences );
|
2023-01-04 18:06:04 +00:00
|
|
|
|
|
|
|
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" ) );
|
2023-01-04 18:06:04 +00:00
|
|
|
menuBar->Append( prefsMenu, _( "&Preferences" ) );
|
2023-02-18 13:04:30 +01:00
|
|
|
base_frame->AddStandardHelpMenu( menuBar );
|
2023-01-01 23:37:24 +00:00
|
|
|
|
2023-02-18 13:04:30 +01:00
|
|
|
base_frame->SetMenuBar( menuBar );
|
2023-01-01 23:37:24 +00:00
|
|
|
delete oldMenuBar;
|
|
|
|
}
|