From b0a5461316e52dae6fe98f9d9b42a63852c3ee55 Mon Sep 17 00:00:00 2001 From: Andreas Stallinger Date: Wed, 27 May 2015 10:56:25 +0200 Subject: [PATCH] ui: startscreen startscreen with recent projects, "recent" projects are the xml files in the projects folder --- .../data/gui/startscreen/cpluspluss_icon.png | Bin 0 -> 3902 bytes bin/app/data/gui/startscreen/file_icon.png | Bin 0 -> 3263 bytes bin/app/data/gui/startscreen/logo_white.png | Bin 0 -> 7907 bytes src/app/CMakeLists.txt | 2 + src/app/main.cpp | 3 +- src/app/qt/element/QtMainWindow.cpp | 6 + src/app/qt/element/QtMainWindow.h | 4 + src/app/qt/element/QtStartScreen.cpp | 117 ++++++++++++++++++ src/app/qt/element/QtStartScreen.h | 44 +++++++ src/lib/Application.cpp | 11 -- 10 files changed, 175 insertions(+), 12 deletions(-) create mode 100755 bin/app/data/gui/startscreen/cpluspluss_icon.png create mode 100755 bin/app/data/gui/startscreen/file_icon.png create mode 100644 bin/app/data/gui/startscreen/logo_white.png create mode 100644 src/app/qt/element/QtStartScreen.cpp create mode 100644 src/app/qt/element/QtStartScreen.h diff --git a/bin/app/data/gui/startscreen/cpluspluss_icon.png b/bin/app/data/gui/startscreen/cpluspluss_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..d2736e26435cc3256483d2c313ca433bd5440839 GIT binary patch literal 3902 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 M07*qoM6N<$f^OYq7ytkO literal 0 HcmV?d00001 diff --git a/bin/app/data/gui/startscreen/file_icon.png b/bin/app/data/gui/startscreen/file_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..74c283d318402e02127260e8b65decc3d73f34c7 GIT binary patch literal 3263 zcmY+GS2Wy>7RCQU^d2S1h)x8fi_VN*gOO3A8;M>LT}H1T5uJ=6(QAm2(K{hVucJf{ zKHMl7iFPFqcdfhDK4+hY{c?WmJe>H)2AWjltmFUyP-$za8Q-|YpCTo`>5s}(Z`~M~ zmzKFN0Elq^DT07v<(B|JZukreef-$P)6dh_#nX#J8w%y{^6_+j=H>(d0ShP-1k7ZI zNfEz%0?~~_rt5kdGm>%`LlTh;seFQ*WVAYQoQ3m@MqPC3>O^dV1#yJQ$;c!|BO%HJ z@;QV}9)I603OKug--$mx5@O#qyQDJVST>Lh6g2m&T4NP$lMyiU=3vDY-akQ^%lWE4TC zU+N=WQX~VQ5|j)n0aP>ykf>}v6QFMSRi0I*EwWF#m^ z1vu_F#i;=<@<7$-lLU3ZOcY>n*6o!A=7a%JZMd@*P}c->VrePr0a8jp)F>|c0YDTC z*bZ`Y2LMqy0E5O6T;a#V8rp5a8&Wy-3K$+)^>9m4VQ&&RT!dW!tIhn7LE7$?U9O5q zcVG^Sc(^3Zx8tt>P>{-av+eO^0G7H2iFVi(1Qt#lNGr?(qI3n6zz-t)12P!$0Yh#9E^3EG0ER6vrQMlLaFUeqGp zrk|-5y=Z>hk>+;^w1$%rsSc9fvEy8bBd|{}<4z`J&WS$b?9w8lPvqhF631Y~rJE|H zC1#ue<1p0%9Vz}Xik+M1jHjQVp=uD(!=YG6sIT~p_nom)+mi4iZMq&vD_4< zg1j-GPppbb(uLb&l`b?3DN4`*(a!I8NhEsRL`C|0ARiwIk)=5df8?s7tn6p4ds0Q% z5`XG2`q7_=K3u(%Oq$3a!ePg*s%55UW-zB!#&M5Fl5T-ahKw-EsGFZFtxWe5Uo+jW z-n;hVVzFjgLfkX-DR;oM!Ew-D86Nt0s5n37^)2m>A7B&o6B-j9#@stX<$01?tlVi| z793scNo3Q7I35m0Z=g1MHY7IKHaL$g$x-$y-XG3P)&z`)p6jq|(r!v_5<6v!tD3&g zHC`$!gwaW*SU{=^(Z;n#v1NB8U*yV;L^5gX7FQQ#OtQK#yWpSIe)nspTgqTJ$QpxB z4DV=u&-zYy;!jBx!x%XbhY(=NyGwEx!Qy|nHe0WRWipXv046FUwwJw~LzClaY9@#l z3}H+iBG1st;LBhW1jEWJN-CBsC`^w{hhZt@PfbE=G)yH-*2~GJGAm6hP>=Ua*h~=R z@@26Vh%!%@@`o_<%Xnh*9=#qz=m(>Mk2dSA{TvhyEDZrdoUT-rF)zZUdig$%%!j-b zY{|X^wInK5lo!fEC3Ga<4aUdm&dMa~+1_Vw{S3&q1xmAy!xEMm4j-&NU@MW-!-zRq zxmILmWtvrLRT@=l?zKtR?3bcS+SFUj&%>!z2Xy$Y_%#tJ*xRUWlX;V+Qu0zJeMPy` z8j%XuVz$B-HUAEe(u3^$_NT~vJy!uuJ#frKg&dX2cDYJj6Ik>|KRE zDQ`~&5O@Ih!w72KqXI3q%dpE@jY`FgE4-i9_(y{#=~=(kI?uX$zkC0CK4LyjK3)A? z{exU%eN4%N5_vs&y@8RhBSj-KIZ}CwVzc7gdE0rjc`Hq}76BGQ=rZ(YC++$TixTq# zbgM_Sg{*n8nW=?!gGM!~ns=t9x}}t^6l0KPP?%VVyWAlBgWOB-O-_T z2zzEkQ(sNbL0Vf{XmjX4mx?4*vGdfGAPZ2K?TSImG;xZ`Ysl-~ zFT>RyNFO{qh+Ta5Rr1|~d~*rkv7SNbH>1sQWr}whqOL1dVTMq{a75!aH`oE33a_56 zYby4yz}p=%EB#dRdAF{#t{}54zHDyuRi?9PuxZ$^$1~q1dIkE5``Yn3=z1I|Me-6L z2;;+5!!2)}p9O_*b|fpy;hcWf&+n@y6<|~uRZ}9WBR0FLIb8<-eO=9o-_FLSVxLh* zKMwmoGe%;!WtZ3!M#&!?8x4<9PWFm3V;vXElJXy4g!-8OqiQ>qrSI zRfs%SSdeL!Y*y|UaW?-tZH6+_cGJBlDexI1s<0kkDG&939=g;X$k5F zz4{<>9zk7+tt9$ZV^v>bY#af_ET}e4X+3!dcC)tt@H}s`-UaR4Y$D?VtWs$APm( z1aK{pXej1=hr;Jpr_wLj5qV|U2iOVhH%$6qVyV$?_RM4afGxQ7r{urWILlW2rP7yn zoGF2+{T#QQ;Gf~SwQ@G@yMDV0S80=m11)b`a%(VF zu9${b40h?HE$|1^^~`j>tm0DJagZmz4}ZGCv=rvUe~BG#nfK>EsBSfE zwK-AQSDlA0#ZD_*UM0fX>zNm>Oj*c9?Nl@zzfES_wuxkqda@hdD?D@u~PXho5cD2=1VF3&OE-mTbQoS3! z>YH@ijVxV-M28Fp_;G;7!uM&y@Q=st|*dBHQn(??|`uf3G=F$=71tzD^nZ&b(lM_=Q`4$56! zjdQ0u#J6Oh_tedkS}{8;)3p0)c;-!zsmTEC#(lgQB3Z=4ahDAQH4v_iTCC{vay;Lh zi=-2K*ingWrwk0c^-EU&)x6&dWTWsyX~K54PLR8cLZn>Bl*1VA)AOyFBI2W}HQ6on zfIgJ~7yI7w*=F-JR}mXs%cG?u=BNHXYo|)qmfqq?aR-G^Ncle>=n_{q2h|t)O*!#y zhYc2#ldTe31OHjvgC+Tb%U|hlM2<-@r(5o{G^O7qX+lm(rF~ z=rDFgrN$NF=A12bDTZqIE%%wUwQSSiJ}QLlr2D5@?-aowKx0IIrE+KNh8V%vU%!F( zfBgQJxCvcvV}CuFfvV|ooF5o(^W8sl5V&AV+!8k-@s%8#5z1^@s6T&(Y=00004XF*Lt006O% z3;baP000U)X+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHz3iJg{rR8-d%htIutdZEoQ z6e&aRy$v9}H>uJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$Or zQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv z1)yUy0P^?0*fb9UASvow`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q z{wNRKos+;6rV8ldy0Owz(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E`vOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G4 z1dM~{UdP6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4E zs0sQWIt5*Tu0n&*J!lk~f_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+ zAA{TB3-ERLHar49hi4Ih5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=nat zP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVbnL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0 zWMyP6Wy582WNT#4$d1qunl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8d zZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iu ztvy=3T65Yu+7a4Yv^%sXb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i z^lS773}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*Z zvFf(^Xl-N7w{EeXveC4Ov)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx z)P8cQ&Qi|OhNWW;>JChYI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_W zICNY@+|jrX%s^&6b2i>5eqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!q zl}XcFH*PieWwLj2ZSq`7V9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I- z?$tAVKYn8-l({mqQ$Q8{O!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;c zwT88(J6|n-WB%w`m$h~4pmp)YIh_ z3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dl zbFb#!9eY1iCsp6Bajj|Hr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syT zu9enWavU5N9)I?I-1m1*_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$m zU2Q)a|9JSc+Uc4zvS-T963!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;; zJuhGEb?H5K#o@~7t9DmUU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX z=)z6+o0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@ z>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHs zy69KwU-!MxeeuI@&cF4|M9z%AfP?@5 z`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u00v@9M??Vs0RI60puMM)00009a7bBm z001r{001r{0eGc9b^rhX2XskIMF-yn8Vwc@(GLnS000y2Nkl8 z#woF56g9Ru;)GKi00Dsj0>xPM^&e+n>u~Gd_wIc|6|MJM>#eGKb?!aGK4+i3_t|?N z$OuV$NSZEbwxpHvXp^)+(*2VDPSOZTB}vgU6lee>ohj)|yp^U5H{g(lk066CgqSR@HOp^3s4Xb3mq+^Oz zQa^$;OZu{;rLlotCuvhgqP!@nPcfP`vLi_mt7!qI0w)1m1B-zLKrdi>U=lFA%&S^~ ze{jyth~8PC`V~^?|0PM&B)w2!mCPzevw?(>wApu(4wAH}3_;$Lv~w|%wM$tW#T_ghUW#=U2@JumsmC>A+ z2!Xh}6>v0g3NRTMRzXw0s~GMEtO!XvNSY~WzNFTS_N=!hZJkB)FOZ!O!z5iJX@#Wr z9M;}eN#_-#SzlrtFX^o+Oz)c{-IBKV6v$7Aev-bOb47&2_)X#PP(NY}k#ubpglM-j z_3Mh2QD0)r%t?ril2%KaBk8Du81*AYUrFE1L5L3}y({TAqE=^;^<7V7jF7l3Yz=V^n@6!wR`B3Na{F#%6lk6iN5l7@Z!jlxolnj07fR zDEqE+uDu|}X2h5Zd>`1&z8a4|!fvaDWo0>5Z3R{odj}z#IuiI{Kn#E()D|s33D`Bu z#K3!ve4_V`z}I;K@Q(?crAMuGlz=fA%54So@2(Y6uR3dej}fB@_$qL4LXow#wy_x) zn6d20u2>;S5}XZ0GcXSC{Wu&Lg!jbnO^54IyRp{~fu+DgU>@+6bFMw9?O7$ppxlYT z@hQa?N1UVCPCa4&F|b8bc2stNu+2=8H&hUc7fZM6=}H95{cX4GP8PY7Y? zW#{z|SnT^Ii+%4Zv`N}v2Gjc_ol;KYmh`0o@J-+> zd^p?|r(&2c@h#vYNjCx0opW!PG&-(~T5zYa!kzJ9enV`0SK^}r<^rqasnVXhcS#yl z#Z3C9q@G!z-EsPT*BuELE0{pJVN?ZBl#u09a z85i5lgtH7EIW`-(#X0v}IqB2|7R;W;^N%Seb5)oRJZz?#cKmV0d&WIxJLgtrv7a@^ zDExik5VP(U$cH|_lg_#8D%tGHnVm{e@V|3Tw%J@&jBQoe2AC=7ipaba>KBy=vDqFH zqvTNFr@-e;11&PeaH*{pM|vWF0_pe~@S{L4%TJK-LFe2H zz{S9;1yQQTS0#Nrk72Qs<{6{r!@!03L!E+cRi}+#B-E)Pps^1HhV$@7cl3Q>m=0l(v!MeW5NY zXaT@l=iIs!^vQ0sZPUwaAcE17G7nmUFLf|&w zQ`M|EU|Q039!b{Ti6-I|Xe{0bE^^NOXQvesEWxdSzbwY8OE3~RI&lvP_}Eb3jAE?1 z3={Duv>z>s@B*(EyaBP0thx>pB7#JVBHYw_0ADJ`sLL@)(zYM5tU$>bgOAH7(6!jp zSQnB$S|QDNBVvK>+1&St*j6dn+@}^}({0#Y(ui(yrhrxC!_l`~m+`zh8BjuOk?{?1zsZ z8Dbqe8z1f4op>C$8K3>=eS9oD&bj#seP}Y4KM-%DI@0=(_co#Nz|bgysvZ$e3nZOq z;aZU^<(`th6C*(CX_=&+7XJ1{NpEz+$>0l;rb-$fDa(?+W6{U`GWMabjltK0TeY)b zmZaUH9KE&TCzhnYC1}`{lHQkeaHXk{5Tn>^x#q9#LSlSd(%>NOZ$G<~`A?ClJZB$z zN!m%$FEiHvwxolRbYKmg*d*z%qOdk=$Y7)PT1oe(H8`zPv4GJQNhetxd84pg(xFkj zq;ZV1f&k86CkAI`B#xv3lD?KPxb#>o=~gvZWkLVVLFHp4y>7vgo9qB5x0gli5Gb0h zD;hwI`R2$G4S179$wpWtsb=f9t(IvS+H(eyzENeU@JUfetkPk|_oKx9Z`GkA;qQ~I z-g;q~q#a|#xFA;MsVF-`HJOAGR{Loc+H^q)Z*tFzZvb~%Oi3hZ+-;IVM5H^a?MQ@J zaQ$pxTAidQ;lnN7aL&nyas+TqOxKu`#oI7r`#0i~3tUp>k$xp$K+bw@0DcimvU08I z5@D+!3>#Gof}o^ahe&% z;+S7Ab`|fCv6%IG3%&>-SXhWD1aAS#VaSn5V=VRX;0t`+mKcH5THv=DD z6S2^Ycqr;?EYu=x@-&A^Z-ekA-jO@PiW0CS!-MbI!(nIkB0bB`s7CA|v3ITq9?Q80 zhS?OxRIteQr2Orr_2|Rvz%9TWn_Q1HlkEoQ1<_IuURJI%10@Z1&Mj@=?Al-*$%?mQ zsnYkZz^?k3qPw7xY)jG%;C^7Kb8c}7c&Ea%Yk&`8FB?i_kMD*a37e!eKV$Lb(Owy_ zyzMINb^S5tgGR94K;qiqoO{_hw;23M)f*L_?P2U8Tpa^bq^l68H*!;qHo+WHSzD|R zqbTpSJ`jJ{)Uf2yN$+jOXJfu3W%)XrS+io_F9m*pKOsv?9K5)Jt0Ve#i7AQAW!O*2 z+8bv*zczNAri(QJ^S0Q#Qu1D*+UOkdwOC(srnv1=YLpr|i$4xmTg3F10tE^bC{Un4 zfo>2ltCdE!6j6GMkm`~;9naivo)-rJpT(z#7=X7WEyP=a?=y|REpU8DRj6W@GDbi9 znz`i=yszvwrgSdC+pKPo$(qEg)sjGI?NV+4qsbOj8ahXznRN#Tw zp7SHSRUtgbpCoCX{qIRhdsiYxe@S1ld(-1t{afw(HImjP+!*kPxs|$v_lCdskaUK* zn}*nEb*!<^T64M!@sf2aGf{#`GQuux32|z<_edITM64D|5(qNi{`bEjL7EfT)KI+R z!rw;ET3gI~54*`rJy!|YO+ zMKKS`GxKcvcBx9zRY%*EVY5wk7s@ERt||I#ZQ~VrR9-J>Y^=<-wklng6%r0qv!n}y zMz-4iv2_{#A1CP1l3ugtS4g@pR!7M~4MJl4x1{lD?@X99lVg`DFOu|`3M?o3`MH2y zt(Ej{K#(ib`dER$KMI_|uPk>tanO!*f&?4*r)^e8vwKF4MunB_D`~c*uO|%VuCc+q zL(<4JLX@d*XLIU~@cX3n-U-j$X#1cf-5a|Q?cHi_dbZT!5kdaB+$ztsLW0$Cb1+*T zGBLC&J;e5*_;q?L)3U>r>ntitnxY{|lI0Pq({ zm&*s`Po=}Ld@=9`bA)>!8VlgusGjaZ6oq?4ps37s&fQyW!{Qm&f_IFi<96j&@Sfng z^@!lT8}OF~gzw)stvuf4Cvq(Rc_0nV494Psq>H+`gCJ4Z*;;&x@w%ER?6R1UPrl)t zd%aqs2W@+g4wurwCVnTe(1Y0Asqc0=&f{m%;aAWH?>yISW}0YKM2%f8W^rupHv8`x@3@8`#?qFNdOr3+zYu?LD;5XIT zA8EZwR?#FFZz5_{6bahalMWBbmEqoGBJ#fYMEDVoG)XMUm#k;-`w$b8ujp#OtZ0Qi z81UiAl6u#(5f<WiJo<0Dm9+{gQL;&ETCwY%{NRzZz@z zrgZ7%9*K9Y_?yL|*>R4f-SQ4rFnjk;xF&8f{-WXtCrX-@(^4C*j=u@m)jYggfB2rs zf$p=wjtK^szLNGCLq}B82>i7a-2=;c@^NbHFG;<5ua*Vr_gT%C-=c+g;LQL7AyJCgzCXcy*bi^D7uF8)EH^ zezsWRl@Kc>{abK=Q;L0>ZC1^RJ@;BTP_coXnvlEXE{ospkx)lZNvGJ+ZM=>N3GY8Q zm>7>Il_@h=TiF>$guAn4)0O3%4`OxfXnV?<1V@G>tT#3?Bk5)V`+JIIVTf4H;dz9H;Oyj~fc0Kc=9w#l z2{SzhK^6oFZuW^QhVk zPmnalMD2+tbTZ9_ga}cwl~FYl}SuPfoz^3q8v7w<)S~a8+tO`V`zVmHo1NrK0o|MYsgE$W1-faRl7~7qn{CFd+T6i z?0nU-0hN8fg)t8e44I4b2A&3@bq`ZuqY1ItIk!4VI>kHnHJPDvNhJ$}NuQ%^g0}*T zl5$d3WMlO#nP~a1U{{tuB`H0KF1+)MF N002ovPDHLkV1jkVMFIc- literal 0 HcmV?d00001 diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 65271b59..120d0f89 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -25,6 +25,8 @@ add_files( qt/element/QtSmartSearchBox.h qt/element/QtSplashScreen.cpp qt/element/QtSplashScreen.h + qt/element/QtStartScreen.cpp + qt/element/QtStartScreen.h qt/element/QtStatusBar.cpp qt/element/QtStatusBar.h qt/element/QtUndoRedo.cpp diff --git a/src/app/main.cpp b/src/app/main.cpp index 9d135f5b..8b243d95 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -34,7 +34,7 @@ public: void run(void) { //min Time the Splash screen is displayed - //QThread::msleep(1000); + QThread::msleep(500); } }; @@ -59,6 +59,7 @@ int main(int argc, char *argv[]) splash->show(); splash->repaint(); + qtApp.processEvents(); if (splash) splash->message( "Starting GUI" ); qtApp.processEvents(); diff --git a/src/app/qt/element/QtMainWindow.cpp b/src/app/qt/element/QtMainWindow.cpp index d1aabb71..a88fd46d 100644 --- a/src/app/qt/element/QtMainWindow.cpp +++ b/src/app/qt/element/QtMainWindow.cpp @@ -9,6 +9,7 @@ #include "component/view/View.h" #include "component/view/CompositeView.h" +#include "qt/element/QtStartScreen.h" #include "qt/view/QtViewWidgetWrapper.h" #include "utility/logging/logging.h" #include "utility/messaging/type/MessageFind.h" @@ -40,6 +41,11 @@ QtMainWindow::QtMainWindow() // Need to call loadLayout here for right DockWidget size on Linux // Seconde call is in Application.cpp loadLayout(); + + //startScreen + startScreen = std::make_shared(this); + startScreen->setWindowModality(Qt::WindowModal); + startScreen->show(); } QtMainWindow::~QtMainWindow() diff --git a/src/app/qt/element/QtMainWindow.h b/src/app/qt/element/QtMainWindow.h index f2fc1667..7bb14556 100644 --- a/src/app/qt/element/QtMainWindow.h +++ b/src/app/qt/element/QtMainWindow.h @@ -1,12 +1,15 @@ #ifndef QT_MAIN_WINDOW_H #define QT_MAIN_WINDOW_H +#include #include #include #include #include +#include "QtStartScreen.h" + class QDockWidget; class View; @@ -53,6 +56,7 @@ private: void setupShortcuts(); QDockWidget* getDockWidgetForView(View* view) const; + std::shared_ptr startScreen; std::vector> m_dockWidgets; diff --git a/src/app/qt/element/QtStartScreen.cpp b/src/app/qt/element/QtStartScreen.cpp new file mode 100644 index 00000000..dc53918c --- /dev/null +++ b/src/app/qt/element/QtStartScreen.cpp @@ -0,0 +1,117 @@ +#include +#include "QtStartScreen.h" + +#include +#include + +#include "utility/file/FileSystem.h" +#include "utility/messaging/type/MessageLoadProject.h" + +QtRecentProjectButton::QtRecentProjectButton(const QString &text, QWidget *parent) + : QPushButton(text, parent) +{ + m_projectFile = text.toStdString(); + this->setText(FileSystem::fileName(FileSystem::filePathWithoutExtension(text.toStdString())).c_str()); +} + +void QtRecentProjectButton::handleButtonClick() +{ + MessageLoadProject(m_projectFile).dispatch(); + parentWidget()->hide(); +}; + +QtStartScreen::QtStartScreen(QWidget *parent) + : QWidget(parent, Qt::Dialog | Qt::Popup | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint ) +{ + setGeometry(parent->pos().x()+parent->width()/2-350,parent->pos().y()+parent->height()/2-250,600,500); + + QPalette palette; + QLinearGradient linearGradient(QPointF(0, 0), QPointF(0, 500)); + linearGradient.setColorAt(0, QColor(46,61,135)); + linearGradient.setColorAt(1, QColor(0,120,195)); + palette.setBrush(QPalette::Window,*(new QBrush(linearGradient))); + this->setPalette(palette); + + //QPixmap coati_logo("data/gui/logo_coati.png"); + QPixmap coati_logo("data/gui/startscreen/logo_white.png"); + QPixmap cpp_icon("data/gui/startscreen/cpluspluss_icon.png"); + + QLabel* coatiLogoLabel = new QLabel(this); + coatiLogoLabel->setPixmap(coati_logo); + coatiLogoLabel->setGeometry(30,30,100,138); + + std::string buttonStyle = + "QPushButton{font-family: " + "Source Code Pro; " + "font-size: 17pt; " + "border-radius: 15px; " + "background: white} " + "QPushButton:hover {background:lightgrey;}"; + + m_newProjectButton = new QPushButton("New Project", this); + m_newProjectButton->setGeometry(20,350, 200, 50); + m_newProjectButton->setStyleSheet(buttonStyle.c_str()); + connect(m_newProjectButton, SIGNAL(clicked()), this, SLOT(handleNewProjectButton())); + m_openProjectButton = new QPushButton("Open Project", this); + m_openProjectButton->setGeometry(20,420, 200, 50); + m_openProjectButton->setStyleSheet(buttonStyle.c_str()); + connect(m_openProjectButton, SIGNAL(clicked()), this, SLOT(handleOpenProjectButton())); + + connect(this, SIGNAL(openOpenProjectDialog()), parent, SLOT(openProject())); + connect(this, SIGNAL(openNewProjectDialog()), parent, SLOT(newProject())); + + QLabel* recentProjectsLabel = new QLabel("RECENT PROJECTS: ", this); + QFont font("Helvetica", 20); + recentProjectsLabel->setFont(font); + recentProjectsLabel->setStyleSheet("QLabel{font-family: Source Code Pro; font-size: 20pt; color: white;}"); + recentProjectsLabel->setGeometry(250, 100, 300, 50); + + std::vector extensions; + extensions.push_back(".xml"); + std::vector recentProjects = FileSystem::getFileNamesFromDirectory("data/projects", extensions); + + int position = 150; + for(std::string project : recentProjects) + { + QtRecentProjectButton* button = new QtRecentProjectButton(project.c_str(), this); + button->setGeometry(250, position, 400, 40); + button->setIcon(cpp_icon); + button->setIconSize(QSize(40,40)); + button->setStyleSheet( + "QPushButton{" + "font-family: Source Code Pro; " + "font-size: 12pt; " + "Text-align:left; " + "color: white; " + "background:none; " + "border:none;} " + "QPushButton:hover{color:lightgrey;}"); + connect(button, SIGNAL(clicked()), button, SLOT(handleButtonClick())); + position +=50; + } + + this->raise(); + +} + +QSize QtStartScreen::sizeHint() const +{ + return QSize(500,500); +} + +void QtStartScreen::paintEvent(QPaintEvent *event) +{ + QPainter* painter = new QPainter(this); +} + +void QtStartScreen::handleNewProjectButton() +{ + this->hide(); + emit openNewProjectDialog(); +} + +void QtStartScreen::handleOpenProjectButton() +{ + this->hide(); + emit openOpenProjectDialog(); +} diff --git a/src/app/qt/element/QtStartScreen.h b/src/app/qt/element/QtStartScreen.h new file mode 100644 index 00000000..0ab499bc --- /dev/null +++ b/src/app/qt/element/QtStartScreen.h @@ -0,0 +1,44 @@ +#ifndef STARTSCREEN_H +#define STARTSCREEN_H + +#include +#include +#include + + +class QtRecentProjectButton : public QPushButton +{ +Q_OBJECT +public: + QtRecentProjectButton(const QString& text, QWidget* parent); +public slots: + void handleButtonClick(); +private: + std::string m_projectFile; +}; + +class QtStartScreen : public QWidget +{ + Q_OBJECT + +public: + QtStartScreen(QWidget* parent = 0); + QSize sizeHint() const Q_DECL_OVERRIDE; + + void paintEvent(QPaintEvent* event); + +signals: + void openOpenProjectDialog(); + void openNewProjectDialog(); + +private slots: + void handleNewProjectButton(); + void handleOpenProjectButton(); +private: + QPushButton* m_openProjectButton; + QPushButton* m_newProjectButton; + std::vector m_recentProjects; +}; + + +#endif //STARTSCREEN_H diff --git a/src/lib/Application.cpp b/src/lib/Application.cpp index 2a5c7d08..15157d3a 100644 --- a/src/lib/Application.cpp +++ b/src/lib/Application.cpp @@ -25,17 +25,6 @@ std::shared_ptr Application::create(ViewFactory* viewFactory) ptr->m_componentManager->setup(ptr->m_mainView.get()); ptr->m_mainView->loadLayout(); - std::string startupProjectFilePath = ApplicationSettings::getInstance()->getStartupProjectFilePath(); - if (startupProjectFilePath.size()) - { - MessageLoadProject(startupProjectFilePath).dispatch(); - } - else - { - MessageStatus("StartupProject was not defined in the ApplicationSettings", true).dispatch(); - LOG_WARNING("No StartupProject defined in ApplicationSettings"); - } - return ptr; }