Compare commits
556 Commits
insert_tab
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
985ff74ccf | ||
|
|
a9aa10f4c2 | ||
|
|
7b30229355 | ||
|
|
4a0b636148 | ||
|
|
544c624f07 | ||
|
|
bbde511603 | ||
|
|
ee3a526adb | ||
|
|
e2c960238d | ||
|
|
62bc6fced7 | ||
|
|
dd83812b29 | ||
|
|
88db64451e | ||
|
|
1a96a06cb6 | ||
|
|
00f88d9666 | ||
|
|
664d02edd4 | ||
|
|
72e5c566b7 | ||
|
|
e78133b7b2 | ||
|
|
f9ad1d7801 | ||
|
|
34b68d6eab | ||
|
|
f8143d5419 | ||
|
|
d01ffe3bee | ||
|
|
87cffe5d40 | ||
|
|
d47d87e4b8 | ||
|
|
3b0f6f92a9 | ||
|
|
12cb417682 | ||
|
|
a674eea1cd | ||
|
|
a2854a7740 | ||
|
|
cd984881e5 | ||
|
|
eb22a9aef6 | ||
|
|
d709230510 | ||
|
|
d467b21960 | ||
|
|
893af516b2 | ||
|
|
9fd5002886 | ||
|
|
39c8407e0c | ||
|
|
e922a1e5bc | ||
|
|
66e10e022b | ||
|
|
3342fd6596 | ||
|
|
c1977c51fa | ||
|
|
dc1e76d60c | ||
|
|
6c073b2833 | ||
|
|
11004ebaa0 | ||
|
|
2583408420 | ||
|
|
dec0442007 | ||
|
|
c020f82a6c | ||
|
|
c1555c30cc | ||
|
|
d6cb127320 | ||
|
|
c2373eb7de | ||
|
|
d5843ff7d3 | ||
|
|
c135782001 | ||
|
|
79c208da4f | ||
|
|
b67c4a0c84 | ||
|
|
6b9105b813 | ||
|
|
6c6e0333a9 | ||
|
|
d55387d087 | ||
|
|
bf9560f8ea | ||
|
|
949ed40006 | ||
|
|
f2a9dd4db4 | ||
|
|
ed67081b74 | ||
|
|
705d931231 | ||
|
|
d1367c9dd4 | ||
|
|
31402ee9f8 | ||
|
|
b7cbac88b3 | ||
|
|
fe8c88771f | ||
|
|
befcd9eadf | ||
|
|
46e5aea61c | ||
|
|
103db689ff | ||
|
|
bc34470d3c | ||
|
|
646bddfea3 | ||
|
|
ec196715e0 | ||
|
|
cb63f0e6ea | ||
|
|
c941b2dfde | ||
|
|
671b932804 | ||
|
|
f76d3b4834 | ||
|
|
c248f79971 | ||
|
|
0566677a9d | ||
|
|
268998961b | ||
|
|
716d6f7f25 | ||
|
|
ceb7c91844 | ||
|
|
0a78dcf460 | ||
|
|
da7d23c127 | ||
|
|
64d80b2c53 | ||
|
|
f2a029a0c6 | ||
|
|
c1b60959ae | ||
|
|
d53728c0a8 | ||
|
|
a7ad4386e4 | ||
|
|
4e90a38c52 | ||
|
|
4947548224 | ||
|
|
991b69cc51 | ||
|
|
df1fa27127 | ||
|
|
936eba01cd | ||
|
|
9f8dd99cac | ||
|
|
90e5adde29 | ||
|
|
ddbed9ea14 | ||
|
|
c305432ab2 | ||
|
|
e836b154eb | ||
|
|
782589523e | ||
|
|
bb105d2ef6 | ||
|
|
483bb7354a | ||
|
|
7d9f9b43a7 | ||
|
|
7fd5cbe9d7 | ||
|
|
a16d17a8bf | ||
|
|
faf24cd531 | ||
|
|
979d76aa47 | ||
|
|
0a55bcd586 | ||
|
|
f41a6f06fe | ||
|
|
349d584228 | ||
|
|
fcad7763ff | ||
|
|
1bec4234c3 | ||
|
|
0be5ba8cf6 | ||
|
|
7245dced84 | ||
|
|
e2f611ea9a | ||
|
|
1f21eb0200 | ||
|
|
f2378636e2 | ||
|
|
509b2356d1 | ||
|
|
30b802bd10 | ||
|
|
e857421fdf | ||
|
|
8dcdc8fad2 | ||
|
|
f964ce2c68 | ||
|
|
eb9b439d11 | ||
|
|
a13ed7e4d6 | ||
|
|
8cfa5c8e0e | ||
|
|
2878559ee6 | ||
|
|
6ff39bccf8 | ||
|
|
952131a1e9 | ||
|
|
5edbcc1970 | ||
|
|
04f6d9168e | ||
|
|
cea1327dac | ||
|
|
1c41cbff82 | ||
|
|
06e8451fc0 | ||
|
|
3ff6918b1f | ||
|
|
ac3af4c6cd | ||
|
|
41bb861417 | ||
|
|
6e63418798 | ||
|
|
65781b7cac | ||
|
|
d7e6c613c6 | ||
|
|
8da0713bf0 | ||
|
|
08da925fde | ||
|
|
fb58c435ef | ||
|
|
6bf593ef4b | ||
|
|
6b3b7750cb | ||
|
|
541db8e214 | ||
|
|
644c828f00 | ||
|
|
ed6636ae26 | ||
|
|
1a543e946d | ||
|
|
9bdefd6055 | ||
|
|
8fd691968c | ||
|
|
7abc698d09 | ||
|
|
5b23248fb8 | ||
|
|
46a5cee9c9 | ||
|
|
6c2c9888be | ||
|
|
44ff9e9956 | ||
|
|
f848df74c3 | ||
|
|
6c98c29855 | ||
|
|
c34d479d5c | ||
|
|
a7a97e6978 | ||
|
|
ec018a4c70 | ||
|
|
0fabebb0fe | ||
|
|
521e1fbe39 | ||
|
|
5f2aeaef00 | ||
|
|
818e568f4a | ||
|
|
5d6831d179 | ||
|
|
a2c94c16b5 | ||
|
|
68f1084bf0 | ||
|
|
761bfc50d6 | ||
|
|
59b4dfb89c | ||
|
|
bfa5124999 | ||
|
|
234cf9ac58 | ||
|
|
8f77f4b42a | ||
|
|
fa94da00d4 | ||
|
|
40beef964b | ||
|
|
420baeedfe | ||
|
|
0f8096e314 | ||
|
|
9ec97a8867 | ||
|
|
55ef6ef863 | ||
|
|
c0985f6497 | ||
|
|
2f1ef61f82 | ||
|
|
62d2dd213d | ||
|
|
3c941a2312 | ||
|
|
4634b5617c | ||
|
|
2178b52621 | ||
|
|
61573cba16 | ||
|
|
2d2de53dcd | ||
|
|
0d10c6e2d9 | ||
|
|
767933d0cb | ||
|
|
7a362b7ee3 | ||
|
|
77ed9b0661 | ||
|
|
65600a4dcd | ||
|
|
ac1879d5cb | ||
|
|
f00ef60fb3 | ||
|
|
1a1352e456 | ||
|
|
65ae86a46d | ||
|
|
e239cdb354 | ||
|
|
7140e5e32a | ||
|
|
f5cfe9e05a | ||
|
|
be727c5890 | ||
|
|
f4fc0dab29 | ||
|
|
39bc7f1780 | ||
|
|
364ee33f9c | ||
|
|
cb5e9f60a1 | ||
|
|
2760fb1fe9 | ||
|
|
8a82e4cf57 | ||
|
|
0627b3183f | ||
|
|
df1bc94d9e | ||
|
|
6924e69b6b | ||
|
|
0a6c58fd66 | ||
|
|
bf22e54fc3 | ||
|
|
4307f48d99 | ||
|
|
4bdc04e9d8 | ||
|
|
1c6d86e70f | ||
|
|
6e642ec423 | ||
|
|
0b3c3f0123 | ||
|
|
957afe3a07 | ||
|
|
4ab726fee3 | ||
|
|
8d4507e9d8 | ||
|
|
5a00eece87 | ||
|
|
e2929ade14 | ||
|
|
b801f0655d | ||
|
|
f6ccaba6aa | ||
|
|
21189759dd | ||
|
|
047ea3c494 | ||
|
|
f71c8ffe5d | ||
|
|
381acb2449 | ||
|
|
09e4e6fa5a | ||
|
|
b9479dbd3d | ||
|
|
34cc91a9af | ||
|
|
36cdf4a252 | ||
|
|
85f65b3f1a | ||
|
|
92da2eb8bd | ||
|
|
27edfe63ee | ||
|
|
5517822008 | ||
|
|
702702cbfd | ||
|
|
c552fef134 | ||
|
|
916df28fcd | ||
|
|
c08d91687a | ||
|
|
ccbde05fb7 | ||
|
|
1049576349 | ||
|
|
0bfee09b17 | ||
|
|
87954e4459 | ||
|
|
0301e345b4 | ||
|
|
f9b5ef8d89 | ||
|
|
0ed1f8f429 | ||
|
|
659537916e | ||
|
|
0cac9ac507 | ||
|
|
7a79ecab8a | ||
|
|
1186d2b78c | ||
|
|
b46768537a | ||
|
|
44115d4bd9 | ||
|
|
f2d8e17981 | ||
|
|
7890a408f4 | ||
|
|
a940fc29c6 | ||
|
|
c6595563af | ||
|
|
cb24317010 | ||
|
|
fb1e427ab7 | ||
|
|
9d28a4d0d5 | ||
|
|
df34b0eb2b | ||
|
|
db3dc80170 | ||
|
|
db16c5f1b5 | ||
|
|
d28ca1e7a1 | ||
|
|
e84b4a8146 | ||
|
|
46e0d832f8 | ||
|
|
7e63919c08 | ||
|
|
1873dde358 | ||
|
|
6362d14da6 | ||
|
|
1f48f0f3ad | ||
|
|
82695d1b3d | ||
|
|
08b0f8ad54 | ||
|
|
54c2bd0c30 | ||
|
|
d8784a22b7 | ||
|
|
bc9f136f20 | ||
|
|
7192a06eb8 | ||
|
|
a4c6f1d16c | ||
|
|
009af32e61 | ||
|
|
fab41828ab | ||
|
|
cae42939c8 | ||
|
|
7b30322946 | ||
|
|
2730c135ea | ||
|
|
9c30169c42 | ||
|
|
624d21d001 | ||
|
|
378c647952 | ||
|
|
bbfe99ce7d | ||
|
|
97d675cb24 | ||
|
|
bbfad308e5 | ||
|
|
858cdb2d66 | ||
|
|
9f5e06ae13 | ||
|
|
2cd451c53c | ||
|
|
302ee59d67 | ||
|
|
60d915a99f | ||
|
|
47e4a6065a | ||
|
|
a2a328e3c7 | ||
|
|
dba6e6c869 | ||
|
|
aee68c167a | ||
|
|
5a185268c4 | ||
|
|
8bc2236f4f | ||
|
|
f39b3095aa | ||
|
|
384e29dcec | ||
|
|
e060d99d96 | ||
|
|
8d30fc9c3c | ||
|
|
ca1d3fcd38 | ||
|
|
b82d23e59c | ||
|
|
6d8e396e92 | ||
|
|
0b5840309f | ||
|
|
ac1a0962d3 | ||
|
|
260a2ddb24 | ||
|
|
7b9f9e10e5 | ||
|
|
3fded82f26 | ||
|
|
07d0bdc8ed | ||
|
|
5caa5db273 | ||
|
|
f554df9e7a | ||
|
|
7f58877a47 | ||
|
|
b50e2017e6 | ||
|
|
7dee00f89b | ||
|
|
2563b9e874 | ||
|
|
f304ed7f70 | ||
|
|
9174339b68 | ||
|
|
407c70a8c5 | ||
|
|
87f5b6127b | ||
|
|
d010fe7a95 | ||
|
|
8e7b7f536e | ||
|
|
38dfd519c9 | ||
|
|
c646d13b14 | ||
|
|
f132255492 | ||
|
|
208c804db1 | ||
|
|
89cca4c36a | ||
|
|
64bd9021d9 | ||
|
|
5a9f23a9ad | ||
|
|
0073870480 | ||
|
|
6cdea82a40 | ||
|
|
95b627e83e | ||
|
|
2569e0aa05 | ||
|
|
be86a772ce | ||
|
|
eda610409a | ||
|
|
44a5873415 | ||
|
|
e1368be645 | ||
|
|
1b2b90396a | ||
|
|
bd0b2ad483 | ||
|
|
9c537340c5 | ||
|
|
1bf698478d | ||
|
|
a79abbdb48 | ||
|
|
a8783084f9 | ||
|
|
3f11f74324 | ||
|
|
99854f686e | ||
|
|
35f212a788 | ||
|
|
32eaf93692 | ||
|
|
6f5e33a2ad | ||
|
|
279a9d7df9 | ||
|
|
c0247fc02a | ||
|
|
27d71eecac | ||
|
|
5e59a6dc3a | ||
|
|
409d4489cc | ||
|
|
04ea1c68a7 | ||
|
|
1922395b4b | ||
|
|
3b97fdc2ce | ||
|
|
716207f600 | ||
|
|
159579fb48 | ||
|
|
d2c08aca70 | ||
|
|
b5a179555a | ||
|
|
9c14c62637 | ||
|
|
7c1d04f7be | ||
|
|
9f153af5bb | ||
|
|
7d79ea2770 | ||
|
|
983afc4d1e | ||
|
|
540961b8dd | ||
|
|
fda5887d50 | ||
|
|
0d78303713 | ||
|
|
fbd25a83f1 | ||
|
|
28745fa2f8 | ||
|
|
8e46431b35 | ||
|
|
08714ddc3f | ||
|
|
94b80423d7 | ||
|
|
bfad80c540 | ||
|
|
da6bf2b9ab | ||
|
|
075ef6187f | ||
|
|
782af9a1fc | ||
|
|
2370d79ca6 | ||
|
|
760c0365e0 | ||
|
|
fba9c7ce5d | ||
|
|
44790307d8 | ||
|
|
d1d801cf16 | ||
|
|
8d670577a9 | ||
|
|
af4a3ef2a8 | ||
|
|
1189945ef1 | ||
|
|
f4bfa0f3c5 | ||
|
|
6adce7337b | ||
|
|
1eaeed6c56 | ||
|
|
ae5a75bc3f | ||
|
|
b70fc7b3e8 | ||
|
|
38ee87f762 | ||
|
|
b85a6b55d9 | ||
|
|
6cf05c3438 | ||
|
|
f6b77f5c3c | ||
|
|
a012426f9b | ||
|
|
ee2ef8ac69 | ||
|
|
2a97833d02 | ||
|
|
c2bd56e2e9 | ||
|
|
85da93c2fe | ||
|
|
c80174e7e5 | ||
|
|
3f256f7249 | ||
|
|
85d7b3047c | ||
|
|
2d67e9e1e5 | ||
|
|
da9062ef62 | ||
|
|
f20c3bc63a | ||
|
|
11223bf664 | ||
|
|
c94155fb06 | ||
|
|
822ad48152 | ||
|
|
ea8e442153 | ||
|
|
eb008be404 | ||
|
|
f5ac29c19e | ||
|
|
f22d62a85b | ||
|
|
5199fa45d1 | ||
|
|
b2399bb279 | ||
|
|
b14d3ff30f | ||
|
|
b43770de37 | ||
|
|
875a358600 | ||
|
|
cd58e6e9b5 | ||
|
|
43c8d69281 | ||
|
|
293bf9b74f | ||
|
|
c3aefff3b4 | ||
|
|
44bfc56471 | ||
|
|
a74d8acb42 | ||
|
|
fafa52a1ba | ||
|
|
54c7c7e2a5 | ||
|
|
314ed4bbf2 | ||
|
|
0fbbef7609 | ||
|
|
6eb46250b1 | ||
|
|
14acd0fe4a | ||
|
|
7774aaa75a | ||
|
|
ebdd950b4e | ||
|
|
8e8ead0b4f | ||
|
|
ff0b32a8e0 | ||
|
|
f549a92c01 | ||
|
|
93d0d4b1c2 | ||
|
|
bc1f12ba93 | ||
|
|
10a75b0413 | ||
|
|
9eb9ee4071 | ||
|
|
7ed3f8b2d1 | ||
|
|
7319c52d4d | ||
|
|
8974b1a299 | ||
|
|
63fed89f26 | ||
|
|
866ccb2c4e | ||
|
|
cbc43e5e0e | ||
|
|
3a3c3a96d6 | ||
|
|
0cbc810a5a | ||
|
|
d83ec7c66f | ||
|
|
118e79e7ec | ||
|
|
1c69685257 | ||
|
|
fde8007174 | ||
|
|
60e0201060 | ||
|
|
90b92900a1 | ||
|
|
96a5443a02 | ||
|
|
ffe6eccb05 | ||
|
|
14312442db | ||
|
|
bb630ca605 | ||
|
|
e3117121cc | ||
|
|
a8a40f0bee | ||
|
|
9f9d9792aa | ||
|
|
4399f6ea29 | ||
|
|
754a41d118 | ||
|
|
b0544be068 | ||
|
|
f9b62234b0 | ||
|
|
ac8cf863a0 | ||
|
|
91190e8744 | ||
|
|
efb87c868b | ||
|
|
ad0c2103bf | ||
|
|
5b3ad7e5db | ||
|
|
589a62fe15 | ||
|
|
b51c56e286 | ||
|
|
84ca7b18a0 | ||
|
|
8610a64b51 | ||
|
|
ae55013566 | ||
|
|
60526f2293 | ||
|
|
6c27115de8 | ||
|
|
62d3d73651 | ||
|
|
8fc333806a | ||
|
|
412f24537b | ||
|
|
a74e03451f | ||
|
|
3cd0265df6 | ||
|
|
53e8010732 | ||
|
|
880a7f13b5 | ||
|
|
7f6fa0c96c | ||
|
|
8ac8d63b96 | ||
|
|
0e6971e2ae | ||
|
|
32f9b4664b | ||
|
|
b567f6c5d2 | ||
|
|
c850e36025 | ||
|
|
2bb1589ca2 | ||
|
|
40dccdb5ae | ||
|
|
3d4d677494 | ||
|
|
6e143de09d | ||
|
|
ea0eac0e38 | ||
|
|
f69b1e1ef8 | ||
|
|
87324846cd | ||
|
|
060313c11f | ||
|
|
59108ed245 | ||
|
|
68a3bcde08 | ||
|
|
68e5aec912 | ||
|
|
6998c0e585 | ||
|
|
4d3328e468 | ||
|
|
06bcf2cd48 | ||
|
|
5df2467592 | ||
|
|
48163d2679 | ||
|
|
f3305b95d2 | ||
|
|
8e5e974669 | ||
|
|
773f186a7f | ||
|
|
6b85b2b505 | ||
|
|
ee97b03e53 | ||
|
|
0e5329fd3e | ||
|
|
ac311d6d45 | ||
|
|
f0f3caeb32 | ||
|
|
d394930d74 | ||
|
|
19192541f9 | ||
|
|
8ddabc4cc8 | ||
|
|
42498b2021 | ||
|
|
daa52e109e | ||
|
|
263c73188a | ||
|
|
9a69955124 | ||
|
|
b950b8a209 | ||
|
|
dfc2714d3b | ||
|
|
4841d9b896 | ||
|
|
214c415fa2 | ||
|
|
489f72aa0c | ||
|
|
883d5b5198 | ||
|
|
3ef1ac97c2 | ||
|
|
621e5e7789 | ||
|
|
22402e79f5 | ||
|
|
54b9a8dc50 | ||
|
|
dc05ec3acf | ||
|
|
84c6afa428 | ||
|
|
1097d65959 | ||
|
|
6ae14fada3 | ||
|
|
a2e9c1aa9c | ||
|
|
60c22000a8 | ||
|
|
3ec395fe79 | ||
|
|
fac81265bf | ||
|
|
c1df05b55d | ||
|
|
af549d8ca9 | ||
|
|
9bfd77a206 | ||
|
|
37edf47c4b | ||
|
|
be4e5a88a6 | ||
|
|
a279e71535 | ||
|
|
5ddb02cc8e | ||
|
|
ecccba4536 | ||
|
|
0087a1b360 | ||
|
|
8bfb98ea20 | ||
|
|
de4a59d45a | ||
|
|
068797dbb0 | ||
|
|
302fcd1435 | ||
|
|
1d9902b690 | ||
|
|
9735f41b1a | ||
|
|
4a77580b07 | ||
|
|
1a903e74f2 | ||
|
|
e4565034fb | ||
|
|
052d3cecb9 | ||
|
|
fde133c25e | ||
|
|
6e35a9e7a7 | ||
|
|
bfab7e495a | ||
|
|
3e9dc7f4d6 | ||
|
|
da8f17cce2 |
151
.appveyor.yml
@@ -1,151 +0,0 @@
|
|||||||
version: '{build}'
|
|
||||||
branches:
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
|
|
||||||
image: Visual Studio 2017
|
|
||||||
|
|
||||||
environment:
|
|
||||||
global:
|
|
||||||
# Appveyor doesn't have Qt 12 yet
|
|
||||||
LatestQtVersion: 5.13
|
|
||||||
matrix:
|
|
||||||
# 32 bit builds
|
|
||||||
# MSVC 2015 builds
|
|
||||||
# Dynamic Library builds
|
|
||||||
# LTS version of Qt, dll, 32bit, MSVC 2015, qmake
|
|
||||||
- QT5: C:\Qt\%LatestQtVersion%\msvc2017
|
|
||||||
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
|
|
||||||
targetPlatform: x86
|
|
||||||
use_mingw: "false"
|
|
||||||
use_static: "false"
|
|
||||||
use_cmake: "false"
|
|
||||||
# LTS version of Qt, dll, 32bit, MSVC 2015, cmake
|
|
||||||
- QT5: C:\Qt\%LatestQtVersion%\msvc2017
|
|
||||||
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
|
|
||||||
targetPlatform: x86
|
|
||||||
use_mingw: "false"
|
|
||||||
use_static: "false"
|
|
||||||
use_cmake: "true"
|
|
||||||
# end Dynamic Library builds
|
|
||||||
# Static Library builds
|
|
||||||
# LTS version of Qt, static, 32bit, MSVC 2015, qmake
|
|
||||||
- QT5: C:\Qt\%LatestQtVersion%\msvc2017
|
|
||||||
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
|
|
||||||
targetPlatform: x86
|
|
||||||
use_mingw: "false"
|
|
||||||
use_static: "true"
|
|
||||||
use_cmake: "false"
|
|
||||||
# LTS version of Qt, static, 32bit, MSVC 2015, cmake
|
|
||||||
- QT5: C:\Qt\%LatestQtVersion%\msvc2017
|
|
||||||
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
|
|
||||||
targetPlatform: x86
|
|
||||||
use_mingw: "false"
|
|
||||||
use_static: "true"
|
|
||||||
use_cmake: "true"
|
|
||||||
# end Static Library builds
|
|
||||||
# end MSVC 2015 builds
|
|
||||||
# MinGW builds
|
|
||||||
# Dynamic Library builds
|
|
||||||
# LTS version of Qt, dll, 32bit, MinGW, qmake
|
|
||||||
- QT5: C:\Qt\%LatestQtVersion%\mingw73_32
|
|
||||||
COMPILER: C:\Qt\Tools\mingw730_32
|
|
||||||
targetPlatform: x86
|
|
||||||
use_mingw: "true"
|
|
||||||
use_static: "false"
|
|
||||||
use_cmake: "false"
|
|
||||||
# LTS version of Qt, dll, 32bit, MinGW, cmake
|
|
||||||
- QT5: C:\Qt\%LatestQtVersion%\mingw73_32
|
|
||||||
COMPILER: C:\Qt\Tools\mingw730_32
|
|
||||||
targetPlatform: x86
|
|
||||||
use_mingw: "true"
|
|
||||||
use_static: "false"
|
|
||||||
use_cmake: "true"
|
|
||||||
# end Dynamic Library builds
|
|
||||||
# Static Library builds
|
|
||||||
# LTS version of Qt, static, 32bit, MinGW, qmake
|
|
||||||
- QT5: C:\Qt\%LatestQtVersion%\mingw73_32
|
|
||||||
COMPILER: C:\Qt\Tools\mingw730_32
|
|
||||||
targetPlatform: x86
|
|
||||||
use_mingw: "true"
|
|
||||||
use_static: "true"
|
|
||||||
use_cmake: "false"
|
|
||||||
# LTS version of Qt, static, 32bit, MinGW, cmake
|
|
||||||
- QT5: C:\Qt\%LatestQtVersion%\mingw73_32
|
|
||||||
COMPILER: C:\Qt\Tools\mingw730_32
|
|
||||||
targetPlatform: x86
|
|
||||||
use_mingw: "true"
|
|
||||||
use_static: "true"
|
|
||||||
use_cmake: "true"
|
|
||||||
# end Static Library builds
|
|
||||||
# end MinGW builds
|
|
||||||
# end 32 bit builds
|
|
||||||
# 64 bit builds
|
|
||||||
# MSVC 2015 builds
|
|
||||||
# Dynamic Library builds
|
|
||||||
# LTS version of Qt, dll, 64bit, MSVC 2015, qmake
|
|
||||||
- QT5: C:\Qt\%LatestQtVersion%\msvc2017_64
|
|
||||||
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
|
|
||||||
targetPlatform: amd64
|
|
||||||
use_mingw: "false"
|
|
||||||
use_static: "false"
|
|
||||||
use_cmake: "false"
|
|
||||||
# LTS version of Qt, dll, 64bit, MSVC 2015, cmake
|
|
||||||
- QT5: C:\Qt\%LatestQtVersion%\msvc2017_64
|
|
||||||
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
|
|
||||||
targetPlatform: amd64
|
|
||||||
use_mingw: "false"
|
|
||||||
use_static: "false"
|
|
||||||
use_cmake: "true"
|
|
||||||
# end Dynamic Library builds
|
|
||||||
# Static Library builds
|
|
||||||
# LTS version of Qt, static, 64bit, MSVC 2015, qmake
|
|
||||||
- QT5: C:\Qt\%LatestQtVersion%\msvc2017_64
|
|
||||||
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
|
|
||||||
targetPlatform: amd64
|
|
||||||
use_mingw: "false"
|
|
||||||
use_static: "true"
|
|
||||||
use_cmake: "false"
|
|
||||||
# LTS version of Qt, static, 64bit, MSVC 2015, cmake
|
|
||||||
- QT5: C:\Qt\%LatestQtVersion%\msvc2017_64
|
|
||||||
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
|
|
||||||
targetPlatform: amd64
|
|
||||||
use_mingw: "false"
|
|
||||||
use_static: "true"
|
|
||||||
use_cmake: "true"
|
|
||||||
# end Static Library builds
|
|
||||||
# end MSVC 2015 builds
|
|
||||||
# end 64 bit builds
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
fast_finish: true
|
|
||||||
|
|
||||||
before_build:
|
|
||||||
- set originalWD=%CD%
|
|
||||||
- call "%QT5%\bin\qtenv2.bat"
|
|
||||||
- cd /D %originalWD%
|
|
||||||
- if %use_mingw%==false call "%COMPILER%\vcvarsall.bat" %targetPlatform%
|
|
||||||
- if %use_static%==true (set USESTATIC=ON) else (set USESTATIC=OFF)
|
|
||||||
- if %use_mingw%==true (set CMAKEGENERATOR="MinGW Makefiles") else (set CMAKEGENERATOR="NMake Makefiles")
|
|
||||||
- if %use_mingw%==true (set MAKEENGINE=mingw32-make) else (set MAKEENGINE=nmake)
|
|
||||||
- if %use_mingw%==true set PATH=%PATH:C:\Program Files\Git\usr\bin;=%
|
|
||||||
|
|
||||||
build_script:
|
|
||||||
- if %use_cmake%==true mkdir build
|
|
||||||
- if %use_cmake%==true cd build
|
|
||||||
- if %use_cmake%==true cmake --version
|
|
||||||
- if %use_cmake%==true cmake -G %CMAKEGENERATOR% -DCMAKE_BUILD_TYPE=DEBUG -DBUILD_EXAMPLES=ON -DCMAKE_DEBUG_POSTFIX=d -DBUILD_STATIC=%USESTATIC% -DCMAKE_INSTALL_PREFIX="./installed" ../
|
|
||||||
- if %use_cmake%==true cmake --build .
|
|
||||||
- if %use_cmake%==true cmake --build . --target install
|
|
||||||
- if %use_cmake%==true cmake -G %CMAKEGENERATOR% -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON -DBUILD_STATIC=%USESTATIC% -DCMAKE_INSTALL_PREFIX="./installed" ../
|
|
||||||
- if %use_cmake%==true cmake --build .
|
|
||||||
- if %use_cmake%==true cmake --build . --target install
|
|
||||||
- if %use_cmake%==false if %use_static%==true qmake "CONFIG+=adsBuildStatic"
|
|
||||||
- if %use_cmake%==false if %use_static%==false qmake
|
|
||||||
- if %use_cmake%==false %MAKEENGINE% debug
|
|
||||||
- if %use_cmake%==false %MAKEENGINE% install
|
|
||||||
- if %use_cmake%==false %MAKEENGINE% release
|
|
||||||
- if %use_cmake%==false %MAKEENGINE% install
|
|
||||||
|
|
||||||
after_build:
|
|
||||||
- if %use_mingw%==true set PATH=C:\Program Files\Git\usr\bin;%PATH%
|
|
||||||
146
.clang-format
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
---
|
||||||
|
AccessModifierOffset: -4
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveMacros: None
|
||||||
|
AlignConsecutiveAssignments: None
|
||||||
|
AlignConsecutiveDeclarations: None
|
||||||
|
AlignEscapedNewlines: Right
|
||||||
|
AlignOperands: Align
|
||||||
|
AlignTrailingComments: true
|
||||||
|
|
||||||
|
AllowAllArgumentsOnNextLine: true
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: true
|
||||||
|
AllowShortBlocksOnASingleLine: Never
|
||||||
|
AllowShortCaseLabelsOnASingleLine: true
|
||||||
|
AllowShortFunctionsOnASingleLine: InlineOnly
|
||||||
|
AllowShortIfStatementsOnASingleLine: Never
|
||||||
|
AllowShortLambdasOnASingleLine: Inline
|
||||||
|
AllowShortLoopsOnASingleLine: false
|
||||||
|
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakBeforeMultilineStrings: false
|
||||||
|
AlwaysBreakTemplateDeclarations: Yes
|
||||||
|
|
||||||
|
BinPackArguments: true
|
||||||
|
BinPackParameters: true
|
||||||
|
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: true
|
||||||
|
AfterClass: true
|
||||||
|
AfterControlStatement: Always
|
||||||
|
AfterEnum: true
|
||||||
|
AfterFunction: true
|
||||||
|
AfterNamespace: true
|
||||||
|
AfterStruct: true
|
||||||
|
AfterUnion: true
|
||||||
|
AfterExternBlock: true
|
||||||
|
BeforeCatch: true
|
||||||
|
BeforeElse: true
|
||||||
|
BeforeLambdaBody: false
|
||||||
|
IndentBraces: false
|
||||||
|
SplitEmptyFunction: false
|
||||||
|
SplitEmptyRecord: false
|
||||||
|
SplitEmptyNamespace: false
|
||||||
|
|
||||||
|
BreakBeforeBinaryOperators: NonAssignment
|
||||||
|
BreakBeforeBraces: Custom
|
||||||
|
BreakBeforeTernaryOperators: false
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
BreakInheritanceList: AfterColon
|
||||||
|
BreakStringLiterals: true
|
||||||
|
|
||||||
|
ColumnLimit: 82
|
||||||
|
CommentPragmas: '^(!.*|@c)'
|
||||||
|
|
||||||
|
CompactNamespaces: false
|
||||||
|
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
Cpp11BracedListStyle: true
|
||||||
|
|
||||||
|
FixNamespaceComments: true
|
||||||
|
|
||||||
|
IncludeBlocks: Regroup
|
||||||
|
IncludeCategories:
|
||||||
|
- Regex: '^<windows(\.h)?>' # windows headers
|
||||||
|
Priority: -1
|
||||||
|
- Regex: '^<labbcan[[:alnum:]._/]+' # labbcan headers
|
||||||
|
Priority: 1
|
||||||
|
- Regex: '^<diag[[:alnum:]._/]+' # usl headers
|
||||||
|
Priority: 1
|
||||||
|
- Regex: '^<usl[[:alnum:]._/]+' # usl headers
|
||||||
|
Priority: 1
|
||||||
|
- Regex: '^<qt5compat[[:alnum:]._/]+' # qtlabb headers
|
||||||
|
Priority: 2
|
||||||
|
- Regex: '^<qtcoreaddons[[:alnum:]._/]+' # qtlabb headers
|
||||||
|
Priority: 2
|
||||||
|
- Regex: '^<qtlabb[[:alnum:]._/]+' # qtlabb headers
|
||||||
|
Priority: 2
|
||||||
|
- Regex: '<Q[[:alnum:].]+>' # Qt headers
|
||||||
|
Priority: 3
|
||||||
|
- Regex: '^<sila_cpp[[:alnum:]._/]+' # sila_cpp headers
|
||||||
|
Priority: 4
|
||||||
|
- Regex: '<[[:alnum:]._/]+\.h>' # other headers
|
||||||
|
Priority: 5
|
||||||
|
- Regex: '<[[:alnum:]._/]+>' # system headers
|
||||||
|
Priority: 6
|
||||||
|
- Regex: '.*'
|
||||||
|
Priority: 7
|
||||||
|
|
||||||
|
IncludeIsMainRegex: '(_p)?$'
|
||||||
|
|
||||||
|
IndentCaseBlocks: false
|
||||||
|
IndentCaseLabels: false
|
||||||
|
IndentPPDirectives: AfterHash
|
||||||
|
IndentWidth: 4
|
||||||
|
IndentWrappedFunctionNames: false
|
||||||
|
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||||
|
MaxEmptyLinesToKeep: 1
|
||||||
|
|
||||||
|
NamespaceIndentation: None
|
||||||
|
|
||||||
|
PenaltyBreakAssignment: 20
|
||||||
|
PenaltyBreakBeforeFirstCallParameter: 15
|
||||||
|
PenaltyBreakComment: 10
|
||||||
|
PenaltyBreakFirstLessLess: 5
|
||||||
|
# PenaltyBreakOpenParenthesis: 30
|
||||||
|
PenaltyBreakString: 150
|
||||||
|
PenaltyBreakTemplateDeclaration: 10
|
||||||
|
PenaltyExcessCharacter: 100
|
||||||
|
PenaltyIndentedWhitespace: 0
|
||||||
|
PenaltyReturnTypeOnItsOwnLine: 150
|
||||||
|
|
||||||
|
PointerAlignment: Left
|
||||||
|
ReflowComments: true
|
||||||
|
|
||||||
|
SortIncludes: CaseSensitive
|
||||||
|
SortUsingDeclarations: true
|
||||||
|
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: false
|
||||||
|
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCpp11BracedList: false
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceBeforeSquareBrackets: false
|
||||||
|
SpaceInEmptyBlock: false
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
|
||||||
|
SpacesBeforeTrailingComments: 2
|
||||||
|
SpacesInAngles: Never
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInConditionalStatement: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
|
||||||
|
Standard: c++17
|
||||||
|
|
||||||
|
StatementMacros: [ 'Q_UNUSED', 'PIMPL_D', 'PIMPL_Q', 'OD_ENTRY', 'OD_ENTRY_PROCIMG' ]
|
||||||
|
|
||||||
|
TabWidth: 4
|
||||||
|
UseTab: Never
|
||||||
89
.github/workflows/linux-builds.yml
vendored
@@ -1,23 +1,84 @@
|
|||||||
name: linux-builds
|
name: linux-builds
|
||||||
|
|
||||||
on: [push]
|
on:
|
||||||
|
push:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build_ubuntu_2204_cmake:
|
||||||
strategy:
|
runs-on: ubuntu-22.04
|
||||||
matrix:
|
|
||||||
os: [ubuntu-latest, ubuntu-20.04, ubuntu-18.04]
|
env:
|
||||||
|
QT_VERSION: 6.4.2
|
||||||
|
QT_DIR: ${{ github.workspace }}/Qt
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v1
|
- name: Checkout source
|
||||||
- name: install qt
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0 # Fetch full history and tags
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update --fix-missing
|
sudo apt-get update
|
||||||
sudo apt-get install qt5-default
|
sudo apt-get install -y build-essential cmake ninja-build libgl1-mesa-dev libxkbcommon-x11-0 libx11-dev
|
||||||
sudo apt-get install qtbase5-private-dev
|
|
||||||
|
- name: Install Qt
|
||||||
|
uses: jurplel/install-qt-action@v3
|
||||||
|
with:
|
||||||
|
version: ${{ env.QT_VERSION }}
|
||||||
|
target: desktop
|
||||||
|
host: linux
|
||||||
|
arch: gcc_64
|
||||||
|
dir: ${{ env.QT_DIR }}
|
||||||
|
setup-python: false
|
||||||
|
|
||||||
|
- name: Configure with CMake
|
||||||
|
run: |
|
||||||
|
cmake -S . -B build \
|
||||||
|
-DCMAKE_PREFIX_PATH="${{ env.QT_DIR }}/Qt/${{ env.QT_VERSION }}/gcc_64" \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/install \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-G Ninja
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build build
|
||||||
|
|
||||||
|
- name: Run CMake install (optional)
|
||||||
|
run: cmake --install build
|
||||||
|
|
||||||
|
build_ubuntu_2204:
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Cache Qt
|
||||||
|
id: cache-qt-6-4
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: ../Qt/6.4.2
|
||||||
|
key: ${{ runner.os }}-QtCache-Qt6-4
|
||||||
|
|
||||||
|
- name: Install Qt
|
||||||
|
uses: jurplel/install-qt-action@v2
|
||||||
|
with:
|
||||||
|
version: '6.4.2'
|
||||||
|
host: 'linux'
|
||||||
|
target: 'desktop'
|
||||||
|
install-deps: true
|
||||||
|
cached: ${{ steps.cache-qt-6-4.outputs.cache-hit }}
|
||||||
|
setup-python: true
|
||||||
|
tools: ''
|
||||||
|
tools-only: false
|
||||||
|
|
||||||
|
- name: Install needed xkbcommon symlink
|
||||||
|
run: sudo apt-get install libxkbcommon-dev -y
|
||||||
|
|
||||||
|
- name: Ubuntu and Qt version
|
||||||
|
run: |
|
||||||
|
cat /etc/issue
|
||||||
|
echo number of processors: $(nproc)
|
||||||
|
qmake -v
|
||||||
- name: qmake
|
- name: qmake
|
||||||
run: qmake
|
run: qmake
|
||||||
- name: make
|
- name: make
|
||||||
run: make -j4
|
run: make -j$(nproc)
|
||||||
|
|||||||
102
.github/workflows/windows-cmake.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
name: windows-builds
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_windows_msvc:
|
||||||
|
name: Build with MSVC and Ninja
|
||||||
|
runs-on: windows-2022
|
||||||
|
|
||||||
|
env:
|
||||||
|
QT_VERSION: 6.4.2
|
||||||
|
QT_DIR: ${{ github.workspace }}\Qt
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 📦 Checkout source code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: ⚙️ Install Ninja build system
|
||||||
|
run: choco install ninja --no-progress
|
||||||
|
|
||||||
|
- name: 📥 Install Qt for MSVC
|
||||||
|
uses: jurplel/install-qt-action@v3
|
||||||
|
with:
|
||||||
|
version: ${{ env.QT_VERSION }}
|
||||||
|
target: desktop
|
||||||
|
host: windows
|
||||||
|
arch: win64_msvc2019_64
|
||||||
|
dir: ${{ env.QT_DIR }}
|
||||||
|
setup-python: false
|
||||||
|
|
||||||
|
- name: 🏗️ Setup MSVC Developer Environment
|
||||||
|
uses: TheMrMilchmann/setup-msvc-dev@v3
|
||||||
|
with:
|
||||||
|
arch: x64
|
||||||
|
|
||||||
|
- name: 🛠️ Configure CMake with Ninja + MSVC
|
||||||
|
run: |
|
||||||
|
cmake -S . -B build -G Ninja `
|
||||||
|
-DCMAKE_PREFIX_PATH="${{ env.QT_DIR }}\Qt\${{ env.QT_VERSION }}\msvc2019_64" `
|
||||||
|
-DCMAKE_INSTALL_PREFIX="${{ github.workspace }}\install" `
|
||||||
|
-DCMAKE_BUILD_TYPE=Release
|
||||||
|
shell: powershell
|
||||||
|
|
||||||
|
- name: 🔨 Build with Ninja + MSVC
|
||||||
|
run: cmake --build build
|
||||||
|
shell: powershell
|
||||||
|
|
||||||
|
- name: 📦 Install built files
|
||||||
|
run: cmake --install build
|
||||||
|
shell: powershell
|
||||||
|
|
||||||
|
build_windows_mingw:
|
||||||
|
name: Build with Qt's MinGW and CMake (no Ninja)
|
||||||
|
runs-on: windows-2022
|
||||||
|
|
||||||
|
env:
|
||||||
|
QT_VERSION: 6.8.3
|
||||||
|
QT_DIR: ${{ github.workspace }}\Qt
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 📦 Checkout source code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: 📥 Install Qt + MinGW
|
||||||
|
uses: jurplel/install-qt-action@v4
|
||||||
|
with:
|
||||||
|
aqtversion: '==3.1.19'
|
||||||
|
version: ${{ env.QT_VERSION }}
|
||||||
|
target: desktop
|
||||||
|
host: windows
|
||||||
|
arch: win64_mingw
|
||||||
|
dir: ${{ env.QT_DIR }}
|
||||||
|
tools: 'tools_mingw1310'
|
||||||
|
setup-python: false
|
||||||
|
|
||||||
|
- name: ➕ Add Qt-bundled MinGW to PATH
|
||||||
|
shell: powershell
|
||||||
|
run: |
|
||||||
|
echo "${{ env.QT_DIR }}\Tools\mingw1310_64\bin" >> $env:GITHUB_PATH
|
||||||
|
|
||||||
|
- name: 🛠️ Configure CMake (MinGW)
|
||||||
|
shell: powershell
|
||||||
|
run: |
|
||||||
|
cmake -S . -B build-mingw `
|
||||||
|
-DCMAKE_PREFIX_PATH="${{ env.QT_DIR }}\Qt\${{ env.QT_VERSION }}\mingw_64" `
|
||||||
|
-DCMAKE_INSTALL_PREFIX=${{ github.workspace }}\install `
|
||||||
|
-DCMAKE_BUILD_TYPE=Release `
|
||||||
|
-G "MinGW Makefiles"
|
||||||
|
|
||||||
|
- name: 🔨 Build with CMake (MinGW)
|
||||||
|
shell: powershell
|
||||||
|
run: cmake --build build-mingw -- -j2
|
||||||
|
|
||||||
|
- name: 📦 Install built files (MinGW)
|
||||||
|
shell: powershell
|
||||||
|
run: cmake --install build-mingw
|
||||||
5
.gitignore
vendored
@@ -1,4 +1,4 @@
|
|||||||
*.pro.user
|
*.pro.user*
|
||||||
/build
|
/build
|
||||||
*.o
|
*.o
|
||||||
*.dylib
|
*.dylib
|
||||||
@@ -7,6 +7,9 @@ qrc_*
|
|||||||
moc_*
|
moc_*
|
||||||
ui_*
|
ui_*
|
||||||
Makefile
|
Makefile
|
||||||
|
*.dll
|
||||||
|
*.a
|
||||||
|
build*
|
||||||
|
|
||||||
# IDEs
|
# IDEs
|
||||||
.idea
|
.idea
|
||||||
|
|||||||
233
.travis.yml
@@ -1,233 +0,0 @@
|
|||||||
language: cpp
|
|
||||||
# gcc is clang on mac
|
|
||||||
compiler: gcc
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
fast_finish: true
|
|
||||||
include:
|
|
||||||
- name: Ubuntu qmake Qt5.5.1
|
|
||||||
os: linux
|
|
||||||
dist: trusty
|
|
||||||
group: stable
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
- sourceline: 'ppa:beineri/opt-qt551-trusty'
|
|
||||||
update: true
|
|
||||||
packages:
|
|
||||||
- qt55base
|
|
||||||
- qt55tools
|
|
||||||
- gcc-9
|
|
||||||
- g++-9
|
|
||||||
script:
|
|
||||||
- PATH="/opt/qt55/bin:$PATH"
|
|
||||||
- CXX="g++-9"
|
|
||||||
- CC="gcc-9"
|
|
||||||
- qt55-env.sh
|
|
||||||
- qmake
|
|
||||||
- make
|
|
||||||
- make install
|
|
||||||
- name: Ubuntu qmake dll
|
|
||||||
os: linux
|
|
||||||
dist: bionic
|
|
||||||
group: stable
|
|
||||||
services:
|
|
||||||
- xvfb
|
|
||||||
compiler: gcc
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
- sourceline: 'ppa:beineri/opt-qt-5.14.2-bionic'
|
|
||||||
update: true
|
|
||||||
packages:
|
|
||||||
- qt514base
|
|
||||||
- qt514tools
|
|
||||||
- gcc-9
|
|
||||||
- g++-9
|
|
||||||
- libc6-i386
|
|
||||||
- libgl-dev
|
|
||||||
- libgl1-mesa-dev
|
|
||||||
- mesa-common-dev
|
|
||||||
script:
|
|
||||||
- PATH="/opt/qt514/bin:$PATH"
|
|
||||||
- CXX="g++-9"
|
|
||||||
- CC="gcc-9"
|
|
||||||
- qt514-env.sh
|
|
||||||
- qmake
|
|
||||||
- make
|
|
||||||
- make install
|
|
||||||
- name: Ubuntu qmake static
|
|
||||||
os: linux
|
|
||||||
dist: bionic
|
|
||||||
group: stable
|
|
||||||
services:
|
|
||||||
- xvfb
|
|
||||||
compiler: gcc
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
- sourceline: 'ppa:beineri/opt-qt-5.14.2-bionic'
|
|
||||||
update: true
|
|
||||||
packages:
|
|
||||||
- qt514base
|
|
||||||
- qt514tools
|
|
||||||
- gcc-9
|
|
||||||
- g++-9
|
|
||||||
- libc6-i386
|
|
||||||
- libgl-dev
|
|
||||||
- libgl1-mesa-dev
|
|
||||||
- mesa-common-dev
|
|
||||||
script:
|
|
||||||
- PATH="/opt/qt514/bin:$PATH"
|
|
||||||
- CXX="g++-9"
|
|
||||||
- CC="gcc-9"
|
|
||||||
- qt514-env.sh
|
|
||||||
- qmake "CONFIG+=adsBuildStatic"
|
|
||||||
- make
|
|
||||||
- make install
|
|
||||||
- name: Ubuntu CMake dll
|
|
||||||
os: linux
|
|
||||||
dist: bionic
|
|
||||||
group: stable
|
|
||||||
services:
|
|
||||||
- xvfb
|
|
||||||
compiler: gcc
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
- sourceline: 'ppa:beineri/opt-qt-5.14.2-bionic'
|
|
||||||
update: true
|
|
||||||
packages:
|
|
||||||
- qt514base
|
|
||||||
- qt514tools
|
|
||||||
- gcc-9
|
|
||||||
- g++-9
|
|
||||||
- libc6-i386
|
|
||||||
- libgl-dev
|
|
||||||
- libgl1-mesa-dev
|
|
||||||
- mesa-common-dev
|
|
||||||
script:
|
|
||||||
- PATH="/opt/qt514/bin:$PATH"
|
|
||||||
- CXX="g++-9"
|
|
||||||
- CC="gcc-9"
|
|
||||||
- qt514-env.sh
|
|
||||||
- mkdir ./build
|
|
||||||
- cd ./build
|
|
||||||
- cmake --version
|
|
||||||
- cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_STATIC=OFF -DBUILD_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX="./installed" ../
|
|
||||||
- cmake --build .
|
|
||||||
- cmake --build . --target install
|
|
||||||
- cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=DEBUG -DBUILD_STATIC=OFF -DBUILD_EXAMPLES=ON -DCMAKE_DEBUG_POSTFIX=d -DCMAKE_INSTALL_PREFIX="./installed" ../
|
|
||||||
- cmake --build .
|
|
||||||
- cmake --build . --target install
|
|
||||||
- name: Ubuntu CMake Static
|
|
||||||
os: linux
|
|
||||||
dist: bionic
|
|
||||||
group: stable
|
|
||||||
services:
|
|
||||||
- xvfb
|
|
||||||
compiler: gcc
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
- sourceline: 'ppa:beineri/opt-qt-5.14.2-bionic'
|
|
||||||
update: true
|
|
||||||
packages:
|
|
||||||
- qt514base
|
|
||||||
- qt514tools
|
|
||||||
- gcc-9
|
|
||||||
- g++-9
|
|
||||||
- libc6-i386
|
|
||||||
- libgl-dev
|
|
||||||
- libgl1-mesa-dev
|
|
||||||
- mesa-common-dev
|
|
||||||
script:
|
|
||||||
- PATH="/opt/qt514/bin:$PATH"
|
|
||||||
- CXX="g++-9"
|
|
||||||
- CC="gcc-9"
|
|
||||||
- qt514-env.sh
|
|
||||||
- mkdir ./build
|
|
||||||
- cd ./build
|
|
||||||
- cmake --version
|
|
||||||
- cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_STATIC=ON -DBUILD_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX="./installed" ../
|
|
||||||
- cmake --build .
|
|
||||||
- cmake --build . --target install
|
|
||||||
- cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=DEBUG -DBUILD_STATIC=ON -DBUILD_EXAMPLES=ON -DCMAKE_DEBUG_POSTFIX=d -DCMAKE_INSTALL_PREFIX="./installed" ../
|
|
||||||
- cmake --build .
|
|
||||||
- cmake --build . --target install
|
|
||||||
- name: macOS CMake dll
|
|
||||||
os: osx
|
|
||||||
osx_image: xcode11.3
|
|
||||||
compiler: clang
|
|
||||||
addons:
|
|
||||||
homebrew:
|
|
||||||
packages:
|
|
||||||
- qt
|
|
||||||
update: true
|
|
||||||
script:
|
|
||||||
- PATH="/usr/local/opt/qt5/bin:$PATH"
|
|
||||||
- mkdir -p build
|
|
||||||
- cd build
|
|
||||||
- cmake --version
|
|
||||||
- cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_DEBUG_POSTFIX=_debug -DBUILD_EXAMPLES=ON -DBUILD_STATIC=OFF -DCMAKE_INSTALL_PREFIX="./installed" ../
|
|
||||||
- cmake --build .
|
|
||||||
- cmake --build . --target install
|
|
||||||
- cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON -DBUILD_STATIC=OFF -DCMAKE_INSTALL_PREFIX="./installed" ../
|
|
||||||
- cmake --build .
|
|
||||||
- cmake --build . --target install
|
|
||||||
- name: macOS CMake static
|
|
||||||
os: osx
|
|
||||||
osx_image: xcode11.3
|
|
||||||
compiler: clang
|
|
||||||
addons:
|
|
||||||
homebrew:
|
|
||||||
packages:
|
|
||||||
- qt
|
|
||||||
update: true
|
|
||||||
script:
|
|
||||||
- PATH="/usr/local/opt/qt5/bin:$PATH"
|
|
||||||
- mkdir -p build
|
|
||||||
- cd build
|
|
||||||
- cmake --version
|
|
||||||
- cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_DEBUG_POSTFIX=_debug -DBUILD_EXAMPLES=ON -DBUILD_STATIC=ON -DCMAKE_INSTALL_PREFIX="./installed" ../
|
|
||||||
- cmake --build .
|
|
||||||
- cmake --build . --target install
|
|
||||||
- cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON -DBUILD_STATIC=ON -DCMAKE_INSTALL_PREFIX="./installed" ../
|
|
||||||
- cmake --build .
|
|
||||||
- cmake --build . --target install
|
|
||||||
- name: macOS qmake dll
|
|
||||||
os: osx
|
|
||||||
osx_image: xcode11.3
|
|
||||||
compiler: clang
|
|
||||||
addons:
|
|
||||||
homebrew:
|
|
||||||
packages:
|
|
||||||
- qt
|
|
||||||
update: true
|
|
||||||
script:
|
|
||||||
- PATH="/usr/local/opt/qt5/bin:$PATH"
|
|
||||||
- qmake
|
|
||||||
- make
|
|
||||||
- make install
|
|
||||||
- name: macOS qmake static
|
|
||||||
os: osx
|
|
||||||
osx_image: xcode11.3
|
|
||||||
compiler: clang
|
|
||||||
addons:
|
|
||||||
homebrew:
|
|
||||||
packages:
|
|
||||||
- qt
|
|
||||||
update: true
|
|
||||||
script:
|
|
||||||
- PATH="/usr/local/opt/qt5/bin:$PATH"
|
|
||||||
- qmake "CONFIG+=adsBuildStatic"
|
|
||||||
- make
|
|
||||||
- make install
|
|
||||||
notifications:
|
|
||||||
email: false
|
|
||||||
|
|
||||||
@@ -1,22 +1,35 @@
|
|||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
if (POLICY CMP0091)
|
||||||
|
cmake_policy(SET CMP0091 NEW)
|
||||||
|
endif (POLICY CMP0091)
|
||||||
|
|
||||||
|
# Add cmake modules path (required for Versioning.cmake and git revision description)
|
||||||
|
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
|
||||||
|
|
||||||
# By default, the version information is extracted from the git index. However,
|
# By default, the version information is extracted from the git index. However,
|
||||||
# we can override this behavior by explicitly setting ADS_VERSION and
|
# we can override this behavior by explicitly setting ADS_VERSION and
|
||||||
# skipping the git checks. This is useful for cases where this project is being
|
# skipping the git checks. This is useful for cases where this project is being
|
||||||
# used independently of its original git repo (e.g. vendored in another project)
|
# used independently of its original git repo (e.g. vendored in another project)
|
||||||
if(NOT ADS_VERSION)
|
if(NOT ADS_VERSION)
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
|
|
||||||
include(GetGitRevisionDescription)
|
include(GetGitRevisionDescription)
|
||||||
git_describe(GitTagVersion --tags)
|
git_describe(GitTagVersion --tags)
|
||||||
string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_MAJOR "${GitTagVersion}")
|
string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_MAJOR "${GitTagVersion}")
|
||||||
string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${GitTagVersion}")
|
string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${GitTagVersion}")
|
||||||
string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${GitTagVersion}")
|
string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${GitTagVersion}")
|
||||||
set(VERSION_SHORT "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
|
set(VERSION_SHORT "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
|
||||||
|
set(VERSION_SONAME "${VERSION_MAJOR}")
|
||||||
else()
|
else()
|
||||||
string(REGEX MATCHALL "[\.]" VERSION_DOT_MATCHES ${ADS_VERSION})
|
string(REGEX MATCHALL "[\.]" VERSION_DOT_MATCHES ${ADS_VERSION})
|
||||||
list(LENGTH VERSION_DOT_MATCHES VERSION_DOT_COUNT)
|
list(LENGTH VERSION_DOT_MATCHES VERSION_DOT_COUNT)
|
||||||
if(VERSION_DOT_COUNT EQUAL 2)
|
if(VERSION_DOT_COUNT EQUAL 2)
|
||||||
set(VERSION_SHORT ${ADS_VERSION})
|
set(VERSION_SHORT ${ADS_VERSION})
|
||||||
|
string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_SONAME "${ADS_VERSION}")
|
||||||
|
# Set PROJECT_VERSION_* variables for Versioning.cmake
|
||||||
|
string(REGEX MATCHALL "[0-9]+" VERSION_PARTS "${ADS_VERSION}")
|
||||||
|
list(GET VERSION_PARTS 0 PROJECT_VERSION_MAJOR)
|
||||||
|
list(GET VERSION_PARTS 1 PROJECT_VERSION_MINOR)
|
||||||
|
list(GET VERSION_PARTS 2 PROJECT_VERSION_PATCH)
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "ADS_VERSION must be in major.minor.patch format, e.g. 3.8.1. Got ${ADS_VERSION}")
|
message(FATAL_ERROR "ADS_VERSION must be in major.minor.patch format, e.g. 3.8.1. Got ${ADS_VERSION}")
|
||||||
endif()
|
endif()
|
||||||
@@ -28,10 +41,15 @@ project(QtADS LANGUAGES CXX VERSION ${VERSION_SHORT})
|
|||||||
option(BUILD_STATIC "Build the static library" OFF)
|
option(BUILD_STATIC "Build the static library" OFF)
|
||||||
option(BUILD_EXAMPLES "Build the examples" ON)
|
option(BUILD_EXAMPLES "Build the examples" ON)
|
||||||
|
|
||||||
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
|
# Platform directory: auto-detected based on pointer size, or manually set
|
||||||
set(ads_PlatformDir "x86")
|
if(NOT ADS_PLATFORM_DIR)
|
||||||
|
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
|
||||||
|
set(ads_PlatformDir "x86")
|
||||||
|
else()
|
||||||
|
set(ads_PlatformDir "x64")
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
set(ads_PlatformDir "x64")
|
set(ads_PlatformDir "${ADS_PLATFORM_DIR}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
|
|||||||
29
cmake/modules/FileVersionInfo.rc.in
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO
|
||||||
|
FILEVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0
|
||||||
|
PRODUCTVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0
|
||||||
|
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
|
||||||
|
FILEFLAGS 0
|
||||||
|
FILEOS VOS__WINDOWS32
|
||||||
|
FILETYPE VFT_APP
|
||||||
|
FILESUBTYPE 0
|
||||||
|
BEGIN
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
BEGIN
|
||||||
|
BLOCK "040904b0"
|
||||||
|
BEGIN
|
||||||
|
VALUE "CompanyName", "My Company\0"
|
||||||
|
VALUE "FileDescription", "@PROJECT_NAME@\0"
|
||||||
|
VALUE "FileVersion", "@PROJECT_VERSION_STRING@\0"
|
||||||
|
VALUE "ProductVersion", "@PROJECT_VERSION_STRING@\0"
|
||||||
|
VALUE "GitCommitFull", "@PROJECT_GIT_HASH@\0"
|
||||||
|
VALUE "GitCommitShort", "@PROJECT_GIT_HASH_SHORT@\0"
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Translation", 0x0409, 1200
|
||||||
|
END
|
||||||
|
END
|
||||||
100
cmake/modules/Versioning.cmake
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
# ============================================================
|
||||||
|
# Versioning.cmake (Reusable Version + Resource Generator)
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# Freeze the directory where this module lives
|
||||||
|
# This is critical — it prevents paths from breaking when the
|
||||||
|
# function is invoked from other CMakeLists.txt files.
|
||||||
|
set(_VERSIONING_MODULE_DIR "${CMAKE_CURRENT_LIST_DIR}" CACHE INTERNAL "Versioning module directory")
|
||||||
|
|
||||||
|
# ------------------------------------------------------------
|
||||||
|
# Extract version information from Git or use predefined version
|
||||||
|
# ------------------------------------------------------------
|
||||||
|
if(NOT DEFINED PROJECT_VERSION_MAJOR OR NOT DEFINED PROJECT_VERSION_MINOR OR NOT DEFINED PROJECT_VERSION_PATCH)
|
||||||
|
# Get tag (expected: v1.2.3 or 1.2.3 or 1.2.3-12-gHASH)
|
||||||
|
execute_process(
|
||||||
|
COMMAND git describe --tags --dirty
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
OUTPUT_VARIABLE GIT_DESC_RAW
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
# Remove leading "v" if present
|
||||||
|
string(REGEX REPLACE "^v" "" GIT_DESC "${GIT_DESC_RAW}")
|
||||||
|
|
||||||
|
# Extract major.minor.patch
|
||||||
|
string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" _ "${GIT_DESC}")
|
||||||
|
set(PROJECT_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
||||||
|
set(PROJECT_VERSION_MINOR "${CMAKE_MATCH_2}")
|
||||||
|
set(PROJECT_VERSION_PATCH "${CMAKE_MATCH_3}")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Commit hash (full + short)
|
||||||
|
execute_process(
|
||||||
|
COMMAND git rev-parse HEAD
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
OUTPUT_VARIABLE PROJECT_GIT_HASH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND git rev-parse --short HEAD
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
OUTPUT_VARIABLE PROJECT_GIT_HASH_SHORT
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(PROJECT_VERSION_STRING
|
||||||
|
"${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Export variables to parent scope
|
||||||
|
set(PROJECT_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}" PARENT_SCOPE)
|
||||||
|
set(PROJECT_VERSION_MINOR "${PROJECT_VERSION_MINOR}" PARENT_SCOPE)
|
||||||
|
set(PROJECT_VERSION_PATCH "${PROJECT_VERSION_PATCH}" PARENT_SCOPE)
|
||||||
|
set(PROJECT_VERSION_STRING "${PROJECT_VERSION_STRING}" PARENT_SCOPE)
|
||||||
|
set(PROJECT_GIT_HASH "${PROJECT_GIT_HASH}" PARENT_SCOPE)
|
||||||
|
set(PROJECT_GIT_HASH_SHORT "${PROJECT_GIT_HASH_SHORT}" PARENT_SCOPE)
|
||||||
|
|
||||||
|
# Public variable for users
|
||||||
|
set(PROJECT_AUTO_VERSION "${PROJECT_VERSION_STRING}" PARENT_SCOPE)
|
||||||
|
|
||||||
|
# ------------------------------------------------------------
|
||||||
|
# Reusable function: Attach Windows version resources to target
|
||||||
|
# ------------------------------------------------------------
|
||||||
|
function(add_windows_version_resources target)
|
||||||
|
if(NOT WIN32)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT TARGET "${target}")
|
||||||
|
message(FATAL_ERROR "add_windows_version_resources: target '${target}' not found.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Absolute path to the template (never changes)
|
||||||
|
get_filename_component(_rc_in
|
||||||
|
"${_VERSIONING_MODULE_DIR}/FileVersionInfo.rc.in"
|
||||||
|
ABSOLUTE
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT EXISTS "${_rc_in}")
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"FileVersionInfo.rc.in missing at: ${_rc_in}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Output in the caller's binary dir
|
||||||
|
set(_rc_out "${CMAKE_CURRENT_BINARY_DIR}/${target}_version.rc")
|
||||||
|
get_filename_component(_rc_out "${_rc_out}" ABSOLUTE)
|
||||||
|
|
||||||
|
# Ensure directory exists
|
||||||
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
|
||||||
|
# Configure the template
|
||||||
|
configure_file("${_rc_in}" "${_rc_out}" @ONLY)
|
||||||
|
|
||||||
|
# Add to the target
|
||||||
|
target_sources(${target} PRIVATE "${_rc_out}")
|
||||||
|
endfunction()
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(ads_demo VERSION ${VERSION_SHORT})
|
project(ads_demo VERSION ${VERSION_SHORT})
|
||||||
|
|
||||||
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
|
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
|
||||||
find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED)
|
find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets Quick QuickWidgets REQUIRED)
|
||||||
if(WIN32 AND QT_VERSION_MAJOR LESS 6)
|
if(WIN32 AND QT_VERSION_MAJOR LESS 6)
|
||||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS AxContainer REQUIRED)
|
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS AxContainer REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
@@ -13,17 +13,21 @@ set(ads_demo_SRCS
|
|||||||
mainwindow.ui
|
mainwindow.ui
|
||||||
StatusDialog.cpp
|
StatusDialog.cpp
|
||||||
StatusDialog.ui
|
StatusDialog.ui
|
||||||
|
ImageViewer.cpp
|
||||||
|
RenderWidget.cpp
|
||||||
demo.qrc
|
demo.qrc
|
||||||
)
|
)
|
||||||
add_executable(AdvancedDockingSystemDemo WIN32 ${ads_demo_SRCS})
|
add_executable(AdvancedDockingSystemDemo WIN32 ${ads_demo_SRCS})
|
||||||
target_include_directories(AdvancedDockingSystemDemo PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../src")
|
target_include_directories(AdvancedDockingSystemDemo PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../src")
|
||||||
target_link_libraries(AdvancedDockingSystemDemo PUBLIC Qt${QT_VERSION_MAJOR}::Core
|
target_link_libraries(AdvancedDockingSystemDemo PUBLIC Qt${QT_VERSION_MAJOR}::Core
|
||||||
Qt${QT_VERSION_MAJOR}::Gui
|
Qt${QT_VERSION_MAJOR}::Gui
|
||||||
Qt${QT_VERSION_MAJOR}::Widgets)
|
Qt${QT_VERSION_MAJOR}::Widgets
|
||||||
|
Qt${QT_VERSION_MAJOR}::Quick
|
||||||
|
Qt${QT_VERSION_MAJOR}::QuickWidgets)
|
||||||
if(WIN32 AND QT_VERSION_MAJOR LESS 6)
|
if(WIN32 AND QT_VERSION_MAJOR LESS 6)
|
||||||
target_link_libraries(AdvancedDockingSystemDemo PUBLIC Qt${QT_VERSION_MAJOR}::AxContainer)
|
target_link_libraries(AdvancedDockingSystemDemo PUBLIC Qt${QT_VERSION_MAJOR}::AxContainer)
|
||||||
endif()
|
endif()
|
||||||
target_link_libraries(AdvancedDockingSystemDemo PRIVATE qtadvanceddocking)
|
target_link_libraries(AdvancedDockingSystemDemo PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR})
|
||||||
set_target_properties(AdvancedDockingSystemDemo PROPERTIES
|
set_target_properties(AdvancedDockingSystemDemo PROPERTIES
|
||||||
AUTOMOC ON
|
AUTOMOC ON
|
||||||
AUTORCC ON
|
AUTORCC ON
|
||||||
|
|||||||
280
demo/ImageViewer.cpp
Normal file
@@ -0,0 +1,280 @@
|
|||||||
|
//============================================================================
|
||||||
|
/// \file ImageViewer.cpp
|
||||||
|
/// \author Uwe Kindler
|
||||||
|
/// \date 04.11.2022
|
||||||
|
/// \brief Implementation of CImageViewer
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
// INCLUDES
|
||||||
|
//============================================================================
|
||||||
|
#include "ImageViewer.h"
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QImageReader>
|
||||||
|
#include <QImageWriter>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QStandardPaths>
|
||||||
|
#include <QAction>
|
||||||
|
#include <QScrollBar>
|
||||||
|
#include <QPixmap>
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QImage>
|
||||||
|
#include <QMouseEvent>
|
||||||
|
#include <QWheelEvent>
|
||||||
|
|
||||||
|
#include "RenderWidget.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private image viewer data
|
||||||
|
*/
|
||||||
|
struct ImageViewerPrivate
|
||||||
|
{
|
||||||
|
CImageViewer* _this;
|
||||||
|
CRenderWidget* RenderWidget;///< renders the image to screen
|
||||||
|
bool AutoFit;///< automatically fit image to window size on resize events
|
||||||
|
QSize ImageSize;///< stores the image size to detect image size changes
|
||||||
|
QPoint MouseMoveStartPos;///< for calculation of mouse move vector
|
||||||
|
QLabel* ScalingLabel;///< label displays scaling factor
|
||||||
|
QList<QWidget*> OverlayTools;///< list of tool widget to overlay
|
||||||
|
|
||||||
|
ImageViewerPrivate(CImageViewer* _public) : _this(_public) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
CImageViewer::CImageViewer(QWidget *parent)
|
||||||
|
: Super(parent),
|
||||||
|
d(new ImageViewerPrivate(this))
|
||||||
|
{
|
||||||
|
d->AutoFit = true;
|
||||||
|
d->RenderWidget = new CRenderWidget(this);
|
||||||
|
|
||||||
|
this->setBackgroundRole(QPalette::Light);
|
||||||
|
this->setAlignment(Qt::AlignCenter);
|
||||||
|
this->setWidget(d->RenderWidget);
|
||||||
|
this->createActions();
|
||||||
|
this->setMouseTracking(false); // only produce mouse move events if mouse button pressed
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
CImageViewer::~CImageViewer()
|
||||||
|
{
|
||||||
|
delete d;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
bool CImageViewer::loadFile(const QString& fileName)
|
||||||
|
{
|
||||||
|
QImageReader reader(fileName);
|
||||||
|
reader.setAutoTransform(true);
|
||||||
|
const QImage newImage = reader.read();
|
||||||
|
if (newImage.isNull())
|
||||||
|
{
|
||||||
|
QMessageBox::information(this, QGuiApplication::applicationDisplayName(),
|
||||||
|
tr("Cannot load %1: %2")
|
||||||
|
.arg(QDir::toNativeSeparators(fileName), reader.errorString()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
setImage(newImage);
|
||||||
|
setWindowFilePath(fileName);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
void CImageViewer::setImage(const QImage &newImage)
|
||||||
|
{
|
||||||
|
d->RenderWidget->showImage(newImage);
|
||||||
|
this->adjustDisplaySize(newImage);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CImageViewer::adjustDisplaySize(const QImage& Image)
|
||||||
|
{
|
||||||
|
if (d->ImageSize == Image.size())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
d->ImageSize = Image.size();
|
||||||
|
if (d->AutoFit)
|
||||||
|
{
|
||||||
|
this->fitToWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
static void initializeImageFileDialog(QFileDialog &dialog, QFileDialog::AcceptMode acceptMode)
|
||||||
|
{
|
||||||
|
static bool firstDialog = true;
|
||||||
|
|
||||||
|
if (firstDialog) {
|
||||||
|
firstDialog = false;
|
||||||
|
const QStringList picturesLocations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
|
||||||
|
dialog.setDirectory(picturesLocations.isEmpty() ? QDir::currentPath() : picturesLocations.last());
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList mimeTypeFilters;
|
||||||
|
const QByteArrayList supportedMimeTypes = acceptMode == QFileDialog::AcceptOpen
|
||||||
|
? QImageReader::supportedMimeTypes() : QImageWriter::supportedMimeTypes();
|
||||||
|
for (const QByteArray &mimeTypeName : supportedMimeTypes)
|
||||||
|
mimeTypeFilters.append(mimeTypeName);
|
||||||
|
mimeTypeFilters.sort();
|
||||||
|
dialog.setMimeTypeFilters(mimeTypeFilters);
|
||||||
|
dialog.selectMimeTypeFilter("image/jpeg");
|
||||||
|
if (acceptMode == QFileDialog::AcceptSave)
|
||||||
|
dialog.setDefaultSuffix("jpg");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
void CImageViewer::open()
|
||||||
|
{
|
||||||
|
QFileDialog dialog(this, tr("Open File"));
|
||||||
|
initializeImageFileDialog(dialog, QFileDialog::AcceptOpen);
|
||||||
|
|
||||||
|
while (dialog.exec() == QDialog::Accepted && !loadFile(dialog.selectedFiles().first())) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
void CImageViewer::createActions()
|
||||||
|
{
|
||||||
|
QAction* a;
|
||||||
|
a = new QAction(tr("&Open..."));
|
||||||
|
a->setIcon(QIcon(":/adsdemo/images/perm_media.svg"));
|
||||||
|
connect(a, &QAction::triggered, this, &CImageViewer::open);
|
||||||
|
a->setShortcut(QKeySequence::Open);;
|
||||||
|
this->addAction(a);
|
||||||
|
|
||||||
|
a = new QAction(tr("Fit on Screen"));
|
||||||
|
a->setIcon(QIcon(":/adsdemo/images/zoom_out_map.svg"));
|
||||||
|
connect(a, &QAction::triggered, this, &CImageViewer::fitToWindow);
|
||||||
|
this->addAction(a);
|
||||||
|
|
||||||
|
a = new QAction(tr("Actual Pixels"));
|
||||||
|
a->setIcon(QIcon(":/adsdemo/images/find_in_page.svg"));
|
||||||
|
connect(a, &QAction::triggered, this, &CImageViewer::normalSize);
|
||||||
|
this->addAction(a);
|
||||||
|
|
||||||
|
a = new QAction(this);
|
||||||
|
a->setSeparator(true);
|
||||||
|
this->addAction(a);
|
||||||
|
|
||||||
|
a = new QAction(tr("Zoom In (25%)"));
|
||||||
|
a->setIcon(QIcon(":/adsdemo/images/zoom_in.svg"));
|
||||||
|
connect(a, &QAction::triggered, this, &CImageViewer::zoomIn);
|
||||||
|
this->addAction(a);
|
||||||
|
|
||||||
|
a = new QAction(tr("Zoom Out (25%)"));
|
||||||
|
a->setIcon(QIcon(":/adsdemo/images/zoom_out.svg"));
|
||||||
|
connect(a, &QAction::triggered, this, &CImageViewer::zoomOut);
|
||||||
|
this->addAction(a);
|
||||||
|
|
||||||
|
this->setContextMenuPolicy(Qt::ActionsContextMenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
void CImageViewer::zoomIn()
|
||||||
|
{
|
||||||
|
d->AutoFit = false;
|
||||||
|
d->RenderWidget->zoomIn();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
void CImageViewer::zoomOut()
|
||||||
|
{
|
||||||
|
d->AutoFit = false;
|
||||||
|
d->RenderWidget->zoomOut();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
void CImageViewer::normalSize()
|
||||||
|
{
|
||||||
|
d->AutoFit = false;
|
||||||
|
d->RenderWidget->normalSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
void CImageViewer::fitToWindow()
|
||||||
|
{
|
||||||
|
d->AutoFit = true;
|
||||||
|
d->RenderWidget->scaleToSize(this->maximumViewportSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CImageViewer::resizeEvent(QResizeEvent* ResizeEvent)
|
||||||
|
{
|
||||||
|
Super::resizeEvent(ResizeEvent);
|
||||||
|
if (d->AutoFit)
|
||||||
|
{
|
||||||
|
this->fitToWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CImageViewer::mousePressEvent(QMouseEvent* Event)
|
||||||
|
{
|
||||||
|
d->RenderWidget->setCursor(Qt::ClosedHandCursor);
|
||||||
|
d->MouseMoveStartPos = Event->pos();
|
||||||
|
Super::mousePressEvent(Event);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CImageViewer::mouseReleaseEvent(QMouseEvent* Event)
|
||||||
|
{
|
||||||
|
d->RenderWidget->setCursor(Qt::OpenHandCursor);
|
||||||
|
Super::mouseReleaseEvent(Event);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CImageViewer::mouseMoveEvent(QMouseEvent* Event)
|
||||||
|
{
|
||||||
|
QPoint MoveVector = Event->pos() - d->MouseMoveStartPos;
|
||||||
|
d->MouseMoveStartPos = Event->pos();
|
||||||
|
horizontalScrollBar()->setValue(horizontalScrollBar()->value()
|
||||||
|
- MoveVector.x());
|
||||||
|
verticalScrollBar()->setValue(verticalScrollBar()->value() - MoveVector.y());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CImageViewer::wheelEvent(QWheelEvent* Event)
|
||||||
|
{
|
||||||
|
double numDegrees = Event->angleDelta().y() / 8;
|
||||||
|
double numSteps = numDegrees / 15;
|
||||||
|
d->AutoFit = false;
|
||||||
|
double Zoom;
|
||||||
|
if (numSteps < 0)
|
||||||
|
{
|
||||||
|
Zoom = pow(0.9, 0 - numSteps);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Zoom = pow(1.10, numSteps);
|
||||||
|
}
|
||||||
|
d->RenderWidget->zoomByValue(Zoom);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "moc_ImageViewer.cpp"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// EOF ImageViewer.cpp
|
||||||
88
demo/ImageViewer.h
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
#ifndef ImageViewerH
|
||||||
|
#define ImageViewerH
|
||||||
|
//============================================================================
|
||||||
|
/// \file ImageViewer.h
|
||||||
|
/// \author Uwe Kindler
|
||||||
|
/// \date 04.11.2022
|
||||||
|
/// \brief Declaration of CImageViewer
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
// INCLUDES
|
||||||
|
//============================================================================
|
||||||
|
#include <QScrollArea>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QLabel;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
|
||||||
|
struct ImageViewerPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tiny simple image viewer for showing images in demo
|
||||||
|
*/
|
||||||
|
class CImageViewer : public QScrollArea
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
using Super = QScrollArea;
|
||||||
|
|
||||||
|
explicit CImageViewer(QWidget *parent = nullptr);
|
||||||
|
virtual ~CImageViewer();
|
||||||
|
|
||||||
|
bool loadFile(const QString& Filename);
|
||||||
|
void setImage(const QImage &newImage);
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
void open();
|
||||||
|
void zoomIn();
|
||||||
|
void zoomOut();
|
||||||
|
void normalSize();
|
||||||
|
void fitToWindow();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/**
|
||||||
|
* @brief Reimplemented from QScrollArea to adjust image scaling if m_AutoFit is
|
||||||
|
* true.
|
||||||
|
*/
|
||||||
|
virtual void resizeEvent(QResizeEvent* ResizeEvent);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Handle mouse press events.
|
||||||
|
*/
|
||||||
|
virtual void mousePressEvent(QMouseEvent* Event);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Handles mouse release events.
|
||||||
|
*/
|
||||||
|
virtual void mouseReleaseEvent(QMouseEvent* Event);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Handle mouse move events.
|
||||||
|
*/
|
||||||
|
virtual void mouseMoveEvent(QMouseEvent* Event);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Use mouse wheel to change scaling of the image.
|
||||||
|
*/
|
||||||
|
virtual void wheelEvent(QWheelEvent* Event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* @brief Create the wiget actions.
|
||||||
|
*/
|
||||||
|
void createActions();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Adjust size of render widget in case of image size change.
|
||||||
|
* @param[in] Image The new image that may have a different image size.
|
||||||
|
*/
|
||||||
|
void adjustDisplaySize(const QImage& Image);
|
||||||
|
|
||||||
|
ImageViewerPrivate* d;
|
||||||
|
friend ImageViewerPrivate;
|
||||||
|
};
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif // ImageViewerH
|
||||||
@@ -60,26 +60,45 @@
|
|||||||
#include <QToolButton>
|
#include <QToolButton>
|
||||||
#include <QToolBar>
|
#include <QToolBar>
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
|
#include <QMap>
|
||||||
|
#include <QElapsedTimer>
|
||||||
|
#include <QQuickWidget>
|
||||||
|
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
|
||||||
|
#include <QRandomGenerator>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||||
#include <QAxWidget>
|
#include <QAxWidget>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <QMap>
|
|
||||||
#include <QElapsedTimer>
|
|
||||||
|
|
||||||
#include "DockManager.h"
|
|
||||||
#include "DockWidget.h"
|
|
||||||
#include "DockAreaWidget.h"
|
|
||||||
#include "DockAreaTitleBar.h"
|
|
||||||
#include "DockAreaTabBar.h"
|
#include "DockAreaTabBar.h"
|
||||||
#include "FloatingDockContainer.h"
|
#include "DockAreaTitleBar.h"
|
||||||
|
#include "DockAreaWidget.h"
|
||||||
#include "DockComponentsFactory.h"
|
#include "DockComponentsFactory.h"
|
||||||
#include "StatusDialog.h"
|
#include "DockManager.h"
|
||||||
#include "DockSplitter.h"
|
#include "DockSplitter.h"
|
||||||
|
#include "DockWidget.h"
|
||||||
|
#include "FloatingDockContainer.h"
|
||||||
|
#include "ImageViewer.h"
|
||||||
|
#include "MyDockAreaTitleBar.h"
|
||||||
|
#include "StatusDialog.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a random number from 0 to highest - 1
|
||||||
|
*/
|
||||||
|
int randomNumberBounded(int highest)
|
||||||
|
{
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
|
||||||
|
return QRandomGenerator::global()->bounded(highest);
|
||||||
|
#else
|
||||||
|
qsrand(QTime::currentTime().msec());
|
||||||
|
return qrand() % highest;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -127,7 +146,7 @@ public:
|
|||||||
using Super = ads::CDockComponentsFactory;
|
using Super = ads::CDockComponentsFactory;
|
||||||
ads::CDockAreaTitleBar* createDockAreaTitleBar(ads::CDockAreaWidget* DockArea) const override
|
ads::CDockAreaTitleBar* createDockAreaTitleBar(ads::CDockAreaWidget* DockArea) const override
|
||||||
{
|
{
|
||||||
auto TitleBar = new ads::CDockAreaTitleBar(DockArea);
|
auto TitleBar = new MyDockAreaTitleBar(DockArea);
|
||||||
auto CustomButton = new QToolButton(DockArea);
|
auto CustomButton = new QToolButton(DockArea);
|
||||||
CustomButton->setToolTip(QObject::tr("Help"));
|
CustomButton->setToolTip(QObject::tr("Help"));
|
||||||
CustomButton->setIcon(svgIcon(":/adsdemo/images/help_outline.svg"));
|
CustomButton->setIcon(svgIcon(":/adsdemo/images/help_outline.svg"));
|
||||||
@@ -216,9 +235,11 @@ struct MainWindowPrivate
|
|||||||
QFileSystemModel* m = new QFileSystemModel(w);
|
QFileSystemModel* m = new QFileSystemModel(w);
|
||||||
m->setRootPath(QDir::currentPath());
|
m->setRootPath(QDir::currentPath());
|
||||||
w->setModel(m);
|
w->setModel(m);
|
||||||
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Filesystem %1")
|
w->setRootIndex(m->index(QDir::currentPath()));
|
||||||
|
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Filesystem %1")
|
||||||
.arg(FileSystemCount++));
|
.arg(FileSystemCount++));
|
||||||
DockWidget->setWidget(w);
|
DockWidget->setWidget(w);
|
||||||
|
DockWidget->setIcon(svgIcon(":/adsdemo/images/folder_open.svg"));
|
||||||
ui.menuView->addAction(DockWidget->toggleViewAction());
|
ui.menuView->addAction(DockWidget->toggleViewAction());
|
||||||
// We disable focus to test focus highlighting if the dock widget content
|
// We disable focus to test focus highlighting if the dock widget content
|
||||||
// does not support focus
|
// does not support focus
|
||||||
@@ -236,7 +257,7 @@ struct MainWindowPrivate
|
|||||||
{
|
{
|
||||||
static int CalendarCount = 0;
|
static int CalendarCount = 0;
|
||||||
QCalendarWidget* w = new QCalendarWidget();
|
QCalendarWidget* w = new QCalendarWidget();
|
||||||
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Calendar %1").arg(CalendarCount++));
|
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Calendar %1").arg(CalendarCount++));
|
||||||
// The following lines are for testing the setWidget() and takeWidget()
|
// The following lines are for testing the setWidget() and takeWidget()
|
||||||
// functionality
|
// functionality
|
||||||
DockWidget->setWidget(w);
|
DockWidget->setWidget(w);
|
||||||
@@ -249,6 +270,10 @@ struct MainWindowPrivate
|
|||||||
auto ToolBar = DockWidget->createDefaultToolBar();
|
auto ToolBar = DockWidget->createDefaultToolBar();
|
||||||
ToolBar->addAction(ui.actionSaveState);
|
ToolBar->addAction(ui.actionSaveState);
|
||||||
ToolBar->addAction(ui.actionRestoreState);
|
ToolBar->addAction(ui.actionRestoreState);
|
||||||
|
// For testing all calendar dock widgets have a the tool button style
|
||||||
|
// Qt::ToolButtonTextUnderIcon
|
||||||
|
DockWidget->setToolBarStyleSource(ads::CDockWidget::ToolBarStyleFromDockWidget);
|
||||||
|
DockWidget->setToolBarStyle(Qt::ToolButtonTextUnderIcon, ads::CDockWidget::StateFloating);
|
||||||
return DockWidget;
|
return DockWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,8 +302,9 @@ struct MainWindowPrivate
|
|||||||
.arg(LabelCount)
|
.arg(LabelCount)
|
||||||
.arg(QTime::currentTime().toString("hh:mm:ss:zzz")));
|
.arg(QTime::currentTime().toString("hh:mm:ss:zzz")));
|
||||||
|
|
||||||
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Label %1").arg(LabelCount++));
|
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Label %1").arg(LabelCount++));
|
||||||
DockWidget->setWidget(l);
|
DockWidget->setWidget(l);
|
||||||
|
DockWidget->setIcon(svgIcon(":/adsdemo/images/font_download.svg"));
|
||||||
ui.menuView->addAction(DockWidget->toggleViewAction());
|
ui.menuView->addAction(DockWidget->toggleViewAction());
|
||||||
return DockWidget;
|
return DockWidget;
|
||||||
}
|
}
|
||||||
@@ -294,7 +320,7 @@ struct MainWindowPrivate
|
|||||||
w->setPlaceholderText("This is an editor. If you close the editor, it will be "
|
w->setPlaceholderText("This is an editor. If you close the editor, it will be "
|
||||||
"deleted. Enter your text here.");
|
"deleted. Enter your text here.");
|
||||||
w->setStyleSheet("border: none");
|
w->setStyleSheet("border: none");
|
||||||
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Editor %1").arg(EditorCount++));
|
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Editor %1").arg(EditorCount++));
|
||||||
DockWidget->setWidget(w);
|
DockWidget->setWidget(w);
|
||||||
DockWidget->setIcon(svgIcon(":/adsdemo/images/edit.svg"));
|
DockWidget->setIcon(svgIcon(":/adsdemo/images/edit.svg"));
|
||||||
DockWidget->setFeature(ads::CDockWidget::CustomCloseHandling, true);
|
DockWidget->setFeature(ads::CDockWidget::CustomCloseHandling, true);
|
||||||
@@ -316,6 +342,35 @@ struct MainWindowPrivate
|
|||||||
return DockWidget;
|
return DockWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a simply image viewr
|
||||||
|
*/
|
||||||
|
ads::CDockWidget* createImageViewer()
|
||||||
|
{
|
||||||
|
static int ImageViewerCount = 0;
|
||||||
|
auto w = new CImageViewer();
|
||||||
|
auto ImageIndex = randomNumberBounded(4);
|
||||||
|
auto FileName = ":adsdemo/images/ads_logo.svg";
|
||||||
|
|
||||||
|
// Pick a random image from a number of images
|
||||||
|
switch (ImageIndex)
|
||||||
|
{
|
||||||
|
case 0: FileName = ":adsdemo/images/ads_tile_blue.svg"; break;
|
||||||
|
case 1: FileName = ":adsdemo/images/ads_tile_blue_light.svg"; break;
|
||||||
|
case 2: FileName = ":adsdemo/images/ads_tile_green.svg"; break;
|
||||||
|
case 3: FileName = ":adsdemo/images/ads_tile_orange.svg"; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto Result = w->loadFile(FileName);
|
||||||
|
qDebug() << "loadFile result: " << Result;
|
||||||
|
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Image Viewer %1").arg(ImageViewerCount++));
|
||||||
|
DockWidget->setIcon(svgIcon(":/adsdemo/images/photo.svg"));
|
||||||
|
DockWidget->setWidget(w,ads:: CDockWidget::ForceNoScrollArea);
|
||||||
|
auto ToolBar = DockWidget->createDefaultToolBar();
|
||||||
|
ToolBar->addActions(w->actions());
|
||||||
|
return DockWidget;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a table widget
|
* Create a table widget
|
||||||
*/
|
*/
|
||||||
@@ -323,7 +378,7 @@ struct MainWindowPrivate
|
|||||||
{
|
{
|
||||||
static int TableCount = 0;
|
static int TableCount = 0;
|
||||||
auto w = new CMinSizeTableWidget();
|
auto w = new CMinSizeTableWidget();
|
||||||
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Table %1").arg(TableCount++));
|
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Table %1").arg(TableCount++));
|
||||||
static int colCount = 5;
|
static int colCount = 5;
|
||||||
static int rowCount = 30;
|
static int rowCount = 30;
|
||||||
w->setColumnCount(colCount);
|
w->setColumnCount(colCount);
|
||||||
@@ -341,7 +396,7 @@ struct MainWindowPrivate
|
|||||||
DockWidget->setMinimumSizeHintMode(ads::CDockWidget::MinimumSizeHintFromContent);
|
DockWidget->setMinimumSizeHintMode(ads::CDockWidget::MinimumSizeHintFromContent);
|
||||||
auto ToolBar = DockWidget->createDefaultToolBar();
|
auto ToolBar = DockWidget->createDefaultToolBar();
|
||||||
auto Action = ToolBar->addAction(svgIcon(":/adsdemo/images/fullscreen.svg"), "Toggle Fullscreen");
|
auto Action = ToolBar->addAction(svgIcon(":/adsdemo/images/fullscreen.svg"), "Toggle Fullscreen");
|
||||||
QObject::connect(Action, &QAction::triggered, [=]()
|
QObject::connect(Action, &QAction::triggered, [DockWidget]()
|
||||||
{
|
{
|
||||||
if (DockWidget->isFullScreen())
|
if (DockWidget->isFullScreen())
|
||||||
{
|
{
|
||||||
@@ -356,6 +411,17 @@ struct MainWindowPrivate
|
|||||||
return DockWidget;
|
return DockWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create QQuickWidget for test for OpenGL and QQuick
|
||||||
|
*/
|
||||||
|
ads::CDockWidget *createQQuickWidget()
|
||||||
|
{
|
||||||
|
QQuickWidget *widget = new QQuickWidget();
|
||||||
|
ads::CDockWidget *dockWidget = DockManager->createDockWidget("Quick");
|
||||||
|
dockWidget->setWidget(widget);
|
||||||
|
return dockWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
||||||
@@ -366,14 +432,13 @@ struct MainWindowPrivate
|
|||||||
{
|
{
|
||||||
static int ActiveXCount = 0;
|
static int ActiveXCount = 0;
|
||||||
QAxWidget* w = new QAxWidget("{6bf52a52-394a-11d3-b153-00c04f79faa6}", parent);
|
QAxWidget* w = new QAxWidget("{6bf52a52-394a-11d3-b153-00c04f79faa6}", parent);
|
||||||
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Active X %1").arg(ActiveXCount++));
|
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Active X %1").arg(ActiveXCount++));
|
||||||
DockWidget->setWidget(w);
|
DockWidget->setWidget(w);
|
||||||
ui.menuView->addAction(DockWidget->toggleViewAction());
|
ui.menuView->addAction(DockWidget->toggleViewAction());
|
||||||
return DockWidget;
|
return DockWidget;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
@@ -386,8 +451,8 @@ void MainWindowPrivate::createContent()
|
|||||||
|
|
||||||
// For this Special Dock Area we want to avoid dropping on the center of it (i.e. we don't want this widget to be ever tabbified):
|
// For this Special Dock Area we want to avoid dropping on the center of it (i.e. we don't want this widget to be ever tabbified):
|
||||||
{
|
{
|
||||||
SpecialDockArea->setAllowedAreas(ads::OuterDockAreas);
|
//SpecialDockArea->setAllowedAreas(ads::OuterDockAreas);
|
||||||
//SpecialDockArea->setAllowedAreas({ads::LeftDockWidgetArea, ads::RightDockWidgetArea}); // just for testing
|
SpecialDockArea->setAllowedAreas({ads::LeftDockWidgetArea, ads::RightDockWidgetArea, ads::TopDockWidgetArea}); // just for testing
|
||||||
}
|
}
|
||||||
|
|
||||||
DockWidget = createLongTextLabelDockWidget();
|
DockWidget = createLongTextLabelDockWidget();
|
||||||
@@ -405,12 +470,12 @@ void MainWindowPrivate::createContent()
|
|||||||
appendFeaturStringToWindowTitle(FileSystemWidget);
|
appendFeaturStringToWindowTitle(FileSystemWidget);
|
||||||
|
|
||||||
// Test custom factory - we inject a help button into the title bar
|
// Test custom factory - we inject a help button into the title bar
|
||||||
ads::CDockComponentsFactory::setFactory(new CCustomComponentsFactory());
|
DockManager->setComponentsFactory(new CCustomComponentsFactory());
|
||||||
auto TopDockArea = DockManager->addDockWidget(ads::TopDockWidgetArea, FileSystemWidget);
|
auto TopDockArea = DockManager->addDockWidget(ads::TopDockWidgetArea, FileSystemWidget);
|
||||||
// Uncomment the next line if you would like to test the
|
// Uncomment the next line if you would like to test the
|
||||||
// HideSingleWidgetTitleBar functionality
|
// HideSingleWidgetTitleBar functionality
|
||||||
// TopDockArea->setDockAreaFlag(ads::CDockAreaWidget::HideSingleWidgetTitleBar, true);
|
// TopDockArea->setDockAreaFlag(ads::CDockAreaWidget::HideSingleWidgetTitleBar, true);
|
||||||
ads::CDockComponentsFactory::resetDefaultFactory();
|
DockManager->setComponentsFactory(ads::CDockComponentsFactory::factory());
|
||||||
|
|
||||||
// We create a calendar widget and clear all flags to prevent the dock area
|
// We create a calendar widget and clear all flags to prevent the dock area
|
||||||
// from closing
|
// from closing
|
||||||
@@ -445,7 +510,7 @@ void MainWindowPrivate::createContent()
|
|||||||
auto TitleBar = DockArea->titleBar();
|
auto TitleBar = DockArea->titleBar();
|
||||||
int Index = TitleBar->indexOf(TitleBar->tabBar());
|
int Index = TitleBar->indexOf(TitleBar->tabBar());
|
||||||
TitleBar->insertWidget(Index + 1, CustomButton);
|
TitleBar->insertWidget(Index + 1, CustomButton);
|
||||||
QObject::connect(CustomButton, &QToolButton::clicked, [=]()
|
QObject::connect(CustomButton, &QToolButton::clicked, [DockArea, this]()
|
||||||
{
|
{
|
||||||
auto DockWidget = createEditorWidget();
|
auto DockWidget = createEditorWidget();
|
||||||
DockWidget->setFeature(ads::CDockWidget::DockWidgetDeleteOnClose, true);
|
DockWidget->setFeature(ads::CDockWidget::DockWidgetDeleteOnClose, true);
|
||||||
@@ -455,15 +520,17 @@ void MainWindowPrivate::createContent()
|
|||||||
|
|
||||||
// Test dock area docking
|
// Test dock area docking
|
||||||
auto RighDockArea = DockManager->addDockWidget(ads::RightDockWidgetArea, createLongTextLabelDockWidget(), TopDockArea);
|
auto RighDockArea = DockManager->addDockWidget(ads::RightDockWidgetArea, createLongTextLabelDockWidget(), TopDockArea);
|
||||||
DockManager->addDockWidget(ads::TopDockWidgetArea, createLongTextLabelDockWidget(), RighDockArea);
|
DockWidget = createLongTextLabelDockWidget();
|
||||||
|
DockWidget->setFeature(ads::CDockWidget::DockWidgetPinnable, false);
|
||||||
|
DockManager->addDockWidget(ads::TopDockWidgetArea, DockWidget, RighDockArea);
|
||||||
auto BottomDockArea = DockManager->addDockWidget(ads::BottomDockWidgetArea, createLongTextLabelDockWidget(), RighDockArea);
|
auto BottomDockArea = DockManager->addDockWidget(ads::BottomDockWidgetArea, createLongTextLabelDockWidget(), RighDockArea);
|
||||||
DockManager->addDockWidget(ads::CenterDockWidgetArea, createLongTextLabelDockWidget(), RighDockArea);
|
DockManager->addDockWidget(ads::CenterDockWidgetArea, createLongTextLabelDockWidget(), RighDockArea);
|
||||||
auto LabelDockWidget = createLongTextLabelDockWidget();
|
auto LabelDockWidget = createLongTextLabelDockWidget();
|
||||||
std::cout << "DockWidget " << LabelDockWidget->objectName().toStdString() << std::endl;
|
|
||||||
DockManager->addDockWidget(ads::CenterDockWidgetArea, LabelDockWidget, BottomDockArea);
|
DockManager->addDockWidget(ads::CenterDockWidgetArea, LabelDockWidget, BottomDockArea);
|
||||||
|
|
||||||
// Tests CustomCloseHandling without DeleteOnClose
|
// Tests CustomCloseHandling without DeleteOnClose
|
||||||
LabelDockWidget->setFeature(ads::CDockWidget::CustomCloseHandling, true);
|
LabelDockWidget->setFeature(ads::CDockWidget::CustomCloseHandling, true);
|
||||||
|
LabelDockWidget->setWindowTitle(LabelDockWidget->windowTitle() + " [Custom Close]");
|
||||||
QObject::connect(LabelDockWidget, &ads::CDockWidget::closeRequested, [LabelDockWidget, this]()
|
QObject::connect(LabelDockWidget, &ads::CDockWidget::closeRequested, [LabelDockWidget, this]()
|
||||||
{
|
{
|
||||||
int Result = QMessageBox::question(_this, "Custom Close Request",
|
int Result = QMessageBox::question(_this, "Custom Close Request",
|
||||||
@@ -494,10 +561,7 @@ void MainWindowPrivate::createContent()
|
|||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
||||||
if (!ads::CDockManager::testConfigFlag(ads::CDockManager::OpaqueUndocking))
|
DockManager->addDockWidget(ads::CenterDockWidgetArea, createActiveXWidget(), RighDockArea);
|
||||||
{
|
|
||||||
DockManager->addDockWidget(ads::CenterDockWidgetArea, createActiveXWidget(), RighDockArea);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -506,6 +570,15 @@ void MainWindowPrivate::createContent()
|
|||||||
_this->connect(DockWidget, SIGNAL(viewToggled(bool)), SLOT(onViewToggled(bool)));
|
_this->connect(DockWidget, SIGNAL(viewToggled(bool)), SLOT(onViewToggled(bool)));
|
||||||
_this->connect(DockWidget, SIGNAL(visibilityChanged(bool)), SLOT(onViewVisibilityChanged(bool)));
|
_this->connect(DockWidget, SIGNAL(visibilityChanged(bool)), SLOT(onViewVisibilityChanged(bool)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create image viewer
|
||||||
|
DockWidget = createImageViewer();
|
||||||
|
DockManager->addDockWidget(ads::LeftDockWidgetArea, DockWidget);
|
||||||
|
|
||||||
|
// Create quick widget
|
||||||
|
DockWidget = createQQuickWidget();
|
||||||
|
DockWidget->setFeature(ads::CDockWidget::DockWidgetClosable, true);
|
||||||
|
DockManager->addDockWidget(ads::LeftDockWidgetArea, DockWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -518,19 +591,29 @@ void MainWindowPrivate::createActions()
|
|||||||
ui.toolBar->addAction(ui.actionRestoreState);
|
ui.toolBar->addAction(ui.actionRestoreState);
|
||||||
ui.actionRestoreState->setIcon(svgIcon(":/adsdemo/images/restore.svg"));
|
ui.actionRestoreState->setIcon(svgIcon(":/adsdemo/images/restore.svg"));
|
||||||
|
|
||||||
SavePerspectiveAction = new QAction("Create Perspective", _this);
|
ui.toolBar->addSeparator();
|
||||||
SavePerspectiveAction->setIcon(svgIcon(":/adsdemo/images/picture_in_picture.svg"));
|
|
||||||
_this->connect(SavePerspectiveAction, SIGNAL(triggered()), SLOT(savePerspective()));
|
QAction* a = ui.toolBar->addAction("Lock Workspace");
|
||||||
|
a->setIcon(svgIcon(":/adsdemo/images/lock_outline.svg"));
|
||||||
|
a->setCheckable(true);
|
||||||
|
a->setChecked(false);
|
||||||
|
QObject::connect(a, &QAction::triggered, _this, &CMainWindow::lockWorkspace);
|
||||||
|
|
||||||
PerspectiveListAction = new QWidgetAction(_this);
|
PerspectiveListAction = new QWidgetAction(_this);
|
||||||
PerspectiveComboBox = new QComboBox(_this);
|
PerspectiveComboBox = new QComboBox(_this);
|
||||||
PerspectiveComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
|
PerspectiveComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
|
||||||
PerspectiveComboBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
PerspectiveComboBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
|
||||||
PerspectiveListAction->setDefaultWidget(PerspectiveComboBox);
|
PerspectiveListAction->setDefaultWidget(PerspectiveComboBox);
|
||||||
ui.toolBar->addSeparator();
|
|
||||||
ui.toolBar->addAction(PerspectiveListAction);
|
ui.toolBar->addAction(PerspectiveListAction);
|
||||||
|
|
||||||
|
a = SavePerspectiveAction = ui.toolBar->addAction("Create Perspective");
|
||||||
|
a->setIcon(svgIcon(":/adsdemo/images/picture_in_picture.svg"));
|
||||||
|
QObject::connect(a, &QAction::triggered, _this, &CMainWindow::savePerspective);
|
||||||
ui.toolBar->addAction(SavePerspectiveAction);
|
ui.toolBar->addAction(SavePerspectiveAction);
|
||||||
|
|
||||||
QAction* a = ui.toolBar->addAction("Create Floating Editor");
|
ui.toolBar->addSeparator();
|
||||||
|
|
||||||
|
a = ui.toolBar->addAction("Create Floating Editor");
|
||||||
a->setProperty("Floating", true);
|
a->setProperty("Floating", true);
|
||||||
a->setToolTip("Creates floating dynamic dockable editor windows that are deleted on close");
|
a->setToolTip("Creates floating dynamic dockable editor windows that are deleted on close");
|
||||||
a->setIcon(svgIcon(":/adsdemo/images/note_add.svg"));
|
a->setIcon(svgIcon(":/adsdemo/images/note_add.svg"));
|
||||||
@@ -552,12 +635,29 @@ void MainWindowPrivate::createActions()
|
|||||||
_this->connect(a, SIGNAL(triggered()), SLOT(createEditor()));
|
_this->connect(a, SIGNAL(triggered()), SLOT(createEditor()));
|
||||||
ui.menuTests->addAction(a);
|
ui.menuTests->addAction(a);
|
||||||
|
|
||||||
|
ui.toolBar->addSeparator();
|
||||||
a = ui.toolBar->addAction("Create Floating Table");
|
a = ui.toolBar->addAction("Create Floating Table");
|
||||||
a->setToolTip("Creates floating dynamic dockable table with millions of entries");
|
a->setToolTip("Creates floating dynamic dockable table with millions of entries");
|
||||||
a->setIcon(svgIcon(":/adsdemo/images/grid_on.svg"));
|
a->setIcon(svgIcon(":/adsdemo/images/grid_on.svg"));
|
||||||
_this->connect(a, SIGNAL(triggered()), SLOT(createTable()));
|
_this->connect(a, SIGNAL(triggered()), SLOT(createTable()));
|
||||||
ui.menuTests->addAction(a);
|
ui.menuTests->addAction(a);
|
||||||
|
|
||||||
|
a = ui.toolBar->addAction("Create Image Viewer");
|
||||||
|
auto ToolButton = qobject_cast<QToolButton*>(ui.toolBar->widgetForAction(a));
|
||||||
|
ToolButton->setPopupMode(QToolButton::InstantPopup);
|
||||||
|
a->setToolTip("Creates floating, docked or pinned image viewer");
|
||||||
|
a->setIcon(svgIcon(":/adsdemo/images/panorama.svg"));
|
||||||
|
ui.menuTests->addAction(a);
|
||||||
|
auto Menu = new QMenu();
|
||||||
|
ToolButton->setMenu(Menu);
|
||||||
|
a = Menu->addAction("Floating Image Viewer");
|
||||||
|
_this->connect(a, SIGNAL(triggered()), SLOT(createImageViewer()));
|
||||||
|
a = Menu->addAction("Docked Image Viewer");
|
||||||
|
_this->connect(a, SIGNAL(triggered()), SLOT(createImageViewer()));
|
||||||
|
a = Menu->addAction("Pinned Image Viewer");
|
||||||
|
_this->connect(a, SIGNAL(triggered()), SLOT(createImageViewer()));
|
||||||
|
|
||||||
|
|
||||||
ui.menuTests->addSeparator();
|
ui.menuTests->addSeparator();
|
||||||
a = ui.menuTests->addAction("Show Status Dialog");
|
a = ui.menuTests->addAction("Show Status Dialog");
|
||||||
_this->connect(a, SIGNAL(triggered()), SLOT(showStatusDialog()));
|
_this->connect(a, SIGNAL(triggered()), SLOT(showStatusDialog()));
|
||||||
@@ -565,6 +665,12 @@ void MainWindowPrivate::createActions()
|
|||||||
a = ui.menuTests->addAction("Toggle Label 0 Window Title");
|
a = ui.menuTests->addAction("Toggle Label 0 Window Title");
|
||||||
_this->connect(a, SIGNAL(triggered()), SLOT(toggleDockWidgetWindowTitle()));
|
_this->connect(a, SIGNAL(triggered()), SLOT(toggleDockWidgetWindowTitle()));
|
||||||
ui.menuTests->addSeparator();
|
ui.menuTests->addSeparator();
|
||||||
|
|
||||||
|
a = ui.toolBar->addAction("Apply VS Style");
|
||||||
|
a->setToolTip("Applies a Visual Studio light style (visual_studio_light.css)." );
|
||||||
|
a->setIcon(svgIcon(":/adsdemo/images/color_lens.svg"));
|
||||||
|
QObject::connect(a, &QAction::triggered, _this, &CMainWindow::applyVsStyle);
|
||||||
|
ui.menuTests->addAction(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -624,7 +730,7 @@ CMainWindow::CMainWindow(QWidget *parent) :
|
|||||||
|
|
||||||
// uncomment the following line if you want to use opaque undocking and
|
// uncomment the following line if you want to use opaque undocking and
|
||||||
// opaque splitter resizing
|
// opaque splitter resizing
|
||||||
// CDockManager::setConfigFlags(CDockManager::DefaultOpaqueConfig);
|
//CDockManager::setConfigFlags(CDockManager::DefaultOpaqueConfig);
|
||||||
|
|
||||||
// uncomment the following line if you want a fixed tab width that does
|
// uncomment the following line if you want a fixed tab width that does
|
||||||
// not change if the visibility of the close button changes
|
// not change if the visibility of the close button changes
|
||||||
@@ -654,11 +760,17 @@ CMainWindow::CMainWindow(QWidget *parent) :
|
|||||||
// uncomment the following line if you want a central widget in the main dock container (the dock manager) without a titlebar
|
// uncomment the following line if you want a central widget in the main dock container (the dock manager) without a titlebar
|
||||||
// If you enable this code, you can test it in the demo with the Calendar 0
|
// If you enable this code, you can test it in the demo with the Calendar 0
|
||||||
// dock widget.
|
// dock widget.
|
||||||
// CDockManager::setConfigFlag(CDockManager::HideSingleCentralWidgetTitleBar, true);
|
//CDockManager::setConfigFlag(CDockManager::HideSingleCentralWidgetTitleBar, true);
|
||||||
|
|
||||||
// uncomment the following line to enable focus highlighting of the dock
|
// uncomment the following line to enable focus highlighting of the dock
|
||||||
// widget that has the focus
|
// widget that has the focus
|
||||||
CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true);
|
CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true);
|
||||||
|
|
||||||
|
// uncomment if you would like to enable dock widget auto hiding
|
||||||
|
CDockManager::setAutoHideConfigFlags({CDockManager::DefaultAutoHideConfig});
|
||||||
|
|
||||||
|
// uncomment if you would like to disable closing auto hide widget with mouse click outside of auto hide container
|
||||||
|
//CDockManager::setAutoHideConfigFlag(CDockManager::AutoHideCloseOnOutsideMouseClick, false);
|
||||||
|
|
||||||
// uncomment if you would like to enable an equal distribution of the
|
// uncomment if you would like to enable an equal distribution of the
|
||||||
// available size of a splitter to all contained dock widgets
|
// available size of a splitter to all contained dock widgets
|
||||||
@@ -667,15 +779,19 @@ CMainWindow::CMainWindow(QWidget *parent) :
|
|||||||
// uncomment if you would like to close tabs with the middle mouse button, web browser style
|
// uncomment if you would like to close tabs with the middle mouse button, web browser style
|
||||||
// CDockManager::setConfigFlag(CDockManager::MiddleMouseButtonClosesTab, true);
|
// CDockManager::setConfigFlag(CDockManager::MiddleMouseButtonClosesTab, true);
|
||||||
|
|
||||||
|
// uncomment if you would like to avoid using the built-in QSS stylesheet
|
||||||
|
// CDockManager::setConfigFlag(CDockManager::DisableStylesheet, true);
|
||||||
|
|
||||||
// Now create the dock manager and its content
|
// Now create the dock manager and its content
|
||||||
d->DockManager = new CDockManager(this);
|
d->DockManager = new CDockManager(this);
|
||||||
|
d->DockManager->setDockWidgetToolBarStyle(Qt::ToolButtonIconOnly, ads::CDockWidget::StateFloating);
|
||||||
|
|
||||||
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
||||||
connect(d->PerspectiveComboBox, SIGNAL(activated(const QString&)),
|
connect(d->PerspectiveComboBox, SIGNAL(activated(QString)),
|
||||||
d->DockManager, SLOT(openPerspective(const QString&)));
|
d->DockManager, SLOT(openPerspective(QString)));
|
||||||
#else
|
#else
|
||||||
connect(d->PerspectiveComboBox, SIGNAL(textActivated(const QString&)),
|
connect(d->PerspectiveComboBox, SIGNAL(textActivated(QString)),
|
||||||
d->DockManager, SLOT(openPerspective(const QString&)));
|
d->DockManager, SLOT(openPerspective(QString)));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
d->createContent();
|
d->createContent();
|
||||||
@@ -747,13 +863,14 @@ void CMainWindow::savePerspective()
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
void CMainWindow::onViewToggled(bool Open)
|
void CMainWindow::onViewToggled(bool Open)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(Open);
|
||||||
auto DockWidget = qobject_cast<ads::CDockWidget*>(sender());
|
auto DockWidget = qobject_cast<ads::CDockWidget*>(sender());
|
||||||
if (!DockWidget)
|
if (!DockWidget)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << DockWidget->objectName() << " viewToggled(" << Open << ")";
|
//qDebug() << DockWidget->objectName() << " viewToggled(" << Open << ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -839,6 +956,20 @@ void CMainWindow::onEditorCloseRequested()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CMainWindow::onImageViewerCloseRequested()
|
||||||
|
{
|
||||||
|
auto DockWidget = qobject_cast<ads::CDockWidget*>(sender());
|
||||||
|
int Result = QMessageBox::question(this, "Close Image Viewer", QString("%1 "
|
||||||
|
"contains unsaved changes? Would you like to close it?")
|
||||||
|
.arg(DockWidget->windowTitle()));
|
||||||
|
if (QMessageBox::Yes == Result)
|
||||||
|
{
|
||||||
|
DockWidget->closeDockWidget();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
void CMainWindow::createTable()
|
void CMainWindow::createTable()
|
||||||
{
|
{
|
||||||
@@ -873,3 +1004,59 @@ void CMainWindow::toggleDockWidgetWindowTitle()
|
|||||||
d->WindowTitleTestDockWidget->setWindowTitle(Title);
|
d->WindowTitleTestDockWidget->setWindowTitle(Title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CMainWindow::applyVsStyle()
|
||||||
|
{
|
||||||
|
QFile StyleSheetFile(":adsdemo/res/visual_studio_light.css");
|
||||||
|
StyleSheetFile.open(QIODevice::ReadOnly);
|
||||||
|
QTextStream StyleSheetStream(&StyleSheetFile);
|
||||||
|
auto Stylesheet = StyleSheetStream.readAll();
|
||||||
|
StyleSheetFile.close();
|
||||||
|
d->DockManager->setStyleSheet(Stylesheet);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CMainWindow::createImageViewer()
|
||||||
|
{
|
||||||
|
QAction* a = qobject_cast<QAction*>(sender());
|
||||||
|
qDebug() << "createImageViewer " << a->text();
|
||||||
|
|
||||||
|
auto DockWidget = d->createImageViewer();
|
||||||
|
DockWidget->setFeature(ads::CDockWidget::DockWidgetDeleteOnClose, true);
|
||||||
|
DockWidget->setFeature(ads::CDockWidget::DockWidgetForceCloseWithArea, true);
|
||||||
|
DockWidget->setFeature(ads::CDockWidget::CustomCloseHandling, true);
|
||||||
|
DockWidget->resize(QSize(640, 480));
|
||||||
|
connect(DockWidget, &ads::CDockWidget::closeRequested, this,
|
||||||
|
&CMainWindow::onImageViewerCloseRequested);
|
||||||
|
|
||||||
|
if (a->text().startsWith("Floating"))
|
||||||
|
{
|
||||||
|
auto FloatingWidget = d->DockManager->addDockWidgetFloating(DockWidget);
|
||||||
|
FloatingWidget->move(QPoint(20, 20));
|
||||||
|
}
|
||||||
|
else if (a->text().startsWith("Docked"))
|
||||||
|
{
|
||||||
|
d->DockManager->addDockWidget(ads::RightDockWidgetArea, DockWidget);
|
||||||
|
}
|
||||||
|
else if (a->text().startsWith("Pinned"))
|
||||||
|
{
|
||||||
|
d->DockManager->addAutoHideDockWidget(ads::SideBarLeft, DockWidget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CMainWindow::lockWorkspace(bool Value)
|
||||||
|
{
|
||||||
|
if (Value)
|
||||||
|
{
|
||||||
|
d->DockManager->lockDockWidgetFeaturesGlobally();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d->DockManager->lockDockWidgetFeaturesGlobally(ads::CDockWidget::NoDockWidgetFeatures);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,8 +63,12 @@ private slots:
|
|||||||
void createEditor();
|
void createEditor();
|
||||||
void createTable();
|
void createTable();
|
||||||
void onEditorCloseRequested();
|
void onEditorCloseRequested();
|
||||||
|
void onImageViewerCloseRequested();
|
||||||
void showStatusDialog();
|
void showStatusDialog();
|
||||||
void toggleDockWidgetWindowTitle();
|
void toggleDockWidgetWindowTitle();
|
||||||
|
void applyVsStyle();
|
||||||
|
void createImageViewer();
|
||||||
|
void lockWorkspace(bool Value);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
|||||||
58
demo/MyDockAreaTitleBar.h
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#ifndef QTADS_MYDOCKAREATITLEBAR_H
|
||||||
|
#define QTADS_MYDOCKAREATITLEBAR_H
|
||||||
|
/*******************************************************************************
|
||||||
|
** Qt Advanced Docking System
|
||||||
|
** Copyright (C) 2017 Uwe Kindler
|
||||||
|
**
|
||||||
|
** This library is free software; you can redistribute it and/or
|
||||||
|
** modify it under the terms of the GNU Lesser General Public
|
||||||
|
** License as published by the Free Software Foundation; either
|
||||||
|
** version 2.1 of the License, or (at your option) any later version.
|
||||||
|
**
|
||||||
|
** This library 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
|
||||||
|
** Lesser General Public License for more details.
|
||||||
|
**
|
||||||
|
** You should have received a copy of the GNU Lesser General Public
|
||||||
|
** License along with this library; If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
// INCLUDES
|
||||||
|
//============================================================================
|
||||||
|
#include <DockAreaTitleBar.h>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom DockAreaTitleBar that adds a custom context menu
|
||||||
|
*/
|
||||||
|
class MyDockAreaTitleBar : public ads::CDockAreaTitleBar
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit MyDockAreaTitleBar(ads::CDockAreaWidget *parent) :
|
||||||
|
CDockAreaTitleBar(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QMenu* buildContextMenu(QMenu*) override
|
||||||
|
{
|
||||||
|
auto menu = ads::CDockAreaTitleBar::buildContextMenu(nullptr);
|
||||||
|
menu->addSeparator();
|
||||||
|
auto action = menu->addAction(tr("Format HardDrive"));
|
||||||
|
|
||||||
|
connect(action, &QAction::triggered, this, [this]()
|
||||||
|
{
|
||||||
|
QMessageBox msgBox;
|
||||||
|
msgBox.setText("No, just kidding");
|
||||||
|
msgBox.setStandardButtons(QMessageBox::Abort);
|
||||||
|
msgBox.setDefaultButton(QMessageBox::Abort);
|
||||||
|
msgBox.exec();
|
||||||
|
});
|
||||||
|
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // QTADS_MYDOCKAREATITLEBAR_H
|
||||||
108
demo/RenderWidget.cpp
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
//============================================================================
|
||||||
|
/// \file RenderWidget.cpp
|
||||||
|
/// \author Uwe Kindler
|
||||||
|
/// \date 04.11.2022
|
||||||
|
/// \brief Implementation of CRenderWidget
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
// INCLUDES
|
||||||
|
//============================================================================
|
||||||
|
#include "RenderWidget.h"
|
||||||
|
|
||||||
|
#include <QPainter>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
CRenderWidget::CRenderWidget(QWidget* Parent) :
|
||||||
|
QWidget(Parent), m_ScaleFactor(1)
|
||||||
|
{
|
||||||
|
this->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
|
||||||
|
this->setCursor(Qt::OpenHandCursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
CRenderWidget::~CRenderWidget()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
void CRenderWidget::showImage(const QImage& Image)
|
||||||
|
{
|
||||||
|
m_Image = QPixmap::fromImage(Image);
|
||||||
|
this->adjustWidgetSize();
|
||||||
|
this->repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
void CRenderWidget::paintEvent(QPaintEvent* Event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(Event);
|
||||||
|
QPainter Painter(this);
|
||||||
|
Painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
|
||||||
|
Painter.setRenderHint(QPainter::Antialiasing, true);
|
||||||
|
Painter.scale(m_ScaleFactor, m_ScaleFactor);
|
||||||
|
Painter.drawPixmap(QPoint(0, 0), m_Image);
|
||||||
|
}
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CRenderWidget::zoomIn()
|
||||||
|
{
|
||||||
|
scaleImage(1.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CRenderWidget::zoomOut()
|
||||||
|
{
|
||||||
|
scaleImage(0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CRenderWidget::zoomByValue(double ZoomValue)
|
||||||
|
{
|
||||||
|
scaleImage(ZoomValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CRenderWidget::normalSize()
|
||||||
|
{
|
||||||
|
m_ScaleFactor = 1;
|
||||||
|
this->adjustWidgetSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CRenderWidget::scaleImage(double ScaleFactor)
|
||||||
|
{
|
||||||
|
m_ScaleFactor *= ScaleFactor;
|
||||||
|
this->adjustWidgetSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CRenderWidget::adjustWidgetSize()
|
||||||
|
{
|
||||||
|
QSize ScaledImageSize = m_Image.size() * m_ScaleFactor;
|
||||||
|
if (ScaledImageSize != this->size())
|
||||||
|
{
|
||||||
|
this->setFixedSize(ScaledImageSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CRenderWidget::scaleToSize(const QSize& TargetSize)
|
||||||
|
{
|
||||||
|
if (m_Image.isNull())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
double ScaleFactorH = (double) TargetSize.width() / m_Image.size().width();
|
||||||
|
double ScaleFactorV = (double) TargetSize.height()
|
||||||
|
/ m_Image.size().height();
|
||||||
|
m_ScaleFactor = (ScaleFactorH < ScaleFactorV) ? ScaleFactorH : ScaleFactorV;
|
||||||
|
this->adjustWidgetSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// EOF RenderWidget.cpp
|
||||||
111
demo/RenderWidget.h
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
#ifndef RenderWidgetH
|
||||||
|
#define RenderWidgetH
|
||||||
|
//============================================================================
|
||||||
|
/// \file RenderWidget.h
|
||||||
|
/// \author Uwe Kindler
|
||||||
|
/// \date 04.11.2022
|
||||||
|
/// \brief Declaration of CRenderWidget
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
// INCLUDES
|
||||||
|
//============================================================================
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QPixmap>
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
// FORWARD DECLARATIONS
|
||||||
|
//============================================================================
|
||||||
|
class QImage;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Widget for fast display of images (i.e. for video capture devices)
|
||||||
|
*/
|
||||||
|
class CRenderWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
private:
|
||||||
|
QPixmap m_Image;
|
||||||
|
double m_ScaleFactor;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/**
|
||||||
|
* @brief Reimplemented paint event method showing actual image.
|
||||||
|
*/
|
||||||
|
void paintEvent(QPaintEvent* PaintEvent);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Change scale factor
|
||||||
|
*/
|
||||||
|
void scaleImage(double ScaleFactor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Adjust widget size to size of image.
|
||||||
|
*/
|
||||||
|
void adjustWidgetSize();
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param[in] Parent Parent widget.
|
||||||
|
*/
|
||||||
|
CRenderWidget(QWidget* Parent);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor
|
||||||
|
*/
|
||||||
|
virtual ~CRenderWidget();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
/**
|
||||||
|
* @brief Signalize change of captured image size.
|
||||||
|
* @param ImageSize New image size.
|
||||||
|
*/
|
||||||
|
void imageSizeChanged(const QSize& ImageSize);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/**
|
||||||
|
* @brief Show new image in render widget.
|
||||||
|
*/
|
||||||
|
void showImage(const QImage& Image);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Zoom into the scene.
|
||||||
|
* This function decreases the scaling factor by setting it to the previous
|
||||||
|
* value in internal scaling list.
|
||||||
|
* @brief Steps The number of steps to zoom in. One step is 25%.
|
||||||
|
*/
|
||||||
|
void zoomIn();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Zoom out of the scene.
|
||||||
|
* This function decreases the scaling factor by setting it to the next
|
||||||
|
* value in internal scaling list.
|
||||||
|
* @brief Steps The number of steps to zoom out. One step is 25%.
|
||||||
|
*/
|
||||||
|
void zoomOut();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Change zoom by zoom value.
|
||||||
|
* @param[in] ZoomValue This is the zoom value to apply. A value of 1
|
||||||
|
* means no change a value > 1 increases the image (i.e. 1.25 would increase
|
||||||
|
* the image by 25%) and a value of < 1 decreases the image size (i.e.
|
||||||
|
* a value of 0.8 would decrease the image size by 25%).
|
||||||
|
*/
|
||||||
|
void zoomByValue(double ZoomValue);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Resets the actual scaling to 1 and display the image with its
|
||||||
|
* actual pixel size.
|
||||||
|
*/
|
||||||
|
void normalSize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Scales the wiget and its content image to the given TargetSize
|
||||||
|
*/
|
||||||
|
void scaleToSize(const QSize& TargetSize);
|
||||||
|
}; // class CRenderWidget
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif // RenderWidgetH
|
||||||
BIN
demo/app.ico
Normal file
|
After Width: | Height: | Size: 103 KiB |
1
demo/app.rc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
IDI_ICON1 ICON DISCARDABLE "app.ico"
|
||||||
@@ -2,7 +2,7 @@ ADS_OUT_ROOT = $${OUT_PWD}/..
|
|||||||
|
|
||||||
TARGET = AdvancedDockingSystemDemo
|
TARGET = AdvancedDockingSystemDemo
|
||||||
DESTDIR = $${ADS_OUT_ROOT}/lib
|
DESTDIR = $${ADS_OUT_ROOT}/lib
|
||||||
QT += core gui widgets
|
QT += core gui widgets quick quickwidgets
|
||||||
|
|
||||||
include(../ads.pri)
|
include(../ads.pri)
|
||||||
|
|
||||||
@@ -15,19 +15,25 @@ lessThan(QT_MAJOR_VERSION, 6) {
|
|||||||
CONFIG += c++14
|
CONFIG += c++14
|
||||||
CONFIG += debug_and_release
|
CONFIG += debug_and_release
|
||||||
DEFINES += QT_DEPRECATED_WARNINGS
|
DEFINES += QT_DEPRECATED_WARNINGS
|
||||||
|
RC_FILE += app.rc
|
||||||
|
|
||||||
adsBuildStatic {
|
adsBuildStatic {
|
||||||
DEFINES += ADS_STATIC
|
DEFINES += ADS_STATIC
|
||||||
}
|
}
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
main.cpp \
|
|
||||||
MainWindow.cpp \
|
|
||||||
StatusDialog.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
MainWindow.h \
|
MainWindow.h \
|
||||||
StatusDialog.h
|
StatusDialog.h \
|
||||||
|
ImageViewer.h \
|
||||||
|
RenderWidget.h
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
main.cpp \
|
||||||
|
MainWindow.cpp \
|
||||||
|
StatusDialog.cpp \
|
||||||
|
ImageViewer.cpp \
|
||||||
|
RenderWidget.cpp
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
mainwindow.ui \
|
mainwindow.ui \
|
||||||
|
|||||||
@@ -18,5 +18,26 @@
|
|||||||
<file>images/create_floating_table.svg</file>
|
<file>images/create_floating_table.svg</file>
|
||||||
<file>images/docked_editor.svg</file>
|
<file>images/docked_editor.svg</file>
|
||||||
<file>images/tab.svg</file>
|
<file>images/tab.svg</file>
|
||||||
|
<file>res/visual_studio_light.css</file>
|
||||||
|
<file>images/color_lens.svg</file>
|
||||||
|
<file>images/ads_icon.svg</file>
|
||||||
|
<file>images/ads_logo.svg</file>
|
||||||
|
<file>images/find_in_page.svg</file>
|
||||||
|
<file>images/perm_media.svg</file>
|
||||||
|
<file>images/zoom_in.svg</file>
|
||||||
|
<file>images/zoom_out.svg</file>
|
||||||
|
<file>images/zoom_out_map.svg</file>
|
||||||
|
<file>images/ads_tile_blue.svg</file>
|
||||||
|
<file>images/ads_tile_blue_light.svg</file>
|
||||||
|
<file>images/ads_tile_green.svg</file>
|
||||||
|
<file>images/ads_tile_orange.svg</file>
|
||||||
|
<file>images/photo.svg</file>
|
||||||
|
<file>images/crop_original.svg</file>
|
||||||
|
<file>images/panorama.svg</file>
|
||||||
|
<file>images/ads_icon2.svg</file>
|
||||||
|
<file>images/font_download.svg</file>
|
||||||
|
<file>images/lock_outline.svg</file>
|
||||||
|
<file>images/lock.svg</file>
|
||||||
|
<file>images/lock_open.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
11
demo/images/ads_icon.svg
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="1024" height="1024" version="1.1" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<text x="1251.1022" y="1305.4956" fill="#000000" font-family="sans-serif" font-size="40px" style="line-height:1.25" xml:space="preserve"><tspan x="1251.1022" y="1305.4956"/></text>
|
||||||
|
<g transform="translate(581.23 1750.5)">
|
||||||
|
<path d="m191.64-726.53h-521.75c-138.69 0-251.12-112.43-251.12-251.12v-521.75c0-138.69 112.43-251.12 251.12-251.12h521.75c138.69 0 251.12 112.43 251.12 251.12v521.75c0 138.69-112.43 251.12-251.12 251.12z" fill="#e0e0e0" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m-175.9-1515.9v256h469.33v-256z" fill="#009ddd" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m80.1-1217.2v256h213.33v-256z" fill="#ff9833" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m-175.9-1217.2v256h213.33v-256z" fill="#accb01" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m-431.9-1515.9v554.67h213.33v-554.67z" fill="#0083c3" style="mix-blend-mode:normal"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1004 B |
11
demo/images/ads_icon2.svg
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="1024" height="1024" version="1.1" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<desc>electric_iron icon - Licensed under Iconfu Standard License v1.0 (https://www.iconfu.com/iconfu_standard_license) - Incors GmbH</desc>
|
||||||
|
<g transform="matrix(1.4118 0 0 1.4118 -210.82 -210.82)" stroke-width=".50173">
|
||||||
|
<text x="1251.1022" y="1305.4956" fill="#000000" font-family="sans-serif" font-size="40px" style="line-height:1.25" xml:space="preserve"><tspan x="1251.1022" y="1305.4956" stroke-width=".70833"/></text>
|
||||||
|
<path d="m405.33 234.66v256h469.33v-256z" fill="#009ddd" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m661.33 533.33v256h213.33v-256z" fill="#ff9833" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m405.33 533.33v256h213.33v-256z" fill="#accb01" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m149.33 234.66v554.67h213.33v-554.67z" fill="#0083c3" style="mix-blend-mode:normal"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 956 B |
12
demo/images/ads_logo.svg
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="6907.3" height="1024" version="1.1" viewBox="0 0 6907.3 1024" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<text x="1251.1022" y="1305.4956" fill="#000000" font-family="sans-serif" font-size="40px" style="line-height:1.25" xml:space="preserve"><tspan x="1251.1022" y="1305.4956"/></text>
|
||||||
|
<text x="1178.9221" y="718.37329" fill="#8f918f" font-family="sans-serif" font-size="628px" style="line-height:1.25" xml:space="preserve"><tspan x="1178.9221" y="718.37329" fill="#8f918f" font-family="'Segoe UI'" font-size="628px" font-weight="300">Qt Advanced Docking</tspan></text>
|
||||||
|
<g transform="translate(581.23 1750.5)">
|
||||||
|
<path d="m191.64-726.53h-521.75c-138.69 0-251.12-112.43-251.12-251.12v-521.75c0-138.69 112.43-251.12 251.12-251.12h521.75c138.69 0 251.12 112.43 251.12 251.12v521.75c0 138.69-112.43 251.12-251.12 251.12z" fill="#e0e0e0" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m-175.9-1515.9v256h469.33v-256z" fill="#009ddd" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m80.1-1217.2v256h213.33v-256z" fill="#ff9833" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m-175.9-1217.2v256h213.33v-256z" fill="#accb01" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m-431.9-1515.9v554.67h213.33v-554.67z" fill="#0083c3" style="mix-blend-mode:normal"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
33
demo/images/ads_tile_blue.svg
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="1024" height="1024" version="1.1" viewBox="0 0 270.93 270.93" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="m-2.5e-6 -2.5e-6v270.93h270.93v-270.93z" fill="#0083c3" stroke-width=".26458" style="mix-blend-mode:normal"/>
|
||||||
|
<g fill="#fff" fill-opacity=".25">
|
||||||
|
<g transform="matrix(.12402 0 0 .12402 71.967 73.674)" stroke-width="4.7887">
|
||||||
|
<path d="m405.33 234.66v256h469.33v-256z" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m661.33 533.33v256h213.33v-256z" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m405.33 533.33v256h213.33v-256z" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m149.33 234.66v554.67h213.33v-554.67z" style="mix-blend-mode:normal"/>
|
||||||
|
</g>
|
||||||
|
<g stroke-width=".26458" aria-label="Docking">
|
||||||
|
<path d="m100.07 182.94q0 2.7805-1.5208 4.1938-1.5054 1.3979-4.2091 1.3979h-3.057v-10.968h3.3796q1.6437 0 2.8573 0.61447 1.2289 0.61446 1.8895 1.8127 0.66055 1.1982 0.66055 2.9494zm-1.4594 0.0461q0-2.1967-1.0907-3.2106-1.0753-1.0292-3.057-1.0292h-1.7973v8.6026h1.4901q4.4549 0 4.4549-4.3627z"/>
|
||||||
|
<path d="m114.84 184.4q0 2.0431-1.0446 3.1645-1.0292 1.1214-2.7958 1.1214-1.0907 0-1.9509-0.49158-0.84489-0.50693-1.3365-1.4594-0.49158-0.96778-0.49158-2.335 0-2.0431 1.0139-3.1491 1.0292-1.106 2.8112-1.106 1.106 0 1.9663 0.50694 0.86026 0.49157 1.3365 1.444 0.49158 0.93706 0.49158 2.3042zm-6.2215 0q0 1.4594 0.56838 2.3196 0.58374 0.84489 1.8434 0.84489 1.2443 0 1.828-0.84489 0.58374-0.86025 0.58374-2.3196 0-1.4594-0.58374-2.2889-0.58375-0.82953-1.8434-0.82953t-1.828 0.82953-0.56838 2.2889z"/>
|
||||||
|
<path d="m125.64 188.69q-1.106 0-1.9509-0.44549-0.84489-0.44549-1.3365-1.3826-0.47622-0.93707-0.47622-2.3964 0-1.5208 0.49158-2.4732 0.50693-0.95243 1.3826-1.3979t1.9817-0.44549q0.61447 0 1.1982 0.13826 0.59911 0.12289 0.96779 0.30723l-0.41477 1.1214q-0.36868-0.13826-0.86025-0.26115-0.49158-0.1229-0.9217-0.1229-2.4272 0-2.4272 3.1184 0 1.4901 0.58374 2.2889 0.59911 0.78345 1.7666 0.78345 0.66055 0 1.1828-0.13826 0.5223-0.13825 0.95242-0.33795v1.1982q-0.41476 0.21506-0.9217 0.3226-0.49157 0.12289-1.1982 0.12289z"/>
|
||||||
|
<path d="m136.4 176.86v6.0986q0 0.24579-0.0307 0.6452-0.0154 0.3994-0.0307 0.69127h0.0614q0.0922-0.12289 0.27651-0.35332 0.18434-0.23042 0.36868-0.46085 0.19971-0.24578 0.33796-0.3994l2.6268-2.7805h1.5823l-3.3335 3.5178 3.5639 4.716h-1.6283l-2.8573-3.8404-0.93707 0.81417v3.0262h-1.3365v-11.675z"/>
|
||||||
|
<path d="m149.32 177.22q0.30724 0 0.53766 0.21506 0.24579 0.1997 0.24579 0.64519t-0.24579 0.66056q-0.23042 0.1997-0.53766 0.1997-0.33795 0-0.56838-0.1997-0.23042-0.21507-0.23042-0.66056t0.23042-0.64519q0.23043-0.21506 0.56838-0.21506zm0.66056 3.0877v8.2339h-1.3518v-8.2339z"/>
|
||||||
|
<path d="m161.92 180.15q1.4747 0 2.2274 0.722 0.75272 0.722 0.75272 2.3043v5.3612h-1.3365v-5.2691q0-1.9817-1.8434-1.9817-1.3672 0-1.8895 0.76808-0.5223 0.76809-0.5223 2.2121v4.2706h-1.3518v-8.2339h1.0907l0.1997 1.1214h0.0768q0.39941-0.64519 1.106-0.95242 0.70664-0.3226 1.4901-0.3226z"/>
|
||||||
|
<path d="m175.73 180.15q0.81417 0 1.4594 0.30724 0.66055 0.30723 1.1214 0.93706h0.0768l0.18434-1.0907h1.0753v8.3721q0 1.7666-0.90634 2.6576-0.89098 0.89098-2.7805 0.89098-1.8127 0-2.9648-0.5223v-1.2443q1.2136 0.6452 3.0416 0.6452 1.06 0 1.6591-0.62983 0.61447-0.61447 0.61447-1.6898v-0.3226q0-0.18434 0.0154-0.52229 0.0154-0.35332 0.0307-0.49158h-0.0615q-0.82953 1.2443-2.55 1.2443-1.5976 0-2.504-1.1214-0.89098-1.1214-0.89098-3.1338 0-1.9663 0.89098-3.1184 0.90634-1.1675 2.4886-1.1675zm0.18434 1.1368q-1.0292 0-1.5976 0.82953-0.56838 0.81417-0.56838 2.335t0.55302 2.335q0.55302 0.79881 1.6437 0.79881 1.2443 0 1.8127-0.66056 0.56838-0.67591 0.56838-2.166v-0.32259q0-1.6744-0.58374-2.4118-0.58375-0.73736-1.828-0.73736z"/>
|
||||||
|
</g>
|
||||||
|
<g stroke-width=".26458" aria-label="Qt Advanced ">
|
||||||
|
<path d="m100.61 89.668q0 2.0124-0.81417 3.441-0.79881 1.4133-2.3811 1.9356l2.6269 2.7344h-1.9817l-2.1199-2.4732q-0.09217 0-0.1997 0-0.09217 0.01536-0.18434 0.01536-1.7051 0-2.8419-0.70664-1.1214-0.70664-1.6744-1.9817-0.55302-1.275-0.55302-2.9802 0-1.6744 0.55302-2.9341 0.55302-1.275 1.6744-1.9817 1.1368-0.70664 2.8573-0.70664 1.6437 0 2.7651 0.70664 1.1214 0.69128 1.6898 1.9663 0.58374 1.2597 0.58374 2.9648zm-8.664 0q0 2.0738 0.87562 3.272 0.87562 1.1829 2.7344 1.1829 1.8588 0 2.719-1.1829 0.87562-1.1982 0.87562-3.272 0-2.0738-0.86026-3.2413-0.86026-1.1829-2.719-1.1829-1.8741 0-2.7497 1.1829-0.87562 1.1675-0.87562 3.2413z"/>
|
||||||
|
<path d="m105.6 94.215q0.30723 0 0.62983-0.04609 0.32259-0.04609 0.52229-0.12289v1.0292q-0.21506 0.10753-0.61446 0.16898-0.39941 0.07681-0.76809 0.07681-0.64519 0-1.1982-0.21506-0.53766-0.23042-0.87562-0.78345-0.33796-0.55302-0.33796-1.5515v-4.7929h-1.1675v-0.64519l1.1829-0.53766 0.53766-1.7512h0.7988v1.8895h2.3811v1.0446h-2.3811v4.7621q0 0.75272 0.35332 1.1214 0.36868 0.35332 0.93707 0.35332z"/>
|
||||||
|
<path d="m119.46 95.168-1.3211-3.3949h-4.3474l-1.3058 3.3949h-1.3979l4.2859-11.014h1.2443l4.2706 11.014zm-1.7359-4.6239-1.2289-3.3181q-0.0461-0.12289-0.15362-0.44549-0.10753-0.3226-0.21507-0.66055-0.0922-0.35332-0.15361-0.53766-0.1229 0.47621-0.26115 0.93706-0.12289 0.44549-0.21507 0.70664l-1.2443 3.3181z"/>
|
||||||
|
<path d="m125.13 95.321q-1.5362 0-2.4579-1.06-0.9217-1.0753-0.9217-3.1952t0.9217-3.1952q0.93706-1.0907 2.4732-1.0907 0.95243 0 1.5515 0.35332 0.61447 0.35332 0.99851 0.86026h0.0922q-0.0307-0.1997-0.0614-0.58374-0.0307-0.3994-0.0307-0.62983v-3.2874h1.3518v11.675h-1.0907l-0.1997-1.106h-0.0614q-0.36868 0.5223-0.98314 0.89098-0.61447 0.36868-1.5823 0.36868zm0.21506-1.1214q1.3058 0 1.828-0.70664 0.53766-0.722 0.53766-2.166v-0.24579q0-1.5362-0.50694-2.3503-0.50694-0.82953-1.8741-0.82953-1.0907 0-1.6437 0.87562-0.53766 0.86026-0.53766 2.3196 0 1.4747 0.53766 2.2889 0.55302 0.81417 1.6591 0.81417z"/>
|
||||||
|
<path d="m133.47 95.168-3.1184-8.2339h1.444l1.7512 4.8543q0.12289 0.33796 0.26115 0.75272 0.13825 0.41477 0.24579 0.79881 0.10753 0.38404 0.15361 0.62983h0.0615q0.0461-0.24579 0.16898-0.62983 0.12289-0.3994 0.26115-0.79881 0.13825-0.41477 0.26115-0.75272l1.7512-4.8543h1.444l-3.1338 8.2339z"/>
|
||||||
|
<path d="m142.58 86.796q1.5054 0 2.2274 0.66055 0.722 0.66055 0.722 2.1046v5.607h-0.98315l-0.26115-1.1675h-0.0615q-0.53766 0.67591-1.1368 0.99851-0.59911 0.3226-1.6283 0.3226-1.1214 0-1.8588-0.58374-0.73736-0.59911-0.73736-1.8588 0-1.2289 0.96778-1.8895 0.96779-0.67591 2.9802-0.73736l1.3979-0.04609v-0.49158q0-1.0292-0.44549-1.4286t-1.2597-0.3994q-0.64519 0-1.2289 0.1997-0.58374 0.18434-1.0907 0.43013l-0.41476-1.0139q0.53766-0.29187 1.275-0.49158 0.73736-0.21506 1.5362-0.21506zm1.613 4.3474-1.2136 0.04609q-1.5362 0.06145-2.1353 0.49157-0.58375 0.43013-0.58375 1.2136 0 0.69128 0.41477 1.0139 0.43013 0.3226 1.0907 0.3226 1.0292 0 1.7205-0.56838 0.70664-0.58374 0.70664-1.782z"/>
|
||||||
|
<path d="m152.04 86.78q1.4747 0 2.2274 0.722 0.75272 0.722 0.75272 2.3043v5.3612h-1.3365v-5.2691q0-1.9817-1.8434-1.9817-1.3672 0-1.8895 0.76808t-0.5223 2.2121v4.2706h-1.3518v-8.2339h1.0907l0.1997 1.1214h0.0768q0.39941-0.64519 1.106-0.95243 0.70663-0.3226 1.4901-0.3226z"/>
|
||||||
|
<path d="m160.87 95.321q-1.106 0-1.9509-0.44549-0.8449-0.44549-1.3365-1.3826-0.47622-0.93706-0.47622-2.3964 0-1.5208 0.49158-2.4732 0.50694-0.95243 1.3826-1.3979 0.87562-0.44549 1.9817-0.44549 0.61447 0 1.1982 0.13826 0.59911 0.12289 0.96779 0.30723l-0.41476 1.1214q-0.36869-0.13826-0.86026-0.26115-0.49157-0.12289-0.9217-0.12289-2.4272 0-2.4272 3.1184 0 1.4901 0.58374 2.2889 0.59911 0.78345 1.7666 0.78345 0.66055 0 1.1828-0.13826 0.5223-0.13826 0.95243-0.33796v1.1982q-0.41477 0.21506-0.92171 0.3226-0.49157 0.12289-1.1982 0.12289z"/>
|
||||||
|
<path d="m168.13 86.78q1.0446 0 1.8127 0.46085 0.76809 0.46085 1.1675 1.3057 0.41477 0.82953 0.41477 1.9509v0.81417h-5.6378q0.0307 1.3979 0.70664 2.1353 0.69128 0.722 1.9202 0.722 0.78345 0 1.3826-0.13826 0.61447-0.15362 1.2597-0.43013v1.1829q-0.62983 0.27651-1.2443 0.3994-0.61447 0.13826-1.4594 0.13826-1.1828 0-2.0738-0.47621t-1.3979-1.4133q-0.49157-0.93706-0.49157-2.3196 0-1.3518 0.44549-2.3196 0.46085-0.96779 1.275-1.4901 0.82953-0.5223 1.9202-0.5223zm-0.0154 1.106q-0.96779 0-1.5362 0.62983-0.55302 0.61447-0.66055 1.7205h4.1937q-0.0154-1.0446-0.49157-1.6898-0.47622-0.66055-1.5054-0.66055z"/>
|
||||||
|
<path d="m176.53 95.321q-1.5362 0-2.4579-1.06-0.92171-1.0753-0.92171-3.1952t0.92171-3.1952q0.93706-1.0907 2.4732-1.0907 0.95243 0 1.5515 0.35332 0.61447 0.35332 0.99851 0.86026h0.0922q-0.0307-0.1997-0.0614-0.58374-0.0307-0.3994-0.0307-0.62983v-3.2874h1.3518v11.675h-1.0907l-0.1997-1.106h-0.0614q-0.36868 0.5223-0.98315 0.89098-0.61446 0.36868-1.5822 0.36868zm0.21506-1.1214q1.3058 0 1.828-0.70664 0.53766-0.722 0.53766-2.166v-0.24579q0-1.5362-0.50693-2.3503-0.50694-0.82953-1.8741-0.82953-1.0907 0-1.6437 0.87562-0.53766 0.86026-0.53766 2.3196 0 1.4747 0.53766 2.2889 0.55302 0.81417 1.6591 0.81417z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.5 KiB |
147
demo/images/ads_tile_blue_light.svg
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="1024"
|
||||||
|
height="1024"
|
||||||
|
viewBox="0 0 270.93333 270.93333"
|
||||||
|
version="1.1"
|
||||||
|
id="svg506"
|
||||||
|
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||||
|
sodipodi:docname="ads_tile_blue_light.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview508"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="0.77111176"
|
||||||
|
inkscape:cx="450.64804"
|
||||||
|
inkscape:cy="534.2935"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1009"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer1" />
|
||||||
|
<defs
|
||||||
|
id="defs503" />
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<path
|
||||||
|
id="path16513"
|
||||||
|
style="mix-blend-mode:normal;fill:#009ddd;fill-opacity:1;fill-rule:nonzero;stroke-width:0.264583"
|
||||||
|
d="M -2.5e-6,-2.5e-6 V 270.93333 H 270.93333 V -2.5e-6 Z" />
|
||||||
|
<g
|
||||||
|
id="g1224"
|
||||||
|
transform="matrix(0.12402399,0,0,0.12402399,71.967002,73.673805)"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.25;stroke-width:2.13332">
|
||||||
|
<path
|
||||||
|
id="path927"
|
||||||
|
style="mix-blend-mode:normal;fill:#ffffff;fill-opacity:0.25;fill-rule:nonzero;stroke-width:4.7887"
|
||||||
|
d="m 405.32995,234.66 v 256 h 469.3301 v -256 z" />
|
||||||
|
<path
|
||||||
|
id="path16513-9"
|
||||||
|
style="mix-blend-mode:normal;fill:#ffffff;fill-opacity:0.25;fill-rule:nonzero;stroke-width:4.7887"
|
||||||
|
d="M 661.32995,533.3299 V 789.32994 H 874.66003 V 533.3299 Z" />
|
||||||
|
<path
|
||||||
|
id="path16513-5"
|
||||||
|
style="mix-blend-mode:normal;fill:#ffffff;fill-opacity:0.25;fill-rule:nonzero;stroke-width:4.7887"
|
||||||
|
d="m 405.32995,533.33 v 256 h 213.33008 v -256 z" />
|
||||||
|
<path
|
||||||
|
id="path24788"
|
||||||
|
style="mix-blend-mode:normal;fill:#ffffff;fill-opacity:0.25;fill-rule:nonzero;stroke-width:4.7887"
|
||||||
|
d="M 149.32995,234.66 V 789.32994 H 362.66003 V 234.66 Z" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
aria-label="Docking"
|
||||||
|
id="text2150"
|
||||||
|
style="font-size:15.3617px;line-height:1.05;fill:#ffffff;stroke-width:0.264583;fill-opacity:0.25">
|
||||||
|
<path
|
||||||
|
d="m 100.07327,182.94499 q 0,2.78047 -1.520805,4.19375 -1.505447,1.39791 -4.209106,1.39791 H 91.286381 V 177.5684 h 3.379574 q 1.643702,0 2.857276,0.61447 1.228936,0.61446 1.889489,1.81268 0.66055,1.19821 0.66055,2.94944 z m -1.459358,0.0461 q 0,-2.19673 -1.090681,-3.2106 -1.075319,-1.02923 -3.056978,-1.02923 h -1.797319 v 8.60255 h 1.490085 q 4.454893,0 4.454893,-4.36272 z"
|
||||||
|
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2539" />
|
||||||
|
<path
|
||||||
|
d="m 114.83588,184.40435 q 0,2.04311 -1.0446,3.16451 -1.02923,1.12141 -2.79583,1.12141 -1.09068,0 -1.95094,-0.49158 -0.84489,-0.50693 -1.33646,-1.45936 -0.49158,-0.96778 -0.49158,-2.33498 0,-2.0431 1.01387,-3.14914 1.02924,-1.10605 2.8112,-1.10605 1.10604,0 1.96629,0.50694 0.86026,0.49157 1.33647,1.444 0.49158,0.93706 0.49158,2.30425 z m -6.22149,0 q 0,1.45937 0.56838,2.31962 0.58374,0.84489 1.8434,0.84489 1.2443,0 1.82805,-0.84489 0.58374,-0.86025 0.58374,-2.31962 0,-1.45936 -0.58374,-2.28889 -0.58375,-0.82953 -1.84341,-0.82953 -1.25966,0 -1.82804,0.82953 -0.56838,0.82953 -0.56838,2.28889 z"
|
||||||
|
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2541" />
|
||||||
|
<path
|
||||||
|
d="m 125.63516,188.69027 q -1.10604,0 -1.95094,-0.44549 -0.84489,-0.44549 -1.33646,-1.38255 -0.47622,-0.93707 -0.47622,-2.39643 0,-1.52081 0.49158,-2.47323 0.50693,-0.95243 1.38255,-1.39792 0.87562,-0.44549 1.98166,-0.44549 0.61447,0 1.19821,0.13826 0.59911,0.12289 0.96779,0.30723 l -0.41477,1.12141 q -0.36868,-0.13826 -0.86025,-0.26115 -0.49158,-0.1229 -0.9217,-0.1229 -2.42715,0 -2.42715,3.11843 0,1.49008 0.58374,2.28889 0.59911,0.78345 1.7666,0.78345 0.66055,0 1.18285,-0.13826 0.5223,-0.13825 0.95242,-0.33795 v 1.19821 q -0.41476,0.21506 -0.9217,0.3226 -0.49157,0.12289 -1.19821,0.12289 z"
|
||||||
|
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2543" />
|
||||||
|
<path
|
||||||
|
d="m 136.40372,176.86176 v 6.09859 q 0,0.24579 -0.0307,0.6452 -0.0154,0.3994 -0.0307,0.69127 h 0.0614 q 0.0922,-0.12289 0.27651,-0.35332 0.18434,-0.23042 0.36868,-0.46085 0.19971,-0.24578 0.33796,-0.3994 l 2.62685,-2.78047 h 1.58226 l -3.33349,3.51783 3.56391,4.71604 h -1.62834 l -2.85727,-3.84042 -0.93707,0.81417 v 3.02625 h -1.33647 v -11.67489 z"
|
||||||
|
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2545" />
|
||||||
|
<path
|
||||||
|
d="m 149.32293,177.21508 q 0.30724,0 0.53766,0.21506 0.24579,0.1997 0.24579,0.64519 0,0.44549 -0.24579,0.66056 -0.23042,0.1997 -0.53766,0.1997 -0.33795,0 -0.56838,-0.1997 -0.23042,-0.21507 -0.23042,-0.66056 0,-0.44549 0.23042,-0.64519 0.23043,-0.21506 0.56838,-0.21506 z m 0.66056,3.0877 v 8.23387 h -1.35183 v -8.23387 z"
|
||||||
|
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2547" />
|
||||||
|
<path
|
||||||
|
d="m 161.91954,180.14916 q 1.47472,0 2.22745,0.722 0.75272,0.722 0.75272,2.30426 v 5.36123 h -1.33647 v -5.26906 q 0,-1.98166 -1.8434,-1.98166 -1.36719,0 -1.88949,0.76808 -0.5223,0.76809 -0.5223,2.21209 v 4.27055 h -1.35183 v -8.23387 h 1.09068 l 0.1997,1.1214 h 0.0768 q 0.39941,-0.64519 1.10604,-0.95242 0.70664,-0.3226 1.49009,-0.3226 z"
|
||||||
|
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2549" />
|
||||||
|
<path
|
||||||
|
d="m 175.72973,180.14916 q 0.81417,0 1.45936,0.30724 0.66055,0.30723 1.1214,0.93706 h 0.0768 l 0.18434,-1.09068 h 1.07532 v 8.37213 q 0,1.76659 -0.90634,2.65757 -0.89098,0.89098 -2.78047,0.89098 -1.81268,0 -2.96481,-0.5223 v -1.2443 q 1.21358,0.6452 3.04162,0.6452 1.05996,0 1.65906,-0.62983 0.61447,-0.61447 0.61447,-1.68979 v -0.3226 q 0,-0.18434 0.0154,-0.52229 0.0154,-0.35332 0.0307,-0.49158 h -0.0615 q -0.82953,1.2443 -2.55004,1.2443 -1.59762,0 -2.50396,-1.12141 -0.89098,-1.1214 -0.89098,-3.13378 0,-1.9663 0.89098,-3.11843 0.90634,-1.16749 2.4886,-1.16749 z m 0.18434,1.13677 q -1.02924,0 -1.59762,0.82953 -0.56838,0.81417 -0.56838,2.33498 0,1.52081 0.55302,2.33498 0.55302,0.79881 1.6437,0.79881 1.2443,0 1.81268,-0.66056 0.56838,-0.67591 0.56838,-2.166 v -0.32259 q 0,-1.67443 -0.58374,-2.41179 -0.58375,-0.73736 -1.82804,-0.73736 z"
|
||||||
|
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2551" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
aria-label="Qt Advanced
|
||||||
|
"
|
||||||
|
id="text2150-1"
|
||||||
|
style="font-size:15.3617px;line-height:1.05;fill:#ffffff;stroke-width:0.264583;fill-opacity:0.25">
|
||||||
|
<path
|
||||||
|
d="m 100.61097,89.66819 q 0,2.012383 -0.814169,3.441021 -0.798808,1.413276 -2.381063,1.935574 l 2.626852,2.734383 h -1.981661 l -2.119914,-2.473234 q -0.09217,0 -0.199702,0 -0.09217,0.01536 -0.184341,0.01536 -1.705148,0 -2.841914,-0.706638 -1.121404,-0.706639 -1.674426,-1.98166 -0.553021,-1.275021 -0.553021,-2.980169 0,-1.674426 0.553021,-2.934085 0.553022,-1.275021 1.674426,-1.98166 1.136766,-0.706638 2.857276,-0.706638 1.643702,0 2.765106,0.706638 1.121404,0.691277 1.68979,1.966298 0.58374,1.25966 0.58374,2.964808 z m -8.663997,0 q 0,2.07383 0.875617,3.272042 0.875617,1.182851 2.734382,1.182851 1.858766,0 2.719021,-1.182851 0.875617,-1.198212 0.875617,-3.272042 0,-2.073829 -0.860255,-3.241318 -0.860255,-1.182851 -2.719021,-1.182851 -1.874127,0 -2.749744,1.182851 -0.875617,1.167489 -0.875617,3.241318 z"
|
||||||
|
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2518" />
|
||||||
|
<path
|
||||||
|
d="m 105.60353,94.215253 q 0.30723,0 0.62983,-0.04609 0.32259,-0.04609 0.52229,-0.122893 v 1.029234 q -0.21506,0.107532 -0.61446,0.168978 -0.39941,0.07681 -0.76809,0.07681 -0.64519,0 -1.19821,-0.215064 -0.53766,-0.230425 -0.87562,-0.783447 -0.33796,-0.553021 -0.33796,-1.551531 v -4.792851 h -1.16749 v -0.645191 l 1.18286,-0.53766 0.53766,-1.751234 h 0.7988 v 1.88949 h 2.38107 v 1.044595 h -2.38107 v 4.762127 q 0,0.752724 0.35332,1.121404 0.36868,0.353319 0.93707,0.353319 z"
|
||||||
|
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2520" />
|
||||||
|
<path
|
||||||
|
d="m 119.45978,95.167679 -1.3211,-3.394936 h -4.34736 l -1.30575,3.394936 h -1.39791 l 4.28591,-11.014339 h 1.2443 l 4.27055,11.014339 z m -1.73587,-4.623872 -1.22893,-3.318127 q -0.0461,-0.122894 -0.15362,-0.445489 -0.10753,-0.322596 -0.21507,-0.660554 -0.0922,-0.353319 -0.15361,-0.537659 -0.1229,0.476213 -0.26115,0.937064 -0.12289,0.445489 -0.21507,0.706638 l -1.24429,3.318127 z"
|
||||||
|
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2522" />
|
||||||
|
<path
|
||||||
|
d="m 125.12825,95.321296 q -1.53617,0 -2.45787,-1.059957 -0.9217,-1.075319 -0.9217,-3.195234 0,-2.119915 0.9217,-3.195234 0.93706,-1.09068 2.47323,-1.09068 0.95243,0 1.55153,0.353319 0.61447,0.353319 0.99851,0.860255 h 0.0922 q -0.0307,-0.199702 -0.0614,-0.583745 -0.0307,-0.399404 -0.0307,-0.629829 v -3.287404 h 1.35183 v 11.674892 h -1.09068 l -0.1997,-1.106043 h -0.0614 q -0.36868,0.522298 -0.98314,0.890979 -0.61447,0.368681 -1.58226,0.368681 z m 0.21506,-1.121404 q 1.30575,0 1.82805,-0.706638 0.53766,-0.722 0.53766,-2.166 v -0.245787 q 0,-1.53617 -0.50694,-2.35034 -0.50694,-0.829532 -1.87413,-0.829532 -1.09068,0 -1.6437,0.875617 -0.53766,0.860255 -0.53766,2.319616 0,1.474724 0.53766,2.288894 0.55302,0.81417 1.65906,0.81417 z"
|
||||||
|
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2524" />
|
||||||
|
<path
|
||||||
|
d="m 133.46965,95.167679 -3.11842,-8.233871 h 1.444 l 1.75123,4.854297 q 0.12289,0.337957 0.26115,0.752723 0.13825,0.414766 0.24579,0.798809 0.10753,0.384042 0.15361,0.629829 h 0.0615 q 0.0461,-0.245787 0.16898,-0.629829 0.12289,-0.399405 0.26115,-0.798809 0.13825,-0.414766 0.26115,-0.752723 l 1.75123,-4.854297 h 1.444 l -3.13379,8.233871 z"
|
||||||
|
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2526" />
|
||||||
|
<path
|
||||||
|
d="m 142.57913,86.795552 q 1.50545,0 2.22745,0.660553 0.722,0.660554 0.722,2.104553 v 5.607021 h -0.98315 l -0.26115,-1.167489 h -0.0615 q -0.53766,0.675914 -1.13676,0.99851 -0.59911,0.322596 -1.62834,0.322596 -1.12141,0 -1.85877,-0.583745 -0.73736,-0.599106 -0.73736,-1.858765 0,-1.228936 0.96778,-1.88949 0.96779,-0.675914 2.98017,-0.737361 l 1.39792,-0.04609 V 89.71427 q 0,-1.029234 -0.44549,-1.428638 -0.44549,-0.399404 -1.25966,-0.399404 -0.64519,0 -1.22894,0.199702 -0.58374,0.184341 -1.09068,0.430128 l -0.41476,-1.013872 q 0.53766,-0.291873 1.27502,-0.491575 0.73736,-0.215064 1.53617,-0.215064 z m 1.61298,4.347361 -1.21358,0.04609 q -1.53617,0.06145 -2.13527,0.491574 -0.58375,0.430128 -0.58375,1.213574 0,0.691277 0.41477,1.013872 0.43013,0.322596 1.09068,0.322596 1.02923,0 1.72051,-0.568383 0.70664,-0.583744 0.70664,-1.781957 z"
|
||||||
|
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2528" />
|
||||||
|
<path
|
||||||
|
d="m 152.04195,86.780191 q 1.47472,0 2.22745,0.722 0.75272,0.721999 0.75272,2.304255 v 5.361233 h -1.33647 v -5.269063 q 0,-1.98166 -1.8434,-1.98166 -1.36719,0 -1.88949,0.768085 -0.5223,0.768085 -0.5223,2.212085 v 4.270553 h -1.35183 v -8.233871 h 1.09068 l 0.1997,1.121404 h 0.0768 q 0.39941,-0.645192 1.10605,-0.952426 0.70663,-0.322595 1.49008,-0.322595 z"
|
||||||
|
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2530" />
|
||||||
|
<path
|
||||||
|
d="m 160.87493,95.321296 q -1.10604,0 -1.95093,-0.445489 -0.8449,-0.44549 -1.33647,-1.382553 -0.47622,-0.937064 -0.47622,-2.396426 0,-1.520808 0.49158,-2.473233 0.50694,-0.952426 1.38255,-1.397915 0.87562,-0.445489 1.98166,-0.445489 0.61447,0 1.19821,0.138255 0.59911,0.122894 0.96779,0.307234 l -0.41476,1.121404 q -0.36869,-0.138255 -0.86026,-0.261149 -0.49157,-0.122893 -0.9217,-0.122893 -2.42715,0 -2.42715,3.118425 0,1.490085 0.58374,2.288893 0.59911,0.783447 1.7666,0.783447 0.66055,0 1.18285,-0.138256 0.5223,-0.138255 0.95243,-0.337957 v 1.198213 q -0.41477,0.215063 -0.92171,0.322595 -0.49157,0.122894 -1.19821,0.122894 z"
|
||||||
|
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2532" />
|
||||||
|
<path
|
||||||
|
d="m 168.12564,86.780191 q 1.0446,0 1.81268,0.460851 0.76809,0.460851 1.16749,1.305744 0.41477,0.829532 0.41477,1.950936 v 0.81417 h -5.63775 q 0.0307,1.397915 0.70664,2.135276 0.69128,0.722 1.92021,0.722 0.78345,0 1.38256,-0.138255 0.61447,-0.153617 1.25966,-0.430128 v 1.182851 q -0.62983,0.276511 -1.2443,0.399405 -0.61447,0.138255 -1.45936,0.138255 -1.18285,0 -2.07383,-0.476213 -0.89098,-0.476213 -1.39792,-1.413276 -0.49157,-0.937064 -0.49157,-2.319617 0,-1.35183 0.44549,-2.319617 0.46085,-0.967787 1.27502,-1.490085 0.82953,-0.522297 1.92021,-0.522297 z m -0.0154,1.106042 q -0.96779,0 -1.53617,0.62983 -0.55302,0.614468 -0.66055,1.72051 h 4.19374 q -0.0154,-1.044595 -0.49157,-1.689787 -0.47622,-0.660553 -1.50545,-0.660553 z"
|
||||||
|
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2534" />
|
||||||
|
<path
|
||||||
|
d="m 176.52848,95.321296 q -1.53617,0 -2.45787,-1.059957 -0.92171,-1.075319 -0.92171,-3.195234 0,-2.119915 0.92171,-3.195234 0.93706,-1.09068 2.47323,-1.09068 0.95243,0 1.55153,0.353319 0.61447,0.353319 0.99851,0.860255 h 0.0922 q -0.0307,-0.199702 -0.0614,-0.583745 -0.0307,-0.399404 -0.0307,-0.629829 v -3.287404 h 1.35183 v 11.674892 h -1.09068 l -0.1997,-1.106043 h -0.0614 q -0.36868,0.522298 -0.98315,0.890979 -0.61446,0.368681 -1.58225,0.368681 z m 0.21506,-1.121404 q 1.30575,0 1.82804,-0.706638 0.53766,-0.722 0.53766,-2.166 v -0.245787 q 0,-1.53617 -0.50693,-2.35034 -0.50694,-0.829532 -1.87413,-0.829532 -1.09068,0 -1.6437,0.875617 -0.53766,0.860255 -0.53766,2.319616 0,1.474724 0.53766,2.288894 0.55302,0.81417 1.65906,0.81417 z"
|
||||||
|
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
|
||||||
|
id="path2536" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 14 KiB |
33
demo/images/ads_tile_green.svg
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="1024" height="1024" version="1.1" viewBox="0 0 270.93 270.93" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="m-2.5e-6 -2.5e-6v270.93h270.93v-270.93z" fill="#accb01" stroke-width=".26458" style="mix-blend-mode:normal"/>
|
||||||
|
<g fill="#fff" fill-opacity=".25">
|
||||||
|
<g transform="matrix(.12402 0 0 .12402 71.967 73.674)" stroke-width="4.7887">
|
||||||
|
<path d="m405.33 234.66v256h469.33v-256z" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m661.33 533.33v256h213.33v-256z" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m405.33 533.33v256h213.33v-256z" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m149.33 234.66v554.67h213.33v-554.67z" style="mix-blend-mode:normal"/>
|
||||||
|
</g>
|
||||||
|
<g stroke-width=".26458" aria-label="Docking">
|
||||||
|
<path d="m100.07 182.94q0 2.7805-1.5208 4.1938-1.5054 1.3979-4.2091 1.3979h-3.057v-10.968h3.3796q1.6437 0 2.8573 0.61447 1.2289 0.61446 1.8895 1.8127 0.66055 1.1982 0.66055 2.9494zm-1.4594 0.0461q0-2.1967-1.0907-3.2106-1.0753-1.0292-3.057-1.0292h-1.7973v8.6026h1.4901q4.4549 0 4.4549-4.3627z"/>
|
||||||
|
<path d="m114.84 184.4q0 2.0431-1.0446 3.1645-1.0292 1.1214-2.7958 1.1214-1.0907 0-1.9509-0.49158-0.84489-0.50693-1.3365-1.4594-0.49158-0.96778-0.49158-2.335 0-2.0431 1.0139-3.1491 1.0292-1.106 2.8112-1.106 1.106 0 1.9663 0.50694 0.86026 0.49157 1.3365 1.444 0.49158 0.93706 0.49158 2.3042zm-6.2215 0q0 1.4594 0.56838 2.3196 0.58374 0.84489 1.8434 0.84489 1.2443 0 1.828-0.84489 0.58374-0.86025 0.58374-2.3196 0-1.4594-0.58374-2.2889-0.58375-0.82953-1.8434-0.82953t-1.828 0.82953-0.56838 2.2889z"/>
|
||||||
|
<path d="m125.64 188.69q-1.106 0-1.9509-0.44549-0.84489-0.44549-1.3365-1.3826-0.47622-0.93707-0.47622-2.3964 0-1.5208 0.49158-2.4732 0.50693-0.95243 1.3826-1.3979t1.9817-0.44549q0.61447 0 1.1982 0.13826 0.59911 0.12289 0.96779 0.30723l-0.41477 1.1214q-0.36868-0.13826-0.86025-0.26115-0.49158-0.1229-0.9217-0.1229-2.4272 0-2.4272 3.1184 0 1.4901 0.58374 2.2889 0.59911 0.78345 1.7666 0.78345 0.66055 0 1.1828-0.13826 0.5223-0.13825 0.95242-0.33795v1.1982q-0.41476 0.21506-0.9217 0.3226-0.49157 0.12289-1.1982 0.12289z"/>
|
||||||
|
<path d="m136.4 176.86v6.0986q0 0.24579-0.0307 0.6452-0.0154 0.3994-0.0307 0.69127h0.0614q0.0922-0.12289 0.27651-0.35332 0.18434-0.23042 0.36868-0.46085 0.19971-0.24578 0.33796-0.3994l2.6268-2.7805h1.5823l-3.3335 3.5178 3.5639 4.716h-1.6283l-2.8573-3.8404-0.93707 0.81417v3.0262h-1.3365v-11.675z"/>
|
||||||
|
<path d="m149.32 177.22q0.30724 0 0.53766 0.21506 0.24579 0.1997 0.24579 0.64519t-0.24579 0.66056q-0.23042 0.1997-0.53766 0.1997-0.33795 0-0.56838-0.1997-0.23042-0.21507-0.23042-0.66056t0.23042-0.64519q0.23043-0.21506 0.56838-0.21506zm0.66056 3.0877v8.2339h-1.3518v-8.2339z"/>
|
||||||
|
<path d="m161.92 180.15q1.4747 0 2.2274 0.722 0.75272 0.722 0.75272 2.3043v5.3612h-1.3365v-5.2691q0-1.9817-1.8434-1.9817-1.3672 0-1.8895 0.76808-0.5223 0.76809-0.5223 2.2121v4.2706h-1.3518v-8.2339h1.0907l0.1997 1.1214h0.0768q0.39941-0.64519 1.106-0.95242 0.70664-0.3226 1.4901-0.3226z"/>
|
||||||
|
<path d="m175.73 180.15q0.81417 0 1.4594 0.30724 0.66055 0.30723 1.1214 0.93706h0.0768l0.18434-1.0907h1.0753v8.3721q0 1.7666-0.90634 2.6576-0.89098 0.89098-2.7805 0.89098-1.8127 0-2.9648-0.5223v-1.2443q1.2136 0.6452 3.0416 0.6452 1.06 0 1.6591-0.62983 0.61447-0.61447 0.61447-1.6898v-0.3226q0-0.18434 0.0154-0.52229 0.0154-0.35332 0.0307-0.49158h-0.0615q-0.82953 1.2443-2.55 1.2443-1.5976 0-2.504-1.1214-0.89098-1.1214-0.89098-3.1338 0-1.9663 0.89098-3.1184 0.90634-1.1675 2.4886-1.1675zm0.18434 1.1368q-1.0292 0-1.5976 0.82953-0.56838 0.81417-0.56838 2.335t0.55302 2.335q0.55302 0.79881 1.6437 0.79881 1.2443 0 1.8127-0.66056 0.56838-0.67591 0.56838-2.166v-0.32259q0-1.6744-0.58374-2.4118-0.58375-0.73736-1.828-0.73736z"/>
|
||||||
|
</g>
|
||||||
|
<g stroke-width=".26458" aria-label="Qt Advanced ">
|
||||||
|
<path d="m100.61 89.668q0 2.0124-0.81417 3.441-0.79881 1.4133-2.3811 1.9356l2.6269 2.7344h-1.9817l-2.1199-2.4732q-0.09217 0-0.1997 0-0.09217 0.01536-0.18434 0.01536-1.7051 0-2.8419-0.70664-1.1214-0.70664-1.6744-1.9817-0.55302-1.275-0.55302-2.9802 0-1.6744 0.55302-2.9341 0.55302-1.275 1.6744-1.9817 1.1368-0.70664 2.8573-0.70664 1.6437 0 2.7651 0.70664 1.1214 0.69128 1.6898 1.9663 0.58374 1.2597 0.58374 2.9648zm-8.664 0q0 2.0738 0.87562 3.272 0.87562 1.1829 2.7344 1.1829 1.8588 0 2.719-1.1829 0.87562-1.1982 0.87562-3.272 0-2.0738-0.86026-3.2413-0.86026-1.1829-2.719-1.1829-1.8741 0-2.7497 1.1829-0.87562 1.1675-0.87562 3.2413z"/>
|
||||||
|
<path d="m105.6 94.215q0.30723 0 0.62983-0.04609 0.32259-0.04609 0.52229-0.12289v1.0292q-0.21506 0.10753-0.61446 0.16898-0.39941 0.07681-0.76809 0.07681-0.64519 0-1.1982-0.21506-0.53766-0.23042-0.87562-0.78345-0.33796-0.55302-0.33796-1.5515v-4.7929h-1.1675v-0.64519l1.1829-0.53766 0.53766-1.7512h0.7988v1.8895h2.3811v1.0446h-2.3811v4.7621q0 0.75272 0.35332 1.1214 0.36868 0.35332 0.93707 0.35332z"/>
|
||||||
|
<path d="m119.46 95.168-1.3211-3.3949h-4.3474l-1.3058 3.3949h-1.3979l4.2859-11.014h1.2443l4.2706 11.014zm-1.7359-4.6239-1.2289-3.3181q-0.0461-0.12289-0.15362-0.44549-0.10753-0.3226-0.21507-0.66055-0.0922-0.35332-0.15361-0.53766-0.1229 0.47621-0.26115 0.93706-0.12289 0.44549-0.21507 0.70664l-1.2443 3.3181z"/>
|
||||||
|
<path d="m125.13 95.321q-1.5362 0-2.4579-1.06-0.9217-1.0753-0.9217-3.1952t0.9217-3.1952q0.93706-1.0907 2.4732-1.0907 0.95243 0 1.5515 0.35332 0.61447 0.35332 0.99851 0.86026h0.0922q-0.0307-0.1997-0.0614-0.58374-0.0307-0.3994-0.0307-0.62983v-3.2874h1.3518v11.675h-1.0907l-0.1997-1.106h-0.0614q-0.36868 0.5223-0.98314 0.89098-0.61447 0.36868-1.5823 0.36868zm0.21506-1.1214q1.3058 0 1.828-0.70664 0.53766-0.722 0.53766-2.166v-0.24579q0-1.5362-0.50694-2.3503-0.50694-0.82953-1.8741-0.82953-1.0907 0-1.6437 0.87562-0.53766 0.86026-0.53766 2.3196 0 1.4747 0.53766 2.2889 0.55302 0.81417 1.6591 0.81417z"/>
|
||||||
|
<path d="m133.47 95.168-3.1184-8.2339h1.444l1.7512 4.8543q0.12289 0.33796 0.26115 0.75272 0.13825 0.41477 0.24579 0.79881 0.10753 0.38404 0.15361 0.62983h0.0615q0.0461-0.24579 0.16898-0.62983 0.12289-0.3994 0.26115-0.79881 0.13825-0.41477 0.26115-0.75272l1.7512-4.8543h1.444l-3.1338 8.2339z"/>
|
||||||
|
<path d="m142.58 86.796q1.5054 0 2.2274 0.66055 0.722 0.66055 0.722 2.1046v5.607h-0.98315l-0.26115-1.1675h-0.0615q-0.53766 0.67591-1.1368 0.99851-0.59911 0.3226-1.6283 0.3226-1.1214 0-1.8588-0.58374-0.73736-0.59911-0.73736-1.8588 0-1.2289 0.96778-1.8895 0.96779-0.67591 2.9802-0.73736l1.3979-0.04609v-0.49158q0-1.0292-0.44549-1.4286t-1.2597-0.3994q-0.64519 0-1.2289 0.1997-0.58374 0.18434-1.0907 0.43013l-0.41476-1.0139q0.53766-0.29187 1.275-0.49158 0.73736-0.21506 1.5362-0.21506zm1.613 4.3474-1.2136 0.04609q-1.5362 0.06145-2.1353 0.49157-0.58375 0.43013-0.58375 1.2136 0 0.69128 0.41477 1.0139 0.43013 0.3226 1.0907 0.3226 1.0292 0 1.7205-0.56838 0.70664-0.58374 0.70664-1.782z"/>
|
||||||
|
<path d="m152.04 86.78q1.4747 0 2.2274 0.722 0.75272 0.722 0.75272 2.3043v5.3612h-1.3365v-5.2691q0-1.9817-1.8434-1.9817-1.3672 0-1.8895 0.76808t-0.5223 2.2121v4.2706h-1.3518v-8.2339h1.0907l0.1997 1.1214h0.0768q0.39941-0.64519 1.106-0.95243 0.70663-0.3226 1.4901-0.3226z"/>
|
||||||
|
<path d="m160.87 95.321q-1.106 0-1.9509-0.44549-0.8449-0.44549-1.3365-1.3826-0.47622-0.93706-0.47622-2.3964 0-1.5208 0.49158-2.4732 0.50694-0.95243 1.3826-1.3979 0.87562-0.44549 1.9817-0.44549 0.61447 0 1.1982 0.13826 0.59911 0.12289 0.96779 0.30723l-0.41476 1.1214q-0.36869-0.13826-0.86026-0.26115-0.49157-0.12289-0.9217-0.12289-2.4272 0-2.4272 3.1184 0 1.4901 0.58374 2.2889 0.59911 0.78345 1.7666 0.78345 0.66055 0 1.1828-0.13826 0.5223-0.13826 0.95243-0.33796v1.1982q-0.41477 0.21506-0.92171 0.3226-0.49157 0.12289-1.1982 0.12289z"/>
|
||||||
|
<path d="m168.13 86.78q1.0446 0 1.8127 0.46085 0.76809 0.46085 1.1675 1.3057 0.41477 0.82953 0.41477 1.9509v0.81417h-5.6378q0.0307 1.3979 0.70664 2.1353 0.69128 0.722 1.9202 0.722 0.78345 0 1.3826-0.13826 0.61447-0.15362 1.2597-0.43013v1.1829q-0.62983 0.27651-1.2443 0.3994-0.61447 0.13826-1.4594 0.13826-1.1828 0-2.0738-0.47621t-1.3979-1.4133q-0.49157-0.93706-0.49157-2.3196 0-1.3518 0.44549-2.3196 0.46085-0.96779 1.275-1.4901 0.82953-0.5223 1.9202-0.5223zm-0.0154 1.106q-0.96779 0-1.5362 0.62983-0.55302 0.61447-0.66055 1.7205h4.1937q-0.0154-1.0446-0.49157-1.6898-0.47622-0.66055-1.5054-0.66055z"/>
|
||||||
|
<path d="m176.53 95.321q-1.5362 0-2.4579-1.06-0.92171-1.0753-0.92171-3.1952t0.92171-3.1952q0.93706-1.0907 2.4732-1.0907 0.95243 0 1.5515 0.35332 0.61447 0.35332 0.99851 0.86026h0.0922q-0.0307-0.1997-0.0614-0.58374-0.0307-0.3994-0.0307-0.62983v-3.2874h1.3518v11.675h-1.0907l-0.1997-1.106h-0.0614q-0.36868 0.5223-0.98315 0.89098-0.61446 0.36868-1.5822 0.36868zm0.21506-1.1214q1.3058 0 1.828-0.70664 0.53766-0.722 0.53766-2.166v-0.24579q0-1.5362-0.50693-2.3503-0.50694-0.82953-1.8741-0.82953-1.0907 0-1.6437 0.87562-0.53766 0.86026-0.53766 2.3196 0 1.4747 0.53766 2.2889 0.55302 0.81417 1.6591 0.81417z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.5 KiB |
33
demo/images/ads_tile_orange.svg
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="1024" height="1024" version="1.1" viewBox="0 0 270.93 270.93" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="m-2.5e-6 -2.5e-6v270.93h270.93v-270.93z" fill="#ff9833" stroke-width=".26458" style="mix-blend-mode:normal"/>
|
||||||
|
<g fill="#fff" fill-opacity=".25">
|
||||||
|
<g transform="matrix(.12402 0 0 .12402 71.967 73.674)" stroke-width="4.7887">
|
||||||
|
<path d="m405.33 234.66v256h469.33v-256z" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m661.33 533.33v256h213.33v-256z" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m405.33 533.33v256h213.33v-256z" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m149.33 234.66v554.67h213.33v-554.67z" style="mix-blend-mode:normal"/>
|
||||||
|
</g>
|
||||||
|
<g stroke-width=".26458" aria-label="Docking">
|
||||||
|
<path d="m100.07 182.94q0 2.7805-1.5208 4.1938-1.5054 1.3979-4.2091 1.3979h-3.057v-10.968h3.3796q1.6437 0 2.8573 0.61447 1.2289 0.61446 1.8895 1.8127 0.66055 1.1982 0.66055 2.9494zm-1.4594 0.0461q0-2.1967-1.0907-3.2106-1.0753-1.0292-3.057-1.0292h-1.7973v8.6026h1.4901q4.4549 0 4.4549-4.3627z"/>
|
||||||
|
<path d="m114.84 184.4q0 2.0431-1.0446 3.1645-1.0292 1.1214-2.7958 1.1214-1.0907 0-1.9509-0.49158-0.84489-0.50693-1.3365-1.4594-0.49158-0.96778-0.49158-2.335 0-2.0431 1.0139-3.1491 1.0292-1.106 2.8112-1.106 1.106 0 1.9663 0.50694 0.86026 0.49157 1.3365 1.444 0.49158 0.93706 0.49158 2.3042zm-6.2215 0q0 1.4594 0.56838 2.3196 0.58374 0.84489 1.8434 0.84489 1.2443 0 1.828-0.84489 0.58374-0.86025 0.58374-2.3196 0-1.4594-0.58374-2.2889-0.58375-0.82953-1.8434-0.82953t-1.828 0.82953-0.56838 2.2889z"/>
|
||||||
|
<path d="m125.64 188.69q-1.106 0-1.9509-0.44549-0.84489-0.44549-1.3365-1.3826-0.47622-0.93707-0.47622-2.3964 0-1.5208 0.49158-2.4732 0.50693-0.95243 1.3826-1.3979t1.9817-0.44549q0.61447 0 1.1982 0.13826 0.59911 0.12289 0.96779 0.30723l-0.41477 1.1214q-0.36868-0.13826-0.86025-0.26115-0.49158-0.1229-0.9217-0.1229-2.4272 0-2.4272 3.1184 0 1.4901 0.58374 2.2889 0.59911 0.78345 1.7666 0.78345 0.66055 0 1.1828-0.13826 0.5223-0.13825 0.95242-0.33795v1.1982q-0.41476 0.21506-0.9217 0.3226-0.49157 0.12289-1.1982 0.12289z"/>
|
||||||
|
<path d="m136.4 176.86v6.0986q0 0.24579-0.0307 0.6452-0.0154 0.3994-0.0307 0.69127h0.0614q0.0922-0.12289 0.27651-0.35332 0.18434-0.23042 0.36868-0.46085 0.19971-0.24578 0.33796-0.3994l2.6268-2.7805h1.5823l-3.3335 3.5178 3.5639 4.716h-1.6283l-2.8573-3.8404-0.93707 0.81417v3.0262h-1.3365v-11.675z"/>
|
||||||
|
<path d="m149.32 177.22q0.30724 0 0.53766 0.21506 0.24579 0.1997 0.24579 0.64519t-0.24579 0.66056q-0.23042 0.1997-0.53766 0.1997-0.33795 0-0.56838-0.1997-0.23042-0.21507-0.23042-0.66056t0.23042-0.64519q0.23043-0.21506 0.56838-0.21506zm0.66056 3.0877v8.2339h-1.3518v-8.2339z"/>
|
||||||
|
<path d="m161.92 180.15q1.4747 0 2.2274 0.722 0.75272 0.722 0.75272 2.3043v5.3612h-1.3365v-5.2691q0-1.9817-1.8434-1.9817-1.3672 0-1.8895 0.76808-0.5223 0.76809-0.5223 2.2121v4.2706h-1.3518v-8.2339h1.0907l0.1997 1.1214h0.0768q0.39941-0.64519 1.106-0.95242 0.70664-0.3226 1.4901-0.3226z"/>
|
||||||
|
<path d="m175.73 180.15q0.81417 0 1.4594 0.30724 0.66055 0.30723 1.1214 0.93706h0.0768l0.18434-1.0907h1.0753v8.3721q0 1.7666-0.90634 2.6576-0.89098 0.89098-2.7805 0.89098-1.8127 0-2.9648-0.5223v-1.2443q1.2136 0.6452 3.0416 0.6452 1.06 0 1.6591-0.62983 0.61447-0.61447 0.61447-1.6898v-0.3226q0-0.18434 0.0154-0.52229 0.0154-0.35332 0.0307-0.49158h-0.0615q-0.82953 1.2443-2.55 1.2443-1.5976 0-2.504-1.1214-0.89098-1.1214-0.89098-3.1338 0-1.9663 0.89098-3.1184 0.90634-1.1675 2.4886-1.1675zm0.18434 1.1368q-1.0292 0-1.5976 0.82953-0.56838 0.81417-0.56838 2.335t0.55302 2.335q0.55302 0.79881 1.6437 0.79881 1.2443 0 1.8127-0.66056 0.56838-0.67591 0.56838-2.166v-0.32259q0-1.6744-0.58374-2.4118-0.58375-0.73736-1.828-0.73736z"/>
|
||||||
|
</g>
|
||||||
|
<g stroke-width=".26458" aria-label="Qt Advanced ">
|
||||||
|
<path d="m100.61 89.668q0 2.0124-0.81417 3.441-0.79881 1.4133-2.3811 1.9356l2.6269 2.7344h-1.9817l-2.1199-2.4732q-0.09217 0-0.1997 0-0.09217 0.01536-0.18434 0.01536-1.7051 0-2.8419-0.70664-1.1214-0.70664-1.6744-1.9817-0.55302-1.275-0.55302-2.9802 0-1.6744 0.55302-2.9341 0.55302-1.275 1.6744-1.9817 1.1368-0.70664 2.8573-0.70664 1.6437 0 2.7651 0.70664 1.1214 0.69128 1.6898 1.9663 0.58374 1.2597 0.58374 2.9648zm-8.664 0q0 2.0738 0.87562 3.272 0.87562 1.1829 2.7344 1.1829 1.8588 0 2.719-1.1829 0.87562-1.1982 0.87562-3.272 0-2.0738-0.86026-3.2413-0.86026-1.1829-2.719-1.1829-1.8741 0-2.7497 1.1829-0.87562 1.1675-0.87562 3.2413z"/>
|
||||||
|
<path d="m105.6 94.215q0.30723 0 0.62983-0.04609 0.32259-0.04609 0.52229-0.12289v1.0292q-0.21506 0.10753-0.61446 0.16898-0.39941 0.07681-0.76809 0.07681-0.64519 0-1.1982-0.21506-0.53766-0.23042-0.87562-0.78345-0.33796-0.55302-0.33796-1.5515v-4.7929h-1.1675v-0.64519l1.1829-0.53766 0.53766-1.7512h0.7988v1.8895h2.3811v1.0446h-2.3811v4.7621q0 0.75272 0.35332 1.1214 0.36868 0.35332 0.93707 0.35332z"/>
|
||||||
|
<path d="m119.46 95.168-1.3211-3.3949h-4.3474l-1.3058 3.3949h-1.3979l4.2859-11.014h1.2443l4.2706 11.014zm-1.7359-4.6239-1.2289-3.3181q-0.0461-0.12289-0.15362-0.44549-0.10753-0.3226-0.21507-0.66055-0.0922-0.35332-0.15361-0.53766-0.1229 0.47621-0.26115 0.93706-0.12289 0.44549-0.21507 0.70664l-1.2443 3.3181z"/>
|
||||||
|
<path d="m125.13 95.321q-1.5362 0-2.4579-1.06-0.9217-1.0753-0.9217-3.1952t0.9217-3.1952q0.93706-1.0907 2.4732-1.0907 0.95243 0 1.5515 0.35332 0.61447 0.35332 0.99851 0.86026h0.0922q-0.0307-0.1997-0.0614-0.58374-0.0307-0.3994-0.0307-0.62983v-3.2874h1.3518v11.675h-1.0907l-0.1997-1.106h-0.0614q-0.36868 0.5223-0.98314 0.89098-0.61447 0.36868-1.5823 0.36868zm0.21506-1.1214q1.3058 0 1.828-0.70664 0.53766-0.722 0.53766-2.166v-0.24579q0-1.5362-0.50694-2.3503-0.50694-0.82953-1.8741-0.82953-1.0907 0-1.6437 0.87562-0.53766 0.86026-0.53766 2.3196 0 1.4747 0.53766 2.2889 0.55302 0.81417 1.6591 0.81417z"/>
|
||||||
|
<path d="m133.47 95.168-3.1184-8.2339h1.444l1.7512 4.8543q0.12289 0.33796 0.26115 0.75272 0.13825 0.41477 0.24579 0.79881 0.10753 0.38404 0.15361 0.62983h0.0615q0.0461-0.24579 0.16898-0.62983 0.12289-0.3994 0.26115-0.79881 0.13825-0.41477 0.26115-0.75272l1.7512-4.8543h1.444l-3.1338 8.2339z"/>
|
||||||
|
<path d="m142.58 86.796q1.5054 0 2.2274 0.66055 0.722 0.66055 0.722 2.1046v5.607h-0.98315l-0.26115-1.1675h-0.0615q-0.53766 0.67591-1.1368 0.99851-0.59911 0.3226-1.6283 0.3226-1.1214 0-1.8588-0.58374-0.73736-0.59911-0.73736-1.8588 0-1.2289 0.96778-1.8895 0.96779-0.67591 2.9802-0.73736l1.3979-0.04609v-0.49158q0-1.0292-0.44549-1.4286t-1.2597-0.3994q-0.64519 0-1.2289 0.1997-0.58374 0.18434-1.0907 0.43013l-0.41476-1.0139q0.53766-0.29187 1.275-0.49158 0.73736-0.21506 1.5362-0.21506zm1.613 4.3474-1.2136 0.04609q-1.5362 0.06145-2.1353 0.49157-0.58375 0.43013-0.58375 1.2136 0 0.69128 0.41477 1.0139 0.43013 0.3226 1.0907 0.3226 1.0292 0 1.7205-0.56838 0.70664-0.58374 0.70664-1.782z"/>
|
||||||
|
<path d="m152.04 86.78q1.4747 0 2.2274 0.722 0.75272 0.722 0.75272 2.3043v5.3612h-1.3365v-5.2691q0-1.9817-1.8434-1.9817-1.3672 0-1.8895 0.76808t-0.5223 2.2121v4.2706h-1.3518v-8.2339h1.0907l0.1997 1.1214h0.0768q0.39941-0.64519 1.106-0.95243 0.70663-0.3226 1.4901-0.3226z"/>
|
||||||
|
<path d="m160.87 95.321q-1.106 0-1.9509-0.44549-0.8449-0.44549-1.3365-1.3826-0.47622-0.93706-0.47622-2.3964 0-1.5208 0.49158-2.4732 0.50694-0.95243 1.3826-1.3979 0.87562-0.44549 1.9817-0.44549 0.61447 0 1.1982 0.13826 0.59911 0.12289 0.96779 0.30723l-0.41476 1.1214q-0.36869-0.13826-0.86026-0.26115-0.49157-0.12289-0.9217-0.12289-2.4272 0-2.4272 3.1184 0 1.4901 0.58374 2.2889 0.59911 0.78345 1.7666 0.78345 0.66055 0 1.1828-0.13826 0.5223-0.13826 0.95243-0.33796v1.1982q-0.41477 0.21506-0.92171 0.3226-0.49157 0.12289-1.1982 0.12289z"/>
|
||||||
|
<path d="m168.13 86.78q1.0446 0 1.8127 0.46085 0.76809 0.46085 1.1675 1.3057 0.41477 0.82953 0.41477 1.9509v0.81417h-5.6378q0.0307 1.3979 0.70664 2.1353 0.69128 0.722 1.9202 0.722 0.78345 0 1.3826-0.13826 0.61447-0.15362 1.2597-0.43013v1.1829q-0.62983 0.27651-1.2443 0.3994-0.61447 0.13826-1.4594 0.13826-1.1828 0-2.0738-0.47621t-1.3979-1.4133q-0.49157-0.93706-0.49157-2.3196 0-1.3518 0.44549-2.3196 0.46085-0.96779 1.275-1.4901 0.82953-0.5223 1.9202-0.5223zm-0.0154 1.106q-0.96779 0-1.5362 0.62983-0.55302 0.61447-0.66055 1.7205h4.1937q-0.0154-1.0446-0.49157-1.6898-0.47622-0.66055-1.5054-0.66055z"/>
|
||||||
|
<path d="m176.53 95.321q-1.5362 0-2.4579-1.06-0.92171-1.0753-0.92171-3.1952t0.92171-3.1952q0.93706-1.0907 2.4732-1.0907 0.95243 0 1.5515 0.35332 0.61447 0.35332 0.99851 0.86026h0.0922q-0.0307-0.1997-0.0614-0.58374-0.0307-0.3994-0.0307-0.62983v-3.2874h1.3518v11.675h-1.0907l-0.1997-1.106h-0.0614q-0.36868 0.5223-0.98315 0.89098-0.61446 0.36868-1.5822 0.36868zm0.21506-1.1214q1.3058 0 1.828-0.70664 0.53766-0.722 0.53766-2.166v-0.24579q0-1.5362-0.50693-2.3503-0.50694-0.82953-1.8741-0.82953-1.0907 0-1.6437 0.87562-0.53766 0.86026-0.53766 2.3196 0 1.4747 0.53766 2.2889 0.55302 0.81417 1.6591 0.81417z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.5 KiB |
6
demo/images/color_lens.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
|
||||||
|
<desc>color_lens icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.)</desc>
|
||||||
|
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
|
||||||
|
<path d="M896,469.33c0,117.76 -95.57,213.34 -213.33,213.34h-75.52c-35.41,0 -64,28.59 -64,64c0,16.21 6.4,31.15 16.21,42.24c10.24,11.52 16.64,26.45 16.64,43.09c0,35.41 -28.59,64 -64,64c-212.05,0 -384,-171.95 -384,-384c0,-212.05 171.95,-384 384,-384c212.05,0 384,152.74 384,341.33zM341.33,448c0,-35.41 -28.59,-64 -64,-64c-35.41,0 -64,28.59 -64,64c0,35.41 28.59,64 64,64c35.41,0 64,-28.59 64,-64zM469.33,277.33c0,-35.41 -28.59,-64 -64,-64c-35.41,0 -64,28.59 -64,64c0,35.41 28.59,64 64,64c35.41,0 64,-28.59 64,-64zM682.67,277.33c0,-35.41 -28.59,-64 -64,-64c-35.41,0 -64,28.59 -64,64c0,35.41 28.59,64 64,64c35.41,0 64,-28.59 64,-64zM810.67,448c0,-35.41 -28.59,-64 -64,-64c-35.41,0 -64,28.59 -64,64c0,35.41 28.59,64 64,64c35.41,0 64,-28.59 64,-64z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
6
demo/images/crop_original.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
|
||||||
|
<desc>crop_original icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.)</desc>
|
||||||
|
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
|
||||||
|
<path d="M896,213.33v597.34c0,46.93 -38.4,85.33 -85.33,85.33h-597.34c-46.93,0 -85.33,-38.4 -85.33,-85.33v-597.34c0,-46.93 38.4,-85.33 85.33,-85.33h597.34c46.93,0 85.33,38.4 85.33,85.33zM810.67,213.33h-597.34v597.34h597.34zM746.67,725.33h-469.34l117.34,-150.61l83.62,100.69l117.34,-151.04z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 700 B |
6
demo/images/find_in_page.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
|
||||||
|
<desc>find_in_page icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.)</desc>
|
||||||
|
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
|
||||||
|
<path d="M689.92,672c22.19,-33.71 35.41,-73.81 35.41,-117.33c0,-117.76 -95.57,-213.34 -213.33,-213.34c-117.76,0 -213.33,95.58 -213.33,213.34c0,117.76 95.57,213.33 213.33,213.33c43.52,0 83.63,-13.22 117.76,-35.41l189.01,189.01c-14.51,10.67 -31.57,17.07 -50.77,17.07h-512.43c-46.93,0 -84.9,-38.41 -84.9,-85.34l0.42,-682.66c0,-46.93 37.98,-85.34 84.91,-85.34h341.33l256,256v494.51zM512,426.67c70.83,0 128,57.17 128,128c0,70.83 -57.17,128 -128,128c-70.83,0 -128,-57.17 -128,-128c0,-70.83 57.17,-128 128,-128z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 915 B |
6
demo/images/font_download.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
|
||||||
|
<desc>font_download icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.)</desc>
|
||||||
|
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
|
||||||
|
<path d="M938.67,170.67v682.66c0,46.93 -38.41,85.34 -85.34,85.34h-682.66c-46.93,0 -85.34,-38.41 -85.34,-85.34v-682.66c0,-46.93 38.41,-85.34 85.34,-85.34h682.66c46.93,0 85.34,38.41 85.34,85.34zM769.71,789.33l-218.03,-554.66h-79.36l-218.03,554.66h89.18l47.78,-128h240.64l48.64,128zM512,340.48l88.32,235.52h-176.64z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 724 B |
6
demo/images/lock.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
|
||||||
|
<desc>lock icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.)</desc>
|
||||||
|
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
|
||||||
|
<path d="M853.33,426.67v426.66c0,46.93 -38.4,85.34 -85.33,85.34h-512c-46.93,0 -85.33,-38.41 -85.33,-85.34v-426.66c0,-46.93 38.4,-85.34 85.33,-85.34h42.67v-85.33c0,-117.76 95.57,-213.33 213.33,-213.33c117.76,0 213.33,95.57 213.33,213.33v85.33h42.67c46.93,0 85.33,38.41 85.33,85.34zM644.27,256c0,-72.96 -59.31,-132.27 -132.27,-132.27c-72.96,0 -132.27,59.31 -132.27,132.27v85.33h264.54zM597.33,640c0,-46.93 -38.4,-85.33 -85.33,-85.33c-46.93,0 -85.33,38.4 -85.33,85.33c0,46.93 38.4,85.33 85.33,85.33c46.93,0 85.33,-38.4 85.33,-85.33z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 932 B |
6
demo/images/lock_open.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
|
||||||
|
<desc>lock_open icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.)</desc>
|
||||||
|
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
|
||||||
|
<path d="M853.33,426.67v426.66c0,46.93 -38.4,85.34 -85.33,85.34h-512c-46.93,0 -85.33,-38.41 -85.33,-85.34v-426.66c0,-46.93 38.4,-85.34 85.33,-85.34h388.27v-85.33c0,-72.96 -59.31,-132.27 -132.27,-132.27c-72.96,0 -132.27,59.31 -132.27,132.27h-81.06c0,-117.76 95.57,-213.33 213.33,-213.33c117.76,0 213.33,95.57 213.33,213.33v85.33h42.67c46.93,0 85.33,38.41 85.33,85.34zM768,426.67h-512v426.66h512zM426.67,640c0,-46.93 38.4,-85.33 85.33,-85.33c46.93,0 85.33,38.4 85.33,85.33c0,46.93 -38.4,85.33 -85.33,85.33c-46.93,0 -85.33,-38.4 -85.33,-85.33z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 948 B |
6
demo/images/lock_outline.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
|
||||||
|
<desc>lock_outline icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.)</desc>
|
||||||
|
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
|
||||||
|
<path d="M853.33,426.67v426.66c0,46.93 -38.4,85.34 -85.33,85.34h-512c-46.93,0 -85.33,-38.41 -85.33,-85.34v-426.66c0,-46.93 38.4,-85.34 85.33,-85.34h42.67v-85.33c0,-117.76 95.57,-213.33 213.33,-213.33c117.76,0 213.33,95.57 213.33,213.33v85.33h42.67c46.93,0 85.33,38.41 85.33,85.34zM768,426.67h-512v426.66h512zM379.73,341.33h264.54v-85.33c0,-72.96 -59.31,-132.27 -132.27,-132.27c-72.96,0 -132.27,59.31 -132.27,132.27zM426.67,640c0,-46.93 38.4,-85.33 85.33,-85.33c46.93,0 85.33,38.4 85.33,85.33c0,46.93 -38.4,85.33 -85.33,85.33c-46.93,0 -85.33,-38.4 -85.33,-85.33z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 972 B |
6
demo/images/panorama.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
|
||||||
|
<desc>panorama icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.)</desc>
|
||||||
|
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
|
||||||
|
<path d="M896,853.33h-768c-46.93,0 -85.33,-38.4 -85.33,-85.33v-512c0,-46.93 38.4,-85.33 85.33,-85.33h768c46.93,0 85.33,38.4 85.33,85.33v512c0,46.93 -38.4,85.33 -85.33,85.33zM213.33,725.33h597.34l-192,-256l-149.34,192.43l-106.66,-128.43z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 643 B |
6
demo/images/perm_media.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
|
||||||
|
<desc>perm_media icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.)</desc>
|
||||||
|
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
|
||||||
|
<path d="M1024,256v426.67c0,46.93 -38.4,85.33 -85.33,85.33h-682.67c-46.93,0 -85.33,-38.4 -85.33,-85.33l0.42,-512c0,-46.93 37.98,-85.34 84.91,-85.34h256l85.33,85.34h341.34c46.93,0 85.33,38.4 85.33,85.33zM85.33,853.33h768v85.34h-768c-46.93,0 -85.33,-38.41 -85.33,-85.34l0.43,-384h-0.43v-213.33h85.33zM896,640l-149.33,-192l-106.67,128.43l-149.33,-192.43l-192,256z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 769 B |
6
demo/images/photo.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
|
||||||
|
<desc>photo icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.)</desc>
|
||||||
|
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
|
||||||
|
<path d="M810.67,896h-597.34c-46.93,0 -85.33,-38.4 -85.33,-85.33v-597.34c0,-46.93 38.4,-85.33 85.33,-85.33h597.34c46.93,0 85.33,38.4 85.33,85.33v597.34c0,46.93 -38.4,85.33 -85.33,85.33zM213.33,768h597.34l-192,-256l-149.34,192.43l-106.66,-128.43z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 649 B |
6
demo/images/zoom_in.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
|
||||||
|
<desc>zoom_in icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.)</desc>
|
||||||
|
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
|
||||||
|
<path d="M874.24,810.67l-63.57,63.57l-213.34,-212.91v-33.7l-11.52,-11.95c-48.64,41.81 -111.79,66.99 -180.48,66.99c-153.17,0 -277.33,-124.17 -277.33,-277.34c0,-153.17 124.16,-277.33 277.33,-277.33c153.17,0 277.34,124.16 277.34,277.33c0,68.69 -25.18,131.84 -66.99,180.48l11.95,11.52h33.7zM597.33,405.33c0,-106.24 -85.76,-192 -192,-192c-106.24,0 -192,85.76 -192,192c0,106.24 85.76,192 192,192c106.24,0 192,-85.76 192,-192zM512,426.67h-85.33v85.33h-42.67v-85.33h-85.33v-42.67h85.33v-85.33h42.67v85.33h85.33z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 909 B |
6
demo/images/zoom_out.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
|
||||||
|
<desc>zoom_out icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.)</desc>
|
||||||
|
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
|
||||||
|
<path d="M874.24,810.67l-63.57,63.57l-213.34,-212.91v-33.7l-11.52,-11.95c-48.64,41.81 -111.79,66.99 -180.48,66.99c-153.17,0 -277.33,-124.17 -277.33,-277.34c0,-153.17 124.16,-277.33 277.33,-277.33c153.17,0 277.34,124.16 277.34,277.33c0,68.69 -25.18,131.84 -66.99,180.48l11.95,11.52h33.7zM597.33,405.33c0,-106.24 -85.76,-192 -192,-192c-106.24,0 -192,85.76 -192,192c0,106.24 85.76,192 192,192c106.24,0 192,-85.76 192,-192zM298.67,384h213.33v42.67h-213.33z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 859 B |
6
demo/images/zoom_out_map.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
|
||||||
|
<desc>zoom_out_map icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.)</desc>
|
||||||
|
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
|
||||||
|
<path d="M896,896h-256l98.13,-98.13l-123.3,-122.46l60.58,-60.58l122.46,123.3l98.13,-98.13zM896,128v256l-98.13,-98.13l-122.46,123.3l-60.58,-60.58l123.3,-122.46l-98.13,-98.13zM128,896v-256l98.13,98.13l122.46,-123.3l60.58,60.58l-123.3,122.46l98.13,98.13zM128,128h256l-98.13,98.13l123.3,122.46l-60.58,60.58l-122.46,-123.3l-98.13,98.13z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 742 B |
@@ -41,21 +41,23 @@ int main(int argc, char *argv[])
|
|||||||
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
QApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
|
||||||
std::shared_ptr<int> b;
|
std::shared_ptr<int> b;
|
||||||
QApplication a(argc, argv);
|
QApplication a(argc, argv);
|
||||||
a.setApplicationName("Advanced Docking System Demo");
|
a.setApplicationName("Advanced Docking System Demo");
|
||||||
a.setQuitOnLastWindowClosed(true);
|
a.setQuitOnLastWindowClosed(true);
|
||||||
|
a.setWindowIcon(QIcon(":/adsdemo/images/ads_icon2.svg"));
|
||||||
QFile StyleSheetFile(":/adsdemo/app.css");
|
|
||||||
StyleSheetFile.open(QIODevice::ReadOnly);
|
|
||||||
QTextStream StyleSheetStream(&StyleSheetFile);
|
|
||||||
a.setStyleSheet(StyleSheetStream.readAll());
|
|
||||||
StyleSheetFile.close();
|
|
||||||
|
|
||||||
qInstallMessageHandler(myMessageOutput);
|
qInstallMessageHandler(myMessageOutput);
|
||||||
qDebug() << "Message handler test";
|
qDebug() << "Message handler test";
|
||||||
|
|
||||||
CMainWindow mw;
|
CMainWindow mw;
|
||||||
mw.show();
|
mw.show();
|
||||||
|
|
||||||
|
QFile StyleSheetFile(":/adsdemo/app.css");
|
||||||
|
StyleSheetFile.open(QIODevice::ReadOnly);
|
||||||
|
QTextStream StyleSheetStream(&StyleSheetFile);
|
||||||
|
a.setStyleSheet(StyleSheetStream.readAll());
|
||||||
|
StyleSheetFile.close();
|
||||||
return a.exec();
|
return a.exec();
|
||||||
}
|
}
|
||||||
|
|||||||
379
demo/res/visual_studio_light.css
Normal file
@@ -0,0 +1,379 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* Visual Studio like light theme
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* CDockManager
|
||||||
|
*****************************************************************************/
|
||||||
|
ads--CDockManager
|
||||||
|
{
|
||||||
|
background: palette(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* CDockContainerWidget
|
||||||
|
*****************************************************************************/
|
||||||
|
ads--CDockContainerWidget {
|
||||||
|
background: palette(window);
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* CDockAreaWidget
|
||||||
|
*****************************************************************************/
|
||||||
|
ads--CDockAreaWidget {
|
||||||
|
background: palette(window);
|
||||||
|
/*border: 1px solid palette(dark);*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ads--CDockAreaTitleBar {
|
||||||
|
background: transparent;
|
||||||
|
border-bottom: 2px solid rgb(204, 204, 204);
|
||||||
|
padding-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ads--CTitleBarButton {
|
||||||
|
padding: 0px 0px;
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CTitleBarButton:hover {
|
||||||
|
background: rgba(0, 0, 0, 24);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CTitleBarButton:pressed {
|
||||||
|
background: rgba(0, 0, 0, 48);
|
||||||
|
}
|
||||||
|
|
||||||
|
QScrollArea#dockWidgetScrollArea {
|
||||||
|
padding: 0px;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tabsMenuButton::menu-indicator {
|
||||||
|
image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#dockAreaCloseButton {
|
||||||
|
qproperty-icon: url(:/ads/images/close-button.svg),
|
||||||
|
url(:/ads/images/close-button-disabled.svg) disabled;
|
||||||
|
qproperty-iconSize: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#detachGroupButton {
|
||||||
|
qproperty-icon: url(:/ads/images/detach-button.svg),
|
||||||
|
url(:/ads/images/detach-button-disabled.svg) disabled;
|
||||||
|
qproperty-iconSize: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ads--CDockAreaWidget[focused="true"] ads--CDockAreaTitleBar {
|
||||||
|
border-bottom: 2px solid palette(highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* CDockWidgetTab
|
||||||
|
*****************************************************************************/
|
||||||
|
ads--CDockWidgetTab {
|
||||||
|
background: palette(window);
|
||||||
|
border: none;
|
||||||
|
padding: 0 0px;
|
||||||
|
qproperty-iconSize: 16px 16px;/* this is optional in case you would like to change icon size*/
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockWidgetTab[activeTab="true"] {
|
||||||
|
background: rgb(204, 204, 204);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockWidgetTab QLabel {
|
||||||
|
color: palette(foreground);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockWidgetTab[activeTab="true"] QLabel {
|
||||||
|
color: palette(foreground);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#tabCloseButton {
|
||||||
|
margin-top: 2px;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
padding: 0px -2px;
|
||||||
|
qproperty-icon: url(:/ads/images/close-button.svg),
|
||||||
|
url(:/ads/images/close-button-disabled.svg) disabled;
|
||||||
|
qproperty-iconSize: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tabCloseButton:hover {
|
||||||
|
/*border: 1px solid rgba(0, 0, 0, 32);*/
|
||||||
|
background: rgba(0, 0, 0, 24);
|
||||||
|
}
|
||||||
|
|
||||||
|
#tabCloseButton:pressed {
|
||||||
|
background: rgba(0, 0, 0, 48);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Focus related styling */
|
||||||
|
ads--CDockWidgetTab[focused="true"] {
|
||||||
|
background: palette(highlight);
|
||||||
|
border-color: palette(highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockWidgetTab[focused="true"] > #tabCloseButton {
|
||||||
|
qproperty-icon: url(:/ads/images/close-button-focused.svg)
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockWidgetTab[focused="true"]>#tabCloseButton:hover {
|
||||||
|
background: rgba(255, 255, 255, 48);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockWidgetTab[focused="true"]>#tabCloseButton:pressed {
|
||||||
|
background: rgba(255, 255, 255, 92);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockWidgetTab[focused="true"] QLabel {
|
||||||
|
color: palette(light);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* CDockWidget
|
||||||
|
*****************************************************************************/
|
||||||
|
ads--CDockWidget {
|
||||||
|
background: palette(light);
|
||||||
|
border: 1px solid rgb(204, 204, 204);
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* Styling of auto hide functionality
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* CAutoHideTab
|
||||||
|
*****************************************************************************/
|
||||||
|
ads--CAutoHideTab {
|
||||||
|
qproperty-iconSize: 16px 16px;/* this is optional in case you would like to change icon size*/
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
padding-left: 2px;
|
||||||
|
padding-right: 0px;
|
||||||
|
text-align: center;
|
||||||
|
min-height: 20px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ads--CAutoHideTab:hover
|
||||||
|
{
|
||||||
|
color: palette(highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="0"],
|
||||||
|
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="2"] {
|
||||||
|
border-top: 6px solid rgba(0, 0, 0, 48);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="1"],
|
||||||
|
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="3"] {
|
||||||
|
border-bottom: 6px solid rgba(0, 0, 0, 48);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="0"],
|
||||||
|
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="2"],
|
||||||
|
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="0"][activeTab="true"],
|
||||||
|
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="2"][activeTab="true"] {
|
||||||
|
border-top: 6px solid palette(highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="1"],
|
||||||
|
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="3"],
|
||||||
|
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="1"][activeTab="true"],
|
||||||
|
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="3"][activeTab="true"] {
|
||||||
|
border-bottom: 6px solid palette(highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto hide tabs with icon only
|
||||||
|
*/
|
||||||
|
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="0"] {
|
||||||
|
border-top: 6px solid rgba(0, 0, 0, 48);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="1"] {
|
||||||
|
border-left: 6px solid rgba(0, 0, 0, 48);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="2"] {
|
||||||
|
border-right: 6px solid rgba(0, 0, 0, 48);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="3"] {
|
||||||
|
border-bottom: 6px solid rgba(0, 0, 0, 48);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto hide tabs with icon only hover
|
||||||
|
*/
|
||||||
|
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="0"],
|
||||||
|
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="0"][activeTab="true"] {
|
||||||
|
border-top: 6px solid palette(highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="1"],
|
||||||
|
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="1"][activeTab="true"] {
|
||||||
|
border-left: 6px solid palette(highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="2"],
|
||||||
|
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="2"][activeTab="true"] {
|
||||||
|
border-right: 6px solid palette(highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="3"],
|
||||||
|
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="3"][activeTab="true"] {
|
||||||
|
border-bottom: 6px solid palette(highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* CAutoHideSideBar
|
||||||
|
*****************************************************************************/
|
||||||
|
ads--CAutoHideSideBar{
|
||||||
|
background: palette(window);
|
||||||
|
border: none;
|
||||||
|
qproperty-spacing: 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sideTabsContainerWidget {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ads--CAutoHideSideBar[sideBarLocation="0"] {
|
||||||
|
border-bottom: 1px solid palette(dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideSideBar[sideBarLocation="1"] {
|
||||||
|
border-right: 1px solid palette(dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideSideBar[sideBarLocation="2"] {
|
||||||
|
border-left: 1px solid palette(dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideSideBar[sideBarLocation="3"] {
|
||||||
|
border-top: 1px solid palette(dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* CAutoHideDockContainer
|
||||||
|
*****************************************************************************/
|
||||||
|
ads--CAutoHideDockContainer {
|
||||||
|
background: palette(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ads--CAutoHideDockContainer ads--CDockAreaTitleBar {
|
||||||
|
background: palette(highlight);
|
||||||
|
padding: 0px;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is required because the ads--CDockAreaWidget[focused="true"] will
|
||||||
|
* overwrite the ads--CAutoHideDockContainer ads--CDockAreaTitleBar rule
|
||||||
|
*/
|
||||||
|
ads--CAutoHideDockContainer ads--CDockAreaWidget[focused="true"] ads--CDockAreaTitleBar {
|
||||||
|
background: palette(highlight);
|
||||||
|
padding: 0px;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#autoHideTitleLabel {
|
||||||
|
padding-left: 4px;
|
||||||
|
color: palette(light);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* CAutoHideDockContainer titlebar buttons
|
||||||
|
*****************************************************************************/
|
||||||
|
#dockAreaAutoHideButton {
|
||||||
|
qproperty-icon: url(:/ads/images/vs-pin-button.svg);
|
||||||
|
qproperty-iconSize: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideDockContainer #dockAreaAutoHideButton {
|
||||||
|
qproperty-icon: url(:/ads/images/vs-pin-button-pinned-focused.svg);
|
||||||
|
qproperty-iconSize: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ads--CAutoHideDockContainer #dockAreaCloseButton{
|
||||||
|
qproperty-icon: url(:/ads/images/close-button-focused.svg)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ads--CAutoHideDockContainer ads--CTitleBarButton:hover {
|
||||||
|
background: rgba(255, 255, 255, 48);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideDockContainer ads--CTitleBarButton:pressed {
|
||||||
|
background: rgba(255, 255, 255, 96);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* CAutoHideDockContainer Titlebar and Buttons
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* CResizeHandle
|
||||||
|
*****************************************************************************/
|
||||||
|
ads--CResizeHandle {
|
||||||
|
background: palette(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ads--CAutoHideDockContainer[sideBarLocation="0"] ads--CResizeHandle {
|
||||||
|
border-top: 1px solid palette(dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideDockContainer[sideBarLocation="1"] ads--CResizeHandle {
|
||||||
|
border-left: 1px solid palette(dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideDockContainer[sideBarLocation="2"] ads--CResizeHandle {
|
||||||
|
border-right: 1px solid palette(dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CAutoHideDockContainer[sideBarLocation="3"] ads--CResizeHandle {
|
||||||
|
border-top: 1px solid palette(dark);
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from PyQt5 import uic
|
from PyQt5 import uic
|
||||||
from PyQtAds import QtAds
|
import PyQtAds as QtAds
|
||||||
|
|
||||||
UI_FILE = os.path.join(os.path.dirname(__file__), 'StatusDialog.ui')
|
UI_FILE = os.path.join(os.path.dirname(__file__), 'StatusDialog.ui')
|
||||||
StatusDialogUI, StatusDialogBase = uic.loadUiType(UI_FILE)
|
StatusDialogUI, StatusDialogBase = uic.loadUiType(UI_FILE)
|
||||||
|
|||||||
BIN
doc/AutoHide_Animation.gif
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
doc/AutoHide_Change_Sidebar.gif
Normal file
|
After Width: | Height: | Size: 312 KiB |
BIN
doc/AutoHide_Context_Menu.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
doc/AutoHide_Drag_DockArea.gif
Normal file
|
After Width: | Height: | Size: 330 KiB |
BIN
doc/AutoHide_Drag_to_Float_or_Dock.gif
Normal file
|
After Width: | Height: | Size: 642 KiB |
BIN
doc/AutoHide_Drag_to_Sidebar.gif
Normal file
|
After Width: | Height: | Size: 559 KiB |
BIN
doc/AutoHide_Movie.gif
Normal file
|
After Width: | Height: | Size: 2.3 MiB |
BIN
doc/AutoHide_PinTo.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
doc/AutoHide_Sort_Tabs.gif
Normal file
|
After Width: | Height: | Size: 299 KiB |
BIN
doc/AutoHide_Tab_Insert_Order.gif
Normal file
|
After Width: | Height: | Size: 303 KiB |
BIN
doc/DockArea_Tab_Insertion_Order.gif
Normal file
|
After Width: | Height: | Size: 376 KiB |
BIN
doc/Feature_ImageViewer.png
Normal file
|
After Width: | Height: | Size: 387 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 8.0 KiB |
117
doc/ads_logo.svg
@@ -1,88 +1,33 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<svg
|
<svg width="1032" height="151.81" version="1.1" viewBox="0 0 1032 151.81" xmlns="http://www.w3.org/2000/svg">
|
||||||
version="1.1"
|
<desc>electric_iron icon - Licensed under Iconfu Standard License v1.0 (https://www.iconfu.com/iconfu_standard_license) - Incors GmbH</desc>
|
||||||
viewBox="0 0 6907.3028 1023.99"
|
<text x="1251.1022" y="1305.4956" fill="#000000" font-family="sans-serif" font-size="40px" style="line-height:1.25" xml:space="preserve"><tspan x="1251.1022" y="1305.4956"/></text>
|
||||||
id="svg26"
|
<g transform="scale(.14825)" stroke-width="6.7454">
|
||||||
sodipodi:docname="ads_logo.svg"
|
<g fill="#8f918f" aria-label="Qt Advanced Docking">
|
||||||
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
<path d="m1416.3 726.04q-93.219 0-148.72-61.942-55.196-61.942-55.196-160.99 0-105.18 56.729-168.35 57.035-63.475 155.47-63.475 88.926 0 143.82 61.022 55.196 60.715 55.196 159.45 0 109.16-56.422 171.72-17.479 19.625-38.944 32.811l106.71 81.26h-51.209l-83.1-66.848q-37.41 15.332-84.327 15.332zm3.0664-427.15q-76.66 0-126.34 55.502-49.369 55.502-49.369 145.35 0 90.766 46.916 144.74 46.916 53.662 125.11 53.662 81.567 0 129.1-53.049 47.53-53.356 47.53-148.41 0-93.219-46.61-145.35-46.303-52.436-126.34-52.436z"/>
|
||||||
width="6907.3027"
|
<path d="m1826.9 714.08q-22.078 10.426-41.397 10.426-69.608 0-69.608-83.407v-210.97h-56.422v-25.758h56.422v-81.567q6.7461-2.4531 14.106-4.9063 7.3594-2.1465 14.106-4.5996v91.073h82.793v25.758h-82.793v207.29q0 32.504 10.119 47.223 10.426 14.412 34.957 14.412 17.479 0 37.717-11.346z"/>
|
||||||
height="1023.99"
|
<path d="m2353.7 718.37-50.289-136.76h-190.73l-50.289 136.76h-33.424l165.89-439.72h28.824l164.05 439.72zm-134.92-367.97q-3.373-9.1993-5.5195-18.092-2.1465-7.6661-4.5997-15.332h-1.2265q-5.2129 20.238-10.119 32.811l-73.901 203.92h169.57z"/>
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
<path d="m2679 718.37v-57.035h-1.2266q-15.332 29.744-45.383 47.223-30.051 17.479-67.768 17.479-57.955 0-94.752-42.317-36.49-42.317-36.49-116.83 0-76.047 39.864-122.96 40.17-47.223 103.95-47.223 70.528 0 100.58 57.955h1.2266v-201.16h28.211v464.87zm0-191.04q0-43.85-27.904-74.207-27.598-30.664-74.514-30.664-49.369 0-81.567 38.024-32.198 37.717-32.198 103.95 0 65.008 28.824 100.58 29.131 35.264 74.821 35.264 53.662 0 83.1-33.117 29.438-33.424 29.438-81.26z"/>
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
<path d="m2910.8 718.37h-25.758l-121.43-314h31.584l93.526 249.91q6.7462 18.092 9.5059 32.811h1.2266q3.9864-19.318 8.8926-31.584l96.592-251.14h30.664z"/>
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
<path d="m3280 718.37v-62.862h-1.2265q-15.026 32.197-43.85 51.516-28.518 19.012-63.475 19.012-44.77 0-70.834-25.145t-26.065-63.475q0-82.18 108.86-99.352l96.592-14.412q0-101.19-76.047-101.19-51.822 0-100.89 41.703v-34.037q17.479-13.799 47.223-23.611 30.051-9.8126 56.422-9.8126 48.449 0 74.821 30.051 26.678 30.051 26.678 87.393v204.22zm-86.473-156.39q-49.369 7.0528-69.301 22.998-19.932 15.639-19.932 51.209 0 27.904 18.398 45.996 18.705 18.092 51.822 18.092 45.383 0 75.434-33.424 30.051-33.731 30.051-86.78v-30.664z"/>
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
<path d="m3616.1 718.37v-182.76q0-113.15-81.567-113.15-45.383 0-74.514 33.424-29.131 33.117-29.131 82.18v180.31h-28.211v-314h28.211v57.035h1.2266q34.344-64.701 107.32-64.701 50.903 0 77.887 34.037 26.984 33.731 26.984 96.592v191.04z"/>
|
||||||
<defs
|
<path d="m3942.1 704.57q-34.957 21.465-83.407 21.465-64.088 0-103.34-43.85-39.25-44.156-39.25-115.3 0-74.821 44.156-122.35 44.156-47.836 113.46-47.836 35.877 0 69.608 14.719v31.891q-33.731-20.852-73.901-20.852-55.196 0-89.54 39.863-34.344 39.557-34.344 102.73 0 61.022 31.278 98.125 31.584 37.104 83.1 37.104 47.223 0 82.18-25.145z"/>
|
||||||
id="defs30" />
|
<path d="m4024.3 562.6q0 64.701 29.744 101.19 30.051 36.49 82.18 36.49 52.742 0 103.03-38.944v30.051q-48.756 34.651-108.86 34.651-60.715 0-98.126-43.543-37.41-43.543-37.41-122.96 0-68.688 38.944-115.6 39.25-47.223 101.81-47.223 58.569 0 89.846 41.09t31.278 112.23v12.572zm203-25.758q-1.8399-54.276-26.065-84.327-24.225-30.051-66.848-30.051-44.156 0-73.287 29.744-28.824 29.438-35.57 84.633z"/>
|
||||||
<sodipodi:namedview
|
<path d="m4557.5 718.37v-57.035h-1.2266q-15.332 29.744-45.383 47.223-30.051 17.479-67.768 17.479-57.955 0-94.752-42.317-36.49-42.317-36.49-116.83 0-76.047 39.863-122.96 40.17-47.223 103.95-47.223 70.528 0 100.58 57.955h1.2266v-201.16h28.211v464.87zm0-191.04q0-43.85-27.904-74.207-27.598-30.664-74.514-30.664-49.369 0-81.567 38.024-32.197 37.717-32.197 103.95 0 65.008 28.824 100.58 29.131 35.264 74.821 35.264 53.662 0 83.1-33.117 29.438-33.424 29.438-81.26z"/>
|
||||||
id="namedview28"
|
<path d="m4864.5 718.37v-439.72h110.08q109.47 0 166.51 54.582 57.035 54.582 57.035 159.15 0 100.58-61.328 163.44-61.022 62.555-168.65 62.555zm30.358-411.82v384.22h68.994q97.819 0 150.25-50.596 52.436-50.903 52.436-146.57 0-187.05-196.56-187.05z"/>
|
||||||
pagecolor="#ffffff"
|
<path d="m5407.5 726.04q-68.688 0-108.86-45.076-39.863-45.383-39.863-117.75 0-78.194 41.703-122.35 42.01-44.156 110.39-44.156 67.155 0 106.1 43.85 38.944 43.85 38.944 121.43 0 73.287-39.863 118.67-39.557 45.383-108.55 45.383zm2.1465-303.58q-55.502 0-88.62 37.41-32.811 37.41-32.811 103.95 0 61.635 32.197 99.045 32.197 37.41 88.006 37.41 56.729 0 87.393-36.797t30.664-102.11q0-67.155-30.664-103.03-30.358-35.877-86.166-35.877z"/>
|
||||||
bordercolor="#666666"
|
<path d="m5837.1 704.57q-34.957 21.465-83.407 21.465-64.088 0-103.34-43.85-39.25-44.156-39.25-115.3 0-74.821 44.156-122.35 44.156-47.836 113.46-47.836 35.877 0 69.608 14.719v31.891q-33.731-20.852-73.901-20.852-55.196 0-89.54 39.863-34.344 39.557-34.344 102.73 0 61.022 31.278 98.125 31.584 37.104 83.1 37.104 47.223 0 82.18-25.145z"/>
|
||||||
borderopacity="1.0"
|
<path d="m6092.2 718.37-150.25-155.16h-1.2266v155.16h-28.211v-464.87h28.211v299.59h1.2266l142.59-148.72h36.49l-149.03 152.09 160.99 161.91z"/>
|
||||||
inkscape:pageshadow="2"
|
<path d="m6205.1 325.26q-9.1992 0-16.252-6.7461-7.0528-6.7461-7.0528-17.172 0-10.119 7.0528-16.252 7.3594-6.4395 16.252-6.4395 9.506 0 16.559 6.1328 7.3594 6.1328 7.3594 16.559 0 9.8126-7.0527 16.865-7.0528 7.0528-16.865 7.0528zm-13.799 393.12v-314h28.211v314z"/>
|
||||||
inkscape:pageopacity="0.0"
|
<path d="m6533.5 718.37v-182.76q0-113.15-81.567-113.15-45.383 0-74.514 33.424-29.131 33.117-29.131 82.18v180.31h-28.211v-314h28.211v57.035h1.2265q34.344-64.701 107.32-64.701 50.902 0 77.887 34.037 26.984 33.731 26.984 96.592v191.04z"/>
|
||||||
inkscape:pagecheckerboard="0"
|
<path d="m6907.3 695.07q0 88.62-38.637 129.71-38.637 41.09-120.2 41.09-45.383 0-93.526-23.918v-29.438q49.676 27.598 94.139 27.598 130.02 0 130.02-137.38v-40.783h-1.2266q-37.104 64.088-113.15 64.088-57.955 0-94.752-42.01-36.49-42.01-36.49-117.14t39.557-122.66q39.557-47.53 104.26-47.53 69.301 0 100.58 57.342h1.2266v-49.676h28.211zm-28.211-170.19q0-41.703-28.211-72.061-27.904-30.358-72.981-30.358-51.822 0-83.407 38.944-31.584 38.944-31.584 103.03 0 64.395 28.824 100.27 29.131 35.57 76.66 35.57 50.596 0 80.647-32.811 30.051-32.811 30.051-80.34z"/>
|
||||||
showgrid="false"
|
|
||||||
showguides="true"
|
|
||||||
inkscape:guide-bbox="true"
|
|
||||||
inkscape:zoom="0.12999302"
|
|
||||||
inkscape:cx="3277.099"
|
|
||||||
inkscape:cy="-257.70614"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="1017"
|
|
||||||
inkscape:window-x="1912"
|
|
||||||
inkscape:window-y="-8"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg26"
|
|
||||||
fit-margin-top="0"
|
|
||||||
fit-margin-left="0"
|
|
||||||
fit-margin-right="0"
|
|
||||||
fit-margin-bottom="0" />
|
|
||||||
<desc
|
|
||||||
id="desc2">electric_iron icon - Licensed under Iconfu Standard License v1.0 (https://www.iconfu.com/iconfu_standard_license) - Incors GmbH</desc>
|
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none"
|
|
||||||
x="1251.1022"
|
|
||||||
y="1305.4956"
|
|
||||||
id="text9788"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan9786"
|
|
||||||
x="1251.1022"
|
|
||||||
y="1305.4956" /></text>
|
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:628.003px;line-height:1.25;font-family:sans-serif;fill:#8f918f;fill-opacity:1;stroke:none;stroke-width:1"
|
|
||||||
x="1178.9221"
|
|
||||||
y="718.37329"
|
|
||||||
id="text15608"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan15606"
|
|
||||||
x="1178.9221"
|
|
||||||
y="718.37329"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:628.003px;font-family:'Segoe UI';-inkscape-font-specification:'Segoe UI Light';fill:#8f918f;fill-opacity:1;stroke-width:1">Qt Advanced Docking</tspan></text>
|
|
||||||
<g
|
|
||||||
id="g94691"
|
|
||||||
transform="translate(581.23034,1750.5233)">
|
|
||||||
<path
|
|
||||||
d="m 191.63966,-726.53328 h -521.75 c -138.69,0 -251.12,-112.43001 -251.12,-251.12 v -521.75002 c 0,-138.69 112.43,-251.12 251.12,-251.12 h 521.75 c 138.69,0 251.12,112.43 251.12,251.12 v 521.75002 c 0,138.68999 -112.43,251.12 -251.12,251.12 z"
|
|
||||||
fill="#707070"
|
|
||||||
id="path4-5"
|
|
||||||
style="mix-blend-mode:normal;fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero" />
|
|
||||||
<path
|
|
||||||
id="path927"
|
|
||||||
style="mix-blend-mode:normal;fill:#009ddd;fill-opacity:1;fill-rule:nonzero"
|
|
||||||
d="m -175.90039,-1515.8633 v 256 h 469.3301 v -256 z" />
|
|
||||||
<path
|
|
||||||
id="path16513"
|
|
||||||
style="mix-blend-mode:normal;fill:#ff9833;fill-opacity:1;fill-rule:nonzero"
|
|
||||||
d="m 80.099609,-1217.1934 v 256.00004 H 293.42969 v -256.00004 z" />
|
|
||||||
<path
|
|
||||||
id="path16513-5"
|
|
||||||
style="mix-blend-mode:normal;fill:#accb01;fill-opacity:1;fill-rule:nonzero"
|
|
||||||
d="m -175.90039,-1217.1933 v 256 H 37.42969 v -256 z" />
|
|
||||||
<path
|
|
||||||
id="path24788"
|
|
||||||
style="mix-blend-mode:normal;fill:#0083c3;fill-opacity:1;fill-rule:nonzero"
|
|
||||||
d="m -431.90039,-1515.8633 v 554.66994 h 213.33008 v -554.66994 z" />
|
|
||||||
</g>
|
</g>
|
||||||
|
<g transform="translate(581.23 1750.5)">
|
||||||
|
<path d="m191.64-726.53h-521.75c-138.69 0-251.12-112.43-251.12-251.12v-521.75c0-138.69 112.43-251.12 251.12-251.12h521.75c138.69 0 251.12 112.43 251.12 251.12v521.75c0 138.69-112.43 251.12-251.12 251.12z" fill="#e0e0e0" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m-175.9-1515.9v256h469.33v-256z" fill="#009ddd" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m80.1-1217.2v256h213.33v-256z" fill="#ff9833" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m-175.9-1217.2v256h213.33v-256z" fill="#accb01" style="mix-blend-mode:normal"/>
|
||||||
|
<path d="m-431.9-1515.9v554.67h213.33v-554.67z" fill="#0083c3" style="mix-blend-mode:normal"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 7.0 KiB |
BIN
doc/ads_logo_ukraine.jpg
Normal file
|
After Width: | Height: | Size: 171 KiB |
@@ -12,10 +12,10 @@ styles as much as possible.
|
|||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
### Docking everywhere - no central widget
|
### Docking everywhere - with or without a central widget
|
||||||
|
|
||||||
There is no central widget like in the Qt docking system. You can dock on every
|
The Advanced Docking System works with or without a central widget.
|
||||||
border of the main window or you can dock into each dock area - so you are
|
You can dock on every border of the main window or you can dock into each dock area - so you are
|
||||||
free to dock almost everywhere.
|
free to dock almost everywhere.
|
||||||
|
|
||||||

|

|
||||||
@@ -65,7 +65,7 @@ If this flag is cleared, the widget resizing is deferred until the mouse button
|
|||||||
|
|
||||||
### Opaque and non-opaque undocking
|
### Opaque and non-opaque undocking
|
||||||
|
|
||||||
By default, opaque undocking is active. That means, as soon as you drag a dock widget or a dock area with a number of dock widgets it will be undocked and moved into a floating widget and then the floating widget will be dragged around. That means undocking will take place immediatelly. You can compare this with opaque splitter resizing. If the flag `OpaqueUndocking` is cleared, then non-opaque undocking is active. In this mode, undocking is more like a standard drag and drop operation. That means, the dragged dock widget or dock area is not undocked immediatelly. Instead, a drag preview widget is created and dragged around to indicate the future position of the dock widget or dock area. The actual dock operation is only executed when the mouse button is released. That makes it possible, to cancel an active drag operation with the escape key.
|
By default, opaque undocking is active. That means, as soon as you drag a dock widget or a dock area with a number of dock widgets it will be undocked and moved into a floating widget and then the floating widget will be dragged around. That means undocking will take place immediately. You can compare this with opaque splitter resizing. If the flag `OpaqueUndocking` is cleared, then non-opaque undocking is active. In this mode, undocking is more like a standard drag and drop operation. That means, the dragged dock widget or dock area is not undocked immediately. Instead, a drag preview widget is created and dragged around to indicate the future position of the dock widget or dock area. The actual dock operation is only executed when the mouse button is released. That makes it possible, to cancel an active drag operation with the escape key.
|
||||||
|
|
||||||
The drag preview widget can be configured by a number of global dock manager flags:
|
The drag preview widget can be configured by a number of global dock manager flags:
|
||||||
|
|
||||||
|
|||||||
BIN
doc/autohide-feature-demo.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
doc/cfg_flag_AutoHideCloseButtonCollapsesDock_false.gif
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
doc/cfg_flag_AutoHideCloseButtonCollapsesDock_true.gif
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
doc/cfg_flag_AutoHideHasCloseButton.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
doc/cfg_flag_AutoHideHasMinimizeButton.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
doc/cfg_flag_AutoHideOpenOnDragHover.gif
Normal file
|
After Width: | Height: | Size: 269 KiB |
BIN
doc/cfg_flag_AutoHideSideBarsIconOnly_false.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
doc/cfg_flag_AutoHideSideBarsIconOnly_true.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
doc/cfg_flag_DisableTabTextEliding_false.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
doc/cfg_flag_DisableTabTextEliding_true.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
doc/cfg_flag_DockAreaHasAutoHideButton.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
doc/cfg_flag_ShowTabTextOnlyForActiveTab_true.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
doc/cfg_flag_TabsAtBottom.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
doc/cfg_flag_TabsAtBottom_true.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
doc/showcase_adtf.png
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
doc/showcase_dream3d_nx.png
Normal file
|
After Width: | Height: | Size: 382 KiB |
BIN
doc/showcase_labplot.png
Normal file
|
After Width: | Height: | Size: 256 KiB |
BIN
doc/showcase_pysoworks.png
Normal file
|
After Width: | Height: | Size: 224 KiB |
BIN
doc/showcase_resinsight.png
Normal file
|
After Width: | Height: | Size: 461 KiB |
BIN
doc/showcase_robox_ide.png
Normal file
|
After Width: | Height: | Size: 363 KiB |
BIN
doc/showcase_scrutiny-dark.png
Normal file
|
After Width: | Height: | Size: 197 KiB |
BIN
doc/taiwan_ukraine.jpg
Normal file
|
After Width: | Height: | Size: 140 KiB |
@@ -1,48 +1,81 @@
|
|||||||
# User Guide
|
# User Guide
|
||||||
|
|
||||||
- [Configuration Flags](#configuration-flags)
|
- [User Guide](#user-guide)
|
||||||
- [Setting Configuration Flags](#setting-configuration-flags)
|
- [Configuration Flags](#configuration-flags)
|
||||||
- [`ActiveTabHasCloseButton`](#activetabhasclosebutton)
|
- [Setting Configuration Flags](#setting-configuration-flags)
|
||||||
- [`DockAreaHasCloseButton`](#dockareahasclosebutton)
|
- [`ActiveTabHasCloseButton`](#activetabhasclosebutton)
|
||||||
- [`DockAreaCloseButtonClosesTab`](#dockareaclosebuttonclosestab)
|
- [`DockAreaHasCloseButton`](#dockareahasclosebutton)
|
||||||
- [`OpaqueSplitterResize`](#opaquesplitterresize)
|
- [`DockAreaCloseButtonClosesTab`](#dockareaclosebuttonclosestab)
|
||||||
- [`XmlAutoFormattingEnabled`](#xmlautoformattingenabled)
|
- [`OpaqueSplitterResize`](#opaquesplitterresize)
|
||||||
- [`XmlCompressionEnabled`](#xmlcompressionenabled)
|
- [`XmlAutoFormattingEnabled`](#xmlautoformattingenabled)
|
||||||
- [`TabCloseButtonIsToolButton`](#tabclosebuttonistoolbutton)
|
- [`XmlCompressionEnabled`](#xmlcompressionenabled)
|
||||||
- [`AllTabsHaveCloseButton`](#alltabshaveclosebutton)
|
- [`TabCloseButtonIsToolButton`](#tabclosebuttonistoolbutton)
|
||||||
- [`RetainTabSizeWhenCloseButtonHidden`](#retaintabsizewhenclosebuttonhidden)
|
- [`AllTabsHaveCloseButton`](#alltabshaveclosebutton)
|
||||||
- [`OpaqueUndocking`](#opaqueundocking)
|
- [`RetainTabSizeWhenCloseButtonHidden`](#retaintabsizewhenclosebuttonhidden)
|
||||||
- [`DragPreviewIsDynamic`](#dragpreviewisdynamic)
|
- [`DragPreviewIsDynamic`](#dragpreviewisdynamic)
|
||||||
- [`DragPreviewShowsContentPixmap`](#dragpreviewshowscontentpixmap)
|
- [`DragPreviewShowsContentPixmap`](#dragpreviewshowscontentpixmap)
|
||||||
- [`DragPreviewHasWindowFrame`](#dragpreviewhaswindowframe)
|
- [`DragPreviewHasWindowFrame`](#dragpreviewhaswindowframe)
|
||||||
- [`AlwaysShowTabs`](#alwaysshowtabs)
|
- [`AlwaysShowTabs`](#alwaysshowtabs)
|
||||||
- [`DockAreaHasUndockButton`](#dockareahasundockbutton)
|
- [`DockAreaHasUndockButton`](#dockareahasundockbutton)
|
||||||
- [`DockAreaHasTabsMenuButton`](#dockareahastabsmenubutton)
|
- [`DockAreaHasTabsMenuButton`](#dockareahastabsmenubutton)
|
||||||
- [`DockAreaHideDisabledButtons`](#dockareahidedisabledbuttons)
|
- [`DockAreaHideDisabledButtons`](#dockareahidedisabledbuttons)
|
||||||
- [`DockAreaDynamicTabsMenuButtonVisibility`](#dockareadynamictabsmenubuttonvisibility)
|
- [`DockAreaDynamicTabsMenuButtonVisibility`](#dockareadynamictabsmenubuttonvisibility)
|
||||||
- [`FloatingContainerHasWidgetTitle`](#floatingcontainerhaswidgettitle)
|
- [`FloatingContainerHasWidgetTitle`](#floatingcontainerhaswidgettitle)
|
||||||
- [`FloatingContainerHasWidgetIcon`](#floatingcontainerhaswidgeticon)
|
- [`FloatingContainerHasWidgetIcon`](#floatingcontainerhaswidgeticon)
|
||||||
- [`HideSingleCentralWidgetTitleBar`](#hidesinglecentralwidgettitlebar)
|
- [`HideSingleCentralWidgetTitleBar`](#hidesinglecentralwidgettitlebar)
|
||||||
- [`FocusHighlighting`](#focushighlighting)
|
- [`FocusHighlighting`](#focushighlighting)
|
||||||
- [`EqualSplitOnInsertion`](#equalsplitoninsertion)
|
- [`EqualSplitOnInsertion`](#equalsplitoninsertion)
|
||||||
- [`FloatingContainerForceNativeTitleBar` (Linux only)](#floatingcontainerforcenativetitlebar-linux-only)
|
- [`FloatingContainerForceNativeTitleBar` (Linux only)](#floatingcontainerforcenativetitlebar-linux-only)
|
||||||
- [`FloatingContainerForceQWidgetTitleBar` (Linux only)](#floatingcontainerforceqwidgettitlebar-linux-only)
|
- [`FloatingContainerForceQWidgetTitleBar` (Linux only)](#floatingcontainerforceqwidgettitlebar-linux-only)
|
||||||
- [`MiddleMouseButtonClosesTab`](#middlemousebuttonclosestab)
|
- [`MiddleMouseButtonClosesTab`](#middlemousebuttonclosestab)
|
||||||
- [DockWidget Feature Flags](#dockwidget-feature-flags)
|
- [`DisableTabTextEliding`](#disabletabtexteliding)
|
||||||
- [`DockWidgetClosable`](#dockwidgetclosable)
|
- [`ShowTabTextOnlyForActiveTab`](#showtabtextonlyforactivetab)
|
||||||
- [`DockWidgetMovable`](#dockwidgetmovable)
|
- [`DoubleClickUndocksWidget`](#doubleclickundockswidget)
|
||||||
- [`DockWidgetFloatable`](#dockwidgetfloatable)
|
- [`TabsAtBottom`](#tabsatbottom)
|
||||||
- [`DockWidgetDeleteOnClose`](#dockwidgetdeleteonclose)
|
- [Auto Hide Dock Widgets](#auto-hide-dock-widgets)
|
||||||
- [`CustomCloseHandling`](#customclosehandling)
|
- [Pinning Auto-Hide Widgets to a certain border](#pinning-auto-hide-widgets-to-a-certain-border)
|
||||||
- [`DockWidgetFocusable`](#dockwidgetfocusable)
|
- [Show / Hide Auto-Hide Widgets via Mouse Over](#show--hide-auto-hide-widgets-via-mouse-over)
|
||||||
- [`DockWidgetForceCloseWithArea`](#dockwidgetforceclosewitharea)
|
- [Drag \& Drop to Auto-Hide](#drag--drop-to-auto-hide)
|
||||||
- [`NoTab`](#notab)
|
- [Auto-Hide Tab Insertion Order](#auto-hide-tab-insertion-order)
|
||||||
- [`DeleteContentOnClose`](#deletecontentonclose)
|
- [Auto-Hide Tab Sorting](#auto-hide-tab-sorting)
|
||||||
- [Central Widget](#central-widget)
|
- [Auto-Hide Drag to Float / Dock](#auto-hide-drag-to-float--dock)
|
||||||
- [Empty Dock Area](#empty-dock-area)
|
- [Auto-Hide Context Menu](#auto-hide-context-menu)
|
||||||
- [Custom Close Handling](#custom-close-handling)
|
- [Adding Auto Hide Widgets](#adding-auto-hide-widgets)
|
||||||
- [Styling](#styling)
|
- [Auto-Hide Configuration Flags](#auto-hide-configuration-flags)
|
||||||
- [Disabling the Internal Style Sheet](#disabling-the-internal-style-sheet)
|
- [Setting Auto-Hide Flags](#setting-auto-hide-flags)
|
||||||
|
- [`AutoHideFeatureEnabled`](#autohidefeatureenabled)
|
||||||
|
- [`DockAreaHasAutoHideButton`](#dockareahasautohidebutton)
|
||||||
|
- [`AutoHideButtonTogglesArea`](#autohidebuttontogglesarea)
|
||||||
|
- [`AutoHideButtonCheckable`](#autohidebuttoncheckable)
|
||||||
|
- [`AutoHideSideBarsIconOnly`](#autohidesidebarsicononly)
|
||||||
|
- [`AutoHideShowOnMouseOver`](#autohideshowonmouseover)
|
||||||
|
- [`AutoHideCloseButtonCollapsesDock`](#autohideclosebuttoncollapsesdock)
|
||||||
|
- [`AutoHideHasCloseButton`](#autohidehasclosebutton)
|
||||||
|
- [`AutoHideHasMinimizeButton`](#autohidehasminimizebutton)
|
||||||
|
- [`AutoHideOpenOnDragHover`](#autohideopenondraghover)
|
||||||
|
- [`AutoHideCloseOnOutsideMouseClick`](#autohidecloseonoutsidemouseclick)
|
||||||
|
- [DockWidget Feature Flags](#dockwidget-feature-flags)
|
||||||
|
- [`DockWidgetClosable`](#dockwidgetclosable)
|
||||||
|
- [`DockWidgetMovable`](#dockwidgetmovable)
|
||||||
|
- [`DockWidgetFloatable`](#dockwidgetfloatable)
|
||||||
|
- [`DockWidgetDeleteOnClose`](#dockwidgetdeleteonclose)
|
||||||
|
- [`CustomCloseHandling`](#customclosehandling)
|
||||||
|
- [`DockWidgetFocusable`](#dockwidgetfocusable)
|
||||||
|
- [`DockWidgetForceCloseWithArea`](#dockwidgetforceclosewitharea)
|
||||||
|
- [`NoTab`](#notab)
|
||||||
|
- [`DeleteContentOnClose`](#deletecontentonclose)
|
||||||
|
- [Central Widget](#central-widget)
|
||||||
|
- [Empty Dock Area](#empty-dock-area)
|
||||||
|
- [Custom Close Handling](#custom-close-handling)
|
||||||
|
- [Globally Lock Docking Features](#globally-lock-docking-features)
|
||||||
|
- [Dock Widget Size / Minimum Size Handling](#dock-widget-size--minimum-size-handling)
|
||||||
|
- [Styling](#styling)
|
||||||
|
- [Disabling the Internal Style Sheet](#disabling-the-internal-style-sheet)
|
||||||
|
- [Using ADS on Linux](#using-ads-on-linux)
|
||||||
|
- [Supported Distributions](#supported-distributions)
|
||||||
|
- [Requirements](#requirements)
|
||||||
|
- [Manjaro xfce 25.0.1 and Xubuntu 24.04.2 issues](#manjaro-xfce-2501-and-xubuntu-24042-issues)
|
||||||
|
- [OpenGl + ADS](#opengl--ads)
|
||||||
|
|
||||||
## Configuration Flags
|
## Configuration Flags
|
||||||
|
|
||||||
@@ -129,7 +162,7 @@ This ie enabled by default to minimize the size of the saved data.
|
|||||||
|
|
||||||
### `TabCloseButtonIsToolButton`
|
### `TabCloseButtonIsToolButton`
|
||||||
|
|
||||||
If enabled the tab close buttons will be `QToolButtons` instead of `QPushButtons` -
|
If enabled the tab close buttons will be `QToolButtons` instead of `QPushButtons` -
|
||||||
disabled by default. Normally the default configuration should be ok but if your
|
disabled by default. Normally the default configuration should be ok but if your
|
||||||
application requires `QToolButtons` instead of `QPushButtons` for styling reasons
|
application requires `QToolButtons` instead of `QPushButtons` for styling reasons
|
||||||
or for any other reasons, then you can enable this flag.
|
or for any other reasons, then you can enable this flag.
|
||||||
@@ -158,40 +191,9 @@ constant, that means, if enabled, the tabs need more space.
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
### `OpaqueUndocking`
|
|
||||||
|
|
||||||
If this flag is set, opaque undocking is active. That means, as soon as you drag a dock widget or a dock area with a number of dock widgets it will be undocked and moved into a floating widget and then the floating widget will be dragged around. That means undocking will take place immediately. You can compare this with opaque splitter resizing.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
If you would like to test opaque undocking, you should set the predefined config
|
|
||||||
flags `CDockManager::DefaultOpaqueConfig`.
|
|
||||||
|
|
||||||
```c++
|
|
||||||
CDockManager::setConfigFlags(CDockManager::DefaultOpaqueConfig);
|
|
||||||
```
|
|
||||||
|
|
||||||
If this flag is cleared (default), then non-opaque undocking is active. In this mode, undocking is more like a standard drag and drop operation. That means, the dragged dock widget or dock area is not undocked immediatelly. Instead, a drag preview widget is created and dragged around to indicate the future position of the dock widget or dock area. The actual dock operation is only executed when the mouse button is released. That makes it possible, to cancel an active drag operation with the escape key.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
The drag preview widget can be configured by a number of global dock manager flags:
|
|
||||||
|
|
||||||
- `DragPreviewIsDynamic`
|
|
||||||
- `DragPreviewShowsContentPixmap`
|
|
||||||
- `DragPreviewHasWindowFrame`
|
|
||||||
|
|
||||||
Non-opaque undocking is enabled by default. If you would like to enable it
|
|
||||||
explicitely, you can do this by setting the predefined configuration flags
|
|
||||||
`CDockManager::DefaultNonOpaqueConfig`.
|
|
||||||
|
|
||||||
```c++
|
|
||||||
CDockManager::setConfigFlags(CDockManager::DefaultNonOpaqueConfig);
|
|
||||||
```
|
|
||||||
|
|
||||||
### `DragPreviewIsDynamic`
|
### `DragPreviewIsDynamic`
|
||||||
|
|
||||||
If non-opaque undocking is enabled, this flag defines the behavior of the drag
|
If non-opaque undocking is enabled, this flag defines the behavior of the drag
|
||||||
preview window. If this flag is enabled, then it will give the user the
|
preview window. If this flag is enabled, then it will give the user the
|
||||||
impression, that the floating drag preview is dynamically adjusted to the drop
|
impression, that the floating drag preview is dynamically adjusted to the drop
|
||||||
area. In order to give the perfect impression, you should disable the flags
|
area. In order to give the perfect impression, you should disable the flags
|
||||||
@@ -207,7 +209,7 @@ CDockManager::setConfigFlag(CDockManager::DragPreviewHasWindowFrame, false);
|
|||||||
|
|
||||||
### `DragPreviewShowsContentPixmap`
|
### `DragPreviewShowsContentPixmap`
|
||||||
|
|
||||||
If non-opaque undocking is enabled, the created drag preview window shows a
|
If non-opaque undocking is enabled, the created drag preview window shows a
|
||||||
copy of the content of the dock widget / dock are that is dragged, if this
|
copy of the content of the dock widget / dock are that is dragged, if this
|
||||||
flag is enabled (default).
|
flag is enabled (default).
|
||||||
|
|
||||||
@@ -220,7 +222,7 @@ like window without any content.
|
|||||||
|
|
||||||
### `DragPreviewHasWindowFrame`
|
### `DragPreviewHasWindowFrame`
|
||||||
|
|
||||||
If non-opaque undocking is enabled, then this flag configures if the drag
|
If non-opaque undocking is enabled, then this flag configures if the drag
|
||||||
preview is frameless (default) or looks like a real window. If it is enabled,
|
preview is frameless (default) or looks like a real window. If it is enabled,
|
||||||
then the drag preview is a transparent window with a system window frame.
|
then the drag preview is a transparent window with a system window frame.
|
||||||
|
|
||||||
@@ -313,8 +315,9 @@ or to close it via the close button.
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
The Advanced Docking System is meant for applications without a static central
|
Unless a central widget explicitly has been set with setCentralWidget, the
|
||||||
widget and normally does not know anything about a central static widget.
|
Advanced Docking System is without a static central widget and it wouldn't know
|
||||||
|
about a central static widget.
|
||||||
Therefore this flag is disabled by default and a central single dock widget
|
Therefore this flag is disabled by default and a central single dock widget
|
||||||
still has a titlebar to drag it out of the main window.
|
still has a titlebar to drag it out of the main window.
|
||||||
|
|
||||||
@@ -387,7 +390,7 @@ ads--CDockAreaWidget[focused="true"] ads--CDockAreaTitleBar
|
|||||||
|
|
||||||
If you have a content widget that does not support focussing for some reason
|
If you have a content widget that does not support focussing for some reason
|
||||||
(like `QVTKOpenGLStereoWidget` from the [VTK library](https://github.com/Kitware/VTK)),
|
(like `QVTKOpenGLStereoWidget` from the [VTK library](https://github.com/Kitware/VTK)),
|
||||||
then you can manually switch the focus by reacting on mouse events. The
|
then you can manually switch the focus by reacting on mouse events. The
|
||||||
following code shows, how to install en event filter on the `QVTKOpenGLStereoWidget`
|
following code shows, how to install en event filter on the `QVTKOpenGLStereoWidget`
|
||||||
to properly switch the focus on `QEvent::MouseButtonPress`:
|
to properly switch the focus on `QEvent::MouseButtonPress`:
|
||||||
|
|
||||||
@@ -431,7 +434,7 @@ bool CMainWindow::eventFilter(QObject *watched, QEvent *event)
|
|||||||
### `EqualSplitOnInsertion`
|
### `EqualSplitOnInsertion`
|
||||||
|
|
||||||
This flag configures how the space is distributed if a new dock widget is
|
This flag configures how the space is distributed if a new dock widget is
|
||||||
inserted into an existing dock area. The flag is disabled by default. If 3
|
inserted into an existing dock area. The flag is disabled by default. If 3
|
||||||
dock widgets are inserted with the following code
|
dock widgets are inserted with the following code
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
@@ -442,7 +445,7 @@ then this is the result, if the flag is disabled:
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
If the flag is enabled, then the space is equally distributed to all widgets
|
If the flag is enabled, then the space is equally distributed to all widgets
|
||||||
in a splitter:
|
in a splitter:
|
||||||
|
|
||||||

|

|
||||||
@@ -486,6 +489,258 @@ possible in various web browsers.
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
### `DisableTabTextEliding`
|
||||||
|
|
||||||
|
Set this flag to disable eliding of tab texts in dock area tabs:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The flag is disabled by default and the text in all tabs is elided to show as
|
||||||
|
many tabs as possible even if there is not much space:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### `ShowTabTextOnlyForActiveTab`
|
||||||
|
|
||||||
|
Set this flag (default = false) to show label texts in dock area tabs only
|
||||||
|
for active tabs. Inactive tabs only show their icon:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### `DoubleClickUndocksWidget`
|
||||||
|
|
||||||
|
If the flag is set (default), a double click on a tab undocks the dock widget.
|
||||||
|
If you would like to disable undocking, just clear this flag.
|
||||||
|
|
||||||
|
### `TabsAtBottom`
|
||||||
|
|
||||||
|
If the flag is set, tabs will be shown at the bottom instead of in the title bar.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Auto Hide Dock Widgets
|
||||||
|
|
||||||
|
The Advanced Docking System supports "Auto-Hide" functionality for **all**
|
||||||
|
dock containers. The "Auto Hide" feature allows to display more information
|
||||||
|
using less screen space by hiding or showing windows pinned to one of the
|
||||||
|
four dock container borders.
|
||||||
|
|
||||||
|
Enabling this feature adds a button with a pin icon to each dock area.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
By clicking this button, the current dock widget (or the complete area - depending on the
|
||||||
|
configuration flags) will be pinned to a certain border. The border is chosen
|
||||||
|
depending on the location of the dock area. If you click the pin button while
|
||||||
|
holding down the **Ctrl** key, the whole dock area will be pinned to a certain
|
||||||
|
border.
|
||||||
|
|
||||||
|
### Pinning Auto-Hide Widgets to a certain border
|
||||||
|
|
||||||
|
If you would like to pin a dock widget or a dock area to a certain border,
|
||||||
|
then you can right-click into the dock widget tab or into the dock area title bar
|
||||||
|
to show the context menu. Then you can select the location via the **Pin to** menu:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Show / Hide Auto-Hide Widgets via Mouse Over
|
||||||
|
|
||||||
|
Normally Auto-Hide widgets are shown by clicking the Auto-Hide tab and hidden by
|
||||||
|
clicking the Auto-Hide tab again or by clicking into any other dock widget in
|
||||||
|
the same container. If the Auto-Hide config flag `AutoHideShowOnMouseOver` is set,
|
||||||
|
the Auto-Hide widget is shown, if the user hovers over the Auto-Hide tab and is
|
||||||
|
collapsed if the mouse cursor leaves the Auto-Hide widget. Showing and hiding
|
||||||
|
by mouse click still works if this feature is enabled.
|
||||||
|
|
||||||
|
### Drag & Drop to Auto-Hide
|
||||||
|
|
||||||
|
You can easily drag any dock widget or any floating widget to the
|
||||||
|
borders of a window to pin it as a auto-hide tab in one of the 4 sidebars.
|
||||||
|
If you drag a dock widget close the one of the four window borders, special
|
||||||
|
drop overlays will be shown to indicate the drop area for auto-hide widgets:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Of course, this also works with dock areas:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
If you drag a dock widget or dock area into a sidebar, then you even have
|
||||||
|
control over where tabs are inserted. Simply drag your mouse over a specific
|
||||||
|
auto-hide tab, and your dragged dock widget will be inserted before this tab.
|
||||||
|
Drag to the sidebar area behind the last tab, and the dragged widget will be
|
||||||
|
appended as last tab. In the following screen capture, the **Image Viewer 1** will
|
||||||
|
be inserted before the **Table 0** Auto-Hide tab and the **Image Viewer 2**
|
||||||
|
is appended behind the last tab:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Auto-Hide Tab Insertion Order
|
||||||
|
|
||||||
|
It is also possible to drag Auto-Hide tabs to a new auto-hide position.
|
||||||
|
That means, you can drag them to a different border or sidebar:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Auto-Hide Tab Sorting
|
||||||
|
|
||||||
|
You can drag Auto-Hide tabs to a new position in the current sidebar
|
||||||
|
to sort them:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Auto-Hide Drag to Float / Dock
|
||||||
|
|
||||||
|
But that is not all. You can also simply move Auto-Hide tabs to another
|
||||||
|
floating widget or dock them via drag and drop:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Auto-Hide Context Menu
|
||||||
|
|
||||||
|
All Auto-Hide tabs now have a context menu, that provides all the functionality
|
||||||
|
that you know from Dock widget tabs. With the **Pin To...** item from the
|
||||||
|
context menu it is very easy to move an Auto-Hide tab to a different Auto-Hide
|
||||||
|
sidebar:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Adding Auto Hide Widgets
|
||||||
|
|
||||||
|
Adding an auto hide widget is similar to adding a dock widget, simply call
|
||||||
|
`dockManager->addAutoHideDockWidget()`.
|
||||||
|
|
||||||
|
```c++
|
||||||
|
CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig);
|
||||||
|
d->DockManager = new CDockManager(this);
|
||||||
|
CDockWidget* TableDockWidget = new CDockWidget("Table 1");
|
||||||
|
DockManager->addAutoHideDockWidget(SideBarLeft, TableDockWidget);
|
||||||
|
```
|
||||||
|
|
||||||
|
See `autohide` example or the demo application to learn how it works.
|
||||||
|
|
||||||
|
## Auto-Hide Configuration Flags
|
||||||
|
|
||||||
|
### Setting Auto-Hide Flags
|
||||||
|
|
||||||
|
The Advanced Docking System has a number of global configuration flags to
|
||||||
|
configure the Auto-Hide functionality. You should set the Auto-Hide flags before
|
||||||
|
creating the dock manager instance. That means, you should set the Auto-Hide
|
||||||
|
flags after setting the configuration flags.
|
||||||
|
|
||||||
|
```c++
|
||||||
|
CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true);
|
||||||
|
CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig);
|
||||||
|
CDockManager::setAutoHideConfigFlag(CDockManager::AutoHideShowOnMouseOver, true);
|
||||||
|
...
|
||||||
|
d->DockManager = new CDockManager(this);
|
||||||
|
```
|
||||||
|
|
||||||
|
If you set the Auto-Hide flags, you can set individual flags using the
|
||||||
|
function `CDockManager::setAutoHideConfigFlag` or you can set all flags using
|
||||||
|
the function `CDockManager::setAutoHideConfigFlags`. Instead of settings all
|
||||||
|
flags individually, it is better to pick a predefined set of configuration
|
||||||
|
flags and then modify individual flags. The following predefined
|
||||||
|
configurations are available
|
||||||
|
|
||||||
|
- `DefaultAutoHideConfig` - default auto hide config
|
||||||
|
|
||||||
|
Pick one of those predefined configurations and then modify the following
|
||||||
|
configurations flags to adjust the docking system to your needs.
|
||||||
|
|
||||||
|
### `AutoHideFeatureEnabled`
|
||||||
|
|
||||||
|
Enables / disables the Auto-Hide functionality. Only if this flag is enabled,
|
||||||
|
the other Auto-Hide flags will be evaluated.
|
||||||
|
|
||||||
|
### `DockAreaHasAutoHideButton`
|
||||||
|
|
||||||
|
If this flag is set (default), then each dock area has a pin button in the title
|
||||||
|
bar to toggle Auto-Hide state.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### `AutoHideButtonTogglesArea`
|
||||||
|
|
||||||
|
If set, the the pin button in the dock area title bar toggles the complete area.
|
||||||
|
If not set (default), then the pin button toggles the current active tab / dock
|
||||||
|
widget and pressing the **Ctrl** key while clicking the pin button toggles the
|
||||||
|
complete ara.
|
||||||
|
|
||||||
|
### `AutoHideButtonCheckable`
|
||||||
|
|
||||||
|
Normally the pin button in the dock area title bar is not checkable. If this
|
||||||
|
flag is set, then the button is checkable. That means, if button is checked,
|
||||||
|
the dock widget is pinned.
|
||||||
|
|
||||||
|
### `AutoHideSideBarsIconOnly`
|
||||||
|
|
||||||
|
Normally the Auto-Hide tabs show the icon and title of the dock widget:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
You can set this flag, if you would like to have only icons in the Auto-Hide
|
||||||
|
tabs instead of icon and dock widget title. If this is set, the Auto-Hide tab
|
||||||
|
needs less space. The tooltip of each tab still shows the dock widget title.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### `AutoHideShowOnMouseOver`
|
||||||
|
|
||||||
|
Normally Auto-Hide widgets are shown by clicking the Auto-Hide tab and
|
||||||
|
hidden by clicking the Auto-Hide tab again or by clicking into any other
|
||||||
|
dock widget in the same container. If this flag is set, the Auto-Hide widget
|
||||||
|
is shown, if the user hovers over the Auto-Hide tab or if the users moves the
|
||||||
|
mouse outside of the Auto-Hide widget. Showing and hiding my mouse click still
|
||||||
|
works if this feature is enabled.
|
||||||
|
|
||||||
|
### `AutoHideCloseButtonCollapsesDock`
|
||||||
|
|
||||||
|
Some users don't understand the distinction between closing an auto hide dock and
|
||||||
|
collapsing an auto hide dock. This may lead to situations where they press the
|
||||||
|
close button (losing the side tab widget) instead of simply clicking outside
|
||||||
|
the auto hide dock (collapsing the dock).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
If `AutoHideCloseButtonCollapsesDock` option is active, the
|
||||||
|
close button in an auto hide widget collapses the auto hide widget instead of
|
||||||
|
closing it.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
If you enable the `AutoHideHasMinimizeButton` flag, you should disable this
|
||||||
|
flag our you will have two buttons with minimize functionality.
|
||||||
|
|
||||||
|
### `AutoHideHasCloseButton`
|
||||||
|
|
||||||
|
If this flag is set (default), then each auto hide widget has a close button:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The functionality of the close button (close or minimize) is configured by the
|
||||||
|
`AutoHideCloseButtonCollapsesDock` flag.
|
||||||
|
|
||||||
|
### `AutoHideHasMinimizeButton`
|
||||||
|
|
||||||
|
If this flag is set (disabled by default), then each auto hide widget has a minimize button.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### `AutoHideOpenOnDragHover`
|
||||||
|
|
||||||
|
If this flag is set (disabled by default), then holding a dragging cursor hover an auto-hide collapsed dock's tab will open said dock:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Said dock must be set to accept drops to hide when cursor leaves its scope. See `AutoHideDragNDropExample` for more details.
|
||||||
|
|
||||||
|
### `AutoHideCloseOnOutsideMouseClick`
|
||||||
|
|
||||||
|
If this flag is set (default), the auto hide dock container will collapse if the
|
||||||
|
user clicks outside of the container. If not set, the auto hide container can be
|
||||||
|
closed only via click on auto hide sidebar tab.
|
||||||
|
|
||||||
## DockWidget Feature Flags
|
## DockWidget Feature Flags
|
||||||
|
|
||||||
### `DockWidgetClosable`
|
### `DockWidgetClosable`
|
||||||
@@ -496,10 +751,7 @@ If set, the dock widget will have a close button.
|
|||||||
|
|
||||||
If a dock widget is movable, then it and can be moved to a new position in the
|
If a dock widget is movable, then it and can be moved to a new position in the
|
||||||
current dock container. Disable this flag to prevent moving of a dock widget
|
current dock container. Disable this flag to prevent moving of a dock widget
|
||||||
via mouse. If the `OpaqueUndocking` configuration flag is set, then dock widgets
|
via mouse.
|
||||||
are immediately undocked into floating widgets. That means, moving is only
|
|
||||||
possible in this case, if the dock widget is also floatable (feature flag
|
|
||||||
`DockWidgetFloatable` is set).
|
|
||||||
|
|
||||||
### `DockWidgetFloatable`
|
### `DockWidgetFloatable`
|
||||||
|
|
||||||
@@ -610,6 +862,93 @@ Normally clicking the close button of a dock widget will just hide the widget an
|
|||||||
|
|
||||||
When an entire area is closed, the default behavior is to hide the dock widgets it contains regardless of the `DockWidgetDeleteOnClose` flag except if there is only one dock widget. In this special case, the `DockWidgetDeleteOnClose` flag is followed. This behavior can be changed by setting the `DockWidgetForceCloseWithArea` flag to all the dock widgets that needs to be closed with their area.
|
When an entire area is closed, the default behavior is to hide the dock widgets it contains regardless of the `DockWidgetDeleteOnClose` flag except if there is only one dock widget. In this special case, the `DockWidgetDeleteOnClose` flag is followed. This behavior can be changed by setting the `DockWidgetForceCloseWithArea` flag to all the dock widgets that needs to be closed with their area.
|
||||||
|
|
||||||
|
## Globally Lock Docking Features
|
||||||
|
|
||||||
|
It is possible to globally lock features of all dock widgets to "freeze" the
|
||||||
|
current workspace layout. That means, you can now lock your workspace
|
||||||
|
to avoid accidentally dragging a docked view. When locking wasn't possible,
|
||||||
|
users had to manually dock it back to the desired place after each accidental
|
||||||
|
undock.
|
||||||
|
|
||||||
|
You can use a combination of the following feature flags to define which features
|
||||||
|
shall get locked:
|
||||||
|
|
||||||
|
- `CDockWidget::DockWidgetClosable`
|
||||||
|
- `CDockWidget::DockWidgetMovable`
|
||||||
|
- `CDockWidget::DockWidgetFloatable`
|
||||||
|
- `CDockWidget::DockWidgetPinable`
|
||||||
|
|
||||||
|
To clear the locked features, you can use `CDockWidget::NoDockWidgetFeatures`
|
||||||
|
The following code shows how to lock and unlock all dock widget features
|
||||||
|
globally.
|
||||||
|
|
||||||
|
```c++
|
||||||
|
DockManager->lockDockWidgetFeaturesGlobally();
|
||||||
|
DockManager->lockDockWidgetFeaturesGlobally(CDockWidget::NoDockWidgetFeatures);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Dock Widget Size / Minimum Size Handling
|
||||||
|
|
||||||
|
There are several `CDockWidget` mode enums to control how a `CDockWidget` is
|
||||||
|
resized and how the docking system handles the minimum size of a dockwidget.
|
||||||
|
|
||||||
|
The first one is the `eInsertMode` enum:
|
||||||
|
|
||||||
|
```c++
|
||||||
|
enum eInsertMode
|
||||||
|
{
|
||||||
|
AutoScrollArea,
|
||||||
|
ForceScrollArea,
|
||||||
|
ForceNoScrollArea
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
The InsertMode defines how the widget is inserted into the dock widget, when you
|
||||||
|
call the `CDockWidget::setWidget` method:
|
||||||
|
|
||||||
|
```c++
|
||||||
|
DockWidget->setWidget(widget, CDockWidget::AutoScrollArea);
|
||||||
|
```
|
||||||
|
|
||||||
|
The content of a dock widget should be resizable do a very small size to
|
||||||
|
prevent the dock widget from blocking the resizing. To ensure, that a
|
||||||
|
dock widget can be resized very well, it is better to insert the content
|
||||||
|
widget into a scroll area or to provide a widget that is already a scroll
|
||||||
|
area or that contains a scroll area (such as an `QAbstractItemView`)
|
||||||
|
If the InsertMode is `AutoScrollArea`, the DockWidget tries to automatically
|
||||||
|
detect how to insert the given widget. If the widget is derived from
|
||||||
|
`QScrollArea` (i.e. an `QAbstractItemView`), then the widget is inserted
|
||||||
|
directly. If the given widget is not a scroll area, the widget will be
|
||||||
|
inserted into a scroll area.
|
||||||
|
|
||||||
|
To force insertion into a scroll area, you can also provide the InsertMode
|
||||||
|
`ForceScrollArea`. In this case a scroll area will also be created for content
|
||||||
|
widgets that are derived from `QScrollArea` To prevent insertion into a scroll
|
||||||
|
area, you can provide the InsertMode `ForceNoScrollArea`. In this case, the
|
||||||
|
content widget is always inserted directly.
|
||||||
|
|
||||||
|
A second enum, the `eMinimumSizeHintMode` defines, which value will be returned
|
||||||
|
from the `CDockWidget::minimumSizeHint()` function:
|
||||||
|
|
||||||
|
```c++
|
||||||
|
enum eMinimumSizeHintMode
|
||||||
|
{
|
||||||
|
MinimumSizeHintFromDockWidget,
|
||||||
|
MinimumSizeHintFromContent,
|
||||||
|
MinimumSizeHintFromDockWidgetMinimumSize,
|
||||||
|
MinimumSizeHintFromContentMinimumSize,
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
To ensure, that a dock widget does not block resizing, the dock widget
|
||||||
|
reimplements `minimumSizeHint()` function to return a very small minimum
|
||||||
|
size hint. If you would like to adhere the `minimumSizeHint()` from the
|
||||||
|
content widget, then set the `minimumSizeHintMode()` to
|
||||||
|
`MinimumSizeHintFromContent`. If you would like to use the `minimumSize()`
|
||||||
|
value of the content widget or the dock widget, then you can use the
|
||||||
|
`MinimumSizeHintFromDockWidgetMinimumSize` or
|
||||||
|
`MinimumSizeHintFromContentMinimumSize` modes.
|
||||||
|
|
||||||
## Styling
|
## Styling
|
||||||
|
|
||||||
The Advanced Docking System supports styling via [Qt Style Sheets](https://doc.qt.io/qt-5/stylesheet.html). All components like splitters, tabs, buttons, titlebar and
|
The Advanced Docking System supports styling via [Qt Style Sheets](https://doc.qt.io/qt-5/stylesheet.html). All components like splitters, tabs, buttons, titlebar and
|
||||||
@@ -627,3 +966,51 @@ just call the function for settings the stylesheet with an empty string.
|
|||||||
DockManager->setStyleSheet("");
|
DockManager->setStyleSheet("");
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Using ADS on Linux
|
||||||
|
|
||||||
|
### Supported Distributions
|
||||||
|
|
||||||
|
Unfortunately, there is no such thing as a Linux operating system. Linux is a heterogeneous environment with a variety of different distributions. So it is not possible to support "Linux" like it is possible for Windows. It is only possible to support and test a small subset of Linux distributions. The library can be compiled for and has been developed and tested with some Linux distributions. Depending on the used window manager or compositor, dock widgets
|
||||||
|
with native title bars are supported or not. If native title bars are not supported,
|
||||||
|
the library switches to `QWidget` based title bars.
|
||||||
|
|
||||||
|
- **Kubuntu 18.04 and 19.10** - uses KWin - no native title bars
|
||||||
|
- **Ubuntu 18.04, 19.10 and 20.04** - native title bars are supported
|
||||||
|
- **Ubuntu 22.04** - uses Wayland -> no native title bars
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
There are some requirements for the Linux distribution that have to be met:
|
||||||
|
|
||||||
|
- an X server that supports ARGB visuals and a compositing window manager. This is required to display the translucent dock overlays ([https://doc.qt.io/qt-5/qwidget.html#creating-translucent-windows](https://doc.qt.io/qt-5/qwidget.html#creating-translucent-windows)). If your Linux distribution does not support this, or if you disable this feature, you will very likely see issue [#95](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/95).
|
||||||
|
- Wayland is not properly supported by Qt yet. If you use Wayland, then you should set the session type to x11: `XDG_SESSION_TYPE=x11 ./AdvancedDockingSystemDemo`. You will find more details about this in issue [#288](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/288).
|
||||||
|
|
||||||
|
Screenshot Kubuntu:
|
||||||
|

|
||||||
|
|
||||||
|
Screenshot Ubuntu:
|
||||||
|

|
||||||
|
|
||||||
|
### Manjaro xfce 25.0.1 and Xubuntu 24.04.2 issues
|
||||||
|
|
||||||
|
There is a known focus stealing issue with the xfce4 compositor reported in issue [#734]. This issue
|
||||||
|
can be solved by enabling the setting **Activate focus stealing prevention**. `Settings > Window Manager Tweaks` has a tab called `Focus`.
|
||||||
|
|
||||||
|
Selecting `Activate focus stealing prevention` and `Do nothing` for `When a window raises itself`, seems to mitigate the issue. Deselecting `Enable display compositing` on the `Compositor` tab, also works.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## OpenGl + ADS
|
||||||
|
|
||||||
|
If you would like to use OpenGL widgets with ADS such as `GLWidget`, QML or `QWebEngineView`, then you need
|
||||||
|
to set `QApplication::setAttribute(Qt::AA_ShareOpenGLContexts)` before creating your application and your
|
||||||
|
widgets (see issue [#732])
|
||||||
|
|
||||||
|
```c++
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
|
||||||
|
QApplication application(argc, argv);
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|||||||
BIN
doc/xfce4_focus_stealing_issue.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
@@ -1,9 +1,12 @@
|
|||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(QtADSExamples LANGUAGES CXX VERSION ${VERSION_SHORT})
|
project(QtADSExamples LANGUAGES CXX VERSION ${VERSION_SHORT})
|
||||||
add_subdirectory(simple)
|
add_subdirectory(simple)
|
||||||
add_subdirectory(hideshow)
|
add_subdirectory(hideshow)
|
||||||
add_subdirectory(sidebar)
|
add_subdirectory(sidebar)
|
||||||
add_subdirectory(deleteonclose)
|
add_subdirectory(deleteonclose)
|
||||||
add_subdirectory(centralwidget)
|
add_subdirectory(centralwidget)
|
||||||
|
add_subdirectory(autohide)
|
||||||
|
add_subdirectory(autohidedragndrop)
|
||||||
add_subdirectory(emptydockarea)
|
add_subdirectory(emptydockarea)
|
||||||
add_subdirectory(dockindock)
|
add_subdirectory(dockindock)
|
||||||
|
add_subdirectory(configflags)
|
||||||
|
|||||||
28
examples/autohide/CMakeLists.txt
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
project(ads_example_autohide VERSION ${VERSION_SHORT})
|
||||||
|
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
|
||||||
|
find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED)
|
||||||
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
|
add_executable(AutoHideExample WIN32
|
||||||
|
main.cpp
|
||||||
|
mainwindow.cpp
|
||||||
|
mainwindow.ui
|
||||||
|
)
|
||||||
|
target_include_directories(AutoHideExample PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../src")
|
||||||
|
target_link_libraries(AutoHideExample PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR})
|
||||||
|
target_link_libraries(AutoHideExample PUBLIC Qt${QT_VERSION_MAJOR}::Core
|
||||||
|
Qt${QT_VERSION_MAJOR}::Gui
|
||||||
|
Qt${QT_VERSION_MAJOR}::Widgets)
|
||||||
|
set_target_properties(AutoHideExample PROPERTIES
|
||||||
|
AUTOMOC ON
|
||||||
|
AUTORCC ON
|
||||||
|
AUTOUIC ON
|
||||||
|
CXX_STANDARD 14
|
||||||
|
CXX_STANDARD_REQUIRED ON
|
||||||
|
CXX_EXTENSIONS OFF
|
||||||
|
VERSION ${VERSION_SHORT}
|
||||||
|
EXPORT_NAME "Qt Advanced Docking System Auto Hide Example"
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib"
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib"
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin"
|
||||||
|
)
|
||||||
34
examples/autohide/autohide.pro
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
ADS_OUT_ROOT = $${OUT_PWD}/../..
|
||||||
|
|
||||||
|
QT += core gui widgets
|
||||||
|
|
||||||
|
TARGET = AutoHideExample
|
||||||
|
DESTDIR = $${ADS_OUT_ROOT}/lib
|
||||||
|
TEMPLATE = app
|
||||||
|
CONFIG += c++14
|
||||||
|
CONFIG += debug_and_release
|
||||||
|
adsBuildStatic {
|
||||||
|
DEFINES += ADS_STATIC
|
||||||
|
}
|
||||||
|
|
||||||
|
# The following define makes your compiler emit warnings if you use
|
||||||
|
# any Qt feature that has been marked deprecated (the exact warnings
|
||||||
|
# depend on your compiler). Please consult the documentation of the
|
||||||
|
# deprecated API in order to know how to port your code away from it.
|
||||||
|
DEFINES += QT_DEPRECATED_WARNINGS
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
main.cpp \
|
||||||
|
mainwindow.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
mainwindow.h
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
mainwindow.ui
|
||||||
|
|
||||||
|
LIBS += -L$${ADS_OUT_ROOT}/lib
|
||||||
|
include(../../ads.pri)
|
||||||
|
INCLUDEPATH += ../../src
|
||||||
|
DEPENDPATH += ../../src
|
||||||
|
|
||||||
10
examples/autohide/main.cpp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#include <mainwindow.h>
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
CMainWindow w;
|
||||||
|
w.show();
|
||||||
|
return a.exec();
|
||||||
|
}
|
||||||
106
examples/autohide/main.py
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from PyQt5 import uic
|
||||||
|
from PyQt5.QtCore import Qt, QTimer, QDir, QSignalBlocker
|
||||||
|
from PyQt5.QtGui import QCloseEvent, QIcon
|
||||||
|
from PyQt5.QtWidgets import (QApplication, QLabel, QCalendarWidget, QFrame, QTreeView,
|
||||||
|
QTableWidget, QFileSystemModel, QPlainTextEdit, QToolBar,
|
||||||
|
QWidgetAction, QComboBox, QAction, QSizePolicy, QInputDialog)
|
||||||
|
|
||||||
|
import PyQtAds as QtAds
|
||||||
|
|
||||||
|
UI_FILE = os.path.join(os.path.dirname(__file__), 'mainwindow.ui')
|
||||||
|
MainWindowUI, MainWindowBase = uic.loadUiType(UI_FILE)
|
||||||
|
|
||||||
|
class MainWindow(MainWindowUI, MainWindowBase):
|
||||||
|
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
|
||||||
|
self.setupUi(self)
|
||||||
|
|
||||||
|
QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.OpaqueSplitterResize, True)
|
||||||
|
QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.XmlCompressionEnabled, False)
|
||||||
|
QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.FocusHighlighting, True)
|
||||||
|
self.dock_manager = QtAds.CDockManager(self)
|
||||||
|
|
||||||
|
# Set central widget
|
||||||
|
text_edit = QPlainTextEdit()
|
||||||
|
text_edit.setPlaceholderText("This is the central editor. Enter your text here.")
|
||||||
|
central_dock_widget = QtAds.CDockWidget("CentralWidget")
|
||||||
|
central_dock_widget.setWidget(text_edit)
|
||||||
|
central_dock_area = self.dock_manager.setCentralWidget(central_dock_widget)
|
||||||
|
central_dock_area.setAllowedAreas(QtAds.DockWidgetArea.OuterDockAreas)
|
||||||
|
|
||||||
|
# create other dock widgets
|
||||||
|
table = QTableWidget()
|
||||||
|
table.setColumnCount(3)
|
||||||
|
table.setRowCount(10)
|
||||||
|
table_dock_widget = QtAds.CDockWidget("Table 1")
|
||||||
|
table_dock_widget.setWidget(table)
|
||||||
|
table_dock_widget.setMinimumSizeHintMode(QtAds.CDockWidget.MinimumSizeHintFromDockWidget)
|
||||||
|
table_dock_widget.resize(250, 150)
|
||||||
|
table_dock_widget.setMinimumSize(200, 150)
|
||||||
|
table_area = self.dock_manager.addDockWidget(QtAds.DockWidgetArea.LeftDockWidgetArea, table_dock_widget)
|
||||||
|
self.menuView.addAction(table_dock_widget.toggleViewAction())
|
||||||
|
|
||||||
|
table = QTableWidget()
|
||||||
|
table.setColumnCount(5)
|
||||||
|
table.setRowCount(1020)
|
||||||
|
table_dock_widget = QtAds.CDockWidget("Table 2")
|
||||||
|
table_dock_widget.setWidget(table)
|
||||||
|
table_dock_widget.setMinimumSizeHintMode(QtAds.CDockWidget.MinimumSizeHintFromDockWidget)
|
||||||
|
table_dock_widget.resize(250, 150)
|
||||||
|
table_dock_widget.setMinimumSize(200, 150)
|
||||||
|
table_area = self.dock_manager.addDockWidget(QtAds.DockWidgetArea.BottomDockWidgetArea, table_dock_widget, table_area)
|
||||||
|
self.menuView.addAction(table_dock_widget.toggleViewAction())
|
||||||
|
|
||||||
|
properties_table = QTableWidget()
|
||||||
|
properties_table.setColumnCount(3)
|
||||||
|
properties_table.setRowCount(10)
|
||||||
|
properties_dock_widget = QtAds.CDockWidget("Properties")
|
||||||
|
properties_dock_widget.setWidget(properties_table)
|
||||||
|
properties_dock_widget.setMinimumSizeHintMode(QtAds.CDockWidget.MinimumSizeHintFromDockWidget)
|
||||||
|
properties_dock_widget.resize(250, 150)
|
||||||
|
properties_dock_widget.setMinimumSize(200, 150)
|
||||||
|
self.dock_manager.addDockWidget(QtAds.DockWidgetArea.RightDockWidgetArea, properties_dock_widget, central_dock_area)
|
||||||
|
self.menuView.addAction(properties_dock_widget.toggleViewAction())
|
||||||
|
|
||||||
|
self.create_perspective_ui()
|
||||||
|
|
||||||
|
def create_perspective_ui(self):
|
||||||
|
save_perspective_action = QAction("Create Perspective", self)
|
||||||
|
save_perspective_action.triggered.connect(self.save_perspective)
|
||||||
|
perspective_list_action = QWidgetAction(self)
|
||||||
|
self.perspective_combobox = QComboBox(self)
|
||||||
|
self.perspective_combobox.setSizeAdjustPolicy(QComboBox.AdjustToContents)
|
||||||
|
self.perspective_combobox.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
|
||||||
|
self.perspective_combobox.activated[str].connect(self.dock_manager.openPerspective)
|
||||||
|
perspective_list_action.setDefaultWidget(self.perspective_combobox)
|
||||||
|
self.toolBar.addSeparator()
|
||||||
|
self.toolBar.addAction(perspective_list_action)
|
||||||
|
self.toolBar.addAction(save_perspective_action)
|
||||||
|
|
||||||
|
def save_perspective(self):
|
||||||
|
perspective_name, ok = QInputDialog.getText(self, "Save Perspective", "Enter Unique name:")
|
||||||
|
if not ok or not perspective_name:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.dock_manager.addPerspective(perspective_name)
|
||||||
|
blocker = QSignalBlocker(self.perspective_combobox)
|
||||||
|
self.perspective_combobox.clear()
|
||||||
|
self.perspective_combobox.addItems(self.dock_manager.perspectiveNames())
|
||||||
|
self.perspective_combobox.setCurrentText(perspective_name)
|
||||||
|
|
||||||
|
def closeEvent(self, event: QCloseEvent):
|
||||||
|
self.dock_manager.deleteLater()
|
||||||
|
super().closeEvent(event)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = QApplication(sys.argv)
|
||||||
|
|
||||||
|
w = MainWindow()
|
||||||
|
w.show()
|
||||||
|
app.exec_()
|
||||||
126
examples/autohide/mainwindow.cpp
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#include "ui_mainwindow.h"
|
||||||
|
|
||||||
|
#include <QWidgetAction>
|
||||||
|
#include <QFileSystemModel>
|
||||||
|
#include <QTableWidget>
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
#include <QInputDialog>
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QPlainTextEdit>
|
||||||
|
#include <QToolBar>
|
||||||
|
|
||||||
|
#include "AutoHideDockContainer.h"
|
||||||
|
#include "DockAreaWidget.h"
|
||||||
|
#include "DockAreaTitleBar.h"
|
||||||
|
|
||||||
|
using namespace ads;
|
||||||
|
|
||||||
|
|
||||||
|
CMainWindow::CMainWindow(QWidget *parent)
|
||||||
|
: QMainWindow(parent)
|
||||||
|
, ui(new Ui::CMainWindow)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
CDockManager::setConfigFlag(CDockManager::OpaqueSplitterResize, true);
|
||||||
|
CDockManager::setConfigFlag(CDockManager::XmlCompressionEnabled, false);
|
||||||
|
CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true);
|
||||||
|
CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig);
|
||||||
|
DockManager = new CDockManager(this);
|
||||||
|
|
||||||
|
// Set central widget
|
||||||
|
QPlainTextEdit* w = new QPlainTextEdit();
|
||||||
|
w->setPlaceholderText("This is the central editor. Enter your text here.");
|
||||||
|
CDockWidget* CentralDockWidget = DockManager->createDockWidget("CentralWidget");
|
||||||
|
CentralDockWidget->setWidget(w);
|
||||||
|
auto* CentralDockArea = DockManager->setCentralWidget(CentralDockWidget);
|
||||||
|
CentralDockArea->setAllowedAreas(DockWidgetArea::OuterDockAreas);
|
||||||
|
|
||||||
|
// create other dock widgets
|
||||||
|
QTableWidget* table = new QTableWidget();
|
||||||
|
table->setColumnCount(3);
|
||||||
|
table->setRowCount(10);
|
||||||
|
CDockWidget* TableDockWidget = DockManager->createDockWidget("Table 1");
|
||||||
|
TableDockWidget->setWidget(table);
|
||||||
|
TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||||
|
TableDockWidget->setMinimumSize(200,150);
|
||||||
|
const auto autoHideContainer = DockManager->addAutoHideDockWidget(SideBarLocation::SideBarLeft, TableDockWidget);
|
||||||
|
autoHideContainer->setSize(480);
|
||||||
|
ui->menuView->addAction(TableDockWidget->toggleViewAction());
|
||||||
|
|
||||||
|
table = new QTableWidget();
|
||||||
|
table->setColumnCount(5);
|
||||||
|
table->setRowCount(1020);
|
||||||
|
TableDockWidget = DockManager->createDockWidget("Table 2");
|
||||||
|
TableDockWidget->setWidget(table);
|
||||||
|
TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||||
|
TableDockWidget->resize(250, 150);
|
||||||
|
TableDockWidget->setMinimumSize(200,150);
|
||||||
|
DockManager->addAutoHideDockWidget(SideBarLocation::SideBarLeft, TableDockWidget);
|
||||||
|
ui->menuView->addAction(TableDockWidget->toggleViewAction());
|
||||||
|
|
||||||
|
QTableWidget* propertiesTable = new QTableWidget();
|
||||||
|
propertiesTable->setColumnCount(3);
|
||||||
|
propertiesTable->setRowCount(10);
|
||||||
|
CDockWidget* PropertiesDockWidget = DockManager->createDockWidget("Properties");
|
||||||
|
PropertiesDockWidget->setWidget(propertiesTable);
|
||||||
|
PropertiesDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||||
|
PropertiesDockWidget->resize(250, 150);
|
||||||
|
PropertiesDockWidget->setMinimumSize(200,150);
|
||||||
|
DockManager->addDockWidget(DockWidgetArea::RightDockWidgetArea, PropertiesDockWidget, CentralDockArea);
|
||||||
|
ui->menuView->addAction(PropertiesDockWidget->toggleViewAction());
|
||||||
|
|
||||||
|
createPerspectiveUi();
|
||||||
|
}
|
||||||
|
|
||||||
|
CMainWindow::~CMainWindow()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CMainWindow::createPerspectiveUi()
|
||||||
|
{
|
||||||
|
SavePerspectiveAction = new QAction("Create Perspective", this);
|
||||||
|
connect(SavePerspectiveAction, SIGNAL(triggered()), SLOT(savePerspective()));
|
||||||
|
PerspectiveListAction = new QWidgetAction(this);
|
||||||
|
PerspectiveComboBox = new QComboBox(this);
|
||||||
|
PerspectiveComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
|
||||||
|
PerspectiveComboBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
||||||
|
connect(PerspectiveComboBox, SIGNAL(currentTextChanged(const QString&)),
|
||||||
|
DockManager, SLOT(openPerspective(const QString&)));
|
||||||
|
PerspectiveListAction->setDefaultWidget(PerspectiveComboBox);
|
||||||
|
ui->toolBar->addSeparator();
|
||||||
|
ui->toolBar->addAction(PerspectiveListAction);
|
||||||
|
ui->toolBar->addAction(SavePerspectiveAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CMainWindow::savePerspective()
|
||||||
|
{
|
||||||
|
QString PerspectiveName = QInputDialog::getText(this, "Save Perspective", "Enter unique name:");
|
||||||
|
if (PerspectiveName.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DockManager->addPerspective(PerspectiveName);
|
||||||
|
QSignalBlocker Blocker(PerspectiveComboBox);
|
||||||
|
PerspectiveComboBox->clear();
|
||||||
|
PerspectiveComboBox->addItems(DockManager->perspectiveNames());
|
||||||
|
PerspectiveComboBox->setCurrentText(PerspectiveName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CMainWindow::closeEvent(QCloseEvent* event)
|
||||||
|
{
|
||||||
|
// Delete dock manager here to delete all floating widgets. This ensures
|
||||||
|
// that all top level windows of the dock manager are properly closed
|
||||||
|
DockManager->deleteLater();
|
||||||
|
QMainWindow::closeEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
43
examples/autohide/mainwindow.h
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include <QComboBox>
|
||||||
|
#include <QWidgetAction>
|
||||||
|
|
||||||
|
#include "DockManager.h"
|
||||||
|
#include "DockAreaWidget.h"
|
||||||
|
#include "DockWidget.h"
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
namespace Ui { class CMainWindow; }
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
class CMainWindow : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CMainWindow(QWidget *parent = nullptr);
|
||||||
|
~CMainWindow();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void closeEvent(QCloseEvent* event) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QAction* SavePerspectiveAction = nullptr;
|
||||||
|
QWidgetAction* PerspectiveListAction = nullptr;
|
||||||
|
QComboBox* PerspectiveComboBox = nullptr;
|
||||||
|
|
||||||
|
Ui::CMainWindow *ui;
|
||||||
|
|
||||||
|
ads::CDockManager* DockManager;
|
||||||
|
ads::CDockAreaWidget* StatusDockArea;
|
||||||
|
ads::CDockWidget* TimelineDockWidget;
|
||||||
|
|
||||||
|
void createPerspectiveUi();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void savePerspective();
|
||||||
|
};
|
||||||
|
#endif // MAINWINDOW_H
|
||||||
47
examples/autohide/mainwindow.ui
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>CMainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="CMainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>1284</width>
|
||||||
|
<height>757</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>MainWindow</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget"/>
|
||||||
|
<widget class="QMenuBar" name="menubar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>1284</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<widget class="QMenu" name="menuView">
|
||||||
|
<property name="title">
|
||||||
|
<string>View</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<addaction name="menuView"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QToolBar" name="toolBar">
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>toolBar</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="toolBarArea">
|
||||||
|
<enum>TopToolBarArea</enum>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="toolBarBreak">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
29
examples/autohidedragndrop/CMakeLists.txt
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
project(ads_example_autohide_dragndrop VERSION ${VERSION_SHORT})
|
||||||
|
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
|
||||||
|
find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED)
|
||||||
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
|
add_executable(AutoHideDragNDropExample WIN32
|
||||||
|
main.cpp
|
||||||
|
mainwindow.cpp
|
||||||
|
mainwindow.ui
|
||||||
|
droppableitem.cpp
|
||||||
|
)
|
||||||
|
target_include_directories(AutoHideDragNDropExample PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../src")
|
||||||
|
target_link_libraries(AutoHideDragNDropExample PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR})
|
||||||
|
target_link_libraries(AutoHideDragNDropExample PUBLIC Qt${QT_VERSION_MAJOR}::Core
|
||||||
|
Qt${QT_VERSION_MAJOR}::Gui
|
||||||
|
Qt${QT_VERSION_MAJOR}::Widgets)
|
||||||
|
set_target_properties(AutoHideDragNDropExample PROPERTIES
|
||||||
|
AUTOMOC ON
|
||||||
|
AUTORCC ON
|
||||||
|
AUTOUIC ON
|
||||||
|
CXX_STANDARD 14
|
||||||
|
CXX_STANDARD_REQUIRED ON
|
||||||
|
CXX_EXTENSIONS OFF
|
||||||
|
VERSION ${VERSION_SHORT}
|
||||||
|
EXPORT_NAME "Qt Advanced Docking System Auto Hide With Drag N Drop Example"
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib"
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib"
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin"
|
||||||
|
)
|
||||||
36
examples/autohidedragndrop/autohidedragndrop.pro
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
ADS_OUT_ROOT = $${OUT_PWD}/../..
|
||||||
|
|
||||||
|
QT += core gui widgets
|
||||||
|
|
||||||
|
TARGET = AutoHideDragNDropExample
|
||||||
|
DESTDIR = $${ADS_OUT_ROOT}/lib
|
||||||
|
TEMPLATE = app
|
||||||
|
CONFIG += c++14
|
||||||
|
CONFIG += debug_and_release
|
||||||
|
adsBuildStatic {
|
||||||
|
DEFINES += ADS_STATIC
|
||||||
|
}
|
||||||
|
|
||||||
|
# The following define makes your compiler emit warnings if you use
|
||||||
|
# any Qt feature that has been marked deprecated (the exact warnings
|
||||||
|
# depend on your compiler). Please consult the documentation of the
|
||||||
|
# deprecated API in order to know how to port your code away from it.
|
||||||
|
DEFINES += QT_DEPRECATED_WARNINGS
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
main.cpp \
|
||||||
|
mainwindow.cpp \
|
||||||
|
droppableitem.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
mainwindow.h \
|
||||||
|
droppableitem.h
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
mainwindow.ui
|
||||||
|
|
||||||
|
LIBS += -L$${ADS_OUT_ROOT}/lib
|
||||||
|
include(../../ads.pri)
|
||||||
|
INCLUDEPATH += ../../src
|
||||||
|
DEPENDPATH += ../../src
|
||||||
|
|
||||||
38
examples/autohidedragndrop/droppableitem.cpp
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
#include "droppableitem.h"
|
||||||
|
|
||||||
|
#include <QDragEnterEvent>
|
||||||
|
#include <QDragLeaveEvent>
|
||||||
|
#include <QDropEvent>
|
||||||
|
#include <QMimeData>
|
||||||
|
#include <qsizepolicy.h>
|
||||||
|
|
||||||
|
DroppableItem::DroppableItem(const QString& text, QWidget* parent)
|
||||||
|
: QPushButton(text, parent)
|
||||||
|
{
|
||||||
|
setAcceptDrops(true);
|
||||||
|
setSizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DroppableItem::dragEnterEvent(QDragEnterEvent* event)
|
||||||
|
{
|
||||||
|
if (event->mimeData()->hasText())
|
||||||
|
{
|
||||||
|
event->acceptProposedAction();
|
||||||
|
setCursor(Qt::DragMoveCursor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DroppableItem::dragLeaveEvent(QDragLeaveEvent* event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(event);
|
||||||
|
unsetCursor();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DroppableItem::dropEvent(QDropEvent* event)
|
||||||
|
{
|
||||||
|
if (event->mimeData()->hasText())
|
||||||
|
{
|
||||||
|
event->acceptProposedAction();
|
||||||
|
setText(event->mimeData()->text());
|
||||||
|
}
|
||||||
|
}
|
||||||
19
examples/autohidedragndrop/droppableitem.h
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#include <QObject>
|
||||||
|
#include <QPushButton>
|
||||||
|
|
||||||
|
class QDragEnterEvent;
|
||||||
|
class QDragLeaveEvent;
|
||||||
|
class QDropEvent;
|
||||||
|
|
||||||
|
class DroppableItem : public QPushButton
|
||||||
|
{
|
||||||
|
Q_OBJECT;
|
||||||
|
|
||||||
|
public:
|
||||||
|
DroppableItem(const QString& text = QString(), QWidget* parent = nullptr);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void dragEnterEvent(QDragEnterEvent* event) override;
|
||||||
|
void dragLeaveEvent(QDragLeaveEvent* event) override;
|
||||||
|
void dropEvent(QDropEvent* event) override;
|
||||||
|
};
|
||||||
10
examples/autohidedragndrop/main.cpp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#include <mainwindow.h>
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
CMainWindow w;
|
||||||
|
w.show();
|
||||||
|
return a.exec();
|
||||||
|
}
|
||||||
84
examples/autohidedragndrop/main.py
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from PyQt5 import uic
|
||||||
|
from PyQt5.QtCore import Qt, QTimer, QDir, QSignalBlocker
|
||||||
|
from PyQt5.QtGui import QCloseEvent, QIcon
|
||||||
|
from PyQt5.QtWidgets import (QApplication, QLabel, QCalendarWidget, QFrame, QTreeView,
|
||||||
|
QTableWidget, QFileSystemModel, QPlainTextEdit, QToolBar,
|
||||||
|
QWidgetAction, QComboBox, QAction, QSizePolicy, QInputDialog)
|
||||||
|
|
||||||
|
import PyQtAds as QtAds
|
||||||
|
|
||||||
|
UI_FILE = os.path.join(os.path.dirname(__file__), 'mainwindow.ui')
|
||||||
|
MainWindowUI, MainWindowBase = uic.loadUiType(UI_FILE)
|
||||||
|
|
||||||
|
class MainWindow(MainWindowUI, MainWindowBase):
|
||||||
|
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
|
||||||
|
self.setupUi(self)
|
||||||
|
|
||||||
|
QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.OpaqueSplitterResize, True)
|
||||||
|
QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.XmlCompressionEnabled, False)
|
||||||
|
QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.FocusHighlighting, True)
|
||||||
|
QtAds.CDockManager.setAutoHideConfigFlag(QtAds.CDockManager.AutoHideOpenOnDragHover, True);
|
||||||
|
self.dock_manager = QtAds.CDockManager(self)
|
||||||
|
|
||||||
|
# Set central widget
|
||||||
|
text_edit = QPlainTextEdit()
|
||||||
|
text_edit.setPlaceholderText("This is the central editor. Enter your text here.")
|
||||||
|
central_dock_widget = QtAds.CDockWidget("CentralWidget")
|
||||||
|
central_dock_widget.setWidget(text_edit)
|
||||||
|
central_dock_area = self.dock_manager.setCentralWidget(central_dock_widget)
|
||||||
|
central_dock_area.setAllowedAreas(QtAds.DockWidgetArea.OuterDockAreas)
|
||||||
|
|
||||||
|
|
||||||
|
droppable_item = DroppableItem("Drop text here.")
|
||||||
|
drop_dock_widget = QtAds.CDockWidget("Tab")
|
||||||
|
drop_dock_widget.setWidget(droppable_item)
|
||||||
|
drop_dock_widget.setMinimumSizeHintMode(QtAds.CDockWidget.MinimumSizeHintFromDockWidget)
|
||||||
|
drop_dock_widget.setMinimumSize(200, 150)
|
||||||
|
drop_dock_widget.setAcceptDrops(True)
|
||||||
|
drop_area = self.dock_manager.addDockWidget(QtAds.DockWidgetArea.LeftDockWidgetArea, drop_dock_widget)
|
||||||
|
drop_area.setAcceptDrops(True)
|
||||||
|
self.menuView.addAction(drop_dock_widget.toggleViewAction())
|
||||||
|
|
||||||
|
self.create_perspective_ui()
|
||||||
|
|
||||||
|
def create_perspective_ui(self):
|
||||||
|
save_perspective_action = QAction("Create Perspective", self)
|
||||||
|
save_perspective_action.triggered.connect(self.save_perspective)
|
||||||
|
perspective_list_action = QWidgetAction(self)
|
||||||
|
self.perspective_combobox = QComboBox(self)
|
||||||
|
self.perspective_combobox.setSizeAdjustPolicy(QComboBox.AdjustToContents)
|
||||||
|
self.perspective_combobox.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
|
||||||
|
self.perspective_combobox.activated[str].connect(self.dock_manager.openPerspective)
|
||||||
|
perspective_list_action.setDefaultWidget(self.perspective_combobox)
|
||||||
|
self.toolBar.addSeparator()
|
||||||
|
self.toolBar.addAction(perspective_list_action)
|
||||||
|
self.toolBar.addAction(save_perspective_action)
|
||||||
|
|
||||||
|
def save_perspective(self):
|
||||||
|
perspective_name, ok = QInputDialog.getText(self, "Save Perspective", "Enter Unique name:")
|
||||||
|
if not ok or not perspective_name:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.dock_manager.addPerspective(perspective_name)
|
||||||
|
blocker = QSignalBlocker(self.perspective_combobox)
|
||||||
|
self.perspective_combobox.clear()
|
||||||
|
self.perspective_combobox.addItems(self.dock_manager.perspectiveNames())
|
||||||
|
self.perspective_combobox.setCurrentText(perspective_name)
|
||||||
|
|
||||||
|
def closeEvent(self, event: QCloseEvent):
|
||||||
|
self.dock_manager.deleteLater()
|
||||||
|
super().closeEvent(event)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = QApplication(sys.argv)
|
||||||
|
|
||||||
|
w = MainWindow()
|
||||||
|
w.show()
|
||||||
|
app.exec_()
|
||||||