From cb18b1b97a22be0ab075699cdcf3aa8b16f79dbb Mon Sep 17 00:00:00 2001 From: zheng Date: Sat, 30 Jun 2018 10:54:56 +0800 Subject: [PATCH] CHART-1748 910 --- .../fr/design/actions/core/ActionFactory.java | 19 ++ .../design/chart/ChartDesignerActivator.java | 2 + .../src/com/fr/design/images/EmptyChart.png | Bin 0 -> 274 bytes .../src/com/fr/design/images/us_emptydata.png | Bin 0 -> 13785 bytes .../src/com/fr/design/images/zh_emptydata.png | Bin 0 -> 15346 bytes .../module/ChartEmptyDataStyleAction.java | 46 ++++ .../module/ChartEmptyDataStylePane.java | 242 ++++++++++++++++++ .../src/com/fr/start/Designer.java | 6 +- 8 files changed, 312 insertions(+), 3 deletions(-) create mode 100644 designer-chart/src/com/fr/design/images/EmptyChart.png create mode 100644 designer-chart/src/com/fr/design/images/us_emptydata.png create mode 100644 designer-chart/src/com/fr/design/images/zh_emptydata.png create mode 100644 designer-chart/src/com/fr/design/module/ChartEmptyDataStyleAction.java create mode 100644 designer-chart/src/com/fr/design/module/ChartEmptyDataStylePane.java diff --git a/designer-base/src/com/fr/design/actions/core/ActionFactory.java b/designer-base/src/com/fr/design/actions/core/ActionFactory.java index 036b82a32..d50d4dc1b 100644 --- a/designer-base/src/com/fr/design/actions/core/ActionFactory.java +++ b/designer-base/src/com/fr/design/actions/core/ActionFactory.java @@ -50,6 +50,7 @@ public class ActionFactory { private static ConcurrentMap> cellEditorClass = new ConcurrentHashMap<>(); private static UpdateAction chartPreStyleAction = null; + private static UpdateAction chartEmptyDataStyleAction = null; private static UpdateAction chartMapEditorAction = null; private ActionFactory() { @@ -159,6 +160,24 @@ public class ActionFactory { return chartMapEditorAction; } + /** + * 注册图表的 空数据提示样式. + * + * @param action 注册的图表空数据提示样式action + */ + public static void registerChartEmptyDataStyleAction(UpdateAction action) { + chartEmptyDataStyleAction = action; + } + + /** + * 图表空数据提示样式Action + * + * @return 图表空数据提示样式Action + */ + public static UpdateAction getChartEmptyDataStyleAction() { + return chartEmptyDataStyleAction; + } + /** * 获取图表集合类 diff --git a/designer-chart/src/com/fr/design/chart/ChartDesignerActivator.java b/designer-chart/src/com/fr/design/chart/ChartDesignerActivator.java index 23262652a..87ace0b0b 100644 --- a/designer-chart/src/com/fr/design/chart/ChartDesignerActivator.java +++ b/designer-chart/src/com/fr/design/chart/ChartDesignerActivator.java @@ -6,6 +6,7 @@ import com.fr.design.actions.core.ActionFactory; import com.fr.design.chart.gui.ChartComponent; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.mainframe.ChartPropertyPane; +import com.fr.design.module.ChartEmptyDataStyleAction; import com.fr.design.module.ChartHyperlinkGroup; import com.fr.design.module.ChartPreStyleAction; import com.fr.design.module.DesignModuleFactory; @@ -38,6 +39,7 @@ public class ChartDesignerActivator extends Activator { DesignModuleFactory.registerChartPropertyPaneClass(ChartPropertyPane.class); ActionFactory.registerChartPreStyleAction(new ChartPreStyleAction()); + ActionFactory.registerChartEmptyDataStyleAction(new ChartEmptyDataStyleAction()); ActionFactory.registerChartMapEditorAction(new ChartMapEditorAction()); ActionFactory.registerChartCollection(ChartCollection.class); diff --git a/designer-chart/src/com/fr/design/images/EmptyChart.png b/designer-chart/src/com/fr/design/images/EmptyChart.png new file mode 100644 index 0000000000000000000000000000000000000000..1613f98b2094ec2095381a19223e701506cf5b5d GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GGLLkg|>2BR0px_Zt z7sn8b(@Q5G2KD7k;yrV8>Y|_pf%{XA z{_CpGIhuE-$JT;@Wg@#l$g@6A(`|A*2Tt=QeA)bDngl~s*`t6T%a{IY`mH-5WcIA- z%^kJ5iXBH3E{PV3yFA)2<|Wg(QebAo?^{Q&a!q@b>e z_r9KhOWuK{CeO{nCp2aUo%J+j4u5W!m^SD4y)!*hvx}eQ%RE20B2uj(?Y-50#>jVB VPVG}ULxKKb@O1TaS?83{1OVCAZo~ip literal 0 HcmV?d00001 diff --git a/designer-chart/src/com/fr/design/images/us_emptydata.png b/designer-chart/src/com/fr/design/images/us_emptydata.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ab9923e459922234f509ddb95d9a98ea9ab1bd GIT binary patch literal 13785 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 literal 0 HcmV?d00001 diff --git a/designer-chart/src/com/fr/design/images/zh_emptydata.png b/designer-chart/src/com/fr/design/images/zh_emptydata.png new file mode 100644 index 0000000000000000000000000000000000000000..0ffd8e1239f49976c2f24504558353c16a852b25 GIT binary patch literal 15346 zcmeHtXIvD`(r<5Im%L;_q5^^-AQB}9Ng@&?s~`fBbC3)If+P`85KusZpa>YqA~`BK zDj*pFNsAIz(%u0dea`#d5BGR}@45GUxD7q?-|Fh>s_vfds-D4r#7_W<^U7+<00sl# z9`pzBlORaR%jO0E8XABH06+)`U{nABAsF-rU`GMLAqL<)jPW#7Z1OAHx_9FxF8}}Tr;+KKAmbH_+lbf}ZGn)|qX&|nkrhz<=2&F^J zc?c=`nWI0&g4f7}Afks$IE4WG6y}GnY@GgW;IXE~$7{d)= z?(6>`$Lb%jnc4NJVmv z@Nq}`iwFI9K$p2;qpSvDsPEyrHtuS=5Qgf)EnJ;+{*n*(vUF3r1ks_k;9h2~5c0zfQ58(ruY1Wo%zhqYWSnC=K?SA#KRy?2|^0<2F z9Ow*t~5F zFaxf@3RnWZzbLc2P^|eh{x@BJ%z(kOW+C7_kL4<*5v~?4of``YuJG= zPzw$~9oR#^Js@le)%n$$KA3?hHot%WYTX>t)gHO|a`Pj$iVC2AF_!{Mjp(P>=nC zb;uKtR1u^CQW}yE$wty4j{-iVFw~MfQWk1k1fu?UW~kL~x=bL~=yj z|6K!e9&(Z2QVx2G4gB2~KlQr)ySEg7_tLNN{MG*7B{skU;!^+boQOM!H;5KQ9ik0U zg(w4Th#EvWq8;(>0RPp#^5NK6{ccU?aOCVDt89Mr{A$k(q8zk&FuHE1^G`3F-u+7o zaJTewhvp+tbaM7~wXw2xXOo9kYfCmYM|1vDY-dgjiUDx2_8;&7@SW~(O^4CF|C{Dg z3&7b(Xx%ticG(WN05F5rpo%X5P;dTCWB&$C`+ESq>o)gr_58_)Jh%}6Vt|336b8To z*a0_W(HS5LB!L`I0_TAy&;>@o1nOsNXr8))o4^m;0%0Hu+7%yw6p#+GKprRnuR$58 z0(GDnd;r~G0E|F$Wfm*~EZ77)Fc=ICBZE=H7+|b0P8cuj3``s*15<)sfa$=DVAo() zFh`gN%nud|QR2{s8^fPI5)!x3;&I1QW`egZB47l+Hk z)#1AEt8gp03)}}D3cm|~2+xGSfS1DS;2+=v@Co=Ld;MD( zAY2gvh)6^tA`?-FsDwtk4>5sQLi|9Ykkm*vBp)9poE|adUj?BHc==P9f}Jj20eR5C|i^- zDjM||RfMWV^`NFv8)!6|0nLk+Mr)$Y(C+9kbTaw{x(3~go<-vbNeEd9&k!mT8WTDa z1`{R{J}0au>?NEd+##YM;v|wF(j>AV@+OKU$|kBL>LQvY+99SS<|39R)+M$jzD4|y zxRAJsc$D}%2?@z@lCvb*BsL^LBo9emlC+XclKdd0BIO}fB)vlFL3)=om$a7j6X|y{ zGO`n7a%9G2?qqk#o{=?>jgjHVsmb}t)yOT#1Ibg#OUZl5S1?2vPK-Rp1mlBA#Js_D zVU{R}C{9o)QkYQ$P^3~+Pz+IQP*PJ0Qfg80Z+f(rq7MJ|cg_@<_yy!Xv#$w&)q@<>)QxBk7Ci2k5sM*cg-;>=@!0${0Q$ zMIPljs(tk4(X^vYN0%6B7$q6a86z2AGY&JsnRu9Vn0%SCnA({(m|2)rn4OuEnH!jw zSm;>fSZrDDvsAMzuu`+iu-dTRXRTrV%0|m3&t}i|kgbsodyMIr>M@UFPmXmS+d0m4 zT<>`B@uK6O*@@Z3*>AAlXRl|+a}k{6yJ_ zc`kY`H7*~ne6CS$GHzLJ7w$~%{*$Pa;wSA+K0eva1LqOpvF1tT>Eea+it^g(g0h#-~V zdBI@8O2Kbuc+QxgNj=jqL?)yx6ev_Kv?k0eY$=>3{85BjL_;K8q+VoCR7})Wv`}|2*dwtaaT;+g@o4eZvjk@q&IX>XI{QOHRKi{2wZy6EMlW(+bi7!m2{hF-6Er_-acQ||z12o(YiXxy zf6)=t@zZI!M19Hh((_B3x(d3nx+8krdLDZ9`WXEy`p@*Y49*$E8%!7q82TH2Fgj{v zV^nU8Hr6+OYP@k->GFfivsXl}gk2fD%5~N2YMaSX6MK_)rWjK*(>K=$t{Gf=er?xG z(=5|$fe0hMd{_})$YyX9pOFaqwJI8i}W@3t@k_T zcgt_mU*7*o04(5oKz$&4U})fMkV;VAE#g~tw>pAP2ge7mhZuxZhBAi+g-+jAxt$+I z9_AW06fPN_eg}ES=1ymXP(*UXexya@`>4}ViBY@J=F#tC1Y;h?;P2kJ+Zihwn|2R% z&+*=1oNQcPJY~F3{B(jwLg{_B`;qt8ADBL9OB7B_Pa;n8NSb(f;bD0)NAkVo-4yGT zfmDUmqDM@RA|7o$ws_o|CYM&2&YT{VzMWx{@$reulhVu+nTc7bEYGYj+4|WnIpR6b zo*sP~^>i=SF?S+QC$I6D*t2KPnV!ey!}C4z7hYU>(Oqz^puCW;@JSI}QPfND(&OdV zSJz$*zE*!-|3>^xVKHa%qY~&k2DxI^fziZb~dRuwKgj^H?+vN)U-;sR<%jA zRlFB}U-m)tLutE6dr5~#M@gq>XK9yMS9$l@?#dpip6XuN-nzbXea-!9{T~J{4)hG_ z4SpQDGBokg;^X`$`%i1bp2IsML8Antk)J6(Cyp_VWsaX5FPadYcsF@&vVH2()X22? z^x}-$%Ij0hjkf{71{S!S>wF&0X~F!@ZMxmHX=Zqj(2A z-r3C6?9dlLKv(z;D1!c$3jmoB>jsEN@s@+t|9fdwAaT^7aV{y&V>QCn7RF;r@ffq=(5VnOWI6PjmC0J%9bC zxTLhKyrQzcp|PpCrM2ySZ(skw;LyiU!;@3fGqYdj<`=%Mefz$?vAKo&v3+0{3?P1* z_1m)lW)~%77aWO1AkhbQ!QeNcjG#mk91}!Q$!nv{T&RzqxkX5$5clL&9TB^b4wm-1 zYY#CUhwvol+JR|@mi=>v1^-Ky{Wk1xyG9@f8h)4%a5#bhfj|(T2%v-_guE>jijbJ_ zFcJTiNDmYFLBjk_ct{8gl7U1b(a=8y2@wg!A1C~0D57M;4+ByJ44O;`N+1jNb~7Wn z!T-aIz<2)#=+N^YphNF}fDV2C0Xp>m2k0>Huj+6i5*YKGyb(q_E_7#T;4XU6@C`0q zF@)_in*B9=yj2UeN82hE<8CPq*Wc#C#i>?{_M`^CE*c1|?M9m^x!uDRDcql4mXsaW zsp&1vs4A|!I@rgNwU>wrI@P0=Vhp%5Bmbq0AN+HRGJ2_KEU*OLU*1mb!q7T(yq}%|0=8CoKqG`|Qo_cEKx-+Ns+E&D*!mV_ykh zEL4#MRGhw|jGHIq2`m84>*dnUcF}8hZ?Dx!wN?pbj+|ne(k)lJ!QRiiq$e9<&{_F3 zWUWT?(PvwIpWbR$Bfpj_vGSC>+gj+MQjN|h^<8%MxIOGv?y=St}iq3Y@9_zNIq%s zS?EM5K9V~F{)ZWZANsRl%jN)T(=^#rRXfc`C!<9ZtUq2C;w5j`sn}YTV@Nx(#%n5M zXjsZO6mGU_)wef3cg2*p78f#Q5V9*_%otVY=9;|M@$$PNtAfh=nusFGp?xu2Ff>*Y zG(=C&d69oiwD;G1pF58k43a5%8Od01zPH|pmaPAl90&Yko21I6TCT{g)@ju^ozt|? zvE@7{>U8?FKJFDYwUL}x;MJlqe7A$*tz<-(ckF{jJXjHQtO5}!cQ_brLR=%R}={k6o2V+ zVxdq!r}nX>91kc>zO)c)<~VQ1MB36VQ)55ty*nBt)m-U>@d~?oLL1rmE_p!GuuaU^ATh>k&$m&z5%DVAD zV&mu^KYM?+yM4z*S1!+m?H{$-p?+ z3>^sqh>Xl2=qwrmw3TRJ8-Ytn=3j8RCjGIyZ;g~FwmXi=?p&;1D~gk~D3H$TmXd!? ziwCARY0mpjao4eb_t{s80*9hDUe*{u&g{?gnC;4IHXIco3*=cKpa-}m6r{x)m8 zrmF;Nqd~NR#-xVaC);P#Oe$_WZx+%gWz)ZBV6JE0bI=8Zc#B_rzCJO$kYs=ejw_YPzNUqqPR)*ct90gm9FhK|0Yhh% z37e9Ibh=`JB~$uQb*kkMZTPITm>3miXWnY9NGJn-*H>HR9SFD^&|c|PjJxdQY(VDg z;U*}PA)A={P1{t#;NdRA%l!_V(PXN5|0k7`+aHo;H*MFy{+IctfPm*dDfF4@Ri%Gq zDapE47#Rs>zB1lnued#N-;(Lt(3KwLac}uu9=g{hPCss-`yv7M!yiP5bXy%Iy-mKatNz=THs_y-dFk?jUXI+JEyZP<&h;iYaC%%>hy?F3JmkbxzwP?Vb zfVKbPz@U|8=Be3`x9>5i1yiE=r!yM=2R==qRns?bADY@g2Bkf>J>I8U zWD9^_;98l&eh;?Yr%^rGy+TZIb*AmMQ|rV~TaED^Y5%Ef{Y(79BTpVWW?4V-6>ka% z{3=SlV6Y`&+1gkdFRZbl7`-oT4S#%0`5t}Ws_c82g4&$I@Opi;?wU!|)8$cqr-Cf@ zfeZO>*E>K!iM77s#U6WMtmt0K8279FDVT9_a3VD4UtG1iT-vj|+ZJHMy22*)YCmKw zNM!6>gnDb8t_Q~i@!X1(UgqUjmt4NY;ek|t*;nzRGjD4KJa#f-EA^e;QXzt5()$NL z=LUN)+!yJ8h6)T{P49~x43fCL_B65u*_t*hTVHl+!$D>@F!KsWc%S%zffW0Qdjcz~ zFemqxZz3IEkD~Ik_qTONqws)_{VZZ}R100IZDN(-RjK-kPegw-9A+tPu(ztcYLZBJ zjd12DFoqsiaaI=fC|^~#t;Y}d5v+q%gKuM*KUD4yv#uy>?yU!I4>WY6bG*pDJKSVg z`Wh&R2ZM#%Rg1Mo9jm#}ZeQTT2WYgF{^=Zu{{tto(6pIywR=`})WT`kmvyi*^21<; zn6X|zuqbwj&709e--d>m(VaaPm%?|Qv(Y%)+kB)WYSyX4IZ$G|)m6yEYRyVve;8}o zA6K}rKE;1&h^Qg9iD)+uF)gtXcxyOtGpQ+%yeayQm3P

zLFZL-!4O#$PYrs>D6u z{Bq`${RyWhadGI43``GYZ(<}joFw&5!L|4)^OEB_jXT6^Mmg1MDrYv*)TS*mWm?1(qLXgoiWN1c9>kJGXc<4)uqsl z4pCPE-Zvwwq)LtY?JwDL?60AfxXL$0@+Ug3&czhJ4f~)V#30?*huzm3xgyWpj&VBu zUX?g*$*!q*D?x3@eAL-2^@EcKm(3nGVq^hxp5SB#hI!4e`bGs09(0K)?FsGKB^O+E zHI+21O33?eh-rvjFw%uB$RJ`Vu722?)7uRTEV#MRhLad=$YPIc@9e_4v%ar<|6kUl z|C29@{{v4xn~n0oW-rla*7hDGQ3|Ko-D0;i+1FnTor^nq_K2(av0Ez`q`?!faZO$h z<45LUd!y;vTbk>I@E{rFnrIYPc$Iu$mUwN+g9p;nQcv)pTD9m|jfKBd>60l9-Mdth z)-XKqe%$qqcCLoGSb*nSL*u=o4-%<1s{7lP_tNuPcL{vEmY(GPU?Cb15%{rNW4U`g z#^6T^*iM0bHjKpDiks!aPS;*yp|ueU<-?Y((vBbB_fC$9m)Z#99Ob&=PGEY%WYc)c zf*s9MI_ESJkk3BH>bZn$cO#^bQL~@hc8!#FPiy!vn^~vOR!6?}))9{3Kcjh30`Phs z?xz$(kzSz$LxqunU2=g;#GA>?=8Ei(c!Je7X{WSS1~z8d0$bX5s-qs^!7(|O5tj3C zpL-|Ut~xc_P&^1In)yg+iGjLNi0?2d$?f7GOC?1|G(M}1@K)h@GU(8hJo z^`&ga5-*f)tAxK0Ueu**p;5HGJ5p^QPz>unaDH^QdnFgu95{F4pRsBx;tZlkG`uJG zE}xS1M$mdJy$@`34@^-tDqLxn(O+tSygwAF<$H^bU+L^m`%m7&G{mQIol;m~Z(FVzk*+mOT=zAH6VigzK(*ZFURk zi?LAH_RNsbGhBn#yGzV3cTQOqk{j+z*ARo@HOJ~;(cTv$Zemm~mt@~=Y~<}y=ZMY? zJf){Ud8B45bvwYLQJz@I1=b(eOGJ3xS^i|2YS;H7k5WUrF+qn|ZthQIPscuH5G|&! zovYTr?a@iXZQ6e8DuGM2Xp&=m+|77B)_W&{q@Ky&AkN}=1SB4<(=MB^_BKDr%|0dT zg9pOlds!pcg)2#+!e>@Q>`Lm3wljRwR|A-9B-ZZ<%8~qm190Fhp#O!?6VWB5KIz6T z`XrZ&E18{n&q$>xukcH!s%1$;!Kjq49MV;M>P1{iYx&C*2IEzA%Sip%o|=KS4Mdi2 zY>P1Lm6F9}+a7hclFCbVZqQyl9*qZ;pXvQ&d4>+%N8%(;(WJE>1}>-a=NodnHw*Qr zYq#ygMZdLSN)@4zgW`-^rm&H)A1kA=mSAu;{Pubjii*R;J_MI7S#zv!{lN2T9$feG z@Kq!+votXeTuH}DFW$qh3<&(;LB&sV8n3dLM30n47%&+8*#L>^_F9x2Em!-0PO+nV%-124?Gb2|}MSNG4Ep^Y{77tcI;A3E*p{|** zcePz3UBz@Q$3dYEW%5OYWu<0Xt28#d;)79r-~`D&O;o1!*PDFz+3=veW>Su#ZHk$J ze7uCcEYq@UrXnxZpgcW_gea$LO;svqcO<>H)I6A8`B;or;A^n2cY*+zMQIo>1wI{( za+lT_b;G@N`vFsz4PXECV&)BWV(wPuy7N|ax{ZCT4B7~g{lYsjXBL+ERodSX&NsZG zeUh=LGrx5?w!`TJGHOqyyy)Ukv0+Kn)pSpFU#sdPmzeZ^GSOrMmTMJ}JU;*uBHanTB%q{X5+mOkd=QHioQm+E3VE0!{{R_xS0zW)PknNL^RjLU(pe>)6&YBYhj5H+z=P2AhHDmIOCRDv z;Tj&S>6vQ}uE(4hl>B^glTqFKD!UqIoHj$YxE%dGBJm}T5lf)p*c2RXyVTM zo$=luEXIS{J9vP54nAi-A2v0zrS#rBLOI$L|2E5cF|OZIjUnHN254XDx>IF3i3h~~ zQ9A)x<3Q`q(!q&*!Fc`o3~sJ;lLx&atI%3^LW$oRJiQGoo3L0*+vxI2YDz(eo|@{H zQt~{tJeSO-!qbs#v6Fur`F*js5{gu4wAE68F>gv#(->=d<99C^-T{fGDutV+JawTe z^w(7DnC^yEUg`d`DC(aKVxNl0WImK+CmgY(a8_+aziJ800RdjS7lw+~yKw4!0#!oZ z8DcRy0-x1SX%NN_eA^;^mdJ_gbUwRkQiQF!+%HgN>NdTn-jI~px!rg!CHjpbXUT(- zY{_H_u8s%>?^aTxFIC^0YOs+-;U&JY6u8$TjV6L?r=FQ_rn(*_A*7T0Nb=wl{m6F~ zX|$`aze;@?<=eiERMU{7P47D26d0-4x#f;rxn0J6m2PU*e4$E!SsBLRRtKi5sHXxW zt0{2)&v847FZ;5)i})Qyh;qt3g=WX?K%@#-XXx-3%)-5yA}DM4B&9h;MkYdL^ob+5 zOVd1=Ey=O(yA>&nGrYvF>DiT0oWbN!W+$Y$D; z{P_SBcGMtcZ_3E(;6qE1#dxT1^ByE^8_|JamK+cR2H*Knb+_YSZ~Xg4qz`46q6JAjGY72?|E{mkO8kves1pRO{QKYnbrE#g?T zAg}n34?le6&N8-gSVYfdc2^7RY7MTZUcCgZ4P^TRxfg@#I1JW8xoZSK9y@*WX+b&6 zUg|~+;sRE>IYDH(p&k-@j)j9!vcqHhbLR*7*<#gYOiDMkp9 zA?-RhWu_P7T1vdig6wxWr&%LzZkyC#r$&?qiYGT0o~kE4$V~UCw7g^sZ(Nz!SRQ=a z6B=K^*G!`)}JOPdYtK~(|b`WYlrLsr67`QXVy3bQ3R97hww9dOqF&`j+ zjaiMd>~k6$KQoVz&U)JfIYfX6nc-c}nV)Jof zV+A-l(~a(_Mq+atrN#6#E}N{qTqA#oEvLAnr1PN;Sp zmHv!B`uGjsh+(=< zAHcsDNbjMpfmT>^yk(Zl*m0h&m~KnPPThs!hjxXe0awECyX%WhHN{sSR}CexV0!hr zDIec?$8lRbp?SrNcCK2)-)-8UG3h0ic|L5U?w-^u6LNFAsRr2PTu#rB*7{d<^j-O0 z0#lc9BlSLCVu}otX#_`8NABgf0ZT|Dh2NsHCi>_*nJI$x&%Z92aK|pNHO+yL=DE zdH3vM@4KN*pNKge?^C&ik~gYlJe(IC6|RO&mQ%*{TU@WoE(_X)6*Ab*RN#`=P&Y;x zMQ<2p&lB-hTypZGYS@dDJHl5@-g0v?8yB*dJ5{voW^3d?3WW*Qv|W^8Y|OcN3{0L~ zw9U-?Lyaa>1BJVoX$;kR@X2wxo(a2NtSh`ls|^pL&zHNdC2W}u2>O=g=H!=NMvJrt~luR|+Z?q7)Nv(JUq z?NhYKe&+B1+aKgEhjtgwRE=_7wmz5o?Xs8rTTkD)0=oe|8FqrlRbY9axaznjHjZVP0q+t z%yNNlaIZu(+!VoKRU^$i=*No{t4*V?Iog=`?dx{pO_BlyMVI4gji?FA#ps>E+=JbP zvB~wS$!9~7tIA)|L1UL$d9HCZUyi+BiaJv}Lxn*`f*(%JY3!v#GF+I*VU~LytmIw_ zc6PoWvKJ&#PGj8r#~93_U4pW)O8#jz*t@t9g)rB9w!?bgvY%C)iz`Q-iN`QecCWLi z#Gb>3hwsWxHew5tEh3(BI56A}n`8^DGL`iz4Y=+z#GdWPf!z<8bTF?sR_a(TNPNYs zdj4X)y8p-e`tf>{Om2lRY|7Jkwk*UWJx1a+!R=G~ov(O;G9>GDM6~->DQ{iTPo7jR ztH!xZ6j%7aTBPEAzDsZ}2UGAxw@0_`hBS>6O7Tv|QZ7`^-O(;&>nj)=HNvuanBTjM@YG$e zgN|36aksHM^);BPQyzgR+|%vLHKijMPN)7X@7G{S=M6{>IDrQ=-^lW0;jaF-3fYbJ9#zwif4bvdAZ)!w!r{ozS8)&N&=lbRA#C1jq4yo8 znFWT$gS*%ImaF8M;#;1MayHt=)9AY|eHFK455_n?%pjMXXbJ7BXC+%^AE=KiP?g?T zRKJx}&d`uB{}3&+@tqWU`!k1AdX9@~kR=zmHY9xZRvL=&vHK?rai@py7tj6c6Yk!$ zU@h?T#}+B!qFkZzRujJ&*4vUbqj=M<}Bov2y2NmL^ zFph+~E+*}XiTTc3QB*{q^^VGAdFyf9=Iakqt6ff6Q(ygr2Xz_+O+{Wl>NS`v9M8Y; zg*J1~>Ye2=z$v;*s!od+xobnQ>{?CGdQpUNY{ahD7{QQ(@Ez*Q<P>m# zWXa-C^?mg+!j;o{r_roeQs#EOvCmnV$M*`SO$LPLO<>5x!Gxt?y*7?YXqq^C&A{ZS z{ixY?PhcyUFfUv7>>2|n>8sbmo17x5S^7$h+`Sz$`s&h-l`qkcg*tmy&M;B%qF+-WlPnHL;h&m%vPbV5|%71YTCiA8GEIJv$HaeBkr^*ACev6 zh+6TTNdXlTu?TA!(0#pIn6UI*jc~l!8TDgKZ`0>aa`uTMJOZ+suDX^EU0ie9H(dN9Spjia25rM0^`yu6b0tnNfcU3Mf%<~{5auL~3~ zMBHdM3RCM(*U%^nw-=VyCQVFwHQK}z#&fRNa`h|9`As@ zP}#?yon~hjLfW}j_TE^((=D25bE>)+TNYMaL})D)_>O*3T0W><3YF_C5a57UoK;`e# z&grL<`Z2q$CHpaYyU5h!bY!)OF6JjlMI3XMF*-uvxxtcLWQ7M|PPnuEIRC)a-SOS4 z*0{?P=^?w+Qv++7w|g&Bly*5fC_3FqVoUlkyXA}$inRsn1qk`RDxs`T^AZa5FP6*= zGj-G{^1o_wq-76w{K;#bKRDt4H+@=!_>;rsf13_}cJ}%2_{<9NFPyIZPwRpB)2|f% p4de0uKO_7386VKiU8Q literal 0 HcmV?d00001 diff --git a/designer-chart/src/com/fr/design/module/ChartEmptyDataStyleAction.java b/designer-chart/src/com/fr/design/module/ChartEmptyDataStyleAction.java new file mode 100644 index 000000000..00e1dbc7d --- /dev/null +++ b/designer-chart/src/com/fr/design/module/ChartEmptyDataStyleAction.java @@ -0,0 +1,46 @@ +package com.fr.design.module; + +import com.fr.design.actions.UpdateAction; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; +import com.fr.general.IOUtils; +import com.fr.general.Inter; + +import java.awt.event.ActionEvent; + +/** + * Created by mengao on 2017/11/23. + * 空数据配置action + */ +public class ChartEmptyDataStyleAction extends UpdateAction { + + public ChartEmptyDataStyleAction() { + this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/EmptyChart.png")); + this.setName(Inter.getLocText("FR-Designer_Chart_Empty_Data")); + } + + @Override + public void actionPerformed(ActionEvent e) { + DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); + final ChartEmptyDataStylePane pane = new ChartEmptyDataStylePane(); + BasicDialog dialog = pane.showWindow(designerFrame); + dialog.addDialogActionListener(new DialogActionAdapter() { + @Override + public void doOk() { + pane.updateBean(); + + } + + @Override + public void doCancel() { + //直接关闭弹出框 + } + }); + + pane.populateBean(); + dialog.setVisible(true); + } + +} diff --git a/designer-chart/src/com/fr/design/module/ChartEmptyDataStylePane.java b/designer-chart/src/com/fr/design/module/ChartEmptyDataStylePane.java new file mode 100644 index 000000000..b4c56afc3 --- /dev/null +++ b/designer-chart/src/com/fr/design/module/ChartEmptyDataStylePane.java @@ -0,0 +1,242 @@ +package com.fr.design.module; + +import com.fr.base.BaseUtils; +import com.fr.base.ChartEmptyDataStyleConf; +import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.gui.ibutton.UIRadioButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; +import com.fr.design.style.background.image.ImageFileChooser; +import com.fr.design.style.background.image.ImagePreviewPane; +import com.fr.design.utils.ImageUtils; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.GeneralContext; +import com.fr.general.IOUtils; +import com.fr.general.Inter; +import com.fr.stable.CoreGraphHelper; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; +import javax.swing.JFileChooser; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.SwingWorker; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.GridLayout; +import java.awt.Image; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; + +/** + * Created by mengao on 2017/11/23. + */ +public class ChartEmptyDataStylePane extends AbstractAttrNoScrollPane { + private static final int WIDTH = 150; + private static final int HEIGHT = 20; + private static final int FIVE = 5; + private static final int TEN = 10; + private static final int THIRTY = 30; + private static Image DEFAULT_EMPTY_DATA_IMAGE; + + + private UIButtonGroup emptyData; + private UIRadioButton defaultRadioButton; + private UIRadioButton customRadioButton; + private UIButton selectPictureButton; + + private ImagePreviewPane previewPane; + private ImageFileChooser imageFileChooser; + + private Image emptyDataImage = DEFAULT_EMPTY_DATA_IMAGE; + private SwingWorker imageWorker; + + + static { + DEFAULT_EMPTY_DATA_IMAGE = GeneralContext.isChineseEnv() ? IOUtils.readImage("com/fr/design/images/zh_emptydata.png") + : IOUtils.readImage("com/fr/design/images/us_emptydata.png"); + } + + @Override + protected JPanel createContentPane() { + JPanel content = new JPanel(new BorderLayout()); + content.add(creatNorthPane(), BorderLayout.NORTH); + content.add(creatCenterPane(), BorderLayout.CENTER); + return content; + } + + private JPanel creatNorthPane() { + emptyData = new UIButtonGroup(new String[]{Inter.getLocText("Plugin-ChartF_Open"), Inter.getLocText("Plugin-ChartF_Close")}); + emptyData.setSelectedIndex(0); + emptyData.setPreferredSize(new Dimension(WIDTH, HEIGHT)); + emptyData.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + checkEmptyDataStyle(); + repaintPreviewPane(); + } + }); + + UILabel promptContent = new UILabel(Inter.getLocText("FR-Designer_Tip_Content")); + JPanel northPane = GUICoreUtils.createFlowPane(new Component[]{promptContent, emptyData}, FlowLayout.LEFT, TEN, 0); + northPane.setBorder(BorderFactory.createEmptyBorder(0, FIVE, 0, 0)); + return northPane; + } + + private JPanel creatCenterPane() { + JPanel centerPane = new JPanel(FRGUIPaneFactory.createBorderLayout()); + + // preview pane + JPanel previewContainerPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + centerPane.add(previewContainerPane, BorderLayout.CENTER); + + JPanel previewOwnerPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Preview")); + previewOwnerPane.setLayout(new BorderLayout()); + previewContainerPane.add(previewOwnerPane, BorderLayout.CENTER); + previewContainerPane.add(initSelectFilePane(), BorderLayout.EAST); + previewPane = new ImagePreviewPane(); + previewOwnerPane.add(new JScrollPane(previewPane)); + + + // init image file chooser. + imageFileChooser = new ImageFileChooser(); + imageFileChooser.setMultiSelectionEnabled(false); + return centerPane; + } + + public JPanel initSelectFilePane() { + + JPanel selectFilePane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + + selectFilePane.setBorder(BorderFactory.createEmptyBorder(TEN, FIVE, 0, THIRTY)); + + defaultRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_DEFAULT")); + customRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer-Widget-Style_Custom")); + ButtonGroup buttonGroup = new ButtonGroup(); + defaultRadioButton.setSelected(true); + buttonGroup.add(defaultRadioButton); + buttonGroup.add(customRadioButton); + + defaultRadioButton.addActionListener(getLayoutActionListener()); + customRadioButton.addActionListener(getLayoutActionListener()); + + JPanel jp = new JPanel(new GridLayout(3, 1, 0, TEN)); + jp.add(defaultRadioButton); + jp.add(customRadioButton); + + selectPictureButton = new UIButton( + Inter.getLocText("FR-Designer_Background_Image_Select")); + selectPictureButton.addActionListener(getSelectPictureActionListener()); + jp.add(selectPictureButton); + + + selectFilePane.add(jp, BorderLayout.NORTH); + return selectFilePane; + } + + private ActionListener getLayoutActionListener() { + return new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + emptyDataImage = null; + checkCustomImage(); + repaintPreviewPane(); + } + }; + } + + /** + * Select picture. + */ + private ActionListener getSelectPictureActionListener() { + return new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + int returnVal = imageFileChooser.showOpenDialog(ChartEmptyDataStylePane.this); + if (returnVal != JFileChooser.CANCEL_OPTION) { + final File selectedFile = imageFileChooser.getSelectedFile(); + + if (selectedFile != null && selectedFile.isFile()) { + previewPane.showLoading(); + if (imageWorker != null && !imageWorker.isDone()) { + imageWorker = null; + } + imageWorker = new SwingWorker() { + @Override + protected Void doInBackground() throws Exception { + emptyDataImage = imageFileChooser.isCheckSelected() ? ImageUtils.defaultImageCompress(selectedFile) : BaseUtils.readImage(selectedFile.getPath()); + CoreGraphHelper.waitForImage(emptyDataImage); + repaintPreviewPane(); + return null; + } + }; + imageWorker.execute(); + } else { + previewPane.setImage(null); + } + } + + } + }; + } + + private void checkEmptyDataStyle() { + boolean b = emptyData.getSelectedIndex() == 0; + defaultRadioButton.setEnabled(b); + customRadioButton.setEnabled(b); + selectPictureButton.setEnabled(b); + } + + private void checkCustomImage() { + selectPictureButton.setVisible(customRadioButton.isSelected()); + } + + private void repaintPreviewPane() { + emptyDataImage = customRadioButton.isSelected() ? emptyDataImage : DEFAULT_EMPTY_DATA_IMAGE; + previewPane.setImage(emptyData.getSelectedIndex() == 0 ? emptyDataImage : null); + previewPane.repaint(); + } + + @Override + public String getIconPath() { + return StringUtils.EMPTY; + } + + @Override + public String title4PopupWindow() { + return Inter.getLocText("FR-Designer_Chart_Empty_Data"); + } + + public void populateBean() { + ChartEmptyDataStyleConf manager = ChartEmptyDataStyleConf.getInstance(); + emptyData.setSelectedIndex(manager.isOpenEmptyDataStyle() == true ? 0 : 1); + customRadioButton.setSelected(manager.isCustomEmptyDataStyle()); + emptyDataImage = manager.getEmptyDataImage(); + + checkEmptyDataStyle(); + checkCustomImage(); + repaintPreviewPane(); + } + + public void updateBean() { + ChartEmptyDataStyleConf manager = ChartEmptyDataStyleConf.getInstance(); + + manager.setOpenEmptyDataStyle(emptyData.getSelectedIndex() == 0); + manager.setCustomEmptyDataStyle(customRadioButton.isSelected()); + manager.setEmptyDataImage(emptyDataImage); + + // 通知报表整个刷新. + DesignerFrame frame = DesignerContext.getDesignerFrame(); + if (frame != null) { + frame.repaint(); + } + } +} diff --git a/designer-realize/src/com/fr/start/Designer.java b/designer-realize/src/com/fr/start/Designer.java index aad3991ab..25c92abd4 100644 --- a/designer-realize/src/com/fr/start/Designer.java +++ b/designer-realize/src/com/fr/start/Designer.java @@ -7,7 +7,6 @@ import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.file.WebPreviewUtils; import com.fr.design.actions.file.newReport.NewPolyReportAction; import com.fr.design.actions.file.newReport.NewWorkBookAction; -import com.fr.design.actions.file.newReport.NewWorkBookXAction; import com.fr.design.actions.server.ServerConfigManagerAction; import com.fr.design.actions.server.StyleListAction; import com.fr.design.actions.server.WidgetManagerAction; @@ -35,9 +34,7 @@ import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.ShortCut; import com.fr.design.module.DesignModuleFactory; - import com.fr.design.utils.DesignUtils; - import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.CloudCenter; @@ -197,6 +194,9 @@ public class Designer extends BaseDesigner { if (ActionFactory.getChartPreStyleAction() != null) { menuDef.addShortCut(ActionFactory.getChartPreStyleAction()); } + if (ActionFactory.getChartEmptyDataStyleAction() != null) { + menuDef.addShortCut(ActionFactory.getChartEmptyDataStyleAction()); + } if (ActionFactory.getChartMapEditorAction() != null) { menuDef.addShortCut(ActionFactory.getChartMapEditorAction()); }