Migrate eeschema, libview and libedit to the UI condition framework

Also, fix some issues in other frames identified along the way.
This commit is contained in:
Ian McInerney 2020-08-07 00:03:58 +01:00
parent 75bc1ef6a7
commit fd4388710d
15 changed files with 565 additions and 466 deletions

View File

@ -94,7 +94,7 @@ SELECTION_CONDITION EDITOR_CONDITIONS::FullscreenCursor()
wxASSERT( drwFrame );
return std::bind( &EDITOR_CONDITIONS::gridFunc, _1, drwFrame );
return std::bind( &EDITOR_CONDITIONS::cursorFunc, _1, drwFrame );
}

View File

@ -183,7 +183,7 @@ DISPLAY_FOOTPRINTS_FRAME::~DISPLAY_FOOTPRINTS_FRAME()
void DISPLAY_FOOTPRINTS_FRAME::setupUIConditions()
{
EDA_BASE_FRAME::setupUIConditions();
PCB_BASE_FRAME::setupUIConditions();
ACTION_MANAGER* mgr = m_toolManager->GetActionManager();
EDITOR_CONDITIONS cond( this );

View File

@ -42,11 +42,13 @@
#include <symbol_tree_model_adapter.h>
#include <pgm_base.h>
#include <settings/settings_manager.h>
#include <tool/tool_manager.h>
#include <tool/action_toolbar.h>
#include <tool/tool_dispatcher.h>
#include <tool/common_tools.h>
#include <tool/common_control.h>
#include <tool/common_tools.h>
#include <tool/editor_conditions.h>
#include <tool/selection.h>
#include <tool/tool_dispatcher.h>
#include <tool/tool_manager.h>
#include <tool/zoom_tool.h>
#include <tools/ee_actions.h>
#include <tools/lib_control.h>
@ -140,6 +142,7 @@ LIB_VIEW_FRAME::LIB_VIEW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame
GetRenderSettings()->SetDefaultPenWidth( DEFAULT_LINE_THICKNESS * IU_PER_MILS );
setupTools();
setupUIConditions();
ReCreateHToolbar();
ReCreateVToolbar();
@ -244,6 +247,67 @@ void LIB_VIEW_FRAME::setupTools()
}
void LIB_VIEW_FRAME::setupUIConditions()
{
SCH_BASE_FRAME::setupUIConditions();
ACTION_MANAGER* mgr = m_toolManager->GetActionManager();
EDITOR_CONDITIONS cond( this );
wxASSERT( mgr );
#define ENABLE( x ) ACTION_CONDITIONS().Enable( x )
#define CHECK( x ) ACTION_CONDITIONS().Check( x )
mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) );
auto electricalTypesShownCondition =
[this] ( const SELECTION& aSel )
{
return GetRenderSettings()->m_ShowPinsElectricalType;
};
auto demorganCond =
[this] ( const SELECTION& )
{
LIB_PART* symbol = GetSelectedSymbol();
return symbol && symbol->HasConversion();
};
auto demorganStandardCond =
[] ( const SELECTION& )
{
return m_convert == LIB_ITEM::LIB_CONVERT::BASE;
};
auto demorganAlternateCond =
[] ( const SELECTION& )
{
return m_convert == LIB_ITEM::LIB_CONVERT::DEMORGAN;
};
auto haveDatasheetCond =
[this] ( const SELECTION& )
{
LIB_PART* symbol = GetSelectedSymbol();
return symbol && !symbol->GetDatasheetField().GetText().IsEmpty();
};
mgr->SetConditions( EE_ACTIONS::showDatasheet, ENABLE( haveDatasheetCond ) );
mgr->SetConditions( EE_ACTIONS::showElectricalTypes, CHECK( electricalTypesShownCondition ) );
mgr->SetConditions( EE_ACTIONS::showDeMorganStandard,
ACTION_CONDITIONS().Enable( demorganCond ).Check( demorganStandardCond ) );
mgr->SetConditions( EE_ACTIONS::showDeMorganAlternate,
ACTION_CONDITIONS().Enable( demorganCond ).Check( demorganAlternateCond ) );
#undef CHECK
#undef ENABLE
}
void LIB_VIEW_FRAME::SetUnitAndConvert( int aUnit, int aConvert )
{
m_unit = aUnit > 0 ? aUnit : 1;
@ -836,3 +900,8 @@ void LIB_VIEW_FRAME::DisplayLibInfos()
}
}
SELECTION& LIB_VIEW_FRAME::GetCurrentSelection()
{
return m_toolManager->GetTool<EE_SELECTION_TOOL>()->GetSelection();
}

View File

@ -29,6 +29,7 @@
#include <sch_base_frame.h>
#include <sch_screen.h>
#include <tool/selection.h>
class wxListBox;
class SCHLIB_FILTER;
@ -144,7 +145,10 @@ public:
const BOX2I GetDocumentExtents() const override;
void SyncToolbars() override;
SELECTION& GetCurrentSelection() override;
protected:
void setupUIConditions() override;
private:
// Sets up the tool framework

View File

@ -42,10 +42,13 @@
#include <sch_view.h>
#include <settings/settings_manager.h>
#include <symbol_lib_table.h>
#include <tool/action_manager.h>
#include <tool/action_toolbar.h>
#include <tool/common_control.h>
#include <tool/common_tools.h>
#include <tool/editor_conditions.h>
#include <tool/picker_tool.h>
#include <tool/selection.h>
#include <tool/tool_dispatcher.h>
#include <tool/tool_manager.h>
#include <tool/zoom_tool.h>
@ -123,6 +126,7 @@ LIB_EDIT_FRAME::LIB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
GetRenderSettings()->LoadColors( GetColorSettings() );
setupTools();
setupUIConditions();
m_libMgr = new LIB_MANAGER( *this );
SyncLibraries( true );
@ -274,6 +278,158 @@ void LIB_EDIT_FRAME::setupTools()
}
void LIB_EDIT_FRAME::setupUIConditions()
{
SCH_BASE_FRAME::setupUIConditions();
ACTION_MANAGER* mgr = m_toolManager->GetActionManager();
EDITOR_CONDITIONS cond( this );
wxASSERT( mgr );
#define ENABLE( x ) ACTION_CONDITIONS().Enable( x )
#define CHECK( x ) ACTION_CONDITIONS().Check( x )
auto haveSymbolCond =
[this] ( const SELECTION& )
{
return m_my_part;
};
auto libMgrModifiedCond =
[this] ( const SELECTION& )
{
return m_libMgr->HasModifications();
};
auto modifiedDocumentCondition =
[this] ( const SELECTION& sel )
{
LIB_ID libId = getTargetLibId();
const wxString& libName = libId.GetLibNickname();
const wxString& partName = libId.GetLibItemName();
bool readOnly = libName.IsEmpty() || m_libMgr->IsLibraryReadOnly( libName );
if( partName.IsEmpty() )
return ( !readOnly && m_libMgr->IsLibraryModified( libName ) );
else
return ( !readOnly && m_libMgr->IsPartModified( partName, libName ) );
};
mgr->SetConditions( ACTIONS::saveAll, ENABLE( libMgrModifiedCond ) );
mgr->SetConditions( ACTIONS::save, ENABLE( haveSymbolCond && modifiedDocumentCondition ) );
mgr->SetConditions( ACTIONS::undo, ENABLE( haveSymbolCond && cond.UndoAvailable() ) );
mgr->SetConditions( ACTIONS::redo, ENABLE( haveSymbolCond && cond.RedoAvailable() ) );
mgr->SetConditions( ACTIONS::revert, ENABLE( haveSymbolCond && modifiedDocumentCondition ) );
mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) );
mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) );
mgr->SetConditions( ACTIONS::metricUnits, CHECK( cond.Units( EDA_UNITS::MILLIMETRES ) ) );
mgr->SetConditions( ACTIONS::imperialUnits, CHECK( cond.Units( EDA_UNITS::INCHES ) ) );
mgr->SetConditions( ACTIONS::acceleratedGraphics, CHECK( cond.CanvasType( EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL ) ) );
mgr->SetConditions( ACTIONS::standardGraphics, CHECK( cond.CanvasType( EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO ) ) );
mgr->SetConditions( ACTIONS::cut, ENABLE( haveSymbolCond && SELECTION_CONDITIONS::NotEmpty ) );
mgr->SetConditions( ACTIONS::copy, ENABLE( haveSymbolCond && SELECTION_CONDITIONS::NotEmpty ) );
mgr->SetConditions( ACTIONS::paste, ENABLE( haveSymbolCond && SELECTION_CONDITIONS::Idle ) );
mgr->SetConditions( ACTIONS::doDelete, ENABLE( haveSymbolCond && SELECTION_CONDITIONS::NotEmpty ) );
mgr->SetConditions( ACTIONS::duplicate, ENABLE( haveSymbolCond && SELECTION_CONDITIONS::NotEmpty ) );
mgr->SetConditions( ACTIONS::zoomTool, CHECK( cond.CurrentTool( ACTIONS::zoomTool ) ) );
mgr->SetConditions( ACTIONS::selectionTool, CHECK( cond.CurrentTool( ACTIONS::selectionTool ) ) );
auto pinTypeCond =
[this] ( const SELECTION& )
{
return GetRenderSettings()->m_ShowPinsElectricalType;
};
auto showCompTreeCond =
[this] ( const SELECTION& )
{
return IsSearchTreeShown();
};
mgr->SetConditions( EE_ACTIONS::showElectricalTypes, CHECK( pinTypeCond ) );
mgr->SetConditions( EE_ACTIONS::showComponentTree, CHECK( showCompTreeCond ) );
auto isEditableCond =
[this] ( const SELECTION& )
{
// Only root symbols are editable
return m_my_part && m_my_part->IsRoot();
};
auto demorganCond =
[this] ( const SELECTION& )
{
return GetShowDeMorgan();
};
auto demorganStandardCond =
[this] ( const SELECTION& )
{
return m_convert == LIB_ITEM::LIB_CONVERT::BASE;
};
auto demorganAlternateCond =
[this] ( const SELECTION& )
{
return m_convert == LIB_ITEM::LIB_CONVERT::DEMORGAN;
};
auto multiUnitModeCond =
[this] ( const SELECTION& )
{
return m_my_part && m_my_part->IsMulti() && !m_my_part->UnitsLocked();
};
auto syncedPinsModeCond =
[this] ( const SELECTION& )
{
return m_SyncPinEdit;
};
auto haveDatasheetCond =
[this] ( const SELECTION& )
{
return m_my_part && !m_my_part->GetDatasheetField().GetText().IsEmpty();
};
mgr->SetConditions( EE_ACTIONS::showDatasheet, ENABLE( haveDatasheetCond ) );
mgr->SetConditions( EE_ACTIONS::symbolProperties, ENABLE( haveSymbolCond ) );
mgr->SetConditions( EE_ACTIONS::runERC, ENABLE( isEditableCond) );
mgr->SetConditions( EE_ACTIONS::pinTable, ENABLE( isEditableCond) );
mgr->SetConditions( EE_ACTIONS::showDeMorganStandard,
ACTION_CONDITIONS().Enable( demorganCond ).Check( demorganStandardCond ) );
mgr->SetConditions( EE_ACTIONS::showDeMorganAlternate,
ACTION_CONDITIONS().Enable( demorganCond ).Check( demorganAlternateCond ) );
mgr->SetConditions( EE_ACTIONS::toggleSyncedPinsMode,
ACTION_CONDITIONS().Enable( multiUnitModeCond ).Check( syncedPinsModeCond ) );
// Only enable a tool if the part is edtable
#define EDIT_TOOL( tool ) ACTION_CONDITIONS().Enable( isEditableCond ).Check( cond.CurrentTool( tool ) )
mgr->SetConditions( ACTIONS::deleteTool, EDIT_TOOL( ACTIONS::deleteTool ) );
mgr->SetConditions( EE_ACTIONS::placeSymbolPin, EDIT_TOOL( EE_ACTIONS::placeSymbolPin ) );
mgr->SetConditions( EE_ACTIONS::placeSymbolText, EDIT_TOOL( EE_ACTIONS::placeSymbolText ) );
mgr->SetConditions( EE_ACTIONS::drawSymbolRectangle, EDIT_TOOL( EE_ACTIONS::drawSymbolRectangle ) );
mgr->SetConditions( EE_ACTIONS::drawSymbolCircle, EDIT_TOOL( EE_ACTIONS::drawSymbolCircle ) );
mgr->SetConditions( EE_ACTIONS::drawSymbolArc, EDIT_TOOL( EE_ACTIONS::drawSymbolArc ) );
mgr->SetConditions( EE_ACTIONS::drawSymbolLines, EDIT_TOOL( EE_ACTIONS::drawSymbolLines ) );
mgr->SetConditions( EE_ACTIONS::placeSymbolAnchor, EDIT_TOOL( EE_ACTIONS::placeSymbolAnchor ) );
RegisterUIUpdateHandler( ID_LIBEDIT_IMPORT_BODY_BUTT, ENABLE( isEditableCond ) );
RegisterUIUpdateHandler( ID_LIBEDIT_EXPORT_BODY_BUTT, ENABLE( isEditableCond ) );
#undef CHECK
#undef ENABLE
#undef EDIT_TOOL
}
void LIB_EDIT_FRAME::OnCloseWindow( wxCloseEvent& aEvent )
{
// Shutdown blocks must be determined and vetoed as early as possible
@ -944,3 +1100,7 @@ void LIB_EDIT_FRAME::ClearUndoORRedoList( UNDO_REDO_LIST whichList, int aItemCou
}
SELECTION& LIB_EDIT_FRAME::GetCurrentSelection()
{
return m_toolManager->GetTool<EE_SELECTION_TOOL>()->GetSelection();
}

View File

@ -145,6 +145,8 @@ public:
LIB_MANAGER& GetLibManager();
SELECTION& GetCurrentSelection() override;
void ReCreateMenuBar() override;
// See comments for m_SyncPinEdit.
@ -256,6 +258,9 @@ public:
void ClearMsgPanel() override { DisplayCmpDoc(); }
protected:
void setupUIConditions() override;
private:
// Sets up the tool framework
void setupTools();
@ -421,8 +426,6 @@ public:
void ShowChangedLanguage() override;
void SyncToolbars() override;
void SetScreen( BASE_SCREEN* aScreen ) override;
const BOX2I GetDocumentExtents() const override;

View File

@ -25,7 +25,7 @@
#include <menus_helpers.h>
#include <pgm_base.h>
#include <tool/conditional_menu.h>
#include <tool/action_menu.h>
#include <tool/tool_manager.h>
#include <tools/ee_actions.h>
#include <tools/ee_selection_tool.h>
@ -42,38 +42,22 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
wxMenuBar* oldMenuBar = GetMenuBar();
WX_MENUBAR* menuBar = new WX_MENUBAR();
auto modifiedDocumentCondition = [ this ] ( const SELECTION& sel ) {
LIB_ID libId = getTargetLibId();
const wxString& libName = libId.GetLibNickname();
const wxString& partName = libId.GetLibItemName();
bool readOnly = libName.IsEmpty() || m_libMgr->IsLibraryReadOnly( libName );
if( partName.IsEmpty() )
return ( !readOnly && m_libMgr->IsLibraryModified( libName ) );
else
return ( !readOnly && m_libMgr->IsPartModified( partName, libName ) );
};
auto saveAllEnableCondition = [this] ( const SELECTION& sel ) {
return m_libMgr->HasModifications();
};
//-- File menu -----------------------------------------------
//
CONDITIONAL_MENU* fileMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* fileMenu = new ACTION_MENU( false, selTool );
fileMenu->AddItem( ACTIONS::newLibrary, EE_CONDITIONS::ShowAlways );
fileMenu->AddItem( ACTIONS::addLibrary, EE_CONDITIONS::ShowAlways );
fileMenu->AddItem( EE_ACTIONS::newSymbol, EE_CONDITIONS::ShowAlways );
fileMenu->Add( ACTIONS::newLibrary );
fileMenu->Add( ACTIONS::addLibrary );
fileMenu->Add( EE_ACTIONS::newSymbol );
fileMenu->AddSeparator();
fileMenu->AddItem( ACTIONS::save, modifiedDocumentCondition );
fileMenu->AddItem( ACTIONS::saveCopyAs, EE_CONDITIONS::ShowAlways );
fileMenu->AddItem( ACTIONS::saveAll, saveAllEnableCondition );
fileMenu->AddItem( ACTIONS::revert, modifiedDocumentCondition );
fileMenu->AppendSeparator();
fileMenu->Add( ACTIONS::save );
fileMenu->Add( ACTIONS::saveCopyAs );
fileMenu->Add( ACTIONS::saveAll );
fileMenu->Add( ACTIONS::revert );
fileMenu->AddSeparator();
fileMenu->AddItem( EE_ACTIONS::importSymbol, EE_CONDITIONS::ShowAlways );
fileMenu->AppendSeparator();
fileMenu->Add( EE_ACTIONS::importSymbol );
// Export submenu
ACTION_MENU* submenuExport = new ACTION_MENU( false );
@ -83,142 +67,100 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
submenuExport->Add( EE_ACTIONS::exportSymbol );
submenuExport->Add( EE_ACTIONS::exportSymbolView );
submenuExport->Add( EE_ACTIONS::exportSymbolAsSVG );
fileMenu->AddMenu( submenuExport, EE_CONDITIONS::ShowAlways );
fileMenu->Add( submenuExport );
fileMenu->AddSeparator();
fileMenu->AppendSeparator();
fileMenu->AddClose( _( "Library Editor" ) );
fileMenu->Resolve();
//-- Edit menu -----------------------------------------------
//
CONDITIONAL_MENU* editMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* editMenu = new ACTION_MENU( false, selTool );
auto enableUndoCondition = [ this ] ( const SELECTION& sel ) {
return m_my_part && GetUndoCommandCount() != 0;
};
auto enableRedoCondition = [ this ] ( const SELECTION& sel ) {
return m_my_part && GetRedoCommandCount() != 0;
};
auto haveSymbolCondition = [ this ] ( const SELECTION& sel ) {
return m_my_part != nullptr;
};
auto isRootSymbolCondition = [ this ] ( const SELECTION& sel ) {
return m_my_part != nullptr && m_my_part->IsRoot();
};
editMenu->Add( ACTIONS::undo );
editMenu->Add( ACTIONS::redo );
editMenu->AddItem( ACTIONS::undo, enableUndoCondition );
editMenu->AddItem( ACTIONS::redo, enableRedoCondition );
editMenu->AppendSeparator();
editMenu->Add( ACTIONS::cut );
editMenu->Add( ACTIONS::copy );
editMenu->Add( ACTIONS::paste );
editMenu->Add( ACTIONS::doDelete );
editMenu->Add( ACTIONS::duplicate );
editMenu->AddSeparator();
editMenu->AddItem( ACTIONS::cut, EE_CONDITIONS::NotEmpty );
editMenu->AddItem( ACTIONS::copy, EE_CONDITIONS::NotEmpty );
editMenu->AddItem( ACTIONS::paste, EE_CONDITIONS::Idle );
editMenu->AddItem( ACTIONS::doDelete, EE_CONDITIONS::NotEmpty );
editMenu->AddItem( ACTIONS::duplicate, EE_CONDITIONS::NotEmpty );
editMenu->AppendSeparator();
editMenu->Add( EE_ACTIONS::symbolProperties );
editMenu->Add( EE_ACTIONS::pinTable );
editMenu->AddSeparator();
editMenu->AddItem( EE_ACTIONS::symbolProperties, haveSymbolCondition );
editMenu->AddItem( EE_ACTIONS::pinTable, isRootSymbolCondition );
editMenu->Resolve();
//-- View menu -----------------------------------------------
//
CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* viewMenu = new ACTION_MENU( false, selTool );
auto gridShownCondition = [ this ] ( const SELECTION& aSel ) {
return IsGridVisible();
};
auto imperialUnitsCondition = [this]( const SELECTION& aSel ) {
return GetUserUnits() == EDA_UNITS::INCHES;
};
auto metricUnitsCondition = [this]( const SELECTION& aSel ) {
return GetUserUnits() == EDA_UNITS::MILLIMETRES;
};
auto fullCrosshairCondition = [ this ] ( const SELECTION& aSel ) {
return GetGalDisplayOptions().m_fullscreenCursor;
};
auto compTreeShownCondition = [ this ] ( const SELECTION& aSel ) {
return IsSearchTreeShown();
};
viewMenu->Add( ACTIONS::showSymbolBrowser );
viewMenu->AddItem( ACTIONS::showSymbolBrowser, EE_CONDITIONS::ShowAlways );
viewMenu->AppendSeparator();
viewMenu->Add( ACTIONS::zoomInCenter );
viewMenu->Add( ACTIONS::zoomOutCenter );
viewMenu->Add( ACTIONS::zoomFitScreen );
viewMenu->Add( ACTIONS::zoomTool );
viewMenu->Add( ACTIONS::zoomRedraw );
viewMenu->AddSeparator();
viewMenu->AddItem( ACTIONS::zoomInCenter, EE_CONDITIONS::ShowAlways );
viewMenu->AddItem( ACTIONS::zoomOutCenter, EE_CONDITIONS::ShowAlways );
viewMenu->AddItem( ACTIONS::zoomFitScreen, EE_CONDITIONS::ShowAlways );
viewMenu->AddItem( ACTIONS::zoomTool, EE_CONDITIONS::ShowAlways );
viewMenu->AddItem( ACTIONS::zoomRedraw, EE_CONDITIONS::ShowAlways );
viewMenu->AddSeparator();
viewMenu->AddCheckItem( ACTIONS::toggleGrid, gridShownCondition );
viewMenu->AddItem( ACTIONS::gridProperties, EE_CONDITIONS::ShowAlways );
viewMenu->AppendSeparator();
viewMenu->Add( ACTIONS::toggleGrid, ACTION_MENU::CHECK );
viewMenu->Add( ACTIONS::gridProperties );
// Units submenu
CONDITIONAL_MENU* unitsSubMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* unitsSubMenu = new ACTION_MENU( false, selTool );
unitsSubMenu->SetTitle( _( "&Units" ) );
unitsSubMenu->SetIcon( unit_mm_xpm );
unitsSubMenu->AddCheckItem( ACTIONS::imperialUnits, imperialUnitsCondition );
unitsSubMenu->AddCheckItem( ACTIONS::metricUnits, metricUnitsCondition );
viewMenu->AddMenu( unitsSubMenu );
unitsSubMenu->Add( ACTIONS::imperialUnits, ACTION_MENU::CHECK );
unitsSubMenu->Add( ACTIONS::metricUnits, ACTION_MENU::CHECK );
viewMenu->Add( unitsSubMenu );
viewMenu->AddCheckItem( ACTIONS::toggleCursorStyle, fullCrosshairCondition );
viewMenu->Add( ACTIONS::toggleCursorStyle, ACTION_MENU::CHECK );
viewMenu->AddSeparator();
viewMenu->AddCheckItem( EE_ACTIONS::showComponentTree, compTreeShownCondition );
viewMenu->AppendSeparator();
viewMenu->Add( EE_ACTIONS::showComponentTree, ACTION_MENU::CHECK );
viewMenu->Resolve();
//-- Place menu -----------------------------------------------
//
CONDITIONAL_MENU* placeMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* placeMenu = new ACTION_MENU( false, selTool );
placeMenu->AddItem( EE_ACTIONS::placeSymbolPin, isRootSymbolCondition );
placeMenu->AddItem( EE_ACTIONS::placeSymbolText, isRootSymbolCondition );
placeMenu->AddItem( EE_ACTIONS::drawSymbolRectangle, isRootSymbolCondition );
placeMenu->AddItem( EE_ACTIONS::drawSymbolCircle, isRootSymbolCondition );
placeMenu->AddItem( EE_ACTIONS::drawSymbolArc, isRootSymbolCondition );
placeMenu->AddItem( EE_ACTIONS::drawSymbolLines, isRootSymbolCondition );
placeMenu->Add( EE_ACTIONS::placeSymbolPin );
placeMenu->Add( EE_ACTIONS::placeSymbolText );
placeMenu->Add( EE_ACTIONS::drawSymbolRectangle );
placeMenu->Add( EE_ACTIONS::drawSymbolCircle );
placeMenu->Add( EE_ACTIONS::drawSymbolArc );
placeMenu->Add( EE_ACTIONS::drawSymbolLines );
placeMenu->Resolve();
//-- Inspect menu -----------------------------------------------
//
CONDITIONAL_MENU* inspectMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* inspectMenu = new ACTION_MENU( false, selTool );
inspectMenu->AddItem( EE_ACTIONS::showDatasheet, haveSymbolCondition );
inspectMenu->AddItem( EE_ACTIONS::runERC, isRootSymbolCondition );
inspectMenu->Add( EE_ACTIONS::showDatasheet );
inspectMenu->Add( EE_ACTIONS::runERC );
inspectMenu->Resolve();
//-- Preferences menu -----------------------------------------------
//
CONDITIONAL_MENU* prefsMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* prefsMenu = new ACTION_MENU( false, selTool );
auto acceleratedGraphicsCondition = [ this ] ( const SELECTION& aSel ) {
return GetCanvas()->GetBackend() == EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL;
};
auto standardGraphicsCondition = [ this ] ( const SELECTION& aSel ) {
return GetCanvas()->GetBackend() == EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO;
};
prefsMenu->AddItem( ACTIONS::configurePaths, EE_CONDITIONS::ShowAlways );
prefsMenu->AddItem( ACTIONS::showSymbolLibTable, EE_CONDITIONS::ShowAlways );
prefsMenu->AddItem( wxID_PREFERENCES,
_( "Preferences...\tCTRL+," ),
prefsMenu->Add( ACTIONS::configurePaths );
prefsMenu->Add( ACTIONS::showSymbolLibTable );
prefsMenu->Add( _( "Preferences...\tCTRL+," ),
_( "Show preferences for all open tools" ),
preference_xpm, EE_CONDITIONS::ShowAlways );
wxID_PREFERENCES,
preference_xpm );
prefsMenu->AddSeparator();
prefsMenu->AppendSeparator();
AddMenuLanguageList( prefsMenu, selTool );
prefsMenu->AddSeparator();
prefsMenu->AddCheckItem( ACTIONS::acceleratedGraphics, acceleratedGraphicsCondition );
prefsMenu->AddCheckItem( ACTIONS::standardGraphics, standardGraphicsCondition );
prefsMenu->AppendSeparator();
prefsMenu->Add( ACTIONS::acceleratedGraphics, ACTION_MENU::CHECK );
prefsMenu->Add( ACTIONS::standardGraphics, ACTION_MENU::CHECK );
prefsMenu->Resolve();
//-- Menubar -------------------------------------------------------------
//

View File

@ -148,56 +148,3 @@ void LIB_EDIT_FRAME::ReCreateOptToolbar()
m_optionsToolBar->Realize();
}
void LIB_EDIT_FRAME::SyncToolbars()
{
KIGFX::SCH_RENDER_SETTINGS* settings = GetRenderSettings();
KIGFX::GAL_DISPLAY_OPTIONS& galOpts = GetGalDisplayOptions();
bool isEditable = m_my_part && m_my_part->IsRoot();
m_mainToolBar->Toggle( ACTIONS::saveAll, m_libMgr->HasModifications() );
m_mainToolBar->Toggle( ACTIONS::undo, GetUndoCommandCount() > 0 );
m_mainToolBar->Toggle( ACTIONS::redo, GetRedoCommandCount() > 0 );
m_mainToolBar->Toggle( ACTIONS::zoomTool, IsCurrentTool( ACTIONS::zoomTool ) );
m_mainToolBar->Toggle( EE_ACTIONS::showDatasheet, (bool) m_my_part );
m_mainToolBar->Toggle( EE_ACTIONS::runERC, isEditable );
m_mainToolBar->Toggle( EE_ACTIONS::showDeMorganStandard,
GetShowDeMorgan(),
m_convert == LIB_ITEM::LIB_CONVERT::BASE );
m_mainToolBar->Toggle( EE_ACTIONS::showDeMorganAlternate,
GetShowDeMorgan(),
m_convert == LIB_ITEM::LIB_CONVERT::DEMORGAN );
m_mainToolBar->Toggle( EE_ACTIONS::pinTable, isEditable );
m_mainToolBar->Toggle( EE_ACTIONS::toggleSyncedPinsMode,
m_my_part && m_my_part->IsMulti() && !m_my_part->UnitsLocked(),
m_SyncPinEdit );
m_mainToolBar->Refresh();
m_optionsToolBar->Toggle( ACTIONS::toggleGrid, IsGridVisible() );
m_optionsToolBar->Toggle( ACTIONS::metricUnits,
GetUserUnits() != EDA_UNITS::INCHES );
m_optionsToolBar->Toggle( ACTIONS::imperialUnits,
GetUserUnits() == EDA_UNITS::INCHES );
m_optionsToolBar->Toggle( ACTIONS::toggleCursorStyle, galOpts.m_fullscreenCursor );
m_optionsToolBar->Toggle( EE_ACTIONS::showElectricalTypes, settings->m_ShowPinsElectricalType );
m_optionsToolBar->Toggle( EE_ACTIONS::showComponentTree, IsSearchTreeShown() );
m_optionsToolBar->Refresh();
#define TOGGLE_TOOL( toolbar, enable, tool ) toolbar->Toggle( tool, enable, IsCurrentTool( tool ) )
TOGGLE_TOOL( m_drawToolBar, isEditable, ACTIONS::selectionTool );
TOGGLE_TOOL( m_drawToolBar, isEditable, EE_ACTIONS::placeSymbolPin );
TOGGLE_TOOL( m_drawToolBar, isEditable, EE_ACTIONS::placeSymbolText );
TOGGLE_TOOL( m_drawToolBar, isEditable, EE_ACTIONS::drawSymbolRectangle );
TOGGLE_TOOL( m_drawToolBar, isEditable, EE_ACTIONS::drawSymbolCircle );
TOGGLE_TOOL( m_drawToolBar, isEditable, EE_ACTIONS::drawSymbolArc );
TOGGLE_TOOL( m_drawToolBar, isEditable, EE_ACTIONS::drawSymbolLines );
TOGGLE_TOOL( m_drawToolBar, isEditable, EE_ACTIONS::placeSymbolAnchor );
TOGGLE_TOOL( m_drawToolBar, isEditable, ACTIONS::deleteTool );
m_drawToolBar->EnableTool( ID_LIBEDIT_IMPORT_BODY_BUTT, isEditable );
m_drawToolBar->EnableTool( ID_LIBEDIT_EXPORT_BODY_BUTT, isEditable );
m_drawToolBar->Refresh();
}

View File

@ -29,7 +29,7 @@
#include <menus_helpers.h>
#include <pgm_base.h>
#include <schematic.h>
#include <tool/conditional_menu.h>
#include <tool/action_menu.h>
#include <tool/tool_manager.h>
#include <tools/ee_selection_tool.h>
#include <tools/ee_actions.h>
@ -46,14 +46,9 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
wxMenuBar* oldMenuBar = GetMenuBar();
WX_MENUBAR* menuBar = new WX_MENUBAR();
auto modifiedDocumentCondition = [&]( const SELECTION& sel )
{
return Schematic().GetSheets().IsModified();
};
//-- File menu -----------------------------------------------------------
//
CONDITIONAL_MENU* fileMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* fileMenu = new ACTION_MENU( false, selTool );
static ACTION_MENU* openRecentMenu;
if( Kiface().IsSingle() ) // When not under a project mgr
@ -73,22 +68,29 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
fileHistory.AddFilesToMenu( openRecentMenu );
}
fileMenu->AddItem( ACTIONS::doNew, EE_CONDITIONS::ShowAlways );
fileMenu->AddItem( ACTIONS::open, EE_CONDITIONS::ShowAlways );
fileMenu->AddMenu( openRecentMenu, FILE_HISTORY::FileHistoryNotEmpty( fileHistory ) );
fileMenu->AddSeparator();
fileMenu->Add( ACTIONS::doNew );
fileMenu->Add( ACTIONS::open );
wxMenuItem* item = fileMenu->Add( openRecentMenu );
// Add the file menu condition here since it needs the item ID for the submenu
ACTION_CONDITIONS cond;
cond.Enable( FILE_HISTORY::FileHistoryNotEmpty( fileHistory ) );
RegisterUIUpdateHandler( item->GetId(), cond );
fileMenu->AppendSeparator();
}
fileMenu->AddItem( ACTIONS::save, modifiedDocumentCondition );
fileMenu->AddItem( ACTIONS::saveAs, EE_CONDITIONS::ShowAlways );
fileMenu->Add( ACTIONS::save );
fileMenu->Add( ACTIONS::saveAs );
fileMenu->AddSeparator();
fileMenu->AppendSeparator();
fileMenu->AddItem( ID_APPEND_PROJECT, _( "Append Schematic Sheet Content..." ),
fileMenu->Add( _( "Append Schematic Sheet Content..." ),
_( "Append schematic sheet content from another project to the current sheet" ),
add_document_xpm, EE_CONDITIONS::ShowAlways );
ID_APPEND_PROJECT,
add_document_xpm );
fileMenu->AddSeparator();
fileMenu->AppendSeparator();
// Import submenu
ACTION_MENU* submenuImport = new ACTION_MENU( false );
@ -97,10 +99,11 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
submenuImport->SetIcon( import_xpm );
submenuImport->Add( _( "Import Non KiCad Schematic..." ),
_( "Replace current schematic sheet with one imported from another application" ),
ID_IMPORT_NON_KICAD_SCH, import_document_xpm );
ID_IMPORT_NON_KICAD_SCH,
import_document_xpm );
submenuImport->Add( EE_ACTIONS::importFPAssignments );
fileMenu->AddMenu( submenuImport, EE_CONDITIONS::ShowAlways );
fileMenu->Add( submenuImport );
// Export submenu
@ -110,228 +113,162 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
submenuExport->SetIcon( export_xpm );
submenuExport->Add( EE_ACTIONS::drawSheetOnClipboard );
submenuExport->Add( EE_ACTIONS::exportNetlist );
fileMenu->AddMenu( submenuExport, EE_CONDITIONS::ShowAlways );
fileMenu->Add( submenuExport );
fileMenu->AddSeparator();
fileMenu->AddItem( EE_ACTIONS::schematicSetup, EE_CONDITIONS::ShowAlways );
fileMenu->AppendSeparator();
fileMenu->Add( EE_ACTIONS::schematicSetup );
fileMenu->AddSeparator();
fileMenu->AddItem( ACTIONS::pageSettings, EE_CONDITIONS::ShowAlways );
fileMenu->AddItem( ACTIONS::print, EE_CONDITIONS::ShowAlways );
fileMenu->AddItem( ACTIONS::plot, EE_CONDITIONS::ShowAlways );
fileMenu->AppendSeparator();
fileMenu->Add( ACTIONS::pageSettings );
fileMenu->Add( ACTIONS::print );
fileMenu->Add( ACTIONS::plot );
fileMenu->AddSeparator();
fileMenu->AppendSeparator();
fileMenu->AddQuitOrClose( &Kiface(), _( "Eeschema" ) );
fileMenu->Resolve();
//-- Edit menu -----------------------------------------------------------
//
CONDITIONAL_MENU* editMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* editMenu = new ACTION_MENU( false, selTool );
auto enableUndoCondition = [ this ] ( const SELECTION& sel ) {
return GetUndoCommandCount() > 0;
};
auto enableRedoCondition = [ this ] ( const SELECTION& sel ) {
return GetRedoCommandCount() > 0;
};
editMenu->Add( ACTIONS::undo );
editMenu->Add( ACTIONS::redo );
editMenu->AddItem( ACTIONS::undo, enableUndoCondition );
editMenu->AddItem( ACTIONS::redo, enableRedoCondition );
editMenu->AppendSeparator();
editMenu->Add( ACTIONS::cut );
editMenu->Add( ACTIONS::copy );
editMenu->Add( ACTIONS::paste );
editMenu->Add( ACTIONS::pasteSpecial );
editMenu->Add( ACTIONS::doDelete );
editMenu->Add( ACTIONS::duplicate );
editMenu->AddSeparator();
editMenu->AddItem( ACTIONS::cut, EE_CONDITIONS::NotEmpty );
editMenu->AddItem( ACTIONS::copy, EE_CONDITIONS::NotEmpty );
editMenu->AddItem( ACTIONS::paste, EE_CONDITIONS::Idle );
editMenu->AddItem( ACTIONS::pasteSpecial, EE_CONDITIONS::Idle );
editMenu->AddItem( ACTIONS::doDelete, EE_CONDITIONS::NotEmpty );
editMenu->AddItem( ACTIONS::duplicate, EE_CONDITIONS::NotEmpty );
editMenu->AppendSeparator();
editMenu->Add( ACTIONS::find );
editMenu->Add( ACTIONS::findAndReplace );
editMenu->AddSeparator();
editMenu->AddItem( ACTIONS::find, EE_CONDITIONS::ShowAlways );
editMenu->AddItem( ACTIONS::findAndReplace, EE_CONDITIONS::ShowAlways );
editMenu->AppendSeparator();
editMenu->Add( ACTIONS::deleteTool );
editMenu->Add( EE_ACTIONS::editTextAndGraphics );
editMenu->Add( EE_ACTIONS::updateFieldsFromLibrary );
editMenu->Add( EE_ACTIONS::changeSymbols );
editMenu->Add( EE_ACTIONS::updateSymbols );
editMenu->AddSeparator();
editMenu->AddItem( ACTIONS::deleteTool, EE_CONDITIONS::ShowAlways );
editMenu->AddItem( EE_ACTIONS::editTextAndGraphics, EE_CONDITIONS::ShowAlways );
editMenu->AddItem( EE_ACTIONS::updateFieldsFromLibrary, EE_CONDITIONS::ShowAlways );
editMenu->AddItem( EE_ACTIONS::changeSymbols, EE_CONDITIONS::ShowAlways );
editMenu->AddItem( EE_ACTIONS::updateSymbols, EE_CONDITIONS::ShowAlways );
editMenu->Resolve();
//-- View menu -----------------------------------------------------------
//
CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* viewMenu = new ACTION_MENU( false, selTool );
auto belowRootSheetCondition =
[this]( const SELECTION& aSel )
{
return GetCurrentSheet().Last() != &Schematic().Root();
};
viewMenu->Add( ACTIONS::showSymbolBrowser );
viewMenu->Add( EE_ACTIONS::navigateHierarchy );
viewMenu->Add( EE_ACTIONS::leaveSheet );
auto gridShownCondition =
[this]( const SELECTION& aSel )
{
return IsGridVisible();
};
viewMenu->AppendSeparator();
viewMenu->Add( ACTIONS::zoomInCenter );
viewMenu->Add( ACTIONS::zoomOutCenter );
viewMenu->Add( ACTIONS::zoomFitScreen );
viewMenu->Add( ACTIONS::zoomTool );
viewMenu->Add( ACTIONS::zoomRedraw );
auto imperialUnitsCondition =
[this]( const SELECTION& aSel )
{
return GetUserUnits() == EDA_UNITS::INCHES;
};
auto metricUnitsCondition =
[this]( const SELECTION& aSel )
{
return GetUserUnits() == EDA_UNITS::MILLIMETRES;
};
auto fullCrosshairCondition =
[this]( const SELECTION& aSel )
{
return GetGalDisplayOptions().m_fullscreenCursor;
};
auto hiddenPinsCondition =
[this]( const SELECTION& aSel )
{
return GetShowAllPins();
};
viewMenu->AddItem( ACTIONS::showSymbolBrowser, EE_CONDITIONS::ShowAlways );
viewMenu->AddItem( EE_ACTIONS::navigateHierarchy, EE_CONDITIONS::ShowAlways );
viewMenu->AddItem( EE_ACTIONS::leaveSheet, belowRootSheetCondition );
viewMenu->AddSeparator();
viewMenu->AddItem( ACTIONS::zoomInCenter, EE_CONDITIONS::ShowAlways );
viewMenu->AddItem( ACTIONS::zoomOutCenter, EE_CONDITIONS::ShowAlways );
viewMenu->AddItem( ACTIONS::zoomFitScreen, EE_CONDITIONS::ShowAlways );
viewMenu->AddItem( ACTIONS::zoomTool, EE_CONDITIONS::ShowAlways );
viewMenu->AddItem( ACTIONS::zoomRedraw, EE_CONDITIONS::ShowAlways );
viewMenu->AddSeparator();
viewMenu->AddCheckItem( ACTIONS::toggleGrid, gridShownCondition );
viewMenu->AddItem( ACTIONS::gridProperties, EE_CONDITIONS::ShowAlways );
viewMenu->AppendSeparator();
viewMenu->Add( ACTIONS::toggleGrid, ACTION_MENU::CHECK );
viewMenu->Add( ACTIONS::gridProperties );
// Units submenu
CONDITIONAL_MENU* unitsSubMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* unitsSubMenu = new ACTION_MENU( false, selTool );
unitsSubMenu->SetTitle( _( "&Units" ) );
unitsSubMenu->SetIcon( unit_mm_xpm );
unitsSubMenu->AddCheckItem( ACTIONS::imperialUnits, imperialUnitsCondition );
unitsSubMenu->AddCheckItem( ACTIONS::metricUnits, metricUnitsCondition );
viewMenu->AddMenu( unitsSubMenu );
unitsSubMenu->Add( ACTIONS::imperialUnits, ACTION_MENU::CHECK );
unitsSubMenu->Add( ACTIONS::metricUnits, ACTION_MENU::CHECK );
viewMenu->Add( unitsSubMenu );
viewMenu->AddCheckItem( ACTIONS::toggleCursorStyle, fullCrosshairCondition );
viewMenu->Add( ACTIONS::toggleCursorStyle, ACTION_MENU::CHECK );
viewMenu->AddSeparator();
viewMenu->AddCheckItem( EE_ACTIONS::toggleHiddenPins, hiddenPinsCondition );
viewMenu->AppendSeparator();
viewMenu->Add( EE_ACTIONS::toggleHiddenPins, ACTION_MENU::CHECK );
#ifdef __APPLE__
viewMenu->AddSeparator();
viewMenu->AppendSeparator();
#endif
viewMenu->Resolve();
//-- Place menu -----------------------------------------------------------
//
CONDITIONAL_MENU* placeMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* placeMenu = new ACTION_MENU( false, selTool );
placeMenu->AddItem( EE_ACTIONS::placeSymbol, EE_CONDITIONS::ShowAlways );
placeMenu->AddItem( EE_ACTIONS::placePower, EE_CONDITIONS::ShowAlways );
placeMenu->AddItem( EE_ACTIONS::drawWire, EE_CONDITIONS::ShowAlways );
placeMenu->AddItem( EE_ACTIONS::drawBus, EE_CONDITIONS::ShowAlways );
placeMenu->AddItem( EE_ACTIONS::placeBusWireEntry, EE_CONDITIONS::ShowAlways );
placeMenu->AddItem( EE_ACTIONS::placeNoConnect, EE_CONDITIONS::ShowAlways );
placeMenu->AddItem( EE_ACTIONS::placeJunction, EE_CONDITIONS::ShowAlways );
placeMenu->AddItem( EE_ACTIONS::placeLabel, EE_CONDITIONS::ShowAlways );
placeMenu->AddItem( EE_ACTIONS::placeGlobalLabel, EE_CONDITIONS::ShowAlways );
placeMenu->Add( EE_ACTIONS::placeSymbol );
placeMenu->Add( EE_ACTIONS::placePower );
placeMenu->Add( EE_ACTIONS::drawWire );
placeMenu->Add( EE_ACTIONS::drawBus );
placeMenu->Add( EE_ACTIONS::placeBusWireEntry );
placeMenu->Add( EE_ACTIONS::placeNoConnect );
placeMenu->Add( EE_ACTIONS::placeJunction );
placeMenu->Add( EE_ACTIONS::placeLabel );
placeMenu->Add( EE_ACTIONS::placeGlobalLabel );
placeMenu->AddSeparator();
placeMenu->AddItem( EE_ACTIONS::placeHierLabel, EE_CONDITIONS::ShowAlways );
placeMenu->AddItem( EE_ACTIONS::drawSheet, EE_CONDITIONS::ShowAlways );
placeMenu->AddItem( EE_ACTIONS::importSheetPin, EE_CONDITIONS::ShowAlways );
placeMenu->AppendSeparator();
placeMenu->Add( EE_ACTIONS::placeHierLabel );
placeMenu->Add( EE_ACTIONS::drawSheet );
placeMenu->Add( EE_ACTIONS::importSheetPin );
placeMenu->AddSeparator();
placeMenu->AddItem( EE_ACTIONS::drawLines, EE_CONDITIONS::ShowAlways );
placeMenu->AddItem( EE_ACTIONS::placeSchematicText, EE_CONDITIONS::ShowAlways );
placeMenu->AddItem( EE_ACTIONS::placeImage, EE_CONDITIONS::ShowAlways );
placeMenu->AppendSeparator();
placeMenu->Add( EE_ACTIONS::drawLines );
placeMenu->Add( EE_ACTIONS::placeSchematicText );
placeMenu->Add( EE_ACTIONS::placeImage );
placeMenu->Resolve();
//-- Inspect menu -----------------------------------------------
//
CONDITIONAL_MENU* inspectMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* inspectMenu = new ACTION_MENU( false, selTool );
inspectMenu->AddItem( EE_ACTIONS::runERC, EE_CONDITIONS::ShowAlways );
inspectMenu->Add( EE_ACTIONS::runERC );
#ifdef KICAD_SPICE
inspectMenu->AddItem( EE_ACTIONS::runSimulation, EE_CONDITIONS::ShowAlways );
inspectMenu->Add( EE_ACTIONS::runSimulation );
#endif
inspectMenu->Resolve();
//-- Tools menu -----------------------------------------------
//
CONDITIONAL_MENU* toolsMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* toolsMenu = new ACTION_MENU( false, selTool );
auto remapSymbolsCondition =
[&]( const SELECTION& aSel )
{
SCH_SCREENS schematic( Schematic().Root() );
toolsMenu->Add( ACTIONS::updatePcbFromSchematic );
toolsMenu->Add( ACTIONS::updateSchematicFromPcb );
toolsMenu->Add( EE_ACTIONS::showPcbNew );
// The remapping can only be performed on legacy projects.
return schematic.HasNoFullyDefinedLibIds();
};
toolsMenu->AppendSeparator();
toolsMenu->Add( ACTIONS::showSymbolEditor );
toolsMenu->Add( EE_ACTIONS::rescueSymbols );
toolsMenu->Add( EE_ACTIONS::remapSymbols );
toolsMenu->AddItem( ACTIONS::updatePcbFromSchematic, EE_CONDITIONS::ShowAlways );
toolsMenu->AddItem( ACTIONS::updateSchematicFromPcb, EE_CONDITIONS::ShowAlways );
toolsMenu->AddItem( EE_ACTIONS::showPcbNew, EE_CONDITIONS::ShowAlways );
toolsMenu->AppendSeparator();
toolsMenu->Add( EE_ACTIONS::editSymbolFields );
toolsMenu->Add( EE_ACTIONS::editSymbolLibraryLinks );
toolsMenu->AddSeparator();
toolsMenu->AddItem( ACTIONS::showSymbolEditor, EE_CONDITIONS::ShowAlways );
toolsMenu->AddItem( EE_ACTIONS::rescueSymbols, EE_CONDITIONS::ShowAlways );
toolsMenu->AddItem( EE_ACTIONS::remapSymbols, remapSymbolsCondition );
toolsMenu->AppendSeparator();
toolsMenu->Add( EE_ACTIONS::annotate );
toolsMenu->Add( EE_ACTIONS::showBusManager );
toolsMenu->AddSeparator();
toolsMenu->AddItem( EE_ACTIONS::editSymbolFields, EE_CONDITIONS::ShowAlways );
toolsMenu->AddItem( EE_ACTIONS::editSymbolLibraryLinks, EE_CONDITIONS::ShowAlways );
toolsMenu->AppendSeparator();
toolsMenu->Add( EE_ACTIONS::assignFootprints );
toolsMenu->Add( EE_ACTIONS::generateBOM );
toolsMenu->AddSeparator();
toolsMenu->AddItem( EE_ACTIONS::annotate, EE_CONDITIONS::ShowAlways );
toolsMenu->AddItem( EE_ACTIONS::showBusManager, EE_CONDITIONS::ShowAlways );
toolsMenu->AddSeparator();
toolsMenu->AddItem( EE_ACTIONS::assignFootprints, EE_CONDITIONS::ShowAlways );
toolsMenu->AddItem( EE_ACTIONS::generateBOM, EE_CONDITIONS::ShowAlways );
toolsMenu->Resolve();
//-- Preferences menu -----------------------------------------------
//
CONDITIONAL_MENU* prefsMenu = new CONDITIONAL_MENU( false, selTool );
ACTION_MENU* prefsMenu = new ACTION_MENU( false, selTool );
auto acceleratedGraphicsCondition = [ this ] ( const SELECTION& aSel ) {
return GetCanvas()->GetBackend() == EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL;
};
auto standardGraphicsCondition = [ this ] ( const SELECTION& aSel ) {
return GetCanvas()->GetBackend() == EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO;
};
prefsMenu->AddItem( ACTIONS::configurePaths, EE_CONDITIONS::ShowAlways );
prefsMenu->AddItem( ACTIONS::showSymbolLibTable, EE_CONDITIONS::ShowAlways );
prefsMenu->AddItem( wxID_PREFERENCES,
_( "Preferences...\tCTRL+," ),
prefsMenu->Add( ACTIONS::configurePaths );
prefsMenu->Add( ACTIONS::showSymbolLibTable );
prefsMenu->Add( _( "Preferences...\tCTRL+," ),
_( "Show preferences for all open tools" ),
preference_xpm, EE_CONDITIONS::ShowAlways );
wxID_PREFERENCES,
preference_xpm );
prefsMenu->AddSeparator();
prefsMenu->AppendSeparator();
AddMenuLanguageList( prefsMenu, selTool );
prefsMenu->AddSeparator();
prefsMenu->AddCheckItem( ACTIONS::acceleratedGraphics, acceleratedGraphicsCondition );
prefsMenu->AddCheckItem( ACTIONS::standardGraphics, standardGraphicsCondition );
prefsMenu->AppendSeparator();
prefsMenu->Add( ACTIONS::acceleratedGraphics, ACTION_MENU::CHECK );
prefsMenu->Add( ACTIONS::standardGraphics, ACTION_MENU::CHECK );
prefsMenu->Resolve();
//-- Menubar -------------------------------------------------------------
//

View File

@ -55,10 +55,13 @@
#include <advanced_config.h>
#include <sim/sim_plot_frame.h>
#include <symbol_lib_table.h>
#include <tool/action_manager.h>
#include <tool/action_toolbar.h>
#include <tool/common_control.h>
#include <tool/common_tools.h>
#include <tool/editor_conditions.h>
#include <tool/picker_tool.h>
#include <tool/selection.h>
#include <tool/tool_dispatcher.h>
#include <tool/tool_manager.h>
#include <tool/zoom_tool.h>
@ -234,6 +237,7 @@ SCH_EDIT_FRAME::SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ):
LoadProjectSettings();
setupTools();
setupUIConditions();
ReCreateMenuBar();
ReCreateHToolbar();
ReCreateVToolbar();
@ -345,6 +349,98 @@ void SCH_EDIT_FRAME::setupTools()
}
void SCH_EDIT_FRAME::setupUIConditions()
{
SCH_BASE_FRAME::setupUIConditions();
ACTION_MANAGER* mgr = m_toolManager->GetActionManager();
EDITOR_CONDITIONS cond( this );
wxASSERT( mgr );
#define ENABLE( x ) ACTION_CONDITIONS().Enable( x )
#define CHECK( x ) ACTION_CONDITIONS().Check( x )
mgr->SetConditions( ACTIONS::save, ENABLE( cond.ContentModified() ) );
mgr->SetConditions( ACTIONS::undo, ENABLE( cond.UndoAvailable() ) );
mgr->SetConditions( ACTIONS::redo, ENABLE( cond.RedoAvailable() ) );
mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) );
mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) );
mgr->SetConditions( ACTIONS::metricUnits, CHECK( cond.Units( EDA_UNITS::MILLIMETRES ) ) );
mgr->SetConditions( ACTIONS::imperialUnits, CHECK( cond.Units( EDA_UNITS::INCHES ) ) );
mgr->SetConditions( ACTIONS::acceleratedGraphics, CHECK( cond.CanvasType( EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL ) ) );
mgr->SetConditions( ACTIONS::standardGraphics, CHECK( cond.CanvasType( EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO ) ) );
mgr->SetConditions( ACTIONS::cut, ENABLE( SELECTION_CONDITIONS::NotEmpty ) );
mgr->SetConditions( ACTIONS::copy, ENABLE( SELECTION_CONDITIONS::NotEmpty ) );
mgr->SetConditions( ACTIONS::paste, ENABLE( SELECTION_CONDITIONS::Idle ) );
mgr->SetConditions( ACTIONS::pasteSpecial, ENABLE( SELECTION_CONDITIONS::Idle ) );
mgr->SetConditions( ACTIONS::doDelete, ENABLE( SELECTION_CONDITIONS::NotEmpty ) );
mgr->SetConditions( ACTIONS::duplicate, ENABLE( SELECTION_CONDITIONS::NotEmpty ) );
mgr->SetConditions( ACTIONS::zoomTool, CHECK( cond.CurrentTool( ACTIONS::zoomTool ) ) );
mgr->SetConditions( ACTIONS::selectionTool, CHECK( cond.CurrentTool( ACTIONS::selectionTool ) ) );
auto showHiddenPinsCond =
[this] ( const SELECTION& )
{
return GetShowAllPins();
};
auto forceHVCond =
[this] ( const SELECTION& )
{
return eeconfig()->m_Drawing.hv_lines_only;
};
auto remapSymbolsCondition =
[&]( const SELECTION& aSel )
{
SCH_SCREENS schematic( Schematic().Root() );
// The remapping can only be performed on legacy projects.
return schematic.HasNoFullyDefinedLibIds();
};
auto belowRootSheetCondition =
[this]( const SELECTION& aSel )
{
return GetCurrentSheet().Last() != &Schematic().Root();
};
mgr->SetConditions( EE_ACTIONS::leaveSheet, ENABLE( belowRootSheetCondition ) );
mgr->SetConditions( EE_ACTIONS::remapSymbols, ENABLE( remapSymbolsCondition ) );
mgr->SetConditions( EE_ACTIONS::toggleHiddenPins, CHECK( showHiddenPinsCond ) );
mgr->SetConditions( EE_ACTIONS::toggleForceHV, CHECK( forceHVCond ) );
#define CURRENT_TOOL( action ) mgr->SetConditions( action, CHECK( cond.CurrentTool( action ) ) )
CURRENT_TOOL( ACTIONS::deleteTool );
CURRENT_TOOL( EE_ACTIONS::highlightNetTool );
CURRENT_TOOL( EE_ACTIONS::placeSymbol );
CURRENT_TOOL( EE_ACTIONS::placePower );
CURRENT_TOOL( EE_ACTIONS::drawWire );
CURRENT_TOOL( EE_ACTIONS::drawBus );
CURRENT_TOOL( EE_ACTIONS::placeBusWireEntry );
CURRENT_TOOL( EE_ACTIONS::placeNoConnect );
CURRENT_TOOL( EE_ACTIONS::placeJunction );
CURRENT_TOOL( EE_ACTIONS::placeLabel );
CURRENT_TOOL( EE_ACTIONS::placeGlobalLabel );
CURRENT_TOOL( EE_ACTIONS::placeHierLabel );
CURRENT_TOOL( EE_ACTIONS::drawSheet );
CURRENT_TOOL( EE_ACTIONS::importSheetPin );
CURRENT_TOOL( EE_ACTIONS::drawLines );
CURRENT_TOOL( EE_ACTIONS::placeSchematicText );
CURRENT_TOOL( EE_ACTIONS::placeImage );
#undef CURRENT_TOOL
#undef CHECK
#undef ENABLE
}
void SCH_EDIT_FRAME::SaveCopyForRepeatItem( SCH_ITEM* aItem )
{
// we cannot store a pointer to an item in the display list here since
@ -1241,3 +1337,9 @@ wxString SCH_EDIT_FRAME::GetCurrentFileName() const
{
return Schematic().GetFileName();
}
SELECTION& SCH_EDIT_FRAME::GetCurrentSelection()
{
return m_toolManager->GetTool<EE_SELECTION_TOOL>()->GetSelection();
}

View File

@ -160,6 +160,8 @@ public:
SCH_SCREEN* GetScreen() const override;
SELECTION& GetCurrentSelection() override;
SCHEMATIC& Schematic() const;
void OnCloseWindow( wxCloseEvent& Event );
@ -215,6 +217,8 @@ public:
void ReCreateOptToolbar() override;
void ReCreateMenuBar() override;
void setupUIConditions() override;
/**
* Get if the current schematic has been modified but not saved.
*
@ -943,8 +947,6 @@ public:
void ShowChangedLanguage() override;
void SyncToolbars() override;
void SetScreen( BASE_SCREEN* aScreen ) override;
const BOX2I GetDocumentExtents() const override;

View File

@ -27,8 +27,8 @@
#include "lib_view_frame.h"
#include "sch_painter.h"
#include <symbol_lib_table.h>
#include <tool/action_menu.h>
#include <tool/action_toolbar.h>
#include <tool/conditional_menu.h>
#include <tool/tool_manager.h>
#include <tools/ee_actions.h>
#include <tools/lib_control.h>
@ -101,37 +101,27 @@ void LIB_VIEW_FRAME::ReCreateMenuBar()
//-- File menu -----------------------------------------------------------
//
CONDITIONAL_MENU* fileMenu = new CONDITIONAL_MENU( false, libControl );
ACTION_MENU* fileMenu = new ACTION_MENU( false, libControl );
fileMenu->AddClose( _( "Footprint Viewer" ) );
fileMenu->Resolve();
//-- View menu -----------------------------------------------------------
//
CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, libControl );
ACTION_MENU* viewMenu = new ACTION_MENU( false, libControl );
auto gridShownCondition = [ this ] ( const SELECTION& aSel ) {
return IsGridVisible();
};
auto electricalTypesShownCondition = [ this ] ( const SELECTION& aSel ) {
return GetRenderSettings()->m_ShowPinsElectricalType;
};
viewMenu->Add( ACTIONS::zoomInCenter );
viewMenu->Add( ACTIONS::zoomOutCenter );
viewMenu->Add( ACTIONS::zoomFitScreen );
viewMenu->Add( ACTIONS::zoomRedraw );
viewMenu->AddItem( ACTIONS::zoomInCenter, EE_CONDITIONS::ShowAlways );
viewMenu->AddItem( ACTIONS::zoomOutCenter, EE_CONDITIONS::ShowAlways );
viewMenu->AddItem( ACTIONS::zoomFitScreen, EE_CONDITIONS::ShowAlways );
viewMenu->AddItem( ACTIONS::zoomRedraw, EE_CONDITIONS::ShowAlways );
viewMenu->AppendSeparator();
viewMenu->Add( ACTIONS::toggleGrid, ACTION_MENU::CHECK );
viewMenu->Add( ACTIONS::gridProperties );
viewMenu->AddSeparator();
viewMenu->AddCheckItem( ACTIONS::toggleGrid, gridShownCondition );
viewMenu->AddItem( ACTIONS::gridProperties, EE_CONDITIONS::ShowAlways );
viewMenu->AppendSeparator();
viewMenu->Add( EE_ACTIONS::showElectricalTypes, ACTION_MENU::CHECK );
viewMenu->AddSeparator();
viewMenu->AddCheckItem( EE_ACTIONS::showElectricalTypes, electricalTypesShownCondition );
viewMenu->Resolve();
//-- Menubar -------------------------------------------------------------
//
@ -142,17 +132,3 @@ void LIB_VIEW_FRAME::ReCreateMenuBar()
SetMenuBar( menuBar );
delete oldMenuBar;
}
void LIB_VIEW_FRAME::SyncToolbars()
{
LIB_PART* symbol = GetSelectedSymbol();
m_mainToolBar->Toggle( EE_ACTIONS::showDatasheet,
symbol && !symbol->GetDatasheetField().GetText().IsEmpty() );
m_mainToolBar->Toggle( EE_ACTIONS::showDeMorganStandard, symbol && symbol->HasConversion(),
m_convert == LIB_FIELD::LIB_CONVERT::BASE );
m_mainToolBar->Toggle( EE_ACTIONS::showDeMorganAlternate, symbol && symbol->HasConversion(),
m_convert == LIB_FIELD::LIB_CONVERT::DEMORGAN );
m_mainToolBar->Refresh();
}

View File

@ -162,46 +162,3 @@ void SCH_EDIT_FRAME::ReCreateOptToolbar()
m_optionsToolBar->Realize();
}
void SCH_EDIT_FRAME::SyncToolbars()
{
#define TOGGLE_TOOL( toolbar, tool ) toolbar->Toggle( tool, IsCurrentTool( tool ) )
KIGFX::GAL_DISPLAY_OPTIONS& galOpts = GetGalDisplayOptions();
m_mainToolBar->Toggle( ACTIONS::save, IsContentModified() );
m_mainToolBar->Toggle( ACTIONS::undo, GetUndoCommandCount() > 0 );
m_mainToolBar->Toggle( ACTIONS::redo, GetRedoCommandCount() > 0 );
TOGGLE_TOOL( m_mainToolBar, ACTIONS::zoomTool );
m_mainToolBar->Refresh();
m_optionsToolBar->Toggle( ACTIONS::toggleGrid, IsGridVisible() );
m_optionsToolBar->Toggle( ACTIONS::metricUnits, GetUserUnits() != EDA_UNITS::INCHES );
m_optionsToolBar->Toggle( ACTIONS::imperialUnits, GetUserUnits() == EDA_UNITS::INCHES );
m_optionsToolBar->Toggle( ACTIONS::toggleCursorStyle, galOpts.m_fullscreenCursor );
m_optionsToolBar->Toggle( EE_ACTIONS::toggleHiddenPins, GetShowAllPins() );
m_optionsToolBar->Toggle( EE_ACTIONS::toggleForceHV, eeconfig()->m_Drawing.hv_lines_only );
m_optionsToolBar->Refresh();
TOGGLE_TOOL( m_drawToolBar, ACTIONS::selectionTool );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::highlightNetTool );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeSymbol );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placePower );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::drawWire );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::drawBus );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeBusWireEntry );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeNoConnect );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeJunction );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeLabel );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeGlobalLabel );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeHierLabel );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::drawSheet );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::importSheetPin );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::drawLines );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeSchematicText );
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeImage );
TOGGLE_TOOL( m_drawToolBar, ACTIONS::deleteTool );
m_drawToolBar->Refresh();
}

View File

@ -1175,7 +1175,7 @@ void GERBVIEW_FRAME::setupTools()
void GERBVIEW_FRAME::setupUIConditions()
{
EDA_BASE_FRAME::setupUIConditions();
EDA_DRAW_FRAME::setupUIConditions();
ACTION_MANAGER* mgr = m_toolManager->GetActionManager();
EDITOR_CONDITIONS cond( this );

View File

@ -242,7 +242,7 @@ void PL_EDITOR_FRAME::setupTools()
void PL_EDITOR_FRAME::setupUIConditions()
{
EDA_BASE_FRAME::setupUIConditions();
EDA_DRAW_FRAME::setupUIConditions();
ACTION_MANAGER* mgr = m_toolManager->GetActionManager();
EDITOR_CONDITIONS cond( this );
@ -259,10 +259,10 @@ void PL_EDITOR_FRAME::setupUIConditions()
mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) );
mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) );
mgr->SetConditions( ACTIONS::cut, ENABLE( SELECTION_CONDITIONS::MoreThan( 0 ) ) );
mgr->SetConditions( ACTIONS::copy, ENABLE( SELECTION_CONDITIONS::MoreThan( 0 ) ) );
mgr->SetConditions( ACTIONS::cut, ENABLE( SELECTION_CONDITIONS::NotEmpty ) );
mgr->SetConditions( ACTIONS::copy, ENABLE( SELECTION_CONDITIONS::NotEmpty ) );
mgr->SetConditions( ACTIONS::paste, ENABLE( SELECTION_CONDITIONS::Idle ) );
mgr->SetConditions( ACTIONS::doDelete, ENABLE( SELECTION_CONDITIONS::MoreThan( 0 ) ) );
mgr->SetConditions( ACTIONS::doDelete, ENABLE( SELECTION_CONDITIONS::NotEmpty ) );
mgr->SetConditions( ACTIONS::zoomTool, CHECK( cond.CurrentTool( ACTIONS::zoomTool ) ) );
mgr->SetConditions( ACTIONS::selectionTool, CHECK( cond.CurrentTool( ACTIONS::selectionTool ) ) );