30#include <nlohmann/json.hpp>
75#include <wx/display.h>
76#include <wx/stdpaths.h>
79#include <wx/wupdlock.h>
84#include <nlohmann/json.hpp>
100 return wxWindow::FromDIP( wxSize( 406, 354 ), aWindow );
103 return wxWindow::FromDIP( wxSize( 500, 400 ), aWindow );
113 return wxWindow::FromDIP( wxSize( 850, 540 ), aWindow );
116 return wxWindow::FromDIP( wxSize( 1280, 720 ), aWindow );
183 const wxPoint& aPos,
const wxSize& aSize,
long aStyle,
184 const wxString& aFrameName,
KIWAY* aKiway,
186 wxFrame( aParent, wxID_ANY, aTitle, aPos, aSize, aStyle, aFrameName ),
198 Bind( wxEVT_DPI_CHANGED,
199 [&]( wxDPIChangedEvent& aEvent )
205 wxAuiPaneInfoArray& panes =
m_auimgr.GetAllPanes();
207 for(
size_t ii = 0; ii < panes.GetCount(); ii++ )
209 wxAuiPaneInfo& pinfo = panes.Item( ii );
210 pinfo.best_size = pinfo.window->GetSize();
213 pinfo.best_size.IncTo( pinfo.window->GetBestSize() );
214 pinfo.best_size.IncTo( pinfo.min_size );
228 for( wxWindow* child : aParent->GetChildren() )
232 if( dlg->IsQuasiModal() )
253 wxWindow* cvpcb = wxWindow::FindWindowByName( wxS(
"CvpcbFrame" ) );
281 if( event.CanVeto() )
288 if( event.GetId() == wxEVT_QUERY_END_SESSION
289 || event.GetId() == wxEVT_END_SESSION )
316 if( event.CanVeto() )
346 if( !IsEnabled() && IsActive() )
360 if( aEvent.GetEventType() == wxEVT_DPI_CHANGED )
362 wxFrame::ProcessEvent( aEvent );
367 if( !wxFrame::ProcessEvent( aEvent ) )
370 if(
Pgm().m_Quitting )
379 wxLogTrace(
traceAutoSave, wxT(
"Starting auto save timer." ) );
385 wxLogTrace(
traceAutoSave, wxT(
"Stopping auto save timer." ) );
422 if( !
Prj().IsReadOnly() )
451 std::placeholders::_1,
457 Bind( wxEVT_UPDATE_UI, evtFunc, aID );
468 Unbind( wxEVT_UPDATE_UI, it->second, aID );
475 bool checkRes =
false;
476 bool enableRes =
true;
489 catch( std::exception& )
498 wxString msg =
_(
"Undo" );
503 aEvent.SetText( msg );
505 else if( showRes && aEvent.GetId() ==
ACTIONS::redo.GetUIId() )
507 wxString msg =
_(
"Redo" );
512 aEvent.SetText( msg );
515 if( isCut || isCopy || isPaste )
517 wxWindow* focus = wxWindow::FindFocus();
518 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( focus );
520 if( textEntry && isCut && textEntry->CanCut() )
522 else if( textEntry && isCopy && textEntry->CanCopy() )
524 else if( textEntry && isPaste && textEntry->CanPaste() )
526 else if(
dynamic_cast<WX_GRID*
>( focus ) )
530 aEvent.Enable( enableRes );
531 aEvent.Show( showRes );
533 if( aEvent.IsCheckable() )
534 aEvent.Check( checkRes );
542 [] (
const SELECTION& aSel,
int aLangIdentifier )
547 for(
unsigned ii = 0;
LanguagesList[ii].m_KI_Lang_Identifier != 0; ii++ )
550 cond.
Check( std::bind( isCurrentLang, std::placeholders::_1,
568 if( control.first == aName )
569 return &control.second;
599 wxWindowUpdateLocker
dummy(
this );
603 std::optional<TOOLBAR_CONFIGURATION> tbConfig;
608 if( tbConfig.has_value() )
613 new ACTION_TOOLBAR(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
618 m_tbRight->ApplyConfiguration( tbConfig.value() );
624 if( tbConfig.has_value() )
633 m_tbLeft->ApplyConfiguration( tbConfig.value() );
639 if( tbConfig.has_value() )
645 | wxAUI_TB_TEXT | wxAUI_TB_OVERFLOW );
649 m_tbTopMain->ApplyConfiguration( tbConfig.value() );
655 if( tbConfig.has_value() )
661 | wxAUI_TB_TEXT | wxAUI_TB_OVERFLOW );
665 m_tbTopAux->ApplyConfiguration( tbConfig.value() );
734 helpMenu->AppendSeparator();
737 aMenuBar->Append( helpMenu,
_(
"&Help" ) );
745 wxMenuBar* menuBar = GetMenuBar();
747 for(
size_t ii = 0; ii < menuBar->GetMenuCount(); ++ii )
749 for( wxMenuItem* menuItem : menuBar->GetMenu( ii )->GetMenuItems() )
751 if( menuItem->GetItemLabelText() == menuItemLabel )
753 wxString menuTitleLabel = menuBar->GetMenuLabelText( ii );
755 menuTitleLabel.Replace( wxS(
"&" ), wxS(
"&&" ) );
756 menuItemLabel.Replace( wxS(
"&" ), wxS(
"&&" ) );
758 return wxString::Format(
_(
"Run: %s > %s" ),
776 GetMenuBar()->Refresh();
788 bool running =
Pgm().GetApiServer().Running();
791 Pgm().GetApiServer().Stop();
793 Pgm().GetApiServer().Start();
799 m_fileHistory->SetMaxFiles( (
unsigned) std::max( 0, historySize ) );
802 if(
Pgm().GetCommonSettings()->m_Backup.enabled )
812 GetMenuBar()->Refresh();
825 wxAuiPaneInfoArray panes =
m_auimgr.GetAllPanes();
827 for(
size_t i = 0; i < panes.GetCount(); ++i )
830 toolbar->RefreshBitmaps();
838 int currentDisplay = wxDisplay::GetFromWindow(
this );
855 if( !
Pgm().GetCommonSettings()->m_Session.remember_open_files )
860 if( state !=
nullptr )
869 bool wasDefault =
false;
893 if( aState.
display >= wxDisplay::GetCount() )
899 const unsigned int index = 0;
900 wxDisplay display(
index );
901 wxRect clientSize = display.GetGeometry();
917 wxDisplay display( aState.
display );
918 wxRect clientSize = display.GetClientArea();
920 int yLimTop = clientSize.y;
921 int yLimBottom = clientSize.y + clientSize.height;
922 int xLimLeft = clientSize.x;
923 int xLimRight = clientSize.x + clientSize.width;
925 if( upperLeft.x > xLimRight ||
926 upperRight.x < xLimLeft ||
927 upperLeft.y < yLimTop ||
928 upperLeft.y > yLimBottom )
965 wxDisplay display( wxDisplay::GetFromWindow(
this ) );
966 wxRect clientSize = display.GetClientArea();
967 wxPoint pos = GetPosition();
971 wxS(
"ensureWindowIsOnScreen: clientArea (%d, %d) w %d h %d" ),
972 clientSize.x, clientSize.y,
973 clientSize.width, clientSize.height );
975 if( pos.y < clientSize.y )
978 wxS(
"ensureWindowIsOnScreen: y pos %d below minimum, setting to %d" ), pos.y,
980 pos.y = clientSize.y;
983 if( pos.x < clientSize.x )
986 wxS(
"ensureWindowIsOnScreen: x pos %d is off the client rect, setting to %d" ),
987 pos.x, clientSize.x );
988 pos.x = clientSize.x;
991 if( pos.x + size.x - clientSize.x > clientSize.width )
993 int newWidth = clientSize.width - ( pos.x - clientSize.x );
995 wxS(
"ensureWindowIsOnScreen: effective width %d above available %d, setting "
996 "to %d" ), pos.x + size.x, clientSize.width, newWidth );
1000 if( pos.y + size.y - clientSize.y > clientSize.height )
1002 int newHeight = clientSize.height - ( pos.y - clientSize.y );
1004 wxS(
"ensureWindowIsOnScreen: effective height %d above available %d, setting "
1005 "to %d" ), pos.y + size.y, clientSize.height, newHeight );
1009 wxLogTrace(
traceDisplayLocation, wxS(
"Updating window position (%d, %d) with size (%d, %d)" ),
1010 pos.x, pos.y, size.x, size.y );
1012 SetSize( pos.x, pos.y, size.x, size.y );
1050 aCfg->
state.
display = wxDisplay::GetFromWindow(
this );
1053 IsMaximized() ? wxS(
"true" ) : wxS(
"false" ) );
1060#if wxCHECK_VERSION( 3, 3, 0 )
1063 nlohmann::json state = serializer.
Serialize();
1065 if( state.is_null() || state.empty() )
1105 if(
Pgm().GetCommonSettings()->m_Session.remember_open_files && !currentlyOpenedFile.IsEmpty() )
1107 wxFileName rfn( currentlyOpenedFile );
1108 rfn.MakeRelativeTo(
Prj().GetProjectPath() );
1116 if( !currentlyOpenedFile.IsEmpty() )
1151 SetStatusText(
text );
1157#if defined( __WXOSX_MAC__ )
1169#if defined( __WXOSX_MAC__ )
1177 m_auimgr.GetPane( wxS(
"InfoBar" ) ).Hide();
1188 bool restored =
false;
1190#if wxCHECK_VERSION( 3, 3, 0 )
1211 wxAuiPaneInfoArray& panes =
m_auimgr.GetAllPanes();
1213 for(
size_t i = 0; i < panes.GetCount(); ++i )
1215 if( panes.Item( i ).IsToolbar() )
1216 panes.Item( i ).Show(
true );
1227 if( aShowCloseButton )
1235 std::function<
void(
void)> aCallback )
1239 if( aShowCloseButton )
1253 if( aShowCloseButton )
1264 if( aShowCloseButton )
1276 wxASSERT( aFileHistory );
1284 GetMenuBar()->Refresh();
1294 wxASSERT( aFileHistory );
1296 int baseId = aFileHistory->GetBaseId();
1298 wxASSERT( cmdId >= baseId && cmdId < baseId + (
int) aFileHistory->GetCount() );
1299 int i = cmdId - baseId;
1301 wxString fn = aFileHistory->GetHistoryFile( i );
1303 if( !wxFileName::FileExists( fn ) )
1306 wxYES_NO | wxYES_DEFAULT | wxICON_ERROR | wxCENTER );
1308 dlg.SetExtendedMessage(
_(
"Do you want to remove it from list of recently opened files?" ) );
1309 dlg.SetYesNoLabels( KICAD_MESSAGE_DIALOG::ButtonLabel(
_(
"Remove" ) ),
1310 KICAD_MESSAGE_DIALOG::ButtonLabel(
_(
"Keep" ) ) );
1312 if( dlg.ShowModal() == wxID_YES )
1313 aFileHistory->RemoveFileFromHistory( i );
1322 GetMenuBar()->Refresh();
1339 GetMenuBar()->Refresh();
1359 PAGED_DIALOG dlg(
this,
_(
"Preferences" ),
true,
true, wxEmptyString,
1360 wxWindow::FromDIP( wxSize( 980, 560 ),
nullptr ) );
1362 dlg.SetEvtHandlerEnabled(
false );
1369 std::vector<int> expand;
1375 ACTION_MANAGER* actionMgr = kicadMgr->GetToolManager()->GetActionManager();
1382 []( wxWindow* aParent ) -> wxWindow*
1389 []( wxWindow* aParent ) -> wxWindow*
1392 },
_(
"Mouse and Touchpad" ) );
1394#if defined(__linux__) || defined(__FreeBSD__)
1396 [] ( wxWindow* aParent ) -> wxWindow*
1399 },
_(
"SpaceMouse" ) );
1402 book->AddPage( hotkeysPanel,
_(
"Hotkeys" ) );
1405 []( wxWindow* aParent ) -> wxWindow*
1408 },
_(
"Version Control" ) );
1410#ifdef KICAD_USE_SENTRY
1412 []( wxWindow* aParent ) -> wxWindow*
1415 },
_(
"Data Collection" ) );
1418#define LAZY_CTOR( key ) \
1419 [this, kiface]( wxWindow* aParent ) \
1421 return kiface->CreateKiWindow( aParent, key, &Kiway() ); \
1433 expand.push_back( (
int) book->GetPageCount() );
1435 book->AddPage(
new wxPanel( book ),
_(
"Symbol Editor" ) );
1443 expand.push_back( (
int) book->GetPageCount() );
1445 book->AddPage(
new wxPanel( book ),
_(
"Schematic Editor" ) );
1467 expand.push_back( (
int) book->GetPageCount() );
1469 book->AddPage(
new wxPanel( book ),
_(
"Footprint Editor" ) );
1481 expand.push_back( (
int) book->GetPageCount() );
1483 book->AddPage(
new wxPanel( book ),
_(
"PCB Editor" ) );
1493 expand.push_back( (
int) book->GetPageCount() );
1495 book->AddPage(
new wxPanel( book ),
_(
"3D Viewer" ) );
1513 expand.push_back( (
int) book->GetPageCount() );
1515 book->AddPage(
new wxPanel( book ),
_(
"Gerber Viewer" ) );
1534 expand.push_back( (
int) book->GetPageCount() );
1536 book->AddPage(
new wxPanel( book ),
_(
"Drawing Sheet Editor" ) );
1543 []( wxWindow* aParent ) -> wxWindow*
1546 },
_(
"Packages and Updates" ) );
1563 for(
size_t i = 0; i < book->GetPageCount(); ++i )
1564 book->GetPage( i )->Layout();
1566 for(
int page : expand )
1567 book->ExpandNode( page );
1569 if( !aStartPage.IsEmpty() )
1572 dlg.SetEvtHandlerEnabled(
true );
1591 wxString* files = aEvent.GetFiles();
1593 for(
int nb = 0; nb < aEvent.GetNumberOfFiles(); nb++ )
1595 const wxFileName fn = wxFileName( files[nb] );
1596 wxString ext = fn.GetExt();
1615 wxString fn = file.GetFullPath();
1624 wxFileName fn = aFileName;
1630 if( fn.GetPath().IsEmpty() && fn.HasName() )
1633 wxCHECK_MSG( fn.IsOk(),
false,
1634 wxT(
"File name object is invalid. Bad programmer!" ) );
1635 wxCHECK_MSG( !fn.GetPath().IsEmpty(),
false,
1636 wxT(
"File name object path <" ) + fn.GetFullPath() +
1637 wxT(
"> is not set. Bad programmer!" ) );
1639 if( fn.IsDir() && !fn.IsDirWritable() )
1641 msg.Printf(
_(
"Insufficient permissions to folder '%s'." ), fn.GetPath() );
1643 else if( !fn.FileExists() && !fn.IsDirWritable() )
1645 msg.Printf(
_(
"Insufficient permissions to save file '%s'." ), fn.GetFullPath() );
1647 else if( fn.FileExists() && !fn.IsFileWritable() )
1649 msg.Printf(
_(
"Insufficient permissions to save file '%s'." ), fn.GetFullPath() );
1652 if( !msg.IsEmpty() )
1673 wxAcceleratorEntry entries[1];
1674 entries[0].Set( wxACCEL_CTRL,
int(
'Q' ), wxID_EXIT );
1675 wxAcceleratorTable accel( 1, entries );
1676 SetAcceleratorTable( accel );
1696 if( extraitems > 0 )
1711 if( extraitems > 0 )
1732 return m_undoList.m_CommandsList.back()->GetDescription();
1734 return wxEmptyString;
1741 return m_redoList.m_CommandsList.back()->GetDescription();
1743 return wxEmptyString;
1758 wxCommandEvent e( EDA_EVT_UNITS_CHANGED );
1759 e.SetInt(
static_cast<int>( aUnits ) );
1760 e.SetClientData(
this );
1761 ProcessEventLocally( e );
1773 if( !IsMaximized() )
1779 "Maximizing window - Saving position (%d, %d) with size (%d, %d)",
1791#if defined( __WXGTK__ ) && !wxCHECK_VERSION( 3, 2, 9 )
1792 wxSize winSize = GetSize();
1801 GTKDoGetSize( &width, &height );
1803 winSize.Set( width, height );
1806 wxSize winSize = GetSize();
1824 GetMenuBar()->Refresh();
1850WXLRESULT EDA_BASE_FRAME::MSWWindowProc( WXUINT message, WXWPARAM wParam, WXLPARAM lParam )
1854 if( message == WM_SYSCOMMAND )
1856 if( wParam == SC_KEYMENU && ( lParam >> 16 ) <= 0 )
1860 return wxFrame::MSWWindowProc( message, wParam, lParam );
1868 langsMenu->
SetTitle(
_(
"Set Language" ) );
1873 for(
unsigned ii = 0;
LanguagesList[ii].m_KI_Lang_Identifier != 0; ii++ )
1883 new wxMenuItem( langsMenu,
1885 label, tooltip, wxITEM_CHECK );
1887 langsMenu->Append( item );
1891 aMasterMenu->
Add( langsMenu );
1897 int id =
event.GetId();
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 ShowInfoBarError(const wxString &aErrorMsg, bool aShowCloseButton=false, INFOBAR_MESSAGE_TYPE aType=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...
void UpdateFileHistory(const wxString &FullFileName, FILE_HISTORY *aFileHistory=nullptr)
Update the list of recently opened files.
void PrintMsg(const wxString &text)
void SelectToolbarAction(const TOOL_ACTION &aAction)
Select the given action in the toolbar group which contains it, if any.
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.
void OnLanguageSelectionEvent(wxCommandEvent &aEvent)
An event handler called on a language menu selection.
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)
std::unique_ptr< nlohmann::json > m_auiLayoutState
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.
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.
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...
virtual void SetLanguage(int aLanguage)
Change the language and then calls ShowChangedLanguage() on all #KIWAY_PLAYERs.
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.
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)
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.
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.
#define KICAD_MESSAGE_DIALOG
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
std::function< void(ACTION_TOOLBAR *)> ACTION_TOOLBAR_CONTROL_FACTORY
#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.
EVT_MENU_RANGE(ID_GERBVIEW_DRILL_FILE1, ID_GERBVIEW_DRILL_FILEMAX, GERBVIEW_FRAME::OnDrlFileHistory) EVT_MENU_RANGE(ID_GERBVIEW_ZIP_FILE1
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.
INFOBAR_MESSAGE_TYPE
Sets the type of message for special handling if needed.