Set IS_NEW flag on new images. And a bunch of cleanup of dead code.
This commit is contained in:
parent
21b315f2af
commit
bcdc3ad90a
|
@ -89,10 +89,7 @@ bool DIALOG_SCH_EDIT_SHEET_PIN::TransferDataToWindow()
|
||||||
bool DIALOG_SCH_EDIT_SHEET_PIN::TransferDataFromWindow()
|
bool DIALOG_SCH_EDIT_SHEET_PIN::TransferDataFromWindow()
|
||||||
{
|
{
|
||||||
if( !m_sheetPin->IsNew() )
|
if( !m_sheetPin->IsNew() )
|
||||||
{
|
|
||||||
m_frame->SaveCopyInUndoList( (SCH_ITEM*) m_sheetPin->GetParent(), UR_CHANGED );
|
m_frame->SaveCopyInUndoList( (SCH_ITEM*) m_sheetPin->GetParent(), UR_CHANGED );
|
||||||
m_frame->GetScreen()->SetCurItem( nullptr );
|
|
||||||
}
|
|
||||||
|
|
||||||
m_sheetPin->SetText( m_textName->GetValue() );
|
m_sheetPin->SetText( m_textName->GetValue() );
|
||||||
m_sheetPin->SetTextSize( wxSize( m_textWidth.GetValue(), m_textHeight.GetValue() ) );
|
m_sheetPin->SetTextSize( wxSize( m_textWidth.GetValue(), m_textHeight.GetValue() ) );
|
||||||
|
|
|
@ -37,13 +37,13 @@ void SetSchItemParent( SCH_ITEM* Struct, SCH_SCREEN* Screen );
|
||||||
* Routine to create a new copy of given struct.
|
* Routine to create a new copy of given struct.
|
||||||
* The new object is not put in draw list (not linked)
|
* The new object is not put in draw list (not linked)
|
||||||
*
|
*
|
||||||
* @param aDrawStruct = the SCH_ITEM to duplicate
|
* @param aItem = the SCH_ITEM to duplicate
|
||||||
* @param aClone (default = false)
|
* @param doClone (default = false)
|
||||||
* if true duplicate also some parameters that must be unique
|
* if true duplicate also some parameters that must be unique
|
||||||
* (timestamp and sheet name)
|
* (timestamp and sheet name)
|
||||||
* aClone must be false. use true only is undo/redo duplications
|
* aClone must be false. use true only is undo/redo duplications
|
||||||
*/
|
*/
|
||||||
SCH_ITEM* DuplicateStruct( SCH_ITEM* aDrawStruct, bool aClone = false );
|
SCH_ITEM* DuplicateItem( SCH_ITEM* aItem, bool doClone = false );
|
||||||
|
|
||||||
|
|
||||||
#endif /* LIST_OPERATIONS_H */
|
#endif /* LIST_OPERATIONS_H */
|
||||||
|
|
|
@ -128,23 +128,6 @@ void SCH_EDIT_FRAME::CheckConnections( SELECTION& aSelection, bool aUndoAppend )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_EDIT_FRAME::DeleteItemsInList( PICKED_ITEMS_LIST& aItemsList, bool aAppend )
|
|
||||||
{
|
|
||||||
for( unsigned ii = 0; ii < aItemsList.GetCount(); ii++ )
|
|
||||||
{
|
|
||||||
SCH_ITEM* item = static_cast<SCH_ITEM*>( aItemsList.GetPickedItem( ii ) );
|
|
||||||
|
|
||||||
if( item->GetEditFlags() & STRUCT_DELETED )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
DeleteItem( item, aAppend );
|
|
||||||
aAppend = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
GetScreen()->ClearDrawingState();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SCH_EDIT_FRAME::DeleteItem( SCH_ITEM* aItem, bool aAppend )
|
void SCH_EDIT_FRAME::DeleteItem( SCH_ITEM* aItem, bool aAppend )
|
||||||
{
|
{
|
||||||
wxCHECK_RET( aItem != NULL, wxT( "Cannot delete invalid item." ) );
|
wxCHECK_RET( aItem != NULL, wxT( "Cannot delete invalid item." ) );
|
||||||
|
@ -187,105 +170,34 @@ void SCH_EDIT_FRAME::DeleteItem( SCH_ITEM* aItem, bool aAppend )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_EDIT_FRAME::DuplicateItemsInList( SCH_SCREEN* screen, PICKED_ITEMS_LIST& aItemsList,
|
SCH_ITEM* DuplicateItem( SCH_ITEM* aItem, bool doClone )
|
||||||
const wxPoint& aMoveVector )
|
|
||||||
{
|
{
|
||||||
SCH_ITEM* olditem;
|
wxCHECK_MSG( aItem != NULL, NULL, "Cannot duplicate NULL schematic item! Bad programmer." );
|
||||||
SCH_ITEM* newitem;
|
|
||||||
|
|
||||||
if( aItemsList.GetCount() == 0 )
|
SCH_ITEM* newItem = (SCH_ITEM*) aItem->Clone();
|
||||||
return;
|
|
||||||
|
|
||||||
// Keep track of existing sheet paths. Duplicate block can modify this list
|
if( doClone )
|
||||||
bool hasSheetCopied = false;
|
newItem->SetTimeStamp( aItem->GetTimeStamp() );
|
||||||
SCH_SHEET_LIST initial_sheetpathList( g_RootSheet );
|
|
||||||
|
|
||||||
|
newItem->ClearFlags( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
||||||
|
|
||||||
for( unsigned ii = 0; ii < aItemsList.GetCount(); ii++ )
|
if( newItem->Type() == SCH_COMPONENT_T )
|
||||||
{
|
{
|
||||||
olditem = static_cast<SCH_ITEM*>( aItemsList.GetPickedItem( ii ) );
|
for( SCH_PIN& pin : static_cast<SCH_COMPONENT*>( newItem )->GetPins() )
|
||||||
newitem = DuplicateStruct( olditem );
|
|
||||||
newitem->Move( aMoveVector );
|
|
||||||
|
|
||||||
aItemsList.SetPickedItem( newitem, ii );
|
|
||||||
aItemsList.SetPickedItemStatus( UR_NEW, ii );
|
|
||||||
|
|
||||||
switch( newitem->Type() )
|
|
||||||
{
|
|
||||||
case SCH_JUNCTION_T:
|
|
||||||
case SCH_LINE_T:
|
|
||||||
case SCH_BUS_BUS_ENTRY_T:
|
|
||||||
case SCH_BUS_WIRE_ENTRY_T:
|
|
||||||
case SCH_TEXT_T:
|
|
||||||
case SCH_LABEL_T:
|
|
||||||
case SCH_GLOBAL_LABEL_T:
|
|
||||||
case SCH_HIER_LABEL_T:
|
|
||||||
case SCH_SHEET_PIN_T:
|
|
||||||
case SCH_MARKER_T:
|
|
||||||
case SCH_NO_CONNECT_T:
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SCH_SHEET_T:
|
|
||||||
{
|
|
||||||
SCH_SHEET* sheet = (SCH_SHEET*) newitem;
|
|
||||||
// Duplicate sheet names and sheet time stamps are not valid. Use a time stamp
|
|
||||||
// based sheet name and update the time stamp for each sheet in the block.
|
|
||||||
timestamp_t timeStamp = GetNewTimeStamp();
|
|
||||||
|
|
||||||
sheet->SetName( wxString::Format( wxT( "sheet%8.8lX" ), (unsigned long)timeStamp ) );
|
|
||||||
sheet->SetTimeStamp( timeStamp );
|
|
||||||
hasSheetCopied = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case SCH_COMPONENT_T:
|
|
||||||
( (SCH_COMPONENT*) newitem )->SetTimeStamp( GetNewTimeStamp() );
|
|
||||||
( (SCH_COMPONENT*) newitem )->ClearAnnotation( NULL );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetSchItemParent( newitem, screen );
|
|
||||||
AddToScreen( newitem );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( hasSheetCopied )
|
|
||||||
{
|
|
||||||
// We clear annotation of new sheet paths.
|
|
||||||
// Annotation of new components added in current sheet is already cleared.
|
|
||||||
SCH_SCREENS screensList( g_RootSheet );
|
|
||||||
screensList.ClearAnnotationOfNewSheetPaths( initial_sheetpathList );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SCH_ITEM* DuplicateStruct( SCH_ITEM* aDrawStruct, bool aClone )
|
|
||||||
{
|
|
||||||
wxCHECK_MSG( aDrawStruct != NULL, NULL,
|
|
||||||
wxT( "Cannot duplicate NULL schematic item! Bad programmer." ) );
|
|
||||||
|
|
||||||
SCH_ITEM* NewDrawStruct = (SCH_ITEM*) aDrawStruct->Clone();
|
|
||||||
|
|
||||||
if( aClone )
|
|
||||||
NewDrawStruct->SetTimeStamp( aDrawStruct->GetTimeStamp() );
|
|
||||||
|
|
||||||
NewDrawStruct->ClearFlags( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
|
||||||
|
|
||||||
if( NewDrawStruct->Type() == SCH_COMPONENT_T )
|
|
||||||
{
|
|
||||||
SCH_PINS& pins = static_cast<SCH_COMPONENT*>( NewDrawStruct )->GetPins();
|
|
||||||
|
|
||||||
for( SCH_PIN& pin : pins )
|
|
||||||
pin.ClearFlags( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
pin.ClearFlags( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
||||||
|
|
||||||
std::vector<SCH_FIELD*> fields;
|
std::vector<SCH_FIELD*> fields;
|
||||||
static_cast<SCH_COMPONENT*>( NewDrawStruct )->GetFields( fields, false );
|
static_cast<SCH_COMPONENT*>( newItem )->GetFields( fields, false );
|
||||||
|
|
||||||
for( SCH_FIELD* field : fields )
|
for( SCH_FIELD* field : fields )
|
||||||
field->ClearFlags( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
field->ClearFlags( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
||||||
}
|
}
|
||||||
|
|
||||||
// JEY TODO: sheets and sheet pins?
|
if( newItem->Type() == SCH_SHEET_T )
|
||||||
|
{
|
||||||
|
for( SCH_SHEET_PIN& pin : static_cast<SCH_SHEET*>( newItem )->GetPins() )
|
||||||
|
pin.ClearFlags( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
||||||
|
}
|
||||||
|
|
||||||
return NewDrawStruct;
|
return newItem;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1213,9 +1213,7 @@ void SCH_EDIT_FRAME::AddItemToScreenAndUndoList( SCH_ITEM* aItem, bool aUndoAppe
|
||||||
{
|
{
|
||||||
if( !EditSheet( (SCH_SHEET*)aItem, g_CurrentSheet, &doClearAnnotation ) )
|
if( !EditSheet( (SCH_SHEET*)aItem, g_CurrentSheet, &doClearAnnotation ) )
|
||||||
{
|
{
|
||||||
screen->SetCurItem( NULL );
|
|
||||||
delete aItem;
|
delete aItem;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1269,10 +1267,6 @@ void SCH_EDIT_FRAME::AddItemToScreenAndUndoList( SCH_ITEM* aItem, bool aUndoAppe
|
||||||
aItem->ClearFlags( aItem->GetEditFlags() );
|
aItem->ClearFlags( aItem->GetEditFlags() );
|
||||||
|
|
||||||
screen->SetModify();
|
screen->SetModify();
|
||||||
screen->SetCurItem( NULL );
|
|
||||||
m_canvas->SetMouseCapture( NULL, NULL );
|
|
||||||
m_canvas->EndMouseCapture();
|
|
||||||
|
|
||||||
RefreshItem( aItem );
|
RefreshItem( aItem );
|
||||||
|
|
||||||
if( !aItem->IsMoving() && aItem->IsConnectable() )
|
if( !aItem->IsMoving() && aItem->IsConnectable() )
|
||||||
|
|
|
@ -970,15 +970,6 @@ public:
|
||||||
*/
|
*/
|
||||||
void DeleteItem( SCH_ITEM* aItem, bool aAppend = false );
|
void DeleteItem( SCH_ITEM* aItem, bool aAppend = false );
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes all items (and unused junctions that connect to them) and saves
|
|
||||||
* each in the undo list
|
|
||||||
*
|
|
||||||
* @param aItemsList The list of items to delete
|
|
||||||
* @param aAppend True if we are updating a previous commit
|
|
||||||
*/
|
|
||||||
void DeleteItemsInList( PICKED_ITEMS_LIST& aItemsList, bool aAppend = false );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes a given junction and heals any wire segments under the junction
|
* Removes a given junction and heals any wire segments under the junction
|
||||||
*
|
*
|
||||||
|
@ -1267,9 +1258,6 @@ public:
|
||||||
|
|
||||||
void ShowChangedLanguage() override;
|
void ShowChangedLanguage() override;
|
||||||
|
|
||||||
void DuplicateItemsInList( SCH_SCREEN* screen, PICKED_ITEMS_LIST& aItemsList,
|
|
||||||
const wxPoint& aMoveVector );
|
|
||||||
|
|
||||||
virtual void SetScreen( BASE_SCREEN* aScreen ) override;
|
virtual void SetScreen( BASE_SCREEN* aScreen ) override;
|
||||||
|
|
||||||
virtual const BOX2I GetDocumentExtents() const override;
|
virtual const BOX2I GetDocumentExtents() const override;
|
||||||
|
|
|
@ -315,8 +315,7 @@ void SCH_FIELD::Place( SCH_EDIT_FRAME* frame, wxDC* DC )
|
||||||
// save old cmp in undo list
|
// save old cmp in undo list
|
||||||
frame->SaveUndoItemInUndoList( component );
|
frame->SaveUndoItemInUndoList( component );
|
||||||
|
|
||||||
ClearFlags();
|
ClearFlags( GetEditFlags() );
|
||||||
frame->GetScreen()->SetCurItem( NULL );
|
|
||||||
frame->OnModify();
|
frame->OnModify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@ void SCH_EDIT_FRAME::SaveCopyInUndoList( SCH_ITEM* aItem,
|
||||||
switch( aCommandType )
|
switch( aCommandType )
|
||||||
{
|
{
|
||||||
case UR_CHANGED: /* Create a copy of item */
|
case UR_CHANGED: /* Create a copy of item */
|
||||||
itemWrapper.SetLink( DuplicateStruct( aItem, true ) );
|
itemWrapper.SetLink( DuplicateItem( aItem, true ) );
|
||||||
commandToUndo->PushItem( itemWrapper );
|
commandToUndo->PushItem( itemWrapper );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -218,7 +218,7 @@ void SCH_EDIT_FRAME::SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList,
|
||||||
* If this link is not null, the copy is already done
|
* If this link is not null, the copy is already done
|
||||||
*/
|
*/
|
||||||
if( commandToUndo->GetPickedItemLink( ii ) == NULL )
|
if( commandToUndo->GetPickedItemLink( ii ) == NULL )
|
||||||
commandToUndo->SetPickedItemLink( DuplicateStruct( item, true ), ii );
|
commandToUndo->SetPickedItemLink( DuplicateItem( item, true ), ii );
|
||||||
|
|
||||||
wxASSERT( commandToUndo->GetPickedItemLink( ii ) );
|
wxASSERT( commandToUndo->GetPickedItemLink( ii ) );
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -282,15 +282,14 @@ int SCH_DRAWING_TOOL::doPlaceComponent( SCH_COMPONENT* aComponent, SCHLIB_FILTER
|
||||||
if( aComponent )
|
if( aComponent )
|
||||||
{
|
{
|
||||||
m_toolMgr->RunAction( SCH_ACTIONS::clearSelection, true );
|
m_toolMgr->RunAction( SCH_ACTIONS::clearSelection, true );
|
||||||
getModel<SCH_SCREEN>()->SetCurItem( nullptr );
|
|
||||||
m_view->ClearPreview();
|
m_view->ClearPreview();
|
||||||
delete aComponent;
|
delete aComponent;
|
||||||
aComponent = nullptr;
|
aComponent = nullptr;
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
|
|
||||||
if( evt->IsActivate() ) // now finish unconditionally
|
if( !evt->IsActivate() )
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if( evt->IsClick( BUT_LEFT ) )
|
else if( evt->IsClick( BUT_LEFT ) )
|
||||||
|
@ -317,6 +316,7 @@ int SCH_DRAWING_TOOL::doPlaceComponent( SCH_COMPONENT* aComponent, SCHLIB_FILTER
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
aComponent = new SCH_COMPONENT( *part, g_CurrentSheet, sel, (wxPoint) cursorPos );
|
aComponent = new SCH_COMPONENT( *part, g_CurrentSheet, sel, (wxPoint) cursorPos );
|
||||||
|
aComponent->SetFlags( IS_NEW | IS_MOVED );
|
||||||
|
|
||||||
// Be sure the link to the corresponding LIB_PART is OK:
|
// Be sure the link to the corresponding LIB_PART is OK:
|
||||||
aComponent->Resolve( *m_frame->Prj().SchSymbolLibTable() );
|
aComponent->Resolve( *m_frame->Prj().SchSymbolLibTable() );
|
||||||
|
@ -324,10 +324,7 @@ int SCH_DRAWING_TOOL::doPlaceComponent( SCH_COMPONENT* aComponent, SCHLIB_FILTER
|
||||||
if( m_frame->GetAutoplaceFields() )
|
if( m_frame->GetAutoplaceFields() )
|
||||||
aComponent->AutoplaceFields( /* aScreen */ NULL, /* aManual */ false );
|
aComponent->AutoplaceFields( /* aScreen */ NULL, /* aManual */ false );
|
||||||
|
|
||||||
aComponent->SetFlags( IS_NEW | IS_MOVED );
|
|
||||||
|
|
||||||
m_frame->SetRepeatItem( aComponent );
|
m_frame->SetRepeatItem( aComponent );
|
||||||
m_frame->GetScreen()->SetCurItem( aComponent );
|
|
||||||
|
|
||||||
m_view->ClearPreview();
|
m_view->ClearPreview();
|
||||||
m_view->AddToPreview( aComponent->Clone() );
|
m_view->AddToPreview( aComponent->Clone() );
|
||||||
|
@ -412,15 +409,14 @@ int SCH_DRAWING_TOOL::PlaceImage( const TOOL_EVENT& aEvent )
|
||||||
if( image )
|
if( image )
|
||||||
{
|
{
|
||||||
m_toolMgr->RunAction( SCH_ACTIONS::clearSelection, true );
|
m_toolMgr->RunAction( SCH_ACTIONS::clearSelection, true );
|
||||||
getModel<SCH_SCREEN>()->SetCurItem( nullptr );
|
|
||||||
m_view->ClearPreview();
|
m_view->ClearPreview();
|
||||||
delete image;
|
delete image;
|
||||||
image = nullptr;
|
image = nullptr;
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
|
|
||||||
if( evt->IsActivate() ) // now finish unconditionally
|
if( !evt->IsActivate() )
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if( evt->IsClick( BUT_LEFT ) )
|
else if( evt->IsClick( BUT_LEFT ) )
|
||||||
|
@ -453,9 +449,10 @@ int SCH_DRAWING_TOOL::PlaceImage( const TOOL_EVENT& aEvent )
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
image->SetFlags( IS_MOVED );
|
image->SetFlags( IS_NEW | IS_MOVED );
|
||||||
|
|
||||||
m_frame->SetRepeatItem( image );
|
m_frame->SetRepeatItem( image );
|
||||||
m_frame->GetScreen()->SetCurItem( image );
|
|
||||||
m_view->ClearPreview();
|
m_view->ClearPreview();
|
||||||
m_view->AddToPreview( image->Clone() );
|
m_view->AddToPreview( image->Clone() );
|
||||||
m_selectionTool->AddItemToSel( image );
|
m_selectionTool->AddItemToSel( image );
|
||||||
|
@ -572,7 +569,6 @@ int SCH_DRAWING_TOOL::doSingleClickPlace( KICAD_T aType )
|
||||||
m_frame->AddItemToScreenAndUndoList( item );
|
m_frame->AddItemToScreenAndUndoList( item );
|
||||||
|
|
||||||
m_frame->SetRepeatItem( item );
|
m_frame->SetRepeatItem( item );
|
||||||
m_frame->GetScreen()->SetCurItem( item );
|
|
||||||
|
|
||||||
m_frame->SchematicCleanUp();
|
m_frame->SchematicCleanUp();
|
||||||
m_frame->TestDanglingEnds();
|
m_frame->TestDanglingEnds();
|
||||||
|
@ -655,15 +651,14 @@ int SCH_DRAWING_TOOL::doTwoClickPlace( KICAD_T aType )
|
||||||
if( item )
|
if( item )
|
||||||
{
|
{
|
||||||
m_toolMgr->RunAction( SCH_ACTIONS::clearSelection, true );
|
m_toolMgr->RunAction( SCH_ACTIONS::clearSelection, true );
|
||||||
getModel<SCH_SCREEN>()->SetCurItem( nullptr );
|
|
||||||
m_view->ClearPreview();
|
m_view->ClearPreview();
|
||||||
delete item;
|
delete item;
|
||||||
item = nullptr;
|
item = nullptr;
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
|
|
||||||
if( evt->IsActivate() ) // now finish unconditionally
|
if( !evt->IsActivate() )
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if( evt->IsClick( BUT_LEFT ) )
|
else if( evt->IsClick( BUT_LEFT ) )
|
||||||
|
@ -818,44 +813,41 @@ int SCH_DRAWING_TOOL::doDrawSheet( SCH_SHEET *aSheet )
|
||||||
|
|
||||||
if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) )
|
if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) )
|
||||||
{
|
{
|
||||||
m_view->ClearPreview();
|
|
||||||
m_toolMgr->RunAction( SCH_ACTIONS::clearSelection, true );
|
m_toolMgr->RunAction( SCH_ACTIONS::clearSelection, true );
|
||||||
m_frame->GetScreen()->SetCurItem( nullptr );
|
m_view->ClearPreview();
|
||||||
|
|
||||||
if( m_frame->GetToolId() == ID_POPUP_SCH_RESIZE_SHEET )
|
if( m_frame->GetToolId() == ID_POPUP_SCH_RESIZE_SHEET )
|
||||||
{
|
{
|
||||||
m_frame->RollbackSchematicFromUndo();
|
m_frame->RollbackSchematicFromUndo();
|
||||||
break; // resize sheet is a single-shot command, not a reusable tool
|
// resize sheet is a single-shot command, when we're done we're done
|
||||||
}
|
}
|
||||||
else if( aSheet )
|
else if( aSheet )
|
||||||
{
|
{
|
||||||
delete aSheet;
|
delete aSheet;
|
||||||
aSheet = nullptr;
|
aSheet = nullptr;
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
|
|
||||||
if( evt->IsActivate() )
|
if( !evt->IsActivate() )
|
||||||
break; // exit unconditionally
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else if( evt->IsClick( BUT_LEFT ) || evt->IsAction( &SCH_ACTIONS::finishSheet ) )
|
else if( evt->IsClick( BUT_LEFT ) || evt->IsAction( &SCH_ACTIONS::finishSheet ) )
|
||||||
{
|
{
|
||||||
if( !aSheet && !evt->IsAction( &SCH_ACTIONS::finishSheet ) )
|
if( !aSheet && !evt->IsAction( &SCH_ACTIONS::finishSheet ) )
|
||||||
{
|
{
|
||||||
aSheet = new SCH_SHEET( (wxPoint) cursorPos );
|
aSheet = new SCH_SHEET( (wxPoint) cursorPos );
|
||||||
|
|
||||||
aSheet->SetFlags( IS_NEW | IS_RESIZED );
|
aSheet->SetFlags( IS_NEW | IS_RESIZED );
|
||||||
aSheet->SetTimeStamp( GetNewTimeStamp() );
|
aSheet->SetTimeStamp( GetNewTimeStamp() );
|
||||||
aSheet->SetParent( m_frame->GetScreen() );
|
aSheet->SetParent( m_frame->GetScreen() );
|
||||||
aSheet->SetScreen( NULL );
|
aSheet->SetScreen( NULL );
|
||||||
sizeSheet( aSheet, cursorPos );
|
sizeSheet( aSheet, cursorPos );
|
||||||
|
|
||||||
|
m_frame->SetRepeatItem( nullptr );
|
||||||
|
|
||||||
m_selectionTool->AddItemToSel( aSheet );
|
m_selectionTool->AddItemToSel( aSheet );
|
||||||
m_view->ClearPreview();
|
m_view->ClearPreview();
|
||||||
m_view->AddToPreview( aSheet->Clone() );
|
m_view->AddToPreview( aSheet->Clone() );
|
||||||
|
|
||||||
m_frame->SetRepeatItem( nullptr );
|
|
||||||
m_frame->GetScreen()->SetCurItem( aSheet );
|
|
||||||
}
|
}
|
||||||
else if( aSheet )
|
else if( aSheet )
|
||||||
{
|
{
|
||||||
|
@ -865,12 +857,10 @@ int SCH_DRAWING_TOOL::doDrawSheet( SCH_SHEET *aSheet )
|
||||||
{
|
{
|
||||||
m_view->Hide( aSheet, false );
|
m_view->Hide( aSheet, false );
|
||||||
m_frame->RefreshItem( aSheet );
|
m_frame->RefreshItem( aSheet );
|
||||||
|
|
||||||
m_frame->OnModify();
|
m_frame->OnModify();
|
||||||
}
|
}
|
||||||
|
|
||||||
aSheet = nullptr;
|
aSheet = nullptr;
|
||||||
m_frame->GetScreen()->SetCurItem( nullptr );
|
|
||||||
|
|
||||||
if( m_frame->GetToolId() == ID_POPUP_SCH_RESIZE_SHEET )
|
if( m_frame->GetToolId() == ID_POPUP_SCH_RESIZE_SHEET )
|
||||||
break; // resize sheet is a single-shot command; when we're done we're done
|
break; // resize sheet is a single-shot command; when we're done we're done
|
||||||
|
|
|
@ -1213,7 +1213,7 @@ int SCH_EDIT_TOOL::Duplicate( const TOOL_EVENT& aEvent )
|
||||||
for( unsigned ii = 0; ii < selection.GetSize(); ++ii )
|
for( unsigned ii = 0; ii < selection.GetSize(); ++ii )
|
||||||
{
|
{
|
||||||
SCH_ITEM* oldItem = static_cast<SCH_ITEM*>( selection.GetItem( ii ) );
|
SCH_ITEM* oldItem = static_cast<SCH_ITEM*>( selection.GetItem( ii ) );
|
||||||
SCH_ITEM* newItem = DuplicateStruct( oldItem );
|
SCH_ITEM* newItem = DuplicateItem( oldItem );
|
||||||
newItems.push_back( newItem );
|
newItems.push_back( newItem );
|
||||||
|
|
||||||
newItem->SetFlags( IS_NEW );
|
newItem->SetFlags( IS_NEW );
|
||||||
|
@ -1362,7 +1362,6 @@ int SCH_EDIT_TOOL::DoDelete( const TOOL_EVENT& aEvent )
|
||||||
m_frame->DeleteItem( item, ii > 0 );
|
m_frame->DeleteItem( item, ii > 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_frame->GetScreen()->SetCurItem( nullptr );
|
|
||||||
m_frame->SetRepeatItem( nullptr );
|
m_frame->SetRepeatItem( nullptr );
|
||||||
m_frame->TestDanglingEnds();
|
m_frame->TestDanglingEnds();
|
||||||
|
|
||||||
|
|
|
@ -516,10 +516,6 @@ int SCH_LINE_DRAWING_TOOL::doDrawSegments( int aType, SCH_LINE* aSegment )
|
||||||
m_view->ClearPreview();
|
m_view->ClearPreview();
|
||||||
m_view->ShowPreview( false );
|
m_view->ShowPreview( false );
|
||||||
|
|
||||||
// Clear flags used in edit functions.
|
|
||||||
screen->ClearDrawingState();
|
|
||||||
screen->SetCurItem( nullptr );
|
|
||||||
|
|
||||||
if( !evt->IsActivate() )
|
if( !evt->IsActivate() )
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -591,8 +587,8 @@ int SCH_LINE_DRAWING_TOOL::doDrawSegments( int aType, SCH_LINE* aSegment )
|
||||||
aSegment->SetFlags( IS_NEW | IS_MOVED );
|
aSegment->SetFlags( IS_NEW | IS_MOVED );
|
||||||
aSegment->SetStartPoint( cursorPos );
|
aSegment->SetStartPoint( cursorPos );
|
||||||
s_wires.PushBack( aSegment );
|
s_wires.PushBack( aSegment );
|
||||||
|
|
||||||
m_selectionTool->AddItemToSel( aSegment, true /*quiet mode*/ );
|
m_selectionTool->AddItemToSel( aSegment, true /*quiet mode*/ );
|
||||||
screen->SetCurItem( aSegment );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -706,8 +702,8 @@ SCH_LINE* SCH_LINE_DRAWING_TOOL::startSegments( int aType, const wxPoint& aPos )
|
||||||
|
|
||||||
segment->SetFlags( IS_NEW | IS_MOVED );
|
segment->SetFlags( IS_NEW | IS_MOVED );
|
||||||
s_wires.PushBack( segment );
|
s_wires.PushBack( segment );
|
||||||
|
|
||||||
m_selectionTool->AddItemToSel( segment, true /*quiet mode*/ );
|
m_selectionTool->AddItemToSel( segment, true /*quiet mode*/ );
|
||||||
m_frame->GetScreen()->SetCurItem( segment );
|
|
||||||
|
|
||||||
// We need 2 segments to go from a given start pin to an end point when the
|
// We need 2 segments to go from a given start pin to an end point when the
|
||||||
// horizontal and vertical lines only switch is on.
|
// horizontal and vertical lines only switch is on.
|
||||||
|
@ -716,8 +712,8 @@ SCH_LINE* SCH_LINE_DRAWING_TOOL::startSegments( int aType, const wxPoint& aPos )
|
||||||
segment = new SCH_LINE( *segment );
|
segment = new SCH_LINE( *segment );
|
||||||
segment->SetFlags( IS_NEW | IS_MOVED );
|
segment->SetFlags( IS_NEW | IS_MOVED );
|
||||||
s_wires.PushBack( segment );
|
s_wires.PushBack( segment );
|
||||||
|
|
||||||
m_selectionTool->AddItemToSel( segment, true /*quiet mode*/ );
|
m_selectionTool->AddItemToSel( segment, true /*quiet mode*/ );
|
||||||
m_frame->GetScreen()->SetCurItem( segment );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return segment;
|
return segment;
|
||||||
|
@ -878,8 +874,6 @@ void SCH_LINE_DRAWING_TOOL::finishSegments()
|
||||||
|
|
||||||
m_frame->TestDanglingEnds();
|
m_frame->TestDanglingEnds();
|
||||||
|
|
||||||
m_frame->GetScreen()->ClearDrawingState();
|
|
||||||
m_frame->GetScreen()->SetCurItem( nullptr );
|
|
||||||
m_frame->OnModify();
|
m_frame->OnModify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -396,7 +396,6 @@ SCH_ITEM* SCH_SELECTION_TOOL::SelectPoint( const VECTOR2I& aWhere, const KICAD_T
|
||||||
if( aSelectionCancelledFlag )
|
if( aSelectionCancelledFlag )
|
||||||
*aSelectionCancelledFlag = true;
|
*aSelectionCancelledFlag = true;
|
||||||
|
|
||||||
m_frame->GetScreen()->SetCurItem( nullptr );
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -571,14 +570,6 @@ bool SCH_SELECTION_TOOL::selectMultiple()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_frame )
|
|
||||||
{
|
|
||||||
if( m_selection.Size() == 1 )
|
|
||||||
m_frame->GetScreen()->SetCurItem( static_cast<SCH_ITEM*>( m_selection.Front() ) );
|
|
||||||
else
|
|
||||||
m_frame->GetScreen()->SetCurItem( nullptr );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inform other potentially interested tools
|
// Inform other potentially interested tools
|
||||||
if( !m_selection.Empty() )
|
if( !m_selection.Empty() )
|
||||||
m_toolMgr->ProcessEvent( EVENTS::SelectedEvent );
|
m_toolMgr->ProcessEvent( EVENTS::SelectedEvent );
|
||||||
|
@ -654,10 +645,11 @@ int SCH_SELECTION_TOOL::SelectConnection( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
if( item->GetFlags() & CANDIDATE )
|
if( item->GetFlags() & CANDIDATE )
|
||||||
select( item );
|
select( item );
|
||||||
|
|
||||||
m_toolMgr->ProcessEvent( EVENTS::SelectedEvent );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( m_selection.GetSize() > 1 )
|
||||||
|
m_toolMgr->ProcessEvent( EVENTS::SelectedEvent );
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -871,9 +863,6 @@ void SCH_SELECTION_TOOL::clearSelection()
|
||||||
m_selection.SetIsHover( false );
|
m_selection.SetIsHover( false );
|
||||||
m_selection.ClearReferencePoint();
|
m_selection.ClearReferencePoint();
|
||||||
|
|
||||||
if( m_frame )
|
|
||||||
m_frame->GetScreen()->SetCurItem( nullptr );
|
|
||||||
|
|
||||||
// Inform other potentially interested tools
|
// Inform other potentially interested tools
|
||||||
m_toolMgr->ProcessEvent( EVENTS::ClearedEvent );
|
m_toolMgr->ProcessEvent( EVENTS::ClearedEvent );
|
||||||
}
|
}
|
||||||
|
@ -911,20 +900,6 @@ void SCH_SELECTION_TOOL::toggleSelection( SCH_ITEM* aItem, bool aForce )
|
||||||
void SCH_SELECTION_TOOL::select( SCH_ITEM* aItem )
|
void SCH_SELECTION_TOOL::select( SCH_ITEM* aItem )
|
||||||
{
|
{
|
||||||
highlight( aItem, SELECTED, &m_selection );
|
highlight( aItem, SELECTED, &m_selection );
|
||||||
|
|
||||||
if( m_frame )
|
|
||||||
{
|
|
||||||
if( m_selection.Size() == 1 )
|
|
||||||
{
|
|
||||||
// Set as the current item, so the information about selection is displayed
|
|
||||||
m_frame->GetScreen()->SetCurItem( aItem );
|
|
||||||
}
|
|
||||||
else if( m_selection.Size() == 2 ) // Check only for 2, so it will not be
|
|
||||||
{ // called for every next selected item
|
|
||||||
// If multiple items are selected, do not show the information about the selected item
|
|
||||||
m_frame->GetScreen()->SetCurItem( nullptr );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue