Commit a985255f authored by Dick Hollenbeck's avatar Dick Hollenbeck
Browse files

add back missing pcbnew cross probing event handlers. eeschema launches...

add back missing pcbnew cross probing event handlers.  eeschema launches kiface versions of pcbnew & cvpcb if not single.
parent f9f3ff22
Loading
Loading
Loading
Loading
+14 −9
Original line number Original line Diff line number Diff line
@@ -47,8 +47,8 @@ KIWAY::KIWAY( PGM_BASE* aProgram, wxFrame* aTop ):


// Any event types derived from wxCommandEvt, like wxWindowDestroyEvent, are
// Any event types derived from wxCommandEvt, like wxWindowDestroyEvent, are
// propogated upwards to parent windows if not handled below.  Therefor the
// propogated upwards to parent windows if not handled below.  Therefor the
// m_top window should receive all wxWindowDestroyEvents from originating
// m_top window should receive all wxWindowDestroyEvents originating from
// from KIWAY_PLAYERs.  It does anyways, but now playerDestroyHandler eavesdrops
// KIWAY_PLAYERs.  It does anyways, but now playerDestroyHandler eavesdrops
// on that event stream looking for KIWAY_PLAYERs being closed.
// on that event stream looking for KIWAY_PLAYERs being closed.


void KIWAY::playerDestroyHandler( wxWindowDestroyEvent& event )
void KIWAY::playerDestroyHandler( wxWindowDestroyEvent& event )
@@ -57,7 +57,7 @@ void KIWAY::playerDestroyHandler( wxWindowDestroyEvent& event )


    for( unsigned i=0; i<DIM(m_player);  ++i )
    for( unsigned i=0; i<DIM(m_player);  ++i )
    {
    {
        // if destroying one of our flock, then mark it as diseased.
        // if destroying one of our flock, then mark it as deceased.
        if( (wxWindow*) m_player[i] == w )
        if( (wxWindow*) m_player[i] == w )
        {
        {
            // DBG(printf( "%s: marking m_player[%d] as destroyed\n", __func__, i );)
            // DBG(printf( "%s: marking m_player[%d] as destroyed\n", __func__, i );)
@@ -219,7 +219,7 @@ KIWAY::FACE_T KIWAY::KifaceType( FRAME_T aFrameType )
}
}




KIWAY_PLAYER* KIWAY::PlayerCreate( FRAME_T aFrameType )
KIWAY_PLAYER* KIWAY::Player( FRAME_T aFrameType, bool doCreate )
{
{
    // Since this will be called from python, cannot assume that code will
    // Since this will be called from python, cannot assume that code will
    // not pass a bad aFrameType.
    // not pass a bad aFrameType.
@@ -236,6 +236,8 @@ KIWAY_PLAYER* KIWAY::PlayerCreate( FRAME_T aFrameType )
    if( m_player[aFrameType] )
    if( m_player[aFrameType] )
        return m_player[aFrameType];
        return m_player[aFrameType];


    if( doCreate )
    {
        FACE_T face_type = KifaceType( aFrameType );
        FACE_T face_type = KifaceType( aFrameType );


        wxASSERT( face_type != FACE_T(-1) );
        wxASSERT( face_type != FACE_T(-1) );
@@ -247,6 +249,9 @@ KIWAY_PLAYER* KIWAY::PlayerCreate( FRAME_T aFrameType )
        return m_player[aFrameType] = frame;
        return m_player[aFrameType] = frame;
    }
    }


    return NULL;
}



bool KIWAY::PlayerClose( FRAME_T aFrameType, bool doForce )
bool KIWAY::PlayerClose( FRAME_T aFrameType, bool doForce )
{
{
+2 −1
Original line number Original line Diff line number Diff line
@@ -78,7 +78,7 @@ SCH_ITEM* SCH_EDIT_FRAME::LocateAndShowItem( const wxPoint& aPosition, const KIC
        return NULL;
        return NULL;
    }
    }


    /* Cross probing to Pcbnew if a pin or a component is found */
    // Cross probing to Pcbnew if a pin or a component is found
    switch( item->Type() )
    switch( item->Type() )
    {
    {
    case SCH_FIELD_T:
    case SCH_FIELD_T:
@@ -105,6 +105,7 @@ SCH_ITEM* SCH_EDIT_FRAME::LocateAndShowItem( const wxPoint& aPosition, const KIC
    {
    {
        // Force display pin information (the previous display could be a component info)
        // Force display pin information (the previous display could be a component info)
        MSG_PANEL_ITEMS items;
        MSG_PANEL_ITEMS items;

        Pin->GetMsgPanelInfo( items );
        Pin->GetMsgPanelInfo( items );


        if( LibItem )
        if( LibItem )
+50 −31
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@


#include <fctsys.h>
#include <fctsys.h>
#include <pgm_base.h>
#include <pgm_base.h>
#include <kiface_i.h>
#include <macros.h>
#include <macros.h>
#include <eda_dde.h>
#include <eda_dde.h>
#include <wxEeschemaStruct.h>
#include <wxEeschemaStruct.h>
@@ -107,56 +108,74 @@ void SCH_EDIT_FRAME::ExecuteRemoteCommand( const char* cmdline )
}
}




void SCH_EDIT_FRAME::SendMessageToPCBNEW( EDA_ITEM* objectToSync, SCH_COMPONENT* LibItem )
std::string FormatProbeItem( EDA_ITEM* aComponent, SCH_COMPONENT* aPart )
{
{
    if( objectToSync == NULL )
    // Cross probing to Pcbnew if a pin or a component is found
        return;
    switch( aComponent->Type() )

    LIB_PIN* Pin = NULL;
    char     Line[1024];

    /* Cross probing to Pcbnew if a pin or a component is found */
    switch( objectToSync->Type() )
    {
    {
    case SCH_FIELD_T:
    case SCH_FIELD_T:
    case LIB_FIELD_T:
    case LIB_FIELD_T:
        {
        {
            if( !LibItem )
            if( !aPart )
                break;
                break;


            sprintf( Line, "$PART: %s", TO_UTF8( LibItem->GetField( REFERENCE )->GetText() ) );
            return StrPrintf( "$PART: %s", TO_UTF8( aPart->GetField( REFERENCE )->GetText() ) );
            SendCommand( MSG_TO_PCB, Line );
        }
        }
        break;
        break;


    case SCH_COMPONENT_T:
    case SCH_COMPONENT_T:
        LibItem = (SCH_COMPONENT*) objectToSync;
        aPart = (SCH_COMPONENT*) aComponent;
        sprintf( Line, "$PART: %s", TO_UTF8( LibItem->GetField( REFERENCE )->GetText() ) );
        return StrPrintf( "$PART: %s", TO_UTF8( aPart->GetField( REFERENCE )->GetText() ) );
        SendCommand( MSG_TO_PCB, Line );
        break;


    case LIB_PIN_T:
    case LIB_PIN_T:
        if( !LibItem )
        {
            if( !aPart )
                break;
                break;


        Pin = (LIB_PIN*) objectToSync;
            LIB_PIN* pin = (LIB_PIN*) aComponent;


        if( Pin->GetNumber() )
            if( pin->GetNumber() )
            {
            {
                wxString pinnum;
                wxString pinnum;
            Pin->PinStringNum( pinnum );

            sprintf( Line, "$PIN: %s $PART: %s", TO_UTF8( pinnum ),
                pin->PinStringNum( pinnum );
                     TO_UTF8( LibItem->GetField( REFERENCE )->GetText() ) );

                return StrPrintf( "$PIN: %s $PART: %s", TO_UTF8( pinnum ),
                         TO_UTF8( aPart->GetField( REFERENCE )->GetText() ) );
            }
            }
            else
            else
            {
            {
            sprintf( Line, "$PART: %s", TO_UTF8( LibItem->GetField( REFERENCE )->GetText() ) );
                return StrPrintf( "$PART: %s", TO_UTF8( aPart->GetField( REFERENCE )->GetText() ) );
            }
        }
        }

        SendCommand( MSG_TO_PCB, Line );
        break;
        break;


    default:
    default:
        break;
        break;
    }
    }

    return "";
}


void SCH_EDIT_FRAME::SendMessageToPCBNEW( EDA_ITEM* aComponent, SCH_COMPONENT* aPart )
{
#if 1
    wxASSERT( aComponent );       // fix the caller

#else  // WTF?
    if( objectToSync == NULL )      // caller remains eternally stupid.
        return;
#endif

    std::string packet = FormatProbeItem( aComponent, aPart );

    if( packet.size() )
    {
        if( Kiface().IsSingle() )
            SendCommand( MSG_TO_PCB, packet.c_str() );
        else
        {
        }
    }
}
}
+32 −68
Original line number Original line Diff line number Diff line
@@ -64,20 +64,22 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
    // Menu File:
    // Menu File:
    wxMenu* fileMenu = new wxMenu;
    wxMenu* fileMenu = new wxMenu;


    // New
    if( Kiface().IsSingle() )   // not when under a project mgr
    {
        AddMenuItem( fileMenu,
        AddMenuItem( fileMenu,
                     ID_NEW_PROJECT,
                     ID_NEW_PROJECT,
                     _( "&New Schematic Project" ),
                     _( "&New Schematic Project" ),
                     _( "Clear current schematic hierarchy and start a new schematic root sheet" ),
                     _( "Clear current schematic hierarchy and start a new schematic root sheet" ),
                     KiBitmap( new_xpm ) );
                     KiBitmap( new_xpm ) );


    // Open
        text = AddHotkeyName( _( "&Open Schematic Project" ), s_Schematic_Hokeys_Descr, HK_LOAD_SCH );
        text = AddHotkeyName( _( "&Open Schematic Project" ), s_Schematic_Hokeys_Descr, HK_LOAD_SCH );
        AddMenuItem( fileMenu,
        AddMenuItem( fileMenu,
                     ID_LOAD_PROJECT, text,
                     ID_LOAD_PROJECT, text,
                     _( "Open an existing schematic hierarchy" ),
                     _( "Open an existing schematic hierarchy" ),
                     KiBitmap( open_document_xpm ) );
                     KiBitmap( open_document_xpm ) );
    }


    // @todo: static probably not OK in multiple open projects.
    // Open Recent submenu
    // Open Recent submenu
    static wxMenu* openRecentMenu;
    static wxMenu* openRecentMenu;


@@ -91,21 +93,21 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
    Kiface().GetFileHistory().UseMenu( openRecentMenu );
    Kiface().GetFileHistory().UseMenu( openRecentMenu );
    Kiface().GetFileHistory().AddFilesToMenu( openRecentMenu );
    Kiface().GetFileHistory().AddFilesToMenu( openRecentMenu );


    if( Kiface().IsSingle() )   // not when under a project mgr
    {
        AddMenuItem( fileMenu, openRecentMenu,
        AddMenuItem( fileMenu, openRecentMenu,
                     wxID_ANY, _( "Open &Recent" ),
                     wxID_ANY, _( "Open &Recent" ),
                     _( "Open a recent opened schematic project" ),
                     _( "Open a recent opened schematic project" ),
                     KiBitmap( open_project_xpm ) );
                     KiBitmap( open_project_xpm ) );
    }


    // Import
    AddMenuItem( fileMenu,
    AddMenuItem( fileMenu,
                 ID_APPEND_PROJECT, _( "&Append Schematic Sheet" ),
                 ID_APPEND_PROJECT, _( "&Append Schematic Sheet" ),
                 _( "Append schematic sheet to current project" ),
                 _( "Append schematic sheet to current project" ),
                 KiBitmap( open_document_xpm ) );
                 KiBitmap( open_document_xpm ) );


    // Separator
    fileMenu->AppendSeparator();
    fileMenu->AppendSeparator();


    // Save schematic project
    text = AddHotkeyName( _( "&Save Schematic Project" ),
    text = AddHotkeyName( _( "&Save Schematic Project" ),
                          s_Schematic_Hokeys_Descr, HK_SAVE_SCH );
                          s_Schematic_Hokeys_Descr, HK_SAVE_SCH );
    AddMenuItem( fileMenu,
    AddMenuItem( fileMenu,
@@ -113,31 +115,29 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
                 _( "Save all sheets in schematic project" ),
                 _( "Save all sheets in schematic project" ),
                 KiBitmap( save_project_xpm ) );
                 KiBitmap( save_project_xpm ) );


    // Save current sheet
    AddMenuItem( fileMenu,
    AddMenuItem( fileMenu,
                 ID_UPDATE_ONE_SHEET,
                 ID_UPDATE_ONE_SHEET,
                 _( "Save &Current Sheet Only" ),
                 _( "Save &Current Sheet Only" ),
                 _( "Save only current schematic sheet" ),
                 _( "Save only current schematic sheet" ),
                 KiBitmap( save_xpm ) );
                 KiBitmap( save_xpm ) );


    // Save current sheet as
    if( Kiface().IsSingle() )   // not when under a project mgr
    {
        AddMenuItem( fileMenu,
        AddMenuItem( fileMenu,
                     ID_SAVE_ONE_SHEET_UNDER_NEW_NAME,
                     ID_SAVE_ONE_SHEET_UNDER_NEW_NAME,
                     _( "Save Current Sheet &As" ),
                     _( "Save Current Sheet &As" ),
                     _( "Save current schematic sheet as..." ),
                     _( "Save current schematic sheet as..." ),
                     KiBitmap( save_as_xpm ) );
                     KiBitmap( save_as_xpm ) );
    }


    // Separator
    fileMenu->AppendSeparator();
    fileMenu->AppendSeparator();


    // Page settings
    AddMenuItem( fileMenu,
    AddMenuItem( fileMenu,
                 ID_SHEET_SET,
                 ID_SHEET_SET,
                 _( "Pa&ge Settings" ),
                 _( "Pa&ge Settings" ),
                 _( "Setting for sheet size and frame references" ),
                 _( "Setting for sheet size and frame references" ),
                 KiBitmap( sheetset_xpm ) );
                 KiBitmap( sheetset_xpm ) );


    // Print
    AddMenuItem( fileMenu,
    AddMenuItem( fileMenu,
                 wxID_PRINT,
                 wxID_PRINT,
                 _( "Pri&nt" ),
                 _( "Pri&nt" ),
@@ -155,7 +155,6 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()


    // Plot to Clipboard (Windows only)
    // Plot to Clipboard (Windows only)



    AddMenuItem( choice_plot_fmt, ID_GEN_COPY_SHEET_TO_CLIPBOARD,
    AddMenuItem( choice_plot_fmt, ID_GEN_COPY_SHEET_TO_CLIPBOARD,
                 _( "Plot to &Clipboard" ),
                 _( "Plot to &Clipboard" ),
                 _( "Export drawings to clipboard" ),
                 _( "Export drawings to clipboard" ),
@@ -243,32 +242,26 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
     * using in AddHotkeyName call the option "false" (not a shortcut)
     * using in AddHotkeyName call the option "false" (not a shortcut)
     */
     */


    // Zoom in
    text = AddHotkeyName( _( "Zoom &In" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "Zoom &In" ), s_Schematic_Hokeys_Descr,
                          HK_ZOOM_IN, IS_ACCELERATOR );  // add an accelerator, not a shortcut
                          HK_ZOOM_IN, IS_ACCELERATOR );  // add an accelerator, not a shortcut
    AddMenuItem( viewMenu, ID_ZOOM_IN, text, HELP_ZOOM_IN, KiBitmap( zoom_in_xpm ) );
    AddMenuItem( viewMenu, ID_ZOOM_IN, text, HELP_ZOOM_IN, KiBitmap( zoom_in_xpm ) );


    // Zoom out
    text = AddHotkeyName( _( "Zoom &Out" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "Zoom &Out" ), s_Schematic_Hokeys_Descr,
                          HK_ZOOM_OUT, IS_ACCELERATOR );  // add accelerator, not a shortcut
                          HK_ZOOM_OUT, IS_ACCELERATOR );  // add accelerator, not a shortcut
    AddMenuItem( viewMenu, ID_ZOOM_OUT, text, HELP_ZOOM_OUT, KiBitmap( zoom_out_xpm ) );
    AddMenuItem( viewMenu, ID_ZOOM_OUT, text, HELP_ZOOM_OUT, KiBitmap( zoom_out_xpm ) );


    // Fit on screen
    text = AddHotkeyName( _( "&Fit on Screen" ), s_Schematic_Hokeys_Descr, HK_ZOOM_AUTO );
    text = AddHotkeyName( _( "&Fit on Screen" ), s_Schematic_Hokeys_Descr, HK_ZOOM_AUTO );


    AddMenuItem( viewMenu, ID_ZOOM_PAGE, text, HELP_ZOOM_FIT, KiBitmap( zoom_fit_in_page_xpm ) );
    AddMenuItem( viewMenu, ID_ZOOM_PAGE, text, HELP_ZOOM_FIT, KiBitmap( zoom_fit_in_page_xpm ) );


    // Separator
    viewMenu->AppendSeparator();
    viewMenu->AppendSeparator();


    // Hierarchy
    AddMenuItem( viewMenu,
    AddMenuItem( viewMenu,
                 ID_HIERARCHY,
                 ID_HIERARCHY,
                 _( "Show &Hierarchical Navigator" ),
                 _( "Show &Hierarchical Navigator" ),
                 _( "Navigate hierarchical sheets" ),
                 _( "Navigate hierarchical sheets" ),
                 KiBitmap( hierarchy_nav_xpm ) );
                 KiBitmap( hierarchy_nav_xpm ) );


    // Redraw
    text = AddHotkeyName( _( "&Redraw" ), s_Schematic_Hokeys_Descr, HK_ZOOM_REDRAW );
    text = AddHotkeyName( _( "&Redraw" ), s_Schematic_Hokeys_Descr, HK_ZOOM_REDRAW );
    AddMenuItem( viewMenu, ID_ZOOM_REDRAW, text, HELP_ZOOM_REDRAW, KiBitmap( zoom_redraw_xpm ) );
    AddMenuItem( viewMenu, ID_ZOOM_REDRAW, text, HELP_ZOOM_REDRAW, KiBitmap( zoom_redraw_xpm ) );


@@ -276,78 +269,66 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
    // @todo unify IDs
    // @todo unify IDs
    wxMenu* placeMenu = new wxMenu;
    wxMenu* placeMenu = new wxMenu;


    // Component
    text = AddHotkeyName( _( "&Component" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "&Component" ), s_Schematic_Hokeys_Descr,
                          HK_ADD_NEW_COMPONENT, IS_ACCELERATOR );    // add an accelerator, not a shortcut
                          HK_ADD_NEW_COMPONENT, IS_ACCELERATOR );    // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_SCH_PLACE_COMPONENT, text,
    AddMenuItem( placeMenu, ID_SCH_PLACE_COMPONENT, text,
                 HELP_PLACE_COMPONENTS,
                 HELP_PLACE_COMPONENTS,
                 KiBitmap( add_component_xpm ) );
                 KiBitmap( add_component_xpm ) );


    // Power port
    text = AddHotkeyName( _( "&Power Port" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "&Power Port" ), s_Schematic_Hokeys_Descr,
                          HK_ADD_NEW_POWER, IS_ACCELERATOR );    // add an accelerator, not a shortcut
                          HK_ADD_NEW_POWER, IS_ACCELERATOR );    // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_PLACE_POWER_BUTT, text,
    AddMenuItem( placeMenu, ID_PLACE_POWER_BUTT, text,
                 HELP_PLACE_POWERPORT,
                 HELP_PLACE_POWERPORT,
                 KiBitmap( add_power_xpm ) );
                 KiBitmap( add_power_xpm ) );


    // Wire
    text = AddHotkeyName( _( "&Wire" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "&Wire" ), s_Schematic_Hokeys_Descr,
                          HK_BEGIN_WIRE, IS_ACCELERATOR );    // add an accelerator, not a shortcut
                          HK_BEGIN_WIRE, IS_ACCELERATOR );    // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_WIRE_BUTT, text,
    AddMenuItem( placeMenu, ID_WIRE_BUTT, text,
                 HELP_PLACE_WIRE,
                 HELP_PLACE_WIRE,
                 KiBitmap( add_line_xpm ) );
                 KiBitmap( add_line_xpm ) );


    // Bus
    text = AddHotkeyName( _( "&Bus" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "&Bus" ), s_Schematic_Hokeys_Descr,
                          HK_BEGIN_BUS, IS_ACCELERATOR );    // add an accelerator, not a shortcut
                          HK_BEGIN_BUS, IS_ACCELERATOR );    // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_BUS_BUTT, text,
    AddMenuItem( placeMenu, ID_BUS_BUTT, text,
                 HELP_PLACE_BUS,
                 HELP_PLACE_BUS,
                 KiBitmap( add_bus_xpm ) );
                 KiBitmap( add_bus_xpm ) );


    // Wire to Bus entry
    text = AddHotkeyName( _( "Wire to Bus &Entry" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "Wire to Bus &Entry" ), s_Schematic_Hokeys_Descr,
                          HK_ADD_WIRE_ENTRY, IS_ACCELERATOR );    // add an accelerator, not a shortcut
                          HK_ADD_WIRE_ENTRY, IS_ACCELERATOR );    // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_WIRETOBUS_ENTRY_BUTT, text,
    AddMenuItem( placeMenu, ID_WIRETOBUS_ENTRY_BUTT, text,
                 HELP_PLACE_WIRE2BUS_ENTRY,
                 HELP_PLACE_WIRE2BUS_ENTRY,
                 KiBitmap( add_line2bus_xpm ) );
                 KiBitmap( add_line2bus_xpm ) );


    // Bus to Bus entry
    text = AddHotkeyName( _( "Bus &to Bus Entry" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "Bus &to Bus Entry" ), s_Schematic_Hokeys_Descr,
                          HK_ADD_BUS_ENTRY, IS_ACCELERATOR );    // add an accelerator, not a shortcut
                          HK_ADD_BUS_ENTRY, IS_ACCELERATOR );    // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_BUSTOBUS_ENTRY_BUTT, text,
    AddMenuItem( placeMenu, ID_BUSTOBUS_ENTRY_BUTT, text,
                 HELP_PLACE_BUS2BUS_ENTRY,
                 HELP_PLACE_BUS2BUS_ENTRY,
                 KiBitmap( add_bus2bus_xpm ) );
                 KiBitmap( add_bus2bus_xpm ) );


    // No Connect Flag
    text = AddHotkeyName( _( "&No Connect Flag" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "&No Connect Flag" ), s_Schematic_Hokeys_Descr,
                          HK_ADD_NOCONN_FLAG, IS_ACCELERATOR );    // add an accelerator, not a shortcut
                          HK_ADD_NOCONN_FLAG, IS_ACCELERATOR );    // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_NOCONN_BUTT, text, HELP_PLACE_NC_FLAG, KiBitmap( noconn_xpm ) );
    AddMenuItem( placeMenu, ID_NOCONN_BUTT, text, HELP_PLACE_NC_FLAG, KiBitmap( noconn_xpm ) );


    // Net name
    text = AddHotkeyName( _( "&Label" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "&Label" ), s_Schematic_Hokeys_Descr,
                          HK_ADD_LABEL, IS_ACCELERATOR );    // add an accelerator, not a shortcut
                          HK_ADD_LABEL, IS_ACCELERATOR );    // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_LABEL_BUTT, text,
    AddMenuItem( placeMenu, ID_LABEL_BUTT, text,
                 HELP_PLACE_NETLABEL,
                 HELP_PLACE_NETLABEL,
                 KiBitmap( add_line_label_xpm ) );
                 KiBitmap( add_line_label_xpm ) );


    // Global label
    text = AddHotkeyName( _( "Gl&obal Label" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "Gl&obal Label" ), s_Schematic_Hokeys_Descr,
                          HK_ADD_GLABEL, IS_ACCELERATOR );    // add an accelerator, not a shortcut
                          HK_ADD_GLABEL, IS_ACCELERATOR );    // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_GLABEL_BUTT, text,
    AddMenuItem( placeMenu, ID_GLABEL_BUTT, text,
                 HELP_PLACE_GLOBALLABEL,
                 HELP_PLACE_GLOBALLABEL,
                 KiBitmap( add_glabel_xpm ) );
                 KiBitmap( add_glabel_xpm ) );


    // Junction
    text = AddHotkeyName( _( "&Junction" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "&Junction" ), s_Schematic_Hokeys_Descr,
                          HK_ADD_JUNCTION, IS_ACCELERATOR );    // add an accelerator, not a shortcut
                          HK_ADD_JUNCTION, IS_ACCELERATOR );    // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_JUNCTION_BUTT, text,
    AddMenuItem( placeMenu, ID_JUNCTION_BUTT, text,
                 HELP_PLACE_JUNCTION,
                 HELP_PLACE_JUNCTION,
                 KiBitmap( add_junction_xpm ) );
                 KiBitmap( add_junction_xpm ) );


    // Separator
    placeMenu->AppendSeparator();
    placeMenu->AppendSeparator();


    // Hierarchical label
    text = AddHotkeyName( _( "&Hierarchical Label" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "&Hierarchical Label" ), s_Schematic_Hokeys_Descr,
                          HK_ADD_HLABEL, IS_ACCELERATOR );          // add an accelerator, not a shortcut
                          HK_ADD_HLABEL, IS_ACCELERATOR );          // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_HIERLABEL_BUTT,
    AddMenuItem( placeMenu, ID_HIERLABEL_BUTT,
@@ -355,38 +336,32 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
                 KiBitmap( add_hierarchical_label_xpm ) );
                 KiBitmap( add_hierarchical_label_xpm ) );




    // Hierarchical sheet
    text = AddHotkeyName( _( "H&ierarchical &Sheet" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "H&ierarchical &Sheet" ), s_Schematic_Hokeys_Descr,
                          HK_ADD_HIER_SHEET, IS_ACCELERATOR );    // add an accelerator, not a shortcut
                          HK_ADD_HIER_SHEET, IS_ACCELERATOR );    // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_SHEET_SYMBOL_BUTT, text,
    AddMenuItem( placeMenu, ID_SHEET_SYMBOL_BUTT, text,
                 HELP_PLACE_SHEET,
                 HELP_PLACE_SHEET,
                 KiBitmap( add_hierarchical_subsheet_xpm ) );
                 KiBitmap( add_hierarchical_subsheet_xpm ) );


    // Import hierarchical sheet
    AddMenuItem( placeMenu,
    AddMenuItem( placeMenu,
                 ID_IMPORT_HLABEL_BUTT,
                 ID_IMPORT_HLABEL_BUTT,
                 _( "I&mport Hierarchical Label" ),
                 _( "I&mport Hierarchical Label" ),
                 HELP_IMPORT_SHEETPIN,
                 HELP_IMPORT_SHEETPIN,
                 KiBitmap( import_hierarchical_label_xpm ) );
                 KiBitmap( import_hierarchical_label_xpm ) );


    // Add hierarchical Pin to Sheet
    AddMenuItem( placeMenu,
    AddMenuItem( placeMenu,
                 ID_SHEET_PIN_BUTT,
                 ID_SHEET_PIN_BUTT,
                 _( "Hierarchical Pi&n to Sheet" ),
                 _( "Hierarchical Pi&n to Sheet" ),
                 HELP_PLACE_SHEETPIN,
                 HELP_PLACE_SHEETPIN,
                 KiBitmap( add_hierar_pin_xpm ) );
                 KiBitmap( add_hierar_pin_xpm ) );


    // Separator
    placeMenu->AppendSeparator();
    placeMenu->AppendSeparator();


    // Graphic line or polygon
    text = AddHotkeyName( _( "Graphic Polyline" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "Graphic Polyline" ), s_Schematic_Hokeys_Descr,
                          HK_ADD_GRAPHIC_POLYLINE, IS_ACCELERATOR );    // add an accelerator, not a shortcut
                          HK_ADD_GRAPHIC_POLYLINE, IS_ACCELERATOR );    // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_LINE_COMMENT_BUTT, text,
    AddMenuItem( placeMenu, ID_LINE_COMMENT_BUTT, text,
                 HELP_PLACE_GRAPHICLINES,
                 HELP_PLACE_GRAPHICLINES,
                 KiBitmap( add_dashed_line_xpm ) );
                 KiBitmap( add_dashed_line_xpm ) );


    // Graphic text
    text = AddHotkeyName( _( "Graphic Text" ), s_Schematic_Hokeys_Descr,
    text = AddHotkeyName( _( "Graphic Text" ), s_Schematic_Hokeys_Descr,
                          HK_ADD_GRAPHIC_TEXT, IS_ACCELERATOR );    // add an accelerator, not a shortcut
                          HK_ADD_GRAPHIC_TEXT, IS_ACCELERATOR );    // add an accelerator, not a shortcut
    AddMenuItem( placeMenu, ID_TEXT_COMMENT_BUTT, text,
    AddMenuItem( placeMenu, ID_TEXT_COMMENT_BUTT, text,
@@ -437,14 +412,12 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
    // Separator
    // Separator
    preferencesMenu->AppendSeparator();
    preferencesMenu->AppendSeparator();


    // Save preferences
    AddMenuItem( preferencesMenu,
    AddMenuItem( preferencesMenu,
                 ID_CONFIG_SAVE,
                 ID_CONFIG_SAVE,
                 _( "&Save Preferences" ),
                 _( "&Save Preferences" ),
                 _( "Save application preferences" ),
                 _( "Save application preferences" ),
                 KiBitmap( save_setup_xpm ) );
                 KiBitmap( save_setup_xpm ) );


    // Read preferences
    AddMenuItem( preferencesMenu,
    AddMenuItem( preferencesMenu,
                 ID_CONFIG_READ,
                 ID_CONFIG_READ,
                 _( "&Read Preferences" ),
                 _( "&Read Preferences" ),
@@ -454,22 +427,18 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
    // Menu Tools:
    // Menu Tools:
    wxMenu* toolsMenu = new wxMenu;
    wxMenu* toolsMenu = new wxMenu;


    // Library editor
    AddMenuItem( toolsMenu,
    AddMenuItem( toolsMenu,
                 ID_TO_LIBRARY,
                 ID_TO_LIBRARY,
                 _( "Library &Editor" ), HELP_RUN_LIB_EDITOR,
                 _( "Library &Editor" ), HELP_RUN_LIB_EDITOR,
                 KiBitmap( libedit_xpm ) );
                 KiBitmap( libedit_xpm ) );


    // Library viewer
    AddMenuItem( toolsMenu,
    AddMenuItem( toolsMenu,
                 ID_TO_LIBVIEW,
                 ID_TO_LIBVIEW,
                 _( "Library &Browser" ),  HELP_RUN_LIB_VIEWER,
                 _( "Library &Browser" ),  HELP_RUN_LIB_VIEWER,
                 KiBitmap( library_browse_xpm ) );
                 KiBitmap( library_browse_xpm ) );


    // Separator
    toolsMenu->AppendSeparator();
    toolsMenu->AppendSeparator();


    // Annotate
    AddMenuItem( toolsMenu,
    AddMenuItem( toolsMenu,
                 ID_GET_ANNOTATE,
                 ID_GET_ANNOTATE,
                 _( "&Annotate Schematic" ), HELP_ANNOTATE,
                 _( "&Annotate Schematic" ), HELP_ANNOTATE,
@@ -482,21 +451,18 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
                 _( "Perform electrical rule check" ),
                 _( "Perform electrical rule check" ),
                 KiBitmap( erc_xpm ) );
                 KiBitmap( erc_xpm ) );


    // Generate netlist
    AddMenuItem( toolsMenu,
    AddMenuItem( toolsMenu,
                 ID_GET_NETLIST,
                 ID_GET_NETLIST,
                 _( "Generate &Netlist File" ),
                 _( "Generate &Netlist File" ),
                 _( "Generate the component netlist file" ),
                 _( "Generate the component netlist file" ),
                 KiBitmap( netlist_xpm ) );
                 KiBitmap( netlist_xpm ) );


    // Generate bill of materials
    AddMenuItem( toolsMenu,
    AddMenuItem( toolsMenu,
                 ID_GET_TOOLS,
                 ID_GET_TOOLS,
                 _( "Generate Bill of &Materials" ),
                 _( "Generate Bill of &Materials" ),
                 HELP_GENERATE_BOM,
                 HELP_GENERATE_BOM,
                 KiBitmap( bom_xpm ) );
                 KiBitmap( bom_xpm ) );


    // Separator
    toolsMenu->AppendSeparator();
    toolsMenu->AppendSeparator();


    // Run CvPcb
    // Run CvPcb
@@ -519,7 +485,6 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
    // Version info
    // Version info
    AddHelpVersionInfoMenuEntry( helpMenu );
    AddHelpVersionInfoMenuEntry( helpMenu );


    // Contents
    AddMenuItem( helpMenu,
    AddMenuItem( helpMenu,
                 wxID_HELP,
                 wxID_HELP,
                 _( "Eesc&hema Manual" ),
                 _( "Eesc&hema Manual" ),
@@ -532,7 +497,6 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
                 _( "Open \"Getting Started in KiCad\" guide for beginners" ),
                 _( "Open \"Getting Started in KiCad\" guide for beginners" ),
                 KiBitmap( help_xpm ) );
                 KiBitmap( help_xpm ) );


    // About Eeschema
    helpMenu->AppendSeparator();
    helpMenu->AppendSeparator();
    AddMenuItem( helpMenu,
    AddMenuItem( helpMenu,
                 wxID_ABOUT,
                 wxID_ABOUT,
+35 −4
Original line number Original line Diff line number Diff line
@@ -764,11 +764,25 @@ void SCH_EDIT_FRAME::OnOpenPcbnew( wxCommandEvent& event )
    {
    {
        fn.SetExt( PcbFileExtension );
        fn.SetExt( PcbFileExtension );


        if( Kiface().IsSingle() )
        {
            wxString filename = QuoteFullPath( fn );
            wxString filename = QuoteFullPath( fn );

            ExecuteFile( this, PCBNEW_EXE, filename );
            ExecuteFile( this, PCBNEW_EXE, filename );
        }
        }
        else
        else
        {
            KIWAY_PLAYER* player = Kiway().Player( FRAME_PCB, false );  // test open already.

            if( !player )
            {
                player = Kiway().Player( FRAME_PCB, true );
                player->OpenProjectFiles( std::vector<wxString>( 1, fn.GetFullPath() ) );
                player->Show( true );
            }
            player->Raise();
        }
    }
    else
    {
    {
        ExecuteFile( this, PCBNEW_EXE );
        ExecuteFile( this, PCBNEW_EXE );
    }
    }
@@ -782,10 +796,25 @@ void SCH_EDIT_FRAME::OnOpenCvpcb( wxCommandEvent& event )
    fn.SetExt( NetlistFileExtension );
    fn.SetExt( NetlistFileExtension );


    if( fn.IsOk() && fn.FileExists() )
    if( fn.IsOk() && fn.FileExists() )
    {
        if( Kiface().IsSingle() )
        {
        {
            ExecuteFile( this, CVPCB_EXE, QuoteFullPath( fn ) );
            ExecuteFile( this, CVPCB_EXE, QuoteFullPath( fn ) );
        }
        }
        else
        else
        {
            KIWAY_PLAYER* player = Kiway().Player( FRAME_CVPCB, false );  // test open already.

            if( !player )
            {
                player = Kiway().Player( FRAME_CVPCB, true );
                player->OpenProjectFiles( std::vector<wxString>( 1, fn.GetFullPath() ) );
                player->Show( true );
            }
            player->Raise();
        }
    }
    else
    {
    {
        ExecuteFile( this, CVPCB_EXE );
        ExecuteFile( this, CVPCB_EXE );
    }
    }
@@ -809,6 +838,8 @@ void SCH_EDIT_FRAME::OnOpenLibraryEditor( wxCommandEvent& event )
        component = (SCH_COMPONENT*) item;
        component = (SCH_COMPONENT*) item;
    }
    }


    // @todo: should be changed to use Kiway().Player()?

    LIB_EDIT_FRAME* libeditFrame = LIB_EDIT_FRAME::GetActiveLibraryEditor();;
    LIB_EDIT_FRAME* libeditFrame = LIB_EDIT_FRAME::GetActiveLibraryEditor();;
    if( libeditFrame )
    if( libeditFrame )
    {
    {
Loading