* Add Henner's patch (with minimal changes) to ensure CVpcb footprint view window is always brought into view, even after being hidden by another window

This commit is contained in:
Brian Sidebotham 2014-02-07 18:36:12 +00:00
commit 159017ed62
11 changed files with 109 additions and 45 deletions

View File

@ -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(

View File

@ -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 );
}

View File

@ -273,6 +273,7 @@ EDA_APP::EDA_APP()
m_Locale = NULL;
m_projectSettings = NULL;
m_commonSettings = NULL;
ForceSystemPdfBrowser( false );
}

View File

@ -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();

View File

@ -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; }

View File

@ -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,
AddMenuItem( SubMenuPdfBrowserChoice, ID_SELECT_DEFAULT_PDF_BROWSER,
_( "&Default" ),
_( "Use system default PDF viewer used to browse datasheets" ),
KiBitmap( datasheet_xpm ),
wxITEM_CHECK );
SETBITMAPS( datasheet_xpm );
SubMenuPdfBrowserChoice->Append( item );
SubMenuPdfBrowserChoice->Check( ID_SELECT_DEFAULT_PDF_BROWSER,
wxGetApp().UseSystemPdfBrowser() );
// Favourite
item = new wxMenuItem( SubMenuPdfBrowserChoice,
ID_SELECT_PREFERED_PDF_BROWSER,
AddMenuItem( SubMenuPdfBrowserChoice, ID_SELECT_PREFERED_PDF_BROWSER,
_( "&Favourite" ),
_( "Use your favourite PDF viewer used to browse datasheets" ),
KiBitmap( preference_xpm ),
wxITEM_CHECK );
SETBITMAPS( preference_xpm );
SubMenuPdfBrowserChoice->Append( item );
SubMenuPdfBrowserChoice->AppendSeparator();
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 ) );

View File

@ -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 )

View File

@ -28,6 +28,7 @@
* for more info
*/
#include <cmath>
#include <wx/wx.h>
#include <wx/config.h>
@ -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 );

View File

@ -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 )

View File

@ -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;