LVSDB browser: styling.

This commit is contained in:
Matthias Koefferlein 2019-05-24 23:30:55 +02:00
parent 875609ffb1
commit 33b836d243
7 changed files with 107 additions and 46 deletions

View File

@ -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<IndexedNetlistModel::circuit_pair, IndexedNetlistModel::Status>
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<db::Circuit> ());
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::Circuit> ()), db::NetlistCrossReference::None);
}
IndexedNetlistModel::net_pair
std::pair<IndexedNetlistModel::net_pair, IndexedNetlistModel::Status>
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<db::Net> ());
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::Net> ()), 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<db::NetPinRef> ());
}
IndexedNetlistModel::device_pair
std::pair<IndexedNetlistModel::device_pair, IndexedNetlistModel::Status>
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<db::Device> ());
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::Device> ()), db::NetlistCrossReference::None);
}
IndexedNetlistModel::pin_pair
std::pair<IndexedNetlistModel::pin_pair, IndexedNetlistModel::Status>
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<db::Pin> ());
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::Pin> ()), db::NetlistCrossReference::None);
}
IndexedNetlistModel::subcircuit_pair
std::pair<IndexedNetlistModel::subcircuit_pair, IndexedNetlistModel::Status>
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<db::SubCircuit> ());
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::SubCircuit> ()), db::NetlistCrossReference::None);
}
size_t

View File

@ -25,6 +25,7 @@
#define HDR_layIndexedNetlistModel
#include "laybasicCommon.h"
#include "dbNetlistCrossReference.h" // for Status enum
#include <map>
#include <vector>
@ -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_pair, Status> circuit_from_index (size_t index) const = 0;
virtual std::pair<net_pair, Status> 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_pair, Status> device_from_index (const circuit_pair &circuits, size_t index) const = 0;
virtual std::pair<pin_pair, Status> pin_from_index (const circuit_pair &circuits, size_t index) const = 0;
virtual std::pair<subcircuit_pair, Status> 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_pair, Status> 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_pair, Status> 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_pair, Status> device_from_index (const circuit_pair &circuits, size_t index) const;
virtual std::pair<pin_pair, Status> pin_from_index (const circuit_pair &circuits, size_t index) const;
virtual std::pair<subcircuit_pair, Status> 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;

View File

@ -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);

View File

@ -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 <class Obj>
@ -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::pair<const Obj *, const
}
}
db::NetlistCrossReference::Status
NetlistBrowserModel::status (const QModelIndex &index) const
{
void *id = index.internalPointer ();
if (is_id_circuit (id)) {
size_t index = circuit_index_from_id (id);
return mp_indexer->circuit_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<const db::Circuit *, const db::Circuit *>
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<const db::Net *, const db::Net *>
@ -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<const db::NetSubcircuitPinRef *, const db::NetSubcircuitPinRef *>
@ -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<const db::Pin *, const db::Pin *>
@ -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 {

View File

@ -188,6 +188,7 @@ private:
std::pair<const db::SubCircuit *, const db::SubCircuit *> 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<const db::Net *, const db::Net *> &nets, int column = 0) const;
QString make_link_to (const std::pair<const db::Device *, const db::Device *> &devices, int column = 0) const;

View File

@ -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<IndexedNetlistModel::circuit_pair, NetlistCrossReferenceModel::Status> 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<IndexedNetlistModel::net_pair, NetlistCrossReferenceModel::Status> 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<IndexedNetlistModel::device_pair, NetlistCrossReferenceModel::Status> 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<IndexedNetlistModel::pin_pair, NetlistCrossReferenceModel::Status> 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<IndexedNetlistModel::subcircuit_pair, NetlistCrossReferenceModel::Status> 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 <class Pair, class Iter>

View File

@ -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_pair, Status> circuit_from_index (size_t index) const;
virtual std::pair<net_pair, Status> 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_pair, Status> device_from_index (const circuit_pair &circuits, size_t index) const;
virtual std::pair<pin_pair, Status> pin_from_index (const circuit_pair &circuits, size_t index) const;
virtual std::pair<subcircuit_pair, Status> 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;