From 0c3580828811496052f41b09ad68fcc00a525f6f Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sun, 3 Mar 2024 16:12:55 +0600 Subject: [PATCH] tdf#153706: do not add categories, when source data doesn't have them lcl_AllOperator is used in XChartDocument::attachData implementation. When a data without existing categories is passed there, like an XY scatter, lcl_AllOperator used to force creation of the categories in the target, by returning 'true' unconditionally from setsCategories. This meant, that a new sequence of numbers starting from 1 was used as X values, and the old X data was interpreted as an extra Y series. This changes lcl_AllOperator::setsCategories to try to check if its data actually contains categories. Thus, XChartDocument::attachData will use categories either when the chart already uses categories, and ChartDataWrapper::applyData detects that using a call to DataSourceHelper::detectRangeSegmentation; or when the new data has it; but not when neither had it. When it's not possible to detect if there were categories in the new data (e.g., with user data), old behavior is used, setting categories. It could be an alternative to detect the chart type using xOldDoc->getDiagram()->getDiagramType() == "com.sun.star.chart.XYDiagram" in XChartDocument::attachData; and then decide to force the creation or not. But it seems hackish, and not really universal: other chart types must be tested (bubble?), no idea how to handle hypothetical cases when applied data contains categories in case of XY chart, etc. Change-Id: I86b34f6799c30b103f7fc6b2faf6ec255a9d137b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164298 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- .../data/ods/tdf153706_XY_scatter_chart.ods | Bin 0 -> 16152 bytes chart2/qa/extras/uichart.cxx | 54 ++++++++++++++++++ .../chartapiwrapper/ChartDataWrapper.cxx | 10 ++++ .../chartapiwrapper/ChartDataWrapper.hxx | 11 +++- 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 chart2/qa/extras/data/ods/tdf153706_XY_scatter_chart.ods diff --git a/chart2/qa/extras/data/ods/tdf153706_XY_scatter_chart.ods b/chart2/qa/extras/data/ods/tdf153706_XY_scatter_chart.ods new file mode 100644 index 0000000000000000000000000000000000000000..2c6153ed6ab2e3552717199b320766d8b55a0f03 GIT binary patch literal 16152 zcmeIZWmw!v^DaDi@C0|a;K3odyAST}?(V?}9vp&uaQEO6B)D4$4hgPj$UfQZKL6~V z_dTD^hf^?f&Gd9tb>F{gttxpb2uL&l;28j5sB5SeY{eN)4*&q3UZ5g?wYjyile?X< zzMY+wxuL$3xvdR@i;WSzt-hnVBfYJiv5k?fp|iEIjT612orAHyk)xThv6K7{na`d* z`ymq~=1;-}eUdYClgoFRb=jCD05}#`{ ztfqs=lAo!(kZZFrOV#pt1A9dxj0W2q%131eUtS+}0Ru-zcLvmjZKolZH#?Qly+*#O z9&g{r_0FmE%AMUwnIAkDB_FQXI<3yY9^h@MskzPAVb*19c->MM9pxkMBi9KiBFV<> z7E$v(xz_h-*|_VyBxF7RokJ?x~ypgqM5y|Q!YwW@k1mvI@P-D0#CL z5fPzGxrSt86;N!@?p3Y)V0U-l?NrS8%DdLiz({&G{-R9li`_gze*-wTKyU>GDxXM- z)U8aO$1?p}wyOHjlJXMzu{Zi!osbo+ij+(zHc`>^GQ%?qPzvi!*}2d_{ewmuRESG0 zmLvQ5;TKH@M8K56O`@Lu(wLgsGVx}6@7Z#uoPiJ;+Bh36m}X@Pw0XN=k;$n2tSD;K zaI3~{lHI<#@rpmIw3Yu^d`^}7XYp+C&{nhFM|2Dc2Ku2jlca0cWV#J|&Vc=RwnSJF zHm&;5{_STK9j}2;^5;nil1UrCrob5s#v=Zw-h<{3xmGV?hF@q|d;jH&)1_3(*Zy7F z#y@_$sYpgori;_jV#m?#`Iz#gB`Cr>a{}YE5wE+Km(DW6O$%w=Agi}tgq!}2U6tI; zB1oN36b=5U;|tOM#MPCbRs3P2T4XQEG6w)R+dt7rVa!0eRjrxnzw#}6 z7%6mGwv&{%3I56Z&+(3O zI3^HIT1SPo`BK6-`QaxZoOCS42DWwl$o4AtzHh@EfZ)c52A#f(0*BYg|xDl5|;HYz3(<^I-dy(ejC6IBKU~&wc>3-5p=#KT9dms-{gOV$ z)pwV51wX*z7>OL_2#)L95oS+ci_nV|{BJAUr$_2bu56{Pi^$U}hjK_u=uTV9+?hpn zV(txm-7WVkEnX}4byDuGfReV?Z}A#wzSg=Ha^1CQXt&)~FRzx83m3L|R!*;$PEWVw zjy~wn5px|bn{N1eR$`nYaGaKH6hHu0JHQyd#6{GWcdI6=Ni01z4v1WAkT2pk;3E%V zWImsxxf2ZatL(T@5vnfnB~-SnJO=gYG$_1ig1*tXuhD9$PY}Ydn8wM8egu=3f_Wx$ z#DCQc2>`rS0091Z3ViYB6iD=n0W`bn)4N$)Ma7NU1TsDkI`)R!y1+^5AkzbDI#(`E zRym|&x)59nh>Ar0b_In(tsw%8x$wzNIptc;NL%2{+09eIKGlxlC~Cw|1Y)~;yKD6t zC9mc;(~^r(v+%JM9h3+Rrwf#Dd0-oFnW0UW#p46Zx}r5?og*xg#>r(UbN8cWusPKh z75xEl!bZPKvy3Uor0N2*#QW~F*1|h- zFt^izF6yG5%_R7_fduhX2#Y(#xHSIbgOADy1oOqGm3A0Z;q?7LIu*1yua$l*a=Ai& zbZV9ni+H}l?zQib{Lh>G_glJp((o+KmLGUl4%lOB^e)OL2nXmwNl?^8)4C&Oh<611 z{7(dJ+hponr42gfKB`q<%dIEt!|`o&mVb)#{Q-MDwP-8{7yw`a{%^3O{uOpdCwD7j z$0y)3fQ!+KM9;mCRfUgggj#L#p~>eP?)|1OAfELhQJc_qCO>$C^`n)BMO;i|I&v`g zq^zHD)fuoe=5r1>svIECM@zt=Cy#R8UY{mC4(KrG%F55CGiiYxYEsBljM{dcjm72n zIi94SOBxWRTGC1kv#_BF^=}Dwzryh>z9sZ?bYU*&dB)itITvU#KD>T{IJyeo9HN{r z5z!iwF1Yxjr_z9&3zps&YTh32(r}kNV)HcA%gO)7KuLs$1Ea)De%FJ%RaE2!>PQs} z^#zp1hY%SG;DEj%{&Y$dy^mP9bGGz=Wb7;8pnf@_ib!#_WMMLJWLhYGX(Y$p!TU^9 z*`bu1!vxnsrb7WadcNAWQkpzj4&k~VZRXo%!H!rjqSA|Wo9>q{SZYQ0C%GLi`d>R# zEpbw+A?=-Y)uFeRX*BXQiERlGGo)?m`j%2y#p8IGw-~XHYiG&eD=h_wp0KoX>01jk z*_bHcz3mCA>PS)HCiKMA&Iad=J@jr7q5L?{R#HMxvS^bya0IoV=(T2bhf|MlYLHSZ zzaXUV*E-FaJi|7=9@>`5Q{tA)&CcvGZDW>|r%MzuFu&%qU?KkK`kEl&@F-D4P9a4* z$<@@yW_&w{fKND??`ce81c|ULfsA7S`rnKLv;q3hwgfaL4Q*|lo;EZf>)6I#v{__3 z^VZcbn#&~{uHJ;l!#wokDfd)+tyftqE~WKSfpm9nW%l@Og4s|kKDkVYffS&BqiGd6 z@%+|sP!w5Me5mx6D6Fq5R2jR!cIY^8wc`$tKHxHqaK@`47h7FF^H55$m~k^Ppo28K zVrxk7IIyiq1y6!n6`eXvtJtd7Qn5~%hS1a4h?O#Z6((5moI0A-zc;jTU~|xoJL=Fe zqHR-%9G@KC6)%C#GVg1Wa}WV`c{^9tn;v4WJW-=+EqX%;YX$o+Cwpyr(D0_O^o8N$ z?NP|>BQ#NhL-q>oy%Y1es=91g26*d8#8?y5Hg9U*tFV(WMnDxe$&V3&mc<}?|ZCZ3^?MpL!&wa zi~#xz0uL8d9wA!CftGb+1TGmZ*26|BV_i=FPzkFpeB>4S8)K`tS|9m)9X%qJoZsWG zs;-fJ)rqR!QbQGBefCPIe$Vdf7h_a=$l!TNpKoMPCipc%?3&ar)II}RcWY~0i9{LaTbSip?IrT|@caHkU0zeDmlN12yio{y62T?k zrH7&V+KQo^%n_!bZ}_kH2iG%7pS@I?7CYT;Q0oy~-q@7w_oSXhRAjVR+NXmu|6tAz zs8z*Nd}EShF6B^Dk66BIdEsQFnS?a%eX`Hd$dAJ+M_w+S?vUNXQV4e=hVn7Zd8x;- zre2y5ejuF849TS^?;tOxmYhz4US8X;kChDaMK}uQq%mR{RjvtD7_;~s$_|CTpO~Bj zuE1UK_8?teOFTk{4K}Kbja_gAZHP>>W)sv$;^Ce!3m^WfxI2;&dbdtUI&Mu=*z2uxkZ&2J05zF$xh$Pns;U+Tq`-H<;G!YyE@Cbe zcce3UQ|a4`3A|KMz4j0t_vJIxf@+hmXiT-_WtPaBoB`T7ROT-0xB^c1s6|o&O#4~T zHY#Fs(GrbNwqDLVE_yHR!O!K9SP?aK8*>Fq;AcE)ka%9#7GCQZjm;)0g*|MMY^^E4 zb@xw<^nMY~$E-gcrEbWfv!G zu+Hx2V%&Vps$m~pyES`Uy271DTEBdGa-|w251jFrohrf8X}Sh5D^A`fnA|B7>-Z@z z9JiyHT0+nMl6>CSOX%XG6b=`o)1xSLzBxL57r!R&g=b0MaGgVv(N_w=8_%!i3~`F=?| zuS9)b8kjL{mLfg}H@2DEW3p21&Tl1WoK_A7l71C?h&*S&)#M{Z4s7pV1AxX zcE8rNoM$w;F1xQ%j6;tAxe8OfgRvi;^wke*-+6dr#I2tQ!ZS9BKv&f>t&X+Ri>*%$ zypI{uaIsZmU$1LG1nX#FocPk1yoJ%T2#P1>{pE-0{*^=Ak0%E&r=&M1Q&=Z+78n3_ z4#XJU&nP`a$_cCLKSZEj!U^vf)@*fJ`M)Hrjb!6fH{=EId7fxQ%9%!+*ljbOWjpJU z)X2zb^gvqX>^G8sRUr4-%5B%XXm$(@e501+Ra2Rb^!74DQpl;B12(?Udq?$1ezi@l z?yO9Mi>OS;(bHW`ms~l%0T$T7x5A74z|-Frt3Fi|w7V!S9x}6w8ujr4{&8Tm&_p-7 zW#4g0y?n87_>sl-;m2MFN^ea#3bd4!5d2)uexBSxE7+fe2l^yrYhz+=>g@32%R{~XXrS-F@WUuAIY-e!aG-!1vsGCp6KY=2k)x3bu9D+CCg<1+ID}nt2=<{LvgW?+X5)*;m5%O{_agAhNk;u)hZIOh9&IaNY1UQ9X!lOpzc*5^KwAH&dw>9h$yCje1ziccUeVy$>9*PVQThjG`<)b=kY&NpQaKobI>= z+F_*$RR5-7`=Q2x`>qN7B8oxyCS?_jZ|WRcUKlD`XCLqnvfo&XeGSCl2-MDhN8=-! zwyvN!V!UfaXv;|0>P03`IxbKDX2pZkj)ak+3a0G46it2tIuG(F0XV52j$&1K)$V;|^Q zS0YzYJD;(B|B5QvDc#95jDvdP#QcCNseaLblSP0RL#-s`V;X@P%GSy6LZq&;E*|!b zs0=w26=-MEVeU#bPqJX3Ap2F}ApsVzL;N)?$FLfi=%Yx7-sJ8(oYm+32-Ty9;RV>U z*0I_`p`^8i1?ttzxUbQhIl&5?tmc(IP9)_z?c~V^zk>(IPoe;0AL&-4Bun8Bv#JNk zRt7ZMy@UKxkj+#}T1-+fh<#1H^Ib8gj|$Qurk?TRr3DdS90kwn;mTMmYsQ~TKtfXw zj+e7zdrE_4g1Wl4^0m|}9J=*m!c>p#G1*f?%axbGoI<5T>CL3h`JB76$kbbORd^_R z=n^Pf6RfK=!~t8QkfxWD1Vh<0ZtN|M>A4Z7;x@1SIupJml=8zsYs{@w_10BMb&8| z4`US$?T2alO46gMROevI6zz2{_zn0D!FOSI*~&um=wcP?W6D-zx3lfp+!@U(dO-b| z!AtFNCU4GKtSN_QSCKAj3%vV|GqSgi(MRZLYSZ;0wt+z7$VuF8xm4>VFfE&gEf@;B z?vPPRC8d|*jg~4;abZ}%8BeCvpSj4!raC%M(kYPS-Ey6iA0%=FluDCE20gV(je(Y z)s7|4B!;j{Kbvo6dx<9Y-a6g#FhsuFU7RECMWU^?rjT}CHS5)CK?{d(|H8sR`gmb& z*PJ8npzRxz^3t#S9(!}nwZxAzbL4dN`~!Y5J}deJo*Z=Y8&Q_hq~GZ%!nk5>1n9{$ zNtniS&}v7ntrBR?S9$m^;q?&E)MHNU8fk)tfVla zGun0cZ=MN91PVDa@8<0QjX6SuKBKA?+FrFYAP@22@7SwG%7auRWv*b8UM zadB9rLbsg7^BZJ&SL&V1^>xQvu@Cb?RRr+&OkX=}e?#HwT=$E*3`kBbQFRCuIdp8& zZ}Q5-^%1Vjgq;N2aT0i5RMV-4c?VNW>22!Vlcx5SkHhrte4m#uC8HNM_6C7t44*T$ z?STJWh$!nrTibp1ly^rxi>iWmr!my7oi#0q#?Z%XOx)ks!r8bMEkdheel#6S; z4Wm=fxhyUgqT!}@jKmN%@5R#3`A$9K=W>hAr^c`~?>53626FkfbB`eAs|r0OTYYpq zc>|J;?9bYQB?e}0vo-p5xZ%VI>uIhlKF3Jw1Vy$^e8wH+<{?;#JoduMjb?yxRXQ%M z{kSB0Y!^9dT#I;t8h!7Kp;CpkHX47@DnO@jJ{qHi-@A`H3?9KiMY&FZo;S(kzfpuCGt0f z6{`#`(4G|}MiP$%M8AZyb72lir_#ncSIY9vAX}xh2MEpSD37#A8Tu}De{LlyZ_g5J zB4z7UAzCl0n2Z#O989J!xed|^Y_qwbP<3=fNAPQe3U4B=Kw8*e-!rox<<8i*)M;2G zF&x_0G(Q@!q)-{P$9;wMyk+-M;b2Iv@P4q>jYHdFWwZrcvF|&kO3}92-XLF-qa>cZ zvgVR_e4pT|4?&xZEB+_*22@EzVo`Nok%!Dw>;&d>?eOH%Y^b%`>wU{}P153P_C@`& zrrCyuhFKf$@yI+@%Fo~oxoSMwEH}pc+}$;XWeZVFIgd%hY`R-;tlgE~mKx?|`sEoV zC|O`LIAcDR%c4%vPzSl!Q0bX&GPtLcs~jss$@KY$pAd5h>}Gvu9#MtInMxlXl0%NE zacG1}cr8_e#OLZtboHqS`?C?Twx!1)-g{o71hTi;wPN2z&JrXP-JNn91{-NTIvXKI z$H>v89DIJ5wrE$o#*B~XT>^j?sTF5=O;`_VYp=S-p0YLCsPng}HR{k0gL@oYRz7dQ z-(9*`mC<@ce%kK2i@XqTfCT^+IsR?C_rt~c^9nwG*e0D3E#wk(1#be+=K2AvdYBqW z<6Ppz4t~q%+%reI7<6`MX%jEO96@4x_31JzEvMO+=X?d;j5J{>hmmLiVh|1UTcZ%) z1+tI-(Y{>b9#@y2LvIMG_|tmzIu{dv<;Oh<`MT-p8}4a@t)5y zUHZ>AqB6c*ufCwT@bJt1(%LZ{XUW%BVPc5;DAIX_?Y@7d3Lm4;X6-7erRwNWkW&?X zl7YP!DjX(f;Ci7iIu+1IMg^bj<3a7!qhK$}r{Bb;NrPGh+RU5( z>t-Gvw3+|QW$vh&RLmmV^Y%+sEb4Jwy5SWOm+5n8#PIiTv}*?n_&xI^Bu#|Ez$LC@ zbytbWClg3pENVnN=GC_PQ*1-N8xX7zP`_GymETl0E5W8q#;k%W;jUc~zsh?TbQISR zv&ud2el2KQIj-KIPC$4D`XQrhS7T@Sh|3(9Ayw8iW~ucm12=9sWcopwAlI?5R5#Wk z!z#-B8%rGw*GH`qCT)5QcJs@_iQx2--E1govbW_pR#&132?UUpe9(2b_de~qoQd=I z_uhLhJPC1rmKx-E;c*GDCW*T&X{N>fDkE#fceHE;d7}!_F1Zl>g@~`;6~Ccl<1NK; z+=jMM>cuIRK6%r9TbxRZ5%5w)bUIv?ul+p)=HbvF(n2C;MW$6%>H#$j!4ckWiaksi7mBI6eFF-38l~x>pIW>jFK_|q9t_bv?&EW54I;@8wXw5vk zEQScig$OS^Q86wO4z{wiLs72Gq$BdF0{j@u(F-$kH(GZ_EpNz{t$)ZSJv&sY~H=Qu9^77w4M^j<5bFUHGbL-P0Bi4^lXuNGZ8pzKP*&z*l-=Mp)Qnbk) zV$YIekVba*p>K;>tDTE1a4IMccaJ=D@-h2NyfSTk8J+TxuFWa!p35dGNTVCp!J(VA zr2|4LbR?iUv$^ziJWoV(I*bpS;XQQRyO%vFndnTbR3Uut5d*!T{Z;Cc=Xx&F7pm*i z8ElWmx39!Np&ClbjW3({NTF$7mD&u`+h8*^yp4;v9z8@!(4}0m2r)8r3x*1p!=0|) zZAB#5ImD!SNAOM%ksfbh;6Dk zX^*)izk4(ZwPQ)ocopMl6MXSOcx2YaOuleStaG*+y56REO%MUYN&pfO%Q}A}E6*D1 z8N7}lF=?3##MJYK8k_-Gpgq;3PAX*d1x$CdJ|sO-*}ezc)|*;#3m7jrTBn2!Jz^J% z^xit4d!KQ&uJ8Rwxd41)d9Kr-b!?1Iu%Sm4)fq0XL`-2c7(TR8oAC%YuamxMVXaEz zO*9KL+k%&HrV&PKf%qCC>Vjuu|6HD886+%RmmUCdgstS&=S+CX5AT~}?BqI;#YJtph6wxkeqYvpT8+}|AEtF8V z%Zc6r^ZrclLNLOR@8bc@A&+=H&NvQD zdN4_9rV4zaFBqA$=v0J$GZiYi$oy%}zm<{9V1nth=SM2>FrzQ4dZeC21IzuJU?ayq z?tJM+9qsj-KhA#g)?uDC4#QmxLID7b znE$rEKi!5o8ap|e+nE0F_8w|zyKb3DWW1X);dVA6K2x}=@}kXym>X8zOSi2Dd>gi3v?(~Y2GKcuMK2<+l(1-*TmS1Tfim+wl`52q}HNPvk zEoyo{Jygur2^Q;k3p{HZ19+D#B+v9?QG3^zqkOW0{Y|VI{>2LfS6!i&+qJ^_%$T&u^wEKD(P9$H|agR}D z82GSksg_2e=C?X_6Q&bEZH=*S34cL?a%)6mCQjeJp-iSE3R^XOPh}Q$N|nzs@k$pD z-M+v*T;C*Y!64x@kY2r|bk?GQl45kVNfs<*6-T@4PEWQyqolAJLDnG-9D|1cT!%?K zn9R-+Uj|!-)`7(;os=v~M*9O|;sw|jprOQ2p>Sje2E}I9sB}8NA2oj`G*(}&dN?{o z7a45s?u0YUhqEy0W@KNxQ+xW>MA`cja_Q(2U*eOVp{zYFT(?>{R7=DZ5>xxD?Z)Kx z!koub7N-_lheiRxkBhE-Z0Ilh9Rwc+FtFdRaS4f=^pd94+a0{n@N1z@c0#O7XsGIh z>MRVXV>~Ac3D5QN;PSGJ=Dg^X(V*3Eh!bCEbQ3KXRociU`}m3$x;y`Ee3_qHMnvpp zwh^#3Tea%byAIAP)TCkXzv;X_h1Ih(b8!5Q4Uab{9@t87)S?N^y}D2 z@w&A==UUcm)EUfeJG9god*CH0_)rOUraa#DWr{oc&7e41HI#4#u+g3*k4~LLB&q zu3A$w@kx`88sQJzM@qI;c|KCR`}NH;ui5<%r4i29wUa`?TXMZqA_@8A`b6~>_aq;+ zB|I(aAa3dlPewFpN-(ou2vUCwtSl*cHcF>{bCRn%>YuiKo)wFe9hUQ1fim70${F#@ zhzfeI=qsmEBW)YMdN#&@m^^ZRR08MTUiCdrvDK8^46a#SVj-3I@n?l${zL)%oXmi6 za1jATb7y`^2*g;7+HB=-Oo56(g~viQh5Jogo6O9+iS5VgR_ce`@5YblG$q?h&20dl z+^UHqlAyxPzQ+{`+gJ#^gh!t?-N(j#r^kbVc8!i>a7wFK53_V4Qhv+NNN@EA6q7Ic z5z*frOTyFvjf}*z>-}%An*}V8uV5tS#{edNE*^e1u@>3>TbQi2$Q;j(jD3Sl9GXj5 z&YNv|L(RgK<7G+8xuEDBF)FOVWk^P4POoA;(3M~w6z{9zr2D|CF{Av=srG7TDrLoN z_DUNn-sGh}4A<7A-r~c|C*nd@5ksuhow`ZHHcx7eeop7d_IQy$H5cS^W{g7>qV4UJ z9(?hYq&GDZ48o~9S2TR#Q_2dW1=m;0m?bCzb0lmUzx<|(o71z|d~p(0QSa%4+|Ag* zfKvo(RRyi`oaT!6X-8fruMwwNcu8vZO{Stf4P$U3!bXn{7RW3hW?#c|*#T#9RBg}~ z?Md<;+{&zs!{Incr@YhW;md6`ZWcGyge~Lkj~~1%&p`j0cJLj~Ju^k8u--r&a7ehh zI__CLZ=jM2KgsaDgsBPWAj7!sDm#fO+gDplOsp)FW@`BgTQpjtRFPqYLdQ^N=zd_g zXyRLzsA}!{2A*pddibmAOkQP1JjXFY|3vxsZ&}ePNiq1H-d8{3V7vzX;x0gr!)}_N z>*Y`PpFySv-8;}x>FM?4(Iy!oKdIkjrMMg%($H%9orRC=4mX?;*)YP=Lw)XV&3=IuUO-(H= zEp2XY9v&Wk|Ni~q;Q^%X@$nJ#{{QIzA@F}80@<+_*r4cnB?(~xWw(XH3{%@pQ8d7O z3poaQ()Q8gW3s-&>Ge1A8O@%dF|9Q$SfZ;h&~jUuS-aS8`-Q+%s=|Std#}}a(j%Lc zs~JkEjUy{WUCVX6j00q^oHsYWb^E)xfqNwo=AZ4?$G+-)Gv&w%`%%{w$paOEUK9WQ z3H3wwc0alE4Gz%}{W|S^_bi#EcD)9j40_5HP2tKx^|VdXvsBH~hW(N?dj9kk!VlCL z7VE4_RpHFC=@5V?^;h{SmG)>E`5k?Zczu{}$}e=vE#$70&-d!~zRDbF@DL^;$DZ8# zsxlCEkFCRg$iCBg7*4lp{ko_&ElQbqh3PJN-yjKW1)>j0v3e^N4C$BV>MmY$O$}+6 za&Zm%h7s<^8hrUMy+HGg8$Hv%P1Pxwz0uOyEUln8f3>2J+Oy`Eb}f2Zy%eX^4_L-! zJ?(F+o)(g#lK(QmjPKpo9x6DceU)-NM%`pgo_mtwH+F304FuBZ@9nWf7oW;CIpKVR zhaIxmZ+n>bQqL$U{1PEdXvEeTR@21x7sc>rcLnZ0YSlS(mibH-*RjF)KCUd~x|+q0 zR!)4U%qw5u(5rVudr;)ue3hD1DOH{UeRyBWqOpr;UaErht{gA8W6i0pEPVf#(A~l7 zp>lp9G4TqlrY`ryHV%EiWqPo-K+C5z_wr8E*}AvnKbr4f!q~sai;!i#l34eBIMk@J z*!G(rQn->D(Qea8z>HToBrF_s(Ezo{YKKaz^RPqfU_PxB$*>rhyF4RVYWuk)=LrcQ zGng50rKDo(IOxW}u64TawPeQ@@wYLX1`ipg-K@H7WJfQDg_7vop>DYkp|Y}aekCj- z^@ z;Ek6$tIX_7+hTb$!VaJ|97q9BF;7%6NB=McnGMVaYV=ayi9M*H8i5a-sG;ToIWsK- zYN`9ZW!|df&(A`d15d!ut0;<0SwBgZ(*$_*?Ul{~7E{+sob^?1!--UM9dF!a-ZoKx zY^Ruer7AK%1Ib*Wns2Lc$ts|+jkmT;U;9C_v{tfIt(O|rPsJakx3m+aR|5*97ZqUk z_l7WnfeQRps)iu#GL+EB7v<=1Be*|FYM{sNIhVkx_?vcE??tPSo28KtWwS5TzH|iI z`J}GsCadn3@#(xPRa6Adm1W_z(O!PP?m3yNZ&V$Q*$Va4e+~V(& ziTf2YStQTL>6ZBu;@v89$f9v#=7_%g<80UWej#Sn4!PZA_e`YtLfMs^DAWotvPPSj zC0rSv?`0%b$?x*+hM#Y`@y5|xKbww1$HAR}nGLd+Y) z>*=Cul~;6ppzhvb75Gx}yy5AcYB5#MB_F781bR+G`1>vXz$du|iLm^owQxV4?>Ke& zB(>gC0jMY(s0R)z051pC06aAlPR$s6yySa&gg5rreMboMbEu&KLYEeSDVB@^AXvdB z-hoO7FZ){+U7RfTQr#?E@lpo$WeUHCyCwb}j5OuatSsDtzI^G@TdM6Qe~0quh)<`d zOZ+S4I)$Gc7)Eaf(^?olA%5Ju#NIEk%=(1*SqnmZW5KApO5~qdek2+_yZ1V5JCp%@1F4C zF9qQP00CGIu95-(AquixC<;&kC~y?m%ttBgETiOFOYIN$ot}E;)0j@CDf%bGgtfP{ zCV^dMQ{>Wsmy??$EH+7>_OvdUk5x#74@)jS6qUD;eM{9WY*^;+v01w;bBSm=_~7MI z^2NCRB2BrDhuvHp8}J^(Z821G5lWl6f*7mK!r80P$1sd`@%~igCLsrq<7)~W}1O|aBIRc|W zmOBfmK6o-n&d!zqkTs(JnDBdwJG495;MLIehgvNjX~QG9`%9hyFBOimf_YH+4+@47 zZdYqY))}MK65rD{Z1QjSS7jLhhxW>+zZsa6Ny_+@FvfIr@frg6?k#*9aAvdcmh^!^ z^)ee5M&EM3Ax&|1mPi+?tD6vhkx%6fBRK*W-sL({>s_rH$*ZzJerkmp)PLGyfc^nA zKEZ#i$<&|$3W5kUDnajh|C>txKdSzNy#Jy4-uezgcN{PDtdefwsN0xWs6!J2WbI4#gN7TZ%6#y~PuY-V`Y&X3})? z&Ir@WyOCY2V$RIZDHspdH?yxHGWWC=E?+w=r|qE&ejZ~p60H=6QfXFMtRU{lJld}` zYHECU*=+&!;<~Zu8xJmDJ)%UH1LgbZrEmfgvB33IA@lQ(snJ3uHhl0Jm0!0AT1 zSqKJ{W3bwAvk1G{*5V;lsV+_uLo`1+;dlck`p^L=F5!uUpBRWvDcwlP&`JjC#ikFQ zvF|rG&QU13T1P(*#c&pDZY-}3&<(3F?@gX?Eh+h3EBp0X}~kuvDx zzvN*4x1hhK*F5De{UTM+{p-)n%|A1l{+s=;2^dc~IKOBN)Ym`Re+AwBw}8Kfygub= z{Gxr3`}R)(e{uBvl<@O}`-=krc#5q2Ma{_nyFl5$KZ;+Rf1H(neLwq+q+fxv|19Mx zLi86=KmSd8{t`(0|5c8`Z{++nu=bzjJlz2NqSW8W`4wpU&r+U3ZGX}DZ>0Q>z}tTo z_V*?sf^6`=W1D{k;{LOgzXL7w8!3Mc%>8FMe>Wh{-^lrUpza@%evZn&Mxj1ACw@^K zNYbBkG$?TQrxE|;{A)nN(;dt&Iz#zu%<6yh{nb_e6z=egHbGtanSc1-Tz_@1Jh{<- zQ5Puk{5NCmXEXnL&-C{W_K^ME7xPo)&r$l{_fWr7eh1xI{nM?~Pbok3|8*jLTK|4g c7yCb~hVoKSpqU5&KnMNVfu^)L&Zlqx3wa$3Q~&?~ literal 0 HcmV?d00001 diff --git a/chart2/qa/extras/uichart.cxx b/chart2/qa/extras/uichart.cxx index 84b8658d29ea..2638367c8506 100644 --- a/chart2/qa/extras/uichart.cxx +++ b/chart2/qa/extras/uichart.cxx @@ -436,6 +436,60 @@ CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf158223) } } +CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf153706) +{ + // Load a spreadsheet with a to-page XY scatter chart with the sheet as data source + loadFromFile(u"ods/tdf153706_XY_scatter_chart.ods"); + + // Select the cell range around the chart, and copy the range to clipboard, including the chart + dispatchCommand(mxComponent, u".uno:GoToCell"_ustr, + { comphelper::makePropertyValue(u"ToPoint"_ustr, u"D1:K23"_ustr) }); + dispatchCommand(mxComponent, u".uno:Copy"_ustr, {}); + + // create a new document + load(u"private:factory/scalc"_ustr); + + // Paste; this must create a chart with own data source having a proper copy of the data + dispatchCommand(mxComponent, u".uno:Paste"_ustr, {}); + + css::uno::Reference xChartDoc(getChartDocFromSheet(0, mxComponent), css::uno::UNO_SET_THROW); + auto xDataArray(xChartDoc->getDataProvider().queryThrow()); + + css::uno::Sequence> aData = xDataArray->getData(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), aData.getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aData[0].getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aData[1].getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aData[2].getLength()); + CPPUNIT_ASSERT_EQUAL(2.0, aData[0][0]); + CPPUNIT_ASSERT_EQUAL(3.0, aData[0][1]); + CPPUNIT_ASSERT_EQUAL(3.0, aData[1][0]); + CPPUNIT_ASSERT_EQUAL(2.0, aData[1][1]); + CPPUNIT_ASSERT_EQUAL(4.0, aData[2][0]); + CPPUNIT_ASSERT_EQUAL(1.0, aData[2][1]); + + // Without the fix, this would fail with + // - Expected: 1 + // - Actual : 2 + // i.e., the X values were treated as another Y series + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getNumberOfDataSeries(xChartDoc)); + + auto xSeries(getDataSeriesFromDoc(xChartDoc, 0).queryThrow()); + auto sequences = xSeries->getDataSequences(); + // Without the fix, this would fail with + // - Expected: 2 + // - Actual : 1 + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), sequences.getLength()); + + auto propX(sequences[0]->getValues().queryThrow()); + // Without the fix, this would fail with + // - Expected: values-x + // - Actual : values-y + CPPUNIT_ASSERT_EQUAL(u"values-x"_ustr, propX->getPropertyValue("Role").get()); + + auto propY(sequences[1]->getValues().queryThrow()); + CPPUNIT_ASSERT_EQUAL(u"values-y"_ustr, propY->getPropertyValue("Role").get()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx index 84b98f0d8018..7988ef90df94 100644 --- a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx @@ -121,6 +121,11 @@ struct lcl_AllOperator : public lcl_Operator virtual bool setsCategories( bool /*bDataInColumns*/ ) override { + // Do not force creation of categories, when original has no categories + if (auto pDataWrapper = dynamic_cast(m_xDataToApply.get())) + if (auto xChartModel = pDataWrapper->getChartModel()) + if (auto xDiagram = xChartModel->getFirstChartDiagram()) + return xDiagram->getCategories().is(); return true; } @@ -698,6 +703,11 @@ css::uno::Sequence< OUString > SAL_CALL ChartDataWrapper::getSupportedServiceNam }; } +rtl::Reference ChartDataWrapper::getChartModel() const +{ + return m_spChart2ModelContact->getDocumentModel(); +} + } // namespace chart /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx index 3c6602d4e028..9a44e53b8b12 100644 --- a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx +++ b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx @@ -20,6 +20,8 @@ #include #include +#include + #include #include #include @@ -28,7 +30,11 @@ #include -namespace chart::wrapper +namespace chart +{ +class ChartModel; + +namespace wrapper { class Chart2ModelContact; @@ -53,6 +59,8 @@ public: virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + rtl::Reference getChartModel() const; + private: // ____ XDateCategories ____ virtual css::uno::Sequence< double > SAL_CALL getDateCategories() override; @@ -113,5 +121,6 @@ private: }; } // namespace chart::wrapper +} // namespace chart /* vim:set shiftwidth=4 softtabstop=4 expandtab: */