mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-20 16:20:52 +01:00
Compare commits
1377 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
af442aded0 | ||
|
|
8bd798c449 | ||
|
|
2fd6a1e6f9 | ||
|
|
afb8254fe2 | ||
|
|
4a9e3f248f | ||
|
|
fa5ec6f597 | ||
|
|
4a200bbcf5 | ||
|
|
81a9406e01 | ||
|
|
7af1431105 | ||
|
|
b178080208 | ||
|
|
10dc4b6300 | ||
|
|
6922979bcb | ||
|
|
20aab5c922 | ||
|
|
a7a3024837 | ||
|
|
384f5c2d2b | ||
|
|
c93ae47b24 | ||
|
|
268a171a87 | ||
|
|
6f34fbbd9b | ||
|
|
6c3e49a436 | ||
|
|
1256dfcfcb | ||
|
|
1871d5c6ef | ||
|
|
beb8519c89 | ||
|
|
bbbbbfd942 | ||
|
|
20c440d45a | ||
|
|
df4edf60e5 | ||
|
|
b7feb25dbd | ||
|
|
35e960a0cf | ||
|
|
0c961cb884 | ||
|
|
3e4b948fd6 | ||
|
|
5f006e7ece | ||
|
|
25dfadbe85 | ||
|
|
a7d4c44c36 | ||
|
|
5cc4fb8ac7 | ||
|
|
603c2ba63e | ||
|
|
719e1c008e | ||
|
|
efbfb462c8 | ||
|
|
7816031b0c | ||
|
|
8d910ccaa4 | ||
|
|
8c3f9f49e0 | ||
|
|
85fa1252cb | ||
|
|
29cdb19877 | ||
|
|
5997bdb36f | ||
|
|
8225e6ba8f | ||
|
|
bff9d5f048 | ||
|
|
cdfd49a5a3 | ||
|
|
d5a3dbc461 | ||
|
|
2767df712a | ||
|
|
28fca988b9 | ||
|
|
a161ce0bd4 | ||
|
|
626ff78ae0 | ||
|
|
a542f1d4bf | ||
|
|
2300783bfe | ||
|
|
a8b0d63a5c | ||
|
|
7c75e2f0bf | ||
|
|
c516f3a1ca | ||
|
|
d42a9ad176 | ||
|
|
dd237b148e | ||
|
|
f54e3bb90b | ||
|
|
4b39950397 | ||
|
|
597a8cf79f | ||
|
|
2e75d0932b | ||
|
|
3fc74b8723 | ||
|
|
9b6863322d | ||
|
|
e3149c5c0f | ||
|
|
95ff9634ef | ||
|
|
71ad75978c | ||
|
|
7f73e07b66 | ||
|
|
3dd53cb5ac | ||
|
|
9e9bf1ccf0 | ||
|
|
3837ffa38b | ||
|
|
4a256907f9 | ||
|
|
5e5bbaf4f3 | ||
|
|
b07d2d8742 | ||
|
|
d04110f437 | ||
|
|
d5427ee61c | ||
|
|
1f7e96605a | ||
|
|
2d2646ca84 | ||
|
|
a5ea81162a | ||
|
|
bb87d508ae | ||
|
|
29f5dcad8c | ||
|
|
21b7901d4f | ||
|
|
7024bf0e6c | ||
|
|
f08b19da4e | ||
|
|
1d98158078 | ||
|
|
7206e4166e | ||
|
|
8352c31203 | ||
|
|
b852e6de65 | ||
|
|
f8f35d2312 | ||
|
|
2568d71c21 | ||
|
|
291b432ab4 | ||
|
|
72ca6eb33d | ||
|
|
5c2a405f78 | ||
|
|
fc10cd63b7 | ||
|
|
8f5927ac55 | ||
|
|
6deb2272f8 | ||
|
|
260119479d | ||
|
|
bef1bd97f0 | ||
|
|
a048897be8 | ||
|
|
4954b7d251 | ||
|
|
bfb3d8b351 | ||
|
|
1a7dd5ab8b | ||
|
|
e175db1449 | ||
|
|
eebd0b4583 | ||
|
|
c4bdedbb95 | ||
|
|
52bdbd20cc | ||
|
|
d51b064374 | ||
|
|
4ab6a006f0 | ||
|
|
db651655eb | ||
|
|
e54dce8721 | ||
|
|
8d40da12ef | ||
|
|
07fca790a7 | ||
|
|
d3f129d003 | ||
|
|
bae9ab53fd | ||
|
|
1301b96cb8 | ||
|
|
b56a594c54 | ||
|
|
7990889d99 | ||
|
|
339d5e0f43 | ||
|
|
b2c3827c8d | ||
|
|
5e5f8532a1 | ||
|
|
43cebe93f2 | ||
|
|
c57ec8dbe5 | ||
|
|
9282bed14f | ||
|
|
f039a37447 | ||
|
|
f40560a041 | ||
|
|
54cb918abe | ||
|
|
9bea5c84cb | ||
|
|
ab0657a3d4 | ||
|
|
e6180e8971 | ||
|
|
a507e863e7 | ||
|
|
10edad5641 | ||
|
|
1a7261c1de | ||
|
|
fac1c5c2c4 | ||
|
|
1b52030484 | ||
|
|
3b7b70f551 | ||
|
|
c239b66cf4 | ||
|
|
b3ba4a6a2c | ||
|
|
b1215d66d4 | ||
|
|
178eac3e26 | ||
|
|
d810aa1400 | ||
|
|
e30d6d5a18 | ||
|
|
cbc6a13e2a | ||
|
|
c386374223 | ||
|
|
aab87decf7 | ||
|
|
6db24aab25 | ||
|
|
174252b482 | ||
|
|
926a0d70a1 | ||
|
|
de071e17b5 | ||
|
|
5411ed4ea1 | ||
|
|
7117c67b56 | ||
|
|
9bea4ae8bf | ||
|
|
159f414567 | ||
|
|
c7b746ddb3 | ||
|
|
01b720ac34 | ||
|
|
f7d6896b52 | ||
|
|
813ebe0a2a | ||
|
|
2dc40fd182 | ||
|
|
50d53a0469 | ||
|
|
bee598cd67 | ||
|
|
3e7da0fd93 | ||
|
|
949a65f640 | ||
|
|
2fb35a6a11 | ||
|
|
63c4ad067f | ||
|
|
1dd9670f0c | ||
|
|
0d1388ce57 | ||
|
|
e744597e5e | ||
|
|
1871572312 | ||
|
|
f16df99266 | ||
|
|
ba29308b31 | ||
|
|
0a934ac43b | ||
|
|
6f9105a202 | ||
|
|
0eb5559703 | ||
|
|
417ef1b02e | ||
|
|
b89397670e | ||
|
|
68dffdd5da | ||
|
|
1a48c5af83 | ||
|
|
5f3dcd1dbb | ||
|
|
a77895c62c | ||
|
|
5496a4f9cc | ||
|
|
15a79881b0 | ||
|
|
1e474e4a77 | ||
|
|
a2f73bc1dd | ||
|
|
8b76fc20b0 | ||
|
|
8ba02ef932 | ||
|
|
b8ae554310 | ||
|
|
83ca44e6b9 | ||
|
|
fd32b98651 | ||
|
|
714f9e09e2 | ||
|
|
f1dd11b903 | ||
|
|
318df55a37 | ||
|
|
6ab83f3517 | ||
|
|
7c89f95d8a | ||
|
|
acbbf01cf4 | ||
|
|
ba7e030d9f | ||
|
|
e3eaed2314 | ||
|
|
1a616e6e94 | ||
|
|
070de7f706 | ||
|
|
8091bd5502 | ||
|
|
65ad6c08b2 | ||
|
|
444afebd21 | ||
|
|
b78803a1a7 | ||
|
|
d995d9e6a9 | ||
|
|
3d9f1a876c | ||
|
|
3b4b36f0e6 | ||
|
|
33c0cbab34 | ||
|
|
d42f1cc31f | ||
|
|
46e0d63db6 | ||
|
|
4fa182be4c | ||
|
|
05f150904c | ||
|
|
ccd8aa8638 | ||
|
|
500c75603d | ||
|
|
610a94f10f | ||
|
|
75ba376b89 | ||
|
|
8f07be7312 | ||
|
|
457458e6d9 | ||
|
|
4828445aaf | ||
|
|
c6694bcde0 | ||
|
|
088180dd30 | ||
|
|
a44a36697b | ||
|
|
4de56d0dd5 | ||
|
|
23bf20b0c7 | ||
|
|
0a1a9858e7 | ||
|
|
f471bbde19 | ||
|
|
7fe80ab8e2 | ||
|
|
aad172e3d3 | ||
|
|
709bfa27c5 | ||
|
|
5ec1dbffbc | ||
|
|
adf9ff1591 | ||
|
|
1abfe9e33f | ||
|
|
7dd91cde8b | ||
|
|
f98439e532 | ||
|
|
9f7a650713 | ||
|
|
8b1e7904c4 | ||
|
|
e31a8a375e | ||
|
|
767565d147 | ||
|
|
1354c04d3c | ||
|
|
245a8abbb1 | ||
|
|
7370edbb4e | ||
|
|
b35fbf952f | ||
|
|
032594a346 | ||
|
|
a818198e76 | ||
|
|
1efdcedf68 | ||
|
|
e7207734c5 | ||
|
|
79682cb3d0 | ||
|
|
30da0147d3 | ||
|
|
47617deaea | ||
|
|
def111cb3f | ||
|
|
cb37bc1d44 | ||
|
|
996466da35 | ||
|
|
1438ee7096 | ||
|
|
2f33fba21e | ||
|
|
57b8880f8a | ||
|
|
719722309a | ||
|
|
c96322e873 | ||
|
|
f393d3dc62 | ||
|
|
ff2d557693 | ||
|
|
87d3021bd3 | ||
|
|
a92bfa5e29 | ||
|
|
e1522a0198 | ||
|
|
476c242c84 | ||
|
|
c90c19cea0 | ||
|
|
bf5db736d5 | ||
|
|
241dbf15d4 | ||
|
|
7b6f46a26c | ||
|
|
aa13b0a708 | ||
|
|
b135844910 | ||
|
|
8daa1bebce | ||
|
|
9bf900ca29 | ||
|
|
f6b2037fb9 | ||
|
|
ab3caba9ef | ||
|
|
dc2ea1ae80 | ||
|
|
14d5811979 | ||
|
|
e7d724ebde | ||
|
|
1f192b26c7 | ||
|
|
fa34d7fbe6 | ||
|
|
6ed064b8fb | ||
|
|
03fd6e72a9 | ||
|
|
7d3b37e587 | ||
|
|
ea3042e514 | ||
|
|
9f62655914 | ||
|
|
08a810dbe6 | ||
|
|
807c66ec4e | ||
|
|
4f64939ade | ||
|
|
b189c72fd9 | ||
|
|
ae39ee4713 | ||
|
|
987c36799a | ||
|
|
af2a2e71b5 | ||
|
|
68ee93ccbe | ||
|
|
6bdd166e57 | ||
|
|
fac0fea239 | ||
|
|
ef2958eab1 | ||
|
|
f7d27f25a1 | ||
|
|
7a955b777f | ||
|
|
1e8e01c84c | ||
|
|
6199503954 | ||
|
|
9a996544f6 | ||
|
|
fd155f90d4 | ||
|
|
e7c9d8cf9a | ||
|
|
c3bf22ef2e | ||
|
|
988c983bd5 | ||
|
|
4164cf227f | ||
|
|
d0d27efd57 | ||
|
|
271ee23116 | ||
|
|
a73c260e6c | ||
|
|
dc2c47f6e6 | ||
|
|
542f061370 | ||
|
|
2d1d3c9c3e | ||
|
|
a60d840aae | ||
|
|
292622ea97 | ||
|
|
8d7316641f | ||
|
|
fa54b6eaae | ||
|
|
0815332c73 | ||
|
|
007e627b86 | ||
|
|
03bb2b3776 | ||
|
|
37daadacd9 | ||
|
|
2b92163230 | ||
|
|
39c1913640 | ||
|
|
62bb0d2d01 | ||
|
|
caacd177d7 | ||
|
|
b6ae248036 | ||
|
|
22f4a7cecf | ||
|
|
932ba96c98 | ||
|
|
fce37998d1 | ||
|
|
ee99c57218 | ||
|
|
55cfef61b8 | ||
|
|
92897f14a8 | ||
|
|
5f019b859d | ||
|
|
9c59980228 | ||
|
|
518987a9a0 | ||
|
|
072f63dfb6 | ||
|
|
b50ff0fb8a | ||
|
|
3036f23d1b | ||
|
|
bd53c662b7 | ||
|
|
39c75e0136 | ||
|
|
bde78d0412 | ||
|
|
815c973050 | ||
|
|
3abdd8a9c0 | ||
|
|
9fb4eb7c2d | ||
|
|
7661b2f47e | ||
|
|
7ca84724ae | ||
|
|
4adbba85df | ||
|
|
6b8506c61e | ||
|
|
7d4b90ca3a | ||
|
|
0e63192a3d | ||
|
|
ef07a3b7f0 | ||
|
|
4a07d8de7e | ||
|
|
230daa4636 | ||
|
|
a04f7b33e4 | ||
|
|
b777e759b8 | ||
|
|
2678b75b14 | ||
|
|
0345e54512 | ||
|
|
cae43d0fc1 | ||
|
|
7f9d792368 | ||
|
|
6d5570404a | ||
|
|
0473244284 | ||
|
|
3fc9409559 | ||
|
|
21c8ffbd7b | ||
|
|
0e0e4dfc29 | ||
|
|
4795ed206d | ||
|
|
1ef2a0421a | ||
|
|
156867a380 | ||
|
|
aa0a83e0d6 | ||
|
|
9c658d84b1 | ||
|
|
03cd055b9a | ||
|
|
3890ed9811 | ||
|
|
02eecf52a0 | ||
|
|
a8a8610f48 | ||
|
|
22d589f630 | ||
|
|
ad4646e534 | ||
|
|
a2d095e7a8 | ||
|
|
1f960e10ac | ||
|
|
44dbe5a20f | ||
|
|
fa11ec59ad | ||
|
|
a9e4d972b8 | ||
|
|
358aef7cf5 | ||
|
|
94f1bf0d87 | ||
|
|
d535283d24 | ||
|
|
8c48856886 | ||
|
|
da4591cdca | ||
|
|
416a16ca01 | ||
|
|
34b5859fc8 | ||
|
|
2eb28ddc2f | ||
|
|
69302638be | ||
|
|
8208bdef6b | ||
|
|
b211c2d3fd | ||
|
|
980490fd82 | ||
|
|
364750f09d | ||
|
|
8cae0c000c | ||
|
|
5cff725310 | ||
|
|
8f1e93bee9 | ||
|
|
1b46f7709a | ||
|
|
3043fc8e2f | ||
|
|
ab94c96567 | ||
|
|
eb429d1730 | ||
|
|
4c24526928 | ||
|
|
4e65acef0d | ||
|
|
91adb47b88 | ||
|
|
c86b064847 | ||
|
|
17c7b84b45 | ||
|
|
53a9802f36 | ||
|
|
0279ad21df | ||
|
|
02da5c9875 | ||
|
|
a5ab02406b | ||
|
|
f8e3626bf2 | ||
|
|
0efe9774d1 | ||
|
|
5ccf015280 | ||
|
|
df1c9dae3c | ||
|
|
ef46da501d | ||
|
|
66a4fd827c | ||
|
|
7c2716ae35 | ||
|
|
853d169549 | ||
|
|
5a1d557668 | ||
|
|
dd2801f784 | ||
|
|
c560a61610 | ||
|
|
adb8c26f8b | ||
|
|
7c50ff6c94 | ||
|
|
5582ec974c | ||
|
|
82e6e22a4a | ||
|
|
b683aee182 | ||
|
|
5b6bea0601 | ||
|
|
188dabf88a | ||
|
|
c6a74baa9e | ||
|
|
66ab3b20d6 | ||
|
|
b1d2d5f9f9 | ||
|
|
5b2a2249af | ||
|
|
271242d207 | ||
|
|
edce3e18b0 | ||
|
|
1dcd4ab652 | ||
|
|
55c191b7da | ||
|
|
fdb57497ae | ||
|
|
4cdf293f01 | ||
|
|
5d274349cd | ||
|
|
45c2923bc6 | ||
|
|
dad45ea974 | ||
|
|
009cdb285a | ||
|
|
02c7879eeb | ||
|
|
8b4a0d367b | ||
|
|
7bda3ad839 | ||
|
|
6a812984ca | ||
|
|
d4a9653a41 | ||
|
|
d21d932677 | ||
|
|
53e19b85e6 | ||
|
|
ff383ce291 | ||
|
|
2488e9a7e7 | ||
|
|
1962114dc8 | ||
|
|
54092e0f01 | ||
|
|
847688321a | ||
|
|
917b7422b8 | ||
|
|
cba41ef345 | ||
|
|
b9a46fd6f9 | ||
|
|
d8fa44e07e | ||
|
|
2d5161b4ac | ||
|
|
914984e421 | ||
|
|
a66c6daae0 | ||
|
|
6a9a9fa92e | ||
|
|
e982d62dbf | ||
|
|
c1615dfa9c | ||
|
|
9089310e92 | ||
|
|
383f3f125a | ||
|
|
fff5c762f8 | ||
|
|
908d9f07a8 | ||
|
|
8340c1399a | ||
|
|
504a052e9b | ||
|
|
d431139d57 | ||
|
|
883da2a9c0 | ||
|
|
282ac82ead | ||
|
|
a5a05ac60c | ||
|
|
076ab12843 | ||
|
|
cd6a11be76 | ||
|
|
235681d330 | ||
|
|
18a432ef62 | ||
|
|
81dbda4f51 | ||
|
|
f2f63edd07 | ||
|
|
3ff91116ac | ||
|
|
fd63d4ca4c | ||
|
|
76665da0aa | ||
|
|
12306968cb | ||
|
|
c90c13e3f1 | ||
|
|
0f8a504eaa | ||
|
|
9659175616 | ||
|
|
710a733980 | ||
|
|
312beaa83f | ||
|
|
e0d8186438 | ||
|
|
f82c74557d | ||
|
|
ac0386203e | ||
|
|
6ca6d01352 | ||
|
|
fdfdf630fd | ||
|
|
7324457f94 | ||
|
|
d201141bb6 | ||
|
|
94eaebc8f8 | ||
|
|
bdb9d6bdbb | ||
|
|
eb025b1b58 | ||
|
|
3ee8fdac20 | ||
|
|
f2ee94ddbe | ||
|
|
46808be7f6 | ||
|
|
5e39beaa7d | ||
|
|
d2712d8188 | ||
|
|
11ee61df4b | ||
|
|
70483e4b54 | ||
|
|
837aa248d8 | ||
|
|
2a6ecee31b | ||
|
|
9f9c67f4cf | ||
|
|
04011fc9f6 | ||
|
|
4dc5100756 | ||
|
|
a7f4b1f9ed | ||
|
|
3930a2580e | ||
|
|
b903b2b6d1 | ||
|
|
41d3c01d66 | ||
|
|
2d0a50cf5f | ||
|
|
c7a4e086e9 | ||
|
|
379ab88ca6 | ||
|
|
3da355af22 | ||
|
|
575e3321cc | ||
|
|
440eaf5869 | ||
|
|
4dc58447ca | ||
|
|
0d58f970a1 | ||
|
|
b1c0d8eea1 | ||
|
|
0b97e6ad99 | ||
|
|
19bfb8e628 | ||
|
|
e7dee990ad | ||
|
|
4f9c8b13aa | ||
|
|
71e0f05fcc | ||
|
|
f7edf46b3b | ||
|
|
ea389fcf2b | ||
|
|
1eae8e9a9d | ||
|
|
f64afb3de1 | ||
|
|
87f25b4ea5 | ||
|
|
2b61458bc9 | ||
|
|
09c362c954 | ||
|
|
6f068bb155 | ||
|
|
edab65e50a | ||
|
|
806b92d8ee | ||
|
|
b4d5b5ec80 | ||
|
|
9e857aff4e | ||
|
|
e9c6b6a41c | ||
|
|
bf348a42d0 | ||
|
|
9049809ac1 | ||
|
|
2144ced889 | ||
|
|
dc327579cc | ||
|
|
1c3c026362 | ||
|
|
a323d3c8f8 | ||
|
|
8fe4e99264 | ||
|
|
b83bf84e7a | ||
|
|
caa0df63dc | ||
|
|
6de787a0cc | ||
|
|
97dc089f02 | ||
|
|
e1f642e421 | ||
|
|
78aa272836 | ||
|
|
c6c687a1dc | ||
|
|
6c6e47d8b6 | ||
|
|
3cb3283053 | ||
|
|
10b507cceb | ||
|
|
6ee9f2ffa4 | ||
|
|
b536c0998b | ||
|
|
70b54d8d5a | ||
|
|
9f1cb20a38 | ||
|
|
0dca6184bb | ||
|
|
e47ff17e3e | ||
|
|
d49bc9c4c2 | ||
|
|
5ea104640e | ||
|
|
a1cfd83d56 | ||
|
|
f20dcb7a05 | ||
|
|
0742812e6a | ||
|
|
cb64b1b4e5 | ||
|
|
48dfa8bcc4 | ||
|
|
e4f644595a | ||
|
|
046655cc63 | ||
|
|
afe75a4a4c | ||
|
|
21893fa6d0 | ||
|
|
d2b87cd4b8 | ||
|
|
a7b9222638 | ||
|
|
1f976c8574 | ||
|
|
4be7b35529 | ||
|
|
6977562e37 | ||
|
|
eb89769b9d | ||
|
|
96d0f83ed7 | ||
|
|
659d3d9635 | ||
|
|
442cccd282 | ||
|
|
b9d0cba0f4 | ||
|
|
f6b2e08918 | ||
|
|
3fd1504658 | ||
|
|
48100b618c | ||
|
|
5ac244da83 | ||
|
|
9e196a79c9 | ||
|
|
58b5364b72 | ||
|
|
e5ff641bd1 | ||
|
|
c680984af4 | ||
|
|
f3c1707d60 | ||
|
|
e4f4fba950 | ||
|
|
09426a1988 | ||
|
|
19ca68b1bb | ||
|
|
a4ba56d8d6 | ||
|
|
2a17afc091 | ||
|
|
cff03e456f | ||
|
|
7913fd9d00 | ||
|
|
360cb0a201 | ||
|
|
c474544ab5 | ||
|
|
ac7e784b0e | ||
|
|
2996086375 | ||
|
|
9ba3216422 | ||
|
|
78f02a3dfb | ||
|
|
3d99188990 | ||
|
|
19b28ee046 | ||
|
|
a040a2db1d | ||
|
|
768b4327e0 | ||
|
|
cd57cbb69c | ||
|
|
e6bfd892cd | ||
|
|
991759ea31 | ||
|
|
e11635f7c1 | ||
|
|
f95b6d079a | ||
|
|
6b57a90879 | ||
|
|
96899eb9f9 | ||
|
|
cf6ebf8f0f | ||
|
|
2b537f1f28 | ||
|
|
254239571c | ||
|
|
24d35004e6 | ||
|
|
44544e06cf | ||
|
|
4c4fdf5d45 | ||
|
|
9b9a462043 | ||
|
|
879468f3be | ||
|
|
eb9b237901 | ||
|
|
b333b518be | ||
|
|
15a2c9e7ce | ||
|
|
b94ac2fa9d | ||
|
|
365dac24e3 | ||
|
|
8994913261 | ||
|
|
1b7a3ae0b6 | ||
|
|
ba4917450e | ||
|
|
eb1e474776 | ||
|
|
ec1eec4fe7 | ||
|
|
bed31bcee9 | ||
|
|
e21f1f9f9c | ||
|
|
955bfff54e | ||
|
|
45ba52013b | ||
|
|
0f037b901a | ||
|
|
1ce97b42b8 | ||
|
|
466704cd1e | ||
|
|
23254f44f1 | ||
|
|
4504e71e4e | ||
|
|
3d04ebdb20 | ||
|
|
7beec1776e | ||
|
|
491e0b7151 | ||
|
|
7eb779e8ab | ||
|
|
c444de69f2 | ||
|
|
5c4312f86d | ||
|
|
05d35d4a3a | ||
|
|
71abf66bfd | ||
|
|
46f11dab1c | ||
|
|
7bb50368f0 | ||
|
|
460b556a32 | ||
|
|
287e458f4b | ||
|
|
87da5daed1 | ||
|
|
d2e99b5d0b | ||
|
|
d5f0466576 | ||
|
|
36b8082921 | ||
|
|
82b85e9389 | ||
|
|
34b75c4304 | ||
|
|
1d1c0b9937 | ||
|
|
cc2982ae78 | ||
|
|
8722c6a97d | ||
|
|
d0d00fdefa | ||
|
|
1e5d5a3c81 | ||
|
|
e86c359db3 | ||
|
|
2131efe518 | ||
|
|
8f13a5836e | ||
|
|
c0862f9e7d | ||
|
|
5775731743 | ||
|
|
521ff739f2 | ||
|
|
3187532bc4 | ||
|
|
b6d9ad0b58 | ||
|
|
66f4cc2668 | ||
|
|
5344f2cc76 | ||
|
|
0ca0338ca4 | ||
|
|
8ebb7c4e33 | ||
|
|
e5c2eab123 | ||
|
|
7329d8d90e | ||
|
|
6570e15f10 | ||
|
|
361815b9da | ||
|
|
5e7cff7316 | ||
|
|
a3b1ac7b74 | ||
|
|
cb881bb044 | ||
|
|
1cbbe67520 | ||
|
|
ee546e5487 | ||
|
|
3d962c9743 | ||
|
|
b8e7613787 | ||
|
|
d96283db39 | ||
|
|
d242546aa6 | ||
|
|
134b3ba83e | ||
|
|
3b07252a9a | ||
|
|
2b0e478f08 | ||
|
|
0ae33913e3 | ||
|
|
4846e4f185 | ||
|
|
fc7905f8f0 | ||
|
|
e7e17f78e8 | ||
|
|
2642095fcf | ||
|
|
aeae9a9f89 | ||
|
|
649e3de3e6 | ||
|
|
616626cb1c | ||
|
|
596bd6fd1b | ||
|
|
d17d6c492e | ||
|
|
e11acf7b57 | ||
|
|
d4cacb86c9 | ||
|
|
c73d51ccb8 | ||
|
|
ceeef7973a | ||
|
|
9e0f8da7ac | ||
|
|
f59bf133d1 | ||
|
|
1acbf1f54c | ||
|
|
72134dcd33 | ||
|
|
cf1a059a7f | ||
|
|
8f6fec3e7b | ||
|
|
0a59d82106 | ||
|
|
d5aa85df1c | ||
|
|
aa9c4ec373 | ||
|
|
2149d65a4c | ||
|
|
d36bd90018 | ||
|
|
401835654c | ||
|
|
3f4c40791f | ||
|
|
4c71da09fd | ||
|
|
01c89c1c27 | ||
|
|
8960e74bf6 | ||
|
|
7d1355d0dd | ||
|
|
0aadf94720 | ||
|
|
5b20748d64 | ||
|
|
16145951a0 | ||
|
|
688e9d5695 | ||
|
|
441c8a9d23 | ||
|
|
86144b6727 | ||
|
|
1e035ff1a2 | ||
|
|
cd6d05e702 | ||
|
|
a86a6139f0 | ||
|
|
837d0e58ad | ||
|
|
648010d596 | ||
|
|
05b8636627 | ||
|
|
c203371ffd | ||
|
|
d5cf212fb3 | ||
|
|
c20d4fe88b | ||
|
|
718bc2d197 | ||
|
|
344883aa2d | ||
|
|
85e25bb80e | ||
|
|
8933b5bb45 | ||
|
|
789054c631 | ||
|
|
dc62cdac4e | ||
|
|
e1649a77bf | ||
|
|
f04b7f2a5a | ||
|
|
15e042e142 | ||
|
|
7ad60f26d5 | ||
|
|
00f0b7f5b6 | ||
|
|
0031d51b01 | ||
|
|
1d9093637f | ||
|
|
4708cdefd1 | ||
|
|
285ba550a5 | ||
|
|
4fd8b390c5 | ||
|
|
6fed985ad9 | ||
|
|
cc59d364ec | ||
|
|
a1cb199b00 | ||
|
|
f71068d452 | ||
|
|
03465a11d0 | ||
|
|
d1e9b21cbd | ||
|
|
dbd33931ad | ||
|
|
211fda2aa5 | ||
|
|
2944a9829a | ||
|
|
faa0b1c903 | ||
|
|
249815315d | ||
|
|
433ef74867 | ||
|
|
c8fd831d42 | ||
|
|
c3169a3939 | ||
|
|
6b8e83627b | ||
|
|
b0decfbdf1 | ||
|
|
facd9c9b96 | ||
|
|
7512842b49 | ||
|
|
33d6bbe78a | ||
|
|
f9c17f120f | ||
|
|
7b791c6b0b | ||
|
|
6c657d0f27 | ||
|
|
7e28694e92 | ||
|
|
f231a52bdc | ||
|
|
4a2abff7d6 | ||
|
|
337da0eaf5 | ||
|
|
c8d54c9552 | ||
|
|
f4500bf94b | ||
|
|
f7c25ff048 | ||
|
|
f70a23c72c | ||
|
|
9d08481c3e | ||
|
|
bd6e626e89 | ||
|
|
fbbaa6161c | ||
|
|
5afb578b57 | ||
|
|
2736624636 | ||
|
|
050711b9d7 | ||
|
|
260dd5773e | ||
|
|
8d2cea0ae2 | ||
|
|
250f51b35e | ||
|
|
5b9f282d9f | ||
|
|
8b90831a02 | ||
|
|
b0ff061375 | ||
|
|
5d9e6ed124 | ||
|
|
00effad34c | ||
|
|
832c5336a9 | ||
|
|
f318e71c28 | ||
|
|
2e99ff6d58 | ||
|
|
898b5f3938 | ||
|
|
f14254a4d5 | ||
|
|
c18cdc682b | ||
|
|
2fe31e9edd | ||
|
|
ec6cb36d1e | ||
|
|
7e1284a391 | ||
|
|
d7cf662f96 | ||
|
|
4291d324c6 | ||
|
|
249fbc13c0 | ||
|
|
7f5177ed4e | ||
|
|
39d5ddf175 | ||
|
|
123290c474 | ||
|
|
9c896b7bc0 | ||
|
|
bf338574ce | ||
|
|
75df1ff4f7 | ||
|
|
7424439158 | ||
|
|
f3f677996b | ||
|
|
8b67ea57b1 | ||
|
|
b767c18180 | ||
|
|
ee74168ef8 | ||
|
|
aefa2ec5e2 | ||
|
|
c570c74578 | ||
|
|
c19175b9f2 | ||
|
|
ef80130f13 | ||
|
|
c6d4fb1de8 | ||
|
|
90a62faeb0 | ||
|
|
9dff33822c | ||
|
|
d0fc783754 | ||
|
|
cb6dabae3b | ||
|
|
7b8d7eba31 | ||
|
|
2213ae5db2 | ||
|
|
0ab540e47f | ||
|
|
f6fcf4e5d5 | ||
|
|
cf378990c9 | ||
|
|
bc40b2f87f | ||
|
|
55a5fb8e58 | ||
|
|
300b028d10 | ||
|
|
7cfe98442e | ||
|
|
da56011554 | ||
|
|
1f941759ce | ||
|
|
ffaf02b007 | ||
|
|
3f98ca54c2 | ||
|
|
344f05d20d | ||
|
|
c8732714b8 | ||
|
|
89cb80855a | ||
|
|
f3679a0f9b | ||
|
|
f610efef8d | ||
|
|
b073351872 | ||
|
|
78f79c92a7 | ||
|
|
f677ac4399 | ||
|
|
ffe5a5e6f9 | ||
|
|
a8bb2889cd | ||
|
|
acd15aea0e | ||
|
|
53eec1360a | ||
|
|
e1ecb5ab11 | ||
|
|
d7a903b36f | ||
|
|
2b7a3a9c5e | ||
|
|
7d599b9d13 | ||
|
|
8a215a3169 | ||
|
|
298dc06f9e | ||
|
|
4cd9d5f830 | ||
|
|
eb6780abdd | ||
|
|
7d61f34699 | ||
|
|
88a4647d11 | ||
|
|
3e1cdc2ff4 | ||
|
|
d290131e1e | ||
|
|
1ea20a4ec4 | ||
|
|
870e4b429e | ||
|
|
8c76c41834 | ||
|
|
0ab293b773 | ||
|
|
582232874a | ||
|
|
e8e081bffe | ||
|
|
dcb1faa634 | ||
|
|
81ffef0afb | ||
|
|
4a15be2370 | ||
|
|
35e3b8ccf9 | ||
|
|
5ded47a2d6 | ||
|
|
b44c292ba2 | ||
|
|
1aead2aad8 | ||
|
|
df4dfbc6c3 | ||
|
|
c4a6d3ff09 | ||
|
|
84c557f68d | ||
|
|
f2f3e4cfc4 | ||
|
|
fae748e4f3 | ||
|
|
95487f6816 | ||
|
|
9dc6952a10 | ||
|
|
b720dc4fa2 | ||
|
|
d29c705754 | ||
|
|
531298badf | ||
|
|
fe42262098 | ||
|
|
d410c1b4fd | ||
|
|
f0de88d267 | ||
|
|
f93740da91 | ||
|
|
43b1ebd71b | ||
|
|
a61c6cb203 | ||
|
|
507cfc4977 | ||
|
|
d2a62fb803 | ||
|
|
fd99309949 | ||
|
|
29cca4f160 | ||
|
|
fef97d2e5f | ||
|
|
eb37665e96 | ||
|
|
d87bf8ebad | ||
|
|
937434e90e | ||
|
|
e48b4c59d2 | ||
|
|
5df69a354e | ||
|
|
7dcf21ec15 | ||
|
|
bcc5cc833d | ||
|
|
3a69e724aa | ||
|
|
0b43459f31 | ||
|
|
fb52e4d0a3 | ||
|
|
31d9b759fc | ||
|
|
8d328c5bc5 | ||
|
|
706fdf88e1 | ||
|
|
a6e587c393 | ||
|
|
5cf90f8c14 | ||
|
|
aee9d289de | ||
|
|
bcf27c2f4a | ||
|
|
8dc929bb0e | ||
|
|
8fa603d2a2 | ||
|
|
ff449e7fcf | ||
|
|
f8b3081389 | ||
|
|
ebefc5a519 | ||
|
|
457e6e450d | ||
|
|
09e8c32b21 | ||
|
|
441fccb05b | ||
|
|
287eeee0c2 | ||
|
|
f350466705 | ||
|
|
c3563a8307 | ||
|
|
21e631a334 | ||
|
|
ae4251e207 | ||
|
|
dd5ecb6424 | ||
|
|
25687cc1d4 | ||
|
|
4a85de97af | ||
|
|
91eafc566d | ||
|
|
89194db757 | ||
|
|
44b07bcbd2 | ||
|
|
c431daef74 | ||
|
|
c216ff786e | ||
|
|
040e4902bc | ||
|
|
975214fa37 | ||
|
|
bc995933cc | ||
|
|
bc000bf189 | ||
|
|
7bc328192a | ||
|
|
55e26edce8 | ||
|
|
8ee86bb092 | ||
|
|
3c0134bcf7 | ||
|
|
8fc142a140 | ||
|
|
2e8569fc0a | ||
|
|
b25465cfab | ||
|
|
6f4f0df681 | ||
|
|
b93c4e3c45 | ||
|
|
176256adf6 | ||
|
|
df079a62bf | ||
|
|
0d2f200536 | ||
|
|
9fef71c626 | ||
|
|
95c98e3405 | ||
|
|
4ee89cdf02 | ||
|
|
732ea56049 | ||
|
|
815a2ea3e8 | ||
|
|
2bba3f9e91 | ||
|
|
6c5f4d6ed7 | ||
|
|
4b9696e60d | ||
|
|
7b483098ea | ||
|
|
016a4b2957 | ||
|
|
5b7626090b | ||
|
|
f421387b04 | ||
|
|
16f47a92d2 | ||
|
|
ebf7ee0140 | ||
|
|
2033cbd339 | ||
|
|
98af3e566e | ||
|
|
eba2520ccf | ||
|
|
6425a8c737 | ||
|
|
8b9687db90 | ||
|
|
f6f320a0a6 | ||
|
|
04222b3f89 | ||
|
|
9a52ef4688 | ||
|
|
802c7c7796 | ||
|
|
205d853b7a | ||
|
|
09db8318e1 | ||
|
|
d918650bb7 | ||
|
|
a9b7aea2b8 | ||
|
|
bb1d4f8910 | ||
|
|
69e0812034 | ||
|
|
60c44403f4 | ||
|
|
275d08b2bc | ||
|
|
7d9bea480c | ||
|
|
6c0c8cb70a | ||
|
|
46888a0f7b | ||
|
|
7fa1b448e3 | ||
|
|
e71042d08d | ||
|
|
6aa3caf360 | ||
|
|
96fd15a913 | ||
|
|
f8fe7c549d | ||
|
|
550d4861e2 | ||
|
|
095b00a7c2 | ||
|
|
84318eb6ae | ||
|
|
07bf60674d | ||
|
|
dfbf3101ec | ||
|
|
9524fa9f69 | ||
|
|
e0e7e363b5 | ||
|
|
27e2c052b2 | ||
|
|
facebe550f | ||
|
|
34294c838d | ||
|
|
8079ab0caa | ||
|
|
8f86e60d59 | ||
|
|
6562436063 | ||
|
|
922ce67b1b | ||
|
|
05e0d76e74 | ||
|
|
e36312285c | ||
|
|
e8f0c642bb | ||
|
|
e6b98cb9c6 | ||
|
|
635c16084a | ||
|
|
10014af3ac | ||
|
|
4b1a2882cb | ||
|
|
030f82f5c8 | ||
|
|
2bc0ab2f3b | ||
|
|
dbf3cda58f | ||
|
|
b66f42e2ef | ||
|
|
0764e6a4de | ||
|
|
17a3dcd92b | ||
|
|
551b4358f0 | ||
|
|
90cd4700c8 | ||
|
|
f6d8c0bff7 | ||
|
|
e99192e10e | ||
|
|
c9b7d125e6 | ||
|
|
384991bd52 | ||
|
|
1de68de4ac | ||
|
|
1e6b056a1a | ||
|
|
db62af3694 | ||
|
|
a760d60c84 | ||
|
|
2489a60176 | ||
|
|
5204ffe9ab | ||
|
|
9766bbc53f | ||
|
|
0a9eed9c33 | ||
|
|
0bb738b40d | ||
|
|
e45fc6e21d | ||
|
|
121bd1f432 | ||
|
|
25d90e4f7d | ||
|
|
eb4ad5ab91 | ||
|
|
5d3a0dee89 | ||
|
|
83853fcea6 | ||
|
|
5eee00ef38 | ||
|
|
6af203e776 | ||
|
|
eabc648ccf | ||
|
|
d5a2c8c5a9 | ||
|
|
332c329c4d | ||
|
|
51f2bf4416 | ||
|
|
0ad0013286 | ||
|
|
54734ed30f | ||
|
|
97e12efc1e | ||
|
|
3dcc11f420 | ||
|
|
17745ac8d1 | ||
|
|
2438fe8c9a | ||
|
|
5d238b3146 | ||
|
|
3915af59e5 | ||
|
|
6155ebed77 | ||
|
|
285f56ea46 | ||
|
|
d5f14b4d75 | ||
|
|
3ce0cdfca6 | ||
|
|
21fb6d9e40 | ||
|
|
f820c94929 | ||
|
|
029216ed76 | ||
|
|
fd290a4da8 | ||
|
|
83c685e44f | ||
|
|
22ebec4dad | ||
|
|
5c3d7a3f86 | ||
|
|
e73ab64131 | ||
|
|
1928ef4bd0 | ||
|
|
cece8d39df | ||
|
|
2bc457938c | ||
|
|
b72419181c | ||
|
|
3e383237c1 | ||
|
|
10d7577419 | ||
|
|
8b49a0fcef | ||
|
|
02446b878c | ||
|
|
c575edbb95 | ||
|
|
b0a50e095a | ||
|
|
f22e660e12 | ||
|
|
df124f0e38 | ||
|
|
933f5c0711 | ||
|
|
bcdc0138ce | ||
|
|
3ea8efbb1e | ||
|
|
641cca9369 | ||
|
|
4607e8ff75 | ||
|
|
a9afeadad5 | ||
|
|
a15ca782c2 | ||
|
|
ae57568e65 | ||
|
|
88380be093 | ||
|
|
b7523447f8 | ||
|
|
6e2120b826 | ||
|
|
f515ccf6bd | ||
|
|
5355fa4569 | ||
|
|
48dd7b943a | ||
|
|
301139c7dd | ||
|
|
38c07b7d23 | ||
|
|
4781e6b35c | ||
|
|
0d304e8614 | ||
|
|
87090d734b | ||
|
|
f3ac5ad96f | ||
|
|
d14b99937d | ||
|
|
7c29c7a528 | ||
|
|
481aefee09 | ||
|
|
9f1d5b8713 | ||
|
|
eefa0696cf | ||
|
|
aa9daf26ba | ||
|
|
c8c3fca918 | ||
|
|
a2964f5364 | ||
|
|
0adac494c8 | ||
|
|
21ac12f5da | ||
|
|
1f6649c6af | ||
|
|
87dc6fa4f3 | ||
|
|
4e66fc20f2 | ||
|
|
9abcca9aef | ||
|
|
5847967f06 | ||
|
|
d58df2f090 | ||
|
|
f13981b0ec | ||
|
|
3d7a5db31c | ||
|
|
3cff472202 | ||
|
|
825c38be60 | ||
|
|
2f4ce120ed | ||
|
|
6e6fbfa4d7 | ||
|
|
ac105be89a | ||
|
|
40ec0cf39e | ||
|
|
fb447a7752 | ||
|
|
a8295b71be | ||
|
|
1897ecfce7 | ||
|
|
da410cb37a | ||
|
|
e25ac381aa | ||
|
|
ca9557c6bc | ||
|
|
d72d224b9c | ||
|
|
b3610e98f1 | ||
|
|
ed16e26fe6 | ||
|
|
66e1421ff3 | ||
|
|
c83d1cf671 | ||
|
|
dd8b0b6002 | ||
|
|
fa3fc8b5a0 | ||
|
|
c1da08ea8a | ||
|
|
0583482938 | ||
|
|
8fb9ad75d7 | ||
|
|
edc7ea957c | ||
|
|
d64cf0db79 | ||
|
|
2671f06bb2 | ||
|
|
8a1bc7b5b8 | ||
|
|
6839d635a4 | ||
|
|
8702767b00 | ||
|
|
661820292a | ||
|
|
ff9b4e13f9 | ||
|
|
8ec9b80d7e | ||
|
|
1a9537cd36 | ||
|
|
a90ebe531a | ||
|
|
de83cfa9d5 | ||
|
|
949f46cf32 | ||
|
|
59eb5f8b4a | ||
|
|
d221666d16 | ||
|
|
62c30b376b | ||
|
|
71356a770c | ||
|
|
9ebe3688ef | ||
|
|
089ec6da0a | ||
|
|
f8d8a559d4 | ||
|
|
6961a84e70 | ||
|
|
b2de63251c | ||
|
|
6764cbb270 | ||
|
|
122b39104c | ||
|
|
f796eeebe6 | ||
|
|
2ddd1420e3 | ||
|
|
bbfc8ea599 | ||
|
|
c121884267 | ||
|
|
b822229f6c | ||
|
|
1a1024d4bd | ||
|
|
32b43e8b7a | ||
|
|
d1c9c4f45d | ||
|
|
87c5007e45 | ||
|
|
9f46d81f5c | ||
|
|
b024580bdb | ||
|
|
5bb7dde865 | ||
|
|
c621ab8b0f | ||
|
|
e76f981939 | ||
|
|
a3c2c4d715 | ||
|
|
bffd977310 | ||
|
|
65c1387638 | ||
|
|
896c1d3ed7 | ||
|
|
9007c555a6 | ||
|
|
db58dab06e | ||
|
|
23649dbbdd | ||
|
|
86e5455306 | ||
|
|
44f00c2fae | ||
|
|
367765190e | ||
|
|
beaf595a8f | ||
|
|
5f25754bfd | ||
|
|
daca0f47f3 | ||
|
|
a40463cd1a | ||
|
|
c3a39e0f4f | ||
|
|
dc43d675db | ||
|
|
8633a15bbe | ||
|
|
bb4a350603 | ||
|
|
3811ca902e | ||
|
|
a43835a8f2 | ||
|
|
0f7dea7c6e | ||
|
|
302f531982 | ||
|
|
a6ccd69204 | ||
|
|
f97eff5ae5 | ||
|
|
20fcdd6c31 | ||
|
|
a5a83185ae | ||
|
|
7dcf573f03 | ||
|
|
f600c779ef | ||
|
|
8583c76bde | ||
|
|
96ecdf7c88 | ||
|
|
c054a72ae3 | ||
|
|
871d89692e | ||
|
|
6373295a4f | ||
|
|
1f00219b7b | ||
|
|
7c56bd019a | ||
|
|
c3e7b0ab82 | ||
|
|
e5d2067588 | ||
|
|
e21046be97 | ||
|
|
ff7dabcdd4 | ||
|
|
1eb284ad7f | ||
|
|
af4864778b | ||
|
|
b654776f10 | ||
|
|
ccb5e5e64f | ||
|
|
06fb051e23 | ||
|
|
d5fe30de90 | ||
|
|
f683d778ff | ||
|
|
b666e37c2d | ||
|
|
23bebb3e38 | ||
|
|
b877401055 | ||
|
|
50bb8a047c | ||
|
|
9ae855a9bf | ||
|
|
2b9fa513fb | ||
|
|
77672472ec | ||
|
|
29ddef0035 | ||
|
|
f23c1b1d93 | ||
|
|
4fea5dee44 | ||
|
|
c3769490f6 | ||
|
|
e48b7116a5 | ||
|
|
ebca18d563 | ||
|
|
992f700943 | ||
|
|
6c94478fc1 | ||
|
|
84c900b66a | ||
|
|
13ff6b7a5f | ||
|
|
70c64000a8 | ||
|
|
635e720181 | ||
|
|
be45e7ac10 | ||
|
|
b06e30edb2 | ||
|
|
2c44834ee8 | ||
|
|
e543478110 | ||
|
|
3bd222b04f | ||
|
|
4ec0af7e8a | ||
|
|
6de02e3cda | ||
|
|
9460eab8f0 | ||
|
|
e94ae76b12 | ||
|
|
09318bdd2e | ||
|
|
ff9e32a5ac | ||
|
|
1f64d8ce71 | ||
|
|
a75d584da0 | ||
|
|
5a05cb15cd | ||
|
|
86bd2daa04 | ||
|
|
9a8459db86 | ||
|
|
2a6992083d | ||
|
|
020974148b | ||
|
|
4244f907e4 | ||
|
|
2da668657d | ||
|
|
33344a2376 | ||
|
|
de1370d719 | ||
|
|
d8f09f625a | ||
|
|
4da7e54d75 | ||
|
|
f84b86e4a4 | ||
|
|
e226860b7a | ||
|
|
91e661ad27 | ||
|
|
dde38bbd67 | ||
|
|
03c161f257 | ||
|
|
120c541ed3 | ||
|
|
a4acad7317 | ||
|
|
3e31df6820 | ||
|
|
ce4596124c | ||
|
|
1ca68fcddc | ||
|
|
ae71d0a12d | ||
|
|
30175f43c5 | ||
|
|
716ca01824 | ||
|
|
1cd7590651 | ||
|
|
9f8c1b03e8 | ||
|
|
eb14050796 | ||
|
|
3c7c538d7c | ||
|
|
1f712ba103 | ||
|
|
dde819c278 | ||
|
|
147deca55d | ||
|
|
bee622e7cc | ||
|
|
3957baaa6f | ||
|
|
75f689ffa9 | ||
|
|
601b90ffd4 | ||
|
|
fc1f573719 | ||
|
|
5e952533d6 | ||
|
|
faf504f2d0 | ||
|
|
7ac471c6f2 | ||
|
|
15020669d9 | ||
|
|
5c9a6edff5 | ||
|
|
8d7572090a | ||
|
|
8b3e64a724 | ||
|
|
e0cf69d6bf | ||
|
|
818982272f | ||
|
|
1a11287dfc | ||
|
|
b3a3c87eba | ||
|
|
cd57178b11 | ||
|
|
7a48bcc228 | ||
|
|
e8e881ff51 | ||
|
|
0272d5ed66 | ||
|
|
da1e965c83 | ||
|
|
e26560188f | ||
|
|
c6140bce49 | ||
|
|
7f520f0b8d | ||
|
|
4364410029 | ||
|
|
fe4c3f6f7d | ||
|
|
eae7513eef | ||
|
|
158cf97bb3 | ||
|
|
429d7e55a2 | ||
|
|
f4b828a3cd | ||
|
|
9c6f602439 | ||
|
|
b030058966 | ||
|
|
c6fc0ad51b | ||
|
|
f9813f1f84 | ||
|
|
d7444ae90c | ||
|
|
8c59b8183a | ||
|
|
507183cf04 | ||
|
|
71ff71d7c1 | ||
|
|
f28ec9c891 | ||
|
|
c746eaf19d | ||
|
|
5a309dca33 | ||
|
|
a65a7c548d | ||
|
|
91e3f9e2da | ||
|
|
943a9d348a | ||
|
|
68e3bbcb37 | ||
|
|
9c9ecad579 | ||
|
|
801d1acaaa | ||
|
|
854336e569 | ||
|
|
5c7044fbdb | ||
|
|
c3ea627d9c | ||
|
|
c44a8cb51a | ||
|
|
b42bc62e9e | ||
|
|
74e301e655 | ||
|
|
81f18ba8a8 | ||
|
|
ac19515895 | ||
|
|
d6f81b64da | ||
|
|
ea87ae0ee8 | ||
|
|
8b5b005a55 | ||
|
|
8d3962b71c | ||
|
|
1a79cd5a94 | ||
|
|
e12e4f7076 | ||
|
|
f55421c0c2 | ||
|
|
4d0c61937c | ||
|
|
cec010c1e7 | ||
|
|
fe06bfd425 | ||
|
|
43182b73a0 | ||
|
|
cf66a18795 | ||
|
|
01f4eb4a21 | ||
|
|
1e23544364 | ||
|
|
71cbc8af6b | ||
|
|
5792d964e7 | ||
|
|
3f0a44cb6a | ||
|
|
c7a6d7cf67 | ||
|
|
c67c2a402e | ||
|
|
61ce4af8b3 | ||
|
|
263b6ba8a7 | ||
|
|
717d826078 | ||
|
|
d560883c6b | ||
|
|
d2c5fbd8c2 | ||
|
|
8cd94b3137 | ||
|
|
3fe46a9f3b | ||
|
|
7a1ffcbd7f | ||
|
|
ba01ad5cf1 | ||
|
|
b561b8394b | ||
|
|
3ca301ddb4 | ||
|
|
e5007a1b8b | ||
|
|
ab562f780b | ||
|
|
64c92fe23e | ||
|
|
45c07ee6b5 | ||
|
|
1ba0c114de | ||
|
|
8e1ae1233b | ||
|
|
396dd54e8e | ||
|
|
6bf8eed171 |
124
CREDIT
124
CREDIT
@@ -1,6 +1,118 @@
|
|||||||
Merci à Trolltech pour la bibliothèque Qt ( http://trolltech.com/ ), sous
|
[en]
|
||||||
licence GNU/GPL.
|
Thanks to Qt Software for their Qt library ( http://www.qtsoftware.com/ ), licensed under GNU/GPL.
|
||||||
Merci à Everaldo Coelho pour le thème d'icônes Crystal SVG (
|
Thanks to Everaldo Coelho for the Crystal SVG icons theme ( http://www.everaldo.com/crystal/ ) licensed under LGPL.
|
||||||
http://www.everaldo.com/crystal/ ) sous licence LGPL, ainsi qu'au projet KDE (
|
Thanks to Nuno Pinheiro for the Oxygen icons theme ( http://www.oxygen-icons.org/ ) licensed under LGPL but also for the QElectroTech-dedicated icons.
|
||||||
http://www.kde.org/ ).
|
Thanks to the KDE project ( http://www.kde.org/ ).
|
||||||
Merci à Loic pour ses explications d'ordre mathématique.
|
Thanks to Loic for his mathematics-related explanations.
|
||||||
|
Thanks to Remi Collet for the Fedora packaging.
|
||||||
|
Thanks to Laurent Trinques for the Debian packaging.
|
||||||
|
Thanks to `trem' for the Mandriva packaging.
|
||||||
|
Thanks to TuxFamily ( http://tuxfamily.org/ ) for hosting the project.
|
||||||
|
Thanks to `Nishiki' for his elements and his support.
|
||||||
|
Thanks to qtcentre.org for their SingleApplication class.
|
||||||
|
Thanks to Alfredo Carreto for his Spanish translations and fixing Spanish translations ( http://electronicosmx.comxa.com )
|
||||||
|
Thanks to 'Dr.Slump' for his Italian translations
|
||||||
|
|
||||||
|
[fr]
|
||||||
|
Merci à Qt Software pour la bibliothèque Qt ( http://www.qtsoftware.com/ ), sous licence GNU/GPL.
|
||||||
|
Merci à Everaldo Coelho pour le thème d'icônes Crystal SVG ( http://www.everaldo.com/crystal/ ) sous licence LGPL.
|
||||||
|
Merci à Nuno Pinheiro pour le thème d'icônes Oxygen ( http://www.oxygen-icons.org/ ) sous licence LGPL mais aussi pour les icônes dédiées à QElectroTech
|
||||||
|
Merci au projet KDE ( http://www.kde.org/ ).
|
||||||
|
Merci à Loic pour ses explications d'ordre mathématique.
|
||||||
|
Merci à Remi Collet pour les paquets Fedora.
|
||||||
|
Merci à Laurent Trinques pour les paquets Debian.
|
||||||
|
Merci à `trem' pour les paquets Mandriva.
|
||||||
|
Merci à TuxFamily ( http://tuxfamily.org/ ) pour l'hébergement du projet.
|
||||||
|
Merci à `Nishiki' pour ses éléments et son soutien.
|
||||||
|
Merci à qtcentre.org pour leur classe SingleApplication.
|
||||||
|
Merci à Alfredo Carreto pour ses traductions et corrections en espagnol ( http://electronicosmx.comxa.com )
|
||||||
|
Merci à 'Dr.Slump' pour ses traductions en italien
|
||||||
|
|
||||||
|
[ru]
|
||||||
|
Спасибо Qt Software за их библиотеку Qt ( http://www.qtsoftware.com/ ), лицензированную на условиях GNU/GPL.
|
||||||
|
Спасибо Everaldo Coelho за тему значков Crystal SVG ( http://www.everaldo.com/crystal/ ) лицензированную на условиях LGPL.
|
||||||
|
Спасибо Nuno Pinheiro за тему значков Oxygen ( http://www.oxygen-icons.org/ ) лицензированную на условиях LGPL, а также за значки связанные с QElectroTech.
|
||||||
|
Спасибо проекту KDE ( http://www.kde.org/ ).
|
||||||
|
Спасибо Loic за объяснения связанные с математикой.
|
||||||
|
Спасибо Remi Collet за пакет для Fedora.
|
||||||
|
Спасибо Laurent Trinques за пакет для Debian.
|
||||||
|
Спасибо `trem' за пакет для Mandriva.
|
||||||
|
Спасибо TuxFamily ( http://tuxfamily.org/ ) за хостинг для проекта.
|
||||||
|
Спасибо `Nishiki' за элементы и поддержку.
|
||||||
|
Спасибо qtcentre.org за их класс SingleApplication.
|
||||||
|
Спасибо Alfredo Carreto за исправления и перевод на испанский ( http://electronicosmx.comxa.com )
|
||||||
|
Спасибо 'Dr.Slump' за исправления и перевод
|
||||||
|
|
||||||
|
[pt]
|
||||||
|
Agradecimentos a Qt Software pela sua biblioteca Qt ( http://www.qtsoftware.com/ ), licenciada de acordo com a GNU/GPL.
|
||||||
|
Agradecimentos a Everaldo Coelho pelo tema de ícones Crystal SVG ( http://www.everaldo.com/crystal/ ), licenciado de acordo com a LGPL.
|
||||||
|
Agradecimentos a Nuno Pinheiro pelo tema de ícones Oxygen e em especial pelos ícones dedicados ao programa QElectroTech ( http://www.oxygen-icons.org/ ), lincenciado de acordo com a LGPL.
|
||||||
|
Agradecimentos ao projecto KDE ( http://www.kde.org/ ).
|
||||||
|
Agradecimentos a Loic pelas suas explicações relacionadas com problemas matemáticos.
|
||||||
|
Agradecimentos a Remi Collet pela criação dos pacotes para Fedora.
|
||||||
|
Agradecimentos a Laurent Trinques pela criação dos pacotes para Debian.
|
||||||
|
Agradecimentos a "trem" pela criação dos pacotes para Mandriva.
|
||||||
|
Agradecimentos a TuxFamily ( http://tuxfamily.org/ ) por albergarem este projecto.
|
||||||
|
Agradecimentos a "Nishiki" pela criação de elementos e o seu suporte.
|
||||||
|
Agradecimentos a qtcentre.org pela classe SingleApplication.
|
||||||
|
Agradecimentos a Alfredo Carreto pela tradução para Espanhol e pela correcção de traduções em Espanhol ( http://electronicosmx.comxa.com ).
|
||||||
|
Agradecimentos a 'Dr.Slump'pela tradução para italiano
|
||||||
|
|
||||||
|
[es]
|
||||||
|
Agradecimientos a Qt Software por su biblioteca Qt ( http://www.qtsoftware.com/ ), licenciada bajo GNU/GPL.
|
||||||
|
Agradecimientos a Everaldo Coelho por el tema de icónos Crystal SVG ( http://www.everaldo.com/crystal/ ), licenciado bajo LGPL.
|
||||||
|
Agradecimientos a Nuno Pinheiro por el tema de icónos Oxygen y especialmente por los icónos dedicados al programa QElectroTech ( http://www.oxygen-icons.org/ ), licenciado bajo LGPL.
|
||||||
|
Agradecimientos al proyecto KDE ( http://www.kde.org/ ).
|
||||||
|
Agradecimientos a Loic por sus explicaciones relacionadas con problemas matemáticos.
|
||||||
|
Agradecimientos a Remi Collet por criación de paquetes para Fedora.
|
||||||
|
Agradecimientos a Laurent Trinques por la creación de paquetes para Debian.
|
||||||
|
Agradecimientos a "trem" por creación de paquetes para Mandriva.
|
||||||
|
Agradecimientos a TuxFamily ( http://tuxfamily.org/ ) por el alojamiento de este proyecto.
|
||||||
|
Agradecimientos a "Nishiki" por creación de elementos e de su suporte.
|
||||||
|
Agradecimientos a qtcentre.org por classe SingleApplication.
|
||||||
|
Agradecimientos a Alfredo Carreto por sus traducciones en español y correcciones de traducción en español ( http://electronicosmx.comxa.com)
|
||||||
|
Agradecimientos a 'Dr.Slump' por sus traducciones en italiano
|
||||||
|
|
||||||
|
[cs]
|
||||||
|
Díky Qt Software za jejich knihovnu Qt ( http://www.qtsoftware.com/ ), pod licencí GNU/GPL.
|
||||||
|
Díky Everaldovi Coelho za téma Crystal SVG icons theme ( http://www.everaldo.com/crystal/ ) pod licencí LGPL.
|
||||||
|
Díky Nunovi Pinheirovi za téma ikon Oxygen ( http://www.oxygen-icons.org/ ) pod licencí LGPL ale také za ikony věnované QElectroTech.
|
||||||
|
Díky projektu KDE ( http://www.kde.org/ ).
|
||||||
|
Díky Loicovi za jeho vysvětlení vztahující se k matematice.
|
||||||
|
Díky Remi Colletovi za balíček pro Fedoru.
|
||||||
|
Díky Laurentu Trinquesovi za balíček pro Debian.
|
||||||
|
Díky `trem' za balíček pro Mandrivu.
|
||||||
|
Díky TuxFamily ( http://tuxfamily.org/ ) za poskytování hostingu pro projekt.
|
||||||
|
Díky `Nishiki' za jeho prvky a jeho podporu.
|
||||||
|
Díky qtcentre.org za jejich třídu SingleApplication.
|
||||||
|
Poděkování Alfredovi Carretovi za jeho španělský překlad a opravy španělského překladu ( http://electronicosmx.comxa.com )
|
||||||
|
Dìky 'Dr.Slump' za jeho italianský překlad
|
||||||
|
|
||||||
|
[pl]
|
||||||
|
Podziękowania dla Qt Software, za biblioteki Qt (http://www.qtsoftware.com/) na licencji GNU / GPL.
|
||||||
|
Podziękowania dla Everaldo Coelho, za ikony Crystal SVG (http://www.everaldo.com/crystal/) na licencji LGPL.
|
||||||
|
Podziękowania dla Nun Pinheiro, za ikony Oxygen (http://www.oxygen-icons.org/) na licencji LGPL, a także za ikony przeznaczone do projektu QElectroTech.
|
||||||
|
Podziękowania dla projektu KDE (http://www.kde.org/).
|
||||||
|
Podziękowania dla Loic, za pomoc w rozwiązaniu problemów matematycznych.
|
||||||
|
Podziękowania dla Remi Collet, za pakiety dla Fedory.
|
||||||
|
Podziękowania dla Laurent Trinquesovi, za pakiety dla Debiana.
|
||||||
|
Podziękowania dla "trem", za pakiety dla Mandrivy.
|
||||||
|
Podziękowania dla TuxFamily (http://tuxfamily.org/), za organizację projektu.
|
||||||
|
Podziękowanie dla "Nishiki", zajego elementy i poparcie.
|
||||||
|
Podziękowania dla qtcentre.org, za klasę SingleApplication.
|
||||||
|
Podziękowania dla Alfredo Carreto, za jego tłumaczenie na język hiszpański i korektę ( http://electronicosmx.comxa.com)
|
||||||
|
|
||||||
|
[it]
|
||||||
|
Grazie a Qt Software per le loro librerie Qt( http://www.qtsoftware.com/ ), licenzate sotto GNU/GPL.
|
||||||
|
Grazie a Everaldo Coelho per il tema icone Crystal SVG ( http://www.everaldo.com/crystal/ ) licenzato sotto LGPL.
|
||||||
|
Grazie a Nuno Pinheiro per il tema icone Oxygen ( http://www.oxygen-icons.org/ ) licenzatosotto LGPL ma anche perle icone dedicate a QElectroTech.
|
||||||
|
Grazie al progetto KDE ( http://www.kde.org/ ).
|
||||||
|
Grazie a Loic per le sue spiegazioni matematiche.
|
||||||
|
Grazie a Remi Collet per i pacchetti per Fedora.
|
||||||
|
Grazie a Laurent Trinques per i pacchetti per Debian.
|
||||||
|
Grazie a `trem' per i pacchetti per Mandriva.
|
||||||
|
Grazie a TuxFamily ( http://tuxfamily.org/ ) per l'ospitalità al progetto.
|
||||||
|
Grazie a `Nishiki' per i suoi elementi ed il supporto.
|
||||||
|
Grazie a qtcentre.org per la loro classe SingleApplication.
|
||||||
|
Grazie a Alfredo Carreto per le traduzioni e le correzioni in spagnolo ( http://electronicosmx.comxa.com )
|
||||||
|
Grazie al'Dr.Slump' per la traduzione in italiano.
|
||||||
|
|||||||
86
ChangeLog
Normal file
86
ChangeLog
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
====== Changelog 0.11 -> 0.2 ======
|
||||||
|
À partir de la version 0.2, QElectroTech est disponible en français, anglais, mais aussi :
|
||||||
|
* en espagnol, grâce aux traductions de Youssef ;
|
||||||
|
* en russe, grâce aux traductions de Yuriy ;
|
||||||
|
* en portugais, grâce aux traductions de José.
|
||||||
|
L'application utilise désormais le thème d'icônes Oxygen, réalisé par Nuno Pinheiro pour le projet KDE.
|
||||||
|
|
||||||
|
===== Notion de fichier projet =====
|
||||||
|
Un fichier .qet peut désormais contenir zéro, un ou plusieurs schémas électriques. Les éléments composant ces schémas sont embarqués dans le fichier projet au moment où ils sont posés sur un schéma. Le panel d'éléments affiche donc désormais :
|
||||||
|
* les projets ouverts, avec, sous chaque projet :
|
||||||
|
* les schémas de ce projet,
|
||||||
|
* la collection embarquée du projet (catégories et éléments utilisés dans les schémas)
|
||||||
|
* la collection commune fournie par QET,
|
||||||
|
* et la collection personnelle de l'utilisateur.
|
||||||
|
|
||||||
|
===== Éditeur de schémas =====
|
||||||
|
* Il est désormais possible de déplacer et copier les catégories et éléments par simple glisser-déposer (drag'n drop) dans le panel d'éléments.
|
||||||
|
* La collection embarquée est manipulable au même titre que la collection utilisateur. Les éléments inutilisés dans le projet apparaissent sur fond rouge et un dialogue permet de les purger rapidement.
|
||||||
|
* Chaque projet embarque également (au niveau de ses propriétés) les paramétrages par défaut pour les nouveaux schémas, cartouches et conducteurs.
|
||||||
|
* Il est possible de changer l'ordre des schémas dans le projet en déplaçant les onglets qui les représente. Dans le champ "Folio" des cartouches, on peut se référer à la position du schéma courant ou au nombre total de schémas dans le projet en écrivant respectivement %id et %total.
|
||||||
|
* Lors du chargement d'un fichier .qet, si des éléments ne sont pas trouvés, ils sont remplacés par un élément "fantôme", ce qui évite de perdre certaines informations lors de l'enregistrement du fichier.
|
||||||
|
* Le rendu avec un zoom réduit a été amélioré.
|
||||||
|
* Enfin, le logiciel gère l'ouverture en lecture seule d'un fichier projet.
|
||||||
|
|
||||||
|
==== Impression et export ====
|
||||||
|
|
||||||
|
À partir de la version 0.2, QElectroTech :
|
||||||
|
* propose d'utiliser une imprimante réelle ou bien de générer un document PDF ou PostScript, et ce sous Windows comme sous X11.
|
||||||
|
* génère un aperçu avant l'impression d'un projet. Cet aperçu permet de choisir les options d'impression mais également les schémas à imprimer ou non.
|
||||||
|
|
||||||
|
À noter toutefois une limitation pour les impressions PDF/PS sous Windows : le dialogue de mise en page, permettant de spécifier le format du papier ainsi que ses marges, n'est pas disponible.
|
||||||
|
|
||||||
|
Le dialogue "Exporter" (pour générer un fichier image d'un schéma) a également été refait dans l'optique d'un export simultané de tous les schémas du projet.
|
||||||
|
|
||||||
|
===== Éditeur d'éléments =====
|
||||||
|
|
||||||
|
* Lorsque l'on dessine une ligne dans l'éditeur d'éléments, il est possible de choisir un embout différent pour chaque extrémité, comme par exemple une flèche, un cercle, un carré ou, tout simplement, un bout de ligne normal.
|
||||||
|
* La forme "Rectangle" a été ajoutée.
|
||||||
|
* On peut enregistrer un élément en désignant un fichier (= comportement en 0.11) ou bien en choisissant un élément cible dans une liste reprenant l'arborescence du panel d'éléments.
|
||||||
|
* Si l'on maintient la touche Shift lorsque l'on ajoute une partie (droite, cercle, texte, ...), l'outil en cours est conservé après le dessin. Sinon l'éditeur repasse sur l'outil de sélection.
|
||||||
|
* La grille a été améliorée : sa densité varie en fonction du zoom ; les points correspondant à ceux de la grille de l'éditeur de schémas sont mis en valeur.
|
||||||
|
* L'accrochage à la grille (aka "snap to grid", également connu sous le nom de grille magnétique ou encore grille aimantée) a été ajouté. Le dessin s'y accroche désormais avec une précision de 1px. On peut travailler en coordonnées libres en maintenant la touche Ctrl enfoncée durant le dessin.
|
||||||
|
* Le copier-coller a été implémenté : il est possible de coller :
|
||||||
|
* avec le bouton du milieu de la souris
|
||||||
|
* en choisissant une "zone de collage" sur l'élément (Ctrl+Shift+V)
|
||||||
|
* directement (Ctrl+V) : les parties collées sont placées à côté des parties copiées ; si on recolle les parties, elles sont collées encore un cran à côté, et ce de manière incrémentale.
|
||||||
|
* Des contrôles sont désormais effectués à l'enregistrement : présence de bornes, respect du cadre, etc.
|
||||||
|
* Uniformisation des menus par rapport à l'éditeur de schémas
|
||||||
|
|
||||||
|
====== Changelog 0.1 -> 0.11 ======
|
||||||
|
|
||||||
|
===== Fonctionnalités et interface =====
|
||||||
|
|
||||||
|
* L'application est désormais capable d'ouvrir un fichier élément passe en paramètre
|
||||||
|
* L'application se lance désormais une seule fois par utilisateur
|
||||||
|
* Lors de l'ouverture d'un fichier en dehors de l'application alors que QET est déjà démarré celui-ci essaye de s'afficher ou d'attirer l'attention de l'utilisateur.
|
||||||
|
* L'application vérifie que ce fichier n'est pas déjà ouvert dans tous les éditeurs de schémas / éléments.
|
||||||
|
* Ajout de fichiers permettant d'automatiser les associations de fichiers sous Windows (.bat et .reg) et X11 (.desktop et .xml)
|
||||||
|
* Ajout de menus "Récemment ouverts" pour accéder aux fichiers récents dans les éditeurs de schémas et éléments.
|
||||||
|
* Ajout d'un splash screen
|
||||||
|
* La hauteur du schéma est désormais gérée via un système de lignes, dont le nombre et la hauteur sont ajustables.
|
||||||
|
* Il est également possible d'afficher ou non les en-têtes des lignes et/ou des colonnes.
|
||||||
|
* Ajout d'une option --lang-dir
|
||||||
|
* Ajout d'une description dans le dialogue des options d'impression
|
||||||
|
* Ajout de pages de manuel Unix (`man') en anglais et en français
|
||||||
|
|
||||||
|
===== Corrections de bugs =====
|
||||||
|
|
||||||
|
* Bug #12 : QET provoquait une erreur de segmentation dès son démarrage dans un environnement sans systray
|
||||||
|
* Bug #14 : il manquait un / dans le chemin proposé lors de l'impression vers un PDF
|
||||||
|
* Bug #15 : Mauvais positionnement des champs de texte sur le schéma
|
||||||
|
* Bug #16 : Mauvaise gestion des modifications du texte d'un conducteur
|
||||||
|
* La classe DiagramView écrivait sur la sortie d'erreur sans fin de ligne
|
||||||
|
* L'option --config-dir était mal prise en compte
|
||||||
|
* Après fermeture d'un schema, le menu Fenêtres n'était pas correctement mis à jour
|
||||||
|
* Les textes des éléments, des conducteurs, du cartouche ainsi que les textes indépendants utilisent désormais tous la même police.
|
||||||
|
* Remise à niveau de l'impression suite au passage à Qt 4.4
|
||||||
|
|
||||||
|
===== Code et détails techniques =====
|
||||||
|
|
||||||
|
* Corrections pour que QET compile avec gcc-4.3
|
||||||
|
* Les classes Conductor et Element héritent désormais de QObject (dépendance sur Qt 4.4)
|
||||||
|
* Affinage du constructeur de la classe QETApp
|
||||||
|
* Moins d'avertissements à la compilation (testé avec gcc 4.3)
|
||||||
|
* Moins d'inclusions non pertinentes
|
||||||
|
* Nettoyage du trunk : déplacement des sources dans un sous-répertoire
|
||||||
109
ELEMENTS.LICENSE
Normal file
109
ELEMENTS.LICENSE
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
[en]
|
||||||
|
The elements collection provided along with QElectroTech is provided as is and
|
||||||
|
without any warranty of fitness for your purpose or working.
|
||||||
|
The usage, the modification and the integration of the elements into electric
|
||||||
|
diagrams is allowed without any condition, whatever the final license of the
|
||||||
|
diagrams is.
|
||||||
|
If you redistribute all or a part of the QElectroTech collection, with or
|
||||||
|
without any modification, out of an electric diagram, you must respect the
|
||||||
|
conditions of the CC-BY license:
|
||||||
|
This work is licensed under the Creative Commons Attribution 3.0 License.
|
||||||
|
To view a copy of this license, visit
|
||||||
|
http://creativecommons.org/licenses/by/3.0/ or send a letter to Creative
|
||||||
|
Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
|
||||||
|
|
||||||
|
[fr]
|
||||||
|
La collection d'éléments fournie avec QElectroTech est fournie telle quelle et
|
||||||
|
sans la moindre garantie qu'elle convienne à votre utilisation ou qu'elle
|
||||||
|
fonctionne.
|
||||||
|
L'utilisation, la modification et l'intégration des éléments dans des schémas
|
||||||
|
électriques est autorisée sans condition, quelle que soit la licence finale des
|
||||||
|
schémas.
|
||||||
|
Si vous redistribuez tout ou partie de la collection QElectroTech, avec ou sans
|
||||||
|
modification, en dehors d'un schéma électrique, vous devrez respecter les
|
||||||
|
conditions de la licence CC-BY :
|
||||||
|
Cette création est mise à disposition selon le Contrat Paternité 3.0
|
||||||
|
disponible en ligne http://creativecommons.org/licenses/by/3.0/ ou par
|
||||||
|
courrier postal à Creative Commons, 171 Second Street, Suite 300, San Francisco,
|
||||||
|
California 94105, USA.
|
||||||
|
|
||||||
|
[ru]
|
||||||
|
Коллекция элементов, поставляемая вместе с QElectroTech, поставляется "как есть"
|
||||||
|
и без каких-либо гарантий пригодности для той или иной цели или работы.
|
||||||
|
Использование, изменение и интеграция элементов в электрическую
|
||||||
|
схему разрешается без каких-либо условий, безотносительно конечной лицензии на
|
||||||
|
схему.
|
||||||
|
Если Вы распространяете всю или часть коллекции QElectroTech, с или без
|
||||||
|
изменений, отдельно от электрической схемы, Вы должны соблюдать условия лицензии
|
||||||
|
CC-BY:
|
||||||
|
Эта работа лицензирована на условиях Creative Commons Attribution 3.0 License.
|
||||||
|
Чтобы увидеть копию этой лицензии, посетите
|
||||||
|
http://creativecommons.org/licenses/by/3.0/ или отправте письмо в Creative
|
||||||
|
Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
|
||||||
|
(данный перевод, на русский язык, является вольным и выполнен не юристом!)
|
||||||
|
|
||||||
|
[pt]
|
||||||
|
A colecção de elementos fornecida com o programa QElectroTech é fornecida como é
|
||||||
|
e sem nenhuma garantia da aptidão para o seu uso e sem garantia de que funciona.
|
||||||
|
É permitido, sem condição alguma, qualquer que seja a licença final, usar,
|
||||||
|
editar e incluir estes elementos em esquemas eléctricos.
|
||||||
|
Se você redistribuir uma parte ou toda a colecção de elementos do programa
|
||||||
|
QElectroTech, tendo editado ou não os elementos, sem ser num esquema eléctrico,
|
||||||
|
tem de respeitar as condições da licença CC-BY:
|
||||||
|
Este trabalho está licenciado de acordo com os termos da licença Creative
|
||||||
|
Commons Attribution 3.0 License.
|
||||||
|
Para ver uma cópia da licença visite http://creativecommons.org/licenses/by/3.0/
|
||||||
|
ou envie uma carta para o endereço Creative Commons, 171 Second Street, Suite
|
||||||
|
300, San Francisco, California, 94105, USA.
|
||||||
|
|
||||||
|
[es]
|
||||||
|
La colección de elementos QElectrotech es distruibida tal cual y sin ninguna
|
||||||
|
garantía a la conveniencia de su uso y sin garantía de que funciona.
|
||||||
|
Se permite sin condicione alguna, cualquiera que sea la licencia final, usar,
|
||||||
|
editar, e incluir estos elementos en esquemas eléctricos.
|
||||||
|
Si usted redistribuye una parte de la colección o toda la collección de
|
||||||
|
QElectrotech, con o sin ediciones, fuera de un esquema eléctrico, tiene que
|
||||||
|
respetar las condiciones de la licencia CC-BY:
|
||||||
|
Esta obra está bajo una licencia Reconocimiento 3.0 de Creative Commons.
|
||||||
|
Para ver una copia de esta licencia, visite
|
||||||
|
http://creativecommons.org/licenses/by/3.0/ o envie una carta a Creative
|
||||||
|
Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.
|
||||||
|
|
||||||
|
[cs]
|
||||||
|
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.
|
||||||
|
Používání, úpravy a začlenění prvků do nákresů elektrických
|
||||||
|
obvodů se povoluje bez jakýchkoli podmínek, cokoli je konečná licence nákresu.
|
||||||
|
Pokud rozdáte celou nebo část ze sbírky QElectroTechu, s nebo bez
|
||||||
|
jakýchkoli úprav, mimo elektrický nákres, musíte brát ohledy na podmínky
|
||||||
|
licence CC-BY:
|
||||||
|
tato práce je licencována pod licencí Creative Commons Attribution 3.0 License.
|
||||||
|
Kopii této licence si můžete prohlédnout, navštivte
|
||||||
|
http://creativecommons.org/licenses/by/3.0/ nebo pošlete dopis Creative
|
||||||
|
Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
|
||||||
|
|
||||||
|
[pl]
|
||||||
|
Biblioteka elementów dostarczana wraz z QElectroTech jest w formie "taka jaka jest",
|
||||||
|
bez żadnych gwarancji przydatności.
|
||||||
|
Dozwolona jest edycja, modyfikacja i użytkowanie elementów bez żadnych warunków
|
||||||
|
i bez względu na końcową licencję tworzonych schematów.
|
||||||
|
W przypadku wykorzystywania całości lub części biblioteki elementów QElectroTech
|
||||||
|
do innych celów niż tworzenie schematów elektrycznych, należy przestrzegać
|
||||||
|
warunków licencji CC-BY:
|
||||||
|
Niniejsza praca jest licencjonowana na zasadach Creative Commons Attribution 3.0 License.
|
||||||
|
Aby zobaczyć kopię licencji, należy odwiedzić stronę internetową:
|
||||||
|
http://creativecommons.org/licenses/by/3.0/ lub wysłać list do Creative
|
||||||
|
Commons, 171 Second Street, Suite 300, San Francisco, Kalifornia 94105, USA.
|
||||||
|
|
||||||
|
[it]
|
||||||
|
La collezione di elementi che si trova in QElectroTech è fornita così com'è
|
||||||
|
senza alcuna garanzia di usabilità o funzionamento.
|
||||||
|
L'uso, la modifica e l'integrazione degli elementi negli schemi elettrici
|
||||||
|
è permessa senza condizioni, qualunque si ala licenza dello schema finale.
|
||||||
|
Distribuendo tutto o parte della collezione di QElettroTech, con o senza
|
||||||
|
modifiche, fuori da uno schema elettrico, bisogna rispettare le condizioni
|
||||||
|
della licenza CC-BY:
|
||||||
|
Questo lavoro è licenziato sotto la Licenza Creative Commons 3.0.
|
||||||
|
Per vedere una copia di questa licenza, visitate il sito
|
||||||
|
http://creativecommons.org/licenses/by/3.0/ o inviate una lettera a Creative
|
||||||
|
Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
|
||||||
87
INSTALL
Normal file
87
INSTALL
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
[en]
|
||||||
|
Requirements :
|
||||||
|
libQt4 (see packages libqt4*)
|
||||||
|
cupsys-bsd for printing
|
||||||
|
|
||||||
|
Howto compile :
|
||||||
|
$ qmake (qmake-qt4 for Debian-based systems)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[fr]
|
||||||
|
Pré-requis :
|
||||||
|
libQt4 (paquets libqt4*)
|
||||||
|
cupsys-bsd pour l'impression
|
||||||
|
|
||||||
|
Comment compiler :
|
||||||
|
$ qmake (qmake-qt4 pour les systèmes basés sur Debian)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[ru]
|
||||||
|
Зависимости:
|
||||||
|
libQt4 (пакет libqt4*)
|
||||||
|
cupsys-bsd для печати
|
||||||
|
|
||||||
|
Как компилировать?:
|
||||||
|
$ qmake (qmake-qt4 для систем основанных на Debian)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[pt]
|
||||||
|
Dependências:
|
||||||
|
libQt4 (ver pacotes libqt4*)
|
||||||
|
cupsys-bsd para impressão
|
||||||
|
|
||||||
|
Como compilar:
|
||||||
|
$ qmake (qmake-qt4 para sistemas baseados em Debian)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[es]
|
||||||
|
Dependencias:
|
||||||
|
libQt4 (paquetes libqt4*)
|
||||||
|
cupsys-bsd para imprimir
|
||||||
|
|
||||||
|
Cómo compilar:
|
||||||
|
$ qmake (qmake-qt4 para los sistemas basados en Debian)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[cs]
|
||||||
|
Požadavky :
|
||||||
|
libQt4 (viz balíček libqt4*)
|
||||||
|
cupsys-bsd kvůli tisku
|
||||||
|
|
||||||
|
Jak program sestavit :
|
||||||
|
$ qmake (qmake-qt4 u systémů založených na Debianu)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[pl]
|
||||||
|
Zależności:
|
||||||
|
libQt4 (pakiety libqt4 *)
|
||||||
|
cupsys-bsd do druku
|
||||||
|
|
||||||
|
Sposób kompilacji:
|
||||||
|
$ qmake (qmake-qt4 dla systemów opartych na Debianie)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[it]
|
||||||
|
Dipendenze:
|
||||||
|
libQt4 (vedi pacchetti libqt4*)
|
||||||
|
cupsys-bsd per la stampa
|
||||||
|
|
||||||
|
Come compilare:
|
||||||
|
$ qmake (qmake-qt4 per sistemi basati su Debian)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
31
README
Normal file
31
README
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
[en]
|
||||||
|
QElectroTech is a Qt4 application to design electric diagrams.
|
||||||
|
It uses XML files for elements and diagrams, and includes both a diagram editor and an element editor.
|
||||||
|
|
||||||
|
[fr]
|
||||||
|
QElectroTech est une application Qt4 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 ainsi qu'un éditeur d'élément.
|
||||||
|
|
||||||
|
[ru]
|
||||||
|
QElectroTech - приложение написанное на Qt4 и предназначенное для разработки электрических схем.
|
||||||
|
Оно использует XML-файлы для элементов и схем, и включает, как редактор схем, так и редактор элементов.
|
||||||
|
|
||||||
|
[pt]
|
||||||
|
QElectroTech é uma aplicação baseada em Qt4 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.
|
||||||
|
|
||||||
|
[es]
|
||||||
|
QElectroTech es una aplicación Qt4 para diseñar esquemas eléctricos.
|
||||||
|
Utiliza archivos XML para los elementos y esquemas, e incluye un editor de esquemas y un editor de elemento.
|
||||||
|
|
||||||
|
[cs]
|
||||||
|
QElectroTech je aplikací Qt4 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ů.
|
||||||
|
|
||||||
|
[pl]
|
||||||
|
QElectroTech to aplikacja napisana w Qt4, przeznaczona do tworzenia schematów elektrycznych.
|
||||||
|
Wykorzystuje XML do zapisywania plików elementów i projektów. Posiada edytor schematów i elementów.
|
||||||
|
|
||||||
|
[it]
|
||||||
|
QElectroTech è una applicazione fatta in Qt4 per disegnare schemi elettrici.
|
||||||
|
QET usa il formato XML per i suoi elementi e schemi, includendo anche un editor per gli stessi.
|
||||||
138
aboutqet.cpp
138
aboutqet.cpp
@@ -1,138 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "aboutqet.h"
|
|
||||||
#include "qet.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param parent Le QWidget parent de la boite de dialogue
|
|
||||||
*/
|
|
||||||
AboutQET::AboutQET(QWidget *parent) : QDialog(parent) {
|
|
||||||
// Titre, taille, comportement...
|
|
||||||
setWindowTitle(tr("\300 propos de QElectrotech"));
|
|
||||||
setMinimumWidth(680);
|
|
||||||
setMinimumHeight(350);
|
|
||||||
setModal(true);
|
|
||||||
|
|
||||||
// Trois onglets
|
|
||||||
QTabWidget *onglets = new QTabWidget(this);
|
|
||||||
onglets -> addTab(ongletAPropos(), tr("\300 &propos"));
|
|
||||||
onglets -> addTab(ongletAuteurs(), tr("A&uteurs"));
|
|
||||||
onglets -> addTab(ongletLicence(), tr("&Accord de licence"));
|
|
||||||
|
|
||||||
// Un bouton pour fermer la boite de dialogue
|
|
||||||
QDialogButtonBox *boutons = new QDialogButtonBox(QDialogButtonBox::Close);
|
|
||||||
connect(boutons, SIGNAL(accepted()), this, SLOT(accept()));
|
|
||||||
connect(boutons, SIGNAL(rejected()), this, SLOT(accept()));
|
|
||||||
|
|
||||||
// Le tout dans une disposition verticale
|
|
||||||
QVBoxLayout *disposition = new QVBoxLayout();
|
|
||||||
disposition -> addWidget(titre());
|
|
||||||
disposition -> addWidget(onglets);
|
|
||||||
disposition -> addWidget(boutons);
|
|
||||||
setLayout(disposition);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Destructeur
|
|
||||||
*/
|
|
||||||
AboutQET::~AboutQET() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return Le titre QElectroTech avec son icone
|
|
||||||
*/
|
|
||||||
QWidget *AboutQET::titre() const {
|
|
||||||
QWidget *icone_et_titre = new QWidget();
|
|
||||||
// icone
|
|
||||||
QLabel *icone = new QLabel();
|
|
||||||
icone -> setPixmap(QIcon(":/ico/qelectrotech.png").pixmap(48, 48));
|
|
||||||
// label "QElectroTech"
|
|
||||||
QLabel *titre = new QLabel("<span style=\"font-weight:0;font-size:16pt;\">QElectroTech v" + QET::version + "</span>");
|
|
||||||
titre -> setTextFormat(Qt::RichText);
|
|
||||||
// le tout dans une grille
|
|
||||||
QGridLayout *dispo_horiz = new QGridLayout();
|
|
||||||
dispo_horiz -> addWidget(icone, 0, 0);
|
|
||||||
dispo_horiz -> addWidget(titre, 0, 1);
|
|
||||||
dispo_horiz -> setColumnStretch(0, 1);
|
|
||||||
dispo_horiz -> setColumnStretch(1, 100);
|
|
||||||
icone_et_titre -> setLayout(dispo_horiz);
|
|
||||||
return(icone_et_titre);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return Le widget contenu par l'onglet « A propos »
|
|
||||||
*/
|
|
||||||
QWidget *AboutQET::ongletAPropos() const {
|
|
||||||
QLabel *apropos = new QLabel(
|
|
||||||
tr("QElectroTech, une application de r\351alisation de sch\351mas \351lectriques.") +
|
|
||||||
"<br><br>" +
|
|
||||||
tr("\251 2006-2007 Les d\351veloppeurs de QElectroTech") +
|
|
||||||
"<br><br>"
|
|
||||||
"<a href=\"http://qelectrotech.tuxfamily.org/\">"
|
|
||||||
"http://qelectrotech.tuxfamily.org/</a>"
|
|
||||||
);
|
|
||||||
apropos -> setAlignment(Qt::AlignCenter);
|
|
||||||
apropos -> setOpenExternalLinks(true);
|
|
||||||
apropos -> setTextFormat(Qt::RichText);
|
|
||||||
return(apropos);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return Le widget contenu par l'onglet « Auteurs »
|
|
||||||
*/
|
|
||||||
QWidget *AboutQET::ongletAuteurs() const {
|
|
||||||
QLabel *auteurs = new QLabel(
|
|
||||||
"<span style=\"text-decoration: underline;\">" +
|
|
||||||
tr("Id\351e originale") +
|
|
||||||
"</span> : Beno\356t Ansieau "
|
|
||||||
"<<a href=\"mailto:benoit.ansieau@gmail.com\">"
|
|
||||||
"benoit.ansieau@gmail.com</a>>"
|
|
||||||
"<br><br>"
|
|
||||||
"<span style=\"text-decoration: underline;\">" +
|
|
||||||
tr("Programmation") +
|
|
||||||
"</span> : Xavier Guerrin "
|
|
||||||
"<<a href=\"mailto:xavier.guerrin@gmail.com\">"
|
|
||||||
"xavier.guerrin@gmail.com</a>>"
|
|
||||||
);
|
|
||||||
auteurs -> setAlignment(Qt::AlignCenter);
|
|
||||||
auteurs -> setOpenExternalLinks(true);
|
|
||||||
auteurs -> setTextFormat(Qt::RichText);
|
|
||||||
return(auteurs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return Le widget contenu par l'onglet « Accord de Licence »
|
|
||||||
*/
|
|
||||||
QWidget *AboutQET::ongletLicence() const {
|
|
||||||
QWidget *licence = new QWidget();
|
|
||||||
// label
|
|
||||||
QLabel *titre_licence = new QLabel(tr("Ce programme est sous licence GNU/GPL."));
|
|
||||||
|
|
||||||
// texte de la GNU/GPL dans une zone de texte scrollable non editable
|
|
||||||
QTextEdit *texte_licence = new QTextEdit();
|
|
||||||
texte_licence -> setPlainText(QET::license());
|
|
||||||
texte_licence -> setReadOnly(true);
|
|
||||||
|
|
||||||
// le tout dans une disposition verticale
|
|
||||||
QVBoxLayout *dispo_licence = new QVBoxLayout();
|
|
||||||
dispo_licence -> addWidget(titre_licence);
|
|
||||||
dispo_licence -> addWidget(texte_licence);
|
|
||||||
licence -> setLayout(dispo_licence);
|
|
||||||
return(licence);
|
|
||||||
}
|
|
||||||
231
borderinset.cpp
231
borderinset.cpp
@@ -1,231 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "borderinset.h"
|
|
||||||
#include "qetapp.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur simple : construit une bordure de 15 colonnes de 50x500 avec
|
|
||||||
un cartouche de 400x50.
|
|
||||||
@param parent QObject parent de ce BorderInset
|
|
||||||
*/
|
|
||||||
BorderInset::BorderInset(QObject *parent) : QObject(parent) {
|
|
||||||
nb_columns = qMax(3, QETApp::settings().value("diagrameditor/defaultcols", 15).toInt());
|
|
||||||
min_nb_columns = 3;
|
|
||||||
columns_width = QETApp::settings().value("diagrameditor/defaultcolsize", 50.0).toDouble();
|
|
||||||
columns_height = QETApp::settings().value("diagrameditor/defaultheight", 500.0).toDouble();
|
|
||||||
min_columns_height = 80.0;
|
|
||||||
inset_width = nb_columns * columns_width;
|
|
||||||
inset_height = 50.0;
|
|
||||||
columns_header_height = 20.0;
|
|
||||||
display_inset = true;
|
|
||||||
display_columns = true;
|
|
||||||
display_border = true;
|
|
||||||
updateRectangles();
|
|
||||||
|
|
||||||
bi_author = QETApp::settings().value("diagrameditor/defaultauthor").toString();
|
|
||||||
bi_title = QETApp::settings().value("diagrameditor/defaulttitle").toString();
|
|
||||||
bi_folio = QETApp::settings().value("diagrameditor/defaultfolio").toString();
|
|
||||||
bi_filename = QETApp::settings().value("diagrameditor/defaultfilename").toString();
|
|
||||||
QString settings_date = QETApp::settings().value("diagrameditor/defaultdate").toString();
|
|
||||||
if (settings_date == "now") bi_date = QDate::currentDate();
|
|
||||||
else if (settings_date.isEmpty() || settings_date == "null") bi_date = QDate();
|
|
||||||
else bi_date = QDate::fromString(settings_date, "yyyyMMdd");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Destructeur - ne fait rien
|
|
||||||
*/
|
|
||||||
BorderInset::~BorderInset() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Methode recalculant les rectangles composant le cadre et le cartouche en
|
|
||||||
fonction des attributs de taille
|
|
||||||
*/
|
|
||||||
void BorderInset::updateRectangles() {
|
|
||||||
// rectangle delimitant le schema
|
|
||||||
QRectF previous_border = border;
|
|
||||||
border = QRectF(0, 0, nb_columns * columns_width, columns_height);
|
|
||||||
if (border != previous_border) emit(borderChanged(previous_border, border));
|
|
||||||
|
|
||||||
// rectangles relatifs au cartouche
|
|
||||||
inset = QRectF(border.bottomLeft().x(), border.bottomLeft().y(), inset_width, inset_height);
|
|
||||||
inset_author = QRectF(inset.topLeft(), QSizeF(2.0 * inset_width / 9.0, 0.5 * inset_height));
|
|
||||||
inset_date = QRectF(inset_author.bottomLeft(), inset_author.size());
|
|
||||||
inset_title = QRectF(inset_author.topRight(), QSizeF(5.0 * inset_width / 9.0, inset_height));
|
|
||||||
inset_file = QRectF(inset_title.topRight(), inset_author.size());
|
|
||||||
inset_folio = QRectF(inset_file.bottomLeft(), inset_author.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Dessine le cadre et le cartouche
|
|
||||||
@param qp QPainter a utiliser pour dessiner le cadre et le cartouche
|
|
||||||
@param x Abscisse du cadre
|
|
||||||
@param y Ordonnee du cadre
|
|
||||||
*/
|
|
||||||
void BorderInset::draw(QPainter *qp, qreal x, qreal y) {
|
|
||||||
// translate tous les rectangles
|
|
||||||
border .translate(x, y);
|
|
||||||
inset .translate(x, y);
|
|
||||||
inset_author.translate(x, y);
|
|
||||||
inset_date .translate(x, y);
|
|
||||||
inset_title .translate(x, y);
|
|
||||||
inset_file .translate(x, y);
|
|
||||||
inset_folio .translate(x, y);
|
|
||||||
|
|
||||||
// prepare le QPainter
|
|
||||||
qp -> save();
|
|
||||||
qp -> setPen(Qt::black);
|
|
||||||
qp -> setBrush(Qt::NoBrush);
|
|
||||||
|
|
||||||
// dessine le cadre
|
|
||||||
if (display_border) qp -> drawRect(border);
|
|
||||||
|
|
||||||
// dessine la numerotation des colonnes
|
|
||||||
if (display_columns) {
|
|
||||||
qp -> setBrush(Qt::white);
|
|
||||||
for (int i = 1 ; i <= nb_columns ; ++ i) {
|
|
||||||
QRectF numbered_rectangle = QRectF(
|
|
||||||
border.topLeft().x() + ((i - 1) * columns_width),
|
|
||||||
border.topLeft().y(),
|
|
||||||
columns_width,
|
|
||||||
columns_header_height
|
|
||||||
);
|
|
||||||
qp -> drawRect(numbered_rectangle);
|
|
||||||
qp -> drawText(numbered_rectangle, Qt::AlignVCenter | Qt::AlignCenter, QString("%1").arg(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// dessine le cartouche
|
|
||||||
if (display_inset) {
|
|
||||||
qp -> setBrush(Qt::white);
|
|
||||||
qp -> drawRect(inset);
|
|
||||||
|
|
||||||
qp -> drawRect(inset_author);
|
|
||||||
qp -> drawText(inset_author, Qt::AlignVCenter | Qt::AlignLeft, tr(" Auteur : ") + bi_author);
|
|
||||||
|
|
||||||
qp -> drawRect(inset_date);
|
|
||||||
qp -> drawText(inset_date, Qt::AlignVCenter | Qt::AlignLeft, tr(" Date : ") + bi_date.toString("dd/MM/yyyy"));
|
|
||||||
|
|
||||||
qp -> drawRect(inset_title);
|
|
||||||
qp -> drawText(inset_title, Qt::AlignVCenter | Qt::AlignCenter, tr("Titre du document : ") + bi_title);
|
|
||||||
|
|
||||||
qp -> drawRect(inset_file);
|
|
||||||
qp -> drawText(inset_file, Qt::AlignVCenter | Qt::AlignLeft, tr(" Fichier : ") + bi_filename);
|
|
||||||
|
|
||||||
qp -> drawRect(inset_folio);
|
|
||||||
qp -> drawText(inset_folio, Qt::AlignVCenter | Qt::AlignLeft, tr(" Folio : ") + bi_folio);
|
|
||||||
}
|
|
||||||
|
|
||||||
qp -> restore();
|
|
||||||
|
|
||||||
// annule la translation des rectangles
|
|
||||||
border .translate(-x, -y);
|
|
||||||
inset .translate(-x, -y);
|
|
||||||
inset_author.translate(-x, -y);
|
|
||||||
inset_date .translate(-x, -y);
|
|
||||||
inset_title .translate(-x, -y);
|
|
||||||
inset_file .translate(-x, -y);
|
|
||||||
inset_folio .translate(-x, -y);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Ajoute une colonne.
|
|
||||||
*/
|
|
||||||
void BorderInset::addColumn() {
|
|
||||||
++ nb_columns;
|
|
||||||
setInsetWidth(nb_columns * columns_width);
|
|
||||||
updateRectangles();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Enleve une colonne. Il doit rester au moins 3 colonnes.
|
|
||||||
*/
|
|
||||||
void BorderInset::removeColumn() {
|
|
||||||
if (nb_columns == min_nb_columns) return;
|
|
||||||
-- nb_columns;
|
|
||||||
setInsetWidth(nb_columns * columns_width);
|
|
||||||
updateRectangles();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Permet de changer le nombre de colonnes.
|
|
||||||
Si ce nombre de colonnes est inferieur au minimum requis, cette fonction ne
|
|
||||||
fait rien
|
|
||||||
@param nb_c nouveau nombre de colonnes
|
|
||||||
@see minNbColumns()
|
|
||||||
*/
|
|
||||||
void BorderInset::setNbColumns(int nb_c) {
|
|
||||||
if (nb_c < min_nb_columns) return;
|
|
||||||
nb_columns = nb_c;
|
|
||||||
setInsetWidth(nb_columns * columns_width);
|
|
||||||
updateRectangles();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Change la largeur des colonnes ; celle-ci doit rester comprise entre 10 et
|
|
||||||
200px.
|
|
||||||
*/
|
|
||||||
void BorderInset::setColumnsWidth(const qreal &new_cw) {
|
|
||||||
columns_width = qBound(10.0, new_cw, 200.0);
|
|
||||||
updateRectangles();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Change la hauteur des en-tetes contenant les numeros de colonnes. Celle-ci
|
|
||||||
doit rester comprise entre 5 et 50 px.
|
|
||||||
*/
|
|
||||||
void BorderInset::setColumnsHeaderHeight(const qreal &new_chh) {
|
|
||||||
columns_header_height = qBound(5.0, new_chh, 50.0);
|
|
||||||
updateRectangles();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Change la hauteur des colonnes (et donc du cadre). Cette hauteur doit
|
|
||||||
rester superieure a la hauteur des en-tetes de colonnes + 20px.
|
|
||||||
*/
|
|
||||||
void BorderInset::setColumnsHeight(const qreal &new_ch) {
|
|
||||||
columns_height = qMax(columns_header_height + min_columns_height, new_ch);
|
|
||||||
updateRectangles();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Change la largeur du cartouche. Cette largeur doit rester comprise entre
|
|
||||||
100px et la largeur du cartouche
|
|
||||||
*/
|
|
||||||
void BorderInset::setInsetWidth(const qreal &new_iw) {
|
|
||||||
inset_width = qMax(100.0, qMin(nb_columns * columns_width, new_iw));
|
|
||||||
updateRectangles();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Change la hauteur du cartouche. Cette largeur doit rester comprise entre
|
|
||||||
20px et la hauteur du cartouche.
|
|
||||||
*/
|
|
||||||
void BorderInset::setInsetHeight(const qreal &new_ih) {
|
|
||||||
inset_height = qMax(20.0, qMin(columns_height, new_ih));
|
|
||||||
updateRectangles();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Ajuste la largeur du cartouche de facon a ce que celui-ci soit aussi large
|
|
||||||
que le schema
|
|
||||||
*/
|
|
||||||
void BorderInset::adjustInsetToColumns() {
|
|
||||||
setInsetWidth(nbColumn() * columnsWidth());
|
|
||||||
}
|
|
||||||
182
borderinset.h
182
borderinset.h
@@ -1,182 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#ifndef BORDERINSET_H
|
|
||||||
#define BORDERINSET_H
|
|
||||||
#include "insetproperties.h"
|
|
||||||
#include <QObject>
|
|
||||||
#include <QRectF>
|
|
||||||
#include <QPainter>
|
|
||||||
#include <QDate>
|
|
||||||
/**
|
|
||||||
Cette classe represente l'ensemble bordure + cartouche qui encadre le
|
|
||||||
schema electrique.
|
|
||||||
*/
|
|
||||||
class BorderInset : public QObject {
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
// constructeurs, destructeur
|
|
||||||
public:
|
|
||||||
BorderInset(QObject * = 0);
|
|
||||||
virtual ~BorderInset();
|
|
||||||
|
|
||||||
private:
|
|
||||||
BorderInset(const BorderInset &);
|
|
||||||
|
|
||||||
// methodes
|
|
||||||
public:
|
|
||||||
void draw(QPainter *, qreal = 0.0, qreal = 0.0);
|
|
||||||
|
|
||||||
// methodes d'acces en lecture aux dimensions
|
|
||||||
/// @return le nombre de colonnes du schema
|
|
||||||
int nbColumn() const { return(nb_columns); }
|
|
||||||
/// @return la taille des colonnes en pixels
|
|
||||||
qreal columnsWidth() const { return(columns_width); }
|
|
||||||
/// @return la hauteur, en pixels, des en-tetes des colonnes
|
|
||||||
qreal columnsHeaderHeight() const { return(columns_header_height); }
|
|
||||||
/// @return la hauteur des colonnes, en-tetes inclus
|
|
||||||
qreal columnsHeight() const { return(columns_height); }
|
|
||||||
/// @return la largeur de la bordure
|
|
||||||
qreal borderWidth() const { return(nb_columns * columns_width); }
|
|
||||||
/// @return la hauteur de la bordure
|
|
||||||
qreal borderHeight() const { return(columns_height + inset_height); }
|
|
||||||
/// @return la largeur du cartouche
|
|
||||||
qreal insetWidth() const { return(inset_width); }
|
|
||||||
/// @return la hauteur du cartouche
|
|
||||||
qreal insetHeight() const { return(inset_height); }
|
|
||||||
/// @return la hauteur minimale acceptee des colonnes
|
|
||||||
qreal minColumnsHeight() const { return(min_columns_height); }
|
|
||||||
/// @return le nombre minimum accepte de colonnes
|
|
||||||
int minNbColumns() const { return(min_nb_columns); }
|
|
||||||
|
|
||||||
// methodes d'acces en lecture aux informations du cartouche
|
|
||||||
/// @return le champ "Auteur" du cartouche
|
|
||||||
QString author() const { return(bi_author); }
|
|
||||||
/// @return le champ "Date" du cartouche
|
|
||||||
QDate date() const { return(bi_date); }
|
|
||||||
/// @return le champ "Titre" du cartouche
|
|
||||||
QString title() const { return(bi_title); }
|
|
||||||
/// @return le champ "Folio" du cartouche
|
|
||||||
QString folio() const { return(bi_folio); }
|
|
||||||
/// @return le champ "Fichier" du cartouche
|
|
||||||
QString fileName() const { return(bi_filename); }
|
|
||||||
|
|
||||||
// methodes d'acces en lecture aux options
|
|
||||||
/// @return true si le cartouche est affiche, false sinon
|
|
||||||
bool insetIsDisplayed() const { return(display_inset); }
|
|
||||||
/// @return true si les entetes des colonnes sont affiches, false sinon
|
|
||||||
bool columnsAreDisplayed() const { return(display_columns); }
|
|
||||||
/// @return true si la bordure est affichee, false sinon
|
|
||||||
bool borderIsDisplayed() const { return(display_border); }
|
|
||||||
|
|
||||||
// methodes d'acces en ecriture aux dimensions
|
|
||||||
void addColumn ();
|
|
||||||
void removeColumn ();
|
|
||||||
void setNbColumns (int);
|
|
||||||
void setColumnsWidth (const qreal &);
|
|
||||||
void setColumnsHeaderHeight(const qreal &);
|
|
||||||
void setColumnsHeight (const qreal &);
|
|
||||||
void setInsetWidth (const qreal &);
|
|
||||||
void setInsetHeight (const qreal &);
|
|
||||||
void adjustInsetToColumns ();
|
|
||||||
|
|
||||||
// methodes d'acces en ecriture aux informations du cartouche
|
|
||||||
/// @param author le nouveau contenu du champ "Auteur"
|
|
||||||
void setAuthor (const QString &author) { bi_author = author; }
|
|
||||||
/// @param date le nouveau contenu du champ "Date"
|
|
||||||
void setDate (const QDate &date) { bi_date = date; }
|
|
||||||
/// @param title le nouveau contenu du champ "Titre"
|
|
||||||
void setTitle (const QString &title) { bi_title = title; }
|
|
||||||
/// @param folio le nouveau contenu du champ "Folio"
|
|
||||||
void setFolio (const QString &folio) { bi_folio = folio; }
|
|
||||||
/// @param filename le nouveau contenu du champ "Fichier"
|
|
||||||
void setFileName (const QString &filename) { bi_filename = filename; }
|
|
||||||
|
|
||||||
/// @return les proprietes du cartouches
|
|
||||||
InsetProperties exportInset() {
|
|
||||||
InsetProperties ip;
|
|
||||||
ip.author = bi_author;
|
|
||||||
ip.date = bi_date;
|
|
||||||
ip.title = bi_title;
|
|
||||||
ip.folio = bi_folio;
|
|
||||||
ip.filename = bi_filename;
|
|
||||||
return(ip);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @param ip les nouvelles proprietes du cartouche
|
|
||||||
void importInset(const InsetProperties &ip) {
|
|
||||||
bi_author = ip.author;
|
|
||||||
bi_date = ip.date;
|
|
||||||
bi_title = ip.title;
|
|
||||||
bi_folio = ip.folio;
|
|
||||||
bi_filename = ip.filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
// methodes d'acces en ecriture aux options
|
|
||||||
/// @param di true pour afficher le cartouche, false sinon
|
|
||||||
void displayInset (bool di) { display_inset = di; }
|
|
||||||
/// @param dc true pour afficher les entetes des colonnes, false sinon
|
|
||||||
void displayColumns (bool dc) { display_columns = dc; }
|
|
||||||
/// @param db true pour afficher la bordure du schema, false sinon
|
|
||||||
void displayBorder (bool db) { display_border = db; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
void updateRectangles();
|
|
||||||
|
|
||||||
// signaux
|
|
||||||
signals:
|
|
||||||
/**
|
|
||||||
Signal emis lorsque la bordure change
|
|
||||||
@param old_border Ancienne bordure
|
|
||||||
@param new_border Nouvelle bordure
|
|
||||||
*/
|
|
||||||
void borderChanged(QRectF old_border, QRectF new_border);
|
|
||||||
|
|
||||||
// attributs
|
|
||||||
private:
|
|
||||||
// informations du cartouche
|
|
||||||
QString bi_author;
|
|
||||||
QDate bi_date;
|
|
||||||
QString bi_title;
|
|
||||||
QString bi_folio;
|
|
||||||
QString bi_filename;
|
|
||||||
|
|
||||||
// dimensions du cadre et du cartouche
|
|
||||||
int nb_columns;
|
|
||||||
int min_nb_columns;
|
|
||||||
qreal columns_width;
|
|
||||||
qreal columns_header_height;
|
|
||||||
qreal columns_height;
|
|
||||||
qreal min_columns_height;
|
|
||||||
qreal inset_width;
|
|
||||||
qreal inset_height;
|
|
||||||
|
|
||||||
// rectangles utilises pour le dessin
|
|
||||||
QRectF border;
|
|
||||||
QRectF inset;
|
|
||||||
QRectF inset_author;
|
|
||||||
QRectF inset_date;
|
|
||||||
QRectF inset_title;
|
|
||||||
QRectF inset_file;
|
|
||||||
QRectF inset_folio;
|
|
||||||
|
|
||||||
// booleens pour les options de dessin
|
|
||||||
bool display_inset;
|
|
||||||
bool display_columns;
|
|
||||||
bool display_border;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
136
configpages.cpp
136
configpages.cpp
@@ -1,136 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "configpages.h"
|
|
||||||
#include "qetapp.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param parent QWidget parent
|
|
||||||
*/
|
|
||||||
NewDiagramPage::NewDiagramPage(QWidget *parent) : ConfigPage(parent) {
|
|
||||||
|
|
||||||
// acces a la configuration de QElectroTech
|
|
||||||
QSettings &settings = QETApp::settings();
|
|
||||||
|
|
||||||
// recupere les dimensions du schema
|
|
||||||
int columns_count_value = settings.value("diagrameditor/defaultcols", 15).toInt();
|
|
||||||
int columns_width_value = qRound(settings.value("diagrameditor/defaultcolsize", 50.0).toDouble());
|
|
||||||
int columns_height_value = qRound(settings.value("diagrameditor/defaultheight", 500.0).toDouble());
|
|
||||||
|
|
||||||
QVBoxLayout *vlayout1 = new QVBoxLayout();
|
|
||||||
|
|
||||||
QLabel *title = new QLabel(tr("Nouveau sch\351ma"));
|
|
||||||
vlayout1 -> addWidget(title);
|
|
||||||
|
|
||||||
QFrame *horiz_line = new QFrame();
|
|
||||||
horiz_line -> setFrameShape(QFrame::HLine);
|
|
||||||
vlayout1 -> addWidget(horiz_line);
|
|
||||||
|
|
||||||
QHBoxLayout *hlayout1 = new QHBoxLayout();
|
|
||||||
QVBoxLayout *vlayout2 = new QVBoxLayout();
|
|
||||||
|
|
||||||
QGroupBox *diagram_size_box = new QGroupBox(tr("Dimensions du sch\351ma"));
|
|
||||||
diagram_size_box -> setMinimumWidth(300);
|
|
||||||
QGridLayout *diagram_size_box_layout = new QGridLayout(diagram_size_box);
|
|
||||||
|
|
||||||
QLabel *ds1 = new QLabel(tr("Colonnes :"));
|
|
||||||
|
|
||||||
columns_count = new QSpinBox(diagram_size_box);
|
|
||||||
columns_count -> setMinimum(3); /// @todo methode statique pour recuperer ca
|
|
||||||
columns_count -> setValue(columns_count_value);
|
|
||||||
|
|
||||||
columns_width = new QSpinBox(diagram_size_box);
|
|
||||||
columns_width -> setMinimum(1);
|
|
||||||
columns_width -> setSingleStep(10);
|
|
||||||
columns_width -> setValue(columns_width_value);
|
|
||||||
columns_width -> setPrefix(tr("\327"));
|
|
||||||
columns_width -> setSuffix(tr("px"));
|
|
||||||
|
|
||||||
QLabel *ds2 = new QLabel(tr("Hauteur :"));
|
|
||||||
|
|
||||||
columns_height = new QSpinBox(diagram_size_box);
|
|
||||||
columns_height -> setRange(80, 10000); /// @todo methode statique pour recuperer ca
|
|
||||||
columns_height -> setSingleStep(80);
|
|
||||||
columns_height -> setValue(columns_height_value);
|
|
||||||
|
|
||||||
diagram_size_box_layout -> addWidget(ds1, 0, 0);
|
|
||||||
diagram_size_box_layout -> addWidget(columns_count, 0, 1);
|
|
||||||
diagram_size_box_layout -> addWidget(columns_width, 0, 2);
|
|
||||||
diagram_size_box_layout -> addWidget(ds2, 1, 0);
|
|
||||||
diagram_size_box_layout -> addWidget(columns_height, 1, 1);
|
|
||||||
|
|
||||||
ipw = new InsetPropertiesWidget(QETDiagramEditor::defaultInsetProperties(), true, this);
|
|
||||||
|
|
||||||
// proprietes par defaut des conducteurs
|
|
||||||
ConductorProperties cp;
|
|
||||||
cp.fromSettings(settings, "diagrameditor/defaultconductor");
|
|
||||||
cpw = new ConductorPropertiesWidget(cp);
|
|
||||||
|
|
||||||
vlayout2 -> addWidget(diagram_size_box);
|
|
||||||
vlayout2 -> addWidget(ipw);
|
|
||||||
hlayout1 -> addLayout(vlayout2);
|
|
||||||
hlayout1 -> addWidget(cpw);
|
|
||||||
vlayout1 -> addLayout(hlayout1);
|
|
||||||
vlayout1 -> addStretch(1);
|
|
||||||
hlayout1 -> setAlignment(cpw, Qt::AlignTop);
|
|
||||||
setLayout(vlayout1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
NewDiagramPage::~NewDiagramPage() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Applique la configuration de cette page
|
|
||||||
*/
|
|
||||||
void NewDiagramPage::applyConf() {
|
|
||||||
QSettings &settings = QETApp::settings();
|
|
||||||
|
|
||||||
// dimensions des nouveaux schemas
|
|
||||||
settings.setValue("diagrameditor/defaultcols", columns_count -> value());
|
|
||||||
settings.setValue("diagrameditor/defaultcolsize", columns_width -> value());
|
|
||||||
settings.setValue("diagrameditor/defaultheight", columns_height -> value());
|
|
||||||
|
|
||||||
// proprietes du cartouche
|
|
||||||
InsetProperties inset = ipw-> insetProperties();
|
|
||||||
settings.setValue("diagrameditor/defaulttitle", inset.title);
|
|
||||||
settings.setValue("diagrameditor/defaultauthor", inset.author);
|
|
||||||
settings.setValue("diagrameditor/defaultfilename", inset.filename);
|
|
||||||
settings.setValue("diagrameditor/defaultfolio", inset.folio);
|
|
||||||
QString date_setting_value;
|
|
||||||
if (inset.useDate == InsetProperties::UseDateValue) {
|
|
||||||
if (inset.date.isNull()) date_setting_value = "null";
|
|
||||||
else date_setting_value = inset.date.toString("yyyyMMdd");
|
|
||||||
} else {
|
|
||||||
date_setting_value = "now";
|
|
||||||
}
|
|
||||||
settings.setValue("diagrameditor/defaultdate", date_setting_value);
|
|
||||||
|
|
||||||
// proprietes par defaut des conducteurs
|
|
||||||
cpw -> conductorProperties().toSettings(settings, "diagrameditor/defaultconductor");
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @return l'icone de cette page
|
|
||||||
QIcon NewDiagramPage::icon() const {
|
|
||||||
return(QIcon(":/ico/conf_new_diagram.png"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @return le titre de cette page
|
|
||||||
QString NewDiagramPage::title() const {
|
|
||||||
return(tr("Nouveau sch\351ma"));
|
|
||||||
}
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#ifndef CONFIG_PAGES_H
|
|
||||||
#define CONFIG_PAGES_H
|
|
||||||
#include <QtGui>
|
|
||||||
#include "conductorpropertieswidget.h"
|
|
||||||
#include "insetpropertieswidget.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Cette classe abstraite contient les methodes que toutes les pages de
|
|
||||||
configuration doivent implementer.
|
|
||||||
*/
|
|
||||||
class ConfigPage : public QWidget {
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param parent QWidget parent
|
|
||||||
*/
|
|
||||||
ConfigPage(QWidget *parent) : QWidget(parent) {};
|
|
||||||
/// Destructeur
|
|
||||||
virtual ~ConfigPage() {};
|
|
||||||
/// Applique la configuration saisie par l'utilisateur dans la page de configuration
|
|
||||||
virtual void applyConf() = 0;
|
|
||||||
/// @return le titre de la page de configuration
|
|
||||||
virtual QString title() const = 0;
|
|
||||||
/// @return l'icone de la page de configuration
|
|
||||||
virtual QIcon icon() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
Cette classe represente la page de configuration des nouveaux schemas.
|
|
||||||
*/
|
|
||||||
class NewDiagramPage : public ConfigPage {
|
|
||||||
Q_OBJECT
|
|
||||||
// constructeurs, destructeur
|
|
||||||
public:
|
|
||||||
NewDiagramPage(QWidget * = 0);
|
|
||||||
virtual ~NewDiagramPage();
|
|
||||||
private:
|
|
||||||
NewDiagramPage(const NewDiagramPage &);
|
|
||||||
|
|
||||||
// methodes
|
|
||||||
public:
|
|
||||||
void applyConf();
|
|
||||||
QString title() const;
|
|
||||||
QIcon icon() const;
|
|
||||||
|
|
||||||
// attributs
|
|
||||||
public:
|
|
||||||
QSpinBox *columns_count; ///< Widget d'edition du nombre par defaut de colonnes
|
|
||||||
QSpinBox *columns_width; ///< Widget d'edition de la largeur par defaut des colonnes
|
|
||||||
QSpinBox *columns_height; ///< Widget d'edition de la hauteur par defaut des colonnes
|
|
||||||
InsetPropertiesWidget *ipw; ///< Widget d'edition des proprietes par defaut du cartouche
|
|
||||||
ConductorPropertiesWidget *cpw; ///< Widget d'edition des proprietes par defaut des conducteurs
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
648
diagram.cpp
648
diagram.cpp
@@ -1,648 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include "qetapp.h"
|
|
||||||
#include "conductor.h"
|
|
||||||
#include "customelement.h"
|
|
||||||
#include "diagram.h"
|
|
||||||
#include "exportdialog.h"
|
|
||||||
#include "diagramcommands.h"
|
|
||||||
#include "diagramcontent.h"
|
|
||||||
|
|
||||||
const int Diagram::xGrid = 10;
|
|
||||||
const int Diagram::yGrid = 10;
|
|
||||||
const qreal Diagram::margin = 5.0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param parent Le QObject parent du schema
|
|
||||||
*/
|
|
||||||
Diagram::Diagram(QObject *parent) :
|
|
||||||
QGraphicsScene(parent),
|
|
||||||
draw_grid(true),
|
|
||||||
use_border(true),
|
|
||||||
moved_elements_fetched(false),
|
|
||||||
qgi_manager(this),
|
|
||||||
draw_terminals(true)
|
|
||||||
{
|
|
||||||
setBackgroundBrush(Qt::white);
|
|
||||||
conductor_setter = new QGraphicsLineItem(0, 0);
|
|
||||||
conductor_setter -> setZValue(1000000);
|
|
||||||
QPen t;
|
|
||||||
t.setColor(Qt::black);
|
|
||||||
t.setWidthF(1.5);
|
|
||||||
t.setStyle(Qt::DashLine);
|
|
||||||
conductor_setter -> setPen(t);
|
|
||||||
conductor_setter -> setLine(QLineF(QPointF(0.0, 0.0), QPointF(0.0, 0.0)));
|
|
||||||
connect(this, SIGNAL(selectionChanged()), this, SLOT(slot_checkSelectionEmptinessChange()));
|
|
||||||
|
|
||||||
// lit les caracteristiques des conducteurs par defaut dans la configuration
|
|
||||||
defaultConductorProperties.fromSettings(QETApp::settings(), "diagrameditor/defaultconductor");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Destructeur
|
|
||||||
*/
|
|
||||||
Diagram::~Diagram() {
|
|
||||||
if (conductor_setter -> scene()) removeItem(conductor_setter);
|
|
||||||
delete conductor_setter;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Dessine l'arriere-plan du schema, cad la grille.
|
|
||||||
@param p Le QPainter a utiliser pour dessiner
|
|
||||||
@param r Le rectangle de la zone a dessiner
|
|
||||||
*/
|
|
||||||
void Diagram::drawBackground(QPainter *p, const QRectF &r) {
|
|
||||||
p -> save();
|
|
||||||
|
|
||||||
// desactive tout antialiasing, sauf pour le texte
|
|
||||||
p -> setRenderHint(QPainter::Antialiasing, false);
|
|
||||||
p -> setRenderHint(QPainter::TextAntialiasing, true);
|
|
||||||
p -> setRenderHint(QPainter::SmoothPixmapTransform, false);
|
|
||||||
|
|
||||||
// dessine un fond blanc
|
|
||||||
p -> setPen(Qt::NoPen);
|
|
||||||
p -> setBrush(Qt::white);
|
|
||||||
p -> drawRect(r);
|
|
||||||
|
|
||||||
if (draw_grid) {
|
|
||||||
// dessine les points de la grille
|
|
||||||
p -> setPen(Qt::black);
|
|
||||||
p -> setBrush(Qt::NoBrush);
|
|
||||||
qreal limite_x = r.x() + r.width();
|
|
||||||
qreal limite_y = r.y() + r.height();
|
|
||||||
|
|
||||||
int g_x = (int)ceil(r.x());
|
|
||||||
while (g_x % xGrid) ++ g_x;
|
|
||||||
int g_y = (int)ceil(r.y());
|
|
||||||
while (g_y % yGrid) ++ g_y;
|
|
||||||
|
|
||||||
for (int gx = g_x ; gx < limite_x ; gx += xGrid) {
|
|
||||||
for (int gy = g_y ; gy < limite_y ; gy += yGrid) {
|
|
||||||
p -> drawPoint(gx, gy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (use_border) border_and_inset.draw(p, margin, margin);
|
|
||||||
p -> restore();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere les enfoncements de touches du clavier
|
|
||||||
@param e QKeyEvent decrivant l'evenement clavier
|
|
||||||
*/
|
|
||||||
void Diagram::keyPressEvent(QKeyEvent *e) {
|
|
||||||
QPointF movement;
|
|
||||||
switch(e -> key()) {
|
|
||||||
case Qt::Key_Left: movement = QPointF(-xGrid, 0.0); break;
|
|
||||||
case Qt::Key_Right: movement = QPointF(+xGrid, 0.0); break;
|
|
||||||
case Qt::Key_Up: movement = QPointF(0.0, -yGrid); break;
|
|
||||||
case Qt::Key_Down: movement = QPointF(0.0, +yGrid); break;
|
|
||||||
}
|
|
||||||
if (!movement.isNull() && !focusItem()) {
|
|
||||||
moveElements(movement);
|
|
||||||
}
|
|
||||||
QGraphicsScene::keyPressEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere les relachements de touches du clavier
|
|
||||||
@param e QKeyEvent decrivant l'evenement clavier
|
|
||||||
*/
|
|
||||||
void Diagram::keyReleaseEvent(QKeyEvent *e) {
|
|
||||||
// detecte le relachement d'une touche de direction ( = deplacement d'elements)
|
|
||||||
if (
|
|
||||||
(e -> key() == Qt::Key_Left || e -> key() == Qt::Key_Right ||\
|
|
||||||
e -> key() == Qt::Key_Up || e -> key() == Qt::Key_Down) &&\
|
|
||||||
!current_movement.isNull() && !e -> isAutoRepeat()
|
|
||||||
) {
|
|
||||||
// cree un objet d'annulation pour le mouvement qui vient de se finir
|
|
||||||
undoStack().push(new MoveElementsCommand(this, selectedContent(), current_movement));
|
|
||||||
invalidateMovedElements();
|
|
||||||
current_movement = QPointF();
|
|
||||||
}
|
|
||||||
QGraphicsScene::keyReleaseEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Exporte le schema vers une image
|
|
||||||
@return Une QImage representant le schema
|
|
||||||
*/
|
|
||||||
bool Diagram::toPaintDevice(QPaintDevice &pix, int width, int height, Qt::AspectRatioMode aspectRatioMode) {
|
|
||||||
// determine la zone source = contenu du schema + marges
|
|
||||||
QRectF source_area;
|
|
||||||
if (!use_border) {
|
|
||||||
source_area = itemsBoundingRect();
|
|
||||||
source_area.translate(-margin, -margin);
|
|
||||||
source_area.setWidth (source_area.width () + 2.0 * margin);
|
|
||||||
source_area.setHeight(source_area.height() + 2.0 * margin);
|
|
||||||
} else {
|
|
||||||
source_area = QRectF(
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
border_and_inset.borderWidth () + 2.0 * margin,
|
|
||||||
border_and_inset.borderHeight() + 2.0 * margin
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// si les dimensions ne sont pas precisees, l'image est exportee a l'echelle 1:1
|
|
||||||
QSize image_size = (width == -1 && height == -1) ? source_area.size().toSize() : QSize(width, height);
|
|
||||||
|
|
||||||
// prepare le rendu
|
|
||||||
QPainter p;
|
|
||||||
if (!p.begin(&pix)) return(false);
|
|
||||||
|
|
||||||
// rendu antialiase
|
|
||||||
p.setRenderHint(QPainter::Antialiasing, true);
|
|
||||||
p.setRenderHint(QPainter::TextAntialiasing, true);
|
|
||||||
p.setRenderHint(QPainter::SmoothPixmapTransform, true);
|
|
||||||
|
|
||||||
// deselectionne tous les elements
|
|
||||||
QList<QGraphicsItem *> selected_elmts = selectedItems();
|
|
||||||
foreach (QGraphicsItem *qgi, selected_elmts) qgi -> setSelected(false);
|
|
||||||
|
|
||||||
// effectue le rendu lui-meme
|
|
||||||
render(&p, QRect(QPoint(0, 0), image_size), source_area, aspectRatioMode);
|
|
||||||
p.end();
|
|
||||||
|
|
||||||
// restaure les elements selectionnes
|
|
||||||
foreach (QGraphicsItem *qgi, selected_elmts) qgi -> setSelected(true);
|
|
||||||
|
|
||||||
return(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Permet de connaitre les dimensions qu'aura l'image generee par la methode toImage()
|
|
||||||
@return La taille de l'image generee par toImage()
|
|
||||||
*/
|
|
||||||
QSize Diagram::imageSize() const {
|
|
||||||
// determine la zone source = contenu du schema + marges
|
|
||||||
qreal image_width, image_height;
|
|
||||||
if (!use_border) {
|
|
||||||
QRectF items_rect = itemsBoundingRect();
|
|
||||||
image_width = items_rect.width();
|
|
||||||
image_height = items_rect.height();
|
|
||||||
} else {
|
|
||||||
image_width = border_and_inset.borderWidth();
|
|
||||||
image_height = border_and_inset.borderHeight();
|
|
||||||
}
|
|
||||||
|
|
||||||
image_width += 2.0 * margin;
|
|
||||||
image_height += 2.0 * margin;
|
|
||||||
|
|
||||||
// renvoie la taille de la zone source
|
|
||||||
return(QSizeF(image_width, image_height).toSize());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Exporte tout ou partie du schema
|
|
||||||
@param diagram Booleen (a vrai par defaut) indiquant si le XML genere doit
|
|
||||||
representer tout le schema ou seulement les elements selectionnes
|
|
||||||
@return Un Document XML (QDomDocument)
|
|
||||||
*/
|
|
||||||
QDomDocument Diagram::toXml(bool diagram) {
|
|
||||||
// document
|
|
||||||
QDomDocument document;
|
|
||||||
|
|
||||||
// racine de l'arbre XML
|
|
||||||
QDomElement racine = document.createElement("diagram");
|
|
||||||
|
|
||||||
// proprietes du schema
|
|
||||||
if (diagram) {
|
|
||||||
if (!border_and_inset.author().isNull()) racine.setAttribute("author", border_and_inset.author());
|
|
||||||
if (!border_and_inset.date().isNull()) racine.setAttribute("date", border_and_inset.date().toString("yyyyMMdd"));
|
|
||||||
if (!border_and_inset.title().isNull()) racine.setAttribute("title", border_and_inset.title());
|
|
||||||
if (!border_and_inset.fileName().isNull()) racine.setAttribute("filename", border_and_inset.fileName());
|
|
||||||
if (!border_and_inset.folio().isNull()) racine.setAttribute("folio", border_and_inset.folio());
|
|
||||||
racine.setAttribute("cols", border_and_inset.nbColumn());
|
|
||||||
racine.setAttribute("colsize", border_and_inset.columnsWidth());
|
|
||||||
racine.setAttribute("height", border_and_inset.columnsHeight());
|
|
||||||
|
|
||||||
// type de conducteur par defaut
|
|
||||||
QDomElement default_conductor = document.createElement("defaultconductor");
|
|
||||||
defaultConductorProperties.toXml(document, default_conductor);
|
|
||||||
racine.appendChild(default_conductor);
|
|
||||||
}
|
|
||||||
document.appendChild(racine);
|
|
||||||
|
|
||||||
// si le schema ne contient pas d'element (et donc pas de conducteurs), on retourne de suite le document XML
|
|
||||||
if (items().isEmpty()) return(document);
|
|
||||||
|
|
||||||
// creation de trois listes : une qui contient les elements, une qui contient les conducteurs, une qui contient les champs de texte
|
|
||||||
QList<Element *> list_elements;
|
|
||||||
QList<Conductor *> list_conductors;
|
|
||||||
QList<DiagramTextItem *> list_texts;
|
|
||||||
|
|
||||||
// Determine les elements a « XMLiser »
|
|
||||||
foreach(QGraphicsItem *qgi, items()) {
|
|
||||||
if (Element *elmt = qgraphicsitem_cast<Element *>(qgi)) {
|
|
||||||
if (diagram) list_elements << elmt;
|
|
||||||
else if (elmt -> isSelected()) list_elements << elmt;
|
|
||||||
} else if (Conductor *f = qgraphicsitem_cast<Conductor *>(qgi)) {
|
|
||||||
if (diagram) list_conductors << f;
|
|
||||||
// lorsqu'on n'exporte pas tout le diagram, il faut retirer les conducteurs non selectionnes
|
|
||||||
// et pour l'instant, les conducteurs non selectionnes sont les conducteurs dont un des elements n'est pas relie
|
|
||||||
else if (f -> terminal1 -> parentItem() -> isSelected() && f -> terminal2 -> parentItem() -> isSelected()) list_conductors << f;
|
|
||||||
} else if (DiagramTextItem *dti = qgraphicsitem_cast<DiagramTextItem *>(qgi)) {
|
|
||||||
if (!dti -> parentItem()) {
|
|
||||||
if (diagram) list_texts << dti;
|
|
||||||
else if (dti -> isSelected()) list_texts << dti;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// table de correspondance entre les adresses des bornes et leurs ids
|
|
||||||
QHash<Terminal *, int> table_adr_id;
|
|
||||||
|
|
||||||
// enregistrement des elements
|
|
||||||
if (!list_elements.isEmpty()) {
|
|
||||||
QDomElement elements = document.createElement("elements");
|
|
||||||
foreach(Element *elmt, list_elements) {
|
|
||||||
elements.appendChild(elmt -> toXml(document, table_adr_id));
|
|
||||||
}
|
|
||||||
racine.appendChild(elements);
|
|
||||||
}
|
|
||||||
|
|
||||||
// enregistrement des conducteurs
|
|
||||||
if (!list_conductors.isEmpty()) {
|
|
||||||
QDomElement conductors = document.createElement("conductors");
|
|
||||||
foreach(Conductor *cond, list_conductors) {
|
|
||||||
conductors.appendChild(cond -> toXml(document, table_adr_id));
|
|
||||||
}
|
|
||||||
racine.appendChild(conductors);
|
|
||||||
}
|
|
||||||
|
|
||||||
// enregistrement des champs de texte
|
|
||||||
if (!list_texts.isEmpty()) {
|
|
||||||
QDomElement inputs = document.createElement("inputs");
|
|
||||||
foreach(DiagramTextItem *dti, list_texts) {
|
|
||||||
inputs.appendChild(dti -> toXml(document));
|
|
||||||
}
|
|
||||||
racine.appendChild(inputs);
|
|
||||||
}
|
|
||||||
|
|
||||||
// on retourne le document XML ainsi genere
|
|
||||||
return(document);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Importe le diagram decrit dans un document XML. Si une position est
|
|
||||||
precisee, les elements importes sont positionnes de maniere a ce que le
|
|
||||||
coin superieur gauche du plus petit rectangle pouvant les entourant tous
|
|
||||||
(le bounding rect) soit a cette position.
|
|
||||||
@param document Le document XML a analyser
|
|
||||||
@param position La position du diagram importe
|
|
||||||
@param consider_informations Si vrai, les informations complementaires
|
|
||||||
(auteur, titre, ...) seront prises en compte
|
|
||||||
@param content_ptr si ce pointeur vers un DiagramContentn'est pas NULL, il
|
|
||||||
sera rempli avec le contenu ajoute au schema par le fromXml
|
|
||||||
@return true si l'import a reussi, false sinon
|
|
||||||
*/
|
|
||||||
bool Diagram::fromXml(QDomDocument &document, QPointF position, bool consider_informations, DiagramContent *content_ptr) {
|
|
||||||
QDomElement root = document.documentElement();
|
|
||||||
// le premier element doit etre un schema
|
|
||||||
if (root.tagName() != "diagram") return(false);
|
|
||||||
|
|
||||||
// lecture des attributs de ce schema
|
|
||||||
if (consider_informations) {
|
|
||||||
border_and_inset.setAuthor(root.attribute("author"));
|
|
||||||
border_and_inset.setTitle(root.attribute("title"));
|
|
||||||
border_and_inset.setDate(QDate::fromString(root.attribute("date"), "yyyyMMdd"));
|
|
||||||
border_and_inset.setFileName(root.attribute("filename"));
|
|
||||||
border_and_inset.setFolio(root.attribute("folio"));
|
|
||||||
|
|
||||||
bool ok;
|
|
||||||
// nombre de colonnes
|
|
||||||
int nb_cols = root.attribute("cols").toInt(&ok);
|
|
||||||
if (ok) border_and_inset.setNbColumns(nb_cols);
|
|
||||||
|
|
||||||
// taille des colonnes
|
|
||||||
double col_size = root.attribute("colsize").toDouble(&ok);
|
|
||||||
if (ok) border_and_inset.setColumnsWidth(col_size);
|
|
||||||
|
|
||||||
// hauteur du schema
|
|
||||||
double height = root.attribute("height").toDouble(&ok);
|
|
||||||
if (ok) border_and_inset.setColumnsHeight(height);
|
|
||||||
|
|
||||||
border_and_inset.adjustInsetToColumns();
|
|
||||||
|
|
||||||
// repere le permier element "defaultconductor"
|
|
||||||
for (QDomNode node = root.firstChild() ; !node.isNull() ; node = node.nextSibling()) {
|
|
||||||
QDomElement elmts = node.toElement();
|
|
||||||
if(elmts.isNull() || elmts.tagName() != "defaultconductor") continue;
|
|
||||||
defaultConductorProperties.fromXml(elmts);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// si la racine n'a pas d'enfant : le chargement est fini (schema vide)
|
|
||||||
if (root.firstChild().isNull()) return(true);
|
|
||||||
|
|
||||||
// chargement de tous les elements du fichier XML
|
|
||||||
QList<Element *> added_elements;
|
|
||||||
QHash<int, Terminal *> table_adr_id;
|
|
||||||
foreach (QDomElement e, QET::findInDomElement(root, "elements", "element")) {
|
|
||||||
if (!Element::valideXml(e)) continue;
|
|
||||||
|
|
||||||
// cree un element dont le type correspond a l'id type
|
|
||||||
QString type_id = e.attribute("type");
|
|
||||||
QString chemin_fichier = QETApp::realPath(type_id);
|
|
||||||
CustomElement *nvel_elmt = new CustomElement(chemin_fichier);
|
|
||||||
if (nvel_elmt -> isNull()) {
|
|
||||||
QString debug_message = QString("Le chargement de la description de l'element %1 a echoue avec le code d'erreur %2").arg(chemin_fichier).arg(nvel_elmt -> etat());
|
|
||||||
delete nvel_elmt;
|
|
||||||
qDebug(debug_message.toLatin1().data());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// charge les caracteristiques de l'element
|
|
||||||
if (nvel_elmt -> fromXml(e, table_adr_id)) {
|
|
||||||
// ajout de l'element au schema et a la liste des elements ajoutes
|
|
||||||
addItem(nvel_elmt);
|
|
||||||
added_elements << nvel_elmt;
|
|
||||||
} else {
|
|
||||||
delete nvel_elmt;
|
|
||||||
qDebug("Le chargement des parametres d'un element a echoue");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// chargement de tous les textes du fichiers XML
|
|
||||||
QList<DiagramTextItem *> added_texts;
|
|
||||||
foreach (QDomElement f, QET::findInDomElement(root, "inputs", "input")) {
|
|
||||||
DiagramTextItem *dti = new DiagramTextItem(0, this);
|
|
||||||
dti -> fromXml(f);
|
|
||||||
added_texts << dti;
|
|
||||||
}
|
|
||||||
|
|
||||||
// gere la translation des nouveaux elements et texte si celle-ci est demandee
|
|
||||||
if (position != QPointF()) {
|
|
||||||
// determine quel est le coin superieur gauche du rectangle entourant les elements ajoutes
|
|
||||||
qreal minimum_x = 0, minimum_y = 0;
|
|
||||||
bool init = false;
|
|
||||||
QList<QGraphicsItem *> added_items;
|
|
||||||
foreach (Element *added_element, added_elements) added_items << added_element;
|
|
||||||
foreach (DiagramTextItem *added_text, added_texts) added_items << added_text;
|
|
||||||
foreach (QGraphicsItem *item, added_items) {
|
|
||||||
QPointF csg = item -> mapToScene(item -> boundingRect()).boundingRect().topLeft();
|
|
||||||
qreal px = csg.x();
|
|
||||||
qreal py = csg.y();
|
|
||||||
if (!init) {
|
|
||||||
minimum_x = px;
|
|
||||||
minimum_y = py;
|
|
||||||
init = true;
|
|
||||||
} else {
|
|
||||||
if (px < minimum_x) minimum_x = px;
|
|
||||||
if (py < minimum_y) minimum_y = py;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
qreal diff_x = position.x() - minimum_x;
|
|
||||||
qreal diff_y = position.y() - minimum_y;
|
|
||||||
foreach (Element *added_element, added_elements) {
|
|
||||||
added_element -> setPos(added_element -> pos().x() + diff_x, added_element -> pos().y() + diff_y);
|
|
||||||
}
|
|
||||||
foreach (DiagramTextItem *added_text, added_texts) {
|
|
||||||
added_text -> setPos(added_text -> pos().x() + diff_x, added_text -> pos().y() + diff_y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// chargement de tous les Conducteurs du fichier XML
|
|
||||||
QList<Conductor *> added_conductors;
|
|
||||||
foreach (QDomElement f, QET::findInDomElement(root, "conductors", "conductor")) {
|
|
||||||
if (!Conductor::valideXml(f)) continue;
|
|
||||||
// verifie que les bornes que le conducteur relie sont connues
|
|
||||||
int id_p1 = f.attribute("terminal1").toInt();
|
|
||||||
int id_p2 = f.attribute("terminal2").toInt();
|
|
||||||
if (table_adr_id.contains(id_p1) && table_adr_id.contains(id_p2)) {
|
|
||||||
// pose le conducteur... si c'est possible
|
|
||||||
Terminal *p1 = table_adr_id.value(id_p1);
|
|
||||||
Terminal *p2 = table_adr_id.value(id_p2);
|
|
||||||
if (p1 != p2) {
|
|
||||||
bool can_add_conductor = true;
|
|
||||||
bool cia = ((Element *)p2 -> parentItem()) -> internalConnections();
|
|
||||||
if (!cia) {
|
|
||||||
foreach(QGraphicsItem *item, p2 -> parentItem() -> children()) {
|
|
||||||
if (item == p1) can_add_conductor = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (can_add_conductor) {
|
|
||||||
Conductor *c = new Conductor(table_adr_id.value(id_p1), table_adr_id.value(id_p2), 0, this);
|
|
||||||
c -> fromXml(f);
|
|
||||||
added_conductors << c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else qDebug() << "Le chargement du conductor" << id_p1 << id_p2 << "a echoue";
|
|
||||||
}
|
|
||||||
|
|
||||||
// remplissage des listes facultatives
|
|
||||||
if (content_ptr != NULL) {
|
|
||||||
content_ptr -> elements = added_elements;
|
|
||||||
content_ptr -> conductorsToMove = added_conductors;
|
|
||||||
content_ptr -> textFields = added_texts;
|
|
||||||
}
|
|
||||||
|
|
||||||
return(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Verifie si la selection est passe d'un etat ou elle est vide a un etat ou
|
|
||||||
elle ne l'est pas, et inversement. Si c'est le cas, le signal
|
|
||||||
EmptinessChanged() est emis.
|
|
||||||
*/
|
|
||||||
void Diagram::slot_checkSelectionEmptinessChange() {
|
|
||||||
static bool selection_was_empty = true;
|
|
||||||
bool selection_is_empty = selectedItems().isEmpty();
|
|
||||||
if (selection_was_empty != selection_is_empty) {
|
|
||||||
emit(selectionEmptinessChanged());
|
|
||||||
selection_was_empty = selection_is_empty;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return Le rectangle (coordonnees par rapport a la scene) delimitant le bord du schema
|
|
||||||
*/
|
|
||||||
QRectF Diagram::border() const {
|
|
||||||
return(
|
|
||||||
QRectF(
|
|
||||||
margin,
|
|
||||||
margin,
|
|
||||||
border_and_inset.borderWidth(),
|
|
||||||
border_and_inset.borderHeight()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// oublie la liste des elements et conducteurs en mouvement
|
|
||||||
void Diagram::invalidateMovedElements() {
|
|
||||||
if (!moved_elements_fetched) return;
|
|
||||||
moved_elements_fetched = false;
|
|
||||||
elements_to_move.clear();
|
|
||||||
conductors_to_move.clear();
|
|
||||||
conductors_to_update.clear();
|
|
||||||
texts_to_move.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// reconstruit la liste des elements et conducteurs en mouvement
|
|
||||||
void Diagram::fetchMovedElements() {
|
|
||||||
// recupere les elements deplaces
|
|
||||||
foreach (QGraphicsItem *item, selectedItems()) {
|
|
||||||
if (Element *elmt = qgraphicsitem_cast<Element *>(item)) {
|
|
||||||
elements_to_move << elmt;
|
|
||||||
} else if (DiagramTextItem *t = qgraphicsitem_cast<DiagramTextItem *>(item)) {
|
|
||||||
if (!t -> parentItem()) texts_to_move << t;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// pour chaque element deplace, determine les conducteurs qui seront modifies
|
|
||||||
foreach(Element *elmt, elements_to_move) {
|
|
||||||
foreach(Terminal *terminal, elmt -> terminals()) {
|
|
||||||
foreach(Conductor *conductor, terminal -> conductors()) {
|
|
||||||
Terminal *other_terminal;
|
|
||||||
if (conductor -> terminal1 == terminal) {
|
|
||||||
other_terminal = conductor -> terminal2;
|
|
||||||
} else {
|
|
||||||
other_terminal = conductor -> terminal1;
|
|
||||||
}
|
|
||||||
// si les deux elements du conducteur sont deplaces
|
|
||||||
if (elements_to_move.contains(static_cast<Element *>(other_terminal -> parentItem()))) {
|
|
||||||
conductors_to_move << conductor;
|
|
||||||
} else {
|
|
||||||
conductors_to_update.insert(conductor, terminal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
moved_elements_fetched = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Deplace les elements, conducteurs et textes selectionnes en gerant au
|
|
||||||
mieux les conducteurs (seuls les conducteurs dont un seul des elements
|
|
||||||
est deplace sont recalcules, les autres sont deplaces).
|
|
||||||
@param diff Translation a effectuer
|
|
||||||
@param dontmove QGraphicsItem (optionnel) a ne pas deplacer ; note : ce
|
|
||||||
parametre ne concerne que les elements et les champs de texte.
|
|
||||||
*/
|
|
||||||
void Diagram::moveElements(const QPointF &diff, QGraphicsItem *dontmove) {
|
|
||||||
// inutile de deplacer les autres elements s'il n'y a pas eu de mouvement concret
|
|
||||||
if (diff.isNull()) return;
|
|
||||||
|
|
||||||
current_movement += diff;
|
|
||||||
|
|
||||||
// deplace les elements selectionnes
|
|
||||||
foreach(Element *element, elementsToMove()) {
|
|
||||||
if (dontmove != NULL && element == dontmove) continue;
|
|
||||||
element -> setPos(element -> pos() + diff);
|
|
||||||
}
|
|
||||||
|
|
||||||
// deplace certains conducteurs
|
|
||||||
foreach(Conductor *conductor, conductorsToMove()) {
|
|
||||||
conductor -> setPos(conductor -> pos() + diff);
|
|
||||||
}
|
|
||||||
|
|
||||||
// recalcule les autres conducteurs
|
|
||||||
const QHash<Conductor *, Terminal *> &conductors_modify = conductorsToUpdate();
|
|
||||||
foreach(Conductor *conductor, conductors_modify.keys()) {
|
|
||||||
conductor -> updateWithNewPos(QRectF(), conductors_modify[conductor], conductors_modify[conductor] -> amarrageConductor());
|
|
||||||
}
|
|
||||||
|
|
||||||
// deplace les champs de texte
|
|
||||||
foreach(DiagramTextItem *dti, textsToMove()) {
|
|
||||||
if (dontmove != NULL && dti == dontmove) continue;
|
|
||||||
dti -> setPos(dti -> pos() + diff);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Definit s'il faut afficher ou non les bornes
|
|
||||||
@param dt true pour afficher les bornes, false sinon
|
|
||||||
*/
|
|
||||||
void Diagram::setDrawTerminals(bool dt) {
|
|
||||||
foreach(QGraphicsItem *qgi, items()) {
|
|
||||||
if (Terminal *t = qgraphicsitem_cast<Terminal *>(qgi)) {
|
|
||||||
t -> setVisible(dt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return la liste des conducteurs selectionnes sur le schema
|
|
||||||
*/
|
|
||||||
QSet<Conductor *> Diagram::selectedConductors() const {
|
|
||||||
QSet<Conductor *> conductors_set;
|
|
||||||
foreach(QGraphicsItem *qgi, selectedItems()) {
|
|
||||||
if (Conductor *c = qgraphicsitem_cast<Conductor *>(qgi)) {
|
|
||||||
conductors_set << c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return(conductors_set);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @return true si le presse-papier semble contenir un schema
|
|
||||||
bool Diagram::clipboardMayContainDiagram() {
|
|
||||||
QString clipboard_text = QApplication::clipboard() -> text().trimmed();
|
|
||||||
bool may_be_diagram = clipboard_text.startsWith("<diagram") && clipboard_text.endsWith("</diagram>");
|
|
||||||
return(may_be_diagram);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return Le contenu du schema. Les conducteurs sont tous places dans
|
|
||||||
conductorsToMove.
|
|
||||||
*/
|
|
||||||
DiagramContent Diagram::content() const {
|
|
||||||
DiagramContent dc;
|
|
||||||
foreach(QGraphicsItem *qgi, items()) {
|
|
||||||
if (Element *e = qgraphicsitem_cast<Element *>(qgi)) {
|
|
||||||
dc.elements << e;
|
|
||||||
} else if (DiagramTextItem *dti = qgraphicsitem_cast<DiagramTextItem *>(qgi)) {
|
|
||||||
dc.textFields << dti;
|
|
||||||
} else if (Conductor *c = qgraphicsitem_cast<Conductor *>(qgi)) {
|
|
||||||
dc.conductorsToMove << c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return(dc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return le contenu selectionne du schema.
|
|
||||||
*/
|
|
||||||
DiagramContent Diagram::selectedContent() {
|
|
||||||
invalidateMovedElements();
|
|
||||||
DiagramContent dc;
|
|
||||||
dc.elements = elementsToMove().toList();
|
|
||||||
dc.textFields = textsToMove().toList();
|
|
||||||
dc.conductorsToMove = conductorsToMove().toList();
|
|
||||||
dc.conductorsToUpdate = conductorsToUpdate();
|
|
||||||
|
|
||||||
// recupere les conducteurs selectionnes isoles (= non deplacables mais supprimables)
|
|
||||||
foreach(QGraphicsItem *qgi, items()) {
|
|
||||||
if (Conductor *c = qgraphicsitem_cast<Conductor *>(qgi)) {
|
|
||||||
if (
|
|
||||||
c -> isSelected() &&\
|
|
||||||
!c -> terminal1 -> parentItem() -> isSelected() &&\
|
|
||||||
!c -> terminal2 -> parentItem() -> isSelected()
|
|
||||||
) {
|
|
||||||
dc.otherConductors << c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
invalidateMovedElements();
|
|
||||||
return(dc);
|
|
||||||
}
|
|
||||||
@@ -1,625 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "diagramcommands.h"
|
|
||||||
#include "element.h"
|
|
||||||
#include "conductor.h"
|
|
||||||
#include "diagram.h"
|
|
||||||
#include "qgimanager.h"
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param d Schema auquel on ajoute un element
|
|
||||||
@param elmt Element ajoute
|
|
||||||
@param p Position a laquelle l'element est ajoute
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
AddElementCommand::AddElementCommand(
|
|
||||||
Diagram *d,
|
|
||||||
Element *elmt,
|
|
||||||
const QPointF &p,
|
|
||||||
QUndoCommand *parent
|
|
||||||
) :
|
|
||||||
QUndoCommand(QObject::tr("ajouter 1 ") + elmt -> nom(), parent),
|
|
||||||
element(elmt),
|
|
||||||
diagram(d),
|
|
||||||
position(p)
|
|
||||||
{
|
|
||||||
diagram -> qgiManager().manage(element);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
AddElementCommand::~AddElementCommand() {
|
|
||||||
diagram -> qgiManager().release(element);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Annule l'ajout
|
|
||||||
void AddElementCommand::undo() {
|
|
||||||
diagram -> removeItem(element);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Refait l'ajout
|
|
||||||
void AddElementCommand::redo() {
|
|
||||||
diagram -> addItem(element);
|
|
||||||
element -> setPos(position);
|
|
||||||
element -> setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param dia Schema auquel on ajoute du texte
|
|
||||||
@param text Texte ajoute
|
|
||||||
@param pos Position a laquelle le texte est ajoute
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
AddTextCommand::AddTextCommand(Diagram *dia, DiagramTextItem *text, const QPointF &pos, QUndoCommand *parent) :
|
|
||||||
QUndoCommand(QObject::tr("Ajouter un champ de texte"), parent),
|
|
||||||
textitem(text),
|
|
||||||
diagram(dia),
|
|
||||||
position(pos)
|
|
||||||
{
|
|
||||||
diagram -> qgiManager().manage(textitem);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
AddTextCommand::~AddTextCommand() {
|
|
||||||
diagram -> qgiManager().release(textitem);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Annule l'ajout
|
|
||||||
void AddTextCommand::undo() {
|
|
||||||
diagram -> removeItem(textitem);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Refait l'ajour
|
|
||||||
void AddTextCommand::redo() {
|
|
||||||
diagram -> addItem(textitem);
|
|
||||||
textitem -> setPos(position);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param d Schema auquel on ajoute un conducteur
|
|
||||||
@param c Conducteur ajoute
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
AddConductorCommand::AddConductorCommand(
|
|
||||||
Diagram *d,
|
|
||||||
Conductor *c,
|
|
||||||
QUndoCommand *parent
|
|
||||||
) :
|
|
||||||
QUndoCommand(QObject::tr("ajouter un conducteur"), parent),
|
|
||||||
conductor(c),
|
|
||||||
diagram(d)
|
|
||||||
{
|
|
||||||
diagram -> qgiManager().manage(conductor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
AddConductorCommand::~AddConductorCommand() {
|
|
||||||
diagram -> qgiManager().release(conductor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Annule l'ajout
|
|
||||||
void AddConductorCommand::undo() {
|
|
||||||
// detache le conducteur sans le detruire
|
|
||||||
conductor -> terminal1 -> removeConductor(conductor);
|
|
||||||
conductor -> terminal2 -> removeConductor(conductor);
|
|
||||||
diagram -> removeItem(conductor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Refait l'ajout
|
|
||||||
void AddConductorCommand::redo() {
|
|
||||||
diagram -> addItem(conductor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param dia Schema dont on supprime des elements et conducteurs
|
|
||||||
@param content Contenu supprime
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
DeleteElementsCommand::DeleteElementsCommand(
|
|
||||||
Diagram *dia,
|
|
||||||
const DiagramContent &content,
|
|
||||||
QUndoCommand *parent
|
|
||||||
) :
|
|
||||||
QUndoCommand(parent),
|
|
||||||
removed_content(content),
|
|
||||||
diagram(dia)
|
|
||||||
{
|
|
||||||
setText(QObject::tr("supprimer ") + removed_content.sentence(DiagramContent::All));
|
|
||||||
diagram -> qgiManager().manage(removed_content.items(DiagramContent::All));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
DeleteElementsCommand::~DeleteElementsCommand() {
|
|
||||||
diagram -> qgiManager().release(removed_content.items(DiagramContent::All));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// annule les suppressions
|
|
||||||
void DeleteElementsCommand::undo() {
|
|
||||||
// remet les elements
|
|
||||||
foreach(Element *e, removed_content.elements) {
|
|
||||||
diagram -> addItem(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// remet les conducteurs
|
|
||||||
foreach(Conductor *c, removed_content.conductors(DiagramContent::AnyConductor)) {
|
|
||||||
diagram -> addItem(c);
|
|
||||||
c -> terminal1 -> addConductor(c);
|
|
||||||
c -> terminal2 -> addConductor(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
// remet les textes
|
|
||||||
foreach(DiagramTextItem *t, removed_content.textFields) {
|
|
||||||
diagram -> addItem(t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// refait les suppressions
|
|
||||||
void DeleteElementsCommand::redo() {
|
|
||||||
// enleve les conducteurs
|
|
||||||
foreach(Conductor *c, removed_content.conductors(DiagramContent::AnyConductor)) {
|
|
||||||
c -> terminal1 -> removeConductor(c);
|
|
||||||
c -> terminal2 -> removeConductor(c);
|
|
||||||
diagram -> removeItem(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
// enleve les elements
|
|
||||||
foreach(Element *e, removed_content.elements) {
|
|
||||||
diagram -> removeItem(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// enleve les textes
|
|
||||||
foreach(DiagramTextItem *t, removed_content.textFields) {
|
|
||||||
diagram -> removeItem(t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param dia Schema sur lequel on colle les elements et conducteurs
|
|
||||||
@param c Contenu a coller sur le schema
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
PasteDiagramCommand::PasteDiagramCommand(
|
|
||||||
Diagram *dia,
|
|
||||||
const DiagramContent &c,
|
|
||||||
QUndoCommand *parent
|
|
||||||
) :
|
|
||||||
QUndoCommand(parent),
|
|
||||||
content(c),
|
|
||||||
diagram(dia),
|
|
||||||
filter(DiagramContent::Elements|DiagramContent::TextFields|DiagramContent::ConductorsToMove),
|
|
||||||
first_redo(true)
|
|
||||||
{
|
|
||||||
|
|
||||||
setText(QObject::tr("coller ") + content.sentence(filter));
|
|
||||||
diagram -> qgiManager().manage(content.items(filter));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
PasteDiagramCommand::~PasteDiagramCommand() {
|
|
||||||
diagram -> qgiManager().release(content.items(filter));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// annule le coller
|
|
||||||
void PasteDiagramCommand::undo() {
|
|
||||||
// enleve les conducteurs
|
|
||||||
foreach(Conductor *c, content.conductorsToMove) {
|
|
||||||
c -> terminal1 -> removeConductor(c);
|
|
||||||
c -> terminal2 -> removeConductor(c);
|
|
||||||
diagram -> removeItem(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
// enleve les elements
|
|
||||||
foreach(Element *e, content.elements) diagram -> removeItem(e);
|
|
||||||
|
|
||||||
// enleve les textes
|
|
||||||
foreach(DiagramTextItem *t, content.textFields) diagram -> removeItem(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// refait le coller
|
|
||||||
void PasteDiagramCommand::redo() {
|
|
||||||
if (first_redo) first_redo = false;
|
|
||||||
else {
|
|
||||||
// pose les elements
|
|
||||||
foreach(Element *e, content.elements) diagram -> addItem(e);
|
|
||||||
|
|
||||||
// pose les conducteurs
|
|
||||||
foreach(Conductor *c, content.conductorsToMove) {
|
|
||||||
diagram -> addItem(c);
|
|
||||||
c -> terminal1 -> addConductor(c);
|
|
||||||
c -> terminal2 -> addConductor(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
// pose les textes
|
|
||||||
foreach(DiagramTextItem *t, content.textFields) diagram -> addItem(t);
|
|
||||||
}
|
|
||||||
foreach(Element *e, content.elements) e -> setSelected(true);
|
|
||||||
foreach(Conductor *c, content.conductorsToMove) c -> setSelected(true);
|
|
||||||
foreach(DiagramTextItem *t, content.textFields) t -> setSelected(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param dia Schema dont on coupe des elements et conducteurs
|
|
||||||
@param content Contenu coupe
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
CutDiagramCommand::CutDiagramCommand(
|
|
||||||
Diagram *dia,
|
|
||||||
const DiagramContent &content,
|
|
||||||
QUndoCommand *parent
|
|
||||||
) :
|
|
||||||
DeleteElementsCommand(dia, content, parent)
|
|
||||||
{
|
|
||||||
setText(QObject::tr("couper ") + content.sentence(DiagramContent::All));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
CutDiagramCommand::~CutDiagramCommand() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param dia Schema sur lequel on deplace des elements
|
|
||||||
@param diagram_content Contenu a deplacer
|
|
||||||
@param m translation subie par les elements
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
MoveElementsCommand::MoveElementsCommand(
|
|
||||||
Diagram *dia,
|
|
||||||
const DiagramContent &diagram_content,
|
|
||||||
const QPointF &m,
|
|
||||||
QUndoCommand *parent
|
|
||||||
) :
|
|
||||||
QUndoCommand(parent),
|
|
||||||
diagram(dia),
|
|
||||||
content_to_move(diagram_content),
|
|
||||||
movement(m),
|
|
||||||
first_redo(true)
|
|
||||||
{
|
|
||||||
setText(QObject::tr("d\351placer ") + content_to_move.sentence(DiagramContent::Elements|DiagramContent::TextFields|DiagramContent::ConductorsToUpdate|DiagramContent::ConductorsToMove));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
MoveElementsCommand::~MoveElementsCommand() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/// annule le deplacement
|
|
||||||
void MoveElementsCommand::undo() {
|
|
||||||
move(-movement);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// refait le deplacement
|
|
||||||
void MoveElementsCommand::redo() {
|
|
||||||
if (first_redo) first_redo = false;
|
|
||||||
else move(movement);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
deplace les elements et conducteurs
|
|
||||||
@param actual_movement translation a effectuer sur les elements et conducteurs
|
|
||||||
*/
|
|
||||||
void MoveElementsCommand::move(const QPointF &actual_movement) {
|
|
||||||
// deplace les elements
|
|
||||||
foreach(Element *element, content_to_move.elements) {
|
|
||||||
element -> setPos(element -> pos() + actual_movement);
|
|
||||||
}
|
|
||||||
|
|
||||||
// deplace certains conducteurs
|
|
||||||
foreach(Conductor *conductor, content_to_move.conductorsToMove) {
|
|
||||||
conductor -> setPos(conductor -> pos() + actual_movement);
|
|
||||||
}
|
|
||||||
|
|
||||||
// recalcule les autres conducteurs
|
|
||||||
foreach(Conductor *conductor, content_to_move.conductorsToUpdate.keys()) {
|
|
||||||
conductor -> updateWithNewPos(
|
|
||||||
QRectF(),
|
|
||||||
content_to_move.conductorsToUpdate[conductor],
|
|
||||||
content_to_move.conductorsToUpdate[conductor] -> amarrageConductor()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// deplace les textes
|
|
||||||
foreach(DiagramTextItem *text, content_to_move.textFields) {
|
|
||||||
text -> setPos(text -> pos() + actual_movement);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param dti Champ de texte modifie
|
|
||||||
@param before texte avant
|
|
||||||
@param after texte apres
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
ChangeDiagramTextCommand::ChangeDiagramTextCommand(
|
|
||||||
DiagramTextItem *dti,
|
|
||||||
const QString &before,
|
|
||||||
const QString &after,
|
|
||||||
QUndoCommand *parent
|
|
||||||
) :
|
|
||||||
QUndoCommand(QObject::tr("modifier le texte"), parent),
|
|
||||||
text_item(dti),
|
|
||||||
text_before(before),
|
|
||||||
text_after(after),
|
|
||||||
first_redo(true)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// destructeur
|
|
||||||
ChangeDiagramTextCommand::~ChangeDiagramTextCommand() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/// annule la modification de texte
|
|
||||||
void ChangeDiagramTextCommand::undo() {
|
|
||||||
text_item -> setPlainText(text_before);
|
|
||||||
text_item -> previous_text = text_before;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// refait la modification de texte
|
|
||||||
void ChangeDiagramTextCommand::redo() {
|
|
||||||
if (first_redo) first_redo = false;
|
|
||||||
else {
|
|
||||||
text_item -> setPlainText(text_after);
|
|
||||||
text_item -> previous_text = text_after;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param elements Elements a pivoter associes a leur orientation d'origine
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
RotateElementsCommand::RotateElementsCommand(const QHash<Element *, QET::Orientation> &elements, QUndoCommand *parent) :
|
|
||||||
QUndoCommand(QObject::tr("pivoter ") + QET::ElementsAndConductorsSentence(elements.count(), 0), parent),
|
|
||||||
elements_to_rotate(elements)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
RotateElementsCommand::~RotateElementsCommand() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/// defait le pivotement
|
|
||||||
void RotateElementsCommand::undo() {
|
|
||||||
foreach(Element *e, elements_to_rotate.keys()) {
|
|
||||||
e -> setOrientation(elements_to_rotate[e]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// refait le pivotement
|
|
||||||
void RotateElementsCommand::redo() {
|
|
||||||
foreach(Element *e, elements_to_rotate.keys()) {
|
|
||||||
e -> setOrientation(e -> orientation().next());
|
|
||||||
e -> update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param c Conducteur modifie
|
|
||||||
@param old_p ancien profil du conducteur
|
|
||||||
@param new_p nouveau profil du conducteur
|
|
||||||
@param path_t Trajectoire du trajet modifie
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
ChangeConductorCommand::ChangeConductorCommand(
|
|
||||||
Conductor *c,
|
|
||||||
const ConductorProfile &old_p,
|
|
||||||
const ConductorProfile &new_p,
|
|
||||||
Qt::Corner path_t,
|
|
||||||
QUndoCommand *parent
|
|
||||||
) :
|
|
||||||
QUndoCommand(QObject::tr("modifier un conducteur"), parent),
|
|
||||||
conductor(c),
|
|
||||||
old_profile(old_p),
|
|
||||||
new_profile(new_p),
|
|
||||||
path_type(path_t),
|
|
||||||
first_redo(true)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
ChangeConductorCommand::~ChangeConductorCommand() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Annule la modification du conducteur
|
|
||||||
void ChangeConductorCommand::undo() {
|
|
||||||
conductor -> setProfile(old_profile, path_type);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Refait la modification du conducteur
|
|
||||||
void ChangeConductorCommand::redo() {
|
|
||||||
if (first_redo) first_redo = false;
|
|
||||||
else conductor -> setProfile(new_profile, path_type);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param cp Conducteurs reinitialises, associes a leur ancien profil
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
ResetConductorCommand::ResetConductorCommand(
|
|
||||||
const QHash<Conductor *, ConductorProfilesGroup> &cp,
|
|
||||||
QUndoCommand *parent
|
|
||||||
) :
|
|
||||||
QUndoCommand(QObject::tr("R\351initialiser ") + QET::ElementsAndConductorsSentence(0, cp.count()), parent),
|
|
||||||
conductors_profiles(cp)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
ResetConductorCommand::~ResetConductorCommand() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Annule la reinitialisation des conducteurs
|
|
||||||
void ResetConductorCommand::undo() {
|
|
||||||
foreach(Conductor *c, conductors_profiles.keys()) {
|
|
||||||
c -> setProfiles(conductors_profiles[c]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Refait la reinitialisation des conducteurs
|
|
||||||
void ResetConductorCommand::redo() {
|
|
||||||
foreach(Conductor *c, conductors_profiles.keys()) {
|
|
||||||
c -> setProfiles(ConductorProfilesGroup());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param d Schema dont on modifie le cartouche
|
|
||||||
@param old_ip Anciennes proprietes du cartouche
|
|
||||||
@param new_ip Nouvelles proprietes du cartouche
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
ChangeInsetCommand::ChangeInsetCommand(
|
|
||||||
Diagram *d,
|
|
||||||
const InsetProperties &old_ip,
|
|
||||||
const InsetProperties &new_ip,
|
|
||||||
QUndoCommand *parent
|
|
||||||
) :
|
|
||||||
QUndoCommand(QObject::tr("modifier le cartouche"), parent),
|
|
||||||
diagram(d),
|
|
||||||
old_inset(old_ip),
|
|
||||||
new_inset(new_ip)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
ChangeInsetCommand::~ChangeInsetCommand() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Annule la modification de cartouche
|
|
||||||
void ChangeInsetCommand::undo() {
|
|
||||||
diagram -> border_and_inset.importInset(old_inset);
|
|
||||||
diagram -> invalidate(diagram -> border());
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Refait la modification de cartouche
|
|
||||||
void ChangeInsetCommand::redo() {
|
|
||||||
diagram -> border_and_inset.importInset(new_inset);
|
|
||||||
diagram -> invalidate(diagram -> border());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param dia Schema modifie
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
ChangeBorderCommand::ChangeBorderCommand(Diagram *dia, QUndoCommand *parent) :
|
|
||||||
QUndoCommand(QObject::tr("modifier les dimensions du sch\351ma"), parent),
|
|
||||||
diagram(dia),
|
|
||||||
columnsCountDifference(0),
|
|
||||||
columnsHeightDifference(0.0),
|
|
||||||
columnsWidthDifference(0.0),
|
|
||||||
headersHeightDifference(0.0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
ChangeBorderCommand::~ChangeBorderCommand() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Applique les changements au schema
|
|
||||||
@param coeff comme les changements s'expriment sous forme de nombres dont
|
|
||||||
il suffit d'inverser le signe pour les annuler, ces valeurs sont ici
|
|
||||||
multipliees par le coefficient passe en parametre avant d'etre appliquees.
|
|
||||||
Pour resumer : 1 pour refaire, -1 pour annuler.
|
|
||||||
*/
|
|
||||||
void ChangeBorderCommand::applyChanges(int coeff) {
|
|
||||||
// reference vers l'objet border_and_inset du schema
|
|
||||||
BorderInset &border = diagram -> border_and_inset;
|
|
||||||
if (columnsCountDifference) {
|
|
||||||
border.setNbColumns(border.nbColumn() + (columnsCountDifference * coeff));
|
|
||||||
}
|
|
||||||
if (columnsHeightDifference) {
|
|
||||||
border.setColumnsHeight(border.columnsHeight() + (columnsHeightDifference * coeff));
|
|
||||||
}
|
|
||||||
if (columnsWidthDifference) {
|
|
||||||
border.setColumnsWidth(border.columnsWidth() + (columnsWidthDifference * coeff));
|
|
||||||
}
|
|
||||||
if (headersHeightDifference) {
|
|
||||||
border.setColumnsHeaderHeight(border.columnsHeaderHeight() + (headersHeightDifference * coeff));
|
|
||||||
}
|
|
||||||
border.adjustInsetToColumns();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Annule les changements apportes au schema
|
|
||||||
void ChangeBorderCommand::undo() {
|
|
||||||
applyChanges(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Refait les changements apportes au schema
|
|
||||||
void ChangeBorderCommand::redo() {
|
|
||||||
applyChanges(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param c Le conducteur dont on modifie les proprietes
|
|
||||||
@param parent QUndoCommand parent
|
|
||||||
*/
|
|
||||||
ChangeConductorPropertiesCommand::ChangeConductorPropertiesCommand(Conductor *c, QUndoCommand *parent) :
|
|
||||||
QUndoCommand(QObject::tr("modifier les propri\351t\351s d'un conducteur"), parent),
|
|
||||||
conductor(c),
|
|
||||||
old_settings_set(false),
|
|
||||||
new_settings_set(false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
ChangeConductorPropertiesCommand::~ChangeConductorPropertiesCommand() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/// definit l'ancienne configuration
|
|
||||||
void ChangeConductorPropertiesCommand::setOldSettings(const ConductorProperties &properties) {
|
|
||||||
old_properties = properties;
|
|
||||||
old_settings_set = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// definit la nouvelle configuration
|
|
||||||
void ChangeConductorPropertiesCommand::setNewSettings(const ConductorProperties &properties) {
|
|
||||||
new_properties = properties;
|
|
||||||
new_settings_set = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Annule les changements - Attention : les anciens et nouveaux parametres
|
|
||||||
doivent avoir ete definis a l'aide de setNewSettings et setOldSettings
|
|
||||||
*/
|
|
||||||
void ChangeConductorPropertiesCommand::undo() {
|
|
||||||
if (old_settings_set && new_settings_set) {
|
|
||||||
conductor -> setProperties(old_properties);
|
|
||||||
conductor -> update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Refait les changements - Attention : les anciens et nouveaux parametres
|
|
||||||
doivent avoir ete definis a l'aide de setNewSettings et setOldSettings
|
|
||||||
*/
|
|
||||||
void ChangeConductorPropertiesCommand::redo() {
|
|
||||||
if (old_settings_set && new_settings_set) {
|
|
||||||
conductor -> setProperties(new_properties);
|
|
||||||
conductor -> update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,200 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "diagramtextitem.h"
|
|
||||||
#include "diagramcommands.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param parent Le QGraphicsItem parent du champ de texte
|
|
||||||
@param scene La scene a laquelle appartient le champ de texte
|
|
||||||
*/
|
|
||||||
DiagramTextItem::DiagramTextItem(QGraphicsItem *parent, QGraphicsScene *scene) :
|
|
||||||
QGraphicsTextItem(parent, scene)
|
|
||||||
{
|
|
||||||
setDefaultTextColor(Qt::black);
|
|
||||||
setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
|
|
||||||
connect(this, SIGNAL(lostFocus()), this, SLOT(setNonFocusable()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param parent Le QGraphicsItem parent du champ de texte
|
|
||||||
@param scene La scene a laquelle appartient le champ de texte
|
|
||||||
@param text Le texte affiche par le champ de texte
|
|
||||||
*/
|
|
||||||
DiagramTextItem::DiagramTextItem(const QString &text, QGraphicsItem *parent, QGraphicsScene *scene) :
|
|
||||||
QGraphicsTextItem(text, parent, scene),
|
|
||||||
previous_text(text)
|
|
||||||
{
|
|
||||||
setDefaultTextColor(Qt::black);
|
|
||||||
setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
|
|
||||||
connect(this, SIGNAL(lostFocus()), this, SLOT(setNonFocusable()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
DiagramTextItem::~DiagramTextItem() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @return le Diagram auquel ce texte appartient, ou 0 si ce texte est independant
|
|
||||||
Diagram *DiagramTextItem::diagram() const {
|
|
||||||
return(qobject_cast<Diagram *>(scene()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
gere la perte de focus du champ de texte
|
|
||||||
*/
|
|
||||||
void DiagramTextItem::focusOutEvent(QFocusEvent *e) {
|
|
||||||
QGraphicsTextItem::focusOutEvent(e);
|
|
||||||
// si le texte a ete modifie
|
|
||||||
if (toPlainText() != previous_text) {
|
|
||||||
if (Diagram *dia = diagram()) {
|
|
||||||
dia -> undoStack().push(new ChangeDiagramTextCommand(this, previous_text, toPlainText()));
|
|
||||||
previous_text = toPlainText();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// deselectionne le texte
|
|
||||||
QTextCursor cursor = textCursor();
|
|
||||||
cursor.clearSelection();
|
|
||||||
setTextCursor(cursor);
|
|
||||||
|
|
||||||
if (flags() & QGraphicsItem::ItemIsMovable) {
|
|
||||||
// hack a la con pour etre re-entrant
|
|
||||||
setTextInteractionFlags(Qt::NoTextInteraction);
|
|
||||||
QTimer::singleShot(0, this, SIGNAL(lostFocus()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Permet de lire le texte a mettre dans le champ a partir d'un element XML.
|
|
||||||
Cette methode se base sur la position du champ pour assigner ou non la
|
|
||||||
valeur a ce champ.
|
|
||||||
@param e L'element XML representant le champ de texte
|
|
||||||
*/
|
|
||||||
void DiagramTextItem::fromXml(const QDomElement &e) {
|
|
||||||
setPos(e.attribute("x").toDouble(), e.attribute("y").toDouble());
|
|
||||||
setPlainText(e.attribute("text"));
|
|
||||||
previous_text = e.attribute("text");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@param document Le document XML a utiliser
|
|
||||||
@return L'element XML representant ce champ de texte
|
|
||||||
*/
|
|
||||||
QDomElement DiagramTextItem::toXml(QDomDocument &document) const {
|
|
||||||
QDomElement result = document.createElement("input");
|
|
||||||
result.setAttribute("x", pos().x());
|
|
||||||
result.setAttribute("y", pos().y());
|
|
||||||
result.setAttribute("text", toPlainText());
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere les double-clics sur ce champ de texte.
|
|
||||||
@param event un QGraphicsSceneMouseEvent decrivant le double-clic
|
|
||||||
*/
|
|
||||||
void DiagramTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) {
|
|
||||||
if (flags() & QGraphicsItem::ItemIsMovable && !(textInteractionFlags() & Qt::TextEditable)) {
|
|
||||||
// rend le champ de texte editable
|
|
||||||
setTextInteractionFlags(Qt::TextEditorInteraction);
|
|
||||||
|
|
||||||
// simule un clic simple, ce qui edite le champ de texte
|
|
||||||
QGraphicsSceneMouseEvent *mouseEvent = new QGraphicsSceneMouseEvent(QEvent::GraphicsSceneMousePress);
|
|
||||||
mouseEvent -> setAccepted(true);
|
|
||||||
mouseEvent -> setPos(event -> pos());
|
|
||||||
mouseEvent -> setScenePos(event -> scenePos());
|
|
||||||
mouseEvent -> setScreenPos(event -> screenPos());
|
|
||||||
mouseEvent -> setButtonDownPos(Qt::LeftButton, event -> buttonDownPos(Qt::LeftButton));
|
|
||||||
mouseEvent -> setButtonDownScreenPos(Qt::LeftButton, event -> buttonDownScreenPos(Qt::LeftButton));
|
|
||||||
mouseEvent -> setButtonDownScenePos(Qt::LeftButton, event -> buttonDownScenePos(Qt::LeftButton));
|
|
||||||
mouseEvent -> setWidget(event -> widget());
|
|
||||||
QGraphicsTextItem::mousePressEvent(mouseEvent);
|
|
||||||
delete mouseEvent;
|
|
||||||
} else {
|
|
||||||
QGraphicsTextItem::mouseDoubleClickEvent(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere les mouvements de souris lies au champ de texte
|
|
||||||
*/
|
|
||||||
void DiagramTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
|
|
||||||
if (textInteractionFlags() & Qt::TextEditable) {
|
|
||||||
QGraphicsTextItem::mouseMoveEvent(e);
|
|
||||||
} else if ((flags() & QGraphicsItem::ItemIsMovable) && (e -> buttons() & Qt::LeftButton)) {
|
|
||||||
QPointF oldPos = pos();
|
|
||||||
setPos(mapToParent(e -> pos()) - matrix().map(e -> buttonDownPos(Qt::LeftButton)));
|
|
||||||
if (Diagram *diagram_ptr = diagram()) {
|
|
||||||
diagram_ptr -> moveElements(pos() - oldPos, this);
|
|
||||||
}
|
|
||||||
} else e -> ignore();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere le relachement de souris
|
|
||||||
Cette methode a ete reimplementee pour tenir a jour la liste des elements
|
|
||||||
et conducteurs a deplacer au niveau du schema.
|
|
||||||
*/
|
|
||||||
void DiagramTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
|
|
||||||
if (Diagram *diagram_ptr = diagram()) {
|
|
||||||
if ((flags() & QGraphicsItem::ItemIsMovable) && (!diagram_ptr -> current_movement.isNull())) {
|
|
||||||
diagram_ptr -> undoStack().push(
|
|
||||||
new MoveElementsCommand(
|
|
||||||
diagram_ptr,
|
|
||||||
diagram_ptr -> selectedContent(),
|
|
||||||
diagram_ptr -> current_movement
|
|
||||||
)
|
|
||||||
);
|
|
||||||
diagram_ptr -> current_movement = QPointF();
|
|
||||||
}
|
|
||||||
diagram_ptr -> invalidateMovedElements();
|
|
||||||
}
|
|
||||||
QGraphicsTextItem::mouseReleaseEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Change la position du champ de texte en veillant a ce qu'il
|
|
||||||
reste sur la grille du schema auquel il appartient.
|
|
||||||
@param p Nouvelles coordonnees de l'element
|
|
||||||
*/
|
|
||||||
void DiagramTextItem::setPos(const QPointF &p) {
|
|
||||||
if (p == pos()) return;
|
|
||||||
// pas la peine de positionner sur la grille si l'element n'est pas sur un Diagram
|
|
||||||
if (scene()) {
|
|
||||||
// arrondit l'abscisse a 10 px pres
|
|
||||||
int p_x = qRound(p.x() / (Diagram::xGrid * 1.0)) * Diagram::xGrid;
|
|
||||||
// arrondit l'ordonnee a 10 px pres
|
|
||||||
int p_y = qRound(p.y() / (Diagram::yGrid * 1.0)) * Diagram::yGrid;
|
|
||||||
QGraphicsTextItem::setPos(p_x, p_y);
|
|
||||||
} else QGraphicsTextItem::setPos(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Change la position du champ de texte en veillant a ce que l'il
|
|
||||||
reste sur la grille du schema auquel il appartient.
|
|
||||||
@param x Nouvelle abscisse de l'element
|
|
||||||
@param y Nouvelle ordonnee de l'element
|
|
||||||
*/
|
|
||||||
void DiagramTextItem::setPos(qreal x, qreal y) {
|
|
||||||
setPos(QPointF(x, y));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Rend le champ de texte non focusable
|
|
||||||
void DiagramTextItem::setNonFocusable() {
|
|
||||||
setFlag(QGraphicsTextItem::ItemIsFocusable, false);
|
|
||||||
}
|
|
||||||
960
diagramview.cpp
960
diagramview.cpp
@@ -1,960 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "diagramview.h"
|
|
||||||
#include "diagram.h"
|
|
||||||
#include "customelement.h"
|
|
||||||
#include "exportdialog.h"
|
|
||||||
#include "conductor.h"
|
|
||||||
#include "diagramcommands.h"
|
|
||||||
#include "conductorpropertieswidget.h"
|
|
||||||
#include "insetpropertieswidget.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param parent Le QWidegt parent de cette vue de schema
|
|
||||||
*/
|
|
||||||
DiagramView::DiagramView(QWidget *parent) : QGraphicsView(parent), is_adding_text(false) {
|
|
||||||
setInteractive(true);
|
|
||||||
setCacheMode(QGraphicsView::CacheBackground);
|
|
||||||
setOptimizationFlags(QGraphicsView::DontSavePainterState|QGraphicsView::DontAdjustForAntialiasing);
|
|
||||||
|
|
||||||
// active l'antialiasing
|
|
||||||
setRenderHint(QPainter::Antialiasing, true);
|
|
||||||
setRenderHint(QPainter::TextAntialiasing, true);
|
|
||||||
setRenderHint(QPainter::SmoothPixmapTransform, true);
|
|
||||||
|
|
||||||
setScene(scene = new Diagram(this));
|
|
||||||
scene -> undoStack().setClean();
|
|
||||||
setDragMode(RubberBandDrag);
|
|
||||||
setAcceptDrops(true);
|
|
||||||
setWindowIcon(QIcon(":/ico/qet-16.png"));
|
|
||||||
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
|
|
||||||
setResizeAnchor(QGraphicsView::AnchorUnderMouse);
|
|
||||||
setAlignment(Qt::AlignLeft | Qt::AlignTop);
|
|
||||||
adjustSceneRect();
|
|
||||||
updateWindowTitle();
|
|
||||||
|
|
||||||
context_menu = new QMenu(this);
|
|
||||||
paste_here = new QAction(QIcon(":/ico/paste.png"), tr("Coller ici"), this);
|
|
||||||
connect(paste_here, SIGNAL(triggered()), this, SLOT(pasteHere()));
|
|
||||||
|
|
||||||
connect(scene, SIGNAL(selectionEmptinessChanged()), this, SIGNAL(selectionChanged()));
|
|
||||||
connect(&(scene -> border_and_inset), SIGNAL(borderChanged(QRectF, QRectF)), this, SLOT(adjustSceneRect()));
|
|
||||||
connect(&(scene -> undoStack()), SIGNAL(cleanChanged(bool)), this, SLOT(updateWindowTitle()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Destructeur
|
|
||||||
*/
|
|
||||||
DiagramView::~DiagramView() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
appelle la methode select sur tous les elements de la liste d'elements
|
|
||||||
*/
|
|
||||||
void DiagramView::selectAll() {
|
|
||||||
if (scene -> items().isEmpty()) return;
|
|
||||||
QPainterPath path;
|
|
||||||
path.addRect(scene -> itemsBoundingRect());
|
|
||||||
scene -> setSelectionArea(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
appelle la methode deselect sur tous les elements de la liste d'elements
|
|
||||||
*/
|
|
||||||
void DiagramView::selectNothing() {
|
|
||||||
if (scene -> items().isEmpty()) return;
|
|
||||||
scene -> clearSelection();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Inverse l'etat de selection de tous les elements de la liste d'elements
|
|
||||||
*/
|
|
||||||
void DiagramView::selectInvert() {
|
|
||||||
if (scene -> items().isEmpty()) return;
|
|
||||||
foreach (QGraphicsItem *item, scene -> items()) item -> setSelected(!item -> isSelected());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Supprime les composants selectionnes
|
|
||||||
*/
|
|
||||||
void DiagramView::deleteSelection() {
|
|
||||||
DiagramContent removed_content = scene -> selectedContent();
|
|
||||||
scene -> clearSelection();
|
|
||||||
scene -> undoStack().push(new DeleteElementsCommand(scene, removed_content));
|
|
||||||
adjustSceneRect();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Pivote les composants selectionnes
|
|
||||||
*/
|
|
||||||
void DiagramView::rotateSelection() {
|
|
||||||
QHash<Element *, QET::Orientation> elements_to_rotate;
|
|
||||||
foreach (QGraphicsItem *item, scene -> selectedItems()) {
|
|
||||||
if (Element *e = qgraphicsitem_cast<Element *>(item)) {
|
|
||||||
elements_to_rotate.insert(e, e -> orientation().current());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (elements_to_rotate.isEmpty()) return;
|
|
||||||
scene -> undoStack().push(new RotateElementsCommand(elements_to_rotate));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
accepte ou refuse le drag'n drop en fonction du type de donnees entrant
|
|
||||||
@param e le QDragEnterEvent correspondant au drag'n drop tente
|
|
||||||
*/
|
|
||||||
void DiagramView::dragEnterEvent(QDragEnterEvent *e) {
|
|
||||||
if (e -> mimeData() -> hasFormat("text/plain")) e -> acceptProposedAction();
|
|
||||||
else e-> ignore();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
gere les dragleaveevent
|
|
||||||
@param e le QDragEnterEvent correspondant au drag'n drop sortant
|
|
||||||
*/
|
|
||||||
void DiagramView::dragLeaveEvent(QDragLeaveEvent *) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
accepte ou refuse le drag'n drop en fonction du type de donnees entrant
|
|
||||||
@param e le QDragMoveEvent correspondant au drag'n drop tente
|
|
||||||
*/
|
|
||||||
void DiagramView::dragMoveEvent(QDragMoveEvent *e) {
|
|
||||||
if (e -> mimeData() -> hasFormat("text/plain")) e -> acceptProposedAction();
|
|
||||||
else e-> ignore();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
gere les depots (drop) acceptes sur le Diagram
|
|
||||||
@param e le QDropEvent correspondant au drag'n drop effectue
|
|
||||||
*/
|
|
||||||
void DiagramView::dropEvent(QDropEvent *e) {
|
|
||||||
QString fichier = e -> mimeData() -> text();
|
|
||||||
int etat;
|
|
||||||
Element *el = new CustomElement(fichier, 0, 0, &etat);
|
|
||||||
if (etat) delete el;
|
|
||||||
else {
|
|
||||||
diagram() -> undoStack().push(new AddElementCommand(diagram(), el, mapToScene(e -> pos())));
|
|
||||||
adjustSceneRect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe le Diagram en mode visualisation
|
|
||||||
*/
|
|
||||||
void DiagramView::setVisualisationMode() {
|
|
||||||
setDragMode(ScrollHandDrag);
|
|
||||||
setInteractive(false);
|
|
||||||
emit(modeChanged());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe le Diagram en mode Selection
|
|
||||||
*/
|
|
||||||
void DiagramView::setSelectionMode() {
|
|
||||||
setDragMode(RubberBandDrag);
|
|
||||||
setInteractive(true);
|
|
||||||
emit(modeChanged());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Agrandit le schema (+33% = inverse des -25 % de zoomMoins())
|
|
||||||
*/
|
|
||||||
void DiagramView::zoomIn() {
|
|
||||||
scale(4.0/3.0, 4.0/3.0);
|
|
||||||
adjustGridToZoom();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Retrecit le schema (-25% = inverse des +33 % de zoomPlus())
|
|
||||||
*/
|
|
||||||
void DiagramView::zoomOut() {
|
|
||||||
scale(0.75, 0.75);
|
|
||||||
adjustGridToZoom();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Agrandit ou rectrecit le schema de facon a ce que tous les elements du
|
|
||||||
schema soient visibles a l'ecran. S'il n'y a aucun element sur le schema,
|
|
||||||
le zoom est reinitialise
|
|
||||||
*/
|
|
||||||
void DiagramView::zoomFit() {
|
|
||||||
adjustSceneRect();
|
|
||||||
fitInView(sceneRect(), Qt::KeepAspectRatio);
|
|
||||||
adjustGridToZoom();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Reinitialise le zoom
|
|
||||||
*/
|
|
||||||
void DiagramView::zoomReset() {
|
|
||||||
resetMatrix();
|
|
||||||
adjustGridToZoom();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
copie les elements selectionnes du schema dans le presse-papier puis les supprime
|
|
||||||
*/
|
|
||||||
void DiagramView::cut() {
|
|
||||||
copy();
|
|
||||||
DiagramContent cut_content = scene -> selectedContent();
|
|
||||||
scene -> clearSelection();
|
|
||||||
scene -> undoStack().push(new CutDiagramCommand(scene, cut_content));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
copie les elements selectionnes du schema dans le presse-papier
|
|
||||||
*/
|
|
||||||
void DiagramView::copy() {
|
|
||||||
QClipboard *presse_papier = QApplication::clipboard();
|
|
||||||
QString contenu_presse_papier = scene -> toXml(false).toString(4);
|
|
||||||
if (presse_papier -> supportsSelection()) presse_papier -> setText(contenu_presse_papier, QClipboard::Selection);
|
|
||||||
presse_papier -> setText(contenu_presse_papier);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Importe les elements contenus dans le presse-papier dans le schema
|
|
||||||
@param pos coin superieur gauche (en coordonnees de la scene) du rectangle
|
|
||||||
englobant le contenu colle
|
|
||||||
@param clipboard_mode Type de presse-papier a prendre en compte
|
|
||||||
*/
|
|
||||||
void DiagramView::paste(const QPointF &pos, QClipboard::Mode clipboard_mode) {
|
|
||||||
QString texte_presse_papier = QApplication::clipboard() -> text(clipboard_mode);
|
|
||||||
if ((texte_presse_papier).isEmpty()) return;
|
|
||||||
|
|
||||||
QDomDocument document_xml;
|
|
||||||
if (!document_xml.setContent(texte_presse_papier)) return;
|
|
||||||
|
|
||||||
// objet pour recuperer le contenu ajoute au schema par le coller
|
|
||||||
DiagramContent content_pasted;
|
|
||||||
scene -> fromXml(document_xml, pos, false, &content_pasted);
|
|
||||||
|
|
||||||
// si quelque chose a effectivement ete ajoute au schema, on cree un objet d'annulation
|
|
||||||
if (content_pasted.count()) {
|
|
||||||
scene -> clearSelection();
|
|
||||||
scene -> undoStack().push(new PasteDiagramCommand(scene, content_pasted));
|
|
||||||
adjustSceneRect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Colle le contenu du presse-papier sur le schema a la position de la souris
|
|
||||||
void DiagramView::pasteHere() {
|
|
||||||
paste(mapToScene(paste_here_pos));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
gere les clics et plus particulierement le clic du milieu (= coller pour X11)
|
|
||||||
*/
|
|
||||||
void DiagramView::mousePressEvent(QMouseEvent *e) {
|
|
||||||
if (e -> buttons() == Qt::MidButton) {
|
|
||||||
paste(mapToScene(e -> pos()), QClipboard::Selection);
|
|
||||||
} else {
|
|
||||||
if (is_adding_text && e -> buttons() == Qt::LeftButton) {
|
|
||||||
DiagramTextItem *dti = new DiagramTextItem();
|
|
||||||
dti -> setPlainText("_");
|
|
||||||
dti -> previous_text = "_";
|
|
||||||
scene -> undoStack().push(new AddTextCommand(scene, dti, e -> pos()));
|
|
||||||
adjustSceneRect();
|
|
||||||
is_adding_text = false;
|
|
||||||
emit(textAdded(false));
|
|
||||||
}
|
|
||||||
QGraphicsView::mousePressEvent(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Ouvre un fichier *.qet dans cette DiagramView
|
|
||||||
@param n_fichier Nom du fichier a ouvrir
|
|
||||||
@param erreur Si le pointeur est specifie, cet entier est mis a 0 en cas de reussite de l'ouverture, 1 si le fichier n'existe pas, 2 si le fichier n'est pas lisible, 3 si le fichier n'est pas un element XML, 4 si l'ouverture du fichier a echoue pour une autre raison (c'est pas ca qui manque ^^)
|
|
||||||
@return true si l'ouverture a reussi, false sinon
|
|
||||||
*/
|
|
||||||
bool DiagramView::open(QString n_fichier, int *erreur) {
|
|
||||||
// verifie l'existence du fichier
|
|
||||||
if (!QFileInfo(n_fichier).exists()) {
|
|
||||||
if (erreur != NULL) *erreur = 1;
|
|
||||||
return(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ouvre le fichier
|
|
||||||
QFile fichier(n_fichier);
|
|
||||||
if (!fichier.open(QIODevice::ReadOnly)) {
|
|
||||||
if (erreur != NULL) *erreur = 2;
|
|
||||||
return(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// lit son contenu dans un QDomDocument
|
|
||||||
QDomDocument document;
|
|
||||||
if (!document.setContent(&fichier)) {
|
|
||||||
if (erreur != NULL) *erreur = 3;
|
|
||||||
fichier.close();
|
|
||||||
return(false);
|
|
||||||
}
|
|
||||||
fichier.close();
|
|
||||||
|
|
||||||
/**
|
|
||||||
La notion de projet (ensemble de documents [schemas, nomenclatures,
|
|
||||||
...] et d'elements) n'est pas encore geree.
|
|
||||||
Toutefois, pour gerer au mieux la transition de la 0.1 a la 0.2,
|
|
||||||
les schemas enregistres (element XML "diagram") sont integres dans un
|
|
||||||
pseudo projet (element XML "project").
|
|
||||||
S'il y a plusieurs schemas dans un projet, tous les schemas seront
|
|
||||||
ouverts comme etant des fichiers separes
|
|
||||||
*/
|
|
||||||
// repere les schemas dans le fichier
|
|
||||||
QDomElement root = document.documentElement();
|
|
||||||
// cas 1 : l'element racine est un "diagram" : un seul schema, pas de probleme
|
|
||||||
if (root.tagName() == "diagram") {
|
|
||||||
// construit le schema a partir du QDomDocument
|
|
||||||
QDomDocument &doc = document;
|
|
||||||
if (scene -> fromXml(doc)) {
|
|
||||||
if (erreur != NULL) *erreur = 0;
|
|
||||||
file_name = n_fichier;
|
|
||||||
scene -> undoStack().setClean();
|
|
||||||
updateWindowTitle();
|
|
||||||
return(true);
|
|
||||||
} else {
|
|
||||||
if (erreur != NULL) *erreur = 4;
|
|
||||||
return(false);
|
|
||||||
}
|
|
||||||
// cas 2 : l'element racine est un "project"
|
|
||||||
} else if (root.tagName() == "project") {
|
|
||||||
// verifie basiquement que la version actuelle est capable de lire ce fichier
|
|
||||||
if (root.hasAttribute("version")) {
|
|
||||||
bool conv_ok;
|
|
||||||
qreal diagram_version = root.attribute("version").toDouble(&conv_ok);
|
|
||||||
if (conv_ok && QET::version.toDouble() < diagram_version) {
|
|
||||||
QMessageBox::warning(
|
|
||||||
0,
|
|
||||||
tr("Avertissement"),
|
|
||||||
tr("Ce document semble avoir \351t\351 enregistr\351 avec une "
|
|
||||||
"version ult\351rieure de QElectroTech. Il est possible que "
|
|
||||||
"l'ouverture de tout ou partie de ce document \351choue.")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// compte le nombre de schemas dans le projet
|
|
||||||
QList<QDomElement> diagrams;
|
|
||||||
|
|
||||||
QDomNodeList diagram_nodes = root.elementsByTagName("diagram");
|
|
||||||
for (uint i = 0 ; i < diagram_nodes.length() ; ++ i) {
|
|
||||||
if (diagram_nodes.at(i).isElement()) {
|
|
||||||
diagrams << diagram_nodes.at(i).toElement();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// il n'y aucun schema la-dedans
|
|
||||||
if (!diagrams.count()) {
|
|
||||||
if (erreur != NULL) *erreur = 4;
|
|
||||||
return(false);
|
|
||||||
} else {
|
|
||||||
|
|
||||||
bool keep_doc_name = diagrams.count() == 1;
|
|
||||||
bool current_dv_loaded = false;
|
|
||||||
for (int i = 0 ; i < diagrams.count() ; ++ i) {
|
|
||||||
// cree un QDomDocument representant le schema
|
|
||||||
QDomDocument diagram_doc;
|
|
||||||
diagram_doc.appendChild(diagram_doc.importNode(diagrams[i], true));
|
|
||||||
|
|
||||||
// charge le premier schema valide et cree de nouveau DiagramView pour les suivants
|
|
||||||
if (!current_dv_loaded) {
|
|
||||||
if (scene -> fromXml(diagram_doc)) {
|
|
||||||
if (keep_doc_name) file_name = n_fichier;
|
|
||||||
scene -> undoStack().setClean();
|
|
||||||
updateWindowTitle();
|
|
||||||
current_dv_loaded = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
DiagramView *new_dv = new DiagramView(parentWidget());
|
|
||||||
if (new_dv -> scene -> fromXml(diagram_doc)) {
|
|
||||||
if (keep_doc_name) new_dv -> file_name = n_fichier;
|
|
||||||
new_dv -> scene -> undoStack().setClean();
|
|
||||||
new_dv -> updateWindowTitle();
|
|
||||||
diagramEditor() -> addDiagramView(new_dv);
|
|
||||||
} else {
|
|
||||||
delete(new_dv);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (erreur != NULL) *erreur = 4;
|
|
||||||
return(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere la fermeture du schema.
|
|
||||||
@param event Le QCloseEvent decrivant l'evenement
|
|
||||||
*/
|
|
||||||
void DiagramView::closeEvent(QCloseEvent *event) {
|
|
||||||
bool retour;
|
|
||||||
// si le schema est modifie
|
|
||||||
if (!isWindowModified()) {
|
|
||||||
retour = true;
|
|
||||||
} else {
|
|
||||||
// demande d'abord a l'utilisateur s'il veut enregistrer le schema en cours
|
|
||||||
QMessageBox::StandardButton reponse = QMessageBox::question(
|
|
||||||
this,
|
|
||||||
tr("Enregistrer le sch\351ma en cours ?"),
|
|
||||||
tr("Voulez-vous enregistrer le sch\351ma ") + windowTitle() + tr(" ?"),
|
|
||||||
QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,
|
|
||||||
QMessageBox::Cancel
|
|
||||||
);
|
|
||||||
switch(reponse) {
|
|
||||||
case QMessageBox::Cancel: retour = false; break; // l'utilisateur annule : echec de la fermeture
|
|
||||||
case QMessageBox::Yes: retour = save(); break; // l'utilisateur dit oui : la reussite depend de l'enregistrement
|
|
||||||
default: retour = true; // l'utilisateur dit non ou ferme le dialogue: c'est reussi
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (retour) {
|
|
||||||
event -> accept();
|
|
||||||
delete this;
|
|
||||||
} else event -> ignore();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Methode enregistrant le schema dans le dernier nom de fichier connu.
|
|
||||||
Si aucun nom de fichier n'est connu, cette methode appelle la methode saveAs
|
|
||||||
@return true si l'enregistrement a reussi, false sinon
|
|
||||||
*/
|
|
||||||
bool DiagramView::save() {
|
|
||||||
if (file_name.isEmpty()) return(saveAs());
|
|
||||||
else return(saveDiagramToFile(file_name));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Cette methode demande un nom de fichier a l'utilisateur pour enregistrer le schema
|
|
||||||
Si aucun nom n'est entre, elle renvoie faux.
|
|
||||||
Si le nom ne se termine pas par l'extension .qet, celle-ci est ajoutee.
|
|
||||||
Si l'enregistrement reussit, le nom du fichier est conserve et la fonction renvoie true.
|
|
||||||
Sinon, faux est renvoye.
|
|
||||||
@return true si l'enregistrement a reussi, false sinon
|
|
||||||
*/
|
|
||||||
bool DiagramView::saveAs() {
|
|
||||||
// demande un nom de fichier a l'utilisateur pour enregistrer le schema
|
|
||||||
QString n_fichier = QFileDialog::getSaveFileName(
|
|
||||||
this,
|
|
||||||
tr("Enregistrer sous"),
|
|
||||||
(file_name.isEmpty() ? QDir::homePath() : QDir(file_name)).absolutePath(),
|
|
||||||
tr("Sch\351ma QElectroTech (*.qet)")
|
|
||||||
);
|
|
||||||
// si aucun nom n'est entre, renvoie faux.
|
|
||||||
if (n_fichier.isEmpty()) return(false);
|
|
||||||
// si le nom ne se termine pas par l'extension .qet, celle-ci est ajoutee
|
|
||||||
if (!n_fichier.endsWith(".qet", Qt::CaseInsensitive)) n_fichier += ".qet";
|
|
||||||
// tente d'enregistrer le fichier
|
|
||||||
bool resultat_enregistrement = saveDiagramToFile(n_fichier);
|
|
||||||
// si l'enregistrement reussit, le nom du fichier est conserve
|
|
||||||
if (resultat_enregistrement) {
|
|
||||||
file_name = n_fichier;
|
|
||||||
updateWindowTitle();
|
|
||||||
}
|
|
||||||
// retourne un booleen representatif de la reussite de l'enregistrement
|
|
||||||
return(resultat_enregistrement);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere les actions liees a la rollette de la souris
|
|
||||||
@param e QWheelEvent decrivant l'evenement rollette
|
|
||||||
*/
|
|
||||||
void DiagramView::wheelEvent(QWheelEvent *e) {
|
|
||||||
// si la touche Ctrl est enfoncee, on zoome / dezoome
|
|
||||||
if (e -> modifiers() & Qt::ControlModifier) {
|
|
||||||
if (e -> delta() > 0) {
|
|
||||||
zoomIn();
|
|
||||||
} else {
|
|
||||||
zoomOut();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
QAbstractScrollArea::wheelEvent(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Methode privee gerant l'enregistrement du fichier XML. S'il n'est pas possible
|
|
||||||
d'ecrire dans le fichier, cette fonction affiche un message d'erreur et renvoie false.
|
|
||||||
Autrement, elle renvoie true.
|
|
||||||
@param n_fichier Nom du fichier dans lequel l'arbre XML doit etre ecrit
|
|
||||||
@return true si l'enregistrement a reussi, false sinon
|
|
||||||
*/
|
|
||||||
bool DiagramView::saveDiagramToFile(QString &n_fichier) {
|
|
||||||
QFile fichier(n_fichier);
|
|
||||||
if (!fichier.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
|
||||||
QMessageBox::warning(this, tr("Erreur"), tr("Impossible d'ecrire dans ce fichier"));
|
|
||||||
return(false);
|
|
||||||
}
|
|
||||||
QTextStream out(&fichier);
|
|
||||||
out.setCodec("UTF-8");
|
|
||||||
|
|
||||||
// l'export XML du schema est encapsule dans un pseudo-projet
|
|
||||||
QDomDocument final_document;
|
|
||||||
QDomElement project_root = final_document.createElement("project");
|
|
||||||
project_root.setAttribute("version", QET::version);
|
|
||||||
project_root.appendChild(final_document.importNode(scene -> toXml().documentElement(), true));
|
|
||||||
final_document.appendChild(project_root);
|
|
||||||
|
|
||||||
out << final_document.toString(4);
|
|
||||||
fichier.close();
|
|
||||||
scene -> undoStack().setClean();
|
|
||||||
return(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Exporte le schema.
|
|
||||||
*/
|
|
||||||
void DiagramView::dialogExport() {
|
|
||||||
ExportDialog ed(scene, this);
|
|
||||||
ed.exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Imprime le schema.
|
|
||||||
*/
|
|
||||||
void DiagramView::dialogPrint() {
|
|
||||||
// initialise l'acces a l'imprimante
|
|
||||||
QPrinter qprin;
|
|
||||||
#ifndef Q_OS_WIN32
|
|
||||||
qprin.setOutputFormat(QPrinter::PdfFormat);
|
|
||||||
#endif
|
|
||||||
qprin.setOrientation(QPrinter::Landscape);
|
|
||||||
qprin.setPageSize(QPrinter::A4);
|
|
||||||
QPrintDialog qpd(&qprin, this);
|
|
||||||
|
|
||||||
if (qpd.exec() == QDialog::Accepted) {
|
|
||||||
QPainter qp(&qprin);
|
|
||||||
// impression physique (!= fichier PDF)
|
|
||||||
if (qprin.outputFileName().isEmpty()) {
|
|
||||||
// lorsqu'on imprime en paysage sur imprimante reelle, il faut pivoter soi-meme le rendu
|
|
||||||
if (qprin.orientation() == QPrinter::Landscape) {
|
|
||||||
qp.rotate(90.0);
|
|
||||||
qp.translate(0.0, -qprin.pageRect().height());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
scene -> setDisplayGrid(false);
|
|
||||||
scene -> setDrawTerminals(false);
|
|
||||||
scene -> render(&qp, QRectF(), scene -> border(), Qt::KeepAspectRatio);
|
|
||||||
scene -> setDrawTerminals(true);
|
|
||||||
scene -> setDisplayGrid(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Edite les informations du schema.
|
|
||||||
*/
|
|
||||||
void DiagramView::dialogEditInfos() {
|
|
||||||
// recupere le cartouche du schema
|
|
||||||
InsetProperties inset = scene -> border_and_inset.exportInset();
|
|
||||||
|
|
||||||
// recupere les dimensions du schema
|
|
||||||
int columns_count_value = scene -> border_and_inset.nbColumn();
|
|
||||||
int columns_width_value = qRound(scene -> border_and_inset.columnsWidth());
|
|
||||||
int columns_height_value = qRound(scene -> border_and_inset.columnsHeight());
|
|
||||||
|
|
||||||
// construit le dialogue
|
|
||||||
QDialog popup;
|
|
||||||
popup.setMinimumWidth(400);
|
|
||||||
popup.setWindowTitle(tr("Propri\351t\351s du sch\351ma"));
|
|
||||||
|
|
||||||
QGroupBox *diagram_size_box = new QGroupBox(tr("Dimensions du sch\351ma"), &popup);
|
|
||||||
QGridLayout diagram_size_box_layout(diagram_size_box);
|
|
||||||
|
|
||||||
QLabel *ds1 = new QLabel(tr("Colonnes :"));
|
|
||||||
|
|
||||||
QSpinBox *columns_count = new QSpinBox(diagram_size_box);
|
|
||||||
columns_count -> setMinimum(scene -> border_and_inset.minNbColumns());
|
|
||||||
columns_count -> setValue(columns_count_value);
|
|
||||||
|
|
||||||
QSpinBox *columns_width = new QSpinBox(diagram_size_box);
|
|
||||||
columns_width -> setMinimum(1);
|
|
||||||
columns_width -> setSingleStep(10);
|
|
||||||
columns_width -> setValue(columns_width_value);
|
|
||||||
columns_width -> setPrefix(tr("\327"));
|
|
||||||
columns_width -> setSuffix(tr("px"));
|
|
||||||
|
|
||||||
QLabel *ds2 = new QLabel(tr("Hauteur :"));
|
|
||||||
|
|
||||||
QSpinBox *columns_height = new QSpinBox(diagram_size_box);
|
|
||||||
columns_height -> setRange(qRound(scene -> border_and_inset.minColumnsHeight()), 10000);
|
|
||||||
columns_height -> setSingleStep(80);
|
|
||||||
columns_height -> setValue(columns_height_value);
|
|
||||||
|
|
||||||
diagram_size_box_layout.addWidget(ds1, 0, 0);
|
|
||||||
diagram_size_box_layout.addWidget(columns_count, 0, 1);
|
|
||||||
diagram_size_box_layout.addWidget(columns_width, 0, 2);
|
|
||||||
diagram_size_box_layout.addWidget(ds2, 1, 0);
|
|
||||||
diagram_size_box_layout.addWidget(columns_height, 1, 1);
|
|
||||||
diagram_size_box_layout.setColumnStretch(0, 1);
|
|
||||||
diagram_size_box_layout.setColumnStretch(1, 1);
|
|
||||||
diagram_size_box_layout.setColumnStretch(2, 1);
|
|
||||||
diagram_size_box_layout.setColumnStretch(3, 500);
|
|
||||||
|
|
||||||
InsetPropertiesWidget *inset_infos = new InsetPropertiesWidget(inset, false, &popup);
|
|
||||||
|
|
||||||
// boutons
|
|
||||||
QDialogButtonBox boutons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
|
||||||
connect(&boutons, SIGNAL(accepted()), &popup, SLOT(accept()));
|
|
||||||
connect(&boutons, SIGNAL(rejected()), &popup, SLOT(reject()));
|
|
||||||
|
|
||||||
// ajout dans une disposition verticale
|
|
||||||
QVBoxLayout layout_v(&popup);
|
|
||||||
layout_v.addWidget(diagram_size_box);
|
|
||||||
layout_v.addWidget(inset_infos);
|
|
||||||
layout_v.addStretch();
|
|
||||||
layout_v.addWidget(&boutons);
|
|
||||||
// si le dialogue est accepte
|
|
||||||
if (popup.exec() == QDialog::Accepted) {
|
|
||||||
InsetProperties new_inset = inset_infos -> insetProperties();
|
|
||||||
|
|
||||||
// s'il y a des modifications au cartouche
|
|
||||||
if (new_inset != inset) {
|
|
||||||
scene -> undoStack().push(new ChangeInsetCommand(scene, inset, new_inset));
|
|
||||||
}
|
|
||||||
|
|
||||||
// s'il y a des modifications aux dimensions du schema
|
|
||||||
if (
|
|
||||||
columns_count_value != columns_count -> value() ||\
|
|
||||||
columns_width_value != columns_width -> value() ||\
|
|
||||||
columns_height_value != columns_height -> value()
|
|
||||||
) {
|
|
||||||
ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
|
|
||||||
cbc -> columnsCountDifference = columns_count -> value() - columns_count_value;
|
|
||||||
cbc -> columnsWidthDifference = columns_width -> value() - columns_width_value;
|
|
||||||
cbc -> columnsHeightDifference = columns_height -> value() - columns_height_value;
|
|
||||||
scene -> undoStack().push(cbc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return true s'il y a des elements selectionnes sur le schema, false sinon
|
|
||||||
*/
|
|
||||||
bool DiagramView::hasSelectedItems() {
|
|
||||||
return(scene -> selectedItems().size() > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Ajoute une colonne au schema.
|
|
||||||
*/
|
|
||||||
void DiagramView::addColumn() {
|
|
||||||
ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
|
|
||||||
cbc -> columnsCountDifference = 1;
|
|
||||||
scene -> undoStack().push(cbc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Enleve une colonne au schema.
|
|
||||||
*/
|
|
||||||
void DiagramView::removeColumn() {
|
|
||||||
ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
|
|
||||||
cbc -> columnsCountDifference = -1;
|
|
||||||
scene -> undoStack().push(cbc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Agrandit le schema en hauteur
|
|
||||||
*/
|
|
||||||
void DiagramView::expand() {
|
|
||||||
ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
|
|
||||||
cbc -> columnsHeightDifference = 80.0;
|
|
||||||
scene -> undoStack().push(cbc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Retrecit le schema en hauteur
|
|
||||||
*/
|
|
||||||
void DiagramView::shrink() {
|
|
||||||
ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
|
|
||||||
cbc -> columnsHeightDifference = -80.0;
|
|
||||||
scene -> undoStack().push(cbc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Ajuste le sceneRect (zone du schema visualisee par le DiagramView) afin que
|
|
||||||
celui inclut a la fois les elements dans et en dehors du cadre et le cadre
|
|
||||||
lui-meme.
|
|
||||||
*/
|
|
||||||
void DiagramView::adjustSceneRect() {
|
|
||||||
QRectF old_scene_rect = sceneRect();
|
|
||||||
|
|
||||||
// rectangle delimitant l'ensemble des elements
|
|
||||||
QRectF elements_bounding_rect = scene -> itemsBoundingRect();
|
|
||||||
|
|
||||||
// rectangle contenant le cadre = colonnes + cartouche
|
|
||||||
QRectF border_bounding_rect = scene -> border().adjusted(-Diagram::margin, -Diagram::margin, Diagram::margin, Diagram::margin);
|
|
||||||
|
|
||||||
// ajuste la sceneRect
|
|
||||||
QRectF new_scene_rect = elements_bounding_rect.united(border_bounding_rect);
|
|
||||||
setSceneRect(new_scene_rect);
|
|
||||||
|
|
||||||
// met a jour la scene
|
|
||||||
scene -> update(old_scene_rect.united(new_scene_rect));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Met a jour le titre du widget
|
|
||||||
*/
|
|
||||||
void DiagramView::updateWindowTitle() {
|
|
||||||
QString window_title;
|
|
||||||
if (file_name.isNull()) window_title += tr("nouveau sch\351ma");
|
|
||||||
else window_title += file_name;
|
|
||||||
window_title += "[*]";
|
|
||||||
setWindowTitle(window_title);
|
|
||||||
setWindowModified(!(scene -> undoStack().isClean()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Active ou desactive le dessin de grille selon la quantite de pixels affichee
|
|
||||||
*/
|
|
||||||
void DiagramView::adjustGridToZoom() {
|
|
||||||
QRectF viewed_scene = viewedSceneRect();
|
|
||||||
scene -> setDisplayGrid(viewed_scene.width() < 2000 || viewed_scene.height() < 2000);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return le rectangle du schema (classe Diagram) visualise par ce DiagramView
|
|
||||||
*/
|
|
||||||
QRectF DiagramView::viewedSceneRect() const {
|
|
||||||
// recupere la taille du widget viewport
|
|
||||||
QSize viewport_size = viewport() -> size();
|
|
||||||
|
|
||||||
// recupere la transformation viewport -> scene
|
|
||||||
QTransform view_to_scene = viewportTransform().inverted();
|
|
||||||
|
|
||||||
// mappe le coin superieur gauche et le coin inferieur droit de la viewport sur la scene
|
|
||||||
QPointF scene_left_top = view_to_scene.map(QPointF(0.0, 0.0));
|
|
||||||
QPointF scene_right_bottom = view_to_scene.map(QPointF(viewport_size.width(), viewport_size.height()));
|
|
||||||
|
|
||||||
// en deduit le rectangle visualise par la scene
|
|
||||||
return(QRectF(scene_left_top, scene_right_bottom));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Affiche un dialogue permettant d'editer le conducteur selectionne.
|
|
||||||
Ne fait rien s'il y a 0 ou plusieurs conducteurs selectionnes.
|
|
||||||
*/
|
|
||||||
void DiagramView::editConductor() {
|
|
||||||
QList<Conductor *> selected_conductors(scene -> selectedConductors().toList());
|
|
||||||
|
|
||||||
// on ne peut editer qu'un conducteur a la fois
|
|
||||||
if (selected_conductors.count() != 1) return;
|
|
||||||
Conductor *edited_conductor = selected_conductors.first();
|
|
||||||
|
|
||||||
editConductor(edited_conductor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Edite le conducteur passe en parametre
|
|
||||||
@param edited_conductor Conducteur a editer
|
|
||||||
*/
|
|
||||||
void DiagramView::editConductor(Conductor *edited_conductor) {
|
|
||||||
if (!edited_conductor) return;
|
|
||||||
|
|
||||||
// initialise l'editeur de proprietes pour le conducteur
|
|
||||||
ConductorProperties old_properties = edited_conductor -> properties();
|
|
||||||
ConductorPropertiesWidget *cpw = new ConductorPropertiesWidget(old_properties);
|
|
||||||
|
|
||||||
// l'insere dans un dialogue
|
|
||||||
QDialog conductor_dialog;
|
|
||||||
conductor_dialog.setWindowTitle(tr("\311diter les propri\351t\351s d'un conducteur"));
|
|
||||||
QVBoxLayout *dialog_layout = new QVBoxLayout(&conductor_dialog);
|
|
||||||
dialog_layout -> addWidget(cpw);
|
|
||||||
dialog_layout -> addStretch();
|
|
||||||
QDialogButtonBox *dbb = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
|
||||||
dialog_layout -> addWidget(dbb);
|
|
||||||
connect(dbb, SIGNAL(accepted()), &conductor_dialog, SLOT(accept()));
|
|
||||||
connect(dbb, SIGNAL(rejected()), &conductor_dialog, SLOT(reject()));
|
|
||||||
|
|
||||||
// execute le dialogue et met a jour le conducteur
|
|
||||||
if (conductor_dialog.exec() == QDialog::Accepted) {
|
|
||||||
// recupere les nouvelles proprietes
|
|
||||||
ConductorProperties new_properties = cpw -> conductorProperties();
|
|
||||||
|
|
||||||
if (new_properties != old_properties) {
|
|
||||||
// initialise l'objet UndoCommand correspondant
|
|
||||||
ChangeConductorPropertiesCommand *ccpc = new ChangeConductorPropertiesCommand(edited_conductor);
|
|
||||||
ccpc -> setOldSettings(old_properties);
|
|
||||||
ccpc -> setNewSettings(new_properties);
|
|
||||||
diagram() -> undoStack().push(ccpc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Reinitialise le profil des conducteurs selectionnes
|
|
||||||
*/
|
|
||||||
void DiagramView::resetConductors() {
|
|
||||||
// recupere les conducteurs selectionnes
|
|
||||||
QSet<Conductor *> selected_conductors = scene -> selectedConductors();
|
|
||||||
|
|
||||||
// repere les conducteurs modifies (= profil non nul)
|
|
||||||
QHash<Conductor *, ConductorProfilesGroup> conductors_and_profiles;
|
|
||||||
foreach(Conductor *conductor, selected_conductors) {
|
|
||||||
ConductorProfilesGroup profile = conductor -> profiles();
|
|
||||||
if (
|
|
||||||
!profile[Qt::TopLeftCorner].isNull() ||\
|
|
||||||
!profile[Qt::TopRightCorner].isNull() ||\
|
|
||||||
!profile[Qt::BottomLeftCorner].isNull() ||\
|
|
||||||
!profile[Qt::BottomRightCorner].isNull()
|
|
||||||
) {
|
|
||||||
conductors_and_profiles.insert(conductor, profile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (conductors_and_profiles.isEmpty()) return;
|
|
||||||
scene -> undoStack().push(new ResetConductorCommand(conductors_and_profiles));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Lance un dialogue permettant de modifier les proprietes par defaut des
|
|
||||||
futurs nouveaux conducteurs
|
|
||||||
*/
|
|
||||||
void DiagramView::editDefaultConductorProperties() {
|
|
||||||
// initialise l'editeur de proprietes pour le conducteur
|
|
||||||
ConductorPropertiesWidget *cpw = new ConductorPropertiesWidget(scene -> defaultConductorProperties);
|
|
||||||
|
|
||||||
// l'insere dans un dialogue
|
|
||||||
QDialog conductor_dialog;
|
|
||||||
conductor_dialog.setWindowTitle(tr("\311diter les propri\351t\351s par d\351faut des conducteurs"));
|
|
||||||
QVBoxLayout *dialog_layout = new QVBoxLayout(&conductor_dialog);
|
|
||||||
dialog_layout -> addWidget(cpw);
|
|
||||||
QDialogButtonBox *dbb = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
|
||||||
dialog_layout -> addWidget(dbb);
|
|
||||||
connect(dbb, SIGNAL(accepted()), &conductor_dialog, SLOT(accept()));
|
|
||||||
connect(dbb, SIGNAL(rejected()), &conductor_dialog, SLOT(reject()));
|
|
||||||
|
|
||||||
// execute le dialogue et met a jour le conducteur
|
|
||||||
if (conductor_dialog.exec() == QDialog::Accepted) {
|
|
||||||
scene -> defaultConductorProperties = cpw -> conductorProperties();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere les evenements de la DiagramView
|
|
||||||
@param e Evenement
|
|
||||||
*/
|
|
||||||
bool DiagramView::event(QEvent *e) {
|
|
||||||
// fait en sorte que les raccourcis clavier arrivent prioritairement sur la
|
|
||||||
// vue plutot que de remonter vers les QMenu / QAction
|
|
||||||
if (e -> type() == QEvent::ShortcutOverride && scene -> focusItem()) {
|
|
||||||
e -> accept();
|
|
||||||
return(true);
|
|
||||||
}
|
|
||||||
return(QGraphicsView::event(e));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe le DiagramView en mode "ajout de texte". Un clic cree alors un
|
|
||||||
nouveau champ de texte.
|
|
||||||
*/
|
|
||||||
void DiagramView::addText() {
|
|
||||||
is_adding_text = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere le menu contextuel
|
|
||||||
@param e Evenement decrivant la demande de menu contextuel
|
|
||||||
*/
|
|
||||||
void DiagramView::contextMenuEvent(QContextMenuEvent *e) {
|
|
||||||
if (QGraphicsItem *qgi = scene -> itemAt(mapToScene(e -> pos()))) {
|
|
||||||
if (!qgi -> isSelected()) scene -> clearSelection();
|
|
||||||
qgi -> setSelected(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (QETDiagramEditor *qde = diagramEditor()) {
|
|
||||||
context_menu -> clear();
|
|
||||||
if (scene -> selectedItems().isEmpty()) {
|
|
||||||
paste_here_pos = e -> pos();
|
|
||||||
paste_here -> setEnabled(Diagram::clipboardMayContainDiagram());
|
|
||||||
context_menu -> addAction(paste_here);
|
|
||||||
context_menu -> addSeparator();
|
|
||||||
context_menu -> addAction(qde -> infos_diagram);
|
|
||||||
context_menu -> addAction(qde -> add_column);
|
|
||||||
context_menu -> addAction(qde -> remove_column);
|
|
||||||
context_menu -> addAction(qde -> expand_diagram);
|
|
||||||
context_menu -> addAction(qde -> shrink_diagram);
|
|
||||||
} else {
|
|
||||||
context_menu -> addAction(qde -> cut);
|
|
||||||
context_menu -> addAction(qde -> copy);
|
|
||||||
context_menu -> addSeparator();
|
|
||||||
context_menu -> addAction(qde -> delete_selection);
|
|
||||||
context_menu -> addAction(qde -> rotate_selection);
|
|
||||||
context_menu -> addSeparator();
|
|
||||||
context_menu -> addAction(qde -> conductor_prop);
|
|
||||||
context_menu -> addAction(qde -> conductor_reset);
|
|
||||||
}
|
|
||||||
|
|
||||||
// affiche le menu contextuel
|
|
||||||
context_menu -> popup(e -> globalPos());
|
|
||||||
}
|
|
||||||
e -> accept();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @return l'editeur de schemas parent ou 0
|
|
||||||
QETDiagramEditor *DiagramView::diagramEditor() const {
|
|
||||||
// remonte la hierarchie des widgets
|
|
||||||
QWidget *w = const_cast<DiagramView *>(this);
|
|
||||||
while (w -> parentWidget() && !w -> isWindow()) {
|
|
||||||
w = w -> parentWidget();
|
|
||||||
}
|
|
||||||
// la fenetre est supposee etre un QETDiagramEditor
|
|
||||||
return(qobject_cast<QETDiagramEditor *>(w));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere les double-clics sur le schema
|
|
||||||
*/
|
|
||||||
void DiagramView::mouseDoubleClickEvent(QMouseEvent *e) {
|
|
||||||
BorderInset &bi = scene -> border_and_inset;
|
|
||||||
|
|
||||||
// recupere le rectangle corespondant au cartouche
|
|
||||||
QRectF inset_rect(
|
|
||||||
Diagram::margin,
|
|
||||||
Diagram::margin + bi.columnsHeight(),
|
|
||||||
bi.insetWidth(),
|
|
||||||
bi.insetHeight()
|
|
||||||
);
|
|
||||||
|
|
||||||
// recupere le rectangle correspondant aux en-tetes des colonnes
|
|
||||||
QRectF columns_rect(
|
|
||||||
Diagram::margin,
|
|
||||||
Diagram::margin,
|
|
||||||
bi.borderWidth(),
|
|
||||||
bi.columnsHeaderHeight()
|
|
||||||
);
|
|
||||||
|
|
||||||
// coordonnees du clic par rapport au schema
|
|
||||||
QPointF click_pos = viewportTransform().inverted().map(e -> pos());
|
|
||||||
|
|
||||||
// detecte le double-clic sur le cartouche ou les colonnes
|
|
||||||
if (QGraphicsItem *qgi = itemAt(e -> pos())) {
|
|
||||||
if (Conductor *c = qgraphicsitem_cast<Conductor *>(qgi)) {
|
|
||||||
editConductor(c);
|
|
||||||
} else {
|
|
||||||
QGraphicsView::mouseDoubleClickEvent(e);
|
|
||||||
}
|
|
||||||
} else if (inset_rect.contains(click_pos) || columns_rect.contains(click_pos)) {
|
|
||||||
// edite les proprietes du schema
|
|
||||||
dialogEditInfos();
|
|
||||||
} else {
|
|
||||||
QGraphicsView::mouseDoubleClickEvent(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BIN
docs/QuickStart_QET_fr.odt
Normal file
BIN
docs/QuickStart_QET_fr.odt
Normal file
Binary file not shown.
BIN
docs/QuickStart_QET_fr.pdf
Normal file
BIN
docs/QuickStart_QET_fr.pdf
Normal file
Binary file not shown.
BIN
docs/pictures/ElementPanel.png
Normal file
BIN
docs/pictures/ElementPanel.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
BIN
docs/pictures/Labels.png
Normal file
BIN
docs/pictures/Labels.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
BIN
docs/pictures/connect.png
Normal file
BIN
docs/pictures/connect.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.6 KiB |
BIN
docs/pictures/dragComponent.png
Normal file
BIN
docs/pictures/dragComponent.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.7 KiB |
BIN
docs/pictures/main.png
Normal file
BIN
docs/pictures/main.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 43 KiB |
BIN
docs/quickstart.0.02doc.odt
Normal file
BIN
docs/quickstart.0.02doc.odt
Normal file
Binary file not shown.
@@ -1,732 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "elementscene.h"
|
|
||||||
#include "qetelementeditor.h"
|
|
||||||
#include <cmath>
|
|
||||||
#include "partline.h"
|
|
||||||
#include "partellipse.h"
|
|
||||||
#include "partcircle.h"
|
|
||||||
#include "partpolygon.h"
|
|
||||||
#include "partterminal.h"
|
|
||||||
#include "parttext.h"
|
|
||||||
#include "parttextfield.h"
|
|
||||||
#include "partarc.h"
|
|
||||||
#include "hotspoteditor.h"
|
|
||||||
#include "editorcommands.h"
|
|
||||||
|
|
||||||
const int ElementScene::xGrid = 10;
|
|
||||||
const int ElementScene::yGrid = 10;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param editor L'editeur d'element concerne
|
|
||||||
@param parent le Widget parent
|
|
||||||
*/
|
|
||||||
ElementScene::ElementScene(QETElementEditor *editor, QObject *parent) :
|
|
||||||
QGraphicsScene(parent),
|
|
||||||
_width(3),
|
|
||||||
_height(7),
|
|
||||||
_hotspot(15, 35),
|
|
||||||
internal_connections(false),
|
|
||||||
qgi_manager(this),
|
|
||||||
element_editor(editor)
|
|
||||||
{
|
|
||||||
current_polygon = NULL;
|
|
||||||
undo_stack.setClean();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
ElementScene::~ElementScene() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe la scene en mode "selection et deplacement de parties"
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_move() {
|
|
||||||
behavior = Normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe la scene en mode "ajout de ligne"
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_addLine() {
|
|
||||||
behavior = Line;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe la scene en mode "ajout de cercle"
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_addCircle() {
|
|
||||||
behavior = Circle;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe la scene en mode "ajout d'ellipse"
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_addEllipse() {
|
|
||||||
behavior = Ellipse;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe la scene en mode "ajout de polygone"
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_addPolygon() {
|
|
||||||
behavior = Polygon;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe la scene en mode "ajout de texte statique"
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_addText() {
|
|
||||||
behavior = Text;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe la scene en mode "ajout de borne"
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_addTerminal() {
|
|
||||||
behavior = Terminal;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe la scene en mode "ajout d'arc de cercle"
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_addArc() {
|
|
||||||
behavior = Arc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe la scene en mode "ajout de champ de texte"
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_addTextField() {
|
|
||||||
behavior = TextField;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere les mouvements de la souris
|
|
||||||
@param e objet decrivant l'evenement
|
|
||||||
*/
|
|
||||||
void ElementScene::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
|
|
||||||
if (behavior != Polygon && current_polygon != NULL) current_polygon = NULL;
|
|
||||||
QRectF temp_rect;
|
|
||||||
qreal radius;
|
|
||||||
QPointF temp_point;
|
|
||||||
QPolygonF temp_polygon;
|
|
||||||
if (e -> buttons() & Qt::LeftButton) {
|
|
||||||
switch(behavior) {
|
|
||||||
case Line:
|
|
||||||
current_line -> setLine(QLineF(current_line -> line().p1(), e -> scenePos()));
|
|
||||||
break;
|
|
||||||
case Ellipse:
|
|
||||||
temp_rect = current_ellipse -> rect();
|
|
||||||
temp_rect.setBottomRight(e -> scenePos());
|
|
||||||
current_ellipse -> setRect(temp_rect);
|
|
||||||
break;
|
|
||||||
case Arc:
|
|
||||||
temp_rect = current_arc -> rect();
|
|
||||||
temp_rect.setBottomRight(e -> scenePos());
|
|
||||||
current_arc -> setRect(temp_rect);
|
|
||||||
break;
|
|
||||||
case Circle:
|
|
||||||
temp_rect = current_circle -> rect();
|
|
||||||
temp_point = e -> scenePos() - current_circle -> mapToScene(temp_rect.center());
|
|
||||||
radius = sqrt(pow(temp_point.x(), 2) + pow(temp_point.y(), 2));
|
|
||||||
temp_rect = QRectF(
|
|
||||||
temp_rect.center() - QPointF(radius, radius),
|
|
||||||
QSizeF(2.0 * radius, 2.0 * radius)
|
|
||||||
);
|
|
||||||
current_circle -> setRect(temp_rect);
|
|
||||||
break;
|
|
||||||
case Polygon:
|
|
||||||
if (current_polygon == NULL) break;
|
|
||||||
temp_polygon = current_polygon -> polygon();
|
|
||||||
temp_polygon.pop_back();
|
|
||||||
temp_polygon << e -> scenePos();
|
|
||||||
current_polygon -> setPolygon(temp_polygon);
|
|
||||||
break;
|
|
||||||
case Normal:
|
|
||||||
default:
|
|
||||||
QGraphicsScene::mouseMoveEvent(e);
|
|
||||||
}
|
|
||||||
} else if (behavior == Polygon && current_polygon != NULL) {
|
|
||||||
temp_polygon = current_polygon -> polygon();
|
|
||||||
temp_polygon.pop_back();
|
|
||||||
temp_polygon << e -> scenePos();
|
|
||||||
current_polygon -> setPolygon(temp_polygon);
|
|
||||||
} else QGraphicsScene::mouseMoveEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere les appuis sur les boutons de la souris
|
|
||||||
@param e objet decrivant l'evenement
|
|
||||||
*/
|
|
||||||
void ElementScene::mousePressEvent(QGraphicsSceneMouseEvent *e) {
|
|
||||||
if (behavior != Polygon && current_polygon != NULL) current_polygon = NULL;
|
|
||||||
QPolygonF temp_polygon;
|
|
||||||
if (e -> button() & Qt::LeftButton) {
|
|
||||||
switch(behavior) {
|
|
||||||
case Line:
|
|
||||||
current_line = new PartLine(element_editor, 0, this);
|
|
||||||
current_line -> setLine(QLineF(e -> scenePos(), e -> scenePos()));
|
|
||||||
break;
|
|
||||||
case Ellipse:
|
|
||||||
current_ellipse = new PartEllipse(element_editor, 0, this);
|
|
||||||
current_ellipse -> setRect(QRectF(e -> scenePos(), QSizeF(0.0, 0.0)));
|
|
||||||
current_ellipse -> setProperty("antialias", true);
|
|
||||||
break;
|
|
||||||
case Arc:
|
|
||||||
current_arc = new PartArc(element_editor, 0, this);
|
|
||||||
current_arc -> setRect(QRectF(e -> scenePos(), QSizeF(0.0, 0.0)));
|
|
||||||
current_arc -> setProperty("antialias", true);
|
|
||||||
break;
|
|
||||||
case Circle:
|
|
||||||
current_circle = new PartCircle(element_editor, 0, this);
|
|
||||||
current_circle -> setRect(QRectF(e -> scenePos(), QSizeF(0.0, 0.0)));
|
|
||||||
current_circle -> setProperty("antialias", true);
|
|
||||||
break;
|
|
||||||
case Polygon:
|
|
||||||
if (current_polygon == NULL) {
|
|
||||||
current_polygon = new PartPolygon(element_editor, 0, this);
|
|
||||||
temp_polygon = QPolygonF(0);
|
|
||||||
} else temp_polygon = current_polygon -> polygon();
|
|
||||||
// au debut, on insere deux points
|
|
||||||
if (!temp_polygon.count()) temp_polygon << e -> scenePos();
|
|
||||||
temp_polygon << e -> scenePos();
|
|
||||||
current_polygon -> setPolygon(temp_polygon);
|
|
||||||
break;
|
|
||||||
case Normal:
|
|
||||||
default:
|
|
||||||
QGraphicsScene::mousePressEvent(e);
|
|
||||||
if (!selectedItems().isEmpty()) fsi_pos = selectedItems().first() -> scenePos();
|
|
||||||
}
|
|
||||||
} else QGraphicsScene::mousePressEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere les relachements de boutons de la souris
|
|
||||||
@param e objet decrivant l'evenement
|
|
||||||
*/
|
|
||||||
void ElementScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
|
|
||||||
PartTerminal *terminal;
|
|
||||||
PartText *text;
|
|
||||||
PartTextField *textfield;
|
|
||||||
if (behavior != Polygon && current_polygon != NULL) current_polygon = NULL;
|
|
||||||
if (e -> button() & Qt::LeftButton) {
|
|
||||||
switch(behavior) {
|
|
||||||
case Line:
|
|
||||||
if (qgiManager().manages(current_line)) break;
|
|
||||||
undo_stack.push(new AddPartCommand(tr("ligne"), this, current_line));
|
|
||||||
emit(partsAdded());
|
|
||||||
break;
|
|
||||||
case Ellipse:
|
|
||||||
if (qgiManager().manages(current_ellipse)) break;
|
|
||||||
current_ellipse -> setRect(current_ellipse -> rect().normalized());
|
|
||||||
undo_stack.push(new AddPartCommand(tr("ellipse"), this, current_ellipse));
|
|
||||||
emit(partsAdded());
|
|
||||||
break;
|
|
||||||
case Arc:
|
|
||||||
if (qgiManager().manages(current_arc)) break;
|
|
||||||
current_arc-> setRect(current_arc -> rect().normalized());
|
|
||||||
undo_stack.push(new AddPartCommand(tr("arc"), this, current_arc));
|
|
||||||
emit(partsAdded());
|
|
||||||
break;
|
|
||||||
case Circle:
|
|
||||||
if (qgiManager().manages(current_circle)) break;
|
|
||||||
current_circle -> setRect(current_circle -> rect().normalized());
|
|
||||||
undo_stack.push(new AddPartCommand(tr("cercle"), this, current_circle));
|
|
||||||
emit(partsAdded());
|
|
||||||
break;
|
|
||||||
case Terminal:
|
|
||||||
terminal = new PartTerminal(element_editor, 0, this);
|
|
||||||
terminal -> setPos(e -> scenePos());
|
|
||||||
undo_stack.push(new AddPartCommand(tr("borne"), this, terminal));
|
|
||||||
emit(partsAdded());
|
|
||||||
break;
|
|
||||||
case Text:
|
|
||||||
text = new PartText(element_editor, 0, this);
|
|
||||||
text -> setPos(e -> scenePos());
|
|
||||||
undo_stack.push(new AddPartCommand(tr("texte"), this, text));
|
|
||||||
emit(partsAdded());
|
|
||||||
break;
|
|
||||||
case TextField:
|
|
||||||
textfield = new PartTextField(element_editor, 0, this);
|
|
||||||
textfield -> setPos(e -> scenePos());
|
|
||||||
undo_stack.push(new AddPartCommand(tr("champ de texte"), this, textfield));
|
|
||||||
emit(partsAdded());
|
|
||||||
break;
|
|
||||||
case Normal:
|
|
||||||
default:
|
|
||||||
QGraphicsScene::mouseReleaseEvent(e);
|
|
||||||
// detecte les deplacements de parties
|
|
||||||
if (!selectedItems().isEmpty()) {
|
|
||||||
QPointF movement = selectedItems().first() -> scenePos() - fsi_pos;
|
|
||||||
if (!movement.isNull()) {
|
|
||||||
undo_stack.push(new MovePartsCommand(movement, this, selectedItems()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (e -> button() & Qt::RightButton) {
|
|
||||||
if (behavior == Polygon) {
|
|
||||||
behavior = Normal;
|
|
||||||
undo_stack.push(new AddPartCommand(tr("polygone"), this, current_polygon));
|
|
||||||
current_polygon = NULL;
|
|
||||||
emit(partsAdded());
|
|
||||||
emit(needNormalMode());
|
|
||||||
} else QGraphicsScene::mouseReleaseEvent(e);
|
|
||||||
} else QGraphicsScene::mouseReleaseEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Dessine l'arriere-plan de l'editeur, cad la grille.
|
|
||||||
@param p Le QPainter a utiliser pour dessiner
|
|
||||||
@param r Le rectangle de la zone a dessiner
|
|
||||||
*/
|
|
||||||
void ElementScene::drawBackground(QPainter *p, const QRectF &r) {
|
|
||||||
p -> save();
|
|
||||||
|
|
||||||
// desactive tout antialiasing, sauf pour le texte
|
|
||||||
p -> setRenderHint(QPainter::Antialiasing, false);
|
|
||||||
p -> setRenderHint(QPainter::TextAntialiasing, true);
|
|
||||||
p -> setRenderHint(QPainter::SmoothPixmapTransform, false);
|
|
||||||
|
|
||||||
// dessine un fond blanc
|
|
||||||
p -> setPen(Qt::NoPen);
|
|
||||||
p -> setBrush(Qt::white);
|
|
||||||
p -> drawRect(r);
|
|
||||||
|
|
||||||
// encadre la zone dessinable de l'element
|
|
||||||
QRectF drawable_area(-_hotspot.x(), -_hotspot.y(), width(), height());
|
|
||||||
p -> setPen(Qt::black);
|
|
||||||
p -> setBrush(Qt::NoBrush);
|
|
||||||
p -> drawRect(drawable_area);
|
|
||||||
|
|
||||||
if (r.width() < 2500 && r.height() < 2500) {
|
|
||||||
// dessine les points de la grille
|
|
||||||
p -> setPen(Qt::black);
|
|
||||||
p -> setBrush(Qt::NoBrush);
|
|
||||||
qreal limite_x = r.x() + r.width();
|
|
||||||
qreal limite_y = r.y() + r.height();
|
|
||||||
|
|
||||||
int g_x = (int)ceil(r.x());
|
|
||||||
while (g_x % xGrid) ++ g_x;
|
|
||||||
int g_y = (int)ceil(r.y());
|
|
||||||
while (g_y % yGrid) ++ g_y;
|
|
||||||
|
|
||||||
for (int gx = g_x ; gx < limite_x ; gx += xGrid) {
|
|
||||||
for (int gy = g_y ; gy < limite_y ; gy += yGrid) {
|
|
||||||
p -> drawPoint(gx, gy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p -> restore();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Dessine l'arriere-plan de l'editeur, cad l'indicateur de hotspot.
|
|
||||||
@param p Le QPainter a utiliser pour dessiner
|
|
||||||
@param r Le rectangle de la zone a dessiner
|
|
||||||
*/
|
|
||||||
void ElementScene::drawForeground(QPainter *p, const QRectF &) {
|
|
||||||
p -> save();
|
|
||||||
|
|
||||||
// desactive tout antialiasing, sauf pour le texte
|
|
||||||
p -> setRenderHint(QPainter::Antialiasing, false);
|
|
||||||
p -> setRenderHint(QPainter::TextAntialiasing, true);
|
|
||||||
p -> setRenderHint(QPainter::SmoothPixmapTransform, false);
|
|
||||||
|
|
||||||
p -> setPen(Qt::red);
|
|
||||||
p -> setBrush(Qt::NoBrush);
|
|
||||||
p -> drawLine(QLineF(0.0, -_hotspot.y(), 0.0, height() - _hotspot.y()));
|
|
||||||
p -> drawLine(QLineF(-_hotspot.x(), 0.0, width() - _hotspot.x(), 0.0));
|
|
||||||
p -> restore();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Exporte l'element en XML
|
|
||||||
@return un document XML decrivant l'element
|
|
||||||
*/
|
|
||||||
const QDomDocument ElementScene::toXml() const {
|
|
||||||
// document XML
|
|
||||||
QDomDocument xml_document;
|
|
||||||
|
|
||||||
// racine du document XML
|
|
||||||
QDomElement root = xml_document.createElement("definition");
|
|
||||||
root.setAttribute("type", "element");
|
|
||||||
root.setAttribute("width", QString("%1").arg(_width * 10));
|
|
||||||
root.setAttribute("height", QString("%1").arg(_height * 10));
|
|
||||||
root.setAttribute("hotspot_x", QString("%1").arg(_hotspot.x()));
|
|
||||||
root.setAttribute("hotspot_y", QString("%1").arg(_hotspot.y()));
|
|
||||||
root.setAttribute("orientation", ori.toString());
|
|
||||||
root.setAttribute("version", QET::version);
|
|
||||||
if (internal_connections) root.setAttribute("ic", "true");
|
|
||||||
|
|
||||||
// noms de l'element
|
|
||||||
root.appendChild(_names.toXml(xml_document));
|
|
||||||
|
|
||||||
QDomElement description = xml_document.createElement("description");
|
|
||||||
// description de l'element
|
|
||||||
foreach(QGraphicsItem *qgi, zItems(true)) {
|
|
||||||
if (CustomElementPart *ce = dynamic_cast<CustomElementPart *>(qgi)) {
|
|
||||||
if (ce -> isUseless()) continue;
|
|
||||||
description.appendChild(ce -> toXml(xml_document));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
root.appendChild(description);
|
|
||||||
|
|
||||||
xml_document.appendChild(root);
|
|
||||||
return(xml_document);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Lit un element depuis un document XML
|
|
||||||
@param xml_document un document XML decrivant l'element
|
|
||||||
*/
|
|
||||||
void ElementScene::fromXml(const QDomDocument &xml_document) {
|
|
||||||
|
|
||||||
QString error_message;
|
|
||||||
bool state = true;
|
|
||||||
|
|
||||||
// la racine est supposee etre une definition d'element
|
|
||||||
QDomElement root = xml_document.documentElement();
|
|
||||||
if (root.tagName() != "definition" || root.attribute("type") != "element") {
|
|
||||||
state = false;
|
|
||||||
error_message = tr("Ce document XML n'est pas une definition d'\351l\351ment.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// dimensions et hotspot
|
|
||||||
if (state) {
|
|
||||||
// ces attributs doivent etre presents et valides
|
|
||||||
int w, h, hot_x, hot_y;
|
|
||||||
if (
|
|
||||||
!QET::attributeIsAnInteger(root, QString("width"), &w) ||\
|
|
||||||
!QET::attributeIsAnInteger(root, QString("height"), &h) ||\
|
|
||||||
!QET::attributeIsAnInteger(root, QString("hotspot_x"), &hot_x) ||\
|
|
||||||
!QET::attributeIsAnInteger(root, QString("hotspot_y"), &hot_y)
|
|
||||||
) {
|
|
||||||
state = false;
|
|
||||||
error_message = tr("Les dimensions ou le point de saisie ne sont pas valides.");
|
|
||||||
} else {
|
|
||||||
setWidth(w);
|
|
||||||
setHeight(h);
|
|
||||||
setHotspot(QPoint(hot_x, hot_y));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// orientations et connexions internes
|
|
||||||
if (state) {
|
|
||||||
internal_connections = (root.attribute("ic") == "true");
|
|
||||||
|
|
||||||
if (!ori.fromString(root.attribute("orientation"))) {
|
|
||||||
state = false;
|
|
||||||
error_message = tr("Les orientations ne sont pas valides.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// extrait les noms de la definition XML
|
|
||||||
if (state) {
|
|
||||||
_names.fromXml(root);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parcours des enfants de la definition : parties de l'element
|
|
||||||
if (state) {
|
|
||||||
for (QDomNode node = root.firstChild() ; !node.isNull() ; node = node.nextSibling()) {
|
|
||||||
QDomElement elmts = node.toElement();
|
|
||||||
if (elmts.isNull()) continue;
|
|
||||||
if (elmts.tagName() == "description") {
|
|
||||||
// gestion de la description graphique de l'element
|
|
||||||
// = parcours des differentes parties du dessin
|
|
||||||
int z = 1;
|
|
||||||
for (QDomNode n = node.firstChild() ; !n.isNull() ; n = n.nextSibling()) {
|
|
||||||
QDomElement qde = n.toElement();
|
|
||||||
if (qde.isNull()) continue;
|
|
||||||
CustomElementPart *cep;
|
|
||||||
if (qde.tagName() == "line") cep = new PartLine (element_editor, 0, this);
|
|
||||||
else if (qde.tagName() == "ellipse") cep = new PartEllipse (element_editor, 0, this);
|
|
||||||
else if (qde.tagName() == "circle") cep = new PartCircle (element_editor, 0, this);
|
|
||||||
else if (qde.tagName() == "polygon") cep = new PartPolygon (element_editor, 0, this);
|
|
||||||
else if (qde.tagName() == "terminal") cep = new PartTerminal (element_editor, 0, this);
|
|
||||||
else if (qde.tagName() == "text") cep = new PartText (element_editor, 0, this);
|
|
||||||
else if (qde.tagName() == "input") cep = new PartTextField(element_editor, 0, this);
|
|
||||||
else if (qde.tagName() == "arc") cep = new PartArc (element_editor, 0, this);
|
|
||||||
else continue;
|
|
||||||
if (QGraphicsItem *qgi = dynamic_cast<QGraphicsItem *>(cep)) qgi -> setZValue(z++);
|
|
||||||
cep -> fromXml(qde);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return un rectangle englobant toutes les parties ainsi que le
|
|
||||||
"bounding rect" de l'element
|
|
||||||
*/
|
|
||||||
QRectF ElementScene::sceneContent() const {
|
|
||||||
return(itemsBoundingRect().unite(QRectF(-_hotspot, QSizeF(width(), height()))));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return la pile d'annulations de cet editeur d'element
|
|
||||||
*/
|
|
||||||
QUndoStack &ElementScene::undoStack() {
|
|
||||||
return(undo_stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return le gestionnaire de QGraphicsItem de cet editeur d'element
|
|
||||||
*/
|
|
||||||
QGIManager &ElementScene::qgiManager() {
|
|
||||||
return(qgi_manager);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Selectionne tout
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_selectAll() {
|
|
||||||
foreach(QGraphicsItem *qgi, items()) qgi -> setSelected(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Deselectionne tout
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_deselectAll() {
|
|
||||||
clearSelection();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Inverse la selection
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_invertSelection() {
|
|
||||||
foreach(QGraphicsItem *qgi, items()) qgi -> setSelected(!qgi -> isSelected());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Supprime les elements selectionnes
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_delete() {
|
|
||||||
// verifie qu'il y a qqc de selectionne
|
|
||||||
QList<QGraphicsItem *> selected_items = selectedItems();
|
|
||||||
if (selected_items.isEmpty()) return;
|
|
||||||
|
|
||||||
// efface tout ce qui est selectionne
|
|
||||||
undo_stack.push(new DeletePartsCommand(this, selected_items));
|
|
||||||
emit(partsRemoved());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Lance un dialogue pour editer les dimensions et le point de saisie
|
|
||||||
(hotspot) de l'element.
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_editSizeHotSpot() {
|
|
||||||
// cree un dialogue
|
|
||||||
QDialog dialog_sh;
|
|
||||||
dialog_sh.setModal(true);
|
|
||||||
dialog_sh.setMinimumSize(400, 230);
|
|
||||||
dialog_sh.setWindowTitle(tr("\311diter la taille et le point de saisie"));
|
|
||||||
QVBoxLayout *dialog_layout = new QVBoxLayout(&dialog_sh);
|
|
||||||
|
|
||||||
// ajoute un HotspotEditor au dialogue
|
|
||||||
HotspotEditor *hotspot_editor = new HotspotEditor();
|
|
||||||
hotspot_editor -> setElementWidth(static_cast<uint>(width() / 10));
|
|
||||||
hotspot_editor -> setElementHeight(static_cast<uint>(height() / 10));
|
|
||||||
hotspot_editor -> setHotspot(hotspot());
|
|
||||||
hotspot_editor -> setOldHotspot(hotspot());
|
|
||||||
hotspot_editor -> setPartsRect(itemsBoundingRect());
|
|
||||||
hotspot_editor -> setPartsRectEnabled(true);
|
|
||||||
dialog_layout -> addWidget(hotspot_editor);
|
|
||||||
|
|
||||||
// ajoute deux boutons au dialogue
|
|
||||||
QDialogButtonBox *dialog_buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
|
||||||
dialog_layout -> addWidget(dialog_buttons);
|
|
||||||
connect(dialog_buttons, SIGNAL(accepted()), &dialog_sh, SLOT(accept()));
|
|
||||||
connect(dialog_buttons, SIGNAL(rejected()), &dialog_sh, SLOT(reject()));
|
|
||||||
|
|
||||||
// lance le dialogue
|
|
||||||
if (dialog_sh.exec() != QDialog::Accepted) return;
|
|
||||||
QSize new_size(hotspot_editor -> elementSize());
|
|
||||||
QSize old_size(width(), height());
|
|
||||||
QPoint new_hotspot(hotspot_editor -> hotspot());
|
|
||||||
QPoint old_hotspot(_hotspot);
|
|
||||||
|
|
||||||
if (new_size != old_size || new_hotspot != old_hotspot) {
|
|
||||||
undo_stack.push(new ChangeHotspotCommand(this, old_size, new_size, old_hotspot, new_hotspot, hotspot_editor -> offsetParts()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Lance un dialogue pour editer les noms de cete element
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_editOrientations() {
|
|
||||||
|
|
||||||
// cree un dialogue
|
|
||||||
QDialog dialog_ori;
|
|
||||||
dialog_ori.setModal(true);
|
|
||||||
dialog_ori.setMinimumSize(400, 260);
|
|
||||||
dialog_ori.setWindowTitle(tr("\311diter les orientations"));
|
|
||||||
QVBoxLayout *dialog_layout = new QVBoxLayout(&dialog_ori);
|
|
||||||
|
|
||||||
// ajoute un champ explicatif au dialogue
|
|
||||||
QLabel *information_label = new QLabel(tr("L'orientation par d\351faut est l'orientation dans laquelle s'effectue la cr\351ation de l'\351l\351ment."));
|
|
||||||
information_label -> setAlignment(Qt::AlignJustify | Qt::AlignVCenter);
|
|
||||||
information_label -> setWordWrap(true);
|
|
||||||
dialog_layout -> addWidget(information_label);
|
|
||||||
|
|
||||||
// ajoute un OrientationSetWidget au dialogue
|
|
||||||
OrientationSetWidget *ori_widget = new OrientationSetWidget();
|
|
||||||
ori_widget -> setOrientationSet(ori);
|
|
||||||
dialog_layout -> addWidget(ori_widget);
|
|
||||||
|
|
||||||
// ajoute une case a cocher pour les connexions internes
|
|
||||||
QCheckBox *ic_checkbox = new QCheckBox(tr("Autoriser les connexions internes"));
|
|
||||||
ic_checkbox -> setChecked(internal_connections);
|
|
||||||
dialog_layout -> addWidget(ic_checkbox);
|
|
||||||
dialog_layout -> addStretch();
|
|
||||||
// ajoute deux boutons au dialogue
|
|
||||||
QDialogButtonBox *dialog_buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
|
||||||
dialog_layout -> addWidget(dialog_buttons);
|
|
||||||
connect(dialog_buttons, SIGNAL(accepted()), &dialog_ori, SLOT(accept()));
|
|
||||||
connect(dialog_buttons, SIGNAL(rejected()), &dialog_ori, SLOT(reject()));
|
|
||||||
|
|
||||||
// lance le dialogue
|
|
||||||
if (dialog_ori.exec() == QDialog::Accepted) {
|
|
||||||
OrientationSet new_ori = ori_widget -> orientationSet();
|
|
||||||
if (new_ori != ori) {
|
|
||||||
undoStack().push(new ChangeOrientationsCommand(this, ori, new_ori));
|
|
||||||
}
|
|
||||||
if (ic_checkbox -> isChecked() != internal_connections) {
|
|
||||||
undoStack().push(new AllowInternalConnectionsCommand(this, ic_checkbox -> isChecked()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Lance un dialogue pour editer les noms de cet element
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_editNames() {
|
|
||||||
|
|
||||||
// cree un dialogue
|
|
||||||
QDialog dialog;
|
|
||||||
dialog.setModal(true);
|
|
||||||
dialog.setMinimumSize(400, 330);
|
|
||||||
dialog.setWindowTitle(tr("\311diter les noms"));
|
|
||||||
QVBoxLayout *dialog_layout = new QVBoxLayout(&dialog);
|
|
||||||
|
|
||||||
// ajoute un champ explicatif au dialogue
|
|
||||||
QLabel *information_label = new QLabel(tr("Vous pouvez sp\351cifier le nom de l'\351l\351ment dans plusieurs langues."));
|
|
||||||
information_label -> setAlignment(Qt::AlignJustify | Qt::AlignVCenter);
|
|
||||||
information_label -> setWordWrap(true);
|
|
||||||
dialog_layout -> addWidget(information_label);
|
|
||||||
|
|
||||||
// ajoute un NamesListWidget au dialogue
|
|
||||||
NamesListWidget *names_widget = new NamesListWidget();
|
|
||||||
names_widget -> setNames(_names);
|
|
||||||
dialog_layout -> addWidget(names_widget);
|
|
||||||
|
|
||||||
// ajoute deux boutons au dialogue
|
|
||||||
QDialogButtonBox *dialog_buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
|
||||||
dialog_layout -> addWidget(dialog_buttons);
|
|
||||||
connect(dialog_buttons, SIGNAL(accepted()), names_widget, SLOT(check()));
|
|
||||||
connect(names_widget, SIGNAL(inputChecked()), &dialog, SLOT(accept()));
|
|
||||||
connect(dialog_buttons, SIGNAL(rejected()), &dialog, SLOT(reject()));
|
|
||||||
|
|
||||||
// lance le dialogue
|
|
||||||
if (dialog.exec() == QDialog::Accepted) {
|
|
||||||
NamesList new_names(names_widget -> names());
|
|
||||||
if (new_names != _names) undoStack().push(new ChangeNamesCommand(this, _names, new_names));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Amene les elements selectionnes au premier plan
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_bringForward() {
|
|
||||||
undoStack().push(new ChangeZValueCommand(this, ChangeZValueCommand::BringForward));
|
|
||||||
emit(partsZValueChanged());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Remonte les elements selectionnes d'un plan
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_raise() {
|
|
||||||
undoStack().push(new ChangeZValueCommand(this, ChangeZValueCommand::Raise));
|
|
||||||
emit(partsZValueChanged());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Descend les elements selectionnes d'un plan
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_lower() {
|
|
||||||
undoStack().push(new ChangeZValueCommand(this, ChangeZValueCommand::Lower));
|
|
||||||
emit(partsZValueChanged());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Envoie les elements selectionnes au fond
|
|
||||||
*/
|
|
||||||
void ElementScene::slot_sendBackward() {
|
|
||||||
undoStack().push(new ChangeZValueCommand(this, ChangeZValueCommand::SendBackward));
|
|
||||||
emit(partsZValueChanged());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@param include_terminals true pour inclure les bornes, false sinon
|
|
||||||
@return les parties de l'element ordonnes par zValue croissante
|
|
||||||
*/
|
|
||||||
QList<QGraphicsItem *> ElementScene::zItems(bool include_terminals) const {
|
|
||||||
// recupere les elements
|
|
||||||
QList<QGraphicsItem *> all_items_list(items());
|
|
||||||
|
|
||||||
// enleve les bornes
|
|
||||||
QList<QGraphicsItem *> terminals;
|
|
||||||
foreach(QGraphicsItem *qgi, all_items_list) {
|
|
||||||
if (qgraphicsitem_cast<PartTerminal *>(qgi)) {
|
|
||||||
all_items_list.removeAt(all_items_list.indexOf(qgi));
|
|
||||||
terminals << qgi;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ordonne les parties par leur zValue
|
|
||||||
QMultiMap<qreal, QGraphicsItem *> mm;
|
|
||||||
foreach(QGraphicsItem *qgi, all_items_list) mm.insert(qgi -> zValue(), qgi);
|
|
||||||
all_items_list.clear();
|
|
||||||
QMapIterator<qreal, QGraphicsItem *> i(mm);
|
|
||||||
while (i.hasNext()) {
|
|
||||||
i.next();
|
|
||||||
all_items_list << i.value();
|
|
||||||
}
|
|
||||||
|
|
||||||
// rajoute eventuellement les bornes
|
|
||||||
if (include_terminals) all_items_list += terminals;
|
|
||||||
return(all_items_list);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Supprime les parties de l'element et les objets d'annulations.
|
|
||||||
Les autres caracteristiques sont conservees.
|
|
||||||
*/
|
|
||||||
void ElementScene::reset() {
|
|
||||||
// supprime les objets d'annulation
|
|
||||||
undoStack().clear();
|
|
||||||
// enleve les elements de la scene
|
|
||||||
foreach (QGraphicsItem *qgi, items()) {
|
|
||||||
removeItem(qgi);
|
|
||||||
qgiManager().release(qgi);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "elementview.h"
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param scene ElementScene visualisee par cette ElementView
|
|
||||||
@param parent QWidget parent de cette ElementView
|
|
||||||
*/
|
|
||||||
ElementView::ElementView(ElementScene *scene, QWidget *parent) :
|
|
||||||
QGraphicsView(scene, parent),
|
|
||||||
scene_(scene)
|
|
||||||
{
|
|
||||||
setInteractive(true);
|
|
||||||
setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
|
||||||
//setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
|
|
||||||
setResizeAnchor(QGraphicsView::AnchorUnderMouse);
|
|
||||||
//setSceneRect(QRectF(0.0, 0.0, 50.0, 200.0));
|
|
||||||
scale(4.0, 4.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
ElementView::~ElementView() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @return l'ElementScene visualisee par cette ElementView
|
|
||||||
ElementScene *ElementView::scene() const {
|
|
||||||
return(scene_);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Definit l'ElementScene visualisee par cette ElementView
|
|
||||||
@param s l'ElementScene visualisee par cette ElementView
|
|
||||||
*/
|
|
||||||
void ElementView::setScene(ElementScene *s) {
|
|
||||||
QGraphicsView::setScene(s);
|
|
||||||
scene_ = s;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere les evenements envoyes a la vue.
|
|
||||||
Methode reimplentee pour gerer le conflit de raccourcis avec Suppr
|
|
||||||
(supprimer une partie ou supprimer le caractere suivant)
|
|
||||||
@param e evenement a gerer
|
|
||||||
*/
|
|
||||||
bool ElementView::event(QEvent *e) {
|
|
||||||
if (e -> type() == QEvent::ShortcutOverride && scene_ -> focusItem()) {
|
|
||||||
e -> accept();
|
|
||||||
return(true);
|
|
||||||
}
|
|
||||||
return(QGraphicsView::event(e));
|
|
||||||
}
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "lineeditor.h"
|
|
||||||
#include "partline.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param editor L'editeur d'element concerne
|
|
||||||
@param line La ligne a editer
|
|
||||||
@param parent le Widget parent
|
|
||||||
*/
|
|
||||||
LineEditor::LineEditor(QETElementEditor *editor, PartLine *line, QWidget *parent) : ElementItemEditor(editor, parent) {
|
|
||||||
|
|
||||||
part = line;
|
|
||||||
|
|
||||||
x1 = new QLineEdit();
|
|
||||||
y1 = new QLineEdit();
|
|
||||||
x2 = new QLineEdit();
|
|
||||||
y2 = new QLineEdit();
|
|
||||||
|
|
||||||
x1 -> setValidator(new QDoubleValidator(x1));
|
|
||||||
y1 -> setValidator(new QDoubleValidator(y1));
|
|
||||||
x2 -> setValidator(new QDoubleValidator(x2));
|
|
||||||
y2 -> setValidator(new QDoubleValidator(y2));
|
|
||||||
|
|
||||||
QGridLayout *grid = new QGridLayout(this);
|
|
||||||
grid -> addWidget(new QLabel("x1"), 0, 0);
|
|
||||||
grid -> addWidget(x1, 0, 1);
|
|
||||||
grid -> addWidget(new QLabel("y1"), 0, 2);
|
|
||||||
grid -> addWidget(y1, 0, 3);
|
|
||||||
grid -> addWidget(new QLabel("x2"), 1, 0);
|
|
||||||
grid -> addWidget(x2, 1, 1);
|
|
||||||
grid -> addWidget(new QLabel("y2"), 1, 2);
|
|
||||||
grid -> addWidget(y2, 1, 3);
|
|
||||||
|
|
||||||
updateForm();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
LineEditor::~LineEditor() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Met a jour la ligne a partir des donnees du formulaire
|
|
||||||
*/
|
|
||||||
void LineEditor::updateLine() {
|
|
||||||
part -> setLine(
|
|
||||||
QLineF(
|
|
||||||
part -> mapFromScene(
|
|
||||||
x1 -> text().toDouble(),
|
|
||||||
y1 -> text().toDouble()
|
|
||||||
),
|
|
||||||
part -> mapFromScene(
|
|
||||||
x2 -> text().toDouble(),
|
|
||||||
y2 -> text().toDouble()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Met a jour l'abscisse du premier point de la ligne et cree un objet d'annulation
|
|
||||||
void LineEditor::updateLineX1() { addChangePartCommand(tr("abscisse point 1"), part, "x1", x1 -> text().toDouble()); }
|
|
||||||
/// Met a jour l'ordonnee du premier point de la ligne et cree un objet d'annulation
|
|
||||||
void LineEditor::updateLineY1() { addChangePartCommand(tr("ordonn\351e point 1"), part, "y1", y1 -> text().toDouble()); }
|
|
||||||
/// Met a jour l'abscisse du second point de la ligne et cree un objet d'annulation
|
|
||||||
void LineEditor::updateLineX2() { addChangePartCommand(tr("abscisse point 2"), part, "x2", x2 -> text().toDouble()); }
|
|
||||||
/// Met a jour l'ordonnee du second point de la ligne et cree un objet d'annulation
|
|
||||||
void LineEditor::updateLineY2() { addChangePartCommand(tr("ordonn\351e point 2"), part, "y2", y2 -> text().toDouble()); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
Met a jour le formulaire d'edition
|
|
||||||
*/
|
|
||||||
void LineEditor::updateForm() {
|
|
||||||
activeConnections(false);
|
|
||||||
QPointF p1(part -> sceneP1());
|
|
||||||
QPointF p2(part -> sceneP2());
|
|
||||||
x1 -> setText(QString("%1").arg(p1.x()));
|
|
||||||
y1 -> setText(QString("%1").arg(p1.y()));
|
|
||||||
x2 -> setText(QString("%1").arg(p2.x()));
|
|
||||||
y2 -> setText(QString("%1").arg(p2.y()));
|
|
||||||
activeConnections(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Active ou desactive les connexionx signaux/slots entre les widgets internes.
|
|
||||||
@param active true pour activer les connexions, false pour les desactiver
|
|
||||||
*/
|
|
||||||
void LineEditor::activeConnections(bool active) {
|
|
||||||
if (active) {
|
|
||||||
connect(x1, SIGNAL(editingFinished()), this, SLOT(updateLineX1()));
|
|
||||||
connect(y1, SIGNAL(editingFinished()), this, SLOT(updateLineY1()));
|
|
||||||
connect(x2, SIGNAL(editingFinished()), this, SLOT(updateLineX2()));
|
|
||||||
connect(y2, SIGNAL(editingFinished()), this, SLOT(updateLineY2()));
|
|
||||||
} else {
|
|
||||||
connect(x1, SIGNAL(editingFinished()), this, SLOT(updateLineX1()));
|
|
||||||
connect(y1, SIGNAL(editingFinished()), this, SLOT(updateLineY1()));
|
|
||||||
connect(x2, SIGNAL(editingFinished()), this, SLOT(updateLineX2()));
|
|
||||||
connect(y2, SIGNAL(editingFinished()), this, SLOT(updateLineY2()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,254 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "partline.h"
|
|
||||||
#include "lineeditor.h"
|
|
||||||
#include <cmath>
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param editor L'editeur d'element concerne
|
|
||||||
@param parent Le QGraphicsItem parent de cette ligne
|
|
||||||
@param scene La scene sur laquelle figure cette ligne
|
|
||||||
*/
|
|
||||||
PartLine::PartLine(QETElementEditor *editor, QGraphicsItem *parent, QGraphicsScene *scene) : QGraphicsLineItem(parent, scene), CustomElementGraphicPart(editor) {
|
|
||||||
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
|
|
||||||
setAcceptedMouseButtons(Qt::LeftButton);
|
|
||||||
informations = new LineEditor(elementEditor(), this);
|
|
||||||
informations -> setElementTypeName(name());
|
|
||||||
style_editor -> appendWidget(informations);
|
|
||||||
style_editor -> setElementTypeName(name());
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
PartLine::~PartLine() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Dessine la ligne
|
|
||||||
@param painter QPainter a utiliser pour rendre le dessin
|
|
||||||
@param options Options pour affiner le rendu
|
|
||||||
@param widget Widget sur lequel le rendu est effectue
|
|
||||||
*/
|
|
||||||
void PartLine::paint(QPainter *painter, const QStyleOptionGraphicsItem */*q*/, QWidget */*w*/) {
|
|
||||||
applyStylesToQPainter(*painter);
|
|
||||||
QPen t = painter -> pen();
|
|
||||||
if (isSelected()) {
|
|
||||||
t.setColor(Qt::red);
|
|
||||||
painter -> setPen(t);
|
|
||||||
}
|
|
||||||
painter -> setBrush(Qt::NoBrush);
|
|
||||||
painter -> drawLine(line());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Exporte la ligne en XML
|
|
||||||
@param xml_document Document XML a utiliser pour creer l'element XML
|
|
||||||
@return un element XML decrivant la ligne
|
|
||||||
*/
|
|
||||||
const QDomElement PartLine::toXml(QDomDocument &xml_document) const {
|
|
||||||
|
|
||||||
QPointF p1(sceneP1());
|
|
||||||
QPointF p2(sceneP2());
|
|
||||||
|
|
||||||
QDomElement xml_element = xml_document.createElement("line");
|
|
||||||
xml_element.setAttribute("x1", p1.x());
|
|
||||||
xml_element.setAttribute("y1", p1.y());
|
|
||||||
xml_element.setAttribute("x2", p2.x());
|
|
||||||
xml_element.setAttribute("y2", p2.y());
|
|
||||||
stylesToXml(xml_element);
|
|
||||||
return(xml_element);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Importe les proprietes d'une ligne depuis un element XML
|
|
||||||
@param qde Element XML a lire
|
|
||||||
*/
|
|
||||||
void PartLine::fromXml(const QDomElement &qde) {
|
|
||||||
stylesFromXml(qde);
|
|
||||||
setLine(
|
|
||||||
QLineF(
|
|
||||||
mapFromScene(
|
|
||||||
qde.attribute("x1", "0").toDouble(),
|
|
||||||
qde.attribute("y1", "0").toDouble()
|
|
||||||
),
|
|
||||||
mapFromScene(
|
|
||||||
qde.attribute("x2", "0").toDouble(),
|
|
||||||
qde.attribute("y2", "0").toDouble()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Specifie la valeur d'une propriete donnee de la ligne
|
|
||||||
@param property propriete a modifier. Valeurs acceptees :
|
|
||||||
* x1 : abscisse du premier point
|
|
||||||
* y1 : ordonnee du second point
|
|
||||||
* x2 : abscisse du premier point
|
|
||||||
* y2 : ordonnee du second point
|
|
||||||
@param value Valeur a attribuer a la propriete
|
|
||||||
*/
|
|
||||||
void PartLine::setProperty(const QString &property, const QVariant &value) {
|
|
||||||
CustomElementGraphicPart::setProperty(property, value);
|
|
||||||
if (!value.canConvert(QVariant::Double)) return;
|
|
||||||
QPointF new_p1(sceneP1()), new_p2(sceneP2());
|
|
||||||
bool setline = true;
|
|
||||||
if (property == "x1") {
|
|
||||||
new_p1.setX(value.toDouble());
|
|
||||||
} else if (property == "y1") {
|
|
||||||
new_p1.setY(value.toDouble());
|
|
||||||
} else if (property == "x2") {
|
|
||||||
new_p2.setX(value.toDouble());
|
|
||||||
} else if (property == "y2") {
|
|
||||||
new_p2.setY(value.toDouble());
|
|
||||||
} else setline = false;
|
|
||||||
setLine(QLineF(mapFromScene(new_p1), mapFromScene(new_p2)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Permet d'acceder a la valeur d'une propriete donnee de la ligne
|
|
||||||
@param property propriete lue. Valeurs acceptees :
|
|
||||||
* x1 : abscisse du premier point
|
|
||||||
* y1 : ordonnee du second point
|
|
||||||
* x2 : abscisse du premier point
|
|
||||||
* y2 : ordonnee du second point
|
|
||||||
@return La valeur de la propriete property
|
|
||||||
*/
|
|
||||||
QVariant PartLine::property(const QString &property) {
|
|
||||||
// appelle la methode property de CustomElementGraphicpart pour les styles
|
|
||||||
QVariant style_property = CustomElementGraphicPart::property(property);
|
|
||||||
if (style_property != QVariant()) return(style_property);
|
|
||||||
|
|
||||||
if (property == "x1") {
|
|
||||||
return(sceneP1().x());
|
|
||||||
} else if (property == "y1") {
|
|
||||||
return(sceneP1().y());
|
|
||||||
} else if (property == "x2") {
|
|
||||||
return(sceneP2().x());
|
|
||||||
} else if (property == "y2") {
|
|
||||||
return(sceneP2().y());
|
|
||||||
}
|
|
||||||
return(QVariant());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere les changements intervenant sur cette partie
|
|
||||||
@param change Type de changement
|
|
||||||
@param value Valeur numerique relative au changement
|
|
||||||
*/
|
|
||||||
QVariant PartLine::itemChange(GraphicsItemChange change, const QVariant &value) {
|
|
||||||
if (scene()) {
|
|
||||||
if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemSelectedChange) {
|
|
||||||
informations -> updateForm();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return(QGraphicsLineItem::itemChange(change, value));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return le premier point, dans les coordonnees de la scene.
|
|
||||||
*/
|
|
||||||
QPointF PartLine::sceneP1() const {
|
|
||||||
return(mapToScene(line().p1()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return le second point, dans les coordonnees de la scene.
|
|
||||||
*/
|
|
||||||
QPointF PartLine::sceneP2() const {
|
|
||||||
return(mapToScene(line().p2()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return la forme selectionnable de la ligne
|
|
||||||
*/
|
|
||||||
QPainterPath PartLine::shape() const {
|
|
||||||
QList<QPointF> points = fourShapePoints();
|
|
||||||
QPainterPath t;
|
|
||||||
t.setFillRule(Qt::WindingFill);
|
|
||||||
t.moveTo(points.at(0));
|
|
||||||
t.lineTo(points.at(1));
|
|
||||||
t.lineTo(points.at(2));
|
|
||||||
t.lineTo(points.at(3));
|
|
||||||
t.lineTo(points.at(0));
|
|
||||||
return(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return une liste contenant les deux points de la droite + les 4 points entourant ces deux points
|
|
||||||
*/
|
|
||||||
QList<QPointF> PartLine::fourShapePoints() const {
|
|
||||||
const qreal marge = 2.0;
|
|
||||||
// on a donc A(xa , ya) et B(xb, yb)
|
|
||||||
QPointF a = line().p1();
|
|
||||||
QPointF b = line().p2();
|
|
||||||
|
|
||||||
QList<QPointF> result;
|
|
||||||
|
|
||||||
// cas particulier : la droite se ramene a un point
|
|
||||||
if (a == b) {
|
|
||||||
result << QPointF(a.x() - marge, a.y() - marge);
|
|
||||||
result << QPointF(a.x() - marge, a.y() + marge);
|
|
||||||
result << QPointF(a.x() + marge, a.y() + marge);
|
|
||||||
result << QPointF(a.x() + marge, a.y() - marge);
|
|
||||||
} else {
|
|
||||||
|
|
||||||
// on calcule le vecteur AB : (xb-xa, yb-ya)
|
|
||||||
QPointF v_ab = b - a;
|
|
||||||
|
|
||||||
// et la distance AB : racine des coordonnees du vecteur au carre
|
|
||||||
qreal ab = sqrt(pow(v_ab.x(), 2) + pow(v_ab.y(), 2));
|
|
||||||
|
|
||||||
// ensuite on definit le vecteur u(a, b) qui est egal au vecteur AB divise
|
|
||||||
// par sa longueur et multiplie par la longueur de la marge que tu veux
|
|
||||||
// laisser
|
|
||||||
QPointF u = v_ab / ab * marge;
|
|
||||||
|
|
||||||
// on definit le vecteur v(-b , a) qui est perpendiculaire a AB
|
|
||||||
QPointF v(-u.y(), u.x());
|
|
||||||
QPointF m = -u + v; // on a le vecteur M = -u + v
|
|
||||||
QPointF n = -u - v; // et le vecteur N=-u-v
|
|
||||||
QPointF h = a + m; // H = A + M
|
|
||||||
QPointF k = a + n; // K = A + N
|
|
||||||
QPointF i = b - n; // I = B - N
|
|
||||||
QPointF j = b - m; // J = B - M
|
|
||||||
|
|
||||||
result << h << i << j << k;
|
|
||||||
}
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return le rectangle delimitant cette partie.
|
|
||||||
*/
|
|
||||||
QRectF PartLine::boundingRect() const {
|
|
||||||
qreal adjust = 1.5;
|
|
||||||
QRectF r(QGraphicsLineItem::boundingRect());
|
|
||||||
r.adjust(-adjust, -adjust, adjust, adjust);
|
|
||||||
return(r);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return true si cette partie n'est pas pertinente et ne merite pas d'etre
|
|
||||||
conservee / enregistree.
|
|
||||||
Une ligne est pertinente des lors que ses deux points sont differents
|
|
||||||
*/
|
|
||||||
bool PartLine::isUseless() const {
|
|
||||||
return(sceneP1() == sceneP2());
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,219 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "parttext.h"
|
|
||||||
#include "texteditor.h"
|
|
||||||
#include "elementscene.h"
|
|
||||||
#include "qetapp.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param editor L'editeur d'element concerne
|
|
||||||
@param parent Le QGraphicsItem parent de ce texte statique
|
|
||||||
@param scene La scene sur laquelle figure ce texte statique
|
|
||||||
*/
|
|
||||||
PartText::PartText(QETElementEditor *editor, QGraphicsItem *parent, ElementScene *scene) :
|
|
||||||
QGraphicsTextItem(parent, scene),
|
|
||||||
CustomElementPart(editor)
|
|
||||||
{
|
|
||||||
setDefaultTextColor(Qt::black);
|
|
||||||
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
|
|
||||||
setPlainText(QObject::tr("T"));
|
|
||||||
infos = new TextEditor(elementEditor(), this);
|
|
||||||
infos -> setElementTypeName(name());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
PartText::~PartText() {
|
|
||||||
delete infos;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Importe les proprietes d'un texte statique depuis un element XML
|
|
||||||
@param xml_element Element XML a lire
|
|
||||||
*/
|
|
||||||
void PartText::fromXml(const QDomElement &xml_element) {
|
|
||||||
bool ok;
|
|
||||||
int font_size = xml_element.attribute("size").toInt(&ok);
|
|
||||||
if (!ok || font_size < 1) font_size = 20;
|
|
||||||
|
|
||||||
setFont(QFont(QString(QETApp::diagramTextsFont()), font_size));
|
|
||||||
setPlainText(xml_element.attribute("text"));
|
|
||||||
setPos(
|
|
||||||
xml_element.attribute("x").toDouble(),
|
|
||||||
xml_element.attribute("y").toDouble()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Exporte le texte statique en XML
|
|
||||||
@param xml_document Document XML a utiliser pour creer l'element XML
|
|
||||||
@return un element XML decrivant le texte statique
|
|
||||||
*/
|
|
||||||
const QDomElement PartText::toXml(QDomDocument &xml_document) const {
|
|
||||||
QDomElement xml_element = xml_document.createElement("text");
|
|
||||||
xml_element.setAttribute("x", QString("%1").arg((scenePos() + margin()).x()));
|
|
||||||
xml_element.setAttribute("y", QString("%1").arg((scenePos() + margin()).y()));
|
|
||||||
xml_element.setAttribute("text", toPlainText());
|
|
||||||
xml_element.setAttribute("size", font().pointSize());
|
|
||||||
return(xml_element);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return Le widget permettant d'editer ce texte statique
|
|
||||||
*/
|
|
||||||
QWidget *PartText::elementInformations() {
|
|
||||||
return(infos);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Retourne la position du texte, l'origine etant le point en bas a gauche du
|
|
||||||
texte (et pas du cadre)
|
|
||||||
@return la position du texte
|
|
||||||
*/
|
|
||||||
QPointF PartText::pos() const {
|
|
||||||
return(QGraphicsTextItem::pos() + margin());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Specifie la position du texte statique
|
|
||||||
@param left_corner_pos Nouvelle position
|
|
||||||
*/
|
|
||||||
void PartText::setPos(const QPointF &left_corner_pos) {
|
|
||||||
QGraphicsTextItem::setPos(left_corner_pos - margin());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Specifie la position du texte statique
|
|
||||||
@param x abscisse de la nouvelle position
|
|
||||||
@param y ordonnee de la nouvelle position
|
|
||||||
*/
|
|
||||||
void PartText::setPos(qreal x, qreal y) {
|
|
||||||
QGraphicsTextItem::setPos(QPointF(x, y) - margin());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return Les coordonnees du point situe en bas a gauche du texte.
|
|
||||||
*/
|
|
||||||
QPointF PartText::margin() const {
|
|
||||||
QFont used_font = font();
|
|
||||||
QFontMetrics qfm(used_font);
|
|
||||||
QPointF margin(
|
|
||||||
(boundingRect().width () - qfm.width(toPlainText())) / 2.0,
|
|
||||||
((boundingRect().height() - used_font.pointSizeF()) / 3.0) + used_font.pointSizeF()
|
|
||||||
);
|
|
||||||
return(margin);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Permet a l'element texte de redevenir deplacable a la fin de l'edition de texte
|
|
||||||
@param e Le QFocusEvent decrivant la perte de focus
|
|
||||||
*/
|
|
||||||
void PartText::focusOutEvent(QFocusEvent *e) {
|
|
||||||
QGraphicsTextItem::focusOutEvent(e);
|
|
||||||
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Permet a l'element texte de devenir editable lorsqu'on double-clique dessus
|
|
||||||
@param e Le QGraphicsSceneMouseEvent qui decrit le double-clic
|
|
||||||
*/
|
|
||||||
void PartText::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *e) {
|
|
||||||
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);
|
|
||||||
setTextInteractionFlags(Qt::TextEditorInteraction);
|
|
||||||
QGraphicsTextItem::mouseDoubleClickEvent(e);
|
|
||||||
setFocus(Qt::MouseFocusReason);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Specifie la valeur d'une propriete donnee du texte statique
|
|
||||||
@param property propriete a modifier. Valeurs acceptees :
|
|
||||||
* x : abscisse de la position
|
|
||||||
* y : ordonnee de la position
|
|
||||||
* size : taille du texte
|
|
||||||
* text : texte
|
|
||||||
@param value Valeur a attribuer a la propriete
|
|
||||||
*/
|
|
||||||
void PartText::setProperty(const QString &property, const QVariant &value) {
|
|
||||||
if (property == "x") {
|
|
||||||
if (!value.canConvert(QVariant::Double)) return;
|
|
||||||
setPos(value.toDouble(), pos().y());
|
|
||||||
} else if (property == "y") {
|
|
||||||
if (!value.canConvert(QVariant::Double)) return;
|
|
||||||
setPos(pos().x(), value.toDouble());
|
|
||||||
} else if (property == "size") {
|
|
||||||
if (!value.canConvert(QVariant::Int)) return;
|
|
||||||
setFont(QFont(font().family(), value.toInt()));
|
|
||||||
} else if (property == "text") {
|
|
||||||
setPlainText(value.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Permet d'acceder a la valeur d'une propriete donnee du texte statique
|
|
||||||
@param property propriete lue. Valeurs acceptees :
|
|
||||||
* x : abscisse de la position
|
|
||||||
* y : ordonnee de la position
|
|
||||||
* size : taille du texte
|
|
||||||
* text : texte
|
|
||||||
@return La valeur de la propriete property
|
|
||||||
*/
|
|
||||||
QVariant PartText::property(const QString &property) {
|
|
||||||
if (property == "x") {
|
|
||||||
return((scenePos() + margin()).x());
|
|
||||||
} else if (property == "y") {
|
|
||||||
return((scenePos() + margin()).y());
|
|
||||||
} else if (property == "size") {
|
|
||||||
return(font().pointSize());
|
|
||||||
} else if (property == "text") {
|
|
||||||
return(toPlainText());
|
|
||||||
}
|
|
||||||
return(QVariant());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Gere les changements intervenant sur cette partie
|
|
||||||
@param change Type de changement
|
|
||||||
@param value Valeur numerique relative au changement
|
|
||||||
*/
|
|
||||||
QVariant PartText::itemChange(GraphicsItemChange change, const QVariant &value) {
|
|
||||||
if (scene()) {
|
|
||||||
if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemSelectedChange) {
|
|
||||||
infos -> updateForm();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return(QGraphicsTextItem::itemChange(change, value));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return le rectangle delimitant cette partie.
|
|
||||||
*/
|
|
||||||
QRectF PartText::boundingRect() const {
|
|
||||||
QRectF r = QGraphicsTextItem::boundingRect();
|
|
||||||
r.adjust(0.0, -2.0, 0.0, 0.0);
|
|
||||||
return(r);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return true si cette partie n'est pas pertinente et ne merite pas d'etre
|
|
||||||
conservee / enregistree.
|
|
||||||
Un texte statique n'est pas pertinent lorsque son texte est vide.
|
|
||||||
*/
|
|
||||||
bool PartText::isUseless() const {
|
|
||||||
return(toPlainText().isEmpty());
|
|
||||||
}
|
|
||||||
@@ -1,733 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2006-2007 Xavier Guerrin
|
|
||||||
This file is part of QElectroTech.
|
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "qetelementeditor.h"
|
|
||||||
#include "qetapp.h"
|
|
||||||
#include "elementscene.h"
|
|
||||||
#include "elementview.h"
|
|
||||||
#include "customelementpart.h"
|
|
||||||
#include "newelementwizard.h"
|
|
||||||
#include "elementitemeditor.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructeur
|
|
||||||
@param parent QWidget parent
|
|
||||||
*/
|
|
||||||
QETElementEditor::QETElementEditor(QWidget *parent) :
|
|
||||||
QMainWindow(parent),
|
|
||||||
read_only(false),
|
|
||||||
min_title(tr("QElectroTech - \311diteur d'\351l\351ment")),
|
|
||||||
_filename(QString())
|
|
||||||
{
|
|
||||||
setWindowTitle(min_title);
|
|
||||||
setWindowIcon(QIcon(":/ico/qet.png"));
|
|
||||||
|
|
||||||
setupInterface();
|
|
||||||
setupActions();
|
|
||||||
setupMenus();
|
|
||||||
|
|
||||||
// la fenetre est maximisee par defaut
|
|
||||||
setMinimumSize(QSize(500, 350));
|
|
||||||
setWindowState(Qt::WindowMaximized);
|
|
||||||
|
|
||||||
// lecture des parametres
|
|
||||||
readSettings();
|
|
||||||
|
|
||||||
// affichage
|
|
||||||
show();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destructeur
|
|
||||||
QETElementEditor::~QETElementEditor() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Met en place les actions
|
|
||||||
*/
|
|
||||||
void QETElementEditor::setupActions() {
|
|
||||||
new_element = new QAction(QIcon(":/ico/new.png"), tr("&Nouveau"), this);
|
|
||||||
open = new QAction(QIcon(":/ico/open.png"), tr("&Ouvrir"), this);
|
|
||||||
save = new QAction(QIcon(":/ico/save.png"), tr("&Enregistrer"), this);
|
|
||||||
save_as = new QAction(QIcon(":/ico/saveas.png"), tr("Enregistrer sous"), this);
|
|
||||||
reload = new QAction(QIcon(":/ico/reload.png"), tr("Recharger"), this);
|
|
||||||
quit = new QAction(QIcon(":/ico/exit.png"), tr("&Quitter"), this);
|
|
||||||
selectall = new QAction( tr("Tout s\351lectionner"), this);
|
|
||||||
deselectall = new QAction( tr("D\351s\351lectionner tout"), this);
|
|
||||||
inv_select = new QAction( tr("Inverser la s\351lection"), this);
|
|
||||||
edit_delete = new QAction(QIcon(":/ico/delete.png"), tr("&Supprimer"), this);
|
|
||||||
edit_size_hs = new QAction(QIcon(":/ico/hotspot.png"), tr("\311diter la taille et le point de saisie"), this);
|
|
||||||
edit_names = new QAction(QIcon(":/ico/names.png"), tr("\311diter les noms"), this);
|
|
||||||
edit_ori = new QAction(QIcon(":/ico/orientations.png"), tr("\311diter les orientations"), this);
|
|
||||||
edit_raise = new QAction(QIcon(":/ico/raise.png"), tr("Rapprocher"), this);
|
|
||||||
edit_lower = new QAction(QIcon(":/ico/lower.png"), tr("\311loigner"), this);
|
|
||||||
edit_backward = new QAction(QIcon(":/ico/send_backward.png"),tr("Envoyer au fond"), this);
|
|
||||||
edit_forward = new QAction(QIcon(":/ico/bring_forward.png"),tr("Amener au premier plan"), this);
|
|
||||||
move = new QAction(QIcon(":/ico/select.png"), tr("D\351placer un objet"), this);
|
|
||||||
add_line = new QAction(QIcon(":/ico/line.png"), tr("Ajouter une ligne"), this);
|
|
||||||
add_ellipse = new QAction(QIcon(":/ico/ellipse.png"), tr("Ajouter une ellipse"), this);
|
|
||||||
add_circle = new QAction(QIcon(":/ico/circle.png"), tr("Ajouter un cercle"), this);
|
|
||||||
add_polygon = new QAction(QIcon(":/ico/polygon.png"), tr("Ajouter un polygone"), this);
|
|
||||||
add_text = new QAction(QIcon(":/ico/text.png"), tr("Ajouter du texte"), this);
|
|
||||||
add_arc = new QAction(QIcon(":/ico/arc.png"), tr("Ajouter un arc de cercle"), this);
|
|
||||||
add_terminal = new QAction(QIcon(":/ico/terminal.png"), tr("Ajouter une borne"), this);
|
|
||||||
add_textfield = new QAction(QIcon(":/ico/textfield.png"), tr("Ajouter un champ de texte"), this);
|
|
||||||
|
|
||||||
undo = ce_scene -> undoStack().createUndoAction(this, tr("Annuler"));
|
|
||||||
redo = ce_scene -> undoStack().createRedoAction(this, tr("Refaire"));
|
|
||||||
undo -> setIcon(QIcon(":/ico/undo.png"));
|
|
||||||
redo -> setIcon(QIcon(":/ico/redo.png"));
|
|
||||||
undo -> setShortcuts(QKeySequence::Undo);
|
|
||||||
redo -> setShortcuts(QKeySequence::Redo);
|
|
||||||
|
|
||||||
new_element -> setShortcut(QKeySequence::New);
|
|
||||||
open -> setShortcut(QKeySequence::Open);
|
|
||||||
save -> setShortcut(QKeySequence::Save);
|
|
||||||
reload -> setShortcut(QKeySequence::Refresh);
|
|
||||||
quit -> setShortcut(QKeySequence(tr("Ctrl+Q")));
|
|
||||||
selectall -> setShortcut(QKeySequence::SelectAll);
|
|
||||||
deselectall -> setShortcut(QKeySequence(tr("Ctrl+Shift+A")));
|
|
||||||
inv_select -> setShortcut(QKeySequence(tr("Ctrl+I")));
|
|
||||||
edit_delete -> setShortcut(QKeySequence(tr("Suppr")));
|
|
||||||
edit_names -> setShortcut(QKeySequence(tr("Ctrl+E")));
|
|
||||||
edit_size_hs -> setShortcut(QKeySequence(tr("Ctrl+R")));
|
|
||||||
edit_ori -> setShortcut(QKeySequence(tr("Ctrl+T")));
|
|
||||||
|
|
||||||
edit_raise -> setShortcut(QKeySequence(tr("Ctrl+Shift+Up")));
|
|
||||||
edit_lower -> setShortcut(QKeySequence(tr("Ctrl+Shift+Down")));
|
|
||||||
edit_backward -> setShortcut(QKeySequence(tr("Ctrl+Shift+End")));
|
|
||||||
edit_forward -> setShortcut(QKeySequence(tr("Ctrl+Shift+Home")));
|
|
||||||
|
|
||||||
connect(new_element, SIGNAL(triggered()), this, SLOT(slot_new()));
|
|
||||||
connect(open, SIGNAL(triggered()), this, SLOT(slot_open()));
|
|
||||||
connect(save, SIGNAL(triggered()), this, SLOT(slot_save()));
|
|
||||||
connect(save_as, SIGNAL(triggered()), this, SLOT(slot_saveAs()));
|
|
||||||
connect(reload, SIGNAL(triggered()), this, SLOT(slot_reload()));
|
|
||||||
connect(quit, SIGNAL(triggered()), this, SLOT(close()));
|
|
||||||
connect(selectall, SIGNAL(triggered()), ce_scene, SLOT(slot_selectAll()));
|
|
||||||
connect(deselectall, SIGNAL(triggered()), ce_scene, SLOT(slot_deselectAll()));
|
|
||||||
connect(inv_select, SIGNAL(triggered()), ce_scene, SLOT(slot_invertSelection()));
|
|
||||||
connect(edit_delete, SIGNAL(triggered()), ce_scene, SLOT(slot_delete()));
|
|
||||||
connect(edit_size_hs, SIGNAL(triggered()), ce_scene, SLOT(slot_editSizeHotSpot()));
|
|
||||||
connect(edit_names, SIGNAL(triggered()), ce_scene, SLOT(slot_editNames()));
|
|
||||||
connect(edit_ori, SIGNAL(triggered()), ce_scene, SLOT(slot_editOrientations()));
|
|
||||||
connect(edit_forward, SIGNAL(triggered()), ce_scene, SLOT(slot_bringForward()));
|
|
||||||
connect(edit_raise, SIGNAL(triggered()), ce_scene, SLOT(slot_raise()));
|
|
||||||
connect(edit_lower, SIGNAL(triggered()), ce_scene, SLOT(slot_lower()));
|
|
||||||
connect(edit_backward, SIGNAL(triggered()), ce_scene, SLOT(slot_sendBackward()));
|
|
||||||
connect(move, SIGNAL(triggered()), ce_scene, SLOT(slot_move()));
|
|
||||||
connect(add_line, SIGNAL(triggered()), ce_scene, SLOT(slot_addLine()));
|
|
||||||
connect(add_ellipse, SIGNAL(triggered()), ce_scene, SLOT(slot_addEllipse()));
|
|
||||||
connect(add_circle, SIGNAL(triggered()), ce_scene, SLOT(slot_addCircle()));
|
|
||||||
connect(add_polygon, SIGNAL(triggered()), ce_scene, SLOT(slot_addPolygon()));
|
|
||||||
connect(add_text, SIGNAL(triggered()), ce_scene, SLOT(slot_addText()));
|
|
||||||
connect(add_arc, SIGNAL(triggered()), ce_scene, SLOT(slot_addArc()));
|
|
||||||
connect(add_terminal, SIGNAL(triggered()), ce_scene, SLOT(slot_addTerminal()));
|
|
||||||
connect(add_textfield, SIGNAL(triggered()), ce_scene, SLOT(slot_addTextField()));
|
|
||||||
|
|
||||||
connect(move, SIGNAL(triggered()), this, SLOT(slot_setRubberBandToView()));
|
|
||||||
connect(add_line, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
|
|
||||||
connect(add_ellipse, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
|
|
||||||
connect(add_circle, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
|
|
||||||
connect(add_polygon, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
|
|
||||||
connect(add_text, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
|
|
||||||
connect(add_arc, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
|
|
||||||
connect(add_terminal, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
|
|
||||||
connect(add_textfield, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
|
|
||||||
|
|
||||||
connect(ce_scene, SIGNAL(needNormalMode()), this, SLOT(slot_setNormalMode()));
|
|
||||||
|
|
||||||
move -> setCheckable(true);
|
|
||||||
add_line -> setCheckable(true);
|
|
||||||
add_ellipse -> setCheckable(true);
|
|
||||||
add_circle -> setCheckable(true);
|
|
||||||
add_polygon -> setCheckable(true);
|
|
||||||
add_text -> setCheckable(true);
|
|
||||||
add_arc -> setCheckable(true);
|
|
||||||
add_terminal -> setCheckable(true);
|
|
||||||
add_textfield -> setCheckable(true);
|
|
||||||
|
|
||||||
parts = new QActionGroup(this);
|
|
||||||
parts -> addAction(move);
|
|
||||||
parts -> addAction(add_line);
|
|
||||||
parts -> addAction(add_ellipse);
|
|
||||||
parts -> addAction(add_circle);
|
|
||||||
parts -> addAction(add_polygon);
|
|
||||||
parts -> addAction(add_text);
|
|
||||||
parts -> addAction(add_arc);
|
|
||||||
parts -> addAction(add_textfield);
|
|
||||||
parts -> addAction(add_terminal);
|
|
||||||
parts -> setExclusive(true);
|
|
||||||
|
|
||||||
parts_toolbar = new QToolBar(tr("Parties"), this);
|
|
||||||
parts_toolbar -> setObjectName("parts");
|
|
||||||
foreach (QAction *action, parts -> actions()) parts_toolbar -> addAction(action);
|
|
||||||
move -> setChecked(true);
|
|
||||||
parts_toolbar -> setAllowedAreas(Qt::AllToolBarAreas);
|
|
||||||
|
|
||||||
/*
|
|
||||||
QAction *xml_preview = new QAction(QIcon(":/ico/info.png"), tr("XML"), this);
|
|
||||||
connect(xml_preview, SIGNAL(triggered()), this, SLOT(xmlPreview()));
|
|
||||||
parts_toolbar -> addAction(xml_preview);
|
|
||||||
*/
|
|
||||||
|
|
||||||
addToolBar(Qt::LeftToolBarArea, parts_toolbar);
|
|
||||||
|
|
||||||
connect(ce_scene, SIGNAL(selectionChanged()), this, SLOT(slot_updateInformations()));
|
|
||||||
connect(ce_scene, SIGNAL(selectionChanged()), this, SLOT(slot_updateMenus()));
|
|
||||||
connect(&(ce_scene -> undoStack()), SIGNAL(cleanChanged(bool)), this, SLOT(slot_updateMenus()));
|
|
||||||
connect(&(ce_scene -> undoStack()), SIGNAL(cleanChanged(bool)), this, SLOT(slot_updateTitle()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Met en place les menus.
|
|
||||||
*/
|
|
||||||
void QETElementEditor::setupMenus() {
|
|
||||||
file_menu = new QMenu(tr("Fichier"), this);
|
|
||||||
edit_menu = new QMenu(tr("\311dition"), this);
|
|
||||||
display_menu = new QMenu(tr("Affichage"), this);
|
|
||||||
tools_menu = new QMenu(tr("Outils"), this);
|
|
||||||
help_menu = new QMenu(tr("Aide"), this);
|
|
||||||
|
|
||||||
file_menu -> setTearOffEnabled(true);
|
|
||||||
edit_menu -> setTearOffEnabled(true);
|
|
||||||
display_menu -> setTearOffEnabled(true);
|
|
||||||
tools_menu -> setTearOffEnabled(true);
|
|
||||||
help_menu -> setTearOffEnabled(true);
|
|
||||||
|
|
||||||
file_menu -> addAction(new_element);
|
|
||||||
file_menu -> addAction(open);
|
|
||||||
file_menu -> addAction(save);
|
|
||||||
file_menu -> addAction(save_as);
|
|
||||||
file_menu -> addSeparator();
|
|
||||||
file_menu -> addAction(reload);
|
|
||||||
file_menu -> addSeparator();
|
|
||||||
file_menu -> addAction(quit);
|
|
||||||
|
|
||||||
edit_menu -> addAction(undo);
|
|
||||||
edit_menu -> addAction(redo);
|
|
||||||
edit_menu -> addSeparator();
|
|
||||||
edit_menu -> addAction(selectall);
|
|
||||||
edit_menu -> addAction(deselectall);
|
|
||||||
edit_menu -> addAction(inv_select);
|
|
||||||
edit_menu -> addSeparator();
|
|
||||||
edit_menu -> addAction(edit_delete);
|
|
||||||
edit_menu -> addSeparator();
|
|
||||||
edit_menu -> addAction(edit_names);
|
|
||||||
edit_menu -> addAction(edit_size_hs);
|
|
||||||
edit_menu -> addAction(edit_ori);
|
|
||||||
edit_menu -> addSeparator();
|
|
||||||
edit_menu -> addAction(edit_forward);
|
|
||||||
edit_menu -> addAction(edit_raise);
|
|
||||||
edit_menu -> addAction(edit_lower);
|
|
||||||
edit_menu -> addAction(edit_backward);
|
|
||||||
|
|
||||||
// menu Affichage > Afficher
|
|
||||||
QMenu *display_toolbars = createPopupMenu();
|
|
||||||
display_toolbars -> setTearOffEnabled(true);
|
|
||||||
display_toolbars -> setTitle(tr("Afficher"));
|
|
||||||
display_menu -> addMenu(display_toolbars);
|
|
||||||
|
|
||||||
menuBar() -> addMenu(file_menu);
|
|
||||||
menuBar() -> addMenu(edit_menu);
|
|
||||||
menuBar() -> addMenu(display_menu);
|
|
||||||
|
|
||||||
/*
|
|
||||||
menuBar() -> addMenu(tools_menu);
|
|
||||||
menuBar() -> addMenu(help_menu);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Met a jour les menus
|
|
||||||
*/
|
|
||||||
void QETElementEditor::slot_updateMenus() {
|
|
||||||
bool selected_items = !ce_scene -> selectedItems().isEmpty();
|
|
||||||
edit_delete -> setEnabled(selected_items);
|
|
||||||
edit_forward -> setEnabled(selected_items);
|
|
||||||
edit_raise -> setEnabled(selected_items);
|
|
||||||
edit_lower -> setEnabled(selected_items);
|
|
||||||
edit_backward -> setEnabled(selected_items);
|
|
||||||
save -> setEnabled(!ce_scene -> undoStack().isClean());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Met a jour le titre de la fenetre
|
|
||||||
*/
|
|
||||||
void QETElementEditor::slot_updateTitle() {
|
|
||||||
QString title = min_title;
|
|
||||||
title += " - " + ce_scene -> names().name() + " ";
|
|
||||||
if (_filename != QString()) {
|
|
||||||
if (!ce_scene -> undoStack().isClean()) title += tr("[Modifi\351]");
|
|
||||||
if (isReadOnly()) title += tr(" [lecture seule]");
|
|
||||||
}
|
|
||||||
setWindowTitle(title);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Met en place l'interface
|
|
||||||
*/
|
|
||||||
void QETElementEditor::setupInterface() {
|
|
||||||
// editeur
|
|
||||||
ce_scene = new ElementScene(this, this);
|
|
||||||
ce_scene -> slot_move();
|
|
||||||
ce_view = new ElementView(ce_scene, this);
|
|
||||||
slot_setRubberBandToView();
|
|
||||||
setCentralWidget(ce_view);
|
|
||||||
|
|
||||||
// widget par defaut dans le QDockWidget
|
|
||||||
default_informations = new QLabel();
|
|
||||||
|
|
||||||
// panel sur le cote pour editer les parties
|
|
||||||
tools_dock = new QDockWidget(tr("Informations"), this);
|
|
||||||
tools_dock -> setObjectName("informations");
|
|
||||||
tools_dock -> setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
|
|
||||||
tools_dock -> setFeatures(QDockWidget::AllDockWidgetFeatures);
|
|
||||||
tools_dock -> setMinimumWidth(290);
|
|
||||||
addDockWidget(Qt::RightDockWidgetArea, tools_dock);
|
|
||||||
QWidget *info_widget = new QWidget();
|
|
||||||
info_widget -> setLayout(new QVBoxLayout(info_widget));
|
|
||||||
tools_dock -> setWidget(info_widget);
|
|
||||||
|
|
||||||
// panel sur le cote pour les annulations
|
|
||||||
undo_dock = new QDockWidget(tr("Annulations"), this);
|
|
||||||
undo_dock -> setObjectName("undo");
|
|
||||||
undo_dock -> setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
|
|
||||||
undo_dock -> setFeatures(QDockWidget::AllDockWidgetFeatures);
|
|
||||||
undo_dock -> setMinimumWidth(290);
|
|
||||||
addDockWidget(Qt::RightDockWidgetArea, undo_dock);
|
|
||||||
QUndoView* undo_view = new QUndoView(&(ce_scene -> undoStack()), this);
|
|
||||||
undo_view -> setEmptyLabel(tr("Aucune modification"));
|
|
||||||
undo_dock -> setWidget(undo_view);
|
|
||||||
|
|
||||||
// panel sur le cote pour la liste des parties
|
|
||||||
parts_list = new QListWidget(this);
|
|
||||||
parts_list -> setSelectionMode(QAbstractItemView::ExtendedSelection);
|
|
||||||
connect(ce_scene, SIGNAL(partsAdded()), this, SLOT(slot_createPartsList()));
|
|
||||||
connect(ce_scene, SIGNAL(partsRemoved()), this, SLOT(slot_createPartsList()));
|
|
||||||
connect(ce_scene, SIGNAL(partsZValueChanged()), this, SLOT(slot_createPartsList()));
|
|
||||||
connect(ce_scene, SIGNAL(selectionChanged()), this, SLOT(slot_updatePartsList()));
|
|
||||||
connect(parts_list, SIGNAL(itemSelectionChanged()), this, SLOT(slot_updateSelectionFromPartsList()));
|
|
||||||
parts_dock = new QDockWidget(tr("Parties"), this);
|
|
||||||
parts_dock -> setObjectName("parts_list");
|
|
||||||
parts_dock -> setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
|
|
||||||
parts_dock -> setFeatures(QDockWidget::AllDockWidgetFeatures);
|
|
||||||
parts_dock -> setMinimumWidth(290);
|
|
||||||
tabifyDockWidget(undo_dock, parts_dock);
|
|
||||||
parts_dock -> setWidget(parts_list);
|
|
||||||
|
|
||||||
slot_updateInformations();
|
|
||||||
slot_createPartsList();
|
|
||||||
|
|
||||||
// barre d'etat
|
|
||||||
statusBar() -> showMessage(tr("\311diteur d'\351l\351ments"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe l'editeur d'element en mode selection : le pointeur deplace les
|
|
||||||
elements selectionnes et il est possible d'utiliser un rectangle de selection.
|
|
||||||
*/
|
|
||||||
void QETElementEditor::slot_setRubberBandToView() {
|
|
||||||
ce_view -> setDragMode(QGraphicsView::RubberBandDrag);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe l'editeur d'element en mode immobile (utilise pour la lecture seule)
|
|
||||||
*/
|
|
||||||
void QETElementEditor::slot_setNoDragToView() {
|
|
||||||
ce_view -> setDragMode(QGraphicsView::NoDrag);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Passe l'editeur en mode normal
|
|
||||||
*/
|
|
||||||
void QETElementEditor::slot_setNormalMode() {
|
|
||||||
if (!move -> isChecked()) move -> setChecked(true);
|
|
||||||
ce_view -> setDragMode(QGraphicsView::RubberBandDrag);
|
|
||||||
ce_scene -> slot_move();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Met a jour la zone d'information et d'edition.
|
|
||||||
Si plusieurs parties sont selectionnees, seul leur nombre est affiche.
|
|
||||||
Sinon, le widget d'edition de la partie est insere.
|
|
||||||
@see CustomElementPart::elementInformations()
|
|
||||||
*/
|
|
||||||
void QETElementEditor::slot_updateInformations() {
|
|
||||||
QList<QGraphicsItem *> selected_qgis = ce_scene -> selectedItems();
|
|
||||||
QList<CustomElementPart *> selected_parts;
|
|
||||||
foreach(QGraphicsItem *qgi, selected_qgis) {
|
|
||||||
if (CustomElementPart *cep = dynamic_cast<CustomElementPart *>(qgi)) {
|
|
||||||
selected_parts.append(cep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// recupere le layout
|
|
||||||
QLayout *layout = tools_dock -> widget() -> layout();
|
|
||||||
|
|
||||||
// enleve les widgets deja presents
|
|
||||||
QLayoutItem *qli;
|
|
||||||
while ((qli = layout -> takeAt(0)) != 0) {
|
|
||||||
if (QWidget *w = qli -> widget()) {
|
|
||||||
layout -> removeWidget(w);
|
|
||||||
w -> setParent(0);
|
|
||||||
w -> hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (selected_parts.size() == 1) {
|
|
||||||
// recupere le premier CustomElementPart et en ajoute le widget d'edition
|
|
||||||
QWidget *edit_widget = selected_parts.first() -> elementInformations();
|
|
||||||
layout -> addWidget(edit_widget);
|
|
||||||
edit_widget -> show();
|
|
||||||
} else {
|
|
||||||
default_informations -> setText(
|
|
||||||
selected_parts.size() ?
|
|
||||||
QString("%1").arg(selected_parts.size()) + tr(" parties s\351lectionn\351es.") :
|
|
||||||
tr("Aucune partie s\351lectionn\351e.")
|
|
||||||
);
|
|
||||||
layout -> addWidget(default_informations);
|
|
||||||
default_informations -> show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Affiche le code XML correspondant a l'element dans son etat actuel dans
|
|
||||||
une boite de dialogue.
|
|
||||||
*/
|
|
||||||
void QETElementEditor::xmlPreview() {
|
|
||||||
QMessageBox::information(
|
|
||||||
this,
|
|
||||||
"Export XML",
|
|
||||||
ce_scene -> toXml().toString(4)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Charge un fichier
|
|
||||||
@param filepath Chemin du fichier a charger
|
|
||||||
*/
|
|
||||||
void QETElementEditor::fromFile(const QString &filepath) {
|
|
||||||
bool state = true;
|
|
||||||
QString error_message;
|
|
||||||
|
|
||||||
// le fichier doit exister
|
|
||||||
QFileInfo infos_file(filepath);
|
|
||||||
if (!infos_file.exists() || !infos_file.isFile()) {
|
|
||||||
state = false;
|
|
||||||
error_message = tr("Le fichier ") + filepath + tr(" n'existe pas.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// le fichier doit etre lisible
|
|
||||||
QFile file(filepath);
|
|
||||||
if (state) {
|
|
||||||
if (!file.open(QIODevice::ReadOnly)) {
|
|
||||||
state = false;
|
|
||||||
error_message = tr("Impossible d'ouvrir le fichier ") + filepath + ".";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// le fichier doit etre un document XML
|
|
||||||
QDomDocument document_xml;
|
|
||||||
if (state) {
|
|
||||||
if (!document_xml.setContent(&file)) {
|
|
||||||
state = false;
|
|
||||||
error_message = tr("Ce fichier n'est pas un document XML valide");
|
|
||||||
}
|
|
||||||
file.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!state) {
|
|
||||||
QMessageBox::critical(this, tr("Erreur"), error_message);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// chargement de l'element
|
|
||||||
ce_scene -> fromXml(document_xml);
|
|
||||||
slot_createPartsList();
|
|
||||||
|
|
||||||
// gestion de la lecture seule
|
|
||||||
if (!infos_file.isWritable()) {
|
|
||||||
QMessageBox::warning(
|
|
||||||
this,
|
|
||||||
tr("\311dition en lecture seule"),
|
|
||||||
tr("Vous n'avez pas les privil\350ges n\351cessaires pour modifier cet \351lement. Il sera donc ouvert en lecture seule.")
|
|
||||||
);
|
|
||||||
setReadOnly(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// memorise le fichier
|
|
||||||
setFileName(filepath);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Enregistre l'element vers un fichier
|
|
||||||
@param fn Chemin du fichier a enregistrer
|
|
||||||
@return true en cas de reussite, false sinon
|
|
||||||
*/
|
|
||||||
bool QETElementEditor::toFile(const QString &fn) {
|
|
||||||
QFile file(fn);
|
|
||||||
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
|
||||||
QMessageBox::warning(this, tr("Erreur"), tr("Impossible d'ecrire dans ce fichier"));
|
|
||||||
return(false);
|
|
||||||
}
|
|
||||||
QTextStream out(&file);
|
|
||||||
out.setCodec("UTF-8");
|
|
||||||
out << ce_scene -> toXml().toString(4);
|
|
||||||
file.close();
|
|
||||||
return(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
specifie si l'editeur d'element doit etre en mode lecture seule
|
|
||||||
@param ro true pour activer le mode lecture seule, false pour le desactiver
|
|
||||||
*/
|
|
||||||
void QETElementEditor::setReadOnly(bool ro) {
|
|
||||||
read_only = ro;
|
|
||||||
// active / desactive les actions
|
|
||||||
foreach (QAction *action, parts -> actions()) action -> setEnabled(!ro);
|
|
||||||
|
|
||||||
// active / desactive les interactions avec la scene
|
|
||||||
ce_view -> setInteractive(!ro);
|
|
||||||
|
|
||||||
// active / desactive l'edition de la taille, du hotspot, des noms et des orientations
|
|
||||||
selectall -> setEnabled(!ro);
|
|
||||||
deselectall -> setEnabled(!ro);
|
|
||||||
inv_select -> setEnabled(!ro);
|
|
||||||
undo -> setEnabled(!ro);
|
|
||||||
redo -> setEnabled(!ro);
|
|
||||||
edit_delete -> setEnabled(!ro);
|
|
||||||
edit_size_hs -> setEnabled(!ro);
|
|
||||||
edit_names -> setEnabled(!ro);
|
|
||||||
edit_ori -> setEnabled(!ro);
|
|
||||||
parts_list -> setEnabled(!ro);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return true si l'editeur d'element est en mode lecture seule
|
|
||||||
*/
|
|
||||||
bool QETElementEditor::isReadOnly() const {
|
|
||||||
return(read_only);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Lance l'assistant de creation d'un nouvel element.
|
|
||||||
*/
|
|
||||||
void QETElementEditor::slot_new() {
|
|
||||||
NewElementWizard new_element_wizard;
|
|
||||||
new_element_wizard.exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Ouvre un fichier
|
|
||||||
*/
|
|
||||||
void QETElementEditor::slot_open() {
|
|
||||||
// demande un nom de fichier a ouvrir a l'utilisateur
|
|
||||||
QString user_filename = QFileDialog::getOpenFileName(
|
|
||||||
this,
|
|
||||||
tr("Ouvrir un fichier"),
|
|
||||||
_filename.isEmpty() ? QETApp::customElementsDir() : QDir(_filename).absolutePath(),
|
|
||||||
tr("\311l\351ments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*)")
|
|
||||||
);
|
|
||||||
if (user_filename.isEmpty()) return;
|
|
||||||
QETElementEditor *cee = new QETElementEditor();
|
|
||||||
cee -> fromFile(user_filename);
|
|
||||||
cee -> show();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Recharge l'element edite
|
|
||||||
*/
|
|
||||||
void QETElementEditor::slot_reload() {
|
|
||||||
// impossible de recharger un element non enregistre
|
|
||||||
if (_filename.isEmpty()) return;
|
|
||||||
|
|
||||||
// s'il ya des modifications, on demande a l'utilisateur s'il est certain
|
|
||||||
// de vouloir recharger
|
|
||||||
if (!ce_scene -> undoStack().isClean()) {
|
|
||||||
QMessageBox::StandardButton answer = QMessageBox::question(
|
|
||||||
this,
|
|
||||||
tr("Recharger l'\351l\351ment"),
|
|
||||||
tr("Vous avez efffectu\351 des modifications sur cet \351l\351ment. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'\351l\351ment ?"),
|
|
||||||
QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel,
|
|
||||||
QMessageBox::Cancel
|
|
||||||
);
|
|
||||||
if (answer != QMessageBox::Yes) return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// recharge l'element
|
|
||||||
ce_scene -> reset();
|
|
||||||
fromFile(_filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Enregistre l'element en cours d'edition.
|
|
||||||
Si le nom du fichier en cours n'est pas connu, cette methode equivaut a
|
|
||||||
l'action "Enregistrer sous"
|
|
||||||
@see slot_saveAs()
|
|
||||||
*/
|
|
||||||
bool QETElementEditor::slot_save() {
|
|
||||||
// si on ne connait pas le nom du fichier en cours, enregistrer revient a enregistrer sous
|
|
||||||
if (_filename.isEmpty()) return(slot_saveAs());
|
|
||||||
// sinon on enregistre dans le nom de fichier connu
|
|
||||||
bool result_save = toFile(_filename);
|
|
||||||
if (result_save) ce_scene -> undoStack().setClean();
|
|
||||||
return(result_save);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Demande un nom de fichier a l'utilisateur et enregistre l'element
|
|
||||||
*/
|
|
||||||
bool QETElementEditor::slot_saveAs() {
|
|
||||||
// demande un nom de fichier a l'utilisateur pour enregistrer l'element
|
|
||||||
QString fn = QFileDialog::getSaveFileName(
|
|
||||||
this,
|
|
||||||
tr("Enregistrer sous"),
|
|
||||||
_filename.isEmpty() ? QETApp::customElementsDir() : QDir(_filename).absolutePath(),
|
|
||||||
tr("\311l\351ments QElectroTech (*.elmt)")
|
|
||||||
);
|
|
||||||
// si aucun nom n'est entre, renvoie faux.
|
|
||||||
if (fn.isEmpty()) return(false);
|
|
||||||
// si le nom ne se termine pas par l'extension .elmt, celle-ci est ajoutee
|
|
||||||
if (!fn.endsWith(".elmt", Qt::CaseInsensitive)) fn += ".elmt";
|
|
||||||
// tente d'enregistrer le fichier
|
|
||||||
bool result_save = toFile(fn);
|
|
||||||
// si l'enregistrement reussit, le nom du fichier est conserve
|
|
||||||
if (result_save) {
|
|
||||||
setFileName(fn);
|
|
||||||
ce_scene -> undoStack().setClean();
|
|
||||||
}
|
|
||||||
// retourne un booleen representatif de la reussite de l'enregistrement
|
|
||||||
return(result_save);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@return true si l'element peut etre ferme.
|
|
||||||
Un element peut etre ferme s'il ne comporte aucune modification.
|
|
||||||
Si l'element comporte des modifications, la question est posee a
|
|
||||||
l'utilisateur.
|
|
||||||
*/
|
|
||||||
bool QETElementEditor::canClose() {
|
|
||||||
if (ce_scene -> undoStack().isClean()) return(true);
|
|
||||||
// demande d'abord a l'utilisateur s'il veut enregistrer l'element en cours
|
|
||||||
QMessageBox::StandardButton answer = QMessageBox::question(
|
|
||||||
this,
|
|
||||||
tr("Enregistrer l'\351l\351ment en cours ?"),
|
|
||||||
tr("Voulez-vous enregistrer l'\351l\351ment ") + ce_scene -> names().name() + tr(" ?"),
|
|
||||||
QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,
|
|
||||||
QMessageBox::Cancel
|
|
||||||
);
|
|
||||||
bool result;
|
|
||||||
switch(answer) {
|
|
||||||
case QMessageBox::Cancel: result = false; break; // l'utilisateur annule : echec de la fermeture
|
|
||||||
case QMessageBox::Yes: result = slot_save(); break; // l'utilisateur dit oui : la reussite depend de l'enregistrement
|
|
||||||
default: result = true; // l'utilisateur dit non ou ferme le dialogue: c'est reussi
|
|
||||||
}
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Permet de quitter l'editeur lors de la fermeture de la fenetre principale
|
|
||||||
@param qce Le QCloseEvent correspondant a l'evenement de fermeture
|
|
||||||
*/
|
|
||||||
void QETElementEditor::closeEvent(QCloseEvent *qce) {
|
|
||||||
if (canClose()) {
|
|
||||||
writeSettings();
|
|
||||||
setAttribute(Qt::WA_DeleteOnClose);
|
|
||||||
qce -> accept();
|
|
||||||
} else qce -> ignore();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Remplit la liste des parties
|
|
||||||
*/
|
|
||||||
void QETElementEditor::slot_createPartsList() {
|
|
||||||
parts_list -> blockSignals(true);
|
|
||||||
parts_list -> clear();
|
|
||||||
QList<QGraphicsItem *> qgis = ce_scene -> zItems(true);
|
|
||||||
for (int j = qgis.count() - 1 ; j >= 0 ; -- j) {
|
|
||||||
QGraphicsItem *qgi = qgis[j];
|
|
||||||
if (CustomElementPart *cep = dynamic_cast<CustomElementPart *>(qgi)) {
|
|
||||||
QString part_desc = cep -> name();
|
|
||||||
QListWidgetItem *qlwi = new QListWidgetItem(part_desc);
|
|
||||||
QVariant v;
|
|
||||||
v.setValue<QGraphicsItem *>(qgi);
|
|
||||||
qlwi -> setData(42, v);
|
|
||||||
parts_list -> addItem(qlwi);
|
|
||||||
qlwi -> setSelected(qgi -> isSelected());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parts_list -> blockSignals(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Met a jour la selection dans la liste des parties
|
|
||||||
*/
|
|
||||||
void QETElementEditor::slot_updatePartsList() {
|
|
||||||
if (parts_list -> count() != ce_scene -> items().count()) {
|
|
||||||
slot_createPartsList();
|
|
||||||
} else {
|
|
||||||
parts_list -> blockSignals(true);
|
|
||||||
int i = 0;
|
|
||||||
QList<QGraphicsItem *> items = ce_scene -> zItems(true);
|
|
||||||
for (int j = items.count() - 1 ; j >= 0 ; -- j) {
|
|
||||||
QGraphicsItem *qgi = items[j];
|
|
||||||
QListWidgetItem *qlwi = parts_list -> item(i);
|
|
||||||
if (qlwi) qlwi -> setSelected(qgi -> isSelected());
|
|
||||||
++ i;
|
|
||||||
}
|
|
||||||
parts_list -> blockSignals(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Met a jour la selection des parties de l'element a partir de la liste des
|
|
||||||
parties
|
|
||||||
*/
|
|
||||||
void QETElementEditor::slot_updateSelectionFromPartsList() {
|
|
||||||
ce_scene -> blockSignals(true);
|
|
||||||
parts_list -> blockSignals(true);
|
|
||||||
for (int i = 0 ; i < parts_list -> count() ; ++ i) {
|
|
||||||
QListWidgetItem *qlwi = parts_list -> item(i);
|
|
||||||
QGraphicsItem *qgi = qlwi -> data(42).value<QGraphicsItem *>();
|
|
||||||
if (qgi) {
|
|
||||||
qgi -> setSelected(qlwi -> isSelected());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parts_list -> blockSignals(false);
|
|
||||||
ce_scene -> blockSignals(false);
|
|
||||||
slot_updateInformations();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Lit les parametres de l'editeur d'element
|
|
||||||
void QETElementEditor::readSettings() {
|
|
||||||
QSettings &settings = QETApp::settings();
|
|
||||||
|
|
||||||
// dimensions et position de la fenetre
|
|
||||||
QVariant geometry = settings.value("elementeditor/geometry");
|
|
||||||
if (geometry.isValid()) restoreGeometry(geometry.toByteArray());
|
|
||||||
|
|
||||||
// etat de la fenetre (barres d'outils, docks...)
|
|
||||||
QVariant state = settings.value("elementeditor/state");
|
|
||||||
if (state.isValid()) restoreState(state.toByteArray());
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Enregistre les parametres de l'editeur d'element
|
|
||||||
void QETElementEditor::writeSettings() {
|
|
||||||
QSettings &settings = QETApp::settings();
|
|
||||||
settings.setValue("elementeditor/geometry", saveGeometry());
|
|
||||||
settings.setValue("elementeditor/state", saveState());
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="25" height="40" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">محول قياسات</name>
|
||||||
|
<name lang="en">Measure converter</name>
|
||||||
|
<name lang="fr">Convertisseur de mesure</name>
|
||||||
|
<name lang="pl">Przetwornik temperatury</name>
|
||||||
|
<name lang="cs">Převodník měření</name>
|
||||||
|
<name lang="es">Convertidor de temperatura</name>
|
||||||
|
<name lang="pt">Conversor de temperatura</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<polygon x4="-15" antialias="false" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-20" x1="-15" y2="-20" x2="15" y3="10" x3="15" y4="10"/>
|
||||||
|
<polygon x4="-5" y5="-17" x5="6" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="-11" x1="0" y2="-11" x2="-5" y3="-14" x3="-8" y4="-17"/>
|
||||||
|
<rect width="3" x="-12.5" y="-10" antialias="false" height="9" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-10" x1="-11" y2="-13" x2="-11"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-1" x1="-11" y2="2" x2="-11"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-9" x1="-14" y2="-2" x2="-8"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-19" x1="15" y2="9.5" x2="-13.5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="9" y2="0" x2="13"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-12" x1="11" y2="-8" x2="11"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-10" x1="9" y2="-10" x2="13"/>
|
||||||
|
<input x="-16" y="-33.3333" size="8" rotate="true" text="dTrans T01"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-10" x1="-15" y2="-10" x2="-20"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="20" y2="0" x2="15"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-10" x1="15" y2="-10" x2="20"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-20" y2="0" x2="-15"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="4" x1="8" y2="4" x2="9.5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="4" x1="5" y2="4" x2="6.5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="4" x1="2" y2="4" x2="3.5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="6" x1="2" y2="6" x2="9.5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-19.5" x1="12.5" y2="8" x2="-15"/>
|
||||||
|
<terminal x="21" y="0" orientation="e"/>
|
||||||
|
<terminal x="21" y="-10" orientation="e"/>
|
||||||
|
<terminal x="-21" y="0" orientation="w"/>
|
||||||
|
<terminal x="-21" y="-10" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
25
elements/appareils_de_mesure/amperemetre-h.elmt
Normal file
25
elements/appareils_de_mesure/amperemetre-h.elmt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="15" height="30" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">أمبيرمتر أفقي</name>
|
||||||
|
<name lang="de">Amperemeter horizontal</name>
|
||||||
|
<name lang="ru">Амперметр (горизонтальный)</name>
|
||||||
|
<name lang="pt">Amperímetro horizontal</name>
|
||||||
|
<name lang="en">Horizontal ammeter</name>
|
||||||
|
<name lang="it">Amperometro orizzontale </name>
|
||||||
|
<name lang="fr">Ampèremètre horizontal</name>
|
||||||
|
<name lang="pl">Amperomierz (poziomo)</name>
|
||||||
|
<name lang="es">Amperímetro horizontal</name>
|
||||||
|
<name lang="cs">Vodorovný ampérmetr</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-1.75" y2="0" x2="1.75"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-21" y2="0" x2="-10"/>
|
||||||
|
<polygon antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="6" x1="-5" y2="-6" x2="0" y3="6" x3="5"/>
|
||||||
|
<circle x="-10" y="-10" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="20"/>
|
||||||
|
<terminal x="-21" y="0" orientation="w"/>
|
||||||
|
<terminal x="21" y="0" orientation="e"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
25
elements/appareils_de_mesure/amperemetre-v.elmt
Normal file
25
elements/appareils_de_mesure/amperemetre-v.elmt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<definition width="30" version="0.3" hotspot_x="15" hotspot_y="25" height="50" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">أمبيرمتر عمودي</name>
|
||||||
|
<name lang="de">Amperemeter vertikal</name>
|
||||||
|
<name lang="ru">Амперметр (вертикальный)</name>
|
||||||
|
<name lang="pt">Amperímetro vertical</name>
|
||||||
|
<name lang="en">Vertical ammeter</name>
|
||||||
|
<name lang="it">Amperometro verticale</name>
|
||||||
|
<name lang="fr">Ampèremètre vertical</name>
|
||||||
|
<name lang="pl">Amperomierz (pionowo)</name>
|
||||||
|
<name lang="es">Amperímetro vertical</name>
|
||||||
|
<name lang="cs">Svislý ampérmetr</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-1.75" y2="0" x2="1.75"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="0" y2="21" x2="0"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-21" x1="0" y2="-10" x2="0"/>
|
||||||
|
<polygon antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="6" x1="-5" y2="-6" x2="0" y3="6" x3="5"/>
|
||||||
|
<circle x="-10" y="-10" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="20"/>
|
||||||
|
<terminal x="0" y="-21" orientation="n"/>
|
||||||
|
<terminal x="0" y="21" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="20" height="30" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">محوّل ضغط / تيّار</name>
|
||||||
|
<name lang="en">Pressure converter / power</name>
|
||||||
|
<name lang="fr">Convertisseur pression/courant</name>
|
||||||
|
<name lang="pl">Przetwornik ciśnienia</name>
|
||||||
|
<name lang="cs">Tlakově-elektrický převodník</name>
|
||||||
|
<name lang="es">Convertidor de presión/power</name>
|
||||||
|
<name lang="pt">Conversor de pressão</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<input x="1" y="-27" size="6" rotate="true" text="_"/>
|
||||||
|
<text x="5" y="8" size="6" text="a"/>
|
||||||
|
<text x="2" y="3" size="9" text="P"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-7" x1="-11" y2="-18" x2="-4"/>
|
||||||
|
<polygon x4="-15" antialias="false" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-20" x1="-15" y2="-20" x2="15" y3="10" x3="15" y4="10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-10" x1="-15" y2="-10" x2="-20"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="20" y2="0" x2="15"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-10" x1="15" y2="-10" x2="20"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-20" y2="0" x2="-15"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-19.5" x1="12.5" y2="8" x2="-15"/>
|
||||||
|
<terminal x="21" y="0" orientation="e"/>
|
||||||
|
<terminal x="21" y="-10" orientation="e"/>
|
||||||
|
<terminal x="-21" y="0" orientation="w"/>
|
||||||
|
<terminal x="-21" y="-10" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
59
elements/appareils_de_mesure/crouzet_80149604.elmt
Normal file
59
elements/appareils_de_mesure/crouzet_80149604.elmt
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
<definition width="150" version="0.3" hotspot_x="35" hotspot_y="85" height="180" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">Crouzet80149604</name>
|
||||||
|
<name lang="en">Crouzet 80149604</name>
|
||||||
|
<name lang="it">Crouzet 80149604</name>
|
||||||
|
<name lang="fr">Crouzet 80149604</name>
|
||||||
|
<name lang="pl">Crouzet 80149604</name>
|
||||||
|
<name lang="cs">Crouzet 80149604</name>
|
||||||
|
<name lang="pt">Crouzet80149604</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<text x="66" y="-1" size="5" text="Logic
ground"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:dashed;line-weight:normal;filling:none;color:black" y1="70" x1="-10" y2="70" x2="90"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:dashed;line-weight:normal;filling:none;color:black" y1="-60" x1="-10" y2="-60" x2="90"/>
|
||||||
|
<input x="-26" y="-45.5" size="5" rotate="true" text="BR"/>
|
||||||
|
<input x="34.5" y="-58" size="5" rotation="270" rotate="true" text="RD"/>
|
||||||
|
<input x="88" y="-5.5" size="5" rotate="true" text="BU"/>
|
||||||
|
<input x="34.5" y="85" size="5" rotation="270" rotate="true" text="BL"/>
|
||||||
|
<input x="-26" y="34.5" size="5" rotate="true" text="PU"/>
|
||||||
|
<input x="-26" y="14.5" size="5" rotate="true" text="GN"/>
|
||||||
|
<input x="-26" y="-5.5" size="5" rotate="true" text="YE"/>
|
||||||
|
<input x="-26" y="-25.5" size="5" rotate="true" text="OG"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:dashed;line-weight:normal;filling:none;color:black" y1="-60" x1="90" y2="70" x2="90"/>
|
||||||
|
<text x="-9" y="39" size="5" text="Output
12PT/T"/>
|
||||||
|
<text x="-9" y="19" size="5" text="Enable
input"/>
|
||||||
|
<text x="-9" y="-1" size="5" text="Direction
input"/>
|
||||||
|
<text x="-9" y="-21" size="5" text="Input
PWM"/>
|
||||||
|
<text x="-9" y="-41" size="5" text="Input
0-10V"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:dashed;line-weight:normal;filling:none;color:black" y1="-60" x1="-10" y2="70" x2="-10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="90" y2="0" x2="100"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="70" x1="40" y2="81" x2="40"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-20" x1="-20" y2="-20" x2="-10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-70" x1="40" y2="-60" x2="40"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="40" x1="-20" y2="40" x2="-10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-40" x1="-20" y2="-40" x2="-10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="20" x1="-20" y2="20" x2="-10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-20" y2="0" x2="-10"/>
|
||||||
|
<input x="8" y="54.5" size="9" rotate="true" text="80149604"/>
|
||||||
|
<text x="18" y="68" size="5" text="Power ground"/>
|
||||||
|
<circle x="25" y="-15" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="30"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="18" x1="45" y2="14.5" x2="45"/>
|
||||||
|
<text x="31.5" y="7" size="15" text="M"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="18" x1="35" y2="18" x2="45"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-18" x1="45" y2="-14.5" x2="45"/>
|
||||||
|
<text x="26" y="-52" size="5" text="24V DC"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-14.5" x1="35" y2="-18" x2="35"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-18" x1="35" y2="-18" x2="45"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="14.5" x1="35" y2="18" x2="35"/>
|
||||||
|
<terminal x="40" y="-70" orientation="n"/>
|
||||||
|
<terminal x="100" y="0" orientation="e"/>
|
||||||
|
<terminal x="40" y="81" orientation="s"/>
|
||||||
|
<terminal x="-20" y="-20" orientation="w"/>
|
||||||
|
<terminal x="-20" y="0" orientation="w"/>
|
||||||
|
<terminal x="-20" y="20" orientation="w"/>
|
||||||
|
<terminal x="-20" y="-40" orientation="w"/>
|
||||||
|
<terminal x="-20" y="40" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
23
elements/appareils_de_mesure/frequencemetre-h.elmt
Normal file
23
elements/appareils_de_mesure/frequencemetre-h.elmt
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="15" height="30" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">مقياس تردد أفقي</name>
|
||||||
|
<name lang="de">Frequenzmeßgerät, anzeigend</name>
|
||||||
|
<name lang="en">Frequency meter h</name>
|
||||||
|
<name lang="it">Frequenzimetro orizzontale</name>
|
||||||
|
<name lang="fr">Fréquencemètre horizontal</name>
|
||||||
|
<name lang="pl">Częstotliwościomierz (poziomo)</name>
|
||||||
|
<name lang="cs">Měřič kmitočtu, vodorovný</name>
|
||||||
|
<name lang="es">Frecuencímetro horizontal</name>
|
||||||
|
<name lang="pt">Frequenciómetro horizontal</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<text x="-8" y="2.3333" size="9" text="Hz"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-21" y2="0" x2="-10"/>
|
||||||
|
<circle x="-10" y="-10" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="20"/>
|
||||||
|
<terminal x="-21" y="0" orientation="w"/>
|
||||||
|
<terminal x="21" y="0" orientation="e"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
23
elements/appareils_de_mesure/frequencemetre-v.elmt
Normal file
23
elements/appareils_de_mesure/frequencemetre-v.elmt
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<definition width="30" version="0.3" hotspot_x="15" hotspot_y="25" height="50" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">مقياس تردد عمودي</name>
|
||||||
|
<name lang="de">Frequenzmeßgerät, anzeigend v</name>
|
||||||
|
<name lang="en">Frequency meter v</name>
|
||||||
|
<name lang="it">Frequenzimetro verticale</name>
|
||||||
|
<name lang="fr">Fréquencemètre vertical</name>
|
||||||
|
<name lang="pl">Częstotliwościomierz (pionowo)</name>
|
||||||
|
<name lang="cs">Měřič kmitočtu, svislý</name>
|
||||||
|
<name lang="es">Frecuencímetro vertical</name>
|
||||||
|
<name lang="pt">Frequenciómetro vertical</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="0" y2="21" x2="0"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-21" x1="0" y2="-10" x2="0"/>
|
||||||
|
<circle x="-10" y="-10" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="20"/>
|
||||||
|
<text x="-8" y="2.8333" size="9" text="Hz"/>
|
||||||
|
<terminal x="0" y="-21" orientation="n"/>
|
||||||
|
<terminal x="0" y="21" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
23
elements/appareils_de_mesure/galvanometre-h.elmt
Normal file
23
elements/appareils_de_mesure/galvanometre-h.elmt
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="15" height="30" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">جلفانومتر أفقي</name>
|
||||||
|
<name lang="de">Galvanometer h</name>
|
||||||
|
<name lang="en">Galvanometer h</name>
|
||||||
|
<name lang="it">Galvanometro orizzontale</name>
|
||||||
|
<name lang="fr">Galvanomètre horizontal</name>
|
||||||
|
<name lang="pl">Galwanomert (poziomo)</name>
|
||||||
|
<name lang="cs">Galvanometr, vodorovný</name>
|
||||||
|
<name lang="es">Galvanómetro horizontal</name>
|
||||||
|
<name lang="pt">Galvanómetro horizontal</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<circle x="-10" y="-10" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="20"/>
|
||||||
|
<line length1="1.5" length2="3" antialias="false" end1="none" end2="simple" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7" x1="0" y2="-8" x2="0"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-21" y2="0" x2="-10"/>
|
||||||
|
<terminal x="-21" y="0" orientation="w"/>
|
||||||
|
<terminal x="21" y="0" orientation="e"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
23
elements/appareils_de_mesure/galvanometre-v.elmt
Normal file
23
elements/appareils_de_mesure/galvanometre-v.elmt
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<definition width="30" version="0.3" hotspot_x="15" hotspot_y="25" height="50" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">جلفانومتر عمودي</name>
|
||||||
|
<name lang="de">Galvanometer v</name>
|
||||||
|
<name lang="en">galvanometer v</name>
|
||||||
|
<name lang="it">Galvanometro verticale</name>
|
||||||
|
<name lang="fr">Galvanomètre vertical</name>
|
||||||
|
<name lang="pl">Galwanometr (pionowo)</name>
|
||||||
|
<name lang="cs">Galvanometr, svislý</name>
|
||||||
|
<name lang="es">Galvanómetro vertical</name>
|
||||||
|
<name lang="pt">Galvanómetro vertical</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="3" antialias="false" end1="none" end2="simple" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7.45" x1="0" y2="-7.55" x2="0"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="0" y2="21" x2="0"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-21" x1="0" y2="-10" x2="0"/>
|
||||||
|
<circle x="-10" y="-10" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="20"/>
|
||||||
|
<terminal x="0" y="-21" orientation="n"/>
|
||||||
|
<terminal x="0" y="21" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
28
elements/appareils_de_mesure/ohmmetre-h.elmt
Normal file
28
elements/appareils_de_mesure/ohmmetre-h.elmt
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="15" height="30" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">أوميتر أفقي</name>
|
||||||
|
<name lang="de">Ohmmeter horizontal</name>
|
||||||
|
<name lang="ru">Омметр (горизонтальный)</name>
|
||||||
|
<name lang="pt">Ohmímetro horizontal</name>
|
||||||
|
<name lang="en">Horizontal ohmmeter</name>
|
||||||
|
<name lang="it">Ohmmetro orizzontale</name>
|
||||||
|
<name lang="fr">Ohmmètre horizontal</name>
|
||||||
|
<name lang="pl">Omomierz (poziomo)</name>
|
||||||
|
<name lang="es">Óhmetro horizontal</name>
|
||||||
|
<name lang="cs">Ohmmetr, vodorovný</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="5" x1="-5" y2="5" x2="-3.25"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="5" x1="3.25" y2="5" x2="5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="5" x1="-3.25" y2="3" x2="-3.25"/>
|
||||||
|
<arc width="10" x="-5" y="-6" antialias="true" height="10" style="line-style:normal;line-weight:normal;filling:none;color:black" start="225" angle="-270"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="3" x1="3.25" y2="5" x2="3.25"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-21" y2="0" x2="-10"/>
|
||||||
|
<circle x="-10" y="-10" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="20"/>
|
||||||
|
<terminal x="-21" y="0" orientation="w"/>
|
||||||
|
<terminal x="21" y="0" orientation="e"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
28
elements/appareils_de_mesure/ohmmetre-v.elmt
Normal file
28
elements/appareils_de_mesure/ohmmetre-v.elmt
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<definition width="30" version="0.3" hotspot_x="15" hotspot_y="25" height="50" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">أوميتر عمودي</name>
|
||||||
|
<name lang="de">Ohmmeter vertikal</name>
|
||||||
|
<name lang="ru">Омметр (вертикальный)</name>
|
||||||
|
<name lang="pt">Ohmímetro vertical</name>
|
||||||
|
<name lang="en">Vertical ohmmeter</name>
|
||||||
|
<name lang="it">Ohmmetro verticale</name>
|
||||||
|
<name lang="fr">Ohmmètre vertical</name>
|
||||||
|
<name lang="pl">Omomierz (pionowo)</name>
|
||||||
|
<name lang="es">Óhmetro vertical</name>
|
||||||
|
<name lang="cs">Ohmmetr, svislý</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="5" x1="-5" y2="5" x2="-3.25"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="5" x1="3.25" y2="5" x2="5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="5" x1="-3.25" y2="3" x2="-3.25"/>
|
||||||
|
<arc width="10" x="-5" y="-6" antialias="true" height="10" style="line-style:normal;line-weight:normal;filling:none;color:black" start="225" angle="-270"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="3" x1="3.25" y2="5" x2="3.25"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="0" y2="21" x2="0"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-21" x1="0" y2="-10" x2="0"/>
|
||||||
|
<circle x="-10" y="-10" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="20"/>
|
||||||
|
<terminal x="0" y="-21" orientation="n"/>
|
||||||
|
<terminal x="0" y="21" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
37
elements/appareils_de_mesure/omron_7h_ec.elmt
Normal file
37
elements/appareils_de_mesure/omron_7h_ec.elmt
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<definition width="150" version="0.3" hotspot_x="15" hotspot_y="15" height="90" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">OMRON 7HEC</name>
|
||||||
|
<name lang="en">OMRON 7H EC</name>
|
||||||
|
<name lang="it">OMRON 7H EC</name>
|
||||||
|
<name lang="fr">OMRON 7H EC</name>
|
||||||
|
<name lang="pl">OMRON 7H EC</name>
|
||||||
|
<name lang="cs">OMRON 7H EC</name>
|
||||||
|
<name lang="pt">OMRON 7H EC</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<input x="4" y="60.5" size="5" rotate="true" text="1"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:dashed;line-weight:normal;filling:none;color:black" y1="-10" x1="130" y2="67" x2="130"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:dashed;line-weight:normal;filling:none;color:black" y1="-10" x1="-10" y2="67" x2="-10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:dashed;line-weight:normal;filling:none;color:black" y1="-10" x1="-10" y2="-10" x2="130"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:dashed;line-weight:normal;filling:none;color:black" y1="67" x1="34" y2="67" x2="88"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:dashed;line-weight:normal;filling:none;color:black" y1="67" x1="113" y2="67" x2="130"/>
|
||||||
|
<input x="104" y="60.5" size="5" rotate="true" text="4"/>
|
||||||
|
<input x="84" y="60.5" size="5" rotate="true" text="3"/>
|
||||||
|
<input x="24" y="60.5" size="5" rotate="true" text="2"/>
|
||||||
|
<input x="81" y="51" size="7" rotate="true" text="RESET"/>
|
||||||
|
<circle x="7.7639" y="64.7639" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="4.4721"/>
|
||||||
|
<input x="0" y="51" size="7" rotate="true" text="COUNT"/>
|
||||||
|
<circle x="87.764" y="64.7639" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="4.4721"/>
|
||||||
|
<circle x="27.7639" y="64.7639" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="4.4721"/>
|
||||||
|
<circle x="107.764" y="64.7639" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="4.4721"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:dashed;line-weight:normal;filling:none;color:black" y1="67" x1="93" y2="67" x2="107"/>
|
||||||
|
<input x="13" y="4.5" size="9" rotate="true" text="OMRON 7H EC"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:dashed;line-weight:normal;filling:none;color:black" y1="67" x1="13" y2="67" x2="27"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:dashed;line-weight:normal;filling:none;color:black" y1="67" x1="-10" y2="67" x2="7"/>
|
||||||
|
<terminal x="10" y="70" orientation="s"/>
|
||||||
|
<terminal x="30" y="70" orientation="s"/>
|
||||||
|
<terminal x="90" y="70" orientation="s"/>
|
||||||
|
<terminal x="110" y="70" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
14
elements/appareils_de_mesure/qet_directory
Normal file
14
elements/appareils_de_mesure/qet_directory
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<qet-directory>
|
||||||
|
<names>
|
||||||
|
<name lang="ar">أجهزة قياسات</name>
|
||||||
|
<name lang="de">Messinstrumente</name>
|
||||||
|
<name lang="ru">Измеррительные приборы</name>
|
||||||
|
<name lang="en">Measuring instruments</name>
|
||||||
|
<name lang="fr">Appareils de mesure</name>
|
||||||
|
<name lang="es">Instrumentos de medición</name>
|
||||||
|
<name lang="pt">Instrumentos de medição</name>
|
||||||
|
<name lang="cs">Měřící přístroje</name>
|
||||||
|
<name lang="pl">Przyrządy pomiarowe</name>
|
||||||
|
<name lang="it">Strumenti di misura</name>
|
||||||
|
</names>
|
||||||
|
</qet-directory>
|
||||||
21
elements/appareils_de_mesure/sondes/electrode.elmt
Normal file
21
elements/appareils_de_mesure/sondes/electrode.elmt
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<definition width="30" version="0.3" hotspot_x="5" hotspot_y="25" height="50" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">الكترود</name>
|
||||||
|
<name lang="en">Electrode</name>
|
||||||
|
<name lang="it">Elettrodo</name>
|
||||||
|
<name lang="fr">Electrode</name>
|
||||||
|
<name lang="pl">Elektroda</name>
|
||||||
|
<name lang="cs">Elektroda</name>
|
||||||
|
<name lang="es">Electrodo</name>
|
||||||
|
<name lang="pt">Eléctrodo</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<input x="6" y="3.5" size="9" rotate="true" text="_"/>
|
||||||
|
<polygon x4="-1" antialias="true" style="line-style:normal;line-weight:normal;filling:black;color:black" y1="20" x1="-1" y2="20" x2="1" y3="23" x3="0" y4="20"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-10" x1="1" y2="20" x2="1"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-10" x1="-1" y2="20" x2="-1"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="20" x1="0" y2="-20" x2="0"/>
|
||||||
|
<terminal x="0" y="-20" orientation="n"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
14
elements/appareils_de_mesure/sondes/qet_directory
Normal file
14
elements/appareils_de_mesure/sondes/qet_directory
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<qet-directory>
|
||||||
|
<names>
|
||||||
|
<name lang="ar">مجسات</name>
|
||||||
|
<name lang="de">Sensoren</name>
|
||||||
|
<name lang="ru">Датчики</name>
|
||||||
|
<name lang="pt">Sondas</name>
|
||||||
|
<name lang="en">Sensors</name>
|
||||||
|
<name lang="it">Sensori</name>
|
||||||
|
<name lang="fr">Sondes</name>
|
||||||
|
<name lang="pl">Sondy</name>
|
||||||
|
<name lang="es">Sondas</name>
|
||||||
|
<name lang="cs">Snímače</name>
|
||||||
|
</names>
|
||||||
|
</qet-directory>
|
||||||
24
elements/appareils_de_mesure/sondes/thermocouple.elmt
Normal file
24
elements/appareils_de_mesure/sondes/thermocouple.elmt
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<definition width="60" version="0.3" hotspot_x="25" hotspot_y="35" height="60" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">ثنائي حراري</name>
|
||||||
|
<name lang="de">Thermoelement</name>
|
||||||
|
<name lang="en">Thermocouple</name>
|
||||||
|
<name lang="it">Termocoppia</name>
|
||||||
|
<name lang="fr">Thermocouple</name>
|
||||||
|
<name lang="pl">Termopara</name>
|
||||||
|
<name lang="cs">Termočlánek</name>
|
||||||
|
<name lang="es">Termopar</name>
|
||||||
|
<name lang="pt">Termopar</name>
|
||||||
|
</names>
|
||||||
|
<informations>EN 60617: 08-06-01</informations>
|
||||||
|
<description>
|
||||||
|
<polygon x4="10" y5="-30" x5="10" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="-30" x1="-10" y2="0" x2="-10" y3="20" x3="0" y4="0"/>
|
||||||
|
<circle x="-1" y="19" antialias="true" style="line-style:normal;line-weight:normal;filling:black;color:black" diameter="2"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:thin;filling:none;color:black" y1="-15" x1="14" y2="-11" x2="14"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:thin;filling:none;color:black" y1="-13" x1="-12" y2="-13" x2="-16"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:thin;filling:none;color:black" y1="-13" x1="12" y2="-13" x2="16"/>
|
||||||
|
<input x="10" y="-6.5" size="9" rotate="true" text="_"/>
|
||||||
|
<terminal x="-10" y="-30" orientation="n"/>
|
||||||
|
<terminal x="10" y="-30" orientation="n"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<qet-directory>
|
||||||
|
<names>
|
||||||
|
<name lang="ar">محولات حلقية للتيّار</name>
|
||||||
|
<name lang="de">Stromwandler mit Ringkern</name>
|
||||||
|
<name lang="en">Current toroidal core</name>
|
||||||
|
<name lang="fr">Tores de courant</name>
|
||||||
|
<name lang="es">Núcleos toroidales de corriente</name>
|
||||||
|
<name lang="pt">Núcleos toroidais de corrente</name>
|
||||||
|
<name lang="cs">Prstencové jádro střídavého proudu</name>
|
||||||
|
<name lang="pl">Przekładnik prądowy z rdzeniem toroidalnym</name>
|
||||||
|
<name lang="it">Nucleo toroidale di corrente</name>
|
||||||
|
</names>
|
||||||
|
</qet-directory>
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<definition width="40" version="0.3" hotspot_x="15" hotspot_y="25" height="40" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">ملف حلقي قطب 1</name>
|
||||||
|
<name lang="de">1-Pol Stromwandler</name>
|
||||||
|
<name lang="pt">Núcleo toroidal de 1 polo</name>
|
||||||
|
<name lang="en">1-pole toroidal core</name>
|
||||||
|
<name lang="it">Toroide a 1 polo</name>
|
||||||
|
<name lang="fr">Tore 1 pôle</name>
|
||||||
|
<name lang="pl">Przekładnik prądowy jednotorowy</name>
|
||||||
|
<name lang="es">Núcleo toroide 1 polo</name>
|
||||||
|
<name lang="cs">Prstencové jádro s jedním pólem</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="5" y2="-10" x2="5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-10" x1="14" y2="-10" x2="5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="14" y2="0" x2="10"/>
|
||||||
|
<ellipse width="20" x="-10" y="-2.5" antialias="true" height="5" style="line-style:dashed;line-weight:thin;filling:white;color:black"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-15" x1="0" y2="10" x2="0"/>
|
||||||
|
<terminal x="0" y="-16" orientation="n"/>
|
||||||
|
<terminal x="0" y="11" orientation="s"/>
|
||||||
|
<terminal x="15" y="0" orientation="e"/>
|
||||||
|
<terminal x="15" y="-10" orientation="e"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="25" height="40" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">ملف حلقي بقطبين</name>
|
||||||
|
<name lang="de">2-Pol Stromwandler</name>
|
||||||
|
<name lang="pt">Núcleo toroidal de 2 polos</name>
|
||||||
|
<name lang="en">2-poles toroidal core</name>
|
||||||
|
<name lang="it">Toroide a 2 poli</name>
|
||||||
|
<name lang="fr">Tore 2 pôles</name>
|
||||||
|
<name lang="pl">Przekładnik prądowy dwutorowy</name>
|
||||||
|
<name lang="es">Núcleo toroide 2 polos</name>
|
||||||
|
<name lang="cs">Prstencové jádro se dvěma póly</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="5" y2="-10" x2="5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-10" x1="14" y2="-10" x2="5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="14" y2="0" x2="10"/>
|
||||||
|
<ellipse width="30" x="-20" y="-2.5" antialias="true" height="5" style="line-style:dashed;line-weight:thin;filling:white;color:black"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-15" x1="-10" y2="10" x2="-10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-15" x1="0" y2="10" x2="0"/>
|
||||||
|
<terminal x="0" y="-16" orientation="n"/>
|
||||||
|
<terminal x="0" y="11" orientation="s"/>
|
||||||
|
<terminal x="15" y="0" orientation="e"/>
|
||||||
|
<terminal x="15" y="-10" orientation="e"/>
|
||||||
|
<terminal x="-10" y="-16" orientation="n"/>
|
||||||
|
<terminal x="-10" y="11" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<definition width="60" version="0.3" hotspot_x="35" hotspot_y="25" height="40" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">ملف حلقي بثلاث أقطاب</name>
|
||||||
|
<name lang="de">3-Pol Stromwandler</name>
|
||||||
|
<name lang="pt">Núcleo toroidal de 3 polos</name>
|
||||||
|
<name lang="en">3-poles toroidal core</name>
|
||||||
|
<name lang="it">Toroide a 3 poli</name>
|
||||||
|
<name lang="fr">Tore 3 pôles</name>
|
||||||
|
<name lang="pl">Przekładnik prądowy trzytorowy</name>
|
||||||
|
<name lang="es">Núcleo toroide 3 polos</name>
|
||||||
|
<name lang="cs">Prstencové jádro se třemi póly</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="5" y2="-10" x2="5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-10" x1="14" y2="-10" x2="5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="14" y2="0" x2="10"/>
|
||||||
|
<ellipse width="40" x="-30" y="-2.5" antialias="true" height="5" style="line-style:dashed;line-weight:thin;filling:white;color:black"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-15" x1="-10" y2="10" x2="-10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-15" x1="0" y2="10" x2="0"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-15" x1="-20" y2="10" x2="-20"/>
|
||||||
|
<terminal x="0" y="-16" orientation="n"/>
|
||||||
|
<terminal x="0" y="11" orientation="s"/>
|
||||||
|
<terminal x="15" y="0" orientation="e"/>
|
||||||
|
<terminal x="15" y="-10" orientation="e"/>
|
||||||
|
<terminal x="-10" y="-16" orientation="n"/>
|
||||||
|
<terminal x="-10" y="11" orientation="s"/>
|
||||||
|
<terminal x="-20" y="-16" orientation="n"/>
|
||||||
|
<terminal x="-20" y="11" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<definition width="70" version="0.3" hotspot_x="45" hotspot_y="25" height="40" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">ملف حلقي بأربع أقطاب</name>
|
||||||
|
<name lang="de">4-Pol Stromwandler</name>
|
||||||
|
<name lang="pt">Núcleo toroidal de 4 polos</name>
|
||||||
|
<name lang="en">4-poles toroidal core</name>
|
||||||
|
<name lang="it">Toroide a 4 poli"</name>
|
||||||
|
<name lang="fr">Tore 4 pôles</name>
|
||||||
|
<name lang="pl">Przekładnik prądowy czterotorowy</name>
|
||||||
|
<name lang="es">Núcleo toroide 4 polos</name>
|
||||||
|
<name lang="cs">Prstencové jádro se čtyřmi póly</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="5" y2="-10" x2="5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-10" x1="14" y2="-10" x2="5"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="14" y2="0" x2="10"/>
|
||||||
|
<ellipse width="50" x="-40" y="-2.5" antialias="true" height="5" style="line-style:dashed;line-weight:thin;filling:white;color:black"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-15" x1="-10" y2="10" x2="-10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-15" x1="0" y2="10" x2="0"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-15" x1="-30" y2="10" x2="-30"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-15" x1="-20" y2="10" x2="-20"/>
|
||||||
|
<terminal x="0" y="-16" orientation="n"/>
|
||||||
|
<terminal x="0" y="11" orientation="s"/>
|
||||||
|
<terminal x="15" y="0" orientation="e"/>
|
||||||
|
<terminal x="15" y="-10" orientation="e"/>
|
||||||
|
<terminal x="-10" y="-16" orientation="n"/>
|
||||||
|
<terminal x="-10" y="11" orientation="s"/>
|
||||||
|
<terminal x="-30" y="-16" orientation="n"/>
|
||||||
|
<terminal x="-20" y="-16" orientation="n"/>
|
||||||
|
<terminal x="-30" y="11" orientation="s"/>
|
||||||
|
<terminal x="-20" y="11" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
24
elements/appareils_de_mesure/voltmetre-h.elmt
Normal file
24
elements/appareils_de_mesure/voltmetre-h.elmt
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="15" height="30" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">فولتمتر أفقي</name>
|
||||||
|
<name lang="de">Voltmeter horizontal</name>
|
||||||
|
<name lang="ru">Вольтметр (горизонтальный)</name>
|
||||||
|
<name lang="pt">Voltímetro horizontal</name>
|
||||||
|
<name lang="en">Horizontal voltmeter</name>
|
||||||
|
<name lang="it">Volmetro orizzontale</name>
|
||||||
|
<name lang="fr">Voltmètre horizontal</name>
|
||||||
|
<name lang="pl">Woltomierz (poziomo)</name>
|
||||||
|
<name lang="es">Voltímetro horizontal</name>
|
||||||
|
<name lang="cs">Voltmetr, vodorovný</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-21" y2="0" x2="-10"/>
|
||||||
|
<polygon antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="-6" x1="-5" y2="6" x2="0" y3="-6" x3="5"/>
|
||||||
|
<circle x="-10" y="-10" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="20"/>
|
||||||
|
<terminal x="-21" y="0" orientation="w"/>
|
||||||
|
<terminal x="21" y="0" orientation="e"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
24
elements/appareils_de_mesure/voltmetre-v.elmt
Normal file
24
elements/appareils_de_mesure/voltmetre-v.elmt
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<definition width="30" version="0.3" hotspot_x="15" hotspot_y="25" height="50" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">فولتمتر عمودي</name>
|
||||||
|
<name lang="de">Voltmeter vertikal</name>
|
||||||
|
<name lang="ru">Вольтметр (вертикальный)</name>
|
||||||
|
<name lang="pt">Voltímetro vertical</name>
|
||||||
|
<name lang="en">Vertical voltmeter</name>
|
||||||
|
<name lang="it">Volmetro verticale</name>
|
||||||
|
<name lang="fr">Voltmètre vertical</name>
|
||||||
|
<name lang="pl">Woltomierz (pionowo)</name>
|
||||||
|
<name lang="es">Voltímetro vertical</name>
|
||||||
|
<name lang="cs">Voltmetr, svislý</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="0" y2="21" x2="0"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-21" x1="0" y2="-10" x2="0"/>
|
||||||
|
<polygon antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="-6" x1="-5" y2="6" x2="0" y3="-6" x3="5"/>
|
||||||
|
<circle x="-10" y="-10" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="20"/>
|
||||||
|
<terminal x="0" y="-21" orientation="n"/>
|
||||||
|
<terminal x="0" y="21" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
28
elements/appareils_de_mesure/wattmetre-h.elmt
Normal file
28
elements/appareils_de_mesure/wattmetre-h.elmt
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="15" height="40" type="element" ic="true" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">واتميتر أفقي</name>
|
||||||
|
<name lang="de">Wattmeter horizontal</name>
|
||||||
|
<name lang="ru">Ватметр (горизонтальный)</name>
|
||||||
|
<name lang="pt">Wattímetro horizontal</name>
|
||||||
|
<name lang="en">Horizontal wattmeter</name>
|
||||||
|
<name lang="it">Wattmetro orizzontale</name>
|
||||||
|
<name lang="fr">Wattmètre horizontal</name>
|
||||||
|
<name lang="pl">Watomierz (poziomo)</name>
|
||||||
|
<name lang="es">Vatímetro horizontal</name>
|
||||||
|
<name lang="cs">Wattmetr, vodorovný</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<polygon antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="7.5" x1="7.5" y2="15" x2="10" y3="20" x3="10"/>
|
||||||
|
<polygon antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="7.5" x1="-7.5" y2="15" x2="-10" y3="20" x3="-10"/>
|
||||||
|
<polygon x4="2.5" y5="-6" x5="5" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="-6" x1="-5" y2="6" x2="-2.5" y3="0" x3="0" y4="6"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-21" y2="0" x2="-10"/>
|
||||||
|
<circle x="-10" y="-10" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="20"/>
|
||||||
|
<terminal x="-21" y="0" orientation="w"/>
|
||||||
|
<terminal x="21" y="0" orientation="e"/>
|
||||||
|
<terminal x="-10" y="20" orientation="s"/>
|
||||||
|
<terminal x="10" y="20" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
28
elements/appareils_de_mesure/wattmetre-v.elmt
Normal file
28
elements/appareils_de_mesure/wattmetre-v.elmt
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<definition width="40" version="0.3" hotspot_x="15" hotspot_y="25" height="50" type="element" ic="true" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">واتميتر عمودي</name>
|
||||||
|
<name lang="de">Wattmeter vertikal</name>
|
||||||
|
<name lang="ru">Ватметр (вертикальный)</name>
|
||||||
|
<name lang="pt">Wattímetro vertical</name>
|
||||||
|
<name lang="en">Vertical wattmeter</name>
|
||||||
|
<name lang="it">Wattmetro verticale</name>
|
||||||
|
<name lang="fr">Wattmètre vertical</name>
|
||||||
|
<name lang="pl">Watomierz (pionowo)</name>
|
||||||
|
<name lang="es">Vatímetro vertical</name>
|
||||||
|
<name lang="cs">Wattmetr, svislý</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<polygon antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="7.5" x1="7.5" y2="10" x2="15" y3="10" x3="20"/>
|
||||||
|
<polygon antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="-7.5" x1="7.5" y2="-10" x2="15" y3="-10" x3="20"/>
|
||||||
|
<polygon x4="2.5" y5="-6" x5="5" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="-6" x1="-5" y2="6" x2="-2.5" y3="0" x3="0" y4="6"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="0" y2="21" x2="0"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-21" x1="0" y2="-10" x2="0"/>
|
||||||
|
<circle x="-10" y="-10" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="20"/>
|
||||||
|
<terminal x="0" y="-21" orientation="n"/>
|
||||||
|
<terminal x="0" y="21" orientation="s"/>
|
||||||
|
<terminal x="20" y="-10" orientation="e"/>
|
||||||
|
<terminal x="20" y="10" orientation="e"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
24
elements/automatisme/fonction/entree.elmt
Normal file
24
elements/automatisme/fonction/entree.elmt
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<definition width="80" version="0.3" hotspot_x="30" hotspot_y="50" height="110" type="element" ic="true" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">دخل</name>
|
||||||
|
<name lang="de">Eingang</name>
|
||||||
|
<name lang="ru">Вход</name>
|
||||||
|
<name lang="pt">Entrada</name>
|
||||||
|
<name lang="en">Input</name>
|
||||||
|
<name lang="it">Inghresso</name>
|
||||||
|
<name lang="fr">Entrée</name>
|
||||||
|
<name lang="pl">Wejście</name>
|
||||||
|
<name lang="es">Entrada</name>
|
||||||
|
<name lang="cs">Vstup</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="40" y2="0" x2="20"/>
|
||||||
|
<input x="25" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="-25" y="50" size="9" rotate="true" text="_"/>
|
||||||
|
<text x="-2" y="5" size="12" text="I"/>
|
||||||
|
<rect width="40" x="-20" y="-35" antialias="false" height="70" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="40" y="0" orientation="e"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
30
elements/automatisme/fonction/et.elmt
Normal file
30
elements/automatisme/fonction/et.elmt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<definition width="100" version="0.3" hotspot_x="50" hotspot_y="50" height="110" type="element" ic="true" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">بوابة AND</name>
|
||||||
|
<name lang="de">UND</name>
|
||||||
|
<name lang="ru">И</name>
|
||||||
|
<name lang="pt">E</name>
|
||||||
|
<name lang="en">AND</name>
|
||||||
|
<name lang="it">AND</name>
|
||||||
|
<name lang="fr">ET</name>
|
||||||
|
<name lang="pl">AND</name>
|
||||||
|
<name lang="es">Y</name>
|
||||||
|
<name lang="cs">A</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<input x="-46" y="10" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="-46" y="-30" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="25" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-20" x1="-40" y2="-20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="20" x1="-40" y2="20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="40" y2="0" x2="21"/>
|
||||||
|
<input x="-25" y="50" size="9" rotate="true" text="_"/>
|
||||||
|
<text x="-6" y="5" size="12" text="&"/>
|
||||||
|
<rect width="40" x="-20" y="-35" antialias="false" height="70" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="40" y="0" orientation="e"/>
|
||||||
|
<terminal x="-40" y="-20" orientation="w"/>
|
||||||
|
<terminal x="-40" y="20" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
33
elements/automatisme/fonction/et3entrees.elmt
Normal file
33
elements/automatisme/fonction/et3entrees.elmt
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<definition width="100" version="0.3" hotspot_x="50" hotspot_y="50" height="110" type="element" ic="true" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">بوابة AND بثلاث مداخل </name>
|
||||||
|
<name lang="de">UND 3 Eingänge</name>
|
||||||
|
<name lang="ru">И, трёхвходовый</name>
|
||||||
|
<name lang="pt">E 3 entradas</name>
|
||||||
|
<name lang="en">AND 3 inputs</name>
|
||||||
|
<name lang="it">AND 3 ingressi</name>
|
||||||
|
<name lang="fr">ET 3 entrées</name>
|
||||||
|
<name lang="pl">AND (3 wejścia)</name>
|
||||||
|
<name lang="es">Y 3 entradas</name>
|
||||||
|
<name lang="cs">A 3 vstupy</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<input x="-46" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-40" y2="0" x2="-20"/>
|
||||||
|
<input x="-46" y="10" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="-46" y="-30" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="25" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-20" x1="-40" y2="-20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="20" x1="-40" y2="20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="40" y2="0" x2="21"/>
|
||||||
|
<input x="-25" y="50" size="9" rotate="true" text="_"/>
|
||||||
|
<text x="-6" y="5" size="12" text="&"/>
|
||||||
|
<rect width="40" x="-20" y="-35" antialias="false" height="70" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="40" y="0" orientation="e"/>
|
||||||
|
<terminal x="-40" y="-20" orientation="w"/>
|
||||||
|
<terminal x="-40" y="20" orientation="w"/>
|
||||||
|
<terminal x="-40" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
31
elements/automatisme/fonction/nand.elmt
Normal file
31
elements/automatisme/fonction/nand.elmt
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<definition width="100" version="0.3" hotspot_x="50" hotspot_y="50" height="110" type="element" ic="true" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">بوابة NAND</name>
|
||||||
|
<name lang="de">UND-NICHT (NAND)</name>
|
||||||
|
<name lang="ru">И-НЕ</name>
|
||||||
|
<name lang="pt">NÃO-E (NAND)</name>
|
||||||
|
<name lang="en">NAND</name>
|
||||||
|
<name lang="it">NAND</name>
|
||||||
|
<name lang="fr">NON-ET (NAND)</name>
|
||||||
|
<name lang="pl">NAND</name>
|
||||||
|
<name lang="es">NO-Y (NAND)</name>
|
||||||
|
<name lang="cs">Ne-A (NAND)</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="40" y2="0" x2="26"/>
|
||||||
|
<circle x="20.5" y="-2.5" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="5"/>
|
||||||
|
<input x="-46" y="10" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="-46" y="-30" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="25" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-20" x1="-40" y2="-20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="20" x1="-40" y2="20" x2="-21"/>
|
||||||
|
<input x="-25" y="50" size="9" rotate="true" text="_"/>
|
||||||
|
<text x="-6" y="5" size="12" text="&"/>
|
||||||
|
<rect width="40" x="-20" y="-35" antialias="false" height="70" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="40" y="0" orientation="e"/>
|
||||||
|
<terminal x="-40" y="-20" orientation="w"/>
|
||||||
|
<terminal x="-40" y="20" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
28
elements/automatisme/fonction/non.elmt
Normal file
28
elements/automatisme/fonction/non.elmt
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<definition width="100" version="0.3" hotspot_x="50" hotspot_y="40" height="110" type="element" ic="true" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">بوابة النفي</name>
|
||||||
|
<name lang="de">NICHT</name>
|
||||||
|
<name lang="ru">НЕ</name>
|
||||||
|
<name lang="pt">NÃO</name>
|
||||||
|
<name lang="en">NOT</name>
|
||||||
|
<name lang="it">NOT</name>
|
||||||
|
<name lang="fr">NON</name>
|
||||||
|
<name lang="pl">NOT</name>
|
||||||
|
<name lang="es">NO</name>
|
||||||
|
<name lang="cs">Ne</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="40" y2="0" x2="26"/>
|
||||||
|
<circle x="20.5" y="-2.5" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="5"/>
|
||||||
|
<input x="-46" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="25" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-39" y2="0" x2="-20"/>
|
||||||
|
<input x="-25" y="50" size="9" rotate="true" text="_"/>
|
||||||
|
<text x="-5" y="5" size="12" text="1"/>
|
||||||
|
<rect width="40" x="-20" y="-35" antialias="false" height="70" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="-40" y="0" orientation="w"/>
|
||||||
|
<terminal x="40" y="0" orientation="e"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
31
elements/automatisme/fonction/nor.elmt
Normal file
31
elements/automatisme/fonction/nor.elmt
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<definition width="100" version="0.3" hotspot_x="50" hotspot_y="50" height="110" type="element" ic="true" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">بوابة NOR</name>
|
||||||
|
<name lang="de">ODER-NICHT (NOR)</name>
|
||||||
|
<name lang="ru">ИЛИ-НЕ</name>
|
||||||
|
<name lang="pt">NÃO-OU (NOR)</name>
|
||||||
|
<name lang="en">NOR</name>
|
||||||
|
<name lang="it">NOR</name>
|
||||||
|
<name lang="fr">NON-OU (NOR)</name>
|
||||||
|
<name lang="pl">NOR</name>
|
||||||
|
<name lang="es">NO-O (NOR)</name>
|
||||||
|
<name lang="cs">Ne-NEBO (NOR)</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="40" y2="0" x2="26"/>
|
||||||
|
<circle x="20.5" y="-2.5" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="5"/>
|
||||||
|
<input x="-46" y="10" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="-46" y="-30" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="25" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-20" x1="-40" y2="-20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="20" x1="-40" y2="20" x2="-21"/>
|
||||||
|
<input x="-25" y="50" size="9" rotate="true" text="_"/>
|
||||||
|
<text x="-11.5" y="5" size="12" text="≥1"/>
|
||||||
|
<rect width="40" x="-20" y="-35" antialias="false" height="70" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="40" y="0" orientation="e"/>
|
||||||
|
<terminal x="-40" y="-20" orientation="w"/>
|
||||||
|
<terminal x="-40" y="20" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
30
elements/automatisme/fonction/ou.elmt
Normal file
30
elements/automatisme/fonction/ou.elmt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<definition width="100" version="0.3" hotspot_x="50" hotspot_y="50" height="110" type="element" ic="true" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">بوابة OR</name>
|
||||||
|
<name lang="de">ODER</name>
|
||||||
|
<name lang="ru">ИЛИ</name>
|
||||||
|
<name lang="pt">OU</name>
|
||||||
|
<name lang="en">OR</name>
|
||||||
|
<name lang="it">OR</name>
|
||||||
|
<name lang="fr">OU</name>
|
||||||
|
<name lang="pl">OR</name>
|
||||||
|
<name lang="es">O</name>
|
||||||
|
<name lang="cs">NEBO</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<input x="-46" y="10" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="-46" y="-30" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="25" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-20" x1="-40" y2="-20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="20" x1="-40" y2="20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="40" y2="0" x2="21"/>
|
||||||
|
<input x="-25" y="50" size="9" rotate="true" text="_"/>
|
||||||
|
<text x="-11.5" y="5" size="12" text="≥1"/>
|
||||||
|
<rect width="40" x="-20" y="-35" antialias="false" height="70" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="40" y="0" orientation="e"/>
|
||||||
|
<terminal x="-40" y="-20" orientation="w"/>
|
||||||
|
<terminal x="-40" y="20" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
33
elements/automatisme/fonction/ou3entrees.elmt
Normal file
33
elements/automatisme/fonction/ou3entrees.elmt
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<definition width="100" version="0.3" hotspot_x="50" hotspot_y="50" height="110" type="element" ic="true" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">بواابة OR بثلاث مداخل</name>
|
||||||
|
<name lang="de">ODER 3 Eingänge</name>
|
||||||
|
<name lang="ru">ИЛИ, трёхвходовый</name>
|
||||||
|
<name lang="pt">OU 3 entradas</name>
|
||||||
|
<name lang="en">OR 3 inputs</name>
|
||||||
|
<name lang="it">OR 3 ingressi</name>
|
||||||
|
<name lang="fr">OU 3 entrées</name>
|
||||||
|
<name lang="pl">OR (3 wejścia)</name>
|
||||||
|
<name lang="es">O 3 entradas</name>
|
||||||
|
<name lang="cs">NEBO 3 vstupy</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<input x="-46" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-40" y2="0" x2="-20"/>
|
||||||
|
<input x="-46" y="10" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="-46" y="-30" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="25" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-20" x1="-40" y2="-20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="20" x1="-40" y2="20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="40" y2="0" x2="21"/>
|
||||||
|
<input x="-25" y="50" size="9" rotate="true" text="_"/>
|
||||||
|
<text x="-11.5" y="5" size="12" text="≥1"/>
|
||||||
|
<rect width="40" x="-20" y="-35" antialias="false" height="70" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="40" y="0" orientation="e"/>
|
||||||
|
<terminal x="-40" y="-20" orientation="w"/>
|
||||||
|
<terminal x="-40" y="20" orientation="w"/>
|
||||||
|
<terminal x="-40" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
14
elements/automatisme/fonction/qet_directory
Normal file
14
elements/automatisme/fonction/qet_directory
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<qet-directory>
|
||||||
|
<names>
|
||||||
|
<name lang="ar">وظائف منطقيّة</name>
|
||||||
|
<name lang="de">Funktions Plan (FUP)</name>
|
||||||
|
<name lang="ru">Логические устройства</name>
|
||||||
|
<name lang="en">Logic gates</name>
|
||||||
|
<name lang="fr">Fonctions logiques</name>
|
||||||
|
<name lang="es">Puertas lógicas</name>
|
||||||
|
<name lang="pt">Portas lógicas</name>
|
||||||
|
<name lang="cs">Logické funkce</name>
|
||||||
|
<name lang="pl">Bloki funkcyjne (FBD)</name>
|
||||||
|
<name lang="it">Porte logiche</name>
|
||||||
|
</names>
|
||||||
|
</qet-directory>
|
||||||
21
elements/automatisme/fonction/report_entree.elmt
Normal file
21
elements/automatisme/fonction/report_entree.elmt
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<definition width="40" version="0.3" hotspot_x="20" hotspot_y="15" height="40" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">إرجاء دخل</name>
|
||||||
|
<name lang="de">Eingang Report</name>
|
||||||
|
<name lang="pt">Relatório Entrada</name>
|
||||||
|
<name lang="en">Input Report</name>
|
||||||
|
<name lang="it">Report ingresso</name>
|
||||||
|
<name lang="fr">Report Entrée</name>
|
||||||
|
<name lang="pl">Wejście adresowe</name>
|
||||||
|
<name lang="cs">Hlášení vstupu</name>
|
||||||
|
<name lang="es">Reporte de entrada</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<input x="-10" y="15" size="9" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="16"/>
|
||||||
|
<polygon x4="-10" y5="0" x5="-5" y6="-5" x6="-10" y7="-5" x7="-10" antialias="false" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="-5" x1="-10" y2="-5" x2="10" y3="5" x3="10" y4="5"/>
|
||||||
|
<terminal x="16" y="0" orientation="e"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
21
elements/automatisme/fonction/report_sortie.elmt
Normal file
21
elements/automatisme/fonction/report_sortie.elmt
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<definition width="40" version="0.3" hotspot_x="25" hotspot_y="15" height="40" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">إرجاء خرج</name>
|
||||||
|
<name lang="de">Ausgang Report</name>
|
||||||
|
<name lang="pt">Relatório saída</name>
|
||||||
|
<name lang="en">Output Report</name>
|
||||||
|
<name lang="it">Report uscita</name>
|
||||||
|
<name lang="fr">Report Sortie</name>
|
||||||
|
<name lang="pl">Wyjście adresowe</name>
|
||||||
|
<name lang="cs">Hlášení výstupu</name>
|
||||||
|
<name lang="es">Reporte de salida</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<input x="-10" y="15" size="9" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-16" y2="0" x2="-10"/>
|
||||||
|
<polygon x4="5" y5="5" x5="-10" y6="-5" x6="-10" y7="-5" x7="-10" antialias="false" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="-5" x1="-10" y2="-5" x2="5" y3="0" x3="10" y4="5"/>
|
||||||
|
<terminal x="-16" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
32
elements/automatisme/fonction/set_reset.elmt
Normal file
32
elements/automatisme/fonction/set_reset.elmt
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
<definition width="100" version="0.3" hotspot_x="50" hotspot_y="50" height="110" type="element" ic="true" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">قلاب إلغاء/ إبقاء RS</name>
|
||||||
|
<name lang="de">SETZEN/RÜCKSETZEN</name>
|
||||||
|
<name lang="ru">Установка/Сброс</name>
|
||||||
|
<name lang="pt">SET/RESET</name>
|
||||||
|
<name lang="en">SET/RESET</name>
|
||||||
|
<name lang="it">SET/RESET</name>
|
||||||
|
<name lang="fr">SET/RESET</name>
|
||||||
|
<name lang="pl">Przerzutnik RS</name>
|
||||||
|
<name lang="es">SET/RESET</name>
|
||||||
|
<name lang="cs">NASTAVIT/NASTAVIT ZNOVU</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<input x="-46" y="-10" size="8" rotate="true" text="R"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-40" y2="0" x2="-20"/>
|
||||||
|
<input x="-46" y="15" size="8" rotate="true" text="Par"/>
|
||||||
|
<input x="-46" y="-30" size="8" rotate="true" text="S"/>
|
||||||
|
<input x="25" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-20" x1="-40" y2="-20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="20" x1="-40" y2="20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="40" y2="0" x2="21"/>
|
||||||
|
<input x="-25" y="50" size="9" rotate="true" text="_"/>
|
||||||
|
<text x="-10.5" y="5" size="12" text="RS"/>
|
||||||
|
<rect width="40" x="-20" y="-35" antialias="false" height="70" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="40" y="0" orientation="e"/>
|
||||||
|
<terminal x="-40" y="-20" orientation="w"/>
|
||||||
|
<terminal x="-40" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
24
elements/automatisme/fonction/sortie.elmt
Normal file
24
elements/automatisme/fonction/sortie.elmt
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<definition width="80" version="0.3" hotspot_x="50" hotspot_y="50" height="110" type="element" ic="true" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">خرج</name>
|
||||||
|
<name lang="de">Ausgang</name>
|
||||||
|
<name lang="ru">Выход</name>
|
||||||
|
<name lang="pt">Saída</name>
|
||||||
|
<name lang="en">Output</name>
|
||||||
|
<name lang="it">Uscita</name>
|
||||||
|
<name lang="fr">Sortie</name>
|
||||||
|
<name lang="pl">Wyjście</name>
|
||||||
|
<name lang="cs">Výstup</name>
|
||||||
|
<name lang="es">Salida</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<input x="-46" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-39" y2="0" x2="-20"/>
|
||||||
|
<input x="-25" y="50" size="9" rotate="true" text="_"/>
|
||||||
|
<text x="-6.5" y="5" size="12" text="Q"/>
|
||||||
|
<rect width="40" x="-20" y="-35" antialias="false" height="70" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="-40" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
31
elements/automatisme/fonction/xnor.elmt
Normal file
31
elements/automatisme/fonction/xnor.elmt
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<definition width="100" version="0.3" hotspot_x="50" hotspot_y="50" height="110" type="element" ic="true" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">بوابة XNOR</name>
|
||||||
|
<name lang="de">exklusives ODER-NICHT (XNOR)</name>
|
||||||
|
<name lang="ru">Инверсное исключающее ИЛИ</name>
|
||||||
|
<name lang="pt">NÃO-OU exclusivo (XNOR)</name>
|
||||||
|
<name lang="en">XNOR</name>
|
||||||
|
<name lang="it">XNOR</name>
|
||||||
|
<name lang="fr">NON-OU excusif (XNOR)</name>
|
||||||
|
<name lang="pl">XNOR</name>
|
||||||
|
<name lang="es">NO-O exclusiva (XNOR)</name>
|
||||||
|
<name lang="cs"> NE-NEBO výhradní (XNOR)</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="40" y2="0" x2="26"/>
|
||||||
|
<circle x="20.5" y="-2.5" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="5"/>
|
||||||
|
<input x="-46" y="10" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="-46" y="-30" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="25" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-20" x1="-40" y2="-20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="20" x1="-40" y2="20" x2="-21"/>
|
||||||
|
<input x="-25" y="50" size="9" rotate="true" text="_"/>
|
||||||
|
<text x="-11.5" y="5" size="12" text="=1"/>
|
||||||
|
<rect width="40" x="-20" y="-35" antialias="false" height="70" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="40" y="0" orientation="e"/>
|
||||||
|
<terminal x="-40" y="-20" orientation="w"/>
|
||||||
|
<terminal x="-40" y="20" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
30
elements/automatisme/fonction/xor.elmt
Normal file
30
elements/automatisme/fonction/xor.elmt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<definition width="100" version="0.3" hotspot_x="50" hotspot_y="50" height="110" type="element" ic="true" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">بوابة XOR</name>
|
||||||
|
<name lang="de">exklusives ODER (XOR)</name>
|
||||||
|
<name lang="ru">Исключающее ИЛИ</name>
|
||||||
|
<name lang="pt">OU exclusivo (XOR)</name>
|
||||||
|
<name lang="en">XOR</name>
|
||||||
|
<name lang="it">XOR</name>
|
||||||
|
<name lang="fr">OU exclusif (XOR)</name>
|
||||||
|
<name lang="pl">XOR</name>
|
||||||
|
<name lang="es">O exclusiva (XOR)</name>
|
||||||
|
<name lang="cs">NEBO výhradní (XOR)</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<input x="-46" y="10" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="-46" y="-30" size="8" rotate="true" text="_"/>
|
||||||
|
<input x="25" y="-10" size="8" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-20" x1="-40" y2="-20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="20" x1="-40" y2="20" x2="-21"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="40" y2="0" x2="21"/>
|
||||||
|
<input x="-25" y="50" size="9" rotate="true" text="_"/>
|
||||||
|
<text x="-11.5" y="5" size="12" text="=1"/>
|
||||||
|
<rect width="40" x="-20" y="-35" antialias="false" height="70" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="40" y="0" orientation="e"/>
|
||||||
|
<terminal x="-40" y="-20" orientation="w"/>
|
||||||
|
<terminal x="-40" y="20" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
18
elements/automatisme/grafcet/actions/action.elmt
Normal file
18
elements/automatisme/grafcet/actions/action.elmt
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<definition width="140" version="0.3" hotspot_x="0" hotspot_y="15" height="30" type="element" ic="true" orientation="dnyn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">فعل</name>
|
||||||
|
<name lang="de">Aktion</name>
|
||||||
|
<name lang="en">action</name>
|
||||||
|
<name lang="fr">action</name>
|
||||||
|
<name lang="pl">Działanie</name>
|
||||||
|
<name lang="cs">Čin</name>
|
||||||
|
<name lang="es">acción</name>
|
||||||
|
<name lang="pt">acção</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<input x="8" y="2" size="8" text="action"/>
|
||||||
|
<rect width="125" x="7" y="-5" antialias="false" height="10" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="2" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
19
elements/automatisme/grafcet/actions/continue.elmt
Normal file
19
elements/automatisme/grafcet/actions/continue.elmt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<definition width="140" version="0.3" hotspot_x="0" hotspot_y="15" height="30" type="element" orientation="dnyn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">مستمرّ</name>
|
||||||
|
<name lang="de">Fortsetzen</name>
|
||||||
|
<name lang="en">continue</name>
|
||||||
|
<name lang="fr">continue</name>
|
||||||
|
<name lang="pl">Działanie</name>
|
||||||
|
<name lang="cs">Čin</name>
|
||||||
|
<name lang="pt">continuo</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<input x="25" y="2" size="8" rotate="true" text="action"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-5" x1="20" y2="4" x2="20"/>
|
||||||
|
<text x="8" y="3" size="8" text="="/>
|
||||||
|
<rect width="125" x="7" y="-5" antialias="false" height="10" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="3" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
12
elements/automatisme/grafcet/actions/qet_directory
Normal file
12
elements/automatisme/grafcet/actions/qet_directory
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<qet-directory>
|
||||||
|
<names>
|
||||||
|
<name lang="de">Aktion</name>
|
||||||
|
<name lang="en">Actions</name>
|
||||||
|
<name lang="fr">Actions</name>
|
||||||
|
<name lang="ar">أفعال</name>
|
||||||
|
<name lang="pl">Działania</name>
|
||||||
|
<name lang="cs">Činy</name>
|
||||||
|
<name lang="es">Acciones</name>
|
||||||
|
<name lang="pt">Acções</name>
|
||||||
|
</names>
|
||||||
|
</qet-directory>
|
||||||
21
elements/automatisme/grafcet/et.elmt
Normal file
21
elements/automatisme/grafcet/et.elmt
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<definition width="20" version="0.3" hotspot_x="10" hotspot_y="10" height="20" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">And</name>
|
||||||
|
<name lang="de">Und</name>
|
||||||
|
<name lang="en">And</name>
|
||||||
|
<name lang="fr">Et</name>
|
||||||
|
<name lang="pl">And</name>
|
||||||
|
<name lang="cs">A (And)</name>
|
||||||
|
<name lang="es">Y</name>
|
||||||
|
<name lang="pt">E (And)</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="2" x1="0" y2="2" x2="7"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-2" x1="0" y2="-2" x2="7"/>
|
||||||
|
<terminal x="0" y="-3" orientation="n"/>
|
||||||
|
<terminal x="8" y="-2" orientation="e"/>
|
||||||
|
<terminal x="8" y="2" orientation="e"/>
|
||||||
|
<terminal x="0" y="3" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
21
elements/automatisme/grafcet/etape.elmt
Normal file
21
elements/automatisme/grafcet/etape.elmt
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<definition width="90" version="0.3" hotspot_x="45" hotspot_y="30" height="60" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">خطوة</name>
|
||||||
|
<name lang="de">Schritt</name>
|
||||||
|
<name lang="en">Step</name>
|
||||||
|
<name lang="fr">Etape</name>
|
||||||
|
<name lang="pl">Krok</name>
|
||||||
|
<name lang="cs">Krok</name>
|
||||||
|
<name lang="es">Etapa</name>
|
||||||
|
<name lang="pt">Etapa</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<input x="-30" y="14" size="6" rotate="true" text=""/>
|
||||||
|
<input x="-20" y="0" size="10" rotate="true" text="E 00"/>
|
||||||
|
<rect width="70" x="-35" y="-20" antialias="false" height="40" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="0" y="-25" orientation="n"/>
|
||||||
|
<terminal x="0" y="25" orientation="s"/>
|
||||||
|
<terminal x="40" y="-10" orientation="e"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
20
elements/automatisme/grafcet/etape_initiale.elmt
Normal file
20
elements/automatisme/grafcet/etape_initiale.elmt
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<definition width="90" version="0.3" hotspot_x="45" hotspot_y="30" height="60" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">خطوة أوليّة</name>
|
||||||
|
<name lang="de">Initialisierungs Schritt</name>
|
||||||
|
<name lang="en">Initial step</name>
|
||||||
|
<name lang="fr">Etape initiale</name>
|
||||||
|
<name lang="pl">Krok początkowy</name>
|
||||||
|
<name lang="cs">Počáteční krok</name>
|
||||||
|
<name lang="es">Etapa inicial</name>
|
||||||
|
<name lang="pt">Etapa inicial</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<rect width="66" x="-33" y="-18" antialias="false" height="36" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<input x="-30" y="14" size="6" rotate="true" text=""/>
|
||||||
|
<input x="-20" y="0" size="10" rotate="true" text="E 00"/>
|
||||||
|
<rect width="70" x="-35" y="-20" antialias="false" height="40" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="0" y="25" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
26
elements/automatisme/grafcet/macro/etape.elmt
Normal file
26
elements/automatisme/grafcet/macro/etape.elmt
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<definition width="90" version="0.3" hotspot_x="45" hotspot_y="30" height="90" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">ماكرو خطوة</name>
|
||||||
|
<name lang="de">Makro Schritt</name>
|
||||||
|
<name lang="en">Macro step</name>
|
||||||
|
<name lang="fr">Macro etape</name>
|
||||||
|
<name lang="pl">Krok makro</name>
|
||||||
|
<name lang="cs">Makro krok</name>
|
||||||
|
<name lang="es">Macro etapa</name>
|
||||||
|
<name lang="pt">Etapa Macro</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="17" x1="-35" y2="17" x2="35"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-18" x1="-35" y2="-18" x2="35"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="19.6667" x1="0" y2="38.6667" x2="0"/>
|
||||||
|
<text x="18" y="42" size="8" text="1"/>
|
||||||
|
<input x="-30" y="13.6667" size="6" rotate="true" text=""/>
|
||||||
|
<rect width="26" x="-13" y="37.6667" antialias="false" height="4" style="line-style:normal;line-weight:thin;filling:black;color:black"/>
|
||||||
|
<input x="-20" y="-0.3333" size="10" rotate="true" text="M 00"/>
|
||||||
|
<rect width="70" x="-35" y="-20.3333" antialias="false" height="40" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<terminal x="-12" y="39.6667" orientation="w"/>
|
||||||
|
<terminal x="0" y="44.6667" orientation="s"/>
|
||||||
|
<terminal x="0" y="-25" orientation="n"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
23
elements/automatisme/grafcet/macro/etape_entree.elmt
Normal file
23
elements/automatisme/grafcet/macro/etape_entree.elmt
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<definition width="90" version="0.3" hotspot_x="45" hotspot_y="30" height="90" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">خطوة دخل</name>
|
||||||
|
<name lang="de">Eingangs Schritt</name>
|
||||||
|
<name lang="en">Imput step</name>
|
||||||
|
<name lang="fr">Etape d'entree</name>
|
||||||
|
<name lang="pl">Krok (input)</name>
|
||||||
|
<name lang="cs">Vstupní krok</name>
|
||||||
|
<name lang="es">Etapa de entrada</name>
|
||||||
|
<name lang="pt">Etapa de entrada</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="20" x1="0" y2="39" x2="0"/>
|
||||||
|
<text x="19" y="42" size="8" text="1"/>
|
||||||
|
<input x="-30" y="14" size="6" rotate="true" text=""/>
|
||||||
|
<rect width="26" x="-13" y="38" antialias="false" height="4" style="line-style:normal;line-weight:thin;filling:black;color:black"/>
|
||||||
|
<input x="-20" y="0" size="10" rotate="true" text="E 00"/>
|
||||||
|
<rect width="70" x="-34" y="-20" antialias="false" height="40" style="line-style:normal;line-weight:thin;filling:none;color:black"/>
|
||||||
|
<terminal x="0" y="45" orientation="s"/>
|
||||||
|
<terminal x="-12" y="40" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
19
elements/automatisme/grafcet/macro/etape_sortie.elmt
Normal file
19
elements/automatisme/grafcet/macro/etape_sortie.elmt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<definition width="90" version="0.3" hotspot_x="45" hotspot_y="30" height="60" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">خطوة خرج</name>
|
||||||
|
<name lang="de">Ausgangs Schritt</name>
|
||||||
|
<name lang="en">Output step</name>
|
||||||
|
<name lang="fr">Etape sortie</name>
|
||||||
|
<name lang="pl">Krok (output)</name>
|
||||||
|
<name lang="cs">Výstupní krok</name>
|
||||||
|
<name lang="es">Etapa de salida</name>
|
||||||
|
<name lang="pt">Etapa de saída</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<input x="-30" y="14" size="6" rotate="true" text=""/>
|
||||||
|
<input x="-20" y="0" size="10" rotate="true" text="S 00"/>
|
||||||
|
<rect width="70" x="-35" y="-20" antialias="false" height="40" style="line-style:normal;line-weight:thin;filling:none;color:black"/>
|
||||||
|
<terminal x="0" y="-25" orientation="n"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
12
elements/automatisme/grafcet/macro/qet_directory
Normal file
12
elements/automatisme/grafcet/macro/qet_directory
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<qet-directory>
|
||||||
|
<names>
|
||||||
|
<name lang="de">Makro Schritte</name>
|
||||||
|
<name lang="en">Macro steps</name>
|
||||||
|
<name lang="fr">Macro etape</name>
|
||||||
|
<name lang="ar">ماكرو خطوة</name>
|
||||||
|
<name lang="pl">Kroki makro</name>
|
||||||
|
<name lang="cs">Makro kroky</name>
|
||||||
|
<name lang="es">Macro etapas</name>
|
||||||
|
<name lang="pt">Etapas Macro</name>
|
||||||
|
</names>
|
||||||
|
</qet-directory>
|
||||||
11
elements/automatisme/grafcet/qet_directory
Normal file
11
elements/automatisme/grafcet/qet_directory
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<qet-directory>
|
||||||
|
<names>
|
||||||
|
<name lang="ar">المخطط الوظيفي التعاقبي SFC </name>
|
||||||
|
<name lang="en">Grafcet</name>
|
||||||
|
<name lang="de">Grafcet</name>
|
||||||
|
<name lang="fr">Grafcet</name>
|
||||||
|
<name lang="pl">Grafcet</name>
|
||||||
|
<name lang="cs">Grafcet</name>
|
||||||
|
<name lang="pt">Grafcet</name>
|
||||||
|
</names>
|
||||||
|
</qet-directory>
|
||||||
22
elements/automatisme/grafcet/saut.elmt
Normal file
22
elements/automatisme/grafcet/saut.elmt
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<definition width="70" version="0.3" hotspot_x="25" hotspot_y="25" height="100" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">قفز</name>
|
||||||
|
<name lang="de">Sprung</name>
|
||||||
|
<name lang="en">jump</name>
|
||||||
|
<name lang="fr">saut</name>
|
||||||
|
<name lang="pl">Skok</name>
|
||||||
|
<name lang="cs">Skok</name>
|
||||||
|
<name lang="es">Saltar</name>
|
||||||
|
<name lang="pt">Saltar</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<circle x="-20" y="20" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="40"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="1" x1="0" y2="19" x2="0"/>
|
||||||
|
<input x="-15" y="45" size="10" rotate="true" text="E 00"/>
|
||||||
|
<input x="15" y="2" size="8" rotate="true" text="T 00"/>
|
||||||
|
<rect width="26" x="-13" y="-2" antialias="false" height="4" style="line-style:normal;line-weight:thin;filling:black;color:black"/>
|
||||||
|
<terminal x="0" y="-5" orientation="n"/>
|
||||||
|
<terminal x="-12" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
20
elements/automatisme/grafcet/transition.elmt
Normal file
20
elements/automatisme/grafcet/transition.elmt
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<definition width="60" version="0.3" hotspot_x="15" hotspot_y="15" height="30" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">إنتقاليّة</name>
|
||||||
|
<name lang="de">Übergang</name>
|
||||||
|
<name lang="en">transition</name>
|
||||||
|
<name lang="fr">transition</name>
|
||||||
|
<name lang="pl">Tranzycja</name>
|
||||||
|
<name lang="cs">Přechod</name>
|
||||||
|
<name lang="es">transición</name>
|
||||||
|
<name lang="pt">transição</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<input x="15" y="2" size="8" rotate="true" text="T 00"/>
|
||||||
|
<rect width="26" x="-13" y="-2" antialias="false" height="4" style="line-style:normal;line-weight:thin;filling:black;color:black"/>
|
||||||
|
<terminal x="0" y="5" orientation="s"/>
|
||||||
|
<terminal x="0" y="-5" orientation="n"/>
|
||||||
|
<terminal x="-12" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
25
elements/automatisme/ladder/input/entree.elmt
Normal file
25
elements/automatisme/ladder/input/entree.elmt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="30" height="40" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">دخل</name>
|
||||||
|
<name lang="de">Eingang</name>
|
||||||
|
<name lang="ru">Вход</name>
|
||||||
|
<name lang="pt">Entrada</name>
|
||||||
|
<name lang="en">Input</name>
|
||||||
|
<name lang="it">Ingresso</name>
|
||||||
|
<name lang="fr">Entrée</name>
|
||||||
|
<name lang="pl">Wejście</name>
|
||||||
|
<name lang="es">Entrada</name>
|
||||||
|
<name lang="cs">Vstup</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<input x="-18" y="-10" size="9" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="5" x1="10" y2="-5" x2="10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-5" x1="-10" y2="5" x2="-10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="24"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-24" y2="0" x2="-10"/>
|
||||||
|
<terminal x="24" y="0" orientation="e"/>
|
||||||
|
<terminal x="-24" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
26
elements/automatisme/ladder/input/entree_fn.elmt
Normal file
26
elements/automatisme/ladder/input/entree_fn.elmt
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="30" height="40" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">دخل (حافة نازلة)</name>
|
||||||
|
<name lang="de">Eingang (fallende Flanke)</name>
|
||||||
|
<name lang="ru">Вход (задний фронт)</name>
|
||||||
|
<name lang="pt">Entrada (descendente)</name>
|
||||||
|
<name lang="en">Input (down front)</name>
|
||||||
|
<name lang="it">Ingresso (fronte discendente)</name>
|
||||||
|
<name lang="fr">Entrée (front descendant)</name>
|
||||||
|
<name lang="pl">Wejście (zbocze opadające)</name>
|
||||||
|
<name lang="es">Entrada (descendente)</name>
|
||||||
|
<name lang="cs">Vstup (klesající)</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<text x="-4.25" y="5.25" size="9" text="N"/>
|
||||||
|
<input x="-18" y="-10" size="9" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="5" x1="10" y2="-5" x2="10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-5" x1="-10" y2="5" x2="-10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="24"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-24" y2="0" x2="-10"/>
|
||||||
|
<terminal x="24" y="0" orientation="e"/>
|
||||||
|
<terminal x="-24" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
26
elements/automatisme/ladder/input/entree_fp.elmt
Normal file
26
elements/automatisme/ladder/input/entree_fp.elmt
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="30" height="40" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">دخل (حافة صاعدة)</name>
|
||||||
|
<name lang="de">Eingang (steigende Flanke)</name>
|
||||||
|
<name lang="ru">Вход (передний фронт)</name>
|
||||||
|
<name lang="pt">Entrada (ascendente)</name>
|
||||||
|
<name lang="en">Input (up front)</name>
|
||||||
|
<name lang="it">Ingresso (fronte ascendente)</name>
|
||||||
|
<name lang="fr">Entrée (front montant)</name>
|
||||||
|
<name lang="pl">Wejście (zbocze narastające)</name>
|
||||||
|
<name lang="es">Entrada (ascendente)</name>
|
||||||
|
<name lang="cs">Vstup (stoupající)</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<text x="-3.5" y="5.25" size="9" text="P"/>
|
||||||
|
<input x="-18" y="-10" size="9" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="5" x1="10" y2="-5" x2="10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-5" x1="-10" y2="5" x2="-10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="24"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-24" y2="0" x2="-10"/>
|
||||||
|
<terminal x="24" y="0" orientation="e"/>
|
||||||
|
<terminal x="-24" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
26
elements/automatisme/ladder/input/entree_nf.elmt
Normal file
26
elements/automatisme/ladder/input/entree_nf.elmt
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="30" height="40" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">دخل (منطق سالب)</name>
|
||||||
|
<name lang="de">Eingang (negative Logik)</name>
|
||||||
|
<name lang="ru">Вход (отрицательная логика)</name>
|
||||||
|
<name lang="pt">Entrada (lógica negativa)</name>
|
||||||
|
<name lang="en">Input (negative logic)</name>
|
||||||
|
<name lang="it">Ingresso (logica negativa)</name>
|
||||||
|
<name lang="fr">Entrée (NF)</name>
|
||||||
|
<name lang="pl">Wejscie (negacja logiczna)</name>
|
||||||
|
<name lang="es">Entrada (lógica negativa)</name>
|
||||||
|
<name lang="cs">Vstup (záporná logika)</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="5" x1="-7" y2="-5" x2="7"/>
|
||||||
|
<input x="-18" y="-10" size="9" rotate="true" text="_"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="5" x1="10" y2="-5" x2="10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-5" x1="-10" y2="5" x2="-10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="24"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-24" y2="0" x2="-10"/>
|
||||||
|
<terminal x="24" y="0" orientation="e"/>
|
||||||
|
<terminal x="-24" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
14
elements/automatisme/ladder/input/qet_directory
Normal file
14
elements/automatisme/ladder/input/qet_directory
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<qet-directory>
|
||||||
|
<names>
|
||||||
|
<name lang="de">Eingänge</name>
|
||||||
|
<name lang="ar">مداخل</name>
|
||||||
|
<name lang="ru">Входы</name>
|
||||||
|
<name lang="en">Inputs</name>
|
||||||
|
<name lang="fr">Entrées</name>
|
||||||
|
<name lang="es">Entradas</name>
|
||||||
|
<name lang="pt">Entradas</name>
|
||||||
|
<name lang="cs">Vstupy</name>
|
||||||
|
<name lang="pl">Wejścia</name>
|
||||||
|
<name lang="it">Ingressi</name>
|
||||||
|
</names>
|
||||||
|
</qet-directory>
|
||||||
14
elements/automatisme/ladder/output/qet_directory
Normal file
14
elements/automatisme/ladder/output/qet_directory
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<qet-directory>
|
||||||
|
<names>
|
||||||
|
<name lang="de">Ausgänge</name>
|
||||||
|
<name lang="ru">Выходы</name>
|
||||||
|
<name lang="en">Outputs</name>
|
||||||
|
<name lang="fr">Sorties</name>
|
||||||
|
<name lang="es">Salidas</name>
|
||||||
|
<name lang="pt">Saídas</name>
|
||||||
|
<name lang="cs">Výstupy</name>
|
||||||
|
<name lang="pl">Wyjścia</name>
|
||||||
|
<name lang="it"> Uscite</name>
|
||||||
|
<name lang="ar">مخارج</name>
|
||||||
|
</names>
|
||||||
|
</qet-directory>
|
||||||
24
elements/automatisme/ladder/output/sortie.elmt
Normal file
24
elements/automatisme/ladder/output/sortie.elmt
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="30" height="40" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">خرج</name>
|
||||||
|
<name lang="de">Ausgang</name>
|
||||||
|
<name lang="ru">Выход</name>
|
||||||
|
<name lang="pt">Saída</name>
|
||||||
|
<name lang="en">Output</name>
|
||||||
|
<name lang="it">Uscita</name>
|
||||||
|
<name lang="fr">Sortie</name>
|
||||||
|
<name lang="pl">Wyjście</name>
|
||||||
|
<name lang="es">Salida</name>
|
||||||
|
<name lang="cs">Výstup</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<arc width="4" x="6" y="-5" antialias="true" height="10" style="line-style:normal;line-weight:normal;filling:none;color:black" start="80" angle="-160"/>
|
||||||
|
<input x="-18" y="-10" size="9" rotate="true" text="_"/>
|
||||||
|
<arc width="4" x="-10" y="-5" antialias="true" height="10" style="line-style:normal;line-weight:normal;filling:none;color:black" start="-100" angle="-160"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="24"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-24" y2="0" x2="-10"/>
|
||||||
|
<terminal x="-24" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
25
elements/automatisme/ladder/output/sortie_r.elmt
Normal file
25
elements/automatisme/ladder/output/sortie_r.elmt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="30" height="40" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">خرج (إلغاء)</name>
|
||||||
|
<name lang="de">Ausgang (rücksetzen)</name>
|
||||||
|
<name lang="ru">Выход (сброс)</name>
|
||||||
|
<name lang="pt">Saída (reset)</name>
|
||||||
|
<name lang="en">Output (reset)</name>
|
||||||
|
<name lang="it">Uscita (reset)</name>
|
||||||
|
<name lang="fr">Sortie (reset)</name>
|
||||||
|
<name lang="pl">Wyjście (kasowanie bitu)</name>
|
||||||
|
<name lang="es">Salida (reset)</name>
|
||||||
|
<name lang="cs">Výstup (nastavit znovu)</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<text x="-4.25" y="5.25" size="9" text="R"/>
|
||||||
|
<arc width="4" x="6" y="-5" antialias="true" height="10" style="line-style:normal;line-weight:normal;filling:none;color:black" start="80" angle="-160"/>
|
||||||
|
<input x="-18" y="-10" size="9" rotate="true" text="_"/>
|
||||||
|
<arc width="4" x="-10" y="-5" antialias="true" height="10" style="line-style:normal;line-weight:normal;filling:none;color:black" start="-100" angle="-160"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="24"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-24" y2="0" x2="-10"/>
|
||||||
|
<terminal x="-24" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
25
elements/automatisme/ladder/output/sortie_s.elmt
Normal file
25
elements/automatisme/ladder/output/sortie_s.elmt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<definition width="50" version="0.3" hotspot_x="25" hotspot_y="30" height="40" type="element" orientation="dnnn">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">خرج (تفعيل)</name>
|
||||||
|
<name lang="de">Ausgang (setzen)</name>
|
||||||
|
<name lang="ru">Выход (установка)</name>
|
||||||
|
<name lang="pt">Saída (set)</name>
|
||||||
|
<name lang="en">Output (set)</name>
|
||||||
|
<name lang="it">Uscita (set)</name>
|
||||||
|
<name lang="fr">Sortie (set)</name>
|
||||||
|
<name lang="pl">Wyjście (ustawienie bitu)</name>
|
||||||
|
<name lang="es">Salida (set)</name>
|
||||||
|
<name lang="cs">Výstup (nastavit)</name>
|
||||||
|
</names>
|
||||||
|
<informations>Author: The QElectroTech team
|
||||||
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
|
<description>
|
||||||
|
<arc width="4" x="6" y="-5" antialias="true" height="10" style="line-style:normal;line-weight:normal;filling:none;color:black" start="80" angle="-160"/>
|
||||||
|
<input x="-18" y="-10" size="9" rotate="true" text="_"/>
|
||||||
|
<arc width="4" x="-10" y="-5" antialias="true" height="10" style="line-style:normal;line-weight:normal;filling:none;color:black" start="-100" angle="-160"/>
|
||||||
|
<text x="-4.25" y="5.25" size="9" text="S"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="10" y2="0" x2="24"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-24" y2="0" x2="-10"/>
|
||||||
|
<terminal x="-24" y="0" orientation="w"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
14
elements/automatisme/ladder/qet_directory
Normal file
14
elements/automatisme/ladder/qet_directory
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<qet-directory>
|
||||||
|
<names>
|
||||||
|
<name lang="de">Kontakt Plan (KOP)</name>
|
||||||
|
<name lang="ru">?????????-???????? ?????</name>
|
||||||
|
<name lang="en">Ladder</name>
|
||||||
|
<name lang="ar">المخطط السلمي Ladder</name>
|
||||||
|
<name lang="fr">Ladder</name>
|
||||||
|
<name lang="es">Ladder</name>
|
||||||
|
<name lang="pt">Ladder</name>
|
||||||
|
<name lang="cs">?eb??k</name>
|
||||||
|
<name lang="pl">Schemat drabinkowy (LD)</name>
|
||||||
|
<name lang="it">Ladder</name>
|
||||||
|
</names>
|
||||||
|
</qet-directory>
|
||||||
41
elements/automatisme/plc/crouzet/cd12_carte_entres.elmt
Normal file
41
elements/automatisme/plc/crouzet/cd12_carte_entres.elmt
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
<definition width="400" version="0.3" hotspot_x="0" hotspot_y="0" height="40" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">لوحة مداخل CD12</name>
|
||||||
|
<name lang="de">CD12 Eingangskarte</name>
|
||||||
|
<name lang="en">CD12 input board</name>
|
||||||
|
<name lang="fr">CD12 carte entrées</name>
|
||||||
|
<name lang="pl">Karta wejść CD12</name>
|
||||||
|
<name lang="cs">Karta CD12 vstupy</name>
|
||||||
|
<name lang="pt">Carta de entradas CD12</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<text x="125" y="32" size="8" text="CROUZET CD12 Carte entrées"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="130" y2="0" x2="130"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="190" y2="0" x2="190"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="160" y2="0" x2="160"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="220" y2="0" x2="220"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="70" y2="0" x2="70"/>
|
||||||
|
<text x="126" y="19.3333" size="7" text="I1 I2 I3 I4"/>
|
||||||
|
<rect width="400" x="0" y="0" antialias="false" height="40" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<text x="68" y="16.6667" size="8" text="-"/>
|
||||||
|
<text x="28" y="34.6667" size="8" text="24 VDC"/>
|
||||||
|
<text x="273" y="19.3333" size="7" text=" Ib Ic Id Ie"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="30" y2="0" x2="30"/>
|
||||||
|
<text x="27" y="17.6667" size="8" text="+"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="310" y2="0" x2="310"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="340" y2="0" x2="340"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="280" y2="0" x2="280"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="370" y2="0" x2="370"/>
|
||||||
|
<terminal x="70" y="0" orientation="n"/>
|
||||||
|
<terminal x="30" y="0" orientation="n"/>
|
||||||
|
<terminal x="190" y="0" orientation="n"/>
|
||||||
|
<terminal x="130" y="0" orientation="n"/>
|
||||||
|
<terminal x="160" y="0" orientation="n"/>
|
||||||
|
<terminal x="220" y="0" orientation="n"/>
|
||||||
|
<terminal x="340" y="0" orientation="n"/>
|
||||||
|
<terminal x="280" y="0" orientation="n"/>
|
||||||
|
<terminal x="370" y="0" orientation="n"/>
|
||||||
|
<terminal x="310" y="0" orientation="n"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
48
elements/automatisme/plc/crouzet/cd12_carte_sorties.elmt
Normal file
48
elements/automatisme/plc/crouzet/cd12_carte_sorties.elmt
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<definition width="300" version="0.3" hotspot_x="0" hotspot_y="0" height="40" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">لوحة مخارج CD12</name>
|
||||||
|
<name lang="de">CD12 Ausgangskarte</name>
|
||||||
|
<name lang="en">CD12 output board</name>
|
||||||
|
<name lang="fr">CD12 carte sorties</name>
|
||||||
|
<name lang="pl">Karta wyjść CD12</name>
|
||||||
|
<name lang="cs">Karta CD12 výstupy</name>
|
||||||
|
<name lang="pt">Carta de saídas CD12</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<rect width="298" x="1" y="1" antialias="false" height="38" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<text x="47" y="24.5" size="8" text="O1"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="50" y2="30" x2="59"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="40" y2="40" x2="40"/>
|
||||||
|
<text x="226" y="24.5" size="8" text="O 4"/>
|
||||||
|
<text x="167" y="24.5" size="8" text="O 3"/>
|
||||||
|
<text x="106" y="24.5" size="8" text="O 2"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="110" y2="30" x2="119"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="70" y2="40" x2="70"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="170" y2="30" x2="179"/>
|
||||||
|
<text x="79" y="11.6667" size="8" text="CROUZET CD12 Carte sorties"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="40" y2="30" x2="50"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="60" y2="30" x2="70"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="230" y2="30" x2="239"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="100" y2="40" x2="100"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="220" y2="40" x2="220"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="160" y2="40" x2="160"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="190" y2="40" x2="190"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="130" y2="40" x2="130"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="250" y2="40" x2="250"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="220" y2="30" x2="230"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="160" y2="30" x2="170"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="100" y2="30" x2="110"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="180" y2="30" x2="190"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="120" y2="30" x2="130"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="240" y2="30" x2="250"/>
|
||||||
|
<terminal x="70" y="40" orientation="s"/>
|
||||||
|
<terminal x="100" y="40" orientation="s"/>
|
||||||
|
<terminal x="130" y="40" orientation="s"/>
|
||||||
|
<terminal x="160" y="40" orientation="s"/>
|
||||||
|
<terminal x="40" y="40" orientation="s"/>
|
||||||
|
<terminal x="190" y="40" orientation="s"/>
|
||||||
|
<terminal x="250" y="40" orientation="s"/>
|
||||||
|
<terminal x="220" y="40" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
80
elements/automatisme/plc/crouzet/cd20_carte_sorties.elmt
Normal file
80
elements/automatisme/plc/crouzet/cd20_carte_sorties.elmt
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
<definition width="530" version="0.3" hotspot_x="0" hotspot_y="0" height="40" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">لوحة مخارج CD20</name>
|
||||||
|
<name lang="de">CD20 Ausgangskarte</name>
|
||||||
|
<name lang="en">CD20 output board</name>
|
||||||
|
<name lang="fr">CD20 Carte sorties</name>
|
||||||
|
<name lang="pl">Karta wyjść CD20</name>
|
||||||
|
<name lang="cs">Karta CD20 výstupy</name>
|
||||||
|
<name lang="pt">Carta de saídas CD20</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<text x="466" y="24.5" size="8" text="O 8"/>
|
||||||
|
<text x="406" y="24.6667" size="8" text="O 7"/>
|
||||||
|
<text x="346" y="24.5" size="8" text="O 6"/>
|
||||||
|
<text x="286" y="24.5" size="8" text="O 5"/>
|
||||||
|
<rect width="530" x="0" y="0" antialias="false" height="40" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="470" y2="30" x2="479"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="410" y2="30" x2="419"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="350" y2="30" x2="359"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="290" y2="30" x2="299"/>
|
||||||
|
<text x="47" y="24.5" size="8" text="O1"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="460" y2="40" x2="460"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="400" y2="40" x2="400"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="340" y2="40" x2="340"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="280" y2="40" x2="280"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="50" y2="30" x2="59"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="490" y2="40" x2="490"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="430" y2="40" x2="430"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="370" y2="40" x2="370"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="310" y2="40" x2="310"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="40" y2="40" x2="40"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="460" y2="30" x2="470"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="400" y2="30" x2="410"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="340" y2="30" x2="350"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="280" y2="30" x2="290"/>
|
||||||
|
<text x="226" y="24.5" size="8" text="O 4"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="480" y2="30" x2="490"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="420" y2="30" x2="430"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="360" y2="30" x2="370"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="300" y2="30" x2="310"/>
|
||||||
|
<text x="167" y="24.5" size="8" text="O 3"/>
|
||||||
|
<text x="106" y="24.5" size="8" text="O 2"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="110" y2="30" x2="119"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="70" y2="40" x2="70"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="170" y2="30" x2="179"/>
|
||||||
|
<text x="193" y="12.6667" size="8" text="CROUZET CD20 Carte sorties"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="40" y2="30" x2="50"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="60" y2="30" x2="70"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="230" y2="30" x2="239"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="100" y2="40" x2="100"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="220" y2="40" x2="220"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="160" y2="40" x2="160"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="190" y2="40" x2="190"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="130" y2="40" x2="130"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="250" y2="40" x2="250"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="220" y2="30" x2="230"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="160" y2="30" x2="170"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="100" y2="30" x2="110"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="180" y2="30" x2="190"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="120" y2="30" x2="130"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="240" y2="30" x2="250"/>
|
||||||
|
<terminal x="70" y="40" orientation="s"/>
|
||||||
|
<terminal x="100" y="40" orientation="s"/>
|
||||||
|
<terminal x="130" y="40" orientation="s"/>
|
||||||
|
<terminal x="160" y="40" orientation="s"/>
|
||||||
|
<terminal x="40" y="40" orientation="s"/>
|
||||||
|
<terminal x="190" y="40" orientation="s"/>
|
||||||
|
<terminal x="250" y="40" orientation="s"/>
|
||||||
|
<terminal x="220" y="40" orientation="s"/>
|
||||||
|
<terminal x="310" y="40" orientation="s"/>
|
||||||
|
<terminal x="280" y="40" orientation="s"/>
|
||||||
|
<terminal x="370" y="40" orientation="s"/>
|
||||||
|
<terminal x="340" y="40" orientation="s"/>
|
||||||
|
<terminal x="400" y="40" orientation="s"/>
|
||||||
|
<terminal x="430" y="40" orientation="s"/>
|
||||||
|
<terminal x="490" y="40" orientation="s"/>
|
||||||
|
<terminal x="460" y="40" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
49
elements/automatisme/plc/crouzet/cd20_entrees.elmt
Normal file
49
elements/automatisme/plc/crouzet/cd20_entrees.elmt
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<definition width="560" version="0.3" hotspot_x="0" hotspot_y="0" height="40" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">لوحة مداخل CD20 zoom</name>
|
||||||
|
<name lang="de">CD20 Eingangskarte </name>
|
||||||
|
<name lang="pt">Carta de entradas CD20</name>
|
||||||
|
<name lang="en">CD20 input board</name>
|
||||||
|
<name lang="fr">CD20 carte entrees</name>
|
||||||
|
<name lang="pl">Karta wejść CD20</name>
|
||||||
|
<name lang="cs">Karta CD20 vstupy</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="460" y2="0" x2="460"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="250" y2="0" x2="250"/>
|
||||||
|
<text x="237" y="34.6667" size="8" text="CROUZET CD20 Carte entrées"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="490" y2="0" x2="490"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="280" y2="0" x2="280"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="130" y2="0" x2="130"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="190" y2="0" x2="190"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="160" y2="0" x2="160"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="220" y2="0" x2="220"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="70" y2="0" x2="70"/>
|
||||||
|
<text x="126" y="19.3333" size="7" text="I1 I2 I3 I4 I5 I6"/>
|
||||||
|
<rect width="560" x="0" y="0" antialias="false" height="40" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<text x="68" y="16.6667" size="8" text="-"/>
|
||||||
|
<text x="28" y="34.6667" size="8" text="24 VDC"/>
|
||||||
|
<text x="333" y="19.3333" size="7" text=" IB IC ID IE IF IG"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="30" y2="0" x2="30"/>
|
||||||
|
<text x="27" y="17.6667" size="8" text="+"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="370" y2="0" x2="370"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="400" y2="0" x2="400"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="340" y2="0" x2="340"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="430" y2="0" x2="430"/>
|
||||||
|
<terminal x="70" y="0" orientation="n"/>
|
||||||
|
<terminal x="30" y="0" orientation="n"/>
|
||||||
|
<terminal x="190" y="0" orientation="n"/>
|
||||||
|
<terminal x="130" y="0" orientation="n"/>
|
||||||
|
<terminal x="160" y="0" orientation="n"/>
|
||||||
|
<terminal x="220" y="0" orientation="n"/>
|
||||||
|
<terminal x="400" y="0" orientation="n"/>
|
||||||
|
<terminal x="340" y="0" orientation="n"/>
|
||||||
|
<terminal x="430" y="0" orientation="n"/>
|
||||||
|
<terminal x="370" y="0" orientation="n"/>
|
||||||
|
<terminal x="250" y="0" orientation="n"/>
|
||||||
|
<terminal x="280" y="0" orientation="n"/>
|
||||||
|
<terminal x="460" y="0" orientation="n"/>
|
||||||
|
<terminal x="490" y="0" orientation="n"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
49
elements/automatisme/plc/crouzet/cd20_entrees_zoom_1.elmt
Normal file
49
elements/automatisme/plc/crouzet/cd20_entrees_zoom_1.elmt
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<definition width="800" version="0.3" hotspot_x="0" hotspot_y="0" height="40" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">لوحة مداخل CD20 zoom </name>
|
||||||
|
<name lang="de">CD20 Eingangskarte (zoom)</name>
|
||||||
|
<name lang="en">CD20 zoom input board</name>
|
||||||
|
<name lang="fr">CD20 zoom carte entrées</name>
|
||||||
|
<name lang="pl">Karta wejść CD20 (powiększona)</name>
|
||||||
|
<name lang="cs">Karta CD20 zoom vstupy</name>
|
||||||
|
<name lang="pt">Carta de entradas zoom CD20</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="690" y2="0" x2="690"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="360" y2="0" x2="360"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="740" y2="0" x2="740"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="540" y2="0" x2="540"/>
|
||||||
|
<text x="384" y="34.6667" size="8" text="CROUZET CD20 Carte entrées"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="410" y2="0" x2="410"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="590" y2="0" x2="590"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="490" y2="0" x2="490"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="640" y2="0" x2="640"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="70" y2="0" x2="70"/>
|
||||||
|
<text x="156" y="24.3333" size="7" text="I1 I2 I3 I4 I5 I6"/>
|
||||||
|
<rect width="800" x="0" y="0" antialias="false" height="40" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<text x="68" y="16.6667" size="8" text="-"/>
|
||||||
|
<text x="28" y="34.6667" size="8" text="24 VDC"/>
|
||||||
|
<text x="483" y="24.3333" size="7" text=" IB IC ID IE IF IG"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="30" y2="0" x2="30"/>
|
||||||
|
<text x="27" y="17.6667" size="8" text="+"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="210" y2="0" x2="210"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="260" y2="0" x2="260"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="160" y2="0" x2="160"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="circle" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="310" y2="0" x2="310"/>
|
||||||
|
<terminal x="640" y="0" orientation="n"/>
|
||||||
|
<terminal x="690" y="0" orientation="n"/>
|
||||||
|
<terminal x="160" y="0" orientation="n"/>
|
||||||
|
<terminal x="410" y="0" orientation="n"/>
|
||||||
|
<terminal x="740" y="0" orientation="n"/>
|
||||||
|
<terminal x="70" y="0" orientation="n"/>
|
||||||
|
<terminal x="30" y="0" orientation="n"/>
|
||||||
|
<terminal x="310" y="0" orientation="n"/>
|
||||||
|
<terminal x="260" y="0" orientation="n"/>
|
||||||
|
<terminal x="490" y="0" orientation="n"/>
|
||||||
|
<terminal x="360" y="0" orientation="n"/>
|
||||||
|
<terminal x="210" y="0" orientation="n"/>
|
||||||
|
<terminal x="590" y="0" orientation="n"/>
|
||||||
|
<terminal x="540" y="0" orientation="n"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
80
elements/automatisme/plc/crouzet/cd20_sortie_zoom.elmt
Normal file
80
elements/automatisme/plc/crouzet/cd20_sortie_zoom.elmt
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
<definition width="800" version="0.3" hotspot_x="0" hotspot_y="0" height="40" type="element" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">لوحة مخارج CD20 zoom</name>
|
||||||
|
<name lang="de">CD20 Ausgangskarte (zoom)</name>
|
||||||
|
<name lang="en">CD20 zoom output board</name>
|
||||||
|
<name lang="fr">CD20 zoom carte sorties</name>
|
||||||
|
<name lang="pl">Karta wyjść CD20 (powiększona)</name>
|
||||||
|
<name lang="cs">Karta CD20 zoom výstupy</name>
|
||||||
|
<name lang="pt">Carta de saídas zoom CD20</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<text x="346" y="24.6667" size="8" text="O 4"/>
|
||||||
|
<text x="46" y="24.6667" size="8" text="O 1"/>
|
||||||
|
<text x="646" y="24.6667" size="8" text="O 7"/>
|
||||||
|
<text x="446" y="24.6667" size="8" text="O 5"/>
|
||||||
|
<text x="746" y="24.6667" size="8" text="O 8"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="450" y2="30" x2="459"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="350" y2="30" x2="359"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="650" y2="30" x2="659"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="750" y2="30" x2="759"/>
|
||||||
|
<text x="545" y="24.6667" size="8" text="O 6"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="50" y2="30" x2="59"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="640" y2="40" x2="640"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="40" y2="40" x2="40"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="740" y2="40" x2="740"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="340" y2="40" x2="340"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="440" y2="40" x2="440"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="670" y2="40" x2="670"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="370" y2="40" x2="370"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="470" y2="40" x2="470"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="70" y2="40" x2="70"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="770" y2="40" x2="770"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="740" y2="30" x2="750"/>
|
||||||
|
<rect width="800" x="0" y="0" antialias="false" height="40" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="640" y2="30" x2="650"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="40" y2="30" x2="50"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="340" y2="30" x2="350"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="440" y2="30" x2="450"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="660" y2="30" x2="670"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="60" y2="30" x2="70"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="760" y2="30" x2="770"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="360" y2="30" x2="370"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="460" y2="30" x2="470"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="550" y2="30" x2="559"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="540" y2="40" x2="540"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="570" y2="40" x2="570"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="540" y2="30" x2="550"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="560" y2="30" x2="570"/>
|
||||||
|
<text x="247" y="24.5" size="8" text="O 3"/>
|
||||||
|
<text x="146" y="24.5" size="8" text="O 2"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="150" y2="30" x2="159"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="33" x1="250" y2="30" x2="259"/>
|
||||||
|
<text x="335" y="11.6667" size="8" text="CROUZET CD20 Carte sorties"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="140" y2="40" x2="140"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="240" y2="40" x2="240"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="270" y2="40" x2="270"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="170" y2="40" x2="170"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="240" y2="30" x2="250"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="140" y2="30" x2="150"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="260" y2="30" x2="270"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="30" x1="160" y2="30" x2="170"/>
|
||||||
|
<terminal x="570" y="40" orientation="s"/>
|
||||||
|
<terminal x="40" y="40" orientation="s"/>
|
||||||
|
<terminal x="770" y="40" orientation="s"/>
|
||||||
|
<terminal x="140" y="40" orientation="s"/>
|
||||||
|
<terminal x="170" y="40" orientation="s"/>
|
||||||
|
<terminal x="640" y="40" orientation="s"/>
|
||||||
|
<terminal x="240" y="40" orientation="s"/>
|
||||||
|
<terminal x="540" y="40" orientation="s"/>
|
||||||
|
<terminal x="440" y="40" orientation="s"/>
|
||||||
|
<terminal x="370" y="40" orientation="s"/>
|
||||||
|
<terminal x="740" y="40" orientation="s"/>
|
||||||
|
<terminal x="270" y="40" orientation="s"/>
|
||||||
|
<terminal x="340" y="40" orientation="s"/>
|
||||||
|
<terminal x="470" y="40" orientation="s"/>
|
||||||
|
<terminal x="70" y="40" orientation="s"/>
|
||||||
|
<terminal x="670" y="40" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
11
elements/automatisme/plc/crouzet/qet_directory
Normal file
11
elements/automatisme/plc/crouzet/qet_directory
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<qet-directory>
|
||||||
|
<names>
|
||||||
|
<name lang="de">Crouzet</name>
|
||||||
|
<name lang="ar">Crouzet</name>
|
||||||
|
<name lang="en">Crouzet</name>
|
||||||
|
<name lang="fr">Crouzet</name>
|
||||||
|
<name lang="pl">Crouzet</name>
|
||||||
|
<name lang="cs">Crouzet</name>
|
||||||
|
<name lang="pt">Crouzet</name>
|
||||||
|
</names>
|
||||||
|
</qet-directory>
|
||||||
115
elements/automatisme/plc/moeller/easy_410.elmt
Normal file
115
elements/automatisme/plc/moeller/easy_410.elmt
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
<definition width="320" version="0.3" hotspot_x="10" hotspot_y="230" height="230" type="element" ic="true" orientation="dyyy">
|
||||||
|
<names>
|
||||||
|
<name lang="ar">Easy 410</name>
|
||||||
|
<name lang="en">Easy 410</name>
|
||||||
|
<name lang="fr">Easy 410</name>
|
||||||
|
<name lang="pl">Easy 410</name>
|
||||||
|
<name lang="cs">Easy 410</name>
|
||||||
|
<name lang="pt">Easy 410</name>
|
||||||
|
</names>
|
||||||
|
<informations></informations>
|
||||||
|
<description>
|
||||||
|
<rect width="300" x="0" y="-221" antialias="false" height="211" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<rect width="300" x="0" y="-199" antialias="false" height="169" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<rect width="300" x="0" y="-181" antialias="false" height="130" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<text x="245" y="-162" size="6" text="POWER/RUN"/>
|
||||||
|
<circle x="274.394" y="-160.606" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="7.2111"/>
|
||||||
|
<ellipse width="8" x="62" y="-178" antialias="true" height="17" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
|
<polygon x4="66" y5="-175.25" x5="66" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" closed="false" y1="-175.25" x1="66" y2="-172.25" x2="65" y3="-172.25" x3="67" y4="-175.25"/>
|
||||||
|
<text x="65" y="-166" size="4" text="M"/>
|
||||||
|
<text x="236" y="-36" size="6" text="S4"/>
|
||||||
|
<text x="162" y="-36" size="6" text="S3"/>
|
||||||
|
<text x="256" y="-189" size="6" text="0"/>
|
||||||
|
<text x="237" y="-189" size="6" text="0"/>
|
||||||
|
<text x="40" y="-35" size="6" text="S1"/>
|
||||||
|
<text x="217" y="-189" size="6" text="R6"/>
|
||||||
|
<text x="105" y="-35" size="6" text="S2"/>
|
||||||
|
<text x="197" y="-189" size="6" text="R5"/>
|
||||||
|
<text x="273" y="-189" size="6" text="+24"/>
|
||||||
|
<text x="176" y="-189" size="6" text="R4"/>
|
||||||
|
<text x="45" y="-187" size="6" text="E-"/>
|
||||||
|
<text x="155" y="-189" size="6" text="R3"/>
|
||||||
|
<text x="134" y="-189" size="6" text="R2"/>
|
||||||
|
<text x="118" y="-189" size="6" text="R1"/>
|
||||||
|
<text x="29" y="-161" size="7" text="oeller"/>
|
||||||
|
<text x="20" y="-163" size="9" text="M"/>
|
||||||
|
<input x="17" y="-62" size="9" rotate="true" text="EASY 410 DC-RE"/>
|
||||||
|
<circle x="245" y="-25" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="175" y="-25" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="115" y="-25" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="55" y="-25" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="255" y="-215" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="175" y="-215" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="275" y="-215" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="225" y="-25" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="155" y="-25" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="95" y="-25" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="35" y="-25" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="235" y="-215" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="155" y="-215" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-205" x1="277" y2="-212" x2="284"/>
|
||||||
|
<text x="26" y="-187" size="6" text="E+"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-16" x1="247" y2="-23" x2="254"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-16" x1="177" y2="-23" x2="184"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-16" x1="117" y2="-23" x2="124"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-16" x1="57" y2="-23" x2="64"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-206" x1="257" y2="-213" x2="264"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-206" x1="177" y2="-213" x2="184"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-207" x1="276" y2="-214" x2="283"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-16" x1="227" y2="-23" x2="234"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-16" x1="157" y2="-23" x2="164"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-16" x1="97" y2="-23" x2="104"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-16" x1="37" y2="-23" x2="44"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-206" x1="237" y2="-213" x2="244"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-206" x1="157" y2="-213" x2="164"/>
|
||||||
|
<circle x="45" y="-215" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-17" x1="246" y2="-24" x2="253"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-17" x1="176" y2="-24" x2="183"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-17" x1="116" y2="-24" x2="123"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-17" x1="56" y2="-24" x2="63"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-207" x1="256" y2="-214" x2="263"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-207" x1="176" y2="-214" x2="183"/>
|
||||||
|
<circle x="25" y="-215" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-17" x1="226" y2="-24" x2="233"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-17" x1="156" y2="-24" x2="163"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-17" x1="96" y2="-24" x2="103"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-17" x1="36" y2="-24" x2="43"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-207" x1="236" y2="-214" x2="243"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-207" x1="156" y2="-214" x2="163"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-206" x1="47" y2="-213" x2="54"/>
|
||||||
|
<circle x="215" y="-215" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="135" y="-215" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-206" x1="27" y2="-213" x2="34"/>
|
||||||
|
<circle x="195" y="-215" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<circle x="115" y="-215" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" diameter="10"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-207" x1="46" y2="-214" x2="53"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-206" x1="217" y2="-213" x2="224"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-206" x1="137" y2="-213" x2="144"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-207" x1="26" y2="-214" x2="33"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-206" x1="197" y2="-213" x2="204"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-206" x1="117" y2="-213" x2="124"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-207" x1="216" y2="-214" x2="223"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-207" x1="136" y2="-214" x2="143"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-207" x1="196" y2="-214" x2="203"/>
|
||||||
|
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-207" x1="116" y2="-214" x2="123"/>
|
||||||
|
<terminal x="30" y="-220" orientation="n"/>
|
||||||
|
<terminal x="50" y="-220" orientation="n"/>
|
||||||
|
<terminal x="280" y="-220" orientation="n"/>
|
||||||
|
<terminal x="120" y="-220" orientation="n"/>
|
||||||
|
<terminal x="140" y="-220" orientation="n"/>
|
||||||
|
<terminal x="160" y="-220" orientation="n"/>
|
||||||
|
<terminal x="180" y="-220" orientation="n"/>
|
||||||
|
<terminal x="200" y="-220" orientation="n"/>
|
||||||
|
<terminal x="220" y="-220" orientation="n"/>
|
||||||
|
<terminal x="240" y="-220" orientation="n"/>
|
||||||
|
<terminal x="260" y="-220" orientation="n"/>
|
||||||
|
<terminal x="250" y="-11" orientation="s"/>
|
||||||
|
<terminal x="230" y="-11" orientation="s"/>
|
||||||
|
<terminal x="180" y="-11" orientation="s"/>
|
||||||
|
<terminal x="160" y="-11" orientation="s"/>
|
||||||
|
<terminal x="120" y="-11" orientation="s"/>
|
||||||
|
<terminal x="100" y="-11" orientation="s"/>
|
||||||
|
<terminal x="60" y="-11" orientation="s"/>
|
||||||
|
<terminal x="40" y="-11" orientation="s"/>
|
||||||
|
</description>
|
||||||
|
</definition>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user