80 wxString lastPageName;
81 std::set<wxString> lastUUIDs;
85 lastPageName = page->GetName();
86 wxDataViewCtrl* dataView =
m_dataViews[lastPageName];
88 int uuidCol = dataView->GetColumnCount() - 1;
90 wxDataViewItemArray selections;
91 dataView->GetSelections( selections );
93 for( wxDataViewItem& item : selections )
96 dataView->GetModel()->GetValue( var, item, uuidCol );
97 lastUUIDs.emplace( var.GetString() );
103 std::map<wxString, std::map<KIID, std::vector<std::pair<wxString, wxVariant>>>> dataMap;
107 std::vector<std::pair<wxString, wxVariant>> rowData = gen->GetRowData();
109 const KIID uuid = gen->m_Uuid;
110 rowData.emplace_back( wxS(
"UUID" ), uuid.
AsString() );
112 dataMap[gen->GetName()][uuid] = rowData;
115 std::vector<wxString> toDelete;
116 for(
size_t i = 0; i <
m_Notebook->GetPageCount(); i++ )
120 if( dataMap.find(page->GetName()) == dataMap.end() )
122 toDelete.emplace_back( page->GetName() );
126 for(
const wxString&
name : toDelete )
129 for(
auto& [typeName, uuidToRowMap] : dataMap )
132 for(
size_t i = 0; i <
m_Notebook->GetPageCount(); i++ )
134 if(
m_Notebook->GetPage( i )->GetName() == typeName )
147 wxString title = typeName + wxString::Format(
" (%d)",
int( uuidToRowMap.size() ) );
152 for(
auto& [typeName, uuidToRowMap] : dataMap )
154 std::vector<std::pair<wxString, wxString>>& thisColNameTypes =
m_columnNameTypes[typeName];
155 std::map<wxString, int> nameToColIdMap;
156 std::set<wxString> columnsSet;
158 for(
auto& [uuid, rowMap] : uuidToRowMap )
160 for(
auto& [colName, value] : rowMap )
162 if( columnsSet.find( colName ) == columnsSet.end() )
164 int colId = columnsSet.size();
165 columnsSet.emplace( colName );
167 nameToColIdMap[colName] = colId;
168 thisColNameTypes.emplace_back( colName,
"string" );
173 wxDataViewListStore* store =
new wxDataViewListStore();
175 for(
auto& [
name, type] : thisColNameTypes )
176 store->AppendColumn( type );
178 int colCount = thisColNameTypes.size();
180 for(
auto& [uuid, rowMap] : uuidToRowMap )
182 wxVector<wxVariant> values( colCount );
184 for(
auto& [dataName, value] : rowMap )
186 values[nameToColIdMap[dataName]] = value;
189 store->AppendItem( values );
200 wxString title = typeName + wxString::Format(
" (%d)",
model->GetItemCount() );
201 wxDataViewCtrl* dataView =
addPage( typeName, title );
203 if( typeName == lastPageName )
206 dataView->AssociateModel(
model );
211 int flags = wxDATAVIEW_COL_RESIZABLE | wxDATAVIEW_COL_SORTABLE;
213 if(
name == wxS(
"UUID" ) )
214 flags |= wxDATAVIEW_COL_HIDDEN;
216 dataView->AppendTextColumn(
name, colId, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE,
217 wxALIGN_LEFT, flags );
227 if( newPageId != -1 )
231 wxDataViewCtrl* dataView =
m_dataViews[lastPageName];
232 int uuidCol = dataView->GetColumnCount() - 1;
234 size_t itemCount =
model->GetItemCount();
235 wxDataViewItemArray newSelections;
237 for(
size_t itemId = 0; itemId < itemCount; itemId++ )
240 model->GetValueByRow( var, itemId, uuidCol );
242 if( lastUUIDs.find( var.GetString() ) != lastUUIDs.end() )
243 newSelections.push_back(
model->GetItem( itemId ) );
246 dataView->SetSelections( newSelections );
254 new wxPanel(
m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
256 panelPage->SetName( aName );
258 wxBoxSizer* bSizerPage1;
259 bSizerPage1 =
new wxBoxSizer( wxVERTICAL );
261 bSizerPage1->SetMinSize( wxSize( -1, 320 ) );
262 wxDataViewCtrl* dataView =
new wxDataViewCtrl( panelPage, wxID_ANY, wxDefaultPosition,
263 wxDefaultSize, wxDV_MULTIPLE | wxDV_ROW_LINES );
266 dataView->SetLayoutDirection( wxLayout_LeftToRight );
268 bSizerPage1->Add( dataView, 1, wxEXPAND | wxALL, 5 );
271 bSizerPage1->Add( 0, 8, 0, wxEXPAND, 5 );
274 panelPage->SetSizer( bSizerPage1 );
276 bSizerPage1->Fit( panelPage );
277 m_Notebook->AddPage( panelPage, aTitle,
false );
392 wxString pageName =
m_Notebook->GetCurrentPage()->GetName();
398 int uuidCol = dataView->GetColumnCount() - 1;
399 std::vector<BOARD_ITEM*> boardItems;
402 wxDataViewItemArray selections;
403 dataView->GetSelections( selections );
405 for( wxDataViewItem& viewItem : selections )
408 model->GetValue( var, viewItem, uuidCol );
415 boardItems.push_back( brdItem );
416 edaItems.push_back( brdItem );
421 m_frame->FocusOnItems( boardItems );