From 4803c634233d76c9d8d6f1c77aeb24b5759e1c05 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Wed, 27 Sep 2023 13:33:50 +0200 Subject: [PATCH] CompilerExplorer: Add Icon Also adds function to FileIconProvider to register a full icon instead of an overlay. Change-Id: I2d9415a3b57fa50ae313ad4e52fc929b418f9708 Reviewed-by: Reviewed-by: Alessandro Portale --- src/libs/utils/fsengine/fileiconprovider.cpp | 19 ++++++++++++++++++ src/libs/utils/fsengine/fileiconprovider.h | 2 ++ .../compilerexplorerplugin.cpp | 5 +++++ src/plugins/compilerexplorer/logos/ce.ico | Bin 0 -> 8648 bytes src/plugins/compilerexplorer/logos/logos.qrc | 4 +++- .../compilerexplorer/wizard/cpp/wizard.json | 2 +- .../wizard/python/wizard.json | 2 +- 7 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/plugins/compilerexplorer/logos/ce.ico diff --git a/src/libs/utils/fsengine/fileiconprovider.cpp b/src/libs/utils/fsengine/fileiconprovider.cpp index 41c1f727c6a..9d2a7c8c050 100644 --- a/src/libs/utils/fsengine/fileiconprovider.cpp +++ b/src/libs/utils/fsengine/fileiconprovider.cpp @@ -93,6 +93,13 @@ public: }); } + void registerIconForMimeType(const QIcon &icon, const QString &mimeName) + { + // avoid accessing the MIME database right away + m_mimeUpdater.append( + [this, icon, mimeName] { addIconForMimeType(icon, Utils::mimeTypeForName(mimeName)); }); + } + void registerIconOverlayForMimeType(const QString &iconFilePath, const QString &mimeName) { // avoid accessing the MIME database right away @@ -123,6 +130,13 @@ private: registerIconOverlayForSuffix(iconFilePath, suffix); } + void addIconForMimeType(const QIcon &icon, const Utils::MimeType &mimeType) + { + const QStringList suffixes = mimeType.suffixes(); + for (const QString &suffix : suffixes) + m_suffixCache.insert(suffix, icon); + } + void ensureMimeOverlays() const { for (const std::function &f : m_mimeUpdater) @@ -306,6 +320,11 @@ void registerIconOverlayForMimeType(const QIcon &icon, const QString &mimeType) instance()->registerIconOverlayForMimeType(icon, mimeType); } +void registerIconForMimeType(const QIcon &icon, const QString &mimeType) +{ + instance()->registerIconForMimeType(icon, mimeType); +} + /*! \internal \overload diff --git a/src/libs/utils/fsengine/fileiconprovider.h b/src/libs/utils/fsengine/fileiconprovider.h index 60479220cd8..5db70e62587 100644 --- a/src/libs/utils/fsengine/fileiconprovider.h +++ b/src/libs/utils/fsengine/fileiconprovider.h @@ -37,6 +37,8 @@ QTCREATOR_UTILS_EXPORT void registerIconOverlayForMimeType(const QIcon &icon, QTCREATOR_UTILS_EXPORT QIcon directoryIcon(const QString &overlay); +QTCREATOR_UTILS_EXPORT void registerIconForMimeType(const QIcon &icon, const QString &mimeType); + } // namespace FileIconProvider } // namespace Utils diff --git a/src/plugins/compilerexplorer/compilerexplorerplugin.cpp b/src/plugins/compilerexplorer/compilerexplorerplugin.cpp index 4063814e6ca..f6670df80ad 100644 --- a/src/plugins/compilerexplorer/compilerexplorerplugin.cpp +++ b/src/plugins/compilerexplorer/compilerexplorerplugin.cpp @@ -18,6 +18,8 @@ #include +#include + #include using namespace Core; @@ -42,6 +44,9 @@ public: settings().defaultDocument().toUtf8()); }); + Utils::FileIconProvider::registerIconForMimeType(QIcon(":/compilerexplorer/logos/ce.ico"), + "application/compiler-explorer"); + ProjectExplorer::JsonWizardFactory::addWizardPath(":/compilerexplorer/wizard/"); ActionContainer *mtools = ActionManager::actionContainer(Core::Constants::M_TOOLS); diff --git a/src/plugins/compilerexplorer/logos/ce.ico b/src/plugins/compilerexplorer/logos/ce.ico new file mode 100644 index 0000000000000000000000000000000000000000..e0d26b2f5ff30abab7986dc62f9982c8909f9b69 GIT binary patch literal 8648 zcmZQzU}Rur5D);-3JexZ3=Clm3=9ei5PmNU14ADZ1A~D9gdfMoz#z@ez~JBj;X89M zFjVp~FeD^E_&hue40}Ww7&-&|+Ojxp@W8xG(C&w*PoXd%+j7=0DmidC2FhFz@z}q@ zZX@^9)xj4lkGEf8OuzT;P4VhyGY`cj9F%w@RS>^YT`r67fnnb!Ud7z%cMD%m?75%9 zTJY%cx^?&F*sHWmbLN(I~bueT(P8BeQkyp5A4*>ILt{ zlwW^c{(GM;QV+e_(ZMvWW9L@uf4N~rQg?RzzkEpa;A-uTy>eDsCu$FD(=neVb9;+K z%<|<9fB&ym9EU45`8z< zX4$5&`S&GH>iqpUgTe~DWM5Vx={cnM{v3+uB!Ti zmTp+wLFp#K{b;zaPfV(a?envbd8gd+T+J=CW{Fde!B#yJO&;gyT^lxbzI4ji5O~o= z&|6AXH|n-Y(7|8MKBiMyA|hfXk|QK`H<)dl$Ym_CHbcC@-uLpNOy|HZ4Flu3-`D+I z7Qj|vT+5@idG^fTci-QsKEL;S%@L#e9cR8PmohL-+wL69SaDkMYs*wG15L&iR@K|v z6TfRS6mxcT#P~LsKB@ihKV6(#NtNL$qVdLLt8~exHgEoOglUCzU$=NT-WB>K880h zPZYb`xN$cuf9BRbdDe;OUlmVgC*MBb{&?=nHL-s3_ZG~&qwONep#1KC@WYP4kBKk& zllvGn7Qbrv9>{1ncimRjPdnZj#pm7o@mT)kjD5TJCoKJ`&gZb9oUJ7w>vm1^`&)Cp zJr2EcIQW`Lro&Y7qGX?&R{hG8U5AP%3vaVn^HFqRwX~k^%k8^odA#ZQ*qo8~mG?-E zv=U|7KXBI4jjqoWTdO**UJnc%L(pi(0EZD!hzb=$X> zGd|Aee6Ta&U?Ru2^NJHbTn(%LpZ%&JF!186EnBwuSi8?!wzBMxw8M(ktF@=}s25B9 zd?wDgy7``2qm6L7f>O<{v-kf`{IzyR#b-sKR3&b2hor78-%85M^)t4nB&2!1U}(6% zf2rVv;|wm(Eko-nbx!}FPs*z7 zUCWn+h2Hsp@BBK~?TIyYtC;S&Iq@CiU(~ou=Iq;j`_v+P*K#H+Er0kZ;+fXtw^P_J z2DyFQS1fJxe^!TF%q0!KJv~pRs8xKnk9W(Gjc4DlFd=>NJJvSxZrlWoDPEHdjdn^O+EwAHc0k#S_qL}IgENb@?xJ=j{^KlM6*U(p<*50V zE&B2*{PkwvyFt4Z{ni}uD>co%nVc1kEXrz@SGO@wZhxe z(op-fAnVVR)$9LHKHBq;b@7dtiC+yaI=%eedLo!#xLd+Z=X3A>w~0c`yXN>CFP~YI zG+l^&jzwA4XMV*{ZhH&UtQG==kpTk(g8{fO3TOJ+j#e14Nq`EY4Cl9z**PJh0{@=f z**nEOM58|_F00~Z?nU{gl-;dsCWts637b7h;4wezt)>YQf07LvwPtwz2@E)rH+w~f z&z7&UAKQ;^DB0fXGD~AqbX+H+_r)-2xwq3cRllFH`R>u^-M6c^-{mr$H~;&YnLqa# z7e7BU(^=wavzukzAO8ns)dem#8}?~h$7b9TSt#V)RMp|>D}0?#hw~4g)05~`Zl^e> z$V3{nhHRBO((mymZ~@Z+*SQ-vs_8%Q7p+*S{*^_l_*3VX^9N@bFlc<_es^bDZMjLK z(fqwlocc#uPkuQ%BYW@bdr`If%tKWseR4S2*&f=`)Ggxs{#?O4%W%Jo0*L{g=?7DS zrcU+Q(%w)l%&_Os0l(Q@w=%t%-fq9fe51xB-Awz|nRR(zpYw;$eY4H$f>Gn6D2p?{m}%+p&CfQweQiFnHL$*; zk(;58>4gc$bkFo&PDz$C%pU|Aeli@3dQc*J#`WEvX}=N$Zxq<5J74^=p7F$)fN)9)EuKj(2soXUE%wefIyP?oFO~d(+(+D<7Sl*)}02 zd)BImwbK1;wPh<1R^!R1M_t-X^_%XMEFKy$kx#h1~ zX8L)vc-7o2cKB0k(wA&y?YQOW+Yj|NbABy*6R~Y_sU1hcI>tAmbH5y#b?35su+xGq z7x#%Ch-28aY@#!JVtIP@gU~g)Ztbg+SFL-!YNp}iJpxY4F5273o$tN0>`m#J7)J*y z0nKk6Gs?oA{?tBOGOOx=<^4muLxT1(eaP^U6rRO;h&6O)y1s7gE+gkqXL-gi4GSxb zH)}tyW{7(Kxw2+rvD?dt15A=lzqKNyThF~aZ>@ZOrenKi>8Jf;$Y8nX9|0Qr6CvN86%Bf zp@KFn#*daaYpk`Y~Y%hlK9@hdlzCMk*PsbyYl(`EbWHA)x}#;BTLg{7KuBwC-_3x0B*5@06F*O0)A@ zE|e%9(UQ0fw(HmBPtRM@5Z?6hSitSqiqihew`{E2 zT(?3nIEZCUOQ~n_w>+l(GXB#V&tF=1ujbb_+kyz?2|qeJC8Ae)Mtd>FHmU9=2K5`|F>M3Wci* z?WIEhXD75JWnZa&pr6|M*?+HVQ6GWY#eso=!2w*mtja9BhgQ3={{_`96>)E)YjdKn zivFMbJ5J`h${N;754WcBFlN4)BDVFl$D00~n@p``4a+_pa&6lB+Ck^o z3$r7$rytYj%v-~MggZ6d(RRVg-G_XetQ=P`b+|XDq@J!mZ}_*BVo zdNV`y{F!;#-@mh-uVgZNxAyY=%l&$(bG^Ur*!RD4mU-WD>Aw!=r-~orxy#-0mEkVq zhH1PKjfaJ9sWtETzH-&R#|k}G`upVP*=KinPitt&c9B~D_QU?4h1)F8{yTq@S!!N$ z*+rZ4whVHN0bVTvo>@x;>wezYc;dqxZ|!H34xD9J%k;3D;TeNO^{4c0K8$h-1uZjo zvGj=Zq@T1tp3ZyujqsKTfmxlEtjw+oB^E9@r?0){tDVBlX(>2?#s9!!o+-7fX0S2v zF<3AiN-~(npmFZ#hADhCJ{@vM2?>C2P&kGycfF6 z&d|SMfl=BN!2rGlyN2@&mZ_`MXKq-w*XmN{Rl8`GHPu@;9h&e-m4SPW7Q+FaKhX`} z1RlFG|EQMv_;`Bnj`qol>p!ir4A;?}_Ax{AVrSb8dmF6xddoC z9sc%o;$gA3o822`mE`(AHNE7)VsdK5$9ZxF|6As+bNIdKuW}f#lD(lGUo~ zZ&U{ge&&~q;6IS5bbamXqNm&RW&a%L^ZU)hkii+2lcqGerFC~n!eO)c|NGxaO!74o z3_K>w-~1tV1w+Q0&FL+@)^FTew{ZrnUTAF3{@`?S?t?hrjPE(?tuD;x4bc04e|!1K zob{E|`Y?T7;qKFQS8m?STrsiNcIy1A zs``pQGiT_sCLI#^ZKRs=ICJw>D=oeb@1N>ScJs|%3VJ4`x_@mf_*6cBeHp9Z+g~jV z(H+Jd+jrkBzOKr7qI}bpkJC5;-q#x%S@iSf3U|CeHR0;tV}=6Rcd9-w%qaRaYu2ym z8Bg=i$1_P>xe;5pGj7S%&A0L&XcGvY}72{c3(eQ%{(i>d#)?d1ChX3&fmb@1q+<#qSxpHTkjn3sGyu7^W z$I8meRvD)pI;g#O8QZoN?fu7eL|>~u4nDV6#(3YYxc}FFuPox_<-K*_Kttq(Nu{F6 z8zW2vX8ifILzD5E){f4{fB6rqf3>c!ef+w4<%+DVtZByG?8iIr98*5XutHaYXU~kO zD{WZSni^y^=3Sj6_x|}$F@qVI&Ke>aXNBXhJv3&S5jf?&*ow7l*G`?ZjlrW|V)Ht# z18l}}+^xIfHz>@ReqxDilU)Dtz@SHZr8{|U=Qk}>?2Xk+HW1*LbBcRz>%p+N=F>i# z)?dCndq11*3j5zm&sI<7X(@SI)wb)5PfSLY5v!AybKYmyd48>rKVO~Bt(c##_F1Wo z^^c3rjF(#z3^t@2B{6!xTbb9;XW4hAd-IJsmLkvYUcB*P*4(fEZ60rWUav7Hv2%^OFi7|;1O0QF2RJb=T^Sos8HbX%mK-J7{HLGCii!J({nnKG;150jAKdKww zBk)b|#qvuJYbsC0^xW7hrTjpmxy*Ow>W!K8maF0%*)n5UVloxGe8n|Se6@(UbNiWn zf@Sv>5ia$KIVl~7AG*X}NM0PBT(lthQM*rFbIYcmGH-=6eY$;$E*?{S$ii?{rL^SH ztR*KHeh4_!dwvn${L04LBtvDddHM&g{3&}M?%CzsBJovbmJT`ceH*>}k>jSH{)OGGPv;4*Jz?|ccyYr{_{(s&-xP5PvmDM8oIGxrErh?V0 zf(=$Ij_CfUGo5ea9uAAmvUcH>x(R0l*L+XgH9cBbM_)H>R}|Mr+lGCHg1wWLPd0kK zl|htuuFkFbaTB){?|Jfuv22RQ&13VjpJltn#I9cbsO#n8B=(bAKJCevy4BmM_{QgA zgSrW+cf9#@w^@Zx-^vntrQry>u++-jfZR_9kJPg~ zUZ?(N;{In`C*JL75}Kf~qNLhZCuOUE$+iHatM)TD?zU>3pudA%glUSbtTD@t#B8lo z=PC|_#DrSU_{Sg2`!lb#^@j$5CPV@Q149D13Grw~xdmDig8LY>2@zXc5CUpKd@p0> zRFY6+b#-*~HCqr6cv7t~Kszd1^mvl%>Pvwf@=RNg_MZz`de!Rh;cNQ)Hceza)?e0g z%Ho_s*$V;X*}Mjeo+b-BYzh5o;?XQHDd*eW%R6@~>dm-YyZe1!9Mk)MyT9Kne)qoo zedYIg)$bykf^%FOa;CoHXm@TnJNba(0mTDpEIDHD*D$m*%of}bxo0zz3{#HVfwYgd zX{UXvfa zRnF0&azTOCfvE{!40}aBTD$+gc;#wqsp93_oE0~mIX>vHE|&2)S-Pp&bN}tA9 zi}CG#^Nq#k(f(J9%r0GL+Hvp8ibbN*jwZVgN&kuNdb?{&)pqp+w*?7ChM^26yk#Y; zDho0mG_?xbb1c8NEjy|tngHMfCiN)`KouOp#Y@PJQ(=RSt>%S3u-0_pKA&>FFCWb4^ zeZCmYxR-CYP`0Y}(znT-Pwb^6Cf!x~6_+e0$IEX29?ktp*zBwXW6}FM zjnxnN*!D9d2yn1TM9=skx<#t){t;XEB-7a+FFyTyVUlfE$9t9n?FMhgl;y^sttAV& z8`uQ0BqJWD-7~rn{r{>{lSOE_ki6CY?-~;-7!HImJZI!!+|uNndw%Z9^;%9wP6wuJ zU-&#OreZnE{Dy_;8n-wuc$mRqh{ z92M^5aICdwEEg!SZ#eC*K6e)5k3%i?df(alS6%b9WE9*i+|k6J5Fyk0)bkrd!{Lbs zjo6wEJib1dwC1mx!9U@-Pfsu!$TV2{&7RBk^u; z2^t()<-~dGwCw556P)4`eHuQ(cPrw z%*l9}`KPeSwfn3)=7+ZKyFRaw!zH@&=y9Jd?K8hMzwn+OZSvIgsqDn%cQQj4|4!fC z6LVPf9sjYVEK-baiVcMfu@f1Mo~R`Sx)$EGS^YTF`M|M1+NQqI_xF`=Uo|;LKmGf2 zhW(zi!j``Lb92(`SA5HhX3dR#YN>z6JH~B+VZtu)7NLTa?TeGntmUzJr@gNF=&OWK z4d%+|sntB(2P>Ew(i}B2(_YPZk$X|B?(vO>cjMRXlWuGMr{tTSD^uEd;Ye>n9fy=x za8Y)--XGz#S#PvC>oP;lRarb#(^%Y|3QJ%5Y+>cQv`^r}G=-0|&hO54pH-`pBc^)j zhpIqfuD9@1zs$sEJNG^M^>pQ$6BSKU1R2<-UKcyVeEIWR_Sqq9+uIME?~Jqj|DpG8 zmC@9;mDi@GPyHLon{4uE`GE;_%PQK}SH!L_-fUPKcrveY!j_mTf(#EH`iApg?A^AN zq1V@ObClz)ren3%=Bo|N)1Gd-Z*0T)K=HG1TOZ>e57)xG(rHgsRxh8zpqaDm{^og{ z_I_#>pR5dJUjh~wTt8Y76&291^s#_fe7#`RA;Q!Km@vBpeQPW;)vZc*5aR1$MZ2u~qRnr-nyt;yz z(tg@5by^&nuurG6Y`*d3!}}&BOq~=M@h0Wmvp?L2bE{Mrt^2^z%F|SlHgo&GN>TX) zO%F-N%d6VHzMFdW`FV!({!Q-6jdJo&c=h_f9*;h9q3CnuY_~XFo{guD=;h5`ml-@= zcWLu5efE93MJGT0@$2wJacMon#)Gw;{``$8 zy(MiMHy7U5+rLV7wh+^^JgLIE6DO+FKOPUaI{V?(gKdrdb0wEP`1&tn#j@6LMw5d) z66fp|Cpk;UH~TpqpRLZgT33JdTgIPhwMXxmH#izI&tsST!Q9Xt#6RWHDH$uf z|E}-%_2tH^J5Sp+T~6>APfs~--TQ^dx! zjAKS{u)!6EwMhzdbCZ;X&wi|I&R2DqZzI=lt*?LnRI1;dcm4AAc{z7?ZCz`}r0;s3!17>|Vbp z<+=Muh7%tgeGHNdeSNn+<^JL$a6?r4fv|GUov*iA?i%rIxIF1$?h5AyXNNyqFNVd}Pnt{?WQ&eQMZinZ+-p8@ATfZ+$8u7rmcR@?KlkWHsMY zVonj2oWkPsmn~Zsu;#tJu*0(3%Qc0c$Q-%UYF=p_%yMGJe7yo!mFwSh)+F{ZCZv`(eKR{x+<5!_w{E-GEQ#tv zTFW>)-l{(8D|^m!y|ezrg*wI$XFX*~)D>Rb>$>!ydT!?Ahs6#y4Cgj-OCH*E?b_si zD{-Uc=i9f09hez>YUd=M`vRJZ2X;=`KC{8Y$2a$2jLYF5p`BB#dA%j=>;9-ZC1h5I zv^@RJkoF+qnR-^1-5MM1LqSg(Qd4FocI+1pn84ETo;7Xj`=)hFKbqFvVD-L2iINbqvot zgR&l+zV(V@!w--Cne+1VE?wVK_xanhEA5H zYYzke=!LJCyyd*g`BPyI?3}jRxliL5?koJ-5wPpxXsfy<>~6bKZ?Q1+&m58=trjy8SB6%Y+>5j!(+JA9Y~Mq}#XtU0EC?Ue0iO!Ar*T zrYw3!v-dsY?joG5?_Y$z``>-g(@++b+ewCt}Nb)xbr(l^dtLJtwC- zxt#e|`nm}mIx{2GH=Cv{Ny%Ydap9V0{CXzW?%FB8x${^rW;3uYzax6td+t&* z%wAm6cIdO772sLF{cmoORzMB&g)?1`9?S}nDlNU6=ik7x#Ad>^`9E?lch>DYB0VMg zY+iH~2V>@+UeOKDUi{lt9kO)lNs(sTriLs3PxQ{3dDJG}bMK$BlGm4%IVN21VBfrN zAA5_tQvEjp_2d1Y!`me1WE - + + ce.ico + diff --git a/src/plugins/compilerexplorer/wizard/cpp/wizard.json b/src/plugins/compilerexplorer/wizard/cpp/wizard.json index b736551b69e..6851a0b3139 100644 --- a/src/plugins/compilerexplorer/wizard/cpp/wizard.json +++ b/src/plugins/compilerexplorer/wizard/cpp/wizard.json @@ -6,7 +6,7 @@ "trDescription": "Creates an example CompilerExplorer setup for C++.", "trDisplayName": "Compiler Explorer C++ Source", "trDisplayCategory": "Compiler Explorer", - "icon": "", + "icon": ":/compilerexplorer/logos/ce.ico", "iconKind": "Plain", "options": { "key": "DefaultSuffix", diff --git a/src/plugins/compilerexplorer/wizard/python/wizard.json b/src/plugins/compilerexplorer/wizard/python/wizard.json index b026adb4cdb..35a0106ab34 100644 --- a/src/plugins/compilerexplorer/wizard/python/wizard.json +++ b/src/plugins/compilerexplorer/wizard/python/wizard.json @@ -6,7 +6,7 @@ "trDescription": "Creates an example CompilerExplorer setup for Python.", "trDisplayName": "Compiler Explorer Python Source", "trDisplayCategory": "Compiler Explorer", - "icon": "", + "icon": ":/compilerexplorer/logos/ce.ico", "iconKind": "Plain", "options": { "key": "DefaultSuffix",