mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-18 21:19:20 +00:00
Map nets in pasted data
Add missing nets to the existing board and use any existing nets of the same name. Adds option to clear all nets in Paste Special Fixes https://gitlab.com/kicad/code/kicad/-/issues/17626
This commit is contained in:
parent
c7d280dfa1
commit
d82e8ee41a
common/dialogs
include/dialogs
pcbnew
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf)
|
||||
// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf0)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
@ -21,10 +21,15 @@ DIALOG_PASTE_SPECIAL_BASE::DIALOG_PASTE_SPECIAL_BASE( wxWindow* parent, wxWindow
|
||||
|
||||
wxString m_pasteOptionsChoices[] = { _("Assign unique reference designators to pasted symbols"), _("Keep existing reference designators, even if they are duplicated"), _("Clear reference designators on all pasted symbols") };
|
||||
int m_pasteOptionsNChoices = sizeof( m_pasteOptionsChoices ) / sizeof( wxString );
|
||||
m_pasteOptions = new wxRadioBox( this, wxID_ANY, _("Paste Options"), wxDefaultPosition, wxDefaultSize, m_pasteOptionsNChoices, m_pasteOptionsChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_pasteOptions = new wxRadioBox( this, wxID_ANY, _("Reference Designators"), wxDefaultPosition, wxDefaultSize, m_pasteOptionsNChoices, m_pasteOptionsChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_pasteOptions->SetSelection( 1 );
|
||||
optionsSizer->Add( m_pasteOptions, 0, wxALL, 5 );
|
||||
|
||||
m_clearNetsCB = new wxCheckBox( this, wxID_ANY, _("Clear Net Assignments"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_clearNetsCB->SetToolTip( _("Remove the net information from all connected items before pasting") );
|
||||
|
||||
optionsSizer->Add( m_clearNetsCB, 0, wxALL, 5 );
|
||||
|
||||
|
||||
m_mainSizer->Add( optionsSizer, 1, wxALL|wxEXPAND, 10 );
|
||||
|
||||
|
@ -105,7 +105,7 @@
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Paste Options</property>
|
||||
<property name="label">Reference Designators</property>
|
||||
<property name="majorDimension">1</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
@ -139,6 +139,71 @@
|
||||
<event name="OnRadioBox">onRadioBoxEvent</event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="true">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="true">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="drag_accept_files">0</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Clear Net Assignments</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_clearNetsCB</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip">Remove the net information from all connected items before pasting</property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="true">
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf)
|
||||
// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf0)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
@ -17,6 +17,7 @@
|
||||
#include <wx/font.h>
|
||||
#include <wx/colour.h>
|
||||
#include <wx/settings.h>
|
||||
#include <wx/checkbox.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/dialog.h>
|
||||
@ -33,6 +34,7 @@ class DIALOG_PASTE_SPECIAL_BASE : public DIALOG_SHIM
|
||||
|
||||
protected:
|
||||
wxRadioBox* m_pasteOptions;
|
||||
wxCheckBox* m_clearNetsCB;
|
||||
wxStdDialogButtonSizer* m_sdbSizer;
|
||||
wxButton* m_sdbSizerOK;
|
||||
wxButton* m_sdbSizerCancel;
|
||||
|
@ -50,6 +50,17 @@ public:
|
||||
bool TransferDataToWindow() override;
|
||||
bool TransferDataFromWindow() override;
|
||||
|
||||
bool GetClearNets() const
|
||||
{
|
||||
return m_clearNetsCB->IsChecked();
|
||||
}
|
||||
|
||||
void HideClearNets()
|
||||
{
|
||||
m_clearNetsCB->Hide();
|
||||
finishDialogSettings();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void onRadioBoxEvent( wxCommandEvent& event ) override;
|
||||
|
||||
|
@ -2461,7 +2461,7 @@ const std::vector<BOARD_CONNECTED_ITEM*> BOARD::AllConnectedItems()
|
||||
}
|
||||
|
||||
|
||||
void BOARD::MapNets( const BOARD* aDestBoard )
|
||||
void BOARD::MapNets( BOARD* aDestBoard )
|
||||
{
|
||||
for( BOARD_CONNECTED_ITEM* item : AllConnectedItems() )
|
||||
{
|
||||
@ -2470,7 +2470,12 @@ void BOARD::MapNets( const BOARD* aDestBoard )
|
||||
if( netInfo )
|
||||
item->SetNet( netInfo );
|
||||
else
|
||||
item->SetNetCode( 0 );
|
||||
{
|
||||
NETINFO_ITEM* newNet = new NETINFO_ITEM( aDestBoard, item->GetNetname() );
|
||||
aDestBoard->Add( newNet );
|
||||
item->SetNet( newNet );
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1153,10 +1153,10 @@ public:
|
||||
|
||||
/**
|
||||
* Map all nets in the given board to nets with the same name (if any) in the destination
|
||||
* board. This allows us to share layouts which came from the same hierarchical sheet in
|
||||
* the schematic.
|
||||
* board. If there are missing nets in the destination board, they will be created.
|
||||
*
|
||||
*/
|
||||
void MapNets( const BOARD* aDestBoard );
|
||||
void MapNets( BOARD* aDestBoard );
|
||||
|
||||
void SanitizeNetcodes();
|
||||
|
||||
|
@ -924,28 +924,36 @@ int PCB_CONTROL::Paste( const TOOL_EVENT& aEvent )
|
||||
return 0;
|
||||
|
||||
PASTE_MODE mode = PASTE_MODE::KEEP_ANNOTATIONS;
|
||||
bool clear_nets = false;
|
||||
const wxString defaultRef = wxT( "REF**" );
|
||||
|
||||
if( aEvent.IsAction( &ACTIONS::pasteSpecial ) )
|
||||
{
|
||||
DIALOG_PASTE_SPECIAL dlg( m_frame, &mode, defaultRef );
|
||||
|
||||
if( clipItem->Type() != PCB_T )
|
||||
dlg.HideClearNets();
|
||||
|
||||
if( dlg.ShowModal() == wxID_CANCEL )
|
||||
return 0;
|
||||
|
||||
clear_nets = dlg.GetClearNets();
|
||||
}
|
||||
|
||||
bool isFootprintEditor = m_isFootprintEditor || frame()->IsType( FRAME_FOOTPRINT_EDITOR );
|
||||
|
||||
if( clipItem->Type() == PCB_T )
|
||||
{
|
||||
if( isFootprintEditor )
|
||||
BOARD* clipBoard = static_cast<BOARD*>( clipItem );
|
||||
|
||||
if( isFootprintEditor || clear_nets )
|
||||
{
|
||||
for( BOARD_CONNECTED_ITEM* item : static_cast<BOARD*>( clipItem )->AllConnectedItems() )
|
||||
for( BOARD_CONNECTED_ITEM* item : clipBoard->AllConnectedItems() )
|
||||
item->SetNet( NETINFO_LIST::OrphanedItem() );
|
||||
}
|
||||
else
|
||||
{
|
||||
static_cast<BOARD*>( clipItem )->MapNets( m_frame->GetBoard() );
|
||||
clipBoard->MapNets( m_frame->GetBoard() );
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user