Add hotkey for viewing symbol datasheet.

Also fixes a bug when there are multiple datasheets to choose from.

Fixes: lp:1793978
* https://bugs.launchpad.net/kicad/+bug/1793978
This commit is contained in:
Jeff Young 2018-09-24 15:31:35 +01:00
parent efefbf0fa0
commit 533b26e8a1
12 changed files with 60 additions and 21 deletions

View File

@ -156,7 +156,6 @@ enum id_eeschema_frm
ID_POPUP_SCH_GENERIC_EDIT_CMP, ID_POPUP_SCH_GENERIC_EDIT_CMP,
ID_POPUP_SCH_EDIT_CONVERT_CMP, ID_POPUP_SCH_EDIT_CONVERT_CMP,
ID_POPUP_SCH_EDIT_FIELD, ID_POPUP_SCH_EDIT_FIELD,
ID_POPUP_SCH_DISPLAYDOC_CMP,
ID_POPUP_SCH_ENTER_SHEET, ID_POPUP_SCH_ENTER_SHEET,
ID_POPUP_SCH_LEAVE_SHEET, ID_POPUP_SCH_LEAVE_SHEET,
ID_POPUP_SCH_SELECT_ON_PCB, ID_POPUP_SCH_SELECT_ON_PCB,
@ -166,6 +165,7 @@ enum id_eeschema_frm
ID_POPUP_SCH_GETINFO_MARKER, ID_POPUP_SCH_GETINFO_MARKER,
ID_POPUP_END_RANGE, ID_POPUP_END_RANGE,
ID_POPUP_SCH_DISPLAYDOC_CMP,
ID_POPUP_SCH_CALL_LIBEDIT_AND_LOAD_CMP, ID_POPUP_SCH_CALL_LIBEDIT_AND_LOAD_CMP,
// Unit select context menus command IDs. // Unit select context menus command IDs.

View File

@ -169,10 +169,13 @@ static EDA_HOTKEY HkEditComponentReference( _HKI( "Edit Symbol Reference" ),
static EDA_HOTKEY HkEditComponentFootprint( _HKI( "Edit Symbol Footprint" ), static EDA_HOTKEY HkEditComponentFootprint( _HKI( "Edit Symbol Footprint" ),
HK_EDIT_COMPONENT_FOOTPRINT, 'F', HK_EDIT_COMPONENT_FOOTPRINT, 'F',
ID_SCH_EDIT_COMPONENT_FOOTPRINT ); ID_SCH_EDIT_COMPONENT_FOOTPRINT );
static EDA_HOTKEY HkShowComponentDatasheet( _HKI( "Show Symbol Datasheet" ),
HK_SHOW_COMPONENT_DATASHEET, 'D' + GR_KB_CTRL,
ID_POPUP_SCH_DISPLAYDOC_CMP );
static EDA_HOTKEY HkEditComponentWithLibedit( _HKI( "Edit with Symbol Editor" ), static EDA_HOTKEY HkEditComponentWithLibedit( _HKI( "Edit with Symbol Editor" ),
HK_EDIT_COMPONENT_WITH_LIBEDIT, HK_EDIT_COMPONENT_WITH_LIBEDIT, 'E' + GR_KB_CTRL,
'E' + GR_KB_CTRL,
ID_POPUP_SCH_CALL_LIBEDIT_AND_LOAD_CMP ); ID_POPUP_SCH_CALL_LIBEDIT_AND_LOAD_CMP );
static EDA_HOTKEY HkMove( _HKI( "Move Schematic Item" ), static EDA_HOTKEY HkMove( _HKI( "Move Schematic Item" ),
HK_MOVE_COMPONENT_OR_ITEM, 'M', HK_MOVE_COMPONENT_OR_ITEM, 'M',
ID_SCH_MOVE_ITEM ); ID_SCH_MOVE_ITEM );
@ -203,6 +206,8 @@ static EDA_HOTKEY HkZoomSelection( _HKI( "Zoom to Selection" ), HK_ZOOM_SELECTIO
static EDA_HOTKEY HkCreatePin( _HKI( "Create Pin" ), HK_LIBEDIT_CREATE_PIN, 'P' ); static EDA_HOTKEY HkCreatePin( _HKI( "Create Pin" ), HK_LIBEDIT_CREATE_PIN, 'P' );
static EDA_HOTKEY HkInsertPin( _HKI( "Repeat Pin" ), HK_REPEAT_LAST, WXK_INSERT ); static EDA_HOTKEY HkInsertPin( _HKI( "Repeat Pin" ), HK_REPEAT_LAST, WXK_INSERT );
static EDA_HOTKEY HkMoveLibItem( _HKI( "Move Library Item" ), HK_LIBEDIT_MOVE_GRAPHIC_ITEM, 'M' ); static EDA_HOTKEY HkMoveLibItem( _HKI( "Move Library Item" ), HK_LIBEDIT_MOVE_GRAPHIC_ITEM, 'M' );
static EDA_HOTKEY HkViewDoc( _HKI( "Show Datasheet" ), HK_LIBEDIT_VIEW_DOC, 'D' + GR_KB_CTRL,
ID_LIBEDIT_VIEW_DOC );
// Autoplace fields // Autoplace fields
static EDA_HOTKEY HkAutoplaceFields( _HKI( "Autoplace Fields" ), HK_AUTOPLACE_FIELDS, 'O', static EDA_HOTKEY HkAutoplaceFields( _HKI( "Autoplace Fields" ), HK_AUTOPLACE_FIELDS, 'O',
@ -295,6 +300,7 @@ static EDA_HOTKEY* schematic_Hotkey_List[] =
&HkEditComponentValue, &HkEditComponentValue,
&HkEditComponentReference, &HkEditComponentReference,
&HkEditComponentFootprint, &HkEditComponentFootprint,
&HkShowComponentDatasheet,
&HkEditComponentWithLibedit, &HkEditComponentWithLibedit,
&HkBeginWire, &HkBeginWire,
&HkBeginBus, &HkBeginBus,
@ -325,6 +331,7 @@ static EDA_HOTKEY* libEdit_Hotkey_List[] =
&HkMoveLibItem, &HkMoveLibItem,
&HkMirrorX, &HkMirrorX,
&HkMirrorY, &HkMirrorY,
&HkViewDoc,
NULL NULL
}; };
@ -610,6 +617,7 @@ bool SCH_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition,
case HK_EDIT_COMPONENT_VALUE: // Edit component value field. case HK_EDIT_COMPONENT_VALUE: // Edit component value field.
case HK_EDIT_COMPONENT_REFERENCE: // Edit component value reference. case HK_EDIT_COMPONENT_REFERENCE: // Edit component value reference.
case HK_EDIT_COMPONENT_FOOTPRINT: // Edit component footprint field. case HK_EDIT_COMPONENT_FOOTPRINT: // Edit component footprint field.
case HK_SHOW_COMPONENT_DATASHEET: // Show component datasheet in browser.
case HK_MIRROR_Y: // Mirror Y case HK_MIRROR_Y: // Mirror Y
case HK_MIRROR_X: // Mirror X case HK_MIRROR_X: // Mirror X
case HK_ORIENT_NORMAL_COMPONENT: // Orient 0, no mirror (Component) case HK_ORIENT_NORMAL_COMPONENT: // Orient 0, no mirror (Component)

View File

@ -43,12 +43,14 @@ enum hotkey_id_commnand {
HK_LIBEDIT_MOVE_GRAPHIC_ITEM, HK_LIBEDIT_MOVE_GRAPHIC_ITEM,
HK_MOVEBLOCK_TO_DRAGBLOCK, HK_MOVEBLOCK_TO_DRAGBLOCK,
HK_LIBEDIT_CREATE_PIN, HK_LIBEDIT_CREATE_PIN,
HK_LIBEDIT_VIEW_DOC,
HK_DELETE_PIN, HK_DELETE_PIN,
HK_ROTATE, HK_ROTATE,
HK_EDIT, HK_EDIT,
HK_EDIT_COMPONENT_VALUE, HK_EDIT_COMPONENT_VALUE,
HK_EDIT_COMPONENT_REFERENCE, HK_EDIT_COMPONENT_REFERENCE,
HK_EDIT_COMPONENT_FOOTPRINT, HK_EDIT_COMPONENT_FOOTPRINT,
HK_SHOW_COMPONENT_DATASHEET,
HK_EDIT_COMPONENT_WITH_LIBEDIT, HK_EDIT_COMPONENT_WITH_LIBEDIT,
HK_MIRROR_X, HK_MIRROR_X,
HK_MIRROR_Y, HK_MIRROR_Y,

View File

@ -580,11 +580,12 @@ void LIB_EDIT_FRAME::OnViewEntryDoc( wxCommandEvent& event )
{ {
CONTEXT_MENU popup; CONTEXT_MENU popup;
wxString msg; wxString msg;
int id = 0;
for( LIB_ALIAS* alias : part->GetAliases() ) for( LIB_ALIAS* alias : part->GetAliases() )
{ {
msg.Printf( wxT( "%s (%s)" ), alias->GetName(), alias->GetDocFileName() ); msg.Printf( wxT( "%s (%s)" ), alias->GetName(), alias->GetDocFileName() );
popup.Append( wxID_ANY, msg ); popup.Append( id++, msg );
} }
PopupMenu( &popup ); PopupMenu( &popup );

View File

@ -265,9 +265,11 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
// Menu Inspect: // Menu Inspect:
wxMenu* inspectMenu = new wxMenu; wxMenu* inspectMenu = new wxMenu;
text = AddHotkeyName( _( "Show Datasheet" ), g_Libedit_Hokeys_Descr, HK_LIBEDIT_VIEW_DOC );
AddMenuItem( inspectMenu, AddMenuItem( inspectMenu,
ID_LIBEDIT_VIEW_DOC, ID_LIBEDIT_VIEW_DOC,
_( "Show Datasheet" ), text,
_( "Open associated datasheet in web browser" ), _( "Open associated datasheet in web browser" ),
KiBitmap( datasheet_xpm ) ); KiBitmap( datasheet_xpm ) );
@ -322,7 +324,7 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
_( "Open the \"Getting Started in KiCad\" guide for beginners" ), _( "Open the \"Getting Started in KiCad\" guide for beginners" ),
KiBitmap( help_xpm ) ); KiBitmap( help_xpm ) );
text = AddHotkeyName( _( "&List Hotkeys..." ), g_Eeschema_Hokeys_Descr, HK_HELP ); text = AddHotkeyName( _( "&List Hotkeys..." ), g_Libedit_Hokeys_Descr, HK_HELP );
AddMenuItem( helpMenu, AddMenuItem( helpMenu,
ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST, ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST,
text, text,

View File

@ -350,6 +350,10 @@ void AddMenusForComponentField( wxMenu* PopMenu, SCH_FIELD* Field )
id = HK_EDIT_COMPONENT_FOOTPRINT; id = HK_EDIT_COMPONENT_FOOTPRINT;
name = _( "Edit Footprint Field..." ); name = _( "Edit Footprint Field..." );
break; break;
case DATASHEET:
id = HK_SHOW_COMPONENT_DATASHEET;
name = _( "Show Datasheet" );
break;
default: default:
id = HK_EDIT; id = HK_EDIT;
name = _( "Edit Field..." ); name = _( "Edit Field..." );
@ -460,6 +464,11 @@ void AddMenusForEditComponent( wxMenu* PopMenu, SCH_COMPONENT* Component, SYMBOL
HK_EDIT_COMPONENT_FOOTPRINT ); HK_EDIT_COMPONENT_FOOTPRINT );
AddMenuItem( editmenu, ID_SCH_EDIT_COMPONENT_FOOTPRINT, msg, AddMenuItem( editmenu, ID_SCH_EDIT_COMPONENT_FOOTPRINT, msg,
KiBitmap( edit_comp_footprint_xpm ) ); KiBitmap( edit_comp_footprint_xpm ) );
msg = AddHotkeyName( _( "Show Datasheet" ), g_Schematic_Hokeys_Descr,
HK_SHOW_COMPONENT_DATASHEET );
AddMenuItem( editmenu, ID_POPUP_SCH_DISPLAYDOC_CMP, msg,
KiBitmap( datasheet_xpm ) );
} }
if( part && part->HasConversion() ) if( part && part->HasConversion() )

View File

@ -107,6 +107,11 @@ const KICAD_T SCH_COLLECTOR::CmpFieldFootprintOnly[] = {
EOT EOT
}; };
const KICAD_T SCH_COLLECTOR::CmpFieldDatasheetOnly[] = {
SCH_FIELD_LOCATE_DATASHEET_T,
EOT
};
const KICAD_T SCH_COLLECTOR::MovableItems[] = { const KICAD_T SCH_COLLECTOR::MovableItems[] = {
SCH_MARKER_T, SCH_MARKER_T,

View File

@ -68,6 +68,11 @@ public:
*/ */
static const KICAD_T CmpFieldFootprintOnly[]; static const KICAD_T CmpFieldFootprintOnly[];
/**
* A scan list for a specific editable field: Datasheet.
*/
static const KICAD_T CmpFieldDatasheetOnly[];
/** /**
* A scan list for all movable schematic items. * A scan list for all movable schematic items.
*/ */

View File

@ -1770,6 +1770,10 @@ SEARCH_RESULT SCH_COMPONENT::Visit( INSPECTOR aInspector, void* aTestData,
return SEARCH_QUIT; return SEARCH_QUIT;
break; break;
case SCH_FIELD_LOCATE_DATASHEET_T:
if( SEARCH_QUIT == aInspector( GetField( DATASHEET ), (void*) this ) )
return SEARCH_QUIT;
break;
case LIB_PIN_T: case LIB_PIN_T:
if( PART_SPTR part = m_part.lock() ) if( PART_SPTR part = m_part.lock() )

View File

@ -313,6 +313,7 @@ BEGIN_EVENT_TABLE( SCH_EDIT_FRAME, EDA_DRAW_FRAME )
EVT_MENU_RANGE( ID_SCH_MIRROR_X, ID_SCH_ORIENT_NORMAL, SCH_EDIT_FRAME::OnOrient ) EVT_MENU_RANGE( ID_SCH_MIRROR_X, ID_SCH_ORIENT_NORMAL, SCH_EDIT_FRAME::OnOrient )
EVT_MENU_RANGE( ID_POPUP_START_RANGE, ID_POPUP_END_RANGE, EVT_MENU_RANGE( ID_POPUP_START_RANGE, ID_POPUP_END_RANGE,
SCH_EDIT_FRAME::Process_Special_Functions ) SCH_EDIT_FRAME::Process_Special_Functions )
EVT_MENU( ID_POPUP_SCH_DISPLAYDOC_CMP, SCH_EDIT_FRAME::OnEditItem )
// Tools and buttons options toolbar // Tools and buttons options toolbar
EVT_TOOL( ID_TB_OPTIONS_HIDDEN_PINS, SCH_EDIT_FRAME::OnSelectOptionToolbar ) EVT_TOOL( ID_TB_OPTIONS_HIDDEN_PINS, SCH_EDIT_FRAME::OnSelectOptionToolbar )

View File

@ -79,7 +79,6 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
case ID_POPUP_SCH_RESIZE_SHEET: case ID_POPUP_SCH_RESIZE_SHEET:
case ID_POPUP_IMPORT_HLABEL_TO_SHEETPIN: case ID_POPUP_IMPORT_HLABEL_TO_SHEETPIN:
case ID_POPUP_SCH_INIT_CMP: case ID_POPUP_SCH_INIT_CMP:
case ID_POPUP_SCH_DISPLAYDOC_CMP:
case ID_POPUP_SCH_EDIT_CONVERT_CMP: case ID_POPUP_SCH_EDIT_CONVERT_CMP:
case ID_POPUP_DELETE_BLOCK: case ID_POPUP_DELETE_BLOCK:
case ID_POPUP_PLACE_BLOCK: case ID_POPUP_PLACE_BLOCK:
@ -281,18 +280,6 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
break; break;
case ID_POPUP_SCH_DISPLAYDOC_CMP:
// Ensure the struct is a component (could be a piece of a component, like Field, text..)
if( item && item->Type() == SCH_COMPONENT_T )
{
wxString text = static_cast<SCH_COMPONENT*>( item )->GetField( DATASHEET )->GetText();
text = ResolveUriByEnvVars( text );
if( !text.IsEmpty() )
GetAssociatedDocument( this, text );
}
break;
case ID_POPUP_SCH_ENTER_SHEET: case ID_POPUP_SCH_ENTER_SHEET:
if( item && (item->Type() == SCH_SHEET_T) ) if( item && (item->Type() == SCH_SHEET_T) )
@ -1000,6 +987,10 @@ void SCH_EDIT_FRAME::OnEditItem( wxCommandEvent& aEvent )
filterListAux = SCH_COLLECTOR::ComponentsOnly; filterListAux = SCH_COLLECTOR::ComponentsOnly;
break; break;
case ID_POPUP_SCH_DISPLAYDOC_CMP:
filterList = SCH_COLLECTOR::CmpFieldDatasheetOnly;
filterListAux = SCH_COLLECTOR::ComponentsOnly;
default: default:
break; break;
} }
@ -1033,6 +1024,16 @@ void SCH_EDIT_FRAME::OnEditItem( wxCommandEvent& aEvent )
EditComponentFieldText( ( (SCH_COMPONENT*) item )->GetField( FOOTPRINT ) ); EditComponentFieldText( ( (SCH_COMPONENT*) item )->GetField( FOOTPRINT ) );
break; break;
case ID_POPUP_SCH_DISPLAYDOC_CMP:
{
wxString text = static_cast<SCH_COMPONENT*>( item )->GetField( DATASHEET )->GetText();
text = ResolveUriByEnvVars( text );
if( !text.IsEmpty() )
GetAssociatedDocument( this, text );
}
break;
case ID_SCH_EDIT_ITEM: case ID_SCH_EDIT_ITEM:
EditComponent( (SCH_COMPONENT*) item ); EditComponent( (SCH_COMPONENT*) item );
break; break;

View File

@ -128,6 +128,7 @@ enum KICAD_T
SCH_FIELD_LOCATE_REFERENCE_T, SCH_FIELD_LOCATE_REFERENCE_T,
SCH_FIELD_LOCATE_VALUE_T, SCH_FIELD_LOCATE_VALUE_T,
SCH_FIELD_LOCATE_FOOTPRINT_T, SCH_FIELD_LOCATE_FOOTPRINT_T,
SCH_FIELD_LOCATE_DATASHEET_T,
// General // General
SCH_SCREEN_T, SCH_SCREEN_T,