← Back to team overview

kicad-developers team mailing list archive

Symbol field editor dialog improvements

 

N.B. sending this again since the list seems to have eaten them when I
sent them last weekend.


Hi everyone,

Attached are two patches improving the usability of the symbol field
editor dialog:

 0001: Teach the schematic editor to jump to a component when a cell in
       the "Reference" column is clicked. I find this very helpful when
       reviewing a design. This was in part motivated by #1772169

 0002: Save checkbox states, as requested by #1747602.

Hopefully these should be fairly uncontroversial.

Thanks!

Cheers,

- Ben

Attachment: signature.asc
Description: PGP signature

>From c6d77d20bef7ab6b45fe5c4041cc22222d114115 Mon Sep 17 00:00:00 2001
From: Ben Gamari <ben@xxxxxxxxxxxxxxxx>
Date: Sat, 19 May 2018 11:25:28 -0400
Subject: [PATCH 1/2] field editor: Find components when reference field is
 clicked

This makes it significantly easier to find a particular component when
using the field editor, as I often do for part selection.
---
 eeschema/dialogs/dialog_fields_editor_global.cpp | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/eeschema/dialogs/dialog_fields_editor_global.cpp b/eeschema/dialogs/dialog_fields_editor_global.cpp
index d6445f3a6..f7b0784bd 100644
--- a/eeschema/dialogs/dialog_fields_editor_global.cpp
+++ b/eeschema/dialogs/dialog_fields_editor_global.cpp
@@ -166,6 +166,10 @@ public:
             return GetValue( m_rows[ aRow ], aCol );
     }
 
+    std::vector<SCH_REFERENCE> GetRowReferences( int aRow )
+    {
+        return m_rows[ aRow ].m_Refs;
+    }
 
     wxString GetValue( DATA_MODEL_ROW& group, int aCol )
     {
@@ -736,9 +740,14 @@ void DIALOG_FIELDS_EDITOR_GLOBAL::OnRegroupComponents( wxCommandEvent& event )
 
 void DIALOG_FIELDS_EDITOR_GLOBAL::OnTableCellClick( wxGridEvent& event )
 {
-    if( event.GetCol() == REFERENCE )
+    if( event.GetCol() == REFERENCE ) {
         m_dataModel->ExpandCollapseRow( event.GetRow());
-    else
+        std::vector<SCH_REFERENCE> refs = m_dataModel->GetRowReferences( event.GetRow() );
+        if (refs.size() == 1) {
+            m_parent->FindComponentAndItem( refs[0].GetRef() + refs[0].GetRefNumber(),
+                                            true, FIND_COMPONENT_ONLY, wxEmptyString, false );
+        }
+    } else
         event.Skip();
 }
 
-- 
2.16.2

>From da4768860f416168a0c95bcdabdc7c9fac988022 Mon Sep 17 00:00:00 2001
From: Ben Gamari <ben@xxxxxxxxxxxxxxxx>
Date: Sat, 19 May 2018 11:47:39 -0400
Subject: [PATCH 2/2] field editor: Save checkbox states

This teaches the field editor dialog to remember the states of the
"Show" and "Group By" checkboxes, as requested in #1747602.
---
 eeschema/dialogs/dialog_fields_editor_global.cpp | 29 +++++++++++++++++++++---
 eeschema/dialogs/dialog_fields_editor_global.h   |  1 +
 2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/eeschema/dialogs/dialog_fields_editor_global.cpp b/eeschema/dialogs/dialog_fields_editor_global.cpp
index f7b0784bd..976aef44d 100644
--- a/eeschema/dialogs/dialog_fields_editor_global.cpp
+++ b/eeschema/dialogs/dialog_fields_editor_global.cpp
@@ -30,6 +30,7 @@
 #include <bitmaps.h>
 #include <grid_tricks.h>
 #include <kicad_string.h>
+#include <kiface_i.h>
 
 #include <build_version.h>
 #include <general.h>
@@ -514,6 +515,8 @@ DIALOG_FIELDS_EDITOR_GLOBAL::DIALOG_FIELDS_EDITOR_GLOBAL( SCH_EDIT_FRAME* parent
         DIALOG_FIELDS_EDITOR_GLOBAL_BASE( parent ),
         m_parent( parent )
 {
+    m_config = Kiface().KifaceSettings();
+
     // Get all components from the list of schematic sheets
     SCH_SHEET_LIST sheets( g_RootSheet );
     sheets.GetComponents( m_componentRefs, false );
@@ -561,6 +564,14 @@ DIALOG_FIELDS_EDITOR_GLOBAL::DIALOG_FIELDS_EDITOR_GLOBAL( SCH_EDIT_FRAME* parent
     m_grid->UseNativeColHeader( true );
     m_grid->SetTable( m_dataModel, true );
 
+    // Hide hidden-by-default fields
+    for( int row = 0; row < m_fieldsCtrl->GetItemCount(); ++row )
+    {
+        if( !m_fieldsCtrl->GetToggleValue( row, SHOW_FIELD_COLUMN ) )
+            m_grid->HideCol( row );
+    }
+
+
     // add Cut, Copy, and Paste to wxGrid
     m_grid->PushEventHandler( new GRID_TRICKS( m_grid ) );
 
@@ -636,6 +647,9 @@ void DIALOG_FIELDS_EDITOR_GLOBAL::AddField( const wxString& aFieldName,
 
     wxVector<wxVariant> fieldsCtrlDataLine;
 
+    m_config->Read("SymbolFieldEditor/Show/" + aFieldName, &defaultShow);
+    m_config->Read("SymbolFieldEditor/GroupBy/" + aFieldName, &defaultSortBy);
+
     fieldsCtrlDataLine.push_back( wxVariant( aFieldName ) );
     fieldsCtrlDataLine.push_back( wxVariant( defaultShow ) );
     fieldsCtrlDataLine.push_back( wxVariant( defaultSortBy ) );
@@ -682,19 +696,28 @@ void DIALOG_FIELDS_EDITOR_GLOBAL::OnColumnItemToggled( wxDataViewEvent& event )
     default:
         break;
 
-    case SHOW_FIELD_COLUMN:
-        if( m_fieldsCtrl->GetToggleValue( row, col ) )
+    case SHOW_FIELD_COLUMN: {
+        bool value = m_fieldsCtrl->GetToggleValue( row, col );
+        wxString fieldName = m_fieldsCtrl->GetTextValue(row, FIELD_NAME_COLUMN);
+        m_config->Write( "SymbolFieldEditor/Show/"+fieldName, value );
+
+        if( value )
             m_grid->ShowCol( row );
         else
             m_grid->HideCol( row );     // grid's columns map to fieldsCtrl's rows
         break;
+    }
 
-    case GROUP_BY_COLUMN:
+    case GROUP_BY_COLUMN: {
+        bool value = m_fieldsCtrl->GetToggleValue( row, col );
+        wxString fieldName = m_fieldsCtrl->GetTextValue(row, FIELD_NAME_COLUMN);
+        m_config->Write( "SymbolFieldEditor/GroupBy/"+fieldName, value );
         m_dataModel->RebuildRows( m_groupComponentsBox, m_fieldsCtrl );
         m_dataModel->Sort( m_grid->GetSortingColumn(), m_grid->IsSortOrderAscending() );
         m_grid->ForceRefresh();
         break;
     }
+    }
 }
 
 
diff --git a/eeschema/dialogs/dialog_fields_editor_global.h b/eeschema/dialogs/dialog_fields_editor_global.h
index 2ca13dd44..8e0176b9e 100644
--- a/eeschema/dialogs/dialog_fields_editor_global.h
+++ b/eeschema/dialogs/dialog_fields_editor_global.h
@@ -43,6 +43,7 @@ public:
     bool TransferDataFromWindow() override;
 
 private:
+    wxConfigBase*   m_config;
     SCH_EDIT_FRAME* m_parent;
     int             m_showColWidth;
     int             m_groupByColWidth;
-- 
2.16.2


Follow ups