← Back to team overview

kicad-developers team mailing list archive

[PATCH] Eeschema options step 2: template fields

 

Hi,

This patch reimplements the Template/Default Fields page in the Eeschema 
options using wxGrid, making the table directly user-editable and 
removing the somewhat dodgy code for the separate edit panel. This fixes 
<https://bugs.launchpad.net/kicad/+bug/1527309> as well as, IMO, making 
this dialog much more user-friendly. The field options have also been 
upgraded to use the newer TransferData{To,From}Window methods.

Step 3 will be to pull the hotkey manager into this dialog.

--
Chris

commit adbcf1f43904733325965443d350a54a2d3cab68
Author: Chris Pavlina <cpavlin1@xxxxxxxxxxxxxx>
Date:   Sun Dec 27 13:22:29 2015 -0500

    Reimplement template fields options

diff --git a/eeschema/dialogs/dialog_eeschema_options.cpp b/eeschema/dialogs/dialog_eeschema_options.cpp
index 6ee6480..c962ff2 100644
--- a/eeschema/dialogs/dialog_eeschema_options.cpp
+++ b/eeschema/dialogs/dialog_eeschema_options.cpp
@@ -42,25 +42,13 @@ DIALOG_EESCHEMA_OPTIONS::DIALOG_EESCHEMA_OPTIONS( wxWindow* parent ) :
     // Dialog should not shrink beyond it's minimal size.
     GetSizer()->SetSizeHints( this );
 
-    wxListItem col0;
-    col0.SetId( 0 );
-    col0.SetText( _( "Field Name" ) );
-
-    wxListItem col1;
-    col1.SetId( 1 );
-    col1.SetText( _( "Default Value" ) );
-
-    wxListItem col2;
-    col2.SetId( 2 );
-    col2.SetText( _( "Visible" ) );
-
-    templateFieldListCtrl->InsertColumn( 0, col0 );
-    templateFieldListCtrl->InsertColumn( 1, col1 );
-    templateFieldListCtrl->InsertColumn( 2, col2 );
-
-    templateFieldListCtrl->SetColumnWidth( 0, templateFieldListCtrl->GetSize().GetWidth() / 3.5 );
-    templateFieldListCtrl->SetColumnWidth( 1, templateFieldListCtrl->GetSize().GetWidth() / 3.5 );
-    templateFieldListCtrl->SetColumnWidth( 2, templateFieldListCtrl->GetSize().GetWidth() / 3.5 );
+    // wxformbuilder doesn't seem to let us set minimal sizes. Copy the default
+    // sizes into the minimal sizes, then, and autosize:
+    for( int i = 0; i < m_fieldGrid->GetNumberCols(); ++i )
+    {
+        m_fieldGrid->SetColMinimalWidth( i, m_fieldGrid->GetColSize( i ) );
+        m_fieldGrid->AutoSizeColLabelSize( i );
+    }
 
     // Invalid field selected
     selectedField = -1;
@@ -68,14 +56,6 @@ DIALOG_EESCHEMA_OPTIONS::DIALOG_EESCHEMA_OPTIONS( wxWindow* parent ) :
     // Make sure we select the first tab of the options tab page
     m_notebook->SetSelection( 0 );
 
-    // Connect the edit controls for the template field names to the kill focus event which
-    // doesn't propogate, hence the need to connect it here.
-
-    fieldNameTextCtrl->Connect( wxEVT_KILL_FOCUS,
-            wxFocusEventHandler( DIALOG_EESCHEMA_OPTIONS::OnEditControlKillFocus ), NULL, this );
-
-    fieldDefaultValueTextCtrl->Connect( wxEVT_KILL_FOCUS,
-            wxFocusEventHandler( DIALOG_EESCHEMA_OPTIONS::OnEditControlKillFocus ), NULL, this );
 }
 
 
@@ -161,86 +141,40 @@ void DIALOG_EESCHEMA_OPTIONS::SetGridSizes( const GRIDS& aGridSizes, int aGridId
 }
 
 
-void DIALOG_EESCHEMA_OPTIONS::RefreshTemplateFieldView( void )
+void DIALOG_EESCHEMA_OPTIONS::OnAddButtonClick( wxCommandEvent& event )
 {
-    // Loop through the template fieldnames and add them to the list control
-    // or just change texts if room exists
-    long itemindex = 0;
-    wxString tmp;
+    // If a single row is selected, insert after that row.
+    int selected_row = -1;
+    int n_found = 0;
 
-    for( TEMPLATE_FIELDNAMES::iterator fld = templateFields.begin();
-            fld != templateFields.end(); ++fld, itemindex++ )
+    for( int row = 0; row < templateFields.size(); ++row )
     {
-        if( templateFieldListCtrl->GetItemCount() <= itemindex )
+        bool this_row_selected = false;
+        for( int col = 0; col < m_fieldGrid->GetNumberCols(); ++col )
         {
-            templateFieldListCtrl->InsertItem(
-                templateFieldListCtrl->GetItemCount(), fld->m_Name );
+            if( m_fieldGrid->IsInSelection( row, col ) )
+                this_row_selected = true;
+        }
+        if( this_row_selected && selected_row == -1 )
+        {
+            selected_row = row;
+            ++n_found;
         }
-
-        wxListItem litem;
-        litem.SetId( itemindex );
-        templateFieldListCtrl->GetItem( litem );
-
-        litem.SetColumn( 0 );
-        if( litem.GetText() != fld->m_Name )
-            templateFieldListCtrl->SetItem( itemindex, 0, fld->m_Name );
-
-        litem.SetColumn( 1 );
-        if( litem.GetText() != fld->m_Value )
-            templateFieldListCtrl->SetItem( itemindex, 1, fld->m_Value );
-
-        tmp = ( fld->m_Visible == true ) ? _( "Visible" ) : _( "Hidden" );
-
-        litem.SetColumn( 2 );
-        if(  litem.GetText() != tmp )
-            templateFieldListCtrl->SetItem( itemindex, 2, tmp );
-    }
-
-    // Remove extra items:
-    while( templateFieldListCtrl->GetItemCount() > itemindex )
-    {
-        templateFieldListCtrl->DeleteItem( itemindex );
     }
 
-}
-
-
-void DIALOG_EESCHEMA_OPTIONS::SelectTemplateField( int aItem )
-{
-    // Only select valid items!
-    if( ( aItem < 0 ) || ( aItem >= templateFieldListCtrl->GetItemCount() ) )
-        return;
-
-    // Make sure we select the new item in list control
-    if( templateFieldListCtrl->GetFirstSelected() != aItem )
-        templateFieldListCtrl->Select( aItem, true );
-}
-
+    TEMPLATE_FIELDNAMES::iterator pos;
 
-void DIALOG_EESCHEMA_OPTIONS::OnAddButtonClick( wxCommandEvent& event )
-{
-    // If there is currently a valid selection, copy the edit panel to the
-    // selected field so as not to lose the data
-    if( fieldSelectionValid( selectedField ) )
-        copyPanelToSelected();
+    if( n_found == 1 )
+        pos = templateFields.begin() + selected_row + 1;
+    else
+        pos = templateFields.end();
 
     // Add a new fieldname to the fieldname list
     TEMPLATE_FIELDNAME newFieldname = TEMPLATE_FIELDNAME( "Fieldname" );
     newFieldname.m_Value = wxT( "Value" );
     newFieldname.m_Visible = false;
-    templateFields.push_back( newFieldname );
-
-    // Select the newly added field and then copy that data to the edit panel.
-    // Make sure any previously selected state is cleared and then select the
-    // new field
-    selectedField = templateFields.size() - 1;
-
-    // Update the display to reflect the new data
-    RefreshTemplateFieldView();
-    copySelectedToPanel();
-
-    // Make sure we select the new item
-    SelectTemplateField( selectedField );
+    templateFields.insert( pos, newFieldname );
+    TransferDataToWindow();
 
     event.Skip();
 }
@@ -248,97 +182,70 @@ void DIALOG_EESCHEMA_OPTIONS::OnAddButtonClick( wxCommandEvent& event )
 
 void DIALOG_EESCHEMA_OPTIONS::OnDeleteButtonClick( wxCommandEvent& event )
 {
-    // If there is currently a valid selection, delete the template field from
-    // the template field list
-    if( fieldSelectionValid( selectedField ) )
-    {
-        // Delete the fieldname from the fieldname list
-        templateFields.erase( templateFields.begin() + selectedField );
-
-        // If the selectedField is still not in the templateField range now,
-        // make sure we stay in range and when there are no fields present
-        // move to -1
-        if( selectedField >= int( templateFields.size() ) )
-            selectedField = templateFields.size() - 1;
+    // wxGrid has a somewhat complex way of detemining selection.
+    // This is pretty much the easiest way to do it, here.
 
-        // Update the display to reflect the new data
-        RefreshTemplateFieldView();
+    std::vector<bool> rows_to_delete( templateFields.size(), false );
 
-        copySelectedToPanel();
-
-        // Make sure after the refresh that the selected item is correct
-        SelectTemplateField( selectedField );
+    for( int row = 0; row < templateFields.size(); ++row )
+    {
+        for( int col = 0; col < m_fieldGrid->GetNumberCols(); ++col )
+        {
+            if( m_fieldGrid->IsInSelection( row, col ) )
+                rows_to_delete[row] = true;
+        }
     }
-}
 
-
-void DIALOG_EESCHEMA_OPTIONS::copyPanelToSelected( void )
-{
-    if( !fieldSelectionValid( selectedField ) )
-        return;
-
-    // Update the template field from the edit panel
-    templateFields[selectedField].m_Name = fieldNameTextCtrl->GetValue();
-    templateFields[selectedField].m_Value = fieldDefaultValueTextCtrl->GetValue();
-    templateFields[selectedField].m_Visible = fieldVisibleCheckbox->GetValue();
+    m_fieldGrid->Freeze();
+    for( int count = 0; count < rows_to_delete.size(); ++count )
+    {
+        // Iterate backwards, unsigned-friendly way for future
+        int row = rows_to_delete.size() - count - 1;
+        if( rows_to_delete[row] )
+        {
+            m_fieldGrid->DeleteRows( row, 1 );
+            templateFields.erase( templateFields.begin() + row );
+        }
+    }
+    m_fieldGrid->Thaw();
 }
 
 
-void DIALOG_EESCHEMA_OPTIONS::OnEditControlKillFocus( wxFocusEvent& event )
+bool DIALOG_EESCHEMA_OPTIONS::TransferDataToWindow()
 {
-    // Update the data + UI
-    copyPanelToSelected();
-    RefreshTemplateFieldView();
-    SelectTemplateField( selectedField );
+    if( !wxDialog::TransferDataToWindow() )
+        return false;
 
-    event.Skip();
-}
+    if( m_fieldGrid->GetNumberRows() )
+        m_fieldGrid->DeleteRows( 0, m_fieldGrid->GetNumberRows() );
+    m_fieldGrid->AppendRows( templateFields.size() );
 
-void DIALOG_EESCHEMA_OPTIONS::OnEnterKey( wxCommandEvent& event )
-{
-    // Process the event produced when the user presses enter key
-    // in template fieldname text control or template fieldvalue text control
-    // Validate the current name or value, and switch focus to the other param
-    // (value or name)
-    copyPanelToSelected();
-    RefreshTemplateFieldView();
-
-    if( fieldNameTextCtrl->HasFocus() )
-        fieldDefaultValueTextCtrl->SetFocus();
-    else
-        fieldNameTextCtrl->SetFocus();
-}
-
-
-void DIALOG_EESCHEMA_OPTIONS::OnVisibleFieldClick( wxCommandEvent& event )
-{
-    // Process the event produced when the user click on
-    // the check box which controls the field visibility
-    copyPanelToSelected();
-    RefreshTemplateFieldView();
-}
-
-void DIALOG_EESCHEMA_OPTIONS::copySelectedToPanel( void )
-{
-    if( !fieldSelectionValid( selectedField ) )
-        return;
+    for( int row = 0; row < templateFields.size(); ++row )
+    {
+        m_fieldGrid->SetCellValue( row, 0, templateFields[row].m_Name );
+        m_fieldGrid->SetCellValue( row, 1, templateFields[row].m_Value );
+        m_fieldGrid->SetCellValue( row, 2,
+                templateFields[row].m_Visible ? wxT( "1" ) : wxEmptyString );
+
+        // Render the Visible column as a check box
+        m_fieldGrid->SetCellEditor( row, 2, new wxGridCellBoolEditor() );
+        m_fieldGrid->SetCellRenderer( row, 2, new wxGridCellBoolRenderer() );
+        m_fieldGrid->SetCellAlignment( row, 2, wxALIGN_CENTRE, wxALIGN_CENTRE );
+    }
 
-    // Update the panel data from the selected template field
-    fieldNameTextCtrl->SetValue( templateFields[selectedField].m_Name );
-    fieldDefaultValueTextCtrl->SetValue( templateFields[selectedField].m_Value );
-    fieldVisibleCheckbox->SetValue( templateFields[selectedField].m_Visible );
+    return true;
 }
 
 
-void DIALOG_EESCHEMA_OPTIONS::OnTemplateFieldSelected( wxListEvent& event )
+bool DIALOG_EESCHEMA_OPTIONS::TransferDataFromWindow()
 {
-    // Before getting the new field data, make sure we save the old!
-    copyPanelToSelected();
-
-    // Now update the selected field and copy the data from the field to the
-    // edit panel
-    selectedField = event.GetIndex();
-    copySelectedToPanel();
+    for( int row = 0; row < templateFields.size(); ++row )
+    {
+        templateFields[row].m_Name = m_fieldGrid->GetCellValue( row, 0 );
+        templateFields[row].m_Value = m_fieldGrid->GetCellValue( row, 1 );
+        templateFields[row].m_Visible = ( m_fieldGrid->GetCellValue( row, 2 ) != wxEmptyString );
+    }
+    return true;
 }
 
 
@@ -347,18 +254,8 @@ void DIALOG_EESCHEMA_OPTIONS::SetTemplateFields( const TEMPLATE_FIELDNAMES& aFie
     // Set the template fields object
     templateFields = aFields;
 
-    // select the last field ( will set selectedField to -1 if no field ):
-    selectedField = templateFields.size()-1;
-
     // Build and refresh the view
-    RefreshTemplateFieldView();
-
-    if( selectedField >= 0 )
-    {
-        copySelectedToPanel();
-        SelectTemplateField( selectedField );
-    }
-
+    TransferDataToWindow();
 }
 
 
diff --git a/eeschema/dialogs/dialog_eeschema_options.h b/eeschema/dialogs/dialog_eeschema_options.h
index 71d575b..85dfd2c 100644
--- a/eeschema/dialogs/dialog_eeschema_options.h
+++ b/eeschema/dialogs/dialog_eeschema_options.h
@@ -54,20 +54,6 @@ protected:
     }
 
     /**
-     * Function OnEnterKey (virtual)
-     * Process the wxWidgets @a event produced when the user presses enter key
-     * in template fieldname text control or template fieldvalue text control
-     */
-    void OnEnterKey( wxCommandEvent& event );
-
-    /**
-     * Function OnVisibleFieldClick (virtual)
-     * Process the wxWidgets @a event produced when the user click on
-     * the check box which controls the field visibility
-     */
-    void OnVisibleFieldClick( wxCommandEvent& event );
-
-    /**
      * Function OnAddButtonClick
      * Process the wxWidgets @a event produced when the user presses the Add buton for the
      * template fieldnames control
@@ -90,65 +76,16 @@ protected:
     void OnDeleteButtonClick( wxCommandEvent& event );
 
     /**
-     * Function OnEditControlKillFocus
-     * This Focus Event Handler should be connected to any controls in the template field edit box
-     * so that any loss of focus results in the data being saved to the currently selected template
-     * field
-     *
-     * @param event The wxWidgets produced event information
-     *
-     * Copies data from the edit box to the selected field template
-     */
-    void OnEditControlKillFocus( wxFocusEvent& event );
-
-    /**
-     * Function copyPanelToSelected
-     * Copies the data from the edit panel to the selected template fieldname
-     */
-    void copyPanelToSelected( void );
-
-    /**
-     * Function copySelectedToPanel
-     * Copies the data from the selected template fieldname and fills in the edit panel
-     */
-    void copySelectedToPanel( void );
-
-    /**
-     * Function OnTemplateFieldSelected
-     * Event handler for the wxListCtrl containing the template fieldnames
-     *
-     * @param event The event information provided by wxWidgets
-     *
-     * Processes data exchange between the edit panel and the selected template fieldname
-     */
-    void OnTemplateFieldSelected( wxListEvent& event );
-
-    /**
-     * Function RefreshTemplateFieldView
-     * Refresh the template fieldname wxListCtrl
-     *
-     * Deletes all data from the wxListCtrl and then re-polpulates the control with the data in
-     * the template fieldnames.
-     *
-     * Use any time the template field data has changed
+     * Function TransferDataToWindow
+     * Transfer data into the GUI.
      */
-    void RefreshTemplateFieldView( void );
+    bool TransferDataToWindow();
 
     /**
-     * Function SelectTemplateField
-     * Selects @a aItem from the wxListCtrl populated with the template fieldnames
-     *
-     * @param aItem The item index of the row to be selected
-     *
-     * When RefreshTemplateFieldView() is used the selection is lost because all of the items are
-     * removed from the wxListCtrl and then the control is re-populated. This function can be used
-     * to re-select an item that was previously selected so that the selection is not lost.
-     *
-     * <b>NOTE:</b> This function first sets the ignoreSelection flag before making the selection.
-     * This means the class can select something in the wxListCtrl without causing further
-     * selection events.
+     * Function TransferDataFromWindow
+     * Transfer data out of the GUI.
      */
-    void SelectTemplateField( int aItem );
+    bool TransferDataFromWindow();
 
 public:
     /**
diff --git a/eeschema/dialogs/dialog_eeschema_options_base.cpp b/eeschema/dialogs/dialog_eeschema_options_base.cpp
index 0a9ffe2..2e6bf12 100644
--- a/eeschema/dialogs/dialog_eeschema_options_base.cpp
+++ b/eeschema/dialogs/dialog_eeschema_options_base.cpp
@@ -13,11 +13,6 @@ BEGIN_EVENT_TABLE( DIALOG_EESCHEMA_OPTIONS_BASE, DIALOG_SHIM )
 	EVT_SIZE( DIALOG_EESCHEMA_OPTIONS_BASE::_wxFB_OnSize )
 	EVT_CHOICE( wxID_ANY, DIALOG_EESCHEMA_OPTIONS_BASE::_wxFB_OnChooseUnits )
 	EVT_CHECKBOX( xwID_ANY, DIALOG_EESCHEMA_OPTIONS_BASE::_wxFB_OnMiddleBtnPanEnbl )
-	EVT_LIST_ITEM_DESELECTED( wxID_ANY, DIALOG_EESCHEMA_OPTIONS_BASE::_wxFB_OnTemplateFieldDeselected )
-	EVT_LIST_ITEM_SELECTED( wxID_ANY, DIALOG_EESCHEMA_OPTIONS_BASE::_wxFB_OnTemplateFieldSelected )
-	EVT_TEXT_ENTER( wxID_ANY, DIALOG_EESCHEMA_OPTIONS_BASE::_wxFB_OnEnterKey )
-	EVT_TEXT_ENTER( wxID_ANY, DIALOG_EESCHEMA_OPTIONS_BASE::_wxFB_OnEnterKey )
-	EVT_CHECKBOX( wxID_ANY, DIALOG_EESCHEMA_OPTIONS_BASE::_wxFB_OnVisibleFieldClick )
 	EVT_BUTTON( wxID_ADD_FIELD, DIALOG_EESCHEMA_OPTIONS_BASE::_wxFB_OnAddButtonClick )
 	EVT_BUTTON( wxID_DELETE_FIELD, DIALOG_EESCHEMA_OPTIONS_BASE::_wxFB_OnDeleteButtonClick )
 END_EVENT_TABLE()
@@ -292,39 +287,39 @@ DIALOG_EESCHEMA_OPTIONS_BASE::DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wx
 	wxBoxSizer* bSizer11;
 	bSizer11 = new wxBoxSizer( wxVERTICAL );
 	
-	templateFieldListCtrl = new wxListView( m_panel2, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VRULES );
-	templateFieldListCtrl->SetMinSize( wxSize( 500,-1 ) );
-	
-	bSizer11->Add( templateFieldListCtrl, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 8 );
-	
-	wxFlexGridSizer* fgSizer4;
-	fgSizer4 = new wxFlexGridSizer( 0, 2, 0, 0 );
-	fgSizer4->AddGrowableCol( 1 );
-	fgSizer4->SetFlexibleDirection( wxBOTH );
-	fgSizer4->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-	
-	fieldNameLabel = new wxStaticText( m_panel2, wxID_ANY, _("Na&me"), wxDefaultPosition, wxDefaultSize, 0 );
-	fieldNameLabel->Wrap( -1 );
-	fgSizer4->Add( fieldNameLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
-	
-	fieldNameTextCtrl = new wxTextCtrl( m_panel2, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
-	fgSizer4->Add( fieldNameTextCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
-	
-	fieldDefaultValueLabel = new wxStaticText( m_panel2, wxID_ANY, _("Defa&ult Value"), wxDefaultPosition, wxDefaultSize, 0 );
-	fieldDefaultValueLabel->Wrap( -1 );
-	fgSizer4->Add( fieldDefaultValueLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
-	
-	fieldDefaultValueTextCtrl = new wxTextCtrl( m_panel2, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
-	fgSizer4->Add( fieldDefaultValueTextCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
-	
-	fieldVisibleCheckbox = new wxCheckBox( m_panel2, wxID_ANY, _("&Visible"), wxDefaultPosition, wxDefaultSize, 0 );
-	fgSizer4->Add( fieldVisibleCheckbox, 0, wxALL, 5 );
-	
-	
-	fgSizer4->Add( 0, 0, 1, wxEXPAND, 5 );
-	
-	
-	bSizer11->Add( fgSizer4, 0, wxEXPAND, 5 );
+	m_fieldGrid = new wxGrid( m_panel2, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+	
+	// Grid
+	m_fieldGrid->CreateGrid( 0, 3 );
+	m_fieldGrid->EnableEditing( true );
+	m_fieldGrid->EnableGridLines( true );
+	m_fieldGrid->EnableDragGridSize( false );
+	m_fieldGrid->SetMargins( 0, 0 );
+	
+	// Columns
+	m_fieldGrid->SetColSize( 0, 150 );
+	m_fieldGrid->SetColSize( 1, 150 );
+	m_fieldGrid->SetColSize( 2, 75 );
+	m_fieldGrid->EnableDragColMove( false );
+	m_fieldGrid->EnableDragColSize( true );
+	m_fieldGrid->SetColLabelSize( 30 );
+	m_fieldGrid->SetColLabelValue( 0, _("Name") );
+	m_fieldGrid->SetColLabelValue( 1, _("Default Value") );
+	m_fieldGrid->SetColLabelValue( 2, _("Visible") );
+	m_fieldGrid->SetColLabelValue( 3, _("Name") );
+	m_fieldGrid->SetColLabelValue( 4, wxEmptyString );
+	m_fieldGrid->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
+	
+	// Rows
+	m_fieldGrid->EnableDragRowSize( true );
+	m_fieldGrid->SetRowLabelSize( 80 );
+	m_fieldGrid->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
+	
+	// Label Appearance
+	
+	// Cell Defaults
+	m_fieldGrid->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP );
+	bSizer11->Add( m_fieldGrid, 1, wxALL|wxEXPAND, 5 );
 	
 	
 	bSizer6->Add( bSizer11, 1, wxEXPAND, 5 );
diff --git a/eeschema/dialogs/dialog_eeschema_options_base.fbp b/eeschema/dialogs/dialog_eeschema_options_base.fbp
index 7184f15..fbbb3fc 100644
--- a/eeschema/dialogs/dialog_eeschema_options_base.fbp
+++ b/eeschema/dialogs/dialog_eeschema_options_base.fbp
@@ -4326,11 +4326,11 @@
                                                     <property name="name">bSizer11</property>
                                                     <property name="orient">wxVERTICAL</property>
                                                     <property name="permission">none</property>
-                                                    <object class="sizeritem" expanded="0">
-                                                        <property name="border">8</property>
-                                                        <property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP</property>
+                                                    <object class="sizeritem" expanded="1">
+                                                        <property name="border">5</property>
+                                                        <property name="flag">wxALL|wxEXPAND</property>
                                                         <property name="proportion">1</property>
-                                                        <object class="wxListCtrl" expanded="0">
+                                                        <object class="wxGrid" expanded="1">
                                                             <property name="BottomDockable">1</property>
                                                             <property name="LeftDockable">1</property>
                                                             <property name="RightDockable">1</property>
@@ -4339,33 +4339,58 @@
                                                             <property name="aui_name"></property>
                                                             <property name="aui_position"></property>
                                                             <property name="aui_row"></property>
+                                                            <property name="autosize_cols">0</property>
+                                                            <property name="autosize_rows">0</property>
                                                             <property name="best_size"></property>
                                                             <property name="bg"></property>
                                                             <property name="caption"></property>
                                                             <property name="caption_visible">1</property>
+                                                            <property name="cell_bg"></property>
+                                                            <property name="cell_font"></property>
+                                                            <property name="cell_horiz_alignment">wxALIGN_LEFT</property>
+                                                            <property name="cell_text"></property>
+                                                            <property name="cell_vert_alignment">wxALIGN_TOP</property>
                                                             <property name="center_pane">0</property>
                                                             <property name="close_button">1</property>
+                                                            <property name="col_label_horiz_alignment">wxALIGN_CENTRE</property>
+                                                            <property name="col_label_size">30</property>
+                                                            <property name="col_label_values">&quot;Name&quot; &quot;Default Value&quot; &quot;Visible&quot; &quot;Name&quot; &quot;&quot;</property>
+                                                            <property name="col_label_vert_alignment">wxALIGN_CENTRE</property>
+                                                            <property name="cols">3</property>
+                                                            <property name="column_sizes">150,150,75</property>
                                                             <property name="context_help"></property>
                                                             <property name="context_menu">1</property>
                                                             <property name="default_pane">0</property>
                                                             <property name="dock">Dock</property>
                                                             <property name="dock_fixed">0</property>
                                                             <property name="docking">Left</property>
+                                                            <property name="drag_col_move">0</property>
+                                                            <property name="drag_col_size">1</property>
+                                                            <property name="drag_grid_size">0</property>
+                                                            <property name="drag_row_size">1</property>
+                                                            <property name="editing">1</property>
                                                             <property name="enabled">1</property>
                                                             <property name="fg"></property>
                                                             <property name="floatable">1</property>
                                                             <property name="font"></property>
+                                                            <property name="grid_line_color"></property>
+                                                            <property name="grid_lines">1</property>
                                                             <property name="gripper">0</property>
                                                             <property name="hidden">0</property>
                                                             <property name="id">wxID_ANY</property>
+                                                            <property name="label_bg"></property>
+                                                            <property name="label_font"></property>
+                                                            <property name="label_text"></property>
+                                                            <property name="margin_height">0</property>
+                                                            <property name="margin_width">0</property>
                                                             <property name="max_size"></property>
                                                             <property name="maximize_button">0</property>
                                                             <property name="maximum_size"></property>
                                                             <property name="min_size"></property>
                                                             <property name="minimize_button">0</property>
-                                                            <property name="minimum_size">500,-1</property>
+                                                            <property name="minimum_size"></property>
                                                             <property name="moveable">1</property>
-                                                            <property name="name">templateFieldListCtrl</property>
+                                                            <property name="name">m_fieldGrid</property>
                                                             <property name="pane_border">1</property>
                                                             <property name="pane_position"></property>
                                                             <property name="pane_size"></property>
@@ -4373,22 +4398,55 @@
                                                             <property name="pin_button">1</property>
                                                             <property name="pos"></property>
                                                             <property name="resize">Resizable</property>
+                                                            <property name="row_label_horiz_alignment">wxALIGN_CENTRE</property>
+                                                            <property name="row_label_size">80</property>
+                                                            <property name="row_label_values"></property>
+                                                            <property name="row_label_vert_alignment">wxALIGN_CENTRE</property>
+                                                            <property name="row_sizes"></property>
+                                                            <property name="rows">0</property>
                                                             <property name="show">1</property>
                                                             <property name="size"></property>
-                                                            <property name="style">wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VRULES</property>
-                                                            <property name="subclass">wxListView; </property>
+                                                            <property name="subclass"></property>
                                                             <property name="toolbar_pane">0</property>
                                                             <property name="tooltip"></property>
-                                                            <property name="validator_data_type"></property>
-                                                            <property name="validator_style">wxFILTER_NONE</property>
-                                                            <property name="validator_type">wxDefaultValidator</property>
-                                                            <property name="validator_variable"></property>
                                                             <property name="window_extra_style"></property>
                                                             <property name="window_name"></property>
                                                             <property name="window_style"></property>
                                                             <event name="OnChar"></event>
                                                             <event name="OnEnterWindow"></event>
                                                             <event name="OnEraseBackground"></event>
+                                                            <event name="OnGridCellChange"></event>
+                                                            <event name="OnGridCellLeftClick"></event>
+                                                            <event name="OnGridCellLeftDClick"></event>
+                                                            <event name="OnGridCellRightClick"></event>
+                                                            <event name="OnGridCellRightDClick"></event>
+                                                            <event name="OnGridCmdCellChange"></event>
+                                                            <event name="OnGridCmdCellLeftClick"></event>
+                                                            <event name="OnGridCmdCellLeftDClick"></event>
+                                                            <event name="OnGridCmdCellRightClick"></event>
+                                                            <event name="OnGridCmdCellRightDClick"></event>
+                                                            <event name="OnGridCmdColSize"></event>
+                                                            <event name="OnGridCmdEditorCreated"></event>
+                                                            <event name="OnGridCmdEditorHidden"></event>
+                                                            <event name="OnGridCmdEditorShown"></event>
+                                                            <event name="OnGridCmdLabelLeftClick"></event>
+                                                            <event name="OnGridCmdLabelLeftDClick"></event>
+                                                            <event name="OnGridCmdLabelRightClick"></event>
+                                                            <event name="OnGridCmdLabelRightDClick"></event>
+                                                            <event name="OnGridCmdRangeSelect"></event>
+                                                            <event name="OnGridCmdRowSize"></event>
+                                                            <event name="OnGridCmdSelectCell"></event>
+                                                            <event name="OnGridColSize"></event>
+                                                            <event name="OnGridEditorCreated"></event>
+                                                            <event name="OnGridEditorHidden"></event>
+                                                            <event name="OnGridEditorShown"></event>
+                                                            <event name="OnGridLabelLeftClick"></event>
+                                                            <event name="OnGridLabelLeftDClick"></event>
+                                                            <event name="OnGridLabelRightClick"></event>
+                                                            <event name="OnGridLabelRightDClick"></event>
+                                                            <event name="OnGridRangeSelect"></event>
+                                                            <event name="OnGridRowSize"></event>
+                                                            <event name="OnGridSelectCell"></event>
                                                             <event name="OnKeyDown"></event>
                                                             <event name="OnKeyUp"></event>
                                                             <event name="OnKillFocus"></event>
@@ -4396,26 +4454,6 @@
                                                             <event name="OnLeftDClick"></event>
                                                             <event name="OnLeftDown"></event>
                                                             <event name="OnLeftUp"></event>
-                                                            <event name="OnListBeginDrag"></event>
-                                                            <event name="OnListBeginLabelEdit"></event>
-                                                            <event name="OnListBeginRDrag"></event>
-                                                            <event name="OnListCacheHint"></event>
-                                                            <event name="OnListColBeginDrag"></event>
-                                                            <event name="OnListColClick"></event>
-                                                            <event name="OnListColDragging"></event>
-                                                            <event name="OnListColEndDrag"></event>
-                                                            <event name="OnListColRightClick"></event>
-                                                            <event name="OnListDeleteAllItems"></event>
-                                                            <event name="OnListDeleteItem"></event>
-                                                            <event name="OnListEndLabelEdit"></event>
-                                                            <event name="OnListInsertItem"></event>
-                                                            <event name="OnListItemActivated"></event>
-                                                            <event name="OnListItemDeselected">OnTemplateFieldDeselected</event>
-                                                            <event name="OnListItemFocused"></event>
-                                                            <event name="OnListItemMiddleClick"></event>
-                                                            <event name="OnListItemRightClick"></event>
-                                                            <event name="OnListItemSelected">OnTemplateFieldSelected</event>
-                                                            <event name="OnListKeyDown"></event>
                                                             <event name="OnMiddleDClick"></event>
                                                             <event name="OnMiddleDown"></event>
                                                             <event name="OnMiddleUp"></event>
@@ -4431,470 +4469,6 @@
                                                             <event name="OnUpdateUI"></event>
                                                         </object>
                                                     </object>
-                                                    <object class="sizeritem" expanded="1">
-                                                        <property name="border">5</property>
-                                                        <property name="flag">wxEXPAND</property>
-                                                        <property name="proportion">0</property>
-                                                        <object class="wxFlexGridSizer" expanded="0">
-                                                            <property name="cols">2</property>
-                                                            <property name="flexible_direction">wxBOTH</property>
-                                                            <property name="growablecols">1</property>
-                                                            <property name="growablerows"></property>
-                                                            <property name="hgap">0</property>
-                                                            <property name="minimum_size"></property>
-                                                            <property name="name">fgSizer4</property>
-                                                            <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
-                                                            <property name="permission">none</property>
-                                                            <property name="rows">0</property>
-                                                            <property name="vgap">0</property>
-                                                            <object class="sizeritem" expanded="0">
-                                                                <property name="border">5</property>
-                                                                <property name="flag">wxLEFT|wxRIGHT|wxTOP</property>
-                                                                <property name="proportion">0</property>
-                                                                <object class="wxStaticText" expanded="0">
-                                                                    <property name="BottomDockable">1</property>
-                                                                    <property name="LeftDockable">1</property>
-                                                                    <property name="RightDockable">1</property>
-                                                                    <property name="TopDockable">1</property>
-                                                                    <property name="aui_layer"></property>
-                                                                    <property name="aui_name"></property>
-                                                                    <property name="aui_position"></property>
-                                                                    <property name="aui_row"></property>
-                                                                    <property name="best_size"></property>
-                                                                    <property name="bg"></property>
-                                                                    <property name="caption"></property>
-                                                                    <property name="caption_visible">1</property>
-                                                                    <property name="center_pane">0</property>
-                                                                    <property name="close_button">1</property>
-                                                                    <property name="context_help"></property>
-                                                                    <property name="context_menu">1</property>
-                                                                    <property name="default_pane">0</property>
-                                                                    <property name="dock">Dock</property>
-                                                                    <property name="dock_fixed">0</property>
-                                                                    <property name="docking">Left</property>
-                                                                    <property name="enabled">1</property>
-                                                                    <property name="fg"></property>
-                                                                    <property name="floatable">1</property>
-                                                                    <property name="font"></property>
-                                                                    <property name="gripper">0</property>
-                                                                    <property name="hidden">0</property>
-                                                                    <property name="id">wxID_ANY</property>
-                                                                    <property name="label">Na&amp;me</property>
-                                                                    <property name="max_size"></property>
-                                                                    <property name="maximize_button">0</property>
-                                                                    <property name="maximum_size"></property>
-                                                                    <property name="min_size"></property>
-                                                                    <property name="minimize_button">0</property>
-                                                                    <property name="minimum_size"></property>
-                                                                    <property name="moveable">1</property>
-                                                                    <property name="name">fieldNameLabel</property>
-                                                                    <property name="pane_border">1</property>
-                                                                    <property name="pane_position"></property>
-                                                                    <property name="pane_size"></property>
-                                                                    <property name="permission">protected</property>
-                                                                    <property name="pin_button">1</property>
-                                                                    <property name="pos"></property>
-                                                                    <property name="resize">Resizable</property>
-                                                                    <property name="show">1</property>
-                                                                    <property name="size"></property>
-                                                                    <property name="style"></property>
-                                                                    <property name="subclass"></property>
-                                                                    <property name="toolbar_pane">0</property>
-                                                                    <property name="tooltip"></property>
-                                                                    <property name="window_extra_style"></property>
-                                                                    <property name="window_name"></property>
-                                                                    <property name="window_style"></property>
-                                                                    <property name="wrap">-1</property>
-                                                                    <event name="OnChar"></event>
-                                                                    <event name="OnEnterWindow"></event>
-                                                                    <event name="OnEraseBackground"></event>
-                                                                    <event name="OnKeyDown"></event>
-                                                                    <event name="OnKeyUp"></event>
-                                                                    <event name="OnKillFocus"></event>
-                                                                    <event name="OnLeaveWindow"></event>
-                                                                    <event name="OnLeftDClick"></event>
-                                                                    <event name="OnLeftDown"></event>
-                                                                    <event name="OnLeftUp"></event>
-                                                                    <event name="OnMiddleDClick"></event>
-                                                                    <event name="OnMiddleDown"></event>
-                                                                    <event name="OnMiddleUp"></event>
-                                                                    <event name="OnMotion"></event>
-                                                                    <event name="OnMouseEvents"></event>
-                                                                    <event name="OnMouseWheel"></event>
-                                                                    <event name="OnPaint"></event>
-                                                                    <event name="OnRightDClick"></event>
-                                                                    <event name="OnRightDown"></event>
-                                                                    <event name="OnRightUp"></event>
-                                                                    <event name="OnSetFocus"></event>
-                                                                    <event name="OnSize"></event>
-                                                                    <event name="OnUpdateUI"></event>
-                                                                </object>
-                                                            </object>
-                                                            <object class="sizeritem" expanded="0">
-                                                                <property name="border">5</property>
-                                                                <property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
-                                                                <property name="proportion">0</property>
-                                                                <object class="wxTextCtrl" expanded="0">
-                                                                    <property name="BottomDockable">1</property>
-                                                                    <property name="LeftDockable">1</property>
-                                                                    <property name="RightDockable">1</property>
-                                                                    <property name="TopDockable">1</property>
-                                                                    <property name="aui_layer"></property>
-                                                                    <property name="aui_name"></property>
-                                                                    <property name="aui_position"></property>
-                                                                    <property name="aui_row"></property>
-                                                                    <property name="best_size"></property>
-                                                                    <property name="bg"></property>
-                                                                    <property name="caption"></property>
-                                                                    <property name="caption_visible">1</property>
-                                                                    <property name="center_pane">0</property>
-                                                                    <property name="close_button">1</property>
-                                                                    <property name="context_help"></property>
-                                                                    <property name="context_menu">1</property>
-                                                                    <property name="default_pane">0</property>
-                                                                    <property name="dock">Dock</property>
-                                                                    <property name="dock_fixed">0</property>
-                                                                    <property name="docking">Left</property>
-                                                                    <property name="enabled">1</property>
-                                                                    <property name="fg"></property>
-                                                                    <property name="floatable">1</property>
-                                                                    <property name="font"></property>
-                                                                    <property name="gripper">0</property>
-                                                                    <property name="hidden">0</property>
-                                                                    <property name="id">wxID_ANY</property>
-                                                                    <property name="max_size"></property>
-                                                                    <property name="maximize_button">0</property>
-                                                                    <property name="maximum_size"></property>
-                                                                    <property name="maxlength"></property>
-                                                                    <property name="min_size"></property>
-                                                                    <property name="minimize_button">0</property>
-                                                                    <property name="minimum_size"></property>
-                                                                    <property name="moveable">1</property>
-                                                                    <property name="name">fieldNameTextCtrl</property>
-                                                                    <property name="pane_border">1</property>
-                                                                    <property name="pane_position"></property>
-                                                                    <property name="pane_size"></property>
-                                                                    <property name="permission">protected</property>
-                                                                    <property name="pin_button">1</property>
-                                                                    <property name="pos"></property>
-                                                                    <property name="resize">Resizable</property>
-                                                                    <property name="show">1</property>
-                                                                    <property name="size"></property>
-                                                                    <property name="style">wxTE_PROCESS_ENTER</property>
-                                                                    <property name="subclass"></property>
-                                                                    <property name="toolbar_pane">0</property>
-                                                                    <property name="tooltip"></property>
-                                                                    <property name="validator_data_type"></property>
-                                                                    <property name="validator_style">wxFILTER_NONE</property>
-                                                                    <property name="validator_type">wxDefaultValidator</property>
-                                                                    <property name="validator_variable"></property>
-                                                                    <property name="value"></property>
-                                                                    <property name="window_extra_style"></property>
-                                                                    <property name="window_name"></property>
-                                                                    <property name="window_style"></property>
-                                                                    <event name="OnChar"></event>
-                                                                    <event name="OnEnterWindow"></event>
-                                                                    <event name="OnEraseBackground"></event>
-                                                                    <event name="OnKeyDown"></event>
-                                                                    <event name="OnKeyUp"></event>
-                                                                    <event name="OnKillFocus"></event>
-                                                                    <event name="OnLeaveWindow"></event>
-                                                                    <event name="OnLeftDClick"></event>
-                                                                    <event name="OnLeftDown"></event>
-                                                                    <event name="OnLeftUp"></event>
-                                                                    <event name="OnMiddleDClick"></event>
-                                                                    <event name="OnMiddleDown"></event>
-                                                                    <event name="OnMiddleUp"></event>
-                                                                    <event name="OnMotion"></event>
-                                                                    <event name="OnMouseEvents"></event>
-                                                                    <event name="OnMouseWheel"></event>
-                                                                    <event name="OnPaint"></event>
-                                                                    <event name="OnRightDClick"></event>
-                                                                    <event name="OnRightDown"></event>
-                                                                    <event name="OnRightUp"></event>
-                                                                    <event name="OnSetFocus"></event>
-                                                                    <event name="OnSize"></event>
-                                                                    <event name="OnText"></event>
-                                                                    <event name="OnTextEnter">OnEnterKey</event>
-                                                                    <event name="OnTextMaxLen"></event>
-                                                                    <event name="OnTextURL"></event>
-                                                                    <event name="OnUpdateUI"></event>
-                                                                </object>
-                                                            </object>
-                                                            <object class="sizeritem" expanded="0">
-                                                                <property name="border">5</property>
-                                                                <property name="flag">wxLEFT|wxRIGHT|wxTOP</property>
-                                                                <property name="proportion">0</property>
-                                                                <object class="wxStaticText" expanded="0">
-                                                                    <property name="BottomDockable">1</property>
-                                                                    <property name="LeftDockable">1</property>
-                                                                    <property name="RightDockable">1</property>
-                                                                    <property name="TopDockable">1</property>
-                                                                    <property name="aui_layer"></property>
-                                                                    <property name="aui_name"></property>
-                                                                    <property name="aui_position"></property>
-                                                                    <property name="aui_row"></property>
-                                                                    <property name="best_size"></property>
-                                                                    <property name="bg"></property>
-                                                                    <property name="caption"></property>
-                                                                    <property name="caption_visible">1</property>
-                                                                    <property name="center_pane">0</property>
-                                                                    <property name="close_button">1</property>
-                                                                    <property name="context_help"></property>
-                                                                    <property name="context_menu">1</property>
-                                                                    <property name="default_pane">0</property>
-                                                                    <property name="dock">Dock</property>
-                                                                    <property name="dock_fixed">0</property>
-                                                                    <property name="docking">Left</property>
-                                                                    <property name="enabled">1</property>
-                                                                    <property name="fg"></property>
-                                                                    <property name="floatable">1</property>
-                                                                    <property name="font"></property>
-                                                                    <property name="gripper">0</property>
-                                                                    <property name="hidden">0</property>
-                                                                    <property name="id">wxID_ANY</property>
-                                                                    <property name="label">Defa&amp;ult Value</property>
-                                                                    <property name="max_size"></property>
-                                                                    <property name="maximize_button">0</property>
-                                                                    <property name="maximum_size"></property>
-                                                                    <property name="min_size"></property>
-                                                                    <property name="minimize_button">0</property>
-                                                                    <property name="minimum_size"></property>
-                                                                    <property name="moveable">1</property>
-                                                                    <property name="name">fieldDefaultValueLabel</property>
-                                                                    <property name="pane_border">1</property>
-                                                                    <property name="pane_position"></property>
-                                                                    <property name="pane_size"></property>
-                                                                    <property name="permission">protected</property>
-                                                                    <property name="pin_button">1</property>
-                                                                    <property name="pos"></property>
-                                                                    <property name="resize">Resizable</property>
-                                                                    <property name="show">1</property>
-                                                                    <property name="size"></property>
-                                                                    <property name="style"></property>
-                                                                    <property name="subclass"></property>
-                                                                    <property name="toolbar_pane">0</property>
-                                                                    <property name="tooltip"></property>
-                                                                    <property name="window_extra_style"></property>
-                                                                    <property name="window_name"></property>
-                                                                    <property name="window_style"></property>
-                                                                    <property name="wrap">-1</property>
-                                                                    <event name="OnChar"></event>
-                                                                    <event name="OnEnterWindow"></event>
-                                                                    <event name="OnEraseBackground"></event>
-                                                                    <event name="OnKeyDown"></event>
-                                                                    <event name="OnKeyUp"></event>
-                                                                    <event name="OnKillFocus"></event>
-                                                                    <event name="OnLeaveWindow"></event>
-                                                                    <event name="OnLeftDClick"></event>
-                                                                    <event name="OnLeftDown"></event>
-                                                                    <event name="OnLeftUp"></event>
-                                                                    <event name="OnMiddleDClick"></event>
-                                                                    <event name="OnMiddleDown"></event>
-                                                                    <event name="OnMiddleUp"></event>
-                                                                    <event name="OnMotion"></event>
-                                                                    <event name="OnMouseEvents"></event>
-                                                                    <event name="OnMouseWheel"></event>
-                                                                    <event name="OnPaint"></event>
-                                                                    <event name="OnRightDClick"></event>
-                                                                    <event name="OnRightDown"></event>
-                                                                    <event name="OnRightUp"></event>
-                                                                    <event name="OnSetFocus"></event>
-                                                                    <event name="OnSize"></event>
-                                                                    <event name="OnUpdateUI"></event>
-                                                                </object>
-                                                            </object>
-                                                            <object class="sizeritem" expanded="0">
-                                                                <property name="border">5</property>
-                                                                <property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
-                                                                <property name="proportion">0</property>
-                                                                <object class="wxTextCtrl" expanded="0">
-                                                                    <property name="BottomDockable">1</property>
-                                                                    <property name="LeftDockable">1</property>
-                                                                    <property name="RightDockable">1</property>
-                                                                    <property name="TopDockable">1</property>
-                                                                    <property name="aui_layer"></property>
-                                                                    <property name="aui_name"></property>
-                                                                    <property name="aui_position"></property>
-                                                                    <property name="aui_row"></property>
-                                                                    <property name="best_size"></property>
-                                                                    <property name="bg"></property>
-                                                                    <property name="caption"></property>
-                                                                    <property name="caption_visible">1</property>
-                                                                    <property name="center_pane">0</property>
-                                                                    <property name="close_button">1</property>
-                                                                    <property name="context_help"></property>
-                                                                    <property name="context_menu">1</property>
-                                                                    <property name="default_pane">0</property>
-                                                                    <property name="dock">Dock</property>
-                                                                    <property name="dock_fixed">0</property>
-                                                                    <property name="docking">Left</property>
-                                                                    <property name="enabled">1</property>
-                                                                    <property name="fg"></property>
-                                                                    <property name="floatable">1</property>
-                                                                    <property name="font"></property>
-                                                                    <property name="gripper">0</property>
-                                                                    <property name="hidden">0</property>
-                                                                    <property name="id">wxID_ANY</property>
-                                                                    <property name="max_size"></property>
-                                                                    <property name="maximize_button">0</property>
-                                                                    <property name="maximum_size"></property>
-                                                                    <property name="maxlength"></property>
-                                                                    <property name="min_size"></property>
-                                                                    <property name="minimize_button">0</property>
-                                                                    <property name="minimum_size"></property>
-                                                                    <property name="moveable">1</property>
-                                                                    <property name="name">fieldDefaultValueTextCtrl</property>
-                                                                    <property name="pane_border">1</property>
-                                                                    <property name="pane_position"></property>
-                                                                    <property name="pane_size"></property>
-                                                                    <property name="permission">protected</property>
-                                                                    <property name="pin_button">1</property>
-                                                                    <property name="pos"></property>
-                                                                    <property name="resize">Resizable</property>
-                                                                    <property name="show">1</property>
-                                                                    <property name="size"></property>
-                                                                    <property name="style">wxTE_PROCESS_ENTER</property>
-                                                                    <property name="subclass"></property>
-                                                                    <property name="toolbar_pane">0</property>
-                                                                    <property name="tooltip"></property>
-                                                                    <property name="validator_data_type"></property>
-                                                                    <property name="validator_style">wxFILTER_NONE</property>
-                                                                    <property name="validator_type">wxDefaultValidator</property>
-                                                                    <property name="validator_variable"></property>
-                                                                    <property name="value"></property>
-                                                                    <property name="window_extra_style"></property>
-                                                                    <property name="window_name"></property>
-                                                                    <property name="window_style"></property>
-                                                                    <event name="OnChar"></event>
-                                                                    <event name="OnEnterWindow"></event>
-                                                                    <event name="OnEraseBackground"></event>
-                                                                    <event name="OnKeyDown"></event>
-                                                                    <event name="OnKeyUp"></event>
-                                                                    <event name="OnKillFocus"></event>
-                                                                    <event name="OnLeaveWindow"></event>
-                                                                    <event name="OnLeftDClick"></event>
-                                                                    <event name="OnLeftDown"></event>
-                                                                    <event name="OnLeftUp"></event>
-                                                                    <event name="OnMiddleDClick"></event>
-                                                                    <event name="OnMiddleDown"></event>
-                                                                    <event name="OnMiddleUp"></event>
-                                                                    <event name="OnMotion"></event>
-                                                                    <event name="OnMouseEvents"></event>
-                                                                    <event name="OnMouseWheel"></event>
-                                                                    <event name="OnPaint"></event>
-                                                                    <event name="OnRightDClick"></event>
-                                                                    <event name="OnRightDown"></event>
-                                                                    <event name="OnRightUp"></event>
-                                                                    <event name="OnSetFocus"></event>
-                                                                    <event name="OnSize"></event>
-                                                                    <event name="OnText"></event>
-                                                                    <event name="OnTextEnter">OnEnterKey</event>
-                                                                    <event name="OnTextMaxLen"></event>
-                                                                    <event name="OnTextURL"></event>
-                                                                    <event name="OnUpdateUI"></event>
-                                                                </object>
-                                                            </object>
-                                                            <object class="sizeritem" expanded="0">
-                                                                <property name="border">5</property>
-                                                                <property name="flag">wxALL</property>
-                                                                <property name="proportion">0</property>
-                                                                <object class="wxCheckBox" expanded="0">
-                                                                    <property name="BottomDockable">1</property>
-                                                                    <property name="LeftDockable">1</property>
-                                                                    <property name="RightDockable">1</property>
-                                                                    <property name="TopDockable">1</property>
-                                                                    <property name="aui_layer"></property>
-                                                                    <property name="aui_name"></property>
-                                                                    <property name="aui_position"></property>
-                                                                    <property name="aui_row"></property>
-                                                                    <property name="best_size"></property>
-                                                                    <property name="bg"></property>
-                                                                    <property name="caption"></property>
-                                                                    <property name="caption_visible">1</property>
-                                                                    <property name="center_pane">0</property>
-                                                                    <property name="checked">0</property>
-                                                                    <property name="close_button">1</property>
-                                                                    <property name="context_help"></property>
-                                                                    <property name="context_menu">1</property>
-                                                                    <property name="default_pane">0</property>
-                                                                    <property name="dock">Dock</property>
-                                                                    <property name="dock_fixed">0</property>
-                                                                    <property name="docking">Left</property>
-                                                                    <property name="enabled">1</property>
-                                                                    <property name="fg"></property>
-                                                                    <property name="floatable">1</property>
-                                                                    <property name="font"></property>
-                                                                    <property name="gripper">0</property>
-                                                                    <property name="hidden">0</property>
-                                                                    <property name="id">wxID_ANY</property>
-                                                                    <property name="label">&amp;Visible</property>
-                                                                    <property name="max_size"></property>
-                                                                    <property name="maximize_button">0</property>
-                                                                    <property name="maximum_size"></property>
-                                                                    <property name="min_size"></property>
-                                                                    <property name="minimize_button">0</property>
-                                                                    <property name="minimum_size"></property>
-                                                                    <property name="moveable">1</property>
-                                                                    <property name="name">fieldVisibleCheckbox</property>
-                                                                    <property name="pane_border">1</property>
-                                                                    <property name="pane_position"></property>
-                                                                    <property name="pane_size"></property>
-                                                                    <property name="permission">protected</property>
-                                                                    <property name="pin_button">1</property>
-                                                                    <property name="pos"></property>
-                                                                    <property name="resize">Resizable</property>
-                                                                    <property name="show">1</property>
-                                                                    <property name="size"></property>
-                                                                    <property name="style"></property>
-                                                                    <property name="subclass"></property>
-                                                                    <property name="toolbar_pane">0</property>
-                                                                    <property name="tooltip"></property>
-                                                                    <property name="validator_data_type"></property>
-                                                                    <property name="validator_style">wxFILTER_NONE</property>
-                                                                    <property name="validator_type">wxDefaultValidator</property>
-                                                                    <property name="validator_variable"></property>
-                                                                    <property name="window_extra_style"></property>
-                                                                    <property name="window_name"></property>
-                                                                    <property name="window_style"></property>
-                                                                    <event name="OnChar"></event>
-                                                                    <event name="OnCheckBox">OnVisibleFieldClick</event>
-                                                                    <event name="OnEnterWindow"></event>
-                                                                    <event name="OnEraseBackground"></event>
-                                                                    <event name="OnKeyDown"></event>
-                                                                    <event name="OnKeyUp"></event>
-                                                                    <event name="OnKillFocus"></event>
-                                                                    <event name="OnLeaveWindow"></event>
-                                                                    <event name="OnLeftDClick"></event>
-                                                                    <event name="OnLeftDown"></event>
-                                                                    <event name="OnLeftUp"></event>
-                                                                    <event name="OnMiddleDClick"></event>
-                                                                    <event name="OnMiddleDown"></event>
-                                                                    <event name="OnMiddleUp"></event>
-                                                                    <event name="OnMotion"></event>
-                                                                    <event name="OnMouseEvents"></event>
-                                                                    <event name="OnMouseWheel"></event>
-                                                                    <event name="OnPaint"></event>
-                                                                    <event name="OnRightDClick"></event>
-                                                                    <event name="OnRightDown"></event>
-                                                                    <event name="OnRightUp"></event>
-                                                                    <event name="OnSetFocus"></event>
-                                                                    <event name="OnSize"></event>
-                                                                    <event name="OnUpdateUI"></event>
-                                                                </object>
-                                                            </object>
-                                                            <object class="sizeritem" expanded="0">
-                                                                <property name="border">5</property>
-                                                                <property name="flag">wxEXPAND</property>
-                                                                <property name="proportion">1</property>
-                                                                <object class="spacer" expanded="0">
-                                                                    <property name="height">0</property>
-                                                                    <property name="permission">protected</property>
-                                                                    <property name="width">0</property>
-                                                                </object>
-                                                            </object>
-                                                        </object>
-                                                    </object>
                                                 </object>
                                             </object>
                                             <object class="sizeritem" expanded="1">
diff --git a/eeschema/dialogs/dialog_eeschema_options_base.h b/eeschema/dialogs/dialog_eeschema_options_base.h
index b4a2663..2cd29b6 100644
--- a/eeschema/dialogs/dialog_eeschema_options_base.h
+++ b/eeschema/dialogs/dialog_eeschema_options_base.h
@@ -12,7 +12,6 @@
 #include <wx/xrc/xmlres.h>
 #include <wx/intl.h>
 class DIALOG_SHIM;
-class wxListView;
 
 #include "dialog_shim.h"
 #include <wx/string.h>
@@ -30,8 +29,7 @@ class wxListView;
 #include <wx/bitmap.h>
 #include <wx/image.h>
 #include <wx/icon.h>
-#include <wx/listctrl.h>
-#include <wx/textctrl.h>
+#include <wx/grid.h>
 #include <wx/button.h>
 #include <wx/notebook.h>
 #include <wx/dialog.h>
@@ -50,10 +48,6 @@ class DIALOG_EESCHEMA_OPTIONS_BASE : public DIALOG_SHIM
 		void _wxFB_OnSize( wxSizeEvent& event ){ OnSize( event ); }
 		void _wxFB_OnChooseUnits( wxCommandEvent& event ){ OnChooseUnits( event ); }
 		void _wxFB_OnMiddleBtnPanEnbl( wxCommandEvent& event ){ OnMiddleBtnPanEnbl( event ); }
-		void _wxFB_OnTemplateFieldDeselected( wxListEvent& event ){ OnTemplateFieldDeselected( event ); }
-		void _wxFB_OnTemplateFieldSelected( wxListEvent& event ){ OnTemplateFieldSelected( event ); }
-		void _wxFB_OnEnterKey( wxCommandEvent& event ){ OnEnterKey( event ); }
-		void _wxFB_OnVisibleFieldClick( wxCommandEvent& event ){ OnVisibleFieldClick( event ); }
 		void _wxFB_OnAddButtonClick( wxCommandEvent& event ){ OnAddButtonClick( event ); }
 		void _wxFB_OnDeleteButtonClick( wxCommandEvent& event ){ OnDeleteButtonClick( event ); }
 		
@@ -115,12 +109,7 @@ class DIALOG_EESCHEMA_OPTIONS_BASE : public DIALOG_SHIM
 		wxCheckBox* m_checkMiddleButtonPanLimited;
 		wxCheckBox* m_checkAutoPan;
 		wxPanel* m_panel2;
-		wxListView* templateFieldListCtrl;
-		wxStaticText* fieldNameLabel;
-		wxTextCtrl* fieldNameTextCtrl;
-		wxStaticText* fieldDefaultValueLabel;
-		wxTextCtrl* fieldDefaultValueTextCtrl;
-		wxCheckBox* fieldVisibleCheckbox;
+		wxGrid* m_fieldGrid;
 		wxButton* addFieldButton;
 		wxButton* deleteFieldButton;
 		wxStdDialogButtonSizer* m_sdbSizer;
@@ -131,10 +120,6 @@ class DIALOG_EESCHEMA_OPTIONS_BASE : public DIALOG_SHIM
 		virtual void OnSize( wxSizeEvent& event ) { event.Skip(); }
 		virtual void OnChooseUnits( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnMiddleBtnPanEnbl( wxCommandEvent& event ) { event.Skip(); }
-		virtual void OnTemplateFieldDeselected( wxListEvent& event ) { event.Skip(); }
-		virtual void OnTemplateFieldSelected( wxListEvent& event ) { event.Skip(); }
-		virtual void OnEnterKey( wxCommandEvent& event ) { event.Skip(); }
-		virtual void OnVisibleFieldClick( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnAddButtonClick( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnDeleteButtonClick( wxCommandEvent& event ) { event.Skip(); }
 		

Follow ups