From 83ae2d963ba62f7545f3955056d633ddd48154ab Mon Sep 17 00:00:00 2001 From: MrRobin Date: Sat, 28 Oct 2023 23:18:17 +0200 Subject: [PATCH] Fixed rounding up issue --- Resources/Screenshot_01.png | Bin 5439 -> 5403 bytes Resources/Screenshot_02.png | Bin 8790 -> 8720 bytes .../MyDateTimeDetailCustomization.cpp | 69 +++++++++++------- .../MyTimespanDetailCustomization.cpp | 43 ++++++----- .../MyDateTimeDetailCustomization.h | 8 +- .../MyTimespanDetailCustomization.h | 8 +- 6 files changed, 74 insertions(+), 54 deletions(-) diff --git a/Resources/Screenshot_01.png b/Resources/Screenshot_01.png index d6252cc8418aad8449d56dac74fdbef0c915e651..a7d59a9dfd5ec97d8b619648f30294a6af445690 100644 GIT binary patch literal 5403 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 literal 5439 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 diff --git a/Resources/Screenshot_02.png b/Resources/Screenshot_02.png index 20f750db836f020e14decc62a577e3b9369db4b2..e871bb96a5a5d6e88f657d4f1448af09709d0eaa 100644 GIT binary patch literal 8720 zcma)>by!s0*Y^hzk+8s^L%OBAltvn*Lq}Q|nxPRzX#|Gu7?2jpp;bZ#=@J=0x*Md2 zXV3lI@AF>I@BQbU>w?2M!#T5Ouf5m$e7`G9TT}T4F%>Zc0=c28qM!?bTuB9gn_j;L ze)m1R7YGh`Zo0~kA?1BEtKj6Sjl70D1X3A8a{htuKp+g~stWS@ zaP!S6Lb$%iU(ucT$0{mUi1Kd_t!P-vr+&V&$9X-6;4t~2AN9-{s5qwN)NlnZOKWPoJ2I)7#Z zuVU@5s&sE_t*osF=euH72J@8n#AKf|adGaJ2f-cE8OLH03=2&{h0(R*pp$~j85y0PUg6T(*xc;y?bUdhnwZGT-|H_w2XCye*X{_v z$0017psO2~0G}^0iva)iV|3JPE+sRQclRf~1H$ow{nKj)S~3kVEEksowFFKbKR+54 zW=xWQ`aAt1UB#APa@1mPRGvOXynE{nhsPx))%kfB78G>LB$97Ssx^@#3?+*yJ+=EE z@o;hJU0lSBNLzAANl76L&kRF7roU{?>V#};ple^-*w}DXa4hc=j|m#o*4zwZ4bps8 zZfb<$3V6!TKW;VI)untwR>B%1?>jfYJ(MBowcsKr#~?1IpPir2JYh|<9U0kmm)bX@ zsks?J4?7I?n46nJWWha1UWc>>GKfpa(5_>wCdbD=6hEsf`{IAJW!B(7x#LZ+p29h4 z+!e-JECO*4O&h0^Qc3JGoqWTrHz^iCqulAzJHyvc0o$rODph5jU*2*1T5A|CJm3GW zj3p(~B7PS)-g_`xKpYJ+Y z_gGQSNcQ)+H`VkPkoB^tx8!$5Q5Ts&v}wR=RGB5hf&V6rnB3Q|U)Si^HOJZq2M1lV zo-#>FN~&_Nk5_03+mC$oACswjw1q)w&`Nsh*Jaluo=@mLprb~H0aPKPhIN=!_g>%G4;*q0$`_x=5ikqQgh!|OVm zziaHi1`|{}jPr_%Shhh9uiFmhDn{6@kCmalc8Q6Jh;)vqMvC-4h&W;7Dl7Tjk9S}r zjb5-rmD!WyIOj3s?mXMTT!)2jJZpcEP0;-m zu1Nw~eD<3nqwak*Y5mgUh6Rg%jQgW$E%bSvV-FUSND>;?GW9FW%~GX(uU+hC?XUKV zo)!1cMQ@l3z4&G*zCEnP^y$U-YioCM3pCOOY_c@+Dq2q2G%~0(g&n9;507CxCtw}s z_RD4=F@ye^(!NWW2|@w_&X6tGUeiQXq26R|nN{my5{z1eNIWwjgL?%$L=D%LUs|6MElWVq>N;Rh~w`8@TKj} z{%)$}3Yf>KL90#&a-P`jFZHUSUKeNHsLhvudkuYL^MvIjnI-G3wC`UPjL+YVqRba< zOc~_l-njqWpe(vbfAk`FPkJH|yPrj_Hn(SSx)2{TS{1f6)u_(bd@vNh?839U zI$XHW^yA0GnvpgccY>pO*WUcEfc;+4YTqL#;|BL4KTSyKi{ZC#iVZ3>MWm*ibPg9Db;$WJFheY0zCC#G` zJXb}%r7tsO(BfKtSJayEV`3uZ{JdBXeyq=ubKZLJ+rgii-|EGSoS{g1Dv9viyz$|k zS^AHSjcGK{^n-vs)psK!u8%RLl)UNLW>OpnUG#z6!*P!^AEM4_rF{@_@$q)p^Aki$ zimJJ}`AE(a!jmH~YpzZKEiElVwgU`Bl(Scn{%3#J?!?9Rf+I4XO{>_qE%Er|qS#*QvrW)ZbI{kA0;n6%u;)Hwd zNe|!I0wI9VHep;zz}dAKghPEdLUtWr%f z_fLca5-oTUp`jm*Ny|nF~JL zqEAc}aMSpV5k>URr(IUr^y}s+eWK;Mv4j?>a*y1NOMX`JJb{>|91ldP+UIJUK$@md z)R(HNMRo3@wR=sx><>tt;^vvFwX)0){!YRMOkmB7!m;NxycCzmT~Addn3!w^>Rsr& zU)3!+?-`dFKl8?vnHYqJhv)CkcMbiB&H2)g3FkaNLhaz$(gt=GYNW9~NKN1}DE7Va zcY8()#Gzcsx7KOO_|)P4yB>xmn~|H?X`v2G08?gSNNbk2t2I+O^N%UwS2t(i`lTzS zPV%ai`n5c?P@240CS~1bpF?&D31gIqlIjqV}x%rMwt3v;3-Aimt)k5o@W z!YIcTc#RKO{Euf1iw@JpT++E`t%&(%JG_=L%>DjyHod3mSnN^Yz|RzK2YI}M@H72} z#zytt_xz|o-A!Fl)NEE^$oza2$7frqY6Blk>YUI~c!6G2yFx0Wu+;MAYnzXr)kbmC zLj5952v8{*jo+PTrubTpgH6rMMg<{1hy8NBXTK>ncx}rZZl0wc^eh~{u<)-TaZ$e| znz9dJfL^LPtu579R()|L9*W?rO-j{q3SPF}pYPIAc{3;Jj-BlrGF2ze_IgWrt6-@& zO+By?(>sYF#iF??R9e+FA5#h2GcWJ9;SD71FY~D+eNc^OMIXKFil%+#ewxT*GAbw+ z@iW2EdNujZ%xmX(iNO0}cNVv=ZfU+q7o%$<>t##D7 zRi!9wI=3StX($M9oBfhE*Sz_$E%+YZ_s^GEwko-_3P`Dab+ul4Gs(8IUZDIGj zT5Eyg=<9+tgJ@lF+8ao9XngqW_YXa<)@8BBOq-K+S^@RnWdr|4;Y%J<-?B7+%QaHeWL*@Y`YLz7V^dMyeatbX@X+s&(F<`G>^?MCsVtST6O7`QU@%tL zrnAj#so=KyUt}0Pa|_TYEe?`xY#uBYK13ps=*L%+_ca@jmx2ln=93GMNcE>~<9^Of z-hCFDVsLZ{0`ZDv`q+N_p|7u`tA|Gt-1S@Mf8Z_cJPDcBXY-ukc&TfS^AWfBntL=b z1-uIH;RXoQn>#Q^!S>TivUPWoN~MXhh+uSWBA{&$pCGcYVXRIexKL#)F#LPzjRHCD zg4$IuQt)EGLqU2qTaO~7^cF#soX9toR~Mf>?+T#nWeiO^Yp&<@;kk$NNq8?mYd7^Z zZg<;2H8iAT=naO>N1^T=e*NuzPp1tY|eCQF&Von1gI{Y6Fevad153QTgUe-&{ z@GuVJrXFG$n*xHXSL5EkJxN~Xolkf7@kw-Q5_dYXQsQ?x0Hbhw980COaLQ;oZb zPtdZCEgr}_tvZ|Wu6HDwz z?X96s-1As07QLLeF_)2?oX^}8YNBJrId9w%#_Dqme0M`F?m_!XCiS;TOUMR?mw7UqpQ@YYT>bd zp(gDq_H29g1APk{Jw5&2-d^r#NvmG%xRl4w!9g8W&A{wDueNdGC)fg?vyL_DtcL`8mWNl>0cB2y(y1cJMLQ ztoAkPDeHMfpg+fclgGxdSnRpYlOeG{?0I4IZvL>tc)4EO$OIxWQK|LfFSS{-PXd*Y zEqgydAjL3O^XdkxV_&JbT7c0D>+4K0Y#OO5%l%n}fFg=*tJ=b$fiGYq{hME zcZ+}H2GsF)wa#4Q^S@E_vUH*(RAZlCJSjR{FjP`d_*hj{wUH&_NX28`WJp(qv7&$g z?QMw2$ly_Z<>}dHf6r?R!zkOj=E{A^Dbxv-;(G~)ivi88d$`temu$%Fq^?0|cebFwX_o2HPrS79~sfU&>fFM_&7ftE&8)^h?2Cp1{fM9Gv{JP zuT*ydF=XABuBseOlOyAQIuK1OnZFq9;y^fa)tK|Ub^tE@L};dqG4|vM+gg6g_><4X z&aQ1=01$^yI7uT-#Ct9Ij%dG59d=kPLqaUvVO^ZQq+d9#l|HgvT3nUEFwZj~wn+eaz-X%I7J@x@mH;^HZq zSuz@cBID(mmz?R%WR5@pbsf-V+;YCDLUs>D+0_%dWBb2Vv|>3cZ7{}PMH3Uzj}R7M zF}LNO9c>TSyUgdauJ89V6$M^;t&EkK=%!K9(`&(6P7+5#7iF#6Rf$9^MPL64mGBBs z?dy&re?VtDQeprrepZqw)bCQojiABG+N3Yoym~bN>N~Ok<$JXCWrn646>zW;D^x?h zdn2f%q@=-W0yrn#-Q8eE@yz~K$MXIei#k7c`&yIA{@s!oq%`&cptP7LXhfZ)dNXM` z9%QVKLl-E2`m}5C7BpCC-O0i{tX8 z3V=xa!S5upcySWrqGvqQ;*X@KKdM~7yJA|^9cCB6rj?0!^B8R4xH}u#U+S-|&0Jzd z{dc|+>etvmv+D~uSxjP)XAegp?yklcjV6S(NwrKYq>*pM_q+{)zkh>q%g>bdy>CVF z6t|NJ=2l_w_T7{Hws|;yhL)pmf%sn>a)w8q zo7&4foefCFJaE4_Jp@*Ss@u}f9H2{v>t+Jf!NyD|(A?58x@%JVIu_5OCy__*D9GHo z^(oy>M-{O%B`_zd4u*f;03TmTasIE5JE{${x)GNMrfMB^?6h1}NG)>`bh`2rZ! z&0973(TgiUUxiNxOnx4^zOcAup3>CppT&HP^7ir3_B*Gwo8~TuCndyT)9r}HNqxOt zW`0}+H4I8wq1!RVYX9-1YP|K*Li>G0n=YsaE%NeFtU-N?nLeM`!`F`%x-PB&6GNRz z>D>_U2a0@iKC5wRA{EywTC1(B68z2X98HoE6Dv_(iw8d3itgWd;XG8uD;M_inRxo6 z!#Ngi)N11L68*{)X=UZOl_W!3t4gl}hWkD_d5M#}(azB=X5}tovWRoB+LV--1d4lF z|I}gc|5Jyld+J+TWuF!4dhTjIeX46tIQLvX5ncb>Wmp`nCR$*|CF;!W?z$j8TCQx* zuNkX8-+DCWZu~ZlAJxhH-}OHD!v{8RZ||NY5x(6N3zv?@(m!s0t8JphWtUnSkd&}! z>LdEa@#~<5Hq`(}GDuTg>{riNoM%3=BlWShOPhDu4d;lZd8) z{SS1>)Nr%g5_Y98mn^_>$R*X=L1SflR?0JP90ICt*YV?p1$~`F>V>Xs4Zp$JdmePs zYISftf%Zw&usZU&GMD$svT@#AB+=sN`Y|IM2!$2ccgOK@aN6_YoT@2&96KrMtc5Lo z3)z2lc)NUh`Ot&UqUABDIfW4q_=;={$8r_jP!5u=3&{XQFC=Hv9EzeA&EM_@QqL-5>Vdhf zdh7WYtv-p`IJRc!)S-+PFB)OT6|LoQ-SNOnl~}#zB$2 z9Uhvj6dUWt!JMDgG#z(-hMNx`?WHhQgOa^a@jMQ_f}ztx>in>C49YET;NZJ4Y^OcoBsM^aFWrGTHq*{V$zEbt4dQV{e^ zKsvpZDlVw|H_i33<;7tH@F?|OEu^!_V#dD+ArAk!^|OanqV3+NeWxk&1U!ks!Sz>J zd3kxHO|$fL?%!+Pp>~Ohq~M{2DhzF!V+5I(h&k%lHD3( zcka-u$9w9JNP(iq>c6Xa*Z=RtWn5jIsJNII8pTppdMN`Q9aQ!mEeDYZSzJB%`g?Je zbhncX;bR#po|w(ehuewoSlIs&7nqB8jUM?01-fcz{MEQCzrW!#nwd>8C$6rplBw%G zcodmXCtrMQN(cY95nu-z0Y$!U$>E}G3^XvkDofTZfF5M=39mb z7)uYIo%ufZ!CuOh;#Cs@fgMCLRWTXXFhptPp{nxiUZ?@ zw1?hd`UE75`}whphgNiopv_Q?!}urV7&;sUf^?N<-J4pZoJBjH`FO&`**RO>ZE0Y; z^->drs&Hq=nM&j}1x_*)JW1t;UIQsy$w}-X6O-NANRfV>liA@!wlK{$V7yd-vIWfP z9(L!)MAh)!q>=n?w>3%#3vQYW+sTP6{@WerRsWVLd8Dm`Mbg|%Vs@~u< zB_R&O)Vtu^aG-4D0L$w;QP`+bE;*6XyakX|Y_k9dG?oB8TV3j<2JI6~`{^c>&(&;a zKodcVO}ZU8W7_SxfaYVIV-BV>Ve{P2-`{Q^TV8j)`@t8G4oj3(5>+-P>-aLHymhDW ztr*3{jZ!-W1qH2sXWyii_|f{|ChbEQ3}$pQhMbH^W(G9FrqB_M&knX{vT}2C^PeN2 zvhW>CDoIc78#H1csYIPhGgBV0`z4(v$tv&NyQ{@I-z}yD z{;cM;V14fKnAU#`e(Qkl#fRbFB>;HwIkl=vP*Fi)Uy!I0TCSLWW>+Cmz29U50 zZV3LabxbqeX%pG`L*w*#IT?Gt-|s%(d829ySi;Lx_L+zjXipf|xVGy#YALPJWap27 zUj2RG2KWB}Hf(-BJ0j91jAP~%-1qE<#_YyKENCOqA6}Q6#rY>C&NIz+!v(6rDAz?b zj|wZl!8wxqzX~qSj)ohzTe$F_)ElLpIau4InREByEL;4Ku!pYW?_7r){~>-l88()l z-^s2`^%hQ5)*7p_m*VmcW9OE&tkiABI03?mnHidzGP7?bR+DI}b=em?idc|;$j!o{ zcslF4DadzdnDdxmHO-;DhqkjLp<4uhiO>8etJ#@G5h)KW#z8iXm+070LBWKH9H6g6;K20z%kHsR=gM{oyROWhmr+^3} zyf|vTOn4)Wv8k}?NpuA!X7gH=yhC4BD}$L4t41pOlm+N%G5Ei%dp%JMdN?&nQjkyT zNxZIt-4|jg7JRPT@;bPwia7ozjrur z`z0rb$+k0c)qP%xJBs#9)>ZJE@H8aE>H&=@p`#^4;(PB)7neE?aq+M#`1tNq2OTwT z;}u<>Oiuqr_f;T#*D`6EuE7DktEs8w20;St*2b6u0{Qt12y<5NbPe|OD2I6mH?S#h z3EVuj#92(Y?keE0-No^J=IX_TG?(;cAj25sH_pOI`htYr8y=pjDVdxfV=@>##dI0H=kWhM%ZV;rTy9Nef00E`D z--Y-6yvO^;^Bvzl4)&fs>{+w+wb#1V?>w&w*HDwky-$As)~#E(iV8AXw{G1|1g{P6 zVSv3PtJ)qopt)+vOW%SIQm%uOyVg>wQnzlE$6#NWp@Va*Hwt>Lw{8)*-Ta{;U(tAh zH%)A`A#N`mZQiI_xtUp-xtW3YZry^?S=igW(QvYHbaSN>F@Vx}(TQ-e(|LovAN$`k z0Ris+dM?cS?*;!{4o;2yrmIPkZr!4Nt0*I-?Pa_$QJ#4>!vNj^4xi?|5?zp+YIkN zXx!euI2LDi&}z<0|9I_G+E{m-?&<`wTiDL@JJO9dc>VfNURnlh%kRxsTW?;-w35dw z(Sgn7e~;bT1od2=$L34x>#UuT&<)p$+Pu6_m+LF>de7}l3H2fTZ34NbNM5ACudqWu z`bp2qFn&Z$aSz-9fezXt2_}q6POjZ$p$!kmaydV8@ID!Ck<^hjDmU-U(=OB^AM5C7 zBp(}Rrs+T+5C%#KEVNiySOhdQ)*T-uw>`8=Qa+xXoY;zOBb$qNRcP#L9HwH85H*BM zi836$2!ygy5x)|2#hv5hDH`qyOa|=o^71spXV0E}x{Hq9mm%s2v!vIo zl~QUdBioJUHs7@A5P4f(Lnhy30rOhmHK#J|Xs{p4wfQCXW2FlpGnETA8i3J8LrUR9f0HHgueC_*{mz>%a4}MMlmz z?&nWa6u#vat!P95+kfuk;|PV(3EW#9G46(vl8m#Zb`LdFiKLP zG8+?6eWX7$#P?t%Yh^$%Um=k#8ZLZ+OSu3yGRVarhz-X6rI^f-;YOnkH~b+~er3EM z=((k0Gg%VuSbOCJp3dm;;`L~&WU+vy6NGRZM6$wdT}x3#B>~kP)0g-}7j~p2o6I@W z;9k7-eN>=3nkv4hN1;%^y6AMPDowzFtys5gl5pZ=7sVe~)zD?)e`+=J)$H8}$M016 z7gFC~i{SrhWm*uD`+dorQ`>D3L{IouqsaM3H;JEQ8Z~-M^zs)W-eKZR*1`3wl?YR^ zpNFQ&N9uH?@!7;(w15%xBaPqgpw1c9l`5}k>@0vBF45yX{Zlz)3A&;`QexCtQyS^wfYu9D1b|-?BbttpJ(6jVjteFVrb5($VaSrh1ypA=^`+X#tC0 zct9rXQa6~;k-=yTb$D+-TcsC*OJS9c6GPDr|m%d&n1jk#}*H3v};#rWW!>n8BH@eeOlPqS%3QqQ~V(uH-_5PO) zEpqK)N1i7;X5o>M@v@P`idtH6Aa^MKo-93FxI91pUA_*&tcLM`vLJDg!>Bu%sPf)lU8U~D9_*sn^q4Hs zJ3}6ABKlhV&S9<#Dz2Qd&$HFpTCe?Ujm0;S&GPE6&yO~fPfkQ#w&sNET~>i}wpeEXrSX5VejJ zh|wJtxLL5s4y5r9(2q&G6Lv42J6~ORQ&lQ^|8nl2sEv}T6^h_rt0v{QP53+9m=lQ& zRcVDgiuQ@;m`EGe}QqJRBmrKE1*+}$rJ2xADhN=a{`>KD~a&JsslD}5O^i#m~ z)#Yb{TF2SM@ZH22DGHgyclSx$URwO2i+5CP_^!$?DmtZbDAEzvZx8$)sAq~fq*U<*1a8)IeDV_4bnp`*8?=)8o zmDc&Cjs*2==@4H(ziM)u49GB12qE4qK}UD@?~}f9B87_NkzD!w^(7f|>$VgzPGbHA#XT?$oIx59bw@x@G z)S1|ZJ{ZC-I$k^KTBfvXqHidkpNk;VonX~9E7h+aj$m#W89BThQ~ zOmTTbqx9Pz9U-%t%9w1FWACp_aBF?pIokPZRN@be(k<0V$HIzu{du#zSIIKo2RggF zb(h<14DJ4E_MH!H(dF6Es(ll;GUazOjropFCV#?V*-RgHrdZIsHDWwG6PB07I^6K| z_La@rh0!NG>W%(N{#_0N-N9|pQ9uMhb)IVMfIZqW0_TG+sVmR?r0!c_H?KN zWa>fXvmcpU9cU<0Zeo|&Dw_t3^|p7I?lehBZ7K4wsM43kNnJ?zF&z`8H7aVi`~=2r z(e=8qo8gJJAU925&k`}YzWDDz9u6GkJG5Arm)rTIKYnqp>d;NS?Ui;rcquNdT>{a( zxbPhix74k5>?9+p!x!NYV<|A)8>V^Il$!&$O&@vw{D_1Cs%$|`d9htyGwY$Ca1XUf z_s~iE?O3gYsB^dyBR<%O*a1e#KGPb#vrjgor?%7sX?)Pt_}V!bLcE^GBOsuI@!*2S z!!JJ4C!y&sF;hkCrJl1}2mfUcqkPlmtb^S3gYtg1$!}hb(fud~nrJ6R{Q7hNhgwAm z7L<%kUu5M)w-TNoy+6?-#KG6?5afS?g!BorvCYmYc?6TvCFymNlR8a(c-gd>r=UJg z>tY3oB>G(?Coiw40?SPcT#@0D8YptnSPW$}7%nzvOh7{mBzW|w#IsycK|$}e7$b5D z=G9GFe#B=^^$mi6(IdIjOijI;K7Fdt>kx5AylUEHacJUo1gw=8*CSisNJ7ZT>4egh zCLknq(+q&KTAL^kf6XH^PfPLAwMc8o3G}kakTMi9O$C`$h#q<2U7Ks(IS1y5E-E|{ ztAp3CWTwVQ-opW*mU08d>Aqhf-n&bgXX$@%naSreiLuA5-A0`|8sEd4`@9ez=_ik) zAPWO@llBNWU1N;{i3(eISXfw(O;Z!?4P)nX7c%_UqjS!KSZtKN>C}gL6;o{MyN%K5 zgBY(UJaL5`P{CCHK()%OJ9d3i29+7EC{31DDqQciR8zf2wq4J9L$EyxPMhyA_u!_N z1+c9KsiVaCc>xgW?g(xVxSBRY;w;s`qb;S{|d%Llmtj2yb-#}tv=tS zoOCeR@qYg2QD6iE$GxpN#o;NvYG+YXEyd-W4=RSO)TPIX!M%x3Y_v}8XbYRXxEal| zFG8WB$*hEV;qpFV$59kh@lSMUX=%H5{XtY21&)$pS>!fc8Nxp+C;#AE)u9Mj3TK8{ zT!Nu5$jx2ua=N#|j;N#BaS7?Ms%MNTljd1hk;aNa@%9Kud%ZHY@;~8Hyp|1)!}{z; z>k&o^;T}lIjS~G!+cEA9TqGl%Z+g%fH?na}%Fambvee%^Ps)Kb*G zyZj2rN{4#tmj<%eCVg&hj)99y!*;Tya6bREP$iWIWC>#|TwMNI4cmGfJ4eUCtlof4 z&qc5>BqE!kAIo~kV(6pMqZAqO8H)|;E7%R|G-@0WOn@ttT`LN-3**?0n;>-b^vgfn z?f{?^bdBkWSC?S5n}Uz{U7vIh@%Wx_xyC5WH@I7Y)zszGCGX;5AIp2Qda7Ssdl(sT z?RSb;xMIrk-3xcy82>T1@nOPqamseSq55J~u$9|H)4y1!G_C1;tFglG+#||np~Y`N zTrYqm%q8NcPanmhHHJ-Inj)TC?D5R%N%-_~3gCO(k9JD*DwhE;YBit5^Y~xfJ>B_^ zx4fR8HG2Hi`K$8j_c0B-BR!VD;an@OWI$~mCmMgtw%R7tDyRb?daLD-}UsO`r zLFOMnz9cUw7)Ej1PjlHIo9ZtP#?)7n9;Nz`q_^c&{H$wi?7KMKU+D-Z94)ty&!tj} z)iv>ZNiJYta9(-F@o?o481z~YFOu*@z~zkG+?s?vPjumcqF)|pR@=Tj?K6=W_G|Rm z9EJA*Gz*J~iODQj9n2_>JOZ?%0p7}+f1NU2>2pY)%4-d8+5Q%I$7Qh{z3^pm&8aR` z61$!~Wo@r7qfgFv*d!o!#d;U3!&3?;m4p}hYKoPw2KsYZ$}A6!6b3fhw`Qx0by_qg zD8;~hMDdiHD1nq) zV!-v~u@4R#ouZ;*mvv%15I7swIpd%i#$ka z20&*2(*)g$GY-qUMk{`22eCUlZ%X}fDTOqEYGbhIj!yKyJX?PlrWnuk1F$&Xi0{?u zuK~{p=MfFH7G5ZpR?u-SA)3l$cxuh%a-+EHpnfHi zvjtGiO4-3eFzm5jN6ZK09i=py%5Tu9>X8&-|~urX2m5z4~J=Qsyx zY{MS|{=vp{9-IF3erFfS_1$RUJs>ZB zwwrR)Cwfjo(V$*vYIR`LbANKW5tu9J0Ebf9IU)uz#keO}hWErQf-O?-EQFMb7Fg*F|G zDvJ<5p`&Y`dydYSyM23xFyt$YLQswK>ehE1E=K{uM6)@Ohp4>LAqBidTb1G8!`bgH zF1G`woa_DxjU_4O)F-JssY1>@PbQ#2p@qFMnxcJwoyrW@Iv8wZxrS)U!1y%Fxhp4#irfM@ey|4ctj-_ z>Q{HoM-3+Um}AAlB|J2`OuGFf;JQ|&y?yn^lu3ZY)kGDSBS980R`gx5iQbpAU=NjeeH1SFoyY`X9R$QHs6*lEB5i96lc{m5k&#Ah=K@i|jOl3uxj7V%1Ipu@5~C*m&dwsL-ow{0E1tT`a0xEDHZRGjBUR#@xGW$~?@;Ecxs&|EENs7g7*_(!9h@L z_UQQq8IJq&ukfhnl6w^7J*z8?etORzs?K0z6*5p$cUIf+iFb&yuD8g@2${dPGPM{`7r=#cYZPk>vD+c|n8^AF@bEwTbA_(b8H`DJaYBcG&!~!VHq+o+FEW-y-|Y&)YhOELRM?^dDMJ{DAr6D;xCG^q(ivk$(2t{i9LKT9K>y6 zn;+92?6Q6??{HBKV^ot_r$rhYBfE0nBh?5=&|tOVw5xTuWW)#ww{69EBZU!lmn&6K z2(%mi3yF`;x5hH6OP|0#Z^y#${0O{Q$0TM7`6lrwFDTEA7keshM8b2PQW=FXQbTx| zb?1#%dF^5nP`5nuzdEH^CB7lg-a=n>wgsqDHWHJV@eC7>x~Jatm(}4$waaS1-hNmK zzy0*HvaSbIXCrfQ%^=Yz0p)!l+}mF_pW@zE9!1fbNc5!c0u3mMSl;^#g@z4osbE=D z=!R7}&TIJ`oRs#b@^Z?Duk>-^5vUI>?IpKfG*tijV44XQ8{lbJJO1Th>w3()37L)( zLnI*2CeX`AZ;X4xh=id>=?NT0`k8(;slL~jj^Y@~SujdrLkyg?Cl0e!qlJgDvB_5B z1&gCi-n@m7@*KCdVdHI4N=ixwdO4iLz&qz;StH{ob0!QTXAS;pavwU(B?iQ!j^F)3)S7^$kQLGv@Mn6&WnJri?3?J= zQUlM|JQ1mH2HP)ffS*bSaz=8dcmT6egInCcuGjkbI{M}H>dFE$cpeq;(y`j+s!aWc zl`5GRUw~_-)>yBeDOUKy0GK-c&8)WLURrG01&>4Vu3s|*5-qm}V>hUguw@KNPdpO* zxzG%aVPIsmp`)M)kRQwtW!8lo0KxJU`T{C5xrP{%Goq*-2VMvW8*|) zK7?cK0GPwMSSH6?MxS-dGWSN6#jD$GRNK8Ncl1&;+>W=zT_e|c@BpHm?)}r+C(zpA zhWOK8Lngz&)^z-LJE=vSf8hn3#P?@XeL?WL?0-SQ@v({7c>OB{QJ@S zk+)UZxX;gnNkrC`Q(qQOt_k4b;blB}hso6O=`5Lii~Vi5I3#K9V4c?m)uoyt9_>E#vurozg3to1dRNk@+irEwsqgB(AQm z$lza|1>+ICpPq(@kKDa`S4l(TD@R+>hYzo*V}o{UTE}-o=DM0>u+({xTdVlm)8f7< zmR%RdHM=!;{?NvqfIdBJVcN9$t50F*pp6d-Bn`!UgYZKtbEcqmtAN(ut z+Pn}ML{0^e^0>N2YiifxDAblC>6rS_BO)Rzv7AbKupsp5f}#by{GX!5O^pJ({5cN( zP=D8e@RFZF7BBMXRVT&6u@VdFd?F>LgrkrX+UWmiz>2xJZe4T?jEz=Hldx?1%+xZy z5ICP{)8W|^OCmpc>g~bIR z&p{cXnSh+!){$1J+-{1)X0ERMG$PCp7bHg|9YF7Tb#Jom5jColr3TE+&|`t)pTtEI z%k!QKiJOSp-z@-f)1W|CR0eq;7A3K9v6;no5)@Ha1oZ$e{gs8-9mb zZJjdXQs%;4RJYx28~3Qzi@m-Iv+o#%U{-tc5k2Y`YW6uSI%NxXFaPR$>T=0Z0x6e9 zApud%JC>UR@uOR6oZBw$wPPB!S@g1)FOW>ct-!nLwN=Rt?r#HGngN8NTnxbHbnizi zMAj%=uqwn4Nt~+y@XjV008M;^h5_u1#qxAc5pgdvZ1p!Xp*Ld(#y_QmFJx(H$#Nt| zHZCE7K}t$$w87o((i51cKK4E`zp^wR<%!x!)z1dlb0-v}UIHv)w>dJL*n#=v7|2I_fg+i0}Rk4@Ck*(jR{csy3rKp zWG~vjm)=s(5Md-_Qu)BydZA?;aOobk8%r-=zYo%a?kirw2+O zkS;H@1_Z26mVWfGF!#0cctao^{O&%@jSW2)j7?&>Ia}@W^BYRFxXr8pd};OhS*x5)#JUCSTys;x1v-;v%Xf%mkv?T?6J7IuJ;TPTmJGQ`pm) zUIv*6@e&;O1`ldKsh9_)zP9$1upmqRA0Nt}1!v|2?g8u(7UZC$Oy) z50#fFyH#0ex>nG1Jm8iQ!=Hi)Eg32OpA5cbM+sHW$;s(2wUiH|SxR|HQF|x)rY3%a z%Fs@L%HiS8+B{sp#}*bAn#jMjKd7{|u(057yLazi!lzHBMwViKIT;(2ybDpd^-h-)|4YW;_XQ1N_Xx222VpU-1D_@B?_p)fsIx{f#^HAG { PropertyHandle = StructPropertyHandle; - SAssignNew(YearEntryBox, SNumericEntryBox) + SAssignNew(YearEntryBox, SNumericEntryBox) .AllowSpin(true) .MinValue(1) .MaxValue(9999) .MinSliderValue(1) .MaxSliderValue(9999) + .MinFractionalDigits(0) + .MaxFractionalDigits(0) .Font(IDetailLayoutBuilder::GetDetailFont()) .Value(this, &FMyDateTimeDetailCustomization::OnGetValue, 3) .OnValueChanged(this, &FMyDateTimeDetailCustomization::OnValueChanged, 3) .OnValueCommitted(this, &FMyDateTimeDetailCustomization::OnValueCommitted, 3) .OnBeginSliderMovement(this, &FMyDateTimeDetailCustomization::OnBeginSliderMovement) .OnEndSliderMovement(this, &FMyDateTimeDetailCustomization::OnEndSliderMovement) - .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Years))) + .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Years))) .LinearDeltaSensitivity(1); - SAssignNew(MonthEntryBox, SNumericEntryBox) + SAssignNew(MonthEntryBox, SNumericEntryBox) .AllowSpin(true) .MinValue(1) .MaxValue(12) .MinSliderValue(1) .MaxSliderValue(12) + .MinFractionalDigits(0) + .MaxFractionalDigits(0) .Font(IDetailLayoutBuilder::GetDetailFont()) .Value(this, &FMyDateTimeDetailCustomization::OnGetValue, 4) .OnValueChanged(this, &FMyDateTimeDetailCustomization::OnValueChanged, 4) .OnValueCommitted(this, &FMyDateTimeDetailCustomization::OnValueCommitted, 4) .OnBeginSliderMovement(this, &FMyDateTimeDetailCustomization::OnBeginSliderMovement) .OnEndSliderMovement(this, &FMyDateTimeDetailCustomization::OnEndSliderMovement) - .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Months))) + .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Months))) .LinearDeltaSensitivity(1); - SAssignNew(DayEntryBox, SNumericEntryBox) + SAssignNew(DayEntryBox, SNumericEntryBox) .AllowSpin(true) .MinValue(1) .MaxValue(31) .MinSliderValue(1) .MaxSliderValue(31) + .MinFractionalDigits(0) + .MaxFractionalDigits(0) .Font(IDetailLayoutBuilder::GetDetailFont()) .Value(this, &FMyDateTimeDetailCustomization::OnGetValue, 5) .OnValueChanged(this, &FMyDateTimeDetailCustomization::OnValueChanged, 5) .OnValueCommitted(this, &FMyDateTimeDetailCustomization::OnValueCommitted, 5) .OnBeginSliderMovement(this, &FMyDateTimeDetailCustomization::OnBeginSliderMovement) .OnEndSliderMovement(this, &FMyDateTimeDetailCustomization::OnEndSliderMovement) - .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Days))) + .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Days))) .LinearDeltaSensitivity(1); - SAssignNew(HourEntryBox, SNumericEntryBox) + SAssignNew(HourEntryBox, SNumericEntryBox) .AllowSpin(true) .MinValue(0) .MaxValue(23) .MinSliderValue(0) .MaxSliderValue(23) + .MinFractionalDigits(0) + .MaxFractionalDigits(0) .Font(IDetailLayoutBuilder::GetDetailFont()) .Value(this, &FMyDateTimeDetailCustomization::OnGetValue, 0) .OnValueChanged(this, &FMyDateTimeDetailCustomization::OnValueChanged, 0) .OnValueCommitted(this, &FMyDateTimeDetailCustomization::OnValueCommitted, 0) .OnBeginSliderMovement(this, &FMyDateTimeDetailCustomization::OnBeginSliderMovement) .OnEndSliderMovement(this, &FMyDateTimeDetailCustomization::OnEndSliderMovement) - .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Hours))) + .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Hours))) .LinearDeltaSensitivity(1); - SAssignNew(MinuteEntryBox, SNumericEntryBox) + SAssignNew(MinuteEntryBox, SNumericEntryBox) .AllowSpin(true) .MinValue(0) .MaxValue(59) .MinSliderValue(0) .MaxSliderValue(59) + .MinFractionalDigits(0) + .MaxFractionalDigits(0) .Font(IDetailLayoutBuilder::GetDetailFont()) .Value(this, &FMyDateTimeDetailCustomization::OnGetValue, 1) .OnValueChanged(this, &FMyDateTimeDetailCustomization::OnValueChanged, 1) .OnValueCommitted(this, &FMyDateTimeDetailCustomization::OnValueCommitted, 1) .OnBeginSliderMovement(this, &FMyDateTimeDetailCustomization::OnBeginSliderMovement) .OnEndSliderMovement(this, &FMyDateTimeDetailCustomization::OnEndSliderMovement) - .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Minutes))) + .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Minutes))) .LinearDeltaSensitivity(1); - SAssignNew(SecondEntryBox, SNumericEntryBox) + SAssignNew(SecondEntryBox, SNumericEntryBox) .AllowSpin(true) .MinValue(0) .MaxValue(59) .MinSliderValue(0) .MaxSliderValue(59) + .MinFractionalDigits(0) + .MaxFractionalDigits(0) .Font(IDetailLayoutBuilder::GetDetailFont()) .Value(this, &FMyDateTimeDetailCustomization::OnGetValue, 2) .OnValueChanged(this, &FMyDateTimeDetailCustomization::OnValueChanged, 2) .OnValueCommitted(this, &FMyDateTimeDetailCustomization::OnValueCommitted, 2) .OnBeginSliderMovement(this, &FMyDateTimeDetailCustomization::OnBeginSliderMovement) .OnEndSliderMovement(this, &FMyDateTimeDetailCustomization::OnEndSliderMovement) - .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Seconds))) + .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Seconds))) .LinearDeltaSensitivity(1); HeaderRow @@ -193,41 +205,41 @@ void FMyDateTimeDetailCustomization::CustomizeHeader(TSharedRef /* FMyDateTimeDetailCustomization callbacks *****************************************************************************/ -TOptional FMyDateTimeDetailCustomization::OnGetValue(int32 Index) const +TOptional FMyDateTimeDetailCustomization::OnGetValue(int32 Index) const { TArray RawData; PropertyHandle->AccessRawData(RawData); if (RawData.Num() != 1) - return TOptional(); + return TOptional(); if (RawData[0] == nullptr) - return TOptional(); + return TOptional(); auto* DateTime = ((FDateTime*)RawData[0]); switch (Index) { case 0: - return TOptional(DateTime->GetHour()); + return TOptional(DateTime->GetHour()); case 1: - return TOptional(DateTime->GetMinute()); + return TOptional(DateTime->GetMinute()); case 2: - return TOptional(DateTime->GetSecond()); + return TOptional(DateTime->GetSecond()); case 3: - return TOptional(DateTime->GetYear()); + return TOptional(DateTime->GetYear()); case 4: - return TOptional(DateTime->GetMonth()); + return TOptional(DateTime->GetMonth()); case 5: - return TOptional(DateTime->GetDay()); + return TOptional(DateTime->GetDay()); default: - return TOptional(); + return TOptional(); } } @@ -242,15 +254,17 @@ void FMyDateTimeDetailCustomization::OnBeginSliderMovement() ); } -void FMyDateTimeDetailCustomization::OnEndSliderMovement(int32 NewValue) +void FMyDateTimeDetailCustomization::OnEndSliderMovement(double NewValue) { bIsUsingSlider = false; GEditor->EndTransaction(); } -void FMyDateTimeDetailCustomization::OnValueCommitted(int32 NewValue, ETextCommit::Type CommitType, int32 Index) +void FMyDateTimeDetailCustomization::OnValueCommitted(double NewValue, ETextCommit::Type CommitType, int32 Index) { + NewValue = FMath::CeilToDouble(NewValue); + TArray RawData; PropertyHandle->AccessRawData(RawData); @@ -311,11 +325,13 @@ void FMyDateTimeDetailCustomization::OnValueCommitted(int32 NewValue, ETextCommi PropertyHandle->NotifyFinishedChangingProperties(); } -void FMyDateTimeDetailCustomization::OnValueChanged(int32 NewValue, int32 Index) +void FMyDateTimeDetailCustomization::OnValueChanged(double NewValue, int32 Index) { if (!bIsUsingSlider) return; + NewValue = FMath::CeilToDouble(NewValue); + TArray RawData; PropertyHandle->AccessRawData(RawData); @@ -374,9 +390,6 @@ void FMyDateTimeDetailCustomization::OnValueChanged(int32 NewValue, int32 Index) PropertyHandle->NotifyPostChange(EPropertyChangeType::ValueSet); PropertyHandle->NotifyFinishedChangingProperties(); - - //EPropertyValueSetFlags::Type Flags = EPropertyValueSetFlags::InteractiveChange; - //PropertyHandle->SetValue(NewValue, Flags); } #undef LOCTEXT_NAMESPACE diff --git a/Source/CommonTime/Private/DetailCustomizations/MyTimespanDetailCustomization.cpp b/Source/CommonTime/Private/DetailCustomizations/MyTimespanDetailCustomization.cpp index 85d7e9f..b4e9f15 100644 --- a/Source/CommonTime/Private/DetailCustomizations/MyTimespanDetailCustomization.cpp +++ b/Source/CommonTime/Private/DetailCustomizations/MyTimespanDetailCustomization.cpp @@ -44,49 +44,55 @@ void FMyTimespanDetailCustomization::CustomizeHeader( { PropertyHandle = StructPropertyHandle; - SAssignNew(HourEntryBox, SNumericEntryBox) + SAssignNew(HourEntryBox, SNumericEntryBox) .AllowSpin(true) .MinValue(0) .MaxValue(23) .MinSliderValue(0) .MaxSliderValue(23) + .MinFractionalDigits(0) + .MaxFractionalDigits(0) .Font(IDetailLayoutBuilder::GetDetailFont()) .Value(this, &FMyTimespanDetailCustomization::OnGetValue, 0) .OnValueChanged(this, &FMyTimespanDetailCustomization::OnValueChanged, 0) .OnValueCommitted(this, &FMyTimespanDetailCustomization::OnValueCommitted, 0) .OnBeginSliderMovement(this, &FMyTimespanDetailCustomization::OnBeginSliderMovement) .OnEndSliderMovement(this, &FMyTimespanDetailCustomization::OnEndSliderMovement) - .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Hours))) + .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Hours))) .LinearDeltaSensitivity(1); - SAssignNew(MinuteEntryBox, SNumericEntryBox) + SAssignNew(MinuteEntryBox, SNumericEntryBox) .AllowSpin(true) .MinValue(0) .MaxValue(59) .MinSliderValue(0) .MaxSliderValue(59) + .MinFractionalDigits(0) + .MaxFractionalDigits(0) .Font(IDetailLayoutBuilder::GetDetailFont()) .Value(this, &FMyTimespanDetailCustomization::OnGetValue, 1) .OnValueChanged(this, &FMyTimespanDetailCustomization::OnValueChanged, 1) .OnValueCommitted(this, &FMyTimespanDetailCustomization::OnValueCommitted, 1) .OnBeginSliderMovement(this, &FMyTimespanDetailCustomization::OnBeginSliderMovement) .OnEndSliderMovement(this, &FMyTimespanDetailCustomization::OnEndSliderMovement) - .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Minutes))) + .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Minutes))) .LinearDeltaSensitivity(1); - SAssignNew(SecondEntryBox, SNumericEntryBox) + SAssignNew(SecondEntryBox, SNumericEntryBox) .AllowSpin(true) .MinValue(0) .MaxValue(59) .MinSliderValue(0) .MaxSliderValue(59) + .MinFractionalDigits(0) + .MaxFractionalDigits(0) .Font(IDetailLayoutBuilder::GetDetailFont()) .Value(this, &FMyTimespanDetailCustomization::OnGetValue, 2) .OnValueChanged(this, &FMyTimespanDetailCustomization::OnValueChanged, 2) .OnValueCommitted(this, &FMyTimespanDetailCustomization::OnValueCommitted, 2) .OnBeginSliderMovement(this, &FMyTimespanDetailCustomization::OnBeginSliderMovement) .OnEndSliderMovement(this, &FMyTimespanDetailCustomization::OnEndSliderMovement) - .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Seconds))) + .TypeInterface(MakeShareable(new TNumericUnitTypeInterface(EUnit::Seconds))) .LinearDeltaSensitivity(1); HeaderRow @@ -121,32 +127,32 @@ void FMyTimespanDetailCustomization::CustomizeHeader( /* FMyTimespanDetailCustomization callbacks *****************************************************************************/ -TOptional FMyTimespanDetailCustomization::OnGetValue(int32 Index) const +TOptional FMyTimespanDetailCustomization::OnGetValue(int32 Index) const { TArray RawData; PropertyHandle->AccessRawData(RawData); if (RawData.Num() != 1) - return TOptional(); + return TOptional(); if (RawData[0] == nullptr) - return TOptional(); + return TOptional(); auto* Timespan = ((FTimespan*)RawData[0]); switch (Index) { case 0: - return TOptional(Timespan->GetHours()); + return TOptional(Timespan->GetHours()); case 1: - return TOptional(Timespan->GetMinutes()); + return TOptional(Timespan->GetMinutes()); case 2: - return TOptional(Timespan->GetSeconds()); + return TOptional(Timespan->GetSeconds()); default: - return TOptional(); + return TOptional(); } } @@ -157,15 +163,17 @@ void FMyTimespanDetailCustomization::OnBeginSliderMovement() GEditor->BeginTransaction(FText::Format(NSLOCTEXT("MyTimespanDetailCustomization", "SetTimespanProperty", "Edit {0}"), PropertyHandle->GetPropertyDisplayName())); } -void FMyTimespanDetailCustomization::OnEndSliderMovement(int32 NewValue) +void FMyTimespanDetailCustomization::OnEndSliderMovement(double NewValue) { bIsUsingSlider = false; GEditor->EndTransaction(); } -void FMyTimespanDetailCustomization::OnValueCommitted(int32 NewValue, ETextCommit::Type CommitType, int32 Index) +void FMyTimespanDetailCustomization::OnValueCommitted(double NewValue, ETextCommit::Type CommitType, int32 Index) { + NewValue = FMath::CeilToDouble(NewValue); + TArray RawData; PropertyHandle->AccessRawData(RawData); @@ -202,13 +210,12 @@ void FMyTimespanDetailCustomization::OnValueCommitted(int32 NewValue, ETextCommi PropertyHandle->NotifyFinishedChangingProperties(); } -void FMyTimespanDetailCustomization::OnValueChanged(int32 NewValue, int32 Index) +void FMyTimespanDetailCustomization::OnValueChanged(double NewValue, int32 Index) { if (!bIsUsingSlider) return; - //EPropertyValueSetFlags::Type Flags = EPropertyValueSetFlags::InteractiveChange; - //PropertyHandle->SetValue(NewValue, Flags); + NewValue = FMath::CeilToDouble(NewValue); TArray RawData; diff --git a/Source/CommonTime/Public/DetailCustomizations/MyDateTimeDetailCustomization.h b/Source/CommonTime/Public/DetailCustomizations/MyDateTimeDetailCustomization.h index a467aa2..26ea689 100644 --- a/Source/CommonTime/Public/DetailCustomizations/MyDateTimeDetailCustomization.h +++ b/Source/CommonTime/Public/DetailCustomizations/MyDateTimeDetailCustomization.h @@ -36,11 +36,11 @@ public: void CustomizeHeader(TSharedRef StructPropertyHandle, class FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; private: - TOptional OnGetValue(int32 Index) const; - void OnValueCommitted(int32 NewValue, ETextCommit::Type CommitType, int32 Index); - void OnValueChanged(int32 NewValue, int32 Index); + TOptional OnGetValue(int32 Index) const; + void OnValueCommitted(double NewValue, ETextCommit::Type CommitType, int32 Index); + void OnValueChanged(double NewValue, int32 Index); void OnBeginSliderMovement(); - void OnEndSliderMovement(int32 NewValue); + void OnEndSliderMovement(double NewValue); private: /** Holds a handle to the property being edited. */ diff --git a/Source/CommonTime/Public/DetailCustomizations/MyTimespanDetailCustomization.h b/Source/CommonTime/Public/DetailCustomizations/MyTimespanDetailCustomization.h index 0e0c76e..4cc1c4c 100644 --- a/Source/CommonTime/Public/DetailCustomizations/MyTimespanDetailCustomization.h +++ b/Source/CommonTime/Public/DetailCustomizations/MyTimespanDetailCustomization.h @@ -35,11 +35,11 @@ public: void CustomizeHeader(TSharedRef StructPropertyHandle, class FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; private: - TOptional OnGetValue(int32 Index) const; - void OnValueCommitted(int32 NewValue, ETextCommit::Type CommitType, int32 Index); - void OnValueChanged(int32 NewValue, int32 Index); + TOptional OnGetValue(int32 Index) const; + void OnValueCommitted(double NewValue, ETextCommit::Type CommitType, int32 Index); + void OnValueChanged(double NewValue, int32 Index); void OnBeginSliderMovement(); - void OnEndSliderMovement(int32 NewValue); + void OnEndSliderMovement(double NewValue); private: /** Holds a handle to the property being edited. */