KiCad PCB EDA Suite
EDA_BASE_FRAME Class Reference

Class EDA_BASE_FRAME is the base frame for deriving all KiCad main window classes. More...

#include <eda_base_frame.h>

Inheritance diagram for EDA_BASE_FRAME:
KICAD_MANAGER_FRAME KIWAY_PLAYER CVPCB_MAINFRAME EDA_3D_VIEWER EDA_DRAW_FRAME SIM_PLOT_FRAME_BASE GERBVIEW_FRAME PCB_BASE_FRAME PL_EDITOR_FRAME SCH_BASE_FRAME SIM_PLOT_FRAME DISPLAY_FOOTPRINTS_FRAME FOOTPRINT_VIEWER_FRAME FOOTPRINT_WIZARD_FRAME PCB_BASE_EDIT_FRAME LIB_EDIT_FRAME LIB_VIEW_FRAME SCH_EDIT_FRAME FOOTPRINT_EDIT_FRAME PCB_EDIT_FRAME

Public Member Functions

 EDA_BASE_FRAME (wxWindow *aParent, FRAME_T aFrameType, const wxString &aTitle, const wxPoint &aPos, const wxSize &aSize, long aStyle, const wxString &aFrameName)
 
 ~EDA_BASE_FRAME ()
 
bool ProcessEvent (wxEvent &aEvent) override
 Function ProcessEvent overrides the default process event handler to implement the auto save feature. More...
 
void SetAutoSaveInterval (int aInterval)
 
int GetAutoSaveInterval () const
 
bool IsType (FRAME_T aType) const
 
void GetKicadHelp (wxCommandEvent &event)
 
void GetKicadContribute (wxCommandEvent &event)
 
void GetKicadAbout (wxCommandEvent &event)
 
bool ShowPreferences (EDA_HOTKEY_CONFIG *aHotkeys, EDA_HOTKEY_CONFIG *aShowHotkeys, const wxString &aHotkeysNickname)
 
void PrintMsg (const wxString &text)
 
virtual void InstallPreferences (PAGED_DIALOG *aParent)
 Function InstallPreferences allows a Frame to load its preference panels (if any) into the preferences dialog. More...
 
virtual void LoadSettings (wxConfigBase *aCfg)
 Function LoadSettings loads common frame parameters from a configuration file. More...
 
virtual void SaveSettings (wxConfigBase *aCfg)
 Function SaveSettings saves common frame parameters to a configuration data file. More...
 
wxString ConfigBaseName ()
 Function ConfigBaseName. More...
 
virtual void SaveProjectSettings (bool aAskForSave)
 Function SaveProjectSettings saves changes to the project settings to the project (.pro) file. More...
 
virtual int WriteHotkeyConfig (struct EDA_HOTKEY_CONFIG *aDescList, wxString *aFullFileName=NULL)
 Function WriteHotkeyConfig Store the current hotkey list It is stored using the standard wxConfig mechanism or a file. More...
 
void ImportHotkeyConfigFromFile (EDA_HOTKEY_CONFIG *aDescList, const wxString &aDefaultShortname)
 Function ImportHotkeyConfigFromFile Prompt the user for an old hotkey file to read, and read it. More...
 
void ExportHotkeyConfigToFile (EDA_HOTKEY_CONFIG *aDescList, const wxString &aDefaultShortname)
 Function ExportHotkeyConfigToFile Prompt the user for an old hotkey file to read, and read it. More...
 
wxString GetFileFromHistory (int cmdId, const wxString &type, wxFileHistory *aFileHistory=NULL)
 Function GetFileFromHistory fetches the file name from the file history list. More...
 
void UpdateFileHistory (const wxString &FullFileName, wxFileHistory *aFileHistory=NULL)
 Function UpdateFileHistory Updates the list of recently opened files. More...
 
void SetMruPath (const wxString &aPath)
 
wxString GetMruPath () const
 
virtual void ReCreateMenuBar ()
 Function ReCreateMenuBar Creates recreates the menu bar. More...
 
bool IsWritable (const wxFileName &aFileName)
 Function IsWritable checks if aFileName can be written. More...
 
void CheckForAutoSaveFile (const wxFileName &aFileName)
 Function CheckForAutoSaveFile checks if an auto save file exists for aFileName and takes the appropriate action depending on the user input. More...
 
virtual void ShowChangedLanguage ()
 Function ShowChangedLanguage redraws the menus and what not in current language. More...
 
virtual void CommonSettingsChanged ()
 Function CommonSettingsChanged Notification event that some of the common (suite-wide) settings have changed. More...
 
bool PostCommandMenuEvent (int evt_type)
 Function PostCommandMenuEvent. More...
 

Protected Member Functions

void onAutoSaveTimer (wxTimerEvent &aEvent)
 Function onAutoSaveTimer handles the auto save timer event. More...
 
virtual bool isAutoSaveRequired () const
 Function autoSaveRequired returns the auto save status of the application. More...
 
virtual bool doAutoSave ()
 Function doAutoSave should be overridden by the derived class to handle the auto save feature. More...
 
virtual wxConfigBase * config ()
 Function config returns the wxConfigBase used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME. More...
 
virtual const SEARCH_STACKsys_search ()
 Function sys_search returns a SEARCH_STACK pertaining to entire program, and is overloaded in KICAD_MANAGER_FRAME. More...
 
virtual wxString help_name ()
 

Static Protected Member Functions

static wxString GetBackupSuffix ()
 Function GetBackupSuffix. More...
 
static wxString GetAutoSaveFilePrefix ()
 Function GetAutoSaveFilePrefix. More...
 

Protected Attributes

FRAME_T m_Ident
 Id Type (pcb, schematic, library..) More...
 
wxPoint m_FramePos
 
wxSize m_FrameSize
 
wxString m_configFrameName
 prefix used in config to identify some params (frame size...) if empty, the frame name defined in CTOR is used More...
 
wxAuiToolBar * m_mainToolBar
 Standard horizontal Toolbar. More...
 
wxString m_AboutTitle
 Name of program displayed in About. More...
 
wxAuiManager m_auimgr
 
bool m_hasAutoSave
 Flag to indicate if this frame supports auto save. More...
 
bool m_autoSaveState
 Flag to indicate the last auto save state. More...
 
int m_autoSaveInterval
 The auto save interval time in seconds. More...
 
wxTimer * m_autoSaveTimer
 The timer used to implement the auto save feature;. More...
 
wxString m_perspective
 wxAuiManager perspective. More...
 
wxString m_mruPath
 Most recently used path. More...
 

Static Protected Attributes

static constexpr int KICAD_AUI_TB_STYLE = wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_PLAIN_BACKGROUND
 

Default style flags used for wxAUI toolbars

More...
 

Private Member Functions

void windowClosing (wxCloseEvent &event)
 Function windowClosing (with its unexpected name so it does not collide with the real OnWindowClose() function provided in derived classes) is called just before a window closing, and is used to call a derivation specific SaveSettings(). More...
 
wxWindow * findQuasiModalDialog ()
 

Detailed Description

Class EDA_BASE_FRAME is the base frame for deriving all KiCad main window classes.

This class is not intended to be used directly. It provides support for automatic calls to a SaveSettings() function. SaveSettings() for a derived class can choose to do nothing, or rely on basic SaveSettings() support in this base class to do most of the work by calling it from the derived class's SaveSettings().

This class is not a KIWAY_PLAYER because KICAD_MANAGER_FRAME is derived from it and that class is not a player.

Definition at line 100 of file eda_base_frame.h.

Constructor & Destructor Documentation

◆ EDA_BASE_FRAME()

EDA_BASE_FRAME::EDA_BASE_FRAME ( wxWindow *  aParent,
FRAME_T  aFrameType,
const wxString &  aTitle,
const wxPoint &  aPos,
const wxSize &  aSize,
long  aStyle,
const wxString &  aFrameName 
)

Definition at line 71 of file eda_base_frame.cpp.

73  :
74  wxFrame( aParent, wxID_ANY, aTitle, aPos, aSize, aStyle, aFrameName )
75 {
76  m_Ident = aFrameType;
77  m_mainToolBar = NULL;
78  m_hasAutoSave = false;
79  m_autoSaveState = false;
80  m_autoSaveInterval = -1;
81  m_autoSaveTimer = new wxTimer( this, ID_AUTO_SAVE_TIMER );
82  m_mruPath = wxStandardPaths::Get().GetDocumentsDir();
83 
84  // Gives a reasonable minimal size to the frame:
85  const int minsize_x = 500;
86  const int minsize_y = 400;
87  SetSizeHints( minsize_x, minsize_y, -1, -1, -1, -1 );
88 
89  // Store dimensions of the user area of the main window.
90  GetClientSize( &m_FrameSize.x, &m_FrameSize.y );
91 
92  Connect( ID_AUTO_SAVE_TIMER, wxEVT_TIMER,
93  wxTimerEventHandler( EDA_BASE_FRAME::onAutoSaveTimer ) );
94 
95  // hook wxEVT_CLOSE_WINDOW so we can call SaveSettings(). This function seems
96  // to be called before any other hook for wxCloseEvent, which is necessary.
97  Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( EDA_BASE_FRAME::windowClosing ) );
98 }
bool m_autoSaveState
Flag to indicate the last auto save state.
wxString m_mruPath
Most recently used path.
void windowClosing(wxCloseEvent &event)
Function windowClosing (with its unexpected name so it does not collide with the real OnWindowClose()...
void onAutoSaveTimer(wxTimerEvent &aEvent)
Function onAutoSaveTimer handles the auto save timer event.
wxTimer * m_autoSaveTimer
The timer used to implement the auto save feature;.
FRAME_T m_Ident
Id Type (pcb, schematic, library..)
wxAuiToolBar * m_mainToolBar
Standard horizontal Toolbar.
bool m_hasAutoSave
Flag to indicate if this frame supports auto save.
int m_autoSaveInterval
The auto save interval time in seconds.

References ID_AUTO_SAVE_TIMER, m_autoSaveInterval, m_autoSaveState, m_autoSaveTimer, m_FrameSize, m_hasAutoSave, m_Ident, m_mainToolBar, m_mruPath, onAutoSaveTimer(), and windowClosing().

◆ ~EDA_BASE_FRAME()

EDA_BASE_FRAME::~EDA_BASE_FRAME ( )

Definition at line 148 of file eda_base_frame.cpp.

149 {
150  delete m_autoSaveTimer;
151 
152  // This is needed for OSX: avoids further OnDraw processing after this
153  // destructor and before the native window is destroyed
154  this->Freeze();
155 }
wxTimer * m_autoSaveTimer
The timer used to implement the auto save feature;.

References m_autoSaveTimer.

Member Function Documentation

◆ CheckForAutoSaveFile()

void EDA_BASE_FRAME::CheckForAutoSaveFile ( const wxFileName &  aFileName)

Function CheckForAutoSaveFile checks if an auto save file exists for aFileName and takes the appropriate action depending on the user input.

If an auto save file exists for aFileName, the user is prompted if they wish to replace file aFileName with the auto saved file. If the user chooses to replace the file, the backup file of aFileName is removed, aFileName is renamed to the backup file name, and the auto save file is renamed to aFileName. If user chooses to keep the existing version of aFileName, the auto save file is removed.

Parameters
aFileNameA wxFileName object containing the file name to check.

Definition at line 585 of file eda_base_frame.cpp.

586 {
587  wxCHECK_RET( aFileName.IsOk(), wxT( "Invalid file name!" ) );
588 
589  wxFileName autoSaveFileName = aFileName;
590 
591  // Check for auto save file.
592  autoSaveFileName.SetName( GetAutoSaveFilePrefix() + aFileName.GetName() );
593 
594  wxLogTrace( traceAutoSave,
595  wxT( "Checking for auto save file " ) + autoSaveFileName.GetFullPath() );
596 
597  if( !autoSaveFileName.FileExists() )
598  return;
599 
600  wxString msg = wxString::Format( _(
601  "Well this is potentially embarrassing!\n"
602  "It appears that the last time you were editing the file\n"
603  "\"%s\"\n"
604  "it was not saved properly. Do you wish to restore the last saved edits you made?" ),
605  GetChars( aFileName.GetFullName() )
606  );
607 
608  int response = wxMessageBox( msg, Pgm().App().GetAppName(), wxYES_NO | wxICON_QUESTION, this );
609 
610  // Make a backup of the current file, delete the file, and rename the auto save file to
611  // the file name.
612  if( response == wxYES )
613  {
614  // Get the backup file name.
615  wxFileName backupFileName = aFileName;
616  backupFileName.SetExt( aFileName.GetExt() + GetBackupSuffix() );
617 
618  // If an old backup file exists, delete it. If an old copy of the file exists, rename
619  // it to the backup file name
620  if( aFileName.FileExists() )
621  {
622  // Rename the old file to the backup file name.
623  if( !wxRenameFile( aFileName.GetFullPath(), backupFileName.GetFullPath(), true ) )
624  {
625  msg.Printf( _( "Could not create backup file \"%s\"" ),
626  GetChars( backupFileName.GetFullPath() ) );
627  wxMessageBox( msg );
628  }
629  }
630 
631  if( !wxRenameFile( autoSaveFileName.GetFullPath(), aFileName.GetFullPath() ) )
632  {
633  wxMessageBox( _( "The auto save file could not be renamed to the board file name." ),
634  Pgm().App().GetAppName(), wxOK | wxICON_EXCLAMATION, this );
635  }
636  }
637  else
638  {
639  wxLogTrace( traceAutoSave,
640  wxT( "Removing auto save file " ) + autoSaveFileName.GetFullPath() );
641 
642  // Remove the auto save file when using the previous file as is.
643  wxRemoveFile( autoSaveFileName.GetFullPath() );
644  }
645 }
const wxChar *const traceAutoSave
Flag to enable auto save feature debug tracing.
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: kicad.cpp:66
static wxString GetBackupSuffix()
Function GetBackupSuffix.
static wxString GetAutoSaveFilePrefix()
Function GetAutoSaveFilePrefix.
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205

References Format(), GetAutoSaveFilePrefix(), GetBackupSuffix(), GetChars(), Pgm(), and traceAutoSave.

Referenced by SCH_EDIT_FRAME::OpenProjectFiles(), and PCB_EDIT_FRAME::OpenProjectFiles().

◆ CommonSettingsChanged()

void EDA_BASE_FRAME::CommonSettingsChanged ( )
virtual

Function CommonSettingsChanged Notification event that some of the common (suite-wide) settings have changed.

Update menus, toolbars, local variables, etc.

Reimplemented in PCB_EDIT_FRAME, SCH_EDIT_FRAME, LIB_EDIT_FRAME, GERBVIEW_FRAME, PCB_BASE_FRAME, FOOTPRINT_EDIT_FRAME, KICAD_MANAGER_FRAME, and EDA_DRAW_FRAME.

Definition at line 244 of file eda_base_frame.cpp.

245 {
246  if( GetMenuBar() )
247  {
248  // For icons in menus, icon scaling & hotkeys
249  ReCreateMenuBar();
250  GetMenuBar()->Refresh();
251  }
252 }
virtual void ReCreateMenuBar()
Function ReCreateMenuBar Creates recreates the menu bar.

References ReCreateMenuBar().

Referenced by EDA_DRAW_FRAME::CommonSettingsChanged(), and KIWAY::CommonSettingsChanged().

◆ config()

wxConfigBase * EDA_BASE_FRAME::config ( )
protectedvirtual

Function config returns the wxConfigBase used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.

Reimplemented in KICAD_MANAGER_FRAME.

Definition at line 360 of file eda_base_frame.cpp.

361 {
362  // KICAD_MANAGER_FRAME overrides this
363  wxConfigBase* ret = Kiface().KifaceSettings();
364  //wxASSERT( ret );
365  return ret;
366 }
wxConfigBase * KifaceSettings() const
Definition: kiface_i.h:103
KIFACE_I & Kiface()
Global KIFACE_I "get" accessor.
Definition: kicad.cpp:52

References Kiface(), and KIFACE_I::KifaceSettings().

Referenced by CVPCB_MAINFRAME::CVPCB_MAINFRAME(), FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME(), GERBVIEW_FRAME::GERBVIEW_FRAME(), PCB_EDIT_FRAME::GetSettings(), SIM_PLOT_FRAME::onClose(), FOOTPRINT_WIZARD_FRAME::OnCloseWindow(), LIB_EDIT_FRAME::OnPreferencesOptions(), SCH_EDIT_FRAME::OnPreferencesOptions(), SCH_EDIT_FRAME::OpenProjectFiles(), PL_EDITOR_FRAME::PL_EDITOR_FRAME(), SIM_PLOT_FRAME::SIM_PLOT_FRAME(), and windowClosing().

◆ ConfigBaseName()

wxString EDA_BASE_FRAME::ConfigBaseName ( )
inline

Function ConfigBaseName.

Returns
a base name prefix used in Load/Save settings to build the full name of keys used in config. This is usually the name of the frame set by CTOR, unless m_configFrameName contains a base name. this is the case of frames which can be shown in normal or modal mode. This is needed because we want only one base name prefix, regardless the mode used.

Definition at line 275 of file eda_base_frame.h.

276  {
277  wxString baseCfgName = m_configFrameName.IsEmpty() ? GetName() : m_configFrameName;
278  return baseCfgName;
279  }
wxString m_configFrameName
prefix used in config to identify some params (frame size...) if empty, the frame name defined in CTO...

References m_configFrameName.

Referenced by DISPLAY_FOOTPRINTS_FRAME::LoadSettings(), FOOTPRINT_VIEWER_FRAME::LoadSettings(), LoadSettings(), EDA_DRAW_FRAME::LoadSettings(), DISPLAY_FOOTPRINTS_FRAME::SaveSettings(), FOOTPRINT_VIEWER_FRAME::SaveSettings(), SaveSettings(), EDA_DRAW_FRAME::SaveSettings(), and WriteHotkeyConfig().

◆ doAutoSave()

bool EDA_BASE_FRAME::doAutoSave ( )
protectedvirtual

Function doAutoSave should be overridden by the derived class to handle the auto save feature.

Returns
true if the auto save was successful otherwise false.

Reimplemented in PCB_EDIT_FRAME, and SCH_EDIT_FRAME.

Definition at line 223 of file eda_base_frame.cpp.

224 {
225  wxCHECK_MSG( false, true, wxT( "Auto save timer function not overridden. Bad programmer!" ) );
226 }

Referenced by onAutoSaveTimer().

◆ ExportHotkeyConfigToFile()

void EDA_BASE_FRAME::ExportHotkeyConfigToFile ( EDA_HOTKEY_CONFIG aDescList,
const wxString &  aDefaultShortname 
)

Function ExportHotkeyConfigToFile Prompt the user for an old hotkey file to read, and read it.

Parameters
aDescList= current hotkey list descr. to initialize.
aDefaultShortname= a default short name (extention not needed) like eechema, kicad...

Definition at line 738 of file hotkeys_basic.cpp.

740 {
741  wxString ext = DEFAULT_HOTKEY_FILENAME_EXT;
742  wxString mask = wxT( "*." ) + ext;
743 
744 #if 0
745  wxString path = wxPathOnly( Prj().GetProjectFullName() );
746 #else
747  wxString path = GetMruPath();
748 #endif
749  wxFileName fn( aDefaultShortname );
750  fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
751 
752  wxString filename = EDA_FILE_SELECTOR( _( "Write Hotkey Configuration File:" ),
753  path,
754  fn.GetFullPath(),
755  ext,
756  mask,
757  this,
758  wxFD_SAVE,
759  true );
760 
761  if( filename.IsEmpty() )
762  return;
763 
764  WriteHotkeyConfig( aDescList, &filename );
765  SetMruPath( wxFileName( filename ).GetPath() );
766 }
void SetMruPath(const wxString &aPath)
PROJECT & Prj()
Definition: kicad.cpp:303
wxString GetMruPath() const
wxString EDA_FILE_SELECTOR(const wxString &aTitle, const wxString &aPath, const wxString &aFileName, const wxString &aExtension, const wxString &aWildcard, wxWindow *aParent, int aStyle, const bool aKeepWorkingDirectory, const wxPoint &aPosition, wxString *aMruPath)
Function EDA_FILE_SELECTOR.
Definition: gestfich.cpp:82
virtual int WriteHotkeyConfig(struct EDA_HOTKEY_CONFIG *aDescList, wxString *aFullFileName=NULL)
Function WriteHotkeyConfig Store the current hotkey list It is stored using the standard wxConfig mec...
#define DEFAULT_HOTKEY_FILENAME_EXT
Definition: hotkeys_basic.h:34

References DEFAULT_HOTKEY_FILENAME_EXT, EDA_FILE_SELECTOR(), GetMruPath(), Prj(), SetMruPath(), and WriteHotkeyConfig().

Referenced by PANEL_HOTKEYS_EDITOR::installButtons().

◆ findQuasiModalDialog()

wxWindow * EDA_BASE_FRAME::findQuasiModalDialog ( )
private

Definition at line 101 of file eda_base_frame.cpp.

102 {
103  for( auto& iter : GetChildren() )
104  {
105  DIALOG_SHIM* dlg = dynamic_cast<DIALOG_SHIM*>( iter );
106  if( dlg && dlg->IsQuasiModal() )
107  return dlg;
108  }
109 
110  // FIXME: CvPcb is currently implemented on top of KIWAY_PLAYER rather than DIALOG_SHIM,
111  // so we have to look for it separately.
112  if( m_Ident == FRAME_SCH )
113  {
114  wxWindow* cvpcb = wxWindow::FindWindowByName( "CvpcbFrame" );
115  if( cvpcb )
116  return cvpcb;
117  }
118 
119  return nullptr;
120 }
Class DIALOG_SHIM may sit in the inheritance tree between wxDialog and any class written by wxFormBui...
Definition: dialog_shim.h:83
FRAME_T m_Ident
Id Type (pcb, schematic, library..)
bool IsQuasiModal()
Definition: dialog_shim.h:125

References FRAME_SCH, DIALOG_SHIM::IsQuasiModal(), and m_Ident.

Referenced by ProcessEvent(), and windowClosing().

◆ GetAutoSaveFilePrefix()

static wxString EDA_BASE_FRAME::GetAutoSaveFilePrefix ( )
inlinestaticprotected

Function GetAutoSaveFilePrefix.

Returns
the string to prepend to a file name for automatic save.

Definition at line 163 of file eda_base_frame.h.

164  {
165  return wxT( "_autosave-" );
166  }

Referenced by CheckForAutoSaveFile(), SCH_EDIT_FRAME::doAutoSave(), PCB_EDIT_FRAME::doAutoSave(), PCB_EDIT_FRAME::Files_io_from_id(), SCH_EDIT_FRAME::OnCloseWindow(), PCB_EDIT_FRAME::OnExportSTEP(), SCH_EDIT_FRAME::SaveEEFile(), and PCB_EDIT_FRAME::SavePcbFile().

◆ GetAutoSaveInterval()

int EDA_BASE_FRAME::GetAutoSaveInterval ( ) const
inline

Definition at line 223 of file eda_base_frame.h.

223 { return m_autoSaveInterval; }
int m_autoSaveInterval
The auto save interval time in seconds.

References m_autoSaveInterval.

◆ GetBackupSuffix()

static wxString EDA_BASE_FRAME::GetBackupSuffix ( )
inlinestaticprotected

Function GetBackupSuffix.

Returns
the suffix to be appended to the file extension on backup

Definition at line 154 of file eda_base_frame.h.

155  {
156  return wxT( "-bak" );
157  }

Referenced by CheckForAutoSaveFile(), PCB_EDIT_FRAME::createBackupFile(), and PCB_EDIT_FRAME::Files_io_from_id().

◆ GetFileFromHistory()

wxString EDA_BASE_FRAME::GetFileFromHistory ( int  cmdId,
const wxString &  type,
wxFileHistory *  aFileHistory = NULL 
)

Function GetFileFromHistory fetches the file name from the file history list.

and removes the selected file, if this file does not exists Note also the menu is updated, if wxFileHistory::UseMenu was called at init time

Parameters
cmdIdThe command ID associated with the aFileHistory object.
typePlease document me!
aFileHistoryThe wxFileHistory in use. If null, the main application file history is used
Returns
a wxString containing the selected filename

Definition at line 399 of file eda_base_frame.cpp.

401 {
402  wxFileHistory* fileHistory = aFileHistory;
403 
404  if( !fileHistory )
405  fileHistory = &Kiface().GetFileHistory();
406 
407  int baseId = fileHistory->GetBaseId();
408 
409  wxASSERT( cmdId >= baseId && cmdId < baseId + (int) fileHistory->GetCount() );
410 
411  unsigned i = cmdId - baseId;
412 
413  if( i < fileHistory->GetCount() )
414  {
415  wxString fn = fileHistory->GetHistoryFile( i );
416 
417  if( wxFileName::FileExists( fn ) )
418  return fn;
419  else
420  {
421  wxString msg = wxString::Format( _( "File \"%s\" was not found." ), fn );
422  wxMessageBox( msg );
423 
424  fileHistory->RemoveFileFromHistory( i );
425  }
426  }
427 
428  return wxEmptyString;
429 }
KIFACE_I & Kiface()
Global KIFACE_I "get" accessor.
Definition: kicad.cpp:52
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
FILE_HISTORY & GetFileHistory()
Definition: kiface_i.h:123
size_t i
Definition: json11.cpp:597

References Format(), KIFACE_I::GetFileHistory(), i, and Kiface().

Referenced by GERBVIEW_FRAME::OnDrlFileHistory(), KICAD_MANAGER_FRAME::OnFileHistory(), PL_EDITOR_FRAME::OnFileHistory(), PCB_EDIT_FRAME::OnFileHistory(), GERBVIEW_FRAME::OnGbrFileHistory(), GERBVIEW_FRAME::OnJobFileHistory(), SCH_EDIT_FRAME::OnLoadFile(), and GERBVIEW_FRAME::OnZipFileHistory().

◆ GetKicadAbout()

void EDA_BASE_FRAME::GetKicadAbout ( wxCommandEvent &  event)

Definition at line 506 of file eda_base_frame.cpp.

507 {
508  void ShowAboutDialog(EDA_BASE_FRAME * aParent); // See AboutDialog_main.cpp
509  ShowAboutDialog( this );
510 }
void ShowAboutDialog(EDA_BASE_FRAME *aParent)
Class EDA_BASE_FRAME is the base frame for deriving all KiCad main window classes.

References ShowAboutDialog().

◆ GetKicadContribute()

void EDA_BASE_FRAME::GetKicadContribute ( wxCommandEvent &  event)

Definition at line 493 of file eda_base_frame.cpp.

494 {
495  if( !wxLaunchDefaultBrowser( URL_GET_INVOLVED ) )
496  {
497  wxString msg;
498  msg.Printf( _( "Could not launch the default browser.\n"
499  "For information on how to help the KiCad project, visit %s" ),
501  wxMessageBox( msg, _( "Get involved with KiCad" ), wxOK, this );
502  }
503 }
#define URL_GET_INVOLVED

References URL_GET_INVOLVED.

◆ GetKicadHelp()

void EDA_BASE_FRAME::GetKicadHelp ( wxCommandEvent &  event)

Definition at line 432 of file eda_base_frame.cpp.

433 {
434  const SEARCH_STACK& search = sys_search();
435 
436  /* We have to get document for beginners,
437  * or the full specific doc
438  * if event id is wxID_INDEX, we want the document for beginners.
439  * else the specific doc file (its name is in Kiface().GetHelpFileName())
440  * The document for beginners is the same for all KiCad utilities
441  */
442  if( event.GetId() == wxID_INDEX )
443  {
444  // List of possible names for Getting Started in KiCad
445  const wxChar* names[2] = {
446  wxT( "getting_started_in_kicad" ),
447  wxT( "Getting_Started_in_KiCad" )
448  };
449 
450  wxString helpFile;
451  // Search for "getting_started_in_kicad.html" or "getting_started_in_kicad.pdf"
452  // or "Getting_Started_in_KiCad.html" or "Getting_Started_in_KiCad.pdf"
453  for( unsigned ii = 0; ii < arrayDim( names ); ii++ )
454  {
455  helpFile = SearchHelpFileFullPath( search, names[ii] );
456 
457  if( !helpFile.IsEmpty() )
458  break;
459  }
460 
461  if( !helpFile )
462  {
463  wxString msg = wxString::Format( _(
464  "Html or pdf help file \n\"%s\"\n or\n\"%s\" could not be found." ), names[0], names[1] );
465  wxMessageBox( msg );
466  }
467  else
468  {
469  GetAssociatedDocument( this, helpFile );
470  }
471 
472  return;
473  }
474 
475  wxString base_name = help_name();
476  wxString helpFile = SearchHelpFileFullPath( search, base_name );
477 
478  if( !helpFile )
479  {
480  wxString msg = wxString::Format( _(
481  "Help file \"%s\" could not be found." ),
482  GetChars( base_name )
483  );
484  wxMessageBox( msg );
485  }
486  else
487  {
488  GetAssociatedDocument( this, helpFile );
489  }
490 }
wxString SearchHelpFileFullPath(const SEARCH_STACK &aSearchStack, const wxString &aBaseName)
Return the help file's full path.
bool GetAssociatedDocument(wxWindow *aParent, const wxString &aDocName, const wxPathList *aPaths)
Function GetAssociatedDocument open a document (file) with the suitable browser.
Definition: eda_doc.cpp:87
Class SEARCH_STACK looks for files in a number of places.
Definition: search_stack.h:41
virtual const SEARCH_STACK & sys_search()
Function sys_search returns a SEARCH_STACK pertaining to entire program, and is overloaded in KICAD_M...
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Definition: macros.h:99
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
virtual wxString help_name()

References arrayDim(), Format(), GetAssociatedDocument(), GetChars(), help_name(), numEval::SearchHelpFileFullPath(), and sys_search().

◆ GetMruPath()

wxString EDA_BASE_FRAME::GetMruPath ( ) const
inline

◆ help_name()

wxString EDA_BASE_FRAME::help_name ( )
protectedvirtual

Reimplemented in KICAD_MANAGER_FRAME.

Definition at line 375 of file eda_base_frame.cpp.

376 {
377  return Kiface().GetHelpFileName();
378 }
KIFACE_I & Kiface()
Global KIFACE_I "get" accessor.
Definition: kicad.cpp:52
const wxString & GetHelpFileName() const
Function GetHelpFileName returns just the basename portion of the current help file.
Definition: kiface_i.h:121

References KIFACE_I::GetHelpFileName(), and Kiface().

Referenced by GetKicadHelp().

◆ ImportHotkeyConfigFromFile()

void EDA_BASE_FRAME::ImportHotkeyConfigFromFile ( EDA_HOTKEY_CONFIG aDescList,
const wxString &  aDefaultShortname 
)

Function ImportHotkeyConfigFromFile Prompt the user for an old hotkey file to read, and read it.

Parameters
aDescList= current hotkey list descr. to initialize.
aDefaultShortname= a default short name (extention not needed) like eechema, kicad...

Definition at line 709 of file hotkeys_basic.cpp.

711 {
712  wxString ext = DEFAULT_HOTKEY_FILENAME_EXT;
713  wxString mask = wxT( "*." ) + ext;
714 
715 
716  wxString path = GetMruPath();
717  wxFileName fn( aDefaultShortname );
718  fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
719 
720  wxString filename = EDA_FILE_SELECTOR( _( "Read Hotkey Configuration File:" ),
721  path,
722  fn.GetFullPath(),
723  ext,
724  mask,
725  this,
726  wxFD_OPEN,
727  true );
728 
729  if( filename.IsEmpty() )
730  return;
731 
732  ::ReadHotkeyConfigFile( filename, aDescList, false );
733  WriteHotkeyConfig( aDescList );
734  SetMruPath( wxFileName( filename ).GetPath() );
735 }
void SetMruPath(const wxString &aPath)
int ReadHotkeyConfigFile(const wxString &aFilename, struct EDA_HOTKEY_CONFIG *aDescList, const bool aDefaultLocation)
Function ReadHotkeyConfig Read hotkey configuration for a given app, possibly before the frame for th...
wxString GetMruPath() const
wxString EDA_FILE_SELECTOR(const wxString &aTitle, const wxString &aPath, const wxString &aFileName, const wxString &aExtension, const wxString &aWildcard, wxWindow *aParent, int aStyle, const bool aKeepWorkingDirectory, const wxPoint &aPosition, wxString *aMruPath)
Function EDA_FILE_SELECTOR.
Definition: gestfich.cpp:82
virtual int WriteHotkeyConfig(struct EDA_HOTKEY_CONFIG *aDescList, wxString *aFullFileName=NULL)
Function WriteHotkeyConfig Store the current hotkey list It is stored using the standard wxConfig mec...
#define DEFAULT_HOTKEY_FILENAME_EXT
Definition: hotkeys_basic.h:34

References DEFAULT_HOTKEY_FILENAME_EXT, EDA_FILE_SELECTOR(), GetMruPath(), ReadHotkeyConfigFile(), SetMruPath(), and WriteHotkeyConfig().

Referenced by PANEL_HOTKEYS_EDITOR::installButtons().

◆ InstallPreferences()

virtual void EDA_BASE_FRAME::InstallPreferences ( PAGED_DIALOG aParent)
inlinevirtual

Function InstallPreferences allows a Frame to load its preference panels (if any) into the preferences dialog.

Parameters
aParenta paged dialog into which the preference panels should be installed

Reimplemented in PCB_EDIT_FRAME, SCH_EDIT_FRAME, LIB_EDIT_FRAME, GERBVIEW_FRAME, and FOOTPRINT_EDIT_FRAME.

Definition at line 244 of file eda_base_frame.h.

244 { }

Referenced by ShowPreferences().

◆ isAutoSaveRequired()

virtual bool EDA_BASE_FRAME::isAutoSaveRequired ( ) const
inlineprotectedvirtual

Function autoSaveRequired returns the auto save status of the application.

Override this function if your derived frame supports automatic file saving.

Reimplemented in PCB_EDIT_FRAME, and SCH_EDIT_FRAME.

Definition at line 179 of file eda_base_frame.h.

179 { return false; }

Referenced by ProcessEvent().

◆ IsType()

◆ IsWritable()

bool EDA_BASE_FRAME::IsWritable ( const wxFileName &  aFileName)

Function IsWritable checks if aFileName can be written.

The function performs a number of tests on aFileName to verify that it can be saved. If aFileName defines a path with no file name, them the path is tested for user write permission. If aFileName defines a file name that does not exist in the path, the path is tested for user write permission. If aFileName defines a file that already exits, the file name is tested for user write permissions.

Note
The file name path must be set or an assertion will be raised on debug builds and return false on release builds.
Parameters
aFileNameThe full path and/or file name of the file to test.
Returns
False if aFileName cannot be written.

Definition at line 541 of file eda_base_frame.cpp.

542 {
543  wxString msg;
544  wxFileName fn = aFileName;
545 
546  // Check for absence of a file path with a file name. Unfortunately KiCad
547  // uses paths relative to the current project path without the ./ part which
548  // confuses wxFileName. Making the file name path absolute may be less than
549  // elegant but it solves the problem.
550  if( fn.GetPath().IsEmpty() && fn.HasName() )
551  fn.MakeAbsolute();
552 
553  wxCHECK_MSG( fn.IsOk(), false,
554  wxT( "File name object is invalid. Bad programmer!" ) );
555  wxCHECK_MSG( !fn.GetPath().IsEmpty(), false,
556  wxT( "File name object path <" ) + fn.GetFullPath() +
557  wxT( "> is not set. Bad programmer!" ) );
558 
559  if( fn.IsDir() && !fn.IsDirWritable() )
560  {
561  msg.Printf( _( "You do not have write permissions to folder \"%s\"." ),
562  GetChars( fn.GetPath() ) );
563  }
564  else if( !fn.FileExists() && !fn.IsDirWritable() )
565  {
566  msg.Printf( _( "You do not have write permissions to save file \"%s\" to folder \"%s\"." ),
567  GetChars( fn.GetFullName() ), GetChars( fn.GetPath() ) );
568  }
569  else if( fn.FileExists() && !fn.IsFileWritable() )
570  {
571  msg.Printf( _( "You do not have write permissions to save file \"%s\"." ),
572  GetChars( fn.GetFullPath() ) );
573  }
574 
575  if( !msg.IsEmpty() )
576  {
577  wxMessageBox( msg );
578  return false;
579  }
580 
581  return true;
582 }
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92

References GetChars().

Referenced by SCH_EDIT_FRAME::doAutoSave(), SCH_EDIT_FRAME::SaveEEFile(), LIB_EDIT_FRAME::saveLibrary(), PCB_EDIT_FRAME::SavePcbCopy(), PCB_EDIT_FRAME::SavePcbFile(), CVPCB_MAINFRAME::SaveProjectFile(), and SCH_EDIT_FRAME::SaveProjectSettings().

◆ LoadSettings()

void EDA_BASE_FRAME::LoadSettings ( wxConfigBase *  aCfg)
virtual

Function LoadSettings loads common frame parameters from a configuration file.

Don't forget to call the base method or your frames won't remember their positions and sizes.

Reimplemented in EDA_DRAW_FRAME, PCB_BASE_FRAME, PCB_EDIT_FRAME, GERBVIEW_FRAME, LIB_EDIT_FRAME, SCH_EDIT_FRAME, CVPCB_MAINFRAME, KICAD_MANAGER_FRAME, PL_EDITOR_FRAME, FOOTPRINT_WIZARD_FRAME, EDA_3D_VIEWER, SIM_PLOT_FRAME, FOOTPRINT_VIEWER_FRAME, LIB_VIEW_FRAME, DISPLAY_FOOTPRINTS_FRAME, and FOOTPRINT_EDIT_FRAME.

Definition at line 255 of file eda_base_frame.cpp.

256 {
257  int maximized = 0;
258 
259  wxString baseCfgName = ConfigBaseName();
260 
261  wxString text = baseCfgName + entryPosX;
262  aCfg->Read( text, &m_FramePos.x, m_FramePos.x );
263 
264  text = baseCfgName + entryPosY;
265  aCfg->Read( text, &m_FramePos.y, m_FramePos.y );
266 
267  text = baseCfgName + entrySizeX;
268  aCfg->Read( text, &m_FrameSize.x, m_FrameSize.x );
269 
270  text = baseCfgName + entrySizeY;
271  aCfg->Read( text, &m_FrameSize.y, m_FrameSize.y );
272 
273  text = baseCfgName + entryMaximized;
274  aCfg->Read( text, &maximized, 0 );
275 
276  if( m_hasAutoSave )
277  {
278  text = baseCfgName + entryAutoSaveInterval;
279  aCfg->Read( text, &m_autoSaveInterval, DEFAULT_AUTO_SAVE_INTERVAL );
280  }
281 
282  // Ensure the window is on a connected display, and is visible.
283  // (at least a corner of the frame must be visible on screen)
284  // Sometimes, if a window was moved on an auxiliary display, and when this
285  // display is no more available, it is not the case.
286  wxRect rect( m_FramePos, m_FrameSize );
287 
288  if( wxDisplay::GetFromPoint( rect.GetTopLeft() ) == wxNOT_FOUND &&
289  wxDisplay::GetFromPoint( rect.GetTopRight() ) == wxNOT_FOUND &&
290  wxDisplay::GetFromPoint( rect.GetBottomLeft() ) == wxNOT_FOUND &&
291  wxDisplay::GetFromPoint( rect.GetBottomRight() ) == wxNOT_FOUND )
292  {
293  m_FramePos = wxDefaultPosition;
294  }
295 
296  // Ensure Window title bar is visible
297 #if defined( __WXMAC__ )
298  // for macOSX, the window must be below system (macOSX) toolbar
299  // Ypos_min = GetMBarHeight(); seems no more exist in new API (subject to change)
300  int Ypos_min = 20;
301 #else
302  int Ypos_min = 0;
303 #endif
304  if( m_FramePos.y < Ypos_min )
305  m_FramePos.y = Ypos_min;
306 
307  if( maximized )
308  Maximize();
309 
310  aCfg->Read( baseCfgName + entryPerspective, &m_perspective );
311  aCfg->Read( baseCfgName + entryMruPath, &m_mruPath );
312 }
wxString m_mruPath
Most recently used path.
wxString ConfigBaseName()
Function ConfigBaseName.
static const wxString entryPosX
X position of frame, in pixels (suffix)
wxString m_perspective
wxAuiManager perspective.
static const wxString entryPerspective
Configuration file entry for wxAuiManger perspective.
#define DEFAULT_AUTO_SAVE_INTERVAL
The default auto save interval is 10 minutes.
static const wxString entrySizeX
Width of frame, in pixels (suffix)
static const wxString entrySizeY
Height of frame, in pixels (suffix)
static const wxString entryPosY
Y position of frame, in pixels (suffix)
static const wxString entryAutoSaveInterval
Configuration file entry name for auto save interval.
static const wxString entryMaximized
Nonzero iff frame is maximized (suffix)
bool m_hasAutoSave
Flag to indicate if this frame supports auto save.
static const wxString entryMruPath
Configuration file entry for most recently used path.
int m_autoSaveInterval
The auto save interval time in seconds.

References ConfigBaseName(), DEFAULT_AUTO_SAVE_INTERVAL, entryAutoSaveInterval, entryMaximized, entryMruPath, entryPerspective, entryPosX, entryPosY, entrySizeX, entrySizeY, m_autoSaveInterval, m_FramePos, m_FrameSize, m_hasAutoSave, m_mruPath, and m_perspective.

Referenced by SIM_PLOT_FRAME::LoadSettings(), EDA_3D_VIEWER::LoadSettings(), KICAD_MANAGER_FRAME::LoadSettings(), CVPCB_MAINFRAME::LoadSettings(), and EDA_DRAW_FRAME::LoadSettings().

◆ onAutoSaveTimer()

void EDA_BASE_FRAME::onAutoSaveTimer ( wxTimerEvent &  aEvent)
protected

Function onAutoSaveTimer handles the auto save timer event.

Definition at line 216 of file eda_base_frame.cpp.

217 {
218  if( !doAutoSave() )
219  m_autoSaveTimer->Start( m_autoSaveInterval * 1000, wxTIMER_ONE_SHOT );
220 }
virtual bool doAutoSave()
Function doAutoSave should be overridden by the derived class to handle the auto save feature.
wxTimer * m_autoSaveTimer
The timer used to implement the auto save feature;.
int m_autoSaveInterval
The auto save interval time in seconds.

References doAutoSave(), m_autoSaveInterval, and m_autoSaveTimer.

Referenced by EDA_BASE_FRAME().

◆ PostCommandMenuEvent()

bool EDA_BASE_FRAME::PostCommandMenuEvent ( int  evt_type)

Function PostCommandMenuEvent.

Post a menu event to the frame, which can be used to trigger actions bound to menu items.

Definition at line 648 of file eda_base_frame.cpp.

649 {
650  if( evt_type != 0 )
651  {
652  wxCommandEvent evt( wxEVT_COMMAND_MENU_SELECTED );
653  evt.SetEventObject( this );
654  evt.SetId( evt_type );
655  wxPostEvent( this, evt );
656  return true;
657  }
658 
659  return false;
660 }

Referenced by FOOTPRINT_EDIT_FRAME::OnHotKey(), FOOTPRINT_EDIT_FRAME::OnHotkeyDeleteItem(), FOOTPRINT_EDIT_FRAME::OnHotkeyDuplicateItem(), PCB_EDIT_FRAME::OnHotkeyDuplicateOrArrayItem(), FOOTPRINT_EDIT_FRAME::OnHotkeyEditItem(), FOOTPRINT_EDIT_FRAME::OnHotkeyMoveItem(), FOOTPRINT_EDIT_FRAME::OnHotkeyMoveItemExact(), and FOOTPRINT_EDIT_FRAME::OnHotkeyRotateItem().

◆ PrintMsg()

void EDA_BASE_FRAME::PrintMsg ( const wxString &  text)

Definition at line 381 of file eda_base_frame.cpp.

382 {
383  SetStatusText( text );
384 }

◆ ProcessEvent()

bool EDA_BASE_FRAME::ProcessEvent ( wxEvent &  aEvent)
override

Function ProcessEvent overrides the default process event handler to implement the auto save feature.

Warning
If you override this function in a derived class, make sure you call down to this or the auto save feature will be disabled.

Definition at line 158 of file eda_base_frame.cpp.

159 {
160 #ifdef __WXMAC__
161  // Apple in its infinite wisdom will raise a disabled window before even passing
162  // us the event, so we have no way to stop it. Instead, we have to catch an
163  // improperly ordered disabled window and quasi-modal dialog here and reorder
164  // them.
165  if( !IsEnabled() && IsActive() )
166  {
167  wxWindow* dlg = findQuasiModalDialog();
168  if( dlg )
169  dlg->Raise();
170  }
171 #endif
172 
173  if( !wxFrame::ProcessEvent( aEvent ) )
174  return false;
175 
176  if( IsShown() && m_hasAutoSave && IsActive() &&
178  {
179  if( !m_autoSaveState )
180  {
181  wxLogTrace( traceAutoSave, wxT( "Starting auto save timer." ) );
182  m_autoSaveTimer->Start( m_autoSaveInterval * 1000, wxTIMER_ONE_SHOT );
183  m_autoSaveState = true;
184  }
185  else if( m_autoSaveTimer->IsRunning() )
186  {
187  wxLogTrace( traceAutoSave, wxT( "Stopping auto save timer." ) );
188  m_autoSaveTimer->Stop();
189  m_autoSaveState = false;
190  }
191  }
192 
193  return true;
194 }
bool m_autoSaveState
Flag to indicate the last auto save state.
const wxChar *const traceAutoSave
Flag to enable auto save feature debug tracing.
virtual bool isAutoSaveRequired() const
Function autoSaveRequired returns the auto save status of the application.
wxTimer * m_autoSaveTimer
The timer used to implement the auto save feature;.
wxWindow * findQuasiModalDialog()
bool m_hasAutoSave
Flag to indicate if this frame supports auto save.
int m_autoSaveInterval
The auto save interval time in seconds.

References findQuasiModalDialog(), isAutoSaveRequired(), m_autoSaveInterval, m_autoSaveState, m_autoSaveTimer, m_hasAutoSave, and traceAutoSave.

Referenced by STATUS_POPUP::onCharHook(), LIB_VIEW_FRAME::onSelectNextSymbol(), LIB_VIEW_FRAME::onSelectPreviousSymbol(), KIWAY::ProcessEvent(), LIB_VIEW_FRAME::ReCreateListCmp(), CVPCB_CONTROL::SwitchUnits(), GERBVIEW_CONTROL::SwitchUnits(), and PCBNEW_CONTROL::SwitchUnits().

◆ ReCreateMenuBar()

void EDA_BASE_FRAME::ReCreateMenuBar ( void  )
virtual

Function ReCreateMenuBar Creates recreates the menu bar.

Needed when the language is changed

Reimplemented in PCB_EDIT_FRAME, EDA_DRAW_FRAME, SCH_EDIT_FRAME, GERBVIEW_FRAME, LIB_EDIT_FRAME, PCB_BASE_FRAME, KICAD_MANAGER_FRAME, PL_EDITOR_FRAME, FOOTPRINT_EDIT_FRAME, FOOTPRINT_VIEWER_FRAME, CVPCB_MAINFRAME, and LIB_VIEW_FRAME.

Definition at line 229 of file eda_base_frame.cpp.

230 {
231 }

Referenced by CommonSettingsChanged(), and ShowChangedLanguage().

◆ SaveProjectSettings()

virtual void EDA_BASE_FRAME::SaveProjectSettings ( bool  aAskForSave)
inlinevirtual

Function SaveProjectSettings saves changes to the project settings to the project (.pro) file.

The method is virtual so you can override it to call the suitable save method. The base method do nothing

Parameters
aAskForSave= true to open a dialog before saving the settings

Reimplemented in PCB_EDIT_FRAME, and SCH_EDIT_FRAME.

Definition at line 289 of file eda_base_frame.h.

289 {};

Referenced by DIALOG_PAGES_SETTINGS::OnOkClick().

◆ SaveSettings()

void EDA_BASE_FRAME::SaveSettings ( wxConfigBase *  aCfg)
virtual

Function SaveSettings saves common frame parameters to a configuration data file.

Don't forget to call the base class's SaveSettings() from your derived SaveSettings() otherwise the frames won't remember their positions and sizes.

Reimplemented in EDA_DRAW_FRAME, PCB_BASE_FRAME, PCB_EDIT_FRAME, GERBVIEW_FRAME, LIB_EDIT_FRAME, SCH_EDIT_FRAME, CVPCB_MAINFRAME, KICAD_MANAGER_FRAME, PL_EDITOR_FRAME, FOOTPRINT_WIZARD_FRAME, EDA_3D_VIEWER, SIM_PLOT_FRAME, FOOTPRINT_VIEWER_FRAME, LIB_VIEW_FRAME, DISPLAY_FOOTPRINTS_FRAME, and FOOTPRINT_EDIT_FRAME.

Definition at line 315 of file eda_base_frame.cpp.

316 {
317  wxString text;
318 
319  if( IsIconized() )
320  return;
321 
322  wxString baseCfgName = ConfigBaseName();
323 
324  m_FrameSize = GetSize();
325  m_FramePos = GetPosition();
326 
327  text = baseCfgName + wxT( "Pos_x" );
328  aCfg->Write( text, (long) m_FramePos.x );
329 
330  text = baseCfgName + wxT( "Pos_y" );
331  aCfg->Write( text, (long) m_FramePos.y );
332 
333  text = baseCfgName + wxT( "Size_x" );
334  aCfg->Write( text, (long) m_FrameSize.x );
335 
336  text = baseCfgName + wxT( "Size_y" );
337  aCfg->Write( text, (long) m_FrameSize.y );
338 
339  text = baseCfgName + wxT( "Maximized" );
340  aCfg->Write( text, IsMaximized() );
341 
342  if( m_hasAutoSave )
343  {
344  text = baseCfgName + entryAutoSaveInterval;
345  aCfg->Write( text, m_autoSaveInterval );
346  }
347 
348  // Once this is fully implemented, wxAuiManager will be used to maintain
349  // the persistance of the main frame and all it's managed windows and
350  // all of the legacy frame persistence position code can be removed.
351  wxString perspective = m_auimgr.SavePerspective();
352 
353  // printf( "perspective(%s): %s\n",
354  // TO_UTF8( m_FrameName + entryPerspective ), TO_UTF8( perspective ) );
355  aCfg->Write( baseCfgName + entryPerspective, perspective );
356  aCfg->Write( baseCfgName + entryMruPath, m_mruPath );
357 }
wxString m_mruPath
Most recently used path.
wxString ConfigBaseName()
Function ConfigBaseName.
wxAuiManager m_auimgr
static const wxString entryPerspective
Configuration file entry for wxAuiManger perspective.
static const wxString entryAutoSaveInterval
Configuration file entry name for auto save interval.
bool m_hasAutoSave
Flag to indicate if this frame supports auto save.
static const wxString entryMruPath
Configuration file entry for most recently used path.
int m_autoSaveInterval
The auto save interval time in seconds.

References ConfigBaseName(), entryAutoSaveInterval, entryMruPath, entryPerspective, m_auimgr, m_autoSaveInterval, m_FramePos, m_FrameSize, m_hasAutoSave, and m_mruPath.

Referenced by SIM_PLOT_FRAME::SaveSettings(), EDA_3D_VIEWER::SaveSettings(), KICAD_MANAGER_FRAME::SaveSettings(), CVPCB_MAINFRAME::SaveSettings(), EDA_DRAW_FRAME::SaveSettings(), and windowClosing().

◆ SetAutoSaveInterval()

void EDA_BASE_FRAME::SetAutoSaveInterval ( int  aInterval)

Definition at line 197 of file eda_base_frame.cpp.

198 {
199  m_autoSaveInterval = aInterval;
200 
201  if( m_autoSaveTimer->IsRunning() )
202  {
203  if( m_autoSaveInterval > 0 )
204  {
205  m_autoSaveTimer->Start( m_autoSaveInterval * 1000, wxTIMER_ONE_SHOT );
206  }
207  else
208  {
209  m_autoSaveTimer->Stop();
210  m_autoSaveState = false;
211  }
212  }
213 }
bool m_autoSaveState
Flag to indicate the last auto save state.
wxTimer * m_autoSaveTimer
The timer used to implement the auto save feature;.
int m_autoSaveInterval
The auto save interval time in seconds.

References m_autoSaveInterval, m_autoSaveState, and m_autoSaveTimer.

Referenced by EDA_DRAW_FRAME::CommonSettingsChanged().

◆ SetMruPath()

void EDA_BASE_FRAME::SetMruPath ( const wxString &  aPath)
inline

Definition at line 352 of file eda_base_frame.h.

352 { m_mruPath = aPath; }
wxString m_mruPath
Most recently used path.

References m_mruPath.

Referenced by ExportHotkeyConfigToFile(), ImportHotkeyConfigFromFile(), and KICAD_MANAGER_FRAME::LoadProject().

◆ ShowChangedLanguage()

void EDA_BASE_FRAME::ShowChangedLanguage ( )
virtual

Function ShowChangedLanguage redraws the menus and what not in current language.

Reimplemented in PCB_EDIT_FRAME, SCH_EDIT_FRAME, LIB_EDIT_FRAME, FOOTPRINT_EDIT_FRAME, GERBVIEW_FRAME, PCB_BASE_FRAME, and CVPCB_MAINFRAME.

Definition at line 234 of file eda_base_frame.cpp.

235 {
236  if( GetMenuBar() )
237  {
238  ReCreateMenuBar();
239  GetMenuBar()->Refresh();
240  }
241 }
virtual void ReCreateMenuBar()
Function ReCreateMenuBar Creates recreates the menu bar.

References ReCreateMenuBar().

Referenced by KIWAY::SetLanguage(), CVPCB_MAINFRAME::ShowChangedLanguage(), PCB_BASE_FRAME::ShowChangedLanguage(), GERBVIEW_FRAME::ShowChangedLanguage(), LIB_EDIT_FRAME::ShowChangedLanguage(), and SCH_EDIT_FRAME::ShowChangedLanguage().

◆ ShowPreferences()

bool EDA_BASE_FRAME::ShowPreferences ( EDA_HOTKEY_CONFIG aHotkeys,
EDA_HOTKEY_CONFIG aShowHotkeys,
const wxString &  aHotkeysNickname 
)

Definition at line 513 of file eda_base_frame.cpp.

515 {
516  PAGED_DIALOG dlg( this, _( "Preferences" ) );
517  wxTreebook* book = dlg.GetTreebook();
518 
519  book->AddPage( new PANEL_COMMON_SETTINGS( &dlg, book ), _( "Common" ) );
520  book->AddPage( new PANEL_HOTKEYS_EDITOR( this, book, false,
521  aHotkeys, aShowHotkeys, aHotkeysNickname ), _( "Hotkeys" ) );
522 
523  for( unsigned i = 0; i < KIWAY_PLAYER_COUNT; ++i )
524  {
525  KIWAY_PLAYER* frame = dlg.Kiway().Player( (FRAME_T) i, false );
526 
527  if( frame )
528  frame->InstallPreferences( &dlg );
529  }
530 
531  if( dlg.ShowModal() == wxID_OK )
532  {
533  dlg.Kiway().CommonSettingsChanged();
534  return true;
535  }
536 
537  return false;
538 }
Class KIWAY_PLAYER is a wxFrame capable of the OpenProjectFiles function, meaning it can load a porti...
Definition: kiway_player.h:120
KIWAY & Kiway() const
Function Kiway returns a reference to the KIWAY that this object has an opportunity to participate in...
Definition: kiway_player.h:60
FRAME_T
Enum FRAME_T is the set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
Definition: frame_type.h:34
VTBL_ENTRY KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=NULL)
Function Player returns the KIWAY_PLAYER* given a FRAME_T.
Definition: kiway.cpp:300
size_t i
Definition: json11.cpp:597
virtual void InstallPreferences(PAGED_DIALOG *aParent)
Function InstallPreferences allows a Frame to load its preference panels (if any) into the preference...

References KIWAY::CommonSettingsChanged(), PAGED_DIALOG::GetTreebook(), i, InstallPreferences(), KIWAY_HOLDER::Kiway(), KIWAY_PLAYER_COUNT, and KIWAY::Player().

Referenced by KICAD_MANAGER_FRAME::OnPreferences(), LIB_EDIT_FRAME::OnPreferencesOptions(), SCH_EDIT_FRAME::OnPreferencesOptions(), PL_EDITOR_FRAME::Process_Config(), PCB_EDIT_FRAME::Process_Config(), GERBVIEW_FRAME::Process_Config(), and FOOTPRINT_EDIT_FRAME::ProcessPreferences().

◆ sys_search()

const SEARCH_STACK & EDA_BASE_FRAME::sys_search ( )
protectedvirtual

Function sys_search returns a SEARCH_STACK pertaining to entire program, and is overloaded in KICAD_MANAGER_FRAME.

Reimplemented in KICAD_MANAGER_FRAME.

Definition at line 369 of file eda_base_frame.cpp.

370 {
371  return Kiface().KifaceSearch();
372 }
KIFACE_I & Kiface()
Global KIFACE_I "get" accessor.
Definition: kicad.cpp:52
SEARCH_STACK & KifaceSearch()
Only for DSO specific 'non-library' files.
Definition: kiface_i.h:127

References Kiface(), and KIFACE_I::KifaceSearch().

Referenced by GetKicadHelp().

◆ UpdateFileHistory()

void EDA_BASE_FRAME::UpdateFileHistory ( const wxString &  FullFileName,
wxFileHistory *  aFileHistory = NULL 
)

Function UpdateFileHistory Updates the list of recently opened files.

Note also the menu is updated, if wxFileHistory::UseMenu was called at init time

Parameters
FullFileNameThe full file name including the path.
aFileHistoryThe wxFileHistory in use. If NULL, the main application file history is used.

Definition at line 387 of file eda_base_frame.cpp.

389 {
390  wxFileHistory* fileHistory = aFileHistory;
391 
392  if( !fileHistory )
393  fileHistory = &Kiface().GetFileHistory();
394 
395  fileHistory->AddFileToHistory( FullFileName );
396 }
KIFACE_I & Kiface()
Global KIFACE_I "get" accessor.
Definition: kicad.cpp:52
FILE_HISTORY & GetFileHistory()
Definition: kiface_i.h:123

References KIFACE_I::GetFileHistory(), and Kiface().

Referenced by SCH_EDIT_FRAME::importFile(), GERBVIEW_FRAME::LoadExcellonFiles(), GERBVIEW_FRAME::LoadGerberJobFile(), GERBVIEW_FRAME::loadListOfGerberAndDrillFiles(), PL_EDITOR_FRAME::LoadPageLayoutDescrFile(), KICAD_MANAGER_FRAME::LoadProject(), KICAD_MANAGER_FRAME::OnCloseWindow(), SCH_EDIT_FRAME::OnCloseWindow(), SCH_EDIT_FRAME::OpenProjectFiles(), PCB_EDIT_FRAME::OpenProjectFiles(), PCB_EDIT_FRAME::SavePcbFile(), and GERBVIEW_FRAME::unarchiveFiles().

◆ windowClosing()

void EDA_BASE_FRAME::windowClosing ( wxCloseEvent &  event)
private

Function windowClosing (with its unexpected name so it does not collide with the real OnWindowClose() function provided in derived classes) is called just before a window closing, and is used to call a derivation specific SaveSettings().

SaveSettings() is called for all derived wxFrames in this base class overload. (Calling it from a destructor is deprecated since the wxFrame's position is not available in the destructor on linux.) In other words, you should not need to call SaveSettings() anywhere, except in this one function found only in this class.

Definition at line 123 of file eda_base_frame.cpp.

124 {
125  // Don't allow closing when a quasi-modal is open.
126  wxWindow* quasiModal = findQuasiModalDialog();
127 
128  if( quasiModal )
129  {
130  // Raise and notify; don't give the user a warning regarding "quasi-modal dialogs"
131  // when they have no idea what those are.
132  quasiModal->Raise();
133  wxBell();
134 
135  event.Veto();
136  return;
137  }
138 
139  wxConfigBase* cfg = config();
140 
141  if( cfg )
142  SaveSettings( cfg ); // virtual, wxFrame specific
143 
144  event.Skip(); // we did not "handle" the event, only eavesdropped on it.
145 }
virtual void SaveSettings(wxConfigBase *aCfg)
Function SaveSettings saves common frame parameters to a configuration data file.
virtual wxConfigBase * config()
Function config returns the wxConfigBase used in SaveSettings(), and is overloaded in KICAD_MANAGER_F...
wxWindow * findQuasiModalDialog()

References config(), findQuasiModalDialog(), and SaveSettings().

Referenced by EDA_BASE_FRAME().

◆ WriteHotkeyConfig()

int EDA_BASE_FRAME::WriteHotkeyConfig ( struct EDA_HOTKEY_CONFIG aDescList,
wxString *  aFullFileName = NULL 
)
virtual

Function WriteHotkeyConfig Store the current hotkey list It is stored using the standard wxConfig mechanism or a file.

Parameters
aDescList= pointer to the current hotkey list.
aFullFileName= a wxString pointer to a full file name. if NULL, use the standard wxConfig mechanism (default) the output format is: shortcut "key" "function" lines starting with # are comments

Reimplemented in EDA_DRAW_FRAME.

Definition at line 489 of file hotkeys_basic.cpp.

491 {
492  wxString msg;
493  wxString keyname, infokey;
494  FILE* file;
495 
496  msg = wxT( "$hotkey list\n" );
497 
498  // Print the current hotkey list
499  EDA_HOTKEY** list;
500 
501  for( ; aDescList->m_HK_InfoList != nullptr; aDescList++ )
502  {
503  if( aDescList->m_Title )
504  {
505  msg += wxT( "# " );
506  msg += *aDescList->m_Title;
507  msg += wxT( "\n" );
508  }
509 
510  msg += *aDescList->m_SectionTag;
511  msg += wxT( "\n" );
512 
513  list = aDescList->m_HK_InfoList;
514 
515  for( ; *list != nullptr; list++ )
516  {
517  EDA_HOTKEY* hk_decr = *list;
518  msg += wxT( "shortcut " );
519  keyname = KeyNameFromKeyCode( hk_decr->m_KeyCode );
520  AddDelimiterString( keyname );
521  infokey = hk_decr->m_InfoMsg;
522  AddDelimiterString( infokey );
523  msg += keyname + wxT( ": " ) + infokey + wxT( "\n" );
524  }
525  }
526 
527  msg += wxT( "$Endlist\n" );
528 
529  if( aFullFileName )
530  file = wxFopen( *aFullFileName, wxT( "wt" ) );
531  else
532  {
533  wxString configName( ConfigBaseName() );
534  if( configName == SCH_EDIT_FRAME_NAME || configName == LIB_EDIT_FRAME_NAME )
535  configName = EESCHEMA_HOTKEY_NAME;
536  else if( configName == PCB_EDIT_FRAME_NAME ||
537  configName == FOOTPRINT_EDIT_FRAME_NAME )
538  configName = PCBNEW_HOTKEY_NAME;
539 
540  wxFileName fn( configName );
541  fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
542  fn.SetPath( GetKicadConfigPath() );
543  file = wxFopen( fn.GetFullPath(), wxT( "wt" ) );
544  }
545 
546  if( file )
547  {
548  wxFputs( msg, file );
549  fclose( file );
550  }
551  else
552  {
553  msg.Printf( wxT( "Unable to write file %s" ), GetChars( *aFullFileName ) );
554  return 0;
555  }
556 
557  return 1;
558 }
#define LIB_EDIT_FRAME_NAME
Definition: draw_frame.h:49
EDA_HOTKEY ** m_HK_InfoList
Definition: hotkeys_basic.h:98
wxString ConfigBaseName()
Function ConfigBaseName.
#define PCB_EDIT_FRAME_NAME
Definition: draw_frame.h:56
#define SCH_EDIT_FRAME_NAME
Definition: draw_frame.h:50
#define FOOTPRINT_EDIT_FRAME_NAME
Definition: draw_frame.h:53
void AddDelimiterString(wxString &string)
Function AddDelimiterString Add un " to the start and the end of string (if not already done).
Definition: gestfich.cpp:44
wxString GetKicadConfigPath()
Return the user configuration path used to store KiCad's configuration files.
Definition: common.cpp:266
wxString * m_SectionTag
Definition: hotkeys_basic.h:97
wxString m_InfoMsg
Definition: hotkeys_basic.h:66
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
class EDA_HOTKEY is a class to handle hot key commands.
Definition: hotkeys_basic.h:59
wxString * m_Title
Definition: hotkeys_basic.h:99
#define EESCHEMA_HOTKEY_NAME
Definition: hotkeys_basic.h:35
wxString KeyNameFromKeyCode(int aKeycode, bool *aIsFound)
Function KeyNameFromKeyCode return the key name from the key code Only some wxWidgets key values are ...
#define DEFAULT_HOTKEY_FILENAME_EXT
Definition: hotkeys_basic.h:34
#define PCBNEW_HOTKEY_NAME
Definition: hotkeys_basic.h:36

References AddDelimiterString(), ConfigBaseName(), DEFAULT_HOTKEY_FILENAME_EXT, EESCHEMA_HOTKEY_NAME, FOOTPRINT_EDIT_FRAME_NAME, GetChars(), GetKicadConfigPath(), KeyNameFromKeyCode(), LIB_EDIT_FRAME_NAME, EDA_HOTKEY_CONFIG::m_HK_InfoList, EDA_HOTKEY::m_InfoMsg, EDA_HOTKEY::m_KeyCode, EDA_HOTKEY_CONFIG::m_SectionTag, EDA_HOTKEY_CONFIG::m_Title, PCB_EDIT_FRAME_NAME, PCBNEW_HOTKEY_NAME, and SCH_EDIT_FRAME_NAME.

Referenced by ExportHotkeyConfigToFile(), ImportHotkeyConfigFromFile(), PANEL_HOTKEYS_EDITOR::TransferDataFromWindow(), and EDA_DRAW_FRAME::WriteHotkeyConfig().

Member Data Documentation

◆ KICAD_AUI_TB_STYLE

◆ m_AboutTitle

wxString EDA_BASE_FRAME::m_AboutTitle
protected

Name of program displayed in About.

Definition at line 127 of file eda_base_frame.h.

◆ m_auimgr

◆ m_autoSaveInterval

int EDA_BASE_FRAME::m_autoSaveInterval
protected

The auto save interval time in seconds.

Definition at line 138 of file eda_base_frame.h.

Referenced by EDA_BASE_FRAME(), GetAutoSaveInterval(), LoadSettings(), onAutoSaveTimer(), ProcessEvent(), SaveSettings(), and SetAutoSaveInterval().

◆ m_autoSaveState

bool EDA_BASE_FRAME::m_autoSaveState
protected

Flag to indicate the last auto save state.

Definition at line 135 of file eda_base_frame.h.

Referenced by SCH_EDIT_FRAME::doAutoSave(), PCB_EDIT_FRAME::doAutoSave(), EDA_BASE_FRAME(), ProcessEvent(), and SetAutoSaveInterval().

◆ m_autoSaveTimer

wxTimer* EDA_BASE_FRAME::m_autoSaveTimer
protected

The timer used to implement the auto save feature;.

Definition at line 141 of file eda_base_frame.h.

Referenced by EDA_BASE_FRAME(), onAutoSaveTimer(), ProcessEvent(), SetAutoSaveInterval(), and ~EDA_BASE_FRAME().

◆ m_configFrameName

wxString EDA_BASE_FRAME::m_configFrameName
protected

prefix used in config to identify some params (frame size...) if empty, the frame name defined in CTOR is used

Definition at line 122 of file eda_base_frame.h.

Referenced by ConfigBaseName(), and FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME().

◆ m_FramePos

◆ m_FrameSize

◆ m_hasAutoSave

bool EDA_BASE_FRAME::m_hasAutoSave
protected

Flag to indicate if this frame supports auto save.

Definition at line 132 of file eda_base_frame.h.

Referenced by EDA_BASE_FRAME(), LoadSettings(), ProcessEvent(), and SaveSettings().

◆ m_Ident

FRAME_T EDA_BASE_FRAME::m_Ident
protected

Id Type (pcb, schematic, library..)

Definition at line 118 of file eda_base_frame.h.

Referenced by EDA_BASE_FRAME(), findQuasiModalDialog(), IsType(), and EDA_DRAW_FRAME::saveCanvasTypeSetting().

◆ m_mainToolBar

◆ m_mruPath

◆ m_perspective

wxString EDA_BASE_FRAME::m_perspective
protected

wxAuiManager perspective.

Definition at line 143 of file eda_base_frame.h.

Referenced by LoadSettings().


The documentation for this class was generated from the following files: