diff --git a/common/common.cpp b/common/common.cpp index 9afbf6e90d..53c13d8b84 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -12,7 +12,7 @@ #include "common.h" #include "macros.h" #include "build_version.h" - +#include /*****************************/ wxString GetBuildVersion() @@ -30,7 +30,9 @@ Ki_PageDescr::Ki_PageDescr( const wxSize& size, const wxPoint& offset, const wxS /*********************************************************************************************/ { // All sizes are in 1/1000 inch - m_Size = size; m_Offset = offset, m_Name = name; + m_Size = size; + m_Offset = offset; + m_Name = name; // Adjust the default value for margins to 400 mils (0,4 inch or 10 mm) m_LeftMargin = m_RightMargin = m_TopMargin = m_BottomMargin = 400; @@ -205,6 +207,7 @@ wxString GenDate() wxT( "jan" ), wxT( "feb" ), wxT( "mar" ), wxT( "apr" ), wxT( "may" ), wxT( "jun" ), wxT( "jul" ), wxT( "aug" ), wxT( "sep" ), wxT( "oct" ), wxT( "nov" ), wxT( "dec" ) }; + time_t buftime; struct tm* Date; wxString string_date; @@ -241,6 +244,14 @@ void* MyMalloc( size_t nb_octets ) } +bool ProcessExecute( const wxString& aCommandLine, int aFlags ) +{ + wxProcess* process = wxProcess::Open( aCommandLine, aFlags ); + + return process != NULL; +} + + /************************************/ void* MyZMalloc( size_t nb_octets ) /************************************/ diff --git a/common/eda_doc.cpp b/common/eda_doc.cpp index b1b737f770..a02ddfcef9 100644 --- a/common/eda_doc.cpp +++ b/common/eda_doc.cpp @@ -1,6 +1,6 @@ - /***************/ - /* eda_doc.cpp */ - /***************/ +/***************/ +/* eda_doc.cpp */ +/***************/ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -24,239 +24,258 @@ /*****************************************/ void WinEDA_App::ReadPdfBrowserInfos() /*****************************************/ + /* Read from Common config the Pdf browser choice -*/ + */ { - if ( m_EDA_CommonConfig ) - { - m_PdfBrowserIsDefault = m_EDA_CommonConfig->Read(wxT("PdfBrowserIsDefault"), TRUE); - m_PdfBrowser = m_EDA_CommonConfig->Read(wxT("PdfBrowserName"), wxEmptyString); - } - if ( m_PdfBrowser.IsEmpty() ) m_PdfBrowserIsDefault = TRUE; + if( m_EDA_CommonConfig ) + { + m_PdfBrowserIsDefault = m_EDA_CommonConfig->Read( wxT( "PdfBrowserIsDefault" ), TRUE ); + m_PdfBrowser = m_EDA_CommonConfig->Read( wxT( "PdfBrowserName" ), wxEmptyString ); + } + if( m_PdfBrowser.IsEmpty() ) + m_PdfBrowserIsDefault = TRUE; } + /*****************************************/ void WinEDA_App::WritePdfBrowserInfos() /*****************************************/ + /* Write into Common config the Pdf browser choice -*/ + */ { - if ( ! m_EDA_CommonConfig ) return; - if ( m_PdfBrowser.IsEmpty() ) m_PdfBrowserIsDefault = TRUE; - m_EDA_CommonConfig->Write(wxT("PdfBrowserIsDefault"), m_PdfBrowserIsDefault); - m_EDA_CommonConfig->Write(wxT("PdfBrowserName"), m_PdfBrowser); + if( !m_EDA_CommonConfig ) + return; + if( m_PdfBrowser.IsEmpty() ) + m_PdfBrowserIsDefault = TRUE; + m_EDA_CommonConfig->Write( wxT( "PdfBrowserIsDefault" ), m_PdfBrowserIsDefault ); + m_EDA_CommonConfig->Write( wxT( "PdfBrowserName" ), m_PdfBrowser ); } // Mime type extensions -static wxMimeTypesManager * mimeDatabase; +static wxMimeTypesManager* mimeDatabase; static const wxFileTypeInfo EDAfallbacks[] = - { - wxFileTypeInfo(wxT("text/pdf"), - wxT("xpdf %s"), - wxT("xpdf -p %s"), - wxT("pdf document (from Kicad)"), - wxT("pdf"), wxT("PDF"), NULL), +{ + wxFileTypeInfo( wxT( "text/pdf" ), + wxT( "xpdf %s" ), + wxT( "xpdf -p %s" ), + wxT( "pdf document (from Kicad)" ), + wxT( "pdf" ), wxT( "PDF" ), NULL ), - wxFileTypeInfo(wxT("text/html"), - wxT("wxhtml %s"), - wxT("wxhtml %s"), - wxT("html document (from Kicad)"), - wxT("htm"), wxT("html"), NULL), + wxFileTypeInfo( wxT( "text/html" ), + wxT( "wxhtml %s" ), + wxT( "wxhtml %s" ), + wxT( "html document (from Kicad)" ), + wxT( "htm" ), wxT( "html" ), NULL ), - wxFileTypeInfo(wxT("application/sch"), - wxT("eeschema %s"), - wxT("eeschema -p %s"), - wxT("sch document (from Kicad)"), - wxT("sch"), wxT("SCH"), NULL), - // must terminate the table with this! - wxFileTypeInfo() + wxFileTypeInfo( wxT( "application/sch" ), + wxT( "eeschema %s" ), + wxT( "eeschema -p %s" ), + wxT( "sch document (from Kicad)" ), + wxT( "sch" ), wxT( "SCH" ), NULL ), + + // must terminate the table with this! + wxFileTypeInfo() }; /********************************************************************/ -bool GetAssociatedDocument(wxFrame * frame, const wxString & LibPath, - const wxString & DocName) +bool GetAssociatedDocument( wxFrame* frame, const wxString& LibPath, + const wxString& DocName ) /*********************************************************************/ + /* Launch the viewer for the doc file DocName (mime type) - LibPath is the doc file search path: - (kicad/library) - DocName is the short filename with ext. Wildcarts are allowed - Seach file is made in LibPath/doc/DocName - - if DocName is starting by http: or ftp: or www. the default internet browser is launched -*/ + * LibPath is the doc file search path: + * (kicad/library) + * DocName is the short filename with ext. Wildcarts are allowed + * Seach file is made in LibPath/doc/DocName + * + * if DocName is starting by http: or ftp: or www. the default internet browser is launched + */ { -wxString docpath, fullfilename; -wxString Line; -wxString command; -bool success = FALSE; + wxString docpath, fullfilename; + wxString Line; + wxString command; + bool success = FALSE; - // Is an internet url - wxString url_header[3] = {wxT("http:"), wxT("ftp:"),wxT("www.") }; - for ( int ii = 0; ii < 3; ii ++ ) - { - if ( DocName.First(url_header[ii]) == 0 ) //. seems an internet url - { - wxLaunchDefaultBrowser(DocName); - return TRUE; - } - } + // Is an internet url + static const wxString url_header[3] = { wxT( "http:" ), wxT( "ftp:" ), wxT( "www." ) }; - /* Compute the full file name */ - if ( wxIsAbsolutePath(DocName) ) fullfilename = DocName; - else - { - docpath = LibPath + wxT("doc/"); - fullfilename = docpath + DocName; - } + for( int ii = 0; ii < 3; ii++ ) + { + if( DocName.First( url_header[ii] ) == 0 ) //. seems an internet url + { + wxLaunchDefaultBrowser( DocName ); + return TRUE; + } + } + + /* Compute the full file name */ + if( wxIsAbsolutePath( DocName ) ) + fullfilename = DocName; + else + { + docpath = LibPath + wxT( "doc/" ); + fullfilename = docpath + DocName; + } #ifdef __WINDOWS__ - fullfilename.Replace(UNIX_STRING_DIR_SEP, WIN_STRING_DIR_SEP); + fullfilename.Replace( UNIX_STRING_DIR_SEP, WIN_STRING_DIR_SEP ); #else - fullfilename.Replace(WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP); + fullfilename.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP ); #endif - wxString mask(wxT("*")), extension; + wxString mask( wxT( "*" ) ), extension; + #ifdef __WINDOWS__ - mask += wxT(".*"); - extension = wxT(".*"); + mask += wxT( ".*" ); + extension = wxT( ".*" ); #endif - if ( wxIsWild(fullfilename) ) - { - fullfilename = - EDA_FileSelector(_("Doc Files"), /* Titre de la fenetre */ - wxPathOnly(fullfilename), /* Chemin par defaut */ - fullfilename, /* nom fichier par defaut */ - extension, /* extension par defaut */ - mask, /* Masque d'affichage */ - frame, /* parent frame */ - wxFD_OPEN, /* wxSAVE, wxFD_OPEN ..*/ - TRUE, /* true = ne change pas le repertoire courant */ - wxPoint(-1,-1) - ); - if ( fullfilename.IsEmpty() ) return FALSE; - } + if( wxIsWild( fullfilename ) ) + { + fullfilename = + EDA_FileSelector( _( "Doc Files" ), /* Titre de la fenetre */ + wxPathOnly( fullfilename ), /* Chemin par defaut */ + fullfilename, /* nom fichier par defaut */ + extension, /* extension par defaut */ + mask, /* Masque d'affichage */ + frame, /* parent frame */ + wxFD_OPEN, /* wxSAVE, wxFD_OPEN ..*/ + TRUE, /* true = ne change pas le repertoire courant */ + wxPoint( -1, -1 ) + ); + if( fullfilename.IsEmpty() ) + return FALSE; + } - if ( ! wxFileExists(fullfilename) ) - { - Line = _("Doc File ") + fullfilename + _(" not found"); - DisplayError(frame, Line); - return FALSE; - } - - /* Try to launch some browser (usefull under linux) */ - g_EDA_Appl->ReadPdfBrowserInfos(); - if ( g_EDA_Appl->m_PdfBrowserIsDefault ) - { - wxFileType * filetype; - wxFileName CurrentFileName(fullfilename); - wxString ext, type; - ext = CurrentFileName.GetExt(); - filetype = wxTheMimeTypesManager->GetFileTypeFromExtension(ext); - - if ( ! filetype ) // 2ieme tentative - { - mimeDatabase = new wxMimeTypesManager; - mimeDatabase->AddFallbacks(EDAfallbacks); - filetype = mimeDatabase->GetFileTypeFromExtension(ext); - delete mimeDatabase; - mimeDatabase = NULL; - } - - if ( filetype ) - { - wxFileType::MessageParameters params(fullfilename, type); - success = filetype->GetOpenCommand( &command, params); - delete filetype; - if ( success ) wxExecute(command); - } - - if ( ! success) - { - #ifdef __LINUX__ - if ( ext == wxT("pdf") ) - { - success = TRUE; command.Empty(); - if ( wxFileExists( wxT("/usr/bin/xpdf")) ) - command = wxT("xpdf ") + fullfilename; - else if ( wxFileExists( wxT("/usr/bin/konqueror") )) - command = wxT("konqueror ") + fullfilename; - else if ( wxFileExists( wxT("/usr/bin/gpdf") )) - command = wxT("gpdf ") + fullfilename; - if ( command.IsEmpty() ) // not started - { - DisplayError(frame, - _(" Cannot find the PDF viewer (xpdf, gpdf or konqueror) in /usr/bin/") ); - success = FALSE; - } - else wxExecute(command); - } - else - #endif - { - Line.Printf( _("Unknown MIME type for Doc File [%s] (%s)"), - fullfilename.GetData(), ext.GetData()); - DisplayError(frame, Line); - } - } - } - - else - { - command = g_EDA_Appl->m_PdfBrowser; - if ( wxFileExists(command) ) - { - success = TRUE; - AddDelimiterString(fullfilename); - command += wxT(" ") + fullfilename; - wxExecute(command); - } - - else - { - Line.Printf( _("Cannot find Pdf viewer %s"), command.GetData()); - DisplayError(frame, Line); - } - } + if( !wxFileExists( fullfilename ) ) + { + Line = _( "Doc File " ) + fullfilename + _( " not found" ); + DisplayError( frame, Line ); + return FALSE; + } - return success; + /* Try to launch some browser (usefull under linux) */ + g_EDA_Appl->ReadPdfBrowserInfos(); + if( g_EDA_Appl->m_PdfBrowserIsDefault ) + { + wxFileType* filetype; + wxFileName CurrentFileName( fullfilename ); + + wxString ext, type; + ext = CurrentFileName.GetExt(); + filetype = wxTheMimeTypesManager->GetFileTypeFromExtension( ext ); + + if( !filetype ) // 2ieme tentative + { + mimeDatabase = new wxMimeTypesManager; + mimeDatabase->AddFallbacks( EDAfallbacks ); + filetype = mimeDatabase->GetFileTypeFromExtension( ext ); + delete mimeDatabase; + mimeDatabase = NULL; + } + + if( filetype ) + { + wxFileType::MessageParameters params( fullfilename, type ); + + success = filetype->GetOpenCommand( &command, params ); + delete filetype; + if( success ) + ProcessExecute( command ); + } + + if( !success ) + { +#ifdef __LINUX__ + if( ext == wxT( "pdf" ) ) + { + success = TRUE; command.Empty(); + if( wxFileExists( wxT( "/usr/bin/kpdf" ) ) ) + command = wxT( "xpdf " ) + fullfilename; + else if( wxFileExists( wxT( "/usr/bin/konqueror" ) ) ) + command = wxT( "konqueror " ) + fullfilename; + else if( wxFileExists( wxT( "/usr/bin/gpdf" ) ) ) + command = wxT( "gpdf " ) + fullfilename; + if( command.IsEmpty() ) // not started + { + DisplayError( frame, + _( " Cannot find the PDF viewer (kpdf, gpdf or konqueror) in /usr/bin/" ) ); + success = FALSE; + } + else + ProcessExecute( command ); + } + else +#endif + { + Line.Printf( _( "Unknown MIME type for Doc File [%s] (%s)" ), + fullfilename.GetData(), ext.GetData() ); + DisplayError( frame, Line ); + } + } + } + else + { + command = g_EDA_Appl->m_PdfBrowser; + if( wxFileExists( command ) ) + { + success = TRUE; + AddDelimiterString( fullfilename ); + command += wxT( " " ) + fullfilename; + ProcessExecute( command ); + } + else + { + Line.Printf( _( "Cannot find Pdf viewer %s" ), command.GetData() ); + DisplayError( frame, Line ); + } + } + + return success; } + /******************************************************************/ -int KeyWordOk(const wxString & KeyList, const wxString & Database ) +int KeyWordOk( const wxString& KeyList, const wxString& Database ) /******************************************************************/ + /* Recherche si dans le texte Database on retrouve tous les mots - cles donnes dans KeyList ( KeyList = suite de mots cles - separes par des espaces - Retourne: - 0 si aucun mot cle trouvé - 1 si mot cle trouvé -*/ + * cles donnes dans KeyList ( KeyList = suite de mots cles + * separes par des espaces + * Retourne: + * 0 si aucun mot cle trouvé + * 1 si mot cle trouvé + */ { -wxString KeysCopy, DataList; - - if( KeyList.IsEmpty() ) return(0); + wxString KeysCopy, DataList; - KeysCopy = KeyList; KeysCopy.MakeUpper(); - DataList = Database; DataList.MakeUpper(); + if( KeyList.IsEmpty() ) + return 0; -wxStringTokenizer Token(KeysCopy, wxT(" \n\r")); - while ( Token.HasMoreTokens() ) - { - wxString Key = Token.GetNextToken(); - // Search Key in Datalist: - wxStringTokenizer Data(DataList, wxT(" \n\r")); - while ( Data.HasMoreTokens() ) - { - wxString word = Data.GetNextToken(); - if ( word == Key ) return 1; // Key found ! - } - } + KeysCopy = KeyList; KeysCopy.MakeUpper(); + DataList = Database; DataList.MakeUpper(); - // keyword not found - return(0); + wxStringTokenizer Token( KeysCopy, wxT( " \n\r" ) ); + + while( Token.HasMoreTokens() ) + { + wxString Key = Token.GetNextToken(); + + // Search Key in Datalist: + wxStringTokenizer Data( DataList, wxT( " \n\r" ) ); + + while( Data.HasMoreTokens() ) + { + wxString word = Data.GetNextToken(); + if( word == Key ) + return 1; // Key found ! + } + } + + // keyword not found + return 0; } - - diff --git a/common/gestfich.cpp b/common/gestfich.cpp index 881c0569dc..a5c3420a1b 100644 --- a/common/gestfich.cpp +++ b/common/gestfich.cpp @@ -533,7 +533,7 @@ int ExecuteFile( wxWindow* frame, const wxString& ExecFile, const wxString& para { if( !param.IsEmpty() ) FullFileName += wxT( " " ) + param; - wxExecute( FullFileName ); + ProcessExecute( FullFileName ); return 0; } @@ -748,7 +748,7 @@ void OpenPDF( const wxString& file ) } if( !command.IsEmpty() ) - wxExecute( command ); + ProcessExecute( command ); } @@ -771,5 +771,5 @@ void OpenFile( const wxString& file ) delete filetype; if( success && !command.IsEmpty() ) - wxExecute( command ); + ProcessExecute( command ); } diff --git a/eeschema/netform.cpp b/eeschema/netform.cpp index d58e9b293c..de5be9092f 100644 --- a/eeschema/netform.cpp +++ b/eeschema/netform.cpp @@ -342,7 +342,7 @@ void Write_GENERIC_NetList( WinEDA_SchematicFrame* frame, CommandFile += wxT( " " ) + TmpFullFileName; CommandFile += wxT( " " ) + FullFileName; - wxExecute( CommandFile, wxEXEC_SYNC ); + ProcessExecute( CommandFile, wxEXEC_SYNC ); } diff --git a/include/common.h b/include/common.h index 936ffe6846..1f0ea9f122 100644 --- a/include/common.h +++ b/include/common.h @@ -354,6 +354,18 @@ class WinEDA_DrawPanel; /* COMMON.CPP */ + + +/** + * Function ProcessExecute + * runs a child process. + * @param aCommandLine The process and any arguments to it all in a single string. + * @param aFlags The same args as allowed for wxExecute() + * @return bool - true if success, else false + */ +bool ProcessExecute( const wxString& aCommandLine, int aFlags = wxEXEC_ASYNC ); + + wxString ReturnPcbLayerName( int layer_number, bool is_filename = FALSE ); /* Return the name of the layer number "layer_number". @@ -431,10 +443,10 @@ wxString MakeFileName( const wxString& dir, * dir = prefixe (chemin) * shortname = nom avec ou sans chemin ou extension * ext = extension - * + * * si la chaine name possede deja un chemin ou une extension, elles * ne seront pas modifiees - * + * * retourne la chaine calculee */ wxString MakeReducedFileName( const wxString& fullfilename, @@ -445,12 +457,12 @@ wxString MakeReducedFileName( const wxString& fullfilename, * fullfilename = nom complet * default_path = prefixe (chemin) par defaut * default_ext = extension par defaut - * + * * retourne le nom reduit, c'est a dire: * sans le chemin si le chemin est default_path * avec ./ si si le chemin est le chemin courant * sans l'extension si l'extension est default_ext - * + * * Renvoie un chemin en notation unix ('/' en separateur de repertoire) */ diff --git a/pcbnew/dialog_freeroute_exchange.cpp b/pcbnew/dialog_freeroute_exchange.cpp index 757972f3fb..d66ad14fc9 100644 --- a/pcbnew/dialog_freeroute_exchange.cpp +++ b/pcbnew/dialog_freeroute_exchange.cpp @@ -305,7 +305,7 @@ void dialog_freeroute_exchange::OnButton5Click( wxCommandEvent& event ) if( wxFileExists( FullFileName ) ) { command << wxT("javaws") << wxT( " " ) + FullFileName; - wxExecute( command ); + ProcessExecute( command ); return; } diff --git a/pcbnew/router.cpp b/pcbnew/router.cpp index 22ebacc505..6a1935c057 100644 --- a/pcbnew/router.cpp +++ b/pcbnew/router.cpp @@ -134,7 +134,7 @@ void WinEDA_PcbFrame::GlobalRoute( wxDC* DC ) Affiche_Message( ExecFileName ); - wxExecute( ExecFileName ); + ProcessExecute( ExecFileName ); #else wxMessageBox( wxT( "TODO, currently not available" ) );