39#include <wx/bookctrl.h>
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 view->SetLayoutDirection( wxLayout_LeftToRight );
77 m_models.try_emplace( idx, std::move(
model ) );
85 wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE );
89 wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE );
95 for(
auto& [idx, view] : m_views )
96 PostProcessModelSelection( idx, {} );
104 std::vector<SCH_SHEET_PIN*> pins_ori =
m_sheet->GetPins();
107 std::set<wxString> dedup_labels_ori_text;
108 std::vector<SCH_HIERLABEL*> dedup_labels_ori;
110 for(
const auto& item : labels_ori )
114 if( dedup_labels_ori_text.count( label->
GetText() ) == 0 )
116 dedup_labels_ori_text.insert( label->
GetText() );
117 dedup_labels_ori.push_back( label );
121 std::sort( dedup_labels_ori.begin(), dedup_labels_ori.end(),
124 return StrNumCmp( label1->GetText(), label2->GetText(), true ) < 0;
129 for(
size_t i = 0; i < pins_ori.size(); i++ )
133 if( label->GetText() == cur_pin->
GetText() && label->GetShape() == cur_pin->
GetShape() )
135 associated_list.push_back(
136 std::make_shared<ASSOCIATED_SCH_LABEL_PIN>( label, cur_pin ) );
137 pins_ori.erase( pins_ori.begin() + i );
142 labels_list.push_back(
143 std::make_shared<SCH_HIERLABEL_SYNCHRONIZATION_ITEM>( label,
m_sheet ) );
146 for(
const auto& item : dedup_labels_ori )
149 for(
const auto&
pin : pins_ori )
150 pins_list.push_back( std::make_shared<SCH_SHEET_PIN_SYNCHRONIZATION_ITEM>(
189 wxDataViewItemArray selected_items;
190 std::set<EDA_ITEM*> selected_items_set;
193 for(
const auto& it : selected_items )
197 selected_items_set.insert( item->GetItem() );
200 if( selected_items_set.empty() )
210 wxDataViewItemArray selected_items;
211 std::set<EDA_ITEM*> selected_items_set;
214 for(
const auto& it : selected_items )
219 selected_items_set.insert( item->GetItem() );
222 if( selected_items_set.empty() )
234 for(
auto& idx : { labelIdx, pinIdx } )
245 for(
const auto& item : { labelItem, pinItem } )
252 std::static_pointer_cast<SCH_HIERLABEL_SYNCHRONIZATION_ITEM>( labelItem )->GetLabel();
254 std::static_pointer_cast<SCH_SHEET_PIN_SYNCHRONIZATION_ITEM>( pinItem )->GetPin();
263 pin_ptr->SetText( label_ptr->GetText() );
264 pin_ptr->SetShape( label_ptr->GetShape() );
273 label_ptr->SetText( pin_ptr->GetText() );
274 label_ptr->SetShape( pin_ptr->GetShape() );
281 std::make_shared<ASSOCIATED_SCH_LABEL_PIN>( label_ptr, pin_ptr ) );
319 wxDataViewItemArray
array;
330 wxDataViewItemArray
array;
341 wxDataViewItemArray indexes;
348 for(
auto& item : items )
350 auto associated = std::static_pointer_cast<ASSOCIATED_SCH_LABEL_PIN>( item );
352 std::make_shared<SCH_HIERLABEL_SYNCHRONIZATION_ITEM>( associated->GetLabel(),
355 std::make_shared<SCH_SHEET_PIN_SYNCHRONIZATION_ITEM>( associated->GetPin(),
369 m_models[aIdex]->OnRowSelected( {} );
371 const bool has_selected_row =
m_views[aIdex]->GetSelectedItemsCount() > 0;
378 btn->Enable( has_selected_row );
385 btn->Enable( has_selected_row );
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap, int aMinHeight)
virtual const wxString & GetText() const
Return the string associated with the text object.
wxBitmapButton * m_btnUndo
wxButton * m_btnAddSheetPins
wxButton * m_btnAddLabels
wxDataViewCtrl * m_viewSheetPins
PANEL_SYNC_SHEET_PINS_BASE(wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(666, 414), long style=wxTAB_TRAVERSAL, const wxString &name=wxEmptyString)
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
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.
Agent for all the modifications while syncing the sheet pin and hierarchical label.
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