Add Select Footprint and Show Datasheet to Symbol Fields Editor.

Fixes: lp:1782848
* https://bugs.launchpad.net/kicad/+bug/1782848
This commit is contained in:
Jeff Young 2018-07-20 23:26:37 +01:00
parent 2c833f2c91
commit 6d2dfbb5c3
1 changed files with 64 additions and 6 deletions

View File

@ -36,22 +36,69 @@
#include <sch_edit_frame.h> #include <sch_edit_frame.h>
#include <sch_reference_list.h> #include <sch_reference_list.h>
#include <kiface_i.h> #include <kiface_i.h>
#include <eda_doc.h>
#include <widgets/grid_text_button_helpers.h>
#include "dialog_fields_editor_global.h" #include "dialog_fields_editor_global.h"
enum
{
MYID_SELECT_FOOTPRINT = 991, // must be within GRID_TRICKS' enum range
MYID_SHOW_DATASHEET
};
class FIELDS_EDITOR_GRID_TRICKS : public GRID_TRICKS class FIELDS_EDITOR_GRID_TRICKS : public GRID_TRICKS
{ {
public: public:
FIELDS_EDITOR_GRID_TRICKS( wxGrid* aGrid, wxDataViewListCtrl* aFieldsCtrl ) : FIELDS_EDITOR_GRID_TRICKS( DIALOG_SHIM* aParent, wxGrid* aGrid,
wxDataViewListCtrl* aFieldsCtrl ) :
GRID_TRICKS( aGrid ), GRID_TRICKS( aGrid ),
m_dlg( aParent ),
m_fieldsCtrl( aFieldsCtrl ) m_fieldsCtrl( aFieldsCtrl )
{} {}
protected: protected:
void showPopupMenu( wxMenu& menu ) override
{
if( m_grid->GetGridCursorCol() == FOOTPRINT )
{
menu.Append( MYID_SELECT_FOOTPRINT, _( "Select Footprint..." ), _( "Browse for footprint" ) );
menu.AppendSeparator();
}
else if( m_grid->GetGridCursorCol() == DATASHEET )
{
menu.Append( MYID_SHOW_DATASHEET, _( "Show Datasheet" ), _( "Show datasheet in browser" ) );
menu.AppendSeparator();
}
GRID_TRICKS::showPopupMenu( menu );
}
void doPopupSelection( wxCommandEvent& event ) override void doPopupSelection( wxCommandEvent& event ) override
{
if( event.GetId() == MYID_SELECT_FOOTPRINT )
{
// pick a footprint using the footprint picker.
wxString fpid = m_grid->GetCellValue( m_grid->GetGridCursorRow(), FOOTPRINT );
KIWAY_PLAYER* frame = m_dlg->Kiway().Player( FRAME_PCB_MODULE_VIEWER_MODAL, true, m_dlg );
if( frame->ShowModal( &fpid, m_dlg ) )
m_grid->SetCellValue( m_grid->GetGridCursorRow(), FOOTPRINT, fpid );
frame->Destroy();
}
else if (event.GetId() == MYID_SHOW_DATASHEET )
{
wxString datasheet_uri = m_grid->GetCellValue( m_grid->GetGridCursorRow(), DATASHEET );
datasheet_uri = ResolveUriByEnvVars( datasheet_uri );
GetAssociatedDocument( m_dlg, datasheet_uri );
}
else
{ {
GRID_TRICKS::doPopupSelection( event ); GRID_TRICKS::doPopupSelection( event );
}
if( event.GetId() >= GRIDTRICKS_FIRST_SHOWHIDE && event.GetId() < GRIDTRICKS_LAST_ID ) if( event.GetId() >= GRIDTRICKS_FIRST_SHOWHIDE && event.GetId() < GRIDTRICKS_LAST_ID )
{ {
@ -61,6 +108,7 @@ protected:
} }
} }
DIALOG_SHIM* m_dlg;
wxDataViewListCtrl* m_fieldsCtrl; wxDataViewListCtrl* m_fieldsCtrl;
}; };
@ -609,17 +657,27 @@ DIALOG_FIELDS_EDITOR_GLOBAL::DIALOG_FIELDS_EDITOR_GLOBAL( SCH_EDIT_FRAME* parent
} }
// add Cut, Copy, and Paste to wxGrid // add Cut, Copy, and Paste to wxGrid
m_grid->PushEventHandler( new FIELDS_EDITOR_GRID_TRICKS( m_grid, m_fieldsCtrl ) ); m_grid->PushEventHandler( new FIELDS_EDITOR_GRID_TRICKS( this, m_grid, m_fieldsCtrl ) );
// give a bit more room for editing // give a bit more room for comboboxes
m_grid->SetDefaultRowSize( m_grid->GetDefaultRowSize() + 2 ); m_grid->SetDefaultRowSize( m_grid->GetDefaultRowSize() + 4 );
// set reference column attributes // set reference column attributes
wxGridCellAttr* attr = new wxGridCellAttr; wxGridCellAttr* attr = new wxGridCellAttr;
attr->SetReadOnly(); attr->SetReadOnly();
m_grid->SetColAttr( 0, attr ); m_grid->SetColAttr( REFERENCE, attr );
m_grid->SetColMinimalWidth( 0, 100 ); m_grid->SetColMinimalWidth( 0, 100 );
// set footprint column browse button
attr = new wxGridCellAttr;
attr->SetEditor( new GRID_CELL_FOOTPRINT_EDITOR( this ) );
m_grid->SetColAttr( FOOTPRINT, attr );
// set datasheet column viewer button
attr = new wxGridCellAttr;
attr->SetEditor( new GRID_CELL_URL_EDITOR( this ) );
m_grid->SetColAttr( DATASHEET, attr );
// set quantities column attributes // set quantities column attributes
attr = new wxGridCellAttr; attr = new wxGridCellAttr;
attr->SetReadOnly(); attr->SetReadOnly();