*) Switch to later environment variable expansion in fp-lib-table.

*) Save library nickname in APP so upon module editor re-entry last is re-used.
*) Fix bug editing fp-lib-table Description field.
This commit is contained in:
Dick Hollenbeck 2013-11-19 11:24:45 -06:00
parent 468d50317d
commit f3ad2463e2
5 changed files with 130 additions and 47 deletions

View File

@ -71,7 +71,71 @@ void FP_LIB_TABLE::ROW::SetType( const wxString& aType )
void FP_LIB_TABLE::ROW::SetFullURI( const wxString& aFullURI ) void FP_LIB_TABLE::ROW::SetFullURI( const wxString& aFullURI )
{ {
uri_user = aFullURI; uri_user = aFullURI;
#if !FP_LATE_ENVVAR
uri_expanded = FP_LIB_TABLE::ExpandSubstitutions( aFullURI ); uri_expanded = FP_LIB_TABLE::ExpandSubstitutions( aFullURI );
#endif
}
const wxString FP_LIB_TABLE::ROW::GetFullURI( bool aSubstituted ) const
{
if( aSubstituted )
{
#if !FP_LATE_ENVVAR // early expansion
return uri_expanded;
#else // late expansion
return FP_LIB_TABLE::ExpandSubstitutions( uri_user );
#endif
}
else
return uri_user;
}
FP_LIB_TABLE::ROW::ROW( const ROW& a ) :
nickName( a.nickName ),
type( a.type ),
options( a.options ),
description( a.description ),
properties( 0 )
{
// may call ExpandSubstitutions()
SetFullURI( a.uri_user );
if( a.properties )
properties = new PROPERTIES( *a.properties );
}
FP_LIB_TABLE::ROW& FP_LIB_TABLE::ROW::operator=( const ROW& r )
{
nickName = r.nickName;
type = r.type;
options = r.options;
description = r.description;
properties = r.properties ? new PROPERTIES( *r.properties ) : NULL;
// may call ExpandSubstitutions()
SetFullURI( r.uri_user );
// Do not copy the PLUGIN, it is lazily created. Delete any existing
// destination plugin.
setPlugin( NULL );
return *this;
}
bool FP_LIB_TABLE::ROW::operator==( const ROW& r ) const
{
return nickName == r.nickName
&& uri_user == r.uri_user
&& type == r.type
&& options == r.options
&& description == r.description
;
} }

View File

@ -27,13 +27,13 @@
#define FP_LIB_TABLE_H_ #define FP_LIB_TABLE_H_
#include <macros.h> #include <macros.h>
#include <vector> #include <vector>
#include <map> #include <map>
#include <io_mgr.h> #include <io_mgr.h>
#define FP_LATE_ENVVAR 1 ///< late=1/early=0 environment variable expansion
#define KISYSMOD "KISYSMOD" #define KISYSMOD "KISYSMOD"
class wxFileName; class wxFileName;
@ -122,44 +122,17 @@ public:
SetType( aType ); SetType( aType );
} }
ROW( const ROW& a ) : ROW( const ROW& a );
nickName( a.nickName ),
uri_user( a.uri_user ),
uri_expanded( a.uri_expanded ),
type( a.type ),
options( a.options ),
description( a.description ),
properties( 0 )
{
if( a.properties )
properties = new PROPERTIES( *a.properties );
}
~ROW() ~ROW()
{ {
delete properties; delete properties;
} }
ROW& operator=( const ROW& r ) ROW& operator=( const ROW& r );
{
nickName = r.nickName;
uri_user = r.uri_user;
uri_expanded = r.uri_expanded;
type = r.type;
options = r.options;
description = r.description;
properties = r.properties ? new PROPERTIES( *r.properties ) : NULL;
// do not copy the PLUGIN, it is lazily created. /// Used in DIALOG_FP_LIB_TABLE for detecting an edit.
setPlugin( NULL ); bool operator==( const ROW& r ) const;
return *this;
}
bool operator==( const ROW& r ) const
{
return nickName==r.nickName && uri_user==r.uri_user && type==r.type && options==r.options;
}
bool operator!=( const ROW& r ) const { return !( *this == r ); } bool operator!=( const ROW& r ) const { return !( *this == r ); }
@ -196,13 +169,7 @@ public:
* *
* @param aSubstituted Tells if caller wanted the substituted form, else not. * @param aSubstituted Tells if caller wanted the substituted form, else not.
*/ */
const wxString& GetFullURI( bool aSubstituted = false ) const const wxString GetFullURI( bool aSubstituted = false ) const;
{
if( aSubstituted )
return uri_expanded;
else
return uri_user;
}
/** /**
* Function SetFullURI * Function SetFullURI
@ -280,7 +247,11 @@ public:
wxString nickName; wxString nickName;
wxString uri_user; ///< what user entered from UI or loaded from disk wxString uri_user; ///< what user entered from UI or loaded from disk
#if !FP_LATE_ENVVAR
wxString uri_expanded; ///< from ExpandSubstitutions() wxString uri_expanded; ///< from ExpandSubstitutions()
#endif
LIB_T type; LIB_T type;
wxString options; wxString options;
wxString description; wxString description;

View File

@ -330,11 +330,12 @@ public:
wxGrid* g = i==0 ? m_global_grid : m_project_grid; wxGrid* g = i==0 ? m_global_grid : m_project_grid;
// all but COL_OPTIONS, which is edited with Option Editor anyways. // all but COL_OPTIONS, which is edited with Option Editor anyways.
g->AutoSizeColumn( COL_NICKNAME, true ); g->AutoSizeColumn( COL_NICKNAME, false );
g->AutoSizeColumn( COL_TYPE, false ); g->AutoSizeColumn( COL_TYPE, false );
g->AutoSizeColumn( COL_URI, false ); g->AutoSizeColumn( COL_URI, false );
g->AutoSizeColumn( COL_DESCR, false ); g->AutoSizeColumn( COL_DESCR, false );
// would set this to width of title, if it was easily known.
g->SetColSize( COL_OPTIONS, 80 ); g->SetColSize( COL_OPTIONS, 80 );
} }

View File

@ -432,13 +432,11 @@ protected:
*/ */
void updateTitle(); void updateTitle();
wxString m_lib_nick_name;
/// The library nickName is a short string, for now the same as the library path /// The library nickName is a short string, for now the same as the library path
/// but without path and without extension. After library table support it becomes /// but without path and without extension. After library table support it becomes
/// a lookup key. /// a lookup key.
wxString getLibNickName() const { return m_lib_nick_name; } const wxString& getLibNickName() const;
void setLibNickName( const wxString& aLibNickName ) { m_lib_nick_name = aLibNickName; } void setLibNickName( const wxString& aNickname );
#if !defined(USE_FP_LIB_TABLE) #if !defined(USE_FP_LIB_TABLE)

View File

@ -255,12 +255,28 @@ FOOTPRINT_EDIT_FRAME::~FOOTPRINT_EDIT_FRAME()
m_Pcb = 0; m_Pcb = 0;
} }
#if defined(USE_FP_LIB_TABLE)
const wxString& FOOTPRINT_EDIT_FRAME::getLibNickName() const
{
return wxGetApp().GetModuleLibraryNickname();
}
void FOOTPRINT_EDIT_FRAME::setLibNickName( const wxString& aNickname )
{
wxGetApp().SetModuleLibraryNickname( aNickname );
}
#if 1 && defined(USE_FP_LIB_TABLE)
wxString FOOTPRINT_EDIT_FRAME::getLibPath() wxString FOOTPRINT_EDIT_FRAME::getLibPath()
{ {
try try
{ {
const FP_LIB_TABLE::ROW* row = GetFootprintLibraryTable()->FindRow( m_lib_nick_name ); const wxString& nickname = getLibNickName();
const FP_LIB_TABLE::ROW* row = GetFootprintLibraryTable()->FindRow( nickname );
return row->GetFullURI( true ); return row->GetFullURI( true );
} }
catch( IO_ERROR ioe ) catch( IO_ERROR ioe )
@ -600,6 +616,8 @@ void FOOTPRINT_EDIT_FRAME::OnModify()
void FOOTPRINT_EDIT_FRAME::updateTitle() void FOOTPRINT_EDIT_FRAME::updateTitle()
{ {
wxString title = _( "Module Editor " ); wxString title = _( "Module Editor " );
#if !defined(USE_FP_LIB_TABLE)
wxString libPath = getLibPath(); wxString libPath = getLibPath();
if( !libPath ) if( !libPath )
@ -633,5 +651,36 @@ void FOOTPRINT_EDIT_FRAME::updateTitle()
} }
} }
#else
wxString nickname = getLibNickName();
if( !nickname )
{
L_none:
title += _( "(no active library)" );
}
else
{
try
{
bool writable = m_footprintLibTable->IsFootprintLibWritable( nickname );
// no exception was thrown, this means libPath is valid, but it may be read only.
title = _( "Module Editor (active library: " ) + nickname + wxT( ")" );
if( !writable )
title += _( " [Read Only]" );
}
catch( IO_ERROR ioe )
{
// user may be bewildered as to why after selecting a library it is not showing up
// in the title, we could show an error message, but that should have been done at time
// of libary selection UI.
goto L_none;
}
}
#endif
SetTitle( title ); SetTitle( title );
} }