kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #31621
[PATCH] LIB_TABLE tweaks
Wayne, et al,
I am really liking the way that the new symbol table works! Thanks for the
huge effort that has gone into this.
One thing that I have noticed is that when opening (for e.g.) the component
chooser, the UI hangs while all the libraries load. Previously there was a
progress dialog which at least informed the user what was going on.
I have re-implemented this dialog in the attached patch set.
Further, I have also implemented a way to individually enable / disable
each row in the library tables (this works for SYMBOL_LIB and FP_LIB).
This is based on the idea by Tomasz. Example screenshot below:
[image: Inline image 1]
I have tweaked the base LIB_TABLE_GRID code such that disabled entries are
greyed out and made italic. The enabled / disabled status is persistent in
the sym/fp_lib_table files. Older version of xxx_lib_table files are read
with all rows enabled by default.
Please find patch set attached.
Regards,
Oliver
From 56d619e7ff726d5676b8f466efbebd2c52528d88 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Wed, 15 Nov 2017 22:32:23 +1100
Subject: [PATCH 6/6] Improved LIB_TABLE rendering
- Moved "Active" to first column
- Changed text attributes for disabled rows
---
include/lib_table_grid.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 46 insertions(+), 2 deletions(-)
diff --git a/include/lib_table_grid.h b/include/lib_table_grid.h
index c35c4f4..94726b5 100644
--- a/include/lib_table_grid.h
+++ b/include/lib_table_grid.h
@@ -24,15 +24,18 @@
#include <wx/grid.h>
+const wxColour COLOUR_ROW_ENABLED( 0, 0, 0 );
+const wxColour COLOUR_ROW_DISABLED( 100, 100, 100 );
+
/// The library table grid column order is established by this sequence.
enum COL_ORDER
{
+ COL_ENABLED,
COL_NICKNAME,
COL_URI,
COL_TYPE,
COL_OPTIONS,
COL_DESCR,
- COL_ENABLED,
COL_COUNT // keep as last
};
@@ -180,12 +183,53 @@ public:
case COL_TYPE: return _( "Plugin Type" );
case COL_OPTIONS: return _( "Options" );
case COL_DESCR: return _( "Description" );
- case COL_ENABLED: return _( "Enabled" );
+ case COL_ENABLED: return _( "Active" );
default: return wxEmptyString;
}
}
+ /**
+ * Customize the appearance of LIB_TABLE_ROW entries
+ * - If not enabled, greyed out and italic
+ */
+ virtual wxGridCellAttr* GetAttr( int aRow, int aCol, wxGridCellAttr::wxAttrKind aKind) override
+ {
+ auto* attr = wxGridTableBase::GetAttr( aRow, aCol, aKind );
+
+ if( aRow < (int) size() )
+ {
+ if( !attr )
+ {
+ attr = new wxGridCellAttr();
+ }
+
+ wxFont font;
+
+ if( attr->HasFont() )
+ {
+ font = attr->GetFont();
+ }
+
+ LIB_TABLE_ROW* r = at( (size_t) aRow );
+
+ if( r && r->GetIsEnabled() )
+ {
+ font.SetStyle( wxFONTSTYLE_NORMAL );
+ attr->SetTextColour( COLOUR_ROW_ENABLED );
+ }
+ else
+ {
+ font.SetStyle( wxFONTSTYLE_ITALIC );
+ attr->SetTextColour( COLOUR_ROW_DISABLED );
+ }
+
+ attr->SetFont( font );
+ }
+
+ return attr;
+ }
+
protected:
virtual LIB_TABLE_ROW* at( size_t aIndex ) = 0;
--
2.7.4
From c2a600b1328b45edefc4ad026d1258c7e54e7c12 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Wed, 15 Nov 2017 21:48:38 +1100
Subject: [PATCH 5/6] Add progress dialog when loading symbol libraries
- Provides UX feedback for user
---
eeschema/cmp_tree_model_adapter.cpp | 22 +++++++++++++++++++++-
eeschema/cmp_tree_model_adapter.h | 12 ++++++++++++
eeschema/getpart.cpp | 7 ++-----
eeschema/viewlibs.cpp | 10 ++--------
4 files changed, 37 insertions(+), 14 deletions(-)
diff --git a/eeschema/cmp_tree_model_adapter.cpp b/eeschema/cmp_tree_model_adapter.cpp
index d88119b..d9b8cd6 100644
--- a/eeschema/cmp_tree_model_adapter.cpp
+++ b/eeschema/cmp_tree_model_adapter.cpp
@@ -24,7 +24,7 @@
#include <eda_pattern_match.h>
#include <wx/tokenzr.h>
#include <symbol_lib_table.h>
-
+#include <wx/progdlg.h>
CMP_TREE_MODEL_ADAPTER::WIDTH_CACHE CMP_TREE_MODEL_ADAPTER::m_width_cache;
@@ -135,6 +135,26 @@ void CMP_TREE_MODEL_ADAPTER::AddLibrary( wxString const& aLibNickname )
}
+void CMP_TREE_MODEL_ADAPTER::AddLibrariesWithProgress( const std::vector<wxString>& aNicknames, EDA_DRAW_FRAME* aParent )
+{
+ auto* prg = new wxProgressDialog(
+ _( "Loading symbol libraries" ),
+ wxEmptyString,
+ aNicknames.size(),
+ aParent );
+
+ unsigned int ii = 0;
+
+ for( auto nickname : aNicknames )
+ {
+ prg->Update( ii++, wxString::Format( _( "Loading library '%s'" ), nickname ) );
+ AddLibrary( nickname );
+ }
+
+ prg->Destroy();
+}
+
+
void CMP_TREE_MODEL_ADAPTER::AddAliasList(
wxString const& aNodeName,
wxArrayString const& aAliasNameList )
diff --git a/eeschema/cmp_tree_model_adapter.h b/eeschema/cmp_tree_model_adapter.h
index bb96d0b..06f6c68 100644
--- a/eeschema/cmp_tree_model_adapter.h
+++ b/eeschema/cmp_tree_model_adapter.h
@@ -24,6 +24,7 @@
#include <lib_id.h>
+#include <draw_frame.h>
#include <cmp_tree_model.h>
#include <wx/hashmap.h>
@@ -155,6 +156,17 @@ public:
*/
void AddLibrary( wxString const& aLibNickname );
+
+ /**
+ * Add all the libraries in a SYMBOL_LIB_TABLE to the model,
+ * displaying a progress dialog attached to the parent frame
+ *
+ * @param aNicknames is the list of library nicknames
+ * @param aParent is the parent window to display the progress dialog
+ */
+ void AddLibrariesWithProgress( const std::vector<wxString>& aNicknames, EDA_DRAW_FRAME* aParent );
+
+
/**
* Add the given list of components, by name. To be called in the setup
* phase.
diff --git a/eeschema/getpart.cpp b/eeschema/getpart.cpp
index 2648012..4ece335 100644
--- a/eeschema/getpart.cpp
+++ b/eeschema/getpart.cpp
@@ -148,14 +148,11 @@ SCH_BASE_FRAME::COMPONENT_SELECTION SCH_BASE_FRAME::SelectComponentFromLibrary(
adapter->SetPreselectNode( aHistoryList[0].LibId, aHistoryList[0].Unit );
}
- std::vector< wxString > libNicknames = libs->GetLogicalLibs();
+ const std::vector< wxString > libNicknames = libs->GetLogicalLibs();
if( !loaded )
{
- for( auto nickname : libNicknames )
- {
- adapter->AddLibrary( nickname );
- }
+ adapter->AddLibrariesWithProgress( libNicknames, this );
}
if( aHighlight && aHighlight->IsValid() )
diff --git a/eeschema/viewlibs.cpp b/eeschema/viewlibs.cpp
index fce60b5..3d1de7c 100644
--- a/eeschema/viewlibs.cpp
+++ b/eeschema/viewlibs.cpp
@@ -44,7 +44,6 @@
#include <cmp_tree_model_adapter.h>
#include <symbol_lib_table.h>
-
void LIB_VIEW_FRAME::OnSelectSymbol( wxCommandEvent& aEvent )
{
wxString dialogTitle;
@@ -53,14 +52,9 @@ void LIB_VIEW_FRAME::OnSelectSymbol( wxCommandEvent& aEvent )
// Container doing search-as-you-type.
auto adapter( CMP_TREE_MODEL_ADAPTER::Create( libs ) );
- std::vector< wxString > libNicknames;
-
- libNicknames = libs->GetLogicalLibs();
+ const auto libNicknames = libs->GetLogicalLibs();
- for( auto nickname : libNicknames )
- {
- adapter->AddLibrary( nickname );
- }
+ adapter->AddLibrariesWithProgress( libNicknames, this );
dialogTitle.Printf( _( "Choose Component (%d items loaded)" ),
adapter->GetComponentsCount() );
--
2.7.4
From 4fb7f852bb05ebae41da265ea31f686e6deab021 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Wed, 15 Nov 2017 20:41:19 +1100
Subject: [PATCH 4/6] Only enumerate active libraries
---
common/lib_table_base.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/common/lib_table_base.cpp b/common/lib_table_base.cpp
index b78d8d7..0dbff32 100644
--- a/common/lib_table_base.cpp
+++ b/common/lib_table_base.cpp
@@ -368,7 +368,10 @@ std::vector<wxString> LIB_TABLE::GetLogicalLibs()
{
for( LIB_TABLE_ROWS_CITER it = cur->rows.begin(); it!=cur->rows.end(); ++it )
{
- unique.insert( it->GetNickName() );
+ if( it->GetIsEnabled() )
+ {
+ unique.insert( it->GetNickName() );
+ }
}
} while( ( cur = cur->fallBack ) != 0 );
--
2.7.4
From 6e59d2ab092d2f9fa5430e0a262e78ffc72de729 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Wed, 15 Nov 2017 20:30:32 +1100
Subject: [PATCH 3/6] Load "disabled" for footprint libraries
---
common/fp_lib_table.cpp | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/common/fp_lib_table.cpp b/common/fp_lib_table.cpp
index 99a2afc..8eff009 100644
--- a/common/fp_lib_table.cpp
+++ b/common/fp_lib_table.cpp
@@ -109,10 +109,11 @@ void FP_LIB_TABLE::Parse( LIB_TABLE_LEXER* in )
// After (name), remaining (lib) elements are order independent, and in
// some cases optional.
- bool sawType = false;
- bool sawOpts = false;
- bool sawDesc = false;
- bool sawUri = false;
+ bool sawType = false;
+ bool sawOpts = false;
+ bool sawDesc = false;
+ bool sawUri = false;
+ bool sawDisabled = false;
while( ( tok = in->NextTok() ) != T_RIGHT )
{
@@ -158,6 +159,13 @@ void FP_LIB_TABLE::Parse( LIB_TABLE_LEXER* in )
row->SetDescr( in->FromUTF8() );
break;
+ case T_disabled:
+ if( sawDisabled )
+ in->Duplicate( tok );
+ sawDisabled = true;
+ row->SetEnabled( false );
+ break;
+
default:
in->Unexpected( tok );
}
--
2.7.4
From edb3f8053670adaf32c7cfdd2d3fbfe64ca80eae Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Wed, 15 Nov 2017 17:56:38 +1100
Subject: [PATCH 2/6] Toggle LIB_TABLE_ROW enabled/disabled in grid editor
- Checkbox editor for enabled / disabled status
---
common/lib_table_base.cpp | 3 ++-
eeschema/dialogs/dialog_sym_lib_table.cpp | 25 +++++++++++++++----------
include/lib_table_grid.h | 10 ++++++++++
pcbnew/dialogs/dialog_fp_lib_table.cpp | 21 +++++++++++----------
4 files changed, 38 insertions(+), 21 deletions(-)
diff --git a/common/lib_table_base.cpp b/common/lib_table_base.cpp
index 8c3e46f..b78d8d7 100644
--- a/common/lib_table_base.cpp
+++ b/common/lib_table_base.cpp
@@ -211,7 +211,8 @@ bool LIB_TABLE_ROW::operator==( const LIB_TABLE_ROW& r ) const
return nickName == r.nickName
&& uri_user == r.uri_user
&& options == r.options
- && description == r.description;
+ && description == r.description
+ && enabled == r.enabled;
}
diff --git a/eeschema/dialogs/dialog_sym_lib_table.cpp b/eeschema/dialogs/dialog_sym_lib_table.cpp
index 0868b47..ca4b8ec 100644
--- a/eeschema/dialogs/dialog_sym_lib_table.cpp
+++ b/eeschema/dialogs/dialog_sym_lib_table.cpp
@@ -166,27 +166,30 @@ DIALOG_SYMBOL_LIB_TABLE::DIALOG_SYMBOL_LIB_TABLE( wxTopLevelWindow* aParent,
pluginChoices.Add( SCH_IO_MGR::ShowType( SCH_IO_MGR::SCH_KICAD ) );
pluginChoices.Add( SCH_IO_MGR::ShowType( SCH_IO_MGR::SCH_LEGACY ) );
- wxGridCellAttr* attr;
-
- attr = new wxGridCellAttr;
- attr->SetEditor( new wxGridCellChoiceEditor( pluginChoices ) );
- m_project_grid->SetColAttr( COL_TYPE, attr );
-
- attr = new wxGridCellAttr;
- attr->SetEditor( new wxGridCellChoiceEditor( pluginChoices ) );
- m_global_grid->SetColAttr( COL_TYPE, attr );
-
populateEnvironReadOnlyTable();
for( int i=0; i<2; ++i )
{
wxGrid* g = i==0 ? m_global_grid : m_project_grid;
+ // Set special attributes
+ wxGridCellAttr* attr;
+
+ attr = new wxGridCellAttr;
+ attr->SetEditor( new wxGridCellChoiceEditor( pluginChoices ) );
+ g->SetColAttr( COL_TYPE, attr );
+
+ attr = new wxGridCellAttr;
+ attr->SetEditor( new wxGridCellBoolEditor() );
+ attr->SetRenderer( new wxGridCellBoolRenderer() );
+ g->SetColAttr( COL_ENABLED, attr );
+
// all but COL_OPTIONS, which is edited with Option Editor anyways.
g->AutoSizeColumn( COL_NICKNAME, false );
g->AutoSizeColumn( COL_TYPE, false );
g->AutoSizeColumn( COL_URI, false );
g->AutoSizeColumn( COL_DESCR, false );
+ g->AutoSizeColumn( COL_ENABLED, false );
// would set this to width of title, if it was easily known.
g->SetColSize( COL_OPTIONS, 80 );
@@ -350,6 +353,8 @@ void DIALOG_SYMBOL_LIB_TABLE::appendRowHandler( wxCommandEvent& event )
m_cur_grid->MakeCellVisible( last_row, 0 );
m_cur_grid->SetGridCursor( last_row, 0 );
m_cur_grid->SelectRow( m_cur_grid->GetGridCursorRow() );
+
+ printf("Made row %i\n", last_row );
}
}
diff --git a/include/lib_table_grid.h b/include/lib_table_grid.h
index 64c2f90..c35c4f4 100644
--- a/include/lib_table_grid.h
+++ b/include/lib_table_grid.h
@@ -32,6 +32,8 @@ enum COL_ORDER
COL_TYPE,
COL_OPTIONS,
COL_DESCR,
+ COL_ENABLED,
+
COL_COUNT // keep as last
};
@@ -62,6 +64,8 @@ public:
case COL_TYPE: return r->GetType();
case COL_OPTIONS: return r->GetOptions();
case COL_DESCR: return r->GetDescr();
+ // Render a boolean value as its text equivalent
+ case COL_ENABLED: return r->GetIsEnabled() ? "1" : "";
default:
; // fall thru to wxEmptyString
}
@@ -83,6 +87,10 @@ public:
case COL_TYPE: r->SetType( aValue ); break;
case COL_OPTIONS: r->SetOptions( aValue ); break;
case COL_DESCR: r->SetDescr( aValue ); break;
+ case COL_ENABLED:
+ // Any non-empty string will set enabled to true
+ r->SetEnabled( !aValue.IsEmpty() );
+ break;
}
}
}
@@ -172,6 +180,8 @@ public:
case COL_TYPE: return _( "Plugin Type" );
case COL_OPTIONS: return _( "Options" );
case COL_DESCR: return _( "Description" );
+ case COL_ENABLED: return _( "Enabled" );
+
default: return wxEmptyString;
}
}
diff --git a/pcbnew/dialogs/dialog_fp_lib_table.cpp b/pcbnew/dialogs/dialog_fp_lib_table.cpp
index eb8b905..ee80d9c 100644
--- a/pcbnew/dialogs/dialog_fp_lib_table.cpp
+++ b/pcbnew/dialogs/dialog_fp_lib_table.cpp
@@ -195,22 +195,23 @@ public:
choices.Add( IO_MGR::ShowType( IO_MGR::GITHUB ) );
*/
- wxGridCellAttr* attr;
-
- attr = new wxGridCellAttr;
- attr->SetEditor( new wxGridCellChoiceEditor( choices ) );
- m_project_grid->SetColAttr( COL_TYPE, attr );
-
- attr = new wxGridCellAttr;
- attr->SetEditor( new wxGridCellChoiceEditor( choices ) );
- m_global_grid->SetColAttr( COL_TYPE, attr );
-
populateEnvironReadOnlyTable();
for( int i=0; i<2; ++i )
{
wxGrid* g = i==0 ? m_global_grid : m_project_grid;
+ wxGridCellAttr* attr;
+
+ attr = new wxGridCellAttr;
+ attr->SetEditor( new wxGridCellChoiceEditor( choices ) );
+ g->SetColAttr( COL_TYPE, attr );
+
+ attr = new wxGridCellAttr;
+ attr->SetEditor( new wxGridCellBoolEditor() );
+ attr->SetRenderer( new wxGridCellBoolRenderer() );
+ g->SetColAttr( COL_ENABLED, attr );
+
// all but COL_OPTIONS, which is edited with Option Editor anyways.
g->AutoSizeColumn( COL_NICKNAME, false );
g->AutoSizeColumn( COL_TYPE, false );
--
2.7.4
From 0da20c80d2210b0c5f8a3471009ff0e1dcd4abd4 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Wed, 15 Nov 2017 16:48:31 +1100
Subject: [PATCH 1/6] Added "enabled" parameter for LIB_TABLE_ROW
- Read and write from lib-table working
---
common/lib_table.keywords | 1 +
common/lib_table_base.cpp | 12 ++++++++++--
eeschema/symbol_lib_table.cpp | 18 ++++++++++++++----
eeschema/symbol_lib_table.h | 3 +++
include/lib_table_base.h | 18 ++++++++++++++++--
5 files changed, 44 insertions(+), 8 deletions(-)
diff --git a/common/lib_table.keywords b/common/lib_table.keywords
index feeea0e..fd679ff 100644
--- a/common/lib_table.keywords
+++ b/common/lib_table.keywords
@@ -6,3 +6,4 @@ type
uri
options
descr
+disabled
\ No newline at end of file
diff --git a/common/lib_table_base.cpp b/common/lib_table_base.cpp
index 99e0fc1..8c3e46f 100644
--- a/common/lib_table_base.cpp
+++ b/common/lib_table_base.cpp
@@ -87,12 +87,20 @@ void LIB_TABLE_ROW::Format( OUTPUTFORMATTER* out, int nestLevel ) const
wxString uri = GetFullURI();
uri.Replace( '\\', '/' );
- out->Print( nestLevel, "(lib (name %s)(type %s)(uri %s)(options %s)(descr %s))\n",
+ wxString extraOptions;
+
+ if( !GetIsEnabled() )
+ {
+ extraOptions += "(disabled)";
+ }
+
+ out->Print( nestLevel, "(lib (name %s)(type %s)(uri %s)(options %s)(descr %s)%s)\n",
out->Quotew( GetNickName() ).c_str(),
out->Quotew( GetType() ).c_str(),
out->Quotew( uri ).c_str(),
out->Quotew( GetOptions() ).c_str(),
- out->Quotew( GetDescr() ).c_str()
+ out->Quotew( GetDescr() ).c_str(),
+ extraOptions.ToStdString().c_str()
);
}
diff --git a/eeschema/symbol_lib_table.cpp b/eeschema/symbol_lib_table.cpp
index 1019310..d31162a 100644
--- a/eeschema/symbol_lib_table.cpp
+++ b/eeschema/symbol_lib_table.cpp
@@ -124,10 +124,11 @@ void SYMBOL_LIB_TABLE::Parse( LIB_TABLE_LEXER* in )
// After (name), remaining (lib) elements are order independent, and in
// some cases optional.
- bool sawType = false;
- bool sawOpts = false;
- bool sawDesc = false;
- bool sawUri = false;
+ bool sawType = false;
+ bool sawOpts = false;
+ bool sawDesc = false;
+ bool sawUri = false;
+ bool sawDisabled = false;
while( ( tok = in->NextTok() ) != T_RIGHT )
{
@@ -173,6 +174,13 @@ void SYMBOL_LIB_TABLE::Parse( LIB_TABLE_LEXER* in )
row->SetDescr( in->FromUTF8() );
break;
+ case T_disabled:
+ if( sawDisabled )
+ in->Duplicate( tok );
+ sawDisabled = true;
+ row->SetEnabled( false );
+ break;
+
default:
in->Unexpected( tok );
}
@@ -219,7 +227,9 @@ void SYMBOL_LIB_TABLE::Format( OUTPUTFORMATTER* aOutput, int aIndentLevel ) cons
aOutput->Print( aIndentLevel, "(sym_lib_table\n" );
for( LIB_TABLE_ROWS_CITER it = rows.begin(); it != rows.end(); ++it )
+ {
it->Format( aOutput, aIndentLevel+1 );
+ }
aOutput->Print( aIndentLevel, ")\n" );
}
diff --git a/eeschema/symbol_lib_table.h b/eeschema/symbol_lib_table.h
index 63cfe6c..4f0c2b1 100644
--- a/eeschema/symbol_lib_table.h
+++ b/eeschema/symbol_lib_table.h
@@ -51,11 +51,13 @@ public:
LIB_TABLE_ROW( aNick, aURI, aOptions, aDescr )
{
SetType( aType );
+ SetEnabled( true );
}
SYMBOL_LIB_TABLE_ROW() :
type( SCH_IO_MGR::SCH_KICAD )
{
+ SetEnabled( true );
}
bool operator==( const SYMBOL_LIB_TABLE_ROW& aRow ) const;
@@ -77,6 +79,7 @@ protected:
LIB_TABLE_ROW( aRow ),
type( aRow.type )
{
+ SetEnabled( aRow.GetIsEnabled() );
}
private:
diff --git a/include/lib_table_base.h b/include/lib_table_base.h
index c8c3e84..20433ad 100644
--- a/include/lib_table_base.h
+++ b/include/lib_table_base.h
@@ -78,7 +78,8 @@ public:
LIB_TABLE_ROW( const wxString& aNick, const wxString& aURI, const wxString& aOptions,
const wxString& aDescr = wxEmptyString ) :
nickName( aNick ),
- description( aDescr )
+ description( aDescr ),
+ enabled( true )
{
properties.reset();
SetOptions( aOptions );
@@ -100,6 +101,16 @@ public:
void SetNickName( const wxString& aNickName ) { nickName = aNickName; }
/**
+ * @return the enabled status of this library row
+ */
+ bool GetIsEnabled() const { return enabled; }
+
+ /**
+ * Change the enabled status of this library
+ */
+ void SetEnabled( bool aEnabled = true ) { enabled = aEnabled; }
+
+ /**
* Return the type of library represented by this row.
*/
virtual const wxString GetType() const = 0;
@@ -175,7 +186,8 @@ protected:
uri_expanded( aRow.uri_expanded ),
#endif
options( aRow.options ),
- description( aRow.description )
+ description( aRow.description ),
+ enabled( aRow.enabled )
{
if( aRow.properties )
properties.reset( new PROPERTIES( *aRow.properties.get() ) );
@@ -200,6 +212,8 @@ private:
wxString options;
wxString description;
+ bool enabled = true; ///< Whether the LIB_TABLE_ROW is enabled
+
std::unique_ptr< PROPERTIES > properties;
};
--
2.7.4
Follow ups