bool LIB_EDIT_FRAME::OnRightClick( const wxPoint& aPosition, wxMenu* PopMenu ) { LIB_ITEM* item = GetDrawItem(); bool blockActive = GetScreen()->IsBlockActive(); if( blockActive ) { AddMenusForBlock( PopMenu, this ); PopMenu->AppendSeparator(); return true; } LIB_PART* part = GetCurPart(); if( !part ) return true; // If Command in progress, put menu "cancel" if( item && item->InEditMode() ) { AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_CANCEL_EDITING, _( "Cancel" ), KiBitmap( cancel_xpm ) ); PopMenu->AppendSeparator(); } else { item = LocateItemUsingCursor( aPosition ); // If the clarify item selection context menu is aborted, don't show the context menu. if( item == NULL && m_canvas->GetAbortRequest() ) { m_canvas->SetAbortRequest( false ); return false; } if( GetToolId() != ID_NO_TOOL_SELECTED ) { // If a tool is active, put menu "end tool" AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_CANCEL_EDITING, _( "End Tool" ), KiBitmap( cursor_xpm ) ); PopMenu->AppendSeparator(); } } if( item ) { MSG_PANEL_ITEMS items; item->GetMsgPanelInfo( items ); SetMsgPanel( items ); } else { return true; } m_drawItem = item; bool not_edited = !item->InEditMode(); wxString msg; switch( item->Type() ) { case LIB_PIN_T: AddMenusForPin( PopMenu, (LIB_PIN*) item, this ); break; case LIB_ARC_T: if( not_edited ) { msg = AddHotkeyName( _( "Move Arc" ), g_Libedit_Hokeys_Descr, HK_LIBEDIT_MOVE_GRAPHIC_ITEM ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST, msg, KiBitmap( move_arc_xpm ) ); msg = AddHotkeyName( _( "Drag Arc Size" ), g_Libedit_Hokeys_Descr, HK_DRAG ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_MODIFY_ITEM, msg, KiBitmap( move_arc_xpm ) ); } msg = AddHotkeyName( _( "Edit Arc Options" ), g_Libedit_Hokeys_Descr, HK_EDIT ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_BODY_EDIT_ITEM, msg, KiBitmap( options_arc_xpm ) ); if( not_edited ) { msg = AddHotkeyName( _( "Delete Arc" ), g_Libedit_Hokeys_Descr, HK_DELETE ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_DELETE_ITEM, msg, KiBitmap( delete_arc_xpm ) ); } break; case LIB_CIRCLE_T: if( not_edited ) { msg = AddHotkeyName( _( "Move Circle" ), g_Libedit_Hokeys_Descr, HK_LIBEDIT_MOVE_GRAPHIC_ITEM ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST, msg, KiBitmap( move_circle_xpm ) ); msg = AddHotkeyName( _( "Drag Circle Outline" ), g_Libedit_Hokeys_Descr, HK_DRAG ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_MODIFY_ITEM, msg, KiBitmap( move_rectangle_xpm ) ); } msg = AddHotkeyName( _( "Edit Circle Options" ), g_Libedit_Hokeys_Descr, HK_EDIT ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_BODY_EDIT_ITEM, msg, KiBitmap( options_circle_xpm ) ); if( not_edited ) { msg = AddHotkeyName( _( "Delete Circle" ), g_Libedit_Hokeys_Descr, HK_DELETE ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_DELETE_ITEM, msg, KiBitmap( delete_circle_xpm ) ); } break; case LIB_RECTANGLE_T: if( not_edited ) { msg = AddHotkeyName( _( "Move Rectangle" ), g_Libedit_Hokeys_Descr, HK_LIBEDIT_MOVE_GRAPHIC_ITEM ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST, msg, KiBitmap( move_rectangle_xpm ) ); } msg = AddHotkeyName( _( "Edit Rectangle Options" ), g_Libedit_Hokeys_Descr, HK_EDIT ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_BODY_EDIT_ITEM, msg, KiBitmap( options_rectangle_xpm ) ); if( not_edited ) { msg = AddHotkeyName( _( "Drag Rectangle Edge" ), g_Libedit_Hokeys_Descr, HK_DRAG ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_MODIFY_ITEM, msg, KiBitmap( move_rectangle_xpm ) ); msg = AddHotkeyName( _( "Delete Rectangle" ), g_Libedit_Hokeys_Descr, HK_DELETE ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_DELETE_ITEM, msg, KiBitmap( delete_rectangle_xpm ) ); } break; case LIB_TEXT_T: if( not_edited ) { msg = AddHotkeyName( _( "Move Text" ), g_Libedit_Hokeys_Descr, HK_LIBEDIT_MOVE_GRAPHIC_ITEM ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST, msg, KiBitmap( move_text_xpm ) ); } msg = AddHotkeyName( _( "Edit Text" ), g_Libedit_Hokeys_Descr, HK_EDIT ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_BODY_EDIT_ITEM, msg, KiBitmap( edit_text_xpm ) ); msg = AddHotkeyName( _( "Rotate Text" ), g_Libedit_Hokeys_Descr, HK_ROTATE ); AddMenuItem( PopMenu, ID_LIBEDIT_ROTATE_ITEM, msg, KiBitmap( edit_text_xpm ) ); if( not_edited ) { msg = AddHotkeyName( _( "Delete Text" ), g_Libedit_Hokeys_Descr, HK_DELETE ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_DELETE_ITEM, msg, KiBitmap( delete_text_xpm ) ); } break; case LIB_POLYLINE_T: if( not_edited ) { msg = AddHotkeyName( _( "Move Line" ), g_Libedit_Hokeys_Descr, HK_LIBEDIT_MOVE_GRAPHIC_ITEM ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST, msg, KiBitmap( move_line_xpm ) ); msg = AddHotkeyName( _( "Drag Edge Point" ), g_Libedit_Hokeys_Descr, HK_DRAG ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_MODIFY_ITEM, msg, KiBitmap( move_line_xpm ) ); } if( item->IsNew() ) { AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_END_CREATE_ITEM, _( "Line End" ), KiBitmap( checked_ok_xpm ) ); } msg = AddHotkeyName( _( "Edit Line Options" ), g_Libedit_Hokeys_Descr, HK_EDIT ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_BODY_EDIT_ITEM, msg, KiBitmap( options_segment_xpm ) ); if( not_edited ) { msg = AddHotkeyName( _( "Delete Line " ), g_Libedit_Hokeys_Descr, HK_DELETE ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_DELETE_ITEM, msg, KiBitmap( delete_segment_xpm ) ); } if( item->IsNew() ) { if( ( (LIB_POLYLINE*) item )->GetCornerCount() > 2 ) { msg = AddHotkeyName( _( "Delete Segment" ), g_Libedit_Hokeys_Descr, HK_DELETE ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_DELETE_CURRENT_POLY_SEGMENT, msg, KiBitmap( delete_segment_xpm ) ); } } break; case LIB_FIELD_T: if( not_edited ) { msg = AddHotkeyName( _( "Move Field" ), g_Libedit_Hokeys_Descr, HK_LIBEDIT_MOVE_GRAPHIC_ITEM ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST, msg, KiBitmap( move_field_xpm ) ); } msg = AddHotkeyName( _( "Field Rotate" ), g_Libedit_Hokeys_Descr, HK_ROTATE ); AddMenuItem( PopMenu, ID_LIBEDIT_ROTATE_ITEM, msg, KiBitmap( rotate_field_xpm ) ); msg = AddHotkeyName( _( "Field Edit" ), g_Libedit_Hokeys_Descr, HK_EDIT ); AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_FIELD_EDIT_ITEM, msg, KiBitmap( edit_text_xpm ) ); break; default: wxFAIL_MSG( wxString::Format( wxT( "Unknown library item type %d" ), item->Type() ) ); m_drawItem = NULL; break; } PopMenu->AppendSeparator(); return true; }
bool SCH_EDIT_FRAME::OnRightClick( const wxPoint& aPosition, wxMenu* PopMenu ) { SCH_ITEM* item = GetScreen()->GetCurItem(); bool blockActive = GetScreen()->IsBlockActive(); wxString msg; // Do not start a block command on context menu. m_canvas->SetCanStartBlock( -1 ); if( blockActive ) { AddMenusForBlock( PopMenu, this ); PopMenu->AppendSeparator(); // If we have a block containing only one main element // we append its edition submenu if( item != NULL ) { switch( item->Type() ) { case SCH_COMPONENT_T: AddMenusForEditComponent( PopMenu, (SCH_COMPONENT *) item, Prj().SchLibs() ); PopMenu->AppendSeparator(); break; case SCH_TEXT_T: msg = AddHotkeyName( _( "Edit Text" ), g_Schematic_Hokeys_Descr, HK_EDIT ); AddMenuItem( PopMenu, ID_SCH_EDIT_ITEM, msg, KiBitmap( edit_text_xpm ) ); PopMenu->AppendSeparator(); break; case SCH_LABEL_T: msg = AddHotkeyName( _( "Edit Label" ), g_Schematic_Hokeys_Descr, HK_EDIT ); AddMenuItem( PopMenu, ID_SCH_EDIT_ITEM, msg, KiBitmap( edit_text_xpm ) ); PopMenu->AppendSeparator(); break; case SCH_GLOBAL_LABEL_T: msg = AddHotkeyName( _( "Edit Global Label" ), g_Schematic_Hokeys_Descr, HK_EDIT ); AddMenuItem( PopMenu, ID_SCH_EDIT_ITEM, msg, KiBitmap( edit_text_xpm ) ); PopMenu->AppendSeparator(); break; case SCH_HIERARCHICAL_LABEL_T: msg = AddHotkeyName( _( "Edit Hierarchical Label" ), g_Schematic_Hokeys_Descr, HK_EDIT ); AddMenuItem( PopMenu, ID_SCH_EDIT_ITEM, msg, KiBitmap( edit_text_xpm ) ); PopMenu->AppendSeparator(); break; case SCH_BITMAP_T: msg = AddHotkeyName( _( "Edit Image" ), g_Schematic_Hokeys_Descr, HK_EDIT ); AddMenuItem( PopMenu, ID_SCH_EDIT_ITEM, msg, KiBitmap( image_xpm ) ); PopMenu->AppendSeparator(); break; default: break; } } return true; } // Try to locate items at cursor position. if( (item == NULL) || (item->GetFlags() == 0) ) { item = LocateAndShowItem( aPosition, SCH_COLLECTOR::AllItemsButPins ); // If the clarify item selection context menu is aborted, don't show the context menu. if( item == NULL && m_canvas->GetAbortRequest() ) { m_canvas->SetAbortRequest( false ); return false; } } // If a command is in progress: add "cancel" and "end tool" menu // If if( GetToolId() != ID_NO_TOOL_SELECTED ) { if( item && item->GetFlags() ) { AddMenuItem( PopMenu, ID_CANCEL_CURRENT_COMMAND, _( "Cancel" ), KiBitmap( cancel_xpm ) ); } else { AddMenuItem( PopMenu, ID_CANCEL_CURRENT_COMMAND, _( "End Tool" ), KiBitmap( cursor_xpm ) ); } PopMenu->AppendSeparator(); switch( GetToolId() ) { case ID_WIRE_BUTT: AddMenusForWire( PopMenu, NULL, this ); if( item == NULL ) PopMenu->AppendSeparator(); break; case ID_BUS_BUTT: AddMenusForBus( PopMenu, NULL, this ); if( item == NULL ) PopMenu->AppendSeparator(); break; default: break; } } else { if( item && item->GetFlags() ) { AddMenuItem( PopMenu, ID_CANCEL_CURRENT_COMMAND, _( "Cancel" ), KiBitmap( cancel_xpm ) ); PopMenu->AppendSeparator(); } } if( item == NULL ) { if( m_CurrentSheet->Last() != g_RootSheet ) { msg = AddHotkeyName( _( "Leave Sheet" ), g_Schematic_Hokeys_Descr, HK_LEAVE_SHEET ); AddMenuItem( PopMenu, ID_POPUP_SCH_LEAVE_SHEET, msg, KiBitmap( leave_sheet_xpm ) ); PopMenu->AppendSeparator(); } return true; } bool is_new = item->IsNew(); switch( item->Type() ) { case SCH_NO_CONNECT_T: AddMenuItem( PopMenu, ID_POPUP_SCH_DELETE, _( "Delete No Connect" ), KiBitmap( delete_xpm ) ); break; case SCH_JUNCTION_T: addJunctionMenuEntries( PopMenu, (SCH_JUNCTION*) item ); break; case SCH_BUS_BUS_ENTRY_T: case SCH_BUS_WIRE_ENTRY_T: AddMenusForBusEntry( PopMenu, static_cast<SCH_BUS_ENTRY_BASE*>( item ) ); break; case SCH_MARKER_T: AddMenusForMarkers( PopMenu, (SCH_MARKER*) item, this ); break; case SCH_TEXT_T: AddMenusForText( PopMenu, (SCH_TEXT*) item ); break; case SCH_LABEL_T: AddMenusForLabel( PopMenu, (SCH_LABEL*) item ); break; case SCH_GLOBAL_LABEL_T: AddMenusForGLabel( PopMenu, (SCH_GLOBALLABEL*) item ); break; case SCH_HIERARCHICAL_LABEL_T: AddMenusForHLabel( PopMenu, (SCH_HIERLABEL*) item ); break; case SCH_FIELD_T: AddMenusForComponentField( PopMenu, (SCH_FIELD*) item ); break; case SCH_COMPONENT_T: AddMenusForComponent( PopMenu, (SCH_COMPONENT*) item, Prj().SchLibs() ); break; case SCH_BITMAP_T: AddMenusForBitmap( PopMenu, (SCH_BITMAP*) item ); break; case SCH_LINE_T: switch( item->GetLayer() ) { case LAYER_WIRE: AddMenusForWire( PopMenu, (SCH_LINE*) item, this ); break; case LAYER_BUS: AddMenusForBus( PopMenu, (SCH_LINE*) item, this ); break; default: if( is_new ) AddMenuItem( PopMenu, ID_POPUP_END_LINE, _( "End Drawing" ), KiBitmap( checked_ok_xpm ) ); AddMenuItem( PopMenu, ID_POPUP_SCH_DELETE, _( "Delete Drawing" ), KiBitmap( delete_xpm ) ); break; } break; case SCH_SHEET_T: AddMenusForHierchicalSheet( PopMenu, (SCH_SHEET*) item ); break; case SCH_SHEET_PIN_T: AddMenusForSheetPin( PopMenu, (SCH_SHEET_PIN*) item ); break; default: wxFAIL_MSG( wxString::Format( wxT( "Cannot create context menu for unknown type %d" ), item->Type() ) ); break; } PopMenu->AppendSeparator(); return true; }
void WinEDA_LibeditFrame::OnRightClick(const wxPoint& MousePos, wxMenu * PopMenu) /********************************************************************************/ { LibEDA_BaseStruct* DrawEntry = CurrentDrawItem; bool BlockActive = (m_CurrentScreen->BlockLocate.m_Command != BLOCK_IDLE); if ( CurrentLibEntry == NULL ) return; if ( (DrawEntry == NULL) || (DrawEntry->m_Flags == 0) ) { // Simple localisation des elements DrawEntry = LocatePin(m_CurrentScreen->m_Curseur, CurrentLibEntry, CurrentUnit, CurrentConvert); if ( DrawEntry == NULL ) { DrawEntry = CurrentDrawItem = LocateDrawItem(GetScreen(), CurrentLibEntry,CurrentUnit, CurrentConvert,LOCATE_ALL_DRAW_ITEM); } if ( DrawEntry == NULL ) { DrawEntry = CurrentDrawItem = (LibEDA_BaseStruct*) LocateField(CurrentLibEntry); } } // If Command in progresss: put the menu "cancel" and "end tool" if ( m_ID_current_state ) { if (DrawEntry && DrawEntry->m_Flags) { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_CANCEL_EDITING, _("Cancel"), cancel_xpm); } else { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_CANCEL_EDITING, _("End Tool"), cancel_tool_xpm); } PopMenu->AppendSeparator(); } else { if ( (DrawEntry && DrawEntry->m_Flags) || BlockActive ) { if ( BlockActive ) AddMenusForBlock( PopMenu, this); else ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_CANCEL_EDITING, _("Cancel"), cancel_xpm); PopMenu->AppendSeparator(); } } if ( DrawEntry ) DrawEntry->Display_Infos_DrawEntry(this); else return; CurrentDrawItem = DrawEntry; switch ( DrawEntry->m_StructType ) { case COMPONENT_PIN_DRAW_TYPE: AddMenusForPin(PopMenu, (LibDrawPin*)DrawEntry, this); break; case COMPONENT_ARC_DRAW_TYPE: if( DrawEntry->m_Flags == 0 ) { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST, _("Move Arc"), move_arc_xpm); } ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_BODY_EDIT_ITEM, _("Arc Options"), options_arc_xpm ); if( DrawEntry->m_Flags == 0 ) { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_DELETE_ITEM, _("Arc Delete"), delete_arc_xpm); } break; case COMPONENT_CIRCLE_DRAW_TYPE: if( DrawEntry->m_Flags == 0 ) { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST, _("Move Circle"), move_circle_xpm); } ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_BODY_EDIT_ITEM, _("Circle Options"), options_circle_xpm); if( DrawEntry->m_Flags == 0 ) { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_DELETE_ITEM, _("Circle Delete"), delete_circle_xpm); } break; case COMPONENT_RECT_DRAW_TYPE: if( DrawEntry->m_Flags == 0 ) { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST, _("Move Rect"), move_rectangle_xpm); } ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_BODY_EDIT_ITEM, _("Rect Options"), options_rectangle_xpm); if( DrawEntry->m_Flags == 0 ) { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_DELETE_ITEM, _("Rect Delete"), delete_rectangle_xpm); } break; case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE: if( DrawEntry->m_Flags == 0 ) { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST, _("Move Text"), move_text_xpm); } ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_BODY_EDIT_ITEM, _("Text Editor"), edit_text_xpm); ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_ROTATE_GRAPHIC_TEXT, _("Rotate Text"), edit_text_xpm); if( DrawEntry->m_Flags == 0 ) { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_DELETE_ITEM, _("Text Delete"), delete_text_xpm); } break; case COMPONENT_POLYLINE_DRAW_TYPE: if( DrawEntry->m_Flags == 0 ) { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST, _("Move Line"), move_line_xpm); } if ( DrawEntry->m_Flags & IS_NEW ) { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_END_CREATE_ITEM, _("Line End"), apply_xpm); } ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_BODY_EDIT_ITEM, _("Line Options"), options_segment_xpm); if( DrawEntry->m_Flags == 0 ) { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_DELETE_ITEM, _("Line Delete"), delete_segment_xpm); } else if( (DrawEntry->m_Flags & IS_NEW) ) { if( ((LibDrawPolyline*)DrawEntry)->n > 2 ) ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_DELETE_CURRENT_POLY_SEGMENT, _("Segment Delete"), delete_segment_xpm); } break; case COMPONENT_FIELD_DRAW_TYPE: if( DrawEntry->m_Flags == 0 ) { ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST, _("Move Field"), move_field_xpm); } ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_FIELD_ROTATE_ITEM, _("Field Rotate"), rotate_field_xpm); ADD_MENUITEM(PopMenu, ID_POPUP_LIBEDIT_FIELD_EDIT_ITEM, _("Field Edit"), edit_text_xpm); break; default: wxString msg; msg.Printf( wxT("WinEDA_LibeditFrame::OnRightClick Error: unknown StructType %d"), DrawEntry->m_StructType); DisplayError(this, msg ); CurrentDrawItem = NULL; break; } PopMenu->AppendSeparator(); }