diff --git a/kicad/kicad.cpp b/kicad/kicad.cpp index 361960d32c..60690d6af2 100644 --- a/kicad/kicad.cpp +++ b/kicad/kicad.cpp @@ -1,10 +1,7 @@ -/*****************************************************************************/ - /** * @file kicad.cpp * @brief Main kicad library manager file */ -/*****************************************************************************/ #include "fctsys.h" #include "appl_wxstruct.h" @@ -24,7 +21,7 @@ #include "build_version.h" -const wxString g_KicadPrjFilenameExtension(wxT(".pro") ); +const wxString g_KicadPrjFilenameExtension( wxT( ".pro" ) ); /* Import functions */ char* GetFileName( char* FullPathName ); @@ -42,17 +39,21 @@ IMPLEMENT_APP( WinEDA_App ) /* MacOSX: Needed for file association * http://wiki.wxwidgets.org/WxMac-specific_topics */ -void WinEDA_App::MacOpenFile(const wxString &fileName) { - KICAD_MANAGER_FRAME * frame = ((KICAD_MANAGER_FRAME*)GetTopWindow()); - wxFileName fn = fileName; +void WinEDA_App::MacOpenFile( const wxString &fileName ) +{ + KICAD_MANAGER_FRAME* frame = (KICAD_MANAGER_FRAME*) GetTopWindow(); + wxFileName fn = fileName; frame->m_ProjectFileName = fn; if( m_fileHistory.GetCount() ) { frame->m_ProjectFileName = m_fileHistory.GetHistoryFile( 0 ); + if( !frame->m_ProjectFileName.FileExists() ) + { m_fileHistory.RemoveFileFromHistory( 0 ); + } else { wxCommandEvent cmd( 0, wxID_FILE1 ); @@ -60,20 +61,23 @@ void WinEDA_App::MacOpenFile(const wxString &fileName) { } } - frame->SetTitle( GetTitle() + wxT( " " ) + GetBuildVersion() + - wxT( " " ) + frame->m_ProjectFileName.GetFullPath() ); + wxString title = GetTitle() + wxT( " " ) + GetBuildVersion() + + wxT( " " ) + frame->m_ProjectFileName.GetFullPath(); + + if( !fn.IsDirWritable() ) + title += _( " [Read Only]" ); + + frame->SetTitle( title ); frame->m_LeftWin->ReCreateTreePrj(); frame->PrintMsg( _( "Working dir: " ) + frame->m_ProjectFileName.GetPath() + - _( "\nProject: " ) + frame->m_ProjectFileName.GetFullName() + - wxT( "\n" ) ); + _( "\nProject: " ) + frame->m_ProjectFileName.GetFullName() + + wxT( "\n" ) ); } -/*****************************************************************************/ bool WinEDA_App::OnInit() -/*****************************************************************************/ { KICAD_MANAGER_FRAME* frame; @@ -81,21 +85,26 @@ bool WinEDA_App::OnInit() // read current setup and reopen last directory if no filename to open in command line bool reopenLastUsedDirectory = argc == 1; - GetSettings(reopenLastUsedDirectory); + GetSettings( reopenLastUsedDirectory ); /* Make nameless project translatable */ wxFileName namelessProject( wxGetCwd(), NAMELESS_PROJECT, ProjectFileExtension ); frame = new KICAD_MANAGER_FRAME( NULL, wxT( "KiCad" ), - wxPoint( 30, 20 ), wxSize( 600, 400 ) ); + wxPoint( 30, 20 ), wxSize( 600, 400 ) ); if( argc > 1 ) + { frame->m_ProjectFileName = argv[1]; + } else if( m_fileHistory.GetCount() ) { frame->m_ProjectFileName = m_fileHistory.GetHistoryFile( 0 ); + if( !frame->m_ProjectFileName.FileExists() ) + { m_fileHistory.RemoveFileFromHistory( 0 ); + } else { wxCommandEvent cmd( 0, wxID_FILE1 ); @@ -110,8 +119,13 @@ bool WinEDA_App::OnInit() frame->OnLoadProject( cmd ); } - frame->SetTitle( GetTitle() + wxT( " " ) + GetBuildVersion() + - wxT( " " ) + frame->m_ProjectFileName.GetFullPath() ); + wxString title = GetTitle() + wxT( " " ) + GetBuildVersion() + + wxT( " " ) + frame->m_ProjectFileName.GetFullPath(); + + if( !namelessProject.IsDirWritable() ) + title += _( " [Read Only]" ); + + frame->SetTitle( title ); frame->ReCreateMenuBar(); frame->RecreateBaseHToolbar(); @@ -137,8 +151,8 @@ bool WinEDA_App::OnInit() } #endif /* USE_SPLASH_IMAGE */ - frame->Show( TRUE ); + frame->Show( true ); frame->Raise(); - return TRUE; + return true; } diff --git a/kicad/kicad.h b/kicad/kicad.h index 4c2af3d1a2..1f7503226a 100644 --- a/kicad/kicad.h +++ b/kicad/kicad.h @@ -74,19 +74,27 @@ private: public: KICAD_MANAGER_FRAME( wxWindow* parent, const wxString& title, - const wxPoint& pos, const wxSize& size ); + const wxPoint& pos, const wxSize& size ); ~KICAD_MANAGER_FRAME(); - /** - * Function CreateCommandToolbar - * Create the main buttons (fast launch buttons) - */ void OnCloseWindow( wxCloseEvent& Event ); void OnSize( wxSizeEvent& event ); void OnSashDrag( wxSashEvent& event ); + + /** + * Function OnLoadProject + * loads an exiting or creates a new project (.pro) file. + */ void OnLoadProject( wxCommandEvent& event ); + + /** + * Function OnSaveProject + * is the command event hendler to Save the project (.pro) file containing the top level + * configuration parameters. + */ void OnSaveProject( wxCommandEvent& event ); + void OnArchiveFiles( wxCommandEvent& event ); void OnUnarchiveFiles( wxCommandEvent& event ); void OnRunPcbNew( wxCommandEvent& event ); @@ -105,7 +113,15 @@ public: void Process_Preferences( wxCommandEvent& event ); void ReCreateMenuBar(); void RecreateBaseHToolbar(); - void PrintMsg( const wxString& text ); + + /** + * Function PrintMsg + * displays \a aText in the text panel. + * + * @param aText The text to display. + */ + void PrintMsg( const wxString& aText ); + void ClearMsg(); void SetLanguage( wxCommandEvent& event ); void OnRefresh( wxCommandEvent& event ); @@ -117,7 +133,22 @@ public: void CreateNewProject( const wxString PrjFullFileName ); + /** + * Function LoadSettings + * loads the Kicad main frame specific configuration settings. + * + * Don't forget to call this base method from any derived classes or the + * settings will not get loaded. + */ void LoadSettings(); + + /** + * Function SaveSettings + * saves the Kicad main frame specific configuration settings. + * + * Don't forget to call this base method from any derived classes or the + * settings will not get saved. + */ void SaveSettings(); DECLARE_EVENT_TABLE() @@ -160,7 +191,12 @@ public: void OnSize( wxSizeEvent& event ); private: + /** + * Function CreateCommandToolbar + * creates the main tool bar buttons (fast launch buttons) + */ void CreateCommandToolbar( void ); + wxBitmapButton* AddBitmapButton( wxWindowID aId, const wxBitmap & aBitmap ); DECLARE_EVENT_TABLE() diff --git a/kicad/mainframe.cpp b/kicad/mainframe.cpp index 429eca1535..c176f301bb 100644 --- a/kicad/mainframe.cpp +++ b/kicad/mainframe.cpp @@ -1,6 +1,6 @@ -/***********************************************************/ -/* mdiframe.cpp - KICAD_MANAGER_FRAME is the kicad main frame */ -/***********************************************************/ +/***************************************************************/ +/* mainframe.cpp - KICAD_MANAGER_FRAME is the kicad main frame */ +/***************************************************************/ #ifdef __GNUG__ #pragma implementation @@ -22,9 +22,9 @@ static const wxString TreeFrameWidthEntry( wxT( "LeftWinWidth" ) ); KICAD_MANAGER_FRAME::KICAD_MANAGER_FRAME( wxWindow* parent, - const wxString& title, - const wxPoint& pos, - const wxSize& size ) : + const wxString& title, + const wxPoint& pos, + const wxSize& size ) : EDA_BASE_FRAME( parent, KICAD_MAIN_FRAME, title, pos, size ) { wxString msg; @@ -105,17 +105,12 @@ KICAD_MANAGER_FRAME::~KICAD_MANAGER_FRAME() } -/* - * Put text in the dialog frame - */ -void KICAD_MANAGER_FRAME::PrintMsg( const wxString& text ) +void KICAD_MANAGER_FRAME::PrintMsg( const wxString& aText ) { - m_RightWin->m_DialogWin->AppendText( text ); + m_RightWin->m_DialogWin->AppendText( aText ); } -/* Resize windows when dragging window borders - */ void KICAD_MANAGER_FRAME::OnSashDrag( wxSashEvent& event ) { event.Skip(); @@ -148,7 +143,7 @@ void KICAD_MANAGER_FRAME::OnCloseWindow( wxCloseEvent& Event ) m_FrameSize.y = py; } - Event.SetCanVeto( TRUE ); + Event.SetCanVeto( true ); SaveSettings(); @@ -156,7 +151,8 @@ void KICAD_MANAGER_FRAME::OnCloseWindow( wxCloseEvent& Event ) if( wxGetApp().m_HtmlCtrl ) { if( wxGetApp().m_HtmlCtrl->GetFrame() ) // returns NULL if no help frame active - wxGetApp().m_HtmlCtrl->GetFrame()->Close( TRUE ); + wxGetApp().m_HtmlCtrl->GetFrame()->Close( true ); + wxGetApp().m_HtmlCtrl = NULL; } @@ -171,16 +167,19 @@ void KICAD_MANAGER_FRAME::OnExit( wxCommandEvent& event ) Close( true ); } + void KICAD_MANAGER_FRAME::OnRunBitmapConverter( wxCommandEvent& event ) { ExecuteFile( this, BITMAPCONVERTER_EXE, wxEmptyString ); } + void KICAD_MANAGER_FRAME::OnRunPcbCalculator( wxCommandEvent& event ) { ExecuteFile( this, PCB_CALCULATOR_EXE, wxEmptyString ); } + void KICAD_MANAGER_FRAME::OnRunPcbNew( wxCommandEvent& event ) { wxFileName fn( m_ProjectFileName ); @@ -211,8 +210,8 @@ void KICAD_MANAGER_FRAME::OnRunEeschema( wxCommandEvent& event ) void KICAD_MANAGER_FRAME::OnRunGerbview( wxCommandEvent& event ) { wxFileName fn( m_ProjectFileName ); - wxString path = wxT("\""); - path += fn.GetPath( wxPATH_GET_SEPARATOR | wxPATH_GET_VOLUME ) + wxT("\""); + wxString path = wxT( "\"" ); + path += fn.GetPath( wxPATH_GET_SEPARATOR | wxPATH_GET_VOLUME ) + wxT( "\"" ); ExecuteFile( this, GERBVIEW_EXE, path ); } @@ -243,8 +242,9 @@ void KICAD_MANAGER_FRAME::OnOpenFileInTextEditor( wxCommandEvent& event ) if( dlg.ShowModal() == wxID_CANCEL ) return; - wxString filename = wxT("\""); - filename += dlg.GetPath() + wxT("\""); + wxString filename = wxT( "\"" ); + filename += dlg.GetPath() + wxT( "\"" ); + if( !dlg.GetPath().IsEmpty() && !wxGetApp().GetEditorName().IsEmpty() ) ExecuteFile( this, wxGetApp().GetEditorName(), filename ); } @@ -262,12 +262,6 @@ void KICAD_MANAGER_FRAME::ClearMsg() } -/** - * Load Kicad main frame specific configuration settings. - * - * Don't forget to call this base method from any derived classes or the - * settings will not get loaded. - */ void KICAD_MANAGER_FRAME::LoadSettings() { wxASSERT( wxGetApp().m_EDA_Config != NULL ); @@ -279,12 +273,6 @@ void KICAD_MANAGER_FRAME::LoadSettings() } -/** - * Save Kicad main frame specific configuration settings. - * - * Don't forget to call this base method from any derived classes or the - * settings will not get saved. - */ void KICAD_MANAGER_FRAME::SaveSettings() { wxASSERT( wxGetApp().m_EDA_Config != NULL ); diff --git a/kicad/prjconfig.cpp b/kicad/prjconfig.cpp index b5df8a7a91..a4d281356f 100644 --- a/kicad/prjconfig.cpp +++ b/kicad/prjconfig.cpp @@ -27,18 +27,19 @@ void KICAD_MANAGER_FRAME::CreateNewProject( const wxString PrjFullFileName ) wxFileName newProjectName = PrjFullFileName; ClearMsg(); + /* Init default config filename */ - filename = wxGetApp().FindLibraryPath( wxT( "kicad" ) + g_KicadPrjFilenameExtension); + filename = wxGetApp().FindLibraryPath( wxT( "kicad" ) + g_KicadPrjFilenameExtension ); /* Check if file kicad.pro exist in template directory */ if( wxFileName::FileExists( filename ) ) { - wxCopyFile( filename, PrjFullFileName ); + wxCopyFile( filename, PrjFullFileName ); } else { - DisplayInfoMessage( NULL, _( "Project template file not found " ) ); - return; + DisplayInfoMessage( NULL, _( "Project template file not found. " ) ); + return; } /* Init schematic filename */ @@ -46,8 +47,7 @@ void KICAD_MANAGER_FRAME::CreateNewProject( const wxString PrjFullFileName ) SchematicFileExtension ).GetFullName(); /* Init pcb board filename */ - m_BoardFileName = wxFileName( newProjectName.GetName(), - PcbFileExtension ).GetFullName(); + m_BoardFileName = wxFileName( newProjectName.GetName(), PcbFileExtension ).GetFullName(); /* Init project filename */ m_ProjectFileName = newProjectName; @@ -56,15 +56,14 @@ void KICAD_MANAGER_FRAME::CreateNewProject( const wxString PrjFullFileName ) wxGetApp().WriteProjectConfig( PrjFullFileName, GeneralGroupName, NULL ); } -/** - * Loading a new project - */ + void KICAD_MANAGER_FRAME::OnLoadProject( wxCommandEvent& event ) { int style; wxString title; ClearMsg(); + if( event.GetId() != wxID_ANY ) { if( event.GetId() == ID_NEW_PROJECT ) @@ -78,8 +77,7 @@ void KICAD_MANAGER_FRAME::OnLoadProject( wxCommandEvent& event ) style = wxFD_OPEN | wxFD_FILE_MUST_EXIST; } - wxFileDialog dlg( this, title, wxGetCwd(), wxEmptyString, - ProjectFileWildcard, style ); + wxFileDialog dlg( this, title, wxGetCwd(), wxEmptyString, ProjectFileWildcard, style ); if( dlg.ShowModal() == wxID_CANCEL ) return; @@ -90,24 +88,26 @@ void KICAD_MANAGER_FRAME::OnLoadProject( wxCommandEvent& event ) { // Ensure project filename extension is .pro wxString fullname = m_ProjectFileName.GetFullPath(); + if ( !fullname.EndsWith( g_KicadPrjFilenameExtension ) ) { fullname += g_KicadPrjFilenameExtension; m_ProjectFileName.SetFullName( fullname ); } + CreateNewProject( m_ProjectFileName.GetFullPath() ); } } - wxLogDebug( wxT( "Loading Kicad project file: " ) + - m_ProjectFileName.GetFullPath() ); + wxLogDebug( wxT( "Loading Kicad project file: " ) + m_ProjectFileName.GetFullPath() ); /* Check if project file exists and if it is not noname.pro */ wxString filename = m_ProjectFileName.GetFullName(); wxString nameless_prj = NAMELESS_PROJECT; nameless_prj += g_KicadPrjFilenameExtension; - if( !m_ProjectFileName.FileExists() && !filename.IsSameAs(nameless_prj)) + + if( !m_ProjectFileName.FileExists() && !filename.IsSameAs( nameless_prj ) ) { DisplayError( this, _( "Kicad project file <" ) + m_ProjectFileName.GetFullPath() + _( "> not found" ) ); @@ -118,8 +118,13 @@ void KICAD_MANAGER_FRAME::OnLoadProject( wxCommandEvent& event ) wxGetApp().ReadProjectConfig( m_ProjectFileName.GetFullPath(), GeneralGroupName, NULL, false ); - SetTitle( wxGetApp().GetTitle() + wxT( " " ) + GetBuildVersion() + - wxT( " " ) + m_ProjectFileName.GetFullPath() ); + title = wxGetApp().GetTitle() + wxT( " " ) + GetBuildVersion() + + wxT( " " ) + m_ProjectFileName.GetFullPath(); + + if( !m_ProjectFileName.IsDirWritable() ) + title += _( " [Read Only]" ); + + SetTitle( title ); UpdateFileHistory( m_ProjectFileName.GetFullPath() ); m_LeftWin->ReCreateTreePrj(); @@ -130,23 +135,10 @@ void KICAD_MANAGER_FRAME::OnLoadProject( wxCommandEvent& event ) } -/** - * Save the project top level configuration parameters. - */ void KICAD_MANAGER_FRAME::OnSaveProject( wxCommandEvent& event ) { - wxString fn; - - wxFileDialog dlg( this, _( "Save Project File" ), wxGetCwd(), - m_ProjectFileName.GetFullName(), ProjectFileWildcard, - wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); - - if( dlg.ShowModal() == wxID_CANCEL ) + if( !IsWritable( m_ProjectFileName ) ) return; - m_ProjectFileName = dlg.GetPath(); - - wxGetApp().WriteProjectConfig( m_ProjectFileName.GetFullPath(), - GeneralGroupName, NULL ); + wxGetApp().WriteProjectConfig( m_ProjectFileName.GetFullPath(), GeneralGroupName, NULL ); } -