void WinEDA_LibeditFrame::RepeatPinItem(wxDC * DC, LibDrawPin * SourcePin) /************************************************************************/ /* Creation d'une nouvelle pin par copie de la précédente ( fct REPEAT) */ { LibDrawPin * Pin; wxString msg; int ox = 0, oy = 0; if(CurrentLibEntry == NULL ) return; if(SourcePin == NULL ) return; if(SourcePin->m_StructType != COMPONENT_PIN_DRAW_TYPE ) return; Pin = SourcePin->GenCopy(); Pin->Pnext = CurrentLibEntry->m_Drawings; CurrentLibEntry->m_Drawings = Pin; Pin->m_Flags = IS_NEW; Pin->m_Pos.x += g_RepeatStep.x; ox = Pin->m_Pos.x; Pin->m_Pos.y += - g_RepeatStep.y; oy = Pin->m_Pos.y; // ici axe Y comme en math /*** Increment du numero de label ***/ IncrementLabelMember(Pin->m_PinName); Pin->ReturnPinStringNum(msg); IncrementLabelMember(msg); Pin->SetPinNumFromString(msg); CurrentDrawItem = Pin; /* Marquage des pins a traiter */ if( g_EditPinByPinIsOn == FALSE ) Pin->m_Flags |= IS_LINKED; wxPoint savepos = GetScreen()->m_Curseur; GetScreen()->CursorOff(DrawPanel, DC); GetScreen()->m_Curseur.x = Pin->m_Pos.x; GetScreen()->m_Curseur.y = -Pin->m_Pos.y; PlacePin(DC); GetScreen()->m_Curseur = savepos; // DrawPanel->MouseToCursorSchema(); GetScreen()->CursorOn(DrawPanel, DC); Pin->Display_Infos_DrawEntry(this); GetScreen()->SetModify(); }
// Create a new pin based on the previous pin with an incremented pin number. void LIB_EDIT_FRAME::RepeatPinItem( wxDC* DC, LIB_PIN* SourcePin ) { wxString msg; LIB_PART* part = GetCurPart(); if( !part || !SourcePin || SourcePin->Type() != LIB_PIN_T ) return; LIB_PIN* pin = (LIB_PIN*) SourcePin->Clone(); pin->ClearFlags(); pin->SetFlags( IS_NEW ); wxPoint step; switch( pin->GetOrientation() ) { case PIN_UP: step.x = GetRepeatPinStep(); break; case PIN_DOWN: step.x = GetRepeatPinStep(); break; case PIN_LEFT: step.y = - GetRepeatPinStep(); break; case PIN_RIGHT: step.y = - GetRepeatPinStep(); break; } pin->Move( pin->GetPosition() + step ); wxString nextName = pin->GetName(); IncrementLabelMember( nextName, GetRepeatDeltaLabel() ); pin->SetName( nextName ); pin->PinStringNum( msg ); IncrementLabelMember( msg, GetRepeatDeltaLabel() ); pin->SetPinNumFromString( msg ); m_drawItem = pin; if( SynchronizePins() ) pin->SetFlags( IS_LINKED ); wxPoint savepos = GetCrossHairPosition(); m_canvas->CrossHairOff( DC ); SetCrossHairPosition( wxPoint( pin->GetPosition().x, -pin->GetPosition().y ) ); // Add this new pin in list, and creates pins for others parts if needed m_drawItem = pin; ClearTempCopyComponent(); PlacePin(); m_lastDrawItem = pin; SetCrossHairPosition( savepos ); m_canvas->CrossHairOn( DC ); MSG_PANEL_ITEMS items; pin->GetMsgPanelInfo( items ); SetMsgPanel( items ); OnModify( ); }
void LIB_EDIT_FRAME::OnLeftClick( wxDC* DC, const wxPoint& aPosition ) { LIB_ITEM* item = m_drawItem; bool item_in_edit = item && item->InEditMode(); bool no_item_edited = !item_in_edit; LIB_PART* part = GetCurPart(); if( !part ) // No component loaded ! return; if( ( GetToolId() == ID_NO_TOOL_SELECTED ) && no_item_edited ) { item = LocateItemUsingCursor( aPosition ); if( item ) { MSG_PANEL_ITEMS items; item->GetMsgPanelInfo( items ); SetMsgPanel( items ); } else { DisplayCmpDoc(); if( m_canvas->GetAbortRequest() ) m_canvas->SetAbortRequest( false ); } } switch( GetToolId() ) { case ID_NO_TOOL_SELECTED: // If an item is currently in edit, finish edit if( item_in_edit ) { switch( item->Type() ) { case LIB_PIN_T: PlacePin(); break; default: EndDrawGraphicItem( DC ); break; } } break; case ID_LIBEDIT_PIN_BUTT: if( no_item_edited ) CreatePin( DC ); else PlacePin(); break; case ID_LIBEDIT_BODY_LINE_BUTT: case ID_LIBEDIT_BODY_ARC_BUTT: case ID_LIBEDIT_BODY_CIRCLE_BUTT: case ID_LIBEDIT_BODY_RECT_BUTT: case ID_LIBEDIT_BODY_TEXT_BUTT: if( no_item_edited ) m_drawItem = CreateGraphicItem( part, DC ); else if( m_drawItem ) { if( m_drawItem->IsNew() ) GraphicItemBeginDraw( DC ); else EndDrawGraphicItem( DC ); } break; case ID_LIBEDIT_DELETE_ITEM_BUTT: m_drawItem = LocateItemUsingCursor( aPosition ); if( m_drawItem ) deleteItem( DC ); else DisplayCmpDoc(); break; case ID_LIBEDIT_ANCHOR_ITEM_BUTT: SaveCopyInUndoList( part ); PlaceAnchor(); SetToolID( ID_NO_TOOL_SELECTED, m_canvas->GetDefaultCursor(), wxEmptyString ); break; default: wxFAIL_MSG( wxString::Format( wxT( "Unhandled command ID %d" ), GetToolId() ) ); SetToolID( ID_NO_TOOL_SELECTED, m_canvas->GetDefaultCursor(), wxEmptyString ); break; } }
void LIB_EDIT_FRAME::OnLeftClick( wxDC* DC, const wxPoint& aPosition ) { LIB_ITEM* item = m_drawItem; if( m_component == NULL ) // No component loaded ! return; if( item == NULL || item->GetFlags() == 0 ) { item = LocateItemUsingCursor( aPosition ); if( item ) { item->DisplayInfo( this ); } else { DisplayCmpDoc(); if( m_canvas->GetAbortRequest() ) m_canvas->SetAbortRequest( false ); } } switch( GetToolId() ) { case ID_NO_TOOL_SELECTED: if( item && item->GetFlags() ) // moved object { switch( item->Type() ) { case LIB_PIN_T: PlacePin( DC ); break; default: EndDrawGraphicItem( DC ); break; } } break; case ID_LIBEDIT_PIN_BUTT: if( m_drawItem == NULL || m_drawItem->GetFlags() == 0 ) { CreatePin( DC ); } else { PlacePin( DC ); } break; case ID_LIBEDIT_BODY_LINE_BUTT: case ID_LIBEDIT_BODY_ARC_BUTT: case ID_LIBEDIT_BODY_CIRCLE_BUTT: case ID_LIBEDIT_BODY_RECT_BUTT: case ID_LIBEDIT_BODY_TEXT_BUTT: if( m_drawItem == NULL || m_drawItem->GetFlags() == 0 ) { m_drawItem = CreateGraphicItem( m_component, DC ); } else if( m_drawItem ) { if( m_drawItem->IsNew() ) GraphicItemBeginDraw( DC ); else EndDrawGraphicItem( DC ); } break; case ID_LIBEDIT_DELETE_ITEM_BUTT: m_drawItem = LocateItemUsingCursor( aPosition ); if( m_drawItem ) deleteItem( DC ); else DisplayCmpDoc(); break; case ID_LIBEDIT_ANCHOR_ITEM_BUTT: SaveCopyInUndoList( m_component ); PlaceAnchor(); SetToolID( ID_NO_TOOL_SELECTED, m_canvas->GetDefaultCursor(), wxEmptyString ); break; default: wxFAIL_MSG( wxString::Format( wxT( "Unhandled command ID %d" ), GetToolId() ) ); SetToolID( ID_NO_TOOL_SELECTED, m_canvas->GetDefaultCursor(), wxEmptyString ); break; } }
void WinEDA_LibeditFrame::OnLeftClick(wxDC * DC, const wxPoint& MousePos) /************************************************************************/ { LibEDA_BaseStruct* DrawEntry = CurrentDrawItem; if( CurrentLibEntry == NULL) return; if ( m_ID_current_state == 0 ) { if ( DrawEntry && DrawEntry->m_Flags ) { switch (DrawEntry->m_StructType ) { case COMPONENT_PIN_DRAW_TYPE: SaveCopyInUndoList(); PlacePin(DC); break; case COMPONENT_FIELD_DRAW_TYPE: SaveCopyInUndoList(); PlaceField(DC, (LibDrawField *) DrawEntry); DrawEntry = NULL; break; default: SaveCopyInUndoList(); EndDrawGraphicItem(DC); break; } } else { DrawEntry = LocatePin(m_CurrentScreen->m_Curseur, CurrentLibEntry, CurrentUnit, CurrentConvert); if (DrawEntry == NULL ) { DrawEntry = LocateDrawItem(GetScreen(), CurrentLibEntry,CurrentUnit, CurrentConvert,LOCATE_ALL_DRAW_ITEM); } if ( DrawEntry ) DrawEntry->Display_Infos_DrawEntry(this); else { EraseMsgBox(); AfficheDoc(this, CurrentLibEntry->m_Doc.GetData(), CurrentLibEntry->m_KeyWord.GetData()); } } } if ( m_ID_current_state ) { switch ( m_ID_current_state ) { case ID_NO_SELECT_BUTT: break; case ID_LIBEDIT_PIN_BUTT : if( CurrentDrawItem == NULL ) { CreatePin(DC); } else { SaveCopyInUndoList(); PlacePin(DC); } break; case ID_LIBEDIT_BODY_LINE_BUTT : case ID_LIBEDIT_BODY_ARC_BUTT : case ID_LIBEDIT_BODY_CIRCLE_BUTT : case ID_LIBEDIT_BODY_RECT_BUTT : case ID_LIBEDIT_BODY_TEXT_BUTT : if ( CurrentDrawItem == NULL) { CurrentDrawItem = CreateGraphicItem(DC); } else { if ( CurrentDrawItem->m_Flags & IS_NEW ) GraphicItemBeginDraw(DC); else { SaveCopyInUndoList(); EndDrawGraphicItem(DC); } } break; case ID_LIBEDIT_DELETE_ITEM_BUTT : DrawEntry = LocatePin(m_CurrentScreen->m_Curseur, CurrentLibEntry, CurrentUnit, CurrentConvert); if (DrawEntry == NULL ) { DrawEntry = LocateDrawItem(GetScreen(), CurrentLibEntry,CurrentUnit, CurrentConvert,LOCATE_ALL_DRAW_ITEM); } if ( DrawEntry == NULL ) { AfficheDoc(this, CurrentLibEntry->m_Doc.GetData(), CurrentLibEntry->m_KeyWord.GetData()); break; } SaveCopyInUndoList(); if ( DrawEntry->m_StructType == COMPONENT_PIN_DRAW_TYPE ) DeletePin(DC, CurrentLibEntry, (LibDrawPin*)DrawEntry); else DeleteOneLibraryDrawStruct(DrawPanel, DC, CurrentLibEntry,DrawEntry, TRUE); DrawEntry = NULL; m_CurrentScreen->SetModify(); break; case ID_LIBEDIT_ANCHOR_ITEM_BUTT : SaveCopyInUndoList(); PlaceAncre(); SetToolID( 0, wxCURSOR_ARROW, wxEmptyString); break; default : DisplayError(this, wxT("WinEDA_LibeditFrame::OnLeftClick error") ); SetToolID( 0, wxCURSOR_ARROW, wxEmptyString); break; } } }