From 7e304b5a9ca1690dfb89942d890a4db0445aad51 Mon Sep 17 00:00:00 2001 From: litz-a Date: Wed, 29 Mar 2017 12:36:02 +0800 Subject: [PATCH] photo view --- PhotoView/PhotoView/about.cpp | 24 + PhotoView/PhotoView/about.h | 26 + PhotoView/PhotoView/about.ui | 125 +++ PhotoView/PhotoView/images/about.png | Bin 0 -> 1190 bytes PhotoView/PhotoView/images/blue.css | 113 +++ PhotoView/PhotoView/images/delete.png | Bin 0 -> 912 bytes PhotoView/PhotoView/images/drop.png | Bin 0 -> 4962 bytes PhotoView/PhotoView/images/exit.png | Bin 0 -> 914 bytes PhotoView/PhotoView/images/fliphorizontal.png | Bin 0 -> 1056 bytes PhotoView/PhotoView/images/flipvertical.png | Bin 0 -> 1005 bytes PhotoView/PhotoView/images/fullscreen.png | Bin 0 -> 1210 bytes PhotoView/PhotoView/images/fullscreenexit.png | Bin 0 -> 1207 bytes PhotoView/PhotoView/images/gray.css | 111 +++ PhotoView/PhotoView/images/home.png | Bin 0 -> 1351 bytes PhotoView/PhotoView/images/icon.png | Bin 0 -> 1120 bytes PhotoView/PhotoView/images/info.png | Bin 0 -> 1142 bytes PhotoView/PhotoView/images/language.png | Bin 0 -> 1530 bytes PhotoView/PhotoView/images/logo.png | Bin 0 -> 3172 bytes PhotoView/PhotoView/images/next.png | Bin 0 -> 1223 bytes PhotoView/PhotoView/images/open.png | Bin 0 -> 1075 bytes PhotoView/PhotoView/images/option.png | Bin 0 -> 1312 bytes PhotoView/PhotoView/images/play.png | Bin 0 -> 1817 bytes PhotoView/PhotoView/images/prev.png | Bin 0 -> 574 bytes PhotoView/PhotoView/images/print.png | Bin 0 -> 1099 bytes PhotoView/PhotoView/images/qt.png | Bin 0 -> 1221 bytes PhotoView/PhotoView/images/resize.png | Bin 0 -> 1161 bytes PhotoView/PhotoView/images/rotateleft.png | Bin 0 -> 1532 bytes PhotoView/PhotoView/images/rotateright.png | Bin 0 -> 1523 bytes PhotoView/PhotoView/images/save.png | Bin 0 -> 965 bytes PhotoView/PhotoView/images/saveas.png | Bin 0 -> 1153 bytes PhotoView/PhotoView/images/skin.png | Bin 0 -> 923 bytes PhotoView/PhotoView/images/white.css | 116 +++ PhotoView/PhotoView/images/zoomfit.png | Bin 0 -> 1162 bytes PhotoView/PhotoView/images/zoomin.png | Bin 0 -> 1375 bytes PhotoView/PhotoView/images/zoomout.png | Bin 0 -> 1313 bytes PhotoView/PhotoView/main.cpp | 25 + PhotoView/PhotoView/mainwindow.cpp | 861 ++++++++++++++++++ PhotoView/PhotoView/mainwindow.h | 105 +++ PhotoView/PhotoView/mainwindow.pro | 46 + PhotoView/PhotoView/mainwindow.qrc | 37 + PhotoView/PhotoView/mainwindow.ui | 302 ++++++ PhotoView/PhotoView/mirroreditem.cpp | 196 ++++ PhotoView/PhotoView/mirroreditem.h | 45 + PhotoView/PhotoView/mirrorview.cpp | 250 +++++ PhotoView/PhotoView/mirrorview.h | 56 ++ PhotoView/PhotoView/mirrorview.ui | 56 ++ PhotoView/PhotoView/photoinfo.cpp | 139 +++ PhotoView/PhotoView/photoinfo.h | 29 + PhotoView/PhotoView/photoinfo.ui | 196 ++++ PhotoView/PhotoView/photoview.ico | Bin 0 -> 7662 bytes PhotoView/PhotoView/photoview_en.qm | Bin 0 -> 3959 bytes PhotoView/PhotoView/photoview_en.ts | 371 ++++++++ PhotoView/PhotoView/photoview_zh.qm | Bin 0 -> 3380 bytes PhotoView/PhotoView/photoview_zh.ts | 371 ++++++++ PhotoView/PhotoView/slideshow.cpp | 76 ++ PhotoView/PhotoView/slideshow.h | 43 + PhotoView/PhotoView/slideshow.ui | 47 + PhotoView/PhotoView/toolbar.cpp | 118 +++ PhotoView/PhotoView/toolbar.h | 37 + .../PhotoView/translation/photoview_en.qm | Bin 0 -> 3959 bytes .../PhotoView/translation/photoview_zh.qm | Bin 0 -> 3380 bytes PhotoView/README.md | 3 + 62 files changed, 3924 insertions(+) create mode 100644 PhotoView/PhotoView/about.cpp create mode 100644 PhotoView/PhotoView/about.h create mode 100644 PhotoView/PhotoView/about.ui create mode 100644 PhotoView/PhotoView/images/about.png create mode 100644 PhotoView/PhotoView/images/blue.css create mode 100644 PhotoView/PhotoView/images/delete.png create mode 100644 PhotoView/PhotoView/images/drop.png create mode 100644 PhotoView/PhotoView/images/exit.png create mode 100644 PhotoView/PhotoView/images/fliphorizontal.png create mode 100644 PhotoView/PhotoView/images/flipvertical.png create mode 100644 PhotoView/PhotoView/images/fullscreen.png create mode 100644 PhotoView/PhotoView/images/fullscreenexit.png create mode 100644 PhotoView/PhotoView/images/gray.css create mode 100644 PhotoView/PhotoView/images/home.png create mode 100644 PhotoView/PhotoView/images/icon.png create mode 100644 PhotoView/PhotoView/images/info.png create mode 100644 PhotoView/PhotoView/images/language.png create mode 100644 PhotoView/PhotoView/images/logo.png create mode 100644 PhotoView/PhotoView/images/next.png create mode 100644 PhotoView/PhotoView/images/open.png create mode 100644 PhotoView/PhotoView/images/option.png create mode 100644 PhotoView/PhotoView/images/play.png create mode 100644 PhotoView/PhotoView/images/prev.png create mode 100644 PhotoView/PhotoView/images/print.png create mode 100644 PhotoView/PhotoView/images/qt.png create mode 100644 PhotoView/PhotoView/images/resize.png create mode 100644 PhotoView/PhotoView/images/rotateleft.png create mode 100644 PhotoView/PhotoView/images/rotateright.png create mode 100644 PhotoView/PhotoView/images/save.png create mode 100644 PhotoView/PhotoView/images/saveas.png create mode 100644 PhotoView/PhotoView/images/skin.png create mode 100644 PhotoView/PhotoView/images/white.css create mode 100644 PhotoView/PhotoView/images/zoomfit.png create mode 100644 PhotoView/PhotoView/images/zoomin.png create mode 100644 PhotoView/PhotoView/images/zoomout.png create mode 100644 PhotoView/PhotoView/main.cpp create mode 100644 PhotoView/PhotoView/mainwindow.cpp create mode 100644 PhotoView/PhotoView/mainwindow.h create mode 100644 PhotoView/PhotoView/mainwindow.pro create mode 100644 PhotoView/PhotoView/mainwindow.qrc create mode 100644 PhotoView/PhotoView/mainwindow.ui create mode 100644 PhotoView/PhotoView/mirroreditem.cpp create mode 100644 PhotoView/PhotoView/mirroreditem.h create mode 100644 PhotoView/PhotoView/mirrorview.cpp create mode 100644 PhotoView/PhotoView/mirrorview.h create mode 100644 PhotoView/PhotoView/mirrorview.ui create mode 100644 PhotoView/PhotoView/photoinfo.cpp create mode 100644 PhotoView/PhotoView/photoinfo.h create mode 100644 PhotoView/PhotoView/photoinfo.ui create mode 100644 PhotoView/PhotoView/photoview.ico create mode 100644 PhotoView/PhotoView/photoview_en.qm create mode 100644 PhotoView/PhotoView/photoview_en.ts create mode 100644 PhotoView/PhotoView/photoview_zh.qm create mode 100644 PhotoView/PhotoView/photoview_zh.ts create mode 100644 PhotoView/PhotoView/slideshow.cpp create mode 100644 PhotoView/PhotoView/slideshow.h create mode 100644 PhotoView/PhotoView/slideshow.ui create mode 100644 PhotoView/PhotoView/toolbar.cpp create mode 100644 PhotoView/PhotoView/toolbar.h create mode 100644 PhotoView/PhotoView/translation/photoview_en.qm create mode 100644 PhotoView/PhotoView/translation/photoview_zh.qm create mode 100644 PhotoView/README.md diff --git a/PhotoView/PhotoView/about.cpp b/PhotoView/PhotoView/about.cpp new file mode 100644 index 00000000..4b999354 --- /dev/null +++ b/PhotoView/PhotoView/about.cpp @@ -0,0 +1,24 @@ +#include "about.h" +#include "ui_about.h" + +About::About(QWidget *parent) : + QDialog(parent), + ui(new Ui::About) +{ + ui->setupUi(this); + this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); + setFixedSize(307,165); + ui->retranslateUi(this); +} + +About::~About() +{ + delete ui; +} + +void About::on_OK_clicked() +{ + close(); +} + + diff --git a/PhotoView/PhotoView/about.h b/PhotoView/PhotoView/about.h new file mode 100644 index 00000000..8e105a8c --- /dev/null +++ b/PhotoView/PhotoView/about.h @@ -0,0 +1,26 @@ +#ifndef ABOUT_H +#define ABOUT_H + +#include + +namespace Ui { +class About; +} + +class About : public QDialog +{ + Q_OBJECT + +public: + explicit About(QWidget *parent = 0); + ~About(); + + +private slots: + void on_OK_clicked(); + +private: + Ui::About *ui; +}; + +#endif // ABOUT_H diff --git a/PhotoView/PhotoView/about.ui b/PhotoView/PhotoView/about.ui new file mode 100644 index 00000000..53484fb5 --- /dev/null +++ b/PhotoView/PhotoView/about.ui @@ -0,0 +1,125 @@ + + + About + + + + 0 + 0 + 307 + 165 + + + + + 307 + 165 + + + + About + + + + + 11 + 11 + 281 + 141 + + + + + 10 + + + + + + + + SimSun-ExtB + 16 + 50 + false + + + + Photo View 1.0.0 + + + Qt::AlignCenter + + + + + + + + SimSun-ExtB + 14 + 50 + false + + + + Developer:SHI + + + Qt::AlignCenter + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + SimSun-ExtB + 11 + 50 + false + + + + OK + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + diff --git a/PhotoView/PhotoView/images/about.png b/PhotoView/PhotoView/images/about.png new file mode 100644 index 0000000000000000000000000000000000000000..f88792fa2c2187faf80aec1e470569acbf93797f GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJK#snr zi(`n#@u^qO=Jy1Ouzk3{XW8Pfx>uEUX}@ji;95ChleXfx!ff1T*zb!%Df7RPo&W3jmtU)}j`I&X8uNt|XpYA;>&W>dRI8fcHz{E^~EtFG`47Kl#<;qo#eYrmvo$*E6Ti{YuM|>{yf8 z8hXcjy07U>%P%^<-r-a9cAl^|ucps7)0?usNcqO<_|+cGuNmL1nwna9YUhl}^R-fC zrttbao^!=!@AZf?nd_$n?RvueX2xEfiG}y}&8W@{RKE1Gr)@#}rK+3xN{NqHi#f%u z6YHbWH(1&C{91D_?PbJslNV1sH@wenH;qi&yY2?3sHkn{7B;QtBC?m>>@K`+tfd~oi)cmq9n0@SJ7HsHYU#bUn^hq$~*q#*5%%QIc>$N?;B*C%k=Cn z8rrWG5x3d0w@5{N)fE3-U%oe6^)uUrD#~47to+4pi)7rCS*EYL*X-G|MpF5mWv=^E zeO1+`6HagY7pXbx%ZXU$YmvFk$IeKYzD&R2yS#V$u4ld#57um()Vazj>X^1iLQZ}u7PEUp@o&9v6X=tL_^GH ztIa?Sejpo)^V3So6N^$AJaZG%Q+*TDGn2Cw%=9euEOZSG6ao#+6e=vt;>}DHVAdO2 zDrA(D6jr$r2!wLo!NpldP;<@{>z*Q}ar!tO9^a zix~`;|KF{TrUq=cm6bnc}IZ!p>nJFb1ASE(2%y)oFB$1T( zX6B}rR2HN%fL*0uke6=1Da;Se9N!S2Dh5Ln10!Pt3v&yzJDXKOP8LQoCpfbzmBB*K z)Y#j}$$HJxKS1dyBC=x5~Trh)>ZC_ldh93ZKQ#g&=K`FVPIsU`Z! vDS5h?x#@av!Q?#s;-X}ILql@|BM50?q6c)R`pzg9pe+oZu6{1-oD!M<)ThyW literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/images/blue.css b/PhotoView/PhotoView/images/blue.css new file mode 100644 index 00000000..d8651867 --- /dev/null +++ b/PhotoView/PhotoView/images/blue.css @@ -0,0 +1,113 @@ +QPushButton{ + border-style: none; + border: 0; + color: #F0F0F0; + padding: 1px 10px 1px 10px; + min-height: 25px; + min-width: 60px; + border-radius:5px; + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #0F7DBE, stop:1 #1582C3); +} + +QPushButton:hover{ + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #50A3F0, stop:1 #489CEA); +} + +QPushButton:pressed{ + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #0F7DBE, stop:1 #1582C3); +} + +QPushButton#ZoomIn,QPushButton#ZoomOut,QPushButton#ZoomFit,QPushButton#FullScreen,QPushButton#Prev,QPushButton#Next,QPushButton#RotateLeft,QPushButton#RotateRight,QPushButton#Delete,QPushButton#Info,QPushButton#FlipV,QPushButton#FlipH,QPushButton#Play{ + border-style: none; + border: 0; + color: #F0F0F0; + padding: 2px; + min-height: 25px; + min-width: 25px; + border-radius:5px; + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #50A3F0, stop:1 #489CEA); +} + +QPushButton#ZoomIn:hover,QPushButton#ZoomOut:hover,QPushButton#ZoomFit:hover,QPushButton#FullScreen:hover,QPushButton#Prev:hover,QPushButton#Next:hover,QPushButton#RotateLeft:hover,QPushButton#RotateRight:hover,QPushButton#Delete:hover,QPushButton#Info:hover,QPushButton#FlipV:hover,QPushButton#FlipH:hover,QPushButton#Play:hover{ + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #0454BE, stop:1 #0435BE); +} + +QPushButton#ZoomIn:pressed,QPushButton#ZoomOut:pressed,QPushButton#ZoomFit:pressed,QPushButton#FullScreen:pressed,QPushButton#Prev:pressed,QPushButton#Next:pressed,QPushButton#RotateLeft:pressed,QPushButton#RotateRight:pressed,QPushButton#Delete:pressed,QPushButton#Info:pressed,QPushButton#FlipV:pressed,QPushButton#FlipH:pressed,QPushButton#Play:pressed{ + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #0F7DBE, stop:1 #1582C3); +} + +.QFrame{ + border:1px solid #0F7DBE; + border-radius:5px; +} + + +QMenuBar { + background-color: #2F90E4; + font-weight: bold; + min-height: 21px; +} + +QMenuBar::item { + spacing: 20px; /* spacing between menu bar items */ + padding: 1px 5px; + background: transparent; + color: white; +} + +QMenuBar::item:selected { /* when selected using mouse or keyboard */ + background: #030711; +} + +QMenuBar::item:pressed { + background: #030711; +} + + + +QMenu { + background-color: #2F90E4; + border-style: none; + font-weight: bold; +} + +QMenu::item { + background: transparent; + color: white; +} + +QMenu::item:selected { + background: #0F7DBE; +} + +QMenu::separator { + height: 1px; + background: white; +} + + +QStatusBar::item { + background-color: #0F7DBE; + border-style: none; +} + +QLabel#label{ + border-radius:5px; + padding: 2px 20px 3px 20px; + background: transparent; + border-style:none; + min-height: 13px; + color: white; +} + +QLabel#photo{ + padding: 1px 1px 1px 1px; + border-style: solid #0F7DBE; +} + + + +QDialog{ + background-color: lightgray; +} + diff --git a/PhotoView/PhotoView/images/delete.png b/PhotoView/PhotoView/images/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..f29febeb549c89cda2c902d6aaf24a575c1f6fb9 GIT binary patch literal 912 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 Vi;RFkk4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJ3=E9Y zo-U3d9>>p4H7q)0AmA#m#%j>~BK9eRNWtPcisBD=66BkiEiA$p9Gdq~Atb}rOYqEz z=A@fJ!nsRj|89@V4(DdjwAM07Tac+$w#4SztVwAbc5H2%^fmv><&45?^-G%bYbFS6 zySMY8s>Qy81v3{^a`*5n2>Z0iG;RLQkhSlkZ2z>hMbju8zx13koOZFQ~M;rHUJuUP1(TP)TIuTz^&27+I6#tL? zfWn)Zwoi@uuFWmc*)`$V5(Ver4Nr@o$sIY7En>gmg{F$D;j$^8Hw5L)*5uDsYhJkM z$-R$vG*`r=|3BQV5?JNA!;Ntrr~9mg%EN|LTO7X>w66I0k6HVpY+!k1#u{Ltsg}4# zl%yn$zRRBU0q(r8M`3_KtB$5)}%-qzH%7Rn|u&eY7^3v@$h54bG;~N50#b9V+U}S7y zVQy+JCzbsUs6-gaoZ!r=R0dN$Lkn*wr;1-o{{p3>kfcL{JQ>n5b5emppr4VSn+ghu zqWt_4aDb#H7FT8_=jZ9=rIzR?r{w8o=BDex1(Wmii;I%=4Gql=3?Zbsg&xqIFaB@d Q0knm|)78&qol`;+0Mj2qGXMYp literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/images/fliphorizontal.png b/PhotoView/PhotoView/images/fliphorizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..07ce2d9f88ae7eb8216d5291eb062ec68cf5c427 GIT binary patch literal 1056 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJ3=E7b zJzX3_JdSU@vOin6P~!NB z#^q~vEsv4e@aUJz+T5KQ3LB<=x|Us)c{#JeRklU=YqVH5RKn1G?z)K(eAdXF6Tx+#)%H+ zgUcSIBqgyv{yc5g`gx)|Y!t6?DhR!pdf2I9Mud99x?S(Lxz`_jDcLQ`_=)AzDUUTA z8w`bBWUw9ZSi`_uJJDhD()EIjx1!qS{g|229?Ynldv13|@Pl^M=}ByD(+X5nJ|AS7 zT^4C7kS5cA;PIJ%2edwa3!3e$uhYP)&l{Zn?aY5xfBl-m3nkkHfl;Vh;u=wsl30>z zm0Xkxq!^403{7~>+ z1IrLYLn~8LDZ(@38a<+n*o`s%;uAzZK zprM&Ug@swXnTZ0-dP7TvjFOT9D}DX)@^ZaQkS-tw>e9Z3yYRg5l1oyswO-$ zr6dESM5c!M4p50Ck`mv{+|-iFf>Z{utMm)<((N~e`JtKP8v<0tU}$1sWMpAxXk@u^ zuJdW25@95Bf-|d98BFyI%)FhPmb(6~14>6BNrwh`GNfhZqymFLKO;Xk6%-If`S~T_ z07*?OuFOo%&(q6GEzwU-$ht4#<4+QQ)J L>gTe~DWM4frk4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJ3=E8A zo-U3d9>?cSwe>jcAak_-`ZS9xD@CU7((IV*QFzfYhGpqHr;EOhEGxU4Ug&V;=`FI@ z8B!vov+j|5Y-mAX!KIV07G&%%;@f#FXtG)P`(-Tm^q=hgf49{ze2$7}aB-95xt|Y0 z?rXhBni;L-p%Q9aJj2ec;)vTW?F~9@Hy$oMw~Dc2lG5qh_QeVgJ(@)|RkNa*gw7Ou zUc7#XMd3x-RO_i*)edOCKESYl4Kw4c)Vo3#w6gbyvb;!WlsjEC?#cWFpGq`^X!ZIPi~ev%~8&mc(kz~TSoOPN8r~#4)gL4aom4@ zTSam~$bYR<66{$MxKccKTI8>-=>Mc}J8Q~*i{x1|si0e{;J;fIR>f>g;kZmSiL5MY@2(mJ{%YyswJ)wB`Jv|saDBF zsX&Us$iUE4*T7uY$TY;r(8|Qp%Gglbz{1MFz~eGMFp`lp-L1;F+74p6Z*Jo|&AjV5VoGXQ69opb%(i zrchyF7H?*v0JGlEQX!+Hq`*pFzr4I$FB7B-h=IEF@{7`0dFGe`O_l(e9FkF*n`C9> zlAm0fo0?Z*WfcHaTFhX${Qqu!G&Nwmt*ks!Gt)Cl7)%X~`g?;LfojB&%z>&2&rB)F z04b5FVZH-YB8jBLH#0Z2q_QBD0qiRMg1mJ5O<{g$=JC)yoQyi9 z2UH@AWKM8qRVstAp0Sy?lT)MVmMK8#C?x67AWw$0%$!tU5a?&*=ca-Jq9{MV1RNl# ziN%$f$@zJDd8sA($tiidnYrnDaKYp}{oJJ1#ePgg&e IbxsLQ0GbwM&Hw-a literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/images/fullscreen.png b/PhotoView/PhotoView/images/fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab3e1c451483958077d67d882e437127f075d0f GIT binary patch literal 1210 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-GzZ+Rj;xUkjGiz z5m^iri~!@=$M$UoGW0xM978;gznyBIAsi@keE}G@(azm>RQve$ zncw;N?)Tq)_uqf7dtZIX<%}7>r0d*9kAl`Lk+6whl&W`?Xd52knO(1ZVcCgy3U|F! zP6kSg`G!S&SK&(JY_T{R-TmW;_pQ1{v+k4~?^44bvw1ds(UE_1-B<0V|H-KV-ye7w zp62J)+Gu;lqdX(g;ELu1mlTalhgMX->o8%>l9*?7Z}K6H?->`8=H-gn9%J%tuidq> zt1wY_?W%RV*1byh7nF{=w&C83X<1@_gS~&LmI>U^l#Su6k^ZQzrWo|g{$K0E{K(tI z&Kr-vn83Br^Ti|^rb#71#kWLDrJri7KkfDFg6CYZ(6l=m0*@rt8{YXIy=wb!llwOk zm@amjo}XoqGvV-3`G=xxhsDb8_PuXAWpdw8;?$f2OP@!)k9p1&dBkzr+t{3q0-H+P zv*)SXr^^@~4d1_T&to0`H`Q}1%f2m{kkYit)#i~>c4F|_O{w!)+mdzOTId@{)Rp&| zzUiDlQ{`HSAbW++=K0$77mZDQmo!XVvT52Cj#q85J6+VwnplG8-ueAky1Pfv_x#SO z@+ub|Io_Bmz*l+x2RnzvtUJdzZ~mHD@ZsGb=GAv9L(lwY+67EbswJ)wB`Jv|saDBF zsX&Us$iUE4*T7uY$TY;r(8|=n%GgNTz{1MFz-7V1TPPZG^HVa@DnS}dbPa%d3_%)9 zOsxz|AR6XOIp_t{;0LmyI6tkVJh3R1!8128J=HfcJu^95!A#FW&qCMGKq1i3OrgTU zEZ)pS0cO3Sr9wtYNr9EVetCJhUM5Hv5Ce7Tnk)e_IV7VrH_6J%B|o_| zH#M)s$|?Y;w3xwg`TyPeXllTATUmLeW~OJ9Fc_Jc9eO7Y@{%}`IZ!p>nJFb1ASHqF z?(IM&l1NH?Gjmf*DhpB>z^>9S$V<216y}F!j&BH16@#I%rG=%bp{0R|^>s~cpb}vu zbAmIgQW;G23{1V9oCMqBRe;h_NYbG}o(yT3IjO)P(9g)vO$7x+QGR|2I6zVpiz_pe z^YirbQcLucQ}T2(bJO+Ug2{RM#YM^bhK8mVmJrgwLJ#Q9U$>g(0c~OMboFyt=akR{ E0Pk4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-GzZ+Rj;xUkjGiz z5m^iri~!@=$M$UoGPFHi978;gznyBE5gaIT{Qv$v)6F#eqL{Oi4(M5hmS|_Nvpc3A z)Z%E$4HDQC!F$QqO0@9m#-&I5Jv}nmjX45kc8QhSWf?FY+aI0 z(j>=8Qw(y-StT~jQSmxg6%rw!$JzDm0sHy4<@ybYQ^UWlK2poa@lYUN;niyM1^c*E zavlltO@30#xUcA}ca?)tP$>7QQ~frVgF}1S9g0jBcJE_&yla)iU#4|u_w1K>GE=F; zWkYwhJ%jU1k>4?@rS6Vzx3F|*t=c+AB6Q2`vS(RQ&IYR%_#BtbjtahLQXzFEv(@TN zhV#Ga^(q3Qv8OV&EWEqSXcyP%w@Km!rV9%#WxKlaUc_FuTO)3DZ7F}zBY|#N-&^t8 z(nfOx9%;PX&$Og7Vg3t=$omaEf-Z+2h^*enpzUJ2_xl2mXsutX;v7X^cM7CeW}n<@ zr?et*#l}M%PE2|q?ya&jKEBN35%N(~$at~;M+bSoV3P<}SY;*3q3(RS&>rXF2Rw+nhV#p%m9#iR*4-^yOXvA*(% z!{rb6&O4vm%8;aEcqc_Lq0O9UaeU3`u)U16`8mL}q*~${QIe8al4_M)lnSI6j0_A- zbq&mQjZ8y~46RHJtc;Dc4J@n-3|tmGyoI76H$NpatrDccMArbQ#}K5!#MH{b6r#cE z@u`164SpaSiu2P-$`gxH89Z|n(^GvD(=(H^70mQ3^el7@4HNV6kygH zS}J6eloVL$>z9|8>t%v;0WnaQUVc$JE6*HLpve*-lS48}bCayBT=J7kb5rw5tgHfn zN{bl`m;c|bkERA}x0RJgYG!&y34@WD*`ashATNm{nFCc5o|#gT0a6ku@7@knB8jBL zH#0Z2q_QBD0qiRMg1mJ5O<{g$=J)78&qol`;+05!+74*&oF literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/images/gray.css b/PhotoView/PhotoView/images/gray.css new file mode 100644 index 00000000..3f8b194e --- /dev/null +++ b/PhotoView/PhotoView/images/gray.css @@ -0,0 +1,111 @@ +QPushButton{ + border-style: none; + color: #000000; + padding: 1px 10px 1px 10px; + min-height: 25px; + min-width: 60px; + border-radius:5px; + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #454648, stop:1 #7A7A7A); +} + +QPushButton:hover{ + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #B8B8B8, stop:1 #D6D6D6); +} + +QPushButton:pressed{ + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #454648, stop:1 #7A7A7A); +} + +QPushButton#ZoomIn,QPushButton#ZoomOut,QPushButton#ZoomFit,QPushButton#FullScreen,QPushButton#Prev,QPushButton#Next,QPushButton#RotateLeft,QPushButton#RotateRight,QPushButton#Delete,QPushButton#Info,QPushButton#FlipV,QPushButton#FlipH,QPushButton#Play{ + border-style: none; + border: 1; + color: #F0F0F0; + padding: 2px; + min-height: 25px; + min-width: 25px; + border-radius:5px; + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #B8B8B8, stop:1 #D6D6D6); +} + +QPushButton#ZoomIn:hover,QPushButton#ZoomOut:hover,QPushButton#ZoomFit:hover,QPushButton#FullScreen:hover,QPushButton#Prev:hover,QPushButton#Next:hover,QPushButton#RotateLeft:hover,QPushButton#RotateRight:hover,QPushButton#Delete:hover,QPushButton#Info:hover,QPushButton#FlipV:hover,QPushButton#FlipH:hover,QPushButton#Play:hover{ + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #636363, stop:1 #5C5C5C); +} + +QPushButton#ZoomIn:pressed,QPushButton#ZoomOut:pressed,QPushButton#ZoomFit:pressed,QPushButton#FullScreen:pressed,QPushButton#Prev:pressed,QPushButton#Next:pressed,QPushButton#RotateLeft:pressed,QPushButton#RotateRight:pressed,QPushButton#Delete:pressed,QPushButton#Info:pressed,QPushButton#FlipV:pressed,QPushButton#FlipH:pressed,QPushButton#Play:pressed{ + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #B8B8B8, stop:1 #D6D6D6); +} + +.QFrame{ + border:1px solid #454648; + border-radius:5px; +} + + +QMenuBar { + background-color: #5E6D78; + font-weight: bold; + min-height: 21px; +} + +QMenuBar::item { + spacing: 20px; /* spacing between menu bar items */ + padding: 1px 5px; + background: transparent; + color: white; +} + +QMenuBar::item:selected { /* when selected using mouse or keyboard */ + background: #1582C3; +} + +QMenuBar::item:pressed { + background: #1582C3; +} + + + +QMenu { + background-color: #5E6D78; + border-style: none; + font-weight: bold; +} + +QMenu::item { + background: transparent; + color: white; +} + +QMenu::item:selected { + background: #454648; +} + +QMenu::separator { + height: 1px; + background: white; +} + + +QStatusBar::item { + background-color: #454648; + border-style: none; +} + +QLabel#label{ + border-radius:5px; + padding: 2px 20px 3px 20px; + background: transparent; + border-style:none; + color: white; + min-height: 13px; +} + +QLabel#photo{ + padding: 1px 1px 1px 1px; + border-style: solid #454648; +} + + + +QDialog{ + background-color: lightgray; +} diff --git a/PhotoView/PhotoView/images/home.png b/PhotoView/PhotoView/images/home.png new file mode 100644 index 0000000000000000000000000000000000000000..b978da9a3a8c7909614b81ac30d561de8a2b96d2 GIT binary patch literal 1351 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJK+XkE z7sn8f<7=<_XULR_uzxuJ=Kl?|DM#+AshM%iv++>$aykn4llX<_~o{A5T zj>=Vu@Mt)7v)g`owUkq|TPZYy_l9p7@7ZlDCoX%Zw%b@P?OT4C!-eu$`uo4{`+VqVAuH#6Ij=KUeylmGPH9(~2V`ZeK6nk$F`7p2V70_H24TBBDz8A<+M~Vk)4%qt3!%brEmWG@Z6i9BPQA|=ypko@?}mR$PrHR! zcEBeO-zV#0E33D;^!#WzFmF$+v|s0hj~<%e9Q|C~7OYi#^|tm3yCL5c_5x??=DuwX zD$3eE`+r(FMM?(ptM6o8owX`2a#FeFQFhbmPjz=Lo%JBJHKLh$_OpT&N+vU3HG3}X zTK+_M&&vg`n@e?{oPD)oY2Sz0ed$$CbzlG8U2xYwf$e)RXWruy{=YA(=0BLXzQv+> zerxh+XWld4F088lvY$QPDnD>V!r`_{67nX0*C~WtpZKv^yD;&;m!I{zOn1ePPgn3~ zSOkQ*9E+DblKNNwQtfWJ?=xz3m)={qTQDPQW`MvA|LZUJh<{x9OHlqwP1E+PvBhN@ zRLosI%$1pSa<2ThgJxp6KNRBbS2W$2bHC!GWb4Ao+pK@YoW1*SSv%*W9nYpdxqfX@ z@aN@irP(_QO)CHFH?%uxJtg$wruC&R*Zyn&W8CxhSKy4`pl`sGu3F+6QIe8al4_M) zlnSI6j0_A-bq&mQjZ8y~46RHot&9z{4J@n-4Bjna`H7+-H$NpatrDccNY}s&q`}a_ z%Gk)tz!ak4cGT-QpawsX4aNCsCFO}lsSKXEiRr1niRqci*$QTQ7J3%Ch6W0OhGq&C z7H08gCJHd?4J{QiN=gc>^!3Zj%k?rrx_}s{OE14Dot0;fDbQpIkjWt#rMXE~RxbI; zrManjC014eK&8bDhRgr&)<;tVw%f|eBQ-NUqlCf8)a>P97fGNRaU^q~YQi&9N-{u7 zs*FTjfJ!8hl=x=mrj}F|q%weArC*SjZoeta56v9k5TGgsLt_&IGb00IBU6RIHUEK1 zgpte%&a6shFxE4&^mcN3V%A#(l#W7@4h`~TNXyJg1qOkBMt*K8C?JaR^Gm=1lA2gt znVFoQroyjdo;lPR z%BYzul~OWWK>y(CZZUIJ8S}N-VIAueyUV;5IPFqcE5|2yGU>|WrY$$VS>+o2nsz{5 zYVx)Bsh+>|GIY;n-7!jbc+6!ti&gn^ZhpaGOV7;jrn(;Ym)-r` z+}pQlO_l%O!rdL_+-_b4YxOFF*R8yi;_%_%znxd!&f{*HV;#i(aB|ky4xd*6tWtZ0 zd8`_?h&L(n`<&dF{kUd_bN`9_=^Q7x5`*^y0tk);q z%QJZ)eul%&ibX5dO!3mwH7f!vf4ux6l)mq{w&S^}i-I0D6;{rF%3Tol+g|RtUTu>< zpZL@z#&w)a=dIWOyzY`wlcIaK*CEYh)g7rfZ-=~}`CxW(>aEa&CvxWRKAof6=doUP z+pCc0+8kL5X%Tb(aMedl5OJR{JNS{1+vH7JkssN)i<8&n%=^o2`exzm0Xkxq!^403{78Of9VpEwl|RtPBh~3m7J%Xvob^$xN%n zt>K664qc!IKadT@`DrEPiAAXlp1FzXslJKnnaSA-W_lKS7P^K83W0`Z3KbS+@n$9p z5bMo#4J{QiN=gc>^!3Zj%k?rrx_}s{OE14Dot0;fDbQpIkjWt#rMXE~RxbI;rManj zC014eK&8bDhRgr&)<;tVw%f|eBQ-NUqlCfG)U>E)H7I|GBbftL6P}q;lEGkTX}C>- zIl-A#z~I(1HuZLLGW{-a4k#UkBpn*$$&i+rlL`z1{fzwFR8T+^<>!}x10*%ExH2<2 zKTj_&wM0KTB~LdqH(d`dn4G6yT$HSDXlQ9*2_a34^?>dSeYWlu&=v+yS3j3^P6k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJ3=E9_ zJzX3_JdQ8DYUsV#QGo4%`ut9X6Oo!-Mdl@ZiwU;C$!zvZw4N zmqzV&b-kPz|NVB~Cgb{#2i@n_e)X)k_@8|B`?=fcbGPJaL>tO<=ilfm(mpi#n}$T` z1+MDoZ#ShW5IoMeM#z{Im}^Bs^@&%#eAER zt>d(<`wlK~N>QAW5&rfnUsjp(Oz}k@=J_rSpY7}^{ABTj16#fP`LxzK>P=$Yo>x^= z@L24NyX{O>k0@t0=C-8ta=j%56CISD*&OCxzHr3baH(DLrcK9$JW@1GzGRB5n*Z)k ztiG3>Oj)R?U= zbSiC5z&+p0lF6@%lve7MPk8l4`H#zM*85cpzMB5_Jo~Zj;3dt)W^ppP(&zil?is`c zcls?8shOBB{a)36((&K+z4 zg%}xGnHpJ{m}(nXSQ!{_8wj(ZXvob^$xN%nt)VJ+^)8?WKadT@`DrEPiAAXlp1FzX zslJKnnaSA-W_lKSK#L3%0u9X+DlE+6%}f*^)|=}ZS}J6eloVL$>z9|8>t%v;0WnaQ zUVc$JE6*HLpve*-lS48}bCayBT=J7kb5rw5tgHfnN{bl`m;c|bkERA}x0RJgYG!&y z34^h@g>8T0YM>f%By*r@!ZTA!GC)e!)fs*RDv?A|;+vV9T2fh%$^dqienDQk{iZNK zG;@4IfT|b_O^hwgjm^x>Ota%%-vX5gBbgJNSp`&Kpl9OkFVdQ&MBb@00X9~*#H0l literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/images/language.png b/PhotoView/PhotoView/images/language.png new file mode 100644 index 0000000000000000000000000000000000000000..13e91837e2c64b85d7744eb2b5bd9513fce68371 GIT binary patch literal 1530 zcmZvcc~BEq9LJvsSV6%91+3z##VVL&H{@cKa0o&;B3CE@5t6WkKn_S2LhvXkPA!gr z4tNz%5jg?~+EN8Pxuha>1R|6IwiPNOhb>jGDt5tXhj#kM@BQZe-sk(izkP4^ed)_} zUu?9>2mr8{ zt8<{o-8`KlTE|;`_qVRTzC_E53|VjCinf;#197D**qcfgZ~}K+SYW;3ilbS@VJrP* z$IQ$&FG`N6?)1)bG7>Y=oEytK=@%KI&sWV48(iJmO={}tJ6jiSx?ioH9OI6Rsq%9t z9G<>mKYjBq|MBZ%l}9tuZG)RMCs3c}PcD1cqd8|{Ok1dp6@cQxg!wd6*wiudq z+5Bu!xytO?Kw755`ViKpU)FT6)voud)H2_oQ*Uy|+SilUjpa@*4o%G-U$ip0C?~^6 zUytLk-!8{0p=PI_prk_5Rn<1sS^nMrC(H8dVx$jiTH_A3@dHlo6V@5)Vcev>sjW+v zBJ&Hh(pM)lqg1@{l;B#&^SrZ0gSGo?)w}eOcu>zd1YP`R=PzymupiTq^&m zXcu>~s9M|Rl+L@>!El_~`l+SBrQgK7uf$Oi(~WRa*`_I;ZOPX62L$zxmKNlH-)Y;J z`}>)YE)D0_?Ji+=yg{S%<3llF_RZ|8Q3tfliZJiq2YO*Qb;7GhjO(`zPhH-D;k7@Ma2(^pZ?;w&* z{1Vox{Wn2$g#5ye6bGK@1qyIZ=#?6fzkm#{uMy$uXq> zS13`)IZ`3SAdXa;pu%TM5W*nCWZD)eAjlnZONvt{amZJiASQ9-5P7y3geg@Lg&ZXs zgJH-eK_ZQW;LQ+Z!a4Yau(O!43ye;X2~pHlAxfCBL{VR&GZjFJ-`7$8!_0mvih5uY zaWoECOxSUrVbcFIpGhL|Xn?>}W^5GCieN0~c={&D>17Io3)-v-bhRj*!`Ex*&M2ZndPKj2? zu$hBbDirwa1z-Y|Mj}$k$#M**h$7`AiA+rXrznzBR7w#ALFiQb4z@E6*MUcdkV literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/images/logo.png b/PhotoView/PhotoView/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cfb407b7209e3275df8c5e9aaf95bec1ce76dc15 GIT binary patch literal 3172 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 R>y4xf;Ns}va0?%L;$H{Rb`Agl literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/images/next.png b/PhotoView/PhotoView/images/next.png new file mode 100644 index 0000000000000000000000000000000000000000..e625f3613bdd8058fefac1e804bc9ec06f09009c GIT binary patch literal 1223 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+081EX?)Plzi}L1J?9_8mLQ z%FD|uDj1lU!XhI6|Nk#2ENo$AwQCh?LdTgvG>s{QMRzUc6`T-oF0+&hGAxuC9fP7L}BhNy*6M7Z%FM$pQ7s z%FEZ**UKs>R9001UG?L~4><*e&!0bM<>UZ;H*?mk^XJcBx_p_LjSXlu2RAp+VLdEALa-t?FQJoA_kn z?{8oKuuS{lK5eIL%hQJsp8VM%FC;G~r#R(L$)~cYcCo~c*FeruPZ!4!i_^&o5+x0R5iV0W`)xMQ*wL~?Bu`Z5lF_D#MW1$rZqU+j zb9)$kaM=-H`!*^q)&E0b4UxNyaZAy@XUMu}+EFE)<@7c{sQ9h$+t?0||I zm$1vMS%rs1W*k4}s^k!(5@C1m&?NR{2Tt8$W6XK`M%nQbU*DcL0hM;@>EadzrN!Sn zT&B7+{y8=;?#GjvJ$q|2H1!X>d)@9o&#~d4y@F7`4RdqCf*Jw4$^~5yCR{ME`NYHH z^ic54k0VOd^d!2%@DHOtfiDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&U|7|wYy{+S z7I;J!1L+hn=AU--E&~H&nWu|mh{y4@(|o;|0!7;7kK46IwTf;j72J|77~=9|lbF-r z*=B2RePzFOZPf)|H)+N2Mn%`o3A;R$E{AFbliPHr(GO>OZFtjG>gQG zaqjD$EM8FX{z+r0*{-$aij#w%=FAhSQ(}^sVi~?er_?EjGhu>C_Cub$##}L$4Qhe2 z#NIXQFqXOOv@Kkmca+;TEJEy|-b#%-%=6#udYdb|N{GF+I%VDljqM`exxSy4o!!D> z&^+VnSCa?5;om-R7o1mF)5s<=Bh|O$3d>P5J>MA%7{ZiS-D-1d?%MF^(vm9yi;tLi zE5*#wx6Uiw@&51rQ!!iRO|lN%o}iL{{A_2=g`E!D{r_0}3H#C?lP>;?**|ynwyBc) zxPeijTH+c}l9E`GYL#4+3Zxi}3=BWM$wR) zpOTqY3DRJqYXH<^7-D2#Wol|=VhGU?_U{=eP5FUrD9%qSDNig)W$?^ROi%SqOwUZt zRxs1E(6i7rG*AdMG*hUsFpD=cQGi)*XsM7zJnyjn>fMypn7%u<6TOUmg*s)et9;un>86^y+76uy}JD&j6h$EQ;RTG|> zQj)=7ZfMx{v5f<$L=s7fZ)R?4No7GQ1K1n-1$pWAo5K9i%<&BYs$wuSwzRM`0V2cv zoprN-N`#Tj3C^raWdH`6g}0NF3)5XepmY?HbZC$#Lt17|Dlp9SGxBp&K_OR^pI-tF z!PLa!%FJY7Xym1q=qIP->1O7p>%j$+^Yn|0lJyM@P0cMJq=~s6(4FFb;JnM=>FVdQ I&MBb@012{t6951J literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/images/option.png b/PhotoView/PhotoView/images/option.png new file mode 100644 index 0000000000000000000000000000000000000000..891ede20ad57564788373d6094542c512c72effe GIT binary patch literal 1312 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-GzZ+Rj;xUkjGiz z5m^iri~!@=$M$UoGEzNV978;g&%JWiKO|j*?SuScQIY0Pf)000zbdbYov zFYf(;nxn<$-)*1U_`j>X_c^BQxaj|?%sbU?%PSo}EdTe6;kUzX!}#p050{7>E5mE1rLgNBdsBNiD(mq28PogM3h!Q`%h}Xq z-*ZjvhkBsx^UqzUBK0TTa$39hM27dh(_W%mCl#$)zf|ntcCj2cUA?d?b{Cnu=FQj= zmfg}5SN^D7Ptxa;{7>Dq<+9z<(Z>5eXqo9tnLpT)&AI16k?o6fa$D4&8}FMOdhKoV zj7-na)qD)`ma`VUxjO$q=I7K^`@Q{_&ar0EKBeJi_`knNm!)2Prl9@Ln^#LN^W6?i zK3DNzW?;Ci%f&VCWy?;ks_r^hsrs5-d}BhyY`bo=Z+%xDf3J`~KKYJf`O`JCwh4;o zotorpd~yBmq$`W|-|_JMweo9)a;oL)Qy;ga?%1{F@9uYhmxMZgIMSjherJ;k$F-p7 zVDnu*;ia$E+^f>7UH->;=PJLml~;bezxy&Vc6nZkl)#(IUAO%1-anwi^@&a9%EOKE z+HAX*C0tEO<~91|6I%Le&g0&gUBdEF>t0=1e$Jfvxzn8k57vs$yWO{Z(ZpvQR%a@b z&*p48RXp$3x5f9KalA0f37GHR^kAd#Imt}9e|pEB=KfUMTmPSN*PCw&AHQ7(rAgHi z*NBpo#FA92V6kygHS}J6eloVL$>z9|8>t%v;0WnaQUVc$JE6*HLpvlT$ zlgrYrlJj$OQ}ap~6x>tuQi~Ex@{6n#Jd^W%^YiocGV>Mo7_4akDwhB$56LLaO|r6b z$xki?X|b{j0GeFPV7UDMZhbU0V5eGHd8B5hXOu9Q7#LJWW!?s=5l1oyswO-$r6dES zUt0o{4&>BVHAEexKnelF{r G5}E*2a1fFJ literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/images/play.png b/PhotoView/PhotoView/images/play.png new file mode 100644 index 0000000000000000000000000000000000000000..64af8b1096db50162ae7973b3f7643f1c1a675f1 GIT binary patch literal 1817 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 DXi=jB literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/images/qt.png b/PhotoView/PhotoView/images/qt.png new file mode 100644 index 0000000000000000000000000000000000000000..0b34e5fa93bf9171d08e78c593c0ddf771c64eee GIT binary patch literal 1221 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJK#sqs zi(`n#@ugRNGeXiuj(xn}Gr2$Twu`c8C(G?)LgI_AiA>D9lEZSa_mb~)pO8Tc10Ncbr96;4Gg^4bVDt(L*a-J4iHqNVnJIkeyxmH^8`E#--_(f> z%l^E0y3;|=-l=b2+lU-;eH;4g_q{C!iT+QY&J{Ss{CaiSjM6ZU@GWQb*L~eSVf+4P zleS9;s=b{R|0+~~ZPk|ekmk=$7Ev`H%0ll3?Ra&6RzsxuB)@6Xn8bcF-3j#nyX<0O zrRIWA>t(iUxhv9SPOs5nO)*Klb$VBW=K2d6g_;Vwt&%%;H5iF9Do*(NvHI7iG;hYr zN|VrC3aMEWkM4LFbYO?0$gK(no@dJh#HG-g{W}Ni{^~OL0BtL;u-Yw{FJ@9J>4D zR`>{hRVE=J7wdQhMCtl zzrRr7tiBDDR#i(}BT7;dOH!?pi&B9UgOP!usjh*!u90bok)f4|rIoRPwtL@O_Xalt)rcdR1632AnNpGgQX*5sd!u-(8 z@eKj0VlXr@Ffy_*Ha9b9uiNw*s6+_KoZ!r=R0az@b8jc7H*I`*K-nlH+0Y3VR%k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJK#q{7 zi(`n#@ugSKdtY&sIR5eay7=vv6ih=_i2hc*V!CKabRgT*xr^lmN)3$s1I4Y&-laL+ z>w0l#A&1e%1+)J$yG>JTo#p1)xo+3xM04ZA@567W`x(pMn?JL1Ub@6Dmf~B2F9lf~ z*JsW77AoMA<+%0UqFcI$Of4PbZwaQDC?!vKGFfp%?&<$M*O7o2T6XP)knqsKYF(R4HEk@+i`l7_?cxT83pI7U-!qZlki+CeR{=~gDo|Q zvnC17^lVu5CQv`SU3c5Hx#lJ=`|bVaTdVEF<{uH+ znX0?1sK-)t@;$5RTRILlhnuNhwde|UUK5ozd;UkZkA+ua4=yaD$<$)owMqUa-g)LTH+c} zl9E`GYL#4+3Zxi}3=B}DHVAdO2DrA(D6jr$r2!w zLo!NpldP;<@{>z*Q}ar!tO9^aix~`;|KF{TrUq=cm6bnc} zIZ!p>nJFb1ASE(2%y)oFB$1T(X6B}rR2HN%fL*0uke6=1Da;Se9N!S2Dh5Ln10y2~ zGecv`4Q)kTKqbOR<^*R}r81c7nV5MyIUSGknGTeWLXr**@?=QM%t-|Xfqq7QZYn4s zit_VIzyXq)SX`NzoS&zcms+BqoRX)TnVYT$7fjC6FD^>fH#9V}u!NAtmU=*UX5Q-u P#W{ngtDnm{r-UW|u)n$a literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/images/rotateleft.png b/PhotoView/PhotoView/images/rotateleft.png new file mode 100644 index 0000000000000000000000000000000000000000..391d10631e3defa6a32f3053ea93a54f9f34a970 GIT binary patch literal 1532 zcmZ8gX;4#F6uwfh7OM))RMNBRefNSX{^8zD%Q^*S90+472z!41qZ}8HQ-vLll z0GK!c0Fn#9y4b?{z-@TLAd=(b2|!tzEfv3g7Rw4z;>CT7QP6zzIsl&-usxYPR!dq> zxHucN`gD4*fjih<)W^@WIb&2n${<=F`*lYutI{^b!+_&$pV%2v-R;-5x{K*;maiT& zHM->BXi5uYx2KzpZ@H1h>A!vY=eoMyR};S_&BqUL2f|- zOX!L**)?ufd(X*9Qj(Y3UB8Sl0*+*qPZ8Sm(BQ#9uSMq17J29Ktk&!%7 zGN);22Vd3v-I-O*%7N|ghfHu7g!!i~=knVEuiUk@u9!K#gD|?GdN?_;ZiDVv?Rs-v z0znM{jm(Q=)Aseocf`0T05~e`l?Vj=-egWe|lF+@=)ZxD()#0_X=M@S!N_M zkuAF$+%cYJY}4P5nb|cK>Y|eDJ@f2bXqMaW={Qym4L0V~GojmzI|aOQ-@4^*Q%-Gq zWzt9zKH1gfv!+8Zl$m-~S>&&69C6!+{rFh->PxO5dh5opVxQdU(7UV1GzxSzW&+?17ssF{N8~%vCGX$`gh%-blI*POi~?zN(**KXt)u zuEdG`%gbwpoyD);jaaCWxO!gB7&?)2B78&gI-OCt<#uQ`EqS$W&$-|$jqQO6 zgeg%!Kd*c@pP$v2{awp4^Hx@bGX4C6(wUlhb!%&7aL1$PC0&uz3p|kvtZDnE3I8ISRbKm4 zQ34f;2o)%v0F?r}5-ILPswOmKZ1a=^d0WswNti3!zuO9TnPCsP8rc%gy(5oYnJ2*N@oBC!fz6D6tF zLV{z~Ez$Xa*(-@siS>{dc3w0b^2HJeS0Y1I39%?xTmm^(F4|ee_xnhP%fnFsrnyk* zZZvlaT;6%K2#2g$q7y7hL;;ON<#>2h?S|Ua9g_FgY4Ark)fnln} z^`io1f<%bPNpe(07Dma55}AnfUr{J0D-}XA4AbfG`;$f|;bR(&-RZ+!0NcyY^Qy;z G@Babrz-?Oq literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/images/rotateright.png b/PhotoView/PhotoView/images/rotateright.png new file mode 100644 index 0000000000000000000000000000000000000000..d3bfee81c2dab2da8aff0354aa44e735bcc62719 GIT binary patch literal 1523 zcmZ8gYfuws6x~v25v0}HLe#2@@+glyHY6e0DWf3B%R~q#V3t~HKQ4+@I0zkG00OT0} zz(PQI4*)<%1AvJX0D!9iz(sBRDf&~QV3Qgd8VmppWt-^4-!gSryp{mt7Nhz?Pb=~9 zEIc?+5Y}7PpCs?sk=~uY#t|udPYzX7VN!apL4C-hwt{b~Zy#Ca{e+h(62$g#ImgcM zOQH=fv-uH61#ZG7brC6{M0>D_8B)_O96FpX8yipUZLN8ESaoe`VlL;%ROQ&cx#>u+ zj<%uoe|}v!8P&)?o7@dQ8uXEU5GhKn9&Oq9*^3+Zl6>yqn=HOmOMl4<4TXK|u50mA zlJ~{Lf!*ul6y2PVOg$bSg^ORaz5Gq?TpUQ z?EHm^?)%0SSLJ==9OW>H9Wga?%c)_z$eg#*{C>fxovJ<7e%<6Zr!K2H8clVzTP{Tw z6<+l+rC-V1<$AkzOMyy!ZnXURRNIbys=r6=_@|eN=gT~o54ex?R?-jM&mxWGrm$Bg zqx+xpEk?+ece^g|!)YU{perTnRy?ayf7-$o4unjl`snu?YZu zx?;L8=c0i9E3*2JjAkjI ztvoMCyj}2~*=R9X_5_VU)k@q{qCTf|hx|TXX?Y$-noX=NsoU!)KHkjk9&q0%v?M+A zeq16xG~n?&uli9&NHPgGwf1m>6;Z`JXO26LezJCYdt<=(>bdHqqJG$ICVodD%e4!# z(CX!)KMdElt^M(iyE&g3b7F8ly0cb4lW=lpGF#Di@IiZqqj@WHFj1T9Y1lzF9!!=M z8%@Yi)|_`z(1`0C@4&)(j=46p-1N>_d-JJS-%j3yXu-`8$>QGpi@Eobqkgme>Ct$4 zgW%UHaou3MOHa)a=Dxm2opbikwvN0nj1^2bL1WAD=INKiSYtWzFt%;?!`w$*IYVP> zDD#O=;>J8LrQB?|a}T}DI4qi87&pYsvc0R9zu55IU3i1E^e*va0Czkj4ws5?1eRzJ zA^~(7#3a-F$#kZG4#5l#Oy~H}*f5ROQ4!eoKYC$| zJCfB-AlE5VVK^9*=&Y7797Rl~1)%zuXQ*#*7Ox7!VF)Ud3lu3^e20>Z9gu+FY2(DKnz~U09YL#qri;(w5AFhC40T9EF&So+EX;7o7_yj>& zwWLoBnvDPq3gjOd6jU_XvwR|@6&Y2^DF1;H6;-Q|P$7uThF+Zve+n^Y@#$UmgbNTJ!V7K+O3D8R@497q literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/images/save.png b/PhotoView/PhotoView/images/save.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4377c750fa65da00b5d758c4659d67edca4b85 GIT binary patch literal 965 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 +#include +#include +#include +#include +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + + QTranslator translator; + translator.load(":/translation/photoview_zh.qm"); + qApp->installTranslator(&translator); + + QFile file(":/images/white.css"); + file.open(QFile::ReadOnly); + QString qss = QLatin1String(file.readAll()); + qApp->setStyleSheet(qss); + qApp->setPalette(QPalette(QColor("#F0F0F0"))); + + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/PhotoView/PhotoView/mainwindow.cpp b/PhotoView/PhotoView/mainwindow.cpp new file mode 100644 index 00000000..49e1ac4f --- /dev/null +++ b/PhotoView/PhotoView/mainwindow.cpp @@ -0,0 +1,861 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include "toolbar.h" +#include "about.h" +#include "photoinfo.h" +#include "mirrorview.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +QStringList FileSuffix = (QStringList() << "png" << + "jpg" << "jpeg" << "bmp" << + "tif" << "tiff" << "webp" << + "gif" << "jp2" << "dds" << + "xpm" << "pnm" << "ppm" << + "pgm" << "wbmp" << "ico" << + "icns"); + +QStringList FileFilter = (QStringList() << "*.png" << + "*.jpg" << "*.jpeg" << "*.bmp" << + "*.tif" << "*.tiff" << "*.webp" << + "*.gif" << "*.jp2" << "*.dds" << + "*.xpm" << "*.pnm" << "*.ppm" << + "*.pgm" << "*.wbmp" << "*.ico" << + "*.icns"); + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); + toolBar = new ToolBar(); + + ui->statusBar->addPermanentWidget(toolBar,1); + ui->photo->setPixmap(QPixmap(":/images/drop.png")); + setCentralWidget(ui->photo); + + ui->statusBar->hide(); + + connect(toolBar->ZoomIn,SIGNAL(clicked()),this,SLOT(ZoomIn())); + connect(toolBar->ZoomOut,SIGNAL(clicked()),this,SLOT(ZoomOut())); + connect(toolBar->ZoomFit,SIGNAL(clicked()),this,SLOT(ZoomFit())); + connect(toolBar->Prev,SIGNAL(clicked()),this,SLOT(PhotoPrev())); + connect(toolBar->Next,SIGNAL(clicked()),this,SLOT(PhotoNext())); + connect(toolBar->FullScreen,SIGNAL(clicked()),this,SLOT(FullScreen())); + connect(toolBar->RotateLeft,SIGNAL(clicked()),this,SLOT(RotateLeft())); + connect(toolBar->RotateRight,SIGNAL(clicked()),this,SLOT(RotateRight())); + connect(toolBar->FlipH,SIGNAL(clicked()),this,SLOT(FlipH())); + connect(toolBar->FlipV,SIGNAL(clicked()),this,SLOT(FlipV())); + connect(toolBar->Info,SIGNAL(clicked()),this,SLOT(Info())); + connect(toolBar->Play,SIGNAL(clicked()),this,SLOT(Play())); + connect(toolBar->Delete,SIGNAL(clicked()),this,SLOT(Delete())); + + + PhotoIndex = 0; + PhotoExist = false; + ZoomFlag = false; + RotateFlipFlag = false; + ZoomFactor = 1.0; + ZoomFactorFlag = true; + windowMaxState = false; +} + +MainWindow::~MainWindow() +{ + delete ui; + +} + +void MainWindow::dragEnterEvent(QDragEnterEvent *event) +{ + if (event->mimeData()->hasUrls()) + { + event->acceptProposedAction(); + } +} + +void MainWindow::dropEvent(QDropEvent *event) +{ + foreach (const QUrl &purl, event->mimeData()->urls()) + { + QFileInfo FileInfo(purl.toLocalFile()); + if(FileSuffix.contains(FileInfo.suffix(),Qt::CaseInsensitive)) + { + PhotoMap.clear(); + PhotoMap[PhotoMap.count()] = FileInfo; + QList fileInfoList = FileInfo.dir().entryInfoList(FileFilter); + fileInfoList.removeOne(FileInfo); + while(fileInfoList.count() > 0) + { + PhotoMap[PhotoMap.count()] = fileInfoList.takeFirst(); + } + + PhotoExist = true; + ui->photo->setPixmap(FileInfo.absoluteFilePath()); + image.load(FileInfo.absoluteFilePath()); + image1.load(FileInfo.absoluteFilePath()); + PhotoIndex = 0; + ui->statusBar->show(); + ZoomFit(); + } + } +} + + +void MainWindow::ZoomIn() +{ + if(PhotoExist) + { + if(!ZoomFlag) + { + Zoom(); + ZoomFlag = true; + } + ZoomFactor += 0.02; + if(ZoomFactor >= 10.0) + ZoomFactor = 10.0; + QTransform tr = QTransform::fromScale(ZoomFactor,ZoomFactor); + QImage image2 = image1.transformed(tr,Qt::SmoothTransformation); + ui->photo->setPixmap(QPixmap::fromImage(image2)); + + SetToolBarLabel(); + } +} + + +void MainWindow::ZoomOut() +{ + if(PhotoExist) + { + if(!ZoomFlag) + { + Zoom(); + ZoomFlag = true; + } + ZoomFactor -= 0.02; + if(ZoomFactor <= 0.01) + ZoomFactor = 0.01; + QTransform tr = QTransform::fromScale(ZoomFactor,ZoomFactor); + QImage image2 = image1.transformed(tr,Qt::SmoothTransformation); + ui->photo->setPixmap(QPixmap::fromImage(image2)); + + SetToolBarLabel(); + } +} + +void MainWindow::ZoomFit() +{ + if(PhotoExist) + { + qreal pw = image1.width(); + qreal ph = image1.height(); + qreal ww = ui->photo->width(); + qreal wh = ui->photo->height(); + QImage image2; + + if(pw <= ww && ph <= wh) + { + image2 = image1; + } + else + { + image2 = image1.scaled(ui->photo->width(),ui->photo->height(),Qt::KeepAspectRatio,Qt::SmoothTransformation); + } + ui->photo->setPixmap(QPixmap::fromImage(image2)); + + Zoom(); + SetToolBarLabel(); + } +} + + +void MainWindow::PhotoNext() +{ + if(PhotoExist) + { + if(RotateFlipFlag) + { + QMessageBox SaveMsg(this); + int answer; + SaveMsg.setWindowTitle(tr("Save Changes")); + SaveMsg.setText(tr("The Photo has been edited.")); + SaveMsg.setInformativeText(tr("Do you want to save your changes?")); + SaveMsg.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); + SaveMsg.setDefaultButton(QMessageBox::Save); + SaveMsg.setButtonText(QMessageBox::Save, tr("Save")); + SaveMsg.setButtonText(QMessageBox::Discard, tr("Discard")); + SaveMsg.setButtonText(QMessageBox::Cancel, tr("Cancel")); + answer = SaveMsg.exec(); + if(answer == QMessageBox::Save) + { + on_actionSave_triggered(); + } + else if (answer == QMessageBox::Discard) + { + if(++PhotoIndex >= PhotoMap.count()) + { + PhotoIndex = 0; + } + + SwitchPhoto(PhotoIndex); + } + else if (answer == QMessageBox::Cancel) + { + ; + } + } + else + { + if(++PhotoIndex >= PhotoMap.count()) + { + PhotoIndex = 0; + } + + SwitchPhoto(PhotoIndex); + } + } +} + +void MainWindow::PhotoPrev() +{ + if(PhotoExist) + { + if(RotateFlipFlag) + { + QMessageBox SaveMsg(this); + int answer; + SaveMsg.setWindowTitle(tr("Save Changes")); + SaveMsg.setText(tr("The Photo has been edited.")); + SaveMsg.setInformativeText(tr("Do you want to save your changes?")); + SaveMsg.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); + SaveMsg.setDefaultButton(QMessageBox::Save); + SaveMsg.setButtonText(QMessageBox::Save, tr("Save")); + SaveMsg.setButtonText(QMessageBox::Discard, tr("Discard")); + SaveMsg.setButtonText(QMessageBox::Cancel, tr("Cancel")); + answer = SaveMsg.exec(); + if(answer == QMessageBox::Save) + { + on_actionSave_triggered(); + } + else if (answer == QMessageBox::Discard) + { + if(--PhotoIndex < 0) + { + PhotoIndex = PhotoMap.count() - 1; + } + + SwitchPhoto(PhotoIndex); + } + else if (answer == QMessageBox::Cancel) + { + ; + } + } + else + { + if(--PhotoIndex < 0) + { + PhotoIndex = PhotoMap.count() - 1; + } + + SwitchPhoto(PhotoIndex); + } + } +} + + +void MainWindow::SwitchPhoto(int index) +{ + image.load(PhotoMap.value(index).absoluteFilePath()); + image1 = image; + ZoomFlag = false; + RotateFlipFlag = false; + ZoomFit(); +} + +void MainWindow::resizeEvent (QResizeEvent *) +{ + if(PhotoExist == true) + { + ZoomFit(); + } +} + +void MainWindow::FullScreen() +{ + if(PhotoExist) + { + if(this->isFullScreen()) + { + if(windowMaxState) + { + this->showMaximized(); + } + else + { + this->showNormal(); + } + toolBar->FullScreen->setIcon(QIcon(":/images/fullscreen.png")); + toolBar->FullScreen->setToolTip(tr("Exit Full Screen")); + } + else + { + if(Qt::WindowMaximized == this->windowState()) + windowMaxState = true; + else + windowMaxState = false; + toolBar->FullScreen->setIcon(QIcon(":/images/fullscreenexit.png")); + toolBar->FullScreen->setToolTip(tr("Full Screen")); + this->showFullScreen(); + } + } +} + + +void MainWindow::RotateLeft() +{ + if(PhotoExist) + { + QTransform tr; + qreal pw; + qreal ph; + qreal ww; + qreal wh; + QImage image2; + + tr.rotate(-90); + if(ZoomFlag) + { + image1 = image.transformed(tr,Qt::SmoothTransformation); + ZoomFlag = false; + } + else + { + image1 = image1.transformed(tr,Qt::SmoothTransformation); + } + + pw = image1.width(); + ph = image1.height(); + ww = ui->photo->width(); + wh = ui->photo->height(); + + if(pw <= ww && ph <= wh) + { + image2 = image1; + } + else + { + image2 = image1.scaled(ui->photo->width(),ui->photo->height(),Qt::KeepAspectRatio,Qt::SmoothTransformation); + } + ui->photo->setPixmap(QPixmap::fromImage(image2)); + + + RotateFlipFlag = true; + } +} + +void MainWindow::RotateRight() +{ + if(PhotoExist) + { + QTransform tr; + qreal pw; + qreal ph; + qreal ww; + qreal wh; + QImage image2; + tr.rotate(90); + if(ZoomFlag) + { + image1 = image.transformed(tr,Qt::SmoothTransformation); + ZoomFlag = false; + } + else + { + image1 = image1.transformed(tr,Qt::SmoothTransformation); + } + + pw = image1.width(); + ph = image1.height(); + ww = ui->photo->width(); + wh = ui->photo->height(); + + if(pw <= ww && ph <= wh) + { + image2 = image1; + } + else + { + image2 = image1.scaled(ui->photo->width(),ui->photo->height(),Qt::KeepAspectRatio,Qt::SmoothTransformation); + } + ui->photo->setPixmap(QPixmap::fromImage(image2)); + + RotateFlipFlag = true; + } +} + +void MainWindow::FlipV() +{ + if(PhotoExist) + { + qreal pw; + qreal ph; + qreal ww; + qreal wh; + QImage image2; + + if(ZoomFlag) + { + image1 = (image.mirrored(false,true)); + ZoomFlag = false; + } + else + { + image1 = (image1.mirrored(false,true)); + } + pw = image1.width(); + ph = image1.height(); + ww = ui->photo->width(); + wh = ui->photo->height(); + + if(pw <= ww && ph <= wh) + { + image2 = image1; + } + else + { + image2 = image1.scaled(ui->photo->width(),ui->photo->height(),Qt::KeepAspectRatio,Qt::SmoothTransformation); + } + ui->photo->setPixmap(QPixmap::fromImage(image2)); + + RotateFlipFlag = true; + } +} + +void MainWindow::FlipH() +{ + if(PhotoExist) + { + qreal pw; + qreal ph; + qreal ww; + qreal wh; + QImage image2; + + if(ZoomFlag) + { + image1 = (image.mirrored(true,false)); + ZoomFlag = false; + } + else + { + image1 = (image1.mirrored(true,false)); + } + pw = image1.width(); + ph = image1.height(); + ww = ui->photo->width(); + wh = ui->photo->height(); + + if(pw <= ww && ph <= wh) + { + image2 = image1; + } + else + { + image2 = image1.scaled(ui->photo->width(),ui->photo->height(),Qt::KeepAspectRatio,Qt::SmoothTransformation); + } + ui->photo->setPixmap(QPixmap::fromImage(image2)); + + RotateFlipFlag = true; + } +} + +void MainWindow::Play() +{ + if(PhotoExist) + { + if(ui->actionEffect1->isChecked()) + { + if(PhotoMap.count() > 0) + { + mirrorView = new MirrorView(); + connect(mirrorView,SIGNAL(neededPhoto(int)),this,SLOT(photoNeeded(int))); + connect(mirrorView,SIGNAL(hideMe()),this,SLOT(hideMirrorView())); + mirrorView->setImageList(PhotoMap.keys()); + int imageCount = 7; + if(imageCount > PhotoMap.keys().count()) + imageCount = PhotoMap.keys().count(); + + for(int i = 0; i < imageCount; ++i) + { + mirrorView->loadImage(PhotoMap.keys().at(i), + QPixmap(PhotoMap.value(PhotoMap.keys().at(i)).absoluteFilePath())); + } + mirrorView->showFullScreen(); + } + } + + if(ui->actionEffect2->isChecked()) + { + if(PhotoMap.count() > 0) + { + slideShow = new SlideShow(this); + connect(slideShow,SIGNAL(hideMe()),this,SLOT(hideSlideShow())); + slideShow->showFullScreen(); + } + } + } +} + +void MainWindow::hideMirrorView() +{ + mirrorView->close(); + delete mirrorView; + mirrorView = NULL; +} + +void MainWindow::hideSlideShow() +{ + slideShow->close(); + delete slideShow; + slideShow = NULL; +} + +void MainWindow::photoNeeded(int index) +{ + if(PhotoMap.keys().contains(index)) + { + if(PhotoMap.value(index).exists()) + mirrorView->loadImage(index,QPixmap(PhotoMap.value(index) + .absoluteFilePath())); + else + mirrorView->removeIndex(index); + } +} + +void MainWindow::Info() +{ + if(PhotoExist) + { + PhotoInfo *photoInfo = new PhotoInfo(this); + photoInfo->exec(); + } +} + +void MainWindow::Delete() +{ + if(PhotoExist) + { + QFileInfo FileInfo = PhotoMap[PhotoIndex]; + QFile file(FileInfo.absoluteFilePath()); + if(file.remove()) + { + PhotoMap.remove(PhotoIndex); + PhotoIndex--; + + QList ListInfo = PhotoMap.values(); + PhotoMap.clear(); + int i = 0; + for(i = 0;i < ListInfo.count();++i) + { + PhotoMap.insert(i,ListInfo.value(i)); + } + PhotoNext(); + } + else + { + QMessageBox msg(this); + msg.setIcon(QMessageBox::Critical); + msg.setWindowTitle(tr("Error")); + msg.setText(tr("Can't Write File")); + msg.setStandardButtons(QMessageBox::Ok); + msg.setButtonText(QMessageBox::Ok, tr("OK")); + msg.exec(); + } + } +} + + +void MainWindow::on_actionHomePage_triggered() +{ + QDesktopServices::openUrl(QUrl("http://www.jianshu.com/users/0d339158f1a6/latest_articles")); +} + +void MainWindow::on_actionAbout_triggered() +{ + About *about = new About(this); + about->exec(); +} + + +void MainWindow::on_actionExit_triggered() +{ + QApplication::exit(0); +} + +void MainWindow::on_actionPrint_triggered() +{ + if(PhotoExist) + { + QPrinter PhotoPrint; + + QPrintDialog *PhotoPrintDialog = new QPrintDialog(&PhotoPrint,0); + + if(PhotoPrintDialog->exec() == QDialog::Accepted) + { + QImage Photo(image1); + QPainter painter(&PhotoPrint); + painter.drawImage(QPoint(0,0),Photo); + painter.end(); + } + } +} + + +void MainWindow::on_actionSave_triggered() +{ + if(PhotoExist) + { + QFileInfo SaveFile = PhotoMap[PhotoIndex]; + + if(SaveFile.suffix() == "png" || SaveFile.suffix() == "PNG" || SaveFile.suffix() == "jpg" + || SaveFile.suffix() == "JPG" || SaveFile.suffix() == "jpeg" || SaveFile.suffix() == "JPEG" + || SaveFile.suffix() == "bmp" || SaveFile.suffix() == "BMP" || SaveFile.suffix() == "tif" + || SaveFile.suffix() == "tiff" || SaveFile.suffix() == "TIF" || SaveFile.suffix() == "TIFF" + || SaveFile.suffix() == "webp" || SaveFile.suffix() == "WEBP" || SaveFile.suffix() == "jp2" + || SaveFile.suffix() == "JP2" || SaveFile.suffix() == "dds" || SaveFile.suffix() == "DDS" + || SaveFile.suffix() == "ppm" || SaveFile.suffix() == "PPM" || SaveFile.suffix() == "xpm" + || SaveFile.suffix() == "XPM" || SaveFile.suffix() == "pgm" || SaveFile.suffix() == "PGM" + || SaveFile.suffix() == "xbm" || SaveFile.suffix() == "XBM" || SaveFile.suffix() == "pbm" + || SaveFile.suffix() == "PBM") + { + if(QFile(SaveFile.absoluteFilePath()).open(QIODevice::ReadWrite)) + { + image1.save(SaveFile.absoluteFilePath()); + } + else + { + QMessageBox msg(this); + msg.setIcon(QMessageBox::Critical); + msg.setWindowTitle(tr("Error")); + msg.setText(tr("Can't Write File")); + msg.setStandardButtons(QMessageBox::Ok); + msg.setButtonText(QMessageBox::Ok, tr("OK")); + msg.exec(); + } + } + } +} + +void MainWindow::on_actionOpen_triggered() +{ + QFileDialog OpenPhoto(this); + OpenPhoto.setFileMode(QFileDialog::ExistingFile); + OpenPhoto.setNameFilter("All Supported Files (*.png ; *.jpg ; *.jpeg ; *.bmp ; *.tif ; *.tiff ; *.webp ;" + "*.gif ; *.jp2 ; *.dds ; *.xpm ; *.pnm ; *.ppm ; *.pgm ; *.wbmp ; *.xbm ; *.pbm ;" + "*.ico ; *.icns);; All Files(*)"); + + OpenPhoto.setWindowTitle(tr("Open Photo")); + + + if(OpenPhoto.exec()) + { + QStringList PhotoFile; + PhotoFile = OpenPhoto.selectedFiles(); + + QFileInfo FileInfo(PhotoFile.at(0)); + if(FileSuffix.contains(FileInfo.suffix(),Qt::CaseInsensitive)) + { + PhotoMap.clear(); + PhotoMap[PhotoMap.count()] = FileInfo; + QList fileInfoList = FileInfo.dir().entryInfoList(FileFilter); + fileInfoList.removeOne(FileInfo); + while(fileInfoList.count() > 0) + { + PhotoMap[PhotoMap.count()] = fileInfoList.takeFirst(); + } + PhotoExist = true; + ui->photo->setPixmap(FileInfo.absoluteFilePath()); + image.load(FileInfo.absoluteFilePath()); + image1.load(FileInfo.absoluteFilePath()); + PhotoIndex = 0; + ui->statusBar->show(); + ZoomFit(); + } + } +} + +void MainWindow::on_actionEffect1_triggered() +{ + ui->actionEffect2->setChecked(false); + ui->actionEffect1->setChecked(true); +} + +void MainWindow::on_actionEffect2_triggered() +{ + ui->actionEffect1->setChecked(false); + ui->actionEffect2->setChecked(true); +} + +void MainWindow::on_actionSkin1_triggered() +{ + ui->actionSkin1->setChecked(true); + ui->actionSkin2->setChecked(false); + ui->actionSkin3->setChecked(false); + QFile file(":/images/white.css"); + file.open(QFile::ReadOnly); + QString qss = QLatin1String(file.readAll()); + qApp->setStyleSheet(qss); + qApp->setPalette(QPalette(QColor("#F0F0F0"))); +} + +void MainWindow::on_actionSkin2_triggered() +{ + ui->actionSkin1->setChecked(false); + ui->actionSkin2->setChecked(true); + ui->actionSkin3->setChecked(false); + QFile file(":/images/blue.css"); + file.open(QFile::ReadOnly); + QString qss = QLatin1String(file.readAll()); + qApp->setStyleSheet(qss); + qApp->setPalette(QPalette(QColor("#F0F0F0"))); +} + +void MainWindow::on_actionSkin3_triggered() +{ + ui->actionSkin1->setChecked(false); + ui->actionSkin2->setChecked(false); + ui->actionSkin3->setChecked(true); + + QFile file(":/images/gray.css"); + file.open(QFile::ReadOnly); + QString qss = QLatin1String(file.readAll()); + qApp->setStyleSheet(qss); + qApp->setPalette(QPalette(QColor("#F0F0F0"))); +} + +void MainWindow::on_actionZH_triggered() +{ + ui->actionEN->setChecked(false); + ui->actionZH->setChecked(true); + QTranslator *translator = new QTranslator; + translator->load(":/translation/photoview_zh.qm"); + QApplication::installTranslator(translator); + SwitchLanguage(); + SetToolBarLabel(); +} + +void MainWindow::on_actionEN_triggered() +{ + ui->actionEN->setChecked(true); + ui->actionZH->setChecked(false); + QTranslator *translator = new QTranslator; + translator->load(":/translation/photoview_en.qm"); + QApplication::installTranslator(translator); + SwitchLanguage(); + SetToolBarLabel(); +} + +QFileInfo MainWindow::GetFileInfo() +{ + return PhotoMap.value(PhotoIndex); +} + +QMap MainWindow::GetAllFileInfo() +{ + return PhotoMap; +} + + +void MainWindow::Zoom() +{ + qreal pw = image1.width(); + qreal ph = image1.height(); + qreal ww = ui->photo->width(); + qreal wh = ui->photo->height(); + + qreal widthFactor = ww / pw; + qreal heightFactor = wh / ph; + + ZoomFactorFlag = widthFactor <= heightFactor ? true : false; + + if(pw <= ww && ph <= wh) + { + ZoomFactor = 1.0; + } + else + { + if(ZoomFactorFlag) + { + ZoomFactor = widthFactor; + } + else + { + ZoomFactor = heightFactor; + } + } + +} + +void MainWindow::SetToolBarLabel() +{ + QString str; + int zoom = ZoomFactor * 100; + str = tr("Zoom ") + QString::number(zoom) + "% | " + PhotoMap.value(PhotoIndex).fileName() + + " | " + QString::number(image1.width()) + " x " + QString::number(image1.height()); + toolBar->label->setText(str); +} + + +void MainWindow::SwitchLanguage() +{ + ui->retranslateUi(this); + toolBar->SwitchLanguage(); +} + +void MainWindow::closeEvent (QCloseEvent *event) +{ + if(RotateFlipFlag) + { + QMessageBox SaveMsg(this); + int answer; + SaveMsg.setWindowTitle(tr("Save Changes")); + SaveMsg.setText(tr("The Photo has been edited.")); + SaveMsg.setInformativeText(tr("Do you want to save your changes?")); + SaveMsg.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); + SaveMsg.setDefaultButton(QMessageBox::Save); + SaveMsg.setButtonText(QMessageBox::Save, tr("Save")); + SaveMsg.setButtonText(QMessageBox::Discard, tr("Discard")); + SaveMsg.setButtonText(QMessageBox::Cancel, tr("Cancel")); + answer = SaveMsg.exec(); + if(answer == QMessageBox::Save) + { + on_actionSave_triggered(); + } + else if (answer == QMessageBox::Discard) + { + close(); + } + else if (answer == QMessageBox::Cancel) + { + event->ignore(); + } + } +} diff --git a/PhotoView/PhotoView/mainwindow.h b/PhotoView/PhotoView/mainwindow.h new file mode 100644 index 00000000..51931b70 --- /dev/null +++ b/PhotoView/PhotoView/mainwindow.h @@ -0,0 +1,105 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H +#include "toolbar.h" +#include "about.h" +#include "photoinfo.h" +#include "mirrorview.h" +#include "slideshow.h" +#include +#include +#include +#include +#include +#include + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + + void SwitchPhoto(int index); + QFileInfo GetFileInfo(); + QMap GetAllFileInfo(); + void Zoom(); + void SetToolBarLabel(); + void SwitchLanguage(); + +protected: + void dragEnterEvent(QDragEnterEvent *event); + void dropEvent(QDropEvent *event); + void resizeEvent (QResizeEvent *); + void closeEvent (QCloseEvent *event); + +private slots: + void ZoomIn(); + void ZoomOut(); + void ZoomFit(); + void PhotoNext(); + void PhotoPrev(); + void FullScreen(); + void RotateRight(); + void RotateLeft(); + void FlipH(); + void FlipV(); + void Play(); + void Info(); + void Delete(); + + void hideMirrorView(); + void hideSlideShow(); + void photoNeeded(int index); + + void on_actionHomePage_triggered(); + + void on_actionAbout_triggered(); + + void on_actionExit_triggered(); + + void on_actionPrint_triggered(); + + void on_actionSave_triggered(); + + void on_actionOpen_triggered(); + + void on_actionEffect1_triggered(); + + void on_actionEffect2_triggered(); + + void on_actionSkin1_triggered(); + + void on_actionSkin2_triggered(); + + void on_actionZH_triggered(); + + void on_actionEN_triggered(); + + void on_actionSkin3_triggered(); + +private: + Ui::MainWindow *ui; + ToolBar *toolBar; + QImage image; + QImage image1; + QMap PhotoMap; + MirrorView* mirrorView; + SlideShow* slideShow; + bool windowMaxState; + + + bool ZoomFlag; + bool RotateFlipFlag; + + bool ZoomFactorFlag; + qreal ZoomFactor; + bool PhotoExist; + int PhotoIndex; +}; + +#endif // MAINWINDOW_H diff --git a/PhotoView/PhotoView/mainwindow.pro b/PhotoView/PhotoView/mainwindow.pro new file mode 100644 index 00000000..925d2895 --- /dev/null +++ b/PhotoView/PhotoView/mainwindow.pro @@ -0,0 +1,46 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2015-10-23T14:38:40 +# +#------------------------------------------------- + +QT += core gui printsupport + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = mainwindow +TEMPLATE = app + + +SOURCES += main.cpp\ + mainwindow.cpp \ + toolbar.cpp \ + photoinfo.cpp \ + about.cpp \ + mirroreditem.cpp \ + mirrorview.cpp \ + slideshow.cpp + +HEADERS += mainwindow.h \ + toolbar.h \ + photoinfo.h \ + about.h \ + mirroreditem.h \ + mirrorview.h \ + slideshow.h + +FORMS += mainwindow.ui \ + photoinfo.ui \ + about.ui \ + mirrorview.ui \ + slideshow.ui + +RESOURCES += \ + mainwindow.qrc + + +TRANSLATIONS += photoview_zh.ts \ + photoview_en.ts + +RC_ICONS = photoview.ico + diff --git a/PhotoView/PhotoView/mainwindow.qrc b/PhotoView/PhotoView/mainwindow.qrc new file mode 100644 index 00000000..46f5ff1e --- /dev/null +++ b/PhotoView/PhotoView/mainwindow.qrc @@ -0,0 +1,37 @@ + + + images/about.png + images/delete.png + images/drop.png + images/fliphorizontal.png + images/flipvertical.png + images/fullscreen.png + images/fullscreenexit.png + images/home.png + images/icon.png + images/info.png + images/next.png + images/open.png + images/option.png + images/prev.png + images/print.png + images/resize.png + images/rotateleft.png + images/rotateright.png + images/save.png + images/saveas.png + images/zoomfit.png + images/zoomin.png + images/zoomout.png + images/exit.png + images/play.png + images/skin.png + images/language.png + images/logo.png + translation/photoview_en.qm + translation/photoview_zh.qm + images/blue.css + images/gray.css + images/white.css + + diff --git a/PhotoView/PhotoView/mainwindow.ui b/PhotoView/PhotoView/mainwindow.ui new file mode 100644 index 00000000..80396d6a --- /dev/null +++ b/PhotoView/PhotoView/mainwindow.ui @@ -0,0 +1,302 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + + 800 + 600 + + + + true + + + PhotoView + + + + :/images/icon.png:/images/icon.png + + + + 32 + 32 + + + + + false + + + + true + + + + 5 + 5 + 788 + 541 + + + + false + + + Qt::AlignCenter + + + + + + + 0 + 0 + 800 + 23 + + + + + File + + + + + + + + + + + + Option + + + + Slide Show + + + + :/images/play.png:/images/play.png + + + + + + + Skin + + + + :/images/skin.png:/images/skin.png + + + + + + + + Language + + + + :/images/language.png:/images/language.png + + + + + + + + + + + Help + + + + + + + + + + + false + + + + + + :/images/open.png:/images/open.png + + + Open + + + + + + :/images/save.png:/images/save.png + + + Save + + + + + + :/images/saveas.png:/images/saveas.png + + + Save As + + + + + + :/images/print.png:/images/print.png + + + Print + + + + + + :/images/exit.png:/images/exit.png + + + Exit + + + + + + :/images/resize.png:/images/resize.png + + + Resize + + + + + + :/images/fliphorizontal.png:/images/fliphorizontal.png + + + Flip H + + + + + + :/images/flipvertical.png:/images/flipvertical.png + + + Flip V + + + + + + :/images/home.png:/images/home.png + + + Home Page + + + + + + :/images/about.png:/images/about.png + + + About + + + + + true + + + true + + + Effect1 + + + + + true + + + Effect2 + + + + + true + + + true + + + Skin1 + + + + + true + + + Skin2 + + + + + true + + + true + + + true + + + ZH + + + + + true + + + EN + + + + + true + + + Skin3 + + + + + + + + + diff --git a/PhotoView/PhotoView/mirroreditem.cpp b/PhotoView/PhotoView/mirroreditem.cpp new file mode 100644 index 00000000..7c6606e2 --- /dev/null +++ b/PhotoView/PhotoView/mirroreditem.cpp @@ -0,0 +1,196 @@ +#include "mirroreditem.h" + +QRectF MirroredItem::boundingRect() const +{ + return QRectF(0.0f,0.0f,myWidth,myHeight); +} + +void MirroredItem::paint(QPainter* painter,const QStyleOptionGraphicsItem*, + QWidget*) +{ + painter->drawPixmap(0,0,item); + painter->drawPixmap(0,static_cast(myHeight*0.5f),itemMirror); +} + +int MirroredItem::getWidth() +{ + return myWidth; +} + +int MirroredItem::getHeight() +{ + return myHeight; +} + +int MirroredItem::getStack() +{ + return stackNumber; +} + +int MirroredItem::getWX() +{ + return wantedX; +} + +int MirroredItem::getWY() +{ + return wantedY; +} + +void MirroredItem::makeReflection() +{ + itemMirror = QPixmap(myWidth,static_cast(myHeight*0.5f)); + QPainter* painter = new QPainter(&itemMirror); + painter->drawPixmap(0,0,QPixmap::fromImage(item.toImage() + .mirrored(false,true))); + painter->resetTransform(); + QPen pen(Qt::transparent); + painter->setPen(pen); + QLinearGradient gradient; + gradient = QLinearGradient(0,0,0,static_cast(myHeight*0.375f)); + gradient.setColorAt(0.0f,QColor(0,15,15,155)); + gradient.setColorAt(1.0f,QColor(0,15,15,255)); + painter->setBrush(QBrush(gradient)); + painter->drawRect(0,0,myWidth,static_cast(myHeight*0.5f)); + delete painter; +} + +void MirroredItem::makePhoto(QPixmap image) +{ + item = QPixmap(myWidth,static_cast(myHeight*0.5f)); + if((image.width() > myWidth - 2) || (image.height() > myHeight*0.5f-2)) + image = image.scaled(myWidth-2,static_cast(myHeight*0.5f-2), + Qt::KeepAspectRatio,Qt::SmoothTransformation); + QPainter* painter = new QPainter(&item); + QPen pen(Qt::darkGray); + pen.setWidth(2); + painter->setPen(pen); + QLinearGradient gradient; + gradient = QLinearGradient(0,0,0,static_cast(myHeight*0.5f)); + gradient.setColorAt(0.0f,QColor(175,175,175)); + gradient.setColorAt(0.5f,QColor(215,215,215)); + gradient.setColorAt(1.0f,QColor(175,175,175)); + painter->setBrush(QBrush(gradient)); + painter->drawRect(0,0,myWidth,static_cast(myHeight*0.5f)); + painter->drawPixmap(static_cast(myWidth*0.5f-(image.width()*0.5f)), + static_cast(myHeight*0.25f-(image.height()*0.5f)), + image); + delete painter; +} + +void MirroredItem::moveLeft() +{ + if(stackNumber == 0) + { + wantedX = pos().x() - myWidth - 50; + wantedY = pos().y() + 25; + setZValue(wantedX*-1); + } + else if(stackNumber == -1) + { + wantedX = pos().x() - 50; + wantedY = pos().y() + 15; + setZValue(wantedX*-1); + } + else if(stackNumber == 1) + { + wantedX = pos().x() - 50; + wantedY = pos().y() - 15; + setZValue(wantedX); + } +} + +void MirroredItem::moveRight() +{ + if(stackNumber == 0) + { + wantedX = pos().x() + myWidth + 50; + wantedY = pos().y() + 25; + setZValue(wantedX*-1); + } + else if(stackNumber == -1) + { + wantedX = pos().x() + 50; + wantedY = pos().y() - 15; + setZValue(wantedX*-1); + } + else if(stackNumber == 1) + { + wantedX = pos().x() + 50; + wantedY = pos().y() + 15; + setZValue(wantedX); + } +} + +void MirroredItem::moveCenter() +{ + wantedY = static_cast(scene()->height()*0.5f - myHeight*0.45f); + wantedX = static_cast(scene()->width()*0.5f - myWidth*0.5f); + setZValue(0); +} + +void MirroredItem::moveTo(int posX,int posY) +{ + wantedX = posX; + wantedY = posY; +} + +bool MirroredItem::isInPlace() const +{ + return (wantedX == pos().x()) && (wantedY == pos().y()); +} + +void MirroredItem::setScatk(int stack) +{ + stackNumber = stack; +} + +void MirroredItem::animate() +{ + int x = pos().x(); + int y = pos().y(); + if(pos().x() < wantedX) + { + if((pos().x() + dX >= wantedX)) + x = wantedX; + else + x = pos().x() + dX; + } + else if(pos().x() > wantedX) + { + if((pos().x() - dX <= wantedX)) + x = wantedX; + else + x = pos().x() - dX; + } + + if(pos().y() < wantedY) + { + if((pos().y() + dY >= wantedY)) + y = wantedY; + else + y = pos().y() + dY; + } + else if(pos().y() > wantedY) + { + if((pos().y() - dY <= wantedY)) + y = wantedY; + else + y = pos().y() - dY; + } + setPos(x,y); +} + +MirroredItem::MirroredItem(QPixmap image,int width,int height) + :QGraphicsItem() +{ + myWidth = width; + myHeight = height; + makePhoto(image); + makeReflection(); + wantedX = 0; + wantedY = 0; + stackNumber = 0; + dX = static_cast(myWidth * 0.125f); + dY = 15; +} diff --git a/PhotoView/PhotoView/mirroreditem.h b/PhotoView/PhotoView/mirroreditem.h new file mode 100644 index 00000000..9ba0f7dd --- /dev/null +++ b/PhotoView/PhotoView/mirroreditem.h @@ -0,0 +1,45 @@ +#ifndef MIRROREDITEM_H +#define MIRROREDITEM_H + +#include +#include +#include +#include +#include +#include + +class MirroredItem : public QGraphicsItem +{ +public: + MirroredItem(QPixmap image,int width,int height); + QRectF boundingRect() const; + void paint(QPainter* painter,const QStyleOptionGraphicsItem* option, + QWidget* widget); + int getWidth(); + int getHeight(); + void moveLeft(); + void moveRight(); + void moveCenter(); + void moveTo(int posX,int posY); + void animate(); + bool isInPlace() const; + void setScatk(int stack); + int getWX(); + int getWY(); + int getStack(); + +private: + void makePhoto(QPixmap image); + void makeReflection(); + QPixmap item; + QPixmap itemMirror; + int wantedX; + int wantedY; + unsigned dX,dY; + int myWidth; + int myHeight; + int stackNumber; //-1-left 0-center 1-right + QTimer* timer; +}; + +#endif // MIRROREDITEM_H diff --git a/PhotoView/PhotoView/mirrorview.cpp b/PhotoView/PhotoView/mirrorview.cpp new file mode 100644 index 00000000..bc823a5b --- /dev/null +++ b/PhotoView/PhotoView/mirrorview.cpp @@ -0,0 +1,250 @@ +#include "mirrorview.h" + +void MirrorView::setImageList(QList imageList) +{ + items.clear(); + itemIndexList = imageList; + currentIndex = 0; + dIndex = 0; +} + +void MirrorView::loadImage(int index,QPixmap image) +{ + if(itemIndexList.contains(index)) + { + int currIndex = itemIndexList.at(currentIndex+dIndex); + if(itemIndexList.indexOf(currIndex) < itemIndexList.indexOf(index) + || items.count() == 0)//adding to the left side + { + MirroredItem* item = new MirroredItem(image,itemW,itemH); + items << item; + ui.graphicsView->scene()->addItem(item); + item->setPos(lastX,lastY); + item->setScatk(-1); + item->moveTo(lastX,lastY); + item->setZValue(lastX*-1); + } + else //addint to the right side + { + MirroredItem* item = new MirroredItem(image,itemW,itemH); + int x,y; + x = items.first()->getWX() + 50; + y = items.first()->getWY() + 15; + items.push_front(item); + ui.graphicsView->scene()->addItem(item); + item->setPos(x,y); + item->setScatk(1); + item->moveTo(x,y); + item->setZValue(x); + ++currentIndex; + --dIndex; + if(currentIndex < items.count() - 7) + { + ui.graphicsView->scene()->removeItem(items.last()); + MirroredItem* temp = items.takeLast(); + delete temp; + } + } + } +} + +void MirrorView::removeIndex(int index) +{ + if(itemIndexList.contains(index)) + itemIndexList.removeAt(itemIndexList.indexOf(index)); +} + +void MirrorView::resizeEvent(QResizeEvent*) +{ + makeScene(); + timer->start(); +} + +void MirrorView::showEvent(QShowEvent*) +{ + makeScene(); + timer->start(); +} + +void MirrorView::keyPressEvent(QKeyEvent* event) +{ + if(event->key() == Qt::Key_Left) + { + moveLeft(); + } + else if(event->key() == Qt::Key_Right) + moveRight(); + else if(event->key() == Qt::Key_Escape) + emit hideMe(); +} + +void MirrorView::makeScene() +{ + QGraphicsScene* scene = new QGraphicsScene(0,0,ui.graphicsView->width()-10, + ui.graphicsView->height()-10); + QLinearGradient gradient(0,0,0,ui.graphicsView->height()); + gradient.setColorAt(0.0f,QColor(9,66,94)); + gradient.setColorAt(0.2f,QColor(3,77,94)); + gradient.setColorAt(0.45f,QColor(112,164,173)); + gradient.setColorAt(0.46f,QColor(0,15,15)); + gradient.setColorAt(1.0f,QColor(0,15,15)); + scene->setBackgroundBrush(QBrush(gradient)); + ui.graphicsView->setScene(scene); + + if(items.count() < currentIndex || currentIndex == -1) + return; + int centralX = static_cast(scene->width()*0.5f + - items[currentIndex]->getWidth()*0.5f); + int centralY = static_cast(scene->height()*0.5 + - items[currentIndex]->getHeight()*0.45f); + for(int i = 0; i < items.count(); ++i) + items[i]->setPos(centralX,centralY); + + //left items + int leftPos = centralX - items[currentIndex]->getWidth() - 50; + int leftPosY = centralY + 25; + for(int i = currentIndex + 1; i < items.count(); ++i) + { + items[i]->setScatk(-1); + items[i]->moveTo(leftPos,leftPosY); + items[i]->setZValue(i); + leftPos -= 50; + leftPosY += 15; + scene->addItem(items[i]); + } + lastX = leftPos + 50; + lastY = leftPosY - 15; + + //center item + items[currentIndex]->setScatk(0); + items[currentIndex]->moveTo(centralX,centralY); + items[currentIndex]->setZValue(0); + scene->addItem(items[currentIndex]); + + //right items + int rightPos = centralX + items[currentIndex]->getWidth() + 50; + int rightPosY = centralY + 25; + for(int i = currentIndex -1; i > -1; --i) + { + items[i]->setScatk(1); + items[i]->moveTo(rightPos,rightPosY); + items[i]->setZValue(i*-1); + rightPos += 50; + rightPosY += 15; + scene->addItem(items[i]); + } +} + +void MirrorView::removeRight() +{ + dIndex += 15; + currentIndex -= 15; + for(int i = 0; i < 15; ++i) + ui.graphicsView->scene()->removeItem(items.at(i)); + for(int i = 0; i < 15; ++i) + { + MirroredItem* item = items.takeFirst(); + delete item; + } +} + +void MirrorView::moveLeft() +{ + if((!timer->isActive()) && currentIndex - 1 >= 0) + { + --currentIndex; + for(int i = 0; i < items.count(); ++i) + { + if(i == currentIndex) + { + items[i]->moveCenter(); + items[i]->setScatk(0); + } + else if(i == currentIndex + 1) + { + items[i]->moveLeft(); + items[i]->setScatk(-1); + } + else + { + items[i]->moveLeft(); + } + } + if(dIndex > 0) //front chopped + { + if(currentIndex - 8 <=0) + emit neededPhoto(itemIndexList.at(dIndex-1)); + } + timer->start(); + } +} + +void MirrorView::moveRight() +{ + if((!timer->isActive()) && currentIndex + 1 < items.count()) + { + ++currentIndex; + for(int i = 0; i < items.count(); ++i) + { + if(i == currentIndex) + { + items[i]->moveCenter(); + items[i]->setScatk(0); + } + else if(i == currentIndex - 1) + { + items[i]->moveRight(); + items[i]->setScatk(1); + } + else + { + items[i]->moveRight(); + } + } + if(currentIndex > 25) + removeRight(); + if(currentIndex + dIndex + 7 < itemIndexList.count() + && currentIndex + 7 > items.count()) + emit neededPhoto(itemIndexList.at(currentIndex + dIndex + 7)); + timer->start(); + } +} + +void MirrorView::animate() +{ + for(int i = 0; i < items.count(); ++i) + items[i]->animate(); + bool stop = true; + for(int i = 0; i < items.count(); ++i) + { + if(!items.at(i)->isInPlace()) + { + stop = false; + break; + } + } + if(stop) + timer->stop(); +} + +MirrorView::MirrorView(QWidget *parent) + : QWidget(parent) +{ + ui.setupUi(this); + ui.graphicsView->setScene(new QGraphicsScene()); + QDesktopWidget desktop; + itemW = static_cast(desktop.width()*0.5f); + itemH = desktop.height(); + currentIndex = 0; + dIndex = 0; + lastX = 0; + lastY = 0; + timer = new QTimer(this); + timer->setInterval(20); + ui.graphicsView->setFocusPolicy(Qt::NoFocus); + connect(timer,SIGNAL(timeout()),this,SLOT(animate())); +} + +MirrorView::~MirrorView() +{ +} diff --git a/PhotoView/PhotoView/mirrorview.h b/PhotoView/PhotoView/mirrorview.h new file mode 100644 index 00000000..1c14dd12 --- /dev/null +++ b/PhotoView/PhotoView/mirrorview.h @@ -0,0 +1,56 @@ +#ifndef MIRRORVIEW_H +#define MIRRORVIEW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include "ui_mirrorview.h" +#include "mirroreditem.h" + +class MirrorView : public QWidget +{ + Q_OBJECT + +public: + MirrorView(QWidget *parent = 0); + ~MirrorView(); + void setImageList(QList imageList); + void loadImage(int index,QPixmap image); + void removeIndex(int index); + +protected: + void resizeEvent(QResizeEvent* event); + void showEvent(QShowEvent* event); + void keyPressEvent(QKeyEvent* event); + +private slots: + void moveLeft(); //Move photos Left + void moveRight(); //Move photos Right + void animate(); //Animate photos move + +signals: + void hideMe(); + void neededPhoto(int id); + +private: + void makeScene(); + void removeLeft(); + void removeRight(); + Ui::MirrorView_ui ui; + QList itemIndexList; //read items; + QList items; //photos in scene + int currentIndex; //current scene photo index + int dIndex; //index offset + int itemW; //item width + int itemH; //item height + int lastX; + int lastY; + QTimer* timer; //photo animator +}; + +#endif // MIRRORVIEW_H diff --git a/PhotoView/PhotoView/mirrorview.ui b/PhotoView/PhotoView/mirrorview.ui new file mode 100644 index 00000000..1e7725d4 --- /dev/null +++ b/PhotoView/PhotoView/mirrorview.ui @@ -0,0 +1,56 @@ + + + MirrorView_ui + + + + 0 + 0 + 786 + 586 + + + + MirrorView + + + + :/images/icon.png:/images/icon.png + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::NoFrame + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + + + + + + + + + + + diff --git a/PhotoView/PhotoView/photoinfo.cpp b/PhotoView/PhotoView/photoinfo.cpp new file mode 100644 index 00000000..137e83ad --- /dev/null +++ b/PhotoView/PhotoView/photoinfo.cpp @@ -0,0 +1,139 @@ +#include "photoinfo.h" +#include "ui_photoinfo.h" +#include "mainwindow.h" +#include +#include + +PhotoInfo::PhotoInfo(QWidget *parent) : + QDialog(parent), + ui(new Ui::PhotoInfo) +{ + ui->setupUi(this); + this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); + setFixedSize(421,241); +} + +PhotoInfo::~PhotoInfo() +{ + delete ui; +} + + +void PhotoInfo::showEvent(QShowEvent *) +{ + MainWindow *w = (MainWindow*)this->parentWidget(); + + QFileInfo FileInfo = w->GetFileInfo(); + + ui->NameVal->setText(FileInfo.fileName()); + ui->DirectoryVal->setText(FileInfo.path()); + + if (FileInfo.size()<1024) + { + ui->SizeVal->setText(QString::number(FileInfo.size()) + " Byte"); + } + else if(FileInfo.size() >= 1024) + { + ui->SizeVal->setText(QString::number(FileInfo.size()/1024) + " KB"); + }else if(FileInfo.size() >= 1024*1024) + { + ui->SizeVal->setText(QString::number(FileInfo.size()/1024/1024) + " MB"); + } + else + { + ui->SizeVal->setText(QString::number(FileInfo.size()/1024/1024/1024) + " MB"); + } + + if(FileInfo.suffix() == "png" || FileInfo.suffix() == "PNG") + { + ui->TypeVal->setText("Portable Network Graphics"); + } + else if(FileInfo.suffix() == "jpg" || FileInfo.suffix() == "JPG" || + FileInfo.suffix() == "jpeg" || FileInfo.suffix() == "JPEG") + { + ui->TypeVal->setText("JPEG Image"); + } + else if(FileInfo.suffix() == "bmp" || FileInfo.suffix() == "BMP") + { + ui->TypeVal->setText("BMP file format"); + } + else if(FileInfo.suffix() == "tif" || FileInfo.suffix() == "tiff" || + FileInfo.suffix() == "TIF" || FileInfo.suffix() == "TIFF") + { + ui->TypeVal->setText("Tagged Image File Format"); + } + else if(FileInfo.suffix() == "webp" || FileInfo.suffix() == "WEBP") + { + ui->TypeVal->setText("WebP"); + } + else if(FileInfo.suffix() == "gif" || FileInfo.suffix() == "GIF") + { + ui->TypeVal->setText("GIF Image"); + } + else if(FileInfo.suffix() == "jp2" || FileInfo.suffix() == "JP2") + { + ui->TypeVal->setText("JPEG 2000"); + } + else if(FileInfo.suffix() == "dds" || FileInfo.suffix() == "DDS") + { + ui->TypeVal->setText("DirectDraw Surface"); + } + else if(FileInfo.suffix() == "ppm" || FileInfo.suffix() == "PPM") + { + ui->TypeVal->setText("Portable Pixmap"); + } + else if(FileInfo.suffix() == "xpm" || FileInfo.suffix() == "XPM") + { + ui->TypeVal->setText("X11 Pixmap"); + } + else if(FileInfo.suffix() == "pnm" || FileInfo.suffix() == "PNM") + { + ui->TypeVal->setText("PNM Image"); + } + else if(FileInfo.suffix() == "ppm" || FileInfo.suffix() == "PPM") + { + ui->TypeVal->setText("PNM Image"); + } + else if(FileInfo.suffix() == "pgm" || FileInfo.suffix() == "PGM") + { + ui->TypeVal->setText("Pgm Image"); + } + else if(FileInfo.suffix() == "wbmp" || FileInfo.suffix() == "WBMP") + { + ui->TypeVal->setText("Wireless Bitmap"); + } + else if(FileInfo.suffix() == "xbm" || FileInfo.suffix() == "XBM") + { + ui->TypeVal->setText("X11 Bitmap"); + } + else if(FileInfo.suffix() == "ico" || FileInfo.suffix() == "ICO") + { + ui->TypeVal->setText("Windows Icon format"); + } + else if(FileInfo.suffix() == "icns" || FileInfo.suffix() == "ICNS") + { + ui->TypeVal->setText("Apple Icon Image format"); + } + else + { + if(!FileInfo.suffix().isEmpty()) + { + ui->TypeVal->setText(FileInfo.suffix()+" File"); + } + else + { + ui->TypeVal->setText("Unknown File Type"); + } + } + + ui->WidthVal->setNum(QPixmap(FileInfo.absoluteFilePath()).width()); + ui->HeightVal->setNum(QPixmap(FileInfo.absoluteFilePath()).height()); + ui->TimeVal->setText(FileInfo.created().date().toString()); +} + + + +void PhotoInfo::on_OK_clicked() +{ + close(); +} diff --git a/PhotoView/PhotoView/photoinfo.h b/PhotoView/PhotoView/photoinfo.h new file mode 100644 index 00000000..9a8787ae --- /dev/null +++ b/PhotoView/PhotoView/photoinfo.h @@ -0,0 +1,29 @@ +#ifndef PHOTOINFO_H +#define PHOTOINFO_H + +#include + +namespace Ui { +class PhotoInfo; +} + +class PhotoInfo : public QDialog +{ + Q_OBJECT + +public: + explicit PhotoInfo(QWidget *parent = 0); + ~PhotoInfo(); + +protected: + void showEvent(QShowEvent *); + +private slots: + + void on_OK_clicked(); + +private: + Ui::PhotoInfo *ui; +}; + +#endif // PHOTOINFO_H diff --git a/PhotoView/PhotoView/photoinfo.ui b/PhotoView/PhotoView/photoinfo.ui new file mode 100644 index 00000000..1cb64384 --- /dev/null +++ b/PhotoView/PhotoView/photoinfo.ui @@ -0,0 +1,196 @@ + + + PhotoInfo + + + + 0 + 0 + 421 + 241 + + + + + 0 + 0 + + + + PhotoInfo + + + + :/images/info.png:/images/info.png + + + Qt::LeftToRight + + + false + + + + Qt::AlignCenter + + + Qt::AlignHCenter|Qt::AlignTop + + + 20 + + + + + 6 + + + + + Name: + + + + + + + + + + + + + + Directory: + + + + + + + + + + + + + + Type: + + + + + + + + + + + + + + Width: + + + + + + + + + + + + + + Height: + + + + + + + + + + + + + + Time: + + + + + + + + + + + + + + Size: + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + SimSun-ExtB + 11 + 50 + false + + + + OK + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + diff --git a/PhotoView/PhotoView/photoview.ico b/PhotoView/PhotoView/photoview.ico new file mode 100644 index 0000000000000000000000000000000000000000..7ada9547be15ea1dc4433a2788f6f930f61047f5 GIT binary patch literal 7662 zcmds*S&Ljn7>29un0AR7_a!PbB8Zp4KQK35c%eZ=6vbtX4tgPGa{;}W{sp3lJ0jw~ zM2!(l44C#xZ&ied3WFFE_jU=6I?nNV+LRPUFQU6J#NOoh=kVE>q2^ui0Tg4($Nw|^-!PvY@ahWl z3jW`NMM&3vKl#_8)A-ieCicnW-=J=r;Dz)EnQ}FW0}9 zx?^D_jT0v9gs8#vOV|LtOl@yN?E7Eq=L8IIB;%{Y{ctJtveh)W6AnQq{U1{2+OCA1 ziPP60j&1rCTn4>N?RUVhkoM2xZ=GW})-df1ocT-YIruzuvm>dz9dhmZYNy|F z$65!&u+wqkd6Q~CNd5{aqkS9g+G+2m-@5Iv+&P?vkC$KxqW<6ceKYhj;&)~7X9S<8`RCh*GU`4au1Z9!^yN&TdLjt{s@@H zv8{KG=^WI)34Vsy?oWQ-2W!A}>Gl4y-PPb-BKmNw7opc2PNL0IkZN~LuLs|&*TT1u z`hA|f&x!T7L9X3Ba~x=8^dCbz&xLCsAItshSnbTUeFFZ1sL#E)5sm=O^g3`(v5j+e z4tK*(Nx5-<0Mh1#XiG!HWNv%Z3 z$xc zW!)g=9@+qJ!6)zz_zq3ib(s2bJyg30Z|R-Iz3F-8`#RdF>i4|$Zjzn}@%Ouw_jCUl z)_#aFE0cQ1c^{(YH2swFb%&jda{RrMq`Kqpy_Cmic~tcq-V4F=Eb2D(9(5H&8)f~T z$v(q7;3L=#SAv?Ojk5lz@hE=y4d-`AZsVXo*PP~i>2J{3JCrdPMLb7$LVQN@?{~k6 z_Q0+Y#b@FmbkZNo$0g0;vXuX8OWHZc|*U1!VtubZ6s%m|6plEd^EL2Eq zp|V&ttyh<7rj1(B8h3u8c+z}x5(T6S)5W~$;#|>~AuWo3)B4mu`8>_rHSJG7{gt)9 E0d-}UssI20 literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/photoview_en.qm b/PhotoView/PhotoView/photoview_en.qm new file mode 100644 index 0000000000000000000000000000000000000000..e562cec8e3a79921ac53f5625d455266ee751309 GIT binary patch literal 3959 zcmb7HYiJx*6h6C|*~jcAjWw1MM5j`zf`lY33e{5bbYs(O$i_sX7$>`TvtuVa%j|4k zKSZcPTZ$G$O^aCi!#`57wkoAmBVrZA7gW?*r3xzk5USGt5Q_D?cXwxBw=HJboOzt@ zobQ}_?m2fKIGI}i>BU!G{CvZ$t4|zx@5f#uKM^UfLT)8e@5hZ*l*$K18OAg9ccM^~ zlrI(NT_)wLJBgZXQvT=!b|b07mxv-)NKL$ z&5&E@(I)=>3_TX$@^3QOpWxf&>;CyPk@k;|T|#`(zkIL%a0NVj{TojlgZKUZFCK>d z=vz&NyWRosc+=Uy0^XNUj^6Vc?Cep_`eS&12yy~)Rh>NseRZe0 z|A-3toBHh#$Ny54k!RHlr%nNPdtlqq=iv9l!1UU$>g=DCNUcR2FdsV?Mo8nPSmh3M1!b_4fh^Zfa9i2v@E)eBhj(0LQ2CYta> zqaKoe72Fw8K;O$9L4d*J+e8Fz({3(*&7tvVf~D>Yz^k^{}m@8QZn>36m}8T^*er zopqM3ACzL%qI;eCByUr!?U!6{{_ee5dr64 z%w8V%e6h+J4z7~OE{}5-&-1k1^RuDf)|c#pzF=fs9cj%Q^Nc@m^kl}!&a(V=83Tm| zXvDMO9~hA-wLmG24})`;x;*vZKswEmZr6=5-SwDm8AgL22OpapPhTBy9NUp;hoHU4 z7unNQ1{O_G@%4+TmsOF!L1fy(M@QKw;f&#v^-Q#K6Z&Amvh+mKVJs{6TwhX(w2ZFe z&$ApDw9K3yYp^F#nrKi$fv&p&^T-WJ#}KJSIggPNV^&V)YAyPKO>S&@hUya1EHWr_?WE2#tq#tjc03@tk~t+RCaTfKoT|LeMx& z7tKc&eN=#5RF+-kD-h4QrY$XpwN)Lj)bBiBVc~|iIGHOANZzNiRYk0hI%c-9ifhYc zjOEQ`=?a8U)}m>66qE!yfy{eLSru98p}YqOa)92GmtoddVfv~&k%x{7bYHRO$V_mC zyLiwZL`m#2rJ2>rs#Q%#<;v2QQ_-%p8=-xTW>ca;n>`{zd$Wvm8<w?c*72I58?SMqZym zQ_@)qvn$mhW2(>;#XPWos~Y;wRi|uwPM4W%qn+SY>dfVl?%}kZCU4Q@ z8gH)LP8Uoun%l%^HrmM~pcpQ zDlzM6kDGGZTzN^f!>Sm^mvU0eQ5=VO>AJ{aMLjTSrreB-Np-x}Z)jmr_`L4LVnxOA z5@#*As*H?4KeL!CT2OG@wyj>n5!&tIWL7!taFSWjw5hVQng=nCahfR}^mvMEOxy+& zd|T$Qd-%-a&2$+O4HYF&Ik&AT4qw|bm+h=;hyz@WAR9}{|@LH|7}z%EEIqtd{+-2jc?(8%2Z$EqSG@ zj9SK0LrOzpCgDdym7c@q8}!!E7!u9XTs&nDgGIWEMP$r&4IHqCS-O$T`a19!k}Y<) y=QLV^kMUjJ;Jl^Mzj)$2R8aJ=Au&v9qHnDN#A|*hg#;vC{Hf$&_Mp=IKHq;xfAp>Z literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/photoview_en.ts b/PhotoView/PhotoView/photoview_en.ts new file mode 100644 index 00000000..46e869cd --- /dev/null +++ b/PhotoView/PhotoView/photoview_en.ts @@ -0,0 +1,371 @@ + + + + + About + + + About + About + + + + Photo View 1.0.0 + Photo View 1.0.0 + + + + Developer:SHI + Developer:SHI + + + + OK + OK + + + + MainWindow + + + PhotoView + PhotoView + + + + File + File + + + + Option + Option + + + + Slide Show + Slide Show + + + + Skin + Skin + + + + Language + Language + + + + Help + Help + + + + Open + Open + + + + + + + Save + Save + + + + Save As + Save As + + + + Print + Print + + + + Exit + Exit + + + + Resize + + + + + Flip H + + + + + Flip V + + + + + Home Page + Home Page + + + + About + About + + + + Effect1 + Effect1 + + + + Effect2 + Effect2 + + + + Skin1 + Skin1 + + + + Skin2 + Skin2 + + + + ZH + ZH + + + + EN + EN + + + + Skin3 + Skin3 + + + + + + Save Changes + Save Changes + + + + + + The Photo has been edited. + The Photo has been edited. + + + + + + Do you want to save your changes? + Do you want to save your changes? + + + + + + Discard + Discard + + + + + + Cancel + Cancel + + + + Exit Full Screen + Exit Full Screen + + + + Full Screen + Full Screen + + + + + Error + Error + + + + + Can't Write File + Can't Write File + + + + + OK + OK + + + + Open Photo + Open Photo + + + + Zoom + Zoom + + + + MirrorView_ui + + + MirrorView + MirrorView + + + + PhotoInfo + + + PhotoInfo + PhotoInfo + + + + Name: + Name: + + + + Directory: + Directory: + + + + Type: + Type: + + + + Width: + Width: + + + + Height: + Height: + + + + Time: + Time: + + + + Size: + Size: + + + + OK + OK + + + + SlideShow + + + PhotoView + PhotoView + + + + ToolBar + + + + Zoom In + Zoom In + + + + + Zoom Out + Zoom Out + + + + + Fit to Window + Fit to Window + + + + + Full Screen + Full Screen + + + + + Prev + Prev + + + + + Next + Next + + + + + Rotate Left + Rotate Left + + + + + Rotate Right + Rotate Right + + + + + Delete + Delete + + + + + Infomation + Infomation + + + + + Flip Vertical + Flip Vertical + + + + + Flip Horizontal + Flip Horizontal + + + + + Play + Play + + + diff --git a/PhotoView/PhotoView/photoview_zh.qm b/PhotoView/PhotoView/photoview_zh.qm new file mode 100644 index 0000000000000000000000000000000000000000..74866189082b4854414f689a6a834235130448d3 GIT binary patch literal 3380 zcmai$du$X{6o+rScV=g|EiH-B=WEjpe?PoyY0@>g|@Vv?cR1LOm{Z3 zyQKwUD;S`K(2@u(XiSKYprR5GG=#?=K4L^cgHZu_G#W#UQk6;~0`<%+-0tjNv`KUJ z?tbTY&OP^@GxPL^f%`unetFxMlOH_RwCl*Zg$Si1gzzf}r5#3yn+uDjacjF6xAr4o zFCoMqM))KKo*?|yBVa#5_}6@dY<|R5j3DH=j<}Yipv56h??K2p1#umpf-Obd;3uGA zL)@;LV0+Nw?H@xNbjuz@6+8T(SA?W~4g6;y@48-u>@Ol;zZcdAQEd*ag&b5XjtBp} zVDAEZ2JGFC7e;k9to8JV_wR-1 z9qA{QfWGr3TkNp|u#XXA78X*3&cIaH&%TE@&4rZ@0$<%8{*&J z@f7&2k6Ymb`^8*0#8U;=zP~`{fUtBJ^5$jXOd)WNaSnf<5BwaC&Cye^|LM-W1xEg= zGh8$PTwaD_5bBz?Fyp<`&j44H@x`G6SPy|MguJseyL;DxUrko~+0(GUhsGVdFbB95 z3PKsVHuwftM_gM3_<(r$=N9<2Skz8Gr5Q+OBa*)E=02BXGlZ^C=cZu|CG1RHO}2nFrMN~BrV11vJ9X?N2V_qn>I?#pDh_rB3d)N69FCU$BuaituJim>sB z+)j)ybg?-ohgwNwK1&a;{ex_v8tEl279@n<_UvABG#sO#y`-guG)D`Vv^uNF^W4em zj%2!!MdNJ~Hw{ygE75gLXL9|h`WoeMNrz(IvE-5q238%ccT+USK*iFSs)|yxPDqHU zZaG}cJkU}2qpEzVs)WU|6fFi+lLEn2!Im5|{x7|TJkOgnHZCJ-m?`R-J2-Ymjxw!{ zh*fec`)+Rftrt;Ap#rW*>`o}F50eXz{ZiwY9(IS>g%%9VQf#Mzie|Gi_tftg?4)_} z?r>Dmm`5nwo(2?ln4-o2U<&&sDNI?eN>@UuH_CdP9uiSjv8!pcBo)IF^d2iFZ(y!D z6to+lxFEt}1%vInw{I(@GfjF?yqj4rxc%Mk*C>vq6$-Ob{IV?Rr!^4@at6q3Wj^>u z)0G#_SxIIa^8>Tg3E_l#8k$eCl5{q#4r}`2z&m6f)pbg$5+I@!)R;##rD=EF-^TIw zo!waBT5pWL(ae@7ypIl`p687+C5*vbZxAlMIr@WgMD#<$izEP3I*`Z82D=_loPV{c z9c?sg*R+IWxmrzY6Io*BoYXr>+1SP^6=R^?zJpm~%f^^uK3@3t%Z*D$bH_Z26&)t4 zrgzRULd5TId8kD*X}t6M1lC?gl-6LB1@hjkI$r|Hx#Tv&0+|olq^M?VxrdrGn&lY4 zNRnSRwLUvBwgg?nitY3~&~VLoBS?h33OiAL&1&B!3)mTEs^YpM2^jBF0?{Bddi)|< z&dWM79Okt&Ze_gq9&vksmVhrNDv6qHZue@Mx=_|lO6X7DTDfXK`jL`ZrSJfPCvyCy z!YG*4L7mwU>H4Qnr4HHghl{2wtF%y5HeVU6F21$xBNmq|)1`*!QKgyT@ZXOctG3Z- zmcw=$*RM^!J$NlN@5*o?*L0dXc99Nqj9Msc>2_SD%AF}?;60UAr7E4Yr%-}-{PLg4 z@q}V!c(kYtFJTp=B{eYM(iIDyc?1OO^rU)ViOpY4zC@6HLq< If9a*%zr3XHjQ{`u literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/photoview_zh.ts b/PhotoView/PhotoView/photoview_zh.ts new file mode 100644 index 00000000..d77cd121 --- /dev/null +++ b/PhotoView/PhotoView/photoview_zh.ts @@ -0,0 +1,371 @@ + + + + + About + + + About + 关于 + + + + Photo View 1.0.0 + 图片浏览 1.0.0 + + + + Developer:SHI + 开发者:时间 + + + + OK + 确定 + + + + MainWindow + + + PhotoView + 图片浏览 + + + + File + 文件 + + + + Option + 选项 + + + + Slide Show + 幻灯片播放 + + + + Skin + 皮肤 + + + + Language + 语言 + + + + Help + 帮助 + + + + Open + 打开 + + + + + + + Save + 保存 + + + + Save As + 保存为 + + + + Print + 打印 + + + + Exit + 退出 + + + + Resize + + + + + Flip H + + + + + Flip V + + + + + Home Page + 主页 + + + + About + 关于 + + + + Effect1 + 炫动精灵 + + + + Effect2 + 永恒经典 + + + + Skin1 + 复古米 + + + + Skin2 + 梦想蓝 + + + + ZH + 中文 + + + + EN + 英文 + + + + Skin3 + 霸气灰 + + + + + + Save Changes + 保存编辑 + + + + + + The Photo has been edited. + 您对图片进行了修改,是否需要保存? + + + + + + Do you want to save your changes? + 您想保存修改吗? + + + + + + Discard + 忽略 + + + + + + Cancel + 取消 + + + + Exit Full Screen + 退出全屏 + + + + Full Screen + 全屏 + + + + + Error + 错误 + + + + + Can't Write File + 不能生成文件 + + + + + OK + 确定 + + + + Open Photo + 打开文件 + + + + Zoom + 缩放 + + + + MirrorView_ui + + + MirrorView + 炫动特效 + + + + PhotoInfo + + + PhotoInfo + 图片信息 + + + + Name: + 名字: + + + + Directory: + 目录: + + + + Type: + 类型: + + + + Width: + 宽: + + + + Height: + 高: + + + + Time: + 创建时间: + + + + Size: + 大小: + + + + OK + 确定 + + + + SlideShow + + + PhotoView + 幻灯片特效 + + + + ToolBar + + + + Zoom In + 放大 + + + + + Zoom Out + 缩小 + + + + + Fit to Window + 适配窗口 + + + + + Full Screen + 全屏 + + + + + Prev + 前一个 + + + + + Next + 下一个 + + + + + Rotate Left + 向左旋转 + + + + + Rotate Right + 向右旋转 + + + + + Delete + 删除 + + + + + Infomation + 图片信息 + + + + + Flip Vertical + 垂直翻转 + + + + + Flip Horizontal + 水平翻转 + + + + + Play + 播放 + + + diff --git a/PhotoView/PhotoView/slideshow.cpp b/PhotoView/PhotoView/slideshow.cpp new file mode 100644 index 00000000..a7076d42 --- /dev/null +++ b/PhotoView/PhotoView/slideshow.cpp @@ -0,0 +1,76 @@ +#include "slideshow.h" +#include "ui_slideshow.h" +#include "mainwindow.h" + +SlideShow::SlideShow(QWidget *parent) : + QWidget(parent), + ui(new Ui::SlideShow) +{ + ui->setupUi(this); + + setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog); + + MainWindow *w = (MainWindow *)this->parentWidget(); + PhotoMap = w->GetAllFileInfo(); + + PhotoIndex = 0; + image.load(PhotoMap.value(PhotoIndex).absoluteFilePath()); + + timer = new QTimer(this); + timer->setInterval(1000); + connect(timer,SIGNAL(timeout()),this,SLOT(SwitchPhoto())); + timer->start(); + + this->showFullScreen(); +} + +SlideShow::~SlideShow() +{ + delete ui; +} + + +void SlideShow::ZoomFit() +{ + qreal pw = image.width(); + qreal ph = image.height(); + qreal ww = ui->Photo->width(); + qreal wh = ui->Photo->height(); + QImage image1; + + if(pw <= ww && ph <= wh) + { + image1 = image; + } + else + { + image1 = image.scaled(ui->Photo->width(),ui->Photo->height(),Qt::KeepAspectRatio,Qt::SmoothTransformation); + } + ui->Photo->setPixmap(QPixmap::fromImage(image1)); +} + +void SlideShow::resizeEvent(QResizeEvent *) +{ + ZoomFit(); +} + +void SlideShow::SwitchPhoto() +{ + if(++PhotoIndex >= PhotoMap.count()) + { + PhotoIndex = 0; + } + + image.load(PhotoMap.value(PhotoIndex).absoluteFilePath()); + ZoomFit(); +} + + + +void SlideShow::keyPressEvent(QKeyEvent* event) +{ + if(event->key() == Qt::Key_Escape) + { + emit hideMe(); + } +} diff --git a/PhotoView/PhotoView/slideshow.h b/PhotoView/PhotoView/slideshow.h new file mode 100644 index 00000000..865b87cc --- /dev/null +++ b/PhotoView/PhotoView/slideshow.h @@ -0,0 +1,43 @@ +#ifndef SLIDESHOW_H +#define SLIDESHOW_H + +#include +#include +class QFileInfo; + + +namespace Ui { +class SlideShow; +} + +class SlideShow : public QWidget +{ + Q_OBJECT + +public: + explicit SlideShow(QWidget *parent = 0); + ~SlideShow(); + + void ZoomFit(); + + +signals: + void hideMe(); + +protected: + void resizeEvent(QResizeEvent *); + void keyPressEvent(QKeyEvent* event); + +private slots: + void SwitchPhoto(); + +private: + Ui::SlideShow *ui; + + QMap PhotoMap; + QTimer *timer; + QImage image; + int PhotoIndex; +}; + +#endif // SLIDESHOW_H diff --git a/PhotoView/PhotoView/slideshow.ui b/PhotoView/PhotoView/slideshow.ui new file mode 100644 index 00000000..53c81d66 --- /dev/null +++ b/PhotoView/PhotoView/slideshow.ui @@ -0,0 +1,47 @@ + + + SlideShow + + + true + + + + 0 + 0 + 400 + 300 + + + + PhotoView + + + + :/images/icon.png:/images/icon.png + + + background-color: rgb(0, 0, 0); + + + + + + + true + + + + + + Qt::AlignCenter + + + + + + + + + + diff --git a/PhotoView/PhotoView/toolbar.cpp b/PhotoView/PhotoView/toolbar.cpp new file mode 100644 index 00000000..2f80db05 --- /dev/null +++ b/PhotoView/PhotoView/toolbar.cpp @@ -0,0 +1,118 @@ +#include "toolbar.h" +#include +#include +#include + +ToolBar::ToolBar(QWidget *parent) : QWidget(parent) +{ + ZoomIn = new QPushButton(this); + ZoomOut = new QPushButton(this); + ZoomFit = new QPushButton(this); + FullScreen = new QPushButton(this); + Prev = new QPushButton(this); + Next = new QPushButton(this); + RotateLeft = new QPushButton(this); + RotateRight = new QPushButton(this); + Delete = new QPushButton(this); + FlipH = new QPushButton(this); + FlipV = new QPushButton(this); + Play = new QPushButton(this); + Info = new QPushButton(this); + + ZoomIn->setObjectName("ZoomIn"); + ZoomOut->setObjectName("ZoomOut"); + ZoomFit->setObjectName("ZoomFit"); + FullScreen->setObjectName("FullScreen"); + Prev->setObjectName("Prev"); + Next->setObjectName("Next"); + RotateLeft->setObjectName("RotateLeft"); + RotateRight->setObjectName("RotateRight"); + Delete->setObjectName("Delete"); + Info->setObjectName("Info"); + FlipV->setObjectName("FlipV"); + FlipH->setObjectName("FlipH"); + Play->setObjectName("Play"); + //Resize = new QPushButton(this); + + ZoomIn->setIcon(QIcon(":/images/zoomin.png")); + ZoomOut->setIcon(QIcon(":/images/zoomout.png")); + ZoomFit->setIcon(QIcon(":/images/zoomfit.png")); + FullScreen->setIcon(QIcon(":/images/fullscreen.png")); + Prev->setIcon(QIcon(":/images/prev.png")); + Next->setIcon(QIcon(":/images/next.png")); + RotateLeft->setIcon(QIcon(":/images/rotateleft.png")); + RotateRight->setIcon(QIcon(":/images/rotateright.png")); + Delete->setIcon(QIcon(":/images/delete.png")); + Info->setIcon(QIcon(":/images/info.png")); + FlipV->setIcon(QIcon(":/images/flipvertical.png")); + FlipH->setIcon(QIcon(":/images/fliphorizontal.png")); + Play->setIcon(QIcon(":/images/play.png")); + //Resize->setIcon(QIcon(":/images/resize.png")); + + ZoomIn->setToolTip(tr("Zoom In")); + ZoomOut->setToolTip(tr("Zoom Out")); + ZoomFit->setToolTip(tr("Fit to Window")); + FullScreen->setToolTip(tr("Full Screen")); + Prev->setToolTip(tr("Prev")); + Next->setToolTip(tr("Next")); + RotateLeft->setToolTip(tr("Rotate Left")); + RotateRight->setToolTip(tr("Rotate Right")); + Delete->setToolTip(tr("Delete")); + Info->setToolTip(tr("Infomation")); + FlipV->setToolTip(tr("Flip Vertical")); + FlipH->setToolTip(tr("Flip Horizontal")); + Play->setToolTip(tr("Play")); + + label = new QLabel; + label->setObjectName("label"); + QHBoxLayout *labelLayout = new QHBoxLayout; + labelLayout->addStretch(); + labelLayout->addWidget(label); + labelLayout->addStretch(); + labelLayout->setContentsMargins(0,0,0,0); + + QHBoxLayout *mainLayout = new QHBoxLayout; + mainLayout->addStretch(); + mainLayout->addWidget(ZoomIn); + mainLayout->addWidget(ZoomOut); + mainLayout->addWidget(ZoomFit); + mainLayout->addWidget(Prev); + mainLayout->addWidget(Next); + mainLayout->addWidget(RotateLeft); + mainLayout->addWidget(RotateRight); + mainLayout->addWidget(FlipH); + mainLayout->addWidget(FlipV); + mainLayout->addWidget(FullScreen); + //mainLayout->addWidget(Resize); + mainLayout->addWidget(Play); + mainLayout->addWidget(Info); + mainLayout->addWidget(Delete); + mainLayout->addStretch(); + mainLayout->setContentsMargins(0,0,0,0); + mainLayout->setSpacing(1); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->addLayout(labelLayout); + layout->addLayout(mainLayout); + layout->setContentsMargins(0,0,0,0); + layout->setSpacing(3); + setWindowFlags(Qt::FramelessWindowHint); +} + + +void ToolBar::SwitchLanguage() +{ + ZoomIn->setToolTip(tr("Zoom In")); + ZoomOut->setToolTip(tr("Zoom Out")); + ZoomFit->setToolTip(tr("Fit to Window")); + FullScreen->setToolTip(tr("Full Screen")); + Prev->setToolTip(tr("Prev")); + Next->setToolTip(tr("Next")); + RotateLeft->setToolTip(tr("Rotate Left")); + RotateRight->setToolTip(tr("Rotate Right")); + Delete->setToolTip(tr("Delete")); + Info->setToolTip(tr("Infomation")); + FlipV->setToolTip(tr("Flip Vertical")); + FlipH->setToolTip(tr("Flip Horizontal")); + Play->setToolTip(tr("Play")); +} diff --git a/PhotoView/PhotoView/toolbar.h b/PhotoView/PhotoView/toolbar.h new file mode 100644 index 00000000..9f767a19 --- /dev/null +++ b/PhotoView/PhotoView/toolbar.h @@ -0,0 +1,37 @@ +#ifndef TOOLBAR +#define TOOLBAR + +#include +#include +#include +#include +#include +class ToolBar : public QWidget +{ + Q_OBJECT + +public: + ToolBar(QWidget *parent = 0); + + QPushButton *ZoomIn; + QPushButton *ZoomOut; + QPushButton *ZoomFit; + QPushButton *FullScreen; + QPushButton *Prev; + QPushButton *Next; + QPushButton *RotateLeft; + QPushButton *RotateRight; + QPushButton *Delete; + QPushButton *Info; + QPushButton *FlipH; + QPushButton *FlipV; + QPushButton *Play; + QPushButton *Resize; + QLabel *label; + + void SwitchLanguage(); +}; + + +#endif // TOOLBAR + diff --git a/PhotoView/PhotoView/translation/photoview_en.qm b/PhotoView/PhotoView/translation/photoview_en.qm new file mode 100644 index 0000000000000000000000000000000000000000..e562cec8e3a79921ac53f5625d455266ee751309 GIT binary patch literal 3959 zcmb7HYiJx*6h6C|*~jcAjWw1MM5j`zf`lY33e{5bbYs(O$i_sX7$>`TvtuVa%j|4k zKSZcPTZ$G$O^aCi!#`57wkoAmBVrZA7gW?*r3xzk5USGt5Q_D?cXwxBw=HJboOzt@ zobQ}_?m2fKIGI}i>BU!G{CvZ$t4|zx@5f#uKM^UfLT)8e@5hZ*l*$K18OAg9ccM^~ zlrI(NT_)wLJBgZXQvT=!b|b07mxv-)NKL$ z&5&E@(I)=>3_TX$@^3QOpWxf&>;CyPk@k;|T|#`(zkIL%a0NVj{TojlgZKUZFCK>d z=vz&NyWRosc+=Uy0^XNUj^6Vc?Cep_`eS&12yy~)Rh>NseRZe0 z|A-3toBHh#$Ny54k!RHlr%nNPdtlqq=iv9l!1UU$>g=DCNUcR2FdsV?Mo8nPSmh3M1!b_4fh^Zfa9i2v@E)eBhj(0LQ2CYta> zqaKoe72Fw8K;O$9L4d*J+e8Fz({3(*&7tvVf~D>Yz^k^{}m@8QZn>36m}8T^*er zopqM3ACzL%qI;eCByUr!?U!6{{_ee5dr64 z%w8V%e6h+J4z7~OE{}5-&-1k1^RuDf)|c#pzF=fs9cj%Q^Nc@m^kl}!&a(V=83Tm| zXvDMO9~hA-wLmG24})`;x;*vZKswEmZr6=5-SwDm8AgL22OpapPhTBy9NUp;hoHU4 z7unNQ1{O_G@%4+TmsOF!L1fy(M@QKw;f&#v^-Q#K6Z&Amvh+mKVJs{6TwhX(w2ZFe z&$ApDw9K3yYp^F#nrKi$fv&p&^T-WJ#}KJSIggPNV^&V)YAyPKO>S&@hUya1EHWr_?WE2#tq#tjc03@tk~t+RCaTfKoT|LeMx& z7tKc&eN=#5RF+-kD-h4QrY$XpwN)Lj)bBiBVc~|iIGHOANZzNiRYk0hI%c-9ifhYc zjOEQ`=?a8U)}m>66qE!yfy{eLSru98p}YqOa)92GmtoddVfv~&k%x{7bYHRO$V_mC zyLiwZL`m#2rJ2>rs#Q%#<;v2QQ_-%p8=-xTW>ca;n>`{zd$Wvm8<w?c*72I58?SMqZym zQ_@)qvn$mhW2(>;#XPWos~Y;wRi|uwPM4W%qn+SY>dfVl?%}kZCU4Q@ z8gH)LP8Uoun%l%^HrmM~pcpQ zDlzM6kDGGZTzN^f!>Sm^mvU0eQ5=VO>AJ{aMLjTSrreB-Np-x}Z)jmr_`L4LVnxOA z5@#*As*H?4KeL!CT2OG@wyj>n5!&tIWL7!taFSWjw5hVQng=nCahfR}^mvMEOxy+& zd|T$Qd-%-a&2$+O4HYF&Ik&AT4qw|bm+h=;hyz@WAR9}{|@LH|7}z%EEIqtd{+-2jc?(8%2Z$EqSG@ zj9SK0LrOzpCgDdym7c@q8}!!E7!u9XTs&nDgGIWEMP$r&4IHqCS-O$T`a19!k}Y<) y=QLV^kMUjJ;Jl^Mzj)$2R8aJ=Au&v9qHnDN#A|*hg#;vC{Hf$&_Mp=IKHq;xfAp>Z literal 0 HcmV?d00001 diff --git a/PhotoView/PhotoView/translation/photoview_zh.qm b/PhotoView/PhotoView/translation/photoview_zh.qm new file mode 100644 index 0000000000000000000000000000000000000000..74866189082b4854414f689a6a834235130448d3 GIT binary patch literal 3380 zcmai$du$X{6o+rScV=g|EiH-B=WEjpe?PoyY0@>g|@Vv?cR1LOm{Z3 zyQKwUD;S`K(2@u(XiSKYprR5GG=#?=K4L^cgHZu_G#W#UQk6;~0`<%+-0tjNv`KUJ z?tbTY&OP^@GxPL^f%`unetFxMlOH_RwCl*Zg$Si1gzzf}r5#3yn+uDjacjF6xAr4o zFCoMqM))KKo*?|yBVa#5_}6@dY<|R5j3DH=j<}Yipv56h??K2p1#umpf-Obd;3uGA zL)@;LV0+Nw?H@xNbjuz@6+8T(SA?W~4g6;y@48-u>@Ol;zZcdAQEd*ag&b5XjtBp} zVDAEZ2JGFC7e;k9to8JV_wR-1 z9qA{QfWGr3TkNp|u#XXA78X*3&cIaH&%TE@&4rZ@0$<%8{*&J z@f7&2k6Ymb`^8*0#8U;=zP~`{fUtBJ^5$jXOd)WNaSnf<5BwaC&Cye^|LM-W1xEg= zGh8$PTwaD_5bBz?Fyp<`&j44H@x`G6SPy|MguJseyL;DxUrko~+0(GUhsGVdFbB95 z3PKsVHuwftM_gM3_<(r$=N9<2Skz8Gr5Q+OBa*)E=02BXGlZ^C=cZu|CG1RHO}2nFrMN~BrV11vJ9X?N2V_qn>I?#pDh_rB3d)N69FCU$BuaituJim>sB z+)j)ybg?-ohgwNwK1&a;{ex_v8tEl279@n<_UvABG#sO#y`-guG)D`Vv^uNF^W4em zj%2!!MdNJ~Hw{ygE75gLXL9|h`WoeMNrz(IvE-5q238%ccT+USK*iFSs)|yxPDqHU zZaG}cJkU}2qpEzVs)WU|6fFi+lLEn2!Im5|{x7|TJkOgnHZCJ-m?`R-J2-Ymjxw!{ zh*fec`)+Rftrt;Ap#rW*>`o}F50eXz{ZiwY9(IS>g%%9VQf#Mzie|Gi_tftg?4)_} z?r>Dmm`5nwo(2?ln4-o2U<&&sDNI?eN>@UuH_CdP9uiSjv8!pcBo)IF^d2iFZ(y!D z6to+lxFEt}1%vInw{I(@GfjF?yqj4rxc%Mk*C>vq6$-Ob{IV?Rr!^4@at6q3Wj^>u z)0G#_SxIIa^8>Tg3E_l#8k$eCl5{q#4r}`2z&m6f)pbg$5+I@!)R;##rD=EF-^TIw zo!waBT5pWL(ae@7ypIl`p687+C5*vbZxAlMIr@WgMD#<$izEP3I*`Z82D=_loPV{c z9c?sg*R+IWxmrzY6Io*BoYXr>+1SP^6=R^?zJpm~%f^^uK3@3t%Z*D$bH_Z26&)t4 zrgzRULd5TId8kD*X}t6M1lC?gl-6LB1@hjkI$r|Hx#Tv&0+|olq^M?VxrdrGn&lY4 zNRnSRwLUvBwgg?nitY3~&~VLoBS?h33OiAL&1&B!3)mTEs^YpM2^jBF0?{Bddi)|< z&dWM79Okt&Ze_gq9&vksmVhrNDv6qHZue@Mx=_|lO6X7DTDfXK`jL`ZrSJfPCvyCy z!YG*4L7mwU>H4Qnr4HHghl{2wtF%y5HeVU6F21$xBNmq|)1`*!QKgyT@ZXOctG3Z- zmcw=$*RM^!J$NlN@5*o?*L0dXc99Nqj9Msc>2_SD%AF}?;60UAr7E4Yr%-}-{PLg4 z@q}V!c(kYtFJTp=B{eYM(iIDyc?1OO^rU)ViOpY4zC@6HLq< If9a*%zr3XHjQ{`u literal 0 HcmV?d00001 diff --git a/PhotoView/README.md b/PhotoView/README.md new file mode 100644 index 00000000..140918bf --- /dev/null +++ b/PhotoView/README.md @@ -0,0 +1,3 @@ +# PhotoView + +这是一个基于Qt开发的图片浏览软件,支持多种文件格式,纯绿色,单文件,单机不联网,拥有图片浏览软件基本功能,支持换肤,中英文切换,幻灯片播放,有特效哦~