From 201e6d24a9d08edee1f03d5bc5d6a219c41da88d Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Tue, 29 Sep 2015 15:10:44 +0200 Subject: [PATCH] ui: new features for the Graph UI * removed node shadows * made enums collapsible * added icons to nodes: enum, typedef, macro, bundle --- bin/app/data/gui/graph_view/images/bundle.png | Bin 0 -> 748 bytes bin/app/data/gui/graph_view/images/enum_1.png | Bin 0 -> 584 bytes bin/app/data/gui/graph_view/images/enum_2.png | Bin 0 -> 1317 bytes .../data/gui/graph_view/images/macro_1.png | Bin 0 -> 337 bytes .../data/gui/graph_view/images/macro_2.png | Bin 0 -> 1678 bytes .../data/gui/graph_view/images/macro_3.png | Bin 0 -> 656 bytes .../data/gui/graph_view/images/typedef_1.png | Bin 0 -> 546 bytes .../data/gui/graph_view/images/typedef_2.png | Bin 0 -> 684 bytes .../data/gui/graph_view/images/typedef_3.png | Bin 0 -> 805 bytes bin/app/data/src/sample/samples.cpp | 22 ++++ src/app/qt/view/QtGraphView.cpp | 15 --- src/app/qt/view/graphElements/QtGraphNode.cpp | 60 ++++----- src/app/qt/view/graphElements/QtGraphNode.h | 2 - .../component/controller/GraphController.cpp | 17 ++- src/lib/component/view/GraphViewStyle.cpp | 119 +++++++++++------- src/lib/component/view/GraphViewStyle.h | 7 +- 16 files changed, 131 insertions(+), 111 deletions(-) create mode 100644 bin/app/data/gui/graph_view/images/bundle.png create mode 100644 bin/app/data/gui/graph_view/images/enum_1.png create mode 100644 bin/app/data/gui/graph_view/images/enum_2.png create mode 100644 bin/app/data/gui/graph_view/images/macro_1.png create mode 100644 bin/app/data/gui/graph_view/images/macro_2.png create mode 100644 bin/app/data/gui/graph_view/images/macro_3.png create mode 100644 bin/app/data/gui/graph_view/images/typedef_1.png create mode 100644 bin/app/data/gui/graph_view/images/typedef_2.png create mode 100644 bin/app/data/gui/graph_view/images/typedef_3.png diff --git a/bin/app/data/gui/graph_view/images/bundle.png b/bin/app/data/gui/graph_view/images/bundle.png new file mode 100644 index 0000000000000000000000000000000000000000..850c2735457277f3434b9ef9e30ea14f38d62098 GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nEE_j978H@y_vJyi`h}6Exq_63v0echgsIrYhq2UkA!dh zWD~pgi=oWyn_WX|Z|~fGg{0KP#TrSvSq{F}V$Ub`A5q#p`;EmJziH>wYzf&B0%RPi&{?ONJ-$59Z!sI`D?;2m=SB0>iEqT?eo4 zQ=dOky6yh)77K@8Pc%QVRi0!!;Qq<*=ggQ=0flt&?kAbi4AGOG)pW#O(cYO^%u`a^ zqkFpL;3@GhzZBdm)EK`pE3A%v3mQL!>{@<)kh59{@To3{9#?go26T8Cbysb zY;>XQl1yd$pGgJ1Z$I`bzY+Zz#s0vNt)bDTTtiVbO5y#|lH%Kf-+F77a2MRU!2aY( zrOtEP4Qjm%#SeS9N~$>+m=^5L!1?1L!9GIh509P z#h2&(nf_X>@;;k`-?aHBrdytSy6fT^qaAa?yiQ(OJxP1#8pg?cmw)lU{v^_^UCt$u zfyDucI2afOfQSjiW@upmu^ALGqz=evue3VoUwLPzRh;mn+UCVtw+@AeyJmvU+HUF;9bGQo-scqK(f=B_5q(n6ajdkDWyjXmQED z|KhQ_h07Hti5;Bn%6_8rlkQKqt=<*8C#wHUUi^Y#r@-?mH5v@nnmp+pin|I*zBS)J zx`oeCWtnK^+*K_aJtk`Z8Di~!AI(^p5+(3(MM$|slDDLunGe&6X6^aho0lyr3KZXM zJ%3-?nj2QU3fuSOewtRaJPbXFRCwC#ozZQ=Fcd`%Vt|a05jsNH zfDzaLHlUq=G69Ux4Pb5fAXu z=+gMZjN7O~oTexw=Fp8x=pX>)d<-1~pu#=?D(wTH(mnu&bB(djXQp_Q`HRA-y0Pyc zL)pdHr(FlWYTku;{XBxpI`D4aN_ft$KZT=W4d7Zhbv?Mx|GeN7`_k>R1~9vQmTn?d ze{&d`&pL^d5rA7^F6U&?3;?X1Tvsgt7|vd6pJjkq?6V9oi+xrBX0y*KK*_#imgQcd z0GkN=8UTiK%xRxBfZ6S{1~9vQmHtY??wJ$}7 zvJrYg(*RvxijHPsi2!3PT;;N`)JlIe3rht!nuR5QspKuZJl(>=`@p43*o8ou@Hb~+ z9(w@lEWGW32H=w|v<^^hp>=?23jyfdLSrHO1D*SdsIs=K1BcVN#KM(R_@1Q7AAm{= zL!4&HPqNf(Tx|8vuQlT=A+Ngseq#ccVMW%bZ}6?9ThlK;81~+3J!b5H)L)u+JB{8Ne-IP43ET?KJD9U@6PA5 zLB?*kGm%Gif2%EPi{U}#h@76z;!0#*|ALjXco{nh~%^E^fdcRhy}98&fGn^g+V znaoxL;7%cov8#h<0@eOj$WjSh^F100L2QI2(0V$FafM#5YERvxUVq;AUS*Cd>;tby zH$&Ljj%h9? zum)A7F=<8#LTpn2w7}w~2r4TDv5XC{_gPfN5Qmt7bb0HBSL4$>zk51?OIho=fj_M! ztcL)ItTk%}(o}xiD^_ZTfNIMg@XG2cT!e%Mf|VNIY72GvjW)m@T>zk}y$LT89GM4J zptev8;N%li3FXYLO>-dji1X6`SPMy?MvagIk&?nr3t*2LV8>_`YkmiY6douw)&MwC zrxtkf*D%_3_KYGy&G7oJ>sV=k)aEMz+jB{)tRoDWIH3q(hn)u@4X`3^7`kB8h9X%7 zngO{SS&MLa!>}1H2|I!Do@;yoGnb_-|AF|KkKmqM>wbq^fCG@)6gBP~|F@)PUm5p1 z5wKAS{6lDrC_op0C(wbsG`@Kp+D}hy;U0Vx2}F&y#bq}JOxUi&v-N$3@LzR zpt=-F_Y4^i(g5#64X&qs_3`Rx&CtdK_!J1>7m*ckq;T2zX91gf7i=N~18EDWoK!JD zs-!lC2GSgWR$$R10I>+HAx_{ykg2IgF<}U-gis0m1weNdMwABcI_N;@>xea|RAZ=8 z6k^9TJ5(oz8JH+x&;VEnoId)T)@MqUvKq~j{vaR$jRL%e;l-gnXaS@)-!kI3DFHkx zn&`D3Dp4&R96MA7+QiZDyH<~=9oKB_XpL+qR%3Y2h9{zO?UH)9Q%e(|74(MJ64|XA znXayPH2>OweFt?&RV;v19Oc{Ip*i-3*(aDods{BuS;$(e*Z>h*c+3PKr7Z{FIzcEv z4q`LHvMy}-|rsHrPZcKoPnpBbD6@YoELu;jy zZz@p^WsI!Klva=qF2$=}VV4r(;`9Ro=D`TXrl|lT zs;m`YiymIeH`WnVZiV61QmUH+KtviOLmMPyVM~1uADtLXoGeAJ`bmSubtJ0cMb|tg1&)iUjslSwBfv4Y(cvhRM5@s+gV74fJzJ^(ZO}d zTt7Y*`nFLETtnn}OpXAJ!CtoM0uEr1T4=5S(Kj_452qoTXXgqK%^aRP0p!_>c+oaz zfM~vafrv=#UV4GK14M)DDVEdNB0$usL~$Bh1!#Dk6_}wF*RsXU+6sdND1c)dz@46$r!#oS;fr4A+UgfiG?G8fsu(t zqX9^YI5hmfV7b*^dq>E;@0!nQ7X5!%ymj99n@is}c3&&~Ec}fRtmoZM{u-7y%<+HHv|eOTnRmfmHxVGI4x}*cr1$cY3$kv!aRR zVDWOV literal 0 HcmV?d00001 diff --git a/bin/app/data/gui/graph_view/images/macro_2.png b/bin/app/data/gui/graph_view/images/macro_2.png new file mode 100644 index 0000000000000000000000000000000000000000..839adfc2ebd252722571b2b4a44e48a3eafc2896 GIT binary patch literal 1678 zcmV;9266d`P){LLej}AW>dUlz@%j`<$kW ztrn{&Q#J8cZKk6sseIYi^z_&D?wWSuoP&zWNvY>oJYV$ea`-FHYo6gNKw5h#h9kEv?Bc0YqSqdp=;s>>A9A61GJWcrV%^ttdT! zsKTqB=a?}=0#Vx#bCQi~ZfQ-_Fa!`^v@L8BO3Gz}dC$?@c@mn%Ac4UKa?&+0m@^UV z?q8lS#bN^=@!S*^t4$-pF`>!$I|cv|xHF6@A?+K?d!&GqaWMdh&t7IEaHJVdOi1); zK>~5!ek?X{#OyYP6C29&p?5tY0Jt4X94L9=#K;Cp>KP4yDTNaaCI%cBY+6&;m`rnC zO8^_BP6-oEXxqR!a$I!*z)=hUN;`eW^GyQ)&kCW_E~#-8PDF|mwF?Q3OoI~w>7B9z zh|c3h!4@?HNja?4_XPk|^X{6VbS(*Eu4$%J6GenIa$sD5UwQyh61u{e+n(1AY~WLj z=kIE!ah3okLJAjDSbP2fft07F>eU}B08xEch3Bj0r1!Djy0)ZzNL7;!MfF7hU-JAM z<4At>{52I6G%^y5?N&U$0pm*ey*3Z4Y4)@~?Qz4xi zkry5*d0wfA$o#Z#e+?F71X^ID^l5TLAC}&+mKwSy2LC@cf;m@{yQQmMWR29s(Nf^$+Ba~l+^!bC?Y2bP>> z6aY#^OEl!#wLp~mHNnx0VgN7$x%0DF8%Ok$R9HL{rf|<77$&;1iyo6fy=230y3&)+7c17nsGM1Y9?8APZyzIqBT8 z*f2rC0#i6rO9LN|NJp6ht4y0N^<$9&@w^?SQrod;vFj z=_qVq$~+fs&_&Si&c~+8#|nf_QF!5@kZx@lEaa#Vyrb>C91DQbhcz_=Z@3S9F%<#) z6BIx3nyiYO-0zmw8n%osJdTJDyLOcU3SjBi3`{Ry<^Rq;6$9V6ohBaf!s>h1-(Y5|2%)y zTr};@Rn0}^^uiT@6;%Mvj2cv-n6|~&k#}p+Gn1S#7*6yi#)HC~;Svd{si>#yg*ySj zk74>I^RSrLJU^Qg)Z!xk@cboZ4K)P-!v{UDGXXpb$oG_kcNMj6$wHz(g8#2ExtlTG zya4(qV;Dex3;DMc;ikP+pjva7FvjFV7bnKBv?3+^N|0AQl_N3ciZr` zAl2cXn0gEVo?>!MJWRT(ocZAUpQVBb2jCElGA?ZZxiZx*0jT}{X9NJz``!VAQWk)2 zyH`?Ru}yncbIa31EoF@@(ADKmv>02aPsx zJq7?#b)RQc_?S>JIcx|sFQjoeW-kT+(U?EZ{JsVHebJ#fu`R@&rZzCC{vF12^sfK| Y03`H}5Wwb>DgXcg07*qoM6N<$f}gkJx&QzG literal 0 HcmV?d00001 diff --git a/bin/app/data/gui/graph_view/images/macro_3.png b/bin/app/data/gui/graph_view/images/macro_3.png new file mode 100644 index 0000000000000000000000000000000000000000..7e20eec31e60543b834a50283327120043ab690f GIT binary patch literal 656 zcmV;B0&o3^P)1RCwC#oY8TEFc3sh#{W?XD#0C? zPSQeBLF|r_3PK5X2e<<|AZ8|CL4Xr;tGnfHMnA?g3(q>~wA?uKeP4O}KX$nfLkMf@ z)VJ|IbNzf9Z`w6-lWhn3q3WMuU1JnaN;09ds-Xqo#i|Ah;DJO#?F=*k$SjO#K_kZsF#{8zMnh;6OW{PKp>`K;Eo&eEM!>^GW`MLMjFuGc zENf^0c(JU307z>jxS2o#u(7N$W$7P*JLF6CxD}7k$Z`p}vu_B&U)AN$!ok---$Wds z1N3l!4p2)>)q$rKk63f{*U+!>X+UGPwvl`%G8CS3?ffJos4NT5^|j*`1@%b+0%kh&uQ0g%3gDV@R{ zgGNb!7X}SUfb>R!n+e7NHVhiR3mdKj?HdWgW&)LwFvSYdTr?H01~o=pyt(LaGtirh zybg4L4$#8^IzTlc)m$_*b*Gu@AJyYl6GEfdN#twcgissNSY#!Y!Zjd!_8L;y@){U5 z+{DyTZjD3!tnNxig0#jcg%L9lky?qljEN3VHqIm(VgQ$BM+cbY9Wy|h5~frNw3 z0G}7GUjff`wG0rEUWYBGa7UuyWsFvUn=ukBn+Z|NjYyaYltu!|OxTo>AOSFL4dB}U qr9YGpjqnKpq4C%n=y8913orm6o>KNEMOiQa0000+Bpsk5bOc9e zH|PksLA!w)bOh`qxMzMEtfrKAWIlP00ATb0tg_01iCf+gC7QlIUkEtvXYXQ7V zED>uFJX^$C2+tC+G~hYat=J%z2K*lCWvFf~h!Nj`t3r(0g;#?Z*$2)+Yyez_*s38a z{1(nZtke)yrZKjNO5-d`M74RK9irku)e2E{B5i}HJkqy7RKF&2K|H7;I$Ts55qGMH zPFLk55g#TVcdY!|PG@d%3Jf1S31)eHk4&FHuFQ<)B#Oo4X zXn$IRw+=u{JQYA&JOw~&ylB8?s4r){NWc-Vop`J)UKHSJ@FDbY-cmMzZ07*qoM6N<$f?JWc+{fXfl91Q?EJ+`V;`07(#806WAdSHmDO0rn>#U=Y~=;Sd=Cp%7UCVGx-C zArRRC#St|CiXv(O6hqVmD1xXBFgl_}z)-|G0WL$VLJ&0rMnTjL*hg&EKzszi4spK* z;>NQfB{}4WJBM;6qH*wd13Z|=ib=%Wq*#>B32-4|0`xcp3qt;%Nhnj;9Gw1WyZ~7@h_|Q9O1)aXe-~2s~Cm z7(7NmC_FYmi}riv2+1Mz;vkQn`+H#E9z>Ok2pLKxhQk9^GF1QN@Xa;c~QgBlT z7~DU{05GWaiv^&9xc4o%V*(h&wNL|C10XgG@PBjwh@U>JAH@>x04}6*4UuXe*hzn` z3(=Y2raXxB0Ene4h}1{n5#mBV>RP`U1N<8YnTfg(ty;fWbl?DhXw|jEB%}vf&K&^a z%JibShcC7f`V*fvI{Er)^nG=$Z~6Id^3~+lj#0Hg+g6OWfVgIW7BZ0mat3lA zND1EYb`(w>pqfyfET%_xxkxi0>mpCrTWkSrJbm%TGrZoH7p5?sWqnF3H7^X=Q>{Jq zl?uQT0Iw7J^M<@8B6v;28a!T=y9qDr!aj6hFJL_OUcsm#HCA+?JnSVL%w5Egfh6Ez1=v%8_Z$3g j4rc7$kO3qYX8{HPA|_MN_0h2!00000NkvXXu0mjf>D5s3 literal 0 HcmV?d00001 diff --git a/bin/app/data/src/sample/samples.cpp b/bin/app/data/src/sample/samples.cpp index 680e8abe..860b8a9f 100644 --- a/bin/app/data/src/sample/samples.cpp +++ b/bin/app/data/src/sample/samples.cpp @@ -22,6 +22,18 @@ int calculate(int i) } +#define CALL_CALCULATE() \ + do \ + { \ + calculate(); \ + } \ + while(0) \ + +int main() +{ + CALL_CALCULATE(); +} + int count = 0; void countUp() @@ -173,3 +185,13 @@ class Tower : public Building {}; class SkyScrapper : public Building {}; class Mansion : public Building {}; class Shard : public House, public Tower, public SkyScrapper, public Mansion {}; + +typedef unsigned int uint; +uint a = 1 + 2; + +enum Size +{ + SMALL, + MEDIUM, + LARGE +}; diff --git a/src/app/qt/view/QtGraphView.cpp b/src/app/qt/view/QtGraphView.cpp index c0336183..591c3a89 100644 --- a/src/app/qt/view/QtGraphView.cpp +++ b/src/app/qt/view/QtGraphView.cpp @@ -108,11 +108,6 @@ void QtGraphView::centerScrollBars() void QtGraphView::finishedTransition() { - for (const std::shared_ptr& node : m_nodes) - { - node->setShadowEnabledRecursive(true); - } - QGraphicsView* view = getView(); view->setInteractive(true); @@ -434,16 +429,6 @@ void QtGraphView::createTransition() } } - for (const std::shared_ptr& node : m_nodes) - { - node->setShadowEnabledRecursive(false); - } - - for (const std::shared_ptr& node : m_oldNodes) - { - node->setShadowEnabledRecursive(false); - } - QGraphicsView* view = getView(); view->setInteractive(false); diff --git a/src/app/qt/view/graphElements/QtGraphNode.cpp b/src/app/qt/view/graphElements/QtGraphNode.cpp index 94229477..e8af64cf 100644 --- a/src/app/qt/view/graphElements/QtGraphNode.cpp +++ b/src/app/qt/view/graphElements/QtGraphNode.cpp @@ -199,16 +199,6 @@ void QtGraphNode::addComponent(const std::shared_ptr& comp m_components.push_back(component); } -void QtGraphNode::setShadowEnabledRecursive(bool enabled) -{ - m_rect->setShadowEnabled(enabled); - - for (const std::shared_ptr& node : m_subNodes) - { - node->setShadowEnabledRecursive(enabled); - } -} - void QtGraphNode::hoverEnter() { hoverEnterEvent(nullptr); @@ -352,30 +342,21 @@ void QtGraphNode::notifyEdgesAfterMove() void QtGraphNode::setStyle(const GraphViewStyle::NodeStyle& style) { - QColor color = style.color.c_str(); + QPen pen(Qt::transparent); + if (style.borderWidth > 0) + { + pen.setColor(style.borderColor.c_str()); + pen.setWidthF(style.borderWidth); + if (style.borderDashed) + { + pen.setStyle(Qt::DashLine); + } + } + + m_rect->setPen(pen); + m_rect->setBrush(QBrush(style.color.c_str())); + qreal radius = style.cornerRadius; - - QPen p(style.borderColor.c_str()); - p.setWidthF(style.borderWidth); - if (style.borderDashed) - { - p.setStyle(Qt::DashLine); - } - - QFont font(style.fontName.c_str()); - font.setPixelSize(style.fontSize); - if (style.fontBold) - { - font.setWeight(QFont::Bold); - } - - if (style.shadowColor.size()) - { - m_rect->setShadow(style.shadowColor.c_str(), style.shadowBlurRadius); - } - - m_rect->setPen(p); - m_rect->setBrush(QBrush(color)); m_rect->setRadius(radius); if (style.hatchingColor.size()) @@ -390,10 +371,10 @@ void QtGraphNode::setStyle(const GraphViewStyle::NodeStyle& style) setSize(getSize()); } - p.setWidth(0); - p.setColor(Qt::transparent); + pen.setWidth(0); + pen.setColor(Qt::transparent); - m_undefinedRect->setPen(p); + m_undefinedRect->setPen(pen); m_undefinedRect->setBrush(pixmap); m_undefinedRect->setRadius(radius); } @@ -407,6 +388,13 @@ void QtGraphNode::setStyle(const GraphViewStyle::NodeStyle& style) m_icon->setPos(style.iconOffset.x, style.iconOffset.y); } + QFont font(style.fontName.c_str()); + font.setPixelSize(style.fontSize); + if (style.fontBold) + { + font.setWeight(QFont::Bold); + } + m_text->setFont(font); m_text->setBrush(QBrush(style.textColor.c_str())); m_text->setPos(style.iconOffset.x + style.iconSize + style.textOffset.x, style.textOffset.y); diff --git a/src/app/qt/view/graphElements/QtGraphNode.h b/src/app/qt/view/graphElements/QtGraphNode.h index b6e14a9e..ec330ae5 100644 --- a/src/app/qt/view/graphElements/QtGraphNode.h +++ b/src/app/qt/view/graphElements/QtGraphNode.h @@ -66,8 +66,6 @@ public: void addComponent(const std::shared_ptr& component); - void setShadowEnabledRecursive(bool enabled); - void hoverEnter(); void focusIn(); diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index 39c1d554..9b348e1e 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -282,7 +282,7 @@ void GraphController::autoExpandActiveNode(const std::vector& activeTokenIds node = findDummyNodeRecursive(m_dummyNodes, activeTokenIds[0]); } - if (node && node->data->isType(Node::NODE_CLASS | Node::NODE_STRUCT)) + if (node && node->data->isType(Node::NODE_CLASS | Node::NODE_STRUCT | Node::NODE_ENUM)) { node->expanded = true; } @@ -378,7 +378,7 @@ void GraphController::setNodeVisibilityRecursiveTopDown(DummyNode& node, bool pa if ((node.isGraphNode() && node.isExpanded()) || (node.isAccessNode() && parentExpanded) || - (node.isGraphNode() && node.data->isType(Node::NODE_ENUM))) + (node.isGraphNode() && parentExpanded && node.data->isType(Node::NODE_ENUM_CONSTANT))) { for (DummyNode& subNode : node.subNodes) { @@ -441,7 +441,7 @@ void GraphController::bundleNodes() return false; }, 3, - "Undefined Nodes" + "Undefined Symbols" ); } @@ -652,9 +652,7 @@ void GraphController::layoutNestingRecursive(DummyNode& node) const width = margins.charWidth * node.data->getName().size(); } - width += margins.iconWidth; - - if (node.data->isType(Node::NODE_CLASS | Node::NODE_STRUCT) && node.subNodes.size()) + if (node.data->isType(Node::NODE_CLASS | Node::NODE_STRUCT | Node::NODE_ENUM) && node.subNodes.size()) { addExpandToggleNode(node); } @@ -664,6 +662,8 @@ void GraphController::layoutNestingRecursive(DummyNode& node) const width = margins.charWidth * node.name.size(); } + width += margins.iconWidth; + // Horizontal layouting is currently not used, but left in place for experimentation. bool layoutHorizontal = false; @@ -762,6 +762,11 @@ void GraphController::addExpandToggleNode(DummyNode& node) const i--; continue; } + else if (subNode.isGraphNode() && subNode.data->isType(Node::NODE_ENUM_CONSTANT) && !subNode.visible) + { + expandNode.invisibleSubNodeCount++; + continue; + } for (DummyNode& subSubNode : subNode.subNodes) { diff --git a/src/lib/component/view/GraphViewStyle.cpp b/src/lib/component/view/GraphViewStyle.cpp index 9cef5ffb..a538e83f 100644 --- a/src/lib/component/view/GraphViewStyle.cpp +++ b/src/lib/component/view/GraphViewStyle.cpp @@ -21,8 +21,7 @@ GraphViewStyle::NodeMargins::NodeMargins() } GraphViewStyle::NodeStyle::NodeStyle() - : shadowBlurRadius(0) - , cornerRadius(0) + : cornerRadius(0) , borderWidth(0) , borderDashed(false) , fontSize(0) @@ -172,12 +171,14 @@ GraphViewStyle::NodeMargins GraphViewStyle::getMarginsForNodeType(Node::NodeType break; case Node::NODE_FILE: + case Node::NODE_ENUM: + case Node::NODE_TYPEDEF: + case Node::NODE_UNDEFINED_MACRO: + case Node::NODE_MACRO: margins.iconWidth = s_fontSize + 11; case Node::NODE_UNDEFINED_TYPE: case Node::NODE_STRUCT: case Node::NODE_CLASS: - case Node::NODE_ENUM: - case Node::NODE_TYPEDEF: case Node::NODE_TEMPLATE_PARAMETER_TYPE: if (hasChildren) { @@ -199,8 +200,6 @@ GraphViewStyle::NodeMargins GraphViewStyle::getMarginsForNodeType(Node::NodeType case Node::NODE_GLOBAL_VARIABLE: case Node::NODE_FIELD: case Node::NODE_ENUM_CONSTANT: - case Node::NODE_UNDEFINED_MACRO: - case Node::NODE_MACRO: margins.left = margins.right = 5; margins.top = margins.bottom = 3; break; @@ -252,7 +251,7 @@ GraphViewStyle::NodeMargins GraphViewStyle::getMarginsOfExpandToggleNode() GraphViewStyle::NodeMargins GraphViewStyle::getMarginsOfBundleNode() { - return getMarginsForNodeType(Node::NODE_CLASS, false); + return getMarginsForNodeType(Node::NODE_ENUM, false); } GraphViewStyle::NodeStyle GraphViewStyle::getStyleForNodeType( @@ -272,7 +271,7 @@ GraphViewStyle::NodeStyle GraphViewStyle::getStyleForNodeType( } style.textColor = scheme->getColor("graph/text"); - style.borderColor = isActive ? scheme->getColor("graph/border") : "#00000000"; + style.borderColor = scheme->getColor("graph/border"); style.fontName = getFontNameForNodeType(type); style.fontSize = getFontSizeForNodeType(type); @@ -294,6 +293,7 @@ GraphViewStyle::NodeStyle GraphViewStyle::getStyleForNodeType( break; case Node::NODE_UNDEFINED_TYPE: + case Node::NODE_UNDEFINED_MACRO: style.hatchingColor = scheme->getColor("graph/hatching"); case Node::NODE_STRUCT: @@ -301,22 +301,7 @@ GraphViewStyle::NodeStyle GraphViewStyle::getStyleForNodeType( case Node::NODE_ENUM: case Node::NODE_TYPEDEF: case Node::NODE_TEMPLATE_PARAMETER_TYPE: - if (isActive) - { - style.fontBold = true; - } - - style.shadowColor = scheme->getColor("graph/border"); - if (isFocused) - { - style.shadowColor.insert(1, "FF"); - } - else - { - style.shadowColor.insert(1, "80"); - } - style.shadowBlurRadius = 5; - + case Node::NODE_MACRO: if (hasChildren) { style.cornerRadius = 20; @@ -329,27 +314,30 @@ GraphViewStyle::NodeStyle GraphViewStyle::getStyleForNodeType( style.textOffset.x = 8; style.textOffset.y = 8; } + + if (isActive) + { + style.borderWidth = 2; + } + else if (isFocused) + { + style.borderWidth = 1; + } + else + { + style.borderWidth = 1; + style.borderColor = style.borderColor.replace(0, 1, "#20"); + } break; case Node::NODE_FILE: - if (isActive) - { - style.fontBold = true; - } - style.cornerRadius = 10; style.textOffset.x = 6; style.textOffset.y = 9; - style.iconPath = "data/gui/graph_view/images/file.png"; - style.iconSize = s_fontSize + 2; - style.iconOffset.x = 9; - style.iconOffset.y = 9; - style.iconColor = scheme->getColor("graph/icon"); break; case Node::NODE_UNDEFINED_FUNCTION: case Node::NODE_UNDEFINED_VARIABLE: - case Node::NODE_UNDEFINED_MACRO: style.hatchingColor = scheme->getColor("graph/hatching"); case Node::NODE_FUNCTION: @@ -357,23 +345,24 @@ GraphViewStyle::NodeStyle GraphViewStyle::getStyleForNodeType( case Node::NODE_GLOBAL_VARIABLE: case Node::NODE_FIELD: case Node::NODE_ENUM_CONSTANT: - case Node::NODE_MACRO: - if (isActive || isFocused) - { - style.fontBold = true; - } - style.cornerRadius = 8; style.textOffset.x = 5; style.textOffset.y = 3; + + if (isActive) + { + style.borderWidth = 2; + } break; } - if (isActive) + if (isActive || isFocused) { - style.borderWidth = 1.5f; + style.fontBold = true; } + addIcon(type, hasChildren, &style); + return style; } @@ -423,11 +412,8 @@ GraphViewStyle::NodeStyle GraphViewStyle::getStyleOfBundleNode(bool isFocused) { NodeStyle style = getStyleForNodeType(Node::NODE_CLASS, false, isFocused, false); - ColorScheme* scheme = ColorScheme::getInstance().get(); - - style.shadowColor = ""; - style.borderColor = scheme->getColor("graph/border"); - style.borderWidth = isFocused ? 2 : 1; + addIcon(Node::NODE_ENUM, false, &style); + style.iconPath = "data/gui/graph_view/images/bundle.png"; return style; } @@ -527,6 +513,43 @@ int GraphViewStyle::toGridGap(int x) return s_gridCellPadding + toGridOffset(x - s_gridCellPadding); } +void GraphViewStyle::addIcon(Node::NodeType type, bool hasChildren, NodeStyle* style) +{ + switch (type) + { + case Node::NODE_ENUM: + style->iconPath = "data/gui/graph_view/images/enum_1.png"; + break; + case Node::NODE_TYPEDEF: + style->iconPath = "data/gui/graph_view/images/typedef_2.png"; + break; + case Node::NODE_UNDEFINED_MACRO: + case Node::NODE_MACRO: + style->iconPath = "data/gui/graph_view/images/macro_3.png"; + break; + case Node::NODE_FILE: + style->iconPath = "data/gui/graph_view/images/file.png"; + break; + default: + return; + } + + style->iconSize = s_fontSize + 2; + + if (hasChildren) + { + style->iconOffset.x = 11; + style->textOffset.x = 6; + } + else + { + style->iconOffset.x = 9; + } + + style->iconOffset.y = 9; + style->iconColor = ColorScheme::getInstance()->getColor("graph/icon"); +} + int GraphViewStyle::s_gridCellSize = 5; int GraphViewStyle::s_gridCellPadding = 10; diff --git a/src/lib/component/view/GraphViewStyle.h b/src/lib/component/view/GraphViewStyle.h index 02e0f0d7..5be35936 100644 --- a/src/lib/component/view/GraphViewStyle.h +++ b/src/lib/component/view/GraphViewStyle.h @@ -44,12 +44,9 @@ public: std::string iconColor; std::string hatchingColor; - std::string shadowColor; - int shadowBlurRadius; - int cornerRadius; - float borderWidth; + int borderWidth; std::string borderColor; bool borderDashed; @@ -123,6 +120,8 @@ public: static int s_gridCellPadding; private: + static void addIcon(Node::NodeType type, bool hasChildren, NodeStyle* style); + static std::map s_charWidths; static std::map s_charHeights;