74#include <wx/display.h> 
   75#include <wx/stdpaths.h> 
   78#include <wx/wupdlock.h> 
   83#include <nlohmann/json.hpp> 
   99        return wxWindow::FromDIP( wxSize( 406, 354 ), aWindow );
 
  102        return wxWindow::FromDIP( wxSize( 500, 400 ), aWindow );
 
 
  112        return wxWindow::FromDIP( wxSize( 850, 540 ), aWindow );
 
  115        return wxWindow::FromDIP( wxSize( 1280, 720 ), aWindow );
 
 
  180                                const wxPoint& aPos, 
const wxSize& aSize, 
long aStyle,
 
  181                                const wxString& aFrameName, 
KIWAY* aKiway,
 
  183        wxFrame( aParent, wxID_ANY, aTitle, aPos, aSize, aStyle, aFrameName ),
 
  198        [
this]( 
const wxString& aProjectPath, std::vector<wxString>& aFiles )
 
 
  208    for( wxWindow* child : aParent->GetChildren() )
 
  212            if( dlg->IsQuasiModal() )
 
 
  233        wxWindow* cvpcb = wxWindow::FindWindowByName( wxS( 
"CvpcbFrame" ) );
 
 
  255        if( event.CanVeto() )
 
  262    if( event.GetId() == wxEVT_QUERY_END_SESSION
 
  263        || event.GetId() == wxEVT_END_SESSION )
 
  290        if( event.CanVeto() )
 
 
  320    if( !IsEnabled() && IsActive() )
 
  329    if( !wxFrame::ProcessEvent( aEvent ) )
 
  332    if( 
Pgm().m_Quitting )
 
  341            wxLogTrace( 
traceAutoSave, wxT( 
"Starting auto save timer." ) );
 
  347            wxLogTrace( 
traceAutoSave, wxT( 
"Stopping auto save timer." ) );
 
 
  410                                         std::placeholders::_1,
 
  416    Bind( wxEVT_UPDATE_UI, evtFunc, aID );
 
 
  427    Unbind( wxEVT_UPDATE_UI, it->second, aID );
 
 
  434    bool       checkRes  = 
false;
 
  435    bool       enableRes = 
true;
 
  448    catch( std::exception& )
 
  457        wxString msg = 
_( 
"Undo" );
 
  462        aEvent.SetText( msg );
 
  464    else if( showRes && aEvent.GetId() == 
ACTIONS::redo.GetUIId() )
 
  466        wxString msg = 
_( 
"Redo" );
 
  471        aEvent.SetText( msg );
 
  474    if( isCut || isCopy || isPaste )
 
  476        wxWindow*    focus = wxWindow::FindFocus();
 
  477        wxTextEntry* textEntry = 
dynamic_cast<wxTextEntry*
>( focus );
 
  479        if( textEntry && isCut && textEntry->CanCut() )
 
  481        else if( textEntry && isCopy && textEntry->CanCopy() )
 
  483        else if( textEntry && isPaste && textEntry->CanPaste() )
 
  485        else if( 
dynamic_cast<WX_GRID*
>( focus ) )
 
  489    aEvent.Enable( enableRes );
 
  490    aEvent.Show( showRes );
 
  492    if( aEvent.IsCheckable() )
 
  493        aEvent.Check( checkRes );
 
 
  501            [] ( 
const SELECTION& aSel, 
int aLangIdentifier )
 
  506    for( 
unsigned ii = 0;  
LanguagesList[ii].m_KI_Lang_Identifier != 0; ii++ )
 
  509        cond.
Check( std::bind( isCurrentLang, std::placeholders::_1,
 
 
  527        if( control.first == aName )
 
  528            return &control.second;
 
 
  542    wxWindowUpdateLocker 
dummy( 
this );
 
  546    std::optional<TOOLBAR_CONFIGURATION> tbConfig;
 
  551    if( tbConfig.has_value() )
 
  560        m_tbRight->ApplyConfiguration( tbConfig.value() );
 
  566    if( tbConfig.has_value() )
 
  575        m_tbLeft->ApplyConfiguration( tbConfig.value() );
 
  581    if( tbConfig.has_value() )
 
  590        m_tbTopMain->ApplyConfiguration( tbConfig.value() );
 
  596    if( tbConfig.has_value() )
 
  605        m_tbTopAux->ApplyConfiguration( tbConfig.value() );
 
 
  674    helpMenu->AppendSeparator();
 
  677    aMenuBar->Append( helpMenu, 
_( 
"&Help" ) );
 
 
  685   wxMenuBar* menuBar = GetMenuBar();
 
  687   for( 
size_t ii = 0; ii < menuBar->GetMenuCount(); ++ii )
 
  689       for( wxMenuItem* menuItem : menuBar->GetMenu( ii )->GetMenuItems() )
 
  691           if( menuItem->GetItemLabelText() == menuItemLabel )
 
  693               wxString menuTitleLabel = menuBar->GetMenuLabelText( ii );
 
  695               menuTitleLabel.Replace( wxS( 
"&" ), wxS( 
"&&" ) );
 
  696               menuItemLabel.Replace( wxS( 
"&" ), wxS( 
"&&" ) );
 
  698               return wxString::Format( 
_( 
"Run: %s > %s" ),
 
 
  716        GetMenuBar()->Refresh();
 
 
  728    bool running = 
Pgm().GetApiServer().Running();
 
  731        Pgm().GetApiServer().Stop();
 
  733        Pgm().GetApiServer().Start();
 
  739        m_fileHistory->SetMaxFiles( (
unsigned) std::max( 0, historySize ) );
 
  742    if( 
Pgm().GetCommonSettings()->m_Backup.enabled )
 
  752        GetMenuBar()->Refresh();
 
 
  765    wxAuiPaneInfoArray panes = 
m_auimgr.GetAllPanes();
 
  767    for( 
size_t i = 0; i < panes.GetCount(); ++i )
 
  770            toolbar->RefreshBitmaps();
 
 
  778    int currentDisplay = wxDisplay::GetFromWindow( 
this );
 
 
  795    if( !
Pgm().GetCommonSettings()->m_Session.remember_open_files )
 
  800    if( state != 
nullptr )
 
 
  809    bool wasDefault = 
false;
 
  833    if( aState.
display >= wxDisplay::GetCount() )
 
  839        const unsigned int index = 0;
 
  840        wxDisplay display( index );
 
  841        wxRect    clientSize = display.GetGeometry();
 
  857        wxDisplay display( aState.
display );
 
  858        wxRect clientSize = display.GetClientArea();
 
  860        int yLimTop   = clientSize.y;
 
  861        int yLimBottom = clientSize.y + clientSize.height;
 
  862        int xLimLeft  = clientSize.x;
 
  863        int xLimRight = clientSize.x + clientSize.width;
 
  865        if( upperLeft.x  > xLimRight ||  
 
  866            upperRight.x < xLimLeft  ||  
 
  867            upperLeft.y < yLimTop ||   
 
  868            upperLeft.y > yLimBottom )
 
 
  905    wxDisplay display( wxDisplay::GetFromWindow( 
this ) );
 
  906    wxRect    clientSize = display.GetClientArea();
 
  907    wxPoint   pos        = GetPosition();
 
  911                wxS( 
"ensureWindowIsOnScreen: clientArea (%d, %d) w %d h %d" ),
 
  912                clientSize.x, clientSize.y,
 
  913                clientSize.width, clientSize.height );
 
  915    if( pos.y < clientSize.y )
 
  918                    wxS( 
"ensureWindowIsOnScreen: y pos %d below minimum, setting to %d" ), pos.y,
 
  920        pos.y = clientSize.y;
 
  923    if( pos.x < clientSize.x )
 
  926                    wxS( 
"ensureWindowIsOnScreen: x pos %d is off the client rect, setting to %d" ),
 
  927                    pos.x, clientSize.x );
 
  928        pos.x = clientSize.x;
 
  931    if( pos.x + size.x - clientSize.x > clientSize.width )
 
  933        int newWidth = clientSize.width - ( pos.x - clientSize.x );
 
  935                    wxS( 
"ensureWindowIsOnScreen: effective width %d above available %d, setting " 
  936                         "to %d" ), pos.x + size.x, clientSize.width, newWidth );
 
  940    if( pos.y + size.y - clientSize.y > clientSize.height )
 
  942        int newHeight = clientSize.height - ( pos.y - clientSize.y );
 
  944                    wxS( 
"ensureWindowIsOnScreen: effective height %d above available %d, setting " 
  945                         "to %d" ), pos.y + size.y, clientSize.height, newHeight );
 
  949    wxLogTrace( 
traceDisplayLocation, wxS( 
"Updating window position (%d, %d) with size (%d, %d)" ),
 
  950                pos.x, pos.y, size.x, size.y );
 
  952    SetSize( pos.x, pos.y, size.x, size.y );
 
 
  993                IsMaximized() ? wxS( 
"true" ) : wxS( 
"false" ) );
 
 1000#if wxCHECK_VERSION( 3, 3, 0 ) 
 1003        nlohmann::json state = serializer.
Serialize();
 
 1005        if( state.is_null() || state.empty() )
 
 
 1045    if( 
Pgm().GetCommonSettings()->m_Session.remember_open_files && !currentlyOpenedFile.IsEmpty() )
 
 1047        wxFileName rfn( currentlyOpenedFile );
 
 1048        rfn.MakeRelativeTo( 
Prj().GetProjectPath() );
 
 1056        if( !currentlyOpenedFile.IsEmpty() )
 
 
 1091    SetStatusText( 
text );
 
 
 1097#if defined( __WXOSX_MAC__ ) 
 
 1109#if defined( __WXOSX_MAC__ ) 
 1117    m_auimgr.GetPane( wxS( 
"InfoBar" ) ).Hide();
 
 
 1128#if wxCHECK_VERSION( 3, 3, 0 ) 
 1129    bool restored = 
false;
 
 
 1152    if( aShowCloseButton )
 
 
 1160                                       std::function<
void(
void)> aCallback )
 
 1164    if( aShowCloseButton )
 
 
 1178    if( aShowCloseButton )
 
 
 1189    if( aShowCloseButton )
 
 
 1201    wxASSERT( aFileHistory );
 
 1209        GetMenuBar()->Refresh();
 
 
 1220    wxASSERT( aFileHistory );
 
 1222    int baseId = aFileHistory->GetBaseId();
 
 1224    wxASSERT( cmdId >= baseId && cmdId < baseId + (
int) aFileHistory->GetCount() );
 
 1226    unsigned i = cmdId - baseId;
 
 1228    if( i < aFileHistory->GetCount() )
 
 1230        wxString fn = aFileHistory->GetHistoryFile( i );
 
 1232        if( wxFileName::FileExists( fn ) )
 
 1239            aFileHistory->RemoveFileFromHistory( i );
 
 1247        GetMenuBar()->Refresh();
 
 1250    return wxEmptyString;
 
 
 1264        GetMenuBar()->Refresh();
 
 
 1284    PAGED_DIALOG dlg( 
this, 
_( 
"Preferences" ), 
true, 
true, wxEmptyString,
 
 1285                      wxWindow::FromDIP( wxSize( 980, 560 ), 
nullptr ) );
 
 1287    dlg.SetEvtHandlerEnabled( 
false );
 
 1294        std::vector<int>        expand;
 
 1300            ACTION_MANAGER* actionMgr = kicadMgr->GetToolManager()->GetActionManager();
 
 1307                []( wxWindow* aParent ) -> wxWindow*
 
 1314                []( wxWindow* aParent ) -> wxWindow*
 
 1317                }, 
_( 
"Mouse and Touchpad" ) );
 
 1320                [] ( wxWindow* aParent ) -> wxWindow*
 
 1323                }, 
_( 
"SpaceMouse" ) );
 
 1325        book->AddPage( hotkeysPanel, 
_( 
"Hotkeys" ) );
 
 1328                []( wxWindow* aParent ) -> wxWindow*
 
 1331                }, 
_( 
"Version Control" ) );
 
 1333#ifdef KICAD_USE_SENTRY 
 1335                []( wxWindow* aParent ) -> wxWindow*
 
 1338                }, 
_( 
"Data Collection" ) );
 
 1341#define LAZY_CTOR( key )                                                \ 
 1342        [this, kiface]( wxWindow* aParent )                             \ 
 1344            return kiface->CreateKiWindow( aParent, key, &Kiway() );    \ 
 1356                    expand.push_back( (
int) book->GetPageCount() );
 
 1358                book->AddPage( 
new wxPanel( book ), 
_( 
"Symbol Editor" ) );
 
 1368                    expand.push_back( (
int) book->GetPageCount() );
 
 1370                book->AddPage( 
new wxPanel( book ), 
_( 
"Schematic Editor" ) );
 
 1394                    expand.push_back( (
int) book->GetPageCount() );
 
 1396                book->AddPage( 
new wxPanel( book ), 
_( 
"Footprint Editor" ) );
 
 1410                    expand.push_back( (
int) book->GetPageCount() );
 
 1412                book->AddPage( 
new wxPanel( book ), 
_( 
"PCB Editor" ) );
 
 1425                    expand.push_back( (
int) book->GetPageCount() );
 
 1427                book->AddPage( 
new wxPanel( book ), 
_( 
"3D Viewer" ) );
 
 1448                    expand.push_back( (
int) book->GetPageCount() );
 
 1450                book->AddPage( 
new wxPanel( book ), 
_( 
"Gerber Viewer" ) );
 
 1472                    expand.push_back( (
int) book->GetPageCount() );
 
 1474                book->AddPage( 
new wxPanel( book ), 
_( 
"Drawing Sheet Editor" ) );
 
 1483                        []( wxWindow* aParent ) -> wxWindow*
 
 1486                        }, 
_( 
"Packages and Updates" ) );
 
 1503        for( 
size_t i = 0; i < book->GetPageCount(); ++i )
 
 1504            book->GetPage( i )->Layout();
 
 1506        for( 
int page : expand )
 
 1507            book->ExpandNode( page );
 
 1509        if( !aStartPage.IsEmpty() )
 
 1512        dlg.SetEvtHandlerEnabled( 
true );
 
 
 1531    wxString* files = aEvent.GetFiles();
 
 1533    for( 
int nb = 0; nb < aEvent.GetNumberOfFiles(); nb++ )
 
 1535        const wxFileName fn = wxFileName( files[nb] );
 
 1536        wxString         ext = fn.GetExt();
 
 
 1555        wxString fn = file.GetFullPath();
 
 
 1564    wxFileName fn = aFileName;
 
 1570    if( fn.GetPath().IsEmpty() && fn.HasName() )
 
 1573    wxCHECK_MSG( fn.IsOk(), 
false,
 
 1574                 wxT( 
"File name object is invalid.  Bad programmer!" ) );
 
 1575    wxCHECK_MSG( !fn.GetPath().IsEmpty(), 
false,
 
 1576                 wxT( 
"File name object path <" ) + fn.GetFullPath() +
 
 1577                 wxT( 
"> is not set.  Bad programmer!" ) );
 
 1579    if( fn.IsDir() && !fn.IsDirWritable() )
 
 1581        msg.Printf( 
_( 
"Insufficient permissions to folder '%s'." ), fn.GetPath() );
 
 1583    else if( !fn.FileExists() && !fn.IsDirWritable() )
 
 1585        msg.Printf( 
_( 
"Insufficient permissions to save file '%s'." ), fn.GetFullPath() );
 
 1587    else if( fn.FileExists() && !fn.IsFileWritable() )
 
 1589        msg.Printf( 
_( 
"Insufficient permissions to save file '%s'." ), fn.GetFullPath() );
 
 1592    if( !msg.IsEmpty() )
 
 
 1613    wxAcceleratorEntry entries[1];
 
 1614    entries[0].Set( wxACCEL_CTRL, 
int( 
'Q' ), wxID_EXIT );
 
 1615    wxAcceleratorTable accel( 1, entries );
 
 1616    SetAcceleratorTable( accel );
 
 
 1636        if( extraitems > 0 )
 
 
 1651        if( extraitems > 0 )
 
 
 1672        return m_undoList.m_CommandsList.back()->GetDescription();
 
 1674    return wxEmptyString;
 
 
 1681        return m_redoList.m_CommandsList.back()->GetDescription();
 
 1683    return wxEmptyString;
 
 
 1698    wxCommandEvent e( EDA_EVT_UNITS_CHANGED );
 
 1699    e.SetInt( 
static_cast<int>( aUnits ) );
 
 1700    e.SetClientData( 
this );
 
 1701    ProcessEventLocally( e );
 
 
 1713    if( !IsMaximized() )
 
 1719                    "Maximizing window - Saving position (%d, %d) with size (%d, %d)",
 
 
 1732    wxSize winSize = GetSize();
 
 1741        GTKDoGetSize( &width, &height );
 
 1743        winSize.Set( width, height );
 
 1746    wxSize winSize = GetSize();
 
 
 1764        GetMenuBar()->Refresh();
 
 
 1790WXLRESULT EDA_BASE_FRAME::MSWWindowProc( WXUINT message, WXWPARAM wParam, WXLPARAM lParam )
 
 1794    if( message == WM_SYSCOMMAND )
 
 1796        if( wParam == SC_KEYMENU && ( lParam >> 16 ) <= 0 )
 
 1800    return wxFrame::MSWWindowProc( message, wParam, lParam );
 
 1808    langsMenu->
SetTitle( 
_( 
"Set Language" ) );
 
 1813    for( 
unsigned ii = 0; 
LanguagesList[ii].m_KI_Lang_Identifier != 0; ii++ )
 
 1823                new wxMenuItem( langsMenu,
 
 1825                                label, tooltip, wxITEM_CHECK );
 
 1827        langsMenu->Append( item );
 
 1831    aMasterMenu->
Add( langsMenu );
 
 
void ShowAboutDialog(EDA_BASE_FRAME *aParent)
 
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
 
void ClearScaledBitmapCache()
Wipes out the scaled bitmap cache so that the icon theme can be changed.
 
BITMAP_STORE * GetBitmapStore()
 
static TOOL_ACTION reportBug
 
static TOOL_ACTION donate
 
static TOOL_ACTION listHotKeys
 
static TOOL_ACTION getInvolved
 
static TOOL_ACTION gettingStarted
 
Manage TOOL_ACTION objects.
 
const std::map< std::string, TOOL_ACTION * > & GetActions() const
Get a list of currently-registered actions mapped by their name.
 
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
 
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
 
void ThemeChanged()
Notifies the store that the icon theme has been changed by the user, so caches must be invalidated.
 
Handle actions that are shared between different applications.
 
Dialog helper object to sit in the inheritance tree between wxDialog and any class written by wxFormB...
 
The base frame for deriving all KiCad main window classes.
 
virtual wxString help_name()
 
virtual bool doAutoSave()
This should be overridden by the derived class to handle the auto save feature.
 
void LoadWindowState(const wxString &aFileName)
 
FRAME_T GetFrameType() const
 
virtual void UnregisterUIUpdateHandler(int aID) override
Unregister a UI handler for a given ID that was registered using RegisterUIUpdateHandler.
 
virtual bool isAutoSaveRequired() const
Return the auto save status of the application.
 
virtual APP_SETTINGS_BASE * config() const
Return the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
 
virtual void handleIconizeEvent(wxIconizeEvent &aEvent)
Handle a window iconize event.
 
virtual void PushCommandToUndoList(PICKED_ITEMS_LIST *aItem)
Add a command to undo in the undo list.
 
void windowClosing(wxCloseEvent &event)
(with its unexpected name so it does not collide with the real OnWindowClose() function provided in d...
 
virtual void OnCharHook(wxKeyEvent &aKeyEvent)
Capture the key event before it is sent to the GUI.
 
virtual int GetRedoCommandCount() const
 
void CommonSettingsChanged(int aFlags) override
Notification event that some of the common (suite-wide) settings have changed.
 
UNDO_REDO_CONTAINER m_undoList
 
virtual void OnMove(wxMoveEvent &aEvent)
 
virtual WINDOW_SETTINGS * GetWindowSettings(APP_SETTINGS_BASE *aCfg)
Return a pointer to the window settings for this frame.
 
virtual void doCloseWindow()
 
void OnToolbarSizeChanged()
Update toolbars if desired toolbar icon changed.
 
void OnMenuEvent(wxMenuEvent &event)
The TOOL_DISPATCHER needs these to work around some issues in wxWidgets where the menu events aren't ...
 
virtual bool IsModal() const
Return true if the frame is shown in our modal mode and false if the frame is shown as an usual frame...
 
void ShowChangedLanguage() override
Redraw the menus and what not in current language.
 
virtual void HandleSystemColorChange()
Update the UI in response to a change in the system colors.
 
virtual void setupUIConditions()
Setup the UI conditions for the various actions and their controls in this frame.
 
void ensureWindowIsOnScreen()
 
bool m_isNonUserClose
Set by NonUserClose() to indicate that the user did not request the current close.
 
void LoadWindowSettings(const WINDOW_SETTINGS *aCfg)
Load window settings from the given settings object.
 
std::vector< wxFileName > m_AcceptedFiles
 
bool m_autoSavePermissionError
 
void OnKicadAbout(wxCommandEvent &event)
 
virtual void UpdateToolbarControlSizes()
Update the sizes of any controls in the toolbars of the frame.
 
virtual void ClearUndoRedoList()
Clear the undo and redo list using ClearUndoORRedoList()
 
virtual void DoWithAcceptedFiles()
Execute action on accepted dropped file.
 
virtual void OnModify()
Must be called after a model change in order to set the "modify" flag and do other frame-specific pro...
 
wxWindow * findQuasiModalDialog()
 
static void HandleUpdateUIEvent(wxUpdateUIEvent &aEvent, EDA_BASE_FRAME *aFrame, ACTION_CONDITIONS aCond)
Handle events generated when the UI is trying to figure out the current state of the UI controls rela...
 
virtual void ClearUndoORRedoList(UNDO_REDO_LIST aList, int aItemCount=-1)
Remove the aItemCount of old commands from aList and delete commands, pickers and picked items if nee...
 
virtual void ThemeChanged()
Process light/dark theme change.
 
EDA_BASE_FRAME(wxWindow *aParent, FRAME_T aFrameType, const wxString &aTitle, const wxPoint &aPos, const wxSize &aSize, long aStyle, const wxString &aFrameName, KIWAY *aKiway, const EDA_IU_SCALE &aIuScale)
 
static constexpr int KICAD_AUI_TB_STYLE
Default style flags used for wxAUI toolbars.
 
ACTION_TOOLBAR * m_tbRight
 
void ShowPreferences(wxString aStartPage, wxString aStartParentPage)
Display the preferences and settings of all opened editors paged dialog, starting with a particular p...
 
void initExitKey()
Set the common key-pair for exiting the application (Ctrl-Q) and ties it to the wxID_EXIT event id.
 
void OnPreferences(wxCommandEvent &event)
 
virtual const SEARCH_STACK & sys_search()
Return a SEARCH_STACK pertaining to entire program.
 
void onAutoSaveTimer(wxTimerEvent &aEvent)
Handle the auto save timer event.
 
void SaveWindowSettings(WINDOW_SETTINGS *aCfg)
Save window settings to the given settings object.
 
virtual wxString GetRedoActionDescription() const
 
TOOLBAR_SETTINGS * m_toolbarSettings
 
void FinishAUIInitialization()
 
virtual wxString GetCurrentFileName() const
Get the full filename + path of the currently opened file in the frame.
 
void ChangeUserUnits(EDA_UNITS aUnits)
 
void AddMenuLanguageList(ACTION_MENU *aMasterMenu, TOOL_INTERACTIVE *aControlTool)
Create a menu list for language choice, and add it as submenu to MasterMenu.
 
void RegisterCustomToolbarControlFactory(const ACTION_TOOLBAR_CONTROL &aControlDesc, const ACTION_TOOLBAR_CONTROL_FACTORY &aControlFactory)
Register a creation factory for toolbar controls that are present in this frame.
 
void ShowInfoBarMsg(const wxString &aMsg, bool aShowCloseButton=false)
Show the WX_INFOBAR displayed on the top of the canvas with a message and an info icon on the left of...
 
virtual void configureToolbars()
 
wxTimer * m_autoSaveTimer
 
void UpdateFileHistory(const wxString &FullFileName, FILE_HISTORY *aFileHistory=nullptr)
Update the list of recently opened files.
 
void PrintMsg(const wxString &text)
 
void commonInit(FRAME_T aFrameType)
Collect common initialization functions used in all CTORs.
 
virtual bool IsContentModified() const
Get if the contents of the frame have been modified since the last save.
 
void ShowInfoBarWarning(const wxString &aWarningMsg, bool aShowCloseButton=false)
Show the WX_INFOBAR displayed on the top of the canvas with a message and a warning icon on the left ...
 
virtual PICKED_ITEMS_LIST * PopCommandFromRedoList()
Return the last command to undo and remove it from list, nothing is deleted.
 
virtual void RecreateToolbars()
 
std::map< int, UIUpdateHandler > m_uiUpdateMap
Map containing the UI update handlers registered with wx for each action.
 
std::map< std::string, ACTION_TOOLBAR_CONTROL_FACTORY > m_toolbarControlFactories
 
ACTION_TOOLBAR_CONTROL_FACTORY * GetCustomToolbarControlFactory(const std::string &aName)
 
UNDO_REDO_CONTAINER m_redoList
 
virtual void LoadSettings(APP_SETTINGS_BASE *aCfg)
Load common frame parameters from a configuration file.
 
FILE_HISTORY * m_fileHistory
 
ACTION_TOOLBAR * m_tbLeft
 
SETTINGS_MANAGER * m_settingsManager
 
virtual void OnSize(wxSizeEvent &aEvent)
 
virtual wxString GetUndoActionDescription() const
 
virtual PICKED_ITEMS_LIST * PopCommandFromUndoList()
Return the last command to undo and remove it from list, nothing is deleted.
 
wxString GetRunMenuCommandDescription(const TOOL_ACTION &aAction)
 
virtual bool canCloseWindow(wxCloseEvent &aCloseEvent)
 
bool ProcessEvent(wxEvent &aEvent) override
Override the default process event handler to implement the auto save feature.
 
bool IsWritable(const wxFileName &aFileName, bool aVerbose=true)
Check if aFileName can be written.
 
void OnMaximize(wxMaximizeEvent &aEvent)
 
virtual void ClearFileHistory()
Remove all files from the file history.
 
ACTION_TOOLBAR * m_tbTopAux
 
virtual void OnDropFiles(wxDropFilesEvent &aEvent)
Handle event fired when a file is dropped to the window.
 
std::map< const wxString, TOOL_ACTION * > m_acceptedExts
Associate file extensions with action to execute.
 
void onIconize(wxIconizeEvent &aEvent)
 
virtual void unitsChangeRefresh()
Called when when the units setting has changed to allow for any derived classes to handle refreshing ...
 
wxString GetFileFromHistory(int cmdId, const wxString &type, FILE_HISTORY *aFileHistory=nullptr)
Fetch the file name from the file history list.
 
wxSize GetWindowSize()
Get the undecorated window size that can be used for restoring the window size.
 
int GetAutoSaveInterval() const
 
virtual void SaveSettings(APP_SETTINGS_BASE *aCfg)
Save common frame parameters to a configuration data file.
 
void onSystemColorChange(wxSysColourChangedEvent &aEvent)
 
virtual int GetUndoCommandCount() const
 
virtual void RegisterUIUpdateHandler(int aID, const ACTION_CONDITIONS &aConditions) override
Register a UI update handler for the control with ID aID.
 
ACTION_TOOLBAR * m_tbTopMain
 
virtual void PushCommandToRedoList(PICKED_ITEMS_LIST *aItem)
Add a command to redo in the redo list.
 
void ShowInfoBarError(const wxString &aErrorMsg, bool aShowCloseButton=false, WX_INFOBAR::MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the WX_INFOBAR displayed on the top of the canvas with a message and an error icon on the left o...
 
bool m_isClosing
Set by the close window event handler after frames are asked if they can close.
 
void AddStandardHelpMenu(wxMenuBar *aMenuBar)
Add the standard KiCad help menu to the menubar.
 
nlohmann::json m_auiLayoutState
 
void ReCreateMenuBar()
Recreate the menu bar.
 
virtual void doReCreateMenuBar()
 
WX_INFOBAR * GetInfoBar()
 
Specialization of the wxAuiPaneInfo class for KiCad panels.
 
This class implements a file history object to store a list of files, that can then be added to a men...
 
void AddFileToHistory(const wxString &aFile) override
Adds a file to the history.
 
The main KiCad project manager frame.
 
SEARCH_STACK & KifaceSearch()
Only for DSO specific 'non-library' files.
 
APP_SETTINGS_BASE * KifaceSettings() const
 
const wxString & GetHelpFileName() const
Return just the basename portion of the current help file.
 
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
 
KIWAY_HOLDER(KIWAY *aKiway, HOLDER_TYPE aType)
 
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
 
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
 
LOCAL_HISTORY & LocalHistory()
Return the LOCAL_HISTORY associated with this KIWAY.
 
virtual void CommonSettingsChanged(int aFlags=0)
Call CommonSettingsChanged() on all KIWAY_PLAYERs.
 
bool Init(const wxString &aProjectPath)
Initialize the local history repository for the given project path.
 
bool RunRegisteredSaversAndCommit(const wxString &aProjectPath, const wxString &aTitle)
Run all registered savers and, if any staged changes differ from HEAD, create a commit.
 
void RegisterSaver(const void *aSaverObject, const std::function< void(const wxString &, std::vector< wxString > &)> &aSaver)
Register a saver callback invoked during autosave history commits.
 
WX_TREEBOOK * GetTreebook()
 
void SetInitialPage(const wxString &aPage, const wxString &aParentPage=wxEmptyString)
 
std::vector< TOOL_ACTION * > & ActionsList()
 
static wxString GetDefaultUserProjectsPath()
Gets the default path we point users to create projects.
 
virtual COMMON_SETTINGS * GetCommonSettings() const
 
virtual int GetSelectedLanguageIdentifier() const
 
virtual SETTINGS_MANAGER & GetSettingsManager() const
 
A holder to handle information on schematic or board items.
 
void SaveFileState(const wxString &aFileName, const WINDOW_SETTINGS *aWindowCfg, bool aOpen)
 
const PROJECT_FILE_STATE * GetFileState(const wxString &aFileName)
 
void SaveToHistory(const wxString &aProjectPath, std::vector< wxString > &aFiles)
Save project files (.kicad_pro and .kicad_prl) to the .history directory.
 
virtual PROJECT_LOCAL_SETTINGS & GetLocalSettings() const
 
Look for files in a number of paths.
 
UNITS_PROVIDER(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits)
 
void SetUserUnits(EDA_UNITS aUnits)
 
bool Deserialize(const nlohmann::json &aState) const
 
nlohmann::json Serialize() const
 
Simple wrapper around wxBusyCursor for used with the generic BUSY_INDICATOR interface.
 
A modified version of the wxInfoBar class that allows us to:
 
void ShowMessageFor(const wxString &aMessage, int aTime, int aFlags=wxICON_INFORMATION, MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the infobar with the provided message and icon for a specific period of time.
 
MESSAGE_TYPE
Sets the type of message for special handling if needed.
 
bool AddLazyPage(std::function< wxWindow *(wxWindow *aParent)> aLazyCtor, const wxString &text, bool bSelect=false, int imageId=NO_IMAGE)
 
bool AddLazySubPage(std::function< wxWindow *(wxWindow *aParent)> aLazyCtor, const wxString &text, bool bSelect=false, int imageId=NO_IMAGE)
 
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
 
This file is part of the common library.
 
const int minSize
Push and Shove router track width and via size dialog.
 
static const wxSize minSizeLookup(FRAME_T aFrameType, wxWindow *aWindow)
 
static const wxSize defaultSize(FRAME_T aFrameType, wxWindow *aWindow)
 
wxWindow * findQuasiModalDialog(wxWindow *aParent)
 
Base window classes and related definitions.
 
#define KICAD_MANAGER_FRAME_NAME
 
#define DEFAULT_MAX_UNDO_ITEMS
 
std::function< void(wxUpdateUIEvent &) > UIUpdateHandler
This is the handler functor for the update UI events.
 
void SocketCleanup()
Must be called to clean up the socket thread used by SendCommand.
 
FRAME_T
The set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
 
@ FRAME_SCH_SYMBOL_EDITOR
 
@ PANEL_SCH_FIELD_NAME_TEMPLATES
 
@ PANEL_GBR_DISPLAY_OPTIONS
 
@ PANEL_FP_DEFAULT_GRAPHICS_VALUES
 
@ PANEL_FP_DISPLAY_OPTIONS
 
@ PANEL_FP_DEFAULT_FIELDS
 
@ PANEL_PCB_ACTION_PLUGINS
 
@ PANEL_3DV_DISPLAY_OPTIONS
 
@ PANEL_DS_DISPLAY_OPTIONS
 
@ PANEL_GBR_EXCELLON_OPTIONS
 
static const std::string GerberFileExtension
 
static bool IsGerberFileExtension(const wxString &ext)
 
const wxChar *const traceAutoSave
Flag to enable auto save feature debug tracing.
 
const wxChar *const kicadTraceKeyEvent
Flag to enable wxKeyEvent debug tracing.
 
const wxChar *const traceDisplayLocation
Flag to enable debug output of display positioning logic.
 
void ReadHotKeyConfigIntoActions(const wxString &aFileName, std::vector< TOOL_ACTION * > &aActions)
Read a hotkey config file into a list of actions.
 
PGM_BASE & Pgm()
The global program "get" accessor.
 
LANGUAGE_DESCR LanguagesList[]
An array containing all the languages that KiCad supports.
 
std::vector< FAB_LAYER_COLOR > dummy
 
Functors that can be used to figure out how the action controls should be displayed in the UI and if ...
 
SELECTION_CONDITION enableCondition
Returns true if the UI control should be enabled.
 
SELECTION_CONDITION checkCondition
Returns true if the UI control should be checked.
 
SELECTION_CONDITION showCondition
Returns true if the UI control should be shown.
 
ACTION_CONDITIONS & Check(const SELECTION_CONDITION &aCondition)
 
int local_history_debounce
 
Implement a participant in the KIWAY alchemy.
 
struct WINDOW_STATE window
 
Store the common settings that are saved and loaded for each window / frame.
 
Store the window positioning/state.
 
IFACE KIFACE_BASE kiface("pcb_test_frame", KIWAY::FACE_PCB)
 
wxString dump(const wxArrayString &aArray)
Debug helper for printing wxArrayString contents.
 
wxLogTrace helper definitions.