From 71d1f4567c04e4ce585914920961971e214ae2c0 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Wed, 1 May 2019 22:26:05 +0200 Subject: [PATCH] Netlist browser: net icons for connections. --- src/laybasic/laybasic/images/icon_conn_16.png | Bin 0 -> 331 bytes src/laybasic/laybasic/images/icon_conn_24.png | Bin 0 -> 456 bytes src/laybasic/laybasic/images/icon_conn_32.png | Bin 0 -> 590 bytes src/laybasic/laybasic/images/icon_conn_48.png | Bin 0 -> 913 bytes .../laybasic/images/icon_conn_light_16.png | Bin 0 -> 287 bytes .../laybasic/images/icon_conn_light_24.png | Bin 0 -> 330 bytes .../laybasic/images/icon_conn_light_32.png | Bin 0 -> 442 bytes .../laybasic/images/icon_conn_light_48.png | Bin 0 -> 687 bytes src/laybasic/laybasic/images/icons.svg | 400 +++++++++++++++++- .../laybasic/layNetlistBrowserPage.cc | 76 +++- src/laybasic/laybasic/layNetlistBrowserPage.h | 2 + src/laybasic/laybasic/laybasicResources.qrc | 8 + 12 files changed, 472 insertions(+), 14 deletions(-) create mode 100644 src/laybasic/laybasic/images/icon_conn_16.png create mode 100644 src/laybasic/laybasic/images/icon_conn_24.png create mode 100644 src/laybasic/laybasic/images/icon_conn_32.png create mode 100644 src/laybasic/laybasic/images/icon_conn_48.png create mode 100644 src/laybasic/laybasic/images/icon_conn_light_16.png create mode 100644 src/laybasic/laybasic/images/icon_conn_light_24.png create mode 100644 src/laybasic/laybasic/images/icon_conn_light_32.png create mode 100644 src/laybasic/laybasic/images/icon_conn_light_48.png 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 0000000000000000000000000000000000000000..853a1e17de10d4d3631076e34081af8bc37e6a81 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4F&D9(r;Hs|J+Pb5yf#asP-PZk=9M_yRn&fq-=~jEr5y4L@H?c{kN>#38`nku+ z=UyI`bL+sA}wwUN`72lggPyqlzws1&5MsKeuE;TcDP z95+#gM|(4+zWT*p=MvPns%K<)@Oxhss}j?;+t3(ZJ#Dpb--T_tQK45Ott*-4nJZQ- U_WK(h0`wDur>mdKI;Vst0KSfVApigX literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..eb75f1adbf7aaee40f0bacdb5eb79be285fc83f9 GIT binary patch literal 456 zcmV;(0XP1MP)o_ycm{;9!mIMnz1{cEe$GA+w$FveiDT7mETTh94B zilVF8Z1y9|P-SAL(;2th?Q6$zbV?}@LV!{V-EQ}Ub50Qvf*^R2We}ODD9UZW-#;zV zEX!&TLPjz_06+}@U@#bnB5}9d0b{Jt$QT15#N{FHbUH2FFW9#Ik*29AB1sZq+xB}| zhIB-T=pDM0$z+lVA)d<`NSADy=G%I`zTupo8HS_b5?t5)4#RLB$MM}_u|QeI yv48NOs_H1u^9xPWJ`vH&vTS_JA5>KQ1AYOssFm_+g53200000sLuzTo{}4JPVt@>% z!XI$g9fl$nmM&CkB?RcChOr}4IWb#8j0kmw9H>p=keH^^Ngb{^BT;o|KJ)W?&;Hsn z01*)p5&t{Vu?s4d%F9?R_Lg)0-1EE?Lg)vC@P;wg9t;Lw|5|}ksRXmx><5hTYeiAw zxm-@lWHMm4+W|^xU>Jt8-|s&|2rqiQo_}nS2hnx?Q>)do8DqhHFvfyrvuW$P{_*7D znx?&KG#b{Q!hbJOuh%VARg0qDk3>X?MB=hsF2^y(p*oB)P!uJeN~JDOT7Yw2lx11y zzU1?H$@4tn6Mz5!plMnVCh~nB5JH3u)9Exg91c$&@*Isu;xDjPtL-+MP3ZjZSg+SX zwOYLu^%fcdgm6kJ4c*Zll+pkpG(Bkn%d*}XhT*ub8>(|%7mUYa$F}XZXo1HfqWOIO zO_t@Si^bx+P$-;12=5K=bUKb{n%Dh)|NTh|0000XH12XzwK`bFmeoOFM_2L$ZN^>}4DT zZ&}6d1!oW>2mgS4Ovue^OdyvWCW7EWW)4D_&Cw5N5gAz7z-T+k;wG0dAm|*uB)wI+ z?8q)*vsyiuK>bbyUGMumPghf21qOq`U@#aA27^Hp(aUB*5ZJbD&nl&6fDZuo)uS^Z z#4l3HdK|~~&CSifdZpR30Hsptky2^}c>f(!e+SCdYW1gH=q3&j1i_uYzP@jS5T65# zj*gPg=ka}?p`jrFE-o&JqKGgIX}88#nl4u1%-YIF3WJ*+dBO zQ6`i5vDIq5)bWwhDFU!-M2!zBtJP{or-$|m2qB&U93LO+ zw&3XKs5^YB+e15ml(G&Gh9Oek{xl$^WN&W|03pQBx<0f6#Bp2){%E(`?C$Q~x_*0m zo3pbsfESMAJkj-`{U>gCNFHJi=el~R7(XfzlY7+`E{?5#gGDJ5H5TU06);y6YrwNk6qen{dWQ2>Csxw+lT z%gcVH)PrWT$>HH4aU9d%-;ZtE#Bt2|`8fv%2du5FvA@5MloF-X%EZLP*I^hY+Dm(O zp_!kbpAkZQ3*39h)E7#rFKe}0y%)MYy;3eMEm>DrR}WvEZSM2hl@fR+gs3}?^JH~( n_3vKl8Vm-5!C){L{-^u{6hsML|4a7~00000NkvXXu0mjfxp|~U literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9b78e576cd9fd16cff74dbcf6b84e7041fde416c GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4Z^E9PyW?*5#q`%OHzZ1I(LWO)!g?lW zx=P|KHILnGn{;^HC%myU$>{%cIa+nI+OZu=rYLY~sveOLXYjqozfDZ^2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4fQ!C{Z^j#bw!lUg|GD~3C*9{fd64IJi+9_WYZoju1Cqqu9Shgby?Snq z$?Tw|L6NSPraj?4Dd#ZZ57UQf#rH(@-|u=Sc;MpQ+*xX#K`tlmo>$?Yw9S=`;ojZ9 zYouq)oLHk}q;NBS(tkB2mrq-^B^#?>-P^b~}U&3=E9so-U3d z5v^~h2Kq4>3bdu)GQBxrhhyL37aK1qpOEE{aogcH^Pp3i@Us2i;+^XE^E+OM9WXWCFLd$PnP-zvK1u!2q0SJpYFE(J8>O*E z#taQJ7rx%LWL02jIK#R+)rM8;l6rnm5!$D;v_;}^oXfOk@%wq(`BzEp*ZybOvg(+? zA(QL3Q#Lj?4@*!a}E-ZcvXcW7kqr5_Ft@Vdt7PPv$5y znAgsG{L$h+Ygb2&Ppy0!TPW|&dy&_Zo_+mT@#d|N;6=~vawZKkZMWxEGn`9jaLBza zH=}Z%w1Tu?WZJvNqYsXD-ZNj=p>sahNidROh2F=%C*uvi-m@3FDBI9Bv)pA%+Ox{b iCbPZ&f;@e`l37XG`-a#Tw^(2}GkCiCxvXH2lmR87yXArgs1B9TZW5{Y;s zLyD?{AhuU+n0<5*KfEn;`%hDgJdR$f2=OOkDEKouh-rJP169Ns$YFILJF8eSOHzEhrK( + 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