GerbView: fix path bug due to quoted command paramaters.

* It appears the wxApp leaves the trailing double quote when handling a quoted parameter list
  that was causing the project path passed from KiCad to have a trailing double quote which caused
  a file read error.
* Remvoe all comments from source file gerbview/gerbview_frame.cpp.
* Remove unused and empty function GERBVIEW_FRAME::SetAllVisibles().
* Add path paramters to KiCad executable launcher so we can see the full command string.
This commit is contained in:
Wayne Stambaugh 2015-09-25 19:34:57 -04:00
parent 3ef7df3be5
commit 78dc14c078
3 changed files with 41 additions and 123 deletions

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -59,10 +59,6 @@ static const wxString cfgShowNegativeObjects( wxT( "ShowNegativeObjectsOpt" )
static const wxString cfgShowBorderAndTitleBlock( wxT( "ShowBorderAndTitleBlock" ) ); static const wxString cfgShowBorderAndTitleBlock( wxT( "ShowBorderAndTitleBlock" ) );
/*************************************/
/* class GERBVIEW_FRAME for GerbView */
/*************************************/
GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent ): GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent ):
EDA_DRAW_FRAME( aKiway, aParent, FRAME_GERBER, wxT( "GerbView" ), EDA_DRAW_FRAME( aKiway, aParent, FRAME_GERBER, wxT( "GerbView" ),
wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, GERBVIEW_FRAME_NAME ) wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, GERBVIEW_FRAME_NAME )
@ -194,10 +190,22 @@ void GERBVIEW_FRAME::OnCloseWindow( wxCloseEvent& Event )
bool GERBVIEW_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl ) bool GERBVIEW_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl )
{ {
// The current project path is also a valid command parameter. Check if a single path // The current project path is also a valid command parameter. Check if a single path
// was passed to GerbView and use it as the initial MRU path. // rather than a file name was passed to GerbView and use it as the initial MRU path.
if( aFileSet.size() == 1 && !wxFileExists( aFileSet[0] ) && wxDirExists( aFileSet[0] ) ) if( aFileSet.size() > 0 )
{ {
m_mruPath = aFileSet[0]; wxString path = aFileSet[0];
// For some reason wxApp appears to leave the trailing double quote on quoted
// parameters which are required for paths with spaces. Maybe this should be
// pushed back into PGM_SINGLE_TOP::OnPgmInit() but that may cause other issues.
// We can't buy a break!
if( path.Last() == wxChar( '\"' ) )
path.RemoveLast();
if( !wxFileExists( path ) && wxDirExists( path ) )
{
wxLogDebug( wxT( "MRU path: %s." ), GetChars( path ) );
m_mruPath = path;
return true; return true;
} }
@ -211,6 +219,7 @@ bool GERBVIEW_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
setActiveLayer( layer ); setActiveLayer( layer );
LoadGerberFiles( aFileSet[i] ); LoadGerberFiles( aFileSet[i] );
} }
}
Zoom_Automatique( true ); // Zoom fit in frame Zoom_Automatique( true ); // Zoom fit in frame
@ -271,7 +280,7 @@ void GERBVIEW_FRAME::LoadSettings( wxConfigBase* aCfg )
aCfg->Read( cfgShowNegativeObjects, &tmp, false ); aCfg->Read( cfgShowNegativeObjects, &tmp, false );
SetElementVisibility( NEGATIVE_OBJECTS_VISIBLE, tmp ); SetElementVisibility( NEGATIVE_OBJECTS_VISIBLE, tmp );
// because we have 2 file historues, we must read this one // because we have 2 file histories, we must read this one
// using a specific path // using a specific path
aCfg->SetPath( wxT( "drl_files" ) ); aCfg->SetPath( wxT( "drl_files" ) );
m_drillFileHistory.Load( *aCfg ); m_drillFileHistory.Load( *aCfg );
@ -321,12 +330,7 @@ void GERBVIEW_FRAME::ReFillLayerWidget()
syncLayerWidget(); syncLayerWidget();
} }
/**
* Function SetElementVisibility
* changes the visibility of an element category
* @param aItemIdVisible is an item id from the enum GERBER_VISIBLE_ID
* @param aNewState = The new visibility state of the element category
*/
void GERBVIEW_FRAME::SetElementVisibility( GERBER_VISIBLE_ID aItemIdVisible, void GERBVIEW_FRAME::SetElementVisibility( GERBER_VISIBLE_ID aItemIdVisible,
bool aNewState ) bool aNewState )
{ {
@ -347,6 +351,7 @@ void GERBVIEW_FRAME::SetElementVisibility( GERBER_VISIBLE_ID aItemIdVisible,
default: default:
wxLogDebug( wxT( "GERBVIEW_FRAME::SetElementVisibility(): bad arg %d" ), aItemIdVisible ); wxLogDebug( wxT( "GERBVIEW_FRAME::SetElementVisibility(): bad arg %d" ), aItemIdVisible );
} }
m_LayersManager->SetRenderState( aItemIdVisible, aNewState ); m_LayersManager->SetRenderState( aItemIdVisible, aNewState );
} }
@ -379,12 +384,6 @@ void GERBVIEW_FRAME::syncLayerWidget()
} }
/**
* Function syncLayerBox
* updates the currently "selected" layer within m_SelLayerBox
* The currently active layer, as defined by the return value of
* getActiveLayer(). And updates the colored icon in the toolbar.
*/
void GERBVIEW_FRAME::syncLayerBox() void GERBVIEW_FRAME::syncLayerBox()
{ {
m_SelLayerBox->Resync(); m_SelLayerBox->Resync();
@ -405,6 +404,7 @@ void GERBVIEW_FRAME::syncLayerBox()
UpdateTitleAndInfo(); UpdateTitleAndInfo();
} }
void GERBVIEW_FRAME::Liste_D_Codes() void GERBVIEW_FRAME::Liste_D_Codes()
{ {
int ii, jj; int ii, jj;
@ -469,15 +469,7 @@ void GERBVIEW_FRAME::Liste_D_Codes()
} }
/*
* Function UpdateTitleAndInfo
* displays the short filename (if exists) of the selected layer
* on the caption of the main GerbView window
* displays image name and the last layer name (found in the gerber file: LN <name> command)
* in the status bar
* Note layer name can change when reading a gerber file, and the layer name is the last found.
* So, show the layer name is not very useful, and can be seen as a debug feature.
*/
void GERBVIEW_FRAME::UpdateTitleAndInfo() void GERBVIEW_FRAME::UpdateTitleAndInfo()
{ {
GERBER_IMAGE* gerber = g_GERBER_List.GetGbrImage( getActiveLayer() ); GERBER_IMAGE* gerber = g_GERBER_List.GetGbrImage( getActiveLayer() );
@ -497,8 +489,10 @@ void GERBVIEW_FRAME::UpdateTitleAndInfo()
text = _( "File:" ); text = _( "File:" );
text << wxT( " " ) << gerber->m_FileName; text << wxT( " " ) << gerber->m_FileName;
if( gerber->m_IsX2_file ) if( gerber->m_IsX2_file )
text << wxT( " " ) << _( "(with X2 Attributes)" ); text << wxT( " " ) << _( "(with X2 Attributes)" );
SetTitle( text ); SetTitle( text );
gerber->DisplayImageInfo(); gerber->DisplayImageInfo();
@ -525,12 +519,7 @@ void GERBVIEW_FRAME::UpdateTitleAndInfo()
m_auimgr.Update(); m_auimgr.Update();
} }
/*
* Function IsElementVisible
* tests whether a given element category is visible
* aItemIdVisible is an item id from the enum GERBER_VISIBLE_ID
* return true if the element is visible.
*/
bool GERBVIEW_FRAME::IsElementVisible( GERBER_VISIBLE_ID aItemIdVisible ) const bool GERBVIEW_FRAME::IsElementVisible( GERBER_VISIBLE_ID aItemIdVisible ) const
{ {
switch( aItemIdVisible ) switch( aItemIdVisible )
@ -555,44 +544,18 @@ bool GERBVIEW_FRAME::IsElementVisible( GERBER_VISIBLE_ID aItemIdVisible ) const
} }
/**
* Function SetVisibleAlls
* Set the status of all layers to VISIBLE
*/
void GERBVIEW_FRAME::SetVisibleAlls()
{
}
/**
* Function GetVisibleLayers
* is a proxy function that calls the correspondent function in m_BoardSettings
* Returns a bit-mask of all the layers that are visible
* @return int - the visible layers in bit-mapped form.
*/
long GERBVIEW_FRAME::GetVisibleLayers() const long GERBVIEW_FRAME::GetVisibleLayers() const
{ {
return -1; // TODO return -1; // TODO
} }
/**
* Function SetVisibleLayers
* is a proxy function that calls the correspondent function in m_BoardSettings
* changes the bit-mask of visible layers
* @param aLayerMask = The new bit-mask of visible layers
*/
void GERBVIEW_FRAME::SetVisibleLayers( long aLayerMask ) void GERBVIEW_FRAME::SetVisibleLayers( long aLayerMask )
{ {
// GetGerberLayout()->SetVisibleLayers( aLayerMask ); // GetGerberLayout()->SetVisibleLayers( aLayerMask );
} }
/**
* Function IsLayerVisible
* tests whether a given layer is visible
* @param aLayer = The layer to be tested
* @return bool - true if the layer is visible.
*/
bool GERBVIEW_FRAME::IsLayerVisible( int aLayer ) const bool GERBVIEW_FRAME::IsLayerVisible( int aLayer ) const
{ {
if( ! m_DisplayOptions.m_IsPrinting ) if( ! m_DisplayOptions.m_IsPrinting )
@ -602,11 +565,6 @@ bool GERBVIEW_FRAME::IsLayerVisible( int aLayer ) const
} }
/**
* Function GetVisibleElementColor
* returns the color of a pcb visible element.
* @see enum PCB_VISIBLE
*/
EDA_COLOR_T GERBVIEW_FRAME::GetVisibleElementColor( GERBER_VISIBLE_ID aItemIdVisible ) const EDA_COLOR_T GERBVIEW_FRAME::GetVisibleElementColor( GERBER_VISIBLE_ID aItemIdVisible ) const
{ {
EDA_COLOR_T color = UNSPECIFIED_COLOR; EDA_COLOR_T color = UNSPECIFIED_COLOR;
@ -630,9 +588,7 @@ EDA_COLOR_T GERBVIEW_FRAME::GetVisibleElementColor( GERBER_VISIBLE_ID aItemIdVis
return color; return color;
} }
/*
* Virtual from EDA_DRAW_FRAME
*/
void GERBVIEW_FRAME::SetGridVisibility( bool aVisible ) void GERBVIEW_FRAME::SetGridVisibility( bool aVisible )
{ {
EDA_DRAW_FRAME::SetGridVisibility( aVisible ); EDA_DRAW_FRAME::SetGridVisibility( aVisible );
@ -661,14 +617,6 @@ void GERBVIEW_FRAME::SetVisibleElementColor( GERBER_VISIBLE_ID aItemIdVisible,
} }
} }
/*
* Function GetNegativeItemsColor
* returns the color of negative items.
* This is usually the background color, but can be an other color
* in order to see negative objects
* therefore returns the background color if negative items not visible
* and the color selection of negative items if they are visible
*/
EDA_COLOR_T GERBVIEW_FRAME::GetNegativeItemsColor() const EDA_COLOR_T GERBVIEW_FRAME::GetNegativeItemsColor() const
{ {
if( IsElementVisible( NEGATIVE_OBJECTS_VISIBLE ) ) if( IsElementVisible( NEGATIVE_OBJECTS_VISIBLE ) )
@ -678,41 +626,24 @@ EDA_COLOR_T GERBVIEW_FRAME::GetNegativeItemsColor() const
} }
/*
* Function GetLayerColor
* gets a layer color for any valid layer.
*/
EDA_COLOR_T GERBVIEW_FRAME::GetLayerColor( int aLayer ) const EDA_COLOR_T GERBVIEW_FRAME::GetLayerColor( int aLayer ) const
{ {
return m_colorsSettings->GetLayerColor( aLayer ); return m_colorsSettings->GetLayerColor( aLayer );
} }
/**
* Function SetLayerColor
* changes a layer color for any valid layer.
*/
void GERBVIEW_FRAME::SetLayerColor( int aLayer, EDA_COLOR_T aColor ) void GERBVIEW_FRAME::SetLayerColor( int aLayer, EDA_COLOR_T aColor )
{ {
m_colorsSettings->SetLayerColor( aLayer, aColor ); m_colorsSettings->SetLayerColor( aLayer, aColor );
} }
/**
* Function getActiveLayer
* returns the active layer
*/
int GERBVIEW_FRAME::getActiveLayer() int GERBVIEW_FRAME::getActiveLayer()
{ {
return ( (GBR_SCREEN*) GetScreen() )->m_Active_Layer; return ( (GBR_SCREEN*) GetScreen() )->m_Active_Layer;
} }
/**
* Function setActiveLayer
* will change the currently active layer to \a aLayer and also
* update the PCB_LAYER_WIDGET.
*/
void GERBVIEW_FRAME::setActiveLayer( int aLayer, bool doLayerWidgetUpdate ) void GERBVIEW_FRAME::setActiveLayer( int aLayer, bool doLayerWidgetUpdate )
{ {
( (GBR_SCREEN*) GetScreen() )->m_Active_Layer = aLayer; ( (GBR_SCREEN*) GetScreen() )->m_Active_Layer = aLayer;
@ -794,19 +725,12 @@ void GERBVIEW_FRAME::SetCurItem( GERBER_DRAW_ITEM* aItem, bool aDisplayInfo )
} }
/*
* Function GetGerberLayoutBoundingBox
* returns the bounding box containing all gerber items.
*/
EDA_RECT GERBVIEW_FRAME::GetGerberLayoutBoundingBox() EDA_RECT GERBVIEW_FRAME::GetGerberLayoutBoundingBox()
{ {
GetGerberLayout()->ComputeBoundingBox(); GetGerberLayout()->ComputeBoundingBox();
return GetGerberLayout()->GetBoundingBox(); return GetGerberLayout()->GetBoundingBox();
} }
/*
* Update the status bar information.
*/
void GERBVIEW_FRAME::UpdateStatusBar() void GERBVIEW_FRAME::UpdateStatusBar()
{ {
EDA_DRAW_FRAME::UpdateStatusBar(); EDA_DRAW_FRAME::UpdateStatusBar();

View File

@ -301,12 +301,6 @@ public:
*/ */
void SetElementVisibility( GERBER_VISIBLE_ID aItemIdVisible, bool aNewState ); void SetElementVisibility( GERBER_VISIBLE_ID aItemIdVisible, bool aNewState );
/**
* Function SetVisibleAlls
* Set the status of all visible element categories and layers to VISIBLE
*/
void SetVisibleAlls();
/** /**
* Function SetGridVisibility(), virtual from EDA_DRAW_FRAME * Function SetGridVisibility(), virtual from EDA_DRAW_FRAME
* It may be overloaded by derived classes * It may be overloaded by derived classes

View File

@ -267,8 +267,8 @@ void KICAD_MANAGER_FRAME::Execute( wxWindow* frame, const wxString& execFile,
if( pid > 0 ) if( pid > 0 )
{ {
wxString msg = wxString::Format( _( "%s opened [pid=%ld]\n" ), wxString msg = wxString::Format( _( "%s %s opened [pid=%ld]\n" ),
GetChars( execFile ), pid ); GetChars( execFile ), GetChars( params ), pid );
PrintMsg( msg ); PrintMsg( msg );
} }