From 1eab654ddf9ee53fe8420db0fd13b4dfb6158982 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 14:14:11 +0100 Subject: [PATCH 001/359] add vscode configuration --- .gitignore | 6 ++- .vscode/launch.json | 54 +++++++++++++++++++++++ .vscode/nc-desktop-snippets.code-snippets | 30 +++++++++++++ .vscode/settings.json | 8 ++++ .vscode/tasks.json | 37 ++++++++++++++++ 5 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/nc-desktop-snippets.code-snippets create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json diff --git a/.gitignore b/.gitignore index ed0e17987fed5..579bacd987648 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,7 @@ t1.cfg ## Ignore Visual Studio Code config & environment files .vs/ -.vscode/ +# .vscode/ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. @@ -192,3 +192,7 @@ convert.exe *state-*.png theme.qrc *.AppImage + +.idea/ + +shell_integration/MacOSX/NextcloudIntegration/NextcloudIntegration.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/ diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000000..3fe60132e26b1 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,54 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + + { + "name": "(RelWithDebInfo) Launch HiDriveNext", + "type": "cppvsdbg", + "request": "launch", + "program": "${workspaceFolder}/build/win32-MSVC-x64/RelWithDebInfo/bin/HiDriveNext.exe", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [ + { + "name": "PATH", + "value": "C:/Craft64/bin;%PATH%" + }, + ], + }, + { + "name": "(RelWithDebInfo) Launch NextCloud", + "type": "cppvsdbg", + "request": "launch", + "program": "${workspaceFolder}/build/win32-MSVC-x64/RelWithDebInfo/bin/nextcloud.exe", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [ + { + "name": "PATH", + "value": "C:/Craft64/bin;%PATH%" + }, + ], + }, + { + "name": "(Release) Launch NextCloud", + "type": "cppvsdbg", + "request": "launch", + "program": "${workspaceFolder}/build/win32-MSVC-x64/Release/bin/nextcloud.exe", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [ + { + "name": "PATH", + "value": "C:/Craft64/bin;%PATH%" + }, + ], + }, + ] +} \ No newline at end of file diff --git a/.vscode/nc-desktop-snippets.code-snippets b/.vscode/nc-desktop-snippets.code-snippets new file mode 100644 index 0000000000000..920dea7cb70f6 --- /dev/null +++ b/.vscode/nc-desktop-snippets.code-snippets @@ -0,0 +1,30 @@ +{ + // Place your nc-desktop workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and + // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope + // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is + // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. + // Placeholders with the same ids are connected. + // Example: + // "Print to console": { + // "scope": "javascript,typescript", + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + + "DebugLog": { + "scope": "cpp", + "prefix": "dlog", + "body": [ + "char buffer$1[256];", + "sprintf(buffer$1, \"$2\\n\", $3);", + "OutputDebugStringA(buffer$1);" + ], + "description": "Debug log output" + } + +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000000..0d75aa43d4575 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "cmake.generator": "Ninja", + "cmake.configureSettings": { + "CMAKE_PREFIX_PATH": "C:/Craft64", + "BUILD_TESTING":"OFF", + }, + "cmake.buildDirectory": "${workspaceFolder}/build/${buildKitTargetOs}-${buildKitVendor}-${buildKitTargetArch}/${buildType}", +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000000000..988cc883ce738 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,37 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "clean RelWithDebInfo", + "type": "shell", + "command": "powershell", + "args": [ + "-NoProfile", + "-Command", + "Remove-Item -Recurse -Force .\\build\\win32-MSVC-x64\\RelWithDebInfo" + ], + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "A task to clean the build directory using PowerShell" + }, + { + "label": "clean Release", + "type": "shell", + "command": "powershell", + "args": [ + "-NoProfile", + "-Command", + "Remove-Item -Recurse -Force .\\build\\win32-MSVC-x64\\Release" + ], + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "A task to clean the build directory using PowerShell" + }, + ] +} \ No newline at end of file From f6f0a486a22f3797f980d0a6af36931a1b81291f Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 14:15:05 +0100 Subject: [PATCH 002/359] add licence and notice --- LICENSE | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ NOTICE | 18 ++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 LICENSE create mode 100644 NOTICE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000..eda7bae4c9726 --- /dev/null +++ b/LICENSE @@ -0,0 +1,73 @@ +Apache License, Version 2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and You must cause any modified files to carry prominent notices stating that You changed the files; and You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright 2022-2024 chinchilla + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. \ No newline at end of file diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000000000..59ff260650176 --- /dev/null +++ b/NOTICE @@ -0,0 +1,18 @@ +Nextcloud Desktop - Ionos HiDrive Next + +This project includes software developed by chinchilla, available at: +[https://github.com/564398053/Qt-GoogleAnalytics4]. + +Bundled Components: + Qt-GoogleAnalytics4 + ga4/ganalytics.cpp + ga4/ganalytics_worker.cpp + Copyright 2022 chinchilla + Licensed under the Apache License, Version 2.0. + You may obtain a copy of the license at: + [http://www.apache.org/licenses/LICENSE-2.0]. + + +Important Note: +The rest of this project is not licensed under the Apache License, Version 2.0. It remains under the original license as specified in the original repository: +[https://github.com/IONOS-Productivity/nc-desktop]. \ No newline at end of file From 695e8bbd76e419c2f6c7bfa842153b46c495c471 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 14:16:22 +0100 Subject: [PATCH 003/359] add ionos fonts --- fonts/OpenSans-Bold.ttf | Bin 0 -> 104120 bytes fonts/OpenSans-BoldItalic.ttf | Bin 0 -> 92628 bytes fonts/OpenSans-ExtraBold.ttf | Bin 0 -> 102076 bytes fonts/OpenSans-ExtraBoldItalic.ttf | Bin 0 -> 92772 bytes fonts/OpenSans-Italic.ttf | Bin 0 -> 92240 bytes fonts/OpenSans-Light.ttf | Bin 0 -> 101696 bytes fonts/OpenSans-LightItalic.ttf | Bin 0 -> 92488 bytes fonts/OpenSans-Regular.ttf | Bin 0 -> 96932 bytes fonts/OpenSans-SemiBold.ttf | Bin 0 -> 100820 bytes fonts/OpenSans-SemiBoldItalic.ttf | Bin 0 -> 92180 bytes 10 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 fonts/OpenSans-Bold.ttf create mode 100644 fonts/OpenSans-BoldItalic.ttf create mode 100644 fonts/OpenSans-ExtraBold.ttf create mode 100644 fonts/OpenSans-ExtraBoldItalic.ttf create mode 100644 fonts/OpenSans-Italic.ttf create mode 100644 fonts/OpenSans-Light.ttf create mode 100644 fonts/OpenSans-LightItalic.ttf create mode 100644 fonts/OpenSans-Regular.ttf create mode 100644 fonts/OpenSans-SemiBold.ttf create mode 100644 fonts/OpenSans-SemiBoldItalic.ttf diff --git a/fonts/OpenSans-Bold.ttf b/fonts/OpenSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..efdd5e84a0397ecada7b9cfde51db87db08766bd GIT binary patch literal 104120 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

n{#NV($fZ=b2Ttd7 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 -Ui0>vvum!cQP#SwwX988o3plLZOz)* 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 literal 0 HcmV?d00001 diff --git a/fonts/OpenSans-BoldItalic.ttf b/fonts/OpenSans-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9bf9b4e97b6576c8cc3d4527073731fd9cc57493 GIT binary patch literal 92628 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

4J;+I{;ffTJG!iGMcG*?Vwl&%p(3b?*`L@59ZU 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

9nNjw4~{@r0I~;bjWEs}nhrT# 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

!GC&_!#ZtN*Mh&_?3T(2tal^%sA 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 tF{6TqYG~a+&=^Ld*=$fFp9q2yx(>MC>Dm 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�?uC|3&0+ngjt%GBCAB^%e& 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

_T_kl)Xoan=RX{3lY#VQTZ z1Ngku&*6tipd31b;ttp}x0;xwAm*unSjz`j1Pm~^A>i<7who)KxyUBWP|4@u!4X2% zK|HI=n4|RmJO4RNJ{8TkFzatSj&1)tSebUPg{<=XJp-Q9N-q9uBmV(ZE1=lA3x(I$ zv9%-C4@0X(W(_iN43vq3*Oz-E|37>ZasDIRqaEf|#(lmqW@4t2P>DVOIDg5>Y6vQs z9mvcHnFFg660Cs$`W#TKKo+oi)Z`Y(0{<f)6=@xRUgI0)qVGQUUfHV?}RjnFc#ed`t{6Mq@C*0Edg>reca@lLoA3ZG^+stUC zH*!S{oq!(rv}iYYiJ?pa6SG0nJa#8eU9ZyxdLog>E7@I&!5;Gz7q-r*6K$fkPJV?J z>tD99`%ipaSF?)O(6axPt4ht`ebHaoueZmRyuQ}e^AuSnq#o?o`O*%3t^4BnBgt6n z7mQ+)0XMUFg{%=)p0*RCs)?WP^ex1K~j8r3I%nz(a^XMDqv~%n~}1nzbrw zH{nYV?H7G%HeR@!_o$QqSqHe+8e*!_QewW><~W5uuPS~GZ7Bc=p6-#%Ao^2{5*QiG z0c0JR!Lx%=n=Vm zr`+X8^ksS2YtchHqc6NE|0ur^?Iypbe?=Yg`DikIp(TT`)=J@3&!dq_(HWY9nKnay z8_aD2I202SEIB!$LDe~`1ro>dJL%fOE)$Az6GL+|6l9aH4GLN;heAy}u>HV`fII)@ z(qq@3o%F`>b7wz!@5H$sD`xJQS2dww`MFE#_4n^hFeUC?d*b|%ZS9LUuD<);HS6x0 zc1Q7`o36O>b+r6AcJVNbp%bx|1cxj;4Q4Y~99&3~vDqPCoE`)G6F{UYiJ3TYl~$ir zFIA2rshhSi$kZ~AKjJVc9S=R~Ha8wW1dysz=k}|wfkG|&*qH`V^(USucIBSfuB2=; zoWwd75$#H>%kyZFMQRrbfW2J>OS-CBvFK!@3Yf5#OhoZ{6kAeEo|s4V{5#RnkYwv# zjV`1a0-+eqTNm72x`fy??(W6i6BG~L@K_X|--FPAM=^ob(d1P0j0FzA1~AmL2F_$CbWL8Xx-&e8j`yQ(K@SC97zPBprimW zDJFL%lMsQr;Ek!*Ekp_OKxwT(fasF9etW|n61-cY-!w^H^uG?{@n&q616Gq8Mezvq z`!!^+YZ~()dMUy`i2l$VHyiK3KGCz4aDUwa>Ml{=tlRL$)RSlH7Oxrirzh*=(WSXZ zo|F4UPcFO}blz|4E7nN3D^}uFP#N_Iv`OL|krfk2sbVNpy0Or_W@875ej1}o#)ZEP zt&>OKU%h^ah=W9&Qy?3rJ=!$_-zav0)nT`zfJOy6U4|Kt5{&Ax7-CEUw=hcdtx9@8 zY~1iurW>q^1M209y80c>54-pUjU!2aI^BbKCNbLKtO8E5ifEc@07ki}05F3^0ZIrs z+OTKh+6M;n56>#-wuoA_f|SvMJo+0S0J`>zzW^1^)A;YkeNR4n{4-rSdN6wb37)ia z)jbFw3D#PJ1#Pil*9MW#oUVWs$_dT|ADx|v*u1DiKoWBRV%`eAS~`d5#HQ)R_ZG{C zMqKDaL|3b3Hk0b%Tsl_wPihD?>(~G6t9$OP)9QnDNDM$zPQLT$+SRL8EQ*q()Nyto z+|V8mtzfEUav(nH^%+qq0lX?4;AlpCP=2?_h*M8Y1Q2$@RBfLbRuA!iHSokb96(l< z*!VmvVAEfChyTRtj-RC#oZ{&$xO_3zT6df@D{#^XF8c&OJX8Uvq9&&Vp+E$KHqC}6 z*t{APd95|`b4y{yG6YU6P;il1K)XIrk}i2Euqd%p^*bu+zx$Y#@8Iis-RE1cuD=n6 zzRwgbl1~KSLN6J7f7Nb&=nTJyPcPr#&tPHZ+H{@)b6Glu`U|Qep_mG^ZsHg5+6_p1 zHkg%Ax+{g^oHoSmZE%SyAWA@!m`Dnk zWC=adO)eEzxI|vWmmFhTwm*OY^|A-*K0k1TEjlCL5Zxv(E;+gFwNn=d$v4PHZ@-V9 zffNL3LDcJS(X>9z7&l;W%_?w<2NmyGbQf2q2jU;LV10^sirAF^d^ZqLbO z{5SqRb}#w!2g7UOkO=1(oYO!F0Y8A#h|OzN)5B_tHwE7OloYGYhUlctX$9#Pkygak zLrkKy(2#U_2KS+^B^gM(q!V&Xi|@sq)ci%WRxLUA5l?03*ruh+xAIenV}wGBY7nSQ z+;Y28I&GHM?7e-~=2|%0r)s4N?-1&mDekW8vEmKWGSC7Qzzr6|DijBG0Pd(oe|2R{{G*(Gie>9J7+?7Rwr+d z%8w4edlO2%9_Fw9YF|5@FC#cR*|MMg15#vw(&=x!d@bn*y`&m@B z3e6cy+HC>D5(-1?M3-rWDFjkoI>|ZbQw9P#9 z68jO{gzQzdfAo9V8~r|dLN17YAihfIHQLe_xd4md+039Qrff$f(C!SI5)5!^W`r{k zwsdBMG7$U9$Ou>hSRjFb1wkfDON^6v?5o8Z!OWx!F0dFPHc?76frtrbd>D1=OITUs zmA6mqT6gTlPfpx^^S?j(e#wCs?qA1`ZIYMN??`F0eDFheA1pUzub8yy$pM>&-#F$a zs&JtdeS?@?u&$WsAOvrm&0upnfa0p!oi;y+(Ba9%hsXeW$u5xY{KahO= z=J}n{11WRw$&{BUhxk@L_7&SA1N)NwQ}2sbh?VI>wp5~GFlZiRGia`W-v|x_tKxPV zTz!S)#v^@X z3&+G|0!b%o2@~3uZuGL@^2FNO=oXAEFJ;FY4uYS+BdXvpkABfyS759~78(d=pgo$* zGQ#$NwV^>4M@~~zfuJo(9Y&dkvT0Wop_m3DsHHUnuRB<;u;Z^5Iyjyq@XicUe<1<# zp;%G8L@@4>eAAHo$}|H4C5E_+YZ)gIj{)`PI=;1*KdMY6QKuZb4^I*`HmLA1NTYFQ zRAIu0-XD>DH@u8#$VbWbm{Xjp>bGgo1T@kF>{4>ThSCtH&6NVW7f3%tKx^qw*Y*A; zy{$RB%qLMXHYyc6N>l*9cD&uBI^ilp{8{lcoi0U$1DYBxmO+!X0#o8lZR5gPxqt0L zB&iYl9-utmH~{NyE1uX6Pw^PN}V(^4y%Ah$8dZFL&<4KER6mv7&4JI<{3`-G*7BKd@I!nq+3GY8LjF zj4%ugFa%feyqNXXEHT9XiklGluAF0E?z-5kmYuI%qdebmQ16g9J^6AYq_l3apv>RS zNZo)tfh-o;;-uPtgni6@V|>`iY1HybP0wm!?$PsVAKrDbQh(xs#(~ib3?K@P1C;}$ zAz@8xspyvt(gQY&L+Y5Pywot%;4QB=K9sA%U zFRxWIYik?MATh&q>pFSqLt7qyk|Y7dcRhdb`O#Gv8_`gMtR-_cjX*6)_$qZiFW&wndL0#&(`Q1q(w+Ih~a8Z!0 zLXp2*WZ8%i1RMUu{BEm8J@cXk>P5cm$?cOKEG*kO6nH-te%4pME|_)b`PKE0c3PE` z$xkE1_A?jUfXHhvLHo#Jxhm4`cNPl;Rc#Qyf_}sbY9x{Vqd;~MiXDv<4HdPr)zKF} z0Z6Zwb4hf<^rn2ER%C{T5`O8k4=y_Rx!PJ5_BEdT6h#d`Jg|M+h6lE9e*ifFKl8sZ z>woB=;H6(QpxFH)ioZX8|D%sEpU8AqK=23+Q>=A2R<;B9`Laa~`0ZFyvI&WXcz1zB_dp22kVvt%Uu6{e-FsRK&6qqTloX zC3G@pTqmRRwhk*RkybvUHwyUN6*Vc@3DM(phMZXWl-^~46a>LA&cOd`<;M{Rj9B)- z6=-4_mKR=tpTOHNY+HHJni)ImTylQ&19ROIs~)`B2NlQ#OS4US;_8yeo?LxoAK01E zcKGK+^_YQb-0^w`dH^O_oOdvNP*?IDglS03>CgBLVxgB~gW{SPLoEL0N}Q20>4=8j zSdV_>UZd{Y?30p{jR8bAd=51&B!TN0aRU$}0#4Rxb5o6>5xRU_-uxFqEY45LqC<)Z zMc$e35XLXq!e>HO>R=@#a4=m$Nw2+6X9FYV13^s z1*JsDYgF1wA0OwH{CaMwuV)u)e`LNpHUk5w>t-}kXoUTVM?U(DF0?T-K1gls9gOlf zVx~xn+r+9v6dk*5K3o>?o%`ZZY`xwYmICQwWGUcW#P4++OFH@aa+9biCmyk8ieyAmCYY-dvqBWk}y53ys1Ck;UcWA2k55k+$TyGBa z*STWsnsUxBzr%dCTfakQJmT2;4v0x2XIb2%3DHi!2i2Q*(RUUjG&#zhFKnte7k3f6 zZ=`;WbP{)=Yl_7*$10#&R=$JLVZGiKOS~_k5eR1H$hl=_vwJUUHzUCT z}6`dyjT3CQ%Z{1R3@}w$)wnD2c1ccQk+;WNK4VAaI8mcqqFm^i_*H< zqaQZ+?L%go3oey zdfS@^ATWymdh2-BaSV+_BL7X^EB$~7I{b|dou%{xOfp97_6p;{OD{iXv+3W><_e?a z2E7IY$B9B!*hs=&uEhB{Y$5qQa=S-h+^W3S^Zj!%Sc>8UO z7A#px^S9~J=h`#UPlyyEfCDYe4bL@%q2yMnTGB{NY38noD422DB*c&c`b(oC9VC}# z=>V{R#DY+Ec0o6PZ%fc+8c>l^Qj*s*QL$%~m$&O{$7e9X5KJ(7z>^7fb1`PI$s>y{ zKAW`9^-pYC3az(@#DA_)}kg`Oh=#*mq}|U;pqoyrwZ-rqnXMY7w=r z`fGVN_P7E5Vv-i%&yz!f9VsbdQDp^D1d|b7d7W`mFbLOiX(`{3$4AZfCyfJ6z)9+?ng z9b-b|HH{0`D9aHbq`zm<43rMM3Z5yCloN4F9WF7gRYj^Kf+|dnk-{@hsatUl5%M!KV!RR*+q9usDs1@Lc%9dtFB6hRe zospJgb^2vzQc60wJ9AwrsVSA!_EcMXI33KfVP`lL?in5uR>^`%4F{#5Z*X<+_dK%H z$R-;`w`5{%jR_MpH_n&tM@z*g;vM)Q#w<%HNXX8YcOToN%nn^TVEK|mOKO*d1<7oOpEL3ENn)8*q%FuMB}T1)6h;Nq^^vlSl$6w*AXv=p zX4zv7T2l=LZId&usCIcPtCeJ{%i(ZYlNAj#^lh%FPBWw?K=-dkcu%*3Y4C&8FMJ4A zk;@=KbgpyS?J=%%0*v(`?OP`t38y!wF=>?!$B&RFvB!#!>|bEYF-OEzfaaU_09 zJi5K(ThG@Y7&gzL)}-BYFFQH3-%F>K@Bvp2Qy%>MA5rj;oQnRicE?(Q_|P*JEzObU zM0%zMQQwsWz6fJdmRq$X1r51*R%GW?R+|#gtJKPBIn9|CN-Io*0h*AOkmk+EkOo(0 z7`+aV0mu5;w8sAH^u?tdOQ#}aqn`lpnzEK91@o3$T895AgA!{)4h*uzxR3m?jU}C@*=h1mEqI*6)PYjM8@W; z*h|F9Kv)acMT*SOaG2dLr35luu7bRPWW@M~yxED?Jg<^y@+Nu{^Gtd9gR1j9NSR_r z5l)T;lxZ6wazy{=&}^MaN3#+}s#Qxo&6aQ@El*3OH0)R3d?7m6W9Wp(CrnUk`9)s(&9RrCWF_0jTrrYuXd8Yc zn9aXyc;kMiY#cZJu8VifzZ1R4#Rdl62Q)XElo#=uHH)gL4rDVk4TicTH2aDkak& zY;0^?O?Lled9~nURwRGKj0`=siCTsRg6|q2lw02M2F=lhGZktCe-L-4!zFTj5e%X%3n%*-y70;*`Jbs+Kz4wf=l9>YrkDnl) zT>AXfn^JyaD*``XJh%G= z@AAOUT8K?0S#|?kj#yy`vaFD_(mZFf;#7({T$L@6!mMfI{d zY*~~PD*xquHnh{?^6BgQ%pP&&sCK1ybegca&#VyxM-`RdQ95;Fznh2kyRN8gNy+#v z{pJs;x<-~F zp$B?rDI zN`LbPNy8?!P02+P`nRlVF>fb(m)Fc-L0-3neHi^_X$?ENg1J_(Q2CcD_>U|2`7+34 zoxS>F`1Md`0?Ca93-)UBbMTblT-W7x^EKf=z6NtU3$m!Y_9|qNSxS$9nGrecip6R+ z%7O$PI!=qZpn5o#X;x;jS1Qiz=+6^ z212eI!9ToTSg!Oww5X={htT^NflJL}TYroT4d0dT`VV$YtFQexa?y`gL*uZkQh^^_d#jlW)^ek=pk?!Wyt zl)g;DJ}i+Jr$YvGw5#^Vqfy>lvzE_fn^xBFpI~{XrCE0=zPI0=fMevut9M^v%Wc=r{VUc`SGi1H zq17QGR1opIloXT%Cn;(u%?nR^azdIN!x&4RiHk+?Kt1#hu|j#NdaN1JCD)5>Y3#%* z*6yyW9kepP^QunQ&73i@d~m31nEjJ4_4QCEuUWL}p-^yXM$XmMl_T7yeD>(%FKr|< z^D*u_Fz!JqlbA7+Jz@AVkvo~4m4;*@lq<=ALr(CAO$sq(>tg|yLrg}@ipA0d_jqxT zM0PA~QqLyK(c&${v66rK^q``SSFhe^F{RGAre=NZ>djBHzE|BiV)!+)rz)>9?UM5* z&*s{KuIq2Vf9Lx*j=6EjsF7W(Z=?NIj`<>Ai~*+xe7F?vFq&i~O%ihxYY19Fj&eWS z0WQ{Zc{qO*e|6#Jv5i0B+$=#K*P)MoWYV=mmUKqIp5rZ0QjA7Lb3s3EU#Pj#)2;c* z`Eq`Kq9vROStaT^3dfM~6nliOqto$({uyI^Bp3jJ|DnW}WG+ruFKj2I-%v6D8-Lq_ z>vunX?*oqvyk=1O!=+WjM^=rwDy5=-ecvnkUbU)HdvpHeI|mQiHfO~hH}|`_efu$e zC*B^N*lpmzZas&jSTd^EKf9F|4hVM|SKbY?m5H8gg@#L9XIQ&Q?sRzBG`EtOmFloq ztv;tCI2l(tC2@EO}bgS4QwM9BFlS4x_1L~BJ|Cw z$`KXwr_H|p)=A6m?$4)$X1#ih?mpdKRIE(1jh;Sj z+Vs&1Yu7e4B{9M4aoWl|mv#)NQ!*>5PqB~YpI|@3emKroWDFlGwfC*X!ToPr%BB$1T&JjWPh_UAl=c2&_Tmi^F;rYns+IB}(9n#eSym zC9$7N>3w{~9Kfxe5fmeCP6y76VT}QS3}|FnpP5Z50R-Sx#R^~6-eDbP{3gwMS#!KP zBRY_|0dnF%9NnQFn1PRmSD34@!>n2I%gnWaxi9XTg%1PAFCJOGc=7V(i*LV&&s~lW zcCLQL?DlQDx1TZgjW{P@*b(nSZ=q(cci{du7Iq zSNMDM1OuNn>*6ld*T~FyvFnT(tQOB6M2~4KWUhtG8J)~r1J`cdy7qyGwyb;o_1DJr zxw@z~PR_oiS5>ncGN2QEzNH|05Wi@dXd2EQ;5S`&BWcf7{HU=GXQLt!u2K6)BC`gw z5rGF`T0z^qG@m0Q&EZJPP-L9th5BS;PQ@G+bucR$ZFNz*PI4|tyM+c8c9*|t@8dTL zSLz$98iy<2w(T`(;0uorIW%C{qa%CvD5|LHnmnL??|~J4D*73Gjl&zSRi11pEbdh_ z?Di4Mw{&i^XK0tg(knXkojs^4|GsC%z#fr--~uB3K)#mZ+A-#y!Td>RA&6Wzp{2*7 zfQT$Y3xSNVz_WK2h&k<0H9Rp=o@@+SJ7%{Jg$m?$a<-yP)!{1t40V|cT+XcY#7@re)z^&}<8*z)7N}?Wu}AmsdY4IU z*6=q|4lEioj(L^J_PzKcI9^ATFS<2YnCUdn&mA)+bLm}OPRg@;ww0$GUV8sy`~?4S z$&yn{y6%eA;JLww5X#@Hko|cP9||5lKGf+*_}}BvEQ6X#LE!0&bql@mc*wRECmIfQ zY&)1_<+rZBa&(stc}bzXuETGe5US^yhvXA*0hUeg;9PF#yuI^AEkboPU0w_Tj~OZ#{peuc~e*BRc0r1k;@Z(qe_bcz*#rdRXcCD#7eE8M}o_w1BlRPTNpbN|~ z&V%;e0Y@>#?YDyc4y&(;%@DZ=hU2t8$+IM`fD4_jXu@fhq92G_UxD5VzKl@}Gz_@+ z*ysn!iDoWId6e`fz0c3W=kq>lWx&?%Ba2})AAmcWpHt){_#0p`V0`Bxm8}$-sugET z3%p^!;w0Pm{|j$eF0BFH@GTQ2+&(i7BhH^0cMI@_=gr4q+pV0yu4QSHI$1ucy$;)* zp5$<#tlS1qNJ64)MQ&o@YoAiooKzvKn>hS!c1P6z6LgT@hm)17B)|bzJtb0X%sn6?5N&$8X#soHp;S_9+Txp<;k!`X)25U3oHi_ZY zKluF+`aN2UYDvR*5#bG!eh@G?-R=}Po~#BnBhv?p8gmHc@gS)I$ZEX6h|*3F9BR3% z(HBu%M2zz3!5(sH2^@MzWf!PDf*w`Y4x=df4IqYXXX98O*6+FEF3I~HsY@qc-!Kmt ztH1vHC&4FAC-tS~K6{V}fD1W{|_ z!D#qxMqs%3ZHmQ`jy+;=Dae_r+~s$NhLkNtdL( z&d|b%0~%l4_Vlw4Kl1F;TXkyOdzt(+@#3y__PTLqaO<-<_db8>^yyQSW5|dZ!mtSA zESQEhWYk-IZmT;r#ljrPD2;ann{guEh^dgezMv~#{`ioJ0hVG|nmCW$T4I;}p?!{U z{RZHPT>z8pU+Vt+#zAxGh{_C5K|NACY|tKO`tH>$63iX<%{u-TN(8zhE${=m$3p8J zTY`sPax~Vj8+Of+_vGVP+l^PNA4flhVS|jDi*Wm0x)immAM=gko%s!S(L0Ta>c^KD z@VLPY*g!FP7B#5{`CP*qXpz|GvZmQ#`b%CbxDyJo&B^u>Y8P6J?q(wCl@f3>$P<&! z=hj-L*oIg38Q3E|ryrBF4_9T(+3hGUD9AUAx8UAg`J-IER6{!IK7%9yGJ?_vV$L|B zMp347MozSA*EV@wy5zO#`crwQPUU4~Wwciz8-a^L$SZk5^7Xm&5fgb+_IRezap>m5 z1QNp@{R(NaeuX=Jg~$;V(o@e7?Q?)+XEO^HWPr}Qt=G3meLfYkwJDc!8R`nx!X7B1 zm{vxhO>QBe5^|FRT5*XKO2l4w<>h$|iE7(yZ#GpwqPRJRe1uUeY*_$D6OTcR9o>{t ziH?g2rzB#J2xnnnW%0A9Fo5?NqCnf(ZEU-Kw{QG{F@FBi^!lq!L!X>>Ny5)xY`(33 zyD{C?J$~|ql@seG-uJ>gk86ebp$CSdKJsb4nvZK&QrwQ~e& z?itLE@v_0-J?Vgw&piDMH&FI^D$Z~m-gbuuT$yBO^d6MI2Y`U7(t5^12$t)4dFY72 zpa5^#OV!$)yh@4G0!&WHQF1N5=RV+z>wiseZ}JYhuO8%n?JTCJH`l&;dVfur9ZM?V zcOhMS;FuRnA7feUgT_nuw>`+717GDvZamLMj)ufSHk#T989-Phz!o(Da*R0x0Nr!K zX`KRuUBKO_k|_xeXA??|WXTCM5}@CRjRy+?!Qj@xcs=|BdjN@gA`lPFNk_A2g0Tp) zp7m@8AA3wL;{O4j#bkbzefz=7`wo4wU%d#@k1y9lp&I}0C+ft;f))4Qdn-v+YUfrB z*)7PpMeQlPfnKLI0AGdGj;ve7?f@>5iriZu3AiMO(~89Cc#R>%1By>ulc^%)XUZCV0Mk#I&bDs_`pgC~f(T_qUwLCyBG1mJZJQ1db}?HEeC zD^WE==mwnT5a6wG0vn7@gI_>;wN8|eZOpiOO&e0|Ni9QaN|eun)gj`_O?l3pplYZK zzU9AI^0_1)B457b+g~Z^d1u|~!}|i+ z>&W+p4~^nHgt6H%k_`WfO|c^}%*z0^02yKeC$34cDk2gqlF=wa)s#en-G%_A8_^4l zO(qNH<^b(n*|dJ^27Y#rJb9Zu=|FTe8$7IYT0%swiw>tRigYVIPu@TNhMlxV;l)s? zDuh}9EO5dA7r1vC4`EYtCe} z8k18{=0_f=oqwRYqqT8 zpC4iw{5mYUbIhnZtdO&m&YZ4rT3V`0W=2C+W*Q5JLSZONo>U0O3^_G5A*8rW31Vo)1{aNN zrJ=?K*UtdW>CIGtVJgO%>a&$hFK}*IsTO7cWF0ww%lP7D&#cJoJE1zcE@{+_z0#LI ze^23!8|L!~%8{sr0sVa$cN;2J?gSO=v02yWM0?9ea<7|(RP)y#xo@D6{d3u7UQWG$ zt5l;APlp$)GSUW%$(0dG2&GXsjM-TsmXV$gBx$$9lZI-IOc@cUbSL^D2E4f+=u8V$ zySXFEAM``f`=PGn&s;leV9`VM%QCuD4Yq8yUNNk5?(({&2^|K`yq5n-NssOY9Zba( z{;09T&?!*2hh94%CHkvuNs5f+&#yL)!s8|pvhx`g_~vEzG(m+x6#)|n3jSj~qVvDEl{ zISdu|Z>9N~d}Cg;uY5S~y6Kp&BL}<0#Pc_pvoh)_?GlvviJnf1bot*s1(Z4Uv_E=U zh&(mXUDTpbcUx|n|DXQ;!DP1XuAzuOGh)`j4q{4&53+2rTv1h)gDEY{#tB&~mjc== z9G}%~#-hq8{3bSZc>k2>1=*C`b2QEBEqRD^Q^o8JnAkUQ67}SjYN_Ep=?dwt$dy2> z=$Y8RzolncpKfhZ+U0qzgRdMI7*svbTi&sV96p8Z5$|l@CekMrX?laIQ&U~t+Oz?u zK^xTqDQ9uH0Q%#~6o?ckLlnVsswmK-<`N{H0KSvT5ga{(uwnUY#gqroLiPp84N(^N zq8NqQp!?5Us4j02yMX&VH@B3SlHwOr{JF_xscHtpkJna@yXBVt4-FXlXx}MQraX7> zQT@9KP#F`Mjb{NLj2^O8up!k;-6xCu@6`E8VI%Og)Mt-SVviD*E>5C24S{IeUeA752ig_Ue%X z8#NO?G)GBsNio2NGfPS`bCmQRJvzhP)5DdX;cYvh+8aOpg;3D*1BG}fz$m-^f>A|S z7Sf{Cup;$QkF(Gap>ChX$)P)c%F5_>Ihjpk4TyDA0+mvQ4S6hcX{7ammM@gFOUN&r z)b7?*r!M?-Zp@4hS5yzb_1T(Se^uFYcaFaQkt2Iq<<>{mF8~I>pfw}9-gf)wNsF#n zHR5iq(mC5Qq({oV(@^?9;O+Ih6gk+YZBc=y<*xB2Xxf6=H`gfYk#Qqe*YC*4T3+Uy zcSCZ=6*I4awFLhJ@lPP{XrAz7#PCG%dIQvtW^NcA=X*dTyEV=?ycPi#NBI^syS8Qz zh8U+f(m^Z{B_>>(-53%pMxDJ!NBPc?wIi2v!$ilO|Bt<~!2a9UpEY=uQ|@1Yj*^Pafo7wok`48$|&SB#)Bn|5b<%EoE6S@QNr-N>{F~Q}6p$qUCQM0gXHE!}ymF4{4>(L+fvSAgO>HT+ft(sZgW=LnPY|_34Ae1!@e{;?K zsG56eQ!npoIPvI-YIk**6o3`)WI<e~>W8qrsZuD0S*l;7b{C%YC9!M9a5+rR{BiVtH0RI3;G?tXYio1 z-ec!wcE`efl+O|icOqcwXX6#9poPCJpB3`=dqr2CoY=NOUfPhpf17)mZBq4CjK^H= zGcCe87D%#KyrWg@RGgzVmzEn`hIUxpd8h<#@B(UYm^DN z_1W&u2xy{K5)zM-0#9r>K{6FRfEgs(Ufd?WCcRHVHPT zxga^)uYiC{Nl!N05G2maE^rnAM9AZGrKcsE;j>59kkAhPS1*M{3N{*=)SO&6CV?+Z zXI&r|@DN6WIQQVTa%JmR01V*dXMZ+FI+u4hA3y)uyQUuHog?PA|K2#XW`(U=>7<0a zZ{v;j?j@z&Y%6Ny>~Hwl>`v_pI%lz*^WU)atj=u;%5(Uq=l=A5s7=P8(EHD_>wC0G zPj4H7msLnv<6=`+Y`T6xlf5R=zE4@Gpn&D{zhY=bH(QzIn&EyKS>P_)ut-Ihj7XQr z!0Nm%YD%CZ0IAw{Y~ekk9w)f|n)K;kP85?J-g1Eh5ns^c`H>z$UNjKpk@%vN1@ai_ zhY>2i$@z&PLAOPndP^4*oO#IR@7Nxrg^|*BxU25FWnw{Lx0;)0cbUClS!FbD#8chN zo*Hxb{m0jJyRM-B!Y$-~LM&-=-QX*pn8_RY=Zt-^Wnuq!{i;pXYX+*r3~yFlm7-_I3T9jQ>v6kM@qcLl)SvQ8IgYWLA^T}EklMD zcLD5nr@_4~kq|uCs6Yq)yR2qgTuFYF>YE7#UThE{FND7Ziq+pf{R^VXf}c|OXyKki zl|NRI?t_c@0Z;&3OhYTs(lSKVzZhjDHVZ8#0er75230LsKX&w*a~Dq@>aifNyn4XR zGg#50**#|UVeMwl9Z+4Kx1h%h@BHT~SJj$ZCKODonLE47ocT*D`Hw#=NXtsYNcwv9 zf;4iVQYSAxab?M0|H{V>ZIi=x{PnLTD-+WpaQ=al@)N`3w`8@+n&=LVpOsyZeP(-) zioDJ~w>vSJu;OJx@-i+)^_yLaATzvUhph5WJ%T~z>6CBFGWP22XqVe=V0BtqSvXfS zo9z*^v%(I;JL1b#yOxAY239A9Tdc{XzZDmsD4<9@R%A;DMNAj)!#|uE`znolIj#@F>u2lh?)=8v zb;sxXM|#~^Qa5q!;lDg?RFmr`;iEp87c}`mSMnP>bSNrhkFuL+nKk)9vCMLEbSLN_ z$S!h%Vyy6CNY!>?tgzA|Sy{}Hlx*`D5xe#~LIK6?X*ooh$sVVhj@FWr=22K!?(Ed+j}n;k8V&=j~$M`|y`*=hpIVyXK-D z$JMn;y|x$aK(s|NSX>4d{H}% zu*%p#pX-F8jVMv&i3g%8lr5$58A=b{RSr|x;(y4d4nRj*E!tl zWc*&pPPWLnmrZVUuU4{DJ{gya+QIFSL3y2g9#>-W;C^uY=OgRnsJ0f?0o4KkX&V)g z*TEXPBQo&1yuKqddf1YTzG0na4DK+=HFK6^>{3zDYe>JoJq8cI@y5|pCtf#lMq1mp z*(HS;c}gc&&^To9)EOn6f=EA^F?H||qseUdDKt6A^%f~BqR0&67{p-eO4jdwh%X%2 ziqNeyg(@P*BIt#9#p1sbuV8QJ7ykeMj0`r>zkwF&gHp|I6UwW!t0%YXYL{k8=6eFJ~`+mTk+swdmF%`bdq!kFKFq93ZK zOdQPu?Fw>>MoyVHCjMPH9seo*ohPMqQ6W|cVLMyFi=rcJ9+I6bpd znSyvF)#x*v;8>Em8iEs0{DTY{B5G)i@R5?;uE3*ShIfOwimp)0tnU6<<4WCKt=@s5 zaUDH!renZcz0NFYnC$5N(vUMtlv=sZkv{$YbW7tu~$>FhOz^ld* zQvATUM83=4icgFwhJ@GsqFAe!fzsj~1jGnRTVQFIz{4BE(`HZ|OGu}r5i}gzZUF&6 z$AbsgyuS5OuetHqA-T_?U6zL|V`fgd(Y(#J4@T*G^WV8zedFTaqu;U`CHvX`G?W?& z*6f^KIcCfw>(Lh=fM`Tq?Z)g5iL|j8&8X5bI2m)f{Hfr{4W}y(m)j{wwOoF4MvBwV z{D~fdGmP~@py6MhFe-Y0a5@1S#+#3L391BJG@lK&0O@e|lKPs5Owngfu) zN#iY)Fa>k02Bw9r_f>O_!sfgKW?EOi_}x2;Z<%Gj2zB# z`Nu4B_QTK4@Gv16AsBhrBU)%l^!%2GcGjuemi)WnGd&ndtC^xu7)227NEMNM7h*uD zssLzlz~J}#td`WYfH%cugTvGesCt6}*eEq>+gw^ZBWW91K5y_`&? zyB|h>vaBAqyJ8Q@cWJE(3`6KF`LN=OQmug6H063c{(vt#n30ufva~74&PYsmf|3W& zYN`)bwbKPiwPXotG;wtXfgrLhe%EN4cMa=Pr|K%v3HzWZi+(6LG=!!T?}hx#v_EyT z*=m<3nj%lm_~iQobH^_oFk{z7c}rbk{=%tCCT#Q#8MZ!ycQHwUi6->Z@L<4vi3d8Im z_lU3EgjPJY`gYT+*hxJ^WLh;vr?FjpMBSDxAhYK3#^?fh#YUN`*n#(;5H^!|9?&eU zfB?Y0cQ`e(#XO)|wpffd8^CRCz|{U<&l5%SvB!m#-k^aR$!lx3ZId5R4)a}$c``e{ zn0-M#JjNyUGqZskcsgI0`rgi zQ#KVb{%`VV5*Ct0xrk8_Z8RnN91f>b_9UvQDFGmofy~F{!fpkpp4+v@ct{=aH&7xGx_O{go|h0{EpK;{f;u zJ@yD*C|Oo4@a}sYHje@VUX#TjxjY1ejzU8Ui?)2E=&abLdPm_&@KXb5VX+@UCsb3z z9y%V~E8p-IA6z5vnkM?2y^@VN#omZ6YkVDT(Aj&$`@QN;9drei&p`o z5SqZ;AlajlAgJuin-CjvmMaE3)&`UlFqD&@SWsKLU@3F#=iS)1uka6+ussWPXyb)! z&1T9*7Xd{JZTs-4qnP3GN~>Xb6XuYi@|}1`}{_)1fl`eYH}!Uob`6M$4tsa zEIA^mry8_e%5lwtpf2=5p+O>@;>;O&gBX=}qW{`lw?$L;?0JySluwHhdHwF_Q5B&i zU?-wI$y3m5~DAN&rRIqM3|F&4H&A=c5yT7sTHPm)hxc_$@fIEPhi9DWT((HZ4!RB{&f1 z;rJAa8~zti)f;O!Hi1>^`Z(pi;PEsL@X*Z?bKNr%CbV&YpQEl2M7n_4LReiW6Yy#& zCPfdA#I*0$XQmJtlpaA}Gyq}4EWW!wDq#R5)~Kak{Jg~g2>GDtc&CUxGGH~zCcp|J zg$tndPDXID@%|%q-7heiV>6G%7Ds4p)p@<^q*v&TppMHL-`)(qO77>YHs28gHFZNIbep zt%+$hB6a|7p=jSa)z!BK6ctxNGvHen-MyII`sLSc76Yw@KoXUn>^FE=*PmwbkwMW3?EQl4OTRO-&18sDeQcfG&v_)!}KS+{EBV{$Qqb{YHQ} zkqFbr46YKm24yX{bli;TKi1awsn``gTdT~vqW7=N@Sf0b*!HvU`gy)`uo0lS9z0)D~7ri^;{*A{GU!nHUNwnjn1MVF6Z?uIKiO5EVi-L>m#SW9+0I zy!YnbBP+Xi9<^uv#QXW%$oe11x-1@DST&NDT>7?C`{ASCcy`~>-IKFONqu&&3 z6S)wmc|+%k?N`rh*1Jib1ieT}q*dr+B>&L2XWy%rS6sm+uDkR4MH~Kp>xIupU76i! z$kw%WJF`m-D|bD({^4n3JND^al*@h^yS=pSwwd47L~pz@ZzbOefY}a#d%f>{_0Icd zW&OFQkG}Y)n)f0}juj5dAFqM#b&_;1L|lcAC1(rWYc6!Jm85$i=S0`NmI~d=#g`J3 z6=KoFkz|7vx|i9?0Bk{whgOd{1L_bPSWU;S2+j%F(j0Xb#e}*rV`q7hI*1qT*io;g zZrh0iGJaPz zo+AB|dW{d%V<8Vj>Lz+6!IG8nOuLjHL8gF>0gKRS0@fhG0Ly;hgn}zVoQiQ(7!M+y zL8NwuYsz^r63vyLX>Fp$!vdb&0M$iPpGS{3&q>F3nfNHnq zm#MSOnh9o0k9mlv6IU)C+oI!PKXv^d%*U&myI;jTOZWyhZ3*Q@#D?G?B{)bXte+3W zDP0yx7kazRV78b*XopxgkZ_>8oBo&X9zU2#gC&)ugsCMvU~eqov-h$udDp{i8k@O~ zch%MRrO_I>Q9cxX5vA{g@$_6U1(ac)of5c?EoL)vP3#gQIz1=OB+0IVo*8iBHoql9 zWjLRZrAj9R@}lAq7tFi<*qC{SW*p>8Uu0pH{sNd03pUjDL-F6+hvgzUNQiIIZ}?c! z=84UK`j7o%*d_WOiDbYbYsVNM%h?Fq#Q~Zy6Yyb73IYd6EQ+yP>MQ)Rb>3va;9y1p zF8+sx!s~W4?B&DNLY^)E7^7ShTMKlTVqa;SfGvz}MZnjBtN|0A1mwmCFn^TK+B1j3$fij~L*#Z*Ro`r%(RnL~v-wR?Ppa znEwE^gZa${2Ufqs56FK70XA%UW5DSE2DZa*i)&`B+o5m4CRPVsEz_e=?ijNJgiUL1 z2PkN?0Gjz7>L7iH{VsrdgB(q^`u(PW-R*X{0y0|S!yyYsWDbLO0>XJ*b3 zbG)6Pi=S}u;dD`NEjD1fVb?vZuX;mLaIy`33!D;5vWy=mdmmWc7VVUJOqrJ!n{onH z3A)@oeQZg>Y8raIG;r(H&Uvf%?OQg#(|b2uA(-bL)uQqGz_(2ChB3qc*Dnuj75*^z z?3a6-ge{zGAM7M|N6B@^rhH6Um^-Xby1Vn43p`+=z2rqkSsvubp|j_Q6;uzl&>6ZJ zPaUA-W#KLGwxe4QV3f9Z<_m{vDaZz(?G>XWP z>|h#&JA@GX|8K$<;wE-EqLG9UF#G~$X~)IVotWa@dbIU{=V|w`q_Jjr5;40JjM%^3 zT!--nJjQ89Vw`2bY7TZb!P-=qo10xwxL)rYMC7Pww;&w`RblY1$pV}LJaHVw!wH+! zoowC5af5WC$+q%eaG!G^6$=wM{+yB_e6zVJo}u}94L<6Ua4<9!HjVWW!vi*X&I{E9 z(s9^J5ly46|J#LXeyM$}yY+(=P|iKzvEe@HvGd>RrRLMpnlb6g!|G$;mu-}JwYjGN zM+CnKj@cO*1Z&yF^O@27({I%NIv-1=;1u`=@^s97Blzhg2Rl^sFfXq_)OJl|ls8N) zV~?tn&I#6T-JlZ2IyO|rs25^N$Xi}vE_7hdP~yd+cO&wkyWv!Rmt{i(Cx^*U(}K2rO)s?z&+-?`m|4PWm`gKo$l6eK4Mtv9}Q z+5F2#jVF&A25*T7k*@CDb^n80LTIzOghDZ=ot2#gBgGLuJ}y#7Xr#9{j_UKX)S;mU z4Q5Sv4+BVntcFw3^eO0B~@TVY%z{rS3CW+=ZNioB%V zIDq*+r1DpCGyP{@u_7<0Ksuc!&F}bgsg2N>w`vcoB7?**kL3~z!MMLPJ3&ay5E22I zg+ORUubE1g1c;i};Hkpo3=)-jo_;0ESYksge3{}<_rTnhQIw_mvM=i=M&;J$oC zeh$IZ?ed=pFh@4us~Igsh!NjZ6i1x*!H6$bjBlZX(LSrIfNl|*Eu8O8r+Vc~xx3|5 zB$UvaOTw$yIVAmRr7z?;^5xBXvnw=-Kos{3>=Z1H1G8c#GKRlyU%+?i)MC^L(rlLO1XC3 z$3gFam0eKkg7qzz0C^C+gki%tR&d~?#FhIP_)AJdEDBS1oRH)5Hyb-ZIy!alUV8N@ z9EKn_nqOai*RAnQqt@K>%=43HVkr1K)0%^1^T+0&4&7KaY?EKa#aAz!^+k(IFh1A> zPWoV67A$c~b`**eUq5dQhfvtuFx9+yP&kl-s5{}xx@L%u-RuRJFUS6gCt$@V?H}9$ zbAIVj3wkhC^0c9cn~C$l;1K5)^`oFD*AVW8NwSO+{*oS$BY1=s3Le%j@#WQh=6?<< zzi0lCLEeMrtqo<%d-%LWI%2-ZT=SyCQZ2nmf96#1@&zx%(B5-zyNqH&AY(DkZfYn%Bc z^L~$@ZAtVOW>k){FyU_v<);ee#|s*ZNbZRPrb9ho;1!f`CmdFXDNe!_$AI-1K7PV6 z0^6aS7#3JoWcmq$s)AiuHLIm=$^71(IDt~L|E$?z$kyQ}&(h}R*Tw1mP7Q*tq;7NbZXUOF(Gmb{?vBxso} zgKCOFwG>J%-i^`Xh$`KWT**4BGq2F3L<>0T(;7lSaSv#e^F;!g+nH{G{To zS$cHUzkmOpON{UB;9fmp(>dFKbsLQ+FrFX}r#Ri=)z1}1uDD*_+l1f5{o)yO1K2;{bVjLk>II$D$wH@M-GI|M zTA|ZP&>5ig;;`a^)6=CG-MM2G2PN3YMeprxZ_ixdV#pPX;jUOxbi%TdlZO`5GOg{X zd!Qaxbm80{uF`uO+|oiAk&@jrLNKqp=jumoZ{7)O0xjl!=F`0gzcIUT@eQJJoA0#J?44rKZV#l>T-QNb^gWt>kU4NuEQu=3ymbV^nrP+pS>?s`tTG# zD9{1JWd|((aVL#hZvuCOP%ib4Hv0(_rG|2KFn4*Drg&%Lrb5#_pl}R<#ns<`f(^~y z_s;#me$+g^uj;{D%l7P8y~C;Zc(**${1#66|7t!(ovt*#{!B>p=BUsc0T1rHe=pai z3I6FIXLf~40CL`}%DLZXj>rL*Gy90kfXx0FxhrpitxKTTN76cB4~{y*=NgNfCc!8aaIFdZ z2?m={684dDr45`l`_M3Gi@r4XJy7xC>{nj9a%nyNx_7*^MjB~<;n*9WPuLZoeDB6P zaaQodd)I+f5`bO8@KI_*mn?%WdzCJTA19iiuJwW2S9tGI_eA_TUEDAb3Iku%;5OL! zDLsX(gIhmcYW~+ZUv@q9>fcYi^V&jsqIa#7Nzdw9U%Tr=^VfwtraixV?}1io-msX< zU)UGXJ^`r+`yzB4!Fen`PWG_WK#Z{EDoqtqyvg}Z$0dnzw3}eJ1%i;7fB?BZugWak zDl-KJm%V^NW)D|n#=VWgrwyRM>X7Dn4uvEuk|*Z{6p6)Iq42h#O0+kV70F|zlD9YU z1EFxs5L zQ=*i9rRF%%N~`eAC`##P3KV!u;AOoZN&ukzDmecfhXT$gD4h4Va9((s;+$9fjnQ$B z2+sRiI4>XwIs^o8eyB=Etd$N01~{+4AhVxR=!miAMuE}>*(h{OA>AsJ!2_WP8#CC* ziZU<-m6_)z+6qNz#RM(K6rP|BP+EX!D-^DwiW5BHZ4EdJvmzWylmZ1c1fu{bz6Z$llwaP{h_Gbx}g}+}NR2 z_(!O!k5s5JxL#F^ZT=jpiQR4XglbSOTz}(jKHNvy;w!ZdBF86`9Mb@iV_E7iu_*VN zg(AnFs9Zr>QJP|{oJ%lw@I0e+y$|nn(lWAHlvQ_g2j5qQc<>FTikElr5^aanr@)~I zGE_+|DZ6bV5ub{-C4$Tl@ypq9gcKG}iM$Qz-O%@hx-vJacZOFed#xizR}R9yjLsPj zV+nI|b=UOow}5%de!UInuc9^wo4MxRNJEy=6mut6*Ec<7o=b$pR-Pk@VN69xH53ydVD@RV+8AAqK|NZf(JeeWDgH4qUea1r^F8hOK{VR zJ_2hQTs4U@!B;_f(XdfYriO)}Uv>*Igi&?zFJ&d{{1{FiFjr%r*^iRL(GOpG^7KWz z_pLYB+~3E(P2azLL(eL;Rmu>42S-6hpar9%PSIZ(VK*c!NbJd z=8MyldhXQBKn!Ecytq;-SyAtcO|3S|vlwsk2^zLuLh&F7s%Huw5d*A_QpVaE5-HzrR% zz+POp&HQ8MTuw7uN$nc!oe9Mr_DR{%u^vtaL!f_zq}4`vNC}BS#98kT2bCC&4aRmq zj9c_Z)HZ$pDK(X;?vQT3F3nsZ6x+E?3>g3^q#x7>@k0|u5;C0IJWZKt0!j6n>Pb0QY;nG zgmEQqa|7t}*Vpe}`}7;e&rX@gzw;)_>3HOAInERf=KJon9#MY5p`qS>9@H5wdwgK? zoQ^GH24)D?hr_HzIJOFoErTtw{(&1;6N>Cvhy7yCJkVx=&@XeVsOsQW2@ zyA<>JZA%xfp=Zp|Cto@L>b6bD$wc(3CouL5=Q(i?atMRHVHCh~(d-Lc3g`>Y zLkdQ$XGHn=2N^>Q25*0(tk;Hx`)jb?3Co)rY~_b~-RK??>Vcu0hbje|8hf+x12Ixk zhfL5ia}URg5mwObrF0?E%1=JJc>c_ly=xkeH%_fIuljfIa}OLjesIr0x^wk9VfJB2 zZtK|bFF&;YDL*^E$G4cxmeucx&^+m(e+}X^>)ic<1_cCo1-VPkT0=1Wp~&cIWEpOd zFz^rZ8WbwDFY1v0ztPOiT?orqp&(e$%UKNbyO{eM+1uvR+d630>dt$&4gdS;7v4U7 z$K3n(ZKZLqbRV2Nv2e}U9c!M|`Dt98)}H zMNL6=^2ns@*vzpR?3@6{KMzuFrKRr19HbhU*~FT8R3Bu%lZ`@k_+6cam?e6hQEu!ea!I8#(eXDo5} z`BTg_UDeH8j<8-V`MUae>0us=H_aC94(!VPLFtE1MNxANon^&rSI*xN3EG1ozM*gHkgm}0o(B&O@K2HTP} zD!Fg(OTJw2)s)=n@7#h;`9pa8 zrcaocvTvusF2^CdiB^0Uh4QPz=W35k5dV+UW_^U>2MB4 zEO8Op!2vGj9rXO@H9vW+s*f$B1Z6KGuOsMbZFWbAtx&x231Nrfl+0}Y+Wam|GK9SK z*wFp^&V2IviH9FEA7CT%dcTEHQ#}qw$4p!~_QN;NUfO-XS`*|SQQEj(J5U3$I>Sta z>;-#)daAd>E;+P+6lxBNL5pSaUyNLA7{|TJDD~8)Ht6MH=7i4H&-Y(=?&KN1pXWxy z+Qrb0oi#_lc;=1c(r%7D8XQ@Jdg#e*{4>1{CnWXmz)sygu=<}9O zY?hQcH$?kjgBSB?X}NjdocZtWd+x;-Pnq{irSK+w3UyAVIlRuDewmG258N%lU5YXj z!S~#G8JtL%Q4`>1BnCK{!$3(KMRE<40)1hJ2oBE2mPxk#u^77D)Dd{3hNW;PgAtao z8_v38r4_9N7FRK*zfWv`(c8}NFvfb*;cIOTpMla9VpLDe9h%!9 z!wC9MjQud$mwp%VdW_%O_-LQLE#jAR8{+t$n0F7bd|WSoA>zxiH_F!XalO1yNiQ^i zS1{iTgV1!WPQHOz2{e1w`Mjd}>p_ZqHN`$)L<(gx$8ic6=PfX#PWcltvyqsWbuI@e za*lSX1q#w&)`FRh#QJBJH^W&VfA9x5ap2Dx8#oL83Xa`aD?JP4i+_N_>G9G2YNcnP z%x6u1LXRDvPYd2ii>&$TpRoz<==4@Ni{wozoILA{O~^!8Z3P?>$%ITWgD)a6g4dEV zDx8ddP6>LfdT8km`Kn4! zzg|#*W6?zGkj6sK@P0VF7U;$(^pHq8p2T6df==N)FT4GEZC)=lpD0wJmW_w0Wu6Xv z=jp8a?NdmH6F^7@%`+^D*UQjbfP-!3-LkvbISGBUh(99Y6-_m-SBj>(PUe~;=*jd# zK>SOTKzA*#S6oxgYaYJgID;)xR$wGpV9?2ZA1g4FYGr|;`9OuCrIXJI2w^r5PmAeMU|5|CJswFTl5=ny4BKtaiR1yFd&Qi^!L9=9LPfX7QiWQzc540%zf0!r^Vc0%wtCp$aE`K)$L($x`4fk`*nT#QIw@ zArn!u0Ed?sE)!9*cnw5bo@C`UN>-I9S%Ah<%4d)gCCf#WtYjOGYiopkv0FJL_(f29 z4;EvEgpslzhr}v41Tr6|mQaS34px!-00?S zw8h+>zw(_;c|XeIMSaQyhk5-NE7I=;=d<`2ij*qxveI_L(!Rz|)M2FOrC$TTz;j710GN*C613TbUH=6B2A)tn)DhUXk#T4S z9wuD1%N%jOF~uLIw)j>9Xk{_qF>*^BurJ}GvEG@Vs7O5&esoZEl6hxE=A+@y;7-0c z__dK5i1NJPuePHz?#S4$-3*~dGTPw@c=BAo*w@)0CesIcy3i)EujM^N(VT;F= z?|W&+T(9N|p1U2$-McE*!P)LOndwFdN9&4z9)E_`l2aSJ;YN{dAM?BAm94WIRlL1l z-@0Jx!PFx8Voq&Ep^rd(uzappQ>B{Q#oAwyTkb*FSC6Bh0Z=7-ySRi%4qA5ycL%>9 z3-)B&T#IwTTr~ll{W<4uD+c&+NFK<8{Y$kI9kNDd#l-vjWgNF<1zlVpIBBK5AtKyQ zJ5dYD8o-gybb9P<3x_5Ee)a6_y}Tj=ftE(8 z1FB#Y4k_mB6ze!JW~W#j@fbk0IWBxu-pD~wgI#7g*A|73$r}+6HP~soV|BSLAGK*g z;Xz5sv**F?P*PGun|W_PKS3|%M&?(v$53KDNm#b44w?#gIPS>Sxj8IzvE!xYgXFj1 zkFmd$s-?ukAoZI<=`Ej_bZ}Z{#R&5?*E;*+*;Ui*8XdQ4er%}qYMlkMRPyMooa_bb z{}P{^P5%;~S~{cw_|BJiPD9~H8;I|NS*<7^=1*?M2TOVI8QvZdnO%p(gUl^)V`nLFq_vID2Q;J?%Xi;PYjm%KNP=6HR92Z_U=4a8#S4s9_W9+*i$DMN-oJk9mG9foy=zxb_YRf- zUE-@W4H`OEnr1$2{_fo8U%v7BwJ$ht;y^-%T#gfn5fDGcp()}B4@58^VXvpyJf_;A zv8*MEqpGPHTAeNuF2XYYZkIP=+jP2g9ZULVeO}_+R%!&yXw28%MUMPPY_=~yDDQ*) z{r&-ZhoUllgfFZ*6_;_)R;8cNlL9h4i^5HiID~0gIe--+pAhNY8nz_8ff2Z!Ut zLkBx2-l5LgsA$;-%RNOn`05ZI9#m8o9^v3tROS$F<*}+3y-5SdjoR>43~a9vd!@O} zk(&*B^TiJ7>-#sF4wyeQ|I~hL#;xyG(8cERjd%a!)y;QQ9GEk8`hQlueNED>KOAJ| z{lwkpuNY%@B_v^e&!K1gowqGYEu1@Q5*EVY!Nj~@t`kymC%M@nFm%WmoVF54BYAk@ zII(6Nb{N1$36?-4on8tPa>9ue)YtxnaA@gy!_G^$IMA*5ZH3D^BX%mtbr<*dCbQ>{ zTr}V52&I&Mh)3znjNgQ;Z`QC@qX7=vloLmh~2Fka>f)O;!eDT80(?^mA1rRU| z>-=6`zQtu;daYAYnf4DX?AL!MV_%Z8|3?&6IIvZGxJv0P?lWqSiuTKj!gIBzEph0TQ4mzd-m+yxOv9CrIR<) zZ*J`K?D0pTNttrX=jT4AcK4d!r-?`QZhUa;vcks0b(}we=xAQnDqhvN4`*yA6gis7 zKF}P{9K$+z3YnfAADfsMKR6;H%7F}W)3|w)sCaE!YD`j?6qgVeonSOZ4RY|r$^EEk zKTpqSsOe#JPk#oE%P~mc1q=TM8ah!TdEaGOY2#Un6z*b$y-G!Ejr!+JC8G~tFY@r< z%Yqq3iH+WR`=+t8JGc0xmn@jHp?S&7(3&a3iriyvT|SZSJ7uTseD?V1CzfjME=UKf z=7cmw)r3Ta1jo)Op4J#y9UdPQ7&a&@dAj);!_JAx?0oNeme89(_pa@|0DidRL@G`a zV|)w~_h@?;(UD?Q9}HiU`!$7#zeR~Bd@jw%JfzRSdWsWP)zN}Dc==0%2L}a(c}X#` zA(4e;VIcv7T>V{r-F>l1-&gOBm1uX{g%zCP$(74zOF|1j9rf1GQ0Qf{p?HZyX=oR*g0f5G&yW>IPP%8 zG1zgM<4(tmPO(l4onCkP);Y|%$hpV)1?Nv)++EULCb+b^Y<79rs{o% z8vmZe5NV3f-+g}a_4nQCd)jZ5-xj~KeqZ_hmMPlmq{F(jfWVn#$$#O)E?5xXJ|L_8VsO2oSnpGW)} zX&>nqIXH4?Ev44*}9D6+Wt=Nxae~Qz@xy1#>#m9|^8xuD*t~RbC?r^*u z?-d^&pB`Tre@lFQ{KELI_?_{O#6KN>BL1ED&*FbguuJeyh)EclP@FI;p*i7>ga;FT zP3%naPKr#*Od69^mQ<6}0)s5alHN_~OAbz+n!GsqiR4dHG%4d#ZcV9AS&-6|vNPq8 zlowLYrCd$|Ep(iWyIPy0OW z+w@`S8`JlsKau`&`djHAr~j0p%eXD$T&6a&KJx_js1;}J%X%~Gy&Fm{aQ*OGhd(|1^zeTVzc&2F2R?e zd+y`8&*UD@{V^{lZ${qMy!Z2s`IY&P6}T2mD=05GTIf}nT6lZms>0Vs8Ar_+b=#=> zMx7t+IeN_KNuxVPFB!dh^nuZb$9Rkh7*jlE<(MbNd^0w6?2@rZitLJNiykgIS{z=S zR=l!!UGe7P2a6vWryW;1u43HWam&UX8u!k)-tjKugT^O}&mKQ{e9icd@pq2DZ@g*z zk@4@1|7C*Lgun?yCNxgiG2w{`-%p%AanZ!CNnw*>C#6ohWzynFYbNcUbYZgZL0OE#7~G|ge!h-uZ+woiL>+MBl|-%@qU)za9~5v3DL zmz1t8-CFu=>D4k;7E+d7)=~CU*^TMrrZ-Q&FeCD>|IM5?^Yxh@%=~0l)2xTe9m@xm z$CYQ57nI*pzP|i;`GxYUw`SkE{npDBNfkpX@+yie7FFC^aiHRviqjSESB|f|xALp1 zp;h-)nX5-uFROm1Cbp)h=EvH`+RJt8>l5oU>$B_cum8Crp`pHEVZ*vc+UVT4tnr80 z_un@3w)0IxnwB)ZFh`n`GN)qBopTO0Z)^!@S>AGKZqnQpbKjkpH*fL0Ct9_wC9V5g zuea&iJlZCf7B5=-`RzrwA6pW)ByCCIl3SJ>Tyo=%{5#g% z@%mD)r6o(ZEq!lU(6W|g&n-K#?44zwF8g)4{c^YEe#-|hAF_Pi^7ocsTi(0Ebw$XE zlok0aHm-PY#eY^@U+KIuXl3HcoRwo%PFh*LvVG;9E4Q!Qzw*e+*H*s2@~f5RRr*yS ztBO~3u3Ee5zEuycI=t%nRj;kqub#Gg%j%u0f4;Nk&Qoh5*DPQ2)?G1oExhaHwH|Bh z)|%FS(-qg%)pd8*uC4=JPj)&4g+4|qQ9lHa&6S{M{r*+Tn zUfjLD`=0K--KOqmyU%og*!}GWw!w2l#D>fbV>is)(7a*ghV2{nZ#c5y)P{>2zT9xV z$EjyfPgGB8Pj*jn&#a#2o~1oKJ-d5MJ;!?9?77pE$BjN4jT=)p7Hpihv2J7Q z#(f*FYzo{od(%sse!n~U?!|YXx%;QhzMF?`&fmOp^CO$T-ZFm6<}Dv?`E;xOR=2Iq zTNiEpc^lj2vTfeB<=ZxG+q3QPwpX_OYugvwe&6o2J#c&c_L1AiZlAHee*41h%eQad ze&6;-w*PbcbKBq84g-{;XQh7c2M_<}l3QJe{Y30BqQKv&v?Lr9A>{3t*WbRrqxWt5 zJ$BH+W8XUCv6v{GA;(1MiT<8nMskmoMpkQLNDB5%tkiBJ4X}(pkDef_Svi@EYq&g{ zOvAedY9WWvtsSnR zWQlxU4Zp{`8ZsLu`P}i{Q5n;9T>}Y_cM&^zG4i|#`Pf7Dfo30sDe^RuByEGO`(1P` z@RiG-5tDS5v>|Mhmyk9FD`IjLi3Cm)X0v;kwr`W1BJNGPdBnuy<+nw86aPla$M@%v z&kH0N@Ak^zwKj|R$Vq@#Jxh2*efJNQiLlWmp^!)BKXdEf77MC(P!qe5OUzMP%p?~n2^PRzCM1hd4(ic_Fc~$md4zda%g*0TP7pbs+;SNmD};>ho0D31t*@1n)QD+f%%(%Hg$7kx%CEyT4q-TN3sBEm=w=d*XFI_749~nB3E<_3*E{+9zPGeX`reZ6>HAo_ zyzgVpYCI!kPxgHw>KfWQIU3hyv<fHvOFaok*{LVj2;w6t?*(?;`mqHRQbC$A-A zc{|7Rr>z2C(Z*@Z$sBDinTYR)@p$x8kk{R6nop3wUr7MZtEiXY3-24m zx1Gd=!_ppuZ1<6|T0e4{UoyVY>{0k-;iH9Dq8;PB0!$09G(3F|IbfGdPTA$-emQa1 zUO*U*%Yh8Ht3&96K7zMRC(u`Qqivr9erzVuynbu05*d8UhxJGkzfh-4kfC04MSbRZ z{}pj+pCUbr?|6H21iVClpn=tN`2(_37fejLIDFGXqP5Y8dlq=UC0W{ixSxme#oH3J z0~|Nv+eH7O^hMWrJ=Y#4Foce@NF!+AWuD{BKt04amilmWD9Q&%GvX{{xd6LE0Pr6rINba%UMQZr?Knlkgp#^AnS}GQiZWKG9Zp8!GN|Ef$d!*LA~k5kAiHAR zH=w+P!`o1&})h?pCH3Eg(Sri^7e_hGrX>Y7CyE# zX|Tf?^=leIBaN$iKCe0ZVAP@o^SD{lA75zW$eR7Wh8)uikT+p>JQThWGRGWjn^X>ACWz=l(H~ zrGEbp;muh9Ao@KAFQ|trwg9Q7r@WJdV8Kt#Sm$Y8GN4i(~yY#ShKzc)ZQ+h{s zmM6#)<(cxW@}00VwMl+Keo=k{c6dF4Xwb-@)j_WWy%zLc&<{bs1&=d08oUfahEPL< zA<>Xx7-AS^$T!S2EHo@N>@_@OI2fV{@d)t_F@%JMM1;hLl!vlVZK!Lgd#HbCP-sl( z=+KJL+VIz|%jQ0HZ=3=77)y4O*U32=g+tj@*av?%-Ax}uK7MDuA|EG_kAEQ_#F~#) zA|D%&j~&tj$j3jV^T-F0U67AS@+`SRzDwRH-;I16g9p=dK_qBI(6XT2L9Yg#4*EXm zN92PTJPbYtgUCm+Axq6iJM!@W^6`(G@-airhnr14YLE|teB8j=%2jDx-_^dC*y+BP zux|1ai|c!-&qQ7zhe>50Usol4+hCh;m3e+&Ltk}YRo^U9-4<0V&JK3;s) z`J>z`-(30n%2!vuymIBre(G;}!dlnlGC#U%&k0 z^%Qp{N1CbJ@}X3 zSW^6D0`>qq`#3Lq}?#hJr;-A!&w8}2^Xfj z=-=pWX|MDkeSq$z57K?~A=b!lqd(JMr2SGM>P80}Bz3b?xCNQT%Ckq!m|j*|GIh%2 zNfRfGA6Hy7cFgEeg$4O}xjES*M+_e}bVycaMtWLOVnTdeY*b`Kc$hIXB-q!}P4DXB z?C4-`r_*X=iBS@3Fwu$vlN4@nE37mY7%NA|#Tp8H8}j2~3yg&oCPSscgg}lkj>a2A z87obO3WF&EL8VP}g(({;>uyS!t)$GhrlfkqFfxpzFd9r}@{NWgbo!)H+;`_2%M7Nk z#QivNFGq+6XFP<2;0r+&r`AwlDxBZYRZsyM=^;mlJY!z1LtHF5}SJxVoTZ}2%m~V<+^sz5^RBMVg<`<@@vCddhfPeS8lw%@|3vsp6U#Hv$)zFuFQ5=o>FO#p z8Vb8Ax+;(KEvqsb^v143PEK8O3&3tNvD8Ene{@}dsc?OnNng=Ghk#U(^}@+TCXY!o zN=+=h(9lo`X5jxwV@PH|h?_MH0Q~uDOq=q+9B?=!gtKAYk!(_h2h*}irOLB`R0SL+ z*$FXaCRV}Uyl8pjRl?sav%Il>USWi6i>8!zK_xS$##jK3ud6gIt3v6T%>`rBn_PYl z2r+iKyBV?)KqJx`K=hcJMuSNcVbb!iY(GGmI|g;A*SpyNVv>cT3g189XJ$y8R+nbY@w`7EiIa2 zESfaE6jBW-6L0tn4o(g)xCxB0G(Z7^0%)=ew=MUe48JB_xE(G% z7%pOY!Ob0JD5U|!k{V=~q74PL`D!};JOC&jr0~4a7HC@j2snA8142;6#a~=3!)t?z z7@ym5rjF+C_$xG1cx{LBnaAT4Ui$JvZzwg^8q16g22=LLQqCgI9>Ham8G`4EREnmS z+CJGZ3v41Gcr7@mGSgHTW91=du4$Bbw(uHdX5i~Fme+&nvVMZLdL(DlIB>*P-leUYQ$)pfq+F$JBHgr<4v8snMP+30TB&yOSbX zG&MIa7EN33AtSwO(xGg6*Ocj{Ph;9(xNB=o6oz-DPa6oy7O{-S@<^V< zz#llI$#}36=>wk5CS;j-D~ky6Tz!NR5vL?V93|C9m=dQK=?+B*MA=XjR3DL*H`x{l zGUDu%xMd=)jQ<@XoTJ$enrypl`)nuX%mNO9YEXulqv-$bDS6z9I@5qd_zE;4`UqWi z$UZwjNwEwmvda{TOAx52OQx4T?nLmJ_ywX|{)gh?+kl#Z{-(fC!wbsoWer^wWxTQx zZ-@r}FD)bA6 zO*~^tXvv_IfD-Q%uM#)vTB1*JEpc_7;L3ts&%%|YYo9A@bWu`5Q%Fe*SxO!w-w;_( z=rV7rp-1S(LsO^3#1tLT^`VQfpE$!r?=po?;lJ6Frkk{PnMld>8Ks9P-B7l=yPM<& z7MYT#l$s2IWkseM+~@-jd6V3-wzim<^0xMl82;BD)7CC-EI;DWx13;p?1>$U<1wr7 zAsw10VO?;*pFA3S>#_f)njc1tuld;lpZ{M!K&8b0 z){*7p19A`PAsaB$x{EBQuGq1||D4GlKHHJ)ao>tdx#u1UTh)68UuUb-dkIbV-RixJ z{fZ~mdkyg=pR4y;VnDH0;ONL+YEbX(NECfpy>}#;^qP9_L}s!u_1+ox%hY=p%*p>v z@<}79$JLH&5ve6Ln4{H@N<3HMu9~!vxnv<|<*6DFYakEfN+yXU30ItYmxPm-1~Lk% zTac~^a1105_pSJv|8jVZxNC+bq6vtr#hrmnL3}f2)|2sEPde~jCDJA#4Tn7xzd1;g zhdawRmM`LN`o{9UAEx1^6w`pC6}S{C3|1_bFaI}?8v(~4_|q=(Rs+~`1nsvWzJ=7` zcOWl#J~?N3s)Y!v@Pz^2@_ch>?SeXm`;CG()gp#VL3y4H{%|R@0Zt?2V&P{SxRrxg zo}T02x%?~MbNRJ{`$I?q{&k9f@xUx{bYiXD7zsQ(^lp}dGU+Am-1=k|x?(Lp4T1Ys|qfrOy$8?lEwoJ3$Ze-zFZ42InT z2~@;`GG6zRv6nd&{*%(Nw>OhyL8e2=FfyEsAS0oJ$-!B;Jk;$1XjMiDy~5NV zC4kr84wT^eD7jyf1!%7plEq{RxgEN#zoSFC1A3(83qhWz9 zhQ?yQaXd|+iEu8Qj6U#Pnu^mU=`@38(kwcJ4yD8Ba5{pHq}eow=8})dRoIQmrv?xi|ClM1lL?_cJbSf=@>#SR7DJ_E^ff?jFxj{ZApU|0f7A>c@ z(hBIps-O+4p|!M**3$;sNN01iesm6P#%k$Yob!2xw$e7*PCLk_78^9y$epfy68H(o_5m> zw1;kl^_{!vX1axLrQ7IsdJnyq?x6Se>l>h*+taUap!?~=^Z@+_JxCv+k3!#NqKD{V z`Z#@p{*yjQpCb2RobWU~N}r+6(&y;&^ac7NJw{)m$LY)T1U*S#p|8?Y^fh{#zE023 zH|SY!lo?qV!~SX($)Z>^ z8_Z&$C3~F3vN-Z2d5XNu;&C$dpV(!;g1ki5kbjVqEP*AG=gA8!i9E}a$uBHL=w;HO z8_Xo@$=_HO8^VUNVQe@?75m8!j4Hk%4`OVvlRSh`#ul=bJk3V1ku00#uw0hM@>u~Z zWTV(OW8>KbHjzzYli3tDm6fn*>=sta%Gh)^gU#eRAa*OOV3n+jRkIpa z%j#G?Ykh$XPq8EHX?B!715NOA z?0NPAdyySuFR|n7Wp;v{gm(B<=v7~1r`hW;zxM_^%g(X$>`iuoy~W;U@342FbG^vk zgZHj~LyP<&yTmTDE9@h7m3_=UVV|xhb@;sMWoFg~{VkOkbht7ODQP7gTt31Ws^kbG@y?P9^wWAc@^P0uBv0(c z_LgAEOY)Qar2uJ=6etBr!ID7=kwPV-6efjB5mKZSB}Gevr5Gtzij(4{1SwHUl9Htq zDOF07(xnV3Q_7NtNJFJz(r{@6hVR+f;hihxN%>L%bbOCB~?o`Qms@c)k_UhqcmH(O=^(9`db?vr*(_e;B=$BZRsp(j5>-jH@ff4>Lo z55IFArnFCb2wF?7&;N&XP_bQn`v-O(;?UB^^6wpMq{scWiTz+X8-;ZxgM+t%17pybS{tZr>-)>SH@Hm9n! zc7Cn4QUto3mim_F+S_!MO6Zu^56iK-|6b0kX=#_M@uSVJt^_!3jS}Poc4fP+Kt)ok zA}LUi)QZ5N0N+(sSJyVTJJeclbp*B3 z6t|9J6k3&3%Du}NYnDXHF=Kha8fQC>?MLl6yZ_#)$c9#@+Xg(;x7OA+H&r&*G*)Yi zg@mrrQVJoZHW-I zwnGHE5;a#HYOYF@Ty=;*Q_|YlT(9Zizs@DLd2;TsebSYvrMN>09dGHU(6Q6zzRc!+ zVgJ2$x{}vLB5;^)ElUoIthbt`mgf34ha66elC08ttIH`6QM$@n5jsw2YpQH(Q0`m$ z@13UDFvtn5iM8rz+FP1i+MF$IhIn$wX`0(mDQ@j6n_Jpzn`#>?oeJi*HG&ioZCB8) zymuahx-Fu3v3Hs)aWB@*mz$fR{wpVIKRf06p_N8Q{ z>QtQabi9&)Q!}*zcXk{p$EPW(oIAG?Rb@_9O(h%G!Nzy6(nb_mK?R%GC{1o?(M)Nq zpHnGKt?baL6iE{s8l^m36WbaUR5@9C4%0#vhwZ8+w!}G9TAAWhYm+lO5Tvk*=S$pq zb|~*HpNdG0_+G9;a!ozYq^72}sl8IC!jc!^g~VUB^DN37nC3Q-y(W=8h0xqQ*4)7s zH0oNEJW8z%E!sAo!6c0cq;}*}#V^f89;lz!A5)+eCEO%*1*1KfuUH{uuXZ4G;G|pD*Q#yaLrq8h6Wm@mDEO+UN);lY% zbPKMe)HKW6BrB98E0iQFlw>QEWGj?p3zWp^Fda*7pl ziWPE-l@}>i94S^DDOMaQRval-94S^Dsa71RRvf8T9H~|usa72Qd`Y$9NVVcfwc<#% z;z+krm2Uka-TFnk^^0`t7a3NnGOV;@SZT?y(vo3?oMDBWVTGJwg`8o9oN0xeY0Yn@ z6-TBON2V1=rWHq~6-TBON2V1=rWHq)6-Sm8N0t>wmK8^q6-Sm8N0t>wmK8@vKNJfN z)D*Q0B_&$kCM8;M;GC@Wtp!I?q6J4%q6J4%q6J4%q9q?miB=p*Rvi5_r&;0>vof`} zh=HTFQweSn-GjDM1opRBngjbz%bm7NNw`o1f#<=GL}0wzMj6GP6>Xv~z3QcpF#H(b^(n z)02|b@`yWCKIus*Y037rZS5G2wb$0zW1L#sSl`gz;MCrLVUlv+=2+J_-*WHN23nfc z7rePF%uP&E!(`{`g{_TEO^wx}f44*L+Em-tHd`+S2{!$qqs_gW&3!9x+-sc{)wZ@+ zGUQa(($U)g075Jej%|$#EcecWD(jOV&+_Ed+}LdWh*O%Jn3$-Bf^s}3tIsKFn5u?p zYM8Eu8ETlRhFNNuqlURWEG#H26k%auo*L%!Ffpl6;7v@<74eBF`2s&efghp3lT?sW zz|$iXaFPlXdJ&5BNrkBjyyU_Z`$ojjiNh;EJO|vrfMcMw6r#BTEuUO`0e1o zf|3*kVq%H{5n+nl(9&`n7g<$pQ%k2vm8zynO;qrurYZENrm4^A>T|l1kJNM}AF1hr zip11(!AFFGj|fHn5DGpb6nsP|_=r&O5uxBCLWNJM=@xu~FNha>NleX9@n@*`GgSN; zD*g-=e};-bL&cw=;?Gd=XQ=oyRQwq#{tOj=hKfH!#h;<#&s6bes`xWi{Fy5LOcj5o zia%4upQ+-_RPko2cr#VJnJV5)6>p}BH&ex%rQ*p_@n8_g%U5caiYH6OlcnY}OU0L^ z;>%L;WvTeGRD4+~zAP1AmWnS&&1a69&m0whj*34=#h;_%&r$K`sQ7bK{5dNA92I|# zia$ripQGZ>QSs-f_;XeKxhno#6@RXZKUc+{tK!d9@#m`eb5;DgD*jv*f3AvOt&gd> zD*jv*e{P|p;A>tYA4e%X&Qoc~Q)$RkX~xY48uC>d@>Lr0RT}bD8uC>d z@>Lr0RX*gaawt&o7pOcaPzd*%bpyDr3 z@fWE0)%G*BP{m)U;xAP37pnLRRs4l2{z4Uhp^Cpy#b2o6FI4d>?R8>mp^Cpy#jmvI ziD_zkn5MRxX-dC=cm;o2qJlpyQNf>Db9Dfv%J68Mt}lzNI#yhkYBBec91^x;|1hfvUmP|$}^ z(1%dahfvUmP|$}^(1%d)2ce)3p`b6RK&ht)Rs2dl#j}cEsi$~W@hkNd&nkYUp5j@> zuhdgKtN4|Aif0wSQcv-$;?EQONh(n4C_**=N*%?snt!E^;#tjqUIwpgc+RxcHQZ;Z zaXB_|DjiB)MH-ckJe3c5DjiBaO)608DMFPFrJmwhr9-Kwcvk69>M5R8IVklM&#D}h zdWvUN4oW@6vx;A-r%44$Jw>R>L8+&BR^_17Q#`A3Q0gh3RXHg26wj(0lzNJ1HUCOI z#j~1!rJmwh&A(DllM0l2icrn3QZMnW=2xkgcvkbP)XU^VwO>d{EcEDCX zTAqLpW)ZTwI^Gl{CnYD^O|7o2!Kk~^u3f#+)bk?iYNOKS&kpq>d;HdpD|h*g-d3l} zBeaUvR;Q|JwTgOHr|M+cn6dU;g(H*{GQV@;Kb9$tI?YNBA?A(&Ds_lUFY#l7>xZ;^$bzAvk{OkZr!yotI-Ss_%Jyc!))O{vLa~8FO`b5$fYoenxyN2$b;K7gSV8CefBZ$f16JC# zc>1oC!S7J)8d2+xT5J_p+UR`Cl@YZ zrT8lO#3ofdxE+f<06kdC--NYyzQ+D7*8hLRdUZWknz0JZ&of{RY7}5ntn@srQo~Iv z!o!_3m&Zc_gKXj%r(7g)exySpg0xIaJ_rpV<^t^~VjnvC-y9 zd*g1N0^eCu2yDayF*onJ;1sWv)(@b}1!q&RdPNO11Q2Ag8vy(51-F$vr6b-B{Bi;n lgRoyCij{-vF=PUpCBkB<8~GT6n!pg3ir-><0pBl#{2wSQd*A>7 literal 0 HcmV?d00001 diff --git a/fonts/OpenSans-SemiBold.ttf b/fonts/OpenSans-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..54e7059cf36359cb5a3860085714a95306af0dea GIT binary patch literal 100820 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 DEZ%x^ literal 0 HcmV?d00001 diff --git a/fonts/OpenSans-SemiBoldItalic.ttf b/fonts/OpenSans-SemiBoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..aebcf1421226d045b8043d26433d780fa365b7de GIT binary patch literal 92180 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 OmxABnc!Ht?`Tqc{BF`NF literal 0 HcmV?d00001 From bd8631a4b8bba4572a8d506eedf00eeda3ebd38f Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 14:20:14 +0100 Subject: [PATCH 004/359] add ionos logos and icons --- admin/win/msi/gui/banner.bmp | Bin 85894 -> 114514 bytes admin/win/msi/gui/dialog.bmp | Bin 464774 -> 619346 bytes theme.qrc.in | 5 +++ theme/black/hidrivenext-icon.svg | 4 ++ .../colored/IONOS_logo_w_suffix_frontend.png | Bin 0 -> 3814 bytes .../colored/IONOS_logo_w_suffix_frontend.svg | 35 ++++++++++++++++++ .../IONOS_logo_w_suffix_frontend@2x.png | Bin 0 -> 7455 bytes theme/colored/hidrivenext-icon.svg | 4 ++ theme/hidrivenext.VisualElementsManifest.xml | 7 ++++ theme/white/hidrivenext-icon.svg | 4 ++ 10 files changed, 59 insertions(+) create mode 100644 theme/black/hidrivenext-icon.svg create mode 100644 theme/colored/IONOS_logo_w_suffix_frontend.png create mode 100644 theme/colored/IONOS_logo_w_suffix_frontend.svg create mode 100644 theme/colored/IONOS_logo_w_suffix_frontend@2x.png create mode 100644 theme/colored/hidrivenext-icon.svg create mode 100644 theme/hidrivenext.VisualElementsManifest.xml create mode 100644 theme/white/hidrivenext-icon.svg diff --git a/admin/win/msi/gui/banner.bmp b/admin/win/msi/gui/banner.bmp index 7eba2ce1a7700f2010105784749f73ba19ef0247..fa483161f4a6ed96708261f7aeb1524da2cf73c2 100644 GIT binary patch literal 114514 zcmeI)JBVCm9ER~(B7)io!8W9llwvv|5YmW+5Cd8XYO|dZuu=qV*1~4hLP!yl!p5Xf zQbe~gAr`UP*aX1@5(pTGh(r<6jq{wzJO1~}ncd0m$nJ*c;COD|?feGjJ-6(Umycao z7%+V@`g}0@{4rX6VKiSD>>unI&42n~VX*h9LH8N0-k*kp!T3McheuvK_U`hfe-6Cz z{k~`RE&aZ5@ZiC{i;IiTjy{i{IC0{MLr?y)=fLaB&!;x?$Lh*xdFZ5o0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>yISDxZ#Rbb{`zw+$FP~UsNtzi0+=tY@tG z&Nv>nCzn(2-rwVM1lFnZ)mzWi=3Q1m0Ru z>>MY#$oOLzYuc}$zIz7LOJ-9aQ?}v2bp2Asb*i_mde4Ay)QNU-JaxOv3Mim}0^2K) zjOntY+`G-Fl7aO;>78ri>p|*}4eeCh%sw)R@_g8zoXURY$u`Q+N2Z)3oO|zRHcjST z?vCzX*K+{2(MG+7om40b$!x}wPjWNGDAV2>ubE9b#+R|>*i)Z*jw|Ox^pW!x>QaX( zbx*#wf0z%)(e_8#II_%fc4HWwuP|pyW~UwI)TvpV`zKuA*QqU6_qnWq0tzUweFDh| zey5Wubu@kXSFdkt2BcnXGuy~C`XH;wh~!lEGf%d)W9b`1t=BH+dOkVY?$3JKrN8!5 z%WRa{w3G9L9D6+{$#KP(vT2ifo3p8#^PJSnn3ywO`l|P~Yg;+5N*?FFd-6Z^=sROi z`?THny=K321r$&~f$b4U#_&7cmkr6a`n&$HnN0>I6X}oVsLb0b+18GwZwzhStk*XB z`batEw9B<-_pF!ay`xX=SEn3hlCQa+oZL$p&O=fro@~R6?8}(&O%A7xWNX&RP(B#- z=qmU>1r$&~fgK@`jA?T+ zgX_!7{LWLS?|Q7ZNjqc)!pE>1|*_2_Ox_!2(7f-S`$Ju5!+w)EUZ88=n z#>{#q#+r5Jw9P#V>N+W)fC38a9D)2sw>g;+_T}ZQnVmdIzK|*DFBy@3m?tmWvGk3h z)@$q1Z}O=vSJyY2*||@UbCEXpYac9gUCX~$o97hMoKMhpo7tP~kG9u4U)XHB)>A+M z1r*qtKr*z=$+X&+m$POz_iWd;f1|tSN?-HLY_46&Y1(DZ`YaRg*O7B|;@vIY*UH58 zdY+4Oon7DQ!e*9h(VUCSIl9Q1?DfXHdAjt(7{$R zn`gDj(&P&nIM2-9Y+gTbpi?&FzVnpbGjE<(J2Q8<#e%zSyjwh6t1F;@0=q)s|H^DK zy0)F?we!yGyfgJM*Vnt^i*b+&D4>7>3N!*WSLgZO_^m7Bzlq8*+>cIH_C5E^yVEI?Yi#PTm)ZF{Ak?eRe)G3K@?1IN zV4gneb7kJkqHJxW)^S+@1r$&~f!!#uQD*1;DYB9Gq{+tQF5CK^d$KLhvFkN9KB-H; z?Nr}wqa1zb-E8`*xtzLr-cEn~8)M3(?>s|KS?3BUpnw7j>}G+DGMi&d&gPmn^S<1r zJh_=N^%}djHLY$PPugJ482Zi+YR=d4KHo;$NdW~EP~cG#$h+OsGLd5?E4gOP_3QW= z`1Di;?oCs+y~d_O{?1sN<+ZWyTK@ju$EF?nUhm&qa}2rOCbwB$uYB#xWd#&aKmi35 zP(T3%6i`3`1r$&~0R@~ literal 85894 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 Apa1{> diff --git a/admin/win/msi/gui/dialog.bmp b/admin/win/msi/gui/dialog.bmp index f548941594d7772eb466a98a2a3b3e6e037548a0..b870b472556dfb47177bd600b204c1453d492fd6 100644 GIT binary patch literal 619346 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 F{C`t&OI82? literal 464774 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 diff --git a/theme.qrc.in b/theme.qrc.in index 5f0b5b417582d..52e027b769ff6 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -242,5 +242,10 @@ theme/call-notification.wav theme/talk-app.svg theme/chevron-double-up.svg + theme/colored/IONOS_logo_w_suffix_frontend.png + theme/colored/IONOS_logo_w_suffix_frontend@2x.png + theme/colored/IONOS_logo_w_suffix_frontend.svg + fonts/OpenSans-SemiBold.ttf + fonts/OpenSans-Regular.ttf diff --git a/theme/black/hidrivenext-icon.svg b/theme/black/hidrivenext-icon.svg new file mode 100644 index 0000000000000..8da01eec16cf2 --- /dev/null +++ b/theme/black/hidrivenext-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/theme/colored/IONOS_logo_w_suffix_frontend.png b/theme/colored/IONOS_logo_w_suffix_frontend.png new file mode 100644 index 0000000000000000000000000000000000000000..796fa1d7815f6f0713bcd04f52c5e2009d3e86b3 GIT binary patch literal 3814 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 literal 0 HcmV?d00001 diff --git a/theme/colored/IONOS_logo_w_suffix_frontend.svg b/theme/colored/IONOS_logo_w_suffix_frontend.svg new file mode 100644 index 0000000000000..e65d8b2190ed7 --- /dev/null +++ b/theme/colored/IONOS_logo_w_suffix_frontend.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/theme/colored/IONOS_logo_w_suffix_frontend@2x.png b/theme/colored/IONOS_logo_w_suffix_frontend@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..921840999cd9a36c4dd5223a04e10fb32d1038f3 GIT binary patch literal 7455 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 literal 0 HcmV?d00001 diff --git a/theme/colored/hidrivenext-icon.svg b/theme/colored/hidrivenext-icon.svg new file mode 100644 index 0000000000000..8da01eec16cf2 --- /dev/null +++ b/theme/colored/hidrivenext-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/theme/hidrivenext.VisualElementsManifest.xml b/theme/hidrivenext.VisualElementsManifest.xml new file mode 100644 index 0000000000000..424d569fc64d2 --- /dev/null +++ b/theme/hidrivenext.VisualElementsManifest.xml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/theme/white/hidrivenext-icon.svg b/theme/white/hidrivenext-icon.svg new file mode 100644 index 0000000000000..8da01eec16cf2 --- /dev/null +++ b/theme/white/hidrivenext-icon.svg @@ -0,0 +1,4 @@ + + + + From 4848f4aeda1a3a652b92f8384c88474f737afad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 14 Jan 2025 13:11:42 +0100 Subject: [PATCH 005/359] add style sizes and colors cherry-pick 205b5055302a65b375efb6f6751402dab2eea290 --- theme/Style/Style.qml | 81 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 76 insertions(+), 5 deletions(-) diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 11c49a52aa66d..9d5f6f6788dbb 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -2,19 +2,28 @@ pragma Singleton import QtQuick -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient 1.0 QtObject { readonly property int pixelSize: fontMetrics.font.pixelSize readonly property bool darkMode: Theme.darkMode // Colors - readonly property color ncBlue: Theme.wizardHeaderBackgroundColor - readonly property color ncHeaderTextColor: Theme.wizardHeaderTitleColor + readonly property color ncBlue: Theme.wizardHeaderBackgroundColor + readonly property color ncHeaderTextColor: sesTrayFontColor + readonly property color ncTextColor: sesTrayFontColor + readonly property color ncTextBrightColor: "white" + readonly property color ncSecondaryTextColor: sesTrayFontColor//"#808080" + readonly property color lightHover: Theme.darkMode ? Qt.lighter(backgroundColor, 2) : Qt.darker(backgroundColor, 1.05) + readonly property color darkerHover: Theme.darkMode ? Qt.lighter(backgroundColor, 2.35) : Qt.darker(backgroundColor, 1.25) + readonly property color menuBorder: Theme.darkMode ? Qt.lighter(backgroundColor, 2.5) : Qt.darker(backgroundColor, 1.5) + readonly property color backgroundColor: "#FFFFFF" + readonly property color buttonBackgroundColor: Theme.systemPalette.button + readonly property color positiveColor: Qt.rgba(0.38, 0.74, 0.38, 1) readonly property color accentColor: UserModel.currentUser ? UserModel.currentUser.accentColor : ncBlue readonly property color currentUserHeaderColor: UserModel.currentUser ? UserModel.currentUser.headerColor : ncBlue - readonly property color currentUserHeaderTextColor: UserModel.currentUser ? UserModel.currentUser.headerTextColor : ncHeaderTextColor + readonly property color currentUserHeaderTextColor: sesTrayFontColor readonly property color adjustedCurrentUserHeaderColor: Theme.darkMode ? Qt.lighter(currentUserHeaderColor, 2) : Qt.darker(currentUserHeaderColor, 1.5) @@ -93,10 +102,13 @@ QtObject { property double trayFoldersMenuButtonDropDownCaretIconSizeFraction: 0.3 property double trayFoldersMenuButtonMainIconSizeFraction: 1.0 - trayFoldersMenuButtonDropDownCaretIconSizeFraction + property int addAccountButtonHeight: 50 + + property int headerButtonIconSize: sesIconSize + property int dismissButtonSize: 26 property int activityListButtonWidth: 42 property int activityListButtonHeight: 32 property int activityListButtonIconSize: 18 - property int headerButtonIconSize: 48 property int minimumActivityItemHeight: 24 property int accountIconsMenuMargin: 7 @@ -205,4 +217,63 @@ QtObject { function colorWithoutTransparency(color) { return Qt.rgba(color.r, color.g, color.b, 1) } + + readonly property color sesIconDarkColor: "#001B41" + readonly property color sesIconColor: "#1474C4" + + readonly property color sesBorderColor: "#D7D7D7" + readonly property color sesWhite: "#FFFFFF" + readonly property color sesGray: "#465A75" + readonly property color sesTrayInputField: "#718095" + readonly property color sesHover: "#F2F5F8" + readonly property color sesActionHover: "#1474C4" + readonly property color sesActionPressed: "#0B2A63" + readonly property color sesSelectedColor: "#F4F7FA" + readonly property color sesButtonPressed: "#95CAEB" + readonly property color sesAccountMenuHover: "#DBEDF8" + readonly property color sesDarkGreen: "#096B35" + readonly property color sesDarkBlue: "#001B41" + readonly property color sesTrayFontColor: "#001B41" + readonly property color sesErrorBoxBorder: "#F50C00" + readonly property color sesErrorBoxText: "#C80A00" + readonly property color sesMenuBorder: "#2E4360" + readonly property color sesSearchFieldContent: "#97A3B4" + + property int sesAccountMenuHeight: variableSize(40) + property int sesHeaderLogoHeigth: variableSize(40) + property int sesHeaderLogoTopMargin: variableSize(12) + property int sesHeaderLogoLeftMargin: variableSize(24) + property int sesCornerRadius: 8 + property int sesHeaderTopMargin: variableSize(10) + property int sesSmallMargin: 8 + property int sesAccountMenuItemPadding: 12 + property int sesMediumMargin: 16 + + readonly property string sesOpenSansRegular: "qrc:///client/fonts/OpenSans-Regular.ttf" + property int sesFontPointSize: 9 + property int sesFontPixelSizeTitle: 20 + property int sesFontPixelSize: 16 + property int sesFontErrortextPixelSize: 14 + property int sesFontHintPixelSize: 12 + property int sesFontBoldWeight: 400 + property int sesFontNormalWeight: sesFontBoldWeight + + property int sesIconSize: 24 + property int sesActivityItemDistanceToFrame: 24 + property int sesActivityItemWidthModifier: 26 + property int sesFileDetailsIconSize: 58 + property int sesFileDetailsHeaderModifier: 100 + property int sesSearchFieldHeight: 40 + + //Tray Account Menu Values + property int sesAccountButtonWidth: 256 + property int sesAccountButtonHeight: 68 + property int sesAccountButtonRightMargin: 33 + property int sesAccountButtonLeftMargin: 19 + property int sesHeaderButtonWidth: 84 + property int sesHeaderButtonHeight: 68 + property int sesAccountMenuWidth: sesAccountButtonWidth - 8 + property int sesAccountLabelWidth: 157 + property int sesTrayHeaderMargin: 11 + property int sesTrayWindowWidth: 464 } From 47318314f57b23d92fd861c9afd19368e13d0dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 14 Jan 2025 13:47:30 +0100 Subject: [PATCH 006/359] add custom components and themes cherry-pick a969cadf461a1e29ba9217adcf9658bdcfbd5e2d --- src/gui/CMakeLists.txt | 3 + src/gui/SesComponents/SesErrorBox.qml | 76 +++++ src/gui/SesComponents/SesTrayHeader.qml | 67 +++++ src/gui/SesComponents/syncdirvalidation.cpp | 41 +++ src/gui/SesComponents/syncdirvalidation.h | 19 ++ src/gui/buttonstyle.h | 303 +++++++++++++++++++ src/gui/buttonstylestrategy.h | 60 ++++ src/libsync/CMakeLists.txt | 1 + src/libsync/ionostheme.h | 305 ++++++++++++++++++++ src/libsync/theme.cpp | 112 ++++--- src/libsync/theme.h | 6 +- 11 files changed, 950 insertions(+), 43 deletions(-) create mode 100644 src/gui/SesComponents/SesErrorBox.qml create mode 100644 src/gui/SesComponents/SesTrayHeader.qml create mode 100644 src/gui/SesComponents/syncdirvalidation.cpp create mode 100644 src/gui/SesComponents/syncdirvalidation.h create mode 100644 src/gui/buttonstyle.h create mode 100644 src/gui/buttonstylestrategy.h create mode 100644 src/libsync/ionostheme.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index a58117fcfe5b6..63e2e0c1e4ddf 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -146,6 +146,9 @@ set(client_SRCS systray.h systray.cpp EncryptionTokenSelectionWindow.qml + buttonstyle.h + thumbnailjob.h + thumbnailjob.cpp userinfo.h userinfo.cpp vfsdownloaderrordialog.h diff --git a/src/gui/SesComponents/SesErrorBox.qml b/src/gui/SesComponents/SesErrorBox.qml new file mode 100644 index 0000000000000..1c821caccde18 --- /dev/null +++ b/src/gui/SesComponents/SesErrorBox.qml @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2021 by Felix Weilbach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 + +import Style 1.0 +import "../tray/" + +Item { + id: errorBox + + property string text: "" + + implicitHeight: errorMessageLayout.implicitHeight + (2 * Style.standardSpacing) + + Rectangle { + anchors.fill: parent + border.color: Style.sesErrorBoxBorder + border.width: Style.thickBorderWidth + radius: Style.sesCornerRadius + } + + GridLayout { + id: errorMessageLayout + + anchors.fill: parent + anchors.margins: Style.standardSpacing + anchors.leftMargin: Style.standardSpacing + solidStripe.width + + columns: 2 + + Image { + source: Style.sesErrorIcon + width: 24 + height: 24 + Layout.rightMargin: Style.standardSpacing + } + + EnforcedPlainTextLabel { + Layout.fillWidth: true + + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontBoldWeight + + text: qsTr("Error") + color: Style.sesErrorBoxText + } + + EnforcedPlainTextLabel { + id: errorMessage + + Layout.fillWidth: true + Layout.fillHeight: true + Layout.columnSpan: 2 + + wrapMode: Text.WordWrap + text: errorBox.text + + font.pixelSize: Style.sesFontErrortextPixelSize + font.weight: Style.sesFontNormalWeight + } + } +} diff --git a/src/gui/SesComponents/SesTrayHeader.qml b/src/gui/SesComponents/SesTrayHeader.qml new file mode 100644 index 0000000000000..3f4dd42c70894 --- /dev/null +++ b/src/gui/SesComponents/SesTrayHeader.qml @@ -0,0 +1,67 @@ +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import QtGraphicalEffects 1.15 +import Qt.labs.platform 1.1 as NativeDialogs + +import "../" +import "../filedetails/" +import "../tray/" + +// Custom qml modules are in /theme (and included by resources.qrc) +import Style 1.0 + +import com.ionos.hidrivenext.desktopclient 1.0 + + +Rectangle { + + height: Style.trayWindowHeaderHeight + color: Style.sesWhite + radius: 0.0 + + RowLayout { + id: trayWindowHeaderLayout + + anchors.fill: parent + anchors.leftMargin: Style.sesTrayHeaderMargin + anchors.rightMargin: Style.sesTrayHeaderMargin + + TrayWindowAccountMenu{ + Layout.preferredWidth: Style.sesAccountButtonWidth + Layout.preferredHeight: Style.sesAccountButtonHeight + } + + HeaderButton { + id: trayWindowWebsiteButton + + icon.source: Style.sesWebsiteIcon + icon.color: Style.sesIconColor + onClicked: UserModel.openCurrentAccountServer() + + text: qsTr("Website") + + Layout.rightMargin: 2 + + Accessible.role: Accessible.Button + Accessible.name: qsTr("Open Nextcloud in browser") + Accessible.onPressAction: trayWindowWebsiteButton.clicked() + } + + TrayFoldersMenuButton { + id: openLocalFolderButton + + visible: currentUser.hasLocalFolder + currentUser: UserModel.currentUser + + onClicked: openLocalFolderButton.userHasGroupFolders ? openLocalFolderButton.toggleMenuOpen() : UserModel.openCurrentAccountLocalFolder() + + onFolderEntryTriggered: isGroupFolder ? UserModel.openCurrentAccountFolderFromTrayInfo(fullFolderPath) : UserModel.openCurrentAccountLocalFolder() + + Accessible.role: Accessible.Graphic + Accessible.name: qsTr("Open local or group folders") + Accessible.onPressAction: openLocalFolderButton.userHasGroupFolders ? openLocalFolderButton.toggleMenuOpen() : UserModel.openCurrentAccountLocalFolder() + } + } +} // Rectangle trayWindowHeaderBackground diff --git a/src/gui/SesComponents/syncdirvalidation.cpp b/src/gui/SesComponents/syncdirvalidation.cpp new file mode 100644 index 0000000000000..ca95f334d088e --- /dev/null +++ b/src/gui/SesComponents/syncdirvalidation.cpp @@ -0,0 +1,41 @@ +#include "syncdirvalidation.h" +#include +#include +#include "logger.h" + +#ifdef Q_OS_WIN +bool SyncDirValidator::isValidDir() { + QString appDataPath = SyncDirValidator::appDataPath(); + return !_path.startsWith(appDataPath) && !appDataPath.startsWith(_path); + +} + +QString SyncDirValidator::message() { + return QObject::tr("The directory %1 cannot be part of your sync directory. Please choose another folder.").arg(_path); +} + +QString SyncDirValidator::appDataPath() { + //Path: AppData/Roaming/ + QString appDataRoamingApplicationNamePath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + QDir appDataRoamingApplicationNameDir(appDataRoamingApplicationNamePath); + appDataRoamingApplicationNameDir.cdUp(); + appDataRoamingApplicationNameDir.cdUp(); + QString appDataPath = appDataRoamingApplicationNameDir.absolutePath(); + return appDataPath; +} + +#else + +bool SyncDirValidator::isValidDir() { + return true; +} + +QString SyncDirValidator::message() { + return ""; +} + +QString SyncDirValidator::appDataPath() { + return ""; +} + +#endif \ No newline at end of file diff --git a/src/gui/SesComponents/syncdirvalidation.h b/src/gui/SesComponents/syncdirvalidation.h new file mode 100644 index 0000000000000..a91812da85775 --- /dev/null +++ b/src/gui/SesComponents/syncdirvalidation.h @@ -0,0 +1,19 @@ +#ifndef SYNCDIRVALIDATION_H +#define SYNCDIRVALIDATION_H + +#include + +class SyncDirValidator { +public: + SyncDirValidator(const QString &path) : _path(path) {} + + bool isValidDir(); + QString message(); + +private: + QString appDataPath(); + QString _path; +}; + + +#endif // SYNCDIRVALIDATION_H \ No newline at end of file diff --git a/src/gui/buttonstyle.h b/src/gui/buttonstyle.h new file mode 100644 index 0000000000000..2f199b1352c80 --- /dev/null +++ b/src/gui/buttonstyle.h @@ -0,0 +1,303 @@ + +#ifndef _BUTTONSTYLE_H +#define _BUTTONSTYLE_H + +#include "ionostheme.h" +#include +#include + +namespace OCC{ + +enum class ButtonStyleName { + Primary, + Secondary, + MoreOptions, +}; +OCSYNC_EXPORT Q_NAMESPACE; +Q_ENUM_NS(ButtonStyleName); +} +Q_DECLARE_METATYPE(OCC::ButtonStyleName); + +namespace OCC{ +class ButtonStyle +{ +protected: + ButtonStyle() + { + qRegisterMetaType("OCC::ButtonStyleName"); + } + ~ButtonStyle() {} + +public: + + // Default + virtual QString buttonDefaultColor() const = 0; + virtual QString buttonDefaultBorderColor() const = 0; + // Hover + virtual QString buttonHoverColor() const = 0; + virtual QString buttonHoverBorderColor() const = 0; + // Pressed + virtual QString buttonPressedColor() const = 0; + virtual QString buttonPressedBorderColor() const = 0; + // Disabled + virtual QString buttonDisabledColor() const = 0; + virtual QString buttonDisabledBorderColor() const = 0; + // Focused + virtual QString buttonFocusedColor() const = 0; + virtual QString buttonFocusedBorderColor() const = 0; + // Font + virtual QString buttonDisabledFontColor() const = 0; + virtual QString buttonFontColor() const = 0; +}; + +class PrimaryButtonStyle : public ButtonStyle { +private: + PrimaryButtonStyle() + { + } + ~PrimaryButtonStyle() {} +public: + + PrimaryButtonStyle(PrimaryButtonStyle &other) = delete; + void operator=(const PrimaryButtonStyle &) = delete; + + static PrimaryButtonStyle& GetInstance() { + static PrimaryButtonStyle instance; + return instance; + } + + // Default + QString buttonDefaultColor() const override + { + return OCC::IonosTheme::buttonPrimaryColor(); + } + + QString buttonDefaultBorderColor() const override + { + return OCC::IonosTheme::buttonPrimaryColor(); + } + + //Hover + QString buttonHoverColor() const override + { + return OCC::IonosTheme::buttonPrimaryHoverColor(); + } + + QString buttonHoverBorderColor() const override + { + return OCC::IonosTheme::buttonPrimaryHoverColor(); + } + + // Pressed + QString buttonPressedColor() const override + { + return OCC::IonosTheme::buttonPrimaryPressedColor(); + } + + QString buttonPressedBorderColor() const override + { + return OCC::IonosTheme::buttonPrimaryPressedColor(); + } + + // Disabled + QString buttonDisabledColor() const override + { + return OCC::IonosTheme::buttonDisabledColor(); + } + + QString buttonDisabledBorderColor() const override + { + return OCC::IonosTheme::buttonDisabledColor(); + } + + // Focused + QString buttonFocusedColor() const override + { + return OCC::IonosTheme::buttonPrimaryColor(); + } + + QString buttonFocusedBorderColor() const override + { + return OCC::IonosTheme::black(); + } + + // Font + QString buttonDisabledFontColor() const override + { + return OCC::IonosTheme::buttonDisabledFontColor(); + } + + QString buttonFontColor() const override + { + return OCC::IonosTheme::white(); + } +}; + +class SecondaryButtonStyle : public ButtonStyle { +protected: + SecondaryButtonStyle() + { + } + ~SecondaryButtonStyle() {} +public: + + SecondaryButtonStyle(SecondaryButtonStyle &other) = delete; + void operator=(const SecondaryButtonStyle &) = delete; + + static SecondaryButtonStyle& GetInstance() { + static SecondaryButtonStyle instance; + return instance; + } + + // Default + QString buttonDefaultColor() const override + { + return OCC::IonosTheme::white(); + } + + QString buttonDefaultBorderColor() const override + { + return OCC::IonosTheme::buttonSecondaryBorderColor(); + } + + // Hover + QString buttonHoverColor() const override + { + return OCC::IonosTheme::buttonSecondaryHoverColor(); + } + + QString buttonHoverBorderColor() const override + { + return OCC::IonosTheme::buttonSecondaryBorderColor(); + } + + // Pressed + QString buttonPressedColor() const override + { + return OCC::IonosTheme::buttonSecondaryPressedColor(); + } + + QString buttonPressedBorderColor() const override + { + return OCC::IonosTheme::buttonSecondaryBorderColor(); + } + + // Disabled + QString buttonDisabledColor() const override + { + return OCC::IonosTheme::buttonDisabledColor(); + } + + QString buttonDisabledBorderColor() const override + { + return OCC::IonosTheme::buttonDisabledColor(); + } + + // Focused + QString buttonFocusedColor() const override + { + return OCC::IonosTheme::white(); + } + + QString buttonFocusedBorderColor() const override + { + return OCC::IonosTheme::black(); + } + + // Font + QString buttonDisabledFontColor() const override + { + return OCC::IonosTheme::buttonDisabledFontColor(); + } + + QString buttonFontColor() const override + { + return OCC::IonosTheme::black(); + } +}; + +class MoreOptionsButtonStyle : public ButtonStyle { +protected: + MoreOptionsButtonStyle() + { + } + ~MoreOptionsButtonStyle() {} +public: + + MoreOptionsButtonStyle(MoreOptionsButtonStyle &other) = delete; + void operator=(const MoreOptionsButtonStyle &) = delete; + + static MoreOptionsButtonStyle& GetInstance() { + static MoreOptionsButtonStyle instance; + return instance; + } + + // Default + QString buttonDefaultColor() const override + { + return OCC::IonosTheme::white(); + } + + QString buttonDefaultBorderColor() const override + { + return OCC::IonosTheme::white(); + } + + // Hover + QString buttonHoverColor() const override + { + return OCC::IonosTheme::buttonHoveredColor(); + } + + QString buttonHoverBorderColor() const override + { + return OCC::IonosTheme::buttonHoveredColor(); + } + + // Pressed + QString buttonPressedColor() const override + { + return OCC::IonosTheme::buttonPressedColor(); + } + + QString buttonPressedBorderColor() const override + { + return OCC::IonosTheme::buttonPressedColor(); + } + + // Disabled + QString buttonDisabledColor() const override + { + return OCC::IonosTheme::buttonDisabledColor(); + } + + QString buttonDisabledBorderColor() const override + { + return OCC::IonosTheme::buttonDisabledColor(); + } + + // Focused + QString buttonFocusedColor() const override + { + return OCC::IonosTheme::white(); + } + + QString buttonFocusedBorderColor() const override + { + return OCC::IonosTheme::black(); + } + + // Font + QString buttonDisabledFontColor() const override + { + return OCC::IonosTheme::buttonDisabledFontColor(); + } + + QString buttonFontColor() const override + { + return OCC::IonosTheme::black(); + } +}; +} + +#endif // _BUTTONSTYLE_H diff --git a/src/gui/buttonstylestrategy.h b/src/gui/buttonstylestrategy.h new file mode 100644 index 0000000000000..c6a316d25d3de --- /dev/null +++ b/src/gui/buttonstylestrategy.h @@ -0,0 +1,60 @@ +#ifndef BUTTONSTYLESTRATEGY_H +#define BUTTONSTYLESTRATEGY_H + +#include "buttonstyle.h" +#include +#include + + +class ButtonStyleStrategy +{ +public: + virtual ~ButtonStyleStrategy() = default; + + static OCC::ButtonStyle& getButtonStyle(const QWidget *widget, const QStyleOptionButton *option) + { + OCC::ButtonStyleName buttonStyleName; + if(widget != nullptr) + { + buttonStyleName = determineButtonStyleName(widget, option); + } + else + { + buttonStyleName = OCC::ButtonStyleName::Secondary; + } + + switch (buttonStyleName) + { + case OCC::ButtonStyleName::MoreOptions: + return OCC::MoreOptionsButtonStyle::GetInstance(); + case OCC::ButtonStyleName::Primary: + return OCC::PrimaryButtonStyle::GetInstance(); + case OCC::ButtonStyleName::Secondary: + default: + return OCC::SecondaryButtonStyle::GetInstance(); + } + } + + static OCC::ButtonStyleName determineButtonStyleName(const QWidget *widget, const QStyleOptionButton *option) + { + QVariant propertyValue = widget->property("buttonStyle"); + if(propertyValue.isValid()){ + + return propertyValue.value(); + } + + return getButtonStyleNameByObjectName(widget); + } + + static OCC::ButtonStyleName getButtonStyleNameByObjectName(const QWidget *widget) + { + static const QMap buttonStyleMap = { + {"qt_wizard_finish", OCC::ButtonStyleName::Primary} + }; + + QString buttonName = widget->objectName(); + return buttonStyleMap.value(buttonName, OCC::ButtonStyleName::Secondary); + } +}; + +#endif // BUTTONSTYLESTRATEGY_H \ No newline at end of file diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index 72ec2eedee479..1b5e0de585fa3 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -117,6 +117,7 @@ set(libsync_SRCS syncoptions.cpp theme.h theme.cpp + ionostheme.h updatee2eefoldermetadatajob.h updatee2eefoldermetadatajob.cpp updatemigratede2eemetadatajob.h diff --git a/src/libsync/ionostheme.h b/src/libsync/ionostheme.h new file mode 100644 index 0000000000000..97d7e34670787 --- /dev/null +++ b/src/libsync/ionostheme.h @@ -0,0 +1,305 @@ +#ifndef _IONOSTHEME_H +#define _IONOSTHEME_H + +#include +#include +#include "theme.h" + +namespace OCC { + +class IonosTheme { +public: + + //Icons + static QString avatarIcon() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-setupAvatar.svg"); + } + + static QString folderIcon() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folder32.svg"); + } + + static QString syncArrows() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-syncArrows.svg"); + } + + static QString questionCircleIcon() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-questionCircle.svg"); + } + + static QString liveBackupPlusIcon() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-addLiveBackupPlus.svg"); + } + + static QString plusIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-darkPlus24.svg"); + } + + static QString deleteIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-activityDelete.svg"); + } + + static QString refreshIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-refresh.svg"); + } + + static int treeViewIconSize() { + return 32; + } + + //Control Configuration: Sizes + static QString toolbarActionBorderRadius() { + return "8px"; + } + + static QString toolbarSideMargin() { + return "10px"; + } + + static int toolbarIconSize(){ + return 24; + } + + static QString buttonRadius() { + return "4px"; + } + + static int buttonRadiusInt() { + return 4; + } + + static QString buttonPadding() { + return "10px"; + } + + static QString smallMargin() { + return "8"; + } + + static int minimalSettingsDialogWidth() { + return 740; + } + + static int LoginPageSpacer() { + return 45; + } + + //Font Configuration + static QString settingsFont() { + return "Segoe UI"; + } + + static QString contextMenuFont() { + return ":/client/fonts/OpenSans-Regular.ttf"; + } + + static QString settingsSmallTextSize() { + return "14px"; + } + + static int settingsTextPixel() { + return 16; + } + + static QString settingsTextSize() { + return QString::number(settingsTextPixel()) + "px"; + } + + static int settingsTitlePixel() { + return 20; + } + + static QString settingsTitleSize() { + return QString::number(settingsTitlePixel()) + "px"; + } + + static int settingsBigTitlePixel() { + return 24; + } + + static QString settingsBigTitleSize() { + return QString::number(settingsBigTitlePixel()) + "px"; + } + + static QString onboardingTitle() { + return "28px"; + } + + static QString settingsTextWeight() { + return "400"; + } + + static QString settingsTitleWeight400() { + return "400"; + } + + static QString settingsTitleWeight500() { + return "500"; + } + + static QString settingsTitleWeight600() { + return "600"; + } + + static QFont::Weight settingsTitleWeightDemiBold() { + return QFont::DemiBold; + } + + static QFont::Weight settingsTitleWeightNormal() { + return QFont::Normal; + } + + static QFont settingsFontDefault(){ + QFont defaultFont(settingsFont()); + defaultFont.setPixelSize(settingsTextPixel()); + defaultFont.setWeight(settingsTitleWeightNormal()); + return defaultFont; + } + + static QString titleColor() { + return "#000000"; + } + + static QString folderWizardSubtitleColor() { + return "#104996"; + } + + static QString folderWizardPathColor() { + return "#97A3B4"; + } + + static QString loginWizardFontGrey() { + return "#616161"; + } + + static QString loginWizardFontLightGrey() { + return "#BDBDBD"; + } + + static QString fontConfigurationCss(QString font, QString size, QString weight, QString color) { + return QString("font-family: %1; font-size: %2; font-weight: %3; color: %4; ").arg( + font, + size, + weight, + color); + } + + //Colors + static QString settingsLinkColor() { + return "#02306A"; + } + + static QString buttonPrimaryColor() { + return "#0F6CBD"; + } + + static QString buttonSecondaryBorderColor() { + return "#D1D1D1"; + } + + static QString buttonDisabledColor() { + return "#F0F0F0"; + } + + static QString buttonPrimaryHoverColor() { + return "#115EA3"; + } + + static QString buttonSecondaryHoverColor() { + return "#F5F5F5"; + } + + static QString buttonPrimaryPressedColor() { + return "#0C3B5E"; + } + + static QString buttonSecondaryPressedColor() { + return "#E0E0E0"; + } + + static QString buttonDisabledFontColor() { + return "#BDBDBD"; + } + + static QString white() { + return "#FFFFFF"; + } + + static QString black() { + return "#000000"; + } + + static QString dialogBackgroundColor() { + return "#FAFAFA"; + } + + static QString menuBorderColor() { + return "#2E4360"; + } + + static QString menuTextColor() { + return "#001B41"; + } + + static QString menuSelectedItemColor() { + return "#F4F7FA"; + } + + static QString menuBorderRadius() { + return "16px"; + } + + static QString buttonPressedColor() { + return "#0B2A63"; + } + + static QString buttonHoveredColor() { + return "#1474C4"; + } + + static QString toolButtonHoveredColor() { + return "#DBEDF8"; + } + + static QString toolButtonPressedColor() { + return "#95CAEB"; + } + + static QString errorBorderColor() { + return "#EEACB2"; + } + + static QString errorColor() { + return "#FDF3F4"; + } + + static QString warningBorderColor() { + return "#F4BFAB"; + } + + static QString warningColor() { + return "#FDF6F3"; + } + + static QString successBorderColor() { + return "#9FD89F"; + } + + static QString successColor() { + return "#F1FAF1"; + } + + static QString infoBorderColor() { + return "#11C7E6"; + } + + static QString infoColor() { + return "#E6F9FC"; + } + + +private: + IonosTheme() {} +}; +} +#endif // _IONOSTHEME_H \ No newline at end of file diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index f1a7108bdeb68..5e06ced3f1ffe 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -144,7 +144,7 @@ QString Theme::appNameGUI() const QString Theme::appName() const { - return APPLICATION_SHORTNAME; + return APPLICATION_NAME; } QUrl Theme::stateOnlineImageSource() const @@ -400,6 +400,27 @@ Theme::Theme() QColor(127, 127, 127)); #endif + IONOSPalette.setColor(QPalette::Window, QColor("#ffffff")); + IONOSPalette.setColor(QPalette::WindowText, QColor("#001B40")); + IONOSPalette.setColor(QPalette::Disabled, QPalette::WindowText, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Base, QColor( "#FAFAFA")); + IONOSPalette.setColor(QPalette::AlternateBase, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::ToolTipBase, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::ToolTipText, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Text, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Disabled, QPalette::Text, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Dark, QColor("#e1e1e1")); + IONOSPalette.setColor(QPalette::Shadow, QColor("#D1D1D1")); + IONOSPalette.setColor(QPalette::Button, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::ButtonText, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::BrightText, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Link, QColor("#1474c4")); + IONOSPalette.setColor(QPalette::Highlight, QColor("#F2F5F8")); + IONOSPalette.setColor(QPalette::Disabled, QPalette::Highlight, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::HighlightedText, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor(0,0,0)); + connectToPaletteSignal(); #ifdef APPLICATION_SERVER_URL_ENFORCE @@ -894,38 +915,25 @@ void Theme::replaceLinkColorString(QString &linkString, const QColor &newColor) linkString.replace(linkRegularExpression, QString::fromLatin1(" Date: Tue, 14 Jan 2025 13:53:21 +0100 Subject: [PATCH 007/359] style gui/wizzard welcome pages cherry-pick eda88dc35c6228308b94525b663b640e2244d4c3 --- src/gui/wizard/flow2authcredspage.cpp | 2 +- src/gui/wizard/flow2authwidget.cpp | 79 +- src/gui/wizard/flow2authwidget.h | 3 +- src/gui/wizard/flow2authwidget.ui | 446 +++---- src/gui/wizard/owncloudadvancedsetuppage.cpp | 183 ++- src/gui/wizard/owncloudadvancedsetuppage.h | 1 + src/gui/wizard/owncloudadvancedsetuppage.ui | 1180 +++++++++-------- .../wizard/owncloudconnectionmethoddialog.cpp | 1 + src/gui/wizard/owncloudsetupnocredspage.ui | 4 +- src/gui/wizard/owncloudsetuppage.cpp | 76 +- src/gui/wizard/owncloudsetuppage.h | 1 + src/gui/wizard/owncloudwizard.cpp | 47 +- src/gui/wizard/slideshow.cpp | 13 +- src/gui/wizard/welcomepage.cpp | 37 +- src/gui/wizard/welcomepage.ui | 521 ++++---- 15 files changed, 1431 insertions(+), 1163 deletions(-) diff --git a/src/gui/wizard/flow2authcredspage.cpp b/src/gui/wizard/flow2authcredspage.cpp index 8eef42fab0f4b..9177122178760 100644 --- a/src/gui/wizard/flow2authcredspage.cpp +++ b/src/gui/wizard/flow2authcredspage.cpp @@ -32,7 +32,7 @@ Flow2AuthCredsPage::Flow2AuthCredsPage() : AbstractCredentialsWizardPage() { _layout = new QVBoxLayout(this); - + _layout->setContentsMargins(0, 0, 0, 0); _flow2AuthWidget = new Flow2AuthWidget(); _layout->addWidget(_flow2AuthWidget); diff --git a/src/gui/wizard/flow2authwidget.cpp b/src/gui/wizard/flow2authwidget.cpp index e89a08a7f250e..338b7fb04fa70 100644 --- a/src/gui/wizard/flow2authwidget.cpp +++ b/src/gui/wizard/flow2authwidget.cpp @@ -14,19 +14,21 @@ #include "flow2authwidget.h" -#include "common/utility.h" + #include "account.h" +#include "buttonstyle.h" +#include "common/utility.h" #include "creds/webflowcredentials.h" +#include "linklabel.h" #include "networkjobs.h" -#include "wizard/owncloudwizardcommon.h" #include "theme.h" -#include "linklabel.h" +#include "wizard/owncloudwizardcommon.h" #include "QProgressIndicator.h" #include -#include #include +#include namespace OCC { @@ -39,8 +41,7 @@ Flow2AuthWidget::Flow2AuthWidget(QWidget *parent) { _ui.setupUi(this); - WizardCommon::initErrorLabel(_ui.errorLabel); - _ui.errorLabel->setTextFormat(Qt::RichText); + _ui.errorSnackbar->setVisible(false); connect(_ui.openLinkButton, &QPushButton::clicked, this, &Flow2AuthWidget::slotOpenBrowser); connect(_ui.copyLinkButton, &QPushButton::clicked, this, &Flow2AuthWidget::slotCopyLinkToClipboard); @@ -57,9 +58,7 @@ Flow2AuthWidget::Flow2AuthWidget(QWidget *parent) void Flow2AuthWidget::setLogo() { - const auto backgroundColor = palette().window().color(); - const auto logoIconFileName = Theme::instance()->isBranded() ? Theme::hidpiFileName("external.png", backgroundColor) - : Theme::hidpiFileName(":/client/theme/colored/external.png"); + const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-external.svg"); _ui.logoLabel->setPixmap(logoIconFileName); } @@ -95,16 +94,14 @@ void Flow2AuthWidget::slotAuthResult(Flow2Auth::Result r, const QString &errorSt switch (r) { case Flow2Auth::NotSupported: /* Flow2Auth can't open browser */ - _ui.errorLabel->setText(tr("Unable to open the Browser, please copy the link to your Browser.")); - _ui.errorLabel->show(); + setError(tr("Error"),tr("Unable to open the Browser, please copy the link to your Browser.")); break; case Flow2Auth::Error: /* Error while getting the access token. (Timeout, or the server did not accept our client credentials */ - _ui.errorLabel->setText(errorString); - _ui.errorLabel->show(); + setError(tr("Error"), errorString); break; case Flow2Auth::LoggedIn: { - _ui.errorLabel->hide(); + _ui.errorSnackbar->hide(); break; } } @@ -112,12 +109,12 @@ void Flow2AuthWidget::slotAuthResult(Flow2Auth::Result r, const QString &errorSt emit authResult(r, errorString, user, appPassword); } -void Flow2AuthWidget::setError(const QString &error) { - if (error.isEmpty()) { - _ui.errorLabel->hide(); +void Flow2AuthWidget::setError(const QString &caption, const QString &message) { + if (message.isEmpty()) { + _ui.errorSnackbar->hide(); } else { - _ui.errorLabel->setText(error); - _ui.errorLabel->show(); + _ui.errorSnackbar->setError(message); + _ui.errorSnackbar->show(); } } @@ -128,8 +125,8 @@ Flow2AuthWidget::~Flow2AuthWidget() { void Flow2AuthWidget::slotOpenBrowser() { - if (_ui.errorLabel) - _ui.errorLabel->hide(); + if (_ui.errorSnackbar) + _ui.errorSnackbar->hide(); if (_asyncAuth) _asyncAuth->openBrowser(); @@ -137,8 +134,8 @@ void Flow2AuthWidget::slotOpenBrowser() void Flow2AuthWidget::slotCopyLinkToClipboard() { - if (_ui.errorLabel) - _ui.errorLabel->hide(); + if (_ui.errorSnackbar) + _ui.errorSnackbar->hide(); if (_asyncAuth) _asyncAuth->copyLinkToClipboard(); @@ -206,6 +203,14 @@ void Flow2AuthWidget::slotStyleChanged() customizeStyle(); } +void Flow2AuthWidget::shrinkTopMarginForText() +{ + _ui.topMarginSpacer->changeSize(20, 30); + _ui.topMarginSpacer->invalidate(); + setMinimumHeight(340); + setMaximumHeight(400); +} + void Flow2AuthWidget::customizeStyle() { setLogo(); @@ -220,10 +225,34 @@ void Flow2AuthWidget::customizeStyle() } _ui.openLinkButton->setText(tr("Open Browser")); + _ui.openLinkButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + _ui.openLinkButton->setFixedSize(180, 40); _ui.copyLinkButton->setText(tr("Copy Link")); - - WizardCommon::customizeHintLabel(_ui.statusLabel); + _ui.copyLinkButton->setFixedSize(150, 40); + + _ui.mainLayoutVBox->setContentsMargins(32, 0, 32, 0); + _ui.innerLayoutVBox->setSpacing(16); + +#ifdef Q_OS_MAC + _ui.horizontalLayout->setSpacing(32); +#endif + + _ui.statusLabel->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); + + _ui.label->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); + + _ui.label->setText(tr("Switch to your browser to connect your account")); } } // namespace OCC diff --git a/src/gui/wizard/flow2authwidget.h b/src/gui/wizard/flow2authwidget.h index 4c622fab343ea..6ae031dfd6750 100644 --- a/src/gui/wizard/flow2authwidget.h +++ b/src/gui/wizard/flow2authwidget.h @@ -35,7 +35,8 @@ class Flow2AuthWidget : public QWidget void startAuth(Account *account); void resetAuth(Account *account = nullptr); - void setError(const QString &error); + void setError(const QString &caption, const QString &message); + void shrinkTopMarginForText(); public Q_SLOTS: void slotAuthResult(Flow2Auth::Result, const QString &errorString, const QString &user, const QString &appPassword); diff --git a/src/gui/wizard/flow2authwidget.ui b/src/gui/wizard/flow2authwidget.ui index e98f3c6d5e515..7ab39ab757ad2 100644 --- a/src/gui/wizard/flow2authwidget.ui +++ b/src/gui/wizard/flow2authwidget.ui @@ -1,261 +1,195 @@ - Flow2AuthWidget - - - - 0 - 0 - 597 - 387 - - - - - 0 - 0 - - - - - 500 - 280 - - - - Browser Authentication - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - Logo - - - Qt::AlignCenter - - - - - - - Qt::Vertical - - - - 20 - 32 - - - - - - - - - 12 - true - - - - Switch to your browser to connect your account - - - Qt::AlignCenter - - - true - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 8 - - - - - - - - Status - - - Qt::AlignCenter - - - 0 - - - - - - - Qt::Vertical - - - - 20 - 32 - - - - - - - - - - - Qt::Vertical - - - - 20 - 64 - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - 0 - 0 + Flow2AuthWidget + + + + 0 + 0 + 580 + 405 + + + + + 0 + 0 - - - - 9 - - - - pbSelectLocalFolder - - - true - - - false - - - - - - - - 0 - 0 - - - - - 9 - - - - pbSelectLocalFolder - - - true - - - false - - - + + + + 580 + 405 + + + + Browser Authentication + + + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 20 + 110 + + + + + + + + 0 + + + 0 + + + + + Logo + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 8 + + + + + + + + Switch to your browser to connect your account + + + Qt::AlignCenter + + + true + + + + + + + Status + + + Qt::AlignCenter + + + 0 + + + + + + + An error occurred while connecting. Please try again. + + + + + + + + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Copy Link + + + + + + + Reopen Browser + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 32 + + + + - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - An error occurred while connecting. Please try again. - - - Qt::PlainText - - - Qt::AlignCenter - - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 60 - - - - - - - - + + + + OCC::LinkLabel + QWidget +

wizard/linklabel.h
+ 1 + + + + diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index c3da20ec08cfa..0839f829ddcaa 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -23,17 +23,19 @@ #include "QProgressIndicator.h" -#include "wizard/owncloudwizard.h" -#include "wizard/owncloudwizardcommon.h" -#include "wizard/owncloudadvancedsetuppage.h" + #include "buttonstyle.h" #include "account.h" -#include "theme.h" #include "configfile.h" -#include "selectivesyncdialog.h" -#include #include "creds/abstractcredentials.h" +#include "ionostheme.h" #include "networkjobs.h" +#include "selectivesyncdialog.h" +#include "theme.h" +#include "wizard/owncloudadvancedsetuppage.h" #include "wizard/owncloudwizard.h" +#include "wizard/owncloudwizardcommon.h" +#include "SesComponents/syncdirvalidation.h" +#include #ifdef BUILD_FILE_PROVIDER_MODULE #include "gui/macOS/fileprovider.h" @@ -51,15 +53,22 @@ OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage(OwncloudWizard *wizard) setupResoultionWidget(); _filePathLabel.reset(new ElidedLabel); + _filePathLabel->setObjectName("filePathLabel"); + _filePathLabel->setWordWrap(true); _filePathLabel->setElideMode(Qt::ElideMiddle); _filePathLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); _filePathLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - _ui.locationsGridLayout->addWidget(_filePathLabel.data(), 3, 3); + _ui.locationsVBox->insertWidget(3, _filePathLabel.data()); _filePathLabel->setTextFormat(Qt::PlainText); _ui.userNameLabel->setTextFormat(Qt::PlainText); _ui.serverAddressLabel->setTextFormat(Qt::PlainText); _ui.localFolderDescriptionLabel->setTextFormat(Qt::PlainText); + _ui.confCheckBoxSize->hide(); + _ui.confSpinBox->hide(); + _ui.confTraillingSizeLabel->hide(); + _ui.wSyncStrategy->removeItem(_ui.horizontalLayout_6); + registerField(QLatin1String("OCSyncFromScratch"), _ui.cbSyncFromScratch); @@ -72,12 +81,12 @@ OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage(OwncloudWizard *wizard) setupCustomization(); connect(_ui.pbSelectLocalFolder, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSelectFolder); + _ui.pbSelectLocalFolder->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Secondary)); setButtonText(QWizard::FinishButton, tr("Connect")); if (Theme::instance()->enforceVirtualFilesSyncFolder()) { _ui.rSyncEverything->setDisabled(true); _ui.rSelectiveSync->setDisabled(true); - _ui.bSelectiveSync->setDisabled(true); } connect(_ui.rSyncEverything, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSyncEverythingClicked); @@ -92,7 +101,6 @@ OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage(OwncloudWizard *wizard) updateMacOsFileProviderRelatedViews(); #endif }); - connect(_ui.bSelectiveSync, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSelectiveSyncClicked); const auto theme = Theme::instance(); const auto appIcon = theme->applicationIcon(); @@ -211,7 +219,7 @@ void OwncloudAdvancedSetupPage::initializePage() _ui.confSpinBox->setValue(newFolderLimit.second); _ui.confCheckBoxExternal->setChecked(cfgFile.confirmExternalStorage()); - fetchUserAvatar(); + SetAvatarIcon(); setUserInformation(); customizeStyle(); @@ -234,6 +242,12 @@ void OwncloudAdvancedSetupPage::initializePage() } } +void OwncloudAdvancedSetupPage::SetAvatarIcon() +{ + const auto icon = QIcon(IonosTheme::avatarIcon()); + _ui.lServerIcon->setPixmap(icon.pixmap(32)); +} + void OwncloudAdvancedSetupPage::fetchUserAvatar() { // Reset user avatar @@ -341,7 +355,6 @@ void OwncloudAdvancedSetupPage::updateStatus() #endif _ui.syncModeLabel->setText(t); - _ui.syncModeLabel->setFixedHeight(_ui.syncModeLabel->sizeHint().height()); qint64 rSpace = _ui.rSyncEverything->isChecked() ? _rSize : _rSelectedSize; @@ -359,6 +372,7 @@ void OwncloudAdvancedSetupPage::setResolutionGuiVisible(bool value) _ui.syncModeLabel->setVisible(value); _ui.rKeepLocal->setVisible(value); _ui.cbSyncFromScratch->setVisible(value); + _ocWizard->adjustSize(); } /* obsolete */ @@ -440,13 +454,18 @@ bool OwncloudAdvancedSetupPage::validatePage() _checking = true; startSpinner(); emit completeChanged(); - + ConfigFile cfgFile; if (_ui.rSyncEverything->isChecked()) { ConfigFile cfgFile; cfgFile.setNewBigFolderSizeLimit(_ui.confCheckBoxSize->isChecked(), - _ui.confSpinBox->value()); + _ui.confCheckBoxSize->isChecked() ? _ui.confSpinBox->value() : -1); cfgFile.setConfirmExternalStorage(_ui.confCheckBoxExternal->isChecked()); } + else + { + cfgFile.setNewBigFolderSizeLimit(false, -1); + cfgFile.setConfirmExternalStorage(false); + } emit createLocalAndRemoteFolders(localFolder(), _remoteFolder); return false; @@ -467,6 +486,7 @@ void OwncloudAdvancedSetupPage::setErrorString(const QString &err) _ui.errorLabel->setVisible(true); _ui.errorLabel->setText(err); } + _ocWizard->adjustSize(); _checking = false; emit completeChanged(); } @@ -489,6 +509,11 @@ void OwncloudAdvancedSetupPage::setRemoteFolder(const QString &remoteFolder) void OwncloudAdvancedSetupPage::slotSelectFolder() { QString dir = QFileDialog::getExistingDirectory(nullptr, tr("Local Sync Folder"), QDir::homePath()); + SyncDirValidator syncDirValidator(dir); + if (!syncDirValidator.isValidDir()) { + setErrorString(syncDirValidator.message()); + return; + } if (!dir.isEmpty()) { // TODO: remove when UX decision is made refreshVirtualFilesAvailibility(dir); @@ -507,6 +532,7 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() AccountPtr acc = dynamic_cast(wizard())->account(); auto *dlg = new SelectiveSyncDialog(acc, _remoteFolder, _selectiveSyncBlacklist, this); dlg->setAttribute(Qt::WA_DeleteOnClose); + dlg->setStyleSheet(QStringLiteral("background-color: %1;").arg(IonosTheme::dialogBackgroundColor())); connect(dlg, &SelectiveSyncDialog::finished, this, [this, dlg]{ const int result = dlg->result(); @@ -519,6 +545,14 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() if (result == QDialog::Accepted) { _selectiveSyncBlacklist = dlg->createBlackList(); updateBlacklist = true; + _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::loginWizardFontLightGrey() + )); + + _ui.confCheckBoxSize->setDisabled(true); } else if (result == QDialog::Rejected && _selectiveSyncBlacklist == QStringList("/")) { _selectiveSyncBlacklist = dlg->oldBlackList(); updateBlacklist = true; @@ -546,6 +580,8 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() }); dlg->open(); + + } void OwncloudAdvancedSetupPage::slotVirtualFileSyncClicked() @@ -557,6 +593,15 @@ void OwncloudAdvancedSetupPage::slotVirtualFileSyncClicked() setRadioChecked(_ui.rVirtualFileSync); }); } + + _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::loginWizardFontLightGrey() + )); + + _ui.confCheckBoxSize->setDisabled(true); } void OwncloudAdvancedSetupPage::slotSyncEverythingClicked() @@ -567,8 +612,16 @@ void OwncloudAdvancedSetupPage::slotSyncEverythingClicked() QString errorStr = checkLocalSpace(_rSize); setErrorString(errorStr); + + _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); } + void OwncloudAdvancedSetupPage::slotQuotaRetrieved(const QVariantMap &result) { _rSize = result["size"].toDouble(); @@ -617,16 +670,106 @@ void OwncloudAdvancedSetupPage::customizeStyle() } } + _ocWizard->setMinimumSize(QSize(626, 515)); + _ocWizard->setMaximumSize(QSize(626, 600)); + + _ui.mainHBox->setContentsMargins(0, 0, 0, 0); + _ui.wSyncStrategySynchronizeEverything->setContentsMargins(0, 0, 0, 0); + _ui.lVirtualFileSync->setContentsMargins(0, 0, 0, 0); + _ui.horizontalLayout_8->setContentsMargins(32, 0, 0, 0); + _ui.horizontalLayout_10->setContentsMargins(0, 8, 0, 0); + _ui.horizontalLayout_10->setMargin(1); + + _ui.wSyncStrategy->setSpacing(16); + _ui.wSyncStrategy->setContentsMargins(0, 0, 0, 0); + _ui.verticalLayout->setSpacing(0); + _ui.pbSelectLocalFolder->setMinimumSize(0, 40); + + _ui.serverVBox->setAlignment(Qt::AlignTop); + _ui.serverVBox->setSpacing(5); + _ui.serverVBox->setContentsMargins(0, 0, 0, 0); + + _ui.arrowVBox->setSpacing(0); + _ui.arrowVBox->setContentsMargins(0, 0, 0, 0); + _ui.arrowVBox->setAlignment(Qt::AlignTop); + + _ui.locationsVBox->setAlignment(Qt::AlignTop); + _ui.locationsVBox->setContentsMargins(0, 0, 0, 0); + _ui.locationsVBox->setSpacing(5); + + _ui.resolutionWidgetLayout->setContentsMargins(0, 0, 0, 0); + styleSyncLogo(); styleLocalFolderLabel(); + + setStyleSheet( + "QRadioButton {" + + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + "} QCheckBox {" + + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + "}" + ); + + _ui.userNameLabel->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); + + _ui.serverAddressLabel->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::loginWizardFontGrey() + )); + + _ui.localFolderDescriptionLabel->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); + + _filePathLabel->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::loginWizardFontGrey() + )); + + _ui.lFreeSpace->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::loginWizardFontGrey() + )); + + #ifdef Q_OS_MAC + _ui.syncModeLabel->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::titleColor() + ) + ); + #endif + } void OwncloudAdvancedSetupPage::styleLocalFolderLabel() { - const auto backgroundColor = palette().window().color(); - const auto folderIconFileName = Theme::instance()->isBranded() ? Theme::hidpiFileName("folder.png", backgroundColor) - : Theme::hidpiFileName(":/client/theme/colored/folder.png"); - _ui.lLocal->setPixmap(folderIconFileName); + const auto icon = QIcon(IonosTheme::folderIcon()); + _ui.lLocal->setPixmap(icon.pixmap(32)); } void OwncloudAdvancedSetupPage::setRadioChecked(QRadioButton *radio) @@ -667,8 +810,10 @@ void OwncloudAdvancedSetupPage::updateMacOsFileProviderRelatedViews() void OwncloudAdvancedSetupPage::styleSyncLogo() { - const auto syncArrowIcon = Theme::createColorAwareIcon(QLatin1String(":/client/theme/sync-arrow.svg"), palette()); - _ui.syncLogoLabel->setPixmap(syncArrowIcon.pixmap(QSize(50, 50))); + const auto syncArrowIcon = QIcon(IonosTheme::syncArrows()); + // const auto syncArrowIcon = Theme::createColorAwareIcon(QLatin1String(":/client/theme/sync-arrow.svg"), palette()); + _ui.syncLogoLabel->setPixmap(syncArrowIcon.pixmap(QSize(32,32))); + _ui.syncLogoLabel->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); } void OwncloudAdvancedSetupPage::setupResoultionWidget() diff --git a/src/gui/wizard/owncloudadvancedsetuppage.h b/src/gui/wizard/owncloudadvancedsetuppage.h index 9192b7c9df9e6..391fe7efc7842 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.h +++ b/src/gui/wizard/owncloudadvancedsetuppage.h @@ -88,6 +88,7 @@ private slots: void setResolutionGuiVisible(bool value); void setupResoultionWidget(); void fetchUserAvatar(); + void SetAvatarIcon(); void setUserInformation(); // TODO: remove when UX decision is made diff --git a/src/gui/wizard/owncloudadvancedsetuppage.ui b/src/gui/wizard/owncloudadvancedsetuppage.ui index 5f51a2d824e10..dc9eedfad6610 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.ui +++ b/src/gui/wizard/owncloudadvancedsetuppage.ui @@ -7,7 +7,7 @@ 0 0 912 - 633 + 635 @@ -19,14 +19,49 @@ Form - - + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 32 + 20 + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 52 + + + + + + true + 0 @@ -48,612 +83,633 @@ - + QLayout::SetFixedSize - - - - Avatar + + 65 + + + 65 + + + + + QLayout::SetFixedSize - - Qt::PlainText + + + + + 0 + 0 + + + + Avatar + + + Qt::PlainText + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 8 + + + + + + + + + 0 + 0 + + + + Username + + + Qt::PlainText + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + Server address + + + Qt::PlainText + + + Qt::AlignHCenter|Qt::AlignTop + + + true + + + + + + + + + QLayout::SetFixedSize - - Qt::AlignCenter + + + + + 0 + 0 + + + + Sync Logo + + + Qt::PlainText + + + Qt::AlignHCenter|Qt::AlignTop + + + + + + + + + QLayout::SetFixedSize - + + + + + 0 + 0 + + + + + 0 + 32 + + + + &Local Folder + + + Qt::PlainText + + + Qt::AlignCenter + + + pbSelectLocalFolder + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 8 + + + + + + + + + 0 + 0 + + + + + true + + + + Local Folder + + + Qt::PlainText + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + Free space + + + Qt::PlainText + + + Qt::AlignCenter + + + true + + + + + + + + 0 + 4 + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 40 + 16 + + + + + + + + + 0 + 0 + + + + Choose different folder + + + true + + + false + + + + + + + + + + + + 0 + 4 + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 32 + + + + + + + + + + + + + 0 + 0 + + + + Synchronize everything from server + + + true + + + + + + + Size + + + Qt::PlainText + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 20 + 20 + + + + + + + + Ask before syncing folders larger than + + + + + + + + 0 + 0 + + + + Qt::StrongFocus + + + 999999 + + + 99 + + + + + + + + MB + + + + Qt::PlainText + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Ask before syncing external storages + + + 32 + + + + + + + + + 8 + + + + + + 0 + 0 + + + + Choose what to sync + + + false + + + + + + + TextLabel + + + Qt::PlainText + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + Use virtual files !PLACEHOLDER! + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - - + + + + + + + 0 + 4 + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 16 + + + + + + + + 6 + + + QLayout::SetMinimumSize + + + 0 + + + 2 + + + 0 + + + 0 + + + - + 0 0 - - &Local Folder - - - Qt::PlainText - - - Qt::AlignCenter - - - pbSelectLocalFolder - - - - - + 9 true - - Username - - - Qt::PlainText - - - Qt::AlignCenter - - - - - - - - true - + + 1 - Local Folder + Status message - Qt::PlainText + Qt::AutoText - Qt::AlignCenter + Qt::AlignLeading + + + true - - + + - + 0 0 - Choose different folder + Keep local data - + true - - false - - - + + - + 0 0 - - Free space - - - Qt::PlainText - - - Qt::AlignCenter - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Vertical + + <html><head/><body><p>If this box is checked, + existing content in the local folder will be erased to start a clean sync + from the server.</p><p>Do not check this if the local content + should be uploaded to the servers folder.</p></body></html> + - - QSizePolicy::Expanding - - - - 20 - 40 - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 40 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - Server address + Erase local folder and start a clean sync - - Qt::PlainText - - - Qt::AlignHCenter|Qt::AlignTop - - + true - - - - Sync Logo - - - Qt::PlainText - - - Qt::AlignCenter - - - - - - QLayout::SetMinimumSize + + + + 0 + 4 + - - 0 + + Qt::Vertical - - 0 + + QSizePolicy::Preferred - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - 0 - - - 0 - - - - - 0 - - - 0 - - - - - 0 - - - - - Synchronize everything from server - - - true - - - - - - - Size - - - Qt::PlainText - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - 0 - - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 20 - 20 - - - - - - - - Ask before syncing folders larger than - - - - - - - - 0 - 0 - - - - Qt::StrongFocus - - - 999999 - - - 99 - - - - - - - MB - - - Qt::PlainText - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - 0 - - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 20 - 20 - - - - - - - - Ask before syncing external storages - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - 0 - - - - - - 0 - 0 - - - - - - - false - - - - - - - Choose what to sync - - - true - - - false - - - - - - - TextLabel - - - Qt::PlainText - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 0 - 0 - - - - Use virtual files !PLACEHOLDER! - - - false - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 0 - 0 - - - - - 6 - - - QLayout::SetMinimumSize - - - 0 - - - 2 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 9 - true - - - - 1 - - - Status message - - - Qt::AutoText - - - Qt::AlignCenter - - - false - - - - - - - - 0 - 0 - - - - Keep local data - - - true - - - - - - - - 0 - 0 - - - - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - - - Erase local folder and start a clean sync - - - true - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + + + 0 + 16 + + + @@ -677,6 +733,22 @@ + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 32 + 20 + + + + diff --git a/src/gui/wizard/owncloudconnectionmethoddialog.cpp b/src/gui/wizard/owncloudconnectionmethoddialog.cpp index 2c4bd12a51067..285290d099868 100644 --- a/src/gui/wizard/owncloudconnectionmethoddialog.cpp +++ b/src/gui/wizard/owncloudconnectionmethoddialog.cpp @@ -23,6 +23,7 @@ OwncloudConnectionMethodDialog::OwncloudConnectionMethodDialog(QWidget *parent) , ui(new Ui::OwncloudConnectionMethodDialog) { ui->setupUi(this); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); connect(ui->btnNoTLS, &QAbstractButton::clicked, this, &OwncloudConnectionMethodDialog::returnNoTLS); connect(ui->btnClientSideTLS, &QAbstractButton::clicked, this, &OwncloudConnectionMethodDialog::returnClientSideTLS); diff --git a/src/gui/wizard/owncloudsetupnocredspage.ui b/src/gui/wizard/owncloudsetupnocredspage.ui index d12a9e1438326..b87c7bab470f8 100644 --- a/src/gui/wizard/owncloudsetupnocredspage.ui +++ b/src/gui/wizard/owncloudsetupnocredspage.ui @@ -67,13 +67,13 @@ - + diff --git a/src/gui/wizard/owncloudsetuppage.cpp b/src/gui/wizard/owncloudsetuppage.cpp index 28bd2c3d849be..4721a9808a33a 100644 --- a/src/gui/wizard/owncloudsetuppage.cpp +++ b/src/gui/wizard/owncloudsetuppage.cpp @@ -93,7 +93,7 @@ OwncloudSetupPage::OwncloudSetupPage(QWidget *parent) void OwncloudSetupPage::setLogo() { - _ui.logoLabel->setPixmap(Theme::instance()->wizardApplicationLogo()); + //_ui.logoLabel->setPixmap(Theme::instance()->wizardApplicationLogo()); } void OwncloudSetupPage::setupServerAddressDescriptionLabel() @@ -257,7 +257,7 @@ bool OwncloudSetupPage::validatePage() QString u = url(); QUrl qurl(u); if (!qurl.isValid() || qurl.host().isEmpty()) { - setErrorString(tr("Server address does not seem to be valid"), false); + setConnectionError(tr("Server address does not seem to be valid"), false); return false; } @@ -284,42 +284,50 @@ void OwncloudSetupPage::setAuthType(DetermineAuthTypeJob::AuthType type) stopSpinner(); } +void OwncloudSetupPage::setConnectionError(const QString &err, bool retryHTTPonly) +{ + this->setVisible(true); + _ocWizard->button(QWizard::BackButton)->setHidden(false); + setErrorString(err, retryHTTPonly); +} + void OwncloudSetupPage::setErrorString(const QString &err, bool retryHTTPonly) { if (err.isEmpty()) { _ui.errorLabel->setVisible(false); } else { - if (retryHTTPonly) { - const auto urlString = url(); - QUrl url(urlString); - if (url.scheme() == "https") { - // Ask the user how to proceed when connecting to a https:// URL fails. - // It is possible that the server is secured with client-side TLS certificates, - // but that it has no way of informing the owncloud client that this is the case. - - OwncloudConnectionMethodDialog dialog; - dialog.setUrl(url); - // FIXME: Synchronous dialogs are not so nice because of event loop recursion - int retVal = dialog.exec(); - - switch (retVal) { - case OwncloudConnectionMethodDialog::No_TLS: { - url.setScheme("http"); - _ui.leUrl->setFullText(url.toString()); - // skip ahead to next page, since the user would expect us to retry automatically - wizard()->next(); - } break; - case OwncloudConnectionMethodDialog::Client_Side_TLS: - addCertDial->show(); - break; - case OwncloudConnectionMethodDialog::Closed: - case OwncloudConnectionMethodDialog::Back: - default: - // No-op. - break; - } - } - } + //SES-84: Should only be shown in the Managed Cloud Client + // if (retryHTTPonly) { + // const auto urlString = url(); + // QUrl url(urlString); + // if (url.scheme() == "https") { + // // Ask the user how to proceed when connecting to a https:// URL fails. + // // It is possible that the server is secured with client-side TLS certificates, + // // but that it has no way of informing the owncloud client that this is the case. + + // OwncloudConnectionMethodDialog dialog; + // dialog.setUrl(url); + // // FIXME: Synchronous dialogs are not so nice because of event loop recursion + // int retVal = dialog.exec(); + + // switch (retVal) { + // case OwncloudConnectionMethodDialog::No_TLS: { + // url.setScheme("http"); + // _ui.leUrl->setFullText(url.toString()); + // // skip ahead to next page, since the user would expect us to retry automatically + // wizard()->next(); + // } break; + // case OwncloudConnectionMethodDialog::Client_Side_TLS: + // addCertDial->show(); + // break; + // case OwncloudConnectionMethodDialog::Closed: + // case OwncloudConnectionMethodDialog::Back: + // default: + // // No-op. + // break; + // } + // } + // } _ui.errorLabel->setVisible(true); _ui.errorLabel->setText(err); @@ -383,7 +391,7 @@ void OwncloudSetupPage::slotStyleChanged() void OwncloudSetupPage::customizeStyle() { - setLogo(); + //setLogo(); if (_progressIndi) { const auto isDarkBackground = Theme::isDarkColor(palette().window().color()); diff --git a/src/gui/wizard/owncloudsetuppage.h b/src/gui/wizard/owncloudsetuppage.h index 06cea0753695e..e856f170dbb8b 100644 --- a/src/gui/wizard/owncloudsetuppage.h +++ b/src/gui/wizard/owncloudsetuppage.h @@ -59,6 +59,7 @@ class OwncloudSetupPage : public QWizardPage public slots: void setErrorString(const QString &, bool retryHTTPonly); + void setConnectionError(const QString &, bool retryHTTPonly); void startSpinner(); void stopSpinner(); void slotCertificateAccepted(); diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index a887ca65c7189..daa8788254e72 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -23,14 +23,14 @@ #include "foregroundbackground_interface.h" #endif -#include "wizard/owncloudwizard.h" -#include "wizard/welcomepage.h" -#include "wizard/owncloudsetuppage.h" -#include "wizard/owncloudhttpcredspage.h" -#include "wizard/termsofservicewizardpage.h" +#include "ionostheme.h" +#include "wizard/flow2authcredspage.h" #include "wizard/owncloudadvancedsetuppage.h" +#include "wizard/owncloudhttpcredspage.h" +#include "wizard/owncloudsetuppage.h" +#include "wizard/owncloudwizard.h" #include "wizard/webviewpage.h" -#include "wizard/flow2authcredspage.h" +#include "wizard/welcomepage.h" #include "common/vfs.h" @@ -128,6 +128,9 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) adjustWizardSize(); centerWindow(); + + // Set focus policy to prevent initial focus on the button + setFocusPolicy(Qt::StrongFocus); } void OwncloudWizard::centerWindow() @@ -142,20 +145,9 @@ void OwncloudWizard::centerWindow() wizardWindow->move(newWindowPosition); } - void OwncloudWizard::adjustWizardSize() { - const auto pageSizes = calculateWizardPageSizes(); - const auto currentPageIndex = currentId(); - - // If we can, just use the size of the current page - if(currentPageIndex > -1 && currentPageIndex < pageSizes.count()) { - resize(pageSizes.at(currentPageIndex)); - return; - } - - // As a backup, resize to largest page - resize(calculateLargestSizeOfWizardPages(pageSizes)); + setFixedSize(QSize(626, 460)); } QList OwncloudWizard::calculateWizardPageSizes() const @@ -350,6 +342,10 @@ void OwncloudWizard::slotCurrentPageChanged(int id) id == WizardCommon::Page_Flow2AuthCreds || id == WizardCommon::Page_TermsOfService) { setButtonLayout({ QWizard::BackButton, QWizard::Stretch }); + #ifdef APPLICATION_SERVER_URL_ENFORCE + button(QWizard::BackButton)->setHidden(true); + #endif + } else if (id == WizardCommon::Page_AdvancedSetup) { setButtonLayout({ QWizard::CustomButton2, QWizard::Stretch, QWizard::CustomButton1, QWizard::FinishButton }); setNextButtonAsDefault(); @@ -360,6 +356,11 @@ void OwncloudWizard::slotCurrentPageChanged(int id) if (id == WizardCommon::Page_ServerSetup) { emit clearPendingRequests(); + #ifdef APPLICATION_SERVER_URL_ENFORCE + _setupPage->setServerUrl(APPLICATION_SERVER_URL); + _setupPage->initializePage(); + button(QWizard::BackButton)->setHidden(true); + #endif } if (id == WizardCommon::Page_AdvancedSetup && _credentialsPage == _flow2CredsPage) { @@ -381,7 +382,7 @@ void OwncloudWizard::displayError(const QString &msg, bool retryHTTPonly) break; case WizardCommon::Page_ServerSetup: - _setupPage->setErrorString(msg, retryHTTPonly); + _setupPage->setConnectionError(msg, retryHTTPonly); break; case WizardCommon::Page_HttpCreds: @@ -457,8 +458,14 @@ void OwncloudWizard::customizeStyle() // Set background colors auto wizardPalette = palette(); - const auto backgroundColor = wizardPalette.color(QPalette::Window); + const auto backgroundColor = QColor(IonosTheme::dialogBackgroundColor()); + + // Set Color of upper part wizardPalette.setColor(QPalette::Base, backgroundColor); + + // Set Color of lower part + wizardPalette.setColor(backgroundRole(), backgroundColor); + // Set separator color wizardPalette.setColor(QPalette::Mid, backgroundColor); diff --git a/src/gui/wizard/slideshow.cpp b/src/gui/wizard/slideshow.cpp index 7423227211b32..5e263c8a47c1d 100644 --- a/src/gui/wizard/slideshow.cpp +++ b/src/gui/wizard/slideshow.cpp @@ -13,6 +13,8 @@ */ #include "slideshow.h" +#include "ionostheme.h" + #include #include #include @@ -21,14 +23,19 @@ namespace OCC { -static const int Spacing = 6; +static const int Spacing = IonosTheme::LoginPageSpacer(); static const int SlideDuration = 1000; static const int SlideDistance = 400; SlideShow::SlideShow(QWidget *parent) : QWidget(parent) { setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - setStyleSheet(QStringLiteral("font: bold 18pt")); + setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::onboardingTitle(), + IonosTheme::settingsTitleWeight400(), + IonosTheme::titleColor() + )); } void SlideShow::addSlide(const QPixmap &pixmap, const QString &label) @@ -190,7 +197,7 @@ void SlideShow::maybeRestartTimer() } void SlideShow::drawSlide(QPainter *painter, int index) -{ +{ const auto label = _labels.value(index); const auto labelRect = style()->itemTextRect(fontMetrics(), rect(), diff --git a/src/gui/wizard/welcomepage.cpp b/src/gui/wizard/welcomepage.cpp index fa706fbcd4052..ecdf8fe525995 100644 --- a/src/gui/wizard/welcomepage.cpp +++ b/src/gui/wizard/welcomepage.cpp @@ -13,11 +13,12 @@ */ #include "welcomepage.h" +#include "buttonstyle.h" #include "guiutility.h" #include "theme.h" +#include "ui_welcomepage.h" #include "wizard/owncloudwizard.h" #include "wizard/slideshow.h" -#include "ui_welcomepage.h" namespace OCC { @@ -47,36 +48,23 @@ void WelcomePage::initializePage() void WelcomePage::setLoginButtonDefault() { +#ifdef Q_OS_WIN _ui->loginButton->setDefault(true); +#endif _ui->loginButton->setFocus(); } void WelcomePage::styleSlideShow() { - const auto theme = Theme::instance(); - const auto backgroundColor = palette().window().color(); - - const auto wizardNextcloudIconFileName = theme->isBranded() ? Theme::hidpiFileName("wizard-nextcloud.png", backgroundColor) - : Theme::hidpiFileName(":/client/theme/colored/wizard-nextcloud.png"); - const auto wizardFilesIconFileName = theme->isBranded() ? Theme::hidpiFileName("wizard-files.png", backgroundColor) - : Theme::hidpiFileName(":/client/theme/colored/wizard-files.png"); - const auto wizardGroupwareIconFileName = theme->isBranded() ? Theme::hidpiFileName("wizard-groupware.png", backgroundColor) - : Theme::hidpiFileName(":/client/theme/colored/wizard-groupware.png"); - const auto wizardTalkIconFileName = theme->isBranded() ? Theme::hidpiFileName("wizard-talk.png", backgroundColor) - : Theme::hidpiFileName(":/client/theme/colored/wizard-talk.png"); - - _ui->slideShow->addSlide(wizardNextcloudIconFileName, tr("Keep your data secure and under your control")); - _ui->slideShow->addSlide(wizardFilesIconFileName, tr("Secure collaboration & file exchange")); - _ui->slideShow->addSlide(wizardGroupwareIconFileName, tr("Easy-to-use web mail, calendaring & contacts")); - _ui->slideShow->addSlide(wizardTalkIconFileName, tr("Screensharing, online meetings & web conferences")); + const auto ionosLogoFileName = Theme::hidpiFileName(":/client/theme/colored/IONOS_logo_w_suffix_frontend.png"); - const auto isDarkBackground = Theme::isDarkColor(backgroundColor); - _ui->slideShowNextButton->setIcon(theme->uiThemeIcon(QStringLiteral("control-next.svg"), isDarkBackground)); - _ui->slideShowPreviousButton->setIcon(theme->uiThemeIcon(QStringLiteral("control-prev.svg"), isDarkBackground)); + _ui->slideShow->addSlide(ionosLogoFileName, tr("Keep your data secure and under your control")); } void WelcomePage::setupSlideShow() { + _ui->slideShowNextButton->hide(); + _ui->slideShowPreviousButton->hide(); connect(_ui->slideShow, &SlideShow::clicked, _ui->slideShow, &SlideShow::stopShow); connect(_ui->slideShowNextButton, &QPushButton::clicked, _ui->slideShow, &SlideShow::nextSlide); connect(_ui->slideShowPreviousButton, &QPushButton::clicked, _ui->slideShow, &SlideShow::prevSlide); @@ -84,14 +72,16 @@ void WelcomePage::setupSlideShow() void WelcomePage::setupLoginButton() { + _ui->loginButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); connect(_ui->loginButton, &QPushButton::clicked, this, [this](bool /*checked*/) { _nextPage = WizardCommon::Page_ServerSetup; - _ocWizard->next(); + _ocWizard->next(); }); } void WelcomePage::setupCreateAccountButton() { + _ui->createAccountButton->hide(); #ifdef WITH_WEBENGINE connect(_ui->createAccountButton, &QPushButton::clicked, this, [this](bool /*checked*/) { _ocWizard->setRegistration(true); @@ -108,8 +98,9 @@ void WelcomePage::setupCreateAccountButton() void WelcomePage::setupHostYourOwnServerLabel() { + _ui->hostYourOwnServerLabel->hide(); _ui->hostYourOwnServerLabel->setText(tr("Host your own server")); - _ui->hostYourOwnServerLabel->setAlignment(Qt::AlignCenter); + _ui->hostYourOwnServerLabel->setAlignment(Qt::AlignCenter); _ui->hostYourOwnServerLabel->setUrl(QUrl("https://docs.nextcloud.com/server/latest/admin_manual/installation/#installation")); } @@ -120,6 +111,8 @@ int WelcomePage::nextId() const void WelcomePage::customizeStyle() { + _ocWizard->setFixedSize(626, 460); + _ui->mainHbox->setContentsMargins(0, 0, 0, 0); styleSlideShow(); } } diff --git a/src/gui/wizard/welcomepage.ui b/src/gui/wizard/welcomepage.ui index e2e920aa315d3..84f0aae879145 100644 --- a/src/gui/wizard/welcomepage.ui +++ b/src/gui/wizard/welcomepage.ui @@ -1,229 +1,298 @@ - OCC::WelcomePage - - - - 0 - 0 - 500 - 500 - - - - - 0 - 0 - - - - Form - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 80 - - - - - - - - 0 - - - - - - 40 - 16777215 - - - - - - - false - - - false - - - true - - - - - - - - 12 - 75 - true - - - - - - - - - 40 - 16777215 - - - - - - - false - - - false - - - true - - - - - - - - - 0 - - - 0 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - 0 - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Log in - - - true - - - true - - - - - - - Sign up with provider - - - true - - - false - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - OCC::SlideShow - QWidget -
wizard/slideshow.h
-
- - OCC::LinkLabel - QWidget -
wizard/linklabel.h
- 1 -
-
- - + OCC::WelcomePage + + + + 0 + 0 + 626 + 450 + + + + + 0 + 0 + + + + Form + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 118 + 20 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 90 + + + + + + + + 0 + + + + + + 40 + 16777215 + + + + + + + false + + + false + + + true + + + + + + + + 12 + true + + + + + -1 + -1 + + + + + + + + + 40 + 16777215 + + + + + + + false + + + false + + + true + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 90 + + + + + + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 0 + + + 10 + + + + + Qt::Vertical + + + QSizePolicy::MinimumExpanding + + + + 20 + 80 + + + + + + + + Log in + + + true + + + true + + + + + + + Sign up with provider + + + true + + + false + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 48 + + + + + + + + + + Qt::Horizontal + + + + 40 + 0 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 0 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 118 + 20 + + + + + + + + + OCC::SlideShow + QWidget +
wizard/slideshow.h
+
+ + OCC::LinkLabel + QWidget +
wizard/linklabel.h
+ 1 +
+
+ +
From 1e7f2b18e1d38edd0cb2cbc961f33ecd425834ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 14 Jan 2025 15:25:49 +0100 Subject: [PATCH 008/359] style tray cherry-pick ee74a6f6744d69f904eeb2411d960085470ad6a9 --- resources.qrc | 6 + src/gui/tray/AccountMenuItem.qml | 41 ++ src/gui/tray/ActivityItem.qml | 4 +- src/gui/tray/ActivityItemActions.qml | 6 +- src/gui/tray/ActivityItemContent.qml | 57 +- src/gui/tray/ActivityList.qml | 10 +- src/gui/tray/CallNotificationDialog.qml | 2 +- src/gui/tray/EditFileLocallyLoadingDialog.qml | 2 +- src/gui/tray/EnforcedPlainTextLabel.qml | 1 - src/gui/tray/HeaderButton.qml | 53 +- src/gui/tray/HeaderLogo.qml | 34 ++ src/gui/tray/NCBusyIndicator.qml | 8 +- src/gui/tray/SesButtonContents.qml | 73 +++ src/gui/tray/SesCustomButton.qml | 75 +++ src/gui/tray/SyncStatus.qml | 39 +- src/gui/tray/TalkReplyTextField.qml | 2 +- src/gui/tray/TrayFoldersMenuButton.qml | 44 +- src/gui/tray/TrayWindowAccountMenu.qml | 285 ++++++++++ src/gui/tray/TrayWindowHeaderBar.qml | 171 ++++++ src/gui/tray/UnifiedSearchInputContainer.qml | 2 +- src/gui/tray/UnifiedSearchResultListItem.qml | 2 +- .../tray/UnifiedSearchResultSectionItem.qml | 2 +- src/gui/tray/UserLine.qml | 159 +++--- src/gui/tray/Window.qml | 497 ++++++++++++++++++ src/gui/tray/activitylistmodel.cpp | 22 +- src/gui/tray/asyncimageresponse.h | 4 +- src/gui/tray/usermodel.cpp | 49 +- src/gui/tray/usermodel.h | 2 + 28 files changed, 1491 insertions(+), 161 deletions(-) create mode 100644 src/gui/tray/AccountMenuItem.qml create mode 100644 src/gui/tray/HeaderLogo.qml create mode 100644 src/gui/tray/SesButtonContents.qml create mode 100644 src/gui/tray/SesCustomButton.qml create mode 100644 src/gui/tray/TrayWindowAccountMenu.qml create mode 100644 src/gui/tray/TrayWindowHeaderBar.qml create mode 100644 src/gui/tray/Window.qml diff --git a/resources.qrc b/resources.qrc index 6036fa0e1bff0..e41bf9cdb761b 100644 --- a/resources.qrc +++ b/resources.qrc @@ -40,6 +40,8 @@ src/gui/tray/UnifiedSearchResultNothingFound.qml src/gui/tray/UnifiedSearchPlaceholderView.qml src/gui/tray/UnifiedSearchResultSectionItem.qml + src/gui/tray/SesCustomButton.qml + src/gui/tray/SesButtonContents.qml src/gui/tray/ActivityItemContextMenu.qml src/gui/tray/ActivityItemActions.qml src/gui/tray/ActivityItemContent.qml @@ -52,6 +54,10 @@ src/gui/tray/NCToolTip.qml src/gui/tray/NCProgressBar.qml src/gui/tray/EnforcedPlainTextLabel.qml + src/gui/tray/TrayWindowHeaderBar.qml + src/gui/tray/TrayWindowAccountMenu.qml + src/gui/tray/HeaderLogo.qml + src/gui/tray/AccountMenuItem.qml theme/Style/Style.qml theme/Style/qmldir src/gui/tray/ListItemLineAndSubline.qml diff --git a/src/gui/tray/AccountMenuItem.qml b/src/gui/tray/AccountMenuItem.qml new file mode 100644 index 0000000000000..0d427221d72a7 --- /dev/null +++ b/src/gui/tray/AccountMenuItem.qml @@ -0,0 +1,41 @@ +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 + +// Custom qml modules are in /theme (and included by resources.qrc) +import Style 1.0 +import com.ionos.hidrivenext.desktopclient 1.0 + +MenuItem { + id: accountMenuItem + + property bool isHovered: accountMenuItem.hovered || accountMenuItem.visualFocus + property bool isActive: accountMenuItem.pressed + + font.pixelSize: Style.sesFontPixelSize + hoverEnabled: true + leftPadding: Style.sesMediumMargin + topPadding: Style.sesAccountMenuItemPadding + bottomPadding: Style.sesAccountMenuItemPadding + spacing: Style.sesSmallMargin + + icon.height: Style.smallIconSize + icon.width: Style.smallIconSize + icon.color: Style.sesIconDarkColor + + background: Item { + height: parent.height + width: parent.menu.width + Rectangle { + radius: 0 + anchors.fill: parent + anchors.margins: 1 + color: accountMenuItem.isActive ? Style.sesButtonPressed : accountMenuItem.isHovered ? Style.sesAccountMenuHover : "transparent" + } + } + + Accessible.role: Accessible.MenuItem + Accessible.name: text + Accessible.onPressAction: accountMenuItem.clicked() +} \ No newline at end of file diff --git a/src/gui/tray/ActivityItem.qml b/src/gui/tray/ActivityItem.qml index c84b44cceda81..b37fdbd1bdd96 100644 --- a/src/gui/tray/ActivityItem.qml +++ b/src/gui/tray/ActivityItem.qml @@ -3,11 +3,13 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient ItemDelegate { id: root + leftPadding: Style.sesActivityItemDistanceToFrame + rightPadding: Style.sesActivityItemDistanceToFrame property Flickable flickable property int iconSize: Style.trayListItemIconSize diff --git a/src/gui/tray/ActivityItemActions.qml b/src/gui/tray/ActivityItemActions.qml index 873da58302024..eb3d997cf7615 100644 --- a/src/gui/tray/ActivityItemActions.qml +++ b/src/gui/tray/ActivityItemActions.qml @@ -3,7 +3,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient Repeater { id: root @@ -44,6 +44,10 @@ Repeater { onClicked: isTalkReplyButton ? root.showReplyField() : root.triggerAction(model.index) + textColor: Style.adjustedCurrentUserHeaderColor + textColorHovered: Style.currentUserHeaderTextColor + bgColor: Style.currentUserHeaderColor + visible: verb !== "REPLY" || (verb === "REPLY" && root.talkReplyButtonVisible) } } diff --git a/src/gui/tray/ActivityItemContent.qml b/src/gui/tray/ActivityItemContent.qml index 45fd6591aefa4..510d17f90276b 100644 --- a/src/gui/tray/ActivityItemContent.qml +++ b/src/gui/tray/ActivityItemContent.qml @@ -4,7 +4,7 @@ import QtQuick.Controls import QtQuick.Layouts import Style import Qt5Compat.GraphicalEffects -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient RowLayout { id: root @@ -26,12 +26,12 @@ RowLayout { Item { id: thumbnailItem - readonly property int imageWidth: width * (1 - Style.thumbnailImageSizeReduction) - readonly property int imageHeight: height * (1 - Style.thumbnailImageSizeReduction) + readonly property int imageWidth: Style.sesIconSize + readonly property int imageHeight: Style.sesIconSize readonly property int thumbnailRadius: model.thumbnail && model.thumbnail.isUserAvatar ? width / 2 : 3 - implicitWidth: root.iconSize - implicitHeight: model.thumbnail && model.thumbnail.isMimeTypeIcon ? root.iconSize * 0.9 : root.iconSize + implicitWidth: Style.sesIconSize + implicitHeight: Style.sesIconSize Loader { id: thumbnailImageLoader @@ -45,8 +45,8 @@ RowLayout { Image { id: thumbnailImage - width: thumbnailItem.imageWidth - height: thumbnailItem.imageHeight + width: Style.sesIconSize + height: Style.sesIconSize anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left cache: true @@ -78,8 +78,9 @@ RowLayout { Image { id: activityIcon - width: model.thumbnail !== undefined ? parent.width * 0.4 : thumbnailItem.imageWidth - height: model.thumbnail !== undefined ? width : width * 0.9 + + width: model.thumbnail !== undefined ? Style.sesIconSize * 0.6 : Style.sesIconSize + height: model.thumbnail !== undefined ? Style.sesIconSize * 0.6 : Style.sesIconSize // Prevent bad access into unloaded item properties readonly property int thumbnailPaintedWidth: thumbnailImageLoader.item ? thumbnailImageLoader.item.paintedWidth : 0 @@ -116,8 +117,8 @@ RowLayout { Layout.fillHeight: true Layout.fillWidth: true - Layout.maximumWidth: root.width - Style.standardSpacing - root.iconSize - implicitWidth: root.width - Style.standardSpacing - root.iconSize + Layout.maximumWidth: root.width - Style.standardSpacing - root.iconSize + Style.sesActivityItemWidthModifier + implicitWidth: root.width - Style.standardSpacing - root.iconSize + Style.sesActivityItemWidthModifier spacing: Style.smallSpacing @@ -134,7 +135,7 @@ RowLayout { elide: Text.ElideRight wrapMode: Text.Wrap maximumLineCount: 2 - font.pixelSize: Style.topLinePixelSize + font: root.font visible: text !== "" } @@ -150,7 +151,9 @@ RowLayout { height: (text === "") ? 0 : implicitHeight text: root.activityData.dateTime - font.pixelSize: Style.subLinePixelSize + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontHintPixelSize + color: Style.sesTrayFontColor visible: text !== "" } @@ -160,9 +163,16 @@ RowLayout { Button { id: fileDetailsButton + property bool isHovered: fileDetailsButton.hovered || fileDetailsButton.visualFocus + property bool isActive: fileDetailsButton.pressed + + Layout.preferredWidth: Style.dismissButtonSize + Layout.preferredHeight: Style.dismissButtonSize + Layout.alignment: Qt.AlignTop | Qt.AlignRight width: Style.activityListButtonWidth height: Style.activityListButtonHeight + icon.source: "image://svgimage-custom-color/more.svg/" + (isHovered ? Style.sesWhite : Style.sesActionHover) icon.source: "image://svgimage-custom-color/more.svg/" + palette.buttonText icon.width: Style.activityListButtonIconSize @@ -172,10 +182,17 @@ RowLayout { text: qsTr("Open file details") visible: parent.hovered } + background: Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: parent.isActive ? Style.sesActionPressed : parent.isHovered ? Style.sesActionHover : "transparent" + radius: width / 2 + } + + display: Button.IconOnly + leftPadding: 0 + rightPadding: 0 - display: Button.IconOnly - visible: model.showFileDetails - onClicked: Systray.presentShareViewInTray(model.openablePath) } Button { @@ -220,8 +237,9 @@ RowLayout { height: (text === "") ? 0 : implicitHeight elide: Text.ElideRight wrapMode: Text.Wrap - maximumLineCount: 2 - font.pixelSize: Style.subLinePixelSize + maximumLineCount: 10 + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontHintPixelSize visible: text !== "" } @@ -241,7 +259,8 @@ RowLayout { elide: Text.ElideRight wrapMode: Text.Wrap maximumLineCount: 2 - font.pixelSize: Style.topLinePixelSize + font: root.font + color: Style.sesTrayFontColor visible: text !== "" } diff --git a/src/gui/tray/ActivityList.qml b/src/gui/tray/ActivityList.qml index c5196948d5632..b7180b35fd46a 100644 --- a/src/gui/tray/ActivityList.qml +++ b/src/gui/tray/ActivityList.qml @@ -2,7 +2,7 @@ import QtQuick import QtQuick.Controls import Style -import com.nextcloud.desktopclient as NC +import com.ionos.hidrivenext.desktopclient as NC ScrollView { id: controlRoot @@ -65,7 +65,7 @@ ScrollView { highlight: Rectangle { id: activityHover anchors.fill: activityList.currentItem - color: palette.highlight + color: Style.sesHover radius: Style.mediumRoundedButtonRadius visible: activityList.activeFocus } @@ -148,13 +148,15 @@ ScrollView { verticalAlignment: Image.AlignVCenter horizontalAlignment: Image.AlignHCenter fillMode: Image.PreserveAspectFit - source: "image://svgimage-custom-color/activity.svg/" + palette.windowText + source: "image://svgimage-custom-color/activity.svg/" + sourceSize.height: 32 + sourceSize.width: 22 } EnforcedPlainTextLabel { width: parent.width text: qsTr("No activities yet") - font.bold: true + color: Style.sesDarkBlue wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter diff --git a/src/gui/tray/CallNotificationDialog.qml b/src/gui/tray/CallNotificationDialog.qml index 3050540279798..0d5ef11a133a6 100644 --- a/src/gui/tray/CallNotificationDialog.qml +++ b/src/gui/tray/CallNotificationDialog.qml @@ -16,11 +16,11 @@ import QtQuick import QtQuick.Window import Style -import com.nextcloud.desktopclient import QtQuick.Layouts import QtMultimedia import QtQuick.Controls import Qt5Compat.GraphicalEffects +import com.ionos.hidrivenext.desktopclient ApplicationWindow { id: root diff --git a/src/gui/tray/EditFileLocallyLoadingDialog.qml b/src/gui/tray/EditFileLocallyLoadingDialog.qml index 8edbf8d01b635..400f19c966921 100644 --- a/src/gui/tray/EditFileLocallyLoadingDialog.qml +++ b/src/gui/tray/EditFileLocallyLoadingDialog.qml @@ -1,9 +1,9 @@ import QtQuick import QtQuick.Window import Style -import com.nextcloud.desktopclient import QtQuick.Layouts import QtQuick.Controls +import com.ionos.hidrivenext.desktopclient ApplicationWindow { id: root diff --git a/src/gui/tray/EnforcedPlainTextLabel.qml b/src/gui/tray/EnforcedPlainTextLabel.qml index bfc3c09957433..9211d2aa84e83 100644 --- a/src/gui/tray/EnforcedPlainTextLabel.qml +++ b/src/gui/tray/EnforcedPlainTextLabel.qml @@ -22,7 +22,6 @@ Label { textFormat = Text.PlainText; } } - textFormat: Text.PlainText onTextFormatChanged: resetToPlainText() Component.onCompleted: resetToPlainText() diff --git a/src/gui/tray/HeaderButton.qml b/src/gui/tray/HeaderButton.qml index ff8866e481cf4..36c7acffb30e0 100644 --- a/src/gui/tray/HeaderButton.qml +++ b/src/gui/tray/HeaderButton.qml @@ -21,12 +21,12 @@ import QtQuick.Layouts // Custom qml modules are in /theme (and included by resources.qrc) import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient Button { id: root - display: AbstractButton.IconOnly + display: AbstractButton.TextUnderIcon flat: true hoverEnabled: Style.hoverEffectsEnabled @@ -42,6 +42,51 @@ Button { } Layout.alignment: Qt.AlignRight - Layout.preferredWidth: Style.trayWindowHeaderHeight - Layout.preferredHeight: Style.trayWindowHeaderHeight + Layout.preferredWidth: Style.sesHeaderButtonWidth + Layout.preferredHeight: Style.sesHeaderButtonHeight + + property bool isHovered: root.hovered || root.visualFocus + property bool isActive: root.pressed + + background: Rectangle { + width: Style.sesHeaderButtonWidth + height: Style.sesHeaderButtonHeight + color: root.isActive ? Style.sesButtonPressed : root.isHovered ? Style.sesAccountMenuHover : "transparent" + radius: Style.sesCornerRadius + } + + contentItem: Item { + id: rootContent + + Image { + id: buttonIcon + anchors.horizontalCenter: rootContent.horizontalCenter + anchors.top: rootContent.top + anchors.topMargin: 10 + + property int imageWidth: root.icon.width + property int imageHeight: root.icon.height + cache: true + + source: root.icon.source + sourceSize { + width: imageWidth + height: imageHeight + } + + width: imageWidth + height: imageHeight + + anchors.verticalCenter: parent + } + + Text { + anchors.horizontalCenter: buttonIcon.horizontalCenter + anchors.top: buttonIcon.bottom + anchors.topMargin: 5 + font: root.font + text: root.text + color: Style.sesTrayFontColor + } + } } diff --git a/src/gui/tray/HeaderLogo.qml b/src/gui/tray/HeaderLogo.qml new file mode 100644 index 0000000000000..ee7b9ee008351 --- /dev/null +++ b/src/gui/tray/HeaderLogo.qml @@ -0,0 +1,34 @@ +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import QtGraphicalEffects 1.15 +import Qt.labs.platform 1.1 as NativeDialogs + +import "../" + +// Custom qml modules are in /theme (and included by resources.qrc) +import Style 1.0 + +import com.ionos.hidrivenext.desktopclient 1.0 + +Rectangle { + Image{ + id: trayWindowLogo + cache: false + source: Style.sesIonosLogoIcon + sourceSize: Qt.size(width, height) + fillMode: Image.PreserveAspectFit + anchors{ + top: parent.top + left: parent.left + bottom: parent.bottom + topMargin: Style.sesHeaderLogoTopMargin + leftMargin: Style.sesHeaderLogoTopMargin + bottomMargin: Style.sesHeaderLogoTopMargin + + } + } + + color: Style.sesSelectedColor +} \ No newline at end of file diff --git a/src/gui/tray/NCBusyIndicator.qml b/src/gui/tray/NCBusyIndicator.qml index 583b787bcbe9d..0f25fd3d2d2d7 100644 --- a/src/gui/tray/NCBusyIndicator.qml +++ b/src/gui/tray/NCBusyIndicator.qml @@ -22,9 +22,6 @@ BusyIndicator { property color color: palette.windowText property string imageSource: "image://svgimage-custom-color/change.svg/" - property int imageSourceSizeWidth: 64 - property int imageSourceSizeHeight: 64 - contentItem: Image { id: contentImage @@ -34,9 +31,8 @@ BusyIndicator { verticalAlignment: Image.AlignVCenter source: colourableImage ? root.imageSource + root.color : root.imageSource - sourceSize.width: root.imageSourceSizeWidth - sourceSize.height: root.imageSourceSizeHeight - fillMode: Image.PreserveAspectFit + width: Style.sesIconSize + height: Style.sesIconSize mipmap: true diff --git a/src/gui/tray/SesButtonContents.qml b/src/gui/tray/SesButtonContents.qml new file mode 100644 index 0000000000000..d27b0316daba3 --- /dev/null +++ b/src/gui/tray/SesButtonContents.qml @@ -0,0 +1,73 @@ +/* + * Copyright (C) by Claudio Cambra + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import QtGraphicalEffects 1.15 + +import Style 1.0 + +RowLayout { + id: root + + property bool hovered: false + property string imageSourceHover: "" + property string imageSource: "" + property int imageSourceWidth: undefined + property int imageSourceHeight: undefined + property string text: "" + property var display + + property color textColor: palette.buttonText + property color textColorHovered: textColor + property alias font: buttonLabel.font + + height: parent.height + + EnforcedPlainTextLabel { + id: buttonLabel + + Layout.alignment: Qt.AlignVCenter + + text: root.text + + visible: root.text !== "" + + color: root.hovered ? root.textColorHovered : root.textColor + + elide: Text.ElideRight + } + + Image { + id: icon + + Layout.alignment: Qt.AlignVCenter + + source: root.hovered ? root.imageSourceHover : root.imageSource + + sourceSize { + width: root.imageSourceWidth + height: root.imageSourceHeight + } + + fillMode: Image.PreserveAspectFit + visible: root.display === Button.TextOnly ? false : root.hovered ? root.imageSourceHover !== "" : root.imageSource !== "" + + layer.enabled: true + layer.effect: ColorOverlay { + color: Style.sesWhite + } + } +} \ No newline at end of file diff --git a/src/gui/tray/SesCustomButton.qml b/src/gui/tray/SesCustomButton.qml new file mode 100644 index 0000000000000..0f61857f01a28 --- /dev/null +++ b/src/gui/tray/SesCustomButton.qml @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2022 by Oleksandr Zolotov + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import Style 1.0 + +Button { + id: root + + property string imageSourceHover: root.icon.source + property var iconItem: icon + + property string toolTipText: "" + + property color textColor: palette.buttonText + property color textColorHovered: textColor + + property alias contentsFont: root.font + + property alias bgColor: bgRectangle.color + property alias bgNormalColor: bgRectangle.normalColor + property alias bgHoverColor: bgRectangle.hoverColor + property alias bgNormalOpacity: bgRectangle.normalOpacity + property alias bgHoverOpacity: bgRectangle.hoverOpacity + + property int bgBorderWidth + property string bgBorderColor + + background: NCButtonBackground { + id: bgRectangle + hovered: root.hovered + height: 36 + border.width: root.bgBorderWidth + border.color: root.bgBorderColor + } + + leftPadding: root.text === "" ? Style.smallSpacing : 20 + rightPadding: root.text === "" ? Style.smallSpacing : 20 + + implicitHeight: 36 + implicitWidth: contentItem.implicitWidth + leftPadding + rightPadding + + hoverEnabled: true + + NCToolTip { + text: root.toolTipText + visible: root.toolTipText !== "" && root.hovered + } + + contentItem: SesButtonContents { + id: contents + display: root.display + hovered: root.hovered + imageSourceHover: root.imageSourceHover + imageSource: root.icon.source + imageSourceWidth: 12 + imageSourceHeight: 16 + text: root.text + textColor: root.textColor + textColorHovered: root.textColorHovered + } +} diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index fa106f96ccf2f..e81e655699ca3 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -4,7 +4,7 @@ import QtQuick.Layouts import Style -import com.nextcloud.desktopclient as NC +import com.ionos.hidrivenext.desktopclientas NC RowLayout { id: root @@ -20,18 +20,11 @@ RowLayout { NCBusyIndicator { id: syncIcon - property int size: Style.trayListItemIconSize * 0.6 - property int whiteSpace: (Style.trayListItemIconSize - size) - - Layout.preferredWidth: size - Layout.preferredHeight: size - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - Layout.topMargin: Style.trayHorizontalMargin - Layout.rightMargin: whiteSpace * (0.5 + Style.thumbnailImageSizeReduction) - Layout.bottomMargin: Style.trayHorizontalMargin - Layout.leftMargin: Style.trayHorizontalMargin + (whiteSpace * (0.5 - Style.thumbnailImageSizeReduction)) - + Layout.topMargin: 16 + Layout.rightMargin: 0 + Layout.bottomMargin: 16 + Layout.leftMargin: Style.sesActivityItemDistanceToFrame padding: 0 imageSource: syncStatus.syncIcon @@ -41,10 +34,11 @@ RowLayout { ColumnLayout { id: syncProgressLayout - Layout.alignment: Qt.AlignVCenter + Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter Layout.topMargin: 8 - Layout.rightMargin: Style.trayHorizontalMargin + Layout.rightMargin: Style.sesActivityItemDistanceToFrame Layout.bottomMargin: 8 + Layout.leftMargin: 0 Layout.fillWidth: true Layout.fillHeight: true @@ -55,8 +49,7 @@ RowLayout { text: syncStatus.syncStatusString verticalAlignment: Text.AlignVCenter - font.pixelSize: Style.topLinePixelSize - font.bold: true + font: root.font wrapMode: Text.Wrap } @@ -81,7 +74,8 @@ RowLayout { text: syncStatus.syncStatusDetailString visible: syncStatus.syncStatusDetailString !== "" - font.pixelSize: Style.subLinePixelSize + color: palette.midlight + font: root.font wrapMode: Text.Wrap } } @@ -94,11 +88,11 @@ RowLayout { text: qsTr("Sync now") padding: Style.smallSpacing + textColor: Style.adjustedCurrentUserHeaderColor + textColorHovered: Style.currentUserHeaderTextColor + bgColor: Style.currentUserHeaderColor - visible: !activityModel.hasSyncConflicts && - !syncStatus.syncing && - NC.UserModel.currentUser.hasLocalFolder && - NC.UserModel.currentUser.isConnected + visible: false // SES-4 removed enabled: visible onClicked: { if(!syncStatus.syncing) { @@ -111,6 +105,9 @@ RowLayout { Layout.rightMargin: Style.trayHorizontalMargin text: qsTr("Resolve conflicts") + textColor: Style.adjustedCurrentUserHeaderColor + textColorHovered: Style.currentUserHeaderTextColor + bgColor: Style.currentUserHeaderColor visible: activityModel.hasSyncConflicts && !syncStatus.syncing && diff --git a/src/gui/tray/TalkReplyTextField.qml b/src/gui/tray/TalkReplyTextField.qml index 40447957228ef..55a6d2099c83a 100644 --- a/src/gui/tray/TalkReplyTextField.qml +++ b/src/gui/tray/TalkReplyTextField.qml @@ -2,8 +2,8 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts -import com.nextcloud.desktopclient import Style +import com.ionos.hidrivenext.desktopclient TextField { id: replyMessageTextField diff --git a/src/gui/tray/TrayFoldersMenuButton.qml b/src/gui/tray/TrayFoldersMenuButton.qml index 060a167bd5e43..141170f9e5bd5 100644 --- a/src/gui/tray/TrayFoldersMenuButton.qml +++ b/src/gui/tray/TrayFoldersMenuButton.qml @@ -29,6 +29,11 @@ HeaderButton { property bool userHasGroupFolders: currentUser.groupFolders.length > 0 property color parentBackgroundColor: "transparent" + icon.source: Style.sesFilesIcon + icon.color: Style.sesIconColor + + text: qsTr("Files") + function openMenu() { foldersMenuLoader.openMenu() } @@ -70,23 +75,14 @@ HeaderButton { Item { id: rootContent - anchors.fill: parent - - Item { - id: contentContainer - anchors.centerIn: parent - - implicitWidth: openLocalFolderButtonCaretIconLoader.active ? openLocalFolderButtonIcon.width + openLocalFolderButtonCaretIconLoader.width : openLocalFolderButtonIcon.width - implicitHeight: openLocalFolderButtonIcon.height - Image { id: folderStateIndicator - visible: root.currentUser.hasLocalFolder + visible: root.currentUser.hasLocalFolder && false // SES-50 Hide Indicator till we have a proper implementation source: root.currentUser.isConnected ? Style.stateOnlineImageSource : Style.stateOfflineImageSource cache: false anchors.bottom: openLocalFolderButtonIcon.bottom - anchors.bottomMargin: Style.trayFoldersMenuButtonStateIndicatorBottomOffset + anchors.bottomMargin: -5 anchors.right: openLocalFolderButtonIcon.right sourceSize.width: Style.folderStateIndicatorSize sourceSize.height: Style.folderStateIndicatorSize @@ -96,11 +92,12 @@ HeaderButton { z: 1 Rectangle { - id: folderStateIndicatorBackground + id: folderStateIndicatorBackgroundMouseHover width: Style.folderStateIndicatorSize + Style.trayFolderStatusIndicatorSizeOffset height: width - color: root.parentBackgroundColor anchors.centerIn: parent + color: root.hovered ? Style.currentUserHeaderTextColor : "transparent" + opacity: Style.trayFolderStatusIndicatorMouseHoverOpacityFactor radius: width * Style.trayFolderStatusIndicatorRadiusFactor z: -1 } @@ -109,12 +106,15 @@ HeaderButton { Image { id: openLocalFolderButtonIcon - property int imageWidth: rootContent.width * Style.trayFoldersMenuButtonMainIconSizeFraction - property int imageHeight: rootContent.width * Style.trayFoldersMenuButtonMainIconSizeFraction + anchors.horizontalCenter: rootContent.horizontalCenter + anchors.top: rootContent.top + anchors.topMargin: 10 + property int imageWidth: root.icon.width + property int imageHeight: root.icon.height cache: true - source: "image://svgimage-custom-color/folder.svg/" + palette.windowText + source: root.icon.source sourceSize { width: imageWidth height: imageHeight @@ -123,9 +123,17 @@ HeaderButton { width: imageWidth height: imageHeight - anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenter: parent } + Text { + anchors.horizontalCenter: openLocalFolderButtonIcon.horizontalCenter + anchors.top: openLocalFolderButtonIcon.bottom + anchors.topMargin: 5 + text: root.text + font: root.font + color: Style.sesTrayFontColor + } Loader { id: openLocalFolderButtonCaretIconLoader @@ -153,9 +161,7 @@ HeaderButton { width: openLocalFolderButtonCaretIconLoader.imageWidth height: openLocalFolderButtonCaretIconLoader.imageHeight - } - } } Loader { diff --git a/src/gui/tray/TrayWindowAccountMenu.qml b/src/gui/tray/TrayWindowAccountMenu.qml new file mode 100644 index 0000000000000..2d7d2367e8747 --- /dev/null +++ b/src/gui/tray/TrayWindowAccountMenu.qml @@ -0,0 +1,285 @@ +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import QtGraphicalEffects 1.15 +import Qt.labs.platform 1.1 as NativeDialogs + +import "../" +import "../filedetails/" + +// Custom qml modules are in /theme (and included by resources.qrc) +import Style 1.0 + +import com.ionos.hidrivenext.desktopclient 1.0 + +Button { + id: currentAccountButton + + display: AbstractButton.IconOnly + flat: true + + Accessible.role: Accessible.ButtonMenu + Accessible.name: qsTr("Current account") + Accessible.onPressAction: currentAccountButton.clicked() + + property bool isHovered: currentAccountButton.hovered || currentAccountButton.visualFocus + property bool isActive: currentAccountButton.pressed + + background: Rectangle { + color: currentAccountButton.isActive ? Style.sesButtonPressed : + currentAccountButton.isHovered ? Style.sesAccountMenuHover : + accountMenu.visible? Style.sesSelectedColor : "transparent" + radius: Style.sesCornerRadius + } + + // We call open() instead of popup() because we want to position it + // exactly below the dropdown button, not the mouse + onClicked: { + syncPauseButton.text = Systray.syncIsPaused ? qsTr("Resume sync for all") : qsTr("Pause sync for all") + if (accountMenu.visible) { + accountMenu.close() + } else { + accountMenu.open() + } + } + + onVisibleChanged: { + // HACK: reload account Instantiator immediately by restting it - could be done better I guess + // see also id:accountMenu below + userLineInstantiator.active = false; + userLineInstantiator.active = true; + } + + Menu { + id: accountMenu + + // x coordinate grows towards the right + // y coordinate grows towards the bottom + x: (currentAccountButton.x + 2) + y: (currentAccountButton.y + Style.trayWindowHeaderHeight + 2) + + width: Style.sesAccountMenuWidth + height: Math.min(implicitHeight, maxMenuHeight) + closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape + + clip: true + + background: Rectangle { + border.color: Style.sesBorderColor + color: Style.sesWhite + radius: Style.sesCornerRadius + } + + contentItem: ScrollView { + id: accMenuScrollView + ScrollBar.horizontal.policy: ScrollBar.AlwaysOff + + data: WheelHandler { + target: accMenuScrollView.contentItem + } + ListView { + implicitHeight: contentHeight + model: accountMenu.contentModel + interactive: true + clip: true + currentIndex: accountMenu.currentIndex + } + } + + onClosed: { + // HACK: reload account Instantiator immediately by restting it - could be done better I guess + // see also onVisibleChanged above + userLineInstantiator.active = false; + userLineInstantiator.active = true; + } + + Instantiator { + id: userLineInstantiator + model: UserModel + delegate: UserLine { + onShowUserStatusSelector: { + userStatusDrawer.openUserStatusDrawer(model.index); + accountMenu.close(); + } + onClicked: UserModel.currentUserId = model.index; + } + onObjectAdded: accountMenu.insertItem(index, object) + onObjectRemoved: accountMenu.removeItem(object) + } + + Rectangle { + anchors.left: parent.left + anchors.right: parent.right + implicitHeight: 1 + color: Style.sesBorderColor + } + + AccountMenuItem{ + id: addAccountButton + icon.source: Style.sesDarkPlus + text: qsTr("Add account") + onClicked: UserModel.addAccount() + visible: Systray.enableAddAccount + } + + Rectangle { + anchors.left: parent.left + anchors.right: parent.right + implicitHeight: 1 + color: Style.sesBorderColor + } + + AccountMenuItem{ + id: syncPauseButton + onClicked: Systray.syncIsPaused = !Systray.syncIsPaused + icon.source: Systray.syncIsPaused ? Style.sesAccountResume : Style.sesAccountPause + } + + AccountMenuItem{ + id: settingsButton + text: qsTr("Settings") + onClicked: Systray.openSettings() + icon.source: Style.sesAccountSettings + } + + AccountMenuItem{ + id: exitButton + text: qsTr("Exit") + onClicked: Systray.shutdown() + icon.source: Style.sesAccountQuit + } + } + + RowLayout { + id: accountControlRowLayout + + height: Style.sesAccountButtonHeight + width: Style.sesAccountButtonWidth + spacing: 0 + + Image { + id: currentAccountAvatar + + Layout.leftMargin: Style.sesAccountButtonLeftMargin + verticalAlignment: Qt.AlignCenter + cache: false + source: Style.sesAvatar + Accessible.role: Accessible.Graphic + Accessible.name: qsTr("Current account avatar") + + Rectangle { + id: currentAccountStatusIndicatorBackground + // SES-50 Remove Inidcator + // visible: UserModel.currentUser.isConnected + // && UserModel.currentUser.serverHasUserStatus + visible: false + width: Style.accountAvatarStateIndicatorSize + + Style.trayFolderStatusIndicatorSizeOffset + height: width + anchors.bottom: currentAccountAvatar.bottom + anchors.right: currentAccountAvatar.right + anchors.bottomMargin: -5 + anchors.rightMargin: -5 + color: Style.currentUserHeaderColor + radius: width * Style.trayFolderStatusIndicatorRadiusFactor + } + + Rectangle { + id: currentAccountStatusIndicatorMouseHover + // SES-50 Remove Inidcator + // visible: UserModel.currentUser.isConnected + // && UserModel.currentUser.serverHasUserStatus + visible: false + width: Style.accountAvatarStateIndicatorSize + + Style.trayFolderStatusIndicatorSizeOffset + height: width + anchors.bottom: currentAccountAvatar.bottom + anchors.right: currentAccountAvatar.right + anchors.bottomMargin: -5 + anchors.rightMargin: -5 + color: currentAccountButton.hovered ? Style.sesHover : "transparent" + opacity: Style.trayFolderStatusIndicatorMouseHoverOpacityFactor + radius: width * Style.trayFolderStatusIndicatorRadiusFactor + } + + Image { + id: currentAccountStatusIndicator + // SES-50 Remove Inidcator + // visible: UserModel.currentUser.isConnected + // && UserModel.currentUser.serverHasUserStatus + visible: false + source: UserModel.currentUser.statusIcon + cache: false + x: currentAccountStatusIndicatorBackground.x + 1 + y: currentAccountStatusIndicatorBackground.y + 1 + sourceSize.width: Style.accountAvatarStateIndicatorSize + sourceSize.height: Style.accountAvatarStateIndicatorSize + + Accessible.role: Accessible.Indicator + Accessible.name: UserModel.desktopNotificationsAllowed ? qsTr("Current account status is online") : qsTr("Current account status is do not disturb") + } + } + + Column { + id: accountLabels + spacing: 0 + Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter + Layout.leftMargin: Style.sesSmallMargin + Layout.fillWidth: true + Layout.maximumWidth: parent.width + + EnforcedPlainTextLabel { + id: currentAccountUser + Layout.alignment: Qt.AlignLeft | Qt.AlignBottom + width: Style.sesAccountLabelWidth + text: UserModel.currentUser.name + elide: Text.ElideRight + color: Style.currentUserHeaderTextColor + font: root.font + } + + RowLayout { + id: currentUserStatus + visible: UserModel.currentUser.isConnected && + UserModel.currentUser.serverHasUserStatus + spacing: Style.accountLabelsSpacing + width: parent.width + + EnforcedPlainTextLabel { + id: emoji + visible: UserModel.currentUser.statusEmoji !== "" + width: Style.userStatusEmojiSize + text: UserModel.currentUser.statusEmoji + } + EnforcedPlainTextLabel { + id: message + Layout.alignment: Qt.AlignLeft | Qt.AlignBottom + Layout.fillWidth: true + visible: UserModel.currentUser.statusMessage !== "" + width: Style.currentAccountLabelWidth + text: UserModel.currentUser.statusMessage !== "" + ? UserModel.currentUser.statusMessage + : UserModel.currentUser.server + elide: Text.ElideRight + color: Style.currentUserHeaderTextColor + } + } + } + + ColorOverlay { + cached: true + color: Style.currentUserHeaderTextColor + width: source.width + height: source.height + Layout.rightMargin: Style.sesAccountButtonRightMargin + source: Image { + Layout.alignment: Qt.AlignRight + verticalAlignment: Qt.AlignCenter + source: Style.sesChevron + sourceSize.width: 12 + sourceSize.height: 7 + Accessible.role: Accessible.PopupMenu + Accessible.name: qsTr("Account switcher and settings menu") + } + } + } +} \ No newline at end of file diff --git a/src/gui/tray/TrayWindowHeaderBar.qml b/src/gui/tray/TrayWindowHeaderBar.qml new file mode 100644 index 0000000000000..e03af08bc67a6 --- /dev/null +++ b/src/gui/tray/TrayWindowHeaderBar.qml @@ -0,0 +1,171 @@ +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import QtGraphicalEffects 1.15 +import Qt.labs.platform 1.1 as NativeDialogs + +import "../" +import "../filedetails/" + +// Custom qml modules are in /theme (and included by resources.qrc) +import Style 1.0 + +import com.ionos.hidrivenext.desktopclient 1.0 + + +Rectangle { + + height: Style.trayWindowHeaderHeight + color: Style.sesWhite + radius: 0.0 + + RowLayout { + id: trayWindowHeaderLayout + + anchors.fill: parent + anchors.leftMargin: 20 + anchors.rightMargin: 20 + + TrayWindowAccountMenu{ + Layout.preferredWidth: Style.currentAccountButtonWidth + Layout.preferredHeight: Style.trayWindowHeaderHeight + } + + HeaderButton { + id: trayWindowWebsiteButton + + icon.source: Style.sesWebsiteIcon + icon.color: Style.sesIconColor + onClicked: UserModel.openCurrentAccountServer() + + text: qsTr("Website") + + Accessible.role: Accessible.Button + Accessible.name: qsTr("Open Nextcloud in browser") + Accessible.onPressAction: trayWindowWebsiteButton.clicked() + + Layout.alignment: Qt.AlignRight + Layout.preferredWidth: Style.trayWindowHeaderHeight + Layout.preferredHeight: Style.trayWindowHeaderHeight + } + + TrayFoldersMenuButton { + id: openLocalFolderButton + + visible: currentUser.hasLocalFolder + currentUser: UserModel.currentUser + + + onClicked: openLocalFolderButton.userHasGroupFolders ? openLocalFolderButton.toggleMenuOpen() : UserModel.openCurrentAccountLocalFolder() + + onFolderEntryTriggered: isGroupFolder ? UserModel.openCurrentAccountFolderFromTrayInfo(fullFolderPath) : UserModel.openCurrentAccountLocalFolder() + + Accessible.role: Accessible.Graphic + Accessible.name: qsTr("Open local or group folders") + Accessible.onPressAction: openLocalFolderButton.userHasGroupFolders ? openLocalFolderButton.toggleMenuOpen() : UserModel.openCurrentAccountLocalFolder() + + Layout.alignment: Qt.AlignRight + Layout.preferredWidth: Style.trayWindowHeaderHeight + Layout.preferredHeight: Style.trayWindowHeaderHeight + } + + HeaderButton { + id: trayWindowTalkButton + + visible: false //SES-4 removed + icon.source: "qrc:///client/theme/white/talk-app.svg" + icon.color: Style.currentUserHeaderTextColor + onClicked: UserModel.openCurrentAccountTalk() + + Accessible.role: Accessible.Button + Accessible.name: qsTr("Open Nextcloud Talk in browser") + Accessible.onPressAction: trayWindowTalkButton.clicked() + + Layout.alignment: Qt.AlignRight + Layout.preferredWidth: Style.trayWindowHeaderHeight + Layout.preferredHeight: Style.trayWindowHeaderHeight + + } + + HeaderButton { + id: trayWindowAppsButton + icon.source: "qrc:///client/theme/white/more-apps.svg" + icon.color: Style.currentUserHeaderTextColor + + visible: false //SES-4 removed + + onClicked: { + if(appsMenuListView.count <= 0) { + UserModel.openCurrentAccountServer() + } else if (appsMenu.visible) { + appsMenu.close() + } else { + appsMenu.open() + } + } + + Accessible.role: Accessible.ButtonMenu + Accessible.name: qsTr("More apps") + Accessible.onPressAction: trayWindowAppsButton.clicked() + + Menu { + id: appsMenu + x: Style.trayWindowMenuOffsetX + y: (trayWindowAppsButton.y + trayWindowAppsButton.height + Style.trayWindowMenuOffsetY) + width: Style.trayWindowWidth * Style.trayWindowMenuWidthFactor + height: implicitHeight + y > Style.trayWindowHeight ? Style.trayWindowHeight - y : implicitHeight + closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape + + background: Rectangle { + border.color: Style.sesBorderColor + color: Style.sesWhite + radius: 2 + } + + contentItem: ScrollView { + id: appsMenuScrollView + ScrollBar.horizontal.policy: ScrollBar.AlwaysOff + + data: WheelHandler { + target: appsMenuScrollView.contentItem + } + ListView { + id: appsMenuListView + implicitHeight: contentHeight + model: UserAppsModel + interactive: true + clip: true + currentIndex: appsMenu.currentIndex + delegate: MenuItem { + id: appEntry + anchors.left: parent.left + anchors.right: parent.right + + text: model.appName + font.pixelSize: Style.topLinePixelSize + icon.source: model.appIconUrl + icon.color: Style.ncTextColor + onTriggered: UserAppsModel.openAppUrl(appUrl) + hoverEnabled: true + + background: Item { + height: parent.height + width: parent.width + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: parent.parent.hovered || parent.parent.visualFocus ? Style.sesHover : "transparent" + } + } + + Accessible.role: Accessible.MenuItem + Accessible.name: qsTr("Open %1 in browser").arg(model.appName) + Accessible.onPressAction: appEntry.triggered() + } + } + } + } + } + } +} // Rectangle trayWindowHeaderBackground diff --git a/src/gui/tray/UnifiedSearchInputContainer.qml b/src/gui/tray/UnifiedSearchInputContainer.qml index 4ce71913337aa..1514d9623297f 100644 --- a/src/gui/tray/UnifiedSearchInputContainer.qml +++ b/src/gui/tray/UnifiedSearchInputContainer.qml @@ -18,7 +18,7 @@ import QtQuick.Controls import Qt5Compat.GraphicalEffects import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient TextField { id: root diff --git a/src/gui/tray/UnifiedSearchResultListItem.qml b/src/gui/tray/UnifiedSearchResultListItem.qml index 97092b23c6f00..e11bd24e07f40 100644 --- a/src/gui/tray/UnifiedSearchResultListItem.qml +++ b/src/gui/tray/UnifiedSearchResultListItem.qml @@ -16,7 +16,7 @@ import QtQml import QtQuick import QtQuick.Controls import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient MouseArea { id: unifiedSearchResultMouseArea diff --git a/src/gui/tray/UnifiedSearchResultSectionItem.qml b/src/gui/tray/UnifiedSearchResultSectionItem.qml index 31acaf202d279..a05bf5500a5f3 100644 --- a/src/gui/tray/UnifiedSearchResultSectionItem.qml +++ b/src/gui/tray/UnifiedSearchResultSectionItem.qml @@ -17,7 +17,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient EnforcedPlainTextLabel { required property string section diff --git a/src/gui/tray/UserLine.qml b/src/gui/tray/UserLine.qml index ea52fb09c2d21..917da63b6c5fc 100644 --- a/src/gui/tray/UserLine.qml +++ b/src/gui/tray/UserLine.qml @@ -19,61 +19,46 @@ import QtQuick.Layouts // Custom qml modules are in /theme (and included by resources.qrc) import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient AbstractButton { id: userLine + property bool isHovered: userLine.hovered || userLine.visualFocus + property bool isActive: userLine.pressed + signal showUserStatusSelector(int id) Accessible.role: Accessible.MenuItem Accessible.name: qsTr("Switch to account") + " " + model.name - height: Style.trayWindowHeaderHeight + height: Style.sesAccountMenuHeight + + leftPadding: Style.sesMediumMargin + topPadding: Style.sesSmallMargin + bottomPadding: Style.sesSmallMargin + + background: Rectangle { + radius: 0 + anchors.fill: parent + anchors.margins: 1 + color: userLine.isHovered && !userMoreButton.isHovered ? Style.sesAccountMenuHover : "transparent" + } contentItem: RowLayout { id: userLineLayout - spacing: Style.userLineSpacing + spacing: Style.sesSmallMargin Image { id: accountAvatar - Layout.leftMargin: Style.accountIconsMenuMargin verticalAlignment: Qt.AlignCenter cache: false - source: model.avatar !== "" ? model.avatar : Style.darkMode ? "image://avatars/fallbackWhite" : "image://avatars/fallbackBlack" - Layout.preferredHeight: Style.accountAvatarSize - Layout.preferredWidth: Style.accountAvatarSize - - Rectangle { - id: accountStatusIndicatorBackground - visible: model.isConnected && model.serverHasUserStatus - width: accountStatusIndicator.sourceSize.width + 2 - height: width - color: "white" - anchors.bottom: accountAvatar.bottom - anchors.right: accountAvatar.right - radius: width * Style.trayFolderStatusIndicatorRadiusFactor - } - - Image { - id: accountStatusIndicator - visible: model.isConnected && model.serverHasUserStatus - source: model.statusIcon - cache: false - x: accountStatusIndicatorBackground.x + 1 - y: accountStatusIndicatorBackground.y + 1 - sourceSize.width: Style.accountAvatarStateIndicatorSize - sourceSize.height: Style.accountAvatarStateIndicatorSize - - Accessible.role: Accessible.Indicator - Accessible.name: model.desktopNotificationsAllowed ? qsTr("Current account status is online") : qsTr("Current account status is do not disturb") - } + source: Style.sesAvatar } ColumnLayout { id: accountLabels - Layout.leftMargin: Style.accountLabelsSpacing Layout.fillWidth: true Layout.fillHeight: true @@ -84,8 +69,7 @@ AbstractButton { verticalAlignment: Text.AlignBottom text: name elide: Text.ElideRight - font.pixelSize: Style.topLinePixelSize - font.bold: true + font: root.font } RowLayout { @@ -109,86 +93,131 @@ AbstractButton { visible: model.statusMessage !== "" text: statusMessage elide: Text.ElideRight - font.pixelSize: Style.subLinePixelSize + font: root.font leftPadding: Style.accountLabelsSpacing } } - - EnforcedPlainTextLabel { - id: accountServer - Layout.fillWidth: true - Layout.alignment: Qt.AlignLeft | Qt.AlignTop - verticalAlignment: Text.AlignTop - text: server - elide: Text.ElideRight - font.pixelSize: Style.subLinePixelSize - } } Button { id: userMoreButton Layout.preferredWidth: Style.headerButtonIconSize - Layout.fillHeight: true + Layout.preferredHeight: Layout.preferredWidth + Layout.rightMargin: Style.sesMediumMargin flat: true + property bool isHovered: userMoreButton.hovered || userMoreButton.visualFocus + property bool isActive: userMoreButton.pressed || userMoreButtonMenu.visible + + icon.source: "qrc:///client/theme/more.svg" + icon.color: userMoreButton.isActive || userMoreButton.isHovered ? Style.sesWhite : Style.sesIconDarkColor + Accessible.role: Accessible.ButtonMenu Accessible.name: qsTr("Account actions") Accessible.onPressAction: userMoreButtonMouseArea.clicked() onClicked: userMoreButtonMenu.visible ? userMoreButtonMenu.close() : userMoreButtonMenu.popup() - - icon.source: "image://svgimage-custom-color/more.svg/" + palette.windowText + background: Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: userMoreButton.isActive ? Style.sesActionPressed : userMoreButton.isHovered ? Style.sesActionHover : "transparent" + radius: width / 2 + } AutoSizingMenu { id: userMoreButtonMenu closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape + background: Rectangle { + radius: Style.sesCornerRadius + border.color: Style.sesBorderColor + } + MenuItem { - visible: model.isConnected && model.serverHasUserStatus + visible: false height: visible ? implicitHeight : 0 text: qsTr("Set status") - font.pixelSize: Style.topLinePixelSize + font: root.font + palette.windowText: Style.ncTextColor hoverEnabled: true onClicked: showUserStatusSelector(index) } MenuItem { + id: logInOutButton + + property bool isHovered: logInOutButton.hovered || logInOutButton.visualFocus + property bool isActive: logInOutButton.pressed + + icon.source: Style.sesLogout + icon.color: Style.sesIconDarkColor + leftPadding: Style.sesMediumMargin + topPadding: Style.sesAccountMenuItemPadding + bottomPadding: Style.sesAccountMenuItemPadding + spacing: Style.sesSmallMargin text: model.isConnected ? qsTr("Log out") : qsTr("Log in") - font.pixelSize: Style.topLinePixelSize + font: root.font + palette.windowText: Style.ncTextColor hoverEnabled: true onClicked: { model.isConnected ? UserModel.logout(index) : UserModel.login(index) accountMenu.close() } - Accessible.role: Accessible.Button - Accessible.name: model.isConnected ? qsTr("Log out") : qsTr("Log in") - - onPressed: { - if (model.isConnected) { - UserModel.logout(index) - } else { - UserModel.login(index) + background: Item { + height: parent.height + width: parent.menu.width + Rectangle { + radius: 0 + anchors.fill: parent + anchors.margins: 1 + color: logInOutButton.isActive ? Style.sesButtonPressed : + logInOutButton.isHovered ? Style.sesAccountMenuHover : "transparent" } - accountMenu.close() } - } + + Accessible.role: Accessible.MenuItem + Accessible.name: model.isConnected ? qsTr("Log out") : qsTr("Log in") + } MenuItem { + + property bool isHovered: removeAccountButton.hovered || removeAccountButton.visualFocus + property bool isActive: removeAccountButton.pressed + id: removeAccountButton + icon.source: Style.sesDelete + icon.color: Style.sesIconDarkColor + leftPadding: Style.sesMediumMargin + topPadding: Style.sesAccountMenuItemPadding + bottomPadding: Style.sesAccountMenuItemPadding + spacing: Style.sesSmallMargin text: qsTr("Remove account") - font.pixelSize: Style.topLinePixelSize + font: root.font + palette.windowText: Style.ncTextColor hoverEnabled: true onClicked: { UserModel.removeAccount(index) accountMenu.close() } - Accessible.role: Accessible.Button + background: Item { + height: parent.height + width: parent.menu.width + Rectangle { + radius: 0 + anchors.fill: parent + anchors.margins: 1 + color: removeAccountButton.isActive ? Style.sesButtonPressed : + removeAccountButton.isHovered ? Style.sesAccountMenuHover : "transparent" + } + } + + Accessible.role: Accessible.MenuItem Accessible.name: text Accessible.onPressAction: removeAccountButton.clicked() } } } } -} // MenuItem userLine +} // MenuItem userLine \ No newline at end of file diff --git a/src/gui/tray/Window.qml b/src/gui/tray/Window.qml new file mode 100644 index 0000000000000..5ccd8ad933121 --- /dev/null +++ b/src/gui/tray/Window.qml @@ -0,0 +1,497 @@ +/* + * Copyright (C) 2020 by Dominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import QtGraphicalEffects 1.15 +import Qt.labs.platform 1.1 as NativeDialogs + +import "../" +import "../filedetails/" +import "../SesComponents/" + +// Custom qml modules are in /theme (and included by resources.qrc) +import Style 1.0 + +import com.ionos.hidrivenext.desktopclient 1.0 + +ApplicationWindow { + id: trayWindow + + title: Systray.windowTitle + // If the main dialog is displayed as a regular window we want it to be quadratic + width: Systray.useNormalWindow ? Style.trayWindowHeight : Style.sesTrayWindowWidth + height: Style.trayWindowHeight + color: "transparent" + flags: Systray.useNormalWindow ? Qt.Window : Qt.Dialog | Qt.FramelessWindowHint + + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontBoldWeight + + // TODO: Rather than setting all these palette colours manually, + // create a custom style and do it for all components globally + palette { + text: Style.ncTextColor + windowText: Style.ncTextColor + buttonText: Style.ncTextColor + brightText: Style.ncTextBrightColor + highlight: Style.lightHover + highlightedText: Style.ncTextColor + light: Style.lightHover + midlight: Style.ncSecondaryTextColor + mid: Style.darkerHover + dark: Style.menuBorder + button: Style.buttonBackgroundColor + window: Style.backgroundColor + base: Style.backgroundColor + toolTipBase: Style.backgroundColor + toolTipText: Style.ncTextColor + } + + readonly property int maxMenuHeight: Style.trayWindowHeight - Style.trayWindowHeaderHeight - 2 * Style.trayWindowBorderWidth + + Component.onCompleted: Systray.forceWindowInit(trayWindow) + + // Close tray window when focus is lost (e.g. click somewhere else on the screen) + onActiveChanged: { + if (!Systray.useNormalWindow && !active) { + hide(); + Systray.isOpen = false; + } + } + + onClosing: Systray.isOpen = false + + onVisibleChanged: syncStatus.model.load() + + background: Rectangle { + radius: 0.0 + border.width: Style.trayWindowBorderWidth + border.color: palette.dark + color: palette.window + } + + Connections { + target: UserModel + function onCurrentUserChanged() { + accountMenu.close(); + syncStatus.model.load(); + } + } + + Component { + id: errorMessageDialog + + NativeDialogs.MessageDialog { + id: dialog + + title: Systray.windowTitle + + onAccepted: destroy() + onRejected: destroy() + } + } + + Connections { + target: Systray + + function onIsOpenChanged() { + userStatusDrawer.close() + fileDetailsDrawer.close(); + + if(Systray.isOpen) { + accountMenu.close(); + appsMenu.close(); + openLocalFolderButton.closeMenu() + } + } + + function onShowErrorMessageDialog(error) { + var newErrorDialog = errorMessageDialog.createObject(trayWindow) + newErrorDialog.text = error + newErrorDialog.open() + } + + function onShowFileDetails(accountState, localPath, fileDetailsPage) { + fileDetailsDrawer.openFileDetails(accountState, localPath, fileDetailsPage); + } + } + + OpacityMask { + anchors.fill: parent + anchors.margins: Style.trayWindowBorderWidth + source: ShaderEffectSource { + sourceItem: trayWindowMainItem + hideSource: true + } + maskSource: Rectangle { + width: trayWindow.width + height: trayWindow.height + radius: 0.0 + } + } + + Drawer { + id: userStatusDrawer + width: parent.width + height: parent.height - Style.trayDrawerMargin + padding: 0 + edge: Qt.BottomEdge + modal: true + visible: false + + background: Rectangle { + radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius + border.width: Style.trayWindowBorderWidth + border.color: palette.dark + color: "red"//palette.window + } + + property int userIndex: 0 + + function openUserStatusDrawer(index) { + console.log(`About to show dialog for user with index ${index}`); + userIndex = index; + open(); + } + + Loader { + id: userStatusContents + anchors.fill: parent + active: userStatusDrawer.visible + sourceComponent: UserStatusSelectorPage { + anchors.fill: parent + userIndex: userStatusDrawer.userIndex + onFinished: userStatusDrawer.close() + } + } + } + + Drawer { + id: fileDetailsDrawer + width: parent.width - Style.trayDrawerMargin + height: parent.height + padding: 0 + edge: Qt.RightEdge + modal: true + visible: false + clip: true + + background: Rectangle { + radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius + border.width: Style.trayWindowBorderWidth + border.color: palette.dark + color: palette.window + } + + property var folderAccountState: ({}) + property string fileLocalPath: "" + property var pageToShow: Systray.FileDetailsPage.Activity + + function openFileDetails(accountState, localPath, fileDetailsPage) { + console.log(`About to show file details view in tray for ${localPath}`); + folderAccountState = accountState; + fileLocalPath = localPath; + pageToShow = fileDetailsPage; + + if(!opened) { + open(); + } + } + + Loader { + id: fileDetailsContents + anchors.fill: parent + active: fileDetailsDrawer.visible + onActiveChanged: { + if (active) { + Systray.showFileDetailsPage(fileDetailsDrawer.fileLocalPath, + fileDetailsDrawer.pageToShow); + } + } + sourceComponent: FileDetailsView { + id: fileDetails + + width: parent.width + height: parent.height + + backgroundsVisible: false + accentColor: Style.currentUserHeaderColor + accountState: fileDetailsDrawer.folderAccountState + localPath: fileDetailsDrawer.fileLocalPath + showCloseButton: true + + onCloseButtonClicked: fileDetailsDrawer.close() + } + } + } + + Item { + id: trayWindowMainItem + + property bool isUnifiedSearchActive: unifiedSearchResultsListViewSkeletonLoader.active + || unifiedSearchResultNothingFound.visible + || unifiedSearchResultsErrorLabel.visible + || unifiedSearchResultsListView.visible + + anchors.fill: parent + anchors.margins: Style.trayWindowBorderWidth + clip: true + + Accessible.role: Accessible.Grouping + Accessible.name: qsTr("Nextcloud desktop main dialog") + + HeaderLogo { + id: trayWindowLogoHeaderBackground + height: Style.sesHeaderLogoHeigth + width: parent.width + } + + SesTrayHeader { + id: trayWindowHeaderBackground + anchors.left: trayWindowLogoHeaderBackground.left + anchors.right: trayWindowLogoHeaderBackground.right + anchors.top: trayWindowLogoHeaderBackground.bottom + anchors.topMargin: Style.sesHeaderTopMargin + } + + Rectangle { + anchors.left: parent.left + anchors.right: parent.right + anchors.top: trayWindowHeaderBackground.bottom + anchors.topMargin: Style.sesHeaderTopMargin + implicitHeight: 1 + color: Style.sesBorderColor + } + + UnifiedSearchInputContainer { + id: trayWindowUnifiedSearchInputContainer + height: 0 + visible: false //SES-4 removed + + anchors { + top: trayWindowHeaderBackground.bottom + left: trayWindowMainItem.left + right: trayWindowMainItem.right + + topMargin: Style.trayHorizontalMargin + controlRoot.padding + leftMargin: Style.trayHorizontalMargin + controlRoot.padding + rightMargin: Style.trayHorizontalMargin + controlRoot.padding + } + + text: UserModel.currentUser.unifiedSearchResultsListModel.searchTerm + readOnly: !UserModel.currentUser.isConnected || UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId + isSearchInProgress: UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress + onTextEdited: { UserModel.currentUser.unifiedSearchResultsListModel.searchTerm = trayWindowUnifiedSearchInputContainer.text } + onClearText: { UserModel.currentUser.unifiedSearchResultsListModel.searchTerm = "" } + } + + SesErrorBox { + id: unifiedSearchResultsErrorLabel + visible: UserModel.currentUser.unifiedSearchResultsListModel.errorString && + !unifiedSearchResultsListView.visible && + !UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress && + !UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId + text: UserModel.currentUser.unifiedSearchResultsListModel.errorString + anchors.top: trayWindowUnifiedSearchInputContainer.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + anchors.margins: Style.trayHorizontalMargin + } + + UnifiedSearchResultNothingFound { + id: unifiedSearchResultNothingFound + + anchors.top: trayWindowUnifiedSearchInputContainer.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + anchors.topMargin: Style.trayHorizontalMargin + + text: UserModel.currentUser.unifiedSearchResultsListModel.searchTerm + + property bool isSearchRunning: UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress + property bool waitingForSearchTermEditEnd: UserModel.currentUser.unifiedSearchResultsListModel.waitingForSearchTermEditEnd + property bool isSearchResultsEmpty: unifiedSearchResultsListView.count === 0 + property bool nothingFound: text && isSearchResultsEmpty && !UserModel.currentUser.unifiedSearchResultsListModel.errorString + + visible: !isSearchRunning && !waitingForSearchTermEditEnd && nothingFound + } + + Loader { + id: unifiedSearchResultsListViewSkeletonLoader + + anchors.top: trayWindowUnifiedSearchInputContainer.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + anchors.bottom: trayWindowMainItem.bottom + anchors.margins: controlRoot.padding + + active: !unifiedSearchResultNothingFound.visible && + !unifiedSearchResultsListView.visible && + !UserModel.currentUser.unifiedSearchResultsListModel.errorString && + UserModel.currentUser.unifiedSearchResultsListModel.searchTerm + + sourceComponent: UnifiedSearchResultItemSkeletonContainer { + anchors.fill: parent + spacing: unifiedSearchResultsListView.spacing + animationRectangleWidth: trayWindow.width + } + } + + ScrollView { + id: controlRoot + contentWidth: availableWidth + + ScrollBar.horizontal.policy: ScrollBar.AlwaysOff + + data: WheelHandler { + target: controlRoot.contentItem + } + visible: unifiedSearchResultsListView.count > 0 + + anchors.top: trayWindowUnifiedSearchInputContainer.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + anchors.bottom: trayWindowMainItem.bottom + + ListView { + id: unifiedSearchResultsListView + spacing: 4 + clip: true + + keyNavigationEnabled: true + + reuseItems: true + + Accessible.role: Accessible.List + Accessible.name: qsTr("Unified search results list") + + model: UserModel.currentUser.unifiedSearchResultsListModel + + delegate: UnifiedSearchResultListItem { + width: unifiedSearchResultsListView.width + isSearchInProgress: unifiedSearchResultsListView.model.isSearchInProgress + currentFetchMoreInProgressProviderId: unifiedSearchResultsListView.model.currentFetchMoreInProgressProviderId + fetchMoreTriggerClicked: unifiedSearchResultsListView.model.fetchMoreTriggerClicked + resultClicked: unifiedSearchResultsListView.model.resultClicked + ListView.onPooled: isPooled = true + ListView.onReused: isPooled = false + } + + section.property: "providerName" + section.criteria: ViewSection.FullString + section.delegate: UnifiedSearchResultSectionItem { + width: unifiedSearchResultsListView.width + } + } + } + + SyncStatus { + id: syncStatus + + visible: !trayWindowMainItem.isUnifiedSearchActive + + anchors.top: trayWindowUnifiedSearchInputContainer.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + } + + Loader { + id: newActivitiesButtonLoader + + anchors.top: activityList.top + anchors.topMargin: 5 + anchors.horizontalCenter: activityList.horizontalCenter + + width: Style.newActivitiesButtonWidth + height: Style.newActivitiesButtonHeight + + z: 1 + + active: false + + sourceComponent: CustomButton { + id: newActivitiesButton + hoverEnabled: true + padding: Style.smallSpacing + + textColor: Style.currentUserHeaderTextColor + textColorHovered: Style.currentUserHeaderTextColor + bgNormalColor: Qt.lighter(bgHoverColor, 1.25) + bgHoverColor: Style.currentUserHeaderColor + bgNormalOpacity: Style.newActivitiesBgNormalOpacity + bgHoverOpacity: Style.newActivitiesBgHoverOpacity + + anchors.fill: parent + + text: qsTr("New activities") + + icon.source: "image://svgimage-custom-color/expand-less-black.svg" + "/" + Style.currentUserHeaderTextColor + icon.width: Style.activityLabelBaseWidth + icon.height: Style.activityLabelBaseWidth + + onClicked: { + activityList.scrollToTop(); + newActivitiesButtonLoader.active = false + } + + Timer { + id: newActivitiesButtonDisappearTimer + interval: Style.newActivityButtonDisappearTimeout + running: newActivitiesButtonLoader.active && !newActivitiesButton.hovered + repeat: false + onTriggered: fadeoutActivitiesButtonDisappear.running = true + } + + OpacityAnimator { + id: fadeoutActivitiesButtonDisappear + target: newActivitiesButton; + from: 1; + to: 0; + duration: Style.newActivityButtonDisappearFadeTimeout + loops: 1 + running: false + onFinished: newActivitiesButtonLoader.active = false + } + } + } + + ActivityList { + id: activityList + visible: !trayWindowMainItem.isUnifiedSearchActive + anchors.top: syncStatus.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + anchors.bottom: trayWindowMainItem.bottom + + activeFocusOnTab: true + model: activityModel + onOpenFile: Qt.openUrlExternally(filePath); + onActivityItemClicked: { + model.slotTriggerDefaultAction(index) + } + Connections { + target: activityModel + onInteractiveActivityReceived: { + if (!activityList.atYBeginning) { + newActivitiesButtonLoader.active = true; + } + } + } + } + } // Item trayWindowMainItem +} diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp index a5e7be3de78c4..eb502a9a15b19 100644 --- a/src/gui/tray/activitylistmodel.cpp +++ b/src/gui/tray/activitylistmodel.cpp @@ -26,6 +26,8 @@ #include "activitydata.h" #include "systray.h" +#include "ionostheme.h" + #include #include #include @@ -225,17 +227,19 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const }; const auto generateIconPath = [&]() { - auto colorIconPath = QStringLiteral("image://svgimage-custom-color/%1"); + auto colorIconPath = QStringLiteral("qrc:///client/theme/ses/"); if (a._type == Activity::NotificationType && !a._talkNotificationData.userAvatar.isEmpty()) { return QStringLiteral("image://svgimage-custom-color/talk-bordered.svg"); } else if (a._type == Activity::SyncResultType) { - return colorIconPath.arg("state-error.svg"); + colorIconPath.append("ses-snackBarErrorIcon.svg"); + return colorIconPath; } else if (a._type == Activity::SyncFileItemType) { if (a._syncFileItemStatus == SyncFileItem::NormalError || a._syncFileItemStatus == SyncFileItem::FatalError || a._syncFileItemStatus == SyncFileItem::DetailError || a._syncFileItemStatus == SyncFileItem::BlacklistedError) { - return colorIconPath.arg("state-error.svg"); + colorIconPath.append("ses-snackBarErrorIcon.svg"); + return colorIconPath; } else if (a._syncFileItemStatus == SyncFileItem::SoftError || a._syncFileItemStatus == SyncFileItem::Conflict || a._syncFileItemStatus == SyncFileItem::Restoration @@ -243,17 +247,19 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const || a._syncFileItemStatus == SyncFileItem::FileNameInvalid || a._syncFileItemStatus == SyncFileItem::FileNameInvalidOnServer || a._syncFileItemStatus == SyncFileItem::FileNameClash) { - return colorIconPath.arg("state-warning.svg"); + colorIconPath.append("ses-warning.svg"); + return colorIconPath; } else if (a._syncFileItemStatus == SyncFileItem::FileIgnored) { - return colorIconPath.arg("state-info.svg"); + colorIconPath.append("ses-info.svg"); + return colorIconPath; } else { // File sync successful if (a._fileAction == "file_created") { - return a._previews.empty() ? colorIconPath.arg("add.svg") : colorIconPath.arg("add-bordered.svg"); + return IonosTheme::plusIcon(); } else if (a._fileAction == "file_deleted") { - return a._previews.empty() ? colorIconPath.arg("delete.svg") : colorIconPath.arg("delete-bordered.svg"); + return IonosTheme::deleteIcon(); } else { - return a._previews.empty() ? colorIconPath.arg("change.svg") : colorIconPath.arg("change-bordered.svg"); + return IonosTheme::refreshIcon(); } } } else { diff --git a/src/gui/tray/asyncimageresponse.h b/src/gui/tray/asyncimageresponse.h index 9d2d60003f19d..e6176618270fb 100644 --- a/src/gui/tray/asyncimageresponse.h +++ b/src/gui/tray/asyncimageresponse.h @@ -16,7 +16,7 @@ #include #include -#include +#include "sesFileIconProvider.h" class AsyncImageResponse : public QQuickImageResponse { @@ -35,6 +35,6 @@ private slots: QStringList _imagePaths; QSize _requestedImageSize; QColor _svgRecolor; - QFileIconProvider _fileIconProvider; + SesFileIconProvider _fileIconProvider; int _index = 0; }; diff --git a/src/gui/tray/usermodel.cpp b/src/gui/tray/usermodel.cpp index 5316528c76432..d367825534289 100644 --- a/src/gui/tray/usermodel.cpp +++ b/src/gui/tray/usermodel.cpp @@ -18,6 +18,8 @@ #include "tray/unifiedsearchresultslistmodel.h" #include "tray/talkreply.h" #include "userstatusconnector.h" +#include "thumbnailjob.h" +#include "buttonstyle.h" #include #include @@ -25,6 +27,10 @@ #include #include #include +#include +#include +#include +#include // time span in milliseconds which has to be between two // refreshes of the notifications @@ -1484,15 +1490,18 @@ void UserModel::removeAccount(const int id) } QMessageBox messageBox(QMessageBox::Question, - tr("Confirm Account Removal"), + tr("Confirm Account Removal"), tr("

Do you really want to remove the connection to the account %1?

" "

Note: This will not delete any files.

") - .arg(_users[id]->name()), - QMessageBox::NoButton); - const auto * const yesButton = messageBox.addButton(tr("Remove connection"), QMessageBox::YesRole); + .arg(_users[id]->name())); + messageBox.addButton(tr("Cancel"), QMessageBox::NoRole); + QPushButton *yesButton = messageBox.addButton(tr("Remove connection"), QMessageBox::YesRole); + + styleMessageBox(messageBox, yesButton); messageBox.exec(); + if (messageBox.clickedButton() != yesButton) { return; } @@ -1641,6 +1650,38 @@ int UserModel::findUserIdForAccount(AccountState *account) const const auto id = std::distance(std::cbegin(_users), it); return id; } + +void UserModel::styleMessageBox(QMessageBox &messageBox, QPushButton *yesButton){ + + messageBox.setStyleSheet(QStringLiteral("QMessageBox { background-color: %1; } QMessageBox QLabel { %2 } ").arg( + IonosTheme::dialogBackgroundColor(), + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + + messageBox.setIconPixmap(QPixmap(IonosTheme::questionCircleIcon())); + + yesButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + + QDialogButtonBox *buttonBox = messageBox.findChild(); + buttonBox->setLayoutDirection(Qt::RightToLeft); + buttonBox->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + + QHBoxLayout *buttonBoxLayout = messageBox.findChild(); + buttonBoxLayout->setSpacing(8); +#ifdef Q_OS_MACOS + buttonBoxLayout->setSpacing(24); +#endif + + QLabel *label = messageBox.findChild("qt_msgbox_label"); + label->setMinimumSize(529, 49); + label->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); +} /*-------------------------------------------------------------------------------------*/ class ImageResponse : public QQuickImageResponse diff --git a/src/gui/tray/usermodel.h b/src/gui/tray/usermodel.h index e4e40e1671e96..ccdf93f970e99 100644 --- a/src/gui/tray/usermodel.h +++ b/src/gui/tray/usermodel.h @@ -7,6 +7,7 @@ #include #include #include +#include #include "accountfwd.h" #include "accountmanager.h" @@ -278,6 +279,7 @@ public slots: bool _init = true; void buildUserList(); + void styleMessageBox(QMessageBox &messageBox, QPushButton *yesButton); }; class ImageProvider : public QQuickAsyncImageProvider From a065889d064d0d1e5a99be6fed6aa828a0cf1660 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 15 Jan 2025 08:40:31 +0100 Subject: [PATCH 009/359] Fixed Tray by adjusting import --- .../Services/ClientCommunicationService.swift | 2 +- .../Services/FPUIExtensionService.swift | 2 +- .../DocumentActionViewController.swift | 6 +-- .../FileProviderUIExt/Info.plist | 6 +-- src/gui/ConflictDelegate.qml | 2 +- src/gui/EmojiPicker.qml | 2 +- src/gui/ResolveConflictsDialog.qml | 2 +- src/gui/SesComponents/SesTrayHeader.qml | 2 +- src/gui/UserStatusSelector.qml | 2 +- src/gui/UserStatusSelectorPage.qml | 2 +- src/gui/filedetails/FileActivityView.qml | 2 +- src/gui/filedetails/FileDetailsPage.qml | 2 +- src/gui/filedetails/FileDetailsView.qml | 2 +- src/gui/filedetails/FileDetailsWindow.qml | 2 +- src/gui/filedetails/NCInputDateField.qml | 2 +- src/gui/filedetails/NCInputTextArea.qml | 2 +- src/gui/filedetails/NCInputTextField.qml | 2 +- src/gui/filedetails/NCTabButton.qml | 2 +- src/gui/filedetails/ShareDelegate.qml | 2 +- src/gui/filedetails/ShareDetailsPage.qml | 2 +- src/gui/filedetails/ShareView.qml | 2 +- src/gui/filedetails/ShareeDelegate.qml | 2 +- src/gui/filedetails/ShareeSearchField.qml | 2 +- src/gui/macOS/fileproviderxpc_mac_utils.mm | 2 +- .../macOS/ui/FileProviderEvictionDialog.qml | 2 +- .../FileProviderFastEnumerationSettings.qml | 2 +- src/gui/macOS/ui/FileProviderFileDelegate.qml | 2 +- src/gui/macOS/ui/FileProviderSettings.qml | 2 +- src/gui/macOS/ui/FileProviderStorageInfo.qml | 2 +- src/gui/macOS/ui/FileProviderSyncStatus.qml | 2 +- src/gui/owncloudgui.cpp | 38 +++++++++---------- src/gui/tray/AccountMenuItem.qml | 2 +- src/gui/tray/CallNotificationDialog.qml | 2 +- src/gui/tray/CurrentAccountHeaderButton.qml | 2 +- src/gui/tray/EditFileLocallyLoadingDialog.qml | 2 +- src/gui/tray/MainWindow.qml | 2 +- src/gui/tray/SyncStatus.qml | 2 +- src/gui/tray/TrayWindowAccountMenu.qml | 2 +- src/gui/tray/TrayWindowHeader.qml | 2 +- src/gui/tray/TrayWindowHeaderBar.qml | 2 +- theme/Style/Style.qml | 2 +- 41 files changed, 63 insertions(+), 63 deletions(-) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/ClientCommunicationService.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/ClientCommunicationService.swift index 687c08ca9b01d..d04dd3a8d220e 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/ClientCommunicationService.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/ClientCommunicationService.swift @@ -18,7 +18,7 @@ import OSLog class ClientCommunicationService: NSObject, NSFileProviderServiceSource, NSXPCListenerDelegate, ClientCommunicationProtocol { let listener = NSXPCListener.anonymous() - let serviceName = NSFileProviderServiceName("com.nextcloud.desktopclient.ClientCommunicationService") + let serviceName = NSFileProviderServiceName("com.ionos.hidrivenext.desktopclient.ClientCommunicationService") let fpExtension: FileProviderExtension init(fpExtension: FileProviderExtension) { diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/FPUIExtensionService.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/FPUIExtensionService.swift index a572942a88d67..5d67a7e919b08 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/FPUIExtensionService.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/FPUIExtensionService.swift @@ -9,7 +9,7 @@ import FileProvider import NextcloudKit let fpUiExtensionServiceName = NSFileProviderServiceName( - "com.nextcloud.desktopclient.FPUIExtensionService" + "com.ionos.hidrivenext.desktopclient.FPUIExtensionService" ) @objc protocol FPUIExtensionService { diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/DocumentActionViewController.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/DocumentActionViewController.swift index dfff3bf34ae7a..cacc61ccc9d2a 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/DocumentActionViewController.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/DocumentActionViewController.swift @@ -37,11 +37,11 @@ class DocumentActionViewController: FPUIActionExtensionViewController { Logger.actionViewController.info("Preparing action: \(actionIdentifier, privacy: .public)") switch (actionIdentifier) { - case "com.nextcloud.desktopclient.FileProviderUIExt.ShareAction": + case "com.ionos.hidrivenext.desktopclient.FileProviderUIExt.ShareAction": prepare(childViewController: ShareViewController(itemIdentifiers)) - case "com.nextcloud.desktopclient.FileProviderUIExt.LockFileAction": + case "com.ionos.hidrivenext.desktopclient.FileProviderUIExt.LockFileAction": prepare(childViewController: LockViewController(itemIdentifiers, locking: true)) - case "com.nextcloud.desktopclient.FileProviderUIExt.UnlockFileAction": + case "com.ionos.hidrivenext.desktopclient.FileProviderUIExt.UnlockFileAction": prepare(childViewController: LockViewController(itemIdentifiers, locking: false)) default: return diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Info.plist b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Info.plist index 31930b7627abc..eb627d452692a 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Info.plist +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Info.plist @@ -14,7 +14,7 @@ NSExtensionFileProviderActionIdentifier - com.nextcloud.desktopclient.FileProviderUIExt.UnlockFileAction + com.ionos.hidrivenext.desktopclient.FileProviderUIExt.UnlockFileAction NSExtensionFileProviderActionName Unlock file NSExtensionFileProviderActionActivationRule @@ -26,13 +26,13 @@ NSExtensionFileProviderActionName Lock file NSExtensionFileProviderActionIdentifier - com.nextcloud.desktopclient.FileProviderUIExt.LockFileAction + com.ionos.hidrivenext.desktopclient.FileProviderUIExt.LockFileAction NSExtensionFileProviderActionActivationRule TRUEPREDICATE NSExtensionFileProviderActionIdentifier - com.nextcloud.desktopclient.FileProviderUIExt.ShareAction + com.ionos.hidrivenext.desktopclient.FileProviderUIExt.ShareAction NSExtensionFileProviderActionName Share options diff --git a/src/gui/ConflictDelegate.qml b/src/gui/ConflictDelegate.qml index 07ebea17836c5..b9aeee4b88ce1 100644 --- a/src/gui/ConflictDelegate.qml +++ b/src/gui/ConflictDelegate.qml @@ -17,7 +17,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import "./tray" Item { diff --git a/src/gui/EmojiPicker.qml b/src/gui/EmojiPicker.qml index 486965ebd79f7..8741b2bc6f6ee 100644 --- a/src/gui/EmojiPicker.qml +++ b/src/gui/EmojiPicker.qml @@ -17,7 +17,7 @@ import QtQuick.Controls import QtQuick.Layouts import Style -import com.nextcloud.desktopclient 1.0 as NC +import com.ionos.hidrivenext.desktopclient as NC import "./tray" ColumnLayout { diff --git a/src/gui/ResolveConflictsDialog.qml b/src/gui/ResolveConflictsDialog.qml index 529181d6c1b32..c091a346973d5 100644 --- a/src/gui/ResolveConflictsDialog.qml +++ b/src/gui/ResolveConflictsDialog.qml @@ -19,7 +19,7 @@ import QtQuick.Layouts import QtQuick.Controls import QtQml.Models import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import "./tray" ApplicationWindow { diff --git a/src/gui/SesComponents/SesTrayHeader.qml b/src/gui/SesComponents/SesTrayHeader.qml index 3f4dd42c70894..2d3e11182d3db 100644 --- a/src/gui/SesComponents/SesTrayHeader.qml +++ b/src/gui/SesComponents/SesTrayHeader.qml @@ -12,7 +12,7 @@ import "../tray/" // Custom qml modules are in /theme (and included by resources.qrc) import Style 1.0 -import com.ionos.hidrivenext.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Rectangle { diff --git a/src/gui/UserStatusSelector.qml b/src/gui/UserStatusSelector.qml index 736dbe5a86a05..88dd179131b80 100644 --- a/src/gui/UserStatusSelector.qml +++ b/src/gui/UserStatusSelector.qml @@ -18,7 +18,7 @@ import QtQuick.Layouts import QtQuick.Controls import QtQuick.Window -import com.nextcloud.desktopclient as NC +import com.ionos.hidrivenext.desktopclient as NC import Style import "./tray" diff --git a/src/gui/UserStatusSelectorPage.qml b/src/gui/UserStatusSelectorPage.qml index a60423f9a77f5..fa545d6c6abb0 100644 --- a/src/gui/UserStatusSelectorPage.qml +++ b/src/gui/UserStatusSelectorPage.qml @@ -16,7 +16,7 @@ import QtQuick import QtQuick.Controls import Style -import com.nextcloud.desktopclient as NC +import com.ionos.hidrivenext.desktopclient as NC Page { id: page diff --git a/src/gui/filedetails/FileActivityView.qml b/src/gui/filedetails/FileActivityView.qml index 904bee76240be..3341736014cc6 100644 --- a/src/gui/filedetails/FileActivityView.qml +++ b/src/gui/filedetails/FileActivityView.qml @@ -16,7 +16,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" diff --git a/src/gui/filedetails/FileDetailsPage.qml b/src/gui/filedetails/FileDetailsPage.qml index 5b281720e952c..e7de4a4253527 100644 --- a/src/gui/filedetails/FileDetailsPage.qml +++ b/src/gui/filedetails/FileDetailsPage.qml @@ -16,7 +16,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" diff --git a/src/gui/filedetails/FileDetailsView.qml b/src/gui/filedetails/FileDetailsView.qml index 991da7d2b91c1..6ce265f69e4c3 100644 --- a/src/gui/filedetails/FileDetailsView.qml +++ b/src/gui/filedetails/FileDetailsView.qml @@ -16,7 +16,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style StackView { diff --git a/src/gui/filedetails/FileDetailsWindow.qml b/src/gui/filedetails/FileDetailsWindow.qml index f7f5eee41e420..f233149af1e2a 100644 --- a/src/gui/filedetails/FileDetailsWindow.qml +++ b/src/gui/filedetails/FileDetailsWindow.qml @@ -17,7 +17,7 @@ import QtQuick.Window import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style ApplicationWindow { diff --git a/src/gui/filedetails/NCInputDateField.qml b/src/gui/filedetails/NCInputDateField.qml index b39eed3273065..3dd83175cd2ac 100644 --- a/src/gui/filedetails/NCInputDateField.qml +++ b/src/gui/filedetails/NCInputDateField.qml @@ -14,7 +14,7 @@ import QtQuick import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient NCInputTextField { id: root diff --git a/src/gui/filedetails/NCInputTextArea.qml b/src/gui/filedetails/NCInputTextArea.qml index d3e917ff5113f..743400b05ab4f 100644 --- a/src/gui/filedetails/NCInputTextArea.qml +++ b/src/gui/filedetails/NCInputTextArea.qml @@ -16,7 +16,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style TextArea { diff --git a/src/gui/filedetails/NCInputTextField.qml b/src/gui/filedetails/NCInputTextField.qml index be1ad2558bce5..c45c1ea51d5bf 100644 --- a/src/gui/filedetails/NCInputTextField.qml +++ b/src/gui/filedetails/NCInputTextField.qml @@ -16,7 +16,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style TextField { diff --git a/src/gui/filedetails/NCTabButton.qml b/src/gui/filedetails/NCTabButton.qml index 48e2fecccabec..ee17cb052a467 100644 --- a/src/gui/filedetails/NCTabButton.qml +++ b/src/gui/filedetails/NCTabButton.qml @@ -17,7 +17,7 @@ import QtQuick.Window import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" diff --git a/src/gui/filedetails/ShareDelegate.qml b/src/gui/filedetails/ShareDelegate.qml index d6bb454a94090..73b33ff00dd76 100644 --- a/src/gui/filedetails/ShareDelegate.qml +++ b/src/gui/filedetails/ShareDelegate.qml @@ -18,7 +18,7 @@ import QtQuick.Layouts import QtQuick.Controls import Qt5Compat.GraphicalEffects -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" import "../" diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 8035b40d9d195..5b7bf62d02aab 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -18,7 +18,7 @@ import QtQuick.Layouts import QtQuick.Controls import Qt5Compat.GraphicalEffects -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" import "../" diff --git a/src/gui/filedetails/ShareView.qml b/src/gui/filedetails/ShareView.qml index 1b7b9ca7de067..f68529ec5e52b 100644 --- a/src/gui/filedetails/ShareView.qml +++ b/src/gui/filedetails/ShareView.qml @@ -17,7 +17,7 @@ import QtQuick.Window import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" import "../" diff --git a/src/gui/filedetails/ShareeDelegate.qml b/src/gui/filedetails/ShareeDelegate.qml index b46b3bb81e78a..03f07b5f826b2 100644 --- a/src/gui/filedetails/ShareeDelegate.qml +++ b/src/gui/filedetails/ShareeDelegate.qml @@ -17,7 +17,7 @@ import QtQuick.Window import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" diff --git a/src/gui/filedetails/ShareeSearchField.qml b/src/gui/filedetails/ShareeSearchField.qml index adda7a987ea9d..4fbaceb872f58 100644 --- a/src/gui/filedetails/ShareeSearchField.qml +++ b/src/gui/filedetails/ShareeSearchField.qml @@ -17,7 +17,7 @@ import QtQuick.Window import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" diff --git a/src/gui/macOS/fileproviderxpc_mac_utils.mm b/src/gui/macOS/fileproviderxpc_mac_utils.mm index 42aefe9a3047a..0cb24bb1bb17a 100644 --- a/src/gui/macOS/fileproviderxpc_mac_utils.mm +++ b/src/gui/macOS/fileproviderxpc_mac_utils.mm @@ -19,7 +19,7 @@ #include "gui/accountmanager.h" namespace { -const char *const clientCommunicationServiceName = "com.nextcloud.desktopclient.ClientCommunicationService"; +const char *const clientCommunicationServiceName = "com.ionos.hidrivenext.desktopclient.ClientCommunicationService"; NSString *const nsClientCommunicationServiceName = [NSString stringWithUTF8String:clientCommunicationServiceName]; } diff --git a/src/gui/macOS/ui/FileProviderEvictionDialog.qml b/src/gui/macOS/ui/FileProviderEvictionDialog.qml index 5f96557ea910d..f4f2ff581b126 100644 --- a/src/gui/macOS/ui/FileProviderEvictionDialog.qml +++ b/src/gui/macOS/ui/FileProviderEvictionDialog.qml @@ -20,7 +20,7 @@ import Style 1.0 import "../../filedetails" import "../../tray" -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient ApplicationWindow { id: root diff --git a/src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml b/src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml index ce94746298d5d..46ec374eed544 100644 --- a/src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml +++ b/src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml @@ -20,7 +20,7 @@ import Style 1.0 import "../../filedetails" import "../../tray" -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Column { id: root diff --git a/src/gui/macOS/ui/FileProviderFileDelegate.qml b/src/gui/macOS/ui/FileProviderFileDelegate.qml index a26d980262a2e..182135c89efa5 100644 --- a/src/gui/macOS/ui/FileProviderFileDelegate.qml +++ b/src/gui/macOS/ui/FileProviderFileDelegate.qml @@ -20,7 +20,7 @@ import Style 1.0 import "../../filedetails" import "../../tray" -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Item { id: root diff --git a/src/gui/macOS/ui/FileProviderSettings.qml b/src/gui/macOS/ui/FileProviderSettings.qml index 98a437cd5add7..ea338cec9786f 100644 --- a/src/gui/macOS/ui/FileProviderSettings.qml +++ b/src/gui/macOS/ui/FileProviderSettings.qml @@ -20,7 +20,7 @@ import Style 1.0 import "../../filedetails" import "../../tray" -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Page { id: root diff --git a/src/gui/macOS/ui/FileProviderStorageInfo.qml b/src/gui/macOS/ui/FileProviderStorageInfo.qml index d6b0850e1762b..fcb762f3e6119 100644 --- a/src/gui/macOS/ui/FileProviderStorageInfo.qml +++ b/src/gui/macOS/ui/FileProviderStorageInfo.qml @@ -20,7 +20,7 @@ import Style 1.0 import "../../filedetails" import "../../tray" -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient GridLayout { id: root diff --git a/src/gui/macOS/ui/FileProviderSyncStatus.qml b/src/gui/macOS/ui/FileProviderSyncStatus.qml index 61db9ae98c314..f9a185bdb1d50 100644 --- a/src/gui/macOS/ui/FileProviderSyncStatus.qml +++ b/src/gui/macOS/ui/FileProviderSyncStatus.qml @@ -20,7 +20,7 @@ import Style 1.0 import "../../filedetails" import "../../tray" -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient GridLayout { id: root diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index e387275968cad..b147f136b9474 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -128,20 +128,20 @@ ownCloudGui::ownCloudGui(Application *parent) connect(Logger::instance(), &Logger::guiLog, this, &ownCloudGui::slotShowTrayMessage); connect(Logger::instance(), &Logger::guiMessage, this, &ownCloudGui::slotShowGuiMessage); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "SyncStatusSummary"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "EmojiModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "UserStatusSelectorModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "ActivityListModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "FileActivityListModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "SortedActivityListModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "WheelHandler"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "CallStateChecker"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "DateFieldBackend"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "FileDetails"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "ShareModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "ShareeModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "SortedShareModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "SyncConflictsModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "SyncStatusSummary"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "EmojiModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "UserStatusSelectorModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "ActivityListModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "FileActivityListModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "SortedActivityListModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "WheelHandler"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "CallStateChecker"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "DateFieldBackend"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "FileDetails"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "ShareModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "ShareeModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "SortedShareModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "SyncConflictsModel"); qmlRegisterUncreatableType("com.nextcloud.desktopclient", 1, 0, "QAbstractItemModel", "QAbstractItemModel"); qmlRegisterUncreatableType("com.nextcloud.desktopclient", 1, 0, "Activity", "Activity"); @@ -159,13 +159,13 @@ ownCloudGui::ownCloudGui(Application *parent) qRegisterMetaType("Sharee"); qRegisterMetaType("ActivityList"); - qmlRegisterSingletonInstance("com.nextcloud.desktopclient", 1, 0, "UserModel", UserModel::instance()); - qmlRegisterSingletonInstance("com.nextcloud.desktopclient", 1, 0, "UserAppsModel", UserAppsModel::instance()); - qmlRegisterSingletonInstance("com.nextcloud.desktopclient", 1, 0, "Theme", Theme::instance()); - qmlRegisterSingletonInstance("com.nextcloud.desktopclient", 1, 0, "Systray", Systray::instance()); + qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "UserModel", UserModel::instance()); + qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "UserAppsModel", UserAppsModel::instance()); + qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "Theme", Theme::instance()); + qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "Systray", Systray::instance()); #ifdef BUILD_FILE_PROVIDER_MODULE - qmlRegisterSingletonInstance("com.nextcloud.desktopclient", 1, 0, "FileProviderSettingsController", Mac::FileProviderSettingsController::instance()); + qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "FileProviderSettingsController", Mac::FileProviderSettingsController::instance()); #endif } diff --git a/src/gui/tray/AccountMenuItem.qml b/src/gui/tray/AccountMenuItem.qml index 0d427221d72a7..9ea01a7a761f1 100644 --- a/src/gui/tray/AccountMenuItem.qml +++ b/src/gui/tray/AccountMenuItem.qml @@ -5,7 +5,7 @@ import QtQuick.Layouts 1.15 // Custom qml modules are in /theme (and included by resources.qrc) import Style 1.0 -import com.ionos.hidrivenext.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient MenuItem { id: accountMenuItem diff --git a/src/gui/tray/CallNotificationDialog.qml b/src/gui/tray/CallNotificationDialog.qml index 0d5ef11a133a6..a85f3f7900bbc 100644 --- a/src/gui/tray/CallNotificationDialog.qml +++ b/src/gui/tray/CallNotificationDialog.qml @@ -16,11 +16,11 @@ import QtQuick import QtQuick.Window import Style +import com.ionos.hidrivenext.desktopclient import QtQuick.Layouts import QtMultimedia import QtQuick.Controls import Qt5Compat.GraphicalEffects -import com.ionos.hidrivenext.desktopclient ApplicationWindow { id: root diff --git a/src/gui/tray/CurrentAccountHeaderButton.qml b/src/gui/tray/CurrentAccountHeaderButton.qml index 7ea3adb42dd74..417af9b7d6b52 100644 --- a/src/gui/tray/CurrentAccountHeaderButton.qml +++ b/src/gui/tray/CurrentAccountHeaderButton.qml @@ -20,7 +20,7 @@ import "../" import "../filedetails/" import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient Button { id: root diff --git a/src/gui/tray/EditFileLocallyLoadingDialog.qml b/src/gui/tray/EditFileLocallyLoadingDialog.qml index 400f19c966921..904694d85ffb1 100644 --- a/src/gui/tray/EditFileLocallyLoadingDialog.qml +++ b/src/gui/tray/EditFileLocallyLoadingDialog.qml @@ -1,9 +1,9 @@ import QtQuick import QtQuick.Window import Style +import com.ionos.hidrivenext.desktopclient import QtQuick.Layouts import QtQuick.Controls -import com.ionos.hidrivenext.desktopclient ApplicationWindow { id: root diff --git a/src/gui/tray/MainWindow.qml b/src/gui/tray/MainWindow.qml index cf13b90be918b..eafca28219361 100644 --- a/src/gui/tray/MainWindow.qml +++ b/src/gui/tray/MainWindow.qml @@ -26,7 +26,7 @@ import "../filedetails/" // Custom qml modules are in /theme (and included by resources.qrc) import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient ApplicationWindow { id: trayWindow diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index e81e655699ca3..1ec1ca162f9e8 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -4,7 +4,7 @@ import QtQuick.Layouts import Style -import com.ionos.hidrivenext.desktopclientas NC +import com.ionos.hidrivenext.desktopclient as NC RowLayout { id: root diff --git a/src/gui/tray/TrayWindowAccountMenu.qml b/src/gui/tray/TrayWindowAccountMenu.qml index 2d7d2367e8747..cefec839c8244 100644 --- a/src/gui/tray/TrayWindowAccountMenu.qml +++ b/src/gui/tray/TrayWindowAccountMenu.qml @@ -11,7 +11,7 @@ import "../filedetails/" // Custom qml modules are in /theme (and included by resources.qrc) import Style 1.0 -import com.ionos.hidrivenext.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Button { id: currentAccountButton diff --git a/src/gui/tray/TrayWindowHeader.qml b/src/gui/tray/TrayWindowHeader.qml index 6d783dd8ba136..f45d29a94a2d1 100644 --- a/src/gui/tray/TrayWindowHeader.qml +++ b/src/gui/tray/TrayWindowHeader.qml @@ -20,7 +20,7 @@ import "../" import "../filedetails/" import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient Rectangle { id: root diff --git a/src/gui/tray/TrayWindowHeaderBar.qml b/src/gui/tray/TrayWindowHeaderBar.qml index e03af08bc67a6..f21ba6c7392a4 100644 --- a/src/gui/tray/TrayWindowHeaderBar.qml +++ b/src/gui/tray/TrayWindowHeaderBar.qml @@ -11,7 +11,7 @@ import "../filedetails/" // Custom qml modules are in /theme (and included by resources.qrc) import Style 1.0 -import com.ionos.hidrivenext.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Rectangle { diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 9d5f6f6788dbb..473fe7c1e9252 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -2,7 +2,7 @@ pragma Singleton import QtQuick -import com.ionos.hidrivenext.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient QtObject { readonly property int pixelSize: fontMetrics.font.pixelSize From 608dc746bb23c29a105c502f77533be1927483e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 16 Jan 2025 13:03:11 +0100 Subject: [PATCH 010/359] Fixed some merge issues --- resources.qrc | 11 +- src/gui/SesComponents/SesTrayHeader.qml | 9 +- src/gui/tray/ActivityItemActions.qml | 9 +- src/gui/tray/ActivityItemContent.qml | 29 ++--- src/gui/tray/HeaderLogo.qml | 16 ++- src/gui/tray/MainWindow.qml | 150 ++++++++++++++---------- src/gui/tray/SesButtonContents.qml | 8 +- src/gui/tray/SesCustomButton.qml | 23 ++-- src/gui/tray/SyncStatus.qml | 17 +-- src/gui/tray/TrayWindowAccountMenu.qml | 45 ++++--- theme.qrc.in | 1 + theme/Style/Style.qml | 21 ++++ theme/ses/ses-IONOS-logo.svg | 35 ++++++ 13 files changed, 229 insertions(+), 145 deletions(-) create mode 100644 theme/ses/ses-IONOS-logo.svg diff --git a/resources.qrc b/resources.qrc index e41bf9cdb761b..6f69c28663140 100644 --- a/resources.qrc +++ b/resources.qrc @@ -40,8 +40,6 @@ src/gui/tray/UnifiedSearchResultNothingFound.qml src/gui/tray/UnifiedSearchPlaceholderView.qml src/gui/tray/UnifiedSearchResultSectionItem.qml - src/gui/tray/SesCustomButton.qml - src/gui/tray/SesButtonContents.qml src/gui/tray/ActivityItemContextMenu.qml src/gui/tray/ActivityItemActions.qml src/gui/tray/ActivityItemContent.qml @@ -54,15 +52,12 @@ src/gui/tray/NCToolTip.qml src/gui/tray/NCProgressBar.qml src/gui/tray/EnforcedPlainTextLabel.qml - src/gui/tray/TrayWindowHeaderBar.qml - src/gui/tray/TrayWindowAccountMenu.qml - src/gui/tray/HeaderLogo.qml - src/gui/tray/AccountMenuItem.qml theme/Style/Style.qml theme/Style/qmldir src/gui/tray/ListItemLineAndSubline.qml src/gui/tray/TrayFoldersMenuButton.qml src/gui/tray/TrayFolderListItem.qml + src/gui/tray/HeaderLogo.qml src/gui/ResolveConflictsDialog.qml src/gui/ConflictDelegate.qml src/gui/ConflictItemFileInfo.qml @@ -72,5 +67,9 @@ src/gui/macOS/ui/FileProviderSyncStatus.qml src/gui/macOS/ui/FileProviderStorageInfo.qml src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml + src/gui/SesComponents/SesErrorBox.qml + src/gui/SesComponents/SesTrayHeader.qml + src/gui/tray/SesCustomButton.qml + src/gui/tray/SesButtonContents.qml diff --git a/src/gui/SesComponents/SesTrayHeader.qml b/src/gui/SesComponents/SesTrayHeader.qml index 2d3e11182d3db..b7f3425245f0e 100644 --- a/src/gui/SesComponents/SesTrayHeader.qml +++ b/src/gui/SesComponents/SesTrayHeader.qml @@ -1,8 +1,7 @@ -import QtQuick 2.15 -import QtQuick.Window 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 -import QtGraphicalEffects 1.15 +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Layouts import Qt.labs.platform 1.1 as NativeDialogs import "../" diff --git a/src/gui/tray/ActivityItemActions.qml b/src/gui/tray/ActivityItemActions.qml index eb3d997cf7615..ad255cfb705ee 100644 --- a/src/gui/tray/ActivityItemActions.qml +++ b/src/gui/tray/ActivityItemActions.qml @@ -26,7 +26,7 @@ Repeater { model: root.linksForActionButtons - Button { + SesCustomButton { id: activityActionButton property string verb: model.modelData.verb @@ -44,9 +44,10 @@ Repeater { onClicked: isTalkReplyButton ? root.showReplyField() : root.triggerAction(model.index) - textColor: Style.adjustedCurrentUserHeaderColor - textColorHovered: Style.currentUserHeaderTextColor - bgColor: Style.currentUserHeaderColor + textColor: palette.brightText + bgColor: Style.sesActionPressed + bgNormalOpacity: 1.0 + bgHoverOpacity: Style.hoverOpacity visible: verb !== "REPLY" || (verb === "REPLY" && root.talkReplyButtonVisible) } diff --git a/src/gui/tray/ActivityItemContent.qml b/src/gui/tray/ActivityItemContent.qml index 510d17f90276b..0be9914b61839 100644 --- a/src/gui/tray/ActivityItemContent.qml +++ b/src/gui/tray/ActivityItemContent.qml @@ -162,10 +162,10 @@ RowLayout { spacing: Style.extraSmallSpacing Button { - id: fileDetailsButton + id: fileDetailsButton property bool isHovered: fileDetailsButton.hovered || fileDetailsButton.visualFocus property bool isActive: fileDetailsButton.pressed - + Layout.preferredWidth: Style.dismissButtonSize Layout.preferredHeight: Style.dismissButtonSize Layout.alignment: Qt.AlignTop | Qt.AlignRight @@ -173,8 +173,7 @@ RowLayout { width: Style.activityListButtonWidth height: Style.activityListButtonHeight icon.source: "image://svgimage-custom-color/more.svg/" + (isHovered ? Style.sesWhite : Style.sesActionHover) - - icon.source: "image://svgimage-custom-color/more.svg/" + palette.buttonText + icon.width: Style.activityListButtonIconSize icon.height: Style.activityListButtonIconSize @@ -182,17 +181,19 @@ RowLayout { text: qsTr("Open file details") visible: parent.hovered } - background: Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: parent.isActive ? Style.sesActionPressed : parent.isHovered ? Style.sesActionHover : "transparent" - radius: width / 2 - } + background: Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: parent.isActive ? Style.sesActionPressed : parent.isHovered ? Style.sesActionHover : "transparent" + radius: width / 2 + } - display: Button.IconOnly - leftPadding: 0 - rightPadding: 0 + display: Button.IconOnly + leftPadding: 0 + rightPadding: 0 + visible: model.showFileDetails + onClicked: Systray.presentShareViewInTray(model.openablePath) } Button { @@ -260,7 +261,7 @@ RowLayout { wrapMode: Text.Wrap maximumLineCount: 2 font: root.font - color: Style.sesTrayFontColor + color: Style.sesTrayFontColor visible: text !== "" } diff --git a/src/gui/tray/HeaderLogo.qml b/src/gui/tray/HeaderLogo.qml index ee7b9ee008351..54ce6f3b1c56b 100644 --- a/src/gui/tray/HeaderLogo.qml +++ b/src/gui/tray/HeaderLogo.qml @@ -1,16 +1,14 @@ -import QtQuick 2.15 -import QtQuick.Window 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 -import QtGraphicalEffects 1.15 -import Qt.labs.platform 1.1 as NativeDialogs +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Layouts +import Qt.labs.platform as NativeDialogs -import "../" // Custom qml modules are in /theme (and included by resources.qrc) -import Style 1.0 +import Style -import com.ionos.hidrivenext.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Rectangle { Image{ diff --git a/src/gui/tray/MainWindow.qml b/src/gui/tray/MainWindow.qml index eafca28219361..cf2e3ef225f69 100644 --- a/src/gui/tray/MainWindow.qml +++ b/src/gui/tray/MainWindow.qml @@ -21,7 +21,9 @@ import Qt5Compat.GraphicalEffects import Qt.labs.platform as NativeDialogs import "../" +import "../tray" import "../filedetails/" +import "../SesComponents/" // Custom qml modules are in /theme (and included by resources.qrc) import Style @@ -36,10 +38,34 @@ ApplicationWindow { title: Systray.windowTitle // If the main dialog is displayed as a regular window we want it to be quadratic - width: Systray.useNormalWindow ? Style.trayWindowHeight : Style.trayWindowWidth + width: Systray.useNormalWindow ? Style.trayWindowHeight : Style.sesTrayWindowWidth height: Style.trayWindowHeight + color: "transparent" flags: Systray.useNormalWindow ? Qt.Window : Qt.Dialog | Qt.FramelessWindowHint - color: "transparent" + + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontBoldWeight + + // TODO: Rather than setting all these palette colours manually, + // create a custom style and do it for all components globally + // palette { + // text: Style.ncTextColor + // windowText: Style.ncTextColor + // buttonText: Style.ncTextColor + // brightText: Style.ncTextBrightColor + // highlight: Style.lightHover + // highlightedText: Style.ncTextColor + // light: Style.lightHover + // midlight: Style.ncSecondaryTextColor + // mid: Style.darkerHover + // dark: Style.menuBorder + // button: Style.buttonBackgroundColor + // window: Style.backgroundColor + // base: Style.backgroundColor + // toolTipBase: Style.backgroundColor + // toolTipText: Style.ncTextColor + // } readonly property int maxMenuHeight: Style.trayWindowHeight - Style.trayWindowHeaderHeight - 2 * Style.trayWindowBorderWidth @@ -55,16 +81,10 @@ ApplicationWindow { onClosing: Systray.isOpen = false - onVisibleChanged: { - // HACK: reload account Instantiator immediately by restting it - could be done better I guess - // see also id:trayWindowHeader.currentAccountHeaderButton.accountMenu below - trayWindowHeader.currentAccountHeaderButton.userLineInstantiator.active = false; - trayWindowHeader.currentAccountHeaderButton.userLineInstantiator.active = true; - syncStatus.model.load(); - } + onVisibleChanged: syncStatus.model.load() background: Rectangle { - radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius + radius: 0.0 border.width: Style.trayWindowBorderWidth border.color: palette.dark color: palette.window @@ -126,7 +146,7 @@ ApplicationWindow { maskSource: Rectangle { width: trayWindow.width height: trayWindow.height - radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius + radius: 0.0 } } @@ -180,7 +200,7 @@ ApplicationWindow { radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius border.width: Style.trayWindowBorderWidth border.color: palette.dark - color: Style.colorWithoutTransparency(palette.base) + color: palette.window } property var folderAccountState: ({}) @@ -215,7 +235,7 @@ ApplicationWindow { height: parent.height backgroundsVisible: false - accentColor: Style.accentColor + accentColor: Style.currentUserHeaderColor accountState: fileDetailsDrawer.folderAccountState localPath: fileDetailsDrawer.fileLocalPath showCloseButton: true @@ -248,14 +268,28 @@ ApplicationWindow { anchors.fill: parent onClicked: forceActiveFocus() } - - TrayWindowHeader { - id: trayWindowHeader - - anchors.top: parent.top + + HeaderLogo { + id: trayWindowLogoHeaderBackground + height: Style.sesHeaderLogoHeigth + width: parent.width + } + + SesTrayHeader { + id: trayWindowHeaderBackground + anchors.left: trayWindowLogoHeaderBackground.left + anchors.right: trayWindowLogoHeaderBackground.right + anchors.top: trayWindowLogoHeaderBackground.bottom + anchors.topMargin: Style.sesHeaderTopMargin + } + + Rectangle { anchors.left: parent.left anchors.right: parent.right - height: Style.trayWindowHeaderHeight + anchors.top: trayWindowHeaderBackground.bottom + anchors.topMargin: Style.sesHeaderTopMargin + implicitHeight: 1 + color: Style.sesBorderColor } UnifiedSearchInputContainer { @@ -263,12 +297,18 @@ ApplicationWindow { property bool activateSearchFocus: activeFocus - anchors.top: trayWindowHeader.bottom - anchors.left: trayWindowMainItem.left - anchors.right: trayWindowMainItem.right - anchors.topMargin: Style.trayHorizontalMargin - anchors.leftMargin: Style.trayHorizontalMargin - anchors.rightMargin: Style.trayHorizontalMargin + height: 0 + visible: false //SES-4 removed + + anchors { + top: trayWindowHeaderBackground.bottom + left: trayWindowMainItem.left + right: trayWindowMainItem.right + + topMargin: Style.trayHorizontalMargin + controlRoot.padding + leftMargin: Style.trayHorizontalMargin + controlRoot.padding + rightMargin: Style.trayHorizontalMargin + controlRoot.padding + } text: UserModel.currentUser.unifiedSearchResultsListModel.searchTerm readOnly: !UserModel.currentUser.isConnected || UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId @@ -279,45 +319,23 @@ ApplicationWindow { Keys.onEscapePressed: activateSearchFocus = false } - Rectangle { - id: bottomUnifiedSearchInputSeparator - - anchors.top: trayWindowUnifiedSearchInputContainer.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.topMargin: Style.trayHorizontalMargin - - height: 1 - color: palette.dark - visible: trayWindowMainItem.isUnifiedSearchActive - } - - ErrorBox { - id: unifiedSearchResultsErrorLabel - visible: UserModel.currentUser.unifiedSearchResultsListModel.errorString && !unifiedSearchResultsListView.visible && ! UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress && ! UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId - text: UserModel.currentUser.unifiedSearchResultsListModel.errorString - anchors.top: bottomUnifiedSearchInputSeparator.bottom - anchors.left: trayWindowMainItem.left - anchors.right: trayWindowMainItem.right - anchors.margins: Style.trayHorizontalMargin - } - - UnifiedSearchPlaceholderView { - id: unifiedSearchPlaceholderView - - anchors.top: bottomUnifiedSearchInputSeparator.bottom - anchors.left: trayWindowMainItem.left - anchors.right: trayWindowMainItem.right - anchors.bottom: trayWindowMainItem.bottom - anchors.topMargin: Style.trayHorizontalMargin - - visible: trayWindowUnifiedSearchInputContainer.activateSearchFocus && !UserModel.currentUser.unifiedSearchResultsListModel.searchTerm - } + SesErrorBox { + id: unifiedSearchResultsErrorLabel + visible: UserModel.currentUser.unifiedSearchResultsListModel.errorString && + !unifiedSearchResultsListView.visible && + !UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress && + !UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId + text: UserModel.currentUser.unifiedSearchResultsListModel.errorString + anchors.top: trayWindowUnifiedSearchInputContainer.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + anchors.margins: Style.trayHorizontalMargin + } UnifiedSearchResultNothingFound { id: unifiedSearchResultNothingFound - anchors.top: bottomUnifiedSearchInputSeparator.bottom + anchors.top: trayWindowUnifiedSearchInputContainer.bottom anchors.left: trayWindowMainItem.left anchors.right: trayWindowMainItem.right anchors.topMargin: Style.trayHorizontalMargin @@ -335,7 +353,7 @@ ApplicationWindow { Loader { id: unifiedSearchResultsListViewSkeletonLoader - anchors.top: bottomUnifiedSearchInputSeparator.bottom + anchors.top: trayWindowUnifiedSearchInputContainer.bottom anchors.left: trayWindowMainItem.left anchors.right: trayWindowMainItem.right anchors.bottom: trayWindowMainItem.bottom @@ -364,7 +382,7 @@ ApplicationWindow { } visible: unifiedSearchResultsListView.count > 0 - anchors.top: bottomUnifiedSearchInputSeparator.bottom + anchors.top: trayWindowUnifiedSearchInputContainer.bottom anchors.left: trayWindowMainItem.left anchors.right: trayWindowMainItem.right anchors.bottom: trayWindowMainItem.bottom @@ -404,7 +422,6 @@ ApplicationWindow { SyncStatus { id: syncStatus - accentColor: Style.accentColor visible: !trayWindowMainItem.isUnifiedSearchActive anchors.top: trayWindowUnifiedSearchInputContainer.bottom @@ -441,6 +458,13 @@ ApplicationWindow { hoverEnabled: true padding: Style.smallSpacing + // textColor: Style.currentUserHeaderTextColor + // textColorHovered: Style.currentUserHeaderTextColor + // bgNormalColor: Qt.lighter(bgHoverColor, 1.25) + // bgHoverColor: Style.currentUserHeaderColor + // bgNormalOpacity: Style.newActivitiesBgNormalOpacity + // bgHoverOpacity: Style.newActivitiesBgHoverOpacity + anchors.fill: parent text: qsTr("New activities") diff --git a/src/gui/tray/SesButtonContents.qml b/src/gui/tray/SesButtonContents.qml index d27b0316daba3..302252c622a22 100644 --- a/src/gui/tray/SesButtonContents.qml +++ b/src/gui/tray/SesButtonContents.qml @@ -15,10 +15,8 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 -import QtGraphicalEffects 1.15 import Style 1.0 - RowLayout { id: root @@ -66,8 +64,8 @@ RowLayout { visible: root.display === Button.TextOnly ? false : root.hovered ? root.imageSourceHover !== "" : root.imageSource !== "" layer.enabled: true - layer.effect: ColorOverlay { - color: Style.sesWhite - } + // layer.effect: ColorOverlay { + // color: "white" + // } } } \ No newline at end of file diff --git a/src/gui/tray/SesCustomButton.qml b/src/gui/tray/SesCustomButton.qml index 0f61857f01a28..934d9bed6974c 100644 --- a/src/gui/tray/SesCustomButton.qml +++ b/src/gui/tray/SesCustomButton.qml @@ -12,11 +12,11 @@ * for more details. */ -import QtQuick 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 -import Style 1.0 - +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Style +import com.ionos.hidrivenext.desktopclient Button { id: root @@ -39,12 +39,19 @@ Button { property int bgBorderWidth property string bgBorderColor - background: NCButtonBackground { + Rectangle { id: bgRectangle - hovered: root.hovered - height: 36 + property bool isHovered: root.hovered + property real normalOpacity: 0.3 + property real hoverOpacity: 1.0 + property color normalColor: palette.button + property color hoverColor: palette.button + height: 36 border.width: root.bgBorderWidth border.color: root.bgBorderColor + color: isHovered ? hoverColor : normalColor + opacity: isHovered ? hoverOpacity : normalOpacity + radius: width / 2 } leftPadding: root.text === "" ? Style.smallSpacing : 20 diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index 1ec1ca162f9e8..e66ffc593e239 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -88,9 +88,6 @@ RowLayout { text: qsTr("Sync now") padding: Style.smallSpacing - textColor: Style.adjustedCurrentUserHeaderColor - textColorHovered: Style.currentUserHeaderTextColor - bgColor: Style.currentUserHeaderColor visible: false // SES-4 removed enabled: visible @@ -101,14 +98,18 @@ RowLayout { } } - Button { + SesCustomButton { Layout.rightMargin: Style.trayHorizontalMargin - text: qsTr("Resolve conflicts") - textColor: Style.adjustedCurrentUserHeaderColor - textColorHovered: Style.currentUserHeaderTextColor - bgColor: Style.currentUserHeaderColor + font.pixelSize: pixelSize + font.weight: fontWeight + text: qsTr("Resolve conflicts") + textColor: palette.brightText + bgColor: Style.sesActionPressed + bgNormalOpacity: 1.0 + bgHoverOpacity: Style.hoverOpacity + visible: activityModel.hasSyncConflicts && !syncStatus.syncing && NC.UserModel.currentUser.hasLocalFolder && diff --git a/src/gui/tray/TrayWindowAccountMenu.qml b/src/gui/tray/TrayWindowAccountMenu.qml index cefec839c8244..c29106efa6c65 100644 --- a/src/gui/tray/TrayWindowAccountMenu.qml +++ b/src/gui/tray/TrayWindowAccountMenu.qml @@ -1,15 +1,14 @@ -import QtQuick 2.15 -import QtQuick.Window 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 -import QtGraphicalEffects 1.15 -import Qt.labs.platform 1.1 as NativeDialogs +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Layouts +import Qt.labs.platform as NativeDialogs import "../" import "../filedetails/" // Custom qml modules are in /theme (and included by resources.qrc) -import Style 1.0 +import Style import com.ionos.hidrivenext.desktopclient @@ -265,21 +264,21 @@ Button { } } - ColorOverlay { - cached: true - color: Style.currentUserHeaderTextColor - width: source.width - height: source.height - Layout.rightMargin: Style.sesAccountButtonRightMargin - source: Image { - Layout.alignment: Qt.AlignRight - verticalAlignment: Qt.AlignCenter - source: Style.sesChevron - sourceSize.width: 12 - sourceSize.height: 7 - Accessible.role: Accessible.PopupMenu - Accessible.name: qsTr("Account switcher and settings menu") - } - } + // ColorOverlay { + // cached: true + // color: Style.currentUserHeaderTextColor + // width: source.width + // height: source.height + // Layout.rightMargin: Style.sesAccountButtonRightMargin + // source: Image { + // Layout.alignment: Qt.AlignRight + // verticalAlignment: Qt.AlignCenter + // source: Style.sesChevron + // sourceSize.width: 12 + // sourceSize.height: 7 + // Accessible.role: Accessible.PopupMenu + // Accessible.name: qsTr("Account switcher and settings menu") + // } + // } } } \ No newline at end of file diff --git a/theme.qrc.in b/theme.qrc.in index 52e027b769ff6..f7c40a76bc70e 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -242,6 +242,7 @@ theme/call-notification.wav theme/talk-app.svg theme/chevron-double-up.svg + theme/ses/ses-IONOS-Logo.svg theme/colored/IONOS_logo_w_suffix_frontend.png theme/colored/IONOS_logo_w_suffix_frontend@2x.png theme/colored/IONOS_logo_w_suffix_frontend.svg diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 473fe7c1e9252..7a3eb55647f7b 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -218,6 +218,27 @@ QtObject { return Qt.rgba(color.r, color.g, color.b, 1) } + // SES + readonly property string sesWebsiteIcon: "qrc:///client/theme/external.svg" + readonly property string sesFilesIcon: "qrc:///client/theme/files.svg" + readonly property string sesIonosLogoIcon: "qrc:///client/theme/ses/ses-IONOS-Logo.svg" + + readonly property string sesAvatar: "qrc:///client/theme/account.svg" + + readonly property string sesAccountQuit: "qrc:///client/theme/black/close.svg" + readonly property string sesAccountPause: "qrc:///client/theme/colored/state-pause.svg" + readonly property string sesDarkPlus: "qrc:///client/theme/black/add.svg" + readonly property string sesLightPlus: "qrc:///client/theme/white/add.svg" + readonly property string sesAccountSettings: "qrc:///client/theme/black/settings.svg" + readonly property string sesAccountResume: "qrc:///client/theme/black/state-sync.svg" + readonly property string sesLogout: "qrc:///client/theme/black/close.svg" + readonly property string sesDelete: "qrc:///client/theme/delete.svg" + readonly property string sesClipboard: "qrc:///client/theme/copy.svg" + readonly property string sesErrorIcon: "qrc:///client/theme/colored/state-error.svg" + readonly property string sesErrorBoxIcon: "qrc:///client/theme/colored/state-error.svg" + readonly property string sesGreenCheckmark: "qrc:///client/theme/colored/state-ok.svg" + readonly property string sesChevron: "qrc:///client/theme/black/caret-down.svg" + readonly property color sesIconDarkColor: "#001B41" readonly property color sesIconColor: "#1474C4" diff --git a/theme/ses/ses-IONOS-logo.svg b/theme/ses/ses-IONOS-logo.svg new file mode 100644 index 0000000000000..816faa83f14e7 --- /dev/null +++ b/theme/ses/ses-IONOS-logo.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 2fcece82cf12f8b05f37cf6363b51ae2459ceb04 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:27:52 +0100 Subject: [PATCH 011/359] add ses style helpers --- src/gui/moreoptionsbuttonstylehelper.cpp | 113 ++++++++++++ src/gui/moreoptionsbuttonstylehelper.h | 25 +++ src/gui/pushbuttonstylehelper.cpp | 122 +++++++++++++ src/gui/pushbuttonstylehelper.h | 36 ++++ src/gui/sesFileIconProvider.cpp | 22 +++ src/gui/sesFileIconProvider.h | 14 ++ src/gui/sesstyle.cpp | 217 +++++++++++++++++++++++ src/gui/sesstyle.h | 75 ++++++++ 8 files changed, 624 insertions(+) create mode 100644 src/gui/moreoptionsbuttonstylehelper.cpp create mode 100644 src/gui/moreoptionsbuttonstylehelper.h create mode 100644 src/gui/pushbuttonstylehelper.cpp create mode 100644 src/gui/pushbuttonstylehelper.h create mode 100644 src/gui/sesFileIconProvider.cpp create mode 100644 src/gui/sesFileIconProvider.h create mode 100644 src/gui/sesstyle.cpp create mode 100644 src/gui/sesstyle.h diff --git a/src/gui/moreoptionsbuttonstylehelper.cpp b/src/gui/moreoptionsbuttonstylehelper.cpp new file mode 100644 index 0000000000000..20f19fb2a655b --- /dev/null +++ b/src/gui/moreoptionsbuttonstylehelper.cpp @@ -0,0 +1,113 @@ +#include "moreoptionsbuttonstylehelper.h" + +#include "buttonstylestrategy.h" +#include "buttonstyle.h" +#include "ionostheme.h" +#include +#include +#include + + +void MoreOptionsButtonStyleHelper::setupPainterForToolButtonShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget) +{ + OCC::ButtonStyle& style = ButtonStyleStrategy::getButtonStyle(widget, option); + + // Disabled + if (!(option->state & QStyle::State_Enabled)) { + painter->setPen(QColor(style.buttonDisabledBorderColor())); + painter->setBrush(QColor(style.buttonDisabledColor())); + } + //Pressed + else if (option->state & QStyle::State_Sunken) + { + painter->setPen(QColor(style.buttonPressedBorderColor())); + painter->setBrush(QColor(style.buttonPressedColor())); + } + // Hover + else if(option->state & QStyle::State_MouseOver) + { + painter->setPen(QColor(style.buttonHoverBorderColor())); + painter->setBrush(QColor(style.buttonHoverColor())); + } + // Focused + else if (option->state & QStyle::State_HasFocus) { + painter->setPen(QColor(style.buttonFocusedBorderColor())); + painter->setBrush(QColor(style.buttonFocusedColor())); + } + // Else - Just beeing there + else { + painter->setPen(QColor(style.buttonDefaultBorderColor())); + painter->setBrush(QColor(style.buttonDefaultColor())); + } +} + +void MoreOptionsButtonStyleHelper::drawToolButtonShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget) +{ + painter->save(); + painter->setRenderHints(QPainter::Antialiasing); + setupPainterForToolButtonShape(option, painter, widget); + const int radius = option->rect.height() / 2; + painter->drawRoundedRect(option->rect, radius,radius); + painter->restore(); +} + +QPixmap MoreOptionsButtonStyleHelper::tintPixmap(const QPixmap &src, const QColor &color) const{ + QPixmap result(src.size()); + result.fill(Qt::transparent); + + QPainter painter(&result); + painter.setCompositionMode(QPainter::CompositionMode_Source); + painter.drawPixmap(0, 0, src); + + painter.setCompositionMode(QPainter::CompositionMode_SourceIn); + painter.fillRect(result.rect(), color); + + painter.end(); + return result; +} + +QSize MoreOptionsButtonStyleHelper::getLargestIconSize(const QIcon &icon) const{ + QList availableSizes = icon.availableSizes(); + + if (availableSizes.isEmpty()) { + return QSize(); + } + + QSize largestSize; + int maxDimension = 0; + + for (const QSize &size : availableSizes) { + if (size.width() > maxDimension) { + maxDimension = size.width(); + largestSize = size; + } + } + + return largestSize; +} + +void MoreOptionsButtonStyleHelper::adjustIconColor(QStyleOptionButton *option, const QWidget *widget) +{ + QColor iconColor; + OCC::ButtonStyle& style = ButtonStyleStrategy::getButtonStyle(widget, option); + + if (!(option->state & QStyle::State_Enabled)) { + iconColor = style.buttonDisabledFontColor(); + } + else if(option->state & QStyle::State_MouseOver) + { + iconColor = QColor(style.buttonDefaultColor()); + } + else + { + iconColor = QColor(style.buttonHoverColor()); + } + + QIcon icon = option->icon; + QSize iconSize = getLargestIconSize(icon); + QPixmap pixmap = icon.pixmap(iconSize); + + QPixmap coloredPixmap = tintPixmap(pixmap, iconColor); + + option->icon = (QIcon(coloredPixmap)); +} \ No newline at end of file diff --git a/src/gui/moreoptionsbuttonstylehelper.h b/src/gui/moreoptionsbuttonstylehelper.h new file mode 100644 index 0000000000000..6ffc2d5f4060d --- /dev/null +++ b/src/gui/moreoptionsbuttonstylehelper.h @@ -0,0 +1,25 @@ +#ifndef MOREOPTIONSBUTTONSTYLEHELPER_H +#define MOREOPTIONSBUTTONSTYLEHELPER_H + +#include + +class QPainter; +class QStyleOptionButton; +class QWidget; +class QPixmap; +class QColor; +class QIcon; + +class MoreOptionsButtonStyleHelper +{ +public: + void setupPainterForToolButtonShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget); + void drawToolButtonShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget); + void adjustIconColor(QStyleOptionButton *option, const QWidget *widget); + +private: + QPixmap tintPixmap(const QPixmap &src, const QColor &color) const; + QSize getLargestIconSize(const QIcon &icon) const; + +}; +#endif // MOREOPTIONSBUTTONSTYLEHELPER_H \ No newline at end of file diff --git a/src/gui/pushbuttonstylehelper.cpp b/src/gui/pushbuttonstylehelper.cpp new file mode 100644 index 0000000000000..de087eaa98c31 --- /dev/null +++ b/src/gui/pushbuttonstylehelper.cpp @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** This file is part of the Oxygen2 project. +** +** SPDX-FileCopyrightText: 2022 Klarälvdalens Datakonsult AB, a KDAB Group company +** +** SPDX-License-Identifier: MIT +** +****************************************************************************/ + +#include "pushbuttonstylehelper.h" + + +#include "buttonstyle.h" +#include "buttonstylestrategy.h" +#include "ionostheme.h" +#include +#include +#include +#include +#include + +void PushButtonStyleHelper::setupPainterForShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget) +{ + OCC::ButtonStyle& style = ButtonStyleStrategy::getButtonStyle(widget, option); + + // Disabled + if (!(option->state & QStyle::State_Enabled)) { + painter->setPen(QColor(style.buttonDisabledBorderColor())); + painter->setBrush(QColor(style.buttonDisabledColor())); + } + //Pressed + else if (option->state & QStyle::State_Sunken) { + + painter->setPen(QColor(style.buttonPressedBorderColor())); + painter->setBrush(QColor(style.buttonPressedColor())); + } + // Hover + else if(option->state & QStyle::State_MouseOver) + { + painter->setPen(QColor(style.buttonHoverBorderColor())); + painter->setBrush(QColor(style.buttonHoverColor())); + } + // Focused + else if (option->state & QStyle::State_HasFocus) { + painter->setPen(QColor(style.buttonFocusedBorderColor())); + painter->setBrush(QColor(style.buttonFocusedColor())); + } + // Else - Just beeing there + else { + painter->setPen(QColor(style.buttonDefaultBorderColor())); + painter->setBrush(QColor(style.buttonDefaultColor())); + } +} + +void PushButtonStyleHelper::drawButtonShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget) +{ + painter->save(); + painter->setRenderHints(QPainter::Antialiasing); + setupPainterForShape(option, painter, widget); + const int radius = OCC::IonosTheme::buttonRadiusInt(); + painter->drawRoundedRect(option->rect, radius, radius); + painter->restore(); +} + +void PushButtonStyleHelper::setFont(QFont& font) const +{ + font.setWeight(OCC::IonosTheme::settingsTitleWeightDemiBold()); + font.setPixelSize(OCC::IonosTheme::settingsTextPixel()); +} + +void PushButtonStyleHelper::recalculateContentSize(QSize &contentsSize, const QWidget *widget) const +{ + QFont font = widget->font(); + setFont(font); + QFontMetrics fm(font); + + //Code aus qpushbutton.cpp - sizeHint + const QPushButton* pushButton = qobject_cast(widget); + int w = 0, h = 0; + QString s(pushButton->text()); + bool empty = s.isEmpty(); + if (empty) + s = QStringLiteral("XXXX"); + QSize sz = fm.size(Qt::TextShowMnemonic, s); + if (!empty || !w) + w += sz.width(); + if (!empty || !h) + h = qMax(h, sz.height()); + // -- end code + + contentsSize.setHeight(h); + contentsSize.setWidth(w); +} + +QSize PushButtonStyleHelper::sizeFromContents(const QStyleOptionButton *option, QSize contentsSize, const QWidget *widget, int margin) const +{ + Q_UNUSED(option) + Q_UNUSED(widget) + if(widget != nullptr) + { + recalculateContentSize(contentsSize, widget); + } + const int frameWidth = 2; // due to pen width 1 in drawButtonBevel, on each side + return QSize(qMax(80, contentsSize.width() + 2 * margin + frameWidth), qMin(40, contentsSize.height() + 2 * margin + frameWidth)); +} + +void PushButtonStyleHelper::adjustTextPalette(QStyleOptionButton *option, const QWidget *widget) const +{ + QColor textColor; + OCC::ButtonStyle& style = ButtonStyleStrategy::getButtonStyle(widget, option); + + // Disabled + if (!(option->state & QStyle::State_Enabled)) { + textColor = style.buttonDisabledFontColor(); + } + else + { + textColor = style.buttonFontColor(); + } + option->palette.setColor(QPalette::ButtonText, textColor); +} \ No newline at end of file diff --git a/src/gui/pushbuttonstylehelper.h b/src/gui/pushbuttonstylehelper.h new file mode 100644 index 0000000000000..cf9c23959599c --- /dev/null +++ b/src/gui/pushbuttonstylehelper.h @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** This file is part of the Oxygen2 project. +** +** SPDX-FileCopyrightText: 2022 Klarälvdalens Datakonsult AB, a KDAB Group company +** +** SPDX-License-Identifier: MIT +** +****************************************************************************/ + +#ifndef PUSHBUTTONSTYLEHELPER_H +#define PUSHBUTTONSTYLEHELPER_H + +#include + +class QPainter; +class QPushButton; +class QStyleOptionButton; +class QWidget; +class QPixmap; +class QColor; +class QFont; + +class PushButtonStyleHelper +{ +public: + void setupPainterForShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget); + void drawButtonShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget); + QSize sizeFromContents(const QStyleOptionButton *option, QSize contentsSize, const QWidget *widget, int margin) const; + void adjustTextPalette(QStyleOptionButton *option, const QWidget *widget) const; + void setFont(QFont& font) const; +private: + void recalculateContentSize(QSize &contentsSize, const QWidget *widget) const; + +}; +#endif // PUSHBUTTONSTYLEHELPER_H \ No newline at end of file diff --git a/src/gui/sesFileIconProvider.cpp b/src/gui/sesFileIconProvider.cpp new file mode 100644 index 0000000000000..99f96001b2fb1 --- /dev/null +++ b/src/gui/sesFileIconProvider.cpp @@ -0,0 +1,22 @@ +#include "sesfileiconprovider.h" + +#include +#include + +QIcon SesFileIconProvider::icon(const QFileInfo &info) const +{ + QFileIconProvider provider; + + if (info.isDir()) + { + return QIcon(":/client/theme/ses/ses-filesIconBright.svg"); + } + + if (info.suffix().isEmpty()) + { + return QIcon(":/client/theme/ses/ses-file.svg"); + } + + + return provider.icon(info); +}; \ No newline at end of file diff --git a/src/gui/sesFileIconProvider.h b/src/gui/sesFileIconProvider.h new file mode 100644 index 0000000000000..69d7454be7d3f --- /dev/null +++ b/src/gui/sesFileIconProvider.h @@ -0,0 +1,14 @@ +#ifndef SESFILEICONPROVIDER_H +#define SESFILEICONPROVIDER_H + +#include +#include +#include + +class SesFileIconProvider : public QFileIconProvider +{ +public: + QIcon icon(const QFileInfo &info) const override; +}; + +#endif // SESFILEICONPROVIDER_H \ No newline at end of file diff --git a/src/gui/sesstyle.cpp b/src/gui/sesstyle.cpp new file mode 100644 index 0000000000000..24e7baafcc116 --- /dev/null +++ b/src/gui/sesstyle.cpp @@ -0,0 +1,217 @@ +/**************************************************************************** +** +** This file is part of the Oxygen2 project. +** +** SPDX-FileCopyrightText: 2022 Klarälvdalens Datakonsult AB, a KDAB Group company +** +** SPDX-License-Identifier: MIT +** +****************************************************************************/ + +/************************************************************************* + * + * Copyright (c) 2013-2019, Klaralvdalens Datakonsult AB (KDAB) + * All rights reserved. + * + * See the LICENSE.txt file shipped along with this file for the license. + * + *************************************************************************/ + +#include "sesstyle.h" +#include "ionostheme.h" + +#include "pushbuttonstylehelper.h" +#include "moreoptionsbuttonstylehelper.h" + +#include +#include +#include +#include +#include + +sesStyle::sesStyle() + : super() + , mPushButtonStyleHelper(new PushButtonStyleHelper) + , mMoreOptionsButtonStyleHelper(new MoreOptionsButtonStyleHelper) +{ +} + +void sesStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *option, QPainter *painter, const QWidget *widget) const +{ + switch (pe) { + case PE_FrameFocusRect: + // nothing, we don't want focus rects + break; + #ifdef Q_OS_MAC + case PE_IndicatorBranch: + { + + QStyleOption optCopy = *option; + int originalWidth = optCopy.rect.width(); + int originalHeight = optCopy.rect.height(); + optCopy.rect.setWidth(static_cast(originalWidth * 0.5)); + optCopy.rect.setHeight(static_cast(originalHeight * 0.5)); + optCopy.rect.translate(5, 5); + + if (!(option->state & State_Children)) + break; + if (option->state & State_Open) + drawPrimitive(PE_IndicatorArrowDown, &optCopy, painter, widget); + else { + const bool reverse = (option->direction == Qt::RightToLeft); + drawPrimitive(reverse ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight, &optCopy, painter, widget); + } + break; + } + #endif + default: + super::drawPrimitive(pe, option, painter, widget); + break; + } +} + +int sesStyle::pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const +{ + switch (metric) { + case PM_ButtonShiftHorizontal: + case PM_ButtonShiftVertical: + return 0; // no shift + case PM_ButtonMargin: + return 16; + default: + return super::pixelMetric(metric, option, widget); + } +} + +void sesStyle::drawButton(const QStyleOptionButton *btn, QPainter *painter, const QWidget *widget) const { + proxy()->drawControl(CE_PushButtonBevel, btn, painter, widget); + QStyleOptionButton subopt = *btn; + subopt.rect = subElementRect(SE_PushButtonContents, btn, widget); + proxy()->drawControl(CE_PushButtonLabel, &subopt, painter, widget); + if (btn->state & State_HasFocus) { + QStyleOptionFocusRect fropt; + fropt.QStyleOption::operator=(*btn); + fropt.rect = subElementRect(SE_PushButtonFocusRect, btn, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); + } +} + + +void sesStyle::drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const +{ + switch (element) { + case CE_TreeViewMoreOptions: + { + if (const auto *btn = qstyleoption_cast(option)) + { + // Bevel + mMoreOptionsButtonStyleHelper->drawToolButtonShape(btn, painter, widget); + + // Label / Icon + QStyleOptionButton subopt = *btn; + subopt.rect = subElementRect(SE_PushButtonContents, btn, widget); + mMoreOptionsButtonStyleHelper->adjustIconColor(&subopt, widget); + QCommonStyle::drawControl(CE_PushButtonLabel, &subopt, painter, widget); + } + return; + } + case CE_PushButton: + { + if (const auto *btn = qstyleoption_cast(option)) + { + drawButton(btn, painter, widget); + } + return; + } + case CE_PushButtonBevel: + if (const auto *optionButton = qstyleoption_cast(option)) + { + mPushButtonStyleHelper->drawButtonShape(optionButton, painter, widget); + } + return; + case CE_PushButtonLabel: + if (const auto *optionButton = qstyleoption_cast(option)) + { + QStyleOptionButton customStyleCopy = *optionButton; + mPushButtonStyleHelper->adjustTextPalette(&customStyleCopy, widget); + + painter->save(); + QFont font = painter->font(); + mPushButtonStyleHelper->setFont(font); + painter->setFont(font); + + QCommonStyle::drawControl(element, &customStyleCopy, painter, widget); + painter->restore(); + } + return; + default: + super::drawControl(element, option, painter, widget); + } +} + +void sesStyle::polish(QWidget *w) +{ + if (qobject_cast(w) || qobject_cast(w)) { + w->setAttribute(Qt::WA_Hover); + } + super::polish(w); +} + +bool sesStyle::eventFilter(QObject *obj, QEvent *event) +{ + return super::eventFilter(obj, event); +} + +PushButtonStyleHelper *sesStyle::pushButtonStyleHelper() const +{ + return mPushButtonStyleHelper.get(); +} + +int sesStyle::styleHint(StyleHint stylehint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const +{ + switch (stylehint) { + case SH_DialogButtonBox_ButtonsHaveIcons: + return 0; + default: + break; + } + + return super::styleHint(stylehint, option, widget, returnData); +} + +QSize sesStyle::sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget) const +{ + switch (type) { + case CT_PushButton: + if (const auto *buttonOption = qstyleoption_cast(option)) { + return mPushButtonStyleHelper->sizeFromContents(buttonOption, contentsSize, widget, pixelMetric(PM_ButtonMargin, buttonOption, widget)); + } + break; + case CT_TreeViewMoreOptions: + { + if (const auto *buttonOption = qstyleoption_cast(option)) { + return super::sizeFromContents(CT_ToolButton, option, contentsSize, widget); + } + break; + } + default: + break; + } + return super::sizeFromContents(type, option, contentsSize, widget); +} + +QRect sesStyle::subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget) const +{ + switch (subElement) { + default: + return super::subElementRect(subElement, option, widget); + } +} + +void sesStyle::drawComplexControl(ComplexControl complexControl, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const +{ + switch (complexControl) { + default: + super::drawComplexControl(complexControl, option, painter, widget); + } +} \ No newline at end of file diff --git a/src/gui/sesstyle.h b/src/gui/sesstyle.h new file mode 100644 index 0000000000000..9f9e053dab36c --- /dev/null +++ b/src/gui/sesstyle.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** This file is part of the Oxygen2 project. +** +** SPDX-FileCopyrightText: 2022 Klarälvdalens Datakonsult AB, a KDAB Group company +** +** SPDX-License-Identifier: MIT +** +****************************************************************************/ + +/************************************************************************* + * + * Copyright (c) 2013-2019, Klaralvdalens Datakonsult AB (KDAB) + * All rights reserved. + * + * See the LICENSE.txt file shipped along with this file for the license. + * + *************************************************************************/ +#pragma once + +#include +#include +#include + +class PushButtonStyleHelper; + +// QProxyStyle to see all widgets in an application (even if it means mixing with the default style) +// QCommonStyle to only see what we have styled, no bad interactions from the default style, but the other widgets won't be usable +using super = QProxyStyle; + +class sesStyle : public super +{ +public: + enum CustomControlElement { + CE_TreeViewMoreOptions = QStyle::CE_CustomBase + 1, // Custom element for a button + }; + + enum CustomContentsType { + CT_TreeViewMoreOptions = QStyle::CT_CustomBase + 1, // Custom element for a button + }; + + sesStyle(); + + void drawPrimitive(PrimitiveElement pe, const QStyleOption *option, QPainter *painter, + const QWidget *widget = nullptr) const override; + + int pixelMetric(PixelMetric pm, const QStyleOption *option = nullptr, + const QWidget *widget = nullptr) const override; + + void drawButton(const QStyleOptionButton *btn, QPainter *painter, const QWidget *widget) const; + + void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, + const QWidget *widget = nullptr) const override; + + void drawComplexControl(ComplexControl complexControl, const QStyleOptionComplex *opt, QPainter *painter, + const QWidget *widget = nullptr) const override; + + int styleHint(StyleHint stylehint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const override; + + QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget) const override; + + QRect subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget) const override; + + void polish(QWidget *w) override; + + bool eventFilter(QObject *obj, QEvent *event) override; + + + PushButtonStyleHelper* pushButtonStyleHelper() const; + +private: + std::unique_ptr mPushButtonStyleHelper; + std::unique_ptr mMoreOptionsButtonStyleHelper; + +}; \ No newline at end of file From 7c9a22e01a59505d6b476c459117d4bd2dd703db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 16 Jan 2025 14:12:52 +0100 Subject: [PATCH 012/359] Merge Fix --- resources.qrc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources.qrc b/resources.qrc index 6f69c28663140..0e1056bb2df92 100644 --- a/resources.qrc +++ b/resources.qrc @@ -69,7 +69,9 @@ src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml src/gui/SesComponents/SesErrorBox.qml src/gui/SesComponents/SesTrayHeader.qml + src/gui/tray/TrayWindowAccountMenu.qml src/gui/tray/SesCustomButton.qml src/gui/tray/SesButtonContents.qml + src/gui/tray/AccountMenuItem.qml From 5db17c853117ab44f08ff1f59781f00486ec5dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 16 Jan 2025 14:19:30 +0100 Subject: [PATCH 013/359] style activity view and shares view 3cd6e826d113bbaa969a5bb176d811068b9370b2 --- src/gui/filedetails/FileDetailsPage.qml | 96 +-- src/gui/filedetails/FileDetailsView.qml | 2 +- src/gui/filedetails/FileDetailsWindow.qml | 3 - src/gui/filedetails/NCInputTextArea.qml | 5 + src/gui/filedetails/NCInputTextField.qml | 8 + src/gui/filedetails/ShareDelegate.qml | 80 +- src/gui/filedetails/ShareDetailsPage.qml | 872 ++++++++++++---------- src/gui/filedetails/ShareView.qml | 28 +- src/gui/filedetails/ShareeDelegate.qml | 3 + src/gui/filedetails/ShareeSearchField.qml | 16 +- src/gui/filedetails/shareemodel.cpp | 2 +- src/gui/filedetails/sharemodel.cpp | 6 +- src/gui/filedetails/sortedsharemodel.cpp | 2 +- 13 files changed, 633 insertions(+), 490 deletions(-) diff --git a/src/gui/filedetails/FileDetailsPage.qml b/src/gui/filedetails/FileDetailsPage.qml index e7de4a4253527..4f45650c556ba 100644 --- a/src/gui/filedetails/FileDetailsPage.qml +++ b/src/gui/filedetails/FileDetailsPage.qml @@ -45,7 +45,11 @@ Page { localPath: root.localPath } - Connections { + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontNormalWeight + + Connections { target: Systray function onShowFileDetailsPage(fileLocalPath, page) { if (!root.fileDetails.sharingAvailable && page == Systray.FileDetailsPage.Sharing) { @@ -69,12 +73,12 @@ Page { bottomPadding: intendedPadding background: Rectangle { - color: palette.base + color: palette.window visible: root.backgroundsVisible } header: ColumnLayout { - spacing: root.intendedPadding + spacing: Style.sesMediumMargin GridLayout { id: headerGridLayout @@ -107,15 +111,15 @@ Page { id: fileIcon Layout.rowSpan: headerGridLayout.rows - Layout.preferredWidth: Style.trayListItemIconSize - Layout.leftMargin: root.intendedPadding + Layout.preferredWidth: Style.sesFileDetailsIconSize + Layout.leftMargin: Style.sesMediumMargin Layout.fillHeight: true verticalAlignment: Image.AlignVCenter horizontalAlignment: Image.AlignHCenter source: root.fileDetails.iconUrl - sourceSize.width: Style.trayListItemIconSize - sourceSize.height: Style.trayListItemIconSize + sourceSize.width: Style.sesFileDetailsIconSize + sourceSize.height: Style.sesFileDetailsIconSize fillMode: Image.PreserveAspectFit } @@ -123,26 +127,34 @@ Page { id: fileNameLabel Layout.fillWidth: true - Layout.rightMargin: headerGridLayout.textRightMargin + Layout.rightMargin: Style.sesFileDetailsHeaderModifier text: root.fileDetails.name - font.bold: true + + font.pixelSize: Style.sesFontPixelSizeTitle + font.weight: Style.sesFontBoldWeight + wrapMode: Text.Wrap } - Button { + SesCustomButton { id: closeButton Layout.rowSpan: headerGridLayout.rows - Layout.preferredWidth: Style.activityListButtonWidth - Layout.preferredHeight: Style.activityListButtonHeight - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + Layout.preferredWidth: Style.iconButtonWidth + Layout.preferredHeight: width Layout.rightMargin: headerGridLayout.textRightMargin icon.source: "image://svgimage-custom-color/clear.svg" + "/" + palette.buttonText - icon.width: Style.activityListButtonIconSize - icon.height: Style.activityListButtonIconSize + bgColor: palette.highlight + bgNormalOpacity: 0 + toolTipText: qsTr("Dismiss") + + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontNormalWeight + visible: root.showCloseButton + onClicked: root.closeButtonClicked() } @@ -150,9 +162,13 @@ Page { id: fileDetailsLabel Layout.fillWidth: true - Layout.rightMargin: headerGridLayout.textRightMargin + Layout.rightMargin: Style.sesFileDetailsHeaderModifier + + text: `${root.fileDetails.sizeString}, ${root.fileDetails.lastChangedString}` + + font.pixelSize: Style.sesFontHintPixelSize + font.weight: Style.sesFontNormalWeight - text: `${root.fileDetails.sizeString} · ${root.fileDetails.lastChangedString}` wrapMode: Text.Wrap } @@ -163,8 +179,12 @@ Page { Layout.rightMargin: headerGridLayout.textRightMargin text: root.fileDetails.lockExpireString + color: palette.midlight wrapMode: Text.Wrap visible: headerGridLayout.showFileLockedString + + font.pixelSize: Style.sesFontHintPixelSize + font.weight: Style.sesFontNormalWeight } Row { @@ -207,37 +227,13 @@ Page { ToolTip { visible: hoverHandler.hovered text: tagRepeater.fileTagModel.overflowTagsString + + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontNormalWeight } } } } - - TabBar { - id: viewBar - - Layout.leftMargin: root.intendedPadding - Layout.rightMargin: root.intendedPadding - - padding: 0 - background: null - - NCTabButton { - svgCustomColorSource: "image://svgimage-custom-color/activity.svg" - text: qsTr("Activity") - checked: swipeView.currentIndex === fileActivityView.swipeIndex - onClicked: swipeView.currentIndex = fileActivityView.swipeIndex - } - - NCTabButton { - width: visible ? implicitWidth : 0 - height: visible ? implicitHeight : 0 - svgCustomColorSource: "image://svgimage-custom-color/share.svg" - text: qsTr("Sharing") - checked: swipeView.currentIndex === shareViewLoader.swipeIndex - onClicked: swipeView.currentIndex = shareViewLoader.swipeIndex - visible: root.fileDetails.sharingAvailable - } - } } SwipeView { @@ -246,18 +242,6 @@ Page { anchors.fill: parent clip: true - FileActivityView { - id: fileActivityView - - readonly property int swipeIndex: SwipeView.index - - delegateHorizontalPadding: root.intendedPadding - - accountState: root.accountState - localPath: root.localPath - iconSize: root.iconSize - } - Loader { id: shareViewLoader diff --git a/src/gui/filedetails/FileDetailsView.qml b/src/gui/filedetails/FileDetailsView.qml index 6ce265f69e4c3..9413c16873612 100644 --- a/src/gui/filedetails/FileDetailsView.qml +++ b/src/gui/filedetails/FileDetailsView.qml @@ -31,7 +31,7 @@ StackView { property bool backgroundsVisible: true background: Rectangle { - color: palette.base + color: palette.window visible: root.backgroundsVisible } diff --git a/src/gui/filedetails/FileDetailsWindow.qml b/src/gui/filedetails/FileDetailsWindow.qml index f233149af1e2a..bc4a8f2f45f0e 100644 --- a/src/gui/filedetails/FileDetailsWindow.qml +++ b/src/gui/filedetails/FileDetailsWindow.qml @@ -26,9 +26,6 @@ ApplicationWindow { property var accountState property string localPath: "" - LayoutMirroring.enabled: Application.layoutDirection === Qt.RightToLeft - LayoutMirroring.childrenInherit: true - width: 400 height: 500 minimumWidth: 300 diff --git a/src/gui/filedetails/NCInputTextArea.qml b/src/gui/filedetails/NCInputTextArea.qml index 743400b05ab4f..4bdc32065c851 100644 --- a/src/gui/filedetails/NCInputTextArea.qml +++ b/src/gui/filedetails/NCInputTextArea.qml @@ -43,6 +43,11 @@ TextArea { width: height height: parent.height + + background: Rectangle { + radius: width / 2 + color: textFieldBorder.color + } flat: true icon.source: "image://svgimage-custom-color/confirm.svg" + "/" + root.secondaryColor diff --git a/src/gui/filedetails/NCInputTextField.qml b/src/gui/filedetails/NCInputTextField.qml index c45c1ea51d5bf..825f4c964db4a 100644 --- a/src/gui/filedetails/NCInputTextField.qml +++ b/src/gui/filedetails/NCInputTextField.qml @@ -32,6 +32,14 @@ TextField { rightPadding: submitButton.width selectByMouse: true + + background: Rectangle { + id: textFieldBorder + radius: Style.slightlyRoundedButtonRadius + border.width: Style.normalBorderWidth + border.color: root.activeFocus ? root.validInput ? root.accentColor : Style.errorBoxBackgroundColor : root.secondaryColor + color: palette.base + } Button { id: submitButton diff --git a/src/gui/filedetails/ShareDelegate.qml b/src/gui/filedetails/ShareDelegate.qml index 73b33ff00dd76..6cce8317df80a 100644 --- a/src/gui/filedetails/ShareDelegate.qml +++ b/src/gui/filedetails/ShareDelegate.qml @@ -49,7 +49,7 @@ GridLayout { property FileDetails fileDetails: FileDetails {} property StackView rootStackView: StackView {} property bool backgroundsVisible: true - property color accentColor: Style.ncBlue + property color accentColor: Style.sesIconColor property bool canCreateLinkShares: true property bool serverAllowsResharing: true @@ -139,6 +139,7 @@ GridLayout { Layout.column: 1 text: root.detailText + elide: Text.ElideRight visible: text !== "" } @@ -151,17 +152,22 @@ GridLayout { spacing: 0 - Button { + SesCustomButton { id: createLinkButton Layout.alignment: Qt.AlignCenter - Layout.preferredWidth: Style.activityListButtonWidth - Layout.preferredHeight: Style.activityListButtonHeight + Layout.preferredWidth: Style.iconButtonWidth + Layout.preferredHeight: width + + toolTipText: qsTr("Create a new share link") - icon.source: "image://svgimage-custom-color/add.svg/" + palette.buttonText - icon.width: Style.activityListButtonIconSize - icon.height: Style.activityListButtonIconSize - display: AbstractButton.IconOnly + bgColor: palette.highlight + bgNormalOpacity: 0 + + icon.source: Style.sesLightPlus + palette.buttonText + icon.width: Style.smallIconSize + icon.height: Style.smallIconSize + // display: AbstractButton.IconOnly visible: (root.isPlaceholderLinkShare || root.isSecureFileDropPlaceholderLinkShare) && root.canCreateLinkShares enabled: visible @@ -169,7 +175,7 @@ GridLayout { onClicked: root.createNewLinkShare() } - Button { + SesCustomButton { id: copyLinkButton function copyShareLink() { @@ -184,19 +190,27 @@ GridLayout { property bool shareLinkCopied: false - Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter - Layout.preferredWidth: shareLinkCopied ? implicitWidth : Style.activityListButtonWidth - Layout.preferredHeight: Style.activityListButtonHeight + Layout.alignment: Qt.AlignCenter + Layout.preferredWidth: shareLinkCopied ? implicitWidth : Style.iconButtonWidth + Layout.preferredHeight: Style.iconButtonWidth + + toolTipText: qsTr("Copy share link location") text: shareLinkCopied ? qsTr("Copied!") : "" + textColor: Style.sesDarkGreen + + bgColor: palette.highlight + bgNormalOpacity: 0 + + icon.source: shareLinkCopied ? Style.sesGreenCheckmark + Style.positiveColor : + Style.sesClipboard + palette.brightText + + icon.width: Style.smallIconSize + icon.height: Style.smallIconSize - icon.source: shareLinkCopied ? "image://svgimage-custom-color/copy.svg/" + palette.brightText : - "image://svgimage-custom-color/copy.svg/" + palette.buttonText - icon.width: Style.activityListButtonIconSize - icon.height: Style.activityListButtonIconSize - display: AbstractButton.IconOnly visible: root.isLinkShare || root.isInternalLinkShare enabled: visible + onClicked: copyShareLink() Behavior on Layout.preferredWidth { @@ -215,19 +229,35 @@ GridLayout { } } - Button { + SesCustomButton { id: moreButton - Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter - Layout.preferredWidth: Style.activityListButtonWidth - Layout.preferredHeight: Style.activityListButtonHeight + property bool isHovered: moreButton.hovered || moreButton.visualFocus + property bool isActive: moreButton.pressed + + Layout.alignment: Qt.AlignCenter + Layout.preferredWidth: Style.iconButtonWidth + Layout.preferredHeight: width + + toolTipText: qsTr("Share options") + + bgColor: palette.highlight + bgNormalOpacity: 0 + + icon.source: "image://svgimage-custom-color/more.svg/" + (moreButton.isActive || moreButton.isHovered ? Style.sesWhite : Style.sesIconColor) + icon.width: Style.smallIconSize + icon.height: Style.smallIconSize - icon.source: "image://svgimage-custom-color/more.svg/" + palette.buttonText - icon.width: Style.activityListButtonIconSize - icon.height: Style.activityListButtonIconSize - display: AbstractButton.IconOnly visible: !root.isPlaceholderLinkShare && !root.isSecureFileDropPlaceholderLinkShare && !root.isInternalLinkShare enabled: visible + + background: Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: moreButton.isActive ? Style.sesActionPressed : moreButton.isHovered ? Style.sesActionHover : "transparent" + radius: width / 2 + } + onClicked: root.rootStackView.push(shareDetailsPageComponent, {}, StackView.PushTransition) Component { diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 5b7bf62d02aab..ec8e324c365e5 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -21,6 +21,7 @@ import Qt5Compat.GraphicalEffects import com.ionos.hidrivenext.desktopclient import Style import "../tray" +import "../SesComponents/" import "../" Page { @@ -43,6 +44,11 @@ Page { signal setPassword(string password) signal setNote(string note) + + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontNormalWeight + property bool backgroundsVisible: true property color accentColor: Style.ncBlue @@ -94,6 +100,16 @@ Page { property bool waitingForPasswordChange: false property bool waitingForNoteChange: false + readonly property int titlePixelSize: Style.sesFontPixelSizeTitle + readonly property int titleFontWeight: Style.sesFontNormalWeight + + readonly property int hintPixelSize: Style.sesFontHintPixelSize + readonly property int hintFontWeight: Style.sesFontNormalWeight + + + readonly property int pixelSize: Style.sesFontPixelSize + readonly property int fontWeight: Style.sesFontNormalWeight + function showPasswordSetError(message) { passwordErrorBoxLoader.message = message !== "" ? message : qsTr("An error occurred setting the share password."); @@ -105,8 +121,8 @@ Page { } function resetLinkShareLabelField() { - linkShareLabelTextField.text = linkShareLabel; - waitingForLinkShareLabelChange = false; + // linkShareLabelTextField.text = linkShareLabel; + // waitingForLinkShareLabelChange = false; } function resetPasswordField() { @@ -210,38 +226,50 @@ Page { } EnforcedPlainTextLabel { - id: headLabel + id: fileNameLabel Layout.fillWidth: true + Layout.rightMargin: headerGridLayout.textRightMargin - text: qsTr("Edit share") - font.bold: true - elide: Text.ElideRight + text: root.fileDetails.name + + font.pixelSize: titlePixelSize + font.weight: titleFontWeight + + wrapMode: Text.Wrap } - Button { - id: closeButton + SesCustomButton { + id: placeholder Layout.rowSpan: headerGridLayout.rows - Layout.preferredWidth: Style.activityListButtonWidth - Layout.preferredHeight: Style.activityListButtonHeight - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + Layout.preferredWidth: Style.iconButtonWidth + Layout.preferredHeight: width Layout.rightMargin: root.padding icon.source: "image://svgimage-custom-color/clear.svg" + "/" + palette.buttonText - icon.width: Style.activityListButtonIconSize - icon.height: Style.activityListButtonIconSize + bgColor: palette.highlight + bgNormalOpacity: 0 + toolTipText: qsTr("Dismiss") + + font.pixelSize: pixelSize + font.weight: fontWeight + + onClicked: root.closeShareDetails() } EnforcedPlainTextLabel { - id: secondaryLabel + id: fileDetailsLabel Layout.fillWidth: true - Layout.rightMargin: root.padding + Layout.rightMargin: headerGridLayout.textRightMargin - text: root.fileDetails.name + text: `${root.fileDetails.sizeString}, ${root.fileDetails.lastChangedString}` wrapMode: Text.Wrap + + font.pixelSize: hintPixelSize + font.weight: hintFontWeight } } } @@ -259,198 +287,7 @@ Page { readonly property int itemPadding: Style.smallSpacing width: parent.width - spacing: Style.smallSpacing - - RowLayout { - Layout.fillWidth: true - height: visible ? implicitHeight : 0 - spacing: scrollContentsColumn.indicatorSpacing - - visible: root.isLinkShare - - Image { - Layout.preferredWidth: scrollContentsColumn.indicatorItemWidth - Layout.fillHeight: true - - verticalAlignment: Image.AlignVCenter - horizontalAlignment: Image.AlignHCenter - fillMode: Image.Pad - - source: "image://svgimage-custom-color/edit.svg/" + palette.windowText - sourceSize.width: scrollContentsColumn.rowIconWidth - sourceSize.height: scrollContentsColumn.rowIconWidth - } - - NCInputTextField { - id: linkShareLabelTextField - - Layout.fillWidth: true - height: visible ? implicitHeight : 0 - - text: root.linkShareLabel - placeholderText: qsTr("Share label") - - enabled: root.isLinkShare && - !root.waitingForLinkShareLabelChange - - onAccepted: if(text !== root.linkShareLabel) { - root.setLinkShareLabel(text); - root.waitingForLinkShareLabelChange = true; - } - - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForLinkShareLabelChange - running: visible - z: 1 - } - } - } - - Loader { - Layout.fillWidth: true - active: !root.isFolderItem && !root.isEncryptedItem - visible: active - sourceComponent: CheckBox { - spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding - indicator.width: scrollContentsColumn.indicatorItemWidth - indicator.height: scrollContentsColumn.indicatorItemWidth - - checkable: true - checked: root.editingAllowed - text: qsTr("Allow upload and editing") - enabled: !root.isSharePermissionChangeInProgress - - onClicked: root.toggleAllowEditing(checked) - - NCBusyIndicator { - anchors.fill: parent - visible: root.isSharePermissionChangeInProgress - running: visible - z: 1 - } - } - } - Loader { - Layout.fillWidth: true - active: root.isFolderItem && !root.isEncryptedItem - visible: active - sourceComponent: ColumnLayout { - id: permissionRadioButtonsLayout - spacing: Layout.smallSpacing - width: parent.width - - ButtonGroup { - id: permissionModeRadioButtonsGroup - } - - RadioButton { - readonly property int permissionMode: ShareModel.ModeViewOnly - Layout.fillWidth: true - ButtonGroup.group: permissionModeRadioButtonsGroup - enabled: !root.isSharePermissionChangeInProgress - checked: root.currentPermissionMode === permissionMode - text: qsTr("View only") - spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding - onClicked: root.permissionModeChanged(permissionMode) - } - - RadioButton { - readonly property int permissionMode: ShareModel.ModeUploadAndEditing - Layout.fillWidth: true - ButtonGroup.group: permissionModeRadioButtonsGroup - enabled: !root.isSharePermissionChangeInProgress - checked: root.currentPermissionMode === permissionMode - text: qsTr("Allow upload and editing") - spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding - onClicked: root.permissionModeChanged(permissionMode) - } - - RadioButton { - readonly property int permissionMode: ShareModel.ModeFileDropOnly - Layout.fillWidth: true - ButtonGroup.group: permissionModeRadioButtonsGroup - enabled: !root.isSharePermissionChangeInProgress - checked: root.currentPermissionMode === permissionMode - text: qsTr("File drop (upload only)") - spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding - onClicked: root.permissionModeChanged(permissionMode) - } - - CheckBox { - id: allowResharingCheckBox - - Layout.fillWidth: true - - spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding - indicator.width: scrollContentsColumn.indicatorItemWidth - indicator.height: scrollContentsColumn.indicatorItemWidth - - checkable: true - checked: root.resharingAllowed - text: qsTr("Allow resharing") - enabled: !root.isSharePermissionChangeInProgress && root.serverAllowsResharing - visible: root.serverAllowsResharing - onClicked: root.toggleAllowResharing(checked); - - Connections { - target: root - onResharingAllowedChanged: allowResharingCheckBox.checked = root.resharingAllowed - } - } - } - - NCBusyIndicator { - anchors.fill: parent - visible: root.isSharePermissionChangeInProgress - running: visible - z: 1 - } - } - - Loader { - Layout.fillWidth: true - - active: root.isLinkShare - visible: active - sourceComponent: ColumnLayout { - CheckBox { - id: hideDownloadEnabledMenuItem - - anchors.left: parent.left - anchors.right: parent.right - - spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding - indicator.width: scrollContentsColumn.indicatorItemWidth - indicator.height: scrollContentsColumn.indicatorItemWidth - - checked: root.hideDownload - text: qsTr("Hide download") - enabled: !root.isHideDownloadInProgress - onClicked: root.toggleHideDownload(checked); - - NCBusyIndicator { - anchors.fill: parent - visible: root.isHideDownloadInProgress - running: visible - z: 1 - } - } - } - } CheckBox { id: passwordProtectEnabledMenuItem @@ -458,8 +295,7 @@ Page { Layout.fillWidth: true spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding + padding: scrollContentsColumn.itemPadding indicator.width: scrollContentsColumn.indicatorItemWidth indicator.height: scrollContentsColumn.indicatorItemWidth @@ -475,62 +311,6 @@ Page { root.togglePasswordProtect(checked); root.waitingForPasswordProtectEnabledChange = true; } - - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForPasswordProtectEnabledChange - running: visible - z: 1 - } - } - - RowLayout { - Layout.fillWidth: true - - height: visible ? implicitHeight : 0 - spacing: scrollContentsColumn.indicatorSpacing - - visible: root.shareSupportsPassword && root.passwordProtectEnabled - - Image { - Layout.preferredWidth: scrollContentsColumn.indicatorItemWidth - Layout.fillHeight: true - - verticalAlignment: Image.AlignVCenter - horizontalAlignment: Image.AlignHCenter - fillMode: Image.Pad - - source: "image://svgimage-custom-color/lock-https.svg/" + palette.windowText - sourceSize.width: scrollContentsColumn.rowIconWidth - sourceSize.height: scrollContentsColumn.rowIconWidth - } - - NCInputTextField { - id: passwordTextField - - Layout.fillWidth: true - height: visible ? implicitHeight : 0 - - text: root.password !== "" ? root.password : root.passwordPlaceholder - enabled: visible && - root.passwordProtectEnabled && - !root.waitingForPasswordChange && - !root.waitingForPasswordProtectEnabledChange - - onAccepted: if(text !== root.password && text !== root.passwordPlaceholder) { - passwordErrorBoxLoader.message = ""; - root.setPassword(text); - root.waitingForPasswordChange = true; - } - - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForPasswordChange || - root.waitingForPasswordProtectEnabledChange - running: visible - z: 1 - } - } } Loader { @@ -551,7 +331,7 @@ Page { // Artificially add vertical padding implicitHeight: passwordErrorBox.implicitHeight + (Style.smallSpacing * 2) - ErrorBox { + SesErrorBox { id: passwordErrorBox anchors.left: parent.left anchors.right: parent.right @@ -562,14 +342,53 @@ Page { } } + TextEdit { + id: passwordTextEdit + visible: root.passwordProtectEnabled + Layout.fillWidth: true + Layout.leftMargin: 3 + Layout.rightMargin: 3 + height: visible ? 64 : 0 + wrapMode: TextEdit.Wrap + selectByMouse: true + text: root.password !== "" ? root.password : root.passwordPlaceholder + + font.family: root.font.family + font.pixelSize: pixelSize + font.weight: fontWeight + + padding: scrollContentsColumn.itemPadding + enabled: visible && + root.passwordProtectEnabled && + !root.waitingForPasswordChange && + !root.waitingForPasswordProtectEnabledChange + + onEditingFinished: if(text !== root.password && text !== root.passwordPlaceholder) { + passwordErrorBoxLoader.message = ""; + root.setPassword(text); + root.waitingForPasswordChange = true; + } + + Rectangle { + id: passwordTextBorder + anchors.fill: parent + radius: Style.slightlyRoundedButtonRadius + border.width: Style.thickBorderWidth + border.color: Style.sesTrayInputField + color: palette.base + z: -1 + } + } + CheckBox { id: expireDateEnabledMenuItem Layout.fillWidth: true + font.pixelSize: pixelSize + font.weight: fontWeight spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding + padding: scrollContentsColumn.itemPadding indicator.width: scrollContentsColumn.indicatorItemWidth indicator.height: scrollContentsColumn.indicatorItemWidth @@ -582,79 +401,95 @@ Page { root.toggleExpirationDate(checked); root.waitingForExpireDateEnabledChange = true; } - - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForExpireDateEnabledChange - running: visible - z: 1 - } } - RowLayout { + NCInputDateField { + id: expireDateField + + font.pixelSize: pixelSize + font.weight: fontWeight + Layout.fillWidth: true + Layout.leftMargin: 3 + Layout.rightMargin: 3 height: visible ? implicitHeight : 0 - spacing: scrollContentsColumn.indicatorSpacing + leftPadding: 15 visible: root.expireDateEnabled - Image { - Layout.preferredWidth: scrollContentsColumn.indicatorItemWidth - Layout.fillHeight: true - - verticalAlignment: Image.AlignVCenter - horizontalAlignment: Image.AlignHCenter - fillMode: Image.Pad - - source: "image://svgimage-custom-color/calendar.svg/" + palette.windowText - sourceSize.width: scrollContentsColumn.rowIconWidth - sourceSize.height: scrollContentsColumn.rowIconWidth + selectByMouse: true + + dateInMs: root.expireDate + maximumDateMs: root.maximumExpireDate + minimumDateMs: { + const currentDate = new Date(); + const currentYear = currentDate.getFullYear(); + const currentMonth = currentDate.getMonth(); + const currentMonthDay = currentDate.getDate(); + // Start of day at 00:00:0000 UTC + return Date.UTC(currentYear, currentMonth, currentMonthDay + 1); } - NCInputDateField { - id: expireDateField - - Layout.fillWidth: true - height: visible ? implicitHeight : 0 - - dateInMs: root.expireDate - maximumDateMs: root.maximumExpireDate - minimumDateMs: { - const currentDate = new Date(); - const currentYear = currentDate.getFullYear(); - const currentMonth = currentDate.getMonth(); - const currentMonthDay = currentDate.getDate(); - // Start of day at 00:00:0000 UTC - return Date.UTC(currentYear, currentMonth, currentMonthDay + 1); - } - - enabled: root.expireDateEnabled && - !root.waitingForExpireDateChange && - !root.waitingForExpireDateEnabledChange + enabled: root.expireDateEnabled && + !root.waitingForExpireDateChange && + !root.waitingForExpireDateEnabledChange - onUserAcceptedDate: { - root.setExpireDate(dateInMs); - root.waitingForExpireDateChange = true; - } + onUserAcceptedDate: { + root.setExpireDate(dateInMs); + root.waitingForExpireDateChange = true; + } - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForExpireDateEnabledChange || - root.waitingForExpireDateChange - running: visible - z: 1 - } + Rectangle { + id: dateTextBorder + anchors.fill: parent + radius: Style.slightlyRoundedButtonRadius + border.width: Style.thickBorderWidth + border.color: Style.sesTrayInputField + color: palette.base + z: -1 } } + + ColumnLayout { + Layout.fillWidth: true + height: visible ? implicitHeight : 0 + spacing: Style.extraSmallSpacing CheckBox { id: noteEnabledMenuItem Layout.fillWidth: true + // TODO: Rather than setting all these palette colours manually, + // create a custom style and do it for all components globally. + // + // Additionally, we need to override the entire palette when we + // set one palette property, as otherwise we default back to the + // theme palette -- not the parent palette + palette { + text: Style.ncTextColor + windowText: Style.ncTextColor + buttonText: Style.ncTextColor + brightText: Style.ncTextBrightColor + highlight: Style.lightHover + highlightedText: Style.ncTextColor + light: Style.lightHover + midlight: Style.ncSecondaryTextColor + mid: Style.darkerHover + dark: Style.menuBorder + button: Style.buttonBackgroundColor + window: Style.menuBorder + base: Style.backgroundColor + toolTipBase: Style.backgroundColor + toolTipText: Style.ncTextColor + } + + font.pixelSize: pixelSize + font.weight: fontWeight + + spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding + padding: scrollContentsColumn.itemPadding indicator.width: scrollContentsColumn.indicatorItemWidth indicator.height: scrollContentsColumn.indicatorItemWidth @@ -669,92 +504,339 @@ Page { root.waitingForNoteChange = true; } } + } + + Text{ + text: qsTr("Enter the note to recipient") + color: Style.sesGray + padding: scrollContentsColumn.itemPadding + visible: root.noteEnabled + font.family: root.font.family + font.pixelSize: pixelSize + font.weight: fontWeight + } - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForNoteChange && !noteEnabledMenuItem.checked - running: visible - z: 1 + TextEdit { + id: noteTextEdit + visible: root.noteEnabled + font.family: root.font.family + font.pixelSize: pixelSize + font.weight: fontWeight + Layout.fillWidth: true + Layout.leftMargin: 3 + Layout.rightMargin: 3 + height: visible ? 64 : 0 + wrapMode: TextEdit.Wrap + selectByMouse: true + padding: scrollContentsColumn.itemPadding + enabled: root.noteEnabled && + !root.waitingForNoteChange && + !root.waitingForNoteEnabledChange + + onEditingFinished: if(text !== "") { + root.setNote(text); + root.waitingForNoteChange = true; + } + + Rectangle { + id: noteTextBorder + anchors.fill: parent + radius: Style.slightlyRoundedButtonRadius + border.width: Style.thickBorderWidth + border.color: Style.sesTrayInputField + color: palette.base + z: -1 + } } - } + } - RowLayout { + Loader { Layout.fillWidth: true - height: visible ? implicitHeight : 0 - spacing: scrollContentsColumn.indicatorSpacing + active: !root.isFolderItem && !root.isEncryptedItem + visible: active + sourceComponent: CheckBox { + // TODO: Rather than setting all these palette colours manually, + // create a custom style and do it for all components globally. + // + // Additionally, we need to override the entire palette when we + // set one palette property, as otherwise we default back to the + // theme palette -- not the parent palette + palette { + text: Style.ncTextColor + windowText: Style.ncTextColor + buttonText: Style.ncTextColor + brightText: Style.ncTextBrightColor + highlight: Style.lightHover + highlightedText: Style.ncTextColor + light: Style.lightHover + midlight: Style.ncSecondaryTextColor + mid: Style.darkerHover + dark: Style.menuBorder + button: Style.buttonBackgroundColor + window: Style.menuBorder + base: Style.backgroundColor + toolTipBase: Style.backgroundColor + toolTipText: Style.ncTextColor + } - visible: noteEnabledMenuItem.checked + font.pixelSize: pixelSize + font.weight: fontWeight - Image { - Layout.preferredWidth: scrollContentsColumn.indicatorItemWidth - Layout.fillHeight: true + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth - verticalAlignment: Image.AlignVCenter - horizontalAlignment: Image.AlignHCenter - fillMode: Image.Pad + checkable: true + checked: root.editingAllowed + text: qsTr("Allow upload and editing") + enabled: !root.isSharePermissionChangeInProgress - source: "image://svgimage-custom-color/edit.svg/" + palette.windowText - sourceSize.width: scrollContentsColumn.rowIconWidth - sourceSize.height: scrollContentsColumn.rowIconWidth + onClicked: root.toggleAllowEditing(checked) } + } - NCInputTextArea { - id: noteTextArea + Loader { + Layout.fillWidth: true + active: root.isFolderItem && !root.isEncryptedItem + visible: active + sourceComponent: ColumnLayout { + id: permissionRadioButtonsLayout + spacing: 0 + width: parent.width - Layout.fillWidth: true - // no height here -- let the textarea figure it out how much it needs - submitButton.height: Math.min(Style.talkReplyTextFieldPreferredHeight, height - 2) + ButtonGroup { + id: permissionModeRadioButtonsGroup + } - text: root.note - placeholderText: qsTr("Enter a note for the recipient") - enabled: noteEnabledMenuItem.checked && !root.waitingForNoteChange + CheckBox { + id: customPermissionsCheckBox + Layout.fillWidth: true + enabled: !root.isSharePermissionChangeInProgress + checked: root.currentPermissionMode === permissionMode + text: qsTr("Custom Permissions") + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth + onClicked: root.permissionModeChanged(permissionMode) + font.pixelSize: pixelSize + font.weight: fontWeight + } - onEditingFinished: if (text !== "" && text !== root.note) { - root.setNote(text); - root.waitingForNoteChange = true; + CheckBox { + readonly property int permissionMode: ShareModel.ModeViewOnly + Layout.fillWidth: true + Layout.leftMargin: 30 + ButtonGroup.group: permissionModeRadioButtonsGroup + enabled: !root.isSharePermissionChangeInProgress + checked: root.currentPermissionMode === permissionMode + text: qsTr("View only") + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + onClicked: root.permissionModeChanged(permissionMode) + visible: customPermissionsCheckBox.checked + font.pixelSize: pixelSize + font.weight: fontWeight } - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForNoteChange && noteEnabledMenuItem.checked - running: visible - z: 1 + CheckBox { + readonly property int permissionMode: ShareModel.ModeUploadAndEditing + Layout.fillWidth: true + Layout.leftMargin: 30 + ButtonGroup.group: permissionModeRadioButtonsGroup + enabled: !root.isSharePermissionChangeInProgress + checked: root.currentPermissionMode === permissionMode + text: qsTr("Allow upload and editing") + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + onClicked: root.permissionModeChanged(permissionMode) + visible: customPermissionsCheckBox.checked + font.pixelSize: pixelSize + font.weight: fontWeight + } + + CheckBox { + readonly property int permissionMode: ShareModel.ModeFileDropOnly + Layout.fillWidth: true + Layout.leftMargin: 30 + ButtonGroup.group: permissionModeRadioButtonsGroup + enabled: !root.isSharePermissionChangeInProgress + checked: root.currentPermissionMode === permissionMode + text: qsTr("File drop (upload only)") + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + onClicked: root.permissionModeChanged(permissionMode) + visible: customPermissionsCheckBox.checked + font.pixelSize: pixelSize + font.weight: fontWeight } } } - Button { - height: Style.standardPrimaryButtonHeight - icon.source: "image://svgimage-custom-color/close.svg/" + palette.buttonText - icon.height: Style.extraSmallIconSize - text: qsTr("Unshare") - onClicked: root.deleteShare() + CheckBox { + id: allowResharingCheckBox + + Layout.fillWidth: true + + // TODO: Rather than setting all these palette colours manually, + // create a custom style and do it for all components globally. + // + // Additionally, we need to override the entire palette when we + // set one palette property, as otherwise we default back to the + // theme palette -- not the parent palette + palette { + text: Style.ncTextColor + windowText: Style.ncTextColor + buttonText: Style.ncTextColor + brightText: Style.ncTextBrightColor + highlight: Style.lightHover + highlightedText: Style.ncTextColor + light: Style.lightHover + midlight: Style.ncSecondaryTextColor + mid: Style.darkerHover + dark: Style.menuBorder + button: Style.buttonBackgroundColor + window: palette.dark // NOTE: Fusion theme uses darker window colour for the border of the checkbox + base: Style.backgroundColor + toolTipBase: Style.backgroundColor + toolTipText: Style.ncTextColor + } + + font.pixelSize: pixelSize + font.weight: fontWeight + + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth + + checkable: true + checked: root.resharingAllowed + text: qsTr("Allow resharing") + enabled: !root.isSharePermissionChangeInProgress && root.serverAllowsResharing + visible: root.serverAllowsResharing + onClicked: root.toggleAllowResharing(checked); + + Connections { + target: root + onResharingAllowedChanged: allowResharingCheckBox.checked = root.resharingAllowed + } } - Button { - height: Style.standardPrimaryButtonHeight - icon.source: "image://svgimage-custom-color/add.svg/" + palette.buttonText - icon.height: Style.extraSmallIconSize - text: qsTr("Add another link") - visible: root.isLinkShare && root.canCreateLinkShares - enabled: visible - onClicked: root.createNewLinkShare() + Loader { + Layout.fillWidth: true + + active: root.isLinkShare + visible: active + sourceComponent: ColumnLayout { + CheckBox { + id: hideDownloadEnabledMenuItem + + anchors.left: parent.left + anchors.right: parent.right + + // TODO: Rather than setting all these palette colours manually, + // create a custom style and do it for all components globally. + // + // Additionally, we need to override the entire palette when we + // set one palette property, as otherwise we default back to the + // theme palette -- not the parent palette + palette { + text: Style.ncTextColor + windowText: Style.ncTextColor + buttonText: Style.ncTextColor + brightText: Style.ncTextBrightColor + highlight: Style.lightHover + highlightedText: Style.ncTextColor + light: Style.lightHover + midlight: Style.ncSecondaryTextColor + mid: Style.darkerHover + dark: Style.menuBorder + button: Style.buttonBackgroundColor + window: palette.dark // NOTE: Fusion theme uses darker window colour for the border of the checkbox + base: Style.backgroundColor + toolTipBase: Style.backgroundColor + toolTipText: Style.ncTextColor + } + + font.pixelSize: pixelSize + font.weight: fontWeight + + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth + + checked: root.hideDownload + text: qsTr("Hide download") + enabled: !root.isHideDownloadInProgress + onClicked: root.toggleHideDownload(checked); + } + } } } } - footer: DialogButtonBox { - topPadding: 0 - bottomPadding: root.padding - rightPadding: root.padding - leftPadding: root.padding - alignment: Qt.AlignRight | Qt.AlignVCenter - contentWidth: (contentItem as ListView).contentWidth - visible: copyShareLinkButton.visible + footer: GridLayout { + id: buttonGrid + + columns: 1 + rows: 2 + + SesCustomButton { + Layout.columnSpan: buttonGrid.columns - background: Rectangle { color: "transparent" } + icon.source: Style.sesLightPlus - Button { + font.pixelSize: pixelSize + font.weight: fontWeight + text: qsTr("Add another link") + textColor: palette.brightText + + bgColor: Style.sesActionPressed + bgNormalOpacity: 1.0 + bgHoverOpacity: Style.hoverOpacity + + visible: root.isLinkShare && root.canCreateLinkShares + enabled: visible + + Layout.leftMargin: 16 + Layout.bottomMargin: 16 + Layout.row: 0 + + onClicked: root.createNewLinkShare() + } + + SesCustomButton { + id: unshareButton + + font.pixelSize: pixelSize + font.weight: fontWeight + text: qsTr("Unshare") + textColor: Style.sesActionPressed + + bgColor: palette.highlight + bgNormalOpacity: 1.0 + + bgBorderWidth: 2 + bgBorderColor: Style.sesActionPressed + bgHoverOpacity: Style.hoverOpacity + + Layout.bottomMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 60 + Layout.row: 1 + onClicked: root.deleteShare() + } + + SesCustomButton { id: copyShareLinkButton function copyShareLink() { @@ -769,21 +851,35 @@ Page { property bool shareLinkCopied: false - height: Style.standardPrimaryButtonHeight - - Layout.preferredWidth: Style.activityListButtonWidth - Layout.preferredHeight: Style.activityListButtonHeight - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + icon.source: Style.sesClipboard - icon.source: "image://svgimage-custom-color/copy.svg/" + palette.brightText - icon.width: Style.smallIconSize - icon.height: Style.smallIconSize + font.pixelSize: pixelSize + font.weight: fontWeight text: shareLinkCopied ? qsTr("Share link copied!") : qsTr("Copy share link") + textColor: palette.brightText + + bgColor: Style.sesActionPressed + bgNormalOpacity: 1.0 + bgHoverOpacity: shareLinkCopied ? 1.0 : Style.hoverOpacity + visible: root.isLinkShare enabled: visible onClicked: copyShareLink() + Layout.alignment: Qt.AlignRight + Layout.bottomMargin: 16 + Layout.rightMargin: 20 + Layout.row: 1 + + Behavior on bgColor { + ColorAnimation { duration: Style.shortAnimationDuration } + } + + Behavior on bgHoverOpacity { + NumberAnimation { duration: Style.shortAnimationDuration } + } + Behavior on Layout.preferredWidth { SmoothedAnimation { duration: Style.shortAnimationDuration } } diff --git a/src/gui/filedetails/ShareView.qml b/src/gui/filedetails/ShareView.qml index f68529ec5e52b..1b5aa8d63dd6d 100644 --- a/src/gui/filedetails/ShareView.qml +++ b/src/gui/filedetails/ShareView.qml @@ -20,6 +20,7 @@ import QtQuick.Controls import com.ionos.hidrivenext.desktopclient import Style import "../tray" +import "../SesComponents" import "../" ColumnLayout { @@ -123,20 +124,14 @@ ColumnLayout { } } - ErrorBox { + SesErrorBox { id: errorBox Layout.fillWidth: true Layout.leftMargin: root.horizontalPadding Layout.rightMargin: root.horizontalPadding - showCloseButton: true visible: false - - onCloseButtonClicked: { - text = ""; - visible = false; - } } RowLayout { @@ -173,6 +168,7 @@ ColumnLayout { Layout.topMargin: Style.smallSpacing Layout.leftMargin: root.horizontalPadding Layout.rightMargin: root.horizontalPadding + Layout.preferredHeight: Style.sesSearchFieldHeight visible: root.userGroupSharingPossible enabled: visible && !root.loading && !root.shareModel.isShareDisabledEncryptedFolder && !shareeSearchField.isShareeFetchOngoing @@ -194,6 +190,7 @@ ColumnLayout { Layout.fillHeight: true Layout.leftMargin: root.horizontalPadding Layout.rightMargin: root.horizontalPadding + Layout.topMargin: Style.sesMediumMargin active: root.sharingPossible @@ -215,7 +212,9 @@ ColumnLayout { sourceModel: root.shareModel } - delegate: ShareDelegate { + delegate: ColumnLayout{ + width: parent.width + ShareDelegate { id: shareDelegate Connections { @@ -245,7 +244,7 @@ ColumnLayout { fileDetails: root.fileDetails rootStackView: root.rootStackView backgroundsVisible: root.backgroundsVisible - accentColor: root.accentColor + accentColor: Style.sesIconColor canCreateLinkShares: root.publicLinkSharingPossible serverAllowsResharing: root.serverAllowsResharing @@ -269,6 +268,14 @@ ColumnLayout { onSetExpireDate: shareModel.setShareExpireDateFromQml(model.share, milliseconds) onSetPassword: shareModel.setSharePasswordFromQml(model.share, password) onSetNote: shareModel.setShareNoteFromQml(model.share, note) + width: parent.width + } + + Rectangle{ + height: Style.sesMediumMargin + color: "transparent" + width: parent.width + } } Loader { @@ -311,6 +318,7 @@ ColumnLayout { id: sharingDisabledLabel width: parent.width text: qsTr("Sharing is disabled") + color: palette.midlight wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter @@ -318,6 +326,7 @@ ColumnLayout { EnforcedPlainTextLabel { width: parent.width text: qsTr("This item cannot be shared.") + color: palette.midlight wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter @@ -326,6 +335,7 @@ ColumnLayout { EnforcedPlainTextLabel { width: parent.width text: qsTr("Sharing is disabled.") + color: palette.midlight wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter diff --git a/src/gui/filedetails/ShareeDelegate.qml b/src/gui/filedetails/ShareeDelegate.qml index 03f07b5f826b2..5f8701544395d 100644 --- a/src/gui/filedetails/ShareeDelegate.qml +++ b/src/gui/filedetails/ShareeDelegate.qml @@ -62,6 +62,9 @@ ItemDelegate { Layout.preferredHeight: unifiedSearchResultSkeletonItemDetails.iconWidth Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontNormalWeight + Layout.fillWidth: true horizontalAlignment: Text.AlignLeft diff --git a/src/gui/filedetails/ShareeSearchField.qml b/src/gui/filedetails/ShareeSearchField.qml index 4fbaceb872f58..74aaf768f24cd 100644 --- a/src/gui/filedetails/ShareeSearchField.qml +++ b/src/gui/filedetails/ShareeSearchField.qml @@ -38,6 +38,7 @@ TextField { } readonly property int horizontalPaddingOffset: Style.trayHorizontalMargin + readonly property color placeholderColor: Style.sesSearchFieldContent readonly property double iconsScaleFactor: 0.6 function triggerSuggestionsVisibility() { @@ -45,9 +46,11 @@ TextField { } placeholderText: enabled ? qsTr("Search for users or groups…") : qsTr("Sharing is not available for this folder") + placeholderTextColor: placeholderColor verticalAlignment: Qt.AlignVCenter implicitHeight: Math.max(Style.talkReplyTextFieldPreferredHeight, contentHeight) + onActiveFocusChanged: triggerSuggestionsVisibility() onTextChanged: triggerSuggestionsVisibility() Keys.onPressed: { @@ -87,8 +90,15 @@ TextField { } } - leftPadding: searchIcon.width + searchIcon.anchors.leftMargin + horizontalPaddingOffset - rightPadding: clearTextButton.width + clearTextButton.anchors.rightMargin + horizontalPaddingOffset + leftPadding: searchIcon.width + searchIcon.anchors.leftMargin + horizontalPaddingOffset - 5 + rightPadding: root.text ? clearTextButton.width + clearTextButton.anchors.rightMargin + horizontalPaddingOffset : 5 + + background: Rectangle { + radius: 5 + border.color: Style.sesMenuBorder + border.width: 1 + + } Image { id: searchIcon @@ -107,7 +117,7 @@ TextField { fillMode: Image.PreserveAspectFit horizontalAlignment: Image.AlignLeft - source: "image://svgimage-custom-color/search.svg" + "/" + palette.placeholderText + source: "image://svgimage-custom-color/search.svg" + "/" + Style.sesSearchFieldContent sourceSize: Qt.size(parent.height * root.iconsScaleFactor, parent.height * root.iconsScaleFactor) visible: !root.shareeModel.fetchOngoing diff --git a/src/gui/filedetails/shareemodel.cpp b/src/gui/filedetails/shareemodel.cpp index 9710de710715b..9018bfa832839 100644 --- a/src/gui/filedetails/shareemodel.cpp +++ b/src/gui/filedetails/shareemodel.cpp @@ -23,7 +23,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcShareeModel, "com.nextcloud.shareemodel") +Q_LOGGING_CATEGORY(lcShareeModel, "com.ionos.hidrivenext.shareemodel") ShareeModel::ShareeModel(QObject *parent) : QAbstractListModel(parent) diff --git a/src/gui/filedetails/sharemodel.cpp b/src/gui/filedetails/sharemodel.cpp index 8c55a7b8c92e2..283f496c2d01e 100644 --- a/src/gui/filedetails/sharemodel.cpp +++ b/src/gui/filedetails/sharemodel.cpp @@ -37,7 +37,7 @@ static const auto secureFileDropPlaceholderLinkShareId = QStringLiteral("__secur namespace OCC { -Q_LOGGING_CATEGORY(lcShareModel, "com.nextcloud.sharemodel") +Q_LOGGING_CATEGORY(lcShareModel, "com.ionos.hidrivenext.sharemodel") ShareModel::ShareModel(QObject *parent) : QAbstractListModel(parent) @@ -782,11 +782,11 @@ QString ShareModel::iconUrlForShare(const SharePtr &share) const switch(share->getShareType()) { case Share::TypeInternalLink: - return QString(iconsPath + QStringLiteral("external.svg")); + return QString(iconsPath + QStringLiteral("externalLink.svg")); case Share::TypePlaceholderLink: case Share::TypeSecureFileDropPlaceholderLink: case Share::TypeLink: - return QString(iconsPath + QStringLiteral("public.svg")); + return QString(iconsPath + QStringLiteral("link.svg")); case Share::TypeEmail: return QString(iconsPath + QStringLiteral("email.svg")); case Share::TypeRoom: diff --git a/src/gui/filedetails/sortedsharemodel.cpp b/src/gui/filedetails/sortedsharemodel.cpp index 9b9ef99a644bd..bcc5f3a06fd18 100644 --- a/src/gui/filedetails/sortedsharemodel.cpp +++ b/src/gui/filedetails/sortedsharemodel.cpp @@ -16,7 +16,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcSortedShareModel, "com.nextcloud.sortedsharemodel") +Q_LOGGING_CATEGORY(lcSortedShareModel, "com.ionos.hidrivenext.sortedsharemodel") SortedShareModel::SortedShareModel(QObject *parent) : QSortFilterProxyModel(parent) From 184e95a129a048609c3f947335c89968e80260f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 17 Jan 2025 09:46:58 +0100 Subject: [PATCH 014/359] style credentials 610aa56efe5a55f9cbc90d401e2864421ddf6c2b --- src/gui/creds/webflowcredentials.cpp | 4 ++-- src/gui/creds/webflowcredentialsdialog.cpp | 23 +++++++++++++++++++--- src/libsync/account.cpp | 9 +++++++++ src/libsync/account.h | 1 + 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/gui/creds/webflowcredentials.cpp b/src/gui/creds/webflowcredentials.cpp index d5618307247be..58ad6dc613812 100644 --- a/src/gui/creds/webflowcredentials.cpp +++ b/src/gui/creds/webflowcredentials.cpp @@ -163,8 +163,8 @@ void WebFlowCredentials::askFromUser() { _askDialog->setUrl(url); } - QString msg = tr("You have been logged out of your account %1 at %2. Please login again.") - .arg(_account->prettyName(), _account->url().toDisplayString()); + QString msg = tr("You have been logged out of your account %1 at %2. Please login again.") + .arg(_account->eliedName(200), _account->url().toDisplayString()); _askDialog->setInfo(msg); _askDialog->show(); diff --git a/src/gui/creds/webflowcredentialsdialog.cpp b/src/gui/creds/webflowcredentialsdialog.cpp index 4178b0bd73586..70705920d781d 100644 --- a/src/gui/creds/webflowcredentialsdialog.cpp +++ b/src/gui/creds/webflowcredentialsdialog.cpp @@ -6,7 +6,7 @@ #include "application.h" #include "owncloudgui.h" #include "wizard/owncloudwizardcommon.h" - +#include "ionostheme.h" #ifdef WITH_WEBENGINE #include "wizard/webview.h" #endif // WITH_WEBENGINE @@ -24,6 +24,11 @@ WebFlowCredentialsDialog::WebFlowCredentialsDialog(Account *account, bool useFlo { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + setStyleSheet(QStringLiteral("QDialog { background-color: %1; }").arg(IonosTheme::dialogBackgroundColor())); + + setFixedWidth(646); + setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); + _layout = new QVBoxLayout(this); int spacing = _layout->spacing(); auto margin = _layout->contentsMargins(); @@ -35,12 +40,24 @@ WebFlowCredentialsDialog::WebFlowCredentialsDialog(Account *account, bool useFlo _containerLayout->setContentsMargins(margin); _infoLabel = new QLabel(); - _infoLabel->setTextFormat(Qt::PlainText); + _infoLabel->setTextFormat(Qt::RichText); _infoLabel->setAlignment(Qt::AlignCenter); + _infoLabel->setWordWrap(true); + _infoLabel->setContentsMargins(0, 32, 0, 0); + _infoLabel->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::titleColor() + )); _containerLayout->addWidget(_infoLabel); + layout()->setSizeConstraint(QLayout::SetFixedSize); + if (_useFlow2) { _flow2AuthWidget = new Flow2AuthWidget(); + _flow2AuthWidget->shrinkTopMarginForText(); + _containerLayout->addWidget(_flow2AuthWidget); connect(_flow2AuthWidget, &Flow2AuthWidget::authResult, this, &WebFlowCredentialsDialog::slotFlow2AuthResult); @@ -117,7 +134,7 @@ void WebFlowCredentialsDialog::setError(const QString &error) { slotShowSettingsDialog(); if (_useFlow2 && _flow2AuthWidget) { - _flow2AuthWidget->setError(error); + _flow2AuthWidget->setError("Error", error); return; } diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index bb0a0e117b803..30031ea5f6b6d 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -52,6 +52,8 @@ #include #include #include +#include +#include #include @@ -214,6 +216,13 @@ QString Account::prettyName() const return name; } +QString Account::eliedName(const int size) const +{ + QFontMetrics fontMetrics(QApplication::font()); + QString elidedName = fontMetrics.elidedText(prettyName(), Qt::ElideMiddle, size); + return elidedName; +} + QColor Account::serverColor() const { return _serverColor; diff --git a/src/libsync/account.h b/src/libsync/account.h index 041144387d454..4ea1cf8b6199b 100644 --- a/src/libsync/account.h +++ b/src/libsync/account.h @@ -157,6 +157,7 @@ class OWNCLOUDSYNC_EXPORT Account : public QObject /// e.g. the actual name of the user (John Doe). If this cannot be /// provided, defaults to davUser (e.g. johndoe) [[nodiscard]] QString prettyName() const; + [[nodiscard]] QString eliedName(const int size) const; [[nodiscard]] QColor accentColor() const; [[nodiscard]] QColor headerColor() const; From 7aea97d6cd00491b7486dcad80aa61d544c764cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 17 Jan 2025 14:23:46 +0100 Subject: [PATCH 015/359] style settings - account-settings 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/accountsettings.cpp | 256 ++++++++++++++++++++++++++------- src/gui/accountsettings.h | 7 + src/gui/accountsettings.ui | 59 +++++++- src/gui/folderstatusdelegate.h | 1 + 4 files changed, 271 insertions(+), 52 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 551d60450575c..78961d1a681aa 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -20,6 +20,9 @@ #include "ui_accountsettings.h" #include "theme.h" +#include "ionostheme.h" +#include "buttonstyle.h" +#include "account.h" #include "foldercreationdialog.h" #include "folderman.h" #include "folderwizard.h" @@ -65,8 +68,6 @@ #include "macOS/fileprovider.h" #endif -#include "account.h" - namespace { constexpr auto propertyFolder = "folder"; constexpr auto propertyPath = "path"; @@ -83,15 +84,13 @@ class AccountSettings; Q_LOGGING_CATEGORY(lcAccountSettings, "nextcloud.gui.account.settings", QtInfoMsg) -static const char progressBarStyleC[] = - "QProgressBar {" - "border: 1px solid grey;" - "border-radius: 5px;" - "text-align: center;" - "}" - "QProgressBar::chunk {" - "background-color: %1; width: 1px;" - "}"; +const QString progressBarStyle() +{ + return QStringLiteral( + "QProgressBar { border: 1px solid grey; border-radius: 5px; text-align: center; }" + "QProgressBar::chunk { background-color: %1; width: 1px; }" + ); +} void showEnableE2eeWithVirtualFilesWarningDialog(std::function onAccept) { @@ -164,7 +163,7 @@ class MouseCursorChanger : public QObject const auto index = folderList->indexAt(pos); if (model->classify(index) == FolderStatusModel::RootFolder && (FolderStatusDelegate::errorsListRect(folderList->visualRect(index)).contains(pos) || - FolderStatusDelegate::optionsButtonRect(folderList->visualRect(index),folderList->layoutDirection()).contains(pos))) { + FolderStatusDelegate::optionsButtonRect(folderList->visualRect(index), folderList->layoutDirection()).contains(pos))) { shape = Qt::PointingHandCursor; } folderList->setCursor(shape); @@ -190,6 +189,8 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) // Connect styleChanged events to our widgets, so they can adapt (Dark-/Light-Mode switching) connect(this, &AccountSettings::styleChanged, delegate, &FolderStatusDelegate::slotStyleChanged); + _ui->_folderList->setFont(IonosTheme::settingsFontDefault()); + _ui->_folderList->header()->hide(); _ui->_folderList->setItemDelegate(delegate); _ui->_folderList->setModel(_model); @@ -210,6 +211,8 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) fpSettingsLayout->setContentsMargins(0, 0, 0, 0); fpSettingsLayout->addWidget(fpSettingsWidget); fileProviderTab->setLayout(fpSettingsLayout); + } else { + disguiseTabWidget(); } #else const auto tabWidget = _ui->tabWidget; @@ -234,6 +237,10 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) _ui->_folderList->setAttribute(Qt::WA_Hover, true); _ui->_folderList->installEventFilter(mouseCursorChanger); +#ifdef Q_OS_MAC + _ui->expandMemoryButton->setAutoDefault(false); +#endif + connect(this, &AccountSettings::removeAccountFolders, AccountManager::instance(), &AccountManager::removeAccountFolders); connect(_ui->_folderList, &QWidget::customContextMenuRequested, @@ -276,11 +283,6 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) connect(FolderMan::instance(), &FolderMan::folderListChanged, _model, &FolderStatusModel::resetFolders); connect(this, &AccountSettings::folderChanged, _model, &FolderStatusModel::resetFolders); - - // quotaProgressBar style now set in customizeStyle() - /*QColor color = palette().highlight().color(); - _ui->quotaProgressBar->setStyleSheet(QString::fromLatin1(progressBarStyleC).arg(color.name()));*/ - // Connect E2E stuff initializeE2eEncryption(); _ui->encryptionMessage->setCloseButtonVisible(false); @@ -293,6 +295,8 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) connect(&_userInfo, &UserInfo::quotaUpdated, this, &AccountSettings::slotUpdateQuota); + connect(_ui->expandMemoryButton, &QAbstractButton::clicked, this, &AccountSettings::slotExpandMemoryClicked); + customizeStyle(); connect(_accountState->account()->e2e(), &ClientSideEncryption::startingDiscoveryEncryptionUsbToken, @@ -560,14 +564,17 @@ void AccountSettings::openIgnoredFilesDialog(const QString & absFolderPath) const QString ignoreFile{absFolderPath + ".sync-exclude.lst"}; const auto layout = new QVBoxLayout(); const auto ignoreListWidget = new IgnoreListTableWidget(this); + ignoreListWidget->setFont(IonosTheme::settingsFont()); ignoreListWidget->readIgnoreFile(ignoreFile); layout->addWidget(ignoreListWidget); const auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + customizeButtonBox(buttonBox); layout->addWidget(buttonBox); const auto dialog = new QDialog(); dialog->setLayout(layout); + dialog->setStyleSheet(QStringLiteral("QDialog { background-color: %1; }").arg(IonosTheme::dialogBackgroundColor())); connect(buttonBox, &QDialogButtonBox::clicked, [=](QAbstractButton * button) { if (buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) { @@ -577,9 +584,28 @@ void AccountSettings::openIgnoredFilesDialog(const QString & absFolderPath) }); connect(buttonBox, &QDialogButtonBox::rejected, dialog, &QDialog::close); + dialog->setPalette(QPalette(QPalette::Window, IonosTheme::white())); + dialog->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + dialog->open(); } +void AccountSettings::customizeButtonBox(QDialogButtonBox *buttonBox){ + buttonBox->layout()->setSpacing(16); + buttonBox->setContentsMargins(0,0,11,10); + + const auto okButton = buttonBox->button(QDialogButtonBox::Ok); + + okButton->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + okButton->setMinimumSize(80, 40); + + buttonBox->button(QDialogButtonBox::Cancel)->setMinimumSize(80, 40); + +#if defined(Q_OS_MAC) + buttonBox->layout()->setSpacing(32); +#endif +} + void AccountSettings::slotSubfolderContextMenuRequested(const QModelIndex& index, const QPoint& pos) { Q_UNUSED(pos); @@ -642,11 +668,56 @@ void AccountSettings::slotSubfolderContextMenuRequested(const QModelIndex& index ac = availabilityMenu->addAction(Utility::vfsFreeSpaceActionText()); connect(ac, &QAction::triggered, this, [this, folder, path] { slotSetSubFolderAvailability(folder, path, PinState::OnlineOnly); }); + + styleCustomContextMenu(availabilityMenu); } + styleCustomContextMenu(&menu); + menu.exec(QCursor::pos()); } +void AccountSettings::styleCustomContextMenu(QMenu *menu) const +{ + menu->setWindowFlags(menu->windowFlags() | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint); + + menu->setAttribute(Qt::WA_TranslucentBackground); + + menu->setStyleSheet( + QStringLiteral( + "QMenu {" + "background-color: %1; " + "border: 1px solid %2; " + "padding: 15px; " + "border-radius: %5; " + "font-family: %6; " + "font-size: %7; " + "font-weight: %8; " + "}" + "QMenu::item {" + "background-color: transparent;" + "padding: 16px 18px; " + "color: %3; " + "border-radius: 8px; " + "}" + "QMenu::item:selected {" + "background-color: %4; " + "color: %3; " + "border-radius: 8px; " + "}" + ).arg( + IonosTheme::white(), + IonosTheme::menuBorderColor(), + IonosTheme::menuTextColor(), + IonosTheme::menuSelectedItemColor(), + IonosTheme::menuBorderRadius(), + IonosTheme::contextMenuFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight() + ) + ); +} + void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) { const auto treeView = _ui->_folderList; @@ -677,6 +748,13 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) const auto menu = new QMenu(treeView); + connect(menu, &QMenu::aboutToHide, [treeView, index]() { + auto* delegate = qobject_cast(treeView->itemDelegate(index)); + delegate->MousePos = QPoint(-1, -1); + treeView->update(); + }); + + menu->setAttribute(Qt::WA_DeleteOnClose); auto ac = menu->addAction(tr("Open folder")); @@ -723,6 +801,8 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) ac = menu->addAction(tr("Disable virtual file support …")); connect(ac, &QAction::triggered, this, &AccountSettings::slotDisableVfsCurrentFolder); ac->setDisabled(Theme::instance()->enforceVirtualFilesSyncFolder()); + + styleCustomContextMenu(availabilityMenu); } if (const auto mode = bestAvailableVfsMode(); @@ -737,6 +817,7 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) } } + styleCustomContextMenu(menu); menu->popup(treeView->mapToGlobal(pos)); } @@ -745,16 +826,6 @@ void AccountSettings::slotFolderListClicked(const QModelIndex &indx) { if (indx.data(FolderStatusDelegate::AddButton).toBool()) { // "Add Folder Sync Connection" - const auto treeView = _ui->_folderList; - const auto pos = treeView->mapFromGlobal(QCursor::pos()); - QStyleOptionViewItem opt; - opt.initFrom(treeView); - const auto btnRect = treeView->visualRect(indx); - const auto btnSize = treeView->itemDelegateForIndex(indx)->sizeHint(opt, indx); - const auto actual = QStyle::visualRect(opt.direction, btnRect, QRect(btnRect.topLeft(), btnSize)); - if (!actual.contains(pos)) { - return; - } if (indx.flags() & Qt::ItemIsEnabled) { slotAddFolder(); @@ -889,8 +960,21 @@ void AccountSettings::slotRemoveCurrentFolder() .arg(shortGuiLocalPath), QMessageBox::NoButton, this); + + messageBox->setStyleSheet( + QStringLiteral("QMessageBox QLabel { %1; }").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + messageBox->setAttribute(Qt::WA_DeleteOnClose); const auto yesButton = messageBox->addButton(tr("Remove Folder Sync Connection"), QMessageBox::YesRole); + yesButton->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); messageBox->addButton(tr("Cancel"), QMessageBox::NoRole); connect(messageBox, &QMessageBox::finished, this, [messageBox, yesButton, folder, row, this]{ if (messageBox->clickedButton() == yesButton) { @@ -1010,7 +1094,20 @@ void AccountSettings::slotDisableVfsCurrentFolder() "will become available again." "\n\n" "This action will abort any currently running synchronization.")); + + msgBox->setStyleSheet(QString( + "QMessageBox {" + + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + "background-color: %1; }").arg(IonosTheme::dialogBackgroundColor()) + ); + const auto acceptButton = msgBox->addButton(tr("Disable support"), QMessageBox::AcceptRole); + acceptButton->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + msgBox->addButton(tr("Cancel"), QMessageBox::RejectRole); connect(msgBox, &QMessageBox::finished, msgBox, [this, msgBox, folder, acceptButton] { msgBox->deleteLater(); @@ -1158,25 +1255,26 @@ void AccountSettings::migrateCertificateForAccount(const AccountPtr &account) void AccountSettings::showConnectionLabel(const QString &message, QStringList errors) { - const auto errStyle = QLatin1String("color:#ffffff; background-color:#bb4d4d;padding:5px;" - "border-width: 1px; border-style: solid; border-color: #aaaaaa;" - "border-radius:5px;"); - if (errors.isEmpty()) { - auto msg = message; - Theme::replaceLinkColorStringBackgroundAware(msg); - _ui->connectLabel->setText(msg); - _ui->connectLabel->setToolTip({}); - _ui->connectLabel->setStyleSheet({}); - } else { - errors.prepend(message); - auto userFriendlyMsg = errors.join(QLatin1String("
")); - qCDebug(lcAccountSettings) << userFriendlyMsg; - Theme::replaceLinkColorString(userFriendlyMsg, QColor(0xc1c8e6)); - _ui->connectLabel->setText(userFriendlyMsg); - _ui->connectLabel->setToolTip({}); - _ui->connectLabel->setStyleSheet(errStyle); - } - _ui->accountStatus->setVisible(!message.isEmpty()); + // SES-4 Removed + // const auto errStyle = QLatin1String("color:#ffffff; background-color:#bb4d4d;padding:5px;" + // "border-width: 1px; border-style: solid; border-color: #aaaaaa;" + // "border-radius:5px;"); + // if (errors.isEmpty()) { + // auto msg = message; + // Theme::replaceLinkColorStringBackgroundAware(msg); + // _ui->connectLabel->setText(msg); + // _ui->connectLabel->setToolTip({}); + // _ui->connectLabel->setStyleSheet({}); + // } else { + // errors.prepend(message); + // auto userFriendlyMsg = errors.join(QLatin1String("
")); + // qCDebug(lcAccountSettings) << userFriendlyMsg; + // Theme::replaceLinkColorString(userFriendlyMsg, QColor("#c1c8e6")); + // _ui->connectLabel->setText(userFriendlyMsg); + // _ui->connectLabel->setToolTip({}); + // _ui->connectLabel->setStyleSheet(errStyle); + // } + _ui->accountStatus->setVisible(false); } void AccountSettings::slotEnableCurrentFolder(bool terminate) @@ -1203,9 +1301,30 @@ void AccountSettings::slotEnableCurrentFolder(bool terminate) QMessageBox::Yes | QMessageBox::No, this); msgbox->setAttribute(Qt::WA_DeleteOnClose); msgbox->setDefaultButton(QMessageBox::Yes); + msgbox->defaultButton()->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + + QHBoxLayout *buttonLayout = msgbox->findChild(); + buttonLayout->setSpacing(8); + +#ifdef Q_OS_MAC + buttonLayout->setSpacing(24); +#endif + connect(msgbox, &QMessageBox::accepted, this, [this]{ slotEnableCurrentFolder(true); }); + + msgbox->setStyleSheet( + QStringLiteral("QMessageBox QLabel { %1; }").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + msgbox->open(); return; } @@ -1275,6 +1394,7 @@ void AccountSettings::slotUpdateQuota(qint64 total, qint64 used) _ui->quotaInfoLabel->setText(tr("%1 of %2 in use").arg(usedStr, totalStr)); _ui->quotaInfoLabel->setToolTip(toolTip); _ui->quotaProgressBar->setToolTip(toolTip); + _ui->quotaInfo2Label->setText(tr("Storage space %1% occupied").arg(percentStr)); } else { _ui->quotaProgressBar->setVisible(false); _ui->quotaInfoLabel->setToolTip({}); @@ -1450,6 +1570,11 @@ void AccountSettings::slotHideSelectiveSyncWidget() _ui->selectiveSyncLabel->hide(); } +void AccountSettings::slotExpandMemoryClicked() +{ + QDesktopServices::openUrl(QUrl(tr("https://wl.hidrive.com/easy/0057"))); +} + void AccountSettings::slotSelectiveSyncChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles) @@ -1682,12 +1807,39 @@ void AccountSettings::customizeStyle() _ui->connectLabel->setText(msg); const auto color = palette().highlight().color(); - _ui->quotaProgressBar->setStyleSheet(QString::fromLatin1(progressBarStyleC).arg(color.name())); + _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(color.name())); + + _ui->quotaInfoLabel->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::titleColor() + ) + ); + + _ui->quotaInfo2Label->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsSmallTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ); + +#if defined(Q_OS_MAC) + _ui->selectiveSyncLabel->setStyleSheet(QString("color: %1;").arg(IonosTheme::black())); + _ui->horizontalLayout->setSpacing(16); +#endif + } void AccountSettings::initializeE2eEncryption() { - connect(_accountState->account()->e2e(), &ClientSideEncryption::initializationFinished, this, &AccountSettings::slotPossiblyUnblacklistE2EeFoldersAndRestartSync); + connect(_accountState->account()->e2e(), + &ClientSideEncryption::initializationFinished, + this, + &AccountSettings::slotPossiblyUnblacklistE2EeFoldersAndRestartSync); if (_accountState->account()->e2e()->isInitialized()) { slotE2eEncryptionMnemonicReady(); @@ -1763,6 +1915,14 @@ void AccountSettings::initializeE2eEncryptionSettingsMessage() connect(actionEnableE2e, &QAction::triggered, this, &AccountSettings::slotE2eEncryptionGenerateKeys); } +void AccountSettings::disguiseTabWidget() const +{ + // Ensure all elements of the tab widget are hidden. + // Document mode lets the child view take up the whole view. + _ui->tabWidget->setDocumentMode(true); + _ui->tabWidget->tabBar()->hide(); +} + } // namespace OCC #include "accountsettings.moc" diff --git a/src/gui/accountsettings.h b/src/gui/accountsettings.h index 592e7175e1d5c..c09b068f0cc2e 100644 --- a/src/gui/accountsettings.h +++ b/src/gui/accountsettings.h @@ -20,6 +20,7 @@ #include #include #include +#include #include "folder.h" #include "userinfo.h" @@ -134,8 +135,10 @@ private slots: void resetE2eEncryption(); void checkClientSideEncryptionState(); void removeActionFromEncryptionMessage(const QString &actionId); + void slotExpandMemoryClicked(); private: + void styleCustomContextMenu(QMenu *menu) const; bool event(QEvent *) override; QAction *addActionToEncryptionMessage(const QString &actionTitle, const QString &actionId); @@ -144,6 +147,10 @@ private slots: /// Returns the alias of the selected folder, empty string if none [[nodiscard]] QString selectedFolderAlias() const; + void disguiseTabWidget() const; + + void customizeButtonBox(QDialogButtonBox *buttonBox); + Ui::AccountSettings *_ui; FolderStatusModel *_model; diff --git a/src/gui/accountsettings.ui b/src/gui/accountsettings.ui index 2db413221b169..88e9c17168390 100644 --- a/src/gui/accountsettings.ui +++ b/src/gui/accountsettings.ui @@ -13,9 +13,21 @@ Form - + + 32 + + + 32 + + + 32 + + + 32 + + - + @@ -38,6 +50,8 @@ + + @@ -52,7 +66,7 @@ 16777215 - 7 + 8 @@ -62,6 +76,43 @@ -1 + false + + + + + + + + 0 + 0 + + + + Expand Memory + + + + + + + + + + 0 + 0 + + + + + + + Storage space: … + + + Qt::PlainText + + false @@ -263,7 +314,7 @@ QTabWidget::Rounded
- 0 + 1 diff --git a/src/gui/folderstatusdelegate.h b/src/gui/folderstatusdelegate.h index a8ed1c41de3b4..944fa5725f9e4 100644 --- a/src/gui/folderstatusdelegate.h +++ b/src/gui/folderstatusdelegate.h @@ -27,6 +27,7 @@ class FolderStatusDelegate : public QStyledItemDelegate Q_OBJECT public: FolderStatusDelegate(); + QPoint MousePos; enum datarole { FolderAliasRole = Qt::UserRole + 100, HeaderRole, From b0529c32175798934c24636caaea43141fe3ca6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 17 Jan 2025 15:45:55 +0100 Subject: [PATCH 016/359] style settings - added files 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/CMakeLists.txt | 13 +++ src/gui/folderwizardselectivesync.ui | 85 ++++++++++++++++ src/gui/linkbutton.cpp | 26 +++++ src/gui/linkbutton.h | 23 +++++ src/gui/sessnackbar.cpp | 140 +++++++++++++++++++++++++++ src/gui/sessnackbar.h | 62 ++++++++++++ 6 files changed, 349 insertions(+) create mode 100644 src/gui/folderwizardselectivesync.ui create mode 100644 src/gui/linkbutton.cpp create mode 100644 src/gui/linkbutton.h create mode 100644 src/gui/sessnackbar.cpp create mode 100644 src/gui/sessnackbar.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 63e2e0c1e4ddf..29dacc75e941e 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -224,6 +224,19 @@ set(client_SRCS creds/webflowcredentials.cpp creds/webflowcredentialsdialog.h creds/webflowcredentialsdialog.cpp + sessnackbar.h + sessnackbar.cpp + sesstyle.h + sesstyle.cpp + buttonstylestrategy.h + sesFileIconProvider.h + sesFileIconProvider.cpp + pushbuttonstylehelper.h + pushbuttonstylehelper.cpp + moreoptionsbuttonstylehelper.h + moreoptionsbuttonstylehelper.cpp + SesComponents/syncdirvalidation.h + SesComponents/syncdirvalidation.cpp wizard/postfixlineedit.h wizard/postfixlineedit.cpp wizard/abstractcredswizardpage.h diff --git a/src/gui/folderwizardselectivesync.ui b/src/gui/folderwizardselectivesync.ui new file mode 100644 index 0000000000000..29fd0b148e663 --- /dev/null +++ b/src/gui/folderwizardselectivesync.ui @@ -0,0 +1,85 @@ + + + FolderWizardSelectiveSync + + + + 0 + 0 + 639 + 460 + + + + Form + + + + + + 20 + + + 0 + + + 20 + + + 0 + + + + + font: 18pt bold; + + + Add Folder Sync + + + Qt::PlainText + + + false + + + + + + + color: rgb(16, 73, 150); font: bold; + + + Step 3 of 3: Selektive Synchronisation + + + Qt::PlainText + + + false + + + + + + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 349 + 360 + + + + + + + + + \ No newline at end of file diff --git a/src/gui/linkbutton.cpp b/src/gui/linkbutton.cpp new file mode 100644 index 0000000000000..9bf2134fb62f8 --- /dev/null +++ b/src/gui/linkbutton.cpp @@ -0,0 +1,26 @@ +// linkbutton.cpp +#include "linkbutton.h" +#include "ionostheme.h" +#include "theme.h" + +namespace OCC { + LinkButton::LinkButton(QWidget* parent) + : QLabel(parent) + { + setStyleSheet(QStringLiteral("QLabel { color: %1; text-decoration: underline; font-size: %2; font-weight: %3; }") + .arg(IonosTheme::settingsLinkColor() + , IonosTheme::settingsTextSize() + , IonosTheme::settingsTitleWeight600() + )); + + setCursor(Qt::PointingHandCursor); + } + + void LinkButton::mousePressEvent(QMouseEvent* event) + { + if (event->button() == Qt::LeftButton) { + emit clicked(); + } + QLabel::mousePressEvent(event); + } +} \ No newline at end of file diff --git a/src/gui/linkbutton.h b/src/gui/linkbutton.h new file mode 100644 index 0000000000000..7dd0465e65142 --- /dev/null +++ b/src/gui/linkbutton.h @@ -0,0 +1,23 @@ +// linkbutton.h +#ifndef LINKBUTTON_H +#define LINKBUTTON_H + +#include +#include +#include +namespace OCC { + class LinkButton : public QLabel + { + Q_OBJECT + + public: + explicit LinkButton(QWidget* parent = nullptr); + + signals: + void clicked(); + + protected: + void mousePressEvent(QMouseEvent* event); + }; +} +#endif // LINKBUTTON_H diff --git a/src/gui/sessnackbar.cpp b/src/gui/sessnackbar.cpp new file mode 100644 index 0000000000000..c42c099b2ab4c --- /dev/null +++ b/src/gui/sessnackbar.cpp @@ -0,0 +1,140 @@ +#include "sessnackbar.h" +#include "ionostheme.h" +#include "theme.h" +#include +#include +#include + +namespace OCC { + + sesSnackBar::sesSnackBar(QWidget* parent) + : QFrame(parent) + { + setObjectName("sesSnackBar"); + setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + setContentsMargins(0, 0, 0, 0); + + auto policy = sizePolicy(); + policy.setRetainSizeWhenHidden(false); + setSizePolicy(policy); + + const auto layout = new QHBoxLayout(); + layout->setObjectName("sesSnackBarLayout"); + layout->setContentsMargins(16, 15, 16, 15); + layout->setSpacing(0); + + m_captionLabel.setObjectName("sesSnackBarCaption"); + m_captionLabel.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); + m_captionLabel.setText(m_caption); + + m_messageLabel.setObjectName("sesSnackBarMessage"); + m_messageLabel.setText(m_message); + m_messageLabel.setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); + m_messageLabel.setWordWrap(true); + + m_iconLabel.setObjectName("sesSnackBarIcon"); + m_iconLabel.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + m_iconLabel.setFixedSize(16, 16); + + layout->addWidget(&m_captionLabel); + layout->addSpacerItem(new QSpacerItem(8, 0, QSizePolicy::Fixed, QSizePolicy::Fixed)); + layout->addWidget(&m_messageLabel); + layout->addSpacerItem(new QSpacerItem(8, 0, QSizePolicy::Fixed, QSizePolicy::Fixed)); + layout->addWidget(&m_iconLabel); + setLayout(layout); + + errorStyle(); + } + + void sesSnackBar::clearMessage(){ + m_captionLabel.clear(); + m_messageLabel.clear(); + } + + QString sesSnackBar::caption() const { return m_caption; } + QString sesSnackBar::message() const { return m_message; } + + + void sesSnackBar::setCaption(QString captionText) { + if (m_caption != captionText) { + m_caption = captionText; + m_captionLabel.setText(m_caption); + emit captionChanged(m_caption); + } + } + + void sesSnackBar::setError(QString errorMessage){ + errorStyle(); + setMessage(errorMessage); + setCaption(tr("Error")); + emit errorChanged(m_message); + } + + void sesSnackBar::setWarning(QString warningMessage){ + warningStyle(); + setMessage(warningMessage); + setCaption(tr("Warning")); + emit warningChanged(m_message); + } + + void sesSnackBar::setSuccess(QString successMessage){ + successStyle(); + setMessage(successMessage); + setCaption(tr("Success")); + emit successChanged(m_message); + } + + void sesSnackBar::setMessage(QString messageText) { + m_message = messageText; + m_messageLabel.setText(m_message); + } + + void sesSnackBar::setWordWrap(bool on) + { + m_messageLabel.setWordWrap(on); + } + + bool sesSnackBar::wordWrap() const + { + return m_messageLabel.wordWrap(); + } + + void sesSnackBar::successStyle() + { + const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/black/state-ok.svg"); + m_iconLabel.setPixmap(logoIconFileName); + + updateStyleSheet(IonosTheme::successBorderColor(), IonosTheme::successColor(), IonosTheme::black(), IonosTheme::black()); + } + + void sesSnackBar::warningStyle() + { + const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/black/state-info.svg"); + m_iconLabel.setPixmap(logoIconFileName); + + updateStyleSheet(IonosTheme::warningBorderColor(), IonosTheme::warningColor(), IonosTheme::black(), IonosTheme::black()); + } + + void sesSnackBar::errorStyle() + { + const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/black/state-error.svg"); + m_iconLabel.setPixmap(logoIconFileName); + + updateStyleSheet(IonosTheme::errorBorderColor(), IonosTheme::errorColor(), IonosTheme::black(), IonosTheme::black()); + } + + void sesSnackBar::updateStyleSheet(QColor frameBorderColor, QColor frameBackgroundColor, QColor frameColor, QColor labelColor) + { + QString style = QString::fromLatin1("QFrame {border: 1px solid %1; border-radius: 4px;" + "background-color: %2; color: %3;}" + "QLabel {border: 0px none; padding 0px; background-color: transparent; color: %4;}" + "QLabel#sesSnackBarCaption {font-weight: bold;}" + ).arg(frameBorderColor.name() + , frameBackgroundColor.name() + , frameColor.name() + , labelColor.name()); + + setStyleSheet(style); + + } +} \ No newline at end of file diff --git a/src/gui/sessnackbar.h b/src/gui/sessnackbar.h new file mode 100644 index 0000000000000..cb215e996838c --- /dev/null +++ b/src/gui/sessnackbar.h @@ -0,0 +1,62 @@ +#ifndef SESSNACKBAR_H +#define SESSNACKBAR_H + +#include +#include +#include +#include +#include +#include +#include + +namespace OCC { + + class sesSnackBar : public QFrame + { + Q_OBJECT + Q_PROPERTY(QString caption READ caption WRITE setCaption NOTIFY captionChanged) + Q_PROPERTY(QString message READ message) + Q_PROPERTY(QString error WRITE setError NOTIFY errorChanged) + Q_PROPERTY(QString warning WRITE setWarning NOTIFY warningChanged) + Q_PROPERTY(QString success WRITE setSuccess NOTIFY successChanged) + Q_PROPERTY(bool wordWrap READ wordWrap WRITE setWordWrap) + + public: + explicit sesSnackBar(QWidget* parent = nullptr); + QString caption() const; + QString message() const; + bool wordWrap() const; + void clearMessage(); + + public slots: + void setCaption(QString captionText); + void setError(QString errorMessage); + void setWarning(QString warningMessage); + void setSuccess(QString successMessage); + + void setWordWrap(bool on); + + signals: + void captionChanged(QString captionText); + void errorChanged(QString errorText); + void warningChanged(QString warningText); + void successChanged(QString successText); + + private: + QString m_caption; + QString m_message; + + QLabel m_messageLabel; + QLabel m_captionLabel; + QLabel m_iconLabel; + + void updateStyleSheet(QColor frameBorderColor, QColor frameBackgroundColor, QColor frameColor, QColor labelColor); + void setMessage(QString messageText); + + void errorStyle(); + void warningStyle(); + void successStyle(); + + }; +} +#endif // SESSNACKBAR_H From 9b223e61a2a07e7d5d9603380e48cdd084def714 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 22 Jan 2025 08:26:35 +0100 Subject: [PATCH 017/359] style settings - minor dialog changes 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/addcertificatedialog.cpp | 1 + src/gui/authenticationdialog.cpp | 1 + src/gui/legalnotice.cpp | 1 + src/gui/proxyauthdialog.cpp | 1 + 4 files changed, 4 insertions(+) diff --git a/src/gui/addcertificatedialog.cpp b/src/gui/addcertificatedialog.cpp index fabaeec5b6d14..0d3e8f3209edb 100644 --- a/src/gui/addcertificatedialog.cpp +++ b/src/gui/addcertificatedialog.cpp @@ -26,6 +26,7 @@ AddCertificateDialog::AddCertificateDialog(QWidget *parent) { ui->setupUi(this); ui->labelErrorCertif->setText(""); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); } AddCertificateDialog::~AddCertificateDialog() diff --git a/src/gui/authenticationdialog.cpp b/src/gui/authenticationdialog.cpp index 7b7de1abbebb0..aef5f8163c017 100644 --- a/src/gui/authenticationdialog.cpp +++ b/src/gui/authenticationdialog.cpp @@ -43,6 +43,7 @@ AuthenticationDialog::AuthenticationDialog(const QString &realm, const QString & connect(box, &QDialogButtonBox::accepted, this, &QDialog::accept); connect(box, &QDialogButtonBox::rejected, this, &QDialog::reject); lay->addWidget(box); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); } QString AuthenticationDialog::user() const diff --git a/src/gui/legalnotice.cpp b/src/gui/legalnotice.cpp index 04f3d8e31113b..33d5c5f3da765 100644 --- a/src/gui/legalnotice.cpp +++ b/src/gui/legalnotice.cpp @@ -24,6 +24,7 @@ LegalNotice::LegalNotice(QDialog *parent) , _ui(new Ui::LegalNotice) { _ui->setupUi(this); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); connect(_ui->closeButton, &QPushButton::clicked, this, &LegalNotice::accept); diff --git a/src/gui/proxyauthdialog.cpp b/src/gui/proxyauthdialog.cpp index c5680bb7e7a10..5e3fee0fc5035 100644 --- a/src/gui/proxyauthdialog.cpp +++ b/src/gui/proxyauthdialog.cpp @@ -22,6 +22,7 @@ ProxyAuthDialog::ProxyAuthDialog(QWidget *parent) , ui(new Ui::ProxyAuthDialog) { ui->setupUi(this); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); } ProxyAuthDialog::~ProxyAuthDialog() From 5487b81a2f4e89581530c1e35b6b0c8e724ad52e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 22 Jan 2025 08:45:15 +0100 Subject: [PATCH 018/359] style settings - more dialog changes 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/caseclashfilenamedialog.cpp | 47 +++++++ src/gui/caseclashfilenamedialog.h | 2 + src/gui/caseclashfilenamedialog.ui | 6 + src/gui/conflictdialog.cpp | 28 +++++ src/gui/conflictdialog.h | 1 + src/gui/foldercreationdialog.cpp | 56 +++++++-- src/gui/foldercreationdialog.h | 2 + src/gui/foldercreationdialog.ui | 186 +++++++++++++--------------- src/gui/invalidfilenamedialog.cpp | 48 ++++++- src/gui/invalidfilenamedialog.h | 1 + src/gui/selectivesyncdialog.cpp | 79 ++++++++++++ 11 files changed, 348 insertions(+), 108 deletions(-) diff --git a/src/gui/caseclashfilenamedialog.cpp b/src/gui/caseclashfilenamedialog.cpp index 92f3c768962b9..109d826bb162a 100644 --- a/src/gui/caseclashfilenamedialog.cpp +++ b/src/gui/caseclashfilenamedialog.cpp @@ -19,6 +19,7 @@ #include "account.h" #include "folder.h" +#include "buttonstyle.h" #include "common/filesystembase.h" #include @@ -84,6 +85,8 @@ CaseClashFilenameDialog::CaseClashFilenameDialog(AccountPtr account, Q_ASSERT(_account); Q_ASSERT(_folder); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + const auto filePathFileInfo = QFileInfo(_filePath); const auto conflictFileName = filePathFileInfo.fileName(); @@ -99,6 +102,7 @@ CaseClashFilenameDialog::CaseClashFilenameDialog(AccountPtr account, _ui->setupUi(this); _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); _ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Rename file")); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); _ui->descriptionLabel->setText(tr("The file \"%1\" could not be synced because of a case clash conflict with an existing file on this system.").arg(_originalFileName)); _ui->explanationLabel->setText(tr("%1 does not support equal file names with only letter casing differences.").arg(QSysInfo::prettyProductName())); @@ -150,10 +154,13 @@ CaseClashFilenameDialog::CaseClashFilenameDialog(AccountPtr account, _ui->buttonBox->setStandardButtons(_ui->buttonBox->standardButtons() &~ QDialogButtonBox::No); if (_conflictSolver.allowedToRename()) { _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + _ui->filenameLineEdit->setEnabled(true); _ui->filenameLineEdit->selectAll(); } else { _ui->buttonBox->setStandardButtons(_ui->buttonBox->standardButtons() | QDialogButtonBox::No); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); } }); @@ -167,6 +174,8 @@ CaseClashFilenameDialog::CaseClashFilenameDialog(AccountPtr account, }); checkIfAllowedToRename(); + + customizeStyle(); } CaseClashFilenameDialog::~CaseClashFilenameDialog() = default; @@ -286,5 +295,43 @@ void CaseClashFilenameDialog::onFilenameLineEditTextChanged(const QString &text) _ui->buttonBox->button(QDialogButtonBox::Ok) ->setEnabled(isTextValid); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + } + +void CaseClashFilenameDialog::customizeStyle() +{ + this->setStyleSheet( + QStringLiteral("QDialog {background-color: %1; color: %2;} QLabel{ %3;}").arg( + IonosTheme::dialogBackgroundColor(), + IonosTheme::black(), + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + + _ui->filenameLineEdit->setStyleSheet( + QStringLiteral( + "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " + "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( + IonosTheme::folderWizardPathColor(), + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::buttonRadius(), + IonosTheme::menuBorderColor(), + IonosTheme::white() + ) + ); + + #ifdef Q_OS_MAC + _ui->buttonBox->layout()->setSpacing(24); + _ui->buttonBox->setLayoutDirection(Qt::LeftToRight); + #endif +} + } diff --git a/src/gui/caseclashfilenamedialog.h b/src/gui/caseclashfilenamedialog.h index 6608cb80102bc..feb88d43075ac 100644 --- a/src/gui/caseclashfilenamedialog.h +++ b/src/gui/caseclashfilenamedialog.h @@ -79,5 +79,7 @@ private slots: QString _relativeFilePath; QString _originalFileName; QString _newFilename; + + void customizeStyle(); }; } diff --git a/src/gui/caseclashfilenamedialog.ui b/src/gui/caseclashfilenamedialog.ui index a5944fc709886..7477525cbe60a 100644 --- a/src/gui/caseclashfilenamedialog.ui +++ b/src/gui/caseclashfilenamedialog.ui @@ -120,6 +120,9 @@ Open existing file + + true +
@@ -226,6 +229,9 @@ Open clashing file + + true + diff --git a/src/gui/conflictdialog.cpp b/src/gui/conflictdialog.cpp index bae7b190f957a..75c8c7d2304b3 100644 --- a/src/gui/conflictdialog.cpp +++ b/src/gui/conflictdialog.cpp @@ -16,6 +16,7 @@ #include "ui_conflictdialog.h" #include "conflictsolver.h" +#include "buttonstyle.h" #include #include @@ -50,8 +51,10 @@ ConflictDialog::ConflictDialog(QWidget *parent) { _ui->setupUi(this); forceHeaderFont(_ui->conflictMessage); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); _ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Keep selected version")); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); _ui->conflictMessage->setTextFormat(Qt::PlainText); @@ -67,6 +70,8 @@ ConflictDialog::ConflictDialog(QWidget *parent) connect(_solver, &ConflictSolver::localVersionFilenameChanged, this, &ConflictDialog::updateWidgets); connect(_solver, &ConflictSolver::remoteVersionFilenameChanged, this, &ConflictDialog::updateWidgets); + + customizeStyle(); } QString ConflictDialog::baseFilename() const @@ -178,6 +183,29 @@ void ConflictDialog::updateButtonStates() : isRemotePicked ? tr("Keep server version") : tr("Keep selected version"); _ui->buttonBox->button(QDialogButtonBox::Ok)->setText(text); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + +} + +void ConflictDialog::customizeStyle() +{ + this->setStyleSheet( + QStringLiteral("QDialog {background-color: %1; color: %2;} QLabel{ %3;}").arg( + IonosTheme::dialogBackgroundColor(), + IonosTheme::black(), + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + + #ifdef Q_OS_MAC + _ui->buttonBox->layout()->setSpacing(24); + _ui->buttonBox->setLayoutDirection(Qt::LeftToRight); + #endif } } // namespace OCC diff --git a/src/gui/conflictdialog.h b/src/gui/conflictdialog.h index b102b8de7797f..f82066d176474 100644 --- a/src/gui/conflictdialog.h +++ b/src/gui/conflictdialog.h @@ -46,6 +46,7 @@ public slots: private: void updateWidgets(); void updateButtonStates(); + void customizeStyle(); QString _baseFilename; QScopedPointer _ui; diff --git a/src/gui/foldercreationdialog.cpp b/src/gui/foldercreationdialog.cpp index 2d4f3c4cc4a98..4ed103ee9ccd7 100644 --- a/src/gui/foldercreationdialog.cpp +++ b/src/gui/foldercreationdialog.cpp @@ -13,6 +13,9 @@ */ #include "foldercreationdialog.h" + +#include "buttonstyle.h" +#include "ionostheme.h" #include "ui_foldercreationdialog.h" #include @@ -20,6 +23,9 @@ #include #include #include +#include +#include +#include namespace OCC { @@ -31,10 +37,13 @@ FolderCreationDialog::FolderCreationDialog(const QString &destination, QWidget * , _destination(destination) { ui->setupUi(this); + setWindowTitle(tr("%1 Create new folder").arg(Theme::instance()->appNameGUI())); + customizeStyle(); - ui->labelErrorMessage->setVisible(false); + ui->errorSnackbar->setVisible(false); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + setWindowFlags(windowFlags() | Qt::Dialog | Qt::WindowMinMaxButtonsHint); connect(ui->newFolderNameEdit, &QLineEdit::textChanged, this, &FolderCreationDialog::slotNewFolderNameEditTextEdited); @@ -69,11 +78,6 @@ void FolderCreationDialog::accept() const auto fullPath = QString(_destination + "/" + ui->newFolderNameEdit->text()); - if (QDir(fullPath).exists()) { - ui->labelErrorMessage->setVisible(true); - return; - } - if (QDir(_destination).mkdir(ui->newFolderNameEdit->text())) { Q_EMIT folderCreated(fullPath); } else { @@ -86,10 +90,46 @@ void FolderCreationDialog::accept() void FolderCreationDialog::slotNewFolderNameEditTextEdited() { if (!ui->newFolderNameEdit->text().isEmpty() && QDir(_destination + "/" + ui->newFolderNameEdit->text()).exists()) { - ui->labelErrorMessage->setVisible(true); + ui->errorSnackbar->setVisible(true); + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); } else { - ui->labelErrorMessage->setVisible(false); + ui->errorSnackbar->setVisible(false); + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); } } +void FolderCreationDialog::customizeStyle() +{ + ui->buttonBox->setLayoutDirection(Qt::RightToLeft); + + QDialog *dialog = qobject_cast(this); + dialog->setMinimumSize(626, 156); + + QPushButton *okButton = ui->buttonBox->button(QDialogButtonBox::Ok); + okButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + + QHBoxLayout* buttonlayout = qobject_cast(ui->buttonBox->layout()); + buttonlayout->setSpacing(16); + + ui->errorSnackbar->setFixedHeight(46); + + ui->newFolderNameEdit->setStyleSheet( + QStringLiteral( + "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " + "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") + .arg(IonosTheme::folderWizardPathColor(), + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::buttonRadius(), + IonosTheme::menuBorderColor(), + IonosTheme::white() + ) + ); + +#if defined(Q_OS_MAC) + buttonlayout->setSpacing(32); +#endif + } +} \ No newline at end of file diff --git a/src/gui/foldercreationdialog.h b/src/gui/foldercreationdialog.h index 3d8642112f2c4..78d582a41e24d 100644 --- a/src/gui/foldercreationdialog.h +++ b/src/gui/foldercreationdialog.h @@ -43,6 +43,8 @@ private slots: Ui::FolderCreationDialog *ui; QString _destination; + + void customizeStyle(); }; } diff --git a/src/gui/foldercreationdialog.ui b/src/gui/foldercreationdialog.ui index 84d7c77e18654..314ef6cffab97 100644 --- a/src/gui/foldercreationdialog.ui +++ b/src/gui/foldercreationdialog.ui @@ -1,100 +1,90 @@ - OCC::FolderCreationDialog - - - - 0 - 0 - 355 - 138 - - - - Create new folder - - - - - 0 - 90 - 341 - 32 - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - 20 - 30 - 321 - 22 - - - - Enter folder name - - - - - true - - - - 20 - 60 - 321 - 16 - - - - color: rgb(255, 0, 0) - - - Folder already exists - - - - - - - buttonBox - accepted() - OCC::FolderCreationDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - OCC::FolderCreationDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - + OCC::FolderCreationDialog + + + Create new folder + + + + + + Enter folder name + + + + + + + Folder already exists + + + false + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + + + + buttonBox + accepted() + OCC::FolderCreationDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + OCC::FolderCreationDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + \ No newline at end of file diff --git a/src/gui/invalidfilenamedialog.cpp b/src/gui/invalidfilenamedialog.cpp index c6cf31da00997..df78348ffa9b4 100644 --- a/src/gui/invalidfilenamedialog.cpp +++ b/src/gui/invalidfilenamedialog.cpp @@ -19,6 +19,8 @@ #include "ui_invalidfilenamedialog.h" #include "filesystem.h" +#include "ionostheme.h" +#include "buttonstyle.h" #include #include @@ -79,6 +81,7 @@ InvalidFilenameDialog::InvalidFilenameDialog(AccountPtr account, { Q_ASSERT(_account); Q_ASSERT(_folder); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); const auto filePathFileInfo = QFileInfo(_filePath); _relativeFilePath = filePathFileInfo.path() + QStringLiteral("/"); @@ -136,6 +139,8 @@ InvalidFilenameDialog::InvalidFilenameDialog(AccountPtr account, tr("Checking rename permissions …")); _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); _ui->filenameLineEdit->setEnabled(false); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + connect(_ui->filenameLineEdit, &QLineEdit::textChanged, this, &InvalidFilenameDialog::onFilenameLineEditTextChanged); @@ -145,6 +150,8 @@ InvalidFilenameDialog::InvalidFilenameDialog(AccountPtr account, } else { checkIfAllowedToRename(); } + + customizeStyle(); } InvalidFilenameDialog::~InvalidFilenameDialog() = default; @@ -186,6 +193,7 @@ bool InvalidFilenameDialog::processLeadingOrTrailingSpacesError(const QString &f const auto hasTrailingSpaces = fileName.endsWith(QLatin1Char(' ')); _ui->buttonBox->setStandardButtons(_ui->buttonBox->standardButtons() &~ QDialogButtonBox::No); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); if (hasLeadingSpaces || hasTrailingSpaces) { if (hasLeadingSpaces && hasTrailingSpaces) { @@ -222,6 +230,8 @@ void InvalidFilenameDialog::onPropfindPermissionError(QNetworkReply *reply) void InvalidFilenameDialog::allowRenaming() { _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + _ui->filenameLineEdit->setEnabled(true); _ui->filenameLineEdit->selectAll(); _ui->errorLabel->setText({}); @@ -258,8 +268,9 @@ void InvalidFilenameDialog::onFilenameLineEditTextChanged(const QString &text) _ui->errorLabel->setText(tr("Filename contains illegal characters: %1").arg(illegalCharacterListToString(illegalContainedCharacters))); } - _ui->buttonBox->button(QDialogButtonBox::Ok) - ->setEnabled(isTextValid); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(isTextValid); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + } void InvalidFilenameDialog::onMoveJobFinished() @@ -281,6 +292,7 @@ void InvalidFilenameDialog::onRemoteDestinationFileAlreadyExists(const QVariantM _ui->errorLabel->setText(tr("Cannot rename file because a file with the same name does already exist on the server. Please pick another name.")); _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); } void InvalidFilenameDialog::onRemoteDestinationFileDoesNotExist(QNetworkReply *reply) @@ -320,4 +332,36 @@ void InvalidFilenameDialog::onRemoteSourceFileDoesNotExist(QNetworkReply *reply) } QDialog::accept(); } + +void InvalidFilenameDialog::customizeStyle() +{ + this->setStyleSheet( + QStringLiteral("QDialog {background-color: %1; } QLabel{ font-family: %2; font-size: %3; font-weight: %4; }").arg( + IonosTheme::dialogBackgroundColor(), + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight() + ) + ); + + _ui->filenameLineEdit->setStyleSheet( + QStringLiteral( + "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " + "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( + IonosTheme::folderWizardPathColor(), + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::buttonRadius(), + IonosTheme::menuBorderColor(), + IonosTheme::white() + ) + ); + + #ifdef Q_OS_MAC + _ui->buttonBox->layout()->setSpacing(24); + _ui->buttonBox->setLayoutDirection(Qt::LeftToRight); + #endif +} + } diff --git a/src/gui/invalidfilenamedialog.h b/src/gui/invalidfilenamedialog.h index 1477dd6451fa7..faa61b2aa5cf7 100644 --- a/src/gui/invalidfilenamedialog.h +++ b/src/gui/invalidfilenamedialog.h @@ -81,6 +81,7 @@ class InvalidFilenameDialog : public QDialog void onPropfindPermissionSuccess(const QVariantMap &values); void onPropfindPermissionError(QNetworkReply *reply = nullptr); void allowRenaming(); + void customizeStyle(); private slots: void useInvalidName(); }; diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index abe5a56b39480..d266d3a966a3b 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -13,12 +13,14 @@ */ #include "selectivesyncdialog.h" #include "account.h" +#include "buttonstyle.h" #include "common/utility.h" #include "configfile.h" #include "folder.h" #include "folderman.h" #include "networkjobs.h" #include "theme.h" +#include "ionostheme.h" #include #include #include @@ -77,6 +79,14 @@ SelectiveSyncWidget::SelectiveSyncWidget(AccountPtr account, QWidget *parent) auto header = new QLabel(this); header->setText(tr("Deselect remote folders you do not wish to synchronize.")); header->setWordWrap(true); + header->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor()) + + QStringLiteral("background-color: %1;").arg(IonosTheme::dialogBackgroundColor()) + ); layout->addWidget(header); layout->addWidget(_folderTree); @@ -94,6 +104,42 @@ SelectiveSyncWidget::SelectiveSyncWidget(AccountPtr account, QWidget *parent) _folderTree->headerItem()->setText(0, tr("Name")); _folderTree->headerItem()->setText(1, tr("Size")); + +#ifdef Q_OS_MAC + _folderTree->header()->setStyleSheet( + "QHeaderView::section {" + " background-color: white;" // Set the background color + " border: 1px solid #e6e6e6;" // Optional: add a border + " padding-left: 4px;" + + QString(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor())) + + + "}" + ); +#else + _folderTree->header()->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); +#endif + + _folderTree->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); + +#ifdef Q_OS_MAC + _folderTree->setPalette(QPalette(IonosTheme::white())); +#endif + ConfigFile::setupDefaultExcludeFilePaths(_excludedFiles); _excludedFiles.reloadExcludeFiles(); } @@ -477,6 +523,7 @@ SelectiveSyncDialog::SelectiveSyncDialog(AccountPtr account, Folder *folder, QWi , _folder(folder) { bool ok = false; + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); init(account); QStringList selectiveSyncList = _folder->journalDb()->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, &ok); if (ok) { @@ -494,6 +541,7 @@ SelectiveSyncDialog::SelectiveSyncDialog(AccountPtr account, const QString &fold , _folder(nullptr) { init(account); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); _selectiveSync->setFolderInfo(folder, folder, blacklist); } @@ -504,11 +552,42 @@ void SelectiveSyncDialog::init(const AccountPtr &account) _selectiveSync = new SelectiveSyncWidget(account, this); layout->addWidget(_selectiveSync); auto *buttonBox = new QDialogButtonBox(Qt::Horizontal); + _okButton = buttonBox->addButton(QDialogButtonBox::Ok); + _okButton->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); connect(_okButton, &QPushButton::clicked, this, &SelectiveSyncDialog::accept); + QPushButton *button = nullptr; button = buttonBox->addButton(QDialogButtonBox::Cancel); + +#ifdef Q_OS_MAC + _okButton->setStyleSheet( + _okButton->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight500(), + IonosTheme::white() + ) + ) + ); + + button->setStyleSheet( + button->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight500(), + IonosTheme::titleColor() + ) + ) + ); + + buttonBox->layout()->setSpacing(24); +#endif + connect(button, &QAbstractButton::clicked, this, &QDialog::reject); + layout->addWidget(buttonBox); } From f810ce8659b1d2d0e7234ad527515092787122a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 22 Jan 2025 13:19:03 +0100 Subject: [PATCH 019/359] style settings - stettingsdialog & generalsettings 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/CMakeLists.txt | 2 + src/gui/generalsettings.cpp | 91 ++- src/gui/generalsettings.h | 4 + src/gui/generalsettings.ui | 1155 +++++++++++++++++++---------------- src/gui/settingsdialog.cpp | 105 ++-- 5 files changed, 790 insertions(+), 567 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 29dacc75e941e..44b86dc9ba16a 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -228,6 +228,8 @@ set(client_SRCS sessnackbar.cpp sesstyle.h sesstyle.cpp + linkbutton.h + linkbutton.cpp buttonstylestrategy.h sesFileIconProvider.h sesFileIconProvider.cpp diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index d9d0b5d2c45ee..151cc7db6a0b8 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -16,11 +16,13 @@ #include "ui_generalsettings.h" #include "theme.h" +#include "ionostheme.h" #include "configfile.h" #include "application.h" #include "owncloudsetupwizard.h" #include "accountmanager.h" #include "guiutility.h" +#include "linkbutton.h" #include "capabilities.h" #if defined(BUILD_UPDATER) @@ -49,6 +51,7 @@ #include #include #include +#include #include #include @@ -195,9 +198,9 @@ GeneralSettings::GeneralSettings(QWidget *parent) this, &GeneralSettings::slotToggleOptionalServerNotifications); _ui->serverNotificationsCheckBox->setToolTip(tr("Server notifications that require attention.")); - connect(_ui->chatNotificationsCheckBox, &QAbstractButton::toggled, - this, &GeneralSettings::slotToggleChatNotifications); - _ui->chatNotificationsCheckBox->setToolTip(tr("Show chat notification dialogs.")); + // connect(_ui->chatNotificationsCheckBox, &QAbstractButton::toggled, + // this, &GeneralSettings::slotToggleChatNotifications); + // _ui->chatNotificationsCheckBox->setToolTip(tr("Show chat notification dialogs.")); connect(_ui->callNotificationsCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleCallNotifications); @@ -227,7 +230,7 @@ GeneralSettings::GeneralSettings(QWidget *parent) _ui->infoAndUpdatesLabel->setOpenExternalLinks(true); // About legal notice - connect(_ui->legalNoticeButton, &QPushButton::clicked, this, &GeneralSettings::slotShowLegalNotice); + // connect(_ui->legalNoticeButton, &QPushButton::clicked, this, &GeneralSettings::slotShowLegalNotice); connect(_ui->usageDocumentationButton, &QPushButton::clicked, this, []() { Utility::openBrowser(QUrl(Theme::instance()->helpUrl())); @@ -267,8 +270,8 @@ GeneralSettings::GeneralSettings(QWidget *parent) int m1 = 0; int m2 = 0; int m3 = 0; - _ui->horizontalLayout_3->getContentsMargins(&m0, &m1, &m2, &m3); - _ui->horizontalLayout_3->setContentsMargins(0, m1, m2, m3); + _ui->horizontalLayout_1->getContentsMargins(&m0, &m1, &m2, &m3); + _ui->horizontalLayout_1->setContentsMargins(0, m1, m2, m3); // OEM themes are not obliged to ship mono icons, so there // is no point in offering an option @@ -279,7 +282,10 @@ GeneralSettings::GeneralSettings(QWidget *parent) // accountAdded means the wizard was finished and the wizard might change some options. connect(AccountManager::instance(), &AccountManager::accountAdded, this, &GeneralSettings::loadMiscSettings); - +connect(_ui->moreInfoLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenMoreInformationLink); + connect(_ui->legalNoticeLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenLegalNoticeLink); + connect(_ui->openSourceLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenOpenSourceLink); + connect(_ui->privacyLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenPrivacyLink); #if defined(BUILD_UPDATER) loadUpdateChannelsList(); #endif @@ -292,6 +298,26 @@ GeneralSettings::~GeneralSettings() delete _ui; } +void GeneralSettings::slotOpenMoreInformationLink() +{ + QDesktopServices::openUrl(QUrl("https://wl.hidrive.com/easy/0007/")); +} + +void GeneralSettings::slotOpenLegalNoticeLink() +{ + QDesktopServices::openUrl(QUrl("https://wl.hidrive.com/easy/0004/")); +} + +void GeneralSettings::slotOpenOpenSourceLink() +{ + QDesktopServices::openUrl(QUrl("https://wl.hidrive.com/easy/0006")); +} + +void GeneralSettings::slotOpenPrivacyLink() +{ + QDesktopServices::openUrl(QUrl("https://wl.hidrive.com/easy/0005/")); +} + QSize GeneralSettings::sizeHint() const { return { @@ -307,8 +333,8 @@ void GeneralSettings::loadMiscSettings() _ui->monoIconsCheckBox->setChecked(cfgFile.monoIcons()); _ui->serverNotificationsCheckBox->setChecked(cfgFile.optionalServerNotifications()); - _ui->chatNotificationsCheckBox->setEnabled(cfgFile.optionalServerNotifications()); - _ui->chatNotificationsCheckBox->setChecked(cfgFile.showChatNotifications()); + // _ui->chatNotificationsCheckBox->setEnabled(cfgFile.optionalServerNotifications()); + // _ui->chatNotificationsCheckBox->setChecked(cfgFile.showChatNotifications()); _ui->callNotificationsCheckBox->setEnabled(cfgFile.optionalServerNotifications()); _ui->callNotificationsCheckBox->setChecked(cfgFile.showCallNotifications()); _ui->showInExplorerNavigationPaneCheckBox->setChecked(cfgFile.showInExplorerNavigationPane()); @@ -560,7 +586,7 @@ void GeneralSettings::slotToggleOptionalServerNotifications(bool enable) { ConfigFile cfgFile; cfgFile.setOptionalServerNotifications(enable); - _ui->chatNotificationsCheckBox->setEnabled(enable); + // _ui->chatNotificationsCheckBox->setEnabled(enable); _ui->callNotificationsCheckBox->setEnabled(enable); } @@ -643,6 +669,51 @@ void GeneralSettings::customizeStyle() }(); _ui->infoAndUpdatesLabel->setText(aboutText); + this->setStyleSheet( + QStringLiteral("QGroupBox { border: %1; font-size: %2; font-weight: %3; color: %4; }").arg( + Theme::instance()->systemPalette()["base"].value().name(), + IonosTheme::settingsTitleSize(), + IonosTheme::settingsTitleWeight500(), + IonosTheme::black() + ) + ); + + this->setStyleSheet( + this->styleSheet() + QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; margin-left: %3 px; color: %4; }").arg( + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::smallMargin(), + IonosTheme::black() + ) + ); + + this->setStyleSheet( + this->styleSheet() + QStringLiteral("QLabel { font-size: %1; font-weight: %2; color: %3; }").arg( + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight500(), + IonosTheme::black() + ) + ); + + this->setStyleSheet( + this->styleSheet() + QStringLiteral("QFrame { font-size: %1; font-weight: %2; color: %3; }").arg( + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::black() + ) + ); + +#if defined(Q_OS_MAC) + _ui->generalBoxLayout->setMargin(16); + _ui->dataProtectionBoxLayout->setMargin(16); +#endif + + // SES-4 removed + _ui->monoIconsCheckBox->hide(); + _ui->callNotificationsCheckBox->hide(); + _ui->advanced_groupBox->hide(); + _ui->updates_frame->hide(); + #if defined(BUILD_UPDATER) // updater info slotUpdateInfo(); diff --git a/src/gui/generalsettings.h b/src/gui/generalsettings.h index 519a40b7fa2a9..db8547e3e1da1 100644 --- a/src/gui/generalsettings.h +++ b/src/gui/generalsettings.h @@ -60,6 +60,10 @@ private slots: void loadMiscSettings(); void slotShowLegalNotice(); void slotRemotePollIntervalChanged(int seconds); + void slotOpenMoreInformationLink(); + void slotOpenLegalNoticeLink(); + void slotOpenPrivacyLink(); + void slotOpenOpenSourceLink(); void updatePollIntervalVisibility(); #if defined(BUILD_UPDATER) void slotUpdateInfo(); diff --git a/src/gui/generalsettings.ui b/src/gui/generalsettings.ui index 623835e14926e..59f3cbb8f3079 100644 --- a/src/gui/generalsettings.ui +++ b/src/gui/generalsettings.ui @@ -1,527 +1,648 @@ - OCC::GeneralSettings - - - - 0 - 0 - 667 - 796 - - - - Form - - - - - - General Settings - - - - - - &Launch on System Startup + OCC::GeneralSettings + + + + 0 + 0 + 601 + 663 + - - - - - - Show Call Notifications + + Form - - - - - - For System Tray - - - Use &Monochrome Icons - - - - - - - Show Chat Notifications - - - - - - - Show Server &Notifications - - - - - - - - - - Advanced - - - - - - 0 - - - - - - - Ask for confirmation before synchronizing new folders larger than - - - true - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 10 - 20 - - - - - - - - 999999 + + + + 24 - - 99 + + 32 - - - - - - MB + + 24 - - - - - - - - - - Qt::Orientation::Horizontal + + 24 - - QSizePolicy::Policy::Fixed - - - - 20 - 20 - - - - - - - - Notify when synchronised folders grow larger than specified limit - - - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 40 - 20 - - - - - - - - Automatically disable synchronisation of folders that overcome limit - - - - - - - - - - - - - Ask for confirmation before synchronizing external storages - - - - - - - - - - - Move removed files to trash - - - - - - - - - - - Show sync folders in &Explorer's navigation pane - - - - - - - - - - - - 0 - 0 - - - - S&how crash reporter - - - - - - - - - - - - Server poll interval - - - - - - - 30 - - - 999999 - - - 1 - - - - - - - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - - - Qt::TextFormat::RichText - - - true - - - Qt::TextInteractionFlag::LinksAccessibleByKeyboard|Qt::TextInteractionFlag::LinksAccessibleByMouse - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - Edit &Ignored Files - - - - - - - Create Debug Archive - - - - - - - Qt::Orientation::Horizontal - - - - 555 - 20 - - - - - - - - - - - - - Info - - - - 10 - - - - - - 0 - 0 - - - - Desktop client x.x.x - - - - - - - - 0 - - - 1 - - - - - - - - 0 - 0 - - - - Update channel - - - - - - - - 0 - 0 - - - - - - - - - - - true - - - true - - - - - - - - 0 - 0 - - - - &Restart && Update - - - - - - - - - - - - 0 - 0 - - - - &Automatically check for updates - - - true - - - - - - - - 0 - 0 - - - - Check Now - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - + + + + + + General Settings + + + + + + + + 3 + + + + + &Launch on system startup + + + + + + + Show server &notifications + + + + + + + For System Tray + + + Use &monochrome icons + + + + + + + Show call notifications + + + + + + + + + + Qt::Horizontal + + + + 20 + 0 + + + + + + + + + Updates + + + + + + + + 3 + + + + + + 0 + 0 + + + + &Automatically check for updates + + + true + + + + + + + + + + + + + Advanced + + + + + + 0 + + + + + + + Ask for confirmation before + synchronizing new folders larger than + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + 999999 + + + 99 + + + + + + + + MB + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + Notify when synchronised folders grow + larger than specified limit + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + Automatically disable synchronisation of + folders that overcome limit + + + + + + + + + + + + + Ask for confirmation before synchronizing + external storages + + + + + + + + + + + Move removed files to trash + + + + + + + + + + + Show sync folders in &Explorer's navigation + pane + + + + + + + + + + + + 0 + 0 + + + + S&how crash reporter + + + + + + + + + + + Edit &Ignored Files + + + + + + + Create Debug Archive + + + + + + + Qt::Horizontal + + + + 555 + 20 + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 16 + + + + QSizePolicy::Minimum + + + + + + + Data Protection + + + + 3 + + + + + &Analysis data collection for needs-based design + + + + + + + 12 + + + 5 + + + + + Legal Notice + + + + + + + Privacy Policy + + + + + + + Open Source Software + + + + + + + Qt::Horizontal + + + + 20 + 0 + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 10 + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + 0 + 0 + + + + Update channel + + + + + + + + 0 + 0 + + + + + stable + + + + + beta + + + + + + + + + + + true + + + true + + + + + + + + 0 + 0 + + + + &Restart && Update + + + + + + + + + + + + 0 + 0 + + + + Check Now + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Usage Documentation + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + Desktop client x.x.x + + + + + + + More Information + + + + + + + Qt::Horizontal + + + + 20 + 0 + + + + + + + - - - - - - - - Usage Documentation - - - - - - - Legal Notice - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 0 - - - - - - - - autostartCheckBox - serverNotificationsCheckBox - ignoredFilesButton - newFolderLimitCheckBox - newFolderLimitSpinBox - crashreporterCheckBox - restartButton - - - - - newFolderLimitCheckBox - toggled(bool) - newFolderLimitSpinBox - setEnabled(bool) - - - 247 - 188 - - - 497 - 190 - - - - - + + autostartCheckBox + serverNotificationsCheckBox + monoIconsCheckBox + ignoredFilesButton + newFolderLimitCheckBox + newFolderLimitSpinBox + crashreporterCheckBox + restartButton + + + + + newFolderLimitCheckBox + toggled(bool) + newFolderLimitSpinBox + setEnabled(bool) + + + 247 + 188 + + + 497 + 190 + + + + + \ No newline at end of file diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 31aba69c31898..2f734f889db4c 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -17,6 +17,7 @@ #include "folderman.h" #include "theme.h" +#include "ionostheme.h" #include "generalsettings.h" #include "networksettings.h" #include "accountsettings.h" @@ -45,10 +46,14 @@ namespace { const QString TOOLBAR_CSS() { - return QStringLiteral("QToolBar { background: %1; margin: 0; padding: 0; border: none; border-bottom: 1px solid %2; spacing: 0; } " - "QToolBar QToolButton { background: %1; border: none; border-bottom: 1px solid %2; margin: 0; padding: 5px; } " - "QToolBar QToolBarExtension { padding:0; } " - "QToolBar QToolButton:checked { background: %3; color: %4; }"); + return QStringLiteral("QToolBar { background: %1; border: none; border-bottom: 1px solid %2; } " + "QToolBar QToolButton { background: %1; border: none; margin: 2px 0px 7px 12px; padding: 11px 4px 4px 4px; border-radius: %5; %8; } " + "QToolBar QToolButton:checked { background: %7; color: %4; }" + "QToolBar QToolButton:hover { background: %3; }" + "QToolBar QToolButton:pressed { background: %6; color: %4; }" + "QToolBar::separator { height: 100%; width: 1px; background: %2; margin-left: 12px; } " // Style for the separator + "QToolBarExtension#qt_toolbar_ext_button {margin: 0 0 7px 0; padding: 0;}" // Style overflow button + ); } const float buttonSizeRatio = 1.618f; // golden ratio @@ -70,7 +75,7 @@ QString shortDisplayNameForSettings(OCC::Account *account, int width) QFont f; QFontMetrics fm(f); host = fm.elidedText(host, Qt::ElideMiddle, width); - user = fm.elidedText(user, Qt::ElideRight, width); + user = fm.elidedText(user, Qt::ElideMiddle, width); } return QStringLiteral("%1\n%2").arg(user, host); } @@ -88,8 +93,9 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _ui->setupUi(this); _toolBar = new QToolBar; - _toolBar->setIconSize(QSize(32, 32)); + _toolBar->setIconSize(QSize(IonosTheme::toolbarIconSize(), IonosTheme::toolbarIconSize())); _toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + _toolBar->setFixedHeight(94); layout()->setMenuBar(_toolBar); // People perceive this as a Window, so also make Ctrl+W work @@ -113,13 +119,12 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _actionGroup->setExclusive(true); connect(_actionGroup, &QActionGroup::triggered, this, &SettingsDialog::slotSwitchPage); - // Adds space between users + activities and general + network actions - auto *spacer = new QWidget(); - spacer->setMinimumWidth(10); - spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); - _toolBar->addWidget(spacer); + QAction *newAccountAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-darkPlus16.svg"), tr("New Account")); + _actionGroup->addAction(newAccountAction); + _toolBar->addAction(newAccountAction); + connect(newAccountAction, &QAction::triggered, _gui, &ownCloudGui::slotNewAccountWizard); - QAction *generalAction = createColorAwareAction(QLatin1String(":/client/theme/settings.svg"), tr("General")); + QAction *generalAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-settings24.svg"), tr("General")); _actionGroup->addAction(generalAction); _toolBar->addAction(generalAction); auto *generalSettings = new GeneralSettings; @@ -134,15 +139,16 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) connect(AccountManager::instance(), &AccountManager::capabilitiesChanged, generalSettings, &GeneralSettings::loadUpdateChannelsList); #endif - QAction *networkAction = createColorAwareAction(QLatin1String(":/client/theme/network.svg"), tr("Network")); - _actionGroup->addAction(networkAction); - _toolBar->addAction(networkAction); - auto *networkSettings = new NetworkSettings; - _ui->stack->addWidget(networkSettings); + // SES-4 removed network settings + // QAction *networkAction = createColorAwareAction(QLatin1String(":/client/theme/network.svg"), tr("Network")); + // _actionGroup->addAction(networkAction); + // _toolBar->addAction(networkAction); + // auto *networkSettings = new NetworkSettings; + // _ui->stack->addWidget(networkSettings); _actionGroupWidgets.insert(generalAction, generalSettings); - _actionGroupWidgets.insert(networkAction, networkSettings); - + // _actionGroupWidgets.insert(networkAction, networkSettings); + _toolBar->addSeparator(); const auto accountsList = AccountManager::instance()->accounts(); for (const auto &account : accountsList) { accountAdded(account.data()); @@ -166,6 +172,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); cfg.restoreGeometry(this); + resize(width() > IonosTheme::minimalSettingsDialogWidth() ? width(): IonosTheme::minimalSettingsDialogWidth(), height()); } SettingsDialog::~SettingsDialog() @@ -224,7 +231,7 @@ void SettingsDialog::showFirstPage() { QList actions = _toolBar->actions(); if (!actions.empty()) { - actions.first()->trigger(); + actions.at(1)->trigger(); } } @@ -242,14 +249,14 @@ void SettingsDialog::accountAdded(AccountState *s) bool brandingSingleAccount = !Theme::instance()->multiAccount(); const auto actionText = brandingSingleAccount ? tr("Account") : s->account()->displayName(); - const auto accountAction = createColorAwareAction(QLatin1String(":/client/theme/account.svg"), actionText); + const auto accountAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-settingsAvatar.svg"), actionText); if (!brandingSingleAccount) { accountAction->setToolTip(s->account()->displayName()); accountAction->setIconText(shortDisplayNameForSettings(s->account().data(), static_cast(height * buttonSizeRatio))); } - _toolBar->insertAction(_toolBar->actions().at(0), accountAction); + _toolBar->addAction(accountAction); auto accountSettings = new AccountSettings(s, this); QString objectName = QLatin1String("accountSettings_"); objectName += s->account()->displayName(); @@ -283,16 +290,7 @@ void SettingsDialog::accountAdded(AccountState *s) void SettingsDialog::slotAccountAvatarChanged() { - auto *account = dynamic_cast(sender()); - if (account && _actionForAccount.contains(account)) { - QAction *action = _actionForAccount[account]; - if (action) { - QImage pix = account->avatar(); - if (!pix.isNull()) { - action->setIcon(QPixmap::fromImage(AvatarJob::makeCircularAvatar(pix))); - } - } - } + } void SettingsDialog::slotAccountDisplayNameChanged() @@ -344,18 +342,44 @@ void SettingsDialog::accountRemoved(AccountState *s) void SettingsDialog::customizeStyle() { - QString highlightColor(palette().highlight().color().name()); - QString highlightTextColor(palette().highlightedText().color().name()); - QString dark(palette().dark().color().name()); - QString background(palette().base().color().name()); - _toolBar->setStyleSheet(TOOLBAR_CSS().arg(background, dark, highlightColor, highlightTextColor)); + QVariantMap palette = Theme::instance()->systemPalette(); + + QString white(palette["window"].value().name()); + QString hoverColor(IonosTheme::toolButtonHoveredColor()); + QString pressedColor(IonosTheme::toolButtonPressedColor()); + QString selectedColor(IonosTheme::menuSelectedItemColor()); + + QString borderColor(palette["shadow"].value().name()); + QString highlightTextColor(palette["highlightedText"].value().name()); + + QString toolbarActionBorderRadius(IonosTheme::toolbarActionBorderRadius()); + QString toolbarSideMargin (IonosTheme::toolbarSideMargin()); + QString toolButtonFont ( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::menuTextColor() + ) + ); + + _toolBar->setStyleSheet( + TOOLBAR_CSS().arg(white, borderColor, hoverColor, highlightTextColor, toolbarActionBorderRadius, pressedColor, selectedColor, toolButtonFont) + ); for (const auto a : _actionGroup->actions()) { QIcon icon = Theme::createColorAwareIcon(a->property("iconPath").toString(), palette()); a->setIcon(icon); auto *btn = qobject_cast(_toolBar->widgetForAction(a)); - if (btn) + if (btn) { + Q_FOREACH (auto ai, AccountManager::instance()->accounts()){ + if (a->text().contains(ai->account()->displayName())){ + btn->setFixedWidth(164); + } + } + btn->setIcon(icon); + } } } @@ -382,10 +406,11 @@ class ToolButtonAction : public QWidgetAction QString objectName = QLatin1String("settingsdialog_toolbutton_"); objectName += text(); btn->setObjectName(objectName); - + btn->setFixedSize(150, 94); btn->setDefaultAction(this); btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); - btn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); + + btn->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); return btn; } }; From b80595503f91f913b223602f148de729a0a5b5fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 22 Jan 2025 15:24:07 +0100 Subject: [PATCH 020/359] style settings - systray, main & owncloudgui 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/main.cpp | 23 ++++++++++++----------- src/gui/owncloudgui.cpp | 5 ++++- src/gui/systray.cpp | 7 +++++++ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/gui/main.cpp b/src/gui/main.cpp index dbbffc9fd9483..c5d70678938aa 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -25,6 +25,7 @@ #include "application.h" #include "cocoainitializer.h" #include "theme.h" +#include "ionostheme.h" #include "common/utility.h" #if defined(BUILD_UPDATER) @@ -40,6 +41,7 @@ #include #include #include +#include "sesstyle.h" using namespace OCC; @@ -84,19 +86,11 @@ int main(int argc, char **argv) #if defined Q_OS_MAC qmlStyle = QStringLiteral("macOS"); #elif defined Q_OS_WIN - if (QOperatingSystemVersion::current().version() < QOperatingSystemVersion::Windows11.version()) { - qmlStyle = QStringLiteral("Universal"); - widgetsStyle = QStringLiteral("Fusion"); - if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_UNIVERSAL_THEME")) { - // initialise theme with the light/dark mode setting from the OS - qputenv("QT_QUICK_CONTROLS_UNIVERSAL_THEME", "System"); - } - } else { - qmlStyle = QStringLiteral("FluentWinUI3"); - widgetsStyle = QStringLiteral("windows11"); - } + qmlStyle = QStringLiteral("Fusion"); + QApplication::setFont(IonosTheme::settingsFontDefault()); #endif + QApplication::setStyle(new sesStyle); QQuickStyle::setStyle(qmlStyle); QQuickStyle::setFallbackStyle(QStringLiteral("Fusion")); @@ -205,5 +199,12 @@ int main(int argc, char **argv) } } + QString clientID; + if (clientID.isEmpty()) { + clientID = QUuid::createUuid().toString(); + } + + + return app.exec(); } diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index b147f136b9474..af423280b9038 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -76,7 +76,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcOwnCloudGui, "com.nextcloud.owncloudgui") +Q_LOGGING_CATEGORY(lcOwnCloudGui, "com.ionos.hidrivenext.owncloudgui") const char propertyAccountC[] = "oc_account"; @@ -619,6 +619,9 @@ void ownCloudGui::slotShowSettings() #ifdef Q_OS_MAC auto *fgbg = new ForegroundBackground(); _settingsDialog->installEventFilter(fgbg); +#else + _settingsDialog->setStyleSheet(QStringLiteral("QDialog {background: %1}") + .arg(Theme::instance()->systemPalette()["base"].value().name())); #endif connect(_tray.data(), &Systray::hideSettingsDialog, diff --git a/src/gui/systray.cpp b/src/gui/systray.cpp index 6837073cea463..719cd73bc1c89 100644 --- a/src/gui/systray.cpp +++ b/src/gui/systray.cpp @@ -15,6 +15,7 @@ #include "accountmanager.h" #include "systray.h" #include "theme.h" +#include "ionostheme.h" #include "config.h" #include "common/utility.h" #include "tray/svgimageprovider.h" @@ -208,6 +209,12 @@ void Systray::setupContextMenu() resumeAction->setVisible(anyPaused); resumeAction->setEnabled(anyPaused); }); + + _contextMenu->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::menuTextColor())); } void Systray::destroyDialog(QQuickWindow *dialog) const From 2ed2bfe6c28b45734c2a6e035f0c2dd70cc475ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 08:05:01 +0100 Subject: [PATCH 021/359] style settings - ignorelisttablewidget 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/ignorelisttablewidget.cpp | 127 +++++++++++++++-- src/gui/ignorelisttablewidget.h | 4 + src/gui/ignorelisttablewidget.ui | 217 +++++++++++++++--------------- 3 files changed, 230 insertions(+), 118 deletions(-) diff --git a/src/gui/ignorelisttablewidget.cpp b/src/gui/ignorelisttablewidget.cpp index 1d4f2422599af..5991db8fc6bf5 100644 --- a/src/gui/ignorelisttablewidget.cpp +++ b/src/gui/ignorelisttablewidget.cpp @@ -3,8 +3,10 @@ #include "folderman.h" +#include "buttonstyle.h" #include #include +#include #include #include @@ -21,18 +23,29 @@ IgnoreListTableWidget::IgnoreListTableWidget(QWidget *parent) setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); ui->setupUi(this); - ui->descriptionLabel->setText(tr("Files or folders matching a pattern will not be synchronized.\n\n" - "Items where deletion is allowed will be deleted if they prevent a " - "directory from being removed. " - "This is useful for meta data.")); + customizeIgnoreListDialogStyle(); + + ui->descriptionLabel->setText(tr("Files or folders that match this pattern will not be synchronized.\n\n" + "Objects that are allowed to be deleted will be deleted if they would " + "prevent a folder from being deleted. " + "This is useful for metadata.")); - ui->removePushButton->setEnabled(false); connect(ui->tableWidget, &QTableWidget::itemSelectionChanged, this, &IgnoreListTableWidget::slotItemSelectionChanged); + + ui->removePushButton->setEnabled(false); + ui->removePushButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Secondary)); + ui->removePushButton->setMinimumSize(QSize(114, 40)); connect(ui->removePushButton, &QAbstractButton::clicked, this, &IgnoreListTableWidget::slotRemoveCurrentItem); + + ui->addPushButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + ui->addPushButton->setMinimumSize(QSize(114, 40)); connect(ui->addPushButton, &QAbstractButton::clicked, this, &IgnoreListTableWidget::slotAddPattern); + + ui->removeAllPushButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + ui->removeAllPushButton->setMinimumSize(QSize(114, 40)); connect(ui->removeAllPushButton, &QAbstractButton::clicked, this, &IgnoreListTableWidget::slotRemoveAllItems); @@ -108,10 +121,13 @@ void IgnoreListTableWidget::slotWriteIgnoreFile(const QString & file) void IgnoreListTableWidget::slotAddPattern() { - bool okClicked = false; - QString pattern = QInputDialog::getText(this, tr("Add Ignore Pattern"), - tr("Add a new ignore pattern:"), - QLineEdit::Normal, QString(), &okClicked); + QInputDialog inputDialog(this); + + customizeAddIgnorePatternDialogStyle(inputDialog); + + bool okClicked = inputDialog.exec() == QDialog::Accepted; + + QString pattern = inputDialog.textValue(); if (!okClicked || pattern.isEmpty()) return; @@ -167,4 +183,97 @@ int IgnoreListTableWidget::addPattern(const QString &pattern, bool deletable, bo return newRow; } +void IgnoreListTableWidget::customizeIgnoreListDialogStyle(){ + + ui->tableWidget->setStyleSheet( + QStringLiteral("QTableWidget { background-color: %1; color: %2; } ").arg( + IonosTheme::white(), + IonosTheme::black() + ) + + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ); + + ui->descriptionLabel->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ); + + ui->tableWidget->horizontalHeader()->setStyleSheet( + QStringLiteral("QHeaderView::section { background-color: %1; color: %2; border-bottom: none; %3; }").arg( + IonosTheme::white(), + IonosTheme::black(), + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + + ui->tableWidget->setMinimumSize(374, 424); + +#if defined(Q_OS_MAC) + ui->verticalButtonLayout->setSpacing(30); + this->setFixedWidth(584); +#endif + +} + +void IgnoreListTableWidget::customizeAddIgnorePatternDialogStyle(QInputDialog &inputDialog){ + inputDialog.setWindowTitle(tr("Ignore Pattern")); + inputDialog.setLabelText(tr("Add New Ignore Pattern")); + inputDialog.setTextValue(QString()); + inputDialog.resize(626, 196); + inputDialog.setVisible(true); + inputDialog.setContentsMargins(12,0,12,12); + + QLabel *label = inputDialog.findChild(); + label->setAlignment(Qt::AlignCenter); + label->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ); + + QLineEdit *lineEdit = inputDialog.findChild(); + lineEdit->setStyleSheet( + QStringLiteral( + "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " + "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") + .arg(IonosTheme::folderWizardPathColor(), + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::buttonRadius(), + IonosTheme::menuBorderColor(), + IonosTheme::white() + ) + ); + + QDialogButtonBox *buttonBox = inputDialog.findChild(); + buttonBox->setLayoutDirection(Qt::RightToLeft); + buttonBox->layout()->setSpacing(16); + buttonBox->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed); + + QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok); + okButton->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + +#if defined(Q_OS_MAC) + buttonBox->layout()->setSpacing(32); +#endif +} + } // namespace OCC diff --git a/src/gui/ignorelisttablewidget.h b/src/gui/ignorelisttablewidget.h index 39d43fde98247..ea4758d93490f 100644 --- a/src/gui/ignorelisttablewidget.h +++ b/src/gui/ignorelisttablewidget.h @@ -1,6 +1,7 @@ #pragma once #include +#include class QAbstractButton; @@ -32,6 +33,9 @@ private slots: private: void setupTableReadOnlyItems(); + void customizeIgnoreListDialogStyle(); + void customizeAddIgnorePatternDialogStyle(QInputDialog &inputDialog); + QString readOnlyTooltip; Ui::IgnoreListTableWidget *ui; }; diff --git a/src/gui/ignorelisttablewidget.ui b/src/gui/ignorelisttablewidget.ui index 1ea59cd4fd844..08d4a771a3088 100644 --- a/src/gui/ignorelisttablewidget.ui +++ b/src/gui/ignorelisttablewidget.ui @@ -1,112 +1,111 @@ - OCC::IgnoreListTableWidget - - - - 0 - 0 - 342 - 378 - - - - IgnoreListTableWidget - - - - - - true - - - QAbstractItemView::SingleSelection - - - QAbstractItemView::SelectRows - - - 2 - - - - Pattern - - - - - Allow Deletion - - + OCC::IgnoreListTableWidget + + + IgnoreListTableWidget + + + + 40 + + + + + 24 + + + 15 + + + + + true + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + 2 + + + + Pattern + + + + + Allow Deletion + + + + + + + + 15 + + + Qt::AlignTop + + + + + true + + + Add + + + + + + + true + + + Remove + + + + + + + Remove all + + + + + + + + + + + true + + + + 0 + 0 + + + + + + + Qt::PlainText + + + true + + + + - - - - - true - - - Add - - - - - - - true - - - Remove - - - - - - - Remove all - - - - - - - true - - - Qt::Vertical - - - - 20 - 322 - - - - - - - - true - - - - 0 - 0 - - - - - - - Qt::PlainText - - - true - - - - - - - - + + + \ No newline at end of file From 5b2c80d7c72926417fda2947c1cc6deeef59e840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 08:45:18 +0100 Subject: [PATCH 022/359] style settings - folderwizard dialog 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/folderwizard.cpp | 320 ++++++++++++++++++++++++--- src/gui/folderwizard.h | 8 +- src/gui/folderwizardsourcepage.ui | 175 +++++++++++---- src/gui/folderwizardtargetpage.ui | 349 ++++++++++++++++++++---------- 4 files changed, 649 insertions(+), 203 deletions(-) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 9f31cf4b78b40..37cf2e367691c 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -20,7 +20,9 @@ #include "account.h" #include "selectivesyncdialog.h" #include "accountstate.h" +#include "buttonstyle.h" #include "creds/abstractcredentials.h" +#include "SesComponents/syncdirvalidation.h" #include "wizard/owncloudwizard.h" #include "common/asserts.h" @@ -30,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -63,9 +66,9 @@ QString FormatWarningsWizardPage::formatWarnings(const QStringList &warnings) co { QString formattedWarning; if (warnings.count() == 1) { - formattedWarning = warnings.first(); + formattedWarning = tr("%1").arg(warnings.first()); } else if (warnings.count() > 1) { - formattedWarning = "