diff --git a/src/laybasic/laybasic/NetlistBrowserPage.ui b/src/laybasic/laybasic/NetlistBrowserPage.ui
index e4d982923..b07725cd6 100644
--- a/src/laybasic/laybasic/NetlistBrowserPage.ui
+++ b/src/laybasic/laybasic/NetlistBrowserPage.ui
@@ -238,6 +238,12 @@
false
+
+ false
+
+
+ false
+
-
diff --git a/src/laybasic/laybasic/layIndexedNetlistModel.cc b/src/laybasic/laybasic/layIndexedNetlistModel.cc
index e52a330f8..8007d004d 100644
--- a/src/laybasic/laybasic/layIndexedNetlistModel.cc
+++ b/src/laybasic/laybasic/layIndexedNetlistModel.cc
@@ -191,6 +191,16 @@ static size_t index_from_attr (const std::pair &attr
return cc->second;
}
+std::string
+SingleIndexedNetlistModel::column_title (int section) const
+{
+ if (section == 0) {
+ return tl::to_string (tr ("Object"));
+ } else if (section == 1) {
+ return tl::to_string (tr ("Connections"));
+ }
+}
+
size_t
SingleIndexedNetlistModel::circuit_count () const
{
diff --git a/src/laybasic/laybasic/layIndexedNetlistModel.h b/src/laybasic/laybasic/layIndexedNetlistModel.h
index 3bd373435..11c4dbc93 100644
--- a/src/laybasic/laybasic/layIndexedNetlistModel.h
+++ b/src/laybasic/laybasic/layIndexedNetlistModel.h
@@ -67,6 +67,8 @@ public:
typedef std::pair pin_pair;
typedef std::pair subcircuit_pair;
+ virtual std::string column_title (int section) const = 0;
+
virtual size_t circuit_count () const = 0;
virtual size_t net_count (const circuit_pair &circuits) const = 0;
virtual size_t net_terminal_count (const net_pair &nets) const = 0;
@@ -121,6 +123,8 @@ public:
return true;
}
+ virtual std::string column_title (int section) const;
+
virtual size_t circuit_count () const;
virtual size_t net_count (const circuit_pair &circuits) const;
virtual size_t net_terminal_count (const net_pair &nets) const;
diff --git a/src/laybasic/laybasic/layNetlistBrowserDialog.cc b/src/laybasic/laybasic/layNetlistBrowserDialog.cc
index 228ed8b41..5b750817d 100644
--- a/src/laybasic/laybasic/layNetlistBrowserDialog.cc
+++ b/src/laybasic/laybasic/layNetlistBrowserDialog.cc
@@ -699,7 +699,7 @@ NetlistBrowserDialog::activated ()
if (lay::PluginRoot::instance ()) {
lay::PluginRoot::instance ()->config_get (cfg_l2ndb_window_state, state);
}
- lay::restore_dialog_state (this, state);
+ lay::restore_dialog_state (this, state, false /*don't adjust the section sizes*/);
// Switch to the active cellview index when no valid one is set.
lay::CellView cv = view ()->cellview (m_cv_index);
@@ -778,7 +778,7 @@ NetlistBrowserDialog::deactivated ()
release_mouse ();
if (lay::PluginRoot::instance ()) {
- lay::PluginRoot::instance ()->config_set (cfg_l2ndb_window_state, lay::save_dialog_state (this).c_str ());
+ lay::PluginRoot::instance ()->config_set (cfg_l2ndb_window_state, lay::save_dialog_state (this, false /*don't store the section sizes*/).c_str ());
}
browser_frame->set_l2ndb (0);
diff --git a/src/laybasic/laybasic/layNetlistBrowserModel.cc b/src/laybasic/laybasic/layNetlistBrowserModel.cc
index 16c32f2dd..5c2e07add 100644
--- a/src/laybasic/laybasic/layNetlistBrowserModel.cc
+++ b/src/laybasic/laybasic/layNetlistBrowserModel.cc
@@ -648,68 +648,56 @@ NetlistBrowserModel::data (const QModelIndex &index, int role) const
}
template
-static std::string str_from_expanded_name (const Obj *obj)
+static std::string str_from_expanded_name (const Obj *obj, bool dash_for_empty = false)
{
if (obj) {
return obj->expanded_name ();
+ } else if (dash_for_empty) {
+ return std::string ("-");
} else {
return std::string ();
}
}
template
-static std::string str_from_name (const Obj *obj)
+static std::string str_from_name (const Obj *obj, bool dash_for_empty = false)
{
if (obj) {
return obj->name ();
+ } else if (dash_for_empty) {
+ return std::string ("-");
} else {
return std::string ();
}
}
+const std::string var_sep (" ⇔ ");
+
template
static std::string str_from_expanded_names (const std::pair &objs, bool is_single)
{
- std::string s;
-
- if (objs.first) {
- s += objs.first->expanded_name ();
- } else if (! is_single) {
- s += "-";
- }
-
+ std::string s = str_from_expanded_name (objs.first, ! is_single);
if (! is_single) {
- s += "/";
- if (objs.second) {
- s += objs.second->expanded_name ();
- } else {
- s += "-";
+ std::string t = str_from_expanded_name (objs.second, ! is_single);
+ if (t != s) {
+ s += var_sep;
+ s += t;
}
}
-
return s;
}
template
static std::string str_from_names (const std::pair &objs, bool is_single)
{
- std::string s;
-
- if (objs.first) {
- s += objs.first->name ();
- } else if (! is_single) {
- s += "-";
- }
-
+ std::string s = str_from_name (objs.first, ! is_single);
if (! is_single) {
- s += "/";
- if (objs.second) {
- s += objs.second->name ();
- } else {
- s += "-";
+ std::string t = str_from_name (objs.second, ! is_single);
+ if (t != s) {
+ s += var_sep;
+ s += t;
}
}
-
return s;
}
@@ -741,24 +729,29 @@ std::string device_string (const db::Device *device)
return s;
}
+static
+std::string device_class_string (const db::Device *device, bool dash_for_empty = false)
+{
+ std::string s;
+ if (device && device->device_class ()) {
+ s = device->device_class ()->name ();
+ } else if (dash_for_empty) {
+ s = "-";
+ }
+ return s;
+}
+
static
std::string devices_string (const std::pair &devices, bool is_single)
{
if (devices.first || devices.second) {
- std::string s;
- if (devices.first && devices.first->device_class ()) {
- s += devices.first->device_class ()->name ();
- } else if (! is_single) {
- s += "-";
- }
-
+ std::string s = device_class_string (devices.first, ! is_single);
if (! is_single) {
- s += "/";
- if (devices.second && devices.second->device_class ()) {
- s += devices.second->device_class ()->name ();
- } else {
- s += "-";
+ std::string t = device_class_string (devices.second, ! is_single);
+ if (t != s) {
+ s += var_sep;
+ s += t;
}
}
@@ -769,58 +762,103 @@ std::string devices_string (const std::pair &nets) const
+static QString build_url (void *id, const std::string &tag, const std::string &title)
{
- if (! nets.first && ! nets.second) {
+ std::string s = std::string ("";
+
+ s += tl::escaped_to_html (title);
+
+ s += "";
+
+ return tl::to_qstring (s);
+}
+
+QString
+NetlistBrowserModel::make_link_to (const std::pair &nets, int column) const
+{
+ if ((! nets.first || column == 2) && (! nets.second || column == 1)) {
return QString ();
} else {
void *id = make_id_circuit_net (mp_indexer->circuit_index (mp_indexer->parent_of (nets)), mp_indexer->net_index (nets));
- return tl::to_qstring (tl::sprintf ("%s", tl::to_string (reinterpret_cast (id)), str_from_expanded_names (nets, mp_indexer->is_single ())));
+ if (mp_indexer->is_single () || column == 1) {
+ return build_url (id, "net", str_from_expanded_name (nets.first));
+ } else if (column == 2) {
+ return build_url (id, "net", str_from_expanded_name (nets.second));
+ } else {
+ return build_url (id, "net", str_from_expanded_names (nets, mp_indexer->is_single ()));
+ }
}
}
QString
-NetlistBrowserModel::make_link_to (const std::pair &devices) const
+NetlistBrowserModel::make_link_to (const std::pair &devices, int column) const
{
- if (! devices.first && ! devices.second) {
+ if ((! devices.first || column == 2) && (! devices.second || column == 1)) {
return QString ();
} else {
void *id = make_id_circuit_device (mp_indexer->circuit_index (mp_indexer->parent_of (devices)), mp_indexer->device_index (devices));
- return tl::to_qstring (tl::sprintf ("%s", tl::to_string (reinterpret_cast (id)), str_from_expanded_names (devices, mp_indexer->is_single ())));
+ if (mp_indexer->is_single () || column == 1) {
+ return build_url (id, "device", str_from_expanded_name (devices.first));
+ } else if (column == 2) {
+ return build_url (id, "device", str_from_expanded_name (devices.second));
+ } else {
+ return build_url (id, "device", str_from_expanded_names (devices, mp_indexer->is_single ()));
+ }
}
}
QString
-NetlistBrowserModel::make_link_to (const std::pair &pins, const std::pair &circuits) const
+NetlistBrowserModel::make_link_to (const std::pair &pins, const std::pair &circuits, int column) const
{
- if (! pins.first && ! pins.second) {
+ if ((! pins.first || column == 2) && (! pins.second || column == 1)) {
return QString ();
} else {
void *id = make_id_circuit_pin (mp_indexer->circuit_index (circuits), mp_indexer->pin_index (pins, circuits));
- return tl::to_qstring (tl::sprintf ("%s", tl::to_string (reinterpret_cast (id)), str_from_expanded_names (pins, mp_indexer->is_single ())));
+ if (mp_indexer->is_single () || column == 1) {
+ return build_url (id, "pin", str_from_expanded_name (pins.first));
+ } else if (column == 2) {
+ return build_url (id, "pin", str_from_expanded_name (pins.second));
+ } else {
+ return build_url (id, "pin", str_from_expanded_names (pins, mp_indexer->is_single ()));
+ }
}
}
QString
-NetlistBrowserModel::make_link_to (const std::pair &circuits) const
+NetlistBrowserModel::make_link_to (const std::pair &circuits, int column) const
{
- if (! circuits.first && ! circuits.second) {
+ if ((! circuits.first || column == 2) && (! circuits.second || column == 1)) {
return QString ();
} else {
void *id = make_id_circuit (mp_indexer->circuit_index (circuits));
- return tl::to_qstring (tl::sprintf ("%s", tl::to_string (reinterpret_cast (id)), str_from_names (circuits, mp_indexer->is_single ())));
+ if (mp_indexer->is_single () || column == 1) {
+ return build_url (id, "circuit", str_from_name (circuits.first));
+ } else if (column == 2) {
+ return build_url (id, "circuit", str_from_name (circuits.second));
+ } else {
+ return build_url (id, "circuit", str_from_names (circuits, mp_indexer->is_single ()));
+ }
}
}
QString
-NetlistBrowserModel::make_link_to (const std::pair &subcircuits) const
+NetlistBrowserModel::make_link_to (const std::pair &subcircuits, int column) const
{
- if (! subcircuits.first && ! subcircuits.second) {
+ if ((! subcircuits.first || column == 2) && (! subcircuits.second || column == 1)) {
return QString ();
} else {
void *id = make_id_circuit_subcircuit (mp_indexer->circuit_index (mp_indexer->parent_of (subcircuits)), mp_indexer->subcircuit_index (subcircuits));
- return tl::to_qstring (tl::sprintf ("%s", tl::to_string (reinterpret_cast (id)), str_from_expanded_names (subcircuits, mp_indexer->is_single ())));
+ if (mp_indexer->is_single () || column == 1) {
+ return build_url (id, "subcircuit", str_from_expanded_name (subcircuits.first));
+ } else if (column == 2) {
+ return build_url (id, "subcircuit", str_from_expanded_name (subcircuits.second));
+ } else {
+ return build_url (id, "subcircuit", str_from_expanded_names (subcircuits, mp_indexer->is_single ()));
+ }
}
}
@@ -957,6 +995,7 @@ IndexedNetlistModel::net_pair nets_from_device_terminals (const IndexedNetlistMo
return std::make_pair (net1, net2);
}
+const std::string field_sep (" / ");
QString
NetlistBrowserModel::text (const QModelIndex &index) const
@@ -997,9 +1036,8 @@ NetlistBrowserModel::text (const QModelIndex &index) const
if (index.column () == 0) {
return tl::to_qstring (str_from_expanded_names (nets, mp_indexer->is_single ()));
} else {
- return make_link_to (nets);
+ return make_link_to (nets, index.column ());
}
- // TODO: in case of compare, column 1 is name(a):name(b), 2 is link name(a) and 3 is link name(b)
} else if (is_id_circuit_device (id)) {
@@ -1019,9 +1057,9 @@ NetlistBrowserModel::text (const QModelIndex &index) const
if (index.column () == 0) {
return tl::to_qstring (devices_string (devices, mp_indexer->is_single ()));
} else if (index.column () == 1) {
- return tl::to_qstring (str_from_expanded_name (devices.first) + " - " + device_string (devices.first));
+ return tl::to_qstring (str_from_expanded_name (devices.first) + field_sep + device_string (devices.first));
} else if (index.column () == 2) {
- return tl::to_qstring (str_from_expanded_name (devices.second) + " - " + device_string (devices.second));
+ return tl::to_qstring (str_from_expanded_name (devices.second) + field_sep + device_string (devices.second));
}
}
@@ -1042,10 +1080,9 @@ NetlistBrowserModel::text (const QModelIndex &index) const
} else {
IndexedNetlistModel::net_pair nets = nets_from_device_terminals (devices, termdefs);
- return make_link_to (nets);
+ return make_link_to (nets, index.column ());
}
- // TODO: in case of compare, column 1 is terminal, 2 is linke net(a) and 3 is link net(b)
} else if (is_id_circuit_subcircuit (id)) {
@@ -1054,10 +1091,11 @@ NetlistBrowserModel::text (const QModelIndex &index) const
IndexedNetlistModel::circuit_pair circuit_refs = circuit_refs_from_subcircuits (subcircuits);
if (index.column () == 0) {
return make_link_to (circuit_refs);
- } else {
- return tl::to_qstring (str_from_expanded_names (subcircuits, mp_indexer->is_single ()));
+ } else if (mp_indexer->is_single () || index.column () == 1) {
+ return tl::to_qstring (str_from_expanded_name (subcircuits.first));
+ } else if (index.column () == 2) {
+ return tl::to_qstring (str_from_expanded_name (subcircuits.second));
}
- // TODO: in case of compare, column 1 is circuit name(a):circuit name(b), 2 is subcircuit name(a) and 3 is subcircuit name(b)
} else if (is_id_circuit_subcircuit_pin (id)) {
@@ -1069,9 +1107,8 @@ NetlistBrowserModel::text (const QModelIndex &index) const
if (index.column () == 0) {
return make_link_to (pins, circuit_refs);
} else {
- return make_link_to (nets_from_subcircuit_pins (subcircuits, pins));
+ return make_link_to (nets_from_subcircuit_pins (subcircuits, pins), index.column ());
}
- // TODO: in case of compare, column 1 is name(a):name(b), 2 is link net(a) and 3 is link net(b)
} else if (is_id_circuit_net (id)) {
@@ -1090,12 +1127,11 @@ NetlistBrowserModel::text (const QModelIndex &index) const
// circuit/net/pin: header column = pin name, second column empty (for now)
IndexedNetlistModel::net_pin_pair pinrefs = net_pinrefs_from_id (id);
IndexedNetlistModel::circuit_pair circuits = circuits_from_id (id);
- if (index.column () == 0) {
-
+ if (mp_indexer->is_single () && index.column () == 0) {
return make_link_to (pins_from_pinrefs (pinrefs), circuits);
-
+ } else if (! mp_indexer->is_single ()) {
+ return make_link_to (pins_from_pinrefs (pinrefs), circuits, index.column ());
}
- // TODO: in case of compare use second and third column
} else if (is_id_circuit_net_subcircuit_pin (id)) {
@@ -1105,16 +1141,10 @@ NetlistBrowserModel::text (const QModelIndex &index) const
IndexedNetlistModel::circuit_pair circuit_refs = circuit_refs_from_subcircuits (subcircuits);
if (index.column () == 0) {
-
- return make_link_to (pins_from_pinrefs (pinrefs), circuit_refs) + tl::to_qstring (" - ") + make_link_to (circuit_refs);
-
- } else if (index.column () == 1) {
-
- return make_link_to (subcircuits_from_pinrefs (pinrefs));
-
+ return make_link_to (pins_from_pinrefs (pinrefs), circuit_refs) + tl::to_qstring (field_sep) + make_link_to (circuit_refs);
+ } else {
+ return make_link_to (subcircuits_from_pinrefs (pinrefs), index.column ());
}
- // TODO: in case of compare, column 1 is pin link(a):pin link(b) - circuit link(a):circuit link(b),
- // columns 2 is subcircuit link(a), columns (3) is subcircuit link(b)
} else if (is_id_circuit_net_subcircuit_pin_others (id)) {
@@ -1129,9 +1159,8 @@ NetlistBrowserModel::text (const QModelIndex &index) const
if (index.column () == 0) {
return make_link_to (pins, circuit_refs);
} else {
- return make_link_to (nets_from_subcircuit_pins (subcircuits, pins));
+ return make_link_to (nets_from_subcircuit_pins (subcircuits, pins), index.column ());
}
- // TODO: columns 2 and 3
} else if (is_id_circuit_net_device_terminal (id)) {
@@ -1144,15 +1173,14 @@ NetlistBrowserModel::text (const QModelIndex &index) const
std::pair termdefs = terminal_defs_from_terminal_refs (refs);
if (mp_indexer->is_single ()) {
- return tl::to_qstring (str_from_name (termdefs.first) + " - " + device_string (devices.first));
+ return tl::to_qstring (str_from_name (termdefs.first) + field_sep + device_string (devices.first));
} else {
- return tl::to_qstring (str_from_names (termdefs, mp_indexer->is_single ()) + " - " + devices_string (devices, mp_indexer->is_single ()));
+ return tl::to_qstring (str_from_names (termdefs, mp_indexer->is_single ()) + field_sep + devices_string (devices, mp_indexer->is_single ()));
}
} else {
- return make_link_to (devices);
+ return make_link_to (devices, index.column ());
}
- // TODO: columns 2 and 3
} else if (is_id_circuit_net_device_terminal_others (id)) {
@@ -1171,10 +1199,9 @@ NetlistBrowserModel::text (const QModelIndex &index) const
} else {
IndexedNetlistModel::net_pair nets = nets_from_device_terminals (devices, termdefs);
- return make_link_to (nets);
+ return make_link_to (nets, index.column ());
}
- // TODO: other columns
}
@@ -1526,7 +1553,7 @@ NetlistBrowserModel::icon (const QModelIndex &index) const
return icon_for_devices (device_classes);
- } else if (is_id_circuit_net_device_terminal_others (id) || is_id_circuit_net_subcircuit_pin_others (id)) {
+ } else if (is_id_circuit_pin_net (id) || is_id_circuit_device_terminal (id) || is_id_circuit_net_device_terminal_others (id) || is_id_circuit_net_subcircuit_pin_others (id)) {
IndexedNetlistModel::net_pair nets = net_from_index (index);
return icon_for_connection (nets);
@@ -1653,15 +1680,10 @@ QVariant
NetlistBrowserModel::headerData (int section, Qt::Orientation /*orientation*/, int role) const
{
if (role == Qt::DisplayRole) {
- if (section == 0) {
- return tr ("Object");
- } else if (section == 1) {
- // TODO: 2 and 3 columns
- return tr ("Name (Items)");
- }
+ return tl::to_qstring (mp_indexer->column_title (section));
+ } else {
+ return QVariant ();
}
-
- return QVariant ();
}
QModelIndex
diff --git a/src/laybasic/laybasic/layNetlistBrowserModel.h b/src/laybasic/laybasic/layNetlistBrowserModel.h
index 054a2e8cc..51b1b89b4 100644
--- a/src/laybasic/laybasic/layNetlistBrowserModel.h
+++ b/src/laybasic/laybasic/layNetlistBrowserModel.h
@@ -189,11 +189,11 @@ private:
QString text (const QModelIndex &index) const;
QString search_text (const QModelIndex &index) const;
QIcon icon (const QModelIndex &index) const;
- QString make_link_to (const std::pair &nets) const;
- QString make_link_to (const std::pair &devices) const;
- QString make_link_to (const std::pair &pins, const std::pair &circuits) const;
- QString make_link_to (const std::pair &circuits) const;
- QString make_link_to (const std::pair &sub_circuits) const;
+ QString make_link_to (const std::pair &nets, int column = 0) const;
+ QString make_link_to (const std::pair &devices, int column = 0) const;
+ QString make_link_to (const std::pair &pins, const std::pair &circuits, int column = 0) const;
+ QString make_link_to (const std::pair &circuits, int column = 0) const;
+ QString make_link_to (const std::pair &sub_circuits, int column = 0) const;
std::pair netlists () const
{
diff --git a/src/laybasic/laybasic/layNetlistBrowserPage.cc b/src/laybasic/laybasic/layNetlistBrowserPage.cc
index 3be0c0ff5..4f71ae83f 100644
--- a/src/laybasic/laybasic/layNetlistBrowserPage.cc
+++ b/src/laybasic/laybasic/layNetlistBrowserPage.cc
@@ -141,8 +141,16 @@ NetlistBrowserPage::NetlistBrowserPage (QWidget * /*parent*/)
directory_tree->addAction (actionExportSelected);
directory_tree->addAction (actionExportAll);
+ directory_tree->header ()->setDefaultSectionSize (150);
+
lay::HTMLItemDelegate *delegate;
+ delegate = new lay::HTMLItemDelegate (this);
+ delegate->set_text_margin (2);
+ delegate->set_anchors_clickable (true);
+ connect (delegate, SIGNAL (anchor_clicked (const QString &)), this, SLOT (anchor_clicked (const QString &)));
+ directory_tree->setItemDelegateForColumn (2, delegate);
+
delegate = new lay::HTMLItemDelegate (this);
delegate->set_text_margin (2);
delegate->set_anchors_clickable (true);
@@ -646,13 +654,22 @@ NetlistBrowserPage::set_db (db::LayoutToNetlist *l2ndb)
new_model = new NetlistBrowserModel (directory_tree, l2ndb, &m_colorizer);
}
+ int columns = directory_tree->model () ? directory_tree->model ()->columnCount (QModelIndex ()) : 0;
+ int new_columns = new_model->columnCount (QModelIndex ());
+
delete directory_tree->model ();
directory_tree->setModel (new_model);
connect (directory_tree->selectionModel (), SIGNAL (currentChanged (const QModelIndex &, const QModelIndex &)), this, SLOT (current_index_changed (const QModelIndex &)));
connect (directory_tree->selectionModel (), SIGNAL (selectionChanged (const QItemSelection &, const QItemSelection &)), this, SLOT (selection_changed ()));
directory_tree->header ()->show ();
- directory_tree->header ()->setSortIndicatorShown (true);
+ directory_tree->header ()->setStretchLastSection (true);
+ if (columns < new_columns) {
+ // makes sure new columns are properly size-adjusted
+ for (int i = std::max (0, columns - 1); i < new_columns; ++i) {
+ directory_tree->header ()->resizeSection (i, directory_tree->header ()->defaultSectionSize ());
+ }
+ }
find_text->setText (QString ());
}
diff --git a/src/laybasic/laybasic/layNetlistCrossReferenceModel.cc b/src/laybasic/laybasic/layNetlistCrossReferenceModel.cc
index b10c9c303..2c50ffc26 100644
--- a/src/laybasic/laybasic/layNetlistCrossReferenceModel.cc
+++ b/src/laybasic/laybasic/layNetlistCrossReferenceModel.cc
@@ -32,6 +32,18 @@ NetlistCrossReferenceModel::NetlistCrossReferenceModel (const db::NetlistCrossRe
// .. nothing yet ..
}
+std::string
+NetlistCrossReferenceModel::column_title (int section) const
+{
+ if (section == 0) {
+ return tl::to_string (tr ("Objects"));
+ } else if (section == 1) {
+ return tl::to_string (tr ("Layout"));
+ } else if (section == 2) {
+ return tl::to_string (tr ("Reference"));
+ }
+}
+
size_t NetlistCrossReferenceModel::circuit_count () const
{
return mp_cross_ref->circuit_count ();
diff --git a/src/laybasic/laybasic/layNetlistCrossReferenceModel.h b/src/laybasic/laybasic/layNetlistCrossReferenceModel.h
index 3d65696af..88789ea75 100644
--- a/src/laybasic/laybasic/layNetlistCrossReferenceModel.h
+++ b/src/laybasic/laybasic/layNetlistCrossReferenceModel.h
@@ -43,6 +43,8 @@ public:
virtual bool is_single () const { return false; }
+ virtual std::string column_title (int section) const;
+
virtual size_t circuit_count () const;
virtual size_t net_count (const circuit_pair &circuits) const;
virtual size_t net_terminal_count (const net_pair &nets) const;
diff --git a/src/laybasic/laybasic/layQtTools.cc b/src/laybasic/laybasic/layQtTools.cc
index 4b3847131..f7b536f95 100644
--- a/src/laybasic/laybasic/layQtTools.cc
+++ b/src/laybasic/laybasic/layQtTools.cc
@@ -68,7 +68,7 @@ void register_help_handler (QObject *object, const char *slot, const char *modal
// --------------------------------------------------------------------------------
std::string
-save_dialog_state (QWidget *w)
+save_dialog_state (QWidget *w, bool with_section_sizes)
{
std::string s;
@@ -86,7 +86,7 @@ save_dialog_state (QWidget *w)
s += (dynamic_cast (w))->saveState ().toBase64 ().constData ();
s += "\";";
- } else if (dynamic_cast (w)) {
+ } else if (with_section_sizes && dynamic_cast (w)) {
s += tl::to_string (w->objectName ());
s += "=\"";
@@ -112,7 +112,7 @@ save_dialog_state (QWidget *w)
}
void
-restore_dialog_state (QWidget *dialog, const std::string &s)
+restore_dialog_state (QWidget *dialog, const std::string &s, bool with_section_sizes)
{
if (! dialog) {
return;
@@ -145,7 +145,7 @@ restore_dialog_state (QWidget *dialog, const std::string &s)
(dynamic_cast (widgets.front ()))->restoreState (QByteArray::fromBase64 (value.c_str ()));
- } else if (dynamic_cast (widgets.front ())) {
+ } else if (with_section_sizes && dynamic_cast (widgets.front ())) {
#if QT_VERSION >= 0x040500
(dynamic_cast (widgets.front ()))->header ()->restoreState (QByteArray::fromBase64 (value.c_str ()));
diff --git a/src/laybasic/laybasic/layQtTools.h b/src/laybasic/laybasic/layQtTools.h
index 3e66e4f89..9b80109e3 100644
--- a/src/laybasic/laybasic/layQtTools.h
+++ b/src/laybasic/laybasic/layQtTools.h
@@ -40,12 +40,12 @@ namespace lay
*
* The state can be recovered from the string using restore_dialog_state;
*/
-LAYBASIC_PUBLIC std::string save_dialog_state (QWidget *dialog);
+LAYBASIC_PUBLIC std::string save_dialog_state (QWidget *dialog, bool with_section_sizes = true);
/**
* @brief Restore the dialog's state from the given string
*/
-LAYBASIC_PUBLIC void restore_dialog_state (QWidget *dialog, const std::string &s);
+LAYBASIC_PUBLIC void restore_dialog_state (QWidget *dialog, const std::string &s, bool with_section_sizes = true);
/**
* @brief A utility function connecting a label's linkActivated event with the help browser