diff --git a/common/common.cpp b/common/common.cpp index b20746ef51..33ee9c8e8a 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -277,14 +277,23 @@ void* MyMalloc( size_t nb_octets ) } +/**************************************************************/ bool ProcessExecute( const wxString& aCommandLine, int aFlags ) +/**************************************************************/ +/** + * 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 + */ { #ifdef __WINDOWS__ - wxExecute(aCommandLine); - return true; + int pid = wxExecute(aCommandLine); + return pid ? true : false; #else wxProcess* process = wxProcess::Open( aCommandLine, aFlags ); - return process != NULL; + return (process != NULL) ? true : false; #endif } diff --git a/common/eda_doc.cpp b/common/eda_doc.cpp index 7a7c04735d..2b5609be80 100644 --- a/common/eda_doc.cpp +++ b/common/eda_doc.cpp @@ -54,27 +54,21 @@ void WinEDA_App::WritePdfBrowserInfos() } -// Mime type extensions +// Mime type extensions (PDF files are not considered here) 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/html" ), wxT( "wxhtml %s" ), wxT( "wxhtml %s" ), wxT( "html document (from Kicad)" ), - wxT( "htm" ), wxT( "html" ), NULL ), + 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 ), + wxT( "sch" ), wxT( "SCH" ), NULL ), // must terminate the table with this! wxFileTypeInfo() @@ -87,15 +81,15 @@ bool GetAssociatedDocument( wxFrame* frame, const wxString& LibPath, /*********************************************************************/ /* 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 + * 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 + * if DocName is starting by http: or ftp: or www. the default internet browser is launched */ { - wxString docpath, fullfilename; + wxString docpath, fullfilename, file_ext; wxString Line; wxString command; bool success = FALSE; @@ -146,7 +140,7 @@ bool GetAssociatedDocument( wxFrame* frame, const wxString& LibPath, wxFD_OPEN, /* wxSAVE, wxFD_OPEN ..*/ TRUE, /* true = ne change pas le repertoire courant */ wxPoint( -1, -1 ) - ); + ); if( fullfilename.IsEmpty() ) return FALSE; } @@ -158,83 +152,46 @@ bool GetAssociatedDocument( wxFrame* frame, const wxString& LibPath, return FALSE; } - /* Try to launch some browser (usefull under linux) */ - g_EDA_Appl->ReadPdfBrowserInfos(); - if( g_EDA_Appl->m_PdfBrowserIsDefault ) + wxFileName CurrentFileName( fullfilename ); + file_ext = CurrentFileName.GetExt(); + + if( file_ext == wxT( "pdf" ) ) { - 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( "kpdf " ) + fullfilename; - else if( wxFileExists( wxT( "/usr/bin/konqueror" ) ) ) - command = wxT( "konqueror " ) + fullfilename; - else if( wxFileExists( wxT( "/usr/bin/gpdf" ) ) ) - command = wxT( "gpdf " ) + fullfilename; - if( wxFileExists( wxT( "/usr/bin/xpdf" ) ) ) - command = wxT( "xpdf " ) + fullfilename; - if( command.IsEmpty() ) // not started - { - DisplayError( frame, - _( " Cannot find the PDF viewer (kpdf, gpdf, konqueror or xpdf) 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 ); - } - } + success = OpenPDF( fullfilename ); + return success; } - else + + + /* Try to launch some browser (usefull under linux) */ + wxFileType* filetype; + + wxString type; + filetype = wxTheMimeTypesManager->GetFileTypeFromExtension( file_ext ); + + if( !filetype ) // 2ieme tentative { - 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 ); - } + mimeDatabase = new wxMimeTypesManager; + mimeDatabase->AddFallbacks( EDAfallbacks ); + filetype = mimeDatabase->GetFileTypeFromExtension( file_ext ); + delete mimeDatabase; + mimeDatabase = NULL; + } + + if( filetype ) + { + wxFileType::MessageParameters params( fullfilename, type ); + + success = filetype->GetOpenCommand( &command, params ); + delete filetype; + if( success ) + success = ProcessExecute( command ); + } + + if( !success ) + { + Line.Printf( _( "Unknown MIME type for Doc File [%s]" ), + fullfilename.GetData() ); + DisplayError( frame, Line ); } return success; @@ -246,11 +203,11 @@ 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; @@ -265,7 +222,7 @@ int KeyWordOk( const wxString& KeyList, const wxString& Database ) while( Token.HasMoreTokens() ) { - wxString Key = Token.GetNextToken(); + wxString Key = Token.GetNextToken(); // Search Key in Datalist: wxStringTokenizer Data( DataList, wxT( " \n\r" ) ); @@ -274,7 +231,7 @@ int KeyWordOk( const wxString& KeyList, const wxString& Database ) { wxString word = Data.GetNextToken(); if( word == Key ) - return 1; // Key found ! + return 1; // Key found ! } } diff --git a/common/gestfich.cpp b/common/gestfich.cpp index 5d88b62316..193c4ee22a 100644 --- a/common/gestfich.cpp +++ b/common/gestfich.cpp @@ -74,8 +74,8 @@ static wxString s_HelpPathList[] = { #else wxT( "/usr/share/doc/kicad/help/" ), wxT( "/usr/local/share/doc/kicad/help/" ), - wxT( "/usr/local/kicad/doc/" ), // default install for "universal tarballs" and build for a server (new) -// wxT( "/usr/local/kicad/" ), // default install for "universal tarballs" and build for a server (old) + wxT( "/usr/local/kicad/doc/help/" ), // default install for "universal tarballs" and build for a server (new) + wxT( "/usr/local/kicad/help/" ), // default install for "universal tarballs" and build for a server (old) #endif wxT( "end_list" ) // End of list symbol, do not change }; @@ -701,64 +701,101 @@ wxString GetEditorName() return g_EditorName; } - -void OpenPDF( const wxString& file ) +/***********************************/ +bool OpenPDF( const wxString& file ) +/***********************************/ +/** Function OpenPDF + * run the PDF viewer and display a PDF file + * @param file = PDF file to open + * @return true is success, false if no PDF viewer found + */ { wxString command; wxString filename = file; wxString type; + bool success = false; g_EDA_Appl->ReadPdfBrowserInfos(); - if( !g_EDA_Appl->m_PdfBrowserIsDefault ) + if( !g_EDA_Appl->m_PdfBrowserIsDefault ) // Run the prefered PDF Browser { AddDelimiterString( filename ); - command = g_EDA_Appl->m_PdfBrowser + filename; + command = g_EDA_Appl->m_PdfBrowser + wxT( " " ) + filename; } else { - bool success = false; wxFileType* filetype = NULL; - wxFileType::MessageParameters params( filename, type ); - - filetype = wxTheMimeTypesManager->GetFileTypeFromExtension( wxT( ".pdf" ) ); + filetype = wxTheMimeTypesManager->GetFileTypeFromExtension( wxT( "pdf" ) ); if( filetype ) success = filetype->GetOpenCommand( &command, params ); delete filetype; +#ifndef __WINDOWS__ + // Bug ? under linux wxWidgets returns acroread as PDF viewer,even it not exists + if ( command.StartsWith(wxT("acroread")) ) // Workaround + success = false; +#endif + if( success && !command.IsEmpty() ) + { + success = ProcessExecute( command ); + } + else + success = false; if( !success ) { - AddDelimiterString( filename ); command.Empty(); - +#ifndef __WINDOWS__ + AddDelimiterString( filename ); + /* here is a list of PDF viewers candidates */ const static wxString tries[] = { wxT( "/usr/bin/evince" ), - wxT( "/usr/bin/xpdf" ), - wxT( "/usr/bin/konqueror" ), wxT( "/usr/bin/gpdf" ), + wxT( "/usr/bin/konqueror" ), + wxT( "/usr/bin/kpdf" ), + wxT( "/usr/bin/xpdf" ), wxT( "" ), }; - for( int i = 0; ; i++ ) + for( int ii = 0; ; ii++ ) { - if( tries[i].IsEmpty() ) + if( tries[ii].IsEmpty() ) break; - if( wxFileExists( tries[i] ) ) + if( wxFileExists( tries[ii] ) ) { - command = tries[i] + wxT( " " ) + filename; + command = tries[ii] + wxT( " " ) + filename; + break; } } +#endif } } if( !command.IsEmpty() ) - ProcessExecute( command ); + { + success = ProcessExecute( command ); + if ( !success ) + { + wxString msg = _("Problem while running the PDF viewer"); + msg << wxT("\n command is") << command; + DisplayError( NULL, msg ); + } + } + else + { + wxString msg = _("Unable to find a PDF viewer for"); + msg << wxT(" ") << filename; + DisplayError( NULL, msg ); + success = false; + } + + return success; } - +/*************************************/ void OpenFile( const wxString& file ) +/*************************************/ { wxString command; wxString filename = file; diff --git a/gerbview/block.cpp b/gerbview/block.cpp index 6bca20cbd7..0c93943853 100644 --- a/gerbview/block.cpp +++ b/gerbview/block.cpp @@ -309,7 +309,7 @@ void WinEDA_BasePcbFrame::Block_Move( wxDC* DC ) * Function to move items in the current selected block */ { - int deltaX, deltaY; + wxPoint delta; wxPoint oldpos; oldpos = GetScreen()->m_Curseur; @@ -321,8 +321,7 @@ void WinEDA_BasePcbFrame::Block_Move( wxDC* DC ) GetScreen()->BlockLocate.Normalize(); /* calcul du vecteur de deplacement pour les deplacements suivants */ - deltaX = GetScreen()->BlockLocate.m_MoveVector.x; - deltaY = GetScreen()->BlockLocate.m_MoveVector.y; + delta = GetScreen()->BlockLocate.m_MoveVector; /* Move the Track segments in block */ TRACK* track = m_Pcb->m_Track; @@ -332,9 +331,13 @@ void WinEDA_BasePcbFrame::Block_Move( wxDC* DC ) { m_Pcb->m_Status_Pcb = 0; track->Draw( DrawPanel, DC, GR_XOR ); // erase the display - track->m_Start.x += deltaX; track->m_Start.y += deltaY; - track->m_End.x += deltaX; track->m_End.y += deltaY; - track->m_Param += deltaX; track->SetSubNet( track->GetSubNet() + deltaY ); + track->m_Start += delta; + track->m_End += delta; + // the two parameters are used in gerbview to store centre coordinates for arcs. + // move this centre + track->m_Param += delta.x; + track->SetSubNet( track->GetSubNet() + delta.y ); + track->Draw( DrawPanel, DC, GR_OR ); // redraw the moved track } track = track->Next(); @@ -344,12 +347,15 @@ void WinEDA_BasePcbFrame::Block_Move( wxDC* DC ) SEGZONE * zsegment= m_Pcb->m_Zone; while( zsegment ) { - if( IsSegmentInBox( GetScreen()->BlockLocate, track ) ) + if( IsSegmentInBox( GetScreen()->BlockLocate, zsegment ) ) { zsegment->Draw( DrawPanel, DC, GR_XOR ); // erase the display - zsegment->m_Start.x += deltaX; track->m_Start.y += deltaY; - zsegment->m_End.x += deltaX; track->m_End.y += deltaY; - zsegment->m_Param += deltaX; track->SetSubNet( track->GetSubNet() + deltaY ); + zsegment->m_Start += delta; + zsegment->m_End += delta; + // the two parameters are used in gerbview to store centre coordinates for arcs. + // move this centre + zsegment->m_Param += delta.x; + zsegment->SetSubNet( zsegment->GetSubNet() + delta.y ); zsegment->Draw( DrawPanel, DC, GR_OR ); // redraw the moved zone zegment } zsegment = zsegment->Next(); @@ -407,7 +413,7 @@ void WinEDA_BasePcbFrame::Block_Duplicate( wxDC* DC ) while( zsegment ) { SEGZONE * next_zsegment = zsegment->Next(); - if( IsSegmentInBox( GetScreen()->BlockLocate, track ) ) + if( IsSegmentInBox( GetScreen()->BlockLocate, zsegment ) ) { /* this zone segment must be duplicated */ SEGZONE * new_zsegment = (SEGZONE*) zsegment->Copy(); diff --git a/include/build_version.h b/include/build_version.h index 7c299ae3df..2cbd971b31 100644 --- a/include/build_version.h +++ b/include/build_version.h @@ -9,7 +9,7 @@ COMMON_GLOBL wxString g_BuildVersion # include "config.h" (wxT(KICAD_SVN_VERSION)) # else - (wxT("(20080530-r1107)")) + (wxT("(20080622-r1138)")) # endif #endif ; diff --git a/include/common.h b/include/common.h index 6811f834fc..b142627ee2 100644 --- a/include/common.h +++ b/include/common.h @@ -448,9 +448,15 @@ int Get_Message( const wxString& titre, wxString& buffer, wxWindow* frame ); /************************/ wxString GetEditorName(); // Return the prefered editor name -void OpenPDF( const wxString& file ); -void OpenFile( const wxString& file ); +/** Function OpenPDF + * run the PDF viewer and display a PDF file + * @param file = PDF file to open + * @return true is success, false if no PDF viewer found + */ +bool OpenPDF( const wxString& file ); + +void OpenFile( const wxString& file ); bool EDA_DirectorySelector( const wxString& Title, /* Titre de la fenetre */ wxString& Path, /* Chemin par defaut */