From 9f8eb88a9f0adbbcb2fcf094d96dcfaf96b39d9d Mon Sep 17 00:00:00 2001 From: Megamouse Date: Fri, 30 Jun 2017 22:03:43 +0200 Subject: [PATCH] Dagimon rookie level fix lib stuff fix build add slider amd searchbar disable gamelist toolbar per default Dagimon rookie level --- rpcs3/CMakeLists.txt | 7 +- rpcs3/Icons/configure.png | Bin 0 -> 3444 bytes rpcs3/Icons/context.png | Bin 0 -> 158 bytes rpcs3/Icons/controller.png | Bin 0 -> 79696 bytes rpcs3/Icons/controllers.png | Bin 0 -> 5012 bytes rpcs3/Icons/controls.png | Bin 0 -> 5015 bytes rpcs3/Icons/disc.png | Bin 0 -> 10871 bytes rpcs3/Icons/fullscreen.png | Bin 0 -> 4607 bytes rpcs3/Icons/fullscreen_invert.png | Bin 0 -> 8261 bytes rpcs3/Icons/grid.png | Bin 0 -> 3281 bytes rpcs3/Icons/insignia.png | Bin 0 -> 42156 bytes rpcs3/Icons/list.png | Bin 0 -> 2619 bytes rpcs3/Icons/pause.png | Bin 21820 -> 5031 bytes rpcs3/Icons/pause_blue.png | Bin 0 -> 21820 bytes rpcs3/Icons/play.png | Bin 13668 -> 6911 bytes rpcs3/Icons/play_blue.png | Bin 0 -> 13668 bytes rpcs3/Icons/refresh.png | Bin 0 -> 10743 bytes rpcs3/Icons/restart.png | Bin 36190 -> 8113 bytes rpcs3/Icons/restart_blue.png | Bin 0 -> 36190 bytes rpcs3/Icons/screenshot.png | Bin 0 -> 9143 bytes rpcs3/Icons/separator.png | Bin 0 -> 146 bytes rpcs3/Icons/sort.png | Bin 0 -> 10815 bytes rpcs3/Icons/stop.png | Bin 20980 -> 4600 bytes rpcs3/Icons/stop_blue.png | Bin 0 -> 20980 bytes rpcs3/Json/tooltips.json | 85 ++ rpcs3/resources.qrc | 20 + rpcs3/rpcs3.vcxproj | 424 +++---- rpcs3/rpcs3.vcxproj.filters | 197 +--- rpcs3/rpcs3qt/about_dialog.cpp | 25 + rpcs3/rpcs3qt/about_dialog.h | 18 + rpcs3/rpcs3qt/about_dialog.ui | 236 ++++ rpcs3/rpcs3qt/audio_tab.cpp | 37 - rpcs3/rpcs3qt/audio_tab.h | 15 - rpcs3/rpcs3qt/core_tab.cpp | 266 ----- rpcs3/rpcs3qt/core_tab.h | 26 - rpcs3/rpcs3qt/emu_settings.cpp | 26 +- rpcs3/rpcs3qt/emu_settings.h | 8 +- rpcs3/rpcs3qt/game_list_frame.cpp | 34 +- rpcs3/rpcs3qt/game_list_frame.h | 16 +- rpcs3/rpcs3qt/graphics_tab.cpp | 314 ----- rpcs3/rpcs3qt/graphics_tab.h | 21 - rpcs3/rpcs3qt/gui_settings.h | 15 +- rpcs3/rpcs3qt/gui_tab.cpp | 208 ---- rpcs3/rpcs3qt/gui_tab.h | 45 - rpcs3/rpcs3qt/input_tab.cpp | 72 -- rpcs3/rpcs3qt/input_tab.h | 15 - rpcs3/rpcs3qt/main_window.cpp | 743 +++++------- rpcs3/rpcs3qt/main_window.h | 66 +- rpcs3/rpcs3qt/main_window.ui | 945 +++++++++++++++ rpcs3/rpcs3qt/misc_tab.cpp | 31 - rpcs3/rpcs3qt/misc_tab.h | 15 - rpcs3/rpcs3qt/networking_tab.cpp | 28 - rpcs3/rpcs3qt/networking_tab.h | 15 - rpcs3/rpcs3qt/pad_settings_dialog.cpp | 440 ++----- rpcs3/rpcs3qt/pad_settings_dialog.h | 51 +- rpcs3/rpcs3qt/pad_settings_dialog.ui | 1061 +++++++++++++++++ rpcs3/rpcs3qt/settings_dialog.cpp | 800 ++++++++++++- rpcs3/rpcs3qt/settings_dialog.h | 22 +- rpcs3/rpcs3qt/settings_dialog.ui | 1518 +++++++++++++++++++++++++ rpcs3/rpcs3qt/system_tab.cpp | 33 - rpcs3/rpcs3qt/system_tab.h | 15 - rpcs3/rpcs3qt/welcome_dialog.cpp | 114 +- rpcs3/rpcs3qt/welcome_dialog.h | 7 + rpcs3/rpcs3qt/welcome_dialog.ui | 220 ++++ 64 files changed, 5566 insertions(+), 2688 deletions(-) create mode 100644 rpcs3/Icons/configure.png create mode 100644 rpcs3/Icons/context.png create mode 100644 rpcs3/Icons/controller.png create mode 100644 rpcs3/Icons/controllers.png create mode 100644 rpcs3/Icons/controls.png create mode 100644 rpcs3/Icons/disc.png create mode 100644 rpcs3/Icons/fullscreen.png create mode 100644 rpcs3/Icons/fullscreen_invert.png create mode 100644 rpcs3/Icons/grid.png create mode 100644 rpcs3/Icons/insignia.png create mode 100644 rpcs3/Icons/list.png create mode 100644 rpcs3/Icons/pause_blue.png create mode 100644 rpcs3/Icons/play_blue.png create mode 100644 rpcs3/Icons/refresh.png create mode 100644 rpcs3/Icons/restart_blue.png create mode 100644 rpcs3/Icons/screenshot.png create mode 100644 rpcs3/Icons/separator.png create mode 100644 rpcs3/Icons/sort.png create mode 100644 rpcs3/Icons/stop_blue.png create mode 100644 rpcs3/Json/tooltips.json create mode 100644 rpcs3/rpcs3qt/about_dialog.cpp create mode 100644 rpcs3/rpcs3qt/about_dialog.h create mode 100644 rpcs3/rpcs3qt/about_dialog.ui delete mode 100644 rpcs3/rpcs3qt/audio_tab.cpp delete mode 100644 rpcs3/rpcs3qt/audio_tab.h delete mode 100644 rpcs3/rpcs3qt/core_tab.cpp delete mode 100644 rpcs3/rpcs3qt/core_tab.h delete mode 100644 rpcs3/rpcs3qt/graphics_tab.cpp delete mode 100644 rpcs3/rpcs3qt/graphics_tab.h delete mode 100644 rpcs3/rpcs3qt/gui_tab.cpp delete mode 100644 rpcs3/rpcs3qt/gui_tab.h delete mode 100644 rpcs3/rpcs3qt/input_tab.cpp delete mode 100644 rpcs3/rpcs3qt/input_tab.h create mode 100644 rpcs3/rpcs3qt/main_window.ui delete mode 100644 rpcs3/rpcs3qt/misc_tab.cpp delete mode 100644 rpcs3/rpcs3qt/misc_tab.h delete mode 100644 rpcs3/rpcs3qt/networking_tab.cpp delete mode 100644 rpcs3/rpcs3qt/networking_tab.h create mode 100644 rpcs3/rpcs3qt/pad_settings_dialog.ui create mode 100644 rpcs3/rpcs3qt/settings_dialog.ui delete mode 100644 rpcs3/rpcs3qt/system_tab.cpp delete mode 100644 rpcs3/rpcs3qt/system_tab.h create mode 100644 rpcs3/rpcs3qt/welcome_dialog.ui diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index 88dbc882bb..61f5b4e7ee 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required(VERSION 3.0.2) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules") set(RES_FILES "") @@ -47,6 +47,11 @@ endif() set(CMAKE_AUTORCC ON) set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC ON) + +# To make UI files on cmake 3.7 or less work +set(CMAKE_INCLUDE_CURRENT_DIR ON) + if (Qt5_POSITION_INDEPENDENT_CODE) SET(CMAKE_POSITION_INDEPENDENT_CODE ON) if(UNIX) diff --git a/rpcs3/Icons/configure.png b/rpcs3/Icons/configure.png new file mode 100644 index 0000000000000000000000000000000000000000..8d6437a4a1ca84216b285f0bbd47f111f565d6e5 GIT binary patch literal 3444 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 literal 0 HcmV?d00001 diff --git a/rpcs3/Icons/controls.png b/rpcs3/Icons/controls.png new file mode 100644 index 0000000000000000000000000000000000000000..6af961cf3bc70cb71e08ebb9de8a99ed16505d69 GIT binary patch literal 5015 zcmeHLiC2@?62D25RDsZntw4SUu^_03XcYnx2oS&}LXV5MC^|S2@!j~O?Lh^I@x}?^D<|5U2dcd0P7Fe1+Myv zO;`4|danHVMu}r2C78ypu34_;dkT#*~wU!M}UIDY@ zma{cm?&Jk`+^FdiVv0QeL z-7H0S%3TR!wU8u?E7#*_M-)g)iIfcaZbAXfaF?EmHp(AOG-~6D# zJG@+f2+GnO%;b-J8AJ#~Y%BK)PvOu)EYNm&{h_qFjliCNevD+3Vt`i1-O{d;s?|hf z9n|WEQr^@~E#Y1k=es`66yw5#uqpO2@0Ncm(`PWcM<#PgAt%@wRCQc!K*rz-ba@(e z;(~6E550d|)6ZML?EP70Ba01H~k&fa+ zPS~6i<#W14t_%L0v+Inrsu$<#PtBLSdCBf>&5~JBnwTh4eR}BO77!jZ-)`oaWv;*a zvB(MCOX}3J&!p8;l;)(UC<@7!M&`2G7#qKx`Aq&pJD6D<~7+fpUf!j zG^p$vJn8q{23PFVGFD=Gp0Kh<2Kv4FKis8svBsb{T%r?Uh8RjOv6Qj642W|*me2P8 z(uie1J!E&%2qvTALy19jMIDa;IvT3-vNxN2?$vMAt-T(&iHT}f^x2Af+y>>E1_6g@ z3TgKy3vUT-QKW_wubb1FCDF-8^|!Z~e2C2kjV>3EXMz}G72FFKF^EeV)MzkF;R_SI z@PKRw;R}{Hp8tCC)5~hE`Dz?uo49)}ax{8Cfe`oM2YCWDH#pEFwTuZP`j9E-9GmQU zH;kmH(tLj?U4Xh{K7*_qReT%w_&lo)H~O$wxCJ_v$BD94l~m|!;C%QSNU0__^%liZ z_lE+}$jXIk^sE3qhgoRmpI0EaB!&hl=LrV#yQT-as6Q2mtL~6M^c4ni^_6EVv4RnY zAEfTo21lE6LUa0zPV`Ark1CFxRB>CgexFEUqGx~kJMZFM**C8avBc}k_1s)j@y%my zDUfYVi+57lBy zjkyY>raAMcc{J@99Hi5f99>>XX!!I8ln4*QSvt*O?@h1|d_&ZUY>cUsVSzkNB!??G z1tx0=NDo;POKckF$fW4|CY^qJ&q0>I1&5*Jlwx{kpw|Fh#3~h?Q|wFVhO>V94tdb> z#(Qy{hD~8TV+PpGux9d_rowW)qp2u} zPVd#<&5vbJL`#e23=b2#(+V3+MFvx82FG04N5R?n@sp6;16Uz%PQn)69v>f%vUEkX zO?B#(V=rGC3hGySeucS8XdXvjtDZ!Jsus{iA`!YzyV;i-`1k&Kz3?b4vH7j#YwvbUhA~lvV266Uo)uw-lghd9l{j zPp~x~wt9z#jxmQY;^ z&QMZYS>j3z#voLLA=F|NHir{ve;mFj-*hM^CVgb=lHMgMjF?{P%M4v;D)5qGSDk33 zUv3zryyhGAz354dd6(gpIw{~RmEeMduuHT{$stz~iZJ%%M0E(zwzf8_g(6SO4i#gm z1HDRt2rx|eP?nNXH5JRK%Y5{;ui?#~s+yt!ukfF+JgA_DB#ZmQupgJm@+AiDJXz~= zt+GW%52~}0;Fxc_R&0lWQ#V3sW^R@}>Y7o0fIR+~B_6>#P7ps+fL>pcP9A4;YmaSw zdn#r#6HS7RxPN41q>Y_lNw{WYf#v0I$dwY}=!tYYf!bt0CX*-GC*iI6rnlK8t!Wm{0 z)movKuVCmd>0_-4tPTZW*s$wO(Ip(FX{mm&cLydWk`pj#NaN%HNM41#lD_4vPk*Xv_JE)#}sNK7!dli{TrfX&ElCV27s# zZIXp!cZTN>o=>ssT7}oIPYriMw^v@U{Oi=OUg!IGwCeqrBHLYai$WprJ=X6###~eY zu-iIdQXhAwve?Ou*Q7n@)n^9^LXAvFNl9t_h6uzRqY-cgpTiQ!05GncpRO4|<~4=r zwxy4tlDOS3mqK02(Hcw8B6te7H7@}mDc^&XNhAZY!%+cR2?v0CgEv3|JYg(hVMLJd z-Ws}=mjeMD*ay3{3RW9FT!GQ8=|x&=CdxUTNFMKGM}g{VHhU>igv|{lPV0Hilc|wD zUV!$c1)s4~+kT4$Krmm;VgE9tv|-r;xMISdkq)g_&t;;m)7#Z*(X?Psr-5Zevp7^M zX@Qz2=kQJ$9!pU#qcA4w`}ON5``E9*gHPVQHokj>{y+R*fW@!WJKH8-LJI$LK4G_+ bReDNR)$z|(p8A*87}vVhn*uAp2>;JtSNYXq literal 0 HcmV?d00001 diff --git a/rpcs3/Icons/disc.png b/rpcs3/Icons/disc.png new file mode 100644 index 0000000000000000000000000000000000000000..b4e6ca2ea5d4204134dda2efb388bf8dd3a18631 GIT binary patch literal 10871 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 F{1<3w1JD2f literal 0 HcmV?d00001 diff --git a/rpcs3/Icons/fullscreen_invert.png b/rpcs3/Icons/fullscreen_invert.png new file mode 100644 index 0000000000000000000000000000000000000000..b63c3e35210462526a2c1f25826cac0b71de6a88 GIT binary patch literal 8261 zcmeHMTUb-qww@tM%2uK3-hxqxt=BCITBXv6L`w@IUO*AF0zs+LQUz2Z;gYOaYqdu) zDk^rXM2nT15>qWAx5QeZN-HX)!BR~W6(t}S4d4nZ>x{4#X1TxbJe-H~vQHoUaIQJ$ z82|Xkm}87N^G)#5fMI{*{tY2CEO6mR%Mr4J|JtFq?BUN#aXk)y2E{H|vH&5Kd`REg z!7v^dvvBzmgiM^>>k`>hghVqCYKcaOe-t6-#N(wQJ}}{sxN!AWkX>*6$7(-N z`VaWXNeW!@G3SB(h*48VHSaFk4WC?+K3jS z{l2|1dW3ji1%9+3R2^J-Nr^}A>w?uz8 zE4T9JypbcDf^!^Bb6s36{`08!tlI~AIlY|S?9m|;x#>atDQ{i*VO~*pRM{8FWKpc% zv-*=}Rgv*UVC90F#c6`t$RDK5TO)fa2uBp1-J{3IGc3gZ{`T{s$Yn~#wpgT@|M|ta zY-GPE=iX>EBbeKE6UnyU`7GHU4L#&vHVZ|coc+g%zqb6pW9)WXdqvMTEop^cQ=sA@WvQ2foBPd;`|wC-Q<0l+m$@8TVG?O7fudiS7wmyh4)Pjn5U8*-yhb; zS7r2Ubu+g=7HNiAeJ2}Pa7FrC3|Ud`ShC#;Yubt(on?jU@K<$Bu3DY>1AQBLr`++g zBVeX%ecZH4CH}a@xqv6;KdEZ@f;dubNlS6PHO*>lO?_~mCC)tZX?US$xFQYDD%pGO|l-QRcHLym7xer$c3yRnPA@i`I1O|*FB5pZ$_CtHE;iL3#-AuX^TTc6epdm zQ}3K)@~XJjkM6Vm6oRouo+#@<2mfS<#I?P%0aLb#H0nYh2k}k{{nd^(XW4Wm`(O3C z_E8jg@%PkJ&VCQHMyF)=C28EXy64$)qNj^*IBY%C=NAwA>Hc8Ddt;+G(dt)}#jy*)nVR>!P;CX;nBsaqr_wEx*YB5VYR2?{ zJlHSPkjpNr*RAX7r=iz{V#>EynA(pfkg!aaULu2D@S_7LFiwOHv=w=>6c}D}Vi8fv z>r|0ZQJg{a&JJN3tD!W)Zt1H!mMKm8Gq`XQ87V#YNA@7GYsUo2mAi;FKvr&=Yp}XD z0FNiLo`^JuDH?e%6996g(9V&_t;UH+K{v_Mju-U%c`~iz(OlS_6{Iv*27MealtL z5ddk_u@n-#abLJPOip}5?c9zTVdvFy$2_5;+LGRX-fQZ2S>}P|O+rq+(s)+i)~+J= z(X93Ll%kCpQXq7aoOrdL{%Ywdhp$$e_tnIZ7yA69KHbCa`;R)R9fn~hamMgkSb^{BT_Ocv;1b7z$0hCEXAwE zk5vNYKyH}?z@khbq5?#0phVcm;2;7Y(eWx*m>No!R$DGop7Y|$6Il(ZzZ+$^&Zj$f z2^ISf#D{>gxj_H7u##rXO`ZgiA|26@p>WJ2Q-}sqHjhHN5dfyA(GVvmM{R@MrVubIZ>#%I7p)mC(9s*U8K30Bu{5~2f3LC z7z~a;8=6(*hqSP3gQMds8!?)*s}JpF%#srvIum$!pch>Y*lybSO?ETfVUo7?JrA@M zCXdn-!sK|Eqz!!E0~ud5V0qN!jwZYF@53Ywi4T*ovxJ(w3X>3jJUVf8Zf2EWZf3!N z(nofQdI-RAG~QnZ8>A_%WHfE`fgu`6R|CnSgKoUDtPzacL8Dmcfi6KM;n40p6oKM( z385hTJgpjpAM@!J$f#k{BfDF0a5x93?0PZ+rM|dl;n1OXIs)OKYC!YhA@i5HnR)$f z*pYnI7M3^-GR8?7*O4KbMp&$&h8ZvfI!FUOn*~E~(PX-Slt-Yb`?^A5ktK9}pA%iV zWS3ESk#eOvm@w339c0rMMSCEnF}Xk)CJ;)VKdZTZg^n0cXPGYf@}Ts~cxzqOAvW!z z2oIEC!~-?WipsNNKceFCwiRgSkp0#%=rMKO64h;KAyB7tj1G%W`TNn4rJ zx@Q0^II9PcaOm2$Hv&D+(y^Q-QJLfI%jnNJO19fV3ij|V5G7F@A6t~1KLaVzvUY(V z9SS^WnJC3|Mg)BdH?vk9)3J8YldjG(6HE?pu$guAfR5GQYeVK5<1G6CCKppXPr)RV z&>b|KMB9F^r7b=FIxaJr51^*cL%VjIEQ+N&kV=Nzkq2-Bj0qZ_v*IT|Jl2Ux{(zI{5pb!~_5F{~O7c%?e!8u-fOi3pyV7$4@sOKKL0K7T+1QZIshw zdlY-H`1}R2_e|uSd2#27YgfNvX}&!@y>*(~(xK?)giUK>I}_KT#7UnInY(A#U!wje zu3CrQhwIm}F#Y!{OxJTsoaIYX7ZC2(aYEa(QV>dPKJgu|$T$4*AjCV+FGrPAIJ`I1 zG*YWSCq0A5^3w%th{G*u*_K*lU{i$8E#+=+FOpuw*O}b43E}O=Tf_#FXQBSZOUxee z7WTWfVRZf58<(-9<#_&$iH6?G2$fOJ-8Rb0zA;nA%a@jJaq!;efiy*wi%$d&`)Qj) zuL{yhOtT$oT|~*bTR%nYn%EbCWRbM?9Im~Rz3;>jbl#ncgxHl$kgGRuWua}~_XkPq zuW{o%lx!adZ>Sls`1U3j4!;X`wo`Cll4sf$ zrk8U^Kpk;+M$zHanGk1lN5YrMj4zekzeBBZVZf}Z&l9`O5HQwU=8jUbH`rKoQLbou zn9F|hcyyA|-jXu%_ zK(%z(Asy?|bz89fUT^@sMc6E@O7#kj;=E)~I;(ya-0m3!{u;95#|p>Z4<83=8X4MF z$6bUVO0#L3xonuuWRxjGN#!EH+~YRBe+_N23b@`9qzy0B=ig~~mcszB*ej}Wg^X8Z z*=)k5I?I|Fq`#<7+|)z{6sRMK+#Bw)tj9J^F4TV(Sw*&olB)MCp0zdupX6OBwPdP0 zF$n{hUxwDyOD=z0O-3nfu+E12Jyu}}wsoqoj6>BHCOLesU|myt8DVDF4J`X~s~IeB z#=I80nf346BDX}z{odFK_ctc>R=>uOZ}>GN=8=jd7_u7+-zjy&^lg}#5z)nQUx7l* zhI8{=ula6fCBv=pIaSp$q{zmqznbeNCv*(AR>URwbPE~gzs$b^PbvO3vA1)os$$3w zY(lCUwYS8r0_H(J#vLsuni+nu9zYezJb)c%`+#cFX>Zp#WSHI+vY$>GzX2<7Imm=N*`8+E47#y zS2U8@7D*;U8Dyys>SD;Yp5hFP;GAWh=~_#8K|tA{lGn++s*=0k*eSqc$Qnf-R*YwA zV+(kNZk;0xws>2eQEiGLbI9x1m>y-QU5USnfZTS=1@ zyC7fs9bVNdtS2ia)1?p0ycS*+*=D9rxWJ+6+v9sF3%dtr0U3`u0Ncg(I%}{a5LNw~) z@MRpE-P^W#jc_x={ipd1nZytj8^(U1BHgu^w2KMjWZA8CQ|H*_A`57ptSZ+C)sDD{>4f>;i6Fn#SDvZT+~7eviwDgp(FLGl~fg zDy&XU)OO#qoP#&HjhG_tr#H}?{8|%3&dpcrp&r`Eca6-@n0nJ%F^;Jxl3>uF8ehmN zk+#BNZvV_|4ljH|SE%U$yxOcY8CRL!*iztR*(6TCL?V-MbtiKsC*O&nU7`#f4-bEL zrIFfsLMHwRrtKgz*kmkgX5!xWoo}nMS|3AhZ_%YF-+;bAa!Y8XG1)A~TGg>;Q`jXb zldGIUrxduxFD6RiX;)fMdTpZ3%c_7dUWX3r>S-Xi*DJ{_4kg!^THRJlG!WUx4r9e6 z`wuBk>s;`hse9fJxJ+Nw;asRMxbybdQ+__(`W0%$nsUd)*Y&OSfR@vz$deY~3EJTb zG`7VWhZ2$c-mQ{ zpTc`&OV8am$zx6(1_%OaIKlY zvNnb3Ug$L!r@9(cRs!bk;qGuyvWp-OHbG3e*X!Dv-Y{j7*IVvz?KH<= zSQoYf$19BgcJvZ259-^~5(V94w|YCye_p}#+TJ*q=dbt%T%~UBP6!j$zGO!Fg@Vl` z&>SUT)}xaUZ7vOi$BD`?s1hMmb9eKs{lg;yD{lDhpa&Oeu%cpeX(W=#=^py7cHy57 zMH*9#wXjV#i7F%PENe|Yg|$9J&_JW@(ix}$??8rwm-dRtrWI`YmCFM}r#trEaP z2(@+fuvc57IFPcSL?b6!Lu=szOlL&;Hm435)#O)|Y0u~CSZmxs*hyMgXPiMP`~yyOFt_5F#5~?22l@eL;wH) literal 0 HcmV?d00001 diff --git a/rpcs3/Icons/grid.png b/rpcs3/Icons/grid.png new file mode 100644 index 0000000000000000000000000000000000000000..df4925b1fe5fd394f7fa737420c5f9e298bae7e2 GIT binary patch literal 3281 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 literal 0 HcmV?d00001 diff --git a/rpcs3/Icons/list.png b/rpcs3/Icons/list.png new file mode 100644 index 0000000000000000000000000000000000000000..96f3a5669a3c0b5b9f329ebd895546ac77ba1790 GIT binary patch literal 2619 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4Yzkn1=x}&cn1H;CC?mvmFKt5-I zM`STj{Z$ZVw7nMb5hy58;u=vBoS#-wo>-L1P>`6JSE84fTB2a0XP{^HrziP7P~T2Z z7srr_xVP6gX6B?zxCWX&3Q3UR5a|)%Nh{zz7tg65CZBh>bq8Z}v3eM%-xFz{F9O$2 z%5B~%_J%3%L;aj;cA!1O1k{8*|NQf3(at|Qp7NzubL)1@<9l#TmifWgiW~Wpz62g; zsMrY-kz|;3jfa85kU?dwB!fT_gGZDxgTfJp30u+_96A^kGS4zJ2rxTbn#IVV$kwpL zl$pVahru(OjiE(iRO84F92w>Z@4w6KQmMUd$gnTYpX{vjXaD7wUw(i7{5gKtT)pY1 zqxXK_7kz(!dwYBQy5-C}N`a~P>t1FZ&--P64EDtMvlqM`O@O1hle`j0PF}v=TJEd- zuDN~AfAS#-?f38B^MMJCqEf%X|3!`6|Eira`#dhW+uGXxt+16nu-2OG!0V42?yJ09 z?6>^#>8~XW+s}=btD|)XSrzLO35I$({@?PRzg8qO)a;$dM^SnmRGJ?M@7(>HUpL?6 UnX<=~{UE1#y85}Sb4q9e02d`n?EnA( literal 0 HcmV?d00001 diff --git a/rpcs3/Icons/pause.png b/rpcs3/Icons/pause.png index 768ae5560f118f029e4aac731e7f66d76a0fdbb0..cb4d1193746154696d2e628f2f06891d1e0b48d1 100644 GIT binary patch literal 5031 zcmeHL`%_X`9KV`cYY*36TJ8=xjcXe-Qn}Tx*=2PtVtUZSG_944HFDg!$NB{t)lGkKx27pkk8VXE`zzRFNdmJmm=xOWI0N|={GMXQbwLd6X zld~U_e;UXkEA`u~SZ6GA)i&l9#%?Anzq9}-$uBHsCKVSj=Y5v6C}|mbiq;DNGZM%d zX_@T2k>~1m#>uVWefOT7nDjhn&6nNjnU|&~$2(~en=Fi`>2cMWg+~SRGLC#V>0tW8 z?QxTp(VJ%OqAeu9ikUt8@cAG2%v^Wr^&0a+Uc&7J|^ZHyt91`y; zsp_TI5C&p-IYw9MO_z#0)0g5$>-F}wN1h56Z$R2{%ew`+yj<(K-(rq;?}+HcHGd+= z&i1|bS8-t<+L?C7zX6=06-jtElyVV^%`%#3?m=xThvHVW#D=;Ju02H)*h=`%ifk}U z%C}i-AL>Z2a7eZ-s#$XY8ScHPEhak51{hx}b=KKD)@uDk%iBl$JcFd;6rU58S-!K6 z<>GfFKwgi~NY-$coabGg6*_$O$k<+YEIJ~iB~n+s`5VeL&2`uN@5ory3UQ2#;Pqzw z7WNE}Ym#!9W>}txJ1SIl)a6MWLrAn|Smr#fI%{|S-awJ^w&25`efsdR|Bau&E(LwU z{ZP{=(sUyiiGK6Pm?CjB#$BBi*+c;&h+cE6?nQfLv;%e96bv~*ncCp*=g)&AD?Q&} zvm_oLp1}aWMLKGt?husvx-5ycLMZv#n3Icd1;5x8(Yg_I-H!6DE~+Rr&5?qfgJtwW zIpBd$%mKb~w@w5tzv{=k+LC={8NH5mR*%`NIv29&40i|7kW0-idw?sq46bm?m3c*tfUX9>; z2>u$uuQKQ#f=)3A9fEi%2oi(HILIIVH_`<6k0;6|Knt-We7Y26Bp6B{(q?+^rV48^qHGAZt4KZ|60uP0sY6<>-PcnS<)^}|zWMS%oa#MEeSX6&qeHp` WzkW5uXC?%8MP9WbqcMHw;eP;tMx)FC literal 21820 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 diff --git a/rpcs3/Icons/pause_blue.png b/rpcs3/Icons/pause_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..768ae5560f118f029e4aac731e7f66d76a0fdbb0 GIT binary patch literal 21820 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 literal 0 HcmV?d00001 diff --git a/rpcs3/Icons/play.png b/rpcs3/Icons/play.png index 2c1aa19bbaa63ac262fc611529c2f4b152230cb7..359380bf956d6a80e43c31f8557f919815f2c0a6 100644 GIT binary patch literal 6911 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 ex2g=T7ODmF zG5rz8lzvxjLR+*A%??jKipe_|D=4txf?+wlVasFQZ_#q&#{Nt=njvTQD{>(LuVP)D z!uv5`<_rG}^gU!B+7_*3;!wh5G-FHyIK~*!4_y4mJH}W6%s7WKwp+{Zaq;7+M)a6` z2t{Zm*Mp|N9$GHg_ai-xjric{LA6AA;>PhCWFx(bd2|k`Lf=w73;QENOg6MX}v(LIe+Qz_$Du(w|r$cg%*`}v6Sa-Ct5Y5mE#)f<#Hx9j|lmYpA zZ2j1=_#N6Y7LIN(GCX%*TqQus0{HU!diH%ryI2`p9T>hRQz!i|sU zN4YBi0I3GtVPTG6Z(XYtGjUC9CXO9Tw-tAXB0e!%8A3@NsJ z!Z#a8n^oyiNK+ZPy$Vlnai)6)12E23xFLJI6H=aQ-vRq1p{rrwEV0d+6ZGvUK;DHpORTn0W z!VC{DJz9)4qVUxkeTogXkL$5?7&EprW^pqRJkO|VxmnC(k zwrI(~M2>7L&^srywz=3AlX#suGr_f8B(^SNIdX>p|AX)jXB)f=#ROlT;6Z_v+^Tdar05GEMUO06SZc3@ zG+UL?{Q#cqaVs|8e_}{||ok9VxN0lDpC(d%J0e5e3u2KMI zppAgFwTQ~Y95ZP?^yRbP(lf2m(y?-2wxxlAG|nlRrKh=ENJF8ofip>6m<_1R-i7&Z zRmux9$}7dVD6bSxB{+I`7bf?@-i6tyV&;WeqGINS$(ypeE32Ce)gC>Y?Bq&=>)itV z9ZpdifCBpqntPIFBo|4m8K@J78ou0xu;8fA4bA}C3#&M5K-;#X8RGm?V6?sbw!!)w z=fe0{2vt*Q*e-@J$<9&OH>Yt1Y`R*Ycjqu(SUSjV(dCFvLoGLtW1-i; zk&>5m8jNZ}dk#XHqDogmI!~3x;3=8y%c}r5odHYlVlxg@rK11&}DUzO4=Y9{y{;AGr!;Ht+N6M+r;ENL2D1bg((Za^#u!hSIJpBnz zlhk*sFatX%X1t4i_%T(wYEql#8WT!0;PBVHZmAqaEK23Ed>x*!x8fZx3cleCp$lO7 zeKls~8(XxQ>Wmj{E!qd%ic&Tjn?5zl+4x%W6jvfzj2Zt>F~7Rvp2)2}@%_SfE-Q3c zNe*~V1u*xmn~nu4sDk7orAdW3PUY$|P4Jo>)v&npwij-b{Ph7y(X?SZiU!o$8p&M7!s%u&fJ(^ML z;0bcT(F`M6O*~CZE;1!?T1eW~XufK|4AaIHMzpJto`4j$43LH<7b#mA6NN9oCqK_P zDJ7&xNl~qZrni-H4@)@m-*kAT386(cwSY-J4I9pHR_6w+xF^q5XVlUaOKjW|P cX{l#g>6b?yvA%G45q{B}nF}nZXV^;rAHkmd>Hq)$ diff --git a/rpcs3/Icons/play_blue.png b/rpcs3/Icons/play_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..2c1aa19bbaa63ac262fc611529c2f4b152230cb7 GIT binary patch literal 13668 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 ex2g=T7ODmF zG5rz8lzvxjLR+*A%??jKipe_|D=4txf?+wlVasFQZ_#q&#{Nt=njvTQD{>(LuVP)D z!uv5`<_rG}^gU!B+7_*3;!wh5G-FHyIK~*!4_y4mJH}W6%s7WKwp+{Zaq;7+M)a6` z2t{Zm*Mp|N9$GHg_ai-xjric{LA6AA;>PhCWFx(bd2|k`Lf=w73;QENOg6MX}v(LIe+Qz_$Du(w|r$cg%*`}v6Sa-Ct5Y5mE#)f<#Hx9j|lmYpA zZ2j1=_#N6Y7LIN(GCX%*TqQus0{HU!diH%ryI2`p9T>hRQz!i|sU zN4YBi0I3GtVPTG6Z(XYtGjUC9CXO9Tw-tAXB0e!%8A3@NsJ z!Z#a8n^oyiNK+ZPy$Vlnai)6)12E23xFLJI6H=aQ-vRq1p{rrwEV0d+6ZGvUK;DHpORTn0W z!VC{DJz9)4qVUxkeTogXkL$5?7&EprW^pqRJkO|VxmnC(k zwrI(~M2>7L&^srywz=3AlX#suGr_f8B(^SNIdX>p|AX)jXB)f=#ROlT;6Z_v+^Tdar05GEMUO06SZc3@ zG+UL?{Q#cqaVs|8e_}{||ok9VxN0lDpC(d%J0e5e3u2KMI zppAgFwTQ~Y95ZP?^yRbP(lf2m(y?-2wxxlAG|nlRrKh=ENJF8ofip>6m<_1R-i7&Z zRmux9$}7dVD6bSxB{+I`7bf?@-i6tyV&;WeqGINS$(ypeE32Ce)gC>Y?Bq&=>)itV z9ZpdifCBpqntPIFBo|4m8K@J78ou0xu;8fA4bA}C3#&M5K-;#X8RGm?V6?sbw!!)w z=fe0{2vt*Q*e-@J$<9&OH>Yt1Y`R*Ycjqu(SUSjV(dCFvLoGLtW1-i; zk&>5m8jNZ}dk#XHqDogmI!~3x;3=8y%c}r5odHYlVlxg@rK11&}DUzO4=Y9{y{;AGr!;Ht+N6M+r;ENL2D1bg((Za^#u!hSIJpBnz zlhk*sFatX%X1t4i_%T(wYEql#8WT!0;PBVHZmAqaEK23Ed>x*!x8fZx3cleCp$lO7 zeKls~8(XxQ>Wmj{E!qd%ic&Tjn?5zl+4x%W6jvfzj2Zt>F~7Rvp2)2}@%_SfE-Q3c zNe*~V1u*xmn~nu4sDk7orAdW3PUY$|P4Jo>)v&npwij-b{Ph7y(X?SZiU!o$8p&M7!s%u&fJ(^ML z;0bcT(F`M6O*~CZE;1!?T1eW~XufK|4AaIHMzpJto`4j$43LH<7b#mA6NN9oCqK_P zDJ7&xNl~qZrni-H4@)@m-*kAT386(cwSY-J4I9pHR_6w+xF^q5XVlUaOKjW|P cX{l#g>6b?yvA%G45q{B}nF}nZXV^;rAHkmd>Hq)$ literal 0 HcmV?d00001 diff --git a/rpcs3/Icons/refresh.png b/rpcs3/Icons/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..dac1903261b8e544296dd763c3176f13172bcf2d GIT binary patch literal 10743 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 H=YIVkSMoa)78&qol`;+0C{yLhX4Qo literal 0 HcmV?d00001 diff --git a/rpcs3/Icons/sort.png b/rpcs3/Icons/sort.png new file mode 100644 index 0000000000000000000000000000000000000000..92001514b308653b7a22ece98d58efb44d6c59f4 GIT binary patch literal 10815 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 E2f#thkN^Mx literal 20980 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%0AegMtsk z8Or+#$cE1eZc(q2B5tkrq}Xq~?OkQ;=i z9w#y#h*!^9aiYSE%q2RyA5&I&6HG|DXl4xYtZ{XinGK(PBi$N@6r0Xb@Uu)WBVI;t z*fE*hoyiaOBG*4z5g2U-ZQwl2`x>$4DL?F{E5t1Y?+Q1F{STn8QDB2 z!}mGr)j1gX)tk1g0f)uTAy+@KY|P`71?oMG9p3ybKBwIRH)FR~CDf{vZJOhJPwfHx z_Po!e?FpGzaFn&;6u-UP?MWbhG}Six;sBrr_qP{tRFZA9%t%W45s?X|=IXl{0`^U1 zkFUinP|!g;!5;6xPiUjb*@1X_S<2-+OI%~kg3Kzp>8Es)xH<*tWw5=!7|DZ;`g-Zh ztX57Rk)i7eNbskSmiP+Qf=WXTpvDPxKZQ(!#Y$;=`huoNu|ZOkVf&SRDh<_TrnqNW zG{(m|d!XV`3n_M8iRfhvX*K2Okl^v__`|zb{d*|2zho_K&^9b2fMZ?%GM|Ule>x;g zJUaB{{`Gj#a<_*hZpRRsm~(9l!vEUa7f$TT7m6L6V7?p{esU&WBUYjX?y#s9Rvf_W z%7;CDk%CVw?a!>r$4_Lq@x{8WCfu5+T6TmLoPegw%>pFUzkEfQt4-+0-%biIEF2`* ze-yv&$nt+j2@S#tk1-zlhXAoz|1!;qubWQxWjtRHGK>t;DA*ST*rjZAUDDYB=-)uE z#9Y>><5rzw6n5tC7Qa5hJTa`h^a!m_?L91xTt)Mhk}+?IFn8X7T%l@wX!QIbCF;CK z)CrpJeN`kX&~nvm);V&35;eI_OsWy3=eqp+KK8{8;RAwihps9BY%8g{*%=Hpnze&@ z4~jj*hS&LIUC|$Pj-O+R10_Kl405$x6+A(gV}gF$cM0q%hIjLE&{VU=OmmCp{%Q#u zlO=}455#r69EhCH?%gav>tnw?`fVPp`B>0m=>e0ga6F0ScPo?ADo5s7;y+hqYsdy! zz*NZ#gW5ta5S`BRd(~%qVf6B%tbaXk*M6dbp+;F<{~!Y_VQ;EnV`*Xo6ppJN&ihBP zZ2%)DruIS^o~Z;vCOk92TJyf!`;T$sf5+CX|BlA)`3}IX{Ss+4J9E946$ZBq zMt!Ihr8-bBQr}2uC8Oe@GhlLsX$ho9Ez^jMjJp1T)bd^tOSCQJd^^^*kTUoLBelMe z$vT9PL(ECl6!I{yDYlNHYv^kZ2lPW}XO6HhdR`??%Ro`ev^7N1#CTqYsV1GA*>OqX zhtoqY9P_wJAPb8%Xk(sY$We1sBchE%Nl+=oy0zq1b&^5E4F1%m2R8UP^hW2SaM%R^vH(O<^!>S0K5mmHu2DT$P8?Q{LhOswJYFrhkg%)~g< zAGZkcRs}@6CM~epp{{jpf+fxo#%;=rl$%Mkem<4!t3vXve&HXODAE78~ z)7^b3%M{2l-L+^Y=DGT<@6EnF>5Xt|(gdAJh8RXAdMRz681Hc0c)v+;3vzdB^|H;t z${u~^pBgP#;s(+Y6Rf0iZpUV3#N@|5Lu7zr5FW=hCr%d#7Uf1>_`E-I&XIh*gwp`8 zX^0wwb~`xi7$e_N3E9F15vPZ<`W8>RO$cYDhr))e?*fms@fCKX7_Fbe7VJlWXRW1V z%D{LsveAsqgMBa0x7==PoZjqItJ>rhq6OAF6Lc+fR*nL^O<5f}x}T?zqVJsY+=auu zR2wPlNM&#A9=(8gfT)w%*_nN#*ltR#9N#DK#Qfve1pL!^>}8d3-d%JWqCH~9FO%4+ zPDjwWZfbI$7SoeEXcwpU{oJlR;VlJotV zQ*Iv?Ifl7rKb(KN`_!IFL&u~*y+rmf>mgvL`p+lJdN&)$52(5K-b6O&TuY*0Pu}W^ zCHUv(K|Fo2U0{iaC(6h`m2%gY6;7UI*+9S;oQVnwf`_XQf!@+Aua`4*ze;~=U#3Tw z3}3qT_*v0}tdB*TBZxYpp6R+dX;X$fue&_}>-InCM++LzW6GMIhM$0)`fP_q{`I!x{52k3A>x-Mf+o?=i{g+K$~bUPi@(XF#vJl^M*(3_fP> zTe21p=E|3cXL}ffU+-i?WQan^O2c`9eS@l%y63= zwB1Ao&>^UytJ6tkmXLUQ4WWx1#8o*+OzL?q8N0iB#R{Vp$$bchpgLbcwX$v#{1VQ9 zLd)y*CdyPFMbOf_DgsedfWku=oPpXd;53pP7YT0Qe&P(?0b){n?Y(xE46rM+AlW?t z%rWnki7$-hd}&#ESYOEw7;MyjTf#HAiLhN~kEQcHEz!4<Un3~?wMyYoEB&8g3GMiz@blrHw9(~B9I{fO>Zfnf<$(zX=dd#kY9Mt$VTU7tT z%V)$6L@j)^bJcfYO-xue9wbj{nyn~iP|AV<#H+JTFM8N=ZrrpWvcO+n0ne4MY3%^I zG3JzNbblM0RryrLmBYl%GON`XXC)B1A!eZl?PKOA*!()d#0}`Go*-xG=re}*0-A|A zwX#BA{z6|?i8E%|{3uf1A0a&4m)&Ovn{H97i`TDZqwu2e?a)ycw=YTN7*{^=s;B;A zHui6vx7eBSBnfk_Nih{Au5DFtbsK;T>R4f_9j4@ao#tDw7s4}1gFQ-Zbie7SbD*nb zaJ{l33D~M;i(ixH3ag*_%Ez@bDa~~^F{B9XvfB5OHel3av>Gkc47SKrRdbVy12B*u znK}Dlp2Bte{O`Qw%OFsXayB1H$Bm}Y=5#{bpFF_EO}%@R%8!l;f;D7Ay}02cFd!5Z z!NWM;QzJv|LGx4xrTKKwhNoqC9o6;WbU)H*UR*-j-wY{5k#FxNhR1G5to7X2|d7svZ^&$*OJAi+?{S*)ix$6NdQnM_J<&|*s}_X(|c zb)`2itxjbxFeXrn77AJTACYd))X`ouIm#F`YeMqqM`W-4gH%SuBDFyMzUOhSeN_oz zY^ZE&(R^82VP~p>&~Qbk=z~r{Mg>7_x@$Oeb2=qG4&kl(sa)}+hnIMHW9xn}xkhwY z)Boo^3m!o^8W;)@y%7ubZPArI4bIGvo2f4UYA(DkOs4W*rr2v?i3O{xY2R`o;Xx>6 zOB_^q9E5~9vrVrG)&9txyk%pxn2lCCg&e-ZRt-vdNpnh5dEKZ}@Q8x7T0DCkw8u1e zYhB-I1xV^-Q2(S1-rUP9U+FZ0GHZ01@OR+MwD-2S2%7hPIHO1fvpoE6*I;SVl&aMZ z1a$>N>y?#Jrx{~E1s9}O5U#e(!PUxb2t?%XYFp!zHI6hV9wZj@N(#MQ;H!ja&Sf6x z^IMqi?@thGP9#h-6H|x2wL_z~dbTE2X6)a(*A+$_oTrY+e``}UXcQP#_>PIT``Ba` zq04Tcy5DXhcZw^N9ZV$;Kb&Z*P?!r~g*$YH3;7ScLYN9rHWG+H9U570`J?u-y?E6n z#r{=}mx(sjc-EYA0$`>d4(;Am5MMzUB&AmCF@#TDW4DML9!%kOB;4%Uo)$mB1N-UH z7%;BQx&INy4G?<$0lFN+0yB91U&)3ny4O@ZkRz!20ENbOoAVVq6U?mn@Ib$MbK1s0 zF@pW}=d!UCmMc0RKMtGxL{yxrUskKCt(4ms^o^Qb1)>R+bY+GbX~JO^+FLEwG0v?Y zXri=N{wX_}Y%7Yss({FwsY`1j9(dmH-idD6EsY>1r3M+B*^qGkX{}jG9U-i+dFI%p4gBkL)Zc)Kiix4C>p0Y83{SXGJvZ0QbSk>cec^za;`a-$Z2~qM_sf zQE|Zy3YNY61Gu8|U@v-V4HywU@`~mxda20PuGgC8V4jpqg{DP&nEINuk``fN8ZCj? z6sT(*lLmhN!Caj=*K1~o5mCnkp%RpHb8i4AIXixQ@By~VM6V4XCjsyw~bCU`kau}Xv+4uv;XYLahhj%^NfDNCzQGsM3FaNj>8& zRpOzc$ZGbyOD=BCpb-p>c~0otmBCo>UY*enqU;s7nCw87 zdA3bW%_gmzJ}S@r`_k_o;Y#CkPCdp4@YInRN}QKE4=a{BJYC-+EFN?1K6ZByekG@G zQ3c^OG1~-*20;^LsYai1(k1RNG9|}$>?yY+ZSTZUi*{|NE@YVV(+@-$8E7-#X3qef zP>bQzDi{FDL7mT$wV|*t8u&k|An0920D3oiWV7gU`f+Z0mklEAl-IqO)@N9QkzRgh z1M$Y`bcBFT8?dx0%5E+;_R9zYcUrU|0K7Y#lC$X%)zc!jRGN2t84AXLw~~CDH$;R9 zKUc~CSEG%cs^4~7qAPw)d7h<(zu_abg`_=&sq8xtT}e$t3}}bXZ$r8flh*lD;vT7c zQJ#Shn|@+eDgUjtf_0=UYRrG-?lCP0?bw0b!0a{T!VHmqS-toKF3G{B=mx!rLymLA zQoH1?G8aqS$GX(RSn8(MU>W32i`a{njrpEHdu8r*q3ZRsGX07U4VDQN-F30Y*#FspUc7RAzw9cs2nKx^s? zAf-p~-fZ!)3W6W7H@IjAUxb+4Eoni+O%x{^4W_CXUzO~y#0Mcr!UhAKO-N-=uz6ssB?x5x(OK=-q7`LT)^RZZ_ z)4FDBNcq5x|H=iRP#{@*@GgdWSN&neyzofBQdIgR^95n-(Bc+chWasr75|NiRxR#* z=E7cuKM*z!>LCizjY~wG~C(Z@x7!OrdMZ%h-}NkZt4CUH@Y+u z1v2nRadLdhE{9n`|cfpFTGnt9Mr|5A)vLHM|uiUuLout9_%E}wEN zcU#B^wVItT#FUY)6zYL-@2dT=1dbNuIPV6K81v*RxQA4EMGxU2ICK53Ia8e^v>SiB z%fZkV1@2deDKJI3(l|P}r*~LS<60F_=f^EDNY)HiG4&R`mGVV=kEAsQHzTdiSIFqK z?v#j0&B*s8N93H(B7vS$fN(7ys&SMpOUYf%AMpy6Wn< z=BDJZ>Lbap?*`T7v#QA6$=u?F3?Gf6BF@+OjFN@7Z~mnNXEi|*1Lw9&Xr9_#>KTO& zJ}}&UHQo6b`g>y!-u45=7EvkaGrMGd5KuH9s3plWV0n|J$6_m8Ckr03p$lqupL|6e}oKjQKK zL-8o4(L?&${Ku9r8A7v3&s4J7@||1GK)6*oiZ`^`h>o1v@++0~vekuAm8xqclV4Qi zoQk)&Gd>|IdMPuKA?buX?keleepH?cFDxMOezvfke;V)v;owQv?g?f;95LFCSVQq~ zj6bkdcq!AA%^YY()cidX8E_wFH&G<-iKykMmUaEtum@Paqnf4>ZAFQ{6*-=K+w%g9 zMIHGc8V51{@1Zty)O%!&$!Cg*LunO-VMDt`!LOzHXj-drr*!7ZBl96EecgsaBz~f- zSDWgp$QXy#-eOL1O*yVC+Ws)m?tE0fU$;aA^JO=+UX?goi!L+^P=5RO7@sF#9=L=z+s1GyFNP#tVPly4M1D zz}2ETt)p8hhVa+_1dl+{bF%Dm9F<+MG=!Em!&Ptb*R3>=(M)Ak^iU$hVbNO%Nt|hy z-MD3wOh;lzF-c}&tk>SiPFO}LkG-w_a`hQ>vjooZ*;X^i<+f=typSCi%igv7}>j54R;@o zXqeBpJY+n?#{S74hAKyqUEk#?ko000qx2q%;EM66>Oh6d5(0_S?h^^NDXa=YKviGa z*2putIzKv$BVhjzsVJm5XJG6i`(e!CQVy)+Y z@$YD3(m*E2`A)AsX8$iR;N2rmi@`&*)ScQtn=DH}!?PV~j2o~odPd?N1)DRwSLsJ= z2xxW=Ohh}G&U(v*vNW40Kexj3<^jjv1cF16gDbT>HSOH4ZzxlE@-< zzDF0D@}Nb8IK)EJsH^288m8-#niI^ni|;5j5Y*ELJuyl5u{i`2B$*&yk295Vj^&S} z_@42cTk(vaK>Kq7?J|O2gBH|_7ib$J-i{ZV5KD`qio~d#GZRHf)y$*j2Z-kUq&*o= zr{=dpTooF1K_MOJ<&G5dk4hG5@IxwB-i! zd=Rx$6}&%9$4$G#N@%x1B(&|^C~2It^dgAA*Gc6M`~e~}vrj2&dJL_#l~+>q#2EfM z%ay3hK)Z1cW{`ujfAIf<0ut<&SPhDWbOFd}oM0e)QFPfD2oL7hxZ=4`i_})I%~IgW z>zp^+yC4;rt&pX`E2!JziE_q6hE6VwwxWi~AT%yfbgppOdN81@Oi=O@F{6{Tc8Ijv z1@kzN|Jo7IpH~HEu0tNepF;zLe}<-~R4jQ(eUoU10NC_=k!OOU>$T~X>r@YZOU7l; zO;8_6vjBvM$ONyaxJ99CRWS1$ORHS&IB1F4yJUY{6YJl45$S(1`vQurI+aeTAox%r zo{`QeB)Z#o8Nx-YjSQ}JPRut^2(

6W+@BRphNbkBT9ov7&Y)>K(8VRy28@F35#8 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%0AegMtsk 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

6W+@BRphNbkBT9ov7&Y)>K(8VRy28@F35#8 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 Input Settings.\nIf you have a DualShock 4, select DualShock 4.\nWindows: If you have an Xbox controller, or another compatible device, use XInput.\nOlder controllers such as PS2 controllers with an adapter usually work fine with mmjoystick.\nCheck button mappings in the Windows control panel.\n\nLinux: evdev input is WIP.", + "keyboardHandlerBox": "Some games support native keyboard input.\nBasic will work in these cases.", + "mouseHandlerBox": "Some games support native mouse input.\nBasic will work in these cases.", + "cameraBox": "Camera support is not implemented, leave this on null.", + "cameraTypeBox": "Camera support is not implemented, leave this on unknown." + }, + "network": { + "netStatusBox": "Leave as disconnected unless you're debugging.\nRPCS3 has no online support." + }, + "system": { + "sysLangBox": "Some games may fail to boot if the system language is not available in the game itself.\nOther games will switch language automatically to what is selected here.\nIt is recommended leaving this on a language supported by the game.", + "enableHostRoot": "Required for some Homebrew.\nIf unsure, don't use this option." + } +} \ No newline at end of file diff --git a/rpcs3/resources.qrc b/rpcs3/resources.qrc index 4e68f78307..11d8bf7e6e 100644 --- a/rpcs3/resources.qrc +++ b/rpcs3/resources.qrc @@ -21,7 +21,27 @@ Icons/media_gray.png Icons/unknown_blue.png Icons/unknown_gray.png + Icons/controller.png + Icons/insignia.png + Icons/configure.png + Icons/context.png + Icons/controllers.png + Icons/controls.png + Icons/disc.png + Icons/fullscreen.png + Icons/grid.png + Icons/list.png + Icons/refresh.png + Icons/screenshot.png + Icons/separator.png + Icons/sort.png + Icons/fullscreen_invert.png + Json/tooltips.json Icons/other_blue.png Icons/other_gray.png + Icons/pause_blue.png + Icons/play_blue.png + Icons/restart_blue.png + Icons/stop_blue.png diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index 3e31cdcce7..e3f8f54f88 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -347,7 +347,7 @@ - + true true true @@ -372,11 +372,6 @@ true true - - true - true - true - true true @@ -397,11 +392,6 @@ true true - - true - true - true - true true @@ -412,16 +402,6 @@ true true - - true - true - true - - - true - true - true - true true @@ -442,21 +422,11 @@ true true - - true - true - true - true true true - - true - true - true - true true @@ -482,11 +452,6 @@ true true - - true - true - true - true true @@ -502,7 +467,7 @@ true true - + true true true @@ -527,11 +492,6 @@ true true - - true - true - true - true true @@ -552,11 +512,6 @@ true true - - true - true - true - true true @@ -567,16 +522,6 @@ true true - - true - true - true - - - true - true - true - true true @@ -597,21 +542,11 @@ true true - - true - true - true - true true true - - true - true - true - true true @@ -637,11 +572,6 @@ true true - - true - true - true - true true @@ -667,7 +597,7 @@ - + true true true @@ -692,11 +622,6 @@ true true - - true - true - true - true true @@ -717,11 +642,6 @@ true true - - true - true - true - true true @@ -732,16 +652,6 @@ true true - - true - true - true - - - true - true - true - true true @@ -762,21 +672,11 @@ true true - - true - true - true - true true true - - true - true - true - true true @@ -802,11 +702,6 @@ true true - - true - true - true - true true @@ -822,7 +717,7 @@ true true - + true true true @@ -847,11 +742,6 @@ true true - - true - true - true - true true @@ -872,11 +762,6 @@ true true - - true - true - true - true true @@ -887,16 +772,6 @@ true true - - true - true - true - - - true - true - true - true true @@ -917,21 +792,11 @@ true true - - true - true - true - true true true - - true - true - true - true true @@ -957,11 +822,6 @@ true true - - true - true - true - true true @@ -977,41 +837,34 @@ true true + - - - - - - - - @@ -1072,24 +925,6 @@ - - Moc%27ing graphics_tab.h... - Moc%27ing graphics_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - Moc%27ing graphics_tab.h... - Moc%27ing graphics_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing gs_frame.h... Moc%27ing gs_frame.h... @@ -1108,24 +943,6 @@ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - - Moc%27ing input_tab.h... - Moc%27ing input_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - Moc%27ing input_tab.h... - Moc%27ing input_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing log_frame.h... Moc%27ing log_frame.h... @@ -1162,42 +979,6 @@ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - - Moc%27ing misc_tab.h... - Moc%27ing misc_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - Moc%27ing misc_tab.h... - Moc%27ing misc_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - - - Moc%27ing networking_tab.h... - Moc%27ing networking_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - Moc%27ing networking_tab.h... - Moc%27ing networking_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing pad_settings_dialog.h... Moc%27ing pad_settings_dialog.h... @@ -1234,42 +1015,6 @@ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - - Moc%27ing system_tab.h... - Moc%27ing system_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - Moc%27ing system_tab.h... - Moc%27ing system_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - - - Moc%27ing audio_tab.h... - Moc%27ing audio_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - Moc%27ing audio_tab.h... - Moc%27ing audio_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing auto_pause_settings_dialog.h... Moc%27ing auto_pause_settings_dialog.h... @@ -1288,24 +1033,6 @@ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - - Moc%27ing core_tab.h... - Moc%27ing core_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - Moc%27ing core_tab.h... - Moc%27ing core_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing debugger_frame.h... Moc%27ing debugger_frame.h... @@ -1397,24 +1124,6 @@ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - - Moc%27ing gui_tab.h... - Moc%27ing gui_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - Moc%27ing gui_tab.h... - Moc%27ing gui_tab.h... - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing kernel_explorer.h... Moc%27ing kernel_explorer.h... @@ -1469,6 +1178,29 @@ .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\." + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing about_dialog.h... + .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing about_dialog.h... + .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing about_dialog.h... + .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing about_dialog.h... + .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" + @@ -1642,6 +1374,106 @@ + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\QTGeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\QTGeneratedFiles\ui_%(Filename).h" "%(FullPath)" + + diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index 12fb891d7a..362a81bf06 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -55,6 +55,11 @@ qrc;* false + + {99349809-55BA-4b9d-BF79-8FDBB0286EB3} + ui + true + @@ -63,21 +68,6 @@ rpcs3 - - Generated Files\Release - LLVM - - - Generated Files\Debug - - - Generated Files\Release - - - Generated Files\Debug - LLVM - - - Gui - Gui @@ -108,21 +98,6 @@ Gui - - Generated Files\Release - LLVM - - - Generated Files\Debug - - - Generated Files\Release - - - Generated Files\Debug - LLVM - - - Gui - Generated Files\Release - LLVM @@ -171,21 +146,6 @@ Gui - - Generated Files\Release - LLVM - - - Generated Files\Debug - - - Generated Files\Release - - - Generated Files\Debug - LLVM - - - Gui - Generated Files\Release - LLVM @@ -216,36 +176,6 @@ Gui - - Generated Files\Release - LLVM - - - Generated Files\Debug - - - Generated Files\Release - - - Generated Files\Debug - LLVM - - - Gui - - - Generated Files\Release - LLVM - - - Generated Files\Debug - - - Generated Files\Release - - - Generated Files\Debug - LLVM - - - Gui - Generated Files\Release - LLVM @@ -306,36 +236,6 @@ Gui - - Generated Files\Release - LLVM - - - Generated Files\Debug - - - Generated Files\Release - - - Generated Files\Debug - LLVM - - - Gui - - - Generated Files\Release - LLVM - - - Generated Files\Debug - - - Generated Files\Release - - - Generated Files\Debug - LLVM - - - Gui - Generated Files\Release - LLVM @@ -399,21 +299,6 @@ Gui - - Gui - - - Generated Files\Release - LLVM - - - Generated Files\Debug - - - Generated Files\Release - - - Generated Files\Debug - LLVM - Io\Basic @@ -561,6 +446,21 @@ Generated Files\Debug - LLVM + + Gui + + + Generated Files\Release - LLVM + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug - LLVM + @@ -599,6 +499,21 @@ Gui + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + @@ -607,18 +522,12 @@ Generated Files - - Gui - Gui Gui - - Gui - Gui @@ -628,21 +537,12 @@ Gui - - Gui - Gui Gui - - Gui - - - Gui - Gui @@ -655,12 +555,6 @@ Gui - - Gui - - - Gui - Gui @@ -673,9 +567,6 @@ Gui - - Gui - Io\Basic @@ -706,6 +597,24 @@ Gui + + Form Files + + + Form Files + + + Form Files + + + Form Files + + + Form Files + + + Gui + diff --git a/rpcs3/rpcs3qt/about_dialog.cpp b/rpcs3/rpcs3qt/about_dialog.cpp new file mode 100644 index 0000000000..cda15ddc3a --- /dev/null +++ b/rpcs3/rpcs3qt/about_dialog.cpp @@ -0,0 +1,25 @@ +#include "about_dialog.h" +#include "ui_about_dialog.h" + +#include "rpcs3_version.h" + +#include +#include + +inline QString qstr(const std::string& _in) { return QString::fromUtf8(_in.data(), _in.size()); } + +about_dialog::about_dialog(QWidget* parent) : QDialog(parent), ui(new Ui::about_dialog) +{ + ui->setupUi(this); + + ui->close->setDefault(true); + + ui->version->setText(tr("RPCS3 Version: %1").arg(qstr(rpcs3::version.to_string()))); + + // Events + connect(ui->gitHub, &QAbstractButton::clicked, [] { QDesktopServices::openUrl(QUrl("https://www.github.com/RPCS3")); }); + connect(ui->website, &QAbstractButton::clicked, [] { QDesktopServices::openUrl(QUrl("https://www.rpcs3.net")); }); + connect(ui->forum, &QAbstractButton::clicked, [] { QDesktopServices::openUrl(QUrl("http://www.emunewz.net/forum/forumdisplay.php?fid=172")); }); + connect(ui->patreon, &QAbstractButton::clicked, [] { QDesktopServices::openUrl(QUrl("https://www.patreon.com/Nekotekina")); }); + connect(ui->close, &QAbstractButton::clicked, this, &QWidget::close); +} diff --git a/rpcs3/rpcs3qt/about_dialog.h b/rpcs3/rpcs3qt/about_dialog.h new file mode 100644 index 0000000000..82509e51f4 --- /dev/null +++ b/rpcs3/rpcs3qt/about_dialog.h @@ -0,0 +1,18 @@ +#pragma once + +#include + +namespace Ui { + class about_dialog; +} + +class about_dialog : public QDialog +{ + Q_OBJECT + +public: + explicit about_dialog(QWidget* parent = nullptr); + +private: + Ui::about_dialog *ui; +}; diff --git a/rpcs3/rpcs3qt/about_dialog.ui b/rpcs3/rpcs3qt/about_dialog.ui new file mode 100644 index 0000000000..7363ccd630 --- /dev/null +++ b/rpcs3/rpcs3qt/about_dialog.ui @@ -0,0 +1,236 @@ + + + about_dialog + + + + 0 + 0 + 537 + 572 + + + + + 537 + 572 + + + + + 537 + 572 + + + + About RPCS3 + + + + :/rpcs3.ico:/rpcs3.ico + + + + + 10 + -10 + 140 + 140 + + + + + + + :/Icons/insignia.png + + + true + + + Qt::AlignCenter + + + + + + 20 + 150 + 501 + 20 + + + + border-top:1px solid rgba(0,0,0,.2); + + + + + + + + + 160 + 43 + 371 + 71 + + + + + true + + + + <html><head/><body><p>RPCS3 is an open-source Sony PlayStation 3 emulator and debugger written in C++ for Windows and Linux funded with <a href="https://www.patreon.com/Nekotekina"><span style=" text-decoration: underline; color:#0000ff;">Patreon</span></a>. Our lead developers and contributors are always working hard to ensure this project can be the best that it can be. There are still plenty of implementations to be made and optimizations to be done.</p></body></html> + + + Qt::RichText + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + true + + + + + + 160 + 12 + 341 + 31 + + + + + 14 + 50 + false + + + + RPCS3 PlayStation 3 Emulator + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + 160 + 120 + 371 + 16 + + + + + true + + + + + + + Qt::RichText + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + 20 + 530 + 501 + 25 + + + + + + + GitHub + + + + + + + Website + + + + + + + Forum + + + + + + + Patreon + + + + + + + Close + + + + + + + + + 20 + 170 + 501 + 341 + + + + + + + <p><b>Developers:</b><br><br>¬DH<br>¬AlexAltea<br>¬Hykem<br>Oil<br>Nekotekina<br>Bigpet<br>¬gopalsr83<br>¬tambry<br>vlj<br>kd-11<br>jarveson<br>raven02<br>AniLeo<br>cornytrace<br>ssshadow<br>Numan</p> + + + + + + + <p><b>Contributors:</b><br><br>BlackDaemon<br>elisha464<br>Aishou<br>krofna<br>xsacha<br>danilaml<br>unknownbrackets<br>Zangetsu38<br>lioncash<br>achurch<br>darkf<br>Syphurith<br>Blaypeg<br>Survanium90<br>georgemoralis<br>ikki84<br>hcorion<br>Megamouse<br>flash-fire<br>DAGINATSUKO</p> + + + + + + + <p><b>Supporters:</b><br><br>Howard Garrison<br>EXPotemkin<br>Marko V.<br>danhp<br>Jake (5315825)<br>Ian Reid<br>Tad Sherlock<br>Tyler Friesen<br>Folzar<br>Payton Williams<br>RedPill Australia<br>yanghong<br>Mohammed El-Serougi<br>Дима ~Ximer13~ Кулин<br>James Reed<br>BaroqueSonata<br>Bonzay0<br>Henrijs Kons<br>Davide Balbi<br>Lena Stöffler</p> + + + + + + + + + + + + diff --git a/rpcs3/rpcs3qt/audio_tab.cpp b/rpcs3/rpcs3qt/audio_tab.cpp deleted file mode 100644 index ae41ad4bb0..0000000000 --- a/rpcs3/rpcs3qt/audio_tab.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include -#include -#include -#include -#include - -#include "audio_tab.h" - -audio_tab::audio_tab(std::shared_ptr xemu_settings, QWidget *parent) : QWidget(parent) -{ - // Audio Out - QGroupBox *audioOut = new QGroupBox(tr("Audio Out")); - - QComboBox *audioOutBox = xemu_settings->CreateEnhancedComboBox(emu_settings::AudioRenderer, this); - - QVBoxLayout *audioOutVbox = new QVBoxLayout; - audioOutVbox->addWidget(audioOutBox); - audioOut->setLayout(audioOutVbox); - - // Checkboxes - QCheckBox *audioDump = xemu_settings->CreateEnhancedCheckBox(emu_settings::DumpToFile, this); - QCheckBox *conv = xemu_settings->CreateEnhancedCheckBox(emu_settings::ConvertTo16Bit, this); - QCheckBox *downmix = xemu_settings->CreateEnhancedCheckBox(emu_settings::DownmixStereo, this); - - // Main layout - QVBoxLayout *vbox = new QVBoxLayout; - vbox->addWidget(audioOut); - vbox->addWidget(audioDump); - vbox->addWidget(conv); - vbox->addWidget(downmix); - vbox->addStretch(); - - QHBoxLayout *hbox = new QHBoxLayout; - hbox->addLayout(vbox); - hbox->addStretch(); - setLayout(hbox); -} diff --git a/rpcs3/rpcs3qt/audio_tab.h b/rpcs3/rpcs3qt/audio_tab.h deleted file mode 100644 index d3755769f0..0000000000 --- a/rpcs3/rpcs3qt/audio_tab.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include "emu_settings.h" - -#include - -#include - -class audio_tab : public QWidget -{ - Q_OBJECT - -public: - explicit audio_tab(std::shared_ptr xemu_settings, QWidget *parent = 0); -}; diff --git a/rpcs3/rpcs3qt/core_tab.cpp b/rpcs3/rpcs3qt/core_tab.cpp deleted file mode 100644 index d627bba14e..0000000000 --- a/rpcs3/rpcs3qt/core_tab.cpp +++ /dev/null @@ -1,266 +0,0 @@ -#include "core_tab.h" - -#include "stdafx.h" -#include "Emu/System.h" -#include "Crypto/unself.h" - -#include "rpcs3qt/emu_settings.h" - -#include -#include -#include -#include -#include -#include - -#include - -inline std::string sstr(const QString& _in) { return _in.toUtf8().toStdString(); } - -core_tab::core_tab(std::shared_ptr settings, QWidget *parent) : QWidget(parent), xemu_settings(settings) -{ - // PPU Decoder - QGroupBox *ppuDecoder = new QGroupBox(tr("PPU Decoder")); - QVBoxLayout *ppuVbox = new QVBoxLayout; - - { // PPU Stuff : I could make a lambda/special getter in emu_settings, but it's only used three times like this, and two times they're done slighly differently (one setting is disabled). - std::string selectedPPU = settings->GetSetting(emu_settings::PPUDecoder); - for (QString settingType : settings->GetSettingOptions(emu_settings::PPUDecoder)) - { - std::string curr = sstr(settingType); - QRadioButton* butt = new QRadioButton(tr(curr.c_str()), this); - butt->setCheckable(true); - ppuVbox->addWidget(butt); - if (curr == selectedPPU) - { - butt->setChecked(true); - } -#ifndef LLVM_AVAILABLE - if (curr == "Recompiler (LLVM)") - { - butt->setEnabled(false); - butt->setToolTip(tr("This version of RPCS3 wasn't compiled with LLVM support.")); - } -#endif - connect(butt, &QAbstractButton::pressed, [=]() {settings->SetSetting(emu_settings::PPUDecoder, curr); }); - } - } - ppuDecoder->setLayout(ppuVbox); - - // SPU Decoder - QGroupBox *spuDecoder = new QGroupBox(tr("SPU Decoder")); - QVBoxLayout *spuVbox = new QVBoxLayout; - - { // Spu stuff - std::string selectedSPU = settings->GetSetting(emu_settings::SPUDecoder); - for (QString settingType : settings->GetSettingOptions(emu_settings::SPUDecoder)) - { - std::string curr = sstr(settingType); - QRadioButton* butt = new QRadioButton(tr(curr.c_str()), this); - if (curr == "Recompiler (LLVM)") - { - butt->setEnabled(false); - } - butt->setCheckable(true); - spuVbox->addWidget(butt); - if (curr == selectedSPU) - { - butt->setChecked(true); - } - connect(butt, &QAbstractButton::pressed, [=]() {settings->SetSetting(emu_settings::SPUDecoder, curr); }); - } - } - spuDecoder->setLayout(spuVbox); - - // Checkboxes - QCheckBox *hookStFunc = settings->CreateEnhancedCheckBox(emu_settings::HookStaticFuncs, this); - QCheckBox *bindSPUThreads = settings->CreateEnhancedCheckBox(emu_settings::BindSPUThreads, this); - QCheckBox *lowerSPUThrPrio = settings->CreateEnhancedCheckBox(emu_settings::LowerSPUThreadPrio, this); - - // Load libraries - QGroupBox *lle = new QGroupBox(tr("Load libraries")); - QButtonGroup *libModeBG = new QButtonGroup(this); - QVBoxLayout *lleVbox = new QVBoxLayout; - - - {// Handle lib loading options - std::string selectedLib = settings->GetSetting(emu_settings::LibLoadOptions); - for (QString settingType : settings->GetSettingOptions(emu_settings::LibLoadOptions)) - { - std::string curr = sstr(settingType); - QRadioButton* butt = new QRadioButton(tr(curr.c_str()), lle); - butt->setCheckable(true); - libModeBG->addButton(butt); - lleVbox->addWidget(butt); - if (curr == selectedLib) - { - butt->setChecked(true); - } - connect(butt, &QAbstractButton::pressed, [=]() {settings->SetSetting(emu_settings::LibLoadOptions, curr); }); - } - } - lleList = new QListWidget; - lleList->setSelectionMode(QAbstractItemView::MultiSelection); - searchBox = new QLineEdit; - - // Sort string vector alphabetically - static const auto sort_string_vector = [](std::vector& vec) - { - std::sort(vec.begin(), vec.end(), [](const std::string &str1, const std::string &str2) { return str1 < str2; }); - }; - - std::vector loadedLibs = xemu_settings->GetLoadedLibraries(); - - sort_string_vector(loadedLibs); - - for (auto lib : loadedLibs) - { - QListWidgetItem* item = new QListWidgetItem(qstr(lib), lleList); - item->setFlags(item->flags() | Qt::ItemIsUserCheckable); // set checkable flag - item->setCheckState(Qt::Checked); // AND initialize check state - lleList->addItem(item); - } - const std::string& lle_dir = Emu.GetLibDir(); // TODO - - std::unordered_set set(loadedLibs.begin(), loadedLibs.end()); - std::vector lle_module_list_unselected; - - for (const auto& prxf : fs::dir(lle_dir)) - { - // List found unselected modules - if (prxf.is_directory || (prxf.name.substr(std::max(size_t(3), prxf.name.length()) - 4)) != "sprx") - continue; - if (verify_npdrm_self_headers(fs::file(lle_dir + prxf.name)) && !set.count(prxf.name)) - { - lle_module_list_unselected.push_back(prxf.name); - } - - } - - sort_string_vector(lle_module_list_unselected); - - for (auto lib : lle_module_list_unselected) - { - QListWidgetItem* item = new QListWidgetItem(qstr(lib), lleList); - item->setFlags(item->flags() | Qt::ItemIsUserCheckable); // set checkable flag - item->setCheckState(Qt::Unchecked); // AND initialize check state - lleList->addItem(item); - } - - - // lleVbox - lleVbox->addSpacing(5); - lleVbox->addWidget(lleList); - lleVbox->addWidget(searchBox); - lle->setLayout(lleVbox); - - // Main layout - QVBoxLayout *vbox = new QVBoxLayout; - vbox->addWidget(ppuDecoder); - vbox->addWidget(spuDecoder); - vbox->addWidget(hookStFunc); - vbox->addWidget(bindSPUThreads); - vbox->addWidget(lowerSPUThrPrio); - vbox->addStretch(); - - QHBoxLayout *hbox = new QHBoxLayout; - hbox->addLayout(vbox); - hbox->addWidget(lle); - setLayout(hbox); - - auto l_OnLibButtonClicked = [=](int ind) - { - if (ind == -3 || ind == -4) - { - shouldSaveLibs = true; - searchBox->setEnabled(true); - lleList->setEnabled(true); - } - else - { - shouldSaveLibs = false; - searchBox->setEnabled(false); - lleList->setEnabled(false); - } - }; - - auto l_OnSearchBoxTextChanged = [=](QString text) - { - QString searchTerm = text.toLower(); - QList checked_Libs; - QList unchecked_Libs; - - // create sublists. we need clones to preserve checkstates - for (int i = 0; i < lleList->count(); ++i) - { - if (lleList->item(i)->checkState() == Qt::Checked) - { - checked_Libs.append(lleList->item(i)->clone()); - } - else - { - unchecked_Libs.append(lleList->item(i)->clone()); - } - } - - // sort sublists - auto qLessThan = [](QListWidgetItem *i1, QListWidgetItem *i2) { return i1->text() < i2->text(); }; - qSort(checked_Libs.begin(), checked_Libs.end(), qLessThan); - qSort(unchecked_Libs.begin(), unchecked_Libs.end(), qLessThan); - - // refill library list - lleList->clear(); - - for (auto lib : checked_Libs) - { - lleList->addItem(lib); - } - for (auto lib : unchecked_Libs) - { - lleList->addItem(lib); - } - - // only show items filtered for search text - for (int i = 0; i < lleList->count(); i++) - { - if (lleList->item(i)->text().contains(searchTerm)) - { - lleList->setRowHidden(i, false); - } - else - { - lleList->setRowHidden(i, true); - } - } - }; - - // Events - connect(libModeBG, static_cast(&QButtonGroup::buttonClicked), l_OnLibButtonClicked); - connect(searchBox, &QLineEdit::textChanged, l_OnSearchBoxTextChanged); - - int buttid = libModeBG->checkedId(); - if (buttid != -1) - { - l_OnLibButtonClicked(buttid); - } -} - -void core_tab::SaveSelectedLibraries() -{ - if (shouldSaveLibs) - { - std::set selectedlle; - for (int i =0; icount(); ++i) - { - auto item = lleList->item(i); - if (item->checkState() != Qt::CheckState::Unchecked) - { - std::string lib = sstr(item->text()); - selectedlle.emplace(lib); - } - } - - std::vector selected_ls = std::vector(selectedlle.begin(), selectedlle.end()); - xemu_settings->SaveSelectedLibraries(selected_ls); - } -} diff --git a/rpcs3/rpcs3qt/core_tab.h b/rpcs3/rpcs3qt/core_tab.h deleted file mode 100644 index 28c5837fb1..0000000000 --- a/rpcs3/rpcs3qt/core_tab.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -#include "emu_settings.h" - -#include -#include -#include - -#include - -class core_tab : public QWidget -{ - Q_OBJECT - -public: - explicit core_tab(std::shared_ptr xSettings, QWidget *parent = 0); -public Q_SLOTS: - void SaveSelectedLibraries(); - -private: - bool shouldSaveLibs = false; - QListWidget *lleList; - QLineEdit *searchBox; - - std::shared_ptr xemu_settings; -}; diff --git a/rpcs3/rpcs3qt/emu_settings.cpp b/rpcs3/rpcs3qt/emu_settings.cpp index d98c45ce60..33458b9eaf 100644 --- a/rpcs3/rpcs3qt/emu_settings.cpp +++ b/rpcs3/rpcs3qt/emu_settings.cpp @@ -207,53 +207,47 @@ void emu_settings::SaveSettings() config.write(out.c_str(), out.size()); } -QComboBox* emu_settings::CreateEnhancedComboBox(SettingsType type, QWidget* parent) +void emu_settings::EnhanceComboBox(QComboBox* combobox, SettingsType type) { - QComboBox* box = new QComboBox(parent); - for (QString setting : GetSettingOptions(type)) { - box->addItem(tr(setting.toStdString().c_str()), QVariant(setting)); + combobox->addItem(tr(setting.toStdString().c_str()), QVariant(setting)); } QString selected = qstr(GetSetting(type)); - int index = box->findData(selected); + int index = combobox->findData(selected); if (index == -1) { LOG_WARNING(GENERAL, "Current setting not found while creating combobox"); } else { - box->setCurrentIndex(index); + combobox->setCurrentIndex(index); } - connect(box, static_cast(&QComboBox::currentIndexChanged), [=](int index) { - SetSetting(type, sstr(box->itemData(index))); + connect(combobox, static_cast(&QComboBox::currentIndexChanged), [=](int index) { + SetSetting(type, sstr(combobox->itemData(index))); }); - - return box; } -QCheckBox* emu_settings::CreateEnhancedCheckBox(SettingsType type, QWidget* parent) +void emu_settings::EnhanceCheckBox(QCheckBox* checkbox, SettingsType type) { cfg_location loc = SettingsLoc[type]; - std::string name = loc[loc.size()-1]; - QCheckBox* settingsButton = new QCheckBox(tr(name.c_str()), parent); + std::string name = loc[loc.size() - 1]; std::string currSet = GetSetting(type); if (currSet == "true") { - settingsButton->setChecked(true); + checkbox->setChecked(true); } else if (currSet != "false") { LOG_WARNING(GENERAL, "Passed in an invalid setting for creating enhanced checkbox"); } - connect(settingsButton, &QCheckBox::stateChanged, [=](int val) { + connect(checkbox, &QCheckBox::stateChanged, [=](int val) { std::string str = val != 0 ? "true" : "false"; SetSetting(type, str); }); - return settingsButton; } std::vector emu_settings::GetLoadedLibraries() diff --git a/rpcs3/rpcs3qt/emu_settings.h b/rpcs3/rpcs3qt/emu_settings.h index 24d446a337..50d178a08d 100644 --- a/rpcs3/rpcs3qt/emu_settings.h +++ b/rpcs3/rpcs3qt/emu_settings.h @@ -107,11 +107,11 @@ public: emu_settings(const std::string& path); ~emu_settings(); - /** Returns a combo box of that setting type that is bound to the parent. */ - QComboBox* CreateEnhancedComboBox(SettingsType type, QWidget* parent = nullptr); + /** Connects a combo box with the target settings type*/ + void EnhanceComboBox(QComboBox* combobox, SettingsType type); - /** Returns a check button that is connected to the target settings type, bound to the life of parent*/ - QCheckBox* CreateEnhancedCheckBox(SettingsType target, QWidget* parent = nullptr); + /** Connects a check box with the target settings type*/ + void EnhanceCheckBox(QCheckBox* checkbox, SettingsType type); std::vector GetLoadedLibraries(); void SaveSelectedLibraries(const std::vector& libs); diff --git a/rpcs3/rpcs3qt/game_list_frame.cpp b/rpcs3/rpcs3qt/game_list_frame.cpp index 47a61836d8..c484ab61c4 100644 --- a/rpcs3/rpcs3qt/game_list_frame.cpp +++ b/rpcs3/rpcs3qt/game_list_frame.cpp @@ -25,7 +25,7 @@ static const std::string m_class_name = "GameViewer"; inline std::string sstr(const QString& _in) { return _in.toUtf8().toStdString(); } -game_list_frame::game_list_frame(std::shared_ptr settings, Render_Creator r_Creator, QWidget *parent) +game_list_frame::game_list_frame(std::shared_ptr settings, const Render_Creator& r_Creator, QWidget *parent) : QDockWidget(tr("Game List"), parent), xgui_settings(settings), m_Render_Creator(r_Creator) { m_isListLayout = xgui_settings->GetValue(GUI::gl_listMode).toBool(); @@ -118,7 +118,8 @@ game_list_frame::game_list_frame(std::shared_ptr settings, Render_ // Search Bar m_Search_Bar = new QLineEdit(m_Tool_Bar); m_Search_Bar->setPlaceholderText(tr("Search games ...")); - connect(m_Search_Bar, &QLineEdit::textChanged, [this]() { + connect(m_Search_Bar, &QLineEdit::textChanged, [this](const QString& text) { + m_searchText = text; Refresh(); }); @@ -393,7 +394,7 @@ void game_list_frame::Refresh(bool fromDrive) { game.icon_path = dir + "/ICON0.PNG"; } - + game.category = sstr(cat->second); bootable = true; } @@ -699,15 +700,18 @@ void game_list_frame::RemoveCustomConfiguration(int row) } } -void game_list_frame::ResizeIcons(const QSize& size, const int& idx) +void game_list_frame::ResizeIcons(const QString& sizeStr, const QSize& size, const int& index) { - if (m_Slider_Size->value() != idx) m_Slider_Size->setSliderPosition(idx); - m_Icon_Size_Str = GUI::gl_icon_size.at(idx).first; + m_Icon_Size_Str = sizeStr; + m_Icon_Size = size; + + if (m_Slider_Size->value() != index) + { + m_Slider_Size->setSliderPosition(index); + } xgui_settings->SetValue(GUI::gl_iconSize, m_Icon_Size_Str); - m_Icon_Size = size; - for (size_t i = 0; i < m_game_data.size(); i++) { QImage scaled = QImage(m_Icon_Size, QImage::Format_ARGB32); @@ -743,12 +747,22 @@ void game_list_frame::SetToolBarVisible(const bool& showToolBar) m_Tool_Bar->setVisible(showToolBar); xgui_settings->SetValue(GUI::gl_toolBarVisible, showToolBar); } +bool game_list_frame::GetToolBarVisible() +{ + return m_showToolBar; +} void game_list_frame::SetCategoryActIcon(const int& id, const bool& active) { m_categoryButtons.at(id).action->setIcon(active ? m_categoryButtons.at(id).colored : m_categoryButtons.at(id).gray); } +void game_list_frame::SetSearchText(const QString& text) +{ + m_searchText = text; + Refresh(); +} + void game_list_frame::closeEvent(QCloseEvent *event) { QDockWidget::closeEvent(event); @@ -910,9 +924,9 @@ void game_list_frame::PopulateGameGrid(uint maxCols, const QSize& image_size) */ bool game_list_frame::SearchMatchesApp(const std::string& name, const std::string& serial) { - if (m_Search_Bar->text() != "") + if (!m_searchText.isEmpty()) { - QString searchText = m_Search_Bar->text().toLower(); + QString searchText = m_searchText.toLower(); return qstr(name).toLower().contains(searchText) || qstr(serial).toLower().contains(searchText); } return true; diff --git a/rpcs3/rpcs3qt/game_list_frame.h b/rpcs3/rpcs3qt/game_list_frame.h index d39b9fae02..2fb0b27b7f 100644 --- a/rpcs3/rpcs3qt/game_list_frame.h +++ b/rpcs3/rpcs3qt/game_list_frame.h @@ -169,23 +169,32 @@ class game_list_frame : public QDockWidget { Q_OBJECT public: - explicit game_list_frame(std::shared_ptr settings, Render_Creator r_Creator, QWidget *parent = nullptr); + explicit game_list_frame(std::shared_ptr settings, const Render_Creator& r_Creator, QWidget *parent = nullptr); ~game_list_frame(); + + /** Refresh the gamelist with/without loading game data from files. Public so that main frame can refresh after vfs or install */ void Refresh(const bool fromDrive = false); + + /** Adds/removes categories that should be shown on gamelist. Public so that main frame menu actions can apply them */ void ToggleCategoryFilter(const QStringList& categories, bool show); + /** Returns the tool bar visibility. Public so that main frame can check the menu action accordingly */ + bool GetToolBarVisible(); + /** Loads from settings. Public so that main frame can easily reset these settings if needed. */ void LoadSettings(); /** Saves settings. Public so that main frame can save this when a caching of column widths is needed for settings backup */ void SaveSettings(); -public Q_SLOTS: /** Resize Gamelist Icons to size */ - void ResizeIcons(const QSize& size, const int& idx); + void ResizeIcons(const QString& sizeStr, const QSize& size, const int& index); + +public Q_SLOTS: void SetListMode(const bool& isList); void SetToolBarVisible(const bool& showToolBar); void SetCategoryActIcon(const int& id, const bool& active); + void SetSearchText(const QString& text); private Q_SLOTS: void Boot(int row); @@ -272,6 +281,7 @@ private: qreal m_Margin_Factor; qreal m_Text_Factor; QStringList m_categoryFilters; + QString m_searchText; Render_Creator m_Render_Creator; uint m_games_per_row = 0; diff --git a/rpcs3/rpcs3qt/graphics_tab.cpp b/rpcs3/rpcs3qt/graphics_tab.cpp deleted file mode 100644 index efd36063ce..0000000000 --- a/rpcs3/rpcs3qt/graphics_tab.cpp +++ /dev/null @@ -1,314 +0,0 @@ -#include -#include -#include -#include -#include - -#include "graphics_tab.h" - -inline std::string sstr(const QString& _in) { return _in.toUtf8().toStdString(); } - -graphics_tab::graphics_tab(std::shared_ptr xSettings, Render_Creator r_Creator, QWidget *parent) : QWidget(parent), xemu_settings(xSettings) -{ - // Render - QGroupBox *render = new QGroupBox(tr("Render")); - - QComboBox *renderBox = xemu_settings->CreateEnhancedComboBox(emu_settings::Renderer, this); - - QVBoxLayout *renderVbox = new QVBoxLayout(); - renderVbox->addWidget(renderBox); - render->setLayout(renderVbox); - - // Resolution - QGroupBox *res = new QGroupBox(tr("Resolution")); - - QComboBox* resBox = xemu_settings->CreateEnhancedComboBox(emu_settings::Resolution, this); - - QVBoxLayout *resVbox = new QVBoxLayout(); - resVbox->addWidget(resBox); - res->setLayout(resVbox); - - // Graphics Adapter - QStringList D3D12Adapters = r_Creator.D3D12Adapters; - QStringList vulkanAdapters = r_Creator.vulkanAdapters; - bool supportsD3D12 = r_Creator.supportsD3D12; - bool supportsVulkan = r_Creator.supportsVulkan; - QString r_D3D12 = r_Creator.render_D3D12; - QString r_Vulkan = r_Creator.render_Vulkan; - QString r_OpenGL = r_Creator.render_OpenGL; - QString old_D3D12; - QString old_Vulkan; - QGroupBox *graphicsAdapter; - QComboBox *graphicsAdapterBox; - - if (supportsD3D12) - { - old_D3D12 = qstr(xemu_settings->GetSetting(emu_settings::D3D12Adapter)); - } - else - { - // Remove D3D12 option from render combobox - for (int i = 0; i < renderBox->count(); i++) - { - if (renderBox->itemText(i) == r_D3D12) - { - renderBox->removeItem(i); - break; - } - } - } - - if (supportsVulkan) - { - old_Vulkan = qstr(xemu_settings->GetSetting(emu_settings::VulkanAdapter)); - } - else - { - // Remove Vulkan option from render combobox - for (int i = 0; i < renderBox->count(); i++) - { - if (renderBox->itemText(i) == r_Vulkan) - { - renderBox->removeItem(i); - break; - } - } - } - - if (supportsD3D12 || supportsVulkan) - { - graphicsAdapter = new QGroupBox(tr("Select Graphics Device")); - graphicsAdapterBox = new QComboBox(this); - QVBoxLayout *graphicsAdapterVbox = new QVBoxLayout(); - graphicsAdapterVbox->addWidget(graphicsAdapterBox); - graphicsAdapter->setLayout(graphicsAdapterVbox); - QString oldRender = renderBox->itemText(renderBox->currentIndex()); - - auto switchGraphicsAdapter = [=](int index) - { - QString render = renderBox->itemText(index); - m_isD3D12 = render == r_D3D12; - m_isVulkan = render == r_Vulkan; - graphicsAdapter->setEnabled(m_isD3D12 || m_isVulkan); - - // D3D Adapter - if (m_isD3D12) - { - // Reset other adapters to old config - if (supportsVulkan) - { - xemu_settings->SetSetting(emu_settings::VulkanAdapter, sstr(old_Vulkan)); - } - // Fill combobox - graphicsAdapterBox->clear(); - for (auto adapter : D3D12Adapters) - { - graphicsAdapterBox->addItem(adapter); - } - // Reset Adapter to old config - int idx = graphicsAdapterBox->findText(old_D3D12); - if (idx == -1) - { - idx = 0; - if (old_D3D12.isEmpty()) - { - LOG_WARNING(RSX, "%s adapter config empty: setting to default!", sstr(r_D3D12)); - } - else - { - LOG_WARNING(RSX, "Last used %s adapter not found: setting to default!", sstr(r_D3D12)); - } - } - graphicsAdapterBox->setCurrentIndex(idx); - xemu_settings->SetSetting(emu_settings::D3D12Adapter, sstr(graphicsAdapterBox->currentText())); - } - - // Vulkan Adapter - else if (m_isVulkan) - { - // Reset other adapters to old config - if (supportsD3D12) - { - xemu_settings->SetSetting(emu_settings::D3D12Adapter, sstr(old_D3D12)); - } - // Fill combobox - graphicsAdapterBox->clear(); - for (auto adapter : vulkanAdapters) - { - graphicsAdapterBox->addItem(adapter); - } - // Reset Adapter to old config - int idx = graphicsAdapterBox->findText(old_Vulkan); - if (idx == -1) - { - idx = 0; - if (old_Vulkan.isEmpty()) - { - LOG_WARNING(RSX, "%s adapter config empty: setting to default!", sstr(r_Vulkan)); - } - else - { - LOG_WARNING(RSX, "Last used %s adapter not found: setting to default!", sstr(r_Vulkan)); - } - } - graphicsAdapterBox->setCurrentIndex(idx); - xemu_settings->SetSetting(emu_settings::VulkanAdapter, sstr(graphicsAdapterBox->currentText())); - } - - // Other Adapter - else - { - // Reset Adapters to old config - if (supportsD3D12) - { - xemu_settings->SetSetting(emu_settings::D3D12Adapter, sstr(old_D3D12)); - } - if (supportsVulkan) - { - xemu_settings->SetSetting(emu_settings::VulkanAdapter, sstr(old_Vulkan)); - } - - // Fill combobox with placeholder - graphicsAdapterBox->clear(); - graphicsAdapterBox->addItem(tr("Not needed for %1 renderer").arg(render)); - } - }; - - auto setAdapter = [=](QString text) - { - if (text.isEmpty()) return; - - // don't set adapter if signal was created by switching render - QString newRender = renderBox->itemText(renderBox->currentIndex()); - if (m_oldRender == newRender) - { - if (m_isD3D12 && D3D12Adapters.contains(text)) - { - xemu_settings->SetSetting(emu_settings::D3D12Adapter, sstr(text)); - } - else if (m_isVulkan && vulkanAdapters.contains(text)) - { - xemu_settings->SetSetting(emu_settings::VulkanAdapter, sstr(text)); - } - } - else - { - m_oldRender = newRender; - } - }; - - // Init - setAdapter(graphicsAdapterBox->currentText()); - switchGraphicsAdapter(renderBox->currentIndex()); - - // Events - connect(graphicsAdapterBox, &QComboBox::currentTextChanged, setAdapter); - connect(renderBox, static_cast(&QComboBox::currentIndexChanged), switchGraphicsAdapter); - } - - // Aspect ratio - QGroupBox *aspect = new QGroupBox(tr("Aspect ratio")); - - QComboBox *aspectBox = xemu_settings->CreateEnhancedComboBox(emu_settings::AspectRatio, this); - - QVBoxLayout *aspectVbox = new QVBoxLayout(); - aspectVbox->addWidget(aspectBox); - aspect->setLayout(aspectVbox); - - // Frame limit - QGroupBox *frameLimit = new QGroupBox(tr("Frame limit")); - - QComboBox *frameLimitBox = xemu_settings->CreateEnhancedComboBox(emu_settings::FrameLimit, this); - - QVBoxLayout *frameLimitVbox = new QVBoxLayout(); - frameLimitVbox->addWidget(frameLimitBox); - frameLimit->setLayout(frameLimitVbox); - - // Checkboxes - QCheckBox *dumpColor = xemu_settings->CreateEnhancedCheckBox(emu_settings::WriteColorBuffers, this); - QCheckBox *readColor = xemu_settings->CreateEnhancedCheckBox(emu_settings::ReadColorBuffers, this); - QCheckBox *dumpDepth = xemu_settings->CreateEnhancedCheckBox(emu_settings::WriteDepthBuffer, this); - QCheckBox *readDepth = xemu_settings->CreateEnhancedCheckBox(emu_settings::ReadDepthBuffer, this); - QCheckBox *glLegacyBuffers = xemu_settings->CreateEnhancedCheckBox(emu_settings::LegacyBuffers, this); - QCheckBox *debugOutput = xemu_settings->CreateEnhancedCheckBox(emu_settings::DebugOutput, this); - QCheckBox *debugOverlay = xemu_settings->CreateEnhancedCheckBox(emu_settings::DebugOverlay, this); - QCheckBox *logProg = xemu_settings->CreateEnhancedCheckBox(emu_settings::LogShaderPrograms, this); - QCheckBox *vsync = xemu_settings->CreateEnhancedCheckBox(emu_settings::VSync, this); - QCheckBox *gpuTextureScaling = xemu_settings->CreateEnhancedCheckBox(emu_settings::GPUTextureScaling, this); - QCheckBox *stretchToDisplayArea = xemu_settings->CreateEnhancedCheckBox(emu_settings::StretchToDisplayArea, this); - QCheckBox *forceHighpZ = xemu_settings->CreateEnhancedCheckBox(emu_settings::ForceHighpZ, this); - QCheckBox *autoInvalidateCache = xemu_settings->CreateEnhancedCheckBox(emu_settings::AutoInvalidateCache, this); - QCheckBox *scrictModeRendering = xemu_settings->CreateEnhancedCheckBox(emu_settings::StrictRenderingMode, this); - - // Combobox Part - QHBoxLayout *hbox1 = new QHBoxLayout(); - QVBoxLayout *vbox11 = new QVBoxLayout(); - vbox11->addWidget(render); - vbox11->addWidget(res); - if (supportsD3D12 || supportsVulkan) - { - // be careful with layout changes due to render when adding new stuff - vbox11->addWidget(graphicsAdapter); - } - vbox11->addStretch(); - QVBoxLayout *vbox12 = new QVBoxLayout(); - vbox12->addWidget(aspect); - vbox12->addWidget(frameLimit); - vbox12->addStretch(); - hbox1->addLayout(vbox11); - hbox1->addLayout(vbox12); - - // Checkbox Part - QGroupBox *mainOptions = new QGroupBox(tr("Main Options")); - QHBoxLayout *hbox2 = new QHBoxLayout(); //main options - QVBoxLayout *vbox21 = new QVBoxLayout(); - vbox21->addWidget(dumpColor); - vbox21->addWidget(readColor); - vbox21->addWidget(dumpDepth); - vbox21->addWidget(readDepth); - QVBoxLayout *vbox22 = new QVBoxLayout(); - vbox22->addWidget(vsync); - vbox22->addWidget(autoInvalidateCache); - vbox22->addWidget(gpuTextureScaling); - vbox22->addWidget(stretchToDisplayArea); - vbox22->addSpacing(20); - - hbox2->addLayout(vbox21); - hbox2->addLayout(vbox22); - - QGroupBox *debugOptions = new QGroupBox(tr("Debugging Options")); - QHBoxLayout *hbox3 = new QHBoxLayout(); - QBoxLayout *vbox31 = new QVBoxLayout(); - vbox31->addWidget(glLegacyBuffers); - vbox31->addWidget(scrictModeRendering); - vbox31->addWidget(forceHighpZ); - QVBoxLayout *vbox32 = new QVBoxLayout(); - vbox32->addWidget(debugOutput); - vbox32->addWidget(debugOverlay); - vbox32->addWidget(logProg); - - hbox3->addLayout(vbox31); - hbox3->addLayout(vbox32); - - mainOptions->setLayout(hbox2); - debugOptions->setLayout(hbox3); - - QVBoxLayout *options_container = new QVBoxLayout(); - options_container->addWidget(mainOptions); - options_container->addWidget(debugOptions); - - QVBoxLayout *vbox = new QVBoxLayout(); - vbox->addLayout(hbox1); - vbox->addSpacing(10); - vbox->addLayout(options_container); - vbox->addStretch(); - setLayout(vbox); - - auto fixGLLegacy = [=](const QString& text) { - glLegacyBuffers->setEnabled(text == r_OpenGL); - }; - - // Handle connects to disable specific checkboxes that depend on GUI state. - fixGLLegacy(renderBox->currentText()); // Init - connect(renderBox, &QComboBox::currentTextChanged, fixGLLegacy); -} diff --git a/rpcs3/rpcs3qt/graphics_tab.h b/rpcs3/rpcs3qt/graphics_tab.h deleted file mode 100644 index 90a330dcda..0000000000 --- a/rpcs3/rpcs3qt/graphics_tab.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include "emu_settings.h" - -#include - -#include - -class graphics_tab : public QWidget -{ - Q_OBJECT - -public: - explicit graphics_tab(std::shared_ptr xemu_settings, Render_Creator r_Creator, QWidget *parent = 0); - -private: - std::shared_ptr xemu_settings; - QString m_oldRender = ""; - bool m_isD3D12 = false; - bool m_isVulkan = false; -}; diff --git a/rpcs3/rpcs3qt/gui_settings.h b/rpcs3/rpcs3qt/gui_settings.h index b1b9e7d779..b66c1d5df1 100644 --- a/rpcs3/rpcs3qt/gui_settings.h +++ b/rpcs3/rpcs3qt/gui_settings.h @@ -65,12 +65,13 @@ namespace GUI const GUI_SAVE fd_decrypt_sprx = GUI_SAVE( main_window, "lastExplorePathSPRX", "" ); const GUI_SAVE fd_cg_disasm = GUI_SAVE( main_window, "lastExplorePathCGD", "" ); - const GUI_SAVE mw_debugger = GUI_SAVE( main_window, "debuggerVisible", false ); - const GUI_SAVE mw_logger = GUI_SAVE( main_window, "loggerVisible", true ); - const GUI_SAVE mw_gamelist = GUI_SAVE( main_window, "gamelistVisible", true ); - const GUI_SAVE mw_controls = GUI_SAVE( main_window, "controlsVisible", true ); - const GUI_SAVE mw_geometry = GUI_SAVE( main_window, "geometry", QByteArray() ); - const GUI_SAVE mw_windowState = GUI_SAVE( main_window, "windowState", QByteArray() ); + const GUI_SAVE mw_debugger = GUI_SAVE( main_window, "debuggerVisible", false ); + const GUI_SAVE mw_logger = GUI_SAVE( main_window, "loggerVisible", true ); + const GUI_SAVE mw_gamelist = GUI_SAVE( main_window, "gamelistVisible", true ); + const GUI_SAVE mw_toolBarVisible = GUI_SAVE( main_window, "toolBarVisible", true ); + const GUI_SAVE mw_geometry = GUI_SAVE( main_window, "geometry", QByteArray() ); + const GUI_SAVE mw_windowState = GUI_SAVE( main_window, "windowState", QByteArray() ); + const GUI_SAVE mw_mwState = GUI_SAVE( main_window, "wwState", QByteArray() ); const GUI_SAVE cat_hdd_game = GUI_SAVE( game_list, "categoryVisibleHDDGame", true ); const GUI_SAVE cat_disc_game = GUI_SAVE( game_list, "categoryVisibleDiscGame", true ); @@ -87,7 +88,7 @@ namespace GUI const GUI_SAVE gl_listMode = GUI_SAVE( game_list, "listMode", true ); const GUI_SAVE gl_textFactor = GUI_SAVE( game_list, "textFactor", (qreal) 2.0 ); const GUI_SAVE gl_marginFactor = GUI_SAVE( game_list, "marginFactor", (qreal) 0.09 ); - const GUI_SAVE gl_toolBarVisible = GUI_SAVE( game_list, "toolBarVisible", true ); + const GUI_SAVE gl_toolBarVisible = GUI_SAVE( game_list, "toolBarVisible", false); const GUI_SAVE fs_dev_hdd0_list = GUI_SAVE(fs, "dev_hdd0_list", QStringList()); const GUI_SAVE fs_dev_hdd1_list = GUI_SAVE(fs, "dev_hdd1_list", QStringList()); diff --git a/rpcs3/rpcs3qt/gui_tab.cpp b/rpcs3/rpcs3qt/gui_tab.cpp deleted file mode 100644 index 7a83f2df9a..0000000000 --- a/rpcs3/rpcs3qt/gui_tab.cpp +++ /dev/null @@ -1,208 +0,0 @@ -#include "gui_tab.h" - -#include -#include -#include -#include -#include - -gui_tab::gui_tab(std::shared_ptr xSettings, QWidget *parent) : QWidget(parent), xgui_settings(xSettings) -{ - // Left Widgets - // configs - QGroupBox *gb_configs = new QGroupBox(tr("GUI Configs"), this); - QVBoxLayout *vbox_configs = new QVBoxLayout(); - QHBoxLayout *hbox_configs = new QHBoxLayout(); - combo_configs = new QComboBox(this); - QPushButton *pb_apply_config = new QPushButton(tr("Apply"), this); - // control buttons - QGroupBox *gb_controls = new QGroupBox(tr("GUI Controls"), this); - QVBoxLayout *vbox_controls = new QVBoxLayout(); - QPushButton *pb_reset_default = new QPushButton(tr("Reset GUI to Default"), this); - QPushButton *pb_backup_config = new QPushButton(tr("Save Current Configuration"), this); - QPushButton *pb_open_folder = new QPushButton(tr("Open Config/Sheet Folder"), this); - QCheckBox *cb_show_welcome = new QCheckBox(tr("Show Welcome Screen"), this); - cb_show_welcome->setChecked(xSettings->GetValue(GUI::ib_show_welcome).toBool()); - - // Right Widgets - QGroupBox *gb_stylesheets = new QGroupBox(tr("Stylesheets"), this); - QVBoxLayout *vbox_stylesheets = new QVBoxLayout(); - QHBoxLayout *hbox_stylesheets = new QHBoxLayout(); - combo_stylesheets = new QComboBox(this); - QPushButton *pb_apply_stylesheet = new QPushButton(tr("Apply"), this); - - // Left layout - QVBoxLayout *vbox_left = new QVBoxLayout(); - - hbox_configs->addWidget(pb_apply_config); - vbox_configs->addWidget(combo_configs); - vbox_configs->addLayout(hbox_configs); - gb_configs->setLayout(vbox_configs); - - vbox_controls->addWidget(cb_show_welcome); - vbox_controls->addWidget(pb_reset_default); - vbox_controls->addWidget(pb_backup_config); - vbox_controls->addWidget(pb_open_folder); - gb_controls->setLayout(vbox_controls); - - vbox_left->addWidget(gb_configs); - vbox_left->addWidget(gb_controls); - vbox_left->addStretch(1); - - // Right layout - QVBoxLayout *vbox_right = new QVBoxLayout(); - hbox_stylesheets->addWidget(pb_apply_stylesheet); - vbox_stylesheets->addWidget(combo_stylesheets); - vbox_stylesheets->addLayout(hbox_stylesheets); - gb_stylesheets->setLayout(vbox_stylesheets); - vbox_right->addWidget(gb_stylesheets); - vbox_right->addStretch(1); - - // Main Layout - QHBoxLayout *hbox = new QHBoxLayout(); - hbox->addLayout(vbox_left); - hbox->addLayout(vbox_right); - setLayout(hbox); - - // Connections - connect(pb_reset_default, &QAbstractButton::clicked, this, &gui_tab::OnResetDefault); - connect(pb_backup_config, &QAbstractButton::clicked, this, &gui_tab::OnBackupCurrentConfig); - connect(pb_apply_config, &QAbstractButton::clicked, this, &gui_tab::OnApplyConfig); - connect(pb_apply_stylesheet, &QAbstractButton::clicked, this, &gui_tab::OnApplyStylesheet); - connect(pb_open_folder, &QAbstractButton::clicked, [=]() {QDesktopServices::openUrl(xgui_settings->GetSettingsDir()); }); - connect(cb_show_welcome, &QCheckBox::clicked, [=](bool val) {xSettings->SetValue(GUI::ib_show_welcome, val); }); - - AddConfigs(); - AddStylesheets(); -} - -void gui_tab::Accept() -{ - // Only attempt to load a config if changes occurred. - if (m_startingConfig != xgui_settings->GetValue(GUI::m_currentConfig).toString()) - { - OnApplyConfig(); - } - if (m_startingStylesheet != xgui_settings->GetValue(GUI::m_currentStylesheet).toString()) - { - OnApplyStylesheet(); - } -} - -void gui_tab::AddConfigs() -{ - combo_configs->clear(); - - combo_configs->addItem(tr("default")); - - for (QString entry : xgui_settings->GetConfigEntries()) - { - if (entry != tr("default")) - { - combo_configs->addItem(entry); - } - } - - QString currentSelection = tr("CurrentSettings"); - m_startingConfig = currentSelection; - - int index = combo_configs->findText(currentSelection); - if (index != -1) - { - combo_configs->setCurrentIndex(index); - } - else - { - LOG_WARNING(GENERAL, "Trying to set an invalid config index ", index); - } -} - -void gui_tab::AddStylesheets() -{ - combo_stylesheets->clear(); - - combo_stylesheets->addItem(tr("default")); - - for (QString entry : xgui_settings->GetStylesheetEntries()) - { - if (entry != tr("default")) - { - combo_stylesheets->addItem(entry); - } - } - - QString currentSelection = xgui_settings->GetValue(GUI::m_currentStylesheet).toString(); - m_startingStylesheet = currentSelection; - - int index = combo_stylesheets->findText(currentSelection); - if (index != -1) - { - combo_stylesheets->setCurrentIndex(index); - } - else - { - LOG_WARNING(GENERAL, "Trying to set an invalid stylesheets index ", index); - } -} - -void gui_tab::OnResetDefault() -{ - if (QMessageBox::question(this, tr("Reset GUI to default?"), tr("This will include your stylesheet as well. Do you wish to proceed?"), - QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) - { - xgui_settings->Reset(true); - xgui_settings->ChangeToConfig(tr("default")); - GuiStylesheetRequest(tr("default")); - GuiSettingsSyncRequest(); - AddConfigs(); - AddStylesheets(); - } -} - -void gui_tab::OnBackupCurrentConfig() -{ - QInputDialog* dialog = new QInputDialog(this); - dialog->setWindowTitle(tr("Choose a unique name")); - dialog->setLabelText(tr("Configuration Name: ")); - dialog->resize(500, 100); - - while (dialog->exec() != QDialog::Rejected) - { - dialog->resize(500, 100); - QString friendlyName = dialog->textValue(); - if (friendlyName == "") - { - QMessageBox::warning(this, tr("Error"), tr("Name cannot be empty")); - continue; - } - if (friendlyName.contains(".")) - { - QMessageBox::warning(this, tr("Error"), tr("Must choose a name with no '.'")); - continue; - } - if (combo_configs->findText(friendlyName) != -1) - { - QMessageBox::warning(this, tr("Error"), tr("Please choose a non-existing name")); - continue; - } - GuiSettingsSaveRequest(); - xgui_settings->SaveCurrentConfig(friendlyName); - combo_configs->addItem(friendlyName); - combo_configs->setCurrentIndex(combo_configs->findText(friendlyName)); - break; - } -} - -void gui_tab::OnApplyConfig() -{ - QString name = combo_configs->currentText(); - xgui_settings->SetValue(GUI::m_currentConfig, name); - xgui_settings->ChangeToConfig(name); - GuiSettingsSyncRequest(); -} - -void gui_tab::OnApplyStylesheet() -{ - xgui_settings->SetValue(GUI::m_currentStylesheet, combo_stylesheets->currentText()); - GuiStylesheetRequest(xgui_settings->GetCurrentStylesheetPath()); -} diff --git a/rpcs3/rpcs3qt/gui_tab.h b/rpcs3/rpcs3qt/gui_tab.h deleted file mode 100644 index f0dbcba600..0000000000 --- a/rpcs3/rpcs3qt/gui_tab.h +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once - -#include "gui_settings.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -class gui_tab : public QWidget -{ - Q_OBJECT - -public: - explicit gui_tab(std::shared_ptr guiSettings, QWidget *parent = 0); - -public Q_SLOTS: - void Accept(); -Q_SIGNALS: - void GuiSettingsSyncRequest(); - void GuiSettingsSaveRequest(); - void GuiStylesheetRequest(const QString& path); -private Q_SLOTS: - void OnResetDefault(); - void OnBackupCurrentConfig(); - void OnApplyConfig(); - void OnApplyStylesheet(); -private: - void AddConfigs(); - void AddStylesheets(); - - QComboBox *combo_configs; - QComboBox *combo_stylesheets; - - QString m_startingStylesheet; - QString m_startingConfig; - - std::shared_ptr xgui_settings; -}; diff --git a/rpcs3/rpcs3qt/input_tab.cpp b/rpcs3/rpcs3qt/input_tab.cpp deleted file mode 100644 index f75bad803b..0000000000 --- a/rpcs3/rpcs3qt/input_tab.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include -#include -#include -#include - -#include "input_tab.h" - -input_tab::input_tab(std::shared_ptr xemu_settings, QWidget *parent) : QWidget(parent) -{ - // Pad Handler - QGroupBox *padHandler = new QGroupBox(tr("Pad Handler")); - - QComboBox *padHandlerBox = xemu_settings->CreateEnhancedComboBox(emu_settings::PadHandler, this); - - QVBoxLayout *padHandlerVbox = new QVBoxLayout; - padHandlerVbox->addWidget(padHandlerBox); - padHandler->setLayout(padHandlerVbox); - - // Keyboard Handler - QGroupBox *keyboardHandler = new QGroupBox(tr("Keyboard Handler")); - - QComboBox *keyboardHandlerBox = xemu_settings->CreateEnhancedComboBox(emu_settings::KeyboardHandler, this); - - QVBoxLayout *keyboardHandlerVbox = new QVBoxLayout; - keyboardHandlerVbox->addWidget(keyboardHandlerBox); - keyboardHandler->setLayout(keyboardHandlerVbox); - - // Mouse Handler - QGroupBox *mouseHandler = new QGroupBox(tr("Mouse Handler")); - - QComboBox *mouseHandlerBox = xemu_settings->CreateEnhancedComboBox(emu_settings::MouseHandler, this); - - QVBoxLayout *mouseHandlerVbox = new QVBoxLayout; - mouseHandlerVbox->addWidget(mouseHandlerBox); - mouseHandler->setLayout(mouseHandlerVbox); - - // Camera - QGroupBox *camera = new QGroupBox(tr("Camera")); - - QComboBox *cameraBox = xemu_settings->CreateEnhancedComboBox(emu_settings::Camera, this); - - QVBoxLayout *cameraVbox = new QVBoxLayout; - cameraVbox->addWidget(cameraBox); - camera->setLayout(cameraVbox); - - // Camera type - QGroupBox *cameraType = new QGroupBox(tr("Camera type")); - - QComboBox *cameraTypeBox = xemu_settings->CreateEnhancedComboBox(emu_settings::CameraType, this); - - QVBoxLayout *cameraTypeVbox = new QVBoxLayout; - cameraTypeVbox->addWidget(cameraTypeBox); - cameraType->setLayout(cameraTypeVbox); - - // Main layout - QVBoxLayout *vbox1 = new QVBoxLayout; - vbox1->addWidget(padHandler); - vbox1->addWidget(keyboardHandler); - vbox1->addWidget(mouseHandler); - vbox1->addStretch(); - - QVBoxLayout *vbox2 = new QVBoxLayout; - vbox2->addWidget(camera); - vbox2->addWidget(cameraType); - vbox2->addStretch(); - - QHBoxLayout *hbox = new QHBoxLayout; - hbox->addLayout(vbox1); - hbox->addLayout(vbox2); - setLayout(hbox); -} - diff --git a/rpcs3/rpcs3qt/input_tab.h b/rpcs3/rpcs3qt/input_tab.h deleted file mode 100644 index 0da182ddfe..0000000000 --- a/rpcs3/rpcs3qt/input_tab.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include "emu_settings.h" - -#include - -#include - -class input_tab : public QWidget -{ - Q_OBJECT - -public: - explicit input_tab(std::shared_ptr xemu_settings, QWidget *parent = 0); -}; diff --git a/rpcs3/rpcs3qt/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp index 43c88ec764..76ec6bf20e 100644 --- a/rpcs3/rpcs3qt/main_window.cpp +++ b/rpcs3/rpcs3qt/main_window.cpp @@ -7,7 +7,6 @@ #include #include #include -#include #include "vfs_dialog.h" #include "save_data_utility.h" @@ -24,6 +23,7 @@ #include "rsx_debugger.h" #include "main_window.h" #include "emu_settings.h" +#include "about_dialog.h" #include @@ -42,28 +42,46 @@ #include "rpcs3_version.h" +#include "ui_main_window.h" + inline std::string sstr(const QString& _in) { return _in.toUtf8().toStdString(); } -main_window::main_window(QWidget *parent) : QMainWindow(parent), m_sys_menu_opened(false) +main_window::main_window(QWidget *parent) : QMainWindow(parent), m_sys_menu_opened(false), ui(new Ui::main_window) { + ui->setupUi(this); + guiSettings.reset(new gui_settings()); - setDockNestingEnabled(true); - - //Load Icons: This needs to happen before any actions or buttons are created + // Load Icons: This needs to happen before any actions or buttons are created icon_play = QIcon(":/Icons/play.png"); icon_pause = QIcon(":/Icons/pause.png"); icon_stop = QIcon(":/Icons/stop.png"); icon_restart = QIcon(":/Icons/restart.png"); appIcon = QIcon(":/rpcs3.ico"); + // add toolbar widgets (crappy Qt designer is not able to) + ui->sizeSlider->setRange(0, GUI::gl_icon_size.size() - 1); + // get icon size from list + int icon_size_index = 0; + QString icon_Size_Str = guiSettings->GetValue(GUI::gl_iconSize).toString(); + for (int i = 0; i < GUI::gl_icon_size.count(); i++) + { + if (GUI::gl_icon_size.at(i).first == icon_Size_Str) + { + icon_size_index = i; + break; + } + } + ui->sizeSlider->setSliderPosition(icon_size_index); + ui->toolBar->addWidget(ui->sizeSlider); + ui->toolBar->addSeparator(); + ui->toolBar->addWidget(ui->searchBar); + CreateActions(); - CreateMenus(); CreateDockWindows(); setMinimumSize(350, minimumSizeHint().height()); // seems fine on win 10 - ConfigureGuiFromSettings(true); CreateConnects(); setWindowTitle(QString::fromStdString("RPCS3 v" + rpcs3::version.to_string())); @@ -73,6 +91,7 @@ main_window::main_window(QWidget *parent) : QMainWindow(parent), m_sys_menu_open // Need to have this happen fast, but not now because connects aren't created yet. // So, a tricky balance in terms of time but this works. RequestGlobalStylesheetChange(guiSettings->GetCurrentStylesheetPath()); + ConfigureGuiFromSettings(true); }); } @@ -91,22 +110,27 @@ auto Pause = []() void main_window::CreateThumbnailToolbar() { #ifdef _WIN32 + icon_thumb_play = QIcon(":/Icons/play_blue.png"); + icon_thumb_pause = QIcon(":/Icons/pause_blue.png"); + icon_thumb_stop = QIcon(":/Icons/stop_blue.png"); + icon_thumb_restart = QIcon(":/Icons/restart_blue.png"); + thumb_bar = new QWinThumbnailToolBar(this); thumb_bar->setWindow(windowHandle()); thumb_playPause = new QWinThumbnailToolButton(thumb_bar); - thumb_playPause->setToolTip(tr("Start")); - thumb_playPause->setIcon(icon_play); + thumb_playPause->setToolTip(tr("Pause")); + thumb_playPause->setIcon(icon_thumb_pause); thumb_playPause->setEnabled(false); thumb_stop = new QWinThumbnailToolButton(thumb_bar); thumb_stop->setToolTip(tr("Stop")); - thumb_stop->setIcon(icon_stop); + thumb_stop->setIcon(icon_thumb_stop); thumb_stop->setEnabled(false); thumb_restart = new QWinThumbnailToolButton(thumb_bar); thumb_restart->setToolTip(tr("Restart")); - thumb_restart->setIcon(icon_restart); + thumb_restart->setIcon(icon_thumb_restart); thumb_restart->setEnabled(false); thumb_bar->addButton(thumb_playPause); @@ -572,97 +596,6 @@ void main_window::DecryptSPRXLibraries() LOG_NOTICE(GENERAL, "Finished decrypting all SPRX libraries."); } -void main_window::About() -{ - QDialog* about = new QDialog(this); - - QPushButton* gitHub = new QPushButton(tr("GitHub"), about); - QPushButton* website = new QPushButton(tr("Website"), about); - QPushButton* forum = new QPushButton(tr("Forum"), about); - QPushButton* patreon = new QPushButton(tr("Patreon"), about); - QPushButton* close = new QPushButton(tr("Close"), about); - close->setDefault(true); - - QLabel* icon = new QLabel(this); - icon->setPixmap(QIcon(":/rpcs3.ico").pixmap(96, 96)); - - QLabel* caption = new QLabel(tr( - "

RPCS3

" - "A PlayStation 3 emulator and debugger.
" - "RPCS3 Version: %1").arg(qstr(rpcs3::version.to_string()) - )); - QLabel* developers = new QLabel(tr( - "

Developers:
¬DH
¬AlexAltea
¬Hykem
Oil
Nekotekina
Bigpet
¬gopalsr83
¬tambry
" - "vlj
kd-11
jarveson
raven02
AniLeo
cornytrace
ssshadow
Numan

" - )); - QLabel* contributors = new QLabel(tr( - "

Contributors:
BlackDaemon
elisha464
Aishou
krofna
xsacha
danilaml
unknownbrackets
Zangetsu38
" - "lioncash
achurch
darkf
Syphurith
Blaypeg
Survanium90
georgemoralis
ikki84
hcorion
Megamouse
flash-fire

" - )); - QLabel* supporters = new QLabel(tr( - "

Supporters:
Howard Garrison
EXPotemkin
Marko V.
danhp
Jake (5315825)
Ian Reid
Tad Sherlock
Tyler Friesen
" - "Folzar
Payton Williams
RedPill Australia
yanghong
Mohammed El-Serougi
Дима ~Ximer13~ Кулин
James Reed
BaroqueSonata
" - "Bonzay0
Henrijs Kons
Davide Balbi
Lena Stöffler

" - )); - icon->setAlignment(Qt::AlignLeft); - caption->setAlignment(Qt::AlignLeft); - developers->setAlignment(Qt::AlignTop); - contributors->setAlignment(Qt::AlignTop); - supporters->setAlignment(Qt::AlignTop); - - // Caption Layout - QVBoxLayout* caption_layout = new QVBoxLayout(); - caption_layout->setAlignment(Qt::AlignLeft); - caption_layout->addSpacing(15); - caption_layout->addWidget(caption); - - // Header Section - QHBoxLayout* header_layout = new QHBoxLayout(); - header_layout->setAlignment(Qt::AlignCenter); - header_layout->addLayout(caption_layout); - header_layout->addStretch(); - header_layout->addWidget(icon); - header_layout->addStretch(); - - // Names Section - QHBoxLayout* text_layout = new QHBoxLayout(); - text_layout->setAlignment(Qt::AlignTop); - text_layout->addWidget(developers); - text_layout->addWidget(contributors); - text_layout->addWidget(supporters); - - // Button Section - QHBoxLayout* button_layout = new QHBoxLayout(); - button_layout->addWidget(gitHub); - button_layout->addWidget(website); - button_layout->addWidget(forum); - button_layout->addWidget(patreon); - button_layout->addStretch(); - button_layout->addWidget(close); - - // Main Layout - QVBoxLayout* layout = new QVBoxLayout(); - layout->addLayout(header_layout); - layout->addLayout(text_layout); - layout->addSpacing(20); - layout->addLayout(button_layout); - - // Events - connect(gitHub, &QAbstractButton::clicked, [] { QDesktopServices::openUrl(QUrl("https://www.github.com/RPCS3")); }); - connect(website, &QAbstractButton::clicked, [] { QDesktopServices::openUrl(QUrl("https://www.rpcs3.net")); }); - connect(forum, &QAbstractButton::clicked, [] { QDesktopServices::openUrl(QUrl("http://www.emunewz.net/forum/forumdisplay.php?fid=172")); }); - connect(patreon, &QAbstractButton::clicked, [] { QDesktopServices::openUrl(QUrl("https://www.patreon.com/Nekotekina")); }); - connect(close, &QAbstractButton::clicked, about, &QWidget::close); - - // Create About Dialog - about->setWindowTitle(tr("About RPCS3")); - about->setWindowFlags(about->windowFlags() & ~Qt::WindowContextHelpButtonHint); - about->setMinimumWidth(500); - about->setLayout(layout); - about->setFixedSize(about->sizeHint()); - about->exec(); -} - /** Needed so that when a backup occurs of window state in guisettings, the state is current. * Also, so that on close, the window state is preserved. */ @@ -671,6 +604,7 @@ void main_window::SaveWindowState() // Save gui settings guiSettings->SetValue(GUI::mw_geometry, saveGeometry()); guiSettings->SetValue(GUI::mw_windowState, saveState()); + guiSettings->SetValue(GUI::mw_mwState, m_mw->saveState()); // Save column settings gameListFrame->SaveSettings(); @@ -680,64 +614,64 @@ void main_window::OnEmuRun() { debuggerFrame->EnableButtons(true); #ifdef _WIN32 - thumb_playPause->setToolTip(tr("Pause")); - thumb_playPause->setIcon(icon_pause); + thumb_playPause->setToolTip(tr("Pause emulation")); + thumb_playPause->setIcon(icon_thumb_pause); #endif - sysPauseAct->setText(tr("&Pause\tCtrl+P")); - sysPauseAct->setIcon(icon_pause); - menu_run->setText(tr("&Pause")); - menu_run->setIcon(icon_pause); + ui->sysPauseAct->setText(tr("&Pause\tCtrl+P")); + ui->sysPauseAct->setIcon(icon_pause); + ui->toolbar_start->setIcon(icon_pause); + ui->toolbar_start->setToolTip(tr("Pause emulation")); EnableMenus(true); } void main_window::OnEmuResume() { #ifdef _WIN32 - thumb_playPause->setToolTip(tr("Pause")); - thumb_playPause->setIcon(icon_pause); + thumb_playPause->setToolTip(tr("Pause emulation")); + thumb_playPause->setIcon(icon_thumb_pause); #endif - sysPauseAct->setText(tr("&Pause\tCtrl+P")); - sysPauseAct->setIcon(icon_pause); - menu_run->setText(tr("&Pause")); - menu_run->setIcon(icon_pause); + ui->sysPauseAct->setText(tr("&Pause\tCtrl+P")); + ui->sysPauseAct->setIcon(icon_pause); + ui->toolbar_start->setIcon(icon_pause); + ui->toolbar_start->setToolTip(tr("Pause emulation")); } void main_window::OnEmuPause() { #ifdef _WIN32 - thumb_playPause->setToolTip(tr("Resume")); - thumb_playPause->setIcon(icon_play); + thumb_playPause->setToolTip(tr("Resume emulation")); + thumb_playPause->setIcon(icon_thumb_play); #endif - sysPauseAct->setText(tr("&Resume\tCtrl+E")); - sysPauseAct->setIcon(icon_play); - menu_run->setText(tr("&Resume")); - menu_run->setIcon(icon_play); + ui->sysPauseAct->setText(tr("&Resume\tCtrl+E")); + ui->sysPauseAct->setIcon(icon_play); + ui->toolbar_start->setIcon(icon_play); + ui->toolbar_start->setToolTip(tr("Resume emulation")); } void main_window::OnEmuStop() { debuggerFrame->EnableButtons(false); + ui->sysPauseAct->setText(Emu.IsReady() ? tr("&Start\tCtrl+E") : tr("&Resume\tCtrl+E")); + ui->sysPauseAct->setIcon(icon_play); #ifdef _WIN32 - thumb_playPause->setToolTip(Emu.IsReady() ? tr("Start") : tr("Resume")); - thumb_playPause->setIcon(icon_play); + thumb_playPause->setToolTip(Emu.IsReady() ? tr("Start emulation") : tr("Resume emulation")); + thumb_playPause->setIcon(icon_thumb_play); #endif - menu_run->setText(Emu.IsReady() ? tr("&Start") : tr("&Resume")); - menu_run->setIcon(icon_play); EnableMenus(false); if (!Emu.GetPath().empty()) { - sysPauseAct->setText(tr("&Restart\tCtrl+E")); - sysPauseAct->setIcon(icon_restart); - sysPauseAct->setEnabled(true); - menu_restart->setEnabled(true); + ui->toolbar_start->setEnabled(true); + ui->toolbar_start->setIcon(icon_restart); + ui->toolbar_start->setToolTip(tr("Restart emulation")); + ui->sysRebootAct->setEnabled(true); #ifdef _WIN32 thumb_restart->setEnabled(true); #endif } else { - sysPauseAct->setText(Emu.IsReady() ? tr("&Start\tCtrl+E") : tr("&Resume\tCtrl+E")); - sysPauseAct->setIcon(icon_play); + ui->toolbar_start->setIcon(icon_play); + ui->toolbar_start->setToolTip(Emu.IsReady() ? tr("Start emulation") : tr("Resume emulation")); } } @@ -745,13 +679,13 @@ void main_window::OnEmuReady() { debuggerFrame->EnableButtons(true); #ifdef _WIN32 - thumb_playPause->setToolTip(Emu.IsReady() ? tr("Start") : tr("Resume")); - thumb_playPause->setIcon(icon_play); + thumb_playPause->setToolTip(Emu.IsReady() ? tr("Start emulation") : tr("Resume emulation")); + thumb_playPause->setIcon(icon_thumb_play); #endif - sysPauseAct->setText(Emu.IsReady() ? tr("&Start\tCtrl+E") : tr("&Resume\tCtrl+E")); - sysPauseAct->setIcon(icon_play); - menu_run->setText(Emu.IsReady() ? tr("&Start") : tr("&Resume")); - menu_run->setIcon(icon_play); + ui->sysPauseAct->setText(Emu.IsReady() ? tr("&Start\tCtrl+E") : tr("&Resume\tCtrl+E")); + ui->sysPauseAct->setIcon(icon_play); + ui->toolbar_start->setIcon(icon_play); + ui->toolbar_start->setToolTip(Emu.IsReady() ? tr("Start emulation") : tr("Resume emulation")); EnableMenus(true); } @@ -766,24 +700,24 @@ void main_window::EnableMenus(bool enabled) thumb_restart->setEnabled(enabled); #endif - // Buttons - menu_run->setEnabled(enabled); - menu_stop->setEnabled(enabled); - menu_restart->setEnabled(enabled); + // Toolbar + ui->toolbar_start->setEnabled(enabled); + ui->toolbar_stop->setEnabled(enabled); // Emulation - sysPauseAct->setEnabled(enabled); - sysStopAct->setEnabled(enabled); + ui->sysPauseAct->setEnabled(enabled); + ui->sysStopAct->setEnabled(enabled); + ui->sysRebootAct->setEnabled(enabled); // PS3 Commands - sysSendOpenMenuAct->setEnabled(enabled); - sysSendExitAct->setEnabled(enabled); + ui->sysSendOpenMenuAct->setEnabled(enabled); + ui->sysSendExitAct->setEnabled(enabled); // Tools - toolskernel_explorerAct->setEnabled(enabled); - toolsmemory_viewerAct->setEnabled(enabled); - toolsRsxDebuggerAct->setEnabled(enabled); - toolsStringSearchAct->setEnabled(enabled); + ui->toolskernel_explorerAct->setEnabled(enabled); + ui->toolsmemory_viewerAct->setEnabled(enabled); + ui->toolsRsxDebuggerAct->setEnabled(enabled); + ui->toolsStringSearchAct->setEnabled(enabled); } void main_window::BootRecentAction(const QAction* act) @@ -816,7 +750,7 @@ void main_window::BootRecentAction(const QAction* act) // clear menu of actions for (auto act : m_recentGameActs) { - m_bootRecentMenu->removeAction(act); + ui->bootRecentMenu->removeAction(act); } // remove action from list @@ -832,7 +766,7 @@ void main_window::BootRecentAction(const QAction* act) { m_recentGameActs[i]->setShortcut(tr("Ctrl+%1").arg(i + 1)); m_recentGameActs[i]->setToolTip(m_rg_entries.at(i).second); - m_bootRecentMenu->addAction(m_recentGameActs[i]); + ui->bootRecentMenu->addAction(m_recentGameActs[i]); } LOG_WARNING(GENERAL, "Boot Recent list refreshed"); @@ -905,7 +839,7 @@ QAction* main_window::CreateRecentAction(const q_string_pair& entry, const uint& void main_window::AddRecentAction(const q_string_pair& entry) { // don't change list on freeze - if (freezeRecentAct->isChecked()) + if (ui->freezeRecentAct->isChecked()) { return; } @@ -920,7 +854,7 @@ void main_window::AddRecentAction(const q_string_pair& entry) // clear menu of actions for (auto act : m_recentGameActs) { - m_bootRecentMenu->removeAction(act); + ui->bootRecentMenu->removeAction(act); } // if path already exists, remove it in order to get it to beginning @@ -954,7 +888,7 @@ void main_window::AddRecentAction(const q_string_pair& entry) { m_recentGameActs[i]->setShortcut(tr("Ctrl+%1").arg(i+1)); m_recentGameActs[i]->setToolTip(m_rg_entries.at(i).second); - m_bootRecentMenu->addAction(m_recentGameActs[i]); + ui->bootRecentMenu->addAction(m_recentGameActs[i]); } guiSettings->SetValue(GUI::rg_entries, guiSettings->List2Var(m_rg_entries)); @@ -962,252 +896,149 @@ void main_window::AddRecentAction(const q_string_pair& entry) void main_window::CreateActions() { - bootElfAct = new QAction(tr("Boot (S)ELF file"), this); - bootGameAct = new QAction(tr("Boot &Game"), this); - bootInstallPkgAct = new QAction(tr("&Install PKG"), this); - bootInstallPupAct = new QAction(tr("&Install Firmware"), this); + ui->exitAct->setShortcuts(QKeySequence::Quit); - clearRecentAct = new QAction(tr("&Clear List"), this); - freezeRecentAct = new QAction(tr("&Freeze List"), this); - freezeRecentAct->setCheckable(true); - - exitAct = new QAction(tr("E&xit"), this); - exitAct->setShortcuts(QKeySequence::Quit); - exitAct->setStatusTip(tr("Exit the application")); - - sysPauseAct = new QAction(tr("&Pause"), this); - sysPauseAct->setEnabled(false); - sysPauseAct->setIcon(icon_pause); - - sysStopAct = new QAction(tr("&Stop"), this); - sysStopAct->setEnabled(false); - sysStopAct->setIcon(icon_stop); - - sysSendOpenMenuAct = new QAction(tr("Send &open system menu cmd"), this); - sysSendOpenMenuAct->setEnabled(false); - - sysSendExitAct = new QAction(tr("Send &exit cmd"), this); - sysSendExitAct->setEnabled(false); - - confSettingsAct = new QAction(tr("&Settings"), this); - confPadAct = new QAction(tr("&Keyboard Settings"), this); - - confAutopauseManagerAct = new QAction(tr("&Auto Pause Settings"), this); - confAutopauseManagerAct->setEnabled(false); - - confVFSDialogAct = new QAction(tr("Virtual File System"), this); - - confSavedataManagerAct = new QAction(tr("Save &Data Utility"), this); - confSavedataManagerAct->setEnabled(false); - - toolsCgDisasmAct = new QAction(tr("&Cg Disasm"), this); - toolsCgDisasmAct->setEnabled(true); - - toolskernel_explorerAct = new QAction(tr("&Kernel Explorer"), this); - toolskernel_explorerAct->setEnabled(false); - - toolsmemory_viewerAct = new QAction(tr("&Memory Viewer"), this); - toolsmemory_viewerAct->setEnabled(false); - - toolsRsxDebuggerAct = new QAction(tr("&RSX Debugger"), this); - toolsRsxDebuggerAct->setEnabled(false); - - toolsStringSearchAct = new QAction(tr("&String Search"), this); - toolsStringSearchAct->setEnabled(false); - - toolsDecryptSprxLibsAct = new QAction(tr("SPRX &Decryption"), this); - - showDebuggerAct = new QAction(tr("Show Debugger"), this); - showDebuggerAct->setCheckable(true); - - showLogAct = new QAction(tr("Show Log/TTY"), this); - showLogAct->setCheckable(true); - - showGameListAct = new QAction(tr("Show Game List"), this); - showGameListAct->setCheckable(true); - - showControlsAct = new QAction(tr("Show Controls"), this); - showControlsAct->setCheckable(true); - - showGameListToolBarAct = new QAction(tr("Show Tool Bar"), this); - showGameListToolBarAct->setCheckable(true); - - refreshGameListAct = new QAction(tr("&Refresh Game List"), this); - - showCatHDDGameAct = new QAction(category::hdd_Game, this); - showCatHDDGameAct->setCheckable(true); - - showCatDiscGameAct = new QAction(category::disc_Game, this); - showCatDiscGameAct->setCheckable(true); - - showCatHomeAct = new QAction(tr("Home"), this); - showCatHomeAct->setCheckable(true); - - showCatAudioVideoAct = new QAction(tr("Audio/Video"), this); - showCatAudioVideoAct->setCheckable(true); - - showCatGameDataAct = new QAction(tr("GameData"), this); - showCatGameDataAct->setCheckable(true); - - showCatUnknownAct = new QAction(category::unknown, this); - showCatUnknownAct->setCheckable(true); - - showCatOtherAct = new QAction(category::other, this); - showCatOtherAct->setCheckable(true); + ui->toolbar_start->setEnabled(false); + ui->toolbar_stop->setEnabled(false); categoryVisibleActGroup = new QActionGroup(this); - categoryVisibleActGroup->addAction(showCatHDDGameAct); - categoryVisibleActGroup->addAction(showCatDiscGameAct); - categoryVisibleActGroup->addAction(showCatHomeAct); - categoryVisibleActGroup->addAction(showCatAudioVideoAct); - categoryVisibleActGroup->addAction(showCatGameDataAct); - categoryVisibleActGroup->addAction(showCatUnknownAct); - categoryVisibleActGroup->addAction(showCatOtherAct); + categoryVisibleActGroup->addAction(ui->showCatHDDGameAct); + categoryVisibleActGroup->addAction(ui->showCatDiscGameAct); + categoryVisibleActGroup->addAction(ui->showCatHomeAct); + categoryVisibleActGroup->addAction(ui->showCatAudioVideoAct); + categoryVisibleActGroup->addAction(ui->showCatGameDataAct); + categoryVisibleActGroup->addAction(ui->showCatUnknownAct); + categoryVisibleActGroup->addAction(ui->showCatOtherAct); categoryVisibleActGroup->setExclusive(false); - setIconSizeTinyAct = new QAction(tr("Tiny"), this); - setIconSizeTinyAct->setCheckable(true); - - setIconSizeSmallAct = new QAction(tr("Small"), this); - setIconSizeSmallAct->setCheckable(true); - - setIconSizeMediumAct = new QAction(tr("Medium"), this); - setIconSizeMediumAct->setCheckable(true); - - setIconSizeLargeAct = new QAction(tr("Large"), this); - setIconSizeLargeAct->setCheckable(true); - iconSizeActGroup = new QActionGroup(this); - iconSizeActGroup->addAction(setIconSizeTinyAct); - iconSizeActGroup->addAction(setIconSizeSmallAct); - iconSizeActGroup->addAction(setIconSizeMediumAct); - iconSizeActGroup->addAction(setIconSizeLargeAct); - setIconSizeSmallAct->setChecked(true); - - setlistModeListAct = new QAction(tr("List"), this); - setlistModeListAct->setCheckable(true); - - setlistModeGridAct = new QAction(tr("Grid"), this); - setlistModeGridAct->setCheckable(true); + iconSizeActGroup->addAction(ui->setIconSizeTinyAct); + iconSizeActGroup->addAction(ui->setIconSizeSmallAct); + iconSizeActGroup->addAction(ui->setIconSizeMediumAct); + iconSizeActGroup->addAction(ui->setIconSizeLargeAct); listModeActGroup = new QActionGroup(this); - listModeActGroup->addAction(setlistModeListAct); - listModeActGroup->addAction(setlistModeGridAct); - setlistModeListAct->setChecked(true); - - aboutAct = new QAction(tr("&About"), this); - aboutAct->setStatusTip(tr("Show the application's About box")); - - aboutQtAct = new QAction(tr("About &Qt"), this); - aboutQtAct->setStatusTip(tr("Show the Qt library's About box")); + listModeActGroup->addAction(ui->setlistModeListAct); + listModeActGroup->addAction(ui->setlistModeGridAct); } void main_window::CreateConnects() { - connect(bootElfAct, &QAction::triggered, this, &main_window::BootElf); - connect(bootGameAct, &QAction::triggered, this, &main_window::BootGame); - connect(m_bootRecentMenu, &QMenu::aboutToShow, [=]() { + connect(ui->bootElfAct, &QAction::triggered, this, &main_window::BootElf); + connect(ui->bootGameAct, &QAction::triggered, this, &main_window::BootGame); + connect(ui->bootRecentMenu, &QMenu::aboutToShow, [=]() { // Enable/Disable Recent Games List const bool stopped = Emu.IsStopped(); - for (auto act : m_bootRecentMenu->actions()) + for (auto act : ui->bootRecentMenu->actions()) { - if (act != freezeRecentAct && act != clearRecentAct) + if (act != ui->freezeRecentAct && act != ui->clearRecentAct) { act->setEnabled(stopped); } } }); - connect(clearRecentAct, &QAction::triggered, [this](){ - if (freezeRecentAct->isChecked()) { return; } + connect(ui->clearRecentAct, &QAction::triggered, [this](){ + if (ui->freezeRecentAct->isChecked()) { return; } m_rg_entries.clear(); for (auto act : m_recentGameActs) { - m_bootRecentMenu->removeAction(act); + ui->bootRecentMenu->removeAction(act); } m_recentGameActs.clear(); guiSettings->SetValue(GUI::rg_entries, guiSettings->List2Var(q_pair_list())); }); - connect(freezeRecentAct, &QAction::triggered, [=](bool checked) { + connect(ui->freezeRecentAct, &QAction::triggered, [=](bool checked) { guiSettings->SetValue(GUI::rg_freeze, checked); }); - connect(bootInstallPkgAct, &QAction::triggered, this, &main_window::InstallPkg); - connect(bootInstallPupAct, &QAction::triggered, this, &main_window::InstallPup); - connect(exitAct, &QAction::triggered, this, &QWidget::close); - connect(sysPauseAct, &QAction::triggered, Pause); - connect(sysStopAct, &QAction::triggered, [=]() { Emu.Stop(); }); - connect(sysSendOpenMenuAct, &QAction::triggered, [=](){ + connect(ui->bootInstallPkgAct, &QAction::triggered, this, &main_window::InstallPkg); + connect(ui->bootInstallPupAct, &QAction::triggered, this, &main_window::InstallPup); + connect(ui->exitAct, &QAction::triggered, this, &QWidget::close); + connect(ui->sysPauseAct, &QAction::triggered, Pause); + connect(ui->sysStopAct, &QAction::triggered, [=]() { Emu.Stop(); }); + connect(ui->sysRebootAct, &QAction::triggered, [=]() { Emu.Stop(); Emu.Load(); }); + connect(ui->captureFrame, &QAction::triggered, [=]() { user_asked_for_frame_capture = true; }); + connect(ui->sysSendOpenMenuAct, &QAction::triggered, [=](){ sysutil_send_system_cmd(m_sys_menu_opened ? 0x0132 /* CELL_SYSUTIL_SYSTEM_MENU_CLOSE */ : 0x0131 /* CELL_SYSUTIL_SYSTEM_MENU_OPEN */, 0); m_sys_menu_opened = !m_sys_menu_opened; - sysSendOpenMenuAct->setText(tr("Send &%0 system menu cmd").arg(m_sys_menu_opened ? tr("close") : tr("open"))); + ui->sysSendOpenMenuAct->setText(tr("Send &%0 system menu cmd").arg(m_sys_menu_opened ? tr("close") : tr("open"))); }); - connect(sysSendExitAct, &QAction::triggered, [=](){ + connect(ui->sysSendExitAct, &QAction::triggered, [=](){ sysutil_send_system_cmd(0x0101 /* CELL_SYSUTIL_REQUEST_EXITGAME */, 0); }); - connect(confSettingsAct, &QAction::triggered, [=](){ + + auto openSettings = [=](int index) + { settings_dialog dlg(guiSettings, m_Render_Creator, this); connect(&dlg, &settings_dialog::GuiSettingsSaveRequest, this, &main_window::SaveWindowState); connect(&dlg, &settings_dialog::GuiSettingsSyncRequest, [=]() {ConfigureGuiFromSettings(true); }); connect(&dlg, &settings_dialog::GuiStylesheetRequest, this, &main_window::RequestGlobalStylesheetChange); + dlg.SetActiveTab(index); dlg.exec(); - }); - connect(confPadAct, &QAction::triggered, this, [=](){ + }; + connect(ui->confCPUAct, &QAction::triggered, [=]() { openSettings(0); }); + connect(ui->confGPUAct, &QAction::triggered, [=]() { openSettings(1); }); + connect(ui->confAudioAct, &QAction::triggered, [=]() { openSettings(2); }); + connect(ui->confIOAct, &QAction::triggered, [=]() { openSettings(3); }); + connect(ui->confSystemAct, &QAction::triggered, [=]() { openSettings(4); }); + + connect(ui->confPadAct, &QAction::triggered, this, [=](){ pad_settings_dialog dlg(this); dlg.exec(); }); - connect(confAutopauseManagerAct, &QAction::triggered, [=](){ + connect(ui->confAutopauseManagerAct, &QAction::triggered, [=](){ auto_pause_settings_dialog dlg(this); dlg.exec(); }); - connect(confVFSDialogAct, &QAction::triggered, [=]() { + connect(ui->confVFSDialogAct, &QAction::triggered, [=]() { vfs_dialog dlg(this); dlg.exec(); gameListFrame->Refresh(true); // dev-hdd0 may have changed. Refresh just in case. }); - connect(confSavedataManagerAct, &QAction::triggered, [=](){ + connect(ui->confSavedataManagerAct, &QAction::triggered, [=](){ save_data_list_dialog* sdid = new save_data_list_dialog({}, 0, false, this); sdid->show(); }); - connect(toolsCgDisasmAct, &QAction::triggered, [=](){ + connect(ui->toolsCgDisasmAct, &QAction::triggered, [=](){ cg_disasm_window* cgdw = new cg_disasm_window(guiSettings, this); cgdw->show(); }); - connect(toolskernel_explorerAct, &QAction::triggered, [=](){ + connect(ui->toolskernel_explorerAct, &QAction::triggered, [=](){ kernel_explorer* kernelExplorer = new kernel_explorer(this); kernelExplorer->show(); }); - connect(toolsmemory_viewerAct, &QAction::triggered, [=](){ + connect(ui->toolsmemory_viewerAct, &QAction::triggered, [=](){ memory_viewer_panel* mvp = new memory_viewer_panel(this); mvp->show(); }); - connect(toolsRsxDebuggerAct, &QAction::triggered, [=](){ + connect(ui->toolsRsxDebuggerAct, &QAction::triggered, [=](){ rsx_debugger* rsx = new rsx_debugger(this); rsx->show(); }); - connect(toolsStringSearchAct, &QAction::triggered, [=](){ + connect(ui->toolsStringSearchAct, &QAction::triggered, [=](){ memory_string_searcher* mss = new memory_string_searcher(this); mss->show(); }); - connect(toolsDecryptSprxLibsAct, &QAction::triggered, this, &main_window::DecryptSPRXLibraries); - connect(showDebuggerAct, &QAction::triggered, [=](bool checked){ + connect(ui->toolsDecryptSprxLibsAct, &QAction::triggered, this, &main_window::DecryptSPRXLibraries); + connect(ui->showDebuggerAct, &QAction::triggered, [=](bool checked){ checked ? debuggerFrame->show() : debuggerFrame->hide(); guiSettings->SetValue(GUI::mw_debugger, checked); }); - connect(showLogAct, &QAction::triggered, [=](bool checked){ + connect(ui->showLogAct, &QAction::triggered, [=](bool checked){ checked ? logFrame->show() : logFrame->hide(); guiSettings->SetValue(GUI::mw_logger, checked); }); - connect(showGameListAct, &QAction::triggered, [=](bool checked){ + connect(ui->showGameListAct, &QAction::triggered, [=](bool checked){ checked ? gameListFrame->show() : gameListFrame->hide(); guiSettings->SetValue(GUI::mw_gamelist, checked); }); - connect(showControlsAct, &QAction::triggered, this, [=](bool checked){ - checked ? controls->show() : controls->hide(); - guiSettings->SetValue(GUI::mw_controls, checked); + connect(ui->showToolBarAct, &QAction::triggered, [=](bool checked) { + ui->toolBar->setVisible(checked); + guiSettings->SetValue(GUI::mw_toolBarVisible, checked); }); - connect(showGameListToolBarAct, &QAction::triggered, this, [=](bool checked){ + connect(ui->showGameToolBarAct, &QAction::triggered, [=](bool checked) { gameListFrame->SetToolBarVisible(checked); }); - connect(refreshGameListAct, &QAction::triggered, [=](){ + connect(ui->refreshGameListAct, &QAction::triggered, [=](){ gameListFrame->Refresh(true); }); connect(categoryVisibleActGroup, &QActionGroup::triggered, [=](QAction* act) @@ -1216,46 +1047,41 @@ void main_window::CreateConnects() int id; const bool& checked = act->isChecked(); - if (act == showCatHDDGameAct) categories += category::non_disc_games, id = Category::Non_Disc_Game; - else if (act == showCatDiscGameAct) categories += category::disc_Game, id = Category::Disc_Game; - else if (act == showCatHomeAct) categories += category::home, id = Category::Home; - else if (act == showCatAudioVideoAct) categories += category::media, id = Category::Media; - else if (act == showCatGameDataAct) categories += category::data, id = Category::Data; - else if (act == showCatUnknownAct) categories += category::unknown, id = Category::Unknown_Cat; - else if (act == showCatOtherAct) categories += category::others, id = Category::Others; + if (act == ui->showCatHDDGameAct) categories += category::non_disc_games, id = Category::Non_Disc_Game; + else if (act == ui->showCatDiscGameAct) categories += category::disc_Game, id = Category::Disc_Game; + else if (act == ui->showCatHomeAct) categories += category::home, id = Category::Home; + else if (act == ui->showCatAudioVideoAct) categories += category::media, id = Category::Media; + else if (act == ui->showCatGameDataAct) categories += category::data, id = Category::Data; + else if (act == ui->showCatUnknownAct) categories += category::unknown, id = Category::Unknown_Cat; + else if (act == ui->showCatOtherAct) categories += category::others, id = Category::Others; else LOG_WARNING(GENERAL, "categoryVisibleActGroup: category action not found"); gameListFrame->SetCategoryActIcon(categoryVisibleActGroup->actions().indexOf(act), checked); gameListFrame->ToggleCategoryFilter(categories, checked); guiSettings->SetCategoryVisibility(id, checked); }); - connect(aboutAct, &QAction::triggered, this, &main_window::About); - connect(aboutQtAct, &QAction::triggered, qApp, &QApplication::aboutQt); - connect(menu_run, &QAbstractButton::clicked, Pause); - connect(menu_stop, &QAbstractButton::clicked, [=]() { Emu.Stop(); }); - connect(menu_restart, &QAbstractButton::clicked, [=]() { Emu.Stop(); Emu.Load(); }); - connect(menu_capture_frame, &QAbstractButton::clicked, [=](){ - user_asked_for_frame_capture = true; + connect(ui->aboutAct, &QAction::triggered, [this]() { + about_dialog dlg(this); + dlg.exec(); }); + connect(ui->aboutQtAct, &QAction::triggered, qApp, &QApplication::aboutQt); + auto resizeIcons = [=](const int& index){ + if (ui->sizeSlider->value() != index) + { + ui->sizeSlider->setSliderPosition(index); + } + gameListFrame->ResizeIcons(GUI::gl_icon_size.at(index).first, GUI::gl_icon_size.at(index).second, index); + }; connect(iconSizeActGroup, &QActionGroup::triggered, [=](QAction* act) { - QString key; + int index; - if (act == setIconSizeLargeAct) key = GUI::gl_icon_key_large; - else if (act == setIconSizeMediumAct) key = GUI::gl_icon_key_medium; - else if (act == setIconSizeSmallAct) key = GUI::gl_icon_key_small; - else key = GUI::gl_icon_key_tiny; + if (act == ui->setIconSizeTinyAct) index = 0; + else if (act == ui->setIconSizeSmallAct) index = 1; + else if (act == ui->setIconSizeMediumAct) index = 2; + else index = 3; - guiSettings->SetValue(GUI::gl_iconSize, key); - - for (int i = 0; i < GUI::gl_icon_size.count(); i++) - { - if (GUI::gl_icon_size.at(i).first == key) - { - gameListFrame->ResizeIcons(GUI::gl_icon_size.at(i).second, i); - break; - } - } + resizeIcons(index); }); connect (gameListFrame, &game_list_frame::RequestIconSizeActSet, [=](const int& idx) { @@ -1263,7 +1089,7 @@ void main_window::CreateConnects() }); connect(gameListFrame, &game_list_frame::RequestListModeActSet, [=](const bool& isList) { - isList ? setlistModeListAct->trigger() : setlistModeGridAct->trigger(); + isList ? ui->setlistModeListAct->trigger() : ui->setlistModeGridAct->trigger(); }); connect(gameListFrame, &game_list_frame::RequestCategoryActSet, [=](const int& id) { @@ -1271,131 +1097,78 @@ void main_window::CreateConnects() }); connect(listModeActGroup, &QActionGroup::triggered, [=](QAction* act) { - bool isList = act == setlistModeListAct; + bool isList = act == ui->setlistModeListAct; gameListFrame->SetListMode(isList); categoryVisibleActGroup->setEnabled(isList); }); -} - -void main_window::CreateMenus() -{ - QMenu *bootMenu = menuBar()->addMenu(tr("&Boot")); - bootMenu->addAction(bootElfAct); - bootMenu->addAction(bootGameAct); - - m_bootRecentMenu = bootMenu->addMenu(tr("Boot Recent")); - m_bootRecentMenu->setToolTipsVisible(true); - m_bootRecentMenu->addAction(clearRecentAct); - m_bootRecentMenu->addAction(freezeRecentAct); - m_bootRecentMenu->addSeparator(); - - bootMenu->addSeparator(); - bootMenu->addAction(bootInstallPkgAct); - bootMenu->addAction(bootInstallPupAct); - bootMenu->addSeparator(); - bootMenu->addAction(exitAct); - - QMenu *sysMenu = menuBar()->addMenu(tr("&System")); - sysMenu->addAction(sysPauseAct); - sysMenu->addAction(sysStopAct); - sysMenu->addSeparator(); - sysMenu->addAction(sysSendOpenMenuAct); - sysMenu->addAction(sysSendExitAct); - - QMenu *confMenu = menuBar()->addMenu(tr("&Config")); - confMenu->addAction(confSettingsAct); - confMenu->addAction(confPadAct); - confMenu->addSeparator(); - confMenu->addAction(confAutopauseManagerAct); - confMenu->addAction(confVFSDialogAct); - confMenu->addSeparator(); - confMenu->addAction(confSavedataManagerAct); - - QMenu *toolsMenu = menuBar()->addMenu(tr("&Utilities")); - toolsMenu->addAction(toolsCgDisasmAct); - toolsMenu->addAction(toolskernel_explorerAct); - toolsMenu->addAction(toolsmemory_viewerAct); - toolsMenu->addAction(toolsRsxDebuggerAct); - toolsMenu->addAction(toolsStringSearchAct); - toolsMenu->addAction(toolsDecryptSprxLibsAct); - - QMenu *viewMenu = menuBar()->addMenu(tr("&View")); - viewMenu->addAction(showLogAct); - viewMenu->addAction(showDebuggerAct); - viewMenu->addAction(showControlsAct); - viewMenu->addSeparator(); - viewMenu->addAction(showGameListAct); - viewMenu->addAction(showGameListToolBarAct); - viewMenu->addAction(refreshGameListAct); - - QMenu *categoryMenu = viewMenu->addMenu(tr("Show Categories")); - categoryMenu->addActions(categoryVisibleActGroup->actions()); - - QMenu *iconSizeMenu = viewMenu->addMenu(tr("Icon Size")); - iconSizeMenu->addActions(iconSizeActGroup->actions()); - - QMenu *listModeMenu = viewMenu->addMenu(tr("Game List Mode")); - listModeMenu->addActions(listModeActGroup->actions()); - - QMenu *helpMenu = menuBar()->addMenu(tr("&Help")); - helpMenu->addAction(aboutAct); - helpMenu->addAction(aboutQtAct); - - QHBoxLayout* controls_layout = new QHBoxLayout(); - menu_run = new QPushButton(tr("Start")); - menu_stop = new QPushButton(tr("Stop")); - menu_restart = new QPushButton(tr("Restart")); - menu_capture_frame = new QPushButton(tr("Capture Frame")); - menu_run->setEnabled(false); - menu_stop->setEnabled(false); - menu_restart->setEnabled(false); - menu_run->setIcon(icon_play); - menu_stop->setIcon(icon_stop); - menu_restart->setIcon(icon_restart); - controls_layout->addWidget(menu_run); - controls_layout->addWidget(menu_stop); - controls_layout->addWidget(menu_restart); - controls_layout->addWidget(menu_capture_frame); - controls_layout->addSpacing(5); - controls_layout->setContentsMargins(0, 0, 0, 0); - controls = new QWidget(this); - controls->setLayout(controls_layout); - menuBar()->setCornerWidget(controls, Qt::TopRightCorner); + connect(ui->toolBar, &QToolBar::visibilityChanged, [=](bool checked) { + ui->showToolBarAct->setChecked(checked); + guiSettings->SetValue(GUI::mw_toolBarVisible, checked); + }); + connect(ui->toolbar_disc, &QAction::triggered, this, &main_window::BootGame); + connect(ui->toolbar_refresh, &QAction::triggered, [=]() { gameListFrame->Refresh(true); }); + connect(ui->toolbar_stop, &QAction::triggered, [=]() { Emu.Stop(); }); + connect(ui->toolbar_start, &QAction::triggered, Pause); + connect(ui->toolbar_snap, &QAction::triggered, [=]() { user_asked_for_frame_capture = true; }); + connect(ui->toolbar_fullscreen, &QAction::triggered, [=]() { + if (isFullScreen()) + { + showNormal(); + ui->toolbar_fullscreen->setIcon(QIcon(":/Icons/fullscreen.png")); + } + else + { + showFullScreen(); + ui->toolbar_fullscreen->setIcon(QIcon(":/Icons/fullscreen_invert.png")); + } + }); + connect(ui->toolbar_controls, &QAction::triggered, [=]() { pad_settings_dialog dlg(this); dlg.exec(); }); + connect(ui->toolbar_config, &QAction::triggered, [=]() { openSettings(0); }); + connect(ui->toolbar_list, &QAction::triggered, [=]() { ui->setlistModeListAct->trigger(); }); + connect(ui->toolbar_grid, &QAction::triggered, [=]() { ui->setlistModeGridAct->trigger(); }); + //connect(ui->toolbar_sort, &QAction::triggered, gameListFrame, sort); + connect(ui->sizeSlider, &QSlider::valueChanged, resizeIcons); + connect(ui->searchBar, &QLineEdit::textChanged, gameListFrame, &game_list_frame::SetSearchText); } void main_window::CreateDockWindows() { - gameListFrame = new game_list_frame(guiSettings, m_Render_Creator, this); + // new mainwindow widget because existing seems to be bugged for now + m_mw = new QMainWindow(); + + gameListFrame = new game_list_frame(guiSettings, m_Render_Creator, m_mw); gameListFrame->setObjectName("gamelist"); - debuggerFrame = new debugger_frame(this); + debuggerFrame = new debugger_frame(m_mw); debuggerFrame->setObjectName("debugger"); - logFrame = new log_frame(guiSettings, this); + logFrame = new log_frame(guiSettings, m_mw); logFrame->setObjectName("logger"); - addDockWidget(Qt::LeftDockWidgetArea, gameListFrame); - addDockWidget(Qt::LeftDockWidgetArea, logFrame); - addDockWidget(Qt::RightDockWidgetArea, debuggerFrame); + m_mw->addDockWidget(Qt::LeftDockWidgetArea, gameListFrame); + m_mw->addDockWidget(Qt::LeftDockWidgetArea, logFrame); + m_mw->addDockWidget(Qt::RightDockWidgetArea, debuggerFrame); + m_mw->setDockNestingEnabled(true); + setCentralWidget(m_mw); connect(logFrame, &log_frame::log_frameClosed, [=]() { - if (showLogAct->isChecked()) + if (ui->showLogAct->isChecked()) { - showLogAct->setChecked(false); + ui->showLogAct->setChecked(false); guiSettings->SetValue(GUI::mw_logger, false); } }); connect(debuggerFrame, &debugger_frame::DebugFrameClosed, [=](){ - if (showDebuggerAct->isChecked()) + if (ui->showDebuggerAct->isChecked()) { - showDebuggerAct->setChecked(false); + ui->showDebuggerAct->setChecked(false); guiSettings->SetValue(GUI::mw_debugger, false); } }); connect(gameListFrame, &game_list_frame::game_list_frameClosed, [=]() { - if (showGameListAct->isChecked()) + if (ui->showGameListAct->isChecked()) { - showGameListAct->setChecked(false); + ui->showGameListAct->setChecked(false); guiSettings->SetValue(GUI::mw_gamelist, false); } }); @@ -1420,14 +1193,15 @@ void main_window::ConfigureGuiFromSettings(bool configureAll) } restoreState(guiSettings->GetValue(GUI::mw_windowState).toByteArray()); + m_mw->restoreState(guiSettings->GetValue(GUI::mw_mwState).toByteArray()); - freezeRecentAct->setChecked(guiSettings->GetValue(GUI::rg_freeze).toBool()); + ui->freezeRecentAct->setChecked(guiSettings->GetValue(GUI::rg_freeze).toBool()); m_rg_entries = guiSettings->Var2List(guiSettings->GetValue(GUI::rg_entries)); // clear recent games menu of actions for (auto act : m_recentGameActs) { - m_bootRecentMenu->removeAction(act); + ui->bootRecentMenu->removeAction(act); } m_recentGameActs.clear(); // Fill the recent games menu @@ -1440,7 +1214,7 @@ void main_window::ConfigureGuiFromSettings(bool configureAll) if (act) { m_recentGameActs.append(act); - m_bootRecentMenu->addAction(act); + ui->bootRecentMenu->addAction(act); } else { @@ -1448,34 +1222,37 @@ void main_window::ConfigureGuiFromSettings(bool configureAll) } } - showLogAct->setChecked(logFrame->isVisible() || guiSettings->GetValue(GUI::mw_logger).toBool()); - showGameListAct->setChecked(gameListFrame->isVisible() || guiSettings->GetValue(GUI::mw_gamelist).toBool()); - showDebuggerAct->setChecked(debuggerFrame->isVisible() || guiSettings->GetValue(GUI::mw_debugger).toBool()); - showControlsAct->setChecked(controls->isVisible() || guiSettings->GetValue(GUI::mw_controls).toBool()); - showGameListToolBarAct->setChecked(guiSettings->GetValue(GUI::gl_toolBarVisible).toBool()); - guiSettings->GetValue(GUI::mw_controls).toBool() ? controls->show() : controls->hide(); + ui->showLogAct->setChecked(guiSettings->GetValue(GUI::mw_logger).toBool()); + ui->showGameListAct->setChecked(guiSettings->GetValue(GUI::mw_gamelist).toBool()); + ui->showDebuggerAct->setChecked(guiSettings->GetValue(GUI::mw_debugger).toBool()); + ui->showToolBarAct->setChecked(guiSettings->GetValue(GUI::mw_toolBarVisible).toBool()); + ui->showGameToolBarAct->setChecked(guiSettings->GetValue(GUI::gl_toolBarVisible).toBool()); - showCatHDDGameAct->setChecked(guiSettings->GetCategoryVisibility(Category::Non_Disc_Game)); - showCatDiscGameAct->setChecked(guiSettings->GetCategoryVisibility(Category::Disc_Game)); - showCatHomeAct->setChecked(guiSettings->GetCategoryVisibility(Category::Home)); - showCatAudioVideoAct->setChecked(guiSettings->GetCategoryVisibility(Category::Media)); - showCatGameDataAct->setChecked(guiSettings->GetCategoryVisibility(Category::Data)); - showCatUnknownAct->setChecked(guiSettings->GetCategoryVisibility(Category::Unknown_Cat)); - showCatOtherAct->setChecked(guiSettings->GetCategoryVisibility(Category::Others)); + debuggerFrame->setVisible(ui->showDebuggerAct->isChecked()); + logFrame->setVisible(ui->showLogAct->isChecked()); + gameListFrame->setVisible(ui->showGameListAct->isChecked()); + gameListFrame->SetToolBarVisible(ui->showGameToolBarAct->isChecked()); + ui->toolBar->setVisible(ui->showToolBarAct->isChecked()); + + ui->showCatHDDGameAct->setChecked(guiSettings->GetCategoryVisibility(Category::Non_Disc_Game)); + ui->showCatDiscGameAct->setChecked(guiSettings->GetCategoryVisibility(Category::Disc_Game)); + ui->showCatHomeAct->setChecked(guiSettings->GetCategoryVisibility(Category::Home)); + ui->showCatAudioVideoAct->setChecked(guiSettings->GetCategoryVisibility(Category::Media)); + ui->showCatGameDataAct->setChecked(guiSettings->GetCategoryVisibility(Category::Data)); + ui->showCatUnknownAct->setChecked(guiSettings->GetCategoryVisibility(Category::Unknown_Cat)); + ui->showCatOtherAct->setChecked(guiSettings->GetCategoryVisibility(Category::Others)); QString key = guiSettings->GetValue(GUI::gl_iconSize).toString(); - if (key == GUI::gl_icon_key_large) setIconSizeLargeAct->setChecked(true); - else if (key == GUI::gl_icon_key_medium) setIconSizeMediumAct->setChecked(true); - else if (key == GUI::gl_icon_key_small) setIconSizeSmallAct->setChecked(true); - else setIconSizeTinyAct->setChecked(true); - + if (key == GUI::gl_icon_key_large) ui->setIconSizeLargeAct->setChecked(true); + else if (key == GUI::gl_icon_key_medium) ui->setIconSizeMediumAct->setChecked(true); + else if (key == GUI::gl_icon_key_small) ui->setIconSizeSmallAct->setChecked(true); + else ui->setIconSizeTinyAct->setChecked(true); bool isListMode = guiSettings->GetValue(GUI::gl_listMode).toBool(); - if (isListMode) setlistModeListAct->setChecked(true); - else setlistModeGridAct->setChecked(true); + if (isListMode) ui->setlistModeListAct->setChecked(true); + else ui->setlistModeGridAct->setChecked(true); categoryVisibleActGroup->setEnabled(isListMode); - if (configureAll) { // Handle log settings @@ -1488,7 +1265,12 @@ void main_window::ConfigureGuiFromSettings(bool configureAll) void main_window::keyPressEvent(QKeyEvent *keyEvent) { - if (keyEvent->modifiers() == Qt::ControlModifier) + if ((keyEvent->modifiers() & Qt::AltModifier) && keyEvent->key() == Qt::Key_Return || isFullScreen() && keyEvent->key() == Qt::Key_Escape) + { + ui->toolbar_fullscreen->trigger(); + } + + if (keyEvent->modifiers() & Qt::ControlModifier) { switch (keyEvent->key()) { @@ -1500,6 +1282,18 @@ void main_window::keyPressEvent(QKeyEvent *keyEvent) } } +void main_window::mouseDoubleClickEvent(QMouseEvent *event) +{ + if (isFullScreen()) + { + if (event->button() == Qt::LeftButton) + { + showNormal(); + ui->toolbar_fullscreen->setIcon(QIcon(":/Icons/fullscreen.png")); + } + } +} + /** Override the Qt close event to have the emulator stop and the application die. May add a warning dialog in future. */ void main_window::closeEvent(QCloseEvent* closeEvent) @@ -1515,7 +1309,6 @@ void main_window::closeEvent(QCloseEvent* closeEvent) setAttribute(Qt::WA_DeleteOnClose); QMainWindow::close(); - // It's possible to have other windows open, like games. So, force the application to die. QApplication::quit(); } diff --git a/rpcs3/rpcs3qt/main_window.h b/rpcs3/rpcs3qt/main_window.h index b9ba1f0b5a..0715483ed6 100644 --- a/rpcs3/rpcs3qt/main_window.h +++ b/rpcs3/rpcs3qt/main_window.h @@ -18,28 +18,31 @@ #include +namespace Ui { + class main_window; +} + class main_window : public QMainWindow { Q_OBJECT + Ui::main_window *ui; + bool m_sys_menu_opened; Render_Creator m_Render_Creator; - QWidget* controls; - QIcon appIcon; QIcon icon_play; QIcon icon_pause; QIcon icon_stop; QIcon icon_restart; - QPushButton* menu_run; - QPushButton* menu_stop; - QPushButton* menu_restart; - QPushButton* menu_capture_frame; - #ifdef _WIN32 + QIcon icon_thumb_play; + QIcon icon_thumb_pause; + QIcon icon_thumb_stop; + QIcon icon_thumb_restart; QWinThumbnailToolBar *thumb_bar; QWinThumbnailToolButton *thumb_playPause; QWinThumbnailToolButton *thumb_stop; @@ -72,7 +75,6 @@ private Q_SLOTS: void InstallPkg(); void InstallPup(); void DecryptSPRXLibraries(); - void About(); void SaveWindowState(); @@ -82,69 +84,25 @@ protected: private: void CreateActions(); void CreateConnects(); - void CreateMenus(); void CreateDockWindows(); void ConfigureGuiFromSettings(bool configureAll = false); void EnableMenus(bool enabled); void keyPressEvent(QKeyEvent *keyEvent); + void mouseDoubleClickEvent(QMouseEvent *event); QAction* CreateRecentAction(const q_string_pair& entry, const uint& sc_idx); void BootRecentAction(const QAction* act); void AddRecentAction(const q_string_pair& entry); q_pair_list m_rg_entries; - QMenu* m_bootRecentMenu; QList m_recentGameActs; QActionGroup* iconSizeActGroup; QActionGroup* listModeActGroup; QActionGroup* categoryVisibleActGroup; - QAction *bootElfAct; - QAction *bootGameAct; - QAction *clearRecentAct; - QAction *freezeRecentAct; - QAction *bootInstallPkgAct; - QAction *bootInstallPupAct; - QAction *sysPauseAct; - QAction *sysStopAct; - QAction *sysSendOpenMenuAct; - QAction *sysSendExitAct; - QAction *confSettingsAct; - QAction *confPadAct; - QAction *confAutopauseManagerAct; - QAction *confVFSDialogAct; - QAction *confSavedataManagerAct; - QAction *toolsCgDisasmAct; - QAction *toolskernel_explorerAct; - QAction *toolsmemory_viewerAct; - QAction *toolsRsxDebuggerAct; - QAction *toolsStringSearchAct; - QAction *toolsDecryptSprxLibsAct; - QAction *exitAct; - QAction *showDebuggerAct; - QAction *showLogAct; - QAction *showGameListAct; - QAction *showControlsAct; - QAction *refreshGameListAct; - QAction *showGameListToolBarAct; - QAction* showCatHDDGameAct; - QAction* showCatDiscGameAct; - QAction* showCatHomeAct; - QAction* showCatAudioVideoAct; - QAction* showCatGameDataAct; - QAction* showCatUnknownAct; - QAction* showCatOtherAct; - QAction* setIconSizeTinyAct; - QAction* setIconSizeSmallAct; - QAction* setIconSizeMediumAct; - QAction* setIconSizeLargeAct; - QAction* setlistModeListAct; - QAction* setlistModeGridAct; - QAction *aboutAct; - QAction *aboutQtAct; - // Dockable widget frames + QMainWindow *m_mw; log_frame *logFrame; debugger_frame *debuggerFrame; game_list_frame *gameListFrame; diff --git a/rpcs3/rpcs3qt/main_window.ui b/rpcs3/rpcs3qt/main_window.ui new file mode 100644 index 0000000000..c2726877e4 --- /dev/null +++ b/rpcs3/rpcs3qt/main_window.ui @@ -0,0 +1,945 @@ + + + main_window + + + + 0 + 0 + 1058 + 580 + + + + + 0 + 0 + + + + + 4 + 0 + + + + RPCS3 + + + false + + + true + + + true + + + QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks|QMainWindow::GroupedDragging + + + + + 0 + 0 + + + + + + 480 + 10 + 251 + 31 + + + + + 0 + 0 + + + + + 10 + 75 + true + + + + Qt::ClickFocus + + + false + + + Search apps ... + + + false + + + + + + 300 + 10 + 160 + 31 + + + + + 0 + 0 + + + + Qt::ClickFocus + + + QSlider::groove:horizontal { + border: 0px solid #999999; + height: 20px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */ + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4); + margin: 2px 0; +} + +QSlider::handle:horizontal { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f); + border: 0px solid #5c5c5c; + width: 15px; + margin: -5px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ + border-radius: 3px; +} + + + Qt::Horizontal + + + QSlider::NoTicks + + + + + + + 0 + 0 + 1058 + 21 + + + + + File + + + + true + + + Boot Recent + + + + + + + + + + + + + + + + + Emulation + + + + + + + + + + + + + Configuration + + + + + + + + + + + + + + Manage + + + + + + + + + + + Utilities + + + + + + + + + + + + View + + + + Game List Icons + + + + + + + + + Game List Mode + + + + + + + Game Categories + + + + + + + + + + + + + + + + + + + + + + + + + Help + + + + + + + + + + + + + + + + + Qt::PreventContextMenu + + + Show tool bar + + + background-color: rgb(227, 227, 227); +selection-background-color: rgb(85, 170, 255); + + + false + + + Qt::TopToolBarArea + + + + 30 + 30 + + + + Qt::ToolButtonIconOnly + + + false + + + TopToolBarArea + + + false + + + + + + + + + + + + + + + + + + + + + Boot SELF/ELF + + + + + Boot Game + + + + + Install .pkg + + + Install application from pkg file + + + + + Install .pup + + + Install firmware from PS3UPDAT.PUP + + + + + false + + + + :/Icons/pause.png:/Icons/pause.png + + + Pause + + + Start Emulation + + + + + false + + + + :/Icons/stop.png:/Icons/stop.png + + + Stop + + + Stop Emulation + + + + + false + + + Send Open System Menu CMD + + + + + false + + + Send Exit CMD + + + + + CPU + + + Configure CPU + + + + + Graphics + + + Configure Graphics + + + + + Controls + + + Configure Controls + + + + + Audio + + + Configure Audio + + + + + Input/Output + + + Configure Input/Output + + + + + System + + + Configure System + + + + + false + + + Auto Pause + + + Configure Auto Pause + + + + + Exit + + + Exit RPCS3 + + + Exit the application + + + + + false + + + Save Data + + + Manage Save Data + + + + + false + + + Trophies + + + Manage Trophies + + + + + false + + + User Accounts + + + Manage User Accounts + + + + + false + + + Manage .yml Patches + + + + + Cg Disasm + + + + + false + + + Kernel Explorer + + + + + false + + + Memory Viewer + + + + + false + + + RSX Debugger + + + + + false + + + String Search + + + + + Decrypt .sprx Libraries + + + + + true + + + Show Debugger + + + + + true + + + Show Log/TTY + + + + + About RPCS3 + + + + + About Qt + + + + + Show Controls + + + + + true + + + Show Game List + + + + + true + + + Show Tool Bar + + + + + Game List Refresh + + + + + Game List Categories + + + + + false + + + RAP Files + + + + + false + + + Check for Updates + + + + + Virtual File System + + + + + List Clear + + + + + true + + + List Freeze + + + + + true + + + Tiny + + + + + true + + + true + + + Small + + + + + true + + + Medium + + + + + true + + + Large + + + + + true + + + true + + + List View + + + + + true + + + Grid View + + + + + false + + + + :/Icons/restart.png:/Icons/restart.png + + + Restart + + + + + Pause + + + + + Save State + + + + + true + + + true + + + HDD Games + + + + + true + + + true + + + Disc Games + + + + + true + + + true + + + Home + + + + + true + + + true + + + Audio/Video + + + + + true + + + true + + + Game Data + + + + + true + + + true + + + Unknown + + + + + Capture Frame + + + Capture frame + + + + + + :/Icons/pause.png:/Icons/pause.png + + + start + + + Pause emulation + + + + + + :/Icons/stop.png:/Icons/stop.png + + + stop + + + Stop emulation + + + + + + :/Icons/configure.png:/Icons/configure.png + + + config + + + Configuration + + + + + + :/Icons/controls.png:/Icons/controls.png + + + controls + + + Configure controls + + + + + + :/Icons/screenshot.png:/Icons/screenshot.png + + + snap + + + Capture frame + + + + + + :/Icons/fullscreen.png:/Icons/fullscreen.png + + + fullscreen + + + Toggle fullscreen + + + + + + :/Icons/list.png:/Icons/list.png + + + list + + + Switch to list mode + + + + + + :/Icons/grid.png:/Icons/grid.png + + + grid + + + Switch to grid mode + + + + + + :/Icons/sort.png:/Icons/sort.png + + + sort + + + Sort options + + + + + + :/Icons/refresh.png:/Icons/refresh.png + + + refresh + + + Refresh gamelist + + + + + + :/Icons/disc.png:/Icons/disc.png + + + disc + + + Boot game + + + + + true + + + true + + + Other + + + + + true + + + Show Game Tool Bar + + + + + + + + + + diff --git a/rpcs3/rpcs3qt/misc_tab.cpp b/rpcs3/rpcs3qt/misc_tab.cpp deleted file mode 100644 index 63f00bbc75..0000000000 --- a/rpcs3/rpcs3qt/misc_tab.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "misc_tab.h" -#include "main_window.h" - -misc_tab::misc_tab(std::shared_ptr xemu_settings, QWidget *parent) : QWidget(parent) -{ - // Left Widgets - QCheckBox *exitOnStop = xemu_settings->CreateEnhancedCheckBox(emu_settings::ExitRPCS3OnFinish, this); - QCheckBox *alwaysStart = xemu_settings->CreateEnhancedCheckBox(emu_settings::StartOnBoot, this); - QCheckBox *startGameFullscreen = xemu_settings->CreateEnhancedCheckBox(emu_settings::StartGameFullscreen, this); - QCheckBox *showFPSInTitle = xemu_settings->CreateEnhancedCheckBox(emu_settings::ShowFPSInTitle, this); - - // Left layout - QVBoxLayout *vbox_left = new QVBoxLayout; - vbox_left->addWidget(exitOnStop); - vbox_left->addWidget(alwaysStart); - vbox_left->addWidget(startGameFullscreen); - vbox_left->addWidget(showFPSInTitle); - vbox_left->addStretch(1); - - // Main Layout - QHBoxLayout *hbox = new QHBoxLayout; - hbox->addLayout(vbox_left); - setLayout(hbox); -} diff --git a/rpcs3/rpcs3qt/misc_tab.h b/rpcs3/rpcs3qt/misc_tab.h deleted file mode 100644 index bf50049d2c..0000000000 --- a/rpcs3/rpcs3qt/misc_tab.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include "emu_settings.h" - -#include - -#include - -class misc_tab : public QWidget -{ - Q_OBJECT - -public: - explicit misc_tab(std::shared_ptr xemu_settings, QWidget *parent = 0); -}; diff --git a/rpcs3/rpcs3qt/networking_tab.cpp b/rpcs3/rpcs3qt/networking_tab.cpp deleted file mode 100644 index bf8e7fe264..0000000000 --- a/rpcs3/rpcs3qt/networking_tab.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include -#include -#include - -#include "networking_tab.h" - -networking_tab::networking_tab(std::shared_ptr xemu_settings, QWidget *parent) : QWidget(parent) -{ - // Connection status - QGroupBox *netStatus = new QGroupBox(tr("Connection status")); - - QComboBox *netStatusBox = xemu_settings->CreateEnhancedComboBox(emu_settings::ConnectionStatus, this); - - QVBoxLayout *netStatusVbox = new QVBoxLayout; - netStatusVbox->addWidget(netStatusBox); - netStatus->setLayout(netStatusVbox); - - // Main layout - QVBoxLayout *vbox = new QVBoxLayout; - vbox->addWidget(netStatus); - vbox->addStretch(); - - QHBoxLayout *hbox = new QHBoxLayout; - hbox->addLayout(vbox); - hbox->addStretch(); - setLayout(hbox); -} diff --git a/rpcs3/rpcs3qt/networking_tab.h b/rpcs3/rpcs3qt/networking_tab.h deleted file mode 100644 index eca6f3be63..0000000000 --- a/rpcs3/rpcs3qt/networking_tab.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include "emu_settings.h" - -#include - -#include - -class networking_tab : public QWidget -{ - Q_OBJECT - -public: - explicit networking_tab(std::shared_ptr xemu_settings, QWidget *parent = 0); -}; diff --git a/rpcs3/rpcs3qt/pad_settings_dialog.cpp b/rpcs3/rpcs3qt/pad_settings_dialog.cpp index 5da4c630bf..38f1dae108 100644 --- a/rpcs3/rpcs3qt/pad_settings_dialog.cpp +++ b/rpcs3/rpcs3qt/pad_settings_dialog.cpp @@ -9,6 +9,7 @@ #include "stdafx.h" #include "pad_settings_dialog.h" +#include "ui_pad_settings_dialog.h" // TODO: rewrite with std::chrono or QTimer #include @@ -17,278 +18,61 @@ static const int PadButtonWidth = 60; extern keyboard_pad_config g_kbpad_config; -pad_settings_dialog::pad_settings_dialog(QWidget *parent) : QDialog(parent) +pad_settings_dialog::pad_settings_dialog(QWidget *parent) : QDialog(parent), ui(new Ui::pad_settings_dialog) { - // Left Analog Stick - QGroupBox *roundStickL = new QGroupBox(tr("Left Analog Stick")); - QVBoxLayout *roundStickLMainVBox = new QVBoxLayout; - QVBoxLayout *roundStickLVBox = new QVBoxLayout; - QHBoxLayout *roundStickLHBox1 = new QHBoxLayout; - QHBoxLayout *roundStickLHBox2 = new QHBoxLayout; - QHBoxLayout *roundStickLHBox3 = new QHBoxLayout; - b_up_lstick = new QPushButton(tr("W")); - b_left_lstick = new QPushButton(tr("A")); - b_right_lstick = new QPushButton(tr("D")); - b_down_lstick = new QPushButton(tr("S")); - roundStickLHBox1->addWidget(b_up_lstick); - roundStickLHBox2->addWidget(b_left_lstick); - roundStickLHBox2->addWidget(b_right_lstick); - roundStickLHBox3->addWidget(b_down_lstick); - roundStickLVBox->addLayout(roundStickLHBox1); - roundStickLVBox->addLayout(roundStickLHBox2); - roundStickLVBox->addLayout(roundStickLHBox3); - roundStickL->setLayout(roundStickLVBox); - roundStickLMainVBox->addWidget(roundStickL); - roundStickLMainVBox->addStretch(); - b_up_lstick->setFixedWidth(PadButtonWidth); - b_left_lstick->setFixedWidth(PadButtonWidth); - b_right_lstick->setFixedWidth(PadButtonWidth); - b_down_lstick->setFixedWidth(PadButtonWidth); + ui->setupUi(this); - // D-Pad - QGroupBox *roundPadControls = new QGroupBox(tr("D-Pad")); - QVBoxLayout *roundPadControlsMainVBox = new QVBoxLayout; - QVBoxLayout *roundPadControlsVBox = new QVBoxLayout; - QHBoxLayout *roundPadControlsHBox1 = new QHBoxLayout; - QHBoxLayout *roundPadControlsHBox2 = new QHBoxLayout; - QHBoxLayout *roundPadControlsHBox3 = new QHBoxLayout; - b_up = new QPushButton(tr("Up")); - b_left = new QPushButton(tr("Left")); - b_right = new QPushButton(tr("Right")); - b_down = new QPushButton(tr("Down")); - roundPadControlsHBox1->addWidget(b_up); - roundPadControlsHBox2->addWidget(b_left); - roundPadControlsHBox2->addWidget(b_right); - roundPadControlsHBox3->addWidget(b_down); - roundPadControlsVBox->addLayout(roundPadControlsHBox1); - roundPadControlsVBox->addLayout(roundPadControlsHBox2); - roundPadControlsVBox->addLayout(roundPadControlsHBox3); - roundPadControls->setLayout(roundPadControlsVBox); - roundPadControlsMainVBox->addWidget(roundPadControls); - roundPadControlsMainVBox->addStretch(); - b_up->setFixedWidth(PadButtonWidth); - b_left->setFixedWidth(PadButtonWidth); - b_right->setFixedWidth(PadButtonWidth); - b_down->setFixedWidth(PadButtonWidth); - - // Left Shifts - QGroupBox *roundPadShiftsL = new QGroupBox(tr("Left Shifts")); - QGroupBox *roundPadL1 = new QGroupBox(tr("L1")); - QGroupBox *roundPadL2 = new QGroupBox(tr("L2")); - QGroupBox *roundPadL3 = new QGroupBox(tr("L3")); - QVBoxLayout *roundPadShiftsLVbox = new QVBoxLayout; - QVBoxLayout *roundPadL1Vbox = new QVBoxLayout; - QVBoxLayout *roundPadL2Vbox = new QVBoxLayout; - QVBoxLayout *roundPadL3Vbox = new QVBoxLayout; - b_shift_l1 = new QPushButton(tr("Q")); - b_shift_l2 = new QPushButton(tr("R")); - b_shift_l3 = new QPushButton(tr("F")); - roundPadL1Vbox->addWidget(b_shift_l1); - roundPadL2Vbox->addWidget(b_shift_l2); - roundPadL3Vbox->addWidget(b_shift_l3); - roundPadL1->setLayout(roundPadL1Vbox); - roundPadL2->setLayout(roundPadL2Vbox); - roundPadL3->setLayout(roundPadL3Vbox); - roundPadShiftsLVbox->addWidget(roundPadL1); - roundPadShiftsLVbox->addWidget(roundPadL2); - roundPadShiftsLVbox->addWidget(roundPadL3); - roundPadShiftsL->setLayout(roundPadShiftsLVbox); - b_shift_l1->setFixedWidth(PadButtonWidth); - b_shift_l2->setFixedWidth(PadButtonWidth); - b_shift_l3->setFixedWidth(PadButtonWidth); - - // Start / Select - QGroupBox *roundPadSystem = new QGroupBox(tr("System")); - QGroupBox *roundPadSelect = new QGroupBox(tr("Select")); - QGroupBox *roundPadStart = new QGroupBox(tr("Start")); - QVBoxLayout *roundPadSystemMainVbox = new QVBoxLayout; - QVBoxLayout *roundPadSystemVbox = new QVBoxLayout; - QVBoxLayout *roundPadSelectVbox = new QVBoxLayout; - QVBoxLayout *roundPadStartVbox = new QVBoxLayout; - b_select = new QPushButton(tr("Space")); - b_start = new QPushButton(tr("Enter")); - roundPadSelectVbox->addWidget(b_select); - roundPadStartVbox->addWidget(b_start); - roundPadSelect->setLayout(roundPadSelectVbox); - roundPadStart->setLayout(roundPadStartVbox); - roundPadSystemVbox->addWidget(roundPadSelect); - roundPadSystemVbox->addWidget(roundPadStart); - roundPadSystem->setLayout(roundPadSystemVbox); - roundPadSystemMainVbox->addWidget(roundPadSystem); - roundPadSystemMainVbox->addStretch(); - b_select->setFixedWidth(PadButtonWidth); - b_start->setFixedWidth(PadButtonWidth); - - // Right Shifts - QGroupBox *roundPadShiftsR = new QGroupBox(tr("Right Shifts")); - QGroupBox *roundPadR1 = new QGroupBox(tr("R1")); - QGroupBox *roundPadR2 = new QGroupBox(tr("R2")); - QGroupBox *roundPadR3 = new QGroupBox(tr("R3")); - QVBoxLayout *roundPadShiftsRVbox = new QVBoxLayout; - QVBoxLayout *roundPadR1Vbox = new QVBoxLayout; - QVBoxLayout *roundPadR2Vbox = new QVBoxLayout; - QVBoxLayout *roundPadR3Vbox = new QVBoxLayout; - b_shift_r1 = new QPushButton(tr("E")); - b_shift_r2 = new QPushButton(tr("T")); - b_shift_r3 = new QPushButton(tr("G")); - roundPadR1Vbox->addWidget(b_shift_r1); - roundPadR2Vbox->addWidget(b_shift_r2); - roundPadR3Vbox->addWidget(b_shift_r3); - roundPadR1->setLayout(roundPadR1Vbox); - roundPadR2->setLayout(roundPadR2Vbox); - roundPadR3->setLayout(roundPadR3Vbox); - roundPadShiftsRVbox->addWidget(roundPadR1); - roundPadShiftsRVbox->addWidget(roundPadR2); - roundPadShiftsRVbox->addWidget(roundPadR3); - roundPadShiftsR->setLayout(roundPadShiftsRVbox); - b_shift_r1->setFixedWidth(PadButtonWidth); - b_shift_r2->setFixedWidth(PadButtonWidth); - b_shift_r3->setFixedWidth(PadButtonWidth); - - // Action buttons - QGroupBox *roundpad_buttons = new QGroupBox(tr("Buttons")); - QGroupBox *roundPadSquare = new QGroupBox(tr("Square")); - QGroupBox *roundPadCross = new QGroupBox(tr("Cross")); - QGroupBox *roundPadCircle = new QGroupBox(tr("Circle")); - QGroupBox *roundPadTriangle = new QGroupBox(tr("Triangle")); - QVBoxLayout *roundpad_buttonsVBox = new QVBoxLayout; - QHBoxLayout *roundpad_buttonsHBox1 = new QHBoxLayout; - QHBoxLayout *roundpad_buttonsHBox2 = new QHBoxLayout; - QHBoxLayout *roundpad_buttonsHBox3 = new QHBoxLayout; - QHBoxLayout *roundpad_buttonsHBox21 = new QHBoxLayout; - QHBoxLayout *roundpad_buttonsHBox22 = new QHBoxLayout; - QHBoxLayout *roundpad_buttonsHBox23 = new QHBoxLayout; - QHBoxLayout *roundpad_buttonsHBox24 = new QHBoxLayout; - b_triangle = new QPushButton(tr("V")); - b_square = new QPushButton(tr("Z")); - b_circle = new QPushButton(tr("C")); - b_cross = new QPushButton(tr("X")); - roundpad_buttonsHBox21->addWidget(b_triangle); - roundpad_buttonsHBox22->addWidget(b_square); - roundpad_buttonsHBox23->addWidget(b_circle); - roundpad_buttonsHBox24->addWidget(b_cross); - roundPadTriangle->setLayout(roundpad_buttonsHBox21); - roundPadSquare->setLayout(roundpad_buttonsHBox22); - roundPadCircle->setLayout(roundpad_buttonsHBox23); - roundPadCross->setLayout(roundpad_buttonsHBox24); - roundpad_buttonsHBox1->addStretch(); - roundpad_buttonsHBox1->addWidget(roundPadTriangle); - roundpad_buttonsHBox1->addStretch(); - roundpad_buttonsHBox2->addWidget(roundPadSquare); - roundpad_buttonsHBox2->addWidget(roundPadCircle); - roundpad_buttonsHBox3->addStretch(); - roundpad_buttonsHBox3->addWidget(roundPadCross); - roundpad_buttonsHBox3->addStretch(); - roundpad_buttonsVBox->addLayout(roundpad_buttonsHBox1); - roundpad_buttonsVBox->addLayout(roundpad_buttonsHBox2); - roundpad_buttonsVBox->addLayout(roundpad_buttonsHBox3); - roundpad_buttons->setLayout(roundpad_buttonsVBox); - b_triangle->setFixedWidth(PadButtonWidth); - b_square->setFixedWidth(PadButtonWidth); - b_circle->setFixedWidth(PadButtonWidth); - b_cross->setFixedWidth(PadButtonWidth); - - // Right Analog Stick - QGroupBox *roundStickR = new QGroupBox(tr("Right Analog Stick")); - QVBoxLayout *roundStickRMainVBox = new QVBoxLayout; - QVBoxLayout *roundStickRVBox = new QVBoxLayout; - QHBoxLayout *roundStickRHBox1 = new QHBoxLayout; - QHBoxLayout *roundStickRHBox2 = new QHBoxLayout; - QHBoxLayout *roundStickRHBox3 = new QHBoxLayout; - b_up_rstick = new QPushButton(tr("PgUp")); - b_left_rstick = new QPushButton(tr("Home")); - b_right_rstick = new QPushButton(tr("End")); - b_down_rstick = new QPushButton(tr("PgDown")); - roundStickRHBox1->addWidget(b_up_rstick); - roundStickRHBox2->addWidget(b_left_rstick); - roundStickRHBox2->addWidget(b_right_rstick); - roundStickRHBox3->addWidget(b_down_rstick); - roundStickRVBox->addLayout(roundStickRHBox1); - roundStickRVBox->addLayout(roundStickRHBox2); - roundStickRVBox->addLayout(roundStickRHBox3); - roundStickR->setLayout(roundStickRVBox); - roundStickRMainVBox->addWidget(roundStickR); - roundStickRMainVBox->addStretch(); - b_up_rstick->setFixedWidth(PadButtonWidth); - b_left_rstick->setFixedWidth(PadButtonWidth); - b_right_rstick->setFixedWidth(PadButtonWidth); - b_down_rstick->setFixedWidth(PadButtonWidth); - - // Buttons - b_reset = new QPushButton(tr("By default")); - - b_ok = new QPushButton(tr("OK")); - - b_cancel = new QPushButton(tr("Cancel")); - b_cancel->setDefault(true); - connect(b_cancel, &QAbstractButton::clicked, this, &QWidget::close); + ui->b_cancel->setDefault(true); + connect(ui->b_cancel, &QAbstractButton::clicked, this, &QWidget::close); // Handling QButtonGroup *padButtons = new QButtonGroup(this); - padButtons->addButton(b_left_lstick, 1); - padButtons->addButton(b_down_lstick, 2); - padButtons->addButton(b_right_lstick, 3); - padButtons->addButton(b_up_lstick, 4); + padButtons->addButton(ui->b_left_lstick, 1); + padButtons->addButton(ui->b_down_lstick, 2); + padButtons->addButton(ui->b_right_lstick, 3); + padButtons->addButton(ui->b_up_lstick, 4); - padButtons->addButton(b_left, 5); - padButtons->addButton(b_down, 6); - padButtons->addButton(b_right, 7); - padButtons->addButton(b_up, 8); + padButtons->addButton(ui->b_left, 5); + padButtons->addButton(ui->b_down, 6); + padButtons->addButton(ui->b_right, 7); + padButtons->addButton(ui->b_up, 8); - padButtons->addButton(b_shift_l1, 9); - padButtons->addButton(b_shift_l2, 10); - padButtons->addButton(b_shift_l3, 11); + padButtons->addButton(ui->b_shift_l1, 9); + padButtons->addButton(ui->b_shift_l2, 10); + padButtons->addButton(ui->b_shift_l3, 11); - padButtons->addButton(b_start, 12); - padButtons->addButton(b_select, 13); + padButtons->addButton(ui->b_start, 12); + padButtons->addButton(ui->b_select, 13); - padButtons->addButton(b_shift_r1, 14); - padButtons->addButton(b_shift_r2, 15); - padButtons->addButton(b_shift_r3, 16); + padButtons->addButton(ui->b_shift_r1, 14); + padButtons->addButton(ui->b_shift_r2, 15); + padButtons->addButton(ui->b_shift_r3, 16); - padButtons->addButton(b_square, 17); - padButtons->addButton(b_cross, 18); - padButtons->addButton(b_circle, 19); - padButtons->addButton(b_triangle, 20); + padButtons->addButton(ui->b_square, 17); + padButtons->addButton(ui->b_cross, 18); + padButtons->addButton(ui->b_circle, 19); + padButtons->addButton(ui->b_triangle, 20); - padButtons->addButton(b_left_rstick, 21); - padButtons->addButton(b_down_rstick, 22); - padButtons->addButton(b_right_rstick, 23); - padButtons->addButton(b_up_rstick, 24); + padButtons->addButton(ui->b_left_rstick, 21); + padButtons->addButton(ui->b_down_rstick, 22); + padButtons->addButton(ui->b_right_rstick, 23); + padButtons->addButton(ui->b_up_rstick, 24); - padButtons->addButton(b_reset, 25); - padButtons->addButton(b_ok, 26); - padButtons->addButton(b_cancel, 27); + padButtons->addButton(ui->b_reset, 25); + padButtons->addButton(ui->b_ok, 26); + padButtons->addButton(ui->b_cancel, 27); connect(padButtons, SIGNAL(buttonClicked(int)), this, SLOT(OnPadButtonClicked(int))); - // Main layout - QHBoxLayout *hbox1 = new QHBoxLayout; - hbox1->addLayout(roundStickLMainVBox); - hbox1->addLayout(roundPadControlsMainVBox); - hbox1->addWidget(roundPadShiftsL); - hbox1->addLayout(roundPadSystemMainVbox); - hbox1->addWidget(roundPadShiftsR); - hbox1->addWidget(roundpad_buttons); - hbox1->addLayout(roundStickRMainVBox); - - QHBoxLayout *hbox2 = new QHBoxLayout; - hbox2->addWidget(b_reset); - hbox2->addStretch(); - hbox2->addWidget(b_ok); - hbox2->addWidget(b_cancel); - - QVBoxLayout *vbox = new QVBoxLayout; - vbox->addLayout(hbox1); - vbox->addLayout(hbox2); - setLayout(vbox); - - setWindowTitle(tr("Input Settings")); - g_kbpad_config.load(); UpdateLabel(); } +pad_settings_dialog::~pad_settings_dialog() +{ + delete ui; +} + void pad_settings_dialog::keyPressEvent(QKeyEvent *keyEvent) { m_key_pressed = true; @@ -346,36 +130,36 @@ void pad_settings_dialog::keyPressEvent(QKeyEvent *keyEvent) void pad_settings_dialog::UpdateLabel() { // Get button labels from .ini - b_up_lstick->setText(GetKeyName(g_kbpad_config.left_stick_up)); - b_down_lstick->setText(GetKeyName(g_kbpad_config.left_stick_down)); - b_left_lstick->setText(GetKeyName(g_kbpad_config.left_stick_left)); - b_right_lstick->setText(GetKeyName(g_kbpad_config.left_stick_right)); + ui->b_up_lstick->setText(GetKeyName(g_kbpad_config.left_stick_up)); + ui->b_down_lstick->setText(GetKeyName(g_kbpad_config.left_stick_down)); + ui->b_left_lstick->setText(GetKeyName(g_kbpad_config.left_stick_left)); + ui->b_right_lstick->setText(GetKeyName(g_kbpad_config.left_stick_right)); - b_up->setText(GetKeyName(g_kbpad_config.up)); - b_down->setText(GetKeyName(g_kbpad_config.down)); - b_left->setText(GetKeyName(g_kbpad_config.left)); - b_right->setText(GetKeyName(g_kbpad_config.right)); + ui->b_up->setText(GetKeyName(g_kbpad_config.up)); + ui->b_down->setText(GetKeyName(g_kbpad_config.down)); + ui->b_left->setText(GetKeyName(g_kbpad_config.left)); + ui->b_right->setText(GetKeyName(g_kbpad_config.right)); - b_shift_l1->setText(GetKeyName(g_kbpad_config.l1)); - b_shift_l2->setText(GetKeyName(g_kbpad_config.l2)); - b_shift_l3->setText(GetKeyName(g_kbpad_config.l3)); + ui->b_shift_l1->setText(GetKeyName(g_kbpad_config.l1)); + ui->b_shift_l2->setText(GetKeyName(g_kbpad_config.l2)); + ui->b_shift_l3->setText(GetKeyName(g_kbpad_config.l3)); - b_start->setText(GetKeyName(g_kbpad_config.start)); - b_select->setText(GetKeyName(g_kbpad_config.select)); + ui->b_start->setText(GetKeyName(g_kbpad_config.start)); + ui->b_select->setText(GetKeyName(g_kbpad_config.select)); - b_shift_r1->setText(GetKeyName(g_kbpad_config.r1)); - b_shift_r2->setText(GetKeyName(g_kbpad_config.r2)); - b_shift_r3->setText(GetKeyName(g_kbpad_config.r3)); + ui->b_shift_r1->setText(GetKeyName(g_kbpad_config.r1)); + ui->b_shift_r2->setText(GetKeyName(g_kbpad_config.r2)); + ui->b_shift_r3->setText(GetKeyName(g_kbpad_config.r3)); - b_square->setText(GetKeyName(g_kbpad_config.square)); - b_cross->setText(GetKeyName(g_kbpad_config.cross)); - b_circle->setText(GetKeyName(g_kbpad_config.circle)); - b_triangle->setText(GetKeyName(g_kbpad_config.triangle)); + ui->b_square->setText(GetKeyName(g_kbpad_config.square)); + ui->b_cross->setText(GetKeyName(g_kbpad_config.cross)); + ui->b_circle->setText(GetKeyName(g_kbpad_config.circle)); + ui->b_triangle->setText(GetKeyName(g_kbpad_config.triangle)); - b_up_rstick->setText(GetKeyName(g_kbpad_config.right_stick_up)); - b_down_rstick->setText(GetKeyName(g_kbpad_config.right_stick_down)); - b_left_rstick->setText(GetKeyName(g_kbpad_config.right_stick_left)); - b_right_rstick->setText(GetKeyName(g_kbpad_config.right_stick_right)); + ui->b_up_rstick->setText(GetKeyName(g_kbpad_config.right_stick_up)); + ui->b_down_rstick->setText(GetKeyName(g_kbpad_config.right_stick_down)); + ui->b_left_rstick->setText(GetKeyName(g_kbpad_config.right_stick_left)); + ui->b_right_rstick->setText(GetKeyName(g_kbpad_config.right_stick_right)); } void pad_settings_dialog::UpdateTimerLabel(const u32 id) @@ -387,36 +171,36 @@ void pad_settings_dialog::UpdateTimerLabel(const u32 id) switch (id) { - case id_pad_lstick_left: UpdateLabel(b_left_lstick); break; - case id_pad_lstick_down: UpdateLabel(b_down_lstick); break; - case id_pad_lstick_right: UpdateLabel(b_right_lstick); break; - case id_pad_lstick_up: UpdateLabel(b_up_lstick); break; + case id_pad_lstick_left: UpdateLabel(ui->b_left_lstick); break; + case id_pad_lstick_down: UpdateLabel(ui->b_down_lstick); break; + case id_pad_lstick_right: UpdateLabel(ui->b_right_lstick); break; + case id_pad_lstick_up: UpdateLabel(ui->b_up_lstick); break; - case id_pad_left: UpdateLabel(b_left); break; - case id_pad_down: UpdateLabel(b_down); break; - case id_pad_right: UpdateLabel(b_right); break; - case id_pad_up: UpdateLabel(b_up); break; + case id_pad_left: UpdateLabel(ui->b_left); break; + case id_pad_down: UpdateLabel(ui->b_down); break; + case id_pad_right: UpdateLabel(ui->b_right); break; + case id_pad_up: UpdateLabel(ui->b_up); break; - case id_pad_l1: UpdateLabel(b_shift_l1); break; - case id_pad_l2: UpdateLabel(b_shift_l2); break; - case id_pad_l3: UpdateLabel(b_shift_l3); break; + case id_pad_l1: UpdateLabel(ui->b_shift_l1); break; + case id_pad_l2: UpdateLabel(ui->b_shift_l2); break; + case id_pad_l3: UpdateLabel(ui->b_shift_l3); break; - case id_pad_start: UpdateLabel(b_start); break; - case id_pad_select: UpdateLabel(b_select); break; + case id_pad_start: UpdateLabel(ui->b_start); break; + case id_pad_select: UpdateLabel(ui->b_select); break; - case id_pad_r1: UpdateLabel(b_shift_r1); break; - case id_pad_r2: UpdateLabel(b_shift_r2); break; - case id_pad_r3: UpdateLabel(b_shift_r3); break; + case id_pad_r1: UpdateLabel(ui->b_shift_r1); break; + case id_pad_r2: UpdateLabel(ui->b_shift_r2); break; + case id_pad_r3: UpdateLabel(ui->b_shift_r3); break; - case id_pad_square: UpdateLabel(b_square); break; - case id_pad_cross: UpdateLabel(b_cross); break; - case id_pad_circle: UpdateLabel(b_circle); break; - case id_pad_triangle: UpdateLabel(b_triangle); break; + case id_pad_square: UpdateLabel(ui->b_square); break; + case id_pad_cross: UpdateLabel(ui->b_cross); break; + case id_pad_circle: UpdateLabel(ui->b_circle); break; + case id_pad_triangle: UpdateLabel(ui->b_triangle); break; - case id_pad_rstick_left: UpdateLabel(b_left_rstick); break; - case id_pad_rstick_down: UpdateLabel(b_down_rstick); break; - case id_pad_rstick_right: UpdateLabel(b_right_rstick); break; - case id_pad_rstick_up: UpdateLabel(b_up_rstick); break; + case id_pad_rstick_left: UpdateLabel(ui->b_left_rstick); break; + case id_pad_rstick_down: UpdateLabel(ui->b_down_rstick); break; + case id_pad_rstick_right: UpdateLabel(ui->b_right_rstick); break; + case id_pad_rstick_up: UpdateLabel(ui->b_up_rstick); break; default: LOG_ERROR(HLE, "Unknown button ID: %d", id); break; } @@ -424,40 +208,40 @@ void pad_settings_dialog::UpdateTimerLabel(const u32 id) void pad_settings_dialog::SwitchButtons(const bool IsEnabled) { - b_up_lstick->setEnabled(IsEnabled); - b_down_lstick->setEnabled(IsEnabled); - b_left_lstick->setEnabled(IsEnabled); - b_right_lstick->setEnabled(IsEnabled); + ui->b_up_lstick->setEnabled(IsEnabled); + ui->b_down_lstick->setEnabled(IsEnabled); + ui->b_left_lstick->setEnabled(IsEnabled); + ui->b_right_lstick->setEnabled(IsEnabled); - b_up->setEnabled(IsEnabled); - b_down->setEnabled(IsEnabled); - b_left->setEnabled(IsEnabled); - b_right->setEnabled(IsEnabled); + ui->b_up->setEnabled(IsEnabled); + ui->b_down->setEnabled(IsEnabled); + ui->b_left->setEnabled(IsEnabled); + ui->b_right->setEnabled(IsEnabled); - b_shift_l1->setEnabled(IsEnabled); - b_shift_l2->setEnabled(IsEnabled); - b_shift_l3->setEnabled(IsEnabled); + ui->b_shift_l1->setEnabled(IsEnabled); + ui->b_shift_l2->setEnabled(IsEnabled); + ui->b_shift_l3->setEnabled(IsEnabled); - b_start->setEnabled(IsEnabled); - b_select->setEnabled(IsEnabled); + ui->b_start->setEnabled(IsEnabled); + ui->b_select->setEnabled(IsEnabled); - b_shift_r1->setEnabled(IsEnabled); - b_shift_r2->setEnabled(IsEnabled); - b_shift_r3->setEnabled(IsEnabled); + ui->b_shift_r1->setEnabled(IsEnabled); + ui->b_shift_r2->setEnabled(IsEnabled); + ui->b_shift_r3->setEnabled(IsEnabled); - b_square->setEnabled(IsEnabled); - b_cross->setEnabled(IsEnabled); - b_circle->setEnabled(IsEnabled); - b_triangle->setEnabled(IsEnabled); + ui->b_square->setEnabled(IsEnabled); + ui->b_cross->setEnabled(IsEnabled); + ui->b_circle->setEnabled(IsEnabled); + ui->b_triangle->setEnabled(IsEnabled); - b_up_rstick->setEnabled(IsEnabled); - b_down_rstick->setEnabled(IsEnabled); - b_left_rstick->setEnabled(IsEnabled); - b_right_rstick->setEnabled(IsEnabled); + ui->b_up_rstick->setEnabled(IsEnabled); + ui->b_down_rstick->setEnabled(IsEnabled); + ui->b_left_rstick->setEnabled(IsEnabled); + ui->b_right_rstick->setEnabled(IsEnabled); - b_ok->setEnabled(IsEnabled); - b_cancel->setEnabled(IsEnabled); - b_reset->setEnabled(IsEnabled); + ui->b_ok->setEnabled(IsEnabled); + ui->b_cancel->setEnabled(IsEnabled); + ui->b_reset->setEnabled(IsEnabled); } void pad_settings_dialog::RunTimer(const u32 seconds, const u32 id) diff --git a/rpcs3/rpcs3qt/pad_settings_dialog.h b/rpcs3/rpcs3qt/pad_settings_dialog.h index d2b69a9ff3..796a197554 100644 --- a/rpcs3/rpcs3qt/pad_settings_dialog.h +++ b/rpcs3/rpcs3qt/pad_settings_dialog.h @@ -1,4 +1,5 @@ -#pragma once +#ifndef PADSETTINGSDIALOG_H +#define PADSETTINGSDIALOG_H #include #include @@ -48,49 +49,15 @@ enum button_ids id_cancel }; -struct pad_buttons -{ - QPushButton* b_up_lstick; - QPushButton* b_down_lstick; - QPushButton* b_left_lstick; - QPushButton* b_right_lstick; +namespace Ui { + class pad_settings_dialog; +} - QPushButton* b_up; - QPushButton* b_down; - QPushButton* b_left; - QPushButton* b_right; - - QPushButton* b_shift_l1; - QPushButton* b_shift_l2; - QPushButton* b_shift_l3; - - QPushButton* b_start; - QPushButton* b_select; - - QPushButton* b_shift_r1; - QPushButton* b_shift_r2; - QPushButton* b_shift_r3; - - QPushButton* b_square; - QPushButton* b_cross; - QPushButton* b_circle; - QPushButton* b_triangle; - - QPushButton* b_up_rstick; - QPushButton* b_down_rstick; - QPushButton* b_left_rstick; - QPushButton* b_right_rstick; - - QPushButton* b_ok; - QPushButton* b_cancel; - QPushButton* b_reset; -}; - -class pad_settings_dialog : public QDialog, pad_buttons, PadHandlerBase +class pad_settings_dialog : public QDialog, PadHandlerBase { Q_OBJECT -private Q_SLOTS: +private slots : void OnPadButtonClicked(int id); private: @@ -98,11 +65,13 @@ private: u32 m_button_id; bool m_key_pressed; QAction *onButtonClickedAct; + Ui::pad_settings_dialog *ui; public: // TODO get Init to work virtual void Init(const u32 max_connect) override; explicit pad_settings_dialog(QWidget *parent = 0); + ~pad_settings_dialog(); void keyPressEvent(QKeyEvent *keyEvent); void UpdateLabel(); void UpdateTimerLabel(const u32 id); @@ -111,3 +80,5 @@ public: void LoadSettings(); const QString GetKeyName(const u32 keyCode); }; + +#endif // PADSETTINGSDIALOG_H diff --git a/rpcs3/rpcs3qt/pad_settings_dialog.ui b/rpcs3/rpcs3qt/pad_settings_dialog.ui new file mode 100644 index 0000000000..f73cb86c9c --- /dev/null +++ b/rpcs3/rpcs3qt/pad_settings_dialog.ui @@ -0,0 +1,1061 @@ + + + pad_settings_dialog + + + + 0 + 0 + 819 + 584 + + + + + 819 + 584 + + + + + 819 + 584 + + + + Configure Controls + + + + :/rpcs3.ico:/rpcs3.ico + + + + + 220 + 150 + 391 + 241 + + + + + + + Qt::AutoText + + + :/Icons/controller.png + + + true + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + false + + + + 10 + 10 + 171 + 51 + + + + Controller to Configure + + + + + 10 + 20 + 151 + 22 + + + + + + + + 190 + 10 + 101 + 51 + + + + L1 + + + + + 10 + 20 + 81 + 23 + + + + Q + + + false + + + + + + + 190 + 70 + 101 + 51 + + + + L2 + + + + + 10 + 20 + 81 + 23 + + + + R + + + false + + + + + + + 530 + 10 + 101 + 51 + + + + R1 + + + + + 10 + 20 + 81 + 23 + + + + E + + + false + + + + + + + 530 + 70 + 101 + 51 + + + + R2 + + + + + 10 + 20 + 81 + 23 + + + + T + + + false + + + + + + + 320 + 90 + 71 + 51 + + + + Select + + + + + 10 + 20 + 51 + 23 + + + + Space + + + false + + + + + + + 440 + 90 + 71 + 51 + + + + Start + + + + + 10 + 20 + 51 + 23 + + + + Enter + + + false + + + + + + + 360 + 10 + 101 + 51 + + + + PS Button + + + + false + + + + 10 + 20 + 81 + 23 + + + + Null + + + false + + + + + + + 320 + 350 + 71 + 51 + + + + L3 + + + + + 10 + 20 + 51 + 23 + + + + F + + + false + + + + + + + 450 + 350 + 71 + 51 + + + + R3 + + + + + 10 + 20 + 51 + 23 + + + + G + + + false + + + + + + + 10 + 130 + 171 + 201 + + + + D-Pad + + + + + 50 + 20 + 71 + 51 + + + + Up + + + + + 10 + 20 + 51 + 23 + + + + W + + + false + + + + + + + 90 + 80 + 71 + 51 + + + + Right + + + + + 10 + 20 + 51 + 23 + + + + D + + + false + + + + + + + 10 + 80 + 71 + 51 + + + + Left + + + + + 10 + 20 + 51 + 23 + + + + A + + + false + + + + + + + 50 + 140 + 71 + 51 + + + + Down + + + + + 10 + 20 + 51 + 23 + + + + S + + + false + + + + + + + + 640 + 130 + 171 + 201 + + + + Face Buttons + + + + + 50 + 20 + 71 + 51 + + + + Triangle + + + + + 10 + 20 + 51 + 23 + + + + V + + + false + + + + + + + 90 + 80 + 71 + 51 + + + + Circle + + + + + 10 + 20 + 51 + 23 + + + + C + + + false + + + + + + + 10 + 80 + 71 + 51 + + + + Square + + + + + 10 + 20 + 51 + 23 + + + + Z + + + false + + + + + + + 50 + 140 + 71 + 51 + + + + Cross + + + + + 10 + 20 + 51 + 23 + + + + X + + + false + + + + + + + + 10 + 340 + 171 + 201 + + + + Left Analog + + + + + 50 + 20 + 71 + 51 + + + + Up + + + + + 10 + 20 + 51 + 23 + + + + Up + + + false + + + + + + + 90 + 80 + 71 + 51 + + + + Right + + + + + 10 + 20 + 51 + 23 + + + + Right + + + false + + + + + + + 10 + 80 + 71 + 51 + + + + Left + + + + + 10 + 20 + 51 + 23 + + + + Left + + + false + + + + + + + 50 + 140 + 71 + 51 + + + + Down + + + + + 10 + 20 + 51 + 23 + + + + Down + + + false + + + + + + + + 640 + 340 + 171 + 201 + + + + Right Analog + + + + + 50 + 20 + 71 + 51 + + + + Up + + + + + 10 + 20 + 51 + 23 + + + + PgUp + + + false + + + + + + + 90 + 80 + 71 + 51 + + + + Right + + + + + 10 + 20 + 51 + 23 + + + + End + + + false + + + + + + + 10 + 80 + 71 + 51 + + + + Left + + + + + 10 + 20 + 51 + 23 + + + + Home + + + false + + + + + + + 50 + 140 + 71 + 51 + + + + Down + + + + + 10 + 20 + 51 + 23 + + + + PgDown + + + false + + + + + + + + 10 + 550 + 81 + 23 + + + + Save + + + false + + + + + + 100 + 550 + 81 + 23 + + + + Close + + + + + + 640 + 550 + 171 + 23 + + + + Restore Defaults + + + false + + + + + + 190 + 460 + 441 + 111 + + + + Description + + + + + 6 + 22 + 431 + 81 + + + + We currently support keyboard and mouse input devices as well as native DualShock 4, XInput and MMjoy controllers through software thanks to our core developers and contributors. Unfortunately, we currently do not natively support DualShock 3 controllers. You can however use third party tools like SCP Driver Package to allow your DualShock 3 controller to function like an XInput controller. We plan to add additional input methods in the future. + + + Qt::PlainText + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + false + + + + 10 + 70 + 171 + 51 + + + + Profiles + + + + + 10 + 20 + 151 + 21 + + + + Manage Profiles + + + + + + false + + + + 640 + 10 + 171 + 51 + + + + Controller Status + + + + + 10 + 20 + 151 + 22 + + + + + + + false + + + + 640 + 70 + 171 + 51 + + + + Features + + + + false + + + + 10 + 20 + 70 + 17 + + + + Sixaixs + + + true + + + false + + + + + false + + + + 90 + 20 + 70 + 17 + + + + Vibration + + + true + + + + + + + + + + diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index 870915ab0c..55b807eb4c 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -1,20 +1,59 @@ #include #include #include +#include +#include +#include +#include +#include +#include -#include "core_tab.h" -#include "graphics_tab.h" -#include "audio_tab.h" -#include "input_tab.h" -#include "misc_tab.h" -#include "gui_tab.h" -#include "networking_tab.h" -#include "system_tab.h" #include "settings_dialog.h" #include "emu_settings.h" -settings_dialog::settings_dialog(std::shared_ptr xgui_settings, Render_Creator r_Creator, QWidget *parent, GameInfo* game) : QDialog(parent) +#include "ui_settings_dialog.h" + +#include "stdafx.h" +#include "Emu/System.h" +#include "Crypto/unself.h" + +#include + +inline std::string sstr(const QString& _in) { return _in.toUtf8().toStdString(); } + +settings_dialog::settings_dialog(std::shared_ptr xSettings, Render_Creator r_Creator, QWidget *parent, GameInfo* game) + : QDialog(parent), xgui_settings(xSettings), ui(new Ui::settings_dialog) { + ui->setupUi(this); + ui->cancelButton->setDefault(true); + ui->tabWidget->setUsesScrollButtons(false); + + // read tooltips from json + QFile json_file(":/Json/tooltips.json"); + json_file.open(QIODevice::ReadOnly | QIODevice::Text); + QJsonObject json_obj = QJsonDocument::fromJson(json_file.readAll()).object(); + json_file.close(); + + QJsonObject json_cpu = json_obj.value("cpu").toObject(); + QJsonObject json_cpu_ppu = json_cpu.value("PPU").toObject(); + QJsonObject json_cpu_spu = json_cpu.value("SPU").toObject(); + QJsonObject json_cpu_cbs = json_cpu.value("checkboxes").toObject(); + QJsonObject json_cpu_lib = json_cpu.value("libraries").toObject(); + + QJsonObject json_gpu = json_obj.value("gpu").toObject(); + QJsonObject json_gpu_cbs = json_gpu.value("comboboxes").toObject(); + QJsonObject json_gpu_main = json_gpu.value("main").toObject(); + QJsonObject json_gpu_deb = json_gpu.value("debug").toObject(); + + QJsonObject json_audio = json_obj.value("audio").toObject(); + QJsonObject json_input = json_obj.value("input").toObject(); + QJsonObject json_sys = json_obj.value("system").toObject(); + QJsonObject json_net = json_obj.value("network").toObject(); + + QJsonObject json_emu = json_obj.value("emulator").toObject(); + QJsonObject json_emu_gui = json_emu.value("gui").toObject(); + QJsonObject json_emu_misc = json_emu.value("misc").toObject(); + std::shared_ptr xemu_settings; if (game) { @@ -26,47 +65,712 @@ settings_dialog::settings_dialog(std::shared_ptr xgui_settings, Re xemu_settings.reset(new emu_settings("")); setWindowTitle(tr("Settings")); } - - core_tab* coreTab = new core_tab(xemu_settings, this); - - QPushButton *okButton = new QPushButton(tr("OK")); - QPushButton *cancelButton = new QPushButton(tr("Cancel")); - cancelButton->setDefault(true); - - tabWidget = new QTabWidget; - tabWidget->setUsesScrollButtons(false); - tabWidget->addTab(coreTab, tr("Core")); - tabWidget->addTab(new graphics_tab(xemu_settings, r_Creator, this), tr("Graphics")); - tabWidget->addTab(new audio_tab(xemu_settings, this), tr("Audio")); - tabWidget->addTab(new input_tab(xemu_settings, this), tr("Input / Output")); - tabWidget->addTab(new misc_tab(xemu_settings, this), tr("Misc")); - tabWidget->addTab(new networking_tab(xemu_settings, this), tr("Networking")); - tabWidget->addTab(new system_tab(xemu_settings, this), tr("System")); - - if (!game) - { // Don't add gui tab to game settings. - gui_tab* guiTab = new gui_tab(xgui_settings, this); - tabWidget->addTab(guiTab, tr("GUI")); - connect(guiTab, &gui_tab::GuiSettingsSyncRequest, this, &settings_dialog::GuiSettingsSyncRequest); - connect(guiTab, &gui_tab::GuiSettingsSaveRequest, this, &settings_dialog::GuiSettingsSaveRequest); - connect(guiTab, &gui_tab::GuiStylesheetRequest, this, &settings_dialog::GuiStylesheetRequest); - connect(okButton, &QAbstractButton::clicked, guiTab, &gui_tab::Accept); - } // Various connects - connect(okButton, &QAbstractButton::clicked, coreTab, &core_tab::SaveSelectedLibraries); - connect(okButton, &QAbstractButton::clicked, xemu_settings.get(), &emu_settings::SaveSettings); - connect(okButton, &QAbstractButton::clicked, this, &QDialog::accept); - connect(cancelButton, &QAbstractButton::clicked, this, &QWidget::close); - connect(tabWidget, &QTabWidget::currentChanged, [=]() {cancelButton->setFocus(); }); + connect(ui->okButton, &QAbstractButton::clicked, ui->coreTab, [=]() { + std::set selectedlle; + for (int i = 0; illeList->count(); ++i) + { + const auto& item = ui->lleList->item(i); + if (item->checkState() != Qt::CheckState::Unchecked) + { + selectedlle.emplace(sstr(item->text())); + } + } + std::vector selected_ls = std::vector(selectedlle.begin(), selectedlle.end()); + xemu_settings->SaveSelectedLibraries(selected_ls); + }); + connect(ui->okButton, &QAbstractButton::clicked, xemu_settings.get(), &emu_settings::SaveSettings); + connect(ui->okButton, &QAbstractButton::clicked, this, &QDialog::accept); + connect(ui->cancelButton, &QAbstractButton::clicked, this, &QWidget::close); + connect(ui->tabWidget, &QTabWidget::currentChanged, [=]() {ui->cancelButton->setFocus(); }); - QHBoxLayout *buttonsLayout = new QHBoxLayout; - buttonsLayout->addStretch(); - buttonsLayout->addWidget(okButton); - buttonsLayout->addWidget(cancelButton); + // Cpu Tab ------------------------------------------------------------------------------------------------------------ + // --------------------------------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------------------------------- - QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addWidget(tabWidget); - mainLayout->addLayout(buttonsLayout); - setLayout(mainLayout); + // Checkboxes + xemu_settings->EnhanceCheckBox(ui->hookStFunc, emu_settings::HookStaticFuncs); + ui->hookStFunc->setToolTip(json_cpu_cbs["hookStFunc"].toString()); + + xemu_settings->EnhanceCheckBox(ui->bindSPUThreads, emu_settings::BindSPUThreads); + ui->bindSPUThreads->setToolTip(json_cpu_cbs["bindSPUThreads"].toString()); + + xemu_settings->EnhanceCheckBox(ui->lowerSPUThrPrio, emu_settings::LowerSPUThreadPrio); + ui->lowerSPUThrPrio->setToolTip(json_cpu_cbs["lowerSPUThrPrio"].toString()); + + // PPU tool tips + ui->ppu_precise->setToolTip(json_cpu_ppu["precise"].toString()); + ui->ppu_fast->setToolTip(json_cpu_ppu["fast"].toString()); + ui->ppu_llvm->setToolTip(json_cpu_ppu["LLVM"].toString()); + + { // PPU Stuff + QString selectedPPU = qstr(xemu_settings->GetSetting(emu_settings::PPUDecoder)); + for (const auto& button : ui->ppuBG->buttons()) + { + QString current = button->text(); + button->setCheckable(true); + if (current == selectedPPU) + { + button->setChecked(true); + } +#ifndef LLVM_AVAILABLE + if (current == "Recompiler (LLVM)") + { + button->setEnabled(false); + } +#endif + connect(button, &QAbstractButton::pressed, [=]() {xemu_settings->SetSetting(emu_settings::PPUDecoder, sstr(current)); }); + } + } + + // SPU tool tips + ui->spu_precise->setToolTip(json_cpu_spu["precise"].toString()); + ui->spu_fast->setToolTip(json_cpu_spu["fast"].toString()); + ui->spu_asmjit->setToolTip(json_cpu_spu["ASMJIT"].toString()); + ui->spu_llvm->setToolTip(json_cpu_spu["LLVM"].toString()); + + { // Spu stuff + QString selectedSPU = qstr(xemu_settings->GetSetting(emu_settings::SPUDecoder)); + for (const auto& button : ui->spuBG->buttons()) + { + QString current = button->text(); + if (current == "Recompiler (LLVM)") + { + button->setEnabled(false); + } + button->setCheckable(true); + if (current == selectedSPU) + { + button->setChecked(true); + } + connect(button, &QAbstractButton::pressed, [=]() {xemu_settings->SetSetting(emu_settings::SPUDecoder, sstr(current)); }); + } + } + + // lib options tool tips + ui->lib_auto->setToolTip(json_cpu_lib["auto"].toString()); + ui->lib_manu->setToolTip(json_cpu_lib["manual"].toString()); + ui->lib_both->setToolTip(json_cpu_lib["both"].toString()); + ui->lib_lv2->setToolTip(json_cpu_lib["liblv2"].toString()); + + // creating this in ui file keeps scrambling the order... + QButtonGroup *libModeBG = new QButtonGroup(this); + libModeBG->addButton(ui->lib_auto, 0); + libModeBG->addButton(ui->lib_manu, 1); + libModeBG->addButton(ui->lib_both, 2); + libModeBG->addButton(ui->lib_lv2, 3); + + {// Handle lib loading options + QString selectedLib = qstr(xemu_settings->GetSetting(emu_settings::LibLoadOptions)); + for (const auto& button : libModeBG->buttons()) + { + QString current = button->text(); + button->setCheckable(true); + if (current == selectedLib) + { + button->setChecked(true); + } + connect(button, &QAbstractButton::pressed, [=]() {xemu_settings->SetSetting(emu_settings::LibLoadOptions, sstr(current)); }); + } + } + + // Sort string vector alphabetically + static const auto sort_string_vector = [](std::vector& vec) + { + std::sort(vec.begin(), vec.end(), [](const std::string &str1, const std::string &str2) { return str1 < str2; }); + }; + + std::vector loadedLibs = xemu_settings->GetLoadedLibraries(); + + sort_string_vector(loadedLibs); + + for (auto lib : loadedLibs) + { + QListWidgetItem* item = new QListWidgetItem(qstr(lib), ui->lleList); + item->setFlags(item->flags() | Qt::ItemIsUserCheckable); // set checkable flag + item->setCheckState(Qt::Checked); // AND initialize check state + ui->lleList->addItem(item); + } + const std::string& lle_dir = Emu.GetLibDir(); // TODO + + std::unordered_set set(loadedLibs.begin(), loadedLibs.end()); + std::vector lle_module_list_unselected; + + for (const auto& prxf : fs::dir(lle_dir)) + { + // List found unselected modules + if (prxf.is_directory || (prxf.name.substr(std::max(size_t(3), prxf.name.length()) - 4)) != "sprx") + continue; + if (verify_npdrm_self_headers(fs::file(lle_dir + prxf.name)) && !set.count(prxf.name)) + { + lle_module_list_unselected.push_back(prxf.name); + } + } + + sort_string_vector(lle_module_list_unselected); + + for (auto lib : lle_module_list_unselected) + { + QListWidgetItem* item = new QListWidgetItem(qstr(lib), ui->lleList); + item->setFlags(item->flags() | Qt::ItemIsUserCheckable); // set checkable flag + item->setCheckState(Qt::Unchecked); // AND initialize check state + ui->lleList->addItem(item); + } + + auto l_OnLibButtonClicked = [=](int ind) + { + if (ind == 1 || ind == 2) + { + ui->searchBox->setEnabled(true); + ui->lleList->setEnabled(true); + } + else + { + ui->searchBox->setEnabled(false); + ui->lleList->setEnabled(false); + } + }; + + auto l_OnSearchBoxTextChanged = [=](QString text) + { + QString searchTerm = text.toLower(); + QList checked_Libs; + QList unchecked_Libs; + + // create sublists. we need clones to preserve checkstates + for (int i = 0; i < ui->lleList->count(); ++i) + { + if (ui->lleList->item(i)->checkState() == Qt::Checked) + { + checked_Libs.append(ui->lleList->item(i)->clone()); + } + else + { + unchecked_Libs.append(ui->lleList->item(i)->clone()); + } + } + + // sort sublists + auto qLessThan = [](QListWidgetItem *i1, QListWidgetItem *i2) { return i1->text() < i2->text(); }; + qSort(checked_Libs.begin(), checked_Libs.end(), qLessThan); + qSort(unchecked_Libs.begin(), unchecked_Libs.end(), qLessThan); + + // refill library list + ui->lleList->clear(); + + for (const auto& lib : checked_Libs) + { + ui->lleList->addItem(lib); + } + for (const auto& lib : unchecked_Libs) + { + ui->lleList->addItem(lib); + } + + // only show items filtered for search text + for (int i = 0; i < ui->lleList->count(); i++) + { + if (ui->lleList->item(i)->text().contains(searchTerm)) + { + ui->lleList->setRowHidden(i, false); + } + else + { + ui->lleList->setRowHidden(i, true); + } + } + }; + + // Events + connect(libModeBG, static_cast(&QButtonGroup::buttonClicked), l_OnLibButtonClicked); + connect(ui->searchBox, &QLineEdit::textChanged, l_OnSearchBoxTextChanged); + + int buttid = libModeBG->checkedId(); + if (buttid != -1) + { + l_OnLibButtonClicked(buttid); + } + + // Gpu Tab ------------------------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------------------------------- + + // Comboboxes + ui->graphicsAdapterBox->setToolTip(json_gpu_cbs["graphicsAdapterBox"].toString()); + + xemu_settings->EnhanceComboBox(ui->renderBox, emu_settings::Renderer); + ui->renderBox->setToolTip(json_gpu_cbs["renderBox"].toString()); + + xemu_settings->EnhanceComboBox(ui->resBox, emu_settings::Resolution); + ui->resBox->setToolTip(json_gpu_cbs["resBox"].toString()); + + xemu_settings->EnhanceComboBox(ui->aspectBox, emu_settings::AspectRatio); + ui->aspectBox->setToolTip(json_gpu_cbs["aspectBox"].toString()); + + xemu_settings->EnhanceComboBox(ui->frameLimitBox, emu_settings::FrameLimit); + ui->frameLimitBox->setToolTip(json_gpu_cbs["frameLimitBox"].toString()); + + // Checkboxes: main options + xemu_settings->EnhanceCheckBox(ui->dumpColor, emu_settings::WriteColorBuffers); + ui->dumpColor->setToolTip(json_gpu_main["dumpColor"].toString()); + + xemu_settings->EnhanceCheckBox(ui->readColor, emu_settings::ReadColorBuffers); + ui->readColor->setToolTip(json_gpu_main["readColor"].toString()); + + xemu_settings->EnhanceCheckBox(ui->dumpDepth, emu_settings::WriteDepthBuffer); + ui->dumpDepth->setToolTip(json_gpu_main["dumpDepth"].toString()); + + xemu_settings->EnhanceCheckBox(ui->readDepth, emu_settings::ReadDepthBuffer); + ui->readDepth->setToolTip(json_gpu_main["readDepth"].toString()); + + xemu_settings->EnhanceCheckBox(ui->vsync, emu_settings::VSync); + ui->vsync->setToolTip(json_gpu_main["vsync"].toString()); + + xemu_settings->EnhanceCheckBox(ui->autoInvalidateCache, emu_settings::AutoInvalidateCache); + ui->autoInvalidateCache->setToolTip(json_gpu_main["autoInvalidateCache"].toString()); + + xemu_settings->EnhanceCheckBox(ui->gpuTextureScaling, emu_settings::GPUTextureScaling); + ui->gpuTextureScaling->setToolTip(json_gpu_main["gpuTextureScaling"].toString()); + + // Checkboxes: debug options + xemu_settings->EnhanceCheckBox(ui->glLegacyBuffers, emu_settings::LegacyBuffers); + ui->glLegacyBuffers->setToolTip(json_gpu_deb["glLegacyBuffers"].toString()); + + xemu_settings->EnhanceCheckBox(ui->scrictModeRendering, emu_settings::StrictRenderingMode); + ui->scrictModeRendering->setToolTip(json_gpu_deb["scrictModeRendering"].toString()); + + xemu_settings->EnhanceCheckBox(ui->forceHighpZ, emu_settings::ForceHighpZ); + ui->forceHighpZ->setToolTip(json_gpu_deb["forceHighpZ"].toString()); + + xemu_settings->EnhanceCheckBox(ui->debugOutput, emu_settings::DebugOutput); + ui->debugOutput->setToolTip(json_gpu_deb["debugOutput"].toString()); + + xemu_settings->EnhanceCheckBox(ui->debugOverlay, emu_settings::DebugOverlay); + ui->debugOverlay->setToolTip(json_gpu_deb["debugOverlay"].toString()); + + xemu_settings->EnhanceCheckBox(ui->logProg, emu_settings::LogShaderPrograms); + ui->logProg->setToolTip(json_gpu_deb["logProg"].toString()); + + // Graphics Adapter + QStringList D3D12Adapters = r_Creator.D3D12Adapters; + QStringList vulkanAdapters = r_Creator.vulkanAdapters; + bool supportsD3D12 = r_Creator.supportsD3D12; + bool supportsVulkan = r_Creator.supportsVulkan; + QString r_D3D12 = r_Creator.render_D3D12; + QString r_Vulkan = r_Creator.render_Vulkan; + QString r_OpenGL = r_Creator.render_OpenGL; + QString old_D3D12; + QString old_Vulkan; + + if (supportsD3D12) + { + old_D3D12 = qstr(xemu_settings->GetSetting(emu_settings::D3D12Adapter)); + } + else + { + // Remove D3D12 option from render combobox + for (int i = 0; i < ui->renderBox->count(); i++) + { + if (ui->renderBox->itemText(i) == r_D3D12) + { + ui->renderBox->removeItem(i); + break; + } + } + } + + if (supportsVulkan) + { + old_Vulkan = qstr(xemu_settings->GetSetting(emu_settings::VulkanAdapter)); + } + else + { + // Remove Vulkan option from render combobox + for (int i = 0; i < ui->renderBox->count(); i++) + { + if (ui->renderBox->itemText(i) == r_Vulkan) + { + ui->renderBox->removeItem(i); + break; + } + } + } + + if (supportsD3D12 || supportsVulkan) + { + QString oldRender = ui->renderBox->itemText(ui->renderBox->currentIndex()); + + auto switchGraphicsAdapter = [=](int index) + { + QString render = ui->renderBox->itemText(index); + m_isD3D12 = render == r_D3D12; + m_isVulkan = render == r_Vulkan; + ui->graphicsAdapterBox->setEnabled(m_isD3D12 || m_isVulkan); + + // D3D Adapter + if (m_isD3D12) + { + // Reset other adapters to old config + if (supportsVulkan) + { + xemu_settings->SetSetting(emu_settings::VulkanAdapter, sstr(old_Vulkan)); + } + // Fill combobox + ui->graphicsAdapterBox->clear(); + for (const auto& adapter : D3D12Adapters) + { + ui->graphicsAdapterBox->addItem(adapter); + } + // Reset Adapter to old config + int idx = ui->graphicsAdapterBox->findText(old_D3D12); + if (idx == -1) + { + idx = 0; + if (old_D3D12.isEmpty()) + { + LOG_WARNING(RSX, "%s adapter config empty: setting to default!", sstr(r_D3D12)); + } + else + { + LOG_WARNING(RSX, "Last used %s adapter not found: setting to default!", sstr(r_D3D12)); + } + } + ui->graphicsAdapterBox->setCurrentIndex(idx); + xemu_settings->SetSetting(emu_settings::D3D12Adapter, sstr(ui->graphicsAdapterBox->currentText())); + } + + // Vulkan Adapter + else if (m_isVulkan) + { + // Reset other adapters to old config + if (supportsD3D12) + { + xemu_settings->SetSetting(emu_settings::D3D12Adapter, sstr(old_D3D12)); + } + // Fill combobox + ui->graphicsAdapterBox->clear(); + for (const auto& adapter : vulkanAdapters) + { + ui->graphicsAdapterBox->addItem(adapter); + } + // Reset Adapter to old config + int idx = ui->graphicsAdapterBox->findText(old_Vulkan); + if (idx == -1) + { + idx = 0; + if (old_Vulkan.isEmpty()) + { + LOG_WARNING(RSX, "%s adapter config empty: setting to default!", sstr(r_Vulkan)); + } + else + { + LOG_WARNING(RSX, "Last used %s adapter not found: setting to default!", sstr(r_Vulkan)); + } + } + ui->graphicsAdapterBox->setCurrentIndex(idx); + xemu_settings->SetSetting(emu_settings::VulkanAdapter, sstr(ui->graphicsAdapterBox->currentText())); + } + + // Other Adapter + else + { + // Reset Adapters to old config + if (supportsD3D12) + { + xemu_settings->SetSetting(emu_settings::D3D12Adapter, sstr(old_D3D12)); + } + if (supportsVulkan) + { + xemu_settings->SetSetting(emu_settings::VulkanAdapter, sstr(old_Vulkan)); + } + + // Fill combobox with placeholder + ui->graphicsAdapterBox->clear(); + ui->graphicsAdapterBox->addItem(tr("Not needed for %1 renderer").arg(render)); + } + }; + + auto setAdapter = [=](QString text) + { + if (text.isEmpty()) return; + + // don't set adapter if signal was created by switching render + QString newRender = ui->renderBox->itemText(ui->renderBox->currentIndex()); + if (m_oldRender == newRender) + { + if (m_isD3D12 && D3D12Adapters.contains(text)) + { + xemu_settings->SetSetting(emu_settings::D3D12Adapter, sstr(text)); + } + else if (m_isVulkan && vulkanAdapters.contains(text)) + { + xemu_settings->SetSetting(emu_settings::VulkanAdapter, sstr(text)); + } + } + else + { + m_oldRender = newRender; + } + }; + + // Init + setAdapter(ui->graphicsAdapterBox->currentText()); + switchGraphicsAdapter(ui->renderBox->currentIndex()); + + // Events + connect(ui->graphicsAdapterBox, &QComboBox::currentTextChanged, setAdapter); + connect(ui->renderBox, static_cast(&QComboBox::currentIndexChanged), switchGraphicsAdapter); + } + + auto fixGLLegacy = [=](const QString& text) { + ui->glLegacyBuffers->setEnabled(text == r_OpenGL); + }; + + // Handle connects to disable specific checkboxes that depend on GUI state. + fixGLLegacy(ui->renderBox->currentText()); // Init + connect(ui->renderBox, &QComboBox::currentTextChanged, fixGLLegacy); + + // Audio Tab ----------------------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------------------------------- + + // Comboboxes + + xemu_settings->EnhanceComboBox(ui->audioOutBox, emu_settings::AudioRenderer); + ui->audioOutBox->setToolTip(json_audio["audioOutBox"].toString()); + + // Checkboxes + + xemu_settings->EnhanceCheckBox(ui->audioDump, emu_settings::DumpToFile); + ui->audioDump->setToolTip(json_audio["audioDump"].toString()); + + xemu_settings->EnhanceCheckBox(ui->convert, emu_settings::ConvertTo16Bit); + ui->convert->setToolTip(json_audio["convert"].toString()); + + xemu_settings->EnhanceCheckBox(ui->downmix, emu_settings::DownmixStereo); + ui->downmix->setToolTip(json_audio["downmix"].toString()); + + // I/O Tab ------------------------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------------------------------- + + // Comboboxes + + xemu_settings->EnhanceComboBox(ui->padHandlerBox, emu_settings::PadHandler); + ui->padHandlerBox->setToolTip(json_input["padHandlerBox"].toString()); + + xemu_settings->EnhanceComboBox(ui->keyboardHandlerBox, emu_settings::KeyboardHandler); + ui->keyboardHandlerBox->setToolTip(json_input["keyboardHandlerBox"].toString()); + + xemu_settings->EnhanceComboBox(ui->mouseHandlerBox, emu_settings::MouseHandler); + ui->mouseHandlerBox->setToolTip(json_input["mouseHandlerBox"].toString()); + + xemu_settings->EnhanceComboBox(ui->cameraTypeBox, emu_settings::CameraType); + ui->cameraTypeBox->setToolTip(json_input["cameraTypeBox"].toString()); + + // Checkboxes + + xemu_settings->EnhanceCheckBox(ui->useFakeCamera, emu_settings::Camera); + ui->useFakeCamera->setToolTip(json_input["useFakeCamera"].toString()); + + // System Tab ---------------------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------------------------------- + + // Comboboxes + + xemu_settings->EnhanceComboBox(ui->sysLangBox, emu_settings::Language); + ui->sysLangBox->setToolTip(json_sys["sysLangBox"].toString()); + + // Checkboxes + + xemu_settings->EnhanceCheckBox(ui->enableHostRoot, emu_settings::EnableHostRoot); + ui->enableHostRoot->setToolTip(json_sys["enableHostRoot"].toString()); + + // Network Tab --------------------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------------------------------- + + // Comboboxes + + xemu_settings->EnhanceComboBox(ui->netStatusBox, emu_settings::ConnectionStatus); + ui->netStatusBox->setToolTip(json_net["netStatusBox"].toString()); + + // Emulator Tab -------------------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------------------------------- + + // Comboboxes + + ui->combo_configs->setToolTip(json_emu_gui["configs"].toString()); + ui->combo_stylesheets->setToolTip(json_emu_gui["stylesheets"].toString()); + + // Checkboxes + + ui->cb_show_welcome->setToolTip(json_emu_gui["show_welcome"].toString()); + + xemu_settings->EnhanceCheckBox(ui->exitOnStop, emu_settings::ExitRPCS3OnFinish); + ui->exitOnStop->setToolTip(json_emu_misc["exitOnStop"].toString()); + + xemu_settings->EnhanceCheckBox(ui->alwaysStart, emu_settings::StartOnBoot); + ui->alwaysStart->setToolTip(json_emu_misc["alwaysStart"].toString()); + + xemu_settings->EnhanceCheckBox(ui->startGameFullscreen, emu_settings::StartGameFullscreen); + ui->startGameFullscreen->setToolTip(json_emu_misc["startGameFullscreen"].toString()); + + xemu_settings->EnhanceCheckBox(ui->showFPSInTitle, emu_settings::ShowFPSInTitle); + ui->showFPSInTitle->setToolTip(json_emu_misc["showFPSInTitle"].toString()); + + if (game) + { + ui->gb_stylesheets->setEnabled(false); + ui->gb_configs->setEnabled(false); + ui->gb_settings->setEnabled(false); + } + else + { + ui->cb_show_welcome->setChecked(xgui_settings->GetValue(GUI::ib_show_welcome).toBool()); + + connect(ui->okButton, &QAbstractButton::clicked, [this]() { + // Only attempt to load a config if changes occurred. + if (m_startingConfig != xgui_settings->GetValue(GUI::m_currentConfig).toString()) + { + OnApplyConfig(); + } + if (m_startingStylesheet != xgui_settings->GetValue(GUI::m_currentStylesheet).toString()) + { + OnApplyStylesheet(); + } + }); + connect(ui->pb_reset_default, &QAbstractButton::clicked, [=]() { + if (QMessageBox::question(this, tr("Reset GUI to default?"), tr("This will include your stylesheet as well. Do you wish to proceed?"), + QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) + { + xgui_settings->Reset(true); + xgui_settings->ChangeToConfig(tr("default")); + Q_EMIT GuiStylesheetRequest(tr("default")); + Q_EMIT GuiSettingsSyncRequest(); + AddConfigs(); + AddStylesheets(); + } + }); + connect(ui->pb_backup_config, &QAbstractButton::clicked, this, &settings_dialog::OnBackupCurrentConfig); + connect(ui->pb_apply_config, &QAbstractButton::clicked, this, &settings_dialog::OnApplyConfig); + connect(ui->pb_apply_stylesheet, &QAbstractButton::clicked, this, &settings_dialog::OnApplyStylesheet); + connect(ui->pb_open_folder, &QAbstractButton::clicked, [=]() {QDesktopServices::openUrl(xgui_settings->GetSettingsDir()); }); + connect(ui->cb_show_welcome, &QCheckBox::clicked, [=](bool val) {xgui_settings->SetValue(GUI::ib_show_welcome, val); }); + + AddConfigs(); + AddStylesheets(); + } +} + +void settings_dialog::AddConfigs() +{ + ui->combo_configs->clear(); + + ui->combo_configs->addItem(tr("default")); + + for (QString entry : xgui_settings->GetConfigEntries()) + { + if (entry != tr("default")) + { + ui->combo_configs->addItem(entry); + } + } + + QString currentSelection = tr("CurrentSettings"); + m_startingConfig = currentSelection; + + int index = ui->combo_configs->findText(currentSelection); + if (index != -1) + { + ui->combo_configs->setCurrentIndex(index); + } + else + { + LOG_WARNING(GENERAL, "Trying to set an invalid config index ", index); + } +} + +void settings_dialog::AddStylesheets() +{ + ui->combo_stylesheets->clear(); + + ui->combo_stylesheets->addItem(tr("default")); + + for (QString entry : xgui_settings->GetStylesheetEntries()) + { + if (entry != tr("default")) + { + ui->combo_stylesheets->addItem(entry); + } + } + + QString currentSelection = xgui_settings->GetValue(GUI::m_currentStylesheet).toString(); + m_startingStylesheet = currentSelection; + + int index = ui->combo_stylesheets->findText(currentSelection); + if (index != -1) + { + ui->combo_stylesheets->setCurrentIndex(index); + } + else + { + LOG_WARNING(GENERAL, "Trying to set an invalid stylesheets index ", index); + } +} + +void settings_dialog::OnBackupCurrentConfig() +{ + QInputDialog* dialog = new QInputDialog(this); + dialog->setWindowTitle(tr("Choose a unique name")); + dialog->setLabelText(tr("Configuration Name: ")); + dialog->resize(500, 100); + + while (dialog->exec() != QDialog::Rejected) + { + dialog->resize(500, 100); + QString friendlyName = dialog->textValue(); + if (friendlyName == "") + { + QMessageBox::warning(this, tr("Error"), tr("Name cannot be empty")); + continue; + } + if (friendlyName.contains(".")) + { + QMessageBox::warning(this, tr("Error"), tr("Must choose a name with no '.'")); + continue; + } + if (ui->combo_configs->findText(friendlyName) != -1) + { + QMessageBox::warning(this, tr("Error"), tr("Please choose a non-existing name")); + continue; + } + Q_EMIT GuiSettingsSaveRequest(); + xgui_settings->SaveCurrentConfig(friendlyName); + ui->combo_configs->addItem(friendlyName); + ui->combo_configs->setCurrentIndex(ui->combo_configs->findText(friendlyName)); + break; + } +} + +void settings_dialog::OnApplyConfig() +{ + QString name = ui->combo_configs->currentText(); + xgui_settings->SetValue(GUI::m_currentConfig, name); + xgui_settings->ChangeToConfig(name); + Q_EMIT GuiSettingsSyncRequest(); +} + +void settings_dialog::OnApplyStylesheet() +{ + xgui_settings->SetValue(GUI::m_currentStylesheet, ui->combo_stylesheets->currentText()); + Q_EMIT GuiStylesheetRequest(xgui_settings->GetCurrentStylesheetPath()); +} + +void settings_dialog::SetActiveTab(int index) +{ + ui->tabWidget->setCurrentIndex(index); } diff --git a/rpcs3/rpcs3qt/settings_dialog.h b/rpcs3/rpcs3qt/settings_dialog.h index b936ce430a..16df33509e 100644 --- a/rpcs3/rpcs3qt/settings_dialog.h +++ b/rpcs3/rpcs3qt/settings_dialog.h @@ -10,16 +10,36 @@ #include +namespace Ui { + class settings_dialog; +} + class settings_dialog : public QDialog { Q_OBJECT public: explicit settings_dialog(std::shared_ptr xSettings, Render_Creator r_Creator, QWidget *parent = 0, GameInfo *game = nullptr); + void SetActiveTab(int index); + private Q_SLOTS: + void OnBackupCurrentConfig(); + void OnApplyConfig(); + void OnApplyStylesheet(); Q_SIGNALS: void GuiSettingsSyncRequest(); void GuiStylesheetRequest(const QString& path); void GuiSettingsSaveRequest(); private: - QTabWidget *tabWidget; + //emulator tab + void AddConfigs(); + void AddStylesheets(); + QString m_startingStylesheet; + QString m_startingConfig; + //gpu tab + QString m_oldRender = ""; + bool m_isD3D12 = false; + bool m_isVulkan = false; + + Ui::settings_dialog *ui; + std::shared_ptr xgui_settings; }; diff --git a/rpcs3/rpcs3qt/settings_dialog.ui b/rpcs3/rpcs3qt/settings_dialog.ui new file mode 100644 index 0000000000..5506c36b42 --- /dev/null +++ b/rpcs3/rpcs3qt/settings_dialog.ui @@ -0,0 +1,1518 @@ + + + settings_dialog + + + + 0 + 0 + 516 + 586 + + + + + 516 + 586 + + + + + 516 + 586 + + + + Settings + + + + :/rpcs3.ico:/rpcs3.ico + + + + true + + + + 10 + 10 + 496 + 531 + + + + 0 + + + + CPU + + + + + 10 + 10 + 221 + 91 + + + + PPU Decoder + + + + + 10 + 40 + 171 + 20 + + + + Interpreter (Fast) + + + ppuBG + + + + + + 10 + 60 + 171 + 20 + + + + Recompiler (LLVM) + + + ppuBG + + + + + + 10 + 20 + 171 + 20 + + + + Interpreter (Precise) + + + ppuBG + + + + + + + 10 + 110 + 221 + 111 + + + + SPU Decoder + + + + + 10 + 40 + 171 + 20 + + + + Interpreter (Fast) + + + spuBG + + + + + + 10 + 60 + 171 + 20 + + + + Recompiler (ASMJIT) + + + spuBG + + + + + + 10 + 20 + 171 + 20 + + + + Interpreter (Precise) + + + spuBG + + + + + false + + + + 10 + 80 + 171 + 20 + + + + Recompiler (LLVM) + + + spuBG + + + + + + + 10 + 230 + 221 + 151 + + + + Additional Settings + + + + + 10 + 20 + 201 + 16 + + + + Hook Static Functions + + + + + + 10 + 40 + 201 + 16 + + + + Bind SPU threads to secondary cores + + + + + + 10 + 60 + 201 + 16 + + + + Lower SPU thread priority + + + + + + + 240 + 130 + 241 + 191 + + + + Firmware Libraries + + + + + 10 + 20 + 221 + 161 + + + + QAbstractItemView::ExtendedSelection + + + QListView::ListMode + + + + + + + 240 + 10 + 241 + 111 + + + + Firmware Settings + + + + + 10 + 40 + 191 + 20 + + + + Manually load selected libraries + + + + + + 10 + 60 + 191 + 20 + + + + Load automatic and manual libraries + + + + + + 10 + 20 + 191 + 20 + + + + Automatically load required libraries + + + + + + 10 + 80 + 191 + 20 + + + + Load liblv2.sprx only + + + + + + + 240 + 330 + 241 + 51 + + + + Search Libraries + + + + + 10 + 20 + 221 + 20 + + + + + + + + 10 + 390 + 471 + 101 + + + + Description + + + + + 10 + 20 + 451 + 71 + + + + Configure CPU settings. + + + Qt::PlainText + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + GPU + + + + + 10 + 10 + 231 + 51 + + + + Renderer + + + + + 10 + 20 + 211 + 22 + + + + + + + + 250 + 10 + 231 + 51 + + + + Resolution + + + + + 10 + 20 + 211 + 22 + + + + + + + + 10 + 70 + 231 + 51 + + + + Graphics Device + + + + + 10 + 20 + 211 + 22 + + + + + + + false + + + + 250 + 70 + 231 + 51 + + + + Enhancements + + + + + 10 + 20 + 211 + 23 + + + + Advanced Settings + + + + + + + 10 + 130 + 111 + 51 + + + + Aspect Ratio + + + + + 10 + 20 + 91 + 22 + + + + + + + + 130 + 130 + 111 + 51 + + + + Framelimit + + + + + 10 + 20 + 91 + 22 + + + + + + + + 10 + 190 + 231 + 191 + + + + Additional Settings + + + + + 10 + 40 + 211 + 17 + + + + Write Depth Buffers + + + + + + 10 + 80 + 211 + 17 + + + + Read Depth Buffers + + + + + + 10 + 60 + 211 + 17 + + + + Read Color Buffers + + + + + + 10 + 20 + 211 + 17 + + + + Write Color Buffers + + + + + + 10 + 140 + 211 + 17 + + + + Use Vertical Sync + + + + + + 10 + 100 + 211 + 17 + + + + Invalidate Cache Every Frame + + + + + + 10 + 120 + 211 + 17 + + + + Use GPU Texture Scaling + + + + + + + 10 + 390 + 471 + 101 + + + + Description + + + + + 10 + 20 + 451 + 71 + + + + Configure GPU settings. + + + Qt::PlainText + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + true + + + + 250 + 190 + 231 + 191 + + + + Debugging Settings + + + + + 10 + 60 + 211 + 17 + + + + Debug Overlay + + + + + + 10 + 40 + 211 + 17 + + + + Debug Output + + + + + + 10 + 100 + 211 + 17 + + + + Log Shader Programs + + + + + + 10 + 80 + 211 + 17 + + + + Strict Rendering Mode + + + + + false + + + + 10 + 20 + 211 + 17 + + + + Use Legacy OpenGL Buffers + + + + + + 10 + 120 + 211 + 17 + + + + Use High Precision Z-buffer + + + + + + + Audio + + + + + 10 + 10 + 231 + 51 + + + + Audio Out + + + + + 10 + 20 + 211 + 22 + + + + + + + + 10 + 70 + 231 + 91 + + + + Audio Settings + + + + + 10 + 20 + 211 + 17 + + + + Dump to File + + + + + + 10 + 40 + 211 + 17 + + + + Convert to 16-bit + + + + + + 10 + 60 + 211 + 17 + + + + Downmix to Stereo + + + false + + + + + + + 10 + 390 + 471 + 101 + + + + Description + + + + + 10 + 20 + 451 + 71 + + + + Configure audio settings. + + + Qt::PlainText + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + I/O + + + + + 250 + 10 + 231 + 51 + + + + Camera Input + + + + + 10 + 20 + 211 + 22 + + + + + + + + 10 + 70 + 231 + 51 + + + + Keyboard Handler + + + + + 10 + 20 + 211 + 22 + + + + + + + + 10 + 10 + 231 + 51 + + + + Controller Handler + + + + + 10 + 20 + 211 + 22 + + + + + + + + 10 + 130 + 231 + 51 + + + + Mouse Handler + + + + + 10 + 20 + 211 + 22 + + + + + + + + 250 + 70 + 231 + 51 + + + + Camera Settings + + + + + 10 + 20 + 211 + 17 + + + + Use Fake Camera + + + + + + + 10 + 390 + 471 + 101 + + + + Description + + + + + 10 + 20 + 451 + 71 + + + + Configure input and output settings. + + + Qt::PlainText + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + System + + + + false + + + + 10 + 70 + 231 + 51 + + + + Console Region + + + + + 10 + 20 + 211 + 22 + + + + + + + + 10 + 10 + 231 + 51 + + + + Console Language + + + + + 10 + 20 + 211 + 22 + + + + + + + + 10 + 390 + 471 + 101 + + + + Description + + + + + 10 + 20 + 451 + 71 + + + + Configure virtual PlayStation 3 system settings. + + + Qt::PlainText + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + 250 + 10 + 231 + 51 + + + + Homebrew + + + + + 10 + 20 + 211 + 17 + + + + Enable /host_root/ + + + + groupBox + groupBox_33 + groupBox_34 + groupBox_61 + + + + Network + + + + + 10 + 10 + 231 + 51 + + + + Network Status + + + + + 10 + 20 + 211 + 22 + + + + + + + + 10 + 390 + 471 + 101 + + + + Description + + + + + 10 + 20 + 451 + 71 + + + + Configure virtual PlayStation 3 network settings. + + + Qt::PlainText + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + Emulator + + + + + 10 + 10 + 231 + 141 + + + + Emulator Settings + + + + + 10 + 40 + 211 + 17 + + + + Automatically start games after boot + + + + + + 10 + 20 + 211 + 17 + + + + Exit RPCS3 when process finishes + + + + + + 10 + 80 + 211 + 17 + + + + Show framerate counter in window title + + + + + + 10 + 60 + 211 + 17 + + + + Start games in Fullscreen mode + + + + + + + 250 + 10 + 231 + 141 + + + + UI Settings + + + + + 10 + 20 + 211 + 23 + + + + Restore default settings + + + + + + 10 + 50 + 211 + 23 + + + + Save current settings + + + + + + 10 + 80 + 211 + 23 + + + + Open configuration folder + + + + + + 10 + 110 + 211 + 17 + + + + Show Welcome Screen + + + + + + + 10 + 160 + 231 + 81 + + + + UI Configurations + + + + + 10 + 50 + 211 + 23 + + + + Apply + + + + + + 10 + 20 + 211 + 22 + + + + + + + + 250 + 160 + 231 + 81 + + + + UI Stylesheets + + + + + 10 + 50 + 211 + 23 + + + + Apply + + + + + + 10 + 20 + 211 + 22 + + + + + + + + 10 + 390 + 471 + 101 + + + + Description + + + + + 10 + 20 + 451 + 71 + + + + Configure RPCS3 Emulator settings. + + + Qt::PlainText + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + + + 10 + 550 + 75 + 23 + + + + Save + + + + + + 90 + 550 + 75 + 23 + + + + Close + + + + + + + + + + + + diff --git a/rpcs3/rpcs3qt/system_tab.cpp b/rpcs3/rpcs3qt/system_tab.cpp deleted file mode 100644 index c08d51250e..0000000000 --- a/rpcs3/rpcs3qt/system_tab.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include -#include -#include - -#include "system_tab.h" - -system_tab::system_tab(std::shared_ptr xemu_settings, QWidget *parent) : QWidget(parent) -{ - // Language - QGroupBox *sysLang = new QGroupBox(tr("Language")); - - QComboBox *sysLangBox = xemu_settings->CreateEnhancedComboBox(emu_settings::Language, this); - - QVBoxLayout *sysLangVbox = new QVBoxLayout; - sysLangVbox->addWidget(sysLangBox); - sysLang->setLayout(sysLangVbox); - - // Checkboxes - QCheckBox *enableHostRoot = xemu_settings->CreateEnhancedCheckBox(emu_settings::EnableHostRoot, this); - - // Main layout - QVBoxLayout *vbox = new QVBoxLayout; - vbox->addWidget(enableHostRoot); - vbox->addWidget(sysLang); - vbox->addStretch(); - - QHBoxLayout *hbox = new QHBoxLayout; - hbox->addLayout(vbox); - hbox->addStretch(); - setLayout(hbox); -} diff --git a/rpcs3/rpcs3qt/system_tab.h b/rpcs3/rpcs3qt/system_tab.h deleted file mode 100644 index 10c3a4c6cc..0000000000 --- a/rpcs3/rpcs3qt/system_tab.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include "emu_settings.h" - -#include - -#include - -class system_tab : public QWidget -{ - Q_OBJECT - -public: - explicit system_tab(std::shared_ptr xemu_settings, QWidget *parent = 0); -}; diff --git a/rpcs3/rpcs3qt/welcome_dialog.cpp b/rpcs3/rpcs3qt/welcome_dialog.cpp index d1577d9e3e..ac691cb0eb 100644 --- a/rpcs3/rpcs3qt/welcome_dialog.cpp +++ b/rpcs3/rpcs3qt/welcome_dialog.cpp @@ -1,4 +1,5 @@ #include "welcome_dialog.h" +#include "ui_welcome_dialog.h" #include "gui_settings.h" @@ -10,120 +11,23 @@ #include #include -welcome_dialog::welcome_dialog(QWidget* parent) : QDialog(parent) +welcome_dialog::welcome_dialog(QWidget* parent) : QDialog(parent), ui(new Ui::welcome_dialog) { + ui->setupUi(this); + gui_settings* settings = new gui_settings(this); - QPushButton* okay = new QPushButton(tr("Okay")); - okay->setEnabled(false); + ui->okay->setEnabled(false); - QCheckBox* do_not_show = new QCheckBox(tr("Do not show again")); - QCheckBox* i_have_read = new QCheckBox(tr("I have read the quickstart guide (required)")); - - connect(i_have_read, &QCheckBox::clicked, [=](bool checked) + connect(ui->i_have_read, &QCheckBox::clicked, [=](bool checked) { - okay->setEnabled(checked); + ui->okay->setEnabled(checked); }); - connect(do_not_show, &QCheckBox::clicked, [=](bool checked) + connect(ui->do_not_show, &QCheckBox::clicked, [=](bool checked) { settings->SetValue(GUI::ib_show_welcome, QVariant(!checked)); }); - connect(okay, &QPushButton::pressed, this, &QDialog::accept); - - QIcon rpcs3_icon = QIcon(":/rpcs3.ico"); - QLabel* icon = new QLabel(this); - icon->setPixmap(rpcs3_icon.pixmap(120, 120)); - icon->setAlignment(Qt::AlignRight); - - QLabel* header_1 = new QLabel(tr( - "

Welcome to RPCS3

" - )); - - QFont header_font; - header_font.setPointSize(12); - - header_1->setFont(header_font); - header_1->setFixedWidth(header_1->sizeHint().width()); - header_1->setWordWrap(true); - - QLabel* header_2 = new QLabel(tr( - "
" - )); - - header_2->setFixedWidth(header_1->sizeHint().width() * 1.2); - header_2->setWordWrap(true); - - QLabel* caption = new QLabel(tr( - "To get started, you need to install the PlayStation 3 firmware.
" - "Check out our quickstart guide for further information.
" - "If you have any questions, please have a look at our FAQ.
" - "Otherwise, further discussion and support can be found at our forums " - "or on our discord server.
" - )); - - QFont caption_font; - caption_font.setPointSize(10); - caption_font.setWeight(QFont::Medium); - - caption->setFont(caption_font); - caption->setFixedWidth(caption->sizeHint().width()); - caption->setWordWrap(true); - caption->setOpenExternalLinks(true); - caption->setAlignment(Qt::AlignLeft); - - QLabel* piracy = new QLabel(tr( - "RPCS3 does NOT condone piracy. You must dump your own games." - )); - piracy->setWordWrap(true); - piracy->setAlignment(Qt::AlignCenter); - - // Header Layout - QVBoxLayout* header_layout = new QVBoxLayout(); - header_layout->setAlignment(Qt::AlignLeft); - header_layout->addWidget(header_1); - header_layout->addWidget(header_2); - - // Caption Layout - QVBoxLayout* caption_layout = new QVBoxLayout(); - caption_layout->addWidget(caption); - caption_layout->addWidget(piracy); - - // Top Layout - QHBoxLayout* top_layout = new QHBoxLayout(); - top_layout->setAlignment(Qt::AlignCenter); - top_layout->addStretch(); - top_layout->addWidget(icon); - top_layout->addSpacing(icon->sizeHint().width() / 10); - top_layout->addLayout(header_layout); - top_layout->addStretch(); - - // Bottom Layout - QHBoxLayout* bottom_layout = new QHBoxLayout(); - bottom_layout->setAlignment(Qt::AlignCenter); - bottom_layout->addLayout(caption_layout); - - // Button Layout - QHBoxLayout* button_layout = new QHBoxLayout(); - button_layout->addWidget(okay); - button_layout->addSpacing(15); - button_layout->addWidget(i_have_read); - button_layout->addStretch(); - button_layout->addWidget(do_not_show); - - // Main Layout - QVBoxLayout* layout = new QVBoxLayout(); - layout->addLayout(top_layout); - layout->addSpacing(25); - layout->addLayout(bottom_layout); - layout->addSpacing(25); - layout->addLayout(button_layout); - - setWindowIcon(rpcs3_icon); - setWindowTitle(tr("Welcome to RPCS3")); - setWindowFlags(Qt::WindowTitleHint); - setLayout(layout); - - setFixedSize(sizeHint()); + connect(ui->okay, &QPushButton::pressed, this, &QDialog::accept); } diff --git a/rpcs3/rpcs3qt/welcome_dialog.h b/rpcs3/rpcs3qt/welcome_dialog.h index fdb20ff142..0ce0fe143a 100644 --- a/rpcs3/rpcs3qt/welcome_dialog.h +++ b/rpcs3/rpcs3qt/welcome_dialog.h @@ -4,10 +4,17 @@ #include #include +namespace Ui { + class welcome_dialog; +} + class welcome_dialog : public QDialog { Q_OBJECT public: explicit welcome_dialog(QWidget* parent = nullptr); + +private: + Ui::welcome_dialog *ui; }; diff --git a/rpcs3/rpcs3qt/welcome_dialog.ui b/rpcs3/rpcs3qt/welcome_dialog.ui new file mode 100644 index 0000000000..8cb3008675 --- /dev/null +++ b/rpcs3/rpcs3qt/welcome_dialog.ui @@ -0,0 +1,220 @@ + + + welcome_dialog + + + + 0 + 0 + 575 + 300 + + + + + 575 + 300 + + + + + 575 + 300 + + + + Welcome to RPCS3 + + + + :/rpcs3.ico:/rpcs3.ico + + + + + 180 + 22 + 341 + 31 + + + + + 14 + 50 + false + + + + RPCS3 PlayStation 3 Emulator + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + 30 + 0 + 140 + 140 + + + + + + + :/Icons/insignia.png + + + true + + + Qt::AlignCenter + + + + + + 180 + 53 + 371 + 71 + + + + + true + + + + <html><head/><body><p>RPCS3 is an open-source Sony PlayStation 3 emulator and debugger written in C++ for Windows and Linux funded with <a href="https://www.patreon.com/Nekotekina"><span style=" text-decoration: underline; color:#0000ff;">Patreon</span></a>. Our lead developers and contributors are always working hard to ensure this project can be the best that it can be. There are still plenty of implementations to be made and optimizations to be done.</p></body></html> + + + Qt::RichText + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + 30 + 247 + 75 + 23 + + + + Continue + + + + + + 30 + 160 + 521 + 61 + + + + + true + + + + <html><head/><body><p>To get started, you must first install the <span style=" font-weight:600;">PlayStation 3 firmware</span>. Please refer to the <a href="https://rpcs3.net/quickstart"><span style=" text-decoration: underline; color:#0000ff;">Quickstart</span></a> guide found on the official website for further information. If you have any further questions, please refer to the <a href="https://rpcs3.net/faq"><span style=" text-decoration: underline; color:#0000ff;">FAQ</span></a>. Otherwise, further discussion and support can be found on the <a href="http://www.emunewz.net/forum/forumdisplay.php?fid=172"><span style=" text-decoration: underline; color:#0000ff;">Forums</span></a> or on our <a href="https://discord.me/RPCS3"><span style=" text-decoration: underline; color:#0000ff;">Discord</span></a> server.</p></body></html> + + + Qt::RichText + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + true + + + + + + 40 + 140 + 501 + 20 + + + + border-top:1px solid rgba(0,0,0,.2); + + + + + + + + + 30 + 220 + 521 + 31 + + + + + 8 + 75 + true + + + + RPCS3 does not condone piracy. You must dump your own games. + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + 114 + 250 + 181 + 17 + + + + I have read the Quickstart guide + + + + + + 300 + 250 + 121 + 17 + + + + Do not show again + + + + + + + + + + +

An open-source PlayStation 3 emulator for Windows and Linux funded with Patreon!