undo/redo rework: fixed some problems ans crashes (not all) in libedit and modedit
This commit is contained in:
parent
8d5a6531f9
commit
304525db9a
|
@ -219,7 +219,6 @@ void WinEDA_DrawPanel::AddMenuZoom( wxMenu* MasterMenu )
|
|||
maxZoomIds = ID_POPUP_ZOOM_LEVEL_END - ID_POPUP_ZOOM_LEVEL_START;
|
||||
maxZoomIds = ( (size_t) maxZoomIds < GetScreen()->m_ZoomList.GetCount() ) ?
|
||||
maxZoomIds : GetScreen()->m_ZoomList.GetCount();
|
||||
wxLogDebug( _T( "%d zoom IDs used." ), maxZoomIds );
|
||||
|
||||
/* Populate zoom submenu. */
|
||||
for( i = 0; i < (size_t) maxZoomIds; i++ )
|
||||
|
|
|
@ -229,6 +229,19 @@ public:
|
|||
{
|
||||
}
|
||||
|
||||
/** Function SaveCopyInUndoList (overloaded).
|
||||
* Creates a new entry in undo list of commands.
|
||||
* add a list of pickers to handle a list of items
|
||||
* @param aItemsList = the list of items modified by the command to undo
|
||||
* @param aTypeCommand = command type (see enum UndoRedoOpType)
|
||||
* @param aTransformPoint = the reference point of the transformation, for commands like move
|
||||
*/
|
||||
virtual void SaveCopyInUndoList( PICKED_ITEMS_LIST& aItemsList, UndoRedoOpType aTypeCommand,
|
||||
const wxPoint& aTransformPoint = wxPoint(0,0) )
|
||||
{
|
||||
// currently: do nothing in cvpcb.
|
||||
}
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ void WinEDA_LibeditFrame::SaveCopyInUndoList( EDA_BaseStruct* ItemToCopy,
|
|||
CopyItem = CopyLibEntryStruct( this, (EDA_LibComponentStruct*) ItemToCopy );
|
||||
|
||||
lastcmd = new PICKED_ITEMS_LIST();
|
||||
ITEM_PICKER wrapper(CopyItem);
|
||||
ITEM_PICKER wrapper(CopyItem, UR_LIBEDIT);
|
||||
lastcmd->PushItem(wrapper);
|
||||
GetScreen()->PushCommandToUndoList( lastcmd );
|
||||
/* Clear current flags (which can be temporary set by a current edit command) */
|
||||
|
@ -34,17 +34,7 @@ void WinEDA_LibeditFrame::SaveCopyInUndoList( EDA_BaseStruct* ItemToCopy,
|
|||
item->m_Flags = 0;
|
||||
|
||||
/* Clear redo list, because after new save there is no redo to do */
|
||||
while( (lastcmd = GetScreen()->PopCommandFromRedoList( ) ) != NULL )
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
wrapper = lastcmd->PopItem();
|
||||
if ( wrapper.m_PickedItem == NULL )
|
||||
break; // All items are removed
|
||||
delete wrapper.m_PickedItem;
|
||||
}
|
||||
delete lastcmd;
|
||||
}
|
||||
GetScreen()->ClearUndoORRedoList( GetScreen()->m_RedoList );
|
||||
}
|
||||
|
||||
|
||||
|
@ -62,7 +52,7 @@ void WinEDA_LibeditFrame::GetComponentFromRedoList(wxCommandEvent& event)
|
|||
return;
|
||||
|
||||
PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST();
|
||||
ITEM_PICKER wrapper(CurrentLibEntry);
|
||||
ITEM_PICKER wrapper(CurrentLibEntry, UR_LIBEDIT);
|
||||
lastcmd->PushItem(wrapper);
|
||||
GetScreen()->PushCommandToUndoList( lastcmd );
|
||||
|
||||
|
@ -95,7 +85,7 @@ void WinEDA_LibeditFrame::GetComponentFromUndoList(wxCommandEvent& event)
|
|||
return;
|
||||
|
||||
PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST();
|
||||
ITEM_PICKER wrapper(CurrentLibEntry);
|
||||
ITEM_PICKER wrapper(CurrentLibEntry, UR_LIBEDIT);
|
||||
lastcmd->PushItem(wrapper);
|
||||
GetScreen()->PushCommandToRedoList( lastcmd );
|
||||
|
||||
|
|
|
@ -509,6 +509,10 @@ void SCH_SCREEN::ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount
|
|||
case UR_NEW: // Do nothing, items are in use
|
||||
break;
|
||||
|
||||
case UR_LIBEDIT: // Libedit save always a copy of the current item
|
||||
delete item; // So, the picker is always owner of the picked item
|
||||
break;
|
||||
|
||||
case UR_DELETED:
|
||||
delete item; // Delete the picked item, because it was deleted from schematic
|
||||
break;
|
||||
|
|
|
@ -175,6 +175,18 @@ public:
|
|||
const wxPoint& aTransformPoint = wxPoint(0,0) )
|
||||
{
|
||||
}
|
||||
/** Function SaveCopyInUndoList (overloaded).
|
||||
* Creates a new entry in undo list of commands.
|
||||
* add a list of pickers to handle a list of items
|
||||
* @param aItemsList = the list of items modified by the command to undo
|
||||
* @param aTypeCommand = command type (see enum UndoRedoOpType)
|
||||
* @param aTransformPoint = the reference point of the transformation, for commands like move
|
||||
*/
|
||||
virtual void SaveCopyInUndoList( PICKED_ITEMS_LIST& aItemsList, UndoRedoOpType aTypeCommand,
|
||||
const wxPoint& aTransformPoint = wxPoint(0,0) )
|
||||
{
|
||||
// currently: do nothing in gerbview.
|
||||
}
|
||||
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
|
|
|
@ -60,7 +60,9 @@ enum UndoRedoOpType {
|
|||
UR_MIRRORED_Y, // mirrored item, undo by mirror Y
|
||||
UR_ROTATED, // Rotated item, undo by rotating it
|
||||
UR_FLIPPED, // flipped (board items only), undo by flipping it
|
||||
UR_WIRE_IMAGE // Specific to eeschema: handle wires changes
|
||||
UR_WIRE_IMAGE, // Specific to eeschema: handle wires changes
|
||||
UR_MODEDIT, // Specific to the module editor (modedit creates a full copy of the current module when changed)
|
||||
UR_LIBEDIT // Specific to the component editor (libedit creates a full copy of the current component when changed)
|
||||
};
|
||||
|
||||
class ITEM_PICKER
|
||||
|
|
|
@ -310,6 +310,16 @@ public:
|
|||
virtual void SaveCopyInUndoList( BOARD_ITEM* aItemToCopy, UndoRedoOpType aTypeCommand,
|
||||
const wxPoint& aTransformPoint = wxPoint(0,0) ) = 0;
|
||||
|
||||
/** Function SaveCopyInUndoList (virtual pure, overloaded).
|
||||
* Creates a new entry in undo list of commands.
|
||||
* add a list of pickers to handle a list of items
|
||||
* @param aItemsList = the list of items modified by the command to undo
|
||||
* @param aTypeCommand = command type (see enum UndoRedoOpType)
|
||||
* @param aTransformPoint = the reference point of the transformation, for commands like move
|
||||
*/
|
||||
virtual void SaveCopyInUndoList( PICKED_ITEMS_LIST& aItemsList, UndoRedoOpType aTypeCommand,
|
||||
const wxPoint& aTransformPoint = wxPoint(0,0) ) = 0;
|
||||
|
||||
|
||||
// layerhandling:
|
||||
// (See pcbnew/sel_layer.cpp for description of why null_layer parameter is provided)
|
||||
|
|
|
@ -143,7 +143,7 @@ public:
|
|||
* @param aTypeCommand = command type (see enum UndoRedoOpType)
|
||||
* @param aTransformPoint = the reference point of the transformation, for commands like move
|
||||
*/
|
||||
void SaveCopyInUndoList( BOARD_ITEM* aItemToCopy, UndoRedoOpType aTypeCommand,
|
||||
virtual void SaveCopyInUndoList( BOARD_ITEM* aItemToCopy, UndoRedoOpType aTypeCommand,
|
||||
const wxPoint& aTransformPoint = wxPoint(0,0) );
|
||||
|
||||
/** Function SaveCopyInUndoList (overloaded).
|
||||
|
@ -153,7 +153,7 @@ public:
|
|||
* @param aTypeCommand = command type (see enum UndoRedoOpType)
|
||||
* @param aTransformPoint = the reference point of the transformation, for commands like move
|
||||
*/
|
||||
void SaveCopyInUndoList( PICKED_ITEMS_LIST& aItemsList, UndoRedoOpType aTypeCommand,
|
||||
virtual void SaveCopyInUndoList( PICKED_ITEMS_LIST& aItemsList, UndoRedoOpType aTypeCommand,
|
||||
const wxPoint& aTransformPoint = wxPoint(0,0) );
|
||||
|
||||
/** Function PutDataInPreviousState()
|
||||
|
@ -650,9 +650,26 @@ public:
|
|||
|
||||
/* Undo and redo functions */
|
||||
public:
|
||||
virtual void SaveCopyInUndoList( BOARD_ITEM* ItemToCopy,
|
||||
UndoRedoOpType aTypeCommand = UR_UNSPECIFIED,
|
||||
/** Function SaveCopyInUndoList.
|
||||
* Creates a new entry in undo list of commands.
|
||||
* add a picker to handle aItemToCopy
|
||||
* @param aItem = the board item modified by the command to undo
|
||||
* @param aTypeCommand = command type (see enum UndoRedoOpType)
|
||||
* @param aTransformPoint = the reference point of the transformation, for commands like move
|
||||
*/
|
||||
virtual void SaveCopyInUndoList( BOARD_ITEM* aItem, UndoRedoOpType aTypeCommand,
|
||||
const wxPoint& aTransformPoint = wxPoint(0,0) );
|
||||
|
||||
/** Function SaveCopyInUndoList (overloaded).
|
||||
* Creates a new entry in undo list of commands.
|
||||
* add a list of pickers to handle a list of items
|
||||
* @param aItemsList = the list of items modified by the command to undo
|
||||
* @param aTypeCommand = command type (see enum UndoRedoOpType)
|
||||
* @param aTransformPoint = the reference point of the transformation, for commands like move
|
||||
*/
|
||||
virtual void SaveCopyInUndoList( PICKED_ITEMS_LIST& aItemsList, UndoRedoOpType aTypeCommand,
|
||||
const wxPoint& aTransformPoint = wxPoint(0,0) );
|
||||
|
||||
private:
|
||||
void GetComponentFromUndoList(wxCommandEvent& event);
|
||||
void GetComponentFromRedoList(wxCommandEvent& event);
|
||||
|
|
|
@ -152,7 +152,7 @@ int WinEDA_ModuleEditFrame::HandleBlockEnd( wxDC* DC )
|
|||
case BLOCK_DELETE: /* Delete */
|
||||
ItemsCount = MarkItemsInBloc( Currentmodule, GetScreen()->m_BlockLocate );
|
||||
if( ItemsCount )
|
||||
SaveCopyInUndoList( Currentmodule );
|
||||
SaveCopyInUndoList( Currentmodule, UR_CHANGED );
|
||||
DeleteMarkedItems( Currentmodule );
|
||||
break;
|
||||
|
||||
|
@ -163,7 +163,7 @@ int WinEDA_ModuleEditFrame::HandleBlockEnd( wxDC* DC )
|
|||
case BLOCK_ROTATE:
|
||||
ItemsCount = MarkItemsInBloc( Currentmodule, GetScreen()->m_BlockLocate );
|
||||
if( ItemsCount )
|
||||
SaveCopyInUndoList( Currentmodule );
|
||||
SaveCopyInUndoList( Currentmodule, UR_CHANGED );
|
||||
RotateMarkedItems( Currentmodule, GetScreen()->m_BlockLocate.Centre() );
|
||||
break;
|
||||
|
||||
|
@ -173,7 +173,7 @@ int WinEDA_ModuleEditFrame::HandleBlockEnd( wxDC* DC )
|
|||
case BLOCK_INVERT: /* mirror */
|
||||
ItemsCount = MarkItemsInBloc( Currentmodule, GetScreen()->m_BlockLocate );
|
||||
if( ItemsCount )
|
||||
SaveCopyInUndoList( Currentmodule );
|
||||
SaveCopyInUndoList( Currentmodule, UR_CHANGED );
|
||||
MirrorMarkedItems( Currentmodule, GetScreen()->m_BlockLocate.Centre() );
|
||||
break;
|
||||
|
||||
|
@ -240,14 +240,14 @@ void WinEDA_ModuleEditFrame::HandleBlockPlace( wxDC* DC )
|
|||
case BLOCK_MOVE: /* Move */
|
||||
case BLOCK_PRESELECT_MOVE: /* Move with preselection list*/
|
||||
GetScreen()->m_BlockLocate.ClearItemsList();
|
||||
SaveCopyInUndoList( Currentmodule );
|
||||
SaveCopyInUndoList( Currentmodule, UR_CHANGED );
|
||||
MoveMarkedItems( Currentmodule, GetScreen()->m_BlockLocate.m_MoveVector );
|
||||
DrawPanel->Refresh( TRUE );
|
||||
break;
|
||||
|
||||
case BLOCK_COPY: /* Copy */
|
||||
GetScreen()->m_BlockLocate.ClearItemsList();
|
||||
SaveCopyInUndoList( Currentmodule );
|
||||
SaveCopyInUndoList( Currentmodule, UR_CHANGED );
|
||||
CopyMarkedItems( Currentmodule, GetScreen()->m_BlockLocate.m_MoveVector );
|
||||
break;
|
||||
|
||||
|
@ -258,12 +258,12 @@ void WinEDA_ModuleEditFrame::HandleBlockPlace( wxDC* DC )
|
|||
case BLOCK_MIRROR_X:
|
||||
case BLOCK_MIRROR_Y:
|
||||
case BLOCK_INVERT: /* Mirror by popup menu, from block move */
|
||||
SaveCopyInUndoList( Currentmodule );
|
||||
SaveCopyInUndoList( Currentmodule, UR_CHANGED );
|
||||
MirrorMarkedItems( Currentmodule, GetScreen()->m_BlockLocate.Centre() );
|
||||
break;
|
||||
|
||||
case BLOCK_ROTATE:
|
||||
SaveCopyInUndoList( Currentmodule );
|
||||
SaveCopyInUndoList( Currentmodule, UR_CHANGED );
|
||||
RotateMarkedItems( Currentmodule, GetScreen()->m_BlockLocate.Centre() );
|
||||
break;
|
||||
|
||||
|
|
|
@ -59,6 +59,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
BOARD_ITEM* DuplicateStruct( BOARD_ITEM* aItem );
|
||||
|
||||
|
||||
/** function TestForExistingItem
|
||||
* test if aItem exists somewhere in lists of items
|
||||
* This is a function unsed by PutDataInPreviousState to be sure an item was not deleted
|
||||
|
@ -131,7 +134,12 @@ void SwapData( BOARD_ITEM* aItem, BOARD_ITEM* aImage )
|
|||
switch( aItem->Type() )
|
||||
{
|
||||
case TYPE_MODULE:
|
||||
wxMessageBox( wxT( "SwapData(): TYPE_MODULE not handled" ) );
|
||||
{
|
||||
MODULE* m_tmp = (MODULE*) DuplicateStruct( aImage );
|
||||
( (MODULE*) aImage )->Copy( (MODULE*) aItem );
|
||||
( (MODULE*) aItem )->Copy( m_tmp );
|
||||
delete m_tmp;
|
||||
}
|
||||
break;
|
||||
|
||||
case TYPE_ZONE_CONTAINER:
|
||||
|
@ -372,18 +380,16 @@ void WinEDA_PcbFrame::SaveCopyInUndoList( PICKED_ITEMS_LIST& aItemsList,
|
|||
BOARD_ITEM* item = (BOARD_ITEM*) aItemsList.GetPickedItem( ii );
|
||||
UndoRedoOpType command = aItemsList.GetPickedItemStatus( ii );
|
||||
if( command == UR_UNSPECIFIED )
|
||||
{
|
||||
command = aTypeCommand;
|
||||
}
|
||||
|
||||
wxASSERT( item );
|
||||
itemWrapper.m_PickedItem = item;
|
||||
itemWrapper.m_PickedItemType = item->Type();
|
||||
itemWrapper.m_UndoRedoStatus = command;
|
||||
switch( command )
|
||||
{
|
||||
case UR_CHANGED: /* Create a copy of schematic */
|
||||
case UR_CHANGED: /* Create a copy of item, and put in undo list */
|
||||
CopyOfItem = DuplicateStruct( item );
|
||||
itemWrapper.m_PickedItem = item;
|
||||
itemWrapper.m_Link = CopyOfItem;
|
||||
if( CopyOfItem )
|
||||
commandToUndo->PushItem( itemWrapper );
|
||||
|
@ -449,6 +455,7 @@ void WinEDA_PcbFrame::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool aRe
|
|||
}
|
||||
}
|
||||
item->m_Flags = 0;
|
||||
|
||||
// see if one must rebuild ratsnets and pointers lists
|
||||
switch( item->Type() )
|
||||
{
|
||||
|
@ -458,6 +465,7 @@ void WinEDA_PcbFrame::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool aRe
|
|||
case TYPE_VIA:
|
||||
reBuild_ratsnest = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -467,28 +475,7 @@ void WinEDA_PcbFrame::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool aRe
|
|||
case UR_CHANGED: /* Exchange old and new data for each item */
|
||||
{
|
||||
BOARD_ITEM* image = (BOARD_ITEM*) aList->GetPickedItemLink( ii );
|
||||
// Note modules and zones containers have a lot of data
|
||||
// so items and thier copy are swapped, not just edited data
|
||||
// The main drawback is pointers on these items must be rebuilt
|
||||
// but often, this is needed by connectivity change,
|
||||
// so this is not really an important drawback in this function
|
||||
// Could change later
|
||||
switch( item->Type() )
|
||||
{
|
||||
case TYPE_MODULE:
|
||||
case TYPE_ZONE_CONTAINER:
|
||||
// Swap the item and its copy
|
||||
GetBoard()->Remove(item);
|
||||
GetBoard()->Add(image);
|
||||
aList->SetPickedItem(image, ii);
|
||||
aList->SetPickedItemLink(item, ii);
|
||||
break;
|
||||
|
||||
default:
|
||||
// For other items: swap editable data only
|
||||
SwapData( item, image );
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -538,6 +525,7 @@ void WinEDA_PcbFrame::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool aRe
|
|||
/**********************************************************/
|
||||
void WinEDA_PcbFrame::GetBoardFromUndoList( wxCommandEvent& event )
|
||||
/**********************************************************/
|
||||
|
||||
/** Function GetBoardFromUndoList
|
||||
* Undo the last edition:
|
||||
* - Save the current board in Redo list
|
||||
|
@ -631,6 +619,7 @@ void PCB_SCREEN::ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount
|
|||
wxMessageBox( wxT( "ClearUndoORRedoList() error: unspecified item type" ) );
|
||||
displ_error = false;
|
||||
break;
|
||||
|
||||
case UR_MOVED:
|
||||
case UR_FLIPPED:
|
||||
case UR_MIRRORED_X:
|
||||
|
@ -643,6 +632,13 @@ void PCB_SCREEN::ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount
|
|||
delete wrapper.m_Link; // the picker is owner of this item
|
||||
break;
|
||||
|
||||
case UR_MODEDIT: /* Specific to the module editor
|
||||
* (modedit creates a full copy of the current module when changed),
|
||||
* and the picker is owner of this item
|
||||
*/
|
||||
delete wrapper.m_PickedItem;
|
||||
break;
|
||||
|
||||
default:
|
||||
delete wrapper.m_PickedItem; // the picker is owner of this item
|
||||
break;
|
||||
|
|
|
@ -102,7 +102,8 @@ void MODULE::Copy( MODULE* aModule )
|
|||
m_Reference->Copy( aModule->m_Reference );
|
||||
m_Value->Copy( aModule->m_Value );
|
||||
|
||||
/* Copie des structures auxiliaires: Pads */
|
||||
/* Copy auxiliary data: Pads */
|
||||
m_Pads.DeleteAll();
|
||||
for( D_PAD* pad = aModule->m_Pads; pad; pad = pad->Next() )
|
||||
{
|
||||
D_PAD* newpad = new D_PAD( this );
|
||||
|
@ -111,7 +112,8 @@ void MODULE::Copy( MODULE* aModule )
|
|||
m_Pads.PushBack( newpad );
|
||||
}
|
||||
|
||||
/* Copy des structures auxiliaires: Drawings */
|
||||
/* Copy auxiliary data: Drawings */
|
||||
m_Drawings.DeleteAll();
|
||||
for( BOARD_ITEM* item = aModule->m_Drawings; item; item = item->Next() )
|
||||
{
|
||||
switch( item->Type() )
|
||||
|
@ -131,11 +133,13 @@ void MODULE::Copy( MODULE* aModule )
|
|||
break;
|
||||
|
||||
default:
|
||||
wxMessageBox( wxT( "Internal Err: CopyModule: type indefini" ) );
|
||||
wxMessageBox( wxT( "MODULE::Copy() Internal Err: unknown type" ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Copy auxiliary data: 3D_Drawings info */
|
||||
m_3D_Drawings.DeleteAll();
|
||||
for( S3D_MASTER* item = aModule->m_3D_Drawings; item; item = item->Next() )
|
||||
{
|
||||
if ( item->m_Shape3DName.IsEmpty() ) // do not copy empty shapes.
|
||||
|
|
|
@ -191,8 +191,7 @@ void D_PAD::Copy( D_PAD* source )
|
|||
m_Offset = source->m_Offset; // Offset de la forme
|
||||
m_Size = source->m_Size; // Dimension ( pour orient 0 )
|
||||
m_DeltaSize = source->m_DeltaSize; // delta sur formes rectangle -> trapezes
|
||||
m_Pos0 = source->m_Pos0; // Coord relatives a l'ancre du pad en
|
||||
// orientation 0
|
||||
m_Pos0 = source->m_Pos0; /* Coord relatives a l'ancre du pad en orientation 0 */
|
||||
m_Rayon = source->m_Rayon; // rayon du cercle exinscrit du pad
|
||||
m_PadShape = source->m_PadShape; // forme CERCLE, PAD_RECT PAD_OVAL PAD_TRAPEZOID ou libre
|
||||
m_Attribut = source->m_Attribut; // NORMAL, PAD_SMD, PAD_CONN, Bit 7 = STACK
|
||||
|
|
|
@ -60,15 +60,11 @@ void WinEDA_ModuleEditFrame::Place_EdgeMod( EDGE_MODULE* Edge, wxDC* DC )
|
|||
{
|
||||
if( Edge == NULL )
|
||||
return;
|
||||
Edge->m_Start.x -= MoveVector.x;
|
||||
Edge->m_Start.y -= MoveVector.y;
|
||||
Edge->m_End.x -= MoveVector.x;
|
||||
Edge->m_End.y -= MoveVector.y;
|
||||
Edge->m_Start -= MoveVector;
|
||||
Edge->m_End -= MoveVector;
|
||||
|
||||
Edge->m_Start0.x -= MoveVector.x;
|
||||
Edge->m_Start0.y -= MoveVector.y;
|
||||
Edge->m_End0.x -= MoveVector.x;
|
||||
Edge->m_End0.y -= MoveVector.y;
|
||||
Edge->m_Start0 -= MoveVector;
|
||||
Edge->m_End0 -= MoveVector;
|
||||
|
||||
Edge->Draw( DrawPanel, DC, GR_OR );
|
||||
Edge->m_Flags = 0;
|
||||
|
@ -131,10 +127,8 @@ static void ShowEdgeModule( WinEDA_DrawPanel* panel, wxDC* DC, bool erase )
|
|||
Edge->m_End = screen->m_Curseur;
|
||||
|
||||
/* Mise a jour des coord relatives */
|
||||
Edge->m_End0.x = Edge->m_End.x - Module->m_Pos.x;
|
||||
Edge->m_End0.y = Edge->m_End.y - Module->m_Pos.y;
|
||||
RotatePoint( (int*) &Edge->m_End0.x,
|
||||
(int*) &Edge->m_End0.y, -Module->m_Orient );
|
||||
Edge->m_End0 = Edge->m_End - Module->m_Pos;
|
||||
RotatePoint( &Edge->m_End0, -Module->m_Orient );
|
||||
|
||||
Edge->Draw( panel, DC, GR_XOR );
|
||||
|
||||
|
@ -155,7 +149,7 @@ void WinEDA_ModuleEditFrame::Edit_Edge_Width( EDGE_MODULE* Edge )
|
|||
{
|
||||
MODULE* Module = GetBoard()->m_Modules;
|
||||
|
||||
SaveCopyInUndoList( Module );
|
||||
SaveCopyInUndoList( Module, UR_MODEDIT );
|
||||
|
||||
if( Edge == NULL )
|
||||
{
|
||||
|
@ -205,7 +199,7 @@ void WinEDA_ModuleEditFrame::Edit_Edge_Layer( EDGE_MODULE* Edge )
|
|||
return;
|
||||
}
|
||||
|
||||
SaveCopyInUndoList( Module );
|
||||
SaveCopyInUndoList( Module, UR_MODEDIT );
|
||||
|
||||
if( Edge == NULL )
|
||||
{
|
||||
|
@ -341,7 +335,7 @@ EDGE_MODULE* WinEDA_ModuleEditFrame::Begin_Edge_Module( EDGE_MODULE* Edge,
|
|||
|
||||
if( Edge == NULL ) /* Start a new edge item */
|
||||
{
|
||||
SaveCopyInUndoList( module );
|
||||
SaveCopyInUndoList( module, UR_MODEDIT );
|
||||
|
||||
Edge = new EDGE_MODULE( module );
|
||||
MoveVector.x = MoveVector.y = 0;
|
||||
|
@ -372,11 +366,9 @@ EDGE_MODULE* WinEDA_ModuleEditFrame::Begin_Edge_Module( EDGE_MODULE* Edge,
|
|||
Edge->m_End = Edge->m_Start;
|
||||
|
||||
/* Initialise the relative coordinates */
|
||||
Edge->m_Start0.x = Edge->m_Start.x - module->m_Pos.x;
|
||||
Edge->m_Start0.y = Edge->m_Start.y - module->m_Pos.y;
|
||||
Edge->m_Start0 = Edge->m_Start - module->m_Pos;
|
||||
|
||||
RotatePoint( (int*) &Edge->m_Start0.x,
|
||||
(int*) &Edge->m_Start0.y, -module->m_Orient );
|
||||
RotatePoint( &Edge->m_Start0, -module->m_Orient );
|
||||
|
||||
Edge->m_End0 = Edge->m_Start0;
|
||||
module->Set_Rectangle_Encadrement();
|
||||
|
@ -401,9 +393,9 @@ EDGE_MODULE* WinEDA_ModuleEditFrame::Begin_Edge_Module( EDGE_MODULE* Edge,
|
|||
|
||||
// insert _after_ Edge, which is the same as inserting _before_ Edge->Next()
|
||||
module->m_Drawings.Insert( newedge, Edge->Next() );
|
||||
|
||||
Edge->m_Flags = 0;
|
||||
Edge = newedge;
|
||||
|
||||
Edge = newedge; // point now new item
|
||||
|
||||
Edge->m_Flags = IS_NEW;
|
||||
Edge->m_Width = ModuleSegmentWidth;
|
||||
|
@ -411,11 +403,9 @@ EDGE_MODULE* WinEDA_ModuleEditFrame::Begin_Edge_Module( EDGE_MODULE* Edge,
|
|||
Edge->m_End = Edge->m_Start;
|
||||
|
||||
/* Mise a jour des coord relatives */
|
||||
Edge->m_Start0.x = Edge->m_Start.x - module->m_Pos.x;
|
||||
Edge->m_Start0.y = Edge->m_Start.y - module->m_Pos.y;
|
||||
Edge->m_Start0 = Edge->m_Start - module->m_Pos;
|
||||
|
||||
RotatePoint( (int*) &Edge->m_Start0.x,
|
||||
(int*) &Edge->m_Start0.y, -module->m_Orient );
|
||||
RotatePoint( &Edge->m_Start0, -module->m_Orient );
|
||||
|
||||
Edge->m_End0 = Edge->m_Start0;
|
||||
|
||||
|
@ -425,7 +415,7 @@ EDGE_MODULE* WinEDA_ModuleEditFrame::Begin_Edge_Module( EDGE_MODULE* Edge,
|
|||
}
|
||||
}
|
||||
else
|
||||
DisplayError( this, wxT( "Begin_Edge() error" ) );
|
||||
wxMessageBox( wxT( "Begin_Edge() error" ) );
|
||||
}
|
||||
return Edge;
|
||||
}
|
||||
|
@ -439,16 +429,13 @@ void WinEDA_ModuleEditFrame::End_Edge_Module( EDGE_MODULE* Edge, wxDC* DC )
|
|||
{
|
||||
MODULE* Module = GetBoard()->m_Modules;
|
||||
|
||||
/* If last segment length is 0: deletion */
|
||||
if( Edge )
|
||||
{
|
||||
if( (Edge->m_Start.x == Edge->m_End.x)
|
||||
&& (Edge->m_Start.y == Edge->m_End.y) )
|
||||
{
|
||||
Edge->m_Flags = 0;
|
||||
/* If last segment length is 0: remove it */
|
||||
if( Edge->m_Start == Edge->m_End )
|
||||
Edge ->DeleteStructure();
|
||||
}
|
||||
}
|
||||
Edge->m_Flags = 0;
|
||||
Module->Set_Rectangle_Encadrement();
|
||||
Module->m_LastEdit_Time = time( NULL );
|
||||
GetScreen()->SetModify();
|
||||
|
|
|
@ -821,6 +821,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
|
|||
|
||||
case ID_POPUP_PCB_IMPORT_PAD_SETTINGS:
|
||||
DrawPanel->MouseToCursorSchema();
|
||||
SaveCopyInUndoList( GetCurItem()->GetParent(), UR_CHANGED );
|
||||
Import_Pad_Settings( (D_PAD*) GetCurItem(), true );
|
||||
break;
|
||||
|
||||
|
@ -835,6 +836,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
|
|||
break;
|
||||
|
||||
case ID_POPUP_PCB_DELETE_PAD:
|
||||
SaveCopyInUndoList( GetCurItem()->GetParent(), UR_CHANGED );
|
||||
DeletePad( (D_PAD*) GetCurItem() );
|
||||
SetCurItem( NULL );
|
||||
DrawPanel->MouseToCursorSchema();
|
||||
|
|
|
@ -110,7 +110,6 @@ void WinEDA_ModuleEditFrame::Place_Ancre( MODULE* pt_mod )
|
|||
}
|
||||
|
||||
pt_mod->Set_Rectangle_Encadrement();
|
||||
DrawPanel->Refresh();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -475,20 +475,20 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )
|
|||
break;
|
||||
|
||||
case ID_POPUP_PCB_DELETE_PAD:
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules );
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||
DeletePad( (D_PAD*) GetScreen()->GetCurItem() );
|
||||
SetCurItem( NULL );
|
||||
DrawPanel->MouseToCursorSchema();
|
||||
break;
|
||||
|
||||
case ID_POPUP_PCB_IMPORT_PAD_SETTINGS:
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules );
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||
DrawPanel->MouseToCursorSchema();
|
||||
Import_Pad_Settings( (D_PAD*) GetScreen()->GetCurItem(), true );
|
||||
break;
|
||||
|
||||
case ID_POPUP_PCB_GLOBAL_IMPORT_PAD_SETTINGS:
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules );
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||
Global_Import_Pad_Settings( (D_PAD*) GetScreen()->GetCurItem(), true );
|
||||
DrawPanel->MouseToCursorSchema();
|
||||
break;
|
||||
|
@ -526,7 +526,7 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )
|
|||
break;
|
||||
|
||||
case ID_POPUP_PCB_DELETE_TEXTMODULE:
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules );
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||
DeleteTextModule( (TEXTE_MODULE*) GetScreen()->GetCurItem() );
|
||||
SetCurItem( NULL );
|
||||
DrawPanel->MouseToCursorSchema();
|
||||
|
@ -586,7 +586,7 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )
|
|||
break;
|
||||
|
||||
case ID_POPUP_PCB_DELETE_EDGE:
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules );
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||
DrawPanel->MouseToCursorSchema();
|
||||
RemoveStruct( GetScreen()->GetCurItem() );
|
||||
SetCurItem( NULL );
|
||||
|
@ -597,7 +597,7 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )
|
|||
case ID_MODEDIT_MODULE_SCALE:
|
||||
case ID_MODEDIT_MODULE_SCALEX:
|
||||
case ID_MODEDIT_MODULE_SCALEY:
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules );
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||
Transform( (MODULE*) GetScreen()->GetCurItem(), id );
|
||||
redraw = true;
|
||||
break;
|
||||
|
|
|
@ -31,12 +31,12 @@ void WinEDA_ModuleEditFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
|
|||
switch( DrawStruct->Type() )
|
||||
{
|
||||
case TYPE_TEXTE_MODULE:
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules );
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||
PlaceTexteModule( (TEXTE_MODULE*) DrawStruct, DC );
|
||||
break;
|
||||
|
||||
case TYPE_EDGE_MODULE:
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules );
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||
Place_EdgeMod( (EDGE_MODULE*) DrawStruct, DC );
|
||||
break;
|
||||
|
||||
|
@ -118,7 +118,7 @@ void WinEDA_ModuleEditFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
|
|||
DrawStruct = ModeditLocateAndDisplay();
|
||||
if( DrawStruct && (DrawStruct->m_Flags == 0) )
|
||||
{
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules );
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||
RemoveStruct( DrawStruct );
|
||||
SetCurItem( DrawStruct = NULL );
|
||||
}
|
||||
|
@ -126,26 +126,30 @@ void WinEDA_ModuleEditFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
|
|||
break;
|
||||
|
||||
case ID_MODEDIT_PLACE_ANCHOR:
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules );
|
||||
Place_Ancre( GetBoard()->m_Modules );
|
||||
GetBoard()->m_Modules->m_Flags = 0;
|
||||
{
|
||||
MODULE * module = GetBoard()->m_Modules;
|
||||
module->m_Flags = 0;
|
||||
SaveCopyInUndoList( module, UR_MODEDIT );
|
||||
Place_Ancre( module ); // set the new relatives internal coordinates of items
|
||||
GetScreen()->m_Curseur = wxPoint( 0, 0 );
|
||||
Recadre_Trace( TRUE );
|
||||
Place_Module( GetBoard()->m_Modules, DC );
|
||||
RedrawActiveWindow( DC, TRUE );
|
||||
// Replace the module in position 0, to recalculate absolutes coordinates of items
|
||||
module->SetPosition( wxPoint(0,0) );
|
||||
SetToolID( 0, wxCURSOR_ARROW, wxEmptyString );
|
||||
SetCurItem( NULL );
|
||||
DrawPanel->Refresh();
|
||||
}
|
||||
break;
|
||||
|
||||
case ID_TEXT_COMMENT_BUTT:
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules );
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||
CreateTextModule( GetBoard()->m_Modules, DC );
|
||||
break;
|
||||
|
||||
case ID_MODEDIT_ADD_PAD:
|
||||
if( GetBoard()->m_Modules )
|
||||
{
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules );
|
||||
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||
AddPad( GetBoard()->m_Modules, true );
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -12,22 +12,27 @@
|
|||
#include "protos.h"
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
void WinEDA_ModuleEditFrame::SaveCopyInUndoList( BOARD_ITEM* ItemToCopy,
|
||||
/** Function SaveCopyInUndoList.
|
||||
* Creates a new entry in undo list of commands.
|
||||
* add a picker to handle aItemToCopy
|
||||
* @param aItem = the board item modified by the command to undo
|
||||
* @param aTypeCommand = command type (see enum UndoRedoOpType)
|
||||
* @param aTransformPoint = the reference point of the transformation, for commands like move
|
||||
*/
|
||||
void WinEDA_ModuleEditFrame::SaveCopyInUndoList( BOARD_ITEM* aItem,
|
||||
UndoRedoOpType aTypeCommand,
|
||||
const wxPoint& aTransformPoint )
|
||||
/************************************************************************/
|
||||
{
|
||||
EDA_BaseStruct* item;
|
||||
MODULE* CopyItem;
|
||||
PICKED_ITEMS_LIST* lastcmd;
|
||||
|
||||
CopyItem = new MODULE( GetBoard() );
|
||||
CopyItem->Copy( (MODULE*) ItemToCopy );
|
||||
CopyItem->Copy( (MODULE*) aItem );
|
||||
CopyItem->SetParent( GetBoard() );
|
||||
|
||||
lastcmd = new PICKED_ITEMS_LIST();
|
||||
ITEM_PICKER wrapper(CopyItem);
|
||||
ITEM_PICKER wrapper( CopyItem, UR_MODEDIT );
|
||||
lastcmd->PushItem( wrapper );
|
||||
|
||||
GetScreen()->PushCommandToUndoList( lastcmd );
|
||||
|
@ -36,17 +41,23 @@ void WinEDA_ModuleEditFrame::SaveCopyInUndoList( BOARD_ITEM* ItemToCopy,
|
|||
item->m_Flags = 0;
|
||||
|
||||
/* Clear redo list, because after new save there is no redo to do */
|
||||
while( (lastcmd = GetScreen()->PopCommandFromRedoList( ) ) != NULL )
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
wrapper = lastcmd->PopItem();
|
||||
if ( wrapper.m_PickedItem == NULL )
|
||||
break; // All items are removed
|
||||
delete wrapper.m_PickedItem;
|
||||
}
|
||||
delete lastcmd;
|
||||
GetScreen()->ClearUndoORRedoList( GetScreen()->m_RedoList );
|
||||
}
|
||||
|
||||
|
||||
/** Function SaveCopyInUndoList (overloaded).
|
||||
* Creates a new entry in undo list of commands.
|
||||
* add a list of pickers to handle a list of items
|
||||
* @param aItemsList = the list of items modified by the command to undo
|
||||
* @param aTypeCommand = command type (see enum UndoRedoOpType)
|
||||
* @param aTransformPoint = the reference point of the transformation, for commands like move
|
||||
*/
|
||||
void WinEDA_ModuleEditFrame::SaveCopyInUndoList( PICKED_ITEMS_LIST& aItemsList,
|
||||
UndoRedoOpType aTypeCommand,
|
||||
const wxPoint& aTransformPoint )
|
||||
{
|
||||
// Currently Unused in modedit
|
||||
wxMessageBox( wxT( "SaveCopyInUndoList( PICKED_ITEMS_LIST& aItemsList..) not yet in use" ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -63,7 +74,7 @@ void WinEDA_ModuleEditFrame::GetComponentFromRedoList(wxCommandEvent& event)
|
|||
return;
|
||||
|
||||
PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST();
|
||||
ITEM_PICKER wrapper( GetBoard()->m_Modules.PopFront() );
|
||||
ITEM_PICKER wrapper( GetBoard()->m_Modules.PopFront(), UR_MODEDIT );
|
||||
lastcmd->PushItem( wrapper );
|
||||
GetScreen()->PushCommandToUndoList( lastcmd );
|
||||
|
||||
|
@ -94,7 +105,7 @@ void WinEDA_ModuleEditFrame::GetComponentFromUndoList(wxCommandEvent& event)
|
|||
return;
|
||||
|
||||
PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST();
|
||||
ITEM_PICKER wrapper(GetBoard()->m_Modules.PopFront());
|
||||
ITEM_PICKER wrapper( GetBoard()->m_Modules.PopFront(), UR_MODEDIT );
|
||||
lastcmd->PushItem( wrapper );
|
||||
GetScreen()->PushCommandToRedoList( lastcmd );
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "confirm.h"
|
||||
#include "pcbnew.h"
|
||||
#include "trigo.h"
|
||||
#include "block_commande.h"
|
||||
|
||||
#include "drag.h"
|
||||
|
||||
|
@ -310,7 +311,6 @@ void WinEDA_BasePcbFrame::PlacePad( D_PAD* Pad, wxDC* DC )
|
|||
{
|
||||
int dX, dY;
|
||||
TRACK* Track;
|
||||
DRAG_SEGM* pt_drag;
|
||||
MODULE* Module;
|
||||
|
||||
if( Pad == NULL )
|
||||
|
@ -318,13 +318,60 @@ void WinEDA_BasePcbFrame::PlacePad( D_PAD* Pad, wxDC* DC )
|
|||
|
||||
Module = (MODULE*) Pad->GetParent();
|
||||
|
||||
ITEM_PICKER picker(NULL, UR_CHANGED);
|
||||
PICKED_ITEMS_LIST pickList;
|
||||
|
||||
/* Save dragged track segments in undo list */
|
||||
for( DRAG_SEGM* pt_drag = g_DragSegmentList; pt_drag; pt_drag = pt_drag->Pnext )
|
||||
{
|
||||
Track = pt_drag->m_Segm;
|
||||
// Set the old state
|
||||
wxPoint t_start = Track->m_Start;
|
||||
wxPoint t_end = Track->m_End;
|
||||
if( pt_drag->m_Pad_Start )
|
||||
Track->m_Start = Pad_OldPos;
|
||||
if( pt_drag->m_Pad_End )
|
||||
Track->m_End = Pad_OldPos;
|
||||
|
||||
picker.m_PickedItem = Track;
|
||||
pickList.PushItem(picker);
|
||||
}
|
||||
|
||||
/* Save old module and old items values */
|
||||
wxPoint pad_curr_position = Pad->m_Pos;
|
||||
|
||||
Pad->m_Pos = Pad_OldPos;
|
||||
if ( g_DragSegmentList == NULL )
|
||||
SaveCopyInUndoList( Module, UR_CHANGED );
|
||||
else
|
||||
{
|
||||
picker.m_PickedItem = Module;
|
||||
pickList.PushItem(picker);
|
||||
}
|
||||
|
||||
|
||||
if ( g_DragSegmentList )
|
||||
SaveCopyInUndoList( pickList, UR_CHANGED );
|
||||
|
||||
/* Placement du pad */
|
||||
Pad->m_Pos = pad_curr_position;
|
||||
|
||||
Pad->Draw( DrawPanel, DC, GR_XOR );
|
||||
|
||||
/* Save old module */
|
||||
Pad->m_Pos = Pad_OldPos;
|
||||
SaveCopyInUndoList( Module, UR_CHANGED );
|
||||
Pad->m_Pos = GetScreen()->m_Curseur;
|
||||
/* Redraw dragged track segments */
|
||||
for( DRAG_SEGM* pt_drag = g_DragSegmentList; pt_drag; pt_drag = pt_drag->Pnext )
|
||||
{
|
||||
Track = pt_drag->m_Segm;
|
||||
// Set the new state
|
||||
if( pt_drag->m_Pad_Start )
|
||||
Track->m_Start = Pad->m_Pos;
|
||||
if( pt_drag->m_Pad_End )
|
||||
Track->m_End = Pad->m_Pos;
|
||||
|
||||
Track->SetState( EDIT, OFF );
|
||||
if ( DC )
|
||||
Track->Draw( DrawPanel, DC, GR_OR );
|
||||
}
|
||||
|
||||
/* Compute local coordinates (i.e refer to Module position and for Module orient = 0)*/
|
||||
dX = Pad->m_Pos.x - Pad_OldPos.x;
|
||||
|
@ -342,15 +389,6 @@ void WinEDA_BasePcbFrame::PlacePad( D_PAD* Pad, wxDC* DC )
|
|||
Module->Set_Rectangle_Encadrement();
|
||||
Module->m_LastEdit_Time = time( NULL );
|
||||
|
||||
/* Tracage des segments dragges */
|
||||
pt_drag = g_DragSegmentList;
|
||||
for( ; pt_drag; pt_drag = pt_drag->Pnext )
|
||||
{
|
||||
Track = pt_drag->m_Segm;
|
||||
Track->SetState( EDIT, OFF );
|
||||
if ( DC )
|
||||
Track->Draw( DrawPanel, DC, GR_OR );
|
||||
}
|
||||
|
||||
EraseDragListe();
|
||||
|
||||
|
|
|
@ -11,10 +11,12 @@
|
|||
|
||||
#include "pcbnew.h"
|
||||
#include "wxPcbStruct.h"
|
||||
|
||||
//#include "autorout.h"
|
||||
#include "id.h"
|
||||
#include "hotkeys.h"
|
||||
#include "collectors.h"
|
||||
|
||||
//#include "protos.h"
|
||||
|
||||
|
||||
|
@ -490,12 +492,16 @@ void WinEDA_PcbFrame::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu )
|
|||
ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_TO_DEFAULT,
|
||||
_( "Set Via Hole to Default" ), apply_xpm );
|
||||
msg = _( "Set via hole to a specific value. This specific value is currently" );
|
||||
msg << wxT(" ") << ReturnStringFromValue( g_UnitMetric, g_DesignSettings.m_ViaDrillCustomValue, m_InternalUnits );
|
||||
msg << wxT( " " ) << ReturnStringFromValue( g_UnitMetric,
|
||||
g_DesignSettings.m_ViaDrillCustomValue,
|
||||
m_InternalUnits );
|
||||
ADD_MENUITEM_WITH_HELP( via_mnu, ID_POPUP_PCB_VIA_HOLE_TO_VALUE,
|
||||
_( "Set Via Hole to Specific Value" ), msg,
|
||||
options_new_pad_xpm );
|
||||
msg = _( "Set a specific via hole value. This value is currently" );
|
||||
msg << wxT(" ") << ReturnStringFromValue( g_UnitMetric, g_DesignSettings.m_ViaDrillCustomValue, m_InternalUnits );
|
||||
msg << wxT( " " ) << ReturnStringFromValue( g_UnitMetric,
|
||||
g_DesignSettings.m_ViaDrillCustomValue,
|
||||
m_InternalUnits );
|
||||
ADD_MENUITEM_WITH_HELP( via_mnu, ID_POPUP_PCB_VIA_HOLE_ENTER_VALUE,
|
||||
_( "Change the Current Specific Drill Value" ), msg, edit_xpm );
|
||||
ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_EXPORT, _(
|
||||
|
@ -565,9 +571,11 @@ void WinEDA_PcbFrame::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu )
|
|||
{
|
||||
track_mnu = new wxMenu;
|
||||
ADD_MENUITEM_WITH_SUBMENU( PopMenu, track_mnu,
|
||||
ID_POPUP_PCB_EDIT_TRACK_MNU, _( "Change Width" ), width_track_xpm );
|
||||
ID_POPUP_PCB_EDIT_TRACK_MNU, _(
|
||||
"Change Width" ), width_track_xpm );
|
||||
ADD_MENUITEM( track_mnu, ID_POPUP_PCB_EDIT_TRACKSEG,
|
||||
Track->Type()==TYPE_VIA ? _( "Change Via Size" ) : _( "Change Segment Width" ), width_segment_xpm );
|
||||
Track->Type()==TYPE_VIA ? _( "Change Via Size" ) : _(
|
||||
"Change Segment Width" ), width_segment_xpm );
|
||||
|
||||
ADD_MENUITEM( track_mnu, ID_POPUP_PCB_EDIT_TRACK,
|
||||
_( "Change Track Width" ), width_track_xpm );
|
||||
|
@ -793,17 +801,19 @@ void WinEDA_PcbFrame::createPopUpMenuForFpPads( D_PAD* Pad, wxMenu* menu )
|
|||
wxMenu* sub_menu_Pad;
|
||||
int flags = Pad->m_Flags;
|
||||
|
||||
if( flags ) // Currently in edit, no others commands possible
|
||||
return;
|
||||
|
||||
wxString msg = Pad->MenuText( GetBoard() );
|
||||
|
||||
sub_menu_Pad = new wxMenu;
|
||||
ADD_MENUITEM_WITH_SUBMENU( menu, sub_menu_Pad, -1, msg, pad_xpm );
|
||||
if( !flags )
|
||||
{
|
||||
|
||||
ADD_MENUITEM( sub_menu_Pad, ID_POPUP_PCB_MOVE_PAD_REQUEST,
|
||||
_( "Move" ), move_pad_xpm );
|
||||
ADD_MENUITEM( sub_menu_Pad, ID_POPUP_PCB_DRAG_PAD_REQUEST,
|
||||
_( "Drag" ), drag_pad_xpm );
|
||||
}
|
||||
|
||||
ADD_MENUITEM( sub_menu_Pad, ID_POPUP_PCB_EDIT_PAD, _( "Edit Pad" ), options_pad_xpm );
|
||||
sub_menu_Pad->AppendSeparator();
|
||||
|
||||
|
@ -816,8 +826,6 @@ void WinEDA_PcbFrame::createPopUpMenuForFpPads( D_PAD* Pad, wxMenu* menu )
|
|||
_( "Copy this pad settings to current pad settings" ),
|
||||
export_options_pad_xpm );
|
||||
|
||||
if( !flags )
|
||||
{
|
||||
ADD_MENUITEM_WITH_HELP( sub_menu_Pad, ID_POPUP_PCB_GLOBAL_IMPORT_PAD_SETTINGS,
|
||||
_( "Global Pad Settings" ),
|
||||
_(
|
||||
|
@ -827,18 +835,12 @@ void WinEDA_PcbFrame::createPopUpMenuForFpPads( D_PAD* Pad, wxMenu* menu )
|
|||
|
||||
ADD_MENUITEM( sub_menu_Pad, ID_POPUP_PCB_DELETE_PAD,
|
||||
_( "Delete" ), delete_pad_xpm );
|
||||
}
|
||||
|
||||
if( m_HTOOL_current_state == ID_TOOLBARH_PCB_AUTOROUTE )
|
||||
{
|
||||
if( !flags )
|
||||
{
|
||||
menu->Append( ID_POPUP_PCB_AUTOROUTE_PAD, _( "Autoroute Pad" ) );
|
||||
menu->Append( ID_POPUP_PCB_AUTOROUTE_NET, _( "Autoroute Net" ) );
|
||||
}
|
||||
}
|
||||
if( !flags )
|
||||
{
|
||||
MODULE* module = (MODULE*) Pad->GetParent();
|
||||
if( module )
|
||||
{
|
||||
|
@ -846,7 +848,6 @@ void WinEDA_PcbFrame::createPopUpMenuForFpPads( D_PAD* Pad, wxMenu* menu )
|
|||
createPopUpMenuForFootprints( module, menu );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -878,6 +879,7 @@ void WinEDA_PcbFrame::createPopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu )
|
|||
_( "Delete" ), delete_text_xpm );
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
void WinEDA_PcbFrame::createPopUpMenuForMarkers( MARKER_PCB* aMarker, wxMenu* aPopMenu )
|
||||
/**********************************************************************/
|
||||
|
|
Loading…
Reference in New Issue