/**************************************************/ /* Useful class and functions used to drag tracks */ /**************************************************/ /** Helper class to handle a list of track segments to drag * and has info to undo/abort the move command * a DRAG_SEGM manage one track segment or a via */ class DRAG_SEGM { public: TRACK* m_Segm; /* pointeur sur le segment a "dragger */ D_PAD* m_Pad_Start; /* pointeur sur le Pad origine si origine segment sur pad */ D_PAD* m_Pad_End; /* pointeur sur le Pad fin si fin segment sur pad */ int m_Flag; /* indicateur divers */ private: wxPoint m_StartInitialValue; wxPoint m_EndInitialValue; // For abort: initial m_Start and m_End values for m_Segm public: DRAG_SEGM( TRACK* segm ); ~DRAG_SEGM() {}; void SetInitialValues() { m_Segm->m_Start = m_StartInitialValue; m_Segm->m_End = m_EndInitialValue; } }; /* Variables */ // a list of DRAG_SEGM items used to move or drag tracks. // Each DRAG_SEGM item points a segment to move. extern std::vector g_DragSegmentList; /* Functions */ void Dessine_Segments_Dragges( WinEDA_DrawPanel* panel, wxDC* DC ); void Build_Drag_Liste( WinEDA_DrawPanel* panel, wxDC* DC, MODULE* Module ); void Build_1_Pad_SegmentsToDrag( WinEDA_DrawPanel* panel, wxDC* DC, D_PAD* PtPad ); void Collect_TrackSegmentsToDrag( WinEDA_DrawPanel* panel, wxDC* DC, wxPoint& point, int MasqueLayer, int net_code ); /** function EraseDragList * clear the .m_Flags of all track segments managed by in g_DragSegmentList * and clear the list. * In order to avoid useless memory allocation, the memory is not freed * and will be reused when creating a new list */ void EraseDragList(); /* Add the segment"Track" to the drag list, and erase it from screen * flag = STARTPOINT (if the point to drag is the start point of Track) * or ENDPOINT */ void AddSegmentToDragList( WinEDA_DrawPanel* panel, wxDC* DC, int flag, TRACK* Track );