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