6lWf
zJ!sKG^e`kW*xG7~9F57IDWzY#Am{E5Dt$9OYSCk|6)()J_&YxO3$#wDbp6euC!{OC
zAr_1@u9OA;ZqZZp53p<^>dX$kn_~QIoi4ohj786i&i8?TKqt}F*V6MAy+AKIJa5K?KdWBwPvH&i;Fm(FY0h;7JW?rbi}SQ
z>WbBZXlq-mECPkpX@zu`D|(+=^qHtzcQf^l|K_DHpeYSE38`j)=B9>2vx@
zIQ$y1pI=*4M8$skmcIAWcbyHRJC{ZOq934NfWI?G8Y!cqoVHq6@Mb&aBK2>Jexjct
z3J^f}!U<>!F`k`NpY%Y?0p+7zkdS#Wj4S=jti233+<4rsnQ#YM?BP7{bg&5wJkn)g
z#}K3xQWgiN#6!#jdoA{H0f^!pdYX*lM}vAJYSy-d%Om1YL(sX*fUXl+$VcORiPF;A|mAH67DC*aU47@9$;~R
z2b!=Vu^?u{u*U2r$ChPl-!wE(_3`dZa03_eU?I*PFwWhQ#nlnHwDK~1rydzD!Fl)?
zCOyACxH8%j^m8c>la1`1(f-+z>sZ%mJi_9UT;^EbS(roQ)Hw#jduTCiv5>Wo$6)qK
zu!AVfRxY=A9FK=rQ&T;APW_Ry7ga37?lZ8)KY)mjrPV%$_v){WMxyan_(V-;)736w94nbI4OLMzniNs5yi%02YicmOw`2V@$oPNlS}QUH5^<~p5D>o>d9U{oN0LW
zhRu+MU_8`VK12RyjrQ|le5A!kF>vr>1s7AMah*)cug>8@VA)2v9%(noQC368`?-N_
zAu(KlnIpP5<%Z;`t+;`hDBQ`NI#MSl^2jTBm6t;}vj1w6E`k;x&Bz)QK?Bz!nzw60
zacFlt#S{QTfZM>wSR9l1t&b!r5D8W|VIa~bIB2ns
zM~dohvv{?bxFVSLcp}!;C@!n$ZRuQV@j5ZDNW~;(t_3blP?-s2BZQlewfH#c94Oq}
zIfPvh4Tl=n$s8wGe4;E+g76&?Tr}c@vQ;+n8`6KW#ivMr&(v-!3<}~5;DGFi>yb0~
z%5qv9M;w+a)Y1&)nR5)r6%jWD@mGG>SY>do8Dh*$##m!O0hrhh*VrqdRsE)HtR!#=
zqs_rnP8zr%n=#LZnMdvd@*9AiLimPo4fgaCLGpnww^2tmuiiwt*`K=Zxqg9>69&
z-*_)y;zm~~9_&2c%a?V-*8BMRQbyb{iZ_UJ*oCb{B@GuY{bM)46a0J?Um?eHt;N^z
z^%w%CbRwW0Q^PhtP*AenDJoLa33l1GO=D@>`9Y6Z`
zp~oFjpQ-qH8{g|?gdrwLRBo1w+0FLa@&&;JEOx}=4wh&Hma;V@35ef_A-Y0iKil{|
zi|^+LFh@%;fxIO2#)NEpRk<=4tFw=3vm=dg#2lH(nyJE*xUM1n@dy!H9O5c~&rt)E7TXWj;o{lUEUIh}m9#
zSvWd_#o|`UoBH`BB(eB4D66c#s_2@C)BCD}-y0UcDH_XyNYvS_K}6xvn3vy%m}P-E
zCbA+N_VZgZ>wBH{Z7irW@4M3fVJ`OY&ceagxNRo*Kn5U=>7O-!YJfAv$FjfAfOuW7
zEm7KJmxe>l5xW#Fg}9xFSF+>$IL5RfpJw8G5d15Pck!Un{f5C+k*wAy_Z-~;4xg$LS*$-W9%x??%)j+{z@UIV=hX6_q
z5_I501k&i(z@Wu27!X5L>Qjhm_UMcW7Lv{kHV~KYuvvgX2AiRR&4^zgWUxV^-ls+}
z4O#$0Q5v&d!oVScTT!~gwwoG|%Y+J1W1vFRSaA_^_&B329QD^#i}=(y98cPMlm?fM
zE{z~b7i=pXU+Pn^?jy4H3e9cI6XJ8pu&;^XE+dxN^uD>QP#Lx5!U$ZH@GIO1c-8(G
zknJGOO-IgtH4(~2O;lrG+0
zwhFgc3Bv?_HG|5ay}>oG&>2e#XGa*R&Q2t7D}enVYVV*fg1jOE!h!Jfd?3U79MJ*9`H|eI5PEF7bm;;d65|z^+
zOl=y3O>qZdxYBGOJ!xS}#2mGQX(xv<%>PVpL-sA{h2QAg05X4A+xi(_AL?a>8
zJR>ThoD~-Bl_l}W4?}{RgwIyOy~^r=C+p7X#sq%VEW?h@ouDqb+V-ne(gTx_Z7!v!
zBJNi$(sxWQ)XcRZuy-pMkZM#yMW5iuv*(JW`8OmU|qr23~~#Zcr8>glQ0f+lC;9
zR(^H0gTwW5mN($iE%z)dj2G4UFx{(WpZXJQS(e7kojYzk5OouO
zq;9p;ZL-N?U_A%t;w&lG?${F#_9{62*^Yy-XZ8l}kVD;sjbOBezikTd>eu1yl4wz74fxNrKdC@
zgG!r%k$7o%xa}&7v9kEPmU>SX?}?+5i-r17tAoP_xtwZdFq1i0e3UCU87xF8`PGMl
z$tSt;keNbw%9#dnM<7RZv!9#z)u&V`Lh+?V{iwfJ?Sw|iI;!kyddGO`s47(oz;yNBo;*{7mV{wl=
zHluNKlO4v@<7G@NWQU>jcL7xE+*3`s-2w{*hIcp;WjAN3AE+&~=Bgx|6p|Wva#Irx
zHaYg84+eFy%S?Nr`9Em}nGL|8f~zs$&&iT04^Dbr%8G2kTxS}LSRfahX~B6U?3&;V
zbJu9kgum$urUN_TzZmIGT8N=3mlR$YY8eJ|sFJA*_Au@OA?E~3ha%|V7y;Rk^BM}y
z1^OE0{@ckl#eKRzWPeGtEo`qJvl^FBuY9TT%BTA@LMHD*r_Zl<(}TQv
zcN}I8A`vrF*z&cJ~6T)6lychP0{oM`y9SOkH)kHfX0)Zpi0SPQ33M_Vac7L(guKc^f(z4
zz?kaD>gdsSye<)Kt+c~oAZxK1x#H*F8AtbovstiPP>28=hsv9K~U(r0!qL=
z$?Q|Zs~_Y&b)}`N^h}6Wu&GIy(|sApbVSx|W=?SV8*6s*j(%&T5OlVnHwSty*WRR$
zPw4S9*L>e>{f-jOBeN1AcVZX*J*~2D#^*k8EE==N*t{$wFJ=~`kbW(p9
zATFa(ySi2{vUHtflEfXAc1axh^x{rgADLAoI0d!T(uW9?yhbt|O%B}hu8Y;!!4)a6
z!z_JxYB6aSAU}{e($YuCp!(ie;Pb=_0v*ToQFAa|*yFO%esCvG0rtd5*H@y0;PJXMQk<20_EYx@EO_tuQw}1z5ff{bY
zu>c@7mEohA$o#sm@L+Ve>UOV2aA+Rkm3JOs>1~2lVFW@vGi*z$z^f4<=D5yj6vVm;
zKmCuT|E%wGHY06f6-FM~mA6u8gWtF72ZT)@6#M3k%-OeNI3Bk2Bl=OukVD$k)ZI@k
zy+%o}e%#W3(SJ?DIm|Y?8)p9%UK_bY==6l8pOh=4UMqv~+Gxyn=>ZGh1D=CPamvi7
zJJ-8ihzX{^(*``S&v}WwuGM*s4DK)+=>j&TY#Ja78?!D~pu(QF^b0}@E7fj@521L;
z(l5(q(;d!s)x7b&iS%oheqHZC3N_XS#z;RrH5z15TO=Ym8XU))`faa%s}sZ4t$|8e
zj0_DDU3kW*-_h>^uaNPcY9I|T;Hg(hx$}wk^o4^h4NbwJHb6b+FP4(B=hDz7nUV_J4VCBJZLQAx3ujo@hd1t$4q!bPBYXIN-{~y*+pyV|
z!=1S@7!KFL=1=aGufHy$Vd7E#Wa;;47#jYK2JlpM1W!B6i&{JG^)O6E7lL)SZLbF*
z=-}TT3Xj>L5okNljwfnudA%Q}@d$1;o{99t&j<1-A2ly(ihOuAf?qqJ>=!FwzW7mt
z>BAdF^To4$(~iWJ`68A#U;LoKeDQ+>^Tn?R@Ky4DAKwD`4S{LLdv<&WV6CAv3@h)A
zTC2f^=ztCyzO0=_ZlTc~G!~_CTWEX-O+abCEi`d6O-#}OTWCrLOvy08ZTVJ_@zaJ_QyJN%}D%C2+sjit8c*SxHzQIW$kou
zSqIf%xp`Y@K8g!btlLWUWl36c6ZvXJC23iiCrL+a!VCj3`=0m>f;KA;!H$U9$V1Jb
zSPOdBpnomi@2|rikCo?#X7zr~TGU|ZFa+ZpsR^^$fG#2=7xpCfqK-eyJ)qkP%;!+)
z5CciH$7Y&+1@-7426ijAP-ruS1Sbtjpm;YXa!~4r!zDTq2YeEyJ_QGLDh}tgG!bM;
zwCz
z59VAhC+%5}^8sI}TS45`WyQ41`LCT~Nop%A_S{{pOOv#28y%mdQB%HLT{b33&n4-lGR*o~lHS}b+}9bochOojI7#o}izPqA
z*iSm>^JTi7zMSMKyN7lLa0cI?`A4br{ss0QxN*MAM3eFYc^&Lu*3MRvadw8YCglh6
zJGkevJdf7xTx2>7vrqB{yd7M!te7uAN8cp(7nU#K-N5sce1ZIcFUf+9dq{2YqgM8Q(G%!&303Vj*BRaTYSy`YU;BV)q
zBsV)V=1H}Bk`=IWC$#!-i%jUn;TSwdyL8b-MP^%3IhTNC=zu42tyfSHhGO~nHcs3`
zepKMF#mkEFle{KSP}DEU>$maoWl26M!}h<>bnx=!&?{F!vNzC3x{~t7r~>mr+aC
z&?35yf^1hgs$s9HXTLg(3ssbR
z;5Mz7I+=^qnOv;S=HBW&E>V|oe|04fP}lQbxVjmpZs8F|#7}di*VSGl0e32&2I<~c
zt>)8FQWR9xdDCzgG19|M_8~ALL^6~8X_k0d)hL@*sgwKVw
z@bPgxmd`_50rqeopU)SNAJ}i;Kk$WAsHRd2UxYTx=*n@Vcd2r+peq^VyVgsedugHh
zZ-SSmd1-=|XM6c#!YlbBP|U}#PVvCd)upvYClT$2lkeb5mzA~itb?zT^3_Sc
zCSz23Vl%`Os3%v_Kt9+I!ZK=dHEMdf*^IHO*WQAVA-gpOCtDCm|~QF+~|BzcEuo43&NPOAG|RNl|&{s1i>
zrMf>xC1*hr4!_j
zvSvY`AO-pF%$fxq{4W!5a{P_(RF;Z6?ZK}DkidODSSRG=}XB2++k0a^;B#o3uz
z1$wHRRs7kj__J3*C9?`DnN^_Dc3`qjt0?H`Cq&b^tEirty%ct+BB0dUAc;x|Dp30_
zehwtmUN?|dHY6&YAp6OhJp!;e=FHT9%$hwq)Icn=yIB*JL8$DJS+i6idj@)@Actfi
zdv>Uy7`(TEL
zYmLvWRn(zi64icYEttq1fg)HxnZ~X7vnz#WPBjq_2TUs7eFGH+iXm6(z@?*-YLe$#
zDhd=Q)l@VVr5kUgA*se*(&$z?)HKX;P*PQ-S_1hw-80Z#CEd^=fT0i5rh-qPBcUA4>iBFxs0B$ImK`p#Aws{BZXu{7AQ%YI!9shmvpRFvYorPT~li
z%Ta`7t%$*nq1!n|n_vL$;{-jyYhWbS(kFP6{V!h6d3*vF^NBo+PvU*}WS$O1d@xk-
zk^DQnB0rPY@mZ+-9;)+fzMRkDKS8l>;tTjusMTlrLVgoHpYp~010ERv!k4N-z5*}L
zHsFEPmFfV#O3mbJ)Iz=%&q}USF}_}%h=)jL^G$d$aI?CdZ&BO%4)rMCsb1l`)CYXG
z`kL=iyLhYia#9y^yDs8wdH`?NgZN(DXFRCK^Fv6eKdcw=BYG)6s*mKybQ3?06zN~|
zG5lAgFQ3+@@H6@heinJR=k=xhg1(Yp)Hm>}`Zj(|-_5VR121=fn4wxV53XyizERCr3(y%YGR+gcVWBA
zfyT5-ezE5mG4(l!QUDfy1a5RH9&$wW2#9LUsG?a(b=0U1)dU$>A)<+LGs+=ThLobd
z3iYtt*Mf31tFIOHnAG7q&WC8mT}7}Ov)7I;nu*z^XLP1#Eqdlj+n7w-dQlrNs~ze%
z%y)v!C+2mB3_~F`D;wiz9Po^BgbB?UM_7s-VpKE65tWQ_Om%0BBf8VZG2jsm1BE0@
zJNCrbY-5cxHXF7#ZL+4rpR-ejD#I6nj<59
z9qJ5>Jk#tOm9tPeI}HXU88_sWfY6DKlQafr`ZX2ucTh#&)9(BujexJXFaJab;9YGM
z|3V9R7u6#iK1wMHsXR*HZR~pGqf?ci&QpbSnd(h9;C<@dst;{ded&JqmQSbvy^NQn
z@2lPDpK5pbn}hI1XfPM3J-DALg%7zWk5WT;oEpYc)ZSdJhVv3U^E^V0;Z=B_c?^8h
z6V!Mp)OaxH%#V7?Bef1`&A*CO-`WNlC#xgmoT~buwP4dNd6qD2cS>?t~o?1W?8S
zRmcIP7V@PRg2cEBxsnQ)jO(e8F-XA_q+#IEq>y_8$o*ZA%Q%wisSFIFUFTR4@up#(
z2F$YpljRm77m->g0|Uno
znO)1;H499}#ndVTQs(q4|Dj3M(i(UV$Eo>rx>`u*s5-h*)zh77F>O&x=zr89^rTuwZ>i<<
zfjX4Fgq{B$4}N{>C?2F5c&KXPec^r0Q7d?!YUV>!h*zprd>r2Co}$8h4qoM6g+Tsp
z)yns(I6sJow$C6Oe;-e1KT&J>TeV*0sbf_@9jEqC$E%U*M0KD#2_DVK@K#PyhpW?6
zi#i>(Gt}?!zdxw6)a6jFH$$!74Tbs$ROwS_eL-EM-d7i^&(tOATXm@}P?u?_K)sjR
zp!Zi->Z$4~JzHI^=c()Tq3U|QQr)1BS2yZ2)kb~3x>;YNZqZxRt$Mqm0
zri7Nllt?;t0GH@~C3=9)-=+s5D3PoxQc|6Bs_Fsir5*$~Jw*N0BZdl2o?(DX1vg{c
zAB&Wx7nzJDWRZgGSsjCKG8gJ`@~FRH&wtIDvA~_Nfbp|WfFn7Js0B$9O!N^Syjky=
z)I&Vm_1+3^cJ}ln^(f~v*5u7llk}M$yIGG<>U~S}{z-k{6||{CPhEy4PrIIuDaMy=
z(=!g1oPJrmp0!2qX=bf{K-Z?tq@M4JpoVq^Mv?SfMEY)-H^
z!#T;+gFv+@shjaxmDDZxv?g^N2#-qY)%X}J)+hA|>39vv>3)#q=Sis-;eo$Iebvjf
zJ05cGrCy^l^#&cN-lUo8Evi-T&>?tZ*?>2ZZR#Vq6dyyDKcTzuxbc4V89fHa`S0or
zdS30M*VK3Pq58qlT$28ZKF|l4OO*yXU7w;)1=Zy|eFX38L$97netBx-oCQ4x=S8yY
zOUoWZ^0ih^yNPC$CG}~8lKRXCc%vcuxgh!m8X-hab+zmBYg1(m8;t{4I%;%MUwE44
zLDG@bmt41N`>4z%!QSFmX+=muBQ)|*A%trP#A+W1)C`EyY_u(gsE7|%=AdK(DO72x
zz8o7uNJaBCZX~cpA3~%J$OCG#wVvep8UN>5dMZx_A^cRJuhdt$8yt$S{PW;MG9Iej
zMG;Oibx%{E|ERC-0->+z3^5=J;yQhO7YG{P8Del2#0~n!E)eRA&JaVhApWE`c7>%tssn>7UH#0q;@7#{amJYs&hLmmB_ejgs8Vu;r+n0fF
zJKFXAN&V2MZTc~E<8k$dU9SoIdd%IEx%JYcsSh6M_19x*PhF1l8%GmSpRV^Ycnb^m
zL7MyT`YFKeNqzM{Pk5xOw+;sC&;EZv{W+li;;*8*e1Gz8}{bazka
zY0&l4A*}}i>k1mCXV6I0_t8}b+frv4LtaA8z#+L1xUYUigd|OJr|%gcm?pX3B{`lO
zxOm_1;$8LM;Qbu%eld-=yDNyjv#aMa9Aj=P^=xcp4mMJajm*VH4#r02U?a6uspn;F
zrYgOesfK^L-;DHiw;B1}zq^?+_{zV6d-bb?hn;T-MvkfSi%jS`BxRPGl~F75%T2ip
zI>pEgQ6F3}>7;&tGflyNN&Qh$f0miW7(88%eJ!REy(BdgwA+`mlKu(_A;a(b2h#dS
q{j>f>??MaiVYvZc{NqdA?^VthdRTcp6!7Gs?jw!=mxxRGs{aMz(UQ#o
literal 20683
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
diff --git a/bin/fenetres/evaluate$1.class b/bin/fenetres/evaluate$1.class
index ba7b04ee7c25c693cc3d2b1adf06e3427acbf543..59341c3c9e5190f873cf16ce4d4ff0837c820806 100644
GIT binary patch
delta 47
zcmV+~0MP&13fc;=yaXNS00{x@038AD03`wM0678h07L=t089b$09pa)li36~0r`^>
F1xSK%56l1n
delta 47
zcmV+~0MP&13fc;=yaXNJ00{x)038A403`wD0678Y07L=k089bt09paxli36~0q~O&
F1xR~54|@Or
diff --git a/bin/fenetres/evaluate$10.class b/bin/fenetres/evaluate$10.class
index ec1ed8a6ee1b23a6353efd66c8054408f135d586..d63e66741b3b177fc676e4d08225058cd7c6fedc 100644
GIT binary patch
delta 59
zcmX@YdxUqxHCEAU44h2283dW`FsL%!Ww2zr$Kc3xZSrf@Xwk&GcY$G+QPBDt{5c
diff --git a/bin/fenetres/evaluate$11.class b/bin/fenetres/evaluate$11.class
index 4df4a7628f3e363663d862b87637bf455dd93290..4af77cc9fb7f62676922c7a1b5955b2f1120b56b 100644
GIT binary patch
delta 56
zcmaFI{f>KsEvxKj22Q3Q41!EQ8C02mF<3JFW^iHp!{Ed8mm!Mj^W-R2CoX121{P)}
M25x5N$;((h0PqYC82|tP
delta 56
zcmV-80LTCC3+@ZBJp~==00{!`01*Q403`zP067Bk07L@w089e(09pd-lUfBr3Ig~5
O1OoX03j+F+rUgg
PsstGXnS>^rv3URhH!%pJ
delta 60
zcmeyz^N(l4AyzrY?+l!be;8yL|1zjD{$sFY{LkRR#K7Rg#K;iE_hA1ZK$=f(K8)`9dFzGOe
zG3heMFzGQUGU+p@F&Q%GF&QzqGZ`}^Gnp{tGMO?IFqtt_Fj+EGGg(cZ#hC~I1Befy
delta 95
zcmew@{9Aa#Ob%Hg22Lh%23aNv2300W21_O>1{Wr21|KFFhA1YX$=f(K8!9qzFex*L
zF{v=fFsU*qGO01BF=;U9F=;ZmGifm-GifvAGU+fBFzGT>Fc~mZGZ{{v#hC~I;jj+m
diff --git a/bin/fenetres/evaluate$4.class b/bin/fenetres/evaluate$4.class
index 8957f1888e939932851be76e3afc29d90eae5038..3850d7a3323ebed2f8e8b3f3e78dea72de94a9e0 100644
GIT binary patch
delta 67
zcmZ3$w}5Yh2b-)D11FOkgDjIfgDR5;gC&zEgA0=vgAbE8Lll$KgBw%q(it3_<_^
delta 62
zcmca4a7kc82D@Yk11D1?gCJ8BgDO)rg8@?vg9TG8gBw%G(4r3(Wuk
diff --git a/bin/fenetres/evaluate$6.class b/bin/fenetres/evaluate$6.class
index df121fa058dc93c21eb75a3cff3b077e0fb9c581..d154768169e493e8a3e609f45a345ec1171e3e94 100644
GIT binary patch
delta 55
zcmZ3&vxH|uBCBi#11D20gCJ8KgDO)!gC$b~g9}q5gAY>^LljfRKrgjDq
Krq0QiSpxxG=?v2V
delta 55
zcmZ3&vxH|uBCBjZ11D1ngCJ8WgDO)QgC$crg9}pygAY?BLljf~22Q3`41!Fn8C03pFz7NZojjM>f^qZYYs?-1ueS;>
delta 35
rcmbQoF^^+I53}GL22Q4h41!FH7*v@SGw3qSnLL--f^pU4Ys?-1tTPGu
diff --git a/bin/fenetres/evaluate$9.class b/bin/fenetres/evaluate$9.class
index a6613d2fb890e487a933c991516d4a78250d78ff..d1fc52d58ef8401c7466ce13f7f096da9bd932ef 100644
GIT binary patch
delta 59
zcmV-B0L1^24w4SAO9maf00{!W01*Pf03`y!067A}07L@A089eJ09pdNlV}D^4afin
R0?Pml0?hyv0?w1c22s~j5Gw!x
delta 59
zcmV-B0L1^24w4SAO9maW00{!N01*PW03`yr067A=07L@1089eA09pdElV}D^4Zi>e
R0>S_c0>l6m0>zWT22smj55E8a
diff --git a/bin/fenetres/evaluate.class b/bin/fenetres/evaluate.class
index 621ab5660fda5fc2ffdc3577a3c9d17f75e71af6..5d094de20049a8fcaf0e19431a7c33363ad4e958 100644
GIT binary patch
delta 451
zcmXv~OKTHh6g~GOP3-4Lr=qB&2%WU3S#=?GGg7f2)Y{_0g&V<0Mj6^n+Dr;A1oaoV
z_!gpjw?Yz#kcAsT@cpjOB#qUYR&6bAT#4UEd$`;K=UndL-akR7pdS9M-vuzj^|D&-
zKi+lTE9N}~;S-Bb;R=#DKb$Fqo?y##Hh(Uc9T-w_hc7I?!~=mHdZp29(JP%Sgnr2{
z1d6XYpX3|e@1%CW#iBr6@JbVY;OFP^k@?=@2Yt#JNwnBbazWp4_QgJPQQvbGGEEz9
z6#mWPGq^noE*U{!jRk>M9G%XFp%*6kLold&(!2E8bV9GBReV*jcT=eD9GDVO)vJSj
zT?aa_3G^|A{XB|;JcA>=h!ebq)4YWo>zLs@F7bEue&)*7%jo7KxDXsRFF9s7LT?4*
zH?b{V#dt-QYJ6NaVhj_eZ$})E1`^VQk``=fW76m*Q`Y}aiEXRsl#QKkWEt$JNIh2L
z^9sgH)%dE$cV+0=VJG#`*yJZR3|r(eA=mv*#h6fH$JM)v4N57>qfEd4WvNP)HU5lrd6Y;>L6o;(nJXIsc
zfL7(Xoi!CTyn`2L3dq%!^@U_Qnc7H6R(YlKT4jxx_P{4QAJu^|ZhNMwOr!3;cOoJo
z*wlH9NWaF0s`)*lty=z&=oVao9U&Zr{V`up(1cTb!$&tJID;uJVwM@qa~n(CLxMSE
zS-~c|g+^$rFX)v2j}VAj{t?h>z>^mxTahPu%vmY&tjJ4cP6xa<79?+ZXRU7e)M4Wb
WU-`zC8V>I|-r3;?hWM$<;m{v;i&qu^
diff --git a/bin/fenetres/setting$3.class b/bin/fenetres/setting$3.class
index ff7792a8a4b671a7da9cac25371a2e2ea8f5eb60..2fe7811743e7067c3e030471ab9e483e50a7254e 100644
GIT binary patch
delta 272
zcmXAiy-EX75QV?lP41ADfSYKcSV%&!5G&LBUGUXrUlzt`sLEM-9w>*Lk&LlB^{MHKcy8}@#|VEX6A;(_K(rypR{`W%wq6D
z8f28ro&D!1(`U*O*kKo;K$AU&2#npLVJc*hHTF3m#|R4?(jw0|GaQ-cI5v6!`60zA
lqMRthN==y*8|5q-i>sc|{*xUpxUw#?Yu$zJyS57G`~o{oE>Hjf
delta 398
zcmZvW%PvDv6o&u3+n%K-nzpJDA|aK=K%yZbq6slD5LyWhM)urlE9>5-X
z0walPLSi6Hjm^D)CosS&Q#;w0f3JUi>%Ryzg8J*%;}d{coHzA1mso4PyQaj14hvaA
zMj(_iDn`sI#uk?6t7+4AtYV=PIRpg!cF8I@tB#S*rb9jda0ntVVPS6BXc2%(!5laWV(8D8w5h<-?B%pV;v4VJUnZWXO%fumDMhvggxd&Aiudl1VPv*49*auggC2s`^);|7B>#r
ZDpBLHU{%Kn&iJKs0Ks>AHF!(Ze*o6+Q0M>v
diff --git a/bin/fenetres/setting$4.class b/bin/fenetres/setting$4.class
index e8b863439c0c4cb1ec4c469bb072539940133a9d..e7f2fb4d49a24479ae6e5e13afc4d409e644cfa5 100644
GIT binary patch
delta 147
zcmWN^y$V5b0EY4Bypxki7|vj^D3giB@fC7>rnndX
z<@xn^j^~Vewl#74cEV~-31~)GbCOz+(vq}RWV9xy4S9JKw4&06izWNab+JsDh#E65N4Mwa#pAjl0
delta 147
zcmWN^JqrN=0EhAC{*y~23^!OT%4A|O`2+@oPoOMTWs)+Q6|2RlE~5x{iM-2sIT?Hr
zw>-Zd$8xO6z%*v|&`cTaIUy~GYDrovGFp?BOHLaK+EUbxlJ=B!prRvHou~!YgKy|U
sQ&(EL(FyG7PG24)Js9iBR4-h;Im^e>7hgZ(K$l3+4+)ZB=fg4M57mPz(*OVf
diff --git a/bin/fenetres/setting$5.class b/bin/fenetres/setting$5.class
index 2d4ff4daee9b3c9edd6575760ee3c539f3fd3dee..cf02ae1f645358a8404a1f88d890f737011c52c9 100644
GIT binary patch
delta 185
zcmV~$y)J_R7>42Jy&tq+=~uBBbZc0R2F9L%7$pv%=1zu2PoRT^*sVlQz(hEJT1g{R
ztNyjL!F9EYt>Q^HiFUJ>{8GD9j(ep%Xr7KrJZhP)R_LkBlh)~Li)U@~qAIVd^QH#x
zI^aV`e5%Qp&KT&5p|1JXEkEir(ui?n`HKZBRvocvV#kg{PsFJweoF#R_
cqI0ZynhnoTah_eL?7P6RXF2!WUL$|;4`{+Q0{{R3
delta 185
zcmV~$J5B-t6a~=x?hVL*jH38Spd;8)Qeepjh^2`Oz?#a!=mw^+f!NzZWCK(XSpc+H
z8e~8Ohd-XvOZU=^p<`doZ)eBHA)*|?rH>1ak>Lb6{vgjOiu^^1Gu&~Gd;X!q0MA^&
z;}SKl@WwTo+@QrRy4<19Jw65aGOR_5C}b&xt)K(DRm2|T*sG%Uu9$u3&<2WIa3z2@y4iXf8Ub0g@RHXLQz1pfV9xl0V@rc6G>D=G>#yGLR1nZp$p|WHwTuM
ziZ4u=;tQH<3gh^etEOTvwuEJAwW2R9TTRO7Q*&j%&(DYZx~^yNrVZY-u7cvo^LW}D
zKpw}m1dB^!;}Ag~Mll|v`3Mr2fMh0ydyCT;O2#mzAc_+a!&LY<3FG)ECi5|*GYy$c
zM}UuGHm6`Nr(yx0Kp``+g43{y)A0)ZsAT{R%)%ySqlq)Hjn7~opG6yI;wWd~ea^-i
zK93umgS(t-(ag0cInNd|&+6uIzHMf{HFKdI;37N80z1pac9Dg4nMJiU%n85W;^(|zu0n@kv
zel{YTAw0)T&Z!CcY(^2cqJ(cdr){X>cGU1)=d=TL-08e_VI%jTnR~I5`_Rf(?B{+Q
zEnJ!)NTkbsk3_PobZuF~Cmz&Mw?xH-;F-KRknbJcs){
zZxOs;!+F_8@`@#}$5MFJ()g)m@N>)N7nZ|omdh_Kk6+m`Ubiy#S{3`OnqONzZ&)M0
zu`T@8nt00+ck?@IAz4fjIt&MBYUz
z|8fuiJAAt$U?JXf_kUf)`-lM9Da*6nvmmbZQdLX)<_0=`HQ6
zKZ^E4ddeXL+K$h=h*TvK`*#tzT;TnI2NK*i%_WoyskoQ
z(GqM|5!$uX?JUDt72}$MxTWRzO(hsoDgINL#b~9)tK2eFVScT$993G8s;ojUS-q+)
yq?hd-y=sTF#!jflE+*+U>rt)s=?&}GTDz?}8&bVzTIY?>dha1^2!C8X)&2)tW7A9k
delta 911
zcmWNOdrZ}J7{;IX_dJ4Hp;B0of#78-oHSHIA}?4@M}ikZIwuf8Ig&|KCzc@`W0Gun
zDRIh_6m^7VTg@X*nK)BdSreK?w?(Zi8!fkXy3Ms!-@o5Kp3mp=-W;%-1NQC;|A=1X
zdPB%(Qft6pmXM4XreHM3<4&ex9Mdp?lOlcobcUy57^fkQ>4;|r66r%Sr(+6dAcGHJ
zCNq)ESy;%~Sj;RG@<9}F4puV
zf>X@LH9m&lSYTsVXqjAQE4kc4i@4I7SY$0MwgX&c$5~?Ce8PI@xAz#ZODwg1uC^%G
zcnPfVvRUZ`xXx>2&^yfa-ep#MKXXImeA!Q4I0TQI5X*Y!vKdKiKq?!Z>K6F;GG?&}
zS=@>oHe&%_aZWo>z?~@OE|l^$=d>F^wxWi6oYP)}xX*dDp@9d`!gjpQH_*m|*v}3e
zYbxh4*;^SNS&j8Nnb=;X1qV3s2)$oj!#>Mnzb)Y>md|Te!cVQ7pIMLtR?RQ0j$c|M
zzp`e2ZQJ;brR?FLwewp$%I~a`-`h$4;6h$^A%Aoshawj$?y$tDi}X82@DJR>Kas+}
zFqwb5hu@0asLZyo44#Ns4MV(Qkf>OU*Knk1Br(4Yxu(M0UhB<$5>v}p>CXey3t8crw!@5qPKx*t5F
z%+`)|=f>nhde|Y%b@THuUAe6rtIBP0q_3*L3l}0z%N*Nsq-upb7CDZ`9Y-lElW>Xo}RX1ZL~_&
zSe>46O=|5`J!gmXymcvLJ!yKuE~(D?^`Z@Glikou7S(3Y)ZmR&qc>Jfk>2VV_CJ|Q
B)oTC%
diff --git a/images/accueillChargeEvaluation.svg b/images/accueillChargeEvaluation.svg
new file mode 100644
index 0000000..9d657f9
--- /dev/null
+++ b/images/accueillChargeEvaluation.svg
@@ -0,0 +1,671 @@
+
+
diff --git a/src/actions/actExit.java b/src/actions/actExit.java
index 829dd52..ce00f7f 100644
--- a/src/actions/actExit.java
+++ b/src/actions/actExit.java
@@ -1,15 +1,26 @@
package actions;
+import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
-import javax.swing.JOptionPane;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import calc.commandes;
+import fenetres.baseDonneesEvaluations;
import fenetres.create;
+import fenetres.evaluate;
+import fenetres.mainApp;
+
+
public class actExit extends AbstractAction {
@@ -21,18 +32,156 @@ public class actExit extends AbstractAction {
putValue( Action.SHORT_DESCRIPTION, "Quitter (CRTL+Q)" );
putValue( Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_DOWN_MASK ) );
}
-
/**
- *
+ * Fermeture de l'application analyseWriter.
*/
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
- if(JOptionPane.showConfirmDialog(null,"Voulez-vous quitter analyseWriter ?", "Quitter", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE)==JOptionPane.YES_OPTION) {
- create.getInstance().dispose();
- }
+ int H = 0;
+ if(commandes.evaluationChargeEnMemoire!=null) H=commandes.evaluationChargeEnMemoire.hashCode();
+
+ if(H==commandes.hashCodeEvaluationSave){
+
+ // Définir les dimensions de la boîte de dialogue
+ int dialogWidth = 420;
+ int dialogHeight = 260;
+
+ // Chargement de l'icône personnalisée
+ ImageIcon customIcon = new ImageIcon(create.class.getResource("/resources/bye-bye.png"));
+
+ // Création du panneau pour contenir l'image
+ JPanel panel = new JPanel(new BorderLayout());
+ JLabel labelImage = new JLabel(customIcon, JLabel.CENTER);
+
+ // Ajouter l'image au panneau
+ panel.add(labelImage, BorderLayout.CENTER);
+
+ // Définir les boutons personnalisés
+ JButton buttonYes = new JButton("Quitter");
+ JButton buttonNo = new JButton("Annuler");
+
+ // Ajout des boutons à un panneau
+ JPanel buttonPanel = new JPanel();
+ buttonPanel.add(buttonYes);
+ buttonPanel.add(buttonNo);
+
+ // Ajouter le panneau de boutons au panneau principal
+ panel.add(buttonPanel, BorderLayout.SOUTH);
+
+ // Affichage de la boîte de dialogue
+ JDialog dialog = new JDialog();
+ dialog.setTitle("Quitter");
+ dialog.setModal(true);
+ dialog.setContentPane(panel);
+ dialog.setSize(dialogWidth, dialogHeight);
+ dialog.setResizable(false);
+ dialog.setLocationRelativeTo(null); // Pour centrer la boîte de dialogue à l'écran
+
+ // Définir le bouton par défaut
+ dialog.getRootPane().setDefaultButton(buttonYes);
+
+ // Actions des boutons
+ buttonYes.addActionListener((ActionEvent evt) -> {
+ baseDonneesListesEtudiants.ferme(false);
+ baseDonneesEvaluations.ferme();
+ create.fermeCreate();
+ evaluate.ferme();
+ mainApp.ferme();
+ dialog.dispose();
+ System.exit(0); // Fermer l'application
+ });
+
+ buttonNo.addActionListener((ActionEvent evt) -> {
+ System.out.println("L'utilisateur a choisi de ne pas quitter.");
+ dialog.dispose();
+ });
+
+ // Afficher la boîte de dialogue
+ dialog.setVisible(true);
+
+ // Placer le focus sur le bouton "Oui"
+ SwingUtilities.invokeLater(() -> buttonYes.requestFocusInWindow());
+
+
+ }else{
+
+ // Définir les dimensions de la boîte de dialogue
+ int dialogWidth = 420;
+ int dialogHeight = 260;
+
+ // Chargement de l'icône personnalisée
+ ImageIcon customIcon = new ImageIcon(create.class.getResource("/resources/enregistrer_modifications.png"));
+
+ // Création du panneau pour contenir l'image
+ JPanel panel = new JPanel(new BorderLayout());
+ JLabel labelImage = new JLabel(customIcon, JLabel.CENTER);
+
+ // Ajouter l'image au panneau
+ panel.add(labelImage, BorderLayout.CENTER);
+
+ // Définir les boutons personnalisés
+ JButton buttonYes = new JButton("Quitter");
+ JButton buttonNo = new JButton("Annuler");
+ JButton buttonSave = new JButton("Enregistrer puis quitter");
+
+ // Ajout des boutons à un panneau
+ JPanel buttonPanel = new JPanel();
+ buttonPanel.add(buttonSave);
+ buttonPanel.add(buttonYes);
+ buttonPanel.add(buttonNo);
+
+
+ // Ajouter le panneau de boutons au panneau principal
+ panel.add(buttonPanel, BorderLayout.SOUTH);
+
+ // Affichage de la boîte de dialogue
+ JDialog dialog = new JDialog();
+ dialog.setTitle("Quitter");
+ dialog.setModal(true);
+ dialog.setContentPane(panel);
+ dialog.setSize(dialogWidth, dialogHeight);
+ dialog.setResizable(false);
+ dialog.setLocationRelativeTo(null); // Pour centrer la boîte de dialogue à l'écran
+
+ // Définir le bouton par défaut
+ dialog.getRootPane().setDefaultButton(buttonSave);
+
+ // Actions des boutons
+ buttonYes.addActionListener((ActionEvent evt) -> {
+ baseDonneesListesEtudiants.ferme(false);
+ baseDonneesEvaluations.ferme();
+ create.fermeCreate();
+ evaluate.ferme();
+ mainApp.ferme();
+ dialog.dispose();
+ System.exit(0); // Fermer l'application
+ });
+
+ buttonNo.addActionListener((ActionEvent evt) -> {
+ System.out.println("L'utilisateur a choisi de ne pas quitter.");
+ dialog.dispose();
+ });
+
+ buttonSave.addActionListener((ActionEvent evt) -> {
+ System.out.println("L'utilisateur a choisi d'enregistrer.");
+ // Appeler l'action d'enregistrement
+ new actSaveEvaluation().actionPerformed(null);
+ baseDonneesEvaluations.ferme();
+ create.fermeCreate();
+ evaluate.ferme();
+ dialog.dispose();
+ System.exit(0);
+ });
+
+ // Afficher la boîte de dialogue
+ dialog.setVisible(true);
+
+ // Placer le focus sur le bouton "Save"
+ SwingUtilities.invokeLater(() -> buttonSave.requestFocusInWindow());
+ }
}
}
diff --git a/src/actions/actNewFichierAnalyse.java b/src/actions/actNewFichierAnalyse.java
index d2348a2..f74c76c 100644
--- a/src/actions/actNewFichierAnalyse.java
+++ b/src/actions/actNewFichierAnalyse.java
@@ -17,6 +17,7 @@ import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import AnalyseCalc.Classeur2;
+import calc.commandes;
import fenetres.evaluate;
import xml.LecturesDossiers;
import xml.ecritureFileXML;
@@ -42,7 +43,7 @@ public class actNewFichierAnalyse extends AbstractAction{
JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle("Choisir un fichier ODF");
- chooser.setCurrentDirectory(new java.io.File(calc.commandes.path));
+ chooser.setCurrentDirectory(new java.io.File(commandes.path));
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
FileNameExtensionFilter filter = new FileNameExtensionFilter("Format ODF", "ods");
chooser.setFileFilter(filter);
@@ -53,12 +54,12 @@ public class actNewFichierAnalyse extends AbstractAction{
System.out.println("getSelectedFile() : " + chooser.getSelectedFile().getAbsolutePath());
// réinitialise les commandes
- calc.commandes.initialiseParametresSettingsProprietes();;
- calc.commandes.fichierAnalyseValide=true;
- calc.commandes.path = chooser.getCurrentDirectory().getAbsolutePath();
- calc.commandes.PathFilenameAnalysis = chooser.getCurrentDirectory().getAbsolutePath();
+ commandes.initialiseParametresSettingsProprietes();;
+ commandes.fichierAnalyseValide=true;
+ commandes.path = chooser.getCurrentDirectory().getAbsolutePath();
+ commandes.PathFilenameAnalysis = chooser.getCurrentDirectory().getAbsolutePath();
String cheminVersFichier = chooser.getSelectedFile().getAbsolutePath();
- calc.commandes.nameSujet = chooser.getSelectedFile().getName();
+ commandes.nameSujet = chooser.getSelectedFile().getName();
try {
@@ -66,44 +67,54 @@ public class actNewFichierAnalyse extends AbstractAction{
//constructionNodeAvecString A = new constructionNodeAvecString();
new transformeXLMtoNode(LecturesDossiers.getEC().getListeContentTableur().get(0), false, null);
- calc.commandes.sujet = transformeXLMtoNode.getNodeRoot();
+ commandes.sujet = transformeXLMtoNode.getNodeRoot();
- calc.commandes.sujet.getAttributs().put("analysis_filename","sujet.xml");
-
-// Ecriture.ecritureNodeEnXML(calc.commandes.sujet, "sujet", calc.commandes.path, Ecriture.typeFichier.fichier_etudiant);
+ commandes.sujet.getAttributs().put("analysis_filename","sujet.xml");
+ commandes.sujet.removeAllEnfantWithThisName("text:change-start");
+ commandes.sujet.removeAllEnfantWithThisName("text:change-end");
+ commandes.sujet.removeAllEnfantWithThisName("text:tracked-changes");
+ commandes.sujet.removeAllEnfantWithThisName("text:change");
+ commandes.sujet.removeAllEnfantWithThisName("office:document-content");
-// Ecriture.ecritureNodeEnXML(ClasseurAnalyse, "ClasseurAnalyse", calc.commandes.path, Ecriture.typeFichier.fichier_etudiant);
-
-
- //calc.commandes.sujet = ecritureSujet.nodePourEcritureSujet(calc.commandes.sujet,b,0);
-
- calc.commandes.sujet.removeAllEnfantWithThisName("text:change-start");
- calc.commandes.sujet.removeAllEnfantWithThisName("text:change-end");
- calc.commandes.sujet.removeAllEnfantWithThisName("text:tracked-changes");
- calc.commandes.sujet.removeAllEnfantWithThisName("text:change");
-
-
-
- ecritureFileXML.write(calc.commandes.sujet, "sujet.xml");
- Classeur2 ClasseurAnalyse = new Classeur2(calc.commandes.sujet,0,ecritureFileXML.typeFichier.fichier_analyse);
+ ecritureFileXML.write(commandes.sujet, "sujet.xml");
+ Classeur2 ClasseurAnalyse = new Classeur2(commandes.sujet,0,ecritureFileXML.typeFichier.fichier_analyse);
- calc.commandes.sujet = ClasseurAnalyse.convertClasseurToNode(ecritureFileXML.typeFichier.fichier_analyse);
- ecritureFileXML.write(calc.commandes.sujet, "sujet2.xml");
+ commandes.sujet = ClasseurAnalyse.convertClasseurToNode(ecritureFileXML.typeFichier.fichier_analyse);
+ ecritureFileXML.write(commandes.sujet, "sujet2.xml");
-// Ecriture.ecritureNodeEnXML(calc.commandes.sujet, "sujet2", calc.commandes.path, Ecriture.typeFichier.fichier_etudiant);
+// Ecriture.ecritureNodeEnXML(commandes.sujet, "sujet2", commandes.path, Ecriture.typeFichier.fichier_etudiant);
// new verificationFichierAnalyse();
- if(calc.commandes.fichierAnalyseValide) {
- calc.commandes.sujetSauvegarde = calc.commandes.sujet.clone();
+ if(commandes.fichierAnalyseValide) {
+// commandes.sujetSauvegarde = commandes.sujet.clone();
+// fenetres.create.getTree().setVisible(true);
+// fenetres.create.constructionTree();
+// fenetres.create.getTextNodeSelect().afficheChargementFichierAnalyse();
+
+
+ commandes.sujetSauvegarde = commandes.sujet.clone();
+
+ commandes.evaluationChargeEnMemoire = null;
+ commandes.evaluationsBase=null;
+ commandes.IndexEvaluationCharger=-1; //Car ce n'est pas une évaluation
+ commandes.NameEvaluationCharger = "";
+ commandes.analysis_filename = commandes.sujet.getAttributs().get("analysis_filename");
+
+ commandes.initialiseParametresEvaluation();
+ commandes.initialiseParametresSettingsProprietes();
+
fenetres.create.getTree().setVisible(true);
fenetres.create.constructionTree();
- fenetres.create.getTextNodeSelect().afficheChargementFichierAnalyse();
+ fenetres.create.getTextNodeSelect().afficheChargementFichierAnalyse();
+
+
+
}else {
fenetres.create.getTextNodeSelect().setText("Le fichier n'est pas valide
");
- calc.commandes.sujet = new node();
+ commandes.sujet = new node();
}
} catch (ParserConfigurationException | SAXException | IOException | CloneNotSupportedException e1) {
@@ -118,7 +129,7 @@ public class actNewFichierAnalyse extends AbstractAction{
}
- calc.commandes.ecritCode = true;
+ commandes.ecritCode = true;
}
diff --git a/src/actions/actOpenBaseListesEtudiants.java b/src/actions/actOpenBaseListesEtudiants.java
new file mode 100644
index 0000000..94157f3
--- /dev/null
+++ b/src/actions/actOpenBaseListesEtudiants.java
@@ -0,0 +1,38 @@
+package actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.ImageIcon;
+
+import baseListesEtudiants.recupeNodeBaseListesEtudiants;
+import fenetres.create;
+import calc.*;
+
+public class actOpenBaseListesEtudiants extends AbstractAction{
+
+ private static final long serialVersionUID = 1L;
+ {
+ putValue( Action.NAME, "Ouvrir la base de données des listes des étudiants" );
+ putValue( Action.SMALL_ICON, new ImageIcon(create.class.getResource("/resources/baselisteetudiantmini.png")) );
+ putValue( Action.LARGE_ICON_KEY, new ImageIcon(create.class.getResource("/resources/baselisteetudiant.png")) );
+ putValue( Action.SHORT_DESCRIPTION, "Ouvrir la base de données des listes des étudiants" );
+ }
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ new recupeNodeBaseListesEtudiants();
+ if(commandes.listesEtudiants!=null) {
+ int index = -1;
+ if(commandes.nodeCSV!=null) if(!commandes.nodeCSV.isVide()) if(commandes.nodeCSV.getAttributs().get("nameListStudent")!=null) {
+ String nameList = commandes.nodeCSV.getAttributs().get("nameListStudent");
+ for(int i = 0 ; i < commandes.listesEtudiants.getEnfants().size(); i++) {
+ if(commandes.listesEtudiants.getEnfants().get(i).getAttributs().get("nameListStudent").equals(nameList)) {
+ index = i;
+ }
+ }
+ }
+ baseDonneesListesEtudiants.getInstance(index);
+ }
+ }
+}
diff --git a/src/actions/actSaveEvaluation.java b/src/actions/actSaveEvaluation.java
new file mode 100644
index 0000000..e976db4
--- /dev/null
+++ b/src/actions/actSaveEvaluation.java
@@ -0,0 +1,55 @@
+package actions;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.ImageIcon;
+import javax.swing.JOptionPane;
+import javax.swing.KeyStroke;
+
+import baseEvaluation.creerNouvelleEvaluation;
+import baseEvaluation.recupeNodeBaseEvaluations;
+import calc.commandes;
+import xml.node;
+
+
+
+
+public class actSaveEvaluation extends AbstractAction{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ {
+ putValue( Action.NAME, "Enregister l'évaluation" );
+ putValue( Action.SMALL_ICON, new ImageIcon( getClass().getResource("/resources/saveEvaluationmini.png")) );
+ putValue( Action.MNEMONIC_KEY, KeyEvent.VK_S );
+ putValue( Action.SHORT_DESCRIPTION, "Enregistrer l'évaluation dans la base des évaluations. (CTRL+S)" );
+ putValue( Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_DOWN_MASK ) );
+ }
+ @Override
+ public void actionPerformed(ActionEvent e) {
+
+ if(!commandes.sujet.isVide()) {
+ if(commandes.IndexEvaluationCharger!=-1) {
+ new creerNouvelleEvaluation(commandes.evaluationChargeEnMemoire);
+ new recupeNodeBaseEvaluations();
+ }else {
+ // n'a pas été chargé depuis la base de données.
+ String name = "Nouvelle évaluation";
+ name = JOptionPane.showInputDialog(null,"Donner un nom à cette évaluation ?",name);
+ if(!name.isBlank()) {
+ new creerNouvelleEvaluation(new node(), name, false,false);
+ commandes.IndexEvaluationCharger=0;
+ commandes.NameEvaluationCharger=name;
+ new recupeNodeBaseEvaluations();
+ }else {
+ JOptionPane.showMessageDialog(null,"L'évaluation encours n'a pas été enregistrée\ndans la base des évaluations.");
+ }
+ }
+ }
+ }
+}
diff --git a/src/baseEvaluation/CreerBaseParDefautEvaluation.java b/src/baseEvaluation/CreerBaseParDefautEvaluation.java
index 739f200..53af91d 100644
--- a/src/baseEvaluation/CreerBaseParDefautEvaluation.java
+++ b/src/baseEvaluation/CreerBaseParDefautEvaluation.java
@@ -40,7 +40,7 @@ public class CreerBaseParDefautEvaluation {
Path outputFilePath = file.toPath();
BufferedWriter fichier = Files.newBufferedWriter(outputFilePath, StandardCharsets.UTF_8);
try {
- fichier.write("");
+ fichier.write("");
fichier.close();
return false;
} catch (IOException e) {
diff --git a/src/baseEvaluation/creerNouvelleEvaluation.java b/src/baseEvaluation/creerNouvelleEvaluation.java
new file mode 100644
index 0000000..42c9c34
--- /dev/null
+++ b/src/baseEvaluation/creerNouvelleEvaluation.java
@@ -0,0 +1,121 @@
+package baseEvaluation;
+
+import java.text.ParseException;
+import java.util.Date;
+
+import javax.swing.JOptionPane;
+import calc.*;
+import xml.node;
+
+public class creerNouvelleEvaluation {
+
+ boolean majBase = false;
+ boolean importation = false;
+
+
+ /**
+ * Mise à jour d'une évaluation.
+ * @param evaluation
+ */
+ public creerNouvelleEvaluation(node evaluation) {
+ this.majBase=true;
+ this.importation = false;
+ nouvelleEvaluation(evaluation, evaluation.getAttributs().get("name"));
+ }
+
+ /**
+ * Pour réaliser une mise à jour, ou une création, ou encore une importation.
+ * majBase = true pour une mise à jour.
+ * majBase = false pour une création.
+ * importation = true = importation d'une évaluation.
+ * @param evaluation
+ * @param name
+ * @param majBase
+ * @param importation
+ */
+ public creerNouvelleEvaluation(node evaluation, String nameEvaluation, boolean majBase, boolean importation) {
+ this.majBase = majBase;
+ this.importation = importation;
+ nouvelleEvaluation(evaluation, nameEvaluation);
+ }
+
+
+ private node nouvelleEvaluation(node evaluation, String nameEvaluation) {
+
+ if(nameEvaluation==null) {
+ JOptionPane.showMessageDialog(null, "L'évaluation ne possède pas de nom");
+ return evaluation;
+ }
+
+ // création du nouveau node evaluation
+ evaluation.setNameNode("evaluation");
+
+ // La date est modifiée à la création de l'évaluation.
+ Date aujourdhui = new Date();
+ try {
+ if(!majBase && !importation) {
+ //nouvelle évaluation
+ evaluation.getAttributs().put("date", calcul.formatDateWriter.DateLibreOffice(aujourdhui));
+ evaluation.getAttributs().put("dateModification", calcul.formatDateWriter.DateLibreOffice(aujourdhui));
+ evaluation.getEnfants().add(commandes.sujet);
+ commandes.evaluationChargeEnMemoire = evaluation;
+ }else {
+ //Mise à jour
+ if(!importation) evaluation.getAttributs().put("dateModification", calcul.formatDateWriter.DateLibreOffice(aujourdhui));
+ }
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+ // informations de l'évaluation en création ou MAJ
+ evaluation.getAttributs().put("version", commandes.version);
+ evaluation.getAttributs().put("name", nameEvaluation);
+ evaluation.getAttributs().put("PathFilenameAnalysis", commandes.PathFilenameAnalysis);
+ evaluation.getAttributs().put("path", commandes.path);
+ evaluation.getAttributs().put("fichierStudentMoodle", String.valueOf(commandes.fichierStudentMoodle));
+ evaluation.getAttributs().put("sansFeeback", String.valueOf(commandes.sansFeeback) );
+ evaluation.getAttributs().put("noDetail", String.valueOf(commandes.noDetail) );
+ evaluation.getAttributs().put("noNote", String.valueOf(commandes.noNote) );
+ evaluation.getAttributs().put("noAfficheProgression", String.valueOf(commandes.noAfficheProgression) );
+ evaluation.getAttributs().put("zipfeedback", String.valueOf(commandes.zipfeedback) );
+ evaluation.getAttributs().put("verifHisto2", String.valueOf(commandes.verifHisto2) );
+ evaluation.getAttributs().put("ecritNoteCSV", String.valueOf(commandes.ecritNoteCSV) );
+ evaluation.getAttributs().put("newLogo", String.valueOf(commandes.newLogo) );
+ evaluation.getAttributs().put("noLogo", String.valueOf(commandes.noLogo) );
+ evaluation.getAttributs().put("analyse_nombres_modifications_simultané_maxi", String.valueOf(commandes.analyse_nombres_modifications_simultané_maxi) );
+
+ evaluation.getAttributs().put("fourniCSV", String.valueOf(commandes.fourniCSV) );
+ if(commandes.nameCSV!=null) {
+ evaluation.getAttributs().put("nameCSV", commandes.nameCSV );
+ }else {
+ evaluation.getAttributs().put("nameCSV", "");
+ }
+
+ //Supprime le node CSV s'il existe, pour le remplacer par le node commandes.nodeCSV
+ node nodremove = evaluation.retourneFirstEnfant("fileCSV");
+ if(nodremove!=null)if(!nodremove.isVide()) evaluation.getEnfants().remove(nodremove);
+
+ // Ajoute les informations sur la liste d'étudiant
+ // Dans le nodeCSV, il y a toutes les informations sur chaque étudiants
+ // Mais dans le node évaluation, on ne garde que les attribut du node fileCSV.
+ if(commandes.nodeCSV!=null) {
+ evaluation.getEnfants().add(commandes.nodeCSV);
+ evaluation.retourneFirstEnfant("fileCSV").getEnfants().clear();
+ }
+
+ // Création d'une évaluation
+ // Insère au début de la liste
+ if(!majBase) {
+ if(commandes.evaluationsBase!=null) {
+ commandes.evaluationsBase.getEnfants().add(0, evaluation);
+ commandes.IndexEvaluationCharger=0;
+ }
+ }
+
+ new ecritureBaseEvaluation(evaluation);
+ commandes.hashCodeEvaluationSave = evaluation.hashCode();
+
+ return evaluation;
+ }
+
+}
diff --git a/src/baseEvaluation/ecritureBaseEvaluation.java b/src/baseEvaluation/ecritureBaseEvaluation.java
new file mode 100644
index 0000000..a5686fc
--- /dev/null
+++ b/src/baseEvaluation/ecritureBaseEvaluation.java
@@ -0,0 +1,133 @@
+package baseEvaluation;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import calc.*;
+import xml.node;
+
+
+
+/**
+ * Ecriture d'une évaluation.
+ * @author pabr6
+ *
+ */
+public class ecritureBaseEvaluation {
+
+ /**
+ * Ecriture d'une évaluation
+ * @param evaluation
+ */
+ public ecritureBaseEvaluation(node evaluation) {
+ String directoryName = "";
+
+
+ File file = null;
+ if(commandes.PathBaseEvaluationDefaut) {
+ directoryName = Paths.get("").toAbsolutePath().toString();
+ }else {
+ directoryName = commandes.PathBaseEvaluations;
+ }
+
+ if(commandes.os.contains("Win")) {
+ file = new File(directoryName + "\\" + commandes.NameBaseEvaluations);
+ }else {
+ file = new File(directoryName + "/" + commandes.NameBaseEvaluations);
+ }
+
+
+ String debut="";
+ String fin="";
+ String XMLBase="";
+
+ if(file!=null) {
+ //Lecture de la base de données
+ BufferedReader br;
+ try {
+ br = new BufferedReader(
+ new InputStreamReader(
+ new FileInputStream(file.getAbsoluteFile()), "UTF-8"));
+ String line;
+ StringBuilder targetString = new StringBuilder();
+ while ((line = br.readLine()) != null) {
+ targetString.append(line);
+ }
+ String baseToString = targetString.toString().replace("\t","").replace("\r", "").replace("\n", "").replaceAll(">/{1,}<","><");
+
+ Pattern p = Pattern.compile("<\\bevaluation\\b.{1,800}\\bdate\\b=\\\""+ evaluation.getAttributs().get("date") +"\\\".*?<\\/\\bevaluation\\b>");
+ Matcher m = p.matcher(baseToString);
+
+ if(m.find()) {
+ //Supprime le node évluation pour le remplacer par le nouveau.
+ debut = baseToString.substring(0,m.start());
+ fin = baseToString.substring(m.end());
+// String codeXMLEvaluation = Run.ecritureNode(evaluation, 0).toString().replace("\t","").replace("\r", "").replace("\n", "").replaceAll(">/{1,}<","><");
+ XMLBase = debut + evaluation.ecritureXML().toString() + fin;
+ }else {
+ //Ajoute une nouvelle évaluation au début de la base
+ p = Pattern.compile("");
+ m = p.matcher(baseToString);
+ if(m.find()) {
+ debut = baseToString.substring(0,m.end());
+ fin = baseToString.substring(m.end());
+// String codeXMLEvaluation = Run.ecritureNode(evaluation, 0).toString().replace("\t","").replace("\r", "").replace("\n", "").replaceAll(">/{1,}<","><");
+ XMLBase = debut + evaluation.ecritureXML().toString() + fin;
+ }else {
+ JFrame frame = new JFrame();
+ JLabel texte = new JLabel("Problème avec la base de données des évaluations
Il semble que ce n'est pas la base de données des évaluations.
"
+ + ""+ file.getAbsolutePath() +"
");
+ JOptionPane.showMessageDialog(frame, texte);
+ }
+ }
+
+ try {
+
+ // écriture du node
+ Path outputFilePath = file.toPath();
+
+ if (Files.isWritable(outputFilePath)) {
+ BufferedWriter fichier = Files.newBufferedWriter(outputFilePath, StandardCharsets.UTF_8);
+ fichier.write(XMLBase);
+ fichier.close();
+
+ JFrame frame = new JFrame();
+ JLabel texte = new JLabel("Enregistrement réussi
L'évaluation "+evaluation.getAttributs().get("name")+ " a été enregistrée dans la base de données.
"
+ + ""+ file.getAbsolutePath() +"
");
+ JOptionPane.showMessageDialog(frame, texte);
+ } else {
+ JFrame frame = new JFrame();
+ JLabel texte = new JLabel("L'enregistrement n'a pas réussi
L'évaluation "+evaluation.getAttributs().get("name")+ " n'a pas été enregistrée dans la base de données.
"
+ + ""+ file.getAbsolutePath() +"
Vous devez avoir des droits pour écrire dans ce dossier.
");
+ JOptionPane.showMessageDialog(frame, texte);
+ }
+
+ } catch (IOException e) {
+ JFrame frame = new JFrame();
+ JLabel texte = new JLabel("L'enregistrement n'a pas réussi
L'évaluation "+evaluation.getAttributs().get("name")+ " n'a pas été enregistrée dans la base de données.
"
+ + ""+ file.getAbsolutePath() +"
"+e.getMessage()+"
");
+ JOptionPane.showMessageDialog(frame, texte);
+ e.printStackTrace();
+ }
+
+ }catch (Exception e) {
+
+ }
+ }
+
+ }
+
+}
diff --git a/src/baseEvaluation/myTableBaseEvaluation.java b/src/baseEvaluation/myTableBaseEvaluation.java
index e571d8e..f1b7a30 100644
--- a/src/baseEvaluation/myTableBaseEvaluation.java
+++ b/src/baseEvaluation/myTableBaseEvaluation.java
@@ -65,7 +65,7 @@ public class myTableBaseEvaluation extends AbstractTableModel{
}else {
evaluation[i][2] = dateCreation;
}
- node fichier = calc.commandes.evaluationsBase.getEnfants().get(i).retourneFirstEnfant("fichier");
+ node fichier = calc.commandes.evaluationsBase.getEnfants().get(i).retourneFirstEnfant("classeur");
evaluation[i][3] = fichier.getAttributs().get("titre");
evaluation[i][4] = fichier.getAttributs().get("metaSujet");
evaluation[i][5] = fichier.getAttributs().get("analysis_filename");
diff --git a/src/baseEvaluation/recupeNodeBaseEvaluations.java b/src/baseEvaluation/recupeNodeBaseEvaluations.java
index 1fd25d3..4f58136 100644
--- a/src/baseEvaluation/recupeNodeBaseEvaluations.java
+++ b/src/baseEvaluation/recupeNodeBaseEvaluations.java
@@ -8,7 +8,7 @@ import java.nio.file.Paths;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
-
+import calc.*;
import xml.node;
/**
* Récupère la base des évaluations qui se trouve indiqué par commandes.
@@ -25,16 +25,16 @@ public class recupeNodeBaseEvaluations {
public recupeNodeBaseEvaluations() {
String directoryName = "";
File file = null;
- if(calc.commandes.PathBaseEvaluationDefaut) {
+ if(commandes.PathBaseEvaluationDefaut) {
directoryName = Paths.get("").toAbsolutePath().toString();
}else {
- directoryName = calc.commandes.PathBaseEvaluations;
+ directoryName = commandes.PathBaseEvaluations;
}
- if(calc.commandes.os.contains("Win")) {
- file = new File(directoryName + "\\" + calc.commandes.NameBaseEvaluations);
+ if(commandes.os.contains("Win")) {
+ file = new File(directoryName + "\\" + commandes.NameBaseEvaluations);
}else {
- file = new File(directoryName + "/" + calc.commandes.NameBaseEvaluations);
+ file = new File(directoryName + "/" + commandes.NameBaseEvaluations);
}
System.out.println("Début de la récupération de la base.");
@@ -55,7 +55,7 @@ public class recupeNodeBaseEvaluations {
evaluations = evaluations.allFirstNodesEvaluationFichierOnly(targetString.toString().replace("\t","").replace("\r", "").replace("\n", ""));
if(evaluations!=null) {
- calc.commandes.evaluationsBase = evaluations;
+ commandes.evaluationsBase = evaluations;
System.out.println("Fin de la récupération de la base.");
}
if(evaluations.getEnfants().size()>0) HasEvaluation=true;
@@ -78,7 +78,7 @@ public class recupeNodeBaseEvaluations {
File file = null;
- if(calc.commandes.os.contains("Win")) {
+ if(commandes.os.contains("Win")) {
file = new File(directoryName + "\\" + NameNewBase);
}else {
file = new File(directoryName + "/" + NameNewBase);
@@ -104,10 +104,10 @@ public class recupeNodeBaseEvaluations {
if(evaluations!=null) {
if(evaluations.getEnfants().size()>0) {
if(evaluations.getNameNode().equals("evaluations")) {
- calc.commandes.evaluationsBase = evaluations;
- calc.commandes.PathBaseEvaluations = (directoryName);
- calc.commandes.NameBaseEvaluations = NameNewBase;
- calc.commandes.PathBaseEvaluationDefaut = false;
+ commandes.evaluationsBase = evaluations;
+ commandes.PathBaseEvaluations = (directoryName);
+ commandes.NameBaseEvaluations = NameNewBase;
+ commandes.PathBaseEvaluationDefaut = false;
}
}
}
diff --git a/src/fenetres/baseDonneesEvaluations.java b/src/fenetres/baseDonneesEvaluations.java
index d94cf76..1048698 100644
--- a/src/fenetres/baseDonneesEvaluations.java
+++ b/src/fenetres/baseDonneesEvaluations.java
@@ -10,7 +10,6 @@ import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
-import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.regex.Matcher;
@@ -33,12 +32,14 @@ import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableColumnModel;
import baseEvaluation.chargeEvaluation;
+import baseEvaluation.creerNouvelleEvaluation;
import baseEvaluation.myTableBaseEvaluation;
import baseEvaluation.recupeNodeBaseEvaluations;
import net.lingala.zip4j.exception.ZipException;
import net.miginfocom.swing.MigLayout;
import xml.Zip;
import xml.node;
+import calc.*;
/**
@@ -74,7 +75,7 @@ public class baseDonneesEvaluations extends JFrame { /**
private final JButton btnExtraireFileAnalysis = new JButton("Extraire le fichier d'analyse
de l'évaluation sélectionnée");
private final JButton btnFusionnerBase = new JButton("Importer des évaluations
depuis une autre base");
private final JButton btnChargerFichierAnalyse = new JButton("Créer une évaluation à
partir d'un fichier d'analyse");
- private final static JLabel lblCheminVersBase = new JLabel(calc.commandes.PathBaseEvaluations);
+ private final static JLabel lblCheminVersBase = new JLabel(commandes.PathBaseEvaluations);
private final JButton btnArchiveBase = new JButton("Copie de sauvegarde");
@@ -89,7 +90,7 @@ public baseDonneesEvaluations() {
ImageIcon img = new ImageIcon(getClass().getResource("/resources/evalwriter.png") );
setIconImage(img.getImage());
- setTitle(calc.commandes.Titre + " - La base de données des évaluations");
+ setTitle(commandes.Titre + " - La base de données des évaluations");
getContentPane().setLayout(new BorderLayout(2, 2));
@@ -131,8 +132,8 @@ public baseDonneesEvaluations() {
lblCheminVersBase.setIcon(new ImageIcon(baseDonneesEvaluations.class.getResource("/resources/BaseEvaluationsmini.png")));
panelBas.add(lblCheminVersBase);
- if(calc.commandes.evaluationChargeEnMemoire!=null) {
- textPane.setText("Evaluation chargée en mémoire : " + calc.commandes.evaluationChargeEnMemoire.getAttributs().get("name"));
+ if(commandes.evaluationChargeEnMemoire!=null) {
+ textPane.setText("Evaluation chargée en mémoire : " + commandes.evaluationChargeEnMemoire.getAttributs().get("name"));
}
@@ -262,14 +263,14 @@ public static baseDonneesEvaluations getInstance() {
}
// afficheLesBoutonGestionBase();
instance.setVisible(true);
- if(calc.commandes.IndexEvaluationCharger!=-1) {
- selectRow(calc.commandes.IndexEvaluationCharger);
+ if(commandes.IndexEvaluationCharger!=-1) {
+ selectRow(commandes.IndexEvaluationCharger);
}
isDispose=false;
- if(calc.commandes.PathBaseEvaluationDefaut) {
- lblCheminVersBase.setText(calc.commandes.PathBaseEvaluations);
+ if(commandes.PathBaseEvaluationDefaut) {
+ lblCheminVersBase.setText(commandes.PathBaseEvaluations);
}else {
- lblCheminVersBase.setText(calc.commandes.PathBaseEvaluations+"/"+calc.commandes.NameBaseEvaluations);
+ lblCheminVersBase.setText(commandes.PathBaseEvaluations+"/"+commandes.NameBaseEvaluations);
}
return instance;
}
@@ -311,9 +312,9 @@ private void ListenerAction() {
@Override
public void actionPerformed(ActionEvent e) {
if(Files.isReadable(Paths.get(""))) {
- if(calc.commandes.evaluationsBase!=null) {
+ if(commandes.evaluationsBase!=null) {
try {
- String nameFile = Zip.AddBaseToZip(calc.commandes.evaluationsBase.ecritureXML());
+ String nameFile = Zip.AddBaseToZip(commandes.evaluationsBase.ecritureXML());
JOptionPane.showMessageDialog(null, "La base des évaluations a été sauvegardée dans \"Archive des bases.zip\"\nSous le nom " + nameFile );
} catch (ZipException e1) {
e1.printStackTrace();
@@ -355,11 +356,11 @@ private void ListenerAction() {
String analysis_filename ="";
if(evaluation.getAttributs().get("analysis_filename")!=null) {
if(!evaluation.getAttributs().get("analysis_filename").isEmpty()) {
- file = new File(calc.commandes.PathBaseEvaluations);
+ file = new File(commandes.PathBaseEvaluations);
analysis_filename = evaluation.getAttributs().get("analysis_filename");
}
}else {
- file = new File(calc.commandes.PathBaseEvaluations);
+ file = new File(commandes.PathBaseEvaluations);
}
@@ -370,25 +371,21 @@ private void ListenerAction() {
boolean notError = false;
if (userSelection == JFileChooser.APPROVE_OPTION) {
File fileToSave = fileChooser.getSelectedFile();
- try {
- if(calc.commandes.os.contains("Win")) {
- notError = Run.ecritureNodeEnXML(evaluation.retourneFirstEnfant("fichier"), fileToSave.getName(), fileToSave.getPath().substring(0,fileToSave.getPath().lastIndexOf("\\")),Run.TypeFile.Sujet );
- }else {
- notError = Run.ecritureNodeEnXML(evaluation.retourneFirstEnfant("fichier"), fileToSave.getName(), fileToSave.getPath().substring(0,fileToSave.getPath().lastIndexOf("/")),Run.TypeFile.Sujet );
- }
- if(notError) {
- JFrame frame = new JFrame("Extration");
- JLabel texte = new JLabel("Extration réussie
Le fichier d'analyse "+ analysis_filename +" a été extrait de la base.
"
- + ""+fileToSave.getAbsolutePath()+"
");
- JOptionPane.showMessageDialog(frame, texte);
- }else {
- JFrame frame = new JFrame("Erreur");
- JLabel texte = new JLabel("
Erreur
Le fichier d'analyse n'a pas été extrait de la base.
"
- + "");
- JOptionPane.showMessageDialog(frame, texte);
- }
- } catch (IOException e1) {
- e1.printStackTrace();
+ if(commandes.os.contains("Win")) {
+ notError = evaluation.retourneFirstEnfant("fichier").saveNodeEnXML(fileToSave.getName(), fileToSave.getPath().substring(0,fileToSave.getPath().lastIndexOf("\\")));
+ }else {
+ notError = evaluation.retourneFirstEnfant("fichier").saveNodeEnXML(fileToSave.getName(), fileToSave.getPath().substring(0,fileToSave.getPath().lastIndexOf("/")));
+ }
+ if(notError) {
+ JFrame frame = new JFrame("Extration");
+ JLabel texte = new JLabel("
Extration réussie
Le fichier d'analyse "+ analysis_filename +" a été extrait de la base.
"
+ + ""+fileToSave.getAbsolutePath()+"
");
+ JOptionPane.showMessageDialog(frame, texte);
+ }else {
+ JFrame frame = new JFrame("Erreur");
+ JLabel texte = new JLabel("
Erreur
Le fichier d'analyse n'a pas été extrait de la base.
"
+ + "");
+ JOptionPane.showMessageDialog(frame, texte);
}
System.out.println("Save as file: " + fileToSave.getAbsolutePath());
new recupeNodeBaseEvaluations();
@@ -411,13 +408,13 @@ private void ListenerAction() {
node evaluation = new node();
evaluation.setNameNode("evaluation");
String name = "Nouvelle évaluation";
- evaluation.getEnfants().add(calc.commandes.sujet);
+ evaluation.getEnfants().add(commandes.sujet);
name = JOptionPane.showInputDialog(null,"Donner un nom à cette évaluation ?",name);
if(name!=null) {
if(!name.isBlank()) {
- evaluation.getEnfants().add(calc.commandes.sujet);
+ evaluation.getEnfants().add(commandes.sujet);
new creerNouvelleEvaluation(evaluation,name,false,false);
new recupeNodeBaseEvaluations();
model.addOrUpdate();
@@ -442,7 +439,7 @@ private void ListenerAction() {
new trierParDateDecroissanteLaBase();
model.addOrUpdate();
table.setModel(model);
- selectRow(calc.commandes.IndexEvaluationCharger);
+ selectRow(commandes.IndexEvaluationCharger);
}
}
});
@@ -465,13 +462,13 @@ private void ListenerAction() {
public void actionPerformed(ActionEvent e) {
new ChargePathBaseEvaluation(false);
if(!ChargePathBaseEvaluation.isErreurLecture()) {
- if(calc.commandes.evaluationsBase!=null) {
+ if(commandes.evaluationsBase!=null) {
baseDonneesEvaluations.getInstance();
}
- if(calc.commandes.PathBaseEvaluationDefaut) {
- lblCheminVersBase.setText(calc.commandes.PathBaseEvaluations);
+ if(commandes.PathBaseEvaluationDefaut) {
+ lblCheminVersBase.setText(commandes.PathBaseEvaluations);
}else {
- lblCheminVersBase.setText(calc.commandes.PathBaseEvaluations+"/"+calc.commandes.NameBaseEvaluations);
+ lblCheminVersBase.setText(commandes.PathBaseEvaluations+"/"+commandes.NameBaseEvaluations);
}
model.addOrUpdate();
table = new JTable(model);
@@ -485,14 +482,14 @@ private void ListenerAction() {
btndefautBaseEvaluation.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(Files.isReadable(Paths.get(""))) {
- calc.commandes.PathBaseEvaluations = Paths.get("").toAbsolutePath().toString();
- calc.commandes.NameBaseEvaluations = "base_evaluations_analyseWriter.xml";
- calc.commandes.PathBaseEvaluationDefaut = true;
+ commandes.PathBaseEvaluations = Paths.get("").toAbsolutePath().toString();
+ commandes.NameBaseEvaluations = "base_evaluations_analyseWriter.xml";
+ commandes.PathBaseEvaluationDefaut = true;
new recupeNodeBaseEvaluations();
- if(calc.commandes.PathBaseEvaluationDefaut) {
- lblCheminVersBase.setText(calc.commandes.PathBaseEvaluations);
+ if(commandes.PathBaseEvaluationDefaut) {
+ lblCheminVersBase.setText(commandes.PathBaseEvaluations);
}else {
- lblCheminVersBase.setText(calc.commandes.PathBaseEvaluations+"/"+calc.commandes.NameBaseEvaluations);
+ lblCheminVersBase.setText(commandes.PathBaseEvaluations+"/"+commandes.NameBaseEvaluations);
}
model.addOrUpdate();
table = new JTable(model);
@@ -519,7 +516,7 @@ private void ListenerAction() {
if (!lsm.isSelectionEmpty()) {
indexSelect = lsm.getMinSelectionIndex();
chargeEvaluation.chargeEnMémoireEvaluationSelected(indexSelect);
- calc.commandes.IndexEvaluationCharger = indexSelect;
+ commandes.IndexEvaluationCharger = indexSelect;
if(!create.isDispose) {
create.getInstance();
}else {
@@ -558,8 +555,8 @@ private void ListenerAction() {
*/
btnSaveEvaluation.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
- if(calc.commandes.evaluationChargeEnMemoire!=null) {
- String name = calc.commandes.evaluationChargeEnMemoire.getAttributs().get("name");
+ if(commandes.evaluationChargeEnMemoire!=null) {
+ String name = commandes.evaluationChargeEnMemoire.getAttributs().get("name");
name = JOptionPane.showInputDialog(null,"Voulez-vous renommer l'évaluation ?",name);
if(name!=null) {
if(!name.isBlank()) {
@@ -578,7 +575,7 @@ private void ListenerAction() {
new recupeNodeBaseEvaluations();
model.addOrUpdate();
table.setModel(model);
- selectRow(calc.commandes.IndexEvaluationCharger);
+ selectRow(commandes.IndexEvaluationCharger);
}
});
diff --git a/src/fenetres/chargeBaseAuDemarrage.java b/src/fenetres/chargeBaseAuDemarrage.java
index 8437206..d7afa35 100644
--- a/src/fenetres/chargeBaseAuDemarrage.java
+++ b/src/fenetres/chargeBaseAuDemarrage.java
@@ -50,7 +50,7 @@ public class chargeBaseAuDemarrage extends JFrame {
int screenHeight = (int) java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().getHeight();
setLocation(( (screenWidth) - getWidth()) / 2, (screenHeight - getHeight()) / 2);
- ImageIcon img = new ImageIcon(getClass().getResource("/resources/evalwriter.png") );
+ ImageIcon img = new ImageIcon(getClass().getResource("/resources/evalcalc.png") );
setIconImage(img.getImage());
setTitle(calc.commandes.Titre + " - La base de données des évaluations");
diff --git a/src/fenetres/create.java b/src/fenetres/create.java
index 8ea51a9..f6d790a 100644
--- a/src/fenetres/create.java
+++ b/src/fenetres/create.java
@@ -64,8 +64,10 @@ import actions.actExpandNode;
import actions.actNewFichierAnalyse;
import actions.actNodeFichier;
import actions.actOpen;
+import actions.actOpenBaseEvaluation;
import actions.actSave;
import actions.actSaveAs;
+import actions.actSaveEvaluation;
import actions.actSetting;
import actions.actSupprimeTitre;
import actions.actTitre1;
@@ -101,11 +103,11 @@ public final class create extends JFrame {
private JMenuBar menuBar = new JMenuBar();
private static JButton buttonEvaluate;
private static JToggleButton tglbtnTousLesNodes;
-// private JPanel panelPrincipal;
private static JScrollPane ScrollPaneTableBouton = new JScrollPane( );
private static JScrollBar verticalScrollBar = ScrollPaneTableBouton.getVerticalScrollBar();
private static JLabel lblInfo = new JLabel("Fichier d'analyse");
private JPanel panelDroiteBoutons= new JPanel();
+ public static boolean isDispose = true;
private static create instance;
@@ -122,13 +124,24 @@ public final class create extends JFrame {
}
public static create getInstance() {
- if (instance == null) {
+ if (isDispose) {
instance = new create();
}
instance.setVisible(true);
+ isDispose = false;
return instance;
}
+ /**
+ * Ferme la fenêtre et quitte.
+ */
+ public static void fermeCreate() {
+ if(!isDispose) {
+ isDispose=true;
+ instance.dispose();
+ }
+ }
+
/**
* Initialize the contents of the frame.
@@ -310,9 +323,7 @@ public final class create extends JFrame {
addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
- if(JOptionPane.showConfirmDialog(null,"Voulez-vous quitter analyseWriter?", "Quitter", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE)==JOptionPane.YES_OPTION) {
- dispose();
- };
+ new actExit().actionPerformed(null);
}
});
@@ -569,6 +580,18 @@ public final class create extends JFrame {
toolBarPrincipal.setName("outils principaux");
+ JButton btnChargeEvaluation = toolBarPrincipal.add( new actOpenBaseEvaluation() );
+ btnChargeEvaluation.setIcon(new ImageIcon(create.class.getResource("/resources/BaseEvaluations.png")));
+ btnChargeEvaluation.setHideActionText(true);
+ toolBarPrincipal.add(btnChargeEvaluation);
+
+ JButton btnSaveEvaluation = toolBarPrincipal.add( new actSaveEvaluation() );
+ btnSaveEvaluation.setIcon(new ImageIcon(create.class.getResource("/resources/saveEvaluation.png")));
+ btnSaveEvaluation.setHideActionText(true);
+ toolBarPrincipal.add(btnSaveEvaluation);
+
+ toolBarPrincipal.addSeparator();
+
JButton buttonLoadFile = toolBarPrincipal.add( new actOpen() );
buttonLoadFile.setIcon(new ImageIcon(create.class.getResource("/resources/fichierAnalyse.png")));
buttonLoadFile.setHideActionText(true);
@@ -679,11 +702,13 @@ public final class create extends JFrame {
public void closeWindows() {
if(JOptionPane.showConfirmDialog(null,"Voulez-vous quitter analyseWriter?", "Quitter", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE)==JOptionPane.YES_OPTION) {
- dispose();
+ isDispose=true;
+ dispose();
}
}
public void closeDirectlyWindows() {
+ isDispose=true;
this.dispose();
}
diff --git a/src/fenetres/evaluate.java b/src/fenetres/evaluate.java
index 8ba6902..3a35354 100644
--- a/src/fenetres/evaluate.java
+++ b/src/fenetres/evaluate.java
@@ -472,6 +472,15 @@ public class evaluate extends JFrame {
+
+ public static void ferme() {
+ if(!isDispose) {
+ isDispose=true;
+ instance.dispose();
+ }
+ }
+
+
/**
*
* evaluer l'ensemble des fichiers des étudiants
diff --git a/src/fenetres/setting.java b/src/fenetres/setting.java
index 445dccd..d56f0eb 100644
--- a/src/fenetres/setting.java
+++ b/src/fenetres/setting.java
@@ -679,17 +679,11 @@ public final class setting extends JFrame {
if (userSelection == JFileChooser.APPROVE_OPTION) {
File fileToSave = fileChooser.getSelectedFile();
- try {
-
-//
- nodeTransalte.saveNodeEnXML(fileToSave.getName(), fileToSave.getPath().substring(0,fileToSave.getPath().lastIndexOf("\\")));
-
-
- JOptionPane.showMessageDialog(null, "Le fichier \"" + fileToSave.getName() + ".xml\" a été renregistré.\n\nIl se trouve dans le dossier " + fileToSave.getPath());
-
- } catch (IOException e1) {
- e1.printStackTrace();
- }
+ //
+ nodeTransalte.saveNodeEnXML(fileToSave.getName(), fileToSave.getPath().substring(0,fileToSave.getPath().lastIndexOf("\\")));
+
+
+ JOptionPane.showMessageDialog(null, "Le fichier \"" + fileToSave.getName() + ".xml\" a été renregistré.\n\nIl se trouve dans le dossier " + fileToSave.getPath());
}
}
diff --git a/src/resources/BaseEvaluations.png b/src/resources/BaseEvaluations.png
new file mode 100644
index 0000000000000000000000000000000000000000..175f74b0105ac852391141cb77af06c724b9eae6
GIT binary patch
literal 4012
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
S6!so$#Q|HgeMi)3E
zqO>$N8f<_3lkubB+c|**nJFcof0{`H16k?s>({dB5AW(IrarP688ZbwI%fQE+cv%9
zai3`hJ9bE`w*T00e8oz!6pTF)#OGZR@sepr>bEn4jnGc|6kgtZYaCP`+FQV;T?uatYlQnJCVB70i*&TO7>&)%Qquwetp>{0E!wueuhlQEUgaNjcgI>cZ^4@kWHE{uOPc^70J?PU0YDV>SYrPU
zL@@)2#4K)H|7+~R1*L1x-v8?&L11hD(xtxX^{Rv65JyA?q7fh>KkAZ*jAXY&07)uC
zJf=sfb2p4xKgXoM9yP1pQ%{^w-*7r>8UW~k$7a!+J9U>-m6R)2=YNr#E0x#^)YVy;
zn&p{BzAW1$EHY*=2tqRQ>Y87ns`_orD*=^=C3f!orQzhslL!Wbn3)-xvsx=mI-PC+
zKz({08*s@xVSEz4Mkf@ckC?*b6T46##kwdV>M>5{IUC#d2|LPtTbTrlzK7>C&at
z($YeQ4jm%1*-QYawY8NxIy%T~HdAM3ClS$CX$CKQG#^)2h_5CyO#m_Yr}>O5V^~q)
zS5yje6`|)!-R8D^pKg2c#U^cUZ!eyA6uGT81@a!
zt#rL&ayT4_$K&vLJZNled{ku5Mse7Zhmy&A?9zYl(Z_QkK4B{m$};pQ*J|h)CJ5O-
z_)(i9C@-??+O;d4j;^jQ#G(&QpX}T}`L{E}KPfC+48PwG0C2nAj~<+LZr0cGl0e_{
zFlzBIYN%!YS{FO#suDU@mJ7eGEE9fq?ri6A&N;tx=MFVAG!Ou)tE;16aE`*^Svq?3
zC;=czlIZf~%M_2tDb2uH#9n*05bx`>%$U4TELHC0jsV6Ov^qTwbX-K|iBHhh)&>B`
z%gcksVu8=+0|1nilwfFRh>N25?es;vIZA&Xxs6vR{B$Lr04WMVQ2-iLBHBnq!$kB35#fKF2U=my
Sbi&{O0000;
literal 0
HcmV?d00001
diff --git a/src/resources/accueilChargeEvaluation.png b/src/resources/accueilChargeEvaluation.png
new file mode 100644
index 0000000000000000000000000000000000000000..c27e585a80e824c8d6c8ea6860381f18db1a1754
GIT binary patch
literal 30589
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