56 #include <wx/config.h> 57 #include <wx/display.h> 58 #include <wx/stdpaths.h> 59 #include <wx/string.h> 60 #include <wx/treebook.h> 75 return wxSize( 406, 354 );
78 return wxSize( 500, 400 );
88 return wxSize( 850, 540 );
91 return wxSize( 1280, 720 );
114 m_ident = aFrameType;
115 m_maximizeByDefault =
false;
117 m_settingsManager =
nullptr;
118 m_fileHistory =
nullptr;
119 m_hasAutoSave =
false;
120 m_autoSaveState =
false;
121 m_autoSaveInterval = -1;
125 m_isNonUserClose =
false;
133 m_settingsManager = &
Pgm().GetSettingsManager();
136 SetSizeHints(
minSize( aFrameType ).x,
minSize( aFrameType ).y, -1, -1, -1, -1 );
139 GetClientSize( &m_frameSize.x, &m_frameSize.y );
162 const wxString& aTitle,
const wxPoint& aPos,
const wxSize& aSize,
163 long aStyle,
const wxString& aFrameName,
KIWAY* aKiway ) :
164 wxFrame( aParent, wxID_ANY, aTitle, aPos, aSize, aStyle, aFrameName ),
174 for( wxWindow* iter : GetChildren() )
176 DIALOG_SHIM* dlg = dynamic_cast<DIALOG_SHIM*>( iter );
186 wxWindow* cvpcb = wxWindow::FindWindowByName( wxT(
"CvpcbFrame" ) );
208 if( event.CanVeto() )
215 if( event.GetId() == wxEVT_QUERY_END_SESSION
216 ||
event.GetId() == wxEVT_END_SESSION )
239 if( event.CanVeto() )
265 if( !IsEnabled() && IsActive() )
273 if( !wxFrame::ProcessEvent( aEvent ) )
276 if(
Pgm().m_Quitting )
285 wxLogTrace(
traceAutoSave, wxT(
"Starting auto save timer." ) );
291 wxLogTrace(
traceAutoSave, wxT(
"Stopping auto save timer." ) );
329 wxCHECK_MSG(
false,
true, wxT(
"Auto save timer function not overridden. Bad programmer!" ) );
355 std::placeholders::_1,
361 Bind( wxEVT_UPDATE_UI, evtFunc, aID );
372 Unbind( wxEVT_UPDATE_UI, it->second, aID );
379 bool checkRes =
false;
380 bool enableRes =
true;
393 catch( std::exception& )
400 if( isCut || isCopy || isPaste )
402 wxWindow* focus = wxWindow::FindFocus();
403 wxTextEntry* textEntry = dynamic_cast<wxTextEntry*>( focus );
405 if( textEntry && isCut && textEntry->CanCut() )
407 else if( textEntry && isCopy && textEntry->CanCopy() )
409 else if( textEntry && isPaste && textEntry->CanPaste() )
413 aEvent.Enable( enableRes );
414 aEvent.Show( showRes );
418 #if wxCHECK_VERSION( 3, 1, 5 ) 419 if( aEvent.IsCheckable() )
420 aEvent.Check( checkRes );
422 bool canCheck =
true;
426 if(
auto menu = dynamic_cast<wxMenu*>( aEvent.GetEventObject() ) )
427 canCheck = menu->FindItem( aEvent.GetId() )->IsCheckable();
430 aEvent.Check( checkRes );
439 [] (
const SELECTION& aSel,
int aLangIdentifier )
441 return Pgm().GetSelectedLanguageIdentifier() == aLangIdentifier;
447 cond.
Check( std::bind( isCurrentLang, std::placeholders::_1,
472 helpMenu->AppendSeparator();
476 aMenuBar->Append( helpMenu,
_(
"&Help" ) + wxS(
" " ) );
487 GetMenuBar()->Refresh();
511 GetMenuBar()->Refresh();
521 wxAuiPaneInfoArray panes =
m_auimgr.GetAllPanes();
523 for(
size_t i = 0; i < panes.GetCount(); ++i )
525 if(
ACTION_TOOLBAR* toolbar = dynamic_cast<ACTION_TOOLBAR*>( panes[i].window ) )
526 toolbar->RefreshBitmaps();
534 int currentDisplay = wxDisplay::GetFromWindow(
this );
551 if( !
Pgm().GetCommonSettings()->m_Session.remember_open_files )
556 if( state !=
nullptr )
565 bool wasDefault =
false;
587 if( aState.
display >= wxDisplay::GetCount() )
593 const unsigned int index = 0;
594 wxDisplay display( index );
595 wxRect clientSize = display.GetGeometry();
611 wxDisplay display( aState.
display );
612 wxRect clientSize = display.GetClientArea();
614 int yLimTop = clientSize.y;
615 int yLimBottom = clientSize.y + clientSize.height;
616 int xLimLeft = clientSize.x;
617 int xLimRight = clientSize.x + clientSize.width;
619 if( upperLeft.x > xLimRight ||
620 upperRight.x < xLimLeft ||
621 upperLeft.y < yLimTop ||
622 upperLeft.y > yLimBottom )
659 wxDisplay display( wxDisplay::GetFromWindow(
this ) );
660 wxRect clientSize = display.GetClientArea();
661 wxPoint pos = GetPosition();
665 wxT(
"ensureWindowIsOnScreen: clientArea (%d, %d) w %d h %d" ), clientSize.x, clientSize.y,
666 clientSize.width, clientSize.height );
668 if( pos.y < clientSize.y )
671 wxT(
"ensureWindowIsOnScreen: y pos %d below minimum, setting to %d" ), pos.y,
673 pos.y = clientSize.y;
676 if( pos.x < clientSize.x )
679 wxT(
"ensureWindowIsOnScreen: x pos %d is off the client rect, setting to %d" ), pos.x,
681 pos.x = clientSize.x;
684 if( pos.x + size.x - clientSize.x > clientSize.width )
686 int newWidth = clientSize.width - ( pos.x - clientSize.x );
688 wxT(
"ensureWindowIsOnScreen: effective width %d above available %d, setting to %d" ),
689 pos.x + size.x, clientSize.width, newWidth );
693 if( pos.y + size.y - clientSize.y > clientSize.height )
695 int newHeight = clientSize.height - ( pos.y - clientSize.y );
697 wxT(
"ensureWindowIsOnScreen: effective height %d above available %d, setting to %d" ),
698 pos.y + size.y, clientSize.height, newHeight );
702 wxLogTrace(
traceDisplayLocation, wxT(
"Updating window position (%d, %d) with size (%d, %d)" ),
703 pos.x, pos.y, size.x, size.y );
705 SetSize( pos.x, pos.y, size.x, size.y );
752 IsMaximized() ? wxT(
"true" ) : wxT(
"false" ) );
774 int fileHistorySize =
Pgm().GetCommonSettings()->m_System.file_history_size;
791 if(
Pgm().GetCommonSettings()->m_Session.remember_open_files && !currentlyOpenedFile.IsEmpty() )
793 wxFileName rfn( currentlyOpenedFile );
794 rfn.MakeRelativeTo(
Prj().GetProjectPath() );
802 if( !currentlyOpenedFile.IsEmpty() )
837 SetStatusText(
text );
843 #if defined( __WXOSX_MAC__ ) 855 #if defined( __WXOSX_MAC__ ) 863 m_auimgr.GetPane( wxT(
"InfoBar" ) ).Hide();
874 if( aShowCloseButton )
882 std::function<
void(
void)> aCallback )
886 if( aShowCloseButton )
900 if( aShowCloseButton )
911 if( aShowCloseButton )
923 wxASSERT( aFileHistory );
931 GetMenuBar()->Refresh();
942 wxASSERT( aFileHistory );
944 int baseId = aFileHistory->GetBaseId();
946 wxASSERT( cmdId >= baseId && cmdId < baseId + (
int) aFileHistory->GetCount() );
948 unsigned i = cmdId - baseId;
950 if( i < aFileHistory->GetCount() )
952 wxString fn = aFileHistory->GetHistoryFile( i );
954 if( wxFileName::FileExists( fn ) )
961 aFileHistory->RemoveFileFromHistory( i );
969 GetMenuBar()->Refresh();
972 return wxEmptyString;
981 wxASSERT( aFileHistory );
989 GetMenuBar()->Refresh();
1011 book->AddPage( hotkeysPanel,
_(
"Hotkeys" ) );
1013 wxWindow* viewer3D =
nullptr;
1029 static_cast<EDA_BASE_FRAME*>( viewer3D )->InstallPreferences( &dlg, hotkeysPanel );
1035 static_cast<EDA_BASE_FRAME*>( manager )->InstallPreferences( &dlg, hotkeysPanel );
1037 for(
size_t i = 0; i < book->GetPageCount(); ++i )
1038 book->GetPage( i )->Layout();
1040 if( dlg.ShowModal() == wxID_OK )
1048 wxFileName fn = aFileName;
1054 if( fn.GetPath().IsEmpty() && fn.HasName() )
1057 wxCHECK_MSG( fn.IsOk(),
false,
1058 wxT(
"File name object is invalid. Bad programmer!" ) );
1059 wxCHECK_MSG( !fn.GetPath().IsEmpty(),
false,
1060 wxT(
"File name object path <" ) + fn.GetFullPath() +
1061 wxT(
"> is not set. Bad programmer!" ) );
1063 if( fn.IsDir() && !fn.IsDirWritable() )
1065 msg.Printf(
_(
"Insufficient permissions to folder '%s'." ),
1068 else if( !fn.FileExists() && !fn.IsDirWritable() )
1070 msg.Printf(
_(
"Insufficient permissions to save file '%s'." ),
1071 fn.GetFullName(), fn.GetPath() );
1073 else if( fn.FileExists() && !fn.IsFileWritable() )
1075 msg.Printf(
_(
"Insufficient permissions to save file '%s'." ),
1079 if( !msg.IsEmpty() )
1082 wxMessageBox( msg );
1093 wxCHECK_RET( aFileName.IsOk(), wxT(
"Invalid file name!" ) );
1095 wxFileName autoSaveFileName = aFileName;
1101 wxT(
"Checking for auto save file " ) + autoSaveFileName.GetFullPath() );
1103 if( !autoSaveFileName.FileExists() )
1107 "Well this is potentially embarrassing!\n" 1108 "It appears that the last time you were editing the file\n" 1110 "it was not saved properly. Do you wish to restore the last saved edits you made?" ),
1111 aFileName.GetFullName()
1114 int response = wxMessageBox( msg,
Pgm().App().GetAppDisplayName(), wxYES_NO | wxICON_QUESTION,
1119 if( response == wxYES )
1121 if( !wxRenameFile( autoSaveFileName.GetFullPath(), aFileName.GetFullPath() ) )
1123 wxMessageBox(
_(
"The auto save file could not be renamed to the board file name." ),
1124 Pgm().App().GetAppDisplayName(), wxOK | wxICON_EXCLAMATION,
this );
1130 wxT(
"Removing auto save file " ) + autoSaveFileName.GetFullPath() );
1133 wxRemoveFile( autoSaveFileName.GetFullPath() );
1147 wxAcceleratorEntry entries[1];
1148 entries[0].Set( wxACCEL_CTRL,
int(
'Q' ), wxID_EXIT );
1149 wxAcceleratorTable accel( 1, entries );
1150 SetAcceleratorTable( accel );
1170 if( extraitems > 0 )
1185 if( extraitems > 0 )
1208 wxCommandEvent e( UNITS_CHANGED );
1209 ProcessEventLocally( e );
1221 if( !IsMaximized() )
1227 wxT(
"Maximizing window - Saving position (%d, %d) with size (%d, %d)" ),
1240 wxSize winSize = GetSize();
1249 GTKDoGetSize( &width, &height );
1251 winSize.Set( width, height );
1254 wxSize winSize = GetSize();
1272 GetMenuBar()->Refresh();
1288 WXLRESULT EDA_BASE_FRAME::MSWWindowProc( WXUINT message, WXWPARAM wParam, WXLPARAM lParam )
1292 if( message == WM_SYSCOMMAND )
1293 if( wParam == SC_KEYMENU && ( lParam >> 16 ) <= 0 )
1296 return wxFrame::MSWWindowProc( message, wParam, lParam );
SELECTION_CONDITION showCondition
Returns true if the UI control should be shown.
virtual void HandleSystemColorChange()
Update the UI in response to a change in the system colors.
static TOOL_ACTION listHotKeys
LANGUAGE_DESCR LanguagesList[]
An array containing all the languages that KiCad supports.
void PrintMsg(const wxString &text)
A mix in class which holds the location of a wxWindow's KIWAY.
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
MESSAGE_TYPE
Sets the type of message for special handling if needed.
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
void SaveFileState(const wxString &aFileName, const WINDOW_SETTINGS *aWindowCfg, bool aOpen)
virtual void OnCharHook(wxKeyEvent &aKeyEvent)
Capture the key event before it is sent to the GUI.
virtual bool doAutoSave()
This should be overridden by the derived class to handle the auto save feature.
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
bool m_isClosing
Set by NonUserClose() to indicate that the user did not request the current close.
void ShowChangedLanguage() override
Redraw the menus and what not in current language.
const wxChar *const traceAutoSave
Flag to enable auto save feature debug tracing.
virtual APP_SETTINGS_BASE * config() const
Returns the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
virtual void SaveSettings(APP_SETTINGS_BASE *aCfg)
Save common frame parameters to a configuration data file.
This file is part of the common library.
void SaveWindowSettings(WINDOW_SETTINGS *aCfg)
Save window settings to the given settings object.
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
UNDO_REDO_CONTAINER m_undoList
FRAME_T
The set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
void onSystemColorChange(wxSysColourChangedEvent &aEvent)
SELECTION_CONDITION enableCondition
Returns true if the UI control should be enabled.
void windowClosing(wxCloseEvent &event)
(with its unexpected name so it does not collide with the real OnWindowClose() function provided in d...
virtual void PushCommandToRedoList(PICKED_ITEMS_LIST *aItem)
Add a command to redo in the redo list.
SELECTION_CONDITION checkCondition
Returns true if the UI control should be checked.
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...
int m_KI_Lang_Identifier
KiCad identifier used in menu selection (See id.h)
virtual bool isAutoSaveRequired() const
Return the auto save status of the application.
void Save(APP_SETTINGS_BASE &aSettings)
Saves history into a JSON settings object.
virtual void setupUIConditions()
Setup the UI conditions for the various actions and their controls in this frame.
void onAutoSaveTimer(wxTimerEvent &aEvent)
Handle the auto save timer event.
static TOOL_ACTION reportBug
Cursor control event types.
virtual void doCloseWindow()
bool IsQuasiModal() const
virtual void RegisterUIUpdateHandler(int aID, const ACTION_CONDITIONS &aConditions) override
Register a UI update handler for the control with ID aID.
const wxChar *const traceDisplayLocation
Flag to enable debug output of display positioning logic.
virtual void PushCommandToUndoList(PICKED_ITEMS_LIST *aItem)
Add a command to undo in the undo list.
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 ClearScaledBitmapCache()
Wipes out the scaled bitmap cache so that the icon theme can be changed.
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
void Load(const APP_SETTINGS_BASE &aSettings)
Loads history from a JSON settings object.
virtual int GetRedoCommandCount() const
void ChangeUserUnits(EDA_UNITS aUnits)
Look for files in a number of paths.
virtual PICKED_ITEMS_LIST * PopCommandFromRedoList()
Return the last command to undo and remove it from list, nothing is deleted.
Dialog helper object to sit in the inheritance tree between wxDialog and any class written by wxFormB...
static TOOL_ACTION donate
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.
This class implements a file history object to store a list of files, that can then be added to a men...
#define DEFAULT_MAX_UNDO_ITEMS
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
wxTimer * m_autoSaveTimer
void LoadWindowState(const wxString &aFileName)
PICKED_ITEMS_LIST * PopCommand()
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 ...
void ClearFileHistory()
Clear all entries from the file history.
std::function< void(wxUpdateUIEvent &) > UIUpdateHandler
This is the handler functor for the update UI events.
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...
void UpdateFileHistory(const wxString &FullFileName, FILE_HISTORY *aFileHistory=nullptr)
Update the list of recently opened files.
virtual PROJECT_LOCAL_SETTINGS & GetLocalSettings() const
SEARCH_STACK & KifaceSearch()
Only for DSO specific 'non-library' files.
wxString GetFileFromHistory(int cmdId, const wxString &type, FILE_HISTORY *aFileHistory=nullptr)
Fetches the file name from the file history list.
void PushCommand(PICKED_ITEMS_LIST *aCommand)
void initExitKey()
Sets the common key-pair for exiting the application (Ctrl-Q) and ties it to the wxID_EXIT event id.
wxTreebook * GetTreebook()
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...
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...
void AddFileToHistory(const wxString &aFile) override
Adds a file to the history.
wxWindow * findQuasiModalDialog()
Stores the common settings that are saved and loaded for each window / frame.
void ShowAboutDialog(EDA_BASE_FRAME *aParent)
void ensureWindowIsOnScreen()
virtual void CheckForAutoSaveFile(const wxFileName &aFileName)
Check if an auto save file exists for aFileName and takes the appropriate action depending on the use...
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
virtual int GetUndoCommandCount() const
wxString dump(const wxArrayString &aArray)
Debug helper for printing wxArrayString contents.
static const wxSize defaultSize(FRAME_T aFrameType)
virtual void unitsChangeRefresh()
Called when when the units setting has changed to allow for any derived classes to handle refreshing ...
virtual void OnSize(wxSizeEvent &aEvent)
std::map< int, UIUpdateHandler > m_uiUpdateMap
Set by the close window event handler after frames are asked if they can close.
virtual void UnregisterUIUpdateHandler(int aID) override
Unregister a UI handler for a given ID that was registered using RegisterUIUpdateHandler.
EDA_BASE_FRAME(wxWindow *aParent, FRAME_T aFrameType, const wxString &aTitle, const wxPoint &aPos, const wxSize &aSize, long aStyle, const wxString &aFrameName, KIWAY *aKiway)
void FinishAUIInitialization()
virtual const SEARCH_STACK & sys_search()
Return a SEARCH_STACK pertaining to entire program.
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
struct WINDOW_STATE window
void AddStandardHelpMenu(wxMenuBar *aMenuBar)
Adds the standard KiCad help menu to the menubar.
void SetCallback(std::function< void(void)> aCallback)
Provide a callback to be called when the infobar is dismissed (either by user action or timer).
const wxString & GetHelpFileName() const
Return just the basename portion of the current help file.
virtual WINDOW_SETTINGS * GetWindowSettings(APP_SETTINGS_BASE *aCfg)
Return a pointer to the window settings for this frame.
virtual PICKED_ITEMS_LIST * PopCommandFromUndoList()
Return the last command to undo and remove it from list, nothing is deleted.
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
wxLogTrace helper definitions.
void OnKicadAbout(wxCommandEvent &event)
A holder to handle information on schematic or board items.
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.
Specialization of the wxAuiPaneInfo class for KiCad panels.
Stores the window positioning/state.
UNDO_REDO_CONTAINER m_redoList
void RemoveAllButtons()
Remove all the buttons that have been added by the user.
virtual bool canCloseWindow(wxCloseEvent &aCloseEvent)
wxDEFINE_EVENT(UNITS_CHANGED, wxCommandEvent)
void ClearFileHistory(FILE_HISTORY *aFileHistory=nullptr)
Removes all files from the file history.
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
virtual bool IsContentModified() const
Get if the contents of the frame have been modified since the last save.
const PROJECT_FILE_STATE * GetFileState(const wxString &aFileName)
virtual void OnMove(wxMoveEvent &aEvent)
static wxString GetAutoSaveFilePrefix()
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Notification event that some of the common (suite-wide) settings have changed.
static wxString GetDefaultUserProjectsPath()
Gets the default path we point users to create projects.
A modified version of the wxInfoBar class that allows us to:
void SetMaxFiles(size_t aMaxFiles)
Update the number of files that will be contained inside the file history.
void OnMaximize(wxMaximizeEvent &aEvent)
void SetAutoSaveInterval(int aInterval)
virtual void ThemeChanged()
Process light/dark theme change.
wxSize GetWindowSize()
Get the undecorated window size that can be used for restoring the window size.
bool IsWritable(const wxFileName &aFileName, bool aVerbose=true)
Checks if aFileName can be written.
wxString ConfigBaseName() override
Get the configuration base name.
#define KICAD_MANAGER_FRAME_NAME
Functors that can be used to figure out how the action controls should be displayed in the UI and if ...
The base frame for deriving all KiCad main window classes.
void LoadWindowSettings(const WINDOW_SETTINGS *aCfg)
Load window settings from the given settings object.
void commonInit(FRAME_T aFrameType)
Collect common initialization functions used in all CTORs.
const wxChar *const kicadTraceKeyEvent
Flag to enable wxKeyEvent debug tracing.
virtual wxString help_name()
APP_SETTINGS_BASE * KifaceSettings() const
void OnPreferences(wxCommandEvent &event)
Displays the preferences and settings of all opened editors paged dialog.
virtual void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged)
Call CommonSettingsChanged() on all KIWAY_PLAYERs.
static const wxSize minSize(FRAME_T aFrameType)
WX_INFOBAR * GetInfoBar()
ACTION_CONDITIONS & Check(const SELECTION_CONDITION &aCondition)
void SetUserUnits(EDA_UNITS aUnits)
#define QUALIFIED_VIEWER3D_FRAMENAME(parent)
virtual void InstallPreferences(PAGED_DIALOG *, PANEL_HOTKEYS_EDITOR *)
Allow a frame to load its preference panels (if any) into the preferences dialog.
static TOOL_ACTION getInvolved
static TOOL_ACTION gettingStarted
virtual void ClearUndoRedoList()
Clear the undo and redo list using ClearUndoORRedoList()
virtual wxString GetCurrentFileName() const
Get the full filename + path of the currently opened file in the frame.
bool ProcessEvent(wxEvent &aEvent) override
Override the default process event handler to implement the auto save feature.
FILE_HISTORY * m_fileHistory
void OnMenuEvent(wxMenuEvent &event)
The TOOL_DISPATCHER needs these to work around some issues in wxWidgets where the menu events aren't ...
virtual void LoadSettings(APP_SETTINGS_BASE *aCfg)
Load common frame parameters from a configuration file.
void AddCloseButton(const wxString &aTooltip=_("Hide this message."))
Add the default close button to the infobar on the right side.
virtual void ReCreateMenuBar()
Recreates the menu bar.
BITMAP_STORE * GetBitmapStore()