From 33b836d2431bf4c8540df967164a6134f9da7168 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 24 May 2019 23:30:55 +0200 Subject: [PATCH] LVSDB browser: styling. --- .../laybasic/layIndexedNetlistModel.cc | 20 ++--- .../laybasic/layIndexedNetlistModel.h | 23 +++--- src/laybasic/laybasic/layItemDelegates.cc | 3 + .../laybasic/layNetlistBrowserModel.cc | 73 ++++++++++++++++--- .../laybasic/layNetlistBrowserModel.h | 1 + .../laybasic/layNetlistCrossReferenceModel.cc | 23 +++--- .../laybasic/layNetlistCrossReferenceModel.h | 10 +-- 7 files changed, 107 insertions(+), 46 deletions(-) diff --git a/src/laybasic/laybasic/layIndexedNetlistModel.cc b/src/laybasic/laybasic/layIndexedNetlistModel.cc index 8007d004d..a9327b6b3 100644 --- a/src/laybasic/laybasic/layIndexedNetlistModel.cc +++ b/src/laybasic/laybasic/layIndexedNetlistModel.cc @@ -267,18 +267,18 @@ SingleIndexedNetlistModel::parent_of (const subcircuit_pair &subcircuits) const return std::make_pair (subcircuits.first->circuit (), (const db::Circuit *) 0); } -IndexedNetlistModel::circuit_pair +std::pair SingleIndexedNetlistModel::circuit_from_index (size_t index) const { db::Netlist::const_circuit_iterator none; - return attr_by_object_and_index (std::make_pair (mp_netlist, (const db::Netlist *) 0), index, mp_netlist->begin_circuits (), mp_netlist->end_circuits (), none, none, m_circuit_by_index, sort_by_name ()); + return std::make_pair (attr_by_object_and_index (std::make_pair (mp_netlist, (const db::Netlist *) 0), index, mp_netlist->begin_circuits (), mp_netlist->end_circuits (), none, none, m_circuit_by_index, sort_by_name ()), db::NetlistCrossReference::None); } -IndexedNetlistModel::net_pair +std::pair SingleIndexedNetlistModel::net_from_index (const circuit_pair &circuits, size_t index) const { db::Circuit::const_net_iterator none; - return attr_by_object_and_index (circuits, index, circuits.first->begin_nets (), circuits.first->end_nets (), none, none, m_net_by_circuit_and_index, sort_by_expanded_name ()); + return std::make_pair (attr_by_object_and_index (circuits, index, circuits.first->begin_nets (), circuits.first->end_nets (), none, none, m_net_by_circuit_and_index, sort_by_expanded_name ()), db::NetlistCrossReference::None); } const db::Net * @@ -308,25 +308,25 @@ SingleIndexedNetlistModel::net_pinref_from_index (const net_pair &nets, size_t i return attr_by_object_and_index (nets, index, nets.first->begin_pins (), nets.first->end_pins (), none, none, m_pinref_by_net_and_index, sort_by_pin_name ()); } -IndexedNetlistModel::device_pair +std::pair SingleIndexedNetlistModel::device_from_index (const circuit_pair &circuits, size_t index) const { db::Circuit::const_device_iterator none; - return attr_by_object_and_index (circuits, index, circuits.first->begin_devices (), circuits.first->end_devices (), none, none, m_device_by_circuit_and_index, sort_by_expanded_name ()); + return std::make_pair (attr_by_object_and_index (circuits, index, circuits.first->begin_devices (), circuits.first->end_devices (), none, none, m_device_by_circuit_and_index, sort_by_expanded_name ()), db::NetlistCrossReference::None); } -IndexedNetlistModel::pin_pair +std::pair SingleIndexedNetlistModel::pin_from_index (const circuit_pair &circuits, size_t index) const { db::Circuit::const_pin_iterator none; - return attr_by_object_and_index (circuits, index, circuits.first->begin_pins (), circuits.first->end_pins (), none, none, m_pin_by_circuit_and_index, sort_by_expanded_name ()); + return std::make_pair (attr_by_object_and_index (circuits, index, circuits.first->begin_pins (), circuits.first->end_pins (), none, none, m_pin_by_circuit_and_index, sort_by_expanded_name ()), db::NetlistCrossReference::None); } -IndexedNetlistModel::subcircuit_pair +std::pair SingleIndexedNetlistModel::subcircuit_from_index (const circuit_pair &circuits, size_t index) const { db::Circuit::const_subcircuit_iterator none; - return attr_by_object_and_index (circuits, index, circuits.first->begin_subcircuits (), circuits.first->end_subcircuits (), none, none, m_subcircuit_by_circuit_and_index, sort_by_expanded_name ()); + return std::make_pair (attr_by_object_and_index (circuits, index, circuits.first->begin_subcircuits (), circuits.first->end_subcircuits (), none, none, m_subcircuit_by_circuit_and_index, sort_by_expanded_name ()), db::NetlistCrossReference::None); } size_t diff --git a/src/laybasic/laybasic/layIndexedNetlistModel.h b/src/laybasic/laybasic/layIndexedNetlistModel.h index 11c4dbc93..d60711f36 100644 --- a/src/laybasic/laybasic/layIndexedNetlistModel.h +++ b/src/laybasic/laybasic/layIndexedNetlistModel.h @@ -25,6 +25,7 @@ #define HDR_layIndexedNetlistModel #include "laybasicCommon.h" +#include "dbNetlistCrossReference.h" // for Status enum #include #include @@ -53,6 +54,8 @@ namespace lay class LAYBASIC_PUBLIC IndexedNetlistModel { public: + typedef db::NetlistCrossReference::Status Status; + IndexedNetlistModel () { } virtual ~IndexedNetlistModel () { } @@ -82,15 +85,15 @@ public: virtual circuit_pair parent_of (const device_pair &device_pair) const = 0; virtual circuit_pair parent_of (const subcircuit_pair &subcircuit_pair) const = 0; - virtual circuit_pair circuit_from_index (size_t index) const = 0; - virtual net_pair net_from_index (const circuit_pair &circuits, size_t index) const = 0; + virtual std::pair circuit_from_index (size_t index) const = 0; + virtual std::pair net_from_index (const circuit_pair &circuits, size_t index) const = 0; virtual const db::Net *second_net_for (const db::Net *first) const = 0; virtual net_subcircuit_pin_pair net_subcircuit_pinref_from_index (const net_pair &nets, size_t index) const = 0; virtual net_terminal_pair net_terminalref_from_index (const net_pair &nets, size_t index) const = 0; virtual net_pin_pair net_pinref_from_index (const net_pair &nets, size_t index) const = 0; - virtual device_pair device_from_index (const circuit_pair &circuits, size_t index) const = 0; - virtual pin_pair pin_from_index (const circuit_pair &circuits, size_t index) const = 0; - virtual subcircuit_pair subcircuit_from_index (const circuit_pair &circuits, size_t index) const = 0; + virtual std::pair device_from_index (const circuit_pair &circuits, size_t index) const = 0; + virtual std::pair pin_from_index (const circuit_pair &circuits, size_t index) const = 0; + virtual std::pair subcircuit_from_index (const circuit_pair &circuits, size_t index) const = 0; virtual size_t circuit_index (const circuit_pair &circuits) const = 0; virtual size_t net_index (const net_pair &nets) const = 0; @@ -137,16 +140,16 @@ public: virtual circuit_pair parent_of (const net_pair &nets) const; virtual circuit_pair parent_of (const device_pair &devices) const; virtual circuit_pair parent_of (const subcircuit_pair &subcircuits) const; - virtual circuit_pair circuit_from_index (size_t index) const; + virtual std::pair circuit_from_index (size_t index) const; - virtual net_pair net_from_index (const circuit_pair &circuits, size_t index) const; + virtual std::pair net_from_index (const circuit_pair &circuits, size_t index) const; virtual const db::Net *second_net_for (const db::Net * /*first*/) const; virtual net_subcircuit_pin_pair net_subcircuit_pinref_from_index (const net_pair &nets, size_t index) const; virtual net_terminal_pair net_terminalref_from_index (const net_pair &nets, size_t index) const; virtual net_pin_pair net_pinref_from_index (const net_pair &nets, size_t index) const; - virtual device_pair device_from_index (const circuit_pair &circuits, size_t index) const; - virtual pin_pair pin_from_index (const circuit_pair &circuits, size_t index) const; - virtual subcircuit_pair subcircuit_from_index (const circuit_pair &circuits, size_t index) const; + virtual std::pair device_from_index (const circuit_pair &circuits, size_t index) const; + virtual std::pair pin_from_index (const circuit_pair &circuits, size_t index) const; + virtual std::pair subcircuit_from_index (const circuit_pair &circuits, size_t index) const; virtual size_t circuit_index (const circuit_pair &circuits) const; virtual size_t net_index (const net_pair &nets) const; diff --git a/src/laybasic/laybasic/layItemDelegates.cc b/src/laybasic/laybasic/layItemDelegates.cc index d7217d29b..65b73c15e 100644 --- a/src/laybasic/laybasic/layItemDelegates.cc +++ b/src/laybasic/laybasic/layItemDelegates.cc @@ -113,6 +113,7 @@ HTMLItemDelegate::paint (QPainter *painter, const QStyleOptionViewItem &option, } doc.setTextWidth (m_text_width); doc.setDocumentMargin (m_text_margin); + doc.setDefaultFont (option_v4.font); option_v4.text = QString (); style->drawControl (QStyle::CE_ItemViewItem, &option_v4, painter); @@ -123,6 +124,8 @@ HTMLItemDelegate::paint (QPainter *painter, const QStyleOptionViewItem &option, ctx.palette.setColor (QPalette::Text, option_v4.palette.color (QPalette::Active, QPalette::HighlightedText)); } else if (! is_enabled) { ctx.palette.setColor (QPalette::Text, option_v4.palette.color (QPalette::Disabled, QPalette::Text)); + } else { + ctx.palette.setColor (QPalette::Text, option_v4.palette.color (QPalette::Text)); } QRect text_rect = style->subElementRect (QStyle::SE_ItemViewItemText, &option_v4); diff --git a/src/laybasic/laybasic/layNetlistBrowserModel.cc b/src/laybasic/laybasic/layNetlistBrowserModel.cc index 5c2e07add..6bb568a14 100644 --- a/src/laybasic/laybasic/layNetlistBrowserModel.cc +++ b/src/laybasic/laybasic/layNetlistBrowserModel.cc @@ -642,9 +642,21 @@ NetlistBrowserModel::data (const QModelIndex &index, int role) const return QVariant (text (index)); } else if (role == Qt::UserRole) { return QVariant (search_text (index)); - } else { - return QVariant (); + } else if (role == Qt::FontRole) { + db::NetlistCrossReference::Status st = status (index); + if (st == db::NetlistCrossReference::NoMatch || st == db::NetlistCrossReference::Mismatch || st == db::NetlistCrossReference::Skipped) { + QFont font; + font.setWeight (QFont::Bold); + return QVariant (font); + } + } else if (role == Qt::ForegroundRole) { + db::NetlistCrossReference::Status st = status (index); + if (st == db::NetlistCrossReference::Match || st == db::NetlistCrossReference::MatchWithWarning) { + // taken from marker browser: + return QVariant (QColor (0, 192, 0)); + } } + return QVariant (); } template @@ -1154,7 +1166,7 @@ NetlistBrowserModel::text (const QModelIndex &index) const size_t other_index = circuit_net_subcircuit_pin_other_index_from_id (id); IndexedNetlistModel::circuit_pair circuit_refs = circuit_refs_from_subcircuits (subcircuits); - IndexedNetlistModel::pin_pair pins = mp_indexer->pin_from_index (circuit_refs, other_index); + IndexedNetlistModel::pin_pair pins = mp_indexer->pin_from_index (circuit_refs, other_index).first; if (index.column () == 0) { return make_link_to (pins, circuit_refs); @@ -1247,6 +1259,45 @@ static std::string search_string_from_names (const std::paircircuit_from_index (index).second; + + } else if (is_id_circuit_pin (id)) { + + IndexedNetlistModel::circuit_pair circuits = circuits_from_id (id); + size_t index = circuit_pin_index_from_id (id); + return mp_indexer->pin_from_index (circuits, index).second; + + } else if (is_id_circuit_device (id)) { + + IndexedNetlistModel::circuit_pair circuits = circuits_from_id (id); + size_t index = circuit_device_index_from_id (id); + return mp_indexer->device_from_index (circuits, index).second; + + } else if (is_id_circuit_subcircuit (id)) { + + IndexedNetlistModel::circuit_pair circuits = circuits_from_id (id); + size_t index = circuit_subcircuit_index_from_id (id); + return mp_indexer->subcircuit_from_index (circuits, index).second; + + } else if (is_id_circuit_net (id)) { + + IndexedNetlistModel::circuit_pair circuits = circuits_from_id (id); + size_t index = circuit_net_index_from_id (id); + return mp_indexer->net_from_index (circuits, index).second; + + } + + return db::NetlistCrossReference::None; +} + QString NetlistBrowserModel::search_text (const QModelIndex &index) const { @@ -1324,7 +1375,7 @@ NetlistBrowserModel::search_text (const QModelIndex &index) const IndexedNetlistModel::subcircuit_pair subcircuits = subcircuits_from_pinrefs (pinrefs); IndexedNetlistModel::circuit_pair circuit_refs = circuit_refs_from_subcircuits (subcircuits); - IndexedNetlistModel::pin_pair pins = mp_indexer->pin_from_index (circuit_refs, other_index); + IndexedNetlistModel::pin_pair pins = mp_indexer->pin_from_index (circuit_refs, other_index).first; IndexedNetlistModel::net_pair nets = nets_from_circuit_pins (circuit_refs, pins); return tl::to_qstring (combine_search_strings (search_string_from_names (pins), search_string_from_expanded_names (nets))); @@ -1829,7 +1880,7 @@ NetlistBrowserModel::net_from_index (const QModelIndex &index) const IndexedNetlistModel::subcircuit_pair subcircuits = subcircuits_from_pinrefs (pinrefs); IndexedNetlistModel::circuit_pair circuit_refs = circuit_refs_from_subcircuits (subcircuits); - IndexedNetlistModel::pin_pair pins = mp_indexer->pin_from_index (circuit_refs, other_index); + IndexedNetlistModel::pin_pair pins = mp_indexer->pin_from_index (circuit_refs, other_index).first; return nets_from_subcircuit_pins (subcircuits, pins); @@ -2063,7 +2114,7 @@ std::pair NetlistBrowserModel::circuits_from_id (void *id) const { size_t index = circuit_index_from_id (id); - return mp_indexer->circuit_from_index (index); + return mp_indexer->circuit_from_index (index).first; } std::pair @@ -2072,7 +2123,7 @@ NetlistBrowserModel::nets_from_id (void *id) const IndexedNetlistModel::circuit_pair circuits = circuits_from_id (id); size_t index = circuit_net_index_from_id (id); - return mp_indexer->net_from_index (circuits, index); + return mp_indexer->net_from_index (circuits, index).first; } std::pair @@ -2108,7 +2159,7 @@ NetlistBrowserModel::devices_from_id (void *id) const IndexedNetlistModel::circuit_pair circuits = circuits_from_id (id); size_t index = circuit_device_index_from_id (id); - return mp_indexer->device_from_index (circuits, index); + return mp_indexer->device_from_index (circuits, index).first; } std::pair @@ -2121,7 +2172,7 @@ NetlistBrowserModel::pins_from_id (void *id) const size_t index = circuit_subcircuit_pin_index_from_id (id); - return mp_indexer->pin_from_index (circuit_refs, index); + return mp_indexer->pin_from_index (circuit_refs, index).first; } else { @@ -2129,7 +2180,7 @@ NetlistBrowserModel::pins_from_id (void *id) const size_t index = circuit_pin_index_from_id (id); - return mp_indexer->pin_from_index (circuits, index); + return mp_indexer->pin_from_index (circuits, index).first; } } @@ -2142,7 +2193,7 @@ NetlistBrowserModel::subcircuits_from_id (void *id) const IndexedNetlistModel::circuit_pair circuits = circuits_from_id (id); size_t index = circuit_subcircuit_index_from_id (id); - return mp_indexer->subcircuit_from_index (circuits, index); + return mp_indexer->subcircuit_from_index (circuits, index).first; } else { diff --git a/src/laybasic/laybasic/layNetlistBrowserModel.h b/src/laybasic/laybasic/layNetlistBrowserModel.h index 51b1b89b4..b2987d0d4 100644 --- a/src/laybasic/laybasic/layNetlistBrowserModel.h +++ b/src/laybasic/laybasic/layNetlistBrowserModel.h @@ -188,6 +188,7 @@ private: std::pair subcircuits_from_id (void *id) const; QString text (const QModelIndex &index) const; QString search_text (const QModelIndex &index) const; + db::NetlistCrossReference::Status status (const QModelIndex &index) const; QIcon icon (const QModelIndex &index) 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; diff --git a/src/laybasic/laybasic/layNetlistCrossReferenceModel.cc b/src/laybasic/laybasic/layNetlistCrossReferenceModel.cc index 2c50ffc26..a72b5f79b 100644 --- a/src/laybasic/laybasic/layNetlistCrossReferenceModel.cc +++ b/src/laybasic/laybasic/layNetlistCrossReferenceModel.cc @@ -166,16 +166,19 @@ IndexedNetlistModel::circuit_pair NetlistCrossReferenceModel::parent_of (const I return get_parent_of (subcircuit_pair, mp_cross_ref.get (), m_parents_of_subcircuits); } -IndexedNetlistModel::circuit_pair NetlistCrossReferenceModel::circuit_from_index (size_t index) const +std::pair NetlistCrossReferenceModel::circuit_from_index (size_t index) const { - return mp_cross_ref->begin_circuits () [index]; + IndexedNetlistModel::circuit_pair cp = mp_cross_ref->begin_circuits () [index]; + const db::NetlistCrossReference::PerCircuitData *data = mp_cross_ref->per_circuit_data_for (cp); + tl_assert (data != 0); + return std::make_pair (cp, data->status); } -IndexedNetlistModel::net_pair NetlistCrossReferenceModel::net_from_index (const circuit_pair &circuits, size_t index) const +std::pair NetlistCrossReferenceModel::net_from_index (const circuit_pair &circuits, size_t index) const { const db::NetlistCrossReference::PerCircuitData *data = mp_cross_ref->per_circuit_data_for (circuits); tl_assert (data != 0); - return data->nets [index].pair; + return std::make_pair (data->nets [index].pair, data->nets [index].status); } const db::Net *NetlistCrossReferenceModel::second_net_for (const db::Net *first) const @@ -204,25 +207,25 @@ IndexedNetlistModel::net_pin_pair NetlistCrossReferenceModel::net_pinref_from_in return data->pins [index]; } -IndexedNetlistModel::device_pair NetlistCrossReferenceModel::device_from_index (const circuit_pair &circuits, size_t index) const +std::pair NetlistCrossReferenceModel::device_from_index (const circuit_pair &circuits, size_t index) const { const db::NetlistCrossReference::PerCircuitData *data = mp_cross_ref->per_circuit_data_for (circuits); tl_assert (data != 0); - return data->devices [index].pair; + return std::make_pair (data->devices [index].pair, data->devices [index].status); } -IndexedNetlistModel::pin_pair NetlistCrossReferenceModel::pin_from_index (const circuit_pair &circuits, size_t index) const +std::pair NetlistCrossReferenceModel::pin_from_index (const circuit_pair &circuits, size_t index) const { const db::NetlistCrossReference::PerCircuitData *data = mp_cross_ref->per_circuit_data_for (circuits); tl_assert (data != 0); - return data->pins [index].pair; + return std::make_pair (data->pins [index].pair, data->pins [index].status); } -IndexedNetlistModel::subcircuit_pair NetlistCrossReferenceModel::subcircuit_from_index (const circuit_pair &circuits, size_t index) const +std::pair NetlistCrossReferenceModel::subcircuit_from_index (const circuit_pair &circuits, size_t index) const { const db::NetlistCrossReference::PerCircuitData *data = mp_cross_ref->per_circuit_data_for (circuits); tl_assert (data != 0); - return data->subcircuits [index].pair; + return std::make_pair (data->subcircuits [index].pair, data->subcircuits [index].status); } template diff --git a/src/laybasic/laybasic/layNetlistCrossReferenceModel.h b/src/laybasic/laybasic/layNetlistCrossReferenceModel.h index 88789ea75..f5bf22e60 100644 --- a/src/laybasic/laybasic/layNetlistCrossReferenceModel.h +++ b/src/laybasic/laybasic/layNetlistCrossReferenceModel.h @@ -58,15 +58,15 @@ public: virtual circuit_pair parent_of (const device_pair &device_pair) const; virtual circuit_pair parent_of (const subcircuit_pair &subcircuit_pair) const; - virtual circuit_pair circuit_from_index (size_t index) const; - virtual net_pair net_from_index (const circuit_pair &circuits, size_t index) const; + virtual std::pair circuit_from_index (size_t index) const; + virtual std::pair net_from_index (const circuit_pair &circuits, size_t index) const; virtual const db::Net *second_net_for (const db::Net *first) const; virtual net_subcircuit_pin_pair net_subcircuit_pinref_from_index (const net_pair &nets, size_t index) const; virtual net_terminal_pair net_terminalref_from_index (const net_pair &nets, size_t index) const; virtual net_pin_pair net_pinref_from_index (const net_pair &nets, size_t index) const; - virtual device_pair device_from_index (const circuit_pair &circuits, size_t index) const; - virtual pin_pair pin_from_index (const circuit_pair &circuits, size_t index) const; - virtual subcircuit_pair subcircuit_from_index (const circuit_pair &circuits, size_t index) const; + virtual std::pair device_from_index (const circuit_pair &circuits, size_t index) const; + virtual std::pair pin_from_index (const circuit_pair &circuits, size_t index) const; + virtual std::pair subcircuit_from_index (const circuit_pair &circuits, size_t index) const; virtual size_t circuit_index (const circuit_pair &circuits) const; virtual size_t net_index (const net_pair &nets) const;