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