From 25d388743304092850d4cd0df7cebd2c6d11f88f Mon Sep 17 00:00:00 2001 From: Steven Jackson Date: Fri, 28 Nov 2014 00:37:14 -0600 Subject: [PATCH] 5.2.7 --- .../assets/artwork/Unitframe/FOLLOWER-LEVEL.blp | Bin 0 -> 6676 bytes .../assets/artwork/Unitframe/FOLLOWER-RING.blp | Bin 23060 -> 6676 bytes .../SVUI/assets/artwork/Unitframe/POP-RING.blp | Bin 0 -> 88596 bytes .../assets/artwork/Unitframe/PORTRAIT-RING.blp | Bin 0 -> 23060 bytes Interface/AddOns/SVUI/framework/_load.xml | 1 - .../AddOns/SVUI/framework/movers/mover_mentalo.lua | 32 ++- Interface/AddOns/SVUI/packages/actionbar/SVBar.lua | 12 +- Interface/AddOns/SVUI/packages/bag/SVBag.lua | 242 +++++++++----------- Interface/AddOns/SVUI/packages/plates/SVPlate.lua | 18 +- Interface/AddOns/SVUI/packages/stats/SVStats.lua | 22 +- .../AddOns/SVUI/packages/stats/stats/tokens.lua | 25 +- Interface/AddOns/SVUI/packages/tip/SVTip.lua | 5 +- Interface/AddOns/SVUI/system/core.lua | 7 - .../SVUI_StyleOMatic/components/blizzard/alert.lua | 22 +- .../components/blizzard/garrison.lua | 74 ++++-- 15 files changed, 253 insertions(+), 207 deletions(-) create mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/FOLLOWER-LEVEL.blp create mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/POP-RING.blp create mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/PORTRAIT-RING.blp diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/FOLLOWER-LEVEL.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/FOLLOWER-LEVEL.blp new file mode 100644 index 0000000000000000000000000000000000000000..ea67b69c2997a5406d5b3c83aba6d76c0e694a69 GIT binary patch literal 6676 zcmZ?r2{2-0U|?Y4U}tmy(jYvA1&Bp}SOSP885phr@e?5a0>ms*3=AR!FoOWl5TF?h zK!ZW%fw;&R$Q=cvAut*OqalDj1X$68NBO7$G8!JE;ei|iqv-)TG#D60!(%i&kV9ZJ zJs^k1u+JX{7(6GbY^;9)^E4y(Hs0HtWpBgygvtjN&TY8|*m8(gPslu4%Nv6H>p2V5 z;{t>K_6PG$uxK@Wo|DKC8d{lb#Nc~KrMgKSCQobk(A)g~44$)EPEM6rX2`%0dUdMk zz7PLD&j0`U|Gn>vC5n@i4oqaI*`!{?G|c?p@E;bR{~0(Zas&N-|Gy*0)v2nS46Ogb z;NJIDK@JBR82&R9E2+O?W|+Db7(SulA&~g_0N0Pshot{MIOWmR6XH+$xGnegw!iE! z_Zpdl_`F2tFDZj>oB#ft|Nn3QpU-nZ@z02q-W`GE z{VF*BKd?MN=9jJo@fqOqG0#DKEjWMHHB@B$1EqYWY)!AA-$!4d;f@Ly?I?D&aY?xM&ZrCBU(Q1>t-S?$m^u(US={a-f z%=w-3NPfJRd++bw`|iET%(>}L2oORPEfUOtSF-FvSfgRZ!Fm{>4p^69eGN-E7NOBY zEF=XXAOnG5B9Fj37r+P40}nj#zyl9_uLs7AcNV$L64!^F2r-Po5I~>R(^b|=VFE&5 z_QtRn>CQd6CBi&;P6Ev^S*1xTIPa9WQ)zOZ$r|P$IA1BPB)D#s^jl}q&rJ2WdOo-B z5FS~-3B$9G!v~`9n_D?M4%vx3OyQkpDe{l+uvvI?lurxi`we9O3}3IGd^) z_%Aq(kO3ae)6RU5=gtRyED*$qnt{ehDW@ZW{xVTrhmnbDG$TRJjZ~V+tuV@O=G7B^ z%W43#$D+|Nf-tt(Ez)CRa|MqN*)Pc{kDlRiGMq;kGlSR3=|OEq4QK>>3+rr(Jlh_d zeb!{Nm<^q`*;DC&hk9IkD|%21pCJBb7p^{tQPr=a;t*}@vq%{>Q7!V{ywV76bCa`J2bdPLaqB!ry)3Y%UZKtC?n^=Fi-ioMY+p0m1^O+ZKPv|!fIJ%&K#{j1 z6Qx-1#L7T_LBV(D6MGp(7HHd{@RaONnwd)f#Gzlz`!AzLj?Ci69p^9LL1ND#`^C7; zxvyNsXvW0EJnES~K9M|H>zz_08IQ$^VM>o$eT;C7H!r{Su6@ z7df8}58R(E!Yb%a2CsRHEUdUUv_P z|JbpDb*&|SPpvO!0Q|*vbnxzlz!L;ke z{luPzm^zlXHy!x5v{k)H{Z8vUqa74&a-`BP={I+U+ebycYaP42y&GebG(J8zSK$Am z)_1bjSM(yu_uKrfb~!4ACqh~4?|yBSOAdJe^zX{2aQXKdM<~mS2QvwVeZ-K#ZulWrnUskOt?$?y`5qsFhD?;@#xpH@$ zL{e3SMTkl|PEEaHlA}i+iH#LX7R_y~RG#cN!1sk2vu6t;EnK}K^^Vl9k(WD5eC5U0 zmO#CasU!JKsw?Sl7HL6C%NsK9`~Fi}zet!MM~pr*Ybg8f^}ftoUgE!8>*MTUV`6UG zdr98ba`7vS%n{F|QF&dl(7g0R<00_>IXaMDd}Uyz9I+iap?t7H|M#pD zt2Q@ixq0pFPLmYM!9uW4; zLh*+BT-9>*6-=WM%Ht8wlKImxTCIZop6-Ttllz_dJ@XGmLx0pP6$ShKVn?_=&=2eA zgi?XA5BPzDe}4s^!QDGPtG|&zd%KL;y#9mp$b2bo z{$};3evIRr$}WA|(-N24rB1}iJyC6@c8`S+r7P8ptR4#j=T5Ae1BYddi9e7HQ&vRm>nd`}(ALHbwDrIm&*C z%*UvdYTK+BSPA_?pHYV&BYHMa#2?}&Zzx}g{T`~x%iEt(^V=y5qC)#YYz|>^UThAm z!O5K6$z;Cv1agT!balB+LB0=Udy6tL8nq!C=1DRiI~bNp3gB(p{u1TX1~|Xp!D2M; zoZ@9mqHYfHr!kun9p>g?!k^5;LLe_H&l8b)nAp(Ja1B*S{{`||pr6LDP!AWaMpFKMP66+*ni&r>5I_~rSdNc_ECha-Ide#aDD zo>$gQI67J zeq`SJJPkMLY_w3w&0oxi;*S@dJowIW-P;Q8`-pyZzc8b4TkO^}x6_eNFU->G+t7L` zB}zu5UV7ET+L};ep4M65CiSqyc(p*#q}!$VdBGnEj#jgJ@%+MV%^yg{*6S@rw9bmn2d0`VNPHol`lV>T z8oS+g*J-2#m7+40&c$IZE8M3jhJlyKT#-pbtyx2=toUbJRjSAz^WJm5@By;B_4ev5 zcIA7X2#4>@`{(@5Iqx~=J+BL%NqK|=0EsM+GviPC6#C)kN&KYZM~|On0Po?a9Y3Gq z$8R}6*x&d-B6gy{5B3Atxk%EV#1H;D`iyd5lmnw2_)8A>5Bt-7M(+S^fl~YR(E4xy zp68t>k#7I9lABXTv@@7-+81}YrgAQ~MZxoL0-MxWlQSNmxHSrR2Jq4;ealqF*!reS z1s?=(=2E6KN1*p9cwG9KOR<&mA@ob9E?M73dKtAZ1?+EAMUL4I1UesSPFvUG3V2GO z`5wUeTvsj+dFo6d%}3`E=9_Fu=%23+?lXRl^n9eUsvK8UPJ}3RrwHH1+d;Ag0={Yn z+Q{UVIfy6X$Hz%__MVL={9NvpvPuc=jb8n0NU~n{`lg@T?RM}dis8b_?p4$*s zX2wPB>~&d<0-Yqwz&|ipyf2|RAnSqSv>uaLSnnpujbA4S>rMCZBg7^0W2Eu9*W(uo z`dbhwuFnhFlH3muaLbyIA5Im=iq_~Ph-)wEZyf&YVb7qx7btt(F1P)%cc#d1!jG}( zl0iDW!7c%lNJn;bmH=EteM9Es6VdiBxlr1(g0;}dQIAG;v`2y6uG`_Dw|mET)mYFy zvh#&UiQcB}s>u{+c7oblmqvE@MPqxuhmrlMP*%5+gxYJw{(IdMb^}azigaYh+=dkw zAx@;{A-6#*i zA|25dh8Eszde2L(JHvY2s4=CNGuVU3mFA~3bIOura4>`CyvYSGz6MZGm?ZP)c)kOg zvj{R(EWk#bzzS%-r9m27!wRG&(_-a-Ca9mgAc@J54yAc$xAyh7cVhbwVE5HFq)A%l zBkkqDu(*4-@{W|)*Pl$qZtpF;yWI&(ibs)a@UgQVq$Fv|YT)s`KXMsL^ zFXpjejA0b>HK~ZN*`(udg5o(%a)FZUCE+Pi?E>6C2Jqtoj?jKGK;LWo^;!LK4>V^+ z3>p6;__Ou*C@-r~{wi_4%pVfDF6*)PYm#Kal}`RQB+uR3P(IK@kW4QZ`4QPsRheP( z1dH}!eNz>FU6;<(Uz6sT0}>gFmSyB!wj;mKD~*!5EhW*!@3haF-@SfM{?~~{TjFvNj#&kucJllqU2HG=?Y2M6 zZHSghg5w7CBcg3i*)5MnF7mIqwWwbn&PjeE$U_v6JRlzDm3fx=KVB-}anI$!w;%1H z?1JzF-qar=dw#ApNv1}?d)U*$emz{jMZ6QP6W+HJWWUTFQ^qaWsnIMhP||LiiURB( zG_v~pMau&hP_=TXz4{Q=Z$GBpqeO25Y{(Bb8KU6picpt(pCUM}(kbFE$^+VmBA-98 zuAJ;c;LSf-({R6-Qx*m3dPA*%SF+{*tUts3bM)72*&li2w14w9wf`CK$-QK-d)@EX zpu09i-{&?21z8dq=CJ@|Ga@@If_~qCo&OlK_`0$My)#sAex&X77mfGl9q)9%JbVlH z4=2gPRFsEF)}Zi)l`^SZRXHdR>&nwjhWaz;KWGq-b>*EUYwh-fURe9c{BY^J6L#bN zkd~hEdE*NwX!jgww1xj@HrW&BM7HbaDUykaP>uV!T#ASf#81_&4$aJ9<{`ZOqI%t{ zW6h-(Oe z{oNlf36>A|lVl%s8R;grD@A(59Au_w$WUtrCnTRy=1F46zM#EG9X{T0nnB~Fr#~>r z*EdDWY!g-fU46Gm-35Og!|iDz{(^sQt~Ia#ko`7s+k6_&s83Iu3a0Z)^w&r#gy%~Z zzYOQcNYmVy_{?XA_?L|P`c+A{RZsj@sci%ML$AA{&{MZr-qpvh5ne@=VP%9jgJ&N~ zI4fzK*AXq#rDZH1zMj{~pVJmaQhbEw#>sZZHcKX^VEzmsghPcNs_);73t`oSY5?l{ zw_-~@Stjn%klcPYnkCy-R)A3$Jc3(U!D}`$JYwcN;sk&FgZv zN1-`T4dR9NAT3?bb|y;SHV2i`{%cIEH6z~Vl}}q@qHscpx2_KR3v09nQ@q7HZ4=o^ zE(N4fXz#mfINIO`@DFbYveYe@;LX388hULE`5Q))KAj7HX}+uC?>B#Szsav8uqu0K zyvh8h7$t96Ln&W?_P{3M)$5*9W;ABjvy&hxg@DACl36b&ngQy-Xql>)%s-rq{(&wn zmFr3Qk4n8XepwUlFKU&lhb`*Qzg4$>=yVSB7tz*PQfn|6y% z5%(Kj|KIbuiT0ZTAILY%>nLtj)gw_rsx|i3Ije#V5*3D=FF&n zCo+75@#n_JXYP;xHfE!J4@(L#!Z-z2jpv^sA#nro!MWC!l5~7FcZFX2XHC~@EhR}Z zqtRffyMAIt-|wc}o{RCNoZ~oA|0zE^6Cd_(FxCT-D9YEF@c9~;_9>sP7{y;?_z2^V z@%;rxV+Ha$DcUZQkP63*jn!L_B-lr#IZfht(&_p0D*!pHr48=rgN-^azY; zhPe%y3WR@%{)Y?rue+UpH8B6v6_FkL!wLTgK=2oSdC#Zr*52N4-$(pcK3ny|>mvRv zcCwY5Y~=nb{wEOp#DD`!wj{|C@nM!3&624K$+D&-+0gwWvSV2j+5f%m>{>qS)`<51 zNmx{;+%Ss2$nTMs2QI8?^{V)+Z;10@PoVJ+G~oUp1#xkM{+ww4nFZu;L&&U(!e|+8 z=SDVZk5Rte8uGw#+W-Ci2knKvK|RrCyN>w;4SIm*@ci3g@OXZW_{U&ANyrzVKRMFt z|EiClj`b7=8h1nv;9tZUeDQmIIJ$EK_MH4bjMviGq~fy7S8Wea z{73ovLHz7XF<);H>2(!+giT76{?R<9)OX%wGIEhe;#|Lc@T@3*Bh8P$_wh0R zgY^z89~1e_0=gB!F;}_P%9S#kO+Ccl3oEP7G#c3{@H0SAR8{4YEojE`>!5kFDoYac z37)s3Jn+RBKR&N5QAS~hm_Fdy&VUq7WtDW*;CZx^8;Bq0A^wzaW_2JjU|ScS_n5Lg zrGJFQXJT?KkN-@lXVcyD^XI>JJU{RHeun3BCmMH!t1#b=a5>p`$E5(~XVlI<^zW9E9LG6@^h?u1z!+WBjhf^LN6V&SQs<&!ET}@>bz@S}~vKubODX z{1N5@_hJ3o`!(nXJSW-%$}bw~EWu26R{E)Vj5(|F5^Q^ zLHfRW(7%&tZJ{#_9973Thv>V@T~H|BTu1eWl)rsau=fZs1M8N!f?ul0-%HV_ex`ml z;dwy1wz!?ne<`21)7$6hTebBD$pc_MaS;FaYeH0&&X4>3!|K*=#iBVdGx)(nF=wUM zsGbMQlhOl%Y5t?<1EM$#*SFy`p8q1h2J54{QQwcPpBQQv>U*5(1Gi7Mv2OCm+oMq3 z2hQhu-7O_1)c2iU*8M_g*I3H$p~4%Qz_>4F(RJnj_I!@w$)WWrUf81;+g+5(Sdy%) z(#CuKfV&9WhV_a?m1qxc56VMTWnFNHnys!C_J_!h`tXdri={n~d_JagbHbu*@=y3Q z-~Kf!4}VP_JVO2Kt_OVQ^}KCXr{Q=X;vL?A^@MR)P}zST*X!;qsWX_;eR!}bVPzGC zn5xhBLi3i{uKiPsu|8{gMj9`b-Cg|!))QIVht%T*_PpEn@!HLm>&i0~Qn|m{XK&6Z zmo*hts?lDE^NVO(S8k{aj(h4>=(T@mova$?L-Noo$ba$Y2XCOa|^>llV&He+oD4YB@r;06zo<$3ti{~r0xS{skhqs8o5WmxYu10^p z_LVrQ{{^!_e;m&4k3oNq>a+eQf9_tdXLx_LFx#p}d7yj%;f?c~1rdtHqCAN90dGUx zArE99YJ=mPo&ELiF87*+C=S5JU6K9{{6MI0&M-h9`IDbY%c=ee#ciXS_?c|+_DctR z(fi5p{aNx5?blqKIG<}|zq_-?Qhh7Vw=(dC`Jnn;#=^?b-Z|qW%sozMdaiYKY&l+M z5%DE^F7cRj!}S~aiFI6W%%<}i!n+pC-ypnatitnm1bjFiBTXNLx2zkno^{EVD4%@@ zl+5DXihmXEYe?g4f5LiT@*j#SJ4+n+o49_;F9p{O=9^r2U&4gB_S3(-va6XYJzY(CNX zk{l5)zi%Rb&>Sz)-=+86r{!Y%Pl$HBD_`x4x8~#hzw1YL`$0I?Yoq=iVh_I4D911J z|jwjEzQsL+L# zDX~Iv@O}){v(kMVkzZ7Q5>zut_o94wV5U=iPqgkL4B0Pdy}W{z!j;>nh5I$Vh=&fZ z3)Z)-5$fYy?hD~O(!ct>zLO+Uq|e{T5^fwtw5^VH;`_n=KiP1@F%-|RGUs%-IQSmr z7j6yQKco2DvuSX?6py9T`f0tj_D5SvXuW0=-hVhye&K?W;EZ3Ezf!^8lC&^Jy2;#o&4$#(XWw!`=GlcZ`D^&Y(Dc~RJ3@II9j^@)=lS@iu~%I~86hoBogn*?|nsp$7-3hBn4 zgJ+xY@9jl9id!uT%xCjWy$IfS#^zA{^Z=dwj$EXL_7RPbi|w&LNOXN1=f=V(R{xQ_FC~M`7bNy(0+~VwfSkPa<=3YD1Gs| z95m2)l=iorY%bH)ESp8Of4Lo}e>v>4qYxTKoOH--;oa{`6 z6MrVodIx6#a5#6(LcCB04(knJe4_J+{^qmNM0_8I?REIm0m&8D(4Q3MlVOI39XQ?( zcaJ}{To}(dQ)3Y9?bh52;j~T_T^7|Agl)|w51=%U6X=-Ioa|^BlxFbwp9$O!-Swol zqOd;Pt|>e8=h?1+9M*~Tka&Oi;PT53n$3gO_8j!@A*hmfJdZ!YD){@jzm+>)P88-l zW7Ym}1HOsZJk>wGeJQ>$1p3AwOZ>+B%;>)$Jhxwq%*n?2T;}<<$MACP8*{Wf{+N8m|=ZTh4_SX+C~*-;(y9e{#fU%`((sd-UhLZq;ve|*X}(|y8doWD|Q5&U87 zF(gi7+g+#K{xad4Zmb2B;D78B@?Y4W&H++IaN{oF{++y%_5 zN$w~|VZ;mMTXX4ubTAtnU>-9+4^!O8PdzHQza}elPW;*kl3$gL=M(zplap;x5I;E0 z4|kutR1!w_^YA*3Vfc8%=^)3=wd$;jsf5QwRS5Tk{`Hc+(Rv*Ko2TLxdGdEN5Fk#Y z&zuqe?Fd>g#a|Egk3VJ=$}31iBmzHnr_%VTdSl}7@kZ%E?1kTk$-^jrM)`9G2S(-N z4t9*{$DQmL<;N&L?%=?vy|{xNqxx|tJ4X32%8xrZ@CDn86|in;kmQJb5yrRtOv%Ax z(D>mw<*D&PJbutTZAEBR3kQiy7hycTA{1^p!n)gfaxR6=SY=V%xC%3$kImnxwWhKe ztLnq^gTd&SuFZU`$`(9h)rIieo+$s&6%nVD+67}NesV|;>rapKwzcMLU$|sTrowx< zy6iP5Z_%*VF@9Pp({HL#J0Q9_#AR1s!FVR*P@aAd{OJPg-W5jiqN%qW-%qYxB`Rkmv1|3C^{Zd7yp7tsJG33o7eM0yWd;9 z-F^!5H+DF_=BIvBpG!Nf_|1=(MuFww<4F~u%8p=#v81n-Ft%o-=YO~3zXXr3iNq8V zo(901cs`(7|3}L!m?9j5_N7!fFZkQ|Jp6*}1*(^#{K|PuFg^ItECc58V8NqNaInm7 UA1mbF0Dkx^z#+_+4xjIT1Nba-3jhEB diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/POP-RING.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/POP-RING.blp new file mode 100644 index 0000000000000000000000000000000000000000..8e31587f23dd70dbc64bd76c47b88e5e96389a26 GIT binary patch literal 88596 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 literal 0 HcmV?d00001 diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/PORTRAIT-RING.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/PORTRAIT-RING.blp new file mode 100644 index 0000000000000000000000000000000000000000..9d7fab1fa0c629de7042854fe9397781917ad0fc GIT binary patch literal 23060 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 UA1mbF0Dkx^z#+_+4xjIT1Nba-3jhEB literal 0 HcmV?d00001 diff --git a/Interface/AddOns/SVUI/framework/_load.xml b/Interface/AddOns/SVUI/framework/_load.xml index f6f5384..9f9bd33 100644 --- a/Interface/AddOns/SVUI/framework/_load.xml +++ b/Interface/AddOns/SVUI/framework/_load.xml @@ -1,5 +1,4 @@  - diff --git a/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua b/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua index 27d6ca9..1fa1048 100644 --- a/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua +++ b/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua @@ -50,7 +50,7 @@ local DraggableFrames = { "AchievementFrame", "AuctionFrame", "ArchaeologyFrame", "BattlefieldMinimap", "BarberShopFrame", "BlackMarketFrame", "CalendarFrame", "CharacterFrame", "ClassTrainerFrame", - "DressUpFrame", + "DressUpFrame", "DraenorZoneAbilityFrame", "EncounterJournal", "FriendsFrame", "GameMenuFrame", "GMSurveyFrame", "GossipFrame", "GuildFrame", "GuildBankFrame", "GuildRegistrarFrame", @@ -957,17 +957,6 @@ local MentaloDraggablesUpdate = function(self, event, ...) end end end - -Mentalo:RegisterEvent("PLAYER_LOGIN") -Mentalo:RegisterEvent("ADDON_LOADED") -Mentalo:RegisterEvent("LFG_UPDATE") -Mentalo:RegisterEvent("ROLE_POLL_BEGIN") -Mentalo:RegisterEvent("READY_CHECK") -Mentalo:RegisterEvent("UPDATE_WORLD_STATES") -Mentalo:RegisterEvent("WORLD_STATE_TIMER_START") -Mentalo:RegisterEvent("WORLD_STATE_UI_TIMER_UPDATE") - -Mentalo:SetScript("OnEvent", MentaloDraggablesUpdate) --[[ ########################################################## Initialize @@ -1006,12 +995,21 @@ function Mentalo:Initialize() self:SetPositions() + Mentalo:RegisterEvent("ADDON_LOADED") + Mentalo:RegisterEvent("LFG_UPDATE") + Mentalo:RegisterEvent("ROLE_POLL_BEGIN") + Mentalo:RegisterEvent("READY_CHECK") + Mentalo:RegisterEvent("UPDATE_WORLD_STATES") + Mentalo:RegisterEvent("WORLD_STATE_TIMER_START") + Mentalo:RegisterEvent("WORLD_STATE_UI_TIMER_UPDATE") + Mentalo:SetScript("OnEvent", MentaloDraggablesUpdate) + --PET JOURNAL TAINT FIX (STILL NEEDED?) - local info = UIPanelWindows["PetJournalParent"]; - for name, value in pairs(info) do - PetJournalParent:SetAttribute("UIPanelLayout-"..name, value); - end - PetJournalParent:SetAttribute("UIPanelLayout-defined", true); + -- local info = UIPanelWindows["PetJournalParent"]; + -- for name, value in pairs(info) do + -- PetJournalParent:SetAttribute("UIPanelLayout-"..name, value); + -- end + -- PetJournalParent:SetAttribute("UIPanelLayout-defined", true); end SV.Mentalo = Mentalo \ No newline at end of file diff --git a/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua b/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua index f46681c..eae075c 100644 --- a/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua +++ b/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua @@ -1457,10 +1457,10 @@ local CreateExtraBar = function(self) ExtraActionBarFrame:Show() end - DraenorZoneAbilityFrame:SetParent(specialBar) + --local size = DraenorZoneAbilityFrame:GetHeight() DraenorZoneAbilityFrame:ClearAllPoints() - DraenorZoneAbilityFrame:SetPoint('CENTER', specialBar, 'CENTER') - DraenorZoneAbilityFrame.ignoreFramePositionManager = true + DraenorZoneAbilityFrame:SetSize(150, 125) + --DraenorZoneAbilityFrame:SetPoint('CENTER', specialBar, 'CENTER') SV.Mentalo:Add(specialBar, L["Boss Button"]) end @@ -1480,6 +1480,7 @@ local function RemoveDefaults() MultiBarBottomRight:SetParent(removalManager) MultiBarLeft:SetParent(removalManager) MultiBarRight:SetParent(removalManager) + for i = 1, 12 do local ab = _G[("ActionButton%d"):format(i)] ab:Hide() @@ -1517,9 +1518,11 @@ local function RemoveDefaults() ob:UnregisterAllEvents() ob:SetAttribute("statehidden", true) end - end + end + ActionBarController:UnregisterAllEvents() ActionBarController:RegisterEvent("UPDATE_EXTRA_ACTIONBAR") + MainMenuBar:EnableMouse(false) MainMenuBar:SetAlpha(0) MainMenuExpBar:UnregisterAllEvents() @@ -1572,6 +1575,7 @@ local function RemoveDefaults() InterfaceOptionsActionBarsPanelPickupActionKeyDropDown:SetScale(0.00001) InterfaceOptionsStatusTextPanelXP:SetAlpha(0) InterfaceOptionsStatusTextPanelXP:SetScale(0.00001) + if PlayerTalentFrame then PlayerTalentFrame:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED") else diff --git a/Interface/AddOns/SVUI/packages/bag/SVBag.lua b/Interface/AddOns/SVUI/packages/bag/SVBag.lua index 4c8ba3c..e6332ab 100644 --- a/Interface/AddOns/SVUI/packages/bag/SVBag.lua +++ b/Interface/AddOns/SVUI/packages/bag/SVBag.lua @@ -51,17 +51,18 @@ LOCAL VARS ]]-- local CreateFrame = _G.CreateFrame; local hooksecurefunc = _G.hooksecurefunc; -local iconTex = [[Interface\BUTTONS\WHITE8X8]] -local borderTex = [[Interface\Addons\SVUI\assets\artwork\Template\ROUND]] -local ICON_BAGS = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-BAGS]] -local ICON_SORT = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-SORT]] -local ICON_STACK = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-STACK]] -local ICON_TRANSFER = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-TRANSFER]] -local ICON_PURCHASE = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-PURCHASE]] -local ICON_CLEANUP = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-CLEANUP]] -local ICON_DEPOSIT = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-DEPOSIT]] -local ICON_VENDOR = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-VENDOR]] -local ICON_REAGENTS = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-REAGENTS]] +local BLANK_TEXTURE = [[Interface\BUTTONS\WHITE8X8]]; +local BASIC_TEXTURE = [[Interface\AddOns\SVUI\assets\artwork\Bars\DEFAULT]]; +local BORDER_TEXTURE = [[Interface\Addons\SVUI\assets\artwork\Template\ROUND]]; +local ICON_BAGS = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-BAGS]]; +local ICON_SORT = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-SORT]]; +local ICON_STACK = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-STACK]]; +local ICON_TRANSFER = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-TRANSFER]]; +local ICON_PURCHASE = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-PURCHASE]]; +local ICON_CLEANUP = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-CLEANUP]]; +local ICON_DEPOSIT = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-DEPOSIT]]; +local ICON_VENDOR = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-VENDOR]]; +local ICON_REAGENTS = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-REAGENTS]]; local numBagFrame = NUM_BAG_FRAMES + 1; local VendorQueue = {}; local gearSet, gearList = {}, {}; @@ -95,18 +96,17 @@ local function FormatCurrency(amount) end end -local function StyleBagToolButton(button) +local function StyleBagToolButton(button, iconTex) if button.styled then return end local outer = button:CreateTexture(nil, "OVERLAY") outer:WrapOuter(button, 6, 6) - outer:SetTexture(borderTex) + outer:SetTexture(BORDER_TEXTURE) outer:SetGradient("VERTICAL", 0.4, 0.47, 0.5, 0.3, 0.33, 0.35) - if button.SetNormalTexture then - iconTex = button:GetNormalTexture() - iconTex:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) - end + button:SetNormalTexture(iconTex) + iconTex = button:GetNormalTexture() + iconTex:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) local icon = button:CreateTexture(nil, "OVERLAY") icon:WrapOuter(button, 6, 6) @@ -115,13 +115,13 @@ local function StyleBagToolButton(button) local hover = button:CreateTexture(nil, "HIGHLIGHT") hover:WrapOuter(button, 6, 6) - hover:SetTexture(borderTex) + hover:SetTexture(BORDER_TEXTURE) hover:SetGradient(unpack(SV.Media.gradient.yellow)) if button.SetPushedTexture then local pushed = button:CreateTexture(nil, "BORDER") pushed:WrapOuter(button, 6, 6) - pushed:SetTexture(borderTex) + pushed:SetTexture(BORDER_TEXTURE) pushed:SetGradient(unpack(SV.Media.gradient.highlight)) button:SetPushedTexture(pushed) end @@ -129,7 +129,7 @@ local function StyleBagToolButton(button) if button.SetCheckedTexture then local checked = button:CreateTexture(nil, "BORDER") checked:WrapOuter(button, 6, 6) - checked:SetTexture(borderTex) + checked:SetTexture(BORDER_TEXTURE) checked:SetGradient(unpack(SV.Media.gradient.green)) button:SetCheckedTexture(checked) end @@ -137,7 +137,7 @@ local function StyleBagToolButton(button) if button.SetDisabledTexture then local disabled = button:CreateTexture(nil, "BORDER") disabled:WrapOuter(button, 6, 6) - disabled:SetTexture(borderTex) + disabled:SetTexture(BORDER_TEXTURE) disabled:SetGradient(unpack(SV.Media.gradient.default)) button:SetDisabledTexture(disabled) end @@ -291,53 +291,46 @@ local SlotUpdate = function(self, slotID) slot:Show() - local texture, count, locked, rarity = GetContainerItemInfo(bag, slotID); - local itemID = GetContainerItemID(bag, slotID); + local texture, count, locked = GetContainerItemInfo(bag, slotID); local start, duration, enable = GetContainerItemCooldown(bag, slotID); - local itemLink = GetContainerItemLink(bag, slotID); + local isQuestItem, questId, isActiveQuest = GetContainerItemQuestInfo(bag, slotID); - if(slot.JunkIcon) then - if(itemID and VendorQueue[itemID]) then - slot.JunkIcon:Show() - else - slot.JunkIcon:Hide() - end + local itemID = GetContainerItemID(bag, slotID); + if(itemID and VendorQueue[itemID]) then + slot.JunkIcon:Show() + else + slot.JunkIcon:Hide() end - if(slot.questIcon) then - slot.questIcon:Hide(); - end + local r,g,b = 0,0,0 - slot:SetBackdropColor(0, 0, 0, 0.6) - slot:SetBackdropBorderColor(0, 0, 0, 1) - - if(bagType) then - local r, g, b = bagType[1], bagType[2], bagType[3]; - slot:SetBackdropColor(r, g, b, 0.6) - slot:SetBackdropBorderColor(r, g, b, 1) - elseif(itemLink) then - local rarity = select(3, GetItemInfo(itemLink)) - local isQuestItem, questId, isActiveQuest = GetContainerItemQuestInfo(bag, slotID); - - if(questId and not isActive) then - slot:SetBackdropBorderColor(1.0, 0.3, 0.3); - if(slot.questIcon) then - slot.questIcon:Show(); - end - elseif(questId or isQuestItem) then - slot:SetBackdropBorderColor(1.0, 0.3, 0.3); - elseif(rarity) then - if(rarity > 1) then - local r, g, b = GetItemQualityColor(rarity) - slot:SetBackdropBorderColor(r, g, b, 1) - elseif(rarity == 0) then - if(slot.JunkIcon) then + if(questId and (not isActiveQuest)) then + r,g,b = 1,0.3,0.3 + slot.questIcon:Show(); + elseif(questId or isQuestItem) then + r,g,b = 1,0.3,0.3 + slot.questIcon:Hide(); + elseif(bagType) then + r,g,b = bagType[1],bagType[2],bagType[3] + slot.questIcon:Hide(); + else + slot.questIcon:Hide(); + local itemLink = GetContainerItemLink(bag, slotID); + if(itemLink) then + local rarity = select(3, GetItemInfo(itemLink)); + if(rarity) then + if(rarity > 1) then + r,g,b = GetItemQualityColor(rarity) + elseif(rarity == 0) then slot.JunkIcon:Show() end end end end + slot:SetBackdropColor(r,g,b,0.6) + slot:SetBackdropBorderColor(r,g,b,1) + CooldownFrame_SetTimer(slot.cooldown, start, duration, enable); if(duration > 0 and enable == 0) then @@ -517,10 +510,11 @@ local ContainerFrame_UpdateLayout = function(self) bagSlot:RemoveTextures() bagSlot:SetSlotTemplate(true, 2, 0, 0, 0.5); - local texName = ("%sIconTexture"):format(globalName) - bagSlot.iconTexture = _G[texName]; - bagSlot.iconTexture:FillInner() - bagSlot.iconTexture:SetTexCoord(0.1, 0.9, 0.1, 0.9) + if(not bagSlot.icon) then + bagSlot.icon = bagSlot:CreateTexture(nil, "BORDER"); + end + bagSlot.icon:FillInner() + bagSlot.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9) hooksecurefunc(bagSlot, "UpdateTooltip", BagMenu_OnEnter) bagSlot:HookScript("OnLeave", BagMenu_OnLeave) @@ -583,15 +577,12 @@ local ContainerFrame_UpdateLayout = function(self) end bag.numSlots = numSlots; + bag.bagFamily = false; local btype = select(2, GetContainerNumFreeSlots(bagID)); - local r, g, b; if RefProfessionColors[btype] then - r, g, b = unpack(RefProfessionColors[btype]); + local r, g, b = unpack(RefProfessionColors[btype]); bag.bagFamily = {r, g, b}; - else - r, g, b = 0,0,0 - bag.bagFamily = false; end for i = 1, MAX_CONTAINER_ITEMS do @@ -617,25 +608,27 @@ local ContainerFrame_UpdateLayout = function(self) slot:SetSlotTemplate(true, 2, 0, 0, 0.45); slot.Panel.Shadow:SetAttribute("shadowAlpha", 0.9) - if(slot.NewItemTexture) then - slot.NewItemTexture:SetTexture(nil); - slot.NewItemTexture:Hide() + if(not slot.NewItemTexture) then + slot.NewItemTexture = slot:CreateTexture(nil, "OVERLAY", 1); end + slot.NewItemTexture:FillInner(slot); + slot.NewItemTexture:SetTexture(0,0,0,0); + slot.NewItemTexture:Hide() - if(slot.JunkIcon) then - slot.JunkIcon:SetTexture([[Interface\BUTTONS\UI-GroupLoot-Coin-Up]]); - slot.JunkIcon:Point("TOPLEFT", slot, "TOPLEFT", -4, 4); + if(not slot.JunkIcon) then + slot.JunkIcon = slot:CreateTexture(nil, "OVERLAY"); + slot.JunkIcon:Size(16,16); end + slot.JunkIcon:SetTexture([[Interface\BUTTONS\UI-GroupLoot-Coin-Up]]); + slot.JunkIcon:Point("TOPLEFT", slot, "TOPLEFT", -4, 4); - slot.iconTexture = _G[iconName]; - slot.iconTexture:FillInner(slot); - slot.iconTexture:SetTexCoord(0.1, 0.9, 0.1, 0.9); - - if(_G[questIcon]) then - slot.questIcon = _G[questIcon] - else - slot.questIcon = slot:CreateTexture(nil, "OVERLAY") + if(not slot.icon) then + slot.icon = slot:CreateTexture(nil, "BORDER"); end + slot.icon:FillInner(slot); + slot.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9); + + slot.questIcon = _G[questIcon] or slot:CreateTexture(nil, "OVERLAY") slot.questIcon:SetTexture(TEXTURE_ITEM_QUEST_BANG); slot.questIcon:FillInner(slot); slot.questIcon:SetTexCoord(0.1, 0.9, 0.1, 0.9); @@ -650,11 +643,6 @@ local ContainerFrame_UpdateLayout = function(self) slot:SetID(slotID); slot:Size(buttonSize); - slot:SetBackdropColor(r, g, b, 0.6) - slot:SetBackdropBorderColor(r, g, b, 1) - - bag:SlotUpdate(slotID); - if slot:GetPoint() then slot:ClearAllPoints(); end @@ -671,8 +659,13 @@ local ContainerFrame_UpdateLayout = function(self) lastRowButton = slot; end - lastButton = slot; - end + lastButton = slot; + + slot:SetBackdropColor(1,0.3,0.3,0.6) + slot:SetBackdropBorderColor(1,0.3,0.3,1) + + bag:SlotUpdate(slotID); + end else if(menu[i] and menu[i].GetInventorySlot) then BankFrameItemButton_Update(menu[i]) @@ -740,6 +733,7 @@ local ReagentFrame_UpdateLayout = function(self) if not bag[slotID] then local slotName = ("%sSlot%d"):format(bagName, slotID) local iconName = ("%sIconTexture"):format(slotName) + local questIcon = ("%sIconQuestTexture"):format(slotName) local cdName = ("%sCooldown"):format(slotName) slot = CreateFrame("CheckButton", slotName, bag, "ReagentBankItemButtonGenericTemplate"); @@ -747,19 +741,26 @@ local ReagentFrame_UpdateLayout = function(self) slot:SetCheckedTexture(nil); slot:RemoveTextures() slot:SetSlotTemplate(true, 2, 0, 0, 0.5); - - if(slot.NewItemTexture) then - slot.NewItemTexture:Hide() - end - if(slot.JunkIcon) then - slot.JunkIcon:SetTexture([[Interface\BUTTONS\UI-GroupLoot-Coin-Up]]); - slot.JunkIcon:Point("TOPLEFT", slot, "TOPLEFT", -4, 4); - end + slot.NewItemTexture = slot:CreateTexture(nil, "OVERLAY", 1); + slot.NewItemTexture:FillInner(slot); + slot.NewItemTexture:SetTexture(0,0,0,0); + slot.NewItemTexture:Hide() + + slot.JunkIcon = slot:CreateTexture(nil, "OVERLAY"); + slot.JunkIcon:Size(16,16); + slot.JunkIcon:SetTexture(0,0,0,0); + slot.JunkIcon:Point("TOPLEFT", slot, "TOPLEFT", -4, 4); + + slot.icon = _G[iconName] or slot:CreateTexture(nil, "BORDER"); + slot.icon:FillInner(slot); + slot.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9); + + slot.questIcon = _G[questIcon] or slot:CreateTexture(nil, "OVERLAY") + slot.questIcon:SetTexture(TEXTURE_ITEM_QUEST_BANG); + slot.questIcon:FillInner(slot); + slot.questIcon:SetTexCoord(0.1, 0.9, 0.1, 0.9); - slot.iconTexture = _G[iconName]; - slot.iconTexture:FillInner(slot); - slot.iconTexture:SetTexCoord(0.1, 0.9, 0.1, 0.9); slot.cooldown = _G[cdName]; bag[slotID] = slot @@ -769,7 +770,6 @@ local ReagentFrame_UpdateLayout = function(self) slot:SetID(slotID); slot:Size(buttonSize); - bag:SlotUpdate(slotID); if slot:GetPoint() then slot:ClearAllPoints(); @@ -790,7 +790,9 @@ local ReagentFrame_UpdateLayout = function(self) lastButton = slot; BankFrameItemButton_Update(slot); - BankFrameItemButton_UpdateLocked(slot) + BankFrameItemButton_UpdateLocked(slot); + + bag:SlotUpdate(slotID); end self:Size(containerWidth, containerHeight); @@ -1140,7 +1142,6 @@ do if(bagID and slotID and self.Bags[bagID]) then self.Bags[bagID]:SlotUpdate(slotID) end - self:RefreshBags() elseif(event == "BAG_UPDATE" or event == "EQUIPMENT_SETS_CHANGED") then BuildEquipmentMap() for id, bag in pairs(self.Bags) do @@ -1395,8 +1396,7 @@ do frame.sortButton = CreateFrame("Button", nil, frame) frame.sortButton:Point("TOP", frame, "TOP", 0, -10) frame.sortButton:Size(25, 25) - frame.sortButton:SetNormalTexture(ICON_CLEANUP) - StyleBagToolButton(frame.sortButton) + StyleBagToolButton(frame.sortButton, ICON_CLEANUP) frame.sortButton.ttText = L["Sort Bags"] frame.sortButton.altText = L["Filtered Cleanup"] frame.sortButton:SetScript("OnEnter", Tooltip_Show) @@ -1407,8 +1407,7 @@ do frame.stackButton = CreateFrame("Button", nil, frame) frame.stackButton:Point("LEFT", frame.sortButton, "RIGHT", 10, 0) frame.stackButton:Size(25, 25) - frame.stackButton:SetNormalTexture(ICON_STACK) - StyleBagToolButton(frame.stackButton) + StyleBagToolButton(frame.stackButton, ICON_STACK) frame.stackButton.ttText = L["Stack Items"] frame.stackButton:SetScript("OnEnter", Tooltip_Show) frame.stackButton:SetScript("OnLeave", Tooltip_Hide) @@ -1418,8 +1417,7 @@ do frame.vendorButton = CreateFrame("Button", nil, frame) frame.vendorButton:Point("RIGHT", frame.sortButton, "LEFT", -10, 0) frame.vendorButton:Size(25, 25) - frame.vendorButton:SetNormalTexture(ICON_VENDOR) - StyleBagToolButton(frame.vendorButton) + StyleBagToolButton(frame.vendorButton, ICON_VENDOR) frame.vendorButton.ttText = L["Vendor Grays"] frame.vendorButton.ttText2 = L["Hold Shift:"] frame.vendorButton.ttText2desc = L["Delete Grays"] @@ -1430,8 +1428,7 @@ do frame.bagsButton = CreateFrame("Button", nil, frame) frame.bagsButton:Point("RIGHT", frame.vendorButton, "LEFT", -10, 0) frame.bagsButton:Size(25, 25) - frame.bagsButton:SetNormalTexture(ICON_BAGS) - StyleBagToolButton(frame.bagsButton) + StyleBagToolButton(frame.bagsButton, ICON_BAGS) frame.bagsButton.ttText = L["Toggle Bags"] frame.bagsButton:SetScript("OnEnter", Tooltip_Show) frame.bagsButton:SetScript("OnLeave", Tooltip_Hide) @@ -1447,8 +1444,7 @@ do frame.transferButton = CreateFrame("Button", nil, frame) frame.transferButton:Point("LEFT", frame.stackButton, "RIGHT", 10, 0) frame.transferButton:Size(25, 25) - frame.transferButton:SetNormalTexture(ICON_TRANSFER) - StyleBagToolButton(frame.transferButton) + StyleBagToolButton(frame.transferButton, ICON_TRANSFER) frame.transferButton.ttText = L["Stack Bags to Bank"] frame.transferButton:SetScript("OnEnter", Tooltip_Show) frame.transferButton:SetScript("OnLeave", Tooltip_Hide) @@ -1546,8 +1542,7 @@ do frame.sortButton = CreateFrame("Button", nil, frame) frame.sortButton:Point("TOPRIGHT", frame, "TOP", 0, -10) frame.sortButton:Size(25, 25) - frame.sortButton:SetNormalTexture(ICON_CLEANUP) - StyleBagToolButton(frame.sortButton) + StyleBagToolButton(frame.sortButton, ICON_CLEANUP) frame.sortButton.ttText = L["Sort Bank"] frame.sortButton.altText = L["Filtered Cleanup"] frame.sortButton:SetScript("OnEnter", Tooltip_Show) @@ -1556,8 +1551,7 @@ do frame.stackButton = CreateFrame("Button", nil, frame) frame.stackButton:Point("LEFT", frame.sortButton, "RIGHT", 10, 0) frame.stackButton:Size(25, 25) - frame.stackButton:SetNormalTexture(ICON_STACK) - StyleBagToolButton(frame.stackButton) + StyleBagToolButton(frame.stackButton, ICON_STACK) frame.stackButton.ttText = L["Stack Items"] frame.stackButton:SetScript("OnEnter", Tooltip_Show) frame.stackButton:SetScript("OnLeave", Tooltip_Hide) @@ -1576,8 +1570,7 @@ do frame.transferButton = CreateFrame("Button", nil, frame) frame.transferButton:Point("LEFT", frame.stackButton, "RIGHT", 10, 0) frame.transferButton:Size(25, 25) - frame.transferButton:SetNormalTexture(ICON_TRANSFER) - StyleBagToolButton(frame.transferButton) + StyleBagToolButton(frame.transferButton, ICON_TRANSFER) frame.transferButton.ttText = L["Stack Bank to Bags"] frame.transferButton:SetScript("OnEnter", Tooltip_Show) frame.transferButton:SetScript("OnLeave", Tooltip_Hide) @@ -1590,8 +1583,7 @@ do frame.bagsButton = CreateFrame("Button", nil, frame) frame.bagsButton:Point("RIGHT", frame.sortButton, "LEFT", -10, 0) frame.bagsButton:Size(25, 25) - frame.bagsButton:SetNormalTexture(ICON_BAGS) - StyleBagToolButton(frame.bagsButton) + StyleBagToolButton(frame.bagsButton, ICON_BAGS) frame.bagsButton.ttText = L["Toggle Bags"] frame.bagsButton:SetScript("OnEnter", Tooltip_Show) frame.bagsButton:SetScript("OnLeave", Tooltip_Hide) @@ -1613,8 +1605,7 @@ do frame.purchaseBagButton:Size(25, 25) frame.purchaseBagButton:Point("RIGHT", frame.bagsButton, "LEFT", -10, 0) frame.purchaseBagButton:SetFrameLevel(frame.purchaseBagButton:GetFrameLevel()+2) - frame.purchaseBagButton:SetNormalTexture(ICON_PURCHASE) - StyleBagToolButton(frame.purchaseBagButton) + StyleBagToolButton(frame.purchaseBagButton, ICON_PURCHASE) frame.purchaseBagButton.ttText = L["Purchase"] frame.purchaseBagButton:SetScript("OnEnter", Tooltip_Show) frame.purchaseBagButton:SetScript("OnLeave", Tooltip_Hide) @@ -1633,8 +1624,7 @@ do frame.swapButton = CreateFrame("Button", nil, frame) frame.swapButton:Point("TOPRIGHT", frame, "TOPRIGHT", -40, -10) frame.swapButton:Size(25, 25) - frame.swapButton:SetNormalTexture(active_icon) - StyleBagToolButton(frame.swapButton) + StyleBagToolButton(frame.swapButton, active_icon) frame.swapButton.ttText = L["Toggle Reagents Bank"] frame.swapButton:SetScript("OnEnter", function(self) GameTooltip:SetOwner(self:GetParent(),"ANCHOR_TOP",0,4) @@ -1671,8 +1661,7 @@ do frame.transferButton = CreateFrame("Button", nil, frame) frame.transferButton:Point("LEFT", frame.stackButton, "RIGHT", 10, 0) frame.transferButton:Size(25, 25) - frame.transferButton:SetNormalTexture(ICON_DEPOSIT) - StyleBagToolButton(frame.transferButton) + StyleBagToolButton(frame.transferButton, ICON_DEPOSIT) frame.transferButton.ttText = L["Deposit All Reagents"] frame.transferButton:SetScript("OnEnter", Tooltip_Show) frame.transferButton:SetScript("OnLeave", Tooltip_Hide) @@ -1807,7 +1796,6 @@ function MOD:BANKFRAME_OPENED() if(not self.ReagentFrame) then self:MakeBankOrReagent(true) end - self.ReagentFrame:UpdateLayout() if(self.ReagentFrame) then self.ReagentFrame:UpdateLayout() @@ -1965,6 +1953,4 @@ function MOD:Load() self:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED") StackSplitFrame:SetFrameStrata("DIALOG") - - self.BagFrame:RefreshBags() end \ No newline at end of file diff --git a/Interface/AddOns/SVUI/packages/plates/SVPlate.lua b/Interface/AddOns/SVUI/packages/plates/SVPlate.lua index fe1f198..60410fc 100644 --- a/Interface/AddOns/SVUI/packages/plates/SVPlate.lua +++ b/Interface/AddOns/SVUI/packages/plates/SVPlate.lua @@ -58,7 +58,6 @@ local MOD = SV:NewPackage("SVPlate", L["NamePlates"]); LOCALIZED GLOBALS ########################################################## ]]-- -local SVUI_CLASS_COLORS = _G.SVUI_CLASS_COLORS local RAID_CLASS_COLORS = _G.RAID_CLASS_COLORS --[[ ########################################################## @@ -758,11 +757,10 @@ do end local function GetPlateReaction(plate) - local class, classToken, _ if plate.guid ~= nil then - class, classToken, _, _, _, _, _ = GetPlayerInfoByGUID(plate.guid) - if RAID_CLASS_COLORS[class] then - return class + local class, classToken, _, _, _, _, _ = GetPlayerInfoByGUID(plate.guid) + if RAID_CLASS_COLORS[classToken] then + return classToken end end @@ -770,15 +768,17 @@ do local r = floor(oldR * 100 + .5) * 0.01; local g = floor(oldG * 100 + .5) * 0.01; local b = floor(oldB * 100 + .5) * 0.01; - for class, _ in pairs(RAID_CLASS_COLORS) do + --print(plate.health:GetStatusBarColor()) + for classToken, _ in pairs(RAID_CLASS_COLORS) do local bb = b - if class == 'MONK' then + if classToken == 'MONK' then bb = bb - 0.01 end - if RAID_CLASS_COLORS[class].r == r and RAID_CLASS_COLORS[class].g == g and RAID_CLASS_COLORS[class].b == bb then - return class + if RAID_CLASS_COLORS[classToken].r == r and RAID_CLASS_COLORS[classToken].g == g and RAID_CLASS_COLORS[classToken].b == bb then + return classToken end end + if (r + b + b) == 1.59 then return 'TAPPED_NPC' elseif g + b == 0 then diff --git a/Interface/AddOns/SVUI/packages/stats/SVStats.lua b/Interface/AddOns/SVUI/packages/stats/SVStats.lua index 104268f..e58ddf2 100644 --- a/Interface/AddOns/SVUI/packages/stats/SVStats.lua +++ b/Interface/AddOns/SVUI/packages/stats/SVStats.lua @@ -215,17 +215,21 @@ function MOD:NewAnchor(parent, maxCount, tipAnchor, isTop, customTemplate, isVer strata = "MEDIUM" end - MOD.Anchors[parent:GetName()] = parent; + local parentName = parent:GetName(); + + MOD.Anchors[parentName] = parent; parent.holders = {}; parent.vertical = isVertical; parent.numPoints = maxCount; parent.anchor = tipAnchor; parent.useIndex = activeIndex + local statName = parentName .. 'StatSlot'; + for i = 1, maxCount do local position = positionIndex[activeIndex][i] if not parent.holders[position] then - parent.holders[position] = CreateFrame("Button", "DataText"..i, parent) + parent.holders[position] = CreateFrame("Button", statName..i, parent) parent.holders[position]:RegisterForClicks("AnyUp") parent.holders[position].barframe = CreateFrame("Frame", nil, parent.holders[position]) if(SV.db.SVStats.showBackground) then @@ -284,8 +288,11 @@ function MOD:NewAnchor(parent, maxCount, tipAnchor, isTop, customTemplate, isVer parent.holders[position].text:SetJustifyH("CENTER") parent.holders[position].text:SetJustifyV("MIDDLE") end - end + end + parent.holders[position].SlotKey = statName..i; + parent.holders[position].TokenKey = 738; parent.holders[position].MenuList = {}; + parent.holders[position].TokenList = {}; parent.holders[position]:Point(GrabPlot(parent, i, maxCount)) end parent:SetScript("OnSizeChanged", UpdateAnchor) @@ -352,6 +359,11 @@ do local function _load(parent, name, config) parent.StatParent = name + + if config["init_handler"]then + config["init_handler"](parent) + end + if config["events"]then for _, event in pairs(config["events"])do parent:RegisterEvent(event) @@ -384,10 +396,6 @@ do end parent:Show() - - if config["init_handler"]then - config["init_handler"](parent) - end end local BG_OnUpdate = function(self) diff --git a/Interface/AddOns/SVUI/packages/stats/stats/tokens.lua b/Interface/AddOns/SVUI/packages/stats/stats/tokens.lua index 409b7e5..ff27b78 100644 --- a/Interface/AddOns/SVUI/packages/stats/stats/tokens.lua +++ b/Interface/AddOns/SVUI/packages/stats/stats/tokens.lua @@ -77,25 +77,26 @@ local function TokenInquiry(id, weekly, capped) end local function TokensEventHandler(self, event,...) - if(not IsLoggedIn() or (not self)) then return end - local id = MOD.Accountant[playerRealm]["tokens"][playerName][self.TokenStatIndex] or 738; + if(not IsLoggedIn() or (not self)) then return end + local id = self.TokenKey or 738; local _, current, tex = GetCurrencyInfo(id) local currentText = ("\124T%s:12\124t %s"):format(tex, current); self.text:SetText(currentText) end -local function AddToTokenMenu(self, id) +local function AddToTokenMenu(parent, id) local name, _, tex, _, _, _, _ = GetCurrencyInfo(id) local itemName = "\124T"..tex..":12\124t "..name; local fn = function() - MOD.Accountant[playerRealm]["tokens"][playerName][self.TokenStatIndex] = id; - TokensEventHandler(self) + MOD.Accountant[playerRealm]["tokens"][playerName][parent.SlotKey] = id; + parent.TokenKey = id + TokensEventHandler(parent) end - tinsert(self.TokenMenuList, {text = itemName, func = fn}); + tinsert(parent.TokenList, {text = itemName, func = fn}); end local function CacheTokenData(self) - twipe(self.TokenMenuList) + twipe(self.TokenList) local prof1, prof2, archaeology, _, cooking = GetProfessions() if archaeology then AddToTokenMenu(self, 398) @@ -216,19 +217,19 @@ local function Tokens_OnEnter(self) TokenInquiry(399) end MOD.tooltip:AddLine(" ") - MOD.tooltip:AddDoubleLine("[Shift + Click]", "Change Watched Token", 0,1,0, 0.5,1,0.5) + MOD.tooltip:AddDoubleLine("[Shift + Click]", "Change Watched Token", 0,1,0, 0.5,1,0.5) MOD:ShowTip(true) end local function Tokens_OnClick(self, button) CacheTokenData(self); - SV.Dropdown:Open(self, self.TokenMenuList) + SV.Dropdown:Open(self, self.TokenList) end local function Tokens_OnInit(self) - self.TokenStatIndex = self:GetName() - self.TokenMenuList = {}; - MOD.Accountant[playerRealm]["tokens"][playerName][self.TokenStatIndex] = MOD.Accountant[playerRealm]["tokens"][playerName][self.TokenStatIndex] or 738; + local key = self.SlotKey + MOD.Accountant[playerRealm]["tokens"][playerName][key] = MOD.Accountant[playerRealm]["tokens"][playerName][key] or 738; + self.TokenKey = MOD.Accountant[playerRealm]["tokens"][playerName][key] CacheTokenData(self); end diff --git a/Interface/AddOns/SVUI/packages/tip/SVTip.lua b/Interface/AddOns/SVUI/packages/tip/SVTip.lua index eab29da..4e0824e 100644 --- a/Interface/AddOns/SVUI/packages/tip/SVTip.lua +++ b/Interface/AddOns/SVUI/packages/tip/SVTip.lua @@ -85,7 +85,10 @@ local tooltips = { WorldMapCompareTooltip3, DropDownList1MenuBackdrop, DropDownList2MenuBackdrop, DropDownList3MenuBackdrop, BNToastFrame, PetBattlePrimaryAbilityTooltip, PetBattlePrimaryUnitTooltip, - BattlePetTooltip, FloatingBattlePetTooltip, FloatingPetBattleAbilityTooltip + BattlePetTooltip, FloatingBattlePetTooltip, FloatingPetBattleAbilityTooltip, + GarrisonMissionMechanicTooltip, GarrisonFollowerTooltip, + GarrisonMissionMechanicFollowerCounterTooltip, GarrisonFollowerAbilityTooltip, + BuildingLevelTooltip } local classification = { diff --git a/Interface/AddOns/SVUI/system/core.lua b/Interface/AddOns/SVUI/system/core.lua index 518fb4a..29847c2 100644 --- a/Interface/AddOns/SVUI/system/core.lua +++ b/Interface/AddOns/SVUI/system/core.lua @@ -379,13 +379,6 @@ function SVUI:ToggleConfig() GameTooltip:Hide() end -function SVUI:TaintHandler(taint, sourceName, sourceFunc) - if GetCVarBool('scriptErrors') ~= 1 then return end - local errorString = ("Error Captured: %s->%s->{%s}"):format(taint, sourceName or "Unknown", sourceFunc or "Unknown") - self:AddonMessage(errorString) - self:StaticPopup_Show("TAINT_RL") -end - function SVUI:VersionCheck() local minimumVersion = 5.0; --print(table.dump(self.safedata)) diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/alert.lua b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/alert.lua index 030bad2..cb48461 100644 --- a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/alert.lua +++ b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/alert.lua @@ -27,6 +27,9 @@ local Schema = PLUGIN.Schema; OVERRIDES AND HOOKS ########################################################## ]]-- +local RING_TEXTURE = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\FOLLOWER-RING]] +local LVL_TEXTURE = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\FOLLOWER-LEVEL]] + local AlphaBlock = function() return end local _hook_DisableBackground = function(self) @@ -328,7 +331,7 @@ local function AlertStyle() end local color = ITEM_QUALITY_COLORS[itemRarity]; if(not self.IconSlot) then return end; - self.IconSlot:SetBackdropColor(color.r, color.g, color.b); + self.IconSlot:SetBackdropBorderColor(color.r, color.g, color.b); end) end @@ -402,10 +405,9 @@ local function AlertStyle() frame:DisableDrawLayer("BACKGROUND") PLUGIN:ApplyAlertStyle(frame) - frame:AlertColor(0.28, 0.31, 0.32) + frame:AlertColor(0.37, 0.32, 0.29) frame.IconBG:SetTexture('') - frame.Title:FontManager(nil, 12) frame.Title:SetTextColor(1, 1, 1) if(_G[frameName .. 'Glow']) then _G[frameName .. 'Glow']:Die() end @@ -426,7 +428,6 @@ local function AlertStyle() frame:AlertColor(0.75, 0.42, 0) frame.Icon:SetTexCoord(0.1, 0.9, 0.1, 0.9) - frame.Title:FontManager(nil, 12) frame.Title:SetTextColor(1, 1, 1) if(_G[frameName .. 'Glow']) then _G[frameName .. 'Glow']:Die() end @@ -447,7 +448,6 @@ local function AlertStyle() PLUGIN:ApplyAlertStyle(frame, 2) frame.FollowerBG:SetTexCoord(0.1, 0.9, 0.1, 0.9) - frame.Title:FontManager(nil, 12) frame.Title:SetTextColor(1, 1, 1) if(_G[frameName .. 'Glow']) then _G[frameName .. 'Glow']:Die() end @@ -457,9 +457,19 @@ local function AlertStyle() end if(frame.PortraitFrame) then - frame.PortraitFrame.PortraitRing:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Unitframe\FOLLOWER-RING]]) + --frame.PortraitFrame.PortraitRing:ClearAllPoints() + --frame.PortraitFrame.PortraitRing:SetPoint("TOPLEFT", frame.PortraitFrame, "TOPLEFT", -5, 10) + --frame.PortraitFrame.PortraitRing:SetPoint("BOTTOMRIGHT", frame.PortraitFrame, "BOTTOMRIGHT", 5, 0) + frame.PortraitFrame.PortraitRing:SetTexture(RING_TEXTURE) frame.PortraitFrame.PortraitRingQuality:SetTexture('') frame.PortraitFrame.LevelBorder:SetTexture('') + --frame.PortraitFrame.LevelBorder:SetTexture(LVL_TEXTURE) + if(not frame.PortraitFrame.LevelCallout) then + frame.PortraitFrame.LevelCallout = frame.PortraitFrame:CreateTexture(nil, 'BORDER') + frame.PortraitFrame.LevelCallout:SetAllPoints(frame.PortraitFrame) + frame.PortraitFrame.LevelCallout:SetTexture(LVL_TEXTURE) + frame.PortraitFrame.LevelBorder:SetDrawLayer('OVERLAY') + end end end end diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/garrison.lua b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/garrison.lua index 79bc5d4..65658a8 100644 --- a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/garrison.lua +++ b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/garrison.lua @@ -29,9 +29,8 @@ local Schema = PLUGIN.Schema; HELPERS ########################################################## ]]-- -local GarrisonButtonList = { - "StartWorkOrderButton" -}; +local RING_TEXTURE = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\FOLLOWER-RING]] +local LVL_TEXTURE = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\FOLLOWER-LEVEL]] --[[ ########################################################## STYLE @@ -60,24 +59,72 @@ end local _hook_GarrisonFollowerListUpdate = function(self) local buttons = self.FollowerList.listScroll.buttons; + local followers = self.FollowerList.followers; + local followersList = self.FollowerList.followersList; + local numFollowers = #followersList; + local scrollFrame = self.FollowerList.listScroll; + local offset = HybridScrollFrame_GetOffset(scrollFrame); local numButtons = #buttons; for i = 1, numButtons do local button = buttons[i]; - local picture = button.PortraitFrame.Portrait:GetTexture() - if(not button.Panel) then - button:RemoveTextures() - button:SetPanelTemplate('Blackout', true, 1, 0, 0) - end + local index = offset + i; + if(index <= numFollowers) then + local follower = followers[followersList[index]]; + if(not button.Panel) then + button:RemoveTextures() + button:SetPanelTemplate('Blackout', true, 1, 0, 0) + if(button.PortraitFrame) then + --button.PortraitFrame.PortraitRing:ClearAllPoints() + --button.PortraitFrame.PortraitRing:SetPoint("TOPLEFT", button.PortraitFrame, "TOPLEFT", -10, 10) + --button.PortraitFrame.PortraitRing:SetPoint("BOTTOMRIGHT", button.PortraitFrame, "BOTTOMRIGHT", 10, 0) + button.PortraitFrame.PortraitRing:SetTexture(RING_TEXTURE) + button.PortraitFrame.PortraitRingQuality:SetTexture('') + button.PortraitFrame.LevelBorder:SetTexture('') + if(not button.PortraitFrame.LevelCallout) then + button.PortraitFrame.LevelCallout = button.PortraitFrame:CreateTexture(nil, 'BORDER', 4) + button.PortraitFrame.LevelCallout:SetAllPoints(button.PortraitFrame) + button.PortraitFrame.LevelCallout:SetTexture(LVL_TEXTURE) + button.PortraitFrame.LevelBorder:SetDrawLayer('OVERLAY') + end + end + end + if(button.PortraitFrame) then + if (follower.isCollected) then + local color = ITEM_QUALITY_COLORS[follower.quality]; + button.PortraitFrame.PortraitRing:SetVertexColor(color.r, color.g, color.b) + else + button.PortraitFrame.PortraitRing:SetVertexColor(0.25, 0.25, 0.25) + end + end + end end end -local _hook_GarrisonFollowerPage_ShowFollower = function(self) +local _hook_GarrisonFollowerPage_ShowFollower = function(self, followerID) + local followerInfo = C_Garrison.GetFollowerInfo(followerID); if(not self.XPBar.Panel) then self.XPBar:RemoveTextures() self.XPBar:SetStatusBarTexture([[Interface\AddOns\SVUI\assets\artwork\Bars\DEFAULT]]) self.XPBar:SetFixedPanelTemplate("Bar") end + + if(self.PortraitFrame) then + local color = ITEM_QUALITY_COLORS[followerInfo.quality]; + --self.PortraitFrame.PortraitRing:ClearAllPoints() + --self.PortraitFrame.PortraitRing:SetPoint("TOPLEFT", self.PortraitFrame, "TOPLEFT", -10, 10) + --self.PortraitFrame.PortraitRing:SetPoint("BOTTOMRIGHT", self.PortraitFrame, "BOTTOMRIGHT", 10, 0) + self.PortraitFrame.PortraitRing:SetTexture(RING_TEXTURE) + self.PortraitFrame.PortraitRingQuality:SetTexture('') + self.PortraitFrame.LevelBorder:SetTexture('') + if(not self.PortraitFrame.LevelCallout) then + self.PortraitFrame.LevelCallout = self.PortraitFrame:CreateTexture(nil, 'BORDER', 4) + self.PortraitFrame.LevelCallout:SetAllPoints(self.PortraitFrame) + self.PortraitFrame.LevelCallout:SetTexture(LVL_TEXTURE) + self.PortraitFrame.LevelBorder:SetDrawLayer('OVERLAY') + end + self.PortraitFrame.PortraitRing:SetVertexColor(color.r, color.g, color.b) + end for i=1, #self.AbilitiesFrame.Abilities do local abilityFrame = self.AbilitiesFrame.Abilities[i]; @@ -265,12 +312,9 @@ local function LoadGarrisonStyle() hooksecurefunc("GarrisonMissionFrame_SetItemRewardDetails", _hook_GarrisonMissionFrame_SetItemRewardDetails) --print("Test") - for i = 1, #GarrisonButtonList do - local button = GarrisonCapacitiveDisplayFrame[GarrisonButtonList[i]] - if(button) then - button:RemoveTextures(true) - button:SetButtonTemplate() - end + if(GarrisonCapacitiveDisplayFrame.StartWorkOrderButton) then + GarrisonCapacitiveDisplayFrame.StartWorkOrderButton:RemoveTextures(true) + GarrisonCapacitiveDisplayFrame.StartWorkOrderButton:SetButtonTemplate() end --print("Test") -- 1.7.9.5