Compare commits
685 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1212f48c6d | |||
| e01f46c5b0 | |||
| 3cec02b3f3 | |||
| 56f60be60a | |||
| 852f581206 | |||
| 3b626a7d1a | |||
| 069a75d44b | |||
| e1f887a036 | |||
| c5edd0a54b | |||
| 3a13287ba9 | |||
| 24776bfcf6 | |||
| 3202c145e8 | |||
| 4888ae87f3 | |||
| 59344eb565 | |||
| 5d033bf1b2 | |||
| 8985babfe7 | |||
| 29d16c3337 | |||
| 61f5e5e502 | |||
| 77bc9ed8e4 | |||
| 9b26d5dc6a | |||
| b76d8ce8a1 | |||
| d7052e396b | |||
| e123c55754 | |||
| 268aba60eb | |||
| 313f9533a8 | |||
| 3d1cb671c1 | |||
| c0fc093b4e | |||
| 46c35d2297 | |||
| 2adc58c1c0 | |||
| 82262c5980 | |||
| 6dcb6a2a8f | |||
| c740cdf1ac | |||
| aab0a18506 | |||
| ebab58e4b3 | |||
| 45ca53c7a8 | |||
| 2efce1752d | |||
| c256e2dd1a | |||
| 8e3a7a6ab6 | |||
| 740271c993 | |||
| 1bec2700bd | |||
| 268e9c7bd9 | |||
| 264a0f677f | |||
| 9ccfb5e116 | |||
| 04463f0954 | |||
| 3245919c19 | |||
| 55ad2eccbf | |||
| 8b2548d601 | |||
| c3aeb0bf83 | |||
| 16d89f64fd | |||
| ac78c51b70 | |||
| 2e27f77b28 | |||
| 83fb525e27 | |||
| d1808c7a89 | |||
| 4e4f029d2d | |||
| 242f134e0f | |||
| 2dc88df29c | |||
| fd8135264f | |||
| 827cd2a91e | |||
| cdd25189b5 | |||
| f1313f5895 | |||
| 75fafd5acc | |||
| 3394c1246c | |||
| 3e34a6d55f | |||
| 50792ba1ad | |||
| 6404612014 | |||
| eaf15faaa3 | |||
| b8c9e670c4 | |||
| 85dc638a42 | |||
| dfe56cddbd | |||
| 3f397f5f78 | |||
| 7ec13cbc1a | |||
| ef1fbd79b4 | |||
| eb7abdfbc6 | |||
| f574d28340 | |||
| 31f90e2c46 | |||
| 45bd8256b3 | |||
| 4e43cde063 | |||
| aef56fe41d | |||
| 0395f90f75 | |||
| a4d5b7a12a | |||
| ba29dc45a0 | |||
| d06c7be606 | |||
| 56cbd6e23d | |||
| 8bbc2da5c7 | |||
| 7fa1ff35b8 | |||
| 4b8db6be0e | |||
| a6b4c3c673 | |||
| 8f0ee06a4f | |||
| 7e3420b1a5 | |||
| 183035d5ac | |||
| eb4109bb11 | |||
| 717bf57677 | |||
| 861e5de25e | |||
| bf7bff595e | |||
| 70599c4ae1 | |||
| e42ebdc861 | |||
| 3c1fb2fe72 | |||
| 95d0e523fe | |||
| 2da516667e | |||
| b62b118d45 | |||
| b0b7814015 | |||
| c9a63b5bce | |||
| 059d179d9b | |||
| fa52aab149 | |||
| 54e61d482d | |||
| 800ddfbcbe | |||
| 0258d1a74f | |||
| dd0c194a3c | |||
| 3ba7de3284 | |||
| 0067ba1dca | |||
| 16220af012 | |||
| f8c1b5206a | |||
| 4d800de26a | |||
| d3c8544fd9 | |||
| eea939c31c | |||
| 599228fe6e | |||
| 3ff02e528d | |||
| 520f4245b3 | |||
| 918756a91a | |||
| 7a73e8075f | |||
| 53a0f07ca3 | |||
| 864e651966 | |||
| 26285373a3 | |||
| b4fcef1829 | |||
| 9519b70826 | |||
| 218e70c759 | |||
| 26c0fc9812 | |||
| 8c135a009d | |||
| 261b0f9e12 | |||
| 1183849ce2 | |||
| 2b30083193 | |||
| 863ac5f0ae | |||
| 8623dd4c6f | |||
| 6a84ada6a6 | |||
| b7f516d485 | |||
| 0646f9ca4f | |||
| 8ef130a59d | |||
| c3b0e6725e | |||
| 3f8e6418d0 | |||
| a86fe2a46b | |||
| 206edcbb7d | |||
| 0a7ea032d9 | |||
| 52713704bc | |||
| 923723a9de | |||
| ff3c2e0916 | |||
| adca07f26f | |||
| 12ecf6b28f | |||
| 1ee828da5b | |||
| 837e1e7f09 | |||
| 25962118a2 | |||
| 35275de4cc | |||
| d641b964bd | |||
| e90dddbbc6 | |||
| ce8884394a | |||
| 8606cc5328 | |||
| 60d9299d45 | |||
| c71839a291 | |||
| d9a2539702 | |||
| 22c1ec9321 | |||
| 4300a655bc | |||
| e7e2864641 | |||
| 2ed85f6fc7 | |||
| e62d43d024 | |||
| 6562498ca2 | |||
| 38e504fb7e | |||
| 4aef4d17d2 | |||
| c89243a36f | |||
| 4a83521306 | |||
| a7f406cd44 | |||
| dad6206386 | |||
| 451f8c3296 | |||
| 43a1f6a1a9 | |||
| b208a4f131 | |||
| 1c8e7ed052 | |||
| e6ffc8b622 | |||
| 9004db1d99 | |||
| edf483d88f | |||
| 7a85e2592c | |||
| 7183ed3d99 | |||
| 0920e82188 | |||
| eba258f6cd | |||
| 2eed3acd3d | |||
| abd5e8978a | |||
| 43d27a9563 | |||
| d3424db23d | |||
| 0d722b6033 | |||
| 96fac96b89 | |||
| 1ec4f56a50 | |||
| 839324f231 | |||
| a756bc0722 | |||
| 2269a4641b | |||
| 7cd04f2a14 | |||
| c2f405c32d | |||
| 265aa44320 | |||
| 395c6f6602 | |||
| fd38f55724 | |||
| 85ed1b8a2a | |||
| 607eb4b1ea | |||
| 1e124450f2 | |||
| 4d70fcf35c | |||
| 55c2c0df9d | |||
| b94b244919 | |||
| bd6bed8d61 | |||
| 6ed26358e8 | |||
| 6a2b3973bc | |||
| d9db6e59e7 | |||
| 22469813fe | |||
| 88823ea35f | |||
| a106395679 | |||
| 9363e9bc2e | |||
| a5fe544415 | |||
| 9bfe18807f | |||
| 199444b6db | |||
| bdd52a0e2b | |||
| 86ce8fcd92 | |||
| 428687ee4b | |||
| 512d74c745 | |||
| 561b9c4eb1 | |||
| 00e75604b0 | |||
| ceda1e082a | |||
| ce890da342 | |||
| 2785e25569 | |||
| c8e4396b2a | |||
| 0147453494 | |||
| 181bbb7f21 | |||
| 3665ec1bcd | |||
| fcd2a4e0e0 | |||
| 3c1c29f6c3 | |||
| cafc5bcf6d | |||
| 3cbb930751 | |||
| 51209d30b6 | |||
| 9c55d36d55 | |||
| 3ac557570c | |||
| 0c2cf409f8 | |||
| 467a14df71 | |||
| 1b6768fcec | |||
| a6fd42ac5f | |||
| ce17b5c984 | |||
| b46a4cfc2a | |||
| 00d8822583 | |||
| 8edda68e96 | |||
| ad9a47602d | |||
| b034d3c5b3 | |||
| dd08b3daa5 | |||
| 2bdad43371 | |||
| c05033d44c | |||
| 15c893de89 | |||
| 3e7dd15392 | |||
| 061f07ef9e | |||
| cb0d8c8f63 | |||
| f9d063bd38 | |||
| fab5571ea2 | |||
| a0acf878a2 | |||
| 21588a9c10 | |||
| fcbea2dafd | |||
| 1272b9db06 | |||
| 6e8d821853 | |||
| e64c0618c8 | |||
| 3af551583c | |||
| b274170cff | |||
| bd7d60021c | |||
| 12f443dd89 | |||
| 9afba7091c | |||
| 3d5799773e | |||
| 9c3ab588a4 | |||
| 3a26cc4b86 | |||
| 88f5af08d7 | |||
| 29e4817254 | |||
| c8b5901296 | |||
| f8cb997f3b | |||
| 1e8f5d8a72 | |||
| ab8b85127f | |||
| 52d5c7572c | |||
| 30661c2e2d | |||
| d74317c87a | |||
| 256993e25b | |||
| b18904415e | |||
| 18477c22b5 | |||
| 128d9e8dff | |||
| 6eb5384048 | |||
| 4e9463ee8a | |||
| baa3a16614 | |||
| 32502bef2c | |||
| c13971c0fe | |||
| 4e8893929f | |||
| 59c51869b3 | |||
| f6f68871d1 | |||
| 20a0a888c7 | |||
| d2e0532b12 | |||
| a8df5e3df9 | |||
| 73250bd746 | |||
| 956836458a | |||
| 2c88f78f69 | |||
| f85ee19fc0 | |||
| 2f415117f7 | |||
| 7c0e867226 | |||
| 0b7197118a | |||
| 77f8e26ffc | |||
| 16dbc5c404 | |||
| 73f7ea8f50 | |||
| 99e9ce5aca | |||
| bc06f7d444 | |||
| 2620d34b59 | |||
| 4b675dda1b | |||
| e982778526 | |||
| 10e5cd00f4 | |||
| 6bc53277ec | |||
| 7d4cbc30f1 | |||
| 2fcf3540dd | |||
| a45a984b32 | |||
| 1f647fa229 | |||
| c4d2f0c4fb | |||
| ac47f52eb0 | |||
| d2e75b4195 | |||
| bbc995c91e | |||
| 2322e6fd12 | |||
| b5722c3f2a | |||
| 2926ca7306 | |||
| c7893c8229 | |||
| 412bc7f71f | |||
| c147e6562d | |||
| bee25a4ca9 | |||
| 6d09041dce | |||
| 1a12d440b2 | |||
| 85f46f2b48 | |||
| 9637420756 | |||
| 6c68c461b1 | |||
| c830101ba6 | |||
| a1c0907811 | |||
| ffd829bb69 | |||
| 957bbe5edb | |||
| ce0ba4a681 | |||
| 8295083f05 | |||
| a2441a6f81 | |||
| c1f9af8544 | |||
| 033c2f93a8 | |||
| 83623a0fa6 | |||
| c85f80bbcf | |||
| c6995a0e7e | |||
| f18eda845b | |||
| 73e9473db4 | |||
| 7307128fc3 | |||
| 799ff5573f | |||
| 6f2c66afef | |||
| c39c7414cf | |||
| c33f250910 | |||
| c265f0206c | |||
| cfa1e3ed27 | |||
| 36dd1624d2 | |||
| a583b3c43c | |||
| 1738c3ad6c | |||
| 82026d8f7c | |||
| 1793dcb9a8 | |||
| cc7aaf3538 | |||
| a6285c7ef7 | |||
| f87381a910 | |||
| bd5cff4211 | |||
| 296f142036 | |||
| 4d991d0419 | |||
| a85bd6a49b | |||
| ef8e41a5c3 | |||
| 6f80da66d5 | |||
| a065867502 | |||
| b98d41357a | |||
| b2f4ef5d25 | |||
| bd8470afa8 | |||
| 7c5f8c6a4b | |||
| 6b27043f33 | |||
| ed5a510592 | |||
| 3abf187688 | |||
| 825a1a594d | |||
| 38e1b3fe49 | |||
| fd3e213222 | |||
| ef4e186e42 | |||
| 975ab31cc1 | |||
| 2699a0aec8 | |||
| 76ff5c4dd9 | |||
| b395527915 | |||
| 7741bb33b2 | |||
| f02b576cb8 | |||
| e0ef24fe68 | |||
| 70c665199f | |||
| a494a8fd6c | |||
| 6b577ee757 | |||
| 74e878207a | |||
| 3e66d403c8 | |||
| a7fa4dfdcf | |||
| 1e1039dd32 | |||
| 95d7b74e9e | |||
| b98589d3c7 | |||
| f997550e07 | |||
| d9f148ab2f | |||
| 9fdd7b5fc0 | |||
| e410896f5d | |||
| 10bf0411bb | |||
| 823468826d | |||
| b659c4acad | |||
| c69e5747a1 | |||
| 899f10533d | |||
| 5b2fdaeb00 | |||
| 5027ffda9b | |||
| 3ca5d4ab29 | |||
| e47dcec7cb | |||
| a32aef2246 | |||
| a5d9cc37e1 | |||
| 0dde1eaf73 | |||
| e3fe633267 | |||
| 3fa73e945e | |||
| 4038122f99 | |||
| 860a12b970 | |||
| 0a98cce8de | |||
| cceddba44e | |||
| 487b22f483 | |||
| da1d7df662 | |||
| 617619c92c | |||
| 61fa130d6d | |||
| c9899372d3 | |||
| e6f1a18844 | |||
| b8b9fa086a | |||
| 34270a961d | |||
| 48715051bb | |||
| efab108709 | |||
| ea6f0f893a | |||
| bfe2aa26a0 | |||
| 4bde81937d | |||
| 91116f7044 | |||
| 8246c8aaba | |||
| 8ca62c4a17 | |||
| 68e507a522 | |||
| 0394503c0b | |||
| e5935c75d1 | |||
| 2e49f4588a | |||
| 6657b3de2b | |||
| e3cb994e0e | |||
| ccf545d30c | |||
| 0d08a4e265 | |||
| ae6b992ae4 | |||
| 26d7c03a76 | |||
| bf23967470 | |||
| 8f6f41ed19 | |||
| 5e898c4661 | |||
| 79251c8ed6 | |||
| 03b552c601 | |||
| 1195474f88 | |||
| 4c038a868b | |||
| 7bfa2a56df | |||
| 47558f8b0a | |||
| e44219778e | |||
| 8d175754cd | |||
| dab4c6c424 | |||
| 9d590eaa6f | |||
| 759b197dc2 | |||
| e542724953 | |||
| 61a160fa62 | |||
| 8af4bc8eee | |||
| 45afc7e6aa | |||
| ff25a77159 | |||
| 4edd4932bb | |||
| baf95338a3 | |||
| 56464629bf | |||
| 6208c7e5df | |||
| b7f8086166 | |||
| f6afd87522 | |||
| c536dcf30f | |||
| 5db77fe40c | |||
| bf816cbc44 | |||
| 315889baf4 | |||
| 2f6fb7808a | |||
| f951c20586 | |||
| 033c3fc112 | |||
| 480d2757e7 | |||
| 92db329f40 | |||
| c488d8437e | |||
| 31feb7b7b0 | |||
| 622791f994 | |||
| 02e6eceb65 | |||
| 7c941e4697 | |||
| 7f7185172f | |||
| dbe2bcb599 | |||
| a48124a27a | |||
| e19d60ae55 | |||
| 030e6ebf00 | |||
| b855d760a8 | |||
| 5b8d05fc1e | |||
| b034b1a634 | |||
| 44ed01ff5d | |||
| 6061c63809 | |||
| ab159404a3 | |||
| bc79a5df7a | |||
| 43da912aad | |||
| 0fdcd1e1e8 | |||
| f172e0740b | |||
| 5263d78dce | |||
| 265ec12351 | |||
| 4572fca31f | |||
| b8df298953 | |||
| 884ec4bbb9 | |||
| 9d81a9788f | |||
| 2803dcf8b8 | |||
| 5f83679756 | |||
| bb1f457763 | |||
| e2e0df784b | |||
| cfc64dfad0 | |||
| eb095f9a10 | |||
| e9ee8b600b | |||
| 4b981668ca | |||
| 91380b0695 | |||
| dc1f0ffa4d | |||
| 5b9da15982 | |||
| e18d5b1aa0 | |||
| f8634a83fc | |||
| 99fa186d30 | |||
| c8ff06459f | |||
| d5c75ad19d | |||
| 17eac03ca3 | |||
| e90cb66686 | |||
| 9285d12333 | |||
| 610001a847 | |||
| 2419faf931 | |||
| ddbd1d8d75 | |||
| afb7442e8a | |||
| 1780fde458 | |||
| f0b16fe650 | |||
| d988054aca | |||
| fb0649ceee | |||
| 1743f342ce | |||
| 2c69bf0dad | |||
| 8bda0a1821 | |||
| fe6191f26d | |||
| 3077527601 | |||
| 8a71649e87 | |||
| 46aed59b8b | |||
| 5acf201067 | |||
| 4c7d4e7c53 | |||
| f0348a7cd8 | |||
| 6326cb3789 | |||
| 39ac5716c7 | |||
| f83ed508e3 | |||
| ab88937ac9 | |||
| 1cf58e3caf | |||
| 26f6f6d36e | |||
| 293dc92b41 | |||
| 6d05bc2f21 | |||
| 7ba295a339 | |||
| 458c9921c2 | |||
| deba8d0e4e | |||
| 2e1ba46430 | |||
| 67b1665b36 | |||
| 61a509e5d8 | |||
| 2186d2733f | |||
| b7efbdc323 | |||
| b00e053dab | |||
| b0172f4dd7 | |||
| 6f9f5f84c2 | |||
| 1de9f7eaf0 | |||
| b72794bea1 | |||
| 11357eb504 | |||
| 85346305e5 | |||
| d2a921ea80 | |||
| a4d23fe312 | |||
| 8cfb777fe1 | |||
| 8d08c3fd56 | |||
| 766a6b981d | |||
| 8b40134a47 | |||
| cc032c9c76 | |||
| 92b2608bfb | |||
| af87d28e33 | |||
| c5d714089f | |||
| 206c37f620 | |||
| c14d6a6dd6 | |||
| e32e5595c0 | |||
| 1684d2cfe6 | |||
| 6f66745ce3 | |||
| 5dbb9f28de | |||
| 762bd7febf | |||
| 162d43e1c9 | |||
| c26cf34397 | |||
| c6e7c5d371 | |||
| 7347322221 | |||
| 10cc162c4e | |||
| c23999acd1 | |||
| 3a3182862c | |||
| 0d432f6159 | |||
| 45458c2f2a | |||
| 472786fd23 | |||
| 0732bf64a7 | |||
| 7afc1eb56b | |||
| 0c2027fd77 | |||
| f9cbf2365d | |||
| 2d889568a5 | |||
| 55250a6de9 | |||
| 325b895d0b | |||
| 6ad2a63575 | |||
| 99dac17327 | |||
| 52992b31eb | |||
| 13e245b104 | |||
| 6bf6a17dc9 | |||
| 550e085b82 | |||
| 9fd951152a | |||
| 7debaa5504 | |||
| 6c76b1f6a8 | |||
| 31ab7538a4 | |||
| b0b5345e15 | |||
| c25c400c93 | |||
| d9638ad746 | |||
| ea8eeb02c3 | |||
| 5e4c423a7d | |||
| 7f75500023 | |||
| cdf5cad1e5 | |||
| 3a3f23b7a8 | |||
| 1f7107a7b6 | |||
| 7cb1e7394e | |||
| b91aaacad9 | |||
| 1f3c28992c | |||
| 5e02111600 | |||
| a3d348fdcd | |||
| c1d892c496 | |||
| 5b33c044c5 | |||
| c7ed3229d0 | |||
| 79cd91bd1c | |||
| b7fc0c79cb | |||
| fca1e0993b | |||
| 9f283322a2 | |||
| 09983efe05 | |||
| 76ff69e912 | |||
| 779602372a | |||
| d95e744494 | |||
| 1317f137c0 | |||
| 201bd4c5f6 | |||
| c12137c5a0 | |||
| 5adf61936b | |||
| 39b1e836bf | |||
| f076df77da | |||
| b3de01d171 | |||
| 90950075bf | |||
| a668ccfa90 | |||
| ad200e28c7 | |||
| 3424ba50bd | |||
| 79da321ddc | |||
| 293e61abeb | |||
| 438e2ade3a | |||
| bfee5b1cdb | |||
| 3eafe840f1 | |||
| e38493c308 | |||
| 5abf890b24 | |||
| 037d5a13cd | |||
| cd7388985e | |||
| 5ba08284f5 | |||
| 4a95efbfe6 | |||
| bab5bf58f8 | |||
| fca945f90e | |||
| 615e40dee2 | |||
| 4bd9b6b212 | |||
| d2b2a2eadb | |||
| e5e2f2efbd | |||
| d7c75ea5a5 | |||
| b9153269a4 | |||
| 5c39518921 | |||
| 6d2995ad68 | |||
| 1198cf73a9 | |||
| e8f80697f3 | |||
| 62ad49a6d3 | |||
| 41e83bbc09 | |||
| b6e43f78d0 | |||
| eab9603d8a | |||
| e7cbb8f50e | |||
| 016bb3636e | |||
| 57d0b4b5a3 | |||
| 99151b9c04 | |||
| 43e4603c55 | |||
| 3cf5cb945e | |||
| b3a4a41ad9 | |||
| 72c8008218 | |||
| 979df376d1 | |||
| 484ab9ed87 | |||
| ee36073428 | |||
| ab61e00cdf | |||
| fb51489436 | |||
| 1216855cfa | |||
| e3d11a4992 | |||
| 32dd686144 | |||
| 29ba7c9636 | |||
| a3511e8694 | |||
| 76fda3f0e6 | |||
| 81449faffd |
@@ -1 +0,0 @@
|
|||||||
*.qch filter=lfs diff=lfs merge=lfs -text
|
|
||||||
|
|||||||
@@ -1,67 +0,0 @@
|
|||||||
name: Auto-build doxygen docs
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- '**'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
doxygen:
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: 'recursive'
|
|
||||||
show-progress: ''
|
|
||||||
- name: Setup and run doxygen
|
|
||||||
run: sudo apt update && sudo apt install doxygen graphviz qhelpgenerator-qt5 -y
|
|
||||||
- name: Set up Git LFS
|
|
||||||
run: |
|
|
||||||
git lfs install
|
|
||||||
git lfs track "*.qch"
|
|
||||||
- name: Run doxygen
|
|
||||||
run: doxygen Doxyfile
|
|
||||||
- name: Create Pull Request
|
|
||||||
uses: peter-evans/create-pull-request@v8
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.MR_TOKEN }}
|
|
||||||
commit-message: update QCH file
|
|
||||||
committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
|
||||||
title: Update QCH Help file
|
|
||||||
body: |
|
|
||||||
- Updating QT Help file following commit ${{ github.sha }}.
|
|
||||||
- Auto-generated by [create-pull-request][1]
|
|
||||||
|
|
||||||
[1]: https://github.com/peter-evans/create-pull-request
|
|
||||||
branch: update-qch
|
|
||||||
labels: |
|
|
||||||
qch
|
|
||||||
cicd
|
|
||||||
delete-branch: true
|
|
||||||
add-paths: doc/*.qch
|
|
||||||
- uses: actions/upload-pages-artifact@v3
|
|
||||||
with:
|
|
||||||
path: ${{ github.workspace }}/doc/html/
|
|
||||||
deploy:
|
|
||||||
# Add a dependency to the build job
|
|
||||||
needs: doxygen
|
|
||||||
|
|
||||||
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
|
|
||||||
permissions:
|
|
||||||
pages: write # to deploy to Pages
|
|
||||||
id-token: write # to verify the deployment originates from an appropriate source
|
|
||||||
|
|
||||||
# Deploy to the github-pages environment
|
|
||||||
environment:
|
|
||||||
name: github-pages
|
|
||||||
url: ${{ steps.deployment.outputs.page_url }}
|
|
||||||
|
|
||||||
# Specify runner + deployment step
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Deploy to GitHub Pages
|
|
||||||
id: deployment
|
|
||||||
uses: actions/deploy-pages@v4 # or specific "vX.X.X" version tag for this action
|
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# Linux build, unit tests, and the IPC open-forwarding regression gate.
|
||||||
|
#
|
||||||
|
# The existing workflows build Windows and generate documentation; nothing
|
||||||
|
# builds QElectroTech on Linux or runs tests/ in CI. This does both.
|
||||||
|
#
|
||||||
|
# It runs inside an ubuntu:26.04 container rather than directly on the runner
|
||||||
|
# because the IPC gate below needs Qt 6.10.2. The ubuntu-latest image ships
|
||||||
|
# Qt 6.4, and whether the crash that gate covers reproduces on 6.4 has never
|
||||||
|
# been checked -- a gate that cannot go red is worse than no gate.
|
||||||
|
name: Linux build and tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [master]
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linux:
|
||||||
|
name: Build and test (Qt 6, Debug)
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: ubuntu:26.04
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Install build and test dependencies
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||||
|
ca-certificates build-essential cmake ninja-build git pkg-config \
|
||||||
|
qt6-base-dev qt6-base-private-dev qt6-tools-dev qt6-tools-dev-tools \
|
||||||
|
libqt6svg6-dev libqt6sql6-sqlite libsqlite3-dev libcups2-dev \
|
||||||
|
libxkbcommon-x11-0 \
|
||||||
|
xvfb openbox xdotool x11-utils
|
||||||
|
# extra-cmake-modules and the KF6 libraries are installed rather than
|
||||||
|
# left to FetchContent: without them CMake builds extra-cmake-modules
|
||||||
|
# from source, and its Qt Help documentation target then demands
|
||||||
|
# Qt6{Core,Gui,Widgets,DBus}Tools, failing the configure with an error
|
||||||
|
# that appears to be about QElectroTech and is not.
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||||
|
extra-cmake-modules libkf6coreaddons-dev libkf6widgetsaddons-dev \
|
||||||
|
qt6-svg-plugins
|
||||||
|
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Configure
|
||||||
|
# Debug, not Release. Whether a use-after-free faults depends on what
|
||||||
|
# the allocator does with the freed block: the commit before #868
|
||||||
|
# crashes every time built Debug and survives every time built
|
||||||
|
# -O3 -DNDEBUG, so a Release job would never catch a regression here.
|
||||||
|
run: |
|
||||||
|
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
||||||
|
cmake -B build -G Ninja \
|
||||||
|
-DCMAKE_BUILD_TYPE=Debug \
|
||||||
|
-DQT_VERSION_MAJOR=6
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build build --parallel $(nproc)
|
||||||
|
|
||||||
|
- name: Unit tests
|
||||||
|
run: xvfb-run -a ctest --test-dir build --output-on-failure
|
||||||
|
|
||||||
|
- name: IPC open-forwarding regression (#868)
|
||||||
|
# Fails the job only on an actual crash. An inconclusive run means the
|
||||||
|
# crash path was not exercised -- it proves nothing, which is not the
|
||||||
|
# same as a regression, and failing on it would make this job flaky
|
||||||
|
# rather than informative.
|
||||||
|
run: |
|
||||||
|
set +e
|
||||||
|
tests/ipc-regression/run.sh --binary build/qelectrotech
|
||||||
|
status=$?
|
||||||
|
set -e
|
||||||
|
case $status in
|
||||||
|
0) echo "::notice::IPC gate passed" ;;
|
||||||
|
2) echo "::warning::IPC gate inconclusive -- the crash path was not exercised, nothing was proven" ;;
|
||||||
|
*) echo "::error::IPC gate failed -- forwarded files are being opened inside the socket handler again"
|
||||||
|
exit 1 ;;
|
||||||
|
esac
|
||||||
@@ -2,7 +2,7 @@ name: Windows Build
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 2 * * 1' # Every Monday at 2:00 UTC
|
- cron: '0 2 1 * *' #
|
||||||
workflow_dispatch: # Manual trigger available at any time
|
workflow_dispatch: # Manual trigger available at any time
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
@@ -11,356 +11,7 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Job 1: Qt5 build (stable track)
|
# Job 1: Windows build (Qt6/KF6 — sole track since the Qt5 track was removed)
|
||||||
# =============================================================================
|
|
||||||
build-windows:
|
|
||||||
runs-on: windows-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v7
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Install MSYS2
|
|
||||||
uses: msys2/setup-msys2@v2
|
|
||||||
with:
|
|
||||||
msystem: UCRT64
|
|
||||||
update: true
|
|
||||||
cache: true
|
|
||||||
install: >-
|
|
||||||
git
|
|
||||||
mingw-w64-ucrt-x86_64-ccache
|
|
||||||
mingw-w64-ucrt-x86_64-gcc
|
|
||||||
mingw-w64-ucrt-x86_64-cmake
|
|
||||||
mingw-w64-ucrt-x86_64-ninja
|
|
||||||
mingw-w64-ucrt-x86_64-qt5-base
|
|
||||||
mingw-w64-ucrt-x86_64-qt5-svg
|
|
||||||
mingw-w64-ucrt-x86_64-qt5-tools
|
|
||||||
mingw-w64-ucrt-x86_64-qt5-translations
|
|
||||||
mingw-w64-ucrt-x86_64-qt5-pdf
|
|
||||||
mingw-w64-ucrt-x86_64-sqlite3
|
|
||||||
mingw-w64-ucrt-x86_64-pkg-config
|
|
||||||
mingw-w64-ucrt-x86_64-kwidgetsaddons
|
|
||||||
mingw-w64-ucrt-x86_64-kcoreaddons
|
|
||||||
mingw-w64-ucrt-x86_64-extra-cmake-modules
|
|
||||||
mingw-w64-ucrt-x86_64-nsis
|
|
||||||
mingw-w64-ucrt-x86_64-angleproject
|
|
||||||
|
|
||||||
- name: Cache ccache
|
|
||||||
uses: actions/cache@v5
|
|
||||||
with:
|
|
||||||
path: C:\Users\runneradmin\AppData\Local\ccache
|
|
||||||
key: ccache-windows-${{ github.ref_name }}-${{ github.sha }}
|
|
||||||
restore-keys: |
|
|
||||||
ccache-windows-${{ github.ref_name }}-
|
|
||||||
ccache-windows-
|
|
||||||
|
|
||||||
- name: Configure ccache
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
/ucrt64/bin/ccache --set-config=max_size=500M
|
|
||||||
/ucrt64/bin/ccache --set-config=compression=true
|
|
||||||
/ucrt64/bin/ccache -z
|
|
||||||
echo "=== ccache config ==="
|
|
||||||
/ucrt64/bin/ccache -p
|
|
||||||
|
|
||||||
- name: Patch NSIS Welcome page — fix title font size
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
WELCOME_NSH=$(find /ucrt64 -path "*/Modern UI 2/Pages/Welcome.nsh" | head -1)
|
|
||||||
if [ -z "$WELCOME_NSH" ]; then
|
|
||||||
echo "WARNING: Welcome.nsh not found, skipping font patch"
|
|
||||||
else
|
|
||||||
echo "Patching: $WELCOME_NSH"
|
|
||||||
sed -i '/WelcomePage\.Title\.Font/s/"[0-9]\+" "700"/"10" "700"/' "$WELCOME_NSH"
|
|
||||||
grep 'WelcomePage.Title.Font' "$WELCOME_NSH"
|
|
||||||
echo " OK font size patched to 10"
|
|
||||||
fi
|
|
||||||
|
|
||||||
FINISH_NSH=$(find /ucrt64 -path "*/Modern UI 2/Pages/Finish.nsh" | head -1)
|
|
||||||
if [ -z "$FINISH_NSH" ]; then
|
|
||||||
echo "WARNING: Finish.nsh not found, skipping font patch"
|
|
||||||
else
|
|
||||||
echo "Patching: $FINISH_NSH"
|
|
||||||
sed -i '/FinishPage\.Title\.Font/s/"[0-9]\+" "700"/"10" "700"/' "$FINISH_NSH"
|
|
||||||
grep 'FinishPage.Title.Font' "$FINISH_NSH"
|
|
||||||
echo " OK font size patched to 10"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Force Qt5 — remove Qt6 cmake + tools
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
rm -rf /ucrt64/lib/cmake/Qt6
|
|
||||||
pacman -R --noconfirm mingw-w64-ucrt-x86_64-qt6-tools 2>/dev/null || true
|
|
||||||
echo "=== windeployqt binaries ==="
|
|
||||||
ls /ucrt64/bin/windeployqt* || echo "NO windeployqt found!"
|
|
||||||
|
|
||||||
- name: Build with cmake
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
cd "$GITHUB_WORKSPACE"
|
|
||||||
mkdir build && cd build
|
|
||||||
NPROC=$(nproc)
|
|
||||||
echo "Available CPUs: $NPROC"
|
|
||||||
|
|
||||||
cmake -G Ninja \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DCMAKE_PREFIX_PATH=/ucrt64 \
|
|
||||||
-DQt5_DIR=/ucrt64/lib/cmake/Qt5 \
|
|
||||||
-DQT_VERSION_MAJOR=5 \
|
|
||||||
-DCMAKE_DISABLE_FIND_PACKAGE_Qt6=ON \
|
|
||||||
-DBUILD_TESTING=OFF \
|
|
||||||
-DCMAKE_POLICY_DEFAULT_CMP0077=NEW \
|
|
||||||
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
|
||||||
-DCMAKE_CXX_FLAGS="-DQET_EXPORT_PROJECT_DB" \
|
|
||||||
-DCMAKE_C_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
|
|
||||||
-DCMAKE_CXX_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
|
|
||||||
-DSQLite3_INCLUDE_DIR=/ucrt64/include \
|
|
||||||
-DSQLite3_LIBRARY=/ucrt64/lib/libsqlite3.dll.a \
|
|
||||||
..
|
|
||||||
ninja -j"$NPROC"
|
|
||||||
|
|
||||||
- name: Show ccache stats
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
echo "=== ccache statistics ==="
|
|
||||||
/ucrt64/bin/ccache -s
|
|
||||||
|
|
||||||
- name: Verify exe was built
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
EXE=$(find "$GITHUB_WORKSPACE/build" -maxdepth 3 -iname "qelectrotech.exe" | head -1)
|
|
||||||
if [ -z "$EXE" ]; then
|
|
||||||
echo "ERROR: no qelectrotech.exe found in build/"
|
|
||||||
find "$GITHUB_WORKSPACE/build" -maxdepth 3 -name "*.exe" || true
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
SIZE=$(stat -c%s "$EXE")
|
|
||||||
echo "Exe found: $EXE ($SIZE bytes)"
|
|
||||||
[ "$SIZE" -gt 100000 ] || { echo "ERROR: exe too small"; exit 1; }
|
|
||||||
|
|
||||||
- name: Deploy — copy exe + windeployqt + DLLs
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
NSIS_ROOT="$GITHUB_WORKSPACE/nsis_root"
|
|
||||||
FILES="$NSIS_ROOT/files"
|
|
||||||
BIN="$FILES/bin"
|
|
||||||
mkdir -p "$BIN"
|
|
||||||
|
|
||||||
EXE=$(find "$GITHUB_WORKSPACE/build" -maxdepth 3 -iname "qelectrotech.exe" | head -1)
|
|
||||||
echo "Copying exe: $EXE -> $BIN/QElectroTech.exe"
|
|
||||||
cp "$EXE" "$BIN/QElectroTech.exe"
|
|
||||||
|
|
||||||
cd "$BIN"
|
|
||||||
/ucrt64/bin/windeployqt-qt5 \
|
|
||||||
--release \
|
|
||||||
--no-translations \
|
|
||||||
--no-compiler-runtime \
|
|
||||||
./QElectroTech.exe || true
|
|
||||||
|
|
||||||
echo "=== 3-pass transitive DLL scan ==="
|
|
||||||
set +e
|
|
||||||
for PASS in 1 2 3; do
|
|
||||||
echo "-- Pass $PASS --"
|
|
||||||
for bin_file in "$BIN"/*.dll "$BIN"/*.exe "$BIN"/sqldrivers/*.dll "$BIN"/platforms/*.dll "$BIN"/imageformats/*.dll; do
|
|
||||||
[ -f "$bin_file" ] || continue
|
|
||||||
while IFS= read -r line; do
|
|
||||||
dll_path=$(echo "$line" | awk '{print $3}')
|
|
||||||
[ -f "$dll_path" ] || continue
|
|
||||||
dll_name=$(basename "$dll_path")
|
|
||||||
dst="$BIN/$dll_name"
|
|
||||||
if [ ! -f "$dst" ]; then
|
|
||||||
cp "$dll_path" "$dst"
|
|
||||||
echo " Copied (pass $PASS): $dll_name"
|
|
||||||
fi
|
|
||||||
done < <(ldd "$bin_file" 2>/dev/null | grep -i '/ucrt64/bin/')
|
|
||||||
done
|
|
||||||
done
|
|
||||||
set -e
|
|
||||||
|
|
||||||
DLL_COUNT=$(find "$BIN" -name "*.dll" | wc -l)
|
|
||||||
echo "=== $DLL_COUNT DLLs present after scan ==="
|
|
||||||
ls -lh "$BIN/QElectroTech.exe" || { echo "ERROR: exe missing from bin/"; exit 1; }
|
|
||||||
[ "$DLL_COUNT" -gt 5 ] || { echo "ERROR: too few DLLs"; exit 1; }
|
|
||||||
cd "$GITHUB_WORKSPACE"
|
|
||||||
|
|
||||||
cp /ucrt64/bin/libgcc_s_seh-1.dll "$BIN/"
|
|
||||||
cp /ucrt64/bin/libstdc++-6.dll "$BIN/"
|
|
||||||
cp /ucrt64/bin/libwinpthread-1.dll "$BIN/"
|
|
||||||
SQLITE=$(find /ucrt64/bin -name "libsqlite3*.dll" | head -1)
|
|
||||||
if [ -n "$SQLITE" ]; then
|
|
||||||
cp "$SQLITE" "$BIN/"
|
|
||||||
echo "SQLite3 copied: $(basename $SQLITE)"
|
|
||||||
else
|
|
||||||
echo "WARNING: libsqlite3 not found in /ucrt64/bin/"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cp "$GITHUB_WORKSPACE/build-aux/windows/QET64.nsi" "$NSIS_ROOT/"
|
|
||||||
cp "$GITHUB_WORKSPACE/build-aux/windows/lang_extra.nsh" "$NSIS_ROOT/"
|
|
||||||
cp "$GITHUB_WORKSPACE/build-aux/windows/lang_extra_fr.nsh" "$NSIS_ROOT/"
|
|
||||||
cp "$GITHUB_WORKSPACE/build-aux/windows/lang_extra_missing.nsh" "$NSIS_ROOT/"
|
|
||||||
cp -r "$GITHUB_WORKSPACE/build-aux/windows/nsis_base/." "$NSIS_ROOT/"
|
|
||||||
|
|
||||||
curl -fsSL \
|
|
||||||
"https://raw.githubusercontent.com/qelectrotech/qelectrotech-source-mirror/refs/heads/master/misc/Lancer%20QET.bat" \
|
|
||||||
-o "$FILES/Lancer QET.bat"
|
|
||||||
cp -r "$GITHUB_WORKSPACE/elements" "$FILES/elements" || true
|
|
||||||
cp -r "$GITHUB_WORKSPACE/titleblocks" "$FILES/titleblocks" || true
|
|
||||||
cp -r "$GITHUB_WORKSPACE/examples" "$FILES/examples" || true
|
|
||||||
cp -r "$GITHUB_WORKSPACE/fonts" "$FILES/fonts" || true
|
|
||||||
|
|
||||||
cp -r "$GITHUB_WORKSPACE/lang" "$FILES/lang" || true
|
|
||||||
find "$GITHUB_WORKSPACE/build" -name "*.qm" -exec cp {} "$FILES/lang/" \; 2>/dev/null || true
|
|
||||||
echo "=== .qm files in files/lang/ ==="
|
|
||||||
ls "$FILES/lang/"*.qm 2>/dev/null | wc -l || echo "0 .qm files"
|
|
||||||
|
|
||||||
for f in LICENSE ChangeLog CREDIT README ELEMENTS.LICENSE; do
|
|
||||||
cp "$GITHUB_WORKSPACE/$f" "$FILES/$f" 2>/dev/null || true
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "=== Verification of key files in files/ ==="
|
|
||||||
for f in LICENSE ChangeLog CREDIT README ELEMENTS.LICENSE \
|
|
||||||
qet_uninstall_file_associations.reg register_filetypes.bat "Lancer QET.bat"; do
|
|
||||||
[ -f "$FILES/$f" ] \
|
|
||||||
&& echo " OK : $f" \
|
|
||||||
|| echo " MISSING: $f"
|
|
||||||
done
|
|
||||||
for d in ico elements lang titleblocks fonts examples bin; do
|
|
||||||
[ -d "$FILES/$d" ] \
|
|
||||||
&& echo " OK : $d/" \
|
|
||||||
|| echo " MISSING: $d/"
|
|
||||||
done
|
|
||||||
|
|
||||||
- name: Extract version for installer name
|
|
||||||
shell: msys2 {0}
|
|
||||||
id: qet_version
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
GITCOMMIT=$(git -C "$GITHUB_WORKSPACE" rev-parse --short HEAD)
|
|
||||||
|
|
||||||
A=$(git -C "$GITHUB_WORKSPACE" rev-list HEAD --count)
|
|
||||||
HEAD=$(( A + 473 ))
|
|
||||||
|
|
||||||
VERSION=$(grep 'return QVersionNumber{' "$GITHUB_WORKSPACE/sources/qetversion.cpp" \
|
|
||||||
| head -1 \
|
|
||||||
| awk -F '{' '{ print $2 }' \
|
|
||||||
| awk -F '}' '{ print $1 }' \
|
|
||||||
| sed -e 's/,/./g' -e 's/ //g')
|
|
||||||
[ -z "$VERSION" ] && VERSION="dev"
|
|
||||||
|
|
||||||
FULL_VERSION="${VERSION}-r${HEAD}-${GITCOMMIT}_x86_64-win64"
|
|
||||||
echo "version=$FULL_VERSION" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "base_version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "gitcommit=$GITCOMMIT" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "head=$HEAD" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "VERSION : $VERSION"
|
|
||||||
echo "GITCOMMIT : $GITCOMMIT"
|
|
||||||
echo "HEAD (rev) : $HEAD"
|
|
||||||
echo "FULL : $FULL_VERSION"
|
|
||||||
|
|
||||||
- name: Patch QET64.nsi — version + exe name + absolute paths
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
VERSION="${{ steps.qet_version.outputs.version }}"
|
|
||||||
NSI="$GITHUB_WORKSPACE/nsis_root/QET64.nsi"
|
|
||||||
FILES_WIN=$(cygpath -w "$GITHUB_WORKSPACE/nsis_root/files")
|
|
||||||
SCRIPT="$GITHUB_WORKSPACE/build-aux/windows/patch_nsi.py"
|
|
||||||
|
|
||||||
python3 "$SCRIPT" "$NSI" "$VERSION" "$FILES_WIN"
|
|
||||||
|
|
||||||
echo "=== Verification ==="
|
|
||||||
grep 'SOFT_VERSION' "$NSI" | head -1
|
|
||||||
grep -m2 'nsis_root' "$NSI" | head -2
|
|
||||||
echo "=== Contents of nsis_root/files/ ==="
|
|
||||||
ls "$GITHUB_WORKSPACE/nsis_root/files/"
|
|
||||||
|
|
||||||
- name: Build NSIS installer
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
NSIS_ROOT="$GITHUB_WORKSPACE/nsis_root"
|
|
||||||
cd "$NSIS_ROOT"
|
|
||||||
echo "=== CWD : $(pwd) ==="
|
|
||||||
MSYS2_ARG_CONV_EXCL="*" makensis /V4 QET64.nsi
|
|
||||||
RC=$?
|
|
||||||
echo "=== Contents of nsis_root after makensis ==="
|
|
||||||
ls "$NSIS_ROOT/"
|
|
||||||
[ $RC -eq 0 ] || { echo "ERROR: makensis failed (exit $RC)"; exit 1; }
|
|
||||||
|
|
||||||
- name: Move installer to dist/
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
mkdir -p "$GITHUB_WORKSPACE/dist"
|
|
||||||
INSTALLER=$(find "$GITHUB_WORKSPACE/nsis_root" -maxdepth 1 -iname "installer_*.exe" | head -1)
|
|
||||||
if [ -z "$INSTALLER" ]; then
|
|
||||||
echo "ERROR: no installer .exe found in nsis_root/"
|
|
||||||
ls "$GITHUB_WORKSPACE/nsis_root/"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Moving: $INSTALLER -> dist/"
|
|
||||||
mv "$INSTALLER" "$GITHUB_WORKSPACE/dist/"
|
|
||||||
|
|
||||||
- name: Upload build logs on failure
|
|
||||||
if: failure()
|
|
||||||
uses: actions/upload-artifact@v7
|
|
||||||
with:
|
|
||||||
name: build-logs
|
|
||||||
path: |
|
|
||||||
build/CMakeFiles/*.log
|
|
||||||
nsis_root/files/bin/
|
|
||||||
if-no-files-found: warn
|
|
||||||
|
|
||||||
- name: Zip portable (readytouse)
|
|
||||||
id: zip_portable
|
|
||||||
shell: pwsh
|
|
||||||
run: |
|
|
||||||
$version = "${{ steps.qet_version.outputs.base_version }}"
|
|
||||||
$head = "${{ steps.qet_version.outputs.head }}"
|
|
||||||
$zipName = "qelectrotech-${version}+git${head}-x86-win64-readytouse.zip"
|
|
||||||
$src = "$env:GITHUB_WORKSPACE\nsis_root\files"
|
|
||||||
$dst = "$env:GITHUB_WORKSPACE\dist\$zipName"
|
|
||||||
$7z = "C:\Program Files\7-Zip\7z.exe"
|
|
||||||
|
|
||||||
New-Item -ItemType Directory -Force -Path "$env:GITHUB_WORKSPACE\dist" | Out-Null
|
|
||||||
& $7z a -tzip -mx=5 -mmt=on $dst "$src\*"
|
|
||||||
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
||||||
|
|
||||||
$sizeMB = [math]::Round((Get-Item $dst).Length / 1MB, 1)
|
|
||||||
Write-Output "ZIP created: $zipName ($sizeMB MB)"
|
|
||||||
"zip_name=$zipName" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
|
||||||
|
|
||||||
- name: Upload portable (files/ without installer)
|
|
||||||
uses: actions/upload-artifact@v7
|
|
||||||
with:
|
|
||||||
name: qelectrotech-${{ steps.qet_version.outputs.base_version }}+git${{ steps.qet_version.outputs.head }}-x86-win64-readytouse
|
|
||||||
path: dist/${{ steps.zip_portable.outputs.zip_name }}
|
|
||||||
retention-days: 14
|
|
||||||
|
|
||||||
- name: Upload NSIS installer
|
|
||||||
uses: actions/upload-artifact@v7
|
|
||||||
with:
|
|
||||||
name: qelectrotech-windows-installer
|
|
||||||
path: dist/Installer_*.exe
|
|
||||||
retention-days: 14
|
|
||||||
|
|
||||||
- name: Upload portable (nom fixe pour le workflow MSI)
|
|
||||||
uses: actions/upload-artifact@v7
|
|
||||||
with:
|
|
||||||
name: qelectrotech-windows-portable
|
|
||||||
path: nsis_root/files/
|
|
||||||
retention-days: 14
|
|
||||||
|
|
||||||
# =============================================================================
|
|
||||||
# Job 2: Qt6 build (EXPERIMENTAL track)
|
|
||||||
#
|
#
|
||||||
# Version label: the C++ source (sources/qetversion.cpp) intentionally stays
|
# Version label: the C++ source (sources/qetversion.cpp) intentionally stays
|
||||||
# Qt-agnostic — QT_VERSION-based detection inside the binary proved unreliable
|
# Qt-agnostic — QT_VERSION-based detection inside the binary proved unreliable
|
||||||
@@ -368,6 +19,9 @@ jobs:
|
|||||||
# certainty which Qt major version it configured (-DQT_VERSION_MAJOR=6), so it
|
# certainty which Qt major version it configured (-DQT_VERSION_MAJOR=6), so it
|
||||||
# is safe to label the *package* "0.200.1" at this level, without touching
|
# is safe to label the *package* "0.200.1" at this level, without touching
|
||||||
# QetVersion::currentVersion() or making the binary self-detect its Qt build.
|
# QetVersion::currentVersion() or making the binary self-detect its Qt build.
|
||||||
|
#
|
||||||
|
# Job id kept as "build-windows-qt6" (not renamed to "build-windows") in case
|
||||||
|
# branch protection / required status checks reference this exact job name.
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
build-windows-qt6:
|
build-windows-qt6:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
@@ -397,8 +51,12 @@ jobs:
|
|||||||
mingw-w64-ucrt-x86_64-qt6-pdf
|
mingw-w64-ucrt-x86_64-qt6-pdf
|
||||||
mingw-w64-ucrt-x86_64-sqlite3
|
mingw-w64-ucrt-x86_64-sqlite3
|
||||||
mingw-w64-ucrt-x86_64-pkg-config
|
mingw-w64-ucrt-x86_64-pkg-config
|
||||||
|
mingw-w64-ucrt-x86_64-kwidgetsaddons
|
||||||
|
mingw-w64-ucrt-x86_64-kcoreaddons
|
||||||
|
mingw-w64-ucrt-x86_64-extra-cmake-modules
|
||||||
mingw-w64-ucrt-x86_64-nsis
|
mingw-w64-ucrt-x86_64-nsis
|
||||||
mingw-w64-ucrt-x86_64-angleproject
|
mingw-w64-ucrt-x86_64-angleproject
|
||||||
|
mingw-w64-ucrt-x86_64-qt6-declarative
|
||||||
|
|
||||||
- name: Cache ccache
|
- name: Cache ccache
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v5
|
||||||
@@ -456,11 +114,12 @@ jobs:
|
|||||||
-DCMAKE_PREFIX_PATH=/ucrt64 \
|
-DCMAKE_PREFIX_PATH=/ucrt64 \
|
||||||
-DQt6_DIR=/ucrt64/lib/cmake/Qt6 \
|
-DQt6_DIR=/ucrt64/lib/cmake/Qt6 \
|
||||||
-DQT_VERSION_MAJOR=6 \
|
-DQT_VERSION_MAJOR=6 \
|
||||||
-DBUILD_WITH_KF5=OFF \
|
-DBUILD_WITH_KF=ON \
|
||||||
|
-DBUILD_KF=OFF \
|
||||||
-DPACKAGE_TESTS=OFF \
|
-DPACKAGE_TESTS=OFF \
|
||||||
-DCMAKE_POLICY_DEFAULT_CMP0077=NEW \
|
-DCMAKE_POLICY_DEFAULT_CMP0077=NEW \
|
||||||
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
||||||
-DCMAKE_CXX_FLAGS="-DQET_EXPORT_PROJECT_DB" \
|
-DQET_EXPORT_PROJECT_DB=ON \
|
||||||
-DCMAKE_C_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
|
-DCMAKE_C_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
|
||||||
-DCMAKE_CXX_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
|
-DCMAKE_CXX_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
|
||||||
-DSQLite3_INCLUDE_DIR=/ucrt64/include \
|
-DSQLite3_INCLUDE_DIR=/ucrt64/include \
|
||||||
@@ -559,10 +218,71 @@ jobs:
|
|||||||
cp -r "$GITHUB_WORKSPACE/examples" "$FILES/examples" || true
|
cp -r "$GITHUB_WORKSPACE/examples" "$FILES/examples" || true
|
||||||
cp -r "$GITHUB_WORKSPACE/fonts" "$FILES/fonts" || true
|
cp -r "$GITHUB_WORKSPACE/fonts" "$FILES/fonts" || true
|
||||||
|
|
||||||
cp -r "$GITHUB_WORKSPACE/lang" "$FILES/lang" || true
|
# --- Translations ---
|
||||||
find "$GITHUB_WORKSPACE/build" -name "*.qm" -exec cp {} "$FILES/lang/" \; 2>/dev/null || true
|
# Since PR #751 the .qm files are no longer tracked in git: lrelease
|
||||||
echo "=== .qm files in files/lang/ ==="
|
# generates them in build/lang/ (OUTPUT_LOCATION "lang", relative to
|
||||||
ls "$FILES/lang/"*.qm 2>/dev/null | wc -l || echo "0 .qm files"
|
# the build dir). Expected set = the .ts listed in TS_FILES
|
||||||
|
# (cmake/qet_compilation_vars.cmake): a missing .qm fails the job
|
||||||
|
# instead of silently shipping an untranslated build; a .ts present
|
||||||
|
# in lang/ but not listed in TS_FILES only raises a warning.
|
||||||
|
# find/grep only, no shell glob: $GITHUB_WORKSPACE is a Windows path
|
||||||
|
# (D:\a\...) and its backslashes break glob patterns.
|
||||||
|
QM_SRC="$GITHUB_WORKSPACE/build/lang"
|
||||||
|
mkdir -p "$FILES/lang"
|
||||||
|
TS_LISTED=$(grep -o 'lang/qet_[A-Za-z_]*\.ts' "$GITHUB_WORKSPACE/cmake/qet_compilation_vars.cmake" \
|
||||||
|
| sed -e 's#^lang/##' -e 's#\.ts$##' | LC_ALL=C sort -u || true)
|
||||||
|
[ -n "$TS_LISTED" ] || { echo "ERROR: cannot read TS_FILES from cmake/qet_compilation_vars.cmake"; exit 1; }
|
||||||
|
TS_PRESENT=$(find "$GITHUB_WORKSPACE/lang" -maxdepth 1 -name 'qet_*.ts' -exec basename {} .ts \; | LC_ALL=C sort)
|
||||||
|
UNLISTED=$(LC_ALL=C comm -13 <(echo "$TS_LISTED") <(echo "$TS_PRESENT"))
|
||||||
|
if [ -n "$UNLISTED" ]; then
|
||||||
|
echo "::warning::.ts files not in TS_FILES, no .qm built:" $UNLISTED
|
||||||
|
fi
|
||||||
|
find "$QM_SRC" -maxdepth 1 -name 'qet_*.qm' -exec cp {} "$FILES/lang/" \; 2>/dev/null || true
|
||||||
|
QM_PRESENT=$(find "$FILES/lang" -maxdepth 1 -name 'qet_*.qm' -exec basename {} .qm \; | LC_ALL=C sort)
|
||||||
|
MISSING=$(LC_ALL=C comm -23 <(echo "$TS_LISTED") <(echo "$QM_PRESENT"))
|
||||||
|
QM_COUNT=$(printf '%s\n' "$QM_PRESENT" | grep -c . || true)
|
||||||
|
TS_COUNT=$(printf '%s\n' "$TS_LISTED" | grep -c .)
|
||||||
|
echo "=== $QM_COUNT .qm files copied to files/lang/ (expected: $TS_COUNT) ==="
|
||||||
|
if [ -n "$MISSING" ]; then
|
||||||
|
echo "ERROR: missing translations:" $MISSING
|
||||||
|
find "$GITHUB_WORKSPACE/build" -name '*.qm' || true
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Qt's own translations (OK/Cancel buttons, standard dialogs...):
|
||||||
|
# they come from qtbase_XX.qm, not from QET's .ts, and windeployqt
|
||||||
|
# runs with --no-translations. QETApp::setLanguage() falls back to
|
||||||
|
# lang/qt_XX.qm, so copy each qtbase_XX.qm there under that name
|
||||||
|
# (qtbase_XX.qm is standalone, unlike Qt's qt_XX.qm meta catalogs).
|
||||||
|
QT_TR_DIR=/ucrt64/share/qt6/translations
|
||||||
|
if [ ! -d "$QT_TR_DIR" ]; then
|
||||||
|
QT_TR_DIR=$(cygpath -u "$(/ucrt64/bin/qtpaths6 --query QT_INSTALL_TRANSLATIONS 2>/dev/null)" 2>/dev/null || true)
|
||||||
|
fi
|
||||||
|
find "$QT_TR_DIR" -maxdepth 1 -name 'qtbase_*.qm' 2>/dev/null | while read -r f; do
|
||||||
|
l=$(basename "$f" .qm)
|
||||||
|
cp "$f" "$FILES/lang/qt_${l#qtbase_}.qm"
|
||||||
|
done
|
||||||
|
# QET languages Qt only ships with a region (pt -> pt_PT, zh -> zh_CN):
|
||||||
|
# QTranslator only shortens codes (fr_FR -> fr), it never extends them.
|
||||||
|
for q in $TS_LISTED; do
|
||||||
|
l=${q#qet_}
|
||||||
|
if [ ! -e "$FILES/lang/qt_$l.qm" ]; then
|
||||||
|
if [ -e "$QT_TR_DIR/qtbase_${l}_${l^^}.qm" ]; then
|
||||||
|
alt="$QT_TR_DIR/qtbase_${l}_${l^^}.qm"
|
||||||
|
else
|
||||||
|
alt=$(find "$QT_TR_DIR" -maxdepth 1 -name "qtbase_${l}_*.qm" 2>/dev/null | LC_ALL=C sort | head -1 || true)
|
||||||
|
fi
|
||||||
|
if [ -n "$alt" ]; then
|
||||||
|
cp "$alt" "$FILES/lang/qt_$l.qm"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
QT_QM_COUNT=$(find "$FILES/lang" -maxdepth 1 -name 'qt_*.qm' | wc -l)
|
||||||
|
echo "=== $QT_QM_COUNT Qt translation files (qt_*.qm) copied from $QT_TR_DIR ==="
|
||||||
|
if [ "$QT_QM_COUNT" -eq 0 ]; then
|
||||||
|
echo "ERROR: no qtbase_*.qm found in '$QT_TR_DIR' (mingw-w64-ucrt-x86_64-qt6-translations installed?)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
for f in LICENSE ChangeLog CREDIT README ELEMENTS.LICENSE; do
|
for f in LICENSE ChangeLog CREDIT README ELEMENTS.LICENSE; do
|
||||||
cp "$GITHUB_WORKSPACE/$f" "$FILES/$f" 2>/dev/null || true
|
cp "$GITHUB_WORKSPACE/$f" "$FILES/$f" 2>/dev/null || true
|
||||||
@@ -594,8 +314,8 @@ jobs:
|
|||||||
|
|
||||||
# Deliberately NOT parsed from sources/qetversion.cpp: the CI job
|
# Deliberately NOT parsed from sources/qetversion.cpp: the CI job
|
||||||
# already knows for certain it configured Qt6 (-DQT_VERSION_MAJOR=6),
|
# already knows for certain it configured Qt6 (-DQT_VERSION_MAJOR=6),
|
||||||
# so the "0.200.1" experimental-track label is set here explicitly
|
# so the "0.200.1" version label is set here explicitly rather than
|
||||||
# rather than relying on in-binary Qt version detection.
|
# relying on in-binary Qt version detection.
|
||||||
VERSION="0.200.1"
|
VERSION="0.200.1"
|
||||||
|
|
||||||
FULL_VERSION="${VERSION}-qt6-r${HEAD}-${GITCOMMIT}_x86_64-win64"
|
FULL_VERSION="${VERSION}-qt6-r${HEAD}-${GITCOMMIT}_x86_64-win64"
|
||||||
@@ -687,60 +407,64 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: qelectrotech-${{ steps.qet_version.outputs.base_version }}+git${{ steps.qet_version.outputs.head }}-x86-win64-readytouse
|
name: qelectrotech-${{ steps.qet_version.outputs.base_version }}+git${{ steps.qet_version.outputs.head }}-x86-win64-readytouse
|
||||||
path: dist/${{ steps.zip_portable.outputs.zip_name }}
|
path: dist/${{ steps.zip_portable.outputs.zip_name }}
|
||||||
retention-days: 14
|
retention-days: 40
|
||||||
|
|
||||||
- name: Upload NSIS installer
|
- name: Upload NSIS installer
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: qelectrotech-windows-installer-qt6
|
name: qelectrotech-windows-installer-qt6
|
||||||
path: dist/Installer_*.exe
|
path: dist/Installer_*.exe
|
||||||
retention-days: 14
|
retention-days: 40
|
||||||
|
|
||||||
- name: Upload portable (nom fixe pour le workflow MSI)
|
- name: Upload portable (nom fixe pour le workflow MSI)
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: qelectrotech-windows-portable-qt6
|
name: qelectrotech-windows-portable-qt6
|
||||||
path: nsis_root/files/
|
path: nsis_root/files/
|
||||||
retention-days: 14
|
retention-days: 40
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Job 3 : Publie les assets nightly (exe + zip, Qt5 et Qt6) sur la release
|
# Job 2 : Publie les assets nightly (exe + zip) sur la release
|
||||||
# Ne tourne que sur push master (pas sur les PRs)
|
# Ne tourne que sur push master (pas sur les PRs)
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
publish-nightly-assets:
|
publish-nightly-assets:
|
||||||
needs: [build-windows, build-windows-qt6]
|
needs: [build-windows-qt6]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Download installer artifacts (Qt5 + Qt6)
|
- name: Download installer artifact
|
||||||
uses: actions/download-artifact@v8
|
uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
pattern: qelectrotech-windows-installer*
|
pattern: qelectrotech-windows-installer*
|
||||||
path: downloaded/installer/
|
path: downloaded/installer/
|
||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
|
|
||||||
- name: Download portable artifacts (Qt5 + Qt6)
|
- name: Download portable artifact
|
||||||
uses: actions/download-artifact@v8
|
uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
pattern: qelectrotech-*-readytouse
|
pattern: qelectrotech-*-readytouse
|
||||||
path: downloaded/portable/
|
path: downloaded/portable/
|
||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
|
|
||||||
- name: Delete old nightly assets (.exe and .zip)
|
# Only Qt6-tagged assets are deleted/replaced here. Assets without "qt6"
|
||||||
|
# in the name are the frozen Qt5 legacy build (last one ever published,
|
||||||
|
# before the Qt5 CI job was removed) — deliberately left untouched so
|
||||||
|
# they stay downloadable indefinitely instead of disappearing.
|
||||||
|
- name: Delete old nightly Qt6 assets (.exe and .zip)
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
REPO: ${{ github.repository }}
|
REPO: ${{ github.repository }}
|
||||||
run: |
|
run: |
|
||||||
gh release view nightly --repo "$REPO" --json assets \
|
gh release view nightly --repo "$REPO" --json assets \
|
||||||
--jq '.assets[] | select(.name | test("\\.(exe|zip)$")) | .name' \
|
--jq '.assets[] | select(.name | test("qt6")) | select(.name | test("\\.(exe|zip)$")) | .name' \
|
||||||
| while read -r name; do
|
| while read -r name; do
|
||||||
echo "Deleting old asset: $name"
|
echo "Deleting old Qt6 asset: $name"
|
||||||
gh release delete-asset nightly "$name" --repo "$REPO" --yes
|
gh release delete-asset nightly "$name" --repo "$REPO" --yes
|
||||||
done
|
done
|
||||||
echo "Old .exe and .zip assets deleted."
|
echo "Old Qt6 .exe and .zip assets deleted (legacy Qt5 assets left untouched)."
|
||||||
|
|
||||||
- name: Update nightly release
|
- name: Update nightly release
|
||||||
uses: softprops/action-gh-release@v3
|
uses: softprops/action-gh-release@v3
|
||||||
@@ -759,8 +483,7 @@ jobs:
|
|||||||
> ⚠️ This is a development version; it introduces new features you want, but may cause bugs that have not yet been identified yet.
|
> ⚠️ This is a development version; it introduces new features you want, but may cause bugs that have not yet been identified yet.
|
||||||
> For stable releases, see the [Releases page](https://github.com/${{ github.repository }}/releases).
|
> For stable releases, see the [Releases page](https://github.com/${{ github.repository }}/releases).
|
||||||
|
|
||||||
> 🧪 **Qt6 builds are experimental.** Files tagged `-qt6-` are built against Qt6 and are not yet
|
> 🗄️ Files without `-qt6-` in the name are the last Qt5 build ever published (frozen, unmaintained). Files tagged `-qt6-` are the actively maintained build.
|
||||||
> as tested as the Qt5 track. Expect rough edges; report issues clearly labelled "Qt6".
|
|
||||||
prerelease: true
|
prerelease: true
|
||||||
make_latest: false
|
make_latest: false
|
||||||
files: |
|
files: |
|
||||||
@@ -769,4 +492,4 @@ jobs:
|
|||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
# GitHub Pages is generated and deployed by windows-msi.yml
|
# GitHub Pages is generated and deployed by windows-msi.yml
|
||||||
# after the MSI upload, so that all URLs (exe/zip/msi, Qt5+Qt6) are known.
|
# after the MSI upload, so that all URLs (exe/zip/msi) are known.
|
||||||
|
|||||||
@@ -25,26 +25,27 @@ jobs:
|
|||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
# Single-entry matrix kept on purpose (rather than flattening the job):
|
||||||
|
# matrix.flavor is used as part of the MSI ProductCode seed, so changing
|
||||||
|
# it would generate a new ProductCode and break upgrade detection for
|
||||||
|
# existing installs. Keeping "qt6" here preserves continuity.
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- flavor: qt5
|
|
||||||
portable_artifact: qelectrotech-windows-portable
|
|
||||||
version_source: qetversion # parsed from sources/qetversion.cpp
|
|
||||||
label_suffix: ""
|
|
||||||
experimental: false
|
|
||||||
- flavor: qt6
|
- flavor: qt6
|
||||||
portable_artifact: qelectrotech-windows-portable-qt6
|
portable_artifact: qelectrotech-windows-portable-qt6
|
||||||
version_source: hardcoded # see note in "Extract version" step
|
version_source: hardcoded # see note in "Extract version" step
|
||||||
label_suffix: "-qt6-EXPERIMENTAL"
|
label_suffix: "-qt6"
|
||||||
experimental: true
|
experimental: false
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
pages: write
|
pages: write
|
||||||
id-token: write # Required by SignPath
|
id-token: write # Required by SignPath
|
||||||
|
|
||||||
|
env:
|
||||||
|
SIGNPATH_API_TOKEN: ${{ secrets.SIGNPATH_API_TOKEN }}
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
qt5_msi: ${{ steps.export.outputs.msi_name_qt5 }}
|
|
||||||
qt6_msi: ${{ steps.export.outputs.msi_name_qt6 }}
|
qt6_msi: ${{ steps.export.outputs.msi_name_qt6 }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -58,28 +59,50 @@ jobs:
|
|||||||
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
# 2. Download the portable artifact for this flavor
|
# 2. Download the portable artifact for this flavor
|
||||||
|
#
|
||||||
|
# Wrapped in nick-fields/retry: actions/download-artifact@v8 has
|
||||||
|
# shown repeated "Artifact download failed after 5 retries"
|
||||||
|
# failures on this cross-workflow download (via run-id) — not a
|
||||||
|
# real content/digest problem, just flaky Azure blob delivery.
|
||||||
|
# Two separate occurrences observed within days of each other
|
||||||
|
# (different artifact IDs/digests, same failure signature), each
|
||||||
|
# one enough to fail build-msi outright and block the rest of the
|
||||||
|
# pipeline. Retrying the whole download 3x is cheap insurance.
|
||||||
|
# Switched to `gh run download` here because nick-fields/retry
|
||||||
|
# can only retry a shell command, not re-invoke a `uses:` step.
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
- name: Download portable artifact
|
- name: Download portable artifact
|
||||||
uses: actions/download-artifact@v8
|
uses: nick-fields/retry@v3
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.portable_artifact }}
|
timeout_minutes: 10
|
||||||
path: artifact\files
|
max_attempts: 3
|
||||||
# workflow_run => use the triggering run's ID
|
retry_wait_seconds: 30
|
||||||
# workflow_dispatch => use input run_id if provided, otherwise current run
|
shell: pwsh
|
||||||
run-id: ${{ github.event.workflow_run.id || github.event.inputs.run_id || github.run_id }}
|
command: |
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
if (Test-Path "artifact\files") { Remove-Item -Recurse -Force "artifact\files" }
|
||||||
repository: ${{ github.repository }}
|
New-Item -ItemType Directory -Force -Path "artifact\files" | Out-Null
|
||||||
|
|
||||||
|
$runId = "${{ github.event.workflow_run.id || github.event.inputs.run_id || github.run_id }}"
|
||||||
|
gh run download $runId `
|
||||||
|
--repo "${{ github.repository }}" `
|
||||||
|
--name "${{ matrix.portable_artifact }}" `
|
||||||
|
--dir "artifact\files"
|
||||||
|
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
Write-Error "gh run download failed (exit $LASTEXITCODE)"
|
||||||
|
exit $LASTEXITCODE
|
||||||
|
}
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
# 3. Extract version
|
# 3. Extract version
|
||||||
# Qt5: parsed from sources/qetversion.cpp (single source of truth
|
|
||||||
# for the software's own reported version).
|
|
||||||
# Qt6: hardcoded "0.200.1" here — deliberately NOT parsed from the
|
# Qt6: hardcoded "0.200.1" here — deliberately NOT parsed from the
|
||||||
# binary/source, since Qt-version self-detection inside the
|
# binary/source, since Qt-version self-detection inside the
|
||||||
# compiled code proved unreliable (see commit e1aa65f). The CI
|
# compiled code proved unreliable (see commit e1aa65f). The CI
|
||||||
# matrix entry already knows for certain which flavor it is
|
# matrix entry already knows for certain which flavor it is
|
||||||
# packaging, so the experimental-track label is set explicitly
|
# packaging, so the version label is set explicitly at the
|
||||||
# at the packaging level instead.
|
# packaging level instead.
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
- name: Extract version
|
- name: Extract version
|
||||||
id: version
|
id: version
|
||||||
@@ -125,10 +148,9 @@ jobs:
|
|||||||
Write-Host "Version MSI : $verMsi"
|
Write-Host "Version MSI : $verMsi"
|
||||||
Write-Host "Version display : $verDisplay"
|
Write-Host "Version display : $verDisplay"
|
||||||
|
|
||||||
# Qt platform argument: only Qt5 needs the QTBUG-83161 font-rendering
|
# Qt platform argument: kept from the Qt5 era (QTBUG-83161
|
||||||
# workaround (GDI backend). Qt6 uses DirectWrite by default and does
|
# font-rendering workaround, GDI backend). Qt6 uses DirectWrite by
|
||||||
# not need it. Computed once here so both the bundled "Lancer QET.bat"
|
# default and does not need it, so this always resolves empty now.
|
||||||
# and the MSI shortcuts (wix build -d QtPlatformArgs=...) stay in sync.
|
|
||||||
if ("${{ matrix.flavor }}" -eq "qt5") {
|
if ("${{ matrix.flavor }}" -eq "qt5") {
|
||||||
$qtArgs = "-platform windows:fontengine=freetype"
|
$qtArgs = "-platform windows:fontengine=freetype"
|
||||||
} else {
|
} else {
|
||||||
@@ -228,10 +250,10 @@ jobs:
|
|||||||
Write-Host "Lancer QET.bat replaced for MSI installation (qtArgs: '$qtArgs')."
|
Write-Host "Lancer QET.bat replaced for MSI installation (qtArgs: '$qtArgs')."
|
||||||
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
# 9. Build the MSI (unsigned)
|
# 9. Build the MSI (unsigned at this stage — signing happens below)
|
||||||
# Qt6 (experimental) uses a distinct ProductCode seed so it never
|
# Qt6 keeps its own ProductCode seed (distinct from the retired Qt5
|
||||||
# collides with / upgrades over the Qt5 MSI — they must be able to
|
# MSI), so a machine that still has the old Qt5 MSI installed gets a
|
||||||
# coexist as clearly separate installs.
|
# separate, coexisting install rather than an unexpected upgrade.
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
- name: Build MSI
|
- name: Build MSI
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
@@ -289,12 +311,20 @@ jobs:
|
|||||||
retention-days: 1
|
retention-days: 1
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
# Qt6 stays on the unsigned/experimental track (no signing request for
|
# Qt6 is now signed too (previously excluded while Qt5 was the stable
|
||||||
# this flavor), and forks never have the SignPath secrets, so guard on
|
# track and Qt6 was experimental-only). The remaining guard is the fork
|
||||||
# both: only qt5, and only in the upstream repo.
|
# check: forks never have the SignPath secrets, and a fork-originated
|
||||||
|
# PR/run must never attempt a signing request.
|
||||||
# (cf. DieterMayerOSS:fix/msi-signing-fork-guard, d3f60c88)
|
# (cf. DieterMayerOSS:fix/msi-signing-fork-guard, d3f60c88)
|
||||||
|
# continue-on-error: SignPath's certificate is still pending validation
|
||||||
|
# (Sept 2026) — the signing request currently fails with a 500 on the
|
||||||
|
# SignPath side. Kept non-blocking so the nightly MSI still ships
|
||||||
|
# (unsigned) while the certificate is pending. Remove
|
||||||
|
# continue-on-error once the certificate is confirmed active.
|
||||||
- name: Sign MSI via SignPath
|
- name: Sign MSI via SignPath
|
||||||
if: matrix.flavor == 'qt5' && github.repository == 'qelectrotech/qelectrotech-source-mirror'
|
id: sign
|
||||||
|
if: github.repository == 'qelectrotech/qelectrotech-source-mirror' && env.SIGNPATH_API_TOKEN != ''
|
||||||
|
continue-on-error: true
|
||||||
uses: signpath/github-action-submit-signing-request@v2
|
uses: signpath/github-action-submit-signing-request@v2
|
||||||
with:
|
with:
|
||||||
api-token: ${{ secrets.SIGNPATH_API_TOKEN }}
|
api-token: ${{ secrets.SIGNPATH_API_TOKEN }}
|
||||||
@@ -306,29 +336,51 @@ jobs:
|
|||||||
wait-for-completion: true
|
wait-for-completion: true
|
||||||
output-artifact-directory: 'dist\'
|
output-artifact-directory: 'dist\'
|
||||||
|
|
||||||
|
# If signing succeeded, SignPath already overwrote dist\*.msi with the
|
||||||
|
# signed copy (output-artifact-directory above) — nothing to do here.
|
||||||
|
# If it failed/was skipped, dist\*.msi is still the unsigned MSI from
|
||||||
|
# the "Build MSI" step, so the rest of the pipeline just ships that.
|
||||||
|
- name: Report signing status
|
||||||
|
if: always()
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
if ("${{ steps.sign.outcome }}" -eq "success") {
|
||||||
|
Write-Host "MSI signed successfully via SignPath."
|
||||||
|
} else {
|
||||||
|
Write-Warning "MSI signing skipped or failed (outcome: ${{ steps.sign.outcome }}) — shipping UNSIGNED MSI. Likely cause: SignPath certificate still pending validation."
|
||||||
|
}
|
||||||
|
|
||||||
- name: Upload signed MSI artifact
|
- name: Upload signed MSI artifact
|
||||||
|
if: always()
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: qelectrotech-windows-msi-${{ matrix.flavor }}
|
name: qelectrotech-windows-msi-${{ matrix.flavor }}
|
||||||
path: dist\*.msi
|
path: dist\*.msi
|
||||||
retention-days: 14
|
retention-days: 40
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
- name: Delete old nightly .msi asset for this flavor
|
- name: Delete old nightly .msi asset
|
||||||
|
# Only run if a new MSI actually exists in dist/ — otherwise the old
|
||||||
|
# (still working) nightly .msi would be deleted without anything to
|
||||||
|
# replace it, leaving the nightly release with no MSI at all until
|
||||||
|
# the next successful build (see windows-msi-pipeline notes,
|
||||||
|
# run 35694391567: an upstream artifact-download failure meant
|
||||||
|
# dist\*.msi never existed for that run).
|
||||||
|
if: always() && hashFiles('dist/*.msi') != ''
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
REPO: ${{ github.repository }}
|
REPO: ${{ github.repository }}
|
||||||
run: |
|
run: |
|
||||||
$pattern = if ("${{ matrix.flavor }}" -eq "qt6") { "-qt6-EXPERIMENTAL.*\\.msi$" } else { "\\.msi$" }
|
$pattern = "-qt6.*\\.msi$"
|
||||||
$names = gh release view nightly --repo $env:REPO --json assets --jq ".assets[] | select(.name | test(`"$pattern`")) | .name"
|
$names = gh release view nightly --repo $env:REPO --json assets --jq ".assets[] | select(.name | test(`"$pattern`")) | .name"
|
||||||
foreach ($name in ($names -split "`n" | Where-Object { $_ })) {
|
foreach ($name in ($names -split "`n" | Where-Object { $_ })) {
|
||||||
if ("${{ matrix.flavor }}" -eq "qt5" -and $name -match "-qt6-EXPERIMENTAL") { continue }
|
|
||||||
Write-Host "Deleting old asset: $name"
|
Write-Host "Deleting old asset: $name"
|
||||||
gh release delete-asset nightly $name --repo $env:REPO --yes
|
gh release delete-asset nightly $name --repo $env:REPO --yes
|
||||||
}
|
}
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
- name: Upload MSI to nightly release
|
- name: Upload MSI to nightly release
|
||||||
|
if: always()
|
||||||
uses: softprops/action-gh-release@v3
|
uses: softprops/action-gh-release@v3
|
||||||
with:
|
with:
|
||||||
tag_name: nightly
|
tag_name: nightly
|
||||||
@@ -342,11 +394,7 @@ jobs:
|
|||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
$name = "$env:MSI_NAME"
|
$name = "$env:MSI_NAME"
|
||||||
if ("${{ matrix.flavor }}" -eq "qt6") {
|
echo "msi_name_qt6=$name" >> $env:GITHUB_OUTPUT
|
||||||
echo "msi_name_qt6=$name" >> $env:GITHUB_OUTPUT
|
|
||||||
} else {
|
|
||||||
echo "msi_name_qt5=$name" >> $env:GITHUB_OUTPUT
|
|
||||||
}
|
|
||||||
|
|
||||||
- name: Summary
|
- name: Summary
|
||||||
if: always()
|
if: always()
|
||||||
@@ -354,16 +402,29 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
Write-Host "=== MSI build summary (${{ matrix.flavor }}) ==="
|
Write-Host "=== MSI build summary (${{ matrix.flavor }}) ==="
|
||||||
Write-Host "Version : ${{ steps.version.outputs.VERSION_DISPLAY }}"
|
Write-Host "Version : ${{ steps.version.outputs.VERSION_DISPLAY }}"
|
||||||
Write-Host "Experimental : ${{ matrix.experimental }}"
|
Write-Host "Signed : ${{ steps.sign.outcome == 'success' }}"
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Job 2 : Génère et déploie la page GitHub Pages une fois les DEUX MSI
|
# Job 2 : Génère et déploie la page GitHub Pages une fois le MSI publié,
|
||||||
# (Qt5 + Qt6) publiés, pour que toutes les URLs soient connues.
|
# pour que toutes les URLs soient connues.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
deploy-pages:
|
deploy-pages:
|
||||||
needs: build-msi
|
needs: build-msi
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: always() && needs.build-msi.result == 'success'
|
# Regenerate the page whenever the MSI job actually ran (success OR
|
||||||
|
# packaging/signing failure) — not only on full success.
|
||||||
|
# generate-page.py queries the published assets on the "nightly"
|
||||||
|
# release itself (line 407: `gh release view nightly --json assets`),
|
||||||
|
# so it already handles a missing MSI natively (empty MSI_NAME -> no
|
||||||
|
# MSI button on the page). The page only needs the exe/zip already
|
||||||
|
# published by windows-build.yml, independent of the MSI's fate.
|
||||||
|
# Only "skipped"/"cancelled" are excluded: if build-msi never ran at
|
||||||
|
# all (e.g. Windows Build itself failed), there is nothing new to
|
||||||
|
# publish and regenerating the page would be pointless.
|
||||||
|
if: >
|
||||||
|
always() &&
|
||||||
|
needs.build-msi.result != 'skipped' &&
|
||||||
|
needs.build-msi.result != 'cancelled'
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
pages: write
|
pages: write
|
||||||
@@ -388,13 +449,17 @@ jobs:
|
|||||||
|
|
||||||
ASSETS=$(gh release view nightly --repo "$REPO" --json assets --jq '.assets[].name')
|
ASSETS=$(gh release view nightly --repo "$REPO" --json assets --jq '.assets[].name')
|
||||||
|
|
||||||
EXE_NAME=$(echo "$ASSETS" | grep -v 'qt6' | grep '\.exe$' | head -1)
|
EXE_NAME=$(echo "$ASSETS" | grep 'qt6' | grep '\.exe$' | head -1)
|
||||||
ZIP_NAME=$(echo "$ASSETS" | grep -v 'qt6' | grep '\.zip$' | head -1)
|
ZIP_NAME=$(echo "$ASSETS" | grep 'qt6' | grep '\.zip$' | head -1)
|
||||||
MSI_NAME=$(echo "$ASSETS" | grep -v 'qt6' | grep '\.msi$' | head -1 || echo "")
|
MSI_NAME=$(echo "$ASSETS" | grep 'qt6' | grep '\.msi$' | head -1 || echo "")
|
||||||
|
|
||||||
EXE_QT6_NAME=$(echo "$ASSETS" | grep 'qt6' | grep '\.exe$' | head -1 || echo "")
|
# Legacy Qt5 assets (no "qt6" in the name): last ever published,
|
||||||
ZIP_QT6_NAME=$(echo "$ASSETS" | grep 'qt6' | grep '\.zip$' | head -1 || echo "")
|
# frozen — windows-build.yml/windows-msi.yml no longer delete or
|
||||||
MSI_QT6_NAME=$(echo "$ASSETS" | grep 'qt6' | grep '\.msi$' | head -1 || echo "")
|
# replace these, so they keep pointing at the same files release
|
||||||
|
# after release. Rendered as a separate "legacy" section if present.
|
||||||
|
LEGACY_EXE_NAME=$(echo "$ASSETS" | grep -v 'qt6' | grep '\.exe$' | head -1 || echo "")
|
||||||
|
LEGACY_ZIP_NAME=$(echo "$ASSETS" | grep -v 'qt6' | grep '\.zip$' | head -1 || echo "")
|
||||||
|
LEGACY_MSI_NAME=$(echo "$ASSETS" | grep -v 'qt6' | grep '\.msi$' | head -1 || echo "")
|
||||||
|
|
||||||
BASE="https://github.com/$REPO/releases/download/nightly"
|
BASE="https://github.com/$REPO/releases/download/nightly"
|
||||||
INSTALLER_URL="$BASE/$EXE_NAME"
|
INSTALLER_URL="$BASE/$EXE_NAME"
|
||||||
@@ -402,12 +467,12 @@ jobs:
|
|||||||
MSI_URL=""
|
MSI_URL=""
|
||||||
[ -n "$MSI_NAME" ] && MSI_URL="$BASE/$MSI_NAME"
|
[ -n "$MSI_NAME" ] && MSI_URL="$BASE/$MSI_NAME"
|
||||||
|
|
||||||
INSTALLER_QT6_URL=""
|
LEGACY_INSTALLER_URL=""
|
||||||
PORTABLE_QT6_URL=""
|
LEGACY_PORTABLE_URL=""
|
||||||
MSI_QT6_URL=""
|
LEGACY_MSI_URL=""
|
||||||
[ -n "$EXE_QT6_NAME" ] && INSTALLER_QT6_URL="$BASE/$EXE_QT6_NAME"
|
[ -n "$LEGACY_EXE_NAME" ] && LEGACY_INSTALLER_URL="$BASE/$LEGACY_EXE_NAME"
|
||||||
[ -n "$ZIP_QT6_NAME" ] && PORTABLE_QT6_URL="$BASE/$ZIP_QT6_NAME"
|
[ -n "$LEGACY_ZIP_NAME" ] && LEGACY_PORTABLE_URL="$BASE/$LEGACY_ZIP_NAME"
|
||||||
[ -n "$MSI_QT6_NAME" ] && MSI_QT6_URL="$BASE/$MSI_QT6_NAME"
|
[ -n "$LEGACY_MSI_NAME" ] && LEGACY_MSI_URL="$BASE/$LEGACY_MSI_NAME"
|
||||||
|
|
||||||
SHA="${{ github.event.workflow_run.head_sha || github.sha }}"
|
SHA="${{ github.event.workflow_run.head_sha || github.sha }}"
|
||||||
SHORT="${SHA:0:7}"
|
SHORT="${SHA:0:7}"
|
||||||
@@ -417,7 +482,7 @@ jobs:
|
|||||||
|
|
||||||
export DATE SHORT REPO SHA RUN_URL RUN_NUMBER
|
export DATE SHORT REPO SHA RUN_URL RUN_NUMBER
|
||||||
export INSTALLER_URL PORTABLE_URL MSI_URL
|
export INSTALLER_URL PORTABLE_URL MSI_URL
|
||||||
export INSTALLER_QT6_URL PORTABLE_QT6_URL MSI_QT6_URL
|
export LEGACY_INSTALLER_URL LEGACY_PORTABLE_URL LEGACY_MSI_URL
|
||||||
|
|
||||||
python3 source/build-aux/generate-page.py
|
python3 source/build-aux/generate-page.py
|
||||||
|
|
||||||
|
|||||||
@@ -7,3 +7,12 @@ doc/*
|
|||||||
!doc/QElectroTech.qch
|
!doc/QElectroTech.qch
|
||||||
QElectroTech.tag
|
QElectroTech.tag
|
||||||
!doc/doc-utils
|
!doc/doc-utils
|
||||||
|
lang/*.qm
|
||||||
|
|
||||||
|
# -- IDE settings/intermediate files --
|
||||||
|
# zed
|
||||||
|
.zed
|
||||||
|
.cache
|
||||||
|
|
||||||
|
# VS Code
|
||||||
|
.vscode
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ include(cmake/hoto_update_cmake_message.cmake)
|
|||||||
cmake_minimum_required(VERSION 3.5...4.2)
|
cmake_minimum_required(VERSION 3.5...4.2)
|
||||||
|
|
||||||
project(qelectrotech
|
project(qelectrotech
|
||||||
VERSION 0.100.1
|
VERSION 0.200.1
|
||||||
DESCRIPTION "QET is a CAD/CAE editor focusing on schematics drawing features."
|
DESCRIPTION "QET is a CAD/CAE editor focusing on schematics drawing features."
|
||||||
HOMEPAGE_URL "https://qelectrotech.org/"
|
HOMEPAGE_URL "https://qelectrotech.org/"
|
||||||
LANGUAGES C CXX)
|
LANGUAGES C CXX)
|
||||||
@@ -28,39 +28,12 @@ include(cmake/copyright_message.cmake)
|
|||||||
|
|
||||||
set(QET_DIR ${PROJECT_SOURCE_DIR})
|
set(QET_DIR ${PROJECT_SOURCE_DIR})
|
||||||
|
|
||||||
# QT_VERSION_MAJOR is chosen explicitly by whoever configures the build,
|
|
||||||
# via -DQT_VERSION_MAJOR=5 or -DQT_VERSION_MAJOR=6.
|
|
||||||
# Default to Qt5 (current stable) when not specified, so existing
|
|
||||||
# CI/scripts that don't pass this option keep working unchanged.
|
|
||||||
# This must happen BEFORE add_subdirectory(tests) and the fetch_*.cmake
|
|
||||||
# includes below, so every subdirectory and every FetchContent dependency
|
|
||||||
# sees a consistent, already-defined value.
|
|
||||||
if(NOT DEFINED QT_VERSION_MAJOR)
|
|
||||||
set(QT_VERSION_MAJOR 5)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Some third-party CMake projects we pull in via FetchContent (e.g.
|
|
||||||
# SingleApplication) don't know about QET_VERSION_MAJOR: they follow Qt's
|
|
||||||
# own "QT_DEFAULT_MAJOR_VERSION" convention instead, and silently default
|
|
||||||
# to Qt5 if it isn't set. Propagate our choice so they stay in sync,
|
|
||||||
# otherwise they can end up linked against a different Qt major version
|
|
||||||
# than the rest of QET, which breaks AUTOMOC with an
|
|
||||||
# INTERFACE_QT_MAJOR_VERSION mismatch at generate time.
|
|
||||||
set(QT_DEFAULT_MAJOR_VERSION ${QT_VERSION_MAJOR} CACHE STRING "Qt version to use (5 or 6)" FORCE)
|
|
||||||
|
|
||||||
# Add sub directories
|
|
||||||
option(PACKAGE_TESTS "Build the tests" ON)
|
|
||||||
if(PACKAGE_TESTS)
|
|
||||||
message("Add sub directory tests")
|
|
||||||
add_subdirectory(tests)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(cmake/paths_compilation_installation.cmake)
|
include(cmake/paths_compilation_installation.cmake)
|
||||||
include(cmake/start_options.cmake)
|
include(cmake/start_options.cmake)
|
||||||
include(cmake/developer_options.cmake)
|
include(cmake/developer_options.cmake)
|
||||||
include(cmake/git_update_submodules.cmake)
|
include(cmake/git_update_submodules.cmake)
|
||||||
include(cmake/git_last_commit_sha.cmake)
|
include(cmake/git_last_commit_sha.cmake)
|
||||||
include(cmake/fetch_kdeaddons.cmake)
|
|
||||||
include(cmake/fetch_singleapplication.cmake)
|
include(cmake/fetch_singleapplication.cmake)
|
||||||
include(cmake/fetch_pugixml.cmake)
|
include(cmake/fetch_pugixml.cmake)
|
||||||
include(cmake/qet_compilation_vars.cmake)
|
include(cmake/qet_compilation_vars.cmake)
|
||||||
@@ -73,17 +46,76 @@ SET(CMAKE_CXX_STANDARD 17)
|
|||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
find_package(
|
find_package(
|
||||||
Qt${QT_VERSION_MAJOR}
|
Qt6
|
||||||
COMPONENTS
|
COMPONENTS
|
||||||
${QET_COMPONENTS}
|
${QET_COMPONENTS}
|
||||||
REQUIRED)
|
REQUIRED)
|
||||||
|
|
||||||
# Qt6 only creates the Qt::GuiPrivate target (used for QPdfEngine::drawHyperlink)
|
# <private/qpdf_p.h> (QPdfEngine::drawHyperlink) needs Qt's private GUI module.
|
||||||
# when the GuiPrivate component is explicitly requested. Qt5 has no such
|
# Qt >= 6.7 ships it as a proper find_package component, but some distro
|
||||||
# component package and creates the target implicitly with Gui, so only
|
# packages (e.g. Ubuntu's qt6-base-private-dev) omit Qt6GuiPrivateConfig.cmake
|
||||||
# request it on Qt6 - requesting it on Qt5 fails the whole configure.
|
# and only provide the implicit Qt6::GuiPrivate target created alongside
|
||||||
if(QT_VERSION_MAJOR GREATER_EQUAL 6)
|
# Qt6::Gui. Try the component quietly, then verify the target below so a
|
||||||
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS GuiPrivate)
|
# missing private-headers package fails here instead of at compile time.
|
||||||
|
find_package(Qt6 QUIET COMPONENTS GuiPrivate)
|
||||||
|
|
||||||
|
if(NOT TARGET Qt6::GuiPrivate)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"Qt6::GuiPrivate was not found. It is required for PDF hyperlink "
|
||||||
|
"support (<private/qpdf_p.h>). Install the Qt6 private headers "
|
||||||
|
"(e.g. 'qt6-base-private-dev' on Debian/Ubuntu) or use a Qt build "
|
||||||
|
"that provides the GuiPrivate component.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# PDF page import (toolbar "Ajouter un PDF") needs the QtPdf module and,
|
||||||
|
# specifically, QPdfDocument::pagePointSize() which only exists since Qt 6.4.
|
||||||
|
# Unlike GuiPrivate above, a missing QtPdf module is NOT fatal here: some
|
||||||
|
# Qt6 distributions (e.g. the Flatpak org.kde.Platform runtime) don't ship
|
||||||
|
# it at all, since it lives in the qtwebengine source tree rather than Qt6
|
||||||
|
# core. When it's missing, or too old, the feature is silently disabled -
|
||||||
|
# see the QT_VERSION_CHECK / QET_HAS_QTPDF guards in diagrameventaddpdf.*
|
||||||
|
# and pdfpagesdialog.*.
|
||||||
|
set(QET_HAS_QTPDF FALSE)
|
||||||
|
find_package(Qt6 QUIET COMPONENTS Pdf)
|
||||||
|
if(TARGET Qt6::Pdf AND NOT Qt6_VERSION VERSION_LESS 6.4.0)
|
||||||
|
set(QET_HAS_QTPDF TRUE)
|
||||||
|
list(APPEND QET_PRIVATE_LIBRARIES Qt::Pdf)
|
||||||
|
add_compile_definitions(QET_HAS_QTPDF)
|
||||||
|
else()
|
||||||
|
message(STATUS "QtPdf module not available (or Qt < 6.4): PDF page import feature disabled")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# JavaScript scripting (bugtracker #162: `--run script.js`, and later a
|
||||||
|
# "Run Script..." menu action) needs QJSEngine, in the Qml module. As with
|
||||||
|
# QtPdf above, this is not fatal when missing: some minimal Qt6 packagings
|
||||||
|
# may not ship it, and scripting is optional functionality nothing else in
|
||||||
|
# the application depends on. When it's missing the feature is silently
|
||||||
|
# disabled - see the QET_HAS_SCRIPTING guard in qetscripting.*.
|
||||||
|
set(QET_HAS_SCRIPTING FALSE)
|
||||||
|
find_package(Qt${QT_VERSION_MAJOR} QUIET COMPONENTS Qml)
|
||||||
|
if(TARGET Qt${QT_VERSION_MAJOR}::Qml)
|
||||||
|
set(QET_HAS_SCRIPTING TRUE)
|
||||||
|
list(APPEND QET_PRIVATE_LIBRARIES Qt::Qml)
|
||||||
|
add_compile_definitions(QET_HAS_SCRIPTING)
|
||||||
|
else()
|
||||||
|
message(STATUS "Qt Qml module not available: JavaScript scripting (--run) disabled")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# The crash handler writes a backtrace into the dump. Detecting this with
|
||||||
|
# __has_include(<execinfo.h>) is not enough: the header is present on FreeBSD
|
||||||
|
# too, but backtrace() lives in a separate libexecinfo there, so the compile
|
||||||
|
# succeeds and the link fails. FindBacktrace resolves both the header and
|
||||||
|
# whichever library actually provides the symbol, so gate on it instead - see
|
||||||
|
# the QET_CRASH_BACKTRACE guard in sources/logging/crashhandler.cpp.
|
||||||
|
find_package(Backtrace QUIET)
|
||||||
|
if(Backtrace_FOUND)
|
||||||
|
list(APPEND QET_PRIVATE_LIBRARIES ${Backtrace_LIBRARIES})
|
||||||
|
include_directories(${Backtrace_INCLUDE_DIRS})
|
||||||
|
add_compile_definitions(QET_CRASH_BACKTRACE)
|
||||||
|
else()
|
||||||
|
message(STATUS
|
||||||
|
"backtrace() not available: crash dumps will carry the log ring "
|
||||||
|
"without a backtrace")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(SQLite3 REQUIRED)
|
find_package(SQLite3 REQUIRED)
|
||||||
@@ -100,25 +132,15 @@ endif()
|
|||||||
|
|
||||||
set(CMAKE_AUTOUIC_SEARCH_PATHS ${QET_DIR}/sources/ui)
|
set(CMAKE_AUTOUIC_SEARCH_PATHS ${QET_DIR}/sources/ui)
|
||||||
|
|
||||||
# The default build only compiles the tracked .ts files to .qm (lrelease).
|
include(cmake/fetch_kdeaddons.cmake)
|
||||||
# Refreshing the .ts from the sources (lupdate) is a developer action behind
|
|
||||||
# the explicit "update_translations" target below: running lupdate on every
|
|
||||||
# build rewrote tracked files as a side effect, and under high parallelism
|
|
||||||
# lupdate rewriting a .ts while lrelease read the same file made the build
|
|
||||||
# fail with "Premature end of document".
|
|
||||||
set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION "${QET_DIR}/lang")
|
|
||||||
if(QT_VERSION_MAJOR EQUAL 6)
|
|
||||||
qt6_add_translation(QM_FILES ${TS_FILES})
|
|
||||||
else()
|
|
||||||
qt5_add_translation(QM_FILES ${TS_FILES})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_custom_target(update_translations
|
# Add sub directories
|
||||||
COMMAND $<TARGET_FILE:Qt${QT_VERSION_MAJOR}::lupdate> ${CMAKE_SOURCE_DIR}/sources -ts ${TS_FILES}
|
option(PACKAGE_TESTS "Build the tests" ON)
|
||||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
if(PACKAGE_TESTS)
|
||||||
COMMENT "Updating .ts files from sources/ (lupdate) - developer target, run explicitly"
|
message("Add sub directory tests")
|
||||||
VERBATIM
|
enable_testing()
|
||||||
)
|
add_subdirectory(tests)
|
||||||
|
endif()
|
||||||
|
|
||||||
# als laatse
|
# als laatse
|
||||||
include(cmake/define_definitions.cmake)
|
include(cmake/define_definitions.cmake)
|
||||||
@@ -134,6 +156,7 @@ if(WIN32)
|
|||||||
${QET_SRC_FILES}
|
${QET_SRC_FILES}
|
||||||
${QM_FILES}
|
${QM_FILES}
|
||||||
${QET_DIR}/qelectrotech.qrc
|
${QET_DIR}/qelectrotech.qrc
|
||||||
|
${QET_DIR}/ico/icon-themes.qrc
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
add_executable(
|
add_executable(
|
||||||
@@ -142,9 +165,91 @@ else()
|
|||||||
${QET_SRC_FILES}
|
${QET_SRC_FILES}
|
||||||
${QM_FILES}
|
${QM_FILES}
|
||||||
${QET_DIR}/qelectrotech.qrc
|
${QET_DIR}/qelectrotech.qrc
|
||||||
|
${QET_DIR}/ico/icon-themes.qrc
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
# CFBundleIdentifier must not be empty. CMake's default Info.plist
|
||||||
|
# template fills it from MACOSX_BUNDLE_GUI_IDENTIFIER; with that unset
|
||||||
|
# the bundle ships an empty identifier, LaunchServices never registers
|
||||||
|
# the .app, and AppKit's open/save panel service (which is keyed on the
|
||||||
|
# client's bundle id) silently presents nothing -- every
|
||||||
|
# QFileDialog::getOpenFileName()/getSaveFileName() call returns an empty
|
||||||
|
# string without a panel ever appearing, so File > Open and File > Save
|
||||||
|
# as do nothing at all.
|
||||||
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
|
MACOSX_BUNDLE TRUE
|
||||||
|
MACOSX_BUNDLE_GUI_IDENTIFIER "org.qelectrotech.QElectroTech"
|
||||||
|
MACOSX_BUNDLE_BUNDLE_NAME "QElectroTech"
|
||||||
|
MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}"
|
||||||
|
MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION}"
|
||||||
|
MACOSX_BUNDLE_COPYRIGHT "Copyright 2006-2026 The QElectroTech Team"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# The default build only compiles the tracked .ts files to .qm (lrelease).
|
||||||
|
# Refreshing the .ts from the sources (lupdate) is a developer action behind
|
||||||
|
# the explicit "update_translations" target below: running lupdate on every
|
||||||
|
# build rewrote tracked files as a side effect, and under high parallelism
|
||||||
|
# lupdate rewriting a .ts while lrelease read the same file made the build
|
||||||
|
# fail with "Premature end of document".
|
||||||
|
set_source_files_properties(
|
||||||
|
${TS_FILES}
|
||||||
|
PROPERTIES OUTPUT_LOCATION "lang"
|
||||||
|
)
|
||||||
|
if(Qt6_VERSION VERSION_LESS "6.2")
|
||||||
|
# Qt 6.0–6.1
|
||||||
|
qt6_add_translation(QM_FILES ${TS_FILES})
|
||||||
|
|
||||||
|
# qt6_add_translation() only creates custom commands. Something must
|
||||||
|
# depend on their outputs for them to run during the default build.
|
||||||
|
add_custom_target(${PROJECT_NAME}_lrelease ALL
|
||||||
|
DEPENDS ${QM_FILES}
|
||||||
|
)
|
||||||
|
|
||||||
|
add_custom_target(update_translations
|
||||||
|
COMMAND
|
||||||
|
$<TARGET_FILE:Qt6::lupdate>
|
||||||
|
"${CMAKE_SOURCE_DIR}/sources"
|
||||||
|
-ts ${TS_FILES}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||||
|
COMMENT
|
||||||
|
"Updating .ts files from sources/ (lupdate) - developer target"
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
|
||||||
|
elseif(Qt6_VERSION VERSION_LESS "6.7")
|
||||||
|
# Qt 6.2–6.6: old target-based signature
|
||||||
|
qt_add_lrelease(
|
||||||
|
${PROJECT_NAME}
|
||||||
|
TS_FILES ${TS_FILES}
|
||||||
|
QM_FILES_OUTPUT_VARIABLE QM_FILES
|
||||||
|
)
|
||||||
|
|
||||||
|
# Automatically creates the update_translations umbrella target.
|
||||||
|
qt_add_lupdate(
|
||||||
|
${PROJECT_NAME}
|
||||||
|
TS_FILES ${TS_FILES}
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
# Qt 6.7+: new signature
|
||||||
|
qt_add_lrelease(
|
||||||
|
TS_FILES ${TS_FILES}
|
||||||
|
LRELEASE_TARGET ${PROJECT_NAME}_lrelease
|
||||||
|
QM_FILES_OUTPUT_VARIABLE QM_FILES
|
||||||
|
)
|
||||||
|
|
||||||
|
qt_add_lupdate(
|
||||||
|
SOURCE_TARGETS ${PROJECT_NAME}
|
||||||
|
TS_FILES ${TS_FILES}
|
||||||
|
LUPDATE_TARGET update_translations
|
||||||
|
NO_GLOBAL_TARGET
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
# Optional precompiled headers -- see QET_ENABLE_PCH in
|
# Optional precompiled headers -- see QET_ENABLE_PCH in
|
||||||
# cmake/developer_options.cmake for what this trades away.
|
# cmake/developer_options.cmake for what this trades away.
|
||||||
#
|
#
|
||||||
@@ -180,7 +285,7 @@ target_link_libraries(
|
|||||||
pugixml::pugixml
|
pugixml::pugixml
|
||||||
SingleApplication::SingleApplication
|
SingleApplication::SingleApplication
|
||||||
SQLite3::SQLite3
|
SQLite3::SQLite3
|
||||||
${KF5_PRIVATE_LIBRARIES}
|
${KF_PRIVATE_LIBRARIES}
|
||||||
${QET_PRIVATE_LIBRARIES}
|
${QET_PRIVATE_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -213,7 +318,6 @@ target_include_directories(
|
|||||||
${QET_DIR}/sources/NameList
|
${QET_DIR}/sources/NameList
|
||||||
${QET_DIR}/sources/NameList/ui
|
${QET_DIR}/sources/NameList/ui
|
||||||
${QET_DIR}/sources/utils
|
${QET_DIR}/sources/utils
|
||||||
${QET_DIR}/pugixml/src
|
|
||||||
${QET_DIR}/sources/dataBase
|
${QET_DIR}/sources/dataBase
|
||||||
${QET_DIR}/sources/dataBase/ui
|
${QET_DIR}/sources/dataBase/ui
|
||||||
${QET_DIR}/sources/factory/ui
|
${QET_DIR}/sources/factory/ui
|
||||||
@@ -221,7 +325,7 @@ target_include_directories(
|
|||||||
${QET_DIR}/sources/svg
|
${QET_DIR}/sources/svg
|
||||||
)
|
)
|
||||||
|
|
||||||
if(NOT BUILD_WITH_KF5)
|
if(NOT BUILD_WITH_KF)
|
||||||
target_include_directories(
|
target_include_directories(
|
||||||
${PROJECT_NAME}
|
${PROJECT_NAME}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
@@ -229,7 +333,9 @@ if(NOT BUILD_WITH_KF5)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
install(TARGETS ${PROJECT_NAME})
|
install(TARGETS ${PROJECT_NAME}
|
||||||
|
BUNDLE DESTINATION .
|
||||||
|
)
|
||||||
|
|
||||||
if (NOT MINGW)
|
if (NOT MINGW)
|
||||||
install(DIRECTORY ico/breeze-icons/16x16 DESTINATION ${QET_ICONS_PATH})
|
install(DIRECTORY ico/breeze-icons/16x16 DESTINATION ${QET_ICONS_PATH})
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ All notable changes to QElectroTech are documented here.
|
|||||||
|
|
||||||
### 🐛 Bug Fixes
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
|
- Fix #798: clamp element-editor and diagram-view zoom to prevent view-transform overflow crash on scroll-wheel zoom ([3ca5d4a](../../commit/3ca5d4ab2))
|
||||||
- Fix(windows-msi): inject rev into MSI Version Build field ([e19f523](../../commit/e19f5232277efb37435cb65a83563d73333d62ec))
|
- Fix(windows-msi): inject rev into MSI Version Build field ([e19f523](../../commit/e19f5232277efb37435cb65a83563d73333d62ec))
|
||||||
- Fix #391: use wide-char path for pugixml on Windows to handle Unicode paths ([31edf30](../../commit/31edf30c619213368e9b592b51be6ca8190db831))
|
- Fix #391: use wide-char path for pugixml on Windows to handle Unicode paths ([31edf30](../../commit/31edf30c619213368e9b592b51be6ca8190db831))
|
||||||
- Fix(#283): restore center alignment when loading table config ([f55ba56](../../commit/f55ba568f68293e06436899bcc831431e9d27295))
|
- Fix(#283): restore center alignment when loading table config ([f55ba56](../../commit/f55ba568f68293e06436899bcc831431e9d27295))
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ PROJECT_NAME = QElectroTech
|
|||||||
# could be handy for archiving the generated documentation or if some version
|
# could be handy for archiving the generated documentation or if some version
|
||||||
# control system is used.
|
# control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER = " 0.100.0-dev"
|
PROJECT_NUMBER = " 0.200.1"
|
||||||
|
|
||||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||||
# for a project that appears at the top of each page and should give viewer a
|
# for a project that appears at the top of each page and should give viewer a
|
||||||
|
|||||||
@@ -1,3 +1,20 @@
|
|||||||
|
[ca]
|
||||||
|
La col·lecció d'elements que s'inclou amb QElectrotech es proporciona tal com és
|
||||||
|
i sense cap garantia que sigui adequada per al vostre ús o que funcioni correctament.
|
||||||
|
L'ús, la modificació i la integració d'aquests elements en esquemes elèctrics
|
||||||
|
estan permesos sense restriccions, independentment de la llicència final que regeixi
|
||||||
|
els esquemes.
|
||||||
|
No es permet utilitzar aquest programari ni cap fitxer associat
|
||||||
|
com a dades de mostra per crear models d'aprenentatge automàtic.
|
||||||
|
|
||||||
|
Si redistribuïu la totalitat o una part de la col·lecció QElectroTech,
|
||||||
|
amb o sense modificacions, fora d'un esquema elèctric, heu de complir
|
||||||
|
les condicions de la llicència CC-BY:
|
||||||
|
Aquesta obra està subjecta a la llicència Reconeixement 3.0,
|
||||||
|
disponible en línia a http://creativecommons.org/licenses/by/3.0/ o bé
|
||||||
|
sol·licitant-la per correu a Creative Commons, 171 Second Street, Suite 300, San Francisco,
|
||||||
|
Califòrnia 94105, EUA.
|
||||||
|
|
||||||
[en]
|
[en]
|
||||||
The elements collection provided along with QElectroTech is provided as is and
|
The elements collection provided along with QElectroTech is provided as is and
|
||||||
without any warranty of fitness for your purpose or working.
|
without any warranty of fitness for your purpose or working.
|
||||||
@@ -96,19 +113,6 @@ Para ver una copia de esta licencia, visite
|
|||||||
http://creativecommons.org/licenses/by/3.0/ o envie una carta a Creative
|
http://creativecommons.org/licenses/by/3.0/ o envie una carta a Creative
|
||||||
Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.
|
Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.
|
||||||
|
|
||||||
[ca]
|
|
||||||
La col·lecció de símbols QElectrotech és distribuïda tal qual i sense cap
|
|
||||||
garantia d'idoneïtat d'ús ni de funcionament.
|
|
||||||
Es permet incondicionalment, amb independència de la llicència final, emprar,
|
|
||||||
editar, i incloure aquests símbols en esquemes elèctrics.
|
|
||||||
Si vostè redistribueix una part de la col·lecció de QElectrotech o tota ella,
|
|
||||||
amb condicions o sense, separadament d'un esquema elèctric, haurà de respectar
|
|
||||||
les condicions de la llicència CC-BY:
|
|
||||||
Aquesta obra es troba sota una llicència Reconeixement 3.0 de Creative Commons.
|
|
||||||
Per veure una còpia d'aquesta llicència visiti
|
|
||||||
http://creativecommons.org/licenses/by/3.0/ o enviï una carta a Creative
|
|
||||||
Commons, 171 Second Street, Suite 300, San Francisco, California 94105,
|
|
||||||
|
|
||||||
[cs]
|
[cs]
|
||||||
Sbírka prvků poskytovaná společně s QElectroTechem je poskytována tak, jak je,
|
Sbírka prvků poskytovaná společně s QElectroTechem je poskytována tak, jak je,
|
||||||
bez záruky nebo vhodnosti pro váš účal nebo práci.
|
bez záruky nebo vhodnosti pro váš účal nebo práci.
|
||||||
|
|||||||
@@ -1,179 +0,0 @@
|
|||||||
[Qt6 / CMake]
|
|
||||||
Building the Qt6 line with CMake additionally requires the private
|
|
||||||
development headers of QtGui. On Debian/Ubuntu these live in a separate
|
|
||||||
package that is NOT pulled in by qt6-base-dev:
|
|
||||||
|
|
||||||
apt install qt6-base-private-dev
|
|
||||||
|
|
||||||
(other distributions: install your Qt 6 "private headers" development
|
|
||||||
package, e.g. qt6-qtbase-private-devel on Fedora)
|
|
||||||
|
|
||||||
QET needs the private QtGui API (QPdfEngine) for clickable hyperlinks in
|
|
||||||
the PDF export. Without the package, find_package(Qt6 ... GuiPrivate)
|
|
||||||
succeeds but CMake later fails at generate time with:
|
|
||||||
"Imported target Qt6::GuiPrivate includes non-existent path".
|
|
||||||
|
|
||||||
[ca]
|
|
||||||
Dependències:
|
|
||||||
libQt5 (paquets libqt5*)
|
|
||||||
cupsys-bsd per imprimir
|
|
||||||
|
|
||||||
Com compilar:
|
|
||||||
$ qmake (qmake-qt5 pels sistemes basats en Debian)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
|
|
||||||
[en]
|
|
||||||
Requirements :
|
|
||||||
libQt5 (see packages libqt5*)
|
|
||||||
cupsys-bsd for printing
|
|
||||||
|
|
||||||
Howto compile :
|
|
||||||
$ qmake (qmake-qt5 for Debian-based systems)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
|
|
||||||
[fr]
|
|
||||||
Pré-requis :
|
|
||||||
libQt5 (paquets libqt5*)
|
|
||||||
cupsys-bsd pour l'impression
|
|
||||||
|
|
||||||
Comment compiler :
|
|
||||||
$ qmake (qmake-qt5 pour les systèmes basés sur Debian)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
|
|
||||||
[de]
|
|
||||||
Abhängigkeiten:
|
|
||||||
libQt5 (Pakete libqt5*)
|
|
||||||
cupsys-bsd zum Drucken
|
|
||||||
|
|
||||||
Kompilieren:
|
|
||||||
$ qmake (qmake-qt5 für Debian-basierende Systeme)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
|
|
||||||
[ru]
|
|
||||||
Зависимости:
|
|
||||||
libQt5 (пакет libqt5*)
|
|
||||||
cupsys-bsd для печати
|
|
||||||
|
|
||||||
Как компилировать?:
|
|
||||||
$ qmake (qmake-qt5 для систем основанных на Debian)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
|
|
||||||
[pt]
|
|
||||||
Dependências:
|
|
||||||
libQt5 (ver pacotes libqt5*)
|
|
||||||
cupsys-bsd para impressão
|
|
||||||
|
|
||||||
Como compilar:
|
|
||||||
$ qmake (qmake-qt5 para sistemas baseados em Debian)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
|
|
||||||
[es]
|
|
||||||
Dependencias:
|
|
||||||
libQt5 (paquetes libqt5*)
|
|
||||||
cupsys-bsd para imprimir
|
|
||||||
|
|
||||||
Cómo compilar:
|
|
||||||
$ qmake (qmake-qt5 para los sistemas basados en Debian)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
|
|
||||||
[cs]
|
|
||||||
Požadavky :
|
|
||||||
libQt5 (viz balíček libqt5*)
|
|
||||||
cupsys-bsd kvůli tisku
|
|
||||||
|
|
||||||
Jak program sestavit :
|
|
||||||
$ qmake (qmake-qt5 u systémů založených na Debianu)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
|
|
||||||
[pl]
|
|
||||||
Zależności:
|
|
||||||
libQt5 (pakiety libqt5 *)
|
|
||||||
cupsys-bsd do druku
|
|
||||||
|
|
||||||
Sposób kompilacji:
|
|
||||||
$ qmake (qmake-qt5 dla systemów opartych na Debianie)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
|
|
||||||
[it]
|
|
||||||
Dipendenze:
|
|
||||||
libQt5 (vedi pacchetti libqt5*)
|
|
||||||
cupsys-bsd per la stampa
|
|
||||||
|
|
||||||
Come compilare:
|
|
||||||
$ qmake (qmake-qt5 per sistemi basati su Debian)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
|
|
||||||
[el]
|
|
||||||
Απαιτήσεις:
|
|
||||||
libQt5 (δείτε για πακέτα libqt5*)
|
|
||||||
cupsys-bsd για εκτύπωση
|
|
||||||
|
|
||||||
Πως να το μεταγλωττίσετε:
|
|
||||||
$ qmake (qmake-qt5 για συστήματα βασισμένα σε Debian)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
|
|
||||||
[nl]
|
|
||||||
vereisten:
|
|
||||||
libqt5 (zie pakketten libqt5 *)
|
|
||||||
cupsys-bsd om af te drukken
|
|
||||||
|
|
||||||
Hoe te compileren:
|
|
||||||
$ Qmake (qmake-qt5 voor Debian-gebaseerde systemen)
|
|
||||||
$ make
|
|
||||||
# Umask 0022
|
|
||||||
# Make install
|
|
||||||
|
|
||||||
[be]
|
|
||||||
Vereisten:
|
|
||||||
libQt5 (pakketten libqt5*)
|
|
||||||
cupsys-bsd voor het afdrukken
|
|
||||||
|
|
||||||
Hoe te compileren :
|
|
||||||
$ qmake (qmake-qt5 voor systemen op basis van Debian)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
|
|
||||||
[da]
|
|
||||||
Krav:
|
|
||||||
libQt5 (se pakke libqt5*)
|
|
||||||
cupsys-bsd til udskrivning
|
|
||||||
|
|
||||||
Hvordan man kompilerer:
|
|
||||||
$ qmake (qmake-qt5 for Debian baserede systemer)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
|
|
||||||
[ja]
|
|
||||||
必要条件 :
|
|
||||||
libQt5 (パッケージ libqt5* を参照)
|
|
||||||
cupsys-bsd 印刷用
|
|
||||||
|
|
||||||
コンパイルの方法 :
|
|
||||||
$ qmake (Debian ベースのシステムでは qmake-qt5)
|
|
||||||
$ make
|
|
||||||
# umask 0022
|
|
||||||
# make install
|
|
||||||
@@ -0,0 +1,365 @@
|
|||||||
|
# Building QElectroTech from source
|
||||||
|
|
||||||
|
QElectroTech is built with **CMake** and requires the **current Qt6 only**; Qt5 and the
|
||||||
|
old `qmake`-based build described in earlier versions of this file have
|
||||||
|
been retired.
|
||||||
|
|
||||||
|
## 1. Getting the source
|
||||||
|
|
||||||
|
QET uses git submodules, so clone recursively:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git clone --recursive https://github.com/qelectrotech/qelectrotech-source-mirror.git
|
||||||
|
cd qelectrotech-source-mirror
|
||||||
|
```
|
||||||
|
|
||||||
|
If you already have a non-recursive clone:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git submodule update --init --recursive
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Requirements
|
||||||
|
|
||||||
|
| Component | Status | Notes |
|
||||||
|
|---|---|---|
|
||||||
|
| CMake ≥ 3.5 | required | CMake 4.3+ is also fine, see note below |
|
||||||
|
| C++17 compiler | required | GCC or Clang on Unix-like platforms; MSVC or MinGW-w64 g++ on Windows — see [Choosing a compiler](#3-choosing-a-compiler-unix) / [Building on Windows](#6-building-on-windows-msvc--mingw) |
|
||||||
|
| Qt6 base + widgets | required | |
|
||||||
|
| Qt6 **GuiPrivate** headers | required | needed for clickable PDF hyperlinks; **hard build failure** at CMake generate time if missing, see below |
|
||||||
|
| SQLite3 | required | used by the nomenclature/summary database |
|
||||||
|
| Qt Linguist tools (`lrelease`) | required | compiles the tracked `.ts` files into `.qm` as part of every normal build |
|
||||||
|
| pugixml | handled automatically | fetched and built via CMake FetchContent if not already present on the system — see [pugixml](#8-pugixml) below |
|
||||||
|
| Qt Test module | required if building tests | `PACKAGE_TESTS` is `ON` by default; QtTest ships as part of the base Qt6 dev packages listed below on every platform, no extra package needed |
|
||||||
|
| KDE Frameworks (KF6) | optional | see [Building without KDE Frameworks](#9-building-without-kde-frameworks) |
|
||||||
|
| QtPdf module | optional | see [PDF page import](#7-pdf-page-import-qtpdf) |
|
||||||
|
|
||||||
|
A note on CMake versions: the project declares a minimum of 3.5 but is
|
||||||
|
routinely built with much newer releases; if your CMake is older than 4.3 it
|
||||||
|
simply won't have the newer `SQLite3::SQLite3` target name, which the build
|
||||||
|
script compensates for automatically. There is nothing you need to do either
|
||||||
|
way.
|
||||||
|
|
||||||
|
## 3. Building (out-of-source build)
|
||||||
|
|
||||||
|
Always build in a separate directory from the source tree — in-source builds
|
||||||
|
are not supported.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake ..
|
||||||
|
cmake --build . --parallel
|
||||||
|
```
|
||||||
|
|
||||||
|
For a Unix-like platform you'll usually also want an explicit build type,
|
||||||
|
since CMake's default (empty) build type means no optimization and no
|
||||||
|
debug info either:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Release
|
||||||
|
```
|
||||||
|
|
||||||
|
To install (default prefix is `/usr/local`; adjust with
|
||||||
|
`-DCMAKE_INSTALL_PREFIX=...` at the configure step if needed):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo cmake --install .
|
||||||
|
```
|
||||||
|
|
||||||
|
Useful configure-time options (pass as `-D<OPTION>=ON/OFF`):
|
||||||
|
|
||||||
|
| Option | Default | Effect |
|
||||||
|
|---|---|---|
|
||||||
|
| `PACKAGE_TESTS` | `ON` | build the test suite (needs the Qt Test module) |
|
||||||
|
| `BUILD_WITH_KF` | distro-dependent | build against KDE Frameworks; see below |
|
||||||
|
| `QET_ENABLE_PCH` | `OFF` | precompiled headers for faster rebuilds (needs CMake ≥ 3.16) |
|
||||||
|
|
||||||
|
## 3.1 Choosing a compiler (Unix)
|
||||||
|
|
||||||
|
Both **GCC** and **Clang** are supported on Unix-like platforms; any
|
||||||
|
reasonably recent release with solid C++17 support works. Neither is
|
||||||
|
hard-coded — CMake picks up whichever `cc`/`c++` (or `CC`/`CXX` environment
|
||||||
|
variables) resolve to by default, and you can force one explicitly at
|
||||||
|
configure time:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
|
||||||
|
# or
|
||||||
|
cmake .. -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++
|
||||||
|
```
|
||||||
|
|
||||||
|
or equivalently, by exporting `CC`/`CXX` before calling `cmake`. The
|
||||||
|
per-distro package lists below install GCC by default (via
|
||||||
|
`build-essential`/`gcc-c++`/the base toolchain); see each section for the
|
||||||
|
Clang alternative.
|
||||||
|
|
||||||
|
## 4. Distribution packages
|
||||||
|
|
||||||
|
Exact package names vary by release/branch; if a name below doesn't resolve,
|
||||||
|
search your package manager (`apt search`, `pkg search`, `brew search`) for
|
||||||
|
the closest match.
|
||||||
|
|
||||||
|
### Debian / Ubuntu
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt install \
|
||||||
|
build-essential cmake ninja-build git \
|
||||||
|
qt6-base-dev qt6-base-private-dev qt6-tools-dev qt6-tools-dev-tools \
|
||||||
|
libsqlite3-dev \
|
||||||
|
libkf6coreaddons-dev libkf6widgetsaddons-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
`qt6-base-private-dev` is **not** pulled in automatically by `qt6-base-dev`
|
||||||
|
but is mandatory for the build (see
|
||||||
|
[Qt6 private headers](#6-qt6-private-headers-mandatory) below).
|
||||||
|
|
||||||
|
For Clang instead of GCC:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt install clang
|
||||||
|
```
|
||||||
|
|
||||||
|
Optional, for PDF page import:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt install libqt6pdf6-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Optional, to use a system pugixml instead of letting CMake fetch it:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt install libpugixml-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fedora / RHEL
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo dnf install \
|
||||||
|
cmake gcc-c++ git \
|
||||||
|
qt6-qtbase-devel qt6-qtbase-private-devel qt6-qttools-devel \
|
||||||
|
sqlite-devel \
|
||||||
|
kf6-kcoreaddons-devel kf6-kwidgetsaddons-devel
|
||||||
|
```
|
||||||
|
|
||||||
|
For Clang instead of GCC: `sudo dnf install clang`.
|
||||||
|
|
||||||
|
Optional, for PDF page import: `qt6-qtwebengine-devel` provides `QtPdf` on
|
||||||
|
some Fedora releases — check `dnf provides '*/QPdfDocument'` if unsure.
|
||||||
|
|
||||||
|
Optional, for a system pugixml: `sudo dnf install pugixml-devel`.
|
||||||
|
|
||||||
|
### FreeBSD
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pkg install \
|
||||||
|
cmake git \
|
||||||
|
qt6-base qt6-tools \
|
||||||
|
sqlite3 \
|
||||||
|
kf6-kcoreaddons kf6-kwidgetsaddons
|
||||||
|
```
|
||||||
|
|
||||||
|
(from ports: `devel/qt6-base`, `devel/qt6-tools`, `databases/sqlite3`,
|
||||||
|
`devel/kf6-kcoreaddons`, `x11-toolkits/kf6-kwidgetsaddons`.) Qt6's
|
||||||
|
`GuiPrivate` headers ship as part of `qt6-base` on FreeBSD, no separate
|
||||||
|
package is needed. `QtPdf` is not packaged on FreeBSD at the time of writing
|
||||||
|
— PDF page import will simply be disabled (see below).
|
||||||
|
|
||||||
|
Clang is the FreeBSD base system compiler and needs nothing extra; GCC is
|
||||||
|
available via `pkg install gcc` if you'd rather use it.
|
||||||
|
|
||||||
|
Optional, for a system pugixml: `pkg install pugixml` (`devel/pugixml`).
|
||||||
|
|
||||||
|
### macOS
|
||||||
|
|
||||||
|
Using [Homebrew](https://brew.sh):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
brew install cmake qt sqlite ninja
|
||||||
|
```
|
||||||
|
|
||||||
|
Homebrew's `qt` formula is Qt6 and includes the private headers, so no
|
||||||
|
extra package is required there. KDE Frameworks are not practically
|
||||||
|
available via Homebrew, so macOS builds are normally done **without KF**
|
||||||
|
(`-DBUILD_WITH_KF=OFF`) — see the caveat below.
|
||||||
|
|
||||||
|
Apple's Clang (from the Xcode Command Line Tools, `xcode-select --install`)
|
||||||
|
is the default and needs no extra package; GCC is available via
|
||||||
|
`brew install gcc` if you specifically want it instead.
|
||||||
|
|
||||||
|
Optional, for a system pugixml: `brew install pugixml`.
|
||||||
|
|
||||||
|
### Windows
|
||||||
|
|
||||||
|
See [Building on Windows](#6-building-on-windows-msvc--mingw) below — the
|
||||||
|
package sources differ enough from the Unix-like platforms above (no system
|
||||||
|
package manager, SQLite3 and Qt aren't provided the same way) that it gets
|
||||||
|
its own section.
|
||||||
|
|
||||||
|
## 5. pugixml
|
||||||
|
|
||||||
|
QET links against [pugixml](https://pugixml.org) for XML parsing.
|
||||||
|
`cmake/fetch_pugixml.cmake` handles this automatically: if a suitable
|
||||||
|
pugixml isn't already available on the system, CMake fetches and builds it
|
||||||
|
from source via `FetchContent` as part of the normal configure step — you
|
||||||
|
don't need to do anything to get a working build.
|
||||||
|
|
||||||
|
If you'd rather avoid that network fetch and use your distribution's own
|
||||||
|
pugixml package instead, install it before running `cmake ..` (package
|
||||||
|
names are listed per platform in the [Distribution
|
||||||
|
packages](#4-distribution-packages) section above — e.g. `libpugixml-dev`
|
||||||
|
on Debian/Ubuntu, `pugixml-devel` on Fedora).
|
||||||
|
|
||||||
|
## 6. Building on Windows (MSVC / MinGW)
|
||||||
|
|
||||||
|
Both toolchains QET's CMake build targets on Windows are covered here:
|
||||||
|
**MSVC** (Visual Studio 2019/2022) and **MinGW-w64** (gcc). Unlike the
|
||||||
|
Unix-like platforms above, there's no single system package manager, so
|
||||||
|
Qt, SQLite3 and (optionally) KDE Frameworks each need to be sourced
|
||||||
|
separately per toolchain.
|
||||||
|
|
||||||
|
One piece of good news either way: unlike Debian/Fedora, the official Qt
|
||||||
|
Windows kits (both MSVC and MinGW) **already include the GuiPrivate private
|
||||||
|
headers** — there's no separate "private headers" package to remember on
|
||||||
|
Windows (see [Qt6 private headers](#7-qt6-private-headers-mandatory) below
|
||||||
|
for why this matters).
|
||||||
|
|
||||||
|
`QtPdf` is available as an optional component in the Qt Online Installer
|
||||||
|
(look for "Qt PDF" under the Qt 6.4+ node); if you skip it, PDF page import
|
||||||
|
is silently disabled exactly as on the other platforms. KDE Frameworks are
|
||||||
|
not prebuilt for Windows by any of the routes below, so Windows builds
|
||||||
|
normally use `-DBUILD_WITH_KF=OFF` (see the
|
||||||
|
[autosave caveat](#9-building-without-kde-frameworks)).
|
||||||
|
|
||||||
|
### MSVC (Visual Studio 2019 / 2022)
|
||||||
|
|
||||||
|
1. Install Visual Studio with the "Desktop development with C++" workload,
|
||||||
|
and install Qt6 for MSVC (e.g. the `msvc2019_64` or `msvc2022_64` kit)
|
||||||
|
via the [Qt Online Installer](https://www.qt.io/download-qt-installer).
|
||||||
|
2. Get SQLite3 — the simplest route is [vcpkg](https://vcpkg.io):
|
||||||
|
```bat
|
||||||
|
vcpkg install sqlite3:x64-windows
|
||||||
|
```
|
||||||
|
3. Configure and build from an "x64 Native Tools Command Prompt for VS":
|
||||||
|
```bat
|
||||||
|
mkdir build && cd build
|
||||||
|
cmake .. -G "Visual Studio 17 2022" -A x64 ^
|
||||||
|
-DCMAKE_PREFIX_PATH="C:\Qt\6.x.x\msvc2022_64" ^
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" ^
|
||||||
|
-DBUILD_WITH_KF=OFF
|
||||||
|
cmake --build . --config Release --parallel
|
||||||
|
```
|
||||||
|
Ninja works too, in place of the Visual Studio generator, if you prefer
|
||||||
|
(`-G Ninja -DCMAKE_BUILD_TYPE=Release`, run from the same VS developer
|
||||||
|
prompt so `cl.exe` is on `PATH`).
|
||||||
|
|
||||||
|
### MinGW-w64 (gcc)
|
||||||
|
|
||||||
|
Two common ways to get a MinGW toolchain that matches a Qt6 MinGW kit: Qt's
|
||||||
|
own bundled MinGW (installed alongside a `mingw_64` Qt kit via the Qt
|
||||||
|
Online Installer), or [MSYS2](https://www.msys2.org).
|
||||||
|
|
||||||
|
Using MSYS2, from a **MINGW64** shell:
|
||||||
|
```sh
|
||||||
|
pacman -S --needed \
|
||||||
|
mingw-w64-x86_64-toolchain \
|
||||||
|
mingw-w64-x86_64-qt6-base mingw-w64-x86_64-qt6-tools \
|
||||||
|
mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja \
|
||||||
|
mingw-w64-x86_64-sqlite3
|
||||||
|
|
||||||
|
mkdir build && cd build
|
||||||
|
cmake .. -G Ninja -DBUILD_WITH_KF=OFF -DCMAKE_BUILD_TYPE=Release
|
||||||
|
cmake --build .
|
||||||
|
```
|
||||||
|
|
||||||
|
If `libbacktrace` is installed in your MSYS2 environment, pass the following
|
||||||
|
cached CMake variables when configuring. They are only necessary in that
|
||||||
|
case, because `FindBacktrace` needs them to locate the library:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cmake .. -G Ninja -DBUILD_WITH_KF=OFF -DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DBacktrace_INCLUDE_DIR=/c/msys64/clang64/include \
|
||||||
|
-DBacktrace_LIBRARY=/c/msys64/clang64/lib/libbacktrace.a
|
||||||
|
```
|
||||||
|
|
||||||
|
`Backtrace_INCLUDE_DIR` must point to the directory containing `backtrace.h`,
|
||||||
|
and `Backtrace_LIBRARY` to the `libbacktrace.a` file. The paths above are the
|
||||||
|
usual locations for the MSYS2 `clang64` environment; adjust them if your
|
||||||
|
installation uses a different prefix.
|
||||||
|
|
||||||
|
(KF6 isn't packaged in MSYS2 either, hence `-DBUILD_WITH_KF=OFF` again.)
|
||||||
|
|
||||||
|
Using the Qt Online Installer's bundled MinGW kit instead: point
|
||||||
|
`CMAKE_PREFIX_PATH` at that kit (e.g. `C:\Qt\6.x.x\mingw_64`) and make sure
|
||||||
|
its bundled `g++.exe` comes first on `PATH`, or pass
|
||||||
|
`-DCMAKE_C_COMPILER`/`-DCMAKE_CXX_COMPILER` explicitly so CMake doesn't pick
|
||||||
|
up a different MinGW installation. SQLite3 still has to come from elsewhere
|
||||||
|
in this path — vcpkg with a `mingw`-flavoured triplet, or MSYS2's package as
|
||||||
|
above.
|
||||||
|
|
||||||
|
## 7. Qt6 private headers (mandatory)
|
||||||
|
|
||||||
|
QET uses the private `QPdfEngine` API (`<private/qpdf_p.h>`) to produce
|
||||||
|
clickable hyperlinks in PDF export. This requires Qt's `GuiPrivate` target,
|
||||||
|
which on several distributions (notably Debian/Ubuntu) is shipped in a
|
||||||
|
separate "private headers" package rather than the normal `-dev` package —
|
||||||
|
e.g. `qt6-base-private-dev` on Debian/Ubuntu, or
|
||||||
|
`qt6-qtbase-private-devel` on Fedora. Without it, CMake's `find_package`
|
||||||
|
step succeeds but configuration later fails at generate time with:
|
||||||
|
|
||||||
|
```
|
||||||
|
Imported target "Qt6::GuiPrivate" includes non-existent path
|
||||||
|
```
|
||||||
|
|
||||||
|
If you hit this, install your distribution's Qt6 private-headers package
|
||||||
|
(on Windows this is a non-issue — see [Building on
|
||||||
|
Windows](#6-building-on-windows-msvc--mingw) above).
|
||||||
|
|
||||||
|
## 8. PDF page import (QtPdf)
|
||||||
|
|
||||||
|
The toolbar's "Add a PDF" feature (`QPdfDocument::pagePointSize()`) needs
|
||||||
|
the separate `QtPdf` Qt module, available since Qt 6.4.
|
||||||
|
|
||||||
|
**This is optional and soft-fails**: if `QtPdf` isn't found, or is present
|
||||||
|
but older than 6.4, CMake prints a status message and simply disables the
|
||||||
|
feature (`QET_HAS_QTPDF` stays `FALSE`) — it does **not** stop the build.
|
||||||
|
Some Qt6 distributions don't ship `QtPdf` at all (it lives outside Qt's
|
||||||
|
core module set, alongside QtWebEngine), so this is expected on several
|
||||||
|
platforms, including FreeBSD as of this writing.
|
||||||
|
|
||||||
|
## 9. Building without KDE Frameworks
|
||||||
|
|
||||||
|
`BUILD_WITH_KF=OFF` builds QET against a bundled fallback UI layer instead
|
||||||
|
of KDE Frameworks (`kcoreaddons`/`kwidgetsaddons`). This is a fully
|
||||||
|
supported configuration and is, in practice, the default on platforms where
|
||||||
|
KF6 isn't readily packaged (macOS and Windows in particular).
|
||||||
|
|
||||||
|
Almost everything works identically either way. The one known caveat:
|
||||||
|
**autosave behavior is not as polished without KF**, since QET relies on
|
||||||
|
KCoreAddons' autosave/backup-file handling when it's available. Expect
|
||||||
|
autosave to work, but less robustly than on a KF-enabled build.
|
||||||
|
|
||||||
|
## 10. Translations (developer operation)
|
||||||
|
|
||||||
|
Everything in this section is a **maintainer/translator task**, not
|
||||||
|
something a normal build or a packager needs to touch.
|
||||||
|
|
||||||
|
The `.qm` files shipped with the application are compiled from the tracked
|
||||||
|
`.ts` files automatically as part of every normal build (via `lrelease`) —
|
||||||
|
regular builds and packages get up-to-date translated UI strings for free,
|
||||||
|
with no developer action needed.
|
||||||
|
|
||||||
|
Refreshing the `.ts` files themselves from the source code (`lupdate`) is
|
||||||
|
the actual developer operation: it's exposed as its own opt-in build
|
||||||
|
target, separate from the normal build:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cmake --build . --target update_translations
|
||||||
|
```
|
||||||
|
|
||||||
|
This is **not** run automatically and should not be added to routine or
|
||||||
|
parallel CI builds: it rewrites the tracked `.ts` files as a side effect,
|
||||||
|
and running it concurrently with the normal `lrelease` compilation step (as
|
||||||
|
would happen under `-j`/parallel builds) can corrupt a `.ts` file mid-write,
|
||||||
|
causing `lrelease` to fail with "Premature end of document". Run it on its
|
||||||
|
own, review the diff, and commit the updated `.ts` files separately.
|
||||||
@@ -1,60 +1,60 @@
|
|||||||
[ca]
|
[ca]
|
||||||
QElectroTech és una aplicació Qt5 per crear esquemes elèctrics.
|
QElectroTech és una aplicació Qt6 per crear esquemes elèctrics.
|
||||||
QET utilitza el format XML per als seus elements i esquemes i inclou un editor d'esquemes, un editor d'elements i un editor de caixetins.
|
QET utilitza el format XML per als seus elements i esquemes i inclou un editor d'esquemes, un editor d'elements i un editor de caixetins.
|
||||||
|
|
||||||
[en]
|
[en]
|
||||||
QElectroTech is a Qt5 application to design electric diagrams.
|
QElectroTech is a Qt6 application to design electric diagrams.
|
||||||
It uses XML files for elements and diagrams, and includes both a diagram editor, a element editor, and an titleblock editor.
|
It uses XML files for elements and diagrams, and includes both a diagram editor, a element editor, and an titleblock editor.
|
||||||
|
|
||||||
[fr]
|
[fr]
|
||||||
QElectroTech est une application Qt5 pour réaliser des schémas électriques.
|
QElectroTech est une application Qt6 pour réaliser des schémas électriques.
|
||||||
QET utilise le format XML pour ses éléments et ses schémas et inclut un éditeur de schémas, un éditeur d'élément, ainsi qu'un editeur de cartouche.
|
QET utilise le format XML pour ses éléments et ses schémas et inclut un éditeur de schémas, un éditeur d'élément, ainsi qu'un editeur de cartouche.
|
||||||
|
|
||||||
[de]
|
[de]
|
||||||
QElectroTech ist eine Qt5 Software, um Schaltpläne zu erstellen.
|
QElectroTech ist eine Qt6 Software, um Schaltpläne zu erstellen.
|
||||||
QET benutzt das XML Format für seine Bauteile und seine Projekte, und beinhaltet einen Schaltplaneditor, einen Bauteileditor sowie einen Schriftfeldeditor.
|
QET benutzt das XML Format für seine Bauteile und seine Projekte, und beinhaltet einen Schaltplaneditor, einen Bauteileditor sowie einen Schriftfeldeditor.
|
||||||
|
|
||||||
|
|
||||||
[ru]
|
[ru]
|
||||||
QElectroTech - приложение написанное на Qt5 и предназначенное для разработки электрических схем.
|
QElectroTech - приложение написанное на Qt6 и предназначенное для разработки электрических схем.
|
||||||
Оно использует XML-файлы для элементов и схем, и включает, как редактор схем, так и редактор элементов.
|
Оно использует XML-файлы для элементов и схем, и включает, как редактор схем, так и редактор элементов.
|
||||||
|
|
||||||
[pt]
|
[pt]
|
||||||
QElectroTech é uma aplicação baseada em Qt5 para desenhar esquemas eléctricos.
|
QElectroTech é uma aplicação baseada em Qt6 para desenhar esquemas eléctricos.
|
||||||
QET utiliza ficheiros XML para os elementos e para os esquemas e inclui um editor de esquemas e um editor de elementos.
|
QET utiliza ficheiros XML para os elementos e para os esquemas e inclui um editor de esquemas e um editor de elementos.
|
||||||
|
|
||||||
[es]
|
[es]
|
||||||
QElectroTech es una aplicación Qt5 para diseñar esquemas eléctricos.
|
QElectroTech es una aplicación Qt6 para diseñar esquemas eléctricos.
|
||||||
Utiliza archivos XML para los elementos y esquemas, e incluye un editor de esquemas y un editor de elementos.
|
Utiliza archivos XML para los elementos y esquemas, e incluye un editor de esquemas y un editor de elementos.
|
||||||
|
|
||||||
[cs]
|
[cs]
|
||||||
QElectroTech je aplikací Qt5 určenou pro návrh nákresů elektrických obvodů.
|
QElectroTech je aplikací Qt6 určenou pro návrh nákresů elektrických obvodů.
|
||||||
Pro prvky a nákresy používá soubory XML, a zahrnuje v sobě jak editor nákresů, tak editor prvků.
|
Pro prvky a nákresy používá soubory XML, a zahrnuje v sobě jak editor nákresů, tak editor prvků.
|
||||||
|
|
||||||
[pl]
|
[pl]
|
||||||
QElectroTech to aplikacja napisana w Qt5, przeznaczona do tworzenia schematów elektrycznych.
|
QElectroTech to aplikacja napisana w Qt6, przeznaczona do tworzenia schematów elektrycznych.
|
||||||
Wykorzystuje XML do zapisywania plików elementów i projektów. Posiada edytor schematów i elementów.
|
Wykorzystuje XML do zapisywania plików elementów i projektów. Posiada edytor schematów i elementów.
|
||||||
|
|
||||||
[it]
|
[it]
|
||||||
QElectroTech è una applicazione fatta in Qt5 per disegnare schemi elettrici.
|
QElectroTech è una applicazione fatta in Qt6 per disegnare schemi elettrici.
|
||||||
QET usa il formato XML per i suoi elementi e schemi, includendo anche un editor per gli stessi.
|
QET usa il formato XML per i suoi elementi e schemi, includendo anche un editor per gli stessi.
|
||||||
|
|
||||||
[el]
|
[el]
|
||||||
Το QElectroTech είναι μια εφαρμογή Qt5 για σχεδίαση ηλεκτρικών διαγραμμάτων.
|
Το QElectroTech είναι μια εφαρμογή Qt6 για σχεδίαση ηλεκτρικών διαγραμμάτων.
|
||||||
Χρησιμοποιεί αρχεία XML για στοιχεία και διαγράμματα, και περιλαμβάνει επεξεργαστή διαγραμμάτων καθώς και επεξεργαστή στοιχείων.
|
Χρησιμοποιεί αρχεία XML για στοιχεία και διαγράμματα, και περιλαμβάνει επεξεργαστή διαγραμμάτων καθώς και επεξεργαστή στοιχείων.
|
||||||
|
|
||||||
[nl]
|
[nl]
|
||||||
QElectroTech is een Qt5 applicatie om elektrische schema's te ontwerpen.
|
QElectroTech is een Qt6 applicatie om elektrische schema's te ontwerpen.
|
||||||
Het maakt gebruik van XML-bestanden voor elementen en diagrammen, en omvat zowel een diagram bewerker, een element bewerker, en een bloksjabloon bewerker.
|
Het maakt gebruik van XML-bestanden voor elementen en diagrammen, en omvat zowel een diagram bewerker, een element bewerker, en een bloksjabloon bewerker.
|
||||||
|
|
||||||
[be]
|
[be]
|
||||||
QElectroTech is een Qt5 toepassing voor het maken en beheren van elektrische schema's.
|
QElectroTech is een Qt6 toepassing voor het maken en beheren van elektrische schema's.
|
||||||
QET gebruikt XML voor de elementen en schema's en omvat een schematische editor, itemeditor, en een titel sjabloon editor.
|
QET gebruikt XML voor de elementen en schema's en omvat een schematische editor, itemeditor, en een titel sjabloon editor.
|
||||||
|
|
||||||
[da]
|
[da]
|
||||||
QElectroTech er et Qt5 program til at redigere elektriske diagrammer.
|
QElectroTech er et Qt6 program til at redigere elektriske diagrammer.
|
||||||
Det bruger XML filer for symboler og diagrammer og inkluderer diagram, symbol og titelblok redigering.
|
Det bruger XML filer for symboler og diagrammer og inkluderer diagram, symbol og titelblok redigering.
|
||||||
|
|
||||||
[ja]
|
[ja]
|
||||||
QElectroTech は電気回路図を作成する Qt5 アプリケーションです。
|
QElectroTech は電気回路図を作成する Qt6 アプリケーションです。
|
||||||
QET は要素と回路図に XML 形式を利用し、回路図エディタ、要素エディタ、表題欄エディタを含みます。
|
QET は要素と回路図に XML 形式を利用し、回路図エディタ、要素エディタ、表題欄エディタを含みます。
|
||||||
|
|||||||
@@ -40,16 +40,16 @@ git clone --recursive https://github.com/qelectrotech/qelectrotech-source-mirror
|
|||||||
Here are the technical choices made for the software development:
|
Here are the technical choices made for the software development:
|
||||||
|
|
||||||
* Integrated development environment: [Qt Framework](https://www.qt.io/ide/)
|
* Integrated development environment: [Qt Framework](https://www.qt.io/ide/)
|
||||||
* Libraries: Qt 5.x
|
* Libraries: Qt 6.x
|
||||||
* [KF5 Framework](https://github.com/KDE)
|
* [KF6 Framework](https://github.com/KDE)
|
||||||
[Cmake](https://cmake.org/install/)
|
[Cmake](https://cmake.org/install/)
|
||||||
[kcoreaddons](https://github.com/KDE/kcoreaddons/tree/kf5)
|
[kcoreaddons](https://github.com/KDE/kcoreaddons/tree/kf6)
|
||||||
[kwidgetsaddons](https://github.com/KDE/kwidgetsaddons/tree/kf5).
|
[kwidgetsaddons](https://github.com/KDE/kwidgetsaddons/tree/kf6).
|
||||||
* Coding language: [C++](https://en.wikipedia.org/wiki/C%2B%2B)
|
* Coding language: [C++](https://en.wikipedia.org/wiki/C%2B%2B)
|
||||||
* GUI translations: [Qt Linguist](http://doc.qt.io/qt-5/qtlinguist-index.html)
|
* GUI translations: [Qt Linguist](http://doc.qt.io/qt-6/qtlinguist-index.html)
|
||||||
* Version control: [GIT](https://github.com/qelectrotech/qelectrotech-source-mirror.git)
|
* Version control: [GIT](https://github.com/qelectrotech/qelectrotech-source-mirror.git)
|
||||||
* Doxygen documentation :[Doxygen](https://qelectrotech.github.io/qelectrotech-source-mirror/)
|
* Doxygen documentation :[Doxygen](https://download.qelectrotech.org/qet/doxygen/html/)
|
||||||
* QtCreator qch doxygen :[QElectroTech.qch](https://github.com/qelectrotech/qelectrotech-source-mirror/blob/master/doc/QElectroTech.qch)
|
* QtCreator qch doxygen :[QElectroTech.qch](https://download.qelectrotech.org/qet/doxygen/QElectroTech.qch)
|
||||||
* File format for projects, elements and titleblocks: [XML](http://www.w3schools.com/xml/xml_whatis.asp)
|
* File format for projects, elements and titleblocks: [XML](http://www.w3schools.com/xml/xml_whatis.asp)
|
||||||
* Main development platform: [GNU/Linux](http://getgnulinux.org/en/linux/)
|
* Main development platform: [GNU/Linux](http://getgnulinux.org/en/linux/)
|
||||||
* Targeted platforms: Windows, GNU/Linux, Mac OS X, BSDs
|
* Targeted platforms: Windows, GNU/Linux, Mac OS X, BSDs
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
{
|
{
|
||||||
"id": "org.qelectrotech.QElectroTech",
|
"id": "org.qelectrotech.QElectroTech",
|
||||||
"runtime": "org.kde.Platform",
|
"runtime": "org.kde.Platform",
|
||||||
"runtime-version": "5.15-25.08",
|
"runtime-version": "6.11",
|
||||||
"sdk": "org.kde.Sdk",
|
"sdk": "org.kde.Sdk",
|
||||||
|
"base": "io.qt.qtwebengine.BaseApp",
|
||||||
|
"base-version": "6.11",
|
||||||
"command": "qelectrotech",
|
"command": "qelectrotech",
|
||||||
"rename-desktop-file": "org.qelectrotech.qelectrotech.desktop",
|
"rename-desktop-file": "org.qelectrotech.qelectrotech.desktop",
|
||||||
"rename-appdata-file": "qelectrotech.appdata.xml",
|
"rename-appdata-file": "qelectrotech.appdata.xml",
|
||||||
@@ -25,12 +27,26 @@
|
|||||||
"*.la",
|
"*.la",
|
||||||
"*.a"
|
"*.a"
|
||||||
],
|
],
|
||||||
|
"cleanup-commands": [
|
||||||
|
"/app/cleanup-BaseApp.sh"
|
||||||
|
],
|
||||||
"modules": [
|
"modules": [
|
||||||
"tkinter.json",
|
"tkinter.json",
|
||||||
"pypi-dependencies.json",
|
"pypi-dependencies.json",
|
||||||
{
|
{
|
||||||
"name": "qelectrotech",
|
"name": "qelectrotech",
|
||||||
"buildsystem": "qmake",
|
"buildsystem": "cmake",
|
||||||
|
"config-opts": [
|
||||||
|
"-DCMAKE_INSTALL_PREFIX=/app",
|
||||||
|
"-DQT_VERSION_MAJOR=6",
|
||||||
|
"-DBUILD_WITH_KF=ON",
|
||||||
|
"-DBUILD_KF=OFF",
|
||||||
|
"-DPACKAGE_TESTS=OFF",
|
||||||
|
"-DBUILD_PUGIXML=ON",
|
||||||
|
"-DFETCHCONTENT_FULLY_DISCONNECTED=ON",
|
||||||
|
"-DFETCHCONTENT_SOURCE_DIR_PUGIXML=/run/build/qelectrotech/pugixml",
|
||||||
|
"-DQET_EXPORT_PROJECT_DB=ON"
|
||||||
|
],
|
||||||
"post-install": [
|
"post-install": [
|
||||||
"mv ${FLATPAK_DEST}/share/mime/packages/qelectrotech.xml ${FLATPAK_DEST}/share/mime/packages/org.qelectrotech.QElectroTech.xml"
|
"mv ${FLATPAK_DEST}/share/mime/packages/qelectrotech.xml ${FLATPAK_DEST}/share/mime/packages/org.qelectrotech.QElectroTech.xml"
|
||||||
],
|
],
|
||||||
@@ -38,12 +54,6 @@
|
|||||||
{
|
{
|
||||||
"type": "dir",
|
"type": "dir",
|
||||||
"path": "../.."
|
"path": "../.."
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "patch",
|
|
||||||
"paths": [
|
|
||||||
"patches/fix-the-installation-paths.patch"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,19 @@
|
|||||||
"""
|
"""
|
||||||
generate-page.py — Generates gh-pages/index.html for QElectroTech nightly builds.
|
generate-page.py — Generates gh-pages/index.html for QElectroTech nightly builds.
|
||||||
Called from windows-msi.yml deploy-pages job.
|
Called from windows-msi.yml deploy-pages job.
|
||||||
|
|
||||||
Environment variables required:
|
Environment variables required:
|
||||||
DATE, SHORT, REPO, SHA, RUN_URL, RUN_NUMBER,
|
DATE, SHORT, REPO, SHA, RUN_URL, RUN_NUMBER,
|
||||||
INSTALLER_URL, PORTABLE_URL, MSI_URL (optional)
|
INSTALLER_URL, PORTABLE_URL, MSI_URL (optional)
|
||||||
Optional (Qt6 experimental track — omitted entirely if empty):
|
|
||||||
INSTALLER_QT6_URL, PORTABLE_QT6_URL, MSI_QT6_URL
|
Optional (frozen Qt5 legacy build — omitted entirely if empty):
|
||||||
|
LEGACY_INSTALLER_URL, LEGACY_PORTABLE_URL, LEGACY_MSI_URL
|
||||||
|
|
||||||
|
NOTE: Windows Qt5 CI build removed (Qt6 is now the sole track built and
|
||||||
|
signed going forward). INSTALLER_URL / PORTABLE_URL / MSI_URL point to the
|
||||||
|
Qt6 build artifacts. The LEGACY_* variables, when set, point to the last
|
||||||
|
Qt5 nightly assets that were ever published — kept downloadable but frozen
|
||||||
|
(windows-build.yml no longer regenerates or deletes them).
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
|
|
||||||
@@ -20,9 +28,9 @@ installer_url = os.environ.get("INSTALLER_URL", "")
|
|||||||
portable_url = os.environ.get("PORTABLE_URL", "")
|
portable_url = os.environ.get("PORTABLE_URL", "")
|
||||||
msi_url = os.environ.get("MSI_URL", "")
|
msi_url = os.environ.get("MSI_URL", "")
|
||||||
|
|
||||||
installer_qt6_url = os.environ.get("INSTALLER_QT6_URL", "")
|
legacy_installer_url = os.environ.get("LEGACY_INSTALLER_URL", "")
|
||||||
portable_qt6_url = os.environ.get("PORTABLE_QT6_URL", "")
|
legacy_portable_url = os.environ.get("LEGACY_PORTABLE_URL", "")
|
||||||
msi_qt6_url = os.environ.get("MSI_QT6_URL", "")
|
legacy_msi_url = os.environ.get("LEGACY_MSI_URL", "")
|
||||||
|
|
||||||
msi_block = ""
|
msi_block = ""
|
||||||
if msi_url:
|
if msi_url:
|
||||||
@@ -32,43 +40,44 @@ if msi_url:
|
|||||||
<span class="btn-text">Windows Installer .msi<small>.msi — for enterprise / GPO deployment</small></span>
|
<span class="btn-text">Windows Installer .msi<small>.msi — for enterprise / GPO deployment</small></span>
|
||||||
</a>"""
|
</a>"""
|
||||||
|
|
||||||
# Qt6 experimental section — only rendered if at least one Qt6 asset exists.
|
# Legacy Qt5 section — only rendered if at least one legacy asset exists.
|
||||||
qt6_block = ""
|
legacy_block = ""
|
||||||
if installer_qt6_url or portable_qt6_url or msi_qt6_url:
|
if legacy_installer_url or legacy_portable_url or legacy_msi_url:
|
||||||
qt6_msi_btn = ""
|
legacy_installer_btn = ""
|
||||||
if msi_qt6_url:
|
if legacy_installer_url:
|
||||||
qt6_msi_btn = f"""
|
legacy_installer_btn = f"""
|
||||||
<a class="btn btn-msi" href="{msi_qt6_url}">
|
<a class="btn btn-secondary" href="{legacy_installer_url}">
|
||||||
<span class="btn-icon">⬇</span>
|
<span class="btn-icon">⬇</span>
|
||||||
<span class="btn-text">Windows Installer .msi (Qt6)<small>.msi — experimental, for enterprise / GPO deployment</small></span>
|
<span class="btn-text">Windows Installer (Qt5, legacy)<small>.exe — frozen, no longer updated</small></span>
|
||||||
</a>"""
|
</a>"""
|
||||||
qt6_installer_btn = ""
|
legacy_msi_btn = ""
|
||||||
if installer_qt6_url:
|
if legacy_msi_url:
|
||||||
qt6_installer_btn = f"""
|
legacy_msi_btn = f"""
|
||||||
<a class="btn btn-primary" href="{installer_qt6_url}">
|
<a class="btn btn-secondary" href="{legacy_msi_url}">
|
||||||
<span class="btn-icon">⬇</span>
|
<span class="btn-icon">⬇</span>
|
||||||
<span class="btn-text">Windows Installer (Qt6)<small>.exe — experimental, includes all dependencies</small></span>
|
<span class="btn-text">Windows Installer .msi (Qt5, legacy)<small>.msi — frozen, no longer updated</small></span>
|
||||||
</a>"""
|
</a>"""
|
||||||
qt6_portable_btn = ""
|
legacy_portable_btn = ""
|
||||||
if portable_qt6_url:
|
if legacy_portable_url:
|
||||||
qt6_portable_btn = f"""
|
legacy_portable_btn = f"""
|
||||||
<a class="btn btn-secondary" href="{portable_qt6_url}">
|
<a class="btn btn-secondary" href="{legacy_portable_url}">
|
||||||
<span class="btn-icon">📦</span>
|
<span class="btn-icon">📦</span>
|
||||||
<span class="btn-text">Windows Portable (Qt6)<small>.zip — experimental, no installation required</small></span>
|
<span class="btn-text">Windows Portable (Qt5, legacy)<small>.zip — frozen, no longer updated</small></span>
|
||||||
</a>"""
|
</a>"""
|
||||||
|
|
||||||
qt6_block = f"""
|
legacy_block = f"""
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h2>🧪 Windows — x86_64 — Qt6 track</h2>
|
<h2>🗃 Windows — x86_64 — Qt5 (legacy, unmaintained)</h2>
|
||||||
<div class="warning">
|
<div class="warning">
|
||||||
⚠️ <strong>Experimental.</strong> These Qt6-based installer, portable and MSI
|
🗃 <strong>Legacy build — frozen, no longer updated.</strong> This is the
|
||||||
builds are new and not as thoroughly tested as the Qt5 track above. Expect rough
|
last Qt5 build published before Windows CI switched to Qt6 only. Kept available for
|
||||||
edges; please report issues and mention "Qt6" explicitly.
|
anyone who still needs it, but it will not receive further fixes or security updates.
|
||||||
|
Please migrate to the Qt6 build above when you can.
|
||||||
</div>
|
</div>
|
||||||
<div class="downloads">
|
<div class="downloads">
|
||||||
{qt6_installer_btn}
|
{legacy_installer_btn}
|
||||||
{qt6_msi_btn}
|
{legacy_msi_btn}
|
||||||
{qt6_portable_btn}
|
{legacy_portable_btn}
|
||||||
</div>
|
</div>
|
||||||
</div>"""
|
</div>"""
|
||||||
|
|
||||||
@@ -126,7 +135,7 @@ For production use, download a <a href="https://github.com/{repo}/releases">stab
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h2>🏹 Windows — x86_64 — Qt5 track</h2>
|
<h2>🏹 Windows — x86_64</h2>
|
||||||
<div class="downloads">
|
<div class="downloads">
|
||||||
<a class="btn btn-primary" href="{installer_url}">
|
<a class="btn btn-primary" href="{installer_url}">
|
||||||
<span class="btn-icon">⬇</span>
|
<span class="btn-icon">⬇</span>
|
||||||
@@ -143,7 +152,7 @@ For production use, download a <a href="https://github.com/{repo}/releases">stab
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{qt6_block}
|
{legacy_block}
|
||||||
</main>
|
</main>
|
||||||
<footer>
|
<footer>
|
||||||
Auto-generated by GitHub Actions ·
|
Auto-generated by GitHub Actions ·
|
||||||
|
|||||||
@@ -1,48 +1,39 @@
|
|||||||
name: qelectrotech
|
name: qelectrotech
|
||||||
title: QElectroTech
|
title: QElectroTech
|
||||||
base: core22
|
base: core24
|
||||||
adopt-info: qelectrotech
|
adopt-info: qelectrotech
|
||||||
license: GPL-2.0
|
license: GPL-2.0
|
||||||
summary: Electrical diagram editor
|
summary: Electrical diagram editor
|
||||||
description: |
|
description: |
|
||||||
QElectroTech, or QET in short, is a libre and open source desktop application
|
QElectroTech, or QET in short, is a libre and open source desktop application
|
||||||
to create diagrams and schematics.
|
to create diagrams and schematics.
|
||||||
|
|
||||||
grade: stable
|
grade: stable
|
||||||
confinement: strict
|
confinement: strict
|
||||||
compression: lzo
|
compression: lzo
|
||||||
|
|
||||||
architectures:
|
platforms:
|
||||||
- build-on: amd64
|
amd64:
|
||||||
build-for: amd64
|
arm64:
|
||||||
- build-on: arm64
|
|
||||||
build-for: arm64
|
|
||||||
|
|
||||||
layout:
|
|
||||||
/usr/local/share/qelectrotech:
|
|
||||||
symlink: $SNAP/usr/local/share/qelectrotech
|
|
||||||
|
|
||||||
|
|
||||||
apps:
|
apps:
|
||||||
qelectrotech:
|
qelectrotech:
|
||||||
command: usr/local/bin/qelectrotech
|
command: usr/bin/qelectrotech
|
||||||
common-id: qelectrotech.desktop
|
common-id: qelectrotech.desktop
|
||||||
extensions:
|
extensions:
|
||||||
- kde-neon
|
- kde-neon-6
|
||||||
plugs: &plugs [opengl, unity7, home, removable-media, gsettings, network, cups-control, wayland, x11]
|
plugs: &plugs [opengl, unity7, home, removable-media, gsettings, network, cups-control, wayland, x11]
|
||||||
environment: &env
|
environment: &env
|
||||||
TCL_LIBRARY: $SNAP/usr/share/tcltk/tcl8.6
|
TCL_LIBRARY: $SNAP/usr/share/tcltk/tcl8.6
|
||||||
HOME: $SNAP_USER_COMMON
|
HOME: $SNAP_USER_COMMON
|
||||||
PYTHONPATH: $SNAP:$SNAP/lib/python3.10/site-packages:$SNAP/usr/lib/python3.10:$SNAP/usr/lib/python3.10/lib-dynload
|
PYTHONPATH: $SNAP:$SNAP/lib/python3.12/site-packages:$SNAP/usr/lib/python3.12:$SNAP/usr/lib/python3.12/lib-dynload
|
||||||
|
|
||||||
qet-tb-generator:
|
qet-tb-generator:
|
||||||
command: bin/qet_tb_generator
|
command: bin/qet_tb_generator
|
||||||
extensions:
|
extensions:
|
||||||
- kde-neon
|
- kde-neon-6
|
||||||
plugs: *plugs
|
plugs: *plugs
|
||||||
environment: *env
|
environment: *env
|
||||||
|
|
||||||
|
|
||||||
parts:
|
parts:
|
||||||
launchers:
|
launchers:
|
||||||
plugin: dump
|
plugin: dump
|
||||||
@@ -63,15 +54,16 @@ parts:
|
|||||||
kde-sdk-setup:
|
kde-sdk-setup:
|
||||||
plugin: nil
|
plugin: nil
|
||||||
build-snaps:
|
build-snaps:
|
||||||
- kf5-5-110-qt-5-15-11-core22-sdk
|
- kf6-core24-sdk
|
||||||
|
- kde-qt6-core24-sdk
|
||||||
build-packages:
|
build-packages:
|
||||||
- g++
|
- g++
|
||||||
- mesa-common-dev
|
- mesa-common-dev
|
||||||
- libglvnd-dev
|
- libglvnd-dev
|
||||||
- rsync
|
- rsync
|
||||||
override-build: |
|
override-build: |
|
||||||
rsync -a --ignore-existing /snap/kf5-5-110-qt-5-15-11-core22-sdk/current/ /
|
rsync -a --ignore-existing /snap/kf6-core24-sdk/current/ /
|
||||||
|
rsync -a --ignore-existing /snap/kde-qt6-core24-sdk/current/ /
|
||||||
|
|
||||||
qelectrotech:
|
qelectrotech:
|
||||||
after: [kde-sdk-setup]
|
after: [kde-sdk-setup]
|
||||||
@@ -81,37 +73,55 @@ parts:
|
|||||||
- git
|
- git
|
||||||
- sqlite3
|
- sqlite3
|
||||||
- xdg-user-dirs
|
- xdg-user-dirs
|
||||||
# libxcb-cursor0 was added as a hard dependency of the Qt5 xcb platform
|
- libqt6qml6
|
||||||
# plugin in Qt 5.15.x. The kf5-5-110-qt-5-15-11-core22 content snap does
|
# libxcb-cursor0 workaround was needed against the Qt5/KF5 core22 content
|
||||||
# not bundle it, so dlopen() of libqxcb.so fails on Ubuntu 24.04 hosts
|
# snap (issue #373). Not yet re-verified against kf6-core24 — remove this
|
||||||
# with "found but could not load" (issue #373). Staging the 22.04 build
|
# if the Qt6 xcb platform plugin loads cleanly without it.
|
||||||
# of this library satisfies the dep without changing base or Qt version.
|
|
||||||
- libxcb-cursor0
|
- libxcb-cursor0
|
||||||
build-packages:
|
build-packages:
|
||||||
- git
|
- git
|
||||||
|
- cmake
|
||||||
|
- ninja-build
|
||||||
- libsqlite3-dev
|
- libsqlite3-dev
|
||||||
|
- qt6-tools-dev
|
||||||
|
- qt6-base-private-dev
|
||||||
|
- qt6-declarative-dev
|
||||||
|
- pkgconf
|
||||||
|
# Qt6 PrintSupport records Cups::Cups as a third-party dependency
|
||||||
|
# (qprint_p.h includes <cups/ppd.h>), so find_package(Qt6 PrintSupport)
|
||||||
|
# runs FindCups at configure time and fails without the CUPS headers.
|
||||||
|
# Build-time only: nothing from it is staged into the snap.
|
||||||
|
- libcups2-dev
|
||||||
override-build: |
|
override-build: |
|
||||||
displayed_version=$(cat sources/qetversion.cpp | grep "return QVersionNumber{"| head -n 1| awk -F "{" '{ print $2 }' | awk -F "}" '{ print $1 }' | sed -e 's/,/./g' -e 's/ //g')
|
displayed_version=$(cat sources/qetversion.cpp | grep "return QVersionNumber{"| head -n 1| awk -F "{" '{ print $2 }' | awk -F "}" '{ print $1 }' | sed -e 's/,/./g' -e 's/ //g')
|
||||||
snap_version="${displayed_version}-g$(git rev-parse --short=8 HEAD)"
|
snap_version="${displayed_version}-g$(git rev-parse --short=8 HEAD)"
|
||||||
modified_displayed_version="${snap_version}.snap"
|
modified_displayed_version="${snap_version}.snap"
|
||||||
sed -i -E "s|const QString displayedVersion =.*|const QString displayedVersion =\"$modified_displayed_version\";|" sources/qet.h
|
sed -i -E "s|const QString displayedVersion =.*|const QString displayedVersion =\"$modified_displayed_version\";|" sources/qet.h
|
||||||
craftctl set version="$snap_version"
|
craftctl set version="$snap_version"
|
||||||
qmake "$CRAFT_PART_SRC/qelectrotech.pro"
|
cmake -G Ninja -B build -S "$CRAFT_PART_SRC" \
|
||||||
make -j${CRAFT_PARALLEL_BUILD_COUNT}
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||||
make install INSTALL_ROOT="$CRAFT_PART_INSTALL"
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DQT_VERSION_MAJOR=6 \
|
||||||
|
-DBUILD_WITH_KF=ON \
|
||||||
|
-DBUILD_KF=OFF \
|
||||||
|
-DPACKAGE_TESTS=OFF \
|
||||||
|
-DBUILD_PUGIXML=ON \
|
||||||
|
-DQET_EXPORT_PROJECT_DB=ON
|
||||||
|
ninja -C build -j${CRAFT_PARALLEL_BUILD_COUNT}
|
||||||
|
DESTDIR="$CRAFT_PART_INSTALL" ninja -C build install
|
||||||
override-stage: |
|
override-stage: |
|
||||||
craftctl default
|
craftctl default
|
||||||
# patch desktop file with correct icon path
|
# patch desktop file with correct icon path
|
||||||
SED_CMD="sed -i -E s|^Icon=(.*)|Icon=\${SNAP}/usr/local/share/icons/hicolor/128x128/apps/\1.png|g"
|
SED_CMD="sed -i -E s|^Icon=(.*)|Icon=\${SNAP}/usr/share/icons/hicolor/128x128/apps/\1.png|g"
|
||||||
$SED_CMD usr/local/share/applications/org.qelectrotech.qelectrotech.desktop
|
$SED_CMD usr/share/applications/org.qelectrotech.qelectrotech.desktop
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
after: [qelectrotech, qet-tb-generator]
|
after: [qelectrotech, qet-tb-generator]
|
||||||
plugin: nil
|
plugin: nil
|
||||||
build-snaps: [kf5-5-110-qt-5-15-11-core22]
|
build-snaps: [kf6-core24]
|
||||||
override-prime: |
|
override-prime: |
|
||||||
set -eux
|
set -eux
|
||||||
for snap in "kf5-5-110-qt-5-15-11-core22"; do # List all content-snaps you're using here
|
for snap in "kf6-core24"; do # List all content-snaps you're using here
|
||||||
cd "/snap/$snap/current" && find . -type f,l -exec rm -f "$CRAFT_PRIME/{}" "$CRAFT_PRIME/usr/{}" \;
|
cd "/snap/$snap/current" && find . -type f,l -exec rm -f "$CRAFT_PRIME/{}" "$CRAFT_PRIME/usr/{}" \;
|
||||||
done
|
done
|
||||||
for cruft in bug lintian man; do
|
for cruft in bug lintian man; do
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ git clone --recursive https://github.com/qelectrotech/qelectrotech-source-mirror
|
|||||||
Here are the technical choices made for the software development:
|
Here are the technical choices made for the software development:
|
||||||
|
|
||||||
* Integrated development environment: [Qt Framework](https://www.qt.io/ide/)
|
* Integrated development environment: [Qt Framework](https://www.qt.io/ide/)
|
||||||
* Libraries: Qt 5.x
|
* Libraries: Qt 5.x / Qt 6.x
|
||||||
* [KF5 Framework](https://github.com/KDE)
|
* [KF5/6 Framework](https://github.com/KDE)
|
||||||
[Cmake](https://cmake.org/install/)
|
[Cmake](https://cmake.org/install/)
|
||||||
[kcoreaddons](https://github.com/KDE/kcoreaddons/tree/kf5)
|
[kcoreaddons](https://github.com/KDE/kcoreaddons/tree/kf5)
|
||||||
[kwidgetsaddons](https://github.com/KDE/kwidgetsaddons/tree/kf5).
|
[kwidgetsaddons](https://github.com/KDE/kwidgetsaddons/tree/kf5).
|
||||||
|
|||||||
@@ -25,24 +25,24 @@ message("INSTALL_PREFIX " ${INSTALL_PREFIX})
|
|||||||
message("QET_BINARY_PATH " ${QET_BINARY_PATH})
|
message("QET_BINARY_PATH " ${QET_BINARY_PATH})
|
||||||
|
|
||||||
if(${QET_COMMON_COLLECTION_PATH} STRGREATER "")
|
if(${QET_COMMON_COLLECTION_PATH} STRGREATER "")
|
||||||
message("QET_COMMON_COLLECTION_PATH " ${INSTALL_PREFIX}${QET_COMMON_COLLECTION_PATH})
|
message("QET_COMMON_COLLECTION_PATH " ${COMPIL_PREFIX}${QET_COMMON_COLLECTION_PATH})
|
||||||
add_definitions(-DQET_COMMON_COLLECTION_PATH=${INSTALL_PREFIX}${QET_COMMON_COLLECTION_PATH})
|
add_definitions(-DQET_COMMON_COLLECTION_PATH=${COMPIL_PREFIX}${QET_COMMON_COLLECTION_PATH})
|
||||||
endif()
|
endif()
|
||||||
if(${QET_COMMON_TBT_PATH} STRGREATER "")
|
if(${QET_COMMON_TBT_PATH} STRGREATER "")
|
||||||
message("QET_COMMON_TBT_PATH " ${INSTALL_PREFIX}${QET_COMMON_TBT_PATH})
|
message("QET_COMMON_TBT_PATH " ${COMPIL_PREFIX}${QET_COMMON_TBT_PATH})
|
||||||
add_definitions(-DQET_COMMON_TBT_PATH=${INSTALL_PREFIX}${QET_COMMON_TBT_PATH})
|
add_definitions(-DQET_COMMON_TBT_PATH=${COMPIL_PREFIX}${QET_COMMON_TBT_PATH})
|
||||||
endif()
|
endif()
|
||||||
if(${QET_LANG_PATH_RELATIVE_TO_BINARY_PATH})
|
if(${QET_LANG_PATH_RELATIVE_TO_BINARY_PATH})
|
||||||
add_definitions(-DQET_LANG_PATH_RELATIVE_TO_BINARY_PATH)
|
add_definitions(-DQET_LANG_PATH_RELATIVE_TO_BINARY_PATH)
|
||||||
endif()
|
endif()
|
||||||
if(${QET_LANG_PATH} STRGREATER "")
|
if(${QET_LANG_PATH} STRGREATER "")
|
||||||
message("QET_LANG_PATH " ${INSTALL_PREFIX}${QET_LANG_PATH})
|
message("QET_LANG_PATH " ${COMPIL_PREFIX}${QET_LANG_PATH})
|
||||||
add_definitions(-DQET_LANG_PATH=${INSTALL_PREFIX}${QET_LANG_PATH})
|
add_definitions(-DQET_LANG_PATH=${COMPIL_PREFIX}${QET_LANG_PATH})
|
||||||
endif()
|
endif()
|
||||||
if (NOT MINGW)
|
if (NOT MINGW)
|
||||||
if(${QET_EXAMPLES_PATH} STRGREATER "")
|
if(${QET_EXAMPLES_PATH} STRGREATER "")
|
||||||
message("QET_EXAMPLES_PATH " ${INSTALL_PREFIX}${QET_EXAMPLES_PATH})
|
message("QET_EXAMPLES_PATH " ${COMPIL_PREFIX}${QET_EXAMPLES_PATH})
|
||||||
add_definitions(-DQET_EXAMPLES_PATH=${INSTALL_PREFIX}${QET_EXAMPLES_PATH})
|
add_definitions(-DQET_EXAMPLES_PATH=${COMPIL_PREFIX}${QET_EXAMPLES_PATH})
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -62,10 +62,9 @@ message("PROJECT_SOURCE_DIR :" ${PROJECT_SOURCE_DIR})
|
|||||||
message("QET_DIR :" ${QET_DIR})
|
message("QET_DIR :" ${QET_DIR})
|
||||||
message("GIT_COMMIT_SHA :" ${GIT_COMMIT_SHA})
|
message("GIT_COMMIT_SHA :" ${GIT_COMMIT_SHA})
|
||||||
|
|
||||||
if(BUILD_WITH_KF5)
|
if(BUILD_WITH_KF)
|
||||||
message("KF5_GIT_TAG :" ${KF5_GIT_TAG})
|
message("KF_GIT_TAG :" ${KF_GIT_TAG})
|
||||||
else()
|
else()
|
||||||
add_definitions(-DBUILD_WITHOUT_KF5)
|
add_definitions(-DBUILD_WITHOUT_KF)
|
||||||
endif()
|
endif()
|
||||||
message("QET_COMPONENTS :" ${QET_COMPONENTS})
|
message("QET_COMPONENTS :" ${QET_COMPONENTS})
|
||||||
message("QT_VERSION_MAJOR :" ${QT_VERSION_MAJOR})
|
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ add_definitions(-DQT_MESSAGELOGCONTEXT)
|
|||||||
# In order to do so, uncomment the following line.
|
# In order to do so, uncomment the following line.
|
||||||
#add_definitions(-DTODO_LIST)
|
#add_definitions(-DTODO_LIST)
|
||||||
|
|
||||||
# Build with KF5
|
# Build with KDE Frameworks.
|
||||||
option(BUILD_WITH_KF5 "Build with KF5" ON)
|
option(BUILD_WITH_KF "Build with KDE Frameworks" ON)
|
||||||
|
|
||||||
# Precompiled headers for the Qt umbrella headers.
|
# Precompiled headers for the Qt umbrella headers.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -16,52 +16,89 @@
|
|||||||
|
|
||||||
message(" - fetch_kdeaddons")
|
message(" - fetch_kdeaddons")
|
||||||
|
|
||||||
if(BUILD_WITH_KF5)
|
if(BUILD_WITH_KF)
|
||||||
Include(FetchContent)
|
Include(FetchContent)
|
||||||
|
|
||||||
option(BUILD_KF5 "Build KF5 libraries, use system ones otherwise" YES)
|
option(BUILD_KF "Build KF libraries, use system ones otherwise" YES)
|
||||||
|
|
||||||
if(BUILD_KF5)
|
if(BUILD_KF)
|
||||||
|
|
||||||
if(NOT DEFINED KF5_GIT_TAG)
|
# v6.10.0 is a more or less random version, taken as an conservative
|
||||||
#https://qelectrotech.org/forum/viewtopic.php?pid=13924#p13924
|
# approach. Pinned to the commits v6.10.0 points at, not to the tags
|
||||||
set(KF5_GIT_TAG v5.77.0)
|
# themselves; see the note in fetch_pugixml.cmake. Each module lives in its
|
||||||
|
# own repository, so the same v6.10.0 release is a different commit in
|
||||||
|
# each.
|
||||||
|
#
|
||||||
|
# KDE uses annotated tags, so "git ls-remote <repo> 'refs/tags/v6.10.0*'"
|
||||||
|
# prints two hashes per module: refs/tags/v6.10.0 is the tag object (the
|
||||||
|
# tagger, the date and the tag message) and refs/tags/v6.10.0^{} is the
|
||||||
|
# commit that object points at. The hashes below are the "^{}" ones, i.e.
|
||||||
|
# the commits. Lightweight tags, such as pugixml's v1.15 and
|
||||||
|
# SingleApplication's v3.2.0, have no tag object and print only the
|
||||||
|
# commit line.
|
||||||
|
set(KF_ECM_GIT_COMMIT 7dd28cc56c339c3f8fb356f7c53c0e8f61433d81) # v6.10.0
|
||||||
|
set(KF_KCOREADDONS_GIT_COMMIT c569f974dab24b4784ad186a3db4b76b2fa36612) # v6.10.0
|
||||||
|
set(KF_KWIDGETSADDONS_GIT_COMMIT 1abbed8a280d6626c59fb197f2c4667d2b1e7445) # v6.10.0
|
||||||
|
|
||||||
|
if(DEFINED KF_GIT_TAG)
|
||||||
|
# Explicit override: -DKF_GIT_TAG=<ref> selects one ref for all three
|
||||||
|
# modules, unpinned, exactly as it did before.
|
||||||
|
set(KF_ECM_GIT_COMMIT ${KF_GIT_TAG})
|
||||||
|
set(KF_KCOREADDONS_GIT_COMMIT ${KF_GIT_TAG})
|
||||||
|
set(KF_KWIDGETSADDONS_GIT_COMMIT ${KF_GIT_TAG})
|
||||||
|
else()
|
||||||
|
# Keep KF_GIT_TAG defined: define_definitions.cmake reports it.
|
||||||
|
set(KF_GIT_TAG v6.10.0)
|
||||||
endif()
|
endif()
|
||||||
|
# using a function in order to limit the scope of the variables
|
||||||
|
# with CMake >=3.25 we could use a block()
|
||||||
|
function(qet_make_kf_available)
|
||||||
|
# Fix stop the run autotests of kcoreaddons
|
||||||
|
# see
|
||||||
|
# https://invent.kde.org/frameworks/kcoreaddons/-/blob/master/CMakeLists.txt#L98
|
||||||
|
# issue:
|
||||||
|
# CMake Error at /usr/share/ECM/modules/ECMAddTests.cmake:89 (add_executable):
|
||||||
|
# Cannot find source file:
|
||||||
|
# see
|
||||||
|
# https://qelectrotech.org/forum/viewtopic.php?pid=13929#p13929
|
||||||
|
set(KDE_SKIP_TEST_SETTINGS ON)
|
||||||
|
set(BUILD_TESTING OFF)
|
||||||
|
|
||||||
# Fix stop the run autotests of kcoreaddons
|
# QElectroTech is a plain QtWidgets application with no QML anywhere in
|
||||||
# see
|
# it; these disable optional features of the fetched KF modules that
|
||||||
# https://invent.kde.org/frameworks/kcoreaddons/-/blob/master/CMakeLists.txt#L98
|
# would otherwise pull in extra Qt6 components (e.g. Qt6Qml) we don't
|
||||||
# issue:
|
# have and don't need.
|
||||||
# CMake Error at /usr/share/ECM/modules/ECMAddTests.cmake:89 (add_executable):
|
set(BUILD_DESIGNERPLUGIN OFF)
|
||||||
# Cannot find source file:
|
set(KCOREADDONS_USE_QML OFF)
|
||||||
# see
|
set(BUILD_QCH OFF)
|
||||||
# https://qelectrotech.org/forum/viewtopic.php?pid=13929#p13929
|
set(BUILD_SHARED_LIBS OFF)
|
||||||
set(KDE_SKIP_TEST_SETTINGS "TRUE")
|
|
||||||
set(BUILD_TESTING "0")
|
|
||||||
FetchContent_Declare(
|
|
||||||
ecm
|
|
||||||
GIT_REPOSITORY https://invent.kde.org/frameworks/extra-cmake-modules.git
|
|
||||||
GIT_TAG ${KF5_GIT_TAG})
|
|
||||||
FetchContent_MakeAvailable(ecm)
|
|
||||||
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
kcoreaddons
|
ecm
|
||||||
GIT_REPOSITORY https://invent.kde.org/frameworks/kcoreaddons.git
|
GIT_REPOSITORY https://invent.kde.org/frameworks/extra-cmake-modules.git
|
||||||
GIT_TAG ${KF5_GIT_TAG})
|
GIT_TAG ${KF_ECM_GIT_COMMIT})
|
||||||
FetchContent_MakeAvailable(kcoreaddons)
|
FetchContent_MakeAvailable(ecm)
|
||||||
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
kwidgetsaddons
|
kcoreaddons
|
||||||
GIT_REPOSITORY https://invent.kde.org/frameworks/kwidgetsaddons.git
|
GIT_REPOSITORY https://invent.kde.org/frameworks/kcoreaddons.git
|
||||||
GIT_TAG ${KF5_GIT_TAG})
|
GIT_TAG ${KF_KCOREADDONS_GIT_COMMIT})
|
||||||
FetchContent_MakeAvailable(kwidgetsaddons)
|
FetchContent_MakeAvailable(kcoreaddons)
|
||||||
|
|
||||||
|
FetchContent_Declare(
|
||||||
|
kwidgetsaddons
|
||||||
|
GIT_REPOSITORY https://invent.kde.org/frameworks/kwidgetsaddons.git
|
||||||
|
GIT_TAG ${KF_KWIDGETSADDONS_GIT_COMMIT})
|
||||||
|
FetchContent_MakeAvailable(kwidgetsaddons)
|
||||||
|
endfunction()
|
||||||
|
qet_make_kf_available()
|
||||||
else()
|
else()
|
||||||
find_package(KF5CoreAddons REQUIRED)
|
find_package(KF6CoreAddons REQUIRED)
|
||||||
find_package(KF5WidgetsAddons REQUIRED)
|
find_package(KF6WidgetsAddons REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(KF5_PRIVATE_LIBRARIES
|
set(KF_PRIVATE_LIBRARIES
|
||||||
KF5::WidgetsAddons
|
KF6::WidgetsAddons
|
||||||
KF5::CoreAddons
|
KF6::CoreAddons
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -22,11 +22,52 @@ option(BUILD_PUGIXML "Build pugixml library, use system one otherwise" YES)
|
|||||||
|
|
||||||
if(BUILD_PUGIXML)
|
if(BUILD_PUGIXML)
|
||||||
|
|
||||||
|
# Pinned to the commit v1.15 points at, not to the tag itself.
|
||||||
|
#
|
||||||
|
# A git tag is only a named pointer to a commit, and anyone with push access
|
||||||
|
# to the upstream repository can move it (git push --force) to any other
|
||||||
|
# commit. FetchContent fetches whatever the tag points at when the build
|
||||||
|
# runs, so if a maintainer account or CI token is compromised, the attacker
|
||||||
|
# can retarget a well-known release tag to malicious code: every fresh build
|
||||||
|
# of QElectroTech then compiles it, while nothing changes in this repository
|
||||||
|
# and the tag name still looks correct. A commit hash cannot be moved, because
|
||||||
|
# it is derived from the content: different code always has a different hash.
|
||||||
|
#
|
||||||
|
# This attack has been used in the wild:
|
||||||
|
# - March 2025, tj-actions/changed-files (CVE-2025-30066): tags v1 through
|
||||||
|
# v45.0.7 were retargeted to a commit that dumped CI secrets into build
|
||||||
|
# logs, affecting more than 23,000 repositories.
|
||||||
|
# - March 2026, aquasecurity/trivy-action (CVE-2026-33634): 76 of 77
|
||||||
|
# version tags were force-pushed to a credential stealer and stayed
|
||||||
|
# malicious for about 12 hours.
|
||||||
|
# Both were GitHub Actions rather than CMake dependencies, but the mechanism
|
||||||
|
# is the same one FetchContent relies on here: resolving a git tag at build
|
||||||
|
# time.
|
||||||
|
#
|
||||||
|
# To upgrade, look up the commit the new tag points at with
|
||||||
|
# git ls-remote <repo> 'refs/tags/<tag>*', check that it is the release you
|
||||||
|
# expect, and update both the hash and the trailing tag comment.
|
||||||
|
#
|
||||||
|
# How many lines that prints depends on which of the two kinds of tag
|
||||||
|
# upstream created:
|
||||||
|
# - A lightweight tag is nothing but a ref pointing straight at the commit,
|
||||||
|
# so ls-remote prints a single line, "refs/tags/<tag>", and its hash is
|
||||||
|
# the commit to pin. pugixml tags this way, which is why the v1.15 hash
|
||||||
|
# below is what "git ls-remote ... refs/tags/v1.15" reports directly;
|
||||||
|
# SingleApplication (v3.2.0) does the same.
|
||||||
|
# - An annotated tag is a git object in its own right, carrying a tagger,
|
||||||
|
# a date, a message and optionally a GPG signature, and pointing at the
|
||||||
|
# commit. ls-remote then prints two lines: "refs/tags/<tag>" is the tag
|
||||||
|
# object and "refs/tags/<tag>^{}" is that object dereferenced, i.e. the
|
||||||
|
# commit. The KDE Frameworks modules tag this way, so for them it is the
|
||||||
|
# "^{}" hash that belongs in the pin; the other hash identifies the tag
|
||||||
|
# object itself, which is not the source revision and changes whenever
|
||||||
|
# upstream re-creates the tag, even over the very same commit.
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
pugixml
|
pugixml
|
||||||
GIT_REPOSITORY https://github.com/zeux/pugixml.git
|
GIT_REPOSITORY https://github.com/zeux/pugixml.git
|
||||||
GIT_TAG v1.15)
|
GIT_TAG ee86beb30e4973f5feffe3ce63bfa4fbadf72f38) # v1.15
|
||||||
|
set(PUGIXML_INSTALL OFF CACHE INTERNAL "")
|
||||||
FetchContent_MakeAvailable(pugixml)
|
FetchContent_MakeAvailable(pugixml)
|
||||||
else()
|
else()
|
||||||
find_package(pugixml REQUIRED)
|
find_package(pugixml REQUIRED)
|
||||||
|
|||||||
@@ -23,9 +23,23 @@ set(QAPPLICATION_CLASS QApplication)
|
|||||||
|
|
||||||
Include(FetchContent)
|
Include(FetchContent)
|
||||||
|
|
||||||
|
if(EXISTS "${CMAKE_SOURCE_DIR}/SingleApplication/CMakeLists.txt")
|
||||||
|
# Submodule deja present dans l'arbre source (clone --recursive, tarball
|
||||||
|
# de distro deja peuple via "git submodule update", etc.) : on l'utilise
|
||||||
|
# tel quel, sans acces reseau. Necessaire pour les builds hors-ligne
|
||||||
|
# (pbuilder/sbuild avec FETCHCONTENT_FULLY_DISCONNECTED=ON, Launchpad PPA...).
|
||||||
|
set(FETCHCONTENT_SOURCE_DIR_SINGLEAPPLICATION "${CMAKE_SOURCE_DIR}/SingleApplication")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Pinned to the commit v3.2.0 points at, not to the tag itself; see the note in
|
||||||
|
# fetch_pugixml.cmake. v3.2.0 is a lightweight tag, a ref pointing straight at
|
||||||
|
# the commit, so "git ls-remote <repo> refs/tags/v3.2.0" prints that commit and
|
||||||
|
# nothing else. An annotated tag, as KDE uses in fetch_kdeaddons.cmake, would
|
||||||
|
# print the tag object under refs/tags/v3.2.0 as well, with the commit on the
|
||||||
|
# refs/tags/v3.2.0^{} line.
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
SingleApplication
|
SingleApplication
|
||||||
GIT_REPOSITORY https://github.com/itay-grudev/SingleApplication.git
|
GIT_REPOSITORY https://github.com/itay-grudev/SingleApplication.git
|
||||||
GIT_TAG v3.2.0)
|
GIT_TAG aede311d28d20179216c5419b581087be2a8409f) # v3.2.0
|
||||||
|
set(QT_DEFAULT_MAJOR_VERSION 6)
|
||||||
FetchContent_MakeAvailable(SingleApplication)
|
FetchContent_MakeAvailable(SingleApplication)
|
||||||
|
|||||||
@@ -20,15 +20,15 @@ message(" - paths_compilation_installation")
|
|||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
# for Linux, BSD, Solaris, Minix
|
# for Linux, BSD, Solaris, Minix
|
||||||
set(COMPIL_PREFIX "/usr/local/")
|
set(COMPIL_PREFIX "${CMAKE_INSTALL_PREFIX}/")
|
||||||
set(INSTALL_PREFIX "/usr/local/")
|
set(INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/")
|
||||||
set(QET_BINARY_PATH "bin/")
|
set(QET_BINARY_PATH "bin/")
|
||||||
set(QET_COMMON_COLLECTION_PATH "share/qelectrotech/elements/")
|
set(QET_COMMON_COLLECTION_PATH "share/qelectrotech/elements/")
|
||||||
set(QET_COMMON_TBT_PATH "share/qelectrotech/titleblocks/")
|
set(QET_COMMON_TBT_PATH "share/qelectrotech/titleblocks/")
|
||||||
set(QET_LANG_PATH "share/qelectrotech/lang/")
|
set(QET_LANG_PATH "share/qelectrotech/lang/")
|
||||||
set(QET_EXAMPLES_PATH "share/qelectrotech/examples/")
|
set(QET_EXAMPLES_PATH "share/qelectrotech/examples/")
|
||||||
set(QET_LICENSE_PATH "doc/qelectrotech/")
|
set(QET_LICENSE_PATH "doc/qelectrotech/")
|
||||||
set(QET_MIME_PACKAGE_PATH "../share/mime/packages/")
|
set(QET_MIME_PACKAGE_PATH "share/mime/packages/")
|
||||||
set(QET_DESKTOP_PATH "share/applications/")
|
set(QET_DESKTOP_PATH "share/applications/")
|
||||||
set(QET_ICONS_PATH "share/icons/hicolor/")
|
set(QET_ICONS_PATH "share/icons/hicolor/")
|
||||||
set(QET_MAN_PATH "man/")
|
set(QET_MAN_PATH "man/")
|
||||||
|
|||||||
@@ -16,12 +16,11 @@
|
|||||||
|
|
||||||
message(" - qet_compilation_vars")
|
message(" - qet_compilation_vars")
|
||||||
|
|
||||||
# Note: GuiPrivate is intentionally NOT in this list. Qt6's CMake config only
|
# Note: GuiPrivate is intentionally NOT in this list.
|
||||||
# creates the Qt::GuiPrivate target when "GuiPrivate" is explicitly requested
|
# Qt >= 6.7 ships it as a proper find_package component, but some distro
|
||||||
# as a component, but Qt5 has no Qt5GuiPrivate package at all (the target is
|
# packages (e.g. Ubuntu's qt6-base-private-dev) omit Qt6GuiPrivateConfig.cmake
|
||||||
# created implicitly with Gui), so requesting it as a component breaks the
|
# and only provide the implicit Qt6::GuiPrivate target created alongside
|
||||||
# whole Qt5 configure. It is requested separately, guarded by
|
# Qt6::Gui. Checks are done in the main CMakeLists.txt
|
||||||
# QT_VERSION_MAJOR, after the main find_package.
|
|
||||||
# (Needed for QPdfEngine::drawHyperlink, the PDF internal links.)
|
# (Needed for QPdfEngine::drawHyperlink, the PDF internal links.)
|
||||||
set(QET_COMPONENTS
|
set(QET_COMPONENTS
|
||||||
LinguistTools
|
LinguistTools
|
||||||
@@ -33,6 +32,13 @@ set(QET_COMPONENTS
|
|||||||
Widgets
|
Widgets
|
||||||
Concurrent)
|
Concurrent)
|
||||||
|
|
||||||
|
# Note: Pdf is intentionally NOT in this list. Some Qt6 distributions
|
||||||
|
# (notably the Flatpak org.kde.Platform runtime) don't ship the QtPdf
|
||||||
|
# module at all - it lives in the qtwebengine source tree, not Qt6 core.
|
||||||
|
# Requesting it here as a REQUIRED component would fail the whole
|
||||||
|
# configure on those setups. It is probed separately, QUIET and
|
||||||
|
# non-fatal, right after the main find_package() call below.
|
||||||
|
|
||||||
set(QET_PRIVATE_LIBRARIES
|
set(QET_PRIVATE_LIBRARIES
|
||||||
Qt::PrintSupport
|
Qt::PrintSupport
|
||||||
Qt::Gui
|
Qt::Gui
|
||||||
@@ -45,6 +51,9 @@ set(QET_PRIVATE_LIBRARIES
|
|||||||
Qt::Concurrent
|
Qt::Concurrent
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Qt::Pdf is appended conditionally in CMakeLists.txt, once we know
|
||||||
|
# whether the module was actually found (see QET_HAS_QTPDF).
|
||||||
|
|
||||||
set(QET_RES_FILES
|
set(QET_RES_FILES
|
||||||
${QET_DIR}/sources/autoNum/ui/autonumberingdockwidget.ui
|
${QET_DIR}/sources/autoNum/ui/autonumberingdockwidget.ui
|
||||||
${QET_DIR}/sources/autoNum/ui/autonumberingmanagementw.ui
|
${QET_DIR}/sources/autoNum/ui/autonumberingmanagementw.ui
|
||||||
@@ -91,7 +100,6 @@ set(QET_RES_FILES
|
|||||||
${QET_DIR}/sources/ui/configsaveloaderwidget.ui
|
${QET_DIR}/sources/ui/configsaveloaderwidget.ui
|
||||||
${QET_DIR}/sources/ui/diagramcontextwidget.ui
|
${QET_DIR}/sources/ui/diagramcontextwidget.ui
|
||||||
${QET_DIR}/sources/ui/diagrameditorhandlersizewidget.ui
|
${QET_DIR}/sources/ui/diagrameditorhandlersizewidget.ui
|
||||||
${QET_DIR}/sources/ui/diagramselection.ui
|
|
||||||
${QET_DIR}/sources/ui/dialogwaiting.ui
|
${QET_DIR}/sources/ui/dialogwaiting.ui
|
||||||
${QET_DIR}/sources/ui/dynamicelementtextitemeditor.ui
|
${QET_DIR}/sources/ui/dynamicelementtextitemeditor.ui
|
||||||
${QET_DIR}/sources/ui/elementinfopartwidget.ui
|
${QET_DIR}/sources/ui/elementinfopartwidget.ui
|
||||||
@@ -165,7 +173,11 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/conductornumexport.cpp
|
${QET_DIR}/sources/conductornumexport.cpp
|
||||||
${QET_DIR}/sources/wiringlistexport.h
|
${QET_DIR}/sources/wiringlistexport.h
|
||||||
${QET_DIR}/sources/wiringlistexport.cpp
|
${QET_DIR}/sources/wiringlistexport.cpp
|
||||||
|
${QET_DIR}/sources/ui/wiringlistdialog.h
|
||||||
|
${QET_DIR}/sources/ui/wiringlistdialog.cpp
|
||||||
${QET_DIR}/sources/conductornumexport.h
|
${QET_DIR}/sources/conductornumexport.h
|
||||||
|
${QET_DIR}/sources/bomexport.cpp
|
||||||
|
${QET_DIR}/sources/bomexport.h
|
||||||
${QET_DIR}/sources/conductorprofile.cpp
|
${QET_DIR}/sources/conductorprofile.cpp
|
||||||
${QET_DIR}/sources/conductorprofile.h
|
${QET_DIR}/sources/conductorprofile.h
|
||||||
${QET_DIR}/sources/conductorproperties.cpp
|
${QET_DIR}/sources/conductorproperties.cpp
|
||||||
@@ -177,6 +189,8 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/configdialog.h
|
${QET_DIR}/sources/configdialog.h
|
||||||
${QET_DIR}/sources/createdxf.cpp
|
${QET_DIR}/sources/createdxf.cpp
|
||||||
${QET_DIR}/sources/createdxf.h
|
${QET_DIR}/sources/createdxf.h
|
||||||
|
${QET_DIR}/sources/dxfpaintdevice.cpp
|
||||||
|
${QET_DIR}/sources/dxfpaintdevice.h
|
||||||
${QET_DIR}/sources/diagramcommands.cpp
|
${QET_DIR}/sources/diagramcommands.cpp
|
||||||
${QET_DIR}/sources/diagramcommands.h
|
${QET_DIR}/sources/diagramcommands.h
|
||||||
${QET_DIR}/sources/diagramcontent.cpp
|
${QET_DIR}/sources/diagramcontent.cpp
|
||||||
@@ -215,6 +229,8 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/exportpropertieswidget.h
|
${QET_DIR}/sources/exportpropertieswidget.h
|
||||||
${QET_DIR}/sources/genericpanel.cpp
|
${QET_DIR}/sources/genericpanel.cpp
|
||||||
${QET_DIR}/sources/genericpanel.h
|
${QET_DIR}/sources/genericpanel.h
|
||||||
|
${QET_DIR}/sources/lastusedstyle.cpp
|
||||||
|
${QET_DIR}/sources/lastusedstyle.h
|
||||||
${QET_DIR}/sources/machine_info.cpp
|
${QET_DIR}/sources/machine_info.cpp
|
||||||
${QET_DIR}/sources/machine_info.h
|
${QET_DIR}/sources/machine_info.h
|
||||||
${QET_DIR}/sources/main.cpp
|
${QET_DIR}/sources/main.cpp
|
||||||
@@ -232,6 +248,12 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/qet.h
|
${QET_DIR}/sources/qet.h
|
||||||
${QET_DIR}/sources/qeticons.cpp
|
${QET_DIR}/sources/qeticons.cpp
|
||||||
${QET_DIR}/sources/qeticons.h
|
${QET_DIR}/sources/qeticons.h
|
||||||
|
${QET_DIR}/sources/palettegraphicsview.cpp
|
||||||
|
${QET_DIR}/sources/palettegraphicsview.h
|
||||||
|
${QET_DIR}/sources/qetpalette.cpp
|
||||||
|
${QET_DIR}/sources/qetpalette.h
|
||||||
|
${QET_DIR}/sources/qetstyle.cpp
|
||||||
|
${QET_DIR}/sources/qetstyle.h
|
||||||
${QET_DIR}/sources/qetinformation.cpp
|
${QET_DIR}/sources/qetinformation.cpp
|
||||||
${QET_DIR}/sources/qetinformation.h
|
${QET_DIR}/sources/qetinformation.h
|
||||||
${QET_DIR}/sources/qetmainwindow.cpp
|
${QET_DIR}/sources/qetmainwindow.cpp
|
||||||
@@ -296,18 +318,25 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/dataBase/ui/summaryquerywidget.cpp
|
${QET_DIR}/sources/dataBase/ui/summaryquerywidget.cpp
|
||||||
${QET_DIR}/sources/dataBase/ui/summaryquerywidget.h
|
${QET_DIR}/sources/dataBase/ui/summaryquerywidget.h
|
||||||
|
|
||||||
|
${QET_DIR}/sources/autobreakconductor.cpp
|
||||||
|
${QET_DIR}/sources/autobreakconductor.h
|
||||||
|
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddelement.cpp
|
${QET_DIR}/sources/diagramevent/diagrameventaddelement.cpp
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddelement.h
|
${QET_DIR}/sources/diagramevent/diagrameventaddelement.h
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddimage.cpp
|
${QET_DIR}/sources/diagramevent/diagrameventaddimage.cpp
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddimage.h
|
${QET_DIR}/sources/diagramevent/diagrameventaddimage.h
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddshape.cpp
|
${QET_DIR}/sources/diagramevent/diagrameventaddshape.cpp
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddshape.h
|
${QET_DIR}/sources/diagramevent/diagrameventaddshape.h
|
||||||
|
${QET_DIR}/sources/diagramevent/diagrameventaddpath.cpp
|
||||||
|
${QET_DIR}/sources/diagramevent/diagrameventaddpath.h
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddtext.cpp
|
${QET_DIR}/sources/diagramevent/diagrameventaddtext.cpp
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddtext.h
|
${QET_DIR}/sources/diagramevent/diagrameventaddtext.h
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventinterface.cpp
|
${QET_DIR}/sources/diagramevent/diagrameventinterface.cpp
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventinterface.h
|
${QET_DIR}/sources/diagramevent/diagrameventinterface.h
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddmacro.cpp
|
${QET_DIR}/sources/diagramevent/diagrameventaddmacro.cpp
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddmacro.h
|
${QET_DIR}/sources/diagramevent/diagrameventaddmacro.h
|
||||||
|
${QET_DIR}/sources/diagramevent/diagrameventaddpaste.cpp
|
||||||
|
${QET_DIR}/sources/diagramevent/diagrameventaddpaste.h
|
||||||
|
|
||||||
${QET_DIR}/sources/dvevent/dveventinterface.cpp
|
${QET_DIR}/sources/dvevent/dveventinterface.cpp
|
||||||
${QET_DIR}/sources/dvevent/dveventinterface.h
|
${QET_DIR}/sources/dvevent/dveventinterface.h
|
||||||
@@ -409,6 +438,8 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/ElementsCollection/elementcollectionhandler.h
|
${QET_DIR}/sources/ElementsCollection/elementcollectionhandler.h
|
||||||
${QET_DIR}/sources/ElementsCollection/elementcollectionitem.cpp
|
${QET_DIR}/sources/ElementsCollection/elementcollectionitem.cpp
|
||||||
${QET_DIR}/sources/ElementsCollection/elementcollectionitem.h
|
${QET_DIR}/sources/ElementsCollection/elementcollectionitem.h
|
||||||
|
${QET_DIR}/sources/ElementsCollection/elementpreviewdelegate.cpp
|
||||||
|
${QET_DIR}/sources/ElementsCollection/elementpreviewdelegate.h
|
||||||
${QET_DIR}/sources/ElementsCollection/elementscollectionmodel.cpp
|
${QET_DIR}/sources/ElementsCollection/elementscollectionmodel.cpp
|
||||||
${QET_DIR}/sources/ElementsCollection/elementscollectionmodel.h
|
${QET_DIR}/sources/ElementsCollection/elementscollectionmodel.h
|
||||||
${QET_DIR}/sources/ElementsCollection/elementscollectionwidget.cpp
|
${QET_DIR}/sources/ElementsCollection/elementscollectionwidget.cpp
|
||||||
@@ -455,6 +486,8 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/project/projectusagetracker.cpp
|
${QET_DIR}/sources/project/projectusagetracker.cpp
|
||||||
${QET_DIR}/sources/project/projectusagetracker.h
|
${QET_DIR}/sources/project/projectusagetracker.h
|
||||||
|
|
||||||
|
${QET_DIR}/sources/properties/deviceinformation.cpp
|
||||||
|
${QET_DIR}/sources/properties/deviceinformation.h
|
||||||
${QET_DIR}/sources/properties/elementdata.cpp
|
${QET_DIR}/sources/properties/elementdata.cpp
|
||||||
${QET_DIR}/sources/properties/elementdata.h
|
${QET_DIR}/sources/properties/elementdata.h
|
||||||
${QET_DIR}/sources/properties/propertiesinterface.cpp
|
${QET_DIR}/sources/properties/propertiesinterface.cpp
|
||||||
@@ -474,10 +507,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/PropertiesEditor/propertieseditorwidget.cpp
|
${QET_DIR}/sources/PropertiesEditor/propertieseditorwidget.cpp
|
||||||
${QET_DIR}/sources/PropertiesEditor/propertieseditorwidget.h
|
${QET_DIR}/sources/PropertiesEditor/propertieseditorwidget.h
|
||||||
|
|
||||||
${QET_DIR}/pugixml/src/pugiconfig.hpp
|
|
||||||
${QET_DIR}/pugixml/src/pugixml.cpp
|
|
||||||
${QET_DIR}/pugixml/src/pugixml.hpp
|
|
||||||
|
|
||||||
${QET_DIR}/sources/qetgraphicsitem/conductor.cpp
|
${QET_DIR}/sources/qetgraphicsitem/conductor.cpp
|
||||||
${QET_DIR}/sources/qetgraphicsitem/conductor.h
|
${QET_DIR}/sources/qetgraphicsitem/conductor.h
|
||||||
${QET_DIR}/sources/qetgraphicsitem/conductortextitem.cpp
|
${QET_DIR}/sources/qetgraphicsitem/conductortextitem.cpp
|
||||||
@@ -502,6 +531,8 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/qetgraphicsitem/qetgraphicsitem.h
|
${QET_DIR}/sources/qetgraphicsitem/qetgraphicsitem.h
|
||||||
${QET_DIR}/sources/qetgraphicsitem/qetshapeitem.cpp
|
${QET_DIR}/sources/qetgraphicsitem/qetshapeitem.cpp
|
||||||
${QET_DIR}/sources/qetgraphicsitem/qetshapeitem.h
|
${QET_DIR}/sources/qetgraphicsitem/qetshapeitem.h
|
||||||
|
${QET_DIR}/sources/qetgraphicsitem/shapetransform.cpp
|
||||||
|
${QET_DIR}/sources/qetgraphicsitem/shapetransform.h
|
||||||
${QET_DIR}/sources/qetgraphicsitem/qgraphicsitemutility.cpp
|
${QET_DIR}/sources/qetgraphicsitem/qgraphicsitemutility.cpp
|
||||||
${QET_DIR}/sources/qetgraphicsitem/qgraphicsitemutility.h
|
${QET_DIR}/sources/qetgraphicsitem/qgraphicsitemutility.h
|
||||||
${QET_DIR}/sources/qetgraphicsitem/reportelement.cpp
|
${QET_DIR}/sources/qetgraphicsitem/reportelement.cpp
|
||||||
@@ -670,6 +701,10 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/ui/contactgroupselectiondialog.h
|
${QET_DIR}/sources/ui/contactgroupselectiondialog.h
|
||||||
${QET_DIR}/sources/ui/conductorpropertiesdialog.cpp
|
${QET_DIR}/sources/ui/conductorpropertiesdialog.cpp
|
||||||
${QET_DIR}/sources/ui/conductorpropertiesdialog.h
|
${QET_DIR}/sources/ui/conductorpropertiesdialog.h
|
||||||
|
${QET_DIR}/sources/ui/conductorcolortoolbutton.cpp
|
||||||
|
${QET_DIR}/sources/ui/conductorcolortoolbutton.h
|
||||||
|
${QET_DIR}/sources/ui/diagrambgcolorbutton.cpp
|
||||||
|
${QET_DIR}/sources/ui/diagrambgcolorbutton.h
|
||||||
${QET_DIR}/sources/ui/conductorpropertieswidget.cpp
|
${QET_DIR}/sources/ui/conductorpropertieswidget.cpp
|
||||||
${QET_DIR}/sources/ui/conductorpropertieswidget.h
|
${QET_DIR}/sources/ui/conductorpropertieswidget.h
|
||||||
${QET_DIR}/sources/ui/configsaveloaderwidget.cpp
|
${QET_DIR}/sources/ui/configsaveloaderwidget.cpp
|
||||||
@@ -682,8 +717,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/ui/diagrampropertiesdialog.h
|
${QET_DIR}/sources/ui/diagrampropertiesdialog.h
|
||||||
${QET_DIR}/sources/ui/diagrampropertieseditordockwidget.cpp
|
${QET_DIR}/sources/ui/diagrampropertieseditordockwidget.cpp
|
||||||
${QET_DIR}/sources/ui/diagrampropertieseditordockwidget.h
|
${QET_DIR}/sources/ui/diagrampropertieseditordockwidget.h
|
||||||
${QET_DIR}/sources/ui/diagramselection.cpp
|
|
||||||
${QET_DIR}/sources/ui/diagramselection.h
|
|
||||||
${QET_DIR}/sources/ui/backupdialog.cpp
|
${QET_DIR}/sources/ui/backupdialog.cpp
|
||||||
${QET_DIR}/sources/ui/backupdialog.h
|
${QET_DIR}/sources/ui/backupdialog.h
|
||||||
${QET_DIR}/sources/ui/dialogwaiting.cpp
|
${QET_DIR}/sources/ui/dialogwaiting.cpp
|
||||||
@@ -704,8 +737,12 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/ui/elementpropertieswidget.h
|
${QET_DIR}/sources/ui/elementpropertieswidget.h
|
||||||
${QET_DIR}/sources/ui/formulaassistantdialog.cpp
|
${QET_DIR}/sources/ui/formulaassistantdialog.cpp
|
||||||
${QET_DIR}/sources/ui/formulaassistantdialog.h
|
${QET_DIR}/sources/ui/formulaassistantdialog.h
|
||||||
|
${QET_DIR}/sources/ui/imagecropdialog.cpp
|
||||||
|
${QET_DIR}/sources/ui/imagecropdialog.h
|
||||||
${QET_DIR}/sources/ui/imagepropertieswidget.cpp
|
${QET_DIR}/sources/ui/imagepropertieswidget.cpp
|
||||||
${QET_DIR}/sources/ui/imagepropertieswidget.h
|
${QET_DIR}/sources/ui/imagepropertieswidget.h
|
||||||
|
${QET_DIR}/sources/ui/imagetransparentcolordialog.cpp
|
||||||
|
${QET_DIR}/sources/ui/imagetransparentcolordialog.h
|
||||||
${QET_DIR}/sources/ui/importelementdialog.cpp
|
${QET_DIR}/sources/ui/importelementdialog.cpp
|
||||||
${QET_DIR}/sources/ui/importelementdialog.h
|
${QET_DIR}/sources/ui/importelementdialog.h
|
||||||
${QET_DIR}/sources/ui/importelementtextpatterndialog.cpp
|
${QET_DIR}/sources/ui/importelementtextpatterndialog.cpp
|
||||||
@@ -776,6 +813,8 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/undocommand/setautonumcontextcommand.h
|
${QET_DIR}/sources/undocommand/setautonumcontextcommand.h
|
||||||
${QET_DIR}/sources/undocommand/rotateselectioncommand.cpp
|
${QET_DIR}/sources/undocommand/rotateselectioncommand.cpp
|
||||||
${QET_DIR}/sources/undocommand/rotateselectioncommand.h
|
${QET_DIR}/sources/undocommand/rotateselectioncommand.h
|
||||||
|
${QET_DIR}/sources/undocommand/promoteshapecommand.cpp
|
||||||
|
${QET_DIR}/sources/undocommand/promoteshapecommand.h
|
||||||
${QET_DIR}/sources/undocommand/rotatetextscommand.cpp
|
${QET_DIR}/sources/undocommand/rotatetextscommand.cpp
|
||||||
${QET_DIR}/sources/undocommand/rotatetextscommand.h
|
${QET_DIR}/sources/undocommand/rotatetextscommand.h
|
||||||
${QET_DIR}/sources/undocommand/movegraphicsitemcommand.cpp
|
${QET_DIR}/sources/undocommand/movegraphicsitemcommand.cpp
|
||||||
@@ -796,7 +835,7 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/xml/terminalstriplayoutpatternxml.h
|
${QET_DIR}/sources/xml/terminalstriplayoutpatternxml.h
|
||||||
)
|
)
|
||||||
|
|
||||||
if(NOT BUILD_WITH_KF5)
|
if(NOT BUILD_WITH_KF)
|
||||||
list(APPEND QET_SRC_FILES
|
list(APPEND QET_SRC_FILES
|
||||||
${QET_DIR}/sources/ui/nokde/kautosavefile.cpp
|
${QET_DIR}/sources/ui/nokde/kautosavefile.cpp
|
||||||
${QET_DIR}/sources/ui/nokde/kautosavefile.h
|
${QET_DIR}/sources/ui/nokde/kautosavefile.h
|
||||||
@@ -807,6 +846,27 @@ if(NOT BUILD_WITH_KF5)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
list(APPEND QET_SRC_FILES
|
||||||
|
${QET_DIR}/sources/diagramevent/diagrameventaddpdf.cpp
|
||||||
|
${QET_DIR}/sources/diagramevent/diagrameventaddpdf.h
|
||||||
|
${QET_DIR}/sources/ui/pdfpagesdialog.cpp
|
||||||
|
${QET_DIR}/sources/ui/pdfpagesdialog.h
|
||||||
|
)
|
||||||
|
|
||||||
|
# JavaScript scripting (bugtracker #162). Unconditionally in the source
|
||||||
|
# list, like the QtPdf files above: this file is included before the
|
||||||
|
# QET_HAS_SCRIPTING probe runs in the top-level CMakeLists.txt, so the
|
||||||
|
# variable isn't set yet here. Same pattern as QtPdf: always compiled, the
|
||||||
|
# actual Qt::Qml dependent code is behind #ifdef QET_HAS_SCRIPTING inside
|
||||||
|
# qetscripting.cpp/qetscriptapi.cpp themselves, compiling to a harmless
|
||||||
|
# stub when the module wasn't found.
|
||||||
|
list(APPEND QET_SRC_FILES
|
||||||
|
${QET_DIR}/sources/scripting/qetscriptapi.cpp
|
||||||
|
${QET_DIR}/sources/scripting/qetscriptapi.h
|
||||||
|
${QET_DIR}/sources/scripting/qetscripting.cpp
|
||||||
|
${QET_DIR}/sources/scripting/qetscripting.h
|
||||||
|
)
|
||||||
|
|
||||||
set(TS_FILES
|
set(TS_FILES
|
||||||
${QET_DIR}/lang/qet_ar.ts
|
${QET_DIR}/lang/qet_ar.ts
|
||||||
${QET_DIR}/lang/qet_ca.ts
|
${QET_DIR}/lang/qet_ca.ts
|
||||||
@@ -822,6 +882,7 @@ set(TS_FILES
|
|||||||
${QET_DIR}/lang/qet_hu.ts
|
${QET_DIR}/lang/qet_hu.ts
|
||||||
${QET_DIR}/lang/qet_it.ts
|
${QET_DIR}/lang/qet_it.ts
|
||||||
${QET_DIR}/lang/qet_ja.ts
|
${QET_DIR}/lang/qet_ja.ts
|
||||||
|
${QET_DIR}/lang/qet_ko.ts
|
||||||
${QET_DIR}/lang/qet_mn.ts
|
${QET_DIR}/lang/qet_mn.ts
|
||||||
${QET_DIR}/lang/qet_nb.ts
|
${QET_DIR}/lang/qet_nb.ts
|
||||||
${QET_DIR}/lang/qet_nl.ts
|
${QET_DIR}/lang/qet_nl.ts
|
||||||
|
|||||||
@@ -28,5 +28,9 @@ add_definitions(-DQET_ALLOW_OVERRIDE_CD_OPTION)
|
|||||||
# Comment the line below to deactivate the --data-dir option
|
# Comment the line below to deactivate the --data-dir option
|
||||||
add_definitions(-DQET_ALLOW_OVERRIDE_DD_OPTION)
|
add_definitions(-DQET_ALLOW_OVERRIDE_DD_OPTION)
|
||||||
|
|
||||||
#comment the line below to disable the project database export
|
# Enable project database export when requested by the build system.
|
||||||
#add_definitions(-DQET_EXPORT_PROJECT_DB) #error Todo
|
option(QET_EXPORT_PROJECT_DB "Enable project database export" OFF)
|
||||||
|
|
||||||
|
if(QET_EXPORT_PROJECT_DB)
|
||||||
|
add_compile_definitions(QET_EXPORT_PROJECT_DB)
|
||||||
|
endif()
|
||||||
|
|||||||
@@ -0,0 +1,93 @@
|
|||||||
|
# Smart Device Information and BOM CSV
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
- A `.qet` project is XML. Placed component properties are held in
|
||||||
|
`ElementData::m_informations`, a `DiagramContext`, and are serialized by the
|
||||||
|
existing `Element::fromXml()` and `Element::toXml()` path.
|
||||||
|
- `DeviceInformation` is a typed view over that existing context. It does not
|
||||||
|
introduce a second data store. Updates made by the properties editor continue
|
||||||
|
to use `ChangeElementInformationCommand`, including undo/redo and dirty state.
|
||||||
|
- The project database copies element contexts into `element_info` and exposes
|
||||||
|
reporting fields through `element_nomenclature_view`.
|
||||||
|
- GUI and CLI BOM exports both use `BomExport::defaultQuery()` against that
|
||||||
|
view. The existing `BOMExportDialog` remains the only GUI export entry point;
|
||||||
|
users can still customize columns, filters, and grouped/ungrouped output.
|
||||||
|
|
||||||
|
## Device Properties
|
||||||
|
|
||||||
|
| Device field | XML/context key | Default BOM |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Device tag | `label` | Yes |
|
||||||
|
| Manufacturer | `manufacturer` | Yes |
|
||||||
|
| Part number | `manufacturer_reference` | Yes |
|
||||||
|
| Model | `model` | Yes |
|
||||||
|
| Description | `description` | Yes |
|
||||||
|
| Category | `category` | Yes |
|
||||||
|
| Quantity | `quantity` | Yes |
|
||||||
|
| Voltage rating | `voltage_rating` | Yes |
|
||||||
|
| Current rating | `current_rating` | Yes |
|
||||||
|
| Page | `folio` from the diagram | Yes |
|
||||||
|
| Notes | `notes` | Yes |
|
||||||
|
|
||||||
|
The five new context keys are `model`, `category`, `voltage_rating`,
|
||||||
|
`current_rating`, and `notes`. They are available in the existing information
|
||||||
|
editor for Simple and Master elements, in symbol definitions, in the SQL
|
||||||
|
nomenclature view, and in the export column picker.
|
||||||
|
|
||||||
|
No XML version bump or migration is required. Missing keys read as empty
|
||||||
|
strings, empty properties are omitted by the existing writer, and unknown
|
||||||
|
context keys remain preserved. Quantity and ratings stay free text so existing
|
||||||
|
unit conventions and decimal quantities are not changed implicitly.
|
||||||
|
|
||||||
|
## BOM Policy
|
||||||
|
|
||||||
|
The default BOM query exports one row per Simple or Master element. Slave
|
||||||
|
contacts, terminal-strip elements, reports, thumbnails, and conductor
|
||||||
|
definitions are excluded. A Master device is counted once and PLC I/O entries
|
||||||
|
are not expanded. The existing `exclude_from_bom` property is honored by the
|
||||||
|
SQL view, including common true representations (`true`, `1`, `yes`, `on`).
|
||||||
|
|
||||||
|
The default columns are:
|
||||||
|
|
||||||
|
`Device tag, Designation, Manufacturer, Part number, Model, Description,
|
||||||
|
Category, Quantity, Voltage rating, Current rating, Page, Notes`.
|
||||||
|
|
||||||
|
The existing **Format as bill of materials** checkbox provides grouped output;
|
||||||
|
it is off by default so the initial export remains ungrouped. Users may change
|
||||||
|
the query and column order through the existing dialog. The command-line
|
||||||
|
`--export-bom` operation uses the same default query and column order.
|
||||||
|
|
||||||
|
CSV output is UTF-8 with a BOM, semicolon-delimited, and quotes every field.
|
||||||
|
Embedded quotes are doubled and embedded newlines are retained. `QSaveFile`
|
||||||
|
provides atomic replacement; query, open, write, and commit failures are
|
||||||
|
reported without deleting an existing destination first.
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
The smart-device test is registered explicitly in
|
||||||
|
`tests/qttest/CMakeLists.txt` and uses only Qt Test and Qt SQL. It is therefore
|
||||||
|
part of the normal cross-platform CMake/CTest flow:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cmake -S . -B build -DPACKAGE_TESTS=ON
|
||||||
|
cmake --build build
|
||||||
|
ctest --test-dir build --output-on-failure
|
||||||
|
```
|
||||||
|
|
||||||
|
`tst_smart_device` checks the metadata column contract, Simple/Master filtering,
|
||||||
|
stable page ordering, UTF-8 with Latin and non-Latin samples, CSV escaping, and
|
||||||
|
atomic write success/failure. Existing project XML save/load tests cover the
|
||||||
|
generic `DiagramContext` persistence path used by the new keys.
|
||||||
|
|
||||||
|
Manual checks:
|
||||||
|
|
||||||
|
1. Open an existing project and edit a Simple or Master element's information.
|
||||||
|
2. Set all device fields, apply, undo, redo, save, close, and reopen.
|
||||||
|
3. Open Project > Export as CSV and verify the device columns are preselected.
|
||||||
|
4. Export with grouping both disabled and enabled.
|
||||||
|
5. Verify leading-zero part numbers, non-Latin text, quotes, and newlines in a
|
||||||
|
UTF-8 CSV reader.
|
||||||
|
|
||||||
|
Cable management, terminal-strip planning, automatic wire numbering, PLC I/O
|
||||||
|
expansion, panel layout, and manufacturer catalog integration are out of scope.
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,29 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||||
|
<!-- keyboard body with a lighter top edge -->
|
||||||
|
<rect x="6" y="30" width="116" height="68" rx="8" fill="#31363b"/>
|
||||||
|
<rect x="6" y="30" width="116" height="34" rx="8" fill="#4d4d4d"/>
|
||||||
|
<rect x="6" y="46" width="116" height="18" fill="#31363b"/>
|
||||||
|
<!-- key rows -->
|
||||||
|
<g fill="#eff0f1">
|
||||||
|
<rect x="14" y="38" width="8" height="8" rx="1.5"/><rect x="24" y="38" width="8" height="8" rx="1.5"/>
|
||||||
|
<rect x="34" y="38" width="8" height="8" rx="1.5"/><rect x="44" y="38" width="8" height="8" rx="1.5"/>
|
||||||
|
<rect x="54" y="38" width="8" height="8" rx="1.5"/><rect x="64" y="38" width="8" height="8" rx="1.5"/>
|
||||||
|
<rect x="74" y="38" width="8" height="8" rx="1.5"/><rect x="84" y="38" width="8" height="8" rx="1.5"/>
|
||||||
|
<rect x="94" y="38" width="8" height="8" rx="1.5"/><rect x="104" y="38" width="10" height="8" rx="1.5"/>
|
||||||
|
<rect x="14" y="50" width="12" height="8" rx="1.5"/><rect x="28" y="50" width="8" height="8" rx="1.5"/>
|
||||||
|
<rect x="38" y="50" width="8" height="8" rx="1.5"/><rect x="48" y="50" width="8" height="8" rx="1.5"/>
|
||||||
|
<rect x="58" y="50" width="8" height="8" rx="1.5"/><rect x="68" y="50" width="8" height="8" rx="1.5"/>
|
||||||
|
<rect x="78" y="50" width="8" height="8" rx="1.5"/><rect x="88" y="50" width="8" height="8" rx="1.5"/>
|
||||||
|
<rect x="98" y="50" width="16" height="8" rx="1.5"/>
|
||||||
|
<rect x="14" y="62" width="16" height="8" rx="1.5"/><rect x="32" y="62" width="8" height="8" rx="1.5"/>
|
||||||
|
<rect x="42" y="62" width="8" height="8" rx="1.5"/><rect x="52" y="62" width="8" height="8" rx="1.5"/>
|
||||||
|
<rect x="62" y="62" width="8" height="8" rx="1.5"/><rect x="72" y="62" width="8" height="8" rx="1.5"/>
|
||||||
|
<rect x="82" y="62" width="8" height="8" rx="1.5"/><rect x="92" y="62" width="22" height="8" rx="1.5"/>
|
||||||
|
<rect x="14" y="74" width="10" height="8" rx="1.5"/><rect x="26" y="74" width="10" height="8" rx="1.5"/>
|
||||||
|
<rect x="38" y="74" width="52" height="8" rx="1.5"/>
|
||||||
|
<rect x="92" y="74" width="10" height="8" rx="1.5"/><rect x="104" y="74" width="10" height="8" rx="1.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- the two keys of a shortcut, pressed -->
|
||||||
|
<rect x="14" y="62" width="16" height="8" rx="1.5" fill="#3daee9"/>
|
||||||
|
<rect x="42" y="62" width="8" height="8" rx="1.5" fill="#3daee9"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,48 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||||
|
<!-- DIN rail -->
|
||||||
|
<rect x="6" y="86" width="116" height="18" rx="3" fill="#7f8c8d"/>
|
||||||
|
<rect x="6" y="92" width="116" height="6" fill="#4d4d4d"/>
|
||||||
|
<!-- six terminal blocks: L, L, N, PE, L, spare -->
|
||||||
|
<g fill="#eff0f1">
|
||||||
|
<rect x="12" y="26" width="16" height="66" rx="2"/>
|
||||||
|
<rect x="30" y="26" width="16" height="66" rx="2"/>
|
||||||
|
<rect x="48" y="26" width="16" height="66" rx="2"/>
|
||||||
|
<rect x="66" y="26" width="16" height="66" rx="2"/>
|
||||||
|
<rect x="84" y="26" width="16" height="66" rx="2"/>
|
||||||
|
<rect x="102" y="26" width="16" height="66" rx="2"/>
|
||||||
|
</g>
|
||||||
|
<!-- right-hand shading of each block -->
|
||||||
|
<g fill="#bdc3c7">
|
||||||
|
<rect x="24" y="28" width="4" height="62"/>
|
||||||
|
<rect x="42" y="28" width="4" height="62"/>
|
||||||
|
<rect x="60" y="28" width="4" height="62"/>
|
||||||
|
<rect x="78" y="28" width="4" height="62"/>
|
||||||
|
<rect x="96" y="28" width="4" height="62"/>
|
||||||
|
<rect x="114" y="28" width="4" height="62"/>
|
||||||
|
</g>
|
||||||
|
<!-- colored marker bands -->
|
||||||
|
<rect x="12" y="26" width="16" height="10" rx="2" fill="#7f8c8d"/>
|
||||||
|
<rect x="30" y="26" width="16" height="10" rx="2" fill="#7f8c8d"/>
|
||||||
|
<rect x="48" y="26" width="16" height="10" rx="2" fill="#3daee9"/>
|
||||||
|
<rect x="66" y="26" width="16" height="10" rx="2" fill="#27ae60"/>
|
||||||
|
<rect x="70" y="26" width="8" height="10" fill="#fdbc4b"/>
|
||||||
|
<rect x="84" y="26" width="16" height="10" rx="2" fill="#7f8c8d"/>
|
||||||
|
<rect x="102" y="26" width="16" height="10" rx="2" fill="#da4453"/>
|
||||||
|
<!-- screws -->
|
||||||
|
<g fill="#31363b">
|
||||||
|
<circle cx="20" cy="50" r="4.5"/><circle cx="20" cy="74" r="4.5"/>
|
||||||
|
<circle cx="38" cy="50" r="4.5"/><circle cx="38" cy="74" r="4.5"/>
|
||||||
|
<circle cx="56" cy="50" r="4.5"/><circle cx="56" cy="74" r="4.5"/>
|
||||||
|
<circle cx="74" cy="50" r="4.5"/><circle cx="74" cy="74" r="4.5"/>
|
||||||
|
<circle cx="92" cy="50" r="4.5"/><circle cx="92" cy="74" r="4.5"/>
|
||||||
|
<circle cx="110" cy="50" r="4.5"/><circle cx="110" cy="74" r="4.5"/>
|
||||||
|
</g>
|
||||||
|
<g fill="#eff0f1">
|
||||||
|
<rect x="16" y="49" width="8" height="2"/><rect x="16" y="73" width="8" height="2"/>
|
||||||
|
<rect x="34" y="49" width="8" height="2"/><rect x="34" y="73" width="8" height="2"/>
|
||||||
|
<rect x="52" y="49" width="8" height="2"/><rect x="52" y="73" width="8" height="2"/>
|
||||||
|
<rect x="70" y="49" width="8" height="2"/><rect x="70" y="73" width="8" height="2"/>
|
||||||
|
<rect x="88" y="49" width="8" height="2"/><rect x="88" y="73" width="8" height="2"/>
|
||||||
|
<rect x="106" y="49" width="8" height="2"/><rect x="106" y="73" width="8" height="2"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 216 B |
|
Before Width: | Height: | Size: 262 B |
|
Before Width: | Height: | Size: 247 B |
|
Before Width: | Height: | Size: 271 B |
|
Before Width: | Height: | Size: 233 B |
@@ -0,0 +1,12 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#232629;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(1,1)">
|
||||||
|
<path style="fill:currentColor;fill-opacity:1;stroke:none" d="m18.5 4c-.65424 0-1.202197.418077-1.408203 1h-13.0918v1c3.601 0 6.5 2.899 6.5 6.5 0 1.905514-.822115 3.601777-2.121094 4.787109-.245727-.180239-.548776-.287109-.878906-.287109-.831 0-1.5.669-1.5 1.5 0 .831.669 1.5 1.5 1.5.65424 0 1.202197-.418077 1.408203-1h4.091797v1h3v-3h-3v1h-3.912109c1.479147-1.367931 2.412109-3.317097 2.412109-5.5 0-2.788667-1.510668-5.207469-3.757813-6.5h9.349609c.206006.581923.753963 1 1.408203 1 .831 0 1.5-.669 1.5-1.5 0-.831-.669-1.5-1.5-1.5m0 1c.277 0 .5.223.5.5 0 .277-.223.5-.5.5-.06925 0-.135453-.013828-.195312-.039063-.179579-.075703-.304688-.253188-.304688-.460938 0-.06925.013828-.135453.039062-.195313.075704-.179578.253188-.304688.460938-.304688m-11 13c.277 0 .5.223.5.5 0 .277-.223.5-.5.5-.277 0-.5-.223-.5-.5 0-.277.223-.5.5-.5m6.5 0h1v1h-1v-1z" transform="translate(-.99999-.99999)" class="ColorScheme-Text"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#232629;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<g transform="translate(1,1)">
|
||||||
|
<g class="ColorScheme-Text" fill="currentColor">
|
||||||
|
<path d="m6 14c0 2.77 2.23 5 5 5s5-2.23 5-5z" fill-rule="evenodd" opacity=".66"/>
|
||||||
|
<path d="m7.482 10c-.34.586-.65 1.148-.886 1.676a4.958 4.958 0 0 0 -.596 2.324h10c0-.845-.228-1.627-.596-2.324a18.518 18.518 0 0 0 -.886-1.676z" fill-rule="evenodd" opacity=".33"/>
|
||||||
|
<path d="m11 3c-.973 3.405-3.354 6.332-4.404 8.676a4.958 4.958 0 0 0 -.596 2.324c0 2.77 2.23 5 5 5s5-2.23 5-5c0-.845-.228-1.627-.596-2.324-1.05-2.344-3.431-5.271-4.404-8.676zm0 2.393c1.194 2.668 2.747 5.027 3.492 6.691l.012.03.016.029a3.94 3.94 0 0 1 .48 1.857c0 2.233-1.767 4-4 4a3.97 3.97 0 0 1 -4-4c0-.665.177-1.283.48-1.857l.016-.03.012-.029c.745-1.664 2.298-4.023 3.492-6.691z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 983 B |
@@ -0,0 +1,13 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#232629;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<path style="fill:currentColor;fill-opacity:1;stroke:none"
|
||||||
|
d="M 4 2 L 4 3 L 5 3 L 5 2 L 4 2 z M 11 2 L 11 3 L 12 3 L 12 2 L 11 2 z M 2 4 L 2 12 L 7 12 L 7 10 L 9 10 L 9 12 L 14 12 L 14 4 L 9 4 L 9 6 L 7 6 L 7 4 L 2 4 z M 3 5 L 6 5 L 6 11 L 3 11 L 3 5 z M 10 5 L 13 5 L 13 11 L 10 11 L 10 5 z M 11 6 L 11 10 L 12 10 L 12 6 L 11 6 z M 7 7 L 9 7 L 9 9 L 7 9 L 7 7 z M 4 13 L 4 14 L 5 14 L 5 13 L 4 13 z M 11 13 L 11 14 L 12 14 L 12 13 L 11 13 z "
|
||||||
|
class="ColorScheme-Text"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 716 B |
@@ -0,0 +1,13 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#232629;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<path style="fill:currentColor;fill-opacity:1;stroke:none"
|
||||||
|
d="M 4 2 L 4 7 L 6 7 L 6 9 L 4 9 L 4 14 L 12 14 L 12 9 L 10 9 L 10 7 L 12 7 L 12 2 L 4 2 z M 5 3 L 11 3 L 11 6 L 5 6 L 5 3 z M 2 4 L 2 5 L 3 5 L 3 4 L 2 4 z M 13 4 L 13 5 L 14 5 L 14 4 L 13 4 z M 7 7 L 9 7 L 9 9 L 7 9 L 7 7 z M 5 10 L 11 10 L 11 13 L 5 13 L 5 10 z M 2 11 L 2 12 L 3 12 L 3 11 L 2 11 z M 6 11 L 6 12 L 10 12 L 10 11 L 6 11 z M 13 11 L 13 12 L 14 12 L 14 11 L 13 11 z "
|
||||||
|
class="ColorScheme-Text"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 716 B |
@@ -0,0 +1,12 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#232629;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(1,1)">
|
||||||
|
<path style="fill:currentColor;fill-opacity:1;stroke:none" d="M 3 3 L 3 5 L 3 6 L 6 6 L 6 5 L 6 3 L 4 3 L 3 3 z M 16 3 L 16 4 L 16 5 L 16 6 L 17 6 L 18 6 L 19 6 L 19 5 L 19 4 L 19 3 L 16 3 z M 4 4 L 5 4 L 5 5 L 4 5 L 4 4 z M 17 4 L 18 4 L 18 5 L 17 5 L 17 4 z M 7 5 L 7 6 L 9 6 L 9 5 L 7 5 z M 10 5 L 10 6 L 12 6 L 12 5 L 10 5 z M 13 5 L 13 6 L 15 6 L 15 5 L 13 5 z M 5 7 L 5 9 L 6 9 L 6 7 L 5 7 z M 16 7 L 16 9 L 17 9 L 17 7 L 16 7 z M 5 10 L 5 12 L 6 12 L 6 10 L 5 10 z M 16 10 L 16 12 L 17 12 L 17 10 L 16 10 z M 5 13 L 5 15 L 6 15 L 6 13 L 5 13 z M 16 13 L 16 15 L 17 15 L 17 13 L 16 13 z M 3 16 L 3 17 L 3 19 L 4 19 L 5 19 L 6 19 L 6 16 L 3 16 z M 7 16 L 7 17 L 9 17 L 9 16 L 7 16 z M 10 16 L 10 17 L 12 17 L 12 16 L 10 16 z M 13 16 L 13 17 L 15 17 L 15 16 L 13 16 z M 16 16 L 16 17 L 16 18 L 16 19 L 17 19 L 18 19 L 19 19 L 19 18 L 19 17 L 19 16 L 17 16 L 16 16 z M 4 17 L 5 17 L 5 18 L 4 18 L 4 17 z M 17 17 L 18 17 L 18 18 L 17 18 L 17 17 z " class="ColorScheme-Text"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -216,6 +216,9 @@ Clarification:
|
|||||||
ico/128x128/diagram.png by the QElectroTech team (License CC BY-ND 3.0)
|
ico/128x128/diagram.png by the QElectroTech team (License CC BY-ND 3.0)
|
||||||
ico/128x128/document-export.png by the QElectroTech team (License CC BY-ND 3.0)
|
ico/128x128/document-export.png by the QElectroTech team (License CC BY-ND 3.0)
|
||||||
ico/128x128/project.png by the QElectroTech team (License CC BY-ND 3.0)
|
ico/128x128/project.png by the QElectroTech team (License CC BY-ND 3.0)
|
||||||
|
ico/128x128/terminalstrip.png and configure-shortcuts.png by Jeff Patterson from the QElectroTech team (License CC BY-ND 3.0), rendered from the .svg files beside them
|
||||||
|
ico/scalable/pdf-import.svg by Jeff Patterson from the QElectroTech team (License CC BY-ND 3.0), laid out like ico/22x22/insert-image.png
|
||||||
|
ico/scalable/diagram.svg, folio-new.svg, folio-delete.svg, folio-properties.svg, label.svg by Jeff Patterson from the QElectroTech team (License CC BY-ND 3.0), the folio icons redrawn in the same style
|
||||||
ico/256x256/* by Nuri from the QElectroTech team (License CC BY-ND 3.0)
|
ico/256x256/* by Nuri from the QElectroTech team (License CC BY-ND 3.0)
|
||||||
ico/breeze-icons/* by Nuri from the QElectroTech team (License CC BY-ND 3.0)
|
ico/breeze-icons/* by Nuri from the QElectroTech team (License CC BY-ND 3.0)
|
||||||
ico/diagram.png by Nuri from the QElectroTech team (License CC BY-ND 3.0)
|
ico/diagram.png by Nuri from the QElectroTech team (License CC BY-ND 3.0)
|
||||||
|
|||||||
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
@@ -0,0 +1,477 @@
|
|||||||
|
<!DOCTYPE RCC>
|
||||||
|
<!-- Generated by misc/make_icon_themes.py. Do not edit. -->
|
||||||
|
<RCC version="1.0">
|
||||||
|
<qresource prefix="/ico">
|
||||||
|
<file>themes/qet/index.theme</file>
|
||||||
|
<file>themes/qet-dark/index.theme</file>
|
||||||
|
<file alias="themes/qet/16x16/application-exit.png">16x16/application-exit.png</file>
|
||||||
|
<file alias="themes/qet/16x16/arrow-left-double.png">16x16/arrow-left-double.png</file>
|
||||||
|
<file alias="themes/qet/16x16/arrow-left.png">16x16/arrow-left.png</file>
|
||||||
|
<file alias="themes/qet/16x16/arrow-right-double.png">16x16/arrow-right-double.png</file>
|
||||||
|
<file alias="themes/qet/16x16/arrow-right.png">16x16/arrow-right.png</file>
|
||||||
|
<file alias="themes/qet/16x16/circle.png">16x16/circle.png</file>
|
||||||
|
<file alias="themes/qet/16x16/conductor-edit.png">16x16/conductor-edit.png</file>
|
||||||
|
<file alias="themes/qet/16x16/conductor-reset.png">16x16/conductor-reset.png</file>
|
||||||
|
<file alias="themes/qet/16x16/conductor.png">16x16/conductor.png</file>
|
||||||
|
<file alias="themes/qet/16x16/configure-toolbars.png">16x16/configure-toolbars.png</file>
|
||||||
|
<file alias="themes/qet/16x16/configure.png">16x16/configure.png</file>
|
||||||
|
<file alias="themes/qet/16x16/diagram.png">16x16/diagram.png</file>
|
||||||
|
<file alias="themes/qet/16x16/dialog-cancel.png">16x16/dialog-cancel.png</file>
|
||||||
|
<file alias="themes/qet/16x16/dialog-ok.png">16x16/dialog-ok.png</file>
|
||||||
|
<file alias="themes/qet/16x16/document-close.png">16x16/document-close.png</file>
|
||||||
|
<file alias="themes/qet/16x16/document-export.png">16x16/document-export.png</file>
|
||||||
|
<file alias="themes/qet/16x16/document-import.png">16x16/document-import.png</file>
|
||||||
|
<file alias="themes/qet/16x16/document-new.png">16x16/document-new.png</file>
|
||||||
|
<file alias="themes/qet/16x16/document-open-recent.png">16x16/document-open-recent.png</file>
|
||||||
|
<file alias="themes/qet/16x16/document-open.png">16x16/document-open.png</file>
|
||||||
|
<file alias="themes/qet/16x16/document-print-frame.png">16x16/document-print-frame.png</file>
|
||||||
|
<file alias="themes/qet/16x16/document-print.png">16x16/document-print.png</file>
|
||||||
|
<file alias="themes/qet/16x16/document-save-all.png">16x16/document-save-all.png</file>
|
||||||
|
<file alias="themes/qet/16x16/document-save-as.png">16x16/document-save-as.png</file>
|
||||||
|
<file alias="themes/qet/16x16/document-save.png">16x16/document-save.png</file>
|
||||||
|
<file alias="themes/qet/16x16/east.png">16x16/east.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-clear-locationbar-ltr.png">16x16/edit-clear-locationbar-ltr.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-clear-locationbar-rtl.png">16x16/edit-clear-locationbar-rtl.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-clear.png">16x16/edit-clear.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-copy.png">16x16/edit-copy.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-cut.png">16x16/edit-cut.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-delete.png">16x16/edit-delete.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-download.png">16x16/edit-download.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-paste.png">16x16/edit-paste.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-redo.png">16x16/edit-redo.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-rename.png">16x16/edit-rename.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-select-all.png">16x16/edit-select-all.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-select-invert.png">16x16/edit-select-invert.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-select-none.png">16x16/edit-select-none.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-table-cell-merge.png">16x16/edit-table-cell-merge.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-table-cell-split.png">16x16/edit-table-cell-split.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-table-delete-column.png">16x16/edit-table-delete-column.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-table-delete-row.png">16x16/edit-table-delete-row.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-table-insert-column-left.png">16x16/edit-table-insert-column-left.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-table-insert-column-right.png">16x16/edit-table-insert-column-right.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-table-insert-row-above.png">16x16/edit-table-insert-row-above.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-table-insert-row-under.png">16x16/edit-table-insert-row-under.png</file>
|
||||||
|
<file alias="themes/qet/16x16/edit-undo.png">16x16/edit-undo.png</file>
|
||||||
|
<file alias="themes/qet/16x16/element-delete.png">16x16/element-delete.png</file>
|
||||||
|
<file alias="themes/qet/16x16/element-edit.png">16x16/element-edit.png</file>
|
||||||
|
<file alias="themes/qet/16x16/element-master.png">16x16/element-master.png</file>
|
||||||
|
<file alias="themes/qet/16x16/element-new.png">16x16/element-new.png</file>
|
||||||
|
<file alias="themes/qet/16x16/element-slave.png">16x16/element-slave.png</file>
|
||||||
|
<file alias="themes/qet/16x16/element.png">16x16/element.png</file>
|
||||||
|
<file alias="themes/qet/16x16/endline-circle.png">16x16/endline-circle.png</file>
|
||||||
|
<file alias="themes/qet/16x16/endline-diamond.png">16x16/endline-diamond.png</file>
|
||||||
|
<file alias="themes/qet/16x16/endline-none.png">16x16/endline-none.png</file>
|
||||||
|
<file alias="themes/qet/16x16/endline-simple.png">16x16/endline-simple.png</file>
|
||||||
|
<file alias="themes/qet/16x16/endline-triangle.png">16x16/endline-triangle.png</file>
|
||||||
|
<file alias="themes/qet/16x16/export-csv.png">16x16/export-csv.png</file>
|
||||||
|
<file alias="themes/qet/16x16/flip.png">16x16/flip.png</file>
|
||||||
|
<file alias="themes/qet/16x16/folder-delete.png">16x16/folder-delete.png</file>
|
||||||
|
<file alias="themes/qet/16x16/folder-edit.png">16x16/folder-edit.png</file>
|
||||||
|
<file alias="themes/qet/16x16/folder-new.png">16x16/folder-new.png</file>
|
||||||
|
<file alias="themes/qet/16x16/folder-only-this.png">16x16/folder-only-this.png</file>
|
||||||
|
<file alias="themes/qet/16x16/folder-open.png">16x16/folder-open.png</file>
|
||||||
|
<file alias="themes/qet/16x16/folder-properties.png">16x16/folder-properties.png</file>
|
||||||
|
<file alias="themes/qet/16x16/folder-show-all.png">16x16/folder-show-all.png</file>
|
||||||
|
<file alias="themes/qet/16x16/folder.png">16x16/folder.png</file>
|
||||||
|
<file alias="themes/qet/16x16/folio-delete.png">16x16/folio-delete.png</file>
|
||||||
|
<file alias="themes/qet/16x16/folio-new.png">16x16/folio-new.png</file>
|
||||||
|
<file alias="themes/qet/16x16/folio-properties.png">16x16/folio-properties.png</file>
|
||||||
|
<file alias="themes/qet/16x16/folio-ref-coming.png">16x16/folio-ref-coming.png</file>
|
||||||
|
<file alias="themes/qet/16x16/go-bottom.png">16x16/go-bottom.png</file>
|
||||||
|
<file alias="themes/qet/16x16/go-company.png">16x16/go-company.png</file>
|
||||||
|
<file alias="themes/qet/16x16/go-down-double.png">16x16/go-down-double.png</file>
|
||||||
|
<file alias="themes/qet/16x16/go-down.png">16x16/go-down.png</file>
|
||||||
|
<file alias="themes/qet/16x16/go-home.png">16x16/go-home.png</file>
|
||||||
|
<file alias="themes/qet/16x16/go-top.png">16x16/go-top.png</file>
|
||||||
|
<file alias="themes/qet/16x16/go-up-double.png">16x16/go-up-double.png</file>
|
||||||
|
<file alias="themes/qet/16x16/go-up.png">16x16/go-up.png</file>
|
||||||
|
<file alias="themes/qet/16x16/grid.png">16x16/grid.png</file>
|
||||||
|
<file alias="themes/qet/16x16/ground.png">16x16/ground.png</file>
|
||||||
|
<file alias="themes/qet/16x16/help-contents.png">16x16/help-contents.png</file>
|
||||||
|
<file alias="themes/qet/16x16/help-donate.png">16x16/help-donate.png</file>
|
||||||
|
<file alias="themes/qet/16x16/item-cancel.png">16x16/item-cancel.png</file>
|
||||||
|
<file alias="themes/qet/16x16/item-copy.png">16x16/item-copy.png</file>
|
||||||
|
<file alias="themes/qet/16x16/item-move.png">16x16/item-move.png</file>
|
||||||
|
<file alias="themes/qet/16x16/kdenlive-show-video.png">16x16/kdenlive-show-video.png</file>
|
||||||
|
<file alias="themes/qet/16x16/label.png">16x16/label.png</file>
|
||||||
|
<file alias="themes/qet/16x16/list-add.png">16x16/list-add.png</file>
|
||||||
|
<file alias="themes/qet/16x16/list-remove.png">16x16/list-remove.png</file>
|
||||||
|
<file alias="themes/qet/16x16/masquer.png">16x16/masquer.png</file>
|
||||||
|
<file alias="themes/qet/16x16/mirror.png">16x16/mirror.png</file>
|
||||||
|
<file alias="themes/qet/16x16/move.png">16x16/move.png</file>
|
||||||
|
<file alias="themes/qet/16x16/neutral.png">16x16/neutral.png</file>
|
||||||
|
<file alias="themes/qet/16x16/north.png">16x16/north.png</file>
|
||||||
|
<file alias="themes/qet/16x16/object-group.png">16x16/object-group.png</file>
|
||||||
|
<file alias="themes/qet/16x16/object-rotate-right.png">16x16/object-rotate-right.png</file>
|
||||||
|
<file alias="themes/qet/16x16/orientations.png">16x16/orientations.png</file>
|
||||||
|
<file alias="themes/qet/16x16/phase.png">16x16/phase.png</file>
|
||||||
|
<file alias="themes/qet/16x16/preferences-desktop-user.png">16x16/preferences-desktop-user.png</file>
|
||||||
|
<file alias="themes/qet/16x16/project-close.png">16x16/project-close.png</file>
|
||||||
|
<file alias="themes/qet/16x16/project-delete.png">16x16/project-delete.png</file>
|
||||||
|
<file alias="themes/qet/16x16/project-new.png">16x16/project-new.png</file>
|
||||||
|
<file alias="themes/qet/16x16/project-properties.png">16x16/project-properties.png</file>
|
||||||
|
<file alias="themes/qet/16x16/project.png">16x16/project.png</file>
|
||||||
|
<file alias="themes/qet/16x16/qet.png">16x16/qet.png</file>
|
||||||
|
<file alias="themes/qet/16x16/qt.png">16x16/qt.png</file>
|
||||||
|
<file alias="themes/qet/16x16/run-dxf.png">16x16/run-dxf.png</file>
|
||||||
|
<file alias="themes/qet/16x16/select.png">16x16/select.png</file>
|
||||||
|
<file alias="themes/qet/16x16/south.png">16x16/south.png</file>
|
||||||
|
<file alias="themes/qet/16x16/table-of-content.png">16x16/table-of-content.png</file>
|
||||||
|
<file alias="themes/qet/16x16/terminal.png">16x16/terminal.png</file>
|
||||||
|
<file alias="themes/qet/16x16/terminalstrip.png">16x16/terminalstrip.png</file>
|
||||||
|
<file alias="themes/qet/16x16/text-xml.png">16x16/text-xml.png</file>
|
||||||
|
<file alias="themes/qet/16x16/transform-rotate.png">16x16/transform-rotate.png</file>
|
||||||
|
<file alias="themes/qet/16x16/user-busy.png">16x16/user-busy.png</file>
|
||||||
|
<file alias="themes/qet/16x16/user-online.png">16x16/user-online.png</file>
|
||||||
|
<file alias="themes/qet/16x16/view-fullscreen.png">16x16/view-fullscreen.png</file>
|
||||||
|
<file alias="themes/qet/16x16/view-refresh.png">16x16/view-refresh.png</file>
|
||||||
|
<file alias="themes/qet/16x16/view-restore.png">16x16/view-restore.png</file>
|
||||||
|
<file alias="themes/qet/16x16/west.png">16x16/west.png</file>
|
||||||
|
<file alias="themes/qet/16x16/window-new.png">16x16/window-new.png</file>
|
||||||
|
<file alias="themes/qet/16x16/zoom-draw.png">16x16/zoom-draw.png</file>
|
||||||
|
<file alias="themes/qet/16x16/zoom-fit-best.png">16x16/zoom-fit-best.png</file>
|
||||||
|
<file alias="themes/qet/16x16/zoom-in.png">16x16/zoom-in.png</file>
|
||||||
|
<file alias="themes/qet/16x16/zoom-original.png">16x16/zoom-original.png</file>
|
||||||
|
<file alias="themes/qet/16x16/zoom-out.png">16x16/zoom-out.png</file>
|
||||||
|
<file alias="themes/qet/22x22/Actions-player-time-icon.png">22x22/Actions-player-time-icon.png</file>
|
||||||
|
<file alias="themes/qet/22x22/all_pages.png">22x22/all_pages.png</file>
|
||||||
|
<file alias="themes/qet/22x22/application-exit.png">22x22/application-exit.png</file>
|
||||||
|
<file alias="themes/qet/22x22/applications-development-translation.png">22x22/applications-development-translation.png</file>
|
||||||
|
<file alias="themes/qet/22x22/arc.png">22x22/arc.png</file>
|
||||||
|
<file alias="themes/qet/22x22/arrow-left-double.png">22x22/arrow-left-double.png</file>
|
||||||
|
<file alias="themes/qet/22x22/arrow-left.png">22x22/arrow-left.png</file>
|
||||||
|
<file alias="themes/qet/22x22/arrow-right-double.png">22x22/arrow-right-double.png</file>
|
||||||
|
<file alias="themes/qet/22x22/arrow-right.png">22x22/arrow-right.png</file>
|
||||||
|
<file alias="themes/qet/22x22/autoconnect.png">22x22/autoconnect.png</file>
|
||||||
|
<file alias="themes/qet/22x22/bring_forward.png">22x22/bring_forward.png</file>
|
||||||
|
<file alias="themes/qet/22x22/conductor2.png">22x22/conductor2.png</file>
|
||||||
|
<file alias="themes/qet/22x22/conductor-reset.png">22x22/conductor2.png</file>
|
||||||
|
<file alias="themes/qet/22x22/configure-toolbars.png">22x22/configure-toolbars.png</file>
|
||||||
|
<file alias="themes/qet/22x22/configure.png">22x22/configure.png</file>
|
||||||
|
<file alias="themes/qet/22x22/diagram_bg.png">22x22/diagram_bg.png</file>
|
||||||
|
<file alias="themes/qet/22x22/dialog-cancel.png">22x22/dialog-cancel.png</file>
|
||||||
|
<file alias="themes/qet/22x22/dialog-ok.png">22x22/dialog-ok.png</file>
|
||||||
|
<file alias="themes/qet/22x22/document-close.png">22x22/document-close.png</file>
|
||||||
|
<file alias="themes/qet/22x22/document-export.png">22x22/document-export.png</file>
|
||||||
|
<file alias="themes/qet/22x22/document-import.png">22x22/document-import.png</file>
|
||||||
|
<file alias="themes/qet/22x22/document-new.png">22x22/document-new.png</file>
|
||||||
|
<file alias="themes/qet/22x22/document-open-recent.png">22x22/document-open-recent.png</file>
|
||||||
|
<file alias="themes/qet/22x22/document-open.png">22x22/document-open.png</file>
|
||||||
|
<file alias="themes/qet/22x22/document-print-frame.png">22x22/document-print-frame.png</file>
|
||||||
|
<file alias="themes/qet/22x22/document-print.png">22x22/document-print.png</file>
|
||||||
|
<file alias="themes/qet/22x22/document-save-all.png">22x22/document-save-all.png</file>
|
||||||
|
<file alias="themes/qet/22x22/document-save-as.png">22x22/document-save-as.png</file>
|
||||||
|
<file alias="themes/qet/22x22/document-save.png">22x22/document-save.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-clear-locationbar-ltr.png">22x22/edit-clear-locationbar-ltr.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-clear-locationbar-rtl.png">22x22/edit-clear-locationbar-rtl.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-clear.png">22x22/edit-clear.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-copy.png">22x22/edit-copy.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-cut.png">22x22/edit-cut.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-delete.png">22x22/edit-delete.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-paste.png">22x22/edit-paste.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-redo.png">22x22/edit-redo.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-rename.png">22x22/edit-rename.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-select-all.png">22x22/edit-select-all.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-table-cell-merge.png">22x22/edit-table-cell-merge.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-table-cell-split.png">22x22/edit-table-cell-split.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-table-delete-column.png">22x22/edit-table-delete-column.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-table-delete-row.png">22x22/edit-table-delete-row.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-table-insert-column-left.png">22x22/edit-table-insert-column-left.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-table-insert-column-right.png">22x22/edit-table-insert-column-right.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-table-insert-row-above.png">22x22/edit-table-insert-row-above.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-table-insert-row-under.png">22x22/edit-table-insert-row-under.png</file>
|
||||||
|
<file alias="themes/qet/22x22/edit-undo.png">22x22/edit-undo.png</file>
|
||||||
|
<file alias="themes/qet/22x22/element-delete.png">22x22/element-delete.png</file>
|
||||||
|
<file alias="themes/qet/22x22/element-edit.png">22x22/element-edit.png</file>
|
||||||
|
<file alias="themes/qet/22x22/element-new.png">22x22/element-new.png</file>
|
||||||
|
<file alias="themes/qet/22x22/ellipse.png">22x22/ellipse.png</file>
|
||||||
|
<file alias="themes/qet/22x22/export-csv.png">22x22/export-csv.png</file>
|
||||||
|
<file alias="themes/qet/22x22/folder-delete.png">22x22/folder-delete.png</file>
|
||||||
|
<file alias="themes/qet/22x22/folder-edit.png">22x22/folder-edit.png</file>
|
||||||
|
<file alias="themes/qet/22x22/folder-new.png">22x22/folder-new.png</file>
|
||||||
|
<file alias="themes/qet/22x22/folder-open.png">22x22/folder-open.png</file>
|
||||||
|
<file alias="themes/qet/22x22/format-text-subscript.png">22x22/format-text-subscript.png</file>
|
||||||
|
<file alias="themes/qet/22x22/format-text-superscript.png">22x22/format-text-superscript.png</file>
|
||||||
|
<file alias="themes/qet/22x22/go-company.png">22x22/go-company.png</file>
|
||||||
|
<file alias="themes/qet/22x22/go-down.png">22x22/go-down.png</file>
|
||||||
|
<file alias="themes/qet/22x22/go-home.png">22x22/go-home.png</file>
|
||||||
|
<file alias="themes/qet/22x22/go-up.png">22x22/go-up.png</file>
|
||||||
|
<file alias="themes/qet/22x22/grid.png">22x22/grid.png</file>
|
||||||
|
<file alias="themes/qet/22x22/guides.png">22x22/guides.png</file>
|
||||||
|
<file alias="themes/qet/22x22/hotspot.png">22x22/hotspot.png</file>
|
||||||
|
<file alias="themes/qet/22x22/insert-image.png">22x22/insert-image.png</file>
|
||||||
|
<file alias="themes/qet/22x22/landscape.png">22x22/landscape.png</file>
|
||||||
|
<file alias="themes/qet/22x22/line.png">22x22/line.png</file>
|
||||||
|
<file alias="themes/qet/22x22/list-add.png">22x22/list-add.png</file>
|
||||||
|
<file alias="themes/qet/22x22/list-remove.png">22x22/list-remove.png</file>
|
||||||
|
<file alias="themes/qet/22x22/lower.png">22x22/lower.png</file>
|
||||||
|
<file alias="themes/qet/22x22/move.png">22x22/move.png</file>
|
||||||
|
<file alias="themes/qet/22x22/names.png">22x22/names.png</file>
|
||||||
|
<file alias="themes/qet/22x22/object-locked.png">22x22/object-locked.png</file>
|
||||||
|
<file alias="themes/qet/22x22/object-rotate-right.png">22x22/object-rotate-right.png</file>
|
||||||
|
<file alias="themes/qet/22x22/object-unlocked.png">22x22/object-unlocked.png</file>
|
||||||
|
<file alias="themes/qet/22x22/polygon.png">22x22/polygon.png</file>
|
||||||
|
<file alias="themes/qet/22x22/portrait.png">22x22/portrait.png</file>
|
||||||
|
<file alias="themes/qet/22x22/preferences-desktop-user.png">22x22/preferences-desktop-user.png</file>
|
||||||
|
<file alias="themes/qet/22x22/project-close.png">22x22/project-close.png</file>
|
||||||
|
<file alias="themes/qet/22x22/project-delete.png">22x22/project-delete.png</file>
|
||||||
|
<file alias="themes/qet/22x22/project-new.png">22x22/project-new.png</file>
|
||||||
|
<file alias="themes/qet/22x22/project.png">22x22/project.png</file>
|
||||||
|
<file alias="themes/qet/22x22/raise.png">22x22/raise.png</file>
|
||||||
|
<file alias="themes/qet/22x22/rectangle.png">22x22/rectangle.png</file>
|
||||||
|
<file alias="themes/qet/22x22/restaurer.png">22x22/restaurer.png</file>
|
||||||
|
<file alias="themes/qet/22x22/select.png">22x22/select.png</file>
|
||||||
|
<file alias="themes/qet/22x22/send_backward.png">22x22/send_backward.png</file>
|
||||||
|
<file alias="themes/qet/22x22/single_page.png">22x22/single_page.png</file>
|
||||||
|
<file alias="themes/qet/22x22/start.png">22x22/start.png</file>
|
||||||
|
<file alias="themes/qet/22x22/terminal.png">22x22/terminal.png</file>
|
||||||
|
<file alias="themes/qet/22x22/terminalstrip.png">22x22/terminalstrip.png</file>
|
||||||
|
<file alias="themes/qet/22x22/text-xml.png">22x22/text-xml.png</file>
|
||||||
|
<file alias="themes/qet/22x22/text.png">22x22/text.png</file>
|
||||||
|
<file alias="themes/qet/22x22/textfield.png">22x22/textfield.png</file>
|
||||||
|
<file alias="themes/qet/22x22/titleblock-bottom.png">22x22/titleblock-bottom.png</file>
|
||||||
|
<file alias="themes/qet/22x22/titleblock-right.png">22x22/titleblock-right.png</file>
|
||||||
|
<file alias="themes/qet/22x22/transform-scale.png">22x22/transform-scale.png</file>
|
||||||
|
<file alias="themes/qet/22x22/two_pages.png">22x22/two_pages.png</file>
|
||||||
|
<file alias="themes/qet/22x22/view-fit-window.png">22x22/view-fit-window.png</file>
|
||||||
|
<file alias="themes/qet/22x22/view-fullscreen.png">22x22/view-fullscreen.png</file>
|
||||||
|
<file alias="themes/qet/22x22/view-refresh.png">22x22/view-refresh.png</file>
|
||||||
|
<file alias="themes/qet/22x22/view-restore.png">22x22/view-restore.png</file>
|
||||||
|
<file alias="themes/qet/22x22/view_fit_width.png">22x22/view_fit_width.png</file>
|
||||||
|
<file alias="themes/qet/22x22/window-new.png">22x22/window-new.png</file>
|
||||||
|
<file alias="themes/qet/22x22/zoom-draw.png">22x22/zoom-draw.png</file>
|
||||||
|
<file alias="themes/qet/22x22/zoom-fit-best.png">22x22/zoom-fit-best.png</file>
|
||||||
|
<file alias="themes/qet/22x22/zoom-in.png">22x22/zoom-in.png</file>
|
||||||
|
<file alias="themes/qet/22x22/zoom-original.png">22x22/zoom-original.png</file>
|
||||||
|
<file alias="themes/qet/22x22/zoom-out.png">22x22/zoom-out.png</file>
|
||||||
|
<file alias="themes/qet/32x32/application-pdf.png">32x32/application-pdf.png</file>
|
||||||
|
<file alias="themes/qet/32x32/format-text-bold.png">32x32/format-text-bold.png</file>
|
||||||
|
<file alias="themes/qet/32x32/format-text-color.png">32x32/format-text-color.png</file>
|
||||||
|
<file alias="themes/qet/32x32/format-text-italic.png">32x32/format-text-italic.png</file>
|
||||||
|
<file alias="themes/qet/32x32/format-text-underline.png">32x32/format-text-underline.png</file>
|
||||||
|
<file alias="themes/qet/32x32/image-x-eps.png">32x32/image-x-eps.png</file>
|
||||||
|
<file alias="themes/qet/32x32/insert-link.png">32x32/insert-link.png</file>
|
||||||
|
<file alias="themes/qet/32x32/printer.png">32x32/printer.png</file>
|
||||||
|
<file alias="themes/qet/32x32/qt.png">32x32/qt.png</file>
|
||||||
|
<file alias="themes/qet/32x32/simplifyrichtext.png">32x32/simplifyrichtext.png</file>
|
||||||
|
<file alias="themes/qet/32x32/text-xml.png">32x32/text-xml.png</file>
|
||||||
|
<file alias="themes/qet/48x48/document-print-frame.png">48x48/document-print-frame.png</file>
|
||||||
|
<file alias="themes/qet/48x48/user-away-extended.png">48x48/user-away-extended.png</file>
|
||||||
|
<file alias="themes/qet/48x48/user-away.png">48x48/user-away.png</file>
|
||||||
|
<file alias="themes/qet/48x48/view-pim-journal.png">48x48/view-pim-journal.png</file>
|
||||||
|
<file alias="themes/qet/128x128/configure-shortcuts.png">128x128/configure-shortcuts.png</file>
|
||||||
|
<file alias="themes/qet/128x128/diagram.png">128x128/diagram.png</file>
|
||||||
|
<file alias="themes/qet/128x128/document-export.png">128x128/document-export.png</file>
|
||||||
|
<file alias="themes/qet/128x128/plasmagik.png">128x128/plasmagik.png</file>
|
||||||
|
<file alias="themes/qet/128x128/printer.png">128x128/printer.png</file>
|
||||||
|
<file alias="themes/qet/128x128/project.png">128x128/project.png</file>
|
||||||
|
<file alias="themes/qet/128x128/settings.png">128x128/settings.png</file>
|
||||||
|
<file alias="themes/qet/128x128/terminalstrip.png">128x128/terminalstrip.png</file>
|
||||||
|
<file alias="themes/qet/scalable/diagram.svg">scalable/diagram.svg</file>
|
||||||
|
<file alias="themes/qet/scalable/folio-delete.svg">scalable/folio-delete.svg</file>
|
||||||
|
<file alias="themes/qet/scalable/folio-new.svg">scalable/folio-new.svg</file>
|
||||||
|
<file alias="themes/qet/scalable/folio-properties.svg">scalable/folio-properties.svg</file>
|
||||||
|
<file alias="themes/qet/scalable/label.svg">scalable/label.svg</file>
|
||||||
|
<file alias="themes/qet/scalable/pdf-import.svg">scalable/pdf-import.svg</file>
|
||||||
|
<file alias="themes/qet/scalable/edit-opacity.svg">breeze-icons/scalable/apps/hidef/edit-opacity.svg</file>
|
||||||
|
<file alias="themes/qet/scalable/image-flip-horizontal.svg">breeze-icons/scalable/apps/hidef/image-flip-horizontal-symbolic.svg</file>
|
||||||
|
<file alias="themes/qet/scalable/image-flip-vertical.svg">breeze-icons/scalable/apps/hidef/image-flip-vertical-symbolic.svg</file>
|
||||||
|
<file alias="themes/qet/scalable/draw-bezier-curves.svg">breeze-icons/scalable/apps/hidef/draw-bezier-curves.svg</file>
|
||||||
|
<file alias="themes/qet/scalable/transform-crop.svg">breeze-icons/scalable/apps/hidef/transform-crop.svg</file>
|
||||||
|
<file alias="themes/qet/scalable/ellipse-to-bezier.svg">generated/ellipse-to-bezier.svg</file>
|
||||||
|
<file alias="themes/qet/scalable/rect-to-bezier.svg">generated/rect-to-bezier.svg</file>
|
||||||
|
<file alias="themes/qet/scalable/rect-to-polyline.svg">generated/rect-to-polyline.svg</file>
|
||||||
|
<file>themes/qet-dark/16x16/arrow-left-double.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/arrow-left.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/arrow-right-double.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/arrow-right.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/circle.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/conductor-edit.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/configure-toolbars.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/configure.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/dialog-cancel.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/dialog-ok.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/document-export.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/document-import.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/document-new.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/document-open-recent.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/document-print-frame.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/document-print.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/document-save-all.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/document-save-as.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/document-save.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/edit-clear-locationbar-ltr.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/edit-clear-locationbar-rtl.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/edit-clear.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/edit-copy.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/edit-cut.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/edit-download.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/edit-paste.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/edit-redo.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/edit-rename.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/edit-select-all.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/edit-select-invert.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/edit-table-cell-merge.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/edit-undo.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/element-delete.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/element-edit.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/element-new.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/element.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/endline-circle.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/endline-diamond.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/endline-none.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/endline-simple.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/endline-triangle.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/flip.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/folder-delete.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/folder-edit.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/folder-new.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/folder-open.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/folder-show-all.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/folder.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/folio-ref-coming.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/go-company.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/go-down-double.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/go-down.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/go-home.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/go-up-double.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/go-up.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/grid.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/help-contents.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/help-donate.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/item-cancel.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/item-copy.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/item-move.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/kdenlive-show-video.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/list-add.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/list-remove.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/masquer.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/mirror.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/move.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/object-group.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/object-rotate-right.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/orientations.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/preferences-desktop-user.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/select.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/table-of-content.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/terminal.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/text-xml.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/transform-rotate.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/view-fullscreen.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/view-restore.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/window-new.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/zoom-draw.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/zoom-fit-best.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/zoom-in.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/zoom-original.png</file>
|
||||||
|
<file>themes/qet-dark/16x16/zoom-out.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/Actions-player-time-icon.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/all_pages.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/applications-development-translation.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/arc.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/arrow-left-double.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/arrow-left.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/arrow-right-double.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/arrow-right.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/configure-toolbars.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/configure.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/dialog-cancel.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/dialog-ok.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/document-export.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/document-import.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/document-new.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/document-open-recent.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/document-print-frame.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/document-print.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/document-save-all.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/document-save-as.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/document-save.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/edit-clear-locationbar-ltr.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/edit-clear-locationbar-rtl.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/edit-clear.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/edit-copy.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/edit-cut.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/edit-paste.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/edit-redo.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/edit-rename.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/edit-select-all.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/edit-table-cell-merge.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/edit-undo.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/element-delete.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/element-edit.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/element-new.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/ellipse.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/folder-delete.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/folder-edit.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/folder-new.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/folder-open.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/go-company.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/go-down.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/go-home.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/go-up.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/grid.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/insert-image.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/landscape.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/line.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/list-add.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/list-remove.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/lower.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/move.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/names.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/object-locked.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/object-rotate-right.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/object-unlocked.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/polygon.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/portrait.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/preferences-desktop-user.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/raise.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/rectangle.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/restaurer.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/select.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/single_page.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/start.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/text-xml.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/text.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/textfield.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/transform-scale.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/two_pages.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/view-fit-window.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/view-fullscreen.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/view-restore.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/view_fit_width.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/window-new.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/zoom-draw.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/zoom-fit-best.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/zoom-in.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/zoom-original.png</file>
|
||||||
|
<file>themes/qet-dark/22x22/zoom-out.png</file>
|
||||||
|
<file>themes/qet-dark/32x32/format-text-bold.png</file>
|
||||||
|
<file>themes/qet-dark/32x32/format-text-color.png</file>
|
||||||
|
<file>themes/qet-dark/32x32/format-text-italic.png</file>
|
||||||
|
<file>themes/qet-dark/32x32/format-text-underline.png</file>
|
||||||
|
<file>themes/qet-dark/32x32/insert-link.png</file>
|
||||||
|
<file>themes/qet-dark/32x32/printer.png</file>
|
||||||
|
<file>themes/qet-dark/32x32/text-xml.png</file>
|
||||||
|
<file>themes/qet-dark/48x48/user-away-extended.png</file>
|
||||||
|
<file>themes/qet-dark/48x48/user-away.png</file>
|
||||||
|
<file>themes/qet-dark/48x48/view-pim-journal.png</file>
|
||||||
|
<file>themes/qet-dark/128x128/plasmagik.png</file>
|
||||||
|
<file>themes/qet-dark/128x128/settings.png</file>
|
||||||
|
<file>themes/qet-dark/scalable/diagram.svg</file>
|
||||||
|
<file>themes/qet-dark/scalable/folio-delete.svg</file>
|
||||||
|
<file>themes/qet-dark/scalable/folio-new.svg</file>
|
||||||
|
<file>themes/qet-dark/scalable/folio-properties.svg</file>
|
||||||
|
<file>themes/qet-dark/scalable/label.svg</file>
|
||||||
|
<file>themes/qet-dark/scalable/pdf-import.svg</file>
|
||||||
|
<file>themes/qet-dark/scalable/edit-opacity.svg</file>
|
||||||
|
<file>themes/qet-dark/scalable/image-flip-horizontal.svg</file>
|
||||||
|
<file>themes/qet-dark/scalable/image-flip-vertical.svg</file>
|
||||||
|
<file>themes/qet-dark/scalable/draw-bezier-curves.svg</file>
|
||||||
|
<file>themes/qet-dark/scalable/transform-crop.svg</file>
|
||||||
|
<file>themes/qet-dark/scalable/ellipse-to-bezier.svg</file>
|
||||||
|
<file>themes/qet-dark/scalable/rect-to-bezier.svg</file>
|
||||||
|
<file>themes/qet-dark/scalable/rect-to-polyline.svg</file>
|
||||||
|
<file alias="themes/qet-dark/128x128/document-export.png">128x128/document-export.png</file>
|
||||||
|
<file alias="themes/qet-dark/128x128/printer.png">128x128/printer.png</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#4d4d4d;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(1,1)">
|
||||||
|
<path style="fill:currentColor;fill-opacity:1;stroke:none" d="M 3 5 h 1 v 1 h -1 Z M 3 6 h 1 v 1 h -1 Z M 3 7 h 1 v 1 h -1 Z M 3 8 h 1 v 1 h -1 Z M 3 9 h 1 v 1 h -1 Z M 3 10 h 1 v 1 h -1 Z M 3 11 h 1 v 1 h -1 Z M 3 12 h 1 v 1 h -1 Z M 3 13 h 1 v 1 h -1 Z M 3 14 h 1 v 1 h -1 Z M 3 15 h 1 v 1 h -1 Z M 3 16 h 1 v 1 h -1 Z M 4 5 h 1 v 1 h -1 Z M 4 13 h 1 v 1 h -1 Z M 4 16 h 1 v 1 h -1 Z M 5 5 h 1 v 1 h -1 Z M 5 13 h 1 v 1 h -1 Z M 5 16 h 1 v 1 h -1 Z M 6 5 h 1 v 1 h -1 Z M 6 13 h 1 v 1 h -1 Z M 6 16 h 1 v 1 h -1 Z M 7 5 h 1 v 1 h -1 Z M 7 13 h 1 v 1 h -1 Z M 7 16 h 1 v 1 h -1 Z M 8 5 h 1 v 1 h -1 Z M 8 13 h 1 v 1 h -1 Z M 8 16 h 1 v 1 h -1 Z M 9 5 h 1 v 1 h -1 Z M 9 13 h 1 v 1 h -1 Z M 9 16 h 1 v 1 h -1 Z M 10 5 h 1 v 1 h -1 Z M 10 13 h 1 v 1 h -1 Z M 10 16 h 1 v 1 h -1 Z M 11 5 h 1 v 1 h -1 Z M 11 13 h 1 v 1 h -1 Z M 11 14 h 1 v 1 h -1 Z M 11 15 h 1 v 1 h -1 Z M 11 16 h 1 v 1 h -1 Z M 12 5 h 1 v 1 h -1 Z M 12 13 h 1 v 1 h -1 Z M 12 16 h 1 v 1 h -1 Z M 13 5 h 1 v 1 h -1 Z M 13 13 h 1 v 1 h -1 Z M 13 16 h 1 v 1 h -1 Z M 14 5 h 1 v 1 h -1 Z M 14 13 h 1 v 1 h -1 Z M 14 16 h 1 v 1 h -1 Z M 15 5 h 1 v 1 h -1 Z M 15 13 h 1 v 1 h -1 Z M 15 16 h 1 v 1 h -1 Z M 16 5 h 1 v 1 h -1 Z M 16 13 h 1 v 1 h -1 Z M 16 16 h 1 v 1 h -1 Z M 17 5 h 1 v 1 h -1 Z M 17 13 h 1 v 1 h -1 Z M 17 16 h 1 v 1 h -1 Z M 18 5 h 1 v 1 h -1 Z M 18 6 h 1 v 1 h -1 Z M 18 7 h 1 v 1 h -1 Z M 18 8 h 1 v 1 h -1 Z M 18 9 h 1 v 1 h -1 Z M 18 10 h 1 v 1 h -1 Z M 18 11 h 1 v 1 h -1 Z M 18 12 h 1 v 1 h -1 Z M 18 13 h 1 v 1 h -1 Z M 18 14 h 1 v 1 h -1 Z M 18 15 h 1 v 1 h -1 Z M 18 16 h 1 v 1 h -1 Z" class="ColorScheme-Text"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#4d4d4d;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(1,1)">
|
||||||
|
<path style="fill:currentColor;fill-opacity:1;stroke:none" d="M 3 5 h 1 v 1 h -1 Z M 3 6 h 1 v 1 h -1 Z M 3 7 h 1 v 1 h -1 Z M 3 8 h 1 v 1 h -1 Z M 3 9 h 1 v 1 h -1 Z M 3 10 h 1 v 1 h -1 Z M 3 11 h 1 v 1 h -1 Z M 3 12 h 1 v 1 h -1 Z M 3 13 h 1 v 1 h -1 Z M 3 14 h 1 v 1 h -1 Z M 3 15 h 1 v 1 h -1 Z M 3 16 h 1 v 1 h -1 Z M 4 5 h 1 v 1 h -1 Z M 4 13 h 1 v 1 h -1 Z M 4 16 h 1 v 1 h -1 Z M 5 5 h 1 v 1 h -1 Z M 5 13 h 1 v 1 h -1 Z M 5 16 h 1 v 1 h -1 Z M 6 5 h 1 v 1 h -1 Z M 6 13 h 1 v 1 h -1 Z M 6 16 h 1 v 1 h -1 Z M 7 5 h 1 v 1 h -1 Z M 7 13 h 1 v 1 h -1 Z M 7 16 h 1 v 1 h -1 Z M 8 5 h 1 v 1 h -1 Z M 8 13 h 1 v 1 h -1 Z M 8 16 h 1 v 1 h -1 Z M 9 5 h 1 v 1 h -1 Z M 9 13 h 1 v 1 h -1 Z M 9 16 h 1 v 1 h -1 Z M 10 5 h 1 v 1 h -1 Z M 10 13 h 1 v 1 h -1 Z M 10 16 h 1 v 1 h -1 Z M 11 5 h 1 v 1 h -1 Z M 11 13 h 1 v 1 h -1 Z M 11 14 h 1 v 1 h -1 Z M 11 15 h 1 v 1 h -1 Z M 11 16 h 1 v 1 h -1 Z M 12 5 h 1 v 1 h -1 Z M 12 13 h 1 v 1 h -1 Z M 12 16 h 1 v 1 h -1 Z M 13 5 h 1 v 1 h -1 Z M 14 5 h 1 v 1 h -1 Z M 14 17 h 1 v 1 h -1 Z M 15 5 h 1 v 1 h -1 Z M 15 17 h 1 v 1 h -1 Z M 16 5 h 1 v 1 h -1 Z M 16 17 h 1 v 1 h -1 Z M 17 5 h 1 v 1 h -1 Z M 17 17 h 1 v 1 h -1 Z M 18 5 h 1 v 1 h -1 Z M 18 6 h 1 v 1 h -1 Z M 18 7 h 1 v 1 h -1 Z M 18 8 h 1 v 1 h -1 Z M 18 9 h 1 v 1 h -1 Z M 18 10 h 1 v 1 h -1 Z M 18 11 h 1 v 1 h -1 Z M 18 12 h 1 v 1 h -1 Z M 18 17 h 1 v 1 h -1 Z M 19 17 h 1 v 1 h -1 Z" class="ColorScheme-Text"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#4d4d4d;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(1,1)">
|
||||||
|
<path style="fill:currentColor;fill-opacity:1;stroke:none" d="M 3 5 h 1 v 1 h -1 Z M 3 6 h 1 v 1 h -1 Z M 3 7 h 1 v 1 h -1 Z M 3 8 h 1 v 1 h -1 Z M 3 9 h 1 v 1 h -1 Z M 3 10 h 1 v 1 h -1 Z M 3 11 h 1 v 1 h -1 Z M 3 12 h 1 v 1 h -1 Z M 3 13 h 1 v 1 h -1 Z M 3 14 h 1 v 1 h -1 Z M 3 15 h 1 v 1 h -1 Z M 3 16 h 1 v 1 h -1 Z M 4 5 h 1 v 1 h -1 Z M 4 13 h 1 v 1 h -1 Z M 4 16 h 1 v 1 h -1 Z M 5 5 h 1 v 1 h -1 Z M 5 13 h 1 v 1 h -1 Z M 5 16 h 1 v 1 h -1 Z M 6 5 h 1 v 1 h -1 Z M 6 13 h 1 v 1 h -1 Z M 6 16 h 1 v 1 h -1 Z M 7 5 h 1 v 1 h -1 Z M 7 13 h 1 v 1 h -1 Z M 7 16 h 1 v 1 h -1 Z M 8 5 h 1 v 1 h -1 Z M 8 13 h 1 v 1 h -1 Z M 8 16 h 1 v 1 h -1 Z M 9 5 h 1 v 1 h -1 Z M 9 13 h 1 v 1 h -1 Z M 9 16 h 1 v 1 h -1 Z M 10 5 h 1 v 1 h -1 Z M 10 13 h 1 v 1 h -1 Z M 10 16 h 1 v 1 h -1 Z M 11 5 h 1 v 1 h -1 Z M 11 13 h 1 v 1 h -1 Z M 11 14 h 1 v 1 h -1 Z M 11 15 h 1 v 1 h -1 Z M 11 16 h 1 v 1 h -1 Z M 12 5 h 1 v 1 h -1 Z M 12 13 h 1 v 1 h -1 Z M 12 16 h 1 v 1 h -1 Z M 13 5 h 1 v 1 h -1 Z M 14 5 h 1 v 1 h -1 Z M 14 17 h 1 v 1 h -1 Z M 15 5 h 1 v 1 h -1 Z M 15 17 h 1 v 1 h -1 Z M 16 5 h 1 v 1 h -1 Z M 16 17 h 1 v 1 h -1 Z M 17 5 h 1 v 1 h -1 Z M 17 14 h 1 v 1 h -1 Z M 17 15 h 1 v 1 h -1 Z M 17 16 h 1 v 1 h -1 Z M 17 17 h 1 v 1 h -1 Z M 17 18 h 1 v 1 h -1 Z M 17 19 h 1 v 1 h -1 Z M 18 5 h 1 v 1 h -1 Z M 18 6 h 1 v 1 h -1 Z M 18 7 h 1 v 1 h -1 Z M 18 8 h 1 v 1 h -1 Z M 18 9 h 1 v 1 h -1 Z M 18 10 h 1 v 1 h -1 Z M 18 11 h 1 v 1 h -1 Z M 18 12 h 1 v 1 h -1 Z M 18 17 h 1 v 1 h -1 Z M 19 17 h 1 v 1 h -1 Z" class="ColorScheme-Text"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#4d4d4d;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(1,1)">
|
||||||
|
<path style="fill:currentColor;fill-opacity:1;stroke:none" d="M 3 5 h 1 v 1 h -1 Z M 3 6 h 1 v 1 h -1 Z M 3 7 h 1 v 1 h -1 Z M 3 8 h 1 v 1 h -1 Z M 3 9 h 1 v 1 h -1 Z M 3 10 h 1 v 1 h -1 Z M 3 11 h 1 v 1 h -1 Z M 3 12 h 1 v 1 h -1 Z M 3 13 h 1 v 1 h -1 Z M 3 14 h 1 v 1 h -1 Z M 3 15 h 1 v 1 h -1 Z M 3 16 h 1 v 1 h -1 Z M 4 5 h 1 v 1 h -1 Z M 4 13 h 1 v 1 h -1 Z M 4 16 h 1 v 1 h -1 Z M 5 5 h 1 v 1 h -1 Z M 5 13 h 1 v 1 h -1 Z M 5 16 h 1 v 1 h -1 Z M 6 5 h 1 v 1 h -1 Z M 6 8 h 1 v 1 h -1 Z M 6 10 h 1 v 1 h -1 Z M 6 13 h 1 v 1 h -1 Z M 6 16 h 1 v 1 h -1 Z M 7 5 h 1 v 1 h -1 Z M 7 8 h 1 v 1 h -1 Z M 7 10 h 1 v 1 h -1 Z M 7 13 h 1 v 1 h -1 Z M 7 16 h 1 v 1 h -1 Z M 8 5 h 1 v 1 h -1 Z M 8 8 h 1 v 1 h -1 Z M 8 10 h 1 v 1 h -1 Z M 8 13 h 1 v 1 h -1 Z M 8 16 h 1 v 1 h -1 Z M 9 5 h 1 v 1 h -1 Z M 9 8 h 1 v 1 h -1 Z M 9 10 h 1 v 1 h -1 Z M 9 13 h 1 v 1 h -1 Z M 9 16 h 1 v 1 h -1 Z M 10 5 h 1 v 1 h -1 Z M 10 8 h 1 v 1 h -1 Z M 10 10 h 1 v 1 h -1 Z M 10 13 h 1 v 1 h -1 Z M 10 16 h 1 v 1 h -1 Z M 11 5 h 1 v 1 h -1 Z M 11 8 h 1 v 1 h -1 Z M 11 10 h 1 v 1 h -1 Z M 11 13 h 1 v 1 h -1 Z M 11 14 h 1 v 1 h -1 Z M 11 15 h 1 v 1 h -1 Z M 11 16 h 1 v 1 h -1 Z M 12 5 h 1 v 1 h -1 Z M 12 8 h 1 v 1 h -1 Z M 12 10 h 1 v 1 h -1 Z M 12 13 h 1 v 1 h -1 Z M 12 16 h 1 v 1 h -1 Z M 13 5 h 1 v 1 h -1 Z M 13 8 h 1 v 1 h -1 Z M 13 10 h 1 v 1 h -1 Z M 13 13 h 1 v 1 h -1 Z M 13 16 h 1 v 1 h -1 Z M 14 5 h 1 v 1 h -1 Z M 14 8 h 1 v 1 h -1 Z M 14 10 h 1 v 1 h -1 Z M 14 13 h 1 v 1 h -1 Z M 14 16 h 1 v 1 h -1 Z M 15 5 h 1 v 1 h -1 Z M 15 8 h 1 v 1 h -1 Z M 15 10 h 1 v 1 h -1 Z M 15 13 h 1 v 1 h -1 Z M 15 16 h 1 v 1 h -1 Z M 16 5 h 1 v 1 h -1 Z M 16 13 h 1 v 1 h -1 Z M 16 16 h 1 v 1 h -1 Z M 17 5 h 1 v 1 h -1 Z M 17 13 h 1 v 1 h -1 Z M 17 16 h 1 v 1 h -1 Z M 18 5 h 1 v 1 h -1 Z M 18 6 h 1 v 1 h -1 Z M 18 7 h 1 v 1 h -1 Z M 18 8 h 1 v 1 h -1 Z M 18 9 h 1 v 1 h -1 Z M 18 10 h 1 v 1 h -1 Z M 18 11 h 1 v 1 h -1 Z M 18 12 h 1 v 1 h -1 Z M 18 13 h 1 v 1 h -1 Z M 18 14 h 1 v 1 h -1 Z M 18 15 h 1 v 1 h -1 Z M 18 16 h 1 v 1 h -1 Z" class="ColorScheme-Text"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#4d4d4d;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(1,1)">
|
||||||
|
<path style="fill:currentColor;fill-opacity:1;stroke:none" d="M 3 5 h 1 v 1 h -1 Z M 3 6 h 1 v 1 h -1 Z M 3 7 h 1 v 1 h -1 Z M 3 8 h 1 v 1 h -1 Z M 3 9 h 1 v 1 h -1 Z M 3 10 h 1 v 1 h -1 Z M 3 11 h 1 v 1 h -1 Z M 3 12 h 1 v 1 h -1 Z M 3 13 h 1 v 1 h -1 Z M 3 14 h 1 v 1 h -1 Z M 3 15 h 1 v 1 h -1 Z M 3 16 h 1 v 1 h -1 Z M 4 5 h 1 v 1 h -1 Z M 4 13 h 1 v 1 h -1 Z M 4 14 h 1 v 1 h -1 Z M 4 15 h 1 v 1 h -1 Z M 4 16 h 1 v 1 h -1 Z M 5 5 h 1 v 1 h -1 Z M 5 13 h 1 v 1 h -1 Z M 5 14 h 1 v 1 h -1 Z M 5 15 h 1 v 1 h -1 Z M 5 16 h 1 v 1 h -1 Z M 6 5 h 1 v 1 h -1 Z M 6 13 h 1 v 1 h -1 Z M 6 14 h 1 v 1 h -1 Z M 6 15 h 1 v 1 h -1 Z M 6 16 h 1 v 1 h -1 Z M 7 5 h 1 v 1 h -1 Z M 7 13 h 1 v 1 h -1 Z M 7 14 h 1 v 1 h -1 Z M 7 15 h 1 v 1 h -1 Z M 7 16 h 1 v 1 h -1 Z M 8 5 h 1 v 1 h -1 Z M 8 13 h 1 v 1 h -1 Z M 8 14 h 1 v 1 h -1 Z M 8 15 h 1 v 1 h -1 Z M 8 16 h 1 v 1 h -1 Z M 9 5 h 1 v 1 h -1 Z M 9 13 h 1 v 1 h -1 Z M 9 14 h 1 v 1 h -1 Z M 9 15 h 1 v 1 h -1 Z M 9 16 h 1 v 1 h -1 Z M 10 5 h 1 v 1 h -1 Z M 10 13 h 1 v 1 h -1 Z M 10 14 h 1 v 1 h -1 Z M 10 15 h 1 v 1 h -1 Z M 10 16 h 1 v 1 h -1 Z M 11 5 h 1 v 1 h -1 Z M 11 13 h 1 v 1 h -1 Z M 11 14 h 1 v 1 h -1 Z M 11 15 h 1 v 1 h -1 Z M 11 16 h 1 v 1 h -1 Z M 12 5 h 1 v 1 h -1 Z M 12 13 h 1 v 1 h -1 Z M 12 14 h 1 v 1 h -1 Z M 12 15 h 1 v 1 h -1 Z M 12 16 h 1 v 1 h -1 Z M 13 5 h 1 v 1 h -1 Z M 13 13 h 1 v 1 h -1 Z M 13 14 h 1 v 1 h -1 Z M 13 15 h 1 v 1 h -1 Z M 13 16 h 1 v 1 h -1 Z M 14 5 h 1 v 1 h -1 Z M 14 13 h 1 v 1 h -1 Z M 14 14 h 1 v 1 h -1 Z M 14 15 h 1 v 1 h -1 Z M 14 16 h 1 v 1 h -1 Z M 15 5 h 1 v 1 h -1 Z M 15 13 h 1 v 1 h -1 Z M 15 14 h 1 v 1 h -1 Z M 15 15 h 1 v 1 h -1 Z M 15 16 h 1 v 1 h -1 Z M 16 5 h 1 v 1 h -1 Z M 16 13 h 1 v 1 h -1 Z M 16 14 h 1 v 1 h -1 Z M 16 15 h 1 v 1 h -1 Z M 16 16 h 1 v 1 h -1 Z M 17 5 h 1 v 1 h -1 Z M 17 13 h 1 v 1 h -1 Z M 17 14 h 1 v 1 h -1 Z M 17 15 h 1 v 1 h -1 Z M 17 16 h 1 v 1 h -1 Z M 18 5 h 1 v 1 h -1 Z M 18 6 h 1 v 1 h -1 Z M 18 7 h 1 v 1 h -1 Z M 18 8 h 1 v 1 h -1 Z M 18 9 h 1 v 1 h -1 Z M 18 10 h 1 v 1 h -1 Z M 18 11 h 1 v 1 h -1 Z M 18 12 h 1 v 1 h -1 Z M 18 13 h 1 v 1 h -1 Z M 18 14 h 1 v 1 h -1 Z M 18 15 h 1 v 1 h -1 Z M 18 16 h 1 v 1 h -1 Z" class="ColorScheme-Text"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.4 KiB |
@@ -0,0 +1,13 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#4d4d4d;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(1,1)">
|
||||||
|
<path style="fill:currentColor;fill-opacity:1;stroke:none" d="M 3 3 h 16 v 1 h -16 Z M 3 4 h 1 v 15 h -1 Z M 4 18 h 10 v 1 h -10 Z M 18 4 h 1 v 8 h -1 Z M 16 14 h 1 v 5 h -1 Z M 14 16 h 5 v 1 h -5 Z" class="ColorScheme-Text"/>
|
||||||
|
<path style="fill:currentColor;fill-opacity:1;stroke:none" d="M 5 7 h 1 v 1 h -1 Z M 6 7 h 1 v 1 h -1 Z M 7 7 h 1 v 1 h -1 Z M 5 8 h 1 v 1 h -1 Z M 7 8 h 1 v 1 h -1 Z M 5 9 h 1 v 1 h -1 Z M 6 9 h 1 v 1 h -1 Z M 7 9 h 1 v 1 h -1 Z M 5 10 h 1 v 1 h -1 Z M 5 11 h 1 v 1 h -1 Z M 9 7 h 1 v 1 h -1 Z M 10 7 h 1 v 1 h -1 Z M 9 8 h 1 v 1 h -1 Z M 11 8 h 1 v 1 h -1 Z M 9 9 h 1 v 1 h -1 Z M 11 9 h 1 v 1 h -1 Z M 9 10 h 1 v 1 h -1 Z M 11 10 h 1 v 1 h -1 Z M 9 11 h 1 v 1 h -1 Z M 10 11 h 1 v 1 h -1 Z M 13 7 h 1 v 1 h -1 Z M 14 7 h 1 v 1 h -1 Z M 15 7 h 1 v 1 h -1 Z M 13 8 h 1 v 1 h -1 Z M 13 9 h 1 v 1 h -1 Z M 14 9 h 1 v 1 h -1 Z M 13 10 h 1 v 1 h -1 Z M 13 11 h 1 v 1 h -1 Z" class="ColorScheme-Text"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 272 B |
|
After Width: | Height: | Size: 230 B |
|
After Width: | Height: | Size: 276 B |
|
After Width: | Height: | Size: 235 B |
|
After Width: | Height: | Size: 359 B |
|
After Width: | Height: | Size: 242 B |
|
After Width: | Height: | Size: 139 B |
|
After Width: | Height: | Size: 223 B |
|
After Width: | Height: | Size: 391 B |
|
After Width: | Height: | Size: 297 B |
|
After Width: | Height: | Size: 220 B |
|
After Width: | Height: | Size: 220 B |
|
After Width: | Height: | Size: 140 B |
|
After Width: | Height: | Size: 285 B |
|
After Width: | Height: | Size: 155 B |
|
After Width: | Height: | Size: 155 B |
|
After Width: | Height: | Size: 229 B |
|
After Width: | Height: | Size: 293 B |
|
After Width: | Height: | Size: 203 B |
|
After Width: | Height: | Size: 248 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 297 B |
|
After Width: | Height: | Size: 156 B |
|
After Width: | Height: | Size: 337 B |
|
After Width: | Height: | Size: 264 B |
|
After Width: | Height: | Size: 131 B |
|
After Width: | Height: | Size: 324 B |
|
After Width: | Height: | Size: 318 B |
|
After Width: | Height: | Size: 153 B |
|
After Width: | Height: | Size: 269 B |
|
After Width: | Height: | Size: 196 B |
|
After Width: | Height: | Size: 329 B |
|
After Width: | Height: | Size: 409 B |
|
After Width: | Height: | Size: 453 B |
|
After Width: | Height: | Size: 430 B |
|
After Width: | Height: | Size: 453 B |
|
After Width: | Height: | Size: 269 B |
|
After Width: | Height: | Size: 253 B |
|
After Width: | Height: | Size: 103 B |
|
After Width: | Height: | Size: 209 B |
|
After Width: | Height: | Size: 190 B |
|
After Width: | Height: | Size: 225 B |
|
After Width: | Height: | Size: 216 B |
|
After Width: | Height: | Size: 266 B |