diff --git a/common/tool/actions.cpp b/common/tool/actions.cpp index 5e97a82b43..e585dfdd8d 100644 --- a/common/tool/actions.cpp +++ b/common/tool/actions.cpp @@ -953,17 +953,17 @@ TOOL_ACTION ACTIONS::unpinLibrary( TOOL_ACTION_ARGS() .FriendlyName( _( "Unpin Library" ) ) .Tooltip( _( "No longer keep the library at the top of the list" ) ) ); -TOOL_ACTION ACTIONS::showLibraryTable( TOOL_ACTION_ARGS() - .Name( "common.Control.showLibraryTable" ) +TOOL_ACTION ACTIONS::showLibraryFieldsTable( TOOL_ACTION_ARGS() + .Name( "common.Control.showLibraryFieldsTable" ) .Scope( AS_GLOBAL ) - .FriendlyName( _( "Library Table" ) ) + .FriendlyName( _( "Library Fields Table" ) ) .Icon( BITMAPS::table ) ); -TOOL_ACTION ACTIONS::showRelatedLibraryTable( TOOL_ACTION_ARGS() - .Name( "common.Control.showRelatedLibraryTable" ) +TOOL_ACTION ACTIONS::showRelatedLibraryFieldsTable( TOOL_ACTION_ARGS() + .Name( "common.Control.showRelatedLibraryFieldsTable" ) .Scope( AS_GLOBAL ) - .FriendlyName( _( "Edit Related Symbols as Table" ) ) - .Tooltip( _( "Edit all symbols related to the selected symbol in a table" ) ) + .FriendlyName( _( "Library Fields Table of Related Symbols" ) ) + .Tooltip( _( "Edit a table of fields of all symbols related to the selected symbol" ) ) .Icon( BITMAPS::table ) ); TOOL_ACTION ACTIONS::showLibraryTree( TOOL_ACTION_ARGS() diff --git a/eeschema/CMakeLists.txt b/eeschema/CMakeLists.txt index faa0e2a809..7f20fdd11f 100644 --- a/eeschema/CMakeLists.txt +++ b/eeschema/CMakeLists.txt @@ -122,8 +122,8 @@ set( EESCHEMA_DLGS dialogs/dialog_label_properties_base.cpp dialogs/dialog_lib_edit_pin_table.cpp dialogs/dialog_lib_edit_pin_table_base.cpp - dialogs/dialog_lib_fields_base.cpp - dialogs/dialog_lib_fields.cpp + dialogs/dialog_lib_fields_table_base.cpp + dialogs/dialog_lib_fields_table.cpp dialogs/dialog_lib_new_symbol.cpp dialogs/dialog_lib_new_symbol_base.cpp dialogs/dialog_lib_symbol_properties.cpp diff --git a/eeschema/dialogs/dialog_lib_fields.cpp b/eeschema/dialogs/dialog_lib_fields_table.cpp similarity index 60% rename from eeschema/dialogs/dialog_lib_fields.cpp rename to eeschema/dialogs/dialog_lib_fields_table.cpp index d033176e6e..924f35ccda 100644 --- a/eeschema/dialogs/dialog_lib_fields.cpp +++ b/eeschema/dialogs/dialog_lib_fields_table.cpp @@ -17,7 +17,7 @@ * with this program. If not, see . */ -#include +#include #include #include @@ -40,7 +40,7 @@ #include #include #include - +#include #include #include #include @@ -57,6 +57,24 @@ using DIALOG_NEW_SYMBOL = DIALOG_LIB_NEW_SYMBOL; #endif +class VIEW_CONTROLS_GRID_TRICKS : public GRID_TRICKS +{ +public: + VIEW_CONTROLS_GRID_TRICKS( WX_GRID* aGrid ) : + GRID_TRICKS( aGrid ) + {} + +protected: + void doPopupSelection( wxCommandEvent& event ) override + { + if( event.GetId() >= GRIDTRICKS_FIRST_SHOWHIDE ) + m_grid->PostSizeEvent(); + + GRID_TRICKS::doPopupSelection( event ); + } +}; + + enum { MYID_SELECT_FOOTPRINT = GRIDTRICKS_FIRST_CLIENT_ID, @@ -65,16 +83,17 @@ enum MYID_CLEAR_CELL, MYID_CREATE_DERIVED_SYMBOL }; + + class LIB_FIELDS_EDITOR_GRID_TRICKS : public GRID_TRICKS { public: - LIB_FIELDS_EDITOR_GRID_TRICKS( DIALOG_SHIM* aParent, - WX_GRID* aGrid, - wxDataViewListCtrl* aFieldsCtrl, + LIB_FIELDS_EDITOR_GRID_TRICKS( DIALOG_LIB_FIELDS_TABLE* aParent, WX_GRID* aGrid, + VIEW_CONTROLS_GRID_DATA_MODEL* aViewFieldsData, LIB_FIELDS_EDITOR_GRID_DATA_MODEL* aDataModel ) : GRID_TRICKS( aGrid ), m_dlg( aParent ), - m_fieldsCtrl( aFieldsCtrl ), + m_viewControlsDataModel( aViewFieldsData ), m_dataModel( aDataModel ) {} @@ -106,14 +125,12 @@ protected: if( m_dataModel->GetColFieldName( col ) == GetCanonicalFieldName( FIELD_T::FOOTPRINT ) ) { - menu.Append( MYID_SELECT_FOOTPRINT, _( "Select Footprint..." ), - _( "Browse for footprint" ) ); + menu.Append( MYID_SELECT_FOOTPRINT, _( "Select Footprint..." ), _( "Browse for footprint" ) ); menu.AppendSeparator(); } else if( m_dataModel->GetColFieldName( col ) == GetCanonicalFieldName( FIELD_T::DATASHEET ) ) { - menu.Append( MYID_SHOW_DATASHEET, _( "Show Datasheet" ), - _( "Show datasheet in browser" ) ); + menu.Append( MYID_SHOW_DATASHEET, _( "Show Datasheet" ), _( "Show datasheet in browser" ) ); menu.AppendSeparator(); } @@ -156,10 +173,11 @@ protected: wxArrayString symbolNames; m_dataModel->GetSymbolNames( symbolNames ); - auto validator = [&]( wxString newName ) -> bool - { - return symbolNames.Index( newName ) == wxNOT_FOUND; - }; + auto validator = + [&]( wxString newName ) -> bool + { + return symbolNames.Index( newName ) == wxNOT_FOUND; + }; EDA_DRAW_FRAME* frame = dynamic_cast( m_dlg->GetParent() ); DIALOG_NEW_SYMBOL dlg( frame, symbolNames, parentSymbol->GetName(), validator ); @@ -181,8 +199,7 @@ protected: // pick a footprint using the footprint picker. wxString fpid = m_grid->GetCellValue( row, col ); - if( KIWAY_PLAYER* frame = m_dlg->Kiway().Player( FRAME_FOOTPRINT_CHOOSER, true, - m_dlg ) ) + if( KIWAY_PLAYER* frame = m_dlg->Kiway().Player( FRAME_FOOTPRINT_CHOOSER, true, m_dlg ) ) { if( frame->ShowModal( &fpid, m_dlg ) ) m_grid->SetCellValue( row, col, fpid ); @@ -193,127 +210,89 @@ protected: else if (event.GetId() == MYID_SHOW_DATASHEET ) { wxString datasheet_uri = m_grid->GetCellValue( row, col ); - GetAssociatedDocument( m_dlg, datasheet_uri, &m_dlg->Prj(), - PROJECT_SCH::SchSearchS( &m_dlg->Prj() ) ); + GetAssociatedDocument( m_dlg, datasheet_uri, &m_dlg->Prj(), PROJECT_SCH::SchSearchS( &m_dlg->Prj() ) ); + } + else if( event.GetId() >= GRIDTRICKS_FIRST_SHOWHIDE ) + { + if( !m_grid->CommitPendingChanges( false ) ) + return; + + // Pop-up column order is the order of the shown fields, not the viewControls order + col = event.GetId() - GRIDTRICKS_FIRST_SHOWHIDE; + + bool show = !m_dataModel->GetShowColumn( col ); + + m_dlg->ShowHideColumn( col, show ); + + wxString fieldName = m_dataModel->GetColFieldName( col ); + + for( row = 0; row < m_viewControlsDataModel->GetNumberRows(); row++ ) + { + if( m_viewControlsDataModel->GetCanonicalFieldName( row ) == fieldName ) + m_viewControlsDataModel->SetValueAsBool( row, SHOW_FIELD_COLUMN, show ); + } + + if( m_viewControlsDataModel->GetView() ) + m_viewControlsDataModel->GetView()->ForceRefresh(); } else { - // We have grid tricks events to show/hide the columns from the popup menu - // and we need to make sure the data model is updated to match the grid, - // so do it through our code instead - if( event.GetId() >= GRIDTRICKS_FIRST_SHOWHIDE ) - { - // Pop-up column order is the order of the shown fields, not the - // fieldsCtrl order - col = event.GetId() - GRIDTRICKS_FIRST_SHOWHIDE; - - bool show = !m_dataModel->GetShowColumn( col ); - - // Convert data model column to by iterating over m_fieldsCtrl rows - // and finding the matching field name - wxString fieldName = m_dataModel->GetColFieldName( col ); - - for( row = 0; row < m_fieldsCtrl->GetItemCount(); row++ ) - { - if( m_fieldsCtrl->GetTextValue( row, FIELD_NAME_COLUMN ) == fieldName ) - { - if( m_grid->CommitPendingChanges( false ) ) - m_fieldsCtrl->SetToggleValue( show, row, SHOW_FIELD_COLUMN ); - - break; - } - } - } - else - { - GRID_TRICKS::doPopupSelection( event ); - } + GRID_TRICKS::doPopupSelection( event ); } } - DIALOG_SHIM* m_dlg; - wxDataViewListCtrl* m_fieldsCtrl; + DIALOG_LIB_FIELDS_TABLE* m_dlg; + VIEW_CONTROLS_GRID_DATA_MODEL* m_viewControlsDataModel; LIB_FIELDS_EDITOR_GRID_DATA_MODEL* m_dataModel; }; -DIALOG_LIB_FIELDS::DIALOG_LIB_FIELDS( SYMBOL_EDIT_FRAME* parent, wxString libId, const wxArrayString& aSymbolNames ) : - DIALOG_LIB_FIELDS_BASE( parent, wxID_ANY, wxString::Format( _( "Symbol Library Fields: %s" ), libId ) ), - m_libId( libId ), - m_parent( parent ) +DIALOG_LIB_FIELDS_TABLE::DIALOG_LIB_FIELDS_TABLE( SYMBOL_EDIT_FRAME* parent, DIALOG_LIB_FIELDS_TABLE::SCOPE aScope ) : + DIALOG_LIB_FIELDS_TABLE_BASE( parent, wxID_ANY ), + m_parent( parent ), + m_scope( aScope ), + m_viewControlsDataModel( nullptr ), + m_dataModel( nullptr ) { - // Get all symbols from the library - loadSymbols( aSymbolNames ); - m_bRefresh->SetBitmap( KiBitmapBundle( BITMAPS::small_refresh ) ); m_addFieldButton->SetBitmap( KiBitmapBundle( BITMAPS::small_plus ) ); m_removeFieldButton->SetBitmap( KiBitmapBundle( BITMAPS::small_trash ) ); m_renameFieldButton->SetBitmap( KiBitmapBundle( BITMAPS::small_edit ) ); - m_removeFieldButton->Enable( false ); - m_renameFieldButton->Enable( false ); + m_viewControlsDataModel = new VIEW_CONTROLS_GRID_DATA_MODEL( false ); - m_fieldsCtrl->AppendTextColumn( _( "Field" ), wxDATAVIEW_CELL_INERT, 0, wxALIGN_LEFT, wxCOL_HIDDEN ); - m_fieldsCtrl->AppendTextColumn( _( "Label" ), wxDATAVIEW_CELL_EDITABLE, 0, wxALIGN_LEFT, 0 ); - m_fieldsCtrl->AppendToggleColumn( _( "Show" ), wxDATAVIEW_CELL_ACTIVATABLE, 0, - wxALIGN_CENTER, 0 ); - m_fieldsCtrl->AppendToggleColumn( _( "Group By" ), wxDATAVIEW_CELL_ACTIVATABLE, 0, - wxALIGN_CENTER, 0 ); + m_viewControlsGrid->UseNativeColHeader( true ); + m_viewControlsGrid->SetTable( m_viewControlsDataModel, true ); - // GTK asserts if the number of columns doesn't match the data, but we still don't want - // to display the canonical names. So we'll insert a column for them, but keep it 0 width. - m_fieldsCtrl->AppendTextColumn( _( "Name" ), wxDATAVIEW_CELL_INERT, 0, wxALIGN_LEFT, 0 ); + // must be done after SetTable(), which appears to re-set it + m_viewControlsGrid->SetSelectionMode( wxGrid::wxGridSelectCells ); - // SetWidth( wxCOL_WIDTH_AUTOSIZE ) fails here on GTK, so we calculate the title sizes and - // set the column widths ourselves. - wxDataViewColumn* column = m_fieldsCtrl->GetColumn( SHOW_FIELD_COLUMN ); - m_showColWidth = KIUI::GetTextSize( column->GetTitle(), m_fieldsCtrl ).x + COLUMN_MARGIN; - column->SetMinWidth( m_showColWidth ); + // add Cut, Copy, and Paste to wxGrid + m_viewControlsGrid->PushEventHandler( new VIEW_CONTROLS_GRID_TRICKS( m_viewControlsGrid ) ); - column = m_fieldsCtrl->GetColumn( GROUP_BY_COLUMN ); - m_groupByColWidth = KIUI::GetTextSize( column->GetTitle(), m_fieldsCtrl ).x + COLUMN_MARGIN; - column->SetMinWidth( m_groupByColWidth ); + wxGridCellAttr* attr = new wxGridCellAttr; + attr->SetReadOnly( true ); + m_viewControlsDataModel->SetColAttr( attr, DISPLAY_NAME_COLUMN ); - // The fact that we're a list should keep the control from reserving space for the - // expander buttons... but it doesn't. Fix by forcing the indent to 0. - m_fieldsCtrl->SetIndent( 0 ); + attr = new wxGridCellAttr; + attr->SetRenderer( new wxGridCellBoolRenderer() ); + attr->SetReadOnly(); // not really; we delegate interactivity to GRID_TRICKS + attr->SetAlignment( wxALIGN_CENTER, wxALIGN_CENTER ); + m_viewControlsDataModel->SetColAttr( attr, SHOW_FIELD_COLUMN ); + + attr = new wxGridCellAttr; + attr->SetRenderer( new wxGridCellBoolRenderer() ); + attr->SetReadOnly(); // not really; we delegate interactivity to GRID_TRICKS + attr->SetAlignment( wxALIGN_CENTER, wxALIGN_CENTER ); + m_viewControlsDataModel->SetColAttr( attr, GROUP_BY_COLUMN ); + + // Compress the view controls grid. (We want it to look different from the fields grid.) + m_viewControlsGrid->SetDefaultRowSize( m_viewControlsGrid->GetDefaultRowSize() - FromDIP( 4 ) ); m_filter->SetDescriptiveText( _( "Filter" ) ); - wxGridCellAttr* attr = new wxGridCellAttr; - attr->SetEditor( new GRID_CELL_URL_EDITOR( this, PROJECT_SCH::SchSearchS( &Prj() ) ) ); - m_dataModel = new LIB_FIELDS_EDITOR_GRID_DATA_MODEL( m_symbolsList ); - - // Now that the fields are loaded we can set the initial location of the splitter - // based on the list width. Again, SetWidth( wxCOL_WIDTH_AUTOSIZE ) fails us on GTK. - m_fieldNameColWidth = 0; - m_labelColWidth = 0; - - int colWidth = 0; - - for( int row = 0; row < m_fieldsCtrl->GetItemCount(); ++row ) - { - const wxString& displayName = m_fieldsCtrl->GetTextValue( row, DISPLAY_NAME_COLUMN ); - colWidth = std::max( colWidth, KIUI::GetTextSize( displayName, m_fieldsCtrl ).x ); - - const wxString& label = m_fieldsCtrl->GetTextValue( row, LABEL_COLUMN ); - colWidth = std::max( colWidth, KIUI::GetTextSize( label, m_fieldsCtrl ).x ); - } - - m_fieldNameColWidth = colWidth + 20; - m_labelColWidth = colWidth + 20; - - int fieldsMinWidth = m_fieldNameColWidth + m_labelColWidth + m_groupByColWidth + m_showColWidth; - - m_fieldsCtrl->GetColumn( DISPLAY_NAME_COLUMN )->SetWidth( m_fieldNameColWidth ); - m_fieldsCtrl->GetColumn( LABEL_COLUMN )->SetWidth( m_labelColWidth ); - - // This is used for data only. Don't show it to the user. - m_fieldsCtrl->GetColumn( FIELD_NAME_COLUMN )->SetHidden( true ); - - m_splitterMainWindow->SetMinimumPaneSize( fieldsMinWidth ); - m_splitterMainWindow->SetSashPosition( fieldsMinWidth + 40 ); + m_dataModel = new LIB_FIELDS_EDITOR_GRID_DATA_MODEL(); m_grid->UseNativeColHeader( true ); m_grid->SetTable( m_dataModel, true ); @@ -322,12 +301,8 @@ DIALOG_LIB_FIELDS::DIALOG_LIB_FIELDS( SYMBOL_EDIT_FRAME* parent, wxString libId, m_grid->SetSelectionMode( wxGrid::wxGridSelectCells ); // add Cut, Copy, and Paste to wxGrid - m_grid->PushEventHandler( new LIB_FIELDS_EDITOR_GRID_TRICKS( this, m_grid, m_fieldsCtrl, - m_dataModel ) ); - - // give a bit more room for comboboxes - m_grid->SetDefaultRowSize( m_grid->GetDefaultRowSize() + 4 ); - + m_grid->PushEventHandler( new LIB_FIELDS_EDITOR_GRID_TRICKS( this, m_grid, m_viewControlsDataModel, + m_dataModel ) ); SetInitialFocus( m_grid ); m_grid->ClearSelection(); @@ -338,75 +313,221 @@ DIALOG_LIB_FIELDS::DIALOG_LIB_FIELDS( SYMBOL_EDIT_FRAME* parent, wxString libId, SetSize( wxSize( horizPixelsFromDU( 600 ), vertPixelsFromDU( 300 ) ) ); + SYMBOL_EDITOR_SETTINGS::PANEL_LIB_FIELDS_TABLE& cfg = m_parent->libeditconfig()->m_LibFieldEditor; + + m_viewControlsGrid->ShowHideColumns( cfg.view_controls_visible_columns ); + + CallAfter( [this, cfg]() + { + m_splitterMainWindow->SetSashPosition( cfg.sash_pos ); + } ); + Center(); // Connect Events - m_grid->Bind( wxEVT_GRID_COL_SORT, &DIALOG_LIB_FIELDS::OnColSort, this ); - m_grid->Bind( wxEVT_GRID_COL_MOVE, &DIALOG_LIB_FIELDS::OnColMove, this ); - m_grid->Bind( wxEVT_GRID_CELL_LEFT_CLICK, &DIALOG_LIB_FIELDS::OnTableCellClick, this ); - m_fieldsCtrl->Bind( wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, &DIALOG_LIB_FIELDS::OnColLabelChange, this ); - - OnInit(); + m_grid->Bind( wxEVT_GRID_COL_SORT, &DIALOG_LIB_FIELDS_TABLE::OnColSort, this ); + m_grid->Bind( wxEVT_GRID_COL_MOVE, &DIALOG_LIB_FIELDS_TABLE::OnColMove, this ); + m_grid->Bind( wxEVT_GRID_CELL_LEFT_CLICK, &DIALOG_LIB_FIELDS_TABLE::OnTableCellClick, this ); + m_viewControlsGrid->Bind( wxEVT_GRID_CELL_CHANGED, &DIALOG_LIB_FIELDS_TABLE::OnViewControlsCellChanged, this ); } -DIALOG_LIB_FIELDS::~DIALOG_LIB_FIELDS() +DIALOG_LIB_FIELDS_TABLE::~DIALOG_LIB_FIELDS_TABLE() { - // Disconnect Events - m_grid->Unbind( wxEVT_GRID_COL_SORT, &DIALOG_LIB_FIELDS::OnColSort, this ); - m_grid->Unbind( wxEVT_GRID_COL_MOVE, &DIALOG_LIB_FIELDS::OnColMove, this ); - m_grid->Unbind( wxEVT_GRID_CELL_LEFT_CLICK, &DIALOG_LIB_FIELDS::OnTableCellClick, this ); - m_fieldsCtrl->Unbind( wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, &DIALOG_LIB_FIELDS::OnColLabelChange, this ); + SYMBOL_EDITOR_SETTINGS::PANEL_LIB_FIELDS_TABLE& cfg = m_parent->libeditconfig()->m_LibFieldEditor; - // Delete the GRID_TRICKS. - m_grid->PopEventHandler( true ); -} + cfg.view_controls_visible_columns = m_viewControlsGrid->GetShownColumnsAsString(); + cfg.sash_pos = m_splitterMainWindow->GetSashPosition(); -void DIALOG_LIB_FIELDS::OnInit() -{ - // Update the field list and refresh the grid - UpdateFieldList(); - - int colWidth = 0; - - for( int row = 0; row < m_fieldsCtrl->GetItemCount(); ++row ) + for( int i = 0; i < m_grid->GetNumberCols(); i++ ) { - const wxString& displayName = m_fieldsCtrl->GetTextValue( row, DISPLAY_NAME_COLUMN ); - colWidth = std::max( colWidth, KIUI::GetTextSize( displayName, m_fieldsCtrl ).x ); - - const wxString& label = m_fieldsCtrl->GetTextValue( row, LABEL_COLUMN ); - colWidth = std::max( colWidth, KIUI::GetTextSize( label, m_fieldsCtrl ).x ); + if( m_grid->IsColShown( i ) ) + { + std::string fieldName( m_dataModel->GetColFieldName( i ).ToUTF8() ); + cfg.field_widths[fieldName] = m_grid->GetColSize( i ); + } } - m_fieldNameColWidth = colWidth + 20; - m_labelColWidth = colWidth + 20; + // Disconnect Events + m_grid->Unbind( wxEVT_GRID_COL_SORT, &DIALOG_LIB_FIELDS_TABLE::OnColSort, this ); + m_grid->Unbind( wxEVT_GRID_COL_MOVE, &DIALOG_LIB_FIELDS_TABLE::OnColMove, this ); + m_grid->Unbind( wxEVT_GRID_CELL_LEFT_CLICK, &DIALOG_LIB_FIELDS_TABLE::OnTableCellClick, this ); + m_viewControlsGrid->Unbind( wxEVT_GRID_CELL_CHANGED, &DIALOG_LIB_FIELDS_TABLE::OnViewControlsCellChanged, this ); - int fieldsMinWidth = m_fieldNameColWidth + m_labelColWidth + m_groupByColWidth + m_showColWidth; + // Delete the GRID_TRICKS. + m_viewControlsGrid->PopEventHandler( true ); + m_grid->PopEventHandler( true ); - m_fieldsCtrl->GetColumn( DISPLAY_NAME_COLUMN )->SetWidth( m_fieldNameColWidth ); - m_fieldsCtrl->GetColumn( LABEL_COLUMN )->SetWidth( m_labelColWidth ); - - m_splitterMainWindow->SetMinimumPaneSize( fieldsMinWidth ); - m_splitterMainWindow->SetSashPosition( fieldsMinWidth + 40 ); - - SetupAllColumnProperties(); - RegroupSymbols(); + // we gave ownership of m_viewControlsDataModel & m_dataModel to the wxGrids... } -void DIALOG_LIB_FIELDS::loadSymbols( const wxArrayString& aSymbolNames ) +void DIALOG_LIB_FIELDS_TABLE::SetupColumnProperties( int aCol ) +{ + wxGridCellAttr* attr = new wxGridCellAttr; + attr->SetReadOnly( false ); + + // Set some column types to specific editors + if( m_dataModel->GetColFieldName( aCol ) == GetCanonicalFieldName( FIELD_T::FOOTPRINT ) ) + { + // Create symbol netlist for footprint picker + wxString symbolNetlist; + + if( !m_symbolsList.empty() ) + { + // Use the first symbol's netlist (all symbols in lib should have similar pin structure) + LIB_SYMBOL* symbol = m_symbolsList[0]; + wxArrayString pins; + + for( SCH_PIN* pin : symbol->GetPins( 0 /* all units */, 1 /* single bodyStyle */ ) ) + pins.push_back( pin->GetNumber() + ' ' + pin->GetShownName() ); + + if( !pins.IsEmpty() ) + symbolNetlist << EscapeString( wxJoin( pins, '\t' ), CTX_LINE ); + + symbolNetlist << wxS( "\r" ); + + wxArrayString fpFilters = symbol->GetFPFilters(); + if( !fpFilters.IsEmpty() ) + symbolNetlist << EscapeString( wxJoin( fpFilters, ' ' ), CTX_LINE ); + + symbolNetlist << wxS( "\r" ); + } + + attr->SetEditor( new GRID_CELL_FPID_EDITOR( this, symbolNetlist ) ); + m_dataModel->SetColAttr( attr, aCol ); + } + else if( m_dataModel->GetColFieldName( aCol ) == GetCanonicalFieldName( FIELD_T::DATASHEET ) ) + { + // set datasheet column viewer button + attr->SetEditor( new GRID_CELL_URL_EDITOR( this, PROJECT_SCH::SchSearchS( &Prj() ) ) ); + m_dataModel->SetColAttr( attr, aCol ); + } + else if( m_dataModel->ColIsCheck( aCol ) ) + { + attr->SetAlignment( wxALIGN_CENTER, wxALIGN_CENTER ); + attr->SetRenderer( new GRID_CELL_CHECKBOX_RENDERER() ); + m_dataModel->SetColAttr( attr, aCol ); + } + else if( IsGeneratedField( m_dataModel->GetColFieldName( aCol ) ) ) + { + attr->SetReadOnly(); + m_dataModel->SetColAttr( attr, aCol ); + } + else + { + attr->SetEditor( m_grid->GetDefaultEditor() ); + m_dataModel->SetColAttr( attr, aCol ); + } +} + + +void DIALOG_LIB_FIELDS_TABLE::SetupAllColumnProperties() +{ + SYMBOL_EDITOR_SETTINGS* cfg = m_parent->GetSettings(); + wxSize defaultDlgSize = ConvertDialogToPixels( wxSize( 600, 300 ) ); + + // Restore column sorting order and widths + m_grid->AutoSizeColumns( false ); + int sortCol = 0; + bool sortAscending = true; + + // Find the VALUE column for initial sorting + int valueCol = m_dataModel->GetFieldNameCol( GetCanonicalFieldName( FIELD_T::VALUE ) ); + + // Set initial sort to VALUE field (ascending) if no previous sort preference exists + if( m_dataModel->GetSortCol() == 0 && valueCol != -1 ) + { + sortCol = valueCol; + sortAscending = true; + m_dataModel->SetSorting( sortCol, sortAscending ); + } + + for( int col = 0; col < m_grid->GetNumberCols(); ++col ) + { + SetupColumnProperties( col ); + + if( col == m_dataModel->GetSortCol() ) + { + sortCol = col; + sortAscending = m_dataModel->GetSortAsc(); + } + } + + // sync m_grid's column visibilities to Show checkboxes in m_viewControlsGrid + for( int i = 0; i < m_viewControlsDataModel->GetNumberRows(); ++i ) + { + int col = m_dataModel->GetFieldNameCol( m_viewControlsDataModel->GetCanonicalFieldName( i ) ); + + if( col == -1 ) + continue; + + bool show = m_viewControlsDataModel->GetValueAsBool( i, SHOW_FIELD_COLUMN ); + m_dataModel->SetShowColumn( col, show ); + + if( show ) + { + m_grid->ShowCol( col ); + + std::string key( m_dataModel->GetColFieldName( col ).ToUTF8() ); + + if( cfg->m_LibFieldEditor.field_widths.count( key ) + && ( cfg->m_LibFieldEditor.field_widths.at( key ) > 0 ) ) + { + m_grid->SetColSize( col, cfg->m_LibFieldEditor.field_widths.at( key ) ); + } + else + { + int textWidth = m_dataModel->GetDataWidth( col ) + COLUMN_MARGIN; + int maxWidth = defaultDlgSize.x / 3; + + m_grid->SetColSize( col, std::clamp( textWidth, 100, maxWidth ) ); + } + } + else + { + m_grid->HideCol( col ); + } + } + + m_dataModel->SetSorting( sortCol, sortAscending ); + m_grid->SetSortingColumn( sortCol, sortAscending ); +} + + +bool DIALOG_LIB_FIELDS_TABLE::TransferDataToWindow() +{ + switch( m_scope ) + { + case SCOPE::SCOPE_LIBRARY: m_choiceScope->SetSelection( 0 ); break; + case SCOPE::SCOPE_RELATED_SYMBOLS: m_choiceScope->SetSelection( 1 ); break; + } + + setScope( m_scope ); + + return true; +} + + +void DIALOG_LIB_FIELDS_TABLE::loadSymbols( const wxArrayString& aSymbolNames ) { // Clear any existing data m_symbolsList.clear(); + wxString libName = m_parent->GetTreeLIBID().GetLibNickname(); + + if( aSymbolNames.IsEmpty() ) + { + if( m_scope == SCOPE_RELATED_SYMBOLS ) + wxMessageBox( wxString::Format( _( "No related symbols found in library '%s'." ), libName ) ); + else + wxMessageBox( wxString::Format( _( "No symbols found in library '%s'." ), libName ) ); + + return; + } + try { - if( aSymbolNames.IsEmpty() ) - { - wxMessageBox( wxString::Format( _( "No symbols found in library %s." ), m_libId ) ); - return; - } - // Load each symbol from the library manager and add it to our list for( const wxString& symbolName : aSymbolNames ) { @@ -414,7 +535,7 @@ void DIALOG_LIB_FIELDS::loadSymbols( const wxArrayString& aSymbolNames ) try { - symbol = m_parent->GetLibManager().GetSymbol( symbolName, m_libId ); + symbol = m_parent->GetLibManager().GetSymbol( symbolName, libName ); if( symbol ) m_symbolsList.push_back( symbol ); @@ -422,61 +543,31 @@ void DIALOG_LIB_FIELDS::loadSymbols( const wxArrayString& aSymbolNames ) catch( const IO_ERROR& ioe ) { // Log the error and continue - wxLogWarning( wxString::Format( _( "Error loading symbol %s: %s" ), symbolName, ioe.What() ) ); + wxLogWarning( wxString::Format( _( "Error loading symbol '%s': %s" ), symbolName, ioe.What() ) ); } } } catch( const IO_ERROR& ioe ) { - wxString msg = wxString::Format( _( "Error accessing library %s.\n\n%s" ), m_libId, ioe.What() ); - DisplayErrorMessage( this, msg ); + DisplayErrorMessage( this, wxString::Format( _( "Error accessing library '%s'.\n\n%s" ), + libName, + ioe.What() ) ); return; } if( m_symbolsList.empty() ) { - wxMessageBox( _( "No symbols could be loaded from the library." ) ); - return; + if( m_scope == SCOPE_RELATED_SYMBOLS ) + wxMessageBox( _( "No related symbols could be loaded from the library." ) ); + else + wxMessageBox( _( "No symbols could be loaded from the library." ) ); } + + m_dataModel->SetSymbols( m_symbolsList ); } -void DIALOG_LIB_FIELDS::OnClose(wxCloseEvent& aEvent) -{ - // This is a cancel, so commit quietly as we're going to throw the results away anyway. - m_grid->CommitPendingChanges( true ); - if( m_dataModel->IsEdited() ) - { - if( !HandleUnsavedChanges( this, _( "Save changes?" ), - [&]() -> bool - { - return TransferDataFromWindow(); - } ) ) - { - aEvent.Veto(); - return; - } - } - - // Save all our settings since we're really closing - SYMBOL_EDITOR_SETTINGS* cfg = m_parent->GetSettings(); - - cfg->m_LibFieldEditor.width = GetSize().x; - cfg->m_LibFieldEditor.height = GetSize().y; - - for( int i = 0; i < m_grid->GetNumberCols(); i++ ) - { - if( m_grid->IsColShown( i ) ) - { - std::string fieldName( m_dataModel->GetColFieldName( i ).ToUTF8() ); - cfg->m_LibFieldEditor.field_widths[fieldName] = m_grid->GetColSize( i ); - } - } - - aEvent.Skip(); -} - -bool DIALOG_LIB_FIELDS::TransferDataFromWindow() +bool DIALOG_LIB_FIELDS_TABLE::TransferDataFromWindow() { if( !m_grid->CommitPendingChanges() ) return false; @@ -554,117 +645,8 @@ bool DIALOG_LIB_FIELDS::TransferDataFromWindow() return true; } -void DIALOG_LIB_FIELDS::OnColumnItemToggled(wxDataViewEvent& event) -{ - wxDataViewItem item = event.GetItem(); - int row = m_fieldsCtrl->ItemToRow( item ); - int col = event.GetColumn(); - switch ( col ) - { - case SHOW_FIELD_COLUMN: - { - wxString name = m_fieldsCtrl->GetTextValue( row, FIELD_NAME_COLUMN ); - bool value = m_fieldsCtrl->GetToggleValue( row, col ); - int dataCol = m_dataModel->GetFieldNameCol( name ); - - m_dataModel->SetShowColumn( dataCol, value ); - - if( dataCol != -1 ) - { - if( value ) - m_grid->ShowCol( dataCol ); - else - m_grid->HideCol( dataCol ); - } - - break; - } - - case GROUP_BY_COLUMN: - { - m_dataModel->SetGroupingEnabled( false ); - // Check if any columns are grouped. We don't keep a separate UI state for this - // so check all rows anytime we change a grouping column. - - for( int i = 0; i < m_fieldsCtrl->GetItemCount(); ++i ) - { - if( m_fieldsCtrl->GetToggleValue( i, GROUP_BY_COLUMN ) ) - { - m_dataModel->SetGroupingEnabled( true ); - break; - } - } - - wxString name = m_fieldsCtrl->GetTextValue( row, FIELD_NAME_COLUMN ); - bool value = m_fieldsCtrl->GetToggleValue( row, GROUP_BY_COLUMN ); - - wxString fieldName = m_fieldsCtrl->GetTextValue( row, FIELD_NAME_COLUMN ); - - m_dataModel->SetGroupColumn( m_dataModel->GetFieldNameCol( fieldName ), value ); - RegroupSymbols(); - break; - } - - default: - break; - } -} - -void DIALOG_LIB_FIELDS::OnFieldsCtrlSelectionChanged(wxDataViewEvent& event) -{ - // Enable/disable Rename/Remove buttons based on selection - int row = m_fieldsCtrl->GetSelectedRow(); - bool enable = ( row != -1 ); // Basic check, could add mandatory field check later - - // Check if the selected field is mandatory (cannot be removed/renamed) - if( enable ) - { - wxString fieldName = m_fieldsCtrl->GetTextValue( row, FIELD_NAME_COLUMN ); - if( fieldName == GetCanonicalFieldName( FIELD_T::REFERENCE ) || - fieldName == GetCanonicalFieldName( FIELD_T::VALUE ) || - fieldName == GetCanonicalFieldName( FIELD_T::FOOTPRINT ) || - fieldName == GetCanonicalFieldName( FIELD_T::DATASHEET ) ) - { - enable = false; - } - } - - m_removeFieldButton->Enable( enable ); - m_renameFieldButton->Enable( enable ); - - event.Skip(); // Allow default processing -} - -void DIALOG_LIB_FIELDS::OnSizeFieldList(wxSizeEvent& event) -{ - int width = KIPLATFORM::UI::GetUnobscuredSize( m_fieldsCtrl ).x - - m_showColWidth - - m_groupByColWidth; -#ifdef __WXMAC__ - // TODO: something in wxWidgets 3.1.x pads checkbox columns with extra space. (It used to - // also be that the width of the column would get set too wide (to 30), but that's patched in - // our local wxWidgets fork.) - width -= 50; -#endif - - m_fieldNameColWidth = width / 2; - m_labelColWidth = width = m_fieldNameColWidth; - - // GTK loses its head and messes these up when resizing the splitter bar: - m_fieldsCtrl->GetColumn( SHOW_FIELD_COLUMN )->SetWidth( m_showColWidth ); - m_fieldsCtrl->GetColumn( GROUP_BY_COLUMN )->SetWidth( m_groupByColWidth ); - - m_fieldsCtrl->GetColumn( FIELD_NAME_COLUMN )->SetHidden( true ); - m_fieldsCtrl->GetColumn( DISPLAY_NAME_COLUMN )->SetWidth( m_fieldNameColWidth ); - m_fieldsCtrl->GetColumn( LABEL_COLUMN )->SetWidth( m_labelColWidth ); - - m_fieldsCtrl->Refresh(); // To refresh checkboxes on Windows. - - event.Skip(); -} - -void DIALOG_LIB_FIELDS::OnAddField(wxCommandEvent& event) +void DIALOG_LIB_FIELDS_TABLE::OnAddField(wxCommandEvent& event) { wxTextEntryDialog dlg( this, _( "New field name:" ), _( "Add Field" ) ); @@ -683,8 +665,7 @@ void DIALOG_LIB_FIELDS::OnAddField(wxCommandEvent& event) { if( fieldName == m_dataModel->GetColFieldName( i ) ) { - DisplayError( this, wxString::Format( _( "Field name '%s' already in use." ), - fieldName ) ); + DisplayError( this, wxString::Format( _( "Field name '%s' already in use." ), fieldName ) ); return; } } @@ -696,17 +677,40 @@ void DIALOG_LIB_FIELDS::OnAddField(wxCommandEvent& event) OnModify(); } -void DIALOG_LIB_FIELDS::OnRenameField(wxCommandEvent& event) + +void DIALOG_LIB_FIELDS_TABLE::OnRemoveField(wxCommandEvent& event) { - int row = m_fieldsCtrl->GetSelectedRow(); + m_viewControlsGrid->OnDeleteRows( + [&]( int row ) + { + return IsOK( this, wxString::Format( _( "Are you sure you want to remove the field '%s'?" ), + m_viewControlsDataModel->GetValue( row, DISPLAY_NAME_COLUMN ) ) ); + }, + [&]( int row ) + { + wxString fieldName = m_viewControlsDataModel->GetCanonicalFieldName( row ); - if( row == -1 ) - { - wxBell(); + RemoveField( fieldName ); + + m_viewControlsDataModel->DeleteRow( row ); + OnModify(); + } ); +} + + +void DIALOG_LIB_FIELDS_TABLE::OnRenameField(wxCommandEvent& event) +{ + wxArrayInt selectedRows = m_viewControlsGrid->GetSelectedRows(); + + if( selectedRows.empty() && m_viewControlsGrid->GetGridCursorRow() >= 0 ) + selectedRows.push_back( m_viewControlsGrid->GetGridCursorRow() ); + + if( selectedRows.empty() ) return; - } - wxString fieldName = m_fieldsCtrl->GetTextValue( row, FIELD_NAME_COLUMN ); + int row = selectedRows[0]; + + wxString fieldName = m_viewControlsDataModel->GetCanonicalFieldName( row ); int col = m_dataModel->GetFieldNameCol( fieldName ); wxCHECK_RET( col != -1, wxS( "Existing field name missing from data model" ) ); @@ -729,49 +733,23 @@ void DIALOG_LIB_FIELDS::OnRenameField(wxCommandEvent& event) RenameField( fieldName, newFieldName ); - m_fieldsCtrl->SetTextValue( newFieldName, row, DISPLAY_NAME_COLUMN ); - m_fieldsCtrl->SetTextValue( newFieldName, row, FIELD_NAME_COLUMN ); - m_fieldsCtrl->SetTextValue( newFieldName, row, LABEL_COLUMN ); + m_viewControlsDataModel->SetCanonicalFieldName( row, newFieldName ); + m_viewControlsDataModel->SetValue( row, DISPLAY_NAME_COLUMN, newFieldName ); + m_viewControlsDataModel->SetValue( row, LABEL_COLUMN, GetGeneratedFieldDisplayName( newFieldName ) ); SetupColumnProperties( col ); OnModify(); } -void DIALOG_LIB_FIELDS::OnRemoveField(wxCommandEvent& event) + +void DIALOG_LIB_FIELDS_TABLE::OnFilterText( wxCommandEvent& event ) { - int row = m_fieldsCtrl->GetSelectedRow(); - - if( row == -1 ) - { - wxBell(); - return; - } - - wxString fieldName = m_fieldsCtrl->GetTextValue( row, FIELD_NAME_COLUMN ); - wxString displayName = m_fieldsCtrl->GetTextValue( row, DISPLAY_NAME_COLUMN ); - - wxString confirm_msg = wxString::Format( _( "Are you sure you want to remove the field '%s'?" ), - displayName ); - - if( !IsOK( this, confirm_msg ) ) - return; - - int col = m_dataModel->GetFieldNameCol( fieldName ); - - RemoveField( fieldName ); - - m_fieldsCtrl->DeleteItem( row ); - - if( row > 0 ) - m_fieldsCtrl->SelectRow( row - 1 ); - - wxGridTableMessage msg( m_dataModel, wxGRIDTABLE_NOTIFY_COLS_DELETED, col, 1 ); - m_grid->ProcessTableMessage( msg ); - - OnModify(); + m_dataModel->SetFilter( m_filter->GetValue() ); + RegroupSymbols(); } -void DIALOG_LIB_FIELDS::OnFilterMouseMoved(wxMouseEvent& aEvent) + +void DIALOG_LIB_FIELDS_TABLE::OnFilterMouseMoved(wxMouseEvent& aEvent) { wxPoint pos = aEvent.GetPosition(); wxRect ctrlRect = m_filter->GetScreenRect(); @@ -786,24 +764,71 @@ void DIALOG_LIB_FIELDS::OnFilterMouseMoved(wxMouseEvent& aEvent) SetCursor( wxCURSOR_IBEAM ); } -void DIALOG_LIB_FIELDS::OnFilterText( wxCommandEvent& event ) + +void DIALOG_LIB_FIELDS_TABLE::setScope( SCOPE aScope ) { - m_dataModel->SetFilter( m_filter->GetValue() ); + LIB_SYMBOL_LIBRARY_MANAGER& libMgr = m_parent->GetLibManager(); + wxString targetLib = m_parent->GetTargetLibId().GetLibNickname(); + wxString targetSymbol = m_parent->GetTargetLibId().GetLibItemName(); + wxArrayString symbolNames; + + SetTitle( wxString::Format( _( "Library Fields Table (%s)" ), targetLib ) ); + + m_scope = aScope; + + if( m_scope == SCOPE::SCOPE_RELATED_SYMBOLS ) + { + const LIB_SYMBOL* symbol = libMgr.GetBufferedSymbol( targetSymbol, targetLib ); + LIB_SYMBOL_SPTR root = symbol ? symbol->GetRootSymbol() : nullptr; + + if( root ) + { + symbolNames.Add( root->GetName() ); + + // Now we have the root symbol, collect all its derived symbols + libMgr.GetDerivedSymbolNames( root->GetName(), targetLib, symbolNames ); + } + } + else + { + // Get all symbol names from the library manager + libMgr.GetSymbolNames( targetLib, symbolNames ); + } + + // Get all symbols from the library + loadSymbols( symbolNames ); + + // Update the field list and refresh the grid + UpdateFieldList(); + SetupAllColumnProperties(); RegroupSymbols(); } -void DIALOG_LIB_FIELDS::OnRegroupSymbols( wxCommandEvent& event ) + +void DIALOG_LIB_FIELDS_TABLE::OnScope( wxCommandEvent& aEvent ) +{ + switch( aEvent.GetSelection() ) + { + case 0: setScope( SCOPE::SCOPE_LIBRARY ); break; + case 1: setScope( SCOPE::SCOPE_RELATED_SYMBOLS ); break; + } +} + + +void DIALOG_LIB_FIELDS_TABLE::OnRegroupSymbols( wxCommandEvent& event ) { RegroupSymbols(); } -void DIALOG_LIB_FIELDS::OnTableValueChanged( wxGridEvent& event ) + +void DIALOG_LIB_FIELDS_TABLE::OnTableValueChanged( wxGridEvent& event ) { m_grid->ForceRefresh(); OnModify(); } -void DIALOG_LIB_FIELDS::OnTableCellClick( wxGridEvent& event ) + +void DIALOG_LIB_FIELDS_TABLE::OnTableCellClick( wxGridEvent& event ) { wxString cellValue = m_grid->GetCellValue( event.GetRow(), event.GetCol() ); @@ -820,40 +845,70 @@ void DIALOG_LIB_FIELDS::OnTableCellClick( wxGridEvent& event ) } } -void DIALOG_LIB_FIELDS::OnTableItemContextMenu( wxGridEvent& event ) -{ - // Try to use the mouse position to determine the actual cell under the cursor. - // Fall back to the event's row/col if mapping fails. - int col = event.GetCol(); - int row = event.GetRow(); - if ( m_grid ) +void DIALOG_LIB_FIELDS_TABLE::OnTableItemContextMenu( wxGridEvent& event ) +{ + if( m_grid ) { // Get global mouse position and convert to grid client coords wxPoint mousePos = wxGetMousePosition(); wxPoint gridPt = m_grid->ScreenToClient( mousePos ); - row = m_grid->YToRow( gridPt.y ); - col = m_grid->XToCol( gridPt.x ); - } + int row = m_grid->YToRow( gridPt.y ); + int col = m_grid->XToCol( gridPt.x ); - if ( row != -1 && col != -1 ) - m_grid->SetGridCursor( row, col ); + if ( row != -1 && col != -1 ) + m_grid->SetGridCursor( row, col ); + } event.Skip(); } -void DIALOG_LIB_FIELDS::OnTableColSize(wxGridSizeEvent& aEvent) -{ - int col = aEvent.GetRowOrCol(); - std::string key( m_dataModel->GetColFieldName( col ).ToUTF8() ); +void DIALOG_LIB_FIELDS_TABLE::OnTableColSize(wxGridSizeEvent& aEvent) +{ aEvent.Skip(); m_grid->ForceRefresh(); } -void DIALOG_LIB_FIELDS::OnCancel(wxCommandEvent& event) + +void DIALOG_LIB_FIELDS_TABLE::OnSizeViewControlsGrid( wxSizeEvent& event ) +{ + const wxString& showColLabel = m_viewControlsGrid->GetColLabelValue( SHOW_FIELD_COLUMN ); + const wxString& groupByColLabel = m_viewControlsGrid->GetColLabelValue( GROUP_BY_COLUMN ); + int showColWidth = KIUI::GetTextSize( showColLabel, m_viewControlsGrid ).x + COLUMN_MARGIN; + int groupByColWidth = KIUI::GetTextSize( groupByColLabel, m_viewControlsGrid ).x + COLUMN_MARGIN; + int remainingWidth = m_viewControlsGrid->GetSize().GetX() - showColWidth - groupByColWidth; + + m_viewControlsGrid->SetColSize( showColWidth, SHOW_FIELD_COLUMN ); + m_viewControlsGrid->SetColSize( groupByColWidth, GROUP_BY_COLUMN ); + + if( m_viewControlsGrid->IsColShown( DISPLAY_NAME_COLUMN ) && m_viewControlsGrid->IsColShown( LABEL_COLUMN ) ) + { + m_viewControlsGrid->SetColSize( DISPLAY_NAME_COLUMN, std::max( remainingWidth / 2, 60 ) ); + m_viewControlsGrid->SetColSize( LABEL_COLUMN, std::max( remainingWidth - ( remainingWidth / 2 ), 60 ) ); + } + else if( m_viewControlsGrid->IsColShown( DISPLAY_NAME_COLUMN ) ) + { + m_viewControlsGrid->SetColSize( DISPLAY_NAME_COLUMN, std::max( remainingWidth, 60 ) ); + } + else if( m_viewControlsGrid->IsColShown( LABEL_COLUMN ) ) + { + m_viewControlsGrid->SetColSize( LABEL_COLUMN, std::max( remainingWidth, 60 ) ); + } + + event.Skip(); +} + + +void DIALOG_LIB_FIELDS_TABLE::OnApply(wxCommandEvent& event) +{ + TransferDataFromWindow(); +} + + +void DIALOG_LIB_FIELDS_TABLE::OnCancel(wxCommandEvent& event) { m_grid->CommitPendingChanges( true ); @@ -870,27 +925,43 @@ void DIALOG_LIB_FIELDS::OnCancel(wxCommandEvent& event) EndModal( wxID_CANCEL ); } -void DIALOG_LIB_FIELDS::OnOk(wxCommandEvent& event) + +void DIALOG_LIB_FIELDS_TABLE::OnOk(wxCommandEvent& event) { if( TransferDataFromWindow() ) - { EndModal( wxID_OK ); - } } -void DIALOG_LIB_FIELDS::OnApply(wxCommandEvent& event) + +void DIALOG_LIB_FIELDS_TABLE::OnClose( wxCloseEvent& aEvent ) { - TransferDataFromWindow(); + m_grid->CommitPendingChanges( true ); + + if( m_dataModel->IsEdited() ) + { + if( !HandleUnsavedChanges( this, _( "Save changes?" ), + [&]() -> bool + { + return TransferDataFromWindow(); + } ) ) + { + aEvent.Veto(); + return; + } + } + + aEvent.Skip(); } -void DIALOG_LIB_FIELDS::UpdateFieldList() + +void DIALOG_LIB_FIELDS_TABLE::UpdateFieldList() { auto addMandatoryField = - [&]( FIELD_T fieldId, bool show, bool groupBy ) - { - AddField( GetCanonicalFieldName( fieldId ), - GetDefaultFieldName( fieldId, DO_TRANSLATE ), show, groupBy ); - }; + [&]( FIELD_T fieldId, bool show, bool groupBy ) + { + AddField( GetCanonicalFieldName( fieldId ), + GetDefaultFieldName( fieldId, DO_TRANSLATE ), show, groupBy ); + }; // Add mandatory fields first show groupBy addMandatoryField( FIELD_T::REFERENCE, false, false ); @@ -928,36 +999,34 @@ void DIALOG_LIB_FIELDS::UpdateFieldList() AddField( fieldName, GetGeneratedFieldDisplayName( fieldName ), true, false ); } -void DIALOG_LIB_FIELDS::AddField( const wxString& aFieldName, const wxString& aLabelValue, - bool show, bool groupBy, bool addedByUser, bool aIsCheckbox ) + +void DIALOG_LIB_FIELDS_TABLE::AddField( const wxString& aFieldName, const wxString& aLabelValue, bool show, + bool groupBy, bool addedByUser, bool aIsCheckbox ) { // Users can add fields with variable names that match the special names in the grid, // e.g. ${QUANTITY} so make sure we don't add them twice - for( int i = 0; i < m_fieldsCtrl->GetItemCount(); i++ ) + for( int row = 0; row < m_viewControlsDataModel->GetNumberRows(); row++ ) { - if( m_fieldsCtrl->GetTextValue( i, FIELD_NAME_COLUMN ) == aFieldName ) + if( m_viewControlsDataModel->GetCanonicalFieldName( row ) == aFieldName ) return; } m_dataModel->AddColumn( aFieldName, aLabelValue, addedByUser, aIsCheckbox ); - wxVector fieldsCtrlRow; - std::string key( aFieldName.ToUTF8() ); - - // Don't change these to emplace_back: some versions of wxWidgets don't support it - fieldsCtrlRow.push_back( wxVariant( aFieldName ) ); - fieldsCtrlRow.push_back( wxVariant( aLabelValue ) ); - fieldsCtrlRow.push_back( wxVariant( show ) ); - fieldsCtrlRow.push_back( wxVariant( groupBy ) ); - fieldsCtrlRow.push_back( wxVariant( aFieldName ) ); - - m_fieldsCtrl->AppendItem( fieldsCtrlRow ); - wxGridTableMessage msg( m_dataModel, wxGRIDTABLE_NOTIFY_COLS_APPENDED, 1 ); m_grid->ProcessTableMessage( msg ); + + m_viewControlsGrid->OnAddRow( + [&]() -> std::pair + { + m_viewControlsDataModel->AppendRow( aFieldName, aLabelValue, show, groupBy ); + + return { m_viewControlsDataModel->GetNumberRows() - 1, -1 }; + } ); } -void DIALOG_LIB_FIELDS::RemoveField(const wxString& fieldName) + +void DIALOG_LIB_FIELDS_TABLE::RemoveField(const wxString& fieldName) { int col = m_dataModel->GetFieldNameCol( fieldName ); wxCHECK_RET( col != -1, wxS( "Field name not found" ) ); @@ -965,7 +1034,8 @@ void DIALOG_LIB_FIELDS::RemoveField(const wxString& fieldName) m_dataModel->RemoveColumn( col ); } -void DIALOG_LIB_FIELDS::RenameField(const wxString& oldName, const wxString& newName) + +void DIALOG_LIB_FIELDS_TABLE::RenameField(const wxString& oldName, const wxString& newName) { int col = m_dataModel->GetFieldNameCol( oldName ); wxCHECK_RET( col != -1, wxS( "Existing field name missing from data model" ) ); @@ -973,13 +1043,15 @@ void DIALOG_LIB_FIELDS::RenameField(const wxString& oldName, const wxString& new m_dataModel->RenameColumn( col, newName ); } -void DIALOG_LIB_FIELDS::RegroupSymbols() + +void DIALOG_LIB_FIELDS_TABLE::RegroupSymbols() { m_dataModel->RebuildRows(); m_grid->ForceRefresh(); } -void DIALOG_LIB_FIELDS::OnColSort(wxGridEvent& aEvent) + +void DIALOG_LIB_FIELDS_TABLE::OnColSort(wxGridEvent& aEvent) { int sortCol = aEvent.GetCol(); std::string key( m_dataModel->GetColFieldName( sortCol ).ToUTF8() ); @@ -1002,7 +1074,8 @@ void DIALOG_LIB_FIELDS::OnColSort(wxGridEvent& aEvent) RegroupSymbols(); } -void DIALOG_LIB_FIELDS::OnColMove(wxGridEvent& aEvent) + +void DIALOG_LIB_FIELDS_TABLE::OnColMove(wxGridEvent& aEvent) { int origPos = aEvent.GetCol(); @@ -1040,151 +1113,76 @@ void DIALOG_LIB_FIELDS::OnColMove(wxGridEvent& aEvent) } ); } -void DIALOG_LIB_FIELDS::OnColLabelChange(wxDataViewEvent& aEvent) + +void DIALOG_LIB_FIELDS_TABLE::ShowHideColumn( int aCol, bool aShow ) { - wxDataViewItem item = aEvent.GetItem(); - int row = m_fieldsCtrl->ItemToRow( item ); - wxString label = m_fieldsCtrl->GetTextValue( row, LABEL_COLUMN ); - wxString fieldName = m_fieldsCtrl->GetTextValue( row, FIELD_NAME_COLUMN ); - int col = m_dataModel->GetFieldNameCol( fieldName ); + if( aShow ) + m_grid->ShowCol( aCol ); + else + m_grid->HideCol( aCol ); - if( col != -1 ) - m_dataModel->SetColLabelValue( col, label ); - - aEvent.Skip(); + m_dataModel->SetShowColumn( aCol, aShow ); m_grid->ForceRefresh(); + OnModify(); } -void DIALOG_LIB_FIELDS::SetupColumnProperties( int aCol ) +void DIALOG_LIB_FIELDS_TABLE::OnViewControlsCellChanged( wxGridEvent& aEvent ) { - wxGridCellAttr* attr = new wxGridCellAttr; - attr->SetReadOnly( false ); + int row = aEvent.GetRow(); - // Set some column types to specific editors - if( m_dataModel->GetColFieldName( aCol ) == GetCanonicalFieldName( FIELD_T::FOOTPRINT ) ) + wxCHECK( row < m_viewControlsGrid->GetNumberRows(), /* void */ ); + + switch( aEvent.GetCol() ) { - // Create symbol netlist for footprint picker - wxString symbolNetlist; - if( !m_symbolsList.empty() ) + case DISPLAY_NAME_COLUMN: + { + wxString label = m_viewControlsDataModel->GetValue( row, DISPLAY_NAME_COLUMN ); + wxString fieldName = m_viewControlsDataModel->GetCanonicalFieldName( row ); + int dataCol = m_dataModel->GetFieldNameCol( fieldName ); + + if( dataCol != -1 ) { - // Use the first symbol's netlist (all symbols in lib should have similar pin structure) - LIB_SYMBOL* symbol = m_symbolsList[0]; - wxArrayString pins; + m_dataModel->SetColLabelValue( dataCol, label ); + m_grid->SetColLabelValue( dataCol, label ); - for( SCH_PIN* pin : symbol->GetPins( 0 /* all units */, 1 /* single bodyStyle */ ) ) - pins.push_back( pin->GetNumber() + ' ' + pin->GetShownName() ); - - if( !pins.IsEmpty() ) - symbolNetlist << EscapeString( wxJoin( pins, '\t' ), CTX_LINE ); - - symbolNetlist << wxS( "\r" ); - - wxArrayString fpFilters = symbol->GetFPFilters(); - if( !fpFilters.IsEmpty() ) - symbolNetlist << EscapeString( wxJoin( fpFilters, ' ' ), CTX_LINE ); - - symbolNetlist << wxS( "\r" ); + m_grid->ForceRefresh(); + OnModify(); } - attr->SetEditor( new GRID_CELL_FPID_EDITOR( this, symbolNetlist ) ); - m_dataModel->SetColAttr( attr, aCol ); + break; } - else if( m_dataModel->GetColFieldName( aCol ) == GetCanonicalFieldName( FIELD_T::DATASHEET ) ) + + case SHOW_FIELD_COLUMN: { - // set datasheet column viewer button - attr->SetEditor( new GRID_CELL_URL_EDITOR( this, PROJECT_SCH::SchSearchS( &Prj() ) ) ); - m_dataModel->SetColAttr( attr, aCol ); + wxString fieldName = m_viewControlsDataModel->GetCanonicalFieldName( row ); + bool value = m_viewControlsDataModel->GetValueAsBool( row, SHOW_FIELD_COLUMN ); + int dataCol = m_dataModel->GetFieldNameCol( fieldName ); + + if( dataCol != -1 ) + ShowHideColumn( dataCol, value ); + + break; } - else if( m_dataModel->ColIsCheck( aCol ) ) + + case GROUP_BY_COLUMN: { - attr->SetAlignment( wxALIGN_CENTER, wxALIGN_CENTER ); - attr->SetRenderer( new GRID_CELL_CHECKBOX_RENDERER() ); - m_dataModel->SetColAttr( attr, aCol ); + wxString fieldName = m_viewControlsDataModel->GetCanonicalFieldName( row ); + bool value = m_viewControlsDataModel->GetValueAsBool( row, GROUP_BY_COLUMN ); + int dataCol = m_dataModel->GetFieldNameCol( fieldName ); + + m_dataModel->SetGroupColumn( dataCol, value ); + m_dataModel->RebuildRows(); + + m_grid->ForceRefresh(); + OnModify(); + break; } - else if( IsGeneratedField( m_dataModel->GetColFieldName( aCol ) ) ) - { - attr->SetReadOnly(); - m_dataModel->SetColAttr( attr, aCol ); - } - else - { - attr->SetEditor( m_grid->GetDefaultEditor() ); - m_dataModel->SetColAttr( attr, aCol ); + + default: + break; } } -void DIALOG_LIB_FIELDS::SetupAllColumnProperties() -{ - SYMBOL_EDITOR_SETTINGS* cfg = m_parent->GetSettings(); - wxSize defaultDlgSize = ConvertDialogToPixels( wxSize( 600, 300 ) ); - - // Restore column sorting order and widths - m_grid->AutoSizeColumns( false ); - int sortCol = 0; - bool sortAscending = true; - - // Find the VALUE column for initial sorting - int valueCol = m_dataModel->GetFieldNameCol( GetCanonicalFieldName( FIELD_T::VALUE ) ); - - // Set initial sort to VALUE field (ascending) if no previous sort preference exists - if( m_dataModel->GetSortCol() == 0 && valueCol != -1 ) - { - sortCol = valueCol; - sortAscending = true; - m_dataModel->SetSorting( sortCol, sortAscending ); - } - - for( int col = 0; col < m_grid->GetNumberCols(); ++col ) - { - SetupColumnProperties( col ); - - if( col == m_dataModel->GetSortCol() ) - { - sortCol = col; - sortAscending = m_dataModel->GetSortAsc(); - } - } - - // sync m_grid's column visibilities to Show checkboxes in m_fieldsCtrl - for( int i = 0; i < m_fieldsCtrl->GetItemCount(); ++i ) - { - int col = m_dataModel->GetFieldNameCol( m_fieldsCtrl->GetTextValue( i, FIELD_NAME_COLUMN ) ); - - if( col == -1 ) - continue; - - bool show = m_fieldsCtrl->GetToggleValue( i, SHOW_FIELD_COLUMN ); - m_dataModel->SetShowColumn( col, show ); - - if( show ) - { - m_grid->ShowCol( col ); - - std::string key( m_dataModel->GetColFieldName( col ).ToUTF8() ); - - if( cfg->m_LibFieldEditor.field_widths.count( key ) - && ( cfg->m_LibFieldEditor.field_widths.at( key ) > 0 ) ) - { - m_grid->SetColSize( col, cfg->m_LibFieldEditor.field_widths.at( key ) ); - } - else - { - int textWidth = m_dataModel->GetDataWidth( col ) + COLUMN_MARGIN; - int maxWidth = defaultDlgSize.x / 3; - - m_grid->SetColSize( col, std::clamp( textWidth, 100, maxWidth ) ); - } - } - else - { - m_grid->HideCol( col ); - } - } - - m_dataModel->SetSorting( sortCol, sortAscending ); - m_grid->SetSortingColumn( sortCol, sortAscending ); -} - diff --git a/eeschema/dialogs/dialog_lib_fields.h b/eeschema/dialogs/dialog_lib_fields_table.h similarity index 69% rename from eeschema/dialogs/dialog_lib_fields.h rename to eeschema/dialogs/dialog_lib_fields_table.h index 128e89fb2a..3d00f2abe9 100644 --- a/eeschema/dialogs/dialog_lib_fields.h +++ b/eeschema/dialogs/dialog_lib_fields_table.h @@ -17,71 +17,76 @@ * with this program. If not, see . */ -#ifndef DIALOG_LIB_FIELDS_H -#define DIALOG_LIB_FIELDS_H +#pragma once -#include +#include #include -#include +#include class SYMBOL_EDIT_FRAME; -class LIB_FIELDS_EDITOR_GRID_DATA_MODEL; class LIB_SYMBOL; -class DIALOG_LIB_FIELDS : public DIALOG_LIB_FIELDS_BASE + +class DIALOG_LIB_FIELDS_TABLE : public DIALOG_LIB_FIELDS_TABLE_BASE { public: - DIALOG_LIB_FIELDS( SYMBOL_EDIT_FRAME* parent, wxString libId, const wxArrayString& aSymbolNames ); - ~DIALOG_LIB_FIELDS() override; + enum SCOPE : int + { + SCOPE_LIBRARY = 0, + SCOPE_RELATED_SYMBOLS + }; - void OnInit(); + DIALOG_LIB_FIELDS_TABLE( SYMBOL_EDIT_FRAME* parent, DIALOG_LIB_FIELDS_TABLE::SCOPE aScope ); + ~DIALOG_LIB_FIELDS_TABLE() override; -protected: - void OnClose( wxCloseEvent& event ) override; - void OnColumnItemToggled( wxDataViewEvent& event ) override; - void OnFieldsCtrlSelectionChanged( wxDataViewEvent& event ) override; - void OnSizeFieldList( wxSizeEvent& event ) override; - void OnAddField( wxCommandEvent& event ) override; - void OnRenameField( wxCommandEvent& event ) override; - void OnRemoveField( wxCommandEvent& event ) override; - void OnFilterMouseMoved( wxMouseEvent& event ) override; - void OnFilterText( wxCommandEvent& event ) override; - void OnRegroupSymbols( wxCommandEvent& event ) override; - void OnTableValueChanged( wxGridEvent& event ) override; - void OnTableCellClick( wxGridEvent& event ) override; - void OnTableItemContextMenu( wxGridEvent& event ) override; - void OnTableColSize( wxGridSizeEvent& event ) override; - void OnCancel( wxCommandEvent& event ) override; - void OnOk( wxCommandEvent& event ) override; - void OnApply( wxCommandEvent& event ) override; + bool TransferDataToWindow() override; bool TransferDataFromWindow() override; + void ShowHideColumn( int aCol, bool aShow ); + private: void UpdateFieldList(); - void AddField( const wxString& aFieldName, const wxString& aLabelValue, bool show, bool groupBy, bool addedByUser = false, bool aIsCheckbox = false ); + void AddField( const wxString& aFieldName, const wxString& aLabelValue, bool show, bool groupBy, + bool addedByUser = false, bool aIsCheckbox = false ); void RemoveField( const wxString& fieldName ); void RenameField( const wxString& oldName, const wxString& newName ); void RegroupSymbols(); void OnColSort( wxGridEvent& aEvent ); void OnColMove( wxGridEvent& aEvent ); - void OnColLabelChange( wxDataViewEvent& aEvent ); void SetupColumnProperties( int aCol ); void SetupAllColumnProperties(); + void setScope( SCOPE aScope ); void loadSymbols( const wxArrayString& aSymbolNames ); - wxString m_libId; - SYMBOL_EDIT_FRAME* m_parent; + void OnViewControlsCellChanged( wxGridEvent& aEvent ) override; + void OnSizeViewControlsGrid( wxSizeEvent& event ) override; + void OnAddField( wxCommandEvent& event ) override; + void OnRenameField( wxCommandEvent& event ) override; + void OnRemoveField( wxCommandEvent& event ) override; - int m_fieldNameColWidth; - int m_labelColWidth; - int m_showColWidth; - int m_groupByColWidth; + void OnFilterMouseMoved( wxMouseEvent& event ) override; + void OnFilterText( wxCommandEvent& event ) override; + void OnScope( wxCommandEvent& event ) override; + void OnRegroupSymbols( wxCommandEvent& event ) override; + + void OnTableValueChanged( wxGridEvent& event ) override; + void OnTableCellClick( wxGridEvent& event ) override; + void OnTableItemContextMenu( wxGridEvent& event ) override; + void OnTableColSize( wxGridSizeEvent& event ) override; + + void OnCancel( wxCommandEvent& event ) override; + void OnOk( wxCommandEvent& event ) override; + void OnApply( wxCommandEvent& event ) override; + void OnClose( wxCloseEvent& event ) override; + +private: + SYMBOL_EDIT_FRAME* m_parent; + SCOPE m_scope; + + VIEW_CONTROLS_GRID_DATA_MODEL* m_viewControlsDataModel; LIB_FIELDS_EDITOR_GRID_DATA_MODEL* m_dataModel; std::vector m_symbolsList; }; - - -#endif // DIALOG_LIB_FIELDS_H diff --git a/eeschema/dialogs/dialog_lib_fields_base.cpp b/eeschema/dialogs/dialog_lib_fields_table_base.cpp similarity index 56% rename from eeschema/dialogs/dialog_lib_fields_base.cpp rename to eeschema/dialogs/dialog_lib_fields_table_base.cpp index 6ce7a19fc4..e3308473cd 100644 --- a/eeschema/dialogs/dialog_lib_fields_base.cpp +++ b/eeschema/dialogs/dialog_lib_fields_table_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6a-dirty) +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -8,11 +8,11 @@ #include "widgets/std_bitmap_button.h" #include "widgets/wx_grid.h" -#include "dialog_lib_fields_base.h" +#include "dialog_lib_fields_table_base.h" /////////////////////////////////////////////////////////////////////////// -DIALOG_LIB_FIELDS_BASE::DIALOG_LIB_FIELDS_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style ) +DIALOG_LIB_FIELDS_TABLE_BASE::DIALOG_LIB_FIELDS_TABLE_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style ) { this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); @@ -29,10 +29,41 @@ DIALOG_LIB_FIELDS_BASE::DIALOG_LIB_FIELDS_BASE( wxWindow* parent, wxWindowID id, wxBoxSizer* bLeftSizer; bLeftSizer = new wxBoxSizer( wxVERTICAL ); - m_fieldsCtrl = new wxDataViewListCtrl( m_leftPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_fieldsCtrl->SetMinSize( wxSize( -1,250 ) ); + m_viewControlsGrid = new WX_GRID( m_leftPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - bLeftSizer->Add( m_fieldsCtrl, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + // Grid + m_viewControlsGrid->CreateGrid( 1, 4 ); + m_viewControlsGrid->EnableEditing( true ); + m_viewControlsGrid->EnableGridLines( false ); + m_viewControlsGrid->EnableDragGridSize( false ); + m_viewControlsGrid->SetMargins( 0, 0 ); + + // Columns + m_viewControlsGrid->SetColSize( 0, 60 ); + m_viewControlsGrid->SetColSize( 1, 60 ); + m_viewControlsGrid->SetColSize( 2, 46 ); + m_viewControlsGrid->SetColSize( 3, 56 ); + m_viewControlsGrid->EnableDragColMove( false ); + m_viewControlsGrid->EnableDragColSize( false ); + m_viewControlsGrid->SetColLabelValue( 0, _("Field") ); + m_viewControlsGrid->SetColLabelValue( 1, _("BOM Name") ); + m_viewControlsGrid->SetColLabelValue( 2, _("Include") ); + m_viewControlsGrid->SetColLabelValue( 3, _("Group By") ); + m_viewControlsGrid->SetColLabelSize( 24 ); + m_viewControlsGrid->SetColLabelAlignment( wxALIGN_CENTER, wxALIGN_CENTER ); + + // Rows + m_viewControlsGrid->EnableDragRowSize( false ); + m_viewControlsGrid->SetRowLabelSize( 0 ); + m_viewControlsGrid->SetRowLabelAlignment( wxALIGN_CENTER, wxALIGN_CENTER ); + + // Label Appearance + + // Cell Defaults + m_viewControlsGrid->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP ); + m_viewControlsGrid->SetMinSize( wxSize( -1,250 ) ); + + bLeftSizer->Add( m_viewControlsGrid, 1, wxALL|wxEXPAND, 5 ); wxBoxSizer* bFieldsButtons; bFieldsButtons = new wxBoxSizer( wxHORIZONTAL ); @@ -76,6 +107,15 @@ DIALOG_LIB_FIELDS_BASE::DIALOG_LIB_FIELDS_BASE( wxWindow* parent, wxWindowID id, m_staticline31 = new wxStaticLine( m_rightPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); bControls->Add( m_staticline31, 0, wxEXPAND | wxALL, 3 ); + wxString m_choiceScopeChoices[] = { _("Whole Library"), _("Related Symbols Only") }; + int m_choiceScopeNChoices = sizeof( m_choiceScopeChoices ) / sizeof( wxString ); + m_choiceScope = new wxChoice( m_rightPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceScopeNChoices, m_choiceScopeChoices, 0 ); + m_choiceScope->SetSelection( 0 ); + bControls->Add( m_choiceScope, 0, wxALL, 5 ); + + m_staticline311 = new wxStaticLine( m_rightPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bControls->Add( m_staticline311, 0, wxEXPAND | wxALL, 5 ); + m_bRefresh = new STD_BITMAP_BUTTON( m_rightPanel, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); m_bRefresh->SetMinSize( wxSize( 30,30 ) ); @@ -117,7 +157,7 @@ DIALOG_LIB_FIELDS_BASE::DIALOG_LIB_FIELDS_BASE( wxWindow* parent, wxWindowID id, m_rightPanel->Layout(); bRightSizer->Fit( m_rightPanel ); m_splitterMainWindow->SplitVertically( m_leftPanel, m_rightPanel, -1 ); - bEditSizer->Add( m_splitterMainWindow, 1, wxEXPAND|wxTOP|wxBOTTOM, 5 ); + bEditSizer->Add( m_splitterMainWindow, 1, wxEXPAND|wxALL, 5 ); bMainSizer->Add( bEditSizer, 1, wxEXPAND, 5 ); @@ -150,54 +190,54 @@ DIALOG_LIB_FIELDS_BASE::DIALOG_LIB_FIELDS_BASE( wxWindow* parent, wxWindowID id, this->Centre( wxBOTH ); // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_LIB_FIELDS_BASE::OnClose ) ); - m_fieldsCtrl->Connect( wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, wxDataViewEventHandler( DIALOG_LIB_FIELDS_BASE::OnColumnItemToggled ), NULL, this ); - m_fieldsCtrl->Connect( wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler( DIALOG_LIB_FIELDS_BASE::OnFieldsCtrlSelectionChanged ), NULL, this ); - m_fieldsCtrl->Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_LIB_FIELDS_BASE::OnSizeFieldList ), NULL, this ); - m_addFieldButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnAddField ), NULL, this ); - m_renameFieldButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnRenameField ), NULL, this ); - m_removeFieldButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnRemoveField ), NULL, this ); - m_filter->Connect( wxEVT_MOTION, wxMouseEventHandler( DIALOG_LIB_FIELDS_BASE::OnFilterMouseMoved ), NULL, this ); - m_filter->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnFilterText ), NULL, this ); - m_bRefresh->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnRegroupSymbols ), NULL, this ); - m_grid->Connect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableValueChanged ), NULL, this ); - m_grid->Connect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableCellClick ), NULL, this ); - m_grid->Connect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableCellClick ), NULL, this ); - m_grid->Connect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableItemContextMenu ), NULL, this ); - m_grid->Connect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableCmdCellClick ), NULL, this ); - m_grid->Connect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableCmdCellClick ), NULL, this ); - m_grid->Connect( wxEVT_GRID_COL_SIZE, wxGridSizeEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableColSize ), NULL, this ); - m_grid->Connect( wxEVT_GRID_EDITOR_SHOWN, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnEditorShown ), NULL, this ); - m_grid->Connect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableSelectCell ), NULL, this ); - m_sdbSizerApply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnApply ), NULL, this ); - m_sdbSizerCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnCancel ), NULL, this ); - m_sdbSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnOk ), NULL, this ); + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnClose ) ); + m_viewControlsGrid->Connect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnViewControlsCellChanged ), NULL, this ); + m_viewControlsGrid->Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnSizeViewControlsGrid ), NULL, this ); + m_addFieldButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnAddField ), NULL, this ); + m_renameFieldButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnRenameField ), NULL, this ); + m_removeFieldButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnRemoveField ), NULL, this ); + m_filter->Connect( wxEVT_MOTION, wxMouseEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnFilterMouseMoved ), NULL, this ); + m_filter->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnFilterText ), NULL, this ); + m_choiceScope->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnScope ), NULL, this ); + m_bRefresh->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnRegroupSymbols ), NULL, this ); + m_grid->Connect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableValueChanged ), NULL, this ); + m_grid->Connect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableCellClick ), NULL, this ); + m_grid->Connect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableCellClick ), NULL, this ); + m_grid->Connect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableItemContextMenu ), NULL, this ); + m_grid->Connect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableCmdCellClick ), NULL, this ); + m_grid->Connect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableCmdCellClick ), NULL, this ); + m_grid->Connect( wxEVT_GRID_COL_SIZE, wxGridSizeEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableColSize ), NULL, this ); + m_grid->Connect( wxEVT_GRID_EDITOR_SHOWN, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnEditorShown ), NULL, this ); + m_grid->Connect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableSelectCell ), NULL, this ); + m_sdbSizerApply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnApply ), NULL, this ); + m_sdbSizerCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnCancel ), NULL, this ); + m_sdbSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnOk ), NULL, this ); } -DIALOG_LIB_FIELDS_BASE::~DIALOG_LIB_FIELDS_BASE() +DIALOG_LIB_FIELDS_TABLE_BASE::~DIALOG_LIB_FIELDS_TABLE_BASE() { // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_LIB_FIELDS_BASE::OnClose ) ); - m_fieldsCtrl->Disconnect( wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, wxDataViewEventHandler( DIALOG_LIB_FIELDS_BASE::OnColumnItemToggled ), NULL, this ); - m_fieldsCtrl->Disconnect( wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler( DIALOG_LIB_FIELDS_BASE::OnFieldsCtrlSelectionChanged ), NULL, this ); - m_fieldsCtrl->Disconnect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_LIB_FIELDS_BASE::OnSizeFieldList ), NULL, this ); - m_addFieldButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnAddField ), NULL, this ); - m_renameFieldButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnRenameField ), NULL, this ); - m_removeFieldButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnRemoveField ), NULL, this ); - m_filter->Disconnect( wxEVT_MOTION, wxMouseEventHandler( DIALOG_LIB_FIELDS_BASE::OnFilterMouseMoved ), NULL, this ); - m_filter->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnFilterText ), NULL, this ); - m_bRefresh->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnRegroupSymbols ), NULL, this ); - m_grid->Disconnect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableValueChanged ), NULL, this ); - m_grid->Disconnect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableCellClick ), NULL, this ); - m_grid->Disconnect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableCellClick ), NULL, this ); - m_grid->Disconnect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableItemContextMenu ), NULL, this ); - m_grid->Disconnect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableCmdCellClick ), NULL, this ); - m_grid->Disconnect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableCmdCellClick ), NULL, this ); - m_grid->Disconnect( wxEVT_GRID_COL_SIZE, wxGridSizeEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableColSize ), NULL, this ); - m_grid->Disconnect( wxEVT_GRID_EDITOR_SHOWN, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnEditorShown ), NULL, this ); - m_grid->Disconnect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( DIALOG_LIB_FIELDS_BASE::OnTableSelectCell ), NULL, this ); - m_sdbSizerApply->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnApply ), NULL, this ); - m_sdbSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnCancel ), NULL, this ); - m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_BASE::OnOk ), NULL, this ); + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnClose ) ); + m_viewControlsGrid->Disconnect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnViewControlsCellChanged ), NULL, this ); + m_viewControlsGrid->Disconnect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnSizeViewControlsGrid ), NULL, this ); + m_addFieldButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnAddField ), NULL, this ); + m_renameFieldButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnRenameField ), NULL, this ); + m_removeFieldButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnRemoveField ), NULL, this ); + m_filter->Disconnect( wxEVT_MOTION, wxMouseEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnFilterMouseMoved ), NULL, this ); + m_filter->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnFilterText ), NULL, this ); + m_choiceScope->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnScope ), NULL, this ); + m_bRefresh->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnRegroupSymbols ), NULL, this ); + m_grid->Disconnect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableValueChanged ), NULL, this ); + m_grid->Disconnect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableCellClick ), NULL, this ); + m_grid->Disconnect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableCellClick ), NULL, this ); + m_grid->Disconnect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableItemContextMenu ), NULL, this ); + m_grid->Disconnect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableCmdCellClick ), NULL, this ); + m_grid->Disconnect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableCmdCellClick ), NULL, this ); + m_grid->Disconnect( wxEVT_GRID_COL_SIZE, wxGridSizeEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableColSize ), NULL, this ); + m_grid->Disconnect( wxEVT_GRID_EDITOR_SHOWN, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnEditorShown ), NULL, this ); + m_grid->Disconnect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnTableSelectCell ), NULL, this ); + m_sdbSizerApply->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnApply ), NULL, this ); + m_sdbSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnCancel ), NULL, this ); + m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_FIELDS_TABLE_BASE::OnOk ), NULL, this ); } diff --git a/eeschema/dialogs/dialog_lib_fields_base.fbp b/eeschema/dialogs/dialog_lib_fields_table_base.fbp similarity index 80% rename from eeschema/dialogs/dialog_lib_fields_base.fbp rename to eeschema/dialogs/dialog_lib_fields_table_base.fbp index 91427a49ab..5635ae0c51 100644 --- a/eeschema/dialogs/dialog_lib_fields_base.fbp +++ b/eeschema/dialogs/dialog_lib_fields_table_base.fbp @@ -13,12 +13,12 @@ 0 res UTF-8 - dialog_lib_fields_base + dialog_lib_fields_table_base 1000 1 1 UI - dialog_lib_fields_base + dialog_lib_fields_table_base . 0 source_name @@ -48,12 +48,12 @@ wxID_ANY -1,-1 - DIALOG_LIB_FIELDS_BASE + DIALOG_LIB_FIELDS_TABLE_BASE -1,-1 wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER DIALOG_SHIM; dialog_shim.h - Library Fields Editor + Library Fields Table (%s) 0 @@ -76,7 +76,7 @@ none 5 - wxEXPAND|wxTOP|wxBOTTOM + wxEXPAND|wxALL 1 1 @@ -194,35 +194,95 @@ bLeftSizer wxVERTICAL none - + 5 - wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + wxALL|wxEXPAND 1 - + + 1 + 1 + 1 + 1 + 0 + + 0 + 0 + 0 + 0 + + + 1 + + + wxALIGN_LEFT + + wxALIGN_TOP + 0 + 1 + wxALIGN_CENTER + 24 + "Field" "BOM Name" "Include" "Group By" + wxALIGN_CENTER + 4 + 60,60,46,56 1 + 0 + Dock + 0 + Left 0 + 0 + 0 + 0 + 0 + 1 1 + 1 + + 0 + 0 0 wxID_ANY + + + + 0 + 0 + + 0 + + 0 -1,250 - m_fieldsCtrl + 1 + m_viewControlsGrid + 1 + + protected + 1 + Resizable + wxALIGN_CENTER + 0 + + wxALIGN_CENTER + + 1 + 1 - - + WX_GRID; widgets/wx_grid.h; forward_declare + 0 - OnColumnItemToggled - OnFieldsCtrlSelectionChanged - OnSizeFieldList + OnViewControlsCellChanged + OnSizeViewControlsGrid @@ -668,6 +728,131 @@ + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + 0 + + 0 + 0 + + + + 1 + 0 + "Whole Library" "Related Symbols Only" + 1 + + 1 + 0 + Dock + 0 + Left + 0 + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceScope + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnScope + + + + 5 + wxEXPAND | wxALL + 0 + + 1 + 1 + 1 + 1 + 0 + + 0 + 0 + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 0 + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline311 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_VERTICAL + ; ; forward_declare + 0 + + + + + + 5 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT diff --git a/eeschema/dialogs/dialog_lib_fields_base.h b/eeschema/dialogs/dialog_lib_fields_table_base.h similarity index 79% rename from eeschema/dialogs/dialog_lib_fields_base.h rename to eeschema/dialogs/dialog_lib_fields_table_base.h index fad8df4ede..3e2f5df9ee 100644 --- a/eeschema/dialogs/dialog_lib_fields_base.h +++ b/eeschema/dialogs/dialog_lib_fields_table_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6a-dirty) +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -14,12 +14,12 @@ class STD_BITMAP_BUTTON; class WX_GRID; #include "dialog_shim.h" -#include -#include -#include #include #include #include +#include +#include +#include #include #include #include @@ -29,29 +29,31 @@ class WX_GRID; #include #include #include -#include +#include #include #include /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// -/// Class DIALOG_LIB_FIELDS_BASE +/// Class DIALOG_LIB_FIELDS_TABLE_BASE /////////////////////////////////////////////////////////////////////////////// -class DIALOG_LIB_FIELDS_BASE : public DIALOG_SHIM +class DIALOG_LIB_FIELDS_TABLE_BASE : public DIALOG_SHIM { private: protected: wxSplitterWindow* m_splitterMainWindow; wxPanel* m_leftPanel; - wxDataViewListCtrl* m_fieldsCtrl; + WX_GRID* m_viewControlsGrid; STD_BITMAP_BUTTON* m_addFieldButton; STD_BITMAP_BUTTON* m_renameFieldButton; STD_BITMAP_BUTTON* m_removeFieldButton; wxPanel* m_rightPanel; wxSearchCtrl* m_filter; wxStaticLine* m_staticline31; + wxChoice* m_choiceScope; + wxStaticLine* m_staticline311; STD_BITMAP_BUTTON* m_bRefresh; WX_GRID* m_grid; wxStdDialogButtonSizer* m_sdbSizer; @@ -61,14 +63,14 @@ class DIALOG_LIB_FIELDS_BASE : public DIALOG_SHIM // Virtual event handlers, override them in your derived class virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnColumnItemToggled( wxDataViewEvent& event ) { event.Skip(); } - virtual void OnFieldsCtrlSelectionChanged( wxDataViewEvent& event ) { event.Skip(); } - virtual void OnSizeFieldList( wxSizeEvent& event ) { event.Skip(); } + virtual void OnViewControlsCellChanged( wxGridEvent& event ) { event.Skip(); } + virtual void OnSizeViewControlsGrid( wxSizeEvent& event ) { event.Skip(); } virtual void OnAddField( wxCommandEvent& event ) { event.Skip(); } virtual void OnRenameField( wxCommandEvent& event ) { event.Skip(); } virtual void OnRemoveField( wxCommandEvent& event ) { event.Skip(); } virtual void OnFilterMouseMoved( wxMouseEvent& event ) { event.Skip(); } virtual void OnFilterText( wxCommandEvent& event ) { event.Skip(); } + virtual void OnScope( wxCommandEvent& event ) { event.Skip(); } virtual void OnRegroupSymbols( wxCommandEvent& event ) { event.Skip(); } virtual void OnTableValueChanged( wxGridEvent& event ) { event.Skip(); } virtual void OnTableCellClick( wxGridEvent& event ) { event.Skip(); } @@ -84,9 +86,9 @@ class DIALOG_LIB_FIELDS_BASE : public DIALOG_SHIM public: - DIALOG_LIB_FIELDS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Library Fields Editor"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); + DIALOG_LIB_FIELDS_TABLE_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Library Fields Table (%s)"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); - ~DIALOG_LIB_FIELDS_BASE(); + ~DIALOG_LIB_FIELDS_TABLE_BASE(); }; diff --git a/eeschema/dialogs/dialog_symbol_fields_table.cpp b/eeschema/dialogs/dialog_symbol_fields_table.cpp index fd7a9ea18e..f1d59ee4a1 100644 --- a/eeschema/dialogs/dialog_symbol_fields_table.cpp +++ b/eeschema/dialogs/dialog_symbol_fields_table.cpp @@ -208,7 +208,7 @@ DIALOG_SYMBOL_FIELDS_TABLE::DIALOG_SYMBOL_FIELDS_TABLE( SCH_EDIT_FRAME* parent, m_removeFieldButton->SetBitmap( KiBitmapBundle( BITMAPS::small_trash ) ); m_renameFieldButton->SetBitmap( KiBitmapBundle( BITMAPS::small_edit ) ); - m_viewControlsDataModel = new VIEW_CONTROLS_GRID_DATA_MODEL(); + m_viewControlsDataModel = new VIEW_CONTROLS_GRID_DATA_MODEL( true ); m_viewControlsGrid->UseNativeColHeader( true ); m_viewControlsGrid->SetTable( m_viewControlsDataModel, true ); @@ -328,11 +328,9 @@ DIALOG_SYMBOL_FIELDS_TABLE::DIALOG_SYMBOL_FIELDS_TABLE( SCH_EDIT_FRAME* parent, finishDialogSettings(); - EESCHEMA_SETTINGS::PANEL_FIELD_EDITOR& cfg = m_parent->eeconfig()->m_FieldEditorPanel; + SetSize( wxSize( horizPixelsFromDU( 600 ), vertPixelsFromDU( 300 ) ) ); - wxSize dlgSize( cfg.width > 0 ? cfg.width : horizPixelsFromDU( 600 ), - cfg.height > 0 ? cfg.height : vertPixelsFromDU( 300 ) ); - SetSize( dlgSize ); + EESCHEMA_SETTINGS::PANEL_SYMBOL_FIELDS_TABLE& cfg = m_parent->eeconfig()->m_FieldEditorPanel; m_nbPages->SetSelection( cfg.page ); @@ -358,8 +356,8 @@ DIALOG_SYMBOL_FIELDS_TABLE::DIALOG_SYMBOL_FIELDS_TABLE( SCH_EDIT_FRAME* parent, Center(); // Connect Events - m_grid->Connect( wxEVT_GRID_COL_SORT, wxGridEventHandler( DIALOG_SYMBOL_FIELDS_TABLE::OnColSort ), nullptr, this ); - m_grid->Connect( wxEVT_GRID_COL_MOVE, wxGridEventHandler( DIALOG_SYMBOL_FIELDS_TABLE::OnColMove ), nullptr, this ); + m_grid->Bind( wxEVT_GRID_COL_SORT, &DIALOG_SYMBOL_FIELDS_TABLE::OnColSort, this ); + m_grid->Bind( wxEVT_GRID_COL_MOVE, &DIALOG_SYMBOL_FIELDS_TABLE::OnColMove, this ); m_cbBomPresets->Bind( wxEVT_CHOICE, &DIALOG_SYMBOL_FIELDS_TABLE::onBomPresetChanged, this ); m_cbBomFmtPresets->Bind( wxEVT_CHOICE, &DIALOG_SYMBOL_FIELDS_TABLE::onBomFmtPresetChanged, this ); m_viewControlsGrid->Bind( wxEVT_GRID_CELL_CHANGED, &DIALOG_SYMBOL_FIELDS_TABLE::OnViewControlsCellChanged, this ); @@ -375,12 +373,45 @@ DIALOG_SYMBOL_FIELDS_TABLE::DIALOG_SYMBOL_FIELDS_TABLE( SCH_EDIT_FRAME* parent, m_grid->EnableEditing( false ); m_buttonApply->Hide(); m_buttonExport->Hide(); - - SetupStandardButtons(); } } +DIALOG_SYMBOL_FIELDS_TABLE::~DIALOG_SYMBOL_FIELDS_TABLE() +{ + savePresetsToSchematic(); + m_schSettings.m_BomExportFileName = m_outputFileName->GetValue(); + + EESCHEMA_SETTINGS::PANEL_SYMBOL_FIELDS_TABLE& cfg = m_parent->eeconfig()->m_FieldEditorPanel; + + cfg.page = m_nbPages->GetSelection(); + cfg.view_controls_visible_columns = m_viewControlsGrid->GetShownColumnsAsString(); + cfg.sash_pos = m_splitterMainWindow->GetSashPosition(); + + for( int i = 0; i < m_grid->GetNumberCols(); i++ ) + { + if( m_grid->IsColShown( i ) ) + { + std::string fieldName( m_dataModel->GetColFieldName( i ).ToUTF8() ); + cfg.field_widths[fieldName] = m_grid->GetColSize( i ); + } + } + + // Disconnect Events + m_grid->Unbind( wxEVT_GRID_COL_SORT, &DIALOG_SYMBOL_FIELDS_TABLE::OnColSort, this ); + m_grid->Unbind( wxEVT_GRID_COL_SORT, &DIALOG_SYMBOL_FIELDS_TABLE::OnColMove, this ); + m_cbBomPresets->Unbind( wxEVT_CHOICE, &DIALOG_SYMBOL_FIELDS_TABLE::onBomPresetChanged, this ); + m_cbBomFmtPresets->Unbind( wxEVT_CHOICE, &DIALOG_SYMBOL_FIELDS_TABLE::onBomFmtPresetChanged, this ); + m_viewControlsGrid->Unbind( wxEVT_GRID_CELL_CHANGED, &DIALOG_SYMBOL_FIELDS_TABLE::OnViewControlsCellChanged, this ); + + // Delete the GRID_TRICKS. + m_viewControlsGrid->PopEventHandler( true ); + m_grid->PopEventHandler( true ); + + // we gave ownership of m_viewControlsDataModel & m_dataModel to the wxGrids... +} + + void DIALOG_SYMBOL_FIELDS_TABLE::SetupColumnProperties( int aCol ) { wxGridCellAttr* attr = new wxGridCellAttr; @@ -493,28 +524,6 @@ void DIALOG_SYMBOL_FIELDS_TABLE::SetupAllColumnProperties() } -DIALOG_SYMBOL_FIELDS_TABLE::~DIALOG_SYMBOL_FIELDS_TABLE() -{ - if( EESCHEMA_SETTINGS* cfg = dynamic_cast( Kiface().KifaceSettings() ) ) - { - cfg->m_FieldEditorPanel.view_controls_visible_columns = m_viewControlsGrid->GetShownColumnsAsString(); - cfg->m_FieldEditorPanel.sash_pos = m_splitterMainWindow->GetSashPosition(); - } - - // Disconnect Events - m_grid->Disconnect( wxEVT_GRID_COL_SORT, wxGridEventHandler( DIALOG_SYMBOL_FIELDS_TABLE::OnColSort ), - nullptr, this ); - m_grid->Disconnect( wxEVT_GRID_COL_SORT, wxGridEventHandler( DIALOG_SYMBOL_FIELDS_TABLE::OnColMove ), - nullptr, this ); - - // Delete the GRID_TRICKS. - m_viewControlsGrid->PopEventHandler( true ); - m_grid->PopEventHandler( true ); - - // we gave ownership of m_viewControlsDataModel & m_dataModel to the wxGrids... -} - - bool DIALOG_SYMBOL_FIELDS_TABLE::TransferDataToWindow() { if( !wxDialog::TransferDataFromWindow() ) @@ -525,7 +534,7 @@ bool DIALOG_SYMBOL_FIELDS_TABLE::TransferDataToWindow() SCH_SELECTION& selection = selectionTool->GetSelection(); SCH_SYMBOL* symbol = nullptr; - EESCHEMA_SETTINGS::PANEL_FIELD_EDITOR& cfg = m_parent->eeconfig()->m_FieldEditorPanel; + EESCHEMA_SETTINGS::PANEL_SYMBOL_FIELDS_TABLE& cfg = m_parent->eeconfig()->m_FieldEditorPanel; switch( cfg.scope ) { @@ -857,6 +866,29 @@ void DIALOG_SYMBOL_FIELDS_TABLE::OnFilterMouseMoved( wxMouseEvent& aEvent ) } +void DIALOG_SYMBOL_FIELDS_TABLE::setScope( SCOPE aScope ) +{ + EESCHEMA_SETTINGS::PANEL_SYMBOL_FIELDS_TABLE& cfg = m_parent->eeconfig()->m_FieldEditorPanel; + + cfg.scope = aScope; + + m_dataModel->SetPath( m_parent->GetCurrentSheet() ); + m_dataModel->SetScope( aScope ); + m_dataModel->RebuildRows(); +} + + +void DIALOG_SYMBOL_FIELDS_TABLE::OnScope( wxCommandEvent& aEvent ) +{ + switch( aEvent.GetSelection() ) + { + case 0: setScope( SCOPE::SCOPE_ALL ); break; + case 1: setScope( SCOPE::SCOPE_SHEET ); break; + case 2: setScope( SCOPE::SCOPE_SHEET_RECURSIVE ); break; + } +} + + void DIALOG_SYMBOL_FIELDS_TABLE::OnGroupSymbolsToggled( wxCommandEvent& event ) { m_dataModel->SetGroupingEnabled( m_groupSymbolsBox->GetValue() ); @@ -869,7 +901,7 @@ void DIALOG_SYMBOL_FIELDS_TABLE::OnGroupSymbolsToggled( wxCommandEvent& event ) void DIALOG_SYMBOL_FIELDS_TABLE::OnMenu( wxCommandEvent& event ) { - EESCHEMA_SETTINGS::PANEL_FIELD_EDITOR& cfg = m_parent->eeconfig()->m_FieldEditorPanel; + EESCHEMA_SETTINGS::PANEL_SYMBOL_FIELDS_TABLE& cfg = m_parent->eeconfig()->m_FieldEditorPanel; // Build a pop menu: wxMenu menu; @@ -1112,29 +1144,6 @@ void DIALOG_SYMBOL_FIELDS_TABLE::OnRegroupSymbols( wxCommandEvent& aEvent ) } -void DIALOG_SYMBOL_FIELDS_TABLE::setScope( SCOPE aScope ) -{ - EESCHEMA_SETTINGS::PANEL_FIELD_EDITOR& cfg = m_parent->eeconfig()->m_FieldEditorPanel; - - cfg.scope = aScope; - - m_dataModel->SetPath( m_parent->GetCurrentSheet() ); - m_dataModel->SetScope( aScope ); - m_dataModel->RebuildRows(); -} - - -void DIALOG_SYMBOL_FIELDS_TABLE::OnScope( wxCommandEvent& aEvent ) -{ - switch( aEvent.GetSelection() ) - { - case 0: setScope( SCOPE::SCOPE_ALL ); break; - case 1: setScope( SCOPE::SCOPE_SHEET ); break; - case 2: setScope( SCOPE::SCOPE_SHEET_RECURSIVE ); break; - } -} - - void DIALOG_SYMBOL_FIELDS_TABLE::OnTableCellClick( wxGridEvent& event ) { if( m_dataModel->ColIsReference( event.GetCol() ) ) @@ -1153,7 +1162,7 @@ void DIALOG_SYMBOL_FIELDS_TABLE::OnTableCellClick( wxGridEvent& event ) void DIALOG_SYMBOL_FIELDS_TABLE::OnTableRangeSelected( wxGridRangeSelectEvent& aEvent ) { - EESCHEMA_SETTINGS::PANEL_FIELD_EDITOR& cfg = m_parent->eeconfig()->m_FieldEditorPanel; + EESCHEMA_SETTINGS::PANEL_SYMBOL_FIELDS_TABLE& cfg = m_parent->eeconfig()->m_FieldEditorPanel; // Cross-probing should only work in Edit page if( m_nbPages->GetSelection() != 0 ) @@ -1221,16 +1230,16 @@ void DIALOG_SYMBOL_FIELDS_TABLE::OnSizeViewControlsGrid( wxSizeEvent& event ) if( m_viewControlsGrid->IsColShown( DISPLAY_NAME_COLUMN ) && m_viewControlsGrid->IsColShown( LABEL_COLUMN ) ) { - m_viewControlsGrid->SetColSize( DISPLAY_NAME_COLUMN, remainingWidth / 2 ); - m_viewControlsGrid->SetColSize( LABEL_COLUMN, remainingWidth - ( remainingWidth / 2 ) ); + m_viewControlsGrid->SetColSize( DISPLAY_NAME_COLUMN, std::max( remainingWidth / 2, 60 ) ); + m_viewControlsGrid->SetColSize( LABEL_COLUMN, std::max( remainingWidth - ( remainingWidth / 2 ), 60 ) ); } else if( m_viewControlsGrid->IsColShown( DISPLAY_NAME_COLUMN ) ) { - m_viewControlsGrid->SetColSize( DISPLAY_NAME_COLUMN, remainingWidth ); + m_viewControlsGrid->SetColSize( DISPLAY_NAME_COLUMN, std::max( remainingWidth, 60 ) ); } else if( m_viewControlsGrid->IsColShown( LABEL_COLUMN ) ) { - m_viewControlsGrid->SetColSize( LABEL_COLUMN, remainingWidth ); + m_viewControlsGrid->SetColSize( LABEL_COLUMN, std::max( remainingWidth, 60 ) ); } event.Skip(); @@ -1478,7 +1487,6 @@ void DIALOG_SYMBOL_FIELDS_TABLE::OnClose( wxCloseEvent& aEvent ) return; } - // This is a cancel, so commit quietly as we're going to throw the results away anyway. m_grid->CommitPendingChanges( true ); if( m_dataModel->IsEdited() && aEvent.CanVeto() ) @@ -1496,26 +1504,6 @@ void DIALOG_SYMBOL_FIELDS_TABLE::OnClose( wxCloseEvent& aEvent ) // Stop listening to schematic events m_parent->Schematic().RemoveListener( this ); - - // Save all our settings since we're really closing - savePresetsToSchematic(); - m_schSettings.m_BomExportFileName = m_outputFileName->GetValue(); - - EESCHEMA_SETTINGS* cfg = m_parent->eeconfig(); - - cfg->m_FieldEditorPanel.width = GetSize().x; - cfg->m_FieldEditorPanel.height = GetSize().y; - cfg->m_FieldEditorPanel.page = m_nbPages->GetSelection(); - - for( int i = 0; i < m_grid->GetNumberCols(); i++ ) - { - if( m_grid->IsColShown( i ) ) - { - std::string fieldName( m_dataModel->GetColFieldName( i ).ToUTF8() ); - cfg->m_FieldEditorPanel.field_widths[fieldName] = m_grid->GetColSize( i ); - } - } - m_parent->ClearFocus(); wxCommandEvent* evt = new wxCommandEvent( EDA_EVT_CLOSE_DIALOG_SYMBOL_FIELDS_TABLE, wxID_ANY ); @@ -2034,12 +2022,11 @@ void DIALOG_SYMBOL_FIELDS_TABLE::rebuildBomFmtPresetsWidget() int idx = 0; int default_idx = 0; - for( std::pair& pair : m_bomFmtPresets ) + for( const auto& [presetName, preset] : m_bomFmtPresets ) { - m_cbBomFmtPresets->Append( wxGetTranslation( pair.first ), - static_cast( &pair.second ) ); + m_cbBomFmtPresets->Append( wxGetTranslation( presetName ), (void*) &preset ); - if( pair.first == BOM_FMT_PRESET::CSV().name ) + if( presetName == BOM_FMT_PRESET::CSV().name ) default_idx = idx; idx++; diff --git a/eeschema/dialogs/dialog_symbol_fields_table.h b/eeschema/dialogs/dialog_symbol_fields_table.h index 9a33460be9..22a12fdce6 100644 --- a/eeschema/dialogs/dialog_symbol_fields_table.h +++ b/eeschema/dialogs/dialog_symbol_fields_table.h @@ -22,9 +22,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef DIALOG_SYMBOL_FIELDS_TABLE_H -#define DIALOG_SYMBOL_FIELDS_TABLE_H - +#pragma once #include #include @@ -66,32 +64,33 @@ private: void OnViewControlsCellChanged( wxGridEvent& aEvent ) override; void OnSizeViewControlsGrid( wxSizeEvent& event ) override; + void OnAddField( wxCommandEvent& event ) override; + void OnRemoveField( wxCommandEvent& event ) override; + void OnRenameField( wxCommandEvent& event ) override; void OnColSort( wxGridEvent& aEvent ); void OnColMove( wxGridEvent& aEvent ); void OnTableRangeSelected( wxGridRangeSelectEvent& aEvent ); - void OnScope( wxCommandEvent& event ) override; + void OnFilterText( wxCommandEvent& aEvent ) override; + void OnFilterMouseMoved( wxMouseEvent& event ) override; + void OnScope( wxCommandEvent& event ) override; void OnGroupSymbolsToggled( wxCommandEvent& event ) override; void OnRegroupSymbols( wxCommandEvent& aEvent ) override; + void OnMenu( wxCommandEvent& event ) override; + void OnTableValueChanged( wxGridEvent& event ) override; void OnTableCellClick( wxGridEvent& event ) override; void OnTableColSize( wxGridSizeEvent& event ) override; - void OnAddField( wxCommandEvent& event ) override; - void OnRemoveField( wxCommandEvent& event ) override; - void OnRenameField( wxCommandEvent& event ) override; void OnExport( wxCommandEvent& aEvent ) override; void OnSaveAndContinue( wxCommandEvent& aEvent ) override; void OnCancel( wxCommandEvent& aEvent ) override; - void OnClose( wxCloseEvent& aEvent ) override; void OnOk( wxCommandEvent& aEvent ) override; - void OnFilterText( wxCommandEvent& aEvent ) override; - void OnFilterMouseMoved( wxMouseEvent& event ) override; + void OnClose( wxCloseEvent& aEvent ) override; void OnOutputFileBrowseClicked( wxCommandEvent& event ) override; void OnPageChanged( wxNotebookEvent& event ) override; void OnPreviewRefresh( wxCommandEvent& event ) override; - void OnMenu( wxCommandEvent& event ) override; void PreviewRefresh(); std::vector GetUserBomPresets() const; @@ -161,5 +160,3 @@ private: JOB_EXPORT_SCH_BOM* m_job; }; - -#endif /* DIALOG_SYMBOL_FIELDS_TABLE_H */ diff --git a/eeschema/dialogs/dialog_symbol_fields_table_base.cpp b/eeschema/dialogs/dialog_symbol_fields_table_base.cpp index 6d88b99990..c400f04e8c 100644 --- a/eeschema/dialogs/dialog_symbol_fields_table_base.cpp +++ b/eeschema/dialogs/dialog_symbol_fields_table_base.cpp @@ -41,8 +41,8 @@ DIALOG_SYMBOL_FIELDS_TABLE_BASE::DIALOG_SYMBOL_FIELDS_TABLE_BASE( wxWindow* pare m_viewControlsGrid->SetMargins( 0, 0 ); // Columns - m_viewControlsGrid->SetColSize( 0, 80 ); - m_viewControlsGrid->SetColSize( 1, 80 ); + m_viewControlsGrid->SetColSize( 0, 60 ); + m_viewControlsGrid->SetColSize( 1, 60 ); m_viewControlsGrid->SetColSize( 2, 46 ); m_viewControlsGrid->SetColSize( 3, 56 ); m_viewControlsGrid->EnableDragColMove( false ); diff --git a/eeschema/dialogs/dialog_symbol_fields_table_base.fbp b/eeschema/dialogs/dialog_symbol_fields_table_base.fbp index 4e64442b66..53d736394b 100644 --- a/eeschema/dialogs/dialog_symbol_fields_table_base.fbp +++ b/eeschema/dialogs/dialog_symbol_fields_table_base.fbp @@ -336,7 +336,7 @@ "Field" "BOM Name" "Include" "Group By" wxALIGN_CENTER 4 - 80,80,46,56 + 60,60,46,56 1 0 @@ -3018,7 +3018,7 @@ 5 wxEXPAND 0 - + bButtonsSizer wxHORIZONTAL diff --git a/eeschema/dialogs/panel_sym_lib_table_base.cpp b/eeschema/dialogs/panel_sym_lib_table_base.cpp index 81650f6564..c4f85ec65f 100644 --- a/eeschema/dialogs/panel_sym_lib_table_base.cpp +++ b/eeschema/dialogs/panel_sym_lib_table_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf0) +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -157,7 +157,7 @@ PANEL_SYM_LIB_TABLE_BASE::PANEL_SYM_LIB_TABLE_BASE( wxWindow* parent, wxWindowID bButtonsSizer->Add( 0, 0, 1, wxEXPAND, 5 ); m_resetGlobal = new wxButton( this, wxID_ANY, _("Reset Libraries"), wxDefaultPosition, wxDefaultSize, 0 ); - bButtonsSizer->Add( m_resetGlobal, 0, wxALL, 5 ); + bButtonsSizer->Add( m_resetGlobal, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); bButtonsSizer->Add( 0, 0, 0, wxEXPAND, 5 ); diff --git a/eeschema/dialogs/panel_sym_lib_table_base.fbp b/eeschema/dialogs/panel_sym_lib_table_base.fbp index 74406baf5f..4c7299b5a6 100644 --- a/eeschema/dialogs/panel_sym_lib_table_base.fbp +++ b/eeschema/dialogs/panel_sym_lib_table_base.fbp @@ -1,34 +1,36 @@ - + - C++ - 1 - source_name - 0 - 0 + + 1 + connect + none + + + 0 + 0 res UTF-8 - connect panel_sym_lib_table_base 1000 - none - - 1 + 1 + UI sym_lib_table - . - + 0 + source_name + 1 + 0 + source_name + + + 1 1 - 1 - 1 - 1 - UI - 0 - 0 0 + 0 0 wxAUI_MGR_DEFAULT @@ -68,10 +70,10 @@ 1 1 1 - + 0 - - + 0 + 0 @@ -127,10 +129,10 @@ 1 1 1 - + 0 - - + 0 + 0 @@ -188,10 +190,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 1 @@ -280,10 +282,10 @@ 1 1 1 - + 0 - - + 0 + 0 @@ -341,10 +343,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 0 @@ -444,10 +446,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 @@ -519,10 +521,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 @@ -594,10 +596,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 @@ -669,10 +671,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 @@ -754,10 +756,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 @@ -832,17 +834,17 @@ 5 - wxALL + wxALL|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 - + 0 - - + 0 + 0 0 @@ -924,10 +926,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 @@ -1011,10 +1013,10 @@ 1 1 1 - + 0 - - + 0 + 0 @@ -1083,10 +1085,10 @@ 1 1 1 - + 0 - - + 0 + 0 1 0 diff --git a/eeschema/dialogs/panel_sym_lib_table_base.h b/eeschema/dialogs/panel_sym_lib_table_base.h index a285dca3ca..0139e80ccd 100644 --- a/eeschema/dialogs/panel_sym_lib_table_base.h +++ b/eeschema/dialogs/panel_sym_lib_table_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf0) +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -31,7 +31,6 @@ class WX_GRID; /////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////// /// Class PANEL_SYM_LIB_TABLE_BASE /////////////////////////////////////////////////////////////////////////////// diff --git a/eeschema/eeschema_settings.cpp b/eeschema/eeschema_settings.cpp index b29cc1dfbc..b729365f77 100644 --- a/eeschema/eeschema_settings.cpp +++ b/eeschema/eeschema_settings.cpp @@ -511,12 +511,6 @@ EESCHEMA_SETTINGS::EESCHEMA_SETTINGS() : m_params.emplace_back( new PARAM_MAP( "field_editor.field_widths", &m_FieldEditorPanel.field_widths, {} ) ); - m_params.emplace_back( new PARAM( "field_editor.width", - &m_FieldEditorPanel.width, 0 ) ); - - m_params.emplace_back( new PARAM( "field_editor.height", - &m_FieldEditorPanel.height, 0 ) ); - m_params.emplace_back( new PARAM( "field_editor.page", &m_FieldEditorPanel.page, 0 ) ); diff --git a/eeschema/eeschema_settings.h b/eeschema/eeschema_settings.h index b7d1477895..bdd08f9597 100644 --- a/eeschema/eeschema_settings.h +++ b/eeschema/eeschema_settings.h @@ -230,11 +230,9 @@ public: std::vector plugins; }; - struct PANEL_FIELD_EDITOR + struct PANEL_SYMBOL_FIELDS_TABLE { std::map field_widths; - int width; - int height; int page; wxString export_filename; int selection_mode; @@ -347,7 +345,7 @@ public: PANEL_BOM m_BomPanel; - PANEL_FIELD_EDITOR m_FieldEditorPanel; + PANEL_SYMBOL_FIELDS_TABLE m_FieldEditorPanel; PANEL_LIB_VIEW m_LibViewPanel; diff --git a/eeschema/fields_data_model.cpp b/eeschema/fields_data_model.cpp index 860f0bc858..927fbbe6d5 100644 --- a/eeschema/fields_data_model.cpp +++ b/eeschema/fields_data_model.cpp @@ -35,7 +35,7 @@ wxString VIEW_CONTROLS_GRID_DATA_MODEL::GetColLabelValue( int aCol ) switch( aCol ) { case DISPLAY_NAME_COLUMN: return _( "Field" ); - case LABEL_COLUMN: return _( "BOM Name" ); + case LABEL_COLUMN: return m_forBOM ? _( "BOM Name" ) : _( "Label" ); case SHOW_FIELD_COLUMN: return _( "Include" ); case GROUP_BY_COLUMN: return _( "Group By" ); default: return wxT( "unknown column" ); @@ -131,7 +131,7 @@ void VIEW_CONTROLS_GRID_DATA_MODEL::SetValueAsBool( int aRow, int aCol, bool aVa void VIEW_CONTROLS_GRID_DATA_MODEL::AppendRow( const wxString& aFieldName, const wxString& aBOMName, - bool aShow, bool aGroupBy ) + bool aShow, bool aGroupBy ) { m_fields.emplace_back( BOM_FIELD{ aFieldName, aBOMName, aShow, aGroupBy } ); @@ -326,8 +326,7 @@ wxString FIELDS_EDITOR_GRID_DATA_MODEL::GetValue( int aRow, int aCol ) } -wxGridCellAttr* FIELDS_EDITOR_GRID_DATA_MODEL::GetAttr( int aRow, int aCol, - wxGridCellAttr::wxAttrKind aKind ) +wxGridCellAttr* FIELDS_EDITOR_GRID_DATA_MODEL::GetAttr( int aRow, int aCol, wxGridCellAttr::wxAttrKind aKind ) { if( GetColFieldName( aCol ) == GetCanonicalFieldName( FIELD_T::DATASHEET ) || IsURL( GetValue( m_rows[aRow], aCol ) ) ) @@ -363,11 +362,8 @@ wxString FIELDS_EDITOR_GRID_DATA_MODEL::GetValue( const DATA_MODEL_ROW& group, i { const KIID& symbolID = ref.GetSymbol()->m_Uuid; - if( !m_dataStore.count( symbolID ) - || !m_dataStore[symbolID].count( m_cols[aCol].m_fieldName ) ) - { + if( !m_dataStore.contains( symbolID ) || !m_dataStore[symbolID].contains( m_cols[aCol].m_fieldName ) ) return INDETERMINATE_STATE; - } wxString refFieldValue = m_dataStore[symbolID][m_cols[aCol].m_fieldName]; @@ -586,8 +582,7 @@ void FIELDS_EDITOR_GRID_DATA_MODEL::Sort() } -bool FIELDS_EDITOR_GRID_DATA_MODEL::unitMatch( const SCH_REFERENCE& lhRef, - const SCH_REFERENCE& rhRef ) +bool FIELDS_EDITOR_GRID_DATA_MODEL::unitMatch( const SCH_REFERENCE& lhRef, const SCH_REFERENCE& rhRef ) { // If items are unannotated then we can't tell if they're units of the same symbol or not if( lhRef.GetRefNumber() == wxT( "?" ) ) @@ -597,9 +592,7 @@ bool FIELDS_EDITOR_GRID_DATA_MODEL::unitMatch( const SCH_REFERENCE& lhRef, } -bool FIELDS_EDITOR_GRID_DATA_MODEL::groupMatch( const SCH_REFERENCE& lhRef, - const SCH_REFERENCE& rhRef ) - +bool FIELDS_EDITOR_GRID_DATA_MODEL::groupMatch( const SCH_REFERENCE& lhRef, const SCH_REFERENCE& rhRef ) { int refCol = GetFieldNameCol( GetCanonicalFieldName( FIELD_T::REFERENCE ) ); bool matchFound = false; @@ -710,8 +703,7 @@ bool FIELDS_EDITOR_GRID_DATA_MODEL::isAttribute( const wxString& aFieldName ) } -wxString FIELDS_EDITOR_GRID_DATA_MODEL::getAttributeValue( const SCH_SYMBOL& aSymbol, - const wxString& aAttributeName ) +wxString FIELDS_EDITOR_GRID_DATA_MODEL::getAttributeValue( const SCH_SYMBOL& aSymbol, const wxString& aAttributeName ) { if( aAttributeName == wxS( "${DNP}" ) ) return aSymbol.GetDNP() ? wxS( "1" ) : wxS( "0" ); diff --git a/eeschema/fields_data_model.h b/eeschema/fields_data_model.h index 14a8da892d..007eaa1fae 100644 --- a/eeschema/fields_data_model.h +++ b/eeschema/fields_data_model.h @@ -41,7 +41,8 @@ struct BOM_FMT_PRESET; class VIEW_CONTROLS_GRID_DATA_MODEL : public WX_GRID_TABLE_BASE { public: - VIEW_CONTROLS_GRID_DATA_MODEL() + VIEW_CONTROLS_GRID_DATA_MODEL( bool aForBOM ) : + m_forBOM( aForBOM ) {} ~VIEW_CONTROLS_GRID_DATA_MODEL() override = default; @@ -88,6 +89,7 @@ public: void SetCanonicalFieldName( int aRow, const wxString& aName ); protected: + bool m_forBOM; std::vector m_fields; }; @@ -133,8 +135,8 @@ public: enum SCOPE : int { SCOPE_ALL = 0, - SCOPE_SHEET = 1, - SCOPE_SHEET_RECURSIVE = 2 + SCOPE_SHEET, + SCOPE_SHEET_RECURSIVE }; FIELDS_EDITOR_GRID_DATA_MODEL( const SCH_REFERENCE_LIST& aSymbolsList, wxGridCellAttr* aURLEditor ) : @@ -332,8 +334,9 @@ public: private: static bool cmp( const DATA_MODEL_ROW& lhGroup, const DATA_MODEL_ROW& rhGroup, FIELDS_EDITOR_GRID_DATA_MODEL* dataModel, int sortCol, bool ascending ); - bool unitMatch( const SCH_REFERENCE& lhRef, const SCH_REFERENCE& rhRef ); - bool groupMatch( const SCH_REFERENCE& lhRef, const SCH_REFERENCE& rhRef ); + + bool unitMatch( const SCH_REFERENCE& lhRef, const SCH_REFERENCE& rhRef ); + bool groupMatch( const SCH_REFERENCE& lhRef, const SCH_REFERENCE& rhRef ); // Helper functions to deal with translating wxGrid values to and from // named field values like ${DNP} @@ -349,8 +352,7 @@ private: * @retval true if the symbol attribute value has changed. * @retval false if the symbol attribute has **not** changed. */ - bool setAttributeValue( SCH_SYMBOL& aSymbol, const wxString& aAttributeName, - const wxString& aValue ); + bool setAttributeValue( SCH_SYMBOL& aSymbol, const wxString& aAttributeName, const wxString& aValue ); /* Helper function to get the resolved field value. * Handles symbols that are missing fields that would have a variable @@ -360,8 +362,6 @@ private: void Sort(); - SCH_REFERENCE_LIST getSymbolReferences( SCH_SYMBOL* aSymbol ); - void storeReferenceFields( SCH_REFERENCE& aRef ); void updateDataStoreSymbolField( const SCH_SYMBOL& aSymbol, const wxString& aFieldName ); protected: @@ -376,7 +376,7 @@ protected: int m_sortColumn; bool m_sortAscending; wxString m_filter; - enum SCOPE m_scope; + SCOPE m_scope; SCH_SHEET_PATH m_path; bool m_groupingEnabled; bool m_excludeDNP; diff --git a/eeschema/lib_fields_data_model.h b/eeschema/lib_fields_data_model.h index 9fef345a37..97c9af5c38 100644 --- a/eeschema/lib_fields_data_model.h +++ b/eeschema/lib_fields_data_model.h @@ -16,39 +16,22 @@ * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ + +#pragma once + #include #include #include #include -// The field name in the data model (translated) -#define DISPLAY_NAME_COLUMN 0 - -// The field name's label for exporting (CSV, etc.) -#define LABEL_COLUMN 1 -#define SHOW_FIELD_COLUMN 2 -#define GROUP_BY_COLUMN 3 - -// The internal field name (untranslated) -#define FIELD_NAME_COLUMN 4 - -struct BOM_FIELD; -struct BOM_PRESET; -struct BOM_FMT_PRESET; - -enum GROUP_TYPE -{ - GROUP_SINGLETON, - GROUP_COLLAPSED, - GROUP_COLLAPSED_DURING_SORT, - GROUP_EXPANDED, - CHILD_ITEM -}; +#include struct LIB_DATA_MODEL_ROW { - LIB_DATA_MODEL_ROW( const LIB_SYMBOL* aFirstReference, GROUP_TYPE aType ) - : m_ItemNumber( 0 ), m_Flag( aType ), m_Refs( { aFirstReference } ) + LIB_DATA_MODEL_ROW( const LIB_SYMBOL* aFirstReference, GROUP_TYPE aType ) : + m_ItemNumber( 0 ), + m_Flag( aType ), + m_Refs( { aFirstReference } ) { } @@ -94,33 +77,25 @@ struct LIB_DATA_ELEMENT }; -class LIB_FIELDS_EDITOR_GRID_DATA_MODEL : public wxGridTableBase +class LIB_FIELDS_EDITOR_GRID_DATA_MODEL : public WX_GRID_TABLE_BASE { public: - enum SCOPE : int - { - SCOPE_ALL = 0, - SCOPE_SHEET = 1, - SCOPE_SHEET_RECURSIVE = 2 - }; - - LIB_FIELDS_EDITOR_GRID_DATA_MODEL( const std::vector& aSymbolsList ) : - m_symbolsList( aSymbolsList ), m_edited( false ), m_sortColumn( 0 ), - m_sortAscending( false ), m_filter( wxEmptyString ), m_scope( SCOPE_ALL ), - m_path(), m_groupingEnabled( false ), m_cols(), m_rows(), - m_dataStore(), m_stripedStringRenderer( nullptr ) + LIB_FIELDS_EDITOR_GRID_DATA_MODEL() : + m_edited( false ), + m_sortColumn( 0 ), + m_sortAscending( false ), + m_filter( wxEmptyString ), + m_groupingEnabled( false ), + m_stripedStringRenderer( nullptr ) { } - ~LIB_FIELDS_EDITOR_GRID_DATA_MODEL() + ~LIB_FIELDS_EDITOR_GRID_DATA_MODEL() override { - for (auto& pair : m_stripedRenderers) + for( auto& pair : m_stripedRenderers ) pair.second->DecRef(); m_stripedRenderers.clear(); - - for( const auto& [col, attr] : m_colAttrs ) - wxSafeDecRef( attr ); } static const wxString QUANTITY_VARIABLE; @@ -138,13 +113,19 @@ public: wxCHECK_RET( aCol >= 0 && aCol < (int) m_cols.size(), "Invalid Column Number" ); if( aCol == aNewPos ) + { return; + } else if( aCol < aNewPos ) + { std::rotate( std::begin( m_cols ) + aCol, std::begin( m_cols ) + aCol + 1, std::begin( m_cols ) + aNewPos + 1 ); + } else + { std::rotate( std::begin( m_cols ) + aNewPos, std::begin( m_cols ) + aCol, std::begin( m_cols ) + aCol + 1 ); + } } int GetNumberRows() override { return (int) m_rows.size(); } @@ -156,7 +137,6 @@ public: m_cols[aCol].m_label = aLabel; } - wxString GetColLabelValue( int aCol ) override { wxCHECK( aCol >= 0 && aCol < (int) m_cols.size(), wxString() ); @@ -208,9 +188,12 @@ public: void GetSymbolNames( wxArrayString& aList ) { aList.Clear(); + for( const LIB_SYMBOL* symbol : m_symbolsList ) aList.Add( symbol->GetName() ); } + + void SetSymbols( const std::vector& aSymbolsList ) { m_symbolsList = aSymbolsList; } void RebuildRows(); void ExpandRow( int aRow ); @@ -290,22 +273,16 @@ public: return m_rows[aRow].m_Flag == GROUP_SINGLETON || m_rows[aRow].m_Flag == CHILD_ITEM; } - void SetColAttr( wxGridCellAttr* aAttr, int aCol ) override - { - wxSafeDecRef( m_colAttrs[aCol] ); - m_colAttrs[aCol] = aAttr; - } - private: static bool cmp( const LIB_DATA_MODEL_ROW& lhGroup, const LIB_DATA_MODEL_ROW& rhGroup, LIB_FIELDS_EDITOR_GRID_DATA_MODEL* dataModel, int sortCol, bool ascending ); - bool groupMatch( const LIB_SYMBOL* lhRef, const LIB_SYMBOL* rhRef ); - wxString getAttributeValue( const LIB_SYMBOL*, const wxString& aAttributeName ); - void setAttributeValue( LIB_SYMBOL* aSymbol, const wxString& aAttributeName, - const wxString& aValue ); - void createActualDerivedSymbol( const LIB_SYMBOL* aParentSymbol, const wxString& aNewSymbolName, - const KIID& aNewSymbolUuid ); + bool groupMatch( const LIB_SYMBOL* lhRef, const LIB_SYMBOL* rhRef ); + wxString getAttributeValue( const LIB_SYMBOL*, const wxString& aAttributeName ); + void setAttributeValue( LIB_SYMBOL* aSymbol, const wxString& aAttributeName, const wxString& aValue ); + + void createActualDerivedSymbol( const LIB_SYMBOL* aParentSymbol, const wxString& aNewSymbolName, + const KIID& aNewSymbolUuid ); void Sort(); @@ -320,16 +297,14 @@ protected: int m_sortColumn; bool m_sortAscending; wxString m_filter; - enum SCOPE m_scope; - SCH_SHEET_PATH m_path; bool m_groupingEnabled; std::vector m_cols; std::vector m_rows; // Data store - // The data model is fundamentally m_componentRefs X m_fieldNames. - // A map of compID : fieldSet, where fieldSet is a map of fieldName : LIB_DATA_ELEMENT + // The data model is fundamentally symbols X fieldNames. + // A map of symbolID : fieldSet, where fieldSet is a map of fieldName : LIB_DATA_ELEMENT std::map> m_dataStore; // Track newly created derived symbols for library manager integration @@ -338,7 +313,4 @@ protected: // stripe bitmap support mutable STRIPED_STRING_RENDERER* m_stripedStringRenderer; mutable std::map m_stripedRenderers; - - // Column attributes storage - std::map m_colAttrs; }; diff --git a/eeschema/symbol_editor/symbol_editor_settings.cpp b/eeschema/symbol_editor/symbol_editor_settings.cpp index 3b5efff2e0..52883bbc42 100644 --- a/eeschema/symbol_editor/symbol_editor_settings.cpp +++ b/eeschema/symbol_editor/symbol_editor_settings.cpp @@ -59,25 +59,25 @@ SYMBOL_EDITOR_SETTINGS::SYMBOL_EDITOR_SETTINGS() : &m_AuiPanels.properties_splitter, 0.5f ) ); m_params.emplace_back( new PARAM( "defaults.line_width", - &m_Defaults.line_width, 0 ) ); + &m_Defaults.line_width, 0 ) ); m_params.emplace_back( new PARAM( "defaults.text_size", - &m_Defaults.text_size, DEFAULT_TEXT_SIZE ) ); + &m_Defaults.text_size, DEFAULT_TEXT_SIZE ) ); m_params.emplace_back( new PARAM( "defaults.pin_length", - &m_Defaults.pin_length, DEFAULT_PIN_LENGTH ) ); + &m_Defaults.pin_length, DEFAULT_PIN_LENGTH ) ); m_params.emplace_back( new PARAM( "defaults.pin_name_size", - &m_Defaults.pin_name_size, DEFAULT_PINNAME_SIZE ) ); + &m_Defaults.pin_name_size, DEFAULT_PINNAME_SIZE ) ); m_params.emplace_back( new PARAM( "defaults.pin_num_size", - &m_Defaults.pin_num_size, DEFAULT_PINNUM_SIZE ) ); + &m_Defaults.pin_num_size, DEFAULT_PINNUM_SIZE ) ); m_params.emplace_back( new PARAM( "repeat.label_delta", - &m_Repeat.label_delta, 1 ) ); + &m_Repeat.label_delta, 1 ) ); m_params.emplace_back( new PARAM( "repeat.pin_step", - &m_Repeat.pin_step, 100 ) ); + &m_Repeat.pin_step, 100 ) ); m_params.emplace_back( new PARAM( "import_graphics.interactive_placement", &m_ImportGraphics.interactive_placement, true ) ); @@ -101,40 +101,43 @@ SYMBOL_EDITOR_SETTINGS::SYMBOL_EDITOR_SETTINGS() : &m_ImportGraphics.dxf_units, 0 ) ); m_params.emplace_back( new PARAM( "show_pin_electrical_type", - &m_ShowPinElectricalType, true ) ); + &m_ShowPinElectricalType, true ) ); m_params.emplace_back( new PARAM( "show_pin_alt_icons", - &m_ShowPinAltIcons, true ) ); + &m_ShowPinAltIcons, true ) ); m_params.emplace_back( new PARAM( "show_hidden_lib_fields", - &m_ShowHiddenFields, true ) ); + &m_ShowHiddenFields, true ) ); m_params.emplace_back( new PARAM( "show_hidden_lib_pins", - &m_ShowHiddenPins, true ) ); + &m_ShowHiddenPins, true ) ); m_params.emplace_back( new PARAM( "drag_pins_along_with_edges", - &m_dragPinsAlongWithEdges, true ) ); + &m_dragPinsAlongWithEdges, true ) ); m_params.emplace_back( new PARAM( "lib_table_width", - &m_LibWidth, 250 ) ); + &m_LibWidth, 250 ) ); m_params.emplace_back( new PARAM( "library.sort_mode", - &m_LibrarySortMode, 0 ) ); + &m_LibrarySortMode, 0 ) ); m_params.emplace_back( new PARAM( "edit_symbol_visible_columns", - &m_EditSymbolVisibleColumns, "0 1 2 3 4 5 6 7" ) ); + &m_EditSymbolVisibleColumns, "0 1 2 3 4 5 6 7" ) ); m_params.emplace_back( new PARAM( "pin_table_visible_columns", - &m_PinTableVisibleColumns, "0 1 2 3 4 5 9 10" ) ); + &m_PinTableVisibleColumns, "0 1 2 3 4 5 9 10" ) ); m_params.emplace_back( new PARAM( "use_eeschema_color_settings", - &m_UseEeschemaColorSettings, true ) ); + &m_UseEeschemaColorSettings, true ) ); - m_params.emplace_back( new PARAM_MAP( "field_editor.field_widths", &m_LibFieldEditor.field_widths, {} ) ); + m_params.emplace_back( new PARAM_MAP( "lib_field_editor.field_widths", + &m_LibFieldEditor.field_widths, {} ) ); - m_params.emplace_back( new PARAM( "field_editor.width", &m_LibFieldEditor.width, 0 ) ); + m_params.emplace_back( new PARAM( "lib_field_editor.view_controls_visible_columns", + &m_LibFieldEditor.view_controls_visible_columns, "0 2 3" ) ); - m_params.emplace_back( new PARAM( "field_editor.height", &m_LibFieldEditor.height, 0 ) ); + m_params.emplace_back( new PARAM( "lib_field_editor.sash_pos", + &m_LibFieldEditor.sash_pos, 400 ) ); m_params.emplace_back( new PARAM_LAMBDA( "selection_filter", diff --git a/eeschema/symbol_editor/symbol_editor_settings.h b/eeschema/symbol_editor/symbol_editor_settings.h index 426ec70b09..e77b4702da 100644 --- a/eeschema/symbol_editor/symbol_editor_settings.h +++ b/eeschema/symbol_editor/symbol_editor_settings.h @@ -65,11 +65,11 @@ public: int dxf_units; }; - struct LIB_FIELD_EDITOR + struct PANEL_LIB_FIELDS_TABLE { std::map field_widths; - int width; - int height; + wxString view_controls_visible_columns; + int sash_pos; }; SYMBOL_EDITOR_SETTINGS(); @@ -106,7 +106,7 @@ public: SCH_SELECTION_FILTER_OPTIONS m_SelectionFilter; - LIB_FIELD_EDITOR m_LibFieldEditor; + PANEL_LIB_FIELDS_TABLE m_LibFieldEditor; protected: diff --git a/eeschema/tools/symbol_editor_control.cpp b/eeschema/tools/symbol_editor_control.cpp index 318d874117..ee17a3f91c 100644 --- a/eeschema/tools/symbol_editor_control.cpp +++ b/eeschema/tools/symbol_editor_control.cpp @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include // To open with a text editor #include #include @@ -117,14 +117,6 @@ bool SYMBOL_EDITOR_CONTROL::Init() return false; }; -/* not used, but used to be used - auto multiSelectedCondition = - [this]( const SELECTION& aSel ) - { - SYMBOL_EDIT_FRAME* editFrame = getEditFrame(); - return editFrame && editFrame->GetTreeSelectionCount() > 1; - }; -*/ auto multiSymbolSelectedCondition = [this]( const SELECTION& aSel ) { @@ -178,29 +170,6 @@ bool SYMBOL_EDITOR_CONTROL::Init() }; - auto librarySelectedCondition = [this]( const SELECTION& aSel ) -> bool - { - bool result = false; - LIB_TREE* libTree = m_frame->GetLibTree(); - - if( libTree ) - { - std::vector selection; - libTree->GetSelectedTreeNodes( selection ); - - if( selection.size() == 1 ) - { - const LIB_TREE_NODE* lib = selection[0]; - if( lib && lib->m_Type == LIB_TREE_NODE::TYPE::LIBRARY ) - { - result = true; - } - } - } - - return result; - }; - // clang-format off ctxMenu.AddItem( SCH_ACTIONS::newSymbol, libInferredCondition, 10 ); ctxMenu.AddItem( SCH_ACTIONS::deriveFromExistingSymbol, symbolSelectedCondition, 10 ); @@ -240,8 +209,8 @@ bool SYMBOL_EDITOR_CONTROL::Init() ctxMenu.AddItem( ACTIONS::openDirectory, canOpenExternally && ( symbolSelectedCondition || libSelectedCondition ), 200 ); } - ctxMenu.AddItem( ACTIONS::showLibraryTable, librarySelectedCondition, 300 ); - ctxMenu.AddItem( ACTIONS::showRelatedLibraryTable, symbolSelectedCondition, 300 ); + ctxMenu.AddItem( ACTIONS::showLibraryFieldsTable, libInferredCondition, 300 ); + ctxMenu.AddItem( ACTIONS::showRelatedLibraryFieldsTable, symbolSelectedCondition, 300 ); libraryTreeTool->AddContextMenuItems( &ctxMenu ); } @@ -974,33 +943,13 @@ int SYMBOL_EDITOR_CONTROL::ChangeUnit( const TOOL_EVENT& aEvent ) int SYMBOL_EDITOR_CONTROL::ShowLibraryTable( const TOOL_EVENT& aEvent ) { - SYMBOL_EDIT_FRAME* editFrame = getEditFrame(); - LIB_SYMBOL_LIBRARY_MANAGER& libMgr = editFrame->GetLibManager(); - wxString libName = editFrame->GetTreeLIBID().GetLibNickname(); - wxArrayString symbolNames; + DIALOG_LIB_FIELDS_TABLE::SCOPE scope = DIALOG_LIB_FIELDS_TABLE::SCOPE_LIBRARY; - if( aEvent.IsAction( &ACTIONS::showRelatedLibraryTable ) ) - { - LIB_ID symId = editFrame->GetTargetLibId(); + if( aEvent.IsAction( &ACTIONS::showRelatedLibraryFieldsTable ) ) + scope = DIALOG_LIB_FIELDS_TABLE::SCOPE_RELATED_SYMBOLS; - const LIB_SYMBOL* sym = libMgr.GetBufferedSymbol( symId.GetLibItemName(), libName ); - wxCHECK_MSG( sym, 0, _( "Failed to find symbol" ) ); + DIALOG_LIB_FIELDS_TABLE dlg( getEditFrame(), scope ); - LIB_SYMBOL_SPTR root = sym->GetRootSymbol(); - wxCHECK_MSG( root, 0, _( "Failed to find root symbol" ) ); - - symbolNames.Add( root->GetName() ); - // Now we have the root symbol, collect all its derived symbols - libMgr.GetDerivedSymbolNames( root->GetName(), libName, symbolNames ); - } - else - { - // Get all symbol names from the library manager - editFrame->GetLibManager().GetSymbolNames( libName, symbolNames ); - } - - DIALOG_LIB_FIELDS dlg( editFrame, libName, symbolNames ); - dlg.SetTitle( _( "Library Fields" ) ); dlg.ShowModal(); return 0; } @@ -1052,8 +1001,8 @@ void SYMBOL_EDITOR_CONTROL::setTransitions() Go( &SYMBOL_EDITOR_CONTROL::ToggleHiddenFields, SCH_ACTIONS::showHiddenFields.MakeEvent() ); Go( &SYMBOL_EDITOR_CONTROL::TogglePinAltIcons, SCH_ACTIONS::togglePinAltIcons.MakeEvent() ); - Go( &SYMBOL_EDITOR_CONTROL::ShowLibraryTable, ACTIONS::showLibraryTable.MakeEvent() ); - Go( &SYMBOL_EDITOR_CONTROL::ShowLibraryTable, ACTIONS::showRelatedLibraryTable.MakeEvent() ); + Go( &SYMBOL_EDITOR_CONTROL::ShowLibraryTable, ACTIONS::showLibraryFieldsTable.MakeEvent() ); + Go( &SYMBOL_EDITOR_CONTROL::ShowLibraryTable, ACTIONS::showRelatedLibraryFieldsTable.MakeEvent() ); Go( &SYMBOL_EDITOR_CONTROL::ChangeUnit, SCH_ACTIONS::previousUnit.MakeEvent() ); Go( &SYMBOL_EDITOR_CONTROL::ChangeUnit, SCH_ACTIONS::nextUnit.MakeEvent() ); diff --git a/include/tool/actions.h b/include/tool/actions.h index 92b50db9ff..202998cd71 100644 --- a/include/tool/actions.h +++ b/include/tool/actions.h @@ -264,8 +264,8 @@ public: static TOOL_ACTION updateSchematicFromPcb; static TOOL_ACTION showProperties; static TOOL_ACTION showDatasheet; - static TOOL_ACTION showLibraryTable; - static TOOL_ACTION showRelatedLibraryTable; + static TOOL_ACTION showLibraryFieldsTable; + static TOOL_ACTION showRelatedLibraryFieldsTable; // Internal static TOOL_ACTION updateMenu; diff --git a/pcbnew/dialogs/panel_fp_lib_table_base.cpp b/pcbnew/dialogs/panel_fp_lib_table_base.cpp index 5049859d77..ce89a15a6a 100644 --- a/pcbnew/dialogs/panel_fp_lib_table_base.cpp +++ b/pcbnew/dialogs/panel_fp_lib_table_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf0) +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -154,7 +154,7 @@ PANEL_FP_LIB_TABLE_BASE::PANEL_FP_LIB_TABLE_BASE( wxWindow* parent, wxWindowID i bButtonsSizer->Add( 20, 0, 1, wxEXPAND, 5 ); m_resetGlobal = new wxButton( this, wxID_ANY, _("Reset Libraries"), wxDefaultPosition, wxDefaultSize, 0 ); - bButtonsSizer->Add( m_resetGlobal, 0, wxALL, 5 ); + bButtonsSizer->Add( m_resetGlobal, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); bButtonsSizer->Add( 0, 0, 0, wxEXPAND, 5 ); diff --git a/pcbnew/dialogs/panel_fp_lib_table_base.fbp b/pcbnew/dialogs/panel_fp_lib_table_base.fbp index c92a0974fa..c635e78b09 100644 --- a/pcbnew/dialogs/panel_fp_lib_table_base.fbp +++ b/pcbnew/dialogs/panel_fp_lib_table_base.fbp @@ -1,34 +1,36 @@ - + - C++ - 1 - source_name - 0 - 0 + + 1 + connect + none + + + 0 + 0 res UTF-8 - connect panel_fp_lib_table_base 1000 - none - - 1 + 1 + UI panel_fp_lib_table - . - + 0 + source_name + 1 + 0 + source_name + + + 1 1 - 1 - 1 - 1 - UI - 0 - 0 0 + 0 0 wxAUI_MGR_DEFAULT @@ -68,10 +70,10 @@ 1 1 1 - + 0 - - + 0 + 0 @@ -127,10 +129,10 @@ 1 1 1 - + 0 - - + 0 + 0 @@ -188,10 +190,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 0 @@ -280,10 +282,10 @@ 1 1 1 - + 0 - - + 0 + 0 @@ -341,10 +343,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 0 @@ -444,10 +446,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 @@ -519,10 +521,10 @@ 1 1 1 - + 0 - - + 0 + 0 @@ -582,10 +584,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 @@ -657,10 +659,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 @@ -742,10 +744,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 @@ -820,17 +822,17 @@ 5 - wxALL + wxALL|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 - + 0 - - + 0 + 0 0 @@ -912,10 +914,10 @@ 1 1 1 - + 0 - - + 0 + 0 0 @@ -989,10 +991,10 @@ 1 1 1 - + 0 - - + 0 + 0 @@ -1061,10 +1063,10 @@ 1 1 1 - + 0 - - + 0 + 0 1 0 diff --git a/pcbnew/dialogs/panel_fp_lib_table_base.h b/pcbnew/dialogs/panel_fp_lib_table_base.h index c88bfc97c7..f2ce9082b1 100644 --- a/pcbnew/dialogs/panel_fp_lib_table_base.h +++ b/pcbnew/dialogs/panel_fp_lib_table_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf0) +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -32,7 +32,6 @@ class WX_GRID; /////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////// /// Class PANEL_FP_LIB_TABLE_BASE ///////////////////////////////////////////////////////////////////////////////