mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-13 17:53:11 +02:00
Allow embedded files to come from components
as well as parent containers. Fixes https://gitlab.com/kicad/code/kicad/-/issues/20530
This commit is contained in:
parent
a590d28c8e
commit
be4a851186
@ -60,7 +60,7 @@ static const wxFileTypeInfo EDAfallbacks[] =
|
||||
|
||||
|
||||
bool GetAssociatedDocument( wxWindow* aParent, const wxString& aDocName, PROJECT* aProject,
|
||||
SEARCH_STACK* aPaths, EMBEDDED_FILES* aFiles )
|
||||
SEARCH_STACK* aPaths, std::vector<EMBEDDED_FILES*> aFilesStack )
|
||||
{
|
||||
wxString docname;
|
||||
wxString fullfilename;
|
||||
@ -87,7 +87,7 @@ bool GetAssociatedDocument( wxWindow* aParent, const wxString& aDocName, PROJECT
|
||||
}
|
||||
else
|
||||
{
|
||||
if( !aFiles )
|
||||
if( aFilesStack.empty() )
|
||||
{
|
||||
wxLogTrace( wxT( "KICAD_EMBED" ),
|
||||
wxT( "No EMBEDDED_FILES object provided for kicad_embed URI" ) );
|
||||
@ -101,9 +101,13 @@ bool GetAssociatedDocument( wxWindow* aParent, const wxString& aDocName, PROJECT
|
||||
return false;
|
||||
}
|
||||
|
||||
docname = docname.Mid( 14 );
|
||||
docname = docname.Mid( wxString( FILEEXT::KiCadUriPrefix + "://" ).length() );
|
||||
|
||||
wxFileName temp_file = aFiles->GetTemporaryFileName( docname );
|
||||
wxFileName temp_file = aFilesStack[0]->GetTemporaryFileName( docname );
|
||||
int ii = 1;
|
||||
|
||||
while( !temp_file.IsOk() && ii < (int) aFilesStack.size() )
|
||||
temp_file = aFilesStack[ii++]->GetTemporaryFileName( docname );
|
||||
|
||||
if( !temp_file.IsOk() )
|
||||
{
|
||||
@ -114,7 +118,8 @@ bool GetAssociatedDocument( wxWindow* aParent, const wxString& aDocName, PROJECT
|
||||
|
||||
wxLogTrace( wxT( "KICAD_EMBED" ),
|
||||
wxT( "Opening embedded file '%s' as '%s'" ),
|
||||
docname, temp_file.GetFullPath() );
|
||||
docname,
|
||||
temp_file.GetFullPath() );
|
||||
docname = temp_file.GetFullPath();
|
||||
}
|
||||
}
|
||||
|
@ -331,12 +331,12 @@ class TEXT_BUTTON_URL : public wxComboCtrl
|
||||
{
|
||||
public:
|
||||
TEXT_BUTTON_URL( wxWindow* aParent, DIALOG_SHIM* aParentDlg, SEARCH_STACK* aSearchStack,
|
||||
EMBEDDED_FILES* aFiles ) :
|
||||
std::vector<EMBEDDED_FILES*> aFilesStack ) :
|
||||
wxComboCtrl( aParent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 0, 0 ),
|
||||
wxTE_PROCESS_ENTER | wxBORDER_NONE ),
|
||||
m_dlg( aParentDlg ),
|
||||
m_searchStack( aSearchStack ),
|
||||
m_files( aFiles )
|
||||
m_filesStack( aFilesStack )
|
||||
{
|
||||
UpdateButtonBitmaps();
|
||||
|
||||
@ -381,7 +381,7 @@ protected:
|
||||
|
||||
if( customize.GetEmbed() )
|
||||
{
|
||||
EMBEDDED_FILES::EMBEDDED_FILE* result = m_files->AddFile( fn, false );
|
||||
EMBEDDED_FILES::EMBEDDED_FILE* result = m_filesStack[0]->AddFile( fn, false );
|
||||
SetValue( result->GetLink() );
|
||||
}
|
||||
else
|
||||
@ -392,7 +392,7 @@ protected:
|
||||
}
|
||||
else
|
||||
{
|
||||
GetAssociatedDocument( m_dlg, GetValue(), &m_dlg->Prj(), m_searchStack, m_files );
|
||||
GetAssociatedDocument( m_dlg, GetValue(), &m_dlg->Prj(), m_searchStack, m_filesStack );
|
||||
}
|
||||
|
||||
m_dlg->CleanupAfterModalSubDialog();
|
||||
@ -413,15 +413,15 @@ protected:
|
||||
}
|
||||
|
||||
protected:
|
||||
DIALOG_SHIM* m_dlg;
|
||||
SEARCH_STACK* m_searchStack;
|
||||
EMBEDDED_FILES* m_files;
|
||||
DIALOG_SHIM* m_dlg;
|
||||
SEARCH_STACK* m_searchStack;
|
||||
std::vector<EMBEDDED_FILES*> m_filesStack;
|
||||
};
|
||||
|
||||
|
||||
void GRID_CELL_URL_EDITOR::Create( wxWindow* aParent, wxWindowID aId, wxEvtHandler* aEventHandler )
|
||||
{
|
||||
m_control = new TEXT_BUTTON_URL( aParent, m_dlg, m_searchStack, m_files );
|
||||
m_control = new TEXT_BUTTON_URL( aParent, m_dlg, m_searchStack, m_filesStack );
|
||||
WX_GRID::CellEditorSetMargins( Combo() );
|
||||
|
||||
#if wxUSE_VALIDATORS
|
||||
|
@ -146,7 +146,7 @@ DIALOG_LABEL_PROPERTIES::DIALOG_LABEL_PROPERTIES( SCH_EDIT_FRAME* aParent,
|
||||
m_grid->SetDefaultRowSize( m_grid->GetDefaultRowSize() + 4 );
|
||||
|
||||
m_grid->SetTable( m_fields );
|
||||
m_grid->PushEventHandler( new FIELDS_GRID_TRICKS( m_grid, this, nullptr,
|
||||
m_grid->PushEventHandler( new FIELDS_GRID_TRICKS( m_grid, this, {},
|
||||
[&]( wxCommandEvent& aEvent )
|
||||
{
|
||||
OnAddField( aEvent );
|
||||
|
@ -75,9 +75,9 @@ DIALOG_LIB_SYMBOL_PROPERTIES::DIALOG_LIB_SYMBOL_PROPERTIES( SYMBOL_EDIT_FRAME* a
|
||||
// Give a bit more room for combobox editors
|
||||
m_grid->SetDefaultRowSize( m_grid->GetDefaultRowSize() + 4 );
|
||||
m_fields = new FIELDS_GRID_TABLE( this, aParent, m_grid, m_libEntry,
|
||||
m_embeddedFiles->GetLocalFiles() );
|
||||
{ m_embeddedFiles->GetLocalFiles() } );
|
||||
m_grid->SetTable( m_fields );
|
||||
m_grid->PushEventHandler( new FIELDS_GRID_TRICKS( m_grid, this, aLibEntry,
|
||||
m_grid->PushEventHandler( new FIELDS_GRID_TRICKS( m_grid, this, { m_embeddedFiles->GetLocalFiles() },
|
||||
[&]( wxCommandEvent& aEvent )
|
||||
{
|
||||
OnAddField( aEvent );
|
||||
|
@ -72,7 +72,7 @@ DIALOG_SHEET_PROPERTIES::DIALOG_SHEET_PROPERTIES( SCH_EDIT_FRAME* aParent, SCH_S
|
||||
m_grid->SetDefaultRowSize( m_grid->GetDefaultRowSize() + 4 );
|
||||
|
||||
m_grid->SetTable( m_fields );
|
||||
m_grid->PushEventHandler( new FIELDS_GRID_TRICKS( m_grid, this, &aParent->Schematic(),
|
||||
m_grid->PushEventHandler( new FIELDS_GRID_TRICKS( m_grid, this, { &aParent->Schematic() },
|
||||
[&]( wxCommandEvent& aEvent )
|
||||
{
|
||||
OnAddField( aEvent );
|
||||
|
@ -78,13 +78,13 @@ enum
|
||||
class FIELDS_EDITOR_GRID_TRICKS : public GRID_TRICKS
|
||||
{
|
||||
public:
|
||||
FIELDS_EDITOR_GRID_TRICKS( DIALOG_SHIM* aParent, WX_GRID* aGrid,
|
||||
wxDataViewListCtrl* aFieldsCtrl,
|
||||
FIELDS_EDITOR_GRID_DATA_MODEL* aDataModel ) :
|
||||
FIELDS_EDITOR_GRID_TRICKS( DIALOG_SHIM* aParent, WX_GRID* aGrid, wxDataViewListCtrl* aFieldsCtrl,
|
||||
FIELDS_EDITOR_GRID_DATA_MODEL* aDataModel, EMBEDDED_FILES* aFiles ) :
|
||||
GRID_TRICKS( aGrid ),
|
||||
m_dlg( aParent ),
|
||||
m_fieldsCtrl( aFieldsCtrl ),
|
||||
m_dataModel( aDataModel )
|
||||
m_dataModel( aDataModel ),
|
||||
m_files( aFiles )
|
||||
{}
|
||||
|
||||
protected:
|
||||
@ -118,8 +118,7 @@ protected:
|
||||
// pick a footprint using the footprint picker.
|
||||
wxString fpid = m_grid->GetCellValue( row, col );
|
||||
|
||||
if( KIWAY_PLAYER* frame = m_dlg->Kiway().Player( FRAME_FOOTPRINT_CHOOSER, true,
|
||||
m_dlg ) )
|
||||
if( KIWAY_PLAYER* frame = m_dlg->Kiway().Player( FRAME_FOOTPRINT_CHOOSER, true, m_dlg ) )
|
||||
{
|
||||
if( frame->ShowModal( &fpid, m_dlg ) )
|
||||
m_grid->SetCellValue( row, col, fpid );
|
||||
@ -131,7 +130,7 @@ protected:
|
||||
{
|
||||
wxString datasheet_uri = m_grid->GetCellValue( row, col );
|
||||
GetAssociatedDocument( m_dlg, datasheet_uri, &m_dlg->Prj(),
|
||||
PROJECT_SCH::SchSearchS( &m_dlg->Prj() ) );
|
||||
PROJECT_SCH::SchSearchS( &m_dlg->Prj() ), { m_files } );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -168,9 +167,11 @@ protected:
|
||||
}
|
||||
}
|
||||
|
||||
DIALOG_SHIM* m_dlg;
|
||||
wxDataViewListCtrl* m_fieldsCtrl;
|
||||
private:
|
||||
DIALOG_SHIM* m_dlg;
|
||||
wxDataViewListCtrl* m_fieldsCtrl;
|
||||
FIELDS_EDITOR_GRID_DATA_MODEL* m_dataModel;
|
||||
EMBEDDED_FILES* m_files;
|
||||
};
|
||||
|
||||
|
||||
@ -244,7 +245,7 @@ DIALOG_SYMBOL_FIELDS_TABLE::DIALOG_SYMBOL_FIELDS_TABLE( SCH_EDIT_FRAME* parent,
|
||||
|
||||
wxGridCellAttr* attr = new wxGridCellAttr;
|
||||
attr->SetEditor( new GRID_CELL_URL_EDITOR( this, PROJECT_SCH::SchSearchS( &Prj() ),
|
||||
&m_parent->Schematic() ) );
|
||||
{ &m_parent->Schematic() } ) );
|
||||
m_dataModel = new FIELDS_EDITOR_GRID_DATA_MODEL( m_symbolsList, attr );
|
||||
|
||||
LoadFieldNames(); // loads rows into m_fieldsCtrl and columns into m_dataModel
|
||||
@ -284,7 +285,7 @@ DIALOG_SYMBOL_FIELDS_TABLE::DIALOG_SYMBOL_FIELDS_TABLE( SCH_EDIT_FRAME* parent,
|
||||
|
||||
// add Cut, Copy, and Paste to wxGrid
|
||||
m_grid->PushEventHandler( new FIELDS_EDITOR_GRID_TRICKS( this, m_grid, m_fieldsCtrl,
|
||||
m_dataModel ) );
|
||||
m_dataModel, &m_parent->Schematic() ) );
|
||||
|
||||
// give a bit more room for comboboxes
|
||||
m_grid->SetDefaultRowSize( m_grid->GetDefaultRowSize() + 4 );
|
||||
@ -443,7 +444,7 @@ void DIALOG_SYMBOL_FIELDS_TABLE::SetupColumnProperties( int aCol )
|
||||
{
|
||||
// set datasheet column viewer button
|
||||
attr->SetEditor( new GRID_CELL_URL_EDITOR( this, PROJECT_SCH::SchSearchS( &Prj() ),
|
||||
&m_parent->Schematic() ) );
|
||||
{ &m_parent->Schematic() } ) );
|
||||
m_dataModel->SetColAttr( attr, aCol );
|
||||
}
|
||||
else if( m_dataModel->ColIsQuantity( aCol ) || m_dataModel->ColIsItemNumber( aCol ) )
|
||||
|
@ -327,7 +327,7 @@ DIALOG_SYMBOL_PROPERTIES::DIALOG_SYMBOL_PROPERTIES( SCH_EDIT_FRAME* aParent,
|
||||
// so we need to handle m_part == nullptr
|
||||
// wxASSERT( m_part );
|
||||
|
||||
m_fields = new FIELDS_GRID_TABLE( this, aParent, m_fieldsGrid, m_symbol, &aParent->Schematic() );
|
||||
m_fields = new FIELDS_GRID_TABLE( this, aParent, m_fieldsGrid, m_symbol );
|
||||
|
||||
// Give a bit more room for combobox editors
|
||||
m_fieldsGrid->SetDefaultRowSize( m_fieldsGrid->GetDefaultRowSize() + 4 );
|
||||
@ -335,7 +335,7 @@ DIALOG_SYMBOL_PROPERTIES::DIALOG_SYMBOL_PROPERTIES( SCH_EDIT_FRAME* aParent,
|
||||
|
||||
m_fieldsGrid->SetTable( m_fields );
|
||||
m_fieldsGrid->PushEventHandler( new FIELDS_GRID_TRICKS( m_fieldsGrid, this,
|
||||
&aParent->Schematic(),
|
||||
{ &aParent->Schematic(), m_part },
|
||||
[&]( wxCommandEvent& aEvent )
|
||||
{
|
||||
OnAddField( aEvent );
|
||||
|
@ -131,12 +131,12 @@ static wxString netList( LIB_SYMBOL* aSymbol )
|
||||
|
||||
|
||||
FIELDS_GRID_TABLE::FIELDS_GRID_TABLE( DIALOG_SHIM* aDialog, SCH_BASE_FRAME* aFrame, WX_GRID* aGrid,
|
||||
LIB_SYMBOL* aSymbol, EMBEDDED_FILES* aFiles ) :
|
||||
LIB_SYMBOL* aSymbol, std::vector<EMBEDDED_FILES*> aFilesStack ) :
|
||||
m_frame( aFrame ),
|
||||
m_dialog( aDialog ),
|
||||
m_parentType( SCH_SYMBOL_T ),
|
||||
m_part( aSymbol ),
|
||||
m_files( aFiles ),
|
||||
m_filesStack( aFilesStack ),
|
||||
m_symbolNetlist( netList( aSymbol ) ),
|
||||
m_fieldNameValidator( FIELD_T::USER ),
|
||||
m_referenceValidator( FIELD_T::REFERENCE ),
|
||||
@ -150,12 +150,11 @@ FIELDS_GRID_TABLE::FIELDS_GRID_TABLE( DIALOG_SHIM* aDialog, SCH_BASE_FRAME* aFra
|
||||
|
||||
|
||||
FIELDS_GRID_TABLE::FIELDS_GRID_TABLE( DIALOG_SHIM* aDialog, SCH_EDIT_FRAME* aFrame, WX_GRID* aGrid,
|
||||
SCH_SYMBOL* aSymbol, EMBEDDED_FILES* aFiles ) :
|
||||
SCH_SYMBOL* aSymbol ) :
|
||||
m_frame( aFrame ),
|
||||
m_dialog( aDialog ),
|
||||
m_parentType( SCH_SYMBOL_T ),
|
||||
m_part( aSymbol->GetLibSymbolRef().get() ),
|
||||
m_files( aFiles ),
|
||||
m_symbolNetlist( netList( aSymbol, aFrame->GetCurrentSheet() ) ),
|
||||
m_fieldNameValidator( FIELD_T::USER ),
|
||||
m_referenceValidator( FIELD_T::REFERENCE ),
|
||||
@ -164,6 +163,11 @@ FIELDS_GRID_TABLE::FIELDS_GRID_TABLE( DIALOG_SHIM* aDialog, SCH_EDIT_FRAME* aFra
|
||||
m_nonUrlValidator( FIELD_T::USER ),
|
||||
m_filepathValidator( FIELD_T::SHEET_FILENAME )
|
||||
{
|
||||
m_filesStack.push_back( aSymbol->Schematic() );
|
||||
|
||||
if( m_part )
|
||||
m_filesStack.push_back( m_part );
|
||||
|
||||
initGrid( aGrid );
|
||||
}
|
||||
|
||||
@ -174,7 +178,6 @@ FIELDS_GRID_TABLE::FIELDS_GRID_TABLE( DIALOG_SHIM* aDialog, SCH_EDIT_FRAME* aFra
|
||||
m_dialog( aDialog ),
|
||||
m_parentType( SCH_SHEET_T ),
|
||||
m_part( nullptr ),
|
||||
m_files( nullptr ),
|
||||
m_fieldNameValidator( FIELD_T::USER ),
|
||||
m_referenceValidator( FIELD_T::SHEET_NAME ),
|
||||
m_valueValidator( FIELD_T::VALUE ),
|
||||
@ -182,6 +185,8 @@ FIELDS_GRID_TABLE::FIELDS_GRID_TABLE( DIALOG_SHIM* aDialog, SCH_EDIT_FRAME* aFra
|
||||
m_nonUrlValidator( FIELD_T::USER ),
|
||||
m_filepathValidator( FIELD_T::SHEET_FILENAME )
|
||||
{
|
||||
m_filesStack.push_back( aSheet->Schematic() );
|
||||
|
||||
initGrid( aGrid );
|
||||
}
|
||||
|
||||
@ -199,6 +204,8 @@ FIELDS_GRID_TABLE::FIELDS_GRID_TABLE( DIALOG_SHIM* aDialog, SCH_EDIT_FRAME* aFra
|
||||
m_nonUrlValidator( FIELD_T::USER ),
|
||||
m_filepathValidator( FIELD_T::USER )
|
||||
{
|
||||
m_filesStack.push_back( aLabel->Schematic() );
|
||||
|
||||
initGrid( aGrid );
|
||||
}
|
||||
|
||||
@ -263,7 +270,7 @@ void FIELDS_GRID_TABLE::initGrid( WX_GRID* aGrid )
|
||||
|
||||
m_urlAttr = new wxGridCellAttr;
|
||||
SEARCH_STACK* prjSearchStack = PROJECT_SCH::SchSearchS( &m_frame->Prj() );
|
||||
GRID_CELL_URL_EDITOR* urlEditor = new GRID_CELL_URL_EDITOR( m_dialog, prjSearchStack, m_files );
|
||||
GRID_CELL_URL_EDITOR* urlEditor = new GRID_CELL_URL_EDITOR( m_dialog, prjSearchStack, m_filesStack );
|
||||
urlEditor->SetValidator( m_urlValidator );
|
||||
m_urlAttr->SetEditor( urlEditor );
|
||||
|
||||
@ -1106,8 +1113,8 @@ void FIELDS_GRID_TRICKS::doPopupSelection( wxCommandEvent& event )
|
||||
{
|
||||
wxString datasheet_uri = m_grid->GetCellValue( getFieldRow( FIELD_T::DATASHEET ), FDC_VALUE );
|
||||
|
||||
GetAssociatedDocument( m_dlg, datasheet_uri, &m_dlg->Prj(),
|
||||
PROJECT_SCH::SchSearchS( &m_dlg->Prj() ), m_files );
|
||||
GetAssociatedDocument( m_dlg, datasheet_uri, &m_dlg->Prj(), PROJECT_SCH::SchSearchS( &m_dlg->Prj() ),
|
||||
m_filesStack );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -38,11 +38,12 @@ class SCH_LABEL_BASE;
|
||||
class FIELDS_GRID_TRICKS : public GRID_TRICKS
|
||||
{
|
||||
public:
|
||||
FIELDS_GRID_TRICKS( WX_GRID* aGrid, DIALOG_SHIM* aDialog, EMBEDDED_FILES* aFiles,
|
||||
FIELDS_GRID_TRICKS( WX_GRID* aGrid, DIALOG_SHIM* aDialog,
|
||||
std::vector<EMBEDDED_FILES*> aFilesStack,
|
||||
std::function<void( wxCommandEvent& )> aAddHandler ) :
|
||||
GRID_TRICKS( aGrid, std::move( aAddHandler ) ),
|
||||
m_dlg( aDialog ),
|
||||
m_files( aFiles )
|
||||
m_filesStack( aFilesStack )
|
||||
{}
|
||||
|
||||
protected:
|
||||
@ -52,8 +53,8 @@ protected:
|
||||
void doPopupSelection( wxCommandEvent& event ) override;
|
||||
|
||||
protected:
|
||||
DIALOG_SHIM* m_dlg;
|
||||
EMBEDDED_FILES* m_files;
|
||||
DIALOG_SHIM* m_dlg;
|
||||
std::vector<EMBEDDED_FILES*> m_filesStack;
|
||||
};
|
||||
|
||||
|
||||
@ -87,9 +88,9 @@ class FIELDS_GRID_TABLE : public WX_GRID_TABLE_BASE, public std::vector<SCH_FIEL
|
||||
{
|
||||
public:
|
||||
FIELDS_GRID_TABLE( DIALOG_SHIM* aDialog, SCH_BASE_FRAME* aFrame, WX_GRID* aGrid,
|
||||
LIB_SYMBOL* aSymbol, EMBEDDED_FILES* aFiles = nullptr );
|
||||
LIB_SYMBOL* aSymbol, std::vector<EMBEDDED_FILES*> aFilesStack = {} );
|
||||
FIELDS_GRID_TABLE( DIALOG_SHIM* aDialog, SCH_EDIT_FRAME* aFrame, WX_GRID* aGrid,
|
||||
SCH_SYMBOL* aSymbol, EMBEDDED_FILES* aFiles = nullptr );
|
||||
SCH_SYMBOL* aSymbol );
|
||||
FIELDS_GRID_TABLE( DIALOG_SHIM* aDialog, SCH_EDIT_FRAME* aFrame, WX_GRID* aGrid,
|
||||
SCH_SHEET* aSheet );
|
||||
FIELDS_GRID_TABLE( DIALOG_SHIM* aDialog, SCH_EDIT_FRAME* aFrame, WX_GRID* aGrid,
|
||||
@ -137,13 +138,13 @@ protected:
|
||||
SCH_FIELD& getField( int aRow );
|
||||
|
||||
private:
|
||||
SCH_BASE_FRAME* m_frame;
|
||||
DIALOG_SHIM* m_dialog;
|
||||
KICAD_T m_parentType;
|
||||
LIB_SYMBOL* m_part;
|
||||
EMBEDDED_FILES* m_files;
|
||||
wxString m_symbolNetlist;
|
||||
wxString m_curdir;
|
||||
SCH_BASE_FRAME* m_frame;
|
||||
DIALOG_SHIM* m_dialog;
|
||||
KICAD_T m_parentType;
|
||||
LIB_SYMBOL* m_part;
|
||||
std::vector<EMBEDDED_FILES*> m_filesStack;
|
||||
wxString m_symbolNetlist;
|
||||
wxString m_curdir;
|
||||
|
||||
FIELD_VALIDATOR m_fieldNameValidator;
|
||||
FIELD_VALIDATOR m_referenceValidator;
|
||||
|
@ -502,7 +502,7 @@ int SCH_INSPECTION_TOOL::RunSimulation( const TOOL_EVENT& aEvent )
|
||||
int SCH_INSPECTION_TOOL::ShowDatasheet( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
wxString datasheet;
|
||||
EMBEDDED_FILES* files = nullptr;
|
||||
std::vector<EMBEDDED_FILES*> filesStack;
|
||||
|
||||
if( m_frame->IsType( FRAME_SCH_SYMBOL_EDITOR ) )
|
||||
{
|
||||
@ -512,7 +512,7 @@ int SCH_INSPECTION_TOOL::ShowDatasheet( const TOOL_EVENT& aEvent )
|
||||
return 0;
|
||||
|
||||
datasheet = symbol->GetDatasheetField().GetText();
|
||||
files = symbol;
|
||||
filesStack.push_back( symbol );
|
||||
}
|
||||
else if( m_frame->IsType( FRAME_SCH_VIEWER ) )
|
||||
{
|
||||
@ -522,7 +522,7 @@ int SCH_INSPECTION_TOOL::ShowDatasheet( const TOOL_EVENT& aEvent )
|
||||
return 0;
|
||||
|
||||
datasheet = entry->GetDatasheetField().GetText();
|
||||
files = entry;
|
||||
filesStack.push_back( entry );
|
||||
}
|
||||
else if( m_frame->IsType( FRAME_SCH ) )
|
||||
{
|
||||
@ -537,7 +537,10 @@ int SCH_INSPECTION_TOOL::ShowDatasheet( const TOOL_EVENT& aEvent )
|
||||
// Use GetShownText() to resolve any text variables, but don't allow adding extra text
|
||||
// (ie: the field name)
|
||||
datasheet = field->GetShownText( &symbol->Schematic()->CurrentSheet(), false );
|
||||
files = symbol->Schematic();
|
||||
filesStack.push_back( symbol->Schematic() );
|
||||
|
||||
if( symbol->GetLibSymbolRef() )
|
||||
filesStack.push_back( symbol->GetLibSymbolRef().get() );
|
||||
}
|
||||
|
||||
if( datasheet.IsEmpty() || datasheet == wxS( "~" ) )
|
||||
@ -547,7 +550,7 @@ int SCH_INSPECTION_TOOL::ShowDatasheet( const TOOL_EVENT& aEvent )
|
||||
else
|
||||
{
|
||||
GetAssociatedDocument( m_frame, datasheet, &m_frame->Prj(),
|
||||
PROJECT_SCH::SchSearchS( &m_frame->Prj() ), files );
|
||||
PROJECT_SCH::SchSearchS( &m_frame->Prj() ), filesStack );
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -105,7 +105,7 @@ void SCH_NAVIGATE_TOOL::HypertextCommand( const wxString& aHref )
|
||||
menu.Append( 1, wxString::Format( _( "Open %s" ), href ) );
|
||||
|
||||
if( m_frame->GetPopupMenuSelectionFromUser( menu ) == 1 )
|
||||
GetAssociatedDocument( m_frame, href, &m_frame->Prj(), nullptr, &m_frame->Schematic() );
|
||||
GetAssociatedDocument( m_frame, href, &m_frame->Prj(), nullptr, { &m_frame->Schematic() } );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,8 @@ class EMBEDDED_FILES;
|
||||
* @param aPaths Additional paths to search for local disk datasheet files
|
||||
*/
|
||||
bool GetAssociatedDocument( wxWindow* aParent, const wxString& aDocName, PROJECT* aProject,
|
||||
SEARCH_STACK* aPaths = nullptr, EMBEDDED_FILES* aFiles = nullptr );
|
||||
SEARCH_STACK* aPaths = nullptr,
|
||||
std::vector<EMBEDDED_FILES*> aFilesStack = {} );
|
||||
|
||||
|
||||
#endif /* __INCLUDE__EDA_DOC_H__ */
|
||||
|
@ -120,8 +120,10 @@ class GRID_CELL_URL_EDITOR : public GRID_CELL_TEXT_BUTTON
|
||||
{
|
||||
public:
|
||||
GRID_CELL_URL_EDITOR( DIALOG_SHIM* aParent, SEARCH_STACK* aSearchStack = nullptr,
|
||||
EMBEDDED_FILES* aFiles = nullptr ) :
|
||||
m_dlg( aParent ), m_searchStack( aSearchStack ), m_files( aFiles )
|
||||
std::vector<EMBEDDED_FILES*> aFilesStack = {} ) :
|
||||
m_dlg( aParent ),
|
||||
m_searchStack( aSearchStack ),
|
||||
m_filesStack( aFilesStack )
|
||||
{ }
|
||||
|
||||
wxGridCellEditor* Clone() const override
|
||||
@ -132,9 +134,9 @@ public:
|
||||
void Create( wxWindow* aParent, wxWindowID aId, wxEvtHandler* aEventHandler ) override;
|
||||
|
||||
protected:
|
||||
DIALOG_SHIM* m_dlg;
|
||||
SEARCH_STACK* m_searchStack;
|
||||
EMBEDDED_FILES* m_files;
|
||||
DIALOG_SHIM* m_dlg;
|
||||
SEARCH_STACK* m_searchStack;
|
||||
std::vector<EMBEDDED_FILES*> m_filesStack;
|
||||
};
|
||||
|
||||
|
||||
|
@ -84,7 +84,7 @@ DIALOG_FOOTPRINT_PROPERTIES::DIALOG_FOOTPRINT_PROPERTIES( PCB_EDIT_FRAME* aParen
|
||||
m_posX.SetCoordType( ORIGIN_TRANSFORMS::ABS_X_COORD );
|
||||
m_posY.SetCoordType( ORIGIN_TRANSFORMS::ABS_Y_COORD );
|
||||
|
||||
m_fields = new PCB_FIELDS_GRID_TABLE( m_frame, this, m_embeddedFiles->GetLocalFiles() );
|
||||
m_fields = new PCB_FIELDS_GRID_TABLE( m_frame, this, { m_embeddedFiles->GetLocalFiles() } );
|
||||
|
||||
m_delayedErrorMessage = wxEmptyString;
|
||||
m_delayedFocusGrid = nullptr;
|
||||
|
@ -151,7 +151,7 @@ DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR(
|
||||
m_NoteBook->AddPage( m_3dPanel, _("3D Models"), false );
|
||||
m_NoteBook->AddPage( m_embeddedFiles, _( "Embedded Files" ) );
|
||||
|
||||
m_fields = new PCB_FIELDS_GRID_TABLE( m_frame, this, m_embeddedFiles->GetLocalFiles() );
|
||||
m_fields = new PCB_FIELDS_GRID_TABLE( m_frame, this, { m_embeddedFiles->GetLocalFiles() } );
|
||||
m_privateLayers = new PRIVATE_LAYERS_GRID_TABLE( m_frame );
|
||||
|
||||
m_delayedErrorMessage = wxEmptyString;
|
||||
|
@ -48,8 +48,9 @@ wxArrayString g_menuOrientations;
|
||||
|
||||
|
||||
PCB_FIELDS_GRID_TABLE::PCB_FIELDS_GRID_TABLE( PCB_BASE_FRAME* aFrame, DIALOG_SHIM* aDialog,
|
||||
EMBEDDED_FILES* aFiles ) :
|
||||
m_frame( aFrame ), m_dialog( aDialog ),
|
||||
std::vector<EMBEDDED_FILES*> aFilesStack ) :
|
||||
m_frame( aFrame ),
|
||||
m_dialog( aDialog ),
|
||||
m_fieldNameValidator( FIELD_T::USER ),
|
||||
m_referenceValidator( FIELD_T::REFERENCE ),
|
||||
m_valueValidator( FIELD_T::VALUE ),
|
||||
@ -92,7 +93,7 @@ PCB_FIELDS_GRID_TABLE::PCB_FIELDS_GRID_TABLE( PCB_BASE_FRAME* aFrame, DIALOG_SHI
|
||||
m_valueAttr->SetEditor( valueEditor );
|
||||
|
||||
m_urlAttr = new wxGridCellAttr;
|
||||
GRID_CELL_URL_EDITOR* urlEditor = new GRID_CELL_URL_EDITOR( m_dialog, nullptr, aFiles );
|
||||
GRID_CELL_URL_EDITOR* urlEditor = new GRID_CELL_URL_EDITOR( m_dialog, nullptr, aFilesStack );
|
||||
urlEditor->SetValidator( m_urlValidator );
|
||||
m_urlAttr->SetEditor( urlEditor );
|
||||
|
||||
|
@ -57,7 +57,8 @@ enum PCB_FIELDS_COL_ORDER
|
||||
class PCB_FIELDS_GRID_TABLE : public WX_GRID_TABLE_BASE, public std::vector<PCB_FIELD>
|
||||
{
|
||||
public:
|
||||
PCB_FIELDS_GRID_TABLE( PCB_BASE_FRAME* aFrame, DIALOG_SHIM* aDialog, EMBEDDED_FILES* aFiles );
|
||||
PCB_FIELDS_GRID_TABLE( PCB_BASE_FRAME* aFrame, DIALOG_SHIM* aDialog,
|
||||
std::vector<EMBEDDED_FILES*> aFilesStack );
|
||||
~PCB_FIELDS_GRID_TABLE();
|
||||
|
||||
int GetNumberRows() override { return (int) size(); }
|
||||
|
@ -729,7 +729,8 @@ int FOOTPRINT_EDITOR_CONTROL::ShowDatasheet( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
// Only absolute URLs are supported
|
||||
SEARCH_STACK* searchStack = nullptr;
|
||||
GetAssociatedDocument( m_frame, *url, &m_frame->Prj(), searchStack, footprint );
|
||||
GetAssociatedDocument( m_frame, *url, &m_frame->Prj(), searchStack,
|
||||
{ m_frame->GetBoard(), footprint } );
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user