diff --git a/src/laybasic/laybasic/images/icon_conn_16.png b/src/laybasic/laybasic/images/icon_conn_16.png
new file mode 100644
index 000000000..853a1e17d
Binary files /dev/null and b/src/laybasic/laybasic/images/icon_conn_16.png differ
diff --git a/src/laybasic/laybasic/images/icon_conn_24.png b/src/laybasic/laybasic/images/icon_conn_24.png
new file mode 100644
index 000000000..eb75f1adb
Binary files /dev/null and b/src/laybasic/laybasic/images/icon_conn_24.png differ
diff --git a/src/laybasic/laybasic/images/icon_conn_32.png b/src/laybasic/laybasic/images/icon_conn_32.png
new file mode 100644
index 000000000..1c9ad95c7
Binary files /dev/null and b/src/laybasic/laybasic/images/icon_conn_32.png differ
diff --git a/src/laybasic/laybasic/images/icon_conn_48.png b/src/laybasic/laybasic/images/icon_conn_48.png
new file mode 100644
index 000000000..f22db2017
Binary files /dev/null and b/src/laybasic/laybasic/images/icon_conn_48.png differ
diff --git a/src/laybasic/laybasic/images/icon_conn_light_16.png b/src/laybasic/laybasic/images/icon_conn_light_16.png
new file mode 100644
index 000000000..9b78e576c
Binary files /dev/null and b/src/laybasic/laybasic/images/icon_conn_light_16.png differ
diff --git a/src/laybasic/laybasic/images/icon_conn_light_24.png b/src/laybasic/laybasic/images/icon_conn_light_24.png
new file mode 100644
index 000000000..f499bb281
Binary files /dev/null and b/src/laybasic/laybasic/images/icon_conn_light_24.png differ
diff --git a/src/laybasic/laybasic/images/icon_conn_light_32.png b/src/laybasic/laybasic/images/icon_conn_light_32.png
new file mode 100644
index 000000000..63d3290a0
Binary files /dev/null and b/src/laybasic/laybasic/images/icon_conn_light_32.png differ
diff --git a/src/laybasic/laybasic/images/icon_conn_light_48.png b/src/laybasic/laybasic/images/icon_conn_light_48.png
new file mode 100644
index 000000000..85ef8444f
Binary files /dev/null and b/src/laybasic/laybasic/images/icon_conn_light_48.png differ
diff --git a/src/laybasic/laybasic/images/icons.svg b/src/laybasic/laybasic/images/icons.svg
index 04a3e84ad..8dee44d0c 100644
--- a/src/laybasic/laybasic/images/icons.svg
+++ b/src/laybasic/laybasic/images/icons.svg
@@ -25,9 +25,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="2.8"
- inkscape:cx="560.64642"
- inkscape:cy="920.20375"
+ inkscape:zoom="1.4142136"
+ inkscape:cx="346.93569"
+ inkscape:cy="970.66949"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -35,7 +35,7 @@
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:snap-nodes="true"
- inkscape:window-width="1622"
+ inkscape:window-width="1857"
inkscape:window-height="991"
inkscape:window-x="34"
inkscape:window-y="51"
@@ -2009,5 +2009,397 @@
sodipodi:type="arc"
id="path4389"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ icon_conn_48.png
+ icon_conn_32.png
+ icon_conn_24.png
+ icon_conn_16.png
+
+
+
+
+
+
+
+
+
+
+
+
+ icon_conn_light_48.png
+ icon_conn_light_32.png
+ icon_conn_light_24.png
+ icon_conn_light_16.png
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/laybasic/laybasic/layNetlistBrowserPage.cc b/src/laybasic/laybasic/layNetlistBrowserPage.cc
index 80f4e70f6..d792dc674 100644
--- a/src/laybasic/laybasic/layNetlistBrowserPage.cc
+++ b/src/laybasic/laybasic/layNetlistBrowserPage.cc
@@ -114,7 +114,7 @@ NetColorizer::configure (const QColor &marker_color, const lay::ColorPalette *au
bool
NetColorizer::has_color_for_net (const db::Net *net)
{
- return m_auto_colors_enabled || m_custom_color.find (net) != m_custom_color.end ();
+ return net != 0 && (m_auto_colors_enabled || m_custom_color.find (net) != m_custom_color.end ());
}
void
@@ -1024,6 +1024,26 @@ static QIcon light_icon_for_net ()
return icon;
}
+static QIcon icon_for_connection ()
+{
+ QIcon icon;
+ icon.addPixmap (QPixmap (QString::fromUtf8 (":/images/icon_conn_48.png")));
+ icon.addPixmap (QPixmap (QString::fromUtf8 (":/images/icon_conn_32.png")));
+ icon.addPixmap (QPixmap (QString::fromUtf8 (":/images/icon_conn_24.png")));
+ icon.addPixmap (QPixmap (QString::fromUtf8 (":/images/icon_conn_16.png")));
+ return icon;
+}
+
+static QIcon light_icon_for_connection ()
+{
+ QIcon icon;
+ icon.addPixmap (QPixmap (QString::fromUtf8 (":/images/icon_conn_light_48.png")));
+ icon.addPixmap (QPixmap (QString::fromUtf8 (":/images/icon_conn_light_32.png")));
+ icon.addPixmap (QPixmap (QString::fromUtf8 (":/images/icon_conn_light_24.png")));
+ icon.addPixmap (QPixmap (QString::fromUtf8 (":/images/icon_conn_light_16.png")));
+ return icon;
+}
+
static QIcon icon_for_pin ()
{
QIcon icon;
@@ -1067,14 +1087,13 @@ static QIcon icon_for_circuit ()
return icon;
}
-static QIcon net_icon_with_color (const QColor &color)
+static QIcon colored_icon (const QColor &color, const QIcon &original_icon)
{
if (! color.isValid ()) {
return icon_for_net ();
}
QIcon colored_icon;
- QIcon original_icon = light_icon_for_net ();
QList sizes = original_icon.availableSizes ();
for (QList::const_iterator i = sizes.begin (); i != sizes.end (); ++i) {
@@ -1087,8 +1106,10 @@ static QIcon net_icon_with_color (const QColor &color)
for (int x = 0; x < i->width (); ++x) {
for (int y = 0; y < i->height (); ++y) {
QRgb pixel = image.pixel (x, y);
- pixel = (pixel & ~RGB_MASK) | (color.rgb () & RGB_MASK);
- image.setPixel (x, y, pixel);
+ if (pixel != 0xffffffff) {
+ pixel = (pixel & ~RGB_MASK) | (color.rgb () & RGB_MASK);
+ image.setPixel (x, y, pixel);
+ }
}
}
@@ -1100,6 +1121,16 @@ static QIcon net_icon_with_color (const QColor &color)
return colored_icon;
}
+static QIcon net_icon_with_color (const QColor &color)
+{
+ return colored_icon (color, light_icon_for_net ());
+}
+
+static QIcon connection_icon_with_color (const QColor &color)
+{
+ return colored_icon (color, light_icon_for_connection ());
+}
+
QIcon
NetlistBrowserModel::icon_for_net (const db::Net *net) const
{
@@ -1120,20 +1151,40 @@ NetlistBrowserModel::icon_for_net (const db::Net *net) const
}
}
+QIcon
+NetlistBrowserModel::icon_for_connection (const db::Net *net) const
+{
+ if (mp_colorizer && mp_colorizer->has_color_for_net (net)) {
+
+ QColor color = mp_colorizer->color_of_net (net);
+
+ lay::color_t rgb = lay::color_t (color.rgb ());
+ std::map::const_iterator c = m_connection_icon_per_color.find (rgb);
+ if (c == m_connection_icon_per_color.end ()) {
+ c = m_connection_icon_per_color.insert (std::make_pair (rgb, connection_icon_with_color (color))).first;
+ }
+
+ return c->second;
+
+ } else {
+ return lay::icon_for_connection ();
+ }
+}
+
QIcon
NetlistBrowserModel::icon (const QModelIndex &index) const
{
void *id = index.internalPointer ();
- const db::Net *net = net_from_index (index);
- if (net) {
- return icon_for_net (net);
- }
-
if (is_id_circuit (id)) {
return icon_for_circuit ();
} else if (is_id_circuit_pin (id)) {
return icon_for_pin ();
+ } else if (is_id_circuit_net (id)) {
+
+ const db::Net *net = net_from_index (index);
+ return icon_for_net (net);
+
} else if (is_id_circuit_device (id)) {
const db::Device *device = device_from_id (id);
@@ -1141,6 +1192,11 @@ NetlistBrowserModel::icon (const QModelIndex &index) const
return icon_for_device (device->device_class ());
}
+ } else if (is_id_circuit_net_device_terminal_others (id) || is_id_circuit_net_subcircuit_pin_others (id)) {
+
+ const db::Net *net = net_from_index (index);
+ return icon_for_connection (net);
+
} else if (is_id_circuit_subcircuit (id)) {
return icon_for_circuit ();
} else if (is_id_circuit_net_pin (id) || is_id_circuit_net_subcircuit_pin_others (id)) {
diff --git a/src/laybasic/laybasic/layNetlistBrowserPage.h b/src/laybasic/laybasic/layNetlistBrowserPage.h
index b7a69f4ba..3ac871105 100644
--- a/src/laybasic/laybasic/layNetlistBrowserPage.h
+++ b/src/laybasic/laybasic/layNetlistBrowserPage.h
@@ -194,6 +194,7 @@ private:
}
QIcon icon_for_net (const db::Net *net) const;
+ QIcon icon_for_connection (const db::Net *net) const;
db::LayoutToNetlist *mp_l2ndb;
NetColorizer *mp_colorizer;
@@ -210,6 +211,7 @@ private:
mutable std::map m_pin_index_by_object;
mutable std::map m_subcircuit_index_by_object;
mutable std::map m_net_icon_per_color;
+ mutable std::map m_connection_icon_per_color;
};
/**
diff --git a/src/laybasic/laybasic/laybasicResources.qrc b/src/laybasic/laybasic/laybasicResources.qrc
index c9869e87c..39169648c 100644
--- a/src/laybasic/laybasic/laybasicResources.qrc
+++ b/src/laybasic/laybasic/laybasicResources.qrc
@@ -28,5 +28,13 @@
images/icon_net_light_24.png
images/icon_net_light_32.png
images/icon_net_light_48.png
+ images/icon_conn_16.png
+ images/icon_conn_24.png
+ images/icon_conn_32.png
+ images/icon_conn_48.png
+ images/icon_conn_light_16.png
+ images/icon_conn_light_24.png
+ images/icon_conn_light_32.png
+ images/icon_conn_light_48.png