39#include <wx/bookctrl.h>
52 m_noteBook( aNoteBook ),
54 m_sheetFileName( aSheet->GetFileName() ),
67 m_labelSheetName->SetLabel( aSheet->GetFileName() );
68 m_labelSymName->SetLabel( aSheet->GetShownName(
true ) );
71 for(
auto& [idx, view] : m_views )
73 auto model = wxObjectDataPtr<SHEET_SYNCHRONIZATION_MODEL>(
75 view->AssociateModel( model.get() );
76 m_models.try_emplace( idx, std::move( model ) );
84 wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE );
88 wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE );
94 for(
auto& [idx, view] : m_views )
95 PostProcessModelSelection( idx, {} );
106 std::set<wxString> dedup_labels_ori_text;
107 std::vector<SCH_HIERLABEL*> dedup_labels_ori;
109 for(
const auto& item : labels_ori )
113 if( dedup_labels_ori_text.count( label->
GetText() ) == 0 )
115 dedup_labels_ori_text.insert( label->
GetText() );
116 dedup_labels_ori.push_back( label );
120 std::sort( dedup_labels_ori.begin(), dedup_labels_ori.end(),
123 return StrNumCmp( label1->GetText(), label2->GetText(), true ) < 0;
128 for(
size_t i = 0; i < pins_ori.size(); i++ )
132 if( label->GetText() == cur_pin->
GetText() && label->GetShape() == cur_pin->
GetShape() )
134 associated_list.push_back(
135 std::make_shared<ASSOCIATED_SCH_LABEL_PIN>( label, cur_pin ) );
136 pins_ori.erase( pins_ori.begin() + i );
141 labels_list.push_back(
142 std::make_shared<SCH_HIERLABEL_SYNCHRONIZATION_ITEM>( label,
m_sheet ) );
145 for(
const auto& item : dedup_labels_ori )
148 for(
const auto&
pin : pins_ori )
149 pins_list.push_back( std::make_shared<SCH_SHEET_PIN_SYNCHRONIZATION_ITEM>(
188 wxDataViewItemArray selected_items;
189 std::set<EDA_ITEM*> selected_items_set;
192 for(
const auto& it : selected_items )
196 selected_items_set.insert( item->GetItem() );
199 if( selected_items_set.empty() )
209 wxDataViewItemArray selected_items;
210 std::set<EDA_ITEM*> selected_items_set;
213 for(
const auto& it : selected_items )
218 selected_items_set.insert( item->GetItem() );
221 if( selected_items_set.empty() )
233 for(
auto& idx : { labelIdx, pinIdx } )
244 for(
const auto& item : { labelItem, pinItem } )
251 std::static_pointer_cast<SCH_HIERLABEL_SYNCHRONIZATION_ITEM>( labelItem )->GetLabel();
253 std::static_pointer_cast<SCH_SHEET_PIN_SYNCHRONIZATION_ITEM>( pinItem )->GetPin();
262 pin_ptr->SetText( label_ptr->GetText() );
263 pin_ptr->SetShape( label_ptr->GetShape() );
272 label_ptr->SetText( pin_ptr->GetText() );
273 label_ptr->SetShape( pin_ptr->GetShape() );
280 std::make_shared<ASSOCIATED_SCH_LABEL_PIN>( label_ptr, pin_ptr ) );
318 wxDataViewItemArray
array;
329 wxDataViewItemArray
array;
340 wxDataViewItemArray indexes;
347 for(
auto& item : items )
349 auto associated = std::static_pointer_cast<ASSOCIATED_SCH_LABEL_PIN>( item );
351 std::make_shared<SCH_HIERLABEL_SYNCHRONIZATION_ITEM>( associated->GetLabel(),
354 std::make_shared<SCH_SHEET_PIN_SYNCHRONIZATION_ITEM>( associated->GetPin(),
368 m_models[aIdex]->OnRowSelected( {} );
370 const bool has_selected_row =
m_views[aIdex]->GetSelectedItemsCount() > 0;
377 btn->Enable( has_selected_row );
384 btn->Enable( has_selected_row );
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap, int aMinHeight)
virtual const wxString & GetText() const
Return the string associated with the text object.
EE_TYPE OfType(KICAD_T aType) const
Class PANEL_SYNC_SHEET_PINS_BASE.
wxBitmapButton * m_btnUndo
wxButton * m_btnAddSheetPins
wxButton * m_btnAddLabels
wxDataViewCtrl * m_viewSheetPins
wxDataViewCtrl * m_viewAssociated
wxBitmapButton * m_btnUseLabelAsTemplate
wxDataViewCtrl * m_viewSheetLabels
wxBitmapButton * m_btnUsePinAsTemplate
SHEET_SYNCHRONIZATION_MODEL_PTR GetModel(int aKind) const
void PostProcessModelSelection(int aIdex, wxDataViewItem const &aItem)
void OnBtnUsePinAsTemplateClicked(wxCommandEvent &event) override
void OnBtnRmPinsClicked(wxCommandEvent &event) override
void UpdatePageImage() const
void GenericSync(SYNC_DIRECTION direction)
void OnBtnAddLabelsClicked(wxCommandEvent &event) override
void OnViewSheetLabelCellClicked(wxDataViewEvent &event) override
void OnViewMatchedCellClicked(wxDataViewEvent &event) override
const wxString & GetSheetFileName() const
SYNC_SHEET_PINT_VIEWS m_views
bool HasUndefinedSheetPing() const
void OnBtnUseLabelAsTemplateClicked(wxCommandEvent &event) override
void OnBtnRmLabelsClicked(wxCommandEvent &event) override
~PANEL_SYNC_SHEET_PINS() override
void OnBtnAddSheetPinsClicked(wxCommandEvent &event) override
void OnBtnUndoClicked(wxCommandEvent &event) override
SHEET_SYNCHRONIZATION_AGENT & m_agent
PANEL_SYNC_SHEET_PINS(wxWindow *aParent, SCH_SHEET *aSheet, wxNotebook *aNoteBook, int aIndex, SHEET_SYNCHRONIZATION_AGENT &aAgent, const SCH_SHEET_PATH &aPath)
void OnViewSheetPinCellClicked(wxDataViewEvent &event) override
SYNC_SHEET_PINT_MODELS m_models
LABEL_FLAG_SHAPE GetShape() const
EE_RTREE & Items()
Get the full RTree, usually for iterating.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
SCH_SCREEN * GetScreen() const
std::vector< SCH_SHEET_PIN * > & GetPins()
Agent for all the modifications while syncing the sheet pin and hierarchical label.
void PlaceHieraLable(SCH_SHEET *aSheet, SCH_SHEET_PATH const &aPath, std::set< EDA_ITEM * > const &aPins)
void PlaceSheetPin(SCH_SHEET *aSheet, SCH_SHEET_PATH const &aPath, std::set< EDA_ITEM * > const &aLabels)
void ModifyItem(SHEET_SYNCHRONIZATION_ITEM &aItem, std::function< void()> const &aDoModify, const SCH_SHEET_PATH &aPath)
static wxString GetColName(int col)
wxString getElectricalTypeLabel(LABEL_FLAG_SHAPE aType)
wxObjectDataPtr< SHEET_SYNCHRONIZATION_MODEL > SHEET_SYNCHRONIZATION_MODEL_PTR
std::vector< SHEET_SYNCHRONIZATION_ITE_PTR > SHEET_SYNCHRONIZATION_ITEM_LIST
std::shared_ptr< SHEET_SYNCHRONIZATION_ITEM > SHEET_SYNCHRONIZATION_ITE_PTR