diff --git a/notes_about_pcbnew_new_file_format.odt b/Documentation/notes_about_pcbnew_new_file_format.odt similarity index 100% rename from notes_about_pcbnew_new_file_format.odt rename to Documentation/notes_about_pcbnew_new_file_format.odt diff --git a/common/dialog_about/AboutDialog_main.cpp b/common/dialog_about/AboutDialog_main.cpp index d66561fe5d..91377a60a1 100644 --- a/common/dialog_about/AboutDialog_main.cpp +++ b/common/dialog_about/AboutDialog_main.cpp @@ -302,6 +302,8 @@ static void InitKiCadAboutNew( AboutAppInfo& info ) new Contributor( wxT( "IƱigo Zuluagaz" ), wxT( "inigo_zuluaga@yahoo.es" ), wxT( "Icons by" ), KiBitmapNew( edit_module_xpm ) ) ); info.AddArtist( new Contributor( wxT( "Fabrizio Tappero" ), wxT( "fabrizio.tappero@gmail.com" ), wxT( "New icons by" ), KiBitmapNew( edit_module_xpm ) ) ); + info.AddArtist( + new Contributor( wxT( "Konstantin Baranovskiy" ), wxT( "baranovskiykonstantin@gmail.com" ), wxT( "New icons by" ), KiBitmapNew( edit_module_xpm ) ) ); info.AddArtist( new Contributor( wxT( "Renie Marquet" ), wxT( "reniemarquet@uol.com.br" ), wxT( "3D modules by" ), KiBitmapNew( three_d_xpm ) ) ); info.AddArtist( diff --git a/common/eda_doc.cpp b/common/eda_doc.cpp index 495359cf06..0c5d756fa5 100644 --- a/common/eda_doc.cpp +++ b/common/eda_doc.cpp @@ -19,6 +19,9 @@ void EDA_APP::ReadPdfBrowserInfos() wxASSERT( m_commonSettings != NULL ); m_PdfBrowser = m_commonSettings->Read( wxT( "PdfBrowserName" ), wxEmptyString ); + int tmp; + m_commonSettings->Read( wxT( "UseSystemBrowser" ), &tmp, 0 ); + m_useSystemPdfBrowser = tmp != 0; } @@ -27,6 +30,7 @@ void EDA_APP::WritePdfBrowserInfos() wxASSERT( m_commonSettings != NULL ); m_commonSettings->Write( wxT( "PdfBrowserName" ), m_PdfBrowser ); + m_commonSettings->Write( wxT( "UseSystemBrowser" ), m_useSystemPdfBrowser ); } diff --git a/common/edaappl.cpp b/common/edaappl.cpp index a512c0dc84..d01535c76c 100644 --- a/common/edaappl.cpp +++ b/common/edaappl.cpp @@ -273,6 +273,7 @@ EDA_APP::EDA_APP() m_Locale = NULL; m_projectSettings = NULL; m_commonSettings = NULL; + ForceSystemPdfBrowser( false ); } diff --git a/cvpcb/cvframe.cpp b/cvpcb/cvframe.cpp index 307ee5829b..3a93d2e72f 100644 --- a/cvpcb/cvframe.cpp +++ b/cvpcb/cvframe.cpp @@ -934,6 +934,15 @@ void CVPCB_MAINFRAME::CreateScreenCmp() { if( m_DisplayFootprintFrame->IsIconized() ) m_DisplayFootprintFrame->Iconize( false ); + + // The display footprint window might be buried under some other + // windows, so CreateScreenCmp() on an existing window would not + // show any difference, leaving the user confused. + // So we want to put it to front, second after our CVPCB_MAINFRAME. + // We do this by a little dance of bringing it to front then the main + // frame back. + m_DisplayFootprintFrame->Raise(); // Make sure that is visible. + Raise(); // .. but still we want the focus. } m_DisplayFootprintFrame->InitDisplay(); diff --git a/include/appl_wxstruct.h b/include/appl_wxstruct.h index e58dd4f6be..a4305a4d28 100644 --- a/include/appl_wxstruct.h +++ b/include/appl_wxstruct.h @@ -97,6 +97,9 @@ protected: /// The file name of the the program selected for browsing pdf files. wxString m_PdfBrowser; + /// true to use the selected PDF browser, if exists, or false to use the default + bool m_useSystemPdfBrowser; + wxPathList m_searchPaths; wxFileHistory m_fileHistory; wxString m_HelpFileName; @@ -150,11 +153,29 @@ public: wxLocale* GetLocale() { return m_Locale; } + /** + * @return the full file name of the prefered PDF browser + * ( the file name is empty if no prefered there is no PDF browser selected + */ wxString GetPdfBrowserFileName() const { return m_PdfBrowser; } + /** + * Set the name of a prefered PDF browser, which could be an alternate browser + * to the system PDF browser. + */ void SetPdfBrowserFileName( const wxString& aFileName ) { m_PdfBrowser = aFileName; } - bool UseSystemPdfBrowser() const { return m_PdfBrowser.IsEmpty(); } + /** + * @return true if the PDF browser is the default (system) PDF browser + * and false if the PDF browser is the prefered (selected) browser + * returns false if there is no selected browser + */ + bool UseSystemPdfBrowser() const { return m_useSystemPdfBrowser || m_PdfBrowser.IsEmpty(); } + + /** + * force the use of system PDF browser, even if a preferend PDF browser is set + */ + void ForceSystemPdfBrowser( bool aFlg ) { m_useSystemPdfBrowser = aFlg; } wxFileHistory& GetFileHistory() { return m_fileHistory; } diff --git a/kicad/menubar.cpp b/kicad/menubar.cpp index 90af49c3ff..77283b6a53 100644 --- a/kicad/menubar.cpp +++ b/kicad/menubar.cpp @@ -97,7 +97,6 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar() // static to remember this menu // Create and try to get the current menubar - wxMenuItem* item; wxMenuBar* menuBar = GetMenuBar(); if( !menuBar ) @@ -219,32 +218,24 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar() wxMenu* SubMenuPdfBrowserChoice = new wxMenu; // Default - item = new wxMenuItem( SubMenuPdfBrowserChoice, - ID_SELECT_DEFAULT_PDF_BROWSER, - _( "&Default" ), - _( "Use system default PDF viewer used to browse datasheets" ), - wxITEM_CHECK ); - - SETBITMAPS( datasheet_xpm ); - - SubMenuPdfBrowserChoice->Append( item ); + AddMenuItem( SubMenuPdfBrowserChoice, ID_SELECT_DEFAULT_PDF_BROWSER, + _( "&Default" ), + _( "Use system default PDF viewer used to browse datasheets" ), + KiBitmap( datasheet_xpm ), + wxITEM_CHECK ); SubMenuPdfBrowserChoice->Check( ID_SELECT_DEFAULT_PDF_BROWSER, wxGetApp().UseSystemPdfBrowser() ); // Favourite - item = new wxMenuItem( SubMenuPdfBrowserChoice, - ID_SELECT_PREFERED_PDF_BROWSER, - _( "&Favourite" ), - _( "Use your favourite PDF viewer used to browse datasheets" ), - wxITEM_CHECK ); - - SETBITMAPS( preference_xpm ); - - SubMenuPdfBrowserChoice->Append( item ); - SubMenuPdfBrowserChoice->AppendSeparator(); + AddMenuItem( SubMenuPdfBrowserChoice, ID_SELECT_PREFERED_PDF_BROWSER, + _( "&Favourite" ), + _( "Use your favourite PDF viewer used to browse datasheets" ), + KiBitmap( preference_xpm ), + wxITEM_CHECK ); SubMenuPdfBrowserChoice->Check( ID_SELECT_PREFERED_PDF_BROWSER, !wxGetApp().UseSystemPdfBrowser() ); + SubMenuPdfBrowserChoice->AppendSeparator(); // Append PDF Viewer submenu to preferences AddMenuItem( SubMenuPdfBrowserChoice, ID_SELECT_PREFERED_PDF_BROWSER_NAME, @@ -253,8 +244,7 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar() KiBitmap( datasheet_xpm ) ); // PDF viewer submenu - AddMenuItem( preferencesMenu, - SubMenuPdfBrowserChoice, -1, + AddMenuItem( preferencesMenu, SubMenuPdfBrowserChoice, -1, _( "&PDF Viewer" ), _( "PDF viewer preferences" ), KiBitmap( datasheet_xpm ) ); @@ -270,14 +260,12 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar() AddHelpVersionInfoMenuEntry( helpMenu ); // Contents - AddMenuItem( helpMenu, - wxID_HELP, + AddMenuItem( helpMenu, wxID_HELP, _( "&Contents" ), _( "Open the KiCad handbook" ), KiBitmap( online_help_xpm ) ); - AddMenuItem( helpMenu, - wxID_INDEX, + AddMenuItem( helpMenu, wxID_INDEX, _( "&Getting Started in KiCad" ), _( "Open the \"Getting Started in KiCad\" guide for beginners" ), KiBitmap( help_xpm ) ); @@ -286,8 +274,7 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar() helpMenu->AppendSeparator(); // About - AddMenuItem( helpMenu, - wxID_ABOUT, + AddMenuItem( helpMenu, wxID_ABOUT, _( "&About KiCad" ), _( "About KiCad project manager" ), KiBitmap( info_xpm ) ); diff --git a/kicad/preferences.cpp b/kicad/preferences.cpp index b7e046c878..3842cea75b 100644 --- a/kicad/preferences.cpp +++ b/kicad/preferences.cpp @@ -49,6 +49,7 @@ void KICAD_MANAGER_FRAME::OnUpdateDefaultPdfBrowser( wxUpdateUIEvent& event ) void KICAD_MANAGER_FRAME::OnSelectDefaultPdfBrowser( wxCommandEvent& event ) { + wxGetApp().ForceSystemPdfBrowser( true ); wxGetApp().WritePdfBrowserInfos(); } @@ -61,26 +62,34 @@ void KICAD_MANAGER_FRAME::OnUpdatePreferredPdfBrowser( wxUpdateUIEvent& event ) void KICAD_MANAGER_FRAME::OnSelectPreferredPdfBrowser( wxCommandEvent& event ) { - bool select = event.GetId() == ID_SELECT_PREFERED_PDF_BROWSER_NAME; + wxGetApp().ForceSystemPdfBrowser( false ); - if( !wxGetApp().GetPdfBrowserFileName() && !select ) + bool selectName = event.GetId() == ID_SELECT_PREFERED_PDF_BROWSER_NAME; + if( wxGetApp().GetPdfBrowserFileName().IsEmpty() && !selectName ) { DisplayError( this, _( "You must choose a PDF viewer before using this option." ) ); } - wxString wildcard( wxT( "*" ) ); + if( !wxGetApp().GetPdfBrowserFileName().IsEmpty() && !selectName ) + { + wxGetApp().WritePdfBrowserInfos(); + return; + } + + wxString mask( wxT( "*" ) ); #ifdef __WINDOWS__ - wildcard += wxT( ".exe" ); + mask += wxT( ".exe" ); #endif - wildcard = _( "Executable files (" ) + wildcard + wxT( ")|" ) + wildcard; + wxString wildcard = _( "Executable files (" ) + mask + wxT( ")|" ) + mask; wxGetApp().ReadPdfBrowserInfos(); wxFileName fn = wxGetApp().GetPdfBrowserFileName(); + wxFileDialog dlg( this, _( "Select Preferred Pdf Browser" ), fn.GetPath(), - fn.GetFullName(), wildcard, + fn.GetFullPath(), wildcard, wxFD_OPEN | wxFD_FILE_MUST_EXIST ); if( dlg.ShowModal() == wxID_CANCEL ) diff --git a/pcb_calculator/tracks_width_versus_current.cpp b/pcb_calculator/tracks_width_versus_current.cpp index 331dbac0a0..3145f87524 100644 --- a/pcb_calculator/tracks_width_versus_current.cpp +++ b/pcb_calculator/tracks_width_versus_current.cpp @@ -28,6 +28,7 @@ * for more info */ +#include #include #include @@ -67,10 +68,10 @@ void PCB_CALCULATOR_FRAME::TW_WriteConfig() void PCB_CALCULATOR_FRAME::OnTWCalculateButt( wxCommandEvent& event ) { // Prepare parameters: - double current = ReturnDoubleFromString( m_TrackCurrentValue->GetValue() ); - double thickness = ReturnDoubleFromString( m_TrackThicknessValue->GetValue() ); - double deltaT_C = ReturnDoubleFromString( m_TrackDeltaTValue->GetValue() ); - double track_len = ReturnDoubleFromString( m_TrackLengthValue->GetValue() ); + double current = std::abs( ReturnDoubleFromString( m_TrackCurrentValue->GetValue() ) ); + double thickness = std::abs( ReturnDoubleFromString( m_TrackThicknessValue->GetValue() ) ); + double deltaT_C = std::abs( ReturnDoubleFromString( m_TrackDeltaTValue->GetValue() ) ); + double track_len = std::abs( ReturnDoubleFromString( m_TrackLengthValue->GetValue() ) ); double extTrackWidth; double intTrackWidth; @@ -91,13 +92,16 @@ void PCB_CALCULATOR_FRAME::OnTWCalculateButt( wxCommandEvent& event ) double scale = m_TW_ExtTrackWidth_choiceUnit->GetUnitScale(); double ext_area = thickness * extTrackWidth; msg.Printf( wxT( "%g" ), ext_area / (scale * scale) ); + m_ExtTrackAreaValue->SetValue( msg ); wxString strunit = m_TW_ExtTrackWidth_choiceUnit->GetUnitName(); msg = strunit + wxT( " x " ) + strunit; m_ExtTrackAreaUnitLabel->SetLabel( msg ); + scale = m_TW_IntTrackWidth_choiceUnit->GetUnitScale(); double int_area = thickness * intTrackWidth; msg.Printf( wxT( "%g" ), int_area / (scale * scale) ); + m_IntTrackAreaValue->SetValue( msg ); strunit = m_TW_IntTrackWidth_choiceUnit->GetUnitName(); msg = strunit + wxT( " x " ) + strunit; @@ -108,6 +112,7 @@ void PCB_CALCULATOR_FRAME::OnTWCalculateButt( wxCommandEvent& event ) double ext_res = rho / ext_area * track_len; msg.Printf( wxT( "%g" ), ext_res ); m_ExtTrackResistValue->SetValue( msg ); + double int_res = rho / int_area * track_len; msg.Printf( wxT( "%g" ), int_res ); m_IntTrackResistValue->SetValue( msg ); @@ -116,6 +121,7 @@ void PCB_CALCULATOR_FRAME::OnTWCalculateButt( wxCommandEvent& event ) double ext_drop_volt = ext_res * current; msg.Printf( wxT( "%g" ), ext_drop_volt ); m_ExtTrackVDropValue->SetValue( msg ); + double int_drop_volt = int_res * current; msg.Printf( wxT( "%g" ), int_drop_volt ); m_IntTrackVDropValue->SetValue( msg ); @@ -124,6 +130,7 @@ void PCB_CALCULATOR_FRAME::OnTWCalculateButt( wxCommandEvent& event ) double loss = ext_drop_volt * current; msg.Printf( wxT( "%g" ), loss ); m_ExtTrackLossValue->SetValue( msg ); + loss = int_drop_volt * current; msg.Printf( wxT( "%g" ), loss ); m_IntTrackLossValue->SetValue( msg ); diff --git a/pcbnew/exporters/export_idf.cpp b/pcbnew/exporters/export_idf.cpp index 6becbe26cf..3d363f5caa 100644 --- a/pcbnew/exporters/export_idf.cpp +++ b/pcbnew/exporters/export_idf.cpp @@ -334,7 +334,7 @@ static void idf_export_module( BOARD* aPcb, MODULE* aModule, refdes = aIDFBoard.GetRefDes(); } - double rotz = modfile->m_MatRotation.z + aModule->GetOrientation()/10.0; + double rotz = aModule->GetOrientation()/10.0; double locx = modfile->m_MatPosition.x; double locy = modfile->m_MatPosition.y; double locz = modfile->m_MatPosition.z; @@ -343,6 +343,7 @@ static void idf_export_module( BOARD* aPcb, MODULE* aModule, if( top ) { + rotz += modfile->m_MatRotation.z; locy = -locy; RotatePoint( &locx, &locy, aModule->GetOrientation() ); locy = -locy; @@ -352,6 +353,7 @@ static void idf_export_module( BOARD* aPcb, MODULE* aModule, RotatePoint( &locx, &locy, aModule->GetOrientation() ); locy = -locy; + rotz -= modfile->m_MatRotation.z; rotz = 180.0 - rotz; if( rotz >= 360.0 ) diff --git a/pcbnew/exporters/idf.cpp b/pcbnew/exporters/idf.cpp index 03a29692bf..21e4af1c9d 100644 --- a/pcbnew/exporters/idf.cpp +++ b/pcbnew/exporters/idf.cpp @@ -1055,13 +1055,35 @@ bool IDF_COMP::substituteComponent( FILE* aLibFile ) if( parent->RegisterOutline( "NOGEOM_NOPART" ) ) return true; + // Create a star shape 5mm high with points on 5 and 2.5 mm circles fprintf( aLibFile, ".ELECTRICAL\n" ); fprintf( aLibFile, "\"NOGEOM\" \"NOPART\" MM 5\n" ); - // TODO: for now we shall use a simple cylinder; a more intricate - // and readily recognized feature (a stylistic X) would be of - // much greater value. - fprintf( aLibFile, "0 0 0 0\n" ); - fprintf( aLibFile, "0 2.5 0 360\n" ); + + double a, da, x, y; + da = M_PI / 5.0; + a = da / 2.0; + + for( int i = 0; i < 10; ++i ) + { + if( i & 1 ) + { + x = 2.5 * cos( a ); + y = 2.5 * sin( a ); + } + else + { + x = 1.5 * cos( a ); + y = 1.5 * sin( a ); + } + + a += da; + fprintf( aLibFile, "0 %.3f %.3f 0\n", x, y ); + } + + a = da / 2.0; + x = 1.5 * cos( a ); + y = 1.5 * sin( a ); + fprintf( aLibFile, "0 %.3f %.3f 0\n", x, y ); fprintf( aLibFile, ".END_ELECTRICAL\n\n" ); return true;