From e37ca5c234208dddad7577864d2b919db042f534 Mon Sep 17 00:00:00 2001
From: Jens Bache-Wiig <jbache@trolltech.com>
Date: Tue, 27 Apr 2010 21:06:38 +0200
Subject: [PATCH] Make targetselector translatable

I made the buttons uniformly sized based on the largest of the
two translated strings.

Task-number: QTCREATORBUG-1286
Reviewed-by: ogoffart
---
 .../images/targetbuildselected.png            | Bin 1359 -> 862 bytes
 .../images/targetrunselected.png              | Bin 1305 -> 844 bytes
 .../images/targetunselected.png               | Bin 1060 -> 381 bytes
 .../projectexplorer/targetselector.cpp        |  66 ++++++++++++++----
 src/plugins/projectexplorer/targetselector.h  |  10 ++-
 5 files changed, 59 insertions(+), 17 deletions(-)

diff --git a/src/plugins/projectexplorer/images/targetbuildselected.png b/src/plugins/projectexplorer/images/targetbuildselected.png
index f1cf44c08b97cd29655a9af67f07e772a195060a..a62e4956768cc080e403da343a243ad032866bce 100644
GIT binary patch
delta 836
zcmV-K1H1gs3f=}GiBL{Q4GJ0x0000DNk~Le0001i0000h2nGNE0ADBT*pVR?3B~}%
z0LFMTD|3-R7k>Z;bV*G`2igQ14mvq~+nCG%00Q1gL_t(|+U=arPU=7y#SgtLtsRu2
zNJv;1NKB-niHRo0x6v0+*KY3CH}Fw>1=c3)*g;SuF<J^OHJQ7@tG5-s{&#v#(oNgY
z;hSI1cV+_3?Ck7FAp{J=0F_SZwryi>ZVsktvKncHz<)3dn5GHKvRI9@LI40#N=PYL
zjkH2A0e}#sR~kz|(FrI*K(QTATpdts2h?8(CT>8{30Mtg0z$ym0mXJeCm;lbfDjM@
z217zXCm;lbfDjM@LcmPGOh5=;;smR!tJvJ!#M06d>h(G@nT#?8I668~Zc@WAL>Pt`
z3<emDMt^UEpj0YhcXt;nD=YWsUh<(oMYe52N{M#6trP^NX~Hy3IF5rtp@7TFOGHsL
z9fC<qc&O#&WgHwFKnS6<6@FGL{NHE1#chKiKoA7Dxw(PkIH*)A==FLCg5c$upj0Yh
ze}7+j0A4#mAN7of6aQXgy1u@~-Q69^<uW>*PJf~!B({USy*&sao*c+~W`eH{q~FyE
z-cz@?x6m{Vi;IiscDv6*;JWUk4DcN%ju5=g5p3IrWm&OY7lUAHYb#aDqqIN(0G{VT
z2!Y{nI6V_I8Vy3AC<MOmBcIR5#u9Uag@uLGZI*nO_V&@^h@uF(uE!zx_r~#f3|-ej
zeShuh;4>9-f=Pg2J5bMUbX`XjMbEc`R;z_dr9uc4gkWZ72EOmd#-cqegp?A^W;2z+
zFbzj8mxJedvGXw}I6FH-tJQ+*x^x1Cf?=UhfRqxx@5ins{^b1R<RtNC>St<pb{6yV
z^SHRUNW88k*~a<#IgXEyF&GTk5`OsMIDgLlcJX*TPQ2$=xm^C8&1Ru#k4@p~>I%(f
z6V+-J#bQy($u|rGr>Cdr_xnnHFUztZgg~)aL^hj6x7$S+hEFd|H#Rn8E|;779>ewZ
zb!=~MqgJb7ZEa1df*l?nDhGEE1PH?rp6A83h@XUjFSAUy_+LZ{e*m-<lm=tNHw}LP
O0000<MNUMnLSTXiadDCW

delta 1337
zcmV-91;+Z`2G0s1iBL{Q4GJ0x0000DNk~Le0001O0000h2nGNE0CM>TCy^l*3I729
z0RN!9r<0LD7k>oeNkl<Zc-rk;O)N8A7(I%%I^$KQg!l_d>o=l)61uP<79|!oT{CtP
zx)z}e7IrL%%}BcJ#!eTSSTrT+My*8J*ib1#gwD{a<bJD4nZEt1yqM&k<ffTBGk4}b
zr_VXh+%}VEu~-PhFeof61cfqCpwsE_=g%K#G#VNWrGJoCSXc;+Mgy%@OQWF_(g1)E
z0zwFlhEhmN5=Kc=4pcM*G}9<3X%ti*Y4u1!<&olJq$RVBf@T^8^)w1vJyLn3prlby
z(r6(<K{Jhll153Rpq@tYotf6w)`p&*9@N*@qpq$FD%J0QCSP7&RtyR8cpUL~9HJ=V
z>FMcnq<>XZRA6Fa0?p0Miu*PaLU4L|s)&2lXf)7hG|=nyC@n3;_4PFpi9}}7l9Nn@
z(P)I-ZU@6Kij)u~Nq#IALo61<{rx@kdOfPEs}YGr5R1jK_q2+N3e3*VDweQR;*^HF
zyF0wRyr8nO65((-ZN{aQ$H~b_Fbwm*lU`a{f`8ZRebZ;N*}(IB#`8o`#Pswu0Kn;V
zLJ$PFTrTiD51Y*<J9d1094yOXdwcuaGHq~h5Tm1`uiNM6=WsfmxV^po=fpicJV2#V
zp}f2t7Z(?@{i;;b2q9=`Y5A~+@jQ>+-CY=sMz~xqxZUnwBafeH!C(+}yB%|La{z$R
z(SOk|88@4DcXtOu2(((QY@aOCdV70w4pdiH7eb*BqS0u^<5-r3)9L)xo|YOHNs<r<
z1klvf^sSN`jYh#R3?3gJGkaQldwb3oIXpZ>RaF&6Mn>RrxgZF_t6ZjT+ibRslIQh$
zAqWB@kqB6p{n0{%5CV?lV6j+maBu)Z2!Cug8w>^m*4Nho07FAVXliQ0`uh5->~kCk
zgTa8avomaLY{&wi4J1iINlA%p9x{34IPSxP3xa^*;bDYAAy}=}oCBTou+`O70KoS4
zHm0VgeoP`wCKJ}y*08X!fc^b_cs!mr0er7g$<Laa8f<NC!QpU#<2dy9_vdu|M1LZI
zf`S5Bzw9ab`T6<7!AW|W)oO(x2oMAz=RkYCUWlRyv)K%mWk3BT_zZ%<AZBJ}5DW%C
z<nu>IM>sz}$L;Mcg25mR2E&)$mnxkBe#X<1GO6@JBy|iy5KvQ7gU-%Q5JK?y`1s~n
zolf`HaU@B~`5yA~^N~m-<eB!q<A3=0_*0&iB+qCxzUd2vLRpPrHk$zefj|JFD8lV_
zLlngysUDN#NRkAP$Ahu4vDfX|+FEcN2b0MJi^U>)E`0B)xm>@fs3<Mzs`mr>{r;Ri
z&Fyx>YPEvrd31GkVPIeYp->3J!^2qzzN)GUcDo&sNCe~K<Jj5R`LU8ewSW11KIn8h
z3=Ivz=kwv_<^~Rj13b^;<mBX^l>IErA{vd#`t!QGy9vWEP^;Ci6JA_gL~CoSqE|!a
z=jXG|?%#;g(o!%CgK#)3_q22;Y;JBsk|a?442p}3QC3!ltE;Q*3K2pGE-x>!va*ts
zm;A;>V<k1cUjMp$_5A#tzJEZetgLjX)oR&qWH&cA@caE}XlVHIlJz^Vx3~8#>x5qc
ztyT+$VPG&ApjNAKadCloJpR|?^UP*5VOcigdqg@qI?&hGhsMT6G&VLW#?zF7SS*Hk
vJdS8In$^llp4n`sFMm-O=zsYYi2ndz@9&SBG@Kv+0000<MNUMnLIPldZlQ)V

diff --git a/src/plugins/projectexplorer/images/targetrunselected.png b/src/plugins/projectexplorer/images/targetrunselected.png
index 228287b3e102ade477734619d48d60bb15fe0427..7fc5f92f56d5d17887cc3a2e2111fc05a01700ed 100644
GIT binary patch
delta 817
zcmV-11J3-J3d{x}iBL{Q4GJ0x0000DNk~Le0001i0000h2nGNE0ADBT*pVR?3B~}%
z0LFMTD|3-R7k>Z;bV*G`2igQ14m%617x)bT00PWOL_t(|+U=apYU)53hF@z!Or~0Y
zu!!9Vy0Fkq7u|H@y?6uOfxB+J0CCsbX`w5nsjGsBU|Y~?qNo9<tDbYLvB%QmsZ8Dn
zW)lL*eDnCtmzkK*<>jRmLO|DbkYJ)&mW5a>2E#BIjenp@pzAse!$2ewVKjm&0RTuT
zA*EzAf-1qg0F)rO954ignSf9N!s&qU>40!LAipJe&jy5<fYD%0KneJCKsX&R6Ho$5
zKnW-T3qwl4Oh5@J0VSXWlz=q>YXVBJZ6+{H6NiU~FbqS<H<Pcfu9WGEloAgQ59o9{
zxVyW<{eS)a_axAD9mmJVkW#{RU5rK}%;$5Z1jy&}0D$Rqs!X49xg2u297?4U+U+*3
zudng^{Oo(~!JoT`ADdwqI5|0i>$>RmdKisHn9XLs=Wg4U%jK8acdqr7rZUB15!GrH
zg+jr%?+2R%&@>I1Oa?D6FBlGoI|=sx8sH!c@PCdF0+mVy>2!Ksf=z)*r_&e=1{jaW
zdox(O7C{veH(f&rfpWRL{)6|s5z{mwrNnSJ+<5`BFNIW4?x9#L;`H<swrzi27z!ca
zIL^**j1v3|7Z(>RPYk~61g2^Jsskv2dYqk|t@PP96KI+S&+`J6CWAyOm0BI|eIMXZ
zD1XFJ`^PL6i@z@xd7g)GI1JD8I2|a+$En^|g2`k8(=^wNp#*AR+xGf&@KFNCaga<V
z@%s8o2^8e^_IA5WkVqsDkH>euR<I8P6eJ03+eWL^S~<4ymGh^kCnS?eM59qwQi?E{
zOwedF){bx7MO-Wv==FNYX0r%~!#|!8$a?p1T^F@l4gG%KUxH03aXOu%)9E0S$-uHK
zIF5t)e2&>{rc{7b-%M(^+o;#;z5;BuPT+YSy4@};%R)37#nI7`vR^tALMYRhR;z`_
v$4A`U+@RTPetK@`{QR6BvkW-=FCxJkd(NzAQ+(J?00000NkvXXu0mjfZ2@yf

delta 1282
zcmV+d1^xQW2AK*WiBL{Q4GJ0x0000DNk~Le0001O0000h2nGNE0CM>TCy^l*3I729
z0RN!9r<0LD7k>n-Nkl<Zc-rk;Nl5!n7=5*^X_Hn(QR;FKT&SQ25upeg#03OBdGM|W
zkDjZ=1*M7?Zz_U#@*sE<6c;Rs2Ngs`a6v^}C~i=fq@pc2|5J;aR_oed{>+1cPG&Nh
zZ(iQ_eVK-6N=ixy$8pf>^`KA(bS%pvE-nrX!_d`G3x8>Py&eq1z+f=Y)lds*06+)<
zA%w1mT1X2JMoCi-V(1c3rBP7QD5!g+*&_vYj})IHEuc0Esx%53(<o^6NZlg^C5?iT
zMiUVVsx%5p8YPW_#x#n*RGQIfgvn$A!!W9PYpboT?Vq3H^Yb%KPfu}ja)PzBHEeHh
ze~&c1UVo32loSv`Aj>lD?(XpP^rQ;Hva+&NG0&Ko7-VK<A~Q1+JkMiqZx3T*W4OAy
z3V+VaUH+GaVHl*Rr$d%yxZQ5t-QD5w@lnz5UoL8d)oMk1dpokTv%}gI6N)gMP6vy{
zg6r#R+}zx#im3lXeC9X~EiElbPEHPKTS)hqoPV4QkH>@i`}=nXFE1|#&-1U2O-xK+
zcX#*0i8VJjV}E}iE|)7fjvxqdxm=3Aot>Rw+rr^H<n{FQU}|bASg)(AgTvwYbK)8s
z8`0a_8`?d-ECz!Cgpi077QpD}C^|YiAP52)8XAz0kPz{?Zx{BXzJH~*`1p9NuCBuA
zbbmq=MfCLaM8#F+<>h^>G>+pSNz$i{CWPSP;sO9*Hk;w`c;4+lG&B@;ocFHrnfd$#
zDk>_lyu1ui6r<uQi;IgD8KvSm&1f_RRrXoZEEWsS&(Cpue2mJ<%Am_zSXfZhySuxC
zzu%5iSy_qP++3ulrb3qGsFF54Jq=M5QGZre7IdAWC}M7IPEil2F+gxxS=qPUYJPsc
z!WM<nbUGdUe*dS8Zfa_J<tjtDym0kUZAC>zkR%BXhXYkrRl&IV*9nHrW&;4!*49S6
z_@XGHxw#oE%VJ<)08Xb9t*xzJo<mYnlEUsE`R96cbQBJU1A-u+si_GC1qELotADDh
z3MP{Y`}_L<fcg3PS8Dr9tgNh{wzf86*BDS_eSJM@YHETH&)<R1=leJj@%#PIYPFvZ
z^n?&BEiC~6EEda`mG)i+7>%^Qw6qieFfuX{l^Z8iLZ~3k>-EBDG=7P+fPohm7nqru
z0RW_>rGXFvjYbm@X|uDl0D#=wTz?QkP+eUOlgSh{(s-Und3iY|Cno^_TCFzNHa<R%
z#l^*6C2ePCN0~joy`v>bLSkYfZf|eD6w?Gjz~<&AG#U*AK>*M5a5|k>Utf<nroBAx
z;NT#ti3kAL?RL0aF7);F!EU!>V`Bq0n++_>!fLhR@bK{0NLyW9RoJ2_Dt{^>9LFIx
zHa2)LBO?P|uNOBrH>%xL$jQlx%Cpr^tE{W5OBvHbb-uj3L}Fqh%w{tvq64qji{atn
z$andDJ|Em}H`3D5pw((stvEG8mSyz!_XjsCLXs9L20T1G;N;{47K;Te%R-VQJUu<(
z@$pd=hO2escyDhHgM))%2}=v^h=haR@5kBM8CaHu*=$C9d_4UM!Y|<H=m<wgM_5@|
s!PeH+hy68$g@yFvFDe6lmtTeW54*8Ni8XIXw*UYD07*qoM6N<$f(?XEkN^Mx

diff --git a/src/plugins/projectexplorer/images/targetunselected.png b/src/plugins/projectexplorer/images/targetunselected.png
index 2df56444182b87e036c7c3343e73e183663d4bf7..6470b267048ef762bc5634cbc771f7677f1d859d 100644
GIT binary patch
delta 351
zcmV-l0igb*2>k*fiBL{Q4GJ0x0000DNk~Le0001i0000h2nGNE0ADBT*pVR?3B~}%
z0LFMTD|3-R7k>Z;bV*G`2igQ15)>zy@Aj7f008|-L_t(|+U=Y{j)X7}13lBgi5vg_
zWdbNDcrQDzaQO!vSyi0~@v&`@=qz(i%{e)V&{UNcNdgApB(O~hf@51>j)9;9f)3Du
zApwB|kN^@8NI)O~fdu470^54um(xH8kN_P}0!Tm!Ab$ZRU@>GdL<iwI7-MMLHgu3&
zg8RO;t}7%+F2QwO+V>q2B<}>hcOA#UVwg;V-h1@?=s;3yE&hreuY=ZF^!(@m9iRhr
zz&n8?={!$JkWPa160jKlmw?5PXJd4bu7fcKI!GtM^E{9sodnDe3F1ot2`B+1pahVB
x5<mh<@F<&|e-;sR!2HruRq>x(C(mD1`U9H6TY4vF9IgNW002ovPDHLkV1gpfg<k*w

delta 1035
zcmV+m1oZp;0;C8biBL{Q4GJ0x0000DNk~Le0001O0000h2nGNE0CM>TCy^l*3I729
z0RN!9r<0LD7k>k{Nkl<Zc-rloze^)Q9K}C(IVCGL(L!)zmrbda1{;%*E?C%TVG|Gx
z{sR{21r35=6-Y`8K~Mw*ZN%6}u#BBsniMJ4D%lN@>|B*4#vgZ@aJYN(U|^Q)clf^f
z?t3#kY<>tK1QM>ouXejlyWN&E;S%_KK7Ij6vAIlXLVpNZG#5b#!B062E>xPdM`@1|
z|G*xl(xlQPq|zj$(xlQPq|zilp)?@`wr$JVkoG7c?NLH1O)5=7ZbT&hV|#41S_}^l
zOM7$^n$0FdLqk$&Zh~c5jE;_aS7}~c(;AHi<KyGr-H3QmX^lq1le|1_kM(-pv#&Cq
zwa0qB?te*M(jNa;dwh6!AeYNI*Hcqdq*AFrZUT;ujsRF$Sz&8yi$o&9{QUf@`*OJ)
z;c%ElBJoe{@#^Y|^Yimh^K!*|S|@gIZx73|$mMd}-rlmfxcFh*^78VF_&??G*&I#N
z>|1H!aF~sa4Tsm+*%_%+%Kb{~o^-$8PcRt7Fn^3Mjrm^8S01c>i`L6)W@ZLm*T043
z_Pr75kg#nV!!Xcwon$hJZQJbZ>=21Wh{xjq<nwtnO(PzUzvy@3ZQDlIb&ijZF${xX
zFo<PYghHWD=V+Q{-@H0=V;BadQi(_;f^FMQe(7`?fa~jPbX_N%PLt2)0eE_PayX>Z
zX@3+&`92$wPVDC9CIG=;kU${tLLI&1cVBnkXPPDl2M5ICabmF;x~@|w6uxAS&1SQ2
zRp`3z@Jc3=#A30(;#H|sSYKafWMqW>{e4QM60ulpU`6}cJ#k-c0NHGoY&MIksuT)^
zS8LT<Ygcdo@$nIWXf%otf>0=grfFZwsejdK_03DuG_u(&nx;9{_|^m0Tg2(<X;f7u
z5D1`YnzLLCq5=FI#30=SqR}XpWnmbGV+oz#Ow)X`SnpZWTQPszo}Zul=GE!1uC7w4
zR4A9r&KlR7<9p-u-aCjkFr{_+<#HKCQ3wPAjE#*sM2p2D)oS%arA<ywVp$f&Vt)}K
z1ScmaFJiu$Q@_0Yem~J@l#7cCgb*l-LbY0T*6_Q#yAN%D5V>@ZH?TD=lgR*}sw!)1
zYX~7&SXkij@Q_R<gQ}{is`_Ek{C+=6OG})do^pA4`DV-@cB7x&Jp#<m&T?~eL$O$7
zZf=hI`+IhGcTp6DP$-0DS+9yTs8n2f$N5pK)kLjU^W4e7_V%{(AbANB6BFM4MnoQC
z$)bI)Q+`=AcX5*cxpt${q&>Q@Xg;6Mv!9xIk(bZs<2T-2k*QFdz~uk{002ovPDHLk
FV1h_M^-ll*

diff --git a/src/plugins/projectexplorer/targetselector.cpp b/src/plugins/projectexplorer/targetselector.cpp
index a0936ebc07f..72ee9ea5a42 100644
--- a/src/plugins/projectexplorer/targetselector.cpp
+++ b/src/plugins/projectexplorer/targetselector.cpp
@@ -1,12 +1,12 @@
 #include "targetselector.h"
 
 #include <utils/qtcassert.h>
+#include <utils/stylehelper.h>
 
 #include <QtGui/QPainter>
 #include <QtGui/QMouseEvent>
 #include <QtGui/QFontMetrics>
 
-static const int TARGET_WIDTH = 109;
 static const int TARGET_HEIGHT = 43;
 static const int ADDBUTTON_WIDTH = 27;
 
@@ -124,9 +124,20 @@ bool TargetSelector::isRemoveButtonEnabled() const
     return m_removeButtonEnabled;
 }
 
+int TargetSelector::targetWidth() const
+{
+    static int width = -1;
+    if (width < 0) {
+        QFontMetrics fm = fontMetrics();
+        width = qMax(fm.width(runButtonString()), fm.width(buildButtonString()));
+        width = qMax(129, width * 2 + 31);
+    }
+    return width;
+}
+
 QSize TargetSelector::minimumSizeHint() const
 {
-    return QSize((TARGET_WIDTH + 1) * m_targets.size() + (ADDBUTTON_WIDTH + 1) * 2 + 1, TARGET_HEIGHT + 2);
+    return QSize((targetWidth() + 1) * m_targets.size() + (ADDBUTTON_WIDTH + 1) * 2 + 1, TARGET_HEIGHT + 2);
 }
 
 void TargetSelector::mousePressEvent(QMouseEvent *event)
@@ -135,7 +146,7 @@ void TargetSelector::mousePressEvent(QMouseEvent *event)
         event->accept();
         if (m_removeButtonEnabled)
             emit removeButtonClicked();
-    } else if (event->x() > ADDBUTTON_WIDTH + (TARGET_WIDTH + 1) * m_targets.size()) {
+    } else if (event->x() > ADDBUTTON_WIDTH + (targetWidth() + 1) * m_targets.size()) {
         // check for add button
         event->accept();
         if (m_addButtonEnabled)
@@ -148,14 +159,14 @@ void TargetSelector::mousePressEvent(QMouseEvent *event)
             if (event->x() <= x) {
                 break;
             }
-            x += TARGET_WIDTH + 1;
+            x += targetWidth() + 1;
         }
         --index;
         if (index >= 0 && index < m_targets.size()) {
             // handle clicked target
             // check if user clicked on Build or Run
             if (event->y() > TARGET_HEIGHT * 3/5) {
-                if ((event->x() - (ADDBUTTON_WIDTH + (TARGET_WIDTH + 1) * index)) - 2 > TARGET_WIDTH / 2) {
+                if ((event->x() - (ADDBUTTON_WIDTH + (targetWidth() + 1) * index)) - 2 > targetWidth() / 2) {
                     m_targets[index].currentSubIndex = 1;
                 } else {
                     m_targets[index].currentSubIndex = 0;
@@ -195,22 +206,49 @@ void TargetSelector::paintEvent(QPaintEvent *event)
     p.setPen(QColor(0, 0, 0));
     p.drawLine(x, 1, x, TARGET_HEIGHT);
     x += 1;
+
+    const QString runString = runButtonString();
+    const QString buildString = buildButtonString();
     foreach (const Target &target, m_targets) {
-        const QPixmap *pixmap = &m_unselected;
+        QImage image = m_unselected;
+        bool buildSelected = target.currentSubIndex == 0;
         if (index == m_currentTargetIndex) {
             p.setPen(QColor(255, 255, 255));
-            if (target.currentSubIndex == 0) {
-                pixmap = &m_buildselected;
+            if (buildSelected) {
+                image = m_buildselected;
             } else {
-                pixmap = &m_runselected;
+                image= m_runselected;
             }
-        } else {
-            p.setPen(QColor(0, 0, 0));
         }
-        p.drawPixmap(x, 1, *pixmap);
-        p.drawText(x + (TARGET_WIDTH - fm.width(target.name))/2 + 1, 7 + fm.ascent(),
+
+        QRect buttonRect(x, 1, targetWidth() , image.height());
+        Utils::StyleHelper::drawCornerImage(image, &p, buttonRect, 16, 0, 16, 0);
+        p.drawText(x + (targetWidth()- fm.width(target.name))/2 + 1, 7 + fm.ascent(),
             target.name);
-        x += TARGET_WIDTH;
+
+        // Build
+        int margin = 2; // position centered within the rounded buttons
+        QFontMetrics fm = fontMetrics();
+        QRect textRect(x + margin, size.height() - fm.height() - 5, targetWidth()/2, fm.height());
+        p.setPen(buildSelected ? Qt::black : Qt::white);
+        if (index!=m_currentTargetIndex)
+            p.setPen(QColor(0x555555));
+        else
+            p.setPen(buildSelected ? Qt::black : Qt::white);
+
+        p.drawText(textRect, Qt::AlignHCenter, runString);
+
+        // Run
+        textRect.moveLeft(x + targetWidth()/2 - 2 * margin);
+        if (index!=m_currentTargetIndex)
+            p.setPen(QColor(0x555555));
+        else
+            p.setPen(buildSelected ? Qt::white: Qt::black);
+        p.drawText(textRect, Qt::AlignHCenter, buildString);
+
+        x += targetWidth();
+
+        p.setPen(index == m_currentTargetIndex ? QColor(0x222222) : QColor(0xcccccc));
         p.drawLine(x, 1, x, TARGET_HEIGHT);
         ++x;
         ++index;
diff --git a/src/plugins/projectexplorer/targetselector.h b/src/plugins/projectexplorer/targetselector.h
index 41cb0e681a6..b6c2037e4e1 100644
--- a/src/plugins/projectexplorer/targetselector.h
+++ b/src/plugins/projectexplorer/targetselector.h
@@ -20,6 +20,10 @@ public:
 
     QSize minimumSizeHint() const;
 
+    int targetWidth() const;
+    QString runButtonString() const { return tr("Run"); }
+    QString buildButtonString() const { return tr("Build"); }
+
     Target targetAt(int index) const;
     int targetCount() const { return m_targets.size(); }
     int currentIndex() const { return m_currentTargetIndex; }
@@ -49,9 +53,9 @@ protected:
     void mousePressEvent(QMouseEvent *event);
 
 private:
-    const QPixmap m_unselected;
-    const QPixmap m_runselected;
-    const QPixmap m_buildselected;
+    const QImage m_unselected;
+    const QImage m_runselected;
+    const QImage m_buildselected;
     const QPixmap m_targetaddbutton;
     const QPixmap m_targetaddbuttondisabled;
     const QPixmap m_targetremovebutton;
-- 
GitLab