From cd0b231656ad61242e804285a37d9d83112a7902 Mon Sep 17 00:00:00 2001 From: Wayne Stambaugh Date: Tue, 8 Nov 2011 11:37:25 -0500 Subject: [PATCH] Minor fixes, dead code removal, and coding policy fixes. * Use version of DateAndTime that returns a wxString and delete the version that takes a char* as it is no longer required. * Merge StrNumICmp() and StrLenNumICmp() into StrLenNumCmp() to create a single function for comparing strings with integers and remove a lot of duplicate code. * Remove unused strupper from string.cpp. * Use wxArrayString for sorting the EDA_LIST_DIALOG contents. --- common/base_screen.cpp | 4 +- common/common_plotGERBER_functions.cpp | 6 +- common/confirm.cpp | 39 ++--- common/copy_to_clipboard.cpp | 7 +- common/dcsvg.cpp | 1 - common/displlst.cpp | 45 ++--- common/drawframe.cpp | 10 +- common/eda_dde.cpp | 21 ++- common/eda_doc.cpp | 64 +++---- common/gestfich.cpp | 156 +++++++---------- common/pcbcommon.cpp | 2 +- common/string.cpp | 222 ++++++++----------------- cvpcb/class_cvpcb.cpp | 19 ++- cvpcb/savecmp.cpp | 3 +- cvpcb/writenetlistpcbnew.cpp | 12 +- eeschema/class_libentry.cpp | 3 +- eeschema/class_library.cpp | 10 +- eeschema/dialogs/dialog_build_BOM.cpp | 5 +- eeschema/libedit.cpp | 2 - eeschema/netform.cpp | 28 ++-- gerbview/export_to_pcbnew.cpp | 28 +++- include/appl_wxstruct.h | 14 +- include/class_base_screen.h | 4 +- include/class_drawpanel.h | 18 +- include/common.h | 2 +- include/confirm.h | 39 ++++- include/eda_doc.h | 14 +- include/footprint_info.h | 6 +- include/gestfich.h | 113 ++++++++++--- include/kicad_string.h | 98 ++++++----- include/param_config.h | 4 +- include/pcbstruct.h | 2 +- include/wxBasePcbFrame.h | 2 +- include/wxEeschemaStruct.h | 2 +- include/wxstruct.h | 14 +- pcbnew/class_footprint_library.cpp | 3 +- pcbnew/gen_drill_report_files.cpp | 2 +- pcbnew/gen_modules_placefile.cpp | 13 +- pcbnew/gendrill.cpp | 7 +- pcbnew/ioascii.cpp | 3 +- pcbnew/moduleframe.cpp | 31 +++- pcbnew/xchgmod.cpp | 4 +- 42 files changed, 497 insertions(+), 585 deletions(-) diff --git a/common/base_screen.cpp b/common/base_screen.cpp index 559bfd7bb8..295f5ef3c9 100644 --- a/common/base_screen.cpp +++ b/common/base_screen.cpp @@ -42,9 +42,9 @@ BASE_SCREEN::BASE_SCREEN( KICAD_T aType ) : EDA_ITEM( aType ) { m_drawList = NULL; /* Draw items list */ m_UndoRedoCountMax = 10; /* undo/Redo command Max depth, 10 is a reasonable value */ - m_FirstRedraw = TRUE; + m_FirstRedraw = true; m_ScreenNumber = 1; - m_NumberOfScreen = 1; /* Hierarchy: Root: ScreenNumber = 1 */ + m_NumberOfScreen = 1; /* Hierarchy: Root: ScreenNumber = 1 */ m_Zoom = 32.0; m_Grid.m_Size = wxRealPoint( 50, 50 ); /* Default grid size */ m_Grid.m_Id = ID_POPUP_GRID_LEVEL_50; diff --git a/common/common_plotGERBER_functions.cpp b/common/common_plotGERBER_functions.cpp index 2aa456e8e5..ee9506eee9 100644 --- a/common/common_plotGERBER_functions.cpp +++ b/common/common_plotGERBER_functions.cpp @@ -44,8 +44,6 @@ void GERBER_PLOTTER::set_viewport( wxPoint aOffset, double aScale, bool aMirror */ bool GERBER_PLOTTER::start_plot( FILE* aFile ) { - char Line[1024]; - wxASSERT( !output_file ); final_file = aFile; @@ -59,9 +57,9 @@ bool GERBER_PLOTTER::start_plot( FILE* aFile ) if( output_file == NULL ) return false; - DateAndTime( Line ); wxString Title = creator + wxT( " " ) + GetBuildVersion(); - fprintf( output_file, "G04 (created by %s) date %s*\n", TO_UTF8( Title ), Line ); + fprintf( output_file, "G04 (created by %s) date %s*\n", + TO_UTF8( Title ), TO_UTF8( DateAndTime() ) ); // Specify linear interpol (G01), unit = INCH (G70), abs format (G90): fputs( "G01*\nG70*\nG90*\n", output_file ); diff --git a/common/confirm.cpp b/common/confirm.cpp index 24240e7d00..d9a7fec687 100644 --- a/common/confirm.cpp +++ b/common/confirm.cpp @@ -1,7 +1,7 @@ /* -* confirm.cpp -* utilities to display some error, warning and info short messges -*/ + * @file confirm.cpp + * utilities to display some error, warning and info short messges + */ #include "fctsys.h" #include "common.h" @@ -9,46 +9,35 @@ #include "wx/html/htmlwin.h" #include "html_messagebox.h" -/* Display an error or warning message. - * TODO: - * If display time > 0 the dialog disappears after displayTime ( in 0.1 second ) - * - */ + void DisplayError( wxWindow* parent, const wxString& text, int displaytime ) { wxMessageDialog* dialog; if( displaytime > 0 ) dialog = new wxMessageDialog( parent, text, _( "Warning" ), - wxOK | wxCENTRE | wxICON_INFORMATION ); + wxOK | wxCENTRE | wxICON_INFORMATION ); else dialog = new wxMessageDialog( parent, text, _( "Error" ), - wxOK | wxCENTRE | wxICON_ERROR ); + wxOK | wxCENTRE | wxICON_ERROR ); dialog->ShowModal(); dialog->Destroy(); } -/* Display an informational message. - * TODO: - * If display time > 0 the message disappears after displayTime (in 0.1 second ) - */ -void DisplayInfoMessage( wxWindow* parent, const wxString& text, - int displaytime ) +void DisplayInfoMessage( wxWindow* parent, const wxString& text, int displaytime ) { wxMessageDialog* dialog; dialog = new wxMessageDialog( parent, text, _( "Info:" ), - wxOK | wxCENTRE | wxICON_INFORMATION ); + wxOK | wxCENTRE | wxICON_INFORMATION ); dialog->ShowModal(); dialog->Destroy(); } - /* Display a simple message window in html format. - */ void DisplayHtmlInfoMessage( wxWindow* parent, const wxString& title, const wxString& text, const wxSize& size ) { @@ -63,10 +52,10 @@ bool IsOK( wxWindow* parent, const wxString& text ) { int ii; - ii = wxMessageBox( text, _( "Confirmation" ), - wxYES_NO | wxCENTRE | wxICON_HAND, parent ); - if( ii == wxYES ) - return TRUE; - return FALSE; -} + ii = wxMessageBox( text, _( "Confirmation" ), wxYES_NO | wxCENTRE | wxICON_HAND, parent ); + if( ii == wxYES ) + return true; + + return false; +} diff --git a/common/copy_to_clipboard.cpp b/common/copy_to_clipboard.cpp index 6354734115..5237a1fc43 100644 --- a/common/copy_to_clipboard.cpp +++ b/common/copy_to_clipboard.cpp @@ -18,9 +18,6 @@ static bool DrawPageOnClipboard( EDA_DRAW_FRAME* aFrame ); -/* calls the function to copy the current page or the current bock to - * the clipboard - */ void EDA_DRAW_FRAME::CopyToClipboard( wxCommandEvent& event ) { DrawPageOnClipboard( this ); @@ -41,7 +38,7 @@ void EDA_DRAW_FRAME::CopyToClipboard( wxCommandEvent& event ) */ bool DrawPageOnClipboard( EDA_DRAW_FRAME* aFrame ) { - bool success = TRUE; + bool success = true; #ifdef __WINDOWS__ int tmpzoom; @@ -58,7 +55,7 @@ bool DrawPageOnClipboard( EDA_DRAW_FRAME* aFrame ) if( screen->IsBlockActive() ) { - DrawBlock = TRUE; + DrawBlock = true; DrawArea.SetX( screen->m_BlockLocate.GetX() ); DrawArea.SetY( screen->m_BlockLocate.GetY() ); DrawArea.SetWidth( screen->m_BlockLocate.GetWidth() ); diff --git a/common/dcsvg.cpp b/common/dcsvg.cpp index 33c26af5a4..136fe3689a 100644 --- a/common/dcsvg.cpp +++ b/common/dcsvg.cpp @@ -1,5 +1,4 @@ ///////////////////////////////////////////////////////////////////////////// - // Name: svg.cpp // Purpose: SVG plot // Author: Chris Elliott diff --git a/common/displlst.cpp b/common/displlst.cpp index 8d433da7ec..aba8e1e952 100644 --- a/common/displlst.cpp +++ b/common/displlst.cpp @@ -1,6 +1,6 @@ -/****************/ -/* displlst.cpp */ -/****************/ +/** + * @file displlst.cpp + */ #include "fctsys.h" #include "wxstruct.h" @@ -27,16 +27,6 @@ BEGIN_EVENT_TABLE( EDA_LIST_DIALOG, wxDialog ) END_EVENT_TABLE() -/** - * Used to display a list of elements for selection, and display comment of info lines - * about the selected item. - * @param aParent = apointeur to the parent window - * @param aTitle = the title shown on top. - * @param aItemList = a wxArrayString: the list of elements. - * @param aRefText = an item name if an item must be preselected. - * @param aCallBackFunction callback function to display comments - * @param aPos = position of the dialog. - */ EDA_LIST_DIALOG::EDA_LIST_DIALOG( EDA_DRAW_FRAME* aParent, const wxString& aTitle, const wxArrayString& aItemList, const wxString& aRefText, void(* aCallBackFunction)(wxString& Text), wxPoint aPos ) : @@ -155,39 +145,24 @@ void EDA_LIST_DIALOG::OnClose( wxCloseEvent& event ) /* Sort alphabetically, case insensitive. */ -static int SortItems( const wxString** ptr1, const wxString** ptr2 ) +static int SortItems( const wxString& item1, const wxString& item2 ) { - return StrNumICmp( (*ptr1)->GetData(), (*ptr2)->GetData() ); + return StrNumCmp( item1, item2, INT_MAX, true ); } -void EDA_LIST_DIALOG:: SortList() +void EDA_LIST_DIALOG::SortList() { - int ii, NbItems = m_listBox->GetCount(); - const wxString** BufList; + wxArrayString list = m_listBox->GetStrings(); - if( NbItems <= 0 ) + if( list.IsEmpty() <= 0 ) return; - BufList = (const wxString**) MyZMalloc( 100 * NbItems * sizeof(wxString*) ); - - for( ii = 0; ii < NbItems; ii++ ) - { - BufList[ii] = new wxString( m_listBox->GetString( ii ) ); - } - - qsort( BufList, NbItems, sizeof(wxString*), - ( int( * ) ( const void*, const void* ) )SortItems ); + list.Sort( SortItems ); m_listBox->Clear(); - for( ii = 0; ii < NbItems; ii++ ) - { - m_listBox->Append( *BufList[ii] ); - delete BufList[ii]; - } - - free( BufList ); + m_listBox->Append( list ); } diff --git a/common/drawframe.cpp b/common/drawframe.cpp index 779ef087bd..023ab2a16b 100644 --- a/common/drawframe.cpp +++ b/common/drawframe.cpp @@ -102,11 +102,11 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( wxWindow* father, int idtype, const wxString& ti m_toolId = ID_NO_TOOL_SELECTED; m_ID_last_state = ID_NO_TOOL_SELECTED; m_HTOOL_current_state = 0; - m_Draw_Axis = FALSE; // TRUE to draw axis. - m_Draw_Sheet_Ref = FALSE; // TRUE to display reference sheet. - m_Print_Sheet_Ref = TRUE; // TRUE to print reference sheet. - m_Draw_Auxiliary_Axis = FALSE; // TRUE draw auxiliary axis. - m_Draw_Grid_Axis = FALSE; // TRUE to draw the grid axis + m_Draw_Axis = false; // true to draw axis. + m_Draw_Sheet_Ref = false; // true to display reference sheet. + m_Print_Sheet_Ref = true; // true to print reference sheet. + m_Draw_Auxiliary_Axis = false; // true draw auxiliary axis. + m_Draw_Grid_Axis = false; // true to draw the grid axis m_CursorShape = 0; m_LastGridSizeId = 0; m_DrawGrid = true; // hide/Show grid. default = show diff --git a/common/eda_dde.cpp b/common/eda_dde.cpp index ce32ff153b..9a93fa2bbb 100644 --- a/common/eda_dde.cpp +++ b/common/eda_dde.cpp @@ -1,6 +1,6 @@ -/////////////////////// -// Name: eda_dde.cpp // -/////////////////////// +/** + * @file eda_dde.cpp + */ #include "fctsys.h" #include "eda_dde.h" @@ -43,11 +43,12 @@ WinEDA_Server* CreateServer( wxWindow* window, int service ) addr.Service( service ); server = new wxServer( addr ); + if( server ) { server->SetNotify( wxSOCKET_CONNECTION_FLAG ); server->SetEventHandler( *window, ID_EDA_SOCKET_EVENT_SERV ); - server->Notify( TRUE ); + server->Notify( true ); } return server; @@ -65,14 +66,17 @@ void EDA_DRAW_FRAME::OnSockRequest( wxSocketEvent& evt ) { case wxSOCKET_INPUT: sock->Read( client_ipc_buffer, 1 ); + if( sock->LastCount() == 0 ) break; // No data, occurs on opening connection sock->Read( client_ipc_buffer + 1, IPC_BUF_SIZE - 2 ); len = 1 + sock->LastCount(); client_ipc_buffer[len] = 0; + if( RemoteFct ) RemoteFct( client_ipc_buffer ); + break; case wxSOCKET_LOST: @@ -94,10 +98,11 @@ void EDA_DRAW_FRAME::OnSockRequestServer( wxSocketEvent& evt ) wxSocketServer* server = (wxSocketServer*) evt.GetSocket(); sock2 = server->Accept(); + if( sock2 == NULL ) return; - sock2->Notify( TRUE ); + sock2->Notify( true ); sock2->SetEventHandler( *this, ID_EDA_SOCKET_EVENT ); sock2->SetNotify( wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG ); } @@ -117,7 +122,7 @@ void EDA_DRAW_FRAME::OnSockRequestServer( wxSocketEvent& evt ) bool SendCommand( int service, const char* cmdline ) { wxSocketClient* sock_client; - bool success = FALSE; + bool success = false; wxIPV4address addr; // Create a connexion @@ -176,12 +181,12 @@ bool SendCommand( int service, const char* cmdline ) sock_client = new wxSocketClient(); sock_client->SetTimeout( 2 ); // Time out in Seconds - sock_client->Connect( addr, FALSE ); + sock_client->Connect( addr, false ); sock_client->WaitOnConnect( 0, 100 ); if( sock_client->Ok() && sock_client->IsConnected() ) { - success = TRUE; + success = true; sock_client->SetFlags( wxSOCKET_NOWAIT /*wxSOCKET_WAITALL*/ ); sock_client->Write( cmdline, strlen( cmdline ) ); } diff --git a/common/eda_doc.cpp b/common/eda_doc.cpp index a5ddd91e39..00bfa1d6f3 100644 --- a/common/eda_doc.cpp +++ b/common/eda_doc.cpp @@ -1,6 +1,6 @@ -/***************/ -/* eda_doc.cpp */ -/***************/ +/** + * @file eda_doc.cpp + */ #include "fctsys.h" #include "appl_wxstruct.h" @@ -14,24 +14,18 @@ #include "macros.h" -/* Read from Common config the Pdf browser choice - */ void EDA_APP::ReadPdfBrowserInfos() { wxASSERT( m_EDA_CommonConfig != NULL ); - m_PdfBrowserIsDefault = - m_EDA_CommonConfig->Read( wxT( "PdfBrowserIsDefault" ), true ); - m_PdfBrowser = m_EDA_CommonConfig->Read( wxT( "PdfBrowserName" ), - wxEmptyString ); + 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; } -/* Write into Common config the Pdf browser choice - */ void EDA_APP::WritePdfBrowserInfos() { wxASSERT( m_EDA_CommonConfig != NULL ); @@ -39,8 +33,7 @@ void EDA_APP::WritePdfBrowserInfos() if( m_PdfBrowser.IsEmpty() ) m_PdfBrowserIsDefault = true; - m_EDA_CommonConfig->Write( wxT( "PdfBrowserIsDefault" ), - m_PdfBrowserIsDefault ); + m_EDA_CommonConfig->Write( wxT( "PdfBrowserIsDefault" ), m_PdfBrowserIsDefault ); m_EDA_CommonConfig->Write( wxT( "PdfBrowserName" ), m_PdfBrowser ); } @@ -68,41 +61,31 @@ static const wxFileTypeInfo EDAfallbacks[] = }; -/** - * Function GetAssociatedDocument - * open a document (file) with the suitable browser - * @param aFrame = main frame - * if DocName is starting by http: or ftp: or www. the default internet - * browser is launched - * @param aDocName = filename of file to open (Full filename or short filename) - * @param aPaths = a wxPathList to explore. - * if NULL or aDocName is a full filename, aPath is not used. - */ -bool GetAssociatedDocument( wxFrame* aFrame, - const wxString& aDocName, - const wxPathList* aPaths) +bool GetAssociatedDocument( wxFrame* aFrame, + const wxString& aDocName, + const wxPathList* aPaths) { wxString docname, fullfilename, file_ext; wxString msg; wxString command; - bool success = FALSE; + bool success = false; // Is an internet url - static const wxString url_header[3] = { wxT( "http:" ), wxT( "ftp:" ), - wxT( "www." ) }; + static const wxString url_header[3] = { wxT( "http:" ), wxT( "ftp:" ), wxT( "www." ) }; for( int ii = 0; ii < 3; ii++ ) { if( aDocName.First( url_header[ii] ) == 0 ) //. seems an internet url { wxLaunchDefaultBrowser( aDocName ); - return TRUE; + return true; } } docname = aDocName; - #ifdef __WINDOWS__ + +#ifdef __WINDOWS__ docname.Replace( UNIX_STRING_DIR_SEP, WIN_STRING_DIR_SEP ); #else docname.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP ); @@ -139,10 +122,10 @@ bool GetAssociatedDocument( wxFrame* aFrame, mask, aFrame, wxFD_OPEN, - TRUE, + true, wxPoint( -1, -1 ) ); if( fullfilename.IsEmpty() ) - return FALSE; + return false; } if( !wxFileExists( fullfilename ) ) @@ -150,11 +133,12 @@ bool GetAssociatedDocument( wxFrame* aFrame, msg = _( "Doc File " ); msg << wxT("\"") << aDocName << wxT("\"") << _( " not found" ); DisplayError( aFrame, msg ); - return FALSE; + return false; } wxFileName CurrentFileName( fullfilename ); file_ext = CurrentFileName.GetExt(); + if( file_ext == wxT( "pdf" ) ) { success = OpenPDF( fullfilename ); @@ -182,14 +166,14 @@ bool GetAssociatedDocument( wxFrame* aFrame, success = filetype->GetOpenCommand( &command, params ); delete filetype; + if( success ) success = ProcessExecute( command ); } if( !success ) { - msg.Printf( _( "Unknown MIME type for doc file <%s>" ), - GetChars( fullfilename ) ); + msg.Printf( _( "Unknown MIME type for doc file <%s>" ), GetChars( fullfilename ) ); DisplayError( aFrame, msg ); } @@ -197,13 +181,6 @@ bool GetAssociatedDocument( wxFrame* aFrame, } -/* Search if the text Database found all the words in the KeyList. - * Give articles in keylist (keylist = Following Keywords - * Separated by spaces - * Returns: - * 0 if no keyword found - * 1 if keyword found - */ int KeyWordOk( const wxString& KeyList, const wxString& Database ) { wxString KeysCopy, DataList; @@ -226,6 +203,7 @@ int KeyWordOk( const wxString& KeyList, const wxString& Database ) while( Data.HasMoreTokens() ) { wxString word = Data.GetNextToken(); + if( word == Key ) return 1; // Key found ! } diff --git a/common/gestfich.cpp b/common/gestfich.cpp index ac6cc0c950..b92e4251e0 100644 --- a/common/gestfich.cpp +++ b/common/gestfich.cpp @@ -114,20 +114,6 @@ static wxString s_KicadBinaryPathList[] = { }; -/** - * Function MakeReducedFileName - * Calculate the "reduced" filename from - * @param fullfilename = full filename - * @param default_path = default path - * @param default_ext = default extension - * - * @return the "reduced" filename, i.e.: - * without path if it is default_path - * with ./ if the path is the current path - * without extension if extension is default_ext - * - * the new flename is in unix like notation ('/' as path separator) - */ wxString MakeReducedFileName( const wxString& fullfilename, const wxString& default_path, const wxString& default_ext ) @@ -140,8 +126,10 @@ wxString MakeReducedFileName( const wxString& fullfilename, path = wxPathOnly( reduced_filename ) + UNIX_STRING_DIR_SEP; reduced_filename.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP ); Cwd.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP ); + if( Cwd.Last() != '/' ) Cwd += UNIX_STRING_DIR_SEP; + path.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP ); #ifdef __WINDOWS__ @@ -154,6 +142,7 @@ wxString MakeReducedFileName( const wxString& fullfilename, // if the path is "default_path" -> remove it wxString root_path = path.Left( Cwd.Length() ); + if( root_path == Cwd ) { reduced_filename.Remove( 0, Cwd.Length() ); @@ -165,6 +154,7 @@ wxString MakeReducedFileName( const wxString& fullfilename, Cwd.MakeLower(); #endif Cwd.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP ); + if( path == Cwd ) { // the path is the current path -> path = "./" reduced_filename.Remove( 0, Cwd.Length() ); @@ -181,28 +171,22 @@ wxString MakeReducedFileName( const wxString& fullfilename, } -/** - * Function AddDelimiterString - * Add un " to the start and the end of string (if not already done). - * @param string = string to modify - */ void AddDelimiterString( wxString& string ) { wxString text; if( !string.StartsWith( wxT( "\"" ) ) ) text = wxT( "\"" ); + text += string; + if( (text.Last() != '"' ) || (text.length() <= 1) ) text += wxT( "\"" ); + string = text; } -/***********************************/ -/* Selection Directory dialog box: */ -/***********************************/ - bool EDA_DirectorySelector( const wxString& Title, wxString& Path, int flag, @@ -210,7 +194,7 @@ bool EDA_DirectorySelector( const wxString& Title, const wxPoint& Pos ) { int ii; - bool selected = FALSE; + bool selected = false; wxDirDialog* DirFrame = new wxDirDialog( Frame, wxString( Title ), @@ -219,10 +203,11 @@ bool EDA_DirectorySelector( const wxString& Title, Pos ); ii = DirFrame->ShowModal(); + if( ii == wxID_OK ) { Path = DirFrame->GetPath(); - selected = TRUE; + selected = true; } DirFrame->Destroy(); @@ -230,16 +215,6 @@ bool EDA_DirectorySelector( const wxString& Title, } -/* Selection file dialog box: - * Dialog title - * Default path - * default filename - * default filename extension - * filter for filename list - * parent frame - * wxFD_SAVE, wxFD_OPEN .. - * true = keep the current path - */ wxString EDA_FileSelector( const wxString& Title, const wxString& Path, const wxString& FileName, @@ -258,6 +233,7 @@ wxString EDA_FileSelector( const wxString& Title, defaultname.Replace( wxT( "/" ), STRING_DIR_SEP ); defaultpath.Replace( wxT( "/" ), STRING_DIR_SEP ); + if( defaultpath.IsEmpty() ) defaultpath = wxGetCwd(); @@ -289,37 +265,18 @@ wxString EDA_FileSelector( const wxString& Title, } -/** - * Function FindKicadHelpPath - * Find an absolute path for KiCad "help" (or "help/<language>") - * Find path kicad/doc/help/xx/ or kicad/doc/help/: - * from BinDir - * else from environment variable KICAD - * else from one of s_HelpPathList - * typically c:/kicad/doc/help or /usr/share/kicad/help - * or /usr/local/share/kicad/help - * (must have kicad in path name) - * - * xx = iso639-1 language id (2 letters (generic) or 4 letters): - * fr = french (or fr_FR) - * en = English (or en_GB or en_US ...) - * de = deutch - * es = spanish - * pt = portuguese (or pt_BR ...) - * - * default = en (if not found = fr) - * - */ wxString FindKicadHelpPath() { wxString FullPath, LangFullPath, tmp; wxString LocaleString; - bool PathFound = FALSE; + bool PathFound = false; /* find kicad/help/ */ tmp = wxGetApp().m_BinDir; + if( tmp.Last() == '/' ) tmp.RemoveLast(); + FullPath = tmp.BeforeLast( '/' ); // cd .. FullPath += wxT( "/doc/help/" ); LocaleString = wxGetApp().m_Locale->GetCanonicalName(); @@ -331,44 +288,54 @@ wxString FindKicadHelpPath() if( path_tmp.Contains( wxT( "kicad" ) ) ) { if( wxDirExists( FullPath ) ) - PathFound = TRUE; + PathFound = true; } /* find kicad/help/ from environment variable KICAD */ if( !PathFound && wxGetApp().m_Env_Defined ) { FullPath = wxGetApp().m_KicadEnv + wxT( "/doc/help/" ); + if( wxDirExists( FullPath ) ) - PathFound = TRUE; + PathFound = true; } /* find kicad/help/ from "s_HelpPathList" */ int ii = 0; + while( !PathFound ) { FullPath = s_HelpPathList[ii++]; + if( FullPath == wxT( "end_list" ) ) break; + if( wxDirExists( FullPath ) ) - PathFound = TRUE; + PathFound = true; } if( PathFound ) { LangFullPath = FullPath + LocaleString + UNIX_STRING_DIR_SEP; + if( wxDirExists( LangFullPath ) ) return LangFullPath; LangFullPath = FullPath + LocaleString.Left( 2 ) + UNIX_STRING_DIR_SEP; + if( wxDirExists( LangFullPath ) ) return LangFullPath; LangFullPath = FullPath + wxT( "en/" ); + if( wxDirExists( LangFullPath ) ) + { return LangFullPath; + } else { LangFullPath = FullPath + wxT( "fr/" ); + if( wxDirExists( LangFullPath ) ) return LangFullPath; } @@ -378,17 +345,6 @@ wxString FindKicadHelpPath() } -/* Search the executable file shortname in KiCad binary path - * and return full file name if found or shortname - * kicad binary path is - * kicad/bin - * - * kicad binary path is found from: - * BinDir - * or environment variable KICAD - * or (default) c:\kicad or /usr/local/kicad - * or default binary path - */ wxString FindKicadFile( const wxString& shortname ) { wxString FullFileName; @@ -397,15 +353,17 @@ wxString FindKicadFile( const wxString& shortname ) * the KiCad binary path. */ FullFileName = wxGetApp().m_BinDir + shortname; + if( wxFileExists( FullFileName ) ) return FullFileName; /* Test the presence of the file in the directory shortname - * defined by the environment variable KiCAD. + * defined by the environment variable KiCad. */ if( wxGetApp().m_Env_Defined ) { FullFileName = wxGetApp().m_KicadEnv + shortname; + if( wxFileExists( FullFileName ) ) return FullFileName; } @@ -414,11 +372,14 @@ wxString FindKicadFile( const wxString& shortname ) * /usr/local/kicad/linux or c:/kicad/winexe * (see s_KicadDataPathList) */ int ii = 0; + while( 1 ) { if( s_KicadBinaryPathList[ii] == wxT( "end_list" ) ) break; + FullFileName = s_KicadBinaryPathList[ii++] + shortname; + if( wxFileExists( FullFileName ) ) return FullFileName; } @@ -427,10 +388,7 @@ wxString FindKicadFile( const wxString& shortname ) } -/* Call the executable file "ExecFile", with params "param" - */ -int ExecuteFile( wxWindow* frame, const wxString& ExecFile, - const wxString& param ) +int ExecuteFile( wxWindow* frame, const wxString& ExecFile, const wxString& param ) { wxString FullFileName; @@ -441,6 +399,7 @@ int ExecuteFile( wxWindow* frame, const wxString& ExecFile, { if( !param.IsEmpty() ) FullFileName += wxT( " " ) + param; + ProcessExecute( FullFileName ); return 0; } @@ -452,26 +411,16 @@ int ExecuteFile( wxWindow* frame, const wxString& ExecFile, } -/* Return data path common KiCad. - * If environment variable defined KiCAD (KiCAD = path to kicad) - * Returns /; - * Otherwise returns / (if "kicad" is in the path name) - * Otherwise returns / usr / share / kicad / - * - * Note: - * The \ are replaced by / (a la Unix) - */ wxString ReturnKicadDatasPath() { - bool PathFound = FALSE; + bool PathFound = false; wxString data_path; - if( wxGetApp().m_Env_Defined ) // Path defined by the KICAD environment - // variable. + if( wxGetApp().m_Env_Defined ) // Path defined by the KICAD environment variable. { data_path = wxGetApp().m_KicadEnv; - PathFound = TRUE; + PathFound = true; } else // Path of executables. { @@ -486,6 +435,7 @@ wxString ReturnKicadDatasPath() #endif if( tmp.Last() == '/' ) tmp.RemoveLast(); + data_path = tmp.BeforeLast( '/' ); // id cd ../ data_path += UNIX_STRING_DIR_SEP; @@ -494,12 +444,15 @@ wxString ReturnKicadDatasPath() // So we search for kicad/share/ first wxString old_path = data_path; data_path += wxT( "share/" ); + if( wxDirExists( data_path ) ) - PathFound = TRUE; + { + PathFound = true; + } else if( wxDirExists( old_path ) ) { data_path = old_path; - PathFound = TRUE; + PathFound = true; } } } @@ -508,13 +461,16 @@ wxString ReturnKicadDatasPath() * /usr/local/kicad/ or c:/kicad/ * (see s_KicadDataPathList) */ int ii = 0; + while( !PathFound ) { if( s_KicadDataPathList[ii] == wxT( "end_list" ) ) break; + data_path = s_KicadDataPathList[ii++]; + if( wxDirExists( data_path ) ) - PathFound = TRUE; + PathFound = true; } if( PathFound ) @@ -574,12 +530,6 @@ wxString& EDA_APP::GetEditorName() } -/** - * 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 ) { wxString command; @@ -588,6 +538,7 @@ bool OpenPDF( const wxString& file ) bool success = false; wxGetApp().ReadPdfBrowserInfos(); + if( !wxGetApp().m_PdfBrowserIsDefault ) // Run the preferred PDF Browser { AddDelimiterString( filename ); @@ -598,8 +549,10 @@ bool OpenPDF( const wxString& file ) wxFileType* filetype = NULL; wxFileType::MessageParameters params( filename, type ); filetype = wxTheMimeTypesManager->GetFileTypeFromExtension( wxT( "pdf" ) ); + if( filetype ) success = filetype->GetOpenCommand( &command, params ); + delete filetype; #ifndef __WINDOWS__ @@ -611,6 +564,7 @@ bool OpenPDF( const wxString& file ) if( success && !command.IsEmpty() ) { success = ProcessExecute( command ); + if( success ) return success; } @@ -654,6 +608,7 @@ bool OpenPDF( const wxString& file ) if( !command.IsEmpty() ) { success = ProcessExecute( command ); + if( !success ) { wxString msg = _( "Problem while running the PDF viewer" ); @@ -682,14 +637,15 @@ void OpenFile( const wxString& file ) wxString ext, type; ext = CurrentFileName.GetExt(); - wxFileType* filetype = - wxTheMimeTypesManager->GetFileTypeFromExtension( ext ); + wxFileType* filetype = wxTheMimeTypesManager->GetFileTypeFromExtension( ext ); bool success = false; wxFileType::MessageParameters params( filename, type ); + if( filetype ) success = filetype->GetOpenCommand( &command, params ); + delete filetype; if( success && !command.IsEmpty() ) diff --git a/common/pcbcommon.cpp b/common/pcbcommon.cpp index b675da8391..f9fd70d26e 100644 --- a/common/pcbcommon.cpp +++ b/common/pcbcommon.cpp @@ -110,7 +110,7 @@ DLIST g_CurrentTrackList; BOARD* g_ModuleEditor_Pcb = NULL; -bool g_Zone_45_Only = FALSE; +bool g_Zone_45_Only = false; // Default setting used when creating a new zone ZONE_SETTING g_Zone_Default_Setting; diff --git a/common/string.cpp b/common/string.cpp index af65f7edfa..92c7222ef1 100644 --- a/common/string.cpp +++ b/common/string.cpp @@ -1,7 +1,7 @@ -/*********************************************/ -/* string.cpp */ -/* some useful functions to handle strings */ -/*********************************************/ +/** + * @file string.cpp + * @brief Some useful functions to handle strings. + */ #include "fctsys.h" #include "macros.h" @@ -30,6 +30,7 @@ int ReadDelimitedText( wxString* aDest, const char* aSource ) if( cc == '\\' ) { cc = *aSource++; + if( !cc ) break; @@ -40,7 +41,9 @@ int ReadDelimitedText( wxString* aDest, const char* aSource ) utf8 += cc; } else + { utf8 += cc; + } } } @@ -50,7 +53,7 @@ int ReadDelimitedText( wxString* aDest, const char* aSource ) } -int ReadDelimitedText( char* aDest, const char* aSource, int aDestSize ) +int ReadDelimitedText( char* aDest, const char* aSource, int aDestSize ) { if( aDestSize <= 0 ) return 0; @@ -75,6 +78,7 @@ int ReadDelimitedText( char* aDest, const char* aSource, int aDestSize ) if( cc == '\\' ) { cc = *aSource++; + if( !cc ) break; @@ -86,7 +90,9 @@ int ReadDelimitedText( char* aDest, const char* aSource, int aDestSize ) *aDest++ = cc; } else + { *aDest++ = cc; + } } } @@ -118,7 +124,9 @@ std::string EscapedUTF8( const wxString& aString ) ret += '\\'; } else + { ret += *it; + } } ret += '"'; @@ -127,9 +135,6 @@ std::string EscapedUTF8( const wxString& aString ) } -/* Remove leading and training spaces, tabs and end of line chars in text - * return a pointer on the first n char in text - */ char* StrPurge( char* text ) { static const char whitespace[] = " \t\n\r\f\v"; @@ -149,168 +154,96 @@ char* StrPurge( char* text ) } -/* Read lines from File - * Skip void lines and comments (starting by #) - * return the first non void line. - * increments *LineNum for each line - */ char* GetLine( FILE* File, char* Line, int* LineNum, int SizeLine ) { - do { + do { if( fgets( Line, SizeLine, File ) == NULL ) return NULL; + if( LineNum ) *LineNum += 1; - } while( Line[0] == '#' || Line[0] == '\n' || Line[0] == '\r' - || Line[0] == 0 ); + + } while( Line[0] == '#' || Line[0] == '\n' || Line[0] == '\r' || Line[0] == 0 ); strtok( Line, "\n\r" ); return Line; } -/* return in aBuffer the date and time - * time is the local time. - */ -char* DateAndTime( char* aBuffer ) -{ - wxString datetime; - - datetime = DateAndTime(); - strcpy( aBuffer, TO_UTF8( datetime ) ); - - return aBuffer; -} - - - -/* return the date and time in a wxString - * note: does the same thing than strftime() - * time is the local time. - */ wxString DateAndTime() { - wxString Line; - wxDateTime datetime = wxDateTime::Now(); datetime.SetCountry( wxDateTime::Country_Default ); - Line = datetime.Format( wxDefaultDateTimeFormat, wxDateTime::Local ); - - return Line; + return datetime.Format( wxDefaultDateTimeFormat, wxDateTime::Local ); } -/* - * sort() function - * Same as strncmp() but numbers in strings - * are compared according to the value, not the ascii value of each digit - */ -int StrLenNumCmp( const wxChar* str1, const wxChar* str2, int NbMax ) +int StrNumCmp( const wxChar* aString1, const wxChar* aString2, int aLength, bool aIgnoreCase ) { int i; int nb1 = 0, nb2 = 0; - if( ( str1 == NULL ) || ( str2 == NULL ) ) + if( ( aString1 == NULL ) || ( aString2 == NULL ) ) return 0; - for( i = 0; i < NbMax; i++ ) + for( i = 0; i < aLength; i++ ) { - if( isdigit( *str1 ) && isdigit( *str2 ) ) /* digit found */ + if( isdigit( *aString1 ) && isdigit( *aString2 ) ) /* digit found */ { - nb1 = 0; nb2 = 0; - while( isdigit( *str1 ) ) + nb1 = 0; + nb2 = 0; + + while( isdigit( *aString1 ) ) { - nb1 = nb1 * 10 + *str1 - '0'; str1++; + nb1 = nb1 * 10 + *aString1 - '0'; + aString1++; } - while( isdigit( *str2 ) ) + while( isdigit( *aString2 ) ) { - nb2 = nb2 * 10 + *str2 - '0'; str2++; + nb2 = nb2 * 10 + *aString2 - '0'; + aString2++; } if( nb1 < nb2 ) return -1; + if( nb1 > nb2 ) return 1; } - if( *str1 < *str2 ) - return -1; - if( *str1 > *str2 ) - return 1; - if( ( *str1 == 0 ) && ( *str2 == 0 ) ) - return 0; - str1++; str2++; + if( aIgnoreCase ) + { + if( toupper( *aString1 ) < toupper( *aString2 ) ) + return -1; + + if( toupper( *aString1 ) > toupper( *aString2 ) ) + return 1; + + if( ( *aString1 == 0 ) && ( *aString2 == 0 ) ) + return 0; + } + else + { + if( *aString1 < *aString2 ) + return -1; + + if( *aString1 > *aString2 ) + return 1; + + if( ( *aString1 == 0 ) && ( *aString2 == 0 ) ) + return 0; + } + + aString1++; + aString2++; } return 0; } -/* - * sort() function - * Same as stricmp() but numbers in strings - * are compared according to the value, not the ascii value of each digit - */ -int StrNumICmp( const wxChar* str1, const wxChar* str2 ) -{ - return StrLenNumICmp( str1, str2, 32735 ); -} - - -/* - * sort() function - * Same as strnicmp() but numbers in strings - * are compared according to the value, not the ascii value of each digit - */ -int StrLenNumICmp( const wxChar* str1, const wxChar* str2, int NbMax ) -{ - int i; - int nb1 = 0, nb2 = 0; - - if( ( str1 == NULL ) || ( str2 == NULL ) ) - return 0; - - for( i = 0; i < NbMax; i++ ) - { - if( isdigit( *str1 ) && isdigit( *str2 ) ) /* find number */ - { - nb1 = 0; nb2 = 0; - while( isdigit( *str1 ) ) - { - nb1 = nb1 * 10 + *str1 - '0'; str1++; - } - - while( isdigit( *str2 ) ) - { - nb2 = nb2 * 10 + *str2 - '0'; str2++; - } - - if( nb1 < nb2 ) - return -1; - if( nb1 > nb2 ) - return 1; - } - - if( toupper( *str1 ) < toupper( *str2 ) ) - return -1; - if( toupper( *str1 ) > toupper( *str2 ) ) - return 1; - if( (*str1 == 0 ) && ( *str2 == 0 ) ) - return 0; - str1++; str2++; - } - - return 0; -} - - -/* compare a string to a pattern - * ( usual chars * and ? allowed). - * if case_sensitive == true, comparison is case sensitive - * return true if match else false - */ bool WildCompareString( const wxString& pattern, const wxString& string_to_tst, bool case_sensitive ) { @@ -336,7 +269,8 @@ bool WildCompareString( const wxString& pattern, const wxString& string_to_tst, while( ( *string ) && ( *wild != '*' ) ) { if( ( *wild != *string ) && ( *wild != '?' ) ) - return FALSE; + return false; + wild++; string++; } @@ -370,16 +304,13 @@ bool WildCompareString( const wxString& pattern, const wxString& string_to_tst, } -/* Converts a string used to compensate for internalization of printf(). - * Generated floats with a comma instead of point. - * Obsolete: use SetLocaleTo_C_standard instead - */ char* to_point( char* Text ) { char* line = Text; if( Text == NULL ) return NULL; + for( ; *Text != 0; Text++ ) { if( *Text == ',' ) @@ -390,27 +321,6 @@ char* to_point( char* Text ) } -/* Convert string to upper case. - * Returns pointer to the converted string. - */ -char* strupper( char* Text ) -{ - char* code = Text; - - if( Text ) - { - while( *code ) - { - if( ( *code >= 'a' ) && ( *code <= 'z' ) ) - *code += 'A' - 'a'; - code++; - } - } - - return Text; -} - - int RefDesStringCompare( const wxString& strFWord, const wxString& strSWord ) { // The different sections of the first string @@ -422,10 +332,8 @@ int RefDesStringCompare( const wxString& strFWord, const wxString& strSWord ) int isEqual = 0; // The numerical results of a string compare int iReturn = 0; // The variable that is being returned - long lFirstDigit = 0; /* The converted middle section of the first - *string */ - long lSecondDigit = 0; /* The converted middle section of the second - *string */ + long lFirstDigit = 0; // The converted middle section of the first string + long lSecondDigit = 0; // The converted middle section of the second string // Split the two strings into separate parts SplitString( strFWord, &strFWordBeg, &strFWordMid, &strFWordEnd ); @@ -482,6 +390,7 @@ int SplitString( wxString strToSplit, // Starting at the end of the string look for the first digit int ii; + for( ii = (strToSplit.length() - 1); ii >= 0; ii-- ) { if( isdigit( strToSplit[ii] ) ) @@ -490,7 +399,9 @@ int SplitString( wxString strToSplit, // If there were no digits then just set the single string if( ii < 0 ) + { *strBeginning = strToSplit; + } else { // Since there is at least one digit this is the trailing string @@ -498,6 +409,7 @@ int SplitString( wxString strToSplit, // Go to the end of the digits int position = ii + 1; + for( ; ii >= 0; ii-- ) { if( !isdigit( strToSplit[ii] ) ) @@ -509,7 +421,7 @@ int SplitString( wxString strToSplit, *strDigits = strToSplit.substr( 0, position ); /* We were only looking for the last set of digits everything else is - *part of the preamble */ + * part of the preamble */ else { *strDigits = strToSplit.substr( ii + 1, position - ii - 1 ); diff --git a/cvpcb/class_cvpcb.cpp b/cvpcb/class_cvpcb.cpp index a45e0a76b4..e66048d9df 100644 --- a/cvpcb/class_cvpcb.cpp +++ b/cvpcb/class_cvpcb.cpp @@ -1,6 +1,6 @@ -/*******************/ -/* class_cvpcb.cpp */ -/*******************/ +/** + * @file class_cvpcb.cpp + */ #include "fctsys.h" #include "kicad_string.h" @@ -15,17 +15,19 @@ PIN::PIN() m_Type = 0; /* Electrical type. */ } + bool operator<( const PIN& item1, const PIN& item2 ) { - return ( StrLenNumICmp( item1.m_Number.GetData(), - item2.m_Number.GetData(), 4 ) < 0 ); + return StrNumCmp( item1.m_Number, item2.m_Number, 4, true ) < 0; } + bool operator==( const PIN& item1, const PIN& item2 ) { return ( item1.m_Number == item2.m_Number ); } + bool same_pin_number( const PIN* item1, const PIN* item2 ) { wxASSERT( item1 != NULL && item2 != NULL ); @@ -33,6 +35,7 @@ bool same_pin_number( const PIN* item1, const PIN* item2 ) return ( item1->m_Number == item2->m_Number ); } + bool same_pin_net( const PIN* item1, const PIN* item2 ) { wxASSERT( item1 != NULL && item2 != NULL ); @@ -47,13 +50,13 @@ COMPONENT::COMPONENT() m_Multi = 0; } + COMPONENT::~COMPONENT() { } + bool operator<( const COMPONENT& item1, const COMPONENT& item2 ) { - return ( StrNumICmp( item1.m_Reference.GetData(), - item2.m_Reference.GetData() ) < 0 ); + return StrNumCmp( item1.m_Reference, item2.m_Reference, INT_MAX, true ) < 0; } - diff --git a/cvpcb/savecmp.cpp b/cvpcb/savecmp.cpp index 8185df9359..008c50ff58 100644 --- a/cvpcb/savecmp.cpp +++ b/cvpcb/savecmp.cpp @@ -26,7 +26,6 @@ int CVPCB_MAINFRAME::SaveComponentList( const wxString& aFullFileName ) { FILE* dest; wxFileName fn( aFullFileName ); - char Line[1024]; wxString Title = wxGetApp().GetTitle() + wxT( " " ) + GetBuildVersion(); fn.SetExt( ComponentFileExtension ); @@ -38,7 +37,7 @@ int CVPCB_MAINFRAME::SaveComponentList( const wxString& aFullFileName ) fprintf( dest, "%s", EnteteCmpMod ); fprintf( dest, " Created by %s", TO_UTF8( Title ) ); - fprintf( dest, " date = %s\n", DateAndTime( Line ) ); + fprintf( dest, " date = %s\n", TO_UTF8( DateAndTime() ) ); BOOST_FOREACH( COMPONENT& component, m_components ) { diff --git a/cvpcb/writenetlistpcbnew.cpp b/cvpcb/writenetlistpcbnew.cpp index 9616f0bc96..8259fb4549 100644 --- a/cvpcb/writenetlistpcbnew.cpp +++ b/cvpcb/writenetlistpcbnew.cpp @@ -67,14 +67,11 @@ static void RemoveDuplicatePins( COMPONENT& component ) int CVPCB_MAINFRAME::GenNetlistPcbnew( FILE* file,bool isEESchemaNetlist ) { #define NETLIST_HEAD_STRING "EESchema Netlist Version 1.1" - char Line[1024]; - - DateAndTime( Line ); if( isEESchemaNetlist ) - fprintf( file, "# %s created %s\n(\n", NETLIST_HEAD_STRING, Line ); + fprintf( file, "# %s created %s\n(\n", NETLIST_HEAD_STRING, TO_UTF8( DateAndTime() ) ); else - fprintf( file, "( { netlist created %s }\n", Line ); + fprintf( file, "( { netlist created %s }\n", TO_UTF8( DateAndTime() ) ); BOOST_FOREACH( COMPONENT& component, m_components ) @@ -83,7 +80,6 @@ int CVPCB_MAINFRAME::GenNetlistPcbnew( FILE* file,bool isEESchemaNetlist ) if( !component.m_Module.IsEmpty() ) fprintf( file, "%s", TO_UTF8( component.m_Module ) ); - else fprintf( file, "$noname$" ); @@ -97,9 +93,7 @@ int CVPCB_MAINFRAME::GenNetlistPcbnew( FILE* file,bool isEESchemaNetlist ) BOOST_FOREACH( PIN& pin, component.m_Pins ) { if( !pin.m_Net.IsEmpty() ) - fprintf( file, " ( %s %s )\n", - TO_UTF8( pin.m_Number ), - TO_UTF8( pin.m_Net ) ); + fprintf( file, " ( %s %s )\n", TO_UTF8( pin.m_Number ), TO_UTF8( pin.m_Net ) ); else fprintf( file, " ( %s ? )\n", TO_UTF8( pin.m_Number ) ); } diff --git a/eeschema/class_libentry.cpp b/eeschema/class_libentry.cpp index c987bdeb11..f51c64aa5f 100644 --- a/eeschema/class_libentry.cpp +++ b/eeschema/class_libentry.cpp @@ -721,11 +721,10 @@ bool LIB_COMPONENT::Load( LINE_READER& aLineReader, wxString& aErrorMsg ) /* Copy part name and prefix. */ LIB_FIELD& value = GetValueField(); - strupper( componentName ); - if( componentName[0] != '~' ) { m_name = value.m_Text = FROM_UTF8( componentName ); + m_name = value.m_Text = m_name.MakeUpper(); } else { diff --git a/eeschema/class_library.cpp b/eeschema/class_library.cpp index 7a71fff0cd..75d7588e27 100644 --- a/eeschema/class_library.cpp +++ b/eeschema/class_library.cpp @@ -772,9 +772,7 @@ bool CMP_LIBRARY::SaveDocFile( const wxString& aFullFileName ) return false; } - char line[256]; - - if( fprintf( docfile, "%s Date: %s\n", DOCFILE_IDENT, DateAndTime( line ) ) < 0 ) + if( fprintf( docfile, "%s Date: %s\n", DOCFILE_IDENT, TO_UTF8( DateAndTime() ) ) < 0 ) { fclose( docfile ); return false; @@ -799,12 +797,8 @@ bool CMP_LIBRARY::SaveDocFile( const wxString& aFullFileName ) bool CMP_LIBRARY::SaveHeader( OUTPUTFORMATTER& aFormatter ) { - char BufLine[1024]; - - DateAndTime( BufLine ); - aFormatter.Print( 0, "%s %d.%d Date: %s\n", LIBFILE_IDENT, - LIB_VERSION_MAJOR, LIB_VERSION_MINOR, BufLine ); + LIB_VERSION_MAJOR, LIB_VERSION_MINOR, TO_UTF8( DateAndTime() ) ); aFormatter.Print( 0, "#encoding utf-8\n"); diff --git a/eeschema/dialogs/dialog_build_BOM.cpp b/eeschema/dialogs/dialog_build_BOM.cpp index 50c20bcced..6127718d56 100644 --- a/eeschema/dialogs/dialog_build_BOM.cpp +++ b/eeschema/dialogs/dialog_build_BOM.cpp @@ -460,7 +460,6 @@ void DIALOG_BUILD_BOM::GenereListeOfItems( const wxString& aFullFileName, { FILE* f; int itemCount; - char Line[1024]; wxString msg; if( ( f = wxFopen( aFullFileName, wxT( "wt" ) ) ) == NULL ) @@ -481,11 +480,9 @@ void DIALOG_BUILD_BOM::GenereListeOfItems( const wxString& aFullFileName, if( itemCount ) { // creates the list file - DateAndTime( Line ); - wxString Title = wxGetApp().GetAppName() + wxT( " " ) + GetBuildVersion(); - fprintf( f, "%s >> Creation date: %s\n", TO_UTF8( Title ), Line ); + fprintf( f, "%s >> Creation date: %s\n", TO_UTF8( Title ), TO_UTF8( DateAndTime() ) ); // sort component list cmplist.SortByReferenceOnly(); diff --git a/eeschema/libedit.cpp b/eeschema/libedit.cpp index 29a4d3f3b4..42f70c006f 100644 --- a/eeschema/libedit.cpp +++ b/eeschema/libedit.cpp @@ -103,9 +103,7 @@ bool LIB_EDIT_FRAME::LoadComponentFromCurrentLib( LIB_ALIAS* aLibEntry ) GetScreen()->ClearUndoRedoList(); Zoom_Automatique( false ); - DrawPanel->Refresh(); SetShowDeMorgan( m_component->HasConversion() ); - m_HToolBar->Refresh(); return true; } diff --git a/eeschema/netform.cpp b/eeschema/netform.cpp index 501a7fdcb2..618ed72953 100644 --- a/eeschema/netform.cpp +++ b/eeschema/netform.cpp @@ -646,14 +646,11 @@ static XNODE* node( const wxString& aName, const wxString& aTextualContent = wxE XNODE* EXPORT_HELP::makeGenericDesignHeader() { XNODE* xdesign = node( wxT("design") ); - char date[128]; - - DateAndTime( date ); // the root sheet is a special sheet, call it source xdesign->AddChild( node( wxT( "source" ), g_RootSheet->GetScreen()->GetFileName() ) ); - xdesign->AddChild( node( wxT( "date" ), FROM_UTF8( date )) ); + xdesign->AddChild( node( wxT( "date" ), DateAndTime() ) ); // which Eeschema tool xdesign->AddChild( node( wxT( "tool" ), wxGetApp().GetAppName() + wxChar(' ') + @@ -1193,7 +1190,6 @@ bool EXPORT_HELP::WriteGENERICNetList( const wxString& aOutFileName ) bool EXPORT_HELP::WriteNetListPspice( FILE* f, bool use_netnames, bool aUsePrefix ) { int ret = 0; - char line[1024]; int nbitems; wxString text; wxArrayString spiceCommandAtBeginFile; @@ -1208,9 +1204,8 @@ bool EXPORT_HELP::WriteNetListPspice( FILE* f, bool use_netnames, bool aUsePrefi wxString delimeters = wxT( "{:,; }" ); wxString disableStr = wxT( "N" ); - DateAndTime( line ); - - ret |= fprintf( f, "* %s (Spice format) creation date: %s\n\n", NETLIST_HEAD_STRING, line ); + ret |= fprintf( f, "* %s (Spice format) creation date: %s\n\n", + NETLIST_HEAD_STRING, TO_UTF8( DateAndTime() ) ); // Prepare list of nets generation (not used here, but... for( unsigned ii = 0; ii < g_NetObjectslist.size(); ii++ ) @@ -1236,16 +1231,19 @@ bool EXPORT_HELP::WriteNetListPspice( FILE* f, bool use_netnames, bool aUsePrefi SCH_TEXT* drawText = (SCH_TEXT*) item; text = drawText->m_Text; + if( text.IsEmpty() ) continue; ident = text.GetChar( 0 ); + if( ident != '.' && ident != '-' && ident != '+' ) continue; text.Remove( 0, 1 ); // Remove the first char. text.Remove( 6 ); // text contains 6 char. text.MakeLower(); + if( ( text == wxT( "pspice" ) ) || ( text == wxT( "gnucap" ) ) ) { // Put the Y position as an ascii string, for sort by vertical @@ -1484,18 +1482,17 @@ bool EXPORT_HELP::WriteNetListPCBNEW( FILE* f, bool with_pcbnew ) { wxString field; wxString footprint; - char dateBuf[256]; int ret = 0; // zero now, OR in the sign bit on error wxString netName; std::vector< SCH_REFERENCE > cmpList; - DateAndTime( dateBuf ); - if( with_pcbnew ) - ret |= fprintf( f, "# %s created %s\n(\n", NETLIST_HEAD_STRING, dateBuf ); + ret |= fprintf( f, "# %s created %s\n(\n", + NETLIST_HEAD_STRING, TO_UTF8( DateAndTime() ) ); else - ret |= fprintf( f, "( { %s created %s }\n", NETLIST_HEAD_STRING, dateBuf ); + ret |= fprintf( f, "( { %s created %s }\n", + NETLIST_HEAD_STRING, TO_UTF8( DateAndTime() ) ); // Prepare list of nets generation for( unsigned ii = 0; ii < g_NetObjectslist.size(); ii++ ) @@ -1860,15 +1857,13 @@ void EXPORT_HELP::WriteNetListCADSTAR( FILE* f ) wxString StartCmpDesc = StartLine + wxT( "ADD_COM" ); wxString msg; wxString footprint; - char Line[1024]; SCH_SHEET_PATH* sheet; EDA_ITEM* DrawList; SCH_COMPONENT* Component; wxString Title = wxGetApp().GetAppName() + wxT( " " ) + GetBuildVersion(); fprintf( f, "%sHEA\n", TO_UTF8( StartLine ) ); - DateAndTime( Line ); - fprintf( f, "%sTIM %s\n", TO_UTF8( StartLine ), Line ); + fprintf( f, "%sTIM %s\n", TO_UTF8( StartLine ), TO_UTF8( DateAndTime() ) ); fprintf( f, "%sAPP ", TO_UTF8( StartLine ) ); fprintf( f, "\"%s\"\n", TO_UTF8( Title ) ); fprintf( f, "\n" ); @@ -1887,6 +1882,7 @@ void EXPORT_HELP::WriteNetListCADSTAR( FILE* f ) for( DrawList = sheet->LastDrawList(); DrawList != NULL; DrawList = DrawList->Next() ) { DrawList = Component = findNextComponentAndCreatePinList( DrawList, sheet ); + if( Component == NULL ) break; diff --git a/gerbview/export_to_pcbnew.cpp b/gerbview/export_to_pcbnew.cpp index ee752ef871..a7ae7d0174 100644 --- a/gerbview/export_to_pcbnew.cpp +++ b/gerbview/export_to_pcbnew.cpp @@ -46,6 +46,7 @@ private: void cleanBoard(); }; + GBR_TO_PCB_EXPORTER::GBR_TO_PCB_EXPORTER( GERBVIEW_FRAME * aFrame, FILE * aFile ) { m_gerbview_frame = aFrame; @@ -53,13 +54,13 @@ GBR_TO_PCB_EXPORTER::GBR_TO_PCB_EXPORTER( GERBVIEW_FRAME * aFrame, FILE * aFile m_pcb = new BOARD( NULL, m_gerbview_frame ); } + GBR_TO_PCB_EXPORTER::~GBR_TO_PCB_EXPORTER() { delete m_pcb; } - /* Export data in Pcbnew format * remember Pcbnew uses a Y reversed axis, so we must negate all Y coordinates */ @@ -73,13 +74,14 @@ void GERBVIEW_FRAME::ExportDataInPcbnewFormat( wxCommandEvent& event ) { if( g_GERBER_List[ii] != NULL ) no_used_layers = false; + ii++; } if( no_used_layers ) { DisplayInfoMessage( this, - _( "None of the Gerber layers contain any data" ) ); + _( "None of the Gerber layers contain any data" ) ); return; } @@ -106,6 +108,7 @@ void GERBVIEW_FRAME::ExportDataInPcbnewFormat( wxCommandEvent& event ) LAYERS_MAP_DIALOG* dlg = new LAYERS_MAP_DIALOG( this ); int ok = dlg->ShowModal(); dlg->Destroy(); + if( ok != wxID_OK ) return; @@ -116,17 +119,20 @@ void GERBVIEW_FRAME::ExportDataInPcbnewFormat( wxCommandEvent& event ) } FILE * file = wxFopen( FullFileName, wxT( "wt" ) ); + if( file == NULL ) { msg = _( "Unable to create " ) + FullFileName; DisplayError( this, msg ); return; } + GBR_TO_PCB_EXPORTER gbr_exporter( this, file ); gbr_exporter.ExportPcb( dlg->GetLayersLookUpTable() ); fclose( file ); } + void GBR_TO_PCB_EXPORTER::cleanBoard() { // delete redundant vias @@ -138,9 +144,11 @@ void GBR_TO_PCB_EXPORTER::cleanBoard() // Search and delete others vias TRACK* next_track; TRACK* alt_track = track->Next(); + for( ; alt_track; alt_track = next_track ) { next_track = alt_track->Next(); + if( alt_track->m_Shape != VIA_THROUGH ) continue; @@ -154,6 +162,7 @@ void GBR_TO_PCB_EXPORTER::cleanBoard() } } + bool GBR_TO_PCB_EXPORTER::WriteSetup( ) { fprintf( m_file, "$SETUP\n" ); @@ -172,11 +181,13 @@ bool GBR_TO_PCB_EXPORTER::WriteGeneralDescrPcb( ) /* Print the copper layer count */ nbLayers = m_pcb->GetCopperLayerCount(); + if( nbLayers <= 1 ) // Minimal layers count in Pcbnew is 2 { nbLayers = 2; m_pcb->SetCopperLayerCount(2); } + fprintf( m_file, "$GENERAL\n" ); fprintf( m_file, "encoding utf-8\n"); fprintf( m_file, "LayerCount %d\n", nbLayers ); @@ -201,22 +212,22 @@ bool GBR_TO_PCB_EXPORTER::WriteGeneralDescrPcb( ) */ bool GBR_TO_PCB_EXPORTER::ExportPcb( int* LayerLookUpTable ) { - char line[256]; BOARD* gerberPcb = m_gerbview_frame->GetBoard(); // create an image of gerber data BOARD_ITEM* item = gerberPcb->m_Drawings; + for( ; item; item = item->Next() ) { GERBER_DRAW_ITEM* gerb_item = (GERBER_DRAW_ITEM*) item; int layer = gerb_item->GetLayer(); int pcb_layer_number = LayerLookUpTable[layer]; + if( pcb_layer_number < 0 || pcb_layer_number > LAST_NO_COPPER_LAYER ) continue; if( pcb_layer_number > LAST_COPPER_LAYER ) export_non_copper_item( gerb_item, pcb_layer_number ); - else export_copper_item( gerb_item, pcb_layer_number ); } @@ -228,7 +239,7 @@ bool GBR_TO_PCB_EXPORTER::ExportPcb( int* LayerLookUpTable ) // write PCB header fprintf( m_file, "PCBNEW-BOARD Version %d date %s\n\n", g_CurrentVersionPCB, - DateAndTime( line ) ); + TO_UTF8( DateAndTime() ) ); WriteGeneralDescrPcb( ); WriteSetup( ); @@ -273,6 +284,7 @@ void GBR_TO_PCB_EXPORTER::export_non_copper_item( GERBER_DRAW_ITEM* aGbrItem, in m_pcb->Add( drawitem ); } + void GBR_TO_PCB_EXPORTER::export_copper_item( GERBER_DRAW_ITEM* aGbrItem, int aLayer ) { switch( aGbrItem->m_Shape ) @@ -294,6 +306,7 @@ void GBR_TO_PCB_EXPORTER::export_copper_item( GERBER_DRAW_ITEM* aGbrItem, int aL } } + void GBR_TO_PCB_EXPORTER::export_segline_copper_item( GERBER_DRAW_ITEM* aGbrItem, int aLayer ) { TRACK * newtrack = new TRACK( m_pcb ); @@ -309,6 +322,7 @@ void GBR_TO_PCB_EXPORTER::export_segline_copper_item( GERBER_DRAW_ITEM* aGbrItem m_pcb->Add( newtrack ); } + void GBR_TO_PCB_EXPORTER::export_segarc_copper_item( GERBER_DRAW_ITEM* aGbrItem, int aLayer ) { double a = atan2( (double)( aGbrItem->m_Start.y - aGbrItem->m_ArcCentre.y ), @@ -323,12 +337,15 @@ void GBR_TO_PCB_EXPORTER::export_segarc_copper_item( GERBER_DRAW_ITEM* aGbrItem, * approximate arc by segments (16 segment per 360 deg) */ #define DELTA 3600/16 + if( arc_angle < 0 ) { NEGATE( arc_angle ); EXCHG( start, end ); } + wxPoint curr_start = start; + for( int rot = DELTA; rot < (arc_angle - DELTA); rot += DELTA ) { TRACK * newtrack = new TRACK( m_pcb ); @@ -344,6 +361,7 @@ void GBR_TO_PCB_EXPORTER::export_segarc_copper_item( GERBER_DRAW_ITEM* aGbrItem, m_pcb->Add( newtrack ); curr_start = curr_end; } + if( end != curr_start ) { TRACK * newtrack = new TRACK( m_pcb ); diff --git a/include/appl_wxstruct.h b/include/appl_wxstruct.h index 348a7b0bba..e1e7f9ec28 100644 --- a/include/appl_wxstruct.h +++ b/include/appl_wxstruct.h @@ -53,7 +53,7 @@ public: wxString m_BinDir; /* KiCad executable path.*/ wxString m_KicadEnv; /* environment variable KICAD */ - bool m_Env_Defined; // TRUE if environment KICAD is defined. + bool m_Env_Defined; // true if environment KICAD is defined. wxLocale* m_Locale; // The current locale. int m_LanguageId; // The current language setting. @@ -169,7 +169,7 @@ public: EDA_APP(); /** * Function WriteProjectConfig - * Save the current "projet" parameters + * Save the current "project" parameters * saved parameters are parameters that have the .m_Setup member set to false * saving file is the .pro file project */ @@ -202,7 +202,7 @@ public: EDA_APP(); /** * Function ReadProjectConfig - * Read the current "projet" parameters + * Read the current "project" parameters * Parameters are parameters that have the .m_Setup member set to false * read file is the .pro file project * @@ -237,7 +237,15 @@ public: EDA_APP(); const wxString& GroupName, bool ForceUseLocalConfig ); + /** + * Function ReadPdfBrowserInfos + * read the PDF browser choice from the common configuration. + */ void ReadPdfBrowserInfos(); + + /* Function WritePdfBrowserInfos + * save the PDF browser choice to the common configuration. + */ void WritePdfBrowserInfos(); /** diff --git a/include/class_base_screen.h b/include/class_base_screen.h index 7b94c53d25..772d037e46 100644 --- a/include/class_base_screen.h +++ b/include/class_base_screen.h @@ -113,10 +113,10 @@ public: * view position (upper left corner of device) */ - bool m_Center; /* Center on screen. If TRUE (0.0) is centered + bool m_Center; /* Center on screen. If true (0.0) is centered * on screen coordinates can be < 0 and * > 0 except for schematics. - * FALSE: when coordinates can only be >= 0 + * false: when coordinates can only be >= 0 * Schematic */ bool m_FirstRedraw; diff --git a/include/class_drawpanel.h b/include/class_drawpanel.h index a7d666f67a..f89381f45e 100644 --- a/include/class_drawpanel.h +++ b/include/class_drawpanel.h @@ -1,7 +1,7 @@ -/****************************** - * drawpanel.h: - * define class EDA_DRAW_PANEL - *************************************/ +/** + * @file class_drawpanel.h: + * @brief EDA_DRAW_PANEL class definition. + */ #ifndef PANEL_WXSTRUCT_H #define PANEL_WXSTRUCT_H @@ -30,7 +30,7 @@ typedef void ( *END_MOUSE_CAPTURE_CALLBACK )( EDA_DRAW_PANEL* aPanel, wxDC* aDC class EDA_DRAW_PANEL : public wxScrolledWindow { private: - int m_currentCursor; ///< Current mouse cursor shape id. + int m_currentCursor; ///< Current mouse cursor shape id. int m_defaultCursor; ///< The default mouse cursor shape id. bool m_showCrossHair; ///< Indicate if cross hair is to be shown. int m_cursorLevel; ///< Index for cursor redraw in XOR mode. @@ -43,13 +43,13 @@ public: int m_scrollIncrementY; // Y axis scroll increment in pixels per unit. bool m_AbortRequest; // Flag to abort long commands - bool m_AbortEnable; // TRUE if abort button or menu to be displayed + bool m_AbortEnable; // true if abort button or menu to be displayed - bool m_AutoPAN_Enable; // TRUE to allow auto pan - bool m_AutoPAN_Request; // TRUE to request an auto pan (will be made only if + bool m_AutoPAN_Enable; // true to allow auto pan + bool m_AutoPAN_Request; // true to request an auto pan (will be made only if // m_AutoPAN_Enable = true) int m_IgnoreMouseEvents; // when non-zero (true), then ignore mouse events - bool m_Block_Enable; // TRUE to accept Block Commands + bool m_Block_Enable; // true to accept Block Commands // useful to avoid false start block in certain cases // (like switch from a sheet to an other sheet diff --git a/include/common.h b/include/common.h index 69e9c8a058..eb22f5878e 100644 --- a/include/common.h +++ b/include/common.h @@ -137,7 +137,7 @@ extern wxString g_ProductName; /* Default user lib path can be left void, if the standard lib path is used */ extern wxString g_UserLibDirBuffer; -extern bool g_ShowPageLimits; // TRUE to display the page limits +extern bool g_ShowPageLimits; // true to display the page limits /* File name extension definitions. */ extern const wxString ProjectFileExtension; diff --git a/include/confirm.h b/include/confirm.h index 843ba2f439..f00208de54 100644 --- a/include/confirm.h +++ b/include/confirm.h @@ -1,5 +1,5 @@ /** - * This file is part of the common libary + * This file is part of the common library * @file confirm.h * @see common.h */ @@ -9,16 +9,37 @@ #define __INCLUDE__CONFIRM_H__ 1 -void DisplayError( wxWindow* parent, const wxString& msg, - int displaytime = 0 ); -void DisplayInfoMessage( wxWindow* parent, const wxString& msg, - int displaytime = 0 ); +/** + * Function DisplayError + * displays an error or warning message box with \a aMessage. + * + * @warning Setting \a displaytime does not work. Do not use it. + */ +void DisplayError( wxWindow* parent, const wxString& aMessage, int displaytime = 0 ); -bool IsOK( wxWindow* parent, const wxString& msg ); +/** + * Function DisplayInfoMessage + * displays an informational message box with \a aMessage. + * + * @warning Setting \a displaytime does not work. Do not use it. + */ +void DisplayInfoMessage( wxWindow* parent, const wxString& aMessage, int displaytime = 0 ); -void DisplayHtmlInfoMessage( wxWindow* parent, const wxString& title, - const wxString& msg, - const wxSize& size=wxDefaultSize ); +/** + * Function IsOK + * gets the user response to \a aMessage. + * + * @return True if user selected the yes button, otherwise false. + */ +bool IsOK( wxWindow* parent, const wxString& aMessage ); + +/** + * Function DisplayHtmlInforMessage + * displays \a aMessage in HTML format. + */ +void DisplayHtmlInfoMessage( wxWindow* parent, const wxString& title, + const wxString& aMessage, + const wxSize& size = wxDefaultSize ); #endif /* __INCLUDE__CONFIRM_H__ */ diff --git a/include/eda_doc.h b/include/eda_doc.h index 4ef705c0a2..fd6e0f3df2 100644 --- a/include/eda_doc.h +++ b/include/eda_doc.h @@ -8,22 +8,20 @@ #define __INCLUDE__EDA_DOC_H__ 1 -/* Search the text Database for found all the key words in the KeyList. +/** + * Function KeyWordOk + * searches \a aKeyList for any words found in \a aDatabase. * - * Returns: - * 0 if no keyword is found - * 1 if keyword found. + * @return 0 if no keyword is found or 1 if keyword is found. */ -int KeyWordOk( const wxString& KeyList, - const wxString& Database ); +int KeyWordOk( const wxString& aKeyList, const wxString& aDatabase ); /** * Function GetAssociatedDocument * open a document (file) with the suitable browser * @param aFrame = main frame * @param aDocName = filename of file to open (Full filename or short filename) - * if DocName is starting by http: or ftp: or www. the default internet - * browser is launched + * if \a aDocName begins with http: or ftp: or www. the default internet browser is launched * @param aPaths = a wxPathList to explore. * if NULL or aDocName is a full filename, aPath is not used. */ diff --git a/include/footprint_info.h b/include/footprint_info.h index e5fc746866..243a70f475 100644 --- a/include/footprint_info.h +++ b/include/footprint_info.h @@ -82,7 +82,8 @@ public: /** * Function ReadFootprintFiles - * Read the list of libraries (*.mod files) and populates m_List ( list of availaible modules in libs ). + * Read the list of libraries (*.mod files) and populates m_List ( list of availaible + * modules in libs ). * for each module, are stored * the module name * documentation string @@ -104,8 +105,7 @@ public: /* FOOTPRINT object list sort function. */ inline bool operator<( const FOOTPRINT_INFO& item1, const FOOTPRINT_INFO& item2 ) { - return ( StrNumICmp( item1.m_Module.GetData(), - item2.m_Module.GetData() ) < 0 ); + return StrNumCmp( item1.m_Module, item2.m_Module, INT_MAX, true ) < 0; } #endif // _FOOTPRINT_INFO_H_ diff --git a/include/gestfich.h b/include/gestfich.h index f3c328410d..db81f8a5e6 100644 --- a/include/gestfich.h +++ b/include/gestfich.h @@ -22,16 +22,26 @@ class EDA_LIST_DIALOG; * @param file = PDF file to open * @return true is success, false if no PDF viewer found */ -bool OpenPDF( const wxString& file ); +bool OpenPDF( const wxString& file ); -void OpenFile( const wxString& file ); +void OpenFile( const wxString& file ); -bool EDA_DirectorySelector( const wxString& Title, - wxString& Path, - int flag, /* reserve */ - wxWindow* Frame, - const wxPoint& Pos ); +bool EDA_DirectorySelector( const wxString& Title, + wxString& Path, + int flag, /* reserve */ + wxWindow* Frame, + const wxPoint& Pos ); +/* Selection file dialog box: + * Dialog title + * Default path + * default filename + * default filename extension + * filter for filename list + * parent frame + * wxFD_SAVE, wxFD_OPEN .. + * true = keep the current path + */ wxString EDA_FileSelector( const wxString& Title, const wxString& Path, const wxString& FileName, @@ -43,13 +53,20 @@ wxString EDA_FileSelector( const wxString& Title, const wxPoint& Pos = wxPoint( -1, -1 ) ); -/* Return file name without path or extension. +/** + * Function MakeReducedFileName + * calculate the "reduced" filename from \a fullfilename. * - * If the path is in the default KiCad path, ./ is prepended to the - * file name. If the file name has the default extension, the file - * name is returned without an extension. + * @param fullfilename = full filename + * @param default_path = default path + * @param default_ext = default extension + * @return the "reduced" filename, i.e.: + * without path if it is default_path + * with ./ if the path is the current path + * without extension if extension is default_ext + * + * the new filename is in unix like notation ('/' as path separator) */ - wxString MakeReducedFileName( const wxString& fullfilename, const wxString& default_path, const wxString& default_ext ); @@ -57,22 +74,67 @@ wxString MakeReducedFileName( const wxString& fullfilename, EDA_LIST_DIALOG* GetFileNames( char* Directory, char* Mask ); -int ExecuteFile( wxWindow* frame, const wxString& ExecFile, - const wxString& param = wxEmptyString ); -void AddDelimiterString( wxString& string ); +/** + * Function ExecuteFile + * calls the executable file \a ExecFile with the command line parameters \a param. + */ +int ExecuteFile( wxWindow* frame, const wxString& ExecFile, + const wxString& param = wxEmptyString ); -/* Find absolute path for kicad/help (or kicad/help/) */ -wxString FindKicadHelpPath(); +/** + * Function AddDelimiterString + * Add un " to the start and the end of string (if not already done). + * @param string = string to modify + */ +void AddDelimiterString( wxString& string ); +/** + * Function FindKicadHelpPath + * finds the absolute path for KiCad "help" (or "help/<language>") + * Find path kicad/doc/help/xx/ or kicad/doc/help/: + * from BinDir + * else from environment variable KICAD + * else from one of s_HelpPathList + * typically c:/kicad/doc/help or /usr/share/kicad/help + * or /usr/local/share/kicad/help + * (must have kicad in path name) + * + * xx = iso639-1 language id (2 letters (generic) or 4 letters): + * fr = french (or fr_FR) + * en = English (or en_GB or en_US ...) + * de = deutch + * es = spanish + * pt = portuguese (or pt_BR ...) + * + * default = en (if not found = fr) + */ +wxString FindKicadHelpPath(); -/* Return the KiCad common data path. */ -wxString ReturnKicadDatasPath(); - - -/* Search the executable file shortname in KiCad binary path and return - * full file name if found or shortname */ -wxString FindKicadFile( const wxString& shortname ); +/** + * Function ReturnKicadDatasPath + * returns the data path common to KiCad. + * If environment variable KICAD is defined (KICAD = path to kicad) + * Returns \ /; + * Otherwise returns \ / (if "kicad" is in the path name) + * Otherwise returns /usr /share/kicad/ + * + * Note: + * The \\ are replaced by / (a la Unix) + */ +wxString ReturnKicadDatasPath(); +/** + * Function FindKicadFile + * searches the executable file shortname in KiCad binary path and return full file + * name if found or shortname if the kicad binary path is kicad/bin. + * + * kicad binary path is found from: + * BinDir + * or environment variable KICAD + * or (default) c:\\kicad or /usr/local/kicad + * or default binary path + */ +wxString FindKicadFile( const wxString& shortname ); /** * Quote return value of wxFileName::GetFullPath(). @@ -83,7 +145,6 @@ wxString FindKicadFile( const wxString& shortname ); * @param format if provided, can be used to transform the nature of the * wrapped filename to another platform. */ -extern wxString QuoteFullPath( wxFileName& fn, - wxPathFormat format = wxPATH_NATIVE ); +extern wxString QuoteFullPath( wxFileName& fn, wxPathFormat format = wxPATH_NATIVE ); #endif /* __INCLUDE__GESTFICH_H__ */ diff --git a/include/kicad_string.h b/include/kicad_string.h index 70d5e7fb13..379035c20c 100644 --- a/include/kicad_string.h +++ b/include/kicad_string.h @@ -11,9 +11,6 @@ #include -char* strupper( char* Text ); -char* strlower( char* Text ); - /** * Function ReadDelimitedText @@ -28,7 +25,7 @@ char* strlower( char* Text ); * the number copied, due to escaping of double quotes and the escape byte itself. * @deprecated should use the one which fetches a wxString, below. */ -int ReadDelimitedText( char* aDest, const char* aSource, int aDestSize ); +int ReadDelimitedText( char* aDest, const char* aSource, int aDestSize ); /** * Function ReadDelimitedText @@ -52,63 +49,62 @@ int ReadDelimitedText( wxString* aDest, const char* aSource ); */ std::string EscapedUTF8( const wxString& aString ); - -/* Read one line line from a file. - * Returns the first useful line read by eliminating blank lines and comments. +/** + * Function GetLine + * reads one line line from \a aFile. + * @return A pointer the first useful line read by eliminating blank lines and comments. */ -char* GetLine( FILE* File, - char* Line, - int* LineNum = NULL, - int SizeLine = 255 ); +char* GetLine( FILE* aFile, char* Line, int* LineNum = NULL, int SizeLine = 255 ); -/* Remove leading and trailing whitespace. +/** + * Funxtion StrPurge + * removes leading and training spaces, tabs and end of line chars in \a text + * return a pointer on the first n char in text */ -char* StrPurge( char* text ); +char* StrPurge( char* text ); - -/*Return a string giving the current date and time. -*/ -char* DateAndTime( char* line ); +/** + * Function DateAndTime + * @return a string giving the current date and time. + */ wxString DateAndTime(); - -/* - * Routine (compatible with qsort ()) to sort by alphabetical order. - * Equivalent to strncmp () but the numbers are compared by their integer - * value not by their ASCII code. +/** + * Function StrLenNumCmp + * is a routine compatible with qsort() to sort by alphabetical order. + * + * This function is equivalent to strncmp() or strnicmp() if \a aIgnoreCase is true + * except that strings containing numbers are compared by their integer value not + * by their ASCII code. + * + * @param aString1 A wxChar pointer to the reference string. + * @param aString2 A wxChar pointer to the comparison string. + * @param aLength The numbere of characters to compare. Set to -1 to compare + * the entire string. + * @param aIgnoreCase Use true to make the comparison case insensitive. + * @return An integer value of -1 if \a aString1 is less than \a aString2, 0 if + * \a aString1 is equal to \a aString2, or 1 if \a aString1 is greater + * than \a aString2. */ -int StrLenNumCmp( const wxChar* str1, - const wxChar* str2, - int NbMax ); +int StrNumCmp( const wxChar* aString1, const wxChar* aString2, int aLength = INT_MAX, + bool aIgnoreCase = false ); -/* - * Routine (compatible with qsort ()) to sort by case insensitive alphabetical - * order. - * Equivalent to strnicmp () but the numbers are compared by their integer - * value not by their ASCII code. +/** + * Function WildCompareString + * compares a string against wild card (* and ?) pattern using the usual rules. + * @return true if pattern matched otherwise false. */ -int StrNumICmp( const wxChar* str1, - const wxChar* str2 ); +bool WildCompareString( const wxString& pattern, + const wxString& string_to_tst, + bool case_sensitive = true ); - -int StrLenNumICmp( const wxChar* str1, - const wxChar* str2, - int NbMax ); - -/* Compare string against wild card pattern using the usual rules. - * (Wildcards *,?). - * The reference string is "pattern" - * If case_sensitive == TRUE (default), exact comparison - * Returns TRUE if pattern matched otherwise FALSE. +/** + * Function to_point + * converts a string used to compensate for internalization of printf(). It generates + * floating point numbers with a comma instead of point. + * @deprecated Use SetLocaleTo_C_standard instead. */ - -bool WildCompareString( const wxString& pattern, - const wxString& string_to_tst, - bool case_sensitive = TRUE ); - -/* Replaces decimal point with commas to generated international numbers. - */ -char* to_point( char* Text ); +char* to_point( char* Text ); /** * Function RefDesStringCompare @@ -118,7 +114,7 @@ char* to_point( char* Text ); * return 0 if the strings are equal * return 1 if the first string is greater than the second */ -int RefDesStringCompare( const wxString& lhs, const wxString& rhs ); +int RefDesStringCompare( const wxString& lhs, const wxString& rhs ); /** * Function SplitString diff --git a/include/param_config.h b/include/param_config.h index c584e7b86c..436386fc96 100644 --- a/include/param_config.h +++ b/include/param_config.h @@ -140,9 +140,9 @@ public: int m_Default; ///< The default value of the parameter public: PARAM_CFG_BOOL( const wxChar* ident, bool* ptparam, - int default_val = FALSE, const wxChar* group = NULL ); + int default_val = false, const wxChar* group = NULL ); PARAM_CFG_BOOL( bool Insetup, const wxChar* ident, bool* ptparam, - int default_val = FALSE, const wxChar* group = NULL ); + int default_val = false, const wxChar* group = NULL ); virtual void ReadParam( wxConfigBase* aConfig ); virtual void SaveParam( wxConfigBase* aConfig ); diff --git a/include/pcbstruct.h b/include/pcbstruct.h index 6bd0bc1c5d..49e29e4a0b 100644 --- a/include/pcbstruct.h +++ b/include/pcbstruct.h @@ -53,7 +53,7 @@ public: int DisplayModEdge; int DisplayModText; - bool DisplayPcbTrackFill; /* FALSE = sketch , TRUE = filled */ + bool DisplayPcbTrackFill; /* false = sketch , true = filled */ /// How trace clearances are displayed. @see TRACE_CLEARANCE_DISPLAY_MODE_T. TRACE_CLEARANCE_DISPLAY_MODE_T ShowTrackClearanceMode; diff --git a/include/wxBasePcbFrame.h b/include/wxBasePcbFrame.h index 21b056c2fc..e1d29a619d 100644 --- a/include/wxBasePcbFrame.h +++ b/include/wxBasePcbFrame.h @@ -69,7 +69,7 @@ public: int m_DisplayModEdge; // How to display module drawings (line/ filled / sketch) int m_DisplayModText; // How to display module texts (line/ filled / sketch) - bool m_DisplayPcbTrackFill; // FALSE : tracks are show in sketch mode, TRUE = filled. + bool m_DisplayPcbTrackFill; // false : tracks are show in sketch mode, true = filled. EDA_UNITS_T m_UserGridUnit; wxRealPoint m_UserGridSize; diff --git a/include/wxEeschemaStruct.h b/include/wxEeschemaStruct.h index dae981d571..d9d6856f7f 100644 --- a/include/wxEeschemaStruct.h +++ b/include/wxEeschemaStruct.h @@ -714,7 +714,7 @@ private: SCH_NO_CONNECT* AddNoConnect( wxDC* aDC, const wxPoint& aPosition ); // Junction - SCH_JUNCTION* AddJunction( wxDC* aDC, const wxPoint& aPosition, bool aPutInUndoList = FALSE ); + SCH_JUNCTION* AddJunction( wxDC* aDC, const wxPoint& aPosition, bool aPutInUndoList = false ); /** * Function MoveItem diff --git a/include/wxstruct.h b/include/wxstruct.h index f3de177ead..27a323e83b 100644 --- a/include/wxstruct.h +++ b/include/wxstruct.h @@ -397,12 +397,12 @@ public: // = 1000 for Eeschema, = 10000 // for Pcbnew and GerbView - bool m_Draw_Axis; // TRUE to show X and Y axis - bool m_Draw_Grid_Axis; // TRUE to show grid axis. - bool m_Draw_Sheet_Ref; // TRUE to show frame references + bool m_Draw_Axis; // true to show X and Y axis + bool m_Draw_Grid_Axis; // true to show grid axis. + bool m_Draw_Sheet_Ref; // true to show frame references - bool m_Print_Sheet_Ref; // TRUE to print frame references - bool m_Draw_Auxiliary_Axis; /* TRUE to show auxiliary axis. + bool m_Print_Sheet_Ref; // true to print frame references + bool m_Draw_Auxiliary_Axis; /* true to show auxiliary axis. * Used in Pcbnew: the auxiliary * axis is the origin of * coordinates for drill, gerber @@ -712,6 +712,10 @@ public: */ virtual bool HandleBlockEnd( wxDC* DC ); + /** + * Function CopyToClipboard + * copies the current page or the current block to the clipboard. + */ void CopyToClipboard( wxCommandEvent& event ); /* interprocess communication */ diff --git a/pcbnew/class_footprint_library.cpp b/pcbnew/class_footprint_library.cpp index ae6e14ed85..79641ae113 100644 --- a/pcbnew/class_footprint_library.cpp +++ b/pcbnew/class_footprint_library.cpp @@ -166,8 +166,7 @@ bool FOOTPRINT_LIBRARY::ReadSectionIndex() bool FOOTPRINT_LIBRARY::WriteHeader() { - char line[256]; - fprintf( m_file, "%s %s\n", FOOTPRINT_LIBRARY_HEADER, DateAndTime( line ) ); + fprintf( m_file, "%s %s\n", FOOTPRINT_LIBRARY_HEADER, TO_UTF8( DateAndTime() ) ); fprintf( m_file, "# encoding utf-8\n" ); return true; } diff --git a/pcbnew/gen_drill_report_files.cpp b/pcbnew/gen_drill_report_files.cpp index 6cde832807..3523850e09 100644 --- a/pcbnew/gen_drill_report_files.cpp +++ b/pcbnew/gen_drill_report_files.cpp @@ -298,7 +298,7 @@ void GenDrillReportFile( FILE* aFile, BOARD* aPcb, fprintf( aFile, "Drill report for %s\n", TO_UTF8( aBoardFilename ) ); - fprintf( aFile, "Created on %s\n", DateAndTime( line ) ); + fprintf( aFile, "Created on %s\n", TO_UTF8( DateAndTime() ) ); // List which Drill Unit option had been selected for the associated // drill aFile. diff --git a/pcbnew/gen_modules_placefile.cpp b/pcbnew/gen_modules_placefile.cpp index 346302e46a..ad7270b880 100644 --- a/pcbnew/gen_modules_placefile.cpp +++ b/pcbnew/gen_modules_placefile.cpp @@ -41,10 +41,10 @@ static void WriteDrawSegmentPcb( DRAWSEGMENT* PtDrawSegment, FILE* rptfile ); /* Sort function use by GenereModulesPosition() */ static int ListeModCmp( const void* o1, const void* o2 ) { - LIST_MOD* ref = (LIST_MOD*) o1; - LIST_MOD* cmp = (LIST_MOD*) o2; + LIST_MOD* ref = (LIST_MOD*) o1; + LIST_MOD* cmp = (LIST_MOD*) o2; - return StrLenNumCmp( ref->m_Reference, cmp->m_Reference, 16 ); + return StrNumCmp( ref->m_Reference, cmp->m_Reference, 16 ); } @@ -79,7 +79,6 @@ void PCB_EDIT_FRAME::GenModulesPosition( wxCommandEvent& event ) MODULE* module; LIST_MOD* Liste = 0; char line[1024]; - char Buff[80]; wxFileName fnFront; wxFileName fnBack; wxString msg; @@ -214,7 +213,7 @@ void PCB_EDIT_FRAME::GenModulesPosition( wxCommandEvent& event ) qsort( Liste, moduleCount, sizeof(LIST_MOD), ListeModCmp ); // Write file header - sprintf( line, "### Module positions - created on %s ###\n", DateAndTime( Buff ) ); + sprintf( line, "### Module positions - created on %s ###\n", TO_UTF8( DateAndTime() ) ); fputs( line, fpFront ); if( doBoardBack ) @@ -325,7 +324,7 @@ void PCB_EDIT_FRAME::GenModuleReport( wxCommandEvent& event ) double conv_unit; MODULE* Module; D_PAD* pad; - char line[1024], Buff[80]; + char line[1024]; wxFileName fn; wxString fnFront, msg; FILE* rptfile; @@ -361,7 +360,7 @@ void PCB_EDIT_FRAME::GenModuleReport( wxCommandEvent& event ) SetLocaleTo_C_standard(); /* Generate header file comments.) */ - sprintf( line, "## Module report - date %s\n", DateAndTime( Buff ) ); + sprintf( line, "## Module report - date %s\n", TO_UTF8( DateAndTime() ) ); fputs( line, rptfile ); wxString Title = wxGetApp().GetAppName() + wxT( " " ) + GetBuildVersion(); diff --git a/pcbnew/gendrill.cpp b/pcbnew/gendrill.cpp index af21f12cf0..df25289589 100644 --- a/pcbnew/gendrill.cpp +++ b/pcbnew/gendrill.cpp @@ -502,18 +502,14 @@ void EXCELLON_WRITER::WriteCoordinates( char* aLine, double aCoordX, double aCoo */ void EXCELLON_WRITER::WriteHeader() { - char Line[256]; - fputs( "M48\n", m_file ); // The beginning of a header if( !m_minimalHeader ) { - DateAndTime( Line ); - // The next 2 lines in EXCELLON files are comments: wxString msg = wxGetApp().GetTitle() + wxT( " " ) + GetBuildVersion(); fprintf( m_file, ";DRILL file {%s} date %s\n", TO_UTF8( msg ), - Line ); + TO_UTF8( DateAndTime() ) ); msg = wxT( ";FORMAT={" ); // Print precision: @@ -532,6 +528,7 @@ void EXCELLON_WRITER::WriteHeader() * be added here */ msg << wxT( " / " ); + const wxString zero_fmt[4] = { wxT( "decimal" ), diff --git a/pcbnew/ioascii.cpp b/pcbnew/ioascii.cpp index 8c46b7a70e..7d90c55537 100644 --- a/pcbnew/ioascii.cpp +++ b/pcbnew/ioascii.cpp @@ -1149,7 +1149,6 @@ int PCB_EDIT_FRAME::ReadPcbFile( LINE_READER* aReader, bool Append ) int PCB_EDIT_FRAME::SavePcbFormatAscii( FILE* aFile ) { bool rc; - char line[256]; GetBoard()->m_Status_Pcb &= ~CONNEXION_OK; @@ -1161,7 +1160,7 @@ int PCB_EDIT_FRAME::SavePcbFormatAscii( FILE* aFile ) /* Writing file header. */ fprintf( aFile, "PCBNEW-BOARD Version %d date %s\n\n", g_CurrentVersionPCB, - DateAndTime( line ) ); + TO_UTF8( DateAndTime() ) ); fprintf( aFile, "# Created by Pcbnew%s\n\n", TO_UTF8( GetBuildVersion() ) ); GetBoard()->SynchronizeNetsAndNetClasses(); diff --git a/pcbnew/moduleframe.cpp b/pcbnew/moduleframe.cpp index 1e8fef344e..f4011f01ae 100644 --- a/pcbnew/moduleframe.cpp +++ b/pcbnew/moduleframe.cpp @@ -1,3 +1,28 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com + * Copyright (C) 2008-2011 Wayne Stambaugh + * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + /** * @file moduleframe.cpp * @brief Footprint (module) editor main window. @@ -29,9 +54,7 @@ static BOARD_DESIGN_SETTINGS s_ModuleEditorDesignSetting; wxString FOOTPRINT_EDIT_FRAME::m_CurrentLib = wxEmptyString; -/******************************/ -/* class FOOTPRINT_EDIT_FRAME */ -/******************************/ + BEGIN_EVENT_TABLE( FOOTPRINT_EDIT_FRAME, PCB_BASE_FRAME ) EVT_MENU_RANGE( ID_POPUP_PCB_ITEM_SELECTION_START, ID_POPUP_PCB_ITEM_SELECTION_END, PCB_BASE_FRAME::ProcessItemSelection ) @@ -88,7 +111,7 @@ BEGIN_EVENT_TABLE( FOOTPRINT_EDIT_FRAME, PCB_BASE_FRAME ) EVT_MENU( ID_PCB_DRAWINGS_WIDTHS_SETUP, FOOTPRINT_EDIT_FRAME::Process_Special_Functions ) EVT_MENU( ID_PCB_PAD_SETUP, FOOTPRINT_EDIT_FRAME::Process_Special_Functions ) - EVT_MENU( ID_PCB_USER_GRID_SETUP, PCB_EDIT_FRAME::Process_Special_Functions ) + EVT_MENU( ID_PCB_USER_GRID_SETUP, FOOTPRINT_EDIT_FRAME::Process_Special_Functions ) // Menu 3D Frame EVT_MENU( ID_MENU_PCB_SHOW_3D_FRAME, FOOTPRINT_EDIT_FRAME::Show3D_Frame ) diff --git a/pcbnew/xchgmod.cpp b/pcbnew/xchgmod.cpp index 7caa4ce303..c543774c38 100644 --- a/pcbnew/xchgmod.cpp +++ b/pcbnew/xchgmod.cpp @@ -189,7 +189,7 @@ int DIALOG_EXCHANGE_MODULE::Maj_ListeCmp( const wxString& reference, } fgets( Line, sizeof(Line), FichCmp ); - fprintf( NewFile, "Cmp-Mod V01 Genere par PcbNew le %s\n", DateAndTime( Line ) ); + fprintf( NewFile, "Cmp-Mod V01 Genere par PcbNew le %s\n", TO_UTF8( DateAndTime() ) ); bool start_descr = false; @@ -616,7 +616,7 @@ void PCB_EDIT_FRAME::RecreateCmpFileFromBoard( wxCommandEvent& aEvent ) } fgets( Line, sizeof(Line), FichCmp ); - fprintf( FichCmp, "Cmp-Mod V01 Genere par PcbNew le %s\n", DateAndTime( Line ) ); + fprintf( FichCmp, "Cmp-Mod V01 Genere par PcbNew le %s\n", TO_UTF8( DateAndTime() ) ); for( ; Module != NULL; Module = Module->Next() ) {