From 20dbe3ad222715595c136ddaa643f286f06aa109 Mon Sep 17 00:00:00 2001 From: juliagoda Date: Wed, 5 Dec 2018 22:25:11 +0100 Subject: [PATCH] compliance with master --- .gitignore | 2 + AntiMicro Future Developments.mm | 0 BuildOptions.md | 0 CMakeLists.txt | 177 +- Changelog | 0 LICENSE | 0 ProfileTips.md | 0 README.md | 2 +- Resources.txt | 0 cmake_uninstall.cmake.in | 0 com.github.juliagoda.antimicro.json | 36 + other/40-uinput.rules | 0 other/CMakeLists.txt | 2 +- other/antimicro.1 | 0 other/appdata/CMakeLists.txt | 4 +- other/appdata/PO_files/en.po | 0 other/appdata/appdata.its | 0 ....github.juliagoda.antimicro.appdata.xml.in | 80 + other/appdata/screenshots/about_window.png | Bin 0 -> 69497 bytes .../screenshots/application_trayicon.png | Bin 0 -> 65231 bytes .../controller_callibration_dark_theme.png | Bin 0 -> 99622 bytes .../controller_configure_dark_theme.png | Bin .../controller_main_window_dark_theme_1.png | Bin 0 -> 159066 bytes .../controller_main_window_dark_theme_2.png | Bin 0 -> 139418 bytes .../controller_mapping_dark_theme.png | Bin 158285 -> 190674 bytes other/com.github.juliagoda.antimicro.desktop | 18 + other/com.github.juliagoda.antimicro.xml | 7 + other/scripts/build-sdl-lib.bat | 0 other/spec/antimicro-git.spec | 0 repo/.lock | 0 repo/config | 3 + ...23e10749ce6dd2a8f23361112e51b4f2b9ea.filez | Bin 0 -> 1079 bytes ...a50081ba5dfbb99ae0657ee6644054e38f.dirtree | Bin 0 -> 74 bytes ...09fa6e614e1f9830106cd1103de1d14d4c49.filez | Bin 0 -> 1830 bytes ...323d18924dcc6a687e9638a39d777af0cc.dirtree | Bin 0 -> 226 bytes ...9c9fa47ad08d220609138b52576675969a3e.filez | Bin 0 -> 738 bytes ...cb34a2b22c273c7b5196aa72a0339c639ff8.filez | Bin 0 -> 790 bytes ...b2e52fdbf23945dc5d7edf9f3997661ce6c7.filez | Bin 0 -> 1108 bytes ...8828c43129c6ce03152cfa589fc71b0432b1.filez | Bin 0 -> 520 bytes ...dbc40f32b54ca195a0fcee11e43b33f2bc52.filez | Bin 0 -> 1343 bytes ...8c4deb625c1d9e94d0db9bdfb77e7623f192.filez | Bin 0 -> 716 bytes ...e60ab72f423d12780f58808ea200267eb210.filez | Bin 0 -> 735 bytes ...781f4af35d80684db3dec44c0760d563e8a3.filez | Bin 0 -> 1081132 bytes ...3a18a13cb9b6f132f626543b2a4657a732ac.filez | Bin 0 -> 1022 bytes ...93d8f544da214e61e95b9c94c975970fda.dirtree | Bin 0 -> 73 bytes ...69d4631d829844fcfd63b1ed663fa956625f.filez | Bin 0 -> 798 bytes ...21e89445008e9c9cb2fa3f30b696d3ab1aca.filez | Bin 0 -> 939 bytes ...ab7ba4ed82ff722ed3d2bff0e323c2cd2837.filez | Bin 0 -> 712 bytes ...1d8f84b5b783f182bce7ee603fde61145b92.filez | Bin 0 -> 1066 bytes ...3bd82a5a6b98729d1cab121d0e2ff03981.dirtree | Bin 0 -> 81 bytes ...519dbd6d9dae28643594aa7886d11f055b8b.filez | Bin 0 -> 931 bytes ...9d909f72e31ee595a57e7103405e71f53d80.filez | Bin 0 -> 731 bytes ...b8b29a86d22652f476ba27bcec789559f664.filez | Bin 0 -> 927 bytes ...686c008deadab04555cf1cdb17578d029f6.commit | Bin 0 -> 1140 bytes ...830496d13f31e035f14007d246573baa3b24.filez | Bin 0 -> 31535 bytes ...602347f637ab314e969a4a776264e6820545.filez | Bin 0 -> 748 bytes ...2bfc9499bdd9eae4f8798809e41ce0a76ce9.filez | Bin 0 -> 1335 bytes ...7ed138a2013d9f4327a187a0e1830a311f71.filez | Bin 0 -> 778 bytes ...cc4459311063358cecc3f567474635474dc3.filez | Bin 0 -> 814 bytes ...457530b2358792f5a40dfe4ffd8d43187c9e.filez | Bin 0 -> 743 bytes ...de4051cee6d03005f49225059c6d35df8f00.filez | Bin 0 -> 793 bytes ...de4e4b79885f036efa6bb18d2296bb757512.filez | Bin 0 -> 788 bytes ...0e3860c12a8c6f58d9ab57c8f194027444.dirtree | Bin 0 -> 70 bytes ...e725f16977a30cf0728832f11717c4f76b36.filez | Bin 0 -> 2250 bytes ...512ba27646631d2638dcdf0b3d4d3132bb31.filez | Bin 0 -> 1382 bytes ...15ed5037705bbe2a4af52d76d8d88959ef41.filez | Bin 0 -> 1060 bytes ...b078b8631c5a0d9a5d0ca2bdbcc13e3f1291.filez | Bin 0 -> 1001 bytes ...02542342c382c9830046f3815b64828a126d.filez | Bin 0 -> 1277 bytes ...be14a8e547b336c00b5b0f49a5d342369205.filez | Bin 0 -> 1039 bytes ...2c5e04b5c88550b767efba71263b233dbe.dirtree | Bin 0 -> 70 bytes ...d6538e9e1415ee01c973eaa88718d0cf8c35.filez | Bin 0 -> 5747 bytes ...bb7d80929fb2c4fb0ce27a96ecede9199881.filez | Bin 0 -> 755 bytes ...741b647388021cc098d583c52035d368d826.filez | Bin 0 -> 230 bytes ...6725be100736696ff8ef6b54d7ffa25e3c04.filez | Bin 0 -> 811 bytes ...d0f9905fc26ec555b9052b0525a23391f066.filez | Bin 0 -> 1666 bytes ...706c11c8ec6cf19556b31d27b994903f3682.filez | Bin 0 -> 1347 bytes ...ce40781768d300f61168e451405f83f67d.dirtree | Bin 0 -> 51 bytes ...eeb675faa412d5ec73f62988eb0b6c5488.dirmeta | Bin 0 -> 12 bytes ...c84d3ddbeead2a8b98b1a4aa272a4abec3.dirtree | Bin 0 -> 665 bytes ...ed8abac2341e8f3705719a01a9d13af78ae5.filez | Bin 0 -> 125 bytes ...3032a3f1037cdc7617a5c9ef89142a2768f6.filez | Bin 0 -> 1083 bytes ...daea2e39055a3ea1336934ce456df510e779.filez | Bin 0 -> 950 bytes ...4897ad8c8f9587874b32ca1a36632b9a490a.filez | Bin 0 -> 717 bytes ...a12a7082f3eb7c71ff11168834ec9b5b6371.filez | Bin 0 -> 802 bytes ...48ffe4b45015556be882cb0608adc0cecca0.filez | Bin 0 -> 907 bytes ...4a6e3e9b5280b25625e695b05f0b3123f330.filez | Bin 0 -> 726 bytes ...365800a0e9d0a2e587599c8818567bcffe.dirtree | Bin 0 -> 55 bytes ...705dcd542eae1d9c1f3f203287cd953f116b.filez | Bin 0 -> 7825 bytes ...cd1cbf920150be08839f8073910c126a0ae9.filez | Bin 0 -> 7899 bytes ...e721ecc42ed3421889fb0d8d2fbb746bc757.filez | Bin 0 -> 754 bytes ...505a72e2e73ce170fb84557f1b9ddb1599ff.filez | Bin 0 -> 18621 bytes ...ea4d523cee89ca4050124d52b3da2621b7.dirtree | Bin 0 -> 191 bytes ...249c88a70f141a476a2cc3a8d3f261d80cb7.filez | Bin 0 -> 998 bytes ...cdcf36631b896ebafc148bb2bbf0d063145e.filez | Bin 0 -> 813 bytes ...9a98747e8b7d41a96bf062d8cdefff0bd6f2.filez | Bin 0 -> 971 bytes ...d5e696c0f49ee9e0613168c985a443c7d7.dirtree | Bin 0 -> 117 bytes ...645038a2deeeab593857c8a31f943a5a1e21.filez | Bin 0 -> 1961 bytes ...ab9dfe3c8d4dc50edab44fab0dd5939dbd62.filez | Bin 0 -> 119627 bytes ...ffce09a8c427369817fac9c76d1aee6dd0db.filez | Bin 0 -> 7487 bytes ...c3675c3ebaf7fa3c3305e5643954d8999237.filez | Bin 0 -> 1394 bytes ...ce4aa8782d1e89c6a8441dd98141d1ae142.commit | Bin 0 -> 660 bytes ...1998909e2f828cc990a2b0e67e0d70c8929a.filez | Bin 0 -> 387 bytes ...2c78901d3fb33738768511a30617afa01d.dirtree | Bin 0 -> 1 bytes ...4e85074c29889641a535ac589154462882c.commit | Bin 0 -> 692 bytes ...a743fbab793133d3aff6c45096a3de5fea0e.filez | Bin 0 -> 25793 bytes ...620dafab82056b3e528b00aeef7ada4888.dirtree | Bin 0 -> 70 bytes ...107ea44af465c50bc7c53d27cd6c776f8860.filez | Bin 0 -> 922 bytes ...9510571bb82c2bfbf236a18876fe06242ebe.filez | Bin 0 -> 780 bytes ...4c84c37f73202929e6d6489c77247b346e4e.filez | Bin 0 -> 838 bytes ...7c1b83260627aaeef33459886ce1f7b0446.commit | Bin 0 -> 1172 bytes ...2892676c52e4d377a45b5c147d5e6dae88.dirtree | Bin 0 -> 344 bytes ...baf926d50cdfe44a20312e02f2cb4c0f39c6.filez | Bin 0 -> 679 bytes ...ebc5561e072f4f9238ab011c8915d14f6aec.filez | Bin 0 -> 753 bytes ...05e6f5eb7934a017e21595b4dacf151db96f.filez | Bin 0 -> 8776 bytes ...a36fa607401682692f23ce8c8887c38ecfbd.filez | Bin 0 -> 847 bytes ...423fd9276fcc012db637cb9874a940b9edf1.filez | Bin 0 -> 816 bytes ...ecd01475cdab0d61630f4fc5c246f9215d8e.filez | Bin 0 -> 67253 bytes ...a088cb1925b85ca4c6cc8287652f985dfd11.filez | Bin 0 -> 6435 bytes ...ad223772e62444a81fa3c40a29e81f60ad57.filez | Bin 0 -> 1440 bytes ...bedfd17fcc83405de5e64ca0a3142f5c31.dirtree | Bin 0 -> 6085 bytes ...43faa116fe2cde93f2c6cebb799252651e5a.filez | Bin 0 -> 1001 bytes ...4010d0a8d6ce46c0835ca53d9ebb1524ad.dirtree | Bin 0 -> 70 bytes ...6b865b1dc03542f22575248575f3d64e5b37.filez | Bin 0 -> 842 bytes ...09c659bd71f3f0781ea1f29e70568ffa255b.filez | Bin 0 -> 13307 bytes ...3b28c8ddde5c1bbeebced93e4e12d83a45.dirtree | Bin 0 -> 76 bytes ...99143a5096bf21dfd982c582afbdc2ef36.dirtree | Bin 0 -> 45 bytes ...12220d6cffdc2191d8ee8970fbb8c3912ba1.filez | Bin 0 -> 788 bytes ...53094d0c827b5bb90b196195ff261e498c.dirtree | Bin 0 -> 686 bytes ...1e669e4d8634d071135305a7bd00a1f811f5.filez | Bin 0 -> 992 bytes ...6c8932473b6160704624e0193370fd3d51ad.filez | Bin 0 -> 70444 bytes ...42689ed93b7315766a290641f45d363a25cd.filez | Bin 0 -> 805 bytes ...4350dc2e2752bb118d0757a7931b6748706a.filez | Bin 0 -> 1435 bytes ...36b7913208a47759a1c3a12c23b7601b41.dirtree | Bin 0 -> 74 bytes ...87b81c3c60d1464e70c158285faaedec4bbe.filez | Bin 0 -> 150 bytes ...7cf5013e6dfe9c0e14488d8033e6fe2d075d.filez | Bin 0 -> 787 bytes ...065dc851e47e7bcf93487883eb58837b6b83.filez | Bin 0 -> 744 bytes ...d16d45eaebf1b211d10c8b1ff190e31a41a9.filez | Bin 0 -> 23491 bytes ...280b3cf581691f1bb3638c4be5d03bc4fb.dirtree | Bin 0 -> 78 bytes ...bb4a38d707f66f065fe9e45c64472f949958.filez | Bin 0 -> 799 bytes ...eaeb6184edc374788796bef17f973cd2d453.filez | Bin 0 -> 870 bytes ...86faccb5595668add3bd3dafa4a9f25490bd.filez | Bin 0 -> 1894 bytes ...0008ad26d6f694c8e5dcb5cca8dd99ee7c5d.filez | Bin 0 -> 588 bytes ...008bfc0b8a2eb18a3a1f2cf471e5a7c15e.dirtree | Bin 0 -> 344 bytes ...5f83764d553b6774d8d319dc84e40ea7af24.filez | Bin 0 -> 12276 bytes ...a14d895b2103b081a1a8ecf3ba1480f3e95a.filez | Bin 0 -> 881 bytes ...53f5605f6466e540a5396d92a43f654c6b.dirtree | Bin 0 -> 70 bytes ...f01881b906cface4cb2c687c49d64bd21e25.filez | Bin 0 -> 1186 bytes ...085ce59c44795cbbfd8206f6b5d0c445d243.filez | Bin 0 -> 1186 bytes ...b0b383d7be046306d188b1d8f14139479f54.filez | Bin 0 -> 223 bytes ...c1fa9d634f49c041edf23e46160b26c0dc.dirtree | Bin 0 -> 73 bytes ...f1b8dfae18588bcdcde1e6a72bfbdf897dea.filez | Bin 0 -> 866 bytes ...a044fae2cb83c573ffb15dca4a687b57f5fc.filez | Bin 0 -> 801 bytes ...d343349d03c9e5d2aa86ab0b9b1b476161ed.filez | Bin 0 -> 774 bytes ...14c6508fbdddf481bf76ccfb9c68c3d0d574.filez | Bin 0 -> 842 bytes ...d562bda6a54e55b66a136b93d2421ff53e35.filez | Bin 0 -> 821 bytes ...105bcd327a7549ca7d8ccdbdff3eaf16f797.filez | Bin 0 -> 792 bytes ...411ec20eef829e35078fbf409fa90a07cd.dirtree | Bin 0 -> 77 bytes ...c9a99df5b3f48beba863c28ba4589842d6.dirtree | Bin 0 -> 73 bytes ...b6563b129269fe7c17349b20c0b55226df4d.filez | Bin 0 -> 771 bytes ...bf34222b4736c10f9e2a139252267192f5.dirtree | Bin 0 -> 78 bytes ...3a8c5923894ec0d62125900776702ca9dd72.filez | Bin 0 -> 976 bytes ...11b41b0d5f23078023cff4e17d4e9b23d721.filez | Bin 0 -> 741 bytes ...e47ee0ddb89161061fbfe4614f57d15733.dirtree | Bin 0 -> 122 bytes ...b0ad8e622cb746dfc8e97d22c53057a7fb3e.filez | Bin 0 -> 1333 bytes ...428f7203581c02a12267138b80bd5e95a417.filez | Bin 0 -> 24530 bytes ...4bb757d2c4750b7ae239c6d96ec5a07705.dirtree | Bin 0 -> 70 bytes ...271075d996ad7986ed9a23fcc2c952514004.filez | Bin 0 -> 745 bytes ...41d606702b3df9e0bdf06553959e74a3181f.filez | Bin 0 -> 924 bytes ...4b55857447884ad90d5086961ee80a76fbbc.filez | Bin 0 -> 957 bytes ...d7a62a7aab4fce5810042d6ff0338a6c86cc.filez | Bin 0 -> 19909 bytes ...a55360e0ea9767f9567dd2a051b16b8058fe.filez | Bin 0 -> 731 bytes ...7d88fc108fddaf85fd662f78c42936af6c44.filez | Bin 0 -> 875 bytes ...826247c8fcc165a191a38965c3a497a271.dirtree | Bin 0 -> 372 bytes ...489d9cb79a537198ffcc0bb22baa261f0d6c.filez | Bin 0 -> 857 bytes ...35d672aae0070e32762dd6fce6f244bd4adf.filez | Bin 0 -> 847 bytes ...bafbba396bf6651481d7146af6e8ec4914.dirtree | Bin 0 -> 122 bytes ...ed914a4bc2e138561755223667b05c987189.filez | Bin 0 -> 805 bytes ...72b88b4640e3bc2ae4e7905ea14e4e3472cf.filez | Bin 0 -> 3564 bytes ...c8ef86bc5732608dc3d96e64261f1cda45.dirtree | Bin 0 -> 73 bytes ...35684b944f91ee55c965f296d9f635c744f2.filez | Bin 0 -> 973 bytes ...99087159e19611d2cb229e79a4549c5691.dirtree | Bin 0 -> 73 bytes ...d25c47531d849bb6a0ebda3f6e921c27c44a.filez | Bin 0 -> 1192 bytes ...ff34edb263f5b0054724c97940e785f6e8e8.filez | Bin 0 -> 788 bytes ...037aa8915030d6437bb29f94e2161c49723.commit | Bin 0 -> 1140 bytes ...0d0eb5db8fdc8d94fb512facbf632c6c90a5.filez | Bin 0 -> 693 bytes ...08b99db3768f69598cdcbae752ccefd2f3b0.filez | Bin 0 -> 784 bytes ...4eb0557e5515f7f12c838b876246a537bdf0.filez | Bin 0 -> 28373 bytes ...5437024f0e3a7f235ee40262709d6a5c206a.filez | Bin 0 -> 1463 bytes ...e591330854a3fa11b10259897e829b8667db.filez | Bin 0 -> 2198 bytes ...d21bf94adae1ee0bd419dcd58e60b5bc826e.filez | Bin 0 -> 787 bytes ...9443a3f5be57b74b03ad5b18b0083ae92823.filez | Bin 0 -> 1015 bytes ...5130b25e365e56b18bcf7dc5ca0287408bfc.filez | Bin 0 -> 896 bytes ...65ba4291bbc9b49a961320aa5b765b53e3c5.filez | Bin 0 -> 787 bytes ...d11f3f6b6fe89e3c87d9820a752054edab.dirtree | Bin 0 -> 73 bytes ...7f6d7aab8d51af82478b0196bff1dec963.dirtree | Bin 0 -> 70 bytes ...2bf4eed2e27121f431d66c70f346bf4d99f4.filez | Bin 0 -> 1364 bytes ...6bff70e50ccd2c2d6835aca7bf0760716540.filez | Bin 0 -> 1255 bytes ...651cf58e962117102b7a633d0ce4906a18.dirtree | Bin 0 -> 217 bytes ...8bd3ec2a3ab578be7f87a8ce25c26d1f012e.filez | Bin 0 -> 808 bytes ...e78d75c72c2c269ac9cb17fb7234a0d661.dirtree | Bin 0 -> 73 bytes ...0cbc8bc8fe98c91d4d3a858d41e45b5c359d.filez | Bin 0 -> 960 bytes ...157256f8d0e4ffa341d75422d6f09d5724.dirtree | Bin 0 -> 74 bytes ...3d33d810a84616dcd5d35e06df3c958d62.dirtree | Bin 0 -> 50 bytes ...12747e112939502a785118603c5ecb3a88.dirtree | Bin 0 -> 191 bytes ...65f02d4eda733f268b2add48ae283d6fa3ae.filez | Bin 0 -> 791 bytes ...7d7d4da70681edb4e0bfaac299b6240ab2.dirtree | Bin 0 -> 146 bytes ...afa9293556b99df98b924f727ff4466124f0.filez | Bin 0 -> 666 bytes ...612d97ab4427bb06b99095a33c727ec5ca9f.filez | Bin 0 -> 1057 bytes ...2f2b921c0ee6589813021b1150991ef85158.filez | Bin 0 -> 1407 bytes ...d5ebcf2dcfd7b09b05881070989dee715dab.filez | Bin 0 -> 843 bytes ...fc3c6dff7346489bfc15ad536694468c7077.filez | Bin 0 -> 2066 bytes ...59211f34dcf66b8605d1f41fc105976e13c5.filez | Bin 0 -> 31073 bytes ...b506ac557aff80158da7e25ad5ac62946b.dirtree | Bin 0 -> 76 bytes ...da968a4bc21a21005195a1743845d27e527e.filez | Bin 0 -> 794 bytes ...88ec743f1aa22091e8217dc2c46448a0c4cf.filez | Bin 0 -> 2532 bytes ...6c2f5e1ee2acdcaaa382823a64c3d6bccade.filez | Bin 0 -> 900 bytes ...e526f94ffa680e9ce9613f52df5936c7b1e0.filez | Bin 0 -> 4448 bytes .../x86_64/master | 1 + .../x86_64/stable | 1 + .../x86_64/master | 1 + repo/summary | Bin 0 -> 2155 bytes share/antimicro/blank.txt | 0 share/antimicro/translations/CMakeLists.txt | 6 +- share/antimicro/translations/antimicro.ts | 2712 +++++++------ share/antimicro/translations/antimicro_br.ts | 2712 +++++++------ share/antimicro/translations/antimicro_de.ts | 2718 +++++++------ share/antimicro/translations/antimicro_en.ts | 2732 +++++++------ share/antimicro/translations/antimicro_es.ts | 2710 +++++++------ share/antimicro/translations/antimicro_fr.ts | 2712 +++++++------ share/antimicro/translations/antimicro_it.ts | 2710 +++++++------ share/antimicro/translations/antimicro_ja.ts | 2716 +++++++------ share/antimicro/translations/antimicro_pl.ts | 2720 +++++++------ share/antimicro/translations/antimicro_ru.ts | 2716 +++++++------ share/antimicro/translations/antimicro_sr.ts | 2714 +++++++------ share/antimicro/translations/antimicro_uk.ts | 2714 +++++++------ .../antimicro/translations/antimicro_zh_CN.ts | 2710 +++++++------ share/blank.txt | 0 src/aboutdialog.cpp | 11 +- src/aboutdialog.h | 0 src/aboutdialog.ui | 10 +- src/addeditautoprofiledialog.cpp | 229 +- src/addeditautoprofiledialog.h | 0 src/addeditautoprofiledialog.ui | 8 +- src/advancebuttondialog.cpp | 1187 +++--- src/advancebuttondialog.h | 17 +- src/advancebuttondialog.ui | 0 src/advancestickassignmentdialog.cpp | 643 ++- src/advancestickassignmentdialog.h | 13 +- src/advancestickassignmentdialog.ui | 0 src/antimicro.exe.manifest | 0 src/antimicro.exe.uiaccess.manifest | 0 src/antimicro.rc | 2 +- src/antimicrosettings.cpp | 15 +- src/antimicrosettings.h | 5 - src/antkeymapper.cpp | 0 src/antkeymapper.h | 0 src/applaunchhelper.cpp | 31 +- src/applaunchhelper.h | 0 src/autoprofileinfo.cpp | 1 + src/autoprofileinfo.h | 0 src/autoprofilewatcher.cpp | 133 +- src/autoprofilewatcher.h | 9 +- src/axiseditdialog.cpp | 223 +- src/axiseditdialog.h | 2 +- src/axiseditdialog.ui | 0 src/axisvaluebox.cpp | 154 +- src/axisvaluebox.h | 8 +- src/buttoneditdialog.cpp | 319 +- src/buttoneditdialog.h | 9 +- src/buttoneditdialog.ui | 0 src/calibration.cpp | 350 +- src/calibration.h | 9 +- src/calibration.ui | 7 - src/capturedwindowinfodialog.cpp | 20 +- src/capturedwindowinfodialog.h | 0 src/capturedwindowinfodialog.ui | 0 src/commandlineutility.cpp | 424 +- src/commandlineutility.h | 6 + src/common.cpp | 29 +- src/common.h | 0 src/config.h.in | 0 src/dpadcontextmenu.cpp | 350 +- src/dpadcontextmenu.h | 3 + src/dpadeditdialog.cpp | 294 +- src/dpadeditdialog.h | 0 src/dpadeditdialog.ui | 0 src/dpadpushbutton.cpp | 14 +- src/dpadpushbutton.h | 6 +- src/dpadpushbuttongroup.cpp | 110 +- src/dpadpushbuttongroup.h | 3 + src/editalldefaultautoprofiledialog.cpp | 20 +- src/editalldefaultautoprofiledialog.h | 0 src/editalldefaultautoprofiledialog.ui | 0 src/event.cpp | 128 +- src/event.h | 4 + src/eventhandlerfactory.cpp | 32 +- src/eventhandlerfactory.h | 0 src/eventhandlers/baseeventhandler.cpp | 7 +- src/eventhandlers/baseeventhandler.h | 0 src/eventhandlers/uinputeventhandler.cpp | 206 +- src/eventhandlers/uinputeventhandler.h | 28 +- .../winsendinputeventhandler.cpp | 0 src/eventhandlers/winsendinputeventhandler.h | 18 +- src/eventhandlers/winvmultieventhandler.cpp | 9 +- src/eventhandlers/winvmultieventhandler.h | 22 +- src/eventhandlers/xtesteventhandler.cpp | 135 +- src/eventhandlers/xtesteventhandler.h | 2 +- src/extraprofilesettingsdialog.cpp | 4 +- src/extraprofilesettingsdialog.h | 0 src/extraprofilesettingsdialog.ui | 0 src/flashbuttonwidget.cpp | 18 +- src/flashbuttonwidget.h | 2 +- src/gamecontroller/gamecontroller.cpp | 789 ++-- src/gamecontroller/gamecontroller.h | 49 +- src/gamecontroller/gamecontrollerdpad.cpp | 17 +- src/gamecontroller/gamecontrollerdpad.h | 2 - src/gamecontroller/gamecontrollerset.cpp | 258 +- src/gamecontroller/gamecontrollerset.h | 5 + src/gamecontroller/gamecontrollertrigger.cpp | 120 +- src/gamecontroller/gamecontrollertrigger.h | 4 - .../gamecontrollertriggerbutton.cpp | 19 +- .../gamecontrollertriggerbutton.h | 2 - src/gamecontrollerexample.cpp | 19 +- src/gamecontrollerexample.h | 0 src/gamecontrollermappingdialog.cpp | 138 +- src/gamecontrollermappingdialog.h | 0 src/gamecontrollermappingdialog.ui | 0 src/globalvariables.cpp | 214 + src/globalvariables.h | 257 ++ src/icons/16x16/actions/application-exit.png | Bin src/icons/16x16/actions/archive-insert.png | Bin src/icons/16x16/actions/dialog-cancel.png | Bin src/icons/16x16/actions/dialog-close.png | Bin src/icons/16x16/actions/dialog-ok.png | Bin src/icons/16x16/actions/document-close.png | Bin .../16x16/actions/document-open-folder.png | Bin src/icons/16x16/actions/document-open.png | Bin .../16x16/actions/document-revert-small.png | Bin src/icons/16x16/actions/document-revert.png | Bin src/icons/16x16/actions/document-save-as.png | Bin src/icons/16x16/actions/document-save.png | Bin src/icons/16x16/actions/edit-clear-list.png | Bin src/icons/16x16/actions/edit-clear.png | Bin src/icons/16x16/actions/edit-delete.png | Bin src/icons/16x16/actions/edit-select.png | Bin .../16x16/actions/edit-table-delete-row.png | Bin .../actions/edit-table-insert-row-below.png | Bin .../16x16/actions/games-config-custom.png | Bin .../16x16/actions/games-config-options.png | Bin src/icons/16x16/actions/help-about.png | Bin src/icons/16x16/actions/text-field.png | Bin src/icons/16x16/actions/view-fullscreen.png | Bin src/icons/16x16/actions/view-refresh.png | Bin src/icons/16x16/actions/view-restore.png | Bin src/icons/README.txt | 0 src/icons/index.theme | 0 src/icons/lgpl-2.1.txt | 0 src/icons/lgpl-3.0.txt | 0 src/images/16x16/antimicro.ico | Bin 0 -> 1150 bytes .../16x16/com.github.juliagoda.antimicro.png | Bin 0 -> 2159 bytes src/images/24x24/antimicro.ico | Bin 0 -> 2462 bytes .../24x24/com.github.juliagoda.antimicro.png | Bin 0 -> 7860 bytes src/images/32x32/antimicro.ico | Bin 0 -> 4286 bytes .../32x32/com.github.juliagoda.antimicro.png | Bin 0 -> 4409 bytes src/images/48x48/antimicro.ico | Bin 0 -> 9662 bytes .../48x48/com.github.juliagoda.antimicro.png | Bin 0 -> 3525 bytes src/images/64x64/antimicro.ico | Bin 0 -> 16958 bytes .../64x64/com.github.juliagoda.antimicro.png | Bin 0 -> 13268 bytes src/images/antimicro_trayicon.png | Bin src/images/axis.png | Bin src/images/button.png | Bin src/images/controllermap.png | Bin 33351 -> 45303 bytes src/images/profile.jpg | Bin src/inputdaemon.cpp | 258 +- src/inputdaemon.h | 8 +- src/inputdevice.cpp | 634 ++- src/inputdevice.h | 16 +- src/inputdevicebitarraystatus.cpp | 21 +- src/inputdevicebitarraystatus.h | 0 src/joyaxis.cpp | 359 +- src/joyaxis.h | 18 +- src/joyaxiscontextmenu.cpp | 188 +- src/joyaxiscontextmenu.h | 0 src/joyaxiswidget.cpp | 34 +- src/joyaxiswidget.h | 8 +- src/joybutton.cpp | 3592 ++++++----------- src/joybutton.h | 271 +- src/joybuttoncontextmenu.cpp | 103 +- src/joybuttoncontextmenu.h | 1 + src/joybuttonmousehelper.cpp | 21 +- src/joybuttonmousehelper.h | 0 src/joybuttonslot.cpp | 642 ++- src/joybuttonslot.h | 11 +- src/joybuttonstatusbox.cpp | 1 - src/joybuttonstatusbox.h | 0 src/joybuttontypes/joyaxisbutton.cpp | 66 +- src/joybuttontypes/joyaxisbutton.h | 5 +- src/joybuttontypes/joycontrolstickbutton.cpp | 101 +- src/joybuttontypes/joycontrolstickbutton.h | 8 +- .../joycontrolstickmodifierbutton.cpp | 18 +- .../joycontrolstickmodifierbutton.h | 6 +- src/joybuttontypes/joydpadbutton.cpp | 103 +- src/joybuttontypes/joydpadbutton.h | 18 +- src/joybuttontypes/joygradientbutton.cpp | 48 +- src/joybuttontypes/joygradientbutton.h | 3 + src/joybuttonwidget.cpp | 25 +- src/joybuttonwidget.h | 8 +- src/joycontrolstick.cpp | 1765 ++++---- src/joycontrolstick.h | 11 +- src/joycontrolstickbuttonpushbutton.cpp | 1 - src/joycontrolstickbuttonpushbutton.h | 6 +- src/joycontrolstickcontextmenu.cpp | 221 +- src/joycontrolstickcontextmenu.h | 0 src/joycontrolstickdirectionstype.h | 0 src/joycontrolstickeditdialog.cpp | 326 +- src/joycontrolstickeditdialog.h | 0 src/joycontrolstickeditdialog.ui | 0 src/joycontrolstickpushbutton.cpp | 0 src/joycontrolstickpushbutton.h | 6 +- src/joycontrolstickstatusbox.cpp | 120 +- src/joycontrolstickstatusbox.h | 0 src/joydpad.cpp | 411 +- src/joydpad.h | 11 +- src/joydpadbuttonwidget.cpp | 1 - src/joydpadbuttonwidget.h | 2 +- src/joykeyrepeathelper.cpp | 0 src/joykeyrepeathelper.h | 0 src/joystick.cpp | 26 +- src/joystick.h | 22 +- src/joystickstatuswindow.cpp | 5 +- src/joystickstatuswindow.h | 0 src/joystickstatuswindow.ui | 0 src/joytabwidget.cpp | 481 ++- src/joytabwidget.h | 4 +- src/joytabwidgetcontainer.cpp | 1 - src/joytabwidgetcontainer.h | 0 src/keyboard/virtualkeyboardmousewidget.cpp | 243 +- src/keyboard/virtualkeyboardmousewidget.h | 7 +- src/keyboard/virtualkeypushbutton.cpp | 7 +- src/keyboard/virtualkeypushbutton.h | 0 src/keyboard/virtualmousepushbutton.cpp | 0 src/keyboard/virtualmousepushbutton.h | 0 src/localantimicroserver.cpp | 1 - src/localantimicroserver.h | 0 src/logger.cpp | 0 src/logger.h | 0 src/main.cpp | 314 +- src/mainsettingsdialog.cpp | 325 +- src/mainsettingsdialog.h | 10 +- src/mainsettingsdialog.ui | 45 +- src/mainwindow.cpp | 222 +- src/mainwindow.h | 12 +- src/mainwindow.ui | 10 +- src/messagehandler.cpp | 4 +- src/messagehandler.h | 0 src/mousedialog/mouseaxissettingsdialog.cpp | 17 +- src/mousedialog/mouseaxissettingsdialog.h | 0 src/mousedialog/mousebuttonsettingsdialog.cpp | 12 +- src/mousedialog/mousebuttonsettingsdialog.h | 0 .../mousecontrolsticksettingsdialog.cpp | 0 .../mousecontrolsticksettingsdialog.h | 0 src/mousedialog/mousedpadsettingsdialog.cpp | 0 src/mousedialog/mousedpadsettingsdialog.h | 0 src/mousedialog/springmoderegionpreview.cpp | 0 src/mousedialog/springmoderegionpreview.h | 0 .../mouseaxissettingsdialoghelper.cpp | 0 .../uihelpers/mouseaxissettingsdialoghelper.h | 0 .../mousebuttonsettingsdialoghelper.cpp | 0 .../mousebuttonsettingsdialoghelper.h | 1 - .../mousecontrolsticksettingsdialoghelper.cpp | 0 .../mousecontrolsticksettingsdialoghelper.h | 0 .../mousedpadsettingsdialoghelper.cpp | 0 .../uihelpers/mousedpadsettingsdialoghelper.h | 0 src/mousehelper.cpp | 5 +- src/mousehelper.h | 0 src/mousesettingsdialog.cpp | 226 +- src/mousesettingsdialog.h | 0 src/mousesettingsdialog.ui | 0 src/qkeydisplaydialog.cpp | 57 +- src/qkeydisplaydialog.h | 0 src/qkeydisplaydialog.ui | 4 +- src/qtkeymapperbase.cpp | 47 +- src/qtkeymapperbase.h | 6 +- src/qtuinputkeymapper.cpp | 605 ++- src/qtuinputkeymapper.h | 15 +- src/qtvmultikeymapper.cpp | 0 src/qtvmultikeymapper.h | 4 +- src/qtwinkeymapper.cpp | 2 +- src/qtwinkeymapper.h | 6 +- src/qtx11keymapper.cpp | 513 +-- src/qtx11keymapper.h | 18 +- src/quicksetdialog.cpp | 523 +-- src/quicksetdialog.h | 16 +- src/quicksetdialog.ui | 0 src/resources.qrc | 6 +- src/resources_windows.qrc | 0 src/sdleventreader.cpp | 69 +- src/sdleventreader.h | 2 +- src/setaxisthrottledialog.cpp | 1 - src/setaxisthrottledialog.h | 0 src/setaxisthrottledialog.ui | 0 src/setjoystick.cpp | 453 +-- src/setjoystick.h | 11 +- src/setnamesdialog.cpp | 9 +- src/setnamesdialog.h | 0 src/setnamesdialog.ui | 0 src/simplekeygrabberbutton.cpp | 165 +- src/simplekeygrabberbutton.h | 0 src/slotitemlistwidget.cpp | 16 +- src/slotitemlistwidget.h | 0 src/springmousemoveinfo.h | 2 + src/stickpushbuttongroup.cpp | 105 +- src/stickpushbuttongroup.h | 5 + src/uihelpers/advancebuttondialoghelper.cpp | 1 - src/uihelpers/advancebuttondialoghelper.h | 0 src/uihelpers/buttoneditdialoghelper.cpp | 5 - src/uihelpers/buttoneditdialoghelper.h | 2 - src/uihelpers/dpadcontextmenuhelper.cpp | 1 - src/uihelpers/dpadcontextmenuhelper.h | 1 + src/uihelpers/dpadeditdialoghelper.cpp | 1 - src/uihelpers/dpadeditdialoghelper.h | 0 .../gamecontrollermappingdialoghelper.cpp | 8 +- .../gamecontrollermappingdialoghelper.h | 0 src/uihelpers/joyaxiscontextmenuhelper.cpp | 1 - src/uihelpers/joyaxiscontextmenuhelper.h | 0 .../joycontrolstickcontextmenuhelper.cpp | 1 - .../joycontrolstickcontextmenuhelper.h | 0 .../joycontrolstickeditdialoghelper.cpp | 1 - .../joycontrolstickeditdialoghelper.h | 0 src/uihelpers/joytabwidgethelper.cpp | 9 +- src/uihelpers/joytabwidgethelper.h | 0 src/uinputhelper.cpp | 493 ++- src/uinputhelper.h | 4 + src/unixcapturewindowutility.cpp | 23 +- src/unixcapturewindowutility.h | 0 src/unixwindowinfodialog.cpp | 0 src/unixwindowinfodialog.h | 0 src/unixwindowinfodialog.ui | 0 src/vdpad.cpp | 121 +- src/vdpad.h | 6 +- src/winappprofiletimerdialog.cpp | 0 src/winappprofiletimerdialog.h | 0 src/winappprofiletimerdialog.ui | 0 src/winextras.cpp | 10 +- src/winextras.h | 0 src/x11extras.cpp | 352 +- src/x11extras.h | 18 +- src/xmlconfigmigration.cpp | 18 +- src/xmlconfigmigration.h | 0 src/xmlconfigreader.cpp | 49 +- src/xmlconfigreader.h | 2 +- src/xmlconfigwriter.cpp | 14 +- src/xmlconfigwriter.h | 2 +- tests/CMakeLists.txt | 16 + tests/testaboutdialog.cpp | 71 + windows/AntiMicro.wxs | 0 windows/AntiMicro_64.wxs | 0 557 files changed, 29049 insertions(+), 29135 deletions(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 AntiMicro Future Developments.mm mode change 100644 => 100755 BuildOptions.md mode change 100644 => 100755 CMakeLists.txt mode change 100644 => 100755 Changelog mode change 100644 => 100755 LICENSE mode change 100644 => 100755 ProfileTips.md mode change 100644 => 100755 README.md mode change 100644 => 100755 Resources.txt mode change 100644 => 100755 cmake_uninstall.cmake.in create mode 100644 com.github.juliagoda.antimicro.json mode change 100644 => 100755 other/40-uinput.rules mode change 100644 => 100755 other/CMakeLists.txt mode change 100644 => 100755 other/antimicro.1 mode change 100644 => 100755 other/appdata/CMakeLists.txt mode change 100644 => 100755 other/appdata/PO_files/en.po mode change 100644 => 100755 other/appdata/appdata.its create mode 100644 other/appdata/com.github.juliagoda.antimicro.appdata.xml.in create mode 100644 other/appdata/screenshots/about_window.png create mode 100644 other/appdata/screenshots/application_trayicon.png create mode 100644 other/appdata/screenshots/controller_callibration_dark_theme.png mode change 100644 => 100755 other/appdata/screenshots/controller_configure_dark_theme.png create mode 100644 other/appdata/screenshots/controller_main_window_dark_theme_1.png create mode 100644 other/appdata/screenshots/controller_main_window_dark_theme_2.png mode change 100644 => 100755 other/appdata/screenshots/controller_mapping_dark_theme.png create mode 100755 other/com.github.juliagoda.antimicro.desktop create mode 100755 other/com.github.juliagoda.antimicro.xml mode change 100644 => 100755 other/scripts/build-sdl-lib.bat mode change 100644 => 100755 other/spec/antimicro-git.spec create mode 100644 repo/.lock create mode 100644 repo/config create mode 100644 repo/objects/01/f86097b296783f9277d100e5fa23e10749ce6dd2a8f23361112e51b4f2b9ea.filez create mode 100644 repo/objects/04/174d971f621e0d07f7a1e81f3d21a50081ba5dfbb99ae0657ee6644054e38f.dirtree create mode 100644 repo/objects/06/26a70a6414e90a1666c3218b4209fa6e614e1f9830106cd1103de1d14d4c49.filez create mode 100644 repo/objects/06/6a1cf58035d1f550062afd1ca457323d18924dcc6a687e9638a39d777af0cc.dirtree create mode 100644 repo/objects/06/7cbe3ca0c395e674243adc5b3c9c9fa47ad08d220609138b52576675969a3e.filez create mode 100644 repo/objects/0a/2714d219243f836e43f0c13a9dcb34a2b22c273c7b5196aa72a0339c639ff8.filez create mode 100644 repo/objects/0c/61807d0daf54c7ab0c40e4cb49b2e52fdbf23945dc5d7edf9f3997661ce6c7.filez create mode 100644 repo/objects/0c/8f5a94910909dc60d5433ae6d28828c43129c6ce03152cfa589fc71b0432b1.filez create mode 100644 repo/objects/10/7d43d909a07d9081d2e4de8312dbc40f32b54ca195a0fcee11e43b33f2bc52.filez create mode 100644 repo/objects/14/35d296df40e5f1bae84e29cddb8c4deb625c1d9e94d0db9bdfb77e7623f192.filez create mode 100644 repo/objects/16/27961b211a23ead2337a08b078e60ab72f423d12780f58808ea200267eb210.filez create mode 100644 repo/objects/16/5af28b502b755c568d0efaad73781f4af35d80684db3dec44c0760d563e8a3.filez create mode 100644 repo/objects/19/6bcbd53dc65a27248fcc6ae0073a18a13cb9b6f132f626543b2a4657a732ac.filez create mode 100644 repo/objects/19/b853289a096fe24bb31d76e566d493d8f544da214e61e95b9c94c975970fda.dirtree create mode 100644 repo/objects/1a/4c2773c459991cd148a6379e9469d4631d829844fcfd63b1ed663fa956625f.filez create mode 100644 repo/objects/1b/dffc84010cea9c1eff8e863fa521e89445008e9c9cb2fa3f30b696d3ab1aca.filez create mode 100644 repo/objects/1d/c9ecd1fcf73c5b1c9dd00dbf31ab7ba4ed82ff722ed3d2bff0e323c2cd2837.filez create mode 100644 repo/objects/1e/6c52727940e87716025c7df2991d8f84b5b783f182bce7ee603fde61145b92.filez create mode 100644 repo/objects/1f/1319ea6d10122e5e445ebf8fdcc23bd82a5a6b98729d1cab121d0e2ff03981.dirtree create mode 100644 repo/objects/1f/25c2f519108da140329339fe6f519dbd6d9dae28643594aa7886d11f055b8b.filez create mode 100644 repo/objects/21/f8494fd4046c509832a5ce4f129d909f72e31ee595a57e7103405e71f53d80.filez create mode 100644 repo/objects/24/0705beffe0dc88da7220ef4b44b8b29a86d22652f476ba27bcec789559f664.filez create mode 100644 repo/objects/25/c30f0cf3f3ea59bbfc7be908539686c008deadab04555cf1cdb17578d029f6.commit create mode 100644 repo/objects/28/0077492cf6d9cf7c919c933495830496d13f31e035f14007d246573baa3b24.filez create mode 100644 repo/objects/2c/094fd75febb27c8635c95826c9602347f637ab314e969a4a776264e6820545.filez create mode 100644 repo/objects/2d/934447792ccfdfce6ba66cb9342bfc9499bdd9eae4f8798809e41ce0a76ce9.filez create mode 100644 repo/objects/2d/f35a4e0dc57978dae1a88fe6cb7ed138a2013d9f4327a187a0e1830a311f71.filez create mode 100644 repo/objects/2d/ffe0936c2bdae6e11681693bafcc4459311063358cecc3f567474635474dc3.filez create mode 100644 repo/objects/2e/2dfabec7461662a719e51b3c0c457530b2358792f5a40dfe4ffd8d43187c9e.filez create mode 100644 repo/objects/31/3500e53c59037fe506e449da10de4051cee6d03005f49225059c6d35df8f00.filez create mode 100644 repo/objects/33/e0778cfdf9e08407a4749af7ccde4e4b79885f036efa6bb18d2296bb757512.filez create mode 100644 repo/objects/34/1124b04395360ee9feda8a38f0320e3860c12a8c6f58d9ab57c8f194027444.dirtree create mode 100644 repo/objects/38/c6b874f3e94638203066d1f5ede725f16977a30cf0728832f11717c4f76b36.filez create mode 100644 repo/objects/3c/09b0f5576d136233753f2f78b5512ba27646631d2638dcdf0b3d4d3132bb31.filez create mode 100644 repo/objects/3d/4c5e4fdf65570520dcb6f019f815ed5037705bbe2a4af52d76d8d88959ef41.filez create mode 100644 repo/objects/3d/713bdac06f360226909e1c13f1b078b8631c5a0d9a5d0ca2bdbcc13e3f1291.filez create mode 100644 repo/objects/3f/0dda5683b1af92fbca8118bc7602542342c382c9830046f3815b64828a126d.filez create mode 100644 repo/objects/3f/2a39a366372789f9bc2558d5bfbe14a8e547b336c00b5b0f49a5d342369205.filez create mode 100644 repo/objects/3f/d03bc53488007b5bb46f96e5e2912c5e04b5c88550b767efba71263b233dbe.dirtree create mode 100644 repo/objects/40/b3704d77473b98fddd7e18fb92d6538e9e1415ee01c973eaa88718d0cf8c35.filez create mode 100644 repo/objects/40/e68f4242444195913cd8b9b91abb7d80929fb2c4fb0ce27a96ecede9199881.filez create mode 100644 repo/objects/41/514fba0348385677546a001b09741b647388021cc098d583c52035d368d826.filez create mode 100644 repo/objects/41/c2fcd3103ed83c4293f2c305366725be100736696ff8ef6b54d7ffa25e3c04.filez create mode 100644 repo/objects/42/8ea7bc7a7c5b36fdf007031169d0f9905fc26ec555b9052b0525a23391f066.filez create mode 100644 repo/objects/43/5536a5a0ffc863d155f5346d50706c11c8ec6cf19556b31d27b994903f3682.filez create mode 100644 repo/objects/43/6c337e571c6de42f78f19b4ee118ce40781768d300f61168e451405f83f67d.dirtree create mode 100644 repo/objects/44/6a0ef11b7cc167f3b603e585c7eeeeb675faa412d5ec73f62988eb0b6c5488.dirmeta create mode 100644 repo/objects/44/c4a1495775b38fbccf8c768dc4b6c84d3ddbeead2a8b98b1a4aa272a4abec3.dirtree create mode 100644 repo/objects/46/59d21e1e5fa08b3fb751216192ed8abac2341e8f3705719a01a9d13af78ae5.filez create mode 100644 repo/objects/46/886d97475f01f57f84e867e6783032a3f1037cdc7617a5c9ef89142a2768f6.filez create mode 100644 repo/objects/47/2b94f7979aa26593271ce51f2cdaea2e39055a3ea1336934ce456df510e779.filez create mode 100644 repo/objects/49/7526ce53f4ceea558e64e5b8d74897ad8c8f9587874b32ca1a36632b9a490a.filez create mode 100644 repo/objects/49/f17001b7fc07abba1f6550d752a12a7082f3eb7c71ff11168834ec9b5b6371.filez create mode 100644 repo/objects/4d/027439408bcda052a1df90740548ffe4b45015556be882cb0608adc0cecca0.filez create mode 100644 repo/objects/4d/2d98a6e076825b2486c2f6673e4a6e3e9b5280b25625e695b05f0b3123f330.filez create mode 100644 repo/objects/4e/3dd8cc6c3fe75b5c7d43992924ec365800a0e9d0a2e587599c8818567bcffe.dirtree create mode 100644 repo/objects/50/daae25fecfb025886ed6a8f732705dcd542eae1d9c1f3f203287cd953f116b.filez create mode 100644 repo/objects/51/d474170bc48a16278ca8e32357cd1cbf920150be08839f8073910c126a0ae9.filez create mode 100644 repo/objects/53/9f390ee93c783631edf780dcd0e721ecc42ed3421889fb0d8d2fbb746bc757.filez create mode 100644 repo/objects/59/3dfade77b23c0cf8f58f84d508505a72e2e73ce170fb84557f1b9ddb1599ff.filez create mode 100644 repo/objects/5a/bf8cff737f16da1f4b08f30194e1ea4d523cee89ca4050124d52b3da2621b7.dirtree create mode 100644 repo/objects/5e/c6d4b8f5d1c8d07577139cfa0b249c88a70f141a476a2cc3a8d3f261d80cb7.filez create mode 100644 repo/objects/5f/cc34d501a0e86bcf1518ade3d5cdcf36631b896ebafc148bb2bbf0d063145e.filez create mode 100644 repo/objects/62/fbed2c3ff350c992c017f8bc629a98747e8b7d41a96bf062d8cdefff0bd6f2.filez create mode 100644 repo/objects/63/10e92df74872d40c1d4f52b20a39d5e696c0f49ee9e0613168c985a443c7d7.dirtree create mode 100644 repo/objects/65/990f4e145ac981ea84eff29876645038a2deeeab593857c8a31f943a5a1e21.filez create mode 100644 repo/objects/65/9bc03c8ab1e30074d1c931c28bab9dfe3c8d4dc50edab44fab0dd5939dbd62.filez create mode 100644 repo/objects/69/043a82b3464dabe668c744f839ffce09a8c427369817fac9c76d1aee6dd0db.filez create mode 100644 repo/objects/69/acc5506b73c2630add794c33a9c3675c3ebaf7fa3c3305e5643954d8999237.filez create mode 100644 repo/objects/6b/2cdabb7937183000d8bbadf61bfce4aa8782d1e89c6a8441dd98141d1ae142.commit create mode 100644 repo/objects/6d/5ba4cb0379346467f3893b81db1998909e2f828cc990a2b0e67e0d70c8929a.filez create mode 100644 repo/objects/6e/340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d.dirtree create mode 100644 repo/objects/71/a49cc20219ea047ccd7e7170d904e85074c29889641a535ac589154462882c.commit create mode 100644 repo/objects/71/bd3f2f6c6a08b3be988d6ad7daa743fbab793133d3aff6c45096a3de5fea0e.filez create mode 100644 repo/objects/72/35f9594f076ff6547e14e1b98b1f620dafab82056b3e528b00aeef7ada4888.dirtree create mode 100644 repo/objects/72/903bf9ba5b772d12e787f9f9ab107ea44af465c50bc7c53d27cd6c776f8860.filez create mode 100644 repo/objects/73/724508a98691fcd280a2501c859510571bb82c2bfbf236a18876fe06242ebe.filez create mode 100644 repo/objects/74/440b3ef5af43c2518429f8b5b34c84c37f73202929e6d6489c77247b346e4e.filez create mode 100644 repo/objects/76/33ed5db7285e92f154cea1569807c1b83260627aaeef33459886ce1f7b0446.commit create mode 100644 repo/objects/76/53f9e0819da90cb51a71c67b8ca62892676c52e4d377a45b5c147d5e6dae88.dirtree create mode 100644 repo/objects/79/6db1fd624ebb40c8774f017d1dbaf926d50cdfe44a20312e02f2cb4c0f39c6.filez create mode 100644 repo/objects/7b/6c611e0a7b4eb62b0b10adddc3ebc5561e072f4f9238ab011c8915d14f6aec.filez create mode 100644 repo/objects/7c/0b1aa30c0b230869b0c6414af405e6f5eb7934a017e21595b4dacf151db96f.filez create mode 100644 repo/objects/7c/d397e7cc9be27fce1b3f613676a36fa607401682692f23ce8c8887c38ecfbd.filez create mode 100644 repo/objects/7c/f2ef241fd3e2d0c8c4f9b85c16423fd9276fcc012db637cb9874a940b9edf1.filez create mode 100644 repo/objects/7d/4f16ca8e8861294cde20453e61ecd01475cdab0d61630f4fc5c246f9215d8e.filez create mode 100644 repo/objects/7e/340933b0dd8d753a7f4e07fbc3a088cb1925b85ca4c6cc8287652f985dfd11.filez create mode 100644 repo/objects/7e/c153528ec6d6e724fb92ea266bad223772e62444a81fa3c40a29e81f60ad57.filez create mode 100644 repo/objects/7f/8c621e74a86ccb11460df286dce5bedfd17fcc83405de5e64ca0a3142f5c31.dirtree create mode 100644 repo/objects/7f/90e507c78b96dd64299f9c488e43faa116fe2cde93f2c6cebb799252651e5a.filez create mode 100644 repo/objects/80/8cc668f4eb4e20fde7cee20df2cc4010d0a8d6ce46c0835ca53d9ebb1524ad.dirtree create mode 100644 repo/objects/84/6f20624bbdd7f1985e06f7df006b865b1dc03542f22575248575f3d64e5b37.filez create mode 100644 repo/objects/84/717f11d41ea0fbbc60e94f238909c659bd71f3f0781ea1f29e70568ffa255b.filez create mode 100644 repo/objects/84/fbc8281004bf3503da1977cc9a4c3b28c8ddde5c1bbeebced93e4e12d83a45.dirtree create mode 100644 repo/objects/86/0132d78faa9a44c7aa984ab445cc99143a5096bf21dfd982c582afbdc2ef36.dirtree create mode 100644 repo/objects/86/8decf1a80b18d8819d9c392f2112220d6cffdc2191d8ee8970fbb8c3912ba1.filez create mode 100644 repo/objects/86/dfdf757cb7865bd907c4eedbf76c53094d0c827b5bb90b196195ff261e498c.dirtree create mode 100644 repo/objects/8a/130777023554e07be7a161d3e21e669e4d8634d071135305a7bd00a1f811f5.filez create mode 100644 repo/objects/8a/6c781b1df30c7c3e84331e2da66c8932473b6160704624e0193370fd3d51ad.filez create mode 100644 repo/objects/8c/242b81b2a7d8677bc0f39d028942689ed93b7315766a290641f45d363a25cd.filez create mode 100644 repo/objects/8d/bd359d65afa1e5d1f3f795cf4a4350dc2e2752bb118d0757a7931b6748706a.filez create mode 100644 repo/objects/8e/9dbb12af690ba35846ba2706123b36b7913208a47759a1c3a12c23b7601b41.dirtree create mode 100644 repo/objects/8e/bb1066ccf521bdded4cc27656a87b81c3c60d1464e70c158285faaedec4bbe.filez create mode 100644 repo/objects/8f/f78d2a3212edbf9d5ccc52c9047cf5013e6dfe9c0e14488d8033e6fe2d075d.filez create mode 100644 repo/objects/91/1ee7956ecde73d4e93c7dd9894065dc851e47e7bcf93487883eb58837b6b83.filez create mode 100644 repo/objects/92/6008f63a3ab0bcccf40bd6b54fd16d45eaebf1b211d10c8b1ff190e31a41a9.filez create mode 100644 repo/objects/94/06d7e034a778a2b75b3e8a11b6a4280b3cf581691f1bb3638c4be5d03bc4fb.dirtree create mode 100644 repo/objects/94/092b71bc083f27b80de9724ab7bb4a38d707f66f065fe9e45c64472f949958.filez create mode 100644 repo/objects/97/2938d146791fa8c28d6b86b469eaeb6184edc374788796bef17f973cd2d453.filez create mode 100644 repo/objects/98/5014b517f77725fd562ba5364386faccb5595668add3bd3dafa4a9f25490bd.filez create mode 100644 repo/objects/98/9407a3997bb78d5b111a37845b0008ad26d6f694c8e5dcb5cca8dd99ee7c5d.filez create mode 100644 repo/objects/9b/d03eaaa595eecda1759ee0816333008bfc0b8a2eb18a3a1f2cf471e5a7c15e.dirtree create mode 100644 repo/objects/9e/728e6d1669c876ca6decb241575f83764d553b6774d8d319dc84e40ea7af24.filez create mode 100644 repo/objects/9e/c47b4c6d06e316b43127b5f8d6a14d895b2103b081a1a8ecf3ba1480f3e95a.filez create mode 100644 repo/objects/9f/0cf461e9006c49f3be70376cf1de53f5605f6466e540a5396d92a43f654c6b.dirtree create mode 100644 repo/objects/9f/eff0d305faecc39637de60b3cbf01881b906cface4cb2c687c49d64bd21e25.filez create mode 100644 repo/objects/a0/33a5f252383b2bef35061ccd60085ce59c44795cbbfd8206f6b5d0c445d243.filez create mode 100644 repo/objects/a2/601a174a9e784ee70ec77f2b07b0b383d7be046306d188b1d8f14139479f54.filez create mode 100644 repo/objects/a5/26c3399a72159cc3405c448507f8c1fa9d634f49c041edf23e46160b26c0dc.dirtree create mode 100644 repo/objects/a8/858b36da5e600c9387a00c1aaef1b8dfae18588bcdcde1e6a72bfbdf897dea.filez create mode 100644 repo/objects/a9/137491f830ae049eee74957d64a044fae2cb83c573ffb15dca4a687b57f5fc.filez create mode 100644 repo/objects/a9/8b1fccb9995fb80f79d1083a8bd343349d03c9e5d2aa86ab0b9b1b476161ed.filez create mode 100644 repo/objects/aa/896b67399fb7762ba23b9a132e14c6508fbdddf481bf76ccfb9c68c3d0d574.filez create mode 100644 repo/objects/aa/8f39cfd413a5417f538a1f43afd562bda6a54e55b66a136b93d2421ff53e35.filez create mode 100644 repo/objects/ab/31d27e745699e851add5f6e636105bcd327a7549ca7d8ccdbdff3eaf16f797.filez create mode 100644 repo/objects/ab/9189a6e5918707f43ce54dee5955411ec20eef829e35078fbf409fa90a07cd.dirtree create mode 100644 repo/objects/ab/ce2e45fc0658480c83f3bdab1c59c9a99df5b3f48beba863c28ba4589842d6.dirtree create mode 100644 repo/objects/ad/4048a76a8f52e4bd1a0f1d56b5b6563b129269fe7c17349b20c0b55226df4d.filez create mode 100644 repo/objects/b0/2d708664d0c0eb4b9d1ee123d0b1bf34222b4736c10f9e2a139252267192f5.dirtree create mode 100644 repo/objects/b3/a2805fc101720f969b0a56e33b3a8c5923894ec0d62125900776702ca9dd72.filez create mode 100644 repo/objects/b5/89d572469cc9ea8c8862871d4111b41b0d5f23078023cff4e17d4e9b23d721.filez create mode 100644 repo/objects/b9/11d71421920a02d61269e97ed11de47ee0ddb89161061fbfe4614f57d15733.dirtree create mode 100644 repo/objects/b9/4fce966376a4472ac68b5118dcb0ad8e622cb746dfc8e97d22c53057a7fb3e.filez create mode 100644 repo/objects/bb/1ce5e173f98dbe91b8c2a02dc8428f7203581c02a12267138b80bd5e95a417.filez create mode 100644 repo/objects/bc/7315a2310bc69742be378f6125c84bb757d2c4750b7ae239c6d96ec5a07705.dirtree create mode 100644 repo/objects/be/644212270a1111e79143ec1867271075d996ad7986ed9a23fcc2c952514004.filez create mode 100644 repo/objects/c0/3c7223c618129fd494610f411441d606702b3df9e0bdf06553959e74a3181f.filez create mode 100644 repo/objects/c2/f5bdc250b1a335add98920f0434b55857447884ad90d5086961ee80a76fbbc.filez create mode 100644 repo/objects/c3/2fe471888f97af61f96693a6e0d7a62a7aab4fce5810042d6ff0338a6c86cc.filez create mode 100644 repo/objects/c3/bb3e149b2d6c861720da53d8b1a55360e0ea9767f9567dd2a051b16b8058fe.filez create mode 100644 repo/objects/c4/13225da73291febb2c28a263ee7d88fc108fddaf85fd662f78c42936af6c44.filez create mode 100644 repo/objects/c4/f6e09b079b582753c0a556e50ce7826247c8fcc165a191a38965c3a497a271.dirtree create mode 100644 repo/objects/c6/0df779e2fc0a40985e9ec4b807489d9cb79a537198ffcc0bb22baa261f0d6c.filez create mode 100644 repo/objects/c9/f8d6d1ba05aa45a6a60ce1e3a035d672aae0070e32762dd6fce6f244bd4adf.filez create mode 100644 repo/objects/ca/952375ca08ebd8398558432f6ddbbafbba396bf6651481d7146af6e8ec4914.dirtree create mode 100644 repo/objects/cb/19a4139b37f40607cb31d49c80ed914a4bc2e138561755223667b05c987189.filez create mode 100644 repo/objects/cd/2fb60a836a21aa76fb44da7c2b72b88b4640e3bc2ae4e7905ea14e4e3472cf.filez create mode 100644 repo/objects/cf/a5fae94d78a61423b4ba04482364c8ef86bc5732608dc3d96e64261f1cda45.dirtree create mode 100644 repo/objects/cf/c83548e29e67cf627cca6b527835684b944f91ee55c965f296d9f635c744f2.filez create mode 100644 repo/objects/d0/1861fee9974ea0f0d39242f7654c99087159e19611d2cb229e79a4549c5691.dirtree create mode 100644 repo/objects/d1/305c5699184f4d317740f0aff4d25c47531d849bb6a0ebda3f6e921c27c44a.filez create mode 100644 repo/objects/d1/d52df8f6e7c0570c1db26bb9c3ff34edb263f5b0054724c97940e785f6e8e8.filez create mode 100644 repo/objects/d6/5941cff1833b51c001a6645231c037aa8915030d6437bb29f94e2161c49723.commit create mode 100644 repo/objects/d6/ad335d9d7f9bbfbb6e33774efe0d0eb5db8fdc8d94fb512facbf632c6c90a5.filez create mode 100644 repo/objects/d6/f2d62271196356861d8bd8520608b99db3768f69598cdcbae752ccefd2f3b0.filez create mode 100644 repo/objects/d7/618bdf95c950b23590bb8f79384eb0557e5515f7f12c838b876246a537bdf0.filez create mode 100644 repo/objects/d7/b303e56c08ad77a515e4b5c88c5437024f0e3a7f235ee40262709d6a5c206a.filez create mode 100644 repo/objects/d7/cf2b14ead55f4fe35168406781e591330854a3fa11b10259897e829b8667db.filez create mode 100644 repo/objects/d8/ffed80dd2201776fc467f23e0ed21bf94adae1ee0bd419dcd58e60b5bc826e.filez create mode 100644 repo/objects/d9/163a95cdd8e75d585620038e2b9443a3f5be57b74b03ad5b18b0083ae92823.filez create mode 100644 repo/objects/df/a0d2bf9bb5c558787c0f1399aa5130b25e365e56b18bcf7dc5ca0287408bfc.filez create mode 100644 repo/objects/e0/19fc3e9311b22b0ae0186a33f465ba4291bbc9b49a961320aa5b765b53e3c5.filez create mode 100644 repo/objects/e1/04dfd3c6ec9a5b282aefb68ca6aed11f3f6b6fe89e3c87d9820a752054edab.dirtree create mode 100644 repo/objects/e5/86401fae35290da4dbd7a84c1b0d7f6d7aab8d51af82478b0196bff1dec963.dirtree create mode 100644 repo/objects/e9/844e6232136e21946a3dc5f4692bf4eed2e27121f431d66c70f346bf4d99f4.filez create mode 100644 repo/objects/e9/b6f6e70a461b258e9296aaa5be6bff70e50ccd2c2d6835aca7bf0760716540.filez create mode 100644 repo/objects/eb/59ed21d05e414d39109c3f978d43651cf58e962117102b7a633d0ce4906a18.dirtree create mode 100644 repo/objects/ec/a58644926a1b6056fbecda17788bd3ec2a3ab578be7f87a8ce25c26d1f012e.filez create mode 100644 repo/objects/ed/3ff79db119668a1e33e9b3bba9aee78d75c72c2c269ac9cb17fb7234a0d661.dirtree create mode 100644 repo/objects/ee/b005c21b4f0f9818aaef70e40e0cbc8bc8fe98c91d4d3a858d41e45b5c359d.filez create mode 100644 repo/objects/ee/cc1bd323a5f741592666eb5a4bf5157256f8d0e4ffa341d75422d6f09d5724.dirtree create mode 100644 repo/objects/ef/a4edd75da18527fc66700bc654113d33d810a84616dcd5d35e06df3c958d62.dirtree create mode 100644 repo/objects/ef/d315bd8d0c24b374400fe916cf8312747e112939502a785118603c5ecb3a88.dirtree create mode 100644 repo/objects/f1/7a3ce385ef2b30fc9d08fd8e8465f02d4eda733f268b2add48ae283d6fa3ae.filez create mode 100644 repo/objects/f4/4fb4d2baf911a1d6dee044d489417d7d4da70681edb4e0bfaac299b6240ab2.dirtree create mode 100644 repo/objects/f5/606a89af5ffa7d95ad69e7adb2afa9293556b99df98b924f727ff4466124f0.filez create mode 100644 repo/objects/f8/2aff09af0d3acac546bd076f40612d97ab4427bb06b99095a33c727ec5ca9f.filez create mode 100644 repo/objects/f8/5fb17ba73178e086f2cb3a52772f2b921c0ee6589813021b1150991ef85158.filez create mode 100644 repo/objects/f9/0bb6927ecb7f343f9c1d90cc81d5ebcf2dcfd7b09b05881070989dee715dab.filez create mode 100644 repo/objects/fa/69ac13724c50a7704361510bf4fc3c6dff7346489bfc15ad536694468c7077.filez create mode 100644 repo/objects/fc/47357f30944de7bf35927dc43a59211f34dcf66b8605d1f41fc105976e13c5.filez create mode 100644 repo/objects/fc/5b66242a60ca51f8561c63c26e5cb506ac557aff80158da7e25ad5ac62946b.dirtree create mode 100644 repo/objects/fd/80c15f05281985c4019b9dc456da968a4bc21a21005195a1743845d27e527e.filez create mode 100644 repo/objects/fe/20097755c180db69b8e2b5c5af88ec743f1aa22091e8217dc2c46448a0c4cf.filez create mode 100644 repo/objects/fe/61be5488a510743dc507663cfe6c2f5e1ee2acdcaaa382823a64c3d6bccade.filez create mode 100644 repo/objects/ff/5ee721b5ef42d6aab20114bcdfe526f94ffa680e9ce9613f52df5936c7b1e0.filez create mode 100644 repo/refs/heads/app/com.github.juliagoda.antimicro/x86_64/master create mode 100644 repo/refs/heads/app/com.github.juliagoda.antimicro/x86_64/stable create mode 100644 repo/refs/heads/runtime/com.github.juliagoda.antimicro.Debug/x86_64/master create mode 100644 repo/summary mode change 100644 => 100755 share/antimicro/blank.txt mode change 100644 => 100755 share/antimicro/translations/CMakeLists.txt mode change 100644 => 100755 share/antimicro/translations/antimicro.ts mode change 100644 => 100755 share/antimicro/translations/antimicro_br.ts mode change 100644 => 100755 share/antimicro/translations/antimicro_de.ts mode change 100644 => 100755 share/antimicro/translations/antimicro_en.ts mode change 100644 => 100755 share/antimicro/translations/antimicro_es.ts mode change 100644 => 100755 share/antimicro/translations/antimicro_fr.ts mode change 100644 => 100755 share/antimicro/translations/antimicro_it.ts mode change 100644 => 100755 share/antimicro/translations/antimicro_ja.ts mode change 100644 => 100755 share/antimicro/translations/antimicro_pl.ts mode change 100644 => 100755 share/antimicro/translations/antimicro_ru.ts mode change 100644 => 100755 share/antimicro/translations/antimicro_sr.ts mode change 100644 => 100755 share/antimicro/translations/antimicro_uk.ts mode change 100644 => 100755 share/antimicro/translations/antimicro_zh_CN.ts mode change 100644 => 100755 share/blank.txt mode change 100644 => 100755 src/aboutdialog.cpp mode change 100644 => 100755 src/aboutdialog.h mode change 100644 => 100755 src/aboutdialog.ui mode change 100644 => 100755 src/addeditautoprofiledialog.cpp mode change 100644 => 100755 src/addeditautoprofiledialog.h mode change 100644 => 100755 src/addeditautoprofiledialog.ui mode change 100644 => 100755 src/advancebuttondialog.cpp mode change 100644 => 100755 src/advancebuttondialog.h mode change 100644 => 100755 src/advancebuttondialog.ui mode change 100644 => 100755 src/advancestickassignmentdialog.cpp mode change 100644 => 100755 src/advancestickassignmentdialog.h mode change 100644 => 100755 src/advancestickassignmentdialog.ui mode change 100644 => 100755 src/antimicro.exe.manifest mode change 100644 => 100755 src/antimicro.exe.uiaccess.manifest mode change 100644 => 100755 src/antimicro.rc mode change 100644 => 100755 src/antimicrosettings.cpp mode change 100644 => 100755 src/antimicrosettings.h mode change 100644 => 100755 src/antkeymapper.cpp mode change 100644 => 100755 src/antkeymapper.h mode change 100644 => 100755 src/applaunchhelper.cpp mode change 100644 => 100755 src/applaunchhelper.h mode change 100644 => 100755 src/autoprofileinfo.cpp mode change 100644 => 100755 src/autoprofileinfo.h mode change 100644 => 100755 src/autoprofilewatcher.cpp mode change 100644 => 100755 src/autoprofilewatcher.h mode change 100644 => 100755 src/axiseditdialog.cpp mode change 100644 => 100755 src/axiseditdialog.h mode change 100644 => 100755 src/axiseditdialog.ui mode change 100644 => 100755 src/axisvaluebox.cpp mode change 100644 => 100755 src/axisvaluebox.h mode change 100644 => 100755 src/buttoneditdialog.cpp mode change 100644 => 100755 src/buttoneditdialog.h mode change 100644 => 100755 src/buttoneditdialog.ui mode change 100644 => 100755 src/calibration.cpp mode change 100644 => 100755 src/calibration.h mode change 100644 => 100755 src/calibration.ui mode change 100644 => 100755 src/capturedwindowinfodialog.cpp mode change 100644 => 100755 src/capturedwindowinfodialog.h mode change 100644 => 100755 src/capturedwindowinfodialog.ui mode change 100644 => 100755 src/commandlineutility.cpp mode change 100644 => 100755 src/commandlineutility.h mode change 100644 => 100755 src/common.cpp mode change 100644 => 100755 src/common.h mode change 100644 => 100755 src/config.h.in mode change 100644 => 100755 src/dpadcontextmenu.cpp mode change 100644 => 100755 src/dpadcontextmenu.h mode change 100644 => 100755 src/dpadeditdialog.cpp mode change 100644 => 100755 src/dpadeditdialog.h mode change 100644 => 100755 src/dpadeditdialog.ui mode change 100644 => 100755 src/dpadpushbutton.cpp mode change 100644 => 100755 src/dpadpushbutton.h mode change 100644 => 100755 src/dpadpushbuttongroup.cpp mode change 100644 => 100755 src/dpadpushbuttongroup.h mode change 100644 => 100755 src/editalldefaultautoprofiledialog.cpp mode change 100644 => 100755 src/editalldefaultautoprofiledialog.h mode change 100644 => 100755 src/editalldefaultautoprofiledialog.ui mode change 100644 => 100755 src/event.cpp mode change 100644 => 100755 src/event.h mode change 100644 => 100755 src/eventhandlerfactory.cpp mode change 100644 => 100755 src/eventhandlerfactory.h mode change 100644 => 100755 src/eventhandlers/baseeventhandler.cpp mode change 100644 => 100755 src/eventhandlers/baseeventhandler.h mode change 100644 => 100755 src/eventhandlers/uinputeventhandler.cpp mode change 100644 => 100755 src/eventhandlers/uinputeventhandler.h mode change 100644 => 100755 src/eventhandlers/winsendinputeventhandler.cpp mode change 100644 => 100755 src/eventhandlers/winsendinputeventhandler.h mode change 100644 => 100755 src/eventhandlers/winvmultieventhandler.cpp mode change 100644 => 100755 src/eventhandlers/winvmultieventhandler.h mode change 100644 => 100755 src/eventhandlers/xtesteventhandler.cpp mode change 100644 => 100755 src/eventhandlers/xtesteventhandler.h mode change 100644 => 100755 src/extraprofilesettingsdialog.cpp mode change 100644 => 100755 src/extraprofilesettingsdialog.h mode change 100644 => 100755 src/extraprofilesettingsdialog.ui mode change 100644 => 100755 src/flashbuttonwidget.cpp mode change 100644 => 100755 src/flashbuttonwidget.h mode change 100644 => 100755 src/gamecontroller/gamecontroller.cpp mode change 100644 => 100755 src/gamecontroller/gamecontroller.h mode change 100644 => 100755 src/gamecontroller/gamecontrollerdpad.cpp mode change 100644 => 100755 src/gamecontroller/gamecontrollerdpad.h mode change 100644 => 100755 src/gamecontroller/gamecontrollerset.cpp mode change 100644 => 100755 src/gamecontroller/gamecontrollerset.h mode change 100644 => 100755 src/gamecontroller/gamecontrollertrigger.cpp mode change 100644 => 100755 src/gamecontroller/gamecontrollertrigger.h mode change 100644 => 100755 src/gamecontroller/gamecontrollertriggerbutton.cpp mode change 100644 => 100755 src/gamecontroller/gamecontrollertriggerbutton.h mode change 100644 => 100755 src/gamecontrollerexample.cpp mode change 100644 => 100755 src/gamecontrollerexample.h mode change 100644 => 100755 src/gamecontrollermappingdialog.cpp mode change 100644 => 100755 src/gamecontrollermappingdialog.h mode change 100644 => 100755 src/gamecontrollermappingdialog.ui create mode 100644 src/globalvariables.cpp create mode 100644 src/globalvariables.h mode change 100644 => 100755 src/icons/16x16/actions/application-exit.png mode change 100644 => 100755 src/icons/16x16/actions/archive-insert.png mode change 100644 => 100755 src/icons/16x16/actions/dialog-cancel.png mode change 100644 => 100755 src/icons/16x16/actions/dialog-close.png mode change 100644 => 100755 src/icons/16x16/actions/dialog-ok.png mode change 100644 => 100755 src/icons/16x16/actions/document-close.png mode change 100644 => 100755 src/icons/16x16/actions/document-open-folder.png mode change 100644 => 100755 src/icons/16x16/actions/document-open.png mode change 100644 => 100755 src/icons/16x16/actions/document-revert-small.png mode change 100644 => 100755 src/icons/16x16/actions/document-revert.png mode change 100644 => 100755 src/icons/16x16/actions/document-save-as.png mode change 100644 => 100755 src/icons/16x16/actions/document-save.png mode change 100644 => 100755 src/icons/16x16/actions/edit-clear-list.png mode change 100644 => 100755 src/icons/16x16/actions/edit-clear.png mode change 100644 => 100755 src/icons/16x16/actions/edit-delete.png mode change 100644 => 100755 src/icons/16x16/actions/edit-select.png mode change 100644 => 100755 src/icons/16x16/actions/edit-table-delete-row.png mode change 100644 => 100755 src/icons/16x16/actions/edit-table-insert-row-below.png mode change 100644 => 100755 src/icons/16x16/actions/games-config-custom.png mode change 100644 => 100755 src/icons/16x16/actions/games-config-options.png mode change 100644 => 100755 src/icons/16x16/actions/help-about.png mode change 100644 => 100755 src/icons/16x16/actions/text-field.png mode change 100644 => 100755 src/icons/16x16/actions/view-fullscreen.png mode change 100644 => 100755 src/icons/16x16/actions/view-refresh.png mode change 100644 => 100755 src/icons/16x16/actions/view-restore.png mode change 100644 => 100755 src/icons/README.txt mode change 100644 => 100755 src/icons/index.theme mode change 100644 => 100755 src/icons/lgpl-2.1.txt mode change 100644 => 100755 src/icons/lgpl-3.0.txt create mode 100755 src/images/16x16/antimicro.ico create mode 100755 src/images/16x16/com.github.juliagoda.antimicro.png create mode 100755 src/images/24x24/antimicro.ico create mode 100755 src/images/24x24/com.github.juliagoda.antimicro.png create mode 100755 src/images/32x32/antimicro.ico create mode 100755 src/images/32x32/com.github.juliagoda.antimicro.png create mode 100755 src/images/48x48/antimicro.ico create mode 100755 src/images/48x48/com.github.juliagoda.antimicro.png create mode 100755 src/images/64x64/antimicro.ico create mode 100755 src/images/64x64/com.github.juliagoda.antimicro.png mode change 100644 => 100755 src/images/antimicro_trayicon.png mode change 100644 => 100755 src/images/axis.png mode change 100644 => 100755 src/images/button.png mode change 100644 => 100755 src/images/controllermap.png mode change 100644 => 100755 src/images/profile.jpg mode change 100644 => 100755 src/inputdaemon.cpp mode change 100644 => 100755 src/inputdaemon.h mode change 100644 => 100755 src/inputdevice.cpp mode change 100644 => 100755 src/inputdevice.h mode change 100644 => 100755 src/inputdevicebitarraystatus.cpp mode change 100644 => 100755 src/inputdevicebitarraystatus.h mode change 100644 => 100755 src/joyaxis.cpp mode change 100644 => 100755 src/joyaxis.h mode change 100644 => 100755 src/joyaxiscontextmenu.cpp mode change 100644 => 100755 src/joyaxiscontextmenu.h mode change 100644 => 100755 src/joyaxiswidget.cpp mode change 100644 => 100755 src/joyaxiswidget.h mode change 100644 => 100755 src/joybutton.cpp mode change 100644 => 100755 src/joybutton.h mode change 100644 => 100755 src/joybuttoncontextmenu.cpp mode change 100644 => 100755 src/joybuttoncontextmenu.h mode change 100644 => 100755 src/joybuttonmousehelper.cpp mode change 100644 => 100755 src/joybuttonmousehelper.h mode change 100644 => 100755 src/joybuttonslot.cpp mode change 100644 => 100755 src/joybuttonslot.h mode change 100644 => 100755 src/joybuttonstatusbox.cpp mode change 100644 => 100755 src/joybuttonstatusbox.h mode change 100644 => 100755 src/joybuttontypes/joyaxisbutton.cpp mode change 100644 => 100755 src/joybuttontypes/joyaxisbutton.h mode change 100644 => 100755 src/joybuttontypes/joycontrolstickbutton.cpp mode change 100644 => 100755 src/joybuttontypes/joycontrolstickbutton.h mode change 100644 => 100755 src/joybuttontypes/joycontrolstickmodifierbutton.cpp mode change 100644 => 100755 src/joybuttontypes/joycontrolstickmodifierbutton.h mode change 100644 => 100755 src/joybuttontypes/joydpadbutton.cpp mode change 100644 => 100755 src/joybuttontypes/joydpadbutton.h mode change 100644 => 100755 src/joybuttontypes/joygradientbutton.cpp mode change 100644 => 100755 src/joybuttontypes/joygradientbutton.h mode change 100644 => 100755 src/joybuttonwidget.cpp mode change 100644 => 100755 src/joybuttonwidget.h mode change 100644 => 100755 src/joycontrolstick.cpp mode change 100644 => 100755 src/joycontrolstick.h mode change 100644 => 100755 src/joycontrolstickbuttonpushbutton.cpp mode change 100644 => 100755 src/joycontrolstickbuttonpushbutton.h mode change 100644 => 100755 src/joycontrolstickcontextmenu.cpp mode change 100644 => 100755 src/joycontrolstickcontextmenu.h mode change 100644 => 100755 src/joycontrolstickdirectionstype.h mode change 100644 => 100755 src/joycontrolstickeditdialog.cpp mode change 100644 => 100755 src/joycontrolstickeditdialog.h mode change 100644 => 100755 src/joycontrolstickeditdialog.ui mode change 100644 => 100755 src/joycontrolstickpushbutton.cpp mode change 100644 => 100755 src/joycontrolstickpushbutton.h mode change 100644 => 100755 src/joycontrolstickstatusbox.cpp mode change 100644 => 100755 src/joycontrolstickstatusbox.h mode change 100644 => 100755 src/joydpad.cpp mode change 100644 => 100755 src/joydpad.h mode change 100644 => 100755 src/joydpadbuttonwidget.cpp mode change 100644 => 100755 src/joydpadbuttonwidget.h mode change 100644 => 100755 src/joykeyrepeathelper.cpp mode change 100644 => 100755 src/joykeyrepeathelper.h mode change 100644 => 100755 src/joystick.cpp mode change 100644 => 100755 src/joystick.h mode change 100644 => 100755 src/joystickstatuswindow.cpp mode change 100644 => 100755 src/joystickstatuswindow.h mode change 100644 => 100755 src/joystickstatuswindow.ui mode change 100644 => 100755 src/joytabwidget.cpp mode change 100644 => 100755 src/joytabwidget.h mode change 100644 => 100755 src/joytabwidgetcontainer.cpp mode change 100644 => 100755 src/joytabwidgetcontainer.h mode change 100644 => 100755 src/keyboard/virtualkeyboardmousewidget.cpp mode change 100644 => 100755 src/keyboard/virtualkeyboardmousewidget.h mode change 100644 => 100755 src/keyboard/virtualkeypushbutton.cpp mode change 100644 => 100755 src/keyboard/virtualkeypushbutton.h mode change 100644 => 100755 src/keyboard/virtualmousepushbutton.cpp mode change 100644 => 100755 src/keyboard/virtualmousepushbutton.h mode change 100644 => 100755 src/localantimicroserver.cpp mode change 100644 => 100755 src/localantimicroserver.h mode change 100644 => 100755 src/logger.cpp mode change 100644 => 100755 src/logger.h mode change 100644 => 100755 src/main.cpp mode change 100644 => 100755 src/mainsettingsdialog.cpp mode change 100644 => 100755 src/mainsettingsdialog.h mode change 100644 => 100755 src/mainsettingsdialog.ui mode change 100644 => 100755 src/mainwindow.cpp mode change 100644 => 100755 src/mainwindow.h mode change 100644 => 100755 src/mainwindow.ui mode change 100644 => 100755 src/messagehandler.cpp mode change 100644 => 100755 src/messagehandler.h mode change 100644 => 100755 src/mousedialog/mouseaxissettingsdialog.cpp mode change 100644 => 100755 src/mousedialog/mouseaxissettingsdialog.h mode change 100644 => 100755 src/mousedialog/mousebuttonsettingsdialog.cpp mode change 100644 => 100755 src/mousedialog/mousebuttonsettingsdialog.h mode change 100644 => 100755 src/mousedialog/mousecontrolsticksettingsdialog.cpp mode change 100644 => 100755 src/mousedialog/mousecontrolsticksettingsdialog.h mode change 100644 => 100755 src/mousedialog/mousedpadsettingsdialog.cpp mode change 100644 => 100755 src/mousedialog/mousedpadsettingsdialog.h mode change 100644 => 100755 src/mousedialog/springmoderegionpreview.cpp mode change 100644 => 100755 src/mousedialog/springmoderegionpreview.h mode change 100644 => 100755 src/mousedialog/uihelpers/mouseaxissettingsdialoghelper.cpp mode change 100644 => 100755 src/mousedialog/uihelpers/mouseaxissettingsdialoghelper.h mode change 100644 => 100755 src/mousedialog/uihelpers/mousebuttonsettingsdialoghelper.cpp mode change 100644 => 100755 src/mousedialog/uihelpers/mousebuttonsettingsdialoghelper.h mode change 100644 => 100755 src/mousedialog/uihelpers/mousecontrolsticksettingsdialoghelper.cpp mode change 100644 => 100755 src/mousedialog/uihelpers/mousecontrolsticksettingsdialoghelper.h mode change 100644 => 100755 src/mousedialog/uihelpers/mousedpadsettingsdialoghelper.cpp mode change 100644 => 100755 src/mousedialog/uihelpers/mousedpadsettingsdialoghelper.h mode change 100644 => 100755 src/mousehelper.cpp mode change 100644 => 100755 src/mousehelper.h mode change 100644 => 100755 src/mousesettingsdialog.cpp mode change 100644 => 100755 src/mousesettingsdialog.h mode change 100644 => 100755 src/mousesettingsdialog.ui mode change 100644 => 100755 src/qkeydisplaydialog.cpp mode change 100644 => 100755 src/qkeydisplaydialog.h mode change 100644 => 100755 src/qkeydisplaydialog.ui mode change 100644 => 100755 src/qtkeymapperbase.cpp mode change 100644 => 100755 src/qtkeymapperbase.h mode change 100644 => 100755 src/qtuinputkeymapper.cpp mode change 100644 => 100755 src/qtuinputkeymapper.h mode change 100644 => 100755 src/qtvmultikeymapper.cpp mode change 100644 => 100755 src/qtvmultikeymapper.h mode change 100644 => 100755 src/qtwinkeymapper.cpp mode change 100644 => 100755 src/qtwinkeymapper.h mode change 100644 => 100755 src/qtx11keymapper.cpp mode change 100644 => 100755 src/qtx11keymapper.h mode change 100644 => 100755 src/quicksetdialog.cpp mode change 100644 => 100755 src/quicksetdialog.h mode change 100644 => 100755 src/quicksetdialog.ui mode change 100644 => 100755 src/resources.qrc mode change 100644 => 100755 src/resources_windows.qrc mode change 100644 => 100755 src/sdleventreader.cpp mode change 100644 => 100755 src/sdleventreader.h mode change 100644 => 100755 src/setaxisthrottledialog.cpp mode change 100644 => 100755 src/setaxisthrottledialog.h mode change 100644 => 100755 src/setaxisthrottledialog.ui mode change 100644 => 100755 src/setjoystick.cpp mode change 100644 => 100755 src/setjoystick.h mode change 100644 => 100755 src/setnamesdialog.cpp mode change 100644 => 100755 src/setnamesdialog.h mode change 100644 => 100755 src/setnamesdialog.ui mode change 100644 => 100755 src/simplekeygrabberbutton.cpp mode change 100644 => 100755 src/simplekeygrabberbutton.h mode change 100644 => 100755 src/slotitemlistwidget.cpp mode change 100644 => 100755 src/slotitemlistwidget.h mode change 100644 => 100755 src/springmousemoveinfo.h mode change 100644 => 100755 src/stickpushbuttongroup.cpp mode change 100644 => 100755 src/stickpushbuttongroup.h mode change 100644 => 100755 src/uihelpers/advancebuttondialoghelper.cpp mode change 100644 => 100755 src/uihelpers/advancebuttondialoghelper.h mode change 100644 => 100755 src/uihelpers/buttoneditdialoghelper.cpp mode change 100644 => 100755 src/uihelpers/buttoneditdialoghelper.h mode change 100644 => 100755 src/uihelpers/dpadcontextmenuhelper.cpp mode change 100644 => 100755 src/uihelpers/dpadcontextmenuhelper.h mode change 100644 => 100755 src/uihelpers/dpadeditdialoghelper.cpp mode change 100644 => 100755 src/uihelpers/dpadeditdialoghelper.h mode change 100644 => 100755 src/uihelpers/gamecontrollermappingdialoghelper.cpp mode change 100644 => 100755 src/uihelpers/gamecontrollermappingdialoghelper.h mode change 100644 => 100755 src/uihelpers/joyaxiscontextmenuhelper.cpp mode change 100644 => 100755 src/uihelpers/joyaxiscontextmenuhelper.h mode change 100644 => 100755 src/uihelpers/joycontrolstickcontextmenuhelper.cpp mode change 100644 => 100755 src/uihelpers/joycontrolstickcontextmenuhelper.h mode change 100644 => 100755 src/uihelpers/joycontrolstickeditdialoghelper.cpp mode change 100644 => 100755 src/uihelpers/joycontrolstickeditdialoghelper.h mode change 100644 => 100755 src/uihelpers/joytabwidgethelper.cpp mode change 100644 => 100755 src/uihelpers/joytabwidgethelper.h mode change 100644 => 100755 src/uinputhelper.cpp mode change 100644 => 100755 src/uinputhelper.h mode change 100644 => 100755 src/unixcapturewindowutility.cpp mode change 100644 => 100755 src/unixcapturewindowutility.h mode change 100644 => 100755 src/unixwindowinfodialog.cpp mode change 100644 => 100755 src/unixwindowinfodialog.h mode change 100644 => 100755 src/unixwindowinfodialog.ui mode change 100644 => 100755 src/vdpad.cpp mode change 100644 => 100755 src/vdpad.h mode change 100644 => 100755 src/winappprofiletimerdialog.cpp mode change 100644 => 100755 src/winappprofiletimerdialog.h mode change 100644 => 100755 src/winappprofiletimerdialog.ui mode change 100644 => 100755 src/winextras.cpp mode change 100644 => 100755 src/winextras.h mode change 100644 => 100755 src/x11extras.cpp mode change 100644 => 100755 src/x11extras.h mode change 100644 => 100755 src/xmlconfigmigration.cpp mode change 100644 => 100755 src/xmlconfigmigration.h mode change 100644 => 100755 src/xmlconfigreader.cpp mode change 100644 => 100755 src/xmlconfigreader.h mode change 100644 => 100755 src/xmlconfigwriter.cpp mode change 100644 => 100755 src/xmlconfigwriter.h create mode 100644 tests/CMakeLists.txt create mode 100644 tests/testaboutdialog.cpp mode change 100644 => 100755 windows/AntiMicro.wxs mode change 100644 => 100755 windows/AntiMicro_64.wxs diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index 51185efc4..ade75a0bf --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ *.qm *.diff *.mo +.flatpak-builder Makefile antimicro !share/antimicro @@ -19,6 +20,7 @@ vmulti/ windows/*.msi windows/*.wix* build/ +build-dir/ Build/ CMakeLists.txt.user* other/antimicro.1.gz diff --git a/AntiMicro Future Developments.mm b/AntiMicro Future Developments.mm old mode 100644 new mode 100755 diff --git a/BuildOptions.md b/BuildOptions.md old mode 100644 new mode 100755 diff --git a/CMakeLists.txt b/CMakeLists.txt old mode 100644 new mode 100755 index 024c3659b..3c432894e --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} "${CMAKE_CURRENT_S if (NOT WIN32) -find_package(ECM 5.43.0 REQUIRED CONFIG) +find_package(ECM REQUIRED CONFIG) endif(NOT WIN32) set(CMAKE_INCLUDE_CURRENT_DIR ON) @@ -41,11 +41,14 @@ endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) endif(UNIX AND NOT APPLE) include(CheckCXXCompilerFlag) +include(GNUInstallDirs) CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) + if(COMPILER_SUPPORTS_CXX11) if (NOT WIN32) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden -Werror -Wall -Wextra -Wno-unused-parameter -Wunused-function -Wunused-label -Wunused-value -Wunused-variable -Wunused-but-set-parameter -pedantic -Wno-reorder -std=c++11") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wstrict-null-sentinel -Wstrict-overflow=5 -Wundef -Wno-unused -std=c++11") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") endif() @@ -68,11 +71,16 @@ set(ANTIMICRO_MAJOR_VERSION 2) set(ANTIMICRO_MINOR_VERSION 24) set(ANTIMICRO_PATCH_VERSION 0) +option(WITH_TESTS "Allow tests for classes" OFF) option(USE_SDL_2 "Use SDL 2 libraries." ON) +if(WITH_TESTS) + message("Tests enabled") +endif(WITH_TESTS) + if(UNIX) option(WITH_X11 "Compile with support for X11." ON) - option(WITH_UINPUT "Compile with support for uinput. uinput will be usable to simulate events." ON) + option(WITH_UINPUT "Compile with support for uinput. uinput will be usable to simulate events." OFF) option(WITH_XTEST "Compile with support for XTest. XTest will be usable to simulate events." ON) option(APPDATA "Build project with AppData file support." ON) endif(UNIX) @@ -230,7 +238,6 @@ set(antimicro_SOURCES src/slotitemlistwidget.cpp src/eventhandlers/baseeventhandler.cpp src/eventhandlerfactory.cpp - src/profileimporter.cpp src/uihelpers/advancebuttondialoghelper.cpp src/uihelpers/buttoneditdialoghelper.cpp src/uihelpers/joytabwidgethelper.cpp @@ -245,6 +252,7 @@ set(antimicro_SOURCES src/mousedialog/uihelpers/mousecontrolsticksettingsdialoghelper.cpp src/mousedialog/uihelpers/mousedpadsettingsdialoghelper.cpp src/calibration.cpp + src/globalvariables.cpp ) set(antimicro_HEADERS @@ -328,7 +336,6 @@ set(antimicro_HEADERS src/slotitemlistwidget.h src/eventhandlers/baseeventhandler.h src/eventhandlerfactory.h - src/profileimporter.h src/uihelpers/advancebuttondialoghelper.h src/uihelpers/buttoneditdialoghelper.h src/uihelpers/joytabwidgethelper.h @@ -343,6 +350,7 @@ set(antimicro_HEADERS src/mousedialog/uihelpers/mousecontrolsticksettingsdialoghelper.h src/mousedialog/uihelpers/mousedpadsettingsdialoghelper.h src/calibration.h + src/globalvariables.h ) set(antimicro_FORMS src/mainwindow.ui @@ -366,7 +374,6 @@ set(antimicro_FORMS src/mainwindow.ui src/extraprofilesettingsdialog.ui src/capturedwindowinfodialog.ui src/calibration.ui - src/profileimporter.ui ) set(antimicro_RESOURCES src/resources.qrc) @@ -454,33 +461,6 @@ elseif(WIN32) endif(WITH_VMULTI) endif(UNIX) -set(USE_QT5 OFF) - -if(UNIX) - # Check if Qt 5 was specified using an environment variable - # or by specifying -DQT_QMAKE_EXECUTABLE. - # Otherwise, check for Qt libraries. - if("$ENV{QT_SELECT}" EQUAL 5) - set(USE_QT5 ON) - elseif(QT_QMAKE_EXECUTABLE MATCHES ".*/qmake-qt5") - set(USE_QT5 ON) - else() - find_package(Qt5Core QUIET) - if(Qt5Core_FOUND) - set(USE_QT5 ON) - endif(Qt5Core_FOUND) - endif("$ENV{QT_SELECT}" EQUAL 5) -elseif(WIN32) - # Use Qt5 on Windows. - set(USE_QT5 ON) -endif(UNIX) - -if(USE_QT5) - message("Qt5 has been found") -else() - message(FATAL_ERROR "No Qt version was specified.") -endif(USE_QT5) - if(USE_SDL_2) add_definitions(-DUSE_SDL_2) endif(USE_SDL_2) @@ -506,7 +486,6 @@ if(UNIX) endif(UNIX) if (UNIX) - if (USE_QT5) find_package(Qt5Widgets REQUIRED) find_package(Qt5Core REQUIRED) @@ -517,12 +496,11 @@ if (UNIX) QT5_WRAP_CPP(antimicro_HEADERS_MOC ${antimicro_HEADERS}) QT5_WRAP_UI(antimicro_FORMS_HEADERS ${antimicro_FORMS}) QT5_ADD_RESOURCES(antimicro_RESOURCES_RCC ${antimicro_RESOURCES}) + add_subdirectory("share/antimicro/translations") set(CMAKE_POSITION_INDEPENDENT_CODE ON) - endif(USE_QT5) - elseif(WIN32) find_package(Qt5Widgets REQUIRED) @@ -555,59 +533,11 @@ if(UNIX) endif(USE_SDL_2) elseif (WIN32) if(USE_SDL_2) - set(SDL2_LIBRARY "") - set(SDL2_LIBRARY_DIR "") - set(SDL2_INCLUDE_DIR "") - set(SDL2_DLL_LOCATION_DIR "") - - if (MSYS OR MINGW) - find_package(PkgConfig QUIET) - if(PKG_CONFIG_FOUND) - #include(FindPkgConfig) - - pkg_check_modules(SDL2 QUIET sdl2) - if(SDL2_FOUND) - #find_path(SDL2_INCLUDE_DIR "SDL2/SDL.h" HINTS ${SDL2_INCLUDE_DIRS}) - - set(SDL2_LIBRARY ${SDL2_LIBRARIES}) - set(SDL2_LIBRARY_DIR ${SDL2_LIBRARY_DIRS}) - set(SDL2_INCLUDE_DIR ${SDL2_INCLUDE_DIRS}) - unset(SDL2_DLL_LOCATION_DIR) - find_path(SDL2_DLL_LOCATION_DIR "SDL2.dll" HINTS "${SDL2_LIBRARY_DIRS}/../bin") - #set(SDL2_DLL_LOCATION_DIR "${SDL2_LIBRARY_DIRS}/../bin") - - list(APPEND LIBS ${SDL2_LIBRARIES}) - endif(SDL2_FOUND) - endif(PKG_CONFIG_FOUND) - endif(MSYS OR MINGW) - - if (NOT SDL2_LIBRARY) - # Perform extra voodoo to get proper library paths and include - # proper headers. - file(GLOB SDL2_BASE_DIR "${PROJECT_SOURCE_DIR}/SDL2-*.*.*/") - - if (SDL2_BASE_DIR) - unset(SDL2_LIBRARY) - - if(TARGET_ARCH STREQUAL "x86_64") - set(SDL2_LIBRARY_DIR "${SDL2_BASE_DIR}/x86_64-w64-mingw32/lib") - set(SDL2_INCLUDE_DIR "${SDL2_BASE_DIR}/x86_64-w64-mingw32/include") - set(SDL2_DLL_LOCATION_DIR "${SDL2_BASE_DIR}/x86_64-w64-mingw32/bin") - - find_library(SDL2_LIBRARY SDL2 ${SDL2_LIBRARY_DIR}) - list(APPEND LIBS ${SDL2_LIBRARY}) - include_directories(${SDL2_INCLUDE_DIR}) - else() - set(SDL2_LIBRARY_DIR "${SDL2_BASE_DIR}/i686-w64-mingw32/lib") - set(SDL2_INCLUDE_DIR "${SDL2_BASE_DIR}/i686-w64-mingw32/include") - set(SDL2_DLL_LOCATION_DIR "${SDL2_BASE_DIR}/i686-w64-mingw32/bin") - - find_library(SDL2_LIBRARY SDL2 ${SDL2_LIBRARY_DIR}) - list(APPEND LIBS ${SDL2_LIBRARY}) - include_directories(${SDL2_INCLUDE_DIR}) - endif(TARGET_ARCH STREQUAL "x86_64") - endif(SDL2_BASE_DIR) - endif(NOT SDL2_LIBRARY) + + if(SDL2_LIBRARY_DIR AND SDL2_INCLUDE_DIR) + list(APPEND LIBS ${SDL2_LIBRARY}) + include_directories(${SDL2_INCLUDE_DIR}) + endif(SDL2_LIBRARY_DIR AND SDL2_INCLUDE_DIR) add_definitions(-DUNICODE -D_UNICODE) endif(USE_SDL_2) @@ -634,35 +564,64 @@ if(UNIX) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") endif(UNIX) - -if(USE_QT5) if(UNIX) - add_executable(antimicro ${antimicro_MAIN} ${antimicro_HEADERS_MOC} ${antimicro_SOURCES} ${antimicro_FORMS_HEADERS} ${antimicro_RESOURCES_RCC}) - target_link_libraries (antimicro Qt5::Widgets Qt5::Core Qt5::Gui Qt5::Network) + add_library( antilib + SHARED + ${antimicro_HEADERS_MOC} + ${antimicro_SOURCES} + ${antimicro_FORMS_HEADERS} + ${antimicro_RESOURCES_RCC} + ) + + target_link_libraries (antilib Qt5::Widgets Qt5::Core Qt5::Gui Qt5::Network ${SDL2_LIBRARIES} ${LIBS}) + + add_executable(antimicro ${antimicro_MAIN}) + target_link_libraries (antimicro antilib Qt5::Widgets Qt5::Core Qt5::Gui Qt5::Network) + elseif(WIN32) + + add_library( antilib + SHARED + ${antimicro_HEADERS_MOC} + ${antimicro_SOURCES} + ${antimicro_FORMS_HEADERS} + ${antimicro_RESOURCES_RCC} + src/antimicro.rc + ) + # The WIN32 is required to specify a GUI application. - add_executable(antimicro ${antimicro_MAIN} ${antimicro_HEADERS_MOC} ${antimicro_SOURCES} ${antimicro_FORMS_HEADERS} ${antimicro_RESOURCES_RCC} src/antimicro.rc) - target_link_libraries (antimicro Qt5::Widgets Qt5::Core Qt5::Gui Qt5::Network) + add_executable(antimicro ${antimicro_MAIN}) + target_link_libraries (antimicro antilib Qt5::Widgets Qt5::Core Qt5::Gui Qt5::Network ${LIBS}) endif(UNIX) target_compile_definitions(antimicro PUBLIC QT_DEBUG_NO_OUTPUT) # should be commented during development -endif(USE_QT5) -# Add link libraries. -#message(${LIBS}) -target_link_libraries(antimicro ${LIBS}) # Specify out directory for final executable. if(UNIX) - install(TARGETS antimicro RUNTIME DESTINATION "bin") + install(TARGETS antimicro RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install(TARGETS antilib DESTINATION "${CMAKE_INSTALL_LIBDIR}") + install(FILES ${antimicro_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/antimicro") elseif(WIN32) install(TARGETS antimicro RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}) + install(TARGETS antilib + RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT runtime + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" COMPONENT devel) + install(FILES ${antimicro_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") endif(UNIX) if(UNIX) - install(FILES src/images/antimicro.png DESTINATION "share/pixmaps") - install(FILES other/antimicro.desktop DESTINATION "share/applications") - install(FILES other/antimicro.xml DESTINATION "share/mime/packages") + install(FILES src/images/32x32/com.github.juliagoda.antimicro.png DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/pixmaps") + install(FILES src/images/16x16/com.github.juliagoda.antimicro.png DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/16x16/apps") + install(FILES src/images/24x24/com.github.juliagoda.antimicro.png DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/24x24/apps") + install(FILES src/images/32x32/com.github.juliagoda.antimicro.png DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/32x32/apps") + install(FILES src/images/48x48/com.github.juliagoda.antimicro.png DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/48x48/apps") + install(FILES src/images/64x64/com.github.juliagoda.antimicro.png DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/64x64/apps") + + + install(FILES other/com.github.juliagoda.antimicro.desktop DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications") + install(FILES other/com.github.juliagoda.antimicro.xml DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/mime/packages") endif(UNIX) # Add man page for *nix platforms. @@ -750,7 +709,7 @@ if(WIN32) list(APPEND EXTRA_DLL_FILES ${GCC_DLL} - "${SDL2_BASE_DIR}/i686-w64-mingw32/bin/SDL2.dll" + "${SDL2_BASE_DIR}/i686-w64-mingw32/bin/SDIRDL2.dll" ) endif(TARGET_ARCH STREQUAL "x86_64") @@ -804,7 +763,6 @@ if(WIN32) install(CODE "execute_process(COMMAND \"C:/Program Files (x86)/Windows Kits/8.1/bin/x64/signtool.exe\" sign /v /a /s ROOT /n antimicro ${CMAKE_INSTALL_PREFIX}/antimicro.exe)") endif(PERFORM_SIGNING) - # Set variables needed for MSI building. set(MSIFOLDER "${PROJECT_SOURCE_DIR}/windows") set(WIXENV $ENV{WIX}) @@ -825,7 +783,7 @@ if(WIN32) set(MSIFILENAME "${MSIFILENAME}.${ANTIMICRO_PATCH_VERSION}") endif(ANTIMICRO_PATCH_VERSION AND NOT ANTIMICRO_PATCH_VERSION EQUAL 0) - # Change output file depending on the target architecture. + # Change outputlib file depending on the target architecture. if(TARGET_ARCH STREQUAL "x86_64") set(WIXMSI "${MSIFOLDER}/antimicro-${MSIFILENAME}-win64.msi") else() @@ -859,3 +817,10 @@ if(WIN32) install(FILES gpl.txt Changelog README.md ProfileTips.md DESTINATION ${CMAKE_INSTALL_PREFIX}) endif(WIN32) + + + +if(WITH_TESTS) + enable_testing () + add_subdirectory (tests) +endif(WITH_TESTS) diff --git a/Changelog b/Changelog old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/ProfileTips.md b/ProfileTips.md old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 index b20ca782e..2351b3a6a --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# antimicro 2.23 +# antimicro 2.24 1. [Description](#description) 2. [License](#license) diff --git a/Resources.txt b/Resources.txt old mode 100644 new mode 100755 diff --git a/cmake_uninstall.cmake.in b/cmake_uninstall.cmake.in old mode 100644 new mode 100755 diff --git a/com.github.juliagoda.antimicro.json b/com.github.juliagoda.antimicro.json new file mode 100644 index 000000000..3da903de0 --- /dev/null +++ b/com.github.juliagoda.antimicro.json @@ -0,0 +1,36 @@ +{ + "app-id": "com.github.juliagoda.antimicro", + "runtime": "org.kde.Platform", + "runtime-version": "5.11", + "sdk": "org.kde.Sdk", + "command": "antimicro", + "finish-args": [ + "--device=all", + "--socket=x11", + "--socket=fallback-x11", + "--share=ipc", + "--share=network", + "--talk-name=org.freedesktop.Notifications", + "--talk-name=org.kde.StatusNotifierWatcher", + "--socket=system-bus" + ], + "modules": [ + { + "name": "antimicro", + "buildsystem": "cmake", + "builddir": true, + "config-opts": [ + "-DAPPDATA=ON", + "-DUSE_SDL_2=ON", + "-DWITH_UINPUT=OFF", + "-DWITH_XTEST=ON", + "-DCMAKE_BUILD_TYPE=Release" + ], + "sources": [ + { + "type": "git", + "url": "https://github.com/juliagoda/antimicro.git" + }] + } + ] +} diff --git a/other/40-uinput.rules b/other/40-uinput.rules old mode 100644 new mode 100755 diff --git a/other/CMakeLists.txt b/other/CMakeLists.txt old mode 100644 new mode 100755 index bb8977bde..10b3cabfd --- a/other/CMakeLists.txt +++ b/other/CMakeLists.txt @@ -4,4 +4,4 @@ add_custom_target(manpage) add_custom_command(TARGET manpage PRE_BUILD COMMAND gzip -c "${PROJECT_SOURCE_DIR}/other/antimicro.1" > "antimicro.1.gz" VERBATIM ) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/antimicro.1.gz" DESTINATION "share/man/man1") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/antimicro.1.gz" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/man/man1") diff --git a/other/antimicro.1 b/other/antimicro.1 old mode 100644 new mode 100755 diff --git a/other/appdata/CMakeLists.txt b/other/appdata/CMakeLists.txt old mode 100644 new mode 100755 index 8fe97cc1c..f54e7424d --- a/other/appdata/CMakeLists.txt +++ b/other/appdata/CMakeLists.txt @@ -8,9 +8,9 @@ if(APPDATA) # Add an entry per language COMMAND msgfmt "${PROJECT_SOURCE_DIR}/other/appdata/PO_files/en.po" -o "${CMAKE_CURRENT_BINARY_DIR}/PO_files/en.mo" - COMMAND itstool -i "${PROJECT_SOURCE_DIR}/other/appdata/appdata.its" -j "${PROJECT_SOURCE_DIR}/other/appdata/antimicro.appdata.xml.in" -o "antimicro.appdata.xml" "${CMAKE_CURRENT_BINARY_DIR}/PO_files/*.mo" + COMMAND itstool -i "${PROJECT_SOURCE_DIR}/other/appdata/appdata.its" -j "${PROJECT_SOURCE_DIR}/other/appdata/com.github.juliagoda.antimicro.appdata.xml.in" -o "com.github.juliagoda.antimicro.appdata.xml" "${CMAKE_CURRENT_BINARY_DIR}/PO_files/*.mo" ) # Only install an appdata file if the user requested to have one built. - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/antimicro.appdata.xml" DESTINATION "share/appdata") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/com.github.juliagoda.antimicro.appdata.xml" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo") endif(APPDATA) diff --git a/other/appdata/PO_files/en.po b/other/appdata/PO_files/en.po old mode 100644 new mode 100755 diff --git a/other/appdata/appdata.its b/other/appdata/appdata.its old mode 100644 new mode 100755 diff --git a/other/appdata/com.github.juliagoda.antimicro.appdata.xml.in b/other/appdata/com.github.juliagoda.antimicro.appdata.xml.in new file mode 100644 index 000000000..305b93ff2 --- /dev/null +++ b/other/appdata/com.github.juliagoda.antimicro.appdata.xml.in @@ -0,0 +1,80 @@ + + + com.github.juliagoda.antimicro.desktop + CC0-1.0 + GPL-3.0+ + antimicro + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. + +

+ antimicro is a graphical program used to map keyboard keys and mouse + controls to a gamepad. This program is useful for playing PC games using a + gamepad that do not have any form of built-in gamepad support. +

+

+ antimicro was inspired by QJoyPad but has additional features. +

+
+ https://github.com/juliagoda/antimicro + + +​ + + + + + + antimicro + + juliagoda.pl_AT_protonmail.com + + ModernToolkit + + + + https://raw.githubusercontent.com/juliagoda/antimicro/master/other/appdata/screenshots/application_trayicon.png + Application Tray Icon + + + https://raw.githubusercontent.com/juliagoda/antimicro/master/other/appdata/screenshots/controller_callibration_dark_theme.png + Controller Calibration (Dark Theme) + + + https://raw.githubusercontent.com/juliagoda/antimicro/master/other/appdata/screenshots/controller_main_window_dark_theme_1.png + Profile Configuration Dialog 1 (Dark Theme) + + + https://raw.githubusercontent.com/juliagoda/antimicro/master/other/appdata/screenshots/controller_main_window_dark_theme_2.png + Profile Configuration Dialog 2 (Dark Theme) + + + https://raw.githubusercontent.com/juliagoda/antimicro/master/other/appdata/screenshots/controller_configure_dark_theme.png + Analog Sticks Configuration Dialog (Dark Theme) + + + https://raw.githubusercontent.com/juliagoda/antimicro/master/other/appdata/screenshots/controller_mapping_dark_theme.png + Controller Mapping Dialog (Dark Theme) + + + https://github.com/juliagoda/antimicro + juliagoda.pl_AT_protonmail.com + + game + controller + joystick + keyboard + mouse + + + none + none + none + none + none + none + none + none + none + none + +
diff --git a/other/appdata/screenshots/about_window.png b/other/appdata/screenshots/about_window.png new file mode 100644 index 0000000000000000000000000000000000000000..ffcfbb9a1cda80fcad06bf26a14a16b147ce40a0 GIT binary patch literal 69497 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 Z`9Id;$V3^1E4lyx002ovPDHLkV1gS|$Xfsa literal 0 HcmV?d00001 diff --git a/other/appdata/screenshots/application_trayicon.png b/other/appdata/screenshots/application_trayicon.png new file mode 100644 index 0000000000000000000000000000000000000000..83e8d296930dd3c0d1da7144110d2120f9e2704e GIT binary patch literal 65231 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 literal 0 HcmV?d00001 diff --git a/other/appdata/screenshots/controller_callibration_dark_theme.png b/other/appdata/screenshots/controller_callibration_dark_theme.png new file mode 100644 index 0000000000000000000000000000000000000000..287a61f387e4a9906187a6682a68a0b600cdf403 GIT binary patch literal 99622 zcmYIu1yq|$+b!-+ad&rjTHL)rad(#h!QE-m;#Q!zYjAfcuEC|n-Qm)6zVqLAB`Yh* znt4X{BYV$8sVd8$A`v1%KtQ0%$x5n2KtP?nzatRf-hbhsF1CFCfN}dIr-|_X_#&7` zzJDihm(p?9aI$m-B9pFwwtLO_s1$Vq07=n)ZVuE9|9-zaB5!QD*clrzZ%c?F%(us2$eV^0N81%c`x)Wkp9 zTFa4Bgf@(=7wJ0zL08XUvEt+R2Ta>KX23cH&k7Q{8ozqB+)uaayvp2omR_z7P=SH? z*l?v(=u8KRqy{zl=1&kn&|E>D2dg%k`CAd0JhAjM!(Os8onRNVMSZ}dg(OUo>FI}T zJ%q7F0n^Wte!6iC7nWW$uBjI>Wsz`_0v@4@uuN~91ZD-a!J}QQ%6^}%O@F?`_S_2% z>aj6N<9G3IIcz#)8Us^7icLWeym4G?bC#MW0bK~8qcKo8hF0Rqd77u!$Gq(if@Z+a zwZcyjdjXQzW2}aepZv(ny7rjCz#%j;4e(hoOVp&3k+pXe|7r5Ar}L?>lgpkqHmg}H zuTMa$xh_tv=)T80eI{3zOLv)C}rAH_A_K44ZbKNSo<{^b3=E?tYPnfUfSsGAq- z_j)m<{mAuGByUq5czY~#Y~QG)eU-Xwy<&&l+3@6KsgI=DbuV$(@fh3{G6p-9u*JFcJ4a;uj_jn$!WzT~ zI7XUdq0~v;oA7+aRQ+6>%T$CkiOgEAituTTNI1(C9F&jgGSD1I&qUQez;J}@Q+WZ? zsWIrO5;$6kK12wp!4?<(NE=U}9JLu9E!s^SRE!}PF$#me5E&$p@Dm#cO9Jcrmey*F z&M4*;=8K%~$3j(IQ^82OoQgoNn|;`0?d6>Wq$rw$PZTYv5^xMD0)igKU#$J=78uHd zy2X!;p3KRnbrr(yG~!#_RK7nn)gz%Hq}!gO(*g_zNSL8K_ZEtvahCj#;?t!JPFiy* zfYhph$*@nDHx9UJPkcsxVWXjsGP@(}n%phuebCl5Q_@ITKOdooD$e91n^Ku;vHe`v zsVVTJdMtX6G7G_OWBVP}QA?s&E*z&?n-0Ylv^;802KqsN^qG&wbQx4JZM_gG)E_!Aq6FDw1Yw`$%35v^Sv99aV}E+uBPvdEP*L|bNb9Bs zl)2D`OMlOT9AY%?x{n{p^GB?b2R9xnwF8@A?=0A!I23@pN2@D1nG|taUSyU^9!Iw; z@)3mRM6U5t4k0+ghA}PEu#)A04uWsINJ}|P?XWC_VMy2Sptm_@hOejV51AFV@<>$* zx_y2j`?*%fJR?}&DIZkX$kxUJP#nb7uA*Nw)b0o3Rhzb&iWagYvseRMg{juEA;k(C z2TqVD(axnndSD>|{#mHKXDuvMtQF&&5`(90QTU?g_*4;rZJ0e9hLN09y@expHG_|o zlN=vmiLkIA+Cd*H&gJN4gWB6fddgi#VbH$%8rm3%!=KdG;f};g!M1g!4B6$A?`Yj+ z+@$#A{k+9<5p|={)*+4=6~*^4*r30RzWeIE^@lR_WbA_daN0{xy zznLyN1y-xOIWZ49z(>dvtC|c$QZ+pFy`hn8o4-UKB*tNMQlx)<| zOI^!&oXgvlU%k+QUO*BDNvqs5V7=6H020Bs8v?Bx-1Ucxct58Ku;xKj%Tf7SOoQ)) zd1bTYtsG)Q?!|XJ!Y6eg zL>|kr^cO}Ahllj|02^>pnJLQ=0=pfNGwJ?&B<}e!xxsXg#F%6rAMqHmZ(XHV8gUTs z?rIi!G}uj-Kiz~&NO4YBZ0yeb%yPgY*6G;k>Xut1bL5qh#iQz!z{}93bI+e<@hBk+ ze=_KFSQXNp5kB*Q%c3+)G66+j``&c2ba+G^P6-(DI&HMZLm-0vJwt)CYmA?g%cre= zbbzhS@KV9BO8JE>#8~^@W1Rc2kB64tU>ZB2dr#P*yYtJO5;PK#$*@0D4noH#i>(7d zT|7GR&kq|{-*5=ixCVDI3$|YLLJ@ElugVMJn-%jFGyRvWz4VdRSQvX}vl|tyGwKv`R(i`G68|k$^o#h4G!P z?N0RrXN)YpGPA2Vddv($JyPSrM%YEOM1PdQsv&HZK~GZSWYyy00wXs?O?$P4*>YF? zG1K-Zr7)Nvk}|3m$jhj^nnY^$Vcfz(w|*c8)CSs8n$!AaR(lL@1s@b$b>RJIbV>ZR z`8NYz`Qdv>1Q^Oe+afhJ!*ypxi~f;?YRcT~Ejrd3Px z!ASQW1c6Un1`7;FEl3vAJrMM^jMzV%AVlK&J%|jXyIKCqxjRO3Es=`Vh}WR@F&sP< zKG5$f{py)$+^V`U1@QF&puVSSPrN_ay1gQ1PG>u0{8N-IFRa#1#pY~d2MKtP5v#f5b<`;i$(VwE>lJstpVs!a~FU}(5ay~rY;q>Zvd z@qmY$N{SCWA+1;;@RbreSrt4{#(QHQL-4(j5~jZcT3S662u?@zqt7EaVg!5`wwK(~ zCA}_yuX6bC%al*YNLDCniQwWuXo?fIE;KsW_u?u{4by0y?G(1s%}V^!0*LhDTwnoj zL+$8K6#CgFqGRrHNH=h@d%b)z47Un@@|Sr}3{py~eXRcarUX+DzuRJGAPd1+29o`; zvyRr>?HDdax(DLsh9|nd;>RZOE88m(V#ado>qm!Ruc=z0bE>zbVOT=8;DUDM#22oi zK5UoZy94+;iw1rM_uxxuD4gFcsMnCfE*hKd$U$h?ey)gW=r8pOSs-KUN6*T6R{#6Uoe>W&j_KOm~)-a=2M|8 zLXdG7hFwKQA-6VxT+n|0_5Hy6dn9UyVeRat({cJKptYFHZQsvM)!52b2@9uqeHngv zX@yfM4(Jr|MXfoPw6u9~Q2(eJehARMa7`bJ+MVKI~npIgMxuD|bv zR4I{Hwb{mh(*L}784(WKoMfdph~h*5YrPj6po|jMyAa$PRd!w!^7L#uKHu5oD%AzG zx)5)T2YKQR=9+XpGbKMI*okz!`>1tCKI*ld?Xc^;mAx?u&}+vaP-y@Li_9WsrHsc1 zOo2DHfpUe8a(l-$6(nY1{UAW#&)ypddLeFp3t(p9d7qOHjt=A01vZxd>xC73F+5&F zJ$eMQ8WH&@QMKlwDymbG@DWivO%9c2$Jytc17z`Ra(o9VgfNbh04`F&$s9X1=N~=?u>Y@c}v<)~Zar9iXIDHTO zpwOYaUdz3*k!QN~Pm;)Gofv0+&UA>#8&}{=eHKbIu}k8koIao)E%6Z%t#&&eIq?c( z%aFS<(LpWfJ4kIA8T7X65htTGrrjELHEu+Y5*sVad`QDOP3Lx7#Rl$x%4aGahJ!i? zZ vV>7f&rN1C83rHFyKjUXCczaZm>`y)rz}wXmm2H|#6Mxw{QN4#^(lDw)Yo9z4 z6y@3mx1Oq>3YT>8rx_txAc7?tx4{n!O-ZHF4OgX*E(2XG81rnteaS-;#Y4QldgY$hXE}Orh{$jwjRvd&Wys*9eLoY2IveJJ0vE#sTc|{Gv zRgBaRUF_t5`4qFSU3qs2APr>Vlr0qgbk*3OXh+KR&o895Y|Ry$BwT8|)^#G&4;mEV zFHb#?Jq%_CND4+ZZSVzkFUaY~rak3}o6qB}lWZ#eR-EvW*$lZ_D%K#&+Xy?RNhz%= zFTl}F^;hUCH{mldAD==*S6pyTJjUxTn3erf^V^~yPTK%J^U+C~EV??qpEk#C9L^*a zxGyGRvFC0R$S@atB~iQa8pYNOKHrayX1IBDxyRy}m6i6DYQ`{ReX0sFs{4*@nG7q? z%OWPfj{-MLJsT}jS>xL zIn^#9>^g&gYNuPHd1{97hhH758xbk-+CyINg{+f^bBBbNxxFWR@eMZ@ts5N7^VfV| zpzx_YJR?}{%*!G1gC6yw!0&s8UI?j~4AKl?G)Q{hW9AK+bxeJUf?S@iI z3upUIVJFzj{l;K6=<#BofM%xNRq4I-(+Q$(ht`R+K?i?WxYSLlT!G?dG*~{j&h)ZK z&Ty8&qzZ4oTENBDD+=04$HU{NWLnd4V(o#_CzXTgR*hfV{hfu*uGKn$x1TV%qDVCl zVm2_GMSg#&S?Bj$ZF*59V99uU*s*(lsT8CyrA+5tA2epiM}Z6JF<#RDpo)cUT8b8* z#gj2b+C?Y-QE@;u5Xa5vks7!5`;K|SKr-IdX;HZg28(X*OBkQ_)@QAqkN(aI%vpY0xYnBU4hm*Ji>jyV7bwe3hRx~(5c52NbJIe@c|Zc{s~U#1;# z2`a-*Ni!u)jkQPrvxy&#@Kw=JzQGbk;e+5EYwpG2<0X z+ka-Jog(QQDr=vUHyo9H#ztNoA94ULSBmnq&CaydK*?9-_r<`!?5Af4%E^IpisJse zy!q%C;BP+$ycJqplcwx~TK3v!X;~d@W!V-%o@QXKjgG}+q6e%ZY)$!5?(Tly+R^J5fx6Xsloi|f(4LmtiqEEWY%VzMqtwQ(PAxzQUe0CdH z7K;l_{|wVFe2Fkh*BUkT^17wB*P9flGE%72n!8}Y8#$Ff_lwml3`f*DDqJ70cA**~60WK?nDx#aoU^VGWR;gFvCf9@Q*fDTiei>%oXh+tqQF2NSGIU?0A&gy z|K)J&+EoJF%AB+3x>LYy7Be$Y4(F|DNJ&bI)BE&vJYAHa@mem&aBT~H=$q$F5`kU{ z)RFx=NFFdS1y@!M53T94|3H%G(C63HMUVdZBka^pCVUc2)D*v|eaXv6KZbTY(4pL_372D!Ro5e4#+3>^UPMPFME|<-i1p z;amOE{5i6his?8MfDQsk44Pm2pX;?&HBFk=SbJV0NB*evTB(-sXd zT)=IA!di#2ozoQ^0V)lvD-%yuabA4*C?O_qVOHk;`|&uQ<`H3jO#yph13ZnP?2JpZ53U{Lmkd!SN- zK&4ex`-cx#>6{iw5O#KU-lwex)@v=_;*JRMMI3!|y*Hl<4W?YGB&WY%*005K(XY{I zX2X9D5?=%EODVnfRcxocFMjyPNS>UXDS-?Zjxa~RI5K@8QNn!j%ktFoL-T1fK9_Q5 z(2??T9K(*ZDuKf6m*(U*;a3I!#}cWA-B^#wVOd{X?KJ?Ol?ra^%f6fbPwcviV2lR(a?-k`qN%1cy~wR2cm$z&fM2{ z?FAtEW-8~+bbZVHHPte35WlQ~`$P$~Lbo>AD!>grp*@$ad)RcTitL~lS+ob!t%OrJ z$GlI*=^S(h9>^7K2;w)p6^&D1t>P(j@zL+@ct2PUIYe?4ZIdcdio7cQf2c z0U>$iB{gGn9Fs(UBDqXQPl*Et7V#Hc2>8T0AW3FUUt7KdGNf*jvoFGT5$hB7FRN8( zFCOe3Zr~Xrm3B8(az=k8v2;cEpL0wv2eS+;W4E$C9IF?82QE>JBR9y*^LvUs`*w;# zvUXj*-IHe<56zx#<}ls<7-UN|zHhNXA>)gR$Mf%@I`fceDF2y$r|W-yqmgb{_PjT! zLZ(zO+uA6!y*YJNxEgO^x|VIk86+TM)XxVX7`f4Y4qZ%=TGDpTj3P0Uh9sW7|QBYUi58P;CYEfhVOdAHe z6wAgSWFCw29zu<|kn-JE0X8$m`TX^v4|a1pgE~mE^|lX;>fU|K_Mb&wHuN9P&ACYFq5EB{mBpcM^^-dztP^{26wRq6r&Har4N#A~igr+hj2F4$V>u1mIjprftonKGqbTW#y{d?jze6nanA}$-nz{4gqL2bR6Y@$hA zRl?~c3KUvT!eTF5A?+*Vv019Ue*}r-#`llM_PIDL>;FVKU8FqWPV+j78a)nL5Oe=F z%kn;iZhuugyJdOF>lSoUCsJEo%Nj!o&zBa=zT~m9va*_dHs_S{@W7$`G|D2RvwE}9 zygS$_RJzttkubTMu}w~pfJ%^%n06pC8&7bK0@p__6?9?Fj5aZNmH2#jrm44QpzyUVJOtC)e3a5^0yJ%ZAoYdKRqONP zgLrH$L|N!>Atj1iMV0E?i;u4!@e@nQyammz?-^CF-;^UcGpeYzmcz;RYH*NLJYTin z^mA&OFMA^sWh8FDYr$Fy+lq@`NDJNE3oI0R4N|a|H#n}j_ucc=h#_r%|_#s zqU4~}`U=Z3hP1?91xwCUKi$_-#O;CoP!v%@F>ra}xRsPx5DL|Bv^0PA>e@ut(_u?& zCrkxBM%OAdH_n_YGs^X=Ucewi{LU9DtzU6Yjk#^t>yzQ=g)$dmvIDtJBA5B__u=Hp zr?;%WDxy@X6;MMaV!ju!h3^~dNVJb)$&R9g6$KNO2ve#VeRH&^X28WJ$ed{y-W;gc9Bpy?#%6wy<(6!ZJAA zr@XV%<(E0Mu#fgN@JqC`JBla<7+(}!u0(Mlz9>W4_&z(MUwEGF;!jCYHC^=&PUP$4l zXRR;N370#!eV&i2t(9TCL29<#*h9(WWbS+8PMG-lncjbx4%~)fTARN`O`XnnemZJj zcGykj#7B{UlA5U5atCUk4 z;U7OJ%NBapO+;!h(eNwPb-hqxIdT}^>~2S zc;9FIm3n!8pdS(2#=#~ZRG&1@BxbsF{w-Ns6JmOPSx&)?3L#lblilPQW}(`sYhdS7 zSHqF5V;C$_gSBZ39*p5Q3I+g7kiVs{ph2jqvVp3yT|L51)`FiWdR(K!X zSNsm468$Ej5*P*Fme38~8;?}#J4?q0um8hzP% zaMi(9xs#kJhBQb08i2-8?0cz9`fP6L-}XxOynBZ%C*410mHOcem~k*C<@u>-UcY9C zdvxEh8=b5LLiS=Ifpya@Ai4|`X;b&js>@HrVj|7$^qX6{evyq~2dUkPrt}vRA!zE2 z&44ptdS8{;*Ke~4JK>-NxANot*6Qp*rK!#lC;wZhh&5k+GdkklJpgI%o?$u3lFbL0?qE9CJB}DUB@RkF=a<`b6#?U%<;3zhogEX~O-^HOAHxddjVrSx?3^YZI|w3z)Y z(vxhY1-&myjP_(|r!GsO0l_IuHWNOrNq5`DsO>M$$m1&kc*RPD6E&QNHilybX}Q~r zcP~MU?Y@81(rwp_erpBL_vVn|zFqR3(t|Rl#&gGh5K7$*;#3?dN-mNJu+(I?bCQhR zU#%}*9DuS%Z2O~p-_RFp13t~p|2pY15F*N4p>sT_pRjTnSstp}nB2int+A=plb5Lb z@FV20%P(7jXk#bQO>8o#o|daX^U%IxuP0G&bfZ zn^t=R>zkTV-(%S9`d;WwN=h1+*hsWnE=6 zzkI6;i@n7=b7mhB6Ev!Pg%r5cmu)D)<%$I3G^Gres$ zN6q&X^RJG4mVm2rCUiPd?S2+1N>VD)`np$Bq-|N_z|T+xBzS)0zHpFggH9%Y(GsF= zNdm;wCQ&0DbuC=JKZAd`VqEnq`^%GL7_$qS9Mf?2eg3-(z|!bp*Zj*9_9HY$GSUHg zALd?a$_Vd{iaXi$w@s%r&|eYi*B^DZUbVsIF>ELw)t`-wi#zdx^4A#2X)je zOg#6Ogl2}hUbVxQc>AnjUQa@oTenLZbXwD0cb8$Fy)$!m?yt13ZX0P2Q-076k$<}l zj*Pr(>KS*^ZUC08c^mV%{&u!_F)8?upc*4=3rwV_pJwV)?07FKQ+oX(Z+cocN({8+ z`}6;awst?}Ne;{+r4GFqny8`iuVbIsqyPUe85Eo8XhsERuK|P98WVL-1y>@|!avmJ zuU5d0{}>hMJmn)KMSrEZmU%$`C~iqGf|jh?oHBd*ubl8ctyN?Vx;SV`sQD1|%IMwj z2^f*%p5~boK|q2(`|RI&|I?K_?}Ch|DPg>St$2v5h7@C5UB9<((hN+l6VLzk^b)JC zo6o829$Pq{f>q({jlKHLmH%yy0wLu!!NTwzYGx4Vo%DZ8aA+k-X;@=!5#VOJ3XAD- zB_Dm!P4sUId=xz*t)-V!v6?a{m0H2EbZfx>$rt4mD}L5I(zK5QuAMQL0Rk2iM4G7o z&iFm)MyZp3(x;e2&W8CAj0H*kRHXF3zupOcKop8mnj%8Gx=tR{)DIsvTUUA6{>;z+ zHHMQA+Y}ARAn7FajVi;ya{y(CjLud?jpI7~Hxc~DtWQy9k}wLoNWWI%3V+3K%-Gnc2${nw{5TieG9(Y~g*eprKoZ=vKaXDSlo zFQFLw#)a^zDmrMnC^-fYQsKN#$axRAmU8-+AW6 zU(wSmEh{zIPA-LZi2i3Wb@@pFF`KIy!4%xv!Zp!Uk*bc&aY81@rt1??E40K_Vu`FEQ-igMNF4c(@Sw`-LrI5vb+SPnQ`b+d>yrN602Fy*gVUlglwud{O~JJt*wm@3aJs(R*m#>68U}S5hM6Lf zNh>*|TDSl)Oa)ocEv>{=^5=da7PSvne-h24l?v1t_&Emc-@Oc18d4zLi3A+Lmc33H z_Jd5Gq(2IND=1->Q}IsBnISz+bl;d`K~m7uX}ZFj#kD?Q)UdfrG5L}&$ze18K{7OT z(338C&=oAdsn5>e<)Bb#cA8tn_h5or8>*>`URp<**OyCr6s3{Kod2UdIq_6|yEOD- z`d@?{;`Ps-2%b-u9l6}i$PSX=PzQBEHY~B%&>u2*g!%lnPmQ&Djh5d}nHr6$G7#mx z#Zb!6ArzhxZ?cR;GXQL$E2gEOtgxwI@*z+oB*AuH8;oCGiW28np^VF}!JK~rp&Tc2 z8_?Lal?i2g)Z@^MsLPB4Qq&Wfd4^*D*|l)dk71-!$UbXQ$c&D#!e{bUufmwsaf}3i zmRvH;rT9joSrhlxGpQF+nq;Z5b+>3QG*QOlZwd#bR%mf+x%+20u)IePzbgrvScSd) zkk^PzF`83QTsxURX)t4w2aVF7Fqbsc$LjcOF8&)c`kJEXdIo?uSP+DW{oOJV6W?|2 z@?(w+&Z>?nb$=Hf_Bo>rZ3?;lZWB;ms z`#tmF{Y65xQZvIby2?avS3TS+{y%pd?iqWGj7~lvxX8J2HrfQKi*M`&@Yx%v7m2uQ z0cH%Aqq6DS$x@p16I=+2vMoX=uPxXy0rgXw4WFTuhn4CIGEe2{LTMT2q=y^?!<&C` zw8!Z%O6$tN?m6I4CrS_hiFj3o2%NbG2+w_Z(7^o3$trN-s&@mV-1U=@YXN5FT>)aVoVm8?^1O z@@4*w8IN#?Z&*=thZk#6j-lOB^%WY1Kb zpA+mD{TeQ1gmyn|D=2h-Nm(h$eEzN>qadV@nguse%`8giVARU70Waad&U3tvi-z8*-;4!(I|9P!%|Lk=;lvHg!d%8PpRx zbRqq~Iu!rz_^Y~B^ZBZN z5)-+Mt2M#nd)=eH%S1RDm?|D5^6~bAAfD$rc-Bd+tuu=R1Slvdu+39^*G=CyZMqtv zV8HLluZhY)G7=e*=d2@%N42}g!^UxCn6ZNxc*gx`Mpzt%L~qO;Z(Ti^L!*s&)TQUt z|HLb;r+|FRO@!u5*8pV~h-w}`BtY&KdU_}1{Wb!iH_)0y`%R#!wTKcq@jqyje%$GA zkJ$;wQyo>{-BwJ9NFAm;3#kYfrCVMfh!8pZCR_*a_XE{T0+!hrik)Cch-koC6<*?M zG!BJKpv>rm=bFUB!LH^EWp}q4(h_=|pRzN4oC(hpc3JDtaA9PI4p;5bpFv26tF(-R z@^9t;F2#i02Yf;17`y0>L5sONHyym{)Y1VrhVFlh8}=qFjWZ z#d>W>%idg1{{q96NRKl^TW%jeX_?2|r<3O{x>p~XE_ZMDk{z2C62#F z{3$*hoQnLkUFEF}mC|pmHq?UBL8@&un)U)erG=k1&e3XR=q~>ek$IjHh<}`L5wfL@L{p{8LsWK9h@~AOga6 zY&OuBqLi>tSzQ|~4Q5wFYv-rCD)jUs^!0XOT@jUYm(WWRV9i zv@q@_+vxi0C9Jaesx1fFfx+t+?M_;H5yBpo<+@Den_Rp5w$(6}5LAypYfbX@nFu#F zx`%%iKK)deFw$6TB7Bkt-333;!|y{Vbw`Lt2>C$`5@uyF{~Qkf~x+Shi3 z_k<3#h{SK5ivaR`_OPEXTfa2$1TV`FPl|F4)n1U@UG~?p9P0f=Dn5SlDE~B#kk*e# za@p>yDpUFZNGbm6A0}7UP7Zq~#oDD$OSboj%e^8&*l@LcespUF$94{cf{WJUyWm$Fa$segUeiAmJwL5w8S-Yl;Y5iY)KzU_SktElGPS_LZ>- zG3B?JsI8&=7-`&6$uc`FdtZ#*#y2q71@u4+DOa9(TE#j#I`&kG*|)F0(FXUF`5TOk z8v{kV{R966fsQK<0`Y5o=&t`d^Yb22tRv~rTp5Ai;%SrOZ%H)a8++y4E;2U&v4T>2 z#NZ0L_uahJeV38QsL+HTJLwlQft`r11BEMQ+_zmQ*4Hkr>r1b?zrN69R?y$pa%OVb zYqdS8yMda9`H>=z$C^zRjPR&LGe6t6y{or$Q1mTCVznBJ&d{6b$KFEjVg<;GMPn>Z zhe+|qtj$VB##Wa9PvQ8TAToGnNWt~rvmZ|}c%KV{ip3m_OO_m0Z}h&**FZn4C7kW_ zE^7s?CLj(fu4Yro@Le9Wk?m!7+8~ap?~4}y9Z&S9%R@(}vPjnBJFT7;A_+Ba>P2cii?Vp(x8 z;D61!^M{V3*40*wh!a6=p4jE;uEp6Chp{o-D!?DT%iod1PH;PR#f0~2koUYA*D54M zQ7}1%O)MAtHh1K^j!^lAUrvO-3tNExT(GoS{h8F-`kS~_1B~3_D3Ue9|p0GL#$Ihj`%*d)=)0AtTAPcA$I1Rf}&d^-?xnFt6jl? zCBMntE>Sx~9p>Gy2;Fi3)YNJ8NQ%fKTo3%Ce>fmf(E`vL64DY zsxlv5YR|F6dH!LD-D$y{HjX}`3YFRW&{Op7vD5c#vVO^A-E8eKEce{CTmbKH+zBXD z^>34PdAkZNw2q_4LCB0EPdZvxML9bH917Qv2#7Q&*##N|MpxRa3h2=3+WT6O6iP=J zE!*PLFYwIeSFa=WU?Y7Gcf)M`VC_+&9nz_*@piz&Ew(s(oG9|Nk@_)|P&5}=IVUn~ zBBHA!TaVN$mlR-VcO@w5+NEcfuoa&R?o}(qNj%P*s4^LPQQix0t;hG?JGg%UGL(6) zMM&I!ms>k6Zfp&k{DY~u{$%dh&LrK}3b-&$TP*u(Usck{1M4Zm!a&X&CZQ}C{vyNZ zUYDI3kFV7?)4+|)^Ar&D_HfIfs3cxin35AMH!k#w=z_H<5^nPh_;$XMWlaAGPtTBhYPc}L(eG^XXL(esBd-lV`AdpPVf z;q6n`?sk&O{?b)IubxOS&m(#K63hK{%|zXX|F_vG!HC((j&!jKH2rotAr-$p>Ue=y z9W;>}Pu9RuSd^x6MGAv@7#G)PAJlw() zH&(vUD%lqdtepXfp7z3IVte9cAxAa$cv*n$C}NN6q1NXuE#{}OH|I0#x80GA=kF04 zeE(cBfQz9Cm12rmZnWN4T|KA%R*0KQS|3>)=2o@E~`*{mIxucP=*32dJZ& zua5V0D(y4jpAkLN>lHq$=Rfy#*YHi4lVoz^TgJX#(mSZdF;8$_W2 zc}ZikzT?r*G1JQ|($Hspyn<69kIXeHUAqXLm1EYCFIx%&URlXT=aABgsttTVy5NGR zw^M+FY1Ew>?Ps>4=s5Kt^|r-y2+AJ?-=ir(`K5Qy{H;Iq!tXd~p=wXT?q?;igMFQ) z4IT~WgW-6;JKMSRTGAlgg3?h4x6rzAYFy^qf|^W0C7l+ix2PfAVK!UWzgqeI7NnH1 z1gHKOe_RYWR0izndacS3=I%tjxs&&Q_nvfE^WT3RC)ShDnr9z8ZGo2|Yi7ebZy`pmC*hs&Bg~ZO1yg5@6At481^Ua`)rT~=&ZK4|BgJN& z*zW;M2_m-$Dq=6>i)R|-=Tg;MwML=?D-EV=9L-mUNh;^Z5=JJk)>3V!45tCMEEyk| z(yDuKr6#tF_IudKq*FS=(Y1>)QjEd#cUK)rgR>9Y(84t>$nt>wthZO_H?K#R9PfRy z_VdF#0jGmc(QBrUbgTz6*zvoe$f838Ai|r!%AX$eFG9=%wpgf!g^*D(;X~b-&aWO; zRZ>QU^&&??n_e6-$dV)&*F3za4*NaxK?Np#U*-prD^+I1^`>UA!aT5%+$eNM*nwh4JI_*aImo*y{ zJTC#*96&HRi|VKWo$@nHUz>Pr^vqU2jW)?Ge`2&qYU0W5e3D|6j%8~bX)M>~a2cH* zCF`g;LiJ&lrv$>SIk*^WH#zQqWg%};h|M0`S5<3u=*Y5q^ShOj^ty>#gkMRX*sqkT zHttIE1P2T1EC*hhmWZ1te95EtYsp$)vdgRZ4d3D~rE$oNkMnrG@AZos z`rtA~i5cNFPU$$1J=Jo>tPy{(K6_K3v=lp}m(7;cUM!^70z`jxpz0;bYWRlABEkK^ z6k~R+1rzOS56c>)bW&2B^giM`pL?D0i-M)%UkVeFpNnaKX<>6GeD2+6nXJyAZVk6p z`C2KNAYYevLvy@pe_+8!YUX@tnT8%~kU3#7-D3M9u2;LRw%7#sH0VHmoJU;Z1iyhM zOuS3in|Z>PG&c|)^ADXhULsD$qKgB?c%2zw!J6J+T~$$YzCGQF+f}58UBX>LkND>~ zF|rdy4qvph7#rZ5y|lFj@tT41%j=WO3y|Z9trd8K@RiBXrBjjvpLKLJ>jHV-v?~9{ zUrbtFA5OL$7k=$-4f!8o4Mk z9?$P5>U^biiXn>M_%#kO$>*QbgYZsiyNg*VTTFNI@Ih}Yji4HW5jo$o;p(z@vYT9*{ zc@^)6w(t6mES6jS7zBOtnHV;v<~fa$Nfy*%|Uv>k)*PlldeKR!_ss^};9a(-1S49+?xk_e8;_jV{8A)T3;D*ZqqzxV~vgW{fbZ`K+`OM$=R1a@(f~+MNrv-|8!q4j{1r6V z%`sTW4L`*8)^P&PMM`|uya|=gb8NL%bv@JXRyXpml0D7ex_uTm`&-br_=1n@xKRTt zEY_BKa(sPPe^mML+^)YfB}Y5zK#@Q|kAfi8RoKEPE%@yPbo_+_01?NOGg`)&m~G&G z_kAwy9m;PEObikOEb{X5KsNiODm5gGlp9N}NP$_?U}JO(?-e03YP?x*L)jK|x&z1# ziV@~%4epc5O3nE>lm;G&XmbGHdK>qm}2@^F%ddUc}3@2Q%DLjLjdXDvM&wGe3Dh4VK3k z3F-wAGDEmxDe*!sIkXRi7SN>|CCjC*w-AKd-@Sw<$J4o@hRiB9YE1GbINpZ<*%v;~ zZnm$8+XZqS4&NbsgtK74P-4bkV1<&W_(DOy?Km?$o;w-|_(;Wh-T!2JM3sTI@|9#q z6l*E2B5Oe+$1VRRk@nh)h>3U3iN{`qx1u7#4sIp7GBC_7&6a`yGT`g7jQUt4QsyO8BIL4db}U_=X0)RIs??w7#AGao%Bzb7Anj8+UT3s*E&9K5exNk zCGFzpUv%G8%$LKBmVuYi5H$Ot-pynmA664W!q78n5(|>I@h}S|^b)ydMr6?cJTt=P)|4PD%Uh6Nf zu~8SExK|Xrumd;UV$F#T`3~N`g`QY}aHWs^YWuiIY+OHDFgcgeE6ToWh^u!`|1o!H z3)3nTl@!I6hZji8e{;5_unY#vS=-qZ`z)P<$A~Ux7G`2|@=X@R^*ABCIL@7*PbR4! zVr%{gk*Tk!D>sS^=ahdv*^(^#na&xpZmDdlvvc%(bAl>iugQj`)zhyFsvS$_aPNHL zuC8FY7LFcR@{Zu@c%?Bk%w(>6buA|Kf+z$7<2x;#Bi&f1TeJtO(ev4 zZJup$<}kvcFB7I*AAs7;>jUsbF<#escHZjbD@h5YU&y;gv;uaS3ci6+IEn2VZN@_oW+0u%BkPJYz(e=vc*!GA&h`u1y^6iCHtagNKXCYUt zI|L9A?)TWF0hL*w%@^TdzJZSdt2#QuT8P2Sof=5(gl-De|on`;@GNmDL6C11U zymgWG6r0kXdJ|cZdrwvSBw^>90Pqdm~+CYwX|=N72$tct2M z65Xt8nd)I3c%vxv)b+5XJNp&(&iQolRoTuc+aK!4fL&icZu1;j*-ANV`h3pl{!aS4 z@0!P&*B|@AxSz!Zk|qE^O|2trj8Qm+}gZmZ2NJQd78Ht z)reiYjj5vJIXK`+7LeObwbM?^)`OJqRLsVf#)eP20oxM+Ae)_V{#qDd_~2(~k6a_u7P_e_49A@B`z&w0Dl>U!O$US#cr>l)s$ z)B!H=zq&ZVtlfGPZ z{DdxhICpw0kV1B`Fk!$Mew^2i3u9cF^I&XzdyKQz;pZZ0zuldh%(0eIa~#MaBi!t$A;(2*3GR z)SB~b2=hrbktXI#6~+nMOZXeUCf_Ixl4A@TD@Y^*sXBs5+h8v0pT#rTmDwK`<%Idn2C+#|oW3&^Vp!ENk zddsl3x-MGu#S2ACaVzfb4y9;uhvM!IK?*5eq_}HwE$;5_Zo#E!a3{Ixch0@f{gZ!L z*)wykDPxW`b{>y6#_aMNkYrgS?2nXcpPoLP)`^^o+uDkyC zt;_88m9XGJAR=l?DCG@6{?*ov?5pt`3DzrkucMXoCeH16KUm;pLqpIl);7B8N6x(! zv7PunMR!|f_@>60>-Aukt3+1gvm?YG`Vt^qel6z&-HZP*^VZk=xB!4iDJ*ilgxs`V z4!ouFR%PX2jQhN$Z@Gi1o$Gq->nx~Ha(%?C$!mq@Wl{>hEngn?Z|zNWFT6OVaSm@z zfR#%N8%pA1@n4gTH(z8o9U{9{l0>%rHF@h}gj3%ui^Q$&G0XA)vFH^iKZJxE=S>mh zx(;3VqY(t0*xaWJrkr?Z+!xy>7!9ovx(su?c1Gg?XyJLEJl_8Tac7Xa0Ct zq5*huyOR{gV@fLgl7lf5;z!@bJXf3)tLAwA_=b0j-!cchsFN8bUd{Tsu055wpKWpz z8KaV6eDyw)1zh%gm@Y=cY&#Sq|5GZ_T)A@&e9g&yySF@gT56@}N*=zM3 zJwZ6eqS%gP7n?YF)V_1dGKyZ{FJ8nM84A3i4tg^ zNc9X1GF0gbQ=t&djwlFM)6fe$(Vwnc&OL;@kRO2XBQ~e5@x@y%6JP)9$rvHp>I$De z%P;l2rDN-azDbhT;)M5dA@O;IcS zk@2zyL%bB3pBb~iUoQB+PUjk#uMSmpm=Dxs5PM~2Lk;nx@Y#!t8hM>5I0(^pd{(tS z)rnT_ya|rEg|_QDl{vO&vYzY8U01TvXGRYz_xud3vx(!zvtVoBS=s+ zG^eMcJ@cJ9|9(?HTsN#6Rs2k6vA{;^vpKopx}==+^9S*;EC1#oYYD{woB7ymwqqgl zuv&(l%!?=U?!m##Y(y1dKU;YAuuhdw!fgC0k*V>LF=~6xjn+lmtH7aBl}wvPQgr&L zsrBXv5D3AR*>R}ALHQm7-gG0s0gyzkwFFt(3o($1hU)p9PhlQ}z)r=waa*QtdvOY{ z{Zd_*D8`b7a@Uh`m-n?uaZ-a?b6$AHF^bF5o$5?8aBIJskL*Kp|!0g zCPkM?G#7I@GD`dSWL4es&{6~TdsO`6NmO#8Y2h`w?U!g+c$l}0z9hz6;3ha&zCCL{ z1ocuCXC1d)kZn5EsMXp|tghCUEklx>%m?4I-vnZmqRISXpyjh;8zybUYF8#zmTwEj zY>&p7lPtKX=-NKliOLr9Br_H;RVhva)LA_#@D)}NnR?Ea6~u&^J$Da=2)@(~N25lw zg-i*3o>u5+tQSNVZk-c`Kh6y;m11^vKru&u}eVj z-nhwMB+1t_05D@cd^es`H{ji5)9UO=yS=S=1I8-12~^Xh??-xrl8JF@F{E7IE-aHd zODV6*69&_*>-mnDrT^yvSCO5|r2@O~V|h-Y%~@-9@*^GZAm^Q5R{h~O+@}@6n{+~g zCGiJCG3Xm`R%G{`)8hp%sn{{$l<0{XzDQU6Dt&gZSpTQaYn2TbP_^y`ccRMH4cSyi z!n(|5^M4+leOT2U>#;sM{jrBxi6t7vIyd3$#>3MD0JYj-%h&xF+?6ZyVUDBTB9<&a z;v-><>%U~p*EdK?g?pAs-#|7UD3ZLMvHqc7FTQ=ARO5FA6JY*!dw5&z+y#rQ*V?Yj zVTcdZM(`QEtloXUW4CAAdU3nxx)Y$I_>NC6cKxCI+2#X<_^Hd#KuB2k)?l)@ck)s# z{S_$JurKRp8||%d=OyszRR?-8Y>|2n;IsxCg*rT<01Vy`jO>&+-m=EjpVCjNXAdVJw$-xsc?U3nOza2*~V;&AWw ziT1JJy{oNNBqWfM$MUpaKIqU9;k%=`cs!mhjl_v2Hc~b~9X$XZl!e-sI2lf#2w^1d zMrU#$OAChv{r#esw4i8m5h2Shj44NQx&(M~Hl%!mo`C>a23o5@c7u$5^9lVaAoN3wemD`UxfE&l{ z@_d=A*{h(N18xhzSm*TA)P~^8#*xSof|K|uve5~)KsLPd{TyK@KKyj6yqX?Pv1&tA zXC`w%eIy?(hf@38WHjXM_VjKG|NEE8dRPqV%v=68v@v*=de2nd27rq6J8g!`m|Sl5 zeN(Bl+)StE+G{aSf7*?j5Hh7ac0-93g`kFK`?Cz{ty;W)erV@pCKMm~@@e&Hc6ec| zM+~WR3y!j4sY)6SgDNiCz&tllsMv}T5qgq%EG=TSWy0@&0 z2za`Mnbyy8GkpI2)WLb4khAc~LQU!WKvdWFwvPgEZBu`HPVW+u3axMMWvyj}ySOMO zegSAu9jLb9iO-x5@)Ft}yb>Bk!=oD>8{*DHT{*8$jS_{kanl8716BWYyo}iqcc7hY z9Ufp!@6=RVaM(V7NzhiHQyS}+s576;{J!+(Gs19Gl)b4PpI=z&6enQRoAoXp{Ghkr&ooy3X!x$zouN-@Jk zP4J>IyMAu|!S=5Y2V<^Ks3M$9FOI>(12xqiD-)gZK9{=;BOQLSbLIXoeSWkW-?sDK zJe)@M)ybi0FB3AopYh2`DXI&l7V3#e+r{ncN3ry`#Mn~~3S;%b;*zI+50?eT;{7Q( zJ;y=hZH8!}pJ-``@{Pq!*WDDwvi%^Qz5|ZgxgwKeDjlU)v(-ou>liWVoZnf0tB&9O^K5Dc%(jm|0OSOuFq7ckFH!MrC#`q z#qaWbM`ik@n*ctER2%P-qyze^QdAkGc#t*ARMzl!DO8sCfOc<}Y^+9g-6+)ahQSGI z)p-7gQ%~-3a;hAk;VtUT{O&?v@iODt-?|_}3_Izq<`*#TMAWTMhRDgw-zS0lac~Jp9E)k!>qQ7B zfNUo?uZOSix}}|ATFrD?sx;)YDdGK+#hy^k+q6s{bTe-9)HV?wY8W?nGCWOl<=b(O zJ&R4qph~_$jwB%O6{$J_8GhyyAHfQEWYPe7km!&nN!>TRr6)8cu=biH$hoeaZ-_Vn zD1sYinv&`+eLB5;g={J}`-bg}c1NwZipJhs4UE%XH{z@>2Ngd3+H#YBL56?}%>~RL ziYfj8x^T9DG`v*tz9l19#I9A)X}5TFb63t0$eFt3r~#b|QG!1Eys@Lr4Pz^(Gf7&O z9KJj~Rl7^se>nAADq4=7TgkMUWvw4Pq@!f{3n`rr?`5+1lEPTE1b%uo2W7oNyV_LN zk~TS6%dZ3M^2cf>EQK<9`?qLZDA+T1TL*_I??2Rhiu1t_1IV?Qo>g@O#_;W_Q!FwM zREmD`hJ`jZl@S2K{-Ej8qJl;Y`Oc*VPC$NpH0d3262v7(ek#->x}7F4t8g zvZ40r^@ebvpmC7Wb)A1(Ingq)NZfpbQxSQ^eh_=aeh`Ozm==Fw%DvM)+o=2Hgmk#T z?z&N_C~VA_RaiuS-o#TRJ}qV3{L=LpJ#C1#lQpT+Z6Ns}sPe6QBEbxyQi#vdNvaJ{ z(pL^AtZtkvqkA-jGY%m`nesO$41RlzxV_lsxin8!`K-^G$aa`}Zk-Qbr| z8KbA0w~qNLY`yn_Hxp7LSE*JE^=Wlx2uafZhSd1&0Y-mVv2KE^bNf)YUd62cJR&uV zL)en5K+pg)s6KY#zQxSdl>#ioJ$-*EFIlldRi`H(fh&>$3&2h}xG`2NAO|Ee?dMC8 zkYm~%R+#COTDS+Yegq`HDSi_+Iy}Z|i+3VmL;A_XH3v&DPW#H6-sju~3UMMw>jr)o zJBm}D7hFwUY{Etw*U7ijFeTTffG!uj&>b*4>Gati^9uMj z)8{q`Q>a7U!iui;sq1~qer>i#=M9aDqtVE*MzPD1?zffxQ0jOmn(+QT%h^K#v2pB`J!LX20W_WY0i0LWg{Pv=X^x?q z?YYn(#}EKo zeY?K-exb#X`aTx^i_kG7V)pF`q$&R32N8LYVbf0fIpjvZbfov0@FBdsk82kVP7 zNLTY}Ca+DRRrG77E=u|bu%5Kk@DJ&J5_h7+uwOdB_so71KoWo@EbW4n)6EONqW@kx zk4s`S7LFEYiiE;>&=-$@Cb^r=mZFE_m9@+B9gmJQo8G_F=KKiro&jyTi*j8c72-rX@Ey9i3NRjw@lQ|Ws~r@e7aagyAb1pqPg zyB}jO{(^lk= zE3J*^TVV&MzhMn5bJ7Hj-#?rQvcIGik@~Nxqah}dyAg7eZC4odmn+y~O*?Ki zU)()4J>%9o!7z-p*y_ommK2>40x6Yb*E zppU3Ge0BXYbc9#@iKrV`4;S%So}VojK3>7M?QQ*h89dY;oZQ`#ga`D_Xcn(1UbK9w zz%+yA7T>9q&MSHkr<*V;z0Dsn=N4V+eaLNqeN?OLHqsd7_8lc=`3wse9;Dp*r7k85 zGmvn5WYdV98T@)~q!P#z!}5zKbnJ=#oT#^VxZ^=LEc_AEpa#3>BRJqPphF7P&dI@K zxRO;@<(Q2d;adFnD%4Z>=PCLjJv&i?VRK_sjY%*3$tj6hx2r5Btq=LhX?wiHb&E#J z@jbXcw?0f3=uHlMa`2dl#ZH$_np5-)$8u5aI3tF%eCO0VXTRB-2M(|G>POoc6Iy0{ z9|sEpQ-U31E4N=!#7c}$$BWN~rGXvsi3+~n;F$L<&!NboU)Hk&#ikMBO}aDl^FMC_ zq5gHAviyz&Z5eitZ_P($#6dLkpGJ9H(vXY$draRYkkY~9F=WP{*=l>{uWjpxw=p8b;P7_{d*8B0-via_Nbxe8H5?#Z3u?6 zW|LViANWD{o@m0EwyxVKXNeGFTqNiYFx%js@IFmt>Cj!5B}yEX=J3QW11cF zm#^&CdBT!6u}jK1tw%&LkV(d9amYI9)r4oqN<)bpQqg$V;4Cft!;y;H^!VMG>6N;p z#Pp2>%_i8&qXXLLZ>qD%=+&rOp7bHyb|v^>JI^C+vUFv&m26oJ6c4f}#?e>PBH{4N z%ilTF7xe~90j%jaN!dvW!E#}>G-nSd(ATZ$(5h*nQebrkm9-uz!a6@@eK1+>a-6=A zglS+zyQMHi#|ssf*d_Y9%;c6YGNY*HcYVE{w0se?#P1$wuOSb{K1tnTO>lsY{&kFp z5-j(53YJ4{@p0xiVpS%)obKe)gjg!)bMxDm(-%T;M7U=>Bl(EBE0#nbCI#{|hTNAGS?b z^pGf}Y0z|Wr_axl7y!AyNew)49`dCK)|a3+rzFxGJj}J3T5fQHMCQO>mhans;VW9q zM3fRMf2eS0k2Y1}2*NvY=4uIoXU&G5^Q6xoDsHz$qb>CsczOCCcF9KHapKs}u0Rc0 zbsSnu$zEt#NgE7_!z6W7_*Vs28=9Ih*8+Hy=HcDk-2R>%52f!%0~ppgutg;ojU4ev zG25r3sm)BIFVEW5KfTz{ru^sS;UEdgZ9q9Qd6-D=eRrIlDA5J)RDsewF72i;mIH=e zmF3r_X8YJ?FHwoO*-l}m($0vy#oyuZGJF(0ox{b@-oQeUEX+j2ZG|q46pB;Az^gQG zro<=>P{GpDN>0NZ&Y}4I%Qq0+&jMBH%OObI1`Bg{5624H3SuL^IaM`ABN0*h#1pq{ zreH)>26g8(SGcpq_|X=YJ%abVV69kW-W}e&vQ;jH_Xld9?=FQ(l%CGHWvHUVuh2*E zt$Fu~&TJi5X4O3CWGHB(_TzbGxIpX)GMzD26=C)Zha(uQ`!^$|KdHU~G zS8QK1EN))IHqrgx847>Xw9vZ>Iu=d_`(XZQn4K~v!yV}$Q8+g{sNS9%iqKg9cDxxW zB*>D(DWSj7N5or+hu>%@yhkQuaOVNob8Xwc^p@ocD#C4jK8c9ThRFuLmz{^L6qcZB z!q84zi1T;1O7jbsAtOiFSN8`cvrf=X|E+O6W^|OfM8T-(Hm6~WukS9I{Ki6)wy9xJ z{Y9`7X*@747b$oA?kZB|e@n#xquBuS+M4e;URihEIyd3qrLTj@&AL5Xh5oYGQR_mO zeu@lMVFBlFU>z7sH~3jAu2qD8L-M`Bee* zyB&zWQqdlID_~b~&vLW+R!XNGn|~{+s*V{&4P0>HwhCxGwrtc4pL^YtS$xTUF{zYj zX|@w$s*Sk}75YwtlTlNSk^PZFna9SC)F0syR@&|#z&sI`@#D=1g%F_&N$do)coi-8 z&v0bJ+a9vB!ZyR_i`*Jw5%KK*5bkW$^%qnlp7nJd_Kquhi}(;L50*+#A+xaIat8g~ zYh>Qxr(HoEdWLe5^lDo4+Uwsh@MLT(QugS%JK8Sx(MtGS#&&?0O zZUTEyDVNwwIiPxLh~9bt289zSHRjbqJsWdMi3u!2@QvMrgp{tNr;EL18XltI4=JEz zY_B_L$~jIKPmq7sm(pJ9bTYuijw$06@@s}E)#XF5{cn99_=92rql&VAB%pAQ-mDsC z`aJrwq4dU${3=h6B=!~q(U!kqmRB(rNgr0gPd}u7)3)O@uk#`b^UIG@^xvXB#nV53 z!ACLjz+#7u%$l>gT&L;bCL>7wFIvAt_p57+Ayui1Gyk@&3tFftp}@q}hRp5#5@pv6-jjsWM&B$v+mB+hf`W_ADogrnG{aMJoz@kwzqn_cS=7V4|7N9L zO`NmA(>L;`<*3SlQ_szSD^y6pI&W5MDK*knlT2D1?PECjO}*(tX8Kuj zvx6ikSy9ua6%D-^w5H$SkO+%s0mH2J)WGg1uL09lhwq14`X88&^8Pv89o{sxz5qMz z9lEN_Wz$GqI^tM|v&veu2p`Ly9(>^tD=BLvDH5*E>1hS$)Ew^^DrK^2Gou7svP0@O zo-2+nM9lJ5~JaR4JA2Y^@nO+MSax6~=p2xHs4| z^?w_p9ye{bj$X~_k;bh^2crb`=(~?bkBm*vGpjGJshi#JA)}oDwrhd26ItE%6V^?i z6XY01UP%kiqlJprm)z;vlgVZ8nd=oAvItpYi%ieg!%T%VhAT@P+8cA z%gLMB%}t@-N@X#8Yj9ua_Kq%wA4yT>7AKCtkW|Nuk(aR?I+%pG$x95`g4g|PPG7+h7aeZfI*5kA`qO%+8bHzVxfwX+Ijn8s;XjdE1)-f@)-7ZaiOpmeO=-21 zZ}@&CxSl~NZa90)%^5sE^hL3 z{z9~hZDUY0Pcjj9Z>Y-sw~wEBM*-o-#&a!Qozp<|KBBJ-FJd?wdmA1P=-X$pc9x5* zB`#yD;(Jr{I`ysGzaqXWn>{&S>=iYS(*D0(fSmV-=O7x*f*)`9%)PkoekF`35oX~L;4U5Oe+dz_*n>PucnEa>UX5D2*&f)LbTjEa~z?NMS7N)xTvpNXb z#nXYxf`F7Y&<2Np~k+2+DE`V$jxY z8MjH-2pb^WQygX0)i7*|^T4(J*bUIPyh|3b^py+eRHW20@|+RjkN?B$>uQC_WhV2} zp?pd0>lLfFyyXewmW6H8J2G4hb1Xr0gn1}RXj1#JVqwR^GT#n$#PL>Z7FbyYb(4lU zcmLYG3IKz|g>K+xZVE22N_rUEG_d1DcNG$_r>9axT+Q>n&?Z6<-4KWm9UPDXMJKa zzVSlnH0SZ~hnCsw;;f{vl~qSUM8wdT{(@!1ypMd;E=}G28^d5ziI{bH1_-Q_mZ-Ax zEX-!zB$ZbfT7<4RFY){DYD*;G`kcG&$iaoon)-PEe^a%Ymhb~m}E-M4GImc+>t>Q`;9_f%`(zuI2e4Z%>4 zc@tDI;D|rW@Lj89VM0S1!S~XB;MlQ0a-FKxa2a82s5I(#%>BDY^skcY5kqjG_c`nB z=rPTJNN2=7;@$;bT>kjN_`V(Gb=#U!l$_tNjI5>`iUy~N{_NC9Sfl+|dQM2R`Y;rx zKfsSJDk(Jki;{=Jn$p8}t+o;ZK>koQ?R{0o|5VwAk;=o76n>wfR2gv1$JTa&)1*+t z_x8))*=RIe>pad#!bu&)u*>54FY&Y=Og@wt5aw6mxJ%G ztqlm%ueslUnF-uB^U>9PPaZ3$s45)b6Pf3ZHz9B;o4%|7|Ly$e;O57|vhWlo=X$U3 zi-1Dg48Chd#Qf<5ud*ajl}5-Fcd`o8_Y`!a4)vWo`3|v{7jE!tTtmm4nAc46$rxGE zuVdikcuI_lt!M!e{$n)*qSgJ&j(!$uiOI$5AmPyV!e8hE1z)$PyTN|R6Mry1or zi|X&;LB#BbEb}1Bco<`oP134vwhEK0ntrXAyOwVC$Qn zAVXKGdTt5L|5qEwlzUFB@{vBx!Fy8upIKh=^d<8z$_UO{@_?0V!5@L7pbp> z*R2b)lgBYvnk}uIitAD>9Uxg6Ug(eI_n|@+-Km)f4zy}$VZE=e&lk4A>LZ|{Jd_3g zF^ufotbe8lW6*nIPDfODDhaElo?vqKE5qd>sc=iMYA^6(g0ETsEzEOj-m3|(Q?|Vr zhK4tfu4Y1cp-C`@bMjl2;cGg#EnK1~_eh%v3iYtWt76Zk;@=pyt&scYrOuP*cm`rS zd)4u~ZGT-RIKDvF?!XmBmy{E2$$#m=Wf4Fdoxnsj>V(*h`f&tnhp`4x^Cdu@_UDW&g$2B{3OaF6U&r|%J*XnG`ATnA;e;EEZPg!XjA9>Gol?F zQ%J+4FvRVA@nPuInTnCV&}@opCyx?C>y+LnqOi)+Tgl*$V|8Df-D5T@VWSbedwK-t zY~iD`5G^g%vxT>9q~+{Y zY43u}hWlI4rg-=7pL)25+=E$4Q!3Zk$H=>~$bT_iBh0BvZ6oiSmb_)>*bTF@y>CQo zI5y*L+85DwWdhaA5(2c5_W+8fn^}WNsnPVK$LKk=2xmS#L?GDQ>ECbP2PWJTW?hDH zsqMLjizcML>zB|=5!Jz?7O?fK@v!zn>gMaD8wHiMw*usRWsnoOtW5B}Er>QHK8tJi zo0`0h1WBPV>;LJl9QR*f-ICY#QtpsiEm*r(s3h@7;WO<-K6F-E0DeTGrTv(ix}$hu zIG;0@9CXZG`%3h1QK`(O57=_%6QxD~0I=9%?NvW7^C-Pf-BpwnK+jSZWtUwS#cA9w zG9@&%LipE7IbcVO}NH9)xQ0|jO{_2%qZ!okh#(h6G1u%wW8>%lL@)^W*+{rjVd@?X!5=OkeJ+t}mbw#M?t zN`xFs*?Mc3PU(FO_XRv9qPl{jX$Wt=nt-ZF>XaPNPOMUu9GUiMGm*$gU%1iyftK4Z zA=6mGDF9B?&~O1#9+?uAfqnFT|3JNZi5TVNdnvFoqb^~GF@KJw;NqC$s zH~C`{o`$BbjDi9bWr>l@wzpS!WjM_cW0MRMC6QibXothr#$n@V29^o$X@rHN}dbUI-HxR{+N;)7SAC3Hc}&|Juc+B|fzGXf8emG$qH}0s2tF zu%8Y%wuC?WD3kiSw!7tilFtsu(GLbEe=O%#K9-Am5<~C*UDy(ou#2W&ky-W>KIF;M5Aoq5>suhOHvh@Jj> zY#9T?LCod2Ulgp*P{2EGZZ{*Nll_bHQs>SUHf;^$d!+qrW$9d{?c|FvOZ7H^rg`P`^7_(DfP1DB~(_nMMuvEZU>7ktW?z1HHcs%{Hr33(iasN0|xwM zDo$7DWqXAZ)zm|f{C{kQtGFbIM0ek|w#&jcPwV`=I?U*G#eD>PpFK3jDK`2)CR>Ls zXOYL;@@}+yO0Ed^wR9DXC19yc;sA<5DtE50-E}|9ia?dE54K`Uzub5ny@`y%Nm-St zo;wP#`~EA6Q!q873hAjqx%fbf0@XT@_mXA#ognm%mitZ3KyxTy9-ph$hnVQd(ljaU zr}6vCA=)gQuds2svvMV#j{VwgzM|Bw5r?&~oETSVWb?3VPeO3IDqnKLZ7)#^N}*S% zoqSP$-yX%taB{q&*QoapflSj+ZswT%5};3-ED(VIzV80J7>GeAZeCeD885mef`v<{|prp<8;?URU3`0%v;_d-evpFV!V8(G2d=+n^*?PX72O{~l!t#fm` zYymB7YDw=cdj51K8DVBgBU_%4LG-N6-?=9q`#Llz{PDlSqy}yNUO^ao5VH2)kR$Sm zn6$Dq`C$4%p~{+n_nmGOTefS--S*irNT*e2HG1UW@_p4o`+J3vX=Uow8W+z-^=5Ni zimoRSm5zp-Vlk{x#%RGui!Q%D$}|41IQ03ie*KtY{?M)0bLZ;1MZ=!ufB*u53C`8q z9$FTl8GWGb9An}kXE(zyi^e#gqK7M^^$U8{il5bEBKDo26yxZS`rFH)Ekx$}=yp%RqJ^j?a#ZZc}nZq#+vG%gM-xs_kfpNC7 zC*O_&lA*{zguKS`^sJ5!Z&@jSDc;@hJ3ww5&KrIXXHOGtqL0?88ZEzhsN6Y{6m#Vh zgi)RA{D~)%52@dXi_ZW64XW>^+Ka_ThoH+w+03QU0?kM zzRJb{Rt7iRo_hDu+7GHU8TXTv_IloyuP!_9%e})m;5A~Y?pIr%B?B}Jh8L;;K6VAp z(3{rr#lRZmH#w1B%hFQXR)Td(&4h$nk8IK5x}R<@Bz$U$a%wT)GEYaX9g- zJ}}fpxiL;L(VHu1cND;%nSV98y!d)=CRk|{5o8F9S_{=3DcsavQM?^Q@1t6FPVqH2O z1deN8+RUjdi=TTBjk$SsKv3B|SBO&1h=wmaoyi6z=f_8Q40s%#uz;@z{v8x#cF&4a z9aloi*?$ZDLB_2oVb+g*_0uZ3#kPKN*~x>I>D&OHmuCzT8+&K4XD4}^{Tn6ryV-WZ z_|KF@0~{EnUdZ&m65K6%fFJu8Noh{vOI-DJqZ4C8r&p?gE#(uSUX*J`&1n(VPk=}N zh}z8F$`YmI{gQEk;3R)RS7M8u1y`y^hMJ-6gcov8F9 zuQ5GVxBtlr!=xAyS`*zl5`C*>kjr&PZZ-hI?`8iMF>JUe+&>`l@Kj)U*WO)_M9toj zpg}Km_5F(7spE;L%jGmLuoxq>sfkZDGB}0h!gKwE*ZzF{C7&Ct4-9RLLdSlmIFG2Q zyE^fyyL7`g&lf<6k>LBG1Yz`oMlf45N%42S1-#PfNts~N2jh6GQ(3V`nAb_j7X}la zU&_lE(y^Nf?Sz=m2iqDto5`YuF&1(ux!I!r+F!8f z=&G^mq6(Kjf}{;bxm{{?kFhRqO#_8*e@o1V&6PLWtM&AnB0Orr7)`$CYldPn-Cr9a ze=DX86(URtbyGt7dGg1sdU8W`Aj7Dd)s?URy>lrE;{uO@7=N0!=t~Aj;yfWqdw6=N zx+~F=iQ7mS=BtWp#!-O(en@RoopsT0+&~6b<&baW%U0L5H|I3juMX0yCh5q`Myo4^ zn@`6^aR+{C6(-UN%jR$?Y3oa^{qOnYrYb1b%i^Ot4nw?#XeDr8DB%79_jEn%~^h0$+sb-2YPk(3;$XT{OzXc#c(9iVBCB|DP9fz+FaTrGEWspzvSR z3VrC$ODyIx>|#;C*ngy9fs9{jT0rc#a8|%FGp><)nszlShP0%r0XA4-xSdd>OP#cs ziVpoKt{%g=G$67WvUnB4B6$#~%XF5kwD-HI5zQyG$`hPQjJ^CW+8}u1Ykm3(Px6~J zshsUqnklCX*1KGd0>w~z!E#HB-wt%I@IMMKj+q4y8&18umOe*(q?^iCuKK$Nfkd5D z9R?qPk92ghCY#w>GXeU&6W>N`WtDpKEL`Tpu+?IJMbdjWXvuxOudSB&$-2Pnt!l++ zEDZHHv^v{8nkDd`O_l7f)b9+Fg**|$2vNsd<~)vAebZOOeFHxk5^57AWVXea9Ja}A zq;Z*Z7Dlk9zElIi?BV^AK34*V=iO72>6*z0bV%O~Ru;gk&vgwVdlr7soV;DQ=%HIq*A3cluZFp`U>@W3euaA5ol zkY-xu%~CB$akk#Tk!_U^cgDrGz8 z()_z1tASAXCn?l}s~9#oQaGo@;PnG4LCe1o?~01*A%S6uA#eEmpEHQN5Aauh!3{|s z3S48bcb-72Bx+4`>0qlS?<2ep|4zB|W1!;xs76ttFn4t!CGxmwrcIjGyD{H2DCxX0 zwvN+DHLvG!Qe@D{^FHrm3N5E1E~Uh%%u*F7q^M07y7j9CD@*ErN9S@TtNyC6=Y(YX zaLOdRO&s5zWEwUD95(V{Kngb)^N*S;{zEc1$J7e#VD?U!dHd70+6^}e7Cd!O`AEao?d-3_sNvnPt5vQc` zMW4fxM*i!xiP^Eo;go1xLJ2d6wID}o`lWscb(FYISz%S9uiS&)a{jv1{WV&eY$l<( zQY1Np`BICIA_;f+*+x8Uf4j7O9wt_)6W%o`etu;?(O&Es$9jum6$>2^4RI#tMy7s+ ze4e?yvhV23OBixu@B8@Zo3UC8!GPRX*thIuW6~s?907-wR04Wp_@a_FNE7_@T{Gi{ zCHT<;=fJ@6WY#Jj9{C`WGdJ{?2kRm?M)?UCl`E?;jDPlfeqV6U3B-;}9r_Upcs&Gy0upbn5BGg>jx+T!gW#-8adf%LK)@IvR# zLxmMwyc2Bf9Zh?KkQSEt2RMabz~ukOnFzNP%;$R)BB^M-Ng@(J5A5f05ke;oGX2z`7S`avn3G@-zv`$` zP7+R!+9M87wC;sf&_d5~1$W_r@MRpN#ZX>q%F6EOcV3yO9r;1D$zF^~U@tpA_Kr`zPA%L;WHn=Hs?T~39Qce4`YiO!&94L=A7R5NmPEE_}IUP&Vo5g1B;%Tj-@K?96 za3LK48z(0v6r6F(lL!=HQ#s_PU^7_8QoLO76@13{6;j8JK&upSfS$}6J(Q3xIyyB; zE6h&-V+x#SYw=W-_6ziXF*5Cq_Lk)r*tbk*TdyEW74n(6pVie1Z*%yFK1BoTkGr|$ zPh8a#)FdH6`QEb099g2Hy}j)Rx0D!u$!%3RPIc~ewvLX!+(TeP17tx#L619+J;k}b zPmT{~lI{PMslvm0uA4AX7uk2DdHCqa*iGuj=ymF1CH%X7;j-N}09rxXP*>VSA|0;u zXMX!q|6(*jc{9WFVBB3YLx-~WAC+_#xT`!|kii%jjX#}v^ynR?Q8J&2D_XzW|3AMWeiZ}OsS;`^%!1~nw6qRt^v{%|2%v8M3U^Pu zKY}F&E)igB~)YKTs9RDmB7)UScWtUPYEVv<2=b`nX?pg#FW1Wn$ zM^AhJcuo!Mu}QYx$e)Z3o-+Qf?=$*Z`801yBS>;p-1I4d#FcJ2KBqQs`Otp7JWeNO zCh!GhvT3(#qm)lm5EL{xcooBtCp}$zCDeKA;aNcQz1EYNyxN)|b^$glCHud;h|2Ns zMv#VjehAzxAbWIvj_v|K4fxy#-&JB ze`or*{O;0vM@=B9E+`!k2sdXPdx5v&$%l|@f|KL3toIP;E|eY3m_Cx05W&->BYPgN z^*HujSNyt{f0qpOpXC%y{T{rSfxFmvG=YGY*kDAKR98vavZ46yDT4`{N?29W4-{g? z?c)^OC+qd)r`V2&-G=ts08in|Rn<3|;G+Nz;Au}KH{%pbiH$3CS%2npf{1)?O5>&l znEc|;Kj8GLpzsS(-Up(hkMKweROl%15jbk>d+Z@7s7$I}96i3oIC?i?8Q;DPsY{x2 z*3*;qSZtx!RZk3#@L`MNaTpwect5IpocTwKUUHKE{fO#{y9h>qNQmQ4y9G2^VF7Nfsm)vh|oNGGW@nvt|k!$U}% zBctc0N87fG(;R`SZwM0zq%>qFg=fjG6WQHq@|N@R(-YAEi+-a7`bz4myf|f0)xU@O zs@TVI7Md1)8Jd1pT?906LL}}+@s(vNI;%^U@U{D4Xq``AA+*spKVjlRL#t-QmE+@{ z%5k44Uzn8?DL5a3vJ1PfQOZ=}asAD}#~8u!f@*3TBDr;xzVS7jK9~8zHqYaF{pT8D z)=Dd0^f>yLj888o26XM#HCsuc9|@ABJ8T>Mas6TNY0S*%1k8tPH3YihU-Y#(=BtwY zvv;b2{GWq8BCx3zj6c+>{Muxd-M7#Q*HO_XbMQe5ogfy^WsF(fe`TSFr^D7EQYGn5 zBb_FbzrO{nG#uDeT|s=ueQBTg0@lqyqRfYR?md_qpz$ z6349);*;^fBQiAM^mV+M9x*`>=>Hz3xNmGp%Vm}hxEkG!gMmHP!Az?r2OU@p#QUi) zpV!;2iX2vi0+yl`r4EMu#jC)nz$6i)7{SE>k)aU&aDkXpc5BG-xb1QIr{JkPkWZS! zn$0PrDb(3edI)2D5BCf0&kFQtmf*?*K}Cn$A;>&|nz})t?a9NC2^R})UY`~Cv<^0Q z<6)IV3Ofr_Cwj5pnI1tIv-&RyCu`EqxW>APO0{>2+i&>jU3Lba=aML!;(TGHH;cP9 zyVXVtV_^U{nR@~%ko?tO=k-EUxx@1VxPg@SQTVjv;ak_3Yx9J~#JMp=TXq%VjSKED zDGF_DGPm{f=VHwXDrRBpzh*O3Q?JJvuuR3ns)qVnQCVI(;ioJ3C$C0TH~xSN624CT z8t6ZxH>G+Ax;?=g+-2n#&rRPuF*U6%ZN5M;PVzPL%1>zjJJ;SQRBlsDXE1{ATTl$MM+gx5fI3%aLQqA!Z78A zkiu8cIyLeI;!zPYVIEAGo%T8q0mta(VkU~4HhQ7KgDy$ga`SaCNsJ$P*Z}1ahpvM( z^ISMbI3XSIot6^i0uK6DB;2-{JbZ7y>FZx>GSPnwdKlas?k z!Fl85M7zRL@c*oalh!IFV=O6V%B~bxgcjI(6$!+*p_< zc_cFfW7Y3J#pxN`%&z|jC?;B=aLO;wigtcY2DCAmkvg7rZaw4GsgxI)pF&Evb^&ky zFBc%8Ezr3XX#kA0s~o(L#G^3BG?LDZ{xTlxQp{dySXictDQf#~T0(*x(lgbF0>K#X zK)K`W+xj+JQgpX1T5EZ9$mu@;QDoo9?N~>X{NWk{mwE3bO#780ug?B?8&U9G(}QBk z?F*-Vv`GIbi52Gmm`^T1&E~)Hu&C16-PiUaVza7b`25Wz$AStC9Sx${ z7rom$LD(+d`h+A!P}-!D|84Q){~WQMm3l3yt>!wMd`*o zj@lmiTjL3D26ziXYI;|w@P#EVA4BDTV5*`8Yysk>CH0pBrpj9UB|ve)^&u?YzFc9t z_Dmg;SNYwct?=OK^O?dbEK$nQYKDA)=IEq_2Ji6Fb84yQ<%)MK4CgbvV3?EjcTuN! z@piUk>3YeSd|j&GV>t+IVjnImQz-9x{0kXbSn_IWLSpXugsNK8#P1Bq!EyJixoz4m zhj0XQ@lVtWbIc>gx*x%D4TS#>Pj49&XVY|zCLw_U0TSE^?(PsEK(OHM?(XjH5Zv9} zeQVGmGpm2S<4FMd8OM zQZ!5=jsW(@=MQnn@$-WSFRP|1OA$XjTh(wFA(g?BQ_eKv2WQBJo$;tk=-$M2GOHKw zL!jFRFLH|RAd%*EB_yho=KeOuB2~OFhl1LC>-+~t>{4_Qi}j;p=4eg65FZc?4dF#K zV=f={vyDxVLr{>!BY_7NoD6F@CjKOVGtK`)ua8Tr&eO-OU7dd^BYs=D_q}{-IFmyt zwj=vhW_VPa@?yL ze4ZF@yFSQg0uwLu6)K<}rxz*Y$1BGRB`30@y(aC$3!j%Q&--{cX2nJxz_dt$AodNi2+^x)w1sf6x_>NGHGii-IjM>PNQ=-kCoJYmTgt+HY!N_NP{S+KQKdn>11n*`0=PVTmGA{aH=EzW-B0xj429h$VS0lb98 z5Pc#*5ml#_)~{fTczBf*KgaQOHI-T3?v~s2QJQAB62!#1*-_?kLArc2u;xj?I|JO` zEM*S<=b@J+)sMGbcbg}$Wq*BRouIX#g&%$A6=5z2F?i`E4!fU3cfhC-i`{LLdCcd; zF`3n+@Akt5p@UFpH0DSRQK$kwKP{AWszi`H22sc*`%?6Pf=L)rIb-U)7m=p0C3QVN zLFzps9z2CB6{j&b&f`U35j;W5zZT(1%#>R?Mg9?6fsCL^bnkgF?xhrkQ1Z#QLDiFe zHS>3_!23ft>37-C1@HOKM{GcF^m3#x($-7#3a~LwP4B8RVym_1`NJeUSikIvS5{s8 z*KI(Si^zLtqiGxZLJN+Fi$gLc`2WagdpS5bbX9&tVvz`u8aZP-b7e`|eZ{j){#QpZ=RB-h-vXUgIp} zYH@Ul)BR(Kckc{}x+oHMzjH-$$Ydm{LNXXe_++`2!1|9=skdVerB^tg#F%(KzMnfH zxvcP8usl#c;?IvkB2Sg~wiINUs{WJgy?s_f%P2Wt zk0O4gJeD4g8A@Ab(t|l)n@e;F&Or#9su7jW{}0?{U6!nDa!Wl0s~z)y#Q0wE{XQ{g zv{k9qLIR19#jFk~=}U|?rG-WtsC_hVN-{_li@y9M`9VFBF=S^T*;+ZgGvuc}oWmuYVNScwT5+}mfot6|}=^0pm1M%O+#18>< zY18k*h6x1O4V*pUj|{*QKDYmbTDq-PyPG1Cbf?#gDxCmCs~9d-U9*r6K*a5uib6T= z#q%F_NUQvpdTACz8Em*u9}|yGj6Rv0bcJwb{Hi{QzX-%P#(I3d2~h+Dd1KdT=2K?k zqmc7Yr@qS?*)%9hXmgO_9TUV+d!*`~+^aHgxN^sA_?g zZ*N_5!ii(6tj{8Jy>MmH1eL2K*XZKIL!RvK5c($&X^oc0XD0wc;An zj3585#m3CAsS5ckK?*j`k;+?t@Q(3Xzc@{}Gsn}(IAw@cokKMVWkR}1g5CqOEYD;@;G)tvA{!xTIw2NL@-ge*ZSF|_{ z7J!^WA>S_o{RNMU=&v;)*w=}PIemd_yImrRhZC9xka5Ci>3mLSc(+htOiHw%&Ls&0 zc4st=V#;{e=!r&ZL+8jCvnuiRKzfT!r5qUnq>bRZ!T~oni#K|l72d+bS~rDgf!AI? zp{|?B3mVPw_H?Xs2AC82^l-c$1x_PEt-0>uv z*#7NF6tU=kQ|08mgjc{}K-26fGXIYnf6hk@sh+`dr=jbyQpTi!@`WAw$}^G`iPY$^ zemv$rw*g}O8h&WvpIcB8Bkf$iJ^L7K0?0<3FR#vA1b5;20E{B)&h{|Glo3?ZYwR>< z8b~sn$qgFrI;LTd-~!7V4gh5t6|OiBF5B*NKxHJ)>}B2({}=XV_1y%R~69I{L+-9%uMX5slp5fPHQPn1vNyfH}{}FFkI8a?Sq6)Ja?L z%{MQ|1nP37Ua++O&oW~=2P627t+YR}FRgQb60cZ(dz8QSrFs6KT*LA!2Ar=HTbUyE zr(#@k&gnFNa3!);G?z}U8cC6`!8&VfF%-x27z-bTXRyE`-+jEk-F*u6pLfg!hDk@A z?}9da43RwLFs`7K)!N4A(o<$?N~-I#>Hl#kBBp!`KfA3y&s^SiA_son zd~@~*kp5|~C?M%}k;wqSN8&bbg1nevzQlHG-+FfVdqJ(3;C!VE?{~u7^vjO3O7gXx zg&*FZYdfvpmods>zrv5!f|}*kPAU$d_2I@^NsszXJhS7{e{#}OQY?wY4&RUyrwrdq zmuh};x&=(_?!zB2KYbUCHw=U`LjC&XZF0?XP)tn`mf#Kaq;OC=!6{*6Br1sh(NGm- zq?D$xKcY2EPs4zbIII#b78+H?@8icWKR*AFMZF{))J@h+P8XEE8*`9C%XDAo%Pf+U z&OAITYJKu}sh3yORGd64EPb4-u%GNUa%wr_BgY%bloB6z-)QCLR_!oltSa}6X^gfS z&^+DZJ?X(Bc2B?Ye)czfd&1yVaJn8^yZq|ry+p4HZg3aNdaa6S>7DKN>?3WbkUUPo zQElG9T4YO3AouK5}n`+0L z;RFmdvQ9Ukb4^OP)5({oY^=A`*({r^ZM5a|WWUjI!aTX7Wrj%4v47sM?ddtUOqt0#ThMhq_|J}ykE z_V@HpRu@=8RZ>p|{@keoh+okKe9u*(EMRz5n3tHz6kBDcbfs9i2X*E`Yj}sr-zLIz ziR~(_RWM-=3birK*wi;yia*^dEps>NL{~TSiT1ktN0ywg057i0G2|aIE6NFerBk(j z3e|^c7^6^?+B$o~Zjnpzbi{5hYMDZ`RJJrac1$ZNuPQ9jqbe{o)W;bmF~n`skx92u zLKFBZTMiH_T{~RuA`4`ME@P#bQt51qm~X*(@K?Ten?1SfzBXUWvDp=mNMFmeQnK_) zNYZwVsyJU3ee6d)i|Zyo!#ZTf&v72F8B4S0TSxM?AB*-DyC;fDv8RW^LBe_JX}FK#r{pjxc~iYC#PZ&YX6@h5GD)l=<~v zA%M%dO!fgsL9r0g>+NkZFmBWD`q1R+H{{{T2*#ks#&H_8%U@;sqX!)Tloe|RWt?O* z2M6vtNlOdW2k6RI2hQD1M61nJS-w3+SV`>^;w-@e-pq z7#2g0LmB?IA%#E4asKnbmEI%TQI-1{W{Zbtg#66ETfA98NT2bRIu1Kt)o&Wc_g3Cq zndHTju74WGk}&DrW&Iq1g0xTG|LwT01Ts|XFLxm5z>SD)tZnP5A)M}8=w6OssI<7k zdh)a--%=r}P+9M4Vv(|*zfUOu3oX%?d~?sI<33PFiOR4{HEA`t4Mw>P<};h# znK#2|lp6yKUJ zH_mF^Y%_h)l1slD+p`xdSU%OHJVk&68zKT*$~XB=8zKof%1soA{jUOMQZ%lUSCtfm zhOp_|2C?JqsuvjK#N~7Te7=C5SFyAaq?1xRlDsomX{@LRTajtT^|UVrO8e^iS>9@X zn}80!;!OAuugC{KKWRq+tS&tNDmM(BNM;6$G(np2D^Q+zZEv5vY&L+1TeP1`cG@`f zPZLwq&7)tN6-`>tz=JtsC(eFnoqqS~Sr2Ws<*QQTq;*k!enjC_iGl+D4#lciA3}>t zhI+$SQu`_~hzb0unQk+i&OAJ?Y&T2(C+B0^Zikfz7%p`!=edwQ?`5wj%%v1tbJor7 z%xcUWcPL*8;vMYP*yy>02-)ps7f~`n-ua<@rnaDK#&2{4TRXfVv9wov@z@hM&tAKE zHh+Qh696p3=tQnwuV1uoz2Ti2?<#mXKuawwEn#6{fx*+9#?h)|e`Xc?3h`UA0k!&d z>>1nV^d)P2{THRP<*ar%D)|+w_9_Yad;hOLSpeG-e|Re=nmpBU#24sv`n&YFIvNpZ zlGi0p`Z7osxe>r%$vmf!WmAM=95Nm5uDUKyF3F=|lC<^eOpGkASa3y|=(osirX1Ns z?1f#b_9%vGa$YOkK$~7UOJ)fdex+V4uJK2|lfsaK|;-~?uH~NbfZEnn< z&#}8S_w^>5Q1bBIy?MS~nj9uONSe}Q_%VAUpH^`|t%}U%YyX{oB*1Yw3@lP@GyLKY z1;sCdo~%HkSgpz$`_GE!9emV{FynxwntAa9j}``ED2J1t&MC42Lp2#(vMdd$nV&q7k@|r^$_Z@Nz^)V z>i|Qq%kB!>CIwvZD3)W^#cKFi*_@V3ZQj0$gptd)YF98TH+wQ?bEn$_ zfpXg>%K+B;umV+z!Sw=|M&tS0abZ>dTcXyO62_CI*sAm3b5B7|j-f;}7H#N{g3tJP zv%Tn5Mhwc>C)owpv3TX8fS%X}_=Ck7+JhnCbX$#88!mUPzeW&oM^G<}CNLvVSU5qI z2|X1Bfx74mC>Mv^HiF(Z$I5%6*+Cf@H0$-r$_pK$D*ig6~}M;(u!n@2T*UO9$>h?TBqMy2aqkKJYtLu+z8it8^}g=3u|w!JOs zW$j$x$QE-qVpMCNQvQZe)wIL!6gn10l1rhii+7$aSRmNvHYh^q!j+KgDMEe9t+wf6 z(-|AY>>p+3F|BNpdgRO_>sYS{T&OwAqRxSTP%u!I`gq5S!If?KioWb!8+cXvH9EQSJDsuDe-b%o{{T6U%U31 z5yC&``jalzh2H;D?v(F?v`4G7n8JoD1G*OOtOq<SxDkktl zX|=^b)_DGPaEppQfZA}xP}pWl+~H>uK-E&TKg@c$^tiRY(Q<3oaI&V*jgtrHpxcUY z%LJw02DIz3p>rH4=h-=9QEJMrj2ljUIuYEUlZbOM36ZQ)9reS=(%W8W$dB#6O9v$= zh}C9yy1$x7e}@FZlkzXD<%R}E*HphnDH9}T(BKSdO%m{?&4Qh?Ie$<4#`;}{-pfqS z<=oyn%r3O0WS)YGCw(3Wpz8dh%s#0g9gzy{{$TYD`VlG|8n}J)R-t@LeiFTXS@;2| ztMQ@2qO&z}W`-$sv`AJ<70bb)Edf*MocFmw!#N~J40Zckypi>@pY_V zEX>_#p2wamzg&5x^2**>znkify3QB8Aq4YRRHWSsy~G5LeJARHV4-6Tf7z{Zs=WaU zOd0r4>nk|O5+K&QW@7qF*J4HROiEFb_E$Udvab&Iy2Q70=sS?7-fv&e`X)SPCP%_8OgdvrYN$F4Fv}W=UZ2H!F_s$ow9rv z``WWSn^Wuiqh-ClW?^P+VPs2@zIsIUFYxWOi;QLuT5MHhJW__IpfcNt+5`+9ueEi| z$A#TfrpwoP!dOvRZvD55gE0-7$1+h7+zqUvlsktcAbNnI2?ek;MS%=O1S6(C0L{f( zR6a`iI@6gvMLl||V_uXfY(m|XfQA6H)81JX&6<`}x6x9x_*@7kc}wZiOb&{UJktHL zp>Z~)fF2z-dAo)m!NvQtr;2?{eXb~PQCQz&4YxR{(_m<7wwVhd_wU*4UixnumaKgqHljcCAoXT_`e|>NpN0Z3?QI2=tVTxDF(7{x5$0n)^%_X}k-P>cc&xlQYYWu=>JDTZiPOjG$JdIq7g?;?w*KBb&Fg zt&UWqV^thgNGepmRGaSm`ud~g$$>(WDiwz);SHPkJ*wcOtbzy<)u!(A7+mjK1@@Y|tR*V`7I1fK?*E=E!@R3X8=od@*co6-#$pjmAAeLa^G zdi<^h%mXfX##g~?hkl(NO0rW3_;AP%F^Oi9I>stvoX~q8D!S|N{{MRc@|-9b!{$7M z1m*3gbWhj^ZHtS`0^0nd{+uXsE}pAN1m_rgVU&p{*0{{W*B@6bm2pr8ALxkr@W0c2 z82Y-N%6I`vYmT__=Sg+fNeB^KC$n?8OOc(Ln(}j#<1d`Q{>jiPh}lme1Ej(>4{v*q z{fW}uEplv?QPk&9cY!R!Fvt$$Yy8K1kq&oG$j6j;U?9yq{<2Vd%kuE~P7YN9km$o} zz8#ptO`Z8&6-je!I1WS+MO}qR-7136_(h0r)nOO!Fi(UM zeM>wcZ`yw2B7%&!m2IE|Y^M(#W|hBI-a=b8|IAmOwS#F!ndRHQ9_u+dg>VyL`t{wG zgG{i=PYIoiYHGiDR#<4@DZ5>0QGdYQur;Z~(#9zaga~@`3S)l08n28ExDV2folGlC z)kft*H`@YV7_5Cs8#tNT(xC~EF%PM|3d<(uq=3Y|MfLnOJ&j@SNEh@{i%TRJNODhj zOQYOjb*0w4@{H_E@2aeWy5S-Yc2#6vsGWsgm}UT_L_W%|*)~E6=6R{u{=3+$Y5>+beB`8{es&dX$hO1EqNVq#u z-YcY%r{QB0Ov4?_87uL@c!sB`ebhRE?po6?F0=l|75igaWzEmN0kT>Qw%C>A)(;~y zXaR$VneY(F<@(TS7*6hNvQ-HP$CcPBj}UZ(bv|Zd^>VSXUN8skWxpmmmn;2jSt$$m zDKSTdR5Sb#_50!zls7DFHxjamf4IkgwgVB$dMk}dOd`hvF2z9me|IBOr~1;+S?=J-imqu;K1}v47+yhqE}?5ZrzMf+;94{6iFz zO^hWA$>)=`Q`)sc6=vX{3^$iije-k`AztPlzgo`77Cd15w?Ik zGvk4dCt*`S#84|m`TOi18Ic4}0_{yh_G&|ciPDrp;CilR(gV>xy4|YQPB>ETt@wa# ze&P3uQv~kron4U)Lmb|MtFW>9A2oOrRH;qucDxlPzrzy2DeqD4JtY7dyDV;^pH?1a zRXIc#vePPzLTr`jd7lFt&b(#EB>q>E4*jG1{28QfaECpDSzs%xQuaZ!S(i1f-Wd7y zgVH)RRjI8O9Dka(Z+Qm>nrDlk{cc~WjB|N@c*k=bGoR@>@`MYk&Lci_%wagcEz znPY7X-e065DuS~~P|4NgkR3?$b8B+H?3+<$z{Y=3+RgBW{hLLZR}LU5{?Fv5^H7yc zr{K70gxCkN8C;t|8i`S_{A24p@r}kAN@b;O4_hv$Y_;${E1qA_5 z#1|G*F%o*}KE8l!zFMC#4R@8vzH=7rRQ!R& z+>5I<#lpwK?A(<61s}EYlJZJKu2{x-1vWGuZKZXnn8NJQ_*Q8~Qm#CmqyM7Kv`cTw zZ_2jo^#fLj66(zz-;bi~I~1YNt|oGAgkO$yp1 z;Tm-yVwuiK_(HS;SekUP!Bqnj6BEdwzvrYZe}iO5qyvU?gZ-{J9EECWGl$iK-4~%l<91%$ls&FDj@Mh^t9>EO9y84Y%gmXBd?;YAs2yF^)cW z*ZU|IpHM7pj3bQuYwu}JMN4SmK}|sFjEZqp24s08=;X0sJ=^>uOk(BaO=7GckD9_- zgq1)LkeAR(K`4V{eB1XpN_9>##Te5^x2QaMHrGeOaBZ?7F<|MCLjCx@Eq)Q?VhF{a zVY8#Tfx@vfp63ZO-4y%;|DHNxn)kN-_JceF6v5s#tkxN7P}peXQkXe>6D}nGppf1f zlnv_a+VJe76ArXb5wuUSKrSyS8~kOELw_Jj*8D8jtoYrvCg4$2{@;)HO(Fe}GW$EO ziJjD869`e?AWJ*GK0`1bIcL~*_MlJfabCCBw@G)uR^oRba?JffY|MO-o?BYTb|4xi zpeddQ0e8tXip79RuL6#Uy#Je^dy4_6ENEJ#lWIUMe1`CMUJd##d*UV6STO)+Gm9SI za2HL1wp55G1_P)Dh+gdvnN~K%HYYa@PSG?iH{;i)#!(g#;`?%{J<_LK}Dj_DG3 zcj1A|q!pv4T(z{($&cIERc9ca{-dfE^+49%Bg-(0T|6D5T@3-}!0hqPt`Fib-u)rf zKy~b6@^j(&&0JE_KZ@U8u^dQH#xC})*g5WklhKpZ-jmU|n1TD2Cb`n=Y*1OOYzv_z zT;NRW237w_$iZc?`IXZ8lP{}pAmp|MWXPirQ))`7*Q^Or-7SA1WTTiB)x)gNyOdKw z+!^bAsQJp^e6`Me&?hx42sxnz-OHk2p`wwd(EE)$u|CH&rBell&cDU441pzfWr9Qn#-P zWg#wNkT6PLzu+a-=FIDTRC-H)`O2?5O)*s2h0)eKKV7^|aR8GtzT56mvmNLJNm32WJl;AkX zG3M{AvSTtgdF|DV2-m6{;#rS(!k1In$P2L^w3^yNZN|4F3#_o)~aReqJsRc z2co+5snHcheiSTgl{o%=`oSkOwzVYX3tqbTQafy}R9U1w(hD3PJl{YTx{@;1NQ80z zVA&f;@q>R+Y7=$-2{p2vwog#5kQCy#25f~?3BVV|s;6%oz##+ri_Y?oUq;S9Y6pOb zoS70-|Ga6BrOhPQe8c=km3t}jf{J~V&$F`zd0nuFc}FcF%#&GEH{*#YghzV>)!FFx z$NzRuNmm#KN-b*7G|zzT)CuaY^cw|F+g2#YfT_#kGPL{`_?a$booB^Qk?q{sfWj~t z3RDM@Z2?cuItvXD0o?^$%f1o&fwp-RgB;y^Ubs`Yp!Z^0ww5G7iC_W&KuMFCSBzI> zqxv}b1%^zy_?BtcgRDJEijyLn2I-U7cV7;)Pyi_-u#OiW56&_Z>x}yPuBx(X+veMQ z{4Zqoi&DZ=puq(;u__wI-ADLYF)z(3`FrPC5b;UH4^o?|toV5m(fh6kS?GY`Fn-q4 z3YfaOPQ^svY>EcV%-G$_Lw<%bzsU6G1#^$jWv2WQB=rq^ryQun+pU=T@Ow0-6?LS{ zElM$%)(JdLKyi-#BDL!VlsD` zmP|aKx|m=+Y4tzIcp-Ybqz7w-DV7Do&v4<)|#)^EP{vX9}Vwp?1a2h=d`B zu}!z`=V3W@;CF~5r3@We0pBd(xMGRseecpoxwY-ABU);R{li4x3uhpU;W~Ios+7u6w1OW6td5*@YXn2!v17BBmSVU@-iHQ{)SA=a@P9YXp9&5Qi z&TB)_?$jvwx3|1~egfCKJ?crvLke>>YPzUPRby~~38jhb>khK0Z9VclI@vW2r;AoC z8Zvf}ZLBh5k<)RDIDkfq8ka^`A*K^Vq5qW)MY<$LqFpUH$&7(Syt}j z?iZCWntze09=a-Yq#mYErL8_yrS#5|+O}wOsZU?V6-JKXOeG8R2eO&HWi0tMC0`Gp zCA>VslE2yuUdt%&ks?8L5!rbbkrVFEe3z`11!uFqCruC>iyd&6+HDE|2-s4HpeS8I zL!csHk=-j?G;c_{w+>`EY@+ISh!uM$`Tm%*tkVT4QVbGy=k zK?junOzXzQDh?udDw>O9WUf^z$r2z%ClSw zIckA(5;M2MpZ^nermZA@mNNxS+GX3g2@T=^mBts-0-Nc4Su;$UDCA315@1Sz>{owUfdS{WgvpQc!rOpaHs;eJjxi>-|Rl*w=#3#@Yg5a9d=R05lF9PLUZSs9!MWsAe% zAur#2Qo&JBfDzFyF)fV`E!8i8%>EIZ{D1**0vj;svG?WY$0PGFLHFofHd^b??|u}M zFv{JI=Hh?5A|z0G-qtum9mSqPvQAO;3evW1GP^2o-KQ?{a~(#J(U$qL`^n;imZ1mO z?~OZt5tFn=1(NGv|Ceq@7r}_(W1KT~FrL?1YHfKr+&9D*P=A7xcsHcQ@=pEvvUFR9 zfwnONr&_hZ+rLHtLdi8@rEpd+ZtMcaIA&*fMT=8c>4ACRC?7rkO{ z|LH^0?{P@_4M|ULXMe8gyQ{AmmUXqT^ub;NQP?(pKD`%O$eIBiXCnk7@uy%Ztt@9? zzcqiJt!(p1cY{tsPsW9Q>aCRNIILq;(asgeQ9r<$Ddh}j#Xrn~!16=GZ&_7M6i5v_ zs>#+7H(|oUxajQf(HEf`W5%fPOx*w3(oQz2&dXJD&!z;r&C6{JR|RV24Cbj0O*3@F zy6-@)jM*oo^d+S0lgs#*LS#qfwR2(wnw;X}4RAv0fSM^1R)C8tR?b9q(szuu2AAkv zz;MqaqvV5S0xlXSVR7-hmc<6jY?~I`#M;2Iu0P$iaE^h1rwXEWY?ttGFj=`&BdFBf z#>4|(J~PAjF_S8pVHg@PK_tWxGyl3eqe6d5=s%;t_JyZ2M0s7_B^rd_nncR4U0@0@ zhO^(k{y#k!Jc~*Eg`~Cq;3Gq(qDy2K%jxEUwAv#z2BjzM5u6#8(B(g8;R7b{*N;&m zp2`@FpH4n#Wj8-|uYaAFKax@7<$?XHDTuP?)Wjh|dUC|r_HFJVtOaL(8aWGJM(5q- zb_^rJ8KLzpw8q`7(6o$&s|qXn`^%i!y|V7==bJf%Qk*|iVu#rZ3?GNQRic7_ucf7t zXbE(}h3VG$*tZDE7sQW!u5c2DTK(>T>iTU>-+^&Wf1wCprq4@u1Xi)Ch=vT$@LgDp z1%NksHT?v3Lq*C#`kY~wIN5{xnr30whO>o7QkMI&Gc8-dVgvDsEz7T!h*k}>h)82* zZp&vJ`)GcH;s6x@OV`iOzx55_rE20Q4A|7HC)&z!=AzLerJHOF4x0bZrZ^##Si-2c zv|$4~u058`q}+}{X>+T=#fdimC5kz=^?XTzIlQ-t!2dDGufTPEh(s*SFLbm;Vp$M9 zT*Z`f^Y!a56q}!Eiw}~!pJd*OI046)g$&He&5#v*{RmgTuq212AK{%cq6M8TuN1?C zu57AN#^{w2Ar#{T(R+=tZBYcuUv25&;FTmi28Qe(A+&QYDv$BoAy<;CGJQ*7#@Cdk+Uj?z`$Sg=NRsd%-DPg8`P?yVW z?^;JNSxn(gk2l=<*;L}^0OxtcM1#{eLkc(1EH`_ec`(-c8(aeh+qtc3vr|9ujKah$ zJ)!ors0}RtKq0lB4*&i0x5T0^kCZ?Oz8ibuRwK}of@Fj9;Fzrs{J-6*=7p4 zf%`P2b~l`GqDW<7;#*B|53b+_yvS?t_oEnqq6>Wap!k-%ll^wgmAtrqhJ^wxTZ24~ z3?EM3nPduk#4)8yZ!x}n0DYuQ1W)Lr==EYB(YyLRjjA_XLfab9%MyS+n!d94!)<)Y z!$O;oOUDFfuxHRUsE^N{sPXByn@8eGI;(y-)?AICF+uwTcKwBe-ik<8&#BFU9;A## zh$SkkF@tk^rAW#txWrfQ6>n(tv-cM~)kMIRe^e95nK~GF7h=eZQNkzG0d3bwh5?_f zv0#nPq&A=>bUF04Sp-wF%8b@W0LO>f5u;fSh6FTrfWTGX=i5%2fJ?6|bsx*FZ`ogj zOEWsI^@9t;N{H=^_5LLE>HU!-{l>e7R1|rUVT><-Oo@wb#1AU^`oc42;mJ{ewoB}x z^Zw-s)G9m@ANFK1%D^DMKUzf*WSdlS9QiW&8j{Nt8rulgOeVu1BmolS-QpqhNji?)H5q1xNFk zISQ{D;uFQUAp5ccsLcA`!ZgB%o>5Ywm~-lxFn1;8Syg5Rd}f*##;x@5Y795U${{Ct zJo7^nkZ5x5hOJIuDw?(swb=g&{ibEW3Bg-rOeYX`AJS8nSDtL`tn}mMIDn@2cOg~f z4$|!SICqY=yF!(s&U*e6=|5f8I zI9s3B^mkk#OAJV=53WM8cR8*Zn~!aV)C(6`@k+9H|FuX^#(i1V%S#x*^k-yiGG(PF zKq`p%QczoVUdf0FWx9=EZdVZxh^}|3kI?4`t%$bJ8(nA9nXI!Zf0Kl--vXOie=3BU zZeK5IRhyn70SONH2OXh1J?G=y9X~CNQhv1Pa`*V=Eys&^MAtueK!Z&*{v9ht1rl;2 zYE0m(+$V!Mo^Ike+?1fua!Byflq8Yp| zMV+Un=CZtCn>4SCj^@5st=_2e+8Rfc%9iz05(2y(HxZKxxVf5_C85-`|ZgkRYq1_9B8uJ_4-pE)cMHwGQPPY zX1UzqaOfJb#u$*BYrm2^Kc8Sc8;);$e7h|NBfFS?EW3i!L0wQ0FlDK%!7Qs@SQ$=D zfdm~<95IlHxcs34wj_L+m0QBA{G;s~EkfP1H8ubtMBUd2K;nf2o6@Q@?NVGHjEnSN z(I~=KN?ze^jPIw$ko7If?hal*JS1IR5|0jn$>8Pr zt})jXfZfEMteSmX4BXHIW z@fu^-@;kire*1c7ynXb@TL#nwp~uaj@^wL;{=bvL3PD-sV}rFfFmdu;`sl-*rQu^R z-R^!?n#gBCJDaatU|gpom}Uc|ZB@4WH+f zm&VF){0fQ*_n%ha3Ir=x^mvZqXX*-e2?N+|dgE@DrlQSqrIQ%QJxF2}c|CqX3L?2K zB}`g(f#LV}F^0u+WcV$ITvji@GK(W5S?+C7DHD_JODk)BR<2V7k0X16?Tjj(05ec; zVG_Y^BaYQxx8jRR4=%Vn{9y~rK4n2h($MuA&(uI|(c6$CaIN3362M2{21n3xsqOKZ z!P0x9&RDzG&mklzj&~@D*Acx4UrD;zo4ShE776%vqJ{2=H8l>{T(x(7JB~6syK$ou zq-d2^o!24kh zhe0$zQBLNeyk4;o1E~wQl$Q{+~6;$Gon*O_hpc zy!+TzFDKLKH{H&*J6T=>)OT8gk+em%;Ewgnp)f5y^32JK>-E8#fo+#@gY=Q%8hI@N0Kq|8yb%fh(~3-?fIeJ0e@RU4vG+1`ru$5tvr zdPhHR@zA3#s{W~lT7NmZh;`|74T0=g8JQw+Rw}%=puJTDAZ8mavb+08b~!oGMXMql zS*Kp)GR)3fP?ePq5@|p}OrC^d`pDDTa>#%o*qVNGi#yR!xxl@3S@k$;0l|9L9jHB~ zZl-H9Xw)b-I2QL79*$H&3=TcN0G<*S;@?@PyQpBsofOrTMY~8c52jyoRz^5q`dah$ zHIDIHhGpI=aiQomIx`udp%tZ1PI^CE6$ZyTSgiH@o>!2%pS*rJMC~7Z-M3ocp1p6X zTN@c>g^N4LYg^ALXOeUVUMP}PYf9Un?jqSdC!8BS*6iCpFv3al!CO5rc4}@{d5IwI z*L!D4xqj1fUY3mqb!MKmlVmpT!+N=oYSJ8g1QeO^O;%0vc@-^C4NsiLcRsagxb8Vn zVHYvC4-~vCsWG?N?LvQ*)!+AMb|OHHnb`vWCf;W*1tn&-JxUc6HER1zHJr3?{atWfTMC z7IZ$cpXSz+S!zUpo$6XE`&oY~p6eIY1JYe_C%XoC7hc>*1s(kt->MCY7S#c-7b`x0 zvylYU1>(mmztR}l>Kx&unsip8J>k7QG~m&jp0D*MXnzD(6SdX^n3f0@7gu8UioS;w zHlE$@Mnb5`c!2xoQc!$cK(g~~k&8Xv4X-Qb59Lvz|LT_% zcY9)_w~o=yO2cb{j-Dl8``_Ia?;#LIhVX;=TL#KD(xr?M|6=2H(YXhW@^xj=WsP*k zaJ@{d5FdBa|G>6HUjH0USB9F7TteTjm>Q z6381F*lrD{rV6e7ipJOKu30%|c!1@_`i8U^CrAUhW^}uy+{NA6ZL8WgWI;Gz0U@B) z1TBqm+o2=+u*S1W1NN>SoWQvVW5qVvK)Ljna&Ec&wv~F1@ojT&0fUn#b z>$lWvZH+jZ+~I<_U9>qYl{zA4i#Y@AS77V*BvY>8RCn**UT#Dh=f(xS$d9MMR&{IZ zQt(^9ngDcU4PB)i#c@S*8+62_`8v`8WQ)IF-w=2B@|zW&4k&{f%OiVTJ(Q34{4Xf` zY&t$uK{)G>a6vw3JL>AQG@~B2ncAY0KF%#lr80J1Sv&2d?_(Mfo6JZ=H)o%I0e6xl zq%4N{c3Z$7Qn@=sj5BRQCG`T0#QPcvu*Oa;V#z(kb|Mzsk5yhYk;s_T=U3AS+}$>?yhAWp4={0movcGgK{TV=4bB!XK3dcN%M&8yUL& zLqpOUZNgvex6J5$=&@wKT4!dymYtz#J4Ep~0UkS*l7WO2Aiv>CJqW?h&r0vbt+ym2 z;X09N^PN*>KD@$@J=`a8lyQ#Fq*d-Yo6ECg$hnxWym0V!Tnyf%JF{7Hxj_%&CmDz| zk$zTL5m&Z8>r}FsaKG=Qp4dk~NE}Df9tmXc&|ui{Sf`vqTniAYvLqQvYb;Gzw-q+8 z+5>^rr!dXM+Mu`3tyn2E0I=mmm^Gs5#A7uiPTy)?o5~KJ1d(nv(WQEDhOSEs@=2xW zL69aP`56M@HTk~|kfxpfa7IQ2u09=kf*eZ1SZ`-tsWtZ5uDI;ie2Q=-CVLyi7?T^H zr#A@Mqwp%UL`j=X#F|!%@*XD)z$m9kZrh*c!0wuQ84+B4>bV63tj{#%TLQ%_xpo^~ zm9Q&@(_ZsrAI!bfwkf(0YqnzeF8T_eNmp6Q7S4?+L#Vd^~OcnTb8~YBTm=c+MeByGOal;+A82O1s5KCKj+ZrA}rv%0;s$00RTAZ zH>~)r6~6YoUhvdP&neV&&&4tE&_5aWXj8iB^5!s!#^?sFfZIE+O38|VkGVNf7w8bk$+ zS$xoo;7T82=#S>W(*VUh_?y0X5cL_$Ob;x9gy+XL!P@`_Ik&~wu~cb%zwh@^>#kL9 z&*Q#LW9Ayg3w$8gh)A&oX6Agn_$vO^_-~h*n_-YmMyWs*JZ1R{VEa`(IW^HNNNt7j zsdi@jcA8r!yEb(xcrIJpYLJWYX2UG8!r8TV^(*VN)9dBRlghO5PX#G)+WN+p>dAIS z)ZHqc=TA1QIN` zy98TY7fWzSAh-s1*DUT10fI{i7Tn$4S=?QNTVPrAZj#^s{c!8vs6z(% zx~ID~f`u6t-GQYzI80k=Ki7v3OO_Bt-E4=Tqi3wd$=gRa5K}0<3%l-PI*8uR%UoTl zA$(;wX!_I3ud5nfWinG#oh7`_Fk$}mqe!lWimGLKB2yD=E)G&`AD~M|P)HMjllCgc zIR7*AIKSxG{i&6m{|MhP(YHiQeM}ZE?%3Gq2rJit~l`-}(yd z+l$FxpkO{Vr>W<)aY>3J2Hol)isyOv+wHR0%hR(=rEN85207t$S#Kx2(eH|tq&Ly5I6aF1Ka3FW>Fp>-$Vr|ml zxR&H|fF#Fsw_jSfJ4_x}$vht9S}i>ThP zUE4npH#~v%o^*Lvu2|c>_S+L77|(rQZC|CfF{)n0G~AJM%6(4kzn)u`&3}AVVxgNZ zWm#xgoWS^6iLrO)E_DKJSMM9Gkt8fL5w_V3o--GI;+ADj%PXvpJpYiW>8pSP{g|k@ zAde#Z?fCPj^5FOm-5111!A`7Sea;u1RMOi~ru@ zO*4WI9J-{6Uc8lVziVQ9x?jO`>PM@wEM{hyT^=ts)scNSYsVY&+PDQeFq_OF>6-;< zcf+r%ix|HS{KdKO1g5w+=&JL&$!KsM{;c>(P5aKh)Oe@>{>Q!Udot5Cf&HtjqSqMh zqwGF+8ui3}Y~*cFUi=Icjk!CnChh95qO3_&qFxB zL7Xfq(h;=un6lPnx{a(|ptuf>>yzQ2O7`dM;HIhGH>!r+kaMAws_h6m|IiC^c$1T$ z?8Q2#odvoG{w}#l7fGiUPy12u9W_vfx!L)f5s-n1dQDZTl|3ej?}Kr<>$Fs9-6b(> z7JmG6v0v?e&fvf;!=oxg6CjrMEF>#)td&5dD(NKd;K{3NocsQ*o3LVOl{vUJf>hLH zDW|j~qq^KlWs){<7ZKyz>*G)Ah;b1GGVfJ?t3kd;(F-xo{vHUw?nh&|;b7K)f!|mOiSI2l_2kA_inXoV@Z5LHhC`#e-ugA9 zVwd6@voJ3+on;VZpEWuX3KQ$ej2Z}M}rq>VQx6W6mu(XGasZzE6QUC57j z$TUHrKY|hxKwqqxJw*kGLe$Daw{>Zl+VAJvI?$#nc((Ff_!fr_7$5b0+ycrp(;1RL^j}^S6t35 z*1>9`N8=`UAne(FgtO4Vh3!fhQfLg+LGhbtI$UQV(|J9XFbNH527KZUcf7G3k!8d# zF!>(zODt;e!zUoD#3jrb2VS^k-xWS0>Auyg^qUb6H{#o#(tkK%kfew_d z$?^_47xpBco%3qYZ}~u_ZBUPn?>ZVBqkP+Pj!lOxx`#M&-UT^uzGEb!PsE5$k0;q~ z%%icK`ue6wCd~!5CgYc^(G-BY%s&G4tI5e2Q!DK)U_cfs;I5jEYpJX5dnNx99DC%p zYx>6}mgGS7TG-dm82V@}Jp3@|Rho%&s8J;%jt4pTT76Y7*tJX3x5mot z1o)FeJc=n&V;}hDT8iPVOsMMOJD^tliZu!eTnR=|n7>TKDz9Aa_vk=3*Bg1Q7jtiy zRq#87+UQz|tXbRYRyB9qAiv8G+lFd~jYtDsG0KfOmdL93GL$%XzL7%FK#X`v`++c0 z9F?V+Ez*|4tPJ}0z8-)XrTlVT-MWisiSxO7(poKx)paB+S>%KW=lzm}{8co4XIEX_ z*H#$m(IO3A;?l?P4b56e3Z_xx$$pKYm3^<8N5fRQ24-l#99EC2feg&=ol8|tXskL@ ziuSb!8^6ghNr5e7Mxu)m|89$1h>!6f&CGkJ49 z|B^4Gx3K-n7U=1PhUt5i>2+T<3hZEi3c<8RC2d&<7z)N>*{tA5+E z@aP>Cljw*h&?M+?j1iODHtT-$tvOV8yG;K}*;*TgfGVwhsl>sA4@F}|Vd$J9iS#K0 zcAuhuIHAI5-#Zpwqt+|z!00rQq_yKn6Gc`ySZX&4K|#p}v}mO-2Fyj1vccpo6S9iK z^s--(?l2Gee>7gZxvQ#w#C9Q+K&`@6^AXO@_GO|Ft&Uom`j~Q;I&fal{F)p(>&-&^ zl}5nA{LP4lE&FqJn^0_Qbu%&llMn=$5QKz^rM~zAo?wOmK4+_3Gr9SV`*L%=>%4ZI zwzb}&N|8z(TUotpLz!BwoH*-gi>tv$@sDDt?lb~-ySI=qGNN83^in6<4nI->An#L!_o#Q_ zPG1CJaa~dA<3FU$zi6;oZQgw0cZZKkDUZ}b`}zF{k7WFd-%VmN2n%8|Uai7tNa=d| zjKM?A3H{Y6QbJCP-Y>%Q-})Rp(|se%C=4DGyQvyNSFw+C*%kd6FxTy6U2C(djl#{8 zKPNgBzsZm}@HM^e-Q~3BalujJ$q*z(KjFiqGZ(UJ=}zk5ZA)?EeGDn6J9Ysy*k8+o zp7OMZyW-e07L~3mNjZQYngt#L*+@WQY?|%p321%M*!$4%#0}(R3k@MyZ$NAAuQ6xOI+b6qXW%5A-;wcg0WkJU zb->#o+d_wtCUeITkOAPEFi@s;$&FU1ma9?uY%ed@euH&B()h{cErZ=s>`A>PI5XQz ze7(n~=i9*VuAQTw?(g65J<&8L)@(nuObsD14?IUu=-yz=?k-;)b?6TRS0S5WWcK^B z7wGL@C=}_HK3)S~E8rPpRRMO;{5OQfDK9SK7nU;#he1Z8Zz6Z*AIh%@aYS6hXe?bbo-#@?R8BOm9n{v}zaEirktabs0W(fHU z1Pi_L#2?KXY85DklMIag9M=e08K)Zm0}Lp?|n2G;vo zo1FA1L__tS9Eft6iA5(^Ewrq#5YWvvss{tJAvnrybwO?J>^bXx`U@8ozSqDsg-%dx zRWHsBrQ>FCug2?sT0#JA02ZpIHQL&C2F)$MC7v?xPg$n?L=`z6ylGeCF9c|}>>k%0 z2_y&*Q#u=;iK^o%a(p0PS`V0LfJM-GB1MQFbnX_ll#d&`#wFTfXV~9n?lj?g_OX3G z|KY0j#FEDZ1vy#CP~vlwR?3)U$J69gn)`Gn1z8K`YQmSb<_rFqjw{?tTer%(g=I`$6k;5$~7iT%)dCvY5Qiq?EU`J)_M&U;IAj5wcJVA_YdRgu>p z=w7Q__u6pY$aRf=-m=^zHU9)O!A4pTe$2M@_6d)ADB{=inWZAAmKYzTUC@3_bzj>ISY~xm2HTc9b`+F$ z7DO6y44%sl8h@c%RlD4D9|o6PQ~$6;O<8DO#pU>HNfcd$zfU?x7~e~*vOl=XVhO}V z!f;e8LD%Pkb%*}L?x=>6xfJm)E#0nX+ZsUAJWy9$t*DC_PWf60m+)RrE!R)9^4IDx z9!i#FmKR*FAqK2jI7yx(YXd+Nz8eSVb*!J2xz!0u-yC}I8+ljXI`#TgiJw3@CwecO=-0|ak zP#yLisLpn1Q@iv z&Ftb0z4zgQV*>RO9@uPa74v+P8dLTyZ?RwMx7SYAj!tWvZ~+6X(<4XIw|&_y?ufS@>M$t5 z`@B8FY3{2{TA<4k(i8OIM;(8cD;@8q19>UWt<6CZRnqv5p4_-Lj`230?f6E9G*&!i z<1v_z4T-F>7`E)0W)mMspS;Jek1L13i|yXZH~c5eH~eLj`>Sv4vb-?(p0AYj*B;F= zj_MhbA8a+oQwNIeE zwpFfte%~@_d7te#-{Cvl8XSXPrt|svUgt*eYTbZ&7%CX=kK){q4VswDbIH1SQ?b%i z{Gx=(UKGkw16he27s?)Jd*;tbEf;A6)%M&r318iku;^zBu`MOl*a@Vs3N;kkqDNv4 zf_?n0$DeU4%I03DNl{`w|ArZssB;_e?7>te`0VubbMK8PhBDyM$c>Qz2sqVv6=Uwy ze^q)N844!fIW|@@{w<<>byMp(vq#2eFtS2KasJSwe9?synC&KNp6LMZ>;0eyG}vIW zosL+EUsUk%#dqy1A*u|vqK|2cOV7RwD{iJ^os3V-lDJJiTqR95<+Fnl?Z>-)EAk`>B)J0eGMCu2eSEhNR}Xe#=6gj#Z~<9 z=^+cuoaQW4NEwhY)czDr2GPaJU2|^z_K5RXG@hxVR^1Yk`@4$#AWKGQPZgQl3nrJheDN<>*#FXFH{8`BoLr;KpLo)oqGsUhS&(u$ z-u7!&d>NY=HnCQ#7YMJ7Mr1JHsSL3aHiQjX(2TH#<|@qmTf^vr-WXGbC5>^HB|CHoMds2oxP`i zc{cTfRV~2~wswD96m4MZ$tNGT^{Ckt)WUYze^Lo4<#0y(x&W_&VF_oAw2v4L2!I%t zb+u?hPN(wQR_E^sKHI1?#VBp-$jK48tk^d?fX8WZP}jC2btaq6C_{XHQ}RLK#EI*! zbfsfGRbgMP9)*@dp+tbiw87`DfjwV;AH~07^FrMap|5I$3kL)pUrJacy?ObrE!JPC zH%!z6lbp8HbdQWxQ_!-wBaugY8&B^8=6wgmq%3u6_S3L=ypA4zsb7tpIu4*Jhr(2wbhIQ)l_*snRP}rT;SsOS% zJGoIz#Xo__`(hy!O3$y~&x~e7ThF{d9|5aMwvfA!cu^G&OO* zf6GxkV_hh{LTTl0OIoC8A3hE_dNaqE$5L9H*Zlfn1a|H0T|x-6rzG9q<0-{sdz zWX^q-)Ii^~z{NPz2SD7aJCOn=?jXCqj3Q%>?a$BU22fyfcvK$Oea07L6x)yQv>yd1 zlq+&ejX@EICB{&-doqEm%j_y|9ZgPq`fr~myeEJelZ9kZ)ryVqrVqU5j8X=*6m1cd zGxHq2RXKV>l4I1dpNme6MAt0(Gy+|PlWF8vfOK&JvL7ay~xPIanI_S&k- zV}fVVHCL)%={2kbs*ZDg%DhFa9va66Vre^-4L&n~K*e~qg2 z)Q4@Ov8Tmt%}g=>X1YohP`<>|Z1=tV3$HVN!Nyyy4-|0`Wa^IXA#CZGW`<{^Iqe~y zvsqJaZG_eH%8O1lF%OreI-cf^(;}JeJiqs2ROE_Yee&a1oRyhlRv84v4y{F^%GwYS zSzEu{PHA-yGjSZ#-mBuiYJZ)V(0B%ptsYASO;|?;HlFuCrU>n-WqIsSou=QuR)c!f z!C@79xcnY^IC#vbQ)c-R5&0T~qdJquyUY5k@`^~;vlp(}wn^Z`^riF521SG2G-KbM zT=d`{)H!Qj=DYVcqxFUIg`_x#9!KTq{Jsx1Dpi_}NGyo$?u0NwM(Vf6;Ichp)*K8% z*qUP!8iN@HaX;b`^kmbbq)+=0{= zeB(D$xP4W)eoj2w*CVh$=e&?#I=MX`R(qmQhyxD+7_*Bc3l+`{)t+EQKg+ z-z8xtur{d-32`CEAS|8fC<7e~8AC5UqB?O@Y9Rga5Zxtqlj^yLf(MEBzx&RC!aI|L{Y{GvABpd*Gb zNL^BSbKEy`>Q_isjGmxj#Bx<1y#OuCMsO(kWw*_gPRM*L72PYgH$1 zNltU?;e!VhOA+mT4rrc;~Nul^j#^I4t=P@q_Q zmY3$2^j$D`%;OsYP$UlM&AS<@@f?g@0UVNqMDK38@AG~EkPzFE$UCcVdr7+H<~ew^ zS~J9&ucU`o_MIE?9;~BZofEKVz;4pUJ+1sXnsZ+Ewx3#}5>jIOQz8Kz$#LV}_)L0c ze;W4iID2qO%V6!V@7lL>bL;q=Jk2kqVRS5pbU%Mj}8duV;s!j6PeyCuG3l9*xFeeA^_ZdEWeAJSyPmt* zIQAXrUSt^DVG%qDeMOaya;tHFs$RiQO0H*m#8&+D4 zw0?=xHRkEJ8_P(>f>U*>uhAks?>9jnzlI7uAIh{|X{~m9m!4bKS9|*$+(uZe(wk28 z`0fTI#O^XQv`c4^>NSwb+26lN5X}lj86FN+reEt}ZCLLzuzwaZrtnS)ebNcn;ruo< zO(tVqzv|4u%N%jflW+QlD;Xl15tAZ z7YHU5A111Yu)Ts*J&XjI@-9cz4{?*XY`bST{Z@uP%13spb9mjt*=UY-6DxO46=`6~ zy$GPy)QY~cb?Km&g^P1r<}|vZrsXeC%v4%B1~)xNE5cmHC9D@1KgDbR|1hW_&sMLdT;EbH}ql-+ic_ zPk-3yJ;&Wmrq(Yxi&<*_JLTJX5wPkBA}g_|{^zC%RwRdPz~-594WvnE+Hqm%VfU1R z)80|Svn1rL_kpJs=nQ<;Pbvl_sDb`KUUGXY8IbE_MhBcZKRu%O&~PF)>@FNBgiJ2& zjVA27=&0K=e8svFm^0npv6)R%?8y4oLXRcL6MR*{U~V}yAei${RTIMKOo-fRB#24p zcFu8h)DQ{L5P(=J(!>Zce$Md8{nbSK^L9vz6Acy5W(4O?)5=%<49=Q~n3~&KDk2Gx zY>JVy@wWKT5@D)OSH004yY>5`W_I2&yeD!)U_A^|HDRw4`=;&1p-;g#7z>Bb3&lFv zSHR~mzO}o=;E_i))6{#tMW7BFNJI|dN;Gx+$B&oIkW=yCPZwP^zWebd16*84D^ZTR z4tw@Z_o=d@+JqJ#*Wy>=nG3x5)0?SLJ&LoMBc|EgBL~(phY$=TjyQX|!TTQ#SZ)__ zn~n)OcF)+o6x6g8ii$q>FULAEXrPZ zMR@VbI95&9u5GkIItDVbOUnpI7B^~9EV^2zbK}g{=FXtx^}HX>$+PX-htMlRVGoWP zbFgLiw5pZlbby}kBcBg6Gl&S1)d%qPF(4@9^^YMFIv;*p@nNmN)|ny#hC$RVwWnMQ z+}qa>^`{ZmlXMXWhDRP&&KX8i$s!^FJiH_;+>?`hM{ipa8L!J`_!&ss z=hATMobHVOxKJU(*dv~0c&&s{DW%gG{1jOJv`DcKa*9D-strfrQE^oguKG9F$6)7c zi9AO?b${<3z|0bZjXF#*DYG)IIR)*vCqapnx1SBw(Gu#S&o`A9bqcKx2K2m;&kwQa z)=hu>wL~lZs>}CLlnB)H*37t_ge-AW*6<@t;nGb^D#U_M6~5q2d#{vvU@qAO&U&OR5ho9)RgWPf;s$`%C!Rp(@H%qWSq$Rh%AxQqvV1kzI^#Hhr-l?sN z{qenj=wkEAGBUH-ol5?}1?Eyr+E%EP)cR!Ru2$nhuwZS+3FJ+typ91UnKZVjzl_h@ zdA}X?(b2)xez(cYi25ha=Me-f1(vVaa1bw$dd|dL0!aOtA{fjd#t~qM zYGiCg)+K|n*QY5aa|wMz5yY*C2A>hhN| z23Je+xCNhnl#I}s7Q$L{R$5mR*n#(Fhc#F~zaZz=#?G(cz2R`qj5o-I^NMJc zbc4ASJJc)O{}DQKh#TI6+(#U6khYA%+K{u--0_&=xs+5X@K26*7%CEi8*5shqjaH2(K}q;N?TMEEXlUBYUf zp8;`5C`i@goQ_?^5a8TwqX*BwkAIrJ)Djw$xNT4D1)iby3xz`94J^=!l58;#xUb6p zeKUbes=BDS$~JE#Vm|-lYSe}Jc~)tQ0!uM=)f=N5tXhq{{}YabVO1C=ZU4rL)`<_d zc7~P(B8p@=lZFK$7_I8#e*hO45SSMQc=b$x-5QyH9Q>;DR!YkiJ5r|gcd$c)=+yIk+sf^{u}H%8kNdWfofUlSZrIw z$R7@kK56I;f(J_&=BsHn*Y4u~2m_noajf}QRpms%E?$IS2}>d2=7Rn_h5UUo>xQ1>DBwbZ zE(#DFPi(y9TMAE5b1sl>lB-E~`X2Wmk}b!>L{mVut^ZTEL7f=E9S+wkV`nFmp-QVT z6^mnz_xRmk4P=_FH7XhGHY_;qX0cH2HN;jhdS#-xF=VycM;ruaQpfv$lb>+O)(6+$ z+f9)Etzkc^kFbkA0NWUgMiUp*N^sYV9x%pv@qh15Gjo6SPx0h4qGTca{t_M+RnyoQ z(28BTh@fs=U1`AWrtw!xi^FAmKwXI9!u<=S86qa|ZDO6qHgg!{U1^OnYVRtwPX1H; zVoO=wOyXzu0P(F(HKTk5qcXY;R52WhsLQ}EBsl4b>*Bw|$?=rg)T`M1w%~w+e^q>Cij<%kQ0bznT91ew zSgx-2kGuncGh-r9ZW(12vNeWm4}%1p@%b9xyW8M!rI8q&e=o_EsZ!C8OQL$5$>Kyp z$V>I;-|)>5<6uXj@{Tm?SOfZdmClG8|C_p56?Ah3^e-Ucu&&42KLWSWOXW{f=hev}ZDmeuP zy+_8|-VOg=dM!A6Sto%=ba*uQw-Ts0)+;qC?yTuhD>hfHZLj>9`OQm9XNrJ78dr+o zNMwZ?Y{!KkmTC45rxnFG$`GkE8dj5L%xe8b6jJ;6Tw~Q_H`uUZfy+4~uvsHfL zdiMOSUk-FIj^6{4|J#`6-i5JJd7ooZViC^;dY(C2+8oEF(3Tt4g;V7@+7{E$0VJ4_ zw>$hh+xiU0o2)TV-0%b$oq9ybcFtAkC1^g?jx%lwK-!{Wm#}B{y zK1b7eY)I$QhWYbcltld)~rF5wC^Q&0eK8H1goBB3BPoB~P&WVo0w8@J{?E zb(c7gH+mM0{mh>ToV6B;Mf6ZkhhwGfB{;7@x;JTs;K_MMSY_%Tgvxp+MtP=`{#2k7VT zJFQM7|Lk&yM=%xqK}&_y1&YO{B9x@0lp&om@uQS5vaxw$t6GlYsT%JOrXOdde*Q#&L{2Cl6GBLO*G9op&biUw_B8nQMB}U_o9(FFKfSzBZhG9gX=t zN#ogr`u@q4>f5Ym9PhC!biK(URHga)SHSx~h*?5*ucGK;LdWbUl{#9nMN~F2cbZU_ zQ<)0#{6Xtk1?aLx`AIu&_VczneXEAz!MStO8CZIvWdy7K#MIMq>M^5r`SDdtV#HTn zfg9$Vw?(_xBy4*zMXzm?Uq7$Tl6EK(sj;t(?i!!&Og8L)&}f|Oo?Qt2v&LrTacaP8 zpx&233+1bz*j{Z2EHE){7?BT{OOa3}&Tzg6(Hd?qN_-{a=MBtFvKGx$zvxr;}%l;_x0StrD&fOaw&K-|( zep`FN5AwT-u_@Ne({(JB7B8F)ySJJ?T>}HG%U8l*m$gik=n%;lh>X{{w*{z=aaT06 z?@e6CO|Ebh^X=;K7Py1JrRL9_*Uws5*;_mnSB2>M245cOF1~5~%pMzMPx4(<>)yzI zi1HRBo{Bx)*wUf@h*G<7V-d4n&l8{BKX3)A0$=QNcn$j!`GOIJg}k91aAh78e-8iy z>Ca*b=;Ua~>8M4RnnP#k;0=1y&Ut#HcLQEdR_biW5Fl@Cd>* zV>4M95j7or{U~7g%-VE+$oCV)VVVfkcWnbnHsCMDg4y^sIP0$ zG$~aJ*eF!o_>oY)*Aa=(ul*o5^{c>C1KFmT2@jcaL&v>9dVtg9(5qI3pi^!1VC;*QqGLZoJw+VA_*HiN6ws_tQm%=t{rP zH5}TbG)8XVi>g(kdUJ@!t{!BkQ?h+zSM(Op;FW05_is;V2kwi6b%ly~dyB}%(|DXC z1-yvUB*@-D0>F3mvx*t9;7{jenkh7_F4{Yw|MX2q!!_UN@yhbNeUI-UnY?=QS#xpf z=q?qv@c|PI$aZ30A~q8h4tblM(GuS&$N`x(_b~oC;Pwohk8X=R0t*J^ke$fI(mh{V z+${K*yDdO8*)llD*1tIWc+6oE{w%X@hZm@S9;@-Pd3#-=c}4E8cV{H~0n7LfPBC&&+irE1~(2b`-AGH&d8r zn|lN3?86wDg07t#(5)P<+wnP_>b@J%t>$^_ua{j9zonN|T8F*=nt5d;R4{V_=`5L^ zc^XS5a6r?zGY~Ifm9nG(jr=@?9$gvd?yQb4eIJR5ymt{II`$SUI)a;gBGm*x?S^!3 zyY6-%kHVC1{(PEfY6`TydzEJ%`R!~~nPenY6c~Fn&?cUL(m#Qyw7JxwKmOCs;364@ zKGh#0(yv_cXM1vx-A^@miP$GVS+Q4)is?oB4bFU%-$+8~5f>OitaCZ3IG~jeh;la>X>*)T?cV7@Bs${h)X-$VR<~@If$2t;f zyC2E*s2b+qfB2*AcXvszEiOGexar-;H#6U|7=2p^=?A?-m}AK-f61+9255Kziaqx4 zQx!5N&i1*{>fyEiEEmTaa#Dv&_R4R1 znQ2Y-cG8H_=VwH)v2OlABBoKH`0mIfYfc!s&Z{5NBP=-FWs61wIW9aK)+IlSCs(Yd zN3KSpG{5)^x$exC%?8#azb%H9bxgYmrLy-%;yaE(*mD-9V z*a-#Gu!G`<@sMWg?{AK0_~0Sr&z@dVx$g&KFxR1eURc@~j)uXdUNTS9GB9(&5^ zQm&e_|7m^uj5sQJ=m3gC(LjqBDwY?oB~Q>qWxy>c)84Z!vQu*9GNh+2VPaMHFQtxrQY=W zdit8NHeJ44+DrN%0DXV@_(+uDawW7RnMRmQnNV$EFr11+OZn=-WNzj4cX`ho?bRvkgtZ-{l^G_lW?eJjC@26uMj#=b;@(eS zDv6EtDCK6@Ti0uJ=mDDRQg@T{$4t6*Me1x4^9tNBK8QkxKST8Fd=ZDP1Z1O>I5dh@ z1ZEF3rTDwAC43pU-8abnp_*(4%)eHhJ(i0%d7sPoO~qOw>K_mk^2eNJF#|tjl<^$| zDk53qMqxY21|U_=87Z)2%SP4lC!5LZ&;XFVIzz=!n+;X}I%!1(d##8#t?rukSQmsC zfEs;+?D#zqAkyLCRbwe)^p*dNXEobifICw^ zVJpOOg!4i?_dnl1?GtJoev&`37->K1H8inTJBnxL3Mz3?E{qklKIVK_eKZ_<@rM!94YhJ~s zt5}_c`O_9|N5POAZ_o?MY{5>IYzRMt2fGJgr>$@;Kd&o+65*|8A~R}`AEh?`72fc2 zZEk%%a>m;Ni_>YFqnDyol;c(cEK` z(XAv#)iS~CC)E8Mkie5yWSy0}E|$om*=c8*ue;Eo+(T_pmxbl8ENa^A48BOnY8%>h z8uNZ<^@21GypLwFtOlcZ-7emA4ZTOjm|7%hBBeA*0f<*hj?)#)cX88otN~Vo|J6H$#SRjZN2n{xxqJn1dVfM}wAwZJy%8D5bEBqR3H- z`bWJGsy@L0BkUpK_xLI|mno(avs@?o(tAgOd zP4YRbYNAG{y#lX*^!s%-X0xye@6%L8x!cd_AHjyX=VsU|IVSP zhT26Huc*hf^vnC3!~~_IcRo81Mh{aRJXR;pxse!>@e5o8*bOf{B-}tqTwSiLDnZQ| zi{1fo^+oBCh~-#4L-c06_wxCvqPg>48^u*LoA>nS{hfRV+n*_3`XJM3($&I)|5oCB z(G(Si_!!yRpn|8quM!4gQ&k0E69?SUPaARUM|r1dWch~dKY1{U%(+CD9t_8w@aEW# zC}EJbGnKXXZ{phuM_3Pt{INcUGNrGL>R#t#wI0=z+rlG91w@t`&!_dZK2IS%T}HP3 zQmwuLzxu0$1)nUiEqf{H%ir?|$Wv0Pqiz}RWtO^|92z&IZm0%L#Cc;X3YyJMSnhm2 zo@ELd>eGqZnkb_%{B13-?n`irc-p>2Y!d1O^!VktSGK#E79-^Rbf)y#qlG`us?Kt8 z^sexp%HiI0LVa+SrMux|Bt}|KyrbUr*!|Rabk>Ua4-IAJM${tolds^@H3JAs39+{J zqgYOM?O4LlUQzhch^!^}LQ*AmPCeQ)&JvnImJ6hxGj{pMb)F*xfAa zSfi33-$8a23f0OkkD!4AolYIqj%tdN+53ot+CF$3G{YTo~pfJPIXp#T`zBLT%jiT&IAfy5y zWcfi})8NyD_(@j>K>Z}sn5Vwp9P?V4Gt+{FaLG3VQ_+bam&!!dlD@AOeC1Eu?_M3k zuekK~Ch=cp7A<+)PZ0{R}N`s`@pe@lk6xCp6!C;D)eW zti$NfLeVzpy)M)$AfsXvjy_T@tGY;_GGu&rBP)RwmfUM0f>kIy`OZ^r+SdJsWCh`H z-K@Kp=$0efoZRQ@i?s>U25&<3`rplB^r?0K%LVY+Lt=aGaULzqh^P-)#Ejh>X4o&! zBNqMt^iDL+HISAgC6z>j6h~c7$(+&c=gQv~eQ-8UbJej!m(Q*itowUVlZ5q}$o`h1 zDxoqAN{N=1F-ol2@|z9o+E%}VR(N{+UbnXA1*3ISj<-Ksj@vyP)YB~3-`5LYows_N zsmOt!R+(_&auhrKf7@KJTv=&hLSqMn&~#EUp{1lpK7Vz6691wrSKSfa@FM%rOgLKQ2eM*c(^?q_53~-o3JBenTC_a z|F7Afp*RTMt{F;zR(?+JE`3jq$^zZu0%obU9451kWx;ZqQ_G$tJ*sd9yOe~ctKV7h zco?`HSiyRnj#P}RZJ#6#to7*x+}zCb9FUAB57MUK}Fov=e!Oznylrj*+wfjb-FIFsmlLUc+`BY?np zXrRU6gw>qGvFLfm}p4S-}e0-Vjq3zq5%bWq?$V~MioS#TSnMG(ii zNeEAK9vvvwCoWQouwV`HR;k_fu(+l+&C>wP5<*fD_%XQ~f8Zi>7}2w+_LXTrzc4#i`>W|oeVBhq+E3_(+AC1f`^NkDfV|=tNnJ!Dy>^-4af{H0&j?TmJ*Q); z8^Hf?pW(8bI(CQG6#Vs($YqA$c*p% zrcmrsyY`dMyXD)*`-76GwnJe%k2;^#Y=uAidw+SeNwL{!(7nv%_}(<-FxGSL##!L- zLAq$F_AmNAC%M)Vl2hb}E;ILn(|o&Et?6N3^c5T|^h4pWww*cP8R|^FFJheSmFkw+ z%ngB-CKvC6w{s)h&iB&CycwudPq>p z>RHr^shx{&4N$=aK*X01y@Si4p8_G*smNy}7&HY;F~(?1bQ9__Rm>LFRBA_O$Zh;c{x) z1CrLYmal$)YmuFLos2CRFK_Wtd+uNSm50K=UvbSFzcLhyp#&KlNk$@$6_h^#TbLo_FoL`ujNvsnY!(H9=V+WU4@^TCmpn8cYmu)@ z()lBLxgvTzP3>}Wge^o~SU&c+XK>wT`mnfWO;S}0Y^}j=>$d;mHtQJs!c<9}8)z40 z6Uor;_9P{Fa5xFH7AQ>$W zVv$ngxAuU@oc_fiXZZRA2<}_%{T2vYL1);VZw@Vb2_>+^uw;!Q^pT8huE?7HZ~?Pe zar#lUP?gTfu`(h9Rik0q+KOUZw6iw;#bGcT8%`qXq0a8VAZ)?z6r4D!z8}AqS|t(% z*V$Urf^9!dV`DE*(u9fPmMX=BKG)wd<#M9DvXt@P0SXIe`8MfMg*IM0D|UE7HLo>*14EOMAsl>Hmtypyv3U2&1)5$MA5 zI_B8Uj6_teQQ|_9?)*wf!=GGcHr70bbVhRa{x26yv%Ro5R7$CBOE{njj(ji`=?pR4 znaVBIF$=5Zy&1X&JW>X4b-d9gt!ei<_x% z%qiL0sXcAO@cplf%`}L^3A4?$nTNYzcOe#`Ye6w!kzvZP!Kv^61juwf_A&$u=?tOB znLnAg)&)W+jEo!T=0~_mVw{A0sa5-56wgX~4HOW&Y9x_+b28p^3*7)v8g|y9{IyZ0Hxt;YfU}9tHa`>J5>!0 zJ#hkewYg&>DGa{|O8PgnvT>vgg{L}dXA})YD74IoTOc4%c*|w|LxY{rzIwJG-mJUE zLHx-(_!i~;F2>-gG_kkQ^WWPT#J*l`IDQPW7tu%fQv)1!rQ9l88RcAVGvoi^>#f7$ zT7tg81P{Ry+#wL$-6dFpyGw8g!Cfc8eF*M0xCVmT;O+!>cLpDvo!s2}?zhkGyZz@p zXU?gvs_w3?Ur851KrLQA&VYKj2NPaYOCMa6iprTgNPLqWwFb_X+Url3R9N!Arl*+A zBtPc__@@=+BUChhKag=9{doxfH!U1rwc1y+S027gyocy z3^LYeVsVB?YLf)K8z%zcO266e&|;nYQ|A))>LP_v{+bz;TEhGnLA4n8((p$DY$`e* zA;MMKXov_4*$Fgk;o3}d^S1vyjkQrfCiAk%nFV!;_v3fRQ4qZ8xNg4lB5AKxjY_f@ zwpD;rEbpHx^sp-ax@;N!QLqbh8Hvm=*%G!YRhTZH@ey z9js^KVeXe7`?sY{O$(9EWceflcm!zS4X@Z@MjfF9p!UUsexrXMl*9QQ*@U}R*3)gW z*DlH4sA>ffl1_7RYLTt1DQOpk1E~xazV7`~HvmS%mk1t#@Bsy!G8zTI7C2{en zxRKnd_d^(pNaknxM(`^9KyQgXtgcTki$F}bngB@p#j|b*;0`3LG{Vv>UY|^!#cg68X z+b&p6Zo1eo?5*p@syMDc_jgrtJkA+t}3buCX8n<9t7<# zCYfa>T_Su*3KzrhohMRgoviMgzTPIz%{SK|f&VlArdAc7(2(kTS zRuR{c(0ojEStu9jz*}X6aXA#-x}3M@jO>=(RvNoS*cMTvm|CM4hfmH*c*UQJS{Zfs zL+m6Hh*si-6@XQL>D^5A< zpGWh&3(+N2n7L|pRIW!d>pSPO8j}_}Q#dBWq^N^xJU}|It+hoGOM%av*s6zy>@|nJ z6t+&z%E%`&-WM!Gb%z6ALmnY(PxEhhmdTq5meUQ9>u5z~enFlx27Ik4(Z{@F0a^8e zCsWOQC#k%2muX%QAyhww)#^V*-@$JU#XnDW2#WSXCW^dk9KK*7N=$H+@gNq*Q|*_W zu9%khd50|T=t9`fiFgYP3p(-{=*my2orotYcHh(-I--QsJi|+n-I(0hURp*ZCNHbN zXWPvaFF|JoNTz%UA(8Xq*0eMwG?!}h1(8hwA#zZ0-!qQ5I&Z8-;cKwzy=BOp8Q{p| zh$*vmSNwN}Ys%HaJ&uRf*UMfl)0KX2Sfw2&)TgVaXfG3m*a7(1<=Rm~r3o*p#iuZ)C4YB+lBYOz=$52gpb56N&A*(GVkJSMU*iNNF7E?#Ur>48)= zu`DaKeTzUMlZO_hsF$a9<;`YpbrcrnG4L9-k z$*FM5U$LlUjAY#(g{gwm`$Us!c5WhAHq*PBCK&JsUu$symb&z>PHE!{G0UBzcb1el_e}3ac!?zWF@K`LM?0ZkuE`P9Sly`8?czct76$)IJ1giEpOG z{aqxNXI<0rgwOjxs-@2v`sil!A)uvctNQ~go^OvJh-~MF z{7g4G;lXyoHtx}+0_hzx zmw5`Ag$^A_k-lySK;UDh6Zw^KfT5-172@OGa>dIq^;e}yzFkxG%iXZDkMr*1`RUFM z?eCz35YY#NtFz5}qp=2HC9^5ajcP7ZFpl>9VMm6X$=>@PwRd4Dl(`sfRrG30{ zHBWt*@x0kcU}720b(~t}->V_E(yfZ&lpgLq*h%-;rCRz45J`LvQjR}UZdGt^veHg>t}wM-U(x7l2Oun{;m=g}TqSmMAx6ruJxNlo23UYnld7d)z* z+HdReOo`E^gu8qRe#kx|-&F9_iC<{x^=L;@h1oF@4t_HxWu-YCvz!XjeA@mEb!YcS_ILO!u^a8 zG2ign6T0NFBl<~P@P+$gr>uLMyUrtYaVE@p<<85oB`g`A# z5^A^{f`r3%)+Tyhe+37PQoALc1Ar@PrYX0jf^eFee%m*TS}rZcJIrH|rM4BX-;z#? zItrk*CB4CSqas$SE{jn;nB*$T9;ZJzaz_L%JHIRUr?yFA$``6c6uvj;kQl+WGVhZ=#s#e2|iEMZqDKJSS}{MZF#zWW6DI`X9Fr2I^^Z=kdei_>D@ z-1?19&#;v3e!e)>JWEzH0V4?!2hr7f;t^#OvJj`}ZqUwc&(xJNlkPUwrC;mLGN`Gl zih;gB+P#+6G)1`!$Kq}Mh6UnK(P~N%vdtHs>IT zu<49;hj|$a1ZZ8oKEa3W)+V!gQ{sZk2D1jmuGX9?@)Z#g;q>$@ISoajlas2l;j%id zP2X}i-pa}i(y^8ojW*xjTE3;KpU*@S%E9MH^_fOZtX!6Sp?uB);M>u@!)S|%U;)E! z{eE(>1m#{QQl{u(hL%npez!#qWMc;0-@2j?$BbpJb{FbrKD2fbc3s9^u?& z`Jp~mdZkE-C^q}~?h`Klex}%%CJ^w_a-}^Y;!AoO>vlQuoum3{T;oA4E?LB)&#{guAlRl$ zzM;U+1c(%39`&_@m8i-*i_U=!_hp;}Y#bsNPby??ice;IZsGk-pW9m0}I>gi?ZMQVtg4YD9kuXep2xSo8IUc3>2hSX0?Qx zM(_8j$dF1rgB5f2>({z-e60zoQ?B>e?lQe-9u-@o+-JS2p+es`1%C_OtM;x4d^5ez z9GFR(UI>1yV!nswx44=DqJ>WA?$TYzv+N$iF8dCBmaO%my{hRIec}>| z=3@kA*U=SGCF!G~>yP{o$=H05;uLBP(rf-*7ccW~C9~-}DX2$ZrHue@b~D{+`beP2 zh6cZGpUDG_ghykh#y+=aJ2&|1Pe_v;)cLH=me2Dp`hfo!XwA7UO+Qr+6*Q-HWlBrG z0C})(*n+gO<0*9vzjL5Mgo~;7bG)Fh@vJAg1drc{2$%N)ect~v^7{^yrL?Egqh25z zs^!&hXU{l%Q+f7UXn61)w#1=uvx<_$%?Pp3#e6EA7&;>zvdMANPni$j?Yh?bdN~?) zqG9bwbVw2PP=t5}lGryFZv!8RP0tU06rwd62&icV*!eI)TRo5NAodH9!KmT9?tIJN zDhyITI}G2SDu}Q;wSO=KSP~^&3w$dZHJCSO?Q3ucn|k!w)f_uhls^lm!C#L`H|G1? zbjW{TnxgUPOzpzR?|4&x2Cjhje6HQ~Jh*)|%(^;U1u(got?T_XRRlHW>Qv*|SF!WC z6Rg{3xc*5Kn>2=XuIG^=ZVX(=Uqs_G&=w=NGlztTWDQ%(<&?1ZDvm**7d-w;27gP>m=dLIOyG0X#_M;`B;P1rxF| z*t(m9uVM$NR~X}8T1uRf?NXwteY;1bf{;Nzs18u$zPHg4awj5hy@DHS`@_`P)$_03ZjU@*4A=Ui`uChKulRLQ02 zRITH+_4=#pm6-2+D#$%E&&Qz=NZFIuRNT(5FHlo8g}RN@WQnrdx4tp%i-q=`PoGv? zesM>UAzKW6Jm+>h^XMIk?48j9HV07ltUAnC(>i^HoLmZn1w*a~2X662dY~eYd--+g z4>j{PdYe9jnq}QQUq9GE*7aARj8AM96L+A8MT!KpGrF3EIj&LCB~e+K-8EsiuGyOC z>wU(Q$CU`5ng)wG0uJ}}-p={d-5R@lh0DINh3A=z0cvBHwM+Bcs_)agRqJ1;e#6{p zZtM|A86CyG_v5u=*7|_=3ht{>B(>j6aIvuL zq}aaP8f)I^AIwm49|I!OYhtOxB?D--a99`5bJgs)r!33bkEhc$!Gh7PS!qM@gPNDZ zC4w(A!{<4ZEj!A6fLbDCy&@s*pHG9zKkmgen)aO=pk()#XobX%8Ld^S8E*X$X59%3 zQL=U`4KUs;}vbqE@;A;?jm(K9bw=clF~Tt^zokW zibIp*WL_)9;DDk(U&mLwuCtS7s`?9;wc4XfmG3pU?VC0lg?NYrW_Hv|t)JgKOI4ZD zpGc+bc+Uk%#laZ%Y$k~&KvPT*=w-bd4QC=Bn`;rdUjHJM-FCT36fEmlWywKV0)xNd zbroiTodc7S^(R6M6x|y0dNjJC-v}=QiQQ&2SD<={pF-Mpoln|c8i_!a4Aa}T`DtLb zUw387`NZes8B|b*PRIli2wkN0?#pKz$z5?Q=B!*!t{MJzY;9x>QBw2!ZIYmi-Cr|T z*^Zmo4fg8qwbCDjR!54vAxR@|cpoAPXjyYODurJaJ*Bo?#yy{}>L7EpsL_u4ZUNGD z)#W)dBc9j1qMwJFBZ)X;T9N7sc28wIY#i8o1_&A(9W6xN@FX%UrONC4e$3E=2GgfG zAB)rM?lp)2FpN&JVDSPI?8Wt-Cr&`;rTWPB?Q^8k>>!Ip=a8w6+a5jF*gz+3;n|(w z#gy&9&YF#k^U#VplaY#;hNha^)S7H!m05WoO(BQt6=99_()SCQw!yHT@S`3O-{X0b z-$Ley!J?oIHT#WI+wH8a&~H}+z+63PfIY!zp~Um(@9JYxf#bO+$I{-j--m^hn_G!T z-UHYz-ga;DdE(M@lL-8FL_N2QG5OBwsH~QDWivfD;ZS9nQe2(bvzAGxxmUyS=5NzZ zfX7wOSKZg^O}j>>+MZ&5tt2MYDUV>Sl+?hjEla|ytB!{@8T?=%L02|M|A0caFTIh_ z1&LZoy9-e_)w594!}O4jMhUE?Eb=k4ToTjj$EI-8Tl}nFY)7)qJMf-2(-L$jzvzgZ z`7MRptOB5R%f8^A^y_Xvv_>Zi8H-LxwI#>eJwX8_X_7TF)8WFJ|7*RX`OBOnP` zfyRkk%%%7>22dFohUhBk@^ecfOG;!_2N+69Vzr6wlD=>f$32{XvhzCfwJ4+O!pDbU zcd_iyrOr@H%c@D<+{2aDxn}e9+6W7dtB6}1cy-^tP)63>3Vd32Z;kijb_Q<;5||if z%v1;Cky$q*YFZH*=WfAO4;q{ICv3ed~Hb^u>URAr$N3{6_ z+yembfqr^Ak546)MjJu<^g@}jpDNF1CNE7xM``rABYF~axU7E(+8zWmWnN=ot~!Wr zh6}6vjZ*Q7bf-;esoFVNYxn)CTl&#j6}PZdyZn>ijh%J*o-ZrG%RiCUX=F`t-(IG! z5Vqg91rA{9_ikf?M=f8YzT!MkrZpU`p2kI3sJeRuvpp=lX}O&?LG9%8bj1#|!Dq8| zNp+82@026hm$sP=XY=8OSuiogmubZ zK#cQz${cDuXhaPB#-7iVT90Q?iP#KTiPv7&7x9AC9z2B=Uf4-poL9Oi^zJ?F*)Zw1 z6Z0zztY$L>iQmkuK+_V^2fD)|=;-x&^TMX+6WagLf>8o&jr32?*uWlkIylo%>wpQO zS^zY2#S`d?XGuDv!xbZ|6OVLA5@Z}(z^r?6bbWNL9)Rs}6J)bTsyE=Al+oL2WG7Y7 zFk`iw{Y1GWa6U#d>wq|B zUiwXWO-cN_x#l0zgbG%;3C16#f(qa5)0Lj9)2OL?UJPkz!zyY2`R3QePGgrCL$96y zcLGug;*5$%JCtaFZ0^h=CNrxXCXG)Vi21nDli@KN=Qvp-8NcGv{`Ag)t$6#i2~kD) z^30#9EEpB>NF*KiMtGb0p{{uOV#H#eo#UIhe5|i#{(j^)10or42FaF7*IIdk;X;L@krIQuUaK*dlas6J7hLu$~o`P5Z zc6K%v5V@RP_D8jG4IU$EIw%oO>t7!H&aUnB2KJe%t8>wmh+J&022^+YyNG`Z;y?n* zAQCCn@r== zq*cbK_bgIAPA}bQCIxPRvTj@%>V!ZjO`!mO`Oy}W20ajHezev5kMvN^7V#o_&PG9K zbUp$>%Q?9kX}Rg{mdu0R`gfQfk&}G(9ScQFK3J<^Bmb}w1_!W)PvDLU!jX2})3NZ% z8q2@%fXhe6D&N{lm$8uD-WZYNO2>UL4Lra_Y+LAAwMk^0f< z%A-5~=`Z0b-a-Uo!~u%<5$clLl%|gGB6kpqP}NpoD&DWu#y$X!@F`8cvb;LtN;GxE1pXKS_2?uRsVC2^cgun6ZHM_bYxwI9OI} z;g|0eFl=#TzfTZ3OrVyYd5C?6Q#B5i0o8P_hZWQ!(dE-=H~LuC|7pSvTePcOQeOTg z(NAPWR(2&HjFkyYQL3G)f6lzws2adA9+Z~2rfKgEC{iC`Nxmj4U5##ScF)uBp@c*} zCgvLaM6Z=lbFU}6-1{BgqCw7SaUh$QIbK1l2^RKthlrKl_^gl#25e;b0ETuIVBfph zjt?KKuPhZZ%}_{+xTGt839LvfVJCGT3G_U`xMr>aa21{U@s8f?WpAnQ%=<2H6dJ?SME&1-P z>aO)^e)iRQT0O{MQ<9mCI^dDDAql+f@_zSdHq@XnF(y|rDXwv!9OMao#Js(1Wfua- z0Ce{imf^wXsl74=BaiNeV+pjbwC>)udefU*$ReK)XvxoiuW3%SR%t-DSnfRkv`_Ri zkDO7-m%&`&uTd?#M}}#ytv_rQuEl9uz@-Ntr^DaxX?c?*EohM17i>kV?RryyzU{x2 zXxMhbPY?(M(0pN+u*jVOIVhE7tI-LIKwy2K+hXvciMLVD^NL^C?vo$Oay|FSbL~VF z-xb83<2vZalFL>Fjyi;(=}BeD1p?vEk$LT8`=&I4o4@#7xYtAQ$@h%Wx4JKYwVEfN zU=lV#R$Bp`5+Ht`K#(@(O1@-WZ>RGg9Av18*0h)H<~;jOnHSO zc)^s)>^!a@=u4@f9=__WOdJ?*+$i!vzX`GPv^09)$;vydf;zBq%9&|Gt^JcJ@gj2K z;mTDOu*U`|5@e-B7Zo@DAKqNTUy)LB%p&gmax;8lQ`xgR`o7|#UiCI&?=(6O%vVn@ zZF$cgpv2F3V%sDm&rza8r|OZ-Kf3HQwI5Th-D#*+$z<)y{I^$qyY~P>!>_00Ldme< zh>itAhk~zn+oRFL5|}M}WmwOEGDa4<>q?v*|9>v)0@U`J?f6A|vr|K6D|OmvSh2Sy z))nKeRT*|iPn0J55H#Z6;(K?HZ)xyvbX6SYlzw=vXnFGY*+V^J9NQ)o=_8==kg=S2%nJ$o~ zQt8bncTP7kp0KSiJMv^*qGUe7^fr@yldk)I=ZN}Tr=Od6NAkW*lhCwYQ)7w<2PNRS zw6+rZtXq@Jv{Koo{(f&fq|;C6 z8e=z4K*X7Mbpp-Ljv$}UdBeZ#o7`pDuKASKgxnjqr22foa|u3iLUOT@it}heoGlEjyO`3f3I;6(PEK7_Ym zvgh(dmnq=RdzAMV2SdBwR;ql6iaQ_j*j#v8I(Iyv)uNjz!|bXgkOlkd##zq(ETSWZ z|J{=QzoQ0Ynl-c4W@jAfV-^F|s1!D7kO2k23XbbFI2ml<#&?`LL#0PcuYXRuY2*s! zdALG;*!}UQMWi0>(=XTwUB#$|+ETwqfw$cTniTiGq*W#Z;Ru+=QFq0d4aUmn7nPK} z)6tMBVfa+tf|^#dXnRT8u2E(@fhqd)G=yB+@JmOz#lxn%!_@KExjAl8OIPD{v@ywi zBV}1?-;q>LH}QKE-na6Vn+Al8Q}_BcB|fc28w{BW7TU6ijWu(J9u9qcCEat2%PpCTC{V}D4x293c0OHT`rgM>lpJJYdU+8xxc{_ zaY1aIdbNB=M((TeQf|_>wIREtsS@CY`BmyURoX?+fxM~4PM%av+}JT(5)@6sv*mUo zls}DR{VqBo%deB^b(5dcwTF>=N1Hr7j0( z;mMi^s4fB-(pved>NIic>Y6GEW$*S$42juZ(y*y)ryTR0llfio!2(bNUIvV=Upq>9 zkT4ds_AO#ts_ltS+bCYhBf9Z`D#4-7V}fy}(f9C`74yUJlD9HTzB7bq1THj|LYIWx zrV$Rko9XlQqB0qeC`Rvv1pokyeWGu69bppplN=v8jwg&Sg|FoAGQ5Z(6<1~uPq;pJ zwlwQ*%O$}*>S&P@t_p8cdd1nzY|6rFOEd>LLSI;WarRUFU;{^fiKiR5i?VkU=JrjN zuuRfF*u}l`mZQwXZr=S3SK|rd(2`~4PQ17!+uAU(hvNj^mySG(^8rglzJw04<%Ksx z2a1)#CUjg^&8~&!%2_afwTTa|5#XHv{dCeq)lDNKUx|^ZV#_8~c*eWJUGbwh#F7n@feO5`78XzQ$eos|!NG`fj~2j&UVNJPRN8{n$l^e78MV z{eQs^Ckk=s8{+jYZ?SiRJ*Lv(uWh1eIt*Kze&mqIiDveH1>4%r>oy`|WCKbG;(bRS zEuou5ZGD^`TTEa4*kk7J(MAt{MEoy+#P6leg2gob2YyIo#&An@YF7OpExh%Fk5zjb zJd?@lZeLGw9tcWuSj~HzZYMU@y7>7>U*y5+6`n*P{B?fL4A&gwg#dE6!-O^WKG;+2@#M?XYxjT3EPDH_I3un=D9$0KOM1svQIxDAUD` zuP_MuU>aG#H{Q+3(I0C0<3}iVH=IdTR&>G)P5uAwR9By5)91+`EEN_`HUE*7^pcQt ze}SdMboE~k|H@I?cy3s5ie7RVafR7~+@`j}@O+Ietm+s#w-K(p#klJ%$7M|2Z}cxh zmkmtS95^a=BX?gp2F8FwB{yF-%uw&iWCHA#=gMtNuLn`->0b@l{lfR=*84CP{Zix# z9h(+^t@urk=L?yRNPC^FyYZf_A4W3RHG7?8uMnHi1IUSo)>1=Cry?y}d9K-ZKhls^ zx#?Bejv!Y>M!VSHXY0Qt2lIbVp!~T3zmn{O7(#9o5^W&(*4wYA&M2{be-*+z*PF!t zm0dt3-xpr1(Aw~V^jR@}Nw z@YF%^Zw7YJm3{@V?#wXW{n7#byPd8D|6*+FmA(9EZ6k(UojAUNN-Yg$}&$bC6#& zO!qRAI0#xj9RnmejY5e47Uom)1=|)?El(&rci;^jsj%E!kG#i;@D7bl z%PfnzMUTZvh*9-1P;mb4JP&3G`Ds3T#TM^*6X#DZR`ykGJy!W}w=lLYkaqs)<1qpI zL>UNWI&w4LlMUlVrJ>iZ{ei}-2Ys?hG9%U+Eqt?GtoHa#raR=5H}FQiq~_^cz@&u=Y&w z2~Vx4TpsJS2)VjO;d#pzR>u7GU@5%ONSoM~<#Y_r_?FhqI0`Fluvpuy6}+^sl( zBFW;)cs_h2stLK<NvBO7Url;FeI zzVCgc@*vg~Q`<+0{bqZXg^=MC_K=bMNBeWKxzwj+7wVS%&Hn{xX(+djFdaFl)dmZ8 z*e&m;-ZMb#JrriZxeshMEanyHjTyl8_|}yTh*A8*mhkIBfXt7@s0T%v@yagZ$mIOF z&AF~UtM>AYfynowR5g$9p<75UU3gqdlKT$!PxtRv^iAhVhkjo9yDwq3oGoaf?KkkY zj`F{TqsurIfK)iFX>r<&>MmtQ^$$!9`yPr$8mNcSO1E0vs_;`WYr$~E~V@Py|Ms>jEifEk=6XPo@n+%l2Mcf{p6ruJPWWF@HcUZotWG@q<02^Yk#|}TOmdY#8 zShG8m6-x+AT*B)77j%(m&IKP;8SBJEG3*`|a~25|A;avC;b$*>Sq(UvCB9Iw&%}>a z(R-8tJ?#Qv9F1jdu*_ic!wNMjP$<}o#%zW*PP?Wq6th6XQ4E5h?%UIhUFT;uS?-mj zVv1Bf+dgwi@`PfK&QicfNX5%Ldek>+(mzGKWAt^g?l2=nZ}|D?3J?C|MCO9ZetR0e z;$4DD$Pq!H-0H?aec}cWCmOiX`*Xx&bHc2ta9i>#R-pNOPT{x^?dz=c-b2VRaG^%S z_6$d!Y%FQ}e!O|*&C=DmNE!X>{>5QbHFI*&p{Z5Ub}54e#~oNpz17rrUlnWS=9^le z;R9nF2ZsT-zCacAKvdpdoCj+GpK9!k*z5#RL&nk(hA+u`$W&Vve5oVF5bf zOiTes0%lsRL)?#$&mWvXA+X}wlx~EnMbvqnrjgS0Kq!6Wt6cm31Q|6`vt^wKXtX+m zY}zLp#^MsXRTgVbx9h2g{Y-YBss@5;;uvzq9H!x$0hEgW%?F>=3r@(o=#RoY+qq1L zPtzxwIV)p!H?yB67D$YbT!Z8}n#&r7? z(gBU62Xb=z;_GJ`$akZ0u%7bOm0Sy(a8REb$G*mj?wx6VHf+bx6A9L{C+L{lAEKXf zwTi(9IUSp{-9KQr8CL!9lO5SH(lQt|GEDAHpQh(HteHN#~liloqz*t6WBBolAH{a%M0V!cML)OF@*m

g?}HSBv>3%M8givTF~(GQ$`-1;3CNm)Hc;JG8Uls|6L zZamyF{a$_<2=;azqZAX~XL+t~r8wOR0=vuIn{>G(7Q|jcWHKmx>CP%C{m0t7249=C zcZK&!;G5SZdPfr5eRq|AA9`c58qU4R>IW&p%_tHK6jf3?{PC%GUsu`X84#m?S%yxk z?7M~1)FQ1k(#EPT$8vLW4Ww(k>wY*^l`lak%Zy!2cJ_cMhpyT4TcHKnNc zI1d!YG?GW|R5bThGtYm7y)qChEid;~sYX}`n8ekeb=4IR_q1INTyu9-Q%*x{x0u{UR0`cHJyO&c0J^< z5IiuS@U>F^L@>g(^{+pWPU*Hma1hy?cwmW`SHh?#=7z_%%0Zu$c06!1RC+x@HJ6DRr~^6Hfid zDH}DFM_aD>Oq!dJjI$zG!-F8s6g`7#10vTxWRuMg@FXukVY$%w7s=2V)lts|HJw<+ z!+~ZW1$A5K#}_`=blhWQuuvB(PxN|umsK$QeeqnZm<-j9O8d#gAjrWg|3!!@QF%fy zHuGR$^xMsewJFf?;ejmbpBchD;#1mR=H<@h z)21@ykITw9Hmh3UNLxE(Qe-LsoKnwE*)+e&zzU8dSSo)WgC()QuJt!0tk5F8A7_vYoL^FNp^Pco0P0rEpkz z8;lo$e5gDKi*4o)Q4Jpt{)X@`y7Zd{_|9eGpo9*cEM9AF92DP4A7aQ`a*_^DUS4)k zR{mtFM#=FXD~?t3LWZZ})LWfBcE@#1GZ4AH%YyAF2CJ%Id0O*Wl{kv;{!LwRdjYgq z4%ATY{if*wfrXoMBglH1e3!NXPF2xaK?TB3TO|&QR`UKO*o`iC@>rH$SwuFCGPS#; zMtXh1!+%&(GhP)WG#Z;(MpPgtDNyEI)VYzdNc30t{5H{Ez&16*`~X)9wlobmEb1%9$qrX0S*yPkAV#<_k&Npk<0liE6Ew!mdEl-=TCk;_`2T zDZfXrw{&J|YWrF`6&)+HRF0TbEp=^lqOq%_ z)P^I6vBtkb-(lm!-v%@Os;Fz0U<^X%?)C6j*FZf*5dWq%(J9Yvsw~N=XW-?j`ImOd z<5Mvy1_aws#Fv!O1X#IYhjgLHQlBHE@ysT_LAxWRi|JIzNY~OUE4cr{dVzCKEg`a{ z?cxcpRv`8T?Agq5L6h&4`6S|sb{MiYEx!mrAkcE;t%UPQzrb22Ml3 z2V#XKtBo1#JQ7C`%EsA?e3IU7V*`Jo?AktUpzDO$|B&S%=4c+O$sS2ra!95fd5y3T z_Xe2bfS?mbu;w^woFL=rfYHe&$?x!gXDG!%Gpm(zYNQ0&db3r@K$HbJok0i-Skw|B zwRpQiqs?@m-7yM-|qd@Wvp7-8p=V$Y^L7tGpWjgv7`%c5s0`zE$3bdrbw{(XDp?f&3~ZG$BYaM+(C3nx9%K7WW}r%7!np*$UkQ771l?|YBS2b7z2tsh-aUu-P@ zOVS4Ks5j6#26iKi>a&q3V(OKN;IamxFbtKv0A5YVmZAnhd4#99bu&L5{0Ay~3n?d{ zvG?Y^?)8Y*?Dl^VK!fLz9@1WD)L!tqoiUW5%R6#Lo000j{f7awxCE!TJ*W0v0bETm z1AcBT4X&3z1x5d`{O49GL9VA{+)7@3)<}trWr=Ny*@XH)dEb5xG87ME;<} zj^XDWARXiPt}O8a09tCVMRs>qwpNH)*q5)Cl$@^TEh}qnrc2g6v!KPg+AIVg=wq0~ z7a6K^{u}FT5?Bb+9ZiPcUZ5ubV8-^(#gULgA;LPFE~kkp|4b8akz#H2-{3pKdQ(5D ze&|KtW}By>C0{3hl>0U!MvihCnH!hWpUx!6N6$z~;=j@LjLqhc+LInviWH8k9v}a( zuHblMMc-B^DE30$H>E^JZH1WVzk$Juh7L!k8ac0~dRW2vRQg73)pV`e=jCt|M~O0; z=%-Bx`u~iOHy;M1Q5s%LXMBsW!kr6Bf6Z=5wJXok##XC-CA=+9|8$?-&&%~cgM{p( zK^ajqibWs+J-;bUG9f$CMxGMRh46Alx1|$1Z=Y%WWT^LlWJ`3dODjvAj+mjq!JyV} z-fM3tPv&YPOYEOAojTCeBTa(7wgs7C|DUvra?ueKA;8-6z2B8Yc@mp$@b;8F@cw{5 z;QK*xyknC^dRhORrzJ4>f5!8@u|@K9>&i$58>JY^M13?D)roFOjOvGiR|AM;pEZ|A zSf$6uvs$ zv@U|v<&~_gCN!SObv7lS&qbg^)!4P^PPi#GxGOAZ0`6_Xgq4pTe*QmNv>r3w(ATjp zw)>=6i5w!aqYhUB_b!xyV{`WdN_ZHB*wIBGR_9l_kLCBRmh@MW$j^ZV`z{}5qxc>p zr*w4nh4way+n%)zb=Ef`SWE;mIEbR`4mbYFjs%AY%I87SzqERAwdQEUpRk77O!4`% zR6mY-0-WSaS(bQ;_}Eu_M_u_il7Ru!E6lixqMI%zX!`ZGi{kiA>-RurJs#(U{X*w; ztv1xC=6`fzY4i`hn_@eE=mqL^6@Qo&uS&6&E(xu0W$ed_*LLbe5L14YtdVFRWYV+D zgS?-nlTlIK@N?Ym{1|1i9sh%@98dXT8o|?t9h=Jh2@$*D z(%CrmqZCD``2;2Yp;-A0M;1@g^kGFE_@%lP-H%xM5M)T5bwl~YiOwIr>pCX1B@^@@ z`Iu4bCG0^WoAIh!`;(8lBmyU8;KxY+B7RSZvm5;i8Y7|#rQW;U$l|wBnARN!KU)>L zj**Z3xc{(gDRbhVc^#DgL&YIuk*EfDpjb}!yI-^wZU)FGj&tEO`GH@$QI)GJT}EPp zgG!MN4y2Ln-L2|N|44HEI`UboA>`{i3#LGb_v)>c-OaGz&Hd1MPS&AV$>DQ?*Q4PE zmI5Pa0wph-NbH?Bt_sx*Z5e}q3DS$EIm!?~A`@M%saqSWtNI|w^ zA3Gr(Eqsd;t+ycPUY*6!FMV=9yt-4laz+blNTMWgv~BZObsI?ErFWY8J@E@2h57n&MUIP&aasb>#rTj>h=4--mNAfK$X zuT+0G*?P;P9$^f;>NBRy+XJoBykVqX3WTQqO~8Dugbl?@=<22d!lN2>|HMA}=d{V0E)CO}1F%OI%Z~@GUrT zTy(#c(2uRO!B}+35XNFz`e4#`&C6-$V>kOf_Ph8-H!N+$^$rV-;Pz6$nK+5-WY_Hk z=jx~yI3^}v?Pj7-B#QQ79MhpNDu@_-VJ>n#YroF=yw6bZ;x+9BXv_oe`H9kfH!!Mm zFxu8U?_$6~*6cT*CxJCjoAHue2D5`8TV^Hs(do#7>+p z;mkdeXASRE452oVEgQ9O?J7_|A<_HaGUx46(eEnshj>My;!j7+x)3(%5O9^E<6X*0X(HKtPYTXqb`TIi}N~qxF{C=4bIR$#BX?>%fdufFiOKU^6FAF*wm?Vd(jil#V^ zHDT**#v9BU4eUOh*FKCX843bdF!vSz9(NCm?UaL27&;q%V?H8EEr&>Zl^be+GmEFY zEbxGaH=NAUzTMJh(IKCGlCewrZJyD(Cr}`26Y^71zPa%__Vvvo*n<=DG>8!y-7Idi(jraYIvjin#HprT&b# z@}632@ugEF_pEObpV-j7@jA+SJn}^sEilGOIO}E^|DyTXL)h8}!ChoCI`6gndS*~s zF{F~lZ|}YR);6Y&$?X)lYs&D#`uc?&rr#TT?|q5+pPQx+2fqMWV+y>^J3!GWOQGwp zqkL{Z_Uq*Mo*_@+qP}B@Uj^k)P9@4&-#7xieM=Zn*c&pWsk2|^LXJ<|2pRpnQ7e#2 zQG0L(DVcN)@bk+x8XkSqj<%W(-2^CQUYTUOZ#Y)op!=;G64QCtId0cQn<@&2(1N#c zc))kJ4^Q|s=}&?9XG5ZXZ;id+SKG{p>$dr#$8i%Q#QDzffaHV5rMynlb>^sHhi-*w zk{>s{MKg?U8$+C_8TH-w^S@%cuQj|kRkHuwS#bYIQu$~v+Dj@ic3oO&;dybkwE1Ri zhZh*I`!ow)KVSDroU1)1a+A+q`k66pf~*;=3y`B-iTDLr!}*Z;)22^RlgDm58tQ{H z_EN^i~h_rCi_awx>l5sd6pmpkfGnC$Prt_AB2Go%9sx;gmrAE=v91gItrYyZY><&~*qYfZ{yU~xYx%w#8= z$O+gYY;m#{9J`GII=4pg9lrt(LWCaC64~yyGmeZo`vNuGa4^zMZ=_c365JPmrJ2LK zz|&@W($E^560)p#!Y3IzbfqdS>-#?QWIZ2gY5Sh?GiA7v`+dHo7vUvz-0>YV2_O&z zpX#(#3v8S`pJ_Zm0RW=Snh2YUwjcSXkY3#%fgmSRLW@Ad=%FV7%q63xB6J0;@srZ}@->F0nyeD6mFj9zw zK&OPZGl{Eg$#-Y7paM_UmVL!akIYYN#f6S1AoBJ!mK)1x{&fO>g2gd!D%Pirv7cRm zSQPND>pdO{cL~2$wnhD4eZ6H=98uG@OK@ih?(RAe2<{HS-JKwTpuq`lg9Hig65J-Z z1-HQ&Jh%lL+~x4R&w0P|{W`nX>Yu&3cW?p;;;-49le=P4M{= zXlAQcpHV4?4$wpnSrRtFrrbC4y1x^3KMEIf;B4*&-C0t4?IoNS{d(aD^182+ec=~- zSbl|&y?COY!2g0ZV`4m3_xVo?-*IsTa_LdsdYe9?i1!)Di+!i+Fxml|2?bO6UEsKT zaM#=~x}4{k-3oe9UM4@ClI4yY^!fB^kOw(ME{1V+Kc_x5cX$4z52p6XTl(=|1Mw|f zC{C(sXgvc@IM|KOtZQQ?i^e0vrR&7!>1u_RtjXD;Z;;pfp|@+_HvarX|dfoxtXg>wU4(c`4q{tn!})bw=8TrQroqCblea>fMg}B zwh`Uj59G`;+ppFca8ceBH9N;$yITX_Lz&i6XM>((pEipEb6tYYXZ?2&UL$dGg9uJb zyILP~#aw%Q{OzxuCYJnND7|lS^E%I*Mb5;G04oFgulH2cUDAYkE$=pzK-9m$u?7GdX%&hBTkmz1>UoAs~fF>VhguwKS@qKC$&*J=AT z;+w!BH+rqE8?}A+?NBNR#oG$kaeYd3QJ&C|_pR$S?_O2&)H`;lwwsV^TTFQ}&P*hs z_OzAhR&W#ebo+5Vi|eH?(tDv@ynnw|ky|L0R~0KtX2O4u>a54EM)c})ys%*%Y+{mc zF)3pG)-0matQIF90(!};y}Tv^f#Z#~qB!WBJnT;03Tc~iF2(PCnuw(5WBw8UOM9C#gA3A}Rmzj}u4{mtv}{u}bQ$-MFZH3p5qbu(3W*=(2YCwOj%w*eRK zKBwETAv9&7+rbt1Sd7Qa1&oh@+hoSMlbfd&81hbtqAw~F`tPe=d4evxf^6*Gr8jiI zvs1ziwRi-~KY6vAL%l8r#DiESA0RjvW%6%PCOBO1Pdzq0nEDUDGEf>mSM~Tb2VED|aiAK1?{1_AbA2LL)vYRh^i8?V_2e#wrB6*@$k3*nt11R3R7&Y7Hucxje zdj)o`>q8=0k77Gr9WO|=TL>#9a#DDl_d~btYdVfjvOim{+I`}n3K|AxL`~~Ft8@I| z=D$%hv$x2og<^xl%a=7q<|5?a$jR4pW$)<$@c}$4KTf;#T^frwFcb zk-KsJ*{QeowSBOt~DpQF3>(#UW z%OKrb%y{mEbONC@3|8B1BwoG$zCQqvDvwX3xWLucZWCXh028oY{fVLbPQmGQ{+IWD zv)F*}y7vdW*JCyxs1*!iFMh5ia`4w|lM3dAac$yt(W>@@Axw3}9WVG;AR@MwXZ5@8 zgg0*^b_|&o@w-36>rp#O(QL}+&-O)`&Hu8!9W&iQ=vbH*G>Ieeqxq+J~<}#fS zQ`7=Vdia7<8L->geORX!`;lqd7yn}{m(9pYU$K3sK)6ZYd1(O{U*6V5ET`3ys`d8X zrz^8ZfQxVtnP~6bu+?JS5ven`h3k==SHS&q$4f}}<|pwp-j37ez)ayhU;bO+ms+3K zcjV%0ohS&sXiV-is9ho&mLD_?%|;qFQ3;y^es(`~UfxwUXZK;4-J(-^UWt02iSl0t zcejIFOmcmu$|;P77A|pM_tZo%U=*3)DQe4J8)(4BtD4klxp#!gCA{`aC}28!sq^i} z`ja~4!9I2MG3XIcdR*vI-bF>a^)86_ofainheE`iK#L80=hryh8G3NEr>D-)O6m}ZA_dgtCTYY^|&c1+|LSnyl{`ltqkY(IX z%TD1#Yqx6C|55y0_Tqd9Y(Q;xKG|^;5Hx9%J?tueP33bi{gETI9>!DRVg@Pcbj_O< z^}Z@n+wHhD?QLMeARD}5L+J$?n}-93$eRgTPN!-g;l$nb1wzONM5%m*W?cfqV{4YA zmBx&}JyY@k`reZfhR30(ueVRWqUN>SM0!8fC+yfKfIh!)QaukZ=p*f{5V9d!nfy2Key8&mdP-sCEQ00FPqI)=5x znl>aAQh*9`gx*}o@KA=EKDw^molr}$rBD?M9_S-Go_h4U1>7YgB-kN3T4-!83imihyN z&J(=%lYjmr?3#eRLSBc&kDD>|PJg{bG~XPG*(P#sx~xBQiQFLVe}(j!4(Ev&3s-ujccwD0&l?aC6lnh3^jtNFdJ^?B}Waq`<~!Gl*nyoD8s__6FZ zolxCXCWyrQiQL4m?ij^loOb+)$f4Rm>OT94utBW%_1~_j*G`n*%j(g6+{oo! zDvp_76!`Al%xzzO$B`n=ewyjk2i1g#RFx(P)DZKkz$38#%QED~sLCaDWZ~|QJm+q` zns8hVFQeHrfU2wPR@~*0KIpz6Z>K7+1Mk*<+0lC+&#S%?w)nezyHNa*A@{b1O(5)x z0X7_pnHju?Mov{F44K4A2I_yLK+9mKjT^#D3jdw}Z#|Q7Fsck7wWGe+{ElAP$ zCb;=x(-HlB{Qk6BAhG;4(fN&;4@>uB*QDFD=UCnE46KI8O0F0F1)@IdAHPrDTs)JV z#bmY3{_$wG?whxPmKD^`^o_vD7h}k(ICg!&rRzo7|KF%dod-&jN4vhNXV5gC4Mnx- z*vHy2C!rf_)z0nrW9#>{RCi|GBUxP^dYFx0%U^qfe4s}6?X{*O@qzt&<5n{_u&z> zDSqUu-7hgX=ZE{<+3P{;;;x$nD+Z^$t!5UFIz;DOL9ZlTe8K<1gL*21UR_!@E^L0P z3dKIIJ#wznm<*K=oFdELjzrLG8BL~#^) z{;{yr6lwPR+fviph^V?bH07LzIkYUf;5dyXVt8d*PzW$4MC3Rar%{D5RSNiVAWdYI zm08do8n@uSN&)luW7cK$827ez-tI3u)(Rhld?XjKo&}OmVi~uxz58KBb&vjX@MgST zPIPbU<=%)3!r*Qtg!a;l1Ye&nmm034`V80pYbL|^-Z-uZ4L^>|xOdV6Pxh7Mg;o(X%5y2JeK?yf@*QE~emDQv z*T2&FEe>nQJLl7#pCkmPbE#m9+&KOpKsP9gO^MQF+W3a}HUP~&cJ-GiAMUrcb6S+u zwP{HaT2bp`e|%1q&Q~Lm9A?0kqPDw4s*F_GB*PX@2~TyrTYymxL=UY77q$1-uyu{z zQ~5Eu_%4L2yb;&`VTk|Xh~$8<5Jl=JadtjL8rCSOInWz{G@(xoF|@!Js=}wWdg%If zL`{Sp-EPFfq4d~A?K*;D)^{o9eKctuc|rg8zdaK47N5So;Y#fuRJjm3RPdFxPd@`6 zmD<{p=m1@T2-P8q1t>wz!I{tULwQi??;m=GHcm_1sFcvX(<0~o+*F$;r@y^7Co4E@ zXISe&PJi1{McKwcZPQ;&QvUn=P`PbNlmvu~N25+k5$sg0RQLs_b!kjoEGZ&k!uI|{ z1p`vq-((tYj1}lbKgc%RC(=o1NRxGfA`)XLJqq}cyB>33Zd=hzZV(Om$J}$QS6d5P z_S&ki_q*#1{oY1Izy9kH=l=(({x8~oL&Y%!O|Xo7p=u+U8}@kkEFz%?d)hb**E!tw zA9;&0Njxc<2YwbG;&)PjK>|=o3lUTEhPKg?G~?di;(w}DNu9MoZMZaYa@*(sKOdrJ z(w$RtbRcCu=gI!<#|axAKPP8h3TRr1F9LHe*lbmy%MnG_W&)h!9TS zx=)g7<$pGSw=JOVt?$qBp+~nUwu8B%m7q2i5XI~wZ#0DuzP>@YbBaE(XMas>O;aq* zfInF#JK`U9yms57|05rK7Rcs)LhB4zZxrl z{l+|Sg8L7_TjJw+rBILmTV274dk4klt_w*gvw&bCSfchf?EPrAjmY@n{*FX!kuvgs z`}VDO1!!pB;^B-If&uWY_{Uz6OG~l{r)KBmoR}}z z%U?Hl&=Y$Wbgb|l~*zNqE@%BHC*H%%)1&n+5-#PG~dmj?6MFE}+9c@glh^HN>;{6A8CB{;FHM9cX zzt1D8{R*nlfRfCe&E?7(ku#U(zN3`a+_$=$*FjREmE)EKq4$)x*O}HQ7LL@8V~yPb z=i|0{#(o{*vST+vt6g1oL1wPWMC(SwpG>O)SRNl-zcQ`swJvmYpH6~r=c%llx0db3 zzk6~$eO!73Ut*+Y-LHNv4ImtIe&~{4{V1wrTkyNSR;hKw=jJ+K9bxr%AeLmE5af7! z(i3ZZ&6CdYMLfvS#Ef+9XQx;YoM%_J+e)UFmEXeOu2cB{yOzOgl;dqbefMuS(=;}< zy|Ksp&wS#t^QO&Jf)SmpU!VDE`bgcO{hFD2c9RJFz5ncEc*_s7OiVW+V44SQ| z%UbowqNso6Z<_S_UCSl*=i=n?)5@#ejbCrT>aVPxu07cGt;_f#3(6YCt>@&;9_?e+ zM`yP`$FYaElcU?P=s&#z4=tteNZNFTqs(6E1Rp&5*CaGc(}PJWVpJK46Tu%Zz^DG` zq)+y0(h1i+dh;ru*UGh&h@G2RpjpY|lX!^^lN$40|K1Yf9(FypecDxTMf&6K-2~ri z+Mq9~9YDM2$5;hR-4w=jt8QI#7Alb_U)T7yS})Z5A34_JPvQ)O)#b-=B>aI5pXsiMu*?r)tLfs98}e$V=?FJd0V+S|m= zo=q1;v(G^^%{RL5r9hWMvoH|1Eh5qWZ_RM`I_zQU&PrW7EMMp`y8`e55CVC~JN#-! z0EJQFn*Q%u03}W6yb7{XRd6w~&BR@Ylk~#mlG&~$KCdR{&T)_$3$$q;R>>-8_Xmcw zhamxp$urvjBCo?zVw-!|HzM<#i%js_bpMPSOq@cTLM=yxz&eFQgBnK74A7RuB9OKC zYn_Ir#Q%^D#6^zGB%q6cOELTvUNi60Y1OFO5l(d3r4ci|F9lQ>;Kq9}9$xEU8Lpzj zbTpiMLK`btJbuxqKv{Lss|!XjVCVoxAXNb1QhnB$C6q|;81^+`$yFpBPhGykm+s~f z3yBM!sM2OSArhEULe2$GOMDouo#Pc+0Juw6~%XaA}Xc4oM^83XWUx(FaZB7OpOgsT zrHE2$j-r5o!Wmf`3w-^kAFh}nVGDY1VF0Qn2wzT;xEv5#AQ@$H)@Ch6nU2;O=!Nkh)kgU(``xxpTPsgBsd7(gg&0sIp}DD+96rAn2j+(QMagUqgwH7tG? z+Dp*RSXC^6ZY6_Wq`BBaP2T9!KOblHQ!bd;e1@q3>Z;s18S9&suG*>k^D$RZ^TBdw z>yv0kA|_+Nq=Q+y%KKTToos;R3AWgphpYEZ0Z?U=VMVAn>fs3>UA8StJ@-I1$gTlE zduhY|QFb>=02Q{WhiA0zsI|S^Z%T1Wp}k_!fDDaVi>b!Il{6)6eG!1Zh(PdOveSag zNP%;-tj@AlBx2ffuY1G zYDu&^J`y>}^!cu3G8HYFRF!qI0REsH^Z?GrbrK}h#)NzCYQ*bKa6Je)uRWGTP*^Sf zMzoc<)mrK1rM-#jQS0!zAXQ9^1;a%CmsHfKz?~oCRQPvPj|!RaGAV%M993ZS)(QIh zu9~!bjr-MAnO5tjdg$r8q!1X*P`L)Q}ck zqRuMDH>@hS&Md`g`r1mo1OjO^G}C0EVQ~tj2dAg`t-gJp`G>j()FSZh9kGOo%Ck!Hx-Bp+BL|0+tg_d>5wl;1E_KB z3p=nL;4u^z_b4RUEQ|FmcSO{V7;&4J*r)o|fDh38Qm2}ppCU8m3m#WA1yL%5XBejl(x@X*X7alsFtGRBIx-F{TvrF{Mkr=Vi571bJh6 z6tgvr%u8b_1oxNo5g~cFfH@{Q9MxiEn!R9MhA2t8-1&2UJS!Om$C^s7KM%pgeNJEV zQA^h%+&HcO@T4;1QypWv-K?X8JD1^%*-&~e;;><-zFfS;6!1>bDv_PYv&H@rDz@v+@)I_C$EPu^K zDw1HZp;gM`q0Aet`nzi#MuS?5VE;oZ507zr#OJRo>)=Lc{HQ;5vkx3oYFG@336X~T zjIo;>U!oGDO`p0Zu+|LgB~0KNeX=xA{_u8?I-S9V%kc^Tq?3UmY?t-J6#)*UsESZ^6wf#r@6vQc@lF(w<|A6YaDYC zbUqGwHDQ2+lMyRd6X$p#y1KfiFK7Yt!~ruO1b^Tu1k`NfUHwFp{3k^{h^v3T zPSEB`A2WpplBbX?z)(VzA_9z+p~(gqUzz^vQ5+SsOW88E%fG1L_73_;W}}G-toxiW%l%2b8IsDeBblLTJHB~|HeLE)$k8pD^YeACLYclm=s1+7j_Hl|P0rP@<1C~

xN!0eDc&FMsqK`f*~5El*{fll$>zFtZKl{Rx10QhVSk2Cn8>t}F&d^j7( zXOR9o%@`F0(@WRS^^G`HlTi+bg?#L{u&6U_pyNh~mQ|NG<e6IGY2PomZw%9O>hg-^;M1iu|Ba$QZ-czxN&2DHlogB-BH{{kW~od)T}#f zOwsJ;7xGz@EPDe@hnERr^2ToV zLdQqyC{Ye;DC%mvCESwD$Zu>XfbSje{GR8?H@u`X=#S7t`c?_Q?11ZaO}sG4hlA_h z^D;XO8g)}m0_P1lS$z555LAe(rtbbnSE#;g8rT_bz zCDO1gboAr0TE=fKCA2k}8cvwwdi^MIc|;4xk$g?hQZVlc=}!ro3e%hx`*S>L>Ode* zvq0?W76Z6q=}^5Sj}j#o?;Yuk{;^|Lz{N*-lz_zvu zilgz~#j~8pUl?0ch^c-G@=x|CQi5QKTNJ73;GMyNat!*s2@73uDucCqMMMMVtc6AY zjAMp3z2<)NkQ$mZ&IIWJ@3%MB;3!@ED3jH-7O#Nhe*U%HGVvRpzK-LIae41t6s^g1 z{99?!Z{-68oiOp+eemG|2>Rw0dL$|l&^RHp3N=(8V(NxdH;fTmpD0H&lf%oUv=lkd zBc>QzWJ<4OA)S6LFIe$GHK(D)e9o{0Yd&%$jh^Ww8GK$#271%xv`SMfuu#gP zB&vZ@>txqflp(ZIfpQWzkp{Iw;6;04J6ns#9S%P3fsbBP+RjWSQNA7>*G)6g^oT^{ z6#lIPvD@qBBx|s>z-5ZnX1fstUNVY$P3GDE%J?r4*+M90iy*e!_fJ^N=R^96kU9es zZ8$@aCjV{Nrhe5AbxvPLSwE#n%+-aRU{`*Vs(81u{=k%k+1Y=kC%0AZE|o~8it;x4 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 RGD-jd002ovPDHLkV1lHA8;}41 literal 0 HcmV?d00001 diff --git a/other/appdata/screenshots/controller_mapping_dark_theme.png b/other/appdata/screenshots/controller_mapping_dark_theme.png old mode 100644 new mode 100755 index c370bbcaf5db9abcf9db82f184c4375d94ae5abd..79b966239f778369ae35269747e13e8b2e38a66e GIT binary patch literal 190674 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%0A<&(D|A4-->=x3=l& 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

  • 6$1(S0O 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
    {i@e(T61w!hwU4Q=dr=bM~@4W~B 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 literal 158285 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�VN21cXph4kQFb-3Md{h!}E92#D`=!q5;9 orto;+U5~Q=G!2CPpQa0l{4SrSJl`|qz+FH{iz|p#i5Ld{A1H}hT>t<8 diff --git a/other/com.github.juliagoda.antimicro.desktop b/other/com.github.juliagoda.antimicro.desktop new file mode 100755 index 000000000..e2e1853f9 --- /dev/null +++ b/other/com.github.juliagoda.antimicro.desktop @@ -0,0 +1,18 @@ +[Desktop Entry] +Name=antimicro +Comment=Use a gamepad to control a variety of programs +Name[sr]=Анти-микро +Comment[sr]=Користите џојстик или играћу тастатуру за управљање различитим програмима +Name[fr]=AntiMicro +Comment[fr]=Utilisez une manette de jeu pour commander un logiciel +Name[de]=AntiMicro +Comment[de]=Nutze das Gamepad um Programme/Spiele zu steuern +Comment[uk]=Використовуйте ігровий маніпулятор для керування програмами +Exec=antimicro +Icon=com.github.juliagoda.antimicro +StartupNotify=true +Terminal=false +Type=Application +Categories=Qt;Utility; +MimeType=application/x-amgp; +Keywords=game;controller;keyboard;joystick;mouse; diff --git a/other/com.github.juliagoda.antimicro.xml b/other/com.github.juliagoda.antimicro.xml new file mode 100755 index 000000000..e4719ac3d --- /dev/null +++ b/other/com.github.juliagoda.antimicro.xml @@ -0,0 +1,7 @@ + + + + AntiMicro Profile + + + diff --git a/other/scripts/build-sdl-lib.bat b/other/scripts/build-sdl-lib.bat old mode 100644 new mode 100755 diff --git a/other/spec/antimicro-git.spec b/other/spec/antimicro-git.spec old mode 100644 new mode 100755 diff --git a/repo/.lock b/repo/.lock new file mode 100644 index 000000000..e69de29bb diff --git a/repo/config b/repo/config new file mode 100644 index 000000000..18e52e7ac --- /dev/null +++ b/repo/config @@ -0,0 +1,3 @@ +[core] +repo_version=1 +mode=archive-z2 diff --git a/repo/objects/01/f86097b296783f9277d100e5fa23e10749ce6dd2a8f23361112e51b4f2b9ea.filez b/repo/objects/01/f86097b296783f9277d100e5fa23e10749ce6dd2a8f23361112e51b4f2b9ea.filez new file mode 100644 index 0000000000000000000000000000000000000000..29cfcaf827f79c0f519ad5eb57ed2c83c11e0cfd GIT binary patch literal 1079 zcmV-71jzdU000^Q000000000001Ds$00000000000D+_c000008I@MsZsRr(eb-kE zHbCK|fxYdbFL4^wah%w@zGNk(L7oCy8cRfJQ6MQf?qdJFL(+-uCd$Q6GIi$6nJd*f z0#+ElYb*>bSy`eA;0XG%Tq~aC23q|?`2F*5e?Y8Q%{5GU z@{d3br-grL8+ZO!wq#ti6S+JidrJ}Lgf5lL6k7s4E)*hYxiBlH@C4Sff`k>IFy-1P zKCcV{H>5G`NCiuo^2OTn&{W*UCjkgV9XONGy)^n z_C)8H!rbv#i%Y8^+Gv1FNyN->SsVj$das~HrRhI>dGxU%JO=6V(qhIcS0GDkcSv&A zAeh;jwu6^~-^Q2%FC23&ONu8aLW*$3g@8FirEyV-V@p9`xE;mA*-Z?+=^fnm!mu}u z@45swxumzYXpV|6OTmemqEb}jHHo(jlR?-Yl1cA;G#8TdJ%hJc;g{wTY+`1P6RU zt+Rm1>?RuYXVW;GjUx*ATQrE{(ex_181=@ptNUSaKrmk5JCH5mcK&G>)PUG!$x+bU>5hXYvM@>tZD_vs%{*+M{`C7TPct-UL68WhHGGxp zzGsLmLw9o=m5PWaGQ|)xYSU|lHOE!=(QIN}?;1uM*B8z;ocMW4JaGSI@FM{FeZQZb ze;xGWAn?!=cZv_xn+dh}8y;H!6Ani%1IMrl5ROWk*~0w!`H)0g=4S?ka!;*8>b63g zu7fp1?&0p;=EVEiH-1C(&{f16`~qa{4_b%bI-u4yn9$JsT-1`M)VzX@`jxWLIDV^* zG-&I*y9FjpB$eGQPbwP`z9=PP`WossM-)w{s!T0}7pYvu+z52xPU)U#JtlmgZSX*w zzn3H^l-r?^VW!eAd){KvgC~_R+%7HEz)oz+G+Vro0$%LGJ zn%a87v!PV{UutmXJHr{&OjOup@HZ;zjCa6&7HFzW{x)og_G{x+9IbY4c+Jhal}gGH zHX)zo)wg?JF6Z)GKD^ZSPm}S1bZm`2m=fv|(pKYUV&+ncCj(j;ye8zc@_T}YzS*tv xBg4u27ue3~8cT|!)wp7{zf)e_tNQs;{m3%)w_G>)Ng58YpwB?)bl!0<{|7I%1kV5f literal 0 HcmV?d00001 diff --git a/repo/objects/04/174d971f621e0d07f7a1e81f3d21a50081ba5dfbb99ae0657ee6644054e38f.dirtree b/repo/objects/04/174d971f621e0d07f7a1e81f3d21a50081ba5dfbb99ae0657ee6644054e38f.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..f3e4dc1095dce4110ee3147bdb19e5beb96ac3e0 GIT binary patch literal 74 zcmV-Q0JZ;fXkl_?00wFt^?)_e^-u;X{T!rMGCdfQP0VU&ewH|+op*Zh%tUGq@f&=> gXY;lL<%P%Y?zVOMq!QKabM`5S>kDjDh$aR|0Q*NHZU6uP literal 0 HcmV?d00001 diff --git a/repo/objects/06/26a70a6414e90a1666c3218b4209fa6e614e1f9830106cd1103de1d14d4c49.filez b/repo/objects/06/26a70a6414e90a1666c3218b4209fa6e614e1f9830106cd1103de1d14d4c49.filez new file mode 100644 index 0000000000000000000000000000000000000000..322e4c489eb4442ab1d47f6dcd25bd92cf035a23 GIT binary patch literal 1830 zcmV+>2if=l000^Q000000000002=@R00000000000D+_c000008MRp5Z`(Eyf7f4e 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 UP&KjCZ(Mvqn*S^a!?(Tv54i(p82|tP literal 0 HcmV?d00001 diff --git a/repo/objects/0a/2714d219243f836e43f0c13a9dcb34a2b22c273c7b5196aa72a0339c639ff8.filez b/repo/objects/0a/2714d219243f836e43f0c13a9dcb34a2b22c273c7b5196aa72a0339c639ff8.filez new file mode 100644 index 0000000000000000000000000000000000000000..33c756d14f28958a4afc20a14b21348698499726 GIT binary patch literal 790 zcmV+x1L^z#000^Q000000000000qwg00000000000D+_c000008I6=}Z`v>r$KU5u zoK|USJ4E)Ny@9S8Wzf>{R1(zjs&bP{;?1!m+kv8K-+gC?ifU@vc!RP3_w)aJcZ8?F zq~#?~w1P`kV#QLh3T`gmO#s&@EtIUPPzP`deN}BW&kGC3{S)~3{=;X8HCuB7Q=a@3 zXy8mXi?;RqU-Oc2(N0u(PVo*A7o@JV$~7y2mYGHbqcXc;8auF6H6%=e#*`bY`9p0H zxFwHis5F!+<=NJ8Xs?zjYOn=@MO_+Dng4M)UBV?w)J(v5O1V=oh*2&;{w(8HO z@nSZPDB&Bo9(<1{gX!}ADmWqqmv~s@STYfHitwi91qvDz6aG-!L`kcaFqX!_t?|*8 zDCZba3tt7O`d=U2fqTK z&+Yx};(E}JgP=L=_+5OY7D=enUdJ8(bp)qAsn(MtIIU=E=x^c+$XbZX>XWW#uN9{u ztGP%$hIRw0nZ<;UcI zzx7EuQ7InM(X7ddqUnmzS}t?*jZ>TD&s{Y4zy3T|zM^kk9?f#B5+*$1g}~k8b^i+r UO}BJ|-vm2CNq>D1hKC#S55aeKQ~&?~ literal 0 HcmV?d00001 diff --git a/repo/objects/0c/61807d0daf54c7ab0c40e4cb49b2e52fdbf23945dc5d7edf9f3997661ce6c7.filez b/repo/objects/0c/61807d0daf54c7ab0c40e4cb49b2e52fdbf23945dc5d7edf9f3997661ce6c7.filez new file mode 100644 index 0000000000000000000000000000000000000000..e68552054dfe40799bcc08e09934a9786860f62d GIT binary patch literal 1108 zcmV-a1grZ1000^Q000000000000b=n00000000000D+_c00000838Q>()%Ba2mk;8 z00003)mPhY<2Dd|&sPw7+M=-O*iP12$XXOxbkU*J52a!J`CdtK$DJ2OFQe1(BqCg=h6$Z5qnqpBM~molauTOTS);iQ zo){-Gfw3D2!NNA`(Ub8aN=^vrqe&<&Uq+1kZ7_E4M7LlGMvOBN@?t%{Eu?_VFc^al zLW$IwaRZ1chSnGjiYHw_O!v>V%NI(4E0eDdY%Wre#5$8XP^9pjkzj}dOSZgR8*q%Q zix7LX*0?Z^ zX$FaGYCKjeb52>tAI6Cx^GTERYce4 z0Q5xfPc@52*JR|MN|>Hp8od!&;p*nUh`sN_7jRpA8F9sb`HyMn58*0pO64nt<*h6eYac)z1j)Q z%x=KP>h$L`GW~xsGJO>zLreQ{Yl>S{?c>p?`@yfbA5{Z)KZ7)35P}mpHgO`@GLoRP z0+$@&hj0TLXOk$=I9PRG-EME?~w|G1c4Oy-BM*-NnVi^c4GaR{5f1Us9~7P!~} z?DQoV{>{!F^)_i?F?~o;H4fhiHehUx#|-ZxgDJMLH28;rSVEz3Gei(Y;C a?vw0q^|ZUzCntjkT=F|cKTTyu5C8yBmJ0;{ literal 0 HcmV?d00001 diff --git a/repo/objects/0c/8f5a94910909dc60d5433ae6d28828c43129c6ce03152cfa589fc71b0432b1.filez b/repo/objects/0c/8f5a94910909dc60d5433ae6d28828c43129c6ce03152cfa589fc71b0432b1.filez new file mode 100644 index 0000000000000000000000000000000000000000..24e0995a1420197f0a7e9f54ded2567b1c08eb03 GIT binary patch literal 520 zcmV+j0{8s@000^Q000000000000Q~|00000000000D+_c000008Euk5Zqq;%hW9?j zyFk+eSYA|6A%q%Hm9DBTruK`O#N)AM-awsIXcjDsSX59JTp=n{P1}%OVdh4>u?vk5 z3)`B1KL4Ko_d9xyc0#&=-I`2$oD7A+Ow=Tm%#BW-X{E5H?9d_zD0#CH1(1eZGp{Qa z-w7j;TF@hCj4q8(wsSeM<~Z}8{I784ms@`2m;Nry{Q8e)zkli1EH1-`Nbz+I;X6xT zdcofT-|qb~K7KH`2;agScx%xCi*Od^VaAfb@e2rZ{}3U66~6M`WpsHWrD`{~Gu0~LzMk0g)VT=wM?F=`fST4{o0hKOg zF0txe3;dsJRELhHY$GhZcTqyPeI1H z2c@L9?qo1_l@z5e#NdfJAYsTgLrrqjW@H>DZ_p@Niz*w5%JQ;pFxzRGO6G#3=8S@{ z)I3!-+o!ZEp4v3olL|XlJh9uSTSAphn!LjHy*7o-;*6$`(^;WOC)l27VTyFDTT3#Z Kq)I!BY4RJWPxXla literal 0 HcmV?d00001 diff --git a/repo/objects/10/7d43d909a07d9081d2e4de8312dbc40f32b54ca195a0fcee11e43b33f2bc52.filez b/repo/objects/10/7d43d909a07d9081d2e4de8312dbc40f32b54ca195a0fcee11e43b33f2bc52.filez new file mode 100644 index 0000000000000000000000000000000000000000..d73ec72d221f32ee96f840fa288123340f0e2151 GIT binary patch literal 1343 zcmV-F1;F|M000^Q000000000002Vs{00000000000D+_c000008MRnjZ=*OAe$TJ4 z)R$dpx6{6Et4cJu#8U#PO`2w2DhHg@I|L9o-DX$w-}l&%CLyFDz05;Lf$v=Xor^h< z(f@*Fh+Zc~PM6>GFD^RGPpO{Z#+U7L!nat43JoZ5SMGYhqg^2CqzCUD`;v0%tk6Hn~*oDp0MIn0NYML*Z{8y|X-@YM7 zD8xf0pGAp+zt3VWKqwc}Tog|z=Su8RNlOR?M1$2L)9&}vNU$&$BH6GygLpC?p)8GK zV*r7+2u+qqJqg6K43YwR(gYNtd9kazQn2N~HY!RXwE~5Uyhw8@=3K(r=MNWcP~&El ziJ4_WL=cpmN|A4bG!k<5r1Mg~(T?j_a-PftN~h@T^bGxp&QH%8RsUn8*J_*iFiF!G z+4#m9xmmQvWmWHOZ$O(XY6A+5fWc98 z_fmZmYg)jF*g>xyv}bsJ2s`Rw>>iBCpbmz!Zf~t})FUkL>6nop%|)g0Rn5K&zkgcq z_|sy-Z`dH-I?{mj+p!KjdxzB4iBeOxm|8X&vidN%>+$005@i0+f>+hLaVwUEF;u=@ znL{gF8y$T;kjtIw7+rd4yDU4;)z)rQXWM?HVcahhX}R24iIQ^}<|z|O!P--_T=L9J ztvZ@53%xT&Bbngji6^0m_Rrx;#wv<5l(7E{@^mU;;oM7(N`RTIYUb{>9f;Qr5UqxjVVJvkyBLOx}x9i9)0#W^vJ{SMghFi*R&A{dXEq1=j$}V5B#EX z-ZoJy)24DuX0BY=i~T8Ij;X8i>%{9U!7OT_=qY{p=mvK~O+#E?Lj){Pw+_vBMsO z_Og_TH8>L`RU(Bq_9NB#Z9zWM6>vI#G8F#INLO> zMai;KlF97Ka*wwxz9C#r7UOd+iH@fi)A*Jx;B*?#Cd(yG=Lvmza|0#=Fk;EjQJ%HkG0fYvSf6B-gA=AmNGnf8!d6P)6si zN#6W)jVx`NK^xzPV~K}__th{AH=E5M*Y&{IJX9UTg+~Jhg+Z_>6^`*9xZaa3x0o!}Cks5<2Xu1_RO$&Z2{QNlS)byfQlTJs^JUFiBoraAdh5NLj( zTqP31O5%Q(UXq_R@eVW!9)dR$7iU*$G@GsD{QkAy{qZao21%$(G{28nV26W5)18$>sjo-@3HIIEK yX(fll7nXXpe2se4^;8e1jCUPnZDb0^W3xkz3!!szjiv{#*dxuK1cc%1ru_jgb5z#= literal 0 HcmV?d00001 diff --git a/repo/objects/16/27961b211a23ead2337a08b078e60ab72f423d12780f58808ea200267eb210.filez b/repo/objects/16/27961b211a23ead2337a08b078e60ab72f423d12780f58808ea200267eb210.filez new file mode 100644 index 0000000000000000000000000000000000000000..32edd9fecf852e83a05b029993a805783efc2415 GIT binary patch literal 735 zcmV<50wDbW000^Q000000000000l$<00000000000D+_c000008HH3$bJH*oz57?} zOfPB3#07>+S~{e`NesG|hNV;vK^zhz4Uy>EDF6VZ0^_Fbv~quvoxw7C|58{U{Cx%iDeg^JO%j zErKq<0-Y>$1TQo=Yi2}EOwrQd&B6AXhH6NgNTFa`q~RvWx1@|gLL2q}!8sBpl*}8G z1U|Kqq=gwsWjkO<;#Fa7)${$`Zr9Ca-BmjG#eu~5*Igp=J@1TXv^p6q=218uO=cg1 zC>Vva={yR)gu&{5?48jym-qsLNMs`FluF*Mc$%ZV_Pj(eW8iMixU_-$b}k=ci%N5u zPgIH#=CluUja!a8=p7a^fg_3c(*t_$?q@fjfgwJX+1Ip?dHGWk{r@i zVd>Y}*n_ME|A8wf;v|Ql&mqT+zSc=39`2GvK@EhICTS))_ literal 0 HcmV?d00001 diff --git a/repo/objects/16/5af28b502b755c568d0efaad73781f4af35d80684db3dec44c0760d563e8a3.filez b/repo/objects/16/5af28b502b755c568d0efaad73781f4af35d80684db3dec44c0760d563e8a3.filez new file mode 100644 index 0000000000000000000000000000000000000000..f70842a108bcbe7a2f8aceb780b7e72c25922ca5 GIT binary patch literal 1081132 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Ϟ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

    CqpBJKTo%*yCMA;}+8IOOEeX{j_6LY>VBCXmfk( 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

    QzF_yz0AA0toAPF*q<>qb`|~zOqk5Np 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 OO((L&haS9_>b&S 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%0Dt0vS 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

    `PkUoiuu&QTxzE`#Ab4q@H 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

    r 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 z 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

    m>(AvHml%iGnQFQDGoAXUFVH-KC&)Yw zlJGf}?G=^QxL0e)9K7O`24Z>?LciXLCKEiNn{#NN&*c=t`5L`^^HCc<@0n@tz!RjH z`%cP13!b%(w7E*w=IS}JWMld%lAY_0m1QH;Y(Bv&`r$~&$KC?-Y@;F1-sW5et(5C} z0E&tc|EaD&sn+#is_XUsdtJ}g*7YCzDmqaL*unZJ>^rZ}^ns^V4kVMj-=Xc#$|0?6 zl(piREo=OZz6OosE!|?H_eQt9%Ae6d>u^fGmadO=0 z`nWR;aj8w)q(twjk1iOa<2v=bO7sAI^oGXhxH#QciSCNkMZZ4S5FJ;fgOun$>!WWs zM#n+h-~Ht14t?}R#^|_ZDo=?%L?3;qF*@$0{HP!G6JEi>c*;;1$G$~{(fYAM%amX9 zL*S`89qozhe#sCE%E<;qm;_5XL3 zshC$LwB##aLrYGXXMrP#XjL3OH#&z>CT$lnyLevhm_jLD`H@@z2EXQ69mfn*fofKl zfy%T%HV)JeS4c68WqN~U${Y2sCw4$|`hcRKrW&Nk?9cV~WG}|6>{~x8voF`O$N4M9 z{y3Gga$^6{QW{MpaHv4BVu3oEnBTgR(ZsS3X*3b^0*xjfHiXRtQ9()a74#rb{&Ye~ zfI5-H4R=5C>5wG4mMAhnq65X0FicaqA<<1|$cerd+aZ{x`-=~hHyX0tc@Y`V2UUVEFdbQu|@Vn)O$oh*{E zXpkyn-`28>eg+u_av8&y%l(bJuObVI$gxu2;U=G-NKLg+sQ6xIG&XC3(b&*e)!00o zNZ{wFq(QJ}A1vP_Ct-FaoWrN9sTf*CPDOwr6-zmzX~-yxE+R#KsLFoHGK)r)uvn|f z%yDuBas(P!gm4xXN(%&&W&ABu*4z%9S;z|1f?H>);D>`NCv&pO$-9-zDa62OEazlJPFW$OsbE=Ct!#2)%B;G!rs=CH zdhe<-dPf6#O^z-pE7RXv6-ludNNBk=RkS7TWwZzb+K%zu{$Y)wU^c)0)aQRnTS@SE+2T`simyow9jN;@ZYulcd{m8=vWI$`q(R^^#IV*`IO^_wMIz?vkLk~}Dlai*g@P8D-Sxhmo*poyozQpD# zYl?wIDjtQ%O3>)&sJK%xq%T&&H>Z!LKDcGRDF(j1IA6F2mb5M6_%bU+i)GUoun;|Q`_GFpK?@^vQS@o_)ze>?rVPJ86G_g2fmRvYe=bls)o}=>QAa|O`T?_N zS2bn+6W7PGR%w$z!lrUN-$v%P&cIC?McfW5>(%z|noNJ#PVQz@qi)7V-py!+rNJl7 zpC&mB-HhcNHF=S;|524tqmkY|s*GsFaCIaO6*Z0%%Waty-!Jd%X@1kLw$2o|d`VOYnp zHGfCB=3iwMtEhUO=)!Ev$}vdOXM!^SL*q6G`9GikDX791^0GD(|8-P?gC5Ft{F6vc zcGn73RnSuDu@o9qur-lX@R7389v4}eLMMBxXa^OvQ^x)eN3+sO_$iXJQ0f1Smzk7B zRK}!+hRIrmNwI-RRnFuOTo%YGHZa*YPRW_+X=+*%Qu%$WCr znzAAH+%I%E7Q{@FO8ns%6cj{pq(2*Xur^6bUDdcChKYCSeZ#; zrA%gPnACYFi%cg&R35Amaad5(2z6^MXgacs2nS1XbuSnNM>M>Ka^N}gB|58fl5MzTtG5LDd!(Ld8T5} zb(O`VhRR^dz+xn45k)Lw4J?`~EToq`S=^0Q6*ahlGLkZ|@Zu~k(&BWyfyJJY%KG2S zm1X?1R+Y(#KV<`uU|{mu5MuHUGTEM>W_+K4nv8EgNzVAj#4JIZo{u#1MBevhR!Ig{ zp`2A6VwI%J_^LPMjQ=@YVW3IP?+?^mDN}~HQw%JA9ZW1XU{88G1T$=bmPe+L0+VC~ z&R346^bGe*(-Sk4Wgz0KS^mLA9~k-&dv*EexhIUvKTqNKlvaLX?3e6$;+ZzI@>7HF ze*3Pk%E-t=MLty5fGjvtQ?&ACJ#S<*l`~q+_pn9&D@KX`jZrTTMt+=8N6zR}pMS&X zex3iq=wd4)qc2($qu=<>w#omB(fj|6QHlqn4xG_w&ZruWe0`QQ#=!#-tAmI5ffTFb zJQ~v(%2~q^avM|BK`HtF=WXjerH#Rs0@|2NoFbbRpd4XZf;*_D`3a6r?CnUI+;QmH zp_JB#^Tc0h!>JQ@{AOiPO7T`#p4jp6l-O5k%Ok{y%!W0oZSeRR9<)T&PLgZ17^a?= z$`kKnht+461vzATa;VNZxaQCpn$(#gtMkBcx!PvxaG%A|kk7%Ih`YiQchdmEeIIeR zLkyZjS|^q$A52vvOyU@tPG4c*983F0Q7NdwB{zW(j}CPdZ_y4-K79u>jbagf;xkt; z;U*p$rX97z{D8P^SgGvJ@s-9b)Hxw&3g;f<^!acMoQJLdG5Zr8xKXiP;p5u?ts?1b_n`k)n`1*@i)QYa%~Sq{To;pA0jL<6c8f#Tii z^vfcaOsD0O-m~e8pLiC+=I@0=7K4Y%7eMD~{MGwdSszAO0k=eEJ0U8b-@nJ3&+*;|yc(w!yq4Eliv{WY_fQ=; zR1bhEyQ1|U&vzQ)8t^VwnOp#4K%Bn^PvG6U5Phzjl^3{|3+9sSxp*#--z2t-eUeT| zF6npaic~0FlnzPfr2=sADjk<{q$AQV(qSoE+AsYi?UOc2yQLqb9nv~!oAi~mSz0A+ zl0K8xODm*rrDf9BQl_+8S|qKMGNg~CG-c!1Yi7xDp6L-05Qk3H}xe5Cj?{{3yaP`+uC3uU~G-=qDu zTqt|ki1RDeN@c=N--b)B`3vlGllBPYy?8#ne9v#LKF2zk(&y42(oLyYlB9E-U?|@h zSHXJIc;Z^R%Hmv-iWQf^YZxJ3kj--CI?I)-ELSeET)Dt<cFAd|AoH5G5O*Q?l_X zB^&E1+32TaI(j&#I3&jf}>?ege5)4Ru}GBW<;&LY`(X1 zIbPWAr$dn}vI@U{7Y^e8E!ZE>CB}?j>U}Tsf}a5`G1gCT+JgM^qk^Eq&y8_TD74^m zjd&{vPI-D;?R#SqV}ksxi4lHQr(o&jtalg%*@| zre4md0zYeFtUp8$c3<)q!XMeH3oZ9RytzZbv<8)yfIHS;!SRHU$OI4^y_q!K`~gvs) zgv0`?Girai)miU|kecHsgzqt@y$G8S`}16I1Ph(o+8SazCP#RHnF;~P5~JKNv@8^M zmwU6EWz5ZK=U8y0!<1U?HGKrjJFER62h^Z%5T2P>PUv)(W1yy>i)`e~i=r zjNp8cncn;u`+*pH0m+?bYbb;V+inRCKm3ro$4{{LDrW)7*Q`#)yJeoRyVRSh<4-?G zkbRG^`@VO}llH<$dy2o@?_fD=8XTGtRK@bVmf!WI+R-)g@T8E3U0 z$LpyNv+{hK-w(bEoCk^>aEy~|;(HE#`#~9KCZy&v(f0YlJ>e&1rnhq;hp(J3aa+SL z*q#v_74i!toq_b|Ke2mY8RzlP%3P(R4Nv+E`nNHM`zNd z7p%I0`w+(~g1wXIdWc267AvQIgVEInmS1m1&hk;bjz`<$_!l9u7psv|EP^xU04q_f z3PGMY>z!b^kS7jHX7+OK<33%=7jqm_KDS| zk%B%1Y`Slq+m{EFU|+H*%!r6}S-Q|Y1xuC-QU<9qCdm0*sXNjUZDPjkX)tDfWs#{9 zOWt?1#K-x?ID-mf!Y@Dep7^R!e4hDl$mny);3fvjI$^qwUns$v ze*P?Ja36b*u|F@id4rU={54YI`ic^rg9Q`aZSpVM`NFlW&q-#XPN4EDqeoD|enxyd zs1)67Fs%#D6pQ$YSb{sNx_N1QMD`R24W(A7T5dR=#K zTOB=E5+Nr9M|*4d9dp_u6Qpd8pREoQG)D&^{H|>le1P=jSpcg0SlYmK5bTemz2KN_ ziea(htV|ATc#i;E8yHCW;lS#qcpP^$Mg{p<9sODF;ilEz1GjYfiLkFl5O zhcHmD>=KjF(K9f-XFaoX0UFoYeE(t@Owgt0u*BP%382@`LDBX(epdS&rnzcj$K4I^0f7^Z5D_D@EZ0sy1bVV2Ef3N_EpM0%%`X9C?tVM#`oL}b4QhvAhrwCPJ76QD zP1tXoUX!(1kh@DQrEVfV8v_-WK%f^C;V*a{i*dfVn`!MdUPyCUJPfV3%uUy({WE<=Q%< zGNDU1V-wLayJn=kDOPy~6xtAP@Cuao&5zR;k|$2%e|<{`?4pa`AsQ*tVM@jKt0^&J)Twk5_6gx z_Mkdv2Z)cxfe{|%$11!ztrWZcY?LQnW1o9FSYhbRn&DAai1|ByN@ic~*qVcN759t- zN#`&`x6Mbq!MdL8%|dS%up>Ir0`$$1ei_D|&13Jx*t2=;jTn1mkOl0{coJcxRs@20 zLkBTS2Qg6#5lj$GF+LO`jM57U-U;Fqoi0Lcm}o(Tl$y9gO2#S*ktI1Z)H*56Z8;6i;N0+B1x-|E=5{}yilZ3$TbsJ$i*>=Lbw>ejqwoUmoYjqu3XTG zapHnej74L#Vr;pf6=U56MGV_W6k(V~1fq}8(NEXWCu!(|kiH4Vp2cGeYPdQ5>I1i1 zF}|#SGC*rFuqQg1>P8DcUKEau))hi=Cr@iv@oOL z#IJMMSGUb(b)(AJ3r?@{14_P=*KgOPJ0UI_7#esX1WO0c8#waa)10B7ehMsKT&QV$$D4x^W zz%%C*8)#0uV&ZC9G)lFjB*WVtG9>9__~4vYhO~1=8D7@OFj6N&e^mx<$Nfhc?fCtX zTKXUzeS>pGJAP=Swx-`XtF7tcS+%B{(@uEFC1k}&Z3$6SF@K~{6_ZCARWWp=Ruv1+ zYE?1wtWgy&=#nz5Ntt=g(+WaZqVl zorxYT>)VM&F_Ls*d~il9M%o#p7%%I@7^xGZzeWt3KqAyg^f2Fd-_$}h)j>RQMrYBg zp3yX$54^c)*z%^vG~81%{);y&&G?KrjTt}vO=HH7d{dk8i%)Aae%@(g#&>vAtFeUB zT8;HNZOnMTH;o#BBuFNz_T=JfW3j?g>vx+Uq45qL-w% zDv3=%DZGb!^kvG1=^z^FA!?k^_B9?J$0c|Rj*HRHN&8anIGbkk&Zn} z-5%p-K7Q$k9_?lYim8W7)Nbl$Rk%*WFnD&LIFbb`rLCi4iRweroUnY^{cwrKCe4#= z(qBU%0t0A<;Zz9QVj(<@L308{zr!V(()f1WQcY=`P`6YmjcpO}OBwOVp%P6_c1JQ< zjbTV8n~Mykc8nS-%e(ZDDlbPCWaJq-WLF(6^4U5nvaKDVnibS8hf1_ry`fI2Hmkp= zQ>vERj&emlGKA~cbV#FPRpw1YWb~qg9x^W*!e!1qsFgWPCv%HRWFD-b+7IevzHiaV zELk)%r^$8gX<6o&gNn>DvX_GVf*yI59{GJ0+13_O^9OU(I|oWMz40WBC?{qRzVSiD zk}7;qf#<}b9B)6MDaVSAC(6j59jH{ty$8!O&pP0t{Dqo=$j17&#|>*ZZkTPN@A+D3V^26EI(1zLIg)z-?} zLzUMy7iE2CAeZ&~0!3DiI6_9u)FD>UA^ufMMQnqJtz^W3NG1>d4yqB&>EGVh4E|{T zc7SHal8vyQad@)Elw zyo~rsp0*PE`)e!lqng@gLv7~T4v=*_B(KtDu9l46*+br2{kgnNb@DE)sg*aqrcvJQ z{W;?GeOh^k)YQuRTFuIvxjFr1d4JgFVa`U#$eB9iDmvu9YIvHnU`;KE7kG0aa`_GdyP6?9LIIMW3N`nFVxWLxM>Ze zjt9ty3-)R?QC?lEiR;xX*Ks37USY3?jw||c}OeOa!D%vM?Elw7UM*Zs6IpY!vS*`lDnqL=wcKb_30 z{8ZyU809_Dm&@yu>(ONV+*d{w_vlau>QQ_7Y3+7reAD!w2M5zKy}tkKbBXt#VRh}V zxW2e?U$9rua#XO1Hq?9p$4pbpMZunHtHpS*PIyXy7=8}EJ}9;^a~>Ti*t-Ybi8gr& z4sTl@Y)w)Nyac;9h|?#=epUPgNA?yJ(caxJ^^&(x{R|5g>=s)$h%l2!uy?ocKs$Rm zg-aNjgjoED5R*3`On!GiTGMkU?_@6)THqlH?P@%Z52~r-1K+Y#5VV?L_m$U$WPj%N z+u|G0GQ+J=(YV)wPX@LH5l@`PmeK_4Pb?(^EQ0fOmij8G#Z2A;!CnPey8^AHZi5Us z|7o?Kpk>Soa&e9gVONJQtjxrTXP`NS6(C?sJOg2c_|4O#7U!#eifRrp)nG(>zF1{H zt;-*vjJDc`n#9iqEUPBILTgUj4y*DdQWMR7R@l&SK5~~AUle^tupfi=9g^9#DK6Na zWsxk=p>7tOd=Uz3E5Vr@00p86Mo4aC1s$@y$8sfVTJKEY9&Ild?5EYDBo25em!o~Q zTC{M;3jd#wz|@N3TOFQek-774C2r{_)N<2~rL>b&yFUr^%Zvdx3uqH!oRb6fc46WD65Jxf z)Sa3apfL?iPT_`VAvHhH23s}6iCs(GU>$73u}X340F~d{HXMrFp}M7ywGOXCgztHT zO00u!eOHEOrUK!UR~t>mCWEO!a;Qn=TVZq0UAz}ke6f5wYTz;y1P#4KUVlU`>4X#@lp%u`Y33Q zm|>DDe2EuU_@|BaJ-f2{{`%9}`ko`#cXQh3*q~yakHTe><`nY{;1z{yCE5xOo3*Ev zm(V`(eL`w(fTo(`{Eq!5mWe3X!#A)?satxP=Nnj(@aRA=F++kFzdMksm%7j*O@QEt z3xx6nw#MF%HHzoAgU#3*thYL>9+DC!8>Ymj$ME*`>+QHl0at^%sjET#W8~E!XG)+r zZ@an>#Mg#OOzLuxy#8WRTk!$N#UgX*x?MY<+N6m{Bd=?(@`w#|5i?BM7W{1!*qj;E zf`ev14y5hyZ?JaK<^72E5kY!gGakXVpyB+?1n#wlf)c!$jwPfpcH*p7R9-K)pz>N1 z14{wWa)g!V!8|;dho3#+QJ&=)vkKU}m3ku}#?d0uQ8frkbE4RI5B6NZiLBBoVVRXD z-oo*u#p>+sN8!~1mZ3sy8b zniXyfSMlu?BoJr(N>qE|p5rF7Nt{cEZFs60o#*`M>d)D@ zb_v5*Hay0zFB`&6kb^%(keg1LbNmm#}Q@K>3>r z?J~>9h*UKwh5@0F+hig01x|ivt19FxBxKbfaUGr}uNs6R9@|PNvV_&e$O`3)y#B5c zZ~$@`C39G|RV!dMkCb$lBaYWaJpWLelHVRG3r6O&tzJC8yab+KAzPJ+1Wh6@_2kHP zDotc=Pfa3Aw-^&S(xCt>%z^(iJAp6;^xg- z#1=Zlh7WY>ulU9)9k;jF#FqSo-NoOTy`B8PjTO}u|B(C_YWFgTbLy44nZfl9D0Q#% zgH5CD1xFj}9@sHL{l*wao0&&LOwp{WM>EqE!QwZ>_(ftU1B(hTHm8w8 z#C}13QM6ev_+E*7Cm5%+9KjrI3-Xgzsr&hyBcaZQHLK=}!k;?^<)h8M-Eao3{-j@F zd#^uU4H!1RAjGtdC(>$niAVlZLdUBj!Qa>~xZS@Vejr0d_i?dKN3?yE$u$T!u%e*i z4Im70J?U0X!Y%)Snw*t|hW*gW-fyuTUPR&Z{ArM^%fpKyaK?dk<-Eo6mg=r`NBtVv zpbp&AnYxFCKOx4~qpny414lSVmmQ2;%puQQO-}$K#58V_J2g1hqy3tHgN_k*c^e>R zbDzGWUV_VNtJ(sD`FkPUW8X07Igs}Q%W(py%e~7Xu$>ZG(*7;5Vc7$obwO)e>Os@h z{Dn;{h9hj_5hkEBCMcF=em_VZ8wo_fnFrP@%8v>Xu%E_$#KVu?_Tm^j3y-l+2#OV* z+exqW50&7}m?3DbrKy_n9PVbkASUi3`yAqk3F<7Q^M0a`2z~(^Ch8$r9bE-yy;#SL zs)Bc{Mev?$5r1HvQD%R-;8soh1tyX^6I@F`M>B^{A*?t^LQE;gGExWq!gc_K`Iyt; zI2BJecHzXIpWs&uKr#{_T}fC_?Qjg1y`^9?%WBPPR;=?)D3^UV+}HAZ2p0PU93aDJ z=N{{*SnZL1kggQ=!y>x{WxoR=`;9Y=WBHO61a8K}zSXc0L3dH?$;J$>cC0rvIurMO zwl1afa4=qDDsa?)?N|s`iQwJGg8E>(Sd|O9FsHR~bFZhezfv55Dy1m&EcEDE3F=rx z2Ujgt`;{0c+}qifl>?~>wD-_SsGH6A|N2ISmz&cDLuV(~i)lIp?72ANWQjXG*X(SH z)iXLI^eEFm1O(%TTBd?LR@y?3y59)EVs;b#cS8Z}iJlB*cVyZA4!8h-h88@C1ZA2p=xC&jy`Y?nwPq1 zL-0$yZ8^LH5!bRNpf{@?9itq<(QL%BcqyVs=diM6k6s}KD)n2_*{n|GCn{XBjR8Y+ zSDcH^d1kMG?soTZ#s3QypX3$%iuHW404Ls2#Cu91OMDh-bFc^cu}1BUSWzH0$saRO zzt58spC6q~mMXe{M$yq5!QV+PnCs{q@#x?B>fCA*Sa?>GokQ0N&bW;+EO~eV`&Fva z(K$G41(iCw04lUQEPqFc2`aU?po&_V--dC7bJVH9a^}NEd^ksuqY--4PFB8psO?c$ zRm$&Lu-s|K0nX9gIObX*j$jRubOuU68I)(ANM^@rKY*OOg1x5&_k4GWJIk^$9z8S7 z3K5s=MngE*b;7%ppKlUUZ(5|E)g}*s#Jl%-ykWabaI~h`j{xz{X!j@d?5LeDOm%zN zo={IXbvJLKamOswmoKZCbh||3snksSeShvs%?O$E?EYd`W zm+&>bCHg@DO1p?{!Qy%~qK-gJdZ2e$~c1qKQZMM=J5wYU6#&{It&Tt3s?qTK5C@TRtgEZ&JZ zGhlOw&Nnt>PP4kY%;{H6mpS3p=nfmwtnV63Z2;ZQvcD9!d(bsXQ|2_%E_ z0a9Q`~wKDuh;IKh+SOg+b!^&Fp(Iil&>;e{O6`6I{AT6%C?3TgtAB(7*!*19Q%9>s+Tu_0bG zh4IW3udXg$bsq0eZyHN9JWOj4x=l+ss)^E#Uyfw4K56L#Wz1t7-)w^Lr4^42e;>k^ zJbY~UR0!Yqc=|UWd^e}Jc!q~Uc-K3R4X*>?zdt_w&;PLS_sSp3ALf@_A3a{aO%Oi# z(c{w(;rlBd%YQ0_e{=8g>4)(1_aC2r2tRXAK9|jkCY}O+IiG!wkdv*6?*;K={?^1t zv-{my_WAVR$}LG%+R@PCgB>OEl`tQ9)42UwCf!AGIeJ!wB5v9#xlHiKCh3vl5D zG-sq!QjxS4FQ7RoZNhtRR!E1XJyMR8DeaSfmR3riN*}A2)WCSA`awRP!Ra+NdhfF2 zS2l|I0K4O}I#OMU($|%iO z%Tj6JFW6gQ!>4C(pXIC&{d~d9jrf&BN{0)4G=W1XFtF0Vt`rzhY2dRIXsI;NXCoic zEuy|-N9DY)8s{P#ExER0d7fpF_5dU43y=kGbOMQ8efcc_hVf$lryRX)mT|nOzb~ZA zzC$c03+nMLJ$UOz>ENNR=@;euHVpBXL;MvG-w{{I3@Ps4I5l`^ZlyDMT0&c$93Sc%>Adx?C{-GUZ$dBYscR&Pf{)$|-T9)633%!I3rVfOqi*gldQoZ6ZZ=qDg$F%GBIIumuB-m5`E|{+`2`5V%8^B>r?hn4vM zo?ZieeV`AhtCZIeDzAAL9#dYg>}T;s+z1gD^1tBsHPElCqwwoU{Q5tRUoyl`A$}eI zH9v*C1CWO^@`#M_5qt^5vwpLPwIHH}MKo{e9x*uAP`(trs|75Y%Yt~3|Ae;#BIZ~S zFVX`~Q~x2}3X7tTVA4mA^N-QTD2Pwz4dR0T=lXaK$Xk;9-71w|T@UJmrOIdUUR)2l zk*}-=v5y;IT+4=`?0*1kFl7IkG~HQ==-yG>Z&pUxMdE~yX(oZSw}<6l8Gn{2>q%Gy z_K6c);pX)aaU}f+rhN~voxKnJ2oSCG!y-oTtv##uP{*%evwFW8?eDouX7U8=?>Wp8 z6m8!d#eSfvv<1bA)3HSP%+1BLS#)VT`tv`etptw)JXy(=4>5FYMNy3Xk(ht0MBDGp z(Kny#Ot8|^pfU{biB=?bT%sf2rYB#6zHlsL%g^!5IP)COj3dwS%qVz{XU4AQcxG&QjxwXcF3OBo{sWl-S&@}V_KVxY z^{l3e8*8FH?54Aay7irkzA?_^9KL)v6KLMSJC%L9Y=s%EyMjHsKx}!J^=q87vjs=k zhfr6Y^Gsz=USnj=h1!9caC^&}}fGrzG_w)W~wV#TCyPIHEOx%-+>kZk122wSv zqVI9zbr5|0#hkWJUkCp~fdv$pY3z>A-Y9hH^4^vZldY|zC-fj%@N0dV@RiyHChP&F zujN*9?Lm}fBW8aS70YZ`Sb;d295lmZjYo_EWBz}|>fIQuuevpvBk;Wgeb26>zq|>; z@A3U?Amzq~)KBXLw_Q1+aYfCMjjOv~-{t+Y|BtsXfs4B88XmxbaUIN!G7Sw=D|1jW zNKr`0K_PKXGfmS>vkVmyx5R*S8mF+d^eGcf(^3<2LkqyK3lG^ zm8ktW$KHydVdPmU&Rt0mvCoqN?_W~I6uzn^@vpA$z_N|hPQ(GfU`#>qu##`9K~7n|3sA+9Z=D z;A39^=uQ?`;Nh;NEvgU+R(i5FUSa_TCU%n(X=L@(Vf++@(+Xop-~S8wWd4>0hqV4L z)COzD3SCClLO;V%zIW-zi#g2|$74LCAHnn4hNYw6EwOl_5z`}aG~K@Gkt+Y4cfXV)7N3@v3?!wZ_!?|n4tzQFC_P^N5D@uu}< zr8B&dzNsPY1;y=J@ibPX6t}-crC-)cgW~$b7m?4MEF_Q#vVLjcP1Z19^FN>Wzk{-$ z@{vCi@;}Ry%})^k2mL*N0$$-4&XZS*QSN(PRxS6T`|)up(+J#RZmq!mZe$N24}N zkc6{+n5>5A3N$4==JBXW-N-SJXHn(`z8uh6EDD8(7R`B$0Jmft|{ z&cd=OHpV3e>K=vSJRQYz1eIhNF>j@?jCkXeTeXZB{ghm@ib zUYlhgX&bA*uR|KG@W86@fYUdLNU*TS56X?dSxk+$P~*vhN@;wY(s--Zc-u_T_>(8J z#{Y^+UgNPXf(}3!4m5-*#57Y_VIqa;!UM9s%osrjTKuR?2wLML`8@J7p4&*|(sCuqbu}UXmjC=q|Ka(wZ>e`^ zqrV^-Z7!-Yw*dhIMbdkydnG8aqaJ^VHrY{1(Q~Y|DB2&BcHlb$50Txc6%G=vit&U& z2wStBcGyt%oyV>1uxa5e@IAVzg~ju^EJ;)Rf-E_8M9GQQv=_oU!NR@(+mCqLcJl{| zl`LD?2I#8<+iAXiW2uk6q%+Bpn{H1$5M0Jqa^@%IxVbDAs8&;U`?0wiIrWxEYpbi21FN2|Gdy;O6S!Rt(c&Bxul@+@)1z3w85{XsC* zo|(xmeyn9goYX79wh0xBG(PsvansuYe)KP^AV0<9H-9GN5AmNr8uAY+=Lbh@_<>;Y zPRF#G7nF7jd!SQN20y{Dtd`)9}%;(39GY5rlY8mU|1kGrr z2vUuD@^GUNo&4=dsh#uX;eme8x|(^qnmJoIv2_(@`;^B5pgq3|euEu*fo8{^3Y4Ys zV=)@AFTrVkI)Q>1kJtmpIy7LnniJbZIGbvHs)xVe6LBYx@P%Fb`+o+b)KLj+v+UIq zzd*b84{~*O?K8j8?AqDwY$34n>5KiR|S3`46Hi}OQ87pb>@=R~_wS_d}clc(Z20(_NCzKT6Q%G zz;4b7;RX8hmJ6xZx$OuMS#h53#`Q!{m^)BbtSzU^;XX4zq|8A+Gsnz=5us9u*-8}n z_)SW5W?d}!jQXzFJny*7m;XI3GpvUgml^i?ANWq9Z}v}r5EZT*Ae2-}ygACfN18K~ zf60^WKb_@wAWgl$V(V8Z`oB;A&0bWw|1W_1|LeFoN8juIAIiRb^tfT368m6~ncP;i|j{6=CyDQ{`GV!G;$T?AQNcQyKbTowOxQI5wO>Y3NL7QIB zKsppdfeQQHA9;l66hEde4K(M1v6IeU1%-(;_T?HJ^T|RgWIxuU%MFs^Noca#mPZsL z7nV~~_`wTp&&Bt{%6D6v2-c%Smg_Iipu<+NK{;YvwA%jQgej*jsI8o~P8#%1C9w5| zvw&X}@!rF(o^b1^v(ZI^{@@DSru{UnFOXYc@IK6P5?Ah&N$e&_%*SDM9my;AcYIX@ ze?5r<4=N;#PA||8&onmYl-KZVjKlNW zJBm!U=#ED%P;ozs`GCtAQ-xdxD5C*oC3DWY+Z?5sH3IeI5*=!qM-O>pe;BbZxUFFS z^tOgwf8N@{Wq0R<+Zx{D3xxN1sNl#E7gKa2w3FO&@9cDA7R>^>W2qFu+OBqcwE5j8 z0!Y1lssgEaUe=S^T@!}dfxirMtoFVH>dN;kY|y@2N`rRl&VbG*JbKdRThBl;Ag;Yy$Z70=DEZ19x|}}=AAc+BMXo13BHI&?Q4bv$z-!aC z)A{><+{(KdSCny-do8^x_(`}vL_Y~N-QGEFTb|@^Vb%XOuj`!Z^}D-N-qE?QSA9z^ z4#RXK3K`DRrVAc_`lj-pN$~1R5)7toiMF5kZZsU<$6h-JhiC?Gj-!x&Wxv|-{-DWp zi(&I&#H+a)Jr|l}tINjVF{I9C^DKrW$J>2*vIU33+AN$Y*OF{~`ttm-pTlifpF#ZJ zaQ-ii|I1|0!BS?AoyPY!_Wnh;l3G;`XCZS%k~s zs~ELOtdd1gfo**kk}?XC9V-m@erTE19;{q{tX+ytDPy!t`w#48$|l>w4QXD*(5 zi+~uP`BTg|zi6$%X7k~dXimHxpS?Xmo@&npimAq@k!^M%HV?fb2h6t^gl}ig2*gLd zN6p&+j7zXxU>y!nn|M012pWWfl{_+*px*j~4FwzKyz2JY@oO?C4;g%fFW&{k0ozWt zbU)oigyM~8(RF3!UYBj*4$`z>NL2`rak>oi6`uAI?M~ob3 zKyyu8;_`=aI^TK|Y|Wf45t$+nU=7`k(UEK}@$A>-Uzgjvk>@*W^E8?{svT!;sI<`~ z*>kr??ms_f0VqfLsa)>?LeYY+kp;os>E;LUx(+ZNm<`IzA`9-4xp6@4l65k*ohPZ(rV+IkqBhQ( z+Bk_?t4i&T@q*f99kp@4=y=OXNCgr~a{Fr34p*ri&d(0Urn8ZwgRuX-X#8@bN@FI` zm`XGb@}_Z+MB{Lk#zqQ_OSkI!f3Hkq8qt`k(wI115SRvbm9sF|Ko)y-txTO!qb`f6 zOGD}sv-G6FFF{x0bRud-rXZ@8j;N5m(x6P7BS?tjn0msnObN?TKnLi6}v7bQ^OQYZ~}d7<8kkKrEx_EwtUT zzBmA}>eqajY+)5PW(40Se;4bpZh!pGB)&gRMz<|o>vdUEAnQTOij%X3Le^Sz2E%Pj zmz4xr&r?>Yob?oB?Lrr}$@#kUx{!YGAFQ%V-o9_~^PKb5OBD1*&N>NMCdw-CihlxG z#gvsVXMF=%gD7jC4Ddt93csT5XO5!7DDRI0&gUMcBUFc<alCo< zc5fThYNA`5P0Kw>NgWCH34ECRDGqVE^szkM*@=?|CoaJrufrA}#1;+=&Rir3zyTll z7xF$_pDk{NEs9$80SdUY_Uny&&#?zKLZKDmAP*M8e1qhhA`(w-v9b{ql929Ufs52b zm<`2p7Iz*5b(GL`Q_jf?b0Ixwr*>w0?FxPm*F+>)L2aQEOEWdUs+@n71Wk*Y50`Vg ze0<8C&sg)1LS`58V7D*b9!Hv#)E${qYsCZ{BcvMlnL7zbH& z5s6IE`~N`}i8IJgz5OR-t)-(Qh=u(?EhT1D%5^$2C0>U%-cpvY=P$V-)LbTOaUH*; zu?YGyoYkiV!=gLcacEb$GtSK?bAkGj;bh@rf3iMZF6xborS%Ou-&*Vph-08a=vCucWj z3-Px%m30Q|{=$8ZGwK2+U>sH?@s`ugF}Mz(&9yLzZBP!27XR(KfET`HtSY2DFFfi* zTguUlm`?N`@8bDSA+qfNd+bGk{g>;YINt-*5?){(CMOF(}BF) zX%dRz_lHn#95ux1NX!@4Cv4m`>V|rNy9vQiy5UM0(gqu{>kt`z7xOj-awr(s4kIJG z-UaM29__pb_qy>A8ktOxtX6w$luIIo6IL1SEV?w1BqdT2(x zjjm8FE#*V>?}-XSv%ET&e%7D7xuozndwZ>7>vUGB(;BaMDg0LYgE09Yg;A2x01|!L zb3|s4>B5bjxTjmCIE9d5ID|J|lPcKvmcbBq3qK!}~oOzJ0 z{DnvG7)8;LsSfB-!Z0KZN2f|h*fundS+J9gW5`!I9rU8HQIo(Q7WG4+!iy5Z2zWl4 zBbK~LZ}?fPk{wTq#p*OT*8DSC5XXn7yF;-mCDoG_yLQZWfX~PWn{5 zRarX$Z&mIN*4?TEOw-xpyfKJc)J(C*(cP&$i1s+IJhOdu|OQo3fYMXKnXuHI-**a zm<$`MU`B~@Es%c}FTLYv0|W$Yz+mKE9yYfY@T~!^>h&Pe%iePETW+OZ)|7CAIky01 z{)a%sGBPp@b< z5y0tnrc!p6ulN^yt9AY@^aq=OZ1xTqpu_E@svo2DVUWInr{~e{KJXhPZt?p$_#IEO zzm;T4_Dv~K+2vEZPlitZq!dMXnDFfVQd%q?$|O62gYa=klmq}HO3A{cG6BHJ+?%Jl zilF2f_+V&%vz>J)RfX_&Graz21+C~$o{4skg%X^249NInal zFgR#^@oB#>ZoYr}g(u#U>=*QgqS@QC_$IZLOA~CzJ{%zL!Ns8iqVC%;GCM?;O$%os zFDPP!qVzl?9|%hfsPz2c4DNf078K@S4~5#h`v6m4ibxesrMvTVa$9;`027X*`XNlM zX#e#(F(+Ur8L0KcWhko46rwd8{F}CF+Xnj@+$Jfqd@qQxoDdOCp3JC&9~mg=;9m+P zx$aj^lye?VP=EHy-8mh+kssE_Re>7W3>!%n`KNjd(IoPyy<4T+-R7JVfr@ISjvTzo z1AFRGbMA4KUvETMlQrZ1PXs8d%J9$S6MA+4Fg$%ERmSknRO-hm&|*%0PK z4tgNuY~wXa(+U~KgzJ7BVfjGDGByA;K<1n&29lgN*@cx2>Hk*C46=*>!M`+1_m&ED z)Pl*>QE|MZj&0F(l;LY#N1-=OoUWtZ71A<2!a5E|5Xm2f;E5re*umC3b0fwxr#-*w zFd8jAGwJV-dRKLGP70k8los|5L`$WdWiIx$Q-SWNCoRWoEJzFhYPFs zcx?{3FDv^#FA=WGtOl8O5rnFly#Kw%v(AdFI3Mw^ApcFpUY_^H#jP|UPAY_PX1Bo^ zTxW5ytX-YGM8|6M;7V0lonD`_*_`9X`x8DVa{s!c*GEo@NYxRM3`A_bqv;vN=(QvZ z?~!vYVq_v9vOZ!GBht9nHL z@HL7Lu4r^n87PoPqi)k4VxF~)qpk0S*5XtShS7Tdj|O}vk}1R%#Qnp#t!LG-R>sDi zr7;yUhBiB}*PnsA2s!1x!1MVQ!598g9CFSRx7GWJPIkJVSP$7Ngh$dqaEGu)-C5U?r$%m%wby6(QfZ#>^lBfR4IMtR5ceHi2UwxW2x!My$5P4-rvlVZOJ_}%69 z6W4d${lpXAHvGR5PuMTMp8v=A{(9}d6EC^9cp6JQ0ilkykNb#qD?zwQn{$e5N~`nY znh-15ozb3e+!-@OtmJcK=XvG_Y1MnIF4e3_HLKQD?O3T&39oZJ0OKWBTL|%zuWr|Q z=!S7%6fe2Mf7~L%JD3yf!{7v)Hq=yzJLz^2aL3<}u35}c&v3m|^^cD9f`UWD%P(8>U-%B9hGfN;xqQ%bGPz=2a zA!Og)rf{IWM)4{&O5$t)bE^^=d4`1H3k;NN?3jfZn&~mD-Y8+{C1Z#o49!#wL-9ZlL3TNd4zR_z z@KR*q1MJft3i|32`uXIky{k8(x9HKgk^uk^}SD1wi* z2s}^k;-fd1b`6dwnmtEdH7>(q(7EE7*rp8<*7-FgtT||(IWZblQ1OKjzSXwZwufaV zE6saK#@i7iO&AU1v3+s+_Vto6WyqLbL`-Aj02{K`xJ7B&kDsUmE)G3Vjon8fc&i@# z)j|pUIvM6gdK4XG6pzT3n3bv_ioPm}GJI8HtQFaGfLT)2{-3QfsXltQ8vmwQ zIY^If-+Bq#CE1qoP*sIVeP??yX&jz^jMv{rn8WojC&@62WS9%9VhbQZ_aJORi_Hp? zuFR5{R4D;b#HJ&PG(Cz3WfTv|C_GgVMVg9Y&n5*$o{XY9a?kiUP5w+higoKG6rald zFp2shQ$_I_IyjCUB>G{gIu9GpQv2a!beuFMPXcVqvXrexAWW1I4wDgft)_Iv&mVhr zMJb+)jCIB!*y&ziFRYcocB>+RZG)^@O&*Tl14-DLxkU=YUjA5OSlY9QtKS5~mFI=) zT^U!l+%3bg=U3->;cB7cy7H0S{}?gHSRI#+Wpli6)s=CrmvMbgxaN4_+VX>fYnqH} z&OF4mfx0H&3)eSmBwThGR~q5U_rld1x9HW_%`_-JP8K*t6!zAt5OHIsI!Hd)hLrr0 zf|M-vq9k0Vq>)TXusUCt&Xo84T|E(M{8WTm;01NhYPo)hfsQb6rns}EHlc#W>$70bdfBf)TP-@6!?T2JYi1YK5{#@Q0Y>6H}R4`aPU^3U$A~hjoXQ zQj+L&^i=!BV;(w6P$$vXOkD4NdyN(N0uku2IU0EaL$?#&Wi+RvKO2-1P5e5#u8-t zUhbxM2+jipXN?z}Qi{p}vKGsdSIJ8&q{=Ib)^hvkq%Db`||je;fx|U?-HDy zUT|I_I3P%|f@FF9lHmjsoM#BmdtPvA6C98=*l-z6j0~qC!MXe`!m)b6`H6ykz;4e@ z+9WtLWxMIO(QZ2G8-nwI7n~e~^S#(`*>Cbt{7MF8Cr~dFsEOaopeX*x_hOG@U1X}- z$)LgsRBZya&I{B9wB`R^Y+-DQyx#7U&9K*^J$KaZ6$t7?kqqif8PuBT5~wCJs44{N z9RgLpLI%~BK#7fqeceR@wNX}n&d1nVQLPD7idO@x6DYCTvoGY8wVMp84S{0I5!6U8 zs@tZ#t@~imI9}M{& z{O89*{_?AS^BY0_D`kH310cWM1;6>Hx?{$R-O z<)8j|$RFmve;PsltM_O>|BKjeSvzy2vMrZ`{s{~pH{$bZ5=`~{F-?7#k0$nWhxe=y{KbC3Rq{8#SL z|B!$49{msbANkKel>+_eAO04|ALBoN0pwTlpFb7yxBAZ?4EcXLJxV;b@!&6DJHaaV z6EBLKbDeSh|hbSe}1sl7J_QB z+Mtbm>0-7az$-q^RS|;To>qy?Kqu%#UazWkNUF)|NZ%J~9TIP{4(VRay5(e$b<61> zt7B3?s5RzpdSz?#t=8a^5~1Rcb40u>g$tiSCg9G!S_UyZ7gZa9b<3n zmg_+&x$d4xwqH5&cg7}dIb%!;xZ`@(>KJLFcwA`DmQ$P&&yzw$(o>Z56i*5hN%bkI zKE4$Z<4SKRwDdukp1#s*JJ#Q7V~Tz>*>=&|{4k)mW?v6XZ^}P|(yQ{%fMna%jNe>O zQgvR7ZP|v9w{XZNEp-{CF4I!k985|wCmiPmI4-^ZSW}GHW5b3k(QoU5g{C9+og5`X z+Znt_(B16*^RZ66NguCi0AJPu+J&*F+N#yq7>m9}Q>{iFC_yL0=VKJXMTDW1;vaH3 z56qAK#hF=8X zVg;+aLcRSHs!v3m=N-C?Igs)1ah^x>V$RMUGF$g$|6x_F$tM>;AbKt(kWpRzQuN~P9++WZS6RF6%wjTB$UagvR{qLjo>E`MbEw#C{bT6{;ng! zZ8r?Air^K|vuJS3ffml!1DzlPeGT74)ZWY-xkMp5auGK!i_JdBJ5Bd?3X0i z17+BqRD#b;QVA9yuRMVuhrWd%!*n1kOCXoYAoGY^(94A)z2ASO+?-9Vfa60v0~#-) zK5k;T4#(mz^f;!;INmU->PEux!dG}H7E0HKbNQl5ft<~Vu}*a7|HZ4KV2AlHuZlKP zUlsjoqIc8U;Gx^tI|`d-(KT()JblxClFz-XDv_d*miv`Y(Ipk#29BN}-)IlUC>Nvx zWwjUMBM)Ec@TJ~ihA$pBd( z0vv?PA@Ib34RaWSSKtLeW&S6Tz&U!y#km}-lrC4QSZ#l>zXs8| z`r}8mu3kaCZ*1*Bd?T!fVOX%b7I_E?ZHj}H9!)Vp@0)BJ8wZBy<#5A$zx68dt}y_BadfT(6;m5Dh`a{a2u5Uttea?JJV0$0g5S#rihM z-r16DPvi5*m=bAGynml*DZGF8g9V$t!NUF)gJzyfHo0W5+&eGX0nWZR&|tc+aQ!Wl zU4M^`6t2JT=4uwYZ_mWp@kr9WU4PBd!u9t#G^Xoo(z*X87E_>~d8tH8L5l4pl5)4g zGwgA3f&`2oEWCZM=Rs`JC&L_}O(c2Cm)aDsvro z{fRG19ulT-md#`e_Z=MWT)((Bfkd>}HHYjajq&Zody_r_+17ap;(sopWtnw*)=hCv zKgm(vAH(>j8@=8`9G4`@HGK9yr4wxO5CTQE)DHlN zhtZb0F4h=k~%_NX1N;8~&JY`xiN85@Xlls{8ySSoa;)EmSi zY#T!FG?Xzjtl1Qy9-qhfd*NOx=tpzSaX%2k5UcPI+kv_4 zWuERjj{PiBa(QE1KZyw2R@?y3xPG{oePMRT|Bij3{(ZUIy?Y8D)1Uj&Q97Lcn2*}W zq#423EA3yv17(YE`GK+qFv7lu`Vg&r!|+jzyD$*K@Su2t{RjrIj&$JBaX9Q8T_pDF z8M=|lWpjCeZwMfR@}FlQ_8;wpeG|G0#D)$s88+1f?A0-cUO=4arf?i& zgx3VlDKgGD8Rw${XFn_j4Rv$oUL%vbS54Z6|e+PnGc-rW?PDV#FGQvuU9|{#A^Ap6PSac#bQd77kzM z-x#>>7T%O$KHfiu{HCgXI{NAz8%QimOvYQENccYDW#WzVBaCl$f?a=;A`KUy2R6PC zbM!& zj6zDVCSTAX5l=DKkcH(dVt|TQoHONlHb~@JeCECuNV(BIb32M$6I&farv_*pd^BUL zp2fAI3UA`ZaIpmxVWe|h1WwN(lB1KzGuWIHEyHdUKyDIY9LTEARCh@}p8*JR=>+?n zL!sAFlEL2|-^>l0CoL=EWw5V^<_cB?$+^rRvC1nqNoJK-ZiHB{mPWgE4)y9gm(9HV zHCIIunFK6%x*V-|?IOpuj91*uEoU zzSTye+AH^18<4TJHAj+vA@5z0XL0RD9Ii#!0%y4J@UT#Anz8HG2x-;Dman1pV$m9! z?4MKkaQ0*zy|(~wLjDSq`iOY_bE2p)R#X@%Dhyde)AR~lFVXf-Q_8hp{<%lUrx=Gm zr8}1|Q_+elw&sfvM`^psX#txL%5MSr7RtZWPvjT3b$j&d$JNNAym+S7)}HS(u{TqB zl{<4t{XiR6HLE=}bXa!#(8lIj+xY76NTErXI;~v})FwpqwL17m!idcBAw0am`%50?XRPDWG^^R^eyf{3@hBI4wbw>d{MKH@wb^Qp4p4qgTb z(<8zJJB2fbmF-H0l^etrAWrb`H1O>ChESz_1l+j1+W|_YNA!)i2LrX}|0Z6@cq#yM z(nrJoH(J=vTGhx$=A2p{#b>>;;+Ezu?{YS<4++#+}i~l_=_azk_izy;gFJJN>bwY_};11|&R$aU{t; zS&zwM;Z5dXj=;qFt^r5;ut$yC$;Sq3_>EXPSZ#3O2Z1Vkd#2Yq*jEQ}g#}!Wm9+@Y zp`CMS;WvO?86lL_Rt zb_8-Ge4zX9R%EktF+{p4!xtTe|1HYnzw6w7?g$mnGbw!j#^TMAG5A@$crnED7W0n! z0AkmDPt1QKA~b#z@Y(e;uK#%d#eYsg`57!klO=3I z7%W!MiMzgadsP3=P}dhiWL(9QT|1!PAK_BEt5g@P{So=S&0u?GwU|s(dZyK0%i69^ zS{(GsRnkS-AIQEL@OGL#wb~P@CeZ;WSS*^Z_BQa<1a!ZAHQ_aJWtjvk%k}gY%K4SF zVKuBalf7p4)&Ky;xfBp!%`P@svv-~5T49LPNAY7@ zvOQ|bQ}`&JrJLVJ@vQVH9t6<=H(pj}sQfZTgE)K;rEP?G8xQX>;bp+%R_$>-tMVva zDn9(s8}1B~VJ~7k)7PZ;i1Fq3UA1t&OewE&uN9L|{mg7)fu!aiJmV z`U;-=go6&p2dU%#d<@ihd|Ye{qBD!tZecH=Bp;iZ$G6UQ0OYYnbQl5Ayem)LSQEt& zK9H5i%Gp7T^6`eaXDIW&U-(Df+mGV@JqgC-1vb15Em`3(CgPGDAmR)eh|xEM)A>a( z;s`iQ?`B)!Cg2Ag)UkCqF)VC=TjvjL9N*Lb+mQAlp)eJi;nR@3?42(3MrIrf8Y~aO zscpJ;BF^uZBCIGm_w)e9Lkb(4C;<{|)trdVHN@aHMyK{L5-QA1=UxOT;<$M>IB?h7v9utvw~jx9ntGB%2@ zEiC$dx0hb`Y-5Z#_F*z?CW}e?S!c>0A-p%oMr$hUbFkWfGZe!?fyV2yIn>yice1|s z`TU=&sOqD7W8tYr#39BcmI!2pV=^+*aHwc~BuS#ADx<7>l) z4YO@2KMz(_TW&nERmoVKwp&Xcy&7G*Q4pguX8McA_2gvGy?rOCQrvmhrlmOpv13-0x{$n z)asBc^Xr2Lkzc7QKOFL{!5BQEquqed{O0sT3ywQ7Mqr=eZ4-Xi)N9A(Eo~dA*V4N{ zICos|*AmOmv6ryAVx$(wCS|x4{V{=hLQqhHK!paKvilYCEPD0T? zz>B0~&uCHFkx`Clq3-9D6>DS_Yh($fe|CLAR+U#Zx%sZo(0SA4b<7#g*Qp=1U|rt( z{BFoUM0)o@KJveY{04XZ>b-4{|F(!brr-Y|{n6WM$UpCT-NSJxsDm+gtQ=rC66%k- zncQ$CG60Ax}4k#iR&P0?v^$gdN1jfeo!QyHzI}0fz8)_n z5#Pd2G!_S%$6mdsz8&J@V7YG_|C_#@pFg6v-A{a(A&vh};@hBxGz_Rn0V`>bH)DLUwoP?W+B>W z@oB8``!Ov-wD>fOW99fXiErx!BXiCNCdqzktjR}wn)M<+4aPX@{SM#$z!`DVi~uqx zJ!sL{mJZ8Mj5KHT)Vm8e#F1<~@mz(7HES{?f{JA0*oDDL#G3X!-HP-2egd{Np<=|E zVKTICGPE|qXk=)j9eD$&p->l^Yiki+6E<_Nho_8kKo4gM=_pB zsA~0oAzi}zw2b#*!W*hc0tvRQfb#1QHU2>l+0A=OZA5diNyP{^IWnf|vW4j7N?ul| zQIixLx4KLI+Z2AJPyLD^ZyL)Oev~aF3&>D2oDMxZal7NchQhDIQQ{ZI@;v>y_=P2Z zY6ZV^wyU3^>8ObHbAbI>RUx!TcbOSuY9Xm(TULynGj6Oz>PcCs+l4|3#?CQqfSJnC zG$E`aUe0S(l}N(R|d23ebWHyXq6p#ARzg=q~^^}XBDQwkWOpRO1WCqc&GmRWWH zSvE0lQ!4;EeFQQqPQ`Z)!?uzo?g7@kiehg(zZ<02+4azW$KKeg+8ej+rf=r12FOT| z>%3#=3>YmnbEho6E<^ElVk!;I_&^+}sc0d^g3w7H;_HyL@f9$^bVTi#jLyAFCdCyn5=B{(m7!RbSAFiOBT zGMqxrFTJ|)rK~@_+IV{|4V>oHhLO?+?g7 z>>vIH$WQa1KNs>%{`1E}ezE`jevqGDuKGcao<(wdK)CD&Db!0F>rwXUM=*PjYZqpN zALKFDQS^iS&2`ZAo$D9Z&#vX94?N^0X7%Nw_v2_1UM+$(=c}E)lZoQ;mcTjPfNKvY zmR_dmWZK!OY8DHKaBI3Zi`Vn1j;yJ?%eFuJbQWmgx3IA6 zQ*qfRJ67IRdEfMeh^|lw4H%M!N}7Z%28rIsl$gLia|6gAudh(jsRnrlYQSaTWck$) zYJkN@1EReeVEG?5AR6^sS_5)B%F5LL)YRX_d*@E#xz1-4V;Si@F&MJC-}M`hHXiaX zi+L03`UXjG<>KDAgLR!LmTMMIYA|-{612BweF_sr;b?R6n}x`zaZ^ctK^~c zv4Fj2FkwDD4oxI$=q`C-97%M%gOQJ8L&huivF_>KbS!(m0v%y`I?{V<_styuW|zSg zFP44Bzcy1pfm$_p{(Cv#;un09t=GTU_q;%$OG_T zONb{At^PO#a0xQNX{xE|5B2b@0Iw^-YcJqEDd4doH%jqK_Qe46x{GMvszF>As@%UQ zH~9OXEr1)1soV28mHoF#_x*i(CV>U? zA=;cQY#f>p8#7VPj-C3rMcnTf>+bi*qJVGQ-U@``vFb%6yhRUx8UD2;?&D>O>*MX? zNp_->eEYaEQoJze=)Eu5k$6(CsZTs9?i(4sFPON?6ZL5`^>IPCV9QHYZXU~7&P#an zc(H%{Ko}7_f!7yrmg2=*bePsZv>#uCVaOZYyJxa(2VXuCZ9m5sqPZwvLgF_-Tln#r z5C1`=8MU2=cf1f_9ddyE)ZFb6W}^YON!b_maI7zTOB1kz0?S4HV#dZ=`ao!uL(9?79vXS1c;f)pH8{}iz z5A@brZ^CzQl#H*>z3>GBz5pG*X1?&fE8}~E@SO=ld~bT;JDYG1d_jOOP=~K@f)9MH zWPA??2kg&B-k*RKtel<*#Z6@d=i*w60|0YXP?tF z>Pgu<17IRpIMpN^kgx#LU(`$a?YRRCQpi;thc+=v#F~%l~~)8WSuoh z2rwn=x3(m}IQVAad{}x<#2e4eK#r%DqAw+B{`eFK{RQti@y)x@MZS4&H@g4DUHm(M zGnU?7)~Ej`&`n#=)ULSJzMLe~PpS*A6dDiCtN7?B z7WoSvPPAQdeIb4yoJ!i{A=T-23U8%6EW$_#lB;{kPrCC+VM8u4eUBHU4VGV^^T_8t z#d+k4OFEDIGg*Hgd90Fh9`QPFL)fOl4MDvBiw(w?dHCu69D8phxd@+Q)%Xew65hG^ zBIMZ*J@{|7u}|;bz01$r*p};$G~eo|)WdeL`Ht*60qN$%NO$&~KzR7Kv*V2x0akm9 zK%}&cUG709%s!4{m~1c{q%H`=C(PA46hgSm=TF zWZP-H|HW>Of5~Z_pi1Ni0*NCxtGGRqKRnu&WAAfHV~0FUy+35A+WVl-q28|nF^z2J zY&+QYRMC633#@NC_JCyRyeL)3|5fgT|Mi~r&;R;?690YH|2^J+{i6Z@UjNg3)c@>0 z>c4Q0`u*klvOg)^9AD(81$G5JEgJlNp62nd-Dn<@s_CmvvUnbrQr{?HWr(CeYy>~HMlAL$1}VX#c$r>E@ef##fG;Ym44 zNyrch1C)fnMMAQY&?Ar%+QpHCx<&kcLj2AMrr-7HcP_pP2Y!M4)DM1taM|mKx||G- z?Im;)FLsLy0k*CoKi5Ya4EUmbKYpx^*})|wE+0m^u|WK0;5!T98){sR+nl=v9}-ICNPYGMt}mkO;#EkOE!K)UV)LTXWYU}CQW)=3Ih zdV>zg?vY6?c3u&q@J2hty&b-%fI!EKS~=oF)?fpy3m~2?cH;F2oA(e|`XJUgjx~k~ zm}kKPQa%nMNUHea5Z~!>0^fLSs|OOX2-_ucTnAh~x^}xtTszP_%-Iz_-~!GW4<9>W za^MQ{gP0GU+tHc^GBEu9^qR7!K_4}=YJKEpqL2Q5kQ3fYtZ38vz>1dM239kk7su&v zM%)sd$~kJzxd2)t-U15(30GS1yBOUi&mhO}0hiQJ0K!n z5OKU`#d-Y^mp(DXu-9;zkS>~kTFmQ4(b~MuxS|c0y9wI7{`m|Im>qRF)&zldcu%i+ z{Ybixd0i#l-@Lv!_P*xzIv6pl;A1&R4!-2Ysih{ohlwo;88VifmjnptHIq60c8{ zE9l{&I)6kfx*@785SON$7aAKPqck=&iPy2A8OD&R!}?ZWLybt44S${R$%en>N1k?9 zmDo_@Pr-&DjSY`;fgA5zfQ|vL>DX}bBC%okvpP1!sm_`#ttql$gvAFN;_jObkGIj- z&@fKNhDI37s?L!`A>M2Vv8ZhL^SDno6v?krEvzE3A>^oFLnVz3k8)`k4`p~?J50w0 zXBn|!aJ-HUslbN5$c7P*AsZI9^udPI`)0$Vtu;2(>!@SHL%op=&wW{e4ThE~8-6?H zlMQ|3CxzNome^o8BG_Qm*zhnHjPY41prhNXIyRiXKx}w1PRE8pz=q+-hF6*(8;(BZ zgAIf3n+*@Q(%1m!0hJB4dJ!8IR$#-87AhO|{^^qqElm;|YMCT9+&C=Q5UjDG4i~HO zP>=VsLv?I8>Lxby?5JZy8n7V~+0Z`%*-+aT8`AEZ4Rs8XIbGaT^~31v=t~=-BXUDX}5BgUW{G5m~rx%8~{J7m6`4QWz!diLy36&q~kND)rVcERDC|Kgh z=|h4aCXF9=x!j0XIzUI{D>{B`cM(6@$LjczC-^Z(;YWwY$d7SP`rt?2|AZe`pVIi@ zd`8EQQgP3>oo`_zi|lEn$Ra2febyWq)?|K#0krCIm0|Dwp)pL=*;ba>b-}39Q?LDv zZnxQ=w}5N8#U#$}WIz3*h#Y}~-AbsjPtOyx%^ zN;(Ft`BgCB=uI3p@SX#4V9ynum~rQ2l?fj?i3wHO>6lO;m{6!Np<1}igc;|F2?h7Z zgrA?(n6M>UW5SN-kqNElRbaxhW-1f1e)qwIPBIgk>6x(dpkTtG8^nY_g$X+@>x7K! z163wC7%{>4jE)J#f(g46CWJg9Goi#uOenrTChU4bW5N$lYfLCkK_;~SyaE%xYN|3} z;vpYQ7%012bPCcj;hO`33Hz@T6M_^b6kpPb7*__UOqhO-m|%#}F=3xz!eNC8femFQ z1PUhXyFVsudt76}`nDPqz8B$RKZbqHQRm}s6&BLDkEzTU^_!j+wYRj=a;-qL66U~C}*Tr`cAvK3iNe?uTjoBW!1jnUW1OeN77$cirOIE^u z5G1lx$ccceI#Y#h&E2XY)_Rb+B=HK|6=hyqkZ~h;U|L6_B`5PerivRY_h5TB#{I?(S zFZ+kz5Ax67@!x*PFZ2)pLCBwXTeWVB97-d03(Dmbrz47zzU4_Sm+O%0R~X))7=A;{ ztyz$>AKy`eGyfXb4p)I|i)*>7$hFk9!L`V>)|D?*y)mN7V5nkueeRm(nxpyqIyy&h z^R}Ps6W>d+@QhA&42fnl(K^a_^GHkKzF)z}Gx7j?=`_rd*vSTqfn}k=)L09~VeNxT zL(nPBMZ?=`aPu(=Z|saKOx#YJ37tJf_T{ayGUV8Wb=vD9}tokL@FcdlP{;4NnI#mxbbtFt5>oElf>F#^K?xU$Gv=;I5&j!}i8(FFX3k3&@J?)xwUXZdKmm{`b1U%#m#24M@1coE)y ztEnO^-~acBJdj$FSd7#r0a$|N-A>R7D^1mmB=g1JrQ$EhimE@jJ$A#-F#b7bAxOb3 za5?IdY;Q5~N=q;(%lWCLA-)h6-wk27WuIp^YPy9%;x?$_cp(&eq-ssIM;_-raw!zJ zJ)qd$H9WySG9o_vYC!I8bIz-wU>}lTW965u_D&|-fn-OUeM$BX)|eCKoR`eli-oQS zHU1}YX~o_VvtxL6Lc6z28LsRp)dDik@I;vX=9~yK5H=;$-YFE+pzjTW-}V+8E@KO} z{;0G7h*n$C+Gi_Tgi5WbRiPC|XhmJ~Jz7yiX+&)bv7*Wa1DY5kr0lvoE?(^{}4oZ1N6y*Mi2 z6526YDPh!?2vkb!U=7p~e?6cp5u}vZ$!>L3N^H@WpewEtTxt$?6&nFxwjS;-zN3zV zt)Oj~<>EEt|7^i==Aln!g9W>&y)#=Vlsx@_@Ah_6X|3~s@AkG(OI)d0u{F@%s%nY- zH7jxi+snGRJ2oJ3C02*}=HHKMiJ75(__s7k1lS?^ zw(KPOApQ*Oe~;7t*F(SmfvQ0<2>3c$Cp|nFs_f~Itw|4y?v|?CU%DBl_k;K(M=dWK z$=h&I;fUSS9FaEEBb^Bs`-*e1 z&2@N}(a&DqHo%uW!uNBCf~W51LAw1sglgpL<&gw5+Hdiy6WcIqtIsx^2=Ud1uY;vF zID);~V1hQ>H29Q9f~_%!%{k{0QwHyua#wBSCmtpZ)|hSPoZT?i+YN_yWL7glI}USk zwvgUX<+bKO=O}VXsli(=2?V*MEjEt}C4(x7_;b2(@JEPl9E^;Y#zDRq2SN852h+A{ z_JVfrmgfe8Jp#w=3W5EDQ{JvCN4hsyhxA&UgmjKTYP#p(tHa^u@jhF14*P6lvClqx zBG^}-%`-}UmTmOzvp|#~@A@2f)Ms^rv_8|`ztQ#Er9fT31?u|kPmDd1k*Djo_iAG# z#};SKVp}e3_Su$~jlSAqt0cAMtxDc)3C6Yr`jv;%2a+r-$@A%nICskU+zHNbin){C z1{~$Ic{46e?(a&_-y02LtS!QupTt5OWJaT|zaf5uuD_>?{tmuJf4@CjS!cGKK_2bd z>!Cp6N9{Y1eE81EsWp(K4kcp{$8b@rd&N% zvnTX;zi3Z*>u|gRC#fwm;Vl6lI2T`3{hPc`#kuD%s(4-1wDtV_QI6ATA5jLnW!L92At^3o5wcf z{Dxw0%Ed+nieeAQ#h#Ok)lo23y`f=jESEW`l==OpR_1PmRHjTp_uMrJ-S2X-W=gRq zZ)>1d%VlaS=z^|$#I116V`OKZ<8&%XcmE{I`<&`QLb7D8KgmcuCnn_o0IEP$zw3U^ z`I74%i|uLbR$6Suz9iP!^lG@qmZ2=vZM5;e`lzp;s!b6)Se}wc_V<71C!z`unUx`eaBCfpkaga}VN)?mzLm z6J2#zsirn5XsSCfxAv6!RGTbw>koAMWJP;X5ULpd3`0y7J*F?umuhO0=bGwH$-D2C z`c#|5OPHRQF|{L1V+hmEI31=Kz@(^6{(MY_>17pD8x<3tQV*5tQT-?@%nMOr6&pgR z`s-2cb(U&+lhJxq|J+efwbi3q%0^14tTL)7LiKq)M0K&F4%HAq^|U}0tVd;2Q9Z3k zmCp-ebHz2D1glc669jeBFs?*r*8ZdXX} z0O?Plmqctx9UA|!V1`aS#rNya>c-`$M|C}T>1M@o3G;e{@CB-zfcJPSYa`sCSn+lt zfSp{(#-7y;!nzvV5;pgyJP7ZK?y3oJIb{HQMJI&alVC4tufk^a&+10prpCI9v-q2( z+QnIu$?_zfmgPmbF%ts?Y0CrFT-%KoTBh z`G}f4oeM1xb%hVEITeHzTVj?fuq-<*#UU88l@GY@y*hZnR&Br)fIY^aJCK4xHj>^R zXSaSX#iugPi+9hz=LKBHT&3{T5&yXye(rT0!gbe6s;ne=a6aOF&rhW) z((|ne>1hz#!B@t43_fn%Ra{c`DlREba4mHnRMXa~KbOJBSL(;-ceM`aFHmL!c!*r? z8~`5>65Vyw*#W*M!^ew|u*cZ~zPD3csazX;`dfGYzSOV3wQF1Hzxr#3+@t=o`>0>C z(SQAs_fdb^J?cMkAN4!mqrPkFeYF1`^_Sg8{gMs$X#aiGpLUP>PssKC##;!Ya{sk> z3;mC_H1uQxz@S`;x8V8*rj9<|Ld@M#HQvH(d|L`_#9rA_iZ){J?=JPo?@3!Jer$?u zZ||PApHpnxlju=NHf6bLx(mSBFH1{3@T4RfG-nqF#4vnQ35`4dDuFzB1i6gWYa>jq zPq5`hh!uR>OzaV|2ut13(kt8?`L~DjrsyNhg>%u4BF%wiXFm~X?%j=GPv#`Etn*ge zaf~$QVW$mlHJH_*YQng*oE_yGLwt6nhyd?!a}7OuIq%7;Zi2tGiJ&3YJP%V^#1 zn-5`EWIkX(IyK^+!iNbPT51vZR6dlkBNQS54L$c(Rrw&^n+Vt5KqCg&s}lpp^8U*k zmRBME#$Sg)EBF`tE8MNb-!MI<#NYS;E>|)BMnZKh{zkJ1cZK*H5!J~;u^LD7ukkmU z?)E<)KigFLZ}BTEoMhG-Ut4Jqv6PgWwJ~0f8ovT4X&jA|ucs;#Y`_gEj9beno82|7HA&&38)W_!ZwO2}=Bmc}jv3zhZ`xpv143c&Ai~ zUolerR^nImr{8M)ie-iR_!X_H=;BuxmMQTot{v4Ki|2;=D!lZ!ce#NZY zrE>g=zt(%juNb40P~ul?S??9UB2_7&#IKmY-e>%Z>Fd4XSJYD~D)B3Zt*;or0`$vL z{EGPXUhymTDJ7Kn6_2d<8Nb4`-Yb5^r%FX7e#O~!Uhyk3loCq(itXzv#;-_K3Mug` z=CAV=zrwc8D}F_oQcsCr@tT5OiC=L|2_~Y%uSi^1F@D8@*I{xBUEN%Pm@hfuB)qvtxgl;Xx<~6%ns>ZLFv{v$a4-C=# z-uEvNe(!KUuNtz9tWzO=MR?nPjbE|$MyVRVqVihF&;7$-ouB)FC5oSW&%-)HmTR>u z`ni7-77P=YHlZIoMO(N%i9KYiKarY*0RTf_Z@MXDzigL}3a)}B}a{){YQWF&PqNt>zmK)}V+Cm9x znOlH*yJA#kduiHYtERb>8-k#@WbS5)yK{Z6;*LAtoO9-Ro_X%QApYO~`+eWh9lCK)S;+d~$n%eA>^l}FukmFap|D=cb6;ni4F7Ycysju%hensbB4e=|s`AG3A zK3SwL*YFNX4UGEC_9KYiCZ~?v= zzhdZBeO>>yL?@SLy!CZmZ6Ohid5>h-^qs|JT@MNOu&%p?m$k0L!Yj0{D-gdT!x_ot zMbi#0FZ$F`gI9cv{x9c+Hf=0=*%WgL-4`YF?13S{taC6Z=^B-Mfe|b|8}4TU;5j=g zkfM+#*iN%S7eJTh=x)0nYrAN*{euzc*@T~IHbkgVlQC%SDKOZ`uDzzN947ZP`ipvO zt*NoKOGXF9{nXm0?yZ6Ukb7%~eloNcVr;D%wbpsKpKEL5Jhql?Z0(xylHm|uGSnVB z%&oOX9$V{RY>gRP+fJ>8xVN_dyr#^}F*toZQ)j1QyqtMwO?=Nq#ZtLlU^Z0ari9qAIa zKiHUmbu>TbIrfWuO~LMV8u3tWzFlT{Qz*Z6v&{0!P+qg_?;YRs^2%lRzXi&lx>IKP zVkq}2yL}s!hn8JF8p;QiT^*R5u;P3g4)2aD; zW?=si4E~;1>C|_8gS)@y9m(JGjZIt%nOx12zvqV!sQ#V} zE;@z3=WdAL2>zbq$lvqZ8fE!=KJo#nz-rtSxfC|YqA>t_tgzBzMmd74p7<83%p6<2{qBf9GT} zEuHw>eVdl9Tm9d0#f%0&%<#D${4g8!{tB&mn=g0q!#vJjJs|8_4VJvOj2?`~WDmw+ zAu$|0mawJiZ!eHBS5^)sX%FYHI#}at(w3UrjxK5o{2goJWWR zLfPNQet#9CJV)?dIbMH*1v$e1@2U##Q~!8|x2HDN+W&Zlw}n>Y@Jk~aC~2h>fzrsRs3&lVL_(Eo2f`Tt$SP8-UdzMCie|H+-M z+^=>j`~MZP&dMUy}bHb=p_%bW5)6|0j1^yjSg1_Wvtnqbk_x`Y*`;uNXT$R#*1_%a#5A?nv|a z#$IV2W&gjt3i|(1r$N-|i*lz$8)W~#JJLLw_ZsI>_y3c7eTerOm>I>7PAE5Ig=)6) zhV#$oeClg?@c;9wD*OLcb#+-tR^25k=Kt5o_6c(G7k>2Mmvfvg-06v%-|;ta^ArBA z+}v08|MS4j(_T=0|6JlJfdA4c@?Y|m{Fn4N3KP49ezuk}Y)qL4c@}$XCeya@g-%@pp$T91Fk~sg@Whcqb{;tll$@lbE zoVn?)?BAn7oK@YUe`I^PzkPnLPMOK~^q-p1fczsHU7Sb$a^HEJtE$^Q&DCL}e`KE7 zb*=zgnY-?Kq&J$Y9=`fqdGwcS>MPAxWof=@(U-Dc>x@2_S*}qdg5~bF9%1RQ%@Zt3 zjsB4z`ntk`KE_pi%cMK-k0dw(B>#~(9J}i8L1PD_QrWLl@{h!x0u26<%TbFc=G$BL zk34O5^_NS&mlLk$AKA$31H{ok-+07Py{(>bwAbh#`G=1yjsj%=NRRV<+Up+ko$Dpd zcYwS;>C0L2e4nI!CSoqaQr$BwJ^%Cs%SCSkEc?A(VL^Y`PrS-HA@ZZ(c9Y3HJ`DMH zihZ&YjQF>*O?@TqicMfuQ?;M#U z^ZQA%Yh;FxtBYr{Cl_4d;@PNF^E(vu>L)kW#@N^_(O5va`(Xq3{Sf^-N8XkE9o_m( zk^L;!dAs_JW51Ql?f17^D72{ORo9&$>)I{aj~&Br>jT+(P4lx{z|Zq6^GlC@mN{?< zn8M2(kGT3*o@R;gKF-zu@idEs_vR9}_rdV~Syw;G)65^<`?>mKo@N)gr0J+}$L;+A zc;CX+zw$KO0Ph>Q=coJVeg3|^)8Jy5hF46Q``~t!PriEBP_4VM+Ih9wt~;WT1~oCi%>I;XK*yf9O0}-C52~oFq9VEu{2h~x{+Qh_m(!llr3$yF`eW|A=(bh7^bX%D zPP_X_Cc*pR?(f^f`$sU6Z~IC|@kIQ*zjPwrzErx0NIfr|{V#9wd=D{p`Mv!oKP$qX zF8Im*e@mr%h)Qx#woRVzA-oJddG?=dMLo@sd%Ceix`+7eoYd39T2C(ilk=9{+kdj~ z2zFIZ?rP2w=^`Rr?rM3y+Lep{WHUoop8Y2WQddhVNnJg*MDkNBa7tapYhAhcPj2}2 z-u{yp4`Wwxa#yQ4n17z|pJYb=$!Stg|Dpfn2=br&%iVu+q1}W3 zW z>^56CWd7q%S6*Z08XYp9m~C*#tT$VA$OJPA7BHI}GF7L_+puhYQP!!hnNE2AQu$d~ zs(i25m2Z?)%2%p8=1wTfP~KDBH8R?9uouOvxgf)%lV-5g#+-vxIvz^>p!5{jOWx7`T-N?L;15k7JS#;d1{gEH7-F$zN4&b%Y$9u^j^mwZa{ctTlK6J`gtHWMSqhl!o#VxSR6#!JD;$@$ zs&2}Q|aL3?C z0pBLw-iJ5SBt!VUd?x%ER;ta|#fwTA!Z8OtkQ|NW@d5mAiPD!u^$F_t1I3Giw?q%! zU>LBmI*y6^V8HKN!oTSmQT-|P`xfHGjJL##`tUudx-fDV`j@?>Bmc^775SUe2>ENj zmM)T$j|1}48polrn$V({bF2!rn~l+KQ=j~Xxt8bQWP0)vfi@kTGfpT7h!S@}8!4^Gtq zd*N>lgRNd8$evgz9UQk888A4*gct;Emt#Bpc?JG}6Psfn{8RR`(n zP8FnrR|%wbUrD#pLyHU`fsDgyt048d36pk9xZUCWk~a0;HmiI!I4W(Lq}Cmj=@8R01h;fn-GRxDlkIcM&9rj^=nA z{%irf<-;Fv^+8)>M|Jp98UECVKc!H56aHMiRqEnTFXu2d_{;fNb=p?ArGQ)ZK7Ne;&ezjc~1`M)nh-8GaINKfsy*O(3T z_WG1YF*E3uQDl_wk4W)Gj96w$naes|78M}d-M%*oEj@NP z)r?hXa)Q*p=m$`(xb}S}NKG;%xwCB0QQ^ByLWLhD&51ZL4N>vS2_q^Te`u&!H^w6> zCK$7W4m4&5b&Qlz;e)6!&yez$MP8Cnv2_xmqSJN>6;hJaZoeWbLOh|OydE>MMpUd_ zsiES%kseXe&4`LHBP!OuAfv($QE_m(lr%Nqyo8D`ClD&YK36(h6HbZ?B%I6_ zIQdS+$;BTKCtWQba5DdXaPr+M9VegVOE~!w^X5jRzD_v#*NBtp%Qc+z9p(`yuNd!y z`uG@dGJS}QlPZXl&$$%4uCl<%&a)CuhKY0Op-mD_+|s2U{vL5MKF|YBmfR0c=C0In zGAmEQi5*kpMhu)tI5}j*$xF*LoOFD_BTm{HaT09A$xDNUSXwnfO*#yU%^6$_T~|e* zWwk?yr=_fiI9(RxOGw!ukg{1t%I3vJ>GUJWKUGfp)Ffl(P>5HeqGB?J@VE3cXqvWB`Jlp%7(GhOYyOcasPnJq9pr;dTC2I0eX3~>~Qi4;U3bZ+z@tad~gnI)7 z^y&FG(zD1%)z~yp}Ogo_V#*@<*WjxhrLsdqH{Q%Vm}y<3~To z?Av9Q=R$e^TV<9nfO7NoGRvn!`9EdDHx$ZG-Y6S>C|^=``;S0*@tv~ahw=@2UeE_G z5J4_Ri5y@3EMmURJ#{Gn`9Rw|p7WlFyCi?TuaL0O}G ztE^HMD$A8Gl_fc@=i7MO?Ihv6*o2>N*Mjc=oblNodo+SSdXP?(#cU)5g~D)S^>e{( zu}a{~k$AIJJK><8?zR~Cu!&qx>R>n+*VI#atYwkv0(0eSsfOmhQpf^|oWicX2xG0m zvIt-+a1|DTn{<3eek3a>QlA6Z&6hwuQG06_Ul`APiys89@V911%sEhoZ5~IWY>^k! zE2&pZ-(E3EXtT#YdCRH!$Z;%xdYQ2Oq&@`JMe2UiOR!_tZo>PuX19;yqY&K(m({)e zzkW%4Fmmtp_1@86^fE47Iq;ph56NynZyjFqojpz32OQa;97(xt+OAz;ZekgWjIo{1 ziz&JF9x*8kUh`RCFMA069%|uRiC&*YNZUV5-HwyHJ^hZP9R&YQt=oV_#yHPvnCwir zFdAak{8!|h8Ef|4w^8M(X&Txb+wMyCfJALG7P?a#0RP3mDm@Ng=uWXP&Nq1t)cT2W zQtdW!Z7HH)53Rjgat+A=t~s>#uxop#zjCh)?cF`3wwM2vdykl(i`Q`cbz5tXPtcS# zI6=EkN)r?}N7B2qKcxv8`;|IDdIC4-`b3UQ7ePQ5k0M>v$G0keCHe>-i}X?Y2X^0E z?!F*fQpS&#yLT>7yRU7?A2*zL@95y8`!{8`|ArdAc|vOVrEE#dZjl>)Uu*aQ16);e zDoXD|#~?hR)NO{`?X}sG*8SrxQn&TBZfhCfnG1$euXxMw?E4)XenM{e^VyPuI9hHv zZ@$_v6zlM`eW#-EygM4<8A9DIJ1%wGc($Z4-m+QhHbLt))+FbJ%jX2;_|i*;rxG>% zyxj11yQCdXl^eeNrP^>m13Y8rR1}`v6oluU)!6NcV^X($?UJ_mMxoU0n_9QM4e(sa zhIM3;;b}t+zb!X>=WXduV!qt)V_L(JhW+)^?25v3aTLO{eie3GQ|@-g+tM9HQ@Pt8 zzc3~TP~i#57JO9ex&b-q~Ljfgto_N*!3|-ZocnyU1d__@?C?#6H@?HFShjK>wQ#ql`SC%Rpl|v$qY2GU8 zI?C-l(;QN{7d|$N!-*+kJ`>iPzfWMsY?G^aGa85b!SK#}Z<$PbY0^fHj z=liXrDgb{u-`kDfYxX70rh|P+3sev{X!tC-_Ev|ZEEt}rzwE?|@dltav|H?51FXY3 z`rCFiEy%d*mG)57X0VhsrFn;+gU@D;QJhl`*^wepgCN^%fdRbQa6Q>m0>d*q( z*RltOB(fu2@a+B9C_H;V{ioYa+2OCW)5x#S(ngx7oxLqamDN=rAsWG0Pj=Vu$IhT? z#``7pek}5!P(Ykv+h3rqC2l$1kBuMW8lwr6y%yH_W1|M5Gx$2{;h0qQ!%$E^lt#=S z5^B;^5Ez!K(l@#a;^tD=;7-HsTq!DgBX*8N@Vjp@sveFl&|qJY=nDH4qu$}5w*)&& z5U_izuvdCfx(SOqpn<<*D1qO3nWWne)-DHGkB^LS&oL9+!5-oMZm=ud)xXx^_SWI{ zBe)NYK)7RE;C9T{;9l3$74CnHroZ5Wronxon}FL#g}eG#>Dnu1zXtcdWP-cLuVvi- zeQ1PxpD)23<`M2CgIwXRvq*=#$`TFkzye}uXGRkI!x8?Yn_b}lQis2XEBtFr2KX14 zguaOalb`R3N~aH>*OX53U7mK61wut4dv%^s$8=)~#TbirQ7{#&F~<6%SP2|iz(eg(Q@i# zv_75`#*%i??iz+qU3OtNF;qdD@5At&=n$M27(xy77{>uklNKtE14jsseeLt?Z$0<#fe?$ zV9HR8fJ&yXH9O+p0zXr)MAD3SziQCS_#Ag?@$mB`e-}(@*LM_nY4Qfv=9$Y?ByhMq z>JvUl)jQL%6RVy7-9=}7Qj$Y=HIn;z2+`NRQ4qRKNV*3_*tT5$GRLF5FluW# z_OCm-#g`XfE?@vuYTsfaUtD1u0L$aT zKx>`3L!2}USkx9RzFb4RmNE~SR(^cBA)`fnxhd}&x4a%x?=QYwoAHMDa-m=7YW2tP z=EgO?T(*_s%k3SZ#+UoFH-LXe3omEqhZ<#%rmrf~o*C{F{uk_-#b&ma1I9M2!`&;G z?H@y?fp8v%4UDz`yI*M{7w;xT8Xu#Lk5=PjFnfCpZH008^d>&}q&>x-68RRT*6T0* zPL_VBgkKxLAFTH16amMiL}L&AjgQI3#}s_jo4`Soj24cZ4m2JOmI|M0=#r^sBENDH< z-nmxRhO}<>DZ!l3V(mRb!gqx`Y@16;IHma8c3JJdJFQU#={1!mB7d%lKL%!|adft| z`llC1r39p(#aBbU$n+iW*Jf}yq7jZlW`SeRir!5UY&TFYDgpX7npt1Py6Q`C+#*SAJC?5r} zyJ&i3er33;8Js5iVfa;E<;u$xiZzUN%{J~CtwxcU6x`i*o%e4Pk-}6FDNjwl(AoN4SfRg_4r^L=kyvmhK8g0Uf`=qMM?7TmP|W&L zmj3`3KiVG$ga1=tN@4FE4Do`)H>~zYu@M?@{z3&J+%GTlQp@=El*qPe<=&#)TPhD@ zKZ^3ze)yWVAG1mvGO(L_5@4U5UzT8_JVuc10C4Rk`$&TBTE@ z)C*Ser7C}+q|zyck2XxtI|SGr=}G_Jn+rc*kZCt;TF17@n$LzA8@$p2GB%f92+Z}% zU|wndKz?fni#l@rTfPdEJ1E&_VdFujCaz)$+Bv(uxocI1DD<_q1_MyztCb z?{5Sol085_qFH77VPz)zk;qCghS{Y4>^%KQW~b;!3j3FSqz-WG+9{vU0#|ftBFnp0 zdzUbm=SY|5XqRWJ%X6a3bAOlTWS8d@m*-SzdUMqIe-Y+?xsc~ReDl93&vkuMmgm~N z`TqlXZsjCbdG6~;|6O_R^RZz6zf8z;XSTS@bCbq`JU4k6QF!`fNuKl1a+T+%qI0)I~;*m+foTY+WXROTa>g|Sa~83`U_%XuCfC+TfUTU~nl>J5z~HnE7e zWa-Tz_|`iS!c&OzRFK|Y&o!Gsnp35>Vpa|9@6MzB-4C?GLgb>pV}yTSzCn8HX_Vet zk@WV+)8$BSyuIu+U3&YVohrR$OgBnzRXc}@q>M*#_RpeOU`bih+uSrU`EBRuXa3Mn z%8=f!brx41MM9v$B9v~LJ*^gz;6?&9IQW=Ypj?(LBt9$#fs9><62&C2QOj724uyY5 zY0{c&h6j)G+Vps*<_!p&Qh46I<+W-_?($kxyezMwziI+eby1)Dkk>Xw;hG*BgYsJQ zk)GtWhCdtSwV#JmN6(PFR@9+=ts zT;;V#H){N-xGQy1w|DvS+WxuaE_FSQm*Afeb zyw;^q$ZO9O3VAJ}P{?b|3srgT(Lz~XQ}$>>wGAb7(82kz&3q>+=wty+ zum6BSYR1z`g9-SDdb#G?6>|ccGbA45n@kPUr=lL8Hln$0LQQs#F!K)_ z@=Jjh{$CC7F>W^lwxvRLWxA>$+|?u06l>=@tJ%^Ueg(5xcpo}v1H6YS=Szx1BrpK`nW-Q) z#LvXGBqN9%pm!nwpfLU`q89?mx(`7s5!NV+K)f>vo?)$a8cXci5APBHSbyp}-sZ6T z$Mj*nl4#LQdy{vPW&tK_$DN;_6KUu{2Iec#gSM0khVqebS?ny0o;B7Yrr)?~kPK}hUBgc|H_W3ixFIg1RXK&q7{?O*vKVN*n%zHexC>dnGBi1+ne>SbqJ(=PPd3~f~fAzE>NU~NScHT5PA%!DS= zKV}`kW*(Rk-!o6KzrnM{UMmDF8?4z~E!J$`Ty#WGn#<>(NX{mB?|t~xbLl-N6@>); zl^w62_-Dgj=4^9Joc!h88tOOHlwup2Y zRd0}*)}Z{CvDJ&^z9+_KpJ-*iQS{I~>tup0#hM;Sy8)~i?9sp@0USpw03(OX^Wle- zHT*MJZn&P+~Le&@{*@HEjZs3QS?6vPJ__Mm}$*vXhk)4ZUs3U9JIyvF^pF?`l^ z5y=4nLlriFGr{Q0bLrK!?V9Km1cjnlCx(wbiBEsW;zk5g&b)cJNo}**ePEFG=v4Z; z^r*4F6$5yGs~3`RLH#LhsK3TmdxJAcFmfMj_QZ*7A;^4%J~XFdB#0j_mGl$i*oIH> z`Z%i7IF{2mN)uC+#V-4a?w@f*-I~FqssRivcp)T!;u}Sby?F@i7{PXLE~P`TXx|GN z-d^@jDZEqPC^k7<&a!B<6pHc10jC&vBR_Wrt^h$LyM6Q=Fh89Y8xqKJFw=7TmiUI; z$|gff=1D0&c%MSCN=7d}@_xlPspd%nvEdVB0UurgaoE*f#{ug^{2e2xgHh zNG|FRXT$!?Hk3|{R(u3@U!ND&M}>MZyY)5>!t$-32^}!m&EKFp*tPJ+5@S|@ybt;R z&Z5pC!FG*B0*iq&oYfAF*^_{e?Z6vGgi>$Y36I5Z6RD*?KQ?4Bqihu#dA&t;(f+PG%bt0^=?qeysM^ zA&4V@yv7%llaj%i|GCE^_Y zfG`$Avu&a`JdBsHxE6Fix$`7^*auR^_TgU}$cs9qyr^qe7&^FSGWuJa2rrRTy2@Dk zxhM_8bLJF1?%|8@wu$C%5SZEKj%uvjT$uSZk?nt;rZEtmX9e9c1d3buwA0lNiTsLu zLmY1kqoS~pIno!e@-Hx1Ee_q?p6FR9?cHPBnF}MJWZ#AX+owJ$* zo`!KwtPNDCoYsErLbN;P=(>YJ`~&5C<)R3(*JCvWhv~dpQ`(8O-x~XhrOeqFAP*D= zyW!71P5))POIzU8q~0;MJ$wta@-6To&Nf(sFOc&MPK1qkkO|mcU}hw02#R9XYpnhB z+sJ8F#`9y5J&6k$twYF#)j-g~H@A=K+Iql9r(5_VWPXPoH+I(W5DTglaU(G_gF7dx zxvcidU;#J_)Q#`YAnGJ~PSL5n2X>2ZTj_6uyK`=%i4XgTc&#pK9Df77=5kJ`Y{ou3 z&i4W+f6qhyOa9*RSSis_TsS1B-pOYY{IC2$GJkg^k%K>*$$uHf^~}@6*(-HYG3?by*J3epSqvttl2ZcX|qekA(4MR2R?uIQ&L*KK8qGhF50c~qsy6ietPNjzL4cP?T5wCB?e0L{1`B- zR{$OZvTOZqjoOKnnLf->nb*kyil~d0prCidohUZyLSW`^V$%!~X?+E$KA=^_T0ISi zpJ82jH+}xJ@IC@Ff4~9olLnW(=&)q1c2ox2|~GNo)2hKp%Uk5wtzo#2)#Tri1pP zHf8NaUE4TaT~KK+a`hVu=dy#6@4nwW_$2Tx!+rxXOtt;yk!3Es%z+4+*7?skOO5$f zOL~*e*gD+_z}h~T$Qxq)Q4Mc?FiBJC@m(kg1+FZJ*vI@LaAP7FEGq?GU1^Q4BI#8! zyjsu~UnSD3{_tu}Ul75@rGkld2@C50Ph%%ya5L7c1@<~17WIj5_5?u~36xFzkneL@ z6EO`?qh*{22@7?8gemNlOj1{|ty4<8t$qk=`y~kVz9FjKTFn!HVKS!8nrlKYLu{=e z+5+q1U^CQW=kT9L2H?;6>}w1ORIO6?P?MzB{tdo@qfJ8gL>uTTF;G&p+v1k+I;WrGb@;qa z#F)dD6r+|sB|+1&FX1EEfHyA3gqD4S7|CX#WuH|VF|n7VWiMp8X-@4n@HY%rXh_!~ zH0^EUNs=Ab4r=`Ik%{gw^E=aikogA|cjxkSJVYO|uf>Vpi}+iMbg+efBbj{O5`QBV zy~}?qpYg_&b-XVnAO38GKfB=1L0S*4^qK&px)pER8^Z~gsFr<43BgDA@<6Xh(EVD; z^opIwwvy=;$9A!|Os_cfBlIdY{F+3>ueSrT9X65TQhfRZcD{(NSvDo;WSct|OT4>; zBCR6P#@fcEB-q9#qnH=O<`6F~(vA0w^qPQr>&T{|rkH8jf^?BkBRFBi6vSDGT1!TN zw@v&0U1e%TGELXWG(luIpD2j6#7Lb)sb5aP;YCZsGf*iF@4={0m0sKQ z1A0v-avchz;{8b^8@ItouY5??-05^@PXnDk_?k|q)uxn1r|)+rI{hO`qSFFaKbC}w ze^=?miSoH1&gLU^;tU?C6X%s?_#4TG@!!g)K$L4e5voxiWj7z=!zWb(&?1*P+W*2Q zhW+{;azu*j^7Xfp1JQRKwIQFw4BG+ z&$fq}J`~ytURdw|+18ppA&AQik<3(6JP+iI310jK!ME)ZK~JKe&Ij}S41PK>FFH%b zMf;KU=%VoD=Q2mFt8-L8RVxdHa{T*dn!;AoW3?rWKlu&kn$MJKt^~J!Af{-43NYq| z571s+w{m>kLjU##?K-LWXu>|qK&?|Xt?e_>hzUYW6BgOdfS4w%BvM686OM;OcBTeB zqn-=iIFg^gpGke3I|0%C;ORlioIfw=4L#2XN*ihUVB@$0^-6RN`w6G*fA{GH#XzW`4?F zUdS+csplcQ@wy`}f$XWi?1>>XdBeCYpZ(%aOFW2qa8o|a8ekn34Y2*0kllJ?_o&lp z@d>ue)XsV^lwecPUn0rGv2K6O-^RtSRDXN*j9jmb8z@s&;u3u?3ztec{crN0l?W~h z*E#&@8&tgV8RlDDotl7_BWe7^JN7!@qy`Abtlwgy(Ur}CtQCLd5KF+rQ65{KMe_B( z4`32|6U(dZEM+Z4={!;Tb8CaGozMrwlRO<`+ly*&zK8qS(n9K^rjXDOyVDX&3P6AM zeP8III@~x8k7>BNGrrxmGISL z$bX72J_71S9fRl&$1?2M0ILrMw+Y!7KWr~w2MO8DcgA~N?H+Y1t$Tt^(Q!cIC>Z>o zjw1%Qq9`D5KfXrzUep3|s||~Vp>_3F1$(R4=9oboj~gu%V@CI<8rF}mpDq@jQY}!l!hIAgkv5Ki{2JuRLp% zlGZ`JUQ+xM?9ICK9va09VAEQ=qUdN^1CU7HZVJOXoc5UgGv#D$_d0lv5DfNqnR{lt0+$nr{_rVoXDR^ztS7*C;4__g0o}-xv}waO=W}X zIZKh`;8H$uAV0^{wA#D*L+(ARzpIX*w}n$$yv;X+eDHAHus`}sEmY?%C~E-uC#yU0 z>M0{7z>7VVNi*`7{PIyT`nRXkXuk@h=QqUjdtq?jCiZ{Q5&3ll$z|9Pe#mA%Z#zq~ z4o#fE+q2jc1DYlJN9~?E+HQgI_Jv)7@11~r!xs*>Y$8XI@`Jv=Yw$c3qr>y0O@k+>9C(5Vp4u8bLH{v4LHB~kLhuB+!t-4} z9Ug0Tm*703zbe5tAezHwy9}W9pM{{MVLY*CpiM3kbhX$!`UbA6RfVsrraPnZrY1r0 zo%Rqs9PU=rM*yV|{2c?=B~}IaZN(V{Ub$x>WQe~TzKT_=^&aIPZLnj$0{M`E4ebis;LTyj) z=VxV04)L>V$j@-EkPT^`>c9oKr)R>d?i&=(B_)n^`GwSxvcMU?zzY?+A_3hC z7zeQ?02d2}BWDD3v0h%WHV0tvOtgPHZ)iR?`z0^VXuPy;Vxt^^b8G;v7mKl-oA%~L z&{X)?E$Qz7DxY`j?CM0hGaZk-r&!xjeY%t!O)l2(7?=flf*k$$pOHB-em_>0#f6_E zIs^=cpA*}$gpE|kS^h?+PsGQ!p77CYVny*0l%4Js1L%-Z5_K_f&Q!vPgpM3Q#{jp! zPEV*HI^H$l!3ua7QfkN_BH`mB<=31zo0Ig4N>8Cz^+ECuobit*pa;nVIT~v#m4QB{ z0UeW(&!10m@{DbIj`e@q^BQJ>b3PYaM+8-|v5Zq<)p+f+`gF7eu88&uT*w078jkm7 zG&T?PvT3|LE*U|`Vr|!T1UX(PRqw|nJkIdJ;2>S=I5xv8fAs8PvTN{V#O zs%n8Ce^NP)_W0q~$R7V3E#7Rf9m54YzAe~)p%T24;6hourgn3z0Ggxyo>a9T2$88O z%4C6=SvYl_kfk6g+5S!dMnJj0@VXSwp)cUFt%*0)^v{^6y^~W3K?ks|tyu5@F2iyj zP@}i7v+GnAPrIEqP4IxgIpZ+b$Z4iL%Y_0`$dAQWrL0L6E@!=5O8H>yor2=PukRcO zGe`r;>R5)G%01u-x(|4QT;Yl7rNUDdPxAy%J$HEeSC-%b{RQg!^I#)I9ke~s!aL<# zsU`QcPxvmrkFIDZ$PH)Thji>b+x|$-o-4__nH@3^5 z;)YX>4X)tcL}D^eZU{=bi=4!2MuEy|JeOl$4+4!%ysh&EUSUrQP-?|+qKE-2)3wd< zF_<|~Q5qW(1d)JzLzLEHKaI;gm(~jiyV)3LsjUE1PJd&7oz@{47rgkAoyEUlgE_~C z*&}n6oTL21s7;ff1SDR5gnx(Tdk+HR$lAc=z4XOsz+fvW0KMniRyqDcm=^^d!NDyB??G(0Dcqx{Iw@^W3 zPy*M_l0ivR2myRfsVwr7>3|$SKmxOGm`IJbG*}%=;RpmKZ5Lo=JLUsaV@uES4Pn>$ zsd!qu5Rj;dC^Z5TenFV?s=N0^=vLpmCZjKbC3@CaT%D@P z?ATYOnS^PC@O<4~LrUVeDiduplS~Pa`%f z14q^aMh1>Ttgh#gC2J#_M|KFphJIFxjJQEM;$oroF}(CrprsGoShlRaCf#fboUsZi z%slleq>3Ouqay>GY~;24*$@7>VY{H%lmARi9lqOqPQ{+=FCO9Ln2%8q*0E7E4{5{rI zo!R|!i28zo`urv8^B2@tXOxP`*@ML#=d&0!g$|z$ZT=4y3hB>e1Ulpf*bq&C7MAt`w0?s7$wp-Yd7S7WC&+A?Vq!4$ZUq>yD ziP<`a7LOzh-Iz;s{qab`T*cRMJl~kNw!%<)oCL$|h_>0w zDv3oqKl>hND;lAqEoqR3wkjiKv~|$Y7K-r|MiAQSvbX&4GU5GN(Emn`5w^3ov(yzA za{Q~BkRw&c!-5fnhl}qM9^M^6czFF`10Fosr^DsIp)f9*9^q#icEgY6FFcgy@8bqe z;R1BlYCAGu5a&M*bD-*v=;D7c7n=DHn)%gF^*>nUL;eRBe5v6BWQJab|G~{3hIm)h zYCPaucxitpl#^WcA`G(*)@EVsGM;42?W%=R zv?sX19;vNLc3O{Rh?Z4jiGpScP39!?gxA*sDBYKgMX{2@7?wHlV(D5qB zUjTK`VDe-r1|fp^sO(GHte7rN$@nGnePfcQsZ}JaN6OhGm0GKi4dqM+$Z1np@Chy;RVKUG zL~s+L`!h5>js@$|SV#aD8E8vrQqcM+_! zMYfLY+O0eS&`XT5G1J=uQ^?Lm}t098nyw}HcWqaAT+6b-(5j7C0}OBEb^GcouB z+L&yv*gt@Se@$S2r&e*g5&K_Z>L$wV!G&0VYg8t#sI+R(bsnGi3|LUm#z$HkbB%4h zVTR)ntyim^RwOP|NP?SVCNXX^BsK*nUyd2a1OsMZ72|@oQQubk0JL+6=uWdXtWQV) zd>Z76EzU2V&{D7Lze~6Y?C6xO$RkBO*FZuH7*S`2_|mqSNL8LRhJ5YnM;zAgI5&Y{YEl*%)_ekIvdKuA$=D7W88#K89U4QUO`)Om@^Kk$N?_(QA{$OJ zRq1ZbmGdf+rw{DM6DdDqY0gI`O8t@wIT6RZ>|Q14KLiVC8V*?9xz36)_w0pZP8&gE z&Ur=~bNU?`^H0%4ebY38=;ZA}ebbQonhRHkRFUP!=*sY!$dEPBV`-XM!1W{LvJ#-> zh#g`Ut+74nZqSv2-DWnW$udGmrZngQ@#K{k`*F-z?K=LEy_h>>UJS)75|}p1XY;2?i|^ig7|s+tV;Nf0L&nbUM#a_ zP}9@kyS4D$MMuk0t#~wl?RW%KT@MnNs0>pn$dShzQhoym4I&N4**jD#Rn&sz=@=>U zTft&>MBWxV2;?adqxTVmxRu3wJ3!t$=!&B_a9QCRz~$$dfoYWy_U&1qdR2BS`)~z0 z@t3_({zE-q1kF&xZo1R zygts-@BGucLY71eZ}5x8yusXOR6QMQ+y`6~&ZQygJQt7Q3Py-n?|+Io6q3b6EC|^V z?{X01>@DN?ch5m13;0PiHi`vi;!)Ig9Fw&avri(Rxpj!#z_`{SjyFpsc_9Y;SX)?3 zCUEU~);v!c!<%yB}vP5Nv63w8EUUSPQ;oKf$~8tTULcJmHUHF6qacSh(0WS_)K3Ajcc z##6*B4-#!f;&>*>F^xvRa1Q0b{e{`f|_x9 zR}V3((Mw^Ev`_H0`tV)z(LQkTmsVXh9+T}I_u-}75fN%`7GCp=C4WBL|B4fAr`WUJ zL{9N_X&PUxLV8fe#lGG4i0l0QRgYtF*D#tPaPzN@f&YT7g`F&7lN;c;R0r;VaDJW| zD(2^imxuYGnVAG_PQf-??5`!Y?IxJ3AtBu-WuG<+k==cJQL% zLjtc>)NKP5f%$Q5xWlXjcbI8aG^+?VrF6m_WM^tAZPG&~(+m{*yTwP*ePOPuLj`BJ z?l9Cu8fpy~s=dYYkHH%DNwBB$U2{rs9G{j>G4}Bxuv^V5RZ7Em#n|#=N=o7}K6OHN zyPfg&r{bfoffeNiJ)TJ0k^X6q#>0(M8*9{s^kTShG#Yq_I3ooXXt{nmZsy?8!G+nU zlufF=8y`mZwoj#Ph`~VF={>=JsTu`42(nVH)*{xUrF`>L6E=Z&Fu9jaT+A8#zxi?1 z@sjEXCqVp81##J30MVA~0mAeLmFb#2E<%*_~N`EK5ZXU(ES$x z8`6+7{2aNjNp7;GrxJw@L7cZ zStCBB7BQuHMt(%+KQ4VJi(Co!{hLU*+K2i+vfvF`iA%c>6*sNK_x_`>lQ>4^$hnPR zjm@nK_aAsW-{69Ud@LZZn{MMF=nK4nPqNQLoM<;-kM`w6^qRm;F^f2(kd-V`!nkm| zOV5wg%p|~0ur))-@gVdtQq_Y3TI0EO^$msYg*wy9mPcaJBSD^F^RFu47n3<2Ng&B2 z%vxj)LSyO|CZ-VvR){jtdG;P(gJ@nQg8aSJnb3CA7iCL0Ev!d{Ofl>EI&e?Cz2}W6 zPNfJK`zfG%z~xmfF@!(+jEE`1A2~>yIywhwHJEmNqdYjU22E0?ui!^$II~@ZaUpM8 zm?vj#5X0fTadwc{=OH>&3W`FLEU{dyqWDQ@Vt3qjo-U`(MY+aP?~}wE6}#|1lik+W5NO&-e}}xs1;kzvdceJnY6m4-Ha)u>pe|&4$X? zZ#k~>5rCv^ZiJ-W{+n9*e0(*~(|l|Tr1`kwP4l74Ya7vL!F(tXTN)^})PJC>ls`kX z^0T)qe>LF0E^maRKS%&b@p^NT^$8I8pV`V;9{vGS+iG%5{WZX2Lohau_5l*!=DD|}u|ZDA)7PqkAp{9Dkei53(wdr}z4Vrl8L>i1Nm8M|#V z<|pFKKFj+u%3DKtx9o-I5idbTd5ijk0G5W=!Qyq8XX(0cHEc`PaxJ@}kc{?pHJQLs ze(N$o$Zrj=E2SReL9DF-`A;CJLIywZ4hZ~UgE3y^=TJWXIh4PGJjAz{4CT}4`(O{> z4}$V!`aamh_wAuP`Z?OFQJkA2O*vuwkRDGp1+Lq=>sFIL?aBQ$ztPivTzMy z#AY_5i8NVJb+yR~E@!eJt_K_RygXS_yqZVFWCgQ-BB^io2!+=$&XFwtatM{p0kX6NOzcOCDKYdrBA8}*Fo3zgK zV}PT|Ii=Kn{a1tapCl@GX(;xK9sejU{)n#o>%WM3^Ck!Guj8xfT<*0bPyF&Tf7&UIPJ}imscpV?k>&tMuHc4fA0mR?G*y^N%}+8zc~onuZQhV z<~+B-lEWP7wn0JmE*1!WkLq7*c0UW6XSd-8Wz`AW??T2{ix(#o{d^7jFrQF8tfM32 zhC=r45#jtjOXH8q8i;pkIR8|I^G|O9VJg^m+nd4s3yc z<`CGEz`4pFEQKp0#6i|5CB1FNS-#Q|cKR#Tgq@Sc8nrt;nJ)G>rxz;^3jSWiHk*Y& z$1#{yn%*3|1<&waIe3xkolx@-*g*N}bIFItIjV$ig`atLE9(i)#W!1;=tNYEQqy$K z9CKpqz9D!ZjKf1h?M$d-kBIOAMIx-_)j@cmC}v*;gQ0z`5WdAd2wR*wiU2<03E9aO zhYu;lJ3&Y zn%yNR&xIZh@(+@Wc|seB)pTnRq{I~}?gPMlCIU}_^x|^wzFndb0*rP4Rus;0#wP>K9hJ4QK zR!%>O{#jenLag?OtWgKjAI@+9?fmJlRL;RydFfoT+{o$X&-7y4Oa}rl!q7|`)%;x? zj%i@xW#?d`4ue~aI*WEOir4q;Ewcv*np z9=VXw)GNK73R!DtfbMxF~Zo#qkVIgthP7cb{ z@LjRCqa_!)Tn)KSvYYQjt#edSxKN+(tKq%ItwmoZ2>AuciAfzOTE}m*yF?d%p zXQL?r3ATwG8T|i2(bzdCBf6Fs`A7(V#VIHq-{zd&Q3nWo{e*@Y1zv1xG@xd15Ol;L z=OBON0c1`Dd_Et<@Ree{qe}~zb&cTfV%sMBrz^2-Qv%XYQ7|*k|8BQ5vDv&oBCo6k z7(Ftg)$NuD#A`5;&-pubiLJr%77yIUS**9$b&0`5Wv&0?}LEX_eWWw&raI! z@l_nj2|Lq^Ne+mS<$%_@9FT+l6?argEKf_OL_0BW=?FHEzMcaTRwdLR5Tst<{7#hz zMvy!ZPz8lo5T??F|2K8v|1TfqB>(LB^7y|GnrgTnDL59-Hr7~wX>X17w?1xU z{dSt){-$n9M~LqqF2YS|#YH#1f2($d`2J@_D&K$OoPqC8mihkOmP8Si zIOuwQE)V?vB`!v=)GivoH~;OC-w$@@_uX`U-_M2Lcd0nP5BuNb_mTW;R1tn}J%W?+ z$OSikKeCo5et*))@BjXPpWpW|^7{_u^7}ZA-~08b7{6Dh=cs(XmcqGfLy6Cyh;-%i z^ULP*N~S&^8lQj3mCp~P4LA2+PK%4qYJ7e%@%iunB|iT)FL8V=@%en>^Kbu)vp4L# zCqDo60~O%&lO#Uh4hHe?*?aK$yAF3g|2D;nWAB|+^>ZqJ_Xh!{YOKcJ=WqWX@%N7p z$^3nsL*?(&`Fl3p;fcS`0O`fnN$_`5(f>F6{ky9bTtel3hQe^LOKYNS&K4P1*H7^*Y3Ab)-uXrZjSvM&+f| zRc}bZgUxX|SKXh*6z5b_Ul0&W`ho+f&->;^OG#dc-YVpU4`V#a3rCv}rLMX{^1{(G zp5%pIyiJxAL-NApfC}gf`Ug~0U+~|R7ZNZ3x8#LqI6B!Qr^}NUcE^?>FZ|w6lNbK# zrpXJw{}|K^h! z`x1_z=nk5^uy^zSA$h_7V#VZzpnW(g7tgrK3vB}aPst1WFQjhzAIS@q6BbWD{OE}rGxv_9rZUg!%Wc&@FG7s7o1-?=}S zbxxBH{+ss)qmLW!4`PmbxIc(Jj#P2=teZUXf`7&C54?{{_XmfI?&tns$WfFlHXNh- zgZV}7_XkG#0?v;lUo4Lj@B373ERB z$PpG-{hcIVOe^vvUtHqHEp|1MaR^^Q2 z|CW6pF+P?k6M%LD%~T!~TysaLg@E(*Cc=`@iL=y8l0E-2c&Xsyt7Y&ZmhZ zynImDOO5!Qv$|6`It((&(N@^^$H;poS?pnKN>w3>G}@z-4nPYb$M3(p-KS{$ zaUL}DaVxw-UXr4|-Nf;t7S?Vdaif->J&+oP;X?{23{El>J^UGcc_hb(=`y|cW^8Jd| zo@D>YzYkn-h&2uuD4)DfMftcu@v6!Wh0+JZYmWNo16}POh46WhwN$fC?+X)Px8Utz zMraIj8CpxcUa?(!4I&|sMa^1hc`UVO)7zV&ws&~1p}h$4dZdT;B3#>x(%WmJwwG;a zuc(T6UB|t>yeh8kInHS9oemWrwl}obp;SzE!8W({9xGK`+WS~8s@u6ZS=kHM`cSTL{s>L?rcRM=H<$7b(a564|HiJFU~> zu9lwY@%AyI$B@0A=yBd@SpO}ZrAB+?GXa{twS=$Hr!{Ga>iy?(1Zin0D;z5X{I>R;NZoi8=~jOU-Q*IPJ^ zn<1;A`}?`fKh%$J;fl|dyA(tGt8(UdAQF%H&RU$`YbW*jz0};({MJ88^BcR{)BLXB z-?P=tUB|OO($oCfPU`EwxjTM({po_w=k)r0J=FiIwaa`p)$2F*Q2$Z`m-;tOX!Wl( zbFcqsW0(3{^!f!J>c4m0eSYVGbntOAm-#(#NGYx8di;^HhPBvE{QrbLUmcryny(j+ z(0tAPTM_=4#`d-Bgu)Nu3O_Bg63p>5DTSZ*12YexkT@yT6qvakj&I8_Z%^#Q&Qklb z&v3+(QdtB(Qo@``DQsRGJT6yDXU0jT(JZguYx#OBF;~zFmT{l1)&^RPw~cTpBTn&=8>85CH`-My+yNa zEy2lkc&HrRrWnHFKLYBV?Anh#WtIZWp(BqCu7?zfNrpI+ z9CQ$=A|=)y9BVtx7GSKbNvZJrgJ{DR_szeCE$+jA4O^W5ZAIS1ZlIZs`Mu-Ry1fbC z3r=;Vw)xM0=w~!^bInS>AraS$pwFh$M|Ai#+VV_n+X~oa8lBsTjYVVNtl_-o@MVUr zt+p{B?@h6_snz*L2E$_wR~WupZ(ME*#8>*p*SDRt72@U?+m1GYE9(?}OFXlVymO>H zFr2=Z?j^NrQ!WTNn%q_6L`Qtg-?Liq^7;b>Q?#i*F(QvNQKpT4X40xf=qK#Af*Q53P>?B4dLW9`**uRk1K*t9Sv>c*4? zwr67OrWm`$9u99eHr*JtZ)#AJ<}A&)t} zZ79R7s++)kt$+cF#Sxgf+DIE;@W;$Uftg<+)*Fo7g#2q;69fMOc4#}o27~2bcI~52 z$c0CMg~jp`BMSp3_Lo=bEG#f{ma*ekaA|AA*VR}W3SrX^xj@VLNp|~&wn`#MNNI!- z)FC3Fuz!p#AAGF>Gb8j^?9k{#UJz;iWMJk}NL6l+n39jcKJEr=g6$f6^)>=~xv3lw z_8I`&@3tpkr>~TO-ECY;8%z?gX%C|AI{dDh&i-+gkY#>-kqb7CYIn<|-@kb|Oq_#P zada%RUicyQEwr@sE^&UhIA=B}9anZgqoKS&d@a3y7Tz~0)pEX%ZcEzmp>1g$T`WK+ zA4O4)C?&4(ACN1BpA+im9-Q?-K6p%<4k?U6f?3C4RmfTe+dk`9)rs-r@ePcT?ZiE& zcVzgMaQ^QDR(mgtHEUOTkkVS>hqk}@dw>2ut$N#zK~sv=T9^1YSzFR7w~YyU)7NT$ zJvjUtdk2o${J6dUrcw%#`5}-R#M`kJ#)bq#YmNAS8zBB{L2O8~Y4TWNJ&&c95~lj) z-p4rnYO0w4wx5IT-o#toWreH^r7@+6DbR0%eF?@>w3RT&36#J1uzXnyF6r|T`*ydn z1lx@S+i_kY!N&InTLHUhraPeLo>X<96q<+FB*m<>q}Ac1oUzG^b>irD%(?3!F5Yvi z`TlqiX1H{fyIvHW{PAW-=s<2&A!<00uStmqT2c7^$SAQ~p*86<<+!JKAy-sE211NA z0Mh_YCdsT`LxQSinAi(CrLa*U>hDxm?+o;NdKU6eAkViC2u{T@EZAV(Ux*EgFrCcT zuyl9(;(;lJADG7ZYGPSPzNpsqJ`gxpO`4R!?MBk~SomcMIDDQN@P!39-1wGCd6- zci9VrIS)8*{<8tpO~#0%--~#qi5^Rb`wEHX+if_WXd2Ha8SdkWD0e(7_Xx2A4rQPG zWEjy_W1mZmBg!_GzQ!L3gUin;r5gS$>;p_q#(!ZcCxnUYJ!6e=Y7Gw2M5`@h8g9_$ z)?Ba>q3JB_l|?AIg`x6x(nRsTK6?rb?6TW?D z&s`N2^F_H9mKvlKq!bkBu3=$mVQPQPXQ@fK6s4vHo2=_9mYS9&W|qAz^ZiJCfcBEi z@|mwxX1OYA3cg^!Ip@s1duMm)|L^<0e!pbzow;Yu%$zx|Idf(x%RV4=YK@#A^}P_G zDQ*d+?>OnyfeXl88vzYSI>!E9rs$sAuevzti7TLo-}y$f5Pu8BGD0PJOE3rsw?1!j<)gJ24dPXy-@SbH4SUNsG;7e1(9 z1M!0j`e0KB;^JI#au(*w$zU@-R>Yh0ygueOhu0H722PhW0>?V6?V+yfmCdP^OoR9_ z27aWw;0kI^5!B_4isH37i|CSO{-pv=`P{P+HsF9K@x}B&&E>30c4;L&c@6O2ws&9j-(C^X*kZ^9BwLl-KKpDIoHl_K@?W zzQ;>F_llg3L-qQ`bSP=fdLWhL2-uBnoH!ucBlwsmS-G;nnyjTfK-Xe?lCf`FpJX&1_mhlSzXnLg z>Q5wwQX@;o6aPgrwr84ToVQ<1(QFbnirbZYO-EO%BAT^*`eC z{?9teIPGHzqZ4wQ#WF_A?G2zN<>cF4Y=r-tvUbl4P7_k|kr7NhcY9YvU&wA2$U^#s^J0$@pO#f617& zB&cK@xCA9*9~|qjI=}s|l5y!NSu+0m!@rV@+uj$_Xy8SkWbBLM6ZXM|ew1N$yjug81buL1V~1o{SfE%?7psv94SA{+%F_K*+rI<6TblKR+U!4 z^0oJa8r9cpm1l8Kes}HivI&%D)-De(e$LBpslEJHDDS1o%VeLtJSL9FOjxVQ%b)I& z|g!B{@r&ZX#ea@p>NHhZ`meM4wn+G1BF=bCfw+#>t?Ud_1)|i zyqj%c-l(5z48DGz&*n?ziq_QzEhx6`b{pOdoo>81V4c-0-FZbvs%v!$3hQth^<5#H}W zxk0N~_h`rqDvC{xBwh&p^xQ7;k*f6?%JuH75%pTs1hf|?x3>ln)+V9bw;ank)q+P= zu^xBOg8T7X^tSu^d;IuAmmQox#5Pp+#i(1%H@E zdr!c3fkh0ni2crw16YJl-q?TPc)j#eFueNt;Wf9_zr*Xqa=|CY5T9uHlDdwnkOPWM zvH(7jxCz(Mwk-kcsN#U)`%cd%CdqtaWQcF~O)Q}9GM@-r@vr#AFSYQAUz&10ao(Vh z-*qQ-eNpYFsn&i1zv#CS`*~<{KtJmS@25Y%C=jHYkHS&vt{=Z>@yY);esQ?T{|&z= zsD)qj)%eB3wepKa%lJyP1o8{q?{KNz_Tv|!Z3G`E_-B4`q_tGq89si|Kpf+F?<!5v zywNTG4g}YHj|p!5Ii^Bm(I??kLdyfq%rhHRsIIxzp+n+kGgMqj9t(Z6!>9N!oX$n5XUH zALUz1(l9E3|J_ROxfSRDU6S-;cUqy<9e)e&$%gt=jQ23%RrBmIOlm(RALgss+t`~z z>P=chsW+V(!njPypEfm`6GcQrV5sL=A&!Uo_GAO7vl*K%{t-(G2-wO7@?9PckS#PC zuMWc1R$>rb4x04UFap-F0|N zi_rj$_mP&qF)+QQAA=(K>cubX>&E~JVGI_Z(2qf}ZVa~lpdW*I@)*2IV^D9LItG_v zD%?p|$BGvm?Un2p&d+K@+qF3p=`O91MK!~^KdE&&7h`lk0S+9}QCb1Jh-dl*xgJb) zUgs8ZQYj(DKOwx1$ek>rPKps&A{XXSp&>C%jrrGUz3EPVkH9wgKgF1SKcQl{v z!l3T~1$>5~RrNdT@P{JOjaO4$_HAZ1kG{65pB=-IoQ+?mt%Q5(ZSMXpy{WFrrDnPY zd~cX^4fysj{mA?zU&HqT&bvC-euYm{VLlaZlM8z_pia+%_tsn-Hlx~uRM%>FX8T(R zuisH5i>M|@vMXT{VVB$i@kKfTk@LRdMVRnjHx+4d-gI}z`Oon=xXlRe%T#Inm*V(e zF}Vle_@5J4l!@_wyoGN3S7-XB0p}n!T%Ci}x;ZGLIk=GO8pr3r+(MfJ6@r+D@Nj7! zTJU+WtMl-KJP#YCdDtP3W^{f1JopthtgoMk4RYbtder$@8v^H{EYAxB-t0&gF(Bk?vj&ieRd99mF9y^FKlzqr~b;jYv<<16SD+6-UN;LNWp-*t;ORc;=ml|L<)r(!wwjrS^tj{lte5Ru#*At9OSS_$1{ z`wjt;}u%i{KPLVaYneLVdsR?)jn8uQ;=4p3n{tdED*j{9;OYD z2!}{_7WxIlEeew$&J5E*To3>;FHGxGiZ3uQ#TOX}vaS6h(tXlh@gHsP3WMwFvML|6 zY#}JFbCoEeuk!*ImJ8{l@dYe#E`5a#!gSZr1gk6T_Z3~Cu#i_=AxT+S16TLR?!knG zUHPvAR@eK;EHKnsaNcWtddX497rXNqxeC+PftN7lN%RnYeuO-PxL<^ML^coACU&#D zfAI;p?cE~}3{nj_2%DX<($DUCj%$3L+bh-hvneZCONUO*JG#ra0^Yw+C%3VXmF1C; zr&kZi_3JMrZtI5kD(7aFCc)%QJEM=!S?kOPrs7I3H9L_Z;H@nUfYrSQtS;M*xQ@;9 z;hH^G*X~>I@NWHZO`OMLtIWX~{L~@G8FGS zoKlEK0HyjX_4hw6;7Coo=Jo2!*(bSN=U*=32>J6nx%%<%DUaud1^V%aLN+>AKmNVs z`ZE_0hjsVzjei;Y$W)uGc^3}}Npqk{eH#9WIQ-)g)w6HthJS>v*=Eqw->#|gHLP2$ z4R+Es=xgaoXsI3!|05VbEXI8?j{9rcxMzuRS8}!S(_!J}Hi&1j|9IcWkygHhuk`!F z!{+N$)w~C<@X>-5&aVAQ?>(LIhR7)ee(R?bwDHJgT0itj@t+XA$zK)F^BNVz>Awlv zVE*r$=dOQC!b;aC_f{vFB(YkdeP9|q;^YcEfM^3hU1k8)<@ zx$82@vv0Xk$hs_n6idXF9na(5LHwf6x+2Ln;bopN^v)sPRe!+Wh2T46W4h+{g2Cm_ zyimsKDt*Z-d6r)Fs^VF{{-J0T7R9#!+~z`CuOPXgEY#H<1$D1s-6_-b_kY6sBK{tY z!eeYyGm7l0{6Op=2o;a@ZARAnpC2fc)rV}Hqnj1D7)DrDurI;uDJPVj$|1$0e1_@_ zma&FVuvmbDE#ezZp{5R2c~ffQHLVG3`NwU3O>CnNffe<-PLt_*nttSaM$k~Jbr%Sj zw?lu*l)1{s%4+;_)(!Dx;SKTSXZ(kds6WG=5B6kCOlo9_5r$ zp*vq2=+B726BCXaL@@fXT}o<3b6vycVC_!Qn*=yq?izr znIK)Nks;MXNDcuB^;fP{u!nZ)AN5T}_ywOCExRI!%}&@U1?L^X#`*FzKc@4-HE zcq=Q#mwi`)(vi-U7U3ZHg?t1TFcRE-mH%Otb@21=)X({3yIvFu}NO!3-iGrH3j z#vLwkz&)^}PC1T4G;kD|$g+L*X+vS3_0rjAyqCWW3OAT$ci^S$D?EEW|2UG`W>%xx z$P3v=n0kFcA+P_zAazi=ab`6hAmeNzeR`F?!E0x^YBwG~OWTUV(%rwA-Y`2@Uoy;o zkh}xG$=(5vS#P!Z75+|z3#o9opGU$>y`Hlh9e>-6yaz{~);u47vJG|7IL14~Ig#8z z6>G{?%^=$#8)SoK3xf>a!`L6MQQZ^S3q7|4v5RTk&zjtQaokU-b$EibKED!x!Y3R4g1GwL$ zA9}yS?I!)uuaOJCHc`jttnm%~uz}jpA7Kw7;+rpsl@G%|*`N;pP8$AI^6(#-1;c;V zG;0-()%(B!TyDGvne#QLs}PJLHxV$}yiOM$#BsX~WD(n7y}O}F7QIH{gR-m;)t>m5 z<^gwlKLUMx%^$cPF1dk6K*+1xVMe2PpKNk+Ti)i}30nKnPZgSiDmMH)@<+2~dzfUG z=rwZnMQG*wWDnmKEJv=$v5F#__?NelgMNBVLN3)+h-T>49}&msT5uGRSodQ9l^FC& zwh@y-ZI0IPcwfe22H_c{l|L(&r(-$J182w=#6;+f;|Kc$_NTor{O8c%9)tC|*}CysVSE0*k&R=Xiy4n>)DZw7sOCHhbkggrqPn7KP+yf-&Tw3isK8M9Bl12&Jnl1W zj@8P|a{2WLjd*yc$)<>(I~P0sPL*CKs1n5ET8M6yDZ8=L8UMZ0e}9af&ipT({^?__ z)BP09B|}J;M98sUh%~xjseG1P{xX$Yweo&)c@KT3mk*^*FD}4Ne^)6*;<*+Am9ROx zu(xA^_x6lfFtFcCp;Bx%W~kCRvObnkC?FJl4u`RF`2Yz;y7)c*+8jjjHh&a>gxT2= zL^0=|Q5>~gLs7w$xjJW7o{Yi^grd(^XOqjjMflb;#DU@w7hFOYry%45RKlKJk2+|w z!QMu6NhF&E{f&+b-hn5chfL$0jHFKXy&|*KMkSi=hZ}6D`(?5>r|8{vvt)PNtKhD4 z56S0Hx6DSUnSM~$76*Zvz%FdixdHOp$xs^*)B+B53_-PT3zeV_E7mk#*uFdYs(ycF zkPOXQR~tpl_vz3DtQ>&+-`Q}saiO16(C7mKF1$kPLoAUsF^7#la!N6KwVei|! z8Z_S?I4!zQQSe*66EKG=soQJ2MCFyds4tKQ$p5n&WnW;}F+}b+~2^*R}gRZ`ZT^vg#*v1#QfsYs{~uzLbU$ z990j&`8{gF{yzGt#$HzaRKqTl;|5ZblAmg;4vEuma3ma5Wh;AU0yoE3YxUTS3HotP zmdEY0H}vBSh3u&b`f=_f*MIE|(lBTDp>h8DQFWXPZfIS%lB%P2|4k*xSRa?h`gI)Z z9K?733%aqMpliE^>q?%zm(eLm{s7jx)<&Bs{$sASI1pNFh-3cfD9!JO<31P1{RM5@ zM~HFvWP35*Lmv0>fY7YVl7Db3Yx#ok56bipbw^*IISS$*yA{f>RMc8-g!0=i*6P1I zF^!j>zEG?Gt_aFkU^!|=x}uMvNU7Ae9Cbx5C|X&mxqWm+Sy1#@6&7X4MFXH{LY20! zuJ`{#QFkhekc-+w(H%J8Xc*{N7{*Hyfi)w08PiBW+=kE)tNrMdc``3fHL}TPi@51*@$j#bLG`_&e z-(4qPXnknh0WW^J>Q&>K-8E#Xw4Di#O|D~=k)IE}MOig?AeIbw5Ip~Z7s5A*%JQS) z^P^7HH;FEzyT1~?$*bbS+v!7Cj(gSpk~8#Uq2~g*X4Sgas|n^zC-^2sl+a~kN#hH@Ca{m6xO_-1e&PkQmC)9%rlYCtujq{Tlo+Rs@N$}04Y?IwWA93{#2W@>Itj!4>(E6y>Ni&3On<3B3j_t=M>Cg(BXX0TFa?c8hL$G zVmrfmA{(=LSN0B1?CUUuVj@!-($hf^>KG zv~>5#LOxk5I0)rV;rI3p>_O~B+RAj-_;mormblZD#|*U3e)cTbDcRgcNLz=w62@<} zy28B$XiKH7;ARRCtw{WkwxT%g^J$cRVZ}57;rS17D4}tuVUOL{kHbhlTH^~#aG+3`BZSFb@#V6}nFM3fl2TdxzvQuau#{+V##+Uj zh^?C39gP1tuqqChUkkv&taOI^ZT?03-|yiQv3dm(c?p~TnLd{WAAIP0kbD}83Mrq4 zV;)S-;WIFq^KdfV3vn`;npfjXF`4gdqY3ol_2iq^i6w6Dl&d9eYYC)MQKEQraU6^u z7Y@8ZRM$=6^=vKzeT;|GLYNW*cctdTe3tP!|SykB|R9| z?Eam!>dDe~E(aBrqZs4EHo=GOF2Z)f0+3t|(9+rU&t;4Mp($kXb2N7mn$d)2tcE5T z|Morjsk^jVVBhBd75do=+%K zY#7EAHwr{3tw3Odn>OwNoSXAkG9GCQ35j;A}sMGWO&eN?rra_1Q+MaL7y0 z?2whNI)3S%?$XjdX#%q)8vjj%Hf?oy?P2W0>>$PpY8sx;u4VL!?U_ba z)dkGXQ?V7&dUnFLOnKj4RSo+U{1;2&jd(sF5G!Rq^VW;J$W=w=w%-2%?>nGDJcKKZ z6FGOSv^UxiAymn+#nk-{V6e9G5(c7q&*@6}*&;$i++;;mJOy3GREey|Mf{Daol3Uj zZ#?3#5lJd+(*#|HM##aqaXM?OGNHo#hiHSC@Ly! zC+Fmzj$YBbG|)Z@Nz5pF0Nj325!&kq?S_2c(1?(RWf2kqd)m4&eiJ>j&P`)}E zUbH6e5;t(9!*vRa40MVuLg|R|ikBoR>NlqJKT*@@A#yiG*~eJjNt1gBmzgVu4Ppvy zuUAt3hK*%_0_JGLBLw!5QUa<7`+&4OZ}vj}b{?a464iE~2JeR}ghS|_tL5zM1nH=J z3FGkeF7R~e{1bSu-o>NPtnVQH`$ut7x$py`qJ-Cc`Fm6Pa|^N>?ovrk&Z{&zX5l~$ zwwU88;iNlWE0Zt_x)dMxGFnzM4@vtt?9Q(g5mCvGeJ}cs9Utt|4tj4fBpY#g4IWE4 zd^APzCK-|qhU^G9C3fXqdfn)4bZIAJW<}83*x`3|Z$t(+`MlSsMagG4( zfTJoLa5`9q&Yg-P#)-2gORm?L-O}m;sr5SVr)iDZlQvr+|L@;wK1a?J8gPr%b2tm{ zIa1&2?d_CJFm)n|iE?iyjo{LWjoypPGnu{qp5o2px^6gfWQ=Dj_azcJ7Ams!{Xyw9 zlDSIv({NO3cEVNyo=s~0;lXf&unQ%FRz0Nzo7^9NA;&%4K3wM$&P$M8{cR{TnhyIk zUwsIol`8d7RGFYyLA=5-_UC`}fR2SrfOdrI0Zk1AWRlQIV2>5*p}idY@+r`X+Ebfmt@*08L&n6`4~L%k2+YU2o$j?%qaQZizAR zp-9v0@uAw@DyLQU@?bQ=3chnX%jNSzffH_~iC}?xEE8c>UFWl63b&Siz z{YmE`O~a%^2%vPbO+y1U(v{;-BQ4N0QT;~cq$RRKzj3sx(BnarbeDtH?|=fmHjlx7 zLN{HZJAKfFa*<$ul3VEriZ7mFm7L-9ePh6u;-~_?N`S9{bQxcuIp#0~_E+3Qj{ji- zE}cR9^yF8;wtu399_6g}?M&NW_eq)2>2wxwiy<@_E!~O{q}kl}3J4ou8hLQ8JITNW z56(!cDfPG-f%_Jha-OGzvp86McFJhjC=?;J!S;WkoGt)LR?jdKH!JXQFl(e^H|Jo> zZ;1WIK>n4=`B#CCf4TZZCKj1yPrRXR;Q$Bw?x`RgY?I2tK1B|e@dW2!-)Q-Xn@pjY zYbPkc&s7K8_IYMhfX?pASNtpIX)GN+ZY1R~UO$=O#z9f>O)Zb{QmEesUcPlR*f!0@ zk+2_jQ`=kdm+QYm`NJ z@@0kY3U@+o=c7=N7I(_i@VZxQMj#>CW|9i>YZlpX&h4!0X|X?{241&4O?AG+I=D4Z z|1|0LA*X4V;rc1D|B;1T9m-$0FS?zbJf+1}u|H0M-Vf>>2@~ZE)GUI{4Uykjr{8hy zqh@Mw9V{Vu{K>u#o-?8Wuu`B_j#mBvb;}DjBJ|b zINLZHY7D@9b6OhO=AMV^sQKn<^Pge9xi-97kCZ6WtY*mJ(Tn!#CiNPc2j3BX@$IHO za=w?a9?yw)kT48xVKe2Gfy+H3ly}3icLOd0Q`&D<=YVA4|J}pO+3-W;8~og+fZr6y z1wiQB%k}G^uX@ohRC7AkTpXQ+Va@M?)qH_!Zahde ze_I1JKMGd!eyVx#XR7%r*8Cz^&2XwYTELw1AE;Rvtma-L)_h;U9Emko1grT0)$CTF zc=H`wgVlJ+i1g>?wgHR74HdazL4Q!r=YkWoSEwIKYl^_*DdS*5N4 z{xErHkPi+UXu(ym&6CK?88DPAFEjXF;#|Fv4&kCeYwl!A6z>kMbO&Ywxf`>Ah`M3y z`f#0r73cMo-&B1Z&}vCqG7JrWeme6@6gqfO_~U2L~RdEUfdybaIO+OONSUzgM* z9iA=PubJAfC$(RGj=BoCKkT- z1dzD@?A&m_j`IBd$hA&PT{2k>o-111*zKGr&Fb%pa0 zq}?z|w9jt*E~eGFodWc4leLx}Lntf#9pvuD^QZ9FbxOBT13NQssOU@zl1o-DUbCD6 z^fH*QKC6E|wzx{qe|QT8L1-L&x`M_ZP`QI=z1Zi1s&SQA6R*$4HcjpMG`^y9bb_Ao z#y6yI+&>oAza9g1zGHCGJvKBD1R*wfm~`r8tB4?#(WIUzVqem0wBMEM4Y9Z2-46MC zJG6NX{3vh#N8A_PByOv<$CGAzmy~?NcHX~U+{So4YK74rX*FKAy6Rh<`+1j)Uhi>~ z=f?f;gMZg6%9@xGVVbuUw!PRQ;qPm0uY-Sk@&4_#!S?Q<_QLr%_KR@c<2^3) zW#fM3TrKUc(cMP{?R9eT;Q|M4NjSW7_Tq#0q*=bF$<;f`*(-|U#|=pgVQb=Z^M=rC zACbZRdA~i4_zwWpEed+s7kU}Pd)bh#D%!63skn++#kxJCc(sCLU%$!0$@{Jq3cXz& zhwKr&uh4lM`*hCFq@+y1A9;U{dP{xG?iP%(%l4|S_^~R3mF{C|!h7J!Q0*aUtd%*w zc)Nh{^*n}3GV-`92Z_fyMhgF&cK`Eb?PfE)0Sn^q)5Xe7bxjB*i}V5cXjzBGcrYyc zez1d|f^DSpxaz@gyX;#XJ2&O+XhL6_#2Ke1;@lH`Qo_I31crU8rC~JJ;@Ij9igydV z*^n7R5fa_Ts|kUx%@HyKa{{}zQryb`Fq-Z{aN@4-TV)JBlus+pXryKx{&WuN902SA zJcJikHVlA`jnG5;?HdW&JQ>=n8ni(^Xr-?sv}?T(npqFcAwzpphBj7%*2o9#L+a?; zk0Z1wJ+%8|Xb0qzLz^3_(7vCoLF-S@I!-`n(Ryf}l@hccWN2S&&|dUG3nyq#jYViN zdT8&-&=$+5f%5s|_mBscb(pQ6RR?aCg>A7Tz*s%NJ~BX;3@{6i7fp&~xj6WfVj*B4 z+F3mP7lUDdfsOx;-frj&>L~of4m~ek!9M90_=nxGh+aW}3%hO?<)HFz!M&)b&@Vrc zOUg+xn7elYUga_|hQEmBkNbP$V>Dc)%O7|3R0oBW!%A-m@FEpyBQlXjKW5&`bHLiB{lNCOiXWR#AKPJ5z~5t)`v(lLl5my z8QL5fnjN!-P2`64Br6~Ge!T>e>L^`Ut&Y+fmpn>;^u;D;pyO|BroPF;UrJ4GlF4l; zlH0^gYy&7^7PJuqZ9MM6`~4<8i5ruAy%v`w12Z=iCr9%CoAdu$yl8U|Fc&AcG?XMa zjO0Zn$>tdR6NS9o$wf-blH@i9d>4)3ZOImlZF4?66dVSwiBWLxByV_lnmRcLXNsXL zW-n~Qezkuc`ZaM3_N$8eRY&fZMebKUSeMuh*Gwe;F@ULG2kSn zqBi`qIQ}#nF*EhEQOv9;c*54B<9T9^9_zkeNLV+PvHlxrmVd$V#o4G?rOx;cr*GvI zvjupJD6C>Mw16qM^^LI4rA9pR!uSOnp^u;)psWR2JA<8aUnW0-E&ZH>Q^t#;A z68TV29!9#+M{18cYb{;M*Y{`#9ySUKvtm01e(ki7+o_TxGmqfuK>A2+XUDfH9nZ}F z?*#B-00G4OR|24jPo&{7f`*qoq|$Kne2s=bL+^Ch6VGGM3jKQ4^D~*h$a`RKgsWNY zcg&FI<&+Jf&VL!9uJD6;=2Hpk3>oS;+^Z57_H6`=aLDGO6jrbGgZ}JEK@J3o@gw-- z))cjS_s-C|_xa1DzdVVEtn@=XYw^3G#!nA*M5Z|aGmYA(Xe7>_X5`N6Cw!<;F@ zoPYG%~=pBBgyHi;%|mtUWbf32>ij~)7^))in=MUP=qrG8EQ@QKvaSh=YTYO2() zsce+B>J_*^467bQ+Td0~5B{_qp4{1$7E>-$!kG!+^T^($F z9JT(?K)Lld&=G_;JFq_ZW{A!wC%G-l(l_ z=)^$zi|6IWAEU-U$;Za6evNO&K%tFdNwHt1Nua!P$UeE%AdJbd;g*Q#oE6&Lb<*6?@w?M=keaGz5h@?ulDk#P~N%r za@b$-{Bfi9{zLiA+P_bM^0~E_-wNfASJ&QuC@-u1`x91P{`)`7Ka@XMJAE#N@@HzN zkLggpzxMBkLHW4azfXbkk^eCNP~P<)<{!!n{$c)m!_GqO_!U8UXl3pFhw`SiukYzl z-t#=|)jBKKq7w38c6vg09mv@}^fK}Z#Vf+*4vJSss0X{NWy)z~qq1IEtE^U5Dc?X= zEah|MQ)Q3xv$9NCs+1@@mG_iI$~&+RtISpAC~n22IF-f9yUIdkfih2d%LB0&bh?Yz z^E?kvBjJhH^9+Wkr{JI0;2-d_d0>Ow^DzAL0Q{4v?sr>Vb>T>tD_P6;PJx1T|K6_d z`?nebQt?60+z~I>HdM{j!f`|wY0jzU0IPmUJ5nMSqA4AtkG6iMucOx zy_3~-i#72;c0#VlXmzLm5TP_y;|lou?b*@R+-(uo#2>ODWI4v_Wd8na{*k2(x)(ig z3$ri(J)9_pYlZlXl%!hP@P18AcaJDF;{h-B^F%O8`$FQ^^x^$2ZEV9+BKo>h%zfOE zzvJgc$LrYKJq@HXt+st@h{SYJxn=8$L8xc*>>zQV7nRBlj zO*8I+IGBf{tm^?U(hn)u-^jSVHbZhDSs2U@yMpct@?y{cLTT=w(XPW$I?S+fr(Cb+=d( z|F*ZaIuB^;BeloN5%$|);|}gtD6V~dxq4dQjsn&LZcW~rZGw&fL}k0cyN$)xV~D~2 zJ={avhPK5u;(hZ^gX-V@=k=JBrLM=~|Ih1jJFdrYPK=Y)_1M*D&#G-bx>`eTOnI~u z%?FOpBYSWIhTG;*x-4yF#spoNdu;VM{n}w=CMaL4;|($(sw*ejH+}1IUH1RJ9+?YH zBy{s?Qs%A~X+>;LM-!U;cqd;mw-?g#nEgI1B;WEFRe-x1uB5iyl3~$!KVH~$YgdY? zX(n$eaWWaSoi35VD;cBscc(e8XKXoqx0zy2!anTR6?Xou&N}u!Z2VVZS9B-Fobfs0 zC@s8S@$&WU7T59(MCWiFefUH(+_Gxz+p;plZW16cM2(mBQ^q5cX*-JQh~1n!w$g6S zTCNG}=Cq6ctDwPG=-d+E|p_G}-x ze@sUYnVcSeAH?b5z%uehs592@%u9D+G;-^3e^f*ftH*(J`2sdm{^IEt0PK2qJv6Llb)<)SxuD`sm z4N~I7xdzo!!sYs?%yN6;X!+I9FWF(d zhVl{Jsna!B{A*8$x1_KKU|s_^(W%gWn`p>wn~2jL?5$A1BK&g(vnBiB3I3Kekke)I zQgj0#T{^t>Xl5!=ce~2Ked}ynlXshHK zU0X9nTTw^=_xT9mRt;2k56tH^5@$Sl9kit#p9#D#>ACxLSlD+`X6H~yNxmNYc6XnocXnmGk=eB{AQP zp5pUu=8J?gBbaRIJ~f-OicFe6AjIir++kekT+K1l5(OEiwDp~v*A8Pv*;5_6vj^pF zH`=%!%xT%1F_dfe?oaq?h9hNO*4ClQOFP$hi(#quNl?fCF^n?E{=zpl+`b8AtrGF_ ztWa(?Ew{RpUV)6Dcq3};w`vGGU62+XubW9zp3$faIiL&D^3EaYqyZIpGjb>{sdxk3 zuL^O&?xZm@Lk(NP;Ki>)sR$m)u7wM_xMZfM3^Kp_a9l`$SV@!kZ)57jg^wWcS z!4K3kP~|9Jk)AJWborh1_J4wIk!0&5Map<1%Itvn@B6?XB;uNM@7F`^xoRAXd{Lb+ z*|)4ER`lq@Xxc-g${fMAK3prPlr0psVjd=jUss|-`-g#u+kir*|C9M%Aox8B8SB5+e`T@-tiPClE(110fY+x@rk&U8}~@g z(RBHYMOPz=9h>tsy97IT&N7uea$i95u;r`d@h#r^c2W;}&pQ(A0vUF;k<1E_-&rn9 zHtGozvXqK;8&JEMe})MrcmLNwLFM{(pOV{MC$me8%@gg~r}_qW4CzR0cXxG!*rSh0 zfaVB5R6hr5q%R5PH4Zu-!}xOae2u0md(491>aA-`8m?fx$)A6ug_(SzR+6MYU;ZOYGEEM7f{uZ}@T=&J7^Bvd)7R463{bU&@e zFMlU~c}~YK?Sfx=hG3@W0EXn^uOX1W9>#wrE$`3i7EokQe5s!JBF6J@ti;@Q1YvF~ zjTEYxU=y>b(oo4*q#?IMrQOOeG}h*8p~-xyg*$_^(85TPSIFg#G7XQz(mF^>Ro((T zKSpQPD$^yAhpX7V-_jTqC;9mBGI8GJ7FB^_W>Kp!N#nx-@yn>y zjR9{b-p1{;TM~d+Gr`XSehR3ISBi6P#7Ce_Vv)&xM<@+hg7X(PVx*#m14o$hF2bf6 z<*|1Osg~*bj|dv<6zVtInWntv{2fFWHzu-Q+mDmI83ti6?&tTki1Xi>?2#@iJOp-c zSRk<5!h}8uLM4OQmSXo+;{Ra`5`V!PD)C?Yl$x+Q4{5D5e@klRgCHo+6uqbGzw;K! zJEoVg6t8oyVly(dPOuv`336-@$ZbN2L1Vl)P2qrNz(o>mb7Qo15k_6(p-7)GV>G5z z!fAI?-ef#{+20av<2526<$=`|WlKDgeS2=X(dzDB8ljkd@u67KkWR;!W>=&;{{mKJ zg(jlm7v2URqqGa6-zD20Omld%AGJCa4#bpqOfa0$81FX742;xq*nV6jaL(#V-APV$ zO(oUt8y&enbT^1=ul-v-IWr#P^WOsJe}(`2-zAOT2(6W0F^ zqiFu8Y4iVy+QfC={1-^A6#Mf&-paRv_gSe*k<9ys*Acw$7>I9PEk=hzZ$e?-@2U)c zIS2}G&5=-O5CnxPgG7SiG78Oc5d!ZO_7f4{YrQ479fH6$3C)DhD;vvo37A|*hZ@T7 z$%)QoP)}qufE#Dc7jiop?eV#sO(29=ILW55iCG6>OE7oGn4tF^TV3%l-cKH>eq4X` z!B95%^TS)a!2a5e0RCD}a0D6!$90*%DxD!~XfXczt1$Fv0v!*^->ri0?hp3eA}IMY zP;Z_N@AInZOaNb5x z^&H}(aP1>Kmb>7iz5F9(MuC360bHhIPzs{t1Id^Gk}*Q{XW;n-I(`YtWGaViNl7d* zxql5KM%XS+@uotihZ43bUK5aJQ{GjdfIRfDzkrMiA`?P|fNV+vaz!6iFYK{Q$Ow&b zbh=$y;Fcf~(kvvTnIz=?Ws-zkF$~$$3zJk1x&K4WKjIUSmu5=MxPl=4iYy}Elttuu zAtLeK=Y0?Py2188B!O-d1aw5G%Hw|!qT0+#I|T^Is9J^OXn!GjyAXx9YC^IB&hJ0S z#~4jM#{N(8u}sLv-pN7bW5yl-Bp+{!@yW-Ztg6qW=TiUaztbWO-q;`l@+l!8&Fs&m zBp~(D>C^w<^iOzIo&E!bS{pv`^mo40%y&V=NTDntzm~<*P=5&-tHYrq;qcNgs)Xzx z42KCa4p;rn2#&)kSw#LVo5D?eBJ#J6Is!!d&Ii~Oq;oe6s*=ftWUm4tB-_P!6hf-o2r}?@)jKhp%%F3zUb~ zI!gS%k$k@HFfa8)c!S8bqK=Y0>?g~^W$;~kFnQ>Nl8b@z@I`n(U&zBKRUYP(JdEsv z^6*@%VDj*t%%JixDnK4ac@kxLSj~ywb4r$O9*Z;{ugRr9!WY@{yS4D{h)*7_y&L4A zpAI8L%Bqh@Jfb~L;<4}}5|6R5ns{`76ihrm2JKv{T|7o<;_dU0$XWk7dh(iN{ajqd!nQjwZtaFFBxE$icNY zID6XC3>t8jk?1=2H1drF_jCT($N)K6PP0~v0~~Yr=1E|y8^)(SL!0Yyc^(A5gV$F)WzdCQVZ3Q8W2h&)#^<_v*?i*IX2u$&!+GeLs9-M3h2=4 z;ZmdRWSr|r9XcV$+y02cH!TX!YTJABmQE$}mKvbG3K7kJ@EzQTDBD))~Y>4*K!hm6Y=2;2RY8g>a zh<;er!bVj1TpiNK-ATJ2P$#baLU|lattIdmWMu%;IbfQ@-srJ2BxXjMW=|1%KJasV z9pOre#B&n7!1Zdh!)wZ$3O`@8#O;kc>by`@1*z|xd-?JywI=S$ZlnxHJ(3e$kv+3V zRz&vSiJ1+v&+{_7&Fad5@F=+34zj;YBNSM1oQlBIH(_Yc%%CAYIzthMkp1%$^42<{ zNzwp2sAJ#dZ8`fMq=v=n?O!NpP`f|!I(LIlY7+?Z$E@YF$AZs)EBn`@H=*e+xNO5^tBP%dfuTiSrfKGhOw zEn?BR*NvDJXeTVm>ml|iDGX2VFLEb6UlvA^hOZjda~=eWKyDHL+s&+SyHFWOJWvAi z5;T5QZ;HePPRd+hw?Vf%))EimXK4rVM+NRGxo%OsGO{A>F=^cyjwgf|uy@|B9mz7p zigPEx@+kUP5X<3{ee-P}=-YMcqeC4cml4BXYE%q&sQX){~=6GomBy9VlX#che%`NZ&!I>K{;Y5l4GF`w-r23e1l}@z5#Gea;_6 zlG%m#ax!_34#f|?6UYSBl~lYk*1%GFK$Atee;fHn)*?@I?$r<&DGR5a&ZaeoO?gYu zE~{h8+k$gww6}uvt^U!Q(*)hboEGz8{E>yd1vA3UlHfB^gT{r;c?$heVn%*_O*bP% z8PhoeH14kmm#N1w zJ9T#p;QL~=m;?Fxr%)cEt|redbOjEK?AisiNWNY`i{!!Ew2X9%7vR-Ad|ez>eigfQ z`3s2GPJ^-%k#26{0&&-ma!M?qVeqC<#BUN~{aY~BQQi28d2W)X**lN2L4%0@h`c0n z{d=K)qEuhGPpZ!=HQ|*!k&_gWhcC$p&!OU3#FL%l_5-`{8eE|Ymd2p%e(^&;LwPAL zUx%5Xeeq&sBx(pPhk7fJ3Y&q|7v*R5arqbp5rZ7jZR1p0ZOQfImLfKmPk3E{J{J1s zDL>U>V%3ox?KS+DT8HFe*s1iDgJHaOm(l;Nr;i;BT8@Z}GPqP-C4z(Jq(~V{6#?#isYI_r_`#%}1tSRq);-4I; z>F*`{WC=TzPzdD@N$4{EIEL+zdw zYWzrkZH?bTjql<#*loS)K5dT4Cq{5eqq7G8fblXUm!3|5yz>YK>ra+y586|7Mc;W9^*@O)Mq zM5zV7mGUK>FhkvRODy>`()pMhbIXnT%>gkn7x~1j8ZYmn$==ZUW-5*K)T}0hV<+G@Xrx!K>0+7f-&0nYqanCi|pPx>|BOxQw_O*adp>~nL2_<(}D6*(%7?v1TmM`pP6vfGG z#%qE#LG)|}3gvB9RZhQKk5m;(^HRn7^wJSd6}!u(v8K92<4)PChYbpeH61D~KaV*tertBW(&CV+Pax!dlM z^J&6Ke@?!bNFw?#H~5 zP7$*N`oo1Gp$7JhL%mCn)PS0oX|2VAH5rXd6mF7YEy7`ejHU)fbGE=&6^y7q+K9c!a$A{WX6*;R~qpq);GY zBzZEozR(Y_0p$}L=$gF!b8LyoP+if6jN~~piTSs0LCpUz2q%RZR89o)XPfg6N+KF& zZ4FxrNE1mX28H5b2{Y>h8w)@rVjC2%r#@{byGkaE3RYc5BMjtxUnWb0FP@#u`4sLTj$Q7ZSPLd*|YC)0DfEGk2u&Cnj;1!i2Skdt|GG(~hhGP^P zY=KZK)z$0u-%JqEaEngG=js z3}4@4TGILkc5loK6=#~cImkv$r8S-))_5}JM|hFEh#4ROl5ve+0-ReJNISDq#v(L% z!7)_SQ(EgEKIqfnBZ)?*%G*{W>iFq3uY~yNHBW~~dd+>ZCfAlUvCUton%I)psT;9) zg4l^sGsjqB7HMMbvgmr$HeqabB_nCC;}7DqfCSB)68G zO4V;gN_)8XH}A0BjBQY=W=sfAVBQW6=8=JD&OOFId<0iHazJ}35DvFZe577iwO&r7 zqGh>lvd(~!ZizooM{xb1aXIf91I%^Y|3Zb-m$}y9*W6z%bj{%{@%HzSOU=i(xLZIr znZMpfX9`K_@9Vhb;B=f)UXCM`hGUXo<9w$#mnt`4jd7K%%lsx7 zw$!VG6t-k_mb1UQDU`h=T+0_jK6A0O;3}g%*oStmN1{_*!!2oXXC1rkz2f$!I*(Uf z)TQHaO)*##k7b*bSh%mY+RE8O;xT)N)E=WFvMW*(Cp66Vz>B8o&Z%almzqc63dg(0 zW09{!)QltBO?f@}o75gdBeIp$#4!!CPkZjt(G%~dr!{4NfUvR%oBMktiN)OL=f8nU zSONTYP0jJ$`FOi8vqDoM_0*SzU#33s{0OTnCkNt?FLg1nl6suB_Y1Gg{d|EbZ)@~S z-d^YLT6%0(QYqKdopwt@wr9B5U%gn4fdUX6U>~2#!8gS4fYi8R|M-BS>_*BXzW9J- zj1Nfdk=!u*96ZM+=bg*G1igTJGAH4&h156#rw0dq}!1Uo2T(3fuNtN?zO4S9K zj2bH=NN$KYlN?S*J+d&)q{wcAYYX`QyDypU+{yoc#5~H>KkPWSDMy*Q?s~beAh3?nhmEAWF<~yJHkO;0Sdw@&Rbm6Ita;Oug6Vl{A1Fe_G0LR`E8y*`Wd3VLJa z7$3bh_t9%kgma8pPp-Lu7jawz4N_MJr%t@3nmPyhtIjiPm_k>z>u478rKP)kJ%cl% zlOSD2kREZ)p18x5H&~_Krr@7Ly2baYNVho}-F7D`{U`c7-$Kymxo3zz!=6%n9B$Ho z;c(5AfxdiXM4whaK9}G)m)%~aLS*QFT_Gw2AL%hRep&!Ek=%2fvzMuN6S^@qvP@H( zE+I|DUksqBd+_)Veks$`PcludA)3mUX=)tM)D=!s55NpC-3;{PGXMmX9i_yKDnR~M ziEVfVVR8O9LC6291U-$^=qX~9kDelJu9iejWAx-ySKQkP)I_A@vImTiIxd`~u7LV@ zuSQZ;KvG2+NK*NFlFAVz<=>&YNI6djA$ zUwxg$`Xi@dLnC~4@HK0|wkhsOptFcQnia$@_6*ZDPDl7QPRqz+dhG1xROjuX$o*C9UIj}pJ-$Jq_S@(w5FCZ{?~~##Ox9i@#5NI+XTDfDxR;E0AFT)ABg6EjNfG*R1kJxfi?? zC2W>Kp=3$9qA(h+^;*+d-4;-99!Zc#*%AV*AiJNo<7y4M<9eN|_=m2MI}JSo6l{MB z8mf{08^9|sms8(U@E}KjHE$Z%BCVQ3&gUwp?Q(m7?TmIF5OHS8dK#5o@O36KesCUT z*!T=Kq+?6&Hl^?sfl6|sVvo}Da43)(ntf4K4yGsi<=CF% zgxcS0CR2Nq71I9!y+>8kc6|)oLES*@rLN7NFO}0plbj75tOIPQ1b}+hA&OzezE{cu zVGnG3iCl#bdCJkej%6!fBB7XEQ|^_vXMv#KehF*|FpS|INo6N6x=c)iD|U@vdP%db zzYi7ORb>|#)}DezsjGbV@nC9yx#;3 z#8OHm2!7<^;mK~ot4(jqgdm#QM)BryaCJ<17llok9!j>hog2!KSK%ze!*o*4^W0u! zu4Y<{OW2${L&ZeGiY(#N2!qc5_D53WKQh%HLurwuTE?(}H(_AoqsD|AHiQbg={QCp z2*Qk=q!pY%PUu$hrq1;X<+{G0@S!A0a}(7)`}$tZzf46hC(@kGZmo9MVNwIWz$h-R z=44V`1NVi&iNCmW>F%U&JB1p=h}&ttBa~4E(s(DE@_rTLoj@ad+<@_o>~tLAB3_>n z-E52j>S8oma#N1YRU?WCK7g5~ykGG1)2LsE&_uN6nixz(gAgs@Kt-)1o$4NG)J8j< zQ{ot=T*uM=dK4e+x&}HCv38We4$q69DA#Yvww6bGRzEvIFj?GJ-N zM9MfLTrWnaa`mP^x1}s;al0Iq_D4X&*;-X8v{ZLwsnvDAHSroZ#S^T~>u9F#v3E)B z(Hs0NJsv}U%QaITw{i@i$GleK^GAqnhdn)Bi8RgrnoDD0#qPmyic~&zol`NUqT65; zY#420Z*6te2c@|)U>1XVT|}xgng4I)rhSOoLD23z4Qu56Ni2##TiFF=N;Drk))GY; zf56>p5qGK5Y5h9_>GXwBLHR@N^csJ6P8t)_W-?y1gF<#2BKG24AJWi>+Gi^a@F1*O-AYp2&(AH8<;qgQ(*(CX`2JVbwhPIL;1DD`w|20D!aI*n$o zff}8fH9Cy}jG}|mX_QK*ky?HT{wjWQ-L6QVu(sJNl|-LrPfLwHb9dzEwG(cZ020xF zgc+=p4ymLnM?uqOK!TGxw*|KG@o`j=wGm`oLg2_vE4-RfzlPTT$CN z?k_Au@o4)|aNoVE;0mp0#QQDS5BxE2YksO_f_)|K3$ulw!@9y!4saCQvn=_7<#6Kq z0Z1kRUQR<~^0dEHDJlObh%ShcG3J=r7Lk2u-6%R4!pFYOS?J)K82>88k5DZb6{VBkFC~O_P0b2(yg6I0q zGMVmO09HV$zcuAO-X2V}d6pa_c|Ux5YneAp(p!fnk(IVk9T3(SH$WF-&s=pd`0ZAW zaooij$1}G=)lE1&n!B4Dozapd>5isa)AY44-LNUI1BUPOT8>uehoV}11<$^&4Qho?ML@BL&{y7fez+=LmIZvBm zQLT~g^WgW9Or(2L-bA4vL$DEhvy3`iKvT6?ovNcD)Zv8zQ)LO0J3Qik>TnxX?FO)S z3$TR*_6rs4XaROb0N9lI@{(#qU>z6&&e3n1DMkxUs94=eGw)TCT>L#m#JqZer2tv5 zg2%x30U7%Q?cgbza?m)I9|gD4N0vf^K{Zt$Z>{qzm9cK^6kJVELknMMA-39^lEy`) zeX_g2SdDt2Lzd$ci+%W3<Eu&<%zr${pH1l_~EgM-_a?T;Iq-eS^Pa$RDym)WjR% zJV<*Ozld~nc)?}Rz}vZA!IjXG6z^PMYMy!30eK@5{{pv*G#ZXe7`pTiA*Pz2#62N{ z?dJxfE%7X0=l=1ff1>HA8$`!OIfQ8wui#nZi$8*Uzy9u``2`kL3%w$)($k#u!LX&e z^4r9!Ts=V0nFD40v0@@(Lou;413OhttF%^_;*-VhzsF2sU zAjnYxkRR}ad?ubCdz%pCXaV`FlLR@MAa_ag$k$I0QfNW_l0GvLFgrULd;aKNXWLJY89IJ zIgjF}jNN_!#Lst@T_}DqbndrEDRl0;mLz_l24^B!Br&%5%b#5+e?Gw=-|r9)yd%Vv zx5lXEvVwa;OnD`({H0HsEPZCSB4UAL!?0&}luf^l45=KeYo2AD(BtWEe@hN+c{Gw^ zej#X|4Vpnb429tZ}|Kj>9S8o0ua!wQ(cd83AWpmHx?gyaWR$> zw~Je8DX_EOOOs>8+&Huv_575}vto*eMILoc!YVzP})vnt_YF$9& zof#r2-Y+8gk|ly|M(gbe8(;-!O!kb1b-lq;5+pCCxVavod~|vNAM?` zNCdw8^ z5~ei1PKy}L)?S!SWq6ow5kDFBUlwts=W;!ff05Sj>3V+a_X1@(#Pu8Iyl9&7E+wTcM_15=*|9bN~XxJH$ zde*nz^y?q-(i5?xM>XKpo8vW=ev5%e|+l8jA}8j;0deN>&Hu(Pyao4)$6lUSN0Kn;K~)`18qC0eBjLtS}JB^z*1@b z&_D5kF2B;!i85+S=TIYQ>1;I9(t#R2J}};&4?r=eGr(^Kv`&5f zcff6Aw&73m_0Y>~bN3AAYxON!t2@O)mF&hP`)XUK%lG-O3%{d@dAtH1O$@~AxqY-w zeMIJX57+5a9IxJhS6#kV-=eizEEcMY7p~X3`)XUSjRNp`R$i}Xf8%%!@vT?XQ&-e6 z<+~rY2nq@a zJU~J21dvnY7Lc=N2MA{fN3vg6RnP479`fG*_r3RX$xQcDRd-icS65e82@#Nf4MjkM zrkV)IOQ%`V#(S1TJo9fN;PG8FYm(fv=1>)B)~pVtS(7A*fYw1CvnB~=O=J*>fHrOs z@I;U-0+v?yoHYYvAE6PrAx+%!z9s?|JWGv>_HJCeM574k_Xjm5*4>z@a%0qL)R~i!Xm?|N3y>Q#Bh<4omt_%<6)N_?0h$O{UC$r_@G>@U5B;mF0_$W& z{wH`OQPAX?E(!*7QE-W`%lHOvvGN{xHUNx7Q*f|T!dAT$^>%99emHf>flPpD1JXj% z9Ni7>M)_ntMUSHfkgtmTjZ)BXoRZKnI4pk}I7KBC=bk}#qfyns-Dtn{X%a5>Lz=5m zW3E4gOG#Z$iWOeWZA-pK1!qE_8;Pc5dw_^tz_ldK?YtYC1#o`83Vt!fqi**d^uN^H zceo_6)=JB}6aqe`>^h%_=?Rx|aoFpvK>r{$Wgw{!dW$w1@t`hp2Q^xgkPo}pVB`yMhC_d+f-pE>E4S}iY; z)Vh@{q}CO9VTThX2LN&KRSL?#U+;3I*k6mvNi8@VHaWROFgWLLVDC8otcx#=&0ni< z{-4?WL0AW6K5qwnUI8@{HVQtU7$Wicw+A#nPdMVi=c`)_K3`GEH=nH&efNZw+Di1p*%KQj=AaYq7b{klqlHUcE&Ab zkRyO|YlKN>P(KGjuJ#)IfsM0wqZWrQj&H^lKG^?S^x(@r#D z7^C&bg6oRKF+EC)u^*mhJIsDQ$bl`#I_7Fe++Fbu#)vkT9d^I^@q!Cw+(O*RVd6!~ zhmw!4_%rO>*k4^RhhA90rBX4LFnoAAx}WPS+SbitQ)t!s`=}EmUCe?Nc1~f$bF6^t0Ft zo#_}}*{8b|kJQ}lA<_(b0JZ8Y;&5_M>LOJUcYh!1Oc6)wcE*@$^fCk<3e>AU*l_Ds zPVQH?UAo{?s&jox-6s5ucBj&%--izqOK#>sY@4+nRcENP_@iQV(dAJ5{^``Cv)jO4Zpca7DsRdp8R4)UrMlPSw%D3=}!>_q?9aVXi zLsOTk+mvVd7YdvsE0-#Ke!CIAbzOGpMg(Oe*W{GpE{J@ue&pkeY4C;VvP<9IE01xl zMCkySdce;i-J6A0OW}g6}3PF5T>>gz+_1*#nI_4L@K! z6ahHAK0dt}=Gb|cerBNT=Tk}f1U{J$KaczV?g#kpyOS>cOkNpr3I+&SYGo%FAQv-( zGtSof%W6gag$9R$VLw~kd z%b(oh)FKvt-qh$zvW1de*RD>=orf>Uy-?T&oDIugp?iBo@1=9qoE_x*mV;TB;jb*+ zF^GKUQles&C;6y*`Wri{ZyE2^-E*p9ckk!QJNpZB4w;|c4&BY$GMzfj>kbYCy<}ON z=~71yU&%&ek0#=o?en0_^6sp|yE8Lf>v`%=z8G18lEPv8^2H{ncW+z_HW^cY|HU6+ zbA}Om#ghNeCf~zZRK?$Ljyoj}=kIleSC$*-6a!F%_G(q1&@_aOy6rrGz9E1<6RZPm z?FsbO{eZUh09sc7ZBRuAdU~S=&`tLPn(hH~LmdM8a}{CVZ$?u$qL}#W$_?=J%&iH3 zuXvKq>C27ff_zd^G{l!KmPe;m<)6r z0<}Jf`Amh}JH|Jg%A+oq!4G0&9QIA_VZNPJ!nEydkJhU0rGPG~>`F8R(uoj3JxkJT z2UxY$PD*)bp>(Ie^3F0`c>MYnsT^6!wj$D1ubI4)8$sL(*cMvEe)W<`-mgYgA+1wH zEp04sR>P}+BU(v7*yIN_xyNqo6^>{l>x4P_qg?lkz67&u_4Q75?&C-UclXRATpCT!;pZ3s=_S)JaU%o_m$M zbirqURt2Dik)IiB|Ad%V%kGM}8l0cD(EQB2>O{X9iu(-Fs|MW%=uwYF{|f;$&JA>+C(z*g0iERmG(`Yy?*>}a z6X-+t1G*+wZhlD(0@~UQ^tWFEk_gJ>-=NN&GfLAdf5U7qRW~Z$m-Q~D^vzM2wY5+w5fu1vK4wZ z7p}^pdmjES#mzMrY{H-PL?zSunpi*1H~!8mIh;}CKbqKoyO`gVM0-YR@YWN&_Ya#z zHr(g@z}p7ucXI)+rUoyVl^++fWNbX;4do{@NNru zkUtaQttNOqT59=>X8VEHc?Gl|71YF6HE=Eg?)}H*=KpZWERsQY^8>C6UsshD1g^FQ zu6-$;GLdGjjJ=7)H;P2@d4a8(hV8FXgL!D{U8ga2-oPtP*^oBl37-sfxl}XvoGtY! ztNX3u4KEgUk-}yI_2bmgKM$HkQqO@;_-^RS5R$wT4eR4tOXgwA>NddV9^uMn+-N6O zE%F%l#u~aLVatgmOY)IBq>g9#*(DJjms$5Dk2d#|>|pTPnuH1jX$5ANFoGSvsrAb4 zn}j*b&?Q}AF08!ioliZE7pOn;mLzQxEeWMDjMbk1z+^m$k=k?eO=-4X0WQ08jSMaj zS16uTu9;ksQ&nL=x!y|Lxn@c$Dt;e||4?_R#T@pQtpfJL9FDq5m~KK?og%VPt`Hxk zY(OIohM-W-s}9w!+SCtGtx$fxMXfg8yMG>NJERQ+5b_3xq<(YVkn0BY8_#D;L8Th%3eGE^|4Lw%&Oer=KBt5i38GU>QiaKSm)+tq&MO4x3@uznK?8yZ1A7E1Z<`4^4s&(%zbbHLR3-D_4^u>68&LgJGiF0JC!-RACWlylw7%qEah9O%&6NZ6%lVi6|Oop^F zBj9`mlwA=g4J?cqydW*%WNv-sM;sAThV5R4y#s$0mj4BRlicpTkX$vn-MG-)bNCXP znPG38mT)30zZffwg&cK9gVHwxhGz^xOYD%#w%`J6A;G!`YU}pMnVjH9Rg>F|C z!FrL**(*7L^H;${2nS=U$gtgFeGCL-*q_dOyG}q_LPhSMT!&WrA`C#$Y@;%;!muw= zl3?2a*?Db6Rx{hrF|xnEPd-}_YyKrziBDL=EcQ`lz_skiFI?VS zWbcGw06}&%lq56!`&qRA{D0AY9f>atmI2*EEkP}!crPEc;H(a~gCU3bZY$w}^(n-r_jir| z1|M$YtWRsvT3QBJABUh^mH{b1Le~&2N|Gg@IJqD1mrdb@cv5KtdUG+;SxA}Qe&eu2 zE!X3)++tn6;v@JKjBdtE7~PW)Wl)Un-DUVD_cHsqI^BS8=2hpAUT0`^8s@*M(lD2Q zPD}t@!-?l|+wn>`_M4*x|Bvs612&@!)aBnYpi9jyLDu={OPFZ6CRSI#9V6h*7jW4W zt;Y3Gs?k@}7_kOL8GBYd4_E^XXW|pbV!PQB#JugU9g=Rn+kP$R>FfFY8^;_=oGu)y zG}{)IeO8Q?E!^GstJ^RY_^r5u$aScjq(0xQ{MtR2%q@D^6`PSuf1aXRh%JEDnjk zgT|e=B@zOeT5Lh=KQ%EnSBN_y(Ycy*K2x2OSt#A#hS_Y}&AXW|JAf-0gRo_Ds6#kZ z_7)!dn`73&-D!+Yavm_u*h=<>5WFQ}ubdP%V{1y|o3Q#kF1xGN=8sAFm*{;e{P6{D zx!%IC5=%g7bksdL6}Dfn^MZtEC2Rp)>Bh8$Y-e?fG;gsu;?vEQOgQ*ybb>ez^Iu_J zjqgMv2N8Fv=ouc6|+&Sy9&qoUjY z2SeBzYdxqLi8UMGTQ9p*+z+H;CP4mbPDql-j}CO2PwRBH4b@^}0oVxCxLtZqwwvM< zz!>!C@FI*3C3O!nj~tI_8LtMMQg9HrC!;Y-5PNe!wIWgv#nnvi{F(s}iYqK14wjI= z)`)J8=G~sL6}x@h6uH|wD|&O@tVZ3Q$-Dhxpxo_^BK2-hsiwLOY@|0nf}QygzSZ~V z#{54EiSlT7|2M`@9>lj^{l9D>=(Ctqf%q?HpHAggkyk>50Gp$o_fOLE&W#p!?^tD` zmLkIAUO{&bU)k@@W-{J`-Z()oO_G9RvMHiAe0@R~?!wh`TzmqJQNpa;Fq+PV7yklG zR06`aN;IUTQxB>K)Jy7Kb+>wfzg73ETX7;O$KcGaP~>|n-@;{$2`8C(-+XbXQ`<8| z_u;;qwX;1#j<=2Q?G~Y@EN(z2c_Ja3NRXLCmZ1wQV-eV1W5)gn+BAAv{a6()|5^7! zV1B-t3TJD%vZ#g|?JWy`CVS@i<9H4*ANOAkC?3O1ae8)RA#G~I?dees!TaqwSVAFK z37M5}QFYYG#4zhz*@IB)N&FkUtLe7+R}aUl?>0cOF&yG^i~Aw?y}j=I|HKG@u=Unr zw%__50OkHFwb?Tt<~g=w1HLF}u(25tX@5202#W)K%U?rGoX_roy2y#+uQ-8lp96wm zdDBTYTv+A82M&RlBfX|#5tp!0Hbb{_i_^eoi z2$~C?U{fKVt(&r64hT|C*morNw=M2a~jd&U&1$|>R||Fc@-O} zK)5wZm$OCOXO`AO(jhFIiZQ?O1#x^Zff-!OtwUI(xKqNTrt&;(vA5!4AC^BRm>fzX z95^W&GKm(W!2VHl1IvcbSaAG-}_6VnmfYU~9QnysONe>EG z&$@k7*c<`NqU{Gg;UE%6-LrM&^T9pW2-YAstgj_l&-jNm!~<5Ifc2&uR;C2&6aTPS zJGqUm1*~yySiuskVg6ygvrdMkUL{z0q;9Zdl~nEAJZV0kenA!bIr^zEae(q&1)kR& z=%n5ET7_ZUj-t!O1qwa3xyb3>A<(|?N6o_`Hg~Qu{|%S_>NGu0@JTjO!!w!iWYnod z3AEXB-gx?QJnCnL`09x@mxv>a6XHBET7#EQ@OIa(Bz#IL>UhDc#^EWQ-2NzBpI2?(x)?`r$D>iUK`NKaz^f;jKo_@kh2 zn0&SJ<1cy7FW2uqBz~dQ`-J+*rakAO9|WE@6*M4!$uSK`v{hf=)J~_~5U=jc2VFx| z)C+EXL(1QpcQK1RD7mr`&AWS>8ibcVLb%%0kTtJu)H-6>&R|LznIwV*Ybhhod`enJ z8<8^d)4h_`Vf|AWD{PyotMX)};jI7)iyp1TtEz2KIxt>UsaUPV78wE$8@~U|WYWTa z-h$BPDchas%aoKFx4|-?BiE$5hFb>o2(>tZH(DH_`$YCIxDNGzuQ=oFUJSPO1lOSR zco_q1;9yYUUG1H7lh@)vWQ<3~p|D`yVak~8HPXT{oif#vPfA&Pn ziWr;-5in@6>EPtb+TSBcQB_HYsAZY31-|i6BQS#FhMBa6WOKfJivrD6p><@iN64$r z@*48JifY7nFzFnNqhKId&>VxaZKUpO8}4>%)cyTd?@Nd-MF9OiNC(=&6X?$S0sZwU8E91j^c%Ad^w4J>K)=2p(62&eZDyrH zK$p0IPV@v?weo#{hI>$&Er6D}fyQ_O-FiPtKUpCIttNnOH&eV6&R=EaG$*pZ1}~g) zUB59^7VB>a%X}It`?XW}gJ&oL@`<{w; zh%E!WeNP+U$^r?)W%IIjfqjq&S0{W=`^oE42P{qDo3y;k0a}I{@dp-!_(^x`sFC##PFFOQbfEwIsvRWtH61H~*dE47gxC-%}M@EIWe@x9!sJBH& z6&#XoiyQn_T^Rx8lHcloJ~sNTO7UMlmi$(~mG`4_c&Rd5-j9O*7cBV3LIKX=&uDxz zyQ(MOfIRl%n?81#Zz>l{e8YBl^3Bse_@;>m-^6+F&AA|nZ(f)AW?c~RO{~l}yYBrv z-z>T3!8c#u^X8k$0Hix-n}Yq;PX4&2mKtsJXFd?%gI|6RF!0MYObeX2a~bW|2mIk? zpZe(Wb%H%{1}>A{Gme)r|K&89fA;*>{PW&4fBZ9Mn#4a}$^7%mG`P6!Vb4hHKUe6< zGeo?B;*t{K8<(Ftbx4+qnZ{F~!Sm35LoCg1;P@IJjw{*T%-Ugrb< zM-6_*JIJr=D{1?o%ObsTwA=3v7xU6JbmausOSikm+v7J_Hkf_x|tJO?|*9s?hzN$iV&!T-&8eG65 zx;-z`M}t@2s3{&zOO?F(;I;KhgIC|fnpfZ2+uD|Cskma9r3AQq_}35NtAe_YH(}&# z&2bd(RVEJBo}ZzC%F>>{DAhMi&x?cJaMratX^}@~>RYDP;#JX1!F9?sOjiRc=#$#L z6M#}fKnYEsoS;+)HocPpjEOzd*~!6w}yrsU*p?Cn{lj zMF0G9vaWph|NC5Qz*hD*Tzbm87?N&JUC3!$+OubB-1g*N>9*UvEutasufm3? zLxt4>JU7_cAh|KYe;6C{v{`D*gJwfVzj#pNf~13F6a_Uc@%&c4C}Jnt7s8cBHc?;z z@El9B>n}I_-ZK1l{88^I=U)b>+gb$6P+R;9)KkF{)UCl{hT?rJBUA=#XM}n%&_C2S zWT@Q$s$eblj1lS_PpISn1?qI!VPpbiRtXkR83xoEvpU`0bk~9yEhVR;?xhxPuL4T< zmTq5)n9di&tgqlZ>SWhJH zy{RYko_?V}?i>22vRe;avBqhL^6*a&=yxmpLI0!3C-j>#^rM09BUd)W6Z!(b(1-bk zeoKaa9H3Vb(5rbu@9r0RxNqq1%g|p2=v4*uCHp;~SCspMzI>Zc=yzqk5yEfljQPr0 zPoD7weId$o-_R3f+MCdI7gA0F5IRhk%>=!VC-hrp?vEdzvXdIe)zWE z@|sZo@m;^=SMz!KgZ|6+LHT_D_?JO>CI9q)oG)@?_-j9uPyCnmLwT_O@;E5p;h+AR zP@euT?a$-o>&v~y?MNQ1cb>xzY{kw8kyi9BSJYLf%GC4fS@pDfNAe7YN*0Y zd^3V-J!h!3mKJoa;&mrh3{Syn%f929q1!o+8lL?IHT^_^g~al%2skRb0=ld9Exo&561fgz)3itj9Rs9D2ak~f7CwtTZFCsK zJkQvs_WI%0lUhs&7DNSi8GeTu68uPcbPB}X z?1Xb50x#u8a;+jl#9k;og(Eg5Tzck}L(ic^4L3NVw~vzLMYB;5a$Gx>_nyC1MrrYM ze3vU9@bZP_e#^H*d93go#5qEK1g^cx)qA?1f+O+S6I#C)U6=divFXNsDPV?tX-5Bl zz;jH?$H*DwZw?QyHNEEn@6e~b=BE@N!jX9SZw+rZk9t2ty*Fihsw1(c4!4m<{c%vg zox3MxIl2)iyx_iq5Z)p99&51gu+TiCK=6H70cftuQ0&(BQNH}`hrbW{ssDcO4&~L$ zg|p=aHsm%5-P`$2&Hu8ucy&JCsYRUXbQ?9E6KV-pNL6*Sx)Jaz;Ipl+Qdg+U)upsv zOr-w9Tb_wApMm~|lE-`%<}N5TA)EE`>QEj|<;(KD%P-B~lp)#xk$?R^@ag zO+gJ3*TN_3{-y@ZSDkqL{7l{$gZwXH5B1|hKQ{&bT>dxw*&hBZ;);PSHOVqz3&1iQ zRcjgUp}T5*fcF1SKZCX4JR5Ng4w0>M0NaP->FhaMKYPy6L+Z2A9M4lJOIZF(0TfB6jfkZ4rr}fyBI$GznrxD|NFs~W2Ls7VCIWce;xIq+ zbC9WsMh-ZL|4Fls*D9hMncCll+TXT(jM&10CIC;wr(fbqTr(3n#q1HuaFf7=>mNEhd2hh^Ro}J6tn0EKKOC zfbzu$M?r7Ac7p`Qjd4zwNI2j92FYc1Wj2)^9!F;uPU?s^T@=H&jZ(wq(mrZ-J?{4l{j~bWAphW!hdl@kPSCu*5bTW)tLs#ubYAyQVT?&Rdsw?)nYa(0 z4~S<0ZykTfHehm-PO%pI$Vm1JI%xKcwQb{YKS)wWynr_!^^NKcE@`>OkeF8(gPW3Y zHUU3Rjpg*LfpCl|w$m1S&S17?v}Ry$^c!{v%s}?%7UH{@$+bYDJ@S7U9;SH1T|M$pT3zlqlhJLG1|iflZ2;!mGeGI)b(3OG~oj`KSQAE|t6n7%+J?3aag}B^j_ERRAvZ z**G}yb-=m%fImGe;;#E;aeOQG)pKM8a)Qa^zO`w6T?BV{BEZ@Wh6(JA_K{ia%Pj_F zNbIWH=)3Bcnx1BuMwa2I14c@h5yQRC5gYSr>I@{$=XrL(aF~rQU7vX1DovL~qlLL- zGplqJln0?)+`dBPHeT+wpFFSK@a1fqSjsmT?Dk(y7x2v};+}5ItTTwjLC7n<*ob`& z8VxZ{{su0_-&+&}8JELRhNnc;AwhixGMz_|0O!j#X>+(H!P0HJV0{z(HA7g!D3s)z zI2~)B6ncdD0!?x_(cRu(($d$;gZPb!1T~56wI))-XMBl65Q_{=`YE8={Q;ty2B@AE zsJ=Y!M)k50m9@E>BkE}=tn)}B)>*9$o|oR4_BH{ejO@cek=rRMO7|rjOZ7Utw9M^m zz#X79jyq1o?O)JDT=s!>CxO){0Twu?o>DKXN2L4KTu+I6FNVYx1br}L-b@?Z?5fWh z;HI53KpCE>kBVhayn_njhJ4sMkIEq{U?;ly`<%P+3BW5X@I(A6Q=bN+vZ?b6`%9LK!|F&o z82{=-SvEQ&ZRxPx`IFVbHk$t$OLjqfa1^ZDm{26IEGR603vy9_wLa&PHU{$-x{A{N zs5rq)$2fVL1K4-x$#4`7Dpa%&c~c=g!lRk;k#0&Fw#Q(>5>6IV10aA0$d3E~A%Eok zVU?l6{zPjuTrDz`s&8@b=;AW$<32wl=uEM59tUD?og=vzNoGuMV$WkdVm>=r`;SN~ zj7}TymuD^13m?SRR6uLy?luyZe_Ni2r-d{Xm$L54rKe1ig|oS4%NwKH@b{)^fx~Md>JE$bN_q?lb3tRA4>M_u8PN@5YfR9kg zY8MV=MM5zOf(P*SP|vDhU+d+T_~1hvJUND94zNHBO*txwEkZ4$i2d^$+IMCYYEim2 zoS_=%DFn>XXpq!xNwPBE6xnw~8}MwgS8^3nAVvI~6}%~Zd0u9Q{U-X7CKPY5{<$Nu z;m#o9W)>$b>mkXjBgNpJMlYHa@Up+mhA-90Wp!nIr82%_g89S>vRW>kC8+^p-Hb5^ zyX&K`MZf*CPy8|XSL(pbw{Vfsu0$h#!?-68;p1M{rCWJD`JyqD|EgKAedPaw^7sAQ zf&LjRZnpS=zY)sKF5UI$2t&Pr?PJ77+r^303s&6$X_a`@*-8<`HmkegXPddHu+wbG7;X6q{T{em85Io zusOZ(VTSFLMsA5lVzFq4PA0qigGOEnD_Mo)MUT+Q8-?V}G?2GY>r4mbkOjI5iOk9U zWAsSj?Auw;p-o>JZR}7^Ss_x!kg^KQQIZ{^#kSO_T@l5)MixqunBR&pbh76lZym z(MBV~qIF9oUT)%b8(N8sBzEm9A7mr}8L{3S0(USZGFB{f_r^lh#LRJ{BrZ4T=F!C8 zU`Ml?-w_l5Vch#knsA{aSY8$O;EVH<)&hJT8BaKz{?v7*+ zxvPHDo2rHzt48P}!>+xkR~_^|h8Hnb455m_QEbPH*ySVp_S+2h2)u7sK_dHCuq6nk zSsh1;K_swWII2|aB;37hj(VkJE(^E5&sT>DT-o4rwJjgU33nNvoz@TN+&M(M;16ca z5|)60-a5yo+eZ!tE$4+PxZa>uW7dAMYH-riZ3>o{`y6P35O0!?2q5T3j%Dcvb|LZnC z_KR49{lab@{tmF_m^Nv)b7=K~;~+BshULejj+6@>{zG4oyyw_QDC_uy*#=MTCzC!K zf)1&+O?)=-*U%RezeM$H(P8aUZsVh*4~2u=ik6h36bQC}nY>>5-ifh|d};lc*>hu| ze}P84Rh9xjb)qP_);0GzJS5jTqis&)w2MM#nkPzy+B{Y+9TZ^Dx2z3Op$^iwJ$l>% z&-~xne0YzWC@v`W&^eZoi=8m%kT4M?+qS^#dPk@$BGU#OK-TrK!6_jfw(l6~5MO(R z%Pet>yF;RdVM6PW2jmW^8X)a&&X}Yo?=ngIo2InCv4&IWqx@U#elQpS&jYW3aVc@R z`;5w3A3N%6edqCsIE*s%(WRH&b`9OM+{OgsApuB^2Zs(!2PJzN;Ey9yz zj~)(15ia+4(Z=|%Q24jDwZX9)a)M@F{}VJRuMQzIuPTgJX;^-XCG&sPoj5b$@C)`x z=fUlrYCQs_OA6il!7f>wjrI;lmrUccJO08AzLZS3NEu5Z6udpL>;n>cnP88#u&bDr z!n~FX{xmQ*qni8@%?pcROM>?s!AqPN>W^^Xc%fuY>f&v?ts0@ z8Ua9DK=`Dp1Yj&=u>eI$qlvw+8|Ofmzr;45MWA{9jOr;m-=$#;12CAM9`1A{ z91feBR$07_+Ye{wyksFbzyae0;LBW znbmlgSZKi#XykOFYe3f!d&kgb#c1$39!Sb0M*j!Lu(14(5vuvlL=f9rs)km9da8zI zfg)8y+zIbY4G$_+1Lb@&bie6FfXLU7kQJKi#8>|yo=nUh1Kpx~rBnm26g_@l;>bVE z;z+LprUk^va$LP42@l6*k>I?fjWgHy4zb*MlxNozK>LhBlxwsi;Ay`Tx~1DZ8haQa z`F5e6WCx1E@;f7`MkeVcOZ0mof`Ose%XSi2lV1B7Pq0uVe7QtodikQ8kc;C(G`R># zoY3P3gPkTAf}J)62!#TI^<4u|@gZmvQf8J@5-9jyi+74alm_$;fy|y62_;tj{(4?X zNSgf#OTi^Ln=N5){YWO5sD5x{R-Stj25MMyKQc(VH(uZZX|g+>88uINisEV* z_x~?=%)Ejh<>R(UUO`#l^<5S5o!)B&JLK0{@J=CT;l|2!>6m^R0;mt z&bc5NT)}R!v3%Q>oLA0=CZ9tJn>H+fHjcQ#bHwku7c4yD41hk^L)k;=8I_FB*V456 z@UU^(bquk04Q;luV0+lKQqInN(uD}{IFE~H{|*0x3?UnARK6`g3etLxCt4o@j&-C* zjdbJ$2p7ja7TYd%4i0jFuS-~iwKQT?4-*kTEb>7_-tB;}sUMlKUpAqLF_|rdsFpxE?!M_F(s_Ek+dzyfuPR-@G*$p z_?diFuv2gCz_tpMj+9HA@=^uD0YHDyG8?a!`sj~)e|YuB1FNY&X6pU1%CkRaVt>r> z)gN$_9Sz#9Ah70Ugh<7Zg@N z=)Y5<|Fp5z`jJsTs@RVq72fF#3VQOvXeDx9Ks${0KYM!0^^WpB)zXs!t7+6@xjT?a z@;b7;$>B_LA5uGTc@F(sV=Xu=UkTe7o|53S*0Lo0ZH=NhCqb|?$vtMVw=>><=;6fB zC&yveIHiLKN2F0`%zxg4n3goXf_kMA)t~TErDmyjLW}pIV8~6E&JFG|G&sBfY(SI0 z(1Z3+N=dm(S4u$cLds)Sjqh-jMt6{{Bg8ro?y(L;&^quStOLpmcl2;P#Og{?jYUfzZ*mRI5DL6=6F2A}=%4X<%hY`8Q5=@3o9%mR3(?fzgQ ze6U*nKv}5m^Z@DVy|ipC-7BuO>)AKkXHXOhw1#3J^p0YR#(# zXj=FibK6ma=Vfdwf3v>N$yUR2tn3iaEe=#?}>B7DK4Gg z;?WXijUKX1KL?!s653v%Fp>@Dx(2x(c5&AjO*Po_^KheW0808E-?H${W9F@czo9z zTi-U6B{87;qNk@Le*PA-X>Ax57NybNwhg-|ym7L?#qZ}1MuC=JR$0CdSef=LS>zf5 zrM45Sop1>fZ$GO_Tl^f3@V$${B-_MJI-HF~Y~Zs3U$71x49ZYgevG_xf1s*_4@%)Y z1zaxUjlkB7jXMjw)ZujsO05~VL$!AH zvpX%$t*bun&RdV0(8ZO-zO!)E91`R)(Ntwe7Qk>nk{pf;Igs zjKtpxyfq68V5D9DM~BTGeYDN3BfjQlKD3pE&hfxz>Q%6^u;Yo6b;VK1!v!@nEdPBG zFvmjuJh>8%>i~y}CJcrb`c=xvrW-s$>17W$^r zM4H(}a0jl6gLV^Kd?<1IQ@C8RCy@!I(N9p4>UN<`w`WH(TLQeT6NQ29l3fSTw{rT| zT2;*YUWzpvrNPVRqr%sl$drJ!VU2wKYr;thbnO@c&#rX|WN44PlGlv$_)yU$6r8^a z8Z47_gJo;sDv{*VpDnH{oC_G(e98m7zW!z~a2ZOJ=)8ZEDEH$t=kpW>1}@~ixq^Db6^o8yX67oV>Z;%&@6C`=@dXTrg=pH0Z z{W}Sd$?sla;RlM8YJ@CWN`%VNK4paZE1TcsugF3!ZbL3w>ONk z6da?=C-%=s>Fi|TVlm-d?g=~8MAbYyj$>`<)h=6#)UJebtzD5o<>Td^^y#<<%L_T5H$^QX+9=BIRl z=9lN5bT_|$EJyl^-nx!J!&nh}D#y70?ZgXu>)g-)>ILhM)uw1nbyS3nGV)>~e7pR% zH_)g~5|jRUQ-k*_Uu2Xm`r~4F?0eG?`>EDuvLP)WN-g{HIn?!OSA265y)1ansW};b zG!z{KwLR;fyawN#(spedJRB9f?PXulJ{dQ5b@=2{6|sk8ou}jBxkf_k>6F%Lv!Z1w zZv(GKZi4Xc{EgBLeg?T+*DG-vlowrwt#dkHJ}b!R01t;0D|`hBNz@P3Pt}F$Y>)U< zX|`KE(`*MI909nVSx_de#4W6CHw)~D`^2ZZ#+ZJ`BPoOXb0>(7z~-WxG2GuUZ|xal zf=J92{5jL&=#)iCF)TI=g3lhsJ?ALQAKi8${GIsg%X~Ameu2|P*}+=lVsw(d#kT}S zozPEYTc^>WXQbOkwMn-PNMcu4I9+1PwP38+U=}eu?^w3rb8^9tk6jq#%k@5PKf0{h zTt40JBYHVC_j?Ya(;BlMzkS}j{%(RGoW0Lu%WAfZ(XN4jX5<`=r*YO7czXhHUv`pJ zg49ip`AaKY+D-R5;GIBsVPe^#kM-vLfx=)N)TD*7nygvf1Qo}Qg9bcziFc?C) zdocdQv_d%Usc>;o$g8H{g_gl|pTKVZ<~7|tvj9%@Nf9fE*8a2=gyV!Y*Bk(rmjcLj z!202xw3ylPF($WH7{nuUtlW#^MAOkRBOGn}_!0Vufp;c8>7H|l2|UGI@rP1kh$AZ| zkTDM;mR)mD3pEI^7M#rg{*YPGv>>&NLvn3x}go4;Ks8)Bgo~|Kx*oEVuK}&#yoSu-8&f!v;k*S}-&sq4nfIdt`Y(A8I2yZ6B&ph~P-w7rkc>`ybwV?}QrRo1!WumbMQiLwnmxJ_X0ST}ecg`gu-YFv z-K3VjM(U_zJ_$V&t-R^>g`mW-4{=u<1P~l!mRcPB3gfnembdas1ziBPCuOJE4i}{s z!opvaIvxHo2nbMJOs>5ahXa=^KHrkjo$?J6W<9$D=eKqQwuUyc>tL};cKwz0BJkE= zGzH)ShW@IcUfFvs#k36r-U)@&4Sc%Op&e##xN1o#hH#}8TL#1yL_KBbcy%D0-?^9l zDrk3Dha$*!l(x|J$`-pN(w;h#Q;il6Is!|bxh?gp@veOs4;HucsjD@VkQkyJNRHIi zVfh6po;j;L7i-T9w%Ff~w8yf+Z=%M=Io!I<;z*qRVUQ`VlwHFyNgbbNhx`9v{7<*d z#|{Nk;PXwP^eAW_NFi7PIr4spe9U;7@K4C+nmJFy{!jSd@(!{G8pFDXyl>x-De5%~ zTnL$;jWhWIXCP29>;=G^j+_9_U=hS~fSVO9MxKkn%I7J7m{z8C6h}7mVM$@XeMpD& z7uY9@QR#%^2ph_Iwn3}<`gk@SZ!0<&DJ8^57cBOGbo<~)R=*WgJS~O{_RtaIC1e*O&H z0B%z!krZmTlIG1*D-HAJr>;&{9t%jo2|lJFytl7}zwI-QW6MTHLQ*-HKfHsYT|#-j zz;dVRP-0n|NxFI-lR)Bh7wVrl@@x(2F0)|j*n=?8mU~2-^AT-{Bf1VHfWzS>*puy@ zM<#3zn+7Sc!4~-etO#-yHyG#rlX4 z&nfL9b89FS5CkA0l1q>PG0zh=<>I~dRc}ZQ_`Hczm*@gQSixfy?7M|4n3z-(o$U6H z;sU)79_8Di{m7;%nVK!}BfeOQtuO}etJ;WISczCJ-KG!+B7aVu;dBXt z_#_1SltNt4k((?7dUD~}3A>m7&6V#x>5eGg!T(t6r`yUbc`O7IPZqHS@!)-TFIU0) z&JXhrwbN0##&>n?M9h*zv67c$*v_-Jcme>hrPUHuV&&*ynK#JITi7 zLE&9>kqQ$NHs(X~X!fn6&(m#Z*z#rWsWJN_{2NvV*6|@u)?27zZ&7!`&u($WAUaQ& zLjckUK|t+?Ac6~eHN(#uQTN_N4&_mC+CP(2g8b*oxH#Zkto+7j1gGwMQTZ_rOUXf$ zxDEe(BEY_`&JoW)i{}sh>mzP$PI-#E;vT&N?87MJUKDH-ceUKP($$2HDEWz_AKzJYhc;+_L8o#g>Sa(NIjl^ zFVOXkom7u~JHgPVNiY4YzEQuWAAO_j|EIoD=1<=!8!zb_O8Wn%Z&VNPt#2Gb-C$kW z|EO=gG5%lljak0*jj~rIeWT?#)Hf!6??c}x)AWtA4c+=inOonuH11#Y4O2^_z9Fq2 z=VEwK7>=!`hYXkXkXK0$InFnlTwid^7y3p7aUpG^QQmd^P6X+^z{a&DY0zgJ@+HhX zjpwjxBX`y3Mb#GA09qX!8RK!8-NRQ85|JiUHx@RBIy2yvrgD(V^_S=jcAjtY?2e11 zc4XcT7I6nQ1`r_j=mIokVQ-QO;#dE8v#U;!rhk}#2Lw&5?}KhNgw`~C@7f2f_%hxP zS_cT^n0m0b|) z)g#JCk0=v*M48Yderbt%M47Hf?61#Rx@-Brte(5I)w4mm?TUN#1S`SoEolKoBje=y zsL<){K+~De#aK`&7UOg~n0+z|&RXG8KI=Z3bj2zy$u<56z;03B$Ic$R+$X&{f-5?L zZ90N0qX@ym7(j575bUf6r!Ck?IMT-Zf6X8OHWrOBUQ9aNOb<+rtZOJ**G%hFM`GDc zF|Tw@Y0oz(vI^}57rku5w7fVn1GvV->UGhyrI)g0ZRvO{E%&1r(K2LRq-jfMHEoG$ z+EO-NghbU*Ib5b6jwDQUD;a;+!M||@Y&?-bu4$!TW?cUPS1L|w_woVnV*Y`;QRp7G z7Q&&8PSduWjQ@btg#+R_M?C)r0NUJYRYVJ2t(w1(XqdH-niDtuF$W56~ps> zun=AL&Q~(wVgxO*G_ewEr-GUTN~3KC^gOHT&@Jncth^^FJHyc`B3@2@02);!lpX!` z#!obpi~eeTPjH44Do|Md8B%seCg{ozR|zoE2WUJFw20dZOt|v}if-+-Z4>IvfmtZ{ zOdhHaGC|o>lIpX4B&a@2s6JoK(p8_mRF5shFsVYah@=1fo}?%{mKZgll63o0)PU+X z1vcdiwL$+$hii$4h5B=U-G|gRFtgguzhNQ;2ycWJ6l;nPUuV!Uu_)Pf5LBNMR{oyY zw7b}~PXC+QQxDai-0|vb;Q!*G_dr`Tr3W|q_fdLs-}@J(hXP(|OSr|J2D*+{y9R{=@7;phlM~67HGxV_S>-v1aw-?LjW|hpA0GNrTx?7RjiB8u zG_ypYndP8gH77qAH6o;35&_`)B^!t~QzLz%fA+R#Z^;n_}x zkqEu~JGp$Sq%FNA7ruan@}&K}jZm6Eyo`B76x&yxHCTL-VtFrN?T@3dr_goWF19Wu zY}9B^VGzq&TXEz-hidVdhYqz))}g-l)R8*NI#g_cq$63!h?9rr0oFJ9dz1d%5?Oc3 z@TEHq<+@WZt~#YcI$5qc_2P|bDkEMMSvo{6h;CwFLN%^S;tS+P@h5Szz zhLolT3&Wrqs37UY7WDi-DM+y+NPl5b1_h~F4POe9UvtR6BG~f|A^6aU;D_oE7RaZ9 zvu7_9bHr!L)O01@k>Lh)3*+|H z#5bz0ZUqcCs#_ESf-P>M>skqObp5F19BSpG;*!g%$4Tw_3sj|Jl;4f`S4nkWl`rF~ zkn(^_=wjG6Y)X#aPyAb;djD*Ky<@hH?sxd`6jf1=!Osc!`A5LDa2U!))W6h=h5qvw zgEEGmH}*tFyBG|w6VB{;;(iVv=vGneI4-=SlGr0T6!;+P#@2Cgo`D^vt*h>}aI zXc-3Hippdb2-N6^9~f^&*NX)31a&0lj@9DgPyUQZCPMf|Fj8Ds;KHX89}AuSWivSa zkoJxB`i!n!Mne~5yFFL#pc5?x=wpQgoEV!g)_t>E^K8i-pfwee?6KajQB!06=A$wM z>sTX~&K9M@6MB?fnk`Br{pWLXcd$rZ70AI2#D z)-0|Rb*UGlyAxaNvFyT=#EWf&b5rYF{XS57b;8!h=W6*4xy7+|kI`;K~~73-t!w~*T#=97o7Yq&?;lp_te7(ze(94TJM zMtHw~-uv>eo!3A_dnP|=uQ(wSpnRz)_Yq&NKa?N3Cwv>d%aft}3sLSPE@I;bdOj!4 zeLmvfLAjPMCE7>)JHBmGI{MFpvhe{uAC=EMD)Sy7-n!jgTQy1CEkpk(u6iu|f~0So zruqhahKR+wwL3UYiaqc6FUX-_MwsmGPmLla5Vt=y$60E^Auf4 z1RqTGZ}^!fsQB{@`s5J-bn_eFIxG$j&clx)Y6g4(bf0jWN`=uU{6sWAGkZ4PC?*b%Aj6fz~>fye$?H+t8ig6#@{&m8RLwLc5-O z8r{LVbwJ;|Q-#K4I~Op%P8OiSne@pM)U7m;7MrAr^qI*dQdKzWcK_Ju;)nZ<(mwix z{BelrT%0YL?%C3My(uXPXJd3->h&D1J0zNt&{5Ocn{{{4>mzVt;BFcM^Of&mLVez^ zKX~Ww7y^d6ZZ3+0L;1WQAL%?^d#;E>^{zOSsA!^dPT$Wdvz14@^6Q(8FOs~TEd{04 z2kc!!EJY9l%4F*tV($`a>l|wD5^n1petq-(%Dv%n!pf}G;JZo|dp(P-zOhPSo-4rG zJkJ$qtykc(1`_<+7TYZ)sDYF0@HOK$Slaatx5gw-HbMNW&Rpn?jaV4K`6b|v#a`87 zJ7lq^1h`zM5MRI{_=A7fIl_{V91=EtgQZ}9*z`?R_NwdQ{K6l;Pap8W7w?I$A>w6&dWeQk>dV*zC$A z8brvljnyR)v!FV`fR)grbVG z0Mrj3B*+ao>9_+Z(SZ-@L^oMT4M5|_fdJh!gc&n=Oa6JyAlbt5C(2j{xv{dxUPgpJ zOhJS%J?Dk6w4)co0p196WQ12k<*aj|0wD#L_@y7>e421RywVHjL~ooWCNG@#21q#j z$v8XeI8oAeAe@`*h_lHQvnS3P-Z)2j`BOCwC+0@j`4ZxMj&S~J_rm#Q zvKP+E-Z<;XIB&{Vg^yO%a6+n8)`xH&{RnZEt_b$T`KUL}PhE;9&bhBjIQz>uyXZLa zp5mFlw5cJS-+k!S&gDs7I2(E6Y$4;^C6DKFeLOLO;oF4snhkM2?v3*qZ=63?c;Q?v zCj>~4aXzf$#Ld~=7ZK-J!uhGq3+IjwUN~EO<4lopzAoeJs^i2!+8+|ms)RGf8)t8C zoSVzNaPG~PaPE`&c9qVzxFfDjI6s?=IEyEH;XM6}7tU_pIA4-+CdxRQ=r}P$+#I~E zAK!#zdEtD-8)vMHbGY2j z-a1Y+aEu_FrTN4|1ztEidgJ{0winLdUXpPBE#D{KWY%!j0-Ua1h;t(0jP=I3yR8?_ zcHTHGGR`y^XG+tV1o7nuZ?D_eP|05s2hRv}*Z z=et*Ox|A=)Rb?OfD&nBLl6IBZySyfpe|ybu`BgJ7Z+p!z{C!aV&%bvik3W=``TzcE5VTJ#H~N1CIscn{Ys=vK^Y{FZ zKa_9!m+^=4mj27TLwS#X;eRM!@1H+wLiywV%dZAPST_Io_d)rK|1$nizU^PeAIcZs z_CNkm-pN1w?oi(LU)m4l3vRfyOYv8Gl07zgB3ZciRi|X+s(J#Fk>eR^(}`4PWpzkM zqbd-3PCcWpQxB?Z)cxv8b+@`q-Jvc~x2cQNP3nAgy*f`_tIkqasb8qe)fwtfyv{GY z&d;h%{YEWNXY)GWVn{#rQ;c4qPC=)BwE&Il$|(5h3qQl*2h#9jAOlRfrSy}0b1?s* z6h949S7d=zC<&-8xelu?2Jk6Kv1bRf-V>az)Pl3QjVyNaMYjLYt6?4`nK0#5a{Mfk3(wN zM=1X@p;2ETG&{#@U)owbUE;HfM>&FM6PJEBZ zgxi6tZ=g%js7TNpPqW2s>4^o^g;SF{VN-kPpT!zKdrEx9KjKQ%)+QPq)r^&DxGPZu zX6g0L#2f0JPjc78xs|Ke`_)))y`dheG#PrmPmT3HGt@(6rKw);O=G=bhI*)mlsDGu zbu!lLY^a9{#$S592aWX}Hq=9F%@V!d^;U*@r5)V$(85xn*V}2Vx7$z;ts?#OdfyuB zEilwWOGdn2Zm%mQ07i6qg$xsh> z<}>tq$DT6OJMoOW9`2@x>h*px)>~z$hdba@y`J4zZ>pgl?phzx>kTm08)&G9JI$Mo zw0iA~^`0@*!``3ROkuk zOta=r!_%)%YSWc1eU(s_u&1xm2M{6feNc{_?9(#}LhhTP*Ec<)|2gA|5yR(hn4_7o z;BtlWDYlA{kp1=ak8TYy7QE2b__Xsy@l+T4KipXMbCeJ^osr1!^%S4vwR1PijNEqvm--dw|#py4{jU#)*w zeE*1sYe#bf)Ll(Q-4)Hn8Ub%_W#Xvvo|#o5zM9?~xAeW9z|nz9*Z!daTKlX3F^SR@*}b0%X~j)>M*p)NXk)nkpT(9ftZnD;iu)h^aZTq~Kl zTscd}iR4mSa@OFl-h_!8-u-jy+Y+`*d7W*iSHp6y=(!*NdiuGKfF|qpX=oN99 zf*d#^Rws8RCL|aYj)C#0PJEbng~5<;X=#G5MudZ&z(4v$QG{mD>Jbzgt@J>d7j#x=6TbRyr)*<`q$FfQ#0@?khyaZ_EeIwr>b_Bda8Md)KlS@ z$YNB|TDaS@z6JQguR$lk5lKJ*g!(aY>gQ)^dd-_Hb?QxM8#jM(0eQz_L^>l=LRwEY zSKY0osRR$Tl-V&6<%)U1T?CnF1lf@$1#5yHb0ac2c@`XwDp?x$?1?e<$v?*tR@>Ux zCs{^VrQIa*`p9;q4tR}WR2B_wR}2q0B1^~jMIQ~{D={+l<8Zc`V@-%L+lVn=#@JNG zSQRmj$kuVh>p1SVaJOk2I?=J>H!x|KCEcEAt{j6AGHoLUL)Nn-6Y`NYDg<5p(`}=p zA|ZRvwv?!6$Foz7$gL}yziLSNaN)l8K!ny1cPW^M>?&VzY}?pB$+QoF{LSFbvnZDa zAgv3bHz4F_=uUx#%VO^|SV)BsHnwd6}5ZI0lqmB{|b`53YYJiy>%(iy^ zA89!Iu$zWxe>9XN5e`ZhRhv>tJ2DvS+2aIYhP{K8KF6 zBL=(YKi{YS9*y(A8GKlG@(l#Y1>m-#Bv8jq+mh<=|LXGp>J7K#Z3^F(RNqvT6iVwm zUlHmTC4~coq9jacSd`R|{)xmpMoCe4$H>+x$JHZ;qqcw~=7@7ZB?G@&T2cDbV~EAx zjz9I}Pb4w6M;oQmHZ}y8Uh}p3ASyyg!srD)n2Q4CUKz`fop!f8yUi zHUP?Z-PQ8#X6l(sqeB!a(BFVWptox`;8iax8LH)75mMe|0C=V~x! z4F`F#VHk~cb`r#~5H>*7Az4RS#h-1-^c&dr|U1`E|a9Qs;;}73Z%Kh8i3LnCXNY zBlkR#&Mj)aB|@^(S?)`h&Vq zU7&uaexuG+XDfYl6I_O7f)ke*-c=-eGsGf(vD&Plh zizqkXrzR9+YLx}iFLofJI|9)vUdO{M-U{5|QRcukhcTRw-Z6AnZ4! znz4^DSrYDA(^J}wgJ?Roa!!jS;iR=4yvQwS*A3%--?cUesghR|&TJ0@Bc;L-P>5m5 zi@a@+^z>xA_v(xtx}H)eoMaKOfhgEueavF-WlFPWnEoGiUmhPtu{^$;bAjM45Fj96 zfJK6wQG$eUWF>)#ED+>WKtT=x@d>&s__)okuy0)nDxRpI_`oMB`jsajN+3YMGk_?E zoN~+%Ab~&guZM>gqJlY{D}Z8-$w*7Efl3 zw_etEW7ds8bbLCg7HiFVAl4WJBs&8$&|VTFN(q^pV$dzl6Z6(tEeLElF}NoUwzJ6C z2gF0JeJ5;k;ixb3qbB`N&UH4HM)+wy3C~VUd7f)_rTHNt&uo*kz$?VqlJ9W-NzY)? z`$>>~zj5@trc1xMXu%|ny{@6(+b#6y_p6$IJ9+vMgarurm<|DPD2@TpXNMe@9~h6L z3y!5QML;^{I$9I7donFSh*j>dBlJ6%G9z~WhyeXYjiU661NsGMH{3u7$J(lzU^2ai zU6WYuj;%9V2ypTUY1O1j!3*5hZN#{2V9a3^~G6^ zhPXcB{a7jD7|_#_k2(uSlXZ!FFU|Q?;vi<*z0nyH057Q~&tAN&@a3n;@;ML_cI_qr z_LOBn!Y(<<*h9v^9nnL*2`QZ%O;~)lTmkMih63kB^4%VxUB0lbESwC3u#nkx)&MtJ z8i47DJ{?UsQkalw^3I5``=;kx#07-a29lA(UCy= zu5i>9+HDuIZbX}x{@1{+$TYj&HpsVh!!?;^*T2X!HU?i$IFbSBuZ_9TuH6@NSn$Pc zN3woz_w1&f-{y!*PH+?p-Y)o@wVm+IGi7isgqY#8nS^%Rgl$qdpu_~j@@yBj-3V{@ zyC>h~nH>|@Yi0aAIx$CilSc1PFzlCbc+yl{t}lu2!-<|=AfI#O@7Vd2tP2T(xB2l? z9SnG?818dQP>!D9{h)0UEgjKkH1!V&4xQX6=|C^)*=hGox5kNKCnP^`y>AArEan$K zfYy_p5$K|_nfp2;EXe~?tPB9tQ&r_E5k2eYtYBf&P-8d4&dYE=Us^2440pCgUcp8 zHf806EjmTMS&*D>UJT9H77nbl5PK_)lG`Huguq&mmD3TEwHxk-i_Q{_4!mWG`lnSO z#cf3GD>xN&-bC<537%-UM$Qq7-G&4SMOg+T!!z)DhNpra8Y(87DjtSoQr>W2TmiTi z57aE^@Vf*9BLJUw@nN;S2$ zP?4xL;?jJ{FWz{7mOjo(|5?Zj0Jq=KEX!|nl1ArSq(Q`poGhQiq4*&(ybhlKAh3vh zD$cF?ylaKs_f!}8j%jbNx4;bsmywHa2;jVS;u&u5bqURRWUXRRwj`S&V#v}+UiY1+j90)12eG%Dd-URQch&1mElX%ZiOgav}R$|7O zU$_S(XjWyI*?ke_*rJ_yCnfCr(_>mTVm1FpeVysPxsm>KpQD9ev^GRkz$r7*mlLEf z6A6Mo%cKZOZ&zr`$}`&99fM0;4Mv(fg7l44f`JI^zDI&FJTrTazkL>do7ivC?rOY# zko=(c63V#RiEp404j=U9NV!TLzA56~?7}y2OQ$$A`n(^IH6ax*!4VrgL@nF&B4)zciD$Lb8U)67 zXi)I@+BU$E9HHYoNZJ@f#`nb_z47HJ;~S$8e`PT7bGRYyR))C3dQcu>z9E?SD}#x@ zRzv*t8sg(-#Rv%Hs+4bgJSYCfWYMMbl3y)PP>y(tsgBxfM0p2#pGwxv*!eM3Rio>v z=Uu#zn7qNWPNT<4SIDw8IeR$dEmUPhviqLRwELc%VfTH5Gi}iY|vdD54N(<#Kv0L1och!!O!G47|b z-ylg&E{$NGp*8!U5lpEOI3n8`cYl^o!JcKUrP7)}#$-kwyc>YUBSi{FIvDb@*0WiF zE47e^>71x#f?27=XBzOS?0u2j%V@f%49~-aXO`3KT|`Zk^VYv|v4er#LPE3LvrVFV zz<+@W?9YiUU@uvd7k-9cH$T0Rj7YN3L?@Yk=I`SDe@DPSN6TmEly8Ib-j#9!YDDRQ z(Qsh-Bax-vJa&b0_-|Jz$N!AG!!+gW_AAt<)wDJh-1nZ7WNN^$ym0U4Hw70VV(lws zK4T1+cR`#$6pgy#G1!aD>x)kB(Ye%*7nw{WTZp|% zG~s5*8-j171&>YEA~i-!vx;dIqM`OA8mf5i40d(2^k{Lgd;vh>$e&nw?_fIKq8GO45k) z#Gn}wLGTv-oCS`oqOyLF?Z23W@C6p}?H?ufE8MA>16Wsv3Z}f!ra_^SRz8!=GkE@EzR)uGkNyeeLeFty!U4$ zmpGc(Jw-VFw3NvvN2?6DDzBT6T;zo7I}!xXL6r*y?e<+3Xch8byKo! z`dYlHvFK_F*swwRt2gO+h>w6Y5pYg;b_AEpp-}AD2&GIN@|p$)+6U7>5{BQt_``(0 zx(aZc47PidM&Sl#lIKjow;FGt=^}_Ve??5LB{#7Xz9XU%*3}Q|s2p}L)`6AnNlTj7 z8Siyk*~jO^F=Qg8yGv}IJhR(U2U>lWG*syAAD`Sm*6f>S!7UaGjXLbpmx{se8Qw;a z?j?>n+rX((XE5YcwXg!Qdcc?J> z%N=Tr5@ecx4}-+`;W&pcwZE*hxePcRd_#HTZ8wH_bGV)De9K+-YrTO z@5k%#cpu;Ee}eb(>d?1eqEvWar!HNJrAggRAl?_vRO7u6b4&J`Mqbk{-yu|q_twV| z@57F1@LnrS5AVe$72c1UGMDU&-pPWwc zzNQwBcPZt6g7^CBNVqtc%M}l@m_l-OCT=3-mgl$e{vM@ z{>L90ye~88;r)|n72cOcYw*757X|OlBW?-rXTx;y?vLj2KC{RFM!u_K-ukHV-b`I; z#L}dGM-lHso>KF>zYgNvMqbln3oX*C#QS}JAl@e)(cry_U(&(*geVo>;R5&|yxV?O z@V-3kmgEd1%hi!Hk45o#zux_Sg7;SHFuv$;4)2b*EVy~Q|5bU5s@GNRG0J7%qk*SV z>$5e3?kyx&IOC)vSE)Ud0oRT95t0kduH9E*zjuMjSs?gk;oisb2f#QnyBA|$o+JiJ z?}DEJ5sJM5`7CkIq&3lEq(`pGaTkJb1~##RHStxTi74sqN-qC3+Ct|o_rm+QxWt}Eqm-vyMP=Dx3Arj-B6$|rK) zhh2lqQ5<0Ti&9Z3?w<#qM_pGxpSY@i7E095*%ivOR3~uXHhs=wQF3v7e#lk3`J4dm zOE*;6f3rxbB(d)-din9jLyf`LtIQ8+gYtS+pC@ez<#&}-S#E^#<2S2p|70F1UsZMa zHY~qZW%(*7KUDR3<3&(jT2giXODNw|b^mQpo>yGu_bs8^Q(X1i>Jl<&XH z<{^m(#UN&1zElWHDT zGDD?R*ZGhUzP+RprM=UoEErR#e;;u}-2(MW-~|ywFkd_+;@W)j&Ri+m<{in zT-Lmw4ev*mY2J^6_rDiw-V5;l{p*_dUEqD^E1LIl@ID%Gh;eQZuW*_kva)ywLy(($ zpi!RMj~B9f7`6jdH>s_xxgx2AIbLJG)vB&a*@B3^4=u!nqKW%~<@t8RZ{v8Mf( zxc1YFZ=wAqrB$~-y;ReF2d@2rrPa3YY$4r$RW&~u1OmCmRXP4kZv2-XO5=vBwDF&r z|GKLFi$zuU|HmRt|EF^xJ}tTh{8$RBZvW~fP5Uui`v)%FLi^cQt8U+MRnz{uWTpM# zS8t*HgBPl9f6E0;`*yDVcQ3H^S;+TB7U{p9?L?*GMn^77$N-C!bcC=3d4?$N?+bPp zoGdtAu)W|&!J&dJ1qU!QyzDnNiKpnH{{g!}FYh%MG<@9f3MVfcecl20p2ery;Fikk z|3|k}@IJbube{otJ*d_`l4$MyA!Mly4SxC_f}bo|=Zy|b0XpR%-SEi%A+RmhCclG0 z%qI$M!7%gcQPhEOQsa;u51E z`;d|19JK^Ql323tQ`h*x- z;%9KDt+&n7zjQFTkJvqv4Ca?7(Jk{wZIK3g6n+{chM2G)cE93-FMl|P+r*eK|BU#> z5s5!L)kD28-U_e(AtIaI?DFBCbj!9*6I85S5WXRJyISqZXT2jL%&sixNBDCVur84E zAMe7>Lu~eg4o(2W?pw@Pz-;`OgZT!`|9L*7gYBB7bFNW$E6QyW1=z z|2ZVjHps^hIbyd-mX8;bnPpDfCiorfA89M!eq=9KgvgxW@_LK zmr1|q0$#G=?N$GGLj8ttuAGvQ@L1azvdZLS5keWACh})Y7^J~ov;)3Csb1Cnxh1fg zWq5ui$eB%={`xo4^kzH`6FKL5IN?{C=bkRd&E&af2Y#k6WPg`X{t6d|nvgV)^;Ad$ z=LJ_lgsgA)l5`niuulrNe>_CqE+qdfheqM=boLiQT^^c7zTYkmzDq`(*}Vtvke;{1 zV0Qh8A~=1$-8U)Q?(2Byau`vJH$Xdi>FdJ~HUwnlrGLdbxsm&@1!O4N{1F0M9@$zs;;uuy#DP+wOa6CESZg#=rnT)+K$kh_8^w2f9yh2H&KkHlDZr z0tQ7ey;i=peivLdm4UYl&szzItNSs+UrWdLwOa7Mj|@9+CGFe`6ufx&B!04l%93>u zy5pO45VQ#;XiDMNU50q*KK6?A&g{aIX&!n9)Oyu@AYc5KoreSo`W@;qgZ$)GVkJ6@ zXnXX1H+cUvivD?PgX5~ELOW@GzMUwj{{g)~2*~=6ZuHis%54(82=bg5PKGtmQwldn z?tr2Jq{=|gxq^JWYX}B@@&u9Z+gNc2R(v*F8_z^$Bhm4CwcAf-V~0C&837T9Cy~kD z2qf2^u&YM|TLc7cKy-?@sEB6cBBE}GWpq&d&pwF%L1v6h{1h}+qFFYO!zIA&8fF9% zdR0o;dVZ)bNN%#bdfV_5`$A)q3DAF~7Wv{Pp$o%VKAs z=O+Ti7qKwIH_Bv#3>|*kR(ea}g@g>>^qel}F)gS|&%NX(2+2nsv$E!x!kxrExG&9f z1%lXP1vnoGON;awmE9(ofak>j;Qdy3J4c_6d>9M(h#jA!?;Xw-U_lx&B~~c32WaBd zujmmQABE35jEi%r+`LM|qGG}PcQd-nXZ)y+|?y<{QYlV@*aE|Z^+Pf zIv3G3ubUcO?_LQ;*PIn(D*q_o`oqhQnP0LvCT7EU?xlR+u&uwb|)#4HfK zco}izmVdKJMN|zfR!n$i`Iz|GeijRN3vqDRr=wp4;^0`XiW6zCvc5&jia!sSw-W|F zoUZ9t8F&8qGwI~nMr=;B&+AM1vM*)Rz7UUVsFG{v8}zu=)s=DWPO;Ys>E_L5uHR#F&h%h?L11 zz0LRGPTZV2R4H#x{i57CrOJQ#IpM$mt7Jj-rDClv)Pi{H8{j_{uj%cPm;-#6TsE(H zRV;6Z)C##$Cx}bN>w7KQiCqN%rb@p zuVs!b{jh2#o(`7jS-kl7y!hh3c|LBY;22{1EsPN~%xw7_nOP~P2hv-1rsMo#GvR3Y zp1o1@%uyTYT|z9aP=x9Hj|<+la7sly36B#Np1|3CT-bJki1g`^7I6=}_kD$DI^YBa z9xU*^h9?(rUGvS)wEG6x?Y@4(Nb-;d|3HeRk+814LpvD{02d%Ys%7Vi+sI__x~zXd zGuuv(3fsvO9Iqgn_9#5=BGk&y4O-8^v6HJCFZwGNS_>1k#}72D&?I(mfYdPN0IMb4 zlNivbkJF4Tf`wkLXTj>2sSB^oD-@5t14Bv%1df z??`^;hnOP)sqI!vdLqF##KX_D2os(sav%cJ7sVBHrE)lvC=4cQec@zHne4-MLgEQ00$s^G~l z_z;_*<>KhKKC5zdV~Jvh$CHj9-%V!GDGM$fs7V@G7X!9_MgL3kVd9a32H9D;#*{Hc zX+`mu1=ph4Jbw^Yd(azu4urvq`T)sskbuXmFNNay-4eXnMZQdyzZ~SXo_lT>+#|b< znh}$>N$e2DiP1slbmewFz;*_Du9{uRAoex2QO=V#o$KJ7H)*ynp-zN*pJNc|d5r95 zCac{`o`Y}_(c3i-+C98U@RWE(i2aQCZJ?U}Q52 zTKonM==dU6p9+IJ-KQuGEJBFG9QwuYoN-r+0pdU)T1M5aCz zgZILF($^N)IC&LEMJpl`1@!Q>=yWBq`uHuUM2K)6cHtRlOc5Pv+$hcJ!J%8~o z@Q7zSylaNpLGTh}TP@xf^0L|&G6#J+W3$OX@#LH@GVDZ{A&51R6;)mf;8OA67oa6Z z1EXXTMoG26?YPCuCC;UTsi#PH#_mN%pXU772?Uq7DW7gtjA}!@BAK*EJh5KFgy#ogH9baeb@t@4 zi@3$dm(#BvA%6>YL+NF9vGm4YB)nMq0J{Mk7U^>9d4Iu<$=T8;8&vr&fQs$$6269) z_do~fQLT797uM$ub}sDhwZZ4$1NRtuX|jOESvQcn2}FnGFN}nX`{I^Kf&F%Qujm?8 z3*zv5%*U`DYGV=shcyN)D#&<%c`#6zi1qh@H!&RiKNIZM7)WE0LAc{VU+hl?s#1mv zzMe+Nhf$j*!&nI-+vjL#c+i)&+mwOq)YB+zI~6V@S2}93q!|mQv*aRO`Q##P1#bgk z0_ln19cVxqV=NLp_U#sGO$O{|@R)SZCKUKZ#z!Zy>^DGL0#{SPhxpC!kcI*PI+qq~ z%LX^g+TU?xRSrwKABmVJ9)C&li#;Gbmr(QrKUKFjf5sCuD1U=v49(r3@`p3rL!J?_ z8SITh#s+U4hWvaBs;Lu(#2`umTfVtQiwb46sH>_tH=F*D&ip3%1No5n`@T1#-~g3| z=zm+uBK!_LJ3`d|gMtrI@-}a`jH-p*1<$B>??}>hv+F?!za`zj1N493Dzoc;^2*y6 zV>9C-<9w$ z>^IPepGF^`k^l01=>3~SC)?$U!1K9P?n9!U9<&Kb)DLso-c-XbSV^-Ehuhm-5w|dv zQ^;BnK``kw%A1fw+4^#a;%f(fCyHCv%?PvmXClpPSv!rkMHMgN);+EpBTl77YBUk#Hj8W#k&F50m%DD6Ua;vPoe)?X!~OwQtzDKXAVcncedX%2(WL=el6CWcY^QlzYUe3Wt6GTXV3=8DQ(oAoU+4|370* zyyV_P=5rUb3q03}`#eRZmovN%U`nW-`2t*G4;Nv1``D9zcMP=?i!)Zy*GMVE3+FkK zQf8T)MJZ3mI17Yi$b(AE(*&YoFsmrd^Mu9IKQ@cZX^e6fq%^YBXJf6D!Ljql;Z`?| zs9sZtMry=EmkHoTi!aD2~%Wu8|M$7LmzB-rKG513lkM)QQC~O(>GJ zx&x9SWi7-s%D1j_>{9<-o^@RvD`f5B<1?&4YJ$p6QuoyzaK03+Ax)je5Zxpzc_$u+ z7aMQLAI=~jN)_d}wve85N!%v~5DC7Re8Fpko9YuVMDlaeAwU`-Pl1{4=WoMEqV0~_ zDKmghQ-DrTU&;zd02d+)&bH18y*Mankn&D$gP17)-=My8D>&w8?pabRQaV{)w+w z2D)F%5AuZefAOEtM{j%SZd@2hJ4cBzPiBYt|ml(uSo{xo*QS%OGVt| zrBdIC$CBXz?W4Wmn{CNTk2R{WwD_D*~{?Iy2Mra-@DGrpHL1Rxv*2#axN zxIF_9UqKUy21y4F~e7q_fS)u7tJywYQUWXNqN2*vMKQf3FA{ZfA=RcO>AcnuJH;BP|bOv#cdJuO84k%A%W5PA` zjjD#e9GK_cA}HDOGNR-GpB_qj?$$v`+Xxj(;v#}j63ytkG^}d6Hk4+CspZoXVG2E? z6?$fd$@KK|^n5jpu79-i?w54ezdW7J|0`V8`8nZ1oj0-0Z?8f=LFZ!&9t_Y0`VUTn zB$=)zq$|8?Mf=@=r>mf*t4!3F!a1VeZ`2UgR1Hx%7|*T1b6RaKzl5ln=G8;Z#9cc2 z&0}iS05Q+&H?=6M52!-70lXvy@Iv*P3P(KZG=&5)@VWCWyfXu03he52zjXw+?sqk4 z*Zo>L>wW`V_a6WhjQ1P39Ma6sMCT3W(+-xCLwJ<$0B?vI<~{*0YjZ)23X3W1?{Cm+Qb8 zuZCl*3od6DE+7Usx+y@ACw<0w0+uXF^cdtZjF7qI;RHqsik`RwBi=+Qwy_C zD|q`fQ){12e-TG;#-+Ci9p735`?Ov)_Gt#5AFswft*7W0ihVk=2KMPo*Cow5WeIJc zX5NB*>U_N#`!x2tMxNKJMxKwX!am*OqWWK!uKxF(4v7}4b4tvP4kA%~Mxx_Uq4dAJ zD7F6gb(BJ%`U-s@V-Kaz5PkrEMp6BbcHaGhuKxF}PUknP6El1g71a3#)!3($zpAlM z8z}u(?9+#;w@>H2rnOHqPTfBHw4SbgdhX87G>pE{}#~oZ=UY@w^3&i@1b7*+6Nn9jVV0`RcVAZF6hqBPpuu+ zIJ6zMESy{4)?LxAZ;eCSVI!)x!|43y*D?DQ4SzJMhCg^TFMcbq|J7bPs9rCxtL&f4 z8aT1lz~QIo;_>B*{j;)M*WPN)!*gii)vpE~zq~DOd0l}w?z+a_8vZg_C(^G6^o4YI zo?RArPJ-v1ihb1vp3f-uS3`KVD9@4be6U=#?(99HT6Z!++9U0?_DCFOkI?xdMOLaH zJgtVXH3Wo4xTiIl*RQj=_Nl%g&8yV0Lu#p^NFmqHAGGV|MsEF#Wp<*Ty|e1DdYukw zj~>z5qq{kKv>{ukgX~dUt&Arwn6+RQ_)Y?O1p2ra!n5DNK!1)@j|5?2r+!<^SwY(ksbuIPw>;4S3hXh@F=%$fdFXmp* zt{3s4?V*#mU=L05Xzihvyu6LLppmyNtC6>VR$&iqnnm;0KBq^b4qxc-+2?9LTN%t} ztr>~#4`FvZW2F{G1J7S(BgbE@6??lhKp;uI($aO1%Ks(ce^c8L#@|%)d0R+%{-IW$ z^YXT(B5yg#^!@=}GKrz=h(^+$iXeXs$k~8gqVq{wT@kP!7{ARQ9^f_0c`dKC4yBt& zdjjhN!&BYG1W%djQ5^bJ8HMAODn}42J&U23f&NeQbN#3E!pk4k=kr6#x86=d~2g8-xk!s-?QSJmglUY z<=dHCkZ*2RHU1v!IgNa4Q;mFEP=$Ou^bC^dp_zIlvahQ_Ji^_7J09U~y?BIJzcwDB z8SVV?8G4;x`biDq5nA1jc!XAZ@dyRg`+IyZX#G78=ifemPa9o-Pw6kW-QQ!q#dw4< zr!{=ssv15nsKVb*ZTQ8^fLJi_?th?>LG z^icEbM>U8?81?t!5k~!mc!br*wd?+<(0;IKev0XrM^uAyo*n;kJi?A+dUCm5 zD0sX$`^)hN!?f`3u4a6^I#69aLed;{JVKi}>Ue~PbJXz&k#p4X2-p6pjz>82Pjx)P zfq!b_5g_03?TSYj9wHtgdH3y$M;I9*9$|0Z?TbgaJ48If)V$jlk3iR5{dfdp-tCJ= z7@-@F@cypb7LPDWHy)w)uGPRZY7IbBwO4%a*JDnBOL#k;z8Uem4aD6^U?NfPuj%4dI zsVoNUJ0A*+G%H=8@5Li09gj?+_f|{{UWH&3gWlI!ppEJU`bw~YYGGRAmYKzPLWn|K+^ED`xg-w}5?W_nbqyx?hpw=fv`Z0l7NdK;>$rW|^{k zTT{83W(C2j!qZ~dMd9-26Oi@%D)|c6xgT&6`PU_cz3Moqk?)pj))RiXFV>UuK6*R0 zn@IQn9@nGTig$G=w#K5O*qat@d;(Ie&>Tu1{N1e92lLFT_yn0=s~gGmdYvCYu^HKI z`UJZFH(syv$5-fd{;*lq`5(;M_=I}5BR-*?CO+Yf(Do|O{phoV?v?6&qK~)TK6{nU zgJ65LKSH2_13=utf#9S?I%#i*vzb(=+MnBraCVqo2RZpo<%P5}uiQ!km|T%91fzP?jX#1gZN%Oh;M=i(GUkwv-pI1EIy%opwDkrAD?jY z4vxM*?$?V?2uWWK#B=Wwlz1LPl!QI1hm!I)bx<-(efQUtm>`riW^{eJb}0EYvbI`2 z^{=hav#~Hg0cJ(P5KLoXgqeW%#$+S-ssK*@wEeWL|~ zH1kuzOFhI3=a*T*;pJ(-%a^)%dB@DhKjiDh3x>qY3LY=Y`rq-bF^He~qxJ9;^STax zMymbCLaiYD)Cqwf>zhaYvkX<2Z{X7nxiZ5yKBmY0{GN2tyl$@22efWP*AUS1xFpzGhmbp6xq zyjidFZ>!@?y}_MtZ!lPDBroAZmAw4q*5u_P-XH(tj~co{yP@d%NszqsjH2t`NZs{s znV!E^?ZS==c42o!l#qHM#_6oU^B(1x8QB9{iN2XM1W6{y37ZeuW(QOtJ<1*N@;vLz=2^MJBD;xGdHXvzoU^~@?$Oxa zor6#jgN%mt9lf%z;35AI_{e{X8 zaO`F%KS0h+jUV9Cn~Hr-<)8HSO+Ej&8qVdAe%$?9KW>itTp9QqK2`g1e_yZmH?$}Z z>2L7g)b%%r+;}?E@f=XQbDv(X8p-{|q2gbg6bHq>nu=BNwJ?rrSM=gv)liI=L*eVs zA`QOsi&Sx`0O#8xz4+J9Rd5nR(xrixE{1YdoGrk)s7rq}oQFg5S&Ej=5;(e0J6UR| zrpxc2sUZ9wf-WtjO~vZ?hya|G9DV9gIKE=N{SP&?@gbc0aZ=wB&3L+Se*N~8&zhI$ z?SH7@G`ScG&dm!NIN}9WJTHvrzy%#RZ+)tQ^H#`xusPa&uqiiGaoqrCxZXZkq8iSS z5LAkj?km>7iRb7OMd8%dqtBjoDmbe`(kDwxpBWr|s9q|KRqq@=p@z`EC=|c7E2@Iu zEJdnwUND}DLKo}KRh4A8_U#=cmC_{8vfx9vPC zG{xd$%T2Pv9A2r3PyAy5&HwSBZvGE<4dN5y>)nR)sL+V!JZk){#V3yE;}grj)5a+P zZbHN-a#*S|KJms6Cqpo;j!jmNyX9W7+ljpDhWBWZNs`$i<53Ax6Q9IhShTr9WAyo8WoHQY@ z-xJv9&gA2~>AaPC%5mPDR2;HKyy@U*JHW43-$ajYLONfEYf<_ z`@82Odnxl}QsBI6FP-y|_I@<}F-aF5|l}DK=7i{yWZbD9|UYB z{aMQHHwYci^Ya5V|D{b6&yzN{M)5p}^{R>I!N{HJ<9QO6&mJ*vSA2SydIvZp)E|8>6} zetJHm7hkK^pxz8VvXmn8dkFinUO|7={|3cOL|w2J`bzm)C!5W0&U)*gB;#^FuR~k#o49VDhO*ra6k*m zbF+&5wiz5BP<>k(tH%c(HMBh;_d`F??uWj~?T1o5P;%d3`IAamKBcR-wtsi53odCR zJ8SmuhE1!%{@wW7mtSPOUVf3g{U%G${#`RVg5{lb^FK_j!T#OjwMdL+8=L=Ezb zO!(XRMJDLw7fIj;!19Z1>4=?A((Qa_z0OycUu5F#$S*QcFTY4Tp1<_-i*)R*%`bA@ zd;9!5kL%_adBc0#^NWnX#rz`W?`!yYVl{lsqmj=q@3f4(A$S<<&w%vEK zOz*yvF8n}Pevu3J;2wOHFLJNa-&@Wv((FAAeOFaOUk(iB z7dh09=08f%&3`nZ2Khx^``h_NUen7j(w(O#%P-Q5c7AzV-SzMB8srzr{=4}_vV-%B z#PM{!mHZ<8S7?ZuT@6t=7;=6QV*<_pe7A1?=kYbjFY?OY%P;cEU&t?#_KtSlelR&Mz`i3vXF9@OW|dm-CBUeM(sNr!#KfeJ3;Y?mMZcwNK}^r15`u>Bj#(QUm*R=IyxeWTxJI zC-rM!pRRaKyH3prZJ*Y=1^d*USY7_h*EI5cW;OD>eiioVp}VO5*FsnSd$l)$@4k};`~cW}C(UT*mp9kd|3=l|zLSNwn#0 zYCBAO-^m!ChCi~Z;SV0ow|w8p)t5AI7F7d>pPqmDz7v-g-ZRy}k9qr@rr`O*{2{Ck@+a?>jm9-0i#XBun?clLcxBf8)NBXF}X}(nJmA zZ{2sYD8zjyUpQ~yeJ3x3xbGyxc^mILaaDca$w|lUyYFP-E#G%Cg13k)!4^@+4h>PB ze$*hyB04XAFi1z3eyX;J-V3&fTC&KTh9NDY3TF8@8fA0#&^g{7YN?#J`z2sdwB+ss zXn^ZM$LX;&|6P6UdT?GmK2T=}H`MDvLGXIeiVb0(A;e`GjipWUIvwc$8ovLnl>T33 z0l!kd!N9Kzr+K?)^sr9;@0ZP7I=Big4?lxTc#M^{3%-VpoLRCL z2lXegakNp!A^Q`gcw>McoUI5yM5?V8+YDX~o(g?#Bv*TGWIcawgz~?%LJi{B(>w@& zC{f!`I#G`PpFsQhyqu--0R|To?wvOVsIy*1A4YKkj z#?5z=%Hp|afR*p&Sh-SWLHY#Z`0UB0W>^1kPX4q-{NVe}0RyQm@^L@P#?PRE)UiDs z!0NhsZ2X>}Glo5CYhZJD@E8(k5aPrt`>%>$W&L-g1oY_yJRe6YI@-z`>4ARF`UeDP zeqm7f|ES$lO7puYc2cQ0>;pP zGjvhb4>&?6I-iCacRvjowNT5)_Gs?pY=;r2GeRqu>*T z9|Qcv**m3T#6m4UwXKGq`02KI8A>XsA?;P!I{~@X#K;ZlwFR0XS%ZfZbSz7?N-cim zI)m3*dOO(OA@aW&k^fU=X7{}=w{$K37-30mxcQ=%>OY> z9cMZF1{LqYtQ`e$mW`x`Z&3SVmmFUy+yMDLh01rjeo0+#sPt%r^VU=~oZXcn;IxoF zu2lQi0`S1z3BaT4zBIQ|1rHakb_fpzoMP{2BpZZ}?jm~O_qZ?y;zoA`-8)9*vU2Yj z2WQ(96`aJIA>q`&84Sn3@4qBaI2UyA_wW=o{x+0{#NX@XRp4)4Ifp+ghoq_HV1S&H z+Ou<_uU-qfpNv`}p5w$AiKDtBnev(Ssmi$ENkvX%R#G`Jgp`Ssxq>0A;2|g&$Q3-q z3Wh>KSFT_vD;Nd^cX9>8Six{82;&Ndvw{&&AWc&WMzDgBP>|0RjAR9)px|q+U=%BO z7z*Cw3La(!k3fN&D|mzzjD~{gT)}8oFa`>Sas^{p!B{Bh!4-^U1&=~OORnHiR`3`U zn7D$+Siv|bD4ePkjAI4kq2RZvOm2^_49M-rq2Sx8Ah#c{M7bR|dTg#Py;mA2y_a(B zH}RV+Q1$^S6QAP>?qdZXLcv(BpgAje6$;Y00t+ix4F&DFf>c)U5fs$t3T&+4-%xOU zic;_ZD_8>sC%A&XtY9q^3z^X9fR(g5_L6KUVMw6wKuc`m=&{P%wcj z5Lm&dQ1BpEkiiN*gMvh^;6YaKITXZk1p`>YdMNNe!N_U{mm?+X7f^8a2_Wl0>WBog zW(W3LM=BnM3PR-Wg11*@LI;C56s?JLq7ucDWz0;z>n<1nCu6Jie zR{{}Ap0i+zP8}ZjS$Tip=l;2YpS%AN`1#ae0>zhR?LdSM>1~JkXngJxJVcI(U7o;t zd4~CZYUDn4U6eokwMn22sU+~W_vOIP@Zo@qLg<@lgrUqM9ln|E?F)ZELwt~^hL^%o zHGCpWqy10pC4Z9(4j11@np;AxI)lb8c*a`1&&H>DpS7kZR=P_ZV?h=dm6izJzAC4~ zP3Ij2{R94z|!{y#2SXHk8l5!G*In9@A6V}gzUu@+RJ`omwpdhJFPdy~nRU_#}m=;N9mn)3w&ANzcB0U+VvX2P9%&w7Ppf?ko6(G*e zkeX&!9~KQ~^YxEsBO2|AHoGBZsO>wWW?X+@m|Vwe#-MRcG;rg3B1LappE0YT{zlTa zzsS5TEG@an?0QuhpLc*YE%7=GuQ`qM+pQhlap#>_w3WQz=F_GKZa)3`>|dHs(%cGp-({>ts#n3~tEJ=G zVIkwXRvviI!TqR?0@q`=TEtP$a<&T5@+@lD9>Jsm|3^i@e@NiZM8kjr9sq#H1pMlR#RvSag6R%M#Pi7f)CXU*cSPRk|BXq>4Xs}W2`2&T#?nU9uAmv z`IxwH94tA<@(ic^XaquymZXOGgj{f1DQFD^gXDtqO2Iv(H8E)%EZG0?QwAa{7Kcx6 z{pwT!=uBF3vwiUTwYr-gDkrJk{|_1UP`TGoB`S}T`Lz*bs%Afx;PZV$Fg}kf*{P*m z1Ih)C|IQe=`8ILJUz=}ZD!KV~Sv%i`)s-)}*37p<{5-$#^k0ITP55G=-%!N(q6eWB z;R~0+NFhsOE0vkIH->cK-Aa`xd-oBQD66OpAMeE!)SLi z1dPT~ZQc&W_RDSrwSVpg?|&fpzIa_3WkDU-DZLI8KZl#|ztZ{cyAd?s%gea=?!Qlu zNk3K3_qTQDd$Z8fVBKJcrcEcNPdwt7&(x(OR5NvC zC~43T(*wuIDgDvUght-z&GqLLi zGUVwbWoTH?J$OIloTCk$pDBZ5oafQM|2Q*M3I-sbPPbaXb37|{{`7#?_|d5ViV4WnM*F8DZupQ-2%arK z`$hp#;H+auw~E*(l2r1g0fqiVnM89=sCj?yLmJ*sx>_~w$4ZT_s<_>Bm2o=`=d4s# z48^}lwbA#wlL{>hk#-HTZulKhMOg_(hY4I836TIeDY2N!tEmx^zu+ACCAGOqy|-&B zz-x>62fxluaNdazM8Q{)`!N8$*YrjmKt2+o8!k?H6r3=GhXh~Jx`)FInpS|F4bD5V{}!He%`MC~z|-XIUgfjkh1Jb>qhqXGZ&&R76no`WefV&_i{ zEU*J6v5h2wZCs&9XrxF4fk*@p7tk6=gwaZqC@(LPCb|7FP$h^w=o%J~2Qyj-o;*?y zc)DURVSFzc@BrLec+Su5@COZ(=%*vOds!5|w)y3K43r0VIRBKuZqo4MqsWipD6xC} z(ICK&#LB4FI@MYs&ed7#5Uf+1^oXnG{ z8h&h6LilmN;G07r?-aW|M;ZC`J1Ap*XOx1@rwkW7XJnu0P+`%9IMm|4-Hj`KuSR4P zViVG5^M50+%;{ioiVeg!;hzK<+mO8Sy!_Jcuz?0*F`DX)*V zv>c1QHqxsh*14S|LOqAbfX!#3ePIV?Nzs?x@gCxoST`T%Pq@vggT)|lvOg8W@8PXGT zrWrE9C1aR|2tv7BIRynwJf4d&1V&CqY=q*%Y1kWhCEhn5f8zkK8>`ga@WSW5Ne4&E zO5WI9)^X%h$|BGc@p`f7M=vbpAFRW1&|xTk9;t>!lezD)!lq)t35QDe22k|;V*EJ~ zuq0igA43K1vlrkqbqC>Ggs<18=Q|j_Gk{xvFkpK^5!%o7DfZ0&EusjVX0&ZIqFNy( z?t>cJkBRXI4sR$TPkC@bgk3 z&t1lz$WMcx{q(p^3-JLA~z*LjKSEiT_#2z|DDM9x^G>%MOW z3dk`;Vv$wg5Uk$NR>6*-^Nz#h6_G4xku9#lV%YI_utae&jP|C3Ub3Wa7~KK;3Feo# z&2t4%FR~E45T3JkZ{$S_;oUu?hLA@VM7q$&l95GN#U3DKymK-$@*=EIz*#@=2@tu4Pr;W~kVN4e1JfIpg_|CbOkT&LXwaG6YMTiMy_8>CjWUR=RP(3ygT&|_&7ZMX}IBT<$W zO(bA0LoVhAA4)m1dD=Bqu^>b+bO<>+Z)f^)A0{SE= zcoQnUgOwu3fM=Z8HZQ@N;K>ssdZ8Lklssn)sDo6@OwJacY|b{*^TeD~(9k?P=N}V? zH)ndM=e*$AC7!JdjfV3oX9LtY>wqfuIjCaJkAqdqZ3Q@R28x+HzdlJd%Za5F^Gtpn zHIc5L$VB%`Vb*WWLXA5(We)wkla~%jW-CKL>3l18k3QxrToL>xCaEjx0{e$ zfLO%N*Y~Go?Ls-(bppuA3~#ivE;Lv0t!!5$ryFeM<+};xJx7i&N0tTqNNjTorlSF97thQ+)xtw;?f8<^1m>3Y3h{zB)8yXcXeW4^ z3dskZ)-1^=`0U@C3htQ9_Su?(4MccpyGcm?o~#2NLgF#j1OU;+?we?BhG|-b37IAu zkwB(LGcp|)*nQLUEt_!xeZMhC^K=NxvQMyEn`KN$HD&k&%Y(kypK$QoPJ|1-o<_)> zQd`Kn5p7<&1w^~g(a`XqFKxFeV*;`NNCjcrsc<2=(ot7vx1H7l?Ap9hWF>zJs7VS>ZjOz;kf6DB-h5{yJUv2VA)u2uq~0c|)p6QmanfXy^0BI_U-Ul*?> z>xR+1*owMBq2L`ICr)VwmEsD%0lyZ}!B^an0$ls~oe` zG*BN5J>O6wKOJpg98nN9EGQ(WXR`H@Im}a z{uN+4@~hwwh?hlsMZfq*KXf~QY>5|-x1_UeWHG8_V&^o;UvOF#Z^y;w_?j<`C;IfF z3rkQL0HfI3Yjp(S{xx=xRxWEQ7UTi+8RFwM`mzhW^u1&qNB-uy@DHltF6+cF1H~En zJw^WQ`59UuZ)ODEtgy}w13w5hOvD-N6-VIMC`h7ddNYY`o@xPE+4MIk*@AGXe*RoE zrAwSRzaB;A4DrXw@T=nnKo-bN!L!b~5TUKJE&;s%UnVd~yxp5L^+0>V@^ir%*F`Kp zDuO;`CWx*@)&US5Q!k7D4Bvc);5b4c> zS;B!qL$6v$&&5(9N)}88EW$i_A+E|Jxb080aJ%iWC1`mv(9`Ydut#6cD`FsiHp#;yV{bzk++Y3-RK8 zvYq>DfymdzN=AJ?l={#syY3A%Az$$CoEX7{u0%nBEgW71zNR^P#rf!67Cp zkGqSP>d-EZGv3ZF&Zb>FSwOoun{@H|MAF5D4Fg?#Q`5yif8o3MK3g(oiv#M=CBvlV z%wLaEg^uquf=%;IiG`|DjJLMj>8^DEV~QBh1~7#T;6WI`RwfpGNh=b;vlW>Qe@Lg( zi6}M?E)qYhFL8tL8R#IUh%eTbz_nv`yJ#GX$LR1=#kbk7 z1TmZa8YRBSevK37!mmX;KsDg>Z0a2n+Y%LQPMP0N9}l&qA59SpYte4Gr=r0~yX8%d z0Bd!3tDv5eF`8fgq$Laq3?S5Yd{YG2Oqewily@>iYIb;zH9 z4@r~G&~-mf@HJdDA;Mt8xWmLf;!7cY>VJYm`Q1C}PGt-5N(#Y)~UMM=-LF zf;~Koxg8}qE=Q=hj>9&(KpUf=6bLPD{8{vGroPciNTz8JqjrnvFYERw6)K$`Rg?j{ z=PR7T3@<;nfL>5Ku~+l&qOVpeuTD0nuV5;sd1ptYyZvU@QpOJ^vC$FAy}sEN5b&Tx ziTloisOw3ppKUn10|k~ zLmqOm>MLkAQcNH(G1GGw>w!E)Vq#PqX#9)B5HOW>zeg;9d+)@z+J~D2J81r|#C>Y>8>539O{jnJ36t6NI(C^wJ~<1#{o|AS$C`bcxVU5T5$-XH z=LNdK*oNC+1pVEFZOpcK8)t1d5?krHn4+v`qf(NN{>-e@SR-`_ejlcC39e&&W&)JG z2-!6mB?T{|0I-Fxk_A)(-WTqp`gvw7Y?6o&BJ7>hU4W@Gl%PaR{Y6AEGrhSyj|S~y zW<8tt`usC4z(2W7c)qn#zIEOe;MrQ)jGba+UL^_#^2`**Gc%B9R$Jjt%!2xaUs(Gv zswr$#uEkjSxcK>HuB!O1ZVn(_0@XCl{Gr%itr@tefUxLnG~&_zhWTq$t0>Bj^|PInfW+0V_GX z!!p_>!`q2)g7iS8vfsn?YdrKzzGsqPL%O??#>2pO1HGN4Mz9e!)B>?}AT7H#R_z?O zX$-yIf^!mm8~w4?(nhLUvm42_`!jeVW(x{zu6{pt{mzZ3SRcn05pe+Wxigl?!_gLDg3~P9{;EWY7e-AzLq;Zn3xc>+S7{sYKFvFr^k9$KogXf@@_@RPw&9eW5Va%1Bt$J;20&h}H}V}k zCk|^x2e=*^?@t;h!r*$K@ttfjiIYVV)T2jmm>)R#lGz;%3{M)*4{Cfdnma3y(bC8& zN>o?J1JsEv7W@VR)U(qjFQNP{Uvt58n6{rXg^10L5lY~7zViZn9t&Y}1Y}VV$XFea z%x^Bv4h6C)ZY)xG&qgWmwo`bkhXTBH)-n~mLUHvklsEuSQ9d3a%Ew`^H<5HQA`qsG6p9}o2q+_A;aX*c4yzfHiy&{!t_{di zEJBFrBYoqO`x1R*ZbL&rAW&swY%1HP$#ukIQ=}Azp5~cgg3ut(9E>g|;8W2G`DJJrec4gB6tnRD_4n3#}lU@3f^eKaA zVDk4+aVG>l5!1;9_ecTn9Sq{VEk97(3#Z_~SP;Rpab1GK#pLU>VWxvoxW+T~R74d)0e3yt3hy zrLSys9-AB*v~t!wx2tKI^Kk!b?X~wg>m2Se>;HbA&+m8rEIH@9r?uz3*Is*_7}TB? zBgMne!m57qtck2_O1qZhQm5EieHDxpp_$36-EG)-yNm`VQY31-4VI7)jE7D*W%cPwn?Is_RkG+c_L++iLp zoExo!MMs#9eP5&gF)YbZ5K=i6*H-1RLVsryEy-7l@!f0(NsFu;bdl5{p=^b{G&#IS zRwi9kdXm^|Fs2*(QY$-%pEqSq$G-t9cfO@^+aIPrHbU5Q%h{AJDs=i)t6h{4q}3Ll2?S_?{cNLWIGCpqfC@JSfwf0-4yKIJ1E$}i_|c(wH<%RZMYDKA#dZ? zNoE`Xtw3mrQiA0Sp`~tih?GDc)QWB;Iii5%;uvGjmO=2HEyGgH z2Ig+6OWp0XJnGoAlsbGA?VD1?G#2Mfep`s}-2J^75YsS=_~TO&UK)wqVYbHCy&m-e z^hH9FnRTfZL}?G-NYih$Hf$+PLnOE%K~7}V>!>{VuAlF(u|T5LX~N%c5&zz*iK#nA zbfd(*SmjO_!zyxKU~Ms;A2FC7ory#klMjyF#sIVemTaQ zyRqKD(M-$yRxCJRM;S`_i&6Q@^1gkkmjCBRP1*^2ih^c2R@m*JNlK6Z7Fi|4cokz#=D07e}OhHytNq#DW{BcebZR*hPJm=z0(h?eD zt4pHM!}EA28^>L0)dM`|wfWttRmaIz9Vc6LoNU!`=2o3dwGmm_8@Q%M*HP9)T!_hM zyjc!9x(U@r5)5mYZg!i$)!<(?$LbBWHu#_Fs0Ls3Up98C7~EG1?omi2VyN=Tb+{-d zZ({qsogLbKSOoYs8S)^m|Gh>Fn3`Rs=YkTD4QK*$^#d1z%6DeSaQgUMIr^*$*Al}G zI!kL$=l^IJj^892;}e4mfg~>|T@A@|A<<=6fcX!cW>*A|l$lBhHjsM?u&vxI45_#B3 z3@$rOY9C&8(tVI+?V82ByG2lm+~cI~Rz)FUMHOWZb?AK_Y84eoYZ+?bY3ii?euK=H zL2aWoy3Fc3g*xfh^Q7+WO&>GfrnuJ)y0_Y{O@|45qLE=NMR0%WiCU~(f3NCFZP0-P6F1|)yRIfwv zb%Wdti6#qd+F+6Y_B|F$2MMp4#IXNXZuQVg{;)Y9 zjuCoffVXQ-Q!^6Nx*P=Cj8^Y+(Axrh@rJ5ZbXM~2$jUv(aQ$8q z?dt~XXk}7)?|yN~r(m-vwX=IHTe~Ap&yU*dKlDybCvLE;TewuLVJq8*Qvsoa@9F(U z#7*~$>PXrlBEEiAutHanfeimku5Wf~ish~&Shx-D$P#L0rXA>0TbFgXk zE%lKDofsuPjSkb%q1b2emGFzmaK$FUSN)(Fe*U=J0@vbed#H6gD^>|B<@|tezHbhQ z4%KQ?XG6Go2DXR3m6|*g(QfTR(u5SD;k!WPB(J~WFWG0R} z^h}Jukuo75YbMB_B@^{!CPHK;w*SYPiGIx}6T8qV_9MGhCZ@k3H^ed%j;~owjNEO_ z#Gp4Q6Q^Y+M#xNLuAodfjGB0@D`mnFtR@`6Y9c+BGSM@ZGSQ+|CLTdcN4KDj3EeVv zQ^8}G{6(TYZ`f;U&q5jTSM7_V`W&Qp;Dbx31J4MdJ+bJ(t9Jzg_Sz-B7kA*1T3I`% zXBVETg|(ukenq-xFAh*kNY%wR>Q|DXMbUir_Q?=2Gd=x|I<9Oev`L~fJ!{gvWic65 zC*9qo*n7q@CHB^DLkqK%C?1aLkssl{o{UkVe)UlduvF~8g(RRP2`g|Q>^FVQ_8Jn3 zCW*8Go$WyBL|2qcApCGoA&+pc^c~ov>>zn|YT4`X;O@K>F9@9!sn8-cve%I&(Z}6L zQgPJ|C5Ncaclvto2<(Q$T9u zGIwk{;1$byehWjwCXO)6n~^A_!(klu{l1~Q)Tag1d8QDT;dx~n-^D|w{gx1yfs4B% zn({oVzrM-2l+IzkPPyR>I^@tS6t zzJg-9NuGO0V~VS!@Tf#bd=JRlbYd(g@c6z= z_Ey}5`j-4b&SaFrK0p* zw8SW<_o`TDb>9dTFSholq}HIYboR`3G*UZB-7}cl4Rp4X{a{_?ITu;^MiXI}8|A0o z{xQOa&jxo#Qqd}JUp**5np+LUIX-|tD*c=FsGsp;X7YEDl{FzG^*(o2jz=b~tGi&@ zd~S=FHXmPFOY7=cpHh}JoqER0?M-Xl=%MhGj#?uv#H4-?B;y@`);*k_ube9mU!CyP z&EsQ*y*Y>cRF*!s(WkP|Oj9c#&QHp|{dsBcbE^1`n6t;gD761@F0$%HD%s@8EgsBM z$}Q8-@BqvONdr882pbIUOf?Z0sf5MiDQc9ztFVu4r;S$U)(EtH(B*d2{(+nR(DpVgFPLfBSGjCZ1;#bZ6;v3pZmgqa#S zZ`f5mFX%@KiJf1;R#5?Ccu6!{{4a`Vuyk6X(Z9VRzmgz@f3}_WyzI0ivLNjw zdFR~PX&1_x-r0e5+C3ep(~dwNVhRe@Z$A}Ide@!WKz!57u;+L={dcRi|9(qKW;mqw zIHmXB)#m=Y{cF*GH!i8we}6a-wEsHo`tQ-m${URSOXhj39r*cL9k?fSt=mNZ_4j1o zFAPX~YuB3lFB)WdL6ntGWBOUtp{MoN@8_#dH}h(})3sK84v!c`r>m#;IsY3{4*~n_ z5gZ#nQ)5F;1AS~bLSw_r=CJ`YP!ETOEBvzz{?{qHENI$Ee1D3@2zP8$`5xarO8*S{ zb=`}MKN%5_pde*~+JpXvp*A^VTU)_%Ro>am{iIH0k^QL7)A`t=p8 zUk~}0=+{uMB{8gDKiJ6BuO~DT{kr47^nRVz$mrLR|I+*Q4UJU4e&9be8LK_*b8r5^lQ9Iq=iH<50Iawm+aR+%YL1IseZjwHm15UtY6oUp?;l@K4#hX z>sh>CKUh!n>zcneAAhUnW7yvxx9iXKzaTl(qFVjA-rm19A0IW%$HDuv->yIJg8BGS zHXp10TyC9@(TIU*GCo?@+Tk*TcDQZjE&Mm?b~Y@jdzVHkfaQ5xQg)8d3w$euIlZbKderMul4!17r_C0! zlqB%k2UGL#gc_L>x*)O^-o{91YnYKxsFBd8Vb+#E$gJyntJHPHT4w1r3pJ&8P6`R* zv{NBUa&kCCNj3J#rz94^5px7TVKOsT;}(+L=~6>E+I?OF8_N5a$Xja6)JPXP2YL+M zZ(l+Ja6LCwN#LsOdm05=N~4hC8;<_l$oSaQUUjYbl2BrIbU(Y;8ecrPYENN&y-w36 zx&k~mK+j(-mPdLlGKbh{C;qw`-2YQ6vWDQQ^~K1d;R%8X$>@|5LNfZnYO;6zX00h@ z$xoV*6PQ(uLdBT_3$=|t5-NXUL_8q^$dz2P6GoE#e-}xnQIg$iCz<+_y5DF@53l%P zdd*pSC|6BB>wXw#unOPrM~zhI8?{|_tP-hw{YI@+e)>^ra$7Ryj>AM+nKCttGUaZJ z84|O_6{qPSDdT-DfP$*uv>xyzWHZtW zrjJ;{-lmY2Q6$jU*b#Q(t6q;VB3wY1UD6Lr3XjW_qYU$;sMmTc^H4-*B(7Z7AqkVH!)<6k0 zHSyFlR$GP*=$8v5-8_uUZkL8Q@_{YSa>#2I#N)egmb@(2o8EyMfcu>iWpd^jQC4-H z0`G0n``f2<0ceyqRV6kU6RXw}^CqsKa2ub5a0lK2$4|+Q^c&Bh{U-z-IZj15`~r)x zlZr3|BfLp4oLEkAJ%n*Rhe78b5%?&KYZe0c9?`33;W>B@73#+NfTwM(?+f@}MBZM; zB!A=`?bKY<0zbx(1BiV18x__FNa&trkkHkbP|R5+C-o-wMYKMm!>L_;^)vvd|AYLT z)cJ` zo|Ag04gb`H;shEmK=t2L5leWd#hvNQSjjw<$VQ1%)K*Vz!{mC?8-7}Ztc*<&T3Pb1 zXRS1t5~ZE~U2xTGEpR1F>;BM&E|HMBb{VY5d|94jib32}wLDJ82RND z9zRB`Y%;M@p*`7vPB`B@My#BT(QQKDVWIY<2$#5MX{bnfCZ+rmrhFBqyyXg?q2d=b ztNuw`BAJ>*rW3zgsTsz3=-geJ?Ro17EubqB3k71Bpo9`}*b1pg ztTd7%D=*d~kwUy+RN5Ay!^bQ<6PqoyW3o^^dUkA-^cLZJ$sxawU{aIBXd)};$<=L) zejDo*^YV912l5bQ=iyoD!C~j2KzOidOXuDWnH;(iCfQAqm9ZjchN3lY$ly`LXto(y z-K)!y5H#F518vPz_iDZhT3DE@K~Z!0t>x)`D6iIeBD2cI5=BLCrF>|qhTRicDgL=bZ4>Wyz-kSu8_ot!a;LB+M>GD zsn-8yXj&1U9jyws=oDEQS;v~8c6Ce{sv9e}M972ClPDAxW)kl|Oykq2r6PA9ELWq% z+bwaF_*B<4iJ;txj2UA^K-<5Ulr~EEXmS>Zh>eHkdJ%PncZAcpapEv#Nz=1*Wr!t9 zn#fXEh&4;iLrhuvDn^L^v{w$($RipF8i8>4!q*u6wX13@FfKJ8XC9X(hY9P+?;gcL zNq&TgH?68+=S{YO$38Dro^=nS%pNkNhbTJ_vC@OX&O<18@QpYh#GbM5A5x=A4|>>a zxp@6Qa8*ijDt`a1Ryh1dIrC71;dV%!z|rCh**yG2bUrNCH7TLB?#~TE_qU~cd~Npx zbRU0S*>R@Afy&snH6&PNTyumfqfBV}&69)YJnGJtQDC0zHndbRyV9KT>L#hXA7swJ zBVhM_OW{;LU~Q11L@IMbtfNY)xk26`ts}^pX8fmOMF8V}TD&mcB!sjVA!bl92sWXIFc6@xg*A;`;p@gVw7BroVs{N^+b&-{au(NJS zJ@tpW8KsU%FSuKheS(K0-1n7Hp3 zXpO?@nHHs0zoZ4EI4~nR({ls(N{dJNsc0C&&hz9b;&Npa>HYjej4b2hku9MTU~TVb zp49@T60e$LZtvT`gU_SnvPZJ2bK{laf?n*48!sKD0wt>jRp+n3@j5Ry#dno7*NOww z3ok=lZ?f+`iNcy1A6dCi-jjl?^^5lHIH&9e$mMEvuOlDBpxMYl#|BC0uvETe<==FqWjdR{uHk*KS&MXs6J`TX<+JlWeu#8MVI;} z56$W;k)Zn^jR#4{BWe(8Pu7?jbjaHjO1;ovuqML9;0zRj!+g4cRP?U?g{IPG?}-vU z^%0b4Q!LS(CUlh?HBW;Tsx*Tqn!~@}r|EPNpH6?pnRDtdRIX9-_Ko+V#!j!LvMNNQ z^ivn;Y=2bG#P*x@XqA8eFI1`#>hf;o=?GJy?TE0JYHPEH^WqAV*m*3+HAS>wF|pMF zDv0`vL_s*PAX;ESjA%>+5q%j2@xpsl5SwZhMCk!4h!|NAk6fUFP=@?sWI@Epf>>zO zUtM$k$!lIY2aJ0nl+Q?WKL4m^Er{RhnmlZ+s~5y>EQm;m5pB#L(GJuXYvZO%)y8;e zBPxTq%P52Si=tuiRuPh}7<%iy8&8awiwM^`b>jFc>cMS2+&nq~8&!l?{K$!Rc7 zFN3$tS*)pREra{b9tIj^fNLAApKo-xg^_yIH(uI z+;?f$CYA!KAohw|S8Hf}J!&5nNJn4^#bW(){?&=j7ExR z?e=}fH6Y4yk~zn1YZXcNaFd6t!pSaWj2tmf@5N?;qwd%BM6+murEvw8Mz01w{qjTb zf!AmjGv1MV*id~hA*^2F9W+vX87R+rqp@v_IZL982li5aoO*sDLMdrP#2mzO~PqecGfQ~tB% z9io_8g&<1+Gp#+0jS1TUo=H2gOPtb1?x7YiB804kjXy&zV5w{YBV-F0AzQ#wy#?$E zF|~j#A@o&?+xJlJvi0&>YA%KsLoK_7%GPEN=k@z-7k3+TjM$Zw4^+I-Yl>>D-u$qt z!{rI)Z9W>X6V@D9kp^j7QB(ZEQrU_kv#B6BI<%>|=sw-a>h;?FPd7`Hs!KWFk zQPx@OyAWP#8jSDfs$t33Oxkhc_y4M``z42Yzcd;Ho|EfZFAX}(ITf9ko-_74@n-k- z=>FJQ!#&3A9)j+E06 zdk(rcK4a^iithVQ+3pA13-|N3;X}}U^;ui@JzhLDIb-M$TijQmd$x4XuI>I3x~C~? zVYS_7pnIs~Kf1Pi4!R$b?zkqk<{#ZBoCxT%hc*A`zDlp(c~abMx5HiNxbzNp$a(rMHzV?cy~$ME6Ll9ai%IJyasctPrJ z%V{8@9P<Mj+_Lmb-FdMMe%o^5#2rB`Ux_;MDFdW-6+cf-6xThWrWk4Bn@hW(fa+x z_r$67FZ0bkq+=z*?2xRMj+U@|8){g-eIe9r`IeMppklL<_ee!8x2~wQIkF0~Ns3xW z$=+>tC|Tnup>>$kGdtE9N_W9!;ZRXscKI}WLX^+=hEzU_Kc?mETZ_nSFGil#gECQm zz3)>w9+Rx;QSK?3JVjR0O|*mBtQV=@MM%kp@FlbGH!IUsgV)OCVMc_iw};)-6DxF! z0;6<8o~!WQ^&J7D9q!Uf9zm|58l1w+<}?RZNr~u2q8DX(q%t`k(Q8jagT{^|Od(}q z>%dRQriklnjW#*GAz8`G-959sWXL(oBMcX<%=GL`_w38`e3^wYj;-l20=iSZ5Ql!T zLD=0po<-L>DR($*k^1RLo8pmI`-7B_)_<<3#ug3eO8+5gQ^kqv#9fE$$t@OIFRf}l8-Qx{A>we84=i*)w16!o=TX8l~uyAj^$gzYFAHGT8&9^FsMakmX9Sft@XB zA~lQ@1Rzj=?x*?dI>EMqX|#{yG?l3Y|(_<*P|wU{RgIznpuFETf&V? zJWkPSXWk+muO}YT%c!CSDsl>GuQ&Yqr>Kl($vld`J$M-{HOlBgX+LIZ?J`=*%cw;O zl~E)3>w8_V(*Yac6)#TKs#8)u!|UfC%R1eBSn-<#E z=XjC9@y4T4MkP5OZE(Cug-4FZ6cfjH!(ZPmrvp-4E7m=ao~FKXQtVE`Pd#B?gPgiw z9`?wK=#%H_7t!4hiSN_hFGf~yP8DCHiL4^~XyN~PqO(Ic$B3FIvVBrc#79Al^_oNG zWIfA?5Kqh_NSEIg(Nt9<{)*+ufrk`_sQ-iOk(m$CdSpC!^0hmuvJ1(4G>2KoSSpRI zh>jzzV^kcGQU$<#@0<_Fg$~*u?l;h2RJ8O}42l{I)NTTW(CS!xdZdb(*2BeeE3 zMn?T$_VPzMJu7IMg8psT^CK}68ui1)=7^J;xQh+X<@w?ZT;34>TC`YwTHWwAF7};{ ztZa0^xKEVcqawoHTup}3UbTO}v}GU$?lUJS`l<1eRh#$YW%RIE|5r|Lf-|`s%I>ub z%);l)wb8;pggmT9%=dz!ofe}N7D|zw*6D&0nj}dBF*qS=%_Ur+)t67BwbmPz(B#B< zO$tr?=QTrUvQxeYp~+_XvH)LJ%K%B*$LDESx*fL*o>eH=8;B-sD)=qzUSCsFu0AjI zpUzV!z4mLldO-!ao%r7#{BOU!rCV17JEGkQ-u>&)<#+#&QhV*!*W|888~q$aa^j*Y zTX6dt-28i0i}FS6S6Z9kR{AipQ0Ke~fBKx7!+$$R>HTs}mFCaqDAPhF{mnToaG57+ z^kreHofPevbCl*B8E>3+11{T!$qU~5@xOzj@J{)kLp8vW@`^Ji>ua|=pvy^pM|TBu z6$0PNU8JbkJ77pVe4Tddx1860N$O>-Wcp2{^{{u)K238~?BWbm{3na{>igxs8UFfS zyP)Is@O>6~t}r|wD*$k^;i;J%kX}Bk%6I-*{064fz}zoCb=&z%VrA-CRrnM20FlUE zR~g_({7>90--}so&GZa>uOFg{jlmeVe?c)`f0h_%kI7DuvHT)${0kOuTYwTGG=lf( zdHvhF$IdV_zM|PQ{hdlz42`04wD1DO<0|w%{k&e({(NY1Kg*XpUd5!rk(4?Y;WhvH z@+$pJU+Cqs_OhE3jvm8_4gX5XOX?Zwc$+H?F*@6wpT(Vhn_mMmrwh#gEyDk1tN+9~ zDKh>v+Q@NInfW$a{_bTmH{bakdX0~k!$`dL&S@(8*G{W;o-W;@eeX&3zf+Z}pUB_| zjDM3A!7NWZ&+2#3X;pCjWHPtm$5ro@@&1M^4mz)M_4ris)J6{$b^7wV?`o-f{2BhY zQC92Z4HV_NQ`FMNZMgghr^^VJsVelZk+HUyu}+k+HvJ2+cC(H3i}e)il@P11Quc!1 zq~kj;0l199`aXoeHN%{q1F1uYWP1K^dcLQRbjEALcM7RM%7ZvNw_Nd<&~^UxDfN+K z)aV`JMDyO>@CRMEltO7$8dO#qY_m{pB`sT9g@XC&Y3pI(+iM-_4CF>R*QJSjKnYv4 zVPZl{OM%&Sz0;Gi9wVhwl`kBoQfwFkrjO?U@Dmc@vrcE&bZa%Z3l zm?O&@1J0GxF+j#9wEI~h9(QY--qr%^Q0NVtRagatXHV`dzgL^s@*!N24%?Jfov|Bs zF`1rJKr?p3U))n^@Hg67ov}QS*zMWQj{D&sE!?$fsNFYnwXjS*5$%gqyN-@by$3)2 zuJ&uw*0atzsvLFuNq;1pTWfZYoVhZ@-Du`UaXDn>uOaTfuxoW{Ls2|dJvBw^PY?0h z-QrMlYMhoM1VB?`v=Q_WtqpvVMux|#Y1Vyrx;R+Dj}p&*1U9WlU<&jvG&Zx5S38cc z;;$(VXVpn}OIYGK*VRSH(>Fp~1@iQbI!@mMhBxsg-KO%RnsFiSI>%QbY-AI=aG6`9 zbB@dOpCCfyv;W?N`Orbu+B*QICa!WgLB{PGEv0QDo(A(Xei^AY`8w3+*&1Lvco=N`OU#9G56@U5;^U@sbAZ|3n z-P`G{o9Q|49nq-shzPp#G|B1ob~!vpNDFqlYu$J9|65v0tjj)-q?xtOw!`ZHPsggC zKBohQgOLM|pW3OVd_iK#2$Wpp_KEP`-st)juuYt^6}zanT}Hy;nye5ltNOu}QR*g3 zBe8etGK%=QL+2;c+goR8#J@GV48>X6=P?x zrrh2~Yh~^O3T9?nix7Ve-H-OR^K}mx`wu7wJPinc5XPCSm@?b98&I^+PB&BXq@9_P zw&JoGv!}3H*(12eY>%LO`95E!u!ty9d(!UXYCSK)z#O){2%h~Bz-wW zBMVBZ;XJ=i6Xw$NJM{}}j99erKPv3o==Lkz!R%Muhl&J)VA4y)NujMVDKw+rp_y*Z zCYC=gzc;Mi42=1IQr9q#i`_t%JB4#%zmi&YH1s7+-xeB^EK9F3-t7d}?Y`G9=sQTr zKdhc%Usf$QlwH21R_vOh1!~!gx_uK zPPhSMBkC1sTo5%@fQ?8qL$`qc_OGk|I3aKAh@V=PpEj z=Gw*T9-iLgp$KxZ6@gyQ z13V|_YdO=(VPGUp=%nq`53kP@vZMiybWer&YM;kxDOid(J33Q*t*_P0J}p8l@xvI7 z{8JYd{kAvit+m8c$+H)A6Oq6McHW(gVqIiqHV*qWN`7Vf z-WpnIBk|Y~t;ar1d=;&CWK}z957)oR{QdJx&-YZ{=Z6i+6!jfP^$mlW{N!TWZlgqf zKRwrC1NKMlA1~s9Vx5?ej0z7kS2*4RAK>X3o9ewUCe=Gxe7$5vq4;{q3in9*a*6R} zxlxWR7%*?o@|^ZJ)4x}@!|A;e?S9JXx`gv=MtTi!i!2imZB7R6A;~ zk8=1oj;+b^9LVyVQy)YU?G6?PqMk+AtRFP>L8N#*=D=7)wR=K6{h`u_Sl6Y{mGG2! zKeiDuO@ze?`yn$|!(M6|Un|J|j8}knYO!ur;p*HAo90!}&qs?|sq0Kmi*|RzflS0- ziSfhe5A!W<)`p0WvPO%Qd8{!gULn3ZQY&dOkD^rU-eEWhW4n{>4D$>{f^DsI1sz^s zj=hs(P+Q}`MPV0nJNk)ma=SGp*4!lOkR&4Jv#v-=UAy< zQV`*81M4EEw|-Xg3LLjEncXr+HO}gZqT5#P64S$;EN>{r-Z_vKZ`zu{T0o1JuJfhqqKR6-y5EVw4U=MB>-s#7HEZPDV$MNN z$iYE3j4bD9Uu^K7WaVEP6zISW3be8e-0FTv?l5Rx8BwX98m()X-niQPlchgv``T;Q zzP=b_YF|f;Bz=p}3D#p!klKKN-~wRQM6~LdD8^G zkK*^=M77gr#7?bCkHsC?!@}l~__nl=(x&70T%W+4x59<2`l=9`l&J0o+mKV3t!QVi z8Kh+_8#%ArM*D(6o>xVB8p2SB<>EUAB}K^7Q(0# zvR-fnscgotZ(R#)){1}O)>`cm1s7S^9P2@IyfMU`B9hFKNkXK!r*>8a-1VK_Zn4_f zt#tnJ&I6)9IK_t`ybduE%XuevIJDb-QDRUOqfsub6S4V1g6;i1RQY4OZLGIj7#5pn zCGT@zl?go$r#5Q0ID~7>pznfP`F`>J%Yk@%QJx&dWmcC*Yg@LEAoJs=Y370|j}mKE zvINph+w3Iqf#CENSj1}sKZH@@kg$i|UkRf7Lj%@Ytm=Y#DWD<~It_RxgKWmo2AGaoy({N&L08pHu7^!fS6Q z%p6eU{UE0MWHY(}C~T86WEFPj7NR?Y|9@vwFFt~O?(_icbG^0E%MBL)xSd#x#wKt? zE6*ktqXmo2B#W!G7e9k?Yzc*=b&$MyKO>G7-%cI+c^P@AbRUl)_R+pwyBA-+=lUrm zAM15^T4#rLRD9qh4c0XkqqUhM#rKfIX7*1Ckzl@7WPo)fSfSk|!1C~sw2nxN2iGvC zcPWl@T2`J=CZCr!Vx*8S3VF0HBlrW7|2|<0$)!hV14j$dZ~kMQ9m^ItNH5J9u8Fhr zG#G7~YlojfA1#|q6jJGUSSdjPW>uG^WK~af8j|ZF+1gfdjM%FMW~}uZ`GNV*yUVTf zno(LnN~^UqHPk6Q8MBc4gp-nYVM{09Sv_t3+O!dP1rrzIS*vxy_IwC2-woav)02`9BHf2P96HIj;x#p4{~8d z)$7!5$I-_-Z5Ar2c3q6M2?Z57r!!t?`g|_xKDw5Bhs|=LYUM#KONgX1mZND0hylON zd4&+^Ra8JGZ~2L3vO;@ZyiQwAdc?_QJ>vSra*Ed(R<)u0YQZh)yW*#d)3U|&2*_86 zw3`6UW`@f+F<9!Lzw2o)kg*8dx8Ex^@5{A?^UUW2j&bswpnBM%tm+I{+;4}5CC>#596ZJBZuG)ad~N} zFiCxGD&0X_r@gTqPfK-w(-yEep2j%75Q39w^BF!3@oU-lk@VWk*Y4WRDmP!-h|zy= zLD!qpYdvARsS&)4{+eH8{*3HCif)C(#&REi_Z+p$p#OgN5=|ce8ArNoP;y%RpXpFM zMEpH907~*CG%)`+nP>&%pyvAtN5(_`En{oAzF+v6M>^9m$VQufw6^K>T?Gsu+m?$n zfOswPK00p^({F}xZg4YzP61{bU^##(0vup~cLVbyeXU=jc+B_d+m95eh^YKS<`6*+ zBC_(u%;Cu0V(cI3Tf2aKpl-xer=P9woimR_`C1$H&@rQ0y+JZu?|W&LXZG*^(Ri2h z!&j4`95yY}0^YQwk*iqwksTo=^y&3)^tTZ026>0USlryQ85UwQ*mvpSMwk0d>)0#J@Nybsf_&141~Bl&kWRYw}QnK9&A;ebf1BRqAzrm zJpXE%u-w_>&M0@6)L9PLk9qsTXz@_=!VsAJL(ZagNY4+jiU|n>c8h)%@&i6VxW3WO zTvmO(7+ds>@1b-l#wLu#Ct{@G+lLE8&9yuU5YytDDG0+DW$j-cPkWkf`&o~rNyPV zmE!JBfMCUGDN-c3yGux3e(&?%KXbdYce&i{-pqGqc6Z3(yOiX;xY3Co%+vTP?f&G| zjtoU)9kh%iTNDR<3-kioPXV8MgOc+<3KG*)`^Z~x;%BJ5TWg-i^u#U3@YJJRV>EHt zIq@UAdUgSn0MP&XR1ceYX7kuhGVt5Qw+_;p^USMGG$fEQo#oJK8P}3oW3H(*$XRQ3 zZ*gn>yt+_Go}yxXBPI0RPcCdBdunO8)Gq+HYSwuO;NmwxnRz9jU!L-{js0~}N;W*{ z9rskqT%nm7MNTU1S0<@iE0*{Fyo5P}@DKUk^d6I0Qy0+23^dFOtotG)w$-Z9Kh+RP znNLr)*0)>}^&9Q#_8WCa*Caw48eb2rv<9nuCH+!HTG)CCB~3STa&>7la8dsK#zpP> zT%$|L{I6WIpYPmVNO!N^&T>6+96bCSOuZh2UYL<0Tq53ux+TAp8A`bqM>Md*(>wHf z1ZWKrxftgd;1{zW4_24rZ@qrbduyb!iT+h3 zWfl-uP_J^7$1GjiraFKHfOfpOxINqo741;TB*(QD(-!>hZtM2EY&1M9CMq;<9cpOn zB1X~Xi86UQGy1ROFtKXIrMVsM-T%Jz&~wwbV&mzQ@?&ECJg}x&I_pn@TRGO~B%?vM z4qjKoMx7?bMMCS~(}?*zASX+Dfy*|c$4#_eUMX#L{F~v@P7YaTK54K|;X6)fN>ZDV zQq~7n2FvK=gvL=*Ymt&SJ4CO z?)SzeENgfg-PYib@pnl}5u+b$6@FHuWeSi?$lv#Jm&lcV9=)_lZK;pcH^P8sYm59e zn5reZFr%jP=ab-#FgS(81n`r@N^}3%27ME1LL<)RxpG53Q6kU4 z%@9Z0&xYZ01gM2{A*(pZe5HVVqa1shqVzlEw=eI9dRf>P8%bw1+nk>a98SiPOGtAw zkP(q(CJL6Xjfy@EO#zm8wTld{24*NN7%s18C4C*|{-w<)_;baZ;dt0iE(TkwlfSL! z$DD58m^QrTz>0Q1(ziobstIIw>BGj#(4|{8jouprQH*k)^mn|X{-*RS&RiB9dH-2X z_tp5;#L@hvgyHmiMtS@$c9tZ;l`;l$ws#Tl+Uj0R@|8-JqGdkRy4+_Ox;V3aZzUEo zQK$cDl09uoYyPc7P((w{)<7BK2e-NoDKBmx$@k3}rRdh<&4;*>;(?cM$DwVY9}M~D zp0oc@zuOI9xrv69ZLG7@7W(P5u%8L%T(>i%)_FXT4PE~-Vr6$LyDF<-+w?RuBL3>q z%lH?4xBQe$l4M}yI}@0FlMeiMA}e(hQj&42l-)usrvRU}ubfs=akRC<(~Z53v{ zO)7)N9;W9Jo0fi6>R=l`OwjW3cd)jBfHKM;kb_7tWrhB&X{-5KiPW zBq#4EJMeKf7Kr7rnoFgN?NXbv(wNGr-2TXFQgv`BW^T;OQE~9)O^z=c^@=aD%+pMc zFCE>SOm0a_j*l3%;-XA0F=KI6P2Sk9UA-1m5sPHe5K*P%U>ygI8tFLz-Go(JA5ckX zwAU}?en&MdkuRw=p_19+fNACZELVlUHa>K+HL8Cl;CS!e8#ker{FhinfuH3j4u+hC$p(or|&iV_->=bAW1mdm||LdAo zxLX==TlJlh9bA*8SS^Ej9IY{~Dxa(>&paQEbcL_iZ90?F9FsQ%cHNd zmOQ6szkE==!!2`LHJE*_Nxel@oTmOePbaT+8ffix#{Q=OnJ9Z-4k8E7n32^C7h>sZ zwFtuMj2X|NQ)@xqF|5l^r{V+|+zk?4)uneewxfbb9%aMLR%HL z{_$KKV*GS2GP4>u(F>mq`|-H>HVIZ7(#eZBP&{N>1t#4{^Sp!4%IXZucLu;he(QYz zf>y3vyXq9~LP|o^-0w1Go&#wRUtZoMo@$&d>kxGU4;BOtHBGfxmsEd=ru1a+{+#-k z^{L!p8=9}OCI|X(g6Kzd0eiwH&%|&JtWOX#2y28LA_RW+41I)Nf;WJx2v5XYL@>h4 zD`X9ki!ep}`7JZXJsIC1gSy6ep>wAd?Y$<>^-?~%Q$6HZgm#Iw8NJH6xn_Vkdxb+_ z?BovdQh;k#il$Wqt|h#mVn`cC@o#|y;hKmjT5CzFc*@=Y0+>^JE!7o2*d&489xgYm z=BF-TF`wibz9#|~ugCBkh0kOZ=Ak^aJ%C4!r0LFmmiQ4l@Dlg}Oe55Kd|JMcPap9I zZtU=!lmyr$rZHI+;H>>{T1b4x;)$-oCKIz`Mzj4yPMq`Rh&^_9mc>7k4wr*$#LAxR^ zt)vw2<7$%kuwu?s9uTf(3V`7OGspdmk`%im?}I?hN6Tm0L+muXhtIbr@uTu%WWh$U zs%hXpqK3ozF5Exz${oN{z3TJ0+0B<>OfqF}!_VEfu~o^$oQ2NxWDm^bdZ)>1c4$5q zU~HGsUHTSpV}k{lAA-8{FAT8nvw~15iU~owP(8t5C0 zrKfFZ(m6I6*GA0C4Zr5TcJBV z!an+iROOA_7mYV*$q}>}|7!UM3*%l;hm!oL-q;JelqusIrjELMQyJoZuN1bofkR7m z@p+SEhC6@}bOR)wM^p^}FC$+Z08QNynZWZS^XE$TX|0f+m@|#IyNvVazs4Q#IW9{e zH?E8(7&{)X-QK=AhI8o3H@Y8oTyiOb>0IS)NYwH`-F(MO`O|YwXnASi>Y@^ooPM{! z%r#1u_${2mG>D3EGLW+<<=WWQ#fFRB!o$n|Ruc9Du%TsGU%v^NaWQ@g^J+f)Il{2a z(&$4&qsuvQdR#8Wo2JLg0|Y6_wqU`lwoV@(@=+@6R@660#ooQHv1H`UqC9hUkURKt zi#6AYLxELv`%BkWQTYUx$XKZv{WU^Yj^^+vBr@8}`SW3kl8Rz^l<*v^ut+^#_vU39 zm5=-V3<%G*mChZ9VU}o30rHfLfuScL-lezaCR!!DCln*7`SofWuOW*L?{)ri8A(Na zbj^$T{AY36yUEHXoe&M}E&dNw;dT7{w%g=icJ5umk^!9a_ywK~%XQUTy*r~UV z&tm)o-H>+e#-nagb%W;M>d{9z2mFxDc=04e51q3JIN{0j3GI%UHRddJuO$KylZ+!2 z^UzkFA#lz-<5EZ${DjtqQi8HdBuZNT!kKi&uW;m3K6Ws}zHFgR#5_tEdNad5XVR9K zbs?9oK%ut+dIShv3nLiAS!_l`p$@$VyBXD)XNIUSN&$?XhmNOnfywfz7DXL}7V}zU z2Cq;cVi+|YwFm2(d8W{65!(fEXu9T!+ldX=5zJs}JhQw$&s3W@};)+u~#*LIZtGNdR0>uO`#Q zkM(zeo2eg5fm%{b=pkkr$H5>KjcPJTZPLy{maY3M;01vzPeTsPytZ8%Mt=$oCF`G) zU-h@7M{GjJQwyW@Jv0F|gZea-9FS6x?01(?dAUaJz z>R=;HK+_BQYP27$07X8cF|q)vFMUr-ti^34i|zdBW48_f$kNF{ z-2OqbywLY{fN2}uxp#uy6p%JynYaye>Z#=iVURfT?sPB%P@B`eKIrPUBLx|PI$OH8 zb~YfI{&z0&ZKIo!hh}OS0TH_}7KGt}s06zSAtTF!1`erpPt;RSPYhzAw;uqnAYIFI zTk!;YCxUCGu&%}R24wM8oi6-`+ZadWMz_3J^T%msu>(e8{Hd~GFDrN#^4cMG(ADEJ zXrp^YOa$fv0#16#C4_mVo??Nne9Wi4tj@-1rk>7J3BX@B>V&$vAkdWih}_5@8<;9V zL#YgRR61O~RNDzm$F$~$+~Z8g*(RslzFn8}3Hrv`R%YI_i;><$=ZBSEnxkA?T%5Gx z)vpAwWk-!wKj^7-NUy%Gc)9TRS271&YM7Fo@|G*G>)W@nJ}6+}L^!=j(teCyGTOtK zYiOmd88Gl7W0~+G?Vwr$i*S_dK=PIBksJlD$TL>H`k8hoR9H1jx@<12OOh%97Acc4 zVPiV=%GgCMc0$e8TRZ&0mre zS?MJ>#F9Zlzg4rUX3~$e{}g9z$!HO&@bBdbTP z{oxa1-ush6$*iK|G;)(=q>wqO*){Sq@TlgC&X{6be{HVtxt=;W>^7~D!f=a(H z$0+nODM_G}qUltok}-53w=wi<=fnngC1%AKK0a#kDMLI$?-!_f^pa^gE1|}xfIf|{8e{lH&4#V?L%K{A_Fsz_D7MKd z6Uojh=PIlma};CXwOk)re(3LZS$|qKm1CF2zD%gga&(+Azh2nD+`_-kXwDso6e{^a zko=Ic>1}c$Nmd`Oj>o(;msHLeL$w|6+fnq&cUY4$(IjmjA3g0CRwgDQ-TpfI5cN-g zZ*^zVb~7*2GMAC3scC;Z3#Vziy`HG{K0OVY`icS8cbwBV!!Pqh*8&RxNb=J$7z#M9CAwbXRDL)9)$8h zM|2&cM*c`f7veRw#|yeTCl<+_u6hu=fR1}jE#zI+wfF^rLA#?*qTP1Bkk+kAuWx#V zKidnxxV%!ksnytK0M0)?RLLKO*3B!-Z{LIxa`6U0gL%3)qcY95-#K5-szom+@8i>B zb)wAOQ(71D=~5MH7BVXYDeNd1D)@fNM-Rr_msemyt3m&VwT&)?{vO;V@B*EjI1Npd zdOs^C?32ZP7ux@+oU(|4)X+~n5w+-txS}td$!7qCK7|Vrt!Q~@E_uiJKhfgRvk9+h zX6h8mJ{_(d;y0tXVEeJ^5*HE_eo_cT-9ghr$tDm*AH}~GoiQ2>v=X;oH!L)HXw!#l zVdEW9T6nk^gE`9{n&2@fuivDkh;RHey=jrAq2zDqqBfeg{m#mj#cg*dqQ?tf&>q3JZn6e-Bq?CBH^Dye6oaI7`|?Ai)Q{CbmK+UbNX^vnKwuy|vqw|vponnD zO!?M3SkF%yl4Wb@xM)lrP<(xtjj0T*6XCUb3`w=cMW(1jD#tTH)Ap36-fGYYMSmL^>lpj^B~`(`(7t_u)0-vqYX7QoU%1z zBF5To5fQ9$`~s2|dM60ce|1X-(RY+fFcE|?q*9N~{CO3S`=F7r$VBEbMri!X>yQR@rO389hS#?H3B0k%v&Kv=~t(iYD>1BsGcQ~5KFd>;%-3G;`&dUXyQ zx8!Gc>9^kIJbrDG*DlF&pFVn?d93s~PUw zjjzQnyn-aYPusX+NW^?D+~^SK z)Kep=1ava78z?GMr#bqUw)c@PNGzkv7Xe-z9lu)~ z?Fjrg+R@RS+g9M|w!Px&cE99IHcgx3CvPj^iO`_7f@1CMKz2^MVFgXeBMXb?5AB3< zmYbbv1Igd?Ez;&wzx2)-?vHUr-Cc0@yeTRIOz=(lO0tt@WOR^oT47l1`jBxt_O9b3 zF-yK@_8HgE*tqExO7qe-HTCvD4F(f;D~ASg-Ux7WjtA~I?kQ{&1qK~t+EH{)#QP`( zUbK5hOA!w!e@I?7l;SGW{e*eBs%KWm34DAy$ zTZz(_?7gW#1(zLubiYo#;hnCbuB!5C6ly*%9id$8Ejfy6Gyf97Xxp%D{4!`&P6mU$ht|5^cfFH$pE~K?GX>q8ZTlnD_sQ9|t zgf(^KtK-7#ism%DG9);PzIY<+Z53W$A#ZR_8~p81t$P9B*cG6njYF0Erh(7M$?t=nX?_?Mh{-B3Quo26KJ3ftv=qOwU~b}B3BlfmCBfd+3pED`i=88@_Bx>^`0M`sjGj4>O?=GJ zX_2|;x5SZt#~z~x!Ub^sDRl0o?a2agPRQ%@SsZi~c1%pL_mnGu1dmTn1YppH2F=t$ za+TXALICpcc=j4}_1uR~Abx=QZ%`z9qnn9p`CQ~X5*x>e$fRvN(@footkO)4q?sUp zNeLfxbrZ~r%vwrLvERcE`05~ z1lP!RpK#4+{9@i|3_s`^mPT!pXeBP+{I#QwBRL-<6~ zU!S6wxo(+r12d~vex7NkUmvTOcFfksy@Jp!Ry>SwXss-y)(k6UG~6*Q9b+k*)41ju zY=hn_3JcKz+E4iTi~RX(emUn;ew({S({JZW9m8K5ijKCkL{2{Qx5?sv5t!dA$&A0UHy`SPChZ>4PDntK0-IDX8N0!W&Qp+~QDhHyR`yFN`b;#oDUx%4XSW z(eL_y=_H0MFuTM@Ec(R+A*tqn6s*e7vVfB)IpMohGUa*SlpPZ_3A~|i+1)XlK9oyL z+2HA}h43CBnhN|wWhRGN<)G)@sWFI88|<L*b~YfkH-?}E+U-TI&<9uw`o1B40`cfAKMtnqOdaS>5U(q@+ zqxIr`QgVUI8LZODJ4==nKVfVuyr>n{H;Bk^T5I`#2W7Hj zUX0<{S~B*?(Fl2}Ly!E3(+hej+D{`sD+BKzQ*ttzrRO75g4e7Wo- zk=&2@5Sffk&)om0Kmig4)y?AqOQ&BPTTZ%KU~`(79MK0>1WieSC)={1AC@LOQ{8uC zX2rJd7{spn+>xJ6-l^ErH$V=cwkb=ewsoVdV=|QVL(`eFv&giB+iup2oS@QVEt%P2 zSZaP=s*^ZkJAHfmq5=c@M{ltLWwDxobE+xN#Y^~CDJOjF^C#Ok!iW(k;^d-8{orDY zcS|pyJFCzdVS}(pBK^wyz+I}>VjF;;yHs++ety)?W+xQ2zH?T4K6vRD(b5F6Y_(Mm zcTH1t%hXdlmDVD;F^I?w8K?%b*6q1;kKlkjgu_3Aa;|yZ&Pg8@EHo4oSF86t7GIqf zryJI@N|?zecU>&c#qQRqDBwr9AYXJkN<7L}<-4PP24_@VLgc_FEu2+YQczRqlD5nb z!&t$$JblFc7zuGkcY*WRX8yDOE~GgL{0};Akb{sWlOpJK(jtVw;0nr$B-Rv=Ihgo2 zTkbk5P{jp63^JE#H7UqekP8uHGsqnmYynr>X1YA-2x|T+EIlxuf_i$<`=3~Gwu>I7wC3Yn^(t%JW@N|i~@&h)+BFyPl zw0ql;a*AHADVa6gEedE81@?>r+ed+ad8MvoZ&+BtBejC$T$}jUCBStR^RDe&qoX{! zZFzXQ3b9dKn@e`iyaw5%ojKjArMdnVsL0R|bW?v^JIx{7MdV*uyHc(8whH^dOcu=u zJlSdmG{IZwFSPP6AacrWnuQ`x%GlTtlb}@H?aYix{t~WZqF6QD4`Nz8rjqs+(Rf{~ zIB#jvo%%6VB%>drHNAT@IVCgCGG?*9b&b-*wU<7bDdWFvdkkNJY3zTf;HnDQ{DNxg zr|K)1_N{8}u>Z1YN`8?ZJ_d_&&#W_7A~dACXsWGyco5Vn`@A8O=S{G8wC{!##fiT) z+P*8*0)#wXV^SUGjCle+etJS2UgEd%HzLDYb;ILzOpu_5n>1iei69MPkt*k;4({LE zN1?EQzKS=;w9i~_Crv$XXtzT2z4L77 z#AayRhtZ+`yzJQAmNAWx&jYHyda`+2Gq=kBzeU=9K}Y2yeh?R(S)hpK(hTjddWTr= z5Yx7?&^WtHTC$EFUVr&-%j5cYP3`{`c`|IdNXP9>Dx>l(zXvy+5)Uwdj={2OTe*Eb+I8EL~8^|R!7Xz4^G@)son@nSgRoC?MYl!XuGWkey-j(|^>Dj&_% z3FE~%gWGAWsGWqhXFhrFkKVhl8K{c_IQ{d%Kqd4+Y+E%j82uIDb%?f8hdv4N+l z4>Vooev0oEqGT~81$kSSk39XTn3N7t>~^XZSHA(Qk6$ee7u!j-Bhv|_Lx?Y~Gq@dA z#cRRz!~pGDArh{|#=wcU1yCpZ1*f{nuusSZ0sM3@RnS#1B4I3pTwtc-GR-WGf+$ojGvcN>DK6wOq(gl&*jl7mI0a42ZZHJ^bE6QD(K(GNe;8 z-$-tTTOP*ZZYX9+j8LiTC$Kc@vDW-Me`4Hmbg;oqp*0evOtg13?@E?|VgAt{XeFXa z2W%+XKd(Udp!`aSCOHYhS{RgD!@27^?O`lIydnifC9!@G}o zdyzpD!jxfK{BHW`YOL>n#<5#-s-1H}FRp3F^G$Dy$l-Hy#GM4(s^f3@iEaY5NSusi zy2rz?4T~c7xd{YN&jss89lHtgEGDcjH7qA;JiUXsLLm0i&+hLOF+=)8UJkp0+F!7K zv!=ySLY-w8I*n|=45qQyTk5D>CV+gc554*+uA1yB+~T;wkEijsRUwXynk=q_5rYUV zmNQzBEeGJ*MU%V`fFIfQvZ|4WyGh--cHD3ypwKGHCFJ7}n*pf2OUW^T)R^m9zPS!W zq^^ZlV4C_}F=n453+O^LHjG6MC-o4H=Y912W7ym0QCO@%;vV+NxiI>?n|yS2ii#R< zj<6hahS}?h(%DK{`K@ib&ia#evd%{KN+tfE$;b`gKoHl%8y$SmbeoW79$SgIVCd;c zy~at@;g~e+h8lEs6V<-pbV}&Hf^_wCz8rolU&satx_=Z4MjxT?zX(IB;8;(0Se=7J zfjrXWz3S*=&krKl+v_kS*mGC=#oQo`XDc&yG(MQg{`rQ;GK5f%bRjj(+U2D`>7PP1 z9=^KPVA=_%Yw-rUq12UgT;c_;aQdQ40dQTR&_8=|>=rnbyUucGi<_Uw5kY-Jj5z-IydO=Y0 z#CJhh^Mqsp$=jPp@+QTQ%8^=JnAgnC8p$&j7t;JiCXQ@aXcN?|IcXCsBD52bx3hE_vqhWH=4O9aa4&aZj&!)uA#wlF z5YlcM(Ga^ALB91?D>_6Il9@w;WGY5$^;!_@`9vj)J1$fH0)F++h{ducJ{pQ6JQSGsfaHT@k ztAIXuS1-n&RlUuMDWa>urqjWsvCN{g(3T z$DsNsIqK&PG2OSrii{Gh5!2NDso!R?1Y%4x)ZJyr3AD|em?x}m!CjPs_BOu==yJc+%2(}y#V#zbkcoJK7NMlCOkosM zvgFqHG{8zB$j-sAoxtELTk<9&r<|eHN4aY8N8T4}C7=55ZZMC|k6&iG4$cOi&h3ZW z)hFL#R38}}GiFqQzmlH_*6CaXmO#QiKRlc6I9mWeC61@kOhI%UB+d|lBDr_KGMK9Y z_fNd+VbL7_NoV$`AG-qKN=%FU>n)de;Ck@*p8W@)xO3&>GZo$Q_V}#4p8vO-iff(r z6J>3qo-O$;AT#74hg_XBko`1__7^3LpqXi(SNDCjzzj(_@k|dA zZpflv%grn(fYJW;%u_jI`l0JG6_O~ZC=jDgqCRrWNGoW3nn!y^@q5A9%sNPzhWj2z zlxknH&^Uq;y$05h4GE01dXJumf*^i0~;tC#!SKa5Z;w}{`Y~*lu24lCq}b+*<7+cBfdx1b8i6CM!PYF1s= znm!fHEggs}FO!czBWdT70pgKza_9tFuZo>J^>^-uR)Qne z25JzO^e_W;=`r<)u;#%xt8qcck#<%{TJN?$fq`qh1c>YD%>ok72%Qer!%2@O>TP^H zv|WgXh4==B6E7Fm1@7IisbFFcOb>=IZ{9iE?;Fdu@Aw?(feSS^P%l@%SP6lh`E7xA z(<4U5Z$gyE*)L7pUQ`!jZiyAw*-oz*`KiX3QpP}EbzhLeDmr`Lhv=SMOv6Mw3FNil zpaL5y*ReCiuf2K2d_-Ke{L!NTXvt~!DW6j8wt&_BSia!H<3|goEh@SYupHe}-?AIb zv$+8RBY|`vS1{8d>X!FsC!1!wLWbGl>N)pF&xe2`fB=FNF-M~x#RAehfL7M9u4EWJ zf5Ap5!Y@M$7Wgj>q5xW6ir)2+@u12chmyM8gJ(h0+F}>hBVPQ($2NazB|M~@S}LqP z0<+Jk=oWvDpXe>L^#{RJ-Hs`)&eVK@hUMsb1{uWQZAF*lLvOrQBx4jTKne*x9nRBrb$aSxf$?{qrpLzO$A6J@lygF5V)h(fX=w&fQ!aC*UUJ?16>l>Sf!FC`Sn=YEK=gxgl==l-tAL_xqyP2gT`h|XW|;olPvKB802 zF}cIwveVw&kkgL6eEUZ?@I3bAh{K>!K8ULk^m2tb=nI`|6um$+4WFsa*cE^AoZ#C} z9SxC{;wy7sx~^2fWsb>KBAO}(yvEEtarmrbX~4O!JQ_sgBMqjO%!OQ*ieEqYM7KA{ zjnXt8>(wM_6Up)&c@l}hA1|bEj&jQ7jS$`5qL#q9Y%YCh>9gJwhgOT`P;*WAFDDP+ z4iBUOoRENWlUmc;hdhYXn0+0(w0^ZWbotp60%`YYFEA7U`fZ>^e!~fkY{5{*SjGu> z5l2GL)}Fq;lp))>-UGWnF|S~xmUo7#pQOg4YTpURpq9a2{_FqUv(#=pYTfKc7V)QN zlrX|T`lUFUcF<)GYFX$`4oaDmva^835#l7m!0LvNvW-53iZ-wz%+J3dV4w&b8&HmN z!r;5_sg2URy?}AvUbnbAN_B$2*?Zj*F(UN&wz%F3aYzB!KGT~fzl#SFBWKGaeJ{ZM zKHyX`yzU=(tBcqq2Fr&K3J}C$DOKzEgD>FTI=pmU9klxQYqSGRI+~bjRjEV#Thz?B zlO{^@PF^p;ecGsYLhV@#n|D1~g(^HB?ZWFh617F%?HXFz0t`w9)14gJ8;>P);1j-5 zduOoqhps7vaqzS6;EfkJ?Q|N2@s7fo17%AbHSvk_ z-Q*2KeCR8-iq4mwYt6s0_kDJte8V7lz#kf+Yd!Pk-N;ZFplH8%nxMwXGEy>98uygF zJ!ai1@(JgZ0}!#U7#V|;&unsoXC{Cn4RfD`7(1sLB;y$X!&rM@tW)$sdNx*P6))?h4@XYA=_>4OP^#D+C8hnf;zTn)cqE4w|+jZXmk$!8EeLch?D}%qOAXYU~Pk z!81MU$n-^g4B5ElQ^u>kBB1e`v5^s;Kff_tw}l zV|8%qbI!9zvc6)OlWCMQbjF)^dI_IT5@D;w5hMPW0`$)}g6qlrK$7$JaJg+~r@^hx zXO09PxOm^z!}uObV(7kr^w^bmpS4MpzZzDK?*}nOd6lM{{k9kK?`GH}6uq$f^DqKQR}Yxxx13Y67Kfbt0jI9?hyw0 zWbU=x(+@;_T+{1Nmb%6>!<;GtQ625>^4&1WLKyRvqYJj$^^D7!<;OoOvi*IqmzS8eWl}m! ze$`Fjvvp$NLccLAC93X81-szlaMP)FJ*goz z8+n1@8tJtK-Y|9tWP&%^d)?Ym!8ajWZv}3Ms`RqjRS0ROgYOAE4~{M_@7%lWT>fca zDa_$|j{cww*^1uNTmkky)Vhvtc2G_~3$TXw=a1jt9>1M-H)-`p+cvv13!)rvWNdA$ zZZOuBh$O=ZBwbNHpNJ;Eb-cMlWDWBTS)T{jUaDF~rOR&zrYYvxL!o==LAVLPGUHu3 z>O19#KcV3mUM?BWtPy{@;PONgJ0#(xUg`y>Sh>iADrnkINA_0CfAp<3w;~Ko|4yT5 zKYY{qj}&0%t{oxR`YM=atWk3xQJ+QEufs>eA`DhDt+8`!&%me>>8}edF*4!+LMt5< zD?u9FM+_<4y$K_x+BC!2u+l_kLw|lv(JdKUOMGOe84XF1eZ;g2h^}ajU^6mCKH15&;c?T zu&-O8WY2T9L2%M@fZUgWhX(6#rgKiPvhV~$rwEJ%NTY+3t{bB>K7abr`|^=O zMRM!Rw7Y?4*eLG}YQL1%)$SV-H#rnz&yGX}#Y!zYL*#sS!%5D}1Zl;iFD7bD1=SUF z&r4rO&F)omJWon05A1c{HdSobaPaY{@E-JX%t}wbX57Gt-{Gl{%!_L)u+)u`Nv?~3 zV*2yu+dab8`mRKf3yRzj}C}Kc=y?N zK#2iAnV>s3K>G7{Wy`moVO9AZA>Fl3+l}f|qBTD%IKjH%?DytrtbNaCDn5MqAvL*i zJ0E;8M2zx>eOekkg@hZJ(F)dCc$7orFY5Rr(J|05s7OO^N)q`)v)1u3Blg@;c*Nv5AazF+9VrayXO zlDIAor#l}thRLjZ%fL9-lcyhEu1}-Ep6KuMqjcJb`eRnMIrmWeibGwxqUsc6@}I1T z0NZ!9K0kpp>(;#lGKY!GJw^x+MX=u9*vQUs3{A8s)psv9p{>oypsPd85n6`^9}Guw z0s-I0S`WP4f$Vsd-hSGmU#2k^9&=ow=%~Ht*TsXRwEeHDnW{y&a)@D2Z3Z(~0#KZU4Zh^D?iko9T{_JKUBh{MtH{_qh7| z+<&#Fc~_9nn)lkMRcY+x%Uwp2JOtiFbxw_NLOr`wj(fh7jTnK4aI7a6G=17Dmvl&kgS@N0{4t192r< zQZL1k@R7?JE%%?AVplP@#+$BUbjmyG^|_Im)bw^d0pYz`j-;~|;c+tP`>WcgozA-q zfMf6dKq|l*&q~$N#2pG%IHN*`llECR#+~~E!ZP9OJ(EH)K%#436z4N`)q4gan0AbH z(rSdNm#4p=|YfpxI0aV7TXC@*TRO0u8D-uXtSWBH}h99hT754&9`jA+I)ALaz zMs{94V6o>}Ic9ZnTKe#*D&f2UOD172gnkEBU(6)GU7z}tm*CesP6Gd240GP2+B@r_ zKX3(v1e|z<>Pd(+TrLi%vp}P2oO74lXyg$_kW=>Q$?6tFxC{9_FJn!V&KRh%}uBwxOe^pGwu)ajMf0RM`Ga#>e20xAmUp*55RGBY zwvvI{t8mU08GAL=4WvvfKuVm}extsF&Q?M%vxIRZEWJexaEk> zMFR$oD*DRABy=R zM(#U2&A9w+`1se4(@*@(v4&vbvs)>#$~qPF=vmOQ2ceWT1B;DIr2&DP^Z;wjaLwLdkDvVG ziL0lnXQ=3z79^&?0n$?)^XQCsB%WR~bs19E?pDVVcZ$I=*E>)o*4{KmO}u%;TW^3N zQ0`OUiL80xW}quz2b?+7Jv%i!78-jzm&vI}xeO~S1chrLg1x*8XrEc;o;N{Z;5QD$#8`U&@xtvzR5 z8wp7)Bh7J#krwGaMiowe&}=b2Qi3TUMH%Gt6VK)^IgN9*NG2A5wBkFjFE%`%bi5e* z5wHH;KVg6s&J`mAUrfA!ZB_0Zsn%C-JM5PoGQAX#!;~ngAX&fWtw0u4O&Y^1I(4>N1iMwX5<6UlFnLzbIosgYXgG zX-N~b+E4e<>V|!GgtJ*I0H||7;fJs`rbLWM92wCpr~AfE5`CHFsnVOQbu_fZ^{ggm zEe=4^I_iH`FLV1hn>a{M(m;1aFWHKQ7e_yRzg{E*hFm{)q!Z^cN_0&vwEHw~;&HMS zQFU~u*mv+KizQ)MHEWbJW;cVCQww#D(pvCrt|<*&;*0om^Mn)?kMS}whXXICi}o(c zuiEFb{ioEr3((KLMN3yjjy!!uT2#{ifXa`67<*vMhBw1k`X`Awk-;0lL^9F8WS%^T z)b%TG@WF49!Siw*fY7=)8soAP`FT6zap1nJ6)`}jOwR5C#9LUZ$xtIOsuA0Vo-Xui zJeSna*)dis=LMTtRb`}7i1X`TAJj9$ir!uRU9!}6^(_MsvgjZ;r2J<0$|JZoQq;ny zin8``)v|dE6YuKdw8eLfFvo~+daKH4Dj?&fGvbYxK>sQd#pk}94QMeircZK4GoOu=@Er6j!Mn z72s1cnwn_TN7=-!8%6T><3>6mrdjbBpP#vBhrlfNgpo`f0BIy#v``dO@R~Ip&mb1k zlA?JW4R5c!zTmDakV^=DzV>cg&|#{(csyYJZBvr?E-GD)h0y4+JRlZKDLSPBPU3g- zovAw^dVIZEC|wsYQ+GvwedLBz-V*y%V>`)=&jNj{&%whaaBt-CQM!+H^+EN?_(N=q zW6S4S_@FA&*G$7u}ib zxOi8Xkvb$Wi9a-F9bjP0_12dK9r+o?_TP!cR`SmZ(ol8zUdT}y()qQX~q3ataB_NTg|!nLIL7itpxvWXu3 zG0xv5dV#-PA0@HMoJuE$pZJ_x$1uPaCW+ujl&TLL453-`#^o4HFT=z1NA}_bcyQ5b z20eqMEw4=AHKjX81y5l0>#TL#NT>fkkPI7&*-ce=d@sq0D$iU!_4B=}=H<5b0JCP!Rag4bt6R8-jF9 zq@Pzd$+yr?(TWs@to(#9=h^|Dd$!H)*SF&ztB{^ z-ng)=vmt~(TG?o%xQD;)*$P|5;vE!OU=<&+PZV@N4lGv0t*vs*KU?+=9fgD61wPve zfKhGB6QvuRZH{{X%4wX(h`66{K2@Qy51r>OEJ{KAey%5wjhCNg#9R`*z>8*cYrIOY ztYIV#u)7uTmy8D_@CvwDl>uA=LnnvO|52XPbu~*R)rNt zj|vp`kA@KOH*+F)GT_x+hafw)Rmdp=7e_Sw!DzC-#VZWuL-vE)m4_gBDS6;04z$T< zUt6925p(b zh4(fAUC1bq5b9O07Hw!YEPxo32s>96u6YmV|;TRJOOBSmEtCH$GOybGQ{GyKNopS_wNonrsAPI@ z$=82BULWuGaYq_TAeH{4lgKj|jB0;~aFc+ZJcWcIM7h(16Z=HAqj7ao!dIeEBRacCrLkEeyJBGeZK zf9=KE{5zzRj^b|8um{O6FF9di$Uv|TzQBNX*gZVIPI|j3syFmVsePTk$D-DX1qbn@P16^bE!&UDV4JWF#us}Ta87wJGBo9X!N3oLO zLpLZNoK(FP@BoC2h2qOKt$=YH5+CNJc%`k{3HUcffdhWXi}nYglU(UTS-e18v8DYU z4$lU-rm8efd(2mL4`|p+4_77mOAJ#-d}2Gf(dj8#dro=IV=2XO9yoq4yhj)4I#JJd zfE6YN9bj2-iR=y!Kzmv^`D%q|W(W|(dM-uLz5QYD84-q(Z3oK=^I8Qkp9j`p)sy{^ zBC0YR4?>3(X<=SwVcak;)-JsBKn}Qn510_Axm>W%hOpkPlLQ_kaNK4ON%@FVYRWo{&)_-;H}im**@sppP2!jSK3+c3`%#pDCE^)i|XM6;JlHAPO`)vpC|} zYnC3|P=5frrxNx~gPW;#VJ{2sL$OcJe_&F>hpuo`xv3vZbo)I|MDI=_jdf z5uyr9(snuhRpHF)v{Vpu(K!{*JT$&}qQqG$l>L!~*fU~9e_AZ;kvU`%lS4WO#wm-}c#~Mx7U1=)TslT?w{h_n2V+CeTDIf7X<=&~tuyBK3|+l;9Vkn7NI@>ZJJogFUS; zb(rU$>7PLT4RnM&vmK}Cm3aoU^b)|#3IsC@%3qkA4s(r1p)a(kgiYf3r?MKF2gxYjjEfKS}zQ4Xfh)Q->i# zc4Hi<{~u=Q00!G`JbF~{IrcMAFJo^tz7Ku?)v7WMyM*CW(%?iZfgz+NNTBM);#-`q zrC4Gp&jAy^v_%oY@7T{uE<$0Q7SB9puAr1sJ7rxQo^6EK2Qc3}^aEHLLkq3v2oaFV z^LGL=GF%sPigPc6n-w2P?Ib8X!m$D%ooAaSmJyb=cjwhpaS~hbAUB_Km0W7gA&k}Y zknFVV0iv27Q6C;s4GE+1Y_q&0=((duB!q|LK`Ov9b5sB22pOycA6>`bs-b#BLlYp+ z*s)(ncr8iJg6A>WFV>%A1pf}5|JJW?#PSeyffJ4q524$&G52#gQh2$5B@A3W!-&GX zuvd0O7%+|Z*yN(%N7*bl zXY2Zlt2@&_p7?v@F8cIN zotNgTKMFfaREWYN8LplzoqjEb*})+V#!@u?{ZH#(#{0~0TWu`{$|lz{6@4^e)Js{* zXr&?fjqs;pjV(iXQ#%UV`P&)q(XSmWI|Q1J#YQ{W9*G}kOqywxZF4(HN{|Eojeo_E zPHUG0CG45V_2&et4hz_H)=gy9X;ruY%j`my5kk8qzB} z@YmZXubIxw%QY#MNAv-NZaas0NtF-E0@hSIFO4d;ux1J(w=6YE_j-2^8k8c?5s1=P z3hUkPFnDK>uH`R7espIGMRFWxqg>GXIckh`PZ0`!9j=NyT=^9H2N$*w9r)*eRl5c^ z&H2A95Vsi%llXWX*S+Lj)7)I5TlhWYp82=@+wyetNW`!xms6(3X8m6QX?BSqUQPIl z-ENM#fq+xNlM;XWtZ?Bw^U@z0MHk~tdIqlxuLaadzb69DHorPmcPr=4^CPLB&-_-{ zPIC2bij`xD$uzp`fE3KM7W7cAYfavv)xf~~R(5uxKp{VVn3ux82kSn#7uF_VrZd|D zkBMtJto|@gm0m8wfdgo}!4yH3&ja<6eS+-zpg7khJU!89@k_DD$B_-@n{P=fm6zjz zZ^lMmrJyepem~Q4cJI_FpJzWJ%|^`x&q zGGfA~1lt){1M!g@+lwJSeStIZQ-;Pu1JciIPr;W(2*VUWVYPeuM~X+9@b^&s5wZ<= z!*qQEw_xFyQ0x4m>2I_HXSr|KcnEi6EFNFKH?91ub)?JYu#csmzygPQIev8q%c-KJ zU@5}LS1|4MYcz$zPG0yBz(w}bP3E?!DEV^r0ZxtR#NinBkdmTYrR2-doFe(Db?NCf z{p8RI@8TkVolB(EKA0;nsc!J!*Hzz(D?{O|#1mv74}hklzv!Kw@Dn5^%8&}Z>KOIq zl#S&hPv*WftC!irb1!h^#m-QP1$|RHp~v?e7<{VV>?u4cHGO*OrCHNb-#XLVw_jj* zJx|GQ0+_wo*#cs<%Uk)m5VA-Yi%_VJ$af18ztU4gVHgm~f0l3?)M=Q%RnxvdSJtM` za(aeg#i@uxI7{UuEPTi-5kc>j%Z4X+iH9>+5*oanC%}on2*4f<2LVhjLLj#L#~ulf+Ugj$*#O~AJCl6~LT5f=Ur74cV}m{D+{`v;8j(xz{q=-pnMz$_ zY}rBZ!djtMS!=PAp_i(+i~B&hR~etZm+Nc$-LR+)5Fg<%(!GKCbSJr5Kpu=niZ<#- zTnb(d7os8(fVw|ra*aM=;zHv`lb3M#=N6am!Wu&e=9T+*M6oFP8j*^Iqx^eSD4Zd(Ve zepdQ4syUrG2=kvCdG3UK14nBPObC}tqDi%iY+0&2&)*TksjZ^;mZ6*2@e9!2*P06~ zKJNF%;>#riuWX_ZV7CKan4q4mP!uaHWgSBgOVN6Vlv&j3{*2AQtyg2%-#xxUY4Ooe zTq5MHIUD{Q)z!x6p_-Xo2evEn^LX-xDM>O-BK0bEpdwFeKRY(!EA^M$qK|Lm?eR*Wa z1PYM8Nm4vsEWn1_bj#q@{K4JRQ$p3Q5Y{~kM-baxHd`{Bu0a%~K_OSe%^-UYJzP|5 zKlZHlPNPM~S|R1^u)DORY|@Qn98@ZqiyOc~^T7O98>LPL0g=1ZHa|CsH4e=weH`*F7#=hDgvE6Exy zvhxfnOTSun>AQ9Yqg`@j#|G#PXzYv^FA@)f7Nl(C7)yCw##pIT=ih!e=1!{OC%>7H zh_u)r=V8(K{@EgLbXLycT~~td+nx4NLCE>;lsn?hHx>!%~ z9;dBsAd4t>Rk7bwwR%9L)I@q1i(yT_ssHaow1V_Ili9Y>EMAV9OcMn|-e_T^V~gd4 zp<$GdS(gm9VpNa-4hS%{II|i>iU>X=rN8%%>Si=tgEi>%g#oj104Z;0d zBDR96gLyN9aiu$>JY}%pC{O5ix?9W9D)5VZK*bh902J^pNEZXJ&|pLXN;emlBCDn? zp}msT{^uaDcW!q_kC*$U@HgQMB7{eaCMJptb@mYB7mjV0-}9wq6%FaAOr!x_@y@rE<{7PLsvX-*&vIHL?XL9I zvz~{3`6=6ggC#b5rq<`SG@|D-L@ z7N@LWppZ4|Lhj&M@WSU-3{-pK(GHgs5XXxKRqvjTGo(>&qV6?R19L%AT8cY8TdlOG zd#Ctvm)vK6fMc~nsFL=VMgN-Y#zjSW;Ve~>RQ;SWKjp)|IM@zoKUz?NJ3_bYHRUfC zxyU9I{O|9TQTt}S^2wKl<&wn?%sex?7(B941_>i8)FXvF6TOkrc+8PFa4w5h`$&t ze=ouie6l8sdgyh`wP!g;(*u8yR2Fm6(iQ{5h)Q*}0KGza*Yu6gOC-W5ny2_dF953f zYRFS(aKWj``u5k6zTaXEd|a|w=j!rv7jPT}7shhp1}F|Z_Je214w-13;>tkHgoD)+ z9?E0~f$nA56U7OBo}FLJIzc*#B>X)Y(^TZ&rZja=D;WYDbmxJ78SnFxxZKCWU+`4Q zIjCWuAQ0fI5gT9L``!LCQ(T5$De*a@BEH;V97i26)0NHnyz}E~Qy*)}RY-YCDydqN z%V74K|0Q4Kt{O6yuniQwG60sINHb`z9EPJq1Xe88VW4Y4Cy=K0vA~z-|Jx6+1TUEI5dtz{7 znWNaJ91&>H^{qAzAmMoYollymjZ8Ur zEUM{{TX2o#BUQZLSU3?DCA5uz}l!U7u2WBeRN52if0PwCpg~-D6YP?>+u5v?&V7|F0mm@Z+ zcWB9AyQRV5F2e(Igy_2L5L|BnSg+I-_-m_!X~NPARme`4u~qO8bYHi>M}08MHQHmj zjZ;ppwUG-O`g6%nF)_mO7vGUCt%%yL&qN{B0*6hUYQ*M6N$_U{p)6#ngw*d9(4qwt zDr_IaDQ%~-T1q~0Jl=J_h)4?!Kpc}hHn-PJi+V3@ig$x0}1tBbd+jo_mnk{lz}cKWa&Zxku=~ z=NIBMQa^`rT_L7QuE}m)VYXK@dK?d~XK?UzFFgM(r^Z|8w3_Z@bHi!bd6kaSNRmYs z5VmLEbHFr&O8~xi-jBS`IYBnBbngX4DY$(03YF}1_b?7niHD}I>-!lso?M+Cuxte2 z?1nFUkwVz{b`n158yNajHiW(=9&8K3|++EjCtms;PR0Sp?2s-HD^uaZ3lS%GN+#1 zp%8eEa@R)sh+mumiWe#UzcjZO{7;GzDA=QYOnv;6aSNe(gzmmHXu3`c#SJ^ z`XF~14RIRt#H&UVfg)>-nH_L zb7cWCJKNXt;E8|1-Nprub~_S1xhq#Bko&2A^%gj1DntQ06(D=hG#4?o=diAEWQpk;zvhQK2XUSUIUn_^wX z2Y~{kIF2*p_K+RXTs{#Azl%kiLW8HX+9(Mu#jSZ3O@y)qn7TWU_s?sImsbltg2tZ% zZ%48{=fa3DV~lVq`$M-!$IwEV87m3;y+-DBU#TJwP0M+Q2yFk&Uvz-1H`|i05_fjJ zfm9OpI7?mZOYqkBnS(^2ASfBDJEx^2eN~O)XeNJ8*8gTkbiKec4H>RZ+BzXS`ZMF1H1gT;kgE>n5aEAQFXfw} z`0edA6u5HC=$(&N&RnbtScVj*x&JvR;^HR-a>2OLef6X<*4+|XEqbPcyep!$%9a*( zRWQ8aHgAuzVl7%md-48VM^bB3dpDP2gu$rI=wE=`j^W^jKZjk_rc%|{ zn%MCZC>^QxCSz3R?CGs;&n^I@o?U2Ix?y0;4({trOFITJJVN;(L zRl#O{brTP{<7yGtI4yw^sU)?r7?uukB&W66&X9t~*#7gCz!b}(eAM{@>v)Iw{FdQ+ zB^&be1qPkB*Q*T8O29-d<^?laJ7jR`eWXf?WkU=2@%1h9lVos;QXjd^+nHtoWOhyq zWd2xdhTS3Z(WUtNybf`D_i1j0d{H>;KeO4t1;0{`wWi;kN4=!TKLe4(oCTP6Iw>CB ze!&{BES4>8JBZRXh|tbF-3>u?aZa1>)4>&M6hL^Q=}?$*^I|BdGq`Tl-V zd@Qj!GG{zZX4q{93vHJ*lEcscOTX)rLEGk>{aZqFiBC&|3hTCqy!u3#WHUp87`azj zjdvR1o=J6yAq>3-+QN7JG7Et0Fx6-Y%G>@-w;f>g!HVp-BGxly^ytpw1IFccOgbiP z=dj{ux>{>)ud1fd?O-Zd*THs#he9jN6t_E%+pT^nb-f;RZ7vzQM1@Gc8}g?XR0$ol zBiugHMcJu5bZaxt3zn}|UqNsDIyJLg@DIG^CFf}u&=xb!`fMhxF2QLNuP)K|0v_$b z_3i_ms|*Qljh`T{ENZ+Mje8LRqClCgYAcq(2`Xc;uW7)z<_9lhqRqd>I_FixiY`H6 z9Sl#W$#46`0uL|+it2PG^7Y{FS7n+d z^{3M4IR;8Fd)3{z#_AXixkGwlgg4Rj^mnxz{q~mYP$B#4IXMhm2N{--iTM z-5cJ^eboqhK|(rhO?IhaTy#lTK?ZKrE~{b9Y_@?%DiqkT96@$}xSvqDjhK2(J}&7b z-cr}w#jDP;*%({==z5BTbYH4L84(vwC|X02C)yLU-d@)`2b84B#qK4qpW7P^TXAKA z!M@^}PHO#MOI^#Ty`viO{E~lCU8I##BZ&44HTG;vQ%av5EE@lS`y4GaN7h*GglAGX zq*ncl?2%lil;XlAQtS;@465$FPbLNMbc%Ci|b`ndVo>kiA0bh&4s^H2+fs*i=zsjnPI7x?$x`prA=*0p0d zbFkoq+t2zoD0r|tf79M#8*){tsn?>1i6P;f2qQF?m;5~lJs?=OmT8*vVN8M+1(JIt zVoKK^mrNJEw$(|%-0sZ{Oz>ce18CDb4>WX*&BV(`%*8NX@u?q1#d%6H0>UwQWvEux z=D%*2kWs7wsjQZrBrj``RO$OUh4PVfT(El=)0(?xpLGruPohe0{kAB#&WeDo zp>r*xNkBG87Q#JEd$uyJTkmeDSh?*kvB#?+7o}RUE(51r_*YQxyh+)IXuFWMStz-F zS9ZVmqSUfkVJ;J_fYI5h%mEIS9U{4Yfl?YN!7iRt#gAtRFu<4tSM?z_orj9-X5AYsa>6u9MXrCx7azJS^=r`oZh zYzP7!#x4G34`or>uox_@w%vnRUmZMmtg9D~q~{l2V;?%WXmpl{cro~8#+^}O4;HrG zp^l%hqjBgu`_G1%#p_pvzaFJDTU!f{Wy!1*ieLYxSP@4v#2gidd#7euydO`jXe8NWBV40evX#z468f$3)z zG))s|+hiV68me(+-Z{(oG+lCPQs1S6{M^%KlUC2avq`336*xeS(LBE)d(2|J@yN%t z-hFQ?8g1@bwrR98vI*FLu}%ab?Yp;IoR%i-$p`xEVA@P;FGxcyT0~wr+xjhwvbZ0g z8c&kM=VDgvmyg7^N>_fI_sAs^eH`H4W!>AwD2uTUXY1M!HRJ(m6TTMH@EYjAj0PWznJG_+op|;ti$fSvzTIb!d zmh!06oT8QBHnRRAuan{mbslEu87T>w5){(7cj@1XjXmym)u;iEcDlbF_oKZTHN ziHWC<#AExnS=S+i?~BsGz( zs$S`+-Cw;*$7AIMp#^}e?Xe)=;?M4GxqVkJq-Zl=a{4acoYf?>@%`CLm06QR>wHc* zcQrQKgsFl7*Z11o{c<+$&S484FGSqqD0cU@K9H(!Ww5A^hvB&hCUZ6!sp{;qLlDo! zOMM64GG^WU@dVVee)#)e1>KH!5AF|8cok(6L+Ylh_}IAH)wB0LGkGoLiSNQJOTQDh z%_}!^wbh#8>HRlk2|J|s)ct#D6~vZlx+H2&cCT=g=x`2Ssrg`*cA?XM6?!Gz5E57O z&Lh58@7&w0Yc6|;-6NAIEw0iW z|6IJMTP){Z5F?IW5oM4FZit_p9*&`YFL&cxSNzX%+h*h(-ZH)$im#{w1^;uLjlxTQ zA4qKYhPZ62Qli+uuVHoe(__SEWYS%RdDCS`A{ni=Tb;T@%HQa(t`t-vj>JRu(|fUW z2j;@Tt{cBSf?PKgsZew3?54NU5ew9)F#?d_z*kvM?S}{&)Ga@UsnkSYrlphTV-yks z=Ifss8=_xlQE2ky?RD5kyWux$Dm0xZ_k<$~I80lxT|@MP3d%s>&YvhE;N71nhtn|E zUWZ%A5WNAq&xVWvwTjz>eeZ%QZ2)d?hk_2%w9XZTT8<;KjA!qxAa zaWG($19J=8{?U7O+moCr*MwQ)xI1?<%zlb10zO3nN7y3~eQb*N)Bpvq>ohqnb2k9+ z!g(C`VJIJ#vy@71%uN~a7>y3`;rrdQxiEyoi2e?_OyuUjp#r|aDT!hRxC z{??CI%>R_Rs@Nt!c_F2|7K$dvh%ac}w%;VNx7mX-RsTe$zWZ?w@qquhxoxc6t9v!p zk?+di@vAiJZfk6ci!-OE;@MK;;oF~};`p>Iv6T@~-b4C@CYRBgF!?XaKd zM*LYkTGs#lyYUYR$);EbAW!nk%Py)$CVmD9b>3~JGzS)`CMT|cBFOB<++rk8esT1# zy|SXbmV^w8Y!-ozmqKhOZWSgD<J@1lN;_)GEtWYlu3R1zq`VhNl^S)-)$2A;bksSe+_^&W z*IdcN6NtfSNfnLJHFw3vIc|;Lu9!*=)>A$=5w|Wj(+l(KcktBHv^zaF?8};HH2wYY zP0}88Jf82;Z_@`P9C}?367Kkd0o*mSTi()j9wp}RFv$Fk7o64u&(!kK6JY=FJBq*8 zGO`&^CbQ~caZ$K*w{o+{@l&8A;C%`CO+MkmJk$%RWgVM=X{3fP@iSzk1dN+@WK<~@ z6uvMndzQmv_!4U@7SiQrQSDSE#OSH^*8BI(2Mfm>_v`j7f}pa!lf{L4J+;Sr3-E-n ziAwWWdF>37#}ySVnX#~%VKvgcpDzpt6E(C_L`GE4CK2*~VAvj7GRoDvfj)VTKx?aL z%j#og#sk1PSS7(m{s4&+YVb)fNp?srT-UtQ&DlUo)I0D1WV#fB*q5^UPqBZa_ zIr7;_OMyRXb>2IFN-=Qzra93Hw=tinyk9Ne*piA?9d(iFK1RXtrd}Lab;&`j)e?Sh!@()O%u8yw+WRTu@f>H zqB3iaHoeg5Q)7N-)vPSAL>EwrS@YV2FaYD4>l-@1NFlSD&?T^S^PoJp<{y^o<%^f3 zzJFfG0;yT4PKJ3NY3O7}{NkN_E~wOSM2)V^3e1QP>2l4D8y*pp=88@9(R7|a&;^SiA9(^1L5kQJ_{UyDjIRm%1$inP1zrD&Tzg`E+qfR|dXC-Nm zN-gXY@rxC2&QY%+Wf#u+y|aVYzTUqN7792nrL7Lx>Kw2{t|7;Nb_Q>+?}_Gco7Xic zhiy5jOZR3OA|bX^$aP4(C>nAJhHDulO$1wf$$iaT(jW!MLw_q70VWtN8@Hho^EF?F znMfv^Z&kMc^Mc7JigP!Fo_csI=N0d4L#5+TTGeQY-HW5E6;gDS>A-l(k#rVnD2h+4 zdVTZ*JG3$mbg*!6*2oI4s0kg-<1kW4?AAlNUad}e9~w#meqWoqqGlll8O!2%!FG%s zXT$VcP)FBSZl9EWNK}2KF$af;yyaWL!HI*zg*gaE4o*!^C-e{+A4kp9T9jki{cf1kex@IsE-$u_e@ zVJ8C89h?72g`_()RDiyA&cMO@Tj5ZYD9{QJ-LQE2@acot9xfH zLk>Pq=AYhYQcP>wZU@W51lKszDT^wi`;dwQ`2lyK2i(>_b*+g0Fb%Zu z-5YZv0{yvM>$sdqxtvJaDaaX7l*|OW^I}&`FvhyC)H+*o^}o__>>UJ)?k^18s2sS- z+tkwc>AM%kfsU?qsrk?UdVNzK)ohhvO3bvLc`Zkhz+x@8)&{?2;US@=;SBnuKA$D+ zQ4#xd;4##y=+V^Pp~kx-tMB6WK7Ml#&6Wys12&?$8P?y_#(kFT#ebXnlq>M!=N*zg zf|43V*IP!cFwyds*8MYg6jz}2)o_$B6-urbNzxTOmr6!NtmunOC0n2oBU%55vt__k zxAj^=9l035y^WSoXatO#SmDF@8a^B!yVH;B$iQ3%*M;F(ihq=R?2*N?Ue{axv4llU zPxbT{Yy62Z<@%%f$nLkDME`OQa#=4;Y(N{JDEPshaSDF5s|J@F!hy5vk0S-awX9nT z`ALnAtIySN0!X?H@u~YqeUqLh(&dAk;+*G~{fL%#GZ?e9qbt;>ZPKw&ui`g1J)Uh( zvyMI~kbpVl=l-eDWjMAejvR>C`GMh7ES2OuxS>!TVPT@5vQF`h2 zi4g7(;W**!oZXHMznI$4P^#)2Hhk z4T=?hufN=I7f_!nsYr5le4Wof0DIE+8tR&n1Bsp(@!m3NmHCk46XX$gr{7?f zt_>eRhSTCRL&e7PclVe{Egf84 z2WKn6UWNakxrCb)^dc}8W*m{ApxLc>KikI_ycb+9|3QI&RTz*Z$os>UAkU`I{LLr$ zb&UU6!6Fd->^HI|Yyos8y$w3cf^iIHe9^}L*57v#ORj6qFm9QOpE|%?$yQJ9w8(h1 z+@(sE9B}c^rQleg_doq72ZU0gk*7LiBsWA8G;;RbTuL@H2!U5ZZwA?O= z`}y!N$A%f5ZfajC`$^Yq{#vhTG0B9aPWzE$;)wqMHUrNZvl%0+GBuu0eBe@k@@60{ zsA<(qPD;PGW|)xqvbN%bJy$-Y)PzbP*IHhM>$$j0ww~-JDAMfLBxUKptVF_Led=;Q z9ktniE_2Pb)x|-j${(vWUzACxUvY{DLD&lM7IW)etKLQZE_4hsyUJyrRW;))(&Ul1 z85vl6nLZ5Z(0e{deUQC!{&KF%o>^cpKh{HI18zUUpKJ~_{9IH>5?@+{GNb!1J?j_C z*Kzm*3hzGk$T#y(dCQE(%XzCDPHyYH4J$qs9*dt5U5-3_uhIUr*t&*m0(!O!pbgbt z7?dH66Ll6U9PTT!j~KNf@&JDu&?Rw@wiV59v{!oWk!rgf*LLUT_hZX^$}r{aGiQO< zv+3nDKx=(p-SoZwigzOCS)eKU`BF6p+o(cLHKflk!e>ykl_R~jMSQXbka)HC1iW*1 z$G6k43SO6J0+)M-uxULrpMi%MTTWOQ8Iq=r1;Fog7>0vuJc7lAjs(n}2km zoiifx>%~gZYCuE6raEy&4J#izufeyIfe{U|`aE~UP3+QWX+YBYCSz(li&A92QibFv z<)x?g#h;!UX-A`vWPbs5UsBiDTeHzgEVef>24 z`;o(ln$)5y^eQ<{URvChgg`R$wd1>yC_+)gt6bU-t^cV!#X4#7R0+NEAy5l{Woe}C zw?-fyO+kA#__&r!N1lh?EHYy}4 zGnVlJ-dDDlW=vACW6s?1{xVpL*YeM=(S!Za)p1(O1dv=NZr$+dXqT+VI{lRw4^Q>J z(d{*j1dtW=CYbXCWf(mZk1Hgg4*r%Ik?IN;#JBi0UC62Zn?bX-unuz{{WR;?^&CJ^ zm3u-slgm;Z*SXP0F#_m{Y05Cj@mr5&b64FoK2jKfX)9pP!W0tyr4x{d(AOdq4&A|- zYkoQ#npoe70L^uU-rbqR?rJ)0ZuYG+^z+4xEaFbp`fNqW@6oXga1PgJ^9R1AD~nx9 z8v@HJ?$AQt558Tiu#m>K!NH|z;zpN`SLXoAD2OTSQ!aFVDS+n?_}}THnB=StJ|HkO z;I4oS$*GKK-xgAUUgi7dLV+hI39ft)#YW6Z#t`_Z8v^GTM<)x&V;PDp60Q{sd^O4Z z%&Ul2;o#V_Y$P*wdj&Y^Gzc|`?+!%H6|~!+WUzd$xY;?VbYg|Gd(Jy)AOhvt%Dm+m#NGfJv#k>^lJ#U!_Hfg?a zs#_DQyaFD#S8v2zAK{gK({5);5Q8V@OU+$+MBQFrb!G#@G|b@qPs|hlIiHC{k-i5` zG>+%FA_erj$J7S`GQnnAhG;2?qfw?6DP6tfi~)J3wSk!mD1EFY7+A7n8jPA-3gB%> z@Yn7luUKnI+&4N-Do&_j-nlxul0BM+3SQ?l1TiJ3t0z$#-r+e_EXwMnYW=Ygl7FO? z2jscp&?*6@+qd0eF~P0JN^|gul)291*y`7YA;K|T9v7<<2a|}68ArvP-)2XqjhLFC z&1GmI;I-+Xb(lkcoN&N4{ekdY*UBO1JCrUsmP?eJWeGV+IkaaEY`?>NgQ z;2dps>IeRM`4Wg2J8}kmr1%NgcM0H575bknoOS|zwkCIX?NM<>ITCm@oE^q@P;iK1 zy<)|wNCJo z_7@RBLvG7Re(MKNOVbP~K0yK?XzKc=)~c4advL5cUlXf&?vnRN^DR1~G~LU-v2%MF zYhC5FlHq5zA%oRgcKtI7ninDTAD=dQAIy+XXlN~Y-shg5Mhj=U_A2eYSy5cvla z1q7@5Ge=<(Vm5vj06ViNkx)*L&;cQjb;GWcgD6UBF%k*tj&Cq6OXO9b7PT#YJBiTq z+skH!PFw*A1Z~F`7@Y33Mm^tx(FAuwlb@FG>f7^kmI8}K$=j>GPJBw&pNNz)2KLnt z&?dP~&m)$63#s6x88T4@TKBOTvfw%K?!Sj?lhX4kl`T*)2h?pl**%*hAoP zbRN;o*`*;ETDwu2)Gpz=DF0_AbWu#I!Ky!BsS-WsDgr=8lh@bRN7l0tZP^C*52TQ* z-W;1u429-IOVm!Qan}xANWo-aV1P%4e!wqZLElxaI z4&%jgJec%T_ziu+$&bsLn*7*8G4oaDW7nwPfPQD>6VS(j2OVE06P$;tW*E8~- zVOPmrGT}WFKX}@T*g#>jl%`cP?|sPY(iEuBFOv;DgLgmHss7!s)Lo|@J6p@=>>pFz zcw1gAUvm?fXt>Rg%Ut_y9^P(Q(P*Ue`7zBoUF$FCY97C?6rULBkmF43TYFE#3ev&; zH!C%`3~(`7+F^q${1`4{n>l&v{6{xjd}e6}PbC0E8EpKg`oCqC6Wgh`UdcV0mTgsf zCR+wiDaAi0N)OhvDh5cvV$*?Tn382n2+`;yX4P};DM_gl-M^|m?Rs;uK4C1g|G$q{ z15Z*(Ko{O@20e^?V+n#{!UmQv)OM-0Z>2sq1B-kx=G?bfg4FG!UlbG2KYH0q3(eV> z*Y*g~ilm#b6@9##wUSXJ?V+x0lttreF68AZuN0YTV4IdKni_GC)qE?1b+v9H?wx=v zUE^LqR*l%}kElqm+^_cgG`QqERGieos)~T|OL0oZ%#&D|)Qi>6N4KP4`22=jj-ls8 z0MW3BKSEZ4g?sFY8R*rR1O*s&S)UyGqtwgWoT|)Jq8gUHD#7w{33dLLw5Cs^$b)&u z!I5BL<7TDZ2krxfRTND41!5?QX&7WuCJ_d;eUhV%iPxkD6pSAv2^UyNzu(GOl_V3* zu-$tJII<-y4_Ky4e*|`Ri;}p59D!>WLz~Z!G!T8hFGQ!J%e6cG$7(x!_JZ{NV?4;+ zkFV8TG|c^@s|}>q5|}aXfBe*uu? zS6Y%U7|HyJ5JciVv8$@@L08jaCR1wxZm-TjO?|CD`z5GurscLO$IMOy zMmBpjrBbg5Wshwt!Ix><+aon7Tj2x0>`oiKESBUKZ)c5{=9X5h;VqahF8jq1aBr4v zP4^xTnkOt@n00hHM%&Ilas>|%9o;f7+Y+y1i4p(XUA|7|3Z!o^@JG-)#B;uwwTxVw zPj;tq@G6@gwecEV8s`5Z2wvmTcZUMDaf{pCxfm`8<-dR95Fzr2;l9H*R!3*yvEWnc*KOMk&;8#qbT>4mD zb5o~Cb)ofZs~#xS>2dZ+e3pamLE5Lfo#D#@t+{m{xlg-EL?lggZ$h83eEBcc+xnf5 z+L)8|zV6~j=PwdKTNicfi~PJeM#u|GL1GFOcusikd13X7#?G z@=GR!{n$`G@s(gIQd^&p?R1TqgksN?-@I(#&vN^nK>P)s9wMt+lYKcK}o+Est2<(a1r;!SmE zbs2k^Me+9pX%*(}!DJP_;U{BHchNj4JnBpN`tM$J^NJDp(=ysLIZyHJkZVS5syRky z`e;W8A=&K9>YM~Jgk|AP!Yvo1TTfqywQg|lm4v?)&WUS{m7IyrO!D-4hl-<3X{u|~ zsvz|0=zDpo;o9kJATWLIV^8=gv<1_?x!N>DSJJ5v4T?N3^mZVh z*f5z*x90PF&>!tIiz21sLx@R*oq5FMrG6>}oHw(R-Xa~%E37}Ql045fX{pk>Id-6K zz8cT1*=%fFjW0t%?)g;VwZrS!w40cj&UY-|COwL^v-QJv4H} zNdvJy;as;RT%FFu#Cq+Zr88kBa^5b+QHAjv^f_Ou`ix=wDtV?f#f#jM@U~u*r~%vD zgkH{gvR%C(ImWi#QoA}g2h1!srHX_zqfJWNn#nUJwf!Koo!InQ4YCu)y_9OjETJh0 z6T95cvgWtKI(R&8ht|}2KLf_gujv7wJ)@N*lu;G;dtgsVfZ^6MGTrU z_~qJ}EfghoJW|?caR~NjHT0gS0tqFcpMqu1Y#SR7Q80UrNji* z0+~H?(>RL2Ee++xRS>3(MrlZksu(L5!=f?m3BxQ%=4tpB{67z@g1Xa!-OGu)W=EvL z(&%1las}RBbMC~Q^`Z^2vIfwER6(eQWjJN;8WWWY^p`()Hhks zp3A%pT7-=qrrJ+L|IBM4J+PnJfjA04UX9%ZC(}VEx;eueev zsI65arj}rr5mW^oz|x~(WZRuMpHALvb|OOK zQgO2@l-*E}4ahGx2Y~~3w%|vN0Fy`s^Wm{tdZ%p>{cIUuPiB8N#S=k{cv#vc>~2Fs z6w`y&0^<7TcuQvu?b`!f=FD=Q+s}nT{FSAo;swM`moZycaq!Yv5ET5hOO309X!;d z$HQ9U$g32u(sngc+B`j8T?|WqeVBC601VYQ%{4ppknA z)WvME^-#>R3|+wO=ruNPOee`9nw=woX{Ao2+h9tq9d$z4W3z}tW;5-- z^Me7F2Iplkr?q(jib>s(LKITrjOKzlk+40xxM0&Rt!ph=sHudF5LxM)2vnM3Qx7DS zB}#>ZF(aW!x1WbAkEBD`;*iIb8)xw-Us2hwQ>jvAm}6#fF-%+}-{L81LKdr~noN^L2gb+{dqZo) z)3illXGAtY>a*%6A3_i4ENcWt=$B`df)hE@!?K1odaWQ=LlHgxR?wO51=D<{-Lb`E ztrj9dt$8C{3)(Tejw=oexvPY;v1_F!vBJ8qm=xo32tbr^G6|RoDz+c8nNi1Mx=WH3 zCucePwn7q0DC6u*+zKrnUmL75ic}K2sU2rjZu5E24I0OSX~P&E4Bko|w~H8txRdJz z=I08cQIqfBD1*M>vSLlHBd#_%&YVogh$jqZqf+9$!1g$$E}>XFUy9pKBV_jbN4yL& z>wc8U^ zcy*K+$Js}%Fv(@q<}9Yr!!zNC1Qf*5%wQtF8N}mLwiS19TuiTBabi?s#Ba4(Mf(?@ zsN4=RBW%aET2(y_I65+C8yTylm~%-x@~2GOR{Ce1G$yBpnTgU>tY`E^_n6r#V}SUU zZl(^i*~zp$GAVXSgZ{pFmJfXfm@#d}p_!ygFErIlsEsQ0M#e$)j3$d?Bcrk(*ezW? ziAqXiI`0yD8Ulg=YE&A=+?Jw|S1B=26pmabDW{b{g;o(Dys%uSfvX_yR=CRrEN8%U_IZV(btgXX+<4Ar8n1L|GCv)l;)wD5|0aSUZann-k zuDmH-I|4+54+ncLk5R><#JHtRLY=OxLJ`ZsyL5$-Q1-V{U3OnDtyU&})n(9}7_*yl z)_hxmqh(~!-x;K|l8)ulx0NPhA7uxRM)7T0bl&UEE`)aKXC-BPaLZ%3PtR;jl_Eu< ziNyvqGLFYamZ+P5L;o@%mvHdQ!P{YG)nhb!R5^wC5xoNU@xD zg^feeZ4Kr{_&6XPXeC@mE?#OsP>yZJAU-Ul;V`07c4p4~Yui>Yu}EvqvIc_Q%V2Gu zn2E2ig|V`zO5Smn}-)mp`ENinZQ*evQz<3@G(Slu~nneLj2x~45D<_eoryYddU zM>_c}pGK54dTnE$JuTnuqz zra;OY1{xcDIV5FmsFl@{8|Bzal`n5F%9lojf5g!0y*%RB4EFk6(zdMT#q~e1;wbT< zxV#e5ro?#eZiZo-ms-1j;+?0ex>0_OnNHk_r{x+SZEEFqLNV;%G?CUOf2!A_eNjt@ z1`VQVOBro=mf}&s;bCQwZ`wb0J*;jSD;ZLn&A6MHBjAxCe>V-S_9R6gzU;CsLQhlT z4OkW^3M@(=lulXILOJ~}b(reL+B&Q>eopSNnPouMt}^E_U@vuXmvOgP^?sVNA^;;A zJsCCo8>F^()5=kgv|2eT5d||u41W^Ng-Ih4a$z}~8dg(iZGNXH?psL=TWK%mG+L}0 z%{7tho0;YRgez3>mf6XcbOuo>Xb*S-qq`e+m<14-C-EIDZb7Mr?D7W88e)|Clct`W zUSb>5*6gHPbA^qwO@n^1yxgc4zjv9V;+0jE3b$8#i#^}fT#}Zyv4*S6kIMO`B@yPmm5Ux4l`Bh#P*#z=3)Tg@R7Za zl0i<#T;xi7-EPc_b5fkq7k8J68;L8du{I;AIj9?YD`C2EWnM|D(40k7+RWk9Om!0p zXDyMHWRxP=!#6#3Lz-2v_W9OOC-$Z~dSz9EL#tLP(>cX`!3w)08LSf_kkJR=-Dra* z%RDG|)RNBpCbS$n*uzJAQ!)^X3CH=ae3Pj23LA@)r_>(imRD{mqE2XN*B2D;$*N+) z=8K6HhuPx^Ie)bcZ8SCT151&0tnwT%his0e$7)iqtlns>EADx#tV+0S;vbXz013|C zYg*nYsI#^Mg<*k^Ik_T|5vOUG>K(fvS70vj-{vgR+|)A*{Q$1ImF*nx1WnV;#MBC5 z8BqQ}3W`j(6%AXfCvqCXSJ$V5q}k#dm@Gpx7tiO7#+c{~@D=!p$~|Q{fviY>vDI>| z@4~=IFmJDfl}<2^2d#+buDw85BxtPw$Zf?mWOH%Cr0K2vm3M00T&H?*(l|3gx`+xR z^^33|MrvnN34Ny?{mk9kmDL}k zR*NFvnpRFCj1IJnT^)Z`vAG#`L&;Kw!R3Q)n?FQbPs_;frSY`l zx%g^__o@51dGC}M8XnJ^oh&$LMz@J3)5KiQ7uIDJu04IP$*inL%_Z!F1xrtB;|gTv zcNOhYRx^{WQ`nv)W>RDsqQX5hpNibgS`F~m78+3SwT4Ko8xUDYo6QCn{xR#-9-=w3 zj|==}FEQudnzBjEZ_t7ox6MTyAyFlxda^tkiw-MnN=*Jc_6M=V2_Is0j67t(7pBh0 zJ&2j6jS7=*)+?J2gT$yUL68&=idCf2HT-8{>~Wc115t}P0ygK5QheIEuo5O~?O7qa zvf-BZwwoGk8LKQUwtGP6wU|y#t}mDm7^~E7N})>54i$!hGc+~_RPkEmRUK9@G*?gT zVJ?xUH160tWahes=EZVORNFJku69|-1r{=5_)bb;n#BskT#dtmkU*~<8O31f{Z4F! zZ7Xa(HS+lcOh;KVjYG*^$-+TYniE!Tble_v*DIfyT~^RyTQPxQ*Hb;&HQFz6qYwVG-lXm_w@j|E{%bnv;iMJY3Z*l{ z+m2qNv?)jJv>T#Py|!vr&J5*swwa}43%wwiEY5ji>4j0e3%GDeZm~#^CSx;krh19d z8ZZ+`d~zNzqtR z;%!!Bb%pC^>XDMrL^de4UNb~+Q)kQpJ1Mzgq`>r%%@9V2-+`?gT-6qzoq(aWzLw52m@ ziZ~gXm2pZIbUSja;=Eop!F5ihtUx$Bd(jTGBF4n%^@|du=1^ zDFUn1skr=@v0ZoRGaB|H4rXBX;3bhRIevWHaS-$yB7$+a;E{??xnWs zw?xB!HiUbR%{^wSZ+`QQ2tuP3q$wEms|wmx54)HDsuaUFwGm1H zfhldTBS{M{${5Pe-WNC1ow->aYH|u|4yi(WgFJ6KTa}eX3Cx(pt>6~XaJ2ucTX>uY9^`@Ku%X> z)?{WifFWrugAo=VXiE`Xiz}I7GkjIhv|}aHjukI9BluuBLJzyP6ydP_z_4YSq8W}E zujJXF=z#z0IVYW)u_tKbMjpNbIyPLemcMCb19C^-7K6X--oG4yUhJ` zqAvO~%?N_1Ko12^qeG?$J`-d60Oc3DF7hUxiyYV%Rl{$NE8B?NOAQo$dbB*FljpU< zPgH6h!z2$ehB+E#kih?601W5a|_S`lHb(H=LaGWUwe=qblE3nn0MU~CuRZgCJ9 zdE;(JtRyaZu_3WkR)Vr5Ea9?ICQYW zNoz=9HJ2)lq2(45&@bB4U`*c?G>sZ2hx=W&((9lSd2dHmy3M*Bp%L5~iZ7XKn>Pjx zNeZz8d=zsLIMqqYp1_V|1*HqYPDcMQ6rm2?J)m;&h<8kBz$p^eL~xc&o3ucrLO!22 z*Y90EXRBpv#0$bv;?&L2cyw+!T7_<0Zgr~HL?MzuVbqa~7Tj>qCD2wUtdF)qyAzoi z%bY<1DkE;~81*7G#ssNGnyAhG`{$7-fxlZBEAN6)j+=segcJXkC zIKqrL7CQ5-3o);AeGoL|S)BH0G^lUGo`maC7P<}wHtz^SW+Q6DPL}4mThTcq#EH8L z@3XZ8sq*oddarUjVx&GQY_!=dNTecI{g~vc=W@-pE z3O#}Qs1K9drietGTZXq{bYhC+P9lyg$Rgz@t)p9MIGvX8lSA>V5)Ud3qhJRw^_VfT zB}Kb1MyQ3A2T_{Q*j%g?*T7Q&!)4s5*yc3`^M^sBsD2Hro6e`YVyw6*3dZSF0Iah@ zH)4|R9j__nKM1zn*3AxC6@#FmnY+m9Cl#@{8t}>dlJ>f~2j`5Ut0H;Ws#6uyg99E) zA`?b1!@)}>&ZlNdMKu-{0>+2OGKoy+k1i98ZY`H;s99!NEld_;LL86MeQ5=hL-meflcaIk#NUb$qWa-@SjZVZBaWq_!6%lWJVfQ7R&wUk6ggz3tqiTOPdjI% zvz8XPFbGXcLtr)4o+dLGa|U75GYN(zr;~2CYABW32rNiMe9Pq7(L=Rel;uVdrFCCE z+0M(X0seIUJW`e=GL3YL8i|4aX6S=PkYurnJH{TR2qD$JLG#y%KbgNVI!>R3de7JR zY+nvG4e~N6*s^Da$F`7ej_&}w>6v(rJZurcA!<%7;=> z$ZFxZIDeztxr~RW33Y}2%V;r6f()$M-8dOroHHC8tJ71HZpg&Q>R8+SLzHyR%-lW! zkLHfm)zCOMAT-%C&)-mYFT)~~1&uu#O4d!5GH`LL(EAc2B3&N|~EwiT(O` zK+oS`M3*rFyT=O$y`ON?8wvBx!fu3Q!XeD9zYgS!FER2%@q4{Ef|y zyW?RM{iGC&Y$?J?0XDWY$wuTxbs$%mm&hi#WFnnMmTO#G<`b1u;*yz$^3L={rlDpy zI=B&q&5mgAoO?v1;7G8_It}nR$mIl$qS#@T9X@9~76K>4>TG)IDTi7!RFRE+*Ia>l^#G!#@y~^0|PEhr^c~Mc$ zGcl_smeNH~oS`5Rm@J|dje!_lYUMOFyxB-`QdtY#qbp^HNq^kY%GJ!ALq%9~EDF!r zo6^zUYDQ&vf%X{*8xCFNjf(j_<3yZku`qY^W1kg!4z7CF6-*{ZY(l^qp0kmCwLzNE zIAJ5$`D(nXR5(q!qNX2I~pQNnTO8P(%(us50C*z9uI>XO*wTij>JFrE}~uTmXU zf^vjAcQ}=#o$fM9pN06wEi2?)7c({#aHR5`Fy;iMxX}*bXUSn ziV{s)Qk`*8E8hW$luQe$L1;>%ecN&a;E53rMiMB)Q-Hj6z9#oIc8wSixFc#hMfo6p zws#qv^xPtKXQ)RGW3bbl{M~aNWNpF z%MtIqP`y>5Ns4iGOt^sCDrpWT+a#vRtT#2Lg=RV(0DicE+@DLSIb3iIWPErtF2iF~ za(_t~<(9l41xTNj>zp6X*+zxokd;<31EqZ5Xh%00;TY?dM|cc*c}C(VNJ10t&kn%Y zhR@0I&K>9jYH^y%@JeSy(X*WH!(ImGWFHo;##EiN?op~!bBxzOQI?$|%k00bjoeWb zjav?k8gWKIzh^8xyV%j3gp8h<580KFv;!`!mbVskaguy$=vk!zJ$O@VdG$1Sr*s^W<8EYc*> zdnm@0g}L!M`Vo%7?nq8sn^1laagJ-wD{KFwPVa>5&D))o}XJ&JKo7p0fqv zs!YU!f#+nE=3c#$1>x3=>quq=luamqL5&inl!)fA;_-Gfj1VP1Jq&x|nwvTiy1Z#Q zO*uBfLm5qyy@un04CWZuDhsOw%|NcKvkbt?gi5#o^qrhH5q5cqb|>`L-8E(gM@b_$ zTlS)B{q1I$gMuBKW42~&ur#3&ggxFeaAY!Lf_1Y5<8y4#;JJh8nxAh38#GSmZQa-m z&k6fyq?vnwj42LqYc-BU1i4hD=PPsTP9Eq|t}^`@3KE!R!$KQUrUH|o-2zT&439MR zm3+MU<)q!`ZaS)ZXH&?zi_vwJ#Ur}(8@lsFT_-J+Bz#Ux&7-Ol zlm^@~^t@+L5;9CKVPOo#4UF&5y#pI`8IB{xtR?!C?(l<0$&ak*ERjgsV#&>}XgM|A zuI-?k(SYhbZ&b50Nu7X6v|yk~dC+4$Q!+NFHWu_)aY!@Tl+jPv0ZVXcW;jbF#`-Ie zd-r(MJ;mAyZ9tQK$Ov+k;p{2I2=An*x42|KQ9pWgrEqW?6j!pQuh0jy`=|Ed7Fz*b zmUmgX77a3#K2Z-xadR?6+ff2%l`(^ikS;6MhdnRKw1u9_#zOm#%jhD#AH-Ks{A zYS8G?EIyGY@P2cYU`jcyjr~a++f0r&;tiO0Q2W6sjY*Oz7c6AVD~2VejHNfVEO84N zceDzmb)+OSC`LK!h9t$fzqi2x~7CLtu#SHRR z`7q>2SJq>|gd}3r5jQsE6no{cYFy(?n|y+}85bPAHR=Bl>|m(6FStV#)H7pS6G6oj zlUB9K6OZd+ZxHkZYLY66M@1!*VotF%Oxp}AVSLN5ubTDQRb7oKWRt3egk!+X$8)!& zr{&crR+w`BjwnQJonYP^9iCWaDojX}#l&Z%*`b9kuF93{ICb)hyNV#+XW%gl&sR&)j9SCZSJfCpJi{H z?nq3pjR>a9vf0r1U5ZZD4KSmWXlSd7x;Epf@{-+X#~3AC@g$IVgF{C$MPv{+jNW=~ zIDWD^CFd^J;rv1)SWAQU5cp&26s)0j?0f!7a2r_rZhGD_ORelUVd$KFnQRAL$*>w+ zQtcci3?5RtDE5bPrAb2om+b=1KmzF)%p-k7m3QHxYSn-^hr&P@>r#DL_5VRrQvE4| z5=-uaPUdlc*ek*$;)H4(0zH;hvNAP|;xnQJfqHI>2|F~V>pL7j2H|`UDe=sR1xL?A z99TM)tdF`vZfd-82eqk~y+##MwCNh)RdXyk`!$q;!=>+v#3RA@f?0;BZG00RLpo|e zr+ZoxhpCVh}zc|KFI&0lRG291?C@2outny9o(gF6DR zxxu(0=TkF!reJU*6pp6WNuJ6HkBLFX{DzdfqtC|H!V6Hr*RCp~a_m4WZlj24HXDiI z%ZgG~1e*rL_%PK5m-l)l{G(E~4GNkvP?h66i-J`sI?T9^;sl+Wu^xt3DK@JUWgK;^ zX>y2NRaKGdh1gZToP808MG$WozVMt;==?PVG6qtF5q{_dEuLd@1d<*y5J6jE^KYlH z32^soj*oy11lYg6F#SZq=gnA6b|c-IF#ZulG{y!G3RM-NQs}0l%-(QBFJZ4T=Z=mtE=#*SGKQrSk+v2qkL>Z|V;y5Ud#U>5 zXeDIqIeGKW7pWdcbFdl@4#^Fx3%{U_iH@+HA!YwM#jb)?2zZlXI$_nXC<0qK5VP!@ zYbVt8&v)EAl;P#cquRBEs?*OWBe_azM1^fL+(@arVnJ~OR@2Nu#c)xoTo>qidY_!VVF5GS}z)Z!D`^Gf?T$oWq!_vfBt&I;O_7~@<@<(&RIvc?zT2t z!Ad(=TMr&JH#eJWTaSa=>ze`m5NvF&-`Q;5n+dko>3i#~t=8IBu+iGQx3aa>S`KbK z4w@Sqt1C;*TdS>LwfU$4_bjzGwt`1@TWi5O*8XUv-3r=UO}u|)EqJuKvbC~yhw58e z-*~*aa_8<=aCd!mxwY92nrq8f;Nes-*l2EUt+d+MjE5`BEw@Q>ZZ+G`bUCOVt!&+0 zf3RhHv3?t>dmOyEvbH=Ev{tCf)>|8!t#%ul0#8}F2TgCmk1K0Ss}Gi;RWrdYs9|k= zD_C8DF2ZeF>ofFRxmRn)W#(F& znf%t;&{te7a6u{wny_rJ23+p4G#30%!AeSHm&L9=2kPH z7Q^3LExdcPwFU!4`&V;m>A@!KWq1dcfY!7h!0xuP#Xo)J3yNeQ5*YnL z^w`^xh?USp3|k@yx`<$=1sz2gv4T)D1-1h<1JOQv7Ys4+6x)AT_ailh`(m@f?0TJE z$^g~~cXtr?DViRwuiJUr!#oQ6Vf>6cgB5k+XK~MIdxdqcq)*oP{t}|0g?lOwghi7d zjg~PU+6WW}l1ZZI_fbj5^SLYAY4;HR>=pgq=RJB|czXy>*iF0Ph2Rn}uOM-dk#8ng zn45p~GBA8e!G2$YQH!ah`-hZ~Wthbn@rc1R1jNQ!r{m-mli7=Y7=)O`Vg=eXRCPEE zCWVY$k~}xz03o2aQ^cFaq!tVujfrYdZ&IX*BtWB~jJl>;WYkyVWO#5H8FHF2&Wl48 zpmjJY7+GJlJy6Dhlz4SUJ`~tJvApr9vr(0lhDpSJr93p~br5&4gKUqDP!?#nyY9&hm4ew!q=*KYXMKmLT(B#g^c%U9AA~$!NIQK>rzKjgy{Ol1`2K~>!xWQJ-ZZ4K z3?oV^g{yN!APWLZ0UvK(#v!oL<=7*27=(NJaVJB|D0Y?;fU;`s5m{~|`Vf=B6k#Ul zH-uIG6lduE8|mRj$YJUs=hjOx_h^>rbW^&I*=|N#f_4cXkFiv^BGd+sjzMe+?&Gv? z$Gf{4>bv5$11BGya2i3gClJxnyL>=?pRir9rygnwsV!J3YVeAvvzNs03=ts-5s+vU zQ2U1-BRul76{eghZYOy2)@SYoQGeKzs63)KOhb+(Z)b5AO=Ik0vK_MS3`TJ;!VwYo zQ~0h6Xr=`8kHBA?StClaxU)|jE0X2PCi5P|a$+pf*aN5bFPSBuuE z)5R5dMk3jmXc%Zo@~D;Pxnan9KUB!U*buMQhB1qT_^sJ!am|K0I57t`h8RY{6v^q^ zb(bf`P z6d4aOIMHAv5e1{hou|3L@R4^?$h?S@q-Bj8v|YKFHb%%+4k1e)qCsL9W*H8AmLU(^ zV@RDU)MH5nJz*W9XM)E1BzlE-5OgLrDG%KR$}X$i{TV)442GU_AB9ci;%b~1qXh2m z3*>Asr;mf}B15;2-`#bco^V zo%Q`DZB_SxOc$=v34CLw%u($TAM}jdx>po~eDTVaUD$($+YRW(l_o6hdw3RKF{iSd zSOFOst*Rd;p*S(^QBtRz@(SWXu$6_+;Gvh4LAb1AZ>lfFlk4nAu|0-M(WGS@39Xr4 zXu1(b#rKr075imyao$^)U%a}oICs+nP9zAf6O(H0TVkG!PKJx~=s$9C!Mix$xVX@` zc-6Z#jNt@m%7NKlUd8%0hY6kAk8qckYY%9K?-%xS3%QHnE;JA(c@eKKURk1S-Mw^| z`RK(fARO#Q`IY$_2lF?sz)&}2)D45(up>T5q}bT&2wtCXzJF5wZhJ$ofd5i2@ovGt z2NTNw3l-(}piJh)-n&#o;e}q$TZMlQ;XBs+#9J`szrUh<2ksld-B`yi)K*aGZ7+g) zMxXzE73BwTUkGIrZwtyCK>3!}h4004YyVYK{s$|{KZB=ca9<2P883UY^!$%kl*hjE z-OEtZGq3K2<^O!;`0YU*35*?%SPFkPPBMk>?-x z!t&o!QNDWotIMCh{R^e?RpZ}*(vi?_eoXtT=&zs^_6W*%i3aOd0ha&X+VTour1=|teii*Ro&7DQ8h8(Q z)&&;VYjP?WQpE%wd#&Yg1jIS>2A-;Ey!kvrZ-_8E+>CbMT;IEN*~4?Sm1QX(op+dR z-T;ni6Ql-jYcETSq89~xqI&J9Xaf7AmzO~jfkT%3&h*Y4csE6@zA?^G7Sn_a;(Zx%{;A|1VXPZ_}DX$FKyaOn;r;0 zbQAoA8|d36f8*coWZp`9{mCi{4_BX1-QGR)OMLP)I`n?Z1NQG((O3+6hxoZY+@{O{_!-tM{%IkPO(j4S@569}IpQ+rPrc81sDSp`LsX*C zOyVb)gL_dj^xlEd4S{=AuufJk-!I;b4i^Itenh1sd^*6txU!O6_$CQp+WLJJRTjKI zc*`s8jn(F3Zxtp2^|E;FUfcz~TEA_QP%mE|?L|>9crcI;SV}(9ZSon>-Mo9GEq+!0 zzUDzu>*&z3sJ`kfzNS*)GlZc7$qp`?W|1K%2de*8+*R2lLa7L;g2diw+9;xB&yN9|h4$ zzETAb)7}t-Xc{p2d=EB5{R{)WwEkdi3kK;;(I(=CUhr((hUMBue>4x80=F{ z1yVww&IyBQP;r8ePO5b`3OW|>6VwhWO|V31)c;teXjU2^=nhbfgX(~UFz~Lj2*P!6 z2@lT+lCrTS=zL>Hk32Gs0IRwibi)jb5Zzq(q`-F7K2b~UaLP)0`WIkjKWwh9EX%%_ z>RBR(6g!6vv+b0MIV~b3fk_qYJ`*JEcsC)*yS}Hj&wH+qY35v)c3pCie=RRo^nRlQr$Z)1l~&0jSi5BSYlT+wwuuSt5=MKe#N{0zxNU`Ku?5V(!xu+$N9I_p6XOogfe)|H8O@Mc%QS==I2I5e7I zVXl+XPH~qoU>ntBgtN+N0z+3pr;o^WnKXpHwB9Tn#9dprB<7Xs^G2{m6z-_Pl&^4x z$T;954v?6d;Iu)z6l+UK8%g>upV%|os_lqUkvI*Tz#sj&3jXE*_@Zs^`S5QqRg`Zy zzyEN>@4LW1^?{Shy;;(wptOgYlv&cN6e71wlALV)Rr-+-gCy3X-jMN!ps!f@z-rs#m{1vi^mC|76AQ&!Fy%MhR=5@=3ZoZT8N&hwCetLWF=Cw0A!OTC^4{0p)q&e4fntx2)j@P!GKI2Z9D{J*ae{-?1(DT=-1Mo7^YT%Q28C%nfI(AckGiTf@J@hzo3R z|Hx^oVB?IrI|<&pw@Qy`RNiMIR>;i7^)->d;ioub^UB5fS4IbDQhQ&yn7{JMgjRbv z1~P5|3#_BngM_+;-pC*Wb)fh*CTi+>`4B|@>=4F0+(kRtCaJ3OcZMM6w2K(E1^DlB zgcI^RUwiN9*WvxY!uwC*J@dEWJG={c|02BqK3se0@4R=k1n=O#eDCNN;O|et`|I%j zLwNrnyf4A~lfUua(Z}HZ$8b*<{w~A&x8eO2cz+tN!~54>e*dTk?@RE$0q-x%_pi(M z4S4^^EAJouDg6Cocz^FJ{CD*GAS%5!_a#Fe(U|CzjqtjeFy5k`~J~a z;r+K(-aq>I8}A>z4!?c9#m_^L7ab;`DDuz^x>~^0%BsT`~b~Mz|E= zeH)~e4R+9>U%fZdL!n5b21mGfYtdVdbBg6z^lnAuv9;)34BFui_hnI37MIr0KdX1y zYi20(qXeEW29JWD37YV3!+ROEKO3;Q&@+Jf@1hKXF~}&Ww@7jF2V<3%sXwQVcOvxxk%?qbLhB9HWf&!AzJK#NcxAkA0| zUd6=mxYB7wh|}YKDw!)K?I5}I5lT$t?<+(S7l;L8Quq^*Buu7V$lbsXh=jJX_LDcJ`V+#Ud!yF;3 zLoWCjGM^f<@Xpus!6? z7YD*Z@Q75*35Pt@rdwHcb2xx39E%7QJefM#Zfo8y;_!8^e5$ zKmA0U@ATML@y9P9uFi#@41U@V;Dze;-3(oUXHmJHEe6@{_NBR*06j{tU%&iW{}ayj zg}Li9!Tf7C@t=A4?Pt+;xAt$nfAr~JdjDwVEAJou19<<;zXRX@`uj)!)jUiCP(yBqr%krj=i-hhx_R6o8|<*W58XYKzruYP{IBn$6SX)L>GyoF9mIg{Hr zseX5iPO|<+eU47@{F98&f>*zPp~maL`y!Q|G$wWWr_u7`E60{UuK%wc)BkDphgJF; zY%A)Zj~juy@f$B+Jp#|ee_~qw@3j6?Rpa+I+{+rZE@=Q$pa|4PR*hekf1*48^YGuK z{-2fpuTE(HfOe*wc#Hg)_8&*TSH1ez^RQn`>mNF;|6i4V=nnbY^nva}_#Bya@Q`X7 zp7;!`JAdlxAFcK5>*F<3zG{CP-QVkaQ*U31==5W*^{(s|IOgS=&ffl4k8OWW<=DbD zsr|>%_p4t0>+J2nY06j8=OL|0tfNa~7?Q{6+3Yhny!zMK+kazX`wyOD`>%QRud}!R zx+y=cePS|y+@_}&B%ko^dJ?;fTmQ8F*JnLH=Fa?lD^X$jf4QRk8+3jy$p6UK zy+vnDbQ~DQr*TlMo*4}DJ$3j9ypO=WACWTb*um-%^=XRwgW_=P7ru(GyAu3kbSiu& z#aRt03Yed29yrfIb*Q$+ushTgvxBT?uNO#>hM#Bnd&x90aw}`X%NL=?s6p0?aHZoY z(E0Ku)~;V3rK0z~pnpmGa|NRqo5rWbYqAp%{bnzVLj2-0xG=)#cX5mFh_lJunZ5($(#6LoKY$XyaIKgXWJrq7cR0V;iC6ofG#*| zX%Q`Q(AYi&s#5G&gaG{H#1?j*qHmtWdKIz6+>;trYEow*NT&#kBgjf2E>4YKNJ!Tn{SC0WX~JGgOiY_d4+z)6mCp`so*;pFB84`=`~fPOG0g3w_VOaQe3TmE-7JNBFGteVqMp zTK&Sb`i-jd{bc7`z5cTtzsozsJ<=%Wq&GZ`{&QOW#2Mmq-T_ z=Zk@dS_8*dk8WbOI?^YI8{EsNB&v({!T9J#rT-iLavJwHy8m?EZ}t&?=A7Sb)6VMq zMk9MF*SC@3IHBhox!!Dk*SC(|`tENX-Tm0Nj{Xqdzwq&I9bNhaT>GAH9R=U_t)q{_ z?@FH^w*JEX{>h5p|E&8DRqYQde@ylsnq;3DEq^-u(rNgss`JZA_tSXSOtP%KV|J=U)owIMhi1?V($WK+zUxs~xwLjICn1^`amaH*d=ftMNngV)* zc0|BjpCb(0&mjormCt{Uacu{m-{5H1!9?Y>z=K_?z%Jg8$YyY3Ztk-eK7VmRuyZdr zKDV7+`FvAinpJC0A*`IxZZL>K&1H(0>Hd&1KuB&54*pG?$lpdKB=7S$UrxfGyW>B~ zpHE9aRpsv+`HjzyDjsdL9(>_MU0etTgZwglxEl2H%U zt%CxSk$D^GJ_0$2Gqu+W87ofj(+f+(ZTP|s0Jah8*0yp4(p#_ zhAF+0vjzDGFT3M}_S?97-7w_4i7{Ow2(U$_Ca zPf-cRr`=p@_mgFs8hq7X>f@Dvob~=t*9DZqHjwC~ zEr0?~E(B2xlSr zCy@goxtHk_*$v4{83__Ij;2#1&)7a~xky-ew)>?N1U3yDrPZZA(RPhQi0HTknbw%} zJk#Xo`!vtPTkC+tF^E$dZnU>NQ4C+KNLI^bLOln+avxbY9ePp98GLTx zV=#P?coNE_Y8aqKFvm|26fsGb%~krEc#rvz#^`hRh)I0D59T_@pWH5Ij^r(zYNO~@ z9VM54#1UpvR_>8e(J+2BNt0P~FIU7P`;CA5TSxD~`v?E(w~prEy#en5y#E?p`x?Ce zEBO4o@cw)7{sz2%AKvf5+xu%!2Hs!$tKTZ=4>1-I{TdMys?(ol zqL;)LJQIzndizgCrxiPW4+kUoT7Eot({N;z^pJVOg)7qcUvOedX@+VuL)m|uP zYk%3ltjd1G=;RrcYC;Vinu#UC+z`!5ofiM@r2ErZ@e!*0f2-<0zPHu&pSAz5 zO;vuu#BZJDeA3gVZv9n_PgL4H?~I&aryC#U%$R?eG_NNsU*6YG;@{?$KP$F}_OFWn z%stM15(@{7f6wBBP$%DM{l`&iJ^zX2kMDV1|Mp1+z~?>`O2hs{f*d3C*!ZH z_P0s(pLTz%>i?wrN9ku;|AlGeA105#&f$w1|MB{t@A!|`KRW)?`Ug*IKc5!Ar8@qp z{QTin*He%%;Odexnub@h*q@kz$_IREh% z5kGSp|Db8($A7e^9@ChK=6`!Hhp4?BKlTL1ggmw&BPzG{8DYqIP= zT;&P&>DR@7M{}CY288HKUS4P!f2;iUF@9yg8S)ddU)fPe-GvfDSBr&4Vakl<<4_a5pUA-#ZUhmKVK|pnkrW?(hg7lM8X}x6*^)r~OZC zQ~v11V195AW|MZNV{TXpqU#c$Tve>yIzZvWXO|Kj60 z@jCj~^2hbIj=#|I$MvR;K1Ths@5+AmBJ9W0@&_luH@H>WPfjNvedpu9%ktkz=BFw9 z!CB_#IQ!{~z~?$meD1XT_q6iiNyfh}&g*&b-{1N8nKJ)eW&azs-%e`(wDQBW_UEeo z;f;~`bG>99ku1>l5ErNJ_4p;v`#JvjQ}7Pp{e!)5+jWBmo_{g$is+!24SVr!vKU~x z*Uy%&u>bmJy|;z;_b3^_uHbfg;b5R2@4p!xE_0?Bi6@~HAi>=*=@PfU#?D!ATR_PV z7QMNHIeB^a3--FoJ!G#( za>(PPJM7@^hArh=nge@yeBM+G)H~ zG~)EiJH_mE_@{vr_9>Xh*(e$IFMPfnMMkvNjXJ5szXTwgMOhCX|Ji^=u}{s-UB4Md zpS|$;lRZIV&^~u1{Ji+_W9n^mY8>eu%}XO#AaXPG@yek)yK%8M+-`Kz{*||fJ&d#N zhF469X~yeLT-+UQ(=@q*lBd??QrfS{Ffa!&$F4|MF%>EYn)ePHK{LniaXy0yK$vV1 zhA%#_zSKxi$V>#-WQ?JntAyERfrUHOp8#$@Mb3668fRh6%n|G4~dIRUVI zmH*Q_P^$Wgp&E7Cy4sZC zJy?!*!eOrnG~M7b4Sbp%>ht7==CDZRp4p4@SC*q^aVNs4^ZNUmz223LFe`uw+=`1{ zG^xJv`|iHkdi-SR!RBUbZR^Q{c5CxX?R2Nu53}e?_wYc>;oFy3_nd!eiK9s$G7I{p z&0*qQoU6ExqjB#6d+?0jZye0uxWcH%Ir2P1 zjNO^VoZ+)OX%7zl#vs}CR@2?vn5q)~2Db@w_tK9wfcd`cwL{=f^)ejY-gf5gWZv7M zmw^nCdGGE$SpuQV zob@Mtlb>MyatQa8c0WxEw0+3;yTJXzx^BnsN|5)JM`Yr;Cn?e7;%2miLFt=ep|`OK zs7(PoNMEazGPOAvEQdwtEy7e+Q6+Nxg0K4JJe3aDlmTf#UkHZ)MeV2>8PB}{1BI zXcmF&5P|FlUK<+Fi%f;9C^`UxN~I{|4TcdH?^c*U-3~MFZrqK67NV91V)Nogucq+) zRgA4(hp{271nz}ATIz9%kRP@F<}NTD{12V5>?71GA%B0>|(G6vG{*lfaig&86x zXDJ&qA#;$nNULU4c!SOECP5tZ!Vb&(880Y(Jc`aHvJZw5 z`xhsrJ`tEdG94XmB}KF7CgpEUKfjL;(cmQQF z927)ck^c(}!6kJI?{?gBJoPbhS>jqH5Z|a`hCs3yv`WFCw4snttm-EX3wJM4hF%MX z;dd|~m1Zz65IF({{GDN}O)%qz^&?xLyB=lOc3J{$75!Gu`(eWqmEH(pNW3--oXyvr z`yr~}a^69EvU5@(F6QM%FgiOMK53q?dHHaAmVxS+{|lc*rK#>ayDnA6J8#3kb*M{j zrm{e;CAdpIX9wT0;nk8)6#t%Fpb9{f8(@oIq?l2Q_@dxPf0ZagpagLldJc#fQN420lq@C14nrJip zoj3ymkd{D8?LpTF`@4gHsfe%#E&Tz#C~3A120d6TnF>IX%$oAI+TdV3C8I91OweGo z9f%k+&^T{STdjBzChpjP%}}_uY|Rm+vegK5R08rt5DAf^5 zz>P^Or!EhZL2oF#@c_AN%#og%dm44;rX@{dH36DWaz+UubO4%q;8%7c0ygRi@0z2I zm^Q~4R%@EUNmRFC@wT&<;+7sJr4iDH5lDl=RB#|Yt-x1cv8SD|XAYc3a2JjwI1y)P zTqszdk<_#!$YT(qr?%LAMhX9j_YLljJ;@(4L7O>vo)hDv8#k-~%M}RGoI*I4WY{otVC$ZhmSywRpAo4(C?1qCHB0Qj!H}hefNouB( zeTKmi32lr7p|UnB5^{wU);+ry)~4dUTSLdeFcVxZ3b2mkcwcj5g% z!TUXUfBZlEr$+(2UxoJuy!YV!Wq5xT-e1Gt;GR+a@NxE)5Bv9N?K@Te1s2`(7QE{b zeCzy6P7{AvW#3RFO14w#%D=^~9~-~=JoAU02A`m6 z{%w4QjX|%oUrvtiu;stg`PntTZF2vX$Jxi=|3zREv! zw0vFPrfI*%pHA!lTxH+2@!>1*e6%*-rf=v2INJZ}{HYc{hJDB*n&-2`Csp;YuKpK+ zUoma`MAi7Z?Vsf1UU&Z4_^3@UqHNQQa?P(7z@ApM<|NNQ&i{H^|Bxztj+`hUC9Z|3 zbaEcSN$s09er8(#+)q`M=ltT@AJ-!`r=IRPyvYV!kBLgF^CwR0e|#Li-Dv&~&d+4a zSFMkbo|MAfI8HmlhjKQGh*t2)^LM>eQGdhvy*fWg3Oyg196_^QG{*aC`6_&p>h>%D zd~!~&ZvU*VAGy-*srbnH^?!2wf-3&Ix_w(Eiaja+U7g<~BGi%&?dy~CYgEN&b!q>7 zCgtl-gR_s%qWX|1Fmuu`K=gaet zUnU--m;*V)1LL&c~|_)f|P<@oU`{&~E8)lzmn|B2|t zc*e#;<7G}PKVcv1^dmju@Djq&Ss|p#jCyz)>}9Qg5`Vi2?~r)fOgKK4D^B{Hy7Ao; z%5A|(G4P7ome-#zF`=0CMKa!^5q}Ew6V_q{)wQqcd?;i*+p=5s#%55trpeF3`m69O z-1%z?@0CcDCDJX@*-3g)ryuDMN0QUXq!Xy4ZhUt|S2vK^=Tqdg+M#;-om~HSMt`gL zxmEL%IPun-G-fP^mTBO4q`Q;szb^*g+Twpzt?xmpAM3QsB@{oComzga+W*S+FOv>1 z6#P_vN?pd#(~sYa!I!f5?9;~gSGE5RjW=U&O``HT{m5zZOINMGj;yp@83&faPnL6f zwEhn}|7F$uBCpFk>SXk)zxg-t_1}L%%cCw7?e%{ILe-3XZo&H>zl1tb&i6!FFKxcN zsK5&vSWq!OFCsrA+b$JVpRwo9Ff$hlf?)_S=z_J3U>_fYgeOt%ZX*$K2W9zy2n+)M2LTB==! zdpR4{fWgBK$@$j!LW#maCTw&l(TR~f?GK{PkfWbV(J_Hgf3r*Z*`1&v`2oJYyhE`L zx3Y9U2QsBrVMGSvAP6zIz-BK~u+yTq^)kjGEe3=r$IeWY1IeGGl_V;jK|WmFQUL)Qb+@xJ$EAQkh#b-)p@Z<;p0 zdUgDIKEid>%NH+7zirD;)^AU{KUd?A*{t!db?Pko#VY+FYm$1>K1B~by$4O*`Bq*3 zIM4Xu@rMf&%k%lXA<`V5ja3v_M}Pa&Q;V8Z$1B&--)Q;gZ(o^=FU-$hqIt-Lx2)!rCG-W)C*GIx&v3n08jUOYUYJD|L+XkX z;gfq5xYJ4dePE+!5jcv=S^0*8LNS&RGd@SzGYl5d=yVjs@Fq^pNnA2}FKvf;+IhZ-mH_`mHNpg-w}}2fAYc6--q{C{@)LddjIzaM?dr42S*)jK{M$R1Os9^DO3i0 zU296%bi0=pcwwV-!Ta5pzkRfE`P)ao3h(#e{rZo6`{C(54z76l6xH$ilhft+3JBOfC|{%9Xyn=`^gUjqRuNpjy^pRbc)oj$aP;kcZ(;Bq&G!=Q zsoUjvwUIDkrY8*O)o^o4-y9y;2>Bu%%p&$DoC{gP`QuSNRs=hgdKu%I)t_ZzJ=-a? zyg!>!^xEXQ{0+pMpi&mgDyeLZ4X&PCuHxw@!e^q4>>bg9A`aLWM#h!&bU2ho(Knz9 z8o^0wXVrFnvl(L5RfkeH#8)bqnYQarC2ho&2_XRes z1Vs7~cwd6ION03OBL4HUp7**aCq6m5y!Fq1^b@b+=U~nA{x$sYI^XjR+5msGiJu35 z0s8!xJ@2J2A01)6U-<~%k8CEMGrm{$iDvu$-~EDDdOd!f|9)Ejdaq-7I}h)DK_iOQ zKLG3fsXyZS?dykMFZ&Pte(5X-WkT-h`A4Mwao@nZ&N?O-2_+! zt=Y66SA#8n2wc=p@Y?$RKRNmtc>nSD{>jmI!QWqpw|0@F8b=1+=+=yslB#qdrEzH)lC=*I+_{L|870 z05+B=U_X8uH$V!>yS+x5?Os_5i)c5^4$I>_RlS^6yQGT014TQA^l zK?(YZGPd&~3p=Rg%?PbXAsF$;ofv(8hKZp56k*Z@nrj3rP6doprJ#n4riWlnCb_~M zOhJ!kjXidlutDbP8M)l`9Fd9;eT?C$45%5w>%hlx zf{j5JA7hZs278Bj4057VBh_RfpTt8%b9&gxmxLWrsbdClD_4+F5!*v^3#;49PY~A? z!X|@RszVCp39Q>q1Yj0k>K#Tz&%Qz^W|MXR_o+of7Fvc;A4L|j=j?~=pHhuqaX{Xd zXn8>o=r2-BPUBf^>z~%YxXQnS?d}ET&59|eS@RK`%y0KJ?K>|1WLo*4D!xzs&#N-? zm2(PAmWE!G{=FPO*QOTo=M8FCOfesfvN35Uo`?RR%KqZ6pK@H;>0*pO9R0%8W6QtT z{JmxUMiqTd${bl9@3IAE@k-oB_{S@jk%HZtu=>qUd_a`1;ZZ?Xrr!S>27Ni#sgowQDHM0Xfg)F zi?R3+#!1c=2AC|qj7cr1h7*?;`Z(@>9d0S7#nhp_Tj98@Kk+Xs$xbR#$BN^!-P}%x z>VE8P0lBYYay*X)chTDji@imV1PkcntwXo++vv=IKYO>;^}w6-`m@0QRPh)4;#0@C zc1yJ1vbXH%IG{TJg7NyRBk5k${=Y9Lw4!#^wP132>;HJ#^3&>HJI;(8hc8v{f2!j@ z+5dD}{;=ME^ms(L=fOWu>%Us%zdl-C^Bh;U;cqt zUWX6=v#G%)fL}0I-Ct+J;~KK5oO0{X_Wvx8&+e_dhOI z{{eje6TKRK#<}{2*6`Jqz53D*>%Dtf)z$y#cjW5-=wAKi=c}&%oqx0H>aV*PuN9`%&-aKRbZGuX_CNpa1w@{M}t|JZ<9>Pea+Yt+vK% z|I2NHAw8gfKkB{qTVH{{_yqjd|DIm*N{La>k{4e3$N%4dN453g+AeLfdjy%+@ZKgT z(wIg8Vf8||Hr^_&>0=-J&%XPYJOyLok^G?__}~BGZUq3Cx-4kfPk#Ro{(RMasRT36 z(jxDP6Q7nEdwsRJFgO3|?EH<{xf{V7l>aoilVZaXa#(E{q204zK%cpD%N;AK7jf(HL1!wjo?z8=ff!Y)YY4pZ4(7b zoiuu)-0O+YS`V`jk+zXT8&$@QiX?zAu|Fe)l^ojF!10gBl#P)DE=tp@@SrFjv zP;Cbouc!%R8t^z%{f*0Z2>F^M205fmWDs=5dPl71D%e!=!`H zbF05OH(Gse@>P)hc^!ubtru!1a=LzV-s!q##U*oDw;M~A#k>!NXFI5)UPXT+6xUD{ z4m7}c?;Pq%PJ5+(zvk3U@?Tin!Nx@7rjP>Y5cH^A0OCZHzS|cXl zxtp_B=T1ey3wC(IAdhxALLp5w3y{nSXWbyZbJ~v>px-tEoy#W=^EHPG8!qi?9yz8V zr2Pk*t2xttmz>-{RF-5IF=us2{C=1Kfnl*yU9PV?RmFLUF%Jn^)f&z|A$7BPi{@Y9 z^G%i?3=D;3nNUWI9ZK{=2`@C26Ao7qX{c!7 zyeX=_=U`J#!iAMcUbL>sNCaZ;c1kG|(4&7l-A>t*n?<{n-$eR>WtWTwK{8@&_rm0< zZZ1U7&hiYRgcF2^yC8HoY!6Hj^Y)=8I0!T+Do&Uau<{6RjWR=)^Rx4FnDp*hoCj;r zVT>mDT*4n31zmrAw|aM(=3Zc!+77IAObcdpBlt>wcO&9idzrfhEq#bHCuFm{SHE-ghYQSB+3Nt_9n%O)bbf zGm>JGw%aYgbiG8on0alJ8r{GGP70cEw4lt$!zjTxmvG${{yk zR;9(3zmW_rJTJ zf9Jm0L|;r@LspH-p+fivly$3jIOEf?i3-5c#5I(L$dDW!^qk(uK1|(ml^%VrLfngZ znLLW)K5VIXFzE~Q=xq#%H|E_Co^oh63TbAM`gw%=X}MEUt)#7Sk2@~s>>apO(yZgJ za==q+Gx6ZiBkVeC6tnZMopG<2Yb;o*4QzTK&DTRT*$SzN_lIHk%F=KfUlz4=7G4gr%~6Z3_ZEIJvK-O2Hn8v z`&swNIbJT5&Jkt-^ESa+zu%%%LtPA>%6Q=K<7Xm}5&8n=88g+;@kvw1?$117zPhxpcr5lJ5S+J&Snvi6mMvwv||v35Mwc#oY1ZxWHAXf1kYPij+5CNgT4Z) z61ErF4I+2O+RN%0TXnGDfiEGHK@!^%hw zE8jhacH#rO^8$kcTQjltecn;6KL>Bst|O9K8GPad;b?$S%P3zLl#xtv(r%1nlG&83 zjA%!}dB+TD;t?X$CXGW)yS=@g* z%+eq797-Bi5vC|+g>zDwB(t{O3-=;;R>cz@x-`w*!;L@$(tsi zNEi;A#a*&zd4pi57w!^!r13<=Len$~4-(_GB+mCRx8gFz?{KO;l01_`pV<&o0h5}t zNRpY8a|0U48(`N)XPzgXg$OLMLAl^8cQSS>li?_k4&mr<6Nujz-qsZmeC1l4d6~O< z=6RX7twSz$9*$R0Xqd-Tv>tCQ_Hh3ZH%a!1O6kPzQa(G}MiTZ}%I!@cJa$Q3A%@n3 zNx6fhshD9w+ic9V7DEjnqNI30uTH7b8g~=++V&Y-B3XDu_=AB7g!Ug9YvUNokx^2;eTksG^8Nci~tkQPh=jYr_%KW4U<=&ezd{ zkcIS87Z>r32}_MqW){J|k4buo z0+H@9du6Z-H76w=hkG1t$6->{OFZr00LG@-iw;6`1PyKjxnfRDSHdW}>70M{%+u-YOSDz+ZbN*FoV1R5Z+_mP z+3`i>D%6Bd-KEK{*}N!SVm$L{_bO?>nOk96f}O4}%stW%$|IN%nmg49wk(NS$sixV zO7dN?fMOnqZF{B@%$ebt_V6@C=ld$rtIElTwgRif5p9D{Is)85F)cA~<+z|wODB0! zO;<$q%N!duV%aDq;RjL2h|UIkrV0+L+!+${%FAP03l>La?DlnK=ZCAjDiHX@dXMZ1F(D0( zNT`V0XIOBPc6?0E^Huf4#Y?Gq89|a4YY+XdNT%FDp;BoFSG_2fJ}5-qv9+75?vlMP33Wgf6pw3xliq4u!e1|lr``;9KapGIN*xF+Jzo)zHmi!#ALcHP!nS0T1xu^MBNRZ zk-Tc`kz_3@+ZAZ|yBRPbnfjUvzC-WOSLKgR63Y(AGppPy&?z>$#cIH3XK4m^Vd}UU zyz>e77Q@(}2qs!VKJw%UR^{i2%;Fr$!1|#zxxm!nz!UPcImPZ5?z-F~=0jyJt6U&n z+YixWIP3^rtG}(Y-I%^zT^Ma%={XI*DeD0%o}sgt`jw$ew04EsAWzwe!aSxNS2bhteWgELfcoiR0A&_b>FhDP6>@<%_f@y*R*J6Fz!?^B zo;dYt^1nIT@%ejk}mR?*=B=hI2&v`yF@ zIz!sDFYG@PO-cb}l znMw5~Km{R9WrYIE(cg`&Kyi(*tBrZL!Z}-b{h=j5aFa%jCuD#yi!2Y`8R7t4URw@eBqDAy0;&9cO%`cQ2^wCQEnj)XczgIZUii% z0E!Rd1YJ0Q%zat5S~lv&h48|7JKOoXLnI2Lx>kK8ae36qbQ>+Zc|-2aG2%SU4#hO+ zNM3RP!2f5}?p@<1fe?kU>|NdW4`>xTT0LGexM5RC=pRl&7Y&Ix{KDP&$e^i!9;}nb zvrN!zo1?vil)07ykY_U|a05=eV$X+VM=o1$5A%Y!m>HMIOyn%BhHVa4IyA}|V`1W5 zM9fd!p>v!~?k&sme3M^Vv%=yTc@|Y1$kMP+8}5xLzyX_+0;4CSfPFw~gg>VD)BOSs zG+8u=fbG$vxRRP(O~sp3h7QXdB_rAd&FLjdOs8T?him8~Aok%K*Jju5Omu|d{dh%$ zL1xF8ucS3I#@JFtqa2IqYml+?g~zRv@&dL4k1cOzDCk5FiM((V^hZVr=Wl`p$yymX z{vR}#tbG$|_wmlz&K?ey9I7zPZSB|yOOBf?v-ZTxyPf7?^F;|}4GH9D$`+XcX_}2I z9`B$slsrDH7USakAd#W|Yyfgu!m?=S`dH?ed;^t}?C&JnF22)X3;H&3g|*xBfC9-E zxXWx0QOyE!5nI%EaR=P3NRu)6&Bu&vQ!$g-UrIwOAGWx+vNis?Rn%wAtzZPlS-3? zI~gn_v2HmBMwgc`drBBfM<>cC+>M0p?vgQLsa2cgL}K3@W%1Rs8)vS%-eonrnN?oF zlAo#K?Bm>Mij6u)wN^Lf8b-I+Cn3v6OpLG2VC15O9TbY23tz+SM7 zV7da&Wa$JJwH`d|8IEUXBUo{FSyHo#+5ktF&TjPMR;OlBP0(anEgbm~+Y&&oDUeRV zDzDO*Hp2eyKxFL^Z|62DwR!m(U5}irRHZ0@7-hIeM`*n(X#qGq&w+_-Rs@(!H025d!&;IP6@1&clu?F}7C zB`PZG0>VBTMoXI_yN30Qmr04QGaj@khzqA5vlnM9(+V3?Nb^VT`D8k=BupAyam0;f z9ZhhzHH;NHtU$HsY{WvhFT4#5M+eVU>Wm`{8^D~hNfS7v1UC_C06nChdfdU!50j44 z4~70)&nRo&4=&Bk%&{z%UoP90^9b26bsfz6DSAzGsU;&lS0xP$8=T+1C}j>*0aY^V zIDHc@bmRb4518Ue!1yv&mr*@QFEE!BVI`B6hSy~yxQ(k<++SHH(PCtVU>mu3{j(<+ zD>MDU2pAKbRnTr}6^o}d*`1IX;8JVInu?=p1llnd+_{C>g|n`$dEV4{b(KemnP{bO zZZ5G;PJj|~xkkHWMRnckOk-sgh=aGa0_=x}&RqGJ(~j!>@@j?9o+XbcnrQ;<9}asoVnp0YUF@lC`MnNP4*wJ;jhKRoWq8|#mkTMt*3 zTAQtV>knJYJatB8FZyP&5L?3OO1rF%SVl|Sg5>lmF~2-4y&abnUV-r*_Jozvk>-E` zBB}DM=rc&*VjpOoKc7!G>U&V`JB}*XNv`F5bR+*(-+zC9FGfuyD~51CfL*WcA^D7!YZ1MBNtA91d*C<|q6RTXohWZlxOzeS zBEar}NKkBEt2{xaZQKcQLsniDsO{BRq<2#Kt4BOIh05>GG$PraxGUv}9#i5tZFAQ=+$=y0Go zOED)VmDpS}Sr-^5XBlP0bbt@K5WvodBP73!x}bLtlMnG*vt<1Mr?UA-~qu*jm6S7M9Ne?Wp3$thI5 z!bE+maZ^f(v=U9$WZdpc7T*FfQ%hdzX7QS2&b}6>Es0c2yaPBo2YwvX(2bD{%CxG7 z+vu4&%AAmH-sMedZK=8St~0UD)}hH^_(&bf08cR^Ycd8lr2bU(wK*lo0E z4HNci#0PMkq3grt(*ie#siWJ$UNUFlx{0W0e@CebM|xw}%iZYu+(ap(YnOPY6v%v` z&ZH^KADP6grw^}K*Q`RrvlmC~{{WPNG5X5LOE5EgvKX$Erj6#SHw11IB>oxJ&X_qu zPzgRCY~1>7kYR8GT7ZFwv)-Xkj&-=-05?F$zd^~}6u65hNrym-Y9GUmT4PuDH7+I# zJBk2+sMjlGgiJWH&n|x66HPCSGM)J`gQTDuPYl`P=8BrdcNTb!`>cjxiqpAWu;kx0 zs@um+5-ALU&C#B!`(QZ?wnMmy>KZ0sjx=5O-DsnJ+_ih5?8h3rHnPtO@s_wcU%6Sg zO18m+u>MrRq45yV=CWquVc6S+mUk`xGJocfXeaQd!WkOZOJdwQ#9FXT{7aWS9Ct{i zh`K#ra4l4+81FDXb)*Uir&@B5Lb--H8jSG>=IPv!IDMejyx>z1wzCACLuaTu#=XZK zd^k{Nc@_*fmV#1dq=`><@XB2m<>ee|vwJkxOiNQUVD&Z3RcM9HsZiYo5pjbJG0GW9 z_k!^{=8m&w&2*B3`1bL*P=Se_m?OXlM!4iAHo|I$jr*{(qDldIY@QKml=PT17z4{` zvTv~vC*AIk-sl=Y2~5GFWylTPxJyxqDKj?g%o-QOn_$kZUg02}qt8<4L^B)zcJV)y zFkAK1OYkJLhl+%b*d|mhcVK#$s}wFEEs7pggsvTFW-U=P-@F*DT8QO54v}IR*|+Wr z%EwncR9aLDGch+<*D28^XTHW`u;$2>tkutO5-l+!E|iDFw+eS8K>IT<~)gR8;eTW*VrLwJ}_3>+k9xe6_j@Rd*p9~A@A6+$-D(o9l8jU z>l>yyG+{0N2=}cFJ0Cfz*prZ?dvgXRB<8*m94GJcl7Tc4#*@ZL4_PuKNTV~tJ5f`qPXJA#TmeUYX+J72F10D$u zs~|28caV&<(#j=R@3bn<#HO?X`CcML;=>#-S0`eGLjT{zbEk`uOJqewx2$eDqysD* zNF<6Z=$zIn`Ljudw9%NrlnnU5h)!qrmR0{zzcef=r7(L}cEc8;%&k9mO5Rc=&k!+! zh{1D@o*kkapx7Pb_BSR>IOk!ppOQkgR!mzwUdE$t<!%t=KngOt^5?G?nk0NA? z2250!z|>QCa}mrnuA9g+$7d!`{4FIf4u0K%GpOO?Dg zl_F{!M_%LK$G8g!m&L*>wqW!jY6c*Km+>+lKl`lk;RNL%8U@LEGS~#0!q39v?ip-{ z5UHUD#-op%Em5C^;)R zgP`P`b5t@kp$Sb63W5?85KvT1AVGp62u45!R751GU_eEpN)QE95Dd3Z=#lWwyfe!gyZfA~I(4dc?eOepgD${zi6>-v47&Kq2eueFs{|V79RT@qVF!vgvK0~) z88VDXG}b|1mH2E!IT%sYKF5vNp=E^q5;@h0gq4wkZpp4VvxXjNR%izg2aSe4Wzyy z3I|fI68J0Fi!9QG5Cs9jy+bhoSR8tuzbJKJdI;c+1;FwIqyZu(hkuTL+Ra4HA0m&? zdfoEx@gzcWHn~hjLpl@4(Ey4o>H9#6lNQVVY7D6Z+%3?$R zaWUfckhKRGKycz4dI|e(1J8lKoM6BZa|->5x$khy5Xd8ohxN^9 zyg`p8(YioKKVaDbKgPfZ7V)tO`WA3I8tN5Fg96+srqFL>oe3iFY+yn+V0+6b$xF-2 z%Y%9&8u2UXDPa@en*i(~%0z&EOZC6WMAbi4dIzKxOtg|Aj5H~43IXs2gcATU3u-xp;lt(u+$w>o07#D^@k`kd!aGyh>HWlg#X?1L6Fu2P}x>NLl+xEJ5x(TD+gT*+4Z&yu}zqT26i=q<`(Q^)x)ol zs01{0Lc;($*k6I11A?amIBw%)k@|vLkye{;Q&Dt2qOkc&G3W7M09il zNp7qE=hRLWgghdmwElvUg~<+xGX_OlfS6=BmPmT-VuN5^G5}pnQNRgJ$OR7o_;|o9 zP69$2ln;1G6+tAOLPC4j1sRA|E0U`R&b14|;8!G;EOi!Kn!p;v_Y7pkMf;PYwSX@s zG=aG1353>B{-8yVgR)!^(Ook1oiR}L5BraVs}VurKH$=^@DIlV>a2OVKNdq!Dj^2x z2$IL#2jYMy=>m|9B~Wq@4nJ~PY#6VJSW$cAh<}$Mj98Aq^NE*5h;x9LL`9Sz$g&5d zFTp$!&^Zg2^F@Oa31mbeN)MPOj)>F7`U3$QfNcg8^q|sBfV+?oKA_72Tsi~|6Vju6 zfNczO*?^py;Zf_bJMbB4;vE_wV}Ze2uL_7sC7C_29Ry2SI3|KXqX@bXtaYMS6O9bY zA&f2};qyB29#2WxDuj_0Zyf8j3t@f7Xvub@zyUc2vW&i1f%gC z`4e;pVsaM2U4{S|heIiIgdi>KVk6s*Ak3Qd@W5k{J!v%Z$-q&9ZxKPHfDGm!Wj>J* z4q6d}=R?dH7%c%MBFQTT&Ja<128K&u)6uiB#2;2T=*Wad0(=Ee6Cv{AjYAVTgTU{0a zuq{ZMLn9#ge~J4EKO(@Ti&(DM@O46flqMOzK1vLo-Q=$a40*xP0Klz{K>m|03g4h` z(BQzrIl+WZiNX}gQciRP{n-`x+yUXfF*syQ5fI%lAu(v%0aHL+_E2sBsd)lW1jfsO zXl{gxhcw*(nU@-t&k;Ced>CHzfb%w#EMEgnf{YV0D8jL1w5g<1R0Sxl@}Evom>&U7 zEAprQmmk~uNG9^57*zJtFNO<8~XMkC5aD8WckP}>WS02L2XH>Bh%l8*1!XZZv)|MqKXypEZZo)4WG)SgM z2(NjQ)kPshIY^EGhz}YL4`4yaHH3YIs8!bi)h#iBQH1J8z(&#sIm(fxnvm1@Uvn9i zkgT(048(vtB7$U|kVvgS9}CF~4Re)~M)IFuC?fF-5QqQxO5r33QLV`nP_95+YLVyKvXBaVK&c~m`(E+|XQd3B5 zDclx9af-nby<*^UgTxW?iV(65PNdm|VDQLIPJ-eRfZ-5e0Kv{k=8q*%DZ}dw^ojn} zV@cpaBGu9&oc?ecG}18$S12O-=|D#zARA18g+(CwCoP-*N-L^_^p^X1`-g$c#1H9p zCc5(xF_Q@VG{S|{BJfs~e-tqqi;&&;0a_z>0p#P3BkTbrFA5y!L7ptc1Ba{)@Wg;Y zFc6%P0Fnd^3i1I!eu;JLzC>ioXvca*haj8qatm)(flg$|H3WDIfPRTI zn&iDB7SunTpzGCK;`|U?VSuD21s0Lc1mdk|KYv^ZK(pu@ih+s72;Z#RIowMn*w%>3C}ahui1~(uB2&;jz&Y$7 zS3z2C9 z3=L3_;UFy%oDv40&LD9?@UcSNLu4?!e~K;m0mN)L1a9JAuO`y%uGePam9O}pv6|~_ zighXSQ1lQH-vzQ;iT)}g5SN_$7V#vuL_HZ|MT`dA?|^$4E^GyK1Tm%&y>5bVbtK}G z{nyM=I3ZY<$gT&08^8rkiY7(*gHA~>eiDO?MmSf{F zV2ntt%guw!cQLVBO9tCJZ1SH3ZFFQ16A5V}H0R2;_DOB0_r!#we)Sz*3)3 zX$OX}5wp{A(0WIMKvt-rDY1wIct1JI=X(4lsHTL5gW50>_(HrLnifF31Jp^-`y~ON z5KM(6!KHxLNB*PWBJ*w`6$ID^2}~X#WJdN}kZA-1!y(hck3hokSDuroa2!sCP?($C z?3WePhg5Ju^m_jQi6kS8FiMz^7_gM#s%|h_5VBaG4TAo9J#rVx;iyPl3hUJ^T^m!f zSRVvBK%~?{L0o?l(;&2b+CTtO2oOf1761d3AT>$Bl|CnlBAO#jsWB(60 z6XMiCJip*RQV6>VaxVRCP~hX?+k|dFMiWTbi9crGAEpYzkw9*~e}K3UD+We~ zgLqP?a2YYq2ShEQH3*Xy0)d}60t^9SdjuDS@cMih;q^67NFi=$KJg<1^&>JTWE{ju z2Bx>dPFAp}IH*Yz9v?p_G)b)|V3}dp5>(t<7Lk}k2nmwCc}Smz32D%zNGfDjzzR9S zI3U90kR+=Agd!nQ!I1WzH6ppw#gq(#0!v~ts5`mDBvK%t5$ho^1}HcKn=1sG3@Gg! z$i4^Q?gV5Y5d?@_IQY3l6CHpM`6TjC2JLABP?v&+yRMcqU=)K@vc~PHYHnkw7@vfy^&|h)o0X%wPhD!y=9fa{NKlL5vi@Ig?PD2t*=C*kVx$5Wxqi zDG2HVaWnieY7i3*lcjkJqRELQNavO?=p@#~gn{MRAkP)BI)o892ZStt45^3{QLciA z8oo2~qZUVu7hqu7NOBDuJDM5*yNUP(=-)=eWQE|b1m_wt%|Y_7(p^DTQHtz1AXs95 z6G;$>AC%>Q1(+b94F$e#@>1PsxS%!;CU`(PAz|F>dYOX+D?vpoppAqk^Kb))F*3^& zkctHIOoA50yrrCkoN>S81OpCPYam31pR_|4xrbSY$CI#{$L3J!7KpjEku1369uR! zI3j)w9e}|SD`+BH5+r(oftes?-@+aQ(B_u`yqmxfrSba)G)T~)0DUK3;Q?dQQ1l*r z23UST!CAnx2m*K+q={fx;CF~sk|1U9ZKIKTAt0L|kq_<$0;UJzAOe#*fQ)mnmKKH> z8!AA)EuvWg>8_yJO3ovO(9{V} z58G5Q#VmfRVnCW3aE9Wd!Xf4nq!k9MM8t?L_}+jd$RL2k4FiW1!$Xn7KqEOU;R%Di zyk!0#@bCdxxrnDdxu8G>twH0CxKzoRmB~H4NYoEuZ;`{^kV)ux`7T4EBKJm;h7XAu0aw zcY#zb{?J(f^$b+)h7L4@M24~`NfD4-7Z^+yIM!AkOv0;UFZk-;3aq!Ivdq07HK@Ve(Ag$34i1Do}T z%8>BTaac?QAug>)qWFR*a$Qvd!ceBT}Pa6bHy4M$E1O@m&xicKv=pdWu1(Ac3In zPcpH8#lWxkBCRWF2QLVmphdW^cPN4Jl0bI>EJi>RK*QyZ!Xc@NY(WBtU?jl6^=GW` z6OVutR%a)pa{i}^Y3mbcpo+J|r3ayG&_o#v7j7a@%tIv; zh%D(~+70NMMR24;s|gU*q-MyfN|X0Rsu!>hC;@eiChwYrbAx#5dSg_D754hYHy+koBIBQAR8RML?=^MA*8BGyw-< zq@2XI2ESrrujD{M@=z%un-S3LVO$|Felph#;9VxSf(Z%t&}&1WP>B`{kR5^-cJPXT zD}>;mR|_v7cKpRXgeFTcxA%|wqdYuPkoLtj- zn^ZED1VQ%!4;CN^4@gq?1NmEtsoda$5JUO|np-F#1nLEu&4(lyL?cLJiRT7bN)HM2 z|KqtqfC^a5otUjIjs9b8NdJ`>2t;EBKpPh?Ex}T=MCAf>WCGsxXhM#YpeeMD13=>v zEDMVy|AA@P2vPO|tC z27>b82Z&#ia9j?gGW3SrAw+c+QC89+JTMS;rb3CoQ=EeUV#bjz?V2A%dAMl5s7XM$TqQH&#|54-g zOdaU)|0L7b+PS?~x*TE$FUU9-9Cuhz(dzWu5hbb-f%2PEd+}W^U&8i^mZrc57 z-EtrLDh1(z%gSldLUt^M=dW1RJ*(9>Rlz(pIg)Xp*r4%>R8O-q$0pZMI+5+2s*Fnt zODRh-;VsMGyEa!1404rMNoahU9C^LGXZaMaKY@D(4QpJ}gK#$vp{LGMnA>h^yRz-t zTcbGg>{iY^8#_FAn03iVSKqvAFU{AJ?>KI1;Lcqh^6R&4(sq_>4vn+uTYT`cs*JJg1@rn3~%Q;UyUHins>X$K}dafkwT^&Di`MvoWjT_eVKdduW<>XZ6%#Rr- zxVFi@3E6o;#e|`_Tww$K3Gw>(-rISdG1P+lMQ7uiV_r3j$&Aci{`oL@>Gh(_qDV_WsKwb2w-EJIbObPGx>mDXyFTaAmqLQSxHc0^ zsWOS#$H`*)XJ;2W_aEIX(a+OnsrBXN&jOpe$X_mMf#DWkhwF|!%h01}P@C|f*VXD5 zJ-X1~vH!4Q)}d!XOxYK@-qr`2w3NKm_dR9xqPcR*lQUIgBi<_u?~lp1Jz> z(#^}E_dUzhr6Ej-?_610JdX31G`phs{L(mk-Fz$ zWfJdwOyVc(R+rR@`qXcGmtjy^s^^2vjGf=P*IZDO<>oj0xEyDr-i%I-4y5DWb9GRhlWyUUu{Gmzj)Yw$ur9AsRc1hHQn3BPQO!Qr5!X9(H1ev5~00QuGGWT zyvy{B0H1@W{H?L&yW7(F&e!jn`th`f{`@5&F&;fHo@=RWQpp+ALex8UtazQ)u-H1K z5I^jJImPPGV>;6C|`RV>}s zhDXPbPZ=S?Dn}m3u^)a$`21SuQHoV8;M<76vz%9C)~Thw&v_omdV>1z?MMi{le zD%Ufo)<20Kp(|@^ZDEi&&77KFKe>29KiaKiUxQ!w%6L`b@lZ~t-ZPQ2(JILphs!9( zFVE{TS04CDDPzN%w=C4R`cr30xoJvfDkfgo_RS}p2u)&?yDH9O z&(r?cO>WI&C?_j)I=*$&Uev0?($Pmv=0;b!*Y@lQIi}soF>oSgS~Kp{@VNZL=k!A9 zuUALEx^qVF%n+Eo(lIx7aoHNztgVkx&M<1)gPl51JM)8TJjvNJl_Cg*{q*bO6NW&v z?Sj491q}V!jLHuLuCzf-P0bV6(AqO&AvvhR_4JL4nug33Q*}=T4n`NW9=suOE z9#!iSg++~p2fDLd@0lfaCRP))hpL`yDjMAsnR-^m$9daZifxl&h;wm>Dc#5K$Js)y zaaW$d8>rlo=V6Ldn2xG>?j13xgNeUzD|qO|*pyth#vtR&RknaZ#p*RtEKYUi(m}hUGucaSCbt-*1BFIEPBaSrkevJJG=<+RmF~N`cXA z|9DIQ3Kc(Gc?uKdcLTfsH;!``B|~4&7|$4A{P$nX_O&%Fe2@23KDTq+y2MN!LCdmy zV`=B_ls9`9&L0huofs}3Ua*@C z{PCmdXn+6bpR3R5ZtXqL{&rE0E_im9due(1moG6tzICO|Es4zJd|AHK-}3A0v7ocN zGcHjby7X#W+tBWC?>%jM_r5h<`|pz@t9(%jK^;b*WwWR*{^F~{xao=y& zd~#3TJCRake|NcN{NU12ffIWNmxsOw`+X5+Qq@rW?p8)8;-FU1&`Ga$Y8kixo|yP{ zqv}&9WI8IjH#g2+-DOgAtK*89gIZ+sb^3%!$F)eAvC~&?Kb7I;4ID|k<~Hh;mjC1S zt=G2`mfFl_S(=M8b|jC7$i4CyP&7(;AC~j`r`zBUu9daf{+&4?qWey8)^EAKohx<^ zvjT1Q5vRaByaCXd_q-Iy$KpHDdA zV%J@H#Em+u{C-Jr{k1u}* z!tS34IOFf6_G%6%{UosRsIzO#m7(V^u1?Tyk9`?)?ai|K*kLn?)5#BO&Y#|MUu+25 zIvo(#bMe}nJze?LDf_?5?fxwsJhmD>E_V5_b9G>>*dG-*Y=mXtRnlSse9CZWbxgOM)TFJ2z2!hEs9{joi*r_ivBGe zwKwjGj}lpZA9tRoO{rL2`HATqW_kScheqF+lieoo>uvon%D=d}Ji5Xxs_Jy2 zv`BFF$aVetb9rnh^CM&OBF9SDe}wI+a^%Rl@n);075XYx#-lM%%%`?kNoPoCo=4*L z=Ro(c`x3SJxclW9Cq;GJ#87=*w(qoG^QT_jlCaJE=rzyLn2I;gt{#!;jp~_6V>IiC zD89q&{k1??{6^@rvFp2bwS+}BhIF;~>^Dr`$)^<-fP0h}IL`9A{@#d8rFu%+o-c2H zq)Eu|DO{9D(!bTc8@s&P5*K#*q(^xu_WG+$5>-9zKVFMrK1SV4&GxjrdCK6bt9w=! zziIzA|Gv=u(S5puEm=`KgSa@T8@ZhIw4Kp7DCEx7!UA?yRM(3-o*WM0$ zo@h}U=(K(kU4dcP)q|rKa%h*y#MxCFI@W6G#LpSf*lf5_*q!9ge{!qqNoP}88;(aG zuM|%;JB$dVC>0L9<6q8j*nEB3^|6xXphuU->*j0wqBkYfdx#G;Fu!=gU?raKqp`;7 z_G;Uep$q}fth+TLue;ue9(j$q5?^L{=$gazr5c{7<-&$-MsYti*hNi_)!r(f*Zp=l zV!OXn>0F)>JIkglis}y*7bs0DE|qkS2zFX^Ur|nZZ>UFiq$>WCaoS9vokp|6@QYLG zoC97N!}ll4<@d<5op>egyG?J~NB1>_+rimsM{~44rEQhGaP6Mzu9%;@ZBOe<7zz|T z;%;U-VqlRQN)fi|^d0wI#{9=J*OCt1GhVsL z>B*{Tfc_C-dp9(pV^30x2gW~}y|%P_A%E@pqU$+z-Knc*IBvXWZW@X0EvMLePyE0+n{B1(8MN)ZHD_uz$CNi1 za2&e4ILUc0y(q|VTgzugO08<1-4gfWtRI=TV>2~NXhg5w?>M3<<<@akZZKy1?WaCX zE}A=6qTUDlymVWt_2x{?D$hCH5tMKRdnc~^YWfWyl!Gpf$_F;y^y`#1XALQ8zBSU) zuq9nda9ugnq@#93N#esEL)4XvxEsR7VH6!>l(T;HoH}`PQmUV0EN#LgBW+Fh$Y(FS zGar-a)7LEseRD9-7boW7)U?rzKG@~_o5m$K_CpJ6dO1fs0#7^)NQn|D*d`TXS9#}g z;RDH=?5|m;ca14osXb=ADO0FbH2eAGT;Syr(dk=^#k6v=PH4piwL*r{&zq)fW?bmi zGp9r!3U#)7INiFqcJgZIu;+U%gP`pPi-fFp_8fdYUdcQ1$%bjZEu;Q(srKd3cXWcK z*d3DGql^b6`j=}HwKt%7OFp=j%Bb711SC0UC<$^LR$5ln8RrtO43^*8Nc~x!Rug^b zM!SBnSKolkQzt9zXL^n-${3HhjmF&68}c7);;P;CGRVs*cwqUI9v{lNH9F5#D8}o$ z10{on%9_}|)&{vb;a_~m2ES0<+O>V~NU5qao8vPzt7*NvoyV@u95`ZMQ@xp4!bhGc4D|*sT>S1a5|zY!P`8{F2>fr06SM@I$&_mstmKY(Cq8 z(h$KpxAB2z>XXz`DMem>c4-!eBkx%(SOy4-2Y&ewW)F69;96RDK_UYx&bo9W&pU zPIuX~r=4*9I;ohS*MX)Eoe%ZrG3%)!EYDPumPo;#+Ykw1Ht%2i2-dFNhQr)yYcmCTpl=SsLf zz*J};&oeKtOddHS=%TS3m99 zr~KM9HT#wD=1Kd?hkkyZ8DZ5wsIvK=#Ck6=GY8g=9W1rxvpm4E|JIO(J4?T`I%N>W zoR-IdPi1y{nLXcbyxnzQzu`$T{pW`oEE!&-#XmigzGhtMDAnEOhdQ89^nU80WT1U! zALs6m5zmeJ-agsRpl9_ifqtt>;0a&fHrB@n8EtHBjvwdCFyCQz(uB<{=;FR}B~8@l z(iK}U)%C6ph3Q4^E26Y%lPOGUlpo$#Y2_Dgqlz)_Se~{MIF)xKh-F)$eF~%KRIcd4 zlaJ%PV>7uO0Wr)28`T6mBUNZrg*XQty7)|88TUP2s(!90rPOUx&a&Y~gdClgJF2C! z)Ovn%F3qlUJ7a0ZOBV2gkg8L$G#_j;B)1y`i@evA_;^2D&KY%I=t5 zQNYY7j{W$L96zC3f;uWxZs#xCh<){%bn2>?8>HT!?Q+er)UH@tS&Jn&iXntWPnWrY zw~)^4w&A(s`(K!+cw%W;n6a+TUEGf|c-os};(HJNyrk`Gz=z%HF_>bui=8ve?7fnY z@F6;`qx<@4SIS*byI(NxK4SB*t>EsIk63jPgVOv{lOcufmvY@4WvBM*PgB%ookD#s z6>+V;E=6N<;!)KuMbUO9j>EY=ths65*G8YJbBmqlr#9lgM7^Kweb&>?`t+SEnCS@9 zzKcgPo3?H}wiU(Y*te}Te3j}}>hreCwT)jQj|gj1;h1wexK)NEpWqlJO|B|kd%gV$ zgS)}I4H?_S4P-7KPjZ~4kzuSerL2+&`D{AaP^_Hw$mT~wZy|5>dmGv#;&qRhC_WSw zaXd-!J9WwV=|<5LI-OZVrf)-j($-OCG&@da`|hPVBP2G%U1d~oxL1^Qgud^dZK-L^ z-8YekSiB+}b6R}bt_SJ!7Oj|u=`O}kj9%B*aY2i1?>o`3J+mjpdG;NjK!5p;w?d}xyjfF<%XDd44~KvGb-Gw; z!lZ^8P4VqhkgPvvroNy?eTh<@76bNOg!2={6gO#_-c!0BQCAD-w$!z~)#A>mFN&6$ zv@lrO{&1e<(T2p-Pn)kWFGP8G&>d>+mbzfv{x;J7LCSTS^J<5CH{CPQ>^Q^0&}!sV zsu01-O=FSz(58uQx5Ws@chy?!1C+|`a-*Gh%ZCr>OpDKBgfwj04`iX5&3jjr?5OEW ztB3AeRZDwKM?JIH>QciP661ep6l*K^Hm4*&GCAjUWG?E7`1v%)*Ci4sclK7NKS^hK z$ftk#lwrra3+1urjydGO~((FTbRpn!tpNs)zeg^mjp3cjGjicpRtW-a`FeUrBQf6XzOI~e(F~hIH=xUM`}4+JqbEWM-u|ZkTY}4t28>ZbB87`IS-r7x~RvL~S_{v~=cVF)n^)tI94~nq*eN0I0^&P)g(efa<@(LenU$ZuC ztoKFAPf@SMZ-<#GoBnv9T)^6{Gwd8HT554?!mojS`W}a`4&|Nw#x1)A!)eV+?As_0 z`k@DysyL2J28dqs8p9+jnSG_EcJlJZGG%yS|oKeMir3>^)NyrJk*$jaWbeoe%>{ z3(nK)eCk^p0eu-K*-a;yHHAU~mXQxe8TqSAmSG{nX5D(d4rl64i?EFFCttQb>3j}jonp_n7-V?TCnJh} z>2M$aa?h%T3!D2jG4(6m)5E-MYpuO?mAc&tDp^wIY%11U)NgWq&Z=-fsv{ko6n}B{ zj`*WP;S&#cZRYLnFVtUTh`=i7XYB|UKv9p$qD=BDbpr%l?g%~%ZBGvBN%hbTq5{(8KlKM z4_bRk78Z(T>=sI?zj^rr<;&Xg1j(Q%g)IR=+AjRq+|>*x69bDv&672cOs&RTOtnnx zxEUs`T{m7tUEl94p-}8rrdU_oHZOZS?Vfr+Dr_M0l-Y=Gi@>7907Hak>rIDZi}`+J3?{eB6rqi z(H#HtG7D9A#jbFb6l~`^d?)F4*N5)imo-J1MlWyBPH6tr{8^gqv_z0|T3r-1-`p#g zGK%B-j&aBaa|j)O+edp(=X+tt1!2S86>*W`CeJ2^jE;8bhEx6eb?U!VyTY6v;9fh-M$;uwnMi;1?hfhns$Q-8lV>dhvDlAn!Eq?dePjk$c~ zyWqXafuH8lOk-+@JoecYHri;5eG&uO77|%g52Y&hR1(6 z-sigK|Ft9{-h|0Secy5JbI(;z|6r<1(ld&P=yhdg3+XAeN$)$-K!5J=+g*jR#;iuX z-wMoh**vwbx$$%M?hnr5eXpZf^FH&5sP*=s7j@~WdBNy|Lksz;*EdB=bMF6B|L*s7`a!me31S)fsA^+^IYm{8_3s z(C2Mmem1mMqEk5JMYr>TI~TM6{8;d#oU8ZMGYVPj`Fc;Dqn z5=>M#%dXWAjJ*6Nm1V{^Br{UrxO7Nyph~Uz_9HFzcUm^a-PO+ec5VYR_v79K{i3#C z+qxv_pT2e%IU8{fS8%YEaU#Ep|A@Gzl3AShQ%QD{La|C=1)Jvu^1;-(QSI8(?0X;U z4wt#Qw`9H#mKHfYs{N^=<*HhWeTgX}_1gn(+K+{*9X`mZ?+LdyTkJk8o`~9>K}%tn z(@UpQq9w(<|3%5+?ps3lSrzUUJ}M5^p^EdY^Ke|8=~1C7wD9D_@O*VNnXnwG3&Bz? zyeBV46;i$CXPNk{DzS{=}XR7O5pT8arutaSTYR6Wey;+?{6EgUd6cb?B%tiRo_;nx|1j0{|;k_2y?XY!PeLc zz4@#Jt~Hvl;KDFzmiUdED^Y&IYEqJk`-3NZ9xv)Jp{WA1I5dWL22fl%Ni+I&t5b`J zy=R0THJ{VnVax_9t`Fu>6j91s9TwdwBc`6w_)F$Q`uTbueY`y>czN3!#$n~lnWMZ6 z7uz=#=bY1DJjXJyKa%x^8t&1)C4m?g|CoX#$a!&=b~8DO})7pQA|aY&9e)Ev&N#O9dvqS8VGkGddw>KlFMO+zjm^|h6( zw7hAQVdZq*+LCz(6^FnkJ|#W+NRN*{gWN1UEtM$tvr$BKk1EDH+`j1`xaHXrb4H!A z>ZUfj8Z+KBQA55P4C-DU)~v77ME3D;*}oCM@$j0?|GaOI`n|%mi^-7HxBA+Z8!GR` zJ%+d}pHEtR@hp;c-^RT0b&GlI%u4!j$&aT4j9A7cMkf!Qz2**d846DdZ-*YS?YGS{ z>QmhyKWz2brQL*irzKNbe4-Ms^+=w@BSXE1--1UsFqge}_1WTsEYC)d$D>U1n-(nV;%f)R!@S4Yi-85}l1xF!#sQzl7p||b^^<~Q{8|B?6$8A+MG=^A&JPb*r!k7nl z@G_a*?eKo3zLQf!p3}{vz{-HZ(P5i2E6SJ4y|;q;QT&w_mQMDmx4E+;<|l8kbRP~r z=xYDziCL=nO#`L34A)$TW)8j6vHaS$;2S)V5Gr7#KT|}LI+v;HfqiaN)|O3WW}D(O z2hCKTGL;a&TyQMY;No zc6h5$H~+-DrOiK1++_%47zlCZ&_3X}rzGWL^}7pgR|Woc`%j?vgkA-GzEqB-REu>!H0Ej?$zfv=1y5q!jx^Je2 zV=F3;rnTVdBv+I~>&Mmyn4UzDXQRply=Qz*mmoTp3k0aI^K(z z!pd&pa6i;Jn~famEQazGQ{}(ZR_$a4gWN-a(K(%ht?Xz-@Ps||{d z!uBD9SpoaYIOHY=uk~B^dX;iNIZ0#NBNi22t(j1C#MNi>jL0qT%j1Jabla{4Xy^od zsrcb)G0fYX-a6HB^J-y(zhg`2*RNV%P>k)b?oe56_-MBB-U#RAG8Zdv&=mhek+DhF z&ZI(Tv+t%W+N;4#LH4^ar@lsq3GP+D|5J6THf5Qgai2?4o_l;PQ*lGpTa#5QpGcht zl-D2FMNBcN(uC<6(>G(B7@DfDmrbx%3Kk2>){W7&&Qk1ief917vW@ny{zf-*0&9OJ%qjjzMRp+Y=Q60hij}mlPm_s zwz@WjeQ=kY*Lr<0SgCHRN%_F*cE*pp-U(|2eVA)gsc-M)Ot?hp6yi=f@a+0S>5`}7 zC0)0}nyV}&=WOF&9nHFSP1}$0Vcw`21Sj8!C;J3>Wa{=Gme< zlu_lFvMFN&b%E1oEA1Qhnc~`+-|jvbsyN}g(%{nFPbvOYVw~1UkTPbn{4L|A&fa6M zzBm}W$a*o}_Km|Dn->p(a@oszxU~6 z`>)LDqgy6rn@apeYP74*n-)K`nLB9mL9j;EOJPq#%Y&oWS~tcr1*haEgq-nIM2l=$ zU`?K>o;Hsa?%#b|HBQ@X-*!8yC)-pXL_YZ{Ons)lbVbz2Fsb@r#ub-`mh&8HspC}C z)oU`3+>XanZ)aq%F7Oj`n%mv6f9`vKlO~0r3r)~?m?w^+YV2O4$EzpBJSn9gzP`NV z^vz!1c(aJONY=X>L7H6KLO#T+(TksxZ8l61^*A&`Cwb%HIU}q4vCT&JM?=)5;;E%; zZ}g`u`gGZBIDQ93>mhE)7?~PZojG5~VyM3?7I;PDF}HX|Kh?Q-dx`<>tTG#arXp?k z16O)HwG*y%UXEqh;+$3`v9%=e2A_n0-xj^(v)AM&(iyehHSdtG5nRJi1ht4%G3`E8 zlK6XmyFq7BLdD1}BCe+KLj6f3YVf8g4?$2;`lYN*|Jm1E*D90#v5cW0K2 z#IpNciZo$5RJy0+YE=I7Z>Nmvo$JL-+J+i8(ol~BxHCI^fq}{PvJ<;f2%3Si~e6)EeL)dvWiu>{2e7Bf|k$%z5&nmQLjXnrBj8geLYhsPM@5y z_W0m~UW!964nN)BUzUDRaVcsm?|Yu$lMlRf`^TMH*A68ttsJNPPH1nTw9=TZXwTkmux>?~u2n^=XTbYhn-i4wiQ72ctYvr~RciZqgSMYH;<-|0yt|Z}d8uK9FZs z^2pxg;2MnFik{^$Gm#pbB`W8iKa!sbZVAca@LXX$FZ0|x+x(48Q2NKE497jzl7lx! zQun<>-I>eX9F%BOZhw|-KhYpndihK~Nx~1f5V)J>qmRv`X?PDux9_AlRqwjS(Y45F(NIAuy zO#5cxfLLw$L$tMaJ%ux-f!+ClRmN}EosvwUliyhP3!Qo0c7V3s7?r4b*JJZ=v5jwC z^~p+pvBzgT-45m_PIL?eR~+LHdRQW*_X$I%OPjStZ=8DBJLYLqmGMTL&f$=Wo}ti# zrY)F69ixfzm;E$msF8ywOdUoPJU8*s3Ounq1_H4pzG>*&$NH zw`FL|lD4xf{{el70XsdH{*CQJHBO(7QZ+<-G#)r>n6#MEGnvsm;anfPHu9nA&PmQ< z3@T*1PKrypta5hv+82*reat(HhTjJ^4vlhcAA?+ciJS zkxuU!YmQvj?^VWgY(LcUc7BZGUf#I#jeuNf-=O*6w_|K&u@Sr1p7JLfEf(H4rD{%0 zt_fLVI@l$wlWWzM$G1D5CCKUbX}9NEQavvVbPD_x?sydK^;{Yd{P}tD*^{*!-}1LV z7w5Qkh?PPAsT3z(j`EpN8@1RqY)Uh^EJ&}RzQN><@^>K}nmN-4S7j>e6CPA4?A2yC z$3L_wand&bglKM@oc_ayD*8(mD+BV|_n~qJF7dw-P3oF`qRB^bjX60;{dQNsZ@r^R zy70GUua3rRie@D;N%{8e*LYLz`(bd?g1*8BFP@ijRJ$Jdx}cF3_2r}2ZoZ>F&-UEA zRkA{PVMvPMlhl=qVRfYs#q;gX)QerY`?ZzvU|fdIL*Hi07L(cM#RK;@jR#U|Yf=W! zbL7AC^_wn{ITSZLGW~M=U5$-)Tv^pw-ZpN!!f#1F)-&(=+*O2hxH<&%w$6u(xG}#j z`l5cxWioiL<-E;Pt0nD-bgZYorSi$K+)f&1i?VymS^VaQn0eWM$>@6~G2P{iJHz&@ z0qZLCJ}B`VeLq8???cOty$`n6(#?D|xWD$>SEu^=Z<=GqJX;+vc3(iDSR^qHF3~QQ z7Mi}{VY1$S;XXiNi3kARh0@v?50nl8c;|qGU~S<~Ew_aQF@D;@&MKDjmJ#~?K^T+7 zD1ZAzD+k}i5MK>H;hj6sTJf6r2EzQKy@6^uSe$0OwlLVPCjRfh*K)#w;3d%^+QKfD zHUP1?zo4?LvaGy}VLT>QQFsShP%FwWK-12^2yO!ZNn1E5IyypAP7Z)}$0-4zZaD=F z4GlSYML9)98T=J8xCCspcf1T1CjvA9wP65ek3tCoz-KToQCnCT|GOaEIQ~~(!}w@o z2f$~rd0e!goGJc;GJdf53*;2#fqE>8GKv~<$ouiXT3QnC#^T^v#LuT(ymy40f~>q; zSQyzIxM;)J=zqTh=a3NLFJ}i=JT(OPA4HH%0L+-k7GiMzz*pe7L;V8e@Ph)|LEd9* zYH33@je(f32=ETzYUGuEzQpSyVxmI9Yy5oW2-%qUmKDgZ2QYkpe;(kMKL!$w3HXQ0 zfnWZ(96!2$pDgfV@HJ=}g!_WkRZI=Eg@MP@^b7aJ_-R6aRZ~<{R9DxKQS=E=kx^Fj z^O5mUR#cNw3h?$*)KK%45AabzG-Zl~YCHf<;lGi^;M-BwP*m4YR#uk@P{H4*tmdO8 z3KIyB@gYYAH06hHO2u14DL}zrLB?BIML|Yc#aC6v z$2Y)7M$JdTM?*nbBfwux5o`*0ZJN3^rrN@avht*FY+zCcZDFt)5$Oj9OqjoYv^Owm z3MxvfN^0_I3Tg@(${Ok_q>JDrEuc*Wd0AEP2R~m;BQT*?TNo4O9q2C?fei$I0A8Y| z4JO_{)Wv|nE~zc7Brm`2S69TZ3hGd!z#G*x1)4MQ2htP&_KP#dFFJ_SAov4*>VUlU zXs9v5oNDR=NhaY@4&mXU+QPt-08Eqe;C>g>f_JhekiHAts1I@cgFiyzK+ii+4!TzE z-!A^6CHtW8IPCvjJETjAt>{KY19?f-QPw`e{=U)w-p=1HCbndU7sR;es07ph!$YmR zP77L&CK#XqQUc;ud;du26ZA0@1APz#C6p$VZLcj15|s#({RF2UX$#Ade~7q?74e7=i=qbd-o=pZ$ zpiqJ+AR#+`crGQu#UZfxS5nBObLbo&shpIe6m~yHLEG24yiGh$UAI3qy;&4{Q$lIF zFFH`XXL34v`OBl|C$Ud3AEoaf5AqmidoF2UV{5C+Me(w-wzPWxxo;nT{d(|egpQ+N zAEoYW3O_$}jr+A*Ybl@N`o8xiY#iOsy(?b9T<3M2Kx=JnPH1Q-^}%~LzmBp{hpKMw z=4-2_N={no5(PW?d&_fz5Brf6Tg4}s})`* zCZ?d^;G6F)BIT-Rx5v&2c6N3aoIb5R7NUOIDs;G+;nJD+^s_v>caYokgoP@mgA%oO@7_;ampa&=4Yi1xT9q`I6dJ_G zt6%r1Kh`kM^<{ZkL`y6A$#Wso#j6tP_;W@#GIxfHZ$p5PMg43*aWX9aR!F_`CFFwZRR}7<#PC}2Hq?>Rjfd?g5ry)W?VGaWrOWqyS!3pGXEP)=EykeqjKKq>CTW)jl;&yXn3$O8#7;jMY5x4ov@{BQqejVJ9vl1Z-Mh2GPD*`CURPeeX`w-2 zpae6YX2z9}=jSe5*sy_?>V5y&u2#p>*i+_;g1%u_q}?wD`+bgKo+JQAaD zVP+kV)0>%%{ykiaFB*Nbva{QL^R*9r`4YWqFfbJ*q@l4XwuO&3_r7n&)a>lR z>T1agE{&9L-n?1q+5Ic(d2f45PJ`7cbzLV%$FVdzex2xON%Dl z@%w_)Ha$JPJAR7V0p2e|Rpn1u965UQjq=Otv*zaJkv~^slGi?7+x6sT=Kn*(S%y{B zeO+Ja?h@$+38lMRN<>7uqymH!&@G{V*H9loV}ze0PzA4N#-#coR|>XTwVCY{wYJkE5WCU?rt*ojiajvT%%7UUe}^Vb)jTvMdan>O|ixC zQ{izNeZdnF68cr+l9f`mZF&B0AdrojiHV4wUdH+ON!KfK2CVkny89Lu7O(qOm;)$j zXrh&(C>C<#q}!cps%(TT{LlA#@`mgbpFZ8=x%$x5L>n0y3Afa5BY=U48K0OaP@1TM z5dw4TeJvy;#2W^&*H^CluW9>2M?~-3#kLp7DO*B9!u03x-#;>NrL*F;x1Hl=2;+Kk zmufoZ?lQ&CuNP!>BlGsYsmXurN86+HvE79T`UJ}gs=~s;8Wv`Zkn7ck{!=D#3|Oa| z`iW7e&bO(|Z&T^$>;E2G{ys3E;^QM8ODhrXHRqqg&BZ0JrWPr3WRbks8icwGm2ECa zUEy=Ift}y~Qjv*;jV-63AmT>{^%H^w7PY__+mJWv`Q=kvA~U3NMBd;@d!rA{7NGvD z<>am}uzs>{{oSA5+uAA%uGF^T7Ne%f6p!U3oPH@$Jc<*ejM`*MSTKwYtptCrGmeE; z=ODu|DA7Ny)-5EH&nA+jBh1du*5OJ*uDDQd&`yvDCv2%Sff5T1De5Xip8AG{y&n=g zuQ$g^6x`fCr_|bD7ZnwK-Dy4}fVbToFT;%JxIq~Y`V`S|JxLuscL*z`4@55vx^QHC zd}+Qdr+Wv@X?u#jLgF*93K8$!AI`S~%#t1^(`tP8u3oE;t= zG4k>{>yfOu)frSfkRzjausV=fS65f*u-#uDwr_TIWM-|UMX^oMFCH;5vFT!3w&=6pcp&JJFJ4?DqoAnw-_RgJBcPLf zIXP+A+0`Y-6wkoIf(9dc{rdISsw_YhB9Bg4)Y@0vu++-X=Wsw~tNVfbG3$2)Uz<>j{}PuFroQ_3aL@^#e$ zpdmSUc$9Q>2C)vt&2PUiD8R%CLpeG+GN^N74Gsxmgn3RSJ+n2OI<<4xA zH+-H2|J%W-sVH<@3U5Cx-Lbc(Wf8`_5i`yzV60>~=)VWD2Tp~Jxo~`}} z>R6cH>!D|F3|+b2czL?Hyx0{*OhO``A`GRYr>AFbZhmcVZ|`e=zY{)1P2_URMDl`PPicQ55g?OYvz1Ho(I_0(l zbZ~`CLPF$na&ooq>m(Q$7&hGY{a@3I%F5W0s)rV%H!PumVOIos$HBn?^jonC|Yu0czGj&$pyoDtSUgXhCr@msB@y z+`z)cJ>ZC+bP{&=^pwxn%?3N;CXOkOTcgAI>>VDV@E z-L>s)WnEno7#JdA;)Nj{6u8}H|FhjrQtfC%{0grfQ$Zmi#2K){6Is+!{;1~b!fV%C z(p8k^z={g z7JT=yxJ@PMy~{x7`==uPH--|4G4Jt*^TLI>68&3XX+W&Ov9ScH{WjtkHZWsbTU$_d z$Yq18gvv7-^Nxp#Jc9;UXh(l1?tugL!2cExbW~e%4-MMT=zVEv?D=R}Kv-3kAh&5F zRajV<`=1TZ#3-LZ&@h;NR8&-CZp_T+Pft(b;=!Vb0POyEG zJm;_a*tMT)Se`V^dJlj|=oF8FL%dMW4>m0;m?0#HP%w&>q>G~y`S!EQfcwz<^Muo> zkOo`gC3W%pcW&7(D_`!fvqG1HAA2@rIDeH*fRSedL{nrUKEJqVTW~e6oLKYCopw*} z$4FpV02GFNhlYWHxXK6KIT7ilLIQ7kad#}RbNXt^-`?96f@*0Cb0)l$r)Ou3DSa@d z06F*#GX!*Tn30OX;Da#up(03(jORITf zZ(;zhL^S&SM-D!oqq_${Z0lsuwf0 z+a-2B2d(E&?W0Jj3iAfu2o2r_TCn>qwC48h2-B~R&Mvehk!m?=h7c*9AiyBO@aNn_&WPhr+LEvhnqm;5BQG21NX1(m(;I*(s%MFkWWH zE&_f4Rz~>z`SY6Tc$e?eGG5y>Ki-LXJ6S~KbSb7=b@imw@o z8McpWWLAST>=A=&s3(`@Xe6&L0qt~Flfd(qTi+?O~`Q#ZOrKToe}$^)vUl+ zct6B6n6@9a7nPK-64HpiNHO(U|3Y#bv6zn^-_JBa*5Nj(C&R;7ip>|Ac1ZXG7yw-j zbT^yiO9<)po#;~(09aLR?X0KADvzwDzC1y_rpiKs6tiW8w+3SnwC2dj$o$;p*4#Fg z%XEcEa^K4GmnTz*l*+P@#E8oRJwfM*`kxBc8uLlbdt_Cl)8Cr$0j$+{G;fsgX_wM}bVz+0(O>9YH5A zE8Cj4$SG3)24~m%1Jrk3dA3wDC z!Q5+YvHAuE2tig_2`5?*7gc3JuCc2-e6?GHZ8LShqqw+u=+`eS;q;ibHM`d=k)@@) zcGZS2yDX8;V@qU&f`ZEcaRD)hb^vL%b9PqN)+U4~=;tS?!A1%IuU}>w1NaLzb8&WT zwKZ97`nkSGF5|_QFJFMaQPJe)p+Av1geynJb7BG;J}@9WtC`2|HpmiqWw(17#78TStk*75yj z>ODY<=bM&DGGziYr>h+)`T6+=fBky-<_($khBZf^Y6{5L?A;RW-|!!AIqlOO=l{;s!HXbzYw&Tu{Z=#o) zG=yJX2Bf{)ZrG7lR8ktEev-(j0NNGR6`Y;T2zVtZEG*BPqQF4Jz{-jaK@KG3<;#~Z zT3Te@X|0BS{cb0ilbwA%DJcmIA;;s(tj{Ko(_C{#Ej!jGWy=Zr+tk#T=jVO^%P)GC zG&x+ID<=^C1R$)cuFn4Qg#y@7RZZ=>91%FB0;HW2zsomtz5-Nu@Y%+-uGb-38&ulh z!|=DQ9yBG7Nnvq`Rn^y1^YHK()Vp(%kdhW~YseCz`Jd#CI%Mk>u1S_aiNm~qPZuGC zi+$Z|4e$KSG53SCHfWNekr8C5=JWl#pB`0W@HOtDJbg$y_R!2A_iw_d9 zgiTA(x*~jrR+corjEoGxAozwQOem>%qvdTXWC8U3sKY&7-Qe@{bNi)ud)80I56cqf z0?v5A2TcS1tvoFh)xwyDMklRG<&i(DUR}aK8w4lUtVYK|D>EFJ63weab ztBypDNHp+Ll7;}2*R=8FxT){fHp?f-KJ}`hs_Pc?s7{V8A_=dQeqS5ik7+$Tsb%hZL3i!#*cr=3BRL z8@zUuRa7u%6fr63lF3me74RLz1O)>FD*aO9=MPzM?q5IO-*)OMi5Jp25M<5!i(j+cB=z7K-tW4P}0s9QJvI z0XJayuPx7dO)7HId_574e!+raHOk1dfB)pTDTW_g*4(-*ury|6Wpx$La5wl}QZp+L z;e&~ZiHMRC6OaP5WFGSdJw=odkN(&jfgEFAcA3i)E6M$@%+~^Ra87nR2#Lwa6z?`6 z>f@o2s791ehn3W%_26vt$VdF2GXN(D9E>kq6>wa#wngOxd{nt%2_zEu!{HIg+)M$u zV*A`&R`Q*NgMZBYvprFcsZ?<0Y^lSP0e$Nz})abPUu& zt->H0$OGAfn5ic}_}$+TjE>9p?z`~h_Q>dH802BOvT}v&aA-+HZPEJljio;3i3xjt9v4V?7mYbhGed=6rhejrVroX@6pu!S8I3%Pg zPYAW7=eNM0U`&y$ve9}<=6<)(ob z9{WJH=y5$Awpsq+V0S>Swz|tBoZ)6n3$NT=N~G01%>#mtR2tf zl2L~+V_p@AELxe8*ayBGm(jpxGCye%)!h4GgU>!=*=U*tC*M=(Wi@O zzX!77Qd3hollG4m$DV1G=r8TB^g)U-sC8w`$;s)y@PU~G?4gnH#JhGI=m^XwwxQ%A zDma4Z^|2CGY3gXp|gf%-aJMEk}g5-EtLR z7-KEmZq1LZyxyk5gE)m)Qm5sfrv5`)TlVI&Z3(Ae<=0hWY1$H4?;>|-sZXpA|MTx? z+${I~`)ew3bX|b_qNU^aG?~Q3#UX*{7#hAB92~Td7tSooD6XlY1hGXD>?`tH-80!? z4i;tLtNQxFA3l{(Ci*IaV9W(xNr8V*@EX5dUbe0YUWYk0^FJbomIN_Y%W|K?N0xE9 zl0={Hvz+)zCv!gv?(FO&&borj*5M%g+S@Cqq=atje>6IwWYFNb#nfeaM=L`->~UZ6 z41ad4+rLuNrdLsvd_Qk2kVIPR5m!t!GEm>VIRpwKGvF6nnEjY1BeW+DWY<6ue)xyGpSBWdLTEg1qrUHlv zh*L7JiF)58bfDjUFFR5wkh%CD`{Nfxmm|ET%asJ_ln87v_q1iCqx9p)7m7@BkPc8# zP_{QRjI(v#7Zu@vV;EG~4b^UNa=LqXWW&D*r{f>b1> z&`$L5@PM)PzWleUa?uK@uLpXUks_+XdvDR#VF(-@0+XE}_4!GUjOX3645lVhb}e&P zSE7Ia{>`>Kh`3&ydc2c-P9mR86c!eys;Zj$y4vu;gD`MUWPOdFe?N0Z5a9M7qr4%z&ZRgR=^T@@U4yoyTMx@!7vv#y%~eLJWb4c? z_a<`Ox}{)hnrW1n$)aY6ess7#3}yAgfLqzvc)F@uAbnl`+T$)SPfz*c(Z%zB2gqKb zg98^x>CEXUK< zJJ+*mo64aJib6gZso7amC~;(`7R;z-%S&tw1Br}fEtk}A2QTB|jt#3jGBp8xH#Rr- z7Nhv!t}P*fzI^qn{a`>wrV@Lz$ycOeRckf8x#gOb+)z- zzt(jD1=$J7rN6M#EeIN6(&ZpS$f(q;h2R>p{6KgI>>L`=U7QwPpY(6dOuradRbU|r z8dx1R$&N^*J#wMgjNsSXII~0cy!X5htHU2&#wp=}0z%PJM1}F*xmP?2s)+9OUu;Cb{p^!%tSP-@Yj7RcK6$Gf)NIBD_UXf5N}qYh7(zY;^9 zvmDA%N;I|3eWaRuq48L9%1O9B9e4EJ%Twvb(w{4CLr=4Ytb;!ue<)RYBs1dC&E-^p zGr;LaqxDXbju0j2#rCPBA8*W<)Ff%1+t#Fz)6^GyXaH3$t;~D+F{2JjUS1+IJ+0=q zU$Cgvn>6WhA?^=CTJ?^L6fGz`90Q6=^73TqB<|{jQ1X1Y!+W<4GxCO-L4j5VQ;pL^ zu*jTW;#lM9?{pW)9d`mR&wXd-=n0`|d5vqY6_38Eb{wA_nRQ~TN3C&V?pbn+eQZC& zS@TBM`s2rsvY^Povg_g_Z*R{6?rUmlBB}+!mzbO!9l#Fe0wYAug$(`(P_3$=fviV> zKNhSA=skRh1V*q~#8zQog$1xTM<1H8LI{lv4Mh{BAwcdGs^DOC;P~{+Ij64f2KaV6 z7{cp}45{2jHLqvf7$@1X-pAWBs+yWg`ubzh^)T zC2C8zy%T#j{f#Q~dk71bW#}gVxfG{Z>;iA6lfk)G0f^GO7roZ)q}q~qmP$${V!@Y@ z#UUC3+s>dNjW&3z>(W_qVYrk(D_SAa0=H#DAP)!#Ai_c$v=d}dBLNIkRaZxWI6b`H zS$Mwys0=Hl=^vWC>u)O51K7bsSV<+wRkVhweir_1@pdFEAKULGgo zEv~&XFcQ#S{bF*QFckP{@YP(;&U{NYFbBYREJDHv2;|<9bntt@!NE3)dxs^1b8~UX z619K;DRlSYh0nsa`RID>hMCxz1}|n77PLo?9)TaOZEVO}SuwMa zV8hh6nctpYT0$DGasn@^3nj5P6vh>i56J8Qipv0VM1w$etLJNYD$tx)6K=}T{TeZA-ck!WLzg|KESX*10 zU!MO1U~yh0d2Z57Pk`ejd^0UAP3O@gfU~18_(xpB3pqVf$-4M`@@lKtzK)( z^`H4xnH(UpkeM3dq4Rc+j}eZku@R`|aJkMi2aw#5{k4Py67hu-pzVz0fpU*ceGmqyQ!g8$G0;41 z>KJ9o!$Ac)u}EZ!*Vo%7Ds6{mW@3&u$C()!Eexsi(=^zCii(daUT!zU^k=dfIsEc2 znXN@UgP`T|sBEu`(u_e!D5-WS^ns3!tn+m35VQ09Hgnm>k6FP(V!NU!k)oEQb1`J6 zAfH;>-u{s9{OZ-K*J)`Ro@}S?GsWup?J(KkEotfL7S)E3#}#^b0ar?723FkGCE34S zG|_&f`Luv}vm;RD!p|ypbl35IMc2(1!hxCk_&0@{_yd@gQ(MgL#~E7eZ`4_7`&h70 z_}}7zZ6asDaKgaFsD@Ong#2^W~`{fQ{weVwV6@@0%ixxoSsB z#Ghb_22N}~j)Z!OXCV7{Dk_)|Q=tJCc6Q=kytpQAW?P#CiP-M5#ce8g0Ua(aq+erLl$v6{eJp7HIEOz@ORtsizkLq^7NZhI15(D@w{Jy#4ml76R*R5>C~(uIF{ras5dg|+d%AA;@AFt1v0#x|Z!6t* z0`|&~$lXICd+`>xXBsR7srS<7&M}zc?Ud_GNg~k(WUeG(J}&>(v|PVN_k212#;u>i zjV6yEXf7@;Dtlxr_Yt&=Ry&_RXEWsTN>rw*4x%I{m&+YuU}o-M&WeM9HK`{96Mp-b zszi^g3zFnl$bs02V|j17si~<|W0VCrKl7*eBWIng`ELk2Pm5ZyJ}%__(Q?woht!$V zY~ziRl9EcdJ33=OT`30^T%%8g&Rv|{FB($~0j;snQ1I~ZybsM;85pk7($Wsk=8H2j zUI*bwH8ytP=WBLfC&9tRWk2@;EzgkfVuBJR1o(}nSTCRukLZxo(jo}BJjhytq=YPj z^;GFJ?po%6-a|{Zj}|{%SY2Jc)7QW5E}uIT{W>6x04q!$USC)CvHAAZi1i_}@~F$i zceOzOg5X$yI#oLN5MX1s6_+*RB(UtQ7i4Mm*+)?x6R0LAy1NVVsQfAX?!MtJ#>)D5 za`jW+O0W)xqLNbAp^*VF{IX)d9{du>mIWvzaBh0_HhN-jCvxa(dfFIC5`g)$Nx#E- zUZh7?vUQT7(-_Hs1?gRZgDfX6&w8vu z7fsH5p*;+|xO?0z5I?HRO`Es$X2?m0NVZWvkN4BFJNS5bh|p_m$ElRsRvTvP7x&EE zdd4+9eU%l!&v@%`dqJqbzrVBX6v_+e*+^3MT?nn(&#(V>PuuBB=0TMsIyqU2+Z)ch zJj^uIYb892MciX+D{RI&qHhI7j>w$J=_f;>gH| zn%T~LTL>i8`dn6%yD7X~*$NSChm+XE$P!F%Bwa~CilLjg&rRt zpM#GNX?hw0Or91=$>Uez52jlJWsG?#!BW95UMD4m{rY84=Ck^QAzpQNB3K#3f;)PFfZm0Nb<#C`ptn1zWB3ej9PGZ*z0>C_&d?oI#r)Z~{?4VIBro zPB=l(|8id~UR(Mfa_rCMoqD&1yphpOP>|i-4nhT{ z_-W5iAFo^-9Xs}xdg8OP;$FWdsu`zRd8T7EgF1v~O)28%=EiPIjsRY0=Z4d=npS!#`+k-dx;Zs}$qzokytY4fz z^|{WNH&uh}t2IBuK_JNh;b;*Z*`#+PC|QsH{zW!sAQpG#-%WwWZd*N&`|n_Pl_5{2 z-@Y0+)p@B$zElu^D~+@tRc~)E2QP1UT-?CN`coD)c__DE6;|L72%VTX2+a<@g4+h} zL3Rz0-8DgKgA#ohUR4$nh?VBEjn6r_x!oIX5{I<4!ssCeVB>(j*)KB3!k!>9Ix>P5 zCLh#8AL#e9A_v*_4k475efSVy8Z%U$aps#E15qt4Www^~cN+o7Cocf~U?M>wk-7F> zjAWnR+1c@&YlXQ(%g)XgP`2@6LiRB(FOOS7+RR_{t+X$=$}+{j=vY9`A%^R5(RxLa zBvt(a4h{;sjvUDVc!pL4rczK)_}bU^-@%OCf9H?14@Z96R!*#)_Vwyx>m(N%^Y$Rq z|N8X{u)F%}=+zc_dU_1t3w3pM&OJ@y5)u`GSIAO*Wb^pVsO3U+?4tFqaQvG(1_o;s zoMR&+3_Lvez-^sxh!9zS4q>ro6bCyPIS*8B(Sb2Jn)Ws1^Mn&(R??6GU>t!?@;-cE z5)$%2>xdf_TG3b8>G1jh*NtR~;$qxu$oeYa^!UrzSWidfOwu{rch6nECcz~=y6zAN zvghmCfjRjGaEFRa#9)9g2L}h$9?9$7`v<5sI5VTE?H;2X0<|T1b$(FEOCIbnT{OOl z?6Us->$!G>tnfks@BZ^cLq}&65uvQ8s8}+cuJPf6ip%`bpi)z!a! zGW3&@lJedxscBu>TMOf$h}zrlZfZLJl)i4hV6>1iH5jaG!PE(wdAhUQ#3AfS2b-+ka-w>lbh zbac|R7dDkQ0#Apt%AvksGD0IFtcG%wb`K76t0DQ;>pXm@!v0H1Nr{n-4FhNtib2`h znx(y?gP4fuT9av9ceirYmoGpVgA&6r>?zl;Uq^O{)boS23KT$g`T6;~X=?#y5g@Oy z!u(uWX&cjJUTwIy-LTW{Tr1b0O#P~@cPXgca^A1$a2!>y9#;_ABGI9 z4kzCP5HK*HLP0@cAc+KUUQ^)VO~ExYGlTgJ>aqmZlVu=6R?o!5#Fls`nAJ%5Km>12 zeR<+LoEthiI4Emaq7PbEgP8|j3#|;PmXvz1<$Q$?*?=`Mt2S>#x&2lH>eRT|?`?9e znwAzaI46G6Fg+K|@EaEw7w#!m@v5QV!JR!l%(rh7aV6nsYHEVvK!#-I=F8TBuF>Hj z!@(mU$ocYRtR!rCX(gMa)NAo|7jh-k^quhlhiC zqtnyT=jZ1)wzMQ@2>c+*AP1|UX=n>_e~NHq%W-vu>$bkvnmP25f|0WGFOmq#Rf$^! zMj^sNJLD9vuAAe%c*$fgorQ=N+zwSt_tP>D_$x^6pShN~%20B8`YUBs)vuvdMIS?} zf#qt=fs zg#iKp|L-9N0t`&d>`@0Kc7xG_>yZI|myPFs`9k5@;2%oD9M_|usE7uE3R(TyniPU4 z>t;+rs+Ium3a^*1UZs6T9{|G>PG4}VQ^s1UOCS1fQ@Ix*a~?FSiI0Iw7kK`(#$+Lq z=&_+8H37Y}M&O6pS<}3{JXx-!dfGqD8EJ(D+jTiPD3}B^?@d^N!lbhZVXjhBsi4o} zPH^z>@>cxdG8u`m%qu65lZ$mA5WbZQFaQfd^u96(+PIg`+6gjoaedoTAOzBY;>ys% zjOYkry_+2EIQ@v5;#*%IsGSsVJGIx}4)_ZcXh0$;NGFFR!jH<;F?N+uIlRa4i>(#6Da7Ay+WW$i?+4 zb``iyT>C>=8KGeb1u-$Psd3OZJO9(-v&K7E-&PNh(+11S)&QB=pFfk_ zyLT^D#D(rhmP}l9G@j3%?vpMU?A?_VGs}PbD@#5c$cacmLn!pTXM-Fc^|NV-Kv>ml937guFUA+;Q=l0?q;s6jB(<3S;ftiz!IO3AkUt$ z?=5+Fe5_D59%nxxA}pL!Q$q>C0nsjKZ0C);_BB&OHFr1LFL2VODMR)i1 zf`->=YUF>+xbec5o1+hEHv`smv}Yz>K2c zk%x-iI-cVS3o3ftF!O%TTM`l=@iqP0FpTol{}FOrifIFi&)ee~|*WUc6lI&PeDsL1AI7Unb!H&>HzYlDxb>w$5b|SlTQrh-hgwi~VRMyN(`c876M^VCb5-Qi*h^5+#w2z7 z;tkLD#vc;dwSWF&UW&wASzWb)NR4bxBqSydjg5sjH%m_%CaC8_&5J%=?5q_k|2aIo z?x^wK$(D=bxt+g}8ChBM$a72rwm+gzxj(+kT-ZbRx^KXS3rMuKW_McGV9fh*bi)Xv zF^)zocs0}aN69-jf`|}69t!Xq@eF7AWBba9+oGaaxkE3@%gfa`OynI7>K{yN7Yt{Y zm%GYa%O$WZE-eks%t$TxR!?oY->m4BXCP`_anmgR6E(b^H=e-m6Oh1yT{#i`?j21{ zmKrDv7#y3n!Rn6;1s|W&JZY?`t{l|XrRp_~7HK{{!tpXQ6?OGjQ@ttB1OPJK({<0- z-#qxfv{&x;&+X%=0}CrFazIS0AThQ;N62-FQHP$MKCVz1107vc)Wz1@w`_=eYC%zW zh-I#~o?Or7#GpdeAybEylT^;z`y}syB`raOiWXxb)A^9)>-*^H>Cp^WaUWv2jcW(D zY~}Mq-90@M5}7{z{rgu9cRrCN60TcMUw`(mh0arKbqO^NGA7VlPEJnJv{cIq@AmqG zRzi0AyUE;gDk_+rmUqZ-(5dh+W~Ryt3+<<$a%%^v&!qmr;HQ?uL_-^t**rQWrWki8 zPS!1?xkthOK;>cypLBXdx{&LdcF-jEhmdltVC1SzJn9;NbVT1MHio;u%_>%vu84_axtH zgvZ9lMw05^zn`cQXHb~CGSy~&yA|TRa_&?4%UwMNC`0*dB2c=frlu-%=mODF?6H}d zt#}QaV20a)mwtX%7stR}&ROavwXWBp8b`vqt@**O%qtAmNVCGj!|k_9L0GPp=-=I<6##Z(jZzbf5_GSIF_D8#iv$Ov7}y)_ZIsj|iU1E_uG)(z_f|q4x*6 zNyWzeu9kot&uVXPm*kfQSJ)gc%NqNqk-$Rdw<`yN*X~fQb@B`%+9%T{YQW<}t#1GM zAk6Z|eaS|q%gG=5#?1mXF)%Q+xGtYD1J1?5N3ZrxI}jc3%n?R)1?T0l#5G@86H`$k zn(bjDloe#KsbULxuoC^xF&z`DZ3qHxrMJjv@zSXkU1U(s;v9_ee6?-llpP6VnAD z3t|Eh35k5)0v_M6#ce8(KxD_Y`E=t}UO@pf8=K8fTy9oYbd@-|d|z~pW$KWS5M)*H z^W(k`{#wsOX_i-3va74fLDSGf+NeY#)B9~iGqjL362O8?6+B$w^cX18dE`-(YQ5ED zf%3Alfu#y&uAX%u>yuvX0RAE)%bKY>AjC=PVLyNBerM4MYP=z-bqiT1hiD9+6`GYb_hct&(qr!VDy^$1 z4G~%pLg>hDhOkpAKPOq8aqNKfS#)Wy02Lm`ty>LG_?aI+mELVd)hQnJhPsy{LIa+# zTg;_+2+{aeR8)oC5R-U%;OCbwUk+~h4E+DI0Ij#m8iSF25#V{}j9J~RXFuMFAtzF3 z)5igOPLKyHW*WSffHdt~TvS|LZ~OWADd#=X;beQWtN}7SR${dJrFLZtOOk=%8Ze%< zySv~W-gaHCq-Eskw?BWJ;`mNRM)Z)=w%{$f6sX{8hVNWH6l#H>Lzg4_3~dQqQ#UrR zkBp2kaC3iOI`V$go(JjL&Tfq-j66aloQe?a0l5Q&hvBm35B?#iovit9Q1BYB-I?*& z5C^8s^4rILr^Rl-P2nVb6E1W2D|1}*l+uE$D8$q*z+&}V76ez{_4@8?NJ&+h@lMXyS7O;s zOpl9P%2bk$5E~mCVaNZSQ zJb1s?R;2mLfGcMh8>;=~OJuE+k%;e-7giH zcD*H$RRa?f6XbXd3Mwl5MJ9_{4n&%)fK$#A0yz&cpRMZg=^yyiv$rkkyCdsuV78Eh zatIJY1AQzm&LzZ0L%EI>{9?#16kdu<$i4y;2m6zZY1OsF3%{VCpsH*1qo4cj1b_1K zDSf#w7H4H;rP9goa@PQevGrThtpY&`GH^=&v%eNI^&TSV5BhBmUJl>n60rr#Z)NpVD*YlXt&XSG+ z4n}rBzYYv!xeEI^I^H6n5q;6!-A&xj0b*fwoCOR_*VBqSt*5WFFpancK>_lJM` zrjEqiTelq13ez;$AgCb6Bdkn29I6+07dk4nHd4~c;TBK+4Ftx*E@#&5DE(`OCL!x}e5 zFhb-C%2o4qJG;6xe@W5PO_h|DsXTu!CP~HwN#YJ_YK;kVP6_;N%%-6NpTkNu;z_?#=i=IA9f-6vBB9fUTayQEC90hs05VGjP z<|Zy(941{{M0WOn533=kynr{_Ru9@%+=z*YWc#9ZW@=1$DIqj5r1XJvs5acx>m36| z+ta=})W#wpXf8e_@yWTefzCt@08zy#Bae78F)b$R%9B|XjXEG-l7O7C%=F!^do(_X ze8Yua)bwW2vnDr3t{A$B1$vAy;uV3 z>P^D9N)Jy@%i#~2CzoeCJ(3=q+uPm0`_uQ@arrb1RGdB_Pqkg0^vLKK8Qpc^?%>&5 z*ca}|+KbVrlp{i(r>2fU)MZ#(Cg#l>G8dWldy82OUOV0E!v*n~nOd6(_;`3Q!$Tgg z_3E*ceu9pnRv1LLw#ssl;eh8lP1ipC$?7>A!>kfJA0skLHO2a-Z)KQmSlz=W;PT(< zUQNpdK4`wIkB>Oip^ljuVdaFMiZ+hR_p5Bf>Vo|I7&U$5^kKk1R?tH4@z>kqbmD;K}2i!9&R z+`KaLHKQXN_sG9GQWnuf#h>}qKi1Dxu~ST>`hF%sMR!>#Hl4&}!m1Fp;^itEo)9wp~Psr@q#ih$XOr3uP$V9*EvXo;>T*$gy&q5AunwZ2uh{VIgdtY6h^gXXX zwh;yloCb=Ifg&pY?OS`5xFuKp)MIl=P&DBulW6l}{Y?{2-Lp-;3+wA*DwDC7Vw9AW zwY9Yft>)(DA~Yf|FMnHDIQ-QsoaNQkvh*VYY;1(|$;rvP3Sl)j-AUWp z?V>d6+*|4aTE7nV2zgDOD`}QgdM|$-W)&(f@g`d$HogBLF}!cGv16_ab3s8t zwr(MEwq?{Ia`M}s{;xKb3(L!Bwzjt3K0fWk!=&=rugMXKL!E%;`{^D~xSz zLql#}9vV72dNKc*H{a{jRMChh$x>z&n*mSQq_g6Xj7rI88fsV)Zp_>B_3PJHy&L*B zg@lASxVhgQfAe>6zyTo)si`@pW!9@Vsx2!cge%c6CLb>~K?T_beFx=&1ZW|gzAEZ4 z$yq+(6dfCjY&ro&VBz8_sH$Sw*w}#jCyxv@PyTTHtFg3ozIhz-(6Lz|$T?%sp?Yxh zNKrJn6!qzU&zaTM*OSyQ`T7%GleMy9o}Qj=wW%B$ACCb3aGI>L?~?0;3B0GLhgNNf zAER99P>&(6-?&{rcyQ2hCG!p7EClgp1F>1wa7$*}o(^YekLb3%1>b!4A)=GZ6} z0zV!h;ZncI+`CF?^?Z_@reiuwE34HiyFm=A3IlUN>U)NUIK`tle0+R4^Pm0CJR8KC z@;|j0a4Q2cy~RT|@>_g{6-R!z172?+^1 zySo=bW7oE}OhmYr4=PlDiE;acF3bIz9vT`#zTjZ@+pV(q+1VDO;kOC-#NmyC=!IzL>==D>ldglv{aL}23J;zFwW^D{Te>2hLx@_%1t0jkIv zox{q?ik!}@GUVCc-)A7hq4z0x3{7Ta6qT7t2QCWX1F21@M)-O3sIIicv>&Ut?c(o; zw7mf0HEs!@b*rOkExB7*TPxbx+4<>ZmnWx(ZoY2h$B!J-jn7Gen)2+Aol&lvnVCh$ z#mx=t4$K61EPP)$u$?p2F~N6U9SyFj5efKPnYG~6az^VdIh%kH^YE-{*r6Jci+ctJ zFKHz_UniDUR1hP4r=vp@u%DRqYwy|}D!lLCzrSy4f{LSsQDlc(Q00)G`|!4(81f z6dmK^l<@nmjl+M^tC*qgclY<(5p!Hvuy~V{gdAXujEp>P{8612@v`40L_QlKENJA{ zZ{J3K`ox`}T;gewb?NoXNqBl@hLH?skMC-qPZ7Pbww8*Hj!soWBQzqS#{^pqegLvJ z3{qLWdy^hlm=1@rh?3W}XB*j`1db3Kf+T`CU$qCJVj}xbdp-0^z3f?v#>UeL0s3X* zAj+u9xlbqL$$XmVRAOo5fRqC+Hq8)8gWKNS-9`Ks6#w_TkMI*nSr{0kW*m-e*)Jkr z?gSAJq))DFJfzp!vLhT{RZEL4p8CRNz|+0*>LxwC%Kx4PT-e@@?d??qpFQ7=kg2+R zwI*|MevSwR@{IzBJnC_oJp1>rT75wKooLYe_YBsywuy&6B@XIdZsy4CYHBJ0jUh|_ zkP%_@|A0nyVYc+!Ak?PEHCnVErwMfem$3Qm(e)bM>yD0&g^;!|T#X9OqWGFsFP3C3 zmr(!BlPN81j254iU7hkFp1=AdBZ@!{g09}fhaGl;2>wKgbJvT`4i3I>Y5s>CdB1Vv zM(9UAF|p^fsxda!K8Qa7%1 zL+47ufnbC@(d;$SWmAcqDD3Fy_*G>;j2h^uSmQq^RHqO@Af?k8TY2a9?H84{1M*Dq z3_Ltfl-{&~>4*lLi^BXOX!qd8j=iH}h$2(n&M8)3n0~R6zrR$#QL)*b7muQI-Rj}-* zcOWRMgWvtXK0oe5-7*i8X9Ozj?TV0PF!=K9=ALOi ztXgAUu3NY6-M@cu^@r&blweUy3j#8P=MeyS$k*HzWCh^l4!uNZS3=^Zv$OLvWd&!M z44VUop|DM`ga3Q*Nn7SZ&~sDiU{CQ|-D3PT^eJrxQ2-lW)=heiI*Z>UR z{#QAJfRVr;mLNrdnba{D4%O74BotBTpc|m{rKP2=US61SJt3fhB&4MAsi|1kJeS=o z5&rz}fengZ^6XFLvv+4BBV^L2Ys|nubMaiO0Sf@8shOGG$T$5BD0l1Qf@eZmhJYVB zIBa}&FajRfX*?i^R%SN!UI-(fQT=(g0PY3x(5yml_5v-ct33>t5;@Z~RS-%aaKcDV zNqOArp2T;DIFZgEcY&0s?uhGsD9nv$Ljf^X6xN zw?N|z_&s=)?jf|s&(Ht*-8+pmwg+6~u{2^R**Y)V+uNUuOz!U9c5raedGG*vh-%GU zJm;y3%<3Pb)(JP$%0~otX}`ghkiB1ac1+OxXLunW#H4`|KUY@9XJxr~-7|*)U;aw0 zsG=f6B&0F99temJJck^bs-H+Xpml)KrMh{uBM65%`^L--r9^(y!ahkuyXOA5tP)T3|%`?dwMJ zKC&qTtBDw`hllRgj~}=7_v1r>+zrSEWk8-})YqpFcAi$H(L~PR7}vgN@;#m`#2*q$ zg&RfI=hk+1*eyRo4)l}G!eYllLqW_NfDk3E5vUTu>9Kla`-EX%EH z8>PFuySpU>rMnve>F$;lF~)hGbB-}CXJ=<9Q_sumeEC^_u4|VfApt?n{+86dJBUjp7)W*kWB|=^qWd>J zpr#f$CQR03Ds5j2$?_ZU1zntWBbqS#^dEoZ(1RH)qT_t7Y zA}R5ypvn zt|I>DEMR^YG?=rTG@vRKCu=^ z0cRm0C8dqW1l|fDE=-3l|3^Zd2FpngGIi014_Fjf$lx6b2?+o)jJOjHWuoA~^z`&l z^$#>Cou=4;{${B#0b^Zn-7b)Ja;nKc1)~V{JDmIIoVz$Wxv{|jwFCpUvXq%K8H3N9 zoS7+)LODAhvv5T6^Y%(tS67lN(-OGX2vJCj(LcR7=jKR2@CAsE5|lD&Cu3$tV{B}U zLrfeEW-of+m%hF}(DD>OLU*-T93CD{Lqa+?cmG7e7cy$7YR+#J5k!@W83(9Kot&|8 z9;IcKY2DzjCfn1^%$HJiv%MA#-M}=VRz*5G1eK1H#g2`Q zL5+YK3_x@THcERT)Ha5=u=lCe=aB5%$Ox~XAR<<@G(m94buV>lVX^jZNePtYo6W)i zXyL!w7I0U5Z6YdSL9@2D27=^;N8zFtX8vOhAb43>S>1ho2q1`0%+AVxo&}h;dU%*H zF`)s#7jivVSXe6^XTe;JFLy^`KugtCps3AKT=+laDWXs%ePUXdx*``B7YEEw*lne| z)?{gVTE+wb>+tX}R-IRLf(MA&1Ox;$JUlpH5~)M(d4WPrAuj(>1*uyQ_rP5Ny+1TE zBCVu^rZ~zH`}O=>0F1kTK)~w3K|H|9ES2{ne$Ves`#f_g_36z-#~%bcTe% zUez>^03vKIn(=2LrgJ#>C$S5fh3&-UF^#KzY8yky5 zLSnaF1E6>*_|6%G0-)$5If&M~!{EV{(k05g(<<)h$cvu@ik1(*e0Dzuhb`zvQj87Q zHQ~jxM*mIihxw*O8D|DFA(NP^`<+%K|X!wxmVXLoD?NQ<1`)vR+71h>LV%^X{u!6W@CdC6cl9V>N*I> zfjzT`+X_qpfW-Dx7fT)z2#Dd};C{X<`_+l?cDQf&E%Ryn@ za{s#+41_MI+7?WV!gLTO50YNZ0RN}GE?pLt^j)wzr46rICEiIy`sL0xL z|HqS7Q&ZFAVJk3}8r3rZ3U&?-WUQ^B63xSN{!DbhG=Rwfq>&(~C3i#xWU;Za@$VqQ z^F9vBtiMpfIAkC&E5BX8$olvQwPpzAjzV=5iX#@5mJPP!RKg-6DK@HYKeBBUiZJC% zCqoCcip?d(vbrKN!%lwn!{XHmt7?J+C*^odxj(yM=6$gAyffZTOuJ?R4B?QmWYYLhG`mh03Ah8kL(`nvoRHyVo)E_YN8 z5SF&KHmI^Mnl5|*z{|kEfSy3|H;V@F#TLYnj2^S@kr8ybuuzn*vHceRPVxBHCN^-D z4ZXyz5H>b8DRAYGd*Gq&?eEWWI9Go7Ag8DIGqxlEDLf3QxQ_d?5h&3+E)E@Pt+leU zV(p#Ay?yn{-(QO9EpU-EnQ=gafLtE=NbT z;9($DJkel=o>u{=9^fND+l7aRgGfd9@{8Ll9Mn@yfDG!P*kBMpKW|iTzyU06@wCsH zhr}m#ik+7XXo&fF|G}Z?5|)#jKuDrhR>rs$ynFYq$EK;rif?tl?h6w~1%WIrCnqKd zlx6vJ?Cd}dc&Pr&1jd`o`r5SpYAFC4L?ECvA{7 z*!ENE_fPKut`7|lhZPo5gJF}n*}w;5YA@@ELq*kfB)4`XxUjImBQ72^Vt#XTBXYKb zIQ1bV1^4>qX7zhE|8;c8HS$^n5O!+$qEHoTNJz-PJG%gC`zA5b^c<$>7oDC_FTmC^ z-w`W5&f9ij3aqKADX1i{#VFzRYq&LzxVShFTNS#N$H$WtzH1X8hCP3Nj--$8B$Qhr z&rJ+973JiN1RCDld^J@rhKY#@d^-lXee@>OLcbNJmfabqNbp9xf_Mc64;)=Hc;r#(@$33ajQqT``CRy3pVbRfpvEDSh8HhQPs{;w-aiW|?)-M?F ziYqHoadB}Ye!g#Q&8|0|zx!ul;} z!BzD1^Z-lUxcXtqGC4WTIWV^*kxK9A*4ey@#laW=o(pCKC`%BIhem&lK~D()Lts=( z)X>o2yIEsH5Ac};U6t8FC>PwUWbBYvZN&I?Z*MO=AZb7fNvfz|h>D5Dkg$&m@2{=F z)#{-GEoajyB~^^WmhNDfSYJ{C2YgRP&`t=-SJq&`0sIiUzjs=Exu1<0Dcjry0MQ^9 zatiG+dk*wrvk@nN3oy0n_||UE?pDCr&W^?^07O)9LTFxo1r`((L`==u2}u1@gdoM1{uRjnr&O-GrABR; zu?4bayQzd|h~UC{%y?*06rin<1_K`83q3uOUf$kNwG_ZKplR$}T$q~PH1|~LR0%r1 zDpo|vY{LR!61XemcJ1x$CZdY!q@UZ`07^g{+>^{(A5BztspA!YHlnwur?ju{lh?0b zuWW8YA&{G!8xV02saFALDkv+zIQInvB5Tx!&wZu)>#=F|%xl#V6%n40l%&Lr9aCB` zJ0Cu9@noxfZf(U~y12gf11g}TL*+-1UqHZH0!tr;1|rDKB~gg|P7Afcpo7VoyUBVrb1F_&EF^a{3UIeG6^~X5 zK(@gZLN!kb2_|~eHbS|I_}lq;M3jU_^DXG!-rhW92|N4y@Nb8qj(!RZbQJcrwYAVq zOdV&AYz}?@?v-Xugh~a7PPY(Q!U$KO1RKCrX-7wP&FXBE-zD<;^S^&Xy|cQyB+AOl zIQ+Gi9VawtqkF>uk^;&G&`a~hi#VX`RMgbI{`m3sgnblARkUK#?x4?1AD@ehOWB1= zmxVxsEgj5F8MTX*RfLB5_QnPfZf=I-B0M}Wt;SefnQ>`pX^gUOIf&2!^g~NlK|$he z?d`)0w4Gakc}47As>#hwPd6Xf2J27)J_GaigS#*f)J^)~;QCv8&! zO~0HN^79J{n2>)SYNqvDz$Oj$0w_u0esQQu0*EhQM~p#ra-}^$5Vp!p?0P}O0E~Wc z@MEltF(Mo+a7S7tV=SobgP0f!F^P#-?Uji6YM)p*lK^U2TGD%Xcu)*{L;!S&hjPrp z9IEn_p##hl#OstV<#!Es4n}P*%>`=J-QCX(YW3{?*(%T~&wdd9@#6<$>M88`kx6Z}Jsr=(}zgW4_uu&U&afRmI zMgtB&9-@29477`9hK3Z3JN>;UZGC)vm^8lwq*P?Iw6HkZyZRv@$u8cZt)&HsA>f}w zrbTzZkG$-l#3Wwc$<_J{s9hM-XxC2nyTTm^B!%MP!NDQE2yX#p9Cl?DFHdqw$}E$ zbgw=_iZ-ixCp6sD#@uqg!4etj<1pg@WrW%^HQ4`PntJo=$B!na-X6!@8gM9 z?CfkS4rG{|oSfvWtT({31X(|iU#Yx$^{N7JdwKc6j=Pj#Vqoq7Ca)sy97OIIo<5}j z5rvkP_Rm@857j}4^~J=v%jl1MM*=LU2dGWkiL}pP5Kg#y|Z+FW#E}6x}DS;~j zfCBvA+S)pzb5+tu=RE7%#s2K%!~`Hin1Bz}zW9U(Pew%*1vDYRY8*T~4|T%y%fsK% zXJ;Pg=jY$snPus4f!gDdkO+PmVS0@4?AbFgvlJ46eoHNNRaIZX;W9Z(_PUpIntb`WOKqSH?Cl64khXvD3 zKt!~5@Tp+lW#V1)k zlloiQ-x2^0N+i@;>FrI^OyB_d6BjcF2Q&bfP^;DbiwFjFz?)bIUiVu-IJGxZ4Ha&q zAV9@YuZY5XU~2W^j*eUy7#M0=nN|bAJAQkWurfWd`bC<>)Ap*wimfMjr$pD3?meX$}Ue zhu0}Qj_8fXE(N>=pnq>qIP&myVtcz-@nQDid8;v(`H``*t*j;i7~0k2W9&{-brLSS zJ)8Mq_H-raF(yEm)7ux(HyZt-0&(K{G%4h}8QgO%t*JIPvSn@*1h{`c1A*c2O?-Uc zTXhN4*b=whsdq14T`nWp8*&g;;!X;1LJI%4i683NPL}? zgw1O<+hrMnHj`EYrf2@B7$a83?x9Iq4KC=Fr&~a z37D~>NxLn|?bSawS7rSSKp90wMq1^QU?63SbpnOF;UR)W^;DSI+RN+)gk~9}1h=;8 z8Hd5qemqROKUGYMS$9qoge4 zPYnQ*!UL=k1q*8+*R>1P*VlLI^zoN%AtW1yjwQud^78Yc=3tPg{uzHZcydxtNjdi5 z_x{&$dNR(ya1}X>By~yXMxu|rolJX)3dYBc*X%`0}(P*IvT5%lyJP1j0V6F zUS%qMXa=jVnSE5RMZ-Ts4OAU4Cm0vi$1i8!*rCQtWaQ-Td()M&k!tqYJnytxOHe-5 z)g|E!EGRNcXt!U#R}J-%;%^u^$ia4A5iG|`->_mDN(RDV*of`&9*Io8u$U~ z53`VS9|BHrI`3Eq6x_<+$K$^=nIpsteFUC5%<--l%#Ev-~~LE|1&x1$A-6Thb$o0}<82Y~WH4OH0mKRl;Pp#k~{ zfSl(Z^r(dN^mMBOE0M{8R?qF^loZM7_5?Y4sQlN|6syH3;r!eSN_|gOdRO+I56E|L zhQAOTK)dlG)4bS9oPT_f{R2ja>;%@5LhkA3oP^HK&W@Bvhb$VPd=ns#y7|YSuD|)9 z_v<6nW#-_(Nk(3tKlF=W;uPQ|Svfhc4LE#ie)7e~_O3!53@YmCpo;hg*JX(}{T4tb zKqDjV>B+BF@HB?sb__^C;+U8iC|czy0!1V%MdKCDmN^osRvvE5B@ejrw1Z$tNy*7x zbsZfLfx;T$J)u)mT2M1TE-tL2qazk>?r1>B^v{~wKkWv8_=Od}74k*A1mFrl3Qy7d z-H>p#O_#yLWp#Fo5{+%se5&c7NFH#ax27aua%ex`29JVPIgG0Sp3e z*t<2F3#}l=XO^%)NoPBgrBJG-mKL6cg$49{F@TkI?bWLV1yp-;4VF;$5WsOL7rf(i zfE-MMf|8PvP;ed{zVGQ{E{nnE&?m#-j+Ua4nhp%0_-u80`OCBz^ zUlm|=NI03-{HwI5>+fR#l#weam@Xp%MgbTlkXBI1x}2Qc8w>*(8HCG&U!L-m-M{iy zp?d~lz|4#W+6aI9R(eO(ju}j#roMi3WhE={FbG=#FO>54zim4<7ja)hfI5NzA^`33 ztzw6S0vLg=lz~$gjGA&L7u0dRv$GRQp-833P%H2K)np4uHk1wU%uRX@8y!k5PFDij zZO~xCJYUp17GQdm4x4w)oQdd%>}=BJPoGL#TS>u;0E4Be5c!n&aX;hPviQf=5g-t?^pKr9LhcIcu0VEPtMN+6M0=!M6=^13N0vCmKXR}0?20MN;?QrC1F z^(%G)G^pGxg^DW^J?uFQRy5S?q`|<+*0>p;p9JH2E7uiTz`~1JIXp}Na}1T1GBYCs zbisDEb<@=)^nSSY1_3#Ie0%+SHb1mwZH6!!c%#iPf*&iS1-3jwrbIcx=WY7CKo zErEPQ)l75vL;YEhZ8Rbbl%|nhP|#(Ax0&QIZOuahEn3dc8v*Q)k(HI?AcAV)EgDFG z9xj7<`qGtfv5`kmFmiHI69WrNs!~U)Ru5XHd3=0ifKvvD4Wb5B>uF??#O)ivl%)&} zNkMpml5g|!;sNUhK|<=7Z+YoGy%A9MDJi&6tNOM!GT^FERjZ2&7qCHatK!>dJz+CV zZ*y|Upf+(_TrTd>GgDJigoK3Vzdt%B&b;W)1kgP(GlK|7Vx$ysNK}c!q~T#jFq&|m z8ELon_t62of|zPy4Bi9U6^y+`r4C?_P*Xe&mI$rN2nB|(Cnr3qsi{!c@0FDm`QWjt zFJB7%|2|wn>7`XwY^g5DNJxMtzy(TBa}dQ*;DC7~OF(+!x)fnr7oC|&ys)^~@am5Z zh@_v}+AO@h((DAIA|s(SJn$t7tija|Jyd{9AaMIVT+D7CtRg-5MDO4E!?j0iV=&Zav24@1V(d5DPp8kGBSXfvP zI$rCrMJh17o^gnjp_4Q+A~ReE-+^}fX6s%eXO2LvEC6SqNSQS$`S_8jwY612LBXJ{ zSJZP0dd6Jjn>Q$fYjrRLva2AB0e&Ox>k)e zLUCouf4}yX^JXH_Iq-4qbHWCA<+uu#SSf%LKvJb-WJEzbqgqgX4R{P8>(GX`Q^fIyMp#QgT5-BBhv* zFvSc#^mLJ`=4OJ@($Y7vv2W;{ggaQVx!=7KR%03@-W+sJYe6&B&m;OHMoK zxQ|WGPW$koqUx!sDT-?U7cw&o3s6Nhl!rrTN$C~}^<@4Phfe9EfkV5AhTbZMYn?m4(`%uK%$yF|W$Xx`84c7#xJe zFi~72U}1QGenAJST5CV5}@q?=^<%h zLAMGYk_Dxe#l)b(KwXOfQtp5uu3-gNQd!q^iv}VHAW$-^x8`!n%IFbNv{;m)%?x)& z8Mq%?S~Q_Hjlkll+gQCt1@g19o&!^Zy16;eBV?;=fdegQLnWg+;AOxFfk(gb`qjJE zVRzR1{ymehhzO^V-OGmF68hTZzmHdQT|r_C3ky`SvSqpA0sj7w;lLwf3FoE3Ur|DF z8+v5Qk00S39UZUw<$gA34@6;-AI*K`q0ShclHbk_lqigik2n6L`VI`6(mOnHaj1g< z)N91lf0r@3)MF(~(#neAR}x=#yo0kdP$_)_3FNbfqicXLvazux=jV5tJ-MrrGiW*; zeD;{KcIx*gCdTkdF+j}zxj7O*XkoFU!ReneFfxizq{CxB1#VK=)+P!)hH7vSnJ?Q( zQv4e-l+p*Ba%g-U+F6TrI{JWl0ZlG|vXtE1yXQV9V_Sm9$H&k{5Y!T!m^d1fTu2xk za32pU?DPg&7us-mFA$O}wgZ@C*Uc6=lq}+tvM%mx0Ha}Kq?8Vb7?9am_V*8JcR)@} z{_9}_-@mI2?!?1mn@nFoc{|lJU%_PoH1=B=*vZMs;o;>C3%UCg((d^Ch2VOp`#KV! z*)M5nXkg6E&97S6mmFG3nws!M^RaB2NCPep+}&hFPBbh71Mg*|rF*ffs;ZzR>=+p- zg05qIn^L`Mh;C$MWmyx?&MufwLQfu*8s3ERr|=LnTd=h4O`ZZc0mi>`;SUHaJtO00 z@fNRdci7Fz!_~5Ocz8IFX@H@K_F3?LHa^NJkM~Np;LC=(`a@451<^;>vCq-sJBaIL zWBFpy0GOauKybZILIJvr{r170MtqKTb|_(CVL$0X9$8#ZyIpBfR?$s zaw8!ludc6$cXdesth+zU{9>#v)=@5Js;w=ZkeCQ&rsQ7>k#J!!bSWs{2QIAJ#e7G$ z*?OPOOF8q{wT_-$$XG9dkq7FLmi``CXb0m zh6Y~7R8)}B0)O*BzbHuHzxr@D(cmv2o2Z6vCzIJ-w=qaYyQr@ZQC zR>XtG;7z)eMPyp+$t)DOs+UdlM{z0l{+hGm6M0o94I#1K>K7OoG&p;3VgpqbQA<~6 zE^{ka3u`VvXE*2;VE*g*-WJxj_AcUd$L(L}XzZ=T>GTCvc~sq`tpHv?p}+0y75qJ{ zwf)s}Ed3oVMXczaNuWLT69orww)Qfo@pE=^@f7tFr~Bu)qTv6bm$~U^{`rWPqd1*` zss@d;tA{m>0G9w452vi3y$>Iq1RBj#VA-NtGIIYu1o)RYot>ALn6iBJn5lB{OcGp)}EFg_HJJGt}Zmtzs)UNy}iWg z=>B=I`M(Yh4f6j!x{K$(2LTKRH}noSFBcE@|MlZu_BQ_yABW!gua84t7S*u#vvx9& zv3It1@dTG3PA4Gze|yvL|9lfVj;NxuxvjOny_J{U|M0qkwY{yK*MEOQ-NW7*+`rd9 zN8+X9hDMS5-@^!Ih5LU`i^Tu$Pmcf3N&a(^|D5DMC;87w{&SN5oaF!Wlc4<10uwNRxUc} zhNnHNvWK7Hp5XFGjQ?f5 zUP8M^oQBU0y$b6clNDiZ!_w;_yT6&?jGLod3ox^ai=Qty+q?0>`g8Rt4) zF+Ni`V-KV6#{TG2%6L1$(AJ6||0vzG11TV_d;7rq%AFYsz|Gwz#ieyVQ%y1D5_NA0a)KM}3( zi%k;V)b6%0W7Np!=_^Dg>LXpXc(g;SN7~V#HZ*s3ittGV#-*-?uBz&w~%%t^>MHlvsn;%OUJ_?%{ zcaPSN$wEKft$2rzRA$?el-`rB-SbcDzsz}cqC_4c?1_e5U7$S~{rXwGV0#ee?IV7# zkiA;s;xha_Rs6Wkg^dL2z^oBvu1trnT|ihnCR3)7@M!&O8#tb!qCme4;w`1eALy+# zH^CxRA&QTubXZ-)_!KJHABW;=T1OcEMsHv%1WUiUNu_qK?Q=^Y8pcMEwqu*9jW=)N z9P}$XJip}F)4-+}_3tA4%q?K%k-h%7MX}D`{p`8P&q^`6C~j3Gw~Wbz?obNsLzrN+ zfj@b1YFUo*FzBzB_d?0>$=pb?97TMRdj8OjG%#~qE;o$phwXdTxD!-(N3|p4=cU3q zLpx5r+8QYu47Kmc*=ns+ps%7SdMxxhOC{o({ zPGAM8ov-4@a*<#RMs?$XI@>a=Gi)SRqz?QGhQCqn#e<>jcw>|X)|fM8GcUeGs5B3M zEgC+$K!~y_YzsRdg^MVgDy@>a=3Zf!PE_paS@2~U=>YyxF}T&ePM_nEdnS3Eb)7zw&bgbfXsp%FlQ;5{C+?W+i$j$;{IR|SL8sL@}B-Fufp)f^o*aIVCpW3}BAX@o5Mu~~B%Pj`%)+X(W7{tN_k z3zXt3TEm}|H3>YjZ{i+iCETr-2z>JW37dQA1CVZhXxs)=qbbc0y2 zOTQI0bt7ONJ@p~gHT~Y5J+O`0-pQM{YGSv}ALE@vO|b^4>vmj92rQR~(sYtAX6%1o zB0!e@AC?Fxq2GU&2=w0CV*j7983xr&!O#;12CEPHg-vJ2A_p&$ddV7iX}j8Z`I>uJ z!$4Zu-o??=(%j7&Qp~wWPsw0lkh-C$t`O6op%`y0PdXT)>$+P|uuFP{@OvHeI5CFU zii5(bTj@0dAH^F&*)<|8T#9xDA=GXkveeG>%M%X%wH_A zRw^!=W7McJZ>N9@hY~|J|#p`{iJw1#&VygC#o7Dt- z<&YAlq>D#(0r3uBM=EP|-?kfh!j*s=7NIxzsm7mwsb%kz*Pv*!eP<*>tf9iJh?X#t zu67j`qMRJXeCcP_ul?KC`S!j4n*Q#-)Z5Mq>#VY!TTM8m zsS72|TuCZK5 z?ev~h1=@L1hPE1?-YeH#N7H{iRFcE;N|n`$2m zT$b@{r9Qb<=m(Yb;rinstW@H?7bw{Jm~L6y{ew)M6%KpAQR3J{P=yP}8m{{pmmG4X zPc*vSljT5jp?Q3N*|PV)S$lP{-*sOR6il(0eD43F1gn%Og~nTjP|dehQ2y&<$H4oB zWby{dQW4P^QIcFY8Th^!6OV>$mA-)#t0?r*h{(CMeW{=Z%~L(Qw4Zj^&H9geo4&C* zdJC6*?-^;0q<4DR|NN4RJPQh4K;uu@bYL$gvP9omDpzz0tNr0LE;2*SAhf*S#+vWOu9ktcf3x^CfVRmh7u zm>l$TPjiVDKUR#$aLm7pFnOUnbRv21-;lyWQG5k{%hd{JmJ7(f%VdO4M)T4x&PQv- zHEuPMaf2H})q<;mZ!mL)ZNMtKKT>LW-3xn>GpMq>;{H3FtcYmuvXS=hjGlwt`zRLf z+Zw`XlsE9~;M2`|^>mw`{o+C?QTkR9ntyJHEW~0O^>&u7GDfpYiOr*oADi-eEx@&+ z%+mFGG53Ck)gbB_AWB|%%{us=fJv*3oM-dy-uQd0d0~UbpOyCwg_t*n>hSS17dOuM zE$iWa-h8WCV($vcR9+deYr$~5>-6Cup_io|Fn{-bp&|6;%Y*u2s#FvwlP8bbss3fK z)BNS4>={^Jnk_s0<#yo$T_h~4(v!DdH}uQtb(7F?BW}QFg?eMT_dj*#(bB!&3XJ|G zLxL)paJBz`=U6VRBf#9yBB{d9>*A=3k5?;Cnmcm zhC7e3F7Wl6$yOrrJ=zA`Uo9=Cl-JtW-Q>@|csPmP4$$x0l8s>&W~=(%pykBiY=6CF zB&@+to04@h!R3FE1Fu8+H%2bfc6`h;kjcVc@Hq}vr(^%y>YrF&iX;L!zrY)X+HQ4S z?ff<+?f*Hxq_mXiA%L&^gdahv$%(tEh$v+s*p%YmG^J|JGIiS+g*~UWpW1v1ZpbPu*q554qRBv1hD) zMI9lbt#sWU`BzgO=H-s~s4T`Vy;_s&_-n!bt1QjbE9Ixgsdv|(g1whMU%am)-z9vj z)LnOdmBCFFXL@{l6Ez`wodTck^|7gKHffeIn-uv7C0L-+y4V%HDkm28OKe|8=FkCD%TK;fY7Y-$7Qdh;A$jWBUvF`njJ#)Yw??s@>s_>tzdrGWp#PnE zVeRzbd|zAE*OwnhLw=wCK_rPhDbA(!DDn5D=%Q8Zr0Yw+i{RUpt=|4v{+zkLAFX5?FY_`6^-H8dn9Z?TIpnWh)#9GMm>wLBG?G__6 zCQH(Sk836DNqe%fkL&3p>zMgaY`CcQ6~lBlCl}+Ftg<9pt2}9<6Q?fiyv4n@Uov5( zHjRhWS+3tlCN^29^r^?BlkBmUWodn@EXy(46S1;37-K}&3_xYf(D7h>m!Ws7EuA1Z zW2{`;GP4wjPUGURVOd?Q%c4O?5*pqXKdldRafisrUM4{XBaSZ-3fj=BgV?uXl z>>Ou)o4R@?&KHM5#m(z#V#kg9F74D(hY|SdqBm*U>H%thFXsnqL$2>!{YHa2wnnwv z8Uh0ns^0}-t|BliO7vPvh*Fqtz!Fm(Z#I2uBk6p~T-Z7KmT;JVm|>fPIcc@$bH4gu z(A`ny_7uF`BYkjyTf|@Hr&mMXA-$d<=fA(4&F|^$yndx%&r;eIb|7|mFduYSl@@Yy zd;jvu{o-thO%c(uE!Prr=B1lBaq^{8qhMOoDkF(SqT%%sJDR_J@Ezm&_F!{Iu+F7-#<;{3HTrZX!S#07?p2L!5nnE9m&+_s zsaJx9r5m;-!kyVp_@(3Z;J`CkW7@9iTw|VIJ%rCk3 zNu3Mld@Mpm)%q}3EYME`R;uRV{KoR!O-Y<0uO`q4WJma7};@2|lbPK}z zG|%#?&eMZ2Ui}y54@&(wG5-95=Ucw(ZfHy=s&>(;M^6=BvMh)Rjg94GQ6vnaT=Om} zkovYZ8U51i_WWkd98prVvt?6mC=o4FmN%y2Hj^#WeSP}rrL=N=*;E^8yH^Mszt`>u z5hB@zN|_Z0+tiO+zg6?)pA#EU>_H8K}^Fa7JD4{Mc5&>-cUe zK(#3i>-EpM@q+df3^SX&ZI(Bm4JD^zENoUXN`&ndC7Lho-G>Ju47csPPoZqqkocT%*f zEeGBmA1Rdy+M3Vl>v-F<6Z{;T%45>W_ETp6-1a9c;BH-}?)tr9rAX>K?t&W|K3Z2# z$?ttQsQ%Q~WiaZ!i5yQ0qmZ{JtHd9_7H~7Y=}fODNDPfT#()1={1nd#MM=Ns%XSzF zSFL-*9YxUYkjpChi#KPKZgw4-QQA$~pQqvCaYbJ&1x8i*5wW3?p~ic>jlqCohIleFs>sR(Bn$1w8;{y7W5USd z#?kV0a_6k!6;nU%xmPImQzQkfD3ykB-xDapj+&{;&!Y5aYKUlv*~^eFC6OwG!dl^^ zKZ|}Wmrt6vB2-@edi5#JbGoLlWwr)f1>E|LTqPp%f#ifHqa6@yx=M8Lg1j!BKDrWi^2c&n0D&cc_7Io>^KV7^t z8eo#p5>>+7gmbny)K~^5#5W)67vd+&HG&YQD*E#A?ZdWO8w$E#-@acUmfj*?4FBd! zK=h3nMO3->TnQEZ^^FfAjWU`}C`=0--HqtSVydvD-ovi$+!6xbgXwUXLY@M|??}Z- z__qYog`{|H7-=4;DL&_Oc~AC}mU>8~`~67GNcGe|AAc@K3!jZQq}7=kxO}TFtC+>y zks=I_rC2r;$rJPFFJ;@fg5}MD7u2o%N)55LGR+{%e_4m=&A3McQUUK4jAfCySvx!; zPhZs-+mkSv`VVkCTlZn!mlX%A+Lv|Q@a$hcokpnGkE?j8yxM4!5@687t1SK; z<%+ofs>bY<9xK{27cP=dnF|<^JPMlLO+`M!xI8b&FQ=$X!h9U6a3<(48P_Imc_YZg zSaXrzjN$#M^`ImCj)@kbJxs?q`}Se%#KA$W8I9mjm41?q&=T$SOGR_K-{JHG{@7(2 zoTvvX_TkPo{psZ~94<7)WluTTV`(uIq`P?RYhG$;?BU)YY8O8*!pMY|Zq(W^_%tAO zn##l$8KqQa_k&p1ROjf;pH$jhg6^*jhp^}^mBQ$jXZaUS4mfYME}a+@ms$HTvJuEC z&5Psw}<0^M5LPz2@PR)hJLy#(&1 zZ{AjP+6_|q(+E1Yy^UnEZUWj9#g2hs*|Ask)L%c;VWG-Dv3g{kkeY%GKV-;=cBklO ztP!J;GEJ;MC-&*Kxsh6_r$#V|QPG~*MnEL1NZB0R=361~XmUV~7-GFdXiqjm!JJ%b zkQ>m&!dt~urc6r=4QqQ%E#iV}MP*(5DU_5#MuigtjfThCG(2dp(g}|zDUZ55>R5lx z8vBZM-e`sr&Eo>aE2^pn7LG=?@nfV*9}fOxf!xLH@$}8K^5gBH^IY+&|m@) z&VG+Z8ch5|SCzZ&K;|LIj!ND4)Mhu>HPZuBj2Rx1w=2AOSZT>cjcD}*JG|v z_O25K6HI0|z4JdSGgssu>wdESUdX@S3XP>u;II3B*^Z(_PvgT)S$k6%B3T1fVa-Jo zmB9z~bK+&K9!qUZ?X?YE&Z8Y}GSuUYVNWqpR_?ka@!G!xQ) z%+)BiIN{FmgbDOZRRav@;=N>8((xUh@TW!n;6OMWZFREOWi407L?|FY< zQHOae(np{)tx!i^@qDRG=}Kx|GNO{EA4FB$x zvY_F^w4cG`V0loly@3D9?L=sh|dKX$) ztZRm>F5|Ctg=4AH^cT$iI1g!_sz+8t`Fz1Z+;7Nu6T;=4WmA|@XY-tb4MTHzq|(Lu z;N)FIeE~vo$+JrM*BX^Ddwv`dmBDUKuUS8Gdj#2s+RZaelhJY;!;rvA5IxO(N8jP@ zr0uV+a8iKw!uoM!@3mfX8Ah#qa=g3Xh(c4@mWUqceO-i?vxi}INluZN8EgGu1Q*H1-JK7UTXG_on0#v+wz9B zQuP>@c)Apb-3MHmb{ca#W?yMyZ&ZcR&s5N;{NMRaR47Dh$f`tjeDhxUOKI{|%6Q07 z*($W%A=u~0HMfQGPkJg#W9t0M4C3i@p=`QR4j zC@=9G7NfK-trA6z#2C@Y8Dt5mPNjPU-(xjnpAON7wZw}hT09`@nM87SUt}|JFUw=% zIg^ueCRXuY6RjQ#xg+zq*erzo&~!aOu1r3gq|uA-NY5)TyM1ehml;uXyxPye%z8A5 z->pt}p&Z(UC=kk)zY>s+<|&$Z9W*4lr#7LLjSM?Eo%oqVUNW?q*Tf+|S{fngGfg1d z{8!hJG;ehM;UoiFDH@%Cgo0#K6KYo6~DYO z>!g?U*9-^__|Awboj}uN6v%EA;FFV%jc$09R&@1>tv zN4yKH;;z7_!F8aF!w6CeJ#mdzw1<<&r9Ier;fh0hS^OsrcWe^^_=^eTC(;Z-*lD(n_8$9U1A+@Wy>{lvnw!2^8FyBPr z*x%VV5S>tPvoH+rs#1q5fa|qtZ$~sVP(E1|1y7*iR_xN#Dj3yV65B`xX9QcR_c%lT z?yY5v!g?ijlo4(5u;}lK6LNv|AC-hg%|ng+G&w(-ST$)r(l(k~7~Ln!jz_oCyeVFB zP%v9^N6$2r65ovcOx8PkR-|I%?OkmJ$Sdbeug0!EdWtgdC|#3E~r-jNW7*(jl69` zbYOI>FHn>(pGPe!y?9V%`JyGr(78O~t;yc7b4z(&>K38^h2F-EgJcOv77@Pb^UgrHgg$`>LhUy_qlIWx=xMiU-bgeoZ)CXBW)2;~j*>7toP3q0tXMON*=KgzTMYg; z^v%Ct=gc?PM->+ob^!E8&r8R0Zp1A#|hl}*wJy&xC4y|XoNYpJ9ob%Is;TChgmwsJB z-Y|oS$f-g+Izey$7iV7q6ju~%IaqLldvJGm3-0dj?i$?Pg1a;LKybGZ+=9EyKyV0d zOa9i@*025bYjQDyPw7BuL!(e zMC9h2zrzUhkO^L-4agxI3pEMKRQ97fbm#aN2==`ma4bhwLq*(S3$JrlHBLiXA?qa; zljr)Pa9)xs(FhIx1hE`!ls1#X;5n~Mu1YEgoW%OsPH8jQWZX#`7cc~AG)dK zBpvszZ4Uq>iILA3`xCQ0LOhY$epI!4d0oCz2TO5a{#=*nhUI4>p-f_or=aMEjZz69 zMC>f#)?oK=n_s*!I3P%(Nh^GdgOk9pz-H%5cGn4`lN081sFN*~R%gU0&qpmJ)di&ifVOFA!{=6`8Y;O}}&LIY2JrWGb^s-_V0^E`S zp!ZWVw;oA}PPa*Z!GaR0;_qB#%a_{4wrf1PG=7aH+;x9N%J10-Co@CoBQ{D|89~P^ zQ5b#@xEg+QZ19kK`lSpC3_m>7WfI6HpQ&?Mm@{28J3#f$0jE=aZu7#d)MGBC;cBoh zw)gH{0T|41tF16MHQ%deH)V-fq^SadxHK--JNk$-CEit_;?1|m-_QtDkEwl(;uk;m z(QeJK2WfcV_miO$IR~cCmSfhPOmx4JPTR!yn58tMsr*5CG>7WfVw_sqs8<0`@*d}1 zE8NKRRS|7%c(>sKH#bpUu`n9W*1%NsBd9N;_h;3D=8p8UgB??0fTYD6c{1NUxnFk7 z)PV1NY*&~b-^?}3F7zXZL$NgpJSa-5Lb>(<^#I|XwTRWcm^|YLTXZ2WHNMbZ7OykD zihDUOubnm=Tzk2FoVc4^$AS2@5#g;cZNRmAD(o??P-bAF`^Lse(ZC8{!opctCg5S( zs37nvn9BzCH+^kO(V`Bgs*DT1V?%M#oeWo1Nze>L32Y!)m6b1r7%XI_wpqbt z^<0$SamXb|LGf%o#);?ai~hG@NOpO08azj=!+mwkdO zP$j)={r;VETJfx;Z$9&eGx%`Lvw)A?n6gb`VlDjh%^M$`SWN4=Jw^!({dbL=0eD)K z*t=@13{4fGB?Wb=Km1%IU1d!WkR$E`^AWasEn7}G{l(Z6V#z@u5f=G3w}3L6>AmIv z+A$^m5jwj0Tr+AVA)maqAY#%q3uO=9F@-7T$Wz-ms*!JIEgK2adh!E@1e~zpKPG&_ z-jXZ&ANVr&V)|+_TTf5Li%fx+HEN= z-n-v@cQXwTP53IrQEyP9!cNS+yyQ0*y@y#}t!B(b)hU9VC8?n$s@CoW_U1i*E^4Zg zIT#Z-F4N-h3oPt{QxPA-$66ML1rJ?A^3*U`6uyD1s}dw?xsQ$Ub*0zz;_N|%ek)=Z zPw~b+rxTjKSYSu@FIFM0*lSu-npi>Due}J^ac_==M(HP8K+`$*J~)ME(m_65I7PLE z4Nm%Oa{ZnPw|d7mPvGFt1%hd{~%h~u-v%;A$_P}qB`>d-sS*rr&y9CE4tNSD= zO;(~2$B zgUtczL>x-8?+=}f2X{C`9V--jc}O5^8`&?)oRb#CXJ|W^U*_INm3ulgGP$rSe_zYJ zgli%HVQAOZYvo*KW@ZztO$cL|(F=I?+h_l4jr;yO+r{TC14^Cn8w|wKqifef5^5nl zGL?TKW?Gd4JVeAe+`9fMP9=Kf20)uNe9zeK4{3RR+OK|Tvib6!61qBFumzZda!Fp5 zS;N$yO3`;OFbhOC2ccKh4Ni#({9S*FnD{f!&!k#u$#v=~^06v+@Nr?mA z|2+%4%TxaMJs^k}{|*R1b}sJ6hp_H43KFopNYJ108OhCKPyg3#A!1Gr4i=8?05Mk! z6L$-95-%HfYZ56L1!b*Z6dV8mH~8OeA>UTda%|$vmprxt@4L007d5(-?*Gb9TSqjR zt299~Vmf?HsDMu27ZEX)QzX*~PFj`@5x>h|@I<90wqN-g@+&$;Dfr927}qalW4*!@ z9?_bpVr*5yWHA*?s|dkvb&aL#s?BPjlkWR{F^$hSDlIi|v$#7jL{&2z)?GKf;FoFM zcQ<@P{<^%SDLe4{Udeen&ST&6)-bj3BYaD1i!&jtNHiRv?xktb6f|fpmTrL_LAq2Y zJTM$^X!Z6NaOo!ey!04e@Xj-7d6Up@bwNQ^8`Ty>PL>cPDh@FM2}i%EixwA!3rv+D z)k&90FY|l5NxWPNxC5UH0R*P^3f>z7$2vD}$=&&?F=JtXsjflEQR+brQK`Xn%2-Ja zQJ8?l!3)|{Hrb*t>Scu7nlV|dTw~Yv`9K@DX@R7};Cv`-rOO(=R>Z3t~yBKi02|CrLV$clZ z(E^`L&yp6OT4p-v$uNdh;Ee|Ow%{RHJsBi%^0a;vdtX=cfUA=9^UQ)od6Fn;J5GN8O%H0M6$Fn-$ca3 zJ%g8`N3gaHx2vLZq5hDmq9^ULonsZ&u+qhwCXcF54huEbE1^?Y=t`)A5C)4==`1Rj z{&*z8u3QY4GF{HhfkKR~qh?+blz;2oZ zzCaOgKg}(*dz@g)WCwT&ZVSH;zxVlW-dN4gPU`icTz=XHkzI%Od84hMCgE>K!&yyd z?ZonEwbe@DORNW6+jLC(b*-(dCm! zf=!ClpCrwiZ&q}xZ+(Hf2k>>;NV6QxtGNF<;R{{QB>H;^Y+v3Xs*hQu?`uLZLEb|+ zVJC4jZ3LLf_)N(;J>>uZgd(WP90yHH;L9iW%byUpB|>Q?K_`&$d{pB)6v~loF)=Nf zG9sAJbcD~y8cds=J*`^CN~Ow7cy<#Q`QS=NL(?P)-Izk7ZGQDLY#T0A-qCQU&%;1EkdD{)$QoI_)kZ-nq&%A{*oyF@3rX z0#Z7$U~K11BR--1>D5RjqM4<}vV2Hgw&B?>sk zd51Xjd_HyJ2r}4a?DGw7jT%`@p6qU{IzOG!O#$-`;p#69+^kz<O=%g1*ykfxek@*3bA_N^=GB^-FQCbu^|f{fOWE0$db zZ8CCv9JFH{#g#2u6a@B`V+J@N4fKE4<90%$W>qW#TIFqwFTlK@BPkZ^RA^eAK1$0{Q0t^FOezQ(Lfxb zj$;#dz)xuS-v86U&hBBPSVRe$B!MgtT_>LuPMdTod&PdposBZyw1x|}o?;Nvr9?8_ z$6QA;-J;Z{<6APc3H?_=a8mV+pMu@%(2D)rvN<1b#bVXd z8sxUq>tt{L+UA|6{*p&J(W+V&uoB9_pr*AEpq9mnu(BFrE?`iAOQodg zi-w}NL$*EnqTU_D$?K9_K_T1$sr8Bbvp0SdB=;Gc3b9|#@ZsYDeQ zLH<-;{?MZY(j9amTwGeRZqdzM+q86Z3r*9EHLZ_Q{Ug!C@+qfud4;eV`Pf<9)h|Sd z_iGu3s#In)4@zFf$l9S6;lEnJA9Wv;+<-io~@Uc4k|?#)IJ z4(eVH^0LzC(c*1Z$^U`jFsF||VjrqctZz_j$Tyino(e+|7V4>6sJtBNB|5P_T^9KB z@QDwH=~Sg|$)>KUaZpCEy@BuO%SL*k(v!e-vT$wB8?(o{Y5_r(_FBL9C`(5YH)6_~qbgCdL>E(Hsv6SyJ!kXR z$9Tk2Wht8(^o;6KeF~ypRx;XN$44B63f!EXb3)fzulx%rWL)$kZ*M(XT3dNq{Szb` zzgBAha=}^Qp1zTIvE(HSIq5*09d`@a!}#mQt$mDg6laB*lIkt7V;m(Y(X4CH**KP# zXP|k4+^~}S(_K=(R{07O<^XjNZAe=dNJhqzGo2+*Z7Xos&4ScTA+t~od3mh#ewTG+ z0h|}Qgh2D&l8X$#Xaxs_>5wQL-nYIi%mFfw=WNRtJ+QZKDhepM`o=ng12 zc8^(%&;^azR)^1g(zyK2Qo5d_xRV&CRrjIu}q#yjVcA+EKrmsZb7 zGPECc>s|qKuu)*zO4sg&4Zvj7@yjaU!b|6Fzk2-cR*mZ0-xz)O|3mV(rkgU`Cxgfo~-aj?{o_c zyEFNkt}fK4hpor8`IB4rrC!J`J@HKd$F%B(&hQYuK;gD`)0%@W2zw;t_tdUHO!0w( zQgm`Ak0RUv-riLv3)02@J59_8J~G`cUv(Z=j_|`Lsv&0|S5ZsGRX1zBA{%7fSRCq7 zHnPuFMo3mVqY;sDjFU+>_A#(`3#^F?i7x<&~)@(CJ7vF;_wIJw(Iv`_}JN1 zr;bzpiT?z?XGXW6jXq()Md`;!h+Xdl^eU5R#1x&FR=Xi2n9f$Axv$oopF0OQC2Cg7 zupr~cOM3F6L{k9*&=jYzKlT<^vep}QDX1hF8G8oAe{Vs&r@t<^0_<#NBU>Y<{a&4Dy)+|}6 zPy=b!53v!V;37r*^$`@rkC#-z6wJ4K)iFD3goGfwtE4W_1zaY6)KcQVG-8m^HZ4K^ z287fH^%vDw%TkQ=T*~4qzpObr#Ee0jv8wIz_oY&GOVrb@O!~_ME`$Qplt_?0cg=M( zC!Tl-l1;jdT-;o3J_iUHOa`V74r#g$Ds)PrK`d}^AwkaAY&nzBdr=JI5_a*15rwL< z8eBpIkxM&#>93UAOW%_tvrQt4pa#5Zv+D8ac_P!-`(_) zejjv+yHLUgyez$67oh%v&_wm<$M3|FP_f{_ck%I&#ht?T?$IyPXPUF;YIoj&y!FXD zJ9FU6L(#PZ_-zdnCoT)Mdcgi5Zo4G%s)@Ha)cq5_0IoOC`4$# zh-67p-lwl@1=9l@GDAA)pPLuW>=a1IXoFO%PTL&UJk}kiZ@3U)>dt-gBMX}rsm2>P zCTB^eZ^+F~InkaY$*!@&YDv6X*Y=K%jt1NNUhlW2RihkYmv3~z^mE5eEVxJ-s9_)Z z+tHCN=f~(KEmPv-<0;kXLrAvo&ersM1M+gXom6SQ5fZLj+PS54cMDGC@ekkKaWSxm zEoSo=HjTX+7Nj_47}i-0@3~-3S%&f?B;E)Jv#hQ+EcO@=5|OcqWFo@FM2Mah&UYu2 zoVyTOjl1O171lIYvRazPpXu5apnZef$7aDo6GSxS6%q<~?3#5U43CObr5{=aaZFZy zMWqQ8Fl=Zl)@Jw!PD8jKRd2IyyudUs56|`^xBxs9Pq5zM5xdsv^kM6^k5aC#(=RJ8 zFE4x^hzW@cl1a|oaUQvvVU3iMniV|Gp7|z_Hw~V)@V=uoo8YuNL#}Ue0)>&WwGNf( z5+IY+g0TpfyuZ@stH^@rftqQmoG`Lszhd%Y((0q)g5XhOqXduhf1ll*&$BS+ATgc< zmvLHhPR`Ey2~jJe)1@JtoSf9u)~ePmU2w1;xMuYm_uZZ>J?`T4j>HpipO1^vXG6v$>LMB)|T+uhz4Nk~k*xmp&E-#t>v0~c@(36YYuf|l!}C=hN< zLA0)1gxpc3kZNBO(kj@Lm19{8(g&y6M406%%1sl7)*xfH-?DQY`R35WVsYe8cOK%Wwi2Ng;DNEHq3_ zy)MM_y`-e%8wdVY!tRk9-_mD2yIwLfC=v{`9E&Xd&W||W^Vk1=gL=@kAAl`UB~A-5 z|D_An3@I`2wmR@-B;Xh#7Ee$WyWfLQt67)+!y3EZL|;)EIJylJ70U-sjNW}dLhSvf zFLPvMbVfU22b5O>Dd*uEJlzO z-!Nnhl#omA&9wR*Qx|kW#dYo8DD^b{h=YgWLHMX9(oT57Or%@aC}YTcx`~*(E+Idp zBH}RpsITt_%4M{`ClF(Ig6mkAxvNAH|#lU!rm4PG?v&k3HgqF__LHitQK@UJ?@_FqGZP@ffQA^t1w;&xP76IV z{G*0)A(SjZ`-*BDUo>aa*x5L6evU#<jGx?EEAVrFWkX)v4crz?L(W2o+M;+gF z5Pta*xYaT@1^C^EdlVdF*IZQt0##1NEBFQe{3bx9pjOjtt~1o%50NNv4F?Mg`w@P2 zc1XumPR~wVj;|^2?(VEP@DZ_w3RnmeaG!hfq-K=CPxOn~Ib`P4)Wg@W97KKm0s`h< zUP}P6ZS1HE?@i6>1%~s}Tr;-3-xv2T1~@>>aM56%1n-xt;m1|>>1`~5?0BkY9A?+6 zT?rc=GGOZ%7+A32Za=5+ zzj}Ynks0gXw$0jldS-TZDQRg~HT7|?tla^L{l+4w5nSVql~~8{zW_=CE@!oXKA4aE zN#HWUYee;yk-*GTVp&xdD`v3RmMh17)j^k@-ks0kqg-5GUpN220@l5?HM0-ZWr3pk z;J6|3ghZt_|8L@TODQC9?0F|v68oQn%7eD|_xI0Nv3l+nhLvU0;#swtSc%b-KGV%x zEP2Sv^2!o)=kA*0nrWZ1(dsYh$h+5kINXp~fno3T=oRY+!j7U<8knj?5 zx?ew>CUocfsJZDLMLvO9E%`O&b~<`A2+nJ~9jXuN^BY|6ZO*%P9#J zfYWRuw2$|IM`BoI%!M$Q{|rPbgML(mRZwjCdJ> zeKLg?F#u5TI5FV&ASP^6OoKlxa}A`4$)%8~S$sMh2bRaEj;YD=07pQ$zeX|qc`+yT zfHjfEh5krm9CCl@XcuZ8I!2}R)-Jdi*zPRRFIB^WEn@KQf+i8L7k4JMn$0OO8v8H&pj!VlL{6fMmrFJ?ny$u=Z0>lW4r_TCibP#IIJ*madEGzZ<* zXj_1qO(~mA)xzR{6lq}Iuc*$>&s<(|2lrn<VnWP6%*25 zEPS>J=mvjTf8lbLWyZ(w-Qsgp+0N$j!1L8ARScKX0&|Nv#9W8g@CaN39+HLy-{6(} z{>msZ*~egN`N30SGgj`8Y0&*?i@>j5RCgJ;2OcmkeQ4*0UPU_r+gD70xKW^dUvnlLLrgAt@rfjV;r1_k!2^Ca5GezC|Pj z1gY7Oe1bM0zsqCtbQ!n#_D++&RR51r{%EC_t&%Yut%BmCMN^5>+I zd$PtmH&r-yQi~wK^X)UtE%kv6U(v9)Yd~(g9V@gjuJ!OyXQg5T33a{YWfDttAd8&c zG{uZZsE#QJ$aD`Lu5;-hJcC}}uK$X(OTNzv5*%<(vF)`|VKUJ(et zfG(_S^Caq=>1BKnTbC|&Jb`lKIIa%-Wn{ymQQZ7J2YuO2pUOL`XC-(i3OgO` zy~-U`@pw%R*9I?Gj!;mif;!a7QbT&$)XBA;L72=^9r|B8{7Ghg_=b^dBK8pYPN(v- zQOLZl7=>O(j7DMeop;~YQxDJhv!4_SejK3V-#e1yla1E@;kl0R1-nX@4%fcU&)%|E zwiE0gvVjNaspVT1^4>JBeHpd)TG*bOvj@U8*RBd5att*R>kVFXrahW#B|+VSP>hZ1 zZc<^(OwmXNce$T;%%y?(lQ@S0(=r@^Q{k;`lz~5oCcC(=%m?cVR)*fn2HpcH;fSpt zyd2*?^}Bx(6TRW&`~O*pMn{oZbx!}kT!@CW`?nCyGro{4ERW$rIJk8yD_2w$^Z?6h z?HfZHYzj#G3R4mb5AR6DU>gO6p@I`13XekN?va|=#z#Y$1gG$*_9M-ZRfUYCC_Mdc zbu(#pR#W$)N0=HN9acKm@5Z-aryKUAq-`K`w_ZUI4Ua>ETqoU2kJ*q9_Xj2QSo9GS z+Q(E=qodPs0ICi)WRnXc3%viaZ+rzsgWo^dkHY7(a`oZ*%8GMVRf&>Ec)dauR)qZo z5%Anq!xf#3ZM*b8yr=T*2d1Rac{;Nd2f7iAp`XH1mePb!3kD z0@CU~**v-bIr{BX08IfKAzYUgRfH@lY-2MnCI%s_mvPscCge&Qj$3bSn~8b2SzZ?> zH`e_Rgh-4eLv~p_nu>!^LFA0}uiIM18W^z$7Pgq74!(+d+zCmjKfTQ4R@*=HX!^j< z$#YNuG-OAoa!^BYpSmtWzvV#Kc>F;cmb#|y?|B!z8v)oH+`eSVADrAK9uACYqou;G z1SkErGBHlIPGJhk6v1F`xWzfR2rlP_JLrZLhQrr4Z2=-21*$pP*umL0y!cw`lu=*9 zIw!+v+|Ca*!crF z|26jb*LCxMxxv53|KSSeOct;oqG|tU1E#YqJ7@g^@8LjjZnq7kP6Ok315-M4vfn`e zazqf~GRu{-%!c!YGF)5gbrEzce31j&g!yWb4NGa>Y=EpnQMjTSHc{|uoIkne+H|Ef-5G9kCgS4#mf#}dwjk3zVm*&xcNEQhKsYu&6kS! zSntkOn^~qq53EU2?I=yfFO;SYcUUWPSdrw)VbpJVbbWRsCqc`(h18O!?Ii)~!??@R z>V=`+U}@YI(^M5#X(*7^*-YU&H`u2t9fkkY6Rck9xzB=^9xBlbk}6HrlA}GD7N|-^ zr=^UkN=BScMwF`5MAGGUEVRv<$XODxJ3&_&!D(2LUj;i`e{OAI7JRHkl%_OA*oJgW zQGElZHpt1s2cbd+-46^8QT@iSF`a|3lp4Z25sq2*fk9AKQybu1(jO?6h*eISC=h;M zlhXou&w^-n*Dv@26fR?fI)kKuspDV~U@CD)hN|k;ZxLtXsF6#!%GXF*d3h2{tcz?S z0lSV7OSZo~Zb6I$OeMKvs5x5q292r)*a!taZQTx)w{}?HWq)}>8VRfIS&>eM=Z}ZY z9T(fHAFbVEw-*rY$3_^F-u_i7N}VJx?K^XKz5U}c(xq5&PZMk?yih0j@VkScwhquK z8SyEN^JH=SJtat;Y!UKBS+@Q5H3%H~{s_gnscY!_+AGb)S%}Mr-JFWb;NpX;zZ{e| zYD%eAYTyyq^Fp^dO5!nFdSPT#Y_+zK7>9&RWYFmNdgDg;r|vg`V5Rsesj(-Dp=`9n zn$?cN90e}Y)nU$a)WlRi8Z^l$&UIX3LPJw|4$S8lqB+owOcR6g{*wYGf$eDN9K~O< zi_=G|Kh$OIvOY)s;VQrXu^q%zy`9Yj7%dSd-oXdnTGAf4^_hXwVS~zSCMG7F?Tv$a zgowKXglD8v6>_*q_mAI2$&&UjlMDqoIkgQxA8X{vdo-*3<(X;ZjTs~hH$@Z7v9KwU zg`%@YAzLz({6*vPcsQA_&!p#|Gk<*;?Dbi8nA$qlKy|DYmnvKS_So=wnMw=#^I&Lv`z<%Mul#FOV zI783S<%)qUrw1Q7kZGBwPUkBDk^fve)?j z>*@9+i@Pp=nCKNFJ12)#0VBwdNs2Vz9DK1Z%9>`m`r~2ck_68tFMP@4_0)HnjfYP5 zRKFdQ)LwqBRG9%?>DQ8kr4`PLD&+3Wh==MJaUR|)F-?v#&qVYdHQdC+_sK(Rd;9%G zy&h3JJNgWx9y|?|sh`tnnexCa8E_Wwx3Hr=5?vkYt&Ir7%J0mWNBRw6`EuOfqr_LX zwjv`$eeLM4#B)uHg2d*c26rc*Ej1zc5{v-7L=W|-#aFMF*=4Q|&deodX8W$**Wr*6 zCcit(;Wq>~+6Gtm0Dyyr>Ik`sn*QB(u<=Kdx)quiTWKMcb98=)L zi!GUy)`ZI=9?oD?`xR*p>=Iqj@87>ginJ*RQBoAGumkJ~;wK|=fT>b|i|4fxR7edC zUS7`0&PbHTZ&#-2OlR9u{Ep>Ad%Sv@F~#4<55B!pzsK9GXr~V{^7qIqIDEOY4@SQ-jmsvIG_4ne-V}F~2w7=iGbpX|yzL7qbc9Kv4Ss})bJII+gw7xb zBg44q#b)>X!h#A&Gb=aO+(rwh+EZ|3t?m_C352tA>nsM0vCy-YOgmNjT#rx9DQ!E$ zlF^zJH`u;+w+8n~ENsA}YGEu@q;x7LSo%mE_A)zF_3=?%aPJv2`aAk2ch}(|1VZ}!xzXpAuEo%o@#7t471mH$`PKZl-yB#OYw?Nt7{Bv@0e0pmB*r2$3#Z$6}A+IQp8b8Q_wC7SV{jLS}C{c~+{foX_+*z?*n8oIdnM2y7Y=s{D86qyfGrOCnoTGu9j!XQ?Fs!L2Z1-hCI-MfDU zhhCt^4n_@`evDCm?gj7y3!RG~?*s|#tiZwJ2?%lKk(ZK!{qp4t5;F2XLUkhVeYErL zdqaIDobK*!f%a$Gx1Edkgu_Ei&&@#L#6U2ATdrcy}B1zlv2XEfrZgIDXCl<){}AajnE`WIV}qh%JC8-DIs^G;h{rT$=xe zU5#=kS5>uMUiHUSVNO7Gq{>1M-Xyl9Z%(K;aNqCC90Y1+wmW1-x-6xIt?i#0oa3V- z5~4)2Y^vtw=6~c2T@Sml|47-x`u46aSMBN=52~tJ;t(QKzRG?TGBS3zPYn*bZ+MfGz8dHe+F}*SA7F(N==8oR3&c=mXk}chrkOq!fe2QzJ(- zQqRwL1-YflG^Gr49Wu*5w*pTqUU+bOdwZdg{Ly3U^3k?aRhg=?u?_1oIxl*1rlu6H z9|is`YzP&6&KMuuOB8oJeImy9jE4mc>VO|V4=n?ZqnehgqyT{iRC0`dV z>OwLg5tK@_a5u2eH zFkr?SX`tdo&dF)(3bDS{9pGN4tA9IUqCy{kf7{Oq!#O1hY;d_gAcYj4XE)(^{J zq@;Yva$O;8arjJra46K<`;ui2AVE`lNiv*W!%THh%s^C7bK&8@l#p01pRTL_mMcvm zN`X$AB(F-B_QRo*2I#l!1+gRS+WiI&yemfprV6L4IzkK<+0a#0nXX|E?%H%FO__hh zp-c@7QgM_A|AMV|;(}`WvNfm9Tb1#K^W+~g2$d^$#|NrFQ)NM9A*e1O%@{_vzdyBb zhL`!0p_@lal?^@c`-#JvA!(`eTFV!V7FnRVD(U}3oFym`__X|K(Qp|frwkd ze=g*Rn*NJI?q5-c`yYkewwK@o0DxEe-(EXD$kFjU9r2KOH^U?n{X6MgY%tD#dD*Q5 z7?tXw%aBcfIgr9)&q79Ro3wEhv3y?&B)TDf8DEh2kCssOk2revJvXJRV58pNy!iY3 zn_;lv{f)=XZ3GzDXZG!_=F#8(rUQKQ=I`G#eB71a^QGeKKK|+^{*7p4=^pyxqyPiv zKDVz2mg`ke`SK!b@8q%f>v+Iq{Q_eLp?W@n>TjWx&#p-%cz$RR;1x=vf+wlq0tIvj?((&Y4D?9kb;>~pu7z&-$>v2}*ED%bA_+O5 z%x)@WXs=kWwsY^!Ki9G0*HJ68fRC`h^W3E=CEnz8&Upo~mmg_=?EW(gZDe2dn;qkM ze#^$3g0B6_K~<3tA*>qcMNate!taQXGu5pnU@*qRTZ5}w`7oD#@rspgcZy)%9qQ%r z@wMO@f5f=Mq*mX!RZNQHmAu_(5X-R`idbGi$bWy#=d(zZ_E%F@rtc6r2GUIYdR^Ru zypTFF%2vnu5%{HpzMu1AnllU^~M#J8iu%urzzWa0Lrq})v;qcN;1!jzh} z73JSeWogTkZEY*T-xo}HGZ@6rC{wjnM}eujy2oV^_;yw8>AH5+-H+HJ>+?s$ntFEK zZnINK{9EUKh4(vBxGtqhQg|LsGv(au6FhShjT3xpr{i@$j`q^DbUd0DTGvu%6Zp@% z#%nvz0%)2s6a|j=)f5FMbKlaMxj}&skJJr^n>CL)wEjQ*EaJ7~9tnTKD<->24*9uL zbkRUD;a;S%BeF}>P0(7kcz2L_V`ru29;C9e;kMo!x7Dq`j_I?BfO{#OBE%m8r4Hj% z@44CThr3>N7BzdtaU3J&BM_>P-M4J4md@>P)ZPwC9;JvMIuqYB#fg5HG`55imVR)x}&6ZSHkuMG(JwbRqP z{f63@pU~Jvlt>_$i=34zE9!My3!CocN$=CkB>OY3LZVn60ov2HZZMa(z)VnzPgPcM zvyMXOkayW&n-8qB+1Q4DzFRYHVzpUK)n5N&!dzLlJcDH1coA->tQr z(zVl(lkM7_n4TY`uUDR>f13Duk(??DImBjNsp{q0DrkG5BgnzM zk7PFP3I1;aIRTYL!ed!}eO*E-A2ML&p7Lu8P9jT;sR3-$x}qdCse} zp?-8cw4s?;ZkfOSN9I5R3X+k5Ctryh1up{YdSMmkNAHm)3sdK(iv!aaI#1OpWrVF! zE_LHFtLU8T#+Sa0t8%BTXwkd;Mbhz&k%<5BscUVu(EG4LK=NzuH4wfvsv!6M1yS zLa>7pbs~p45saE00c1`hc>?l9Lu>|O#|vH5uD@?}9K!cximEJ-oUIRXc@(vx#YjY! z8U)+1MQ(O=C(ANuBv{A`)$Pj%*M;&!nXc7CZ+N;?H}V6P1x)jUDFx%}Y1(lwMUg*D z;{8|dq`XuiV@^y*#Xz6*0A^F04ya(Oe>T^NU)24~|kb$VpgON_-?|*{)nKVsDc#JKTCn5hfgV_%FIP4bnK^>%@l=irLT10pP?) zp$Xvu;)9*f)5oJo&I*hLqc`|tG*s2Zc>oboyI^hu-q0TkmyA-fs z3zw)@;MviHW)mH2CxJUX7^6ajC^D}iLbB206lxTyPP@DztJm9e>j{5 z1?Y~P4bQQwZvhfCS(PA@n}~0*L=zA934W0=$_ipL9Nu>S!REebD|3UL7|_vnu$7s- zwMle7@uw>q%?l5r1CW(ekq}d{NwrFOD|e4$V^SPz47@+CP(&{uu<`DtcXr%}FUOKq zrEEg;jB)!F(E*uA!AVZ||zQC3Mbszl<|c=Z}U=2sZXWRypODGEY{!qH&o$pXp76b4kukCSZ09qV&_s zaE~)$SYuFbKL(6{8vJ@n)WD+kg{a5B(zMcM2v)F z8?;P|8ZAU&P#L1e-eQ?np)}f+GD1bADN!K}Z4=5Qv{>f8f6qPl-1EQZo_qf1KIc5= z^?bL__w!wvelz3rTsE!d$O%KHZJn}ct@b!i>q(|PuE}@Gm(TJxiwd!{bxRb^Z%87J zr^Oc^UznLvcU<9CXZb>E=rhwD@x-OuX-`hBR1YQA*~~0!uHSHXVM1}E+qvl>?ba9D zDZ$J#LDbgN4XXs&%JEGFI+>die{7A}EsUIVAu`6J`dZv(V<)F^jJg3n*KOLGnOgUj zwoO=la9T}CYT@ymY1hhUUNB-6c-vZZUl+7ZvwEtKF`+5CNV!vG9{W#?R$%GAP2U3= zE4x!d71iA}-rG%jX)kNa%Km6nCI<3lxj ztTvy1o3HFfU!nbQ)R^0`Ime#Hl_t+WOi>D5+SjELZ~9Mt2S8N7!7a1|@YE9q9_x zJXUV_N*pvb|GZwl_@ihjXL3{Qv12|xw?E#`7TBH*@lH?r>iKWmnoM`Gda=ffTQ66? z{pS?mP}~qRbXsTflrh3|hv}6SK3&tY6m*5%YcehEkb_MY{LLSb0mWWc;7?n%e$vYuqKH zQ%9RiV(0BB`>tMhgV1ttyp=b|zN>PN=KcAS4QoP3i(;cm`+?=PN97u_gLk0~oZ zn^N=f#LN6(PR+{O6S&B9-POLeI+oU}(@NClTz-4qUCXidfj4)o z|Kkk?@r1P&O+Wr;#*7PLeST-6mA4#!wIk(lu;uEQB^qr>7y7r{N@S1a1c&U4EZTMP zP|1q^ll2cfPF`tTO%2q#q#Nw(}rA%IRd&%am#K3j3&iV&3F|&wZDN zG!1l=x(TO<=g&irSJsXx`+Loi=W^%#^Y%q-EsB|isc9P`5)9=O)D7H&|0>5^{AKrnsC52zS&f}vM2$OItsQvWH@H1u zYtH0T(MOkfzMejQR+zR&^Mmi7#C-| zF6B5a%c!G+Z5$g{nT2XJT@N&yIVR{<*mobLoO|By zZ>Oi0udIJqqS}1E=X$VNm4kx(@##}nF;0v*Ha|74CdBvmIo0yr@{*r=7q*oan=rTM zmAs#4Y?Bk!dd5@mDP7_3BW>@Pt}@H&jp|Fc z=Rd^r(=FE3){QUbdu!Leiayw+!q>VO$G+3hG}=LF{*G0pBCU6piHvgtbA^j{Ug!+6 zF%iFec*x~YbzsX0+c$Ui?bm*3B0@jEeB=1P?sE4oU(@??(K_f- z;45wCSL=IIm8qv^dIpY7UV2hy$+D&Pr#dcO`Lm;Nxvj!7i7TbkQ4~_T=8&!4RJGIn z_0oZnrEkM5x6OU~XzbM0+s{r4AD=K!BQ(OdKJLApywsp}i@~Xob2EkM53F>XjxVV> zHfi>qB)Nl^#!kr$db*YUe!oxq*hr;S^>;FYdyj4H9iZOJ-+0lO_fcipPmN^*6+2u_ zk62v&hRUy>7BN39*{B-}=v*D7(GOxdmfy zeN_((PfjQa@4vFxa!1rDIoXvj*4fws;eyID4+A z%BlGeR*hLS;nwRHC3}sk$Nhy6Pfc`9Sr0x>!z(Rk{5L? z{qinY&E!q*az>s$-)ivd(*^a~fezlvLVb}=s>_syTle)EFa27oBIvKD^gnQ!k#y`= zvENkdrb7)y7v&PXeWcOt<{!S=2W-w<^rL-gR@Uc9JD;h0r^aqpUvhV0o;P*U=FV5# zvM2BMyi_$`k=&n_TUE8lP^p)0sZ%>{fp)g;Bg!$_C-wGdi#$!%3Az<0|NOi&#tANa z8<(uQeV>~(IdZv=>09L)quNfEZ`Dz=@#yUiZWe!JZeO$E_&%M_ZezS}=lnez!%+0F z_)es?r@g5RFVZ}&(5U__T;)g45}lTjP4}PZ&nTFedTY1B)V~sY*4Q0M!t8k;2JSLe zYK`IA%qW`DyzAs%vpMtHDxNj{^i5GxDJsv6z^Qbd?0;#?4RD|bi3(EdAcj;HU|$Ym49K(|Gu_Ru5s<_gS~;m_|WkR*G+sUHZHvO z?9iY16ESraOJ8S3KCNzR(Vrjb`Fc%>O5MMGwCRTagF=&vZ>l9LTD^#S_2!2@X!f+QIIJ9QHYMKM>cy$D1>E|R%gVX->qiWn)qAeb+vdu+cyHeH z1BV%l=RG;tmcHCU^^gKzSAEfi=enHu1Ef9$G?dPPF5cNH{+y1m=r#IoeF`t{w9PwF(rW`y@~L(POU=TF^GuRr~|SIM%2kHonF(u32V zjG3kKY7R^5jx8;bd>L1I5cA}``4YV7o&87_fCvDY&u~pan!d! z_g-CtP~-dlsXOImt`em00m_P2#*e z+fr{HP}PY}f2|+UR%&LSsT~t=W96gCe1jvho}$jN9YvFpCK&Ik-Z8c_;G=)*%Comm zUfAuNmm67CK`%|E`dwDu`r}03B>7?2UsX@cuK$TVmvAdIL_MiwP$kW}@VHUvP5A*| zmsQneo7?mIV%Kl|3@ubgh5r=y;lzaOJ#?zUynOjT~suj&+Mmzw=V;r`9%&>|a()zm!^U?vH=i(J{0A!PW(ndKSnh zJMC}nIT$&!+^tZ(HLHE4-N48G%NJ}GhHYPcpzRf7@4MSGsvgXIo%qk%##dQQNqVQk z;^ss#CvDMVLfiX3pBADk(lRlAG}3$kI_wlN>uD z$Ibjw-Ma1WlAuXZ<*CGy;Pflm<8n+t)Q=@rM+gE&)!Wq=lyZ{inlEcL43r&HNcj<) zx%lQdR+DC<(q89q1vgpub=GbTV!KCVh3v~a%i2es745PuV;f9n3WnQc{uz{CAL>5- z|NQ$?wWS|lWDNW_|NW_g-+%u9u_}8nZ}Zz2qFecB-}-G$_fjHvbmaJ-T#y<6*tk3H zf zeqFm!kXiEM+KuXO-=Znsw7AOpM=!|QWxrP+9qt?){qIZMw9bv2Rg=8ms@b}aVm7!q zRd)t{|MkYJW$(B}-bvSu-&on!scgu)cjw0CuSarolg)N*F7RBpK=V<3$j{~|r=7zA z6LK!FMvES6|K@SsxQb_u;}&TC5gnYIdvc3$Ves@f=~cAlYQ?MZ@rS+dgcCH z4~ED6Jx>)JZqLeTnV){09=vVTo2>aZ>QBuNoXYyDbs~=!tXfa(&Ae`GJu7f*Q$>Y1 z@PVK(Wz^1qrCh~?^xeiwM(>lZr0=kQ;r}e@<+_^hR+*ba83viwl+j)^?YB|}b(Wf@ z-ikVH-#L1O@W)yOi<`<>b$LSCMB9`gMFkr{+**T>D}0|BV{>gz?#-H@9>W~Cy#M{- z{Hc?&7Q|hfIOAgNJqvZphGm>q<$?&Vz^l%mx0`y|afarj=;2}03(se%o>s8v9agB! zRrO04fAii$sM$u!QhD_5?x-XA`csp)R&_%)*~ zXY{k=GxffEi;ny@86PQcHf`C54~5FQl`|Hk8LwD0e!~T3Zp(&k?U7B}&OJ`rU1OJW zs^YKO98-dMR!RTjiItkMHXGD`3=XE`=Bic3+!P-F`%OI3tev`c%&E38Eu*Uw9y1hk za}QF}?d11LL(RI7kHZB8+0%&g)tweo2G?IBh>d2NON}e+9~CzbT3g&)6%@4iMRm0? zjmAk?75nLZ%PW?jpTcAX3t{{B&UtwI~1G&JNRRBYVHqO+VL! zQz_xJ!!g{iqqlze$~F}Qb+1!A!3npBy>Vk2Tldt12il)Mo3w8>h*%gFw#E5`^vdQ& zBd4enmb-*yH$Mc>7FVn_x%)byx|7{er4k$x^7zZo;ZAD{AwHf8%UN>j~<3hf~}aV9fdR&|6@rjg0m6!O9|cZ)~P zWCKT)w6t{{1BWI~+BLdvV6@Y#!tZ7`Lp#cs2aOE;O8evdC^EOG)^o9~@wxc;$?w<9 z3f}Q*u&rZwV{9ucpzMC3+oso}?%c^YJma_V(w;cu1E2NlPDw3gnwIi&G&$An*^RsZ z>-W|w%l|LmTT{vZ{^xt^pu>lM5QO5b|L6DCwQ*ao=qy*VlRY@I)0$0K8I8U6vS;d# z@4rttr@z|df7N%0_58M?9b*=E8Szmd8~CR7@7cW9jn*pr@|#Aab4!1?U(4(Mne%({ z%|Od<^GXBy|CW6DIAH(Dxhrnhu5CwlwQcuege&_En8)tlQMR^m@OQ<~zo^nVj=iPA z-y@aQ%gZ!FKd6ljTYu?QSm*ZS&uG0F^-)R<6`gD}i~ zY#tvQ_`&k~$Usw_p7QjhM>Awf4RyIgmiLZXt#}`C^nKMMtBj-5j)j`PDE#tqUaD5% z!g)<2556C4x_Z?4m)ZlVT-)-y*K>E3kA&O z{1!D!pKat|5?a^1SH41R&G!0Fr+-iLx)$Nuu-Ukt;P0Z)idoI zRW!=!?&~fO#{CPG{pu|8q+Ckusu ziEkUP$?UJcbfUsRPluSCG)G}6XZD#?JKpV%?Q&x^1SXH_Lr>|i&aT#;L3g+}V_x$Q zKhCBz!s!bpDaE@R>N(q`t=78xpt#)U_2(F$g!~NFrq}5^7UaEmytp~B;LYLO8;2|Q zr=?VWIQ-3XzE6$cpSRjflZL94iIYPltQ6%$!y2>dOIvTfH2Ix(dGk(5=c;7m;_hv@v?!T?S*Yh>oGSZ?iDL1ZfEV?sdY!|#z zrE=m^=hMW!7<$c&*_B_t?_cVuTJE`ieTKEF)tQsI$uq~C@Tipo{{bf#% zgA(3q`&6dS`E%Ooneg1m*!LOJsP{h^yqmU7S({e%-qj7xT6H@+ zc3r#6$lQ}fdoF74?66Qv&9Q{t>V7fFP{c?uK48SA9+2ZaEXU^(1y+R!Sm%z z=ANwTH&u;2JA1+JLq@&<9v7X*oY~OQ&F`80w1Kzts_~td3myy$IU4FZ?>T=@I>s9w z=$O#-CG0n|#qmSjdxI;9Yekt;rxd3=D{#5gygo;37 z;B2^4&;B6o;DivW|0UBLFXm778S9g$Efzz~k z%a%L8%iR0Twy)Z=jnn+yEIsk!`;Ik^*HkBX-s+rnF735~xW}%kQ@DP&kN?`0EzoD1KOV6dG?0E97Q{BgU&rwN@#T-M6<=K0udivEp zp1=3H`ogcGksA!3v$`x6f}sPgSlxGBokkeGb$4-JWk2Go1Z)Zw|Hh zNJ?oed9r`(|*t>vv?_4bh4`m(0xqm$;38?hR;ORIqudloB+XvPwQQVpwt43W?1`&=H7<3EG3%SDf(XR zap{Y%HNW(6JTzc`VECSm*Y01#e;#~jFWJGqH0A3(N&d^lAJ>@u6LAYgOP4ORyM4coBrJRaBYaR zGDbo6M$zlWw)XPM=esN$%BfE{x;mZyW=2~Mj`gm;X|sR%;RBU~&CGY73u0Rb_>UK# z-*#yKYIFCx1&*U~+IN4?wvzqSK3X+t?Rcg20b@42*gBl^Hvae_hJj>dpVo_W2h}X* z|7o3gL|1l9|IDdVdR0^ZO)!5n-ut!RCWrr@w{GgR4E=^5_a)v3N&nUU2#zZ(o+H&lFaIy#MJ7Q?{zw71ck@&{7TSOsls& z7cpV4B6EAjQ~E^t28WfwiD@-!y?TPXzINBN6fUnmSoZD6Lq4DD$UB^3(G+k)_U&)? zk(;CcHQAI*TdkzqTvvB=M6I}_q&}~3e>zT14G`QL^83-52v-gS)Q>OMNQG9}vK z6t~Fk=|a6}a#JUzB`po!k-c=vInUgBLBQMm-zjps&5v$Q|0^Bq*H$*w>D6}OIlY{1 zw!h}4`KzDj1zvl(x%6YhlG?!GzjlT1ax-;Ch7V``no{Lg#t;Oo3|;B#>pNXZ+!1i> z$@PODlH`txHB}DT+WM=VuXQvm14_b<)3ID{d~_!!qma zAGs0u`^e?2ZH1$l;XG+p99?-l)BhijVa%AT%sC@xj*;99i;x(i%e7EQ`BKRo8-_V1 z6Gf#EIU-j{ky{!a&a#w*Idb0&v)`xRKOP_R@!9A7dcR)JZ~7nk$-<9L(&Jh5 zFp6mU>1(+@*$p37Hla;inqH?`BG1j@yWaGVkyZpZ&KNgp+HOqU^!aY)<)V^rY+J zO4C(1v)8N0@n`#7m|D&5A5^3dTbqy7IzYP>eC+=Ct;!$nrcXY7#rW!TU2wQ)Cz`Br{M`Ej#JW6ScrSDmW|>Gg?M0y)&Kxd?z?sd+UKzPHpn zS6lm(OpR#|*4DkadH!_$7q6U`)%cstn*QQrFbdxC_|5ko-QAk}kcsokhB+^mZbaZs z_XqFOxAMqMXWp2O`Yiknc-=o6m|CNHXY9?N()_ME<@J~8#M$*b4}-;z5Rd`A%;Ctd z+uG`RhIv;W?|M8PW|qer;B`XEde)N1i6u+tYHGh7RF_(R>dgCbQF^U<6z5bnss2qu zJkKk9Nt4CuTfXxpgRDV-mQPn+S>)~?m9p>#7J=#MDO1)#bpNtf)8hQAV1md4nYPF+mh4_{@DDtr_KWIsmQ1vw zsh8bdV|2JAaqRr&t@z!Y{_Pn@dcUrN#lgx0jhi9^;#!{Xt~6h{@n$U90>eIBXel9DDT+kr=<$rO?&Xou(=3~^r zPM0m{)wOvAlWcyoP&-+EuF9b}(lOT{LxiRN`q=MdOCu-l=sgxcVtiXG^?CR!SFgS~Wn97c2M+`=> zal~C(ng8$e&C`M#&2`7I!-JH{kGi)aWNZ<2)AhMJ-;s3U0WsQrQY5X(oh=kN736JZ`;RNl8?xj+flCCsEW*wgWd0=4R zf_Rt2V#9cO$n=lO_t7oGkB-W|GrSe}%leYXm5yverYpE*^Ibzj!`|MX#2M@9(8c z-iKAzqE{j*$vVsUD{G3Ti&c&-0#CilTlW8)ViJCmn|MaSe-}A?w4?`-rO9>NNJq=T z(b`=-gGa|ji?_4`Qr5DgFarWHu8Jqd|LUeiKyTjeYkapaK z$1UeqhNX(HKP<1ouli!X_@~e1W|wG{@+m0$YrJ3gdtX|&`NQ7tQ{Ahx^?FPOJK`L5 zuk;)H{27O0=eqPKOKQsaDn$oip~~CWget!FHZ#n<<}4mB+**$R*&rM2^L5cfqT_nk zV%f`=Qd9xIJp4&UPu_m5KV6dL06z=Z;ks%2H`9D8TBo}eZNP8V1+T}Rh?$9RA-Cq!a`RCx7Otrx*c)3 zVSCG4YrO8_x9;s%UrY_EgYaG9<`TJf=M|__uaOnD{Bvz%LpL!jyCFve+ zN_aW&x<0kHSrsZ}rrw+LykUSj|MO1ILe=%qk2gMLy(92@zR?(+4cpFY`+3UcNaatX ziw2igJ;F(6EXMW1gj~oDJ}Pz-PD`2 zFgGh;RgI6K!plvAOD(T}jV+!BpBS@5k3atD@^0r~a(?s1cu6|X8D+f-ZoeVvw+IjK ziFhG@|f z6+sx$^v^?sjg8m*I=)9=gPh)Ysq*WTNBQZ{&98W)zk<`A4I->jR?N?S!OVuYFJ0wZ zp4UH)@(6Rk9d4&j*$9(qsQEoHo!Pdc$QP^8aY}ysSEZz3)cqHj}rF zlwVJM67RnGUetbA6(UgIm#g%?XL3aR#Rs*)2kIB3?r8k?CXT+bQ0e?l6(j!1`r*d# zN&nom%02Xrr4Q_{U+(jVditID661mJ_+z1iM*YCV_fwdhh&oP1Aul@4vXukMV7LCDuBXn>M23CA@U8 z42piT>hZ|8>Wtw^!EKP;Dl9H+w5M{MNRNJS`Ob6WJ<#d;wfL8M_e|NFmI}ScgKdzfp-|)F4cc*AvCuP27tnsS+$Fe@(*@&@{%N^@o z4z&|{Kiwu&;2SgHf;B-y6LZS-|=Yu7DJ`z zd@B#5XTMfz*$WM5y^4>Ct^B6q)*A(@qr9{B>NGSK_+U8LJUe@GRwMU?5aIdn>)EHa zKKMSEa?}SKj%_Vx4p)sH>=xA2-Fg()?(;IIQ>l($#)Y9WokbZn%GA509-dV)RW>)~ z7IgdhE2q03c22yd%SS~*A}>~*ldEfU4De>)Q^rkt-?sDJ8HGh-kDM<$ySjOxG}~~& zX(;TcRk#`Rex8oL?@vza<^E@pAw1u+s(!R&&FN}5-|PJK(e_!+8szckmgT%I_hHt~ zL0N#rUX?BH)#Ukjr%!p`zwT7`CNX>1dB596KP(&$^q}bkI^vqH%z_WU>?26-C9UUoKxr|SG}0F=m%!HK2}Pb& zIngWT$gF!a@SmEZh4u*;s=y>?zaTgD%eCx&Ihc{TnXjcV!(2PdT=nRRQh7ADchu_l)pL@w~%v#NmA;&^@tCiof$DgD&K$uPo8;c)~i z1m7nHkprd3@!R2~FHBG7B2Vy53g)933TQL+I7^i{d6igang#Kq&Q}hWL^p$FMaJxt7P3V}NLgQVB%|$0Xq0s$C2lxu_d10f zMT@nBpK6{SYr|(ORzpJbbAreiEL4@;x2(AYDzY>x8tvGpg1E6zMcieH!<><@2Fqt$ zGaO|oQV`j)Rz@&m5f(!D*e8fVimu5au9$0!-CKNafUcFX>s}MB$Rn{x?kb78L#GQs zMJ68%hHmD=*Zv3f{KX!6UY(+T?$7&`xi94>rL(xHdin6J)j?&RQ>L4$un~)_*Awy|#oHog=Z!dmESR4pim<+ji z$qN>>sj0*P5i^`sP6(kolUcF${zA#DSk5dfEZ1N8U!bAm1;@n9Ws8P<@@NPD@!H{d zE{w%Q$LrdpwujFidPwEtMhQX+;3?xmMa}I-4oITE`N3$3_2<(M3XWYMq(xdkK#Hfx zA)Lqlcv|R*Wo%+O1J2O(-%tLrxUQ0*OY^rj!va?sh`SjVL{pf@@h}~xG`?GGk-t!3 z&wZs!!zEY8#(!Jt=_YW}Vw`DlS=;ohwAuCpjM>qz`OQ*$rz^$XGWI}coOPusDcSpzQ;%@yMjY% zYpA;mU{$m*Vn7bKdg?8q`PiuQT**j^@*d{H`YbGg3L?t^nX|6HCE&~+_w+KC?K`w4 zCzDcetf;#WR*Mve$RX@-!ap2t(N6jrXHh4SvHEhHr2+mAqA<#M5)Aa`lk@&X)$LN8Qg|c5%B#Q z*({){xT|?naL2PO!=#zhf-JeiYF$3EHe_kqDO1D|3l1?0?JP^xTUO{4$b`8X!_tV6 z`2r`+uu#piBynw=I~7HXzpN62@x4%pIRY`Hg7GL21b0}>;-dV7Ihgi+0r*nBP*=w0 zMHWt>8G<6Z%>E*z(VlYRip0$WkBj;p&m$W?hrYt&;lWd z?d@v8T13$=^C*uBaUG;6082#m=-QJPf|BA2PU6W!?eYKK~h6zd}REuwgO4|TI}ti86IG&x%suVMxJAH?GHjQ zpHJTfa_K6NNU_Cb{`y@FNKh#9rtq}l&jPMBx!4F~k)^PhrD{hk@h4JIbg}P{9a3iCWd@7^zyU_H=!dr_Ef&BUD~5qetk@++M#3sq zsun4*mJhnH93N@^0CzacazeK2C5C82)>ZNKCe#u@yBNKSIBAu{C`nDU;VmVdfL~MR0MT_SnbQA1pF`TpnOB(s|d9LSJE~X~j@d0wv?CWjOwfG=f zViYaGS>@=wzJeo-lqLNdqf~UGEjkW}6ZG5y`a44mz89(@5;Hv5resS-1iFbn=c{o2`kSS<6I2jnsGrvBPVQ>g*k zLEmAKNGiC<(oJ~RLQt$#o<>i__kSggsH`Ie?2sUlCAu=eHn9H?a^esq!r26cE>m7p z`dOe_gyHeU=rPRgv?nkil^6-?Qo?OZS!sE{arf@9Sx5p^;5ik{7tA;p7nKk4#VCoj zW7oVack&TMfNWT`a#x9aO{Vq2)(bwzd|`ysEKOmd`9fW$N73~ic*_^)C2?O&pz4JA zIhDj98!kCPUvoQ&E%8vN;%aSKNCC&(2b7rewgQ@#=t>ny+O(9sl>oIdv6LI0(H{HBF{UHxgVvzhpIu7!(7ZRa1C%sL5i8e1!5^3?AaIi#1(y0dpsz;wy zFH<3h%c-ziF+df+cS$0LX%{`SpPZOEqLV*yGZ$QBri||GY_|9<(TQn1WJfcgp4uW^ zrloh8-Se}Fj18Ho_EI@s01yuUX4LtUZ$8S&GAup>GK5p#W0k_s!vHli7tnWD$J_b@ z^PTcEiIY~Tgl2c*T{H85)inawZaV(TmfRrooM6m6O~O3Tx=chOAaWsmd#KfsoFhzGG|a=NZFEApz%MjMghdsYq_Wi$(-Ta~}0L6O}k;mDr6- z^s3=mmWzprape5Fd zwCO(Ca)rS!frZvx5>n=80{CjNYs%ObT+RPu$~4rN4*t-vG--l_B?7A0!cK6DFVy=u z1BlC)js~-QG==1Ro~w*Gd+K5genbddJ3{OAt69Fzn5mhC;j!iy7T1wuiEcS2-8MH0x^apP$qfcibo4o7 zl?zqzvpnTnZqQ?DxhAEAw~tR>>%d#ciea>i2(gzLe1>`dEm2wA>(N%tUNv6Wq15Qb z4?DrL;AFyQ$6e9wXX*R7+^m)Y_Kw5DLplY#wE&UiKNH&%z++K0F4h}9@9jz`qmIq6 z<*bK05zN?C2B%55UrOZuz&1=q-s0%vF82N1=X6q|ml;YbrpVVT1X#wF- z{VcaE1zMy+9(V8Y{`kVUX*eCbA@D@U>_VcI?+*z)h9k>-&YF=N*+r_>RZs05 zgv0p6E9Nx-eg@PmwSjL{u0{esNzg%Nzc0Za`teg30paXJY(HpQ$_mNnb&Eclhc@yX zF}P~>dFQ0rIXPIaKALxRqCa2>#UgSKo!ITT7U|(!Z7Af>;kh3Rk$J2C6HM)Mi=ia$n>Md2$o*$ z=)_Kr_cW#-Cx*z2g9| zbHD+yBZ}yhsIFpv3SA2=mzz4WmSFF{0-KK&q{1#>A(L{7p!JN+`V2CZ>3f+)%K{{9Du5y{rthKSP`NZMx984@kA}xm;hX?pDpUVze5O+{jqiGYXJD?AU zCnRhDu$mal!!v_--v(BLLWcT(r-evXgI5dw zr@`06hJrEnwFF(Sh%}i)-oBh2lyvsp>1iVgyb~4%xM05fnhz($fO|uF)t&B&4XV?8 zcxd2Te|p7m>w6=3$q&V2@=t&VFlR5ncgR*3)4AQ~>#UNSV&KwEgpu(1)WlV4Q^o17 zM~UG_X2Djsh8#aO)h^vzy_!FI1V3949hptxFEj3k={)q%8CTC8T+)2l5tOx^FFRn; z;An%Qqt@)ilV7qz@n@f()Ne?yqC+8AAb9N?} zsKgF|X~7&_=!JU^B{R^(+4M1(JgsXP6rtD!R7k2qmGIi$vgU>342#7v#`f1-0SCv`!|(d-m4a%%R1z^!TuW2bvFg*M5&n|97yl?N1(n z(e-nUs|1)|Pez4gtKZ#F_%4v_cwT=A)PHx+Bz4~qNF(jDN0(25zjHI6%sM^|7T=we z{)>%|p1z|%TzDlWXc36s@9i35v&I#I0Ez~=ewPdiFG z?_$1CU%kC_qyf5j2v3C_&p)Jxd7-*?;cnPX#w$){zc3gAteLsc=(lm77JR$D0-~dT z`;*F*^J6z&XUfh#2zc!CtL?_aW4^LL|G_ZXL<5BoU$>mFudm>B#vS+Vlyj^|2hc?- zg|=zQ$FSg>KWzE04PcYJ_`uNINL_xLJB1cK4){V$+%NJv9E`^%-G(5)h|Pp>>~X7R zV`0y;Yh)|(BDiNjA42F_DoGzBstFdHoknHD4Sr`&f95}f6xES~)fOCD%ZEec6rNvF zN(izkC`1%lAa5mHhC{5%0F4nq7q=l{s2p`KQL>LL2|P>Sqg>~;iU50sNjb3=t4oW8 z+Pq8O;|!p}@YO#aMVVOwrguc|JQ`@ENHe$rp~Q_nRQ3)Ien_phGK6h&=pgymkT5&k zeGR5j!uz1^Vb#w1jtD@Xa|4&fG|Mm>65aw`sjZ|-N&A4rMZVoN-qNDry{ceH~~v@D%X3ZJ4$0j-4rB)<+4T>H;nb7Wca{aEIkzC;Q=JbeLUHY|r2 zF#6nbgqbXKRfFjs$BN53M-#Ps9KwF$%|Bteb*WR~)AE1BVcf6C*O-gPx-zF=Id^23 z5lPXpS$YfnKLqQBGpo{pclls&iWVb*-3P>)YSD3Tt?&Flq5(^j$Rj1REHw@2^WWyp zg7OFzS@Xu@69=uka*^ajjC9c4S;5GuGF z7-c?O?MAzy{XH5~?y!;h|9uP~djP3w{^;IG>mQUbe?a5&Sy4gE9+8Lt9cSh$WF#X+ z1A{Gqj>o`>K0)q_Im3rp#h0ZSXF5!%7WZjISY3>K;dLv#(pv1Z3;xQVcKyi{h9VN* z1n}_71e?#9K!-#hv2Ix-JQ0i`o=#R5gS?-t5O;7M#u?xulyI;(GdDimo-u>WcxTxl zzNTObP@jev>yA&eN-j(+*D}{M2P|n05yzX4NG!mPe#MQ+9d;Y{?8}Gij0=fbK(^A7 z+TM;bmbqUSw(vS{T}Ej7n9*XTX+Y1@p*6hLOnCB_6F}a)30UZdCC0q|))x?~K=tqK z4Zu>6DN=N08bGL~x+^E2>emoxu~9a*meN`k`V#Yrl(ShEW?>JhnMxUc=5|I~d~3)r zQXw~R=xCItD0A;}o*Y8t0zKF!;Y%}P&xb;KZ<*VO{*LT?duWX%wI-+W@m+>l#|{gA zE;fYfL5>1toC0-OTq!we4Qn^?praXImaKndM%`#@inUKZ*_9wqvnEW)GB}>+Iaxp5 z$1Na^-iq{_pGuMPqjPzL*)fcG`JPOk5K6*j> zd@ZkLoE3`qNWq}p1z?*EE0o{g%i6q0+T?Bt+b4(pEMD|?YqZttz8`e2AfR`7{r9^@ z7Yfqw|=FKGc{@%{rHeJT|zMC0qI_`2p+z{F(Mrr*6b1Ub9QaoS22O3?a7*Xqd zV#_x*9#FNw9Ey)reR>TeD%lsQNLXmOc%qe_ey-dBUUBi|>vGzi*1*H>?Uu5?^~7{p zl)FkR;pWuv>9WQs)RnpyLC>U1JLI5kDBXOH!L{E_jK)Xvq;usc3Y!a!6H)S(ES8f} z^Yhf0FaOpwI~Qmf3_{PpI|g}u?9Bi_|ol5dst6G*C31%9~lB2|vmWQFu?XvbaKIA>N-L7yFK)o51{KmKGF|5KmBC$POssv~0 ztzGi#Zu%jem>T!6wr&Pa?;L;yFP4(_9(nqnN4W0eqIprNAkYB zr_yJk>{g3wXQd;xa~fQCzeu{)9b#ds!CyKuFins4Q9PRoS^OP+@n=v`TnDYZ_HA%o zMa0IK^`1hrIk|he=N*WR=*(+W5tmG*v4seuudJ;K z!VoO3uB8%L*v+P#9W(WH=u}tPaPV+x*VwaRyM6D9>uEZ&ZB@!Eu-&{);`rVWIgGzm z79KA=qRjUgw*uLHBRHd=Wtj_2yN=9j8dYbGzLJ|J=$|5#?@{cd{Ys zE}zm=#QsG;OHntLASaRp^Tep+hsP&z#5L`{M6A z3RNXvb3HMH13^2K;0YRi1`pQqs3H99ysUMZ9-{NtJJtN8jJg-1lGUdeeQdD<3z=fz zT=xbyD;)fd?XK1;W&oG(vDL;P@zFV4P~2zy?RKlWw{^oF)qpwx%co!E`ui#kOhSe8 zAGEaR!yvl}e(qk=3(Qn-n zx=T#$a&7g!5_>aSNN-zJ7UBZVZ^q@OiVll2Omf4U-AN7eb$NrLoC(zIi-JtjpbkfY@+U0gxN{41n z{6l>|cEae}6k>e9pO2(IHd-^l@7ay*V(a3Tqiu zz6@&tDUXZm=JQSVv5~u2azD=;@P8benX8e82knO_t%2|a9GsMf5-dc8T&$XlD;rcj zX9kO~u7X&CBvFFKX7`wxYXxle9(GO?mVN$v2tBroIV9DEgV~!eif(uxD#o4A#hqXC zib0^bJLJhS*v6!t;%Wr45)~>Q5}yoSU54$jQH#8j)e=hH(#76jT^uAZWIu)gZ@VF; z*TF?OjYq|JOxEux<`EMFP#lk^cAbEG?2C_eTZrn~^l5src-)Y9DwuofO$My%Y5Q`o zpNw5o{&xp=v+UL6aF#G}%t}xpU_br}Y;{kR`CX1|6qJag^N^n2wwrHn34ZC)uW7jL zQR3_o`n1}?_26L?mK+;g<#MJkMjIY`o%rDPtkL~=Z94a4Up(I|i=V~K;|+1^&|QeB zY5HD9^QvjtHu}cLD(tQoi3C@;@Rg>u3EJQFD0y*^Xd3-QC!e4))yiA3YrmyDe^y9x z@_QN2yF}c=W3rRh0*_#cth3+{4q{y`RjI^UuJ!aNu|yG$Zjx=` z0#*t{1*F?m<)RTPAR4g0$ITq96*On_FK{Kp?1%n*MC1IQ1Rj+9N_W5G(mUA=RzN`u zt7|TOwV;7TQG%J(pki-GF)p2vXDi*DwRd-?mGO|iC(it;gx=^?@@!A7W(W5?Io%ZL z`^45Xe)tb!^SHM-1yYtCrm-0#Jp0^C32M_cU7$RSQXd{3*P?i)KXL7BOd!OL$}Pn6 zEW|p^dYozU{uXH1Voj{8KnDPYqz#Yf^KZ>!kR@{B?_cX9eZw~9?Q|RpinE||0(d`( z(qIh#4!yzo*&6qZ2l{=;py;#8^FC{b7 zrV{Hah-ub}-gpg5MsE-;iE&E0ecMDkY1&ou7S-Mi+SQ($=l5e{d;Np`0eyh}h=9k& zR;hp!Tkg$N>(2ugda^+KDRy(K8ngPvfK18maXrlO03M(B6%aOx$ZqPp@mmg-gBH;1G zG~Bl%YbD)a9~4JsHGeVgN@~Tiq%k)}c@lW2K~)?8C)cN`I9M0XFVTQtONZLp=9s;2NKB2dsv%@1y>>?gK;>s*$q#GTlvY72&wwM#ce zwBY9*P1v9_3&EtvN#f9U!SO2#``Mvy?!g{GOmpY~O^}21@TK>jCpuO%=Ut_S-p{+j z>=zn5T~+6_gPKyz*(;kbKuQJ0_}8?gO*O8~-~!m0oH)L*2-geK{glz~$3TH&)`FRR z%gC`i-^+Ps5$`R2io{X7b8 zDi(>_e6{&P^bxu0oCMtP-dfnEf7|N3D|D9_%kDFXXo5gHymDejxb{gI7x!iFK2hxy ze&mvTe5k}pQ#W6)z3>B0Y;Lfhd}TCZigjf8_;)~Zwknm%q?*~2%akck&7-5%q7O4j zS4;^QR_CS~UnZ(ris^8nN)jjXrZqp7C{HG!w|a}3yd}H5qx4qecHa$c|183Q9?fJ3 zg3@;QCTB#&bDF8)MDnitNh69^Ty)NRPS)}>;^9qlvQiIOHRtj#h-aG2ZWUf&5y{%V zIKtl*zcDy#GD0#au2Q($skn1`7rD!0pDa_Fc2ZVR5QSF=iTiuWUwpRZFgsuHSj(x% zjzE9)d=q%WbpTuo`0ADm>#1)oWO#6J$-a1P+ZKTq+`i^Wz@51}`Umasg&00MH*1^f zX=}JGOw5V-(nmxuf$JUE`N{AMuI8(!?q^$3vjFl?|bxy`iy5=D9rHsA@sXH)4I zrcSmxHv;0hSktIaK*yrde|Bx>K)2~U9o3?e0E1}V3r0*p0PwRdZ92&&?S7>H z%-((3b$5sRlFB(ROq4fgSkLCgh3*rdX}7glf<%#O$lQD>jM8x=qpC!DAL0)}*g)GqK zpnfSYv;$6Q<)TKPUn~^B+f_s;UkrtFgRKx)| z9{?xqrqN@aa^h6|Ehn!Gz=~Kmo)b_}KY0$rNoLS?gP<5&I+qKIr=wmp82*+ND%fSV zaaWP0IZ#0C=lRAVkdxT`K){a8$3z@8L+xJLkNNviue8YFKyPB#r6)R+1i`GUE|@n( zlLAS?Ir04^$-PKA={{;j{lEfb?JcdxFDi9b*}g*;YUbD^XoYa=I11(W%9k$HD3JDl zZ^MoaDNO^GREKyylZJ;s42{pjEnlTyB1OZGmyO|OuNM$dOf&=4^r|e5>_gOd`G5<* zdq3jkT;z^m&+q_ISrmu zexI;|y#Wb4)oozE>olNM10wOST&gTUPH7!|vc{?5o}L|c3TCW2-ao6{M~a=X|HhSB z&0UNGZ=fAba0`kquHdrePo1DZnIV`Gj>pw}|z>rqPk>mtlco;}o| zGv@{BhLaE*9oFy|r_zoiaPkw>j#7kZ|7m&gW-BI^_&DPGJ;B@m>}RWWPQ>up-`(`+ z^jrR|LKL9tt0m@IJ_f@Ro}l;!vGYaJ@WfcvPLNxN7!-q)TZ_#EK_y=Neb)mYZ#QB9Nup8$iPA2Zg~yZ~kDEP#Ftwv~B66RpKlw^IFmG5(C~5){foJxHenjIbO0NTI{_eHUVfn z#|%7qD?WtI=h7EHGC2FhF4y}6&~@;sme|c}%e%mce6WTS3Tr#M@ifsh&Y(k#V!rsU z>MXPir%Y*%A013K4vHzuuHhGzd5xenS?1yxt|ODsePY^9>(QXNUFV(z3%crGlz>1^ ztnjS<+k>RHlfjZL zJ+OPnHiht72QGJO1lc&r#Hk2V7Uo|h^#4@3W0vt**Fw>)azQb|^jl9U${XOExF^`X zlu&>_r25Gc@G%?w%uN9S|Dbj+;4d?u3^4BA8`l=R%%gFl_8mw3+qs6Ck?0KoYg#D` zHf&3)vxWT(oH=*weq3^G+KWKJ-Nx%@HFktogUNSU1-@-L~1?)_)-jr$-kCzU5-|r1c0jqQ2g~1?wS& zlv??=IK1ool^R;mtUuL8gXz7PJ6+amCgmyy0AMk0O-Ew5uTi=Y1y}(NCE!-u;PxGw z8x)MbnrLzUxs8tnFonr7u&zV9)|zs@UUtOiqNvh5iYYu%1L)(R1dJKGVheT$F3IbM z8DwPX7fToq4h+prWTT*w-kffpwowks05B=ow_eH7Sph%7Hl{>fb=HKo3jr@u+ONP# ztL46kW+y*jV0szLxoK+9Lg5k7F0BuM=J;LS4F;j24Tp#Suz|}1CGJFrPF4#jd5aWR z79-qGH&qr8X339N$@3~fiGTwiLOX9T^;VH!5F3H<86J@5B4Ke{rT8GEaA)WHba3Wc`!cwL4i7645Pxh~eB zj%t3Td~^!Scm)`pD5X^|<73TDP$)c3n9enc5_G8+eN+wJC7y1YaS1-pU3aP!0m$kN zw4Dh~XseZXgUu6JEvW=p3EW_?FWSL$N;1rXrM>$xZ3hNI31a%#2Ad?KAX2Q}ezWbg z#R5Qk@c=W9h<0+!p|}-LAfM`53AA_Vh3V5vSKkpt(B3Pm69Nj={9QQfwYHweH9sBj z`k$K9B7Ui_D-kT%gR`URd-`(%XU^mKS(_3)u_1Kc&8x|o?j5@Jz|fRtiS<2Ew#}FP zygnLmoS}!7f6f~M@8V`&)-Ih|cKfm2UnP#MQtag3_3G55G~4eVarOlNMIET^hO#8L zQ{7t}@bw`qp1-K4M?EUXbh_a6!JL`udQfb?W3I2}A zVCOPm*PGNcYT>XDlZecMMk>}xqs zYiw`-I<|Kj2vcd@A4hnj##&P&Jwa*XH~BZ;76Gw8I>f zqicXiw0lXlhz|(3>DA1@*s^s!RZ+>bS@cOm6jvcYDE|_JM-)g^oJg^^xIM;YLo?qK z_6e`Ni!vea_q~nEOfidVdPgUU5rdW3g*pVMF}JnR*p_tBdgE>w3B?C!8(}!}Np3a( z`Qf{_`N;;-QI*32*mqkCB#UqYf^TpXFY8m$H$tQM9eZ*u((|igOr9va~e|GE5SugduN}&_Ns9FkmLm^E(kl7*JIc0pHq+RtxJ4WZ-XBlqVw8Bc2q3xRRL?wzj`(~}yvWqK<$JlBa zvyU|0JhfmKAs&(lH2z#r94um&EOb9%$0Qw%;$;yP5m11=+kwv12!AJsn?*jO) z

      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≫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

      wGN@4Op+F(G(~6HBN3w1MI<>G`i$uSz#w!xPFt1 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 literal 0 HcmV?d00001 diff --git a/repo/objects/19/6bcbd53dc65a27248fcc6ae0073a18a13cb9b6f132f626543b2a4657a732ac.filez b/repo/objects/19/6bcbd53dc65a27248fcc6ae0073a18a13cb9b6f132f626543b2a4657a732ac.filez new file mode 100644 index 0000000000000000000000000000000000000000..0859a257749028f28a022ac147758f8f1d424f1c GIT binary patch literal 1022 zcmV=~X0zCV}+ z&sPXGnZ#XtX^x7mbIy<%t5SH!B_?kfzTEkv2Xq+>C(}vrj3vPRB$(YTmvBG#VE~JP zA52E!bl}4x^cVBxT^C?UZCcb4{LcX=?vC&fV`}i?byfB=UaH32cnlfYP`uoTvJGZN zAVNjGe{q(Ca4Aw(B!c(Hh^b8y5Ylu&V~W?AF?qk&+ithrR1{sQ(jKo!bnm8%L_N>D zU0hX;2<3T+eCG_(9W^{aNv9dQE;9cb$R6izM@31TeU7xKzQ0%pvAcm zEV*q2IY7K~l8!mdtB<|wsh+oTE56ltN)z*~zP=sFht6lz`#rJ4{Al!Zj_iBFTmO^G zKk#+7N_q`HoGS*qn8uaZH0z%P zo^Tr{gU+h5nq)Z3x6YxaX{6Ra-mtowZo4LJ&Vf^?C-+YsM2D_)dl=I;g$w zPOo8lZj_?gU}w~RcA)sbt@M5i>3#p4TK~S2j0mKCZ{E`&J_FTwilRR910 literal 0 HcmV?d00001 diff --git a/repo/objects/19/b853289a096fe24bb31d76e566d493d8f544da214e61e95b9c94c975970fda.dirtree b/repo/objects/19/b853289a096fe24bb31d76e566d493d8f544da214e61e95b9c94c975970fda.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..915f5177991eafabf841a92730ae00838e4bd210 GIT binary patch literal 73 zcmV-P0Ji^OaBy<~KhQhHG>8CuTeNSM<>HYnUIewsg;2L=@49g&J0m^5L~0K48+^fM f^R@%!g~#shwsrcX64mT;_9=+#3v5(~B?U(S4re2X literal 0 HcmV?d00001 diff --git a/repo/objects/1a/4c2773c459991cd148a6379e9469d4631d829844fcfd63b1ed663fa956625f.filez b/repo/objects/1a/4c2773c459991cd148a6379e9469d4631d829844fcfd63b1ed663fa956625f.filez new file mode 100644 index 0000000000000000000000000000000000000000..d37669084dcfbed7a4cfbcf9868677f424e5ccd3 GIT binary patch literal 798 zcmV+(1L6Dt000^Q000000000000-Xy00000000000D+_c000008I@ISZ`v>r{+?f9 z6=`A!wbMRAhr~;zQb9XPyU~4#OmYyf!H!}FC9AsMzO&KVAAh=3JEENl0A!I6KG#2a2=)&P$ z&qtH5SNP+jgJE7qJr|$-WZ@cA&ozBd#X1Ek2Q;nOCrs9fw^ZtAK}@A2ccK`U8O`-R zU27imBvT{UvH-fC$LR)SLIWVrjJ#ROkj8A8QpE)Cdhgz`m2^mwEn^lCo38if5&X>j zhr!*=@X7N^xMQr4C%9(HjnJG;X`;pO@2n2vQQOU})oYPTBH6C?A+3a_z!mvMzI^VQ z=zra)XfsBJlpqp9!j$nT&6~5iN*Q014decX=DuWWj#0IO*GTRWv~6jefwW<_f`vqa znq@T9!Gm9dL$wuzO})b>9f{^lYF9sRlhTM=92;F`af(^!+>=x&2rz!9mV{FP((KHv zQ1@vW3OT6b?n#SwpB|i~7UZBfTEs10*D*^%Ja0b-IS_f%MKG2Usn+C&5v~H4Lc|2P z$kq{VxitCaejqZg%Jhorp}LeHqAA5wR~ehz+etkF8fx)Ppa3r)>@h{O z*`;pJtkZGJwUx0l@_$ub>2jbHY00viPGC3K^dr;sw-6_glF0n+xP8296JIYDr_C=m zQRlWuOBV?)79U`h-!zLA({te3s@pc@o%>+Q>|<6@W9{|!_qXBaAA!XltoMdvueHY+ zesPBH*sI$=liMlS@s`I2P=LbDP?hUkvGP#05LkJr4I8U(r+@jLSMW2lNi-3X)@N zLZzyZ{h&IM0SgnWHDCCqXybm;n=(*ag48MEKLXNiHvI}QfM207*W2qBlk!o cOaxm@70+f)g(kUo{5F7xY(=iF4qn;+0Cb~$+W-In literal 0 HcmV?d00001 diff --git a/repo/objects/1b/dffc84010cea9c1eff8e863fa521e89445008e9c9cb2fa3f30b696d3ab1aca.filez b/repo/objects/1b/dffc84010cea9c1eff8e863fa521e89445008e9c9cb2fa3f30b696d3ab1aca.filez new file mode 100644 index 0000000000000000000000000000000000000000..68abf660d095da8dd732e7af7c77127613228e88 GIT binary patch literal 939 zcmV;c162F~000^Q000000000000&b500000000000D+_c000008Ld@IkK#rUzWY~{ zb}vAX$wPZ#W=Ao^FzhfqO-7tXZM$suY}0LZw_#C~|DI}NmYIaz91avmKT!1*_m;@WUhE9;JmHD@)WKbYQ5;qvm;Gp*3v7&p-b30V2)z+`x<{ zp9LDYm8XMmYx%GFj&b29YIjHW4k9W@yVNSzYzK7AG$I(4*#pzqhoh<>VG=Z^+*r-y z$|7(}9MhiCuv00|jt+-pl}u5CEf6f~odK2Am+@=^W0a_wfJGGxp1_nRC=CK5*G^&z zOd+muoW;m-ST`JCqzITh!GMBX7hhO6N{nFNE$bP{bT1Q<=CS-4)qXug5~7Qrf-3^&tY z1&hsUF<*y1z#1JbbO7H;a8}odl9-~U!kbgrTPms{ZX$((?U9O`Am0-+1_^c4zZcGd zFrj2#2T978G!nH*22$BB7@~MvSX=gcy~E+)=d$vZ&U@knVtRKz0rfoZJTelU=Xebn<$#kp6|W)^vWfETY(^CBB~VO-HSR>O{|heDC-yRUcKEe7nLan z_3NGId5K`g!14i)p&P85v*7LRiKjWzwYjfd8If$pn#D2d6CCtUot(fcAKo7x&~N!X zAAAajk>{OM`n43lP&XvhRM!DpjbG@LGz2vDA3;_^lvcNiiUZgyo>GqO?@UzK;-s>7 zr!Kf76P%eYd{V~~+?tZn@6**CCbFz-khsxs6O14KsYY~S#dO-ffnE<VJy~DV@r@=h{{@ICU7G@wm`vOx;+muMG#CdZC{KZY*l>`eDQct*q8^9={MWbX5G( zZMySf>ba^gVfvS>o%(-B85kB!=EVDJeHvd)CxV-i*OnS-|DW4;%3>5vY9lFM NQPL;KHR(5(!(ZV?x zA`_9(Fy$HMJO-!X`r_RUV2R2>#`7EvgD#A8UKz1Z9dt&g@bUeJ&k!133JVJnJxH{0 zrrM9bYwTb585go2>Fk{FHAR?GbZ+$C@C@iPF^FJw;tt&404iNT#1$Bfg>^>k3Wp#Z zX^cH>Ak(o(s+xyvg^JODOA#EJ%z{pu!*sEMDJnEv!m8Lw5y4zUs4N1f)V0N?7{jjN zsS%S}!}_QJCYp%36I%5E1^Eq>Xe^!K(^HNkVGnfEmkxKeasxWAai=7=0?FMow9j5E z{<+2&gld>mol`w25mJQ*Atme(3X4f0do=|G!`&>rT5dw{7hAaVgTP;e+aU$JRFk(J zT0mD>#{7!R^XnkJr zbdI8+o71M#)&2sikTQ4Xbl5&hIur uxA}P-dH+TPD3M!y6GItAN%yDCw-JNE%bs)#K|Q0`6IAq90MC1MXukmKJ51{U literal 0 HcmV?d00001 diff --git a/repo/objects/1e/6c52727940e87716025c7df2991d8f84b5b783f182bce7ee603fde61145b92.filez b/repo/objects/1e/6c52727940e87716025c7df2991d8f84b5b783f182bce7ee603fde61145b92.filez new file mode 100644 index 0000000000000000000000000000000000000000..98a639643e70d0f04ca17d2e5d7878736f85ffce GIT binary patch literal 1066 zcmV+_1l9Wh000^Q000000000001A5m00000000000D+_c000008I@LDZ|X)6efO^z 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

      tlMMEW=1)*_kOFi(p#a)Pcj5mM61y0V2mPdECWu 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 bpuSi5qxkE+^MzkNKlkrTMgNzZrHlUobT{26 literal 0 HcmV?d00001 diff --git a/repo/objects/2c/094fd75febb27c8635c95826c9602347f637ab314e969a4a776264e6820545.filez b/repo/objects/2c/094fd75febb27c8635c95826c9602347f637ab314e969a4a776264e6820545.filez new file mode 100644 index 0000000000000000000000000000000000000000..c010ff6aa6b06f1221929123d8b82cb18a365f72 GIT binary patch literal 748 zcmV>69#dPVi(42a`1)7vmW&NRt%`ch!TE32tOU+7SdFU9Y&DQam)A zddGRKA=+ucxnZ#I(&!FIa@=A?*6}yKJfE=xc3_&iw1lsfTbQ!mcgS)#P{QxGc7xZ< z?>(lFx*_MLWIs6r+2L9$g$F|AD63SbMsPCbqxf<%i!m54Fds~(gK@m*bF$A3N9(3F zC|Q(BGMQaj?(v4j*M!@%>F|=b3{FNjqjJO%HB(c2Djg5B}KV*q~ce@srU&W3Ri zY{R`~m45ROBs@#6p;|8lqy2N2(Rmh)cF7ll{{Y{hE2T4q z+&biTYggBzv~tDQV=Hkcd%ahUwk!EBa<6mGfm6o2Ep26F$`j^1kKsw>z0oz3TuZW% e#H6(I(Bv5|6yH*g*Xo~`ctDzeF$lxA+W!|;sc8uS literal 0 HcmV?d00001 diff --git a/repo/objects/2d/934447792ccfdfce6ba66cb9342bfc9499bdd9eae4f8798809e41ce0a76ce9.filez b/repo/objects/2d/934447792ccfdfce6ba66cb9342bfc9499bdd9eae4f8798809e41ce0a76ce9.filez new file mode 100644 index 0000000000000000000000000000000000000000..4232e3c056392ddbcd34df1d3f68996c261a78f3 GIT binary patch literal 1335 zcmV-71<3jU000^Q000000000001adS00000000000D+_c000008J$*bliD^A{?4!1 znS9|W14-MoGbG#;I4(!R+kr3F`@{%)0X4GZ$}$|2>3{D^w!s*ZYr_mP(rWk7zC62D zvj$8W9&%qR_`pJpSO7-Br|wT9z%5DxA&Vl^6{tZ^MSIQH8w1te75x1A&0Fv^+wvI3 z-2WmlhW9dEG>nt~u?`s*4PS-VWN#t74QWSOtu+gQmMe`2v09lO)7XN&O2B6lGzL62 znlBTBzzz8rG?j)>1$?!)I3!DCfEvsO!JrOfP%F3jFn)j!C{Z&3(_|^Q4@2&wj1d@J zZ6)yr16Vp7YjJCRm}fq~ts-D%xRP~1PUjl7sAJm0FZmrAU>%gpOO+Yxxds(kyDM^c z4}zJaX`^x}_+yL#aOsdYDx!Ec1V|C?xDc>JNMc+iqHZBb86F4T-Q>Z8&iDx)JF{75 z>^;3BWwTLqYK!Keco+#z$P|^P8t=(@i!kcXdUs^f=?;bi?}QM}ANiI% zW8f2`UM`#kVM58Z3zC$NX(ZPME0D_6Ato2!Z;Xjr&E{^mYpi9`PZ%fHY!*F{lZuqejB<00yk z11mWZj3_JKJ~|bCW|~uZt}7K^usDYMKSMD$8d*3)Mht&AVaaSDop?O#S5Di%z&TJg-6Ihx*v$#uH(@Y(dG(R;V+Kci30`VXbPoIU5v z4JT@+33U61sQso6>5x7rpjE+!?Xvor6r42F>A~O2w z-S^Bmsro9&YEz%ws+E}D(3{KEY)wW@DibLMClwAKZX zOe>Ep%!W(4Enj`?e&_R+i3Ce3`B@X3VApLKofjSPpk_kHV2pEJgZFoK-iRi)gt$*2#m8+@t2}$!iXlQOZ z`Tn01c4m-iER_=Uuo>BB8b?j@xSBI9JLj%{`M*o@KuPI3Od4`~XkjvIZ%~GJBsYHS6)B`xzCZV@Y z#uyg#lw9$3wfw<{+H)xK)D&%Y_Pc*(l)eUvMwLkOExkTl2QmayE*~uyj&1$-7u-7< zIq?}cE=`n0ctFUw5H50#oQR_mKQ43>wRfRe3iSm%)V4q>Ebyi@CKh>tOVz==G+9>c t2kL%t)9=yCw!awly^i-Z?Vpb1+SQ9Ht=4&Jt}66ML`kf-c`Uyl{{^g4c&Y#Z literal 0 HcmV?d00001 diff --git a/repo/objects/2d/f35a4e0dc57978dae1a88fe6cb7ed138a2013d9f4327a187a0e1830a311f71.filez b/repo/objects/2d/f35a4e0dc57978dae1a88fe6cb7ed138a2013d9f4327a187a0e1830a311f71.filez new file mode 100644 index 0000000000000000000000000000000000000000..301b025cc132b4c15add17590395705bc27ea99a GIT binary patch literal 778 zcmV+l1NHm>000^Q000000000000n9Q00000000000D+_c000008HH5uZ`v>r{hq(# z)JhX{DCsus3v|_h0i~n-3_^UWoa92RId)__P&Dm--#O6IwcVC4iSOP$zwaAP%(N{hfP zX-op8Ay)}c_l}2RrA$zR%@8c=+<;1}#bCUI0ZPy()-GZ)OdzUw zTt(k$SR6G#UlB30T*(F?r@V$OYC~)I^ti{7umP$%mm0H9xdv6Zx;n|-gJAYl>U(cB zf9f#-E-U6t71U2ggw)}V3jq;AX)rBC!%+|zR>SaSvJ9a;Uc;(ApSQ>1xUdrhVq(k2qf*cQp$82OfzF^FlR{%@QkVM57G z)g*yW$4JtKDM)1-U`XOsW^K_7g57TCZ)E8!y$QsD#01wq5e1%i&Qltl6mBQ$&N2)q zxQ0p05+>AK9JopP0b6w+S9t4 z9_!{hQcAe#D+Jq*>C&6Vqbj&4=n_c#<+4r!9q+Sp%0I1Ybuv#HYQurHiqmgH?<>hQ zS4#d^jA^nD>b6|ll8l`#XyVDpO=Yyj5sOd|m!gZJd4jFSroaegP4mP~a#+5ycU zB~KWXe}j-7zNP(M(b8bBkz=?=``1dh4`&J-9dgmp&j zI)@+}X)Ho*pwWdWkDiCtI#r+nS0gwyjRjryFSGR)W~k6G37c*w1&5{Js4N1b)_%p- zSir95@f8nVL-woz9yAd%C$t&?3fecYM`P(7{yg`1CLDq8&t<@zS8hPJzV4dj9zinq zQaTQPWd6lt0Ydf6wQk8zO@!p|Af$vHLT9n;D6t2mv`sU*5vEEoABS%8N{zK*jD9+DIy*hFc*m~NL* z3Y%@ZNwRnhkfE1_p5P}3T=p5!Ar|N;czd$_NTFKNCJU(99w}UoVo%B#aGI#g!FduU zwW@lP1b#V2lC~&8X*U8(65rO&wUaPB91i13bz^O+P@YI^csnMdFbJ+hNuyK3D%oc7 zG+F0qvdqZx`z+4$#d?6P!0znnM11D?{gms_eZW=hYk~-9ea~=9j}WZ}4vb^!xBBxqBB+ z^B_2FPx@7SqWn3H(W|%z-$;X@^?##tD;TzPJLq%pH>gg^)|qQk@B4gHID`sa|1`L! ze3f-KXI)^WcJ`!huSEe}OE(SUC;D1MoTH@d{RPS#bDbURw3fhYl9f<>tGqTyqb!R{c=q&5_#WIly6;YIE)=9> sn_0|SLqVpj5OiLG(mBHe+Sn6r@}r2Jv%LxaBj6P(`lvz}zIwj@2YiTwH~;_u literal 0 HcmV?d00001 diff --git a/repo/objects/2e/2dfabec7461662a719e51b3c0c457530b2358792f5a40dfe4ffd8d43187c9e.filez b/repo/objects/2e/2dfabec7461662a719e51b3c0c457530b2358792f5a40dfe4ffd8d43187c9e.filez new file mode 100644 index 0000000000000000000000000000000000000000..115ce8d605baee11cacea9f2ba3711d9cedd9eac GIT binary patch literal 743 zcmVx|fxjzc)o znE2Wt*NI3E6%XY~m2d->aX4;r3!T=%6Krap z3NfiPERPy6(L~Ig(5eeA=-gn(jinf$PInv$yU=xCTFh0-4RlfA+9dY?$=oxv=e=eA z*<%8sYUWHAFSa<~^#V#85do|dv(QBX1Nr_t4X6(N|daUX}j+0WkX{9iyjgAo_8ivTAdWv^Yw5QMf2G* z3Zm6=IREi*<(<)qQ2gyff~r`S30-uzC~Y<@ozv>V^J2-Y#kD>(nZYq}cQ2AHcY{|2 zOUGPkhx!ryW+h|%Md43_fqE?$G zs;p~@jyhlJY7v8H#a1zC8)-W&64YjR(s(;Lt4a$acJwB}O6^_&T1Po`rc_V46RQ7G Z?8)B?d8f+;-fse)aYdgP`2O1q@CVl5VnqM| literal 0 HcmV?d00001 diff --git a/repo/objects/31/3500e53c59037fe506e449da10de4051cee6d03005f49225059c6d35df8f00.filez b/repo/objects/31/3500e53c59037fe506e449da10de4051cee6d03005f49225059c6d35df8f00.filez new file mode 100644 index 0000000000000000000000000000000000000000..01c52be65bac3c39ef7751cd378a705e9a720da0 GIT binary patch literal 793 zcmV+!1Lphy000^Q000000000000q$i00000000000D+_c000008HH5aZrd;nefL)o zD=@TOVDEyxBwaB#OIvr%-9ekDLbYjIn=BcUoHQ8r@1yJl4cef~OC*x#@K7WjoC1@U zmpsu5u2_i`OTjAmdGTQgxI$^6WL1UQgH!0MYNL5xSUB#Vz~_&jzCx_oiW?a5erFIrmUUELXAv$jPr^h1$>^zU*>r2|J*gcR6O(Dc7JXhdUv;8xYJsLw)a1 z@y|7;z-7Z+sEX<-h>$8=b0Odnp*EP+qT?ti81AC@dc24s94+B4oXx^fyzEi1EfjfO z(;6yXR)P~VRi&xN8xrprhJ#uEnjqmtbQ{G>DgiE|cr=*L;c`5K5GLU)j{1w+a0Zjb zY%-n?e1JJRS?CDfc;Kw*5j|pxmKtx`vX|6UL)t_N1zRCCH$lE4WegIUsQ)+4kuafT z-V{l}&(BEGq70<69WW&EtgyD~2Els0_H$YLO6P%SNlb9=6H(xKM?9m^$>3(Z4DX|P ze>{o@_wjHrT0C5PN95rW4?8^vmWilSgm*PBP|#+W;FsF4CvFlYEk4;2W!-xG;@uwL zY&s;*x#uN<83Q+J6B4Mmy-x3VnxpN#aQ9nIhlFlBy$Li#-X9O>H+>ji+zk4$=e5pm zW5p-xeL^Gjn&xWotvr7!86-_^_`!|ra5S7&@y@qO~I4w)fMcSZWSsmA5PfXv6 z9QDrWQOhhQH0-TLPRS_oM593)QAeJ36kE?0{~~~B_=)6#|?Ps7CR zA`MRSzc0?bpnfZs)=>@>E#Mrj((Kfz*nxnowssR zdxG@LF^`SK&g8N<1{}84IwuQX5+27e@-1l z|5p6D#vD>N$fc>co{|B%!h=)_8$#`D^+TVl;oo(`dOI&C};g4)&#C zZxF44lDkStM&_z4YkXw#0pa0hIl1GM(Rg-0OP{#}OlRr*X0^g}vBU_;XqnC?>-*6X z$$FVARyPA+MS&Itfd6T5(P+d?%*nIxt}XkSMRm+g=&+ zukOa{G+oR;-$fT}m6~2VI7Mfw&iR1H#7OP0zB9cklyD^ryh#v7y@uIjoDPj3>Hf_PF8+XW_Puu%7P4h7@BMz8F^Kboo*UoHE`G z(Y!o%f_xT~pF0KIBxE!kh literal 0 HcmV?d00001 diff --git a/repo/objects/38/c6b874f3e94638203066d1f5ede725f16977a30cf0728832f11717c4f76b36.filez b/repo/objects/38/c6b874f3e94638203066d1f5ede725f16977a30cf0728832f11717c4f76b36.filez new file mode 100644 index 0000000000000000000000000000000000000000..842287fe091d20144baf1c4907a9aee7e4d0bf36 GIT binary patch literal 2250 zcmV;*2sQTr000^Q000000000003mGv00000000000D+_c000008NFFsa~e4oe&<)H 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 literal 0 HcmV?d00001 diff --git a/repo/objects/3d/4c5e4fdf65570520dcb6f019f815ed5037705bbe2a4af52d76d8d88959ef41.filez b/repo/objects/3d/4c5e4fdf65570520dcb6f019f815ed5037705bbe2a4af52d76d8d88959ef41.filez new file mode 100644 index 0000000000000000000000000000000000000000..7dc009a563d9a73a62ffb529d1d7c6a658b6e633 GIT binary patch literal 1060 zcmV+<1l#)n000^Q0000000000018zA00000000000D+_c000008MRhjZz4AoeV<=( zrAQT_2+~&j5>nI&OA>Yo5EvBYDKefrj2n+VvOQ2#wZFaB!%PE#Y04_NgLTZfa$b!pr84XMz)EqBnkk(m7p|3}b039@_2yLI@wrV{p*uDY6=f)n zb$+>-t2cvg_R8#jL3L#xF=2&tw$6AP>m#d}P|C_v2QRgjB>CIL@Z(7H7mOPZbJ9Lh zdR2(HuEEpgs&cg6D+zie8>;??vavj`oT0U1r83&azZHH5-fpse&#wOgcT5k=SHm6y zzQR>=K8>}{hcbmOR|h2F{^w|TKOnMxxVY#-rvvoxp}%=E8;~%JcEl}=ciO1;L$^Up zQ>LwzkHP_6xkP5(DZ+m-X)j-+6aTUh6iJRPWj%<-n?9i_=zot;3E4{R_F?Q+@uM@# zBXc9x^y(aCm_pI9{S^7jeq7xrx_aona=5p|NHY44<=c6l($}-7v~-}v-E9cmpSq{l zN;~ggF5gHoc1i%>h_U$+>Awr>G||73=J9*vK6&pzlSx_WVfQ%fvzHgfU(glnJb~Zy e*E@0&yT`;RuPHKggTIInXQ=28F|VML&*VQ4a`{~V literal 0 HcmV?d00001 diff --git a/repo/objects/3d/713bdac06f360226909e1c13f1b078b8631c5a0d9a5d0ca2bdbcc13e3f1291.filez b/repo/objects/3d/713bdac06f360226909e1c13f1b078b8631c5a0d9a5d0ca2bdbcc13e3f1291.filez new file mode 100644 index 0000000000000000000000000000000000000000..da192a25e865074b6a9f1b2f3b349c6bc5823a9c GIT binary patch literal 1001 zcmV-@oiH*`*}Qax!&kTnz0?B9iBR zoXbP>c(irl_$P6{3>DG?YuTg zaY0BfSb^(VC43z=*?o`#D$O7Rq4#&7{588Gnggr>+4ZQ!%LNUFc@LVrvnciBx6_OKVycJa#h`tpd zbw!q6FXPqA7_Ytp#^sPWe~yx`RmbahFUppGtE&j92hy zc#qG1MR>c{mK`3FepJLh1z(O~bh31;-3;Jfw=POzX8F*b%`A7l+H`IF?%%9o@7Gah zxB-3f(4UKKb27Zb2M~B~1@=mu2zHf7P*uPZr&yFNDB;_rP}t1p^a=iXe(KO@d!`R2 zVu#jXlMprYGG|VgsKd0x7W6C!LT&X~4j?dbo(HMR&rpb7-tJ{i8nkIs6D-y~c|K;O2-HRH3X43I@W^wTk6mH)> literal 0 HcmV?d00001 diff --git a/repo/objects/3f/0dda5683b1af92fbca8118bc7602542342c382c9830046f3815b64828a126d.filez b/repo/objects/3f/0dda5683b1af92fbca8118bc7602542342c382c9830046f3815b64828a126d.filez new file mode 100644 index 0000000000000000000000000000000000000000..1f49a10db7c6a44631c38fa7cb19fde8d2ff3f22 GIT binary patch literal 1277 zcmVfi1kAtu>}iJKp1e47%`k+hJ z&>l^Cotw+{2nIK!!S%S?02rfj3yr|PBsjJ;q9jJBsqm@{`<9BT$hS0tB$y)=H$*lk z&jJYPME!T+j7X3QKC?m6;+Hg%YrPn_&~;Gc;^#!`ywz+zJUldJyl4nHYo?`$Y92R8 zs9C9Ov6zld48zGq_qN|247#I}_PBd@UfCiuJosj)P{bvvQxtr3a{zwEpvR)^PRr$UgndP=~WQ;o*DJDZ`x40UJ2 zS{)i2%!9PRTA9n?n65jWVp`vesD|Z+PxVupxR9;{SK7uD7D|iE20M^+FdwPrJCD0N z5Cp}H*UrY<;%CD$Uz6GKlv3ymeDnJ zX!2Y{zI=~f{nGV&Y4F}YMeSyOY4F6m+>P6eeD@U(+}+g-J<$QBN4oh6X83>jON`xo z*`X(Tf-~m2-AR#Nfu8Wlc9t)2IrfClMdnt?4n5JE+yQCeiCy8NUdysSyyK8NzR<1% z?fOD{4z%YB?K{xEFZAAl-upra4s_rP9XimVFZ98IKKMc(9q6Mk^vQufy#|#{6Mgon ziPhB8Vboe_N#=q@kc+%9{~=5ZNKJ$3Fi}-&=1X?;_Uc#qkR?)fAV%ghecWx=bPPX@ zQxjo&GI}tRDqw`2Hz@$RVuBkk3W n)!BBl`6|7*H(ofguldnvtn^>(x%r~Bm^y4Br@alc+4=tiM&59= literal 0 HcmV?d00001 diff --git a/repo/objects/3f/2a39a366372789f9bc2558d5bfbe14a8e547b336c00b5b0f49a5d342369205.filez b/repo/objects/3f/2a39a366372789f9bc2558d5bfbe14a8e547b336c00b5b0f49a5d342369205.filez new file mode 100644 index 0000000000000000000000000000000000000000..b80446559b0d4fa94ae8d659cec83ae2a6528339 GIT binary patch literal 1039 zcmV+q1n~O+000^Q0000000000011Qu00000000000D+_c000008I@L1a~d}ge!pL_ z6TjFl18F;b!KtU1V4D;J=8m{LWrS|w)as-gNq08QB)>f?9Rz9vPI=Ou_WSnR-A_7N z=fIQ`x!^{_4a>1$DL4&(Uj1|jSfO%|v!Xx~!8vqwu`*(rIXLZ}!7p!r{tXhtDq&$L z_&*XYyi@g}>B9RzmN^r$$#s57cu$dJ6kQm-G%N>NE({`Ay>O4rU>jDt1kMx~Ooequ z%u9zL9BE8j+CZ*Tu~>N?dRM9x4Y&-!p~)@iMR>RwPT>X>8YW>}&ZXcm5FC|7V3gXw zu^FZ?4?G@m?KQ+}4REcAm^qS34$?a&GKxa6Eht6cu878v} z3U-;MT|cxyCGtWFVy3DL&3HxPJ;PmZ(!C`}=c+&GCo?JmuKUTb7sqftnm`A}ok`N~ zP6wR{jHi?FDDE`@V)U}m6C7#qBFu=In4+V>+q&!-4b_r1nL@@Yq~UTD6)9uD$x*Kl z&XX{y)iM-G!P_>HwEhB=b`7v3@m=Oz(QdUKA0L}bRW`L*wq#9WTbE5DYDLkBSdeuV za5tL9y||Yo{ozggzTX*)Za&>cC$uFL9@r(Y;<8LB)%|-xqL!DtuM&~tzx9en z=Ewornv*9M%$|&k@k?{?q8{ zL$8~Jho}x|hX;HjD{yku9=6l_2azt(!FfUUr}O?hs8Y(pnX`)k{<;se-iv4q4mlaP zPE=`;LRrxH!4BsrX_)>*bW2m=*q}w%)%jds>8H~VdUX{#({9r;J5dW8Mz|zLVgf6l%-%=~|mU`R3_VP?LmT?S&u6M^xLL!+e2oD%$ORb3ZRdoiX@~ zZWvq3iyd>*&>tdLTf<82?9Nbl#?EA5MVcH;{};W15^3VA)eR#PCRG>6y2 zA2LMwBjNS%Z?zHsYUNms>1su{s~fO6$^fgFEcbZkBLxZm!=PMObqO}n)FZn8kCBHG z{*&QVJpuBpmLs6e;FJ|kRKl(5Mv;3$x9@a{$C|eBuhpgohE#Q*!%6$A0pHiNdX175 z7SjV{Yfn5U<64_^O%~R(jh!oDTuGPubE7y|WIUuvCzLcOrcQzmUEYRP?t6 JTCD@$ly8zq?&<&l literal 0 HcmV?d00001 diff --git a/repo/objects/3f/d03bc53488007b5bb46f96e5e2912c5e04b5c88550b767efba71263b233dbe.dirtree b/repo/objects/3f/d03bc53488007b5bb46f96e5e2912c5e04b5c88550b767efba71263b233dbe.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..535571b990e38e18e7087146d5f2ab15b0b89c15 GIT binary patch literal 70 zcmYe!&(%xMEXgQM(#tB%$xKYoPf65E%qz*v%}g%J*DJ_NX9&DfBF=rJOH93I#bf30 avoiZ9F$V18XrA9tJdsBzi|eJbiz@)ht{W== literal 0 HcmV?d00001 diff --git a/repo/objects/40/b3704d77473b98fddd7e18fb92d6538e9e1415ee01c973eaa88718d0cf8c35.filez b/repo/objects/40/b3704d77473b98fddd7e18fb92d6538e9e1415ee01c973eaa88718d0cf8c35.filez new file mode 100644 index 0000000000000000000000000000000000000000..30b7a231cc4988504ca85b49b14a13d3e6718d86 GIT binary patch literal 5747 zcmV-(7L4ft000^Q000000000009%~^00000000000D+_c000008O1zna~nC1-~B6i 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

      xDWVsbL+MZpgK#0jiy2x5(YNay%42Ie z>a6vMO4;#Q-hTe~JC_eLt?lq->5+YG_V7iW0goz(|D)SSuN1;JlT#25myU^eJKBJC zMEt${d*4o?0E#kU;IO!AAIQ;-sDrg8R;tg3>)2`tp(nF9gdIxf+4$j;t9!90aFnYP z@qoE@1sWkVHw{Mzgt)R1v|I^hJ*Dh;nvDGO#5#<75niBGOJ`sR*U~*_>aT1!pmQT! zXTchjgB|z!*+WJ2!c`SL@XYP)*jGc;uS7TN4J!nUB)YeedKbmpNpf1<+qU9O4D00S zX4mubnSX)>vGsKhbofYLnfR=}GC?t!svt3I0I&q$^W^kuY7@^>y8z36jcq&nXR~u6 zzdV^w7bh2|$IcM4M(+;|G5I<)L>+j!Zacz@JN#2JEBBy zI$6xlKOSGrC%QnyUs6%5@s_z?2hjMvrZy`n@}gHo5*cjDl;AG-0idb}-Hn3C`Z?A_ zpKt;Tzqc_msoIVOew^m5pfnz)(H2O>v6@EpUzPBC^g1O&=brb{VAEstvNZC+WPQE&#DF8xolJr5Sq)CYEUXP;yOQ^#+yyh#g@ zVtThL*OCY#NJwEv}#-l#TFb>Z$sxlzx2OqGwR{n9^WJ3MN(@VB6iv-q>~{Fgulq^gzz zl?UPB8T{0-zQT7?CQk?M*E1M?N@(&FpcW;+wctKH0X6xi!9eNosgY>dm0jU1ed?{L z?;~4>z~z#)c7H-a1u`Ig5#TRx><|Pc<<2Pb96gpx@|XRh`k zgW6-=I}7sWFRe}PI+m}|O*~*h#tCNS*Yg{3!8z7VT{^*NOY7tEu`n7$FI9C2!W^44 z)s3jph(7&Q0iHxXD|E$}#Mfng=9v0J3ug19{e1-k(vt|JjQv7@-(t6k>#vbJKrn4+4pIm6is6AG!{NnRL}Bo##b`x0r$@g@C>w4I$t;iS{&Fr04if(X_f zUl7B)r5hSZujLSy49$m7R5US!LliEA2S9F)f14k^;Dm)@%e& z?WJ%hgKyCs&aIjl+QZN!&AsHk&uD%`0@skgL^zHxv literal 0 HcmV?d00001 diff --git a/repo/objects/40/e68f4242444195913cd8b9b91abb7d80929fb2c4fb0ce27a96ecede9199881.filez b/repo/objects/40/e68f4242444195913cd8b9b91abb7d80929fb2c4fb0ce27a96ecede9199881.filez new file mode 100644 index 0000000000000000000000000000000000000000..029a46daf4ae376b3a534cfa2ac79d4ed87abb07 GIT binary patch literal 755 zcmVH~T+#Z$pk{YRGrLQL zT?p-EE@NwOBXTN40&no)>ct#Xk@m<%QIHML#mE##EBBd4XLOENFaLUj$cjojEM)ve zk;7Zv9(umP|Jmn4s$OjJORldeqKvZ(YxY*;;A3iu;7sZd!crecQz8}`mJ;c_mAldt zq-TvuXe@G*$n;qAFjne>EPO`rWOE0THV-$8EpAAY6$-0zr(}$oj7d9!;8)j(%P7IF z;i)UGYYm%|23#8^7G4^C0g@cIsK`2g#_NZ7oCq&qn!a>|ua#SvqOLn7KtLbbS-LnN;Pou?nv%&RpjUiUUbu=AqXTvpC z+x2R>8TWt<)v~B2_)UY;W=7n^ggg)4wYKkhsE)O%1evIahZ~cuSeZb~8};YG)g(e0 zy>Co%@?#rW+BAhW{sN9AzRkQZ`eArD9C~|Q_Ke+!swHvZWsix%AUKmLuTF~ja=RH% z#qxdG&rgih`gG_ZyVH@&sdEgeMH0Qz5zqZ!2HVzoAQ| z3UAK`E!9sVy5PT`kj^=GT|3`q?~GA!g_U~Wyku@FKDIH*?1iODa$reG`HSsA}FeEbh?`@*ZhjLmWIU<^(f?^=76kqK{#B2TqKme)CXXd+Te{|paUXvO#H le=L?9`OR}1b=gBn{};_cH);6?!FSF)Bh8-|gyFLt_yPUXVtfDq literal 0 HcmV?d00001 diff --git a/repo/objects/41/514fba0348385677546a001b09741b647388021cc098d583c52035d368d826.filez b/repo/objects/41/514fba0348385677546a001b09741b647388021cc098d583c52035d368d826.filez new file mode 100644 index 0000000000000000000000000000000000000000..82908c4dbc129a3552fe9fa6fb72bff7929ea39c GIT binary patch literal 230 zcmZQzV31;f14cDClc8}5m@S#wADGQ#DA02Mvo;&w64rzA7nD3~_ps;gjJvNI_bo|b zJLh!Ul_LLluk7O3r*rzvnd5#Bt<0_@2AiEt3JvQ%|8&=%dts|itV*u3TXCrHwYzi0 z`qZa~{eJ&keC@=88|S7b-3{*Ab(Y7=GkTSYv_Es2@sUQpBa;N0zb}5mkmA2VT;`qU z*X0Zs)?YYa!IFMKK7Ygdz(*STTXQD;wRCHGV(2Pu!TD--rtBN{gp&+Dw_X=*kNJOO WiT}5+zH^K8lOFH-|9+m;d`19s?qu!& literal 0 HcmV?d00001 diff --git a/repo/objects/41/c2fcd3103ed83c4293f2c305366725be100736696ff8ef6b54d7ffa25e3c04.filez b/repo/objects/41/c2fcd3103ed83c4293f2c305366725be100736696ff8ef6b54d7ffa25e3c04.filez new file mode 100644 index 0000000000000000000000000000000000000000..4cc750b005947249fb8ca93fde644344423d242a GIT binary patch literal 811 zcmV+`1JwKg000^Q000000000000uGu00000000000D+_c000008I@FBZ<{a_edkwP zsV`|4g?(r*=~j)TG|85)0a4Yb$uSr3W^81eq|vnhz6&&KwXbZEP>ebE_#B^W`xn5J z6Q$rr!-SPsu@sz!52I%bz#S?FC95hl9$dg!R|g~V!a;9*4lkd-cnyhRJ7Hld_!o&5 z-l%RcaP9oNyktTSxGt}#zM)78LRUuThLu3W%pii*ncFjiLpbOfI8$IS71kNCtsR1J zq%rlifl{X;J2X5rSF02axB|hUDJ|%%eVHsbFhPZeNm$ogDLBjpM`aNhE#1u60#n$w zJWa(-qal9K05_V5nG;&|0R??GutQ_%9bO&Rcp&V9Zuh0fT%+88u9~`Yl6wHj++*p$ z`SbQZi6TamdV{EfnA~L zYZF>aCCW+)VkTFHGCq*_hG7v#<0+K{quG3x+>r&inI+3Gj^Sn%K>+I@N@nBDJcwYu ziPoz)900`F$ijx;FB_b-8PO)D=qPyG*}kJtEoqY}6l{kSE=RE=WehlV)al?F5+=3E zTayHS+(wc%%Rp(@2TKy)6wXyc-{0@|gIv`EZE|0BB-Xzg5RvbBXCkB4$zZYC#NlX@ zB&%f{Cdq6$iLYnDd^MSd^K}?~ntEph6AJ$UNu-L)Iwc7oSKH6X-IeEY$*hI<`Y@`U z)9Ug#v(S`iHy5LGLgn^akimS4l8zb-yEf(UK;?b)fPNo8tw!&|apHO1=V3dG_Y^ay zZaKl)`=J9aw(Woa$PX74bv_;Sx1ee%D`(D0YeW8|CP&u|d*>9JvhMPz1FY1}c4~H7 zq)=CMfH1tLOCaDJB}Lkti`X$&+ul}d3A{l51yfq*RMn!EPBfitda0)M5Oz$~_-iH6 z8`q-OXee^Way(J85UO1&DGXAF%JdYT-TxQ91-Fi_>(0%If{1K0i*aQrzKErQ_DfJO pf3n=+knS2fP*3;wSl|(2N66vNac++-`Hh}4RCKX|@Bc%me+OsYd2s*$ literal 0 HcmV?d00001 diff --git a/repo/objects/42/8ea7bc7a7c5b36fdf007031169d0f9905fc26ec555b9052b0525a23391f066.filez b/repo/objects/42/8ea7bc7a7c5b36fdf007031169d0f9905fc26ec555b9052b0525a23391f066.filez new file mode 100644 index 0000000000000000000000000000000000000000..be0b9a718ae4aa5ea0c32f136f56fa43922d5eff GIT binary patch literal 1666 zcmV-|27UPe000^Q0000000000021*400000000000D+_c000008I@OCbJ{o*e&<)5 zX>(l1##Mc7OXGNjAPH4ejAO`0f3#f51|*4OcMb z-nS4HoW<@(S6lj@LBx32^+a?*`UYaTCh0_qK(Ywv=Sm`i5-a`8B=%t|Qt(&|5`C_; zZ- zqYXu^(T69CV>B*}4U5bMxD*7;G#7CPkP~0R2Bo5J_&q-(1MGmXacMJcESDe>qxX)? z-9pH8q1tUVIbZnb1CK58S|sGpngGeeXC8*|gpev+rD4ZFkTBd&mRGlTOBhTa;C?Wl z52nk9Qxeu|L0pqG3&o=(p_1K59z5a&A9RQWe=2`mkmjq~vdc11ArB5DXiDIN;FHC)eH($k;!mb6yFd-QF^r=f6sk?qt z5sG{1nvc zoB~IoU7#i*rK!2$B%v;e^}^7zV{+R0`*)`n`oA2KzTH`I8kuu$1iAZtp{bvl^v&1# z`wooFOu1*4+c6C&>0?L&JZ9mJFybr_MEEzu%+B~=^Kb%zwb6YQt~`dqV_{~NO~o1U zIyL2ss=C_QZE%P)Or`N}#Hn;mhqp7pj7^HuG_sMsZ%QZtTc?= zlxA`JNr(`r^}|acJ*0mT)8{J|n$cr}3aN^=L_$~SQf$%H9(OSIA|%A=cdtA%OD%`pGPcpIEPJjaE&(ZRGW-kB&MqGxv$qnEmhm1f>@S+74izr zwA_LnOz!giwid<#lxPDfd*p7WT9x!q?!>ro(?4CF4Mmj+H^uB}-=fthV$rAfbDN!N^uhMpEI_V90$ zwo*YU>6PoL(mVFKH#Z~A#>A8qZTEg{w`21J%eJfE%=NSRGhDMcaII0{*<#L_jR;@e zN^b(7rvN=r_0~nx^<8!kR;D5Q)#x|Pg=uLnG_}R9cPZYfa`&>PAzn1*kuhKE$%bv? zQbJj@57t@LM;e`R^(yK@$(83gugbT`Cv!*J3y)1jUSclP#Wjq=tcinuNg)wQY96|! zg;10tjdYD8RNov%?dk~UP`*6A-hG3_yj3U^^^+{9**rIl$49nL?sos!f$nLin%)^r zO_@mC>^@I_P{&6_F*u1Hckj4N*S!Zjp*niAas)e(LEv+c zB&149y3RBKs?o-S6+9U!lbQctw_-UhcderZ4x7%LKv!0M~pE(fK zKj|S*-}Bzn2umk|>3lpME$%P8_qd~+R0L$<0n0)Jyq>TBB7r`sla`n@9ydsrn8dHo zDN_-AA+kYVk*^v7h@UjcG(AfRio5 z%sA?!0l6&roQq$v#sj=6E3;b3y#<_4wjEO$Wq)|``wMj? zQI(MYZJm|~t6LZuQsUKKYV^*g2g~l{> z9-@LLRnv93FYo1t{9<++7xEadH`x=kkmBR6zZKQO_WRhA6Ji9hqfx>G>@OJ)Oovsj zMcV#oIwp2UwgZ(CY${n=h%>x3Mj0|l+t9HenIp=LvWDGg?Sx07b+DB=$@zO6`Am^^ z?TNK&B51vH4DFIw9h*-r3FTu@>de)(t0(cXToGov;$F;J3J%A7^j?X~XR^-X?;9G| ze%?4Xhl0KuoLgUV49NElPuaBJHb95Nz8WI?`hDL3j>P}~ literal 0 HcmV?d00001 diff --git a/repo/objects/43/6c337e571c6de42f78f19b4ee118ce40781768d300f61168e451405f83f67d.dirtree b/repo/objects/43/6c337e571c6de42f78f19b4ee118ce40781768d300f61168e451405f83f67d.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..9981ca6d83df68591424e915969e35409aff911a GIT binary patch literal 51 zcmYeyE6L2wOfJgTOG!;CO=k$WwNCZl`3Ha~srG`| H0)|EaOSu(- literal 0 HcmV?d00001 diff --git a/repo/objects/44/6a0ef11b7cc167f3b603e585c7eeeeb675faa412d5ec73f62988eb0b6c5488.dirmeta b/repo/objects/44/6a0ef11b7cc167f3b603e585c7eeeeb675faa412d5ec73f62988eb0b6c5488.dirmeta new file mode 100644 index 0000000000000000000000000000000000000000..6757a41ee10d92270b1646be5433266cd6619e94 GIT binary patch literal 12 McmZQzfC0z100DaeF8}}l literal 0 HcmV?d00001 diff --git a/repo/objects/44/c4a1495775b38fbccf8c768dc4b6c84d3ddbeead2a8b98b1a4aa272a4abec3.dirtree b/repo/objects/44/c4a1495775b38fbccf8c768dc4b6c84d3ddbeead2a8b98b1a4aa272a4abec3.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..03e38690eba0d9eac17dcacfc42c4086e58b5105 GIT binary patch literal 665 zcmYeyE6L2wOfJgTE6io++bxiG=Bwh~dsoh=r)IV9kg-X)=;l{&FhV1K)!R4T`*;&! zs^gQ2KpJYer55vWD|2LSIOgc}h4tCj*Oev<#2<-H-E!-^sO-*s0fdH>RFH<0|kac>V@KGcUS&1MGnJiXKo85d@Kg&4o^274~ zInEVF)Xipy|2la*SL$8vh1*CP3UWXix^gO{Wk2)O*tHnT=`PFZG;+62Oek*q zt}oN7TJ3)>LV!g#|ATQ?PTLtI8>%wmo&7+1t|xZipL#N2lj(%r{goDe8$#)F+OLMVDeR literal 0 HcmV?d00001 diff --git a/repo/objects/46/59d21e1e5fa08b3fb751216192ed8abac2341e8f3705719a01a9d13af78ae5.filez b/repo/objects/46/59d21e1e5fa08b3fb751216192ed8abac2341e8f3705719a01a9d13af78ae5.filez new file mode 100644 index 0000000000000000000000000000000000000000..4729c675edd2bd55c2ff1582687257c59bf0dfd0 GIT binary patch literal 125 zcmZQzV31-!fC>b&aS50$S$ldfSA&88!-KzaZqp}B+cv8?Y~qeLo4T)jV6XY}g7wyZ ze|=MtZz&23mLGJ}mzlmf@6jsr#og9ie^_pd9QBAUWvI$(b$TZ8?6AY4gjT6h06dKmPQYVj~vP z(nuzMD7JK5G>5jU?Z3`*Ayqrk`6=Q(M4Z99GxU}N!{etCIg1$aohu1iZe&)kqMecV3i zE=dXZ7TONBCI6OVO0uYtGhHH|41mb+Nh(ECrpofHQimP_&h&K~W15%*=ARb*r5%tFt3h6eS z#Dm`bFr3is{p5BWU9^cJ_O#dod{E$7tr3ctvV-upN&5k!T5wY-Wn#e)H(|K|GeHSD z>ifcZ5TSH2uakuHTNy!ZFrz}dL$aWFoH8!QL9i!h zXq_2dj~{yDQ9KzBBP9Ig>^_diqsOaY50|pwo%aAJ5>=&4pT6lO6mc5mE%5?=f>bIo zHjTNRecJR+;A*t84s()9RKhom_0it-&G+~<eQB(;!Hcu$Hd%ve(2$KK5v3j@aSG zHm2>aXEhV*Hoc$t>&q3%<|_CzApG4uj?by9o;gpiz}i*|hf2`q2Go!*iv%_r4XzNufsA$gQc?%8ypU zeZ0`uCKv8xCX`=5^&R#|sl?Jd+vehX@W15^^!}zts-Zl4hjXkZQQ$?R^K%yI@4BeH zcevkZ?5JHa+e3!JejK(Dx6m@hgu7lQiaA37h@DEWTPu38zM6dU&1qGj5@Uglvr)9F z#Fpm}+Ap{%%!xAS(-H}kQGWEQco{sOWo-~PS^09JWpdD7BE15&<%{gM4mP%WGdXom` zvDxX(h7geUacyIu!*n9OK9BX<@U~ThfTvvGrn{|%t3?H`zwp1uXxtffIy*l;e*-IL B9Ap3h literal 0 HcmV?d00001 diff --git a/repo/objects/47/2b94f7979aa26593271ce51f2cdaea2e39055a3ea1336934ce456df510e779.filez b/repo/objects/47/2b94f7979aa26593271ce51f2cdaea2e39055a3ea1336934ce456df510e779.filez new file mode 100644 index 0000000000000000000000000000000000000000..91ab379b7745a5e707a59d74793f659855bf404e GIT binary patch literal 950 zcmV;n14;Y<000^Q000000000000+MS00000000000D+_c000008I4t4Z{j!duacmOeHoeLl6c0kBijL@(d=)Z>x3?Jr*wxGV&~lBbMA-Z zH-SmZGahLLcPzu4#b6bD?7yD?Zc$puSe~Qypa}z&mzpQ3g~s3#e*g8iKOod>%MDC< z^hKb7D_K9ZZMFYbk})pYk;<+q-cf`pp>wSg%`%|JjYb5cHg?A}cA!)RL`;Ilm>aA4 zy08e`lE&Cq8Zs60P3d@OuaGfnuqlE?of%M@YH>GR!W~M~Ou)QY3m(CkM<@*fqodu9 zNil|X#p5Dword6`0d5r$Gs~510djh;VT;<(8a_OqaUg7gs`Aoc)+yJZau;_=a!U}* z9z)ySYvzw0W8ku4PE}5RQX(XWJ1zvQ5ekEwLbMzOf#GQs-p`gH^rkC#>Ma(%X}IbV z*rtl!x}sH7Jj(?qW^$#e#wCe&43ptva8Dt<{%AZ3S7ZThN8xlB1aLcBKo917Dljj~M9GQxU;IjQ7<8`aOP{^&f_Vuv&OEq*E<$Pn{J}gP!GV{O1ic zt7NpEjX*P}S)>&LN*n5fQqCGKGPr#PYRjiX>NLRoWS&jNaV>)+j9$tSnJ`(1o!oPnu`Bh0gdAKED6(86wSUZeYRVp8^eB z$@ZsjoA}qPU|jTLRa{fPqlj`sms(|-6+pkKMg*f$dt@31a8eb-OoGOQ8>{)DvIyLg z#>7_|3YGBmbOirsaN2l8O-#^|@un?%Po^5uCKAY5jbv_&ye4G~Vw$M`8|O%vP%>+Z zB=AccNm`hKRJI3(Bwpp#mIL2E9*_M@R(+*2U$i8~zwQ%}?|BzIrO`F@5H#m?PZN|`h z^8Sp%pdH2-&cxoM2lTD)m!t2Kanvll7BXlS_&|onG#9T}I_o>0WN4vV((ux4{Q|NQ zqO|&Q*d+aW4L--bQuCU|v!&hf!Qi#7ZpEo6>aWF^CbI?AiYJiLJccq=5kABpV-2>f0H@*I!!Jv~Jt_wcYg;q{3}LFPsk113kxg3 zKS{LkMx7qUu3!JVYM78?uA6(R_Y`?e=+@}UumBkz=?=``1dh4`&J-9dgmp&j zI)@+}X)Ho*pwWdWkDiCtI#r+nS0gwyjRjryFSFGaW~k6G37c*w1&4*;s4N1b)_%p- zSir95@fA;ALw42xPnw9C6IzV`1??Nyqp|c3e_VQ;2}hv&a~Uw_l^f8lue&9=N07|D zmX3oTnSb?IfKWYity}U_6CpV~2q|HQ&{-@yIr0<)h7UunZC z|0G!!=XtW4Wsga;SkLD1ViTty=fMqugu<&hB2-*<1+{;_-u;W*-3I}e%vyM>kI{>; zcbE62rY!wRhRz99*+)UfsyRx!VlX+4CxpdQz%mYsCM&#f60n))H^ne6bQ?weBL zH?D_o&``pTRrr0)cO^@q`d)c$kOoo~*YND+f8l#@Z|Si+*|}1Xl5b`)YYpX=vO>^- g2}thF6F5KTbn_R{#J2 literal 0 HcmV?d00001 diff --git a/repo/objects/4d/027439408bcda052a1df90740548ffe4b45015556be882cb0608adc0cecca0.filez b/repo/objects/4d/027439408bcda052a1df90740548ffe4b45015556be882cb0608adc0cecca0.filez new file mode 100644 index 0000000000000000000000000000000000000000..8cd4438bc7c66c11987e5822616cd947084efd93 GIT binary patch literal 907 zcmV;619bcV000^Q000000000000_+h00000000000D+_c000008MRhjZ{j!(@zb9WYPRPY zOnCH zj|U23HCr0b?Go;ooi63<#oyK z5daOcm5w?y%-f^iV8C;mhF+68zJA5GX@b& z)c-fmiZG$%rbv>4Ph}))K>|{l9%N+k%hs55;JSyyp}&!NU+Il2N|DUH?30k|I3IXI zqmzKQ45zdCbQFyJU^1FM-Z~!$<`P?Wh$JJC$8^N~bp0J8b6JP(DBtjyVgp=IbLHmJ zaU#L847}W^nN|rG7|2Aypd7{sDnaK5Rg0ec$LZDI{xEc$a(_^u_(a`|XeiEPI@K|- z$$8v^=T%xpj8#;Qa-s3&vsOv~iwt$8S1wYf4QC?cMi5jvgbRZ0mGBj0E<|c{_w%ne z_sqhlXLG;AX_NT%V@3G)Jdp5WW3PBjGiPp=!F40giueLmAzd1FnVB>8tXYcA8zp+J zc}{GX_n)v+tKVxG8_-UD;4)T+p&i{9iNgtdEmbGHCpn>CnYyA~zok~hwu^bi5Oit- zQHc}?&#L|Nc3tD1?t_L0*=nE`*lyq&6P63JFm%zEHug;9XD)`hw&PUAzH&1whxdJr zMvzrVHQ&?wplO*#ubITz3^g}t8k#`-l5Z2Q^}KE4M5uM52E?^0)!?+26J_+1KKGB; h{*Zok{Kq>#^upE5@0@-2F1mCNqon@;;JPiB^nayKuZjQw literal 0 HcmV?d00001 diff --git a/repo/objects/4d/2d98a6e076825b2486c2f6673e4a6e3e9b5280b25625e695b05f0b3123f330.filez b/repo/objects/4d/2d98a6e076825b2486c2f6673e4a6e3e9b5280b25625e695b05f0b3123f330.filez new file mode 100644 index 0000000000000000000000000000000000000000..514701e44d167723f7fa23cf6c96e00f48bbe2fc GIT binary patch literal 726 zcmV;{0xA6f000^Q000000000000jmB00000000000D+_c000008HH5aZrVT)efL+4 zloy}~_oBX#G^*o5LQ8-c(}<^NS&!{)*1Oj38j7m^d&f2rL`_;tmb`O0b7s$s{T?vo zL?O7*aLo!VSprVOx2rd|fLl}!3RaeAJm^8F%e@gb#Y1gHAI|KbZK;ESON5z8bq)C$#DV3i2D+qOo*_4^K4?fPK)-y>ytXnH$h$o!2G0dyvc>QwQEl z%^!PAK&S>e*Cq9n6CicC6H>wkp|Y4(vR^|`Fx*e#oB1k+V77+)Ac}%nygsL3muvFY zqBT&WD5W4|>dKJDdm>*W+>WB~hEjs7$#fF0sRbBM;@N1qgz-Fr02V$cTviDcyPI!*Aa|FZ=W)rbg}bTdOfJ!o?B`F$#um_$ z-PTLiI$_vOB8LNp_sau%?jGh>Uq@l=d98ccSn($*$!Q>7g6bR)pjXoP(!PEIRY_So z($#G2Q;HpjsO4v literal 0 HcmV?d00001 diff --git a/repo/objects/4e/3dd8cc6c3fe75b5c7d43992924ec365800a0e9d0a2e587599c8818567bcffe.dirtree b/repo/objects/4e/3dd8cc6c3fe75b5c7d43992924ec365800a0e9d0a2e587599c8818567bcffe.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..4e1fc88e23fb259e77e5a49ded5b571d166a48e9 GIT binary patch literal 55 zcmV-70LcGrX<}h+bZKm9VlH!UE@Wk5b!Px&o4`DZvEu-A(aABwi>safJdI7o4%)O& Ns}0qYoxNfdH8!iW8EpUn literal 0 HcmV?d00001 diff --git a/repo/objects/50/daae25fecfb025886ed6a8f732705dcd542eae1d9c1f3f203287cd953f116b.filez b/repo/objects/50/daae25fecfb025886ed6a8f732705dcd542eae1d9c1f3f203287cd953f116b.filez new file mode 100644 index 0000000000000000000000000000000000000000..eea5667b5b6521f2a8fb50bab44d00bc6d075dab GIT binary patch literal 7825 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 FV1nh|IFkSX literal 0 HcmV?d00001 diff --git a/repo/objects/53/9f390ee93c783631edf780dcd0e721ecc42ed3421889fb0d8d2fbb746bc757.filez b/repo/objects/53/9f390ee93c783631edf780dcd0e721ecc42ed3421889fb0d8d2fbb746bc757.filez new file mode 100644 index 0000000000000000000000000000000000000000..5161101e3d33ced7aec9ee3bf2d6720bdaa3c24a GIT binary patch literal 754 zcmV|5ta-qp`A)U8! z+j%DG!Lf*qrN$JpJOmuXI$f|OUo&~OjU!X`oBQR4?pd=Hik`Zyk~uA8&e|~vTpc2= z=7P38PN=vG9M&febY}o8yfk`5EOBmW$JSv_zn$+m0glM@eHjQJm|HS!sJjH+11aI( zO2^TEiGR~rkkmbLZCdE50SJYAsT6IQI>%+FMgaoJ^l_d&tTq`X%NP2Xq-nCuUapbs zYlG8ZS`Q_gR!Ja3m4(L#kPirtvvm4^l4LSp%(E9rpu2gtoUPY%w@N9YrzFkh)6F7D z>1mTbt=6+K(V7D-4gf!BaM^o=CKl{rygSN%fvFDMR6(`aG0e?b?!Zh?j*0qz;{u3K zMpwN^B)_#0)aE5=<45E`@uv2^y^7=gem|~sH#WA4)e*$Sw_^asQFI|oj7~}S$>VIg zT4w2Lv6!WkO_r^epB|zMoJq~!J4U(ARaY>*`)m&I!y7cW1wOXoRk~wnT)+D&_2zlC z{mi+)jiOu$=ji#bMyU?De@cywWM|v_>hm86ITC zcG6!;SH}U*&qc>@^iM?iJ%3tF-p{646djYU`Y69*Oma-y4{!%3I2s0lBMd9%6Fq!A zE)8-eS_~7u;!ndC?@9Z0h@bSIWAq28j_(V`_d4Up1j k7+GL;L~*_VWJ_5MzHKE9UmF!*|Hc1;H9i>>$KSK_3q8SWrvLx| literal 0 HcmV?d00001 diff --git a/repo/objects/59/3dfade77b23c0cf8f58f84d508505a72e2e73ce170fb84557f1b9ddb1599ff.filez b/repo/objects/59/3dfade77b23c0cf8f58f84d508505a72e2e73ce170fb84557f1b9ddb1599ff.filez new file mode 100644 index 0000000000000000000000000000000000000000..01c08529dd251c94c78e320e707c01adc2528dc8 GIT binary patch literal 18621 zcmV)QK(xOA000^Q00000000000S%)700000000000D+_c000008Qr}LeB4E~I6j+x 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 literal 0 HcmV?d00001 diff --git a/repo/objects/5a/bf8cff737f16da1f4b08f30194e1ea4d523cee89ca4050124d52b3da2621b7.dirtree b/repo/objects/5a/bf8cff737f16da1f4b08f30194e1ea4d523cee89ca4050124d52b3da2621b7.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..c055996681501203381a29aa4ed73bb25688ba10 GIT binary patch literal 191 zcmc~zElEsCEJv<88?q6XxkR^_-lrXv4EQ-hva8W^rnzRutqH zl`yb~`%afnlH+CnzVL;-t>RLK#$B<$cg}i{TK6o)A>?ttOBUZp>6(M-pSLkTZ9V?( z-L}$SON6ezDgLI}@tQj)q(hxOEi)&zm|^w>yH!i4zB{|Hbl!u;WMhWzKipk<8@sIJ Tb-olnU4Af*kU45>o)fhJ)OlTY literal 0 HcmV?d00001 diff --git a/repo/objects/5e/c6d4b8f5d1c8d07577139cfa0b249c88a70f141a476a2cc3a8d3f261d80cb7.filez b/repo/objects/5e/c6d4b8f5d1c8d07577139cfa0b249c88a70f141a476a2cc3a8d3f261d80cb7.filez new file mode 100644 index 0000000000000000000000000000000000000000..1e22100172d23f789c2b08217ba1a0b2b4a96846 GIT binary patch literal 998 zcmV;IqCqep|A42=9|<)tzU<`o7?Xp)NIQQjCu5% zKm#9Td1zX1|9O)!E}D_bK2f}b2vhRTwc2Qw0UZ;K2u3A#$27KKuL_8m1dTB_R`YdX z5xAuql&G12X|WbOf)^g4Gzg4RJBvv% zhPB6W5kptQys80)ih!BrN;UvF-D}vQHuMee4>>Bp1}Hz58ndo)4JvnWbt-ocg4t7O zGx)paPd&!KrAJOxPW_|=NFDCD5U@rl3?_wWI0$lvFQf2jvIwC&Uc#5|Y}Orz%X@OR zsiIp)nup?9E;u1mSDHB9Q}GVr^TVwFL?PYY=w%cxsRbC0!tuj=4#UX|x-jj|!cl+m z(w)I{F`G{24^4nMy0Xv#{L6q7&k+qVMoYw-vh5|2YN$35L&~;D9}4YKg^@Ftrr?hN==Zvs^qwF3VGxuKZEw8@u5sGPn9~SLg}P5gJISd- znnC4z4KeL;xPXlKX-0gQ`mjk;DR zx}>3eBx=oLyuS!}os*V{A_|)_Z8;NTdQNIl{xBXt{1*r#beTi?Was`kXr968FM$e+WcTWnq1cMR8^J}b)?gaYKxrS z2JF)Gw^$a^vAV!F6`(A#0~><_T?R^?-ETky^=bAFe^_wZs UP41oyH{vTK*(K0wy?J>40$3vE(f|Me literal 0 HcmV?d00001 diff --git a/repo/objects/5f/cc34d501a0e86bcf1518ade3d5cdcf36631b896ebafc148bb2bbf0d063145e.filez b/repo/objects/5f/cc34d501a0e86bcf1518ade3d5cdcf36631b896ebafc148bb2bbf0d063145e.filez new file mode 100644 index 0000000000000000000000000000000000000000..1cb392777b5c8ff9124ba97b7c65e237c04cdac6 GIT binary patch literal 813 zcmV+|1Je8e000^Q000000000000w6O00000000000D+_c000008HH5aa@sHuefL-F zOkN0Oa4*vrNHZk_f>Q#-n4vsnguTXUWyvGSP^QyaU zl!scu6-zN=5m*J^F5cY$Zc$oDS(c%8pb34I?KR&d78?Ci`1tK#e&MgAB zq%m@phEzp7-WNP%%VmTbY=U4>rv_A99e7et36ShE=eQ7XTDA%B}0(VMs_aK-(K-$AWaUo!hkQkF8m<;A~7*2iY!K~*8UVky}`7m4f zv*~=$2AE?Z3k!l*8XT81q9#UYY4D~hdqqPvq)kMSur1PXL*!dh#vr7PdV6pM2@^_g z$|5QF&_M)B*r~&6OrpUCp@OriQ#&>qAo1G z%d0^!8jNQH|8C@*kcUe=?j)!TMIKS2+v)lThW6ZXLcxpyPiDEj#4RQ3)~4?_+Sd^3Y|d{7=()X{UR)3Qf#X!}PHDwo zH1Cks<~dR0kveEb<-2uH3eAl6o-X~P2j%tRcuBUZG z7c_VE%pMeBk#-t}xu$>CQ&BY4$Ev#b;{qd;HJt-Tk+DiM0kjs_Xb400000000000D+_c000008I4ujZsRr(eb-kE zkQc`_>}`v_INM+q$4aA4 zva|@?lE%2BG~_Dg$=30Zt&}lpuo;3yof}X|wYZxs;0`5fCSX=B1&?6FBa{Y#(bmpl zGK^ta@wkYA(-7=5z(5f(vs}p*ASb_u6>39k_X@hvDteA5HI`@4XAMa*1yp6e1&0#gLT^GmQpqV@Gp@3F#V1Q6KyVz_R2bKJl9|%JPJy!nl220Z0{J(YdQN zEqJ&4s&dVe@Ai60J%46Z`<(G?^Pp)?%{?U(uJbyC(+$Zbw*=k$14|MPV!#Mx%~6@$ z!Ni=(bCf}&=8180oaYPjv>qRT-$fObbD;D~HW`yCo`4VNvY@LFZ;{3SD2X>}Q{h%j zlz2>9!^Uj$KT!L97yP`y8b$5-=HlOD+RF+ArDF!OlPVz<=&&L>Wfk2V62igK9~>c_VGC=&{&) t&&Wr~mI9AawT{Nyf<01e)H>wUD>tYUy0IMUCn>r>Ne?k}I&ZJa{{VXr*T4V( literal 0 HcmV?d00001 diff --git a/repo/objects/63/10e92df74872d40c1d4f52b20a39d5e696c0f49ee9e0613168c985a443c7d7.dirtree b/repo/objects/63/10e92df74872d40c1d4f52b20a39d5e696c0f49ee9e0613168c985a443c7d7.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..2e5d6076888f6defa56925e33692316b7d94bd85 GIT binary patch literal 117 zcmV-*0E+)@WprU=VRT^tMp@Dx9$%n~KetgKVUq2Ny23Obk2eKzngOZNI`@j@2`Xl3 zY-Mu*>sjp~&|X1JIS`ybmyJVZ9QBTtAr}xUdSg8dYnumI)TqfIKFP zfIH-lJ4`4>C`^qKQQdgQS;nT`7MyWWI6&L@u#)4?$zQ-*FaG_WVZOS49hM3-q;cxA(W zfkjo|Ti_C(t{5z?!}tn3qr`!VI=pabga%T0CP)AmX$03sOCqE`A_`pm>T4Zcbi3>I z`q&f6v5dWLV2!Bm3Nxu`G0g@nPmU>Z?}#Usta+|xI%1}@h&8#%D&V6)_(_e>;( z5lx++%zZZb{gPz?0-4c;6_N|v%MN+6g4Taq1pc00AFjR+`mG7p2qGQ72RCu5mEURvHZ<%XlOrb1i&cG_m?-hMw z=0cW0l7M=ezCMq}Mao<=;t#f&u!vDzUgmd9zy<}S7fa0?pmke)D<10vSS?)=%#P{N zwry3?F&k}lSwgvDX@Iul)YiJe4l5LHGIL(h;F3roVETK?Mb@5XqHPnuhARyAv6|Ag zwgJ@I+Yf^Z2_R=#P$hmcZMK_*{a}Mu8a8YPb`znrDYxsvO>cfT8_(~r29w9h!_DY! zFoj+{hXIOv0^01Nm?vv}TP(JG-TF?;pvY-y)85eq3zUIVkdC&82<)1)i89-!dC==b zRdRz|0Q@u;OCUVIT_L=V&VH7M;OPv?Zyv#!1q^4UpNfyFMQ%$MvzBtF3ZyP)0!|;o zW}(==c2=*h9&xelELC<>8{zD-8nV?Ey2@IZC2ZO>ZS9O~@WZgsE<9}(Fj&8G1w&$J zd7_Z8?xbT5d^N;aiWRz=uOP`gNyFGnmaA4&l~*c*da8!9)7G!!atsrU?b`|9oVCW< ztXVo#*>D<^Q&ZRq`y+%*HlUsoKtYxp)WD0^3|6UW4yMPpA9mDQdS1ZtJ!U&_82KPr zO-4X5TgwIo>}U;R;G7>fXy9;KubJ|<1_d&By=s6LrfovSI!<>>JQD{H>;Tj2v*wx$d0|B)vZ*EFPQ(Uj$@L9TQ?NOfY)t>Fue%Px$->dz&SNmzN_H%x2&+mnh zM)UjROOxibQIiH)y;716&9}U4y2`3CU3{L@Eo&KYdI)fK2=L($;QSEa;~~JOLx9f> ziBNdYu9T>yDx|Jv7tT?+EI$mcbS zX)maD#f#I@Uds3@JumGAd3D^qGosuM8QEG{9!BNi1f48>=AhyU!(%m~T3nukitt07 z@Vrj=u}=7@PWZVdKhZx(#aZ3;K79R=zk;E%e4)r*Hd1QYeffv>*W6dPG`Fh literal 0 HcmV?d00001 diff --git a/repo/objects/65/9bc03c8ab1e30074d1c931c28bab9dfe3c8d4dc50edab44fab0dd5939dbd62.filez b/repo/objects/65/9bc03c8ab1e30074d1c931c28bab9dfe3c8d4dc50edab44fab0dd5939dbd62.filez new file mode 100644 index 0000000000000000000000000000000000000000..beb1aa21756e7ca2591e88d710d1c64feefcc897 GIT binary patch literal 119627 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 J>SzV+{{Yjz%#;8C literal 0 HcmV?d00001 diff --git a/repo/objects/69/acc5506b73c2630add794c33a9c3675c3ebaf7fa3c3305e5643954d8999237.filez b/repo/objects/69/acc5506b73c2630add794c33a9c3675c3ebaf7fa3c3305e5643954d8999237.filez new file mode 100644 index 0000000000000000000000000000000000000000..567f47b8427a684a78e1ab08d12deb09429f3113 GIT binary patch literal 1394 zcmV-&1&#Uu000^Q000000000001Yz$00000000000D+_c000008I@LTa~d}g{?4!1 znapH>Qi#*(7d!Qo;5QNn6TlAs-J60KD%0} z*9ImnPk5viT(SgH7K2sr`QtBN05>QtBrHu)H=qpzmF_fOtt~VMEqMR#=y#ZDw&4aw zJbDyp;DZc{uJ!UiR|(^y8>!@!{9TCInygc;R+=S1%cVvHqn38dG#27%Gm zPGZ&=!@|dL9v2S7G{*oJiUKpsmFxg=(rehDHuMd@6?^0XJD@x-O=cZ(4JvhhErPoP z!R+3(+c=c`KF1ii^pV#prF_;DkTTqIAz*=!8C+(f<3f-zd>hWLZf75;9@u%olmE5aWjEF zjQf+>aBzFwpTPKbGQOFfcLAp8V4(}}6M~n%MnqzamI`k|+V@mcL)b(NYqmiuZiIY8 z$QVS_QLh)y1z|$Tl~0n4_cRi;;S!{>9WVs(!`j;PxYyfmx80S@x=OElA_OtL(=G+- zH5zaDl3Hg8^P{8l`E1gkK3p~4kbq09$;ePfB8w^P*PF#(7}?XRXiBw{tD5MFnRQJt zR$P)-MMN9)@W~P)Y75hw4`rI!Zq4hU$@`Z!bHNu*O20@jV?6jLI(Y_;L!(EK18@A@ z0Q!A>xcT_$d@yS?g8JA?sR^^lLTdF;QUw#={180c&oj^ClTtuAQ4us!QN=Sciy{=G zEIA-OL#aq!D(d?+Tcu*Zv-gkT5BT-yq$VtPC*8ZcszC4qjYmPcO2F@a^*x97Psw7l zm5VZ}#7a`bdM0QbPL#6WxQx}d>C!V1O%Ul}wnEr5Zc@Q^ZFj`oqM6GVN(njy=8g#- zpVf7FL%|Adt_gx>p?Hc^jK;5X7q>Z?_ftCQk*9IY<7PlcXT|+{8N6bBt-^nwMatvc zI1fMvA|B8PkwvbD0#|IuG(M#b9tUkVii#NtW$;<*USW1JdQD!W5myPyjg6&TqH3n| zI*%`@2q0(N3Ve;VpdPq$cF?rmBc;PoUZ^N@tpvSZX;dxVrB+#b^ci>4UE=Go;o4?Q zJmRkI1kGaAYV6s0Iy#!5LHk9~Ezx%!P6O1{bg*V}g*7H$vn|q1-PA%oqUS)#?V%At z=>34J9pnG&aCp;dMMD>$9c0F;dQ?~O^Ch? zJzoBU@4@;&`+?`&p8$B1{OSWElr@3Na7~BqEXd{?;^??Cw$>Ou7L43T+PzuHa-g*K z#VK&TEx9SaLs9nMG%=ZYZlskeO`sjExroWD125Arrvf2=ONCAz3hU~LchBoXGu3Bv zffz4X^w^vit0~ck(6*SQoqgbCt~I%=_z6-N!Y_%U{&O62pJ;2C!K0NbF zclar{Oglb)q)yz3%9YP`Oo+YPPsYcO4%uU+^J~{NbxY3gNy9w{!pV0txcV&o7paP( AaR2}S literal 0 HcmV?d00001 diff --git a/repo/objects/6b/2cdabb7937183000d8bbadf61bfce4aa8782d1e89c6a8441dd98141d1ae142.commit b/repo/objects/6b/2cdabb7937183000d8bbadf61bfce4aa8782d1e89c6a8441dd98141d1ae142.commit new file mode 100644 index 0000000000000000000000000000000000000000..a86fc9c7de5dab5d1d40564ed96b39f1a466e48d GIT binary patch literal 660 zcmbsMHq#haPv=Oz}Hq!uwS6tgohR3z%90sV%1D>|`Rb6w~BitHHHPT*eSZABZG0U01(eQ%M z+ZEG}IxLy>WK;Tlnf$wDk$#iv>XcT_zg2H1*SuX}UeanMp9~$}st-jc=GL7(c-Vo@ z#O34U?VTZ~K8x`#b?oQ+YS!>&%CcWI`+x5H8FByR*Qkxs_Z#O*|L>goN7yC(-;$8u z`Xa37FKO91IHfC{>b!L0$KqU($+Cer=3IZ>rmtfW8vATnyMWb(WYgED9?sr=Vp&J; ztJ(vtI@|9AM0V|!e|71sz>4Mr^My={7uYN-E8g-m@OAu^uQtp}*UK7-r-$*+43E}w zi@mk8K36eFXB%tmpWj`EuhV60yqlKTOEenXJ0$kvt}^4vKfOo3%U$N~uze8kF<(IT zlSauE?kzq&;x2FJpKJPf>*fFD%jGwoc3wTlKcn^1QI`8x^Tb3`6x$hDdzbWR1(i;H fA;R1k?XtE0gx!v?($tAu_1B+D-%r!L^M?fh+I+I4 literal 0 HcmV?d00001 diff --git a/repo/objects/6e/340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d.dirtree b/repo/objects/6e/340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/repo/objects/71/a49cc20219ea047ccd7e7170d904e85074c29889641a535ac589154462882c.commit b/repo/objects/71/a49cc20219ea047ccd7e7170d904e85074c29889641a535ac589154462882c.commit new file mode 100644 index 0000000000000000000000000000000000000000..d1f58764d8d8004c2c434fcc7b5dbf692be85d50 GIT binary patch literal 692 zcmbsMHq#haPv=Oz}Hq!uwS6tgohR3z%9n>S*AEj#!rhneX{IvD>yLa14e=QNZ`lk4sX2)ypoRE$VrZ}cQj2D1#10w)- CK<-}v literal 0 HcmV?d00001 diff --git a/repo/objects/71/bd3f2f6c6a08b3be988d6ad7daa743fbab793133d3aff6c45096a3de5fea0e.filez b/repo/objects/71/bd3f2f6c6a08b3be988d6ad7daa743fbab793133d3aff6c45096a3de5fea0e.filez new file mode 100644 index 0000000000000000000000000000000000000000..3275147b7c9d111bdacb61f6428b0cf73eb823cf GIT binary patch literal 25793 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 aMLW9P93Jn{dh&ci+(JJ;lcMv=F0KIhgdO_; literal 0 HcmV?d00001 diff --git a/repo/objects/72/903bf9ba5b772d12e787f9f9ab107ea44af465c50bc7c53d27cd6c776f8860.filez b/repo/objects/72/903bf9ba5b772d12e787f9f9ab107ea44af465c50bc7c53d27cd6c776f8860.filez new file mode 100644 index 0000000000000000000000000000000000000000..5ccba56f5887596311c199c583fc7b6b8c4e3e2e GIT binary patch literal 922 zcmV;L17-XG000^Q000000000000(6N00000000000D+_c000008I@FRZ`w!@{_bBf zYQ8`Y!M*6dkfy33kdOiVLmk8g4B*ElX?>}rS(HNaRAFtc3A4j?DLhAnDC-|)xrjssu^RLx6^Sy#CRRl2-3mAePQ z>{Dvjd#U-S9#i15M$T19{p18l9qzagutum1W|inT2nvSJllU%J#^BFa@YxSTe;%){ zDA?wTyl!YU6fa7_37NXmG~+!L?+|9AaCk>4{$Mhl#4Bn6#*=tHiXs>XA^5QH!+0`W zPW=!T%Wx4yqb@*%t}Ju_X9&*f84-yoS{l4*+FsF64b>)6$k`TYxC!ztRmLD8MZG;Z z2f~Dso4QE~exi{|n`9uB?SP>Y-{;nr{a$ak+jTdx>MFhIi3Y^3qtRlKgx{*Gq z$duC>HRf*q&hrw%jDdT#A5xrFBC@nJR|j*1mOQ30y&O7oTfk8dYDnleqE1}c?cuh@ z<$d>neh*)Q!To3$dtMXRudVovwB}8d;o4RvlY`L}-P5dFERiFuP&@Py^oQXNTMy<6{!pSPZG3AYw zE||T}m~hKi`)G$s!S*iLG>$f@N*a6h8vI{H1KoZekt!kwUBC^kC6jccR>cjn^lv54 zM9&nh=g*}~nK_^KEN`oLO5(P|oXHImt2B?4yN9L~9j%Wh*L!n1@Kch2XxW}|R+aR? zp`TcCG`w6}UEymN$CX|yk_EONPwpkglm2RGZrt=jWWxW(%_#+kkQ0fW-upz9pCl;g wL2&&XxjIklYZ-OQ|Fld=^{Mr!8L!lQOXT!lPB`x65BgsqF`YrL_vQofFJ2V2@c;k- literal 0 HcmV?d00001 diff --git a/repo/objects/73/724508a98691fcd280a2501c859510571bb82c2bfbf236a18876fe06242ebe.filez b/repo/objects/73/724508a98691fcd280a2501c859510571bb82c2bfbf236a18876fe06242ebe.filez new file mode 100644 index 0000000000000000000000000000000000000000..f13b19e76e30e260a51f3f5f824c82a023b3509d GIT binary patch literal 780 zcmV+n1M~a<000^Q000000000000ou+00000000000D+_c000008J(0}Z`v>vhVSz$ zj?^1qi0nhVfetMoXzBPW39Y!QOmdQVbL_}=plI5E-*IRMliF1pSF!z`$M5+tehZki zyx_4`aK#ENSprtUx52v^;0~pQf|Vs|4_Yu(QbvrvjXTd)reqJYWGZI7Y?d|m`Tu>aAP&!Ru+L< z@|gHaL!lC$9vp}EDw&`Lnvt>u27<80+!WQ@EE2%MrjZjUF~*EjtOjQ zj*A#O58;ys7%KuZ%av>cayr+rLv3gcpPuh{0=7Zbb!jl`oNG{}i))hI0|;hMp&jp~ zk%Pa6gHz7wZUu`3CNT)hd`rn;wa6uISV? ztw!;p6r9MEm8Kpa$h;%WMyug9g#?4ibP{bS1sG4F`6vuwyjVd1%U~5vhU;mtg5`R( zT!f0{)oYp;}A|`05@#dKJhMH=~n@AvMJEZ2u$amz7K}-|%cH^S zNfMvRNY*APNM+k#$l_&gZQ1qx{eIucWYtkR^TiQj{CGV7m9zpKNx78;>! zC#SPmFk|43Yg;ifQ`F}Z4Z6o+jp6JH@23a!yM0&;Zbrk%^Nx~ky^D|3@R;W2WnkmU zlN-BIutS88R5ea7JXQ(K@{Kwig(2DNc4_H8CbFz-5WBf{&yRGs_dLnaLaU_bLeXD9 zRzj3kH+x>~!y!pfUq7UfMw4!k#`eJX>D3yZNla?x+gCnwX6GEwa||ZTG4Gw?33(%x ziymsEmzOmDVnfSfQM$T2lcnZ6(tul^GvYclBBhIIoJqTX5_7fspF~{kdfqQWUZA9Z KF^70{zJ3FtOmi>* literal 0 HcmV?d00001 diff --git a/repo/objects/74/440b3ef5af43c2518429f8b5b34c84c37f73202929e6d6489c77247b346e4e.filez b/repo/objects/74/440b3ef5af43c2518429f8b5b34c84c37f73202929e6d6489c77247b346e4e.filez new file mode 100644 index 0000000000000000000000000000000000000000..4bf06ef45d4e43a6f2eaeb9d233a55c94ee4bb4b GIT binary patch literal 838 zcmV-M1G)SF000^Q000000000000wse00000000000D+_c000008HH5aPTN2befL+4 zgj9tT#l5I6fue?xKxjz7aRfY}jXjQ+u6M27bwX6N-`-iGL-THCu24BOd({ zXy8Ov4=r2bKjsXm>kDBlZROw5DS*Kis%3a+d$z6e9c2nB& z-Wq;0V+>rD%&E$0o|Fh_!X+01W(bABq!34rf|B8G5MGX_A#_F$aMuZf&M161revEc zin^thR6NTCCuW*T(~egp-Z5PFg6<`ibj}9DLHIx;Kz|U9dXowC#{qQUrW1sN?sV7* z;AR@!j3>PozyzHvbOiq~I4O5TCdO!K@unL4ftG4Wn}{K03#8>n$QPuHK}0v|{lz&F zCX}3)LsIg_Mv^v2Kq`9#h9sV(*5+;BUoMxexhz^r&wWvm82_|IM84-8@Pw{T0{7R$ z?s(K6Tm-$&c`tap^bQE-65ohWk&HwUQ;Xa2>Uoi1#=t=4g+0dwwK=Y#+xtvR ztVWgv$mo{7;C(JAsXnB|*Eooe|U>yx$(s@Ah$gcGc^Ko>zt2C5q3q-H0y9 z9!sMxhGtH;nO@)TAPXUKs}GOM!oT|kHNH?hCJ*hES{X}kabs&PXg<~GUb35KL|=`@ zEse`*K?wnpfI2Ty(pXpr=V*IcD_tGejb};;x)`Pm?SN!p?0{{mJ!hdwq=c>O)~(9y z53b{j#9c`aZn}8og*)zMY>i*$z4)@*X-MzzR=27kT;*s=<#bIgZ3E->#y2kcex8ff z>jfi}HCyRXDe&F3P%FNmZ%$SD+NbAC>{^u6#?+{D0GiQ@8x_3cLiV`s_u7JZGZ1O{ QL;nMm^tA@xf8%xf2Wk$6rvLx| literal 0 HcmV?d00001 diff --git a/repo/objects/76/33ed5db7285e92f154cea1569807c1b83260627aaeef33459886ce1f7b0446.commit b/repo/objects/76/33ed5db7285e92f154cea1569807c1b83260627aaeef33459886ce1f7b0446.commit new file mode 100644 index 0000000000000000000000000000000000000000..39e77a9089c9e365eff87e5719885511d149871c GIT binary patch literal 1172 zcmb7^PiWLY6vjt(!DTF#RuunS_MnFrcGd+gx@pwb){9uGtB7n@on&US(jx_OC?|*dF7+KKhgfMU0Z^NPxe|tY zn#NYIU4ie>4t+6^K_V>SV0xEAGS|P_82Q1 zz5o5g_UCsx_CC?aI_Gx0yV0$ux_SG^_Sk_Oz!i|*Yoo; d@y`d{AHS)kp6Rb!g0s`Dd^JCtdur}`x!)M$mVf{N literal 0 HcmV?d00001 diff --git a/repo/objects/76/53f9e0819da90cb51a71c67b8ca62892676c52e4d377a45b5c147d5e6dae88.dirtree b/repo/objects/76/53f9e0819da90cb51a71c67b8ca62892676c52e4d377a45b5c147d5e6dae88.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..e1f91ad4aafc60afb77896cedf226b044a05b877 GIT binary patch literal 344 zcmc~z%*#wmEiTc^D$dVim@$QY@yzP&z0rbF<}J|-9Bb9CeVcOP>7A`-R@|NWt|pdG zKPfYhp^ee#djG0fF2`5R@Y>>fW~PW$z_k5}_ir{GZCbzg(0enNEWVG@H3!o_Z)1Mi zdi>qHZKc1K2wimf7D@MH;V*WPN+_ z##4llDJm?*8Hq)y3~l%Cm)2}=i@wQzIl-L1JWbWnJGmtjr~X%y^XwsHjvAXA N!vuzF404PH3;?y*sX71v literal 0 HcmV?d00001 diff --git a/repo/objects/79/6db1fd624ebb40c8774f017d1dbaf926d50cdfe44a20312e02f2cb4c0f39c6.filez b/repo/objects/79/6db1fd624ebb40c8774f017d1dbaf926d50cdfe44a20312e02f2cb4c0f39c6.filez new file mode 100644 index 0000000000000000000000000000000000000000..2ec5ccebe5b78bc18f6998d6b1921316a703dc88 GIT binary patch literal 679 zcmV;Y0$BY3000^Q000000000000ejd00000000000D+_c000008HJNuZ`v>v$KUfQ zj?@=mi0q=h(5_kvDP-f;B&g!4GRaBe&9NiffuU*NeaC^Sdze}zBfF#%gR>4pzbUyLU^#14;`uYZ}xZ3}B*~ljdb*p*QKn$M+vTL#o+<8(8t|r$7TY z@_ZQC&i=Km85g5W)wh)I5NSoxjaH>*HPErph+tGREm7J*yR znEOgYt#V$R9EWVJ%u$1_5G?B2fGWC=*=h?jl&G12O}iI7g9Xn}8U#jHJBz6>hkeI! z8TU>@a?t?yioncrC5M2V{2C6Z4SmC>=Q}RIA*ik|J!YM94XSZ@eUf_u!R$-w$opUM zFE!@CWk;@5L-kYyqzaE*2-qXE28&h<9fE@4F-qs_Z3@9^2aiD<2di{Un4PxU=Ffnr}vH@+z}; zkpP37B8Jao7&Nr(^t!)*Y=vm7?vqG|y~GcoMC%T{K21p)OYTPV18w#A-?%fEoPX$l Ng_0g9`2L$c`wP^&JEi~t literal 0 HcmV?d00001 diff --git a/repo/objects/7b/6c611e0a7b4eb62b0b10adddc3ebc5561e072f4f9238ab011c8915d14f6aec.filez b/repo/objects/7b/6c611e0a7b4eb62b0b10adddc3ebc5561e072f4f9238ab011c8915d14f6aec.filez new file mode 100644 index 0000000000000000000000000000000000000000..870713c11240e1d6a89037c79fab02569cc5f29e GIT binary patch literal 753 zcmVcW7^nwRU*9IjEKW&$SFO7H~kc!JU(FiPzrCdU+3 zjgDgsorl@p0}K@jGs~6i0CGClP@^{V4j&(L>;*fZn!dD{bAUTl!B8oRi$ahTQcty?gvr-hA6>hco)V?DglOJJQ~bqFdRn^z$A#`us^>GBACph z$#^#C0?g3aLMQN#24~HTsEH|B8ob$+y`-TU@+MNqS&cN@1bI!)7$me&uMf_NFrnnS zDU!g4Hj=e41F38W3|TzStu1@Lzu9cMYgu)bUi)GvV*HCP3HhFP!ZTW(3~t9u>cS$t zx*o*+F?A#y4Wfq|?}QGy#23#=KqjI}Dcv+?s|8QjXfHg^O9V3prn|t|{`FRE|9~E2 zp)4zVg*7=l^N!&9N>cx*70}ylYyyW&-cJwcnm&v#ZwLL@^LB_{6U84i^n`Zjs9bCB z4caBGI(^%pK~_SPR-cj&$LADeX-d=scGKKDG%RT>OlP#SG>SK-xfAg(-qXylllShy z2xZN#hFbB|eH&~ga7ew$(X^g)4BFq+)>!({>~lAGl>YslQd4O*s=W3TUPAEvLsuwMzXAz-)pyKTAHy()8m;QJsc+=AFwYrH-Wrh zAgK) zfbiYPLB!0z0&arODx$g^un|7rg{bZT+zg)|MpTo4Tj2BmLR9Yt+zOxHMpVB7xDDDJ zL+tr5;{F*#`5Hv^Wxyu*ycaRM8n78YpGM5~0=B^CI}o#3z*hMDMa1lVfNk*khltrH z0Ndg7TZq}$0Xqnpx*G9}1lS3mdl1jW0Jp>E8N@RSfL(xp19$^`{}+g7o(2RRocTTA zPWb)-#M}nJqlBDVjW`dq2(}}jyYzm*H2g0QI15Pip8@<5 zAlNwl93bd&wi56RAoYtJAoT~}Y3)axrT(A+(tZ~Jsr}~wsokMZv((<8v!kC!%uu^7 z0#bXP1*CSo6-a+UNG0?m@FPHwTTw+w@Ix?EuvhR-7%KcO2yG<5kAmjy?qcA>@sATS4F0RFBjhl&dF^KqTh1a5ybp1B4IxLs4ymsr&OL*83w0;(%Xhtl zRK5>%(B49VcYy7#`cK4m71RW6wVp-X_jOPcw4ZyL1RweraNW-$-gF9aa3f+|Ma(~n zxbRLA{LQs6=I0Q1{1_18>gW#Ob z4aQl07h>!P3GJAGe!h*EtU%O0L_&kNgX;!JDE0}!c0kAp$F4(6ZY80~K0?<0PsA;s zMQr{SV%IXn-QPj%e*kd=+FyWJO@0lr@Ei$!p=T>moI>%i^g z`d2><_!!xATab{^jilvruzBEC(y|il6!;uzZ2`L0M@cKSZ|i@MHu|}(gS64lZF699 ziVu?ZF^aE~?%4gHr(cr2_k!QRpZ+e$PgDO42!0r^Bm*;$Bd>TCF?JQ%_sDC69PB0g z-UR(s{uAPk9b_;AKDTBg8T~T&;+lua=(i!ZSHBJTEbtGIvBn=0BE5jP`Ck#6wj*x8 z5wZJMhs^ zyASc){~$+bykzbmM;?IOdgB}9XeG3}Izo;<0kOaOy@;EBh`1w2K723OFZc}N4euxC z-vfFKtwP)}OTP0RuuIjq$&cz^BIMmVZhwTlK>L4H7h=b)f%D&hoUxJw&VLhd`A-7p zzXiBrHgNt4!1{**=br>zwl{G8DZtvh1LwaDShqfK{=0xRHGvnlL%be4S8?P3^kc1D zF}3TXg!CS%_*?1^2aZ>K?+e3(yyJz6-#z{~ojWStPJIfd`o_wYzlU7c@F3z1{fIZ} zpHJ;Ty!n~Rp37k#s@PU}pcnjfa;kFX+n)sgc)RjbyCA=BIf~ePHRA3(;@($-_1_3U zo*D~odEHJ}5xnn9e+2pM z!-zMmLA+@j;=bPoKX?1DAfEmW@IMF{yE6E>JD~ls7+?tSmf+_%K>iL^A?|-V`1wYN z!(cDsNPY10ABFki;4Q%i-UoBabuEZn{{*r3(cljxm`lj_5L;eAjNK7@_A4+K3_THi zNd$RiAk9LGahgs_(xJbKvpns<#fnx~uUQh}(7}?)n*G--oMf&%>H&_}A6f zzW5mExnsQy9)tV3?OuKJPh!(4ed6JGTg(5*igZcrgVjouk< zZ~QFGTjSyO%`oTZ?hHTrrGE#zq{Cl(1pF!d9mE^24nO%lkb7+$v84lXpe_8=e}j2y z^kDeq5Uh)&+YmdS5C3xXtDv7p5gQ|j`#08Xy$j;zNPkVw8!+!r+^OU5YEHhn5A@Mk zbDQ?hVCN6id?gS1y6UeHJAP5~>Q7+3ky;N3>#XFfwY6JcfV|sMdp*T-D{A|HN$2bP zYvp&=LO=Qu_f*v8?}l~2x~mYI(}?|h5fAM`TwGK8o(-@*3>~U{{}*6B-FhWr%l(Kw zcI#wGaFitS7I091#3^?d7%Kd;sqpBKGZxhE~CP@9ay_D;vSTD?T3WItg-bzB?LY`To7p7|r*W9gD_TzJE0u zqxnAC9*wbl|70{q^L=DxG{*A%r=u~J@BcVD-wo^kYqleH?FNK=e$6KlyY7$P`|AIN zcv=_z(odmwySXR&=Kq2IZ+K|g<^AB_lYh5t@*bF%g6~=OR{^?SdJggU`DLGZ4D!p7 zx0XHp^shm$cP)EHgZP^}wCtGz#NXUX2%cLWpjARG8H37U3aSJpOxGJ#bcx(Or4}?= zdqmhzy(u}Z&IBm=a?%5&FF_HLf&xM%`65$wPfkgsw7er*l*E7`4mD4Pyhvou6idaG zOkQzhsw0!Ykb{Ed=S1Z!lS(e1QZtS$*OG2FmK6MzpsOmhHw~X=pvuWXMfRdaRAhfv z$w)nFW;!)P#jWm6B>G?s-33h@$*I$+v|`A98~zme0_!RD<=u%nITKfQ7c@=Hm^x8G zwsF#JVp5CD(6%kxn)3dMo3^T?yor$5VgCqe#PFjdELf70tb6$;u0#3!oXUN3NSFN|R)!2X{3rCj+3{Ir2P6Nm>1_ zH{ruXoK%H*mVr}dqYgm6&S|c^?N;8RQ8QrDITi+nc_o$}&H|Nc zGWBX~15BM!=B25$oH^~o=o!aWWk4FP1?JikIRif_EL`L8H%BKv_=KT|Khuz;5hSx9 z&a!Xw@L!5eCp3-G-|*fx7kitP3wcG-lCmbLaR}hNl*&j`iZ-vnJabxEl(IP`pI1C$ zn9i}X-m@92)ncmbZnZix%tl4Wo#r+hR&%qmduppABSkIo7DFR+NFEW~2TWNuyHeAR zGIdcS%-M2&WF#%el_YqclJm%7 z8Gq(!S&-X}>^|v|kF7bd+h5jwLrqN7*LnSaOqeT%buhE`>=t%QQ*n zlAENnY?E{@xk)-N&?KFHO>$Mq0?+6iZHkvQbyO-gpt{#nXY~>dhd0f3h;V?iuF&G< zs6Jrl+Bs#auM_MW6@F(JLSw&?EcHFFk~_w-N<1~a2<5RNB?>uNOQ{)2otESbRLQh} zRuU4cHYGJD(d`KzCI8bU1LNgAb{9J}$84kO!^yMZ;C`IK${Ay@XLZ}tA<;6L?zl7( z+_;dKr!APcjJ6DJs+u$8_vGJ-J3fXoWn<@3r^=D%nUn?A^8#xpVc7ziFsmykXJ!;B zE9W(;EqNi8mlBGckj|CV9RnPh+%Dh%*9@A3s(|oJg(shdzvWf2q>vE(`7ba=8$sqpxvN((MxVZprzo=)gH%preOhBJ7?q8R z+5rAevQg{DKKwXiGL_Q`y36=AjXCKZGIg%{kVKP=&kjaGQ-+koW+{iukYl=ozf3p$1z+hHbEcVpb{&zswLm zkp7%DC_ z%*R7?c0U5MyHLa$Hd!0T6kV)8y2kl_`=GK2YUrj~@Gs|}E@#Xx=OD-#6YIu2q~}4Y z_5i9Gk{8^^bS+axfvu1vvH_+Gl_d^bm1#`Z8;kN*45@UnxS?OorC=eX$?1(E!JR$? zOZt(a!mNSEwY;$_^~MG=bGTCV(Q2!$)ybmlxQ`aEu(vn~K<5}?dy+?cT=sHZwx`HO z$2%0pN)}hp#YTA)pm-=xv{YtB7)}k~vT?n#$>|GV8d$>w&%J2R=ge_Etjs{wFsDf4 z$(*WbxUO`L>tQC3C!F9gIG%{y^U%zRskxZrhgkve67wirB}iltetUv#JDw|kYA=eu z999mH^}D3OkrS;DRRHZ5(@v+Qoo2^&IEwhDUNrUeWTx%n-Gf#C%c)9~1G6n|NfsBAhej?}V`8ll1!?GBJ+3jLMJK zXPap8O>46`n(65pkkz%ts%#pHSiM%;BI@CPFDjRp-grl(G%OlT^=5)ihYIsp^XRBk zVEKmQFm9Oeg)LI3u)yK9F&=PRZ(s0A7YqC};peK@SFVX8hW(-ZWC4!{;0Z-ja580i#QCm_l=EIt^vi6xO!j26#&%u|=%OdrLHldvMRg7>t`% z?pnoouwM00n2rsv;M94tg*lqOOW{Ko+YMdhao-kCB-y*Sn4wDvK#(d%T zES%+qA%xf_9WR{6=mj$|$IEOgLT{TU^xBS6%o#E?5oa-BY-aMkJgaYGhMZx2@sc=OvYI(Du1d4=X+^({Bo}L;M%~Bd%p$e$ zlq%=Y)Zp~-G%bD52X_K`saO~HmFMk}H zU2ALBw8%Dz){BJ=xY`y=b6L|n(ytb+n@tORwmKF{sM96nESJW^V;ZDz2x1|hhl@uk zPx(su<$6~H#&%~tD zy~?y)NIN|pL+C>b8mkvW~wPaqrwT#_@C6?!}Nb;;74qllzm$bp1^S>A^d zB3Vmvs2~!4=@$W_mM?O%UnJIL9u=`%ijDA#X{+4La8X+xDX0e6Op#pHmZXi>=hJE{ zi(K}u`r0TEv%7B=xbe9?Y*=69quWY)z2ft+ItSibhYS_$HKkS?z2}o}4m?3H+U_D{ zMQpc#Zn-^CbLli03#AX4r4Nau*Rs%N34^PZ1+jp^>(MR8zKojtGAimz9eX@HZGZI8 z^gxxP>YZn-P;rWKU0fd)YmfXJ3m?B9X1|Q zl)E~x3!e{XbK&;3g$uLLCa%MD-Thc&I2dB|MH7A0{O z!*TsuB|U$cF=~C29&F4DUl$8N0te zGMU>(um`)3*~UY{Rir=x#F-N9-kY@bbryb zd+fQtNNN2p-yP_E)`&JPf2EU+$+dJUp&e$$rK#ZAF|5qrNXhGfd|aM7m`cnjMxo{R z0g_T)AFnYfWxBYNic)!NOP-}0<(Gu`1b3i79b1pLQYq2mWgBZ992%uT?#$zHF~UjL zCI)@*v*xX2$|`jWwB6vq?W#H^%}sS)X{nT>%i&Rv(tNVjHC&h59{_P~%J;(_rL1nn ze;BCqM*Uy>;QMyWN`nKEuU5z(Ol1=4ykI@QVn|M99FE0&UQKjk_k5F=h}p-Byu_@Y zuZt3~y6rg&SlnL_B<`bE7>nB*0gp~wl`@vi0ht?H9SckQ>lLdSitksfrHm#wsbkl$ zPqCNNnUa4)zmm>6(XRmdzTyE?!n$SH(4R^uPFzvo+7C(4{x-dE!~QILXw-?RR!=c0 zOB0Yd9S5=!s8QJ(+nTiQ!G;?^at?A->Y1LN5m_B=JqB&T4Ei%cLsI>!5bS;Is& z0mhe%@N*nM9ppqB8EGg!y16lWv|M^qw--adjiKL*;ed_dfEUArjbXxpAyCH-Iq6X& z-g30-gxeBQ4Fz=9|f-@)bs{=SD7u|@>u6+*?o4)0-bT|7;oXyo0(abS+G#gTIP)TVU?R+O45mK zioS7eS}kM}TWX~dynvid7iQ>9Oj$am6SK>>8oh}ePpT?=b(1KHI@ZTH~f2sX~?|ds$t8PJ*l*#|6j;0naiw&l(d<>R`8wdTRJ~EtDRyg{q@7apHYuCM7kDyR4pLS*KAys}e|>j64wDq# zH0^Q~wZ?Q>W;kF0uX^(hsh%Wz=6+m-WkXVbU7biE4dXZ2gUyzMgr34wD(=ZhHJ>Nu z_c~Pd6moghtH~G(2E{rh#ZnnXcIRAcD)wx4HkW#6>0+rT6t_fox`gugxXP#bWsZ4; zs$ad3^_%^owpZ$HXB8#kuLrB34+XXyGaiVVx6HHA5p`b4NqY(z_QnNQSu4o_mi-d! zSq07JF;Irc3F^V_UUMx>`3nT!RyoVMO8T%Ls`FaD5cdnzGP;7lax@E zyp&NjNrBlAUn*ni%E^oD%1gy1lWd;y34Kg|2nNc#cb!xBQrI~;BOMxwN%YsHT`b+o z$a!vMMA;|!z+EE{W)6K1#6Tun&}e0<^9h-kKQ znyn%l``(Qc4c`$8G>K^VWwb!Eh^B?pw1{Y0IZdmGrj66IiD>vmyg<8%ri0UTh-f-F zO{a)vJEz$$qPc<7+#sUa$!T^v)70uqj}s)uy}UcEorrnSk6P(Ro#|JwlK@(%jo^=PHnlIB9xL>vDe7**W*<7WfIPmL0F}77p&ML@WCodX7cCCJxv0S zM#?5LrK`+lGo`@0X(yXaopd2!z(j9ma7G##?_#0EtTjFBXvuZpzJ z57lGI)Uo%w-%J`|VPA*wI?sP(M9D*%b8cU9~#WQynCaeS!UNmYV_ zVyB7rD4%GLI@6SO4cDoOW4wuDA{s6(Ae3{G)0`C1@G%Eu5e?U2K%l`266Z8=5e=WP z1A^(g!j#Jc0&l1w)0}2nL^H!_W<)eePLmYTq&Q7VM01MMoD$KT<}{~8G<@qmkQUMK z|MRNAtcWJVX#@+X3RC0-R1r;<(+I=i45v9GqTxv{Ajr_Ak4ZYw@a!58B)tk#x(*0( zbp@H@G;<=Fc}_DgqOor~IngX~nne-KSx$3Sv_76R-k!)a=A?0j2Y(V2q$~9oDnk7_ zQphJQ#jCwAb)&TxsBX0OLe-7dUa-2++6z}VT6+QOMr$u*-DvFvtsAYquyv!g7r1V; z_CnW<)?V_%%ZgxzTE1+g0~-y;rmdC}U7XgAs&oOXv7t-bIT(?<1z znqDxCnXZ*qLs2blh;8)GJzBy&>cJgmx6aHbjKLlm&lbf@%Zumm_AZC%S-f|jtpY|% z1$cG43bJ0GX~kFB+ZS`^aNS98Yp9Q|mrXkgV?ACR1N8m)oMT{k%u5@dWr&*rh2@Bt ziQbEtVCztG9Z)qqF;t6{fLnVbWG`rcn722ww|CeN(*zkYGfj+mS!@JcW89+t(8%bx zmjS$sBDanTiz6}93RAgb4~QC8@_0vtUB;+`46mT@Dxlna*105d&l`@Vky}c%mq>23 z_FBh{)?V|t(b{VtH`-e{?X4G)UDj|m_Bu0mf?&Bh${${_TwpX9{0Q-pM7%_}A9r|h zFWDmvUJcPbm2QY}ekmkclUyY)+lY$+Pr=VSX{MDYFtZyvSac%F4eWy>b}%Ga8(gf&T~g?kPP0 literal 0 HcmV?d00001 diff --git a/repo/objects/7c/d397e7cc9be27fce1b3f613676a36fa607401682692f23ce8c8887c38ecfbd.filez b/repo/objects/7c/d397e7cc9be27fce1b3f613676a36fa607401682692f23ce8c8887c38ecfbd.filez new file mode 100644 index 0000000000000000000000000000000000000000..0041e2f7d7d55693c7abd355750583122ef0e090 GIT binary patch literal 847 zcmV-V1F-x6000^Q000000000000#5`00000000000D+_c000008LgFFZ__XohVSz$ zj@V5%s)i47vjL(l+19bOU6TR3LQZ^=7#usYopup|-_CIYY-8&X5|JV~KIeUWzLJD{ zz?2h}$c%;~R$962sQQ!dzru zBwBc>`o+j~`)`Vh2|3Di^_uh^k(A_J8(kPy0WEWb2v+BA!wl|2s~gCe0)t#wXGGdK z1mP$~9%=)X<|1!BhxQu9(SR!v9Gc34&bx=B`2`%ILc=61n^cMnPDO^wA}~7I@7NMK zq#egA4t)&q&luoP6PP)n)eumS-M|`+rDu5l>x`ekA?U6y1Ll0>26XLpyA*Bl`@<)sahGQ$8gDDZ`DB5>kZ5V&2H1N02jom?g)Hiv-5=OZYHet;X}@@_?LO zsmbb_)}cgIOF?AH%21D63f>dWqSf@6B;(2Kbe3FF3UD|}=20BO;bH}2SdLf8Y{&1g(p_=D63uem{*FOo(>V5_}DSuJcce$w@R#f}r=??{@Ku+M3aH+yM^G z7wKor9PHIJ$n@sE0@X-aJF|PxN!P--hN}Dhu9Q4FmsD#>vnbqP7c>p85gZS$Ety27 zn);TpM{B{U1B$=HHr34Vjy||m3)r*LH>xAm2CYT@=PAEAXPTzI*Zvn&4-r(AtGB`q z!LM3cJ**n1cAKzY*^E9OYI`|4N?aSEimjkdvHkLX8^K-KOG@-#;2S4G7}B@Uib5eD zKDhel(6;B5;FXJ%Gi@(DkDcexzk;M>x+DDMP@tRBU*^tq-LTI%5k)TiRNmJdAF*3% Z>&~d{tU!Bv8o$xKLlKJH7v{eA_y>C;meK$K literal 0 HcmV?d00001 diff --git a/repo/objects/7c/f2ef241fd3e2d0c8c4f9b85c16423fd9276fcc012db637cb9874a940b9edf1.filez b/repo/objects/7c/f2ef241fd3e2d0c8c4f9b85c16423fd9276fcc012db637cb9874a940b9edf1.filez new file mode 100644 index 0000000000000000000000000000000000000000..042a01d7ee31c06513674d224185e3ac7c918c30 GIT binary patch literal 816 zcmV-01JC>b000^Q000000000000wyg00000000000D+_c000008I4riZrVT)efL+4 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%0A*w25Y@gL0kEWO?F>lu{YWW}72|sdPG4k5 zH2?U+2>Tl7l~n=<>{x+*RLmJ9aOz8|xrG~-`!oc3plx;RC+SzJ($s|qCOxj|71Q&Q z_o~%$T&wAXY_W=Q)YZ$ev%0F*LbWfm0^2L8EG?$4PNvCpMuD&j2ch<>xbrDXmm3k( zTw&)=s5gd07B`d80ooA#IPR-bIwtrmNxeKyu}+_qwEIVGml6k0}9y=!Az5x*lE}7__W*uf8*NS5M z3f#H+wR0(dZPgFp&Sz88KYCCAtN2p-u*kC?csa?qbb>iO%UJb4#QMh|1SYd5WT5M- zjKU~avGq)Z(ZtV=1qO`~W6!|OL+qPT=%v-(0~yy&D(9&Bb*2IujBx(Y&yo(=@*<24 zEyL@jmTo5BdKi-Z@siWkqzUrB2FUH^0YxOPVIZKRPIb*HJIyVp<9C6G2f+Q#&;LgT>0R^kY}#SVc?FiX46v`Cet7y<0sbcZ%cT9k@@IeN z=YI?k|LD*D;m`jBVE=u9`$w%=P2vBsKlpopVAQz3_=o@1U;N{L_J982AG8|i{^sx8 z-`%teY>wn4ix^!s`oWw>03`8lc!|EX`nZZBR=`Fdw52Q4S@OC+54i7FkNQNH&d&VwTS!UYpVAji|6MKli zV-BMzy0owQPA7gOGi1g9C3z(cD9XF7tgWrF&dI=d*}wR7x5Y<4qVz zi=D?-=4BPPU-`8sl-gXWSW0JF=^w&d9uv%e+U;)Vhq`_UQZqrODWIHU@4$Qz>V$=T z4B0BRSKbUlB}8h&YYy=w^o7ZApwu!uA{MiV^ru1JGyAs~K_o4Jo zJ(Mus(!H{(Yk_YizmR`e2})O+J@*i9xsWRRA9OI8Ee1I|miKK@nRg`U%M8P^Q`01f zFV>l)=7Z8z3qlEUZNgp7#xEZ2@y!gmmvBZ3FtuRF6vaO2Y%h%Gix1LqYDow)Vayc* z-c$9zHSl;%>x=wZ*Lzw(_R(cN{j zIiQ;9qm5kDSR?IrPf4BrVwY{>m{W??!>UYH5H%Qprg3X9pTt#+XAN|RDl`+)1pIqm z5XrS~TJ}7mkw4Jk4{l2c5|~bbG;o@?JPN{3{r%cjYPLVj|J?SR5#sN*d|u_YA6EJ1 zBqxRuyS+*2=H0^pdTA7rfpqHXb}+*vU-j;DNNzraG-V}ShTtMsDiy3~iS^kGDX0!l zWuqcfwtpsSYOTyfr3d-nR}DpN)lU|pSl(B5Y1?=q297_%p8|Ypz+2h~{M^|3ckdh( z5~kqm7wKM0`xh<={D=4>vo_U>^lmCHFWg638mQFq;tLySeFh|5)oLcj@4bmFJk&GM z<%+g*xsmiO)tzA_PT|^KiV8B^xW91GM=x9+f|rC9--N=k zv`)a$A$*&g`lPRLwT=I>Tj>pl^|h}0ddCd)iYbC5PFTH^;?o*d13>N6)z5pQad__p zhi62;nV)ao5$`!L5`ha2mUe`baPxJj0KrI@X{x46ZESkOp%TZ-dtzA~Kj#)vK zs|r*Nx&~$=mklAMDeU>Q5p`XECO=ijwSIPWKTYgO!`E3&(etWemRiySa3O`#zP%@-PH1>8MCD^ z`D}<3b0P!B=1!`h84qSJcM^@O*OVEUU4Q3A!9jppyI(228C- z5K8J1kAjh@2-Cl-XMs}+{Z+kf3`jf}>^NJbl*Y=Ud4zH#)A)eE%iOW~d zUd6jt;|sG0oSXamFHNk7>e907j*DKLqp10fHX|iE?v2DO*OlX^AV&gHoF?JXrp}Xw zE?bW0;1F@qll~!LR$y^2!4Nyh$C)~{WimjU;dA}Agh0Bq-`&lRQ~i!ncL4-_KwNS2 z3I8K60#697=nX-nG2w|q+|T^m8u#T$AgOue?55(I#?)#V^WD^qeJDQ={LP`^E_OTp zG}Wt>YemBpw6d0amg&&k0rcKrKBR(BoMwt@7mRG((=%~}5QHb62f=FL@^mcpfpcw_ z*Z9|Svr`>bMXnHr2cLiqkEvkC9B&Dr5Gbk*{DS( zLZJ;nYwl^&sX*Urx!3eJc|`6GWEG4YY<-<$KhQ3y`U=wCXS_&q6Q_8q<;J;?WEC6v z(APh6e7+IcJM3>~B;6MniS)}F0pD^n&-j*GMreGvM#0YwN)J6xp;|#<=zgGIbqmOj z;EDw5k4n)4y-e$Lcwg_4w}7tlZ2tggl!CdY#B?%Vj@K(@=;R#bV~~!B#RN4cK{M=j zE8)iU6)=Hn1$|J|`H*{{8ldD35rexzja5XZ`Gt5@sZQx(x*TsM8RVPMXi?b2Hx_T{ zjI>-$Rrj-7muZ|z*?OK1q!h(CO(1Sp@!iDFJ(vu8DD>kM058+9S%g8U@oQfxdeSp$Tz@V4q{VL5y<5dbj`ks79PuM9w(hYtDdFc-{ zNy^Tyz8U#M2+B`Ac`P+F-!Q(3>p*6R=oRlBX(HhF={Wfv$*DKnyp__>l{&v0=I z*FNeLbnlurr7rRmjF1-}u{#21?3EVt@72Ce^*d5BuTp#`SSTdy{RV8~71`Wf&btIy z;UQI6Nhr8T(eb(3Lw7oo_EYsROUO{wO?rqE()eNi0Drx4>-<&;D-uOb0<3A`%xgUM zWQIy{ggw1j43=Z2gRnp}gmfzizd8cPq;XC;->36qRpvqin1H^g!KY_9bVpDqRC{mF$Wo8}<@NtLDrUxD4s~E7BpDFrH&t zU6m1mxpsk~Ggq!Q+6gTlvUObLVauGpzMjnur=8S)Y{1X(q}CI= zLlX^MAgr#jo;rCegeF~bJkbGKb^DJI*ajxCN)|S!bDVxZ$;N8lP>V7r6>}!{vt~Qm z+t#~pU7OHl(q1F2aXs(1nEPHhVj;+J-r*=u!4UViG5YdugwKN=aPM0eDQ zHXY>}s8}Kw#jCQSlalCG==aHe;acKs?7a9dK+{lKybQz4=LX8aMF+Atmu+YA{%1#9A|Aq@d63$KTLJD!a+J1sjrTI z9g_#BTR_yVc6wx(`Ne-zudx#QE#@ppt{-eyO7z@GGrRv$1;^Rh{B)Sbnar2E z-y>k^y5u}ftDl?KcDH&*j}6hl8B_Ht&xO`R%*wKMSRC8HY)BykwR~ISSd#SyotSVt z7#;=Eu#XPXbWrKpU3k}y@dAMao~jmep>z_eFN)D)DTYmH`feVYd6^|v1FHeEox*3vC&Rz%V@;|YmoeQ&=KUha~z`a zeAf{p4>2IHEx^;}7<$~iu6a)Nu6f5{3Q43Crf14VV)!)#%r*D%qJgdp!Q)1`97NNN zFSo^ld~ICQY?xUL8DqZ2>k&*ci_;imZ0;PE-NGHBvZvyHCi=!`J@ZW)^|vPVx6RZu z(Xj-{AGgF_UsosYy8VyDUSB`HuK)Kcs&|jm6J4c5c$~d`s-pLsRm2@#+KlSw7J8?j zL+b?PEDHz9ij&tL-z&_Aldh>UW-qc6%G)yF%*eP9fL0sa?$8oF+%GX}nzm-zvJ{(6 zT8L@>+}B(r2k;3VmHCLH8qG1#tM4lExAWFq_p$j6H_5!76mJ%jhkrk<4D^B^qRqk+Zn$y%>%43Bv;|h|1W&XqWxoQcBA|?LO;8g6 z#6(QuT!P!U)5(Uo7u`{Bssp@?N71sH*(Ka#5Zv%RUNEo|m+;RE(JlR_#p;B;uR%u^ zqEu^}v$!%;^My15cN4D?IcBdedA{-gYJb^yL42A*JEf?e4$UP`IdOq*6b3U)EeT_;DkGKlBY`#^ zXkX(>BuJ*P+Sl~{v2WXvUYAUlk9RGbd_xT_bToT+%jjrl_KdZ#A60yxe;%3oJm(g> z`$|w|eX}OmY<7KP@?etXaa?_wXH04(i`-bU^nfMN7g*Og^WN=)@^EnX_CcETm+s!) z&HE>JZ;$S7juF2D!Flr`WnZX2@8-!EgO!UkjTw9%XaKn*Ez@4fSRi($IfX!*K#(qU z{g9q-zzdy3G8auilyR0?IEGbon3}z8Naj(+7vs6rGq%W} z*bxC$5k4LysohTEgK@fdXZD~hN6Sk~{k*sMeYu$BOW&6Zx75EDVZq*4D&aypoE*;H zy4=~&!&GVG`0f%^RCaW5a_;szhE+gs3>F4XfTKh#9*8P z0iy>34h;H{dDgEK_Iwp;IQv<7Fxg$~<%dh(O$J%ApZAlcs>SazUm7V5mdTuyBCnSK zhBT*Lf-|M)em&F};Y|U1eQ>fEuOOChR;bO(+jgYJk{yfP9X8aEP!aWXRb(U9&Ui&+byteuQ{l00XDPIhV>9&rq8O2-GJxZpj!txKZDtA z>fbwBBW+^%19iNoVm9wppqp5~C0ETf(#AH<$FIWrzJG zWG|KD5$|K!_l@_I?$z**7<(4%|J4}%D|E@qo^|WU*|o@E$|>$%qa8<-#yyKLd9$bv zRmHfC-`&)|+jLYj{{4pdU#g2dYmrRRp!evVl2mZ;@QhLX0OFq z^c(+nQ~ga>Kf%9$II9G@`tL`xi?u1(Qd7X8iKK&N5mhFTJH`gA<7~M^Yicf7vvmFH z3Pkm(>oe;Ub`FD@K_*sG2yXH8-C`@a?RdC?D{$onx&_8;?JKx)`NoyDZk1Rzi!2|b z%Dh;Q;G>tkWb)ZaIF}ItfZuxInRXFi_>-P3oiuSIO1Fsw?-o)s*@oQgIKGM z{8-@U#tMJe@e1^>J)?G2!eaI*zyDE}1WMuKG#sma48?5$rde{s!S6 z(5XHbB7)y7)jG83?T|UWF&a?x)K?$;k$jNmI_~4l*FLc6{eWOdHOrqS6vKJx0^&zG zlE;QJbWWPDPb_k{VEVqcj4@1YX8GAATf06vA4tzY?m$KJef1^-WYMf&73mC2*c{iI zuIXq2Z4D|>v!WK(E1SWvT^;RB2Ls!yo}Fc&KmiU0ctFp`A8A9`ad1r5#~-OD;_-6x zh%VKz=t$lg_(Ti^rKLk zz27s+eAVIgjA$RM?p49t)kpN6uCBIUbx3d~tvhlp-`|H0Ax5OwJF~8#_-b^p7RHuZpOn5WwW0U(l!s&^fxN8dEd}K& z(c~*1-$;+k8r>NHY!t8MMqZ=%R6{!YVf3caUEkfvO^m!2b@h++_xg>pZJO`K>breg zthIc5Q-8bdA#wV?%&We*&xz^!bWQh3YWT2P+4Q})H^6AKAEQdyz@1mu|3;a1b&VHE z%V@d?!|D`Y-Ar`xRc8xt(&Eb&-W*UdK#T4zrqc-aHuEmDSqgsvE0Y*s7^lx`bPsCP z3YAIW(j+QA+%wjHbILI})s(J$T^OV%B^jKYvK6Pu_PPpnc{N@{V z8Lb(+M>=!G*BMr%hw(S-Yq*K(9pVC4X0Ra3TL&ah!~kWiKOU_3p`{)4#fs2kQ(OiiV(h80Z`%zR>@&l8;xlbBS;MgK4(KE$;)Ih zzMoNb8dUL2Y*XFZY6VIk`*(ioxxaTJ32CPtX~RFasL67F?_jjH+Kw9T+0}|Y2l^RG zrw`;nKg$On1nCwmy1K3HmFU~ZtlII?w^XgeBKp^O!X@IL{MAx8Krm}L8`0eeH!;5v zHV<9KW^7+m4u=gNC;q=2+f1y<+&HF)_~+>uk@6AF7SaTHwQnw7Uj&JHXeWzf=)cBo zLvKLd>rLuY-}yJEj4-lsp6z%e`#=a%nhz%{wywVUMlblDR$&$}fWHdfi#|rrHhHwc z^lAIAucDU}p#GQ8{xfY6Kf$A>7$Cae{G~U9KUv|37hfTaVwUI)xm>f%FL=1>oHTxLe7usRLMm1|p~fZm0`bSa3TnYl#+CK}IvtLKh+o zwZ7yn=V=qxjx431uxYgd`W4p!2?JYjBTYS>q;#0fDr=b?JRSSOlhoirL z2%La{760w;N0riQ*f4Va@_BnZI~)zt$LYzJ<78Jo)yUJTO%Qg_IA;Sh9@uky^$8&U zn>v6Tl7j&b?0J?V(EX3-=kVh#gml%v!;k#U6xC}?yZ^+}s`|Pcy(l%GG5DagYi!t2 zo^~-Vv#>5*!}eDQNpxa7uo4{u248}LQ$!I*e;N^JQHpt`2A67*idxki@=8od5$mg& z>813x>S~eO)8Re3ViOg>RadBPa+vog_)trrcyf18s2{|C8t;$OktTsfcw^@g{1Ia* zbSMSR|9|w(zgVxQneP{!ZGTBE5+6s}t>PvZS$(Kx^-pA0(NbQY&8EpTN<}H5aWu}# zRA4cIL(>F)Y`tuznJ!x#`~!N=)O)ODMCiLS(G|%RxB`^ti4qDcRy02mnxBMdQ zOD@yBWK^u>yz1)8zyBV&zmM?;P^u)ZyKF!Ap6iD3tSXH_K`srxGR9{mO&P{E`aP~gDh}k0NE!7 zS>VzDvQG`Nz`X%vpBZFRS%*pBfgmM^r!8$M&&OHhyVrhck~ie;L>hOnk#4 z4r~b~zG)E$mYaz`w1@+X&cq*C#DS$};#(GRU;{Am#};v58!+)F7I9!RF!84rabQa@ z@n;rsU}Id=#PwU{tZLM7v7A*GG-P8K&darQuM80f-LZb+fKS#(9Q2{qi7zN(aGklL z<<*VJVOX*>yTg24+EmKtee>qu+`k{V`H6VPtWv(YzcUIG2fS^5;(+7KKSuD|Z<|Fn zHpk_5Kv;C6Ew;@H{T7%ML!H@H!geisES=fDxAr)+OxtMP+H-W2SGNzcy`Yw2x7u=B z1q6E6qocgspr4$@TuUdtxshLfmJdQZndwdDKp)~i6a7py)t`lKr=O`K`&9&y^sCXg(J$n7`q{=; z@#EERe-UE-b7B7T5RI_w1o`|*Xnqx*ng#yESOz`2_-l*CRzMVv9V zawo8jXQDl!*$dGK_(EqtL?fQy&OwMqs={}&5Y2Z&^IeEWZtPCruAVV;^G-lBpE11N zox>1~Z2C@M!_OE&Ih{O2BZr|AJP6+l&G#W15zL){M4mBJwoX7{n=$U|PT;PdF~oEy zAfsmtvC;|1lo`Vq**OZ)xDX3I8j*LMfUuj1ej_x$@zZ>ypOze92^Kc9d^<-*(9KJQ z4`fE)QO{3^sO;-9Q@={*ZpgieITg+A&Ko%&W^ET} zx!m0JIx6twnmV-n(JSb0By*TC_KN)_;50rYm-5PPJ}LEZn?E>*5qza~n0|q=U`>CR*3H*+lCaIh$x*V`mesYxHcQb&a1* zw5}1fiPklSHqp99(I#5gINC((8cCaIU1Mnzt(>CHavQB{U~QtkEws1WXkDXhnD&A; zwnCiDno(c&)s;aR&#zsbzV%kE^;S#k^Hu9FP26l~`{lT~=~=eh%KZ%X+U7T@y9SCTTG!stMC;lenrL17Llf<9h4#12w3pOP z@55~~kkwZN?FFy#cZ3;66=TrK*I9o*c}W6XN<{stI9V z%;~$kg?G0us!;FlR=NiT6{g|+ZjHAu-2Vb|mazZR&x311t>%GEsckGTT3{7sY}#4c zxwrs;Xru+&*x z(uY^RDi6}}RNrpapW9_j)jF_Q&Lgi=?3LDZw-yGSYl^`DBRI`!Gj`rguZs5Ml($_S zvpLWohZA*8|GdY3=qmn_Qsy`X)J!Kli6pHpl)P5Q2IgMcX>E%bZk%8g?denGLI}jx zH>wH#i|s*PQe_mK)Y5}sQb?BDP2=7`O@G?IrvBVZG%(*d#e`PMg*+h`c_SmPLOBGM zIz4VNUQb5hBsvoqQMZ_8$9Uft?P81ErV|}v?&<@tJo&nr@_TSwP_KIJ*S=J?$`UX0FnpnN6=cn9S<;&}+nQ>f7j|#m}6vv&3n- z3A=!{oM-B(wg&hdA}bzkJX=|NbRT%Ut$AQu`;piAE7ej;2}lB;TS{Qoag4=*$KkAV z$m<}yMMO!Ey~r+c<>Tfi<<&#ek0Q53R8plE)&ZQzQbuc&O@_MgFtG_3~-4OUnvu_*n~JN{@V(cPr$4`E}t-~9gnf`AfMIORRybAq=U4l z3qlDQ=kHbV^+#N=3F7RN3eGAiioBO$Et8|HJRoq_gy7+9b_7n@V^=6udqDJ5>;M!) zkpd}HPXc`~m%h%1s{cBT{b_cXjvZGgm!Ox&%q#bx$n&7R`P_8-SG`Do z5>O@Uf(Y|T<()`G#-lugSzFx5jigl1dP@rZ)JuOJ4RLe<$wl+ZR;uoqp@+WNa9-Om zeoMDQ_AeZagS0AGUKrCJTKd0TWP?W<*&v0=-k92DEz>DM4V;1he+%y5%)_5}lLyVz zJ@C2o4eiL)p%{UNPO_CDXN+V?()%boZ!+qm^1%88;L)g~rPJoHtFNn{-OGo2+5T3V z^mRm*ALOx~YgkwH%37y>>~_k4>rBdeH@*fU>_%q>BpGTD2a%Mqa|<3wffs>#7~GLSomE*_vx^DU^AdP zZR`pg8~4e7t`xeHYU=jzl{TqKe%>Q8oi;F5uQvGuEz(SwZnwTg5@;3cCk))R*CMKI z0@HjgVoVebu2@ZQ0!rrz%$C}O6V@SgxJ{#|)@wNBv9ppLOO4L;A5nZ_u^8V^_Y(EPWn!>s@6C5nx#el*UAXV;y$h?@2iS1??p}+2ZXsjV zZ|$T4EHcnC1AD<;F`4H@Le;FU!~`&R2w&5fH=YV-ln+|E$n_`9+GkX-{>12>flTLg z21++l%@w5yoM2a+9{it{9*D4zI%m_|v2|mI4IN^Ogpd?kx+p?Og zV`r{V=wMNq`u$s(Ff@``pSCWZmg;wM_sZrj7~IDArM&=8PrU%L0SGoq%57D*QZ>k* zga(QG;V>Oy@fJMCcDH^tWw$tDyj};%HsRTDpk^1Zd%6h0DxUE1h*$faJ#QWM5vhIw%TNCr<4x`dL{|2X%{DKtczKFt7%z*FyS|(EaPdE36>lz z;VPxVxD@_;bF3b>>MoG*{RG4JrS64U&uRPqTHwMj`h$3o?T(Z2$zuGi`YEU#1k-^< zqx{N8tR)I6AkOXcmsWXF-@@?n`E)h%Vf|fcXHTeLs!STpqbOxXTK;a@*aP*wVTD-} z>qp{PD=xImMpOK+h@MGYWLtLhN86KRg@MY zK;#=4mWe+=Wnn>-g@y8Dl-hhRRz1|SEaocc$510*nGGClRB6B{r@jXJp8lx@`<^ac sa%}HakpgiFYil(YA+Q^FJ>)NY=q?(y5A3x$i`3Qv{8RO(nNH{b0?{l(sQ>@~ literal 0 HcmV?d00001 diff --git a/repo/objects/7e/340933b0dd8d753a7f4e07fbc3a088cb1925b85ca4c6cc8287652f985dfd11.filez b/repo/objects/7e/340933b0dd8d753a7f4e07fbc3a088cb1925b85ca4c6cc8287652f985dfd11.filez new file mode 100644 index 0000000000000000000000000000000000000000..154db3c1ad728b9311c0d7df693d4c02afb5cf01 GIT binary patch literal 6435 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 literal 0 HcmV?d00001 diff --git a/repo/objects/7e/c153528ec6d6e724fb92ea266bad223772e62444a81fa3c40a29e81f60ad57.filez b/repo/objects/7e/c153528ec6d6e724fb92ea266bad223772e62444a81fa3c40a29e81f60ad57.filez new file mode 100644 index 0000000000000000000000000000000000000000..cfd2d28c79d9cec6c06f441bd830980157cd6233 GIT binary patch literal 1440 zcmV;R1z-9A000^Q000000000001gTO00000000000D+_c000008I4w3ZyGriexF}) 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 XFAob^ypo>aem+>$0ztQX=IH+iUNzfO literal 0 HcmV?d00001 diff --git a/repo/objects/80/8cc668f4eb4e20fde7cee20df2cc4010d0a8d6ce46c0835ca53d9ebb1524ad.dirtree b/repo/objects/80/8cc668f4eb4e20fde7cee20df2cc4010d0a8d6ce46c0835ca53d9ebb1524ad.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..5292def554af5cc266ba366f6db3dae497159625 GIT binary patch literal 70 zcmYe!&(%xMEXgQM(#tB%$xKYoPf65E%qz*v%}g%J*DJ_NXSjY|TjbT%c>l+N84l@< aPbV64ge?9gxREKcv#x1&Tl#Hf7gqrK)*Yh& literal 0 HcmV?d00001 diff --git a/repo/objects/84/6f20624bbdd7f1985e06f7df006b865b1dc03542f22575248575f3d64e5b37.filez b/repo/objects/84/6f20624bbdd7f1985e06f7df006b865b1dc03542f22575248575f3d64e5b37.filez new file mode 100644 index 0000000000000000000000000000000000000000..a663c236202914995aaee4993daaf7f2c8e1e7a8 GIT binary patch literal 842 zcmV-Q1GW4B000^Q000000000000vM100000000000D+_c000008I4q3Z`w!{efO`p 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 A$^ZZW literal 0 HcmV?d00001 diff --git a/repo/objects/84/fbc8281004bf3503da1977cc9a4c3b28c8ddde5c1bbeebced93e4e12d83a45.dirtree b/repo/objects/84/fbc8281004bf3503da1977cc9a4c3b28c8ddde5c1bbeebced93e4e12d83a45.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..62ad23597ddfdc57862f865b3adfefae104caa3e GIT binary patch literal 76 zcmV-S0JHyQY+-b8VQT=6ox2jRX$zxRM!F{k5<51xkunIRcUhssp)4b}U>iY1Y7X%m ie8Fe)wgcsb$L{X7b^4?d)$DWjDTwO}Y*dIS2uc9j$RYXw literal 0 HcmV?d00001 diff --git a/repo/objects/86/0132d78faa9a44c7aa984ab445cc99143a5096bf21dfd982c582afbdc2ef36.dirtree b/repo/objects/86/0132d78faa9a44c7aa984ab445cc99143a5096bf21dfd982c582afbdc2ef36.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..ae9a7274bd8e2b43ebb515b4f5ce837dc136bb44 GIT binary patch literal 45 zcmV+|0Mh?qZggpFX=8G40CBxPFKlWEv%Z*(YS-GQL;I_FF*DPz_QX(@quyWY4hkzQ Dr{+?fP zYNd%XME0V6p&eQZq0mvFAyw5+l}Rp%JI9V}2ZpBo_niY(%hYbt7AaDEFV8*C-8p_6 zn6$j)iB@pIN~~B4R>9Zvw^x8`lom=>Rj55^!$4JA&GW)SYj6S|-o5_>v1V&-V8)Yg z0u7wW-AC6p_AhzKxacOT>{Gsjhzp9Yw8}Lrfj%>h2u5Xg!!-6_t7=G?1dS;-R`XSD z5x6CesjoDYD&^VM;gGGCDQd64s z>%AoYNn;9JHpqplNKZk4q;SK9fE7Y*Fsnt!K~ONl!9%c z$m@pIK=HB?oRCSCrWtREyhFGOqrsR`g7e9A65o*o7)|0?xLm?$9zg($Ac`l0n`sci z;wD1gkwU@NNW)E#uZbChgf{B$gL5EE zD491RDfp?4L~W9RRJH?#D4rG8Rz2U}Y&P9o)?KA@U+h4P-|rHT?|H{Oqt(e^xCn;f za1swE!E}Bx4yTJSx*vPTtB2=e4y;E`_qEkJjOWrD4kLkdxMYjDl_*^mZGYz#i56;Q>9@_w)11a1eVt zZ?7@pcN%y?d-D=fi;6lsv>oNnBObIXT6((WpF!3_R92syHehSTQ);PQpiH^U9aGb4 zbe!#xb`pBM{c*@?u5SHJ=TKm~4{eKO)j&K)PXsc3fWPl<28*)xjf%B&WW<^w$!ht8a?GX?DEk&I#$z;z}$i(9O(C%V+rFzva@dpMndo-Fx72 zrPHyt)^|BuMO|H! zG$osmIcjXViFphcBohCa!{td%-&1{Nauh~BoF;hbw9>rFB_VUdCK575g(Ww& zBoQ3qc_!R*{%@|DF=wgEv)vV3Iu#RS?KhiSl(h;jW)ok(K$ehEnw+_rxv31RCw4A- zI}KB41?8-SOw!=+VVKVFkimelf^i=sCsP2^EG7m90EJXh AfB*mh literal 0 HcmV?d00001 diff --git a/repo/objects/8a/130777023554e07be7a161d3e21e669e4d8634d071135305a7bd00a1f811f5.filez b/repo/objects/8a/130777023554e07be7a161d3e21e669e4d8634d071135305a7bd00a1f811f5.filez new file mode 100644 index 0000000000000000000000000000000000000000..fe267049803372ccb906e887e277b52336af17f2 GIT binary patch literal 992 zcmV<610VbV000^Q000000000000*%E00000000000D+_c000008I4uVaw0bnzRy#1 ztuH_**d&z;{;7MrC%(G!9^= zYDky_jVU))^L1?zxTPG^zS2;tlxI7KL$+F`sKFKp7IkSrWqxxrS-=fS)J(vvUJIVU zJx@>?1V&doizzULwa0N0BbP(8&jCh?fSKh=b^$q^YuKPRw1*!LckBVXpgb=vW?kkQ zRORB@lAp^?Z0sA>rltejG2U1Q?Cu$#oRL zXgY@wX5l;@4;T009A=C8Y#Lqn03vj0p#yk>;LP`kNKDaE<4sfclA3BLH<3cYHb~7) zkZ&k61_>$ZzZ>U3m{2nJMUwL~jg;Cr1F38m45fHhSX&MH{q1(!%VphDI`4}H#PlzE z1k?|L6P}TDGPs*A!;j@lJS%lsk;62XjtU$15?J>732w0CM}ERD>;MEmfGo73R+{?cQ^ppkFl z%s2aMo1@^50ON^$6MA7_AIv*#HTZlL@b%|#{H&N-XrpiN4V#-1L7|5!HA?bjZuA{x*+T+yg8NjGX$ULi|= zQ__1Maeq)WbH`%79dggi+hMQbHj1aDSUW73%#r9EDw%TkdbFa0^|Q$p->mioRiq7? zpgn0G_<#I-XkF3chGAkUzTxlO>KeZ&>yVz;Ys-J3vq|aC;fP~g>$Q4NDYibZ+-v=L7s4b#LGOX9{J`ql4LBCzL-vC2cxZp~K~;g_xg;)|c{$V+8fPv^ z+D$*wmK%(u)=urKX5O1&aTBz9F+9{Bm2l!YUHJ)ewmlm`rTKfs68#InrQTuy literal 0 HcmV?d00001 diff --git a/repo/objects/8a/6c781b1df30c7c3e84331e2da66c8932473b6160704624e0193370fd3d51ad.filez b/repo/objects/8a/6c781b1df30c7c3e84331e2da66c8932473b6160704624e0193370fd3d51ad.filez new file mode 100644 index 0000000000000000000000000000000000000000..96250561671899409750b67d827f3d89dac43af9 GIT binary patch literal 70444 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[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 !m%3ka-)2nvB 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 OJ~?&hf1Pc9>Hh!)xYmmR literal 0 HcmV?d00001 diff --git a/repo/objects/8c/242b81b2a7d8677bc0f39d028942689ed93b7315766a290641f45d363a25cd.filez b/repo/objects/8c/242b81b2a7d8677bc0f39d028942689ed93b7315766a290641f45d363a25cd.filez new file mode 100644 index 0000000000000000000000000000000000000000..b676a4673881a37abab033edd8430dd8aacbfd09 GIT binary patch literal 805 zcmV+=1KRum000^Q000000000000sB}00000000000D+_c000008HH3`PunmQeb2AB z64F#U)a*lhDGaT2ErgX8(je#)a+90Jn`1||lTuCFZ{Ky2Ld(!rsZxA=&$;J*Bz_l| zv^?jrR&dU8ELZ|o!MC%wSAZ2t3ppza)E;zUsEUo|tIR@YcnBZfz5fJ}W)(Lu*z{R~mAa@O0yJ2rFfR8f=DOQRfC!S|84*w{VUUH4|`ME(MQa!ef*Mfl+FQm<$tG z);f+cb{^)f2N)|7W|k{?1jy-LLxtMV89r`vw1P*V>b`WCbZX7=wfyo!C<<8yFnNZrqSYQ)>#?YqletJN^n}^xiy}zG9mO>O(A0F4l-!BO*UMZeX6Rop2r7uC}hAQCH^ppTeKpVGIO3)z9 zNNe>(j+HbPwu}|p`nEZ`nBAZky@4);6SkGwiqz3>oYs@0{bUZV$xSuxxF4}In6A^g zR2yUI1GSB6`w2!UYx>VkSUX>xJ@)sO>Pjgzuju7&2!B`en2Y^F($;>9Hn!s@&kekn jEq~bN+i7|2O4ohe*WbBl5c2qo{s$=Oa|yox%0B-Ak*|CA literal 0 HcmV?d00001 diff --git a/repo/objects/8d/bd359d65afa1e5d1f3f795cf4a4350dc2e2752bb118d0757a7931b6748706a.filez b/repo/objects/8d/bd359d65afa1e5d1f3f795cf4a4350dc2e2752bb118d0757a7931b6748706a.filez new file mode 100644 index 0000000000000000000000000000000000000000..e3f70c2bae64bcccdc268febf525d1ce1e84a77f GIT binary patch literal 1435 zcmV;M1!VdF000^Q000000000001?*!00000000000D+_c000008KqZSj~X`=e&<)5 zCQ=03EhMcfRj`XnST;+_EnJlDQ)Fh$;MOyq*d8`0%75>%XJGD2qVli{=kod7kKMTf z5@_Z#M+$gHd>RrLw1B_f{yYVGpn(RTgdvp;xPqYwkCJ(N4b5Q-etrGscUVhuU=`SN#X;3-APJ8iJg8Tl6K)JB5+6mlDbT3 z$+nTEz%<(Ec7z09xNLVcI7o{EmrBrk3Ytn^f!Ns}?`9i#M*}JehefpI%z+7WXrL$% zJlasyp1QELI7Z{%*sw}$fO~AqI#q2qs+>=Kbb$pHc`rirXODpB;S=K=wiF^ocM-of5GV{E$LojrW(|YcBYYez zmxI~*v4_HXFOX}JW}%oLa)!w0mBbt$(RhO}9W93ss4{pvo{ZOz=mOl2*R#=T1^4qM z3}7)>uE)d8WUz$AX1SQJMs0uu^qHr2UG;O?tK#*DDJUu2-JvqB{LH z0(BaVmu!cnvxDJ$IvvdJCga%%eO`^0pB@@7k--95$!j>ACA6 zn1RD17cKZO-~K}#-OrL%nC8HnV7hbUn2=IlaN&7Ww)ZbiXAMQ5rQn>(xh*X<4t4^* zHX62$oi4@~Kb2C=mgRl5f6d1^OU)vGi?w+RuX|^%(nRVN)m6MG;DWddDRzugWbFu7 zG-iK`E!YadF}W&{DV;5;j${Bog)x639NS@Srbd3KkIhyNEr}O+R4?)hb-)GO9NIxJ z7mK3=bvlJ7gd%hS6aD5@@F&-Yh49vy+AQUv53lq7Gn~5Udl?Zr9ZZH|UO?Sy^dfj= zBuc>MKu!J79?))I*Bw$(LPqUEJjQpm_26WL;&fatiSGd}<6Z~^LYG%p9#wCLETI#NZ%VuQv~RW-HBwfXl{RDLj2VZIl~{|gJh zz?;et6o9jZ`b?d&9WGMg;=`x; z+xMg4I^8gaO26P$!oeF!8K{})!&Qj4C$#hyf{61_OKjjYm7!Ub1L;LR%BW^}hhD`Z zXRV}{CL{`+{W!pT=5Z8|EjRtt%Ssr|19M#(cQ5BS^~7wR^jTCeJu94B pALp6=>;kD$OU(RX&3LH)sMcwa{HPv||H~?NvB!OHYOLz1`X7`cwsHUf literal 0 HcmV?d00001 diff --git a/repo/objects/8e/9dbb12af690ba35846ba2706123b36b7913208a47759a1c3a12c23b7601b41.dirtree b/repo/objects/8e/9dbb12af690ba35846ba2706123b36b7913208a47759a1c3a12c23b7601b41.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..50cf5de00d18f7300654c4daf06ba444a3dff82b GIT binary patch literal 74 zcmV-Q0JZ-%G gXY;lL<%P%Y?zVOMq!QKabM`5S>kDjDh$aR|0PjO1asU7T literal 0 HcmV?d00001 diff --git a/repo/objects/8e/bb1066ccf521bdded4cc27656a87b81c3c60d1464e70c158285faaedec4bbe.filez b/repo/objects/8e/bb1066ccf521bdded4cc27656a87b81c3c60d1464e70c158285faaedec4bbe.filez new file mode 100644 index 0000000000000000000000000000000000000000..6b74792d3d3ef51be4e465c505a02bb6ed5da214 GIT binary patch literal 150 zcmZQzV31-!fC&g@;}S4ia`VlJN`Z=Imvih7;0GuskYB zQ&2p#;M9cU3mA_4*#O=!`A7g2}NhYchGext>1IHEXs)(Y#qInbJh2tZOC#*B+@0 z&S=^4c#DzOu-I#$kpZ!A(&!$s#JQz4+Zua%fAFy%Qo=o( z_Jd==KgXDn)Gc#iD#TNO5D{*qQnX}hYR((g^AxyDpU26~>>;6O`beLnIF6>t<2f$7 z!r;^wt)-G>r6iaUl|_xW5bqi8hVkGACeh`1GEN>50*%JWbhud1XckjM^C(WngNI2J z)BGWx&lbZz(Sp4!_5{C3aNgDkNzB-x@bxb2M-;V&HkDB!){Nq&EZ0ybC`Cv8zHpvI zD5FbxQ4T&EL=c=FF1*f*@6*uIc{o zQZ1ZiQN}FLtmk|D)@&~u=Zro83wFS2hv7Lt82e!y811Z4itW`Lb9uIF-;_T2ZSXZ9 zeD_~wm$$<~5(K-$vliti6hB1|{gAnfth^{+mO z_e3K3PrY_&U@TD^RPRL!s9RwWwOe?6pXUQcA4xY#RnDFwQ=W1yt!vOS_sFzFi>%m9 z5p!p0jPebc@(2baV@m21RYS;4o@MC0#))m=7CbF8#Rp;j-Q}?M< R-sl_t6V`aKC=8GH({~YLeSZJ| literal 0 HcmV?d00001 diff --git a/repo/objects/91/1ee7956ecde73d4e93c7dd9894065dc851e47e7bcf93487883eb58837b6b83.filez b/repo/objects/91/1ee7956ecde73d4e93c7dd9894065dc851e47e7bcf93487883eb58837b6b83.filez new file mode 100644 index 0000000000000000000000000000000000000000..b7ceec6778f2112e01e702ff6a2acc7f04cb7a5e GIT binary patch literal 744 zcmVP1;4H`D7y>B}7wqQ#o(|Z^lNpNg7T2?>j)cc2c`G5(+*(e*7N4$GBZ! z((;1GTEUDJSh57Hg0EL^7Jz${77A9Ds2%9SNR>y;v)n>wbPn&|zWWG~W_xa6$>W~_ z4P46hrEi<~=d55{^kY>FX?=}|a>_2X$}}s0UQ>+-My2+^G!EdXDu|f`jR`ka^Ic^T zxFwB=t27iU;pwsFP^^*(YOpziMO_$BX)~BDw=hGAnh97}JHcZJc#P5@Fxt9~m>d(> zHJp0IwAQdWX@IFBFtc3A9w4WA4SUpv#_-{Oj}x#5syUYqv$b*!s;t+YliVW+W*?UJ zou`U_s4)R98*;8nswXEPRe0b+zz(4@m{y`!BPbcZ`O$o}jlf&pz&9@py=8QBLCH2( zG+Ue2pm z%$g!8`QaEznxBGHwg-kJUgp-81J^wq4*g74eWf#3v=HMC`vh_w=ZvS+Iw{P&#bmTv zM&T+5CgH+cul?n0?0dm#HlGCRNq9SV&M1*fd{r)iWh|L3a=aZU4q_;yb?_px^cF>gvm6 z6glnepb6p~*&kCEy@>5R5(C|&`S0Ct0o{^r1$_oSfvkimtv)BgCmBX4YufGhiYK5M zH#kO?d{+`phccg=;zUeNqsM6mZB;%)Kx3)5TAlx-IHl%$x^AtKC#q>FjRTjo^N^aJ aXIwJj-J$u5BG7Mo&QQ`<23+@5rvCvv7*UG= literal 0 HcmV?d00001 diff --git a/repo/objects/92/6008f63a3ab0bcccf40bd6b54fd16d45eaebf1b211d10c8b1ff190e31a41a9.filez b/repo/objects/92/6008f63a3ab0bcccf40bd6b54fd16d45eaebf1b211d10c8b1ff190e31a41a9.filez new file mode 100644 index 0000000000000000000000000000000000000000..985163b4e1689b1387ad19181706680a6fe797b0 GIT binary patch literal 23491 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 literal 0 HcmV?d00001 diff --git a/repo/objects/97/2938d146791fa8c28d6b86b469eaeb6184edc374788796bef17f973cd2d453.filez b/repo/objects/97/2938d146791fa8c28d6b86b469eaeb6184edc374788796bef17f973cd2d453.filez new file mode 100644 index 0000000000000000000000000000000000000000..26cea8903083288cfce435d6b0cfd2658ccbe184 GIT binary patch literal 870 zcmV-s1DX5)000^Q000000000000&P100000000000D+_c000008Ld@KZ`(K!z3W#D zkc*u)r0y>EVz)tMS4rF^wreR{W(>%Fc-Xst%ZsAk7UWbe1 zc0$3nROEF->!^5D3r@^bm8KcDl)PiOj@GkFf`rrg)jYYS65xEEETTAu^W_>sScU6k zKD)UJ*RZ--ua79_BOFZTxm`p{J(Iy|4n}0C1XOB%WO;Q$To|g({47^wE zw6RvnSSUO3?#)wXFmk8rk`ygSALCw;DeO7DFCNhI@$+)}KAI(-*Sp7^74K-GDGB2# z&0vp))0!kqXZ8)qMu^(#;iN-uxwZ}U_1h0f3OI<^C?!aY+zy7s@@n#gU&bqw@2i<^EBiy_?vRb1tm>t>cKdNg*`tRZY7hBK6sZn?DxEX<4 zwX}K>7;emS*nVYFx=iHLrXG^SwUf%TJRS1o$Hnh>X3HL0qPv)f69@v|AJOG#cp)+S z`RbRGe73*@?`$NkZhPeZSkOO&kmP!byZ0Ap7xeQvrnyHU^Ncuo&Yf(ZnUu@gu9UIY wqy$!=8SGEMBbrESrTfoL{vO>WmQD|5!?EnA( literal 0 HcmV?d00001 diff --git a/repo/objects/98/5014b517f77725fd562ba5364386faccb5595668add3bd3dafa4a9f25490bd.filez b/repo/objects/98/5014b517f77725fd562ba5364386faccb5595668add3bd3dafa4a9f25490bd.filez new file mode 100644 index 0000000000000000000000000000000000000000..3f16dfefae75ead57d391cbe3b1ebde4e0155c9b GIT binary patch literal 1894 zcmV-s2buT)000^Q000000000002Dj`00000000000D+_c000008J$>JZzH)8e%G%k zV1PhY3~94LUgQ}g8u`+!EPHgom?weirqqntWG~5t)Qj+8B`oU&b6^q3> zK2~|q10oE|S)wG|lbjYL1tZ~?uYY|6x~IZGPKtu64)kCwi-Tgj%s_X10YCrrw|~G= zkv-EeW63M08a@lZ=o?4>=PoCV_Y;|4<9@4RnW1!{wL6(pZ z0g9$f8^t!Ip}-89ITRtPP9G2Dp=`m>4F-B~XTZ1$(MAe#77EGb)9bAe~>j#8}G} z$inWsKywekiD|d?JLfLn-Z2FxoaRgxc%KXv;tk&z=dhtrYPv1?rB#8#@G@CGJgt^6 zn*D&6(R@CdEq`30u*oEHZP1)5mKU6%X1tZc7$4AhtKso>K7PP0qpy?cWcdTH0C$t+ z>~^t$yQevf;CVD(PR6V0Xb#V-`Sa7_whyqN)+}lj{0|3jU5wC)DK!{)?XUdkwnxhdB$!bj2hJ)XT#B8$Bnr1~MAIf)5Yk+NMiW10#uUTB;O*_LzY}F& zs@;HlC3TKb0G?~3jW;ahS>xa%Kq%c8aB8rNHmnkY<+)RHS;IH++ z3G!3rly@G@p37(3r4NHCsy~ zpOxIA1rxEAXUH$aBv>4cj;TxtUr@DgX`>A$q`yETHcD)XG@p-Dl+DK?lW(^ca~ewg zHRe*&i1bY!mSj`krXvu*bU_jdD+a$+GHqb4I=^>Lh%oe^kU$W^&Tp8x`15`J^!3~A zcslCMO5O1H zlBHOGrp=>nkWReoZ~ zuD#q}tcEJ(Jt~A5Q3|{qOD^8_Muat&e{p$<-foD^oMoS zRP>}#l5?siH=&YJI5nlRndr53KREZ?mXD6{4#u2S2CHUP<{PTqIXWV}XD(dnkyW&giZg=QgF?RT z50y`YsTHm)KN2mq8)cv(NRUsc}E=_0?Mw@>vjj4(vIOdhsV2Jn}GYQAWs7f6r z^BTt@nNV?LQ|*QKg#Qp0he}+$zQsO{Ov+eFTUc!OVMl`iQ#t*(LRyZ4Q0$KqS}Fgs z#rV=Vc)8qD|D?t4__bsfgKWdoJxy$HRSU_1LU$6Xd!QV9_+@7EBbI4X9X8gL`xJnzdG=Wg z&&rR^(ij3xtz`9dT2Z$tlqx*Wiun_lI9=|jvdH8K&?AX|N?iS5!RS(NsT ztGyPTfYX!+y3i9|os7PC&Xl(m`h_0G?qKzfmV0I%%FQ!D{~xm^S|d!KWxcRhc9tcc)5BSJQBZdti4^|E%GK824d{wl2vtBtHSPFhkPwcQmV0i5%Gd1>Rp~gLobt79CS!Mg zI9KFr6O6@Y*d&}QsxwZagyt4SGb?*FHMZH7qMnB%hD~Ux&hy*=aF*l4kMRqqHs46L guhvz-!h&5!{&(bj-HeQ==yzM1u9WQi82xwTzv{`e!~g&Q literal 0 HcmV?d00001 diff --git a/repo/objects/98/9407a3997bb78d5b111a37845b0008ad26d6f694c8e5dcb5cca8dd99ee7c5d.filez b/repo/objects/98/9407a3997bb78d5b111a37845b0008ad26d6f694c8e5dcb5cca8dd99ee7c5d.filez new file mode 100644 index 0000000000000000000000000000000000000000..b613b03f06d01217679e9e7b523c23edc8a676c5 GIT binary patch literal 588 zcmV-S0<--9000^Q000000000000cq+00000000000D+_c000008Ff?JZrVT)ea}}Q zKi9_V>pGGjXd!CUG(iQFR#k-dGKQ@$i+0yZBb0xyFW>@cUo6j@vvWB!v%eaREWxeO z^~hqfbT-0lYwG-}3qdxL6Ngkrl!7T~eQ2qwZf)rJQf-`^gEKFP$)qaJ81^$LEo9X( zLkFRAw8>Qp)29t1lAzc}Kyeg-=W$L*kRgmS7UP(q5GO3~z+=?&Fo4T(kR=I+Bm|DI z*9X=-KPzg{*hk3G$OB0gEVe!NqanHhD50 z0bvnheb6=_se0Ki6e=aJ3(zg}v$02`efMpUiX4PHf6-yI76sR@+CbThQj#1lU@laP z8CAmoFj-|{W6Pa6$=D(GbTXe$C(B9ta6bg<{Hw)my_nvuy?4mt?eg<_b$dTwEz^ga zn}2}cm$Sw4-Mdd;CtqgkkE`3e>3aENK1;tr0Yrm!AUzHBYFR4=7q#w(zlKq(qEldN z%uZjA$A^t<6dw;;IUW>j7xtuF>iaocgkc zND0gBb8t%(q+-V|T@{!Ysq(*WLyFvP7c6ZLAX5MwbZ+F%xtB&{f)UdkqyFE6?qUov aweIPl9*JRFQ11%uchsh}Znb&3diw+MfD2au literal 0 HcmV?d00001 diff --git a/repo/objects/9b/d03eaaa595eecda1759ee0816333008bfc0b8a2eb18a3a1f2cf471e5a7c15e.dirtree b/repo/objects/9b/d03eaaa595eecda1759ee0816333008bfc0b8a2eb18a3a1f2cf471e5a7c15e.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..7c6bd387f3d87f6f3429780a9182f9b7c5725316 GIT binary patch literal 344 zcmc~z%*#wmEiTc^D$dVim@$QY@yzP&z0rbF<}J|-9Bb9CeVcOP>7A`-R@|NWt|pdG zKPfYhp^ee#djG0fF2`5R@Y>>fW~PW$z_k5}_ir{GZCbzg(0enNEWVG@H3!o_Z)1Mi zdi>qHZKc1K2wiIl-L1JWbWnJGmtjr~X%y^XwsHjvAXA N!vuzF404PH3;@8vr)&TK literal 0 HcmV?d00001 diff --git a/repo/objects/9e/728e6d1669c876ca6decb241575f83764d553b6774d8d319dc84e40ea7af24.filez b/repo/objects/9e/728e6d1669c876ca6decb241575f83764d553b6774d8d319dc84e40ea7af24.filez new file mode 100644 index 0000000000000000000000000000000000000000..7e0a4771bf21f010f783dde8b68c1c690449796d GIT binary patch literal 12276 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 Ox0i}ONzGzO(fm8e$QVq z(!PW(g5Fhqf!^u@3%m3vupwy0)5;{1#5%{0YzK-?_rKpb2?exV8;K~kXTJHq`C&4 zw?G45Wb@Ip_5Pn(!MNzfs(2uO2NC6DU22tSRsemb8WD_2?SW|=z)@8YGYJ|KZmj0J z$|7(}9FxA%P^g5bM~6dul}u2B%@Hi>!hlNa#nWN~Pbg6{0jp{!cnotMqcjMNLc1N4 zV*8)K7oSJ2-qQ12GdG(9RwM}>nwU+ZXyU4TX+q^Fjz#}AsO3T z(Wxt14aJL6a6%?knreI`@($tKBpg4JOE8+vXVI1L~WLWRJIF-D1OPUEeHMn;c)0>vg#?F^+f|>`VTz<>U-WDPpNfMn9hUs z^Jo)A%f;*L@o5shJ$rX_z$M;1BS#sFDxokhtIFh~%338KJTDf^7w8N&sn_m2nkyu2+(Unk?JU97_8Y7$0Uf2Wk7_DLNUr=*0F z;E~pi@3h_RcwPfMsNL~9HA752^^Sqx@`n48+MnkA50I4*rPZC`uUu;;)WxM>#|2#; zrVBqqtKnMq*KGYZ)?V?13TYoNFt4Jtb}dM2MgWbai$RTHF{Y7fgzvew6?IgNT>dDD ze^DN|uP?e2h1TI^O|wba&FYr4IA=Q)euo5o9KJ`^NH?A|Zs<4MzhaqQiE$JS&mU7RLwIbGz=sw@-eLbXx-&JDJdOtuqPXWw!9A5kc8 zSe+C6j#W+kicTee?2#YeQ+fuM1w2W;$XD@p*-#e;0#h3ZN?nBC-AMgQzdMxlj{yDt H&4K+71yKf>rS8{Eu6}1xgEZmSw0Ts6bm~E6t}f3&-sf`1{Yl-b1X}f*a`Z zmWUL&79zOu4a| zk8_K_E%}(%m4>-W`DEqnkSv!eYOpf|i+XNAP5kAmH-amasF{F%J{CNI8=jyv2#h}M zBxZ&wjJ+L)xO6@Y3m@Q8kzr=Jl2t%X?-~}U4c+0N^*0KGRZyOnV`iP_8dT2pA*e1}C|wIuoP}58e3sZWKeS_XrQI!JyTP zADg6XXNq23(!41?&jcsS6qTkNugH04;kGkqUlXKt-o5F@j}!u2cH>@WIE2f)0kojs z8pPf9=%zJ*{%Fv@8+K{{Lv(JTGw=ez6Q3g@F-1#>HzDjtN~$5>L<%#uKuT_cd_kTu zNT{M-Pnr{wOONHUoMxmsmyCiPwOHWG4-<=8LCIo z5uZ@$OyGXhZGRee;)`zU=I-jtb#z2hE^+^XATkkoitz5MT2T(Hl13<7o4wn7%lQli z^@^zn6)Iwza`Jo{v8$qgokD zO|}-%y{)9xN(^_z=iY~(=ruCbR)S+F`Ss- z%!DJSI(w>?$rw`2G#Yeu2k%BJaTCK0HbRe;628RS0-4^p$2!N?!~Ab2P7-_h^XDr- z@Ec}qU!yTtqtv|h~yh$ACcQ?4(R{U882o#Rn z>aWvEz*}Orgi)PozM#nru6<3z+gT`{x&gH;%e@F=s|70Hdf&=|?Pt_3;$`iP?kget zo$29;)xwj1z)sn(rI}LZ;VJF%9VF%5(tKVgb!dqSUnd1E8-#=szeUtK~ zCU><#QYuVhpF)u6S&vt=!iaBwxKz3o`r&1zo}#Jldg(P=qG*du8NK-j;_=|N*qMUK{s??|qJ^E(+#S!Zsh;=k z?&#dyImPpO@id=re)*JFzkqhvz>8a`P~Kie&25=mN2K?I{*O@7PjaZ&_kT3~51i9M AZ2$lO literal 0 HcmV?d00001 diff --git a/repo/objects/a0/33a5f252383b2bef35061ccd60085ce59c44795cbbfd8206f6b5d0c445d243.filez b/repo/objects/a0/33a5f252383b2bef35061ccd60085ce59c44795cbbfd8206f6b5d0c445d243.filez new file mode 100644 index 0000000000000000000000000000000000000000..90e81f75cb535e79d3078d4e4112b7ddb98626fc GIT binary patch literal 1186 zcmV;T1YP?8000^Q000000000001VLp00000000000D+_c000008J$*5bK*Dm zRW5|3V3V!AklEB4LJ~3w5I&O1X-e1vYsQwmlFUa<&HnanNf6tCKsKC^^!oMdZgtCz zDiE$&!U8Gah9op4A!q?#TfaR3T~MweA!$mb2UTc`bS>FD(okui!ujuKf5KRj1yj&t z!H<|K_`=6f~8I0x`3To8AO&D5sLdFvzAc3*epwlq(7Z zU7H;h(GaGV$5>n&4Wo?)xE4rEG!wiAl;OFA1(gcd@W|7S{{~g5kM4zU@!O;P+nO*&h!5 z-uUGL!8#InYKms5SdzvJnK3GfHD055!|>1Wi zPS^~u&J6skC%@P3j4;}-{%F*_={zyEmae54fbUcW&5S>3>F_byK z^t>P@O2M62D~%0tk+1y~Q>{#E!3&$^jmNe~rlKWQ`9?&8AB7DxX$!8Uh)0gz zB>{yAgP$9iA1(+FsKxk7u{lq$pPj}F@0a%h7&KkS1h9$C`{@Dx9>4Wlcb)dwE<6Wm z+67(Vtqbt-9-^&mGXvG{n}0QUd}iUCYN)2zhB$Zr0-nWjs^#g0W&ZadBZ4d{XGX5= zqH>BijVtYljAYN4lUO;?3&BFLNX+Yu%`<5SKszFQPQ%JZfJH4roRIIKyi~FU_C2Ur z=pwhIIOtR~+Hp~NQ%k5?8E3V(Mcy2o7qx6ypRNWZRAt(2IxH?Q_vczjbNTYbS=v6Q zl}+NSm?L-biark5j+bJuZPD1IW~4DCTW=1pDpMh1pqxx&8kYT)P0-2zFtMrFhj%$D ziAzPAnIUaXwk=21+sqkiYdlF^n^qX!O@;$xwX4Abuf&pn5PDB%`h(D+d3X0n>Y~vl7+&xbs~?huNfYho*39a(C$5B<#?+%~IL_ zKe@=QfYKbU0*)Yp%cMuQ&bgatedVA)@&Ypz^WPBc^SUHzRMq)b82_W)$&)m3M*sN z-gmMtpP0T43NyWzB~vQ*Omyegs-c@XM(|$;*|ei6`Rtlm;P%&h_CF)_^_!!*ouE#W z-JV*+AXCw{euW~p%H=P}=#nG`TW%U%rS_X0XBdcoD zZ!UMZx3A4j=l+-9|F%9?t@wImifr)m{Ffk~wS{ZTH^0+f`fu|S(ZIErGKCkHH&5Ke zFzr^0W?qaUJ0GLxwR4lrUn{BHjrX`SU0P^$^rMTFIS+aF0*LcTYTVI{~*w^!1{bqjjpImX#;#h`ZuL~0K48+^fM f^R@%!g~#shwsrcX64mT;_9=+#3v5(~B?U(S4!$GA literal 0 HcmV?d00001 diff --git a/repo/objects/a8/858b36da5e600c9387a00c1aaef1b8dfae18588bcdcde1e6a72bfbdf897dea.filez b/repo/objects/a8/858b36da5e600c9387a00c1aaef1b8dfae18588bcdcde1e6a72bfbdf897dea.filez new file mode 100644 index 0000000000000000000000000000000000000000..757943456ea809a023da91ff2993628917293d86 GIT binary patch literal 866 zcmV-o1D*T;000^Q000000000000v9|00000000000D+_c000008HH3`bJ{o*efO`p z)4Y%@gS)%4FC@*>p+IN}5F;i{Upm6Rw$+s-k0b-0o&E2a(8s? z1+OK4%rOO_TINDmluto~l;KuL32TJfVphwpryygvo3QKoia|8Hhr1|_qZzwDCu3J= zI`vI!sYF>xLClnup&mCR-ZR_` zv5FV-<*)~^L@x_H!G9DuYkNdROwm!}?LO^$YN{n|GKGR~keZvI*pM;~2~E`hH_nrA zsa4)4Nyf)AlC((%O1mytl6X-#SM|eiyWRG3Rrj>XL%Aoh;bo7A!XP*i8I4W`Y%5Xur-69DZL1S~;VoM8jw`a~iq+ ze#jFb`-sE^{{%q4+wb$M&%*%=g8gy7MR7+%lF+QZ%GD9H|ALCO>w6YA3)VoR?eJ~Y#(tWjH{`|4;6tN9i=>@@EtOF!(zdW6MS#A)>`^W zOK?QYBW+4faa)uYs*=3%X7+hJub-GcVa97oe?0xB)r*)c^10yFdFzMZh1Y&Go_JYDcUD3RrL21<@Y8S< st)`4!$8*M}Lvo<{9 literal 0 HcmV?d00001 diff --git a/repo/objects/a9/137491f830ae049eee74957d64a044fae2cb83c573ffb15dca4a687b57f5fc.filez b/repo/objects/a9/137491f830ae049eee74957d64a044fae2cb83c573ffb15dca4a687b57f5fc.filez new file mode 100644 index 0000000000000000000000000000000000000000..57ed56c52b46cc77f91ba1441142a640aa238b79 GIT binary patch literal 801 zcmV++1K#`q000^Q000000000000poB00000000000D+_c000008HH2Za@sHuefL-F zOkN0Oa4*vrl4c4N64C$(m`Qo+2zhO5DoY+ohA^G}dsi~Kv`JdOSUS6V_UuJ*8<=vU z6x?VyXC+oF1*hTb;LQ|pi^@UCstQd6Z5ZlmZ$w@=Xbq3y{o8jRAu((#EX)M|A<@FA zY7Si&@XvY4gzR!%o>9D~NDA_x~o~t^`MA5g4WRh%GRMP2lkn zW3OR(&;Vmi#LNk;I)H-g2DWG{-QmN1jssx_bm&WqIj`J+u6*1v$=!ow?lH6*y;S^T zjVTBfmn(`Ha_bTQ5;1_BBRyG;Bvkmtde9t z8_s9R=vy)!%~szpq9d{ig|C?@Tya^alUNh)ZTIT2IR+MF9* zSNAEx1=hda$L6^CknQEQKo?is}KYuoo5|H*9s literal 0 HcmV?d00001 diff --git a/repo/objects/a9/8b1fccb9995fb80f79d1083a8bd343349d03c9e5d2aa86ab0b9b1b476161ed.filez b/repo/objects/a9/8b1fccb9995fb80f79d1083a8bd343349d03c9e5d2aa86ab0b9b1b476161ed.filez new file mode 100644 index 0000000000000000000000000000000000000000..270149666feef7a2baf2456352fabf0013f068c4 GIT binary patch literal 774 zcmV+h1Nr;_000^Q000000000000q(j00000000000D+_c000008KsnOZ`v>r#^2{t zoLXt343YiO-p~$>LMU`C&=A!1Rb`S3ap%~P?Lg7A@4jSdIltz$*B9{`MMhjnYESiUPF{)U zv7_|a+UCO>o^oEWr7-PhG0?W22@&oTuc^lff6+nFe{gW$8g1Clm>y()-GZ) zOki1YT*c67nC~>eP!X6}u4D_4Q(nUwwV`kL__W6k*aB7crNOLIu0a*9?u6uSK`^^7 zZF?`7-+N4e%Zi+-g8XCzB!?R=1S}CsgJ~&R4nd3Ib{vhSiwJs?JGkwIVQ&)Mozh~P zDayK`RVbbpf)klsX`1nt#5=-u5cWq@(mNktjiWoV0K;)K3FdPcPDALytQSV({^F_^ z!fX-Frt_c;Fh?f~9pDcQPOBMF6BD#FcvIWHqoEqoCKAZl8fmyO@--=A5YvhJ``{de z2_;vRNm{&bBS{;lAeC)_A&F<1wMEDGH=9j+CCj$bD__(Q<9FKx@;&dEr*w2u7|eQu z{&W%r-=gbavKR$dvmm@5dB>FG5?{>|K*pj>5RM+yHlZ8S&W@f%&u*s62aIj^d1%B; z*7fL#1v3UN)%Lu!R>`?g_Vg(_n6adu?z~E4;{3Q{4iS-_)$_DO_F+{4Xv6`>xw%5di4*#E%;+Y`Y<|qA*T_^?LfAw_! E0;Yd+bpQYW literal 0 HcmV?d00001 diff --git a/repo/objects/aa/896b67399fb7762ba23b9a132e14c6508fbdddf481bf76ccfb9c68c3d0d574.filez b/repo/objects/aa/896b67399fb7762ba23b9a132e14c6508fbdddf481bf76ccfb9c68c3d0d574.filez new file mode 100644 index 0000000000000000000000000000000000000000..a5c5f45321c8bc3ecd8a127ff91474d00adc672c GIT binary patch literal 842 zcmV-Q1GW4B000^Q000000000000vk900000000000D+_c000008J$#HPunmQe$THs z0trD^HM?jpEkg^XKpDNzreZuHlbj^h96Pd|mTKC6-?3BHf*6z5m-^hk^POA57BFdf z$rG*Mf|XdY6s&@8r|(99OOzH$R#m72XhC09Yt8e*!eRdiKED6(8Dh$ zmd&GMz5Z)nGA=raDo-fhLBs`lS6bzol|au-BZ5(xT``SaSgRTmCP8D$jn(|2wg}u3 z$23$LN|o|#?Qlp}%M>-(0>Pp#4XDfu7vlw7phV3COzQ{16S(FHN`t^CwbPgaQ+V(= zF5=vAm~S}1xgua@xsq)_PIe7T)P`jE^ps-**aqeMa>%S>u0d5U?uh8FK`^@w?F6qC zzpXI^EoMr1h& zfk literal 0 HcmV?d00001 diff --git a/repo/objects/aa/8f39cfd413a5417f538a1f43afd562bda6a54e55b66a136b93d2421ff53e35.filez b/repo/objects/aa/8f39cfd413a5417f538a1f43afd562bda6a54e55b66a136b93d2421ff53e35.filez new file mode 100644 index 0000000000000000000000000000000000000000..c21f063fe7551238ecbcefd00dd43115c13867d5 GIT binary patch literal 821 zcmV-51IqjW000^Q000000000000puD00000000000D+_c000008HH3$Q`;~Qz57?} z43|JNF>R+8LYX?L0k`?WaRzc?6nkxJDoY+oPRMln-@CFyVG6Xq*xJ>5db@9B{{)z{ zyyB@=aK$RDSq4_Y_tCp4;1;EYiq$o04^CjL>b>SgX`wehh7YIjKS83|mK&Jy^oKwL z=d$}4*f##9s2CT6R8<#*cN9rUyKAiq%_^YJTqA-}x!p01XRucdq)dXwj2o-@rm+az zlE%ze8Y-3XeD8QD*2oMs*b>2_t_-NWU0lspaD@^z6R>DDf~PRyDN2LD=x7%)C1$W` zc^u->X;>aKz@;K$X1S7mKu&oLThxZu@bU4C17ROj+m{}*PPqnEJKQnJ-GgBE2|Dmz zEB>j*47hBWOI1@nB@t4EJ1zul5E_GdBl?blHp6X{T+det1hX~V25}tBlJ$@_+fq^1 znbuPAsurA>sVYq#?@7F4n1=EAnjpa_nncN(N`T8KnT5+GT+U+%U=hSgG+s@D7#6E| zF<*uQfF(Lv=m`GN;Jo#SnwX&_<4srgnoKpMO=M8AEt0t@@+~Q2kkUl`-#ACYgpx&D zByE0bBT0*LkjnPKki_%S+WO4*ce~x7kj+5p!WSKh@h=8Mcs@(w z`D7Bt;axCYOv3wX?}(CI;+uIQkf~@gI_~C{X9e1e=b@-#1zvbwDwr{FvtV4>(A}h= z_ZV~+ZLFl#N(j{910$;t&bsML;lS$s^njk5`}ycwI8HpTOP{q-d?0sI8j@GJdIt(P zscEL^5`PBS2vJ*oOe$KuY$_Nv)+(9oY391K+|vd75Ik^m*S*&LHv8*OJcg zoV33mr`M4%VGd9S;bh>$s-}C2ST5IlwGJU1Dq=YW|k}20_5b^utII<3?H{Oo&Z~*s(U$P)-l(h3YXU)x*HJ8?oxg4 zcg^p5On}P@Ia3AolMx_wxaLB@0--dRmZIe#C>U-BQGYy-AROJnZ8)8Vqv-C4f^DYA z>qM)dcwPuj$kdf4jW6GC0L_A?guaCnkfjiX)eUNc)Uf2lq$cvB%F&i6 zxC=6M)JpM$RI{Nmd?_)Rk!wfLouH}Q0J?39CWMB9gnOiduco`8SS478Gr^g8mbs_d zU+T8obab16EJ_>3ZmQkqgC{S;u5hzZOec*a2m(0t{TBU9HKWFkC#M&v{}I*y&sJlu WR``PL_V&M%oChfBFLogNM&t+6O?U_Z literal 0 HcmV?d00001 diff --git a/repo/objects/ab/9189a6e5918707f43ce54dee5955411ec20eef829e35078fbf409fa90a07cd.dirtree b/repo/objects/ab/9189a6e5918707f43ce54dee5955411ec20eef829e35078fbf409fa90a07cd.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..dc99594fbcce3bb11bfa59c0689be5e9a478362c GIT binary patch literal 77 zcmV-T0J8sZVPk7yXJvB$G!Z1QLzOlT>HgY^IPfwKIAFmljBi-kt5?YJlmc`_L~0K4 j8+^fM^R@%!g~#shwsrcX64mT;_9=+#3v5(~DG5seQmG_% literal 0 HcmV?d00001 diff --git a/repo/objects/ab/ce2e45fc0658480c83f3bdab1c59c9a99df5b3f48beba863c28ba4589842d6.dirtree b/repo/objects/ab/ce2e45fc0658480c83f3bdab1c59c9a99df5b3f48beba863c28ba4589842d6.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..711b5d0a60b509ea42d6dbad5ab491bfa8be0ef7 GIT binary patch literal 73 zcmV-P0Ji^QZ*4ATX>@3HVlHZRY-wRKt zOj=&>L@PLF1(qxYtKhQ#{u*$L(n7(?614{%7^rfu`6jo}8noflhmT(%)@;iSOnLH6 zpn((FOnh7Kf87*}3qMiC8O1w9oRfE{)kd=dXqst6FeQG?A9Eb795%Id}WbP4AuQ8NMaYAtvIS3E&!5Evcpc1(^b ztZR;o7#g9aEW0yE2%>;iJKYuKVTw1&@5XB>cCP<35e%sS;7RO#Z{BzF&j+2>H- zdoB6r98=)3Cg-Z8d~yO(hC40PIw_y~8(|C1E&Nf$M zbxo^LyeI`HGG(Qy$9od*2-m}CFs6{OKe?L3D@p-IlXyB@EMPQ?AcT1s#goDEDvV&h zjOMe&&<9wclZ6iOMuD@sM^wZVEj8XWX|JfMhO~(ka<)ZkZi0ME$`~YcqyF7E2Vp|V zO`Rk;KbMiDO)`+mcEOOulib>}7X-WA&fmz&S9%kO24aFUpFn}<9r28=P6ijVRd_d9 z3}(}Kco$y}r_1s1YCeqa$KDayxx}|z2qP0wr3mjH)Smicl{7+GKY#a&?c`>*e!#?@ zc{CEijDZWa4Bws zG&F{9B&G|pwK#DTmC`$LGbT7Q-P--tL8tWVD!SNSkCtvSk!5AW#Jwx`{PFZpw@ciw z71L?^7=i#=zTc&PLnEX8Lf!oTRhI~4I+SUIq|+6C`4e|? BW_JJp literal 0 HcmV?d00001 diff --git a/repo/objects/b0/2d708664d0c0eb4b9d1ee123d0b1bf34222b4736c10f9e2a139252267192f5.dirtree b/repo/objects/b0/2d708664d0c0eb4b9d1ee123d0b1bf34222b4736c10f9e2a139252267192f5.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..630f063593f5d30ec9d8ce7a0bd9134492bf7c85 GIT binary patch literal 78 zcmV-U0I~mJZggpFX=8G40Dp{P9(1T|%MnHm@`l{yzTeS*%!5E(<>pMFqZBV(F+^$( k@f&=>XY;lL<%P%Y?zVOMq!QKabM`5S>kDjDh$;$90PP4S-T(jq literal 0 HcmV?d00001 diff --git a/repo/objects/b3/a2805fc101720f969b0a56e33b3a8c5923894ec0d62125900776702ca9dd72.filez b/repo/objects/b3/a2805fc101720f969b0a56e33b3a8c5923894ec0d62125900776702ca9dd72.filez new file mode 100644 index 0000000000000000000000000000000000000000..a2ee19969c1bd5464fd948485bcbc2490f1f7a1d GIT binary patch literal 976 zcmV;>126ml000^Q000000000000^Z300000000000D+_c000008I4t4Z|XP@eb28L z-AXIyBG?b@3v{amE(PvV;6m7{PnAiA#9GIWY$uexy8nI0F)dUDZg~pMnKS3ij3=#Y zVAAr8M_R#nEC@o|x&rt_(4SkjGG*40swSFCb`{ma^Ak?hn2Btjv zSD=9#=^vW5I{z!l7#Gb*Ww#XXD8iJ`xmJm08PMZKBZ5&IyJZ^Nuu}y@OoGOk8>{)c zun63e#<-<4WGd#Ho#UaiLdK}UrU({wWa-xKl*TELXAt$mzX?61AcK@cT=SJz)b>RhJsGPPqn^ySO^Z-GN~C z5ZVk*nLl`pfy;_HRXO=diI5y_xe%~MC=6~2(Qp(5hKF%Dnyo_UP9Nc+yI6Fm;bVuu zHdXZ2HLarJSuQv+lPgU<-jR66a6ee|M-MpC6ZPZ9 zIT9w6Oe&KEK9rH9jW-~bZGa((H>tIGyVcrmx6MQrO{J5T@Fb>n+a#h^5M1#Mjm`${ zXRGC)w+h4AbU6sa@pQQSJnl|r!>3VjMF1}GB8G@$B#Ic}Q^B7yMQt)@EtiRjIq6NB z>8E4R8N@M5ih}N%X;o0_wN>(MfCp5>hrpY!4?IrL-UdM=m@)80?Rr&kXMeEFHF4al z7#En(JkB+i9Jig9fP0tEhb;H`K3Dmm?XOJaA#Yy>-vXfD*QZ(U%b*_yfrqxMQ+%fJ zi)f0^a@SsE!nOC>fV~sA&gm}F^7#{FAw+IZ$6B2RNgCU!5NEtrc>ivH z;#0j1J}Y)q72ZRC0*dnowYrZBXdW#_bd$aNQt_B3QqWPq(9TN5>{L;9$RQ{@fl8FM(1^k2B^5_F_ zUsme3O@9mveb2AB zYG2w8k#5so=r#=)rF1P&2&;IiOmaiqId)__P&Vzq?>MaMq*ZI4ocnQn&ONr{6B63X zQl{3>P?TJWjJ%;Qy;s-78`hpmQB`asI-$O)c2=$nPe=V@dUN{v9VJ$5q@%G+zbSU~ zUhfxe-^4$yOCeP|HRVV22Z*FVb!E-kijuI*Ei*Zj`>n9tp`EEI6`Cw((s?UawP%tZ z9JAP1DorNyUBE%C))`y!1(Ro6Ix>0lGaN5y$eOKCG_6-krgSA!){aSF>kx4TXS8Z? zLdSXFF#pYg&JBQtmqxdUCGwUwY#sjT?c*N50b696xf}@}m|HSc=sO189Vy|TTHDcc z;-55TBz1#amVAj7tOSd<=8YN3epz~2O9?a)-KABOMrrlXG>MyRkGny`D z)5(0$CYp1g#R1?y1I`ly@y9lR;wU@kMG(27jr z9`%}f>gCGfM`v#-o#7?VAW&j zqYf`*Wny(_0P9)pA<$kyO*s&pKbMU|WgPX6mLV4qD|%x+4CIh%7({9g@f&=>XY;lL c<%P%Y?zVOMq!QKabM`5S>kDjDh$aR|Fra=mV*mgE literal 0 HcmV?d00001 diff --git a/repo/objects/b9/4fce966376a4472ac68b5118dcb0ad8e622cb746dfc8e97d22c53057a7fb3e.filez b/repo/objects/b9/4fce966376a4472ac68b5118dcb0ad8e622cb746dfc8e97d22c53057a7fb3e.filez new file mode 100644 index 0000000000000000000000000000000000000000..e216a729ac6fc9d05abc83cdf70d2c15aa67162a GIT binary patch literal 1333 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 BZSDX7 literal 0 HcmV?d00001 diff --git a/repo/objects/bc/7315a2310bc69742be378f6125c84bb757d2c4750b7ae239c6d96ec5a07705.dirtree b/repo/objects/bc/7315a2310bc69742be378f6125c84bb757d2c4750b7ae239c6d96ec5a07705.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..2c5c73b679d9a5a095afdc8ae207b4aff9b4f943 GIT binary patch literal 70 zcmV-M0J;BTZ*4ATX>@3HVlHZRY-wR0v)o-&r=tvEU;_MJtpb4*&oF literal 0 HcmV?d00001 diff --git a/repo/objects/be/644212270a1111e79143ec1867271075d996ad7986ed9a23fcc2c952514004.filez b/repo/objects/be/644212270a1111e79143ec1867271075d996ad7986ed9a23fcc2c952514004.filez new file mode 100644 index 0000000000000000000000000000000000000000..3c5e32ddd39b9214a8736a180f100fb1e6bfaad9 GIT binary patch literal 745 zcmVy|LS171v4Jx^`mA$mXhGq>)6FA_bDNYZTpQ-=X9pL6Kw)SP(fgAJ64tPVSuS=4px?x$LaJ8fBo_2JET_Zq{C8X z-xN8#*Zs@Lcl&>rwUBC*nfjdL10t>1yRoLUq6WVfmI%%ielIMIaWE}1p1V2W;WwcO&0G+Ci=(>^GfVIecpjv)Bxu;VJq z@z8NX#AVR1IcmVAVX*Mh=pjh5-C{@9@fvS`opA&XVY<4U3LlhPm?p%XvD^cc@QV`TyvPt^Z6EMzOTG*#&Nvg??N5+=1>LD&ZA2BG7q7zy0=oHw@(&V4{ zCcR#-(sVKVI8PRfmIlg>t>HosnVirI&nHe#1^Hp-T$bsIhX#4sgo&r;$7YjVamka!l{NmE-aA bwH&mPou6p#tH66d`F}#1zc+~E7f0bgYBY5v literal 0 HcmV?d00001 diff --git a/repo/objects/c0/3c7223c618129fd494610f411441d606702b3df9e0bdf06553959e74a3181f.filez b/repo/objects/c0/3c7223c618129fd494610f411441d606702b3df9e0bdf06553959e74a3181f.filez new file mode 100644 index 0000000000000000000000000000000000000000..0eb7aa361e3e3ab5a593c11e3833296b459aa815 GIT binary patch literal 924 zcmV;N17rLE000^Q000000000000&}FNC5R0tr_F#CCMer)aUqc(3bSYj@2LRrkN&tW6ryBX_Eb1lY4P&+pBf zT?aj2((;n0TEPt~v0@om1%HfwyaU{#v{16DLfwHLj8%2ed{bEHjxXW;Pe1<(iDp}F zV8PSB1R5B~_QJPK{P#`CxbRa|4yoQjBn4$xT5U8dfi8262u9_0$29igplV2&1dSOt zR`Ydj5x6CeS)eqOD&zUV;ZUrW8EUWvf<;{#PYfzP|yCk{? z5X`=m`kiy)Uo>XGWrJL(iu4o&ND6mc2v{T32J>2Y4uX>5<1D#dJ|qw>9^qpcMd2cO zyrN`VC|Y%_bBy&^bTVlo_rHT5! zaSntDB{z*oN`7f0QJdu;mG!_7#X(_h)enN*Zs%`g?JK5j`5kSYI}`a(scEl z>$dIqpC`p=q2JDVO19Y#N1mO(J3ycNr{(CwWSn$5ZA!n1;+|$DrIGszt9$Z9=w;2n zN7G6JN=@8*aFhbQigpi$e*;+yQCWRS1ReI4Yg?12Tg5Z-o_4$`!abVq8wo5U0y*Dw z|J?)V?Mp#LXKS8ieyi4NO5gf41`J4<2hP9Oofy^DDmjE7*3E_aA5h_*8v3kTx#breOCm1>^+Iw?(1wjD5?=|0+LM;v7$mV#l{`oKsf>xFs#H^i#rlpmtYIlOg zuBYaD#j?h(<5(G?tm&UKf;L8*sQH%4PY^d~Cj!fQ~8;MUZA9RlI#4rBjXF&Keh<~ literal 0 HcmV?d00001 diff --git a/repo/objects/c2/f5bdc250b1a335add98920f0434b55857447884ad90d5086961ee80a76fbbc.filez b/repo/objects/c2/f5bdc250b1a335add98920f0434b55857447884ad90d5086961ee80a76fbbc.filez new file mode 100644 index 0000000000000000000000000000000000000000..ea85d153c04b21b17e876cac8f257e84e9f1f874 GIT binary patch literal 957 zcmV;u148@&000^Q000000000000@!*00000000000D+_c000008Ld@aZyHAwedkwP z#V?p5=!g1(lc?AR8`l90IH{kaVfQXO>FmyCW)^~~rtO&22LLd4`W{eJqxJK{CxjxtdcY#P*}GhJ+rT&0ehXUFvOk3aoN3nSLj z(pW}+Dz@}GuMQm-^uMh#Ayp^R*<1K~h(!wP!swL|8R3{1X0keQ8)3LdTU}BlaxxrC z>x^8Mj!8OjjJw)Urem3GJq~nb97V@>(Sy4A<%HN7!T%i8ct@^r)ht- z7@gf-_h&S{olPh6L5FD0o)&w67ZRL=8X<`>I~3klVc(&s7Ti=!saP|L8?ju2nV<+A z_0NU#AVTSU6@rBEE{&izN+{Q^O%@bir_L3wGG==9NpE9JL??aqScx(?R2Aw*q=dEJ7lYHQ`YWO< zz4eO5Uk$?V=Huk_YH+q_G^*=f(DE15CqkKnZ&PB_BzS#klRs(o8i> zD$t|3n|uAuWci6Bcdw&2l$S~s&K#c{dH@)wfi|_uqB^x{PZ{e?en71_aR=0457heb z+LPb^AI`Tb3`jv-YZ((tG4M;Oxzt*rC)iq!+Y}_Z%F&8=(!NQAvRuOiKM}|8EAq{{ zRF%~0)#ABCm-=D$Q(7M%#b0&6KBnPJule7@zKC(~xd(lVR_y-si&d8FAS>LqdCx)` zS7HEf=GaUaIN*=*RjBfd@s4vR($F-FGxUF1J96~OmR zce(gna>-YZ3jCdthPzbQDd#buD~J8GMv8@bdiyw))B>T~dM>~yLdM+50h{xOF?q@A z`eABbvYPFN=&@Od2nIFh(D^m-d$W3%kX72*-d<~?#A|$eo`qYOpzl59alZ_n5!@|= fXIHzW@a$@DG3>=sJPibdzT$u6^$B&m58L-|iQCqs literal 0 HcmV?d00001 diff --git a/repo/objects/c3/2fe471888f97af61f96693a6e0d7a62a7aab4fce5810042d6ff0338a6c86cc.filez b/repo/objects/c3/2fe471888f97af61f96693a6e0d7a62a7aab4fce5810042d6ff0338a6c86cc.filez new file mode 100644 index 0000000000000000000000000000000000000000..0354b1637f0cd4f2d621ab62dddca7bce00f5275 GIT binary patch literal 19909 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%0AI*mS@$1=PQN<0 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 IF7ZwMKiL(TW&i*H literal 0 HcmV?d00001 diff --git a/repo/objects/c3/bb3e149b2d6c861720da53d8b1a55360e0ea9767f9567dd2a051b16b8058fe.filez b/repo/objects/c3/bb3e149b2d6c861720da53d8b1a55360e0ea9767f9567dd2a051b16b8058fe.filez new file mode 100644 index 0000000000000000000000000000000000000000..8a4071e3e326e0b4627f444bd817fe9285c4cff6 GIT binary patch literal 731 zcmV<10wnza000^Q000000000000jd800000000000D+_c000008HJQhZ`wc*hVT9r zBjo}q!u?P$B#r7&NN5uvV2g697JF=OyWX{S#}HKYzjtiYK%_S1fb89wXWyB3*8VvN zO|p=&HE<&eEJXrj;LG)^d%!Jff0@m=!{*er$>>&aV++&e5ecnH2@_V`>q>nUr?I;sExhf>>ywTR1Rj^Kvtd;085Xp}oSTyC$r;EM?xa$%L8u(2mFm?94u;hvyq!fM1k*LFg2f`3hU*Isrrhvu zZCZnpMX4l{xhl&Z?^%3JxF0Qsx117OPwpn+noEH3B%F?xOBl}<5WqZGgp*-(7c5{N zE#|Z3s1LBjS{BxT7aE*49&r;BBsSi)Wv|&($J$f^x!59`8>8H^G66A9)c=jEAwn6Q zHAQmpv5hQkl7cqW1IH3CbE0zK`@7w)pXsV^Z04&L;{2;VgM80BlPQl*3ej}(br{UU zXfaw%rk`f3C~R8t?bbWveW~%K5XR_ORS6&ZFxz~`n65l8R>C=mw0sDueT?v&%(PIh6}vSu z;hWot9829?u@1{PR0K{LIt>*>Sd<6op}02Q$}QiV!LtJBN&SiHw2^!wl}>bCc)u8S NhMGSZ;QKEb`5SVzS}gzo literal 0 HcmV?d00001 diff --git a/repo/objects/c4/13225da73291febb2c28a263ee7d88fc108fddaf85fd662f78c42936af6c44.filez b/repo/objects/c4/13225da73291febb2c28a263ee7d88fc108fddaf85fd662f78c42936af6c44.filez new file mode 100644 index 0000000000000000000000000000000000000000..42dd12ea92a03a7bc3b995b94354e22c6d3b6386 GIT binary patch literal 875 zcmV-x1C;y#000^Q000000000000xo(00000000000D+_c000008HH5aZreBzeb-kE z8erjg4Xf>9U+iqK@+FD8j_ueof;<(pIFg7`q(D-3jH3JPJCu}b)2sml;>?-DGdG4^ zV9JR?Bu2v}E3jl7oQ8i!zh49HQ8_4BS)vJ`3u9d#jmUBbo$)Dr{`l!nhz;8d3k#8a zlW5^gH6MLf+yBlACS*U+#W}@$iZ~~9X>?{-0rZ&~M6fz_2WD^pM_oa}6d2^fIwN+K zLlBNM@=zNnG#Ba7^N_7l91XY}!J#QE=(IjuF1B!q3JsI6s&-N&Fc%3bi@@k=Z?QRY z*ws8f;=*g#v>M<-6ESl_s~(^rzkxj(OK14w;f|KD2fD6HhdHm@fG&O9Dak#8WbP@n zAH0?PQ;r;js+n_LQa(8mQica1CF~F?i)kf$o`S$|JBzQD+Zdw79o$Cib+m}@h6HxG zCa-T=O(lv_3Sy?L4E6X(;yuIlbUnVJkZ3fU&*D2u0WN0oV!GMD#c~Z1tfF;18*k^) z8dlr&YPp&A0XFDmp(l8!z-iqhDk4WmjkitOchpo%+9ZdZ?U9iOA1aZfq=m2{r(K~rbzG3Rtg-g<56{47H1ex?V(e;pdlFsKY}+MFlfd)f%dxK zdjRyi`MMl^nU3T75HyfMeZYGfjf5ubB~ho92VI|9??E1POIi$i3H}0ANm)8`I;?5_ zeHBjT+TPN1fr9-<=ad?)tZSlP23^%lD=y%wChEXg#kj90WW zXwkJ;v8Rm#E48!F@O}%hc*NR{phN`q|GrJ)CF)vp`~`+KQ(bG?#SJoUIrPUX4+=62I=yv);^g!sP2_H#752hnxMNpda)q6tdpn3e;1i7xR&UW#rILV=3x5g zZOl(wkH34jt@PItp{s9-ziD>7=FSP}P-8PPsW38OklYchF^e<*k@sfVvZrZRCg1q# za!b)K@n!U!DJM&(^WP$DjkwZoRPibUrec8GClW&d&T*W6@(&jXHcKiRp7 zajPA;L)aV>iwYA9hKDToFCTj|D_TSA{kEQE>n_UMXXn3|XVZSOiK|p0kRZj{h__-0;;n!L;{SHk9aFic>$!JxpH!N|Y> E0NmZR`2YX_ literal 0 HcmV?d00001 diff --git a/repo/objects/c6/0df779e2fc0a40985e9ec4b807489d9cb79a537198ffcc0bb22baa261f0d6c.filez b/repo/objects/c6/0df779e2fc0a40985e9ec4b807489d9cb79a537198ffcc0bb22baa261f0d6c.filez new file mode 100644 index 0000000000000000000000000000000000000000..17ce8e61c037774df663e0275ee4bac4051a6c6d GIT binary patch literal 857 zcmV-f1E%}{000^Q000000000000$`m00000000000D+_c000008HH6{bJ{o*efO`p zGkGCd2DjVU7t+nFp(LT300EOUeaQ&>8fz;{9!WN^o&NW|vP~d_WSN1nj?O(g_rtca@yBWqBgXKPunvZ!8WL>E-hxAa}6qYai?T=1A^II zXvaI2{4U2BxU7^@l~X<`2~vhDE(9zP3WG@@+D?MV@GuOo$MX<^(IY$r(`hgYAJ2(w zQ$@S3X_XYua=}TNveMM!4ViZew}WZ_nnHr!@Mai3QVMW63`c|63@*o02w)OS!(o4Z z6HH+;pH9ZJK?h)l&K5d>cM6Ib#sfME!r` zoCp(2E~_MoyelJF8zvx?ZG$0;pHpk|uJ5l_tIkpu9i^APs6~u_(IFw<^GrNL#eKE@~U zy$z3=W-+31uk$Inwgq*&R6M4sc&=q@zp!vtT|J1&EhT25zRM3w*BMPRlR2h|-EC8|r)|tW)*QTp{%PiCpR_IU4qK@8ipMs6fu!jEVs?-q%vh!m jAe8YA(62fAkYl)93OqQk1}mQTi@qoH$P@7W!)xF_mvoHr literal 0 HcmV?d00001 diff --git a/repo/objects/c9/f8d6d1ba05aa45a6a60ce1e3a035d672aae0070e32762dd6fce6f244bd4adf.filez b/repo/objects/c9/f8d6d1ba05aa45a6a60ce1e3a035d672aae0070e32762dd6fce6f244bd4adf.filez new file mode 100644 index 0000000000000000000000000000000000000000..041398ddac47db7984e5780be7bab8ff7719035c GIT binary patch literal 847 zcmV-V1F-x6000^Q000000000000x!-00000000000D+_c000008I4p;Z{s!)z3W#D zkc*NURzJ{-y$x!+cI-6%h%964(}I>p5?hKCNJ_3z^uKpVdDl)hyIWmE4rdKb(bcQ8@)N%Nw#5KeC4$M1jm84}G}ZeYdJ zzXTe1C%Zx4`uML!#klCFs=B9o2a%MNU29cnRsjujjR;2N_Q*62;G`NznFNg)H&*jQ zV-dI|j#;EMR4U{7$>C6}kr`^RC4xm=8Bn>OJgj!`fD$zmuxSp0r|`s6lm>y()-Ga7 z%;4a0T*b_B*q%ASOc5}%T*)3Fr*#c2YD07Q>Ej+}z#b@nE+Mmyxdv6cx?7@q0>SL1 zv>&`B{-QAhEe?}7|a{da}bma?-$8@y-Q%U+Qa)%9FJDXen`o- zRJ7`v=An313r@(SN>h(dMBX7Rr}1P?C8P1;X_4$n0?Zc4YP#LRY#qZ0HlsLMOmZbuHQscx_taEF+(ZT?Ymu6pB5#QqgOnWg?Z!C} zCX_6^NJ_pOBT-xAAeHTbA&T!xYwJN29goL;A)CI^MI<^96W#X-C<=lbo|AQQcwFzt zyChk!mh0ViI-fpmrtyb)a6@Zc;+K}GT&AMQXtU?_;ZIEMeGmkxV8+06Qfg$`@Z8kz$vJs-T`gZ86Tg5XvZiDu!_BV1JlPQ|;I*W2vQOK2vJ0r*ziJP_NvwsjgejlQ@*O#m*^{q z!2Ovpg9}*Ya3+m5N-q^z&LjBXA3gXq-gjdZtTvck3-QaH%&*m7mlWM2`WgA`f2ptD z6rO!c`PorMDEm@=i_6OqgfFGFpOjHX_?hgfd;MRwwPdou&g0?P>u_iNpYj4iYl+<8 Z;*|Vi6Aw2G{-wMdl=O}}1z)&h{{fQzlz;#L literal 0 HcmV?d00001 diff --git a/repo/objects/ca/952375ca08ebd8398558432f6ddbbafbba396bf6651481d7146af6e8ec4914.dirtree b/repo/objects/ca/952375ca08ebd8398558432f6ddbbafbba396bf6651481d7146af6e8ec4914.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..27dcfd572a420b6fd1ebcbc13ca82aa1b10ba045 GIT binary patch literal 122 zcmV-=0EPc-X<}h+bZKm9VlH!U02W&Ei%=_dTvm+^`mJ+#A4>CGfM`v#-o#7?VAW&j zqYf`*Wny(_0B$r3od2_Wn4G0V=DTXY;lL c<%P%Y?zVOMq!QKabM`5S>kDjDh$aR|Fwh4#KmY&$ literal 0 HcmV?d00001 diff --git a/repo/objects/cb/19a4139b37f40607cb31d49c80ed914a4bc2e138561755223667b05c987189.filez b/repo/objects/cb/19a4139b37f40607cb31d49c80ed914a4bc2e138561755223667b05c987189.filez new file mode 100644 index 0000000000000000000000000000000000000000..7609285c05cf8bc1fc6467e12503d3d9cea35b6c GIT binary patch literal 805 zcmV+=1KRum000^Q000000000000vM100000000000D+_c000008KqQhZ`v>r{+?fP zTBV6HME0V6p&c59P-rQkA=SjE$t0J=n`1||14GmP`_6%?w5rxg%_rwxo_n6Vv;8(O zX?e*Lt>BWCSg{nWg6oTSH-H+D-ESedA4&nWUFP08f<}JQI`f(*8E(~@8A+8Y9?S&uLVzF#uJnVfl+B^F$Jcu zZg5=2*l}1MIKWsDFtc3A4j?DLh7D>%|M2O)#sRPcs_9FMS;t(1s$AYF(cOVy_93q%?1%H z?xIDw47vbIbhOX`{G-8HGb3tZik1d%_Oe$rR72cE3I*FB4L3o)A!ZB`+NhTY=RlZH zGH*mu@IxDk+B5^HYzGWcJTI)RdcMEiZo9dxyGrN2*n=3q-z6a5^GPbF9LAMin`^`?^ zfbaeGfWF)B;l))jjJ>_L*BJ2^Ek;87^#W+?i67dHpw4{_XjgP$=!N(KvKFGU`t+#v8atHA2dJ6jxXD=-@Hq5el|zaq91e ji5eRYnr|p-U;g>&yt)O|k&-j-4^=&JmJEFVKkmU_Q4Dk` literal 0 HcmV?d00001 diff --git a/repo/objects/cd/2fb60a836a21aa76fb44da7c2b72b88b4640e3bc2ae4e7905ea14e4e3472cf.filez b/repo/objects/cd/2fb60a836a21aa76fb44da7c2b72b88b4640e3bc2ae4e7905ea14e4e3472cf.filez new file mode 100644 index 0000000000000000000000000000000000000000..ec023927c39c0052406dbbf3542e3808257ae6cc GIT binary patch literal 3564 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 literal 0 HcmV?d00001 diff --git a/repo/objects/cf/c83548e29e67cf627cca6b527835684b944f91ee55c965f296d9f635c744f2.filez b/repo/objects/cf/c83548e29e67cf627cca6b527835684b944f91ee55c965f296d9f635c744f2.filez new file mode 100644 index 0000000000000000000000000000000000000000..12caf5b80cd445df828b44d4c0dbf32bd7f344b6 GIT binary patch literal 973 zcmV;;12X&o000^Q000000000000 z>;RLN=RDC0?pTfmOTjAm?fUyiz%5D(IV%d(0d!!jioNEW%tCA2hPOZb_%p*+G3CZ; zzA7yOx1=!*m4;lUe7$!(gq1Qy4K_otsB;5q?O*O@PjH74H50HXSAr+-z!Q`Pfzj3u zF&UqF$FF?bEXRNlMx{~+;Jgbg-{w?m!j(^C>Wln@%{WMhSBT=o<~tMn#C^z z3bvV|Ro666#q&aNVkTFbdb}s`j^S|LVt0cn&?XqVXQ{9Q7~=fxl>b&?)Fh(jD{*$Wn;H>h{3r{qrBq1bcj?l%SJEtMdZo5&jlS z8?^PRX|-uGrLom!pK(FK^-D9hYG;Lf2NbqYLPT^Gc-#x3$+hGS)2a3fBe{!LxR#eMfL%Kz6U literal 0 HcmV?d00001 diff --git a/repo/objects/d0/1861fee9974ea0f0d39242f7654c99087159e19611d2cb229e79a4549c5691.dirtree b/repo/objects/d0/1861fee9974ea0f0d39242f7654c99087159e19611d2cb229e79a4549c5691.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..20bfa69593e58d6f7d4daf23b0fa8a2459f3393d GIT binary patch literal 73 zcmV-P0Ji^aVQw)1@1*V5U7>|1{AO?q##9kKGuRNQMi$)F(_RMOJe7@NL~0K48+^fM f^R@%!g~#shwsrcX64mT;_9=+#3v5(~B?U(SEF~l4 literal 0 HcmV?d00001 diff --git a/repo/objects/d1/305c5699184f4d317740f0aff4d25c47531d849bb6a0ebda3f6e921c27c44a.filez b/repo/objects/d1/305c5699184f4d317740f0aff4d25c47531d849bb6a0ebda3f6e921c27c44a.filez new file mode 100644 index 0000000000000000000000000000000000000000..138913f9db0a991dc743fbb094956456bf7fb01b GIT binary patch literal 1192 zcmV;Z1Xue2000^Q000000000001FrZ00000000000D+_c000008I4w5Z{j!+UY}^*vH5Bo_p^} zJ53{rm?k6< z8^uIVOFj+Q?>*oV|2`N8%NI-mhQV?&SS(;Tor4cE zf4&TQ;n<(UES%4#i$NP;L2X#n61*dD;%bB<#?)Zpb(QuD7FAkl- zh_ItRE}SJHT#D2siQt2b7+R2kkfsG1L%hw5DY~7`X0vIhqHIf*c6ddiJ9lj)>UiE2 zOR#kk@caEiKUn(Vaypw&hrt-%{PA@3`ruvRJ`?mk2-1j%moZ-Y)Mpr8dUv#DMqI84 z$Hj;ft-&vioGF_TY6r#-F2(<4O=n7j=n_KI8g_h41c$NR0o=R_tb)?G0x9zO{eA^G-LOq zTkhVEe=3fr1;zlw0QC+kpHvDDRxc;SXKIen{mU`dDUZ8W%%N2I`Q1KENXd;A@+61j>bsp!_Qbr_ z2HF+HL&GsNLaVM?dd-w6(W%ywp^-%qEsVoymZB1R2eO+{HIYLm+=s`Z3dPp=eE`j+ zsbkUo#jeEnN^W$mEsijLVF${6r7q$$dhJOYsoWhof<+mPzM^)=DKqR^tR{Us2i@tp zFvOJlh-~9J0BR3y0PHwSu50TT4d!SiC+5ljCghASV37pqwgP@#~s4 zGh#A}yrP^XPLW;GgT7SQ$2XMe{&;QBj@MX{5+%wNIvT$#R=e;)AN(CNJQ Gb^i|*EIW$; literal 0 HcmV?d00001 diff --git a/repo/objects/d1/d52df8f6e7c0570c1db26bb9c3ff34edb263f5b0054724c97940e785f6e8e8.filez b/repo/objects/d1/d52df8f6e7c0570c1db26bb9c3ff34edb263f5b0054724c97940e785f6e8e8.filez new file mode 100644 index 0000000000000000000000000000000000000000..06eb88738e3222cecff39d3b2c70a77372716561 GIT binary patch literal 788 zcmV+v1MB<%000^Q000000000000rIv00000000000D+_c000008I4q3Z`wc*eD|+d zDN;pJg!`eskQCKWNZb-2U=r~Z9rhYud%m;o&L*hpfA5}w2GXQ0l7+o{GdsJpwtogp zTAuS*E4XAi7Ayg);A{8wHDHC(Le7c;wFhU=Q^iK}Rc4{lJB4>|-hO~cvx*xS@%Xzy z0~d08)3SB^(<*0Nv|^Qa2=6GOj7}F?tu)JlZc~j2Mx}PmG`3-*N{E>RjR`ka^JQrf zxFwB=uQcQ;;pxWlP^^>*YOooCMV%W^Y5j0Hn!_bZ)J(vnTnZk;kjE$u0;AF{Vlqr% zS@Sr=z-gH6G{8U+F|%CBCLpK0h6=TzXL!G_u_J7Ps^`*R)+yJZ3Wqx-xf>A7K0;gG zbIm{Ym;jeGbEXRFCnG}YaLt8)B|>R1Ek)B&&|$a>qpR^ef?%|OyI?vEM$zJ&4%kg*EM+!%R9${577QU5m1kuag; zs&0}FKaP>4g(*m7n_x)dMP_Z$_WkvG-CD`ArS!@dTN2}UT14b~-U&}>by5gNlX>*H ze;fAtvnYt>v;J*=6y0BWCzRz9Up_z-G8Sb*1#ia7Zy4LoVQ5Ic9tFDG24upf<9S{z zm@yE_qO_l}B5mi-#P)!hWwtcX-tKJ-yK3GK59oJuKkk0%_ae{RrrUKCAISHZ*5^gO z#z6+olKQ_1OQi&P!;)U9wR`bDg4HD@c17W=V7s_1g($2(CF!nWrFa5y#^efv2Q<4P zoQ|>wZbBON!;ZdUqC|o{L3K-Ol{~;L>%e~?ub4f6(R=e8W;?9?3}96+nZ*H@OzfkL zBW{6AZ+UMWhjCf2(7Ym8`Bh6^XBL(|v~=lqWxNk1exf1-JL Sl=FVlb%K(>QU+u}P}@47u%{~nbr+;be`)-@$9^lclPF4e$733gfOG~ihrV58y`tO@(RAD9(mq31=p2|CV{ zh{mZ`;F!UE9)k%T7~l>UP%&K;OT1Xg4o~VX-9)H}3e(UkC=T3Z>Z~{o9@WVXtK1g^ zmsb;van97Hb5mPT&Zw0(F8qn9RMOcdi1Tj_WKI?#;jZ>nlMA6MS2~DRk#U7fIXNvK#tF?Ye8&jHWf8_~ark zr=WV>9i0m9yj}Zk9-rDcb8~cS=-HQVbBmLkPd{8;7@J#swQ=t3>zSqFKTkh=mu#&M je|_?Pb8|i4elhmxhxv7W_4`qAYxTy+_{f{#=jHPU{^5s{ literal 0 HcmV?d00001 diff --git a/repo/objects/d6/ad335d9d7f9bbfbb6e33774efe0d0eb5db8fdc8d94fb512facbf632c6c90a5.filez b/repo/objects/d6/ad335d9d7f9bbfbb6e33774efe0d0eb5db8fdc8d94fb512facbf632c6c90a5.filez new file mode 100644 index 0000000000000000000000000000000000000000..e8d5d8b4a0f3c3aaaa86cf920bd7be768a2e7a42 GIT binary patch literal 693 zcmV;m0!sY=000^Q000000000000eyi00000000000D+_c000008HH2JZrd;ryz46# z&Baa)sSotxq(S9poI18+%P@QjXlW&}rAUFK>5lhj;HkL8RG{8(8r8yFdfi zviyv6>$$i@+^$ zOai5$Pzg_KheNSSCaA&Y2o`l=K&8#kbg_jgO4LlisyYZB!<@$`4FaR1UBu*=z@fo$ z9TUf4^TYurih!BrO7;Lbk{1>1heN>-+O8J z^Na~_*&yetql(g;T#APN@mTF zRD50|QJbY8mF4lXgZD_Z@mjjafz>FsaeLNN)XIUyG?jMJ)q~|aXGjf4*-9&L5!0Hr5&X zppLSC;u3s_-|= literal 0 HcmV?d00001 diff --git a/repo/objects/d6/f2d62271196356861d8bd8520608b99db3768f69598cdcbae752ccefd2f3b0.filez b/repo/objects/d6/f2d62271196356861d8bd8520608b99db3768f69598cdcbae752ccefd2f3b0.filez new file mode 100644 index 0000000000000000000000000000000000000000..80847fe5bb2a9986954a1e02570deb54f48fa334 GIT binary patch literal 784 zcmV+r1MmC*000^Q000000000000mJ100000000000D+_c000008HH3`Z|X)6efO_8 zx{)fN2yT1T7m`MGC?uo_5O9?86fO1`ue#o~cGnP8^}l!4=9YV#e(+#+=i|(oIb#od z5ZcR9rq(jKL#DzXuJ7@O*7<*xAPjJx>$<99zGv0^VB<}&?F zk;9d44+G!Wf7+EoszGYXYt9c4Nx{*TH9IRx@G-YUa3=Q$VQGY;sgVi|OPO@u%5Cil z(lf_wXe>&T$@~~_*jDR|EPO%mWJ?E=H<#P_Gj2(f6$;CGt7M7?nUZz{!KH)66_jDy z;Dn56;IKY%z|=6X@Y3i$NV4BzPuB4rpFY<(0rp{h6^14j-2qpYEbrAhi z^XDEjNZlY8rs94I2ILM8QYmZ+wWGXN{Q$wic$p=4i{}LKe1n&GwTkD-=8}VbVb~i) zYoKIVDapv(m1T{OOgzQI2irh3sT37UY1pYm}E^h88<0OjOz)@qRHx@eOefbKl zbGo4?_}RzS7!@|IQsOx07oANfHt1En_}c&YvCG5);wiNU_J%{J%Svg-yn}adB!469 zv0>Q>IV^^!l-IZ=w3pV`tm4y}*PB(_HL7}g5L;4=W%#YIGNa4SeZVQ>-RO+YJjGT~ zQ-R!9DSyR~{lh;jep6AALCs^vYM!DES9R OT#)835r)He%kn3~vVQUa literal 0 HcmV?d00001 diff --git a/repo/objects/d7/618bdf95c950b23590bb8f79384eb0557e5515f7f12c838b876246a537bdf0.filez b/repo/objects/d7/618bdf95c950b23590bb8f79384eb0557e5515f7f12c838b876246a537bdf0.filez new file mode 100644 index 0000000000000000000000000000000000000000..52e921e98be9617bd264ec5d3de5af3b251ab5ed GIT binary patch literal 28373 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 literal 0 HcmV?d00001 diff --git a/repo/objects/d7/b303e56c08ad77a515e4b5c88c5437024f0e3a7f235ee40262709d6a5c206a.filez b/repo/objects/d7/b303e56c08ad77a515e4b5c88c5437024f0e3a7f235ee40262709d6a5c206a.filez new file mode 100644 index 0000000000000000000000000000000000000000..2a94e19587c95a78fa89769468a7cf1343271577 GIT binary patch literal 1463 zcmV;o1xWe;000^Q000000000001ycP00000000000D+_c000008NFBCZ{kJ}f9J0l z>7pNv=@|kc1wP1e~7o6fO4HtZuz)?XDrw>H4>Kc5MfPo#gt^-a`&%e)IjY zL%#=1TAuPyE4X4QW-J1$;M2vAGr$c>3n|Mo)E(%-P-V}WCuv<1J5F#;~V=C#Two;4|?2)A4aSRv#F<6Im&6$FOQli>R1K7hge0X`2F zi@`j2I3uuKE8@DMc~v~k1SicDm8Kd$lk-l)Y`hp=lgQv=GMxku6arjMg86v4gv*-+ z4B&RK2qwe(>0kl3_lw(`<@f|(iOwx_3f@R?>}y0xjL=fyO%e7371fY$B7!yBAQd-6 zz9G*Tgw#>*7tSeRLdnDjN#I=?$+bxgQrTlL6>oe#v}65E+1DnpS+Waw_h$))7HPP%4h zy+@c*f%gbYw3f@n>=9=yJMVNt!Hj_c4dcuWV}(2`855c1c7z)WrXt;a=23#S`Z~z1 zy45P?0w*$7FQ|a61QyVV#k8W2BW?#mj4)=our=W#uotaSOo==Y)IxYqY%+GmC*68*wvU@{DOOqnd=YB5-3pKU%N1VI<#NrtzD{~FNf%s^?D0lQYv^+!vmzl z?M9>I>`J*avDZ*uY^bEfkQRDDtv3Lb&3abR%NxZbAjN`2tX4vxrc7n7Yy8Ak!FU{} z1*UC)Y1Tk@{n|Oq@ZDcbbK3fpS@>a10Adsfkhs0NpN#72!!?FqrYd9thifL2edC$R za`&1YmS!)CIJs{QqsLXxd7w6K(2z=M?BcQ#FesYMmN%F9z0#v#3)M?Mf*DD4q4FnWInmyub{Z zEeh!~l$$q%Xmu@9rRXY@Ng?x&h+hPL+y`MuCDi`0YH9zeN-oRLXtw!=oNr9Fl8;{B zg_Vz?YeO398oof@^V8Fo+ozZF*RKfkasYnM=|G#HaW?$NM?)#nu=u~63v>$ZTYmFU zsIud@Z=MKMnhIe1alj5QgI6yC=!FO8K&f-rhUE_)SN3kBM=R6qT;IX32u2$wLyRi! RH?sQyCH;7I1#10i^AF+^)wBQr literal 0 HcmV?d00001 diff --git a/repo/objects/d7/cf2b14ead55f4fe35168406781e591330854a3fa11b10259897e829b8667db.filez b/repo/objects/d7/cf2b14ead55f4fe35168406781e591330854a3fa11b10259897e829b8667db.filez new file mode 100644 index 0000000000000000000000000000000000000000..29f57d3d9bd95dac8967be5e84c537dcd5118b83 GIT binary patch literal 2198 zcmV;H2x<2K000^Q000000000000?gY00000000000D+_c0000083AtykoSpDPDc$2 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 literal 0 HcmV?d00001 diff --git a/repo/objects/df/a0d2bf9bb5c558787c0f1399aa5130b25e365e56b18bcf7dc5ca0287408bfc.filez b/repo/objects/df/a0d2bf9bb5c558787c0f1399aa5130b25e365e56b18bcf7dc5ca0287408bfc.filez new file mode 100644 index 0000000000000000000000000000000000000000..000b333e2a859297932e4a4524f96b4c54cdec7d GIT binary patch literal 896 zcmV-`1AqJg000^Q000000000000!Rx00000000000D+_c000008HH6{kK#5Ieb2AB z(!9VFk$$Kz%oc5+FwmI=hJ>B+v@*_xSYzzec3`tr|9h`P_}XP#B&6hi9G`Q~wG!R~ zQ%-CJHyR$<7IT(@)9}>$;RE0fm4hwIb2I_mLtp2m5u40Gqu+#|fBflJNDSKv3lqWL zBwBc<4i9Zt#ouqXOvpCZ+b;Ech$N%x+~|#ATcF3aK?JMUZqE#MpwtC$rodn-tTSR& zI0WH{V;X7$Tb+t^>2WAls1yyj48ftU@f}0YA+9;VP!lk7LaP>_puB+{8cXl+%khjFum!rBOM^Mj+o^%r7YRg@CA>!Sc{E9u4^-?j zO<8YR1tqq*6ogEw40&7_%R6DX-|yQSRkXF)gz^Al!)}{^!XUU4Yg(N(d>qe{ zMfChMSk4ylsJBRx>EzQWxTBm<_`Ni>D=v$a4ttpuHtQA6Y1O?9$K1n3-=lfwmU@OJ?8d-*i&{W0h#L2xMPR8jm)26NhzTX2n<1$^c@ zMO!_$;N?}M8+34=)2h?m{tZ+iW$sM#p@I|?<4p3xZ|_hm7mF|0sFMdOH7ue0c}8wD z$x3D2!`C&x3!6(;#y6_`SyVx+Js=BP6(W$7avW~7jjo*89G_iFQ(}g#s_bT#i&{792phHeqw{xZ0ey#b2 z5A{5ETBMNcyc+h?1-c)2;59O7JLl53!=$Dwx?3c_QJF=7RyD3_PR(jSjdr_rno`qK z6+1cttkmujkR))lHYQ3EW0WLE_^CXcS~@2;>ch|W{B`u^TTgCCzFv&B#HSg-`Fg3GgySAc7j7IIb;s6A*vPZe9uSDA&Q-Z6an^!Xb^nytBkF^_)> zG;k{GL(5k7AFG^k(TY{xp?n7sWfWa#wbCpHI;I*Cj7sf>X>7w*l@K!t8WV1;=F8F| za7!E$Uunoy!qct8AzLXE)L=6Ni#j);((31YJco0XsF{FixfDEx5sy(C1V*Ku#blVk zvchp0eaB(8;{bg{z|3+bn}D4B8rG-{{lnLX8au!ysH!hV%sS>8RN?ZDiS8BzvyZ7Q z?_)mk=YDUz=1T78T)Up>eR72cE0vTH)4L3%;Kw!+wP6ZU*(MmGc$!&Tw0(cG*|b)&Y$?6+MGa#7PK$ti&pYHPtxgITlSOYb zj>5@kMuIQhIrtS_1>^Z37)^ulcHkXS9GCc(P=b}QC=-N(JGG6Kv|0&c={~fwgFWx* z^<;U6vF+@e2Fzp~kG@ziW8gw<&q`~RoC#%5_RYN-cjj>28Sm{C%5s2$?kKeD{f=Q* z!~5d_eb={>vx}e?d0y>qS5~~I{fKGJUV}Y)766S(R`a0>Gzz*n^iq5WSqf2DeSA_? zSSy~;SnL#K!sW_|F-Miw(`S(FHW{kZPfqLMZjos|Z9}624U2hEq3jok1v34l#LoMU zN;E!WKfvl4cLLtE5R5alpUCWMmA}N}k!4-ORNlZnt|3xh4XgQ@UW^*?<%YjoRk26z R#QRHC51l0i-+#-7{{!y^YAOH# literal 0 HcmV?d00001 diff --git a/repo/objects/e1/04dfd3c6ec9a5b282aefb68ca6aed11f3f6b6fe89e3c87d9820a752054edab.dirtree b/repo/objects/e1/04dfd3c6ec9a5b282aefb68ca6aed11f3f6b6fe89e3c87d9820a752054edab.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..537aa9fe2cb3f4b22a5ae7e893864c69a8dbcc4b GIT binary patch literal 73 zcmV-P0Ji^OaBy<~ay9u`PX}-IRDKlUxr-lS4X>+$1#3Q1ivX_gdfG^cL~0K48+^fM f^R@%!g~#shwsrcX64mT;_9=+#3v5(~B?U(S+yEl9 literal 0 HcmV?d00001 diff --git a/repo/objects/e5/86401fae35290da4dbd7a84c1b0d7f6d7aab8d51af82478b0196bff1dec963.dirtree b/repo/objects/e5/86401fae35290da4dbd7a84c1b0d7f6d7aab8d51af82478b0196bff1dec963.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..1f0e50afe006c2f091e1f68f91311394cd3a9127 GIT binary patch literal 70 zcmYe!&(%xMEXgQM(#tB%$xKYoPf65E%qz*v%}g%J*DJ_NXQ(sbG~RHxx74cMkNx-I a1s$g)Rd>WJId-P0Jym~3>|a4;7gqq~S{+6J literal 0 HcmV?d00001 diff --git a/repo/objects/e9/844e6232136e21946a3dc5f4692bf4eed2e27121f431d66c70f346bf4d99f4.filez b/repo/objects/e9/844e6232136e21946a3dc5f4692bf4eed2e27121f431d66c70f346bf4d99f4.filez new file mode 100644 index 0000000000000000000000000000000000000000..c62fc9a7d26595cc22bd54e3a69ad10dd4426828 GIT binary patch literal 1364 zcmV-a1*`f1000^Q000000000001S8l00000000000D+_c000008J$+!ZX!7leebU* zWuz5h5$r|#LS{!x$c>o{B+w|z)5>%g;El0cwi^bGX1{%p-H-se%xIC2Y}cuq>r}a0 zbrRakh0Ls>OR?ZW@~FLT+iv)?rV-Z+&bGHps+#sRO-8o>m>bk|F-2IG`E{d>CW42PY5 zdVd12pBqR+(V{82D3pX{WMxs~HG&ToKA#V}S5WDk_O5&BJyM{HUfMq&jp$-9qz>J5 zhH0-mzU~a^W<0zZjLw@xBMxD4F!06&Ph*X6i8*@|-c@Peqo@wCshs9w$tZ5da*4g`=Z@ytyZh%OqWe#XDwA3ajg$c7-}WS zJ2?e)rgS<^(?S3Ite2kkI@g2C^ltF?Rq_rZsreNtly#=c9IkH9B!ZfK*f~2Y<(w6| z#kEi7eT_G~2v81mXRORX%@ojP6l2=63uG%J}P0GpFgz&rldvN;k zyqm^NQbF2r!(TwX3=BRrReMY_QrU+l+ex8L|CqJ&h`+JToazO-5@YC3(xp;`x5p>c zYGFz!1qubmWpm@e`O4mR{Qo~^oh)PL;?Mx`u$16p;OtSnY;=b|+V%hMGrz~ELy$O+ z(ULujt4{FV(~#pPR_svMX zG!OilF-G#Od?y68ao|z1!|<;nx$9Jsyn(hxDyWOVS!H&FL8oU8>~L;!u2w=x;i{!X zOMYqWH$l6NZCJ#rb+RyA!y5qYi7_fpgRWv>clN0*A-;uf*J#aACtYKxBBr=N_MOV@ z+n~O|oCzU+&z9O;VuF$60ph%Bf~B;+#4L-K`@riVBUHz+eQS@6O!fH6ZVPdsa}&t+ zss=pDC7zke-^)eW)TA;$mhJYl?yi^e zI0v^vx%N|ghJ^P~X}M10}>dDi;f3 z*VkggY7c`cpl6(#*-SC&9Oll%2%A?=+i5oWWzL! zS@aL58qS6PXd5^GXOa=d+mXyJ(B4ukQbgxUCW>T$pKC=aXt_2|MA0+Y$^s%HK+%|K zqu8o26qrGcaYri1WX#rE%Y$=;h^YdTQZQ6y8sypy2ID0RsGy2)m=-I}A{eoV3Qd9F z)^!@Sf0*Aj_|VN$e!GF(@%p-STzzV7xY30ojtTpGk!Bt#FN80WB}P-wa?c*{~C819FQo5^wk;rIdW!`Unx zFCMxGHmSr_n>0tovYazyMz0j+c#GmK!)<@oyFruiayS|;9?%829xlfH`5dk%GYDZC z&KASoaum*Bx|~fX^L`s(POU6z362DK?Q(=cjH$uIYwz|0CRL+09z#kt6q6fKwn1eC zBCM#76K6>Xmm+aaB6uH0lr~(0kfsG1C7!3olO}hCz7S?@h*w*<>{8&u+u%bT}Sd4a3o7@OTrPAcP6}0m`z8h!-)1F9k~}$D^V< z2_B?K3Zo?FSetl&m`GxVJ|rH}PQO$P>+o0B7P`lt-(5MHi|W)3(P?dBgoRa`m}8v@ zGzx-<6Rlw=^1@uv4Th#$PKDS8ZfzTwQ)3XUcMEs-EKaC-8HOvYS`wMd!Wb#KK_F1C z&PhaJ$>2u`v%RGE;>4{Ff!E#*{tZ4x!I?j-5tJ?mKLWtt-Q(o)Tfesm0>6CbX6Z8) zdxU4^2xFt-H8f-Q-#YXgn!5aI?RMkGHxw4#aMzB1)huHbm=&`Sj*v6+(pN8hXYRmXI5=Aq)IgC=HilKt6IQ6+fq(C9q zHgyey?eZw7j4C9qi5QCBms|OT8rjY>8;~nX;=iRp&TJ(ww&0CZQP~`o>+DKjEo1{&OTF!W*?SX8V~#xcDvbjhfh2NA(NVf#0Zf&vN7r z@PK_G3=~=EE_6Eh{_Gv+1#S6Rd6wz`1%F1 NgbY$=ck8*z008K9Y4QL7 literal 0 HcmV?d00001 diff --git a/repo/objects/ec/a58644926a1b6056fbecda17788bd3ec2a3ab578be7f87a8ce25c26d1f012e.filez b/repo/objects/ec/a58644926a1b6056fbecda17788bd3ec2a3ab578be7f87a8ce25c26d1f012e.filez new file mode 100644 index 0000000000000000000000000000000000000000..147c02d52805c1e00ac25b6b5c99892c2cda0449 GIT binary patch literal 808 zcmV+@1K0cj000^Q000000000000p@K00000000000D+_c000008HH3`Z{j!!+2G z+TTP`%0Pz)bDkLOtx>V(6El1XKRwsE!#7~7$`#|f1_sR}rp@L~0K48+^fM f^R@%!g~#shwsrcX64mT;_9=+#3v5(~B?U(S!G|W7 literal 0 HcmV?d00001 diff --git a/repo/objects/ee/b005c21b4f0f9818aaef70e40e0cbc8bc8fe98c91d4d3a858d41e45b5c359d.filez b/repo/objects/ee/b005c21b4f0f9818aaef70e40e0cbc8bc8fe98c91d4d3a858d41e45b5c359d.filez new file mode 100644 index 0000000000000000000000000000000000000000..9e4fe14fc64234f36844f945a5cc682229649ed3 GIT binary patch literal 960 zcmV;x13&x#000^Q000000000000=7p00000000000D+_c000008HJQfbK*D<$M60W zUC9Ml%1m}^E@6^dLXpIq@HR;}QNnIx?Fh*u%P`c|eD`U|JT?SoPKZ|b&;8K98#Q3k z@FkD5f(N$5jKyFSJl*}#1ze#tuw+?=+JhRjRkqQ5ks7G9tMKQitIrT>w&FSTc=T0Z z4qs$>@Qt(oy;w3X{75ZtDc&N&l)N*o7Md-Aj)_KuTqS1BG+x6-6%a8A8e^Ut&F6(d z;D&OH8%o1c#XQ+q4%rGBqXv^A7}U!gRO0?T^d|6t5;YSrDCUAk@XRBWIRc|kTT7l| z40Fe^5%)HS@iqszR|IB;D_IBRbgyBBI;a2e*X|ozU>%g}ONAMmxdxTlxGJT)0l~~6 z)b~ymf2c7AE*&{l8P$^#kSbhrAz+SB@Xz+Pi_LPR2Q*I)Ll&z448zEm&W(*>FQNJIY zg)pJy!WBu*hc;4bK>|{lI^>k%m(-Z-y3ts#*Zx8lzS4_^C?R>{)+bQI^DcQpPbZ=N zg-@Mnw>21aMzcrnl5AY!v6Jg& z!p=CXe&Bz0(!k$5e?xgL`+n za(A4TnMPA+`NFj+m>_(`8oyCJ)h09=v{Q1vpeEG!r=!TB*#%Kd-Cg9gup$-X&8KsW zBidXkLGtg~WyVo|%)VBqPGnlh1-^G?E5 eXRBwIIy8V*YVy7Nd>o9-aV4)g5&J literal 0 HcmV?d00001 diff --git a/repo/objects/ef/a4edd75da18527fc66700bc654113d33d810a84616dcd5d35e06df3c958d62.dirtree b/repo/objects/ef/a4edd75da18527fc66700bc654113d33d810a84616dcd5d35e06df3c958d62.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..04dbc5886fd05beab2f56310b5f59c0083ca5bcd GIT binary patch literal 50 zcmV-20L}klZggpFX=8G4E-@}=dI0z;{|T=RI?BaHy$5eVVJ(-dL?^ojxsa8kJaT@; I%AXG~F$T^Qv<88?q6XxkR^_-lrXv4EQ-hva8W^rnzRutqH zl`yb~`%afnlH+CnzVL;-t>RLK#$B<$cg}i{TK6o)A>?ttOBUZp>6(M-pSLkTZ9V?( z-L}$SON6ezDgLI}@tQj)q(hxOEi)&zn4v8A=Yz(%D|xm`6&|bZS*9^5JtyeNm(YfBOY+gVI95$`Z8)hcHm(PV;qcp*3j3hj;HkL9E$^8<_Cq zn?M6cvKjccUjMu<7#Dt`iW7==h&U(jQmeIQ1<)|lh+tG^w@hOfcB+DeNzj;bV>Mq@ z7J*yRm6GwV^qD-0yJ@?0~AzrNyjMu0fS9u1#`xAeem! z^}VN(f5OPHo6aGGSvZfQ!EzkV zVYZylri-Buus|mZ9pEnqoYgg=Lrl?9;Z2kFH5Jv6HjzTkHb})ykZ(vCgM>Qj<-$1# z6H2b@B+2>V7)e@`fmF5wh9n;4)|TBM*lxG}T2{W&>p(OR6P)-23Ow(CXVf|w^p|lw zoeWQ-_%sT~)AP}AJR8n$M&1Egxy0uk2q6H92Hl3QlJ;VF%0exR@ru~cIAoje*+^tvf zjw+o{!#oXZ{n`}{8?Bu^77k15dAj7sAS)qCtJ}R-AzzB$D4tS9tZVrO@rMd4$C{H=q{k!rKuZ4vaD>FxNGZP z7d(FKc8R-{VmfX2APAu4`yG0En!VevPy}wo1ZU>|7FQ2BU5vYbs&i>DuJlT^R!Rx? V^3^lymLJp&2Po+W;0VuN&7Zb=aNGa@ literal 0 HcmV?d00001 diff --git a/repo/objects/f4/4fb4d2baf911a1d6dee044d489417d7d4da70681edb4e0bfaac299b6240ab2.dirtree b/repo/objects/f4/4fb4d2baf911a1d6dee044d489417d7d4da70681edb4e0bfaac299b6240ab2.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..99e886cde3e5e9e217666be9fde26470091f5125 GIT binary patch literal 146 zcmc~y&d)1mX!(6YLx5$!Df2DK@-wr1tTj&Dy%!_B@AbKxc78%PtXy5P_&!S498CYb zjrnQo@ptdGmHt{HboEW~H_eXM+&Li~YHSs`ImHaC&*{1TVTvhVSz$ zUa2>fA+itchIZ8`1Dcfrg&@RLWs(zO&9NiffuU*teJ7zElU8k!BE`q&JburI6Sg6= zmxWBM!B`YjiWJ`9{`SoSXiwUs5M@a=KpO*79!e-M^>IGPHH(6E$B=dIjUo*+GI zOhaQ)m{exRn!~nAr)1%Cf+t%zn5|iA+d4g5aZTi_0m+w&Bzf zqguoASp!Cf!NNRmB~*^GN_A=kJ7XQice7QD{&a(Nf3fIKOil@Wn5~JAyea!odI2x=b{RQT$#eB9L zc7Y|;vZx09qrh3yBQ9b}o*VB@X>Yixj1IH4tbMMPu7#zf>^6IG>r(Bp)gx0dOS{7n!9i4xA?@npDqS>DreSl^+m7l)-X zKJrwYgV8(9WP(44!H)p^JU-2CzYYg+5S(0kjg`K0UlSgWzhSLs0ce*z%6xY}L03wZ z-d?fkqJX}*96!`I963)c!f AMgRZ+ literal 0 HcmV?d00001 diff --git a/repo/objects/f8/2aff09af0d3acac546bd076f40612d97ab4427bb06b99095a33c727ec5ca9f.filez b/repo/objects/f8/2aff09af0d3acac546bd076f40612d97ab4427bb06b99095a33c727ec5ca9f.filez new file mode 100644 index 0000000000000000000000000000000000000000..d438c73d6f5452e3f5ded569a4100b521108bf79 GIT binary patch literal 1057 zcmV++1m61q000^Q000000000000a5}00000000000D+_c0000083FnO1^ge22nYx@ z2wVUIVQzG3ZE0h2Z!R$arB>f>A~z6z-@jtSQzF6Aq%T!eok9prs4jqjRIQGC@UFeP zPQ13|9}raafA844z@p<+o%)byZO?r3%{SvQ>81xSL~2qpD3k#r9j|$ARGOrCG*;4) z+`*d{oRo@^REv9UlvA=MT%@_G!70dI)CF#Q{)8xyhn9djL>3p^+mR}((7t8r? z)6bKzj*gF$)p$9LHc7fzbhvOEVi=+;o)ZD64K8Xx9yG-NVV)_hE5tnD;3t|EUc~BX zLH1mhuoy@4a2A$FXK)p9Kov;kpdwp_(e}Z!230`jxo`t6kJi>}t&B_IS?$=CnLg~5 zhn&a|6R|oxVv!@=2uYcJcS-}%T43IeD+xR9s!kqQ`$e)T9yWu`z!|bfEfYb!%&Sv! z671eOhVWliD0EA{i#U{J384JQb zxH~y+yN;-f#q@%&@=kjP?GDlp$~MV=3$hs?*@6p(o`^O5Rj5X&PXQ_jY&FYy!Ld-N(;jyu3+D3@8!wcaDr}G1oEfJnY8lissfKc$#n$8T&Zu@!^=Y4=OZ*AHfyfq@xI?djFKktL3((7 zS|u|D?^5lMxi3Sxaewr>ex5Ir-&s+>1IgdLg{wDQ+`ri@F2j?3ovaPn;{2PT+ybAG zE7^RcF7Dr#hsXW8iPl?A7W3tLI(v$Nd&!bT!jzjBJC2LalW0AHhTjx-P&udV-Edgq b{q|YF93Fp6439p;#wYm~hqpMSj|cz&%>Vjd literal 0 HcmV?d00001 diff --git a/repo/objects/f8/5fb17ba73178e086f2cb3a52772f2b921c0ee6589813021b1150991ef85158.filez b/repo/objects/f8/5fb17ba73178e086f2cb3a52772f2b921c0ee6589813021b1150991ef85158.filez new file mode 100644 index 0000000000000000000000000000000000000000..2536a8de663b4ae80d90eb3edc5d043602ec30fc GIT binary patch literal 1407 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 literal 0 HcmV?d00001 diff --git a/repo/objects/fc/47357f30944de7bf35927dc43a59211f34dcf66b8605d1f41fc105976e13c5.filez b/repo/objects/fc/47357f30944de7bf35927dc43a59211f34dcf66b8605d1f41fc105976e13c5.filez new file mode 100644 index 0000000000000000000000000000000000000000..73d6d86daf206fa96c293619b2dd8605c4417d79 GIT binary patch literal 31073 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 literal 0 HcmV?d00001 diff --git a/repo/objects/fc/5b66242a60ca51f8561c63c26e5cb506ac557aff80158da7e25ad5ac62946b.dirtree b/repo/objects/fc/5b66242a60ca51f8561c63c26e5cb506ac557aff80158da7e25ad5ac62946b.dirtree new file mode 100644 index 0000000000000000000000000000000000000000..76b9e7be03f3facb88783903988ccef177551a9d GIT binary patch literal 76 zcmV-S0JHySX=86}Z*l;{_TZZbn^-4Pz@=8@4CjJkN67raWucLyiDkp2m!fe*Y7X%m ie8Fe)wgcsb$L{X7b^4?d)$DWjDTwO}Y*dIS2uc9`{U@ma literal 0 HcmV?d00001 diff --git a/repo/objects/fd/80c15f05281985c4019b9dc456da968a4bc21a21005195a1743845d27e527e.filez b/repo/objects/fd/80c15f05281985c4019b9dc456da968a4bc21a21005195a1743845d27e527e.filez new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ede6f3afab705499f5de2b8f94646a5e6357 GIT binary patch literal 794 zcmV+#1Lgbx000^Q000000000000ssC00000000000D+_c000008I6=(bK*7>hVT6= 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 at#|^ZDl50=YhGUIi$7D3rR&|H&G8Rgo3Y#g literal 0 HcmV?d00001 diff --git a/repo/objects/ff/5ee721b5ef42d6aab20114bcdfe526f94ffa680e9ce9613f52df5936c7b1e0.filez b/repo/objects/ff/5ee721b5ef42d6aab20114bcdfe526f94ffa680e9ce9613f52df5936c7b1e0.filez new file mode 100644 index 0000000000000000000000000000000000000000..122a993ef993640fdf74c319eff3119cd1a2c707 GIT binary patch literal 4448 zcmV-m5ufe=000^Q000000000001-I=00000000000D+_c00000838#F#_owwPDc$2 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 literal 0 HcmV?d00001 diff --git a/share/antimicro/blank.txt b/share/antimicro/blank.txt old mode 100644 new mode 100755 diff --git a/share/antimicro/translations/CMakeLists.txt b/share/antimicro/translations/CMakeLists.txt old mode 100644 new mode 100755 index 68e18e6d1..48f024bbb --- a/share/antimicro/translations/CMakeLists.txt +++ b/share/antimicro/translations/CMakeLists.txt @@ -5,7 +5,7 @@ list(APPEND antimicro_TRANSLATIONS antimicro.ts) file(GLOB_RECURSE antimicro_BASE_SOURCES ${PROJECT_SOURCE_DIR}/src/*.cpp) file(GLOB_RECURSE antimicro_BASE_FORMS ${PROJECT_SOURCE_DIR}/src/*.ui) -if(USE_QT5) + if(UPDATE_TRANSLATIONS) message("Update translations - lupdate ON") QT5_CREATE_TRANSLATION(antimicro_QMFILES ${antimicro_BASE_SOURCES} @@ -13,9 +13,9 @@ if(USE_QT5) else() QT5_ADD_TRANSLATION(antimicro_QMFILES ${antimicro_TRANSLATIONS}) endif(UPDATE_TRANSLATIONS) -endif(USE_QT5) + add_custom_target(updateqm DEPENDS ${antimicro_QMFILES}) -install(FILES ${antimicro_QMFILES} DESTINATION "share/antimicro/translations") +install(FILES ${antimicro_QMFILES} DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/antimicro/translations") set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM true) diff --git a/share/antimicro/translations/antimicro.ts b/share/antimicro/translations/antimicro.ts old mode 100644 new mode 100755 index c162a7265..38318ad43 --- a/share/antimicro/translations/antimicro.ts +++ b/share/antimicro/translations/antimicro.ts @@ -4,17 +4,17 @@ AboutDialog - + About - + Version - + "juliagoda" (since March, 2018) Wanting only to play my favourite old games that din't support gamepads, I found this project (which map keyboard keys and mouse buttons to connected gamepads on Linux) as most proper and recent. But because of poor choices of such application on the internet and since it didn't compile properly, I decided to rescue the project. However, once I finished my work (enough to enjoy playing games) I thought about sharing this code with others. Of course all informations about past programmers will be held. "Ryochan7" (since December 30, 2012 until 2017), I have been working on antimicro in my spare time. What originally started as a fork of QJoyPad and a way to learn proper event-driven programming has turned into something much bigger than I originally intended. Although I have spent a lot of time learning new techniques, finding out more about the domain of KB+M emulation, and spending Friday nights bashing my head against my keyboard, it has been a fun and enriching experience overall. @@ -32,17 +32,17 @@ As of May 24, 2016, this project has moved to https://github.com/AntiMicro/antim - + Copyright: 2013 - 2018 - + Info - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -86,7 +86,7 @@ p, li { white-space: pre-wrap; } - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -204,57 +204,57 @@ p, li { white-space: pre-wrap; } - + Changelog - + Credits - + antimicro - + About Development - + License - + Program Version %1 - + Program Compiled on %1 at %2 - + Built Against SDL %1 - + Running With SDL %1 - + Using Qt %1 - + Using Event Handler: %1 @@ -262,151 +262,156 @@ p, li { white-space: pre-wrap; } AddEditAutoProfileDialog - + Auto Profile Dialog - + Profile: - - + + Browse - + Window: - - + + Select Window. Click on the appropriate application window and the application file path will be populated in the form. - + Detect Window Properties - + Class: - + Title: - + + set partial title + + + + Application: - + Select - - Devices: + + De&vices: - - + + Select this profile to be the default loaded for the specified device. The selection will be used instead of the all default profile option. - + Set as Default for Controller - - + + A different profile is already selected as the default for this device. - + Current (%1) - + Open Config - - + + Select Program - + Programs (*.exe) - + Please use the main default profile selection. - + Please select a window by using the mouse. Press Escape if you want to cancel. - + Capture Application Window - + Could not obtain information for the selected window. - + Application Capture Failed - + Profile file path is invalid. - + No window matching property was specified. - + Program path is invalid or not executable. - + File is not an .exe file. - + No window matching property was selected. @@ -414,502 +419,502 @@ of the all default profile option. AdvanceButtonDialog - - + + Advanced - + Assignments - + Toggle - + Turbo - + Set Selector - + Blank or KB/M - + Hold - + Pause - + Cycle - + Distance - + Insert - + Delete - + Clear All - + Time: - + 0.01s - + 0s - + Insert a pause that occurs in between key presses. - + Release - - + + Insert a new blank slot. - + Delete a slot. - + Clear all currently assigned slots. - + Specify the duration of an inserted Pause or Hold slot. - + 0m - + &Mouse Speed Mod: - - + + Specify the range past an axis dead zone in which a sequence of actions will execute. - + Distance: - - + + % - + Mouse Mod - + Press Time - + Delay - + Execute - + Load - + Set Change - + Text Entry - + Placeholder - - + + 0 - + Set the percentage that mouse speeds will be modified by. - + Auto Reset Cycle After - + seconds - + Executable: - + ... - + Arguments: - - - + + + Enabled - + Mode: - + <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> - + Normal - + Gradient - + Pulse - + Delay: - + 0.10s - + Rate: - + 10.0/s - - + + Disabled - + Select Set 1 One Way - + Select Set 1 Two Way - + Select Set 1 While Held - + Select Set 2 One Way - + Select Set 2 Two Way - + Select Set 2 While Held - + Select Set 3 One Way - + Select Set 3 Two Way - + Select Set 3 While Held - + Select Set 4 One Way - + Select Set 4 Two Way - + Select Set 4 While Held - + Select Set 5 One Way - + Select Set 5 Two Way - + Select Set 5 While Held - + Select Set 6 One Way - + Select Set 6 Two Way - + Select Set 6 While Held - + Select Set 7 One Way - + Select Set 7 Two Way - + Select Set 7 While Held - + Select Set 8 One Way - + Select Set 8 Two Way - + Select Set 8 While Held - + sec. - + /sec. - + Set %1 - - + + Select Set %1 - + One Way - + Two Way - + While Held - + Choose Executable - + Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. - + Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. - + Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. - + Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. - + Chose a profile to load when this slot is activated. - + Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. - + Specify the time that keys past this slot should be held down. - + Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. - + Change to selected set once slot is activated. - + Full string will be typed when a slot is activated. - + Execute program when slot is activated. - - + + Choose Profile - + Config Files (*.amgp *.xml) @@ -917,157 +922,157 @@ of the all default profile option. AdvanceStickAssignmentDialog - + Stick/Pad Assignment - + Sticks - + DPads - - + + %1 (Joystick %2) - + Stick 1 - - - + + + Enabled - - - - - - + + + + + + Assign - - + + X Axis: - - + + Y Axis: - + Stick 2 - + Number of Physical DPads: %1 - + Virtual DPad 1 - + Up: - + Down: - + Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. - + Left: - + Right: - - - - + + + + Axis %1 - - - - + + + + Axis %1 - - - - - + + + + Axis %1 + - - - - + + + + Button %1 - + Move stick 1 along the X axis - + Move stick 1 along the Y axis - + Move stick 2 along the X axis - + Move stick 2 along the Y axis - - - - + + + + Press a button or move an axis @@ -1075,179 +1080,179 @@ of the all default profile option. AxisEditDialog - + Axis - - + + Mouse (Horizontal) - - + + Mouse (Inverted Horizontal) - - + + Mouse (Vertical) - - + + Mouse (Inverted Vertical) - - + + Arrows: Up | Down - - + + Arrows: Left | Right - - + + Keys: W | S - - + + Keys: A | D - - + + NumPad: KP_8 | KP_2 - - + + NumPad: KP_4 | KP_6 - - - + + + None - - + + Set the value to use as the limit for an axis. Useful for a worn out analog stick. - + Negative Half Throttle - + Positive Half Throttle - + Name: - + Specify the name of an axis. - + Mouse Settings - - + + Set the value of the dead zone for an axis. - + Presets: - + Dead Zone: - + Max Zone: - - + + [NO KEY] - + Throttle setting that determines the behavior of how to interpret an axis hold or release. - + Negative Throttle - + Normal - + Positive Throttle - + Current Value: - + Set - + Set %1 - + Left Mouse Button - + Right Mouse Button @@ -1255,123 +1260,123 @@ interpret an axis hold or release. ButtonEditDialog - + Dialog - + To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab - + Placeholder - + Toggle - + Enables a key press or release to only occur when a controller button is pressed. - + Enables rapid key presses and releases. Turbo controller. - + Turbo - + Last keyboard/mouse button: - + Slots - + Na&me: - + Specify the name of a button. - + Action: - + Specify the action that will be performed in game while this button is being used. - + Advanced - - - + + + Choose your keyboard key - + No button - - - - + + + + Last button - + To change settings for last button, it must be at least one assignment from keyboard to gamepad - + To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad - + To open advanced dialog, it's needed to map at least one button from keyboard to gamepad - + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + As last gamepad button has been set - + Index %1 @@ -1379,190 +1384,190 @@ this button is being used. Calibration - + Form - - + + Start calibration - + Controller: - + Sticks: - - Use settings from jstest-gtk - - - - + Reset settings - + Cancel - - + + Save - - + + Calibration - - Do you really want to reset settings of current axes? + + Do you really want to reset settings of current axis? - + Calibration was saved for the preset. Do you really want to reset settings? - + Place the joystick in the center position. It's the part, where often you don't have to move. Just skip it in such situation. - + Calibrating center - + Start second step - + Center X: %1 - + Center Y: %1 - + Place the joystick in the top-left corner many times - - + + Calibrating position - - + + X: %1 - - + + Y: %1 - + Place the joystick in the bottom-right corner - + Start final step - + range X: %1 - %2 - + range Y: %1 - %2 - + deadzone X: %1 - + deadzone Y: %1 - + ---Calibration done!--- - + Calibration values have been saved - - + + Dead zone calibration - - You must move X axis to the right at least five times! Keep moving! + + You have to move axes to the top-left corner at least five times. + + + + + You have to move axes to the bottom-right corner at least five times. - - You must move X axis to the left at least five times! Keep moving! + + Do you want to save calibration of current axis? - - - - + + + + Axis %1 @@ -1570,64 +1575,64 @@ deadzone Y: %1 CapturedWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: - - - + + + TextLabel - + Title: - + Path: - + Match By Properties - + Class - + Title - + Path - + Full Path - + File Name @@ -1635,67 +1640,67 @@ deadzone Y: %1 DPadContextMenu - + Mouse (Normal) - + Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) - + Arrows - + Keys: W | A | S | D - + NumPad - + None - + Standard - + Eight Way - + 4 Way Cardinal - + 4 Way Diagonal - + Mouse Settings @@ -1703,108 +1708,108 @@ deadzone Y: %1 DPadEditDialog - + Dialog - + Presets: - + Mouse (Normal) - + Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) - + Arrows - + Keys: W | A | S | D - + NumPad - + None - + Dpad Mode: - + &Name: - + 4 Way Cardinal - + 4 Way Diagonal - + DPad Delay: - - + + Time lapsed before a direction change is taken into effect. - + s - + Specify the name of a dpad. - + Mouse Settings - + Standard - + Standard: 8 region dpad with two direction buttons active when the dpad is in a diagonal region. @@ -1820,17 +1825,17 @@ to a diagonal zone. - + Eight Way - + Set - + Set %1 @@ -1838,27 +1843,27 @@ to a diagonal zone. EditAllDefaultAutoProfileDialog - + Default Profile - + Profile: - + Browse - + Open Config - + Profile file path is invalid. @@ -1866,29 +1871,29 @@ to a diagonal zone. ExtraProfileSettingsDialog - + Extra Profile Settings - + Key Press Time: - + 0.00 ms - + Profile Name: - - - + + + s @@ -1896,7 +1901,7 @@ to a diagonal zone. GameController - + Game Controller @@ -1904,9 +1909,9 @@ to a diagonal zone. GameControllerDPad - - - + + + DPad @@ -1914,187 +1919,187 @@ to a diagonal zone. GameControllerMappingDialog - + Game Controller Mapping - + <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> - + A - + B - + X - + Y - + Back - + Start - + Guide - + Left Shoulder - + Right Shoulder - + Left Stick Click - + Right Stick Click - + Left Stick X - + Left Stick Y - + Right Stick X - + Right Stick Y - + Left Trigger - + Right Trigger - + DPad Up - + DPad Left - + DPad Down - + DPad Right - + Mapping - + SDL 2 Game Controller Mapping String - + Last Axis Event: - + Current Axis Detection Dead Zone: - + 5000 - + 10000 - + 15000 - + 20000 - + 25000 - + 30000 - + 32000 - + Game Controller Mapping (%1) (#%2) - + Discard Controller Mapping? - + Discard mapping for this controller? If discarded, the controller will be reverted to a joystick once you refresh all joysticks. @@ -2104,47 +2109,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerSet - + Back - + Guide - + Start - + LS Click - + RS Click - + L Shoulder - + R Shoulder - + L Trigger - + R Trigger @@ -2152,9 +2157,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerTrigger - - - + + + Trigger @@ -2162,9 +2167,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxis - - - + + + Axis @@ -2172,24 +2177,24 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisButton - + Negative - + Positive - + Unknown - - - + + + Button @@ -2197,74 +2202,74 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisContextMenu - + Mouse (Horizontal) - + Mouse (Inverted Horizontal) - + Mouse (Vertical) - + Mouse (Inverted Vertical) - + Arrows: Up | Down - + Arrows: Left | Right - + Keys: W | S - + Keys: A | D - + NumPad: KP_8 | KP_2 - + NumPad: KP_4 | KP_6 - - + + None - - + + Mouse Settings - + Left Mouse Button - + Right Mouse Button @@ -2272,57 +2277,57 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButton - + Processing turbo for #%1 - %2 - + Finishing turbo for button #%1 - %2 - + Processing press for button #%1 - %2 - + Processing release for button #%1 - %2 - + Distance change for button #%1 - %2 - - - + + + Button - - - - + + + + [NO KEY] - + [Set %1 1W] - + [Set %1 2W] - + [Set %1 WH] @@ -2330,47 +2335,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonContextMenu - + Toggle - + Turbo - + Clear - + Set Select - + Disabled - + Set %1 - + Set %1 1W - + Set %1 2W - + Set %1 WH @@ -2378,118 +2383,118 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonSlot - - + + Mouse - + Up - + Down - + Left - + Right - + LB - + MB - + RB - + B4 - + B5 - + Pause - + Hold - + Cycle - + Distance - + Release - + Mouse Mod - + Press Time - + Delay - + Load %1 - + Set Change %1 - + [Text] %1 - + [Exec] %1 - + [NO KEY] @@ -2497,9 +2502,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStick - - - + + + Stick @@ -2507,37 +2512,37 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickButton - - - + + + Up - - - + + + Down - - - + + + Left - - - + + + Right - - - + + + Button @@ -2545,67 +2550,67 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickContextMenu - + Mouse (Normal) - + Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) - + Arrows - + Keys: W | A | S | D - + NumPad - + None - + Standard - + Eight Way - + 4 Way Cardinal - + 4 Way Diagonal - + Mouse Settings @@ -2613,86 +2618,86 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickEditDialog - + Dialog - + X: - - - - - + + + + + 0 - + Y: - + Distance: - + Presets: - + Mouse (Normal) - + Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) - + Arrows - + Keys: W | A | S | D - + NumPad - + None - + Stick Mode: - + Standard: 8 region stick with two direction buttons active when the stick is in a diagonal region. @@ -2708,72 +2713,72 @@ to a diagonal zone of the stick. - + 4 Way Cardinal - + 4 Way Diagonal - - + + Dead zone value to use for an analog stick. - - + + Value when an analog stick is considered moved 100%. - - + + The area (in degrees) that each diagonal region occupies. - + Square Stick: - - + + Percentage to modify a square stick coordinates to confine values to a circle - + % - + Stick Delay: - - + + Time lapsed before a direction change is taken into effect. - + s - + Modifier: - + Edit button that is active while the stick is active. This button is useful for assigning zones with @@ -2782,68 +2787,68 @@ functionality to an analog stick. - + PushButton - + Na&me: Name: - + Specify the name of an analog stick. - + Mouse Settings - + Standard - + Bearing: - + % Safe Zone: - + Eight Way - + Dead Zone: - + Max Zone: - + Diagonal Range: - + Set - + Set %1 @@ -2851,9 +2856,9 @@ functionality to an analog stick. JoyControlStickModifierButton - - - + + + Modifier @@ -2861,9 +2866,9 @@ functionality to an analog stick. JoyDPad - - - + + + DPad @@ -2871,37 +2876,37 @@ functionality to an analog stick. JoyDPadButton - - - + + + Up - - - + + + Down - - - + + + Left - - - + + + Right - - - + + + Button @@ -2909,266 +2914,271 @@ functionality to an analog stick. JoyTabWidget - - - - - - + + + + + + <New> - - + + Remove - - + + Remove configuration from recent list. - - + + Load - - + + Load configuration file. - - + + Save - - + + Save changes to configuration file. - - + + Save As - - + + Save changes to a new configuration file. - - + + Sets - + Copy from Set - + Settings - - + + Set 1 - - + + Set 2 - - + + Set 3 - - + + Set 4 - - + + Set 5 - - + + Set 6 - - + + Set 7 - - + + Set 8 - - + + Stick/Pad Assign - - + + Controller Mapping - - + + Quick Set - - + + Names - - + + Toggle button name displaying. - - + + Pref - - + + Change global profile settings. - - - + + + Reset - - + + Revert changes to the configuration. Reload configuration file. - + Open Config - + Config Files (*.amgp *.xml) - - - + + + Config File (*.%1.amgp) - - + + Do you really want to reset buttons settings for joystick? + + + + + Save Profile Changes? - - + + Changes to the new profile have not been saved. Would you like to save or discard the current profile? - - + + Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? - + Sticks - - + + DPads - + No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. - - + + Set %1: %2 - - + + Set %1 - + Copy Set Assignments - + Are you sure you want to copy the assignments and device properties from %1? - - - + + + Save Config - - + + Set @@ -3176,7 +3186,7 @@ to buttons or disable hiding empty buttons. Joystick - + Joystick @@ -3184,98 +3194,98 @@ to buttons or disable hiding empty buttons. JoystickStatusWindow - + Properties - + Details - + Name: - - - - - - - + + + + + + + %1 - + Number: - + Axes: - + Buttons: - + Hats: - + GUID: - + Game Controller: - + Axes - + Buttons - + Hats - + %1 (#%2) Properties - + Axis %1 - + Hat %1 - + No - + Yes @@ -3283,62 +3293,67 @@ to buttons or disable hiding empty buttons. MainSettingsDialog - + Edit Settings - + General - + Controller Mappings - + Language - + Auto Profile - + Mouse - + Advanced - + + Profile Direc&tory: + + + + <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> - + Recent Profile Count: - + <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> - + Gamepad Poll Rate: - + Change the poll rate that the program uses to discover new events from gamepads. Defaults to 10 ms. @@ -3348,52 +3363,52 @@ before using antimicro unattended. - + Hide main window when the main window close button is clicked instead of quitting the program. - + Close To Tray - + Have Windows start antimicro at system startup. - + Launch At Windows Startup - + Display recent profiles for all controllers as a single list in the tray menu. Defaults to using sub-menus. - + Single Profile List in Tray - + Have the program minimize to the taskbar. By default, the program minimizes to the system tray if available. - + Minimize to Taskbar - + This option will cause the program to hide all buttons that have no slots assigned to them. The Quick Set dialog window will have to be used @@ -3401,184 +3416,194 @@ to bring up the edit dialog for gamepad buttons. - + Hide Empty Buttons - + When the program is launched, open the last known profile that was opened during the previous session. - + Auto Load Last Opened Profile - + Only show the system tray icon when the program first launches. - + Launch in Tray - + Associate .amgp files with antimicro in Windows Explorer. - + Associate Profiles - + Key Repeat - + Active keys will be repeatedly pressed when this option is enabled. - - + + Enable - + Specifies how much time should elapse before key repeating begins. - + Specifies how many times key presses will be performed per seconds. - + <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> - + Português do Brasil - + Français - + Deutsch - + Italiano - + 日本語 - + Русский - + српски / srpski - + 简体中文 - + Español - + українська - + Polski - + + History Si&ze: + + + + Log File: - + Log Level: - + None - + Error - + Warning - + Info - + Debug - + + Reset + + + + Class - + Title - + Program - + Disable the "Enhanced Pointer Precision" Windows setting while antimicro is running. Disabling "Enhanced Pointer Precision" will allow mouse movement within antimicro to be more @@ -3586,32 +3611,27 @@ precise. - + Disable Enhance Pointer Precision - + Smoothing - - Histor&y Size: - - - - + Weight &Modifier: - + Refresh Rate: - + The refresh rate is the amount of time that will elapse in between mouse events. Please be cautious when editing this setting as it will cause the program to use @@ -3621,46 +3641,46 @@ it unattended. - + Spring - + Screen: - + Utilize the specified screen for spring mode. On Linux, the default is to use the primary screen. On Windows, the default is to use all available screens. - + Accel Numerator: - - - + + + 0 - + Accel Denominator: - + Accel Threshold: - + If the acceleration values for the virtual mouse have been changed by a different process, particularly when quitting an older game, then you might want to reset the acceleration @@ -3668,341 +3688,346 @@ values used by the virtual mouse. - + Reset Acceleration - + Delay: - - Profi&le Directory: - - - - + ms - + Rate: - + times/s - + Below is a list of the custom mappings that have been saved. You can use the following table to delete mappings or have mappings temporarily disabled. You can also disable mappings that are included with SDL; just insert a new row with the appropriate joystick GUID and check disable. Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. - + GUID - + Mapping String - + Disable? - - + + Delete - + Insert - - + + Default - + English - - + + Active - + Devices: - - + + All - + Device - + Profile - + Default? - + Add - + Edit - + Also, Windows users who want to use a low value should also check the "Disable Enhance Pointer Precision" checkbox if you haven't disabled the option in Windows. - + Select Default Profile Directory - + Are you sure you want to delete the profile? - + Save Log File As - + Log Files (*.log) + + + Do you really want to reset setting? + + + + + Would you like to reset mappings too? + + MainWindow - + antimicro - + No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu - + If events are not seen by a game, please click here to run this application as Administrator. - + &App - + &Options - + &Help - - + + &Quit - + Ctrl+Q - - + + &Update Joysticks - + Ctrl+U - - + + &Hide - + Ctrl+H - + &About - + Ctrl+A - + About &Qt - + &Properties - + &Key Checker - + &GitHub Page - + &Game Controller Mapping - + S&ettings - + &Stick/Pad Assign - + &Wiki - + &Issues - + &Calibration - + Home Page - + Could not find a proper controller identifier. Exiting. - - - - - - - + + + + + + + (%1) - - + + Open File - + &Restore - + Calibration couldn't be opened - + You must connect at least one controller to open the window - + Run as Administrator? - + Are you sure that you want to run this program as Adminstrator? Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. - + Failed to elevate program - + Failed to restart this program as the Administrator - + Could not find controller. Exiting. @@ -4010,12 +4035,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseAxisSettingsDialog - + Mouse Settings - - + Set %1 @@ -4023,12 +4048,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseButtonSettingsDialog - + Mouse Settings - - + Set %1 @@ -4036,12 +4061,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseControlStickSettingsDialog - + Mouse Settings - + Set %1 @@ -4049,12 +4074,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseDPadSettingsDialog - + Mouse Settings - + Set %1 @@ -4062,17 +4087,17 @@ Some games run as Administrator which will cause events generated by antimicro t MouseSettingsDialog - + Mouse Settings - + Mouse Mode: - + Cursor mode is used to move the mouse cursor around the screen relative to its current position depending on how much you move an axis @@ -4086,79 +4111,79 @@ axis is moved back to the dead zone. - + Cursor - + Spring - + Acceleration: - + Enhanced Precision - - + + Linear - + Quadratic - + Cubic - + Quadratic Extreme - + Power Function - + Easing Quadratic - + Easing Cubic - + Mouse Speed Settings - + Enable to change the horizontal and vertical speed boxes at the same time. - + Change Together - + Options for adding more acceleration to the mouse movement beyond what the acceleration curve would produce. Acceleration is added based on how quickly an axis is @@ -4168,52 +4193,52 @@ using typical gamepad analog sticks. - + Delta Acceleration - + &Multiplier: - + Mi&n Threshold: - - + + 1 = 20 pps - + Wheel Hori. Speed: - + Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. - + Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. - + Sensitivit&y: - + For Power Function acceleration curve. Specifies the factor to use for curve sensitivity. When the value is above 1.0, the mouse movement will be accelerated @@ -4221,122 +4246,122 @@ faster at the low end of an axis. - + Easing Duration: - - + + s - + Highest value to accelerate mouse movement by - + x - + Start %: - + Acceleration begins at this percentage of the base multiplier - + Minimum amount of axis travel required for acceleration to begin - + Max Threshold: - + Maximum axis travel before acceleration has reached the multiplier value - + E&xtra Duration: - + Curve: - + Ease Out Sine - + Ease Out Quad - + Ease Out Cubic - + Release Radius: - + Specifies that the spring area will be relative to the mouse position set by a non-relative spring. - + Relative - + Mouse Status - + X: - - + + 0 (0 pps) - + Y: - - + + 1 = 1 notch(es)/s - + Enhanced: Three tier curve that makes the mouse move slow on the low end of an axis and fast on the high end. @@ -4358,77 +4383,77 @@ a period of time using a Cubic curve. - + Hori&zontal Speed: - + &Vertical Speed: - + Wheel Vert. Speed: - + Specifies the amount of time (in seconds) that will be required before the mouse is fully accelerated after reaching the high end of an axis. - - - - + + + + % - + Extend the time that extra acceleration is applied. Axis travel will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. - + Spring Settings - + Spring Width: - + Changes the width of the region that the cursor can move in spring mode. 0 will use the entire width of your screen. - + Spring Height: - + Changes the height of the region that the cursor can move in spring mode. 0 will use the entire height of your screen. - - + + %n notch(es)/s %n notch/s @@ -4439,39 +4464,39 @@ of your screen. QKeyDisplayDialog - + Key Checker - - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - + Event Handler: - + Native Key Value: - - - + + + 0x00000000 - + Qt Key Value: - + antimicro Key Value: @@ -4479,285 +4504,285 @@ of your screen. QObject - + Super - + Menu - + Mute - + Vol+ - + Vol- - + Play/Pause - + Play - + Pause - + Prev - + Next - + Mail - + Home - + Media - + Search - + Daemon launched - + Failed to launch daemon - + Launching daemon - - + + Display string "%1" is not valid. - + Failed to set a signature id for the daemon - + Failed to change working directory to / - + Quitting Program - + # of joysticks found: %1 - + List Joysticks: - + --------------- - + Joystick %1: - + Index: %1 - + GUID: %1 - + Name: %1 - + Yes - + No - + Game Controller: %1 - + # of Axes: %1 - + # of Buttons: %1 - + # of Hats: %1 - + Attempting to use fallback option %1 for event generation. - + Failed to open event generator. Exiting. - + Using %1 as the event generator. - + Could not raise process priority. - + Last button - + There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? - + Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". - + Profile location %1 is not an XML file. - + Profile location %1 does not exist. - - - + + + Controller identifier is not a valid value. - + An invalid set number '%1' was specified. - + Controller identifier '%s'' is not a valid value. - + No set number was specified. - + No controller was specified. - + No display string was specified. - + An invalid event generator was specified. - + No event generator string was specified. - + No log file specified. - + Logging started - + Auto-switching to profile "%1". - + Auto-switching to nullptr profile! - + xinput version must be at least 2.0. No mouse acceleration changes will occur. @@ -4765,18 +4790,18 @@ of your screen. QuickSetDialog - + Quick Set - + <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> - - + + Quick Set %1 @@ -4784,12 +4809,12 @@ of your screen. SetAxisThrottleDialog - + Throttle Change - + The throttle setting for Axis %1 has been changed. Would you like to distribute this throttle change to all sets? @@ -4799,12 +4824,12 @@ Would you like to distribute this throttle change to all sets? SetJoystick - + Set %1: %2 - + Set %1 @@ -4812,52 +4837,52 @@ Would you like to distribute this throttle change to all sets? SetNamesDialog - + Set Name Settings - + Set 1 - + Set 2 - + Set 3 - + Set 4 - + Set 5 - + Set 6 - + Set 7 - + Set 8 - + Name @@ -4865,7 +4890,7 @@ Would you like to distribute this throttle change to all sets? SimpleKeyGrabberButton - + Mouse @@ -4873,7 +4898,7 @@ Would you like to distribute this throttle change to all sets? SpringModeRegionPreview - + Spring Mode Preview @@ -4881,20 +4906,20 @@ Would you like to distribute this throttle change to all sets? UInputEventHandler - + Could not find a valid uinput device file. Please check that you have the uinput module loaded. lsmod | grep uinput - + Could not open uinput device file Please check that you have permission to write to the device - + Using uinput device file %1 @@ -4902,551 +4927,551 @@ Please check that you have permission to write to the device UInputHelper - + a - + b - + c - + d - + e - + f - + g - + h - + i - + j - + k - + l - + m - + n - + o - + p - + q - + r - + s - + t - + u - + v - + w - + x - + y - + z - + Esc - + F1 - + F2 - + F3 - + F4 - + F5 - + F6 - + F7 - + F8 - + F9 - + F10 - + F11 - + F12 - + ` - + 1 - + 2 - + 3 - + 4 - + 5 - + 6 - + 7 - + 8 - + 9 - + 0 - - + + - - + = - + BackSpace - + Tab - + [ - + ] - + \ - + CapsLock - + ; - + ' - + Enter - + Shift_L - + , - - + + . - - + + / - + Ctrl_L - - + + Super_L - + Alt_L - + Space - + Alt_R - + Menu - + Ctrl_R - + Shift_R - + Up - + Left - + Down - + Right - + PrtSc - + Ins - + Del - + Home - + End - + PgUp - + PgDn - + NumLock - + * - + + - + KP_Enter - + KP_1 - + KP_2 - + KP_3 - + KP_4 - + KP_5 - + KP_6 - + KP_7 - + KP_8 - + KP_9 - + KP_0 - + SCLK - + Pause - + Super_R - + Mute - + VolDn - + VolUp - + Play - + Stop - + Prev - + Next - + [NO KEY] @@ -5454,54 +5479,54 @@ Please check that you have permission to write to the device UnixWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: - - - + + + TextLabel - + Title: - + Path: - + Match By Properties - + Class - + Title - + Path @@ -5509,9 +5534,9 @@ Please check that you have permission to write to the device VDPad - - - + + + VDPad @@ -5519,263 +5544,263 @@ Please check that you have permission to write to the device VirtualKeyPushButton - + Space - + Tab - + Shift (L) - + Shift (R) - + Ctrl (L) - + Ctrl (R) - + Alt (L) - - + + Alt (R) - + Alt Gr - + ` - + ~ - - + + - - + = - + [ - + ] - + \ - + Caps - + ; - + ' - + , - - + + . - - + + / - + ESC - + PRTSC - + SCLK - + INS - + PGUP - + DEL - + PGDN - + 1 - + 2 - + 3 - + 4 - + 5 - + 6 - + 7 - + 8 - + 9 - + 0 - + NUM LK - - + + * - + + - + Enter - + < - + : - + Super (L) - + Menu - + Up - + Down - + Left - + Right @@ -5783,226 +5808,226 @@ LK VirtualKeyboardMouseWidget - - + + Keyboard - - + + Mouse - + Mouse Settings - + Left Mouse - + Up Mouse - + Left Button Mouse - + Middle Button Mouse - + Right Button Mouse - + Wheel Up Mouse - + Wheel Left Mouse - + Wheel Right Mouse - + Wheel Down Mouse - + Down Mouse - + Right Mouse - + Button 4 Mouse - + Mouse 8 Mouse - + Button 5 Mouse - + Mouse 9 Mouse - + NONE - - + + Last button - - + + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + Others - + Applications - + Browser Back - + Browser Favorites - + Browser Forward - + Browser Home - + Browser Refresh - + Browser Search - + Browser Stop - + Calc - + Email - + Media - + Media Next - + Media Play - + Media Previous - + Media Stop - + Search - + Volume Down - + Volume Mute - + Volume Up @@ -6010,7 +6035,7 @@ LK VirtualMousePushButton - + INVALID @@ -6018,28 +6043,28 @@ LK WinAppProfileTimerDialog - - + + Capture Application - + After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. - + Timer: - + Seconds - + Cancel @@ -6047,12 +6072,12 @@ LK WinExtras - + [NO KEY] - + AntiMicro Profile @@ -6060,67 +6085,62 @@ LK X11Extras - + ESC - + Tab - + Space - + DEL - + Return - + KP_Enter - + Backspace - + Alt Gr - + xinput extension was not found. No mouse acceleration changes will occur. - + xinput version must be at least 2.0. No mouse acceleration changes will occur. - - Virtual pointer found with id=%1. - - - - + PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 - + Changing mouse acceleration for device with id=%1 @@ -6128,7 +6148,7 @@ LK XMLConfigReader - + Could not write updated profile XML to file %1. @@ -6136,7 +6156,7 @@ LK XMLConfigWriter - + Could not write to profile at %1. @@ -6144,7 +6164,7 @@ LK antimicro - + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. @@ -6152,97 +6172,97 @@ LK main - + Launch program in system tray only. - + Launch program with the tray menu disabled - + Launch program without the main window displayed - + Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers - + location - + Apply configuration file to a specific controller. Value can be a controller index, name, or GUID - + value - + Unload currently enabled profile(s) - + value(s) - + Start joysticks on a specific set. Value can be a controller index, name, or GUID - + number value - + Launch program as a daemon. Use only on Linux. - + Enable logging - + log-type - + Choose a file for logs writing - + filename - + Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. - + event-generation-type - + Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. diff --git a/share/antimicro/translations/antimicro_br.ts b/share/antimicro/translations/antimicro_br.ts old mode 100644 new mode 100755 index ccda5464e..d3298cf29 --- a/share/antimicro/translations/antimicro_br.ts +++ b/share/antimicro/translations/antimicro_br.ts @@ -4,17 +4,17 @@ AboutDialog - + About Sobre - + Version Versão - + "juliagoda" (since March, 2018) Wanting only to play my favourite old games that din't support gamepads, I found this project (which map keyboard keys and mouse buttons to connected gamepads on Linux) as most proper and recent. But because of poor choices of such application on the internet and since it didn't compile properly, I decided to rescue the project. However, once I finished my work (enough to enjoy playing games) I thought about sharing this code with others. Of course all informations about past programmers will be held. "Ryochan7" (since December 30, 2012 until 2017), I have been working on antimicro in my spare time. What originally started as a fork of QJoyPad and a way to learn proper event-driven programming has turned into something much bigger than I originally intended. Although I have spent a lot of time learning new techniques, finding out more about the domain of KB+M emulation, and spending Friday nights bashing my head against my keyboard, it has been a fun and enriching experience overall. @@ -32,17 +32,17 @@ As of May 24, 2016, this project has moved to https://github.com/AntiMicro/antim - + Copyright: 2013 - 2018 - + Info - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -86,7 +86,7 @@ p, li { white-space: pre-wrap; } - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -204,57 +204,57 @@ p, li { white-space: pre-wrap; } - + Changelog - + Credits Créditos - + antimicro - + About Development - + License Licença - + Program Version %1 - + Program Compiled on %1 at %2 - + Built Against SDL %1 - + Running With SDL %1 - + Using Qt %1 - + Using Event Handler: %1 @@ -262,151 +262,156 @@ p, li { white-space: pre-wrap; } AddEditAutoProfileDialog - + Auto Profile Dialog - + Profile: - - + + Browse - + Window: - - + + Select Window. Click on the appropriate application window and the application file path will be populated in the form. - + Detect Window Properties - + Class: - + Title: - + + set partial title + + + + Application: - + Select - - Devices: + + De&vices: - - + + Select this profile to be the default loaded for the specified device. The selection will be used instead of the all default profile option. - + Set as Default for Controller - - + + A different profile is already selected as the default for this device. - + Current (%1) - + Open Config Abrir Configuração - - + + Select Program - + Programs (*.exe) - + Please use the main default profile selection. - + Please select a window by using the mouse. Press Escape if you want to cancel. - + Capture Application Window - + Could not obtain information for the selected window. - + Application Capture Failed - + Profile file path is invalid. - + No window matching property was specified. - + Program path is invalid or not executable. - + File is not an .exe file. - + No window matching property was selected. @@ -414,502 +419,502 @@ of the all default profile option. AdvanceButtonDialog - - + + Advanced Avançado - + Assignments Atribuições - + Toggle Alternar - + Turbo Turbo - + Set Selector Definir Seletor - + Blank or KB/M - + Hold Segurar - + Pause Pausar - + Cycle Ciclo - + Distance Distância - + Insert Inserir - + Delete Deletar - + Clear All Limpar tudo - + Time: Tempo: - + 0.01s - + 0s - + Insert a pause that occurs in between key presses. Inserir uma pausa que ocorre entre teclas pressionadas. - + Release Liberar - - + + Insert a new blank slot. Inserir um novo slot vazio. - + Delete a slot. Deletar um slot. - + Clear all currently assigned slots. Limpar todos os slots atribuido atualmente. - + Specify the duration of an inserted Pause or Hold slot. Especificar a duração de uma pausa inserida ou manter o slot. - + 0m 0m - + &Mouse Speed Mod: - - + + Specify the range past an axis dead zone in which a sequence of actions will execute. Especifique o intervalo passado em uma zona morta, no eixo em que uma seqüência de ações será executado. - + Distance: Distância: - - + + % - + Mouse Mod - + Press Time - + Delay - + Execute - + Load Carregar - + Set Change - + Text Entry - + Placeholder Espaço Reservado - - + + 0 0 - + Set the percentage that mouse speeds will be modified by. - + Auto Reset Cycle After - + seconds - + Executable: - + ... - + Arguments: - - - + + + Enabled Habilitar - + Mode: - + <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> - + Normal Normal - + Gradient - + Pulse - + Delay: Atrasar: - + 0.10s - + Rate: Taxa: - + 10.0/s - - + + Disabled Inválido - + Select Set 1 One Way Selecionar e definir uma maneira - + Select Set 1 Two Way Selecionar e definir duas maneiras - + Select Set 1 While Held Selecionar e Definir um Enquanto Realiza - + Select Set 2 One Way Selecionar e definir 2 uma maneira - + Select Set 2 Two Way Selecionar e definir 2 duas maneiras - + Select Set 2 While Held Selecionar e Definir 2 Enquanto Realiza - + Select Set 3 One Way Selecionar e definir 3 uma maneira - + Select Set 3 Two Way Selecionar e definir 3 duas maneiras - + Select Set 3 While Held Selecionar e definir 3 Enquanto Realiza - + Select Set 4 One Way Selecionar e definir 4 uma maneira - + Select Set 4 Two Way Selecionar e definir 4 duas maneiras - + Select Set 4 While Held Selecionar e definir 4 enquanto realiza - + Select Set 5 One Way Selecionar e definir 5 uma maneiras - + Select Set 5 Two Way Selecionar e definir 5 duas maneiras - + Select Set 5 While Held Selecionar e definir 5 enquanto realiza - + Select Set 6 One Way Selecionar e definir 6 uma maneiras - + Select Set 6 Two Way Selecionar e definir 6 duas maneiras - + Select Set 6 While Held Selecionar e definir 6 enquanto realiza - + Select Set 7 One Way Selecionar e definir 7 uma maneiras - + Select Set 7 Two Way Selecionar e definir 7 duas maneiras - + Select Set 7 While Held Selecionar e definir 7 enquanto realiza - + Select Set 8 One Way Selecionar e definir 8 uma maneiras - + Select Set 8 Two Way Selecionar e definir 8 duas maneiras - + Select Set 8 While Held Selecionar e definir 8 enquanto realiza - + sec. - + /sec. - + Set %1 - - + + Select Set %1 - + One Way - + Two Way - + While Held - + Choose Executable - + Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. - + Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. - + Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. - + Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. - + Chose a profile to load when this slot is activated. - + Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. - + Specify the time that keys past this slot should be held down. - + Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. - + Change to selected set once slot is activated. - + Full string will be typed when a slot is activated. - + Execute program when slot is activated. - - + + Choose Profile - + Config Files (*.amgp *.xml) @@ -917,157 +922,157 @@ of the all default profile option. AdvanceStickAssignmentDialog - + Stick/Pad Assignment Atribuir Stick/Pad - + Sticks Analógicos - + DPads Direcionais - - + + %1 (Joystick %2) - + Stick 1 Analógico 1 - - - + + + Enabled Habilitado - - - - - - + + + + + + Assign - - + + X Axis: Eixo X: - - + + Y Axis: Aixo Y: - + Stick 2 Analógico 2 - + Number of Physical DPads: %1 Número de Dpads físico:%1 - + Virtual DPad 1 DPad 1 Virtual - + Up: Cima: - + Down: Baixo: - + Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. - + Left: Esquerda: - + Right: Direita: - - - - + + + + Axis %1 Eixo %1 - - - - + + + + Axis %1 - Eixo %1- - - - - + + + + Axis %1 + Eixo %1+ - - - - + + + + Button %1 Botão %1 - + Move stick 1 along the X axis - + Move stick 1 along the Y axis - + Move stick 2 along the X axis - + Move stick 2 along the Y axis - - - - + + + + Press a button or move an axis @@ -1075,180 +1080,180 @@ of the all default profile option. AxisEditDialog - + Axis Eixo - - + + Mouse (Horizontal) Mouse (Horizontal) - - + + Mouse (Inverted Horizontal) Mouse (Horizontal Invertido) - - + + Mouse (Vertical) Mouse (Vertical) - - + + Mouse (Inverted Vertical) Mouse (Vertical Invertido) - - + + Arrows: Up | Down Setas: Cima | Baixo - - + + Arrows: Left | Right Setas: Esquerda | Direita - - + + Keys: W | S Teclas: W | S - - + + Keys: A | D Teclas: A | D - - + + NumPad: KP_8 | KP_2 Pad Numérico: KP_8 | KP_2 - - + + NumPad: KP_4 | KP_6 Pad Numérico: KP_4 | KP_6 - - - + + + None Nada - - + + Set the value to use as the limit for an axis. Useful for a worn out analog stick. - + Negative Half Throttle - + Positive Half Throttle - + Name: - + Specify the name of an axis. - + Mouse Settings Configurações do Mouse - - + + Set the value of the dead zone for an axis. Defina o valor da zona morta para um eixo. - + Presets: Predefinido: - + Dead Zone: Zona Morta: - + Max Zone: Zona Máxima: - - + + [NO KEY] [SEM TECLA] - + Throttle setting that determines the behavior of how to interpret an axis hold or release. Posição do acelerador, que determina o comportamento de como interpretar um eixo ou liberação. - + Negative Throttle Acelerador Negativo - + Normal Normal - + Positive Throttle Aceleração Positiva - + Current Value: Valor Atual: - + Set Definir - + Set %1 - + Left Mouse Button - + Right Mouse Button @@ -1256,37 +1261,37 @@ interpretar um eixo ou liberação. ButtonEditDialog - + Dialog Diálogo - + To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab Para fazer uma nova atribuição, pressionar qualquer tecla do teclado ou clicar em um botão na guia do teclado ou mouse - + Placeholder Espaço Reservado - + Toggle Alternar - + Enables a key press or release to only occur when a controller button is pressed. Permite um pressionamento ou a liberação para ocorrer apenas quando um botão é pressionado no controlador. - + Enables rapid key presses and releases. Turbo controller. Permite o rápido pressionamento de teclas e lançamentos. Turbo controlador. - + Turbo Turbo @@ -1295,38 +1300,38 @@ interpretar um eixo ou liberação. Atual: - + Last keyboard/mouse button: - + Slots Slot - + Na&me: - + Specify the name of a button. - + Action: - + Specify the action that will be performed in game while this button is being used. - + Advanced Avançado @@ -1335,52 +1340,52 @@ this button is being used. Definir - - - + + + Choose your keyboard key - + No button - - - - + + + + Last button - + To change settings for last button, it must be at least one assignment from keyboard to gamepad - + To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad - + To open advanced dialog, it's needed to map at least one button from keyboard to gamepad - + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + As last gamepad button has been set - + Index %1 @@ -1388,190 +1393,190 @@ this button is being used. Calibration - + Form - - + + Start calibration - + Controller: - + Sticks: - - Use settings from jstest-gtk - - - - + Reset settings - + Cancel - - + + Save Salvar - - + + Calibration - - Do you really want to reset settings of current axes? + + Do you really want to reset settings of current axis? - + Calibration was saved for the preset. Do you really want to reset settings? - + Place the joystick in the center position. It's the part, where often you don't have to move. Just skip it in such situation. - + Calibrating center - + Start second step - + Center X: %1 - + Center Y: %1 - + Place the joystick in the top-left corner many times - - + + Calibrating position - - + + X: %1 - - + + Y: %1 - + Place the joystick in the bottom-right corner - + Start final step - + range X: %1 - %2 - + range Y: %1 - %2 - + deadzone X: %1 - + deadzone Y: %1 - + ---Calibration done!--- - + Calibration values have been saved - - + + Dead zone calibration - - You must move X axis to the right at least five times! Keep moving! + + You have to move axes to the top-left corner at least five times. + + + + + You have to move axes to the bottom-right corner at least five times. - - You must move X axis to the left at least five times! Keep moving! + + Do you want to save calibration of current axis? - - - - + + + + Axis %1 Eixo %1 @@ -1579,64 +1584,64 @@ deadzone Y: %1 CapturedWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: - - - + + + TextLabel - + Title: - + Path: - + Match By Properties - + Class - + Title - + Path - + Full Path - + File Name @@ -1675,67 +1680,67 @@ deadzone Y: %1 DPadContextMenu - + Mouse (Normal) Mouse (Normal) - + Mouse (Inverted Horizontal) Mouse (Horizontal Invertido) - + Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) Mouse (Horizontal + Vertical Invertido) - + Arrows Setas - + Keys: W | A | S | D Teclas: W | A | S | D - + NumPad Pad Numérico - + None Nada - + Standard Padrão - + Eight Way Oito Maneiras - + 4 Way Cardinal - + 4 Way Diagonal - + Mouse Settings @@ -1743,108 +1748,108 @@ deadzone Y: %1 DPadEditDialog - + Dialog Diálogo - + Presets: Predefinido: - + Mouse (Normal) Mouse (Normal) - + Mouse (Inverted Horizontal) Mouse (Horizontal Invertido) - + Mouse (Inverted Vertical) Mouse (Vertical Invertido) - + Mouse (Inverted Horizontal + Vertical) Mouse (Horizontal + Vertical Invertido) - + Arrows Setas - + Keys: W | A | S | D Teclas: W | A | S | D - + NumPad Pad Numérico - + None Nada - + Dpad Mode: Modo Pad: - + &Name: - + 4 Way Cardinal - + 4 Way Diagonal - + DPad Delay: - - + + Time lapsed before a direction change is taken into effect. - + s - + Specify the name of a dpad. - + Mouse Settings Configuração do Mouse - + Standard Padrão - + Standard: 8 region dpad with two direction buttons active when the dpad is in a diagonal region. @@ -1860,17 +1865,17 @@ to a diagonal zone. - + Eight Way Oito Maneiras - + Set Definir - + Set %1 @@ -1878,27 +1883,27 @@ to a diagonal zone. EditAllDefaultAutoProfileDialog - + Default Profile - + Profile: - + Browse - + Open Config Abrir Configuração - + Profile file path is invalid. @@ -1906,29 +1911,29 @@ to a diagonal zone. ExtraProfileSettingsDialog - + Extra Profile Settings - + Key Press Time: - + 0.00 ms - + Profile Name: - - - + + + s s @@ -1936,7 +1941,7 @@ to a diagonal zone. GameController - + Game Controller @@ -1944,9 +1949,9 @@ to a diagonal zone. GameControllerDPad - - - + + + DPad Direcional @@ -1954,187 +1959,187 @@ to a diagonal zone. GameControllerMappingDialog - + Game Controller Mapping - + <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> - + A - + B - + X - + Y - + Back - + Start - + Guide - + Left Shoulder - + Right Shoulder - + Left Stick Click - + Right Stick Click - + Left Stick X - + Left Stick Y - + Right Stick X - + Right Stick Y - + Left Trigger - + Right Trigger - + DPad Up - + DPad Left - + DPad Down - + DPad Right - + Mapping - + SDL 2 Game Controller Mapping String - + Last Axis Event: - + Current Axis Detection Dead Zone: - + 5000 5000 - + 10000 10000 - + 15000 15000 - + 20000 20000 - + 25000 25000 - + 30000 30000 - + 32000 32000 - + Game Controller Mapping (%1) (#%2) - + Discard Controller Mapping? - + Discard mapping for this controller? If discarded, the controller will be reverted to a joystick once you refresh all joysticks. @@ -2144,47 +2149,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerSet - + Back - + Guide - + Start - + LS Click - + RS Click - + L Shoulder - + R Shoulder - + L Trigger - + R Trigger @@ -2192,9 +2197,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerTrigger - - - + + + Trigger @@ -2202,9 +2207,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxis - - - + + + Axis Eixo @@ -2212,24 +2217,24 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisButton - + Negative Negativo - + Positive Positivo - + Unknown Desconhecido - - - + + + Button Botão @@ -2237,74 +2242,74 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisContextMenu - + Mouse (Horizontal) Mouse (Horizontal) - + Mouse (Inverted Horizontal) Mouse (Horizontal Invertido) - + Mouse (Vertical) Mouse (Vertical) - + Mouse (Inverted Vertical) - + Arrows: Up | Down Setas: Cima | Baixo - + Arrows: Left | Right Setas: Esquerda | Direita - + Keys: W | S Teclas: W | S - + Keys: A | D Teclas: A | D - + NumPad: KP_8 | KP_2 Pad Numérico: KP_8 | KP_2 - + NumPad: KP_4 | KP_6 Pad Numérico: KP_4 | KP_6 - - + + None Nada - - + + Mouse Settings - + Left Mouse Button - + Right Mouse Button @@ -2312,57 +2317,57 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButton - + Processing turbo for #%1 - %2 - + Finishing turbo for button #%1 - %2 - + Processing press for button #%1 - %2 - + Processing release for button #%1 - %2 - + Distance change for button #%1 - %2 - - - + + + Button Botão - - - - + + + + [NO KEY] [SEM TECLA] - + [Set %1 1W] - + [Set %1 2W] - + [Set %1 WH] @@ -2370,47 +2375,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonContextMenu - + Toggle Alternar - + Turbo Turbo - + Clear - + Set Select - + Disabled Inválido - + Set %1 - + Set %1 1W - + Set %1 2W - + Set %1 WH @@ -2418,118 +2423,118 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonSlot - - + + Mouse Mover - + Up Cima - + Down Baixo - + Left Esquerda - + Right Direita - + LB LB - + MB MB - + RB RB - + B4 - + B5 - + Pause Pausar - + Hold Segurar - + Cycle Ciclo - + Distance Distância - + Release Soltar - + Mouse Mod - + Press Time - + Delay - + Load %1 - + Set Change %1 - + [Text] %1 - + [Exec] %1 - + [NO KEY] [SEM TECLA] @@ -2537,9 +2542,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStick - - - + + + Stick Analógico @@ -2547,37 +2552,37 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickButton - - - + + + Up Cima - - - + + + Down Baixo - - - + + + Left Esquerda - - - + + + Right Direita - - - + + + Button Botão @@ -2585,67 +2590,67 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickContextMenu - + Mouse (Normal) Mouse (Normal) - + Mouse (Inverted Horizontal) Mouse (Horizontal Invertido) - + Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) Mouse (Horizontal + Vertical Invertido) - + Arrows Setas - + Keys: W | A | S | D Teclas: W | A | S | D - + NumPad Pad Numérico - + None Nada - + Standard Padrão - + Eight Way Oito Maneiras - + 4 Way Cardinal - + 4 Way Diagonal - + Mouse Settings @@ -2653,86 +2658,86 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickEditDialog - + Dialog Diálogo - + X: X: - - - - - + + + + + 0 0 - + Y: Y: - + Distance: Distância: - + Presets: Predefinido: - + Mouse (Normal) Mouse (Normal) - + Mouse (Inverted Horizontal) Mouse (Horizontal Invertido) - + Mouse (Inverted Vertical) Mouse (Vertical invertido) - + Mouse (Inverted Horizontal + Vertical) Mouse (Horizontal + Vertical Invertido) - + Arrows Setas - + Keys: W | A | S | D Teclas: W | A | S | D - + NumPad Pad Numérico - + None Nada - + Stick Mode: Modo Analógico: - + Standard: 8 region stick with two direction buttons active when the stick is in a diagonal region. @@ -2748,72 +2753,72 @@ to a diagonal zone of the stick. - + 4 Way Cardinal - + 4 Way Diagonal - - + + Dead zone value to use for an analog stick. - - + + Value when an analog stick is considered moved 100%. - - + + The area (in degrees) that each diagonal region occupies. - + Square Stick: - - + + Percentage to modify a square stick coordinates to confine values to a circle - + % - + Stick Delay: - - + + Time lapsed before a direction change is taken into effect. - + s - + Modifier: - + Edit button that is active while the stick is active. This button is useful for assigning zones with @@ -2822,68 +2827,68 @@ functionality to an analog stick. - + PushButton - + Na&me: Name: - + Specify the name of an analog stick. - + Mouse Settings Configurações do Mouse - + Standard Padrão - + Bearing: - + % Safe Zone: - + Eight Way Oito Maneiras - + Dead Zone: Zona da Morte: - + Max Zone: Zona Máxima: - + Diagonal Range: Alcance Diagonal: - + Set Definir - + Set %1 @@ -2891,9 +2896,9 @@ functionality to an analog stick. JoyControlStickModifierButton - - - + + + Modifier @@ -2901,9 +2906,9 @@ functionality to an analog stick. JoyDPad - - - + + + DPad Direcional @@ -2911,37 +2916,37 @@ functionality to an analog stick. JoyDPadButton - - - + + + Up Cima - - - + + + Down Baixo - - - + + + Left Esquerda - - - + + + Right Direita - - - + + + Button Botão @@ -2949,266 +2954,271 @@ functionality to an analog stick. JoyTabWidget - - - - - - + + + + + + <New> Novo - - + + Remove - - + + Remove configuration from recent list. - - + + Load Carregar - - + + Load configuration file. - - + + Save Salvar - - + + Save changes to configuration file. - - + + Save As Salvar Como - - + + Save changes to a new configuration file. - - + + Sets - + Copy from Set - + Settings - - + + Set 1 - - + + Set 2 - - + + Set 3 - - + + Set 4 - - + + Set 5 - - + + Set 6 - - + + Set 7 - - + + Set 8 - - + + Stick/Pad Assign Atribuir Analógico/Direcional - - + + Controller Mapping - - + + Quick Set Definir Rápido - - + + Names - - + + Toggle button name displaying. - - + + Pref - - + + Change global profile settings. - - - + + + Reset Resetar - - + + Revert changes to the configuration. Reload configuration file. - + Open Config Abrir Configuração - + Config Files (*.amgp *.xml) - - - + + + Config File (*.%1.amgp) - - + + Do you really want to reset buttons settings for joystick? + + + + + Save Profile Changes? - - + + Changes to the new profile have not been saved. Would you like to save or discard the current profile? - - + + Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? - + Sticks Analógicos - - + + DPads Direcionais - + No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. - - + + Set %1: %2 - - + + Set %1 - + Copy Set Assignments - + Are you sure you want to copy the assignments and device properties from %1? - - - + + + Save Config Salvar Configuração - - + + Set Definir @@ -3216,7 +3226,7 @@ to buttons or disable hiding empty buttons. Joystick - + Joystick Analógico @@ -3224,98 +3234,98 @@ to buttons or disable hiding empty buttons. JoystickStatusWindow - + Properties - + Details - + Name: - - - - - - - + + + + + + + %1 - + Number: - + Axes: - + Buttons: - + Hats: - + GUID: - + Game Controller: - + Axes - + Buttons - + Hats - + %1 (#%2) Properties - + Axis %1 Eixo %1 - + Hat %1 - + No - + Yes @@ -3323,62 +3333,67 @@ to buttons or disable hiding empty buttons. MainSettingsDialog - + Edit Settings - + General - + Controller Mappings - + Language - + Auto Profile - + Mouse - + Advanced Avançado - + + Profile Direc&tory: + + + + <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> - + Recent Profile Count: - + <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> - + Gamepad Poll Rate: - + Change the poll rate that the program uses to discover new events from gamepads. Defaults to 10 ms. @@ -3388,52 +3403,52 @@ before using antimicro unattended. - + Hide main window when the main window close button is clicked instead of quitting the program. - + Close To Tray - + Have Windows start antimicro at system startup. - + Launch At Windows Startup - + Display recent profiles for all controllers as a single list in the tray menu. Defaults to using sub-menus. - + Single Profile List in Tray - + Have the program minimize to the taskbar. By default, the program minimizes to the system tray if available. - + Minimize to Taskbar - + This option will cause the program to hide all buttons that have no slots assigned to them. The Quick Set dialog window will have to be used @@ -3441,184 +3456,194 @@ to bring up the edit dialog for gamepad buttons. - + Hide Empty Buttons - + When the program is launched, open the last known profile that was opened during the previous session. - + Auto Load Last Opened Profile - + Only show the system tray icon when the program first launches. - + Launch in Tray - + Associate .amgp files with antimicro in Windows Explorer. - + Associate Profiles - + Key Repeat - + Active keys will be repeatedly pressed when this option is enabled. - - + + Enable - + Specifies how much time should elapse before key repeating begins. - + Specifies how many times key presses will be performed per seconds. - + <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> - + Português do Brasil - + Français - + Deutsch - + Italiano - + 日本語 - + Русский - + српски / srpski - + 简体中文 - + Español - + українська - + Polski - + + History Si&ze: + + + + Log File: - + Log Level: - + None Nada - + Error - + Warning - + Info - + Debug - + + Reset + Resetar + + + Class - + Title - + Program - + Disable the "Enhanced Pointer Precision" Windows setting while antimicro is running. Disabling "Enhanced Pointer Precision" will allow mouse movement within antimicro to be more @@ -3626,32 +3651,27 @@ precise. - + Disable Enhance Pointer Precision - + Smoothing - - Histor&y Size: - - - - + Weight &Modifier: - + Refresh Rate: - + The refresh rate is the amount of time that will elapse in between mouse events. Please be cautious when editing this setting as it will cause the program to use @@ -3661,46 +3681,46 @@ it unattended. - + Spring Pular - + Screen: - + Utilize the specified screen for spring mode. On Linux, the default is to use the primary screen. On Windows, the default is to use all available screens. - + Accel Numerator: - - - + + + 0 0 - + Accel Denominator: - + Accel Threshold: - + If the acceleration values for the virtual mouse have been changed by a different process, particularly when quitting an older game, then you might want to reset the acceleration @@ -3708,164 +3728,169 @@ values used by the virtual mouse. - + Reset Acceleration - + Delay: Atrasar: - - Profi&le Directory: - - - - + ms - + Rate: Taxa: - + times/s - + Below is a list of the custom mappings that have been saved. You can use the following table to delete mappings or have mappings temporarily disabled. You can also disable mappings that are included with SDL; just insert a new row with the appropriate joystick GUID and check disable. Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. - + GUID - + Mapping String - + Disable? - - + + Delete Deletar - + Insert Inserir - - + + Default - + English - - + + Active - + Devices: - - + + All - + Device - + Profile - + Default? - + Add - + Edit - + Also, Windows users who want to use a low value should also check the "Disable Enhance Pointer Precision" checkbox if you haven't disabled the option in Windows. - + Select Default Profile Directory - + Are you sure you want to delete the profile? - + Save Log File As - + Log Files (*.log) + + + Do you really want to reset setting? + + + + + Would you like to reset mappings too? + + MainWindow - + No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu Nenhum joystick foi encontrados. Por favor, conecte um joystick e, em seguida, escolha a opção "Atualizar Joysticks" no menu principal - + If events are not seen by a game, please click here to run this application as Administrator. - + &App @@ -3874,110 +3899,110 @@ the option in Windows. Atribuir Analógico/Dpad - + &Options &Opções - + antimicro - + &Help &Ajuda - - + + &Quit &Sair - + Ctrl+Q Ctrl+Q - - + + &Update Joysticks &Atualizar joysticks - + Ctrl+U Ctrl+U - - + + &Hide &Esconder - + Ctrl+H Ctrl+H - + &About &Sobre - + Ctrl+A Ctrl+A - + About &Qt - + &Properties - + &Key Checker - + &GitHub Page - + &Game Controller Mapping - + S&ettings - + &Stick/Pad Assign - + &Wiki - + &Issues - + &Calibration @@ -3986,71 +4011,71 @@ the option in Windows. Sobre Qt - + Home Page - + Could not find a proper controller identifier. Exiting. - - - - - - - + + + + + + + (%1) - - + + Open File Abrir Arquivo - + &Restore &Restaurar - + Calibration couldn't be opened - + You must connect at least one controller to open the window - + Run as Administrator? - + Are you sure that you want to run this program as Adminstrator? Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. - + Failed to elevate program - + Failed to restart this program as the Administrator - + Could not find controller. Exiting. @@ -4058,12 +4083,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseAxisSettingsDialog - + Mouse Settings - Configuração do Mouse - + Set %1 @@ -4071,12 +4096,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseButtonSettingsDialog - + Mouse Settings - Configuração do Mouse - + Set %1 @@ -4084,12 +4109,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseControlStickSettingsDialog - + Mouse Settings - + Set %1 @@ -4097,12 +4122,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseDPadSettingsDialog - + Mouse Settings - + Set %1 @@ -4110,17 +4135,17 @@ Some games run as Administrator which will cause events generated by antimicro t MouseSettingsDialog - + Mouse Settings Configuração do Mouse - + Mouse Mode: Modo do Mouse: - + Cursor mode is used to move the mouse cursor around the screen relative to its current position depending on how much you move an axis @@ -4134,79 +4159,79 @@ axis is moved back to the dead zone. - + Cursor Cursor - + Spring Pular - + Acceleration: Aceleração: - + Enhanced Precision - - + + Linear Linear - + Quadratic Quadrático - + Cubic Cúbico - + Quadratic Extreme Extremo Quadrático - + Power Function Função Pwer - + Easing Quadratic - + Easing Cubic - + Mouse Speed Settings Configuração da velocidade do Mouse - + Enable to change the horizontal and vertical speed boxes at the same time. - + Change Together Alterar Junto - + Options for adding more acceleration to the mouse movement beyond what the acceleration curve would produce. Acceleration is added based on how quickly an axis is @@ -4216,17 +4241,17 @@ using typical gamepad analog sticks. - + Delta Acceleration - + &Multiplier: - + Mi&n Threshold: @@ -4237,8 +4262,8 @@ Speed: Velocidade Horizontal: - - + + 1 = 20 pps 1 = 20 pps @@ -4248,30 +4273,30 @@ Speed: Velocidade Vertical: - + Wheel Hori. Speed: - + Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. - + Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. - + Sensitivit&y: - + For Power Function acceleration curve. Specifies the factor to use for curve sensitivity. When the value is above 1.0, the mouse movement will be accelerated @@ -4279,122 +4304,122 @@ faster at the low end of an axis. - + Easing Duration: - - + + s - + Highest value to accelerate mouse movement by - + x x - + Start %: - + Acceleration begins at this percentage of the base multiplier - + Minimum amount of axis travel required for acceleration to begin - + Max Threshold: - + Maximum axis travel before acceleration has reached the multiplier value - + E&xtra Duration: - + Curve: - + Ease Out Sine - + Ease Out Quad - + Ease Out Cubic - + Release Radius: - + Specifies that the spring area will be relative to the mouse position set by a non-relative spring. - + Relative - + Mouse Status - + X: X: - - + + 0 (0 pps) - + Y: Y: - - + + 1 = 1 notch(es)/s - + Enhanced: Three tier curve that makes the mouse move slow on the low end of an axis and fast on the high end. @@ -4416,19 +4441,19 @@ a period of time using a Cubic curve. - + Hori&zontal Speed: - + &Vertical Speed: - + Wheel Vert. Speed: @@ -4438,59 +4463,59 @@ Speed: Sensibilidade: - + Specifies the amount of time (in seconds) that will be required before the mouse is fully accelerated after reaching the high end of an axis. - - - - + + + + % - + Extend the time that extra acceleration is applied. Axis travel will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. - + Spring Settings Configuração do Pulo - + Spring Width: Pulo de Largura: - + Changes the width of the region that the cursor can move in spring mode. 0 will use the entire width of your screen. - + Spring Height: Pulo de Altura: - + Changes the height of the region that the cursor can move in spring mode. 0 will use the entire height of your screen. - - + + %n notch(es)/s @@ -4501,39 +4526,39 @@ of your screen. QKeyDisplayDialog - + Key Checker - - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - + Event Handler: - + Native Key Value: - - - + + + 0x00000000 - + Qt Key Value: - + antimicro Key Value: @@ -4541,265 +4566,265 @@ of your screen. QObject - + Super - + Menu Menu - + Mute - + Vol+ - + Vol- - + Play/Pause - + Play - + Pause Pausar - + Prev - + Next Next - + Mail - + Home Home - + Media - + Search - + Daemon launched - + Failed to launch daemon - + Launching daemon - - + + Display string "%1" is not valid. - + Failed to set a signature id for the daemon - + Failed to change working directory to / - + Quitting Program - + # of joysticks found: %1 - + List Joysticks: - + --------------- - + Joystick %1: - + Index: %1 - + GUID: %1 - + Name: %1 - + Yes - + No - + Game Controller: %1 - + # of Axes: %1 - + # of Buttons: %1 - + # of Hats: %1 - + Attempting to use fallback option %1 for event generation. - + Failed to open event generator. Exiting. - + Using %1 as the event generator. - + Could not raise process priority. - + Last button - + There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? - + Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". - + Profile location %1 is not an XML file. A localização do perfil %1 não é um arquivo XML. - + Profile location %1 does not exist. A localização do perfil %1 não existe. - - - + + + Controller identifier is not a valid value. - + An invalid set number '%1' was specified. - + Controller identifier '%s'' is not a valid value. - + No set number was specified. - + No controller was specified. - + No display string was specified. - + An invalid event generator was specified. - + No event generator string was specified. - + No log file specified. @@ -4824,22 +4849,22 @@ of your screen. Lançar programa com o menu da bandeja desativado. - + Logging started - + Auto-switching to profile "%1". - + Auto-switching to nullptr profile! - + xinput version must be at least 2.0. No mouse acceleration changes will occur. @@ -4847,18 +4872,18 @@ of your screen. QuickSetDialog - + Quick Set Definir rápido - + <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> - - + + Quick Set %1 @@ -4866,12 +4891,12 @@ of your screen. SetAxisThrottleDialog - + Throttle Change Suprimir Rápido - + The throttle setting for Axis %1 has been changed. Would you like to distribute this throttle change to all sets? @@ -4881,12 +4906,12 @@ Would you like to distribute this throttle change to all sets? SetJoystick - + Set %1: %2 - + Set %1 @@ -4894,52 +4919,52 @@ Would you like to distribute this throttle change to all sets? SetNamesDialog - + Set Name Settings - + Set 1 - + Set 2 - + Set 3 - + Set 4 - + Set 5 - + Set 6 - + Set 7 - + Set 8 - + Name @@ -4947,7 +4972,7 @@ Would you like to distribute this throttle change to all sets? SimpleKeyGrabberButton - + Mouse Mouse @@ -4955,7 +4980,7 @@ Would you like to distribute this throttle change to all sets? SpringModeRegionPreview - + Spring Mode Preview @@ -4963,20 +4988,20 @@ Would you like to distribute this throttle change to all sets? UInputEventHandler - + Could not find a valid uinput device file. Please check that you have the uinput module loaded. lsmod | grep uinput - + Could not open uinput device file Please check that you have permission to write to the device - + Using uinput device file %1 @@ -4984,551 +5009,551 @@ Please check that you have permission to write to the device UInputHelper - + a a - + b b - + c c - + d d - + e e - + f f - + g g - + h h - + i i - + j j - + k k - + l l - + m m - + n n - + o o - + p p - + q q - + r r - + s s - + t t - + u u - + v v - + w w - + x x - + y y - + z z - + Esc - + F1 F1 - + F2 F2 - + F3 F3 - + F4 F4 - + F5 F5 - + F6 F6 - + F7 F7 - + F8 F8 - + F9 F9 - + F10 F10 - + F11 F11 - + F12 F12 - + ` ` - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - - + + - - - + = = - + BackSpace BackSpace - + Tab Tab - + [ [ - + ] ] - + \ \ - + CapsLock - + ; ; - + ' ' - + Enter - + Shift_L Shift_L - + , , - - + + . . - - + + / / - + Ctrl_L - - + + Super_L Super_L - + Alt_L Alt_L - + Space Espaço - + Alt_R Alt_R - + Menu Menu - + Ctrl_R - + Shift_R Shift_R - + Up Cima - + Left Esquerda - + Down Baixo - + Right Direita - + PrtSc - + Ins - + Del - + Home Home - + End End - + PgUp - + PgDn - + NumLock - + * * - + + + - + KP_Enter KP_Enter - + KP_1 KP_1 - + KP_2 KP_2 - + KP_3 KP_3 - + KP_4 KP_4 - + KP_5 KP_5 - + KP_6 KP_6 - + KP_7 KP_7 - + KP_8 KP_8 - + KP_9 KP_9 - + KP_0 KP_0 - + SCLK SCLK - + Pause Pausar - + Super_R - + Mute - + VolDn - + VolUp - + Play - + Stop - + Prev - + Next Next - + [NO KEY] [SEM TECLA] @@ -5536,54 +5561,54 @@ Please check that you have permission to write to the device UnixWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: - - - + + + TextLabel - + Title: - + Path: - + Match By Properties - + Class - + Title - + Path @@ -5591,9 +5616,9 @@ Please check that you have permission to write to the device VDPad - - - + + + VDPad VDPad @@ -5601,223 +5626,223 @@ Please check that you have permission to write to the device VirtualKeyPushButton - + Space Espaço - + Tab Tab - + Shift (L) Shift (L) - + Shift (R) Shift (R) - + Ctrl (L) Ctrl (L) - + Ctrl (R) Ctrl (R) - + Alt (L) Alt (L) - - + + Alt (R) Alt (R) - + Alt Gr - + ` ` - + ~ ~ - - + + - - - + = = - + [ [ - + ] ] - + \ \ - + Caps Caps - + ; ; - + ' ' - + , , - - + + . . - - + + / / - + ESC ESC - + PRTSC PRTSC - + SCLK SCLK - + INS INS - + PGUP PGUP - + DEL DEL - + PGDN PGDN - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - + NUM LK NUM LK - - + + * * - + + + - + Enter @@ -5830,42 +5855,42 @@ R E N T E R - + < < - + : : - + Super (L) - + Menu Menu - + Up Cima - + Down Baixo - + Left Esquerda - + Right Direita @@ -5873,226 +5898,226 @@ R VirtualKeyboardMouseWidget - - + + Keyboard Teclado - - + + Mouse Mouse - + Mouse Settings Configurações do Mouse - + Left Mouse Esquerda - + Up Mouse Cima - + Left Button Mouse - + Middle Button Mouse - + Right Button Mouse - + Wheel Up Mouse Roda pra Cima - + Wheel Left Mouse Roda pra Esquerda - + Wheel Right Mouse Roda pra Direita - + Wheel Down Mouse Roda pra Baixo - + Down Mouse Baixo - + Right Mouse Direita - + Button 4 Mouse - + Mouse 8 Mouse - + Button 5 Mouse - + Mouse 9 Mouse - + NONE NADA - - + + Last button - - + + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + Others - + Applications - + Browser Back - + Browser Favorites - + Browser Forward - + Browser Home - + Browser Refresh - + Browser Search - + Browser Stop - + Calc - + Email - + Media - + Media Next - + Media Play - + Media Previous - + Media Stop - + Search - + Volume Down - + Volume Mute - + Volume Up @@ -6100,7 +6125,7 @@ R VirtualMousePushButton - + INVALID INVÁLIDO @@ -6108,28 +6133,28 @@ R WinAppProfileTimerDialog - - + + Capture Application - + After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. - + Timer: - + Seconds - + Cancel @@ -6137,12 +6162,12 @@ R WinExtras - + [NO KEY] [SEM TECLA] - + AntiMicro Profile @@ -6150,67 +6175,62 @@ R X11Extras - + ESC ESC - + Tab Tab - + Space Espaço - + DEL DEL - + Return - + KP_Enter KP_Enter - + Backspace Retrocesso - + Alt Gr - + xinput extension was not found. No mouse acceleration changes will occur. - + xinput version must be at least 2.0. No mouse acceleration changes will occur. - - Virtual pointer found with id=%1. - - - - + PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 - + Changing mouse acceleration for device with id=%1 @@ -6218,7 +6238,7 @@ R XMLConfigReader - + Could not write updated profile XML to file %1. @@ -6226,7 +6246,7 @@ R XMLConfigWriter - + Could not write to profile at %1. @@ -6234,7 +6254,7 @@ R antimicro - + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. @@ -6242,97 +6262,97 @@ R main - + Launch program in system tray only. Lançar programa na bandeja do sistema. - + Launch program with the tray menu disabled - + Launch program without the main window displayed - + Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers - + location - + Apply configuration file to a specific controller. Value can be a controller index, name, or GUID - + value - + Unload currently enabled profile(s) - + value(s) - + Start joysticks on a specific set. Value can be a controller index, name, or GUID - + number value - + Launch program as a daemon. Use only on Linux. - + Enable logging - + log-type - + Choose a file for logs writing - + filename - + Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. - + event-generation-type - + Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. diff --git a/share/antimicro/translations/antimicro_de.ts b/share/antimicro/translations/antimicro_de.ts old mode 100644 new mode 100755 index 68f617f60..4515ea6cd --- a/share/antimicro/translations/antimicro_de.ts +++ b/share/antimicro/translations/antimicro_de.ts @@ -4,17 +4,17 @@ AboutDialog - + About Über - + Version Version - + "juliagoda" (since March, 2018) Wanting only to play my favourite old games that din't support gamepads, I found this project (which map keyboard keys and mouse buttons to connected gamepads on Linux) as most proper and recent. But because of poor choices of such application on the internet and since it didn't compile properly, I decided to rescue the project. However, once I finished my work (enough to enjoy playing games) I thought about sharing this code with others. Of course all informations about past programmers will be held. "Ryochan7" (since December 30, 2012 until 2017), I have been working on antimicro in my spare time. What originally started as a fork of QJoyPad and a way to learn proper event-driven programming has turned into something much bigger than I originally intended. Although I have spent a lot of time learning new techniques, finding out more about the domain of KB+M emulation, and spending Friday nights bashing my head against my keyboard, it has been a fun and enriching experience overall. @@ -32,17 +32,17 @@ As of May 24, 2016, this project has moved to https://github.com/AntiMicro/antim - + Copyright: 2013 - 2018 - + Info - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -86,7 +86,7 @@ p, li { white-space: pre-wrap; } - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -204,57 +204,57 @@ p, li { white-space: pre-wrap; } - + Changelog - + Credits Mitwirkende - + antimicro - + About Development Über die Entwicklung - + License Lizenz - + Program Version %1 Programmversion %1 - + Program Compiled on %1 at %2 Programm kompiliert am %1 um %2 - + Built Against SDL %1 Nutzt SDL %1 - + Running With SDL %1 Läuft mit SDL %1 - + Using Qt %1 Benutzt Qt %1 - + Using Event Handler: %1 @@ -262,29 +262,29 @@ p, li { white-space: pre-wrap; } AddEditAutoProfileDialog - + Auto Profile Dialog Auto-Profil-Dialog - + Profile: Profil: - - + + Browse Durchsuchen - + Window: Fenster: - - + + Select Window. Click on the appropriate application window and the application file path will be populated in the form. @@ -293,122 +293,131 @@ Anwendungs-Fenster und der Anwendungs-Dateipfad wird in das Formular eingetragen. - + Detect Window Properties Erkenne Fenstereigenschaften - + Class: Klasse: - + Title: Titel: - + + set partial title + + + + Application: Anwendung: - + Select Wähle - + + De&vices: + + + Devices: - Geräte: + Geräte: - - + + Select this profile to be the default loaded for the specified device. The selection will be used instead of the all default profile option. Wählen Sie dieses Profil als Standard für das jeweilige Gerät. Diese Auswahl wird anstatt jeder anderen Standardeinstellung genutzt. - + Set as Default for Controller Setze als Standardcontroller - - + + A different profile is already selected as the default for this device. Ein anderes Profil ist bereits als Standard für dieses Gerät ausgewählt. - + Current (%1) Aktuell (%1) - + Open Config Konfiguration öffnen - - + + Select Program Wähle Anwendung - + Programs (*.exe) Programme (*.exe) - + Please use the main default profile selection. Bitte benutzen Sie die Standard-Profilauswahl. - + Please select a window by using the mouse. Press Escape if you want to cancel. Bitte wählen Sie mit der Maus ein Fenster aus. Escape drücken um abzubrechen. - + Capture Application Window Anwendungsfenster auswählen - + Could not obtain information for the selected window. Konnte nicht Information für das ausgewählte Fenster gewinnen. - + Application Capture Failed Anwendungsauswahl fehlgeschlagen - + Profile file path is invalid. Profil-Dateipfad ist ungültig. - + No window matching property was specified. Kein zugehöriges Fenster wurde spezifiziert. - + Program path is invalid or not executable. Programmpfad ist ungültig oder nicht ausführbar. - + File is not an .exe file. Datei ist keine .exe-Datei. - + No window matching property was selected. Kein zugehöriges Fenster wurde ausgewählt. @@ -416,187 +425,187 @@ of the all default profile option. AdvanceButtonDialog - - + + Advanced Erweitert - + Assignments Zuweisungen - + Toggle Umschalten - + Turbo Turbo - + Set Selector Wähle Set - + Blank or KB/M Leer oder KB/M - + Hold Halten - + Pause Pause - + Cycle Kreislauf - + Distance Distanz - + Insert Einfügen - + Delete Entfernen - + Clear All Leeren - + Time: Zeit: - + 0.01s 0.01s - + 0s 0s - + Insert a pause that occurs in between key presses. Fügt eine Pause zwischen den Tasten ein. - + Release Freigeben - - + + Insert a new blank slot. Fügt eine neue leere Aktion hinzu. - + Delete a slot. Löscht eine Aktion. - + Clear all currently assigned slots. Löscht alle zugewiesenen Aktionen. - + Specify the duration of an inserted Pause or Hold slot. Gibt die Dauer der hinzugefügten Pause- oder Haltenaktion an. - + 0m 0m - + &Mouse Speed Mod: - - + + Specify the range past an axis dead zone in which a sequence of actions will execute. Gibt die Distanz der Achse zur "Dead Zone" an, in der die Sequenz an Aktionen ausgeführt wird. - + Distance: Distanz: - - + + % % - + Mouse Mod Maus Mod - + Press Time Druckzeit - + Delay Verzögerung - + Execute - + Load Laden - + Set Change Wähle Änderung - + Text Entry - + Placeholder Platzhalter - - + + 0 0 @@ -605,317 +614,317 @@ of the all default profile option. Maus Mod Geschwindigkeit: - + Set the percentage that mouse speeds will be modified by. Stellen Sie den Prozentsatz ein um der die Mausgeschwindigkeit modifiziert werden soll. - + Auto Reset Cycle After Zyklus automatisch neustarten nach - + seconds Sekunden - + Executable: - + ... - + Arguments: - - - + + + Enabled Aktiviert - + Mode: Modus: - + <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> <html><head/><body><p>Normal: Wiederholt mit der eingestellten Rate Taste drücken und loslassen.</p><p>Verlaufend: Ändere die Auslösen-/Loslassen-Verzögerung aufgrund wie weit die eine Achse bewegt wurde.</p><p>Pulsierend: Ändere wie häufig eine Taste pro Sekunde ausgelöst wurde. Die Verögerung bleibt gleich.</p></body></html> - + Normal Normal - + Gradient Verlaufend - + Pulse Pulsierend - + Delay: Verzögerung: - + 0.10s 0.10s - + Rate: Rate: - + 10.0/s 10.0/s - - + + Disabled Deaktiviert - + Select Set 1 One Way Wähle Set 1: einseitig - + Select Set 1 Two Way Wähle Set 1: wechselseitig - + Select Set 1 While Held Wähle Set 1: festgehalten - + Select Set 2 One Way Wähle Set 2: einseitig - + Select Set 2 Two Way Wähle Set 2: wechselseitig - + Select Set 2 While Held Wähle Set 2: festgehalten - + Select Set 3 One Way Wähle Set 3: einseitig - + Select Set 3 Two Way Wähle Set 3: wechselseitig - + Select Set 3 While Held Wähle Set 3: festgehalten - + Select Set 4 One Way Wähle Set 4: einseitig - + Select Set 4 Two Way Wähle Set 4: wechselseitig - + Select Set 4 While Held Wähle Set 4: festgehalten - + Select Set 5 One Way Wähle Set 5: einseitig - + Select Set 5 Two Way Wähle Set 5: wechselseitig - + Select Set 5 While Held Wähle Set 5: festgehalten - + Select Set 6 One Way Wähle Set 6: einseitig - + Select Set 6 Two Way Wähle Set 6: wechselseitig - + Select Set 6 While Held Wähle Set 6: festgehalten - + Select Set 7 One Way Wähle Set 7: einseitig - + Select Set 7 Two Way Wähle Set 7: wechselseitig - + Select Set 7 While Held Wähle Set 7: festgehalten - + Select Set 8 One Way Wähle Set 8: einseitig - + Select Set 8 Two Way Wähle Set 8: wechselseitig - + Select Set 8 While Held Wähle Set 8: festgehalten - + sec. Sek. - + /sec. /Sek. - + Set %1 Set %1 - - + + Select Set %1 Wähle Set %1 - + One Way Einweg - + Two Way Zweiwege - + While Held Solang wie gehalten - + Choose Executable - + Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. - + Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. - + Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. - + Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. - + Chose a profile to load when this slot is activated. Wähle ein Profil zum Laden wenn dieser Slot aktiviert ist. - + Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. - + Specify the time that keys past this slot should be held down. - + Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. - + Change to selected set once slot is activated. Wechsle zu ausgewähltem Set wenn Slot aktiviert ist. - + Full string will be typed when a slot is activated. - + Execute program when slot is activated. - - + + Choose Profile Wähle Profil - + Config Files (*.amgp *.xml) Konfigurationsdateien (*.amgp *.xml) @@ -923,157 +932,157 @@ of the all default profile option. AdvanceStickAssignmentDialog - + Stick/Pad Assignment Stick/Pad Zuweisung - + Sticks Sticks - + DPads DPads - - + + %1 (Joystick %2) %1 (Joystick %2) - + Stick 1 Stick 1 - - - + + + Enabled Aktiviert - - - - - - + + + + + + Assign Zuweisen - - + + X Axis: X Achse: - - + + Y Axis: Y Achse: - + Stick 2 Stick 2 - + Number of Physical DPads: %1 Nummer der physischen DPads: %1 - + Virtual DPad 1 Virtueller DPad 1 - + Up: Hoch: - + Down: Runter: - + Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. Hinweis: Dieses Fenster ist nur zur Rückwärtskompatibilität zu Profilen für antimicro vor 2.0 gedacht. Seit Version 2.0 wird das Spielecontroller-Zuweisungsfenster bevorzugt. - + Left: Links: - + Right: Rechts: - - - - + + + + Axis %1 Achse %1 - - - - + + + + Axis %1 - Achse %1 - - - - - + + + + Axis %1 + Achse %1 + - - - - + + + + Button %1 Button %1 - + Move stick 1 along the X axis Bewege Stick 1 entlang der X Achse - + Move stick 1 along the Y axis Bewege Stick 1 entlang der Y Achse - + Move stick 2 along the X axis Bewege Stick 2 entlang der X Achse - + Move stick 2 along the Y axis Bewege Stick 2 entlang der Y Achse - - - - + + + + Press a button or move an axis Drücke einen Button oder bewege eine Achse @@ -1081,181 +1090,181 @@ of the all default profile option. AxisEditDialog - + Axis Achse - - + + Mouse (Horizontal) Maus (Horizontal) - - + + Mouse (Inverted Horizontal) Maus (Invertiert Horizontal) - - + + Mouse (Vertical) Maus (Vertikal) - - + + Mouse (Inverted Vertical) Maus (Invertiert Vertikal) - - + + Arrows: Up | Down Pfeiltasten: Hoch | Runter - - + + Arrows: Left | Right Pfeiltasten: Links | Rechts - - + + Keys: W | S Tasten: W | S - - + + Keys: A | D Tasten: A | D - - + + NumPad: KP_8 | KP_2 Nummernblock: KP_8 | KP_2 - - + + NumPad: KP_4 | KP_6 Nummernblock: KP_4 | KP_6 - - - + + + None Nichts - - + + Set the value to use as the limit for an axis. Useful for a worn out analog stick. Setze einen Wert als Limitierung einer Achse. Nützlich bei abgenutzten Analogsticks. - + Negative Half Throttle Negative Halbbeschleunigung - + Positive Half Throttle Positive Halbbeschleunigung - + Name: Name: - + Specify the name of an axis. Vergebe den Namen der Achse. - + Mouse Settings Mauseinstellungen - - + + Set the value of the dead zone for an axis. Bestimmt den Wert der Dead Zone einer Achse. - + Presets: Vorgaben: - + Dead Zone: Dead Zone: - + Max Zone: Max Zone: - - + + [NO KEY] [KEINE TASTE] - + Throttle setting that determines the behavior of how to interpret an axis hold or release. Beschleunigung gibt das Verhalten an wie das Halten oder Loslassen einer Achse interpretiert wird. - + Negative Throttle Negative Beschleunigung - + Normal Normal - + Positive Throttle Positive Beschleunigung - + Current Value: Aktueller Wert: - + Set Set - + Set %1 Set %1 - + Left Mouse Button Linke Maustaste - + Right Mouse Button Rechte Maustaste @@ -1263,37 +1272,37 @@ oder Loslassen einer Achse interpretiert wird. ButtonEditDialog - + Dialog Dialog - + To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab Um eine neue Zuweisung zu machen, drück eine Taste oder klick einen Button im Tastatur oder Mausreiter - + Placeholder Platzhalter - + Toggle Umschalten - + Enables a key press or release to only occur when a controller button is pressed. Tasten werden erst, wenn der Button gedrückt wurde entweder festgehalten oder frei gelassen. - + Enables rapid key presses and releases. Turbo controller. Aktiviert schnelles Tastendrücken oder Freigeben. Autofeuer. - + Turbo Turbo @@ -1302,38 +1311,38 @@ oder Loslassen einer Achse interpretiert wird. Aktuell: - + Last keyboard/mouse button: - + Slots Slots - + Na&me: - Name: + Na&me: - + Specify the name of a button. Vergebe den Namen des Buttons. - + Action: Aktion: - + Specify the action that will be performed in game while this button is being used. Gibt die Aktion des Buttons an, die Ingame genutzt wird. - + Advanced Advanced @@ -1346,52 +1355,52 @@ this button is being used. Set %1 - - - + + + Choose your keyboard key - + No button - - - - + + + + Last button - + To change settings for last button, it must be at least one assignment from keyboard to gamepad - + To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad - + To open advanced dialog, it's needed to map at least one button from keyboard to gamepad - + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + As last gamepad button has been set - + Index %1 @@ -1399,190 +1408,190 @@ this button is being used. Calibration - + Form - - + + Start calibration - + Controller: - + Sticks: - - Use settings from jstest-gtk - - - - + Reset settings - + Cancel Abbrechen - - + + Save Speichern - - + + Calibration - - Do you really want to reset settings of current axes? + + Do you really want to reset settings of current axis? - + Calibration was saved for the preset. Do you really want to reset settings? - + Place the joystick in the center position. It's the part, where often you don't have to move. Just skip it in such situation. - + Calibrating center - + Start second step - + Center X: %1 - + Center Y: %1 - + Place the joystick in the top-left corner many times - - + + Calibrating position - - + + X: %1 - - + + Y: %1 - + Place the joystick in the bottom-right corner - + Start final step - + range X: %1 - %2 - + range Y: %1 - %2 - + deadzone X: %1 - + deadzone Y: %1 - + ---Calibration done!--- - + Calibration values have been saved - - + + Dead zone calibration - - You must move X axis to the right at least five times! Keep moving! + + You have to move axes to the top-left corner at least five times. - - You must move X axis to the left at least five times! Keep moving! + + You have to move axes to the bottom-right corner at least five times. - - - - + + Do you want to save calibration of current axis? + + + + + + + Axis %1 Achse %1 @@ -1590,64 +1599,64 @@ deadzone Y: %1 CapturedWindowInfoDialog - + Captured Window Properties Erkannte Fenstereigenschaften - + Information About Window Fensterinformationen - + Class: Klasse: - - - + + + TextLabel - + Title: Titel: - + Path: Pfad: - + Match By Properties - + Class Klasse - + Title Titel - + Path Pfad - + Full Path vollständiger Pfad - + File Name Dateinmae @@ -1794,67 +1803,67 @@ deadzone Y: %1 DPadContextMenu - + Mouse (Normal) Maus (Normal) - + Mouse (Inverted Horizontal) Maus (Invertiert Horizontal) - + Mouse (Inverted Vertical) Maus (Invertiert Vertikal) - + Mouse (Inverted Horizontal + Vertical) Maus (Invertiert Horizontal + Vertikal) - + Arrows Pfeiltasten - + Keys: W | A | S | D Tasten: W | A | S | D - + NumPad Nummerntastatur - + None Nichts - + Standard Standard - + Eight Way 8-Weg - + 4 Way Cardinal 4-Wege kardinal - + 4 Way Diagonal 4-Wege diagonal - + Mouse Settings Mauseinstellungen @@ -1862,108 +1871,108 @@ deadzone Y: %1 DPadEditDialog - + Dialog Dialog - + Presets: Vorgaben: - + Mouse (Normal) Maus (Normal) - + Mouse (Inverted Horizontal) Maus (Invertiert Horizontal) - + Mouse (Inverted Vertical) Maus (Invertiert Vertikal) - + Mouse (Inverted Horizontal + Vertical) Maus (Invertiert Horizontal + Vertikal) - + Arrows Pfeiltasten - + Keys: W | A | S | D Tasten: W | A | S | D - + NumPad Nummerntastatur - + None Nichts - + Dpad Mode: DPad Modus: - + &Name: - + 4 Way Cardinal 4-Wege kardinal - + 4 Way Diagonal 4-Wege diagonal - + DPad Delay: DPad-Verzögerung: - - + + Time lapsed before a direction change is taken into effect. Zeit abgelaufen bevor eine Richtungsänderung vollzogen wird. - + s - + Specify the name of a dpad. Vergebe den Namen des DPads. - + Mouse Settings Mauseinstellungen - + Standard Standard - + Standard: 8 region dpad with two direction buttons active when the dpad is in a diagonal region. @@ -1979,17 +1988,17 @@ to a diagonal zone. - + Eight Way 8-Wege - + Set Set - + Set %1 Set %1 @@ -1997,27 +2006,27 @@ to a diagonal zone. EditAllDefaultAutoProfileDialog - + Default Profile Standardprofil - + Profile: Profil: - + Browse Durchsuchen - + Open Config Konfiguration öffnen - + Profile file path is invalid. Profil-Dateipfad ist ungültig. @@ -2025,29 +2034,29 @@ to a diagonal zone. ExtraProfileSettingsDialog - + Extra Profile Settings Weitere Profileinstellungen - + Key Press Time: Tastendruckzeit: - + 0.00 ms 0.00 ms - + Profile Name: Profilname: - - - + + + s s @@ -2055,7 +2064,7 @@ to a diagonal zone. GameController - + Game Controller Gamecontroller @@ -2063,9 +2072,9 @@ to a diagonal zone. GameControllerDPad - - - + + + DPad DPad @@ -2073,187 +2082,187 @@ to a diagonal zone. GameControllerMappingDialog - + Game Controller Mapping Game Controller Zuweisung - + <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> - + A A - + B B - + X X - + Y Y - + Back Zurück - + Start Start - + Guide Guide - + Left Shoulder linker Schulterbutton - + Right Shoulder rechter Schulterbutton - + Left Stick Click linker Stick Klick - + Right Stick Click rechter Stick Klick - + Left Stick X linker Stick X - + Left Stick Y linker Stick Y - + Right Stick X rechter Stick X - + Right Stick Y rechter Stick Y - + Left Trigger linker Trigger - + Right Trigger rechter Trigger - + DPad Up DPad Hoch - + DPad Left DPad Links - + DPad Down DPad Runter - + DPad Right DPad Rechts - + Mapping Zuweisung - + SDL 2 Game Controller Mapping String SDL 2 Game Controller Zuweisungsstring - + Last Axis Event: Letztes Achsenereignis: - + Current Axis Detection Dead Zone: Aktuelle Achsenerkennungs Totzone: - + 5000 5000 - + 10000 10000 - + 15000 15000 - + 20000 20000 - + 25000 25000 - + 30000 30000 - + 32000 32000 - + Game Controller Mapping (%1) (#%2) Spielecontroller Zuweisung (%1) (#%2) - + Discard Controller Mapping? Controller Zuweisung verwerfen? - + Discard mapping for this controller? If discarded, the controller will be reverted to a joystick once you refresh all joysticks. @@ -2266,47 +2275,47 @@ Joysticks aktualisiert werden. GameControllerSet - + Back Zurück - + Guide Handbuch - + Start Start - + LS Click LS Klick - + RS Click RS Klick - + L Shoulder L Schulter - + R Shoulder R Schulter - + L Trigger L Trigger - + R Trigger R Trigger @@ -2314,9 +2323,9 @@ Joysticks aktualisiert werden. GameControllerTrigger - - - + + + Trigger Trigger @@ -2324,9 +2333,9 @@ Joysticks aktualisiert werden. JoyAxis - - - + + + Axis Achse @@ -2334,24 +2343,24 @@ Joysticks aktualisiert werden. JoyAxisButton - + Negative Negativ - + Positive Positiv - + Unknown Unbekannt - - - + + + Button Button @@ -2359,74 +2368,74 @@ Joysticks aktualisiert werden. JoyAxisContextMenu - + Mouse (Horizontal) Maus (Horizontal) - + Mouse (Inverted Horizontal) Maus (Invertiert Horizontal) - + Mouse (Vertical) Maus (Vertikal) - + Mouse (Inverted Vertical) Maus (Invertiert Vertikal) - + Arrows: Up | Down Pfeiltasten: Hoch | Runter - + Arrows: Left | Right Pfeiltasten: Links | Rechts - + Keys: W | S Tasten: W | S - + Keys: A | D Tasten: A | D - + NumPad: KP_8 | KP_2 Nummernblock: KP_8 | KP_2 - + NumPad: KP_4 | KP_6 Nummernblock: KP_4 | KP_6 - - + + None Nichts - - + + Mouse Settings Mauseinstellungen - + Left Mouse Button Linke Maustaste - + Right Mouse Button Rechte Maustaste @@ -2434,57 +2443,57 @@ Joysticks aktualisiert werden. JoyButton - + Processing turbo for #%1 - %2 - + Finishing turbo for button #%1 - %2 - + Processing press for button #%1 - %2 - + Processing release for button #%1 - %2 - + Distance change for button #%1 - %2 - - - + + + Button Button - - - - + + + + [NO KEY] [KEINE TASTE] - + [Set %1 1W] - + [Set %1 2W] - + [Set %1 WH] @@ -2492,47 +2501,47 @@ Joysticks aktualisiert werden. JoyButtonContextMenu - + Toggle Umschalten - + Turbo Turbo - + Clear Leeren - + Set Select Set-Auswahl - + Disabled Deaktiviert - + Set %1 Set %1 - + Set %1 1W Set %1 1W - + Set %1 2W Set %1 2W - + Set %1 WH @@ -2540,118 +2549,118 @@ Joysticks aktualisiert werden. JoyButtonSlot - - + + Mouse Maus - + Up Hoch - + Down Runter - + Left Links - + Right Rechts - + LB LB - + MB MB - + RB RB - + B4 B4 - + B5 B5 - + Pause Pause - + Hold Halten - + Cycle Kreislauf - + Distance Distanz - + Release Freigeben - + Mouse Mod Maus Mod - + Press Time Druckzeit - + Delay Verzögerung - + Load %1 Lade %1 - + Set Change %1 - + [Text] %1 - + [Exec] %1 - + [NO KEY] [KEINE TASTE] @@ -2659,9 +2668,9 @@ Joysticks aktualisiert werden. JoyControlStick - - - + + + Stick Stick @@ -2669,37 +2678,37 @@ Joysticks aktualisiert werden. JoyControlStickButton - - - + + + Up Hoch - - - + + + Down Runter - - - + + + Left Links - - - + + + Right Rechts - - - + + + Button Button @@ -2707,67 +2716,67 @@ Joysticks aktualisiert werden. JoyControlStickContextMenu - + Mouse (Normal) Maus (Normal) - + Mouse (Inverted Horizontal) Maus (Invertiert Horizontal) - + Mouse (Inverted Vertical) Maus (Invertiert Vertikal) - + Mouse (Inverted Horizontal + Vertical) Maus (Invertiert Horizontal + Vertikal) - + Arrows Pfeiltasten - + Keys: W | A | S | D Tasten: W | A | S | D - + NumPad Nummerntastatur - + None Nichts - + Standard Standard - + Eight Way 8-Wege - + 4 Way Cardinal 4-Wege kardinal - + 4 Way Diagonal 4-Wege diagonal - + Mouse Settings Mauseinstellungen @@ -2775,86 +2784,86 @@ Joysticks aktualisiert werden. JoyControlStickEditDialog - + Dialog Dialog - + X: X: - - - - - + + + + + 0 0 - + Y: Y: - + Distance: Distanz: - + Presets: Vorgaben: - + Mouse (Normal) Maus (Normal) - + Mouse (Inverted Horizontal) Maus (Invertiert Horizontal) - + Mouse (Inverted Vertical) Maus (Invertiert Vertikal) - + Mouse (Inverted Horizontal + Vertical) Maus (Invertiert Horizontal + Vertikal) - + Arrows Pfeiltasten - + Keys: W | A | S | D Tasten: W | A | S | D - + NumPad Nummerntastatur - + None Nichts - + Stick Mode: Stickmodus: - + Standard: 8 region stick with two direction buttons active when the stick is in a diagonal region. @@ -2881,72 +2890,72 @@ Kardinal-/Himmelsrichtung des Sticks entspricht. Nützlich für Menüs. Diagonal-Zone des Sticks entspricht. - + 4 Way Cardinal 4-Wege kardinal - + 4 Way Diagonal 4-Wege diagonal - - + + Dead zone value to use for an analog stick. Totzonenwert für Analogsticks. - - + + Value when an analog stick is considered moved 100%. Wert für den ein Analogstick als 100% ausgelenkt betrachtet wird. - - + + The area (in degrees) that each diagonal region occupies. Den Bereich (in Grad) die jede diagonale Region einnimmt. - + Square Stick: - - + + Percentage to modify a square stick coordinates to confine values to a circle - + % % - + Stick Delay: Stick Verzögerung: - - + + Time lapsed before a direction change is taken into effect. Abgelaufene Zeit bis eine Richtungsänderung wirksam wird. - + s - + Modifier: Modifikator: - + Edit button that is active while the stick is active. This button is useful for assigning zones with @@ -2955,68 +2964,68 @@ functionality to an analog stick. - + PushButton - + Na&me: Name: - Name: + Na&me: - + Specify the name of an analog stick. Vergebe den Namen eines Analogsticks. - + Mouse Settings Mauseinstellungen - + Standard Standard - + Bearing: - + % Safe Zone: - + Eight Way 8-Wege - + Dead Zone: Dead Zone: - + Max Zone: Max Zone: - + Diagonal Range: diagonale Reichweite: - + Set Set - + Set %1 Set %1 @@ -3024,9 +3033,9 @@ functionality to an analog stick. JoyControlStickModifierButton - - - + + + Modifier Modifikator @@ -3034,9 +3043,9 @@ functionality to an analog stick. JoyDPad - - - + + + DPad DPad @@ -3044,37 +3053,37 @@ functionality to an analog stick. JoyDPadButton - - - + + + Up Hoch - - - + + + Down Runter - - - + + + Left Links - - - + + + Right Rechts - - - + + + Button Button @@ -3082,267 +3091,272 @@ functionality to an analog stick. JoyTabWidget - - - - - - + + + + + + <New> <Neu> - - + + Remove Entfernen - - + + Remove configuration from recent list. Entferne Konfiguration aus den letzten Einträgen. - - + + Load Laden - - + + Load configuration file. Lade Konfigurationsdatei. - - + + Save Speichern - - + + Save changes to configuration file. Änderungen in Konfigurationsdatei speichern. - - + + Save As Speichern unter - - + + Save changes to a new configuration file. Änderungen in neue Konfigurationsdatei speichern. - - + + Sets Sets - + Copy from Set - + Settings Einstellungen - - + + Set 1 Set 1 - - + + Set 2 Set 2 - - + + Set 3 Set 3 - - + + Set 4 Set 4 - - + + Set 5 Set 5 - - + + Set 6 Set 6 - - + + Set 7 Set 7 - - + + Set 8 Set 8 - - + + Stick/Pad Assign Stick/Pad Zuweisung - - + + Controller Mapping Controllerzuweisung - - + + Quick Set Schnellkonfiguration - - + + Names Namen - - + + Toggle button name displaying. Buttonnamendarstellung wechseln. - - + + Pref Einst - - + + Change global profile settings. Globale Profileinstellungen ändern. - - - + + + Reset Reset - - + + Revert changes to the configuration. Reload configuration file. Änderungen der Konfiguration zurücksetzen. Neuladen der Konfiguration. - + Open Config Konfiguration öffnen - + Config Files (*.amgp *.xml) Konfigurationsdateien (*.amgp *.xml) - - - + + + Config File (*.%1.amgp) Konfigurationsdatei (*.%1.amgp) - - + + Do you really want to reset buttons settings for joystick? + + + + + Save Profile Changes? Profiländerungen speichern? - - + + Changes to the new profile have not been saved. Would you like to save or discard the current profile? Änderungen am neuen Profil wurden nicht gespeichert. Möchten Sie das aktuelle Profil speichern oder verwerfen? - - + + Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? Änderungen am neuen Profil %1 wurden nicht gespeichert. Möchten Sie das aktuelle Profil speichern oder verwerfen? - + Sticks Sticks - - + + DPads DPads - + No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. Es wurden keine Tasten zugewiesen. Bitte verwenden Sie den Schnellkonfiguration um Tasten zuzuweisen oder deaktivieren Sie das Ausblenden leerer Tasten. - - + + Set %1: %2 Set %1: %2 - - + + Set %1 Set %1 - + Copy Set Assignments Kopiere Set-Zuweisungen - + Are you sure you want to copy the assignments and device properties from %1? Sind Sie sicher, dass Sie die Aufgaben-und Geräteeigenschaften von%1 kopieren möchten? - - - + + + Save Config Konfiguration speichern - - + + Set Set @@ -3350,7 +3364,7 @@ oder deaktivieren Sie das Ausblenden leerer Tasten. Joystick - + Joystick Joystick @@ -3358,98 +3372,98 @@ oder deaktivieren Sie das Ausblenden leerer Tasten. JoystickStatusWindow - + Properties Eigenschaften - + Details Details - + Name: Name: - - - - - - - + + + + + + + %1 %1 - + Number: Nummer: - + Axes: Achsen: - + Buttons: Buttons: - + Hats: Hats: - + GUID: GUID: - + Game Controller: Gamecontroller: - + Axes Achsen - + Buttons Buttons - + Hats Hats - + %1 (#%2) Properties %1 (#%2) Eigenschaften - + Axis %1 Achse %1 - + Hat %1 Hat %1 - + No Nein - + Yes Ja @@ -3457,62 +3471,67 @@ oder deaktivieren Sie das Ausblenden leerer Tasten. MainSettingsDialog - + Edit Settings Einstellungen ändern - + General Allgemein - + Controller Mappings Controllerzuweisungen - + Language Sprache - + Auto Profile Autoprofil - + Mouse Maus - + Advanced - + + Profile Direc&tory: + + + + <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> <html><head/><body><p>Geben Sie das Standardverzeichnis an, dass das Programm im Dateidialog verwenden soll beim Laden oder Speichern eines Profils.</p></body></html> - + Recent Profile Count: Einträge an Profilen merken: - + <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> <html><head/><body><p>Anzahl der Profile, die in den letzten Profilen-Liste platziert werden können. 0 = keine Begrenzung.</p></body></html> - + Gamepad Poll Rate: - + Change the poll rate that the program uses to discover new events from gamepads. Defaults to 10 ms. @@ -3522,28 +3541,28 @@ before using antimicro unattended. - + Hide main window when the main window close button is clicked instead of quitting the program. Verstecke Hauptfenster anstatt es zu schließen, wenn die "Schließen"-Schaltfläche gedrückt wurde. - + Close To Tray Schließen im Tray - + Have Windows start antimicro at system startup. Lade antimicro beim Systemstart. - + Launch At Windows Startup Beim Windows-Start starten - + Display recent profiles for all controllers as a single list in the tray menu. Defaults to using sub-menus. @@ -3551,24 +3570,24 @@ to using sub-menus. Controller als eine Liste anstatt als Untermenüs. - + Single Profile List in Tray Einzelprofil-Menü im Tray - + Have the program minimize to the taskbar. By default, the program minimizes to the system tray if available. Minimiere das Programm in die Taskleiste. Standardmäßig wird AntiMicro, falls möglich, in das System-Tray minimiert. - + Minimize to Taskbar In die Taskleiste minimieren - + This option will cause the program to hide all buttons that have no slots assigned to them. The Quick Set dialog window will have to be used @@ -3578,12 +3597,12 @@ Aktion zugeordnet wird. Der Schnelleinstellungs-Dialog muss benutzt werden um die Editier-Einstellungen aufzurufen. - + Hide Empty Buttons Verstecke leere Schaltflächen - + When the program is launched, open the last known profile that was opened during the previous session. @@ -3591,159 +3610,169 @@ previous session. öffne das zuletzt benutzte Profil. - + Auto Load Last Opened Profile Zuletzt geöffnetes Profil automatisch öffnen - + Only show the system tray icon when the program first launches. Zeige das System-Tray-Icon nur, wenn das Programm zum ersten Mal startet. - + Launch in Tray Starten im Tray - + Associate .amgp files with antimicro in Windows Explorer. Assoziiere .amgp-Dateien mit antimicro im Windows Explorer. - + Associate Profiles Assoziiere Profile - + Key Repeat Tastenanschlag - + Active keys will be repeatedly pressed when this option is enabled. Dauerhaft gedrückte Tasten werden wiederholt gedrückt, wenn diese Option aktiviert ist. - - + + Enable Aktivieren - + Specifies how much time should elapse before key repeating begins. Bestimmt die Zeit die abläuft bis das Wiederholen des Tastenanschlags beginnt. - + Specifies how many times key presses will be performed per seconds. Bestimmt wie oft Tastenanschläge pro Sekunde durchgeführt werden. - + <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> <html><head/><body><p>antimicro wurde durch Mitwirkende in viele verschiedene Sprachen übersetzt. Standardmäßig wählt das Programm ein die entsprechende Übersetzung anhand der Einstellung Ihres Systems. Jedoch können Sie antimicro eine andere Übersetzung anhand der Sprache von der Liste hierunter wählen.</p></body></html> - + Português do Brasil - + Français - + Deutsch - + Italiano - + 日本語 - + Русский - + српски / srpski - + 简体中文 - + Español - + українська - + Polski - + + History Si&ze: + + + + Log File: - + Log Level: - + None Nichts - + Error - + Warning - + Info - + Debug + + + Reset + Reset + French Französisch @@ -3761,22 +3790,22 @@ durchgeführt werden. Ukrainisch - + Class Klasse - + Title Titel - + Program Programm - + Disable the "Enhanced Pointer Precision" Windows setting while antimicro is running. Disabling "Enhanced Pointer Precision" will allow mouse movement within antimicro to be more @@ -3786,32 +3815,27 @@ während antimicro läuft. Dies erlaubt präzisere Mausbewegungen in antimicro. - + Disable Enhance Pointer Precision Deaktiviere "Zeigerbeschleunigung verbessern" - + Smoothing Glättung - - Histor&y Size: - - - - + Weight &Modifier: - + Refresh Rate: Wiederholrate: - + The refresh rate is the amount of time that will elapse in between mouse events. Please be cautious when editing this setting as it will cause the program to use @@ -3821,46 +3845,46 @@ it unattended. - + Spring Quelle - + Screen: Bildschirm: - + Utilize the specified screen for spring mode. On Linux, the default is to use the primary screen. On Windows, the default is to use all available screens. - + Accel Numerator: - - - + + + 0 0 - + Accel Denominator: - + Accel Threshold: - + If the acceleration values for the virtual mouse have been changed by a different process, particularly when quitting an older game, then you might want to reset the acceleration @@ -3868,37 +3892,32 @@ values used by the virtual mouse. - + Reset Acceleration - + Delay: Verzögerung: - - Profi&le Directory: - - - - + ms ms - + Rate: Rate: - + times/s mal/s - + Below is a list of the custom mappings that have been saved. You can use the following table to delete mappings or have mappings temporarily disabled. You can also disable mappings that are included with SDL; just insert a new row with the appropriate joystick GUID and check disable. Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. @@ -3907,34 +3926,34 @@ Settings will not take affect until you either refresh all joysticks or unplug t Die Einstellungen werden nicht wirksam werden, bis Sie entweder alle Joysticks aktualisieren oder diesen bestimmten Joystick trennen. - + GUID GUID - + Mapping String Zuweisungsstring - + Disable? Deaktivieren? - - + + Delete Löschen - + Insert Einfügen - - + + Default Standard @@ -3943,7 +3962,7 @@ Die Einstellungen werden nicht wirksam werden, bis Sie entweder alle Joysticks a Brasilianisches Portugiesisch - + English Englisch @@ -3952,49 +3971,49 @@ Die Einstellungen werden nicht wirksam werden, bis Sie entweder alle Joysticks a Deutsch - - + + Active Aktiv - + Devices: Geräte: - - + + All Alles - + Device Gerät - + Profile Profil - + Default? Standard? - + Add Hinzufügen - + Edit Editieren - + Also, Windows users who want to use a low value should also check the "Disable Enhance Pointer Precision" checkbox if you haven't disabled the option in Windows. @@ -4003,42 +4022,52 @@ auch das "Deaktiviere 'Zeigerbeschleunigung verbessern'" Kon aktivieren, wenn die Option nicht in Windows deaktiviert ist. - + Select Default Profile Directory Wähle das Standard-Profil-Verzeichnis - + Are you sure you want to delete the profile? Sind Sie sicher, dass Sie das Profil löschen möchten? - + Save Log File As - + Log Files (*.log) + + + Do you really want to reset setting? + + + + + Would you like to reset mappings too? + + MainWindow - + No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu Keine Joysticks gefunden. Stecken Sie eine Joystick ein und wählen Sie dann die Option "Joysticks aktualisieren" im Hauptmenü aus - + If events are not seen by a game, please click here to run this application as Administrator. - + &App &Anwendung @@ -4047,12 +4076,12 @@ aktivieren, wenn die Option nicht in Windows deaktiviert ist. Stick/Pad Zuweisung - + &Options &Optionen - + antimicro @@ -4061,100 +4090,100 @@ aktivieren, wenn die Option nicht in Windows deaktiviert ist. Wenn die Ereignisse nicht erkannt werden, klicken Sie hier um als Administrator neuzustarten. - + &Help &Hilfe - - + + &Quit B&eenden - + Ctrl+Q Strg+Q - - + + &Update Joysticks &Joysticks aktualisieren - + Ctrl+U Strg+U - - + + &Hide &Verstecken - + Ctrl+H Strg+H - + &About Ü&ber - + Ctrl+A Strg+A - + About &Qt - + &Properties - + &Key Checker - + &GitHub Page - + &Game Controller Mapping - + S&ettings - + &Stick/Pad Assign - + &Wiki - + &Issues - + &Calibration @@ -4171,7 +4200,7 @@ aktivieren, wenn die Option nicht in Windows deaktiviert ist. Tastenkontrolle - + Home Page Webseite @@ -4188,49 +4217,49 @@ aktivieren, wenn die Option nicht in Windows deaktiviert ist. Einstellungen - + Could not find a proper controller identifier. Exiting. - - - - - - - + + + + + + + (%1) (%1) - - + + Open File Datei öffnen - + &Restore &Wiederherstellen - + Calibration couldn't be opened - + You must connect at least one controller to open the window - + Run as Administrator? Als Administrator ausführen? - + Are you sure that you want to run this program as Adminstrator? Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. @@ -4239,17 +4268,17 @@ Some games run as Administrator which will cause events generated by antimicro t Manche Spiele laufen als Administrator, weshalb manche Ereignisse durch antimicro nicht von diesen Spielen erkannt werden, wenn antimicro nicht auch als Administrator ausgeführt wird. Dies geschieht auf Grund von Erlaubnisproblemen durch Benutzerkontensteuerung (UAC) Einstellungen in Windows Vista und neuer. - + Failed to elevate program Berechtigungserhöhung fehlgeschlagen - + Failed to restart this program as the Administrator Neustart als Administrator ist fehlgeschlagen - + Could not find controller. Exiting. @@ -4257,12 +4286,12 @@ Manche Spiele laufen als Administrator, weshalb manche Ereignisse durch antimicr MouseAxisSettingsDialog - + Mouse Settings - Mauseinstellungen - - + Set %1 Set %1 @@ -4270,12 +4299,12 @@ Manche Spiele laufen als Administrator, weshalb manche Ereignisse durch antimicr MouseButtonSettingsDialog - + Mouse Settings - Mauseinstellungen - - + Set %1 Set %1 @@ -4283,12 +4312,12 @@ Manche Spiele laufen als Administrator, weshalb manche Ereignisse durch antimicr MouseControlStickSettingsDialog - + Mouse Settings Mauseinstellungen - + Set %1 Set %1 @@ -4296,12 +4325,12 @@ Manche Spiele laufen als Administrator, weshalb manche Ereignisse durch antimicr MouseDPadSettingsDialog - + Mouse Settings Mauseinstellungen - + Set %1 Set %1 @@ -4309,17 +4338,17 @@ Manche Spiele laufen als Administrator, weshalb manche Ereignisse durch antimicr MouseSettingsDialog - + Mouse Settings Mauseinstellungen - + Mouse Mode: Mausmodus: - + Cursor mode is used to move the mouse cursor around the screen relative to its current position depending on how much you move an axis @@ -4342,68 +4371,68 @@ Mittelpunkt, wenn eine Achse zur Dead Zone zurück kehrt. - + Cursor Zeiger - + Spring Sprung - + Acceleration: Beschleunigung: - + Enhanced Precision Verbesserte Präzision - - + + Linear linear - + Quadratic quadratisch - + Cubic kubisch - + Quadratic Extreme extrem quadratisch - + Power Function Power Funktion - + Easing Quadratic - + Easing Cubic - + Mouse Speed Settings Einstellungen der Mausgeschwindigkeit - + Enable to change the horizontal and vertical speed boxes at the same time. Aktivieren, um die horizontale und vertikale @@ -4411,12 +4440,12 @@ Geschwindigkeitseinstellungen zur gleichen Zeit zu ändern. - + Change Together Zusammen ändern - + Options for adding more acceleration to the mouse movement beyond what the acceleration curve would produce. Acceleration is added based on how quickly an axis is @@ -4426,17 +4455,17 @@ using typical gamepad analog sticks. - + Delta Acceleration - + &Multiplier: - + Mi&n Threshold: @@ -4448,8 +4477,8 @@ Speed: horizontal: - - + + 1 = 20 pps 1 = 20 pps @@ -4460,33 +4489,33 @@ Speed: vertikal: - + Wheel Hori. Speed: Rad-Gesch. horizontal: - + Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. Stellen Sie die Geschwindigkeit für die horizontale Mausrad-Bewegung entsprechend der Anzahl der simulierten Raster pro Sekunde ein. - + Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. Stellen Sie die Geschwindigkeit für die vertikale Mausrad-Bewegung entsprechend der Anzahl der simulierten Raster pro Sekunde ein. - + Sensitivit&y: - + For Power Function acceleration curve. Specifies the factor to use for curve sensitivity. When the value is above 1.0, the mouse movement will be accelerated @@ -4494,13 +4523,13 @@ faster at the low end of an axis. - + Easing Duration: - - + + s @@ -4513,73 +4542,73 @@ faster at the low end of an axis. Multiplikator: - + Highest value to accelerate mouse movement by - + x - + Start %: - + Acceleration begins at this percentage of the base multiplier - + Minimum amount of axis travel required for acceleration to begin - + Max Threshold: - + Maximum axis travel before acceleration has reached the multiplier value - + E&xtra Duration: - + Curve: - + Ease Out Sine - + Ease Out Quad - + Ease Out Cubic - + Release Radius: - + Specifies that the spring area will be relative to the mouse position set by a non-relative spring. Wenn aktiviert, @@ -4587,39 +4616,39 @@ mouse position set by a non-relative spring. durch ein nicht-relativen Ursprung relativ zur Mausposition sein wird. - + Relative Relativ - + Mouse Status - + X: X: - - + + 0 (0 pps) - + Y: Y: - - + + 1 = 1 notch(es)/s 1 = 1 Raste - + Enhanced: Three tier curve that makes the mouse move slow on the low end of an axis and fast on the high end. @@ -4641,19 +4670,19 @@ a period of time using a Cubic curve. - + Hori&zontal Speed: - + &Vertical Speed: - + Wheel Vert. Speed: Rad-Gesch @@ -4664,39 +4693,39 @@ vertikal: Empfindlichkeit: - + Specifies the amount of time (in seconds) that will be required before the mouse is fully accelerated after reaching the high end of an axis. - - - - + + + + % - + Extend the time that extra acceleration is applied. Axis travel will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. - + Spring Settings Sprungeinstellungen - + Spring Width: Sprungweite: - + Changes the width of the region that the cursor can move in spring mode. 0 will use the entire width of your screen. @@ -4705,12 +4734,12 @@ im Sprungmodus zurück legt. 0 wird die gesamte Breite auf Ihrem Bildschirm nutzen. - + Spring Height: Sprunghöhe: - + Changes the height of the region that the cursor can move in spring mode. 0 will use the entire height of your screen. @@ -4719,8 +4748,8 @@ im Sprungmodus zurück legt. 0 wird die gesamte Höhe auf Ihrem Bildschirm nutzen. - - + + %n notch(es)/s %n notch/s @@ -4731,39 +4760,39 @@ auf Ihrem Bildschirm nutzen. QKeyDisplayDialog - + Key Checker Tastenkontrolle - - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - + Event Handler: - + Native Key Value: Nativer Tastenwert: - - - + + + 0x00000000 0x00000000 - + Qt Key Value: Qt-Tastenwert: - + antimicro Key Value: @@ -4771,260 +4800,260 @@ auf Ihrem Bildschirm nutzen. QObject - + Super Super - + Menu Menü - + Mute Stummschalten - + Vol+ - + Vol- - + Play/Pause Wiedergabe/Pause - + Play Wiedergabe - + Pause - + Prev Zurück - + Next Vor - + Mail EMail - + Home Pos1 - + Media - + Search Suche - + Daemon launched Dienst gestartet - + Failed to launch daemon Dienst konnte nicht gestartet werden - + Launching daemon Starte Dienst - - + + Display string "%1" is not valid. - + Failed to set a signature id for the daemon Signatur-ID konnte für den Dienst nicht gesetzt werden - + Failed to change working directory to / Arbeitsverzeichnis konnte nicht gesetzt werden zu / - + Quitting Program Beende Programm - + # of joysticks found: %1 # an Joysticks gefunden: %1 - + List Joysticks: - + --------------- - + Joystick %1: - + Index: %1 - + GUID: %1 - + Name: %1 - + Yes Ja - + No Nein - + Game Controller: %1 - + # of Axes: %1 # der Achsen: %1 - + # of Buttons: %1 # der Knöpfe: %1 - + # of Hats: %1 # der Hats: %1 - + Attempting to use fallback option %1 for event generation. Versuche Fallback-Option %1 zur Ereignisgenerierung. - + Failed to open event generator. Exiting. Öffnen des Ereignisgenerators fehlgeschlagen. Breche ab. - + Using %1 as the event generator. Nutze %1 als Ereignisgenerator. - + Could not raise process priority. Konnte Prozesspriorität nicht erhöhen. - + Last button - + There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? - + Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". - + Profile location %1 is not an XML file. Profilort %1 ist keine XML Datei. - + Profile location %1 does not exist. Profilort %1 existiert nicht. - - - + + + Controller identifier is not a valid value. Controllernummer ist keine gültige Ziffer. - + An invalid set number '%1' was specified. - + Controller identifier '%s'' is not a valid value. - + No set number was specified. Kein Set gewählt. - + No controller was specified. Kein Controller wurde spezifiert. - + No display string was specified. - + An invalid event generator was specified. Ein ungültiger Ereignisgenerator wurde angegeben. - + No event generator string was specified. Kein Ereignesgenerator String wurde angegeben. @@ -5033,7 +5062,7 @@ auf Ihrem Bildschirm nutzen. Qt style Parameter erkannt, aber kein Style spezifiziert. - + No log file specified. @@ -5138,22 +5167,22 @@ auf Ihrem Bildschirm nutzen. Controller Index oder GUID sein. - + Logging started - + Auto-switching to profile "%1". - + Auto-switching to nullptr profile! - + xinput version must be at least 2.0. No mouse acceleration changes will occur. xinput Version muss mindestens 2.0 sein. Es wird keine Mausbeschleunigungsänderungen geben. @@ -5161,18 +5190,18 @@ auf Ihrem Bildschirm nutzen. QuickSetDialog - + Quick Set Schnellkonfiguration - + <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> <html><head/><body><p>Bitte drücken Sie eine Taste oder bewegen Sie eine Achse auf %1 (<span style=" font-weight:600;">%2</span>).<br/>Dann erscheint ein Dialogfenter, dass Ihnen <br>erlaubt eine Zuordnung zu machen.</p></body></html> - - + + Quick Set %1 Schnellkonfiguration %1 @@ -5180,12 +5209,12 @@ auf Ihrem Bildschirm nutzen. SetAxisThrottleDialog - + Throttle Change Schubänderung - + The throttle setting for Axis %1 has been changed. Would you like to distribute this throttle change to all sets? @@ -5197,12 +5226,12 @@ Möchten Sie die Änderungen an alle Sets übertragen? SetJoystick - + Set %1: %2 Set %1: %2 - + Set %1 Set %1 @@ -5210,52 +5239,52 @@ Möchten Sie die Änderungen an alle Sets übertragen? SetNamesDialog - + Set Name Settings Setnameneinstellungen - + Set 1 Set 1 - + Set 2 Set 2 - + Set 3 Set 3 - + Set 4 Set 4 - + Set 5 Set 5 - + Set 6 Set 6 - + Set 7 Set 7 - + Set 8 Set 8 - + Name Name @@ -5263,7 +5292,7 @@ Möchten Sie die Änderungen an alle Sets übertragen? SimpleKeyGrabberButton - + Mouse Maus @@ -5271,7 +5300,7 @@ Möchten Sie die Änderungen an alle Sets übertragen? SpringModeRegionPreview - + Spring Mode Preview Sprungmodus-Vorschau @@ -5279,7 +5308,7 @@ Möchten Sie die Änderungen an alle Sets übertragen? UInputEventHandler - + Could not find a valid uinput device file. Please check that you have the uinput module loaded. lsmod | grep uinput @@ -5288,14 +5317,14 @@ Bitte überprüfen Sie, ob das uinput Modul geladen ist. lsmod | grep uinput - + Could not open uinput device file Please check that you have permission to write to the device Konnte nicht uinput Gerätedatei öffnen Bitte überprüfen Sie ob Sie die Berechtigung haben auf dieses Gerät zu schreiben - + Using uinput device file %1 Nutze uinput Gerätedatei %1 @@ -5303,551 +5332,551 @@ Bitte überprüfen Sie ob Sie die Berechtigung haben auf dieses Gerät zu schrei UInputHelper - + a - + b - + c - + d - + e - + f - + g - + h - + i - + j - + k - + l - + m - + n - + o - + p - + q - + r - + s - + t - + u - + v - + w - + x - + y - + z - + Esc - + F1 - + F2 - + F3 - + F4 - + F5 - + F6 - + F7 - + F8 - + F9 - + F10 - + F11 - + F12 - + ` - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - - + + - - + = - + BackSpace Rücktaste - + Tab Tabulator - + [ - + ] - + \ - + CapsLock Feststell - + ; - + ' - + Enter Eingabe - + Shift_L Umschalt_L - + , - - + + . - - + + / - + Ctrl_L Strg_L - - + + Super_L Super_L - + Alt_L Alt_L - + Space Leertaste - + Alt_R Alt_R - + Menu Menü - + Ctrl_R Strg_R - + Shift_R Umschalt_R - + Up Hoch - + Left Links - + Down Runter - + Right Rechts - + PrtSc Druck - + Ins Einfg - + Del Entf - + Home Pos1 - + End Ende - + PgUp Bild ↑ - + PgDn Bild ↓ - + NumLock - + * - + + - + KP_Enter - + KP_1 - + KP_2 - + KP_3 - + KP_4 - + KP_5 - + KP_6 - + KP_7 - + KP_8 - + KP_9 - + KP_0 - + SCLK Rol ↓ - + Pause Pause - + Super_R - + Mute Stumm - + VolDn Vol- - + VolUp Vol+ - + Play Wiedergabe - + Stop - + Prev Zurück - + Next Vor - + [NO KEY] [KEINE TASTE] @@ -5855,54 +5884,54 @@ Bitte überprüfen Sie ob Sie die Berechtigung haben auf dieses Gerät zu schrei UnixWindowInfoDialog - + Captured Window Properties Erkannte Fenstereigenschaften - + Information About Window Informationen über das Fenster - + Class: Klasse: - - - + + + TextLabel - + Title: Titel: - + Path: Pfad: - + Match By Properties - + Class Klasse - + Title Titel - + Path Pfad @@ -5910,9 +5939,9 @@ Bitte überprüfen Sie ob Sie die Berechtigung haben auf dieses Gerät zu schrei VDPad - - - + + + VDPad VDPad @@ -5920,224 +5949,224 @@ Bitte überprüfen Sie ob Sie die Berechtigung haben auf dieses Gerät zu schrei VirtualKeyPushButton - + Space Leertaste - + Tab - + Shift (L) Umschalt (L) - + Shift (R) Umschalt (R) - + Ctrl (L) Strg (L) - + Ctrl (R) Strg (R) - + Alt (L) Alt (L) - - + + Alt (R) Alt (R) - + Alt Gr - + ` - + ~ - - + + - - + = - + [ - + ] - + \ - + Caps Feststell - + ; - + ' - + , - - + + . - - + + / - + ESC - + PRTSC Drucken - + SCLK Rollen - + INS Einfg - + PGUP Bild ↑ - + DEL Entf - + PGDN Bild ↓ - + 1 - + 2 - + 3 - + 4 - + 5 - + 6 - + 7 - + 8 - + 9 - + 0 - + NUM LK NUM LOCK - - + + * - + + - + Enter Eingabe @@ -6156,42 +6185,42 @@ B E - + < - + : - + Super (L) - + Menu Menü - + Up Hoch - + Down Runter - + Left Links - + Right Rechts @@ -6199,226 +6228,226 @@ E VirtualKeyboardMouseWidget - - + + Keyboard Tastatur - - + + Mouse Maus - + Mouse Settings Mauseinstellungen - + Left Mouse Links - + Up Mouse Hoch - + Left Button Mouse Linke Taste - + Middle Button Mouse Mittlere Taste - + Right Button Mouse Rechte Taste - + Wheel Up Mouse Mausrad hoch - + Wheel Left Mouse Mausrad links - + Wheel Right Mouse Mausrad rechts - + Wheel Down Mouse Mausrad runter - + Down Mouse Runter - + Right Mouse Rechts - + Button 4 Mouse Taste 4 - + Mouse 8 Mouse Taste 8 - + Button 5 Mouse Taste 5 - + Mouse 9 Mouse Taste 9 - + NONE KEINE - - + + Last button - - + + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + Others - + Applications - + Browser Back - + Browser Favorites - + Browser Forward - + Browser Home - + Browser Refresh - + Browser Search - + Browser Stop - + Calc - + Email - + Media - + Media Next - + Media Play - + Media Previous - + Media Stop - + Search Suche - + Volume Down - + Volume Mute - + Volume Up @@ -6426,7 +6455,7 @@ E VirtualMousePushButton - + INVALID UNGÜLTIG @@ -6434,28 +6463,28 @@ E WinAppProfileTimerDialog - - + + Capture Application Wähle Applikation - + After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. Wählen Sie das Fenster aus mit dem Sie das Profil assozieren möchten, nachdem Sie auf den "Wähle Applikation" Button geklickt haben. Die aktive Applikation wird nach der angegebenen Zahl an Sekunden ausgewählt. - + Timer: - + Seconds Sekunden - + Cancel Abbrechen @@ -6463,12 +6492,12 @@ E WinExtras - + [NO KEY] [KEINE TASTE] - + AntiMicro Profile @@ -6476,67 +6505,66 @@ E X11Extras - + ESC - + Tab Tabulator - + Space Leertaste - + DEL Entf - + Return Eingabe - + KP_Enter - + Backspace Rücktaste - + Alt Gr - + xinput extension was not found. No mouse acceleration changes will occur. xinput Erweiterung wurde nicht gefunden. Es wird keine Mausbeschleunigungsänderungen geben. - + xinput version must be at least 2.0. No mouse acceleration changes will occur. xinput Version muss mindestens 2.0 sein. Es wird keine Mausbeschleunigungsänderungen geben. - Virtual pointer found with id=%1. - Virtueller Mauszeiger mit id=%1 gefunden. + Virtueller Mauszeiger mit id=%1 gefunden. - + PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 PtrFeedbackCalls wurde nicht für den virtuellen Mauszeiger gefunden. Es wird keine Mausbeschleunigungsänderungen für das Gerät mit id=%1 geben - + Changing mouse acceleration for device with id=%1 Ändere Mausbeschleunigung für Gerät der id=%1 @@ -6544,7 +6572,7 @@ E XMLConfigReader - + Could not write updated profile XML to file %1. Konnte aktuelles Profil nicht als XML in Datei %1 schreiben. @@ -6552,7 +6580,7 @@ E XMLConfigWriter - + Could not write to profile at %1. Konnte Profil nicht schreiben in %1. @@ -6560,7 +6588,7 @@ E antimicro - + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. @@ -6568,97 +6596,97 @@ E main - + Launch program in system tray only. Nur im Systemtray starten. - + Launch program with the tray menu disabled - + Launch program without the main window displayed - + Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers - + location - + Apply configuration file to a specific controller. Value can be a controller index, name, or GUID - + value - + Unload currently enabled profile(s) - + value(s) - + Start joysticks on a specific set. Value can be a controller index, name, or GUID - + number value - + Launch program as a daemon. Use only on Linux. - + Enable logging - + log-type - + Choose a file for logs writing - + filename - + Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. - + event-generation-type - + Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. diff --git a/share/antimicro/translations/antimicro_en.ts b/share/antimicro/translations/antimicro_en.ts old mode 100644 new mode 100755 index 450c8a188..a5aea5c32 --- a/share/antimicro/translations/antimicro_en.ts +++ b/share/antimicro/translations/antimicro_en.ts @@ -4,17 +4,17 @@ AboutDialog - + About About - + Version Version - + "juliagoda" (since March, 2018) Wanting only to play my favourite old games that din't support gamepads, I found this project (which map keyboard keys and mouse buttons to connected gamepads on Linux) as most proper and recent. But because of poor choices of such application on the internet and since it didn't compile properly, I decided to rescue the project. However, once I finished my work (enough to enjoy playing games) I thought about sharing this code with others. Of course all informations about past programmers will be held. "Ryochan7" (since December 30, 2012 until 2017), I have been working on antimicro in my spare time. What originally started as a fork of QJoyPad and a way to learn proper event-driven programming has turned into something much bigger than I originally intended. Although I have spent a lot of time learning new techniques, finding out more about the domain of KB+M emulation, and spending Friday nights bashing my head against my keyboard, it has been a fun and enriching experience overall. @@ -45,17 +45,17 @@ As of May 24, 2016, this project has moved to https://github.com/AntiMicro/antim - + Copyright: 2013 - 2018 Copyright: 2013 - 2018 - + Info Info - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -138,7 +138,7 @@ p, li { white-space: pre-wrap; } <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"><br /></p></body></html> - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -368,57 +368,57 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.</span></p></body></html> - + Changelog Changelog - + Credits Credits - + antimicro antimicro - + About Development About Development - + License License - + Program Version %1 Program Version %1 - + Program Compiled on %1 at %2 Program Compiled on %1 at %2 - + Built Against SDL %1 Built Against SDL %1 - + Running With SDL %1 Running With SDL %1 - + Using Qt %1 Using Qt %1 - + Using Event Handler: %1 Using Event Handler: %1 @@ -426,29 +426,29 @@ p, li { white-space: pre-wrap; } AddEditAutoProfileDialog - + Auto Profile Dialog Auto Profile Dialog - + Profile: Profile: - - + + Browse Browse - + Window: Window: - - + + Select Window. Click on the appropriate application window and the application file path will be populated in the form. @@ -457,38 +457,47 @@ window and the application file path will be populated in the form. - + Detect Window Properties Detect Window Properties - + Class: Class: - + Title: Title: - + + set partial title + set partial title + + + Application: Application: - + Select Select - + + De&vices: + De&vices: + + Devices: - Devices: + Devices: - - + + Select this profile to be the default loaded for the specified device. The selection will be used instead of the all default profile option. @@ -497,84 +506,84 @@ the specified device. The selection will be used instead of the all default profile option. - + Set as Default for Controller Set as Default for Controller - - + + A different profile is already selected as the default for this device. A different profile is already selected as the default for this device. - + Current (%1) Current (%1) - + Open Config Open Config - - + + Select Program Select Program - + Programs (*.exe) Programs (*.exe) - + Please use the main default profile selection. Please use the main default profile selection. - + Please select a window by using the mouse. Press Escape if you want to cancel. Please select a window by using the mouse. Press Escape if you want to cancel. - + Capture Application Window Capture Application Window - + Could not obtain information for the selected window. Could not obtain information for the selected window. - + Application Capture Failed Application Capture Failed - + Profile file path is invalid. Profile file path is invalid. - + No window matching property was specified. No window matching property was specified. - + Program path is invalid or not executable. Program path is invalid or not executable. - + File is not an .exe file. File is not an .exe file. - + No window matching property was selected. No window matching property was selected. @@ -582,502 +591,502 @@ of the all default profile option. AdvanceButtonDialog - - + + Advanced Advanced - + Assignments Assignments - + Toggle Toggle - + Turbo Turbo - + Set Selector Set Selector - + Blank or KB/M Blank or KB/M - + Hold Hold - + Pause Pause - + Cycle Cycle - + Distance Distance - + Insert Insert - + Delete Delete - + Clear All Clear All - + Time: Time: - + 0.01s 0.01s - + 0s 0s - + Insert a pause that occurs in between key presses. Insert a pause that occurs in between key presses. - + Release Release - - + + Insert a new blank slot. Insert a new blank slot. - + Delete a slot. Delete a slot. - + Clear all currently assigned slots. Clear all currently assigned slots. - + Specify the duration of an inserted Pause or Hold slot. Specify the duration of an inserted Pause or Hold slot. - + 0m 0m - + &Mouse Speed Mod: &Mouse Speed Mod: - - + + Specify the range past an axis dead zone in which a sequence of actions will execute. Specify the range past an axis dead zone in which a sequence of actions will execute. - + Distance: Distance: - - + + % % - + Mouse Mod Mouse Mod - + Press Time Press Time - + Delay Delay - + Execute Execute - + Load Load - + Set Change Set Change - + Text Entry Text Entry - + Placeholder Placeholder - - + + 0 0 - + Set the percentage that mouse speeds will be modified by. Set the percentage that mouse speeds will be modified by. - + Auto Reset Cycle After Auto Reset Cycle After - + seconds seconds - + Executable: Executable: - + ... ... - + Arguments: Arguments: - - - + + + Enabled Enabled - + Mode: Mode: - + <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> - + Normal Normal - + Gradient Gradient - + Pulse Pulse - + Delay: Delay: - + 0.10s 0.10s - + Rate: Rate: - + 10.0/s 10.0/s - - + + Disabled Disabled - + Select Set 1 One Way Select Set 1 One Way - + Select Set 1 Two Way Select Set 1 Two Way - + Select Set 1 While Held Select Set 1 While Held - + Select Set 2 One Way Select Set 2 One Way - + Select Set 2 Two Way Select Set 2 Two Way - + Select Set 2 While Held Select Set 2 While Held - + Select Set 3 One Way Select Set 3 One Way - + Select Set 3 Two Way Select Set 3 Two Way - + Select Set 3 While Held Select Set 3 While Held - + Select Set 4 One Way Select Set 4 One Way - + Select Set 4 Two Way Select Set 4 Two Way - + Select Set 4 While Held Select Set 4 While Held - + Select Set 5 One Way Select Set 5 One Way - + Select Set 5 Two Way Select Set 5 Two Way - + Select Set 5 While Held Select Set 5 While Held - + Select Set 6 One Way Select Set 6 One Way - + Select Set 6 Two Way Select Set 6 Two Way - + Select Set 6 While Held Select Set 6 While Held - + Select Set 7 One Way Select Set 7 One Way - + Select Set 7 Two Way Select Set 7 Two Way - + Select Set 7 While Held Select Set 7 While Held - + Select Set 8 One Way Select Set 8 One Way - + Select Set 8 Two Way Select Set 8 Two Way - + Select Set 8 While Held Select Set 8 While Held - + sec. sec. - + /sec. /sec. - + Set %1 Set %1 - - + + Select Set %1 Select Set %1 - + One Way One Way - + Two Way Two Way - + While Held While Held - + Choose Executable Choose Executable - + Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. - + Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. - + Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. - + Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. - + Chose a profile to load when this slot is activated. Choose a profile to load when this slot is activated. - + Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. - + Specify the time that keys past this slot should be held down. Specify the time that keys past this slot should be held down. - + Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. - + Change to selected set once slot is activated. Change to selected set once slot is activated. - + Full string will be typed when a slot is activated. Full string will be typed when a slot is activated. - + Execute program when slot is activated. Execute program when slot is activated. - - + + Choose Profile Choose Profile - + Config Files (*.amgp *.xml) Config Files (*.amgp *.xml) @@ -1085,157 +1094,157 @@ of the all default profile option. AdvanceStickAssignmentDialog - + Stick/Pad Assignment Stick/Pad Assignment - + Sticks Sticks - + DPads DPads - - + + %1 (Joystick %2) %1 (Joystick %2) - + Stick 1 Stick 1 - - - + + + Enabled Enabled - - - - - - + + + + + + Assign Assign - - + + X Axis: X Axis: - - + + Y Axis: Y Axis: - + Stick 2 Stick 2 - + Number of Physical DPads: %1 Number of Physical DPads: %1 - + Virtual DPad 1 Virtual DPad 1 - + Up: Up: - + Down: Down: - + Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. - + Left: Left: - + Right: Right: - - - - + + + + Axis %1 Axis %1 - - - - + + + + Axis %1 - Axis %1 - - - - - + + + + Axis %1 + Axis %1 + - - - - + + + + Button %1 Button %1 - + Move stick 1 along the X axis Move stick 1 along the X axis - + Move stick 1 along the Y axis Move stick 1 along the Y axis - + Move stick 2 along the X axis Move stick 2 along the X axis - + Move stick 2 along the Y axis Move stick 2 along the Y axis - - - - + + + + Press a button or move an axis Press a button or move an axis @@ -1243,181 +1252,181 @@ of the all default profile option. AxisEditDialog - + Axis Axis - - + + Mouse (Horizontal) Mouse (Horizontal) - - + + Mouse (Inverted Horizontal) Mouse (Inverted Horizontal) - - + + Mouse (Vertical) Mouse (Vertical) - - + + Mouse (Inverted Vertical) Mouse (Inverted Vertical) - - + + Arrows: Up | Down Arrows: Up | Down - - + + Arrows: Left | Right Arrows: Left | Right - - + + Keys: W | S Keys: W | S - - + + Keys: A | D Keys: A | D - - + + NumPad: KP_8 | KP_2 NumPad: KP_8 | KP_2 - - + + NumPad: KP_4 | KP_6 NumPad: KP_4 | KP_6 - - - + + + None None - - + + Set the value to use as the limit for an axis. Useful for a worn out analog stick. Set the value to use as the limit for an axis. Useful for a worn out analog stick. - + Negative Half Throttle Negative Half Throttle - + Positive Half Throttle Positive Half Throttle - + Name: Name: - + Specify the name of an axis. Specify the name of an axis. - + Mouse Settings Mouse Settings - - + + Set the value of the dead zone for an axis. Set the value of the dead zone for an axis. - + Presets: Presets: - + Dead Zone: Dead Zone: - + Max Zone: Max Zone: - - + + [NO KEY] [NO KEY] - + Throttle setting that determines the behavior of how to interpret an axis hold or release. Throttle setting that determines the behavior of how to interpret an axis hold or release. - + Negative Throttle Negative Throttle - + Normal Normal - + Positive Throttle Positive Throttle - + Current Value: Current Value: - + Set Set - + Set %1 Set %1 - + Left Mouse Button Left Mouse Button - + Right Mouse Button Right Mouse Button @@ -1425,124 +1434,124 @@ interpret an axis hold or release. ButtonEditDialog - + Dialog Dialog - + To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab - + Placeholder Placeholder - + Toggle Toggle - + Enables a key press or release to only occur when a controller button is pressed. Enables a key press or release to only occur when a controller button is pressed. - + Enables rapid key presses and releases. Turbo controller. Enables rapid key presses and releases. Turbo controller. - + Turbo Turbo - + Last keyboard/mouse button: Last keyboard/mouse button: - + Slots Slots - + Na&me: Na&me: - + Specify the name of a button. Specify the name of a button. - + Action: Action: - + Specify the action that will be performed in game while this button is being used. Specify the action that will be performed in game while this button is being used. - + Advanced Advanced - - - + + + Choose your keyboard key Choose your keyboard key - + No button No button - - - - + + + + Last button Last button - + To change settings for last button, it must be at least one assignment from keyboard to gamepad To change settings for last button, it must be at least one assignment from keyboard to gamepad - + To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad - + To open advanced dialog, it's needed to map at least one button from keyboard to gamepad To open advanced dialog, it's needed to map at least one button from keyboard to gamepad - + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + As last gamepad button has been set As last gamepad button has been set - + Index %1 Index %1 @@ -1550,65 +1559,68 @@ this button is being used. Calibration - + Form Form - - + + Start calibration Start calibration - + Controller: Controller: - + Sticks: Sticks: - Use settings from jstest-gtk - Use settings from jstest-gtk + Use settings from jstest-gtk - + Reset settings Reset settings - + Cancel Cancel - - + + Save Save - - + + Calibration Calibration - Do you really want to reset settings of current axes? - Do you really want to reset settings of current axes? + Do you really want to reset settings of current axes? + + + + Do you really want to reset settings of current axis? + Do you really want to reset settings of current axis? - + Calibration was saved for the preset. Do you really want to reset settings? Calibration was saved for the preset. Do you really want to reset settings? - + Place the joystick in the center position. It's the part, where often you don't have to move. Just skip it in such situation. @@ -1617,17 +1629,17 @@ It's the part, where often you don't have to move. Just skip it in suc It's the part, where often you don't have to move. Just skip it in such situation. - + Calibrating center Calibrating center - + Start second step Start second step - + Center X: %1 @@ -1636,28 +1648,28 @@ Center X: %1 Center X: %1 - + Center Y: %1 Center Y: %1 - + Place the joystick in the top-left corner many times Place the joystick in the top-left corner many times - - + + Calibrating position Calibrating position - - + + X: %1 @@ -1666,27 +1678,27 @@ X: %1 X: %1 - - + + Y: %1 Y: %1 - + Place the joystick in the bottom-right corner Place the joystick in the bottom-right corner - + Start final step Start final step - + range X: %1 - %2 @@ -1695,14 +1707,14 @@ range X: %1 - %2 range X: %1 - %2 - + range Y: %1 - %2 range Y: %1 - %2 - + deadzone X: %1 @@ -1711,14 +1723,14 @@ deadzone X: %1 deadzone X: %1 - + deadzone Y: %1 deadzone Y: %1 - + ---Calibration done!--- @@ -1727,31 +1739,44 @@ deadzone Y: %1 - + Calibration values have been saved Calibration values have been saved - - + + Dead zone calibration Dead zone calibration - + + You have to move axes to the top-left corner at least five times. + You have to move axes to the top-left corner at least five times. + + + + You have to move axes to the bottom-right corner at least five times. + You have to move axes to the bottom-right corner at least five times. + + + + Do you want to save calibration of current axis? + Do you want to save calibration of current axis? + + You must move X axis to the right at least five times! Keep moving! - You must move X axis to the right at least five times! Keep moving! + You must move X axis to the right at least five times! Keep moving! - You must move X axis to the left at least five times! Keep moving! - You must move X axis to the left at least five times! Keep moving! + You must move X axis to the left at least five times! Keep moving! - - - - + + + + Axis %1 Axis %1 @@ -1759,64 +1784,64 @@ deadzone Y: %1 CapturedWindowInfoDialog - + Captured Window Properties Captured Window Properties - + Information About Window Information About Window - + Class: Class: - - - + + + TextLabel TextLabel - + Title: Title: - + Path: Path: - + Match By Properties Match By Properties - + Class Class - + Title Title - + Path Path - + Full Path Full Path - + File Name File Name @@ -1824,67 +1849,67 @@ deadzone Y: %1 DPadContextMenu - + Mouse (Normal) Mouse (Normal) - + Mouse (Inverted Horizontal) Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) Mouse (Inverted Horizontal + Vertical) - + Arrows Arrows - + Keys: W | A | S | D Keys: W | A | S | D - + NumPad NumPad - + None None - + Standard Standard - + Eight Way Eight Way - + 4 Way Cardinal 4 Way Cardinal - + 4 Way Diagonal 4 Way Diagonal - + Mouse Settings Mouse Settings @@ -1892,108 +1917,108 @@ deadzone Y: %1 DPadEditDialog - + Dialog Dialog - + Presets: Presets: - + Mouse (Normal) Mouse (Normal) - + Mouse (Inverted Horizontal) Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) Mouse (Inverted Horizontal + Vertical) - + Arrows Arrows - + Keys: W | A | S | D Keys: W | A | S | D - + NumPad NumPad - + None None - + Dpad Mode: Dpad Mode: - + &Name: &Name: - + 4 Way Cardinal 4 Way Cardinal - + 4 Way Diagonal 4 Way Diagonal - + DPad Delay: DPad Delay: - - + + Time lapsed before a direction change is taken into effect. Time lapsed before a direction change is taken into effect. - + s s - + Specify the name of a dpad. Specify the name of a dpad. - + Mouse Settings Mouse Settings - + Standard Standard - + Standard: 8 region dpad with two direction buttons active when the dpad is in a diagonal region. @@ -2020,17 +2045,17 @@ the cardinal directions of the dpad. Useful for menus. to a diagonal zone. - + Eight Way Eight Way - + Set Set - + Set %1 Set %1 @@ -2038,27 +2063,27 @@ to a diagonal zone. EditAllDefaultAutoProfileDialog - + Default Profile Default Profile - + Profile: Profile: - + Browse Browse - + Open Config Open Config - + Profile file path is invalid. Profile file path is invalid. @@ -2066,29 +2091,29 @@ to a diagonal zone. ExtraProfileSettingsDialog - + Extra Profile Settings Extra Profile Settings - + Key Press Time: Key Press Time: - + 0.00 ms 0.00 ms - + Profile Name: Profile Name: - - - + + + s s @@ -2096,7 +2121,7 @@ to a diagonal zone. GameController - + Game Controller Game Controller @@ -2104,9 +2129,9 @@ to a diagonal zone. GameControllerDPad - - - + + + DPad DPad @@ -2114,187 +2139,187 @@ to a diagonal zone. GameControllerMappingDialog - + Game Controller Mapping Game Controller Mapping - + <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> - + A A - + B B - + X X - + Y Y - + Back Back - + Start Start - + Guide Guide - + Left Shoulder Left Shoulder - + Right Shoulder Right Shoulder - + Left Stick Click Left Stick Click - + Right Stick Click Right Stick Click - + Left Stick X Left Stick X - + Left Stick Y Left Stick Y - + Right Stick X Right Stick X - + Right Stick Y Right Stick Y - + Left Trigger Left Trigger - + Right Trigger Right Trigger - + DPad Up DPad Up - + DPad Left DPad Left - + DPad Down DPad Down - + DPad Right DPad Right - + Mapping Mapping - + SDL 2 Game Controller Mapping String SDL 2 Game Controller Mapping String - + Last Axis Event: Last Axis Event: - + Current Axis Detection Dead Zone: Current Axis Detection Dead Zone: - + 5000 5000 - + 10000 10000 - + 15000 15000 - + 20000 20000 - + 25000 25000 - + 30000 30000 - + 32000 32000 - + Game Controller Mapping (%1) (#%2) Game Controller Mapping (%1) (#%2) - + Discard Controller Mapping? Discard Controller Mapping? - + Discard mapping for this controller? If discarded, the controller will be reverted to a joystick once you refresh all joysticks. @@ -2306,47 +2331,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerSet - + Back Back - + Guide Guide - + Start Start - + LS Click LS Click - + RS Click RS Click - + L Shoulder L Shoulder - + R Shoulder R Shoulder - + L Trigger L Trigger - + R Trigger R Trigger @@ -2354,9 +2379,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerTrigger - - - + + + Trigger Trigger @@ -2364,9 +2389,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxis - - - + + + Axis Axis @@ -2374,24 +2399,24 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisButton - + Negative Negative - + Positive Positive - + Unknown Unknown - - - + + + Button Button @@ -2399,74 +2424,74 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisContextMenu - + Mouse (Horizontal) Mouse (Horizontal) - + Mouse (Inverted Horizontal) Mouse (Inverted Horizontal) - + Mouse (Vertical) Mouse (Vertical) - + Mouse (Inverted Vertical) Mouse (Inverted Vertical) - + Arrows: Up | Down Arrows: Up | Down - + Arrows: Left | Right Arrows: Left | Right - + Keys: W | S Keys: W | S - + Keys: A | D Keys: A | D - + NumPad: KP_8 | KP_2 NumPad: KP_8 | KP_2 - + NumPad: KP_4 | KP_6 NumPad: KP_4 | KP_6 - - + + None None - - + + Mouse Settings Mouse Settings - + Left Mouse Button Left Mouse Button - + Right Mouse Button Right Mouse Button @@ -2474,57 +2499,57 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButton - + Processing turbo for #%1 - %2 Processing turbo for #%1 - %2 - + Finishing turbo for button #%1 - %2 Finishing turbo for button #%1 - %2 - + Processing press for button #%1 - %2 Processing press for button #%1 - %2 - + Processing release for button #%1 - %2 Processing release for button #%1 - %2 - + Distance change for button #%1 - %2 Distance change for button #%1 - %2 - - - + + + Button Button - - - - + + + + [NO KEY] [NO KEY] - + [Set %1 1W] [Set %1 1W] - + [Set %1 2W] [Set %1 2W] - + [Set %1 WH] [Set %1 WH] @@ -2532,47 +2557,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonContextMenu - + Toggle Toggle - + Turbo Turbo - + Clear Clear - + Set Select Set Select - + Disabled Disabled - + Set %1 Set %1 - + Set %1 1W Set %1 1W - + Set %1 2W Set %1 2W - + Set %1 WH Set %1 WH @@ -2580,118 +2605,118 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonSlot - - + + Mouse Mouse - + Up Up - + Down Down - + Left Left - + Right Right - + LB LB - + MB MB - + RB RB - + B4 B4 - + B5 B5 - + Pause Pause - + Hold Hold - + Cycle Cycle - + Distance Distance - + Release Release - + Mouse Mod Mouse Mod - + Press Time Press Time - + Delay Delay - + Load %1 Load %1 - + Set Change %1 Set Change %1 - + [Text] %1 [Text] %1 - + [Exec] %1 [Exec] %1 - + [NO KEY] [NO KEY] @@ -2699,9 +2724,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStick - - - + + + Stick Stick @@ -2709,37 +2734,37 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickButton - - - + + + Up Up - - - + + + Down Down - - - + + + Left Left - - - + + + Right Right - - - + + + Button Button @@ -2747,67 +2772,67 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickContextMenu - + Mouse (Normal) Mouse (Normal) - + Mouse (Inverted Horizontal) Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) Mouse (Inverted Horizontal + Vertical) - + Arrows Arrows - + Keys: W | A | S | D Keys: W | A | S | D - + NumPad NumPad - + None None - + Standard Standard - + Eight Way Eight Way - + 4 Way Cardinal 4 Way Cardinal - + 4 Way Diagonal 4 Way Diagonal - + Mouse Settings Mouse Settings @@ -2815,86 +2840,86 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickEditDialog - + Dialog Dialog - + X: X: - - - - - + + + + + 0 0 - + Y: Y: - + Distance: Distance: - + Presets: Presets: - + Mouse (Normal) Mouse (Normal) - + Mouse (Inverted Horizontal) Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) Mouse (Inverted Horizontal + Vertical) - + Arrows Arrows - + Keys: W | A | S | D Keys: W | A | S | D - + NumPad NumPad - + None None - + Stick Mode: Stick Mode: - + Standard: 8 region stick with two direction buttons active when the stick is in a diagonal region. @@ -2921,72 +2946,72 @@ the cardinal directions of the stick. Useful for menus. to a diagonal zone of the stick. - + 4 Way Cardinal 4 Way Cardinal - + 4 Way Diagonal 4 Way Diagonal - - + + Dead zone value to use for an analog stick. Dead zone value to use for an analog stick. - - + + Value when an analog stick is considered moved 100%. Value when an analog stick is considered moved 100%. - - + + The area (in degrees) that each diagonal region occupies. The area (in degrees) that each diagonal region occupies. - + Square Stick: Square Stick: - - + + Percentage to modify a square stick coordinates to confine values to a circle Percentage to modify a square stick coordinates to confine values to a circle - + % % - + Stick Delay: Stick Delay: - - + + Time lapsed before a direction change is taken into effect. Time lapsed before a direction change is taken into effect. - + s s - + Modifier: Modifier: - + Edit button that is active while the stick is active. This button is useful for assigning zones with @@ -2999,68 +3024,68 @@ modifier keys that can be used to assign walk/run functionality to an analog stick. - + PushButton PushButton - + Na&me: Name: Na&me: - + Specify the name of an analog stick. Specify the name of an analog stick. - + Mouse Settings Mouse Settings - + Standard Standard - + Bearing: Bearing: - + % Safe Zone: % Safe Zone: - + Eight Way Eight Way - + Dead Zone: Dead Zone: - + Max Zone: Max Zone: - + Diagonal Range: Diagonal Range: - + Set Set - + Set %1 Set %1 @@ -3068,9 +3093,9 @@ functionality to an analog stick. JoyControlStickModifierButton - - - + + + Modifier Modifier @@ -3078,9 +3103,9 @@ functionality to an analog stick. JoyDPad - - - + + + DPad DPad @@ -3088,37 +3113,37 @@ functionality to an analog stick. JoyDPadButton - - - + + + Up Up - - - + + + Down Down - - - + + + Left Left - - - + + + Right Right - - - + + + Button Button @@ -3126,267 +3151,272 @@ functionality to an analog stick. JoyTabWidget - - - - - - + + + + + + <New> <New> - - + + Remove Remove - - + + Remove configuration from recent list. Remove configuration from recent list. - - + + Load Load - - + + Load configuration file. Load configuration file. - - + + Save Save - - + + Save changes to configuration file. Save changes to configuration file. - - + + Save As Save As - - + + Save changes to a new configuration file. Save changes to a new configuration file. - - + + Sets Sets - + Copy from Set Copy from Set - + Settings Settings - - + + Set 1 Set 1 - - + + Set 2 Set 2 - - + + Set 3 Set 3 - - + + Set 4 Set 4 - - + + Set 5 Set 5 - - + + Set 6 Set 6 - - + + Set 7 Set 7 - - + + Set 8 Set 8 - - + + Stick/Pad Assign Stick/Pad Assign - - + + Controller Mapping Controller Mapping - - + + Quick Set Quick Set - - + + Names Names - - + + Toggle button name displaying. Toggle button name displaying. - - + + Pref Pref - - + + Change global profile settings. Change global profile settings. - - - + + + Reset Reset - - + + Revert changes to the configuration. Reload configuration file. Revert changes to the configuration. Reload configuration file. - + Open Config Open Config - + Config Files (*.amgp *.xml) Config Files (*.amgp *.xml) - - - + + + Config File (*.%1.amgp) Config File (*.%1.amgp) - - + + Do you really want to reset buttons settings for joystick? + Do you really want to reset buttons settings for joystick? + + + + Save Profile Changes? Save Profile Changes? - - + + Changes to the new profile have not been saved. Would you like to save or discard the current profile? Changes to the new profile have not been saved. Would you like to save or discard the current profile? - - + + Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? - + Sticks Sticks - - + + DPads DPads - + No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. - - + + Set %1: %2 Set %1: %2 - - + + Set %1 Set %1 - + Copy Set Assignments Copy Set Assignments - + Are you sure you want to copy the assignments and device properties from %1? Are you sure you want to copy the assignments and device properties from %1? - - - + + + Save Config Save Config - - + + Set Set @@ -3394,7 +3424,7 @@ to buttons or disable hiding empty buttons. Joystick - + Joystick Joystick @@ -3402,98 +3432,98 @@ to buttons or disable hiding empty buttons. JoystickStatusWindow - + Properties Properties - + Details Details - + Name: Name: - - - - - - - + + + + + + + %1 %1 - + Number: Number: - + Axes: Axes: - + Buttons: Buttons: - + Hats: Hats: - + GUID: GUID: - + Game Controller: Game Controller: - + Axes Axes - + Buttons Buttons - + Hats Hats - + %1 (#%2) Properties %1 (#%2) Properties - + Axis %1 Axis %1 - + Hat %1 Hat %1 - + No No - + Yes Yes @@ -3501,62 +3531,67 @@ to buttons or disable hiding empty buttons. MainSettingsDialog - + Edit Settings Edit Settings - + General General - + Controller Mappings Controller Mappings - + Language Language - + Auto Profile Auto Profile - + Mouse Mouse - + Advanced Advanced - + + Profile Direc&tory: + Profile Direc&tory: + + + <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> - + Recent Profile Count: Recent Profile Count: - + <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> - + Gamepad Poll Rate: Gamepad Poll Rate: - + Change the poll rate that the program uses to discover new events from gamepads. Defaults to 10 ms. @@ -3571,29 +3606,29 @@ use more CPU power so please test the setting that you use before using antimicro unattended. - + Hide main window when the main window close button is clicked instead of quitting the program. Hide main window when the main window close button is clicked instead of quitting the program. - + Close To Tray Close To Tray - + Have Windows start antimicro at system startup. Have Windows start antimicro at system startup. - + Launch At Windows Startup Launch At Windows Startup - + Display recent profiles for all controllers as a single list in the tray menu. Defaults to using sub-menus. @@ -3602,12 +3637,12 @@ as a single list in the tray menu. Defaults to using sub-menus. - + Single Profile List in Tray Single Profile List in Tray - + Have the program minimize to the taskbar. By default, the program minimizes to the system tray if available. @@ -3616,12 +3651,12 @@ By default, the program minimizes to the system tray if available. - + Minimize to Taskbar Minimize to Taskbar - + This option will cause the program to hide all buttons that have no slots assigned to them. The Quick Set dialog window will have to be used @@ -3632,12 +3667,12 @@ The Quick Set dialog window will have to be used to bring up the edit dialog for gamepad buttons. - + Hide Empty Buttons Hide Empty Buttons - + When the program is launched, open the last known profile that was opened during the previous session. @@ -3646,176 +3681,186 @@ known profile that was opened during the previous session. - + Auto Load Last Opened Profile Auto Load Last Opened Profile - + Only show the system tray icon when the program first launches. Only show the system tray icon when the program first launches. - + Launch in Tray Launch in Tray - + Associate .amgp files with antimicro in Windows Explorer. Associate .amgp files with antimicro in Windows Explorer. - + Associate Profiles Associate Profiles - + Key Repeat Key Repeat - + Active keys will be repeatedly pressed when this option is enabled. Active keys will be repeatedly pressed when this option is enabled. - - + + Enable Enable - + Specifies how much time should elapse before key repeating begins. Specifies how much time should elapse before key repeating begins. - + Specifies how many times key presses will be performed per seconds. Specifies how many times key presses will be performed per seconds. - + <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> - + Português do Brasil Português do Brasil - + Français Français - + Deutsch Deutsch - + Italiano Italiano - + 日本語 日本語 - + Русский Русский - + српски / srpski српски / srpski - + 简体中文 简体中文 - + Español Español - + українська українська - + Polski Polski - + + History Si&ze: + History Si&ze: + + + Log File: Log File: - + Log Level: Log Level: - + None None - + Error Error - + Warning Warning - + Info Info - + Debug Debug - + + Reset + Reset + + + Class Class - + Title Title - + Program Program - + Disable the "Enhanced Pointer Precision" Windows setting while antimicro is running. Disabling "Enhanced Pointer Precision" will allow mouse movement within antimicro to be more @@ -3826,32 +3871,31 @@ will allow mouse movement within antimicro to be more precise. - + Disable Enhance Pointer Precision Disable Enhance Pointer Precision - + Smoothing Smoothing - Histor&y Size: - Histor&y Size: + Histor&y Size: - + Weight &Modifier: Weight &Modifier: - + Refresh Rate: Refresh Rate: - + The refresh rate is the amount of time that will elapse in between mouse events. Please be cautious when editing this setting as it will cause the program to use @@ -3866,17 +3910,17 @@ system instability. Please test the setting before using it unattended. - + Spring Spring - + Screen: Screen: - + Utilize the specified screen for spring mode. On Linux, the default is to use the primary screen. On Windows, the default is to use all available screens. @@ -3885,29 +3929,29 @@ default is to use the primary screen. On Windows, the default is to use all available screens. - + Accel Numerator: Accel Numerator: - - - + + + 0 0 - + Accel Denominator: Accel Denominator: - + Accel Threshold: Accel Threshold: - + If the acceleration values for the virtual mouse have been changed by a different process, particularly when quitting an older game, then you might want to reset the acceleration @@ -3918,37 +3962,36 @@ an older game, then you might want to reset the acceleration values used by the virtual mouse. - + Reset Acceleration Reset Acceleration - + Delay: Delay: - Profi&le Directory: - Profi&le Directory: + Profi&le Directory: - + ms ms - + Rate: Rate: - + times/s times/s - + Below is a list of the custom mappings that have been saved. You can use the following table to delete mappings or have mappings temporarily disabled. You can also disable mappings that are included with SDL; just insert a new row with the appropriate joystick GUID and check disable. Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. @@ -3957,86 +4000,86 @@ Settings will not take affect until you either refresh all joysticks or unplug t Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. - + GUID GUID - + Mapping String Mapping String - + Disable? Disable? - - + + Delete Delete - + Insert Insert - - + + Default Default - + English English - - + + Active Active - + Devices: Devices: - - + + All All - + Device Device - + Profile Profile - + Default? Default? - + Add Add - + Edit Edit - + Also, Windows users who want to use a low value should also check the "Disable Enhance Pointer Precision" checkbox if you haven't disabled the option in Windows. @@ -4045,206 +4088,216 @@ the option in Windows. the option in Windows. - + Select Default Profile Directory Select Default Profile Directory - + Are you sure you want to delete the profile? Are you sure you want to delete the profile? - + Save Log File As Save Log File As - + Log Files (*.log) Log Files (*.log) + + + Do you really want to reset setting? + Do you really want to reset setting? + + + + Would you like to reset mappings too? + Would you like to reset mappings too? + MainWindow - + antimicro antimicro - + No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu - + If events are not seen by a game, please click here to run this application as Administrator. If events are not seen by a game, please click here to run this application as Administrator. - + &App &App - + &Options &Options - + &Help &Help - - + + &Quit &Quit - + Ctrl+Q Ctrl+Q - - + + &Update Joysticks &Update Joysticks - + Ctrl+U Ctrl+U - - + + &Hide &Hide - + Ctrl+H Ctrl+H - + &About &About - + Ctrl+A Ctrl+A - + About &Qt About &Qt - + &Properties &Properties - + &Key Checker &Key Checker - + &GitHub Page &GitHub Page - + &Game Controller Mapping &Game Controller Mapping - + S&ettings S&ettings - + &Stick/Pad Assign &Stick/Pad Assign - + &Wiki &Wiki - + &Issues - + &Issues - + &Calibration - + &Calibration Issues Issues - + Home Page Home Page - + Could not find a proper controller identifier. Exiting. Could not find a proper controller identifier. Exiting. - - - - - - - + + + + + + + (%1) (%1) - - + + Open File Open File - + &Restore &Restore - + Calibration couldn't be opened - + Calibration couldn't be opened - + You must connect at least one controller to open the window - + You must connect at least one controller to open the window - + Run as Administrator? Run as Administrator? - + Are you sure that you want to run this program as Adminstrator? Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. @@ -4253,17 +4306,17 @@ Some games run as Administrator which will cause events generated by antimicro t Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. - + Failed to elevate program Failed to elevate program - + Failed to restart this program as the Administrator Failed to restart this program as the Administrator - + Could not find controller. Exiting. Could not find controller. Exiting. @@ -4271,12 +4324,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseAxisSettingsDialog - + Mouse Settings - Mouse Settings - - + Set %1 Set %1 @@ -4284,12 +4337,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseButtonSettingsDialog - + Mouse Settings - Mouse Settings - - + Set %1 Set %1 @@ -4297,12 +4350,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseControlStickSettingsDialog - + Mouse Settings Mouse Settings - + Set %1 Set %1 @@ -4310,12 +4363,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseDPadSettingsDialog - + Mouse Settings Mouse Settings - + Set %1 Set %1 @@ -4323,17 +4376,17 @@ Some games run as Administrator which will cause events generated by antimicro t MouseSettingsDialog - + Mouse Settings Mouse Settings - + Mouse Mode: Mouse Mode: - + Cursor mode is used to move the mouse cursor around the screen relative to its current position depending on how much you move an axis @@ -4356,80 +4409,80 @@ be returned to the center of the screen when the axis is moved back to the dead zone. - + Cursor Cursor - + Spring Spring - + Acceleration: Acceleration: - + Enhanced Precision Enhanced Precision - - + + Linear Linear - + Quadratic Quadratic - + Cubic Cubic - + Quadratic Extreme Quadratic Extreme - + Power Function Power Function - + Easing Quadratic Easing Quadratic - + Easing Cubic Easing Cubic - + Mouse Speed Settings Mouse Speed Settings - + Enable to change the horizontal and vertical speed boxes at the same time. Enable to change the horizontal and vertical speed boxes at the same time. - + Change Together Change Together - + Options for adding more acceleration to the mouse movement beyond what the acceleration curve would produce. Acceleration is added based on how quickly an axis is @@ -4444,56 +4497,56 @@ some of the issues of the very limited input range available using typical gamepad analog sticks. - + Delta Acceleration Delta Acceleration - + &Multiplier: &Multiplier: - + Mi&n Threshold: Mi&n Threshold: - - + + 1 = 20 pps 1 = 20 pps - + Wheel Hori. Speed: Wheel Hori. Speed: - + Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. - + Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. - + Sensitivit&y: Sensitivit&y: - + For Power Function acceleration curve. Specifies the factor to use for curve sensitivity. When the value is above 1.0, the mouse movement will be accelerated @@ -4504,124 +4557,124 @@ is above 1.0, the mouse movement will be accelerated faster at the low end of an axis. - + Easing Duration: Easing Duration: - - + + s s - + Highest value to accelerate mouse movement by Highest value to accelerate mouse movement by - + x x - + Start %: Start %: - + Acceleration begins at this percentage of the base multiplier Acceleration begins at this percentage of the base multiplier - + Minimum amount of axis travel required for acceleration to begin Minimum amount of axis travel required for acceleration to begin - + Max Threshold: Max Threshold: - + Maximum axis travel before acceleration has reached the multiplier value Maximum axis travel before acceleration has reached the multiplier value - + E&xtra Duration: E&xtra Duration: - + Curve: Curve: - + Ease Out Sine Ease Out Sine - + Ease Out Quad Ease Out Quad - + Ease Out Cubic Ease Out Cubic - + Release Radius: Release Radius: - + Specifies that the spring area will be relative to the mouse position set by a non-relative spring. Specifies that the spring area will be relative to the mouse position set by a non-relative spring. - + Relative Relative - + Mouse Status Mouse Status - + X: X: - - + + 0 (0 pps) 0 (0 pps) - + Y: Y: - - + + 1 = 1 notch(es)/s 1 = 1 notch(es)/s - + Enhanced: Three tier curve that makes the mouse move slow on the low end of an axis and fast on the high end. @@ -4660,28 +4713,28 @@ Easing Cubic: Axis high end is gradually accelerated over a period of time using a Cubic curve. - + Hori&zontal Speed: Hori&zontal Speed: - + &Vertical Speed: &Vertical Speed: - + Wheel Vert. Speed: Wheel Vert. Speed: - + Specifies the amount of time (in seconds) that will be required before the mouse is fully accelerated after reaching the high end of an axis. @@ -4690,15 +4743,15 @@ be required before the mouse is fully accelerated after reaching the high end of an axis. - - - - + + + + % % - + Extend the time that extra acceleration is applied. Axis travel will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. @@ -4707,17 +4760,17 @@ will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. - + Spring Settings Spring Settings - + Spring Width: Spring Width: - + Changes the width of the region that the cursor can move in spring mode. 0 will use the entire width of your screen. @@ -4726,12 +4779,12 @@ can move in spring mode. 0 will use the entire width of your screen. - + Spring Height: Spring Height: - + Changes the height of the region that the cursor can move in spring mode. 0 will use the entire height of your screen. @@ -4740,8 +4793,8 @@ can move in spring mode. 0 will use the entire height of your screen. - - + + %n notch(es)/s %n notch/s @@ -4752,39 +4805,43 @@ of your screen. QKeyDisplayDialog - + Key Checker Key Checker - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-5.10/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-5.10/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-5.10/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-5.10/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + + + + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - + Event Handler: Event Handler: - + Native Key Value: Native Key Value: - - - + + + 0x00000000 0x00000000 - + Qt Key Value: Qt Key Value: - + antimicro Key Value: antimicro Key Value: @@ -4792,285 +4849,285 @@ of your screen. QObject - + Super Super - + Menu Menu - + Mute Mute - + Vol+ Vol+ - + Vol- Vol- - + Play/Pause Play/Pause - + Play Play - + Pause Pause - + Prev Prev - + Next Next - + Mail Mail - + Home Home - + Media Media - + Search Search - + Daemon launched Daemon launched - + Failed to launch daemon Failed to launch daemon - + Launching daemon Launching daemon - - + + Display string "%1" is not valid. Display string "%1" is not valid. - + Failed to set a signature id for the daemon Failed to set a signature id for the daemon - + Failed to change working directory to / Failed to change working directory to / - + Quitting Program Quitting Program - + # of joysticks found: %1 # of joysticks found: %1 - + List Joysticks: List Joysticks: - + --------------- --------------- - + Joystick %1: Joystick %1: - + Index: %1 Index: %1 - + GUID: %1 GUID: %1 - + Name: %1 Name: %1 - + Yes Yes - + No No - + Game Controller: %1 Game Controller: %1 - + # of Axes: %1 # of Axes: %1 - + # of Buttons: %1 # of Buttons: %1 - + # of Hats: %1 # of Hats: %1 - + Attempting to use fallback option %1 for event generation. Attempting to use fallback option %1 for event generation. - + Failed to open event generator. Exiting. Failed to open event generator. Exiting. - + Using %1 as the event generator. Using %1 as the event generator. - + Could not raise process priority. Could not raise process priority. - + Last button Last button - + There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? - + Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". - + Profile location %1 is not an XML file. Profile location %1 is not an XML file. - + Profile location %1 does not exist. Profile location %1 does not exist. - - - + + + Controller identifier is not a valid value. Controller identifier is not a valid value. - + An invalid set number '%1' was specified. An invalid set number '%1' was specified. - + Controller identifier '%s'' is not a valid value. Controller identifier '%s'' is not a valid value. - + No set number was specified. No set number was specified. - + No controller was specified. No controller was specified. - + No display string was specified. No display string was specified. - + An invalid event generator was specified. An invalid event generator was specified. - + No event generator string was specified. No event generator string was specified. - + No log file specified. No log file specified. - + Logging started Logging started - + Auto-switching to profile "%1". Auto-switching to profile "%1". - + Auto-switching to nullptr profile! Auto-switching to nullptr profile! - + xinput version must be at least 2.0. No mouse acceleration changes will occur. xinput version must be at least 2.0. No mouse acceleration changes will occur. @@ -5078,18 +5135,18 @@ of your screen. QuickSetDialog - + Quick Set Quick Set - + <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> - - + + Quick Set %1 Quick Set %1 @@ -5097,12 +5154,12 @@ of your screen. SetAxisThrottleDialog - + Throttle Change Throttle Change - + The throttle setting for Axis %1 has been changed. Would you like to distribute this throttle change to all sets? @@ -5114,12 +5171,12 @@ Would you like to distribute this throttle change to all sets? SetJoystick - + Set %1: %2 Set %1: %2 - + Set %1 Set %1 @@ -5127,52 +5184,52 @@ Would you like to distribute this throttle change to all sets? SetNamesDialog - + Set Name Settings Set Name Settings - + Set 1 Set 1 - + Set 2 Set 2 - + Set 3 Set 3 - + Set 4 Set 4 - + Set 5 Set 5 - + Set 6 Set 6 - + Set 7 Set 7 - + Set 8 Set 8 - + Name Name @@ -5180,7 +5237,7 @@ Would you like to distribute this throttle change to all sets? SimpleKeyGrabberButton - + Mouse Mouse @@ -5188,7 +5245,7 @@ Would you like to distribute this throttle change to all sets? SpringModeRegionPreview - + Spring Mode Preview Spring Mode Preview @@ -5196,7 +5253,7 @@ Would you like to distribute this throttle change to all sets? UInputEventHandler - + Could not find a valid uinput device file. Please check that you have the uinput module loaded. lsmod | grep uinput @@ -5205,14 +5262,14 @@ Please check that you have the uinput module loaded. lsmod | grep uinput - + Could not open uinput device file Please check that you have permission to write to the device Could not open uinput device file Please check that you have permission to write to the device - + Using uinput device file %1 Using uinput device file %1 @@ -5220,551 +5277,551 @@ Please check that you have permission to write to the device UInputHelper - + a a - + b b - + c c - + d d - + e e - + f f - + g g - + h h - + i i - + j j - + k k - + l l - + m m - + n n - + o o - + p p - + q q - + r r - + s s - + t t - + u u - + v v - + w w - + x x - + y y - + z z - + Esc Esc - + F1 F1 - + F2 F2 - + F3 F3 - + F4 F4 - + F5 F5 - + F6 F6 - + F7 F7 - + F8 F8 - + F9 F9 - + F10 F10 - + F11 F11 - + F12 F12 - + ` ` - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - - + + - - - + = = - + BackSpace BackSpace - + Tab Tab - + [ [ - + ] ] - + \ \ - + CapsLock CapsLock - + ; ; - + ' ' - + Enter Enter - + Shift_L Shift_L - + , , - - + + . . - - + + / / - + Ctrl_L Ctrl_L - - + + Super_L Super_L - + Alt_L Alt_L - + Space Space - + Alt_R Alt_R - + Menu Menu - + Ctrl_R Ctrl_R - + Shift_R Shift_R - + Up Up - + Left Left - + Down Down - + Right Right - + PrtSc PrtSc - + Ins Ins - + Del Del - + Home Home - + End End - + PgUp PgUp - + PgDn PgDn - + NumLock NumLock - + * * - + + + - + KP_Enter KP_Enter - + KP_1 KP_1 - + KP_2 KP_2 - + KP_3 KP_3 - + KP_4 KP_4 - + KP_5 KP_5 - + KP_6 KP_6 - + KP_7 KP_7 - + KP_8 KP_8 - + KP_9 KP_9 - + KP_0 KP_0 - + SCLK SCLK - + Pause Pause - + Super_R Super_R - + Mute Mute - + VolDn VolDn - + VolUp VolUp - + Play Play - + Stop Stop - + Prev Prev - + Next Next - + [NO KEY] [NO KEY] @@ -5772,54 +5829,54 @@ Please check that you have permission to write to the device UnixWindowInfoDialog - + Captured Window Properties Captured Window Properties - + Information About Window Information About Window - + Class: Class: - - - + + + TextLabel TextLabel - + Title: Title: - + Path: Path: - + Match By Properties Match By Properties - + Class Class - + Title Title - + Path Path @@ -5827,9 +5884,9 @@ Please check that you have permission to write to the device VDPad - - - + + + VDPad VDPad @@ -5837,264 +5894,264 @@ Please check that you have permission to write to the device VirtualKeyPushButton - + Space Space - + Tab Tab - + Shift (L) Shift (L) - + Shift (R) Shift (R) - + Ctrl (L) Ctrl (L) - + Ctrl (R) Ctrl (R) - + Alt (L) Alt (L) - - + + Alt (R) Alt (R) - + Alt Gr Alt Gr - + ` ` - + ~ ~ - - + + - - - + = = - + [ [ - + ] ] - + \ \ - + Caps Caps - + ; ; - + ' ' - + , , - - + + . . - - + + / / - + ESC ESC - + PRTSC PRTSC - + SCLK SCLK - + INS INS - + PGUP PGUP - + DEL DEL - + PGDN PGDN - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - + NUM LK NUM LK - - + + * * - + + + - + Enter Enter - + < < - + : : - + Super (L) Super (L) - + Menu Menu - + Up Up - + Down Down - + Left Left - + Right Right @@ -6102,226 +6159,226 @@ LK VirtualKeyboardMouseWidget - - + + Keyboard Keyboard - - + + Mouse Mouse - + Mouse Settings Mouse Settings - + Left Mouse Left - + Up Mouse Up - + Left Button Mouse Left Button - + Middle Button Mouse Middle Button - + Right Button Mouse Right Button - + Wheel Up Mouse Wheel Up - + Wheel Left Mouse Wheel Left - + Wheel Right Mouse Wheel Right - + Wheel Down Mouse Wheel Down - + Down Mouse Down - + Right Mouse Right - + Button 4 Mouse Button 4 - + Mouse 8 Mouse Mouse 8 - + Button 5 Mouse Button 5 - + Mouse 9 Mouse Mouse 9 - + NONE NONE - - + + Last button Last button - - + + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + Others Others - + Applications Applications - + Browser Back Browser Back - + Browser Favorites Browser Favorites - + Browser Forward Browser Forward - + Browser Home Browser Home - + Browser Refresh Browser Refresh - + Browser Search Browser Search - + Browser Stop Browser Stop - + Calc Calc - + Email Email - + Media Media - + Media Next Media Next - + Media Play Media Play - + Media Previous Media Previous - + Media Stop Media Stop - + Search Search - + Volume Down Volume Down - + Volume Mute Volume Mute - + Volume Up Volume Up @@ -6329,7 +6386,7 @@ LK VirtualMousePushButton - + INVALID INVALID @@ -6337,28 +6394,28 @@ LK WinAppProfileTimerDialog - - + + Capture Application Capture Application - + After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. - + Timer: Timer: - + Seconds Seconds - + Cancel Cancel @@ -6366,12 +6423,12 @@ LK WinExtras - + [NO KEY] [NO KEY] - + AntiMicro Profile AntiMicro Profile @@ -6379,67 +6436,66 @@ LK X11Extras - + ESC ESC - + Tab Tab - + Space Space - + DEL DEL - + Return Return - + KP_Enter KP_Enter - + Backspace Backspace - + Alt Gr Alt Gr - + xinput extension was not found. No mouse acceleration changes will occur. xinput extension was not found. No mouse acceleration changes will occur. - + xinput version must be at least 2.0. No mouse acceleration changes will occur. xinput version must be at least 2.0. No mouse acceleration changes will occur. - Virtual pointer found with id=%1. - Virtual pointer found with id=%1. + Virtual pointer found with id=%1. - + PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 - + Changing mouse acceleration for device with id=%1 Changing mouse acceleration for device with id=%1 @@ -6447,7 +6503,7 @@ LK XMLConfigReader - + Could not write updated profile XML to file %1. Could not write updated profile XML to file %1. @@ -6455,7 +6511,7 @@ LK XMLConfigWriter - + Could not write to profile at %1. Could not write to profile at %1. @@ -6463,7 +6519,7 @@ LK antimicro - + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. @@ -6471,97 +6527,97 @@ LK main - + Launch program in system tray only. Launch program in system tray only. - + Launch program with the tray menu disabled Launch program with the tray menu disabled - + Launch program without the main window displayed Launch program without the main window displayed - + Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers - + location location - + Apply configuration file to a specific controller. Value can be a controller index, name, or GUID Apply configuration file to a specific controller. Value can be a controller index, name, or GUID - + value value - + Unload currently enabled profile(s) Unload currently enabled profile(s) - + value(s) value(s) - + Start joysticks on a specific set. Value can be a controller index, name, or GUID Start joysticks on a specific set. Value can be a controller index, name, or GUID - + number value number value - + Launch program as a daemon. Use only on Linux. Launch program as a daemon. Use only on Linux. - + Enable logging Enable logging - + log-type log-type - + Choose a file for logs writing Choose a file for logs writing - + filename filename - + Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. - + event-generation-type event-generation-type - + Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. diff --git a/share/antimicro/translations/antimicro_es.ts b/share/antimicro/translations/antimicro_es.ts old mode 100644 new mode 100755 index 5f0a4ebb6..0c2f2d9f4 --- a/share/antimicro/translations/antimicro_es.ts +++ b/share/antimicro/translations/antimicro_es.ts @@ -4,17 +4,17 @@ AboutDialog - + About sobre - + Version versión - + "juliagoda" (since March, 2018) Wanting only to play my favourite old games that din't support gamepads, I found this project (which map keyboard keys and mouse buttons to connected gamepads on Linux) as most proper and recent. But because of poor choices of such application on the internet and since it didn't compile properly, I decided to rescue the project. However, once I finished my work (enough to enjoy playing games) I thought about sharing this code with others. Of course all informations about past programmers will be held. "Ryochan7" (since December 30, 2012 until 2017), I have been working on antimicro in my spare time. What originally started as a fork of QJoyPad and a way to learn proper event-driven programming has turned into something much bigger than I originally intended. Although I have spent a lot of time learning new techniques, finding out more about the domain of KB+M emulation, and spending Friday nights bashing my head against my keyboard, it has been a fun and enriching experience overall. @@ -32,17 +32,17 @@ As of May 24, 2016, this project has moved to https://github.com/AntiMicro/antim - + Copyright: 2013 - 2018 Copyright: 2013 - 2016 {2013 ?} {2013 ?} {2018?} - + Info info - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -86,7 +86,7 @@ p, li { white-space: pre-wrap; } - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -204,7 +204,7 @@ p, li { white-space: pre-wrap; } - + Changelog Changelog @@ -229,12 +229,12 @@ Desde entonces, he tratado de averiguar lo que los otros programas hacen la dere Una vez que el control de Steam finalmente se lanzó al público, la necesidad de este programa no podría existir más. Sólo se basa en el concepto del controlador solamete, el controlador de Steam tendría tantas ventajas sobre el uso de un programa como este para proporcionar la emulación KB + M. - + Credits Créditos - + antimicro antimicro @@ -290,42 +290,42 @@ p, li { white-space: pre-wrap; } <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - + About Development Sobre el desenvolvimiento - + License Licencia - + Program Version %1 Versión del programa %1 - + Program Compiled on %1 at %2 Programa compilado en %1 a %2 - + Built Against SDL %1 - + Running With SDL %1 - + Using Qt %1 Usando Qt %1 - + Using Event Handler: %1 Usando Gestor de Eventos: %1 @@ -333,151 +333,160 @@ p, li { white-space: pre-wrap; } AddEditAutoProfileDialog - + Auto Profile Dialog - + Profile: Perfil: - - + + Browse Navegar - + Window: ventana: - - + + Select Window. Click on the appropriate application window and the application file path will be populated in the form. - + Detect Window Properties - + Class: Clase: - + Title: Título: - + + set partial title + + + + Application: Aplicación: - + Select seleccione - + + De&vices: + + + Devices: - Dispositivos: + Dispositivos: - - + + Select this profile to be the default loaded for the specified device. The selection will be used instead of the all default profile option. - + Set as Default for Controller - - + + A different profile is already selected as the default for this device. - + Current (%1) - + Open Config Abrir Config - - + + Select Program Seleccionar Programa - + Programs (*.exe) Programas (*.exe) - + Please use the main default profile selection. Por favor, utilice la selección principal perfil predeterminado. - + Please select a window by using the mouse. Press Escape if you want to cancel. Por favor, seleccione una ventana utilizando el ratón. Presione Escape si desea cancelar. - + Capture Application Window - + Could not obtain information for the selected window. - + Application Capture Failed - + Profile file path is invalid. La ruta de archivo de perfil es invalido. - + No window matching property was specified. - + Program path is invalid or not executable. - + File is not an .exe file. El Archivo no es un .exe. - + No window matching property was selected. @@ -485,187 +494,187 @@ of the all default profile option. AdvanceButtonDialog - - + + Advanced Avanzado - + Assignments Asignamientos - + Toggle Alternar - + Turbo Turbo - + Set Selector Selector de Set - + Blank or KB/M Vacio o KB/M - + Hold Mantener - + Pause Pausa - + Cycle Ciclo - + Distance Distancia - + Insert Inserir - + Delete Borrar - + Clear All Limpiar todo - + Time: Tiempo: - + 0.01s 0.01s - + 0s 0s - + Insert a pause that occurs in between key presses. Insertar una pausa que se produce en la introducción de la tecla. - + Release Soltar - - + + Insert a new blank slot. Inserte una nueva ranura en blanco. - + Delete a slot. Borrar ranura. - + Clear all currently assigned slots. Limpiar todos los slots asignados actualmente. - + Specify the duration of an inserted Pause or Hold slot. Especificar la duración de una ranura de pausa o de retención insertado. - + 0m 0m - + &Mouse Speed Mod: - - + + Specify the range past an axis dead zone in which a sequence of actions will execute. Especificar el rango más allá de una zona muerta eje en el que una secuencia de acciones se ejecutará. - + Distance: Distancia: - - + + % % - + Mouse Mod Raton Mod - + Press Time Tiempo de presionado - + Delay Retraso - + Execute Ejecutar - + Load Cargar - + Set Change Definir Cambio - + Text Entry Entrada de texto - + Placeholder marcador de posición - - + + 0 0 @@ -674,318 +683,318 @@ of the all default profile option. Velovidad de Ratón Mod: - + Set the percentage that mouse speeds will be modified by. Establecer el porcentaje que las velocidades de ratón serán modificadas por. - + Auto Reset Cycle After Auto Resetear Ciclos Después - + seconds segundos - + Executable: - + ... ... - + Arguments: - - - + + + Enabled Habilitado - + Mode: Modo: - + <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> <html><head/><body><p>Normal:. Pulse y suelte repetidamente un botón por la tasa elegido </p><p> Gradiente: Modificar el retraso y liberación de un botón de acuerdo con la distancia de un eje se ha movido. La tasa seguirá siendo el mismo </p><p>Pulso:. Modifica como muchas veces un botón es presionado y liberado por segundo. El retraso botón seguirá siendo el mismo.</p></body></html> - + Normal Normal - + Gradient Gradiente - + Pulse Pulso - + Delay: Retraso: - + 0.10s 0.10s - + Rate: Taza: - + 10.0/s 10.0/s - - + + Disabled Inhabilitado - + Select Set 1 One Way Seleccione Set 1 Unidireccional - + Select Set 1 Two Way Seleccione Set 1 Bidireccional - + Select Set 1 While Held Seleccione Set 1 Mientras se Mantiene - + Select Set 2 One Way Seleccionar Set 2 Unidireccional - + Select Set 2 Two Way Seleccionar Set 2 Bidireccional - + Select Set 2 While Held Seleccionar Set 2 Mientras se Mantiene - + Select Set 3 One Way Seleccionar Set 3 Unidireccional - + Select Set 3 Two Way Seleccionar Set 3 Bidireccional - + Select Set 3 While Held Seleccionar Set 3 Mientras se Mantiene - + Select Set 4 One Way Seleccionar Set 4 Unidireccional - + Select Set 4 Two Way Seleccionar Set 4 Bidireccional - + Select Set 4 While Held Seleccionar Set 4 Mientras se Mantiene - + Select Set 5 One Way Seleccionar Set 5 Unidireccional - + Select Set 5 Two Way Seleccionar Set 5 Bidireccional - + Select Set 5 While Held Seleccionar Set 5 Mientras se Mantiene - + Select Set 6 One Way Seleccionar Set 6 Unidireccional - + Select Set 6 Two Way Seleccionar Set 6 Bidireccional - + Select Set 6 While Held Seleccionar Set 6 Mientras se Mantiene - + Select Set 7 One Way Seleccionar Set 7 Unidireccional - + Select Set 7 Two Way Seleccionar Set 7 Bidireccional - + Select Set 7 While Held Seleccionar Set 7 Mientras se Mantiene - + Select Set 8 One Way Seleccionar Set 8 Unidireccional - + Select Set 8 Two Way Seleccionar Set 8 Bidireccional - + Select Set 8 While Held Seleccionar Set 8 Mientras se Mantiene - + sec. Seg. - + /sec. /seg. - + Set %1 Set %1 - - + + Select Set %1 Seleccionar Set %1 - + One Way Unidireccional - + Two Way Bidireccional - + While Held Mientras se Mantiene - + Choose Executable Escojer Ejecutable - + Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. Las ranuras mas allá de un Ciclo de acción podrán ser ejecutados en la proxima vez que se presione el botón. ciclos múltiples se pueden agregar con el fin de crear particiones en una secuencia. - + Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. Retrasa el momento en que la siguiente ranura es activado por el tiempo especificado. Las ranuras activadas antes de que el retraso se mantendrá activa una vez transcurrido el tiempo de retardo. - + Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. Distancia acción especifica que las ranuras después sólo se ejecutan cuando un eje se mueve de un cierto rango más allá de la zona muerta designada. - + Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. Inserte una acción de retención. Las ranuras después de la acción sólo se ejecutarán si el botón se mantiene más allá del intervalo especificado. - + Chose a profile to load when this slot is activated. Elija un perfil para cargar cuando se activa esta ranura. - + Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. El Mod de acción del ratón va a modificar todos los ajustes de velocidad del ratón en un porcentaje especificado, mientras que la acción se está procesando. Esto puede ser útil para ralentizar el ratón para francotiradores. - + Specify the time that keys past this slot should be held down. Especificar el tiempo que las teclas pasan en esta ranura deben mantenerse presionadas. - + Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. Insertar una acción de liberación. Las ranuras después de la acción sólo se ejecutarán después de la liberación del botón si este fue presionado más allá del intervalo especificado. - + Change to selected set once slot is activated. Cambiar al set seleccionado una vez que se activa la ranura. - + Full string will be typed when a slot is activated. La cadena completa se tecleará cuando se activa una ranura. - + Execute program when slot is activated. Ejecutar el programa cuando se activa la ranura. - - + + Choose Profile Elegir Perfil - + Config Files (*.amgp *.xml) Archivos de Config (*.amgp *.xml) @@ -993,157 +1002,157 @@ Distancia acción especifica que las ranuras después sólo se ejecutan cuando u AdvanceStickAssignmentDialog - + Stick/Pad Assignment Asignamiento de Palanca/Pad - + Sticks Palancas - + DPads DPads - - + + %1 (Joystick %2) %1 (Mando %2) - + Stick 1 Palanca 1 - - - + + + Enabled Habilitar - - - - - - + + + + + + Assign Asignar - - + + X Axis: Eje X: - - + + Y Axis: Eje Y: - + Stick 2 Palanca 2 - + Number of Physical DPads: %1 Numero de DPads físicos: %1 - + Virtual DPad 1 DPad 1 Virtual - + Up: Arriba: - + Down: Abajo: - + Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. Nota: Esta ventana es para la retrocompatibilidad con los perfiles realizados antes Antimicro 2.0. Desde la versión 2.0, se prefiere el uso de la ventana de juego Mapeo controlador. - + Left: Izquierda: - + Right: Derecha: - - - - + + + + Axis %1 Ejes %1 - - - - + + + + Axis %1 - Ejes %1 - - - - - + + + + Axis %1 + Ejes %1 + - - - - + + + + Button %1 Botón %1 - + Move stick 1 along the X axis Mueva la palanca 1 a lo largo del eje X - + Move stick 1 along the Y axis Mueva la palanca 1 a lo largo del eje Y - + Move stick 2 along the X axis Mueva la palanca 2 a lo largo del eje X - + Move stick 2 along the Y axis Mueva la palanca 2 a lo largo del eje Y - - - - + + + + Press a button or move an axis Presione un botón o mueva un eje @@ -1151,181 +1160,181 @@ Distancia acción especifica que las ranuras después sólo se ejecutan cuando u AxisEditDialog - + Axis Ejes - - + + Mouse (Horizontal) Ratón (Horizontal) - - + + Mouse (Inverted Horizontal) Ratón (Horizontal Invertido) - - + + Mouse (Vertical) Ratón (Vertical) - - + + Mouse (Inverted Vertical) Ratón (Vertical Invertido) - - + + Arrows: Up | Down Direccionales: Arriba | Abajo - - + + Arrows: Left | Right Direccionales: Izquierda | Derecha - - + + Keys: W | S Teclas: W | S - - + + Keys: A | D Teclas: A | D - - + + NumPad: KP_8 | KP_2 Teclado Num: 8 | 2 - - + + NumPad: KP_4 | KP_6 Teclado Num: 4 | 6 - - - + + + None Nada - - + + Set the value to use as the limit for an axis. Useful for a worn out analog stick. Establecer el valor a utilizar como límite para un eje. Útil para una palancas analógicas desgastadas. - + Negative Half Throttle Mitad de Acelerador Negativo - + Positive Half Throttle Mitad de Acelerador Positivo - + Name: Nombre: - + Specify the name of an axis. Especificar un nombre para un eje. - + Mouse Settings Configuraciones de Ratón - - + + Set the value of the dead zone for an axis. Establecer el valor de la zona muerta para un eje. - + Presets: Presets: - + Dead Zone: Zona Muerta: - + Max Zone: Zona Maxima: - - + + [NO KEY] [SIN TECLA] - + Throttle setting that determines the behavior of how to interpret an axis hold or release. Ajuste del acelerador la que determina el comportamiento de la forma de interpretar un eje de retención o liberación. - + Negative Throttle Acelerador Negativo - + Normal Normal - + Positive Throttle Acelerador Positivo - + Current Value: Valor Actual: - + Set - + Set %1 - + Left Mouse Button Botón Izquierdo del Ratón - + Right Mouse Button Botón Derecho del Ratón @@ -1333,37 +1342,37 @@ interpretar un eje de retención o liberación. ButtonEditDialog - + Dialog Dialogo - + To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab Para realizar una nueva asignación, pulse cualquier tecla del teclado o haga clic en un botón en el teclado o en la pestaña ratón - + Placeholder marcador de posición - + Toggle Alternar - + Enables a key press or release to only occur when a controller button is pressed. Habilita la pulsación de una tecla o la liberación que sólo ocurren cuando se pulsa un botón del mando. - + Enables rapid key presses and releases. Turbo controller. Permite a las pulsaciones de teclas rápidas y liberaciones. Controlador Turbo. - + Turbo Turbo @@ -1372,39 +1381,39 @@ interpretar un eje de retención o liberación. Presente: - + Last keyboard/mouse button: - + Slots Ranuras - + Na&me: No&mbre: - + Specify the name of a button. Especifique el nombre de un botón. - + Action: Acción: - + Specify the action that will be performed in game while this button is being used. Especificar la acción que se llevará a cabo en juego, mientras se está utilizando este botón. - + Advanced Avanzado @@ -1417,52 +1426,52 @@ se está utilizando este botón. Set %1 - - - + + + Choose your keyboard key - + No button - - - - + + + + Last button - + To change settings for last button, it must be at least one assignment from keyboard to gamepad - + To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad - + To open advanced dialog, it's needed to map at least one button from keyboard to gamepad - + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + As last gamepad button has been set - + Index %1 @@ -1470,190 +1479,190 @@ se está utilizando este botón. Calibration - + Form - - + + Start calibration - + Controller: - + Sticks: - - Use settings from jstest-gtk - - - - + Reset settings - + Cancel Cancelar - - + + Save - - + + Calibration - - Do you really want to reset settings of current axes? + + Do you really want to reset settings of current axis? - + Calibration was saved for the preset. Do you really want to reset settings? - + Place the joystick in the center position. It's the part, where often you don't have to move. Just skip it in such situation. - + Calibrating center - + Start second step - + Center X: %1 - + Center Y: %1 - + Place the joystick in the top-left corner many times - - + + Calibrating position - - + + X: %1 - - + + Y: %1 - + Place the joystick in the bottom-right corner - + Start final step - + range X: %1 - %2 - + range Y: %1 - %2 - + deadzone X: %1 - + deadzone Y: %1 - + ---Calibration done!--- - + Calibration values have been saved - - + + Dead zone calibration - - You must move X axis to the right at least five times! Keep moving! + + You have to move axes to the top-left corner at least five times. + + + + + You have to move axes to the bottom-right corner at least five times. - - You must move X axis to the left at least five times! Keep moving! + + Do you want to save calibration of current axis? - - - - + + + + Axis %1 Ejes %1 @@ -1661,64 +1670,64 @@ deadzone Y: %1 CapturedWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: Clase: - - - + + + TextLabel - + Title: Titulo: - + Path: Camino: - + Match By Properties - + Class Clase - + Title Titulo - + Path Camino - + Full Path - + File Name @@ -1749,67 +1758,67 @@ deadzone Y: %1 DPadContextMenu - + Mouse (Normal) Ratón (Normal) - + Mouse (Inverted Horizontal) Ratón (Horizontal Invertido) - + Mouse (Inverted Vertical) Ratón (Vertical Invertido) - + Mouse (Inverted Horizontal + Vertical) Ratón (Horizontal+Vertical Invertido) - + Arrows Direccionales - + Keys: W | A | S | D Teclas: W | A | S | D - + NumPad Teclado Num - + None Nada - + Standard Estándar - + Eight Way Ocho Vías - + 4 Way Cardinal 4 Vias Cardinal - + 4 Way Diagonal 4 Vias Diagonal - + Mouse Settings Configuracion de Ratón @@ -1817,108 +1826,108 @@ deadzone Y: %1 DPadEditDialog - + Dialog Dialogo - + Presets: Presets: - + Mouse (Normal) Ratón (Normal) - + Mouse (Inverted Horizontal) Ratón (Horizontal Invertido) - + Mouse (Inverted Vertical) Ratón (Vertical Invertido) - + Mouse (Inverted Horizontal + Vertical) Ratón (Horizontal+Vertical Invertido) - + Arrows Direccionales - + Keys: W | A | S | D Teclas: W | A | S | D - + NumPad Teclado Num - + None Nada - + Dpad Mode: Modo Dpad: - + &Name: &Nombre: - + 4 Way Cardinal 4 Vias Cardinal - + 4 Way Diagonal 4 Vias Diagonal - + DPad Delay: Retraso de Dpad: - - + + Time lapsed before a direction change is taken into effect. Tiempo transcurrido antes de un cambio de dirección se tenga en efecto. - + s s - + Specify the name of a dpad. Especificar un nombre para Dpad. - + Mouse Settings Configuracion de Ratón - + Standard Estándar - + Standard: 8 region dpad with two direction buttons active when the dpad is in a diagonal region. @@ -1945,17 +1954,17 @@ los puntos cardinales de la DPAD. Útil para los menús. a una zona de diagonal. - + Eight Way Ocho Vías - + Set Set - + Set %1 Set %1 @@ -1963,27 +1972,27 @@ a una zona de diagonal. EditAllDefaultAutoProfileDialog - + Default Profile Perfil por Defecto - + Profile: Perfil: - + Browse Navegar - + Open Config Abrir Config - + Profile file path is invalid. La ruta de archivo de perfil es invalido. @@ -1991,29 +2000,29 @@ a una zona de diagonal. ExtraProfileSettingsDialog - + Extra Profile Settings Configuraciones Extra de Perfil - + Key Press Time: Tiempo de presionado de Tecla: - + 0.00 ms 0.00 ms - + Profile Name: Nombre del Perfil: - - - + + + s s @@ -2021,7 +2030,7 @@ a una zona de diagonal. GameController - + Game Controller Controlador de juego @@ -2029,9 +2038,9 @@ a una zona de diagonal. GameControllerDPad - - - + + + DPad DPad @@ -2039,187 +2048,187 @@ a una zona de diagonal. GameControllerMappingDialog - + Game Controller Mapping Mapeo de Controles de Juego - + <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> - + A - + B - + X - + Y - + Back - + Start - + Guide - + Left Shoulder - + Right Shoulder - + Left Stick Click - + Right Stick Click - + Left Stick X - + Left Stick Y - + Right Stick X - + Right Stick Y - + Left Trigger - + Right Trigger - + DPad Up - + DPad Left - + DPad Down - + DPad Right - + Mapping - + SDL 2 Game Controller Mapping String - + Last Axis Event: - + Current Axis Detection Dead Zone: - + 5000 5000 - + 10000 10000 - + 15000 15000 - + 20000 20000 - + 25000 25000 - + 30000 30000 - + 32000 32000 - + Game Controller Mapping (%1) (#%2) Mapeo de Controles de Juego (%1) (#%2) - + Discard Controller Mapping? ¿Descartar Mapeo de Controlador? - + Discard mapping for this controller? If discarded, the controller will be reverted to a joystick once you refresh all joysticks. @@ -2231,47 +2240,47 @@ Si lo descarta, el controlador podrá revertirse a un mando una vez que se actua GameControllerSet - + Back - + Guide - + Start - + LS Click - + RS Click - + L Shoulder - + R Shoulder - + L Trigger - + R Trigger @@ -2279,9 +2288,9 @@ Si lo descarta, el controlador podrá revertirse a un mando una vez que se actua GameControllerTrigger - - - + + + Trigger Gatillo @@ -2289,9 +2298,9 @@ Si lo descarta, el controlador podrá revertirse a un mando una vez que se actua JoyAxis - - - + + + Axis Ejes @@ -2299,24 +2308,24 @@ Si lo descarta, el controlador podrá revertirse a un mando una vez que se actua JoyAxisButton - + Negative Negativo - + Positive Positivo - + Unknown Desconocido - - - + + + Button Botón @@ -2324,74 +2333,74 @@ Si lo descarta, el controlador podrá revertirse a un mando una vez que se actua JoyAxisContextMenu - + Mouse (Horizontal) Ratón (Horizontal) - + Mouse (Inverted Horizontal) Ratón (Horizontal Invertido) - + Mouse (Vertical) Ratón (Vertical) - + Mouse (Inverted Vertical) Ratón (Vertical Invertido) - + Arrows: Up | Down Direccionales: Arriba | Abajo - + Arrows: Left | Right Direccionales: Izquierda | Derecha - + Keys: W | S Teclas: W | S - + Keys: A | D Teclas: A | D - + NumPad: KP_8 | KP_2 Teclado Num: 8 | 2 - + NumPad: KP_4 | KP_6 Teclado Num: 4 | 6 - - + + None Nada - - + + Mouse Settings Configuracion de Ratón - + Left Mouse Button Botón Izquierdo del Ratón - + Right Mouse Button Botón Derecho del Ratón @@ -2399,57 +2408,57 @@ Si lo descarta, el controlador podrá revertirse a un mando una vez que se actua JoyButton - + Processing turbo for #%1 - %2 Procesando turbo para #%1 - %2 - + Finishing turbo for button #%1 - %2 Finalizando turbo para botón #%1 - %2 - + Processing press for button #%1 - %2 Procesando de presionado para botón #%1 - %2 - + Processing release for button #%1 - %2 Procesando de liberacion de botón #%1 - %2 - + Distance change for button #%1 - %2 Distancia de cambio para botón #%1 - %2 - - - + + + Button Botón - - - - + + + + [NO KEY] [SIN TECLA] - + [Set %1 1W] [Set %1 1W] - + [Set %1 2W] [Set %1 2W] - + [Set %1 WH] [Set %1 WH] @@ -2457,47 +2466,47 @@ Si lo descarta, el controlador podrá revertirse a un mando una vez que se actua JoyButtonContextMenu - + Toggle Alternar - + Turbo Turbo - + Clear Limpiar - + Set Select Seleccionar Set - + Disabled Inhabilitado - + Set %1 Set %1 - + Set %1 1W Set %1 1W - + Set %1 2W Set %1 2W - + Set %1 WH Set %1 WH @@ -2505,118 +2514,118 @@ Si lo descarta, el controlador podrá revertirse a un mando una vez que se actua JoyButtonSlot - - + + Mouse Ratón - + Up Arriba - + Down Abajo - + Left Izquierda - + Right Derecha - + LB BI - + MB BM - + RB BD - + B4 B4 - + B5 B5 - + Pause Pausa - + Hold Mantener - + Cycle Ciclo - + Distance Distancia - + Release Soltar - + Mouse Mod Raton Mod - + Press Time Tiempo de presionado - + Delay Retraso - + Load %1 Cargar %1 - + Set Change %1 Cambiar Set %1 - + [Text] %1 [Texto] %1 - + [Exec] %1 [Ejec] %1 - + [NO KEY] [SIN TECLA] @@ -2624,9 +2633,9 @@ Si lo descarta, el controlador podrá revertirse a un mando una vez que se actua JoyControlStick - - - + + + Stick Palanca @@ -2634,37 +2643,37 @@ Si lo descarta, el controlador podrá revertirse a un mando una vez que se actua JoyControlStickButton - - - + + + Up Arriba - - - + + + Down Abajo - - - + + + Left Izquierda - - - + + + Right Derecha - - - + + + Button Botón @@ -2672,67 +2681,67 @@ Si lo descarta, el controlador podrá revertirse a un mando una vez que se actua JoyControlStickContextMenu - + Mouse (Normal) Ratón (Normal) - + Mouse (Inverted Horizontal) Ratón (Horizontal Invertido) - + Mouse (Inverted Vertical) Ratón (Vertical Invertido) - + Mouse (Inverted Horizontal + Vertical) Ratón (Horizontal+Vertical Invertido) - + Arrows Direccionales - + Keys: W | A | S | D Teclas: W | A | S | D - + NumPad Teclado Num - + None Nada - + Standard Estándar - + Eight Way Ocho Vías - + 4 Way Cardinal 4 Vias Cardinal - + 4 Way Diagonal 4 Vias Diagonal - + Mouse Settings Configuracion de Ratón @@ -2740,86 +2749,86 @@ Si lo descarta, el controlador podrá revertirse a un mando una vez que se actua JoyControlStickEditDialog - + Dialog Dialogo - + X: - - - - - + + + + + 0 0 - + Y: - + Distance: Distancia: - + Presets: Presets: - + Mouse (Normal) Ratón (Normal) - + Mouse (Inverted Horizontal) Ratón (Horizontal Invertido) - + Mouse (Inverted Vertical) Ratón (Vertical Invertido) - + Mouse (Inverted Horizontal + Vertical) Ratón (Horizontal+Vertical Invertido) - + Arrows Direccionales - + Keys: W | A | S | D Teclas: W | A | S | D - + NumPad Teclado Num - + None Nada - + Stick Mode: Modo Palanca: - + Standard: 8 region stick with two direction buttons active when the stick is in a diagonal region. @@ -2846,72 +2855,72 @@ los puntos cardinales de la DPAD. Útil para los menús. a una zona de diagonal. - + 4 Way Cardinal 4 Vias Cardinal - + 4 Way Diagonal 4 Vias Diagonal - - + + Dead zone value to use for an analog stick. Valores de Zona Muerta usadas para una palanca analogica. - - + + Value when an analog stick is considered moved 100%. Valor cuando una palanca analogica se considera que se movió al 100%. - - + + The area (in degrees) that each diagonal region occupies. El área (en grados) que cada región ocupa. - + Square Stick: Palanca cuadrada: - - + + Percentage to modify a square stick coordinates to confine values to a circle Porcentaje para modificar las coordenadas de la palanca cuadrada para confinar valores para el ciclo - + % % - + Stick Delay: Retraso de Palanca: - - + + Time lapsed before a direction change is taken into effect. Tiempo transcurrido antes de un cambio de dirección tomado en efecto. - + s s - + Modifier: Modificador: - + Edit button that is active while the stick is active. This button is useful for assigning zones with @@ -2920,68 +2929,68 @@ functionality to an analog stick. - + PushButton Presione un Botón - + Na&me: Name: Nombre: - + Specify the name of an analog stick. Especificar un nombre para una palanca analogica. - + Mouse Settings Configuraciones de Ratón - + Standard Estándar - + Bearing: - + % Safe Zone: % Zona Segura: - + Eight Way Ocho Vías - + Dead Zone: Zona Muerta: - + Max Zone: Zona Maxima: - + Diagonal Range: Rango Diagonal: - + Set Set - + Set %1 Set %1 @@ -2989,9 +2998,9 @@ functionality to an analog stick. JoyControlStickModifierButton - - - + + + Modifier Modificador @@ -2999,9 +3008,9 @@ functionality to an analog stick. JoyDPad - - - + + + DPad DPad @@ -3009,37 +3018,37 @@ functionality to an analog stick. JoyDPadButton - - - + + + Up Arriba - - - + + + Down Abajo - - - + + + Left Izquierda - - - + + + Right Derecha - - - + + + Button Botón @@ -3047,266 +3056,271 @@ functionality to an analog stick. JoyTabWidget - - - - - - + + + + + + <New> - - + + Remove - - + + Remove configuration from recent list. - - + + Load Cargar - - + + Load configuration file. - - + + Save - - + + Save changes to configuration file. - - + + Save As - - + + Save changes to a new configuration file. - - + + Sets - + Copy from Set - + Settings Configuraciones - - + + Set 1 Set 1 - - + + Set 2 Set 2 - - + + Set 3 Set 3 - - + + Set 4 Set 4 - - + + Set 5 Set 5 - - + + Set 6 Set 6 - - + + Set 7 Set 7 - - + + Set 8 Set 8 - - + + Stick/Pad Assign Asignación de Palanca/Pad - - + + Controller Mapping - - + + Quick Set Configuración rápida - - + + Names - - + + Toggle button name displaying. - - + + Pref - - + + Change global profile settings. - - - + + + Reset - - + + Revert changes to the configuration. Reload configuration file. - + Open Config Abrir Config - + Config Files (*.amgp *.xml) Archivos de Config (*.amgp *.xml) - - - + + + Config File (*.%1.amgp) - - + + Do you really want to reset buttons settings for joystick? + + + + + Save Profile Changes? - - + + Changes to the new profile have not been saved. Would you like to save or discard the current profile? - - + + Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? - + Sticks Palancas - - + + DPads DPads - + No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. - - + + Set %1: %2 Set %1: %2 - - + + Set %1 Set %1 - + Copy Set Assignments - + Are you sure you want to copy the assignments and device properties from %1? - - - + + + Save Config - - + + Set Set @@ -3314,7 +3328,7 @@ to buttons or disable hiding empty buttons. Joystick - + Joystick Mando @@ -3322,98 +3336,98 @@ to buttons or disable hiding empty buttons. JoystickStatusWindow - + Properties Propiedades - + Details Detalles - + Name: Nombre: - - - - - - - + + + + + + + %1 %1 - + Number: Numero: - + Axes: Ejes: - + Buttons: Botones: - + Hats: Hats: - + GUID: GUID: - + Game Controller: Controlador de Juego: - + Axes Ejes - + Buttons Botones - + Hats Hats - + %1 (#%2) Properties %1 (#%2) Propiedades - + Axis %1 Ejes %1 - + Hat %1 Hat %1 - + No No - + Yes Si @@ -3421,62 +3435,67 @@ to buttons or disable hiding empty buttons. MainSettingsDialog - + Edit Settings Editar Configuraciones - + General General - + Controller Mappings Mapeo de controles - + Language Lenguaje - + Auto Profile Auto Perfil - + Mouse Ratón - + Advanced Avanzado - + + Profile Direc&tory: + + + + <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> <html><head/><body><p>Especificar el directorio por defecto que el programa debe utilizar en los diálogos de archivo cuando se carga un perfil o guardar un nuevo perfil.</p></body></html> - + Recent Profile Count: Contaje de Perfiles Recientes: - + <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> <html><head/><body><p>Número de perfiles que se puede colocar en la lista de perfil reciente. 0 dará lugar a que el programa no cumplir un límite en el número de perfiles que se muestran.</p></body></html> - + Gamepad Poll Rate: Taza de Sondeo de Mando: - + Change the poll rate that the program uses to discover new events from gamepads. Defaults to 10 ms. @@ -3491,29 +3510,29 @@ usar más energía de la CPU así que por favor probar la configuración que uti antes de usar Antimicro desatendida. - + Hide main window when the main window close button is clicked instead of quitting the program. Ocultar ventana principal cuando el botón de la ventana principal es estrecha se hace clic en lugar de salir del programa. - + Close To Tray Cerrar para la bandeja del sistema - + Have Windows start antimicro at system startup. Hacer que Windows inicie Antimicro junto con el sistema. - + Launch At Windows Startup Iniciar junto con Windows - + Display recent profiles for all controllers as a single list in the tray menu. Defaults to using sub-menus. @@ -3522,12 +3541,12 @@ como una única lista en el menú de la bandeja. predeterminados a la utilización de los submenús. - + Single Profile List in Tray Lista única de perfiles en la bandeja de sistema - + Have the program minimize to the taskbar. By default, the program minimizes to the system tray if available. @@ -3536,12 +3555,12 @@ Por defecto, el programa se minimiza en el sistema la bandeja si está disponible. - + Minimize to Taskbar Minimizar para la barra de tareas - + This option will cause the program to hide all buttons that have no slots assigned to them. The Quick Set dialog window will have to be used @@ -3552,12 +3571,12 @@ La ventana de diálogo de configuración rápida tendrá que ser utilizado para que aparezca el diálogo de edición para los botones del mando. - + Hide Empty Buttons Ocultar Botones Vacíos - + When the program is launched, open the last known profile that was opened during the previous session. @@ -3566,158 +3585,168 @@ perfil conocido que se abrió durante la sesión anterior. - + Auto Load Last Opened Profile Auto Cargar el ultimo perfil abierto - + Only show the system tray icon when the program first launches. Solamente mostrar el icono en la bandeja de sistema cuando el programa inicie por primera vez. - + Launch in Tray Lanzar en la bandeja del sistema - + Associate .amgp files with antimicro in Windows Explorer. Asociar archivos .amgp con antimicro en Windows Explorer. - + Associate Profiles Asociar Perfiles - + Key Repeat Repetición de Tecla - + Active keys will be repeatedly pressed when this option is enabled. Las teclas activadas serán presionadas repetidamente cuando esta opción esté activada. - - + + Enable Habilitar - + Specifies how much time should elapse before key repeating begins. Especifica cuánto tiempo debe transcurrir antes de repetión de tecla comienza. - + Specifies how many times key presses will be performed per seconds. Especifica cuántas veces se llevarán a cabo las pulsaciones de teclas por segundo. - + <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> <html><head/><body><p>Antimicro ha sido traducido a muchos idiomas diferentes por los contribuyentes. Por defecto, el programa elegirá una traducción apropiada basada en la configuración regional de su sistema. Sin embargo, puede hacer que la carga Antimicro una traducción diferente en función del idioma que elija en la lista siguiente.</p></body></html> - + Português do Brasil - + Français - + Deutsch - + Italiano - + 日本語 - + Русский - + српски / srpski - + 简体中文 - + Español - + українська - + Polski - + + History Si&ze: + + + + Log File: - + Log Level: - + None Nada - + Error - + Warning - + Info info - + Debug + + + Reset + + French Francés @@ -3743,22 +3772,22 @@ por segundo. Ucraniano - + Class Clase - + Title Titulo - + Program Programa - + Disable the "Enhanced Pointer Precision" Windows setting while antimicro is running. Disabling "Enhanced Pointer Precision" will allow mouse movement within antimicro to be more @@ -3769,32 +3798,31 @@ permitirá el movimiento del ratón dentro de Antimicro a ser más preciso. - + Disable Enhance Pointer Precision Desactivar la precisión del puntero mejorado - + Smoothing suavizado - Histor&y Size: - Tamaño del &Historial: + Tamaño del &Historial: - + Weight &Modifier: &Modificador de peso: - + Refresh Rate: Taza de Actualizacion: - + The refresh rate is the amount of time that will elapse in between mouse events. Please be cautious when editing this setting as it will cause the program to use @@ -3809,17 +3837,17 @@ inestabilidad del sistema. Por favor, probar la configuración antes de usar sin vigilancia. - + Spring Spring - + Screen: Pantalla: - + Utilize the specified screen for spring mode. On Linux, the default is to use the primary screen. On Windows, the default is to use all available screens. @@ -3828,29 +3856,29 @@ por defecto es el uso de la pantalla principal. En Windows, el valor por defecto es utilizar todas las pantallas disponibles. - + Accel Numerator: Numerador de Aceleración: - - - + + + 0 0 - + Accel Denominator: Denominador de Aceleración: - + Accel Threshold: Límite de Aceleración: - + If the acceleration values for the virtual mouse have been changed by a different process, particularly when quitting an older game, then you might want to reset the acceleration @@ -3861,37 +3889,36 @@ un juego antiguo, entonces es posible que desee restablecer la aceleración Los valores utilizados por el ratón virtual. - + Reset Acceleration Resetear Aceleración - + Delay: Retraso: - Profi&le Directory: - Directorio de Perfi&l: + Directorio de Perfi&l: - + ms ms - + Rate: Taza: - + times/s tiempo/s - + Below is a list of the custom mappings that have been saved. You can use the following table to delete mappings or have mappings temporarily disabled. You can also disable mappings that are included with SDL; just insert a new row with the appropriate joystick GUID and check disable. Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. @@ -3900,34 +3927,34 @@ Settings will not take affect until you either refresh all joysticks or unplug t Los ajustes no tendrán efecto hasta que actualizar todos los mandos o desenchufar el mando en particular. - + GUID GUID - + Mapping String Cadena de Mapeo - + Disable? Inhabilitar? - - + + Delete Borrar - + Insert Insertar - - + + Default Por Defecto @@ -3936,7 +3963,7 @@ Los ajustes no tendrán efecto hasta que actualizar todos los mandos o desenchuf Portugués de Brasil - + English Inglés @@ -3945,49 +3972,49 @@ Los ajustes no tendrán efecto hasta que actualizar todos los mandos o desenchuf Alemán - - + + Active Activo - + Devices: Dispositivos: - - + + All Todo - + Device Dispositivo - + Profile Perfil - + Default? Por Defecto? - + Add Agregar - + Edit Editar - + Also, Windows users who want to use a low value should also check the "Disable Enhance Pointer Precision" checkbox if you haven't disabled the option in Windows. @@ -3996,35 +4023,45 @@ the option in Windows. la opción en Windows. - + Select Default Profile Directory Seleccionar el Directorio de Perfil por defecto - + Are you sure you want to delete the profile? Está seguro que quiere borrar el perfil? - + Save Log File As - + Log Files (*.log) + + + Do you really want to reset setting? + + + + + Would you like to reset mappings too? + + MainWindow - + antimicro antimicro - + No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu Ningún Mando fue encontrado @@ -4035,115 +4072,115 @@ Por favor conecte un Mando y elija la opción "Actualizar Mandos" en e Si los eventos no son vistos por un juego, por favor haga clic aquí para ejecutar esta aplicación como administrador. - + If events are not seen by a game, please click here to run this application as Administrator. - + &App &App - + &Options &Opciones - + &Help A&yuda - - + + &Quit S&alir - + Ctrl+Q Ctrl+Q - - + + &Update Joysticks Act&ualizar Mandos - + Ctrl+U Ctrl+U - - + + &Hide O&cultar - + Ctrl+H Ctrl+H - + &About So&bre - + Ctrl+A Ctrl+A - + About &Qt - + &Properties - + &Key Checker - + &GitHub Page - + &Game Controller Mapping - + S&ettings - + &Stick/Pad Assign - + &Wiki - + &Issues - + &Calibration @@ -4160,7 +4197,7 @@ Por favor conecte un Mando y elija la opción "Actualizar Mandos" en e Verificador de Teclas - + Home Page Home Page @@ -4185,49 +4222,49 @@ Por favor conecte un Mando y elija la opción "Actualizar Mandos" en e Wiki - + Could not find a proper controller identifier. Exiting. No se pudo encontrar un identificador de controlador apropiado.Saliendo. - - - - - - - + + + + + + + (%1) (%1) - - + + Open File Abrir Archivo - + &Restore &Restaurar - + Calibration couldn't be opened - + You must connect at least one controller to open the window - + Run as Administrator? ¿Ejecutar como Administrador? - + Are you sure that you want to run this program as Adminstrator? Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. @@ -4236,17 +4273,17 @@ Some games run as Administrator which will cause events generated by antimicro t Algunos juegos se ejecutan como administrador lo que hará que los eventos generados por Antimicro para no ser utilizado por aquellos juegos a menos Antimicro también se ejecuta como el Adminstrator. Esto se debe a problemas de permisos causadas por las opciones de Control de cuentas de usuario (UAC) en Windows Vista y versiones posteriores. - + Failed to elevate program Fallo al elevar el programa - + Failed to restart this program as the Administrator Fallo al reiniciar este programa como administrador - + Could not find controller. Exiting. No se pudo encontrar un controlador. Saliendo. @@ -4254,12 +4291,12 @@ Algunos juegos se ejecutan como administrador lo que hará que los eventos gener MouseAxisSettingsDialog - + Mouse Settings - Configuraciones de Ratón - - + Set %1 Set %1 @@ -4267,12 +4304,12 @@ Algunos juegos se ejecutan como administrador lo que hará que los eventos gener MouseButtonSettingsDialog - + Mouse Settings - Configuraciones de Ratón - - + Set %1 Set %1 @@ -4280,12 +4317,12 @@ Algunos juegos se ejecutan como administrador lo que hará que los eventos gener MouseControlStickSettingsDialog - + Mouse Settings Configuraciones de Ratón - + Set %1 Set %1 @@ -4293,12 +4330,12 @@ Algunos juegos se ejecutan como administrador lo que hará que los eventos gener MouseDPadSettingsDialog - + Mouse Settings Configuraciones de Ratón - + Set %1 Set %1 @@ -4306,17 +4343,17 @@ Algunos juegos se ejecutan como administrador lo que hará que los eventos gener MouseSettingsDialog - + Mouse Settings Configuracion de Ratón - + Mouse Mode: Modo Ratón: - + Cursor mode is used to move the mouse cursor around the screen relative to its current position depending on how much you move an axis @@ -4330,79 +4367,79 @@ axis is moved back to the dead zone. - + Cursor Cursor - + Spring Spring - + Acceleration: Aceleración: - + Enhanced Precision Puntero Mejorado - - + + Linear - + Quadratic - + Cubic - + Quadratic Extreme - + Power Function - + Easing Quadratic - + Easing Cubic - + Mouse Speed Settings - + Enable to change the horizontal and vertical speed boxes at the same time. - + Change Together - + Options for adding more acceleration to the mouse movement beyond what the acceleration curve would produce. Acceleration is added based on how quickly an axis is @@ -4412,17 +4449,17 @@ using typical gamepad analog sticks. - + Delta Acceleration - + &Multiplier: - + Mi&n Threshold: @@ -4434,8 +4471,8 @@ Speed: Horizontal: - - + + 1 = 20 pps @@ -4446,30 +4483,30 @@ Speed: Vertical: - + Wheel Hori. Speed: - + Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. - + Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. - + Sensitivit&y: - + For Power Function acceleration curve. Specifies the factor to use for curve sensitivity. When the value is above 1.0, the mouse movement will be accelerated @@ -4477,13 +4514,13 @@ faster at the low end of an axis. - + Easing Duration: - - + + s s @@ -4496,22 +4533,22 @@ faster at the low end of an axis. Multiplicador: - + Highest value to accelerate mouse movement by - + x - + Start %: - + Acceleration begins at this percentage of the base multiplier La aceleración comienza en este porcentaje de la base de multiplicador @@ -4522,93 +4559,93 @@ Threshold: Mínimo: - + Minimum amount of axis travel required for acceleration to begin cantidad mínima de recorrido del eje requerido para la aceleración a comenzar - + Max Threshold: Límite Máximo: - + Maximum axis travel before acceleration has reached the multiplier value El recorrido máximo del eje antes de la aceleración ha alcanzado el valor del multiplicador - + E&xtra Duration: - + Curve: Curva: - + Ease Out Sine - + Ease Out Quad - + Ease Out Cubic - + Release Radius: - + Specifies that the spring area will be relative to the mouse position set by a non-relative spring. - + Relative - + Mouse Status - + X: - - + + 0 (0 pps) - + Y: - - + + 1 = 1 notch(es)/s - + Enhanced: Three tier curve that makes the mouse move slow on the low end of an axis and fast on the high end. @@ -4630,77 +4667,77 @@ a period of time using a Cubic curve. - + Hori&zontal Speed: - + &Vertical Speed: - + Wheel Vert. Speed: - + Specifies the amount of time (in seconds) that will be required before the mouse is fully accelerated after reaching the high end of an axis. - - - - + + + + % % - + Extend the time that extra acceleration is applied. Axis travel will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. - + Spring Settings - + Spring Width: - + Changes the width of the region that the cursor can move in spring mode. 0 will use the entire width of your screen. - + Spring Height: - + Changes the height of the region that the cursor can move in spring mode. 0 will use the entire height of your screen. - - + + %n notch(es)/s %n notch/s @@ -4711,7 +4748,7 @@ of your screen. QKeyDisplayDialog - + Key Checker Verificador de Teclas @@ -4720,34 +4757,34 @@ of your screen. <html><head/><body><p>Presione una tecla del teclado para ver cómo se detecta la tecla por esta aplicación. La ventana mostrará el valor de la tecla del sistema nativo, el valor original dada por Qt (si es el caso), y el valor personalizado utilizado por Antimicro. </p><p> El valor de la tecla Antimicro y el valor de tecla Qt generalmente es la misma . Antimicro intenta utilizar los valores de las claves definidas en Qt cuando sea posible. Vea la página <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> para una lista de valores definidos por Qt. Si descubre que la tecla no es compatible de forma nativa por este programa, por favor informa del problema al estilo de Antimicro <a href="https://github.com/AntiMicro/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> para que el programa pueda editarlo para soportarlo directamente. Tal como es, se añade un prefijo personalizado para valores desconocidos por lo que todavía se pueden utilizar; el principal problema es que el perfil ya no será portátil.</p></body></html> - - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - + Event Handler: Controlador de eventos: - + Native Key Value: Valor de tecla nativo: - - - + + + 0x00000000 0x00000000 - + Qt Key Value: Valor QT de Tecla: - + antimicro Key Value: Valor Antimicro de Tecla: @@ -4755,285 +4792,285 @@ of your screen. QObject - + Super - + Menu Menu - + Mute - + Vol+ - + Vol- - + Play/Pause - + Play - + Pause Pausa - + Prev - + Next - + Mail - + Home - + Media Media - + Search Buscar - + Daemon launched - + Failed to launch daemon - + Launching daemon - - + + Display string "%1" is not valid. - + Failed to set a signature id for the daemon - + Failed to change working directory to / - + Quitting Program Saliendo del Programa - + # of joysticks found: %1 # de mandos econtrados: %1 - + List Joysticks: Lista de Mandos: - + --------------- - + Joystick %1: - + Index: %1 - + GUID: %1 GUID: %1 - + Name: %1 Nombre: %1 - + Yes Si - + No No - + Game Controller: %1 Controlador de Juego: %1 - + # of Axes: %1 - + # of Buttons: %1 - + # of Hats: %1 - + Attempting to use fallback option %1 for event generation. - + Failed to open event generator. Exiting. - + Using %1 as the event generator. - + Could not raise process priority. - + Last button - + There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? - + Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". - + Profile location %1 is not an XML file. Localización de Perfil %1 no es un archivo XML válido. - + Profile location %1 does not exist. Localización de Perfil %1 No existe. - - - + + + Controller identifier is not a valid value. - + An invalid set number '%1' was specified. Un numero de Set inválido '%1' fué especificado. - + Controller identifier '%s'' is not a valid value. Controlador idendificado '%s'' no es un valor válido (valga la redundancia). - + No set number was specified. - + No controller was specified. - + No display string was specified. Ninguna cadena de exibición fué especificado. - + An invalid event generator was specified. - + No event generator string was specified. - + No log file specified. - + Logging started - + Auto-switching to profile "%1". - + Auto-switching to nullptr profile! - + xinput version must be at least 2.0. No mouse acceleration changes will occur. La versión xinput debe ser al menos 2,0. no se producirán cambios en la aceleración del ratón. @@ -5041,18 +5078,18 @@ of your screen. QuickSetDialog - + Quick Set Configuración rápida - + <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> <html><head/><body><p>Por favor, pulse un botón o mueva un eje en %1 (<span style=" font-weight:600;">%2</span>).<br/>una ventana de diálogo aparecerá entonces<br/>permitirá crear una asignación.</p></body></html> - - + + Quick Set %1 Configuración rápida %1 @@ -5060,12 +5097,12 @@ of your screen. SetAxisThrottleDialog - + Throttle Change Cambio del acelerador - + The throttle setting for Axis %1 has been changed. Would you like to distribute this throttle change to all sets? @@ -5077,12 +5114,12 @@ Would you like to distribute this throttle change to all sets? SetJoystick - + Set %1: %2 Set %1: %2 - + Set %1 Set %1 @@ -5090,52 +5127,52 @@ Would you like to distribute this throttle change to all sets? SetNamesDialog - + Set Name Settings Config Nombre de Set - + Set 1 Set 1 - + Set 2 Set 2 - + Set 3 Set 3 - + Set 4 Set 4 - + Set 5 Set 5 - + Set 6 Set 6 - + Set 7 Set 7 - + Set 8 Set 8 - + Name Nombre @@ -5143,7 +5180,7 @@ Would you like to distribute this throttle change to all sets? SimpleKeyGrabberButton - + Mouse Ratón @@ -5151,7 +5188,7 @@ Would you like to distribute this throttle change to all sets? SpringModeRegionPreview - + Spring Mode Preview Vista previa de modo Spring @@ -5159,7 +5196,7 @@ Would you like to distribute this throttle change to all sets? UInputEventHandler - + Could not find a valid uinput device file. Please check that you have the uinput module loaded. lsmod | grep uinput @@ -5168,14 +5205,14 @@ Por favor, compruebe que tiene el módulo uinput cargado. lsmod | grep uinput - + Could not open uinput device file Please check that you have permission to write to the device No se pudo abrir archivo de dispositivo uinput Por favor, compruebe que tiene permiso para escribir en el dispositivo - + Using uinput device file %1 El uso de archivos del dispositivo uinput %1 @@ -5183,551 +5220,551 @@ Por favor, compruebe que tiene permiso para escribir en el dispositivo UInputHelper - + a - + b - + c - + d - + e - + f - + g - + h - + i - + j - + k - + l - + m - + n - + o - + p - + q - + r - + s s - + t - + u - + v - + w - + x - + y - + z - + Esc - + F1 - + F2 - + F3 - + F4 - + F5 - + F6 - + F7 - + F8 - + F9 - + F10 - + F11 - + F12 - + ` ` - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - - + + - - - + = = - + BackSpace - + Tab - + [ [ - + ] ] - + \ \ - + CapsLock - + ; ; - + ' ' - + Enter - + Shift_L - + , , - - + + . . - - + + / / - + Ctrl_L - - + + Super_L - + Alt_L - + Space - + Alt_R - + Menu Menu - + Ctrl_R - + Shift_R - + Up Arriba - + Left Izquierda - + Down Abajo - + Right Derecha - + PrtSc - + Ins - + Del - + Home - + End - + PgUp - + PgDn - + NumLock - + * * - + + + - + KP_Enter Enter_Num - + KP_1 - + KP_2 - + KP_3 - + KP_4 - + KP_5 - + KP_6 - + KP_7 - + KP_8 - + KP_9 - + KP_0 - + SCLK SCLK - + Pause Pausa - + Super_R - + Mute - + VolDn - + VolUp - + Play - + Stop - + Prev - + Next - + [NO KEY] [SIN TECLA] @@ -5735,54 +5772,54 @@ Por favor, compruebe que tiene permiso para escribir en el dispositivo UnixWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: Clase: - - - + + + TextLabel - + Title: Titulo: - + Path: Camino: - + Match By Properties - + Class Clase - + Title Titulo - + Path Camino @@ -5790,9 +5827,9 @@ Por favor, compruebe que tiene permiso para escribir en el dispositivo VDPad - - - + + + VDPad VDPad @@ -5800,224 +5837,224 @@ Por favor, compruebe que tiene permiso para escribir en el dispositivo VirtualKeyPushButton - + Space Espaciador - + Tab Tabulador - + Shift (L) Mayus (Izq) - + Shift (R) Mayus (Der) - + Ctrl (L) Ctrl (Izq) - + Ctrl (R) Ctrl (Der) - + Alt (L) Alt (Izq) - - + + Alt (R) Alt (Der) - + Alt Gr - + ` ` - + ~ ~ - - + + - - - + = = - + [ [ - + ] ] - + \ \ - + Caps Caps - + ; ; - + ' ' - + , , - - + + . . - - + + / / - + ESC ESC - + PRTSC PRTSC - + SCLK SCLK - + INS INS - + PGUP RePag - + DEL SUPR - + PGDN AvPag - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - + NUM LK BLOCK NUM - - + + * * - + + + - + Enter @@ -6034,42 +6071,42 @@ E R - + < < - + : : - + Super (L) Super (Izq) - + Menu Menu - + Up Arriba - + Down Abajo - + Left Izquierda - + Right Derecha @@ -6077,241 +6114,241 @@ R VirtualKeyboardMouseWidget - - + + Keyboard Teclado - - + + Mouse Ratón - + Mouse Settings Configuraciones de Ratón - + Left Mouse Ratón Izquierda - + Up Mouse Ratón Arriba - + Left Button Mouse Ratón Boton Izquierdo - + Middle Button Mouse Ratón Boton del Medio - + Right Button Mouse Ratón Botón Derecho - + Wheel Up Mouse Ratón Rueda Arriba - + Wheel Left Mouse Ratón Rueda Izquierda - + Wheel Right Mouse Ratón Rueda Derecha - + Wheel Down Mouse Ratón Rueda Abajo - + Down Mouse Ratón Abajo - + Right Mouse Ratón Derecha - + Button 4 Mouse Ratón Botón 4 - + Mouse 8 Mouse Ratón Ratón 8 - + Button 5 Mouse Ratón Botón 5 - + Mouse 9 Mouse Ratón Ratón 9 - + NONE NADA - - + + Last button - - + + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + Others - + Applications Aplicaciones - + Browser Back Navegador Atrás - + Browser Favorites Navegador Favoritos - + Browser Forward Navegador Adelante - + Browser Home Navegador Inicio - + Browser Refresh Navegador Actualizar - + Browser Search Navegador Busca - + Browser Stop Navegador Parar - + Calc Calc - + Email Email - + Media Media - + Media Next Media Próximo - + Media Play Media Reproduzir - + Media Previous Media Anterior - + Media Stop Media Parar - + Search Buscar - + Volume Down Volume Bajar - + Volume Mute Volume Mudo - + Volume Up Volume Subir @@ -6319,7 +6356,7 @@ R VirtualMousePushButton - + INVALID INVALIDO @@ -6327,28 +6364,28 @@ R WinAppProfileTimerDialog - - + + Capture Application Solicitación de Captura - + After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. Después de pulsar el botón "Solicitud de captura", por favor, seleccione la ventana de la aplicación que desea tener un perfil asociado. La aplicación activa será capturado después del número de segundos seleccionado. - + Timer: Temporizador: - + Seconds Segundos - + Cancel Cancelar @@ -6356,12 +6393,12 @@ R WinExtras - + [NO KEY] [SIN TECLA] - + AntiMicro Profile Perfil AntiMicro @@ -6369,67 +6406,66 @@ R X11Extras - + ESC ESC - + Tab Tab - + Space espaciador - + DEL SUPR - + Return ENTER - + KP_Enter Enter_Num - + Backspace Backspace - + Alt Gr - + xinput extension was not found. No mouse acceleration changes will occur. No se ha encontrado la extensión xinput. no se producirán cambios en la aceleración del ratón. - + xinput version must be at least 2.0. No mouse acceleration changes will occur. La versión xinput debe ser al menos 2,0. no se producirán cambios en la aceleración del ratón. - Virtual pointer found with id=%1. - Puntero virtual encontrado con el id=%1. + Puntero virtual encontrado con el id=%1. - + PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 PeerFeedback clase no se encontró para el puntero virtual. Ningún cambio en la aceleración del ratón se producirá para el dispositivo con el id=%1 - + Changing mouse acceleration for device with id=%1 Cambiando la aceleración del ratón para el dispositivo con id=%1 @@ -6437,7 +6473,7 @@ R XMLConfigReader - + Could not write updated profile XML to file %1. No se puede escribir XML del perfil actualizado en el archivo %1. @@ -6445,7 +6481,7 @@ R XMLConfigWriter - + Could not write to profile at %1. No se pudo escribir al perfil en %1. @@ -6453,7 +6489,7 @@ R antimicro - + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. @@ -6461,97 +6497,97 @@ R main - + Launch program in system tray only. - + Launch program with the tray menu disabled - + Launch program without the main window displayed - + Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers - + location - + Apply configuration file to a specific controller. Value can be a controller index, name, or GUID - + value - + Unload currently enabled profile(s) - + value(s) - + Start joysticks on a specific set. Value can be a controller index, name, or GUID - + number value - + Launch program as a daemon. Use only on Linux. - + Enable logging - + log-type - + Choose a file for logs writing - + filename - + Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. - + event-generation-type - + Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. diff --git a/share/antimicro/translations/antimicro_fr.ts b/share/antimicro/translations/antimicro_fr.ts old mode 100644 new mode 100755 index b7e04faf3..e7565fb50 --- a/share/antimicro/translations/antimicro_fr.ts +++ b/share/antimicro/translations/antimicro_fr.ts @@ -4,17 +4,17 @@ AboutDialog - + About À propos - + Version - + "juliagoda" (since March, 2018) Wanting only to play my favourite old games that din't support gamepads, I found this project (which map keyboard keys and mouse buttons to connected gamepads on Linux) as most proper and recent. But because of poor choices of such application on the internet and since it didn't compile properly, I decided to rescue the project. However, once I finished my work (enough to enjoy playing games) I thought about sharing this code with others. Of course all informations about past programmers will be held. "Ryochan7" (since December 30, 2012 until 2017), I have been working on antimicro in my spare time. What originally started as a fork of QJoyPad and a way to learn proper event-driven programming has turned into something much bigger than I originally intended. Although I have spent a lot of time learning new techniques, finding out more about the domain of KB+M emulation, and spending Friday nights bashing my head against my keyboard, it has been a fun and enriching experience overall. @@ -32,17 +32,17 @@ As of May 24, 2016, this project has moved to https://github.com/AntiMicro/antim - + Copyright: 2013 - 2018 - + Info - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -86,7 +86,7 @@ p, li { white-space: pre-wrap; } - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -204,57 +204,57 @@ p, li { white-space: pre-wrap; } - + Changelog - + Credits Crédits - + antimicro - + About Development - + License License - + Program Version %1 - + Program Compiled on %1 at %2 - + Built Against SDL %1 - + Running With SDL %1 - + Using Qt %1 - + Using Event Handler: %1 @@ -262,151 +262,156 @@ p, li { white-space: pre-wrap; } AddEditAutoProfileDialog - + Auto Profile Dialog - + Profile: - - + + Browse - + Window: - - + + Select Window. Click on the appropriate application window and the application file path will be populated in the form. - + Detect Window Properties - + Class: - + Title: - + + set partial title + + + + Application: - + Select - - Devices: + + De&vices: - - + + Select this profile to be the default loaded for the specified device. The selection will be used instead of the all default profile option. - + Set as Default for Controller - - + + A different profile is already selected as the default for this device. - + Current (%1) - + Open Config Charger un fichier de configuration - - + + Select Program - + Programs (*.exe) - + Please use the main default profile selection. - + Please select a window by using the mouse. Press Escape if you want to cancel. - + Capture Application Window - + Could not obtain information for the selected window. - + Application Capture Failed - + Profile file path is invalid. - + No window matching property was specified. - + Program path is invalid or not executable. - + File is not an .exe file. - + No window matching property was selected. @@ -414,187 +419,187 @@ of the all default profile option. AdvanceButtonDialog - - + + Advanced Avancé - + Assignments Assignements - + Toggle Maintient de la pression - + Turbo Turbo - + Set Selector Séléction de réglage - + Blank or KB/M - + Hold Maintenir - + Pause Pause - + Cycle Cycle - + Distance Distance - + Insert Insérer - + Delete Supprimer - + Clear All Nettoyer - + Time: Temps : - + 0.01s 0,01s - + 0s 0s - + Insert a pause that occurs in between key presses. Insére une pause de la durée indiquée entre la pression des touches. - + Release Relâchement - - + + Insert a new blank slot. Insere un nouvel emplacement vide. - + Delete a slot. Supprime un emplacement. - + Clear all currently assigned slots. Supprime tous les emplacements assignés. - + Specify the duration of an inserted Pause or Hold slot. Spécifie la durée de Pause ou de Maintien. - + 0m 0m - + &Mouse Speed Mod: - - + + Specify the range past an axis dead zone in which a sequence of actions will execute. Spécifie la distance par rapport à la zone morte pour exécuter la suite des actions. - + Distance: Distance : - - + + % % - + Mouse Mod Mode de la Souris - + Press Time - + Delay - + Execute - + Load Charger - + Set Change - + Text Entry - + Placeholder Espace réservé - - + + 0 0 @@ -603,317 +608,317 @@ of the all default profile option. Vitesse du Mode de la Souris : - + Set the percentage that mouse speeds will be modified by. Régler toutes les vitesses de la souris avec le pourcentage spécifié. - + Auto Reset Cycle After - + seconds - + Executable: - + ... - + Arguments: - - - + + + Enabled Activé - + Mode: - + <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> - + Normal Normal - + Gradient - + Pulse - + Delay: Intervalle : - + 0.10s 0,10s - + Rate: Taux : - + 10.0/s 10,0/s - - + + Disabled Désactivé - + Select Set 1 One Way Séléction du réglage N°1 : Aller - + Select Set 1 Two Way Séléction du réglage N°1 : Aller-Retour - + Select Set 1 While Held Séléction du réglage N°1 : Pendant la pression - + Select Set 2 One Way Séléction du réglage N°2 : Aller - + Select Set 2 Two Way Séléction du réglage N°2 : Aller-Retour - + Select Set 2 While Held Séléction du réglage N°2 : Pendant la pression - + Select Set 3 One Way Séléction du réglage N°3 : Aller - + Select Set 3 Two Way Séléction du réglage N°3 : Aller-Retour - + Select Set 3 While Held Séléction du réglage N°3 : Pendant la pression - + Select Set 4 One Way Séléction du réglage N°4 : Aller - + Select Set 4 Two Way Séléction du réglage N°4 : Aller-Retour - + Select Set 4 While Held Séléction du réglage N°4 : Pendant la pression - + Select Set 5 One Way Séléction du réglage N°5 : Aller - + Select Set 5 Two Way Séléction du réglage N°5 : Aller-Retour - + Select Set 5 While Held Séléction du réglage N°5 : Pendant la pression - + Select Set 6 One Way Séléction du réglage N°6 : Aller - + Select Set 6 Two Way Séléction du réglage N°6 : Aller-Retour - + Select Set 6 While Held Séléction du réglage N°6 : Pendant la pression - + Select Set 7 One Way Séléction du réglage N°7 : Aller - + Select Set 7 Two Way Séléction du réglage N°7 : Aller-Retour - + Select Set 7 While Held Séléction du réglage N°7 : Pendant la pression - + Select Set 8 One Way Séléction du réglage N°8 : Aller - + Select Set 8 Two Way Séléction du réglage N°8 : Aller-Retour - + Select Set 8 While Held Séléction du réglage N°8 : Pendant la pression - + sec. - + /sec. - + Set %1 - - + + Select Set %1 - + One Way - + Two Way - + While Held - + Choose Executable - + Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. - + Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. - + Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. - + Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. - + Chose a profile to load when this slot is activated. - + Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. - + Specify the time that keys past this slot should be held down. - + Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. - + Change to selected set once slot is activated. - + Full string will be typed when a slot is activated. - + Execute program when slot is activated. - - + + Choose Profile - + Config Files (*.amgp *.xml) @@ -921,157 +926,157 @@ of the all default profile option. AdvanceStickAssignmentDialog - + Stick/Pad Assignment Assignement du Stick/Pad - + Sticks Sticks - + DPads DPads - - + + %1 (Joystick %2) %1 (Manette %2) - + Stick 1 Stick 1 - - - + + + Enabled Activé - - - - - - + + + + + + Assign Assigner - - + + X Axis: Axe X : - - + + Y Axis: Axe Y : - + Stick 2 Stick 2 - + Number of Physical DPads: %1 Numéro du DPads Physique : %1 - + Virtual DPad 1 DPad Virtuel 1 - + Up: Haut : - + Down: Bas : - + Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. - + Left: Gauche : - + Right: Droite : - - - - + + + + Axis %1 Axe %1 - - - - + + + + Axis %1 - Axe %1 - - - - - + + + + Axis %1 + Axe %1 + - - - - + + + + Button %1 Bouton %1 - + Move stick 1 along the X axis Déplacer le stick 1 selon l'axe X - + Move stick 1 along the Y axis Déplacer le stick 1 selon l'axe Y - + Move stick 2 along the X axis Déplacer le stick 2 selon l'axe X - + Move stick 2 along the Y axis Déplacer le stick 1 selon l'axe Y - - - - + + + + Press a button or move an axis Presser un bouton ou bouger un axe @@ -1079,180 +1084,180 @@ of the all default profile option. AxisEditDialog - + Axis Axe - - + + Mouse (Horizontal) Souris (Horizontal) - - + + Mouse (Inverted Horizontal) Souris (Horizontal Inversé) - - + + Mouse (Vertical) Souris (Vertical) - - + + Mouse (Inverted Vertical) Souris (Vertical Inversé) - - + + Arrows: Up | Down Flèches : Haut | Bas - - + + Arrows: Left | Right Flèches : Gauche | Droite - - + + Keys: W | S Touches : W | S - - + + Keys: A | D Touches : A | D - - + + NumPad: KP_8 | KP_2 Pavé Numérique : KP_8 | KP_2 - - + + NumPad: KP_4 | KP_6 Pavé Numérique : KP_4 | KP_6 - - - + + + None Aucun - - + + Set the value to use as the limit for an axis. Useful for a worn out analog stick. - + Negative Half Throttle Demie accélération négative - + Positive Half Throttle Demie accélération positive - + Name: Nom : - + Specify the name of an axis. Indiquer le nom d'un axe. - + Mouse Settings Configurations de la Souris - - + + Set the value of the dead zone for an axis. Régler la valeur de la zone morte pour un axe. - + Presets: Pré-réglages : - + Dead Zone: Zone morte : - + Max Zone: Zone maximale : - - + + [NO KEY] [AUCUNE TOUCHE] - + Throttle setting that determines the behavior of how to interpret an axis hold or release. Configure l’accélération qui détermine le comportement de maintien ou de relâchement d'un axe. - + Negative Throttle Accélération négative - + Normal Normal - + Positive Throttle Accélération positive - + Current Value: Valeur actuelle : - + Set Configuration - + Set %1 - + Left Mouse Button - + Right Mouse Button @@ -1260,37 +1265,37 @@ de maintien ou de relâchement d'un axe. ButtonEditDialog - + Dialog Dialogue - + To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab Pour assigner une touche à ce bouton, presser celle-ci ou cliquer sur son équivalent graphique dans les onglets clavier et souris - + Placeholder Espace réservé - + Toggle Pression continue - + Enables a key press or release to only occur when a controller button is pressed. Permet d'appuyer ou de relâcher une touche uniquement lorsqu'un bouton est pressé. - + Enables rapid key presses and releases. Turbo controller. Permet d'appuyer et de relâcher très rapidement une touche en maintenant pressé un bouton. Contrôle du Turbo. - + Turbo Turbo @@ -1299,39 +1304,39 @@ de maintien ou de relâchement d'un axe. Actuellement : - + Last keyboard/mouse button: - + Slots Emplacements - + Na&me: Nom : - + Specify the name of a button. Indiquer le nom d'un bouton. - + Action: Action : - + Specify the action that will be performed in game while this button is being used. Indiquer l'action qui sera exécutée pendnt le jeu lorsque que ce bouton est utilisé. - + Advanced Avancé @@ -1340,52 +1345,52 @@ lorsque que ce bouton est utilisé. Configuration - - - + + + Choose your keyboard key - + No button - - - - + + + + Last button - + To change settings for last button, it must be at least one assignment from keyboard to gamepad - + To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad - + To open advanced dialog, it's needed to map at least one button from keyboard to gamepad - + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + As last gamepad button has been set - + Index %1 @@ -1393,190 +1398,190 @@ lorsque que ce bouton est utilisé. Calibration - + Form - - + + Start calibration - + Controller: - + Sticks: - - Use settings from jstest-gtk - - - - + Reset settings - + Cancel - - + + Save Enregistrer - - + + Calibration - - Do you really want to reset settings of current axes? + + Do you really want to reset settings of current axis? - + Calibration was saved for the preset. Do you really want to reset settings? - + Place the joystick in the center position. It's the part, where often you don't have to move. Just skip it in such situation. - + Calibrating center - + Start second step - + Center X: %1 - + Center Y: %1 - + Place the joystick in the top-left corner many times - - + + Calibrating position - - + + X: %1 - - + + Y: %1 - + Place the joystick in the bottom-right corner - + Start final step - + range X: %1 - %2 - + range Y: %1 - %2 - + deadzone X: %1 - + deadzone Y: %1 - + ---Calibration done!--- - + Calibration values have been saved - - + + Dead zone calibration - - You must move X axis to the right at least five times! Keep moving! + + You have to move axes to the top-left corner at least five times. + + + + + You have to move axes to the bottom-right corner at least five times. - - You must move X axis to the left at least five times! Keep moving! + + Do you want to save calibration of current axis? - - - - + + + + Axis %1 Axe %1 @@ -1584,64 +1589,64 @@ deadzone Y: %1 CapturedWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: - - - + + + TextLabel - + Title: - + Path: - + Match By Properties - + Class - + Title - + Path - + Full Path - + File Name @@ -1712,67 +1717,67 @@ deadzone Y: %1 DPadContextMenu - + Mouse (Normal) Souris (Normal) - + Mouse (Inverted Horizontal) Souris (Horizontal Inversé) - + Mouse (Inverted Vertical) Souris (Vertical Inversé) - + Mouse (Inverted Horizontal + Vertical) Souris (Vertical et Horizontal Inversés) - + Arrows Flèches - + Keys: W | A | S | D Touches :W | A | S | D - + NumPad - + None - + Standard Standard - + Eight Way Eight Way - + 4 Way Cardinal - + 4 Way Diagonal - + Mouse Settings Configurations de la Souris @@ -1780,108 +1785,108 @@ deadzone Y: %1 DPadEditDialog - + Dialog Dialogue - + Presets: Pré-réglages : - + Mouse (Normal) Souris (Normal) - + Mouse (Inverted Horizontal) Souris (Horizontal Inversé) - + Mouse (Inverted Vertical) Souris (Vertical Inversé) - + Mouse (Inverted Horizontal + Vertical) Souris (Vertical et Horizontal Inversés) - + Arrows Flèches - + Keys: W | A | S | D Touches :W | A | S | D - + NumPad Pavé Numérique - + None Aucun - + Dpad Mode: Mode Dpad : - + &Name: - + 4 Way Cardinal - + 4 Way Diagonal - + DPad Delay: - - + + Time lapsed before a direction change is taken into effect. - + s - + Specify the name of a dpad. Indiquer le nom d'un dpad. - + Mouse Settings Configurations de la Souris - + Standard Standard - + Standard: 8 region dpad with two direction buttons active when the dpad is in a diagonal region. @@ -1897,17 +1902,17 @@ to a diagonal zone. - + Eight Way Eight Way - + Set Configuration - + Set %1 @@ -1915,27 +1920,27 @@ to a diagonal zone. EditAllDefaultAutoProfileDialog - + Default Profile - + Profile: - + Browse - + Open Config Charger un fichier de configuration - + Profile file path is invalid. @@ -1943,29 +1948,29 @@ to a diagonal zone. ExtraProfileSettingsDialog - + Extra Profile Settings - + Key Press Time: - + 0.00 ms - + Profile Name: - - - + + + s @@ -1973,7 +1978,7 @@ to a diagonal zone. GameController - + Game Controller @@ -1981,9 +1986,9 @@ to a diagonal zone. GameControllerDPad - - - + + + DPad @@ -1991,187 +1996,187 @@ to a diagonal zone. GameControllerMappingDialog - + Game Controller Mapping Cartographie de contrôleur de jeu - + <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> - + A - + B - + X - + Y - + Back Retour - + Start - + Guide - + Left Shoulder Latéral gauche - + Right Shoulder Latéral droit - + Left Stick Click Clic Stick Gauche - + Right Stick Click Clic Stick Droite - + Left Stick X Stick Gauche X - + Left Stick Y Stick Gauche Y - + Right Stick X Stick Droit X - + Right Stick Y Stick Droit Y - + Left Trigger Gachette gauche - + Right Trigger Gachette droite - + DPad Up DPad Haut - + DPad Left DPad Gauche - + DPad Down DPad Bas - + DPad Right DPad Droit - + Mapping Cartographie - + SDL 2 Game Controller Mapping String - + Last Axis Event: - + Current Axis Detection Dead Zone: - + 5000 5000 - + 10000 10000 - + 15000 15000 - + 20000 20000 - + 25000 25000 - + 30000 30000 - + 32000 32000 - + Game Controller Mapping (%1) (#%2) - + Discard Controller Mapping? Désactivé la cartographie de contrôleur de jeu ? - + Discard mapping for this controller? If discarded, the controller will be reverted to a joystick once you refresh all joysticks. @@ -2183,47 +2188,47 @@ S'il est éliminé, le contrôleur redeviendra un joystick une fois tous le GameControllerSet - + Back Retour - + Guide - + Start - + LS Click - + RS Click - + L Shoulder - + R Shoulder - + L Trigger - + R Trigger @@ -2231,9 +2236,9 @@ S'il est éliminé, le contrôleur redeviendra un joystick une fois tous le GameControllerTrigger - - - + + + Trigger Gachette @@ -2241,9 +2246,9 @@ S'il est éliminé, le contrôleur redeviendra un joystick une fois tous le JoyAxis - - - + + + Axis Axe @@ -2251,24 +2256,24 @@ S'il est éliminé, le contrôleur redeviendra un joystick une fois tous le JoyAxisButton - + Negative Négatif - + Positive Positif - + Unknown Inconnu - - - + + + Button Bouton @@ -2276,74 +2281,74 @@ S'il est éliminé, le contrôleur redeviendra un joystick une fois tous le JoyAxisContextMenu - + Mouse (Horizontal) Souris (Horizontal) - + Mouse (Inverted Horizontal) Souris (Horizontal Inversé) - + Mouse (Vertical) Souris (Vertical) - + Mouse (Inverted Vertical) Souris (Vertical Inversé) - + Arrows: Up | Down Flèches : Haut | Bas - + Arrows: Left | Right Flèches : Gauche | Droite - + Keys: W | S Touches : W | S - + Keys: A | D Touches : A | D - + NumPad: KP_8 | KP_2 Pavé Numérique : KP_8 | KP_2 - + NumPad: KP_4 | KP_6 Pavé Numérique : KP_4 | KP_6 - - + + None - - + + Mouse Settings Configurations de la Souris - + Left Mouse Button - + Right Mouse Button @@ -2351,57 +2356,57 @@ S'il est éliminé, le contrôleur redeviendra un joystick une fois tous le JoyButton - + Processing turbo for #%1 - %2 - + Finishing turbo for button #%1 - %2 - + Processing press for button #%1 - %2 - + Processing release for button #%1 - %2 - + Distance change for button #%1 - %2 - - - + + + Button Bouton - - - - + + + + [NO KEY] [AUCUNE TOUCHE] - + [Set %1 1W] - + [Set %1 2W] - + [Set %1 WH] @@ -2409,47 +2414,47 @@ S'il est éliminé, le contrôleur redeviendra un joystick une fois tous le JoyButtonContextMenu - + Toggle - + Turbo Turbo - + Clear - + Set Select - + Disabled Désactivé - + Set %1 - + Set %1 1W - + Set %1 2W - + Set %1 WH @@ -2457,118 +2462,118 @@ S'il est éliminé, le contrôleur redeviendra un joystick une fois tous le JoyButtonSlot - - + + Mouse Souris - + Up Haut - + Down Bas - + Left Gauche - + Right Droite - + LB BG - + MB BC - + RB BD - + B4 B4 - + B5 B5 - + Pause Pause - + Hold Maintenir - + Cycle Cycle - + Distance Distance - + Release Relâchement - + Mouse Mod Mode de la Souris - + Press Time - + Delay - + Load %1 - + Set Change %1 - + [Text] %1 - + [Exec] %1 - + [NO KEY] [AUCUNE TOUCHE] @@ -2576,9 +2581,9 @@ S'il est éliminé, le contrôleur redeviendra un joystick une fois tous le JoyControlStick - - - + + + Stick @@ -2586,37 +2591,37 @@ S'il est éliminé, le contrôleur redeviendra un joystick une fois tous le JoyControlStickButton - - - + + + Up Haut - - - + + + Down Bas - - - + + + Left Gauche - - - + + + Right Droite - - - + + + Button Bouton @@ -2624,67 +2629,67 @@ S'il est éliminé, le contrôleur redeviendra un joystick une fois tous le JoyControlStickContextMenu - + Mouse (Normal) Souris (Normal) - + Mouse (Inverted Horizontal) Souris (Horizontal Inversé) - + Mouse (Inverted Vertical) Souris (Vertical Inversé) - + Mouse (Inverted Horizontal + Vertical) Souris (Vertical et Horizontal Inversés) - + Arrows Flèches - + Keys: W | A | S | D Touches :W | A | S | D - + NumPad - + None - + Standard Standard - + Eight Way Eight Way - + 4 Way Cardinal - + 4 Way Diagonal - + Mouse Settings Configurations de la Souris @@ -2692,86 +2697,86 @@ S'il est éliminé, le contrôleur redeviendra un joystick une fois tous le JoyControlStickEditDialog - + Dialog Dialogue - + X: X : - - - - - + + + + + 0 0 - + Y: Y : - + Distance: Distance : - + Presets: Pré-réglages : - + Mouse (Normal) Souris (Normal) - + Mouse (Inverted Horizontal) Souris (Horizontal Inversé) - + Mouse (Inverted Vertical) Souris (Vertical Inversé) - + Mouse (Inverted Horizontal + Vertical) Souris (Vertical et Horizontal Inversés) - + Arrows Flèches - + Keys: W | A | S | D Touches :W | A | S | D - + NumPad NumPad - + None Aucub - + Stick Mode: Mode du Stick : - + Standard: 8 region stick with two direction buttons active when the stick is in a diagonal region. @@ -2787,72 +2792,72 @@ to a diagonal zone of the stick. - + 4 Way Cardinal - + 4 Way Diagonal - - + + Dead zone value to use for an analog stick. - - + + Value when an analog stick is considered moved 100%. - - + + The area (in degrees) that each diagonal region occupies. - + Square Stick: - - + + Percentage to modify a square stick coordinates to confine values to a circle - + % % - + Stick Delay: - - + + Time lapsed before a direction change is taken into effect. - + s - + Modifier: - + Edit button that is active while the stick is active. This button is useful for assigning zones with @@ -2861,68 +2866,68 @@ functionality to an analog stick. - + PushButton - + Na&me: Name: Nom : - + Specify the name of an analog stick. Indiquer le nom d'un stick analogue. - + Mouse Settings Configurations de la Souris - + Standard Standard - + Bearing: - + % Safe Zone: - + Eight Way Eight Way - + Dead Zone: Zone morte : - + Max Zone: Zone maximale : - + Diagonal Range: Valleur de diagonale : - + Set Configuration - + Set %1 @@ -2930,9 +2935,9 @@ functionality to an analog stick. JoyControlStickModifierButton - - - + + + Modifier @@ -2940,9 +2945,9 @@ functionality to an analog stick. JoyDPad - - - + + + DPad @@ -2950,37 +2955,37 @@ functionality to an analog stick. JoyDPadButton - - - + + + Up Haut - - - + + + Down Bas - - - + + + Left Gauche - - - + + + Right Droite - - - + + + Button Bouton @@ -2988,266 +2993,271 @@ functionality to an analog stick. JoyTabWidget - - - - - - + + + + + + <New> <Nouveau> - - + + Remove Supprimer - - + + Remove configuration from recent list. Supprimer la configuration depuis la liste des recents. - - + + Load Charger - - + + Load configuration file. Charger un fichier de configuration. - - + + Save Enregistrer - - + + Save changes to configuration file. Enregistrer les modifications dans le fichier de configuration. - - + + Save As Enregistrer Sous - - + + Save changes to a new configuration file. Enregistrer les modifications dans un nouveau fichier de configuration. - - + + Sets - + Copy from Set - + Settings - - + + Set 1 - - + + Set 2 - - + + Set 3 - - + + Set 4 - - + + Set 5 - - + + Set 6 - - + + Set 7 - - + + Set 8 - - + + Stick/Pad Assign Assignement du Stick/Pad - - + + Controller Mapping - - + + Quick Set Configuration Rapide - - + + Names Noms - - + + Toggle button name displaying. Alterner nom du bouton d'affichage. - - + + Pref - - + + Change global profile settings. - - - + + + Reset Réinitialiser - - + + Revert changes to the configuration. Reload configuration file. Annuler les changements de configuration. Recharger le fichier de configuration. - + Open Config Charger un fichier de configuration - + Config Files (*.amgp *.xml) - - - + + + Config File (*.%1.amgp) - - + + Do you really want to reset buttons settings for joystick? + + + + + Save Profile Changes? - - + + Changes to the new profile have not been saved. Would you like to save or discard the current profile? - - + + Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? - + Sticks Sticks - - + + DPads DPads - + No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. - - + + Set %1: %2 - - + + Set %1 - + Copy Set Assignments - + Are you sure you want to copy the assignments and device properties from %1? - - - + + + Save Config Enregistrer le fichier de configuration - - + + Set Configuration @@ -3255,7 +3265,7 @@ to buttons or disable hiding empty buttons. Joystick - + Joystick Manette @@ -3263,98 +3273,98 @@ to buttons or disable hiding empty buttons. JoystickStatusWindow - + Properties Propriétés - + Details Détails - + Name: Nom : - - - - - - - + + + + + + + %1 %1 - + Number: Nombre : - + Axes: Axes : - + Buttons: Boutons : - + Hats: Hats : - + GUID: GUID : - + Game Controller: - + Axes Axes - + Buttons Boutons - + Hats Hats - + %1 (#%2) Properties %1 (#%2) Propriétés - + Axis %1 Axe %1 - + Hat %1 Hat %1 - + No - + Yes @@ -3362,62 +3372,67 @@ to buttons or disable hiding empty buttons. MainSettingsDialog - + Edit Settings Modifier les paramètres - + General - + Controller Mappings Cartographie de contrôleur - + Language - + Auto Profile - + Mouse Souris - + Advanced Avancé - + + Profile Direc&tory: + + + + <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> - + Recent Profile Count: - + <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> - + Gamepad Poll Rate: - + Change the poll rate that the program uses to discover new events from gamepads. Defaults to 10 ms. @@ -3427,52 +3442,52 @@ before using antimicro unattended. - + Hide main window when the main window close button is clicked instead of quitting the program. - + Close To Tray - + Have Windows start antimicro at system startup. - + Launch At Windows Startup - + Display recent profiles for all controllers as a single list in the tray menu. Defaults to using sub-menus. - + Single Profile List in Tray - + Have the program minimize to the taskbar. By default, the program minimizes to the system tray if available. - + Minimize to Taskbar - + This option will cause the program to hide all buttons that have no slots assigned to them. The Quick Set dialog window will have to be used @@ -3480,184 +3495,194 @@ to bring up the edit dialog for gamepad buttons. - + Hide Empty Buttons - + When the program is launched, open the last known profile that was opened during the previous session. - + Auto Load Last Opened Profile - + Only show the system tray icon when the program first launches. - + Launch in Tray - + Associate .amgp files with antimicro in Windows Explorer. - + Associate Profiles - + Key Repeat - + Active keys will be repeatedly pressed when this option is enabled. - - + + Enable - + Specifies how much time should elapse before key repeating begins. - + Specifies how many times key presses will be performed per seconds. - + <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> - + Português do Brasil - + Français - + Deutsch - + Italiano - + 日本語 - + Русский - + српски / srpski - + 简体中文 - + Español - + українська - + Polski - + + History Si&ze: + + + + Log File: - + Log Level: - + None - + Error - + Warning - + Info - + Debug - + + Reset + Réinitialiser + + + Class - + Title - + Program - + Disable the "Enhanced Pointer Precision" Windows setting while antimicro is running. Disabling "Enhanced Pointer Precision" will allow mouse movement within antimicro to be more @@ -3665,32 +3690,27 @@ precise. - + Disable Enhance Pointer Precision - + Smoothing - - Histor&y Size: - - - - + Weight &Modifier: - + Refresh Rate: - + The refresh rate is the amount of time that will elapse in between mouse events. Please be cautious when editing this setting as it will cause the program to use @@ -3700,46 +3720,46 @@ it unattended. - + Spring Ressort - + Screen: - + Utilize the specified screen for spring mode. On Linux, the default is to use the primary screen. On Windows, the default is to use all available screens. - + Accel Numerator: - - - + + + 0 0 - + Accel Denominator: - + Accel Threshold: - + If the acceleration values for the virtual mouse have been changed by a different process, particularly when quitting an older game, then you might want to reset the acceleration @@ -3747,37 +3767,32 @@ values used by the virtual mouse. - + Reset Acceleration - + Delay: Intervalle : - - Profi&le Directory: - - - - + ms - + Rate: Taux : - + times/s - + Below is a list of the custom mappings that have been saved. You can use the following table to delete mappings or have mappings temporarily disabled. You can also disable mappings that are included with SDL; just insert a new row with the appropriate joystick GUID and check disable. Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. @@ -3786,128 +3801,138 @@ Settings will not take affect until you either refresh all joysticks or unplug t Les paramètres ne prennent effet que lors de la prochaine réactualisation des joysticks ou en débranchant la manette spécifique. - + GUID - + Mapping String Chaîne de cartographie - + Disable? Désactiver ? - - + + Delete Supprimer - + Insert Insérer - - + + Default - + English - - + + Active - + Devices: - - + + All - + Device - + Profile - + Default? - + Add - + Edit - + Also, Windows users who want to use a low value should also check the "Disable Enhance Pointer Precision" checkbox if you haven't disabled the option in Windows. - + Select Default Profile Directory - + Are you sure you want to delete the profile? - + Save Log File As - + Log Files (*.log) + + + Do you really want to reset setting? + + + + + Would you like to reset mappings too? + + MainWindow - + No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu Aucune manette n'a été détéctée. Merci de brancher une manette et de choisir l'option "Mettre à jour les manettes" du menu principal - + If events are not seen by a game, please click here to run this application as Administrator. - + &App @@ -3916,110 +3941,110 @@ the option in Windows. Assignement du Stick/Pad - + &Options &Options - + antimicro - + &Help &Aide - - + + &Quit &Quitter - + Ctrl+Q Ctrl+Q - - + + &Update Joysticks &Mettre à jour les manettes - + Ctrl+U Ctrl+U - - + + &Hide &Masquer - + Ctrl+H Ctrl+H - + &About &À propos - + Ctrl+A Ctrl+A - + About &Qt - + &Properties - + &Key Checker - + &GitHub Page - + &Game Controller Mapping - + S&ettings - + &Stick/Pad Assign - + &Wiki - + &Issues - + &Calibration @@ -4036,7 +4061,7 @@ the option in Windows. Vérificateur de clé - + Home Page Page d'accueil @@ -4049,66 +4074,66 @@ the option in Windows. Cartographie de contrôleur de jeu - + Could not find a proper controller identifier. Exiting. - - - - - - - + + + + + + + (%1) - - + + Open File Ouvrir fichier - + &Restore &Restaurer - + Calibration couldn't be opened - + You must connect at least one controller to open the window - + Run as Administrator? - + Are you sure that you want to run this program as Adminstrator? Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. - + Failed to elevate program - + Failed to restart this program as the Administrator - + Could not find controller. Exiting. @@ -4116,12 +4141,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseAxisSettingsDialog - + Mouse Settings - Configurations de la Souris - - + Set %1 @@ -4129,12 +4154,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseButtonSettingsDialog - + Mouse Settings - Configurations de la Souris - - + Set %1 @@ -4142,12 +4167,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseControlStickSettingsDialog - + Mouse Settings Configurations de la Souris - + Set %1 @@ -4155,12 +4180,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseDPadSettingsDialog - + Mouse Settings Configurations de la Souris - + Set %1 @@ -4168,17 +4193,17 @@ Some games run as Administrator which will cause events generated by antimicro t MouseSettingsDialog - + Mouse Settings Configurations de la Souris - + Mouse Mode: Mode de la Souris : - + Cursor mode is used to move the mouse cursor around the screen relative to its current position depending on how much you move an axis @@ -4201,80 +4226,80 @@ retourne au centre de l'écran quand l'axe est déplacé vers la zone morte. - + Cursor Curseur - + Spring Ressort - + Acceleration: Accélération : - + Enhanced Precision - - + + Linear Linéair - + Quadratic Quadratique - + Cubic Cubique - + Quadratic Extreme Quadratique Extreme - + Power Function Fonction Énergie - + Easing Quadratic - + Easing Cubic - + Mouse Speed Settings Configurations de la Vitesse de la Souris - + Enable to change the horizontal and vertical speed boxes at the same time. Activer la modification simultanée des boîtes de vitesse horizontale et verticale. - + Change Together Modifier en même temps - + Options for adding more acceleration to the mouse movement beyond what the acceleration curve would produce. Acceleration is added based on how quickly an axis is @@ -4284,17 +4309,17 @@ using typical gamepad analog sticks. - + Delta Acceleration - + &Multiplier: - + Mi&n Threshold: @@ -4306,8 +4331,8 @@ Speed: horizontale : - - + + 1 = 20 pps 1 = 20 pps @@ -4318,31 +4343,31 @@ Speed: verticale : - + Wheel Hori. Speed: Molette Hori. Vitesse : - + Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. - + Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. - + Sensitivit&y: - + For Power Function acceleration curve. Specifies the factor to use for curve sensitivity. When the value is above 1.0, the mouse movement will be accelerated @@ -4350,122 +4375,122 @@ faster at the low end of an axis. - + Easing Duration: - - + + s - + Highest value to accelerate mouse movement by - + x - + Start %: - + Acceleration begins at this percentage of the base multiplier - + Minimum amount of axis travel required for acceleration to begin - + Max Threshold: - + Maximum axis travel before acceleration has reached the multiplier value - + E&xtra Duration: - + Curve: - + Ease Out Sine - + Ease Out Quad - + Ease Out Cubic - + Release Radius: - + Specifies that the spring area will be relative to the mouse position set by a non-relative spring. - + Relative - + Mouse Status - + X: X : - - + + 0 (0 pps) - + Y: Y : - - + + 1 = 1 notch(es)/s 1 = 1 cran(s)/s - + Enhanced: Three tier curve that makes the mouse move slow on the low end of an axis and fast on the high end. @@ -4487,19 +4512,19 @@ a period of time using a Cubic curve. - + Hori&zontal Speed: - + &Vertical Speed: - + Wheel Vert. Speed: Molette Vert. @@ -4510,39 +4535,39 @@ Vitesse : Sensibilité : - + Specifies the amount of time (in seconds) that will be required before the mouse is fully accelerated after reaching the high end of an axis. - - - - + + + + % % - + Extend the time that extra acceleration is applied. Axis travel will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. - + Spring Settings Configuration du Ressort - + Spring Width: Largeur du Ressort : - + Changes the width of the region that the cursor can move in spring mode. 0 will use the entire width of your screen. @@ -4551,12 +4576,12 @@ le curseur peut se déplacer en mode "ressort". 0 utilise toute la largeur de l'écran. - + Spring Height: Hauteur du Ressort : - + Changes the height of the region that the cursor can move in spring mode. 0 will use the entire height of your screen. @@ -4565,8 +4590,8 @@ le curseur peut se déplacer en mode "ressort". 0 utilise toute la hauteur de l'écran. - - + + %n notch(es)/s %n cran/s @@ -4577,39 +4602,39 @@ le curseur peut se déplacer en mode "ressort". QKeyDisplayDialog - + Key Checker Vérificateur de touche - - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - + Event Handler: - + Native Key Value: Valeur native de la touche : - - - + + + 0x00000000 - + Qt Key Value: Valeur de la touche Qt : - + antimicro Key Value: @@ -4617,265 +4642,265 @@ le curseur peut se déplacer en mode "ressort". QObject - + Super Super - + Menu - + Mute - + Vol+ - + Vol- - + Play/Pause - + Play - + Pause Pause - + Prev - + Next Suivant - + Mail - + Home Début - + Media - + Search - + Daemon launched - + Failed to launch daemon - + Launching daemon - - + + Display string "%1" is not valid. - + Failed to set a signature id for the daemon - + Failed to change working directory to / - + Quitting Program - + # of joysticks found: %1 - + List Joysticks: - + --------------- - + Joystick %1: - + Index: %1 - + GUID: %1 - + Name: %1 - + Yes - + No - + Game Controller: %1 - + # of Axes: %1 - + # of Buttons: %1 - + # of Hats: %1 - + Attempting to use fallback option %1 for event generation. - + Failed to open event generator. Exiting. - + Using %1 as the event generator. - + Could not raise process priority. - + Last button - + There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? - + Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". - + Profile location %1 is not an XML file. Le fichier profile %1 n'est pas un fichier XML. - + Profile location %1 does not exist. Le fichier profile %1 n'existe pas. - - - + + + Controller identifier is not a valid value. L'identifiant du contrôleur n'est pas une valeur valide. - + An invalid set number '%1' was specified. - + Controller identifier '%s'' is not a valid value. - + No set number was specified. - + No controller was specified. - + No display string was specified. - + An invalid event generator was specified. - + No event generator string was specified. - + No log file specified. @@ -4928,22 +4953,22 @@ le curseur peut se déplacer en mode "ressort". La valeur peut être un index, un nom ou le GUID d'un controleur. - + Logging started - + Auto-switching to profile "%1". - + Auto-switching to nullptr profile! - + xinput version must be at least 2.0. No mouse acceleration changes will occur. @@ -4951,18 +4976,18 @@ le curseur peut se déplacer en mode "ressort". QuickSetDialog - + Quick Set Configuration Rapide - + <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> <html><head/><body><p>Merci de presser un bouton ou de bouger un axe de %1 (<span style=" font-weight:600;">%2</span>).<br/>Une fenêtre de dialogue va apparaître<br/>pour permettre de faire une assignation.</p></body></html> - - + + Quick Set %1 Configuration Rapide %1 @@ -4970,12 +4995,12 @@ le curseur peut se déplacer en mode "ressort". SetAxisThrottleDialog - + Throttle Change Modifier l'accélération - + The throttle setting for Axis %1 has been changed. Would you like to distribute this throttle change to all sets? @@ -4988,12 +5013,12 @@ Faut-il appliquer cette valeur d'accélération à tous les réglages ? SetJoystick - + Set %1: %2 - + Set %1 @@ -5001,52 +5026,52 @@ Faut-il appliquer cette valeur d'accélération à tous les réglages ? SetNamesDialog - + Set Name Settings - + Set 1 - + Set 2 - + Set 3 - + Set 4 - + Set 5 - + Set 6 - + Set 7 - + Set 8 - + Name @@ -5054,7 +5079,7 @@ Faut-il appliquer cette valeur d'accélération à tous les réglages ? SimpleKeyGrabberButton - + Mouse Souris @@ -5062,7 +5087,7 @@ Faut-il appliquer cette valeur d'accélération à tous les réglages ? SpringModeRegionPreview - + Spring Mode Preview Aperçu du mode ressort @@ -5070,20 +5095,20 @@ Faut-il appliquer cette valeur d'accélération à tous les réglages ? UInputEventHandler - + Could not find a valid uinput device file. Please check that you have the uinput module loaded. lsmod | grep uinput - + Could not open uinput device file Please check that you have permission to write to the device - + Using uinput device file %1 @@ -5091,551 +5116,551 @@ Please check that you have permission to write to the device UInputHelper - + a q - + b - + c - + d - + e - + f - + g - + h - + i - + j - + k - + l - + m , - + n - + o - + p - + q a - + r - + s - + t - + u - + v - + w z - + x - + y - + z w - + Esc - + F1 - + F2 - + F3 - + F4 - + F5 - + F6 - + F7 - + F8 - + F9 - + F10 - + F11 - + F12 - + ` - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - - + + - - + = - + BackSpace Retour Arrière - + Tab Tab - + [ - + ] - + \ - + CapsLock - + ; - + ' - + Enter - + Shift_L Maj_G - + , - - + + . - - + + / - + Ctrl_L - - + + Super_L Super_L - + Alt_L Alt_L - + Space Espace - + Alt_R Alt_R - + Menu Menu - + Ctrl_R - + Shift_R Maj_D - + Up Haut - + Left Gauche - + Down Bas - + Right Droite - + PrtSc - + Ins - + Del - + Home Début - + End End - + PgUp - + PgDn - + NumLock - + * - + + - + KP_Enter KP_Entrée - + KP_1 - + KP_2 - + KP_3 - + KP_4 - + KP_5 - + KP_6 - + KP_7 - + KP_8 - + KP_9 - + KP_0 - + SCLK Arrêt Defil - + Pause Pause - + Super_R - + Mute - + VolDn - + VolUp - + Play - + Stop - + Prev - + Next Suivant - + [NO KEY] [AUCUNE TOUCHE] @@ -5643,54 +5668,54 @@ Please check that you have permission to write to the device UnixWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: - - - + + + TextLabel - + Title: - + Path: - + Match By Properties - + Class - + Title - + Path @@ -5698,9 +5723,9 @@ Please check that you have permission to write to the device VDPad - - - + + + VDPad @@ -5708,224 +5733,224 @@ Please check that you have permission to write to the device VirtualKeyPushButton - + Space Espace - + Tab Tab - + Shift (L) Maj (G) - + Shift (R) Maj (D) - + Ctrl (L) Ctrl (G) - + Ctrl (R) Ctrl (D) - + Alt (L) Alt (G) - - + + Alt (R) Alt (D) - + Alt Gr - + ` - + ~ - - + + - - + = - + [ - + ] - + \ - + Caps Verr Maj - + ; - + ' - + , - - + + . - - + + / - + ESC ECHAP - + PRTSC Impr Ecran - + SCLK Arrêt Defil - + INS INSER - + PGUP PGUP - + DEL SUPPR - + PGDN PGDN - + 1 - + 2 - + 3 - + 4 - + 5 - + 6 - + 7 - + 8 - + 9 - + 0 - + NUM LK VERR NUM - - + + * - + + - + Enter @@ -5943,42 +5968,42 @@ R E - + < - + : - + Super (L) Super (G) - + Menu - + Up Haut - + Down Bas - + Left Gauche - + Right Droite @@ -5986,226 +6011,226 @@ E VirtualKeyboardMouseWidget - - + + Keyboard Clavier - - + + Mouse Souris - + Mouse Settings Configurations de la Souris - + Left Mouse Gauche - + Up Mouse Haut - + Left Button Mouse - + Middle Button Mouse - + Right Button Mouse - + Wheel Up Mouse Molette bas - + Wheel Left Mouse Molette gauche - + Wheel Right Mouse Molette droite - + Wheel Down Mouse Molette bas - + Down Mouse Bas - + Right Mouse Droite - + Button 4 Mouse Bouton 4 - + Mouse 8 Mouse Souris 8 - + Button 5 Mouse Bouton 5 - + Mouse 9 Mouse Souris 9 - + NONE AUCUNE - - + + Last button - - + + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + Others - + Applications - + Browser Back - + Browser Favorites - + Browser Forward - + Browser Home - + Browser Refresh - + Browser Search - + Browser Stop - + Calc - + Email - + Media - + Media Next - + Media Play - + Media Previous - + Media Stop - + Search - + Volume Down - + Volume Mute - + Volume Up @@ -6213,7 +6238,7 @@ E VirtualMousePushButton - + INVALID INVALIDE @@ -6221,28 +6246,28 @@ E WinAppProfileTimerDialog - - + + Capture Application - + After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. - + Timer: - + Seconds - + Cancel @@ -6250,12 +6275,12 @@ E WinExtras - + [NO KEY] [AUCUNE TOUCHE] - + AntiMicro Profile @@ -6263,67 +6288,62 @@ E X11Extras - + ESC ECHAP - + Tab Tab - + Space Espace - + DEL SUPPR - + Return - + KP_Enter KP_Entrée - + Backspace Retour arrière - + Alt Gr - + xinput extension was not found. No mouse acceleration changes will occur. - + xinput version must be at least 2.0. No mouse acceleration changes will occur. - - Virtual pointer found with id=%1. - - - - + PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 - + Changing mouse acceleration for device with id=%1 @@ -6331,7 +6351,7 @@ E XMLConfigReader - + Could not write updated profile XML to file %1. Impossible de mettre à jour le profil XML du fichier %1. @@ -6339,7 +6359,7 @@ E XMLConfigWriter - + Could not write to profile at %1. Impossible d'écrire le profil %1. @@ -6347,7 +6367,7 @@ E antimicro - + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. @@ -6355,97 +6375,97 @@ E main - + Launch program in system tray only. Lance le logiciel directement dans la zone de notification. - + Launch program with the tray menu disabled - + Launch program without the main window displayed - + Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers - + location - + Apply configuration file to a specific controller. Value can be a controller index, name, or GUID - + value - + Unload currently enabled profile(s) - + value(s) - + Start joysticks on a specific set. Value can be a controller index, name, or GUID - + number value - + Launch program as a daemon. Use only on Linux. - + Enable logging - + log-type - + Choose a file for logs writing - + filename - + Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. - + event-generation-type - + Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. diff --git a/share/antimicro/translations/antimicro_it.ts b/share/antimicro/translations/antimicro_it.ts old mode 100644 new mode 100755 index f58b38548..14a8935e9 --- a/share/antimicro/translations/antimicro_it.ts +++ b/share/antimicro/translations/antimicro_it.ts @@ -4,17 +4,17 @@ AboutDialog - + About A proposito - + Version Versione - + "juliagoda" (since March, 2018) Wanting only to play my favourite old games that din't support gamepads, I found this project (which map keyboard keys and mouse buttons to connected gamepads on Linux) as most proper and recent. But because of poor choices of such application on the internet and since it didn't compile properly, I decided to rescue the project. However, once I finished my work (enough to enjoy playing games) I thought about sharing this code with others. Of course all informations about past programmers will be held. "Ryochan7" (since December 30, 2012 until 2017), I have been working on antimicro in my spare time. What originally started as a fork of QJoyPad and a way to learn proper event-driven programming has turned into something much bigger than I originally intended. Although I have spent a lot of time learning new techniques, finding out more about the domain of KB+M emulation, and spending Friday nights bashing my head against my keyboard, it has been a fun and enriching experience overall. @@ -32,17 +32,17 @@ As of May 24, 2016, this project has moved to https://github.com/AntiMicro/antim - + Copyright: 2013 - 2018 Copyright: 2013 - 2016 {2013 ?} {2018?} {2013 ?} - + Info Info - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -86,7 +86,7 @@ p, li { white-space: pre-wrap; } - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -204,7 +204,7 @@ p, li { white-space: pre-wrap; } - + Changelog Changelog @@ -213,52 +213,52 @@ p, li { white-space: pre-wrap; } Copyright: 2013 - 2016 {2013 ?} {2016?} - + Credits Ringraziamenti - + antimicro antimicro - + About Development Informazioni sviluppo - + License Licenza - + Program Version %1 Versione programma %1 - + Program Compiled on %1 at %2 Programma compilato il %1 alle %2 - + Built Against SDL %1 Costruito con SDL %1 - + Running With SDL %1 Eseguito con SDL %1 - + Using Qt %1 Utilizzando Qt %1 - + Using Event Handler: %1 Gestore di eventi in uso: %1 @@ -266,29 +266,29 @@ p, li { white-space: pre-wrap; } AddEditAutoProfileDialog - + Auto Profile Dialog Finestra di auto-profilo - + Profile: Profilo: - - + + Browse Sfoglia - + Window: Finestra: - - + + Select Window. Click on the appropriate application window and the application file path will be populated in the form. @@ -296,38 +296,47 @@ in the form. e il percorso al file dell'applicazione riempirà il campo. - + Detect Window Properties Rileva proprietà finestra - + Class: Classe: - + Title: Titolo: - + + set partial title + + + + Application: Applicazione: - + Select Seleziona - + + De&vices: + + + Devices: - Dispositivi: + Dispositivi: - - + + Select this profile to be the default loaded for the specified device. The selection will be used instead of the all default profile option. @@ -336,84 +345,84 @@ per il dispositivo specificato. La selezione verrà usata al posto di qualsiasi altro profilo predefinito. - + Set as Default for Controller Imposta come controller predefinito - - + + A different profile is already selected as the default for this device. È già stato selezionato un altro profilo come predefinito per questo dispositivo. - + Current (%1) Corrente (%1) - + Open Config Apri configurazione - - + + Select Program Seleziona programma - + Programs (*.exe) Programmi (*.exe) - + Please use the main default profile selection. Per favore usa la selezione profilo predefinita principale. - + Please select a window by using the mouse. Press Escape if you want to cancel. Per favore seleziona una finestra utilizzando il mouse. Premi Esc se vuoi annullare. - + Capture Application Window Cattura finestra applicazione - + Could not obtain information for the selected window. Impossibile ottenere le informazioni della finestra selezionata. - + Application Capture Failed Cattura applicazione fallita - + Profile file path is invalid. Percorso del file di profilo invalida. - + No window matching property was specified. Non è stata specificata alcuna proprietà per identificare la finestra. - + Program path is invalid or not executable. Il programma è invalido o non è un eseguibile. - + File is not an .exe file. Il file non è un .exe. - + No window matching property was selected. Non è stata selezionata alcuna proprietà per identificare la finestra. @@ -421,187 +430,187 @@ al posto di qualsiasi altro profilo predefinito. AdvanceButtonDialog - - + + Advanced Avanzate - + Assignments Assegnazioni - + Toggle Cambio stato - + Turbo Turbo - + Set Selector Selezionatore set - + Blank or KB/M Vuoto o Tastiera/Mouse - + Hold Tieni - + Pause Pausa - + Cycle Ciclo - + Distance Distanza - + Insert Inserisci - + Delete Cancella - + Clear All Cancella tutto - + Time: Tempo: - + 0.01s 0.01s - + 0s 0s - + Insert a pause that occurs in between key presses. Inserisci una pausa tra un tasto e l'altro. - + Release Rilascia - - + + Insert a new blank slot. Inserisci un nuovo slot vuoto. - + Delete a slot. Cancella uno slot. - + Clear all currently assigned slots. Cancella tutti gli slot assegnati. - + Specify the duration of an inserted Pause or Hold slot. Specifica la durata di una Pausa inserita o di un Tieni. - + 0m 0m - + &Mouse Speed Mod: - - + + Specify the range past an axis dead zone in which a sequence of actions will execute. Specifica l'intervallo dopo la zona morta di un'asse in cui una sequenza di azioni verrà eseguita. - + Distance: Distanza: - - + + % % - + Mouse Mod Modifica mouse - + Press Time Tempo di pressione - + Delay Ritardo - + Execute Esegui - + Load Carica - + Set Change Cambio di set - + Text Entry Inserimento testo - + Placeholder Segnaposto - - + + 0 0 @@ -610,317 +619,317 @@ al posto di qualsiasi altro profilo predefinito. Modifica velocità mouse: - + Set the percentage that mouse speeds will be modified by. Imposta la percentuale con cui le velocità del mouse verranno modificate. - + Auto Reset Cycle After Auto-resetta ciclo dopo - + seconds secondi - + Executable: - + ... ... - + Arguments: - - - + + + Enabled Attivato - + Mode: Modalità: - + <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> <html><head/><body><p>Normale: preme e rilascia ripetutamente un tasto a seconda del rapporto scelto.</p><p>Gradiente: modifica il tasto premuto e il ritardo di un tasto rilasciato a seconda di quanto è stata mossa un'asse. Il rapporto rimarrà lo stesso.</p><p>Pulsa: modifica quante volte un tasto viene premuto e rilasciato al secondo. Il ritardo del tasto rimarrà lo stesso.</p></body></html> - + Normal Normale - + Gradient Gradiente - + Pulse Pulsa - + Delay: Ritardo: - + 0.10s 0.10s - + Rate: Rapporto: - + 10.0/s 10.0/s - - + + Disabled Disattivato - + Select Set 1 One Way Selezione set 1 a una direzione - + Select Set 1 Two Way Selezione set 1 a due direzioni - + Select Set 1 While Held Selezione set 1 finché premuto - + Select Set 2 One Way Selezione set 2 a una direzione - + Select Set 2 Two Way Selezione set 2 a due direzioni - + Select Set 2 While Held Selezione set 2 finché premuto - + Select Set 3 One Way Selezione set 3 a una direzione - + Select Set 3 Two Way Selezione set 3 a due direzioni - + Select Set 3 While Held Selezione set 3 finché premuto - + Select Set 4 One Way Selezione set 4 a una direzione - + Select Set 4 Two Way Selezione set 4 a due direzioni - + Select Set 4 While Held Selezione set 4 finché premuto - + Select Set 5 One Way Selezione set 5 a una direzione - + Select Set 5 Two Way Selezione set 5 a due direzioni - + Select Set 5 While Held Selezione set 5 finché premuto - + Select Set 6 One Way Selezione set 6 a una direzione - + Select Set 6 Two Way Selezione set 6 a due direzioni - + Select Set 6 While Held Selezione set 6 finché premuto - + Select Set 7 One Way Selezione set 7 a una direzione - + Select Set 7 Two Way Selezione set 7 a due direzioni - + Select Set 7 While Held Selezione set 7 finché premuto - + Select Set 8 One Way Selezione set 8 a una direzione - + Select Set 8 Two Way Selezione set 8 a due direzioni - + Select Set 8 While Held Selezione set 8 finché premuto - + sec. sec. - + /sec. /sec. - + Set %1 Set %1 - - + + Select Set %1 Seleziona set %1 - + One Way a una direzione - + Two Way a due direzioni - + While Held finché premuto - + Choose Executable Scegli eseguibile - + Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. Gli slot dopo un'azione Ciclo verranno eseguiti al prossimo tasto premuto. Cicli multipli possono essere aggiunti per creare partizioni in sequenza. - + Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. Ritarda il tempo dopo il quale il prossimo slot viene attivato per il tempo specificato. Gli slot attivati prima del ritardo rimarranno attivi finché il ritardo non trascorre. - + Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. L'azione Distanza specifica che gli slot successivi verranno eseguiti solo quando un'asse si muove oltre un certo intervallo dopo la zona morta. - + Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. Inserisce un'azione Tieni. Gli slot dopo l'azione verranno eseguiti solo se il tasto viene tenuto premuto oltre all'intervallo specificato. - + Chose a profile to load when this slot is activated. Scegli un profilo da caricare quando questo slot viene attivato. - + Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. L'azione Modifica mouse modificherà tutte le impostazioni della velocità mouse di una percentuale specifica mentre l'azione viene processata. Questo può tornare utile per rallentare il mouse usando un fucile da cecchino. - + Specify the time that keys past this slot should be held down. Specifica il tempo in cui i tasti dopo questo slot debbano restare premuti. - + Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. Inserisce un'azione di rilascio. Gli slot dopo l'azione verranno eseguiti solo dopo il rilascio di un tasto se il tasto è stato premuto dopo l'intervallo specificato. - + Change to selected set once slot is activated. Cambia il set selezionato quando lo slot viene attivato. - + Full string will be typed when a slot is activated. Una stringa verrà digitata quando uno slot viene attivato. - + Execute program when slot is activated. Esegue un programma quando lo slot viene attivato. - - + + Choose Profile Scegli profilo - + Config Files (*.amgp *.xml) File di configurazione (*.amgp *.xml) @@ -928,157 +937,157 @@ al posto di qualsiasi altro profilo predefinito. AdvanceStickAssignmentDialog - + Stick/Pad Assignment Assegnazioni analogico/pad - + Sticks Analogici - + DPads DPads - - + + %1 (Joystick %2) %1 (Joystick %2) - + Stick 1 Analogico 1 - - - + + + Enabled Attivato - - - - - - + + + + + + Assign Assegna - - + + X Axis: Asse X: - - + + Y Axis: Asse Y: - + Stick 2 Analogico 2 - + Number of Physical DPads: %1 Numero di DPad fisici: %1 - + Virtual DPad 1 DPad virtuale 1 - + Up: Su: - + Down: Giù: - + Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. Nota: questa finestra è destinata alla retrocompatibilità coi profili creati prima di antimicro 2.0. Dalla versione 2.0, è preferibile l'uso della finestra Mappatura controller di gioco. - + Left: Sinistra: - + Right: Destra: - - - - + + + + Axis %1 Asse %1 - - - - + + + + Axis %1 - Asse %1 - - - - - + + + + Axis %1 + Asse %1 + - - - - + + + + Button %1 Tasto %1 - + Move stick 1 along the X axis Muovere analogico 1 lungo l'asse X - + Move stick 1 along the Y axis Muovere analogico 1 lungo l'asse Y - + Move stick 2 along the X axis Muovere analogico 2 lungo l'asse X - + Move stick 2 along the Y axis Muovere analogico 2 lungo l'asse Y - - - - + + + + Press a button or move an axis Premere un tasto o muovere un'asse @@ -1086,181 +1095,181 @@ al posto di qualsiasi altro profilo predefinito. AxisEditDialog - + Axis Asse - - + + Mouse (Horizontal) Mouse (orizzontale) - - + + Mouse (Inverted Horizontal) Mouse (orizzontale invertito) - - + + Mouse (Vertical) Mouse (verticale) - - + + Mouse (Inverted Vertical) Mouse (verticale invertito) - - + + Arrows: Up | Down Frecce: Su | Giù - - + + Arrows: Left | Right Frecce: Sinistra | Destra - - + + Keys: W | S Tasti: W | S - - + + Keys: A | D Tasti: A | D - - + + NumPad: KP_8 | KP_2 TastNum: TN_8 | TN_2 - - + + NumPad: KP_4 | KP_6 TastNum: TN_4 | TN_6 - - - + + + None Niente - - + + Set the value to use as the limit for an axis. Useful for a worn out analog stick. Imposta il valore da usare come limite per un'asse. Utile per un analogico consumato. - + Negative Half Throttle Acceleratore negativo a metà - + Positive Half Throttle Acceleratore positivo a metà - + Name: Nome: - + Specify the name of an axis. Specifica il nome di un'asse. - + Mouse Settings Impostazioni mouse - - + + Set the value of the dead zone for an axis. Imposta il valore della zona morta per un'asse. - + Presets: Preimpostazioni: - + Dead Zone: Zona morta: - + Max Zone: Zona massima: - - + + [NO KEY] [NO TASTO] - + Throttle setting that determines the behavior of how to interpret an axis hold or release. Impostazione dell'acceleratore che determina come interpretare il rilascio o la pressione di un'asse. - + Negative Throttle Acceleratore negativo - + Normal Normale - + Positive Throttle Acceleratore positivo - + Current Value: Valore corrente: - + Set Set - + Set %1 Set %1 - + Left Mouse Button Tasto sinistro del mouse - + Right Mouse Button Tasto destro del mouse @@ -1268,37 +1277,37 @@ interpretare il rilascio o la pressione di un'asse. ButtonEditDialog - + Dialog Finestra di dialogo - + To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab Per assegnare un nuovo tasto, premere qualunque tasto della tastiera o cliccare un pulsante nella sezione Tastiera o Mouse - + Placeholder Segnaposto - + Toggle Cambio stato - + Enables a key press or release to only occur when a controller button is pressed. Abilita la pressione o il rilascio di un tasto solo quando il tasto di un controller viene premuto. - + Enables rapid key presses and releases. Turbo controller. Abilita la pressione e il rilascio rapidi di un tasto. Controller turbo. - + Turbo Turbo @@ -1307,39 +1316,39 @@ interpretare il rilascio o la pressione di un'asse. Corrente: - + Last keyboard/mouse button: - + Slots Slot - + Na&me: Nome: - + Specify the name of a button. Specifica il nome di un tasto. - + Action: Azione: - + Specify the action that will be performed in game while this button is being used. Specifica l'azione che verrà eseguita in gioco mentre questo tasto viene usato. - + Advanced Avanzate @@ -1352,52 +1361,52 @@ mentre questo tasto viene usato. Set %1 - - - + + + Choose your keyboard key - + No button - - - - + + + + Last button - + To change settings for last button, it must be at least one assignment from keyboard to gamepad - + To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad - + To open advanced dialog, it's needed to map at least one button from keyboard to gamepad - + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + As last gamepad button has been set - + Index %1 @@ -1405,190 +1414,190 @@ mentre questo tasto viene usato. Calibration - + Form - - + + Start calibration - + Controller: - + Sticks: - - Use settings from jstest-gtk - - - - + Reset settings - + Cancel Annulla - - + + Save Salva - - + + Calibration - - Do you really want to reset settings of current axes? + + Do you really want to reset settings of current axis? - + Calibration was saved for the preset. Do you really want to reset settings? - + Place the joystick in the center position. It's the part, where often you don't have to move. Just skip it in such situation. - + Calibrating center - + Start second step - + Center X: %1 - + Center Y: %1 - + Place the joystick in the top-left corner many times - - + + Calibrating position - - + + X: %1 - - + + Y: %1 - + Place the joystick in the bottom-right corner - + Start final step - + range X: %1 - %2 - + range Y: %1 - %2 - + deadzone X: %1 - + deadzone Y: %1 - + ---Calibration done!--- - + Calibration values have been saved - - + + Dead zone calibration - - You must move X axis to the right at least five times! Keep moving! + + You have to move axes to the top-left corner at least five times. + + + + + You have to move axes to the bottom-right corner at least five times. - - You must move X axis to the left at least five times! Keep moving! + + Do you want to save calibration of current axis? - - - - + + + + Axis %1 Asse %1 @@ -1596,64 +1605,64 @@ deadzone Y: %1 CapturedWindowInfoDialog - + Captured Window Properties Proprietà finestra catturata - + Information About Window Informazioni sulla finestra - + Class: Classe: - - - + + + TextLabel etichetta di testo - + Title: Titolo: - + Path: Percorso: - + Match By Properties Trova per proprietà - + Class Classe - + Title Titolo - + Path Percorso - + Full Path Percorso completo - + File Name Nome file @@ -1824,67 +1833,67 @@ deadzone Y: %1 DPadContextMenu - + Mouse (Normal) Mouse (normale) - + Mouse (Inverted Horizontal) Mouse (orizzontale invertito) - + Mouse (Inverted Vertical) Mouse (verticale invertito) - + Mouse (Inverted Horizontal + Vertical) Mouse (orizzontale + verticale invertito) - + Arrows Frecce - + Keys: W | A | S | D Tasti: W | A | S | D - + NumPad TastNum - + None Niente - + Standard Standard - + Eight Way 8 direzioni - + 4 Way Cardinal 4 direzioni cardinali - + 4 Way Diagonal 4 direzioni diagonali - + Mouse Settings Impostazioni mouse @@ -1892,108 +1901,108 @@ deadzone Y: %1 DPadEditDialog - + Dialog Finestra di dialogo - + Presets: Preimpostazioni: - + Mouse (Normal) Mouse (normale) - + Mouse (Inverted Horizontal) Mouse (orizzontale invertito) - + Mouse (Inverted Vertical) Mouse (verticale invertito) - + Mouse (Inverted Horizontal + Vertical) Mouse (orizzontale + verticale invertito) - + Arrows Frecce - + Keys: W | A | S | D Tasti: W | A | S | D - + NumPad TastNum - + None Niente - + Dpad Mode: Modalità DPad: - + &Name: Nome: - + 4 Way Cardinal 4 direzioni cardinali - + 4 Way Diagonal 4 direzioni diagonali - + DPad Delay: Ritardo DPad: - - + + Time lapsed before a direction change is taken into effect. Tempo trascorso prima che il cambiamento di una direzione abbia effetto. - + s s - + Specify the name of a dpad. Specifica il nome di un DPad. - + Mouse Settings Impostazioni mouse - + Standard Standard - + Standard: 8 region dpad with two direction buttons active when the dpad is in a diagonal region. @@ -2020,17 +2029,17 @@ alla direzione cardinale del DPad. Utile per i menu. corrispondente alla zona diagonale del DPad. - + Eight Way 8 direzioni - + Set Set - + Set %1 Set %1 @@ -2038,27 +2047,27 @@ corrispondente alla zona diagonale del DPad. EditAllDefaultAutoProfileDialog - + Default Profile Profilo predefinito - + Profile: Profilo: - + Browse Sfoglia - + Open Config Apri configurazione - + Profile file path is invalid. Il percorso del profilo è invalido. @@ -2066,29 +2075,29 @@ corrispondente alla zona diagonale del DPad. ExtraProfileSettingsDialog - + Extra Profile Settings Altre impostazioni profilo - + Key Press Time: Tempo pressione tasto: - + 0.00 ms 0.00 ms - + Profile Name: Nome profilo: - - - + + + s s @@ -2096,7 +2105,7 @@ corrispondente alla zona diagonale del DPad. GameController - + Game Controller Controller di gioco @@ -2104,9 +2113,9 @@ corrispondente alla zona diagonale del DPad. GameControllerDPad - - - + + + DPad DPad @@ -2114,187 +2123,187 @@ corrispondente alla zona diagonale del DPad. GameControllerMappingDialog - + Game Controller Mapping Mappatura controller di gioco - + <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> <html><head/><body><p>antimicro utilizza la <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> fornita da SDL 2 per astrarre vari gamepad e adattarli a un unico standard. Per assegnare un tasto, per favore evidenzia la cella di mappatura per il tasto della riga giusta qui sotto. Dopodiché puoi premere un tasto o muovere un'asse sul tuo gamepad e la cella si aggiornerà con il tasto fisico o l'asse che verrà usata.</p><p>antimicro userà la mappatura che hai specificato per salvare una stringa di mappatura che verrà caricata in SDL.</p></body></html> - + A A - + B B - + X X - + Y Y - + Back Back - + Start Start - + Guide Guide - + Left Shoulder Dorsale sinistro - + Right Shoulder Dorsale destro - + Left Stick Click Click analogico sinistro - + Right Stick Click Click analogico destro - + Left Stick X Analogico sinistro X - + Left Stick Y Analogico sinistro Y - + Right Stick X Analogico destro X - + Right Stick Y Analogico destro Y - + Left Trigger Grilletto sinistro - + Right Trigger Grilletto destro - + DPad Up DPad su - + DPad Left DPad sinistra - + DPad Down DPad giù - + DPad Right DPad destra - + Mapping Mappatura - + SDL 2 Game Controller Mapping String Stringa di mappatura Game controller SDL 2 - + Last Axis Event: Ultimo evento asse: - + Current Axis Detection Dead Zone: Rilevamento corrente della zona morta dell'asse: - + 5000 5000 - + 10000 10000 - + 15000 15000 - + 20000 20000 - + 25000 25000 - + 30000 30000 - + 32000 32000 - + Game Controller Mapping (%1) (#%2) Mappatura controller di gioco (%1) (#%2) - + Discard Controller Mapping? Scartare mappatura controller? - + Discard mapping for this controller? If discarded, the controller will be reverted to a joystick once you refresh all joysticks. @@ -2306,47 +2315,47 @@ Scartandola, il controller tornerà ad essere un joystick una volta aggiornati t GameControllerSet - + Back Indietro - + Guide Guida - + Start Start - + LS Click Click analog SX - + RS Click Click analog DX - + L Shoulder Dorsale SX - + R Shoulder Dorsale DX - + L Trigger Grilletto SX - + R Trigger Grilletto DX @@ -2354,9 +2363,9 @@ Scartandola, il controller tornerà ad essere un joystick una volta aggiornati t GameControllerTrigger - - - + + + Trigger Grilletto @@ -2364,9 +2373,9 @@ Scartandola, il controller tornerà ad essere un joystick una volta aggiornati t JoyAxis - - - + + + Axis Asse @@ -2374,24 +2383,24 @@ Scartandola, il controller tornerà ad essere un joystick una volta aggiornati t JoyAxisButton - + Negative Negativo - + Positive Positivo - + Unknown Sconosciuto - - - + + + Button Tasto @@ -2399,74 +2408,74 @@ Scartandola, il controller tornerà ad essere un joystick una volta aggiornati t JoyAxisContextMenu - + Mouse (Horizontal) Mouse (orizzontale) - + Mouse (Inverted Horizontal) Mouse (orizzontale invertito) - + Mouse (Vertical) Mouse (verticale) - + Mouse (Inverted Vertical) Mouse (verticale invertito) - + Arrows: Up | Down Frecce: Su | Giù - + Arrows: Left | Right Frecce: Sinistra | Destra - + Keys: W | S Tasti: W | S - + Keys: A | D Tasti: A | D - + NumPad: KP_8 | KP_2 TastNum: TN_8 | TN_2 - + NumPad: KP_4 | KP_6 TastNum: TN_4 | TN_6 - - + + None Niente - - + + Mouse Settings Impostazioni mouse - + Left Mouse Button Tasto sinistro del mouse - + Right Mouse Button Tasto destro del mouse @@ -2474,57 +2483,57 @@ Scartandola, il controller tornerà ad essere un joystick una volta aggiornati t JoyButton - + Processing turbo for #%1 - %2 Processando turbo per #%1 - %2 - + Finishing turbo for button #%1 - %2 Finendo turbo per tasto #%1 - %2 - + Processing press for button #%1 - %2 Processando pressione per tasto #%1 - %2 - + Processing release for button #%1 - %2 Processando rilascio per tasto #%1 - %2 - + Distance change for button #%1 - %2 Cambio di distanza per tasto #%1 - %2 - - - + + + Button Tasto - - - - + + + + [NO KEY] [NO TASTO] - + [Set %1 1W] [Set %1 1DIREZ] - + [Set %1 2W] [Set %1 2DIREZ] - + [Set %1 WH] [Set %1 PREMENDO] @@ -2532,47 +2541,47 @@ Scartandola, il controller tornerà ad essere un joystick una volta aggiornati t JoyButtonContextMenu - + Toggle Cambio stato - + Turbo Turbo - + Clear Cancella - + Set Select Seleziona set - + Disabled Disattivato - + Set %1 Set %1 - + Set %1 1W Set %1 1DIREZ - + Set %1 2W Set %1 2DIREZ - + Set %1 WH Set %1 PREMENDO @@ -2580,118 +2589,118 @@ Scartandola, il controller tornerà ad essere un joystick una volta aggiornati t JoyButtonSlot - - + + Mouse Mouse - + Up Su - + Down Giù - + Left Sinistra - + Right Destra - + LB TastoMouseSX - + MB TastoMouseCENTRO - + RB TastoMouseDX - + B4 Tasto4 - + B5 Tasto5 - + Pause Pausa - + Hold Tieni - + Cycle Ciclo - + Distance Distanza - + Release Rilascia - + Mouse Mod Modifica mouse - + Press Time Tempo di pressione - + Delay Ritardo - + Load %1 Carica %1 - + Set Change %1 Cambio di set %1 - + [Text] %1 [Testo] %1 - + [Exec] %1 [Esec] %1 - + [NO KEY] [NO TASTO] @@ -2699,9 +2708,9 @@ Scartandola, il controller tornerà ad essere un joystick una volta aggiornati t JoyControlStick - - - + + + Stick Analogico @@ -2709,37 +2718,37 @@ Scartandola, il controller tornerà ad essere un joystick una volta aggiornati t JoyControlStickButton - - - + + + Up Su - - - + + + Down Giù - - - + + + Left Sinistra - - - + + + Right Destra - - - + + + Button Tasto @@ -2747,67 +2756,67 @@ Scartandola, il controller tornerà ad essere un joystick una volta aggiornati t JoyControlStickContextMenu - + Mouse (Normal) Mouse (normale) - + Mouse (Inverted Horizontal) Mouse (orizzontale invertito) - + Mouse (Inverted Vertical) Mouse (verticale invertito) - + Mouse (Inverted Horizontal + Vertical) Mouse (orizzontale + verticale invertito) - + Arrows Frecce - + Keys: W | A | S | D Tasti: W | A | S | D - + NumPad TastNum - + None Niente - + Standard Standard - + Eight Way 8 direzioni - + 4 Way Cardinal 4 direzioni cardinali - + 4 Way Diagonal 4 direzioni diagonali - + Mouse Settings Impostazioni mouse @@ -2815,86 +2824,86 @@ Scartandola, il controller tornerà ad essere un joystick una volta aggiornati t JoyControlStickEditDialog - + Dialog Finestra di dialogo - + X: X: - - - - - + + + + + 0 0 - + Y: Y: - + Distance: Distanza: - + Presets: Preimpostazioni: - + Mouse (Normal) Mouse (normale) - + Mouse (Inverted Horizontal) Mouse (orizzontale invertito) - + Mouse (Inverted Vertical) Mouse (verticale invertito) - + Mouse (Inverted Horizontal + Vertical) Mouse (orizzontale + verticale invertito) - + Arrows Frecce - + Keys: W | A | S | D Tasti: W | A | S | D - + NumPad TastNum - + None Niente - + Stick Mode: Modalità analogico: - + Standard: 8 region stick with two direction buttons active when the stick is in a diagonal region. @@ -2921,72 +2930,72 @@ alla direzione cardinale dell'analogico. Utile per i menu. corrispondente alla zona diagonale dell'analogico. - + 4 Way Cardinal 4 direzioni cardinali - + 4 Way Diagonal 4 direzioni diagonali - - + + Dead zone value to use for an analog stick. Valore zona morta da usare per un analogico. - - + + Value when an analog stick is considered moved 100%. Valore in cui un analogico viene considerato spostato al 100%. - - + + The area (in degrees) that each diagonal region occupies. L'area (in gradi) che ogni regione diagonale occupa. - + Square Stick: Analogico quadrato: - - + + Percentage to modify a square stick coordinates to confine values to a circle Percentuale per modificare le coordinate di un analogico quadrato per confinare i valori ad un cerchio. - + % % - + Stick Delay: Ritardo analogico: - - + + Time lapsed before a direction change is taken into effect. Tempo trascorso prima che il cambio di una direzione entri in funzione. - + s s - + Modifier: Modificatore: - + Edit button that is active while the stick is active. This button is useful for assigning zones with @@ -3000,68 +3009,68 @@ assegnare funzionalità cammina/corri ad un analogico. - + PushButton PremiTasto - + Na&me: Name: Nome: - + Specify the name of an analog stick. Specifica il nome di un analogico. - + Mouse Settings Impostazioni mouse - + Standard Standard - + Bearing: Tolleranza: - + % Safe Zone: % Zona sicura: - + Eight Way 8 direzioni - + Dead Zone: Zona morta: - + Max Zone: Zona massima: - + Diagonal Range: Raggio diagonale: - + Set Set - + Set %1 Set %1 @@ -3069,9 +3078,9 @@ analogico. JoyControlStickModifierButton - - - + + + Modifier Modificatore @@ -3079,9 +3088,9 @@ analogico. JoyDPad - - - + + + DPad DPad @@ -3089,37 +3098,37 @@ analogico. JoyDPadButton - - - + + + Up Su - - - + + + Down Giù - - - + + + Left Sinistra - - - + + + Right Destra - - - + + + Button Tasto @@ -3127,267 +3136,272 @@ analogico. JoyTabWidget - - - - - - + + + + + + <New> <Nuovo> - - + + Remove Rimuovi - - + + Remove configuration from recent list. Rimuovi configurazione dalla lista dei recenti. - - + + Load Carica - - + + Load configuration file. Carica file di configurazione. - - + + Save Salva - - + + Save changes to configuration file. Salva cambiamenti sul file di configurazione. - - + + Save As Salva come - - + + Save changes to a new configuration file. Salva cambiamenti su un nuovo file di configurazione. - - + + Sets Set - + Copy from Set Copia da Set - + Settings Impostazioni - - + + Set 1 Set 1 - - + + Set 2 Set 2 - - + + Set 3 Set 3 - - + + Set 4 Set 4 - - + + Set 5 Set 5 - - + + Set 6 Set 6 - - + + Set 7 Set 7 - - + + Set 8 Set 8 - - + + Stick/Pad Assign Assegna analogico/pad - - + + Controller Mapping Mappatura controller - - + + Quick Set Set rapido - - + + Names Nomi - - + + Toggle button name displaying. Aziona visualizzazione del nome del tasto. - - + + Pref Pref - - + + Change global profile settings. Cambia opzioni globali profilo. - - - + + + Reset Reset - - + + Revert changes to the configuration. Reload configuration file. Ripristina modifiche alla configurazione. Ricarica file di configurazione. - + Open Config Apri configurazione - + Config Files (*.amgp *.xml) File di configurazione (*.amgp *.xml) - - - + + + Config File (*.%1.amgp) File di configurazione (*.%1.amgp) - - + + Do you really want to reset buttons settings for joystick? + + + + + Save Profile Changes? Salvare cambiamenti profilo? - - + + Changes to the new profile have not been saved. Would you like to save or discard the current profile? I cambiamenti del nuovo profilo non sono stati salvati. Vuoi salvare o scartare il profilo corrente? - - + + Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? I cambiamenti del profilo "%1" non sono stati salvati. Vuoi salvare o scartare il profilo corrente? - + Sticks Analogici - - + + DPads DPads - + No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. Nessun tasto è stato assegnato. Per favore usa il Set rapido per assegnare funzioni ai tasti o disattiva il nascondimento dei tasti vuoti. - - + + Set %1: %2 Set %1: %2 - - + + Set %1 Set %1 - + Copy Set Assignments Copia assegnazioni set - + Are you sure you want to copy the assignments and device properties from %1? Sei sicuro di voler copiare le assegnazioni e le proprietà dispositivo da %1? - - - + + + Save Config Salva configurazione - - + + Set Set @@ -3395,7 +3409,7 @@ assegnare funzioni ai tasti o disattiva il nascondimento dei tasti vuoti. Joystick - + Joystick Joystick @@ -3403,98 +3417,98 @@ assegnare funzioni ai tasti o disattiva il nascondimento dei tasti vuoti. JoystickStatusWindow - + Properties Proprietà - + Details Dettagli - + Name: Nome: - - - - - - - + + + + + + + %1 %1 - + Number: Numero: - + Axes: Assi: - + Buttons: Tasti: - + Hats: Hat switch: - + GUID: GUID: - + Game Controller: Controller di gioco: - + Axes Assi - + Buttons Tasti - + Hats Hat switch - + %1 (#%2) Properties %1 (#%2) Proprietà - + Axis %1 Asse %1 - + Hat %1 Hat switch %1 - + No No - + Yes @@ -3502,62 +3516,67 @@ assegnare funzioni ai tasti o disattiva il nascondimento dei tasti vuoti. MainSettingsDialog - + Edit Settings Modifica impostazioni - + General Generale - + Controller Mappings Mappatura controller - + Language Lingua - + Auto Profile Auto-profilo - + Mouse Mouse - + Advanced Avanzate - + + Profile Direc&tory: + + + + <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> <html><head/><body><p>Specifica la cartella predefinita che il programma deve usare nelle finestre di dialogo file mentre si carica un profilo o se ne salva uno nuovo.</p></body></html> - + Recent Profile Count: Conteggio profili recenti: - + <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> <html><head/><body><p>Numero di profili che possono essere messi nella lista dei profili recenti. 0 significa che il programma non impone alcun limite sui profili visualizzati.</p></body></html> - + Gamepad Poll Rate: Velocità di polling del gamepad: - + Change the poll rate that the program uses to discover new events from gamepads. Defaults to 10 ms. @@ -3572,29 +3591,29 @@ di CPU maggiore quindi per favore esamina l'impostazione che userai. - + Hide main window when the main window close button is clicked instead of quitting the program. Nascondi finestra principale quando il tasto chiusura della finestra principale viene cliccato invece di uscire dal programma. - + Close To Tray Riduci nell'area di notifica - + Have Windows start antimicro at system startup. Avvia antimicro automaticamente all'avvio di Windows. - + Launch At Windows Startup Esegui all'avvio di Windows - + Display recent profiles for all controllers as a single list in the tray menu. Defaults to using sub-menus. @@ -3603,12 +3622,12 @@ come una lista singola nell'area di notifica. Di predefinito, usa i sottomenu. - + Single Profile List in Tray Lista profili singola nell'area di notifica - + Have the program minimize to the taskbar. By default, the program minimizes to the system tray if available. @@ -3616,12 +3635,12 @@ tray if available. il programma si riduce a icona se possibile. - + Minimize to Taskbar Riduci a icona - + This option will cause the program to hide all buttons that have no slots assigned to them. The Quick Set dialog window will have to be used @@ -3632,12 +3651,12 @@ usare la finestra di dialogo Set rapido per mostrare la finestra di dialogo di modifica per i tasti gamepad. - + Hide Empty Buttons Nascondi tasti vuoti - + When the program is launched, open the last known profile that was opened during the previous session. @@ -3646,157 +3665,167 @@ l'ultimo profilo conosciuto usato nella precedente sessione. - + Auto Load Last Opened Profile Auto-carica l'ultimo profilo aperto - + Only show the system tray icon when the program first launches. Mostra solo l'icona dell'area di notifica quando il programma si apre la prima volta. - + Launch in Tray Esegui nell'area di notifica - + Associate .amgp files with antimicro in Windows Explorer. Associa file .amgp con antimicro in Windows Explorer. - + Associate Profiles Associa profili - + Key Repeat Ripetizione tasto - + Active keys will be repeatedly pressed when this option is enabled. I tasti attivi verranno premuti a ripetizione quando questa opzione è attivata. - - + + Enable Attiva - + Specifies how much time should elapse before key repeating begins. Specifica quanto tempo debba passare prima che cominci la ripetizione tasto. - + Specifies how many times key presses will be performed per seconds. Specifica quante volte al secondo verranno premuti i tasti. - + <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> <html><head/><body><p>antimicro è stato tradotto in molte lingue da collaboratori. Di base, il programma sceglierà una traduzione adatta basandosi sulle impostazioni della lingua del tuo sistema. Tuttavia, puoi far caricare ad antimicro una lingua differente a seconda di quella che scegli nella lista qui sotto.</p></body></html> - + Português do Brasil - + Français - + Deutsch - + Italiano - + 日本語 - + Русский - + српски / srpski - + 简体中文 - + Español - + українська - + Polski - + + History Si&ze: + + + + Log File: - + Log Level: - + None Niente - + Error - + Warning - + Info Info - + Debug + + + Reset + Reset + French Francese @@ -3822,22 +3851,22 @@ per seconds. Ucraino - + Class Classe - + Title Titolo - + Program Programma - + Disable the "Enhanced Pointer Precision" Windows setting while antimicro is running. Disabling "Enhanced Pointer Precision" will allow mouse movement within antimicro to be more @@ -3847,32 +3876,31 @@ mentre antimicro è in esecuzione. Disattivare "Aumenta precisione puntator permetterà movimenti del mouse più precisi. - + Disable Enhance Pointer Precision Disattiva Aumenta precisione puntatore - + Smoothing - Histor&y Size: - Dimensioni storia: + Dimensioni storia: - + Weight &Modifier: Modificatore peso: - + Refresh Rate: Frequenza di aggiornamento: - + The refresh rate is the amount of time that will elapse in between mouse events. Please be cautious when editing this setting as it will cause the program to use @@ -3887,17 +3915,17 @@ basso può causare instabilità al sistema. Per favore esamina l'impostazione che userai. - + Spring Fonte - + Screen: Schermo: - + Utilize the specified screen for spring mode. On Linux, the default is to use the primary screen. On Windows, the default is to use all available screens. @@ -3906,29 +3934,29 @@ di predefinito viene usato lo schermo primario. Su Windows, di predefinito vengono usati tutti gli schermi disponibili. - + Accel Numerator: Numeratore accelerazione: - - - + + + 0 0 - + Accel Denominator: Denominatore accelerazione: - + Accel Threshold: Soglia accelerazione: - + If the acceleration values for the virtual mouse have been changed by a different process, particularly when quitting an older game, then you might want to reset the acceleration @@ -3939,37 +3967,36 @@ un vecchio gioco, allora potresti voler resettare i valori di accelerazione usati dal mouse virtuale. - + Reset Acceleration Resetta accelerazione - + Delay: Ritardo: - Profi&le Directory: - Cartella profilo: + Cartella profilo: - + ms ms - + Rate: Rapporto: - + times/s volte/s - + Below is a list of the custom mappings that have been saved. You can use the following table to delete mappings or have mappings temporarily disabled. You can also disable mappings that are included with SDL; just insert a new row with the appropriate joystick GUID and check disable. Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. @@ -3978,34 +4005,34 @@ Settings will not take affect until you either refresh all joysticks or unplug t Le impostazioni non avranno effetto finché non aggiorni tutti i joystick o disconnetti quel joystick in particolare. - + GUID GUID - + Mapping String Stringa di mappatura - + Disable? Disattivare? - - + + Delete Cancella - + Insert Inserisci - - + + Default Predefinito @@ -4014,7 +4041,7 @@ Le impostazioni non avranno effetto finché non aggiorni tutti i joystick o disc Portoghese brasiliano - + English Inglese @@ -4023,49 +4050,49 @@ Le impostazioni non avranno effetto finché non aggiorni tutti i joystick o disc Tedesco - - + + Active Attivo - + Devices: Dispositivi: - - + + All Tutto - + Device Dispositivi - + Profile Profili - + Default? Predefinito? - + Add Aggiungi - + Edit Modifica - + Also, Windows users who want to use a low value should also check the "Disable Enhance Pointer Precision" checkbox if you haven't disabled the option in Windows. @@ -4074,35 +4101,45 @@ anche mettere la spunta su "Disattiva Aumenta precisione puntatore" se non hanno già disattivato tale opzione in Windows. - + Select Default Profile Directory Seleziona la cartella del profilo predefinito - + Are you sure you want to delete the profile? Sei sicuro di voler cancellare il profilo? - + Save Log File As - + Log Files (*.log) + + + Do you really want to reset setting? + + + + + Would you like to reset mappings too? + + MainWindow - + antimicro antimicro - + No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu Non è stato trovato alcun joystick. @@ -4113,115 +4150,115 @@ Per favore collega un joystick e scegli l'opzione "Aggiorna i joystick Se gli eventi non vengono registrati dal gioco, clicca qui per eseguire l'applicazione da Amministratore. - + If events are not seen by a game, please click here to run this application as Administrator. - + &App App - + &Options Opzioni - + &Help Aiuto - - + + &Quit Esci - + Ctrl+Q Ctrl+Q - - + + &Update Joysticks Aggiorna i joystick - + Ctrl+U Ctrl+U - - + + &Hide Nascondi - + Ctrl+H Ctrl+H - + &About A proposito - + Ctrl+A Ctrl+A - + About &Qt - + &Properties - + &Key Checker - + &GitHub Page - + &Game Controller Mapping - + S&ettings - + &Stick/Pad Assign - + &Wiki - + &Issues - + &Calibration @@ -4238,7 +4275,7 @@ Per favore collega un joystick e scegli l'opzione "Aggiorna i joystick Controllo tasti - + Home Page Homepage @@ -4263,49 +4300,49 @@ Per favore collega un joystick e scegli l'opzione "Aggiorna i joystick Wiki - + Could not find a proper controller identifier. Exiting. Impossibile trovare un identificatore controller adatto. Esco. - - - - - - - + + + + + + + (%1) (%1) - - + + Open File Apri file - + &Restore Ripristina - + Calibration couldn't be opened - + You must connect at least one controller to open the window - + Run as Administrator? Eseguire come amministratore? - + Are you sure that you want to run this program as Adminstrator? Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. @@ -4314,17 +4351,17 @@ Some games run as Administrator which will cause events generated by antimicro t Certi giochi vengono eseguiti come Amministratore, il che rende inutilizzabili certi eventi generati da antimicro a meno che anche antimicro venga eseguito come Amministratore. Questo succede per via dei problemi causati dalle opzioni del Controllo account utente (UAC) da Windows Vista in poi. - + Failed to elevate program Impossibile elevare il programma - + Failed to restart this program as the Administrator Impossibile riavviare questo programma come Amministratore - + Could not find controller. Exiting. Impossibile trovare controller. Esco. @@ -4332,12 +4369,12 @@ Certi giochi vengono eseguiti come Amministratore, il che rende inutilizzabili c MouseAxisSettingsDialog - + Mouse Settings - Impostazioni mouse - - + Set %1 Set %1 @@ -4345,12 +4382,12 @@ Certi giochi vengono eseguiti come Amministratore, il che rende inutilizzabili c MouseButtonSettingsDialog - + Mouse Settings - Impostazioni mouse - - + Set %1 Set %1 @@ -4358,12 +4395,12 @@ Certi giochi vengono eseguiti come Amministratore, il che rende inutilizzabili c MouseControlStickSettingsDialog - + Mouse Settings Impostazioni mouse - + Set %1 Set %1 @@ -4371,12 +4408,12 @@ Certi giochi vengono eseguiti come Amministratore, il che rende inutilizzabili c MouseDPadSettingsDialog - + Mouse Settings Impostazioni mouse - + Set %1 Set %1 @@ -4384,17 +4421,17 @@ Certi giochi vengono eseguiti come Amministratore, il che rende inutilizzabili c MouseSettingsDialog - + Mouse Settings Impostazioni mouse - + Mouse Mode: Modalità mouse: - + Cursor mode is used to move the mouse cursor around the screen relative to its current position depending on how much you move an axis @@ -4417,80 +4454,80 @@ del mouse tornerà al centro dello schermo quando l'asse torna nella la zona morta. - + Cursor Cursore - + Spring Fonte - + Acceleration: Accelerazione: - + Enhanced Precision Aumenta precisione - - + + Linear Lineare - + Quadratic Quadratico - + Cubic Cubico - + Quadratic Extreme Quadratico estremo - + Power Function Funzione di potenza - + Easing Quadratic Interpolazione quadratica - + Easing Cubic Interpolazione cubica - + Mouse Speed Settings Impostazioni velocità mouse - + Enable to change the horizontal and vertical speed boxes at the same time. Permette di modificare i campi di velocità orizzontale e verticale allo stesso tempo. - + Change Together Modifica insieme - + Options for adding more acceleration to the mouse movement beyond what the acceleration curve would produce. Acceleration is added based on how quickly an axis is @@ -4500,17 +4537,17 @@ using typical gamepad analog sticks. - + Delta Acceleration - + &Multiplier: - + Mi&n Threshold: @@ -4522,8 +4559,8 @@ Speed: orizzontale: - - + + 1 = 20 pps 1 = 20 pixel/sec @@ -4534,33 +4571,33 @@ Speed: verticale: - + Wheel Hori. Speed: Velocità orizz. rotella: - + Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. Imposta la velocità usata per il movimento orizzontale della rotella del mouse a seconda del numero di tacche al secondo simulate. - + Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. Imposta la velocità usata per il movimento verticale della rotella del mouse a seconda del numero di tacche al secondo simulate. - + Sensitivit&y: - + For Power Function acceleration curve. Specifies the factor to use for curve sensitivity. When the value is above 1.0, the mouse movement will be accelerated @@ -4571,13 +4608,13 @@ valore supera 1, il movimento del mouse verrà accelerato più velocemente nella parte bassa di un'asse. - + Easing Duration: Durata interpolazione: - - + + s s @@ -4590,23 +4627,23 @@ più velocemente nella parte bassa di un'asse. Moltiplicatore: - + Highest value to accelerate mouse movement by Il valore più grande per cui accelerare il mouse - + x x - + Start %: Inizio %: Start %: - + Acceleration begins at this percentage of the base multiplier L'accelerazione comincia da questa percentuale del moltiplicatore di base @@ -4617,93 +4654,93 @@ Threshold: minima: - + Minimum amount of axis travel required for acceleration to begin Valore minimo di spostamento asse richiesto per far sì che cominci l'accelerazione - + Max Threshold: Soglia massima: - + Maximum axis travel before acceleration has reached the multiplier value Valore massimo di spostamento asse prima che l'accelerazione raggiunga il valore del moltiplicatore - + E&xtra Duration: - + Curve: Curva: - + Ease Out Sine Sinusoidale graduale - + Ease Out Quad Quadratico graduale - + Ease Out Cubic Cubico graduale - + Release Radius: Raggio di rilascio: - + Specifies that the spring area will be relative to the mouse position set by a non-relative spring. Specifica che l'area della fonte sarà relativa alla posizione del mouse impostata da una fonte non relativa. - + Relative Relativa - + Mouse Status Stato mouse - + X: X: - - + + 0 (0 pps) 0 (0 pixel/sec) - + Y: Y: - - + + 1 = 1 notch(es)/s 1 = 1 tacca(tacche)/sec - + Enhanced: Three tier curve that makes the mouse move slow on the low end of an axis and fast on the high end. @@ -4747,19 +4784,19 @@ gradualmente accelerata per un periodo di tempo usando una curva cubica. - + Hori&zontal Speed: - + &Vertical Speed: - + Wheel Vert. Speed: Velocità orizz. @@ -4770,7 +4807,7 @@ rotella: Sensibilità: - + Specifies the amount of time (in seconds) that will be required before the mouse is fully accelerated after reaching the high end of an axis. @@ -4791,10 +4828,10 @@ legati all'estremamente limitata gamma di input disponibili usando i tipici analogici dei gamepad. - - - - + + + + % % @@ -4803,7 +4840,7 @@ disponibili usando i tipici analogici dei gamepad. Durata aggiuntiva: - + Extend the time that extra acceleration is applied. Axis travel will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. @@ -4812,17 +4849,17 @@ Il percorso dell'asse verrà considerato. Un movimento più lento diminuirà il tempo effettivo in cui verrà applicata l'accelerazione supplementare. - + Spring Settings Impostazioni fonte - + Spring Width: Larghezza fonte: - + Changes the width of the region that the cursor can move in spring mode. 0 will use the entire width of your screen. @@ -4831,12 +4868,12 @@ muoversi in modalità fonte. 0 utilizzerà l'intera grandezza dello schermo. - + Spring Height: Altezza fonte: - + Changes the height of the region that the cursor can move in spring mode. 0 will use the entire height of your screen. @@ -4845,8 +4882,8 @@ muoversi in modalità fonte. 0 utilizzerà l'intera grandezza dello schermo. - - + + %n notch(es)/s %n notch/s @@ -4857,7 +4894,7 @@ grandezza dello schermo. QKeyDisplayDialog - + Key Checker Controllo tasti @@ -4866,34 +4903,34 @@ grandezza dello schermo. <html><head/><body><p>Premi un tasto sulla tua tastiera per vedere come viene rilevato da questa applicazione. La finestra mostrerà il valore tasto nativo, il valore originale dato da Qt (se applicabile), e il valore personalizzato usato da antimicro.</p><p>Il valore tasto antimicro e il valore tasto Qt solitamente saranno gli stessi. antimicro cerca di i valori tasto definiti in Qt se possibile. Guarda la pagina <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> per una lista di valori definiti da Qt. Se scopri un tasto che non è supportato nativamente da questo programma, per favore segnala il problema alla <a href="https://github.com/AntiMicro/antimicro"><span style=" text-decoration: underline; color:#0057ae;">pagina GitHub</span></a> cosicché il programma possa essere modificato per supportarlo direttamente. In questo momento, un prefisso personalizzato viene aggiunto ai valori sconosciuti in modo che possano essere ancora utilizzati; il problema principale è che il profilo non sarà più portatile.</p></body></html> - - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - + Event Handler: Gestore di eventi: - + Native Key Value: Valore tasto nativo: - - - + + + 0x00000000 0x00000000 - + Qt Key Value: Valore tasto Qt: - + antimicro Key Value: Valore tasto antimicro: @@ -4901,260 +4938,260 @@ grandezza dello schermo. QObject - + Super Super - + Menu Menu - + Mute Muto - + Vol+ Vol+ - + Vol- Vol- - + Play/Pause Play/Pausa - + Play Play - + Pause Pausa - + Prev Prec - + Next Succ - + Mail Mail - + Home Home - + Media Media - + Search Cerca - + Daemon launched Demone avviato - + Failed to launch daemon Impossibile avviare demone - + Launching daemon Avviando demone - - + + Display string "%1" is not valid. La stringa di display "%1" non è valida. - + Failed to set a signature id for the daemon Impossibile impostare un ID firma per il demone - + Failed to change working directory to / Impossibile cambiare la cartella di lavoro per / - + Quitting Program Chiudendo il programma - + # of joysticks found: %1 № di joystick trovati: %1 - + List Joysticks: Lista joystick: - + --------------- --------------- - + Joystick %1: Joystick %1: - + Index: %1 Indice: %1 - + GUID: %1 GUID: %1 - + Name: %1 Nome: %1 - + Yes - + No No - + Game Controller: %1 Controller di gioco: %1 - + # of Axes: %1 № di assi: %1 - + # of Buttons: %1 № di tasti: %1 - + # of Hats: %1 № di hat switch: %1 - + Attempting to use fallback option %1 for event generation. Tentativo di utilizzo dell'opzione alternativa %1 per la generazione eventi. - + Failed to open event generator. Exiting. Impossibile aprire il generatore di eventi. Esco. - + Using %1 as the event generator. Sto usando %1 come generatore eventi. - + Could not raise process priority. Impossibile aumentare la priorità del processo. - + Last button - + There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? - + Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". - + Profile location %1 is not an XML file. Il profilo in %1 non è un file XML. - + Profile location %1 does not exist. Il profilo in %1 non esiste. - - - + + + Controller identifier is not a valid value. L'identificatore controller non è un valore valido. - + An invalid set number '%1' was specified. È stato specificato un numero di set '%1' invalido. - + Controller identifier '%s'' is not a valid value. L'identificatore controller '%s'' non è un valore valido. - + No set number was specified. Non è stato specificato un numero di set. - + No controller was specified. Non è stato specificato un controller. - + No display string was specified. Non è stata specificata una stringa di visualizzazione. - + An invalid event generator was specified. È stato specificato un generatore di eventi invalido. - + No event generator string was specified. Nessuna stringa di generatore eventi è stata specificata. @@ -5163,7 +5200,7 @@ grandezza dello schermo. È stato rilevato il flag stile Qt ma non è stato specificato alcuno stile. - + No log file specified. @@ -5280,22 +5317,22 @@ grandezza dello schermo. indice controller o GUID. - + Logging started - + Auto-switching to profile "%1". - + Auto-switching to nullptr profile! - + xinput version must be at least 2.0. No mouse acceleration changes will occur. La versione xinput dev'essere almeno 2.0. Non avverrà alcuna modifica all'accelerazione mouse. @@ -5303,18 +5340,18 @@ grandezza dello schermo. QuickSetDialog - + Quick Set Set rapido - + <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> <html><head/><body><p>Per favore premi un tasto o muovi un'asse su %1 (<span style=" font-weight:600;">%2</span>).<br/>Verrà mostrata una finestra di dialogo che<br/>ti permetterà di creare un'assegnazione.</p></body></html> - - + + Quick Set %1 Set rapido %1 @@ -5322,12 +5359,12 @@ grandezza dello schermo. SetAxisThrottleDialog - + Throttle Change Modifica acceleratore - + The throttle setting for Axis %1 has been changed. Would you like to distribute this throttle change to all sets? @@ -5339,12 +5376,12 @@ Vuoi distribuire questa modifica su tutti i set? SetJoystick - + Set %1: %2 Set %1: %2 - + Set %1 Set %1 @@ -5352,52 +5389,52 @@ Vuoi distribuire questa modifica su tutti i set? SetNamesDialog - + Set Name Settings Impostazioni nome set - + Set 1 Set 1 - + Set 2 Set 2 - + Set 3 Set 3 - + Set 4 Set 4 - + Set 5 Set 5 - + Set 6 Set 6 - + Set 7 Set 7 - + Set 8 Set 8 - + Name Nome @@ -5405,7 +5442,7 @@ Vuoi distribuire questa modifica su tutti i set? SimpleKeyGrabberButton - + Mouse Mouse @@ -5413,7 +5450,7 @@ Vuoi distribuire questa modifica su tutti i set? SpringModeRegionPreview - + Spring Mode Preview Anteprima modalità fonte @@ -5421,7 +5458,7 @@ Vuoi distribuire questa modifica su tutti i set? UInputEventHandler - + Could not find a valid uinput device file. Please check that you have the uinput module loaded. lsmod | grep uinput @@ -5430,14 +5467,14 @@ Per favore controlla di aver caricato il modulo uinput. lsmod | grep uinput - + Could not open uinput device file Please check that you have permission to write to the device Impossibile aprire il file di dispositivo uinput. Per favore controlla di avere i permessi di scrittura sul dispositivo. - + Using uinput device file %1 File di dispositivo uinput %1 in uso @@ -5445,551 +5482,551 @@ Per favore controlla di avere i permessi di scrittura sul dispositivo. UInputHelper - + a a - + b b - + c c - + d d - + e e - + f f - + g g - + h h - + i i - + j j - + k k - + l l - + m m - + n n - + o o - + p p - + q q - + r r - + s s - + t t - + u u - + v v - + w w - + x x - + y y - + z z - + Esc Esc - + F1 F1 - + F2 F2 - + F3 F3 - + F4 F4 - + F5 F5 - + F6 F6 - + F7 F7 - + F8 F8 - + F9 F9 - + F10 F10 - + F11 F11 - + F12 F12 - + ` ` - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - - + + - - - + = = - + BackSpace BackSpace - + Tab Tab - + [ [ - + ] ] - + \ \ - + CapsLock BlocMaiusc - + ; ; - + ' ' - + Enter Invio - + Shift_L Maiusc_SX - + , , - - + + . . - - + + / / - + Ctrl_L Ctrl_SX - - + + Super_L Super_SX - + Alt_L Alt_SX - + Space Spazio - + Alt_R Alt_DX - + Menu Menu - + Ctrl_R Ctrl_DX - + Shift_R Maiusc_DX - + Up Su - + Left Sinistra - + Down Giù - + Right Destra - + PrtSc Stamp - + Ins Ins - + Del Canc - + Home Home - + End Fine - + PgUp PgSu - + PgDn PgGiù - + NumLock BlocNum - + * * - + + + - + KP_Enter TN_Invio - + KP_1 TN_1 - + KP_2 TN_2 - + KP_3 TN_3 - + KP_4 TN_4 - + KP_5 TN_5 - + KP_6 TN_6 - + KP_7 TN_7 - + KP_8 TN_8 - + KP_9 TN_9 - + KP_0 TN_0 - + SCLK BlocScorr - + Pause Pausa - + Super_R Super_DX - + Mute Muto - + VolDn VolGiù - + VolUp VolSu - + Play Play - + Stop Stop - + Prev Prec - + Next Succ - + [NO KEY] [NO TASTO] @@ -5997,54 +6034,54 @@ Per favore controlla di avere i permessi di scrittura sul dispositivo. UnixWindowInfoDialog - + Captured Window Properties Finestra proprietà catturate - + Information About Window Informazioni sulla finestra - + Class: Classe: - - - + + + TextLabel etichetta di testo - + Title: Titolo: - + Path: Percorso: - + Match By Properties Trova per proprietà - + Class Classe - + Title Titolo - + Path Percorso @@ -6052,9 +6089,9 @@ Per favore controlla di avere i permessi di scrittura sul dispositivo. VDPad - - - + + + VDPad VDPad @@ -6062,224 +6099,224 @@ Per favore controlla di avere i permessi di scrittura sul dispositivo. VirtualKeyPushButton - + Space Spazio - + Tab Tab - + Shift (L) Maiusc (SX) - + Shift (R) Maiusc (DX) - + Ctrl (L) Ctrl (SX) - + Ctrl (R) Ctrl (DX) - + Alt (L) Alt (SX) - - + + Alt (R) Alt (DX) - + Alt Gr - + ` ` - + ~ ~ - - + + - - - + = = - + [ [ - + ] ] - + \ \ - + Caps Caps - + ; ; - + ' ' - + , , - - + + . . - - + + / / - + ESC ESC - + PRTSC STAMP - + SCLK BLOCSCORR - + INS INS - + PGUP PGSU - + DEL CANC - + PGDN PGGIU - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - + NUM LK BLOC NUM - - + + * * - + + + - + Enter Invio @@ -6296,42 +6333,42 @@ I O - + < < - + : : - + Super (L) Super (SX) - + Menu Menu - + Up Su - + Down Giù - + Left Sinistra - + Right Destra @@ -6339,226 +6376,226 @@ O VirtualKeyboardMouseWidget - - + + Keyboard Tastiera - - + + Mouse Mouse - + Mouse Settings Impostazioni mouse - + Left Mouse Sinistra - + Up Mouse Su - + Left Button Mouse Tasto sinistro - + Middle Button Mouse Tasto centrale - + Right Button Mouse Tasto destro - + Wheel Up Mouse Rotella su - + Wheel Left Mouse Rotella sinistra - + Wheel Right Mouse Rotella destra - + Wheel Down Mouse Rotella giù - + Down Mouse Giù - + Right Mouse Destra - + Button 4 Mouse Tasto 4 - + Mouse 8 Mouse Mouse 8 - + Button 5 Mouse Tasto 5 - + Mouse 9 Mouse Mouse 9 - + NONE NIENTE - - + + Last button - - + + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + Others - + Applications Applicazioni - + Browser Back Browser indietro - + Browser Favorites Browser preferiti - + Browser Forward Browser avanti - + Browser Home Browser home - + Browser Refresh Browser aggiorna - + Browser Search Browser cerca - + Browser Stop Browser stop - + Calc Calc - + Email Email - + Media Media - + Media Next Media successivo - + Media Play Media play - + Media Previous Media precedente - + Media Stop Media stop - + Search Cerca - + Volume Down Volume giù - + Volume Mute Volume muto - + Volume Up Volume su @@ -6566,7 +6603,7 @@ O VirtualMousePushButton - + INVALID INVALIDO @@ -6574,28 +6611,28 @@ O WinAppProfileTimerDialog - - + + Capture Application Cattura applicazione - + After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. Dopo aver premuto il tasto "Cattura applicazione", per favore seleziona la finestra dell'applicazione con cui vuoi associare un profilo. L'applicazione attiva verrà catturata dopo il numero di secondi scelto. - + Timer: Timer: - + Seconds Secondi - + Cancel Annulla @@ -6603,12 +6640,12 @@ O WinExtras - + [NO KEY] [NO TASTO] - + AntiMicro Profile Profilo AntiMicro @@ -6616,67 +6653,66 @@ O X11Extras - + ESC ESC - + Tab Tab - + Space Spazio - + DEL CANC - + Return Invio - + KP_Enter TN_Invio - + Backspace Backspace - + Alt Gr - + xinput extension was not found. No mouse acceleration changes will occur. Estensione xinput non trovata. Non avverrà alcuna modifica all'accelerazione mouse. - + xinput version must be at least 2.0. No mouse acceleration changes will occur. La versione xinput dev'essere almeno 2.0. Non avverrà alcuna modifica all'accelerazione mouse. - Virtual pointer found with id=%1. - Trovato puntatore virtuale con id=%1. + Trovato puntatore virtuale con id=%1. - + PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 PtrFeedbackClass non è stato trovato per il puntatore virtuale. Non avverrà alcuna modifica all'accelerazione del mouse con id=%1 - + Changing mouse acceleration for device with id=%1 Modificando l'accelerazione mouse per il dispositivo con id=%1 @@ -6684,7 +6720,7 @@ O XMLConfigReader - + Could not write updated profile XML to file %1. Impossibile scrivere profilo XML aggiornato sul file %1. @@ -6692,7 +6728,7 @@ O XMLConfigWriter - + Could not write to profile at %1. Impossibile scrivere su profilo a %1. @@ -6700,7 +6736,7 @@ O antimicro - + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. @@ -6708,97 +6744,97 @@ O main - + Launch program in system tray only. Esegui programma solo nella barra di sistema. - + Launch program with the tray menu disabled - + Launch program without the main window displayed - + Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers - + location - + Apply configuration file to a specific controller. Value can be a controller index, name, or GUID - + value - + Unload currently enabled profile(s) - + value(s) - + Start joysticks on a specific set. Value can be a controller index, name, or GUID - + number value - + Launch program as a daemon. Use only on Linux. - + Enable logging - + log-type - + Choose a file for logs writing - + filename - + Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. - + event-generation-type - + Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. diff --git a/share/antimicro/translations/antimicro_ja.ts b/share/antimicro/translations/antimicro_ja.ts old mode 100644 new mode 100755 index 45b5e6453..630ff6614 --- a/share/antimicro/translations/antimicro_ja.ts +++ b/share/antimicro/translations/antimicro_ja.ts @@ -4,17 +4,17 @@ AboutDialog - + About - + Version バージョン - + "juliagoda" (since March, 2018) Wanting only to play my favourite old games that din't support gamepads, I found this project (which map keyboard keys and mouse buttons to connected gamepads on Linux) as most proper and recent. But because of poor choices of such application on the internet and since it didn't compile properly, I decided to rescue the project. However, once I finished my work (enough to enjoy playing games) I thought about sharing this code with others. Of course all informations about past programmers will be held. "Ryochan7" (since December 30, 2012 until 2017), I have been working on antimicro in my spare time. What originally started as a fork of QJoyPad and a way to learn proper event-driven programming has turned into something much bigger than I originally intended. Although I have spent a lot of time learning new techniques, finding out more about the domain of KB+M emulation, and spending Friday nights bashing my head against my keyboard, it has been a fun and enriching experience overall. @@ -32,17 +32,17 @@ As of May 24, 2016, this project has moved to https://github.com/AntiMicro/antim - + Copyright: 2013 - 2018 - + Info 情報 - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -86,7 +86,7 @@ p, li { white-space: pre-wrap; } - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -204,57 +204,57 @@ p, li { white-space: pre-wrap; } - + Changelog - + Credits - + antimicro antimicro - + About Development - + License ライセンス - + Program Version %1 - + Program Compiled on %1 at %2 - + Built Against SDL %1 - + Running With SDL %1 - + Using Qt %1 - + Using Event Handler: %1 @@ -262,151 +262,160 @@ p, li { white-space: pre-wrap; } AddEditAutoProfileDialog - + Auto Profile Dialog - + Profile: プロファイル: - - + + Browse - + Window: ウィンドウ: - - + + Select Window. Click on the appropriate application window and the application file path will be populated in the form. - + Detect Window Properties - + Class: - + Title: タイトル: - + + set partial title + + + + Application: アプリケーション: - + Select - + + De&vices: + + + Devices: - デバイス: + デバイス: - - + + Select this profile to be the default loaded for the specified device. The selection will be used instead of the all default profile option. - + Set as Default for Controller - - + + A different profile is already selected as the default for this device. - + Current (%1) - + Open Config - - + + Select Program - + Programs (*.exe) - + Please use the main default profile selection. - + Please select a window by using the mouse. Press Escape if you want to cancel. - + Capture Application Window - + Could not obtain information for the selected window. - + Application Capture Failed - + Profile file path is invalid. - + No window matching property was specified. - + Program path is invalid or not executable. - + File is not an .exe file. - + No window matching property was selected. @@ -414,502 +423,502 @@ of the all default profile option. AdvanceButtonDialog - - + + Advanced 詳細設定 - + Assignments 割り当て - + Toggle トグル - + Turbo 連射 - + Set Selector - + Blank or KB/M - + Hold - + Pause Pause - + Cycle - + Distance - + Insert - + Delete 削除 - + Clear All - + Time: - + 0.01s 0.01 秒 - + 0s 0 秒 - + Insert a pause that occurs in between key presses. - + Release - - + + Insert a new blank slot. - + Delete a slot. - + Clear all currently assigned slots. - + Specify the duration of an inserted Pause or Hold slot. - + 0m 0 分 - + &Mouse Speed Mod: - - + + Specify the range past an axis dead zone in which a sequence of actions will execute. - + Distance: - - + + % % - + Mouse Mod - + Press Time - + Delay - + Execute - + Load 読み込み - + Set Change - + Text Entry - + Placeholder - - + + 0 0 - + Set the percentage that mouse speeds will be modified by. - + Auto Reset Cycle After - + seconds - + Executable: - + ... - + Arguments: - - - + + + Enabled 有効 - + Mode: - + <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> - + Normal - + Gradient - + Pulse - + Delay: - + 0.10s 0.10 秒 - + Rate: - + 10.0/s - - + + Disabled - + Select Set 1 One Way - + Select Set 1 Two Way - + Select Set 1 While Held - + Select Set 2 One Way - + Select Set 2 Two Way - + Select Set 2 While Held - + Select Set 3 One Way - + Select Set 3 Two Way - + Select Set 3 While Held - + Select Set 4 One Way - + Select Set 4 Two Way - + Select Set 4 While Held - + Select Set 5 One Way - + Select Set 5 Two Way - + Select Set 5 While Held - + Select Set 6 One Way - + Select Set 6 Two Way - + Select Set 6 While Held - + Select Set 7 One Way - + Select Set 7 Two Way - + Select Set 7 While Held - + Select Set 8 One Way - + Select Set 8 Two Way - + Select Set 8 While Held - + sec. - + /sec. - + Set %1 セット %1 - - + + Select Set %1 - + One Way - + Two Way - + While Held - + Choose Executable - + Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. - + Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. - + Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. - + Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. - + Chose a profile to load when this slot is activated. - + Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. - + Specify the time that keys past this slot should be held down. - + Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. - + Change to selected set once slot is activated. - + Full string will be typed when a slot is activated. - + Execute program when slot is activated. - - + + Choose Profile - + Config Files (*.amgp *.xml) 構成ファイル (*.amgp *.xml) @@ -917,157 +926,157 @@ of the all default profile option. AdvanceStickAssignmentDialog - + Stick/Pad Assignment - + Sticks スティック - + DPads 十字キー - - + + %1 (Joystick %2) %1 (ジョイスティック %2) - + Stick 1 スティック 1 - - - + + + Enabled 有効 - - - - - - + + + + + + Assign 割り当て - - + + X Axis: X 軸: - - + + Y Axis: Y 軸: - + Stick 2 スティック 2 - + Number of Physical DPads: %1 物理方向キーの数: %1 - + Virtual DPad 1 仮想方向キー 1 - + Up: 上: - + Down: 下: - + Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. 注: このウィンドウは、バージョン 2.0 より前の antimicro で作成したプロファイルとの後方互換性を確保するために使用します。バージョン 2.0 以降では「ゲームコントローラーマッピング」ウィンドウの使用を推奨します。 - + Left: 左: - + Right: 右: - - - - + + + + Axis %1 軸 %1 - - - - + + + + Axis %1 - 軸 %1 - - - - - + + + + Axis %1 + 軸 %1 + - - - - + + + + Button %1 ボタン %1 - + Move stick 1 along the X axis - + Move stick 1 along the Y axis - + Move stick 2 along the X axis - + Move stick 2 along the Y axis - - - - + + + + Press a button or move an axis @@ -1075,179 +1084,179 @@ of the all default profile option. AxisEditDialog - + Axis - - + + Mouse (Horizontal) - - + + Mouse (Inverted Horizontal) - - + + Mouse (Vertical) - - + + Mouse (Inverted Vertical) - - + + Arrows: Up | Down - - + + Arrows: Left | Right - - + + Keys: W | S - - + + Keys: A | D - - + + NumPad: KP_8 | KP_2 - - + + NumPad: KP_4 | KP_6 - - - + + + None - - + + Set the value to use as the limit for an axis. Useful for a worn out analog stick. - + Negative Half Throttle - + Positive Half Throttle - + Name: 名前: - + Specify the name of an axis. - + Mouse Settings マウスの設定 - - + + Set the value of the dead zone for an axis. - + Presets: プリセット: - + Dead Zone: - + Max Zone: - - + + [NO KEY] [割り当てなし] - + Throttle setting that determines the behavior of how to interpret an axis hold or release. - + Negative Throttle - + Normal - + Positive Throttle - + Current Value: - + Set セット - + Set %1 セット %1 - + Left Mouse Button 左マウスボタン - + Right Mouse Button 右マウスボタン @@ -1255,37 +1264,37 @@ interpret an axis hold or release. ButtonEditDialog - + Dialog - + To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab 割り当てを新規作成するには、キーボードのキーを押すか、「キーボード」あるいは「マウス」タブのいずれかのボタンをクリックしてください - + Placeholder - + Toggle トグル - + Enables a key press or release to only occur when a controller button is pressed. - + Enables rapid key presses and releases. Turbo controller. - + Turbo 連射 @@ -1294,38 +1303,38 @@ interpret an axis hold or release. 現在の割り当て: - + Last keyboard/mouse button: - + Slots - + Na&me: 名前(&M): - + Specify the name of a button. - + Action: アクション: - + Specify the action that will be performed in game while this button is being used. - + Advanced 詳細設定 @@ -1338,52 +1347,52 @@ this button is being used. セット %1 - - - + + + Choose your keyboard key - + No button - - - - + + + + Last button - + To change settings for last button, it must be at least one assignment from keyboard to gamepad - + To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad - + To open advanced dialog, it's needed to map at least one button from keyboard to gamepad - + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + As last gamepad button has been set - + Index %1 @@ -1391,190 +1400,190 @@ this button is being used. Calibration - + Form - - + + Start calibration - + Controller: - + Sticks: - - Use settings from jstest-gtk - - - - + Reset settings - + Cancel キャンセル - - + + Save 保存 - - + + Calibration - - Do you really want to reset settings of current axes? + + Do you really want to reset settings of current axis? - + Calibration was saved for the preset. Do you really want to reset settings? - + Place the joystick in the center position. It's the part, where often you don't have to move. Just skip it in such situation. - + Calibrating center - + Start second step - + Center X: %1 - + Center Y: %1 - + Place the joystick in the top-left corner many times - - + + Calibrating position - - + + X: %1 - - + + Y: %1 - + Place the joystick in the bottom-right corner - + Start final step - + range X: %1 - %2 - + range Y: %1 - %2 - + deadzone X: %1 - + deadzone Y: %1 - + ---Calibration done!--- - + Calibration values have been saved - - + + Dead zone calibration - - You must move X axis to the right at least five times! Keep moving! + + You have to move axes to the top-left corner at least five times. - - You must move X axis to the left at least five times! Keep moving! + + You have to move axes to the bottom-right corner at least five times. - - - - + + Do you want to save calibration of current axis? + + + + + + + Axis %1 軸 %1 @@ -1582,64 +1591,64 @@ deadzone Y: %1 CapturedWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: - - - + + + TextLabel - + Title: タイトル: - + Path: - + Match By Properties - + Class - + Title タイトル - + Path - + Full Path - + File Name @@ -1654,67 +1663,67 @@ deadzone Y: %1 DPadContextMenu - + Mouse (Normal) - + Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) - + Arrows - + Keys: W | A | S | D - + NumPad - + None - + Standard - + Eight Way - + 4 Way Cardinal - + 4 Way Diagonal - + Mouse Settings マウスの設定 @@ -1722,108 +1731,108 @@ deadzone Y: %1 DPadEditDialog - + Dialog - + Presets: プリセット: - + Mouse (Normal) - + Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) - + Arrows - + Keys: W | A | S | D - + NumPad - + None - + Dpad Mode: - + &Name: - + 4 Way Cardinal - + 4 Way Diagonal - + DPad Delay: - - + + Time lapsed before a direction change is taken into effect. - + s - + Specify the name of a dpad. - + Mouse Settings マウスの設定 - + Standard - + Standard: 8 region dpad with two direction buttons active when the dpad is in a diagonal region. @@ -1839,17 +1848,17 @@ to a diagonal zone. - + Eight Way - + Set セット - + Set %1 セット %1 @@ -1857,27 +1866,27 @@ to a diagonal zone. EditAllDefaultAutoProfileDialog - + Default Profile - + Profile: プロファイル: - + Browse - + Open Config - + Profile file path is invalid. @@ -1885,29 +1894,29 @@ to a diagonal zone. ExtraProfileSettingsDialog - + Extra Profile Settings - + Key Press Time: - + 0.00 ms - + Profile Name: プロファイル名: - - - + + + s s @@ -1915,7 +1924,7 @@ to a diagonal zone. GameController - + Game Controller ゲームコントローラー @@ -1923,9 +1932,9 @@ to a diagonal zone. GameControllerDPad - - - + + + DPad 十字キー @@ -1933,187 +1942,187 @@ to a diagonal zone. GameControllerMappingDialog - + Game Controller Mapping - + <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> - + A A - + B B - + X X - + Y Y - + Back - + Start - + Guide - + Left Shoulder - + Right Shoulder - + Left Stick Click - + Right Stick Click - + Left Stick X 左スティック X - + Left Stick Y 左スティック Y - + Right Stick X 右スティック X - + Right Stick Y 右スティック Y - + Left Trigger 左トリガー - + Right Trigger 右トリガー - + DPad Up 十字キー↑ - + DPad Left 十字キー← - + DPad Down 十字キー↓ - + DPad Right 十字キー→ - + Mapping - + SDL 2 Game Controller Mapping String - + Last Axis Event: - + Current Axis Detection Dead Zone: - + 5000 5000 - + 10000 10000 - + 15000 15000 - + 20000 20000 - + 25000 25000 - + 30000 30000 - + 32000 32000 - + Game Controller Mapping (%1) (#%2) - + Discard Controller Mapping? - + Discard mapping for this controller? If discarded, the controller will be reverted to a joystick once you refresh all joysticks. @@ -2123,47 +2132,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerSet - + Back - + Guide - + Start - + LS Click - + RS Click - + L Shoulder - + R Shoulder - + L Trigger 左トリガー - + R Trigger 右トリガー @@ -2171,9 +2180,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerTrigger - - - + + + Trigger トリガー @@ -2181,9 +2190,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxis - - - + + + Axis @@ -2191,24 +2200,24 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisButton - + Negative - + Positive - + Unknown 不明 - - - + + + Button ボタン @@ -2216,74 +2225,74 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisContextMenu - + Mouse (Horizontal) - + Mouse (Inverted Horizontal) - + Mouse (Vertical) - + Mouse (Inverted Vertical) - + Arrows: Up | Down - + Arrows: Left | Right - + Keys: W | S - + Keys: A | D - + NumPad: KP_8 | KP_2 - + NumPad: KP_4 | KP_6 - - + + None - - + + Mouse Settings マウスの設定 - + Left Mouse Button 左マウスボタン - + Right Mouse Button 右マウスボタン @@ -2291,57 +2300,57 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButton - + Processing turbo for #%1 - %2 - + Finishing turbo for button #%1 - %2 - + Processing press for button #%1 - %2 - + Processing release for button #%1 - %2 - + Distance change for button #%1 - %2 - - - + + + Button ボタン - - - - + + + + [NO KEY] [割り当てなし] - + [Set %1 1W] - + [Set %1 2W] - + [Set %1 WH] @@ -2349,47 +2358,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonContextMenu - + Toggle トグル - + Turbo 連射 - + Clear - + Set Select - + Disabled - + Set %1 セット %1 - + Set %1 1W セット %1 1W - + Set %1 2W セット %1 2W - + Set %1 WH @@ -2397,118 +2406,118 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonSlot - - + + Mouse マウス - + Up - + Down - + Left - + Right - + LB - + MB - + RB - + B4 - + B5 - + Pause Pause - + Hold - + Cycle - + Distance - + Release - + Mouse Mod - + Press Time - + Delay - + Load %1 - + Set Change %1 - + [Text] %1 - + [Exec] %1 - + [NO KEY] [割り当てなし] @@ -2516,9 +2525,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStick - - - + + + Stick スティック @@ -2526,37 +2535,37 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickButton - - - + + + Up - - - + + + Down - - - + + + Left - - - + + + Right - - - + + + Button ボタン @@ -2564,67 +2573,67 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickContextMenu - + Mouse (Normal) - + Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) - + Arrows - + Keys: W | A | S | D - + NumPad - + None - + Standard - + Eight Way - + 4 Way Cardinal - + 4 Way Diagonal - + Mouse Settings マウスの設定 @@ -2632,86 +2641,86 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickEditDialog - + Dialog - + X: X: - - - - - + + + + + 0 0 - + Y: Y: - + Distance: - + Presets: プリセット: - + Mouse (Normal) - + Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) - + Arrows - + Keys: W | A | S | D - + NumPad - + None - + Stick Mode: - + Standard: 8 region stick with two direction buttons active when the stick is in a diagonal region. @@ -2727,72 +2736,72 @@ to a diagonal zone of the stick. - + 4 Way Cardinal - + 4 Way Diagonal - - + + Dead zone value to use for an analog stick. - - + + Value when an analog stick is considered moved 100%. - - + + The area (in degrees) that each diagonal region occupies. - + Square Stick: - - + + Percentage to modify a square stick coordinates to confine values to a circle - + % % - + Stick Delay: - - + + Time lapsed before a direction change is taken into effect. - + s - + Modifier: - + Edit button that is active while the stick is active. This button is useful for assigning zones with @@ -2801,68 +2810,68 @@ functionality to an analog stick. - + PushButton - + Na&me: Name: 名前: - + Specify the name of an analog stick. - + Mouse Settings マウスの設定 - + Standard - + Bearing: - + % Safe Zone: - + Eight Way - + Dead Zone: - + Max Zone: - + Diagonal Range: - + Set セット - + Set %1 セット %1 @@ -2870,9 +2879,9 @@ functionality to an analog stick. JoyControlStickModifierButton - - - + + + Modifier @@ -2880,9 +2889,9 @@ functionality to an analog stick. JoyDPad - - - + + + DPad 十字キー @@ -2890,37 +2899,37 @@ functionality to an analog stick. JoyDPadButton - - - + + + Up - - - + + + Down - - - + + + Left - - - + + + Right - - - + + + Button ボタン @@ -2928,266 +2937,271 @@ functionality to an analog stick. JoyTabWidget - - - - - - + + + + + + <New> <新規> - - + + Remove 削除 - - + + Remove configuration from recent list. - - + + Load 読み込み - - + + Load configuration file. - - + + Save 保存 - - + + Save changes to configuration file. - - + + Save As 別名保存 - - + + Save changes to a new configuration file. - - + + Sets セット - + Copy from Set セットからコピー - + Settings 設定 - - + + Set 1 セット 1 - - + + Set 2 セット 2 - - + + Set 3 セット 3 - - + + Set 4 セット 4 - - + + Set 5 セット 5 - - + + Set 6 セット 6 - - + + Set 7 セット 7 - - + + Set 8 セット 8 - - + + Stick/Pad Assign - - + + Controller Mapping - - + + Quick Set クイックセット - - + + Names - - + + Toggle button name displaying. - - + + Pref - - + + Change global profile settings. - - - + + + Reset リセット - - + + Revert changes to the configuration. Reload configuration file. - + Open Config - + Config Files (*.amgp *.xml) 構成ファイル (*.amgp *.xml) - - - + + + Config File (*.%1.amgp) 構成ファイル (*.%1.amgp) - - + + Do you really want to reset buttons settings for joystick? + + + + + Save Profile Changes? - - + + Changes to the new profile have not been saved. Would you like to save or discard the current profile? - - + + Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? - + Sticks スティック - - + + DPads 十字キー - + No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. - - + + Set %1: %2 セット %1: %2 - - + + Set %1 セット %1 - + Copy Set Assignments - + Are you sure you want to copy the assignments and device properties from %1? - - - + + + Save Config - - + + Set セット @@ -3195,7 +3209,7 @@ to buttons or disable hiding empty buttons. Joystick - + Joystick ジョイスティック @@ -3203,98 +3217,98 @@ to buttons or disable hiding empty buttons. JoystickStatusWindow - + Properties プロパティ - + Details - + Name: 名前: - - - - - - - + + + + + + + %1 %1 - + Number: - + Axes: 軸: - + Buttons: ボタン: - + Hats: - + GUID: GUID: - + Game Controller: ゲームコントローラー: - + Axes - + Buttons ボタン - + Hats - + %1 (#%2) Properties - + Axis %1 軸 %1 - + Hat %1 - + No いいえ - + Yes はい @@ -3302,62 +3316,67 @@ to buttons or disable hiding empty buttons. MainSettingsDialog - + Edit Settings - + General 全般 - + Controller Mappings - + Language 言語 - + Auto Profile - + Mouse マウス - + Advanced 詳細設定 - + + Profile Direc&tory: + + + + <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> - + Recent Profile Count: - + <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> - + Gamepad Poll Rate: - + Change the poll rate that the program uses to discover new events from gamepads. Defaults to 10 ms. @@ -3367,52 +3386,52 @@ before using antimicro unattended. - + Hide main window when the main window close button is clicked instead of quitting the program. - + Close To Tray - + Have Windows start antimicro at system startup. - + Launch At Windows Startup Windows の起動と同時に開始 - + Display recent profiles for all controllers as a single list in the tray menu. Defaults to using sub-menus. - + Single Profile List in Tray - + Have the program minimize to the taskbar. By default, the program minimizes to the system tray if available. - + Minimize to Taskbar タスクバーに入れる - + This option will cause the program to hide all buttons that have no slots assigned to them. The Quick Set dialog window will have to be used @@ -3420,167 +3439,177 @@ to bring up the edit dialog for gamepad buttons. - + Hide Empty Buttons - + When the program is launched, open the last known profile that was opened during the previous session. - + Auto Load Last Opened Profile - + Only show the system tray icon when the program first launches. - + Launch in Tray - + Associate .amgp files with antimicro in Windows Explorer. - + Associate Profiles プロファイルを関連付け - + Key Repeat - + Active keys will be repeatedly pressed when this option is enabled. - - + + Enable 有効 - + Specifies how much time should elapse before key repeating begins. - + Specifies how many times key presses will be performed per seconds. - + <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> - + Português do Brasil - + Français - + Deutsch - + Italiano - + 日本語 - + Русский - + српски / srpski - + 简体中文 - + Español - + українська - + Polski - + + History Si&ze: + + + + Log File: - + Log Level: - + None - + Error - + Warning - + Info 情報 - + Debug + + + Reset + リセット + French フランス語 @@ -3602,22 +3631,22 @@ per seconds. ウクライナ語 - + Class - + Title タイトル - + Program - + Disable the "Enhanced Pointer Precision" Windows setting while antimicro is running. Disabling "Enhanced Pointer Precision" will allow mouse movement within antimicro to be more @@ -3625,32 +3654,27 @@ precise. - + Disable Enhance Pointer Precision - + Smoothing - - Histor&y Size: - - - - + Weight &Modifier: - + Refresh Rate: - + The refresh rate is the amount of time that will elapse in between mouse events. Please be cautious when editing this setting as it will cause the program to use @@ -3660,46 +3684,46 @@ it unattended. - + Spring - + Screen: スクリーン: - + Utilize the specified screen for spring mode. On Linux, the default is to use the primary screen. On Windows, the default is to use all available screens. - + Accel Numerator: - - - + + + 0 0 - + Accel Denominator: - + Accel Threshold: - + If the acceleration values for the virtual mouse have been changed by a different process, particularly when quitting an older game, then you might want to reset the acceleration @@ -3707,71 +3731,66 @@ values used by the virtual mouse. - + Reset Acceleration - + Delay: - - Profi&le Directory: - - - - + ms - + Rate: - + times/s - + Below is a list of the custom mappings that have been saved. You can use the following table to delete mappings or have mappings temporarily disabled. You can also disable mappings that are included with SDL; just insert a new row with the appropriate joystick GUID and check disable. Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. - + GUID GUID - + Mapping String - + Disable? - - + + Delete 削除 - + Insert - - + + Default デフォルト @@ -3780,7 +3799,7 @@ Settings will not take affect until you either refresh all joysticks or unplug t ポルトガル語 (ブラジル) - + English 英語 @@ -3789,199 +3808,209 @@ Settings will not take affect until you either refresh all joysticks or unplug t ドイツ語 - - + + Active - + Devices: デバイス: - - + + All - + Device デバイス - + Profile プロファイル - + Default? - + Add 追加 - + Edit 編集 - + Also, Windows users who want to use a low value should also check the "Disable Enhance Pointer Precision" checkbox if you haven't disabled the option in Windows. - + Select Default Profile Directory - + Are you sure you want to delete the profile? - + Save Log File As - + Log Files (*.log) + + + Do you really want to reset setting? + + + + + Would you like to reset mappings too? + + MainWindow - + antimicro antimicro - + No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu ジョイスティックが見つかりません。 ジョイスティックを接続し、メインメニューの「ジョイスティックを更新」を選択してください - + If events are not seen by a game, please click here to run this application as Administrator. - + &App - + &Options オプション(&O) - + &Help ヘルプ(&H) - - + + &Quit 終了(&Q) - + Ctrl+Q Ctrl+Q - - + + &Update Joysticks ジョイスティックを更新(&U) - + Ctrl+U Ctrl+U - - + + &Hide 隠す(&H) - + Ctrl+H Ctrl+H - + &About AntiMicro について(&A) - + Ctrl+A Ctrl+A - + About &Qt - + &Properties - + &Key Checker - + &GitHub Page - + &Game Controller Mapping - + S&ettings - + &Stick/Pad Assign - + &Wiki - + &Issues - + &Calibration @@ -3998,7 +4027,7 @@ the option in Windows. キーチェッカー - + Home Page ホームページ @@ -4011,66 +4040,66 @@ the option in Windows. 設定 - + Could not find a proper controller identifier. Exiting. - - - - - - - + + + + + + + (%1) (%1) - - + + Open File - + &Restore - + Calibration couldn't be opened - + You must connect at least one controller to open the window - + Run as Administrator? - + Are you sure that you want to run this program as Adminstrator? Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. - + Failed to elevate program - + Failed to restart this program as the Administrator - + Could not find controller. Exiting. @@ -4078,12 +4107,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseAxisSettingsDialog - + Mouse Settings - - + Set %1 セット %1 @@ -4091,12 +4120,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseButtonSettingsDialog - + Mouse Settings - - + Set %1 セット %1 @@ -4104,12 +4133,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseControlStickSettingsDialog - + Mouse Settings マウスの設定 - + Set %1 セット %1 @@ -4117,12 +4146,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseDPadSettingsDialog - + Mouse Settings マウスの設定 - + Set %1 セット %1 @@ -4130,17 +4159,17 @@ Some games run as Administrator which will cause events generated by antimicro t MouseSettingsDialog - + Mouse Settings マウスの設定 - + Mouse Mode: マウスモード: - + Cursor mode is used to move the mouse cursor around the screen relative to its current position depending on how much you move an axis @@ -4154,79 +4183,79 @@ axis is moved back to the dead zone. - + Cursor カーソル - + Spring - + Acceleration: 加速: - + Enhanced Precision - - + + Linear - + Quadratic - + Cubic - + Quadratic Extreme - + Power Function - + Easing Quadratic - + Easing Cubic - + Mouse Speed Settings - + Enable to change the horizontal and vertical speed boxes at the same time. - + Change Together - + Options for adding more acceleration to the mouse movement beyond what the acceleration curve would produce. Acceleration is added based on how quickly an axis is @@ -4236,17 +4265,17 @@ using typical gamepad analog sticks. - + Delta Acceleration - + &Multiplier: - + Mi&n Threshold: @@ -4257,8 +4286,8 @@ Speed: 水平速度: - - + + 1 = 20 pps @@ -4268,30 +4297,30 @@ Speed: 垂直速度: - + Wheel Hori. Speed: - + Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. - + Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. - + Sensitivit&y: - + For Power Function acceleration curve. Specifies the factor to use for curve sensitivity. When the value is above 1.0, the mouse movement will be accelerated @@ -4299,122 +4328,122 @@ faster at the low end of an axis. - + Easing Duration: - - + + s - + Highest value to accelerate mouse movement by - + x x - + Start %: - + Acceleration begins at this percentage of the base multiplier - + Minimum amount of axis travel required for acceleration to begin - + Max Threshold: - + Maximum axis travel before acceleration has reached the multiplier value - + E&xtra Duration: - + Curve: - + Ease Out Sine - + Ease Out Quad - + Ease Out Cubic - + Release Radius: - + Specifies that the spring area will be relative to the mouse position set by a non-relative spring. - + Relative - + Mouse Status - + X: X: - - + + 0 (0 pps) - + Y: Y: - - + + 1 = 1 notch(es)/s 1 = 1 ノッチ/秒 - + Enhanced: Three tier curve that makes the mouse move slow on the low end of an axis and fast on the high end. @@ -4436,19 +4465,19 @@ a period of time using a Cubic curve. - + Hori&zontal Speed: - + &Vertical Speed: - + Wheel Vert. Speed: @@ -4458,59 +4487,59 @@ Speed: 感度: - + Specifies the amount of time (in seconds) that will be required before the mouse is fully accelerated after reaching the high end of an axis. - - - - + + + + % % - + Extend the time that extra acceleration is applied. Axis travel will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. - + Spring Settings - + Spring Width: - + Changes the width of the region that the cursor can move in spring mode. 0 will use the entire width of your screen. - + Spring Height: - + Changes the height of the region that the cursor can move in spring mode. 0 will use the entire height of your screen. - - + + %n notch(es)/s %n ノッチ/秒 @@ -4520,39 +4549,39 @@ of your screen. QKeyDisplayDialog - + Key Checker キーチェッカー - - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - + Event Handler: イベントハンドラ: - + Native Key Value: ネイティブキー値: - - - + + + 0x00000000 0x00000000 - + Qt Key Value: Qt キー値: - + antimicro Key Value: antimicro キー値: @@ -4560,265 +4589,265 @@ of your screen. QObject - + Super - + Menu - + Mute - + Vol+ - + Vol- - + Play/Pause - + Play - + Pause Pause - + Prev - + Next - + Mail - + Home Home - + Media メディア - + Search 検索 - + Daemon launched - + Failed to launch daemon - + Launching daemon - - + + Display string "%1" is not valid. - + Failed to set a signature id for the daemon - + Failed to change working directory to / - + Quitting Program - + # of joysticks found: %1 - + List Joysticks: - + --------------- - + Joystick %1: ジョイスティック %1: - + Index: %1 - + GUID: %1 GUID: %1 - + Name: %1 名前: %1 - + Yes はい - + No いいえ - + Game Controller: %1 ゲームコントローラー: %1 - + # of Axes: %1 - + # of Buttons: %1 - + # of Hats: %1 - + Attempting to use fallback option %1 for event generation. - + Failed to open event generator. Exiting. - + Using %1 as the event generator. - + Could not raise process priority. - + Last button - + There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? - + Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". - + Profile location %1 is not an XML file. - + Profile location %1 does not exist. - - - + + + Controller identifier is not a valid value. - + An invalid set number '%1' was specified. - + Controller identifier '%s'' is not a valid value. - + No set number was specified. - + No controller was specified. - + No display string was specified. - + An invalid event generator was specified. - + No event generator string was specified. - + No log file specified. @@ -4827,22 +4856,22 @@ of your screen. オプション - + Logging started - + Auto-switching to profile "%1". - + Auto-switching to nullptr profile! - + xinput version must be at least 2.0. No mouse acceleration changes will occur. @@ -4850,18 +4879,18 @@ of your screen. QuickSetDialog - + Quick Set クイックセット - + <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> - - + + Quick Set %1 クイックセット %1 @@ -4869,12 +4898,12 @@ of your screen. SetAxisThrottleDialog - + Throttle Change - + The throttle setting for Axis %1 has been changed. Would you like to distribute this throttle change to all sets? @@ -4884,12 +4913,12 @@ Would you like to distribute this throttle change to all sets? SetJoystick - + Set %1: %2 セット %1: %2 - + Set %1 セット %1 @@ -4897,52 +4926,52 @@ Would you like to distribute this throttle change to all sets? SetNamesDialog - + Set Name Settings - + Set 1 セット 1 - + Set 2 セット 2 - + Set 3 セット 3 - + Set 4 セット 4 - + Set 5 セット 5 - + Set 6 セット 6 - + Set 7 セット 7 - + Set 8 セット 8 - + Name @@ -4950,7 +4979,7 @@ Would you like to distribute this throttle change to all sets? SimpleKeyGrabberButton - + Mouse マウス @@ -4958,7 +4987,7 @@ Would you like to distribute this throttle change to all sets? SpringModeRegionPreview - + Spring Mode Preview @@ -4966,20 +4995,20 @@ Would you like to distribute this throttle change to all sets? UInputEventHandler - + Could not find a valid uinput device file. Please check that you have the uinput module loaded. lsmod | grep uinput - + Could not open uinput device file Please check that you have permission to write to the device - + Using uinput device file %1 @@ -4987,551 +5016,551 @@ Please check that you have permission to write to the device UInputHelper - + a a - + b b - + c c - + d d - + e e - + f f - + g g - + h h - + i i - + j j - + k k - + l l - + m m - + n n - + o o - + p p - + q q - + r r - + s s - + t t - + u u - + v v - + w w - + x x - + y y - + z z - + Esc Esc - + F1 F1 - + F2 F2 - + F3 F3 - + F4 F4 - + F5 F5 - + F6 F6 - + F7 F7 - + F8 F8 - + F9 F9 - + F10 F10 - + F11 F11 - + F12 F12 - + ` ` - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - - + + - - - + = = - + BackSpace BackSpace - + Tab Tab - + [ [ - + ] ] - + \ \ - + CapsLock CapsLock - + ; ; - + ' ' - + Enter Enter - + Shift_L - + , , - - + + . . - - + + / / - + Ctrl_L - - + + Super_L - + Alt_L - + Space スペース - + Alt_R - + Menu - + Ctrl_R - + Shift_R - + Up - + Left - + Down - + Right - + PrtSc PrtSc - + Ins - + Del Del - + Home Home - + End End - + PgUp PgUp - + PgDn PgDn - + NumLock NumLock - + * * - + + + - + KP_Enter - + KP_1 - + KP_2 - + KP_3 - + KP_4 - + KP_5 - + KP_6 - + KP_7 - + KP_8 - + KP_9 - + KP_0 - + SCLK - + Pause Pause - + Super_R - + Mute - + VolDn - + VolUp - + Play - + Stop - + Prev - + Next - + [NO KEY] [割り当てなし] @@ -5539,54 +5568,54 @@ Please check that you have permission to write to the device UnixWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: - - - + + + TextLabel - + Title: タイトル: - + Path: - + Match By Properties - + Class - + Title タイトル - + Path @@ -5594,9 +5623,9 @@ Please check that you have permission to write to the device VDPad - - - + + + VDPad @@ -5604,263 +5633,263 @@ Please check that you have permission to write to the device VirtualKeyPushButton - + Space スペース - + Tab Tab - + Shift (L) Shift (左) - + Shift (R) Shift (右) - + Ctrl (L) Ctrl (左) - + Ctrl (R) Ctrl (右) - + Alt (L) Alt (左) - - + + Alt (R) Alt (右) - + Alt Gr - + ` ` - + ~ ~ - - + + - - - + = = - + [ [ - + ] ] - + \ \ - + Caps Caps - + ; ; - + ' ' - + , , - - + + . . - - + + / / - + ESC - + PRTSC - + SCLK - + INS - + PGUP - + DEL - + PGDN - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - + NUM LK - - + + * * - + + + - + Enter Enter - + < < - + : : - + Super (L) - + Menu - + Up - + Down - + Left - + Right @@ -5868,226 +5897,226 @@ LK VirtualKeyboardMouseWidget - - + + Keyboard キーボード - - + + Mouse マウス - + Mouse Settings マウスの設定 - + Left Mouse - + Up Mouse - + Left Button Mouse 左ボタン - + Middle Button Mouse 中ボタン - + Right Button Mouse 右ボタン - + Wheel Up Mouse - + Wheel Left Mouse - + Wheel Right Mouse - + Wheel Down Mouse - + Down Mouse - + Right Mouse - + Button 4 Mouse ボタン 4 - + Mouse 8 Mouse マウス 8 - + Button 5 Mouse ボタン 5 - + Mouse 9 Mouse マウス 9 - + NONE 割り当てなし - - + + Last button - - + + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + Others - + Applications アプリケーション - + Browser Back ブラウザ: 戻る - + Browser Favorites ブラウザ: お気に入り - + Browser Forward ブラウザ: 進む - + Browser Home ブラウザ: ホーム - + Browser Refresh ブラウザ: 更新 - + Browser Search ブラウザ: 検索 - + Browser Stop - + Calc - + Email Eメール - + Media メディア - + Media Next メディア: 次へ - + Media Play メディア: 再生 - + Media Previous メディア: 前へ - + Media Stop メディア: 停止 - + Search 検索 - + Volume Down 音量: 下げる - + Volume Mute 音量: ミュート - + Volume Up 音量: 上げる @@ -6095,7 +6124,7 @@ LK VirtualMousePushButton - + INVALID @@ -6103,28 +6132,28 @@ LK WinAppProfileTimerDialog - - + + Capture Application - + After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. - + Timer: タイマー: - + Seconds - + Cancel キャンセル @@ -6132,12 +6161,12 @@ LK WinExtras - + [NO KEY] [割り当てなし] - + AntiMicro Profile AntiMicro プロファイル @@ -6145,67 +6174,62 @@ LK X11Extras - + ESC - + Tab Tab - + Space スペース - + DEL - + Return - + KP_Enter - + Backspace Backspace - + Alt Gr - + xinput extension was not found. No mouse acceleration changes will occur. - + xinput version must be at least 2.0. No mouse acceleration changes will occur. - - Virtual pointer found with id=%1. - - - - + PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 - + Changing mouse acceleration for device with id=%1 @@ -6213,7 +6237,7 @@ LK XMLConfigReader - + Could not write updated profile XML to file %1. @@ -6221,7 +6245,7 @@ LK XMLConfigWriter - + Could not write to profile at %1. @@ -6229,7 +6253,7 @@ LK antimicro - + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. @@ -6237,97 +6261,97 @@ LK main - + Launch program in system tray only. - + Launch program with the tray menu disabled - + Launch program without the main window displayed - + Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers - + location - + Apply configuration file to a specific controller. Value can be a controller index, name, or GUID - + value - + Unload currently enabled profile(s) - + value(s) - + Start joysticks on a specific set. Value can be a controller index, name, or GUID - + number value - + Launch program as a daemon. Use only on Linux. - + Enable logging - + log-type - + Choose a file for logs writing - + filename - + Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. - + event-generation-type - + Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. diff --git a/share/antimicro/translations/antimicro_pl.ts b/share/antimicro/translations/antimicro_pl.ts old mode 100644 new mode 100755 index 4341b2860..869169697 --- a/share/antimicro/translations/antimicro_pl.ts +++ b/share/antimicro/translations/antimicro_pl.ts @@ -4,27 +4,27 @@ AboutDialog - + About O programie - + antimicro antimicro - + Version Wersja - + Credits Przypisy - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -147,17 +147,17 @@ p, li { white-space: pre-wrap; } <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"><br /></p></body></html> - + Info Info - + License Licencja - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -388,17 +388,17 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.</span></p></body></html> - + Changelog Dziennik zmian - + About Development O rozwoju - + "juliagoda" (since March, 2018) Wanting only to play my favourite old games that din't support gamepads, I found this project (which map keyboard keys and mouse buttons to connected gamepads on Linux) as most proper and recent. But because of poor choices of such application on the internet and since it didn't compile properly, I decided to rescue the project. However, once I finished my work (enough to enjoy playing games) I thought about sharing this code with others. Of course all informations about past programmers will be held. "Ryochan7" (since December 30, 2012 until 2017), I have been working on antimicro in my spare time. What originally started as a fork of QJoyPad and a way to learn proper event-driven programming has turned into something much bigger than I originally intended. Although I have spent a lot of time learning new techniques, finding out more about the domain of KB+M emulation, and spending Friday nights bashing my head against my keyboard, it has been a fun and enriching experience overall. @@ -429,37 +429,37 @@ Z dniem 24 maja, 2016, projekt został przeniesiony na stronę https://github.co - + Copyright: 2013 - 2018 Prawa autorskie: 2013 - 2018 - + Program Version %1 Wersja programu %1 - + Program Compiled on %1 at %2 Program skompilowany na %1 z pomocą %2 - + Built Against SDL %1 Zbudowane z biblioteką SDL %1 - + Running With SDL %1 Uruchomione z biblioteką SDL %1 - + Using Qt %1 Z użyciem Qt %1 - + Using Event Handler: %1 Z użyciem procedury obsługi zdarzenia: %1 @@ -467,29 +467,29 @@ Z dniem 24 maja, 2016, projekt został przeniesiony na stronę https://github.co AddEditAutoProfileDialog - + Auto Profile Dialog Okno Autoprofilu - + Profile: Profil: - - + + Browse Przeglądaj - + Window: Okno: - - + + Select Window. Click on the appropriate application window and the application file path will be populated in the form. @@ -498,38 +498,47 @@ in the form. rubryki. - + Detect Window Properties Wykryj właściwości okna - + Class: Klasa: - + Title: Tytuł: - + + set partial title + ustaw częściowy tytuł + + + Application: Aplikacja: - + Select Zaznacz - + + De&vices: + Urz&ądzenia: + + Devices: - Urządzenia: + Urządzenia: - - + + Select this profile to be the default loaded for the specified device. The selection will be used instead of the all default profile option. @@ -538,84 +547,84 @@ dla określonego urządzenia. Wybór zostanie użyty zamiast domyślnej opcji. - + Set as Default for Controller Ustaw jako domyślny dla kontrolera - - + + A different profile is already selected as the default for this device. Inny profil jest aktualnie zaznaczony jako domyślny dla tego urządzenia. - + Current (%1) Aktualny (%1) - + Open Config Otwórz konfigurację - - + + Select Program Zaznacz program - + Programs (*.exe) Programy (*.exe) - + Please use the main default profile selection. Zaleca się użycie wyboru głównego domyślnego profilu. - + Please select a window by using the mouse. Press Escape if you want to cancel. Zaznacz okno za pomocą myszki. Wciśnij Escape, jeśli chcesz anulować. - + Capture Application Window Przechwyć okno aplikacji - + Could not obtain information for the selected window. Nie można uzyskać informacji dla zaznaczonego okna. - + Application Capture Failed Przechwytywanie okna zostało zakończone niepowodzeniem - + Profile file path is invalid. Ścieżka profilu jest nieprawidłowa. - + No window matching property was specified. Nie została określona żadna pasująca właściwość dla okna. - + Program path is invalid or not executable. Ścieżka programu jest nieprawidłowa lub nie jest wykonywalna. - + File is not an .exe file. Plik nie jest plikiem .exe. - + No window matching property was selected. Nie została zaznaczona żadna pasująca właściwość dla okna. @@ -623,502 +632,502 @@ zamiast domyślnej opcji. AdvanceButtonDialog - - + + Advanced Zaawansowane - + Assignments Przypisania - + Toggle Przycisk przełączania - + Turbo Przycisk turbo - + Set Selector Wybiesz selektor - + Blank or KB/M Pusty lub KB/M - + Cycle Cykl - + Delay Opóźnienie - + Distance Odległość - + Execute Wywołanie - + Hold Przytrzymanie - + Load Załadowanie - + Mouse Mod Moduł myszki - + Pause Przerwa - + Press Time Przytrzymanie okresowo - + Release Zwolnienie - + Set Change Zmiana ustawienia - + Text Entry Wprowadzenie tekstu - - + + Insert a new blank slot. Dodaj nowy pusty slot. - + Insert Dodaj - + Delete a slot. Usuń slot. - + Delete Usuń - + Clear all currently assigned slots. Wyczyść wszystkie aktualnie przypisane sloty. - + Clear All Wyczyść wszystko - + Placeholder Zastępstwo - + Specify the duration of an inserted Pause or Hold slot. Określ czas trwania wprowadzonego slotu "Przerwa" lub "Przytrzymanie". - + Time: Czas: - + 0.01s 0.01s - + 0m 0m - - + + 0 0 - + 0s 0s - + &Mouse Speed Mod: &Moduł prędkości myszki: - + Set the percentage that mouse speeds will be modified by. Ustaw wartość w procentach, o którą prędkość myszki zostanie zmieniona. - - + + % % - - + + Specify the range past an axis dead zone in which a sequence of actions will execute. Określ przedział martwej strefy dla osi, w którym zostanie wywołana kolejność akcji. - + Distance: Odległość: - + Auto Reset Cycle After Automatycznie resetuj cykl po - + seconds sekundach - - + + Choose Profile Wybierz profil - + Executable: Wykonywalny: - + ... ... - + Arguments: Argumenty: - - - + + + Enabled Odblokowane - + Mode: Tryb: - + <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> <html><head/><body><p>Standardowo: Cyklicznie jest wciskany i zwalniany przycisk według wybranej prędkości.</p><p>Gradientowo: Zmienia opóźnienie wciśnięcia przycisku i jego zwolnienie według odległości pokonanej przez oś. Częstotliwość pozostaje niezmieniona.</p><p>Pulsowo: Zmienia częstotliwość naciskania i zwalniania przycisku na sekundę. Opoźnienie przycisku pozostaje niezmienione.</p></body></html> - + Normal Standardowo - + Gradient Gradientowo - + Pulse Pulsowo - + Delay: Opoźnienie: - + 0.10s 0.10s - + Rate: Tempo: - + 10.0/s 10.0/s - - + + Disabled Zablokowany - + Select Set 1 One Way Zaznacz zestawienie 1 jednokierunkowe - + Select Set 1 Two Way Zaznacz zestawienie 1 dwukierunkowe - + Select Set 1 While Held Zaznacz zestawienie 1 podczas trzymania - + Select Set 2 One Way Zaznacz zestawienie 2 jednokierunkowe - + Select Set 2 Two Way Zaznacz zestawienie 2 dwukierunkowe - + Select Set 2 While Held Zaznacz zestawienie 2 podczas trzymania - + Select Set 3 One Way Zaznacz zestawienie 3 jednokierunkowe - + Select Set 3 Two Way Zaznacz zestawienie 3 dwukierunkowe - + Select Set 3 While Held Zaznacz zestawienie 3 podczas trzymania - + Select Set 4 One Way Zaznacz zestawienie 4 jednokierunkowe - + Select Set 4 Two Way Zaznacz zestawienie 4 dwukierunkowe - + Select Set 4 While Held Zaznacz zestawienie 4 podczas trzymania - + Select Set 5 One Way Zaznacz zestawienie 5 jednokierunkowe - + Select Set 5 Two Way Zaznacz zestawienie 5 dwukierunkowe - + Select Set 5 While Held Zaznacz zestawienie 5 podczas trzymania - + Select Set 6 One Way Zaznacz zestawienie 6 jednokierunkowe - + Select Set 6 Two Way Zaznacz zestawienie 6 dwukierunkowe - + Select Set 6 While Held Zaznacz zestawienie 6 podczas trzymania - + Select Set 7 One Way Zaznacz zestawienie 6 jednokierunkowe - + Select Set 7 Two Way Zaznacz zestawienie 7 dwukierunkowe - + Select Set 7 While Held Zaznacz zestawienie 7 podczas trzymania - + Select Set 8 One Way Zaznacz zestawienie 8 jednokierunkowe - + Select Set 8 Two Way Zaznacz zestawienie 8 dwukierunkowe - + Select Set 8 While Held Zaznacz zestawienie 8 podczas trzymania - + sec. sek. - + /sec. /sek. - + Set %1 Zestawienie %1 - - + + Select Set %1 Wybierz zestawienie %1 - + One Way Jednokierunkowo - + Two Way Dwukierunkowo - + While Held Podczas trzymania - + Config Files (*.amgp *.xml) Pliki konfiguracyjne (*.amgp *.xml) - + Choose Executable Wybierz plik wykonywalny - + Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. Sloty za cyklem zostaną wywołane przy kolejnym naciśnięciu przycisku. Wielokrotne cykle mogą być dodane w kolejności, by tworzyć podziały w sekwencji. - + Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. Opóźnia czas trwania wywołania następnego slotu według określonego czasu. Sloty aktywowane przed wystąpieniem opóźnienia pozostaną aktywne po przeminięciu określonego czasu dla opóźnienia. - + Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. Akcja odległości określa wywoływanie slotów, gdy oś jest przesuwana w określonym przedziale za wyznaczoną martwą strefą. - + Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. Wprowadź akcję przytrzymania. Sloty po tej akcji zostaną wywołane, jeśli przycisk ten został trzymany przez określoną umowną ilość czasu. - + Chose a profile to load when this slot is activated. Wybierz profil do załadowywania gdy slot jest aktywny. - + Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. Akcja modułu myszki zmieni wszystkie ustawienia prędkości myszki według określonej liczby procentowej, podczas gdy wykonywana jest akcja. Opcja ta moze być użyteczna dla zwolnienia prędkosci myszki podczas strzelania. - + Insert a pause that occurs in between key presses. Dodaj przerwę, która występuje pomiędzy naciskanymi klawiszami. - + Specify the time that keys past this slot should be held down. Określ czas, przez który klawisze z tego slotu powinny być przytrzymywane. - + Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. Wprowadź akcję zwalniania. Sloty po tej akcji zostaną wywołane po zwolnieniu przycisku, jeśli przycisk ten został trzymany przez określoną umowną ilość czasu. - + Change to selected set once slot is activated. Zmień zaznaczone zestawienie gdy slot jest aktywowany. - + Full string will be typed when a slot is activated. Pełna treść zostania wpisana gdy slot zostanie aktywowany. - + Execute program when slot is activated. Wykonaj program gdy slot jest aktywny. @@ -1126,157 +1135,157 @@ zamiast domyślnej opcji. AdvanceStickAssignmentDialog - + Stick/Pad Assignment Przypisanie do Joysticka/Gamepada - + Sticks Joysticki - + DPads Pady kierunkowe - + Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. Adnotacja: To okno zostało zachowane z myślą o kompatybilności wstecznej z profilami stworzonymi w wersji antimicro starszej niż 2.0. Rekomendowane jednak jest używanie nowszej wersji okna do mapowania kontrolera. - - + + %1 (Joystick %2) %1 (Joystick %2) - + Stick 1 Joystick 1 - - - + + + Enabled Odblokowany - - - - - - + + + + + + Assign Przypisz - - + + X Axis: Oś X: - - + + Y Axis: Oś Y: - + Stick 2 Joystick 2 - + Number of Physical DPads: %1 Liczba fizycznych padów kierunkowych: %1 - + Virtual DPad 1 Wirtualny pad kierunkowy 1 - + Down: Dół: - + Left: Lewo: - + Right: Prawo: - + Up: Góra: - - - - + + + + Axis %1 Oś %1 - - - - + + + + Axis %1 - Oś %1 - - - - - + + + + Axis %1 + Oś %1 + - - - - + + + + Button %1 Przycisk %1 - + Move stick 1 along the X axis Porusz gałką 1 wzdłuż osi X - + Move stick 1 along the Y axis Porusz gałką 1 wzdłuż osi Y - + Move stick 2 along the X axis Porusz gałką 2 wzdłuż osi X - + Move stick 2 along the Y axis Porusz gałką 2 wzdłuż osi Y - - - - + + + + Press a button or move an axis Wciśnij przycisk lub porusz gałką wzdłuż osi @@ -1284,181 +1293,181 @@ zamiast domyślnej opcji. AxisEditDialog - + Axis - + Presets: Predefinicje: - - + + Mouse (Horizontal) Mysz (poziomo) - - + + Mouse (Inverted Horizontal) Mysz (w odwróconym poziomie) - - + + Mouse (Vertical) Mysz (pionowo) - - + + Mouse (Inverted Vertical) Mysz (w odwróconym pionie) - - + + Arrows: Up | Down Strzałki: Góra | Dół - - + + Arrows: Left | Right Strzałki: Lewo | Prawo - - + + Keys: W | S Klawisze: W | S - - + + Keys: A | D Klawisze: A | D - - + + NumPad: KP_8 | KP_2 Klawisze num: KP_8 | KP_2 - - + + NumPad: KP_4 | KP_6 Klawisze num: KP_4 | KP_6 - - - + + + None Brak - - + + Set the value to use as the limit for an axis. Useful for a worn out analog stick. Ustaw wartość limitu dla osi. Opcja jest przydatna dla zużytej gałki analogowej. - + Dead Zone: Martwa strefa: - - + + Set the value of the dead zone for an axis. Ustaw wartość martwej strefy dla osi. - + Max Zone: Maksymalna strefa: - - + + [NO KEY] [BRAK] - + Throttle setting that determines the behavior of how to interpret an axis hold or release. Ustawienia przepustnicy, które determinują zachowanie sposobu interpretacji trzymania osi i jej zwalniania. - + Negative Half Throttle Ujemny zakres ruchu osi do połowy - + Negative Throttle Ujemny zakres ruchu osi - + Normal Standardowy - + Positive Throttle Dodatni zakres ruchu osi - + Positive Half Throttle Dodatni zakres ruchu osi do połowy - + Current Value: Aktualna wartość: - + Name: Nazwa: - + Specify the name of an axis. Określ nazwę osi. - + Mouse Settings Ustawienia myszki - + Set Ustaw - + Set %1 Zestawienie %1 - + Left Mouse Button Lewy przycisk myszy - + Right Mouse Button Prawy przycisk myszy @@ -1466,124 +1475,124 @@ sposobu interpretacji trzymania osi i jej zwalniania. ButtonEditDialog - + Dialog Okno dialogowe - + To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab Wciśnij dowolny klawisz lub kliknij na przycisk myszy, by stworzyć nowe przypisanie - + Placeholder Zastępstwo - + Enables a key press or release to only occur when a controller button is pressed. Odblokowuje naciśnięcie klawisza lub zwolnienie go, gdy przycisk kontrolera jest wciśnięty. - + Toggle Przycisk przełączania - + Enables rapid key presses and releases. Turbo controller. Odblokowuje szybsze naciskanie klawiszy i ch zwalnianie. Kontroler turbo. - + Turbo Przycisk turbo - + Last keyboard/mouse button: Ostatni przycisk klawiatury/myszy: - + Slots Sloty - + Na&me: Naz&wa: - + Specify the name of a button. Określ nazwę przycisku. - + Action: Akcja: - + Specify the action that will be performed in game while this button is being used. Określ akcję, która będzie się wykonywała w grze, podczas gdy przycisk jest wciśnięty. - + Advanced Zaawansowany - - - + + + Choose your keyboard key Naciśnij dowolny klawisz - + No button Brak przycisku - - - - + + + + Last button Ostatni przycisk - + To change settings for last button, it must be at least one assignment from keyboard to gamepad Musi istnieć co najmniej jedno przypisanie z klawiatury do gamepad'a, by zmienić ustawienia dla ostatniego przycisku - + To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad Musi istnieć co najmniej jedno przypisanie z klawiatury do gamepad'a, by zmienić ustawienia turbo dla ostatniego przycisku - + To open advanced dialog, it's needed to map at least one button from keyboard to gamepad Potrzebne jest co najmniej jedno mapowanie z klawiatury do gamepad'a, by móc otworzyć okno z zaawansowanymi ustawieniami - + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad Sloty dla wprowadzonych przycisków nie mogły zostać usunięte, ponieważ żadne dane nie zostały dotychczas wprowadzone z układu klawiatury do układu gamepad'a. Stwórz mapowanie co najmniej jednego przycisku dla gamepad'a - + As last gamepad button has been set Został ustawiony ostatni przycisk gamepad'a - + Index %1 Indeks %1 @@ -1591,65 +1600,68 @@ gdy przycisk jest wciśnięty. Calibration - + Form Okno - - + + Start calibration Rozpocznij kalibrację - + Controller: Kontroler: - + Sticks: Joysticki: - Use settings from jstest-gtk - Zastosuj ustawienia z jstest-gtk + Zastosuj ustawienia z jstest-gtk - + Reset settings Resetuj ustawienia - + Cancel Anuluj - - + + Save Zapisz - - + + Calibration Kalibracja - Do you really want to reset settings of current axes? - Czy chcesz zresetować ustawienia aktualnych osi? + Czy chcesz zresetować ustawienia aktualnych osi? + + + + Do you really want to reset settings of current axis? + Czy na pewno chcesz zresetować ustawienia dla aktualnych osi? - + Calibration was saved for the preset. Do you really want to reset settings? Wartości kalibracji były zapisywane dla przycisku. Czy aby napewno zresetować ustawienia? - + Place the joystick in the center position. It's the part, where often you don't have to move. Just skip it in such situation. @@ -1658,17 +1670,17 @@ It's the part, where often you don't have to move. Just skip it in suc To jest ta część, gdzie często nie ma potrzeby ruszania osią. W takiej sytuacji wystarczy jedynie przejść do następnego kroku. - + Calibrating center Kalibrowanie środka - + Start second step Rozpocznij drugi krok - + Center X: %1 @@ -1677,28 +1689,28 @@ Center X: %1 Środek X: %1 - + Center Y: %1 Środek Y: %1 - + Place the joystick in the top-left corner many times Nakieruj oś w stronę górnego lewego rogu wiele razy - - + + Calibrating position Kalibrowanie pozycji - - + + X: %1 @@ -1707,27 +1719,27 @@ X: %1 X: %1 - - + + Y: %1 Y: %1 - + Place the joystick in the bottom-right corner Nakieruj oś w stronę dolnego prawego rogu - + Start final step Rozpocznij ostatni krok - + range X: %1 - %2 @@ -1736,14 +1748,14 @@ range X: %1 - %2 przedział dla X: %1 - %2 - + range Y: %1 - %2 przedział dla Y: %1 - %2 - + deadzone X: %1 @@ -1752,14 +1764,14 @@ deadzone X: %1 martwa strefa X: %1 - + deadzone Y: %1 martwa strefa Y: %1 - + ---Calibration done!--- @@ -1768,31 +1780,44 @@ martwa strefa Y: %1 - + Calibration values have been saved Wartości kalibracji zostały zapisane - - + + Dead zone calibration kalibracja martwej strefy - + + You have to move axes to the top-left corner at least five times. + Nakieruj oś w lewy górny róg co najmniej pięć razy. + + + + You have to move axes to the bottom-right corner at least five times. + Nakieruj oś w prawy dolny róg co najmniej pięć razy. + + + + Do you want to save calibration of current axis? + Czy chcesz zapisać zmiany dla aktualnych osi? + + You must move X axis to the right at least five times! Keep moving! - Nakieruj oś X w prawą stronę co najmniej pięć razy! + Nakieruj oś X w prawą stronę co najmniej pięć razy! - You must move X axis to the left at least five times! Keep moving! - Nakieruj oś X w lewą stronę co najmniej pięć razy! + Nakieruj oś X w lewą stronę co najmniej pięć razy! - - - - + + + + Axis %1 Oś %1 @@ -1800,64 +1825,64 @@ martwa strefa Y: %1 CapturedWindowInfoDialog - + Captured Window Properties Uchwycone właściwości okna - + Information About Window Informacje o oknie - + Class: Klasa: - - - + + + TextLabel Etykieta - + Title: Tytuł: - + Path: Ścieżka: - + Match By Properties Dopasowanie według właściwości - + Class Klasa - + Title Tytuł - + Path Ścieżka - + Full Path Pełna ścieżka - + File Name Nazwa pliku @@ -1865,67 +1890,67 @@ martwa strefa Y: %1 DPadContextMenu - + Mouse (Normal) Mysz (standardowo) - + Mouse (Inverted Horizontal) Mysz (w odwróconym poziomie) - + Mouse (Inverted Vertical) Mysz (w odwróconym pionie) - + Mouse (Inverted Horizontal + Vertical) Mysz (w odwróconym poziomie + pionie) - + Arrows Strzałki - + Keys: W | A | S | D Klawisze: W | A | S | D - + NumPad Klawisze numeryczne - + None Brak - + Standard Standard - + Eight Way Ośmioosiowo - + 4 Way Cardinal w 4 głównych kierunkach - + 4 Way Diagonal w 4 głównych przekątnych - + Mouse Settings Ustawienia myszki @@ -1933,62 +1958,62 @@ martwa strefa Y: %1 DPadEditDialog - + Dialog Okno dialogowe - + Presets: Predefinicje: - + Mouse (Normal) Mysz (standardowo) - + Mouse (Inverted Horizontal) Mysz (w odwróconym poziomie) - + Mouse (Inverted Vertical) Mysz (w odwróconym pionie) - + Mouse (Inverted Horizontal + Vertical) Mysz (w odwróconym poziomie + pionie) - + Arrows Strzałki - + Keys: W | A | S | D Klawisze: W | A | S | D - + NumPad Klawiatura numeryczna - + None Brak - + Dpad Mode: Tryb pada kierunkowego: - + Standard: 8 region dpad with two direction buttons active when the dpad is in a diagonal region. @@ -2017,63 +2042,63 @@ W 4 głównych przekątnych: Czterokierunkowy analog z kierunkami odwołującymi się do stref przekątnych analogu. - + Standard Standardowo - + Eight Way Ośmioosiowo - + 4 Way Cardinal W 4 głównych kierunkach - + 4 Way Diagonal W 4 głównych przekątnych - + DPad Delay: Opóźnienie pada kierunkowego: - - + + Time lapsed before a direction change is taken into effect. Czas, który upłynął przed wykryciem zmiany kierunku. - + s s - + &Name: &Nazwa: - + Specify the name of a dpad. Określ nazwę pada kierunkowego. - + Mouse Settings Ustawienia myszki - + Set Ustaw - + Set %1 Zestawienie %1 @@ -2081,27 +2106,27 @@ odwołującymi się do stref przekątnych analogu. EditAllDefaultAutoProfileDialog - + Default Profile Domyślny profil - + Profile: Profil: - + Browse Przeglądaj - + Open Config Otwórz konfigurację - + Profile file path is invalid. Ścieżka dla plik jest nieprawidłowa. @@ -2109,29 +2134,29 @@ odwołującymi się do stref przekątnych analogu. ExtraProfileSettingsDialog - + Extra Profile Settings Dodatkowe ustawienia profilu - + Key Press Time: Czas wciśniętego klawisza: - + 0.00 ms 0.00 ms - + Profile Name: Nazwa profilu: - - - + + + s s @@ -2139,7 +2164,7 @@ odwołującymi się do stref przekątnych analogu. GameController - + Game Controller Kontroler @@ -2147,9 +2172,9 @@ odwołującymi się do stref przekątnych analogu. GameControllerDPad - - - + + + DPad Pad kierunkowy @@ -2157,187 +2182,187 @@ odwołującymi się do stref przekątnych analogu. GameControllerMappingDialog - + Game Controller Mapping Mapowanie kontrolera - + <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> <html><head/><body><p>antimicro używa dla działania tego <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;"> interfejsu kontrolerów gier</span></a> świadczonego przez bibliotekę SDL 2 w celu dopasowania przeróżnych gamepad'ów do jednolitego stworzonego standardu. Podświetl komórkę tabelki dla odpowiedniego przycisku, aby go przypisać. Możesz nacisnąć przycisk lub poruszyć osią na gamepad'zie, a wtedy w wybranej komórce zaktualizują się informacje według wciśniętego przycisku lub poruszonej osi. Pamiętaj, że narzucając wykrycie osi, musisz poruszyć nią w dół lub w prawo, gdyż pod nimi kryją się wartości dodatnie. </p><p>antimicro użyje mapowania, które określisz podczas zapisywania mapowania tekstowego w postaci odczytywanej przez bibliotekę SDL.</p></body></html> - + A A - + B B - + X X - + Y Y - + Back Back - + Start Start - + Guide Guide - + Left Shoulder Left Shoulder - + Right Shoulder Right Shoulder - + Left Stick Click Left Stick Click - + Right Stick Click Right Stick Click - + Left Stick X Left Stick X - + Left Stick Y Left Stick Y - + Right Stick X Right Stick X - + Right Stick Y Right Stick Y - + Left Trigger Left Trigger - + Right Trigger Right Trigger - + DPad Up DPad Up - + DPad Left DPad Left - + DPad Down DPad Down - + DPad Right DPad Right - + Mapping Mapowanie - + SDL 2 Game Controller Mapping String Treść mapowania kontrolera według SDL 2 - + Last Axis Event: Ostatnie zdarzenie dla osi: - + Current Axis Detection Dead Zone: Aktualna martwa strefa podczas wykrywania ruchu osią: - + 5000 5000 - + 10000 10000 - + 15000 15000 - + 20000 20000 - + 25000 25000 - + 30000 30000 - + 32000 32000 - + Game Controller Mapping (%1) (#%2) Mapowanie kontrolera (%1) (#%2) - + Discard Controller Mapping? Usunąć mapowanie kontrolera? - + Discard mapping for this controller? If discarded, the controller will be reverted to a joystick once you refresh all joysticks. @@ -2349,47 +2374,47 @@ Jeśli zostanie usunięte, kontroler zostanie przywrócony do joysticka, gdy tyl GameControllerSet - + Back Back - + Guide Guide - + Start Start - + LS Click LS Click - + RS Click RS Click - + L Shoulder L Shoulder - + R Shoulder R Shoulder - + L Trigger L Trigger - + R Trigger R Trigger @@ -2397,9 +2422,9 @@ Jeśli zostanie usunięte, kontroler zostanie przywrócony do joysticka, gdy tyl GameControllerTrigger - - - + + + Trigger Przyciski Trigger @@ -2407,9 +2432,9 @@ Jeśli zostanie usunięte, kontroler zostanie przywrócony do joysticka, gdy tyl JoyAxis - - - + + + Axis @@ -2417,24 +2442,24 @@ Jeśli zostanie usunięte, kontroler zostanie przywrócony do joysticka, gdy tyl JoyAxisButton - - - + + + Button Przycisk - + Negative Ujemny - + Positive Dodatni - + Unknown Nieznany @@ -2442,74 +2467,74 @@ Jeśli zostanie usunięte, kontroler zostanie przywrócony do joysticka, gdy tyl JoyAxisContextMenu - + Mouse (Horizontal) Mysz (poziomo) - + Mouse (Inverted Horizontal) Mysz (w odwróconym poziomie) - + Mouse (Vertical) Mysz (pionowo) - + Mouse (Inverted Vertical) Mysz (w odwróconym pionie) - + Arrows: Up | Down Strzałki: Góra | Dół - + Arrows: Left | Right Strzałki: Lewo | Prawo - + Keys: W | S Klawisze: W | S - + Keys: A | D Klawisze: A | D - + NumPad: KP_8 | KP_2 Klawiatura num: KP_8 | KP_2 - + NumPad: KP_4 | KP_6 Klawiatura num: KP_4 | KP_6 - - + + None Brak - - + + Mouse Settings Ustawienia myszki - + Left Mouse Button Lewy przycisk myszy - + Right Mouse Button Prawy przycisk myszy @@ -2517,57 +2542,57 @@ Jeśli zostanie usunięte, kontroler zostanie przywrócony do joysticka, gdy tyl JoyButton - + Processing turbo for #%1 - %2 Przetwarzanie trybu turbo dla #%1 - %2 - + Finishing turbo for button #%1 - %2 Finalizacja trybu turbo dla przycisku #%1 - %2 - + Processing press for button #%1 - %2 Przetwarzanie naciśnięcia dla przycisku #%1 - %2 - + Processing release for button #%1 - %2 Przetwarzanie zwalniania dla przycisku #%1 - %2 - + Distance change for button #%1 - %2 Zmiana odległości dla przycisku #%1 - %2 - - - + + + Button Przycisk - - - - + + + + [NO KEY] [BRAK] - + [Set %1 1W] [Zestawienie %1 1W] - + [Set %1 2W] [Zestawienie %1 2W] - + [Set %1 WH] [Zestawienie %1 WH] @@ -2575,47 +2600,47 @@ Jeśli zostanie usunięte, kontroler zostanie przywrócony do joysticka, gdy tyl JoyButtonContextMenu - + Toggle Przycisk przełączania - + Turbo Przycisk turbo - + Clear Wyczyść - + Set Select Wybór ustawienia - + Disabled Zablokowane - + Set %1 Zestawienie %1 - + Set %1 1W Zestawienie %1 1W - + Set %1 2W Zestawienie %1 2W - + Set %1 WH Zestawienie %1 WH @@ -2623,118 +2648,118 @@ Jeśli zostanie usunięte, kontroler zostanie przywrócony do joysticka, gdy tyl JoyButtonSlot - - + + Mouse Mysz - + Up Góra - + Down Dół - + Left Lewo - + Right Prawo - + LB LB - + MB MB - + RB RB - + B4 B4 - + B5 B5 - + Pause Przerwa - + Hold Przytrzymanie - + Cycle Cykl - + Distance Odległość - + Release Zwolnienie - + Mouse Mod Tryb myszki - + Press Time Przytrzymanie okresowo - + Delay Opóźnienie - + Load %1 Załadowanie %1 - + Set Change %1 Zmiana ustawienia %1 - + [Text] %1 [Text] %1 - + [Exec] %1 [Exec] %1 - + [NO KEY] [BRAK] @@ -2742,9 +2767,9 @@ Jeśli zostanie usunięte, kontroler zostanie przywrócony do joysticka, gdy tyl JoyControlStick - - - + + + Stick Joystick analogowy @@ -2752,37 +2777,37 @@ Jeśli zostanie usunięte, kontroler zostanie przywrócony do joysticka, gdy tyl JoyControlStickButton - - - + + + Up Góra - - - + + + Down Dół - - - + + + Left Lewo - - - + + + Right Prawo - - - + + + Button Przycisk @@ -2790,67 +2815,67 @@ Jeśli zostanie usunięte, kontroler zostanie przywrócony do joysticka, gdy tyl JoyControlStickContextMenu - + Mouse (Normal) Mysz (standardowo) - + Mouse (Inverted Horizontal) Mysz (w odwróconym poziomie) - + Mouse (Inverted Vertical) Mysz (w odwróconym pionie) - + Mouse (Inverted Horizontal + Vertical) Mysz (w odwróconym poziomie + pionie) - + Arrows Strzałki - + Keys: W | A | S | D Klawisze: W | A | S | D - + NumPad Klawisze numeryczne - + None Brak - + Standard Standard - + Eight Way Ośmioosiowo - + 4 Way Cardinal w 4 głównych kierunkach - + 4 Way Diagonal w 4 głównych przekątnych - + Mouse Settings Ustawienia myszki @@ -2858,96 +2883,96 @@ Jeśli zostanie usunięte, kontroler zostanie przywrócony do joysticka, gdy tyl JoyControlStickEditDialog - + Dialog Okno dialogowe - + X: X: - - - - - + + + + + 0 0 - + Y: Y: - + Distance: Odległość: - + Bearing: Łożysko: - + % Safe Zone: % strefa bezpieczna: - + Presets: Predefinicje: - + Mouse (Normal) Mysz (standardowo) - + Mouse (Inverted Horizontal) Mysz (w odwróconym poziomie) - + Mouse (Inverted Vertical) Mysz (w odwróconym pionie) - + Mouse (Inverted Horizontal + Vertical) Mysz (w odwróconym poziomie + pionie) - + Arrows Strzałki - + Keys: W | A | S | D Klawisze: W | A | S | D - + NumPad Klawisze numeryczne - + None Brak - + Stick Mode: Tryb joysticka analogowego: - + Standard: 8 region stick with two direction buttons active when the stick is in a diagonal region. @@ -2976,98 +3001,98 @@ W 4 głównych przekątnych: Czterokierunkowy analog z kierunkami odwołującymi się do stref przekątnych analogu. - + Standard Standardowo - + Eight Way Ośmioosiowo - + 4 Way Cardinal W 4 głównych kierunkach - + 4 Way Diagonal W 4 głównych przekątnych - + Dead Zone: Martwa strefa: - - + + Dead zone value to use for an analog stick. Wartość martwej strefy dla zastosowania w joysticku analogowym. - + Max Zone: Maksymalna strefa: - - + + Value when an analog stick is considered moved 100%. Wartość określająca analog, którego kursor przekroczył 100%. - + Diagonal Range: Zakres przekątnej: - - + + The area (in degrees) that each diagonal region occupies. Powierzchnia (w stopniach), która zajmuje każdy przekątny kierunek. - + Square Stick: Czterokierunkowy analog: - - + + Percentage to modify a square stick coordinates to confine values to a circle Zmiana współrzędnych czterokierunkowego analogu dla ograniczenia wartości do koła, określona w procentach - + % % - + Stick Delay: Opóźnienie drążka: - - + + Time lapsed before a direction change is taken into effect. Czas, który upłynął przed wykryciem zmiany kierunku. - + s s - + Modifier: Modyfikator: - + Edit button that is active while the stick is active. This button is useful for assigning zones with @@ -3080,33 +3105,33 @@ klawiszami modyfikatora, które mogą być użyte do przypisania funkcji chodzenia/biegania do drążka analogowego. - + PushButton Przycisk - + Na&me: Name: Na&zwa: - + Specify the name of an analog stick. Określ nazwę joysticka analogowego. - + Mouse Settings Ustawienia myszki - + Set Ustaw - + Set %1 Zestawienie %1 @@ -3114,9 +3139,9 @@ przypisania funkcji chodzenia/biegania do drążka analogowego. JoyControlStickModifierButton - - - + + + Modifier Modyfikator @@ -3124,9 +3149,9 @@ przypisania funkcji chodzenia/biegania do drążka analogowego. JoyDPad - - - + + + DPad Pad kierunkowy @@ -3134,37 +3159,37 @@ przypisania funkcji chodzenia/biegania do drążka analogowego. JoyDPadButton - - - + + + Up Góra - - - + + + Down Dół - - - + + + Left Lewo - - - + + + Right Prawo - - - + + + Button Przycisk @@ -3172,243 +3197,248 @@ przypisania funkcji chodzenia/biegania do drążka analogowego. JoyTabWidget - - - - - - + + + + + + <New> <Nowy> - - + + Remove Usuń - - + + Remove configuration from recent list. Usuń konfigurację z ostatniej listy. - - + + Load Załaduj - - + + Load configuration file. Załaduj plik konfiguracyjny. - - + + Save Zapisz - - + + Save changes to configuration file. Zapisz zmiany do pliku konfiguracyjnego. - - + + Save As Zapisz jako - - + + Save changes to a new configuration file. Zapisz zmiany do nowego pliku konfiguracyjnego. - - + + Sets Zestawienia - + Copy from Set Kopiuj z zestawienia - + Settings Ustawienia - - + + Set 1 Zestawienie 1 - - + + Set 2 Zestawienie 2 - - + + Set 3 Zestawienie 3 - - + + Set 4 Zestawienie 4 - - + + Set 5 Zestawienie 5 - - + + Set 6 Zestawienie 6 - - + + Set 7 Zestawienie 7 - - + + Set 8 Zestawienie 8 - - + + Stick/Pad Assign Przypisywanie do Joysticka/Gamepada - - + + Controller Mapping Mapowanie kontrolera - - + + Quick Set Szybkie ustawienie - - + + Names Nazwy - - + + Toggle button name displaying. Przełącz wyświetlanie nazwy przycisku. - - + + Pref Pref - - + + Change global profile settings. Zmień globalne ustawienia dla profilu. - - - + + + Reset Reset - - + + Revert changes to the configuration. Reload configuration file. Przwróć zmiany w konfiguracji. Przeładuj plik konfiguracyjny. - + Open Config Otwórz konfigurację - + Config Files (*.amgp *.xml) Pliki konfiguracyjne (*.amgp *.xml) - - - + + + Save Config Zapisz konfigurację - - - + + + Config File (*.%1.amgp) Plik konfiguracyjny (*.%1.amgp) - - + + Do you really want to reset buttons settings for joystick? + Czy na pewno chcesz zresetować ustawienia dla przycisków joystick'a? + + + + Set Ustaw - - + + Save Profile Changes? Zapisać zmiany dla profilu? - - + + Changes to the new profile have not been saved. Would you like to save or discard the current profile? Zmiany dla nowego profilu nie zostały zapisane. Czy chcesz, aby aktualny profil został zapisany lub usunięty? - - + + Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? Zmiany dla profilu "%1" nie zostały zapisane. Czy chcesz, aby zmiany dla aktualnego profilu zostały zapisane lub usunięte? - + Sticks Joysticki analogowe - - + + DPads Pady kierunkowe - + No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. Nie wykryto żadnych przypisywanych przycisków. @@ -3416,24 +3446,24 @@ Użyj okna szybkiego ustawiania, by przypisać znaki klawiszy do przycisków lub zablokuj ukrywanie pustych przycisków. - - + + Set %1: %2 Zestawienie %1: %2 - - + + Set %1 Zestawienie %1 - + Copy Set Assignments Skopiuj zestawienie przypisań - + Are you sure you want to copy the assignments and device properties from %1? Czy na pewno chcesz skopiować przypisania i właściwości urządzenia z %1? @@ -3441,7 +3471,7 @@ do przycisków lub zablokuj ukrywanie pustych przycisków. Joystick - + Joystick Joystick @@ -3449,98 +3479,98 @@ do przycisków lub zablokuj ukrywanie pustych przycisków. JoystickStatusWindow - + Properties Właściwości - + Details Szczegóły - + Name: Nazwa: - - - - - - - + + + + + + + %1 %1 - + Number: Numer: - + Axes: Osie: - + Buttons: Przyciski: - + Hats: Przyciski POV: - + GUID: GUID: - + Game Controller: Kontroler: - + Axes Osie - + Buttons Przyciski - + Hats Przyciski POV - + %1 (#%2) Properties %1 (#%2) Właściwości - + Axis %1 Oś %1 - + Hat %1 Przycisk POV %1 - + No Nie - + Yes Tak @@ -3548,67 +3578,71 @@ do przycisków lub zablokuj ukrywanie pustych przycisków. MainSettingsDialog - + Edit Settings Zmień ustawienia - + General Ogólnie - + Controller Mappings Mapowania kontrolera - + Language Język - + Auto Profile Profil automatyczny - + Mouse Mysz - + Advanced Zaawansowany - Profi&le Directory: + Ścieżka profi&lu: + + + + Profile Direc&tory: Ścieżka profi&lu: - + <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> <html><head/><body><p>Określ domyślną ścieżkę, aby program mógł go użyć w innych oknach podczas ładowania profilu lub zapisywania nowego.</p></body></html> - + Recent Profile Count: Liczba ostatnich profili: - + <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> <html><head/><body><p>Liczba profili, które mogą być umieszczone na liście ostatnich profili. 0 będzie skutkowało tym, że limit dla liczby wyświetlanych profili nie będzie w ogóle narzucany.</p></body></html> - + Gamepad Poll Rate: Szybkość wysyłania sygnałów gamepada: - + Change the poll rate that the program uses to discover new events from gamepads. Defaults to 10 ms. @@ -3623,29 +3657,29 @@ zużycie mocy procesora. Wysoce rekomendowane jest przeprowadzenie testów ustawień przed użyciem antimicro. - + Hide main window when the main window close button is clicked instead of quitting the program. Ukryj główne okno, a nie zamykaj, gdy wybierany jest przycisk zamykania okna. - + Close To Tray Zamknij w tacce systemowej - + Have Windows start antimicro at system startup. Uruchom antimicro przy uruchomieniu systemu. - + Launch At Windows Startup Uruchom przy starcie Windows - + Display recent profiles for all controllers as a single list in the tray menu. Defaults to using sub-menus. @@ -3655,12 +3689,12 @@ menu zasobnika systemowego. Domyślnie dla użycia podmenu. - + Single Profile List in Tray Pojedyncza lista profilu w tacce systemowej - + Have the program minimize to the taskbar. By default, the program minimizes to the system tray if available. @@ -3669,12 +3703,12 @@ Domyślnie program jest minimalizowany do tacki systemowej jeśli jest to możliwe. - + Minimize to Taskbar Zminimalizuj do paska zadań - + This option will cause the program to hide all buttons that have no slots assigned to them. The Quick Set dialog window will have to be used @@ -3686,12 +3720,12 @@ ustawiania, by pojawiło się okno edytowania dla przycisków gamepada. - + Hide Empty Buttons Ukryj puste przyciski - + When the program is launched, open the last known profile that was opened during the previous session. @@ -3700,86 +3734,86 @@ znany profil, który był otwierany podczas poprzedniej sesji. - + Auto Load Last Opened Profile Automatycznie ładuj ostatni otwarty profil - + Only show the system tray icon when the program first launches. Pokazuj jedynie ikonę w tacce systemowej, gdy program się uruchamia. - + Launch in Tray Uruchom w tacce systemowej - + Associate .amgp files with antimicro in Windows Explorer. Skojarz pliki .amgp z antimicro w eksploratorze Windows. - + Associate Profiles Skojarz profile - + Key Repeat Powtarzanie klawisza - + Active keys will be repeatedly pressed when this option is enabled. Aktywne klawisze będą wielokrotnie naciskane gdy ta opcja zostanie zaznaczona. - - + + Enable Odblokuj - + Delay: Opóźnienie: - + Specifies how much time should elapse before key repeating begins. Określa, ile czasu musi upłynąć, zanim nastąpi powtarzanie przycisku klawisza. - + ms ms - + Rate: Tempo: - + Specifies how many times key presses will be performed per seconds. Określa, ile razy na sekundę klawisz będzie naciskany automatycznie. - + times/s raz/y - + Below is a list of the custom mappings that have been saved. You can use the following table to delete mappings or have mappings temporarily disabled. You can also disable mappings that are included with SDL; just insert a new row with the appropriate joystick GUID and check disable. Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. @@ -3788,161 +3822,161 @@ Settings will not take affect until you either refresh all joysticks or unplug t Ustawienia nie będą miały wpływu o ile nie zostaną odświeżone wszystkie joysticki lub nie zostanie odpięty konkretny joystick. - + GUID GUID - + Mapping String Mapowanie tekstowe - + Disable? Zablokować? - - + + Delete Usuń - + Insert Dodaj - + <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> <html><head/><body><p>antimicro został przetłumaczony na wiele innych języków przez kilku woluntariuszy. Domyślnie program wybierze odpowiednie tłumaczenie oparte na ustawieniach lokalnych systemu. Jednakże możliwy jest wybór innego języka, który znajduje się na liście poniżej.</p></body></html> - - + + Default Domyślny - + Português do Brasil Português do Brasil - + English English - + Français Français - + Deutsch Deutsch - + Italiano Italiano - + 日本語 日本語 - + Русский Русский - + српски / srpski српски / srpski - + 简体中文 简体中文 - + Español Español - + українська українська - + Polski Polski - - + + Active Aktywny - + Devices: Urządzenia: - - + + All Wszystko - + Device Urządzenie - + Profile Profil - + Class Klasa - + Title Tytuł - + Program Program - + Default? Domyślnie? - + Add Dodaj - + Edit Edytuj - + Disable the "Enhanced Pointer Precision" Windows setting while antimicro is running. Disabling "Enhanced Pointer Precision" will allow mouse movement within antimicro to be more @@ -3953,32 +3987,41 @@ gdy antimicro jest uruchomiony. Zablokowanie opcji ruch myszki wewnątrz antimicro. - + Disable Enhance Pointer Precision Zablokuj rozszerzoną precyzję myszki - + Smoothing Wygładzanie - - Histor&y Size: + + History Si&ze: Rozmia&r historii: - + + Reset + Reset + + + Histor&y Size: + Rozmia&r historii: + + + Weight &Modifier: Modyfikator &wagi: - + Refresh Rate: Częstotliwość odświeżania: - + The refresh rate is the amount of time that will elapse in between mouse events. Please be cautious when editing this setting as it will cause the program to use @@ -3993,17 +4036,17 @@ niskiej wywoła destabilizację systemu. Silnie zaleca się przetestowanie ustawienia przed jego użyciem. - + Spring Tekst - + Screen: Ekran: - + Utilize the specified screen for spring mode. On Linux, the default is to use the primary screen. On Windows, the default is to use all available screens. @@ -4012,29 +4055,29 @@ domyślnie używany jest główny ekran. Na Windows, domyślnie używane są wszystkie dostępne ekrany. - + Accel Numerator: Licznik przyspieszenia: - - - + + + 0 0 - + Accel Denominator: Mianownik przyspieszenia: - + Accel Threshold: Granica przyspieszenia: - + If the acceleration values for the virtual mouse have been changed by a different process, particularly when quitting an older game, then you might want to reset the acceleration @@ -4045,47 +4088,47 @@ wyłącznia starszej gry, to możesz chcieć zresetować wartości przyspieszenia stosowane przez wirtualną myszkę. - + Reset Acceleration Resetuj przyspieszenie - + Log File: Plik z logami: - + Log Level: Poziom logów: - + None Brak - + Error Błąd - + Warning Ostrzeżenie - + Info Informacja - + Debug Debugowanie - + Also, Windows users who want to use a low value should also check the "Disable Enhance Pointer Precision" checkbox if you haven't disabled the option in Windows. @@ -4094,155 +4137,165 @@ wartość, powinni także sprawdzić opcję "Zablokuj rozszerzoną precyzj myszki", jeżeli nie chcą mieć zablokowanej tej opcji w Windows. - + Select Default Profile Directory Zaznacz domyślny katalog profilu - + Are you sure you want to delete the profile? Czy na pewno usunąć ten profil? - + Save Log File As Zapisz plik z logami jako - + Log Files (*.log) Pliki z logami (*.log) + + + Do you really want to reset setting? + Czy na pewno chcesz zresetować ustawienia? + + + + Would you like to reset mappings too? + Czy chcesz także zresetować ustawienia mapowania? + MainWindow - + antimicro antimicro - + No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu Nie znaleziono żadnego joysticka. Podłącz joystick a następnie wybierz opcję "Zaktualizuj joysticki" w głównym menu - + If events are not seen by a game, please click here to run this application as Administrator. Jeśli zdarzenia nie są wykrywane przez grę, kliknij tutaj, by uruchomić aplikację w trybie administratora. - + &App &Aplikacja - + &Options &Opcje - + &Help &Pomoc - - + + &Quit &Zakończ - + Ctrl+Q Ctrl+Q - - + + &Update Joysticks &Zaktualizuj joysticki - + Ctrl+U Ctrl+U - - + + &Hide &Ukryj - + Ctrl+H Ctrl+H - + &About &O programie - + Ctrl+A Ctrl+A - + About &Qt O &Qt - + &Properties &Właściwości - + &Key Checker &Sprawdzanie klawiszy - + Home Page Strona domowa - + &GitHub Page &Strona na Github - + &Game Controller Mapping &Mapowanie kontrolera - + S&ettings U&stawienia - + &Stick/Pad Assign &Przypisywanie do Joysticka/Gamepada - + &Wiki &Wiki - + &Issues &Błędy - + &Calibration &Kalibracja @@ -4251,49 +4304,49 @@ Podłącz joystick a następnie wybierz opcję "Zaktualizuj joysticki" Błędy - + Could not find a proper controller identifier. Exiting. Nie można znaleźć odpowiedniego identyfikatora dla kontrolera. Wychodzę. - - - - - - - + + + + + + + (%1) (%1) - - + + Open File Otwórz plik - + &Restore &Przywracanie - + Calibration couldn't be opened Okno kalibracji nie mogło zostać otwarte - + You must connect at least one controller to open the window Wymagane jest podłączenie co najmniej jednego kontrolera przed próbą otworzenia okna - + Run as Administrator? Uruchomić jako administrator? - + Are you sure that you want to run this program as Adminstrator? Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. @@ -4302,17 +4355,17 @@ Some games run as Administrator which will cause events generated by antimicro t Niektóre gry wymagają uruchamiania w trybie administratora, który pozwala na wychwytywanie zdarzeń, generowanych przez antimicro tak, aby nie były używane przez te gry, o ile antimicro jest również uruchomiony w trybie administratora. Sposób ten powstał z powodu problemów uprawnień, wywoływanych przez opcje Kontroli Konta Użytkownika w wersjach Windows'a, poczynając od wersji Windows Vista. - + Failed to elevate program Podniesienie programu zakończyło się niepowodzeniem - + Failed to restart this program as the Administrator Ponowne uruchomienie programu w trybie administratora zakończyło się niepowodzeniem - + Could not find controller. Exiting. Nie można znaleźć kontrolera. Wychodzę. @@ -4320,12 +4373,12 @@ Niektóre gry wymagają uruchamiania w trybie administratora, który pozwala na MouseAxisSettingsDialog - + Mouse Settings - Ustawienia Myszki - - + Set %1 Zestawienie %1 @@ -4333,12 +4386,12 @@ Niektóre gry wymagają uruchamiania w trybie administratora, który pozwala na MouseButtonSettingsDialog - + Mouse Settings - Ustawienia msyzki - - + Set %1 Zestawienie %1 @@ -4346,12 +4399,12 @@ Niektóre gry wymagają uruchamiania w trybie administratora, który pozwala na MouseControlStickSettingsDialog - + Mouse Settings Ustawienia myszki - + Set %1 Zestawienie %1 @@ -4359,12 +4412,12 @@ Niektóre gry wymagają uruchamiania w trybie administratora, który pozwala na MouseDPadSettingsDialog - + Mouse Settings Ustawienia myszki - + Set %1 Zestawienie %1 @@ -4372,17 +4425,17 @@ Niektóre gry wymagają uruchamiania w trybie administratora, który pozwala na MouseSettingsDialog - + Mouse Settings Ustawienia myszki - + Mouse Mode: Tryb myszki: - + Cursor mode is used to move the mouse cursor around the screen relative to its current position depending on how much you move an axis @@ -4406,22 +4459,22 @@ gdy odległość wzdłuż osi, którą pokonałeś ruchem myszki przekroczy ustaloną granicę. - + Cursor Kursor - + Spring Tekst - + Acceleration: Akceleracja: - + Enhanced: Three tier curve that makes the mouse move slow on the low end of an axis and fast on the high end. @@ -4459,123 +4512,123 @@ Funkcja mocy: Pozwala na użycie bardziej tradycyjnej opcji krzywej. Łagodnie sześcienny: Poziom końcowy osi przyspiesza stopniowo przez określony czas z zastosowaniem krzywej trzeciego stopnia. - + Enhanced Precision Rozszerzona precyzja - - + + Linear Liniowa (krzywa I stopnia) - + Quadratic Kwadratowa (krzywa II stopnia) - + Cubic Sześcienna (krzywa III stopnia) - + Quadratic Extreme Skrajnie kwadratowa - + Power Function Funkcja mocy - + Easing Quadratic Łagodnie kwadratowa - + Easing Cubic Łagodnie sześcienna - + Mouse Speed Settings Ustawienia prędkości myszki - + Enable to change the horizontal and vertical speed boxes at the same time. Możliwa zmiana prędkości poziomej i pionowej skrzyń w tym samym czasie. - + Change Together Zmiany całościowe - + Hori&zontal Speed: Prę&dkość pozioma: - - + + 1 = 20 pps 1 = 20 pps - + &Vertical Speed: &Prędkość pionowa: - + Wheel Hori. Speed: Kierownica Hori. Prędkość: - + Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. Ustawia prędkość poziomego ruchu rolki myszki według liczby symulowanych kroków na sekundę. - - + + 1 = 1 notch(es)/s 1 = 1 obrót(y)/ów - + Wheel Vert. Speed: Kierownica pionowa. Prędkość: - + Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. Ustawia prędkość pionowego ruchu rolki myszki według liczby symulowanych kroków na sekundę. - + Sensitivit&y: Czułoś&ć: - + For Power Function acceleration curve. Specifies the factor to use for curve sensitivity. When the value is above 1.0, the mouse movement will be accelerated @@ -4586,12 +4639,12 @@ przekracza 1.0, ruch myszki ulegnie większemu przyspieszeniu na niskim poziomie osi. - + Easing Duration: Zmniejszenie trwania: - + Specifies the amount of time (in seconds) that will be required before the mouse is fully accelerated after reaching the high end of an axis. @@ -4600,13 +4653,13 @@ przed pełnym przyspieszeniem myszy i po osiągnięciu końcowego odcinka osi. - - + + s s - + Options for adding more acceleration to the mouse movement beyond what the acceleration curve would produce. Acceleration is added based on how quickly an axis is @@ -4621,74 +4674,74 @@ pewnych błędów związanych z bardzo ograniczoną dostępnością do przedziału wartości, używając standardowych przycisków analogowych. - + Delta Acceleration Przyspieszenie delta - + &Multiplier: &Mnożnik: - + Highest value to accelerate mouse movement by Największa wartość przyspieszenia ruchu myszki - + x x - + Start %: Start %: - + Acceleration begins at this percentage of the base multiplier Przyspiesznie rozpoczyna się na tym poziomie procentowym głównego mnożnika - - - - + + + + % % - + Mi&n Threshold: Mi&nimalna granica: - + Minimum amount of axis travel required for acceleration to begin Minimum dla ilości przesuwu osi, wymaganej do rozpoczęcia przyspieszenia - + Max Threshold: Maksymalna granica: - + Maximum axis travel before acceleration has reached the multiplier value Maksimum dla przesuwu osi, potrzebnego dla momentu, zanim przyspiesznie osiągnie wartość mnożnika - + E&xtra Duration: Do&datkowy czas trwania: - + Extend the time that extra acceleration is applied. Axis travel will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. @@ -4697,37 +4750,37 @@ Przesuw osi zostanie przeniesiony do konta. Wolniejszy ruch zmniejszy aktualny czas, by mogło zostać dodane dodatkowe przyspieszenie. - + Curve: Krzywa: - + Ease Out Sine Zwalnianie pod koniec - + Ease Out Quad Większe zwalnianie pod koniec - + Ease Out Cubic Zwalnianie pod koniec plus większe przyspieszenie - + Spring Settings Ustawienia tekstu - + Spring Width: Szerokość tekstu: - + Changes the width of the region that the cursor can move in spring mode. 0 will use the entire width of your screen. @@ -4736,12 +4789,12 @@ mógł poruszać się w trybie tekstowym. 0 będzie używało całej szerokości twojego ekranu. - + Spring Height: Wysokość tekstu: - + Changes the height of the region that the cursor can move in spring mode. 0 will use the entire height of your screen. @@ -4750,46 +4803,46 @@ mógł poruszać się w trybie sprężyny. 0 będzie używało całej szerokości twojego ekranu. - + Release Radius: Zwalnianie zasięgu: - + Specifies that the spring area will be relative to the mouse position set by a non-relative spring. Określa, czy pole tekstowe będzie zależne od pozycji kursora myszki, ustawionej przez niezależny tekst. - + Relative Względny - + Mouse Status Status myszki - + X: X: - - + + 0 (0 pps) 0 (0 pps) - + Y: Y: - - + + %n notch(es)/s %n obrót @@ -4801,39 +4854,43 @@ pozycji kursora myszki, ustawionej przez niezależny tekst. QKeyDisplayDialog - + Key Checker Detekcja klawiszy - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + <html><head/><body><p>Naciśnij dowolny klawisz na klawiaturze, aby sprawdzić, w jakiej postaci jest wykrywany przez aplikację. W oknie pojawią się wartości pod trzema postaciami: systemową natywną, oryginalną stosowaną przez bibliotekę Qt oraz w postaci standardowej używanej przez antimicro.</p><p>Wartość znaku w antimicro oraz wartość znaku stosowanego w Qt będą zazwyczaj takie same, ponieważ aplikacja stara się używać wartości zdefiniowanej przez Qt, o ile jest to możliwe. Odwiedź stronę <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> aby zapoznać się z aktualną listą znaków. Jeśli zauważysz, że wybrany znak nie jest natywnie wspierany przez program, możesz to zgłosić na stronie <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">strona GitHub</span></a> by można było odpowiednio uaktualnić program. Tak jak jest aktualnie, prefiks jest dodawany do nieznanych wartości, aby mogły być nadal używane. Jednak problemem staje się brak przenośności danego profilu.</p></body></html> + + + + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> <html><head/><body><p>Naciśnij dowolny klawisz na klawiaturze, aby sprawdzić, w jakiej postaci jest wykrywany przez aplikację. W oknie pojawią się wartości pod trzema postaciami: systemową natywną, oryginalną stosowaną przez bibliotekę Qt oraz w postaci standardowej używanej przez antimicro.</p><p>Wartość znaku w antimicro oraz wartość znaku stosowanego w Qt będą zazwyczaj takie same, ponieważ aplikacja stara się używać wartości zdefiniowanej przez Qt, o ile jest to możliwe. Odwiedź stronę <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> aby zapoznać się z aktualną listą znaków. Jeśli zauważysz, że wybrany znak nie jest natywnie wspierany przez program, możesz to zgłosić na stronie <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">strona GitHub</span></a> by można było odpowiednio uaktualnić program. Tak jak jest aktualnie, prefiks jest dodawany do nieznanych wartości, aby mogły być nadal używane. Jednak problemem staje się brak przenośności danego profilu.</p></body></html> - + Event Handler: Procedura obsługi zdarzenia: - + Native Key Value: Wartość klawisza natywnego: - - - + + + 0x00000000 0x00000000 - + Qt Key Value: Wartość klawisza Qt: - + antimicro Key Value: Wartość klawisza antimicro: @@ -4841,134 +4898,134 @@ pozycji kursora myszki, ustawionej przez niezależny tekst. QObject - + Last button Ostatni przycisk - + There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? Program nie wykrywa ostatniego przypisanego przycisku. Czy co najmniej jeden przycisk został zmapowany z klawiatury do gamepad'a? - + # of joysticks found: %1 # joystick'ów zostało znalezionych: %1 - + List Joysticks: Lista joystick'ów: - + --------------- --------------- - + Joystick %1: Joystick %1: - + Index: %1 Indeks: %1 - + GUID: %1 GUID: %1 - + Name: %1 Nazwa: %1 - + Yes Tak - + No Nie - + Game Controller: %1 Kontroler do gier: %1 - + # of Axes: %1 # osi: %1 - + # of Buttons: %1 # przycisków: %1 - + # of Hats: %1 # przycisków POV: %1 - + Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". Aktywne okno zostało zmienione: Tytuł = "%1", Klasa = "%2", Program = "%3" lub "%4". - + Profile location %1 is not an XML file. Lokalizacja profilu %1 nie wskazuje na plik typu XML. - + Profile location %1 does not exist. Profil %1 nie istnieje. - - - + + + Controller identifier is not a valid value. Identyfikator kontrolera nie należy do wartości prawidłowych. - + An invalid set number '%1' was specified. Została określona nieprawidłowa liczba '%1". - + Controller identifier '%s'' is not a valid value. Identyfikator kontrolera '%s'' nie jest wartością prawidłową. - + No set number was specified. Nie została określona ustalona liczba. - + No controller was specified. Kontroler nie został określony. - + No display string was specified. Tekst dla wyświetlenia nie został określony. - + An invalid event generator was specified. Został określony nieprawidłowy generator zdarzeń. - + No event generator string was specified. Nie został określony generator zdarzeń. @@ -4977,7 +5034,7 @@ pozycji kursora myszki, ustawionej przez niezależny tekst. Flaga dla stylu Qt została wykryta lecz sam styl nie został uwzględniony. - + No log file specified. Nie został określony plik z logami programu. @@ -5006,148 +5063,148 @@ pozycji kursora myszki, ustawionej przez niezależny tekst. Uruchom program w tacce systemowej. - + Logging started Rozpoczęto generowanie logów - + Daemon launched Usługa została uruchomiona - + Failed to launch daemon Uruchomienie usługi zostało zakończone niepowodzeniem - + Launching daemon Uruchamianie usługi - - + + Display string "%1" is not valid. Treść dla wyświetlenia "%1" jest nieprawidłowa. - + Failed to set a signature id for the daemon Ustawienie sygnatury id dla usługi została zakończona niepowodzeniem - + Failed to change working directory to / Zmiana katalogu roboczego została zakończona niepowodzeniem / - + Attempting to use fallback option %1 for event generation. Próba użycia awaryjnej opcji %1 dla generatora zdarzeń. - + Failed to open event generator. Exiting. Uruchomienie generatora zdarzeń zostało zakończone niepowodzeniem. Koniec. - + Using %1 as the event generator. Zastosowanie %1 jako generatora zdarzeń. - + Could not raise process priority. Nie można nadać procesowi większego priorytetu. - + Quitting Program Zamykanie aplikacji - + Auto-switching to profile "%1". Autoprzełączanie do profilu "%1". - + Auto-switching to nullptr profile! Autoprzełączanie do profilu nullptr! - + Super Super - + Menu Menu - + Mute Mute - + Vol+ Vol+ - + Vol- Vol- - + Play/Pause Play/Pause - + Play Play - + Pause Pause - + Prev Prev - + Next Next - + Mail Mail - + Home Home - + Media Media - + Search Search - + xinput version must be at least 2.0. No mouse acceleration changes will occur. wersja rozszerzenia xinput nie może być mniejsza od 2.0. Zmiany przy akceleracji myszki nie zostaną uwzględnione. @@ -5155,18 +5212,18 @@ pozycji kursora myszki, ustawionej przez niezależny tekst. QuickSetDialog - + Quick Set Szybkie ustawienie - + <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> <html><head/><body><p>Naciśnij przycisk lub wykonaj ruch w kierunku osi %1 (<span style=" font-weight:600;">%2</span>).<br/>Pojawi się okno dialogowe<br/>które odblokuje możliwość tworzenia zadań.</p></body></html> - - + + Quick Set %1 Szybkie ustawienie %1 @@ -5174,12 +5231,12 @@ pozycji kursora myszki, ustawionej przez niezależny tekst. SetAxisThrottleDialog - + Throttle Change Zmiana przepustnicy analogowej - + The throttle setting for Axis %1 has been changed. Would you like to distribute this throttle change to all sets? @@ -5191,12 +5248,12 @@ Czy nowe ustawienia przepustnicy mają zostać uwzględnione we wszystkich zesta SetJoystick - + Set %1: %2 Zestawienie %1: %2 - + Set %1 Zestawienie %1 @@ -5204,52 +5261,52 @@ Czy nowe ustawienia przepustnicy mają zostać uwzględnione we wszystkich zesta SetNamesDialog - + Set Name Settings Ustawienia nazw zestawień - + Set 1 Zestawienie 1 - + Set 2 Zestawienie 2 - + Set 3 Zestawienie 3 - + Set 4 Zestawienie 4 - + Set 5 Zestawienie 5 - + Set 6 Zestawienie 6 - + Set 7 Zestawienie 7 - + Set 8 Zestawienie 8 - + Name Nazwa @@ -5257,7 +5314,7 @@ Czy nowe ustawienia przepustnicy mają zostać uwzględnione we wszystkich zesta SimpleKeyGrabberButton - + Mouse Mysz @@ -5265,7 +5322,7 @@ Czy nowe ustawienia przepustnicy mają zostać uwzględnione we wszystkich zesta SpringModeRegionPreview - + Spring Mode Preview Podgląd trybu tekstowego @@ -5273,7 +5330,7 @@ Czy nowe ustawienia przepustnicy mają zostać uwzględnione we wszystkich zesta UInputEventHandler - + Could not find a valid uinput device file. Please check that you have the uinput module loaded. lsmod | grep uinput @@ -5283,14 +5340,14 @@ Przykładowe polecenie sprawdzające: lsmod | grep uinput - + Could not open uinput device file Please check that you have permission to write to the device Nie można otworzyć pliku dla uinput. Sprawdź uprawnienia zapisu dla pliku - + Using uinput device file %1 Zastosowanie pliku %1 dla uinput @@ -5298,551 +5355,551 @@ Sprawdź uprawnienia zapisu dla pliku UInputHelper - + a a - + b b - + c c - + d d - + e e - + f f - + g g - + h h - + i i - + j j - + k k - + l l - + m m - + n n - + o o - + p p - + q q - + r r - + s s - + t t - + u u - + v v - + w w - + x x - + y y - + z z - + Esc Esc - + F1 F1 - + F2 F2 - + F3 F3 - + F4 F4 - + F5 F5 - + F6 F6 - + F7 F7 - + F8 F8 - + F9 F9 - + F10 F10 - + F11 F11 - + F12 F12 - + ` ` - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - - + + - - - + = = - + BackSpace BackSpace - + Tab Tab - + [ [ - + ] ] - + \ \ - + CapsLock CapsLock - + ; ; - + ' ' - + Enter Enter - + Shift_L Shift_L - + , , - - + + . . - - + + / / - + Ctrl_L Ctrl_L - - + + Super_L Super_L - + Alt_L Alt_L - + Space Space - + Alt_R Alt_R - + Menu Menu - + Ctrl_R Ctrl_R - + Shift_R Shift_R - + Up Góra - + Left Lewo - + Down Dół - + Right Prawo - + PrtSc PrtSc - + Ins Ins - + Del Del - + Home Home - + End End - + PgUp PgUp - + PgDn PgDn - + NumLock NumLock - + * * - + + + - + KP_Enter KP_Enter - + KP_1 KP_1 - + KP_2 KP_2 - + KP_3 KP_3 - + KP_4 KP_4 - + KP_5 KP_5 - + KP_6 KP_6 - + KP_7 KP_7 - + KP_8 KP_8 - + KP_9 KP_9 - + KP_0 KP_0 - + SCLK SCLK - + Pause Pause - + Super_R Super_R - + Mute Mute - + VolDn VolDn - + VolUp VolUp - + Play Play - + Stop Stop - + Prev Prev - + Next Next - + [NO KEY] [BRAK] @@ -5850,54 +5907,54 @@ Sprawdź uprawnienia zapisu dla pliku UnixWindowInfoDialog - + Captured Window Properties Uchwycone właściwości okna - + Information About Window Informacje o oknie - + Class: Klasa: - - - + + + TextLabel Etykieta - + Title: Tytuł: - + Path: Ścieżka: - + Match By Properties Dopasowanie według właściwości - + Class Klasa - + Title Tytuł - + Path Ścieżka @@ -5905,9 +5962,9 @@ Sprawdź uprawnienia zapisu dla pliku VDPad - - - + + + VDPad VDPad @@ -5915,263 +5972,263 @@ Sprawdź uprawnienia zapisu dla pliku VirtualKeyPushButton - + Space Space - + Tab Tab - + Shift (L) Shift (L) - + Shift (R) Shift(R) - + Ctrl (L) Ctrl (L) - + Ctrl (R) Ctrl (R) - + Alt (L) Alt (L) - - + + Alt (R) Alt (R) - + Alt Gr Alt Gr - + ` ` - + ~ ~ - - + + - - - + = = - + [ [ - + ] ] - + \ \ - + Caps Caps - + ; ; - + ' ' - + , , - - + + . . - - + + / / - + ESC ESC - + PRTSC PRTSC - + SCLK SCLK - + INS INS - + PGUP PGUP - + DEL DEL - + PGDN PGDN - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - + NUM LK NUM LK - - + + * * - + + + - + Enter Enter - + < < - + : : - + Super (L) Super (L) - + Menu Menu - + Up Góra - + Down Dół - + Left Lewo - + Right Prawo @@ -6179,233 +6236,233 @@ LK VirtualKeyboardMouseWidget - - + + Keyboard Klawiatura - - + + Mouse Mysz - + Left Mouse Myszki Lewo - + Up Mouse Myszki Góra - + Left Button Mouse Myszki Lewy przycisk - + Middle Button Mouse Myszki Środkowy przycisk - + Right Button Mouse Myszki Prawy przycisk - + Wheel Up Mouse Rolką w górę - + Wheel Left Mouse Rolką w lewo - + Wheel Right Mouse Rolką w prawo - + Wheel Down Mouse Rolką w dół - + Down Mouse Myszki Dół - + Right Mouse Myszki Prawo - + Button 4 Mouse Przycisk 4 - + Mouse 8 Mouse Przycisk myszy 8 - + Button 5 Mouse Przycisk 5 - + Mouse 9 Mouse Przycisk myszy 9 - + Mouse Settings Ustawienia myszki - + NONE BRAK - - + + Last button Ostatni przycisk - - + + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad Sloty dla wprowadzonych przycisków nie mogły zostać usunięte, ponieważ żadne dane nie zostały dotychczas wprowadzone z układu klawiatury do układu gamepad'a. Stwórz mapowanie co najmniej jednego przycisku dla gamepad'a - + Others Inne - + Applications Aplikacje - + Browser Back Browser Back - + Browser Favorites Browser Favorites - + Browser Forward Browser Forward - + Browser Home Browser Home - + Browser Refresh Browser Refresh - + Browser Search Browser Search - + Browser Stop Browser Stop - + Calc Calc - + Email Email - + Media Media - + Media Next Media Next - + Media Play Media Play - + Media Previous Media Previous - + Media Stop Media Stop - + Search Search - + Volume Down Volume Down - + Volume Mute Volume Mute - + Volume Up Volume Up @@ -6413,7 +6470,7 @@ LK VirtualMousePushButton - + INVALID NIEPRAWIDŁOWY @@ -6421,28 +6478,28 @@ LK WinAppProfileTimerDialog - - + + Capture Application Zrzut aplikacji - + After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. Jeśli wybrałeś "Zrzut aplikacji", kliknij na okno dowolnej otwartej aplikacji, aby twój profil został z nim powiązany. Otwarta aplikacja zostanie uchwycona po podanym czasie. - + Timer: Licznik: - + Seconds Sekund - + Cancel Anuluj @@ -6450,12 +6507,12 @@ LK WinExtras - + [NO KEY] [BRAK] - + AntiMicro Profile Profil AntiMicro @@ -6463,67 +6520,66 @@ LK X11Extras - + ESC ESC - + Tab Tab - + Space Space - + DEL DEL - + Return Return - + KP_Enter KP_Enter - + Backspace Backspace - + Alt Gr Alt Gr - + xinput extension was not found. No mouse acceleration changes will occur. rozszerzenie xinput nie zostało znalezione. Zmiany przy akceleracji myszki nie zostaną uwzględnione. - + xinput version must be at least 2.0. No mouse acceleration changes will occur. wersja rozszerzenia xinput nie może być mniejsza od 2.0. Zmiany przy akceleracji myszki nie zostaną uwzględnione. - Virtual pointer found with id=%1. - Został znaleziony wirtualny wskaźnik dla urządzenia o id=%1. + Został znaleziony wirtualny wskaźnik dla urządzenia o id=%1. - + PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 PtrFeedbackClass nie została znaleziona dla wskażnika wirtualnego. Zmiany akceleracji myszki nie zostaną uwzględnione dla urządzenia o id=%1 - + Changing mouse acceleration for device with id=%1 Zmiana akceleracji myszki dla urządzenia o numerze id=%1 @@ -6531,7 +6587,7 @@ LK XMLConfigReader - + Could not write updated profile XML to file %1. Zapis zaktualizowanego profilu XML do pliku %1 jest niemożliwy. @@ -6539,7 +6595,7 @@ LK XMLConfigWriter - + Could not write to profile at %1. Zapis do profilu %1 był niemożliwy. @@ -6547,7 +6603,7 @@ LK antimicro - + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. Aplikacja z nakładką graficzną do importowania ustawień przycisków klawiatury i myszki do gamepad'a. Program jest szczególnie przydatny dla gier bez wbudowanego wsparcia dla gamepad'ów. @@ -6555,99 +6611,99 @@ LK main - + Launch program in system tray only. Uruchom program w tacce systemowej. - + Launch program with the tray menu disabled Uruchom program bez udziału tacki systemowej - + Launch program without the main window displayed Uruchom program pomijając wyświetlenie głównego okna - + Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers Uruchom program ze wskazanym plikiem konfiguracyjnym jako domyślnym dla wskazanych kontrolerów - + location lokalizacja - + Apply configuration file to a specific controller. Value can be a controller index, name, or GUID Wybierz plik konfiguracyjny dla wskazanego kontrolera. Wartością może być indeks kontrolera, nazwa lub GUID - + value wartość - + Unload currently enabled profile(s) Odłącz aktualnie odblokowany profil(e) - + value(s) wartość(i) - + Start joysticks on a specific set. Value can be a controller index, name, or GUID Uruchom joystick(i) z numerem ustawienia. Wartością może być indeks kontrolera, nazwa lub GUID - + number value numer wartość - + Launch program as a daemon. Use only on Linux. Launch program as a daemon Uruchom program jako usługę w tle. Wyłącznie pod Linux. - + Enable logging Odblokuj generowanie logów - + log-type typ-logów - + Choose a file for logs writing Wybierz plik dla zapisywania logów - + filename nazwaPliku - + Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. Choose between using XTest support and uinput support for event generation. Default: xtest. Wybierz między wsparciem xtest a wsparciem uinput dla generatora zdarzeń. Do zastosowania wyłącznie w przypadku wykrywania przez program xtest oraz uinput pod Linux oraz w przypadku wykrywania opcji vmulti pod Windows. Domyślnie: xtest. - + event-generation-type typ-generatora-zdarzeń - + Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. Wyświetl informacje o wykrytych joystick'ach przez bibliotekę SDL. Zastosowanie wyłącznie z dostępną i odblokowaną biblioteką sdl. Wyświetlane informacje dotyczą indeksu kontrolerów, nazw i GUID. diff --git a/share/antimicro/translations/antimicro_ru.ts b/share/antimicro/translations/antimicro_ru.ts old mode 100644 new mode 100755 index 4f2fbe508..9544752b0 --- a/share/antimicro/translations/antimicro_ru.ts +++ b/share/antimicro/translations/antimicro_ru.ts @@ -4,17 +4,17 @@ AboutDialog - + About О программе - + Version Версия - + "juliagoda" (since March, 2018) Wanting only to play my favourite old games that din't support gamepads, I found this project (which map keyboard keys and mouse buttons to connected gamepads on Linux) as most proper and recent. But because of poor choices of such application on the internet and since it didn't compile properly, I decided to rescue the project. However, once I finished my work (enough to enjoy playing games) I thought about sharing this code with others. Of course all informations about past programmers will be held. "Ryochan7" (since December 30, 2012 until 2017), I have been working on antimicro in my spare time. What originally started as a fork of QJoyPad and a way to learn proper event-driven programming has turned into something much bigger than I originally intended. Although I have spent a lot of time learning new techniques, finding out more about the domain of KB+M emulation, and spending Friday nights bashing my head against my keyboard, it has been a fun and enriching experience overall. @@ -32,17 +32,17 @@ As of May 24, 2016, this project has moved to https://github.com/AntiMicro/antim - + Copyright: 2013 - 2018 - + Info Информация - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -86,7 +86,7 @@ p, li { white-space: pre-wrap; } - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -204,57 +204,57 @@ p, li { white-space: pre-wrap; } - + Changelog - + Credits Авторы - + antimicro - + About Development - + License Лицензия - + Program Version %1 Версия программы %1 - + Program Compiled on %1 at %2 Программа скомпилирована %1 в %2 - + Built Against SDL %1 Собрана на SDL %1 - + Running With SDL %1 Запускается на SDL %1 - + Using Qt %1 Версия Qt %1 - + Using Event Handler: %1 @@ -262,151 +262,160 @@ p, li { white-space: pre-wrap; } AddEditAutoProfileDialog - + Auto Profile Dialog Окно Авто Профиля - + Profile: Профиль: - - + + Browse Обзор - + Window: - - + + Select Window. Click on the appropriate application window and the application file path will be populated in the form. Кликните по нужному окну приложения чтобы автоматически добавить путь до него в форму. - + Detect Window Properties - + Class: - + Title: - + + set partial title + + + + Application: - + Select Выбор - + + De&vices: + + + Devices: - Устройства: + Устройства: - - + + Select this profile to be the default loaded for the specified device. The selection will be used instead of the all default profile option. Выберите профиль, который будет автоматически загружаться для выбранного устройства. Выбранный профиль загрузится даже если выбран профиль по-умолчанию. - + Set as Default for Controller Установить по-умолчанию для этого контроллера - - + + A different profile is already selected as the default for this device. Для этого контроллера уже назначен профиль по-умолчанию. - + Current (%1) Текущий (%1) - + Open Config Открыть Конфигурацию - - + + Select Program Выбрать Программу - + Programs (*.exe) - + Please use the main default profile selection. Пожалуйста, используйте основной профиль по-умолчанию. - + Please select a window by using the mouse. Press Escape if you want to cancel. - + Capture Application Window - + Could not obtain information for the selected window. - + Application Capture Failed - + Profile file path is invalid. Неверный путь до профиля. - + No window matching property was specified. - + Program path is invalid or not executable. Путь до программы содержит ошибку или не может быть выполнен. - + File is not an .exe file. - + No window matching property was selected. @@ -414,187 +423,187 @@ of the all default profile option. AdvanceButtonDialog - - + + Advanced Продвинутые настройки - + Assignments Назначения - + Toggle Переключатель - + Turbo Турбо - + Set Selector Установить Селектор - + Blank or KB/M - + Hold Удерживать - + Pause Пауза - + Cycle Цикл - + Distance Дистанция - + Insert Вставить - + Delete Удалить - + Clear All Очистить Все - + Time: Время: - + 0.01s 0,01 сек - + 0s 0 сек - + Insert a pause that occurs in between key presses. Вставить паузу между нажатиями на кнопку. - + Release Отпускание - - + + Insert a new blank slot. Вставить новый пустой слот. - + Delete a slot. Удалить слот. - + Clear all currently assigned slots. Очистить все заполненные слоты. - + Specify the duration of an inserted Pause or Hold slot. Определяет продолжительность для слотов Пауза и Удерживание. - + 0m 0 мин - + &Mouse Speed Mod: - - + + Specify the range past an axis dead zone in which a sequence of actions will execute. Определяет диапазон оси для мертвой зоны в котором следует выполнять действия. - + Distance: Дистанция: - - + + % % - + Mouse Mod Скорость Мыши - + Press Time Время Нажатия - + Delay Задержка - + Execute - + Load Загрузить - + Set Change - + Text Entry - + Placeholder Заполнитель - - + + 0 0 @@ -603,317 +612,317 @@ of the all default profile option. Модификатор Скорости Мыши: - + Set the percentage that mouse speeds will be modified by. Определяет в процентах на сколько должна быть изменена скорость мыши. - + Auto Reset Cycle After Автоматически сбросить цикл после - + seconds секунд - + Executable: - + ... - + Arguments: - - - + + + Enabled Включено - + Mode: - + <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> - + Normal Нормально - + Gradient - + Pulse - + Delay: Задержка: - + 0.10s 0,10 сек - + Rate: Частота: - + 10.0/s 10,0/сек - - + + Disabled Отключено - + Select Set 1 One Way Установить Набор 1 Односторонним - + Select Set 1 Two Way Установить Набор 1 Двусторонним - + Select Set 1 While Held Установить Набор 1 Пока Нажато - + Select Set 2 One Way Установить Набор 2 Односторонним - + Select Set 2 Two Way Установить Набор 2 Двусторонним - + Select Set 2 While Held Установить Набор 2 Пока Нажато - + Select Set 3 One Way Установить Набор 3 Односторонним - + Select Set 3 Two Way Установить Набор 3 Двусторонним - + Select Set 3 While Held Установить Набор 3 Пока Нажато - + Select Set 4 One Way Установить Набор 4 Односторонним - + Select Set 4 Two Way Установить Набор 4 Двусторонним - + Select Set 4 While Held Установить Набор 4 Пока Нажато - + Select Set 5 One Way Установить Набор 5 Односторонним - + Select Set 5 Two Way Установить Набор 5 Двусторонним - + Select Set 5 While Held Установить Набор 5 Пока Нажато - + Select Set 6 One Way Установить Набор 6 Односторонним - + Select Set 6 Two Way Установить Набор 6 Двусторонним - + Select Set 6 While Held Установить Набор 6 Пока Нажато - + Select Set 7 One Way Установить Набор 7 Односторонним - + Select Set 7 Two Way Установить Набор 7 Двусторонним - + Select Set 7 While Held Установить Набор 7 Пока Нажато - + Select Set 8 One Way Установить Набор 8 Односторонним - + Select Set 8 Two Way Установить Набор 8 Двусторонним - + Select Set 8 While Held Установить Набор 8 Пока Нажато - + sec. сек. - + /sec. /сек. - + Set %1 Набор %1 - - + + Select Set %1 Установить Набор %1 - + One Way Односторонним - + Two Way Двусторонним - + While Held Пока Нажато - + Choose Executable - + Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. - + Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. - + Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. - + Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. - + Chose a profile to load when this slot is activated. - + Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. - + Specify the time that keys past this slot should be held down. - + Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. - + Change to selected set once slot is activated. - + Full string will be typed when a slot is activated. - + Execute program when slot is activated. - - + + Choose Profile - + Config Files (*.amgp *.xml) @@ -921,157 +930,157 @@ of the all default profile option. AdvanceStickAssignmentDialog - + Stick/Pad Assignment Настройки Стиков / Крестовин - + Sticks Стики - + DPads Крестовины - - + + %1 (Joystick %2) %1 (Геймпад %2) - + Stick 1 Стик 1 - - - + + + Enabled Включено - - - - - - + + + + + + Assign Назначить - - + + X Axis: Ось X: - - + + Y Axis: Ось Y: - + Stick 2 Стик 2 - + Number of Physical DPads: %1 Количество физических крестовин: %1 - + Virtual DPad 1 Виртуальная Крестовина 1 - + Up: Вверх: - + Down: Вниз: - + Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. - + Left: Влево: - + Right: Вправо: - - - - + + + + Axis %1 Ось %1 - - - - + + + + Axis %1 - Ось %1 - - - - - + + + + Axis %1 + Ось %1 + - - - - + + + + Button %1 Кнопка %1 - + Move stick 1 along the X axis Переместите Cтик 1 по оси X - + Move stick 1 along the Y axis Переместите Cтик 1 по оси Y - + Move stick 2 along the X axis Переместите Cтик 2 по оси X - + Move stick 2 along the Y axis Переместите Cтик 2 по оси Y - - - - + + + + Press a button or move an axis Нажмите кнопку или подвигайте стик @@ -1079,179 +1088,179 @@ of the all default profile option. AxisEditDialog - + Axis Ось - - + + Mouse (Horizontal) Мышь (горизонталь) - - + + Mouse (Inverted Horizontal) Мышь (инвертированная горизонталь) - - + + Mouse (Vertical) Мышь (вертикаль) - - + + Mouse (Inverted Vertical) Мышь (инвертированная вертикаль) - - + + Arrows: Up | Down Стрелки: Вверх | Вниз - - + + Arrows: Left | Right Стрелки: Влево | Вправо - - + + Keys: W | S Клавиши: W | S - - + + Keys: A | D Клавиши: A | D - - + + NumPad: KP_8 | KP_2 NumPad: 8 | 2 - - + + NumPad: KP_4 | KP_6 NumPad: 4 | 6 - - - + + + None Отсутствует - - + + Set the value to use as the limit for an axis. Useful for a worn out analog stick. - + Negative Half Throttle Отрицательная Полутяга - + Positive Half Throttle Положительная Полутяга - + Name: Имя: - + Specify the name of an axis. Укажите имя для оси. - + Mouse Settings Настройки Мыши - - + + Set the value of the dead zone for an axis. Устанавливает значение мертвой зоны для оси. - + Presets: Пресет: - + Dead Zone: Мертвая Зона: - + Max Zone: Лимит: - - + + [NO KEY] [ПУСТО] - + Throttle setting that determines the behavior of how to interpret an axis hold or release. Настройки тяги определяют как программа будет расценивать удерживание или отпускание оси. - + Negative Throttle Отрицательная Тяга - + Normal Нормально - + Positive Throttle Положительная Тяга - + Current Value: Текущее значение: - + Set Установки для - + Set %1 Набор %1 - + Left Mouse Button - + Right Mouse Button @@ -1259,37 +1268,37 @@ interpret an axis hold or release. ButtonEditDialog - + Dialog Окно - + To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab <center>Чтобы назначить новое действие нажмите на соответствующую кнопку во вкладках "Клавиатура" или "Мышь"</center> - + Placeholder Заполнитель - + Toggle Переключатель - + Enables a key press or release to only occur when a controller button is pressed. Добавляет возможность производить действие только в случае нажатия или отпускания кнопки. - + Enables rapid key presses and releases. Turbo controller. Добавляет возможность быстрого нажатия кнопок (как в турбо контроллере). - + Turbo Турбо @@ -1298,38 +1307,38 @@ interpret an axis hold or release. Текущая: - + Last keyboard/mouse button: - + Slots Слоты - + Na&me: Имя: - + Specify the name of a button. Укажите название кнопки. - + Action: Действие: - + Specify the action that will be performed in game while this button is being used. Укажите какое действие будет производится при нажатии данной кнопки. - + Advanced Дополнительно @@ -1342,52 +1351,52 @@ this button is being used. Набор %1 - - - + + + Choose your keyboard key - + No button - - - - + + + + Last button - + To change settings for last button, it must be at least one assignment from keyboard to gamepad - + To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad - + To open advanced dialog, it's needed to map at least one button from keyboard to gamepad - + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + As last gamepad button has been set - + Index %1 @@ -1395,190 +1404,190 @@ this button is being used. Calibration - + Form - - + + Start calibration - + Controller: - + Sticks: - - Use settings from jstest-gtk - - - - + Reset settings - + Cancel Отмена - - + + Save Сохранить - - + + Calibration - - Do you really want to reset settings of current axes? + + Do you really want to reset settings of current axis? - + Calibration was saved for the preset. Do you really want to reset settings? - + Place the joystick in the center position. It's the part, where often you don't have to move. Just skip it in such situation. - + Calibrating center - + Start second step - + Center X: %1 - + Center Y: %1 - + Place the joystick in the top-left corner many times - - + + Calibrating position - - + + X: %1 - - + + Y: %1 - + Place the joystick in the bottom-right corner - + Start final step - + range X: %1 - %2 - + range Y: %1 - %2 - + deadzone X: %1 - + deadzone Y: %1 - + ---Calibration done!--- - + Calibration values have been saved - - + + Dead zone calibration - - You must move X axis to the right at least five times! Keep moving! + + You have to move axes to the top-left corner at least five times. - - You must move X axis to the left at least five times! Keep moving! + + You have to move axes to the bottom-right corner at least five times. - - - - + + Do you want to save calibration of current axis? + + + + + + + Axis %1 Ось %1 @@ -1586,64 +1595,64 @@ deadzone Y: %1 CapturedWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: - - - + + + TextLabel - + Title: - + Path: - + Match By Properties - + Class - + Title - + Path - + Full Path - + File Name @@ -1732,67 +1741,67 @@ deadzone Y: %1 DPadContextMenu - + Mouse (Normal) Мышь (Нормально) - + Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) - + Arrows Стрелки - + Keys: W | A | S | D Клавиши: W | A | S | D - + NumPad NumPad - + None Отсутствует - + Standard Стандартный - + Eight Way 8-ми сторонний - + 4 Way Cardinal 4-х сторонний основной - + 4 Way Diagonal 4-х сторонний диагональный - + Mouse Settings @@ -1800,108 +1809,108 @@ deadzone Y: %1 DPadEditDialog - + Dialog Окно - + Presets: Пресет: - + Mouse (Normal) Мышь (Нормально) - + Mouse (Inverted Horizontal) Мышь (Инвертированная Горизонталь) - + Mouse (Inverted Vertical) Мышь (Инвертированная Вертикаль) - + Mouse (Inverted Horizontal + Vertical) Мышь (Инвертированная Горизонталь + Вертикаль) - + Arrows Стрелки - + Keys: W | A | S | D Клавиши: W | A | S | D - + NumPad NumPad - + None Отсутствует - + Dpad Mode: Режим Крестовины: - + &Name: - + 4 Way Cardinal 4-х сторонний основной - + 4 Way Diagonal 4-х сторонний диагональный - + DPad Delay: - - + + Time lapsed before a direction change is taken into effect. - + s - + Specify the name of a dpad. Укажите имя для крестовины. - + Mouse Settings Настройки Мыши - + Standard Стандартный - + Standard: 8 region dpad with two direction buttons active when the dpad is in a diagonal region. @@ -1917,17 +1926,17 @@ to a diagonal zone. - + Eight Way 8-ми сторонний - + Set Установки для - + Set %1 Набор %1 @@ -1935,27 +1944,27 @@ to a diagonal zone. EditAllDefaultAutoProfileDialog - + Default Profile Профиль По-Умолчанию - + Profile: Профиль: - + Browse Обзор - + Open Config Открыть Конфигурацию - + Profile file path is invalid. Путь до профиля неверен. @@ -1963,29 +1972,29 @@ to a diagonal zone. ExtraProfileSettingsDialog - + Extra Profile Settings Дополнительные настройки профиля - + Key Press Time: Отклик Клавиш: - + 0.00 ms 0,00 мс - + Profile Name: Имя Профиля: - - - + + + s сек @@ -1993,7 +2002,7 @@ to a diagonal zone. GameController - + Game Controller Геймпад @@ -2001,9 +2010,9 @@ to a diagonal zone. GameControllerDPad - - - + + + DPad Крестовина @@ -2011,187 +2020,187 @@ to a diagonal zone. GameControllerMappingDialog - + Game Controller Mapping Настройка Игрового Контроллера - + <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> - + A A - + B B - + X X - + Y Y - + Back Back - + Start Start - + Guide Guide - + Left Shoulder Левый Бампер - + Right Shoulder Правый Бампер - + Left Stick Click Кнопка Левого Стика - + Right Stick Click Кнопка Правого Стика - + Left Stick X Ось X Левого Стика - + Left Stick Y Ось Y Левого Стика - + Right Stick X Ось X Правого Стика - + Right Stick Y Ось Y Правого Стика - + Left Trigger Левый Триггер - + Right Trigger Правый Триггер - + DPad Up Крестовина Вверх - + DPad Left Крестовина Влево - + DPad Down Крестовина Вниз - + DPad Right Крестовина Вправо - + Mapping Настройка - + SDL 2 Game Controller Mapping String Вывод настройщика контроллеров SDL 2 - + Last Axis Event: - + Current Axis Detection Dead Zone: - + 5000 5000 - + 10000 10000 - + 15000 15000 - + 20000 20000 - + 25000 25000 - + 30000 30000 - + 32000 32000 - + Game Controller Mapping (%1) (#%2) - + Discard Controller Mapping? Сбросить настройки контроллера? - + Discard mapping for this controller? If discarded, the controller will be reverted to a joystick once you refresh all joysticks. @@ -2203,47 +2212,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerSet - + Back Back - + Guide Guide - + Start Start - + LS Click - + RS Click - + L Shoulder - + R Shoulder - + L Trigger - + R Trigger @@ -2251,9 +2260,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerTrigger - - - + + + Trigger Триггер @@ -2261,9 +2270,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxis - - - + + + Axis Ось @@ -2271,24 +2280,24 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisButton - + Negative Отрицательно - + Positive Положительно - + Unknown Неизвестно - - - + + + Button Кнопка @@ -2296,74 +2305,74 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisContextMenu - + Mouse (Horizontal) Мышь (горизонталь) - + Mouse (Inverted Horizontal) - + Mouse (Vertical) Мышь (вертикаль) - + Mouse (Inverted Vertical) - + Arrows: Up | Down Стрелки: Вверх | Вниз - + Arrows: Left | Right Стрелки: Влево | Вправо - + Keys: W | S Клавиши: W | S - + Keys: A | D Клавиши: A | D - + NumPad: KP_8 | KP_2 NumPad: 8 | 2 - + NumPad: KP_4 | KP_6 NumPad: 4 | 6 - - + + None Отсутствует - - + + Mouse Settings - + Left Mouse Button - + Right Mouse Button @@ -2371,57 +2380,57 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButton - + Processing turbo for #%1 - %2 - + Finishing turbo for button #%1 - %2 - + Processing press for button #%1 - %2 - + Processing release for button #%1 - %2 - + Distance change for button #%1 - %2 - - - + + + Button Кнопка - - - - + + + + [NO KEY] [ПУСТО] - + [Set %1 1W] - + [Set %1 2W] - + [Set %1 WH] @@ -2429,47 +2438,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonContextMenu - + Toggle Переключатель - + Turbo Турбо - + Clear - + Set Select - + Disabled Отключено - + Set %1 - + Set %1 1W Набор %1 1W - + Set %1 2W Набор %1 2W - + Set %1 WH @@ -2477,118 +2486,118 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonSlot - - + + Mouse Мышь - + Up Вверх - + Down Вниз - + Left Влево - + Right Вправо - + LB LB - + MB MB - + RB RB - + B4 B4 - + B5 B5 - + Pause Пауза - + Hold Удерживание - + Cycle Цикл - + Distance Дистанция - + Release Отпускание - + Mouse Mod Скорость Мыши - + Press Time Время Нажатия - + Delay Задержка - + Load %1 - + Set Change %1 - + [Text] %1 - + [Exec] %1 - + [NO KEY] [ПУСТО] @@ -2596,9 +2605,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStick - - - + + + Stick Стик @@ -2606,37 +2615,37 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickButton - - - + + + Up Вверх - - - + + + Down Вниз - - - + + + Left Влево - - - + + + Right Вправо - - - + + + Button Кнопка @@ -2644,67 +2653,67 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickContextMenu - + Mouse (Normal) Мышь (Нормально) - + Mouse (Inverted Horizontal) - + Mouse (Inverted Vertical) - + Mouse (Inverted Horizontal + Vertical) - + Arrows Стрелки - + Keys: W | A | S | D Клавиши: W | A | S | D - + NumPad NumPad - + None Отсутствует - + Standard Стандартный - + Eight Way 8-ми сторонний - + 4 Way Cardinal 4-х сторонний основной - + 4 Way Diagonal 4-х сторонний диагональный - + Mouse Settings @@ -2712,86 +2721,86 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickEditDialog - + Dialog Окно - + X: Х: - - - - - + + + + + 0 0 - + Y: Y: - + Distance: Дистанция: - + Presets: Пресет: - + Mouse (Normal) Мышь (Нормально) - + Mouse (Inverted Horizontal) Мышь (инвертированная горизонталь) - + Mouse (Inverted Vertical) Мышь (инвертированная вертикаль) - + Mouse (Inverted Horizontal + Vertical) Мышь (инвертированная горизонталь + вертикаль) - + Arrows Стрелки - + Keys: W | A | S | D Клавиши: W | A | S | D - + NumPad NumPad - + None Отсутствует - + Stick Mode: Режим Стика: - + Standard: 8 region stick with two direction buttons active when the stick is in a diagonal region. @@ -2807,72 +2816,72 @@ to a diagonal zone of the stick. - + 4 Way Cardinal 4-х сторонний основной - + 4 Way Diagonal 4-х сторонний диагональный - - + + Dead zone value to use for an analog stick. - - + + Value when an analog stick is considered moved 100%. - - + + The area (in degrees) that each diagonal region occupies. - + Square Stick: - - + + Percentage to modify a square stick coordinates to confine values to a circle - + % % - + Stick Delay: - - + + Time lapsed before a direction change is taken into effect. - + s - + Modifier: - + Edit button that is active while the stick is active. This button is useful for assigning zones with @@ -2881,68 +2890,68 @@ functionality to an analog stick. - + PushButton - + Na&me: Name: Имя: - + Specify the name of an analog stick. Укажите имя для аналогового стика. - + Mouse Settings Настройки Мыши - + Standard Стандартный - + Bearing: Точка Опоры: - + % Safe Zone: % ограничения: - + Eight Way 8-ми сторонний - + Dead Zone: Мертвая Зона: - + Max Zone: Лимит: - + Diagonal Range: Диагональный диапазон: - + Set Установки для - + Set %1 Установки для %1 @@ -2950,9 +2959,9 @@ functionality to an analog stick. JoyControlStickModifierButton - - - + + + Modifier @@ -2960,9 +2969,9 @@ functionality to an analog stick. JoyDPad - - - + + + DPad Крестовина @@ -2970,37 +2979,37 @@ functionality to an analog stick. JoyDPadButton - - - + + + Up Вверх - - - + + + Down Вниз - - - + + + Left Влево - - - + + + Right Вправо - - - + + + Button Кнопка @@ -3008,266 +3017,271 @@ functionality to an analog stick. JoyTabWidget - - - - - - + + + + + + <New> <Новый> - - + + Remove Удалить - - + + Remove configuration from recent list. Удалить конфигурацию из списка недавно использованных файлов. - - + + Load Загрузить - - + + Load configuration file. Загрузить файл конфигурации. - - + + Save Сохранить - - + + Save changes to configuration file. Сохранить изменения в файл конфигурации. - - + + Save As Сохранить Как - - + + Save changes to a new configuration file. Сохранить изменения в новый файл конфигурации. - - + + Sets Наборы - + Copy from Set - + Settings Настройки - - + + Set 1 Набор 1 - - + + Set 2 Набор 2 - - + + Set 3 Набор 3 - - + + Set 4 Набор 4 - - + + Set 5 Набор 5 - - + + Set 6 Набор 6 - - + + Set 7 Набор 7 - - + + Set 8 Набор 8 - - + + Stick/Pad Assign Настройка Стиков/Крестровин - - + + Controller Mapping Настройка Контроллера - - + + Quick Set Быстрая Настройка - - + + Names Бирки - - + + Toggle button name displaying. Вкл. / Выкл. отображение названий команд на кнопках. - - + + Pref Настройки Профиля - - + + Change global profile settings. Изменить общие настройки профиля. - - - + + + Reset Сброс - - + + Revert changes to the configuration. Reload configuration file. Отменяет изменения конфигурации. Перезагружает конфигурационный файл. - + Open Config Открыть Конфигурацию - + Config Files (*.amgp *.xml) - - - + + + Config File (*.%1.amgp) - - + + Do you really want to reset buttons settings for joystick? + + + + + Save Profile Changes? Сохранить изменения в профиле? - - + + Changes to the new profile have not been saved. Would you like to save or discard the current profile? Изменения в новом профиле не были сохранены. Сохранить или отменить изменения в текущем профиле? - - + + Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? Изменения в профиле "%1" не были сохранены. Сохранить или отменить изменения в текущем профиле? - + Sticks Стики - - + + DPads Крестовины - + No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. <center>Не было назначено ни одной кнопки. Воспользуйтесь "Быстрой Настройкой" <br>для назначения кнопок или отключите сокрытие пустых кнопок.</center> - - + + Set %1: %2 Набор %1: %2 - - + + Set %1 Набор %1 - + Copy Set Assignments Скопировать Набор Настроек - + Are you sure you want to copy the assignments and device properties from %1? Вы уверены что хотите скопировать настройки и параметры устройства из %1? - - - + + + Save Config Сохранить Конфигурацию - - + + Set Набор @@ -3275,7 +3289,7 @@ to buttons or disable hiding empty buttons. Joystick - + Joystick Геймпад @@ -3283,98 +3297,98 @@ to buttons or disable hiding empty buttons. JoystickStatusWindow - + Properties Свойства - + Details Детали - + Name: Имя: - - - - - - - + + + + + + + %1 %1 - + Number: Номер: - + Axes: Осей: - + Buttons: Кнопок: - + Hats: Мини-джойстиков: - + GUID: GUID: - + Game Controller: - + Axes Оси - + Buttons Кнопки - + Hats Мини-джойстики - + %1 (#%2) Properties %1 (#%2) Свойства - + Axis %1 Ось %1 - + Hat %1 Мини-джойстик %1 - + No - + Yes @@ -3382,62 +3396,67 @@ to buttons or disable hiding empty buttons. MainSettingsDialog - + Edit Settings Редактировать настройки - + General Общие - + Controller Mappings Настройки Контроллера - + Language Язык - + Auto Profile АвтоПрофиль - + Mouse Мышь - + Advanced - + + Profile Direc&tory: + + + + <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> <html><head/><body><p>Укажите путь до директории, которую программа будет использовать для хранения профилей.</p></body></html> - + Recent Profile Count: Количество недавних профилей: - + <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> <html><head/><body><p>Количество профилей, которые будут хранится в списке недавних. Если выставить "0" то программа не будет ограничивать количество отображаемых профилей.</p></body></html> - + Gamepad Poll Rate: - + Change the poll rate that the program uses to discover new events from gamepads. Defaults to 10 ms. @@ -3447,52 +3466,52 @@ before using antimicro unattended. - + Hide main window when the main window close button is clicked instead of quitting the program. Прятать главное окно программы по нажатию на кнопку выхода вместо того чтобы закрывать программу. - + Close To Tray Сворачивать в трей - + Have Windows start antimicro at system startup. - + Launch At Windows Startup Загружать вместе с Windows - + Display recent profiles for all controllers as a single list in the tray menu. Defaults to using sub-menus. Отображает недавно открытые профили для всех контроллеров в виде единого списка под иконкой в трее. По-умолчанию использует подменю. - + Single Profile List in Tray Единый лист профилей в трее - + Have the program minimize to the taskbar. By default, the program minimizes to the system tray if available. Заставляет программу сворачиватся в панель задач. По-умолчанию программа сворачивается в системный трей. - + Minimize to Taskbar Сворачивать в панель задач - + This option will cause the program to hide all buttons that have no slots assigned to them. The Quick Set dialog window will have to be used @@ -3500,184 +3519,194 @@ to bring up the edit dialog for gamepad buttons. Эта опция заставит программу скрывать все кнопки, к которым не привязаны слоты с командами. Воспользуйтесь окном "Быстрой Настройки" для отображения скрытых кнопок. - + Hide Empty Buttons Скрыть пустые кнопки - + When the program is launched, open the last known profile that was opened during the previous session. Когда программа запустится, будет открыт последний профиль, использованный в предыдущей сессии. - + Auto Load Last Opened Profile Автоматически загружать последний открытый профиль - + Only show the system tray icon when the program first launches. При запуске программы появится лишь значок в системном трее. - + Launch in Tray Запускаться в свернутом виде - + Associate .amgp files with antimicro in Windows Explorer. - + Associate Profiles - + Key Repeat Повтор клавиш - + Active keys will be repeatedly pressed when this option is enabled. Если активировать данную опцию то активные клавиши будут нажиматься автоматически. - - + + Enable - + Specifies how much time should elapse before key repeating begins. - + Specifies how many times key presses will be performed per seconds. - + <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> - + Português do Brasil - + Français - + Deutsch - + Italiano - + 日本語 - + Русский - + српски / srpski - + 简体中文 - + Español - + українська - + Polski - + + History Si&ze: + + + + Log File: - + Log Level: - + None Отсутствует - + Error - + Warning - + Info Информация - + Debug - + + Reset + Сброс + + + Class - + Title - + Program - + Disable the "Enhanced Pointer Precision" Windows setting while antimicro is running. Disabling "Enhanced Pointer Precision" will allow mouse movement within antimicro to be more @@ -3685,32 +3714,27 @@ precise. - + Disable Enhance Pointer Precision - + Smoothing - - Histor&y Size: - - - - + Weight &Modifier: - + Refresh Rate: - + The refresh rate is the amount of time that will elapse in between mouse events. Please be cautious when editing this setting as it will cause the program to use @@ -3720,46 +3744,46 @@ it unattended. - + Spring Пружина - + Screen: - + Utilize the specified screen for spring mode. On Linux, the default is to use the primary screen. On Windows, the default is to use all available screens. - + Accel Numerator: - - - + + + 0 0 - + Accel Denominator: - + Accel Threshold: - + If the acceleration values for the virtual mouse have been changed by a different process, particularly when quitting an older game, then you might want to reset the acceleration @@ -3767,37 +3791,32 @@ values used by the virtual mouse. - + Reset Acceleration - + Delay: Задержка: - - Profi&le Directory: - - - - + ms мс - + Rate: Частота: - + times/s раз/сек - + Below is a list of the custom mappings that have been saved. You can use the following table to delete mappings or have mappings temporarily disabled. You can also disable mappings that are included with SDL; just insert a new row with the appropriate joystick GUID and check disable. Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. @@ -3806,34 +3825,34 @@ Settings will not take affect until you either refresh all joysticks or unplug t Изменения не вступят в силу пока вы не обновите или переподключите все геймпады. - + GUID GUID - + Mapping String Строка Настроек - + Disable? Отключить? - - + + Delete Удалить - + Insert Вставить - - + + Default По-умолчанию @@ -3842,7 +3861,7 @@ Settings will not take affect until you either refresh all joysticks or unplug t Бразильский / Португальский - + English Английский @@ -3851,198 +3870,208 @@ Settings will not take affect until you either refresh all joysticks or unplug t Немецкий - - + + Active Активировать - + Devices: Устройства: - - + + All Все - + Device Устройство - + Profile Профиль - + Default? По-умолчанию? - + Add Добавить - + Edit Редактировать - + Also, Windows users who want to use a low value should also check the "Disable Enhance Pointer Precision" checkbox if you haven't disabled the option in Windows. - + Select Default Profile Directory Выбрать как профиль по-умолчанию - + Are you sure you want to delete the profile? Вы уверены что хотите удалить этот профиль? - + Save Log File As - + Log Files (*.log) + + + Do you really want to reset setting? + + + + + Would you like to reset mappings too? + + MainWindow - + antimicro - + No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu Геймпады не обнаружены. Пожалуйста, подключите геймпад к компьютеру и выберете опцию "Обновить Геймпады" из главного меню. - + If events are not seen by a game, please click here to run this application as Administrator. - + &App &Приложение - + &Options &Опции - + &Help &Помощь - - + + &Quit &Выход - + Ctrl+Q Ctrl+Q - - + + &Update Joysticks &Обновить Геймпады - + Ctrl+U Ctrl+U - - + + &Hide &Скрыть - + Ctrl+H Ctrl+H - + &About &О программе - + Ctrl+A Ctrl+A - + About &Qt - + &Properties - + &Key Checker - + &GitHub Page - + &Game Controller Mapping - + S&ettings - + &Stick/Pad Assign - + &Wiki - + &Issues - + &Calibration @@ -4059,7 +4088,7 @@ the option in Windows. Проверка Клавиш - + Home Page Домашняя страница @@ -4080,66 +4109,66 @@ the option in Windows. Настройки Стиков / Крестовин - + Could not find a proper controller identifier. Exiting. - - - - - - - + + + + + + + (%1) (%1) - - + + Open File Открыть файл - + &Restore &Восстановить - + Calibration couldn't be opened - + You must connect at least one controller to open the window - + Run as Administrator? - + Are you sure that you want to run this program as Adminstrator? Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. - + Failed to elevate program - + Failed to restart this program as the Administrator - + Could not find controller. Exiting. @@ -4147,12 +4176,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseAxisSettingsDialog - + Mouse Settings - Настройки Мыши - - + Set %1 Установки для %1 @@ -4160,12 +4189,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseButtonSettingsDialog - + Mouse Settings - Настройки Мыши - - + Set %1 Установки для %1 @@ -4173,12 +4202,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseControlStickSettingsDialog - + Mouse Settings Настройки Мыши - + Set %1 Установки для %1 @@ -4186,12 +4215,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseDPadSettingsDialog - + Mouse Settings Настройки Мыши - + Set %1 Установки для %1 @@ -4199,17 +4228,17 @@ Some games run as Administrator which will cause events generated by antimicro t MouseSettingsDialog - + Mouse Settings Настройки Мыши - + Mouse Mode: Режим Мыши: - + Cursor mode is used to move the mouse cursor around the screen relative to its current position depending on how much you move an axis @@ -4232,79 +4261,79 @@ axis is moved back to the dead zone. ось переместится обратно к мертвой зоне. - + Cursor Курсор - + Spring Пружина - + Acceleration: Усиление: - + Enhanced Precision Улучшенная Точность - - + + Linear Линейное - + Quadratic Квадратное - + Cubic Кубическое - + Quadratic Extreme Экстримально Кубическое - + Power Function Степенная Функция - + Easing Quadratic - + Easing Cubic - + Mouse Speed Settings Настройки скорости мыши - + Enable to change the horizontal and vertical speed boxes at the same time. Позволяет увеличивать скорость мыши по горизонтали и вертикали одновременно. - + Change Together Изменять совместно - + Options for adding more acceleration to the mouse movement beyond what the acceleration curve would produce. Acceleration is added based on how quickly an axis is @@ -4314,17 +4343,17 @@ using typical gamepad analog sticks. - + Delta Acceleration - + &Multiplier: - + Mi&n Threshold: @@ -4336,8 +4365,8 @@ Speed: горизонтали: - - + + 1 = 20 pps 1 = 20 pps @@ -4348,31 +4377,31 @@ Speed: вертикали: - + Wheel Hori. Speed: Скорость колесика по горизонтали: - + Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. Устанавливает скорость движения колесика мыши по горизонтали. - + Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. Устанавливает скорость движения колесика мыши по вертикали. - + Sensitivit&y: - + For Power Function acceleration curve. Specifies the factor to use for curve sensitivity. When the value is above 1.0, the mouse movement will be accelerated @@ -4380,122 +4409,122 @@ faster at the low end of an axis. - + Easing Duration: - - + + s - + Highest value to accelerate mouse movement by - + x x - + Start %: - + Acceleration begins at this percentage of the base multiplier - + Minimum amount of axis travel required for acceleration to begin - + Max Threshold: - + Maximum axis travel before acceleration has reached the multiplier value - + E&xtra Duration: - + Curve: - + Ease Out Sine - + Ease Out Quad - + Ease Out Cubic - + Release Radius: - + Specifies that the spring area will be relative to the mouse position set by a non-relative spring. Привязывает пружину к позиции мыши. - + Relative Привязка - + Mouse Status - + X: Х: - - + + 0 (0 pps) - + Y: Y: - - + + 1 = 1 notch(es)/s 1 = 1 шаг(ов)/сек - + Enhanced: Three tier curve that makes the mouse move slow on the low end of an axis and fast on the high end. @@ -4517,19 +4546,19 @@ a period of time using a Cubic curve. - + Hori&zontal Speed: - + &Vertical Speed: - + Wheel Vert. Speed: Скорость колесика @@ -4540,59 +4569,59 @@ Speed: Чувствительность: - + Specifies the amount of time (in seconds) that will be required before the mouse is fully accelerated after reaching the high end of an axis. - - - - + + + + % % - + Extend the time that extra acceleration is applied. Axis travel will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. - + Spring Settings Настройки Пружины - + Spring Width: Ширина Пружины: - + Changes the width of the region that the cursor can move in spring mode. 0 will use the entire width of your screen. Изменяет ширину области, по которой будет двигаться курсор в режиме Пружины. Если выставить "0" будет использоваться вся ширина экрана. - + Spring Height: Высота Пружины: - + Changes the height of the region that the cursor can move in spring mode. 0 will use the entire height of your screen. Изменяет высоту области, по которой будет двигаться курсор в режиме Пружины. Если выставить "0" будет использоваться вся высота экрана. - - + + %n notch(es)/s %n шаг/сек @@ -4604,39 +4633,39 @@ of your screen. QKeyDisplayDialog - + Key Checker Проверка Клавиш - - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - + Event Handler: - + Native Key Value: Родное Значение Клавиши: - - - + + + 0x00000000 0x00000000 - + Qt Key Value: Значение Клавиши в Qt: - + antimicro Key Value: @@ -4644,265 +4673,265 @@ of your screen. QObject - + Super Super - + Menu Меню - + Mute - + Vol+ - + Vol- - + Play/Pause - + Play - + Pause Пауза - + Prev - + Next Next - + Mail - + Home Home - + Media - + Search - + Daemon launched Демон запущен - + Failed to launch daemon Не удалось запустить демон - + Launching daemon Демон запускается - - + + Display string "%1" is not valid. - + Failed to set a signature id for the daemon Не удалось подписать демон - + Failed to change working directory to / Не удалось менить рабочую директорию на "/" - + Quitting Program - + # of joysticks found: %1 - + List Joysticks: - + --------------- - + Joystick %1: - + Index: %1 - + GUID: %1 - + Name: %1 - + Yes - + No - + Game Controller: %1 - + # of Axes: %1 - + # of Buttons: %1 - + # of Hats: %1 - + Attempting to use fallback option %1 for event generation. - + Failed to open event generator. Exiting. - + Using %1 as the event generator. - + Could not raise process priority. - + Last button - + There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? - + Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". - + Profile location %1 is not an XML file. Профиль, находящийся в %1 не является XML файлом. - + Profile location %1 does not exist. Профиль, находящийся в %1 не существует. - - - + + + Controller identifier is not a valid value. Идентификатор контроллера имеет недопустимое значение. - + An invalid set number '%1' was specified. - + Controller identifier '%s'' is not a valid value. - + No set number was specified. Не указан набор значений. - + No controller was specified. - + No display string was specified. Не указана строка для отображения. - + An invalid event generator was specified. - + No event generator string was specified. - + No log file specified. @@ -4965,22 +4994,22 @@ of your screen. Запускать программу в качестве демона. - + Logging started - + Auto-switching to profile "%1". - + Auto-switching to nullptr profile! - + xinput version must be at least 2.0. No mouse acceleration changes will occur. @@ -4988,18 +5017,18 @@ of your screen. QuickSetDialog - + Quick Set Быстрая настройка - + <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> <html><head/><body><p>Пожалуйста, нажмите кнопку или подвигайте стик на %1 (<span style=" font-weight:600;">%2</span>).<br/>Появится окно, которое позволит вам назначить кнопку.</p></body></html> - - + + Quick Set %1 Быстрая Настройка %1 @@ -5007,12 +5036,12 @@ of your screen. SetAxisThrottleDialog - + Throttle Change Смена Тяги - + The throttle setting for Axis %1 has been changed. Would you like to distribute this throttle change to all sets? @@ -5024,12 +5053,12 @@ Would you like to distribute this throttle change to all sets? SetJoystick - + Set %1: %2 Набор %1: %2 - + Set %1 Набор %1 @@ -5037,52 +5066,52 @@ Would you like to distribute this throttle change to all sets? SetNamesDialog - + Set Name Settings Установить имена для наборов - + Set 1 Набор 1 - + Set 2 Набор 2 - + Set 3 Набор 3 - + Set 4 Набор 4 - + Set 5 Набор 5 - + Set 6 Набор 6 - + Set 7 Набор 7 - + Set 8 Набор 8 - + Name Имя @@ -5090,7 +5119,7 @@ Would you like to distribute this throttle change to all sets? SimpleKeyGrabberButton - + Mouse Мышь @@ -5098,7 +5127,7 @@ Would you like to distribute this throttle change to all sets? SpringModeRegionPreview - + Spring Mode Preview Предпросмотр Режима Пружины @@ -5106,20 +5135,20 @@ Would you like to distribute this throttle change to all sets? UInputEventHandler - + Could not find a valid uinput device file. Please check that you have the uinput module loaded. lsmod | grep uinput - + Could not open uinput device file Please check that you have permission to write to the device - + Using uinput device file %1 @@ -5127,551 +5156,551 @@ Please check that you have permission to write to the device UInputHelper - + a a - + b b - + c c - + d d - + e e - + f f - + g g - + h h - + i i - + j j - + k k - + l l - + m m - + n n - + o o - + p p - + q q - + r r - + s сек - + t t - + u u - + v v - + w w - + x x - + y y - + z z - + Esc - + F1 F1 - + F2 F2 - + F3 F3 - + F4 F4 - + F5 F5 - + F6 F6 - + F7 F7 - + F8 F8 - + F9 F9 - + F10 F10 - + F11 F11 - + F12 F12 - + ` ` - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - - + + - - - + = = - + BackSpace BackSpace - + Tab Tab - + [ [ - + ] ] - + \ \ - + CapsLock - + ; ; - + ' ' - + Enter - + Shift_L Shift_L - + , , - - + + . . - - + + / / - + Ctrl_L - - + + Super_L Super_L - + Alt_L Alt_L - + Space Пробел - + Alt_R Alt_R - + Menu Меню - + Ctrl_R - + Shift_R Shift_R - + Up - + Left - + Down - + Right - + PrtSc - + Ins - + Del - + Home Home - + End End - + PgUp - + PgDn - + NumLock - + * * - + + + - + KP_Enter KP_Enter - + KP_1 KP_1 - + KP_2 KP_2 - + KP_3 KP_3 - + KP_4 KP_4 - + KP_5 KP_5 - + KP_6 KP_6 - + KP_7 KP_7 - + KP_8 KP_8 - + KP_9 KP_9 - + KP_0 KP_0 - + SCLK SCLK - + Pause Пауза - + Super_R - + Mute - + VolDn - + VolUp - + Play - + Stop - + Prev - + Next Next - + [NO KEY] [ПУСТО] @@ -5679,54 +5708,54 @@ Please check that you have permission to write to the device UnixWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: - - - + + + TextLabel - + Title: - + Path: - + Match By Properties - + Class - + Title - + Path @@ -5734,9 +5763,9 @@ Please check that you have permission to write to the device VDPad - - - + + + VDPad Виртуальная Крестовина @@ -5744,223 +5773,223 @@ Please check that you have permission to write to the device VirtualKeyPushButton - + Space Пробел - + Tab Tab - + Shift (L) Shift (Л) - + Shift (R) Shift (П) - + Ctrl (L) Ctrl (Л) - + Ctrl (R) Ctrl (П) - + Alt (L) Alt (Л) - - + + Alt (R) Alt (П) - + Alt Gr - + ` ` - + ~ ~ - - + + - - - + = = - + [ [ - + ] ] - + \ \ - + Caps Caps - + ; ; - + ' ' - + , , - - + + . . - - + + / / - + ESC ESC - + PRTSC PRTSC - + SCLK SCLK - + INS INS - + PGUP PGUP - + DEL DEL - + PGDN PGDN - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - + NUM LK NUM - - + + * * - + + + - + Enter @@ -5977,42 +6006,42 @@ E R - + < < - + : : - + Super (L) Super - + Menu Меню - + Up Вверх - + Down Вниз - + Left Влево - + Right Вправо @@ -6020,226 +6049,226 @@ R VirtualKeyboardMouseWidget - - + + Keyboard Клавиатура - - + + Mouse Мышь - + Mouse Settings Наcтройка Мыши - + Left Mouse Left - + Up Mouse Up - + Left Button Mouse Left Button - + Middle Button Mouse Middle Button - + Right Button Mouse Right Button - + Wheel Up Mouse Wheel Up - + Wheel Left Mouse Wheel Left - + Wheel Right Mouse Wheel Right - + Wheel Down Mouse Wheel Down - + Down Mouse Down - + Right Mouse Right - + Button 4 Mouse Button 4 - + Mouse 8 Mouse Mouse 8 - + Button 5 Mouse Button 5 - + Mouse 9 Mouse Mouse 9 - + NONE ПУСТО - - + + Last button - - + + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + Others - + Applications - + Browser Back - + Browser Favorites - + Browser Forward - + Browser Home - + Browser Refresh - + Browser Search - + Browser Stop - + Calc - + Email - + Media - + Media Next - + Media Play - + Media Previous - + Media Stop - + Search - + Volume Down - + Volume Mute - + Volume Up @@ -6247,7 +6276,7 @@ R VirtualMousePushButton - + INVALID ОШИБКА @@ -6255,28 +6284,28 @@ R WinAppProfileTimerDialog - - + + Capture Application Звхватить Приложение - + After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. После нажатия на кнопку "Захватить Приложение" кликните по приложению с которым хотите ассоциировать данный профиль. Активное приложение будет захвачено после выбранного количества секунд. - + Timer: Таймер: - + Seconds Секунды - + Cancel Отмена @@ -6284,12 +6313,12 @@ R WinExtras - + [NO KEY] [ПУСТО] - + AntiMicro Profile @@ -6297,67 +6326,62 @@ R X11Extras - + ESC ESC - + Tab Tab - + Space Пробел - + DEL DEL - + Return Return - + KP_Enter KP_Enter - + Backspace Backspace - + Alt Gr - + xinput extension was not found. No mouse acceleration changes will occur. - + xinput version must be at least 2.0. No mouse acceleration changes will occur. - - Virtual pointer found with id=%1. - - - - + PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 - + Changing mouse acceleration for device with id=%1 @@ -6365,7 +6389,7 @@ R XMLConfigReader - + Could not write updated profile XML to file %1. @@ -6373,7 +6397,7 @@ R XMLConfigWriter - + Could not write to profile at %1. @@ -6381,7 +6405,7 @@ R antimicro - + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. @@ -6389,97 +6413,97 @@ R main - + Launch program in system tray only. Запускать программу только в системном трее. - + Launch program with the tray menu disabled - + Launch program without the main window displayed - + Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers - + location - + Apply configuration file to a specific controller. Value can be a controller index, name, or GUID - + value - + Unload currently enabled profile(s) - + value(s) - + Start joysticks on a specific set. Value can be a controller index, name, or GUID - + number value - + Launch program as a daemon. Use only on Linux. - + Enable logging - + log-type - + Choose a file for logs writing - + filename - + Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. - + event-generation-type - + Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. diff --git a/share/antimicro/translations/antimicro_sr.ts b/share/antimicro/translations/antimicro_sr.ts old mode 100644 new mode 100755 index 29b0e7915..d8f794b67 --- a/share/antimicro/translations/antimicro_sr.ts +++ b/share/antimicro/translations/antimicro_sr.ts @@ -4,17 +4,17 @@ AboutDialog - + About О програму - + Version Издање - + "juliagoda" (since March, 2018) Wanting only to play my favourite old games that din't support gamepads, I found this project (which map keyboard keys and mouse buttons to connected gamepads on Linux) as most proper and recent. But because of poor choices of such application on the internet and since it didn't compile properly, I decided to rescue the project. However, once I finished my work (enough to enjoy playing games) I thought about sharing this code with others. Of course all informations about past programmers will be held. "Ryochan7" (since December 30, 2012 until 2017), I have been working on antimicro in my spare time. What originally started as a fork of QJoyPad and a way to learn proper event-driven programming has turned into something much bigger than I originally intended. Although I have spent a lot of time learning new techniques, finding out more about the domain of KB+M emulation, and spending Friday nights bashing my head against my keyboard, it has been a fun and enriching experience overall. @@ -32,17 +32,17 @@ As of May 24, 2016, this project has moved to https://github.com/AntiMicro/antim - + Copyright: 2013 - 2018 Ауторска права: 2013 - 2018. {2013 ?} {2013 ?} - + Info Подаци - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -86,7 +86,7 @@ p, li { white-space: pre-wrap; } - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -204,7 +204,7 @@ p, li { white-space: pre-wrap; } - + Changelog Дневник измена @@ -229,52 +229,52 @@ Once the Steam controller is finally released to the public, the need for this p Овај се програм, највероватније, неће даље развијати, када се званично појави програм Стим-контролер. Управо заснован на идеји самог контролера, Стим-контролер ће имати толико предности у односу на друге програме који обезбеђују симулацију тастатуре и миша. - + Credits Заслуге - + antimicro Анти-микро - + About Development О развоју програма - + License Лиценца - + Program Version %1 Издање програма %1 - + Program Compiled on %1 at %2 Програмски код је превођен дана %1 у %2 - + Built Against SDL %1 Изграђен помоћу СДЛ %1 - + Running With SDL %1 Употребљава СДЛ %1 - + Using Qt %1 Уз КјуТ-библиотеке %1 - + Using Event Handler: %1 Употребљава руковаоца догађајима („Event Handler“) : %1 @@ -282,29 +282,29 @@ Once the Steam controller is finally released to the public, the need for this p AddEditAutoProfileDialog - + Auto Profile Dialog Самостално профилисање - + Profile: Профил: - - + + Browse Разгледај - + Window: Прозор: - - + + Select Window. Click on the appropriate application window and the application file path will be populated in the form. @@ -313,38 +313,47 @@ in the form. програма. - + Detect Window Properties Сам откриј особине прозора - + Class: Класа: - + Title: Наслов: - + + set partial title + + + + Application: Програм: - + Select Одабери - + + De&vices: + + + Devices: - Уређаји: + Уређаји: - - + + Select this profile to be the default loaded for the specified device. The selection will be used instead of the all default profile option. @@ -353,84 +362,84 @@ of the all default profile option. уместо свеопштих опција профила. - + Set as Default for Controller Постави као подразумевано за контролер - - + + A different profile is already selected as the default for this device. За овај уређај је већ одабран други подразумевани профил. - + Current (%1) Текући (%1) - + Open Config Отвори подешавања - - + + Select Program Одабери програм - + Programs (*.exe) Програми (*.exe) - + Please use the main default profile selection. Користите главни избор подразумеваног профила. - + Please select a window by using the mouse. Press Escape if you want to cancel. Одабирајте прозор употребом миша, а поништите одабир тастером <Esc>. - + Capture Application Window Разоткривање графичког сучеља програма - + Could not obtain information for the selected window. Не могу да добавим податке о одабраном прозору. - + Application Capture Failed Није успело разоткривање програма - + Profile file path is invalid. Путања до датотеке профила није ваљана. - + No window matching property was specified. Није била одређена одговарајућа особина прозора. - + Program path is invalid or not executable. Путања до програма није ваљана или није извршна. - + File is not an .exe file. Ово није извршна датотека. - + No window matching property was selected. Није била одабрана одговарајућа особина прозора. @@ -438,187 +447,187 @@ of the all default profile option. AdvanceButtonDialog - - + + Advanced Напредно - + Assignments Придруживања - + Toggle Преклопник - + Turbo Набуџи - + Set Selector Изборник скупа - + Blank or KB/M Празно или „Таст./Миш“ - + Hold Држи - + Pause Пауза - + Cycle Врти - + Distance Раздаљина - + Insert Уметни - + Delete Уклони - + Clear All Уклони све - + Time: Време: - + 0.01s 0,01 сек - + 0s 0 сек - + Insert a pause that occurs in between key presses. Време између притиска два притиска дугмета. - + Release Пусти - - + + Insert a new blank slot. Унеси нов, празан слот. - + Delete a slot. Уклони слот. - + Clear all currently assigned slots. Уклони све већ придружене слотове. - + Specify the duration of an inserted Pause or Hold slot. Одређивање трајања за већ унет Пауза/Држи слот. - + 0m 0 мин - + &Mouse Speed Mod: - - + + Specify the range past an axis dead zone in which a sequence of actions will execute. Поставите област изван мртве области правца, у којој ће се извршити низ радњи. - + Distance: Раздаљина: - - + + % % - + Mouse Mod Мишар - + Press Time Трајање притиска - + Delay Кашњење - + Execute Изврши - + Load Учитај - + Set Change Измени скуп - + Text Entry Унос текста - + Placeholder Препознавач положаја - - + + 0 0 @@ -627,317 +636,317 @@ of the all default profile option. Брзина Мишара: - + Set the percentage that mouse speeds will be modified by. Поставите промену брзине померања миша у процентима. - + Auto Reset Cycle After Самопоништавање „вртње“ након - + seconds секунди - + Executable: - + ... ... - + Arguments: - - - + + + Enabled Омогућено - + Mode: Режим: - + <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> <html><head/><body><p>Обично: Узастопно притискање-пуштање дугмета одабраном брзином.</p><p>Постепено: Измена кашњења код притиска-пуштања дугмета засновано на померају осног растојањ. Брзина остаје неизмењена.</p><p>Импулсно: Измена броја притисака-пуштања дугмета по секунди. Кашњење остаје неизмењено.</p></body></html> - + Normal Обично - + Gradient Постепено - + Pulse Импулсно - + Delay: Кашњење: - + 0.10s 0,10 сек - + Rate: Брзина: - + 10.0/s 10,0/сек - - + + Disabled Онемогућено - + Select Set 1 One Way Изабери 1. скуп, једносмерно - + Select Set 1 Two Way Изабери 1. скуп, двосмерно - + Select Set 1 While Held Изабери 1. скуп, док држим - + Select Set 2 One Way Изабери 2. скуп, једносмерно - + Select Set 2 Two Way Изабери 2. скуп, двосмерно - + Select Set 2 While Held Изабери 2. скуп, док држим - + Select Set 3 One Way Изабери 3. скуп, једносмерно - + Select Set 3 Two Way Изабери 3. скуп, двосмерно - + Select Set 3 While Held Изабери 3. скуп, док држим - + Select Set 4 One Way Изабери 4. скуп, једносмерно - + Select Set 4 Two Way Изабери 4. скуп, двосмерно - + Select Set 4 While Held Изабери 4. скуп, док држим - + Select Set 5 One Way Изабери 5. скуп, једносмерно - + Select Set 5 Two Way Изабери 5. скуп, двосмерно - + Select Set 5 While Held Изабери 5. скуп, док држим - + Select Set 6 One Way Изабери 6. скуп, једносмерно - + Select Set 6 Two Way Изабери 6. скуп, двосмерно - + Select Set 6 While Held Изабери 6. скуп, док држим - + Select Set 7 One Way Изабери 7. скуп, једносмерно - + Select Set 7 Two Way Изабери 7. скуп, двосмерно - + Select Set 7 While Held Изабери 7. скуп, док држим - + Select Set 8 One Way Изабери 8. скуп, једносмерно - + Select Set 8 Two Way Изабери 8. скуп, двосмерно - + Select Set 8 While Held Изабери 8. скуп, док држим - + sec. сек. - + /sec. /сек. - + Set %1 Скуп %1 - - + + Select Set %1 Одабери %1. скуп - + One Way Једносмерно - + Two Way Двосмерно - + While Held Док држим - + Choose Executable Избор извршне датотеке - + Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. Слотови изван „вртње“ ће се извршити по наредном притиску тастера. Вишеструке „вртње“ се могу додавати код стварање делова једног низа. - + Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. Покретање наредног слота биће одложено за наведено време.Слотови покренути пре овог одлагања ће остати покренути и по његовом истеку. - + Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. Овом се радњом одређује да накнадни слотови могу да се изврше само када се нека оса помери за одређени опсег изван дате мртве области. - + Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. Уметање задржавања. Слотови након дате радње ће да се изврше само ако се тастер задржи ван наведеног периода. - + Chose a profile to load when this slot is activated. Одабир профила који ће се учитати по укључењу овог слота. - + Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. Радња за управљањем начином рада миша ће изменити све поставке брзине миша за одређен проценат,а док је радња у току. Ово може бити корисно за успоравање миша при нишањењу. - + Specify the time that keys past this slot should be held down. Одређује колико ће дуго бити задржани у доњем положају (притиснути) тастери ван овог слота. - + Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. Уметање отпуштања. Слотови након дате радње ће да се изврше само по отпуштању тастера ако је он задржан ван наведеног периода. - + Change to selected set once slot is activated. Промени на одабрани скуп по отпочињању слота. - + Full string will be typed when a slot is activated. Уписује пуну ниску знакова по отпочињању слота. - + Execute program when slot is activated. Извршава програм по отпочињању слота. - - + + Choose Profile Одабир профила - + Config Files (*.amgp *.xml) Датотеке подешавања (*.amgp *.xml) @@ -945,159 +954,159 @@ of the all default profile option. AdvanceStickAssignmentDialog - + Stick/Pad Assignment Придружвање Управљача/Тастера - + Sticks Управљачи - + DPads Тастери правца или смера (дирекционални) Д-тастери - - + + %1 (Joystick %2) %1 (Џојстик %2) - + Stick 1 Управљач 1 - - - + + + Enabled Омогућен - - - - - - + + + + + + Assign Придружи - - + + X Axis: »X« правац: - - + + Y Axis: »Y« правац: - + Stick 2 Управљач 2 - + Number of Physical DPads: %1 Број стварних Д-тастера: %1 - + Virtual DPad 1 Патворено = Виртуелно Патворен Д-тастатер 1 - + Up: Горе: - + Down: Доле: - + Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. Обавештење: Ово прозорче још увек постоји само због усаглашености са ранијим издањима програма (пре издања 2.0). Придруживач тастера контролера се препоручује од издања 2.0. - + Left: Лево: - + Right: Десно: - - - - + + + + Axis %1 Правац %1 - - - - + + + + Axis %1 - Правац %1 - - - - - + + + + Axis %1 + Правац %1 + - - - - + + + + Button %1 Дугме %1 - + Move stick 1 along the X axis Померајте по »Х-оси« 1. управљач - + Move stick 1 along the Y axis Померајте по »У-оси« 1. управљач - + Move stick 2 along the X axis Померајте по »Х-оси« 2. управљач - + Move stick 2 along the Y axis Померајте по »У-оси« 2. управљач - - - - + + + + Press a button or move an axis Притисните тастер или померите управљач @@ -1105,181 +1114,181 @@ of the all default profile option. AxisEditDialog - + Axis Правац - - + + Mouse (Horizontal) Миш (водоравно) - - + + Mouse (Inverted Horizontal) Миш (обрнуто водоравно) - - + + Mouse (Vertical) Миш (усправно) - - + + Mouse (Inverted Vertical) Миш (обрнуто усправно) - - + + Arrows: Up | Down Стрелице: Горе | Доле - - + + Arrows: Left | Right Стрелице: Лево | Десно - - + + Keys: W | S Тастери: Њ | С - - + + Keys: A | D Тастери: А | Д - - + + NumPad: KP_8 | KP_2 Број.Тастатура: КП_8 | КП_2 - - + + NumPad: KP_4 | KP_6 Број.Тастатура: КП_4 | КП_6 - - - + + + None Ништа - - + + Set the value to use as the limit for an axis. Useful for a worn out analog stick. Постави ову вредност као граничну за правац. Употребљиво у раду са истрошеним аналогним управљачем. - + Negative Half Throttle Полу-регулатор умањења - + Positive Half Throttle Полу-регулатор увећавања - + Name: Назив: - + Specify the name of an axis. Одредите Назив осе(правца). - + Mouse Settings Поставке миша - - + + Set the value of the dead zone for an axis. Подеси вредност мртве области за правaц. - + Presets: Поставке: - + Dead Zone: Мртва област: - + Max Zone: Највиша област: - - + + [NO KEY] [Без тастера] - + Throttle setting that determines the behavior of how to interpret an axis hold or release. Поставке регулатора које одређују понашање при тумачењу држи („hold“) или пусти („release“) за правац. - + Negative Throttle Регулатор умањења - + Normal Нормално - + Positive Throttle Регулатор увећавања - + Current Value: Текућа вредност: - + Set Постави - + Set %1 Скуп %1 - + Left Mouse Button Леви тастер миша - + Right Mouse Button Десни тастер миша @@ -1287,40 +1296,40 @@ interpret an axis hold or release. ButtonEditDialog - + Dialog Прозорче - + To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab Да би сте створили ново придруживање, притисните неко од дугмади тастатуре или кликните мишем на неко дугме у неком од језичака „Тастатура“ или „Миш“ - + Placeholder Препознавач положаја - + Toggle Преклопник - + Enables a key press or release to only occur when a controller button is pressed. Омогућава да се догоди дугме „притисни“ или „пусти“, и то, само ако је дугме контролера притиснуто. - + Enables rapid key presses and releases. Turbo controller. Омогућава хитрије дугме „притисни“ или дугме „пусти“. Контролер набуџивања. - + Turbo Набуџи @@ -1329,39 +1338,39 @@ interpret an axis hold or release. Тренутно стање: - + Last keyboard/mouse button: - + Slots Слотови - + Na&me: Назив: - + Specify the name of a button. Унесите назив за дугме. - + Action: Радња: - + Specify the action that will be performed in game while this button is being used. Одредите радњу која ће се извршавати при употреби овог дугмета. - + Advanced Напредно @@ -1374,52 +1383,52 @@ this button is being used. Скуп %1 - - - + + + Choose your keyboard key - + No button - - - - + + + + Last button - + To change settings for last button, it must be at least one assignment from keyboard to gamepad - + To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad - + To open advanced dialog, it's needed to map at least one button from keyboard to gamepad - + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + As last gamepad button has been set - + Index %1 @@ -1427,190 +1436,190 @@ this button is being used. Calibration - + Form - - + + Start calibration - + Controller: - + Sticks: - - Use settings from jstest-gtk - - - - + Reset settings - + Cancel Поништи - - + + Save Сачувај - - + + Calibration - - Do you really want to reset settings of current axes? + + Do you really want to reset settings of current axis? - + Calibration was saved for the preset. Do you really want to reset settings? - + Place the joystick in the center position. It's the part, where often you don't have to move. Just skip it in such situation. - + Calibrating center - + Start second step - + Center X: %1 - + Center Y: %1 - + Place the joystick in the top-left corner many times - - + + Calibrating position - - + + X: %1 - - + + Y: %1 - + Place the joystick in the bottom-right corner - + Start final step - + range X: %1 - %2 - + range Y: %1 - %2 - + deadzone X: %1 - + deadzone Y: %1 - + ---Calibration done!--- - + Calibration values have been saved - - + + Dead zone calibration - - You must move X axis to the right at least five times! Keep moving! + + You have to move axes to the top-left corner at least five times. - - You must move X axis to the left at least five times! Keep moving! + + You have to move axes to the bottom-right corner at least five times. - - - - + + Do you want to save calibration of current axis? + + + + + + + Axis %1 Правац %1 @@ -1618,64 +1627,64 @@ deadzone Y: %1 CapturedWindowInfoDialog - + Captured Window Properties Особине откривеног прозора - + Information About Window Подаци о прозору - + Class: Класа: - - - + + + TextLabel Текст-натпис - + Title: Наслов: - + Path: Путања: - + Match By Properties Прилагоди по - + Class класи - + Title наслову - + Path путањи - + Full Path Пуна путања - + File Name Назив датотеке @@ -1826,67 +1835,67 @@ deadzone Y: %1 DPadContextMenu - + Mouse (Normal) Миш (обично) - + Mouse (Inverted Horizontal) Миш (обрнуто водоравно) - + Mouse (Inverted Vertical) Миш (обрнуто усправно) - + Mouse (Inverted Horizontal + Vertical) Миш (обрнуто водоравно и усправно) - + Arrows Стрелице - + Keys: W | A | S | D Тастери: Њ | А | С | Д - + NumPad Број.тастатура - + None Ништа - + Standard Уобичајено - + Eight Way Осмосмерно - + 4 Way Cardinal Уобичајено четворосмерно - + 4 Way Diagonal Четворосмерно-дијагонално - + Mouse Settings Поставке миша @@ -1894,108 +1903,108 @@ deadzone Y: %1 DPadEditDialog - + Dialog Прозорче - + Presets: Поставке: - + Mouse (Normal) Миш (нормално) - + Mouse (Inverted Horizontal) Миш (обрнуто водоравно) - + Mouse (Inverted Vertical) Миш (обрнуто усправно) - + Mouse (Inverted Horizontal + Vertical) Миш (обрнуто водоравно и усправно) - + Arrows Стрелице - + Keys: W | A | S | D Тастери: Њ | А | С | Д - + NumPad Бројчана тастатура - + None Ништа - + Dpad Mode: Употреба Д-тастера: - + &Name: - + 4 Way Cardinal Уобичајено четворосмерно - + 4 Way Diagonal Четворосмерно-дијагонално - + DPad Delay: Д-тастери — кашњење: - - + + Time lapsed before a direction change is taken into effect. Кашњење пре но промена смера приметно наступи. - + s с - + Specify the name of a dpad. Унесите назив за Д-тастер. - + Mouse Settings Поставке миша - + Standard Уобичајено - + Standard: 8 region dpad with two direction buttons active when the dpad is in a diagonal region. @@ -2011,17 +2020,17 @@ to a diagonal zone. - + Eight Way Осмосмерно - + Set Подеси - + Set %1 Скуп %1 @@ -2029,27 +2038,27 @@ to a diagonal zone. EditAllDefaultAutoProfileDialog - + Default Profile Подразумеван профил - + Profile: Профил: - + Browse Разгледај - + Open Config Отвори подешавања - + Profile file path is invalid. Путања до датотеке профила није ваљана. @@ -2057,29 +2066,29 @@ to a diagonal zone. ExtraProfileSettingsDialog - + Extra Profile Settings Додатна подешавања профила - + Key Press Time: Време притиска тастера: - + 0.00 ms 0.00 мс - + Profile Name: Назив профила: - - - + + + s сек. @@ -2087,7 +2096,7 @@ to a diagonal zone. GameController - + Game Controller Контролер програма @@ -2095,9 +2104,9 @@ to a diagonal zone. GameControllerDPad - - - + + + DPad Д-тастер @@ -2105,187 +2114,187 @@ to a diagonal zone. GameControllerMappingDialog - + Game Controller Mapping Придруживач тастера контролера - + <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> <html><head/><body><p>Да би се у већини програма различити контролери (гејмпедови) употребљавали на јединствен начин програм Анти-микро употребљава програмско сучеље дефинисано у пројекту СДЛ издања2, а названо „Гејм-контролер АПИ“ (енг. <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">„Game Controller API“</span></a>). За придруживање тастера одаберите поље за придруживање у реду одговарајућег тастера, а након тога притисните неки тастер на гејмпеду или померите ручицу управљача правца на њему. У пољу за придруживање ће се појавити подаци стварног (физичког) тастера или ручице управљача који ће се употребљавати.</p><p>Анти-микро ће да употреби ова придруживања за чување знаковних ниски придруживања које се могу учитавати помоћу СДЛ програма.</p></body></html> - + A 3 - + B 2 - + X 4 - + Y 1 - + Back Назад - + Start Почни - + Guide Водич - + Left Shoulder Леви окидач 1 - + Right Shoulder Десни окидач 1 - + Left Stick Click Притисак на леви управљач - + Right Stick Click Притисак на десни управљач - + Left Stick X Леви управљач — водоравно - + Left Stick Y Леви управљач — усправно - + Right Stick X Десни управљач — водоравно - + Right Stick Y Десни управљач — усправно - + Left Trigger Леви окидач 2 - + Right Trigger Десни окидач 2 - + DPad Up Д-тастер — Горе - + DPad Left Д-тастер — Лево - + DPad Down Д-тастер — Доле - + DPad Right Д-тастер — Десно - + Mapping Придруживања - + SDL 2 Game Controller Mapping String СДЛ-2 ниска придруживања тастера контролера - + Last Axis Event: Задњи догађај на правцу: - + Current Axis Detection Dead Zone: Откривање мртве области текућег правца: - + 5000 5000 - + 10000 10000 - + 15000 15000 - + 20000 20000 - + 25000 25000 - + 30000 30000 - + 32000 32000 - + Game Controller Mapping (%1) (#%2) Придруживач тастера контролера (%1) (#%2) - + Discard Controller Mapping? Поништавање придруживања контролера? - + Discard mapping for this controller? If discarded, the controller will be reverted to a joystick once you refresh all joysticks. @@ -2297,47 +2306,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerSet - + Back Назад - + Guide Водич - + Start Почни - + LS Click Притисак 1. левог окидача - + RS Click Притисак 1. десног окидача - + L Shoulder 1. леви окидач - + R Shoulder 1. десни окидач - + L Trigger 2. леви окидач - + R Trigger 2. десни окидач @@ -2345,9 +2354,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerTrigger - - - + + + Trigger Окидач @@ -2355,9 +2364,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxis - - - + + + Axis Правац @@ -2365,24 +2374,24 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisButton - + Negative Умањи - + Positive Увећај - + Unknown Непознато - - - + + + Button Дугме @@ -2390,74 +2399,74 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisContextMenu - + Mouse (Horizontal) Миш (водоравно) - + Mouse (Inverted Horizontal) Миш (обрнуто водоравно) - + Mouse (Vertical) Миш (усправно) - + Mouse (Inverted Vertical) Миш (обрнуто усправно) - + Arrows: Up | Down Стрелице: Горе | Доле - + Arrows: Left | Right Стрелице: Лево | Десно - + Keys: W | S Тастери: Њ | С - + Keys: A | D Тастери: А | Д - + NumPad: KP_8 | KP_2 Број.Тастатура: КП_8 | КП_2 - + NumPad: KP_4 | KP_6 Број.Тастатура: КП_4 | КП_6 - - + + None Ништа - - + + Mouse Settings Поставке миша - + Left Mouse Button Леви тастер миша - + Right Mouse Button Десни тастер миша @@ -2465,57 +2474,57 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButton - + Processing turbo for #%1 - %2 Буџим за #%1 - %2 - + Finishing turbo for button #%1 - %2 Завршено набуџивање тастера #%1 - %2 - + Processing press for button #%1 - %2 Притискам за тастер #%1 - %2 - + Processing release for button #%1 - %2 Отпуштам за тастер #%1 - %2 - + Distance change for button #%1 - %2 Промена раздаљине за тастер #%1 - %2 - - - + + + Button Тастер - - - - + + + + [NO KEY] [Без тастера] - + [Set %1 1W] [Скуп %1 1-смерно] - + [Set %1 2W] [Скуп %1 2-смерно] - + [Set %1 WH] [Скуп %1 WH] @@ -2523,47 +2532,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonContextMenu - + Toggle Преклопи - + Turbo Набуџи - + Clear Очисти - + Set Select Одабир скупа - + Disabled Онемогућено - + Set %1 Скуп %1 - + Set %1 1W Скуп %1 1-смерно - + Set %1 2W Скуп %1 2-смерно - + Set %1 WH Скуп %1 WH @@ -2571,118 +2580,118 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonSlot - - + + Mouse Миш - + Up Напред - + Down Назад - + Left Лево - + Right Десно - + LB Л.дугме - + MB С.дугме - + RB Д.дугме - + B4 Дугме 4 - + B5 Дугме 5 - + Pause Пауза - + Hold Држи - + Cycle Врти - + Distance Раздаљина - + Release Пусти - + Mouse Mod Мишар - + Press Time Трајање притиска - + Delay Кашњење - + Load %1 Учитај %1 - + Set Change %1 Измена скупа %1 - + [Text] %1 [Текст] %1 - + [Exec] %1 [Извршавам] %1 - + [NO KEY] [Без тастера] @@ -2690,9 +2699,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStick - - - + + + Stick Управљач @@ -2700,37 +2709,37 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickButton - - - + + + Up Напред - - - + + + Down Назад - - - + + + Left Лево - - - + + + Right Десно - - - + + + Button Дугме @@ -2738,67 +2747,67 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickContextMenu - + Mouse (Normal) Миш (обично) - + Mouse (Inverted Horizontal) Миш (обрнуто водоравно) - + Mouse (Inverted Vertical) Миш (обрнуто усправно) - + Mouse (Inverted Horizontal + Vertical) Миш (обрнуто водоравно и усправно) - + Arrows Стрелице - + Keys: W | A | S | D Тастери: Њ | А | С | Д - + NumPad Број.тастатура - + None Ништа - + Standard Уобичајено - + Eight Way Осмосмерно - + 4 Way Cardinal Уобичајено четворосмерно - + 4 Way Diagonal Четворосмерно-дијагонално - + Mouse Settings Поставке миша @@ -2806,86 +2815,86 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickEditDialog - + Dialog Прозорче - + X: X: - - - - - + + + + + 0 0 - + Y: Y: - + Distance: Раздаљина: - + Presets: Поставке: - + Mouse (Normal) Миш (обично) - + Mouse (Inverted Horizontal) Миш (обрнуто водоравно) - + Mouse (Inverted Vertical) Миш (обрнуто усправно) - + Mouse (Inverted Horizontal + Vertical) Миш (обрнуто водоравно и усправно) - + Arrows Стрелице - + Keys: W | A | S | D Тастери: Њ | А | С | Д - + NumPad Бројчана тастатура - + None Ништа - + Stick Mode: Начин рада управљача: - + Standard: 8 region stick with two direction buttons active when the stick is in a diagonal region. @@ -2912,72 +2921,72 @@ to a diagonal zone of the stick. област одговара дијагоналној области датог управљача. - + 4 Way Cardinal Уобичајено четворосмерно - + 4 Way Diagonal Четворосмерно-дијагонално - - + + Dead zone value to use for an analog stick. Вредност мртве области код аналогних управљача. - - + + Value when an analog stick is considered moved 100%. Вредност у којој је аналогни управљач у крајњем положају. - - + + The area (in degrees) that each diagonal region occupies. Област (у степенима) коју свака област на дијагонали заузима. - + Square Stick: Четвртаст управљач: - - + + Percentage to modify a square stick coordinates to confine values to a circle Постотак промене квадратних координата управљача за ограничавање вредности у кружници - + % % - + Stick Delay: Кашњење управљача: - - + + Time lapsed before a direction change is taken into effect. Кашњење пре но промена смера приметно наступи. - + s с - + Modifier: Измењивач: - + Edit button that is active while the stick is active. This button is useful for assigning zones with @@ -2990,68 +2999,68 @@ functionality to an analog stick. ходај-трчи аналогним управљачима. - + PushButton Дугме - + Na&me: Name: Назив: - + Specify the name of an analog stick. Унесите назив за аналогни управљач. - + Mouse Settings Поставке миша - + Standard Уобичајено - + Bearing: Азимут: - + % Safe Zone: % Безбедна област: - + Eight Way Осмосмерно - + Dead Zone: Мртва област: - + Max Zone: Највиша област: - + Diagonal Range: Дијагонални опсег: - + Set Постави - + Set %1 Скуп %1 @@ -3059,9 +3068,9 @@ functionality to an analog stick. JoyControlStickModifierButton - - - + + + Modifier Измењивач @@ -3069,9 +3078,9 @@ functionality to an analog stick. JoyDPad - - - + + + DPad Д-тастер @@ -3079,37 +3088,37 @@ functionality to an analog stick. JoyDPadButton - - - + + + Up Горе - - - + + + Down Доле - - - + + + Left Лево - - - + + + Right Десно - - - + + + Button Дугме @@ -3117,267 +3126,272 @@ functionality to an analog stick. JoyTabWidget - - - - - - + + + + + + <New> <Ново> - - + + Remove Уклони - - + + Remove configuration from recent list. Уклони подешавање са текуће листе. - - + + Load Учитај - - + + Load configuration file. Учитај датотеку са подешавањима. - - + + Save Сачувај - - + + Save changes to configuration file. Сачувај измене у датотеку подешавања. - - + + Save As Сачувај као - - + + Save changes to a new configuration file. Сачувај измене у новој датотеци подешавања. - - + + Sets Скупови - + Copy from Set Умножи из ... - + Settings Постави називе - - + + Set 1 1. скупа - - + + Set 2 2. скупа - - + + Set 3 3. скупа - - + + Set 4 4. скупа - - + + Set 5 5. скупа - - + + Set 6 6. скупа - - + + Set 7 7. скупа - - + + Set 8 8. скупа - - + + Stick/Pad Assign Придружи Управљач/Тастатуру - - + + Controller Mapping Придруживач тастера контролера - - + + Quick Set Брзе поставке - - + + Names Називи - - + + Toggle button name displaying. Приказивање назива преклопника. - - + + Pref Опште поставке - - + + Change global profile settings. Измените опште поставке профила. - - - + + + Reset Поништи - - + + Revert changes to the configuration. Reload configuration file. Поништи измене и учитај опет датотеку са подешавањем. - + Open Config Отвори подешавања - + Config Files (*.amgp *.xml) Датотеке подешавања (*.amgp *.xml) - - - + + + Config File (*.%1.amgp) Датотека подешавања (*.%1.amgp) - - + + Do you really want to reset buttons settings for joystick? + + + + + Save Profile Changes? Да ли да сачувам измене профила? - - + + Changes to the new profile have not been saved. Would you like to save or discard the current profile? Имате несачуваних промена новог профила. Да ли желите да их сачувам или да их поништим? - - + + Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? Имате несачуваних промена у профилу "%1" . Да ли желите да их сачувам или да их поништим? - + Sticks Управљачи - - + + DPads Д-тастери - + No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. Нема придруживања за дугмад. Можете да употребите „Брзе поставке“ за придруживања дугмадима или да искључите скривање „празних“ дугмади. - - + + Set %1: %2 Скуп %1: %2 - - + + Set %1 Скуп %1 - + Copy Set Assignments Умножи придруживања из скупа - + Are you sure you want to copy the assignments and device properties from %1? Да ли заиста желите да умножите придруживања и особине уређаја из %1? - - - + + + Save Config Сачувај подешавања - - + + Set Постави @@ -3385,7 +3399,7 @@ to buttons or disable hiding empty buttons. Joystick - + Joystick Џојстик @@ -3393,98 +3407,98 @@ to buttons or disable hiding empty buttons. JoystickStatusWindow - + Properties Особине - + Details Детаљи - + Name: Назив: - - - - - - - + + + + + + + %1 %1 - + Number: Број: - + Axes: Праваца: - + Buttons: Дугмад: - + Hats: Капице: - + GUID: ЈИБГ: - + Game Controller: Контролер за игре: - + Axes Правци - + Buttons Дугмад - + Hats Капице - + %1 (#%2) Properties %1 (#%2) Особине - + Axis %1 Правац %1 - + Hat %1 Хат %1 - + No Не - + Yes Да @@ -3492,62 +3506,67 @@ to buttons or disable hiding empty buttons. MainSettingsDialog - + Edit Settings Уређивање поставки - + General Опште поставке - + Controller Mappings Придруживања контролера - + Language Језик - + Auto Profile Ауто-профил - + Mouse Миш - + Advanced Напредно - + + Profile Direc&tory: + + + + <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> <html><head/><body><p>Постављање уобичајеног директоријума за учитавање постојећих или чување нових профила.</p></body></html> - + Recent Profile Count: Број скорашњих профила: - + <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> <html><head/><body><p>Број профила који се може сместити у листу недавно употребљаваних профила. Број 0 означава приказ свих употребљаваних профила.</p></body></html> - + Gamepad Poll Rate: Провера порука џојстика након: - + Change the poll rate that the program uses to discover new events from gamepads. Defaults to 10 ms. @@ -3561,29 +3580,29 @@ before using antimicro unattended. ЦПЈ (процесора), Проверите ову поставку пре озбиљније употребе. - + Hide main window when the main window close button is clicked instead of quitting the program. Притиском на дугме затварања главног прозора, он се затвара али програм остаје покренут у обавештајној зони. - + Close To Tray Смести у обавештајну зону - + Have Windows start antimicro at system startup. Покрени програм са покретањем система. - + Launch At Windows Startup Покрени по покретању система - + Display recent profiles for all controllers as a single list in the tray menu. Defaults to using sub-menus. @@ -3592,12 +3611,12 @@ to using sub-menus. Уобичајено је употреба под-изборника. - + Single Profile List in Tray Јединствен списак профила у обавештајној зони - + Have the program minimize to the taskbar. By default, the program minimizes to the system tray if available. @@ -3606,12 +3625,12 @@ tray if available. зони ако је она доступна. - + Minimize to Taskbar Смести у траку покренутих задатака - + This option will cause the program to hide all buttons that have no slots assigned to them. The Quick Set dialog window will have to be used @@ -3622,12 +3641,12 @@ to bring up the edit dialog for gamepad buttons. подесите придруживања тастера гејмпеда. - + Hide Empty Buttons Сакриј „празну“ дугмад - + When the program is launched, open the last known profile that was opened during the previous session. @@ -3636,159 +3655,169 @@ previous session. претходној сесији. - + Auto Load Last Opened Profile Отвори сам последњи употребљени профил - + Only show the system tray icon when the program first launches. Приказује само икону у обавештајној зони по првом покретању програма. - + Launch in Tray Покрени у обавештајној зони - + Associate .amgp files with antimicro in Windows Explorer. Придружуј „.amgp“-датотеке програму Анти-микро (виндоуз експлорер). - + Associate Profiles Придружени профили - + Key Repeat Вишеструки притисци тастера - + Active keys will be repeatedly pressed when this option is enabled. Ако је укључено омогућени су вишеструки, узастопни притисци тастера. - - + + Enable Омогућено - + Specifies how much time should elapse before key repeating begins. Кашњење пре започињања вишеструког, узастопног притискања тастера. - + Specifies how many times key presses will be performed per seconds. Одређује број притисака тастера у секунди код вишеструког, узастопног притискања тастера. - + <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> <html><head/><body><p>Сарадници аутора су локализовали програм за разне језике. Уобичајено, програм ће употребљавати језичке поставке самог система за приказ, али, уколико то желите, можете употребљавати програм и на језику који одаберете на листи испод.</p></body></html> - + Português do Brasil - + Français - + Deutsch - + Italiano - + 日本語 - + Русский - + српски / srpski - + 简体中文 - + Español - + українська - + Polski - + + History Si&ze: + + + + Log File: - + Log Level: - + None Ништа - + Error - + Warning - + Info Подаци - + Debug + + + Reset + Поништи + French француски @@ -3806,22 +3835,22 @@ per seconds. украјински - + Class класи - + Title наслову - + Program Програм - + Disable the "Enhanced Pointer Precision" Windows setting while antimicro is running. Disabling "Enhanced Pointer Precision" will allow mouse movement within antimicro to be more @@ -3832,32 +3861,27 @@ precise. програму. - + Disable Enhance Pointer Precision Искључи побољшања прецизности показивача - + Smoothing Углађеност - - Histor&y Size: - - - - + Weight &Modifier: - + Refresh Rate: Брзина освежавања: - + The refresh rate is the amount of time that will elapse in between mouse events. Please be cautious when editing this setting as it will cause the program to use @@ -3872,17 +3896,17 @@ it unattended. поставку пре озбиљније употребе. - + Spring Скоковито - + Screen: Екран: - + Utilize the specified screen for spring mode. On Linux, the default is to use the primary screen. On Windows, the default is to use all available screens. @@ -3891,29 +3915,29 @@ is to use all available screens. а на Виндоузу свих расположивих екрана. - + Accel Numerator: Бројилац убрзања: - - - + + + 0 0 - + Accel Denominator: Именилац убрзања: - + Accel Threshold: Праг убрзања: - + If the acceleration values for the virtual mouse have been changed by a different process, particularly when quitting an older game, then you might want to reset the acceleration @@ -3924,37 +3948,32 @@ values used by the virtual mouse. вредности убрзања патвореног миша на оне претходне. - + Reset Acceleration Поврати убрзање - + Delay: Кашњење: - - Profi&le Directory: - - - - + ms мс - + Rate: Брзина: - + times/s пута/сек. - + Below is a list of the custom mappings that have been saved. You can use the following table to delete mappings or have mappings temporarily disabled. You can also disable mappings that are included with SDL; just insert a new row with the appropriate joystick GUID and check disable. Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. @@ -3963,34 +3982,34 @@ Settings will not take affect until you either refresh all joysticks or unplug t Подешавања се неће узети у обзир док се не освежи листа доступних џојстика или док не искључите дати, конкретан џојстик. - + GUID ЈИБГ - + Mapping String Ниска придруживања - + Disable? Искључи? - - + + Delete Уклони - + Insert Уметни - - + + Default подразумевано @@ -3999,7 +4018,7 @@ Settings will not take affect until you either refresh all joysticks or unplug t португалски (Бразил) - + English енглески @@ -4008,49 +4027,49 @@ Settings will not take affect until you either refresh all joysticks or unplug t немачки - - + + Active Омогућен - + Devices: Уређаји: - - + + All Сви - + Device Уређај - + Profile Профил - + Default? Подразумевано? - + Add Додај - + Edit Уреди - + Also, Windows users who want to use a low value should also check the "Disable Enhance Pointer Precision" checkbox if you haven't disabled the option in Windows. @@ -4059,42 +4078,52 @@ the option in Windows. нису онемогућили ову опцију у самом систему. - + Select Default Profile Directory Одабир уобичајеног директоријум профила - + Are you sure you want to delete the profile? Да ли заиста желите да уклоните овај профил? - + Save Log File As - + Log Files (*.log) + + + Do you really want to reset setting? + + + + + Would you like to reset mappings too? + + MainWindow - + No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu Нисам пронашао џојстик. Када га прикључите покрените „Поставке > Пронађи џојстике“ из главног менија - + If events are not seen by a game, please click here to run this application as Administrator. - + &App &Датотека @@ -4103,12 +4132,12 @@ the option in Windows. Придружи Управљач/Тастатуру - + &Options П&оставке - + antimicro Анти-микро @@ -4117,100 +4146,100 @@ the option in Windows. Ако догађаје игра не „види“, притисните ово дугме за покретање овог програма као администратор. - + &Help &Помоћ - - + + &Quit &Затвори - + Ctrl+Q Ctrl+Q - - + + &Update Joysticks Про&нађи џојстике - + Ctrl+U Ctrl+U - - + + &Hide &Сакриј - + Ctrl+H Ctrl+H - + &About О прогр&аму - + Ctrl+A Ctrl+A - + About &Qt - + &Properties - + &Key Checker - + &GitHub Page - + &Game Controller Mapping - + S&ettings - + &Stick/Pad Assign - + &Wiki - + &Issues - + &Calibration @@ -4227,7 +4256,7 @@ the option in Windows. Провера тастера тастатуре - + Home Page Матична страна @@ -4248,49 +4277,49 @@ the option in Windows. Вики-стране - + Could not find a proper controller identifier. Exiting. - - - - - - - + + + + + + + (%1) (%1) - - + + Open File Отвори датотеку - + &Restore В&рати - + Calibration couldn't be opened - + You must connect at least one controller to open the window - + Run as Administrator? Покрени као администратор? - + Are you sure that you want to run this program as Adminstrator? Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. @@ -4299,17 +4328,17 @@ Some games run as Administrator which will cause events generated by antimicro t Неки програми покренути уз администраторске дозволе могу да доведу до тога да радње које захтева Анти-микро не буду ваљано препознате све док се и сам Анти-микро не покрене уз исте дозволе. Код Видоуз-Виста или новијих виндоуза ово је изазвано проблемима са дозволама које ствара опција за управљање корисничким налозима (енг. скр. „UAC“). - + Failed to elevate program Не могу да покренем програм - + Failed to restart this program as the Administrator Неуспело покретање програма са админ. дозволама - + Could not find controller. Exiting. @@ -4317,12 +4346,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseAxisSettingsDialog - + Mouse Settings - Поставке миша - - + Set %1 Скуп %1 @@ -4330,12 +4359,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseButtonSettingsDialog - + Mouse Settings - Поставке миша - - + Set %1 Скуп %1 @@ -4343,12 +4372,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseControlStickSettingsDialog - + Mouse Settings Поставке миша - + Set %1 Скуп %1 @@ -4356,12 +4385,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseDPadSettingsDialog - + Mouse Settings Поставке миша - + Set %1 Скуп %1 @@ -4369,17 +4398,17 @@ Some games run as Administrator which will cause events generated by antimicro t MouseSettingsDialog - + Mouse Settings Поставке миша - + Mouse Mode: Мишар: - + Cursor mode is used to move the mouse cursor around the screen relative to its current position depending on how much you move an axis @@ -4400,79 +4429,79 @@ axis is moved back to the dead zone. програм га враћа на средину екрана. - + Cursor Показивач - + Spring Скоковито - + Acceleration: Убрзавање: - + Enhanced Precision Побољшана прецизност - - + + Linear Линеарно - + Quadratic Квадратно - + Cubic Кубно - + Quadratic Extreme Набуџено квадратно - + Power Function Нај-функција - + Easing Quadratic Квадратно попуштање - + Easing Cubic Кубно попуштање - + Mouse Speed Settings Брзина померања - + Enable to change the horizontal and vertical speed boxes at the same time. Омогућује истовремену промену брзине у оба правца. - + Change Together Измењуј повезано - + Options for adding more acceleration to the mouse movement beyond what the acceleration curve would produce. Acceleration is added based on how quickly an axis is @@ -4482,17 +4511,17 @@ using typical gamepad analog sticks. - + Delta Acceleration - + &Multiplier: - + Mi&n Threshold: @@ -4503,8 +4532,8 @@ Speed: Лево→Десно: - - + + 1 = 20 pps 1 = 20 тачака/сек. @@ -4514,33 +4543,33 @@ Speed: Горе→Доле: - + Wheel Hori. Speed: Tочкић водоравно: - + Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. Постављање брзине водоравног померања миша према одговарајућем, симулираном броју зареза по секунди. - + Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. Постављање брзине усправног померања миша према одговарајућем, симулираном броју зареза по секунди. - + Sensitivit&y: - + For Power Function acceleration curve. Specifies the factor to use for curve sensitivity. When the value is above 1.0, the mouse movement will be accelerated @@ -4551,13 +4580,13 @@ faster at the low end of an axis. убрзавати у крајњем доњем положају осе. - + Easing Duration: Трајање попуштањa: - - + + s с @@ -4570,22 +4599,22 @@ faster at the low end of an axis. Чинилац: - + Highest value to accelerate mouse movement by Највиша вредност за убрзање померања миша - + x x - + Start %: Почетак %: - + Acceleration begins at this percentage of the base multiplier Убрзање почиње након оволико процената од основног чиниоца @@ -4596,54 +4625,54 @@ Threshold: праг: - + Minimum amount of axis travel required for acceleration to begin Најмања количина осног померања неопходна за отпочињање убрзања - + Max Threshold: Највећи праг: - + Maximum axis travel before acceleration has reached the multiplier value Највиша количина осног померања пре но се достигне вредност датог чиниоца - + E&xtra Duration: - + Curve: - + Ease Out Sine - + Ease Out Quad - + Ease Out Cubic - + Release Radius: Пречник пуштања: - + Specifies that the spring area will be relative to the mouse position set by a non-relative spring. Одређује да ће „скоковито“ подручје бити @@ -4651,39 +4680,39 @@ mouse position set by a non-relative spring. не-релативним скоком. - + Relative Релативно - + Mouse Status Стање миша - + X: X: - - + + 0 (0 pps) 0 (0 тачака/сек) - + Y: Y: - - + + 1 = 1 notch(es)/s 1 = 1 зарез(а)/сек. - + Enhanced: Three tier curve that makes the mouse move slow on the low end of an axis and fast on the high end. @@ -4724,19 +4753,19 @@ a period of time using a Cubic curve. употребљавајући кубну кривуљу. - + Hori&zontal Speed: - + &Vertical Speed: - + Wheel Vert. Speed: Tочкић @@ -4747,7 +4776,7 @@ Speed: Осетљивост: - + Specifies the amount of time (in seconds) that will be required before the mouse is fully accelerated after reaching the high end of an axis. @@ -4756,10 +4785,10 @@ after reaching the high end of an axis. након достизања горњег краја осе. - - - - + + + + % % @@ -4768,7 +4797,7 @@ after reaching the high end of an axis. Додатно трајање: - + Extend the time that extra acceleration is applied. Axis travel will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. @@ -4777,17 +4806,17 @@ actual time that extra acceleration will be applied. стварно време након кога ће се примењивати додатно убрзање. - + Spring Settings Скоковито померање - + Spring Width: По ширини: - + Changes the width of the region that the cursor can move in spring mode. 0 will use the entire width of your screen. @@ -4796,12 +4825,12 @@ of your screen. укупне ширине Вашег екрана. - + Spring Height: По висини: - + Changes the height of the region that the cursor can move in spring mode. 0 will use the entire height of your screen. @@ -4810,8 +4839,8 @@ of your screen. укупне висине Вашег екрана. - - + + %n notch(es)/s %n зарез/сек. @@ -4823,7 +4852,7 @@ of your screen. QKeyDisplayDialog - + Key Checker Провера тастера тастатуре @@ -4832,34 +4861,34 @@ of your screen. <html><head/><body><p>Притисните тастер на тастатури да бисте видели како је овај програм открио одговарајућу вредност. У прозору ће се приказати вредност руковаоца догађаја, вредност у КјуТ-библиотекама (по потреби), као и прилагођена вредност у Анти-микро програму.</p><p>Вредности које су откривене програмима Анти-микро и КјуТ ће обично бити идентичне. јер Анти-микро употребљава вредности КјуТ-библиотека када је то могуће. Погледајте страницу на мрежи <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum (енг.)</span></a> за вредности одређене за употребу КјуТ-програмима. Ако откријете неке неподржане вредности за тастере у овом програму, известите о том проблему на <a href="https://github.com/AntiMicro/antimicro"><span style=" text-decoration: underline; color:#0057ae;">Анти-микро гит-странама</span></a>, а у циљу исправљања уочених недостатака. Како год, додат је предложак за непознате вредности да би се програм могао употребљавати, али остаје главни проблем који се односи на преносивост профила.</p></body></html> - - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - + Event Handler: Руковалац догађајем: - + Native Key Value: Очитана вредност: - - - + + + 0x00000000 0x00000000 - + Qt Key Value: КјуТ вредност: - + antimicro Key Value: Анти-микро вредност: @@ -4867,260 +4896,260 @@ of your screen. QObject - + Super Супер - + Menu Изборник - + Mute Мук - + Vol+ Гласније - + Vol- Тише - + Play/Pause Пусти/Пауза - + Play Пусти - + Pause Пауза - + Prev Претходно - + Next Наредно - + Mail Е-пошта - + Home Почетно - + Media Медији - + Search Нађи - + Daemon launched Покренут је позадински процес - + Failed to launch daemon Није успело покретање позадинског процеса - + Launching daemon Покрећем позадински процес - - + + Display string "%1" is not valid. Није ваљана »Display string „%1“«. - + Failed to set a signature id for the daemon Није успело постављање ИБ-потписа за позадински процес - + Failed to change working directory to / Не могу да поставим „/“ као радни директоријум - + Quitting Program Излазак из програма - + # of joysticks found: %1 # џојстика пронађено: %1 - + List Joysticks: Списак џојстика: - + --------------- --------------- - + Joystick %1: Џојстик %1: - + Index: %1 Индекс: %1 - + GUID: %1 ЈИБГ: %1 - + Name: %1 Назив: %1 - + Yes Да - + No Не - + Game Controller: %1 Контролер програма: %1 - + # of Axes: %1 # праваца: %1 - + # of Buttons: %1 # тастера: %1 - + # of Hats: %1 # капица: %1 - + Attempting to use fallback option %1 for event generation. Покушавам да користим резервну опцију %1 у стварању догађаја. - + Failed to open event generator. Exiting. Не могу да отворим ствараоца догађаја. Излазим. - + Using %1 as the event generator. Употребљавам %1 као ствараоца догађаја. - + Could not raise process priority. Не могу да повисим приоритет процеса. - + Last button - + There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? - + Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". - + Profile location %1 is not an XML file. Путања до профила „%1“ није ИксМЛ датотека. - + Profile location %1 does not exist. Путања до профила „%1“ не постоји. - - - + + + Controller identifier is not a valid value. Означивач контролера нема ваљану вредност. - + An invalid set number '%1' was specified. - + Controller identifier '%s'' is not a valid value. - + No set number was specified. Није одређен број скупа. - + No controller was specified. Није одређен контролер. - + No display string was specified. Није постављено »Display string«. - + An invalid event generator was specified. Одређен је неважећи стваралац догађаја. - + No event generator string was specified. Није одређен назив ствараоца догађаја. @@ -5129,7 +5158,7 @@ of your screen. Откривен је белег Кјут-стила али сам стил није одређен. - + No log file specified. @@ -5234,22 +5263,22 @@ of your screen. контролера или ЈИБГ (енг. „GUID“). - + Logging started - + Auto-switching to profile "%1". - + Auto-switching to nullptr profile! - + xinput version must be at least 2.0. No mouse acceleration changes will occur. Издање проширење „xinput“ је старије од издања 2.0. Нису могуће измене брзина при руковању мишем. @@ -5257,18 +5286,18 @@ of your screen. QuickSetDialog - + Quick Set Брзе поставке - + <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> <html><head/><body><p>Притисните неки тастер или померите управљач на уређају <br/>„%1“ (<span style=" font-weight:600;">%2</span>). Након тога, појавиће се прозорче <br/>у којем ћете моћи да придружите том тастеру-управљачу <br/>одговарајући тастер тастатуре, догађај и сл.</p></body></html> - - + + Quick Set %1 Брзе поставке — %1 @@ -5276,12 +5305,12 @@ of your screen. SetAxisThrottleDialog - + Throttle Change Промена регулатора - + The throttle setting for Axis %1 has been changed. Would you like to distribute this throttle change to all sets? @@ -5293,12 +5322,12 @@ Would you like to distribute this throttle change to all sets? SetJoystick - + Set %1: %2 Скуп %1: %2 - + Set %1 Скуп %1 @@ -5306,52 +5335,52 @@ Would you like to distribute this throttle change to all sets? SetNamesDialog - + Set Name Settings Поставке назива скупова - + Set 1 1. скуп - + Set 2 2. скуп - + Set 3 3. скуп - + Set 4 4. скуп - + Set 5 5. скуп - + Set 6 6. скуп - + Set 7 7. скуп - + Set 8 8. скуп - + Name Назив @@ -5359,7 +5388,7 @@ Would you like to distribute this throttle change to all sets? SimpleKeyGrabberButton - + Mouse Миш @@ -5367,7 +5396,7 @@ Would you like to distribute this throttle change to all sets? SpringModeRegionPreview - + Spring Mode Preview Преглед за начин „Скоковито“ @@ -5375,7 +5404,7 @@ Would you like to distribute this throttle change to all sets? UInputEventHandler - + Could not find a valid uinput device file. Please check that you have the uinput module loaded. lsmod | grep uinput @@ -5384,14 +5413,14 @@ lsmod | grep uinput lsmod | grep uinput - + Could not open uinput device file Please check that you have permission to write to the device Не могу да отворим „uinput“-датотеку уређаја Проверите да ли имате дозволу за уписивање на уређај - + Using uinput device file %1 Употребљавам „uinput“-датотеку уређаја %1 @@ -5399,554 +5428,554 @@ Please check that you have permission to write to the device UInputHelper - + a а - + b б - + c ц - + d д - + e е - + f ф - + g г - + h х - + i и - + j ј - + k к - + l л - + m м - + n н - + o о - + p п - + q љ - + r р - + s с - + t т - + u у - + v в - + w њ - + x џ - + y ж - + z з - + Esc Врати („Esc“) - + F1 Ф1 - + F2 Ф2 - + F3 Ф3 - + F4 Ф4 - + F5 Ф5 - + F6 Ф6 - + F7 Ф7 - + F8 Ф8 - + F9 Ф9 - + F10 Ф10 - + F11 Ф11 - + F12 Ф12 - + ` ` - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - - + + - - - + = = - + BackSpace Уназад - + Tab Таб - + [ [ - + ] ] - + \ \ - + CapsLock В.слова - + ; ; - + ' ' - + Enter Унеси - + Shift_L л.Мењач - + , , - - + + . . - - + + / / - + Ctrl_L л.Ктрл - - + + Super_L л.Супер - + Alt_L л.Алт - + Space Размакница - + Alt_R д.Алт - + Menu Изборник - + Ctrl_R д.Ктрл - + Shift_R д.Мењач - + Up Горе - + Left Лево - + Down Доле - + Right Десно - + PrtSc Сликај - + Ins Уметни - + Del Бриши - + Home Почетак - + End Крај - + PgUp Страна изнад - + PgDn Страна испод - + NumLock УКЉ/ ИСКЉ - + * * - + + + - + KP_Enter КП_Унеси - + KP_1 КП_1 - + KP_2 КП_2 - + KP_3 КП_3 - + KP_4 КП_4 - + KP_5 КП_5 - + KP_6 КП_6 - + KP_7 КП_7 - + KP_8 КП_8 - + KP_9 КП_9 - + KP_0 КП_0 - + SCLK SCLK - + Pause Пауза - + Super_R д.Супер - + Mute Мук - + VolDn Тише - + VolUp Гласније - + Play Пусти - + Stop Заустави - + Prev Претходно - + Next Наредно - + [NO KEY] [Без тастера] @@ -5954,54 +5983,54 @@ Please check that you have permission to write to the device UnixWindowInfoDialog - + Captured Window Properties Особине откривеног прозора - + Information About Window Подаци о прозору - + Class: Класа: - - - + + + TextLabel Текст-натпис - + Title: Наслов: - + Path: Путања: - + Match By Properties Прилагоди по - + Class класи - + Title наслову - + Path путањи @@ -6009,9 +6038,9 @@ Please check that you have permission to write to the device VDPad - - - + + + VDPad Патворен Д-тастер @@ -6019,226 +6048,226 @@ Please check that you have permission to write to the device VirtualKeyPushButton - + Space Размакница - + Tab Таб - + Shift (L) л. Мењач - + Shift (R) д. Мењач - + Ctrl (L) л. Ктрл - + Ctrl (R) д. Ктрл - + Alt (L) л. Алт - - + + Alt (R) д. Алт - + Alt Gr - + ` ` - + ~ ~ - - + + - - - + = = - + [ [ - + ] ] - + \ \ - + Caps В.слова - + ; ; - + ' ' - + , , - - + + . . - - + + / / - + ESC Врати - + PRTSC Сликај - + SCLK SCLK - + INS Уметни - + PGUP Страна изнад - + DEL Бриши - + PGDN Страна испод - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - + NUM LK УКЉ/ ИСКЉ - - + + * * - + + + - + Enter Унеси @@ -6255,42 +6284,42 @@ R И - + < < - + : : - + Super (L) л.Супер - + Menu Избор - + Up Горе - + Down Доле - + Left Лево - + Right Десно @@ -6298,226 +6327,226 @@ R VirtualKeyboardMouseWidget - - + + Keyboard Тастатура - - + + Mouse Миш - + Mouse Settings Поставке миша - + Left Mouse Лево - + Up Mouse Горе - + Left Button Mouse Леви тастер - + Middle Button Mouse Средњи тастер - + Right Button Mouse Десни тастер - + Wheel Up Mouse Точкић унапред - + Wheel Left Mouse Точкић улево - + Wheel Right Mouse Точкић удесно - + Wheel Down Mouse Точкић уназад - + Down Mouse Доле - + Right Mouse Десно - + Button 4 Mouse Тастер 4 - + Mouse 8 Mouse Миш 8 - + Button 5 Mouse Тастер 5 - + Mouse 9 Mouse Миш 9 - + NONE НИШТА - - + + Last button - - + + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + Others - + Applications Програми - + Browser Back Претходно (веб прегледник) - + Browser Favorites Обележивачи (веб прегледник) - + Browser Forward Наредно (веб прегледник) - + Browser Home Почетна страна (веб прегледник) - + Browser Refresh Освежи (веб прегледник) - + Browser Search Претрага (веб прегледник) - + Browser Stop Заустави учитавање (веб прегледник) - + Calc Калкулатор - + Email Е-пошта - + Media Медији - + Media Next Медији — Наредно - + Media Play Медији — Пусти - + Media Previous Медији — Претходно - + Media Stop Медији — Заустави - + Search Нађи - + Volume Down Тише - + Volume Mute Мук - + Volume Up Гласније @@ -6525,7 +6554,7 @@ R VirtualMousePushButton - + INVALID ОШТЕЋЕНО @@ -6533,28 +6562,28 @@ R WinAppProfileTimerDialog - - + + Capture Application Разоткриј прозор - + After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. По притиску дугмета „Разоткриј прозор“, одаберите прозор програма који желите да повежете са профилом. Разоткривање тог прозора отпочеће након истека доле задатог времена. - + Timer: Након: - + Seconds секунди(е,а) - + Cancel Поништи @@ -6562,12 +6591,12 @@ R WinExtras - + [NO KEY] [Без тастера] - + AntiMicro Profile Профил за Анти-микро @@ -6575,69 +6604,68 @@ R X11Extras - + ESC Врати - + Tab Таб - + Space Размакница - + DEL Бриши - + Return Унеси („Return“) („Enter“) - + KP_Enter КП_Унеси - + Backspace Уназад - + Alt Gr - + xinput extension was not found. No mouse acceleration changes will occur. Није нађено проширење „xinput“. Нису могуће измене брзина при руковању мишем. - + xinput version must be at least 2.0. No mouse acceleration changes will occur. Издање проширење „xinput“ је старије од издања 2.0. Нису могуће измене брзина при руковању мишем. - Virtual pointer found with id=%1. - Нађен је патворени показивач са ИБ=%1. + Нађен је патворени показивач са ИБ=%1. - + PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 Није нађено „НPtrFeedbackClass“ за патворени показивач. Нису могуће измене брзина при руковању мишем за уређај чији је ИБ=%1 - + Changing mouse acceleration for device with id=%1 Измена убрзања при употреби миша за уређај чији је ИБ=%1 @@ -6645,7 +6673,7 @@ R XMLConfigReader - + Could not write updated profile XML to file %1. Не могу да упишем зановљен ИксМЛ-профил у датотеку %1. @@ -6653,7 +6681,7 @@ R XMLConfigWriter - + Could not write to profile at %1. Не могу да уписујем у профил у %1. @@ -6661,7 +6689,7 @@ R antimicro - + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. @@ -6669,97 +6697,97 @@ R main - + Launch program in system tray only. Покреће програм само у обавештајној зони. - + Launch program with the tray menu disabled - + Launch program without the main window displayed - + Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers - + location - + Apply configuration file to a specific controller. Value can be a controller index, name, or GUID - + value - + Unload currently enabled profile(s) - + value(s) - + Start joysticks on a specific set. Value can be a controller index, name, or GUID - + number value - + Launch program as a daemon. Use only on Linux. - + Enable logging - + log-type - + Choose a file for logs writing - + filename - + Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. - + event-generation-type - + Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. diff --git a/share/antimicro/translations/antimicro_uk.ts b/share/antimicro/translations/antimicro_uk.ts old mode 100644 new mode 100755 index 0ef0b10d1..c1ff9ab60 --- a/share/antimicro/translations/antimicro_uk.ts +++ b/share/antimicro/translations/antimicro_uk.ts @@ -4,22 +4,22 @@ AboutDialog - + About Про програму - + Version Версія - + Credits Розробники - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -137,7 +137,7 @@ p, li { white-space: pre-wrap; } - + "juliagoda" (since March, 2018) Wanting only to play my favourite old games that din't support gamepads, I found this project (which map keyboard keys and mouse buttons to connected gamepads on Linux) as most proper and recent. But because of poor choices of such application on the internet and since it didn't compile properly, I decided to rescue the project. However, once I finished my work (enough to enjoy playing games) I thought about sharing this code with others. Of course all informations about past programmers will be held. "Ryochan7" (since December 30, 2012 until 2017), I have been working on antimicro in my spare time. What originally started as a fork of QJoyPad and a way to learn proper event-driven programming has turned into something much bigger than I originally intended. Although I have spent a lot of time learning new techniques, finding out more about the domain of KB+M emulation, and spending Friday nights bashing my head against my keyboard, it has been a fun and enriching experience overall. @@ -155,17 +155,17 @@ As of May 24, 2016, this project has moved to https://github.com/AntiMicro/antim - + Copyright: 2013 - 2018 - + Changelog - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -209,52 +209,52 @@ p, li { white-space: pre-wrap; } - + Info Інформація - + antimicro - + About Development - + License Ліцензія - + Program Version %1 Версія програми %1 - + Program Compiled on %1 at %2 Програму скомпільовано %1 о %2 - + Built Against SDL %1 Зібрано на SDL %1 - + Running With SDL %1 Запущено з SDL %1 - + Using Qt %1 Використано Qt %1 - + Using Event Handler: %1 Обробник подій: %1 @@ -262,29 +262,29 @@ p, li { white-space: pre-wrap; } AddEditAutoProfileDialog - + Auto Profile Dialog Вікно автоматичного профілю - + Profile: Профіль: - - + + Browse Оглянути - + Window: - - + + Select Window. Click on the appropriate application window and the application file path will be populated in the form. @@ -293,38 +293,47 @@ in the form. в поле вводу. - + Detect Window Properties - + Class: - + Title: - + + set partial title + + + + Application: - + Select Обрати - + + De&vices: + + + Devices: - Пристрої: + Пристрої: - - + + Select this profile to be the default loaded for the specified device. The selection will be used instead of the all default profile option. @@ -333,84 +342,84 @@ of the all default profile option. налаштування типового профілю. - + Set as Default for Controller Встановити типовим для контролера - - + + A different profile is already selected as the default for this device. Інший профіль вже встановлено типовим для вказаного пристрою. - + Current (%1) Поточний (%1) - + Open Config Відкрити конфігурацію - - + + Select Program Обрати програму - + Programs (*.exe) - + Please use the main default profile selection. Використовуйте основний типовий профіль. - + Please select a window by using the mouse. Press Escape if you want to cancel. Оберіть мишкою вікно. Аби скасувати вибір натисніть Escape. - + Capture Application Window Захоплення вікна програми - + Could not obtain information for the selected window. Не отримано інформації для обраного вікна. - + Application Capture Failed Захоплення програми зазнало невдачі - + Profile file path is invalid. Шлях до профілю хибний. - + No window matching property was specified. - + Program path is invalid or not executable. Шлях до програми хибний, або вона не має прав на виконання. - + File is not an .exe file. - + No window matching property was selected. @@ -418,165 +427,165 @@ of the all default profile option. AdvanceButtonDialog - - + + Advanced Розширені параметри - + Assignments Призначення - + Toggle Перемикач - + Turbo Турбо - + Set Selector Встановити селектор - + Press Time Час натиску - + Insert a pause that occurs in between key presses. Вставте паузу між натисканнями клавіш. - + Pause Пауза - + Hold Утримання - + Mouse Mod Мод. мишки - + Cycle Цикл - + Distance Дистанція - + Release Віджати - + Blank or KB/M - + Delay Затримка - + Execute - + Load Завантажити - + Set Change - + Text Entry - - + + Insert a new blank slot. Вставити новий пустий слот. - + Insert Вставити - + Delete a slot. Вилучити слот. - + Delete Вилучити - + Clear all currently assigned slots. Очистити всі поточні слоти. - + Clear All Очистити все - + Placeholder Заповнювач - + Specify the duration of an inserted Pause or Hold slot. Встановити тривалість слотів Пауза чи Утримання. - + Time: Час: - + 0.01s 0.01с - + 0m 0хв - - + + 0 0 - + 0s @@ -585,339 +594,339 @@ of the all default profile option. Зміна швидкості мишки: - + &Mouse Speed Mod: - + Set the percentage that mouse speeds will be modified by. Встановіть зміну швидкості миші у відсотковому співвідношенні. - - + + % % - - + + Specify the range past an axis dead zone in which a sequence of actions will execute. - + Distance: Дистанція: - + Auto Reset Cycle After Автоматично скидати цикл опісля - + seconds секунд - + Executable: - + ... - + Arguments: - - - + + + Enabled Включити - + Mode: Режим: - + <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> - + Normal Звичайний - + Gradient Наростаючий - + Pulse Пульсуючий - + Delay: Затримка: - + 0.10s 0.10с - + Rate: Частота: - + 10.0/s 10.0/с - - + + Disabled Вимкнено - + Select Set 1 One Way Встановити набір 1 одностороннім - + Select Set 1 Two Way Встановити набір 1 двостороннім - + Select Set 1 While Held Встановити набір 1 доки натиснуто - + Select Set 2 One Way Встановити набір 2 одностороннім - + Select Set 2 Two Way Встановити набір 2 двостороннім - + Select Set 2 While Held Встановити набір 2 доки натиснуто - + Select Set 3 One Way Встановити набір 3 одностороннім - + Select Set 3 Two Way Встановити набір 3 двостороннім - + Select Set 3 While Held Встановити набір 3 доки натиснуто - + Select Set 4 One Way Встановити набір 4 одностороннім - + Select Set 4 Two Way Встановити набір 4 двостороннім - + Select Set 4 While Held Встановити набір 4 доки натиснуто - + Select Set 5 One Way Встановити набір 5 одностороннім - + Select Set 5 Two Way Встановити набір 5 двостороннім - + Select Set 5 While Held Встановити набір 5 доки натиснуто - + Select Set 6 One Way Встановити набір 6 одностороннім - + Select Set 6 Two Way Встановити набір 6 двостороннім - + Select Set 6 While Held Встановити набір 6 доки натиснуто - + Select Set 7 One Way Встановити набір 7 одностороннім - + Select Set 7 Two Way Встановити набір 7 двостороннім - + Select Set 7 While Held Встановити набір 7 доки натиснуто - + Select Set 8 One Way Встановити набір 8 одностороннім - + Select Set 8 Two Way Встановити набір 8 двостороннім - + Select Set 8 While Held Встановити набір 8 доки натиснуто - + sec. сек. - + /sec. /сек. - + Set %1 Набір %1 - - + + Select Set %1 Обрати набір %1 - + One Way Односторонній - + Two Way Двосторонній - + While Held Доки натиснуто - + Choose Executable - + Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. - + Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. - + Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. - + Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. - + Chose a profile to load when this slot is activated. - + Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. - + Specify the time that keys past this slot should be held down. - + Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. - + Change to selected set once slot is activated. - + Full string will be typed when a slot is activated. - + Execute program when slot is activated. - - + + Choose Profile - + Config Files (*.amgp *.xml) @@ -925,157 +934,157 @@ of the all default profile option. AdvanceStickAssignmentDialog - + Stick/Pad Assignment Призначення стіків/хрестовин - + Sticks Стіки - + DPads DPad'и - + Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. - - + + %1 (Joystick %2) %1 (джойстик %2) - + Stick 1 Стік 1 - - - + + + Enabled Активний - - - - - - + + + + + + Assign Призначити - - + + X Axis: Вісь X: - - + + Y Axis: Вісь Y: - + Stick 2 Стік 2 - + Number of Physical DPads: %1 Кількість фізичних DPad'ів: %1 - + Virtual DPad 1 Віртуальний DPad 1 - + Down: Вниз: - + Left: Вліво: - + Right: Вправо: - + Up: Вверх: - - - - + + + + Axis %1 Вісь %1 - - - - + + + + Axis %1 - Вісь %1 - - - - - + + + + Axis %1 + Вісь %1 + - - - - + + + + Button %1 Кнопка %1 - + Move stick 1 along the X axis Рухайте стік 1 по вісі X - + Move stick 1 along the Y axis Рухайте стік 1 по вісі Y - + Move stick 2 along the X axis Рухайте стік 2 по вісі X - + Move stick 2 along the Y axis Рухайте стік 2 по вісі Y - - - - + + + + Press a button or move an axis Натисніть кнопки чи змістіть вісь @@ -1083,180 +1092,180 @@ of the all default profile option. AxisEditDialog - + Axis Вісь - + Presets: Типовий набір: - - + + Mouse (Horizontal) Мишка (Горизонтально) - - + + Mouse (Inverted Horizontal) Мишка (Горизонтально інвертовано) - - + + Mouse (Vertical) Мишка (Вертикально) - - + + Mouse (Inverted Vertical) Мишка (Вертикально інвертовано) - - + + Arrows: Up | Down Стрілки: Вверх | Вниз - - + + Arrows: Left | Right Стрілки: Вліво | Вправо - - + + Keys: W | S Клавіші: W | S - - + + Keys: A | D Клавіші: A | D - - + + NumPad: KP_8 | KP_2 NumPad: KP_8 | KP_2 - - + + NumPad: KP_4 | KP_6 NumPad: KP_4 | KP_6 - - - + + + None Відсутній - - + + Set the value to use as the limit for an axis. Useful for a worn out analog stick. - + Dead Zone: Сліпа зона: - - + + Set the value of the dead zone for an axis. Встановіть значення сліпої зони для вісі. - + Max Zone: Максимальна зона: - - + + [NO KEY] [НЕМАЄ КНОПКИ] - + Throttle setting that determines the behavior of how to interpret an axis hold or release. Параметри тяги визначають, як програма має реагувати на утримання та натискання вісі. - + Negative Half Throttle Зворотня напівтяга - + Negative Throttle Зворотня тяга - + Normal Звичайний - + Positive Throttle Пряма тяга - + Positive Half Throttle Пряма напівтяга - + Current Value: Поточне значення: - + Name: Ім'я: - + Specify the name of an axis. Назначте ім'я для вісі. - + Mouse Settings Параметри мишки - + Set Набір - + Set %1 Набір %1 - + Left Mouse Button - + Right Mouse Button @@ -1264,42 +1273,42 @@ interpret an axis hold or release. ButtonEditDialog - + Dialog Діалог - + To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab Аби зробити нове призначення, натисніть клавішу на клавіатурі, чи клацніть по кнопці розташованій на вкладках «Клавіатура» чи «Мишка» - + Placeholder Заповнювач - + Enables a key press or release to only occur when a controller button is pressed. Дозволяє виконувати дію тільки при натисканні чи відпусканні клавіші. - + Toggle Перемикач - + Enables rapid key presses and releases. Turbo controller. Дозволити прискорене натискання клавіш. Турбо контролер. - + Turbo Турбо - + Last keyboard/mouse button: @@ -1308,33 +1317,33 @@ interpret an axis hold or release. Поточний: - + Slots Слоти - + Na&me: Ім'я: - + Specify the name of a button. Назначте ім'я для кнопки. - + Action: Дія: - + Specify the action that will be performed in game while this button is being used. - + Advanced Розширені параметри @@ -1347,52 +1356,52 @@ this button is being used. Набір %1 - - - + + + Choose your keyboard key - + No button - - - - + + + + Last button - + To change settings for last button, it must be at least one assignment from keyboard to gamepad - + To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad - + To open advanced dialog, it's needed to map at least one button from keyboard to gamepad - + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + As last gamepad button has been set - + Index %1 @@ -1400,190 +1409,190 @@ this button is being used. Calibration - + Form - - + + Start calibration - + Controller: - + Sticks: - - Use settings from jstest-gtk - - - - + Reset settings - + Cancel Скасувати - - + + Save Зберегти - - + + Calibration - - Do you really want to reset settings of current axes? + + Do you really want to reset settings of current axis? - + Calibration was saved for the preset. Do you really want to reset settings? - + Place the joystick in the center position. It's the part, where often you don't have to move. Just skip it in such situation. - + Calibrating center - + Start second step - + Center X: %1 - + Center Y: %1 - + Place the joystick in the top-left corner many times - - + + Calibrating position - - + + X: %1 - - + + Y: %1 - + Place the joystick in the bottom-right corner - + Start final step - + range X: %1 - %2 - + range Y: %1 - %2 - + deadzone X: %1 - + deadzone Y: %1 - + ---Calibration done!--- - + Calibration values have been saved - - + + Dead zone calibration - - You must move X axis to the right at least five times! Keep moving! + + You have to move axes to the top-left corner at least five times. - - You must move X axis to the left at least five times! Keep moving! + + You have to move axes to the bottom-right corner at least five times. - - - - + + Do you want to save calibration of current axis? + + + + + + + Axis %1 Вісь %1 @@ -1591,64 +1600,64 @@ deadzone Y: %1 CapturedWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: - - - + + + TextLabel - + Title: - + Path: - + Match By Properties - + Class - + Title - + Path - + Full Path - + File Name @@ -1713,67 +1722,67 @@ deadzone Y: %1 DPadContextMenu - + Mouse (Normal) Мишка (стандарт) - + Mouse (Inverted Horizontal) Мишка (Горизонтально інвертовано) - + Mouse (Inverted Vertical) Мишка (Вертикально інвертовано) - + Mouse (Inverted Horizontal + Vertical) Мишка (Інвертовано гор.+верт.) - + Arrows Стрілки - + Keys: W | A | S | D Клавіші: W | A | S | D - + NumPad NumPad - + None Відсутній - + Standard Стандарт - + Eight Way Вісім сторін - + 4 Way Cardinal 4 основні сторони - + 4 Way Diagonal 4 діагональні сторони - + Mouse Settings Параметри мишки @@ -1781,62 +1790,62 @@ deadzone Y: %1 DPadEditDialog - + Dialog Діалог - + Presets: Типовий набір: - + Mouse (Normal) Мишка (стандарт) - + Mouse (Inverted Horizontal) Мишка (Горизонтально інвертовано) - + Mouse (Inverted Vertical) Мишка (Вертикально інвертовано) - + Mouse (Inverted Horizontal + Vertical) Мишка (Інвертовано гор.+верт.) - + Arrows Стрілки - + Keys: W | A | S | D Клавіші: W | A | S | D - + NumPad NumPad - + None Відсутній - + Dpad Mode: Режим DPad: - + Standard: 8 region dpad with two direction buttons active when the dpad is in a diagonal region. @@ -1852,63 +1861,63 @@ to a diagonal zone. - + &Name: - + Standard Стандарт - + Eight Way Вісім сторін - + 4 Way Cardinal 4 основні сторони - + 4 Way Diagonal 4 діагональні сторони - + DPad Delay: Затримка DPad'а: - - + + Time lapsed before a direction change is taken into effect. Час затримки, через який зміна напрямку набуде чинності. - + s с - + Specify the name of a dpad. Назначте ім'я для DPad. - + Mouse Settings Параметри мишки - + Set Набір - + Set %1 Набір %1 @@ -1916,27 +1925,27 @@ to a diagonal zone. EditAllDefaultAutoProfileDialog - + Default Profile Типовий профіль - + Profile: Профіль: - + Browse Оглянути - + Open Config Відкрити конфігурацію - + Profile file path is invalid. Шлях до профілю некоректний. @@ -1944,29 +1953,29 @@ to a diagonal zone. ExtraProfileSettingsDialog - + Extra Profile Settings Розширені параметри профілю - + Key Press Time: Час натиску клавіші: - + 0.00 ms 0.00 мс - + Profile Name: Ім'я профілю: - - - + + + s с @@ -1974,7 +1983,7 @@ to a diagonal zone. GameController - + Game Controller Ігровий контролер @@ -1982,9 +1991,9 @@ to a diagonal zone. GameControllerDPad - - - + + + DPad DPad @@ -1992,187 +2001,187 @@ to a diagonal zone. GameControllerMappingDialog - + Game Controller Mapping Відображення ігрового контролеру - + <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> - + A A - + B B - + X X - + Y Y - + Back Назад - + Start Старт - + Guide Guide - + Left Shoulder Ліве плече - + Right Shoulder Праве плече - + Left Stick Click Клік лівого стіку - + Right Stick Click Клік правого стіку - + Left Stick X Лівий стік X - + Left Stick Y Лівий стік Y - + Right Stick X Правий стік X - + Right Stick Y Правий стік Y - + Left Trigger Лівий триґер - + Right Trigger Правий триґер - + DPad Up DPad Верх - + DPad Left DPad Ліво - + DPad Down DPad Низ - + DPad Right DPad Право - + Mapping Відображення - + SDL 2 Game Controller Mapping String Рядок відображення контролеру від SDL 2 - + Last Axis Event: - + Current Axis Detection Dead Zone: - + 5000 5000 - + 10000 10000 - + 15000 15000 - + 20000 20000 - + 25000 25000 - + 30000 30000 - + 32000 32000 - + Game Controller Mapping (%1) (#%2) Відображення ігрового контролеру (%1) (#%2) - + Discard Controller Mapping? Скинути відображення контролеру? - + Discard mapping for this controller? If discarded, the controller will be reverted to a joystick once you refresh all joysticks. @@ -2182,47 +2191,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerSet - + Back Назад - + Guide Guide - + Start Старт - + LS Click Клік ЛС - + RS Click Клік ПС - + L Shoulder Л плече - + R Shoulder П плече - + L Trigger Л триґер - + R Trigger П триґер @@ -2230,9 +2239,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerTrigger - - - + + + Trigger Триґер @@ -2240,9 +2249,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxis - - - + + + Axis Вісь @@ -2250,24 +2259,24 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisButton - - - + + + Button Кнопка - + Negative Зворотній - + Positive Прямий - + Unknown Невідомо @@ -2275,74 +2284,74 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisContextMenu - + Mouse (Horizontal) Мишка (Горизонтально) - + Mouse (Inverted Horizontal) Мишка (Горизонтально інвертовано) - + Mouse (Vertical) Мишка (Вертикально) - + Mouse (Inverted Vertical) Мишка (Вертикально інвертовано) - + Arrows: Up | Down Стрілки: Вверх | Вниз - + Arrows: Left | Right Стрілки: Вліво | Вправо - + Keys: W | S Клавіші: W | S - + Keys: A | D Клавіші: A | D - + NumPad: KP_8 | KP_2 NumPad: KP_8 | KP_2 - + NumPad: KP_4 | KP_6 NumPad: KP_4 | KP_6 - - + + None Відсутній - - + + Mouse Settings Параметри мишки - + Left Mouse Button - + Right Mouse Button @@ -2350,57 +2359,57 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButton - + Processing turbo for #%1 - %2 - + Finishing turbo for button #%1 - %2 - + Processing press for button #%1 - %2 - + Processing release for button #%1 - %2 - + Distance change for button #%1 - %2 - - - + + + Button Кнопка - - - - + + + + [NO KEY] [НЕМАЄ КНОПКИ] - + [Set %1 1W] [Набір %1 1W] - + [Set %1 2W] [Набір %1 2W] - + [Set %1 WH] [Набір %1 WH] @@ -2408,47 +2417,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonContextMenu - + Toggle Перемкнути - + Turbo Турбо - + Clear Очистити - + Set Select Встановити вибір - + Disabled Вимкнено - + Set %1 Набір %1 - + Set %1 1W Набір %1 1W - + Set %1 2W Набір %1 2W - + Set %1 WH Набір %1 WH @@ -2456,118 +2465,118 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonSlot - - + + Mouse Мишка - + Up Вверх - + Down Вниз - + Left Вліво - + Right Вправо - + LB ЛК - + MB СК - + RB ПК - + B4 К4 - + B5 К5 - + Pause Пауза - + Hold Утримання - + Cycle Цикл - + Distance Дистанція - + Release Віджати - + Mouse Mod Мод. мишки - + Press Time Час натиску - + Delay Затримка - + Load %1 - + Set Change %1 - + [Text] %1 - + [Exec] %1 - + [NO KEY] [НЕМАЄ КНОПКИ] @@ -2575,9 +2584,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStick - - - + + + Stick Стік @@ -2585,37 +2594,37 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickButton - - - + + + Up Верх - - - + + + Down Низ - - - + + + Left Ліво - - - + + + Right Право - - - + + + Button Кнопка @@ -2623,67 +2632,67 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickContextMenu - + Mouse (Normal) Мишка (Стандарт) - + Mouse (Inverted Horizontal) Мишка (Горизонтально інвертовано) - + Mouse (Inverted Vertical) Мишка (Вертикально інвертовано) - + Mouse (Inverted Horizontal + Vertical) Мишка (Інвертовано гор.+верт.) - + Arrows Стрілки - + Keys: W | A | S | D Клавіші: W | A | S | D - + NumPad NumPad - + None Відсутній - + Standard Стандарт - + Eight Way Вісім сторін - + 4 Way Cardinal 4 основні сторони - + 4 Way Diagonal 4 діагональні сторони - + Mouse Settings Параметри мишки @@ -2691,96 +2700,96 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickEditDialog - + Dialog Діалог - + X: X: - - - - - + + + + + 0 0 - + Y: Y: - + Distance: Дистанція: - + Bearing: Напрям: - + % Safe Zone: % Безпечна зона: - + Presets: Типовий набір: - + Mouse (Normal) Мишка (стандарт) - + Mouse (Inverted Horizontal) Мишка (Горизонтально інвертовано) - + Mouse (Inverted Vertical) Мишка (Вертикально інвертовано) - + Mouse (Inverted Horizontal + Vertical) Мишка (Інвертовано гор.+верт.) - + Arrows Стрілки - + Keys: W | A | S | D Клавіші: W | A | S | D - + NumPad NumPad - + None Відсутній - + Stick Mode: Режим стіка: - + Standard: 8 region stick with two direction buttons active when the stick is in a diagonal region. @@ -2796,97 +2805,97 @@ to a diagonal zone of the stick. - + Standard Стандарт - + Eight Way Вісім сторін - + 4 Way Cardinal 4 основні сторони - + 4 Way Diagonal 4 діагональні сторони - + Dead Zone: Сліпа зона: - - + + Dead zone value to use for an analog stick. - + Max Zone: Максимальна зона: - - + + Value when an analog stick is considered moved 100%. - + Diagonal Range: Діагональний діапазон: - - + + The area (in degrees) that each diagonal region occupies. - + Square Stick: Квадратність стіку: - - + + Percentage to modify a square stick coordinates to confine values to a circle - + % % - + Stick Delay: Затримка стіка: - - + + Time lapsed before a direction change is taken into effect. Час затримки, через який зміна напрямку набуде чинності. - + s с - + Modifier: - + Edit button that is active while the stick is active. This button is useful for assigning zones with @@ -2895,33 +2904,33 @@ functionality to an analog stick. - + PushButton - + Na&me: Name: Ім'я: - + Specify the name of an analog stick. Назначте ім'я для аналогового стіка. - + Mouse Settings Параметри мишки - + Set Набір - + Set %1 Набір %1 @@ -2929,9 +2938,9 @@ functionality to an analog stick. JoyControlStickModifierButton - - - + + + Modifier @@ -2939,9 +2948,9 @@ functionality to an analog stick. JoyDPad - - - + + + DPad DPad @@ -2949,37 +2958,37 @@ functionality to an analog stick. JoyDPadButton - - - + + + Up Верх - - - + + + Down Низ - - - + + + Left Ліво - - - + + + Right Право - - - + + + Button Кнопка @@ -2987,267 +2996,272 @@ functionality to an analog stick. JoyTabWidget - - - - - - + + + + + + <New> <Новий> - - + + Remove Вилучити - - + + Remove configuration from recent list. Вилучити конфігурацію з переліку частого користування. - - + + Load Завантажити - - + + Load configuration file. Завантажити файл конфігурації. - - + + Save Зберегти - - + + Save changes to configuration file. Зберегти зміни до файлу конфігурації. - - + + Save As Зберегти як - - + + Save changes to a new configuration file. Зберегти зміни в новий файл конфігурації. - - + + Sets Набори - + Copy from Set Копіювати з набору - + Settings Параметри - - + + Set 1 Набір 1 - - + + Set 2 Набір 2 - - + + Set 3 Набір 3 - - + + Set 4 Набір 4 - - + + Set 5 Набір 5 - - + + Set 6 Набір 6 - - + + Set 7 Набір 7 - - + + Set 8 Набір 8 - - + + Stick/Pad Assign Призначення стіків/DPad - - + + Controller Mapping Відображення контролеру - - + + Quick Set Швидкий набір - - + + Names Імена - - + + Toggle button name displaying. Перемкнути показ команд на кнопках. - - + + Pref Параметри - - + + Change global profile settings. Змінити глобальні параметри профілю. - - - + + + Reset Скинути - - + + Revert changes to the configuration. Reload configuration file. Відновити зміни. Перезавантажити файл конфігурації. - + Open Config Відкрити конфігурацію - + Config Files (*.amgp *.xml) - - - + + + Save Config Зберегти конфігурацію - - - + + + Config File (*.%1.amgp) - - + + Do you really want to reset buttons settings for joystick? + + + + + Set Набір - - + + Save Profile Changes? Зберегти зміни профілю? - - + + Changes to the new profile have not been saved. Would you like to save or discard the current profile? Зміни до нового профілю не збережені. Зберегти їх до поточного профілю? - - + + Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? Зміни до профілю "%1" не збережені. Зберегти їх до поточного профілю? - + Sticks Стіки - - + + DPads DPad'и - + No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. Жодної кнопки не назначено. Використовуйте «Швидкий набір» для призначення клавіш, або ж вимкніть приховування пустих кнопок. - - + + Set %1: %2 Набір %1: %2 - - + + Set %1 Набір %1 - + Copy Set Assignments Скопіювати набір значень - + Are you sure you want to copy the assignments and device properties from %1? Дійсно бажаєте скопіювати значення і властивості пристрою з %1? @@ -3255,7 +3269,7 @@ to buttons or disable hiding empty buttons. Joystick - + Joystick Джойстик @@ -3263,98 +3277,98 @@ to buttons or disable hiding empty buttons. JoystickStatusWindow - + Properties Властивості - + Details Деталі - + Name: Ім'я: - - - - - - - + + + + + + + %1 %1 - + Number: Кількість: - + Axes: Вісь: - + Buttons: Кнопок: - + Hats: Міні джойстиків: - + GUID: GUID: - + Game Controller: Ігровий контролер: - + Axes Вісь - + Buttons Кнопки - + Hats Міні джойстики - + %1 (#%2) Properties Властивості %1 (#%2) - + Axis %1 Вісь %1 - + Hat %1 Міні джойстик %1 - + No Ні - + Yes Так @@ -3362,62 +3376,67 @@ to buttons or disable hiding empty buttons. MainSettingsDialog - + Edit Settings Змінити параметри - + General Основні - + Controller Mappings Відображення контролеру - + Language Мова - + Auto Profile Авто-профіль - + Mouse Мишка - + Advanced Розширені параметри - + + Profile Direc&tory: + + + + <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> <html><head/><body><p>Вкажіть типову теку, яку програма використовуватиме для збереження профілів.</p></body></html> - + Recent Profile Count: Кількість швидких профілів: - + <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> <html><head/><body><p>Кількість профілів, які будуть показані в переліку часто уживаних. Значення 0 трактується програмою, як необмежена кількість профілів для показу.</p></body></html> - + Gamepad Poll Rate: - + Change the poll rate that the program uses to discover new events from gamepads. Defaults to 10 ms. @@ -3427,29 +3446,29 @@ before using antimicro unattended. - + Hide main window when the main window close button is clicked instead of quitting the program. Приховувати головне вікно кнопкою закриття замість виходу з програми. - + Close To Tray Закривати до лотку - + Have Windows start antimicro at system startup. - + Launch At Windows Startup Запускати разом із Windows - + Display recent profiles for all controllers as a single list in the tray menu. Defaults to using sub-menus. @@ -3458,12 +3477,12 @@ to using sub-menus. Типово використовується підменю. - + Single Profile List in Tray Один перелік профілів в лотку - + Have the program minimize to the taskbar. By default, the program minimizes to the system tray if available. @@ -3472,12 +3491,12 @@ tray if available. лотку, якщо є можливість. - + Minimize to Taskbar Згортати до панелі завдань - + This option will cause the program to hide all buttons that have no slots assigned to them. The Quick Set dialog window will have to be used @@ -3489,12 +3508,12 @@ to bring up the edit dialog for gamepad buttons. ігрового контролера. - + Hide Empty Buttons Приховати пусті кнопки - + When the program is launched, open the last known profile that was opened during the previous session. @@ -3503,174 +3522,184 @@ previous session. у попередній сесії. - + Auto Load Last Opened Profile Автоматично завантажувати останній відкритий профіль - + Only show the system tray icon when the program first launches. Показувати лише піктограму в системному лотку під час першого запуску. - + Launch in Tray Запускати в лотку - + Associate .amgp files with antimicro in Windows Explorer. - + Associate Profiles Прив'язати профілі - + Key Repeat Повтор клавіш - + Active keys will be repeatedly pressed when this option is enabled. Активні клавіші повторно натискатимуться коли цей параметр активний. - - + + Enable - + Specifies how much time should elapse before key repeating begins. - + Specifies how many times key presses will be performed per seconds. - + <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> - + Português do Brasil - + Français - + Deutsch - + Italiano - + 日本語 - + Русский - + српски / srpski - + 简体中文 - + Español - + українська - + Polski - + + History Si&ze: + + + + Log File: - + Log Level: - + None Відсутній - + Error - + Warning - + Info Інформація - + Debug - + + Reset + Скинути + + + Class - + Title - + Program - + Disable the "Enhanced Pointer Precision" Windows setting while antimicro is running. Disabling "Enhanced Pointer Precision" will allow mouse movement within antimicro to be more @@ -3678,32 +3707,27 @@ precise. - + Disable Enhance Pointer Precision - + Smoothing - - Histor&y Size: - - - - + Weight &Modifier: - + Refresh Rate: - + The refresh rate is the amount of time that will elapse in between mouse events. Please be cautious when editing this setting as it will cause the program to use @@ -3713,46 +3737,46 @@ it unattended. - + Spring Пружинний - + Screen: - + Utilize the specified screen for spring mode. On Linux, the default is to use the primary screen. On Windows, the default is to use all available screens. - + Accel Numerator: - - - + + + 0 0 - + Accel Denominator: - + Accel Threshold: - + If the acceleration values for the virtual mouse have been changed by a different process, particularly when quitting an older game, then you might want to reset the acceleration @@ -3760,71 +3784,66 @@ values used by the virtual mouse. - + Reset Acceleration - + Delay: Затримка: - - Profi&le Directory: - - - - + ms мс - + Rate: Частота: - + times/s разів/с - + Below is a list of the custom mappings that have been saved. You can use the following table to delete mappings or have mappings temporarily disabled. You can also disable mappings that are included with SDL; just insert a new row with the appropriate joystick GUID and check disable. Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. - + GUID GUID - + Mapping String Рядок відображення - + Disable? Вимкнути? - - + + Delete Вилучити - + Insert Вставити - - + + Default Типова @@ -3833,7 +3852,7 @@ Settings will not take affect until you either refresh all joysticks or unplug t Brazilian Portuguese - + English English @@ -3842,84 +3861,94 @@ Settings will not take affect until you either refresh all joysticks or unplug t German - - + + Active Активний - + Devices: Пристрої: - - + + All Всі - + Device Пристрій - + Profile Профіль - + Default? Типовий? - + Add Додати - + Edit Змінити - + Also, Windows users who want to use a low value should also check the "Disable Enhance Pointer Precision" checkbox if you haven't disabled the option in Windows. - + Select Default Profile Directory Обрати типову теку профілю - + Are you sure you want to delete the profile? Дійсно вилучити профіль? - + Save Log File As - + Log Files (*.log) + + + Do you really want to reset setting? + + + + + Would you like to reset mappings too? + + MainWindow - + antimicro - + No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu Не знайдено жодного джойстика. @@ -3930,115 +3959,115 @@ the option in Windows. Якщо події в грі не спостерігаються, натисніть тут, аби запустити програму з правами Адміністратора. - + If events are not seen by a game, please click here to run this application as Administrator. - + &App Прогр&ама - + &Options &Параметри - + &Help &Допомога - - + + &Quit &Вихід - + Ctrl+Q Ctrl+Q - - + + &Update Joysticks &Оновити джойстики - + Ctrl+U Ctrl+U - - + + &Hide &Згорнути - + Ctrl+H Ctrl+H - + &About Пр&о програму - + Ctrl+A Ctrl+A - + About &Qt - + &Properties - + &Key Checker - + &GitHub Page - + &Game Controller Mapping - + S&ettings - + &Stick/Pad Assign - + &Wiki - + &Issues - + &Calibration @@ -4055,7 +4084,7 @@ the option in Windows. Перевірка клавіш - + Home Page Домашня сторінка @@ -4080,66 +4109,66 @@ the option in Windows. Wiki - + Could not find a proper controller identifier. Exiting. - - - - - - - + + + + + + + (%1) (%1) - - + + Open File Відкрити файл - + &Restore &Відновити - + Calibration couldn't be opened - + You must connect at least one controller to open the window - + Run as Administrator? Запустити із правами Адміністратора? - + Are you sure that you want to run this program as Adminstrator? Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. - + Failed to elevate program Не вдалося підняти права програмі - + Failed to restart this program as the Administrator Не вдалось перезапустити програму із правами Адміністратора - + Could not find controller. Exiting. @@ -4147,12 +4176,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseAxisSettingsDialog - + Mouse Settings - Параметри мишки - - + Set %1 Набір %1 @@ -4160,12 +4189,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseButtonSettingsDialog - + Mouse Settings - Параметри мишки - - + Set %1 Набір %1 @@ -4173,12 +4202,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseControlStickSettingsDialog - + Mouse Settings Параметри мишки - + Set %1 Набір %1 @@ -4186,12 +4215,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseDPadSettingsDialog - + Mouse Settings Параметри мишки - + Set %1 Набір %1 @@ -4199,17 +4228,17 @@ Some games run as Administrator which will cause events generated by antimicro t MouseSettingsDialog - + Mouse Settings Параметри мишки - + Mouse Mode: Режим мишки: - + Cursor mode is used to move the mouse cursor around the screen relative to its current position depending on how much you move an axis @@ -4223,80 +4252,80 @@ axis is moved back to the dead zone. - + Cursor Курсор - + Spring Пружинний - + Acceleration: Прискорення: - + Enhanced Precision Покращена точність - - + + Linear Лінійне - + Quadratic Квадратичне - + Cubic Кубічне - + Quadratic Extreme Екстремально квадратичне - + Power Function По степеневій функції - + Easing Quadratic Просте квадратичне - + Easing Cubic Просте кубічне - + Mouse Speed Settings Параметри швидкості мишки - + Enable to change the horizontal and vertical speed boxes at the same time. Змінювати значення гоизонтальної та вертикальної швидкості разом. - + Change Together Змінювати разом - + Options for adding more acceleration to the mouse movement beyond what the acceleration curve would produce. Acceleration is added based on how quickly an axis is @@ -4306,23 +4335,23 @@ using typical gamepad analog sticks. - + Delta Acceleration - + &Multiplier: - + Mi&n Threshold: - + E&xtra Duration: @@ -4333,8 +4362,8 @@ Speed: швидкість: - - + + 1 = 20 pps 1 = 20 pps @@ -4345,34 +4374,34 @@ Speed: швидкість: - + Wheel Hori. Speed: Коліщатко горизонт.: - + Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. Встановіть швидкість для горизонтальної прокрутки коліщатка миші відносно від числа симуляції кроків за секунду. - - + + 1 = 1 notch(es)/s 1 = 1 крок(ів)/с - + Wheel Vert. Speed: Коліщатко вертикаль.: - + Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. Встановіть швидкість для вертикальної прокрутки коліщатка @@ -4383,7 +4412,7 @@ according to number of simulated notches per second. Чутливість: - + For Power Function acceleration curve. Specifies the factor to use for curve sensitivity. When the value is above 1.0, the mouse movement will be accelerated @@ -4391,20 +4420,20 @@ faster at the low end of an axis. - + Easing Duration: - - - - + + + + % % - + Enhanced: Three tier curve that makes the mouse move slow on the low end of an axis and fast on the high end. @@ -4426,167 +4455,167 @@ a period of time using a Cubic curve. - + Hori&zontal Speed: - + &Vertical Speed: - + Sensitivit&y: - + Specifies the amount of time (in seconds) that will be required before the mouse is fully accelerated after reaching the high end of an axis. - - + + s с - + Highest value to accelerate mouse movement by - + x x - + Start %: - + Acceleration begins at this percentage of the base multiplier - + Minimum amount of axis travel required for acceleration to begin - + Max Threshold: - + Maximum axis travel before acceleration has reached the multiplier value - + Extend the time that extra acceleration is applied. Axis travel will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. - + Curve: - + Ease Out Sine - + Ease Out Quad - + Ease Out Cubic - + Spring Settings Параметри пружини - + Spring Width: Ширина пружини: - + Changes the width of the region that the cursor can move in spring mode. 0 will use the entire width of your screen. - + Spring Height: Висота пружини: - + Changes the height of the region that the cursor can move in spring mode. 0 will use the entire height of your screen. - + Release Radius: - + Specifies that the spring area will be relative to the mouse position set by a non-relative spring. - + Relative Відносний - + Mouse Status Стан мишки - + X: X: - - + + 0 (0 pps) 0 (0 pps) - + Y: Y: - - + + %n notch(es)/s %n крок/с @@ -4598,39 +4627,39 @@ mouse position set by a non-relative spring. QKeyDisplayDialog - + Key Checker Перевірка клавіш - - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - + Event Handler: Обробник подій: - + Native Key Value: Нативне значення клавіші: - - - + + + 0x00000000 0x00000000 - + Qt Key Value: Значення клавіші Qt: - + antimicro Key Value: @@ -4638,265 +4667,265 @@ mouse position set by a non-relative spring. QObject - + Daemon launched Демон завантажений - + Failed to launch daemon Помилка під час завантаження демону - + Launching daemon Запуск демона - - + + Display string "%1" is not valid. Виведений рядок «%1» не є вірним. - + Failed to set a signature id for the daemon - + Failed to change working directory to / Не вдалось змінити робочу теку на / - + Quitting Program - + # of joysticks found: %1 # джойстиків знайдено: %1 - + List Joysticks: Перелік джойстиків: - + --------------- --------------- - + Joystick %1: Джойстик %1: - + Index: %1 Індекс: %1 - + GUID: %1 GUID: %1 - + Name: %1 Ім'я: %1 - + Yes Так - + No Ні - + Game Controller: %1 Ігровий контролер: %1 - + # of Axes: %1 # Вісі: %1 - + # of Buttons: %1 # Кнопок: %1 - + # of Hats: %1 # Міні-падів: %1 - + Attempting to use fallback option %1 for event generation. - + Failed to open event generator. Exiting. - + Using %1 as the event generator. - + Could not raise process priority. - + Super Super - + Menu Меню - + Mute Mute - + Vol+ Vol+ - + Vol- Vol- - + Play/Pause Play/Pause - + Play Play - + Pause Pause - + Prev Prev - + Next Next - + Mail Пошта - + Home Home - + Media Media - + Search Пошук - + Last button - + There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? - + Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". - + Profile location %1 is not an XML file. Профіль %1 не є XML файлом. - + Profile location %1 does not exist. Профіль %1 не існує. - - - + + + Controller identifier is not a valid value. Контролер має хибне значення ідентифікатора. - + An invalid set number '%1' was specified. - + Controller identifier '%s'' is not a valid value. - + No set number was specified. Не вказаний набір значень. - + No controller was specified. Жодного контролеру не було вказано. - + No display string was specified. Жодного рядка для показу не було вказано. - + An invalid event generator was specified. - + No event generator string was specified. - + No log file specified. @@ -4931,22 +4960,22 @@ mouse position set by a non-relative spring. Запустити програму в режимі демона. - + Logging started - + Auto-switching to profile "%1". - + Auto-switching to nullptr profile! - + xinput version must be at least 2.0. No mouse acceleration changes will occur. Версія xinput має бути вище 2.0. Зміна швидкості миші не використовується. @@ -4954,18 +4983,18 @@ mouse position set by a non-relative spring. QuickSetDialog - + Quick Set Швидкий набір - + <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> <html><head/><body><p>Натисніть кнопку, чи змістіть вісь по %1 (<span style=" font-weight:600;">%2</span>).<br/>З'явиться діалогове вікно<br/>в якому зможете зробити переназначення.</p></body></html> - - + + Quick Set %1 Швидкий набір %1 @@ -4973,12 +5002,12 @@ mouse position set by a non-relative spring. SetAxisThrottleDialog - + Throttle Change Зміна тяги - + The throttle setting for Axis %1 has been changed. Would you like to distribute this throttle change to all sets? @@ -4990,12 +5019,12 @@ Would you like to distribute this throttle change to all sets? SetJoystick - + Set %1: %2 Набір %1: %2 - + Set %1 Набір %1 @@ -5003,52 +5032,52 @@ Would you like to distribute this throttle change to all sets? SetNamesDialog - + Set Name Settings Параметри наборів - + Set 1 Набір 1 - + Set 2 Набір 2 - + Set 3 Набір 3 - + Set 4 Набір 4 - + Set 5 Набір 5 - + Set 6 Набір 6 - + Set 7 Набір 7 - + Set 8 Набір 8 - + Name Ім'я @@ -5056,7 +5085,7 @@ Would you like to distribute this throttle change to all sets? SimpleKeyGrabberButton - + Mouse Мишка @@ -5064,7 +5093,7 @@ Would you like to distribute this throttle change to all sets? SpringModeRegionPreview - + Spring Mode Preview Перегляд пружинного режиму @@ -5072,7 +5101,7 @@ Would you like to distribute this throttle change to all sets? UInputEventHandler - + Could not find a valid uinput device file. Please check that you have the uinput module loaded. lsmod | grep uinput @@ -5081,14 +5110,14 @@ lsmod | grep uinput lsmod | grep uinput - + Could not open uinput device file Please check that you have permission to write to the device Неможливо відкрити uinput файл пристрою Перевірте, чи маєте ви права на запис до пристрою - + Using uinput device file %1 @@ -5096,551 +5125,551 @@ Please check that you have permission to write to the device UInputHelper - + a a - + b b - + c c - + d d - + e e - + f f - + g g - + h h - + i i - + j j - + k k - + l l - + m m - + n n - + o o - + p p - + q q - + r r - + s s - + t t - + u u - + v v - + w w - + x x - + y y - + z z - + Esc Esc - + F1 F1 - + F2 F2 - + F3 F3 - + F4 F4 - + F5 F5 - + F6 F6 - + F7 F7 - + F8 F8 - + F9 F9 - + F10 F10 - + F11 F11 - + F12 F12 - + ` ` - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - - + + - - - + = = - + BackSpace BackSpace - + Tab Tab - + [ [ - + ] ] - + \ \ - + CapsLock CapsLock - + ; ; - + ' ' - + Enter Enter - + Shift_L Shift_Л - + , , - - + + . . - - + + / / - + Ctrl_L Ctrl_Л - - + + Super_L Super_Л - + Alt_L Alt_Л - + Space Пробіл - + Alt_R Alt_П - + Menu Меню - + Ctrl_R Ctrl_П - + Shift_R Shift_П - + Up Вверх - + Left Вліво - + Down Вниз - + Right Вправо - + PrtSc PrtSc - + Ins Ins - + Del Del - + Home Home - + End End - + PgUp PgUp - + PgDn PgDn - + NumLock NumLock - + * * - + + + - + KP_Enter KP_Enter - + KP_1 KP_1 - + KP_2 KP_2 - + KP_3 KP_3 - + KP_4 KP_4 - + KP_5 KP_5 - + KP_6 KP_6 - + KP_7 KP_7 - + KP_8 KP_8 - + KP_9 KP_9 - + KP_0 KP_0 - + SCLK SCLK - + Pause Pause - + Super_R Super_П - + Mute Mute - + VolDn VolDn - + VolUp VolUp - + Play Play - + Stop Stop - + Prev Prev - + Next Next - + [NO KEY] [НЕМАЄ КНОПКИ] @@ -5648,54 +5677,54 @@ Please check that you have permission to write to the device UnixWindowInfoDialog - + Captured Window Properties - + Information About Window - + Class: - - - + + + TextLabel - + Title: - + Path: - + Match By Properties - + Class - + Title - + Path @@ -5703,9 +5732,9 @@ Please check that you have permission to write to the device VDPad - - - + + + VDPad VDPad @@ -5713,224 +5742,224 @@ Please check that you have permission to write to the device VirtualKeyPushButton - + Space Пробіл - + Tab Tab - + Shift (L) Shift (Л) - + Shift (R) Shift (П) - + Ctrl (L) Ctrl (Л) - + Ctrl (R) Ctrl (П) - + Alt (L) Alt (Л) - - + + Alt (R) Alt (П) - + Alt Gr - + ` ` - + ~ ~ - - + + - - - + = = - + [ [ - + ] ] - + \ \ - + Caps Caps - + ; ; - + ' ' - + , , - - + + . . - - + + / / - + ESC ESC - + PRTSC PRTSC - + SCLK SCLK - + INS INS - + PGUP PGUP - + DEL DEL - + PGDN PGDN - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - + NUM LK NUM LK - - + + * * - + + + - + Enter Enter @@ -5947,42 +5976,42 @@ E R - + < < - + : : - + Super (L) Super (Л) - + Menu Меню - + Up Вверх - + Down Вниз - + Left Вліво - + Right Вправо @@ -5990,226 +6019,226 @@ R VirtualKeyboardMouseWidget - - + + Keyboard Клавіатура - - + + Mouse Мишка - + Left Mouse Вліво - + Up Mouse Вверх - + Left Button Mouse Ліва кнопка - + Middle Button Mouse Середня кнопка - + Right Button Mouse Права кнопка - + Wheel Up Mouse Коліщатко вверх - + Wheel Left Mouse Коліщатко вліво - + Wheel Right Mouse Коліщатко вправо - + Wheel Down Mouse Коліщатко вниз - + Down Mouse Вниз - + Right Mouse Вправо - + Button 4 Mouse Кнопка 4 - + Mouse 8 Mouse Мишка 8 - + Button 5 Mouse Кнопка 5 - + Mouse 9 Mouse Мишка 9 - + Mouse Settings Параметри мишки - + NONE Відсутній - - + + Last button - - + + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + Others - + Applications - + Browser Back - + Browser Favorites - + Browser Forward - + Browser Home - + Browser Refresh - + Browser Search - + Browser Stop - + Calc - + Email - + Media Media - + Media Next - + Media Play - + Media Previous - + Media Stop - + Search Пошук - + Volume Down - + Volume Mute - + Volume Up @@ -6217,7 +6246,7 @@ R VirtualMousePushButton - + INVALID ХИБНИЙ @@ -6225,28 +6254,28 @@ R WinAppProfileTimerDialog - - + + Capture Application Захопити програму - + After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. Після натискання «Захопити програму», зробіть активним вікно програм, яку ви хочете прив'язати до поточного профілю. Активне вікно буде захоплено через вказаний проміжок часу. - + Timer: Таймер: - + Seconds Секунд - + Cancel Скасувати @@ -6254,12 +6283,12 @@ R WinExtras - + [NO KEY] [НЕМАЄ КНОПКИ] - + AntiMicro Profile AntiMicro профіль @@ -6267,67 +6296,66 @@ R X11Extras - + ESC ESC - + Tab Tab - + Space Пробіл - + DEL DEL - + Return Return - + KP_Enter KP_Enter - + Backspace Backspace - + Alt Gr - + xinput extension was not found. No mouse acceleration changes will occur. Розширення xinput не знайдено. Зміна швидкості миші не використовується. - + xinput version must be at least 2.0. No mouse acceleration changes will occur. Версія xinput має бути вище 2.0. Зміна швидкості миші не використовується. - Virtual pointer found with id=%1. - Віртуальний вказівник знайдено із id=%1. + Віртуальний вказівник знайдено із id=%1. - + PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 Не знайдено PtrFeedbackClass для віртуального вказівника. Зміна швидкості миші не використовується для пристрою із id=%1 - + Changing mouse acceleration for device with id=%1 Зміна прискорення мишки для пристрою із id=%1 @@ -6335,7 +6363,7 @@ R XMLConfigReader - + Could not write updated profile XML to file %1. Неможливо записати оновлений профіль до файлу %1. @@ -6343,7 +6371,7 @@ R XMLConfigWriter - + Could not write to profile at %1. Неможливо записати профіль як %1. @@ -6351,7 +6379,7 @@ R antimicro - + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. @@ -6359,97 +6387,97 @@ R main - + Launch program in system tray only. Запустити програму згорнутою у системний лоток. - + Launch program with the tray menu disabled - + Launch program without the main window displayed - + Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers - + location - + Apply configuration file to a specific controller. Value can be a controller index, name, or GUID - + value - + Unload currently enabled profile(s) - + value(s) - + Start joysticks on a specific set. Value can be a controller index, name, or GUID - + number value - + Launch program as a daemon. Use only on Linux. - + Enable logging - + log-type - + Choose a file for logs writing - + filename - + Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. - + event-generation-type - + Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. diff --git a/share/antimicro/translations/antimicro_zh_CN.ts b/share/antimicro/translations/antimicro_zh_CN.ts old mode 100644 new mode 100755 index ae17569d0..7875d1237 --- a/share/antimicro/translations/antimicro_zh_CN.ts +++ b/share/antimicro/translations/antimicro_zh_CN.ts @@ -4,22 +4,22 @@ AboutDialog - + About 关于 - + antimicro antimicro - + Version 版本 - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -63,12 +63,12 @@ p, li { white-space: pre-wrap; } - + Info 信息 - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -186,12 +186,12 @@ p, li { white-space: pre-wrap; } - + Changelog 更新日志 - + "juliagoda" (since March, 2018) Wanting only to play my favourite old games that din't support gamepads, I found this project (which map keyboard keys and mouse buttons to connected gamepads on Linux) as most proper and recent. But because of poor choices of such application on the internet and since it didn't compile properly, I decided to rescue the project. However, once I finished my work (enough to enjoy playing games) I thought about sharing this code with others. Of course all informations about past programmers will be held. "Ryochan7" (since December 30, 2012 until 2017), I have been working on antimicro in my spare time. What originally started as a fork of QJoyPad and a way to learn proper event-driven programming has turned into something much bigger than I originally intended. Although I have spent a lot of time learning new techniques, finding out more about the domain of KB+M emulation, and spending Friday nights bashing my head against my keyboard, it has been a fun and enriching experience overall. @@ -209,7 +209,7 @@ As of May 24, 2016, this project has moved to https://github.com/AntiMicro/antim - + Copyright: 2013 - 2018 版权:2013 - 2018 {2013 ?} @@ -243,7 +243,7 @@ As of May 24, 2016, this project has moved to https://github.com/AntiMicro/antim 版权:2013 - 2016 - + Credits 致谢 @@ -546,42 +546,42 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.</span></p></body></html> - + About Development 关于开发 - + License 许可 - + Program Version %1 程序版本 %1 - + Program Compiled on %1 at %2 编译时间 %1 %2 - + Built Against SDL %1 使用 SDL %1 构建 - + Running With SDL %1 使用 SDL %1 运行 - + Using Qt %1 使用 Qt %1 - + Using Event Handler: %1 使用事件处理程序:%1 @@ -589,29 +589,29 @@ p, li { white-space: pre-wrap; } AddEditAutoProfileDialog - + Auto Profile Dialog 自动配置文件对话框 - + Profile: 配置文件: - - + + Browse 浏览 - + Window: 窗口: - - + + Select Window. Click on the appropriate application window and the application file path will be populated in the form. @@ -619,38 +619,47 @@ in the form. 单击应用程序的窗口,程序文件路径将被自动填入表格。 - + Detect Window Properties 检测窗口属性 - + Class: 类: - + Title: 标题: - + + set partial title + + + + Application: 应用程序: - + Select 选择 - + + De&vices: + + + Devices: - 设备: + 设备: - - + + Select this profile to be the default loaded for the specified device. The selection will be used instead of the all default profile option. @@ -658,84 +667,84 @@ of the all default profile option. 这个配置文件将取代全局默认配置文件选项。 - + Set as Default for Controller 设为上述设备的默认配置文件 - - + + A different profile is already selected as the default for this device. 这个设备已被指定了另一个不同的默认配置文件。 - + Current (%1) 当前 (%1) - + Open Config 打开配置文件 - - + + Select Program 选择程序 - + Programs (*.exe) 程序 (*.exe) - + Please use the main default profile selection. 请使用全局默认配置文件选项。 - + Please select a window by using the mouse. Press Escape if you want to cancel. 请使用鼠标选择窗口。按 Esc 键取消。 - + Capture Application Window 捕捉应用程序窗口 - + Could not obtain information for the selected window. 无法获得所选窗口的信息。 - + Application Capture Failed 应用程序捕捉失败 - + Profile file path is invalid. 配置文件路径无效。 - + No window matching property was specified. 未指定窗口匹配属性。 - + Program path is invalid or not executable. 程序路径无效或非可执行文件。 - + File is not an .exe file. 文件不是 .exe 文件。 - + No window matching property was selected. 未选择窗口匹配属性。 @@ -743,502 +752,502 @@ of the all default profile option. AdvanceButtonDialog - - + + Advanced 高级选项 - + Assignments 分配 - + Toggle 开关 - + Turbo 连发 - + Set Selector 设置选择器 - + Blank or KB/M 空白或键鼠 - + Hold 按下 - + Pause 暂停 - + Cycle 周期 - + Distance 距离 - + Insert 插入 - + Delete 删除 - + Clear All 清除所有 - + Time: 时间: - + 0.01s 0.01秒 - + 0s 0秒 - + Insert a pause that occurs in between key presses. 在按键间插入暂停。 - + Release 释放 - - + + Insert a new blank slot. 插入新动作。 - + Delete a slot. 删除所选动作。 - + Clear all currently assigned slots. 清除所有动作。 - + Specify the duration of an inserted Pause or Hold slot. 为“暂停”或“按下”动作指定所需时长。 - + 0m 0分 - + &Mouse Speed Mod: 鼠标速度更改 (&M): - - + + Specify the range past an axis dead zone in which a sequence of actions will execute. 为“距离”动作指定所需的超过不灵敏区的距离。 - + Distance: 距离: - - + + % % - + Mouse Mod 鼠标变速 - + Press Time 按下时间 - + Delay 延迟 - + Execute 运行 - + Load 载入 - + Set Change 设置改变 - + Text Entry 文本键入 - + Placeholder 占位符 - - + + 0 0 - + Set the percentage that mouse speeds will be modified by. 设置鼠标移动速度百分比。 - + Auto Reset Cycle After 在此时间之后取消未完成的“周期”动作 - + seconds - + Executable: 可执行文件: - + ... ... - + Arguments: 参数: - - - + + + Enabled 启用 - + Mode: 模式: - + <html><head/><body><p>Normal: Repeatedly press and release a button by the chosen rate.</p><p>Gradient: Modify the button press and button release delay based on how far an axis has been moved. The rate will remain the same.</p><p>Pulse: Modify how many times a button is pressed and released per second. The button delay will remain the same.</p></body></html> <html><head/><body><p>正常:以所选频率重复按下并释放按键。</p><p>梯度:根据轴移动幅度调整按钮被按下和释放的延迟。频率保持不变。</p><p>脉冲:调整每秒按钮被按下和释放的次数。按钮延迟保持不变。</p></body></html> - + Normal 正常 - + Gradient 梯度 - + Pulse 脉冲 - + Delay: 延迟: - + 0.10s 0.10秒 - + Rate: 频率: - + 10.0/s 10.0/秒 - - + + Disabled 禁用 - + Select Set 1 One Way 单向选择设置1 - + Select Set 1 Two Way 双向选择设置1 - + Select Set 1 While Held 按下时选择设置1 - + Select Set 2 One Way 单向选择设置2 - + Select Set 2 Two Way 双向选择设置2 - + Select Set 2 While Held 按下时选择设置2 - + Select Set 3 One Way 单向选择设置3 - + Select Set 3 Two Way 双向选择设置3 - + Select Set 3 While Held 按下时选择设置3 - + Select Set 4 One Way 单向选择设置4 - + Select Set 4 Two Way 双向选择设置4 - + Select Set 4 While Held 按下时选择设置4 - + Select Set 5 One Way 单向选择设置5 - + Select Set 5 Two Way 双向选择设置5 - + Select Set 5 While Held 按下时选择设置5 - + Select Set 6 One Way 单向选择设置6 - + Select Set 6 Two Way 双向选择设置6 - + Select Set 6 While Held 按下时选择设置6 - + Select Set 7 One Way 单向选择设置7 - + Select Set 7 Two Way 双向选择设置7 - + Select Set 7 While Held 按下时选择设置7 - + Select Set 8 One Way 单向选择设置8 - + Select Set 8 Two Way 双向选择设置8 - + Select Set 8 While Held 按下时选择设置8 - + sec. 秒。 - + /sec. /秒。 - + Set %1 设置%1 - - + + Select Set %1 选择设置%1 - + One Way 单向 - + Two Way 双向 - + While Held 按下时 - + Choose Executable 选择可执行文件 - + Slots past a Cycle action will be executed on the next button press. Multiple cycles can be added in order to create partitions in a sequence. “周期”动作之后的动作将在下一次按下相同按钮的时候被执行。可以添加多个“周期”动作来创建一个按键序列中不同的子序列。 - + Delays the time that the next slot is activated by the time specified. Slots activated before the delay will remain active after the delay time has passed. 根据指定时长延迟下个动作开始执行的时间。延迟之前处于活动状态的动作将在延迟结束后保持活动状态。 - + Distance action specifies that the slots afterwards will only be executed when an axis is moved a certain range past the designated dead zone. “距离”动作之后的动作只有在轴移出不灵敏区并超过指定距离之后才会被执行。 - + Insert a hold action. Slots after the action will only be executed if the button is held past the interval specified. 插入一个“按下”动作。“按下”动作之后的动作只有在按钮被按下超过指定的时长之后才会被执行。 - + Chose a profile to load when this slot is activated. 当该动作被执行时,载入所选配置文件。 - + Mouse mod action will modify all mouse speed settings by a specified percentage while the action is being processed. This can be useful for slowing down the mouse while sniping. “鼠标变速”动作被处理时,将根据指定的百分比改变所有鼠标速度。这可以用在狙击时减缓鼠标速度。 - + Specify the time that keys past this slot should be held down. 按钮被按下超过指定的时长将保持被按下的状态。 - + Insert a release action. Slots after the action will only be executed after a button release if the button was held past the interval specified. 插入一个“释放”动作。“释放”动作之后的动作只有在按钮被按下超过指定时长并被释放之后才会被执行。 - + Change to selected set once slot is activated. 该动作被执行时,切换到所选的设置。 - + Full string will be typed when a slot is activated. 当该动作被执行时,整个字符串将被键入。 - + Execute program when slot is activated. 当该动作被执行时,运行一个程序。 - - + + Choose Profile 选择配置文件 - + Config Files (*.amgp *.xml) 配置文件 (*.amgp *.xml) @@ -1246,157 +1255,157 @@ of the all default profile option. AdvanceStickAssignmentDialog - + Stick/Pad Assignment 摇杆/十字键分配 - + Sticks 摇杆 - + DPads 十字键 - - + + %1 (Joystick %2) %1(手柄%2) - + Stick 1 手柄1 - - - + + + Enabled 启用 - - - - - - + + + + + + Assign 分配 - - + + X Axis: X轴: - - + + Y Axis: Y轴: - + Stick 2 手柄2 - + Number of Physical DPads: %1 物理十字键数:%1 - + Virtual DPad 1 虚拟十字键1 - + Up: 上: - + Down: 下: - + Note: This window is meant for backwards compatibility with profiles made before antimicro 2.0. Since version 2.0, use of the Game Controller Mapping window is preferred. 注意:这个窗口是为了兼容 antimicro 2.0 版之前创建的配置文件。自 antimicro 2.0 起,推荐使用游戏控制器映射窗口。 - + Left: 左: - + Right: 右: - - - - + + + + Axis %1 轴%1 - - - - + + + + Axis %1 - 轴%1 - - - - - + + + + Axis %1 + 轴%1 + - - - - + + + + Button %1 按钮%1 - + Move stick 1 along the X axis 沿X轴移动摇杆1 - + Move stick 1 along the Y axis 沿Y轴移动摇杆1 - + Move stick 2 along the X axis 沿X轴移动摇杆2 - + Move stick 2 along the Y axis 沿Y轴移动摇杆2 - - - - + + + + Press a button or move an axis 按任意键或移动任意轴 @@ -1404,180 +1413,180 @@ of the all default profile option. AxisEditDialog - + Axis - - + + Mouse (Horizontal) 鼠标(水平) - - + + Mouse (Inverted Horizontal) 鼠标(水平翻转) - - + + Mouse (Vertical) 鼠标(垂直) - - + + Mouse (Inverted Vertical) 鼠标(垂直翻转) - - + + Arrows: Up | Down 方向键:上|下 - - + + Arrows: Left | Right 方向键:左|右 - - + + Keys: W | S 按键:W | S - - + + Keys: A | D 按键:A | D - - + + NumPad: KP_8 | KP_2 数字键盘:8 | 2 - - + + NumPad: KP_4 | KP_6 数字键盘:4 | 6 - - - + + + None - - + + Set the value to use as the limit for an axis. Useful for a worn out analog stick. 设置轴的最大值。 对老旧磨损的模拟摇杆尤其有帮助。 - + Negative Half Throttle 负半阀 - + Positive Half Throttle 正半阀 - + Name: 名称: - + Specify the name of an axis. 指定轴的名称。 - + Mouse Settings 鼠标设置 - - + + Set the value of the dead zone for an axis. 设置轴的不灵敏区。 - + Presets: 预设: - + Dead Zone: 不灵敏区: - + Max Zone: 最大区: - - + + [NO KEY] [无按键] - + Throttle setting that determines the behavior of how to interpret an axis hold or release. 阀设置决定如何判断一个轴的按下和释放。 - + Negative Throttle 负阀 - + Normal 正常 - + Positive Throttle 正阀 - + Current Value: 当前值: - + Set 设置 - + Set %1 设置%1 - + Left Mouse Button 鼠标左键 - + Right Mouse Button 鼠标右键 @@ -1585,38 +1594,38 @@ interpret an axis hold or release. ButtonEditDialog - + Dialog 对话框 - + To make a new assignment, press any keyboard key or click a button in the Keyboard or Mouse tab 若想分配按键,请按键盘上任意键或在键盘、鼠标页上点击按钮 - + Placeholder 占位符 - + Toggle 开关 - + Enables a key press or release to only occur when a controller button is pressed. 当游戏控制器按钮被按下时,按下或释放某个按键,并一直保持此状态。 - + Enables rapid key presses and releases. Turbo controller. 快速按下和释放某个键。 连发游戏控制器。 - + Turbo 连发 @@ -1625,38 +1634,38 @@ interpret an axis hold or release. 当前: - + Last keyboard/mouse button: - + Slots 动作 - + Na&me: 名称 (&m): - + Specify the name of a button. 指定按钮的名称。 - + Action: 动作: - + Specify the action that will be performed in game while this button is being used. 指定游戏中这个按钮被按下时的动作。 - + Advanced 高级选项 @@ -1669,52 +1678,52 @@ this button is being used. 设置%1 - - - + + + Choose your keyboard key - + No button - - - - + + + + Last button - + To change settings for last button, it must be at least one assignment from keyboard to gamepad - + To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad - + To open advanced dialog, it's needed to map at least one button from keyboard to gamepad - + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + As last gamepad button has been set - + Index %1 @@ -1722,190 +1731,190 @@ this button is being used. Calibration - + Form - - + + Start calibration - + Controller: - + Sticks: - - Use settings from jstest-gtk - - - - + Reset settings - + Cancel 取消 - - + + Save 保存 - - + + Calibration - - Do you really want to reset settings of current axes? + + Do you really want to reset settings of current axis? - + Calibration was saved for the preset. Do you really want to reset settings? - + Place the joystick in the center position. It's the part, where often you don't have to move. Just skip it in such situation. - + Calibrating center - + Start second step - + Center X: %1 - + Center Y: %1 - + Place the joystick in the top-left corner many times - - + + Calibrating position - - + + X: %1 - - + + Y: %1 - + Place the joystick in the bottom-right corner - + Start final step - + range X: %1 - %2 - + range Y: %1 - %2 - + deadzone X: %1 - + deadzone Y: %1 - + ---Calibration done!--- - + Calibration values have been saved - - + + Dead zone calibration - - You must move X axis to the right at least five times! Keep moving! + + You have to move axes to the top-left corner at least five times. + + + + + You have to move axes to the bottom-right corner at least five times. - - You must move X axis to the left at least five times! Keep moving! + + Do you want to save calibration of current axis? - - - - + + + + Axis %1 轴%1 @@ -1913,64 +1922,64 @@ deadzone Y: %1 CapturedWindowInfoDialog - + Captured Window Properties 捕获的窗口属性 - + Information About Window 窗口信息 - + Class: 类: - - - + + + TextLabel 文本标签 - + Title: 标题: - + Path: 路径: - + Match By Properties 根据属性匹配 - + Class - + Title 标题 - + Path 路径 - + Full Path 全路径 - + File Name 文件名 @@ -2122,67 +2131,67 @@ deadzone Y: %1 DPadContextMenu - + Mouse (Normal) 鼠标(正常) - + Mouse (Inverted Horizontal) 鼠标(水平翻转) - + Mouse (Inverted Vertical) 鼠标(垂直翻转) - + Mouse (Inverted Horizontal + Vertical) 鼠标(水平翻转 + 垂直翻转) - + Arrows 方向键 - + Keys: W | A | S | D 按键:W | A | S | D - + NumPad 数字键盘 - + None - + Standard 标准 - + Eight Way 八向 - + 4 Way Cardinal 正四向 - + 4 Way Diagonal 斜四向 - + Mouse Settings 鼠标设置 @@ -2190,108 +2199,108 @@ deadzone Y: %1 DPadEditDialog - + Dialog 对话框 - + Presets: 预设: - + Mouse (Normal) 鼠标(正常) - + Mouse (Inverted Horizontal) 鼠标(水平翻转) - + Mouse (Inverted Vertical) 鼠标(垂直翻转) - + Mouse (Inverted Horizontal + Vertical) 鼠标(水平翻转 + 垂直翻转) - + Arrows 方向键 - + Keys: W | A | S | D 按键:W | A | S | D - + NumPad 数字键盘 - + None - + Dpad Mode: 十字键模式: - + &Name: 名称 (&N): - + 4 Way Cardinal 正四向 - + 4 Way Diagonal 斜四向 - + DPad Delay: 十字键延迟: - - + + Time lapsed before a direction change is taken into effect. 方向改变生效前的延迟。 - + s - + Specify the name of a dpad. 指定十字键的名称。 - + Mouse Settings 鼠标设置 - + Standard 标准 - + Standard: 8 region dpad with two direction buttons active when the dpad is in a diagonal region. @@ -2310,17 +2319,17 @@ to a diagonal zone. 斜四向:十字键有四个区域,分别对应对角线的四个方向。 - + Eight Way 八向 - + Set 设置 - + Set %1 设置%1 @@ -2328,27 +2337,27 @@ to a diagonal zone. EditAllDefaultAutoProfileDialog - + Default Profile 默认配置文件 - + Profile: 配置文件: - + Browse 浏览 - + Open Config 打开配置文件 - + Profile file path is invalid. 配置文件路径无效。 @@ -2356,29 +2365,29 @@ to a diagonal zone. ExtraProfileSettingsDialog - + Extra Profile Settings 附加配置文件设置 - + Key Press Time: 按键按下时间: - + 0.00 ms 0.00毫秒 - + Profile Name: 配置文件名称: - - - + + + s @@ -2386,7 +2395,7 @@ to a diagonal zone. GameController - + Game Controller 游戏控制器 @@ -2394,9 +2403,9 @@ to a diagonal zone. GameControllerDPad - - - + + + DPad 十字键 @@ -2404,187 +2413,187 @@ to a diagonal zone. GameControllerMappingDialog - + Game Controller Mapping 游戏控制器映射 - + <html><head/><body><p>antimicro makes use of the <a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">Game Controller API</span></a> provided by SDL 2 in order to abstract various gamepads to fit a unified standard. In order to make a button assignment, please highlight the mapping cell for the appropriate button row below. You can then press a button or move an axis on your gamepad and the cell will update with the physical button or axis that will be used.</p><p>antimicro will use the mapping that you specify to save a mapping string that will be loaded into SDL.</p></body></html> <html><head/><body><p>antimicro 使用 SDL 2 的<a href="https://wiki.libsdl.org/CategoryGameController"><span style=" text-decoration: underline; color:#0057ae;">游戏控制器应用程序接口</span></a>把各式各样的手柄进行抽象,使它们适用于统一的标准。若要进行按钮分配,请选择下面相应的按钮映射单元格。之后您可以按一个按钮或者移动手柄上的一个轴,映射单元格将更新以匹配这个物理按键或轴。</p><p>antimicro 将把您指定的映射保存为一个字符串,而这个字符串将被加载到 SDL 中。</p></body></html> - + A A键 - + B B键 - + X X键 - + Y Y键 - + Back 后退键 - + Start 开始键 - + Guide 导航键 - + Left Shoulder 左肩键 - + Right Shoulder 右肩键 - + Left Stick Click 左摇杆点击 - + Right Stick Click 右摇杆点击 - + Left Stick X 左摇杆X轴 - + Left Stick Y 左摇杆Y轴 - + Right Stick X 右摇杆X轴 - + Right Stick Y 右摇杆Y轴 - + Left Trigger 左扳机 - + Right Trigger 右扳机 - + DPad Up 十字键上 - + DPad Left 十字键左 - + DPad Down 十字键下 - + DPad Right 十字键右 - + Mapping 映射 - + SDL 2 Game Controller Mapping String SDL 游戏控制器映射字符串 - + Last Axis Event: 最近轴事件: - + Current Axis Detection Dead Zone: 当前轴不灵敏区: - + 5000 5000 - + 10000 10000 - + 15000 15000 - + 20000 20000 - + 25000 25000 - + 30000 30000 - + 32000 32000 - + Game Controller Mapping (%1) (#%2) 游戏控制器映射 (%1) (#%2) - + Discard Controller Mapping? 放弃修改游戏控制器映射? - + Discard mapping for this controller? If discarded, the controller will be reverted to a joystick once you refresh all joysticks. @@ -2596,47 +2605,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerSet - + Back 后退键 - + Guide 导航键 - + Start 开始键 - + LS Click 左摇杆点击 - + RS Click 右摇杆点击 - + L Shoulder 左肩键 - + R Shoulder 右肩键 - + L Trigger 左扳机 - + R Trigger 右扳机 @@ -2644,9 +2653,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all GameControllerTrigger - - - + + + Trigger 扳机 @@ -2654,9 +2663,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxis - - - + + + Axis @@ -2664,24 +2673,24 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisButton - + Negative - + Positive - + Unknown 未知 - - - + + + Button 按钮 @@ -2689,74 +2698,74 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyAxisContextMenu - + Mouse (Horizontal) 鼠标(水平) - + Mouse (Inverted Horizontal) 鼠标(水平翻转) - + Mouse (Vertical) 鼠标(垂直) - + Mouse (Inverted Vertical) 鼠标(垂直翻转) - + Arrows: Up | Down 方向键:上|下 - + Arrows: Left | Right 方向键:左|右 - + Keys: W | S 按键:W | S - + Keys: A | D 按键:A | D - + NumPad: KP_8 | KP_2 数字键盘:8 | 2 - + NumPad: KP_4 | KP_6 数字键盘:4 | 6 - - + + None - - + + Mouse Settings 鼠标设置 - + Left Mouse Button 鼠标左键 - + Right Mouse Button 鼠标右键 @@ -2764,57 +2773,57 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButton - + Processing turbo for #%1 - %2 正在处理按钮#%1-%2的连发 - + Finishing turbo for button #%1 - %2 正在完成按钮#%1-%2的连发 - + Processing press for button #%1 - %2 正在处理按下按钮#%1-%2 - + Processing release for button #%1 - %2 正在处理释放按钮#%1-%2 - + Distance change for button #%1 - %2 按钮#%1-%2距离改变 - - - + + + Button 按钮 - - - - + + + + [NO KEY] [无按键] - + [Set %1 1W] [单向选择设置%1] - + [Set %1 2W] [双向选择设置%1] - + [Set %1 WH] [按下时选择设置%1] @@ -2822,47 +2831,47 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonContextMenu - + Toggle 开关 - + Turbo 连发 - + Clear 清除 - + Set Select 选择设置 - + Disabled 禁用 - + Set %1 设置%1 - + Set %1 1W 单向选择设置%1 - + Set %1 2W 双向选择设置%1 - + Set %1 WH 按下时选择设置%1 @@ -2870,118 +2879,118 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyButtonSlot - - + + Mouse 鼠标 - + Up - + Down - + Left - + Right - + LB 鼠标左键 - + MB 鼠标中键 - + RB 鼠标右键 - + B4 按钮4 - + B5 按钮5 - + Pause 暂停 - + Hold 按下 - + Cycle 周期 - + Distance 距离 - + Release 释放 - + Mouse Mod 鼠标变速 - + Press Time 按下时间 - + Delay 延迟 - + Load %1 载入%1 - + Set Change %1 设置改变%1 - + [Text] %1 [文本]%1 - + [Exec] %1 [运行]%1 - + [NO KEY] [无按键] @@ -2989,9 +2998,9 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStick - - - + + + Stick 摇杆 @@ -2999,37 +3008,37 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickButton - - - + + + Up - - - + + + Down - - - + + + Left - - - + + + Right - - - + + + Button 按钮 @@ -3037,67 +3046,67 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickContextMenu - + Mouse (Normal) 鼠标(正常) - + Mouse (Inverted Horizontal) 鼠标(水平翻转) - + Mouse (Inverted Vertical) 鼠标(垂直翻转) - + Mouse (Inverted Horizontal + Vertical) 鼠标(水平翻转 + 垂直翻转) - + Arrows 方向键 - + Keys: W | A | S | D 按键:W | A | S | D - + NumPad 数字键盘 - + None - + Standard 标准 - + Eight Way 八向 - + 4 Way Cardinal 正四向 - + 4 Way Diagonal 斜四向 - + Mouse Settings 鼠标设置 @@ -3105,86 +3114,86 @@ If discarded, the controller will be reverted to a joystick once you refresh all JoyControlStickEditDialog - + Dialog 对话框 - + X: X轴: - - - - - + + + + + 0 0 - + Y: Y轴: - + Distance: 距离: - + Presets: 预设: - + Mouse (Normal) 鼠标(正常) - + Mouse (Inverted Horizontal) 鼠标(水平翻转) - + Mouse (Inverted Vertical) 鼠标(垂直翻转) - + Mouse (Inverted Horizontal + Vertical) 鼠标(水平翻转 + 垂直翻转) - + Arrows 方向键 - + Keys: W | A | S | D 按键:W | A | S | D - + NumPad 数字键盘 - + None - + Stick Mode: 摇杆模式: - + Standard: 8 region stick with two direction buttons active when the stick is in a diagonal region. @@ -3203,72 +3212,72 @@ to a diagonal zone of the stick. 斜四向:摇杆有四个区域,分别对应对角线的四个方向。 - + 4 Way Cardinal 正四向 - + 4 Way Diagonal 斜四向 - - + + Dead zone value to use for an analog stick. 设置模拟摇杆的不灵敏区。 - - + + Value when an analog stick is considered moved 100%. 设置模拟摇杆的最大值。当达到这个值时,模拟摇杆被认为移动到了100%的位置。 - - + + The area (in degrees) that each diagonal region occupies. 每个对角线区域的角度数。 - + Square Stick: 方形摇杆: - - + + Percentage to modify a square stick coordinates to confine values to a circle 这个百分比用来调整方形摇杆的坐标值使其被限制在一个圆里 - + % % - + Stick Delay: 摇杆延迟: - - + + Time lapsed before a direction change is taken into effect. 方向改变生效前的延迟。 - + s - + Modifier: 修饰键: - + Edit button that is active while the stick is active. This button is useful for assigning zones with @@ -3278,68 +3287,68 @@ functionality to an analog stick. 这个按钮尤其适用于分配带有修饰键的区域,例如在模拟摇杆上分配行走/跑步的功能。 - + PushButton 按钮 - + Na&me: Name: 名称: - + Specify the name of an analog stick. 指定模拟摇杆的名称。 - + Mouse Settings 鼠标设置 - + Standard 标准 - + Bearing: 方向: - + % Safe Zone: 安全区(%): - + Eight Way 八向 - + Dead Zone: 不灵敏区: - + Max Zone: 最大区: - + Diagonal Range: 对角线区域范围: - + Set 设置 - + Set %1 设置%1 @@ -3347,9 +3356,9 @@ functionality to an analog stick. JoyControlStickModifierButton - - - + + + Modifier 修饰 @@ -3357,9 +3366,9 @@ functionality to an analog stick. JoyDPad - - - + + + DPad 十字键 @@ -3367,37 +3376,37 @@ functionality to an analog stick. JoyDPadButton - - - + + + Up - - - + + + Down - - - + + + Left - - - + + + Right - - - + + + Button 按钮 @@ -3405,266 +3414,271 @@ functionality to an analog stick. JoyTabWidget - - - - - - + + + + + + <New> <新> - - + + Remove 移除 - - + + Remove configuration from recent list. 从最近使用列表中移除配置。 - - + + Load 载入 - - + + Load configuration file. 载入配置文件。 - - + + Save 保存 - - + + Save changes to configuration file. 保存更改到配置文件。 - - + + Save As 另存为 - - + + Save changes to a new configuration file. 保存更改到新的配置文件。 - - + + Sets 设置 - + Copy from Set 从设置复制 - + Settings 设置 - - + + Set 1 设置1 - - + + Set 2 设置2 - - + + Set 3 设置3 - - + + Set 4 设置4 - - + + Set 5 设置5 - - + + Set 6 设置6 - - + + Set 7 设置7 - - + + Set 8 设置8 - - + + Stick/Pad Assign 摇杆/十字键分配 - - + + Controller Mapping 游戏控制器映射 - - + + Quick Set 快速设置 - - + + Names 名称 - - + + Toggle button name displaying. 开关按钮名称显示。 - - + + Pref 偏好设置 - - + + Change global profile settings. 改变全局配置文件设置。 - - - + + + Reset 重置 - - + + Revert changes to the configuration. Reload configuration file. 还原设置的更改。重新加载配置文件。 - + Open Config 打开配置文件 - + Config Files (*.amgp *.xml) 配置文件 (*.amgp *.xml) - - - + + + Config File (*.%1.amgp) 配置文件 (*.%1.amgp) - - + + Do you really want to reset buttons settings for joystick? + + + + + Save Profile Changes? 保存配置文件更改? - - + + Changes to the new profile have not been saved. Would you like to save or discard the current profile? 新配置文件的更改尚未保存。您想保存还是放弃修改当前的配置文件? - - + + Changes to the profile "%1" have not been saved. Would you like to save or discard changes to the current profile? 配置文件“%1”的更改尚未保存。您想保存还是放弃修改此配置文件? - + Sticks 摇杆 - - + + DPads 十字键 - + No buttons have been assigned. Please use Quick Set to assign keys to buttons or disable hiding empty buttons. 按钮未被分配。请使用“快速设置”来将按键分配到按钮,或取消隐藏空白按钮。 - - + + Set %1: %2 设置%1:%2 - - + + Set %1 设置%1 - + Copy Set Assignments 复制设置分配信息 - + Are you sure you want to copy the assignments and device properties from %1? 您确定要从 %1 复制分配信息和设备属性吗? - - - + + + Save Config 保存配置文件 - - + + Set 设置 @@ -3672,7 +3686,7 @@ to buttons or disable hiding empty buttons. Joystick - + Joystick 摇杆 @@ -3680,98 +3694,98 @@ to buttons or disable hiding empty buttons. JoystickStatusWindow - + Properties 属性 - + Details 详细信息 - + Name: 名称: - - - - - - - + + + + + + + %1 %1 - + Number: 编号: - + Axes: 轴数: - + Buttons: 按钮数: - + Hats: 帽子开关数: - + GUID: 全局唯一标识符: - + Game Controller: 是否为手柄: - + Axes - + Buttons 按钮 - + Hats 帽子开关 - + %1 (#%2) Properties %1 (#%2) 属性 - + Axis %1 轴%1 - + Hat %1 帽子开关%1 - + No - + Yes @@ -3779,62 +3793,67 @@ to buttons or disable hiding empty buttons. MainSettingsDialog - + Edit Settings 编辑设置 - + General 常规 - + Controller Mappings 游戏控制器映射 - + Language 语言 - + Auto Profile 自动配置文件 - + Mouse 鼠标 - + Advanced 高级选项 - + + Profile Direc&tory: + + + + <html><head/><body><p>Specify the default directory that the program should use in file dialogs when loading a profile or saving a new profile.</p></body></html> <html><head/><body><p>指定本程序在加载或保存一个配置文件时,文件对话框中默认使用的路径。</p></body></html> - + Recent Profile Count: 最近使用的配置文件数: - + <html><head/><body><p>Number of profiles that can be placed in recent profile list. 0 will result in the program not enforcing a limit on the number of profiles displayed.</p></body></html> <html><head/><body><p>最近使用的配置文件列表中配置文件的数量。设为0将显示所有最近使用的配置文件。</p></body></html> - + Gamepad Poll Rate: 手柄轮询速率: - + Change the poll rate that the program uses to discover new events from gamepads. Defaults to 10 ms. @@ -3845,23 +3864,23 @@ before using antimicro unattended. 降低轮询速率可能会导致本程序使用更多的处理器资源。请在以无人值守方式使用前测试此选项。 - + Hide main window when the main window close button is clicked instead of quitting the program. 点击关闭按钮时,最小化主窗口到系统托盘而不是退出程序。 - + Close To Tray 关闭时最小化到系统托盘 - + Launch At Windows Startup Windows 开机自启动 - + Display recent profiles for all controllers as a single list in the tray menu. Defaults to using sub-menus. @@ -3869,12 +3888,12 @@ to using sub-menus. 默认是使用子菜单。 - + Single Profile List in Tray 系统托盘菜单中使用单一配置文件列表 - + Have the program minimize to the taskbar. By default, the program minimizes to the system tray if available. @@ -3882,12 +3901,12 @@ tray if available. 如果可能,默认情况下本程序将最小化到系统托盘。 - + Minimize to Taskbar 最小化到任务栏 - + This option will cause the program to hide all buttons that have no slots assigned to them. The Quick Set dialog window will have to be used @@ -3896,157 +3915,167 @@ to bring up the edit dialog for gamepad buttons. 您需要使用“快速设置”对话框来打开手柄按钮的编辑对话框。 - + Hide Empty Buttons 隐藏空白按钮 - + When the program is launched, open the last known profile that was opened during the previous session. 本程序启动时,打开上次使用的配置文件。 - + Auto Load Last Opened Profile 自动加载上次打开的配置文件 - + Only show the system tray icon when the program first launches. 首次启动本程序时只显示系统托盘。 - + Launch in Tray 启动时最小化到系统托盘 - + Associate Profiles 关联配置文件 - + Key Repeat 键重复 - + Active keys will be repeatedly pressed when this option is enabled. 此选项启用后,处于活动状态的按键将一直被重复按下。 - - + + Enable 启用 - + Português do Brasil 巴西葡萄牙语 - + Français 法语 - + Deutsch 德语 - + Italiano 意大利语 - + 日本語 日本语 - + Русский 俄语 - + српски / srpski 塞尔维亚语 - + Español 西班牙语 - + українська 乌克兰语 - + Polski - + + History Si&ze: + + + + Log File: 日志文件: - + Log Level: 日志级别: - + None - + Error 错误 - + Warning 警告 - + Info 信息 - + Debug 调试 - + + Reset + 重置 + + + Class - + Title 标题 - + Program 程序 - + Disable the "Enhanced Pointer Precision" Windows setting while antimicro is running. Disabling "Enhanced Pointer Precision" will allow mouse movement within antimicro to be more @@ -4055,22 +4084,22 @@ precise. 禁用“提高指针精确度”可使鼠标在开启 antimicro 的情况下更精准地移动。 - + Disable Enhance Pointer Precision 禁用提高指针精确度 - + Smoothing 平滑 - + Refresh Rate: 刷新率: - + The refresh rate is the amount of time that will elapse in between mouse events. Please be cautious when editing this setting as it will cause the program to use @@ -4083,29 +4112,29 @@ it unattended. 请在以无人值守方式使用前测试此选项。 - + Accel Numerator: 加速度分子: - - - + + + 0 0 - + Accel Denominator: 加速度分母: - + Accel Threshold: 加速度阈值: - + If the acceleration values for the virtual mouse have been changed by a different process, particularly when quitting an older game, then you might want to reset the acceleration @@ -4113,59 +4142,58 @@ values used by the virtual mouse. 如果虚拟鼠标的加速度值被另一个进程改变,尤其是在退出老游戏的时候,您可能需要重置虚拟鼠标使用的加速度值。 - + Reset Acceleration 重置加速度 - + Delay: 延迟: - Profi&le Directory: - 配置文件目录 (&l): + 配置文件目录 (&l): - + Have Windows start antimicro at system startup. 在 Windows 启动时运行本程序。 - + Associate .amgp files with antimicro in Windows Explorer. 在 Windows 资源管理器中将 .amgp 文件关联到 antimicro。 - + Specifies how much time should elapse before key repeating begins. 指定开始键重复之前的延迟时间。 - + ms 毫秒 - + Rate: 频率: - + Specifies how many times key presses will be performed per seconds. 指定每秒按键多少次。 - + times/s 次/秒 - + Below is a list of the custom mappings that have been saved. You can use the following table to delete mappings or have mappings temporarily disabled. You can also disable mappings that are included with SDL; just insert a new row with the appropriate joystick GUID and check disable. Settings will not take affect until you either refresh all joysticks or unplug that particular joystick. @@ -4174,116 +4202,115 @@ Settings will not take affect until you either refresh all joysticks or unplug t 设置仅在您刷新所有摇杆或者拔出那个被禁用的摇杆之后生效。 - + GUID 全局唯一标识符 - + Mapping String 映射字符串 - + Disable? 禁用? - - + + Delete 删除 - + Insert 插入 - + <html><head/><body><p>antimicro has been translated into many different languages by contributors. By default, the program will choose an appropriate translation based on your system's locale setting. However, you can make antimicro load a different translation depending on the language that you choose from the list below.</p></body></html> <html><head/><body><p>antimicro 已被贡献者翻译为多种语言。默认情况下,本程序将根据您系统的区域设置选择相应的语言。然而,您也可以让 antimicro 加载以下列表中的任意语言。</p></body></html> - - + + Default 默认 - + English 英语 - + 简体中文 简体中文 - - + + Active 启用 - + Devices: 设备: - - + + All 所有 - + Device 设备 - + Profile 配置文件 - + Default? 默认? - + Add 添加 - + Edit 编辑 - Histor&y Size: - 历史缓冲大小 (&y): + 历史缓冲大小 (&y): - + Weight &Modifier: 权重修饰因数 (&M): - + Spring 弹簧 - + Screen: 屏幕: - + Utilize the specified screen for spring mode. On Linux, the default is to use the primary screen. On Windows, the default is to use all available screens. @@ -4292,157 +4319,167 @@ is to use all available screens. 在 Windows 系统上,默认使用所有可用屏幕。 - + Also, Windows users who want to use a low value should also check the "Disable Enhance Pointer Precision" checkbox if you haven't disabled the option in Windows. 另外,对于希望使用较低值的 Windows 用户,如果您未禁用 Windows 的“提高指针精确度”选项,请勾选本程序中的“禁用提高指针精确度”复选框。 - + Select Default Profile Directory 选择默认配置文件目录 - + Are you sure you want to delete the profile? 您确认要删除这个配置文件吗? - + Save Log File As 日志文件另存为 - + Log Files (*.log) 日志文件 (*.log) + + + Do you really want to reset setting? + + + + + Would you like to reset mappings too? + + MainWindow - + antimicro antimicro - + No Joysticks have been found. Please plug in a joystick and then choose the "Update Joysticks" option in the main menu 未找到摇杆。 请插入一个摇杆然后选择“选项”菜单下的“更新摇杆” - + If events are not seen by a game, please click here to run this application as Administrator. 如果游戏无法检测到事件,请单击这里以管理员身份运行。 - + &App 程序 (&A) - + &Options 选项 (&O) - + &Help 帮助 (&H) - - + + &Quit 退出 (&Q) - + Ctrl+Q Ctrl+Q - - + + &Update Joysticks 更新摇杆 (&U) - + Ctrl+U Ctrl+U - - + + &Hide 隐藏 (&H) - + Ctrl+H Ctrl+H - + &About 关于 (&A) - + Ctrl+A Ctrl+A - + About &Qt - + &Properties - + &Key Checker - + &GitHub Page - + &Game Controller Mapping - + S&ettings - + &Stick/Pad Assign - + &Wiki - + &Issues - + &Calibration @@ -4459,7 +4496,7 @@ the option in Windows. 按键检查器 - + Home Page 主页 @@ -4484,49 +4521,49 @@ the option in Windows. 维基页面 - + Could not find a proper controller identifier. Exiting. 无法找到合适的游戏控制器标识符。正在退出。 - - - - - - - + + + + + + + (%1) (%1) - - + + Open File 打开文件 - + &Restore 还原 (&R) - + Calibration couldn't be opened - + You must connect at least one controller to open the window - + Run as Administrator? 以管理员权限运行? - + Are you sure that you want to run this program as Adminstrator? Some games run as Administrator which will cause events generated by antimicro to not be used by those games unless antimicro is also run as the Adminstrator. This is due to permission problems caused by User Account Control (UAC) options in Windows Vista and later. @@ -4534,17 +4571,17 @@ Some games run as Administrator which will cause events generated by antimicro t 有些以管理员权限运行的游戏无法识别 antimicro 生成的事件,除非 antimicro 也使用管理员权限运行。这是由于 Windows Vista 及以后系统中用户帐户控制 (UAC) 导致的权限问题。 - + Failed to elevate program 无法提升本程序权限 - + Failed to restart this program as the Administrator 无法以管理员权限重新运行本程序 - + Could not find controller. Exiting. 无法找到游戏控制器。正在退出。 @@ -4552,12 +4589,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseAxisSettingsDialog - + Mouse Settings - 鼠标设置 - - + Set %1 设置%1 @@ -4565,12 +4602,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseButtonSettingsDialog - + Mouse Settings - 鼠标设置 - - + Set %1 设置%1 @@ -4578,12 +4615,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseControlStickSettingsDialog - + Mouse Settings 鼠标设置 - + Set %1 设置%1 @@ -4591,12 +4628,12 @@ Some games run as Administrator which will cause events generated by antimicro t MouseDPadSettingsDialog - + Mouse Settings 鼠标设置 - + Set %1 设置%1 @@ -4604,17 +4641,17 @@ Some games run as Administrator which will cause events generated by antimicro t MouseSettingsDialog - + Mouse Settings 鼠标设置 - + Mouse Mode: 鼠标模式: - + Cursor mode is used to move the mouse cursor around the screen relative to its current position depending on how much you move an axis @@ -4629,22 +4666,22 @@ axis is moved back to the dead zone. 弹簧:移动时,鼠标光标以屏幕中心为基准,移动距离取决于您移动轴的幅度。轴移回不灵敏区之后,鼠标光标将回到屏幕中心。 - + Cursor 光标 - + Spring 弹簧 - + Acceleration: 加速模式: - + Enhanced: Three tier curve that makes the mouse move slow on the low end of an axis and fast on the high end. @@ -4673,64 +4710,64 @@ a period of time using a Cubic curve. 立方缓动:轴移动幅度较大时,鼠标速度随时间以立方曲线增加。 - + Enhanced Precision 增强精度 - - + + Linear 线性 - + Quadratic 平方 - + Cubic 立方 - + Quadratic Extreme 极限平方 - + Power Function 指数函数 - + Easing Quadratic 平方缓动 - + Easing Cubic 立方缓动 - + Mouse Speed Settings 鼠标速度设置 - + Enable to change the horizontal and vertical speed boxes at the same time. 同时改变水平和垂直速度。 - + Change Together 同时更改 - + Options for adding more acceleration to the mouse movement beyond what the acceleration curve would produce. Acceleration is added based on how quickly an axis is @@ -4742,57 +4779,57 @@ using typical gamepad analog sticks. 这些选项是为了绕过某些由于手柄模拟摇杆的输入范围有限所带来的问题。 - + Delta Acceleration 额外加速 - + &Multiplier: 倍数 (&M): - + Mi&n Threshold: 最小阈值 (&N): - + E&xtra Duration: 额外加速时长 (&X): - - + + 1 = 20 pps 1级=20像素/秒 - + Wheel Hori. Speed: 滚轮水平速度: - + Set the speed used for horizontal mouse wheel movement according to number of simulated notches per second. 根据每秒模拟滚动凹槽数设置鼠标滚轮水平滚动速度。 - + Set the speed used for vertical mouse wheel movement according to number of simulated notches per second. 根据每秒模拟滚动凹槽数设置鼠标滚轮垂直滚动速度。 - + Sensitivit&y: 灵敏度 (&Y): - + For Power Function acceleration curve. Specifies the factor to use for curve sensitivity. When the value is above 1.0, the mouse movement will be accelerated @@ -4801,69 +4838,69 @@ faster at the low end of an axis. 指定曲线敏感度系数。当该值大于1.0时,增大轴移动幅度较小时的鼠标加速度。 - + Easing Duration: 缓动时长: - + Specifies the amount of time (in seconds) that will be required before the mouse is fully accelerated after reaching the high end of an axis. 轴移动幅度达到最大后,鼠标在此时长(以秒为单位)内加速到最大速度。 - - + + s - + Highest value to accelerate mouse movement by 鼠标速度的最大加速值 - + x x - + Start %: 起始百分比: - + Acceleration begins at this percentage of the base multiplier 加速以基础倍数的此百分比速率开始 - - - - + + + + % % - + Minimum amount of axis travel required for acceleration to begin 轴的移动幅度大于此最小阈值之后加速才开始 - + Max Threshold: 最大阈值: - + Maximum axis travel before acceleration has reached the multiplier value 轴的移动幅度达到此最大阈值时加速达到上述倍数值 - + Extend the time that extra acceleration is applied. Axis travel will be taken into account. A slower flick will decrease the actual time that extra acceleration will be applied. @@ -4871,118 +4908,118 @@ actual time that extra acceleration will be applied. 轴的移动幅度考虑在内。缓慢的轴移动将减小实际的额外加速生效时间。 - + Curve: 曲线: - + Ease Out Sine 正弦滑出缓动 - + Ease Out Quad 平方滑出缓动 - + Ease Out Cubic 立方滑出缓动 - + Release Radius: 释放半径: - + Specifies that the spring area will be relative to the mouse position set by a non-relative spring. 弹簧区域将相对于鼠标指针的位置。鼠标指针的位置可由其它非弹簧模式指定。 - + Relative 相对 - + Mouse Status 鼠标状态 - + X: X轴: - - + + 0 (0 pps) 0(0像素/秒) - + Y: Y轴: - - + + 1 = 1 notch(es)/s 1级=1凹槽/秒 - + Hori&zontal Speed: 水平速度 (&Z): - + &Vertical Speed: 垂直速度 (&V): - + Wheel Vert. Speed: 滚轮垂直速度: - + Spring Settings 弹簧设置 - + Spring Width: 弹簧区域宽度: - + Changes the width of the region that the cursor can move in spring mode. 0 will use the entire width of your screen. 设置鼠标以弹簧模式移动的区域的宽度。设为0时将使用您整个屏幕的宽度。 - + Spring Height: 弹簧区域高度: - + Changes the height of the region that the cursor can move in spring mode. 0 will use the entire height of your screen. 设置鼠标以弹簧模式移动的区域的高度。设为0时将使用您整个屏幕的高度。 - - + + %n notch(es)/s %n凹槽/秒 @@ -4992,7 +5029,7 @@ of your screen. QKeyDisplayDialog - + Key Checker 按键检查器 @@ -5001,34 +5038,34 @@ of your screen. <html><head/><body><p>按下您键盘上的一个键来观察本程序如何检测按键。本窗口将显示系统原生键值、Qt 原始键值(如果可用)和 antimicro 使用的自定义键值。</p><p>antimicro 键值和 Qt 键值通常是一样的。如果可能,antimicro 将优先使用 Qt 中已定义的键值。如果想了解 Qt 中已定义的键值列表,请查看页面 <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a>。如果您发现某个键没有被本程序原生支持,请将问题报告至 antimicro 的 <a href="https://github.com/AntiMicro/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub 页面</span></a>,以便我们修改程序后直接支持这个键。如您所见,未知的键值将被附加一个自定义前缀。这样一来,它们就能被使用了,不过最大的问题是含有这个键的配置文件将无法在其它地方使用。</p></body></html> - - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - + Event Handler: 事件处理程序: - + Native Key Value: 系统原生键值: - - - + + + 0x00000000 0x00000000 - + Qt Key Value: Qt 原始键值: - + antimicro Key Value: antimicro 自定义键值: @@ -5036,203 +5073,203 @@ of your screen. QObject - + Super Super - + Menu Menu - + Mute Mute - + Vol+ Vol+ - + Vol- Vol- - + Play/Pause Play/Pause - + Play Play - + Pause Pause - + Prev Prev - + Next Next - + Mail Mail - + Home Home - + Media Media - + Search Search - + Daemon launched 后台服务已启动 - + Failed to launch daemon 无法启动后台服务 - + Launching daemon 正在启动后台服务 - - + + Display string "%1" is not valid. 显示字符串“%1”无效。 - + Failed to set a signature id for the daemon 无法为后台服务设置签名ID - + Failed to change working directory to / 无法切换工作路径到根目录 - + Quitting Program 正在退出程序 - + # of joysticks found: %1 已发现摇杆数:%1 - + List Joysticks: 摇杆列表: - + --------------- --------------- - + Joystick %1: 摇杆%1: - + Index: %1 编号:%1 - + GUID: %1 全局唯一标识符:%1 - + Name: %1 名称:%1 - + Yes - + No - + Game Controller: %1 游戏控制器:%1 - + # of Axes: %1 轴数:%1 - + # of Buttons: %1 按钮数:%1 - + # of Hats: %1 帽子开关数:%1 - + Attempting to use fallback option %1 for event generation. 尝试为事件生成使用后备选项 %1。 - + Failed to open event generator. Exiting. 无法打开事件发生器。正在退出。 - + Using %1 as the event generator. 使用 %1 作为事件发生器。 - + Could not raise process priority. 无法提升进程优先级。 - + Auto-switching to profile "%1". 自动切换到配置文件“%1”。 - + Auto-switching to nullptr profile! @@ -5241,74 +5278,74 @@ of your screen. 自动切换到空配置文件! - + Logging started 日志记录已开始 - + Active window changed to: Title = "%1", Class = "%2", Program = "%3" or "%4". 活动窗口已更改至:标题 = “%1”,类 = “%2”,程序 = “%3”或“%4”。 - + Last button - + There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard? - + Profile location %1 is not an XML file. 配置文件 %1 不是一个 XML 文件。 - + Profile location %1 does not exist. 配置文件 %1 不存在。 - - - + + + Controller identifier is not a valid value. 游戏控制器标识符无效。 - + An invalid set number '%1' was specified. 指定的设置编号 "%1" 无效。 - + Controller identifier '%s'' is not a valid value. 游戏控制器标识符 "%s" 无效。 - + No set number was specified. 未指定设置编号。 - + No controller was specified. 未指定游戏控制器。 - + No display string was specified. 未指定显示字符串。 - + An invalid event generator was specified. 指定的事件发生器无效。 - + No event generator string was specified. 未指定事件发生器字符串。 @@ -5317,7 +5354,7 @@ of your screen. 检测到 Qt 样式标识,但未指定样式。 - + No log file specified. 未指定日志文件。 @@ -5415,7 +5452,7 @@ of your screen. 为所选的游戏控制器打开游戏控制器映射窗口。值可以是控制器编号或全局唯一标识符。 - + xinput version must be at least 2.0. No mouse acceleration changes will occur. XInput 版本必需至少为2.0。鼠标加速选项将无效。 @@ -5423,18 +5460,18 @@ of your screen. QuickSetDialog - + Quick Set 快速设置 - + <html><head/><body><p>Please press a button or move an axis on %1 (<span style=" font-weight:600;">%2</span>).<br/>A dialog window will then appear which will<br/>allow you to make an assignment.</p></body></html> <html><head/><body><p>请在 %1(<span style=" font-weight:600;">%2</span>)上按任意键或移动任意轴。<br/>之后一个对话框会弹出并允许您设置按键分配。</p></body></html> - - + + Quick Set %1 快速设置 %1 @@ -5442,12 +5479,12 @@ of your screen. SetAxisThrottleDialog - + Throttle Change 阀设置改变 - + The throttle setting for Axis %1 has been changed. Would you like to distribute this throttle change to all sets? @@ -5458,12 +5495,12 @@ Would you like to distribute this throttle change to all sets? SetJoystick - + Set %1: %2 设置%1:%2 - + Set %1 设置%1 @@ -5471,52 +5508,52 @@ Would you like to distribute this throttle change to all sets? SetNamesDialog - + Set Name Settings 指定设置名称 - + Set 1 设置1 - + Set 2 设置2 - + Set 3 设置3 - + Set 4 设置4 - + Set 5 设置5 - + Set 6 设置6 - + Set 7 设置7 - + Set 8 设置8 - + Name 名称 @@ -5524,7 +5561,7 @@ Would you like to distribute this throttle change to all sets? SimpleKeyGrabberButton - + Mouse 鼠标 @@ -5532,7 +5569,7 @@ Would you like to distribute this throttle change to all sets? SpringModeRegionPreview - + Spring Mode Preview 弹簧模式预览 @@ -5540,7 +5577,7 @@ Would you like to distribute this throttle change to all sets? UInputEventHandler - + Could not find a valid uinput device file. Please check that you have the uinput module loaded. lsmod | grep uinput @@ -5549,14 +5586,14 @@ lsmod | grep uinput lsmod | grep uinput - + Could not open uinput device file Please check that you have permission to write to the device 无法打开 uinput 设备文件 请确认您有写入该设备的权限 - + Using uinput device file %1 使用 uinput 设备文件%1 @@ -5564,551 +5601,551 @@ Please check that you have permission to write to the device UInputHelper - + a a - + b b - + c c - + d d - + e e - + f f - + g g - + h h - + i i - + j j - + k k - + l l - + m m - + n n - + o o - + p p - + q q - + r r - + s s - + t t - + u u - + v v - + w w - + x x - + y y - + z z - + Esc Esc - + F1 F1 - + F2 F2 - + F3 F3 - + F4 F4 - + F5 F5 - + F6 F6 - + F7 F7 - + F8 F8 - + F9 F9 - + F10 F10 - + F11 F11 - + F12 F12 - + ` ` - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - - + + - - - + = = - + BackSpace BackSpace - + Tab Tab - + [ [ - + ] ] - + \ \ - + CapsLock CapsLock - + ; ; - + ' ' - + Enter Enter - + Shift_L Shift_L - + , , - - + + . . - - + + / / - + Ctrl_L Ctrl_L - - + + Super_L Super_L - + Alt_L Alt_L - + Space Space - + Alt_R Alt_R - + Menu Menu - + Ctrl_R Ctrl_R - + Shift_R Shift_R - + Up Up - + Left Left - + Down Down - + Right Right - + PrtSc PrtSc - + Ins Ins - + Del Del - + Home Home - + End End - + PgUp PgUp - + PgDn PgDn - + NumLock NumLock - + * * - + + + - + KP_Enter KP_Enter - + KP_1 KP_1 - + KP_2 KP_2 - + KP_3 KP_3 - + KP_4 KP_4 - + KP_5 KP_5 - + KP_6 KP_6 - + KP_7 KP_7 - + KP_8 KP_8 - + KP_9 KP_9 - + KP_0 KP_0 - + SCLK SCLK - + Pause Pause - + Super_R Super_R - + Mute Mute - + VolDn VolDn - + VolUp VolUp - + Play Play - + Stop Stop - + Prev Prev - + Next Next - + [NO KEY] [NO KEY] @@ -6116,54 +6153,54 @@ Please check that you have permission to write to the device UnixWindowInfoDialog - + Captured Window Properties 捕获的窗口属性 - + Information About Window 窗口信息 - + Class: 类: - - - + + + TextLabel 文本标签 - + Title: 标题: - + Path: 路径: - + Match By Properties 根据属性匹配 - + Class - + Title 标题 - + Path 路径 @@ -6171,9 +6208,9 @@ Please check that you have permission to write to the device VDPad - - - + + + VDPad 虚拟十字键 @@ -6181,224 +6218,224 @@ Please check that you have permission to write to the device VirtualKeyPushButton - + Space Space - + Tab Tab - + Shift (L) Shift (L) - + Shift (R) Shift (R) - + Ctrl (L) Ctrl (L) - + Ctrl (R) Ctrl (R) - + Alt (L) Alt (L) - - + + Alt (R) Alt (R) - + Alt Gr - + ` ` - + ~ ~ - - + + - - - + = = - + [ [ - + ] ] - + \ \ - + Caps Caps - + ; ; - + ' ' - + , , - - + + . . - - + + / / - + ESC ESC - + PRTSC PRTSC - + SCLK SCLK - + INS INS - + PGUP PGUP - + DEL DEL - + PGDN PGDN - + 1 1 - + 2 2 - + 3 3 - + 4 4 - + 5 5 - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 0 0 - + NUM LK NUM LK - - + + * * - + + + - + Enter Enter @@ -6415,42 +6452,42 @@ E R - + < < - + : : - + Super (L) Super (L) - + Menu Menu - + Up Up - + Down Down - + Left Left - + Right Right @@ -6458,226 +6495,226 @@ R VirtualKeyboardMouseWidget - - + + Keyboard 键盘 - - + + Mouse 鼠标 - + Mouse Settings 鼠标设置 - + Left Mouse - + Up Mouse - + Left Button Mouse 左键 - + Middle Button Mouse 中键 - + Right Button Mouse 右键 - + Wheel Up Mouse 滚轮向上 - + Wheel Left Mouse 滚轮向左 - + Wheel Right Mouse 滚轮向右 - + Wheel Down Mouse 滚轮向下 - + Down Mouse - + Right Mouse - + Button 4 Mouse 按钮4 - + Mouse 8 Mouse 按钮8 - + Button 5 Mouse 按钮5 - + Mouse 9 Mouse 按钮9 - + NONE - - + + Last button - - + + Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad - + Others - + Applications 应用程序 - + Browser Back 浏览器后退 - + Browser Favorites 浏览器收藏 - + Browser Forward 浏览器前进 - + Browser Home 浏览器主页 - + Browser Refresh 浏览器刷新 - + Browser Search 浏览器搜索 - + Browser Stop 浏览器停止 - + Calc 计算器 - + Email 邮件 - + Media 多媒体 - + Media Next 多媒体下一首 - + Media Play 多媒体播放 - + Media Previous 多媒体上一首 - + Media Stop 多媒体停止 - + Search 搜索 - + Volume Down 音量减小 - + Volume Mute 静音 - + Volume Up 音量增加 @@ -6685,7 +6722,7 @@ R VirtualMousePushButton - + INVALID 无效 @@ -6693,28 +6730,28 @@ R WinAppProfileTimerDialog - - + + Capture Application 捕捉应用程序 - + After pressing the "Capture Application" button, please select the application window that you want to have a profile associated with. The active application will be captured after the selected number of seconds. 按下“捕捉应用程序”按钮之后,请选择您想要关联配置文件的应用程序窗口。活动的应用程序将在指定的秒数之后被捕捉。 - + Timer: 计时器: - + Seconds - + Cancel 取消 @@ -6722,12 +6759,12 @@ R WinExtras - + [NO KEY] [无按键] - + AntiMicro Profile antimicro 配置文件 @@ -6735,67 +6772,66 @@ R X11Extras - + ESC ESC - + Tab Tab - + Space Space - + DEL DEL - + Return Return - + KP_Enter KP_Enter - + Backspace Backspace - + Alt Gr - + xinput extension was not found. No mouse acceleration changes will occur. 未找到 XInput 扩展。鼠标加速选项将无效。 - + xinput version must be at least 2.0. No mouse acceleration changes will occur. XInput 版本必需至少为2.0。鼠标加速选项将无效。 - Virtual pointer found with id=%1. - 发现虚拟指针 ID=%1。 + 发现虚拟指针 ID=%1。 - + PtrFeedbackClass was not found for virtual pointer.No change to mouse acceleration will occur for device with id=%1 未找到虚拟指针的 PtrFeedbackClass。鼠标加速选项在 ID=%1 的设备上将无效 - + Changing mouse acceleration for device with id=%1 正在改变 ID=%1 的设备上的鼠标加速选项 @@ -6803,7 +6839,7 @@ R XMLConfigReader - + Could not write updated profile XML to file %1. 无法将更新后的配置 XML 写入文件 %1。 @@ -6811,7 +6847,7 @@ R XMLConfigWriter - + Could not write to profile at %1. 无法写入配置文件 %1。 @@ -6819,7 +6855,7 @@ R antimicro - + Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. @@ -6827,97 +6863,97 @@ R main - + Launch program in system tray only. 启动后最小化到系统托盘。 - + Launch program with the tray menu disabled - + Launch program without the main window displayed - + Launch program with the configuration file selected as the default for selected controllers. Defaults to all controllers - + location - + Apply configuration file to a specific controller. Value can be a controller index, name, or GUID - + value - + Unload currently enabled profile(s) - + value(s) - + Start joysticks on a specific set. Value can be a controller index, name, or GUID - + number value - + Launch program as a daemon. Use only on Linux. - + Enable logging - + log-type - + Choose a file for logs writing - + filename - + Choose between using XTest support and uinput support for event generation. Use only if you have enabled xtest and uinput options on Linux or vmulti on Windows. Default: xtest. - + event-generation-type - + Print information about joysticks detected by SDL. Use only if you have sdl library. You can check your controller index, name or even GUID. diff --git a/share/blank.txt b/share/blank.txt old mode 100644 new mode 100755 diff --git a/src/aboutdialog.cpp b/src/aboutdialog.cpp old mode 100644 new mode 100755 index 9a1cba930..1f15141c8 --- a/src/aboutdialog.cpp +++ b/src/aboutdialog.cpp @@ -22,6 +22,7 @@ #include "eventhandlerfactory.h" #include +#include #include #include @@ -29,7 +30,6 @@ #include #include #include -#include #include AboutDialog::AboutDialog(QWidget *parent) : @@ -58,8 +58,7 @@ void AboutDialog::fillInfoTextBrowser() QStringList finalInfoText = QStringList(); finalInfoText.append(trUtf8("Program Version %1").arg(PadderCommon::programVersion)); - // __DATE__, __TIME__ - finalInfoText.append(trUtf8("Program Compiled on %1 at %2").arg(QDate::currentDate().toString("MMM dd yyyy")).arg(QTime::currentTime().toString("hh:mm:ss"))); + finalInfoText.append(trUtf8("Program Compiled on %1 at %2").arg(__DATE__).arg(__TIME__)); QString sdlCompiledVersionNumber("%1.%2.%3"); QString sdlLinkedVersionNumber("%1.%2.%3"); @@ -79,6 +78,7 @@ void AboutDialog::fillInfoTextBrowser() BaseEventHandler *handler = nullptr; EventHandlerFactory *factory = EventHandlerFactory::getInstance(); + if (factory != nullptr) { handler = factory->handler(); @@ -105,10 +105,7 @@ void AboutDialog::changeEvent(QEvent *event) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (event->type() == QEvent::LanguageChange) - { - retranslateUi(); - } + if (event->type() == QEvent::LanguageChange) retranslateUi(); QDialog::changeEvent(event); } diff --git a/src/aboutdialog.h b/src/aboutdialog.h old mode 100644 new mode 100755 diff --git a/src/aboutdialog.ui b/src/aboutdialog.ui old mode 100644 new mode 100755 index 849a43d6c..b6353100c --- a/src/aboutdialog.ui +++ b/src/aboutdialog.ui @@ -52,7 +52,7 @@ - :/images/antimicro.png + :/images/16x16/com.github.juliagoda.antimicro.png @@ -136,7 +136,7 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Noto Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Originally developed by Travis Nickles &lt;nickles.travis@gmail.com&gt;, next maintained by the AntiMicro group at https://github.com/AntiMicro, and now by juliagoda at https://github.com/juliagoda</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Contributors:</span></p> @@ -162,8 +162,8 @@ p, li { white-space: pre-wrap; } <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-weight:600;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">VaGNaroK &lt;vagnarokalkimist@gmail.com&gt; - Brazilian Portuguese</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">zzpxyx - Chinese</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Belleguic Terence &lt;hizo@free.fr&gt; - French</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Leonard Koenig &lt;leonard.r.koenig@googlemail.com&gt; - German</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:9pt;">Belleguic Terence &lt;hizo@free.fr&gt; - French</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:9pt;">Leonard Koenig &lt;leonard.r.koenig@googlemail.com&gt; - German</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">phob - German</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">tou omiya - Japanese</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Dmitriy Koshel &lt;form.eater@gmail.com&gt; - Russian</span></p> @@ -211,7 +211,7 @@ p, li { white-space: pre-wrap; } <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Noto Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">Version 3, 29 June 2007</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;</span></p> diff --git a/src/addeditautoprofiledialog.cpp b/src/addeditautoprofiledialog.cpp old mode 100644 new mode 100755 index 1348a232c..0e48d5d2e --- a/src/addeditautoprofiledialog.cpp +++ b/src/addeditautoprofiledialog.cpp @@ -73,20 +73,20 @@ AddEditAutoProfileDialog::AddEditAutoProfileDialog(AutoProfileInfo *info, AntiMi this->originalWindowClass = info->getWindowClass(); this->originalWindowName = info->getWindowName(); + bool allowDefault = false; + if (info->isPartialState()) ui->setPartialCheckBox->setChecked(true); else ui->setPartialCheckBox->setChecked(false); QListIterator iterGUIDs(reservedGUIDS); + while (iterGUIDs.hasNext()) { QString guid = iterGUIDs.next(); - if (!getReservedGUIDs().contains(guid)) - { - this->reservedGUIDs.append(guid); - } + + if (!getReservedGUIDs().contains(guid)) this->reservedGUIDs.append(guid); } - bool allowDefault = false; if ((info->getGUID() != "all") && (info->getGUID() != "") && !getReservedGUIDs().contains(info->getGUID())) @@ -97,10 +97,8 @@ AddEditAutoProfileDialog::AddEditAutoProfileDialog(AutoProfileInfo *info, AntiMi if (allowDefault && info->getExe().isEmpty()) { ui->asDefaultCheckBox->setEnabled(true); - if (info->isCurrentDefault()) - { - ui->asDefaultCheckBox->setChecked(true); - } + + if (info->isCurrentDefault()) ui->asDefaultCheckBox->setChecked(true); } else { @@ -111,14 +109,14 @@ AddEditAutoProfileDialog::AddEditAutoProfileDialog(AutoProfileInfo *info, AntiMi QListIterator iter(*devices); int found = -1; int numItems = 1; + while (iter.hasNext()) { InputDevice *device = iter.next(); ui->devicesComboBox->addItem(device->getSDLName(), QVariant::fromValue(device)); - if (device->getGUIDString() == info->getGUID()) - { - found = numItems; - } + + if (device->getGUIDString() == info->getGUID()) found = numItems; + numItems++; } @@ -166,6 +164,7 @@ AddEditAutoProfileDialog::AddEditAutoProfileDialog(AutoProfileInfo *info, AntiMi connect(this, &AddEditAutoProfileDialog::accepted, this, &AddEditAutoProfileDialog::saveAutoProfileInformation); } + AddEditAutoProfileDialog::~AddEditAutoProfileDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -173,18 +172,18 @@ AddEditAutoProfileDialog::~AddEditAutoProfileDialog() delete ui; } + void AddEditAutoProfileDialog::openProfileBrowseDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); QString lookupDir = PadderCommon::preferredProfileDir(settings); QString filename = QFileDialog::getOpenFileName(this, trUtf8("Open Config"), lookupDir, QString("Config Files (*.amgp *.xml)")); - if (!filename.isNull() && !filename.isEmpty()) - { - ui->profileLineEdit->setText(QDir::toNativeSeparators(filename)); - } + + if (!filename.isNull() && !filename.isEmpty()) ui->profileLineEdit->setText(QDir::toNativeSeparators(filename)); } + void AddEditAutoProfileDialog::openApplicationBrowseDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -194,16 +193,16 @@ void AddEditAutoProfileDialog::openApplicationBrowseDialog() #elif defined(Q_OS_LINUX) QString filename = QFileDialog::getOpenFileName(this, trUtf8("Select Program"), QDir::homePath(), QString()); #endif + if (!filename.isNull() && !filename.isEmpty()) { QFileInfo exe(filename); - if (exe.exists() && exe.isExecutable()) - { - ui->applicationLineEdit->setText(filename); - } + + if (exe.exists() && exe.isExecutable()) ui->applicationLineEdit->setText(filename); } } + AutoProfileInfo* AddEditAutoProfileDialog::getAutoProfile() const { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -211,6 +210,7 @@ AutoProfileInfo* AddEditAutoProfileDialog::getAutoProfile() const return info; } + void AddEditAutoProfileDialog::saveAutoProfileInformation() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -220,11 +220,9 @@ void AddEditAutoProfileDialog::saveAutoProfileInformation() if (deviceIndex > 0) { - QVariant temp = ui->devicesComboBox->itemData(deviceIndex, Qt::UserRole); - // Assume that if the following is not true, the GUID should // not be changed. - if (!temp.isNull()) + if (!ui->devicesComboBox->itemData(deviceIndex, Qt::UserRole).isNull()) { InputDevice *device = ui->devicesComboBox->itemData(deviceIndex, Qt::UserRole).value(); info->setGUID(device->getGUIDString()); @@ -242,34 +240,31 @@ void AddEditAutoProfileDialog::saveAutoProfileInformation() info->setWindowName(ui->winNameLineEdit->text()); info->setDefaultState(ui->asDefaultCheckBox->isChecked()); info->setPartialState(ui->setPartialCheckBox->isChecked()); - } + void AddEditAutoProfileDialog::checkForReservedGUIDs(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); QVariant data = ui->devicesComboBox->itemData(index); + if (index == 0) { ui->asDefaultCheckBox->setChecked(false); ui->asDefaultCheckBox->setEnabled(false); ui->asDefaultCheckBox->setToolTip(trUtf8("Please use the main default profile selection.")); } - else if (!data.isNull()) + else if (!data.isNull() && getReservedGUIDs().contains(data.value()->getGUIDString())) + { + ui->asDefaultCheckBox->setChecked(false); + ui->asDefaultCheckBox->setEnabled(false); + ui->asDefaultCheckBox->setToolTip(trUtf8("A different profile is already selected as the default for this device.")); + } + else { - InputDevice *device = data.value(); - if (getReservedGUIDs().contains(device->getGUIDString())) - { - ui->asDefaultCheckBox->setChecked(false); - ui->asDefaultCheckBox->setEnabled(false); - ui->asDefaultCheckBox->setToolTip(trUtf8("A different profile is already selected as the default for this device.")); - } - else - { - ui->asDefaultCheckBox->setEnabled(true); - ui->asDefaultCheckBox->setToolTip(trUtf8("Select this profile to be the default loaded for\nthe specified device. The selection will be used instead\nof the all default profile option.")); - } + ui->asDefaultCheckBox->setEnabled(true); + ui->asDefaultCheckBox->setToolTip(trUtf8("Select this profile to be the default loaded for\nthe specified device. The selection will be used instead\nof the all default profile option.")); } } @@ -312,27 +307,27 @@ void AddEditAutoProfileDialog::showCaptureHelpWindow() if (QApplication::platformName() == QStringLiteral("xcb")) { - QMessageBox *box = new QMessageBox(this); - box->setText(trUtf8("Please select a window by using the mouse. Press Escape if you want to cancel.")); - box->setWindowTitle(trUtf8("Capture Application Window")); - box->setStandardButtons(QMessageBox::NoButton); - box->setModal(true); - box->show(); - - UnixCaptureWindowUtility *util = new UnixCaptureWindowUtility(); - QThread *thread = new QThread; // QTHREAD(this) - util->moveToThread(thread); - - connect(thread, &QThread::started, util, &UnixCaptureWindowUtility::attemptWindowCapture); - connect(util, &UnixCaptureWindowUtility::captureFinished, thread, &QThread::quit); - connect(util, &UnixCaptureWindowUtility::captureFinished, box, &QMessageBox::hide); - connect(util, &UnixCaptureWindowUtility::captureFinished, this, [this, util]() { - checkForGrabbedWindow(util); - }, Qt::QueuedConnection); - - connect(thread, &QThread::finished, box, &QMessageBox::deleteLater); - connect(util, &UnixCaptureWindowUtility::destroyed, thread, &QThread::deleteLater); - thread->start(); + QMessageBox *box = new QMessageBox(this); + box->setText(trUtf8("Please select a window by using the mouse. Press Escape if you want to cancel.")); + box->setWindowTitle(trUtf8("Capture Application Window")); + box->setStandardButtons(QMessageBox::NoButton); + box->setModal(true); + box->show(); + + UnixCaptureWindowUtility *util = new UnixCaptureWindowUtility(); + QThread *thread = new QThread; // QTHREAD(this) + util->moveToThread(thread); + + connect(thread, &QThread::started, util, &UnixCaptureWindowUtility::attemptWindowCapture); + connect(util, &UnixCaptureWindowUtility::captureFinished, thread, &QThread::quit); + connect(util, &UnixCaptureWindowUtility::captureFinished, box, &QMessageBox::hide); + connect(util, &UnixCaptureWindowUtility::captureFinished, this, [this, util]() { + checkForGrabbedWindow(util); + }, Qt::QueuedConnection); + + connect(thread, &QThread::finished, box, &QMessageBox::deleteLater); + connect(util, &UnixCaptureWindowUtility::destroyed, thread, &QThread::deleteLater); + thread->start(); } #endif @@ -349,59 +344,59 @@ void AddEditAutoProfileDialog::checkForGrabbedWindow(UnixCaptureWindowUtility* u #ifdef WITH_X11 if (QApplication::platformName() == QStringLiteral("xcb")) { - long targetWindow = util->getTargetWindow(); - bool escaped = !util->hasFailed(); - bool failed = false; - QString path = QString(); + long targetWindow = util->getTargetWindow(); + bool escaped = !util->hasFailed(); + bool failed = false; + QString path = QString(); - if (targetWindow != None) - { - // Attempt to find the appropriate window below the root window - // that was clicked. - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "ORIGINAL: " << QString::number(targetWindow, 16); - #endif - - long tempWindow = static_cast(X11Extras::getInstance()->findClientWindow(static_cast(targetWindow))); - if (tempWindow > 0) + if (targetWindow != None) { - targetWindow = tempWindow; + // Attempt to find the appropriate window below the root window + // that was clicked. + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "ORIGINAL: " << QString::number(targetWindow, 16); + #endif + + long tempWindow = X11Extras::getInstance()->findClientWindow(targetWindow); + if (tempWindow > 0) + { + targetWindow = tempWindow; + } + + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "ADJUSTED: " << QString::number(targetWindow, 16); + #endif } - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "ADJUSTED: " << QString::number(targetWindow, 16); - #endif - } - if (targetWindow != None) - { - CapturedWindowInfoDialog *dialog = new CapturedWindowInfoDialog(targetWindow, this); - connect(dialog, &CapturedWindowInfoDialog::accepted, [this, dialog]() { + if (targetWindow != None) + { + CapturedWindowInfoDialog *dialog = new CapturedWindowInfoDialog(targetWindow, this); + connect(dialog, &CapturedWindowInfoDialog::accepted, [this, dialog]() { + windowPropAssignment(dialog); + }); - windowPropAssignment(dialog); - }); + dialog->show(); + } + else if (!escaped) + { + failed = true; + } - dialog->show(); - } - else if (!escaped) - { - failed = true; - } + // Ensure that the operation was not cancelled (Escape wasn't pressed). + if (failed) + { + QMessageBox box; + box.setText(trUtf8("Could not obtain information for the selected window.")); + box.setWindowTitle(trUtf8("Application Capture Failed")); + box.setStandardButtons(QMessageBox::Close); + box.raise(); + box.exec(); + } - // Ensure that the operation was not cancelled (Escape wasn't pressed). - if (failed) - { - QMessageBox box; - box.setText(trUtf8("Could not obtain information for the selected window.")); - box.setWindowTitle(trUtf8("Application Capture Failed")); - box.setStandardButtons(QMessageBox::Close); - box.raise(); - box.exec(); + util->deleteLater(); } - util->deleteLater(); - } #endif - } #endif @@ -414,18 +409,13 @@ void AddEditAutoProfileDialog::windowPropAssignment(CapturedWindowInfoDialog *di disconnect(ui->winClassLineEdit, &QLineEdit::textChanged, this, &AddEditAutoProfileDialog::checkForDefaultStatus); disconnect(ui->winNameLineEdit, &QLineEdit::textChanged, this, &AddEditAutoProfileDialog::checkForDefaultStatus); - if (dialog->getSelectedOptions() & CapturedWindowInfoDialog::WindowPath) + if (dialog->useFullWindowPath() && dialog->getSelectedOptions() & CapturedWindowInfoDialog::WindowPath) { - if (dialog->useFullWindowPath()) - { - ui->applicationLineEdit->setText(dialog->getWindowPath()); - } - else - { - QString temp = QString(); - temp = QFileInfo(dialog->getWindowPath()).fileName(); - ui->applicationLineEdit->setText(temp); - } + ui->applicationLineEdit->setText(dialog->getWindowPath()); + } + else if (!dialog->useFullWindowPath() && dialog->getSelectedOptions() & CapturedWindowInfoDialog::WindowPath) + { + ui->applicationLineEdit->setText(QFileInfo(dialog->getWindowPath()).fileName()); } else { @@ -463,8 +453,8 @@ void AddEditAutoProfileDialog::checkForDefaultStatus() qInstallMessageHandler(MessageHandler::myMessageOutput); bool status = ui->applicationLineEdit->text().length() > 0; - status = status ? status : ui->winClassLineEdit->text().length() > 0; - status = status ? status : ui->winNameLineEdit->text().length() > 0; + status = status ? status : (ui->winClassLineEdit->text().length() > 0); + status = status ? status : (ui->winNameLineEdit->text().length() > 0); if (status) { @@ -486,13 +476,13 @@ void AddEditAutoProfileDialog::accept() bool validForm = true; bool propertyFound = false; - QString errorString = QString(); + if (ui->profileLineEdit->text().length() > 0) { - QString profileFilename = ui->profileLineEdit->text(); - QFileInfo info(profileFilename); - if (!info.exists()) + QFileInfo profileFileName(ui->profileLineEdit->text()); + + if (!profileFileName.exists()) { validForm = false; errorString = trUtf8("Profile file path is invalid."); @@ -516,6 +506,7 @@ void AddEditAutoProfileDialog::accept() { QString exeFileName = ui->applicationLineEdit->text(); QFileInfo info(exeFileName); + if (info.isAbsolute() && (!info.exists() || !info.isExecutable())) { validForm = false; diff --git a/src/addeditautoprofiledialog.h b/src/addeditautoprofiledialog.h old mode 100644 new mode 100755 diff --git a/src/addeditautoprofiledialog.ui b/src/addeditautoprofiledialog.ui old mode 100644 new mode 100755 index 587dc56e9..e190af6d1 --- a/src/addeditautoprofiledialog.ui +++ b/src/addeditautoprofiledialog.ui @@ -7,7 +7,7 @@ 0 0 478 - 408 + 418 @@ -22,7 +22,7 @@ - Profile: + Pro&file: profileLineEdit @@ -80,7 +80,7 @@ in the form. - Class: + &Class: applicationLineEdit @@ -97,7 +97,7 @@ in the form. - Title: + T&itle: applicationLineEdit diff --git a/src/advancebuttondialog.cpp b/src/advancebuttondialog.cpp old mode 100644 new mode 100755 index 6d410bc6e..d00b3639f --- a/src/advancebuttondialog.cpp +++ b/src/advancebuttondialog.cpp @@ -18,6 +18,7 @@ #include "advancebuttondialog.h" #include "ui_advancebuttondialog.h" +#include "globalvariables.h" #include "messagehandler.h" #include "event.h" #include "inputdevice.h" @@ -40,8 +41,6 @@ #include -const int AdvanceButtonDialog::MINIMUMTURBO = 2; - AdvanceButtonDialog::AdvanceButtonDialog(JoyButton *button, QWidget *parent) : QDialog(parent, Qt::Window), ui(new Ui::AdvanceButtonDialog), @@ -54,73 +53,79 @@ AdvanceButtonDialog::AdvanceButtonDialog(JoyButton *button, QWidget *parent) : PadderCommon::inputDaemonMutex.lock(); - this->button = button; + m_button = button; oldRow = 0; + int interval = m_button->getTurboInterval() / 10; getHelperLocal().moveToThread(button->thread()); - if (this->button->getToggleState()) - { - ui->toggleCheckbox->setChecked(true); - } + if (m_button->getToggleState()) ui->toggleCheckbox->setChecked(true); - if (this->button->isUsingTurbo()) + if (m_button->isUsingTurbo()) { ui->turboCheckbox->setChecked(true); ui->turboSlider->setEnabled(true); } - int interval = this->button->getTurboInterval() / 10; - if (interval < MINIMUMTURBO) - { - interval = JoyButton::ENABLEDTURBODEFAULT / 10; - } + if (interval < GlobalVariables::AdvanceButtonDialog::MINIMUMTURBO) + interval = GlobalVariables::JoyButton::ENABLEDTURBODEFAULT / 10; + ui->turboSlider->setValue(interval); this->changeTurboText(interval); - QListIterator iter(*(this->button->getAssignedSlots())); + QListIterator iter(*(m_button->getAssignedSlots())); + while (iter.hasNext()) { JoyButtonSlot *buttonslot = iter.next(); SimpleKeyGrabberButton *existingCode = new SimpleKeyGrabberButton(this); existingCode->setText(buttonslot->getSlotString()); - if (buttonslot->getSlotMode() == JoyButtonSlot::JoyLoadProfile) - { - if (!buttonslot->getTextData().isEmpty()) - { - existingCode->setValue(buttonslot->getTextData(), JoyButtonSlot::JoyLoadProfile); - existingCode->setToolTip(buttonslot->getTextData()); - } - } - else if (buttonslot->getSlotMode() == JoyButtonSlot::JoyTextEntry) - { - if (!buttonslot->getTextData().isEmpty()) - { - existingCode->setValue(buttonslot->getTextData(), JoyButtonSlot::JoyTextEntry); - existingCode->setToolTip(buttonslot->getTextData()); - } - } - else if (buttonslot->getSlotMode() == JoyButtonSlot::JoyExecute) + + switch(static_cast(buttonslot->getSlotMode())) { - if (!buttonslot->getTextData().isEmpty()) - { - existingCode->setValue(buttonslot->getTextData(), JoyButtonSlot::JoyExecute); - existingCode->setToolTip(buttonslot->getTextData()); + case 11: - if (buttonslot->getExtraData().canConvert()) + if (!buttonslot->getTextData().isEmpty()) { - QString argumentsTemp = buttonslot->getExtraData().toString(); - existingCode->getValue()->setExtraData(argumentsTemp); + existingCode->setValue(buttonslot->getTextData(), JoyButtonSlot::JoyLoadProfile); + existingCode->setToolTip(buttonslot->getTextData()); } - } - } - else - { - existingCode->setValue(buttonslot->getSlotCode(), + + break; + + case 13: + + if (!buttonslot->getTextData().isEmpty()) + { + existingCode->setValue(buttonslot->getTextData(), JoyButtonSlot::JoyTextEntry); + existingCode->setToolTip(buttonslot->getTextData()); + } + + break; + + case 14: + + if (!buttonslot->getTextData().isEmpty()) + { + existingCode->setValue(buttonslot->getTextData(), JoyButtonSlot::JoyExecute); + existingCode->setToolTip(buttonslot->getTextData()); + + if (buttonslot->getExtraData().canConvert()) + existingCode->getValue()->setExtraData(buttonslot->getExtraData().toString()); + } + + break; + + default: + + existingCode->setValue(buttonslot->getSlotCode(), buttonslot->getSlotCodeAlias(), buttonslot->getSlotMode()); + break; + } + QListWidgetItem *item = new QListWidgetItem(ui->slotListWidget); item->setData(Qt::UserRole, QVariant::fromValue(existingCode)); QHBoxLayout *layout= new QHBoxLayout(); @@ -138,22 +143,19 @@ AdvanceButtonDialog::AdvanceButtonDialog(JoyButton *button, QWidget *parent) : populateSetSelectionComboBox(); populateSlotSetSelectionComboBox(); - if ((this->button->getSetSelection() > -1) && - (this->button->getChangeSetCondition() != JoyButton::SetChangeDisabled)) + if ((m_button->getSetSelection() > -1) && + (m_button->getChangeSetCondition() != JoyButton::SetChangeDisabled)) { - int selectIndex = static_cast(this->button->getChangeSetCondition()); - selectIndex += this->button->getSetSelection() * 3; - if (this->button->getOriginSet() < this->button->getSetSelection()) - { - selectIndex -= 3; - } + int selectIndex = m_button->getChangeSetCondition(); + selectIndex += m_button->getSetSelection() * 3; + + if (m_button->getOriginSet() < m_button->getSetSelection()) selectIndex -= 3; ui->setSelectionComboBox->setCurrentIndex(selectIndex); } fillTimeComboBoxes(); ui->actionTenthsComboBox->setCurrentIndex(1); - updateActionTimeLabel(); changeTurboForSequences(); @@ -164,18 +166,15 @@ AdvanceButtonDialog::AdvanceButtonDialog(JoyButton *button, QWidget *parent) : checkCycleResetWidgetStatus(true); } - if (button->getCycleResetTime() != 0) - { - populateAutoResetInterval(); - } + if (button->getCycleResetTime() != 0) populateAutoResetInterval(); updateWindowTitleButtonName(); - if (this->button->isPartRealAxis() && this->button->isUsingTurbo()) + if (m_button->isPartRealAxis() && m_button->isUsingTurbo()) { ui->turboModeComboBox->setEnabled(true); } - else if (!this->button->isPartRealAxis()) + else if (!m_button->isPartRealAxis()) { ui->turboModeComboBox->setVisible(false); ui->turboModeLabel->setVisible(false); @@ -184,17 +183,13 @@ AdvanceButtonDialog::AdvanceButtonDialog(JoyButton *button, QWidget *parent) : findTurboModeComboIndex(); // Don't show Set Selector page for modifier buttons - if (this->button->isModifierButton()) - { - delete ui->listWidget->item(3); - } + if (m_button->isModifierButton()) delete ui->listWidget->item(3); - //performStatsWidgetRefresh(ui->slotListWidget->currentItem()); changeSlotHelpText(ui->slotTypeComboBox->currentIndex()); PadderCommon::inputDaemonMutex.unlock(); - ui->resetCycleDoubleSpinBox->setMaximum(JoyButton::MAXCYCLERESETTIME * 0.001); // static_cast + ui->resetCycleDoubleSpinBox->setMaximum(GlobalVariables::JoyButton::MAXCYCLERESETTIME * 0.001); // static_cast connect(ui->turboCheckbox, &QCheckBox::clicked, ui->turboSlider, &QSlider::setEnabled); connect(ui->turboSlider, &QSlider::valueChanged, this, &AdvanceButtonDialog::checkTurboIntervalValue); @@ -233,11 +228,13 @@ AdvanceButtonDialog::AdvanceButtonDialog(JoyButton *button, QWidget *parent) : connect(button, &JoyButton::toggleChanged, ui->toggleCheckbox, &QCheckBox::setChecked); connect(button, &JoyButton::turboChanged, this, &AdvanceButtonDialog::checkTurboSetting); + connect(ui->turboModeComboBox, static_cast(&QComboBox::currentIndexChanged), this, &AdvanceButtonDialog::setButtonTurboMode); connect(ui->loadProfilePushButton, &QPushButton::clicked, this, &AdvanceButtonDialog::showSelectProfileWindow); connect(ui->execToolButton, &QToolButton::clicked, this, &AdvanceButtonDialog::showFindExecutableWindow); } + AdvanceButtonDialog::~AdvanceButtonDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -245,14 +242,15 @@ AdvanceButtonDialog::~AdvanceButtonDialog() delete ui; } + void AdvanceButtonDialog::changeTurboText(int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (value >= MINIMUMTURBO) + if (value >= GlobalVariables::AdvanceButtonDialog::MINIMUMTURBO) { double delay = value / 100.0; - double clicks = 100.0 / static_cast(value); + double clicks = 100.0 / value; QString delaytext = QString::number(delay, 'g', 3).append(" ").append(trUtf8("sec.")); QString labeltext = QString::number(clicks, 'g', 2).append(" ").append(trUtf8("/sec.")); @@ -261,6 +259,7 @@ void AdvanceButtonDialog::changeTurboText(int value) } } + void AdvanceButtonDialog::updateSlotsScrollArea(int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -289,6 +288,7 @@ void AdvanceButtonDialog::updateSlotsScrollArea(int value) emit slotsChanged(); } + void AdvanceButtonDialog::connectButtonEvents(SimpleKeyGrabberButton *button) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -296,6 +296,7 @@ void AdvanceButtonDialog::connectButtonEvents(SimpleKeyGrabberButton *button) connect(button, &SimpleKeyGrabberButton::clicked, [this, button]() { bool leave = false; + for (int i = 0; (i < ui->slotListWidget->count()) && !leave; i++) { QListWidgetItem *item = ui->slotListWidget->item(i); @@ -313,36 +314,34 @@ void AdvanceButtonDialog::connectButtonEvents(SimpleKeyGrabberButton *button) connect(button, &SimpleKeyGrabberButton::buttonCodeChanged, [this, button](int value) { - JoyButtonSlot *tempbuttonslot = button->getValue(); - int index = ui->slotListWidget->currentRow(); + JoyButtonSlot *tempbuttonslot = button->getValue(); + int index = ui->slotListWidget->currentRow(); - QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, - Q_ARG(int, tempbuttonslot->getSlotCode()), - Q_ARG(int, tempbuttonslot->getSlotCodeAlias()), - Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, tempbuttonslot->getSlotMode())); + QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, + Q_ARG(int, tempbuttonslot->getSlotCode()), + Q_ARG(int, tempbuttonslot->getSlotCodeAlias()), + Q_ARG(int, index), + Q_ARG(JoyButtonSlot::JoySlotInputAction, tempbuttonslot->getSlotMode())); - updateSlotsScrollArea(value); + updateSlotsScrollArea(value); }); } + void AdvanceButtonDialog::deleteSlot() { qInstallMessageHandler(MessageHandler::myMessageOutput); int index = ui->slotListWidget->currentRow(); int itemcount = ui->slotListWidget->count(); - QListWidgetItem *item = ui->slotListWidget->takeItem(index); + delete item; item = nullptr; // Deleted last button. Replace with new blank button - if (index == (itemcount - 1)) - { - appendBlankKeyGrabber(); - } + if (index == (itemcount - 1)) appendBlankKeyGrabber(); changeTurboForSequences(); @@ -379,6 +378,7 @@ void AdvanceButtonDialog::appendBlankKeyGrabber() ui->slotTypeComboBox->setCurrentIndex(static_cast(KBMouseSlot)); } + void AdvanceButtonDialog::insertSlot() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -387,188 +387,148 @@ void AdvanceButtonDialog::insertSlot() int count = ui->slotListWidget->count(); int slotTypeIndex = ui->slotTypeComboBox->currentIndex(); - if (slotTypeIndex == static_cast(KBMouseSlot)) - { - if (current != (count - 1)) - { - SimpleKeyGrabberButton *blankButton = new SimpleKeyGrabberButton(this); - QListWidgetItem *item = new QListWidgetItem(); - ui->slotListWidget->insertItem(current, item); - item->setData(Qt::UserRole, - QVariant::fromValue(blankButton)); - - QHBoxLayout *layout= new QHBoxLayout(); - layout->addWidget(blankButton); - QWidget *widget = new QWidget(); - widget->setLayout(layout); - item->setSizeHint(widget->sizeHint()); - ui->slotListWidget->setItemWidget(item, widget); - ui->slotListWidget->setCurrentItem(item); - connectButtonEvents(blankButton); - blankButton->refreshButtonLabel(); - - QMetaObject::invokeMethod(&helper, "insertAssignedSlot", Qt::BlockingQueuedConnection, - Q_ARG(int, 0), Q_ARG(uint, 0), - Q_ARG(int, current)); - - updateSlotsScrollArea(0); - } - } - else if (slotTypeIndex == static_cast(CycleSlot)) + switch(slotTypeIndex) { + case 0: + + if (current != (count - 1)) + { + SimpleKeyGrabberButton *blankButton = new SimpleKeyGrabberButton(this); + QListWidgetItem *item = new QListWidgetItem(); + ui->slotListWidget->insertItem(current, item); + item->setData(Qt::UserRole, + QVariant::fromValue(blankButton)); + + QHBoxLayout *layout= new QHBoxLayout(); + layout->addWidget(blankButton); + QWidget *widget = new QWidget(); + widget->setLayout(layout); + item->setSizeHint(widget->sizeHint()); + ui->slotListWidget->setItemWidget(item, widget); + ui->slotListWidget->setCurrentItem(item); + connectButtonEvents(blankButton); + blankButton->refreshButtonLabel(); + + QMetaObject::invokeMethod(&helper, "insertAssignedSlot", Qt::BlockingQueuedConnection, + Q_ARG(int, 0), Q_ARG(uint, 0), + Q_ARG(int, current)); + + updateSlotsScrollArea(0); + } + + break; + + case 1: insertCycleSlot(); - } - else if (slotTypeIndex == static_cast(DelaySlot)) - { - insertDelaySlot(); - } - else if (slotTypeIndex == static_cast(DistanceSlot)) - { - insertDistanceSlot(); - } - else if (slotTypeIndex == static_cast(HoldSlot)) - { - insertHoldSlot(); - } - else if (slotTypeIndex == static_cast(LoadSlot)) - { - showSelectProfileWindow(); - } - else if (slotTypeIndex == static_cast(MouseModSlot)) - { - insertMouseSpeedModSlot(); - } - else if (slotTypeIndex == static_cast(PauseSlot)) - { - insertPauseSlot(); - } - else if (slotTypeIndex == static_cast(PressTimeSlot)) - { - insertKeyPressSlot(); - } - else if (slotTypeIndex == static_cast(ReleaseSlot)) - { - insertReleaseSlot(); - } - else if (slotTypeIndex == static_cast(SetChangeSlot)) - { - insertSetChangeSlot(); - } - else if (slotTypeIndex == static_cast(TextEntry)) - { - insertTextEntrySlot(); - } - else if (slotTypeIndex == static_cast(ExecuteSlot)) - { + break; + + case 2: + insertKindOfSlot(actionTimeConvert(), JoyButtonSlot::JoyDelay); + break; + + case 3: + insertKindOfSlot(ui->distanceSpinBox->value(), JoyButtonSlot::JoyDistance); + break; + + case 4: insertExecuteSlot(); - } -} + break; -void AdvanceButtonDialog::insertPauseSlot() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); + case 5: + insertKindOfSlot(actionTimeConvert(), JoyButtonSlot::JoyHold); + break; - int index = ui->slotListWidget->currentRow(); - SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() - ->data(Qt::UserRole).value(); - int actionTime = actionTimeConvert(); - if (actionTime >= 0) - { - tempbutton->setValue(actionTime, JoyButtonSlot::JoyPause); - QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, - Q_ARG(int, actionTime), - Q_ARG(int, 0), - Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, JoyButtonSlot::JoyPause)); + case 6: + showSelectProfileWindow(); + break; - updateSlotsScrollArea(actionTime); - } -} + case 7: + insertKindOfSlot(ui->mouseSpeedModSpinBox->value(), JoyButtonSlot::JoyMouseSpeedMod); + break; -void AdvanceButtonDialog::insertReleaseSlot() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); + case 8: + insertKindOfSlot(actionTimeConvert(), JoyButtonSlot::JoyPause); + break; - int index = ui->slotListWidget->currentRow(); - SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() - ->data(Qt::UserRole).value(); - int actionTime = actionTimeConvert(); - if (actionTime >= 0) - { - tempbutton->setValue(actionTime, JoyButtonSlot::JoyRelease); + case 9: + insertKindOfSlot(actionTimeConvert(), JoyButtonSlot::JoyKeyPress); + break; - QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, - Q_ARG(int, actionTime), - Q_ARG(int, 0), - Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, JoyButtonSlot::JoyRelease)); + case 10: + insertKindOfSlot(actionTimeConvert(), JoyButtonSlot::JoyRelease); + break; + + case 11: + insertKindOfSlot(ui->slotSetChangeComboBox->itemData(ui->slotSetChangeComboBox->currentIndex()).toInt(), JoyButtonSlot::JoySetChange); + break; + + case 12: + insertTextEntrySlot(); + break; - updateSlotsScrollArea(actionTime); } } -void AdvanceButtonDialog::insertHoldSlot() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); +void AdvanceButtonDialog::insertKindOfSlot(int slotProperty, JoyButtonSlot::JoySlotInputAction inputAction) +{ + int actionTime = slotProperty; int index = ui->slotListWidget->currentRow(); SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() ->data(Qt::UserRole).value(); - int actionTime = actionTimeConvert(); - if (actionTime > 0) - { - tempbutton->setValue(actionTime, JoyButtonSlot::JoyHold); - QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, - Q_ARG(int, actionTime), - Q_ARG(int, 0), - Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, JoyButtonSlot::JoyHold)); + int tempDistance = 0; + bool slotPropertyAboveLimit = actionTime >= 0; - updateSlotsScrollArea(actionTime); - } -} + if (inputAction == JoyButtonSlot::JoyDistance) { + for (int i = 0; i < ui->slotListWidget->count(); i++) + { + SimpleKeyGrabberButton *button = ui->slotListWidget->item(i) + ->data(Qt::UserRole).value(); + JoyButtonSlot *tempbuttonslot = button->getValue(); -void AdvanceButtonDialog::insertSetChangeSlot() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); + if (tempbuttonslot->getSlotMode() == JoyButtonSlot::JoyDistance) + { + tempDistance += tempbuttonslot->getSlotCode(); + } + else if (tempbuttonslot->getSlotMode() == JoyButtonSlot::JoyCycle) + { + tempDistance = 0; + } + } - int index = ui->slotListWidget->currentRow(); - SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() - ->data(Qt::UserRole).value(); + tempDistance += actionTime; + slotPropertyAboveLimit = tempDistance <= 100; + } - int currentIndex = ui->slotSetChangeComboBox->currentIndex(); - int setIndex = ui->slotSetChangeComboBox->itemData(currentIndex).toInt(); - if (setIndex >= 0) + if (slotPropertyAboveLimit) { - tempbutton->setValue(setIndex, JoyButtonSlot::JoySetChange); + tempbutton->setValue(actionTime, inputAction); QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, - Q_ARG(int, setIndex), + Q_ARG(int, actionTime), Q_ARG(int, 0), Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, JoyButtonSlot::JoySetChange)); + Q_ARG(JoyButtonSlot::JoySlotInputAction, inputAction)); - updateSlotsScrollArea(setIndex); + updateSlotsScrollArea(actionTime); } } + int AdvanceButtonDialog::actionTimeConvert() { qInstallMessageHandler(MessageHandler::myMessageOutput); - int minutesIndex = ui->actionMinutesComboBox->currentIndex(); - int secondsIndex = ui->actionSecondsComboBox->currentIndex(); - int hundredthsIndex = ui->actionHundredthsComboBox->currentIndex(); - int tenthsIndex = ui->actionTenthsComboBox->currentIndex(); + int tempMilliSeconds = ui->actionMinutesComboBox->currentIndex() * 1000 * 60; + tempMilliSeconds += ui->actionSecondsComboBox->currentIndex() * 1000; + tempMilliSeconds += ui->actionTenthsComboBox->currentIndex() * 100; + tempMilliSeconds += ui->actionHundredthsComboBox->currentIndex() * 10; - int tempMilliSeconds = minutesIndex * 1000 * 60; - tempMilliSeconds += secondsIndex * 1000; - tempMilliSeconds += tenthsIndex * 100; - tempMilliSeconds += hundredthsIndex * 10; return tempMilliSeconds; } + void AdvanceButtonDialog::refreshTimeComboBoxes(JoyButtonSlot *slot) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -576,20 +536,17 @@ void AdvanceButtonDialog::refreshTimeComboBoxes(JoyButtonSlot *slot) disconnectTimeBoxesEvents(); int slottime = slot->getSlotCode(); - int tempMinutes = slottime / 1000 / 60; - int tempSeconds = slottime / 1000 % 60; - int tempTenthsSeconds = (slottime % 1000) / 100; - int tempHundredthsSeconds = (slottime % 1000 % 100) / 10; - - ui->actionMinutesComboBox->setCurrentIndex(tempMinutes); - ui->actionSecondsComboBox->setCurrentIndex(tempSeconds); - ui->actionTenthsComboBox->setCurrentIndex(tempTenthsSeconds); - ui->actionHundredthsComboBox->setCurrentIndex(tempHundredthsSeconds); + + ui->actionMinutesComboBox->setCurrentIndex(slottime / 1000 / 60); + ui->actionSecondsComboBox->setCurrentIndex(slottime / 1000 % 60); + ui->actionTenthsComboBox->setCurrentIndex((slottime % 1000) / 100); + ui->actionHundredthsComboBox->setCurrentIndex((slottime % 1000 % 100) / 10); updateActionTimeLabel(); connectTimeBoxesEvents(); } + void AdvanceButtonDialog::updateActionTimeLabel() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -598,12 +555,14 @@ void AdvanceButtonDialog::updateActionTimeLabel() int minutes = actionTime / 1000 / 60; double hundredths = actionTime % 1000 / 1000.0; double seconds = (actionTime / 1000 % 60) + hundredths; - QString temp = QString(); - temp.append(QString::number(minutes)).append("m "); - temp.append(QString::number(seconds, 'f', 2)).append("s"); - ui->actionTimeLabel->setText(temp); + QString actionTimeLabel = QString(); + + actionTimeLabel.append(QString::number(minutes)).append("m "); + actionTimeLabel.append(QString::number(seconds, 'f', 2)).append("s"); + ui->actionTimeLabel->setText(actionTimeLabel); } + void AdvanceButtonDialog::clearAllSlots() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -612,22 +571,25 @@ void AdvanceButtonDialog::clearAllSlots() appendBlankKeyGrabber(); changeTurboForSequences(); - QMetaObject::invokeMethod(button, "clearSlotsEventReset", Qt::BlockingQueuedConnection); + QMetaObject::invokeMethod(m_button, "clearSlotsEventReset", Qt::BlockingQueuedConnection); performStatsWidgetRefresh(ui->slotListWidget->currentItem()); emit slotsChanged(); } + void AdvanceButtonDialog::changeTurboForSequences() { qInstallMessageHandler(MessageHandler::myMessageOutput); bool containsSequences = false; + for (int i = 0; (i < ui->slotListWidget->count()) && !containsSequences; i++) { SimpleKeyGrabberButton *button = ui->slotListWidget->item(i) ->data(Qt::UserRole).value(); JoyButtonSlot *tempbuttonslot = button->getValue(); + if ((tempbuttonslot->getSlotCode() > 0) && ((tempbuttonslot->getSlotMode() == JoyButtonSlot::JoyPause) || (tempbuttonslot->getSlotMode() == JoyButtonSlot::JoyHold) || @@ -644,7 +606,7 @@ void AdvanceButtonDialog::changeTurboForSequences() if (ui->turboCheckbox->isChecked()) { ui->turboCheckbox->setChecked(false); - this->button->setUseTurbo(false); + m_button->setUseTurbo(false); emit turboChanged(false); } @@ -654,13 +616,10 @@ void AdvanceButtonDialog::changeTurboForSequences() emit turboButtonEnabledChange(false); } } - else + else if (!ui->turboCheckbox->isEnabled()) { - if (!ui->turboCheckbox->isEnabled()) - { - ui->turboCheckbox->setEnabled(true); - emit turboButtonEnabledChange(true); - } + ui->turboCheckbox->setEnabled(true); + emit turboButtonEnabledChange(true); } } @@ -682,44 +641,6 @@ void AdvanceButtonDialog::insertCycleSlot() updateSlotsScrollArea(1); } -void AdvanceButtonDialog::insertDistanceSlot() -{ - - qInstallMessageHandler(MessageHandler::myMessageOutput); - int index = ui->slotListWidget->currentRow(); - SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() - ->data(Qt::UserRole).value(); - - int tempDistance = 0; - for (int i = 0; i < ui->slotListWidget->count(); i++) - { - SimpleKeyGrabberButton *button = ui->slotListWidget->item(i) - ->data(Qt::UserRole).value(); - JoyButtonSlot *tempbuttonslot = button->getValue(); - if (tempbuttonslot->getSlotMode() == JoyButtonSlot::JoyDistance) - { - tempDistance += tempbuttonslot->getSlotCode(); - } - else if (tempbuttonslot->getSlotMode() == JoyButtonSlot::JoyCycle) - { - tempDistance = 0; - } - } - - int testDistance = ui->distanceSpinBox->value(); - if ((testDistance + tempDistance) <= 100) - { - tempbutton->setValue(testDistance, JoyButtonSlot::JoyDistance); - - QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, - Q_ARG(int, testDistance), - Q_ARG(int, 0), - Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, JoyButtonSlot::JoyDistance)); - - updateSlotsScrollArea(testDistance); - } -} void AdvanceButtonDialog::placeNewSlot(JoyButtonSlot *slot) { @@ -741,16 +662,18 @@ void AdvanceButtonDialog::placeNewSlot(JoyButtonSlot *slot) slot->deleteLater(); } + void AdvanceButtonDialog::updateTurboIntervalValue(int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (value >= MINIMUMTURBO) + if (value >= GlobalVariables::AdvanceButtonDialog::MINIMUMTURBO) { - button->setTurboInterval(value * 10); + m_button->setTurboInterval(value * 10); } } + void AdvanceButtonDialog::checkTurboSetting(bool state) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -758,19 +681,19 @@ void AdvanceButtonDialog::checkTurboSetting(bool state) ui->turboCheckbox->setChecked(state); ui->turboSlider->setEnabled(state); - if (this->button->isPartRealAxis()) - { + if (m_button->isPartRealAxis()) ui->turboModeComboBox->setEnabled(state); - } changeTurboForSequences(); - button->setUseTurbo(state); - if ((button->getTurboInterval() / 10) >= MINIMUMTURBO) + m_button->setUseTurbo(state); + + if ((m_button->getTurboInterval() / 10) >= GlobalVariables::AdvanceButtonDialog::MINIMUMTURBO) { - ui->turboSlider->setValue(button->getTurboInterval() / 10); + ui->turboSlider->setValue(m_button->getTurboInterval() / 10); } } + void AdvanceButtonDialog::updateSetSelection() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -782,17 +705,14 @@ void AdvanceButtonDialog::updateSetSelection() if (ui->setSelectionComboBox->currentIndex() > 0) { - int condition_choice = 0; - condition_choice = (ui->setSelectionComboBox->currentIndex() + 2) % 3; + int condition_choice = (ui->setSelectionComboBox->currentIndex() + 2) % 3; chosen_set = (ui->setSelectionComboBox->currentIndex() - 1) / 3; - // Above removed rows - if (button->getOriginSet() > chosen_set) + if (m_button->getOriginSet() > chosen_set) // Above removed rows { chosen_set = (ui->setSelectionComboBox->currentIndex() - 1) / 3; } - // Below removed rows - else + else // Below removed rows { chosen_set = (ui->setSelectionComboBox->currentIndex() + 2) / 3; } @@ -801,17 +721,19 @@ void AdvanceButtonDialog::updateSetSelection() qDebug() << "CONDITION: " << QString::number(condition_choice) << endl; #endif - if (condition_choice == 0) - { - set_selection_condition = JoyButton::SetChangeOneWay; - } - else if (condition_choice == 1) - { - set_selection_condition = JoyButton::SetChangeTwoWay; - } - else if (condition_choice == 2) + switch(condition_choice) { - set_selection_condition = JoyButton::SetChangeWhileHeld; + case 0: + set_selection_condition = JoyButton::SetChangeOneWay; + break; + + case 1: + set_selection_condition = JoyButton::SetChangeTwoWay; + break; + + case 2: + set_selection_condition = JoyButton::SetChangeWhileHeld; + break; } #ifndef QT_DEBUG_NO_OUTPUT @@ -828,34 +750,35 @@ void AdvanceButtonDialog::updateSetSelection() { // First, remove old condition for the button in both sets. // After that, make the new assignment. - button->setChangeSetCondition(JoyButton::SetChangeDisabled); - - button->setChangeSetSelection(chosen_set); - button->setChangeSetCondition(set_selection_condition); + m_button->setChangeSetCondition(JoyButton::SetChangeDisabled); + m_button->setChangeSetSelection(chosen_set); + m_button->setChangeSetCondition(set_selection_condition); } else { - button->setChangeSetCondition(JoyButton::SetChangeDisabled); + m_button->setChangeSetCondition(JoyButton::SetChangeDisabled); } PadderCommon::inputDaemonMutex.unlock(); } + void AdvanceButtonDialog::checkTurboIntervalValue(int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (value >= MINIMUMTURBO) + if (value >= GlobalVariables::AdvanceButtonDialog::MINIMUMTURBO) { changeTurboText(value); updateTurboIntervalValue(value); } else { - ui->turboSlider->setValue(MINIMUMTURBO); + ui->turboSlider->setValue(GlobalVariables::AdvanceButtonDialog::MINIMUMTURBO); } } + void AdvanceButtonDialog::fillTimeComboBoxes() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -865,214 +788,154 @@ void AdvanceButtonDialog::fillTimeComboBoxes() ui->actionHundredthsComboBox->clear(); ui->actionTenthsComboBox->clear(); - for (double i=0; i <= 10; i++) + for (int i = 0; i <= 10; i++) { - QString temp = QString::number(i, 'g', 2).append("m"); - ui->actionMinutesComboBox->addItem(temp); + QString minText = QString::number(i, 'g', 2).append("m"); + ui->actionMinutesComboBox->addItem(minText); } - for (double i=0; i <= 59; i++) + for (int i = 0; i <= 59; i++) { - QString temp = QString::number(i, 'g', 2); - ui->actionSecondsComboBox->addItem(temp); + QString secsText = QString::number(i, 'g', 2); + ui->actionSecondsComboBox->addItem(secsText); } - for (int i=0; i < 10; i++) + for (int i = 0; i < 10; i++) { - QString temp = QString(".%1").arg(i, 1, 10, QChar('0')); - ui->actionTenthsComboBox->addItem(temp); + QString tenthsText = QString(".%1").arg(i, 1, 10, QChar('0')); + ui->actionTenthsComboBox->addItem(tenthsText); } - for (int i=0; i < 10; i++) + for (int i = 0; i < 10; i++) { - QString temp = QString("%1s").arg(i, 1, 10, QChar('0')); - ui->actionHundredthsComboBox->addItem(temp); + QString hundrText = QString("%1s").arg(i, 1, 10, QChar('0')); + ui->actionHundredthsComboBox->addItem(hundrText); } } -void AdvanceButtonDialog::insertMouseSpeedModSlot() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); - - int index = ui->slotListWidget->currentRow(); - SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() - ->data(Qt::UserRole).value(); - int tempMouseMod = ui->mouseSpeedModSpinBox->value(); - if (tempMouseMod > 0) - { - tempbutton->setValue(tempMouseMod, JoyButtonSlot::JoyMouseSpeedMod); - - QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, - Q_ARG(int, tempMouseMod), - Q_ARG(int, 0), - Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, JoyButtonSlot::JoyMouseSpeedMod)); - - updateSlotsScrollArea(tempMouseMod); - } -} - -void AdvanceButtonDialog::insertKeyPressSlot() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); - - int index = ui->slotListWidget->currentRow(); - SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() - ->data(Qt::UserRole).value(); - int actionTime = actionTimeConvert(); - if (actionTime > 0) - { - tempbutton->setValue(actionTime, JoyButtonSlot::JoyKeyPress); - - QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, - Q_ARG(int, actionTime), - Q_ARG(int, 0), - Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, JoyButtonSlot::JoyKeyPress)); - - updateSlotsScrollArea(actionTime); - } -} - -void AdvanceButtonDialog::insertDelaySlot() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); - - int index = ui->slotListWidget->currentRow(); - SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() - ->data(Qt::UserRole).value(); - int actionTime = actionTimeConvert(); - if (actionTime > 0) - { - tempbutton->setValue(actionTime, JoyButtonSlot::JoyDelay); - - QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, - Q_ARG(int, actionTime), - Q_ARG(int, 0), - Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, JoyButtonSlot::JoyDelay)); - - updateSlotsScrollArea(actionTime); - } -} void AdvanceButtonDialog::insertTextEntrySlot() { qInstallMessageHandler(MessageHandler::myMessageOutput); + QString entryText = ui->textEntryLineEdit->text(); int index = ui->slotListWidget->currentRow(); - SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() + SimpleKeyGrabberButton *textEntryButton = ui->slotListWidget->currentItem() ->data(Qt::UserRole).value(); - QString temp = ui->textEntryLineEdit->text(); - if (!temp.isEmpty()) + + if (!entryText.isEmpty()) { - tempbutton->setValue(temp, JoyButtonSlot::JoyTextEntry); + textEntryButton->setValue(entryText, JoyButtonSlot::JoyTextEntry); QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, - Q_ARG(JoyButtonSlot*, tempbutton->getValue()), + Q_ARG(JoyButtonSlot*, textEntryButton->getValue()), Q_ARG(int, index)); - tempbutton->setToolTip(temp); + + textEntryButton->setToolTip(entryText); updateSlotsScrollArea(0); } } + void AdvanceButtonDialog::insertExecuteSlot() { qInstallMessageHandler(MessageHandler::myMessageOutput); + QString execSlotName = ui->execLineEdit->text(); + QString argsExecSlot = ui->execArgumentsLineEdit->text(); + QFileInfo execSlotNameInfo(execSlotName); int index = ui->slotListWidget->currentRow(); - SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() + SimpleKeyGrabberButton *execbutton = ui->slotListWidget->currentItem() ->data(Qt::UserRole).value(); - QString temp = ui->execLineEdit->text(); - QString argumentsTemp = ui->execArgumentsLineEdit->text(); - if (!temp.isEmpty()) + + if (!execSlotName.isEmpty() && execSlotNameInfo.exists() && execSlotNameInfo.isExecutable()) { - QFileInfo tempFileInfo(temp); - if (tempFileInfo.exists() && tempFileInfo.isExecutable()) - { - tempbutton->setValue(temp, JoyButtonSlot::JoyExecute); - if (!argumentsTemp.isEmpty()) - { - tempbutton->getValue()->setExtraData(QVariant(argumentsTemp)); - } + execbutton->setValue(execSlotName, JoyButtonSlot::JoyExecute); - QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, - Q_ARG(JoyButtonSlot*, tempbutton->getValue()), + if (!argsExecSlot.isEmpty()) + execbutton->getValue()->setExtraData(QVariant(argsExecSlot)); + + QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, + Q_ARG(JoyButtonSlot*, execbutton->getValue()), Q_ARG(int, index)); - tempbutton->setToolTip(temp); - updateSlotsScrollArea(0); - } + execbutton->setToolTip(execSlotName); + updateSlotsScrollArea(0); } } + void AdvanceButtonDialog::performStatsWidgetRefresh(QListWidgetItem *item) { qInstallMessageHandler(MessageHandler::myMessageOutput); - SimpleKeyGrabberButton *tempbutton = item->data(Qt::UserRole).value(); - JoyButtonSlot *slot = tempbutton->getValue(); + SimpleKeyGrabberButton *button = item->data(Qt::UserRole).value(); + JoyButtonSlot *slot = button->getValue(); if ((slot->getSlotMode() == JoyButtonSlot::JoyKeyboard) && (slot->getSlotCode() != 0)) { - ui->slotTypeComboBox->setCurrentIndex(static_cast(KBMouseSlot)); + ui->slotTypeComboBox->setCurrentIndex(0); } else if ((slot->getSlotMode() == JoyButtonSlot::JoyMouseButton) || (slot->getSlotMode() == JoyButtonSlot::JoyMouseMovement)) { - ui->slotTypeComboBox->setCurrentIndex(static_cast(KBMouseSlot)); + ui->slotTypeComboBox->setCurrentIndex(0); } else if (slot->getSlotMode() == JoyButtonSlot::JoyCycle) { - ui->slotTypeComboBox->setCurrentIndex(static_cast(CycleSlot)); + ui->slotTypeComboBox->setCurrentIndex(1); } else if (slot->getSlotMode() == JoyButtonSlot::JoyDelay) { - ui->slotTypeComboBox->setCurrentIndex(static_cast(DelaySlot)); + ui->slotTypeComboBox->setCurrentIndex(2); refreshTimeComboBoxes(slot); } else if (slot->getSlotMode() == JoyButtonSlot::JoyDistance) { - ui->slotTypeComboBox->setCurrentIndex(static_cast(DistanceSlot)); + ui->slotTypeComboBox->setCurrentIndex(3); disconnect(ui->distanceSpinBox, static_cast(&QSpinBox::valueChanged), this, &AdvanceButtonDialog::checkSlotDistanceUpdate); + ui->distanceSpinBox->setValue(slot->getSlotCode()); + connect(ui->distanceSpinBox, static_cast(&QSpinBox::valueChanged), this, &AdvanceButtonDialog::checkSlotDistanceUpdate); } else if (slot->getSlotMode() == JoyButtonSlot::JoyHold) { - ui->slotTypeComboBox->setCurrentIndex(static_cast(HoldSlot)); + ui->slotTypeComboBox->setCurrentIndex(5); refreshTimeComboBoxes(slot); } else if (slot->getSlotMode() == JoyButtonSlot::JoyLoadProfile) { - ui->slotTypeComboBox->setCurrentIndex(static_cast(LoadSlot)); + ui->slotTypeComboBox->setCurrentIndex(6); } else if (slot->getSlotMode() == JoyButtonSlot::JoyMouseSpeedMod) { - ui->slotTypeComboBox->setCurrentIndex(static_cast(MouseModSlot)); + ui->slotTypeComboBox->setCurrentIndex(7); disconnect(ui->mouseSpeedModSpinBox, static_cast(&QSpinBox::valueChanged), this, &AdvanceButtonDialog::checkSlotMouseModUpdate); + ui->mouseSpeedModSpinBox->setValue(slot->getSlotCode()); + connect(ui->mouseSpeedModSpinBox, static_cast(&QSpinBox::valueChanged), this, &AdvanceButtonDialog::checkSlotMouseModUpdate); } else if (slot->getSlotMode() == JoyButtonSlot::JoyPause) { - ui->slotTypeComboBox->setCurrentIndex(static_cast(PauseSlot)); + ui->slotTypeComboBox->setCurrentIndex(8); refreshTimeComboBoxes(slot); } else if (slot->getSlotMode() == JoyButtonSlot::JoyKeyPress) { - ui->slotTypeComboBox->setCurrentIndex(static_cast(PressTimeSlot)); + ui->slotTypeComboBox->setCurrentIndex(9); refreshTimeComboBoxes(slot); } else if (slot->getSlotMode() == JoyButtonSlot::JoyRelease) { - ui->slotTypeComboBox->setCurrentIndex(static_cast(ReleaseSlot)); + ui->slotTypeComboBox->setCurrentIndex(10); refreshTimeComboBoxes(slot); } else if (slot->getSlotMode() == JoyButtonSlot::JoySetChange) @@ -1080,72 +943,72 @@ void AdvanceButtonDialog::performStatsWidgetRefresh(QListWidgetItem *item) disconnect(ui->slotSetChangeComboBox, static_cast(&QComboBox::currentIndexChanged), this, &AdvanceButtonDialog::checkSlotSetChangeUpdate); - ui->slotTypeComboBox->setCurrentIndex(static_cast(SetChangeSlot)); + ui->slotTypeComboBox->setCurrentIndex(11); int chooseIndex = slot->getSlotCode(); - int foundIndex = ui->slotSetChangeComboBox->findData(QVariant(chooseIndex)); + if (foundIndex >= 0) - { ui->slotSetChangeComboBox->setCurrentIndex(foundIndex); - } connect(ui->slotSetChangeComboBox, static_cast(&QComboBox::currentIndexChanged), this, &AdvanceButtonDialog::checkSlotSetChangeUpdate); } else if (slot->getSlotMode() == JoyButtonSlot::JoyTextEntry) { - ui->slotTypeComboBox->setCurrentIndex(static_cast(TextEntry)); + ui->slotTypeComboBox->setCurrentIndex(12); ui->textEntryLineEdit->setText(slot->getTextData()); } else if (slot->getSlotMode() == JoyButtonSlot::JoyExecute) { - ui->slotTypeComboBox->setCurrentIndex(static_cast(ExecuteSlot)); + ui->slotTypeComboBox->setCurrentIndex(4); ui->execLineEdit->setText(slot->getTextData()); ui->execArgumentsLineEdit->setText(slot->getExtraData().toString()); } } + void AdvanceButtonDialog::checkSlotTimeUpdate() { qInstallMessageHandler(MessageHandler::myMessageOutput); + int actionTime = actionTimeConvert(); int index = ui->slotListWidget->currentRow(); - SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() + SimpleKeyGrabberButton *button = ui->slotListWidget->currentItem() ->data(Qt::UserRole).value(); - JoyButtonSlot *tempbuttonslot = tempbutton->getValue(); - if ((tempbuttonslot->getSlotMode() == JoyButtonSlot::JoyPause) || - (tempbuttonslot->getSlotMode() == JoyButtonSlot::JoyHold) || - (tempbuttonslot->getSlotMode() == JoyButtonSlot::JoyRelease) || - (tempbuttonslot->getSlotMode() == JoyButtonSlot::JoyKeyPress) || - (tempbuttonslot->getSlotMode() == JoyButtonSlot::JoyDelay)) + JoyButtonSlot *buttonSlot = button->getValue(); + + if ((buttonSlot->getSlotMode() == JoyButtonSlot::JoyPause) || + (buttonSlot->getSlotMode() == JoyButtonSlot::JoyHold) || + (buttonSlot->getSlotMode() == JoyButtonSlot::JoyRelease) || + (buttonSlot->getSlotMode() == JoyButtonSlot::JoyKeyPress) || + (buttonSlot->getSlotMode() == JoyButtonSlot::JoyDelay)) { - int actionTime = actionTimeConvert(); if (actionTime > 0) { - tempbutton->setValue(actionTime, tempbuttonslot->getSlotMode()); + button->setValue(actionTime, buttonSlot->getSlotMode()); QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, Q_ARG(int, actionTime), Q_ARG(int, 0), Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, tempbuttonslot->getSlotMode())); + Q_ARG(JoyButtonSlot::JoySlotInputAction, buttonSlot->getSlotMode())); updateSlotsScrollArea(actionTime); } } - } + void AdvanceButtonDialog::checkSlotMouseModUpdate() { qInstallMessageHandler(MessageHandler::myMessageOutput); + int tempMouseMod = ui->mouseSpeedModSpinBox->value(); int index = ui->slotListWidget->currentRow(); SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() ->data(Qt::UserRole).value(); JoyButtonSlot *tempbuttonslot = tempbutton->getValue(); - int tempMouseMod = ui->mouseSpeedModSpinBox->value(); if ((tempbuttonslot->getSlotMode() == JoyButtonSlot::JoyMouseSpeedMod) && (tempMouseMod > 0)) { @@ -1161,6 +1024,7 @@ void AdvanceButtonDialog::checkSlotMouseModUpdate() } } + void AdvanceButtonDialog::checkSlotSetChangeUpdate() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -1169,26 +1033,24 @@ void AdvanceButtonDialog::checkSlotSetChangeUpdate() SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() ->data(Qt::UserRole).value(); JoyButtonSlot *buttonslot = tempbutton->getValue(); - if (buttonslot->getSlotMode() == JoyButtonSlot::JoySetChange) - { - int comboIndex = ui->slotSetChangeComboBox->currentIndex(); - int setIndex = ui->slotSetChangeComboBox->itemData(comboIndex).toInt(); - if (setIndex >= 0) - { - tempbutton->setValue(setIndex, buttonslot->getSlotMode()); + if (buttonslot->getSlotMode() == JoyButtonSlot::JoySetChange && (ui->slotSetChangeComboBox->itemData(ui->slotSetChangeComboBox->currentIndex()).toInt() >= 0)) + { + int comboIndex = ui->slotSetChangeComboBox->currentIndex(); + int setIndex = ui->slotSetChangeComboBox->itemData(comboIndex).toInt(); + tempbutton->setValue(setIndex, buttonslot->getSlotMode()); - QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, + QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, Q_ARG(int, setIndex), Q_ARG(int, 0), Q_ARG(int, index), Q_ARG(JoyButtonSlot::JoySlotInputAction, buttonslot->getSlotMode())); - updateSlotsScrollArea(setIndex); - } + updateSlotsScrollArea(setIndex); } } + void AdvanceButtonDialog::checkSlotDistanceUpdate() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -1207,6 +1069,7 @@ void AdvanceButtonDialog::checkSlotDistanceUpdate() SimpleKeyGrabberButton *button = ui->slotListWidget->item(i) ->data(Qt::UserRole).value(); JoyButtonSlot *tempbuttonslot = button->getValue(); + if (tempbuttonslot->getSlotMode() == JoyButtonSlot::JoyDistance) { tempDistance += tempbuttonslot->getSlotCode(); @@ -1219,6 +1082,7 @@ void AdvanceButtonDialog::checkSlotDistanceUpdate() int testDistance = ui->distanceSpinBox->value(); tempDistance += testDistance - buttonslot->getSlotCode(); + if (tempDistance <= 100) { tempbutton->setValue(testDistance, buttonslot->getSlotMode()); @@ -1234,68 +1098,65 @@ void AdvanceButtonDialog::checkSlotDistanceUpdate() } } + void AdvanceButtonDialog::updateWindowTitleButtonName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QString temp = QString(); - temp.append(trUtf8("Advanced").append(": ")).append(button->getPartialName(false, true)); + QString windTitleBtnName = QString().append(trUtf8("Advanced").append(": ")).append(m_button->getPartialName(false, true)); - if (button->getParentSet()->getIndex() != 0) + if (m_button->getParentSet()->getIndex() != 0) { - int setIndex = button->getParentSet()->getRealIndex(); - temp.append(" [").append(trUtf8("Set %1").arg(setIndex)); + int setIndex = m_button->getParentSet()->getRealIndex(); + windTitleBtnName.append(" [").append(trUtf8("Set %1").arg(setIndex)); + QString setName = m_button->getParentSet()->getName(); - QString setName = button->getParentSet()->getName(); if (!setName.isEmpty()) - { - temp.append(": ").append(setName); - } + windTitleBtnName.append(": ").append(setName); - temp.append("]"); + windTitleBtnName.append("]"); } - setWindowTitle(temp); + setWindowTitle(windTitleBtnName); } + void AdvanceButtonDialog::checkCycleResetWidgetStatus(bool enabled) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (enabled) - { - ui->resetCycleDoubleSpinBox->setEnabled(true); - } - else - { - ui->resetCycleDoubleSpinBox->setEnabled(false); - } + if (enabled) ui->resetCycleDoubleSpinBox->setEnabled(true); + else ui->resetCycleDoubleSpinBox->setEnabled(false); } + void AdvanceButtonDialog::setButtonCycleResetInterval(double value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - int milliseconds = (static_cast(value) * 1000) + static_cast(fmod(value, 1.0) * 1000); - button->setCycleResetTime(milliseconds); + int milliseconds = (value * 1000) + (fmod(value, 1.0) * 1000); + m_button->setCycleResetTime(milliseconds); } + void AdvanceButtonDialog::populateAutoResetInterval() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double seconds = button->getCycleResetTime() / 1000.0; + double seconds = m_button->getCycleResetTime() / 1000.0; ui->resetCycleDoubleSpinBox->setValue(seconds); } + void AdvanceButtonDialog::setButtonCycleReset(bool enabled) { qInstallMessageHandler(MessageHandler::myMessageOutput); if (enabled) { - button->setCycleResetStatus(true); - if ((button->getCycleResetTime() == 0) && (ui->resetCycleDoubleSpinBox->value() > 0.0)) + m_button->setCycleResetStatus(true); + + if ((m_button->getCycleResetTime() == 0) && (ui->resetCycleDoubleSpinBox->value() > 0.0)) { double current = ui->resetCycleDoubleSpinBox->value(); setButtonCycleResetInterval(current); @@ -1303,10 +1164,11 @@ void AdvanceButtonDialog::setButtonCycleReset(bool enabled) } else { - button->setCycleResetStatus(false); + m_button->setCycleResetStatus(false); } } + void AdvanceButtonDialog::resetTimeBoxes() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -1322,6 +1184,7 @@ void AdvanceButtonDialog::resetTimeBoxes() connectTimeBoxesEvents(); } + void AdvanceButtonDialog::disconnectTimeBoxesEvents() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -1345,6 +1208,7 @@ void AdvanceButtonDialog::disconnectTimeBoxesEvents() this, &AdvanceButtonDialog::checkSlotTimeUpdate); } + void AdvanceButtonDialog::connectTimeBoxesEvents() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -1368,41 +1232,34 @@ void AdvanceButtonDialog::connectTimeBoxesEvents() this, &AdvanceButtonDialog::checkSlotTimeUpdate); } + void AdvanceButtonDialog::populateSetSelectionComboBox() { qInstallMessageHandler(MessageHandler::myMessageOutput); ui->setSelectionComboBox->clear(); ui->setSelectionComboBox->insertItem(0, trUtf8("Disabled")); - int currentIndex = 1; - for (int i = 0; i < InputDevice::NUMBER_JOYSETS; i++) + + QHash::iterator set; + int originset = 0; + + for (set = m_button->getParentSet()->getInputDevice()->getJoystick_sets().begin(); set != m_button->getParentSet()->getInputDevice()->getJoystick_sets().end(); ++set) { - if (this->button->getOriginSet() != i) + if (m_button->getOriginSet() != originset) { - QString temp = QString(); - temp.append(trUtf8("Select Set %1").arg(i+1)); + QString selectedSetText = QString(trUtf8("Select Set %1").arg(originset+1)); + QString setName = set.value()->getName(); - InputDevice *tempdevice = button->getParentSet()->getInputDevice(); - SetJoystick *tempset = tempdevice->getSetJoystick(i); - if (tempset != nullptr) + if (!setName.isEmpty()) { - QString setName = tempset->getName(); - if (!setName.isEmpty()) - { - temp.append(" ").append("["); - temp.append(setName).append("]").append(" "); - } + selectedSetText.append(" ").append("["); + selectedSetText.append(setName).append("]").append(" "); } - QString oneWayText = QString(); - oneWayText.append(temp).append(" ").append(trUtf8("One Way")); - - QString twoWayText = QString(); - twoWayText.append(temp).append(" ").append(trUtf8("Two Way")); - - QString whileHeldText = QString(); - whileHeldText.append(temp).append(" ").append(trUtf8("While Held")); + QString oneWayText = QString(selectedSetText).append(" ").append(trUtf8("One Way")); + QString twoWayText = QString(selectedSetText).append(" ").append(trUtf8("Two Way")); + QString whileHeldText = QString(selectedSetText).append(" ").append(trUtf8("While Held")); QStringList setChoices = QStringList(); setChoices.append(oneWayText); @@ -1412,275 +1269,281 @@ void AdvanceButtonDialog::populateSetSelectionComboBox() ui->setSelectionComboBox->insertItems(currentIndex, setChoices); currentIndex += 3; } + + originset++; } } + void AdvanceButtonDialog::populateSlotSetSelectionComboBox() { qInstallMessageHandler(MessageHandler::myMessageOutput); ui->slotSetChangeComboBox->clear(); - int currentIndex = 0; - for (int i=0; i < InputDevice::NUMBER_JOYSETS; i++) + + QHash::iterator set; + int originset = 0; + + for (set = m_button->getParentSet()->getInputDevice()->getJoystick_sets().begin(); set != m_button->getParentSet()->getInputDevice()->getJoystick_sets().end(); ++set) { - if (this->button->getOriginSet() != i) + if (m_button->getOriginSet() != originset) { - QString temp = QString(); - temp.append(trUtf8("Select Set %1").arg(i+1)); + QString selectedSetSlotText = QString(trUtf8("Select Set %1").arg(originset+1)); + QString setName = set.value()->getName(); - InputDevice *tempdevice = button->getParentSet()->getInputDevice(); - SetJoystick *tempset = tempdevice->getSetJoystick(i); - if (tempset != nullptr) + if (!setName.isEmpty()) { - QString setName = tempset->getName(); - if (!setName.isEmpty()) - { - temp.append(" ").append("["); - temp.append(setName).append("]").append(" "); - } + selectedSetSlotText.append(" ").append("["); + selectedSetSlotText.append(setName).append("]").append(" "); } - ui->slotSetChangeComboBox->insertItem(currentIndex, temp, QVariant(i)); + ui->slotSetChangeComboBox->insertItem(currentIndex, selectedSetSlotText, QVariant(originset)); currentIndex++; } + + originset++; } } + void AdvanceButtonDialog::findTurboModeComboIndex() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyButton::TurboMode currentTurboMode = this->button->getTurboMode(); - if (currentTurboMode == JoyButton::NormalTurbo) - { - ui->turboModeComboBox->setCurrentIndex(0); - } - else if (currentTurboMode == JoyButton::GradientTurbo) - { - ui->turboModeComboBox->setCurrentIndex(1); - } - else if (currentTurboMode == JoyButton::PulseTurbo) + JoyButton::TurboMode currentTurboMode = m_button->getTurboMode(); + + switch(static_cast(currentTurboMode)) { - ui->turboModeComboBox->setCurrentIndex(2); + case 0: + ui->turboModeComboBox->setCurrentIndex(0); + break; + + case 1: + ui->turboModeComboBox->setCurrentIndex(1); + break; + + case 2: + ui->turboModeComboBox->setCurrentIndex(2); + break; } } + void AdvanceButtonDialog::setButtonTurboMode(int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (value == 0) + switch(value) { - this->button->setTurboMode(JoyButton::NormalTurbo); - } - else if (value == 1) - { - this->button->setTurboMode(JoyButton::GradientTurbo); - } - else if (value == 2) - { - this->button->setTurboMode(JoyButton::PulseTurbo); + case 0: + m_button->setTurboMode(JoyButton::NormalTurbo); + break; + + case 1: + m_button->setTurboMode(JoyButton::GradientTurbo); + break; + + case 2: + m_button->setTurboMode(JoyButton::PulseTurbo); + break; } } + void AdvanceButtonDialog::showSelectProfileWindow() { qInstallMessageHandler(MessageHandler::myMessageOutput); - AntiMicroSettings *settings = this->button->getParentSet()->getInputDevice()->getSettings(); - - QString lookupDir = PadderCommon::preferredProfileDir(settings); - QString filename = QFileDialog::getOpenFileName(this, trUtf8("Choose Profile"), - lookupDir, trUtf8("Config Files (*.amgp *.xml)")); - if (!filename.isEmpty()) + AntiMicroSettings *settings = m_button->getParentSet()->getInputDevice()->getSettings(); + QString preferredDir = PadderCommon::preferredProfileDir(settings); + QString profileName = QFileDialog::getOpenFileName(this, trUtf8("Choose Profile"), + preferredDir, trUtf8("Config Files (*.amgp *.xml)")); + if (!profileName.isEmpty()) { int index = ui->slotListWidget->currentRow(); - SimpleKeyGrabberButton *tempbutton = ui->slotListWidget->currentItem() + SimpleKeyGrabberButton *button = ui->slotListWidget->currentItem() ->data(Qt::UserRole).value(); - tempbutton->setValue(filename, JoyButtonSlot::JoyLoadProfile); + button->setValue(profileName, JoyButtonSlot::JoyLoadProfile); QMetaObject::invokeMethod(&helper, "setAssignedSlot", Qt::BlockingQueuedConnection, - Q_ARG(JoyButtonSlot*, tempbutton->getValue()), + Q_ARG(JoyButtonSlot*, button->getValue()), Q_ARG(int, index)); - tempbutton->setToolTip(filename); + button->setToolTip(profileName); updateSlotsScrollArea(0); } } + void AdvanceButtonDialog::showFindExecutableWindow(bool) { qInstallMessageHandler(MessageHandler::myMessageOutput); - QString temp = ui->execLineEdit->text(); - QString lookupDir = QDir::homePath(); - if (!temp.isEmpty()) + QString execWindText = ui->execLineEdit->text(); + QString preferredPath = QDir::homePath(); + + if (!execWindText.isEmpty()) { - QFileInfo tempFileInfo(temp); - if (tempFileInfo.absoluteDir().exists()) - { - lookupDir = tempFileInfo.absoluteDir().absolutePath(); - } + QFileInfo execWindFileInfo(execWindText); + + if (execWindFileInfo.absoluteDir().exists()) + preferredPath = execWindFileInfo.absoluteDir().absolutePath(); } - QString filepath = QFileDialog::getOpenFileName(this, trUtf8("Choose Executable"), lookupDir); - if (!filepath.isEmpty()) + QString execWindFilepath = QFileDialog::getOpenFileName(this, trUtf8("Choose Executable"), preferredPath); + + if (!execWindFilepath.isEmpty()) { - QFileInfo tempFileInfo(filepath); - if (tempFileInfo.exists() && tempFileInfo.isExecutable()) - { - ui->execLineEdit->setText(filepath); - } + QFileInfo execWindFileInfo(execWindFilepath); + + if (execWindFileInfo.exists() && execWindFileInfo.isExecutable()) + ui->execLineEdit->setText(execWindFilepath); } } + void AdvanceButtonDialog::changeSlotTypeDisplay(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (index == static_cast(KBMouseSlot)) - { - ui->slotControlsStackedWidget->setCurrentIndex(0); - } - else if (index == static_cast(CycleSlot)) - { - ui->slotControlsStackedWidget->setCurrentIndex(3); - } - else if (index == static_cast(DelaySlot)) - { - ui->slotControlsStackedWidget->setCurrentIndex(0); - } - else if (index == static_cast(DistanceSlot)) - { - ui->slotControlsStackedWidget->setCurrentIndex(2); - } - else if (index == static_cast(HoldSlot)) - { - ui->slotControlsStackedWidget->setCurrentIndex(0); - } - else if (index == static_cast(LoadSlot)) - { - ui->slotControlsStackedWidget->setCurrentIndex(4); - } - else if (index == static_cast(MouseModSlot)) - { - ui->slotControlsStackedWidget->setCurrentIndex(1); - } - else if (index == static_cast(PauseSlot)) - { - ui->slotControlsStackedWidget->setCurrentIndex(0); - } - else if (index == static_cast(PressTimeSlot)) - { - ui->slotControlsStackedWidget->setCurrentIndex(0); - } - else if (index == static_cast(ReleaseSlot)) - { - ui->slotControlsStackedWidget->setCurrentIndex(0); - } - else if (index == static_cast(SetChangeSlot)) - { - ui->slotControlsStackedWidget->setCurrentIndex(5); - } - else if (index == static_cast(TextEntry)) - { - ui->slotControlsStackedWidget->setCurrentIndex(6); - } - else if (index == static_cast(ExecuteSlot)) + switch(index) { - ui->slotControlsStackedWidget->setCurrentIndex(7); + case 0: + case 2: + case 5: + case 8: + case 9: + case 10: + ui->slotControlsStackedWidget->setCurrentIndex(0); + break; + + case 1: + ui->slotControlsStackedWidget->setCurrentIndex(3); + break; + + case 3: + ui->slotControlsStackedWidget->setCurrentIndex(2); + break; + + case 4: + ui->slotControlsStackedWidget->setCurrentIndex(7); + break; + + case 6: + ui->slotControlsStackedWidget->setCurrentIndex(4); + break; + + case 7: + ui->slotControlsStackedWidget->setCurrentIndex(1); + break; + + case 11: + ui->slotControlsStackedWidget->setCurrentIndex(5); + break; + + case 12: + ui->slotControlsStackedWidget->setCurrentIndex(6); + break; } } + void AdvanceButtonDialog::changeSlotHelpText(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (index == static_cast(KBMouseSlot)) - { - ui->slotTypeHelpLabel->setText(trUtf8("Insert a new blank slot.")); - } - else if (index == static_cast(CycleSlot)) + switch(index) { - ui->slotTypeHelpLabel->setText(trUtf8("Slots past a Cycle action will be executed " + case 0: + ui->slotTypeHelpLabel->setText(trUtf8("Insert a new blank slot.")); + break; + + case 1: + ui->slotTypeHelpLabel->setText(trUtf8("Slots past a Cycle action will be executed " "on the next button press. Multiple cycles can be added " "in order to create partitions in a sequence.")); - } - else if (index == static_cast(DelaySlot)) - { - ui->slotTypeHelpLabel->setText(trUtf8("Delays the time that the next slot is activated " + break; + + case 2: + ui->slotTypeHelpLabel->setText(trUtf8("Delays the time that the next slot is activated " "by the time specified. Slots activated before the " "delay will remain active after the delay time " "has passed.")); - } - else if (index == static_cast(DistanceSlot)) - { - ui->slotTypeHelpLabel->setText(trUtf8("Distance action specifies that the slots afterwards " + break; + + case 3: + ui->slotTypeHelpLabel->setText(trUtf8("Distance action specifies that the slots afterwards " "will only be executed when an axis is moved " "a certain range past the designated dead zone.")); - } - else if (index == static_cast(HoldSlot)) - { - ui->slotTypeHelpLabel->setText(trUtf8("Insert a hold action. Slots after the action will only be " + break; + + case 4: + ui->slotTypeHelpLabel->setText(trUtf8("Execute program when slot is activated.")); + break; + + case 5: + ui->slotTypeHelpLabel->setText(trUtf8("Insert a hold action. Slots after the action will only be " "executed if the button is held past the interval specified.")); - } - else if (index == static_cast(LoadSlot)) - { - ui->slotTypeHelpLabel->setText(trUtf8("Chose a profile to load when this slot is activated.")); - } - else if (index == static_cast(MouseModSlot)) - { - ui->slotTypeHelpLabel->setText(trUtf8("Mouse mod action will modify all mouse speed settings " + break; + + case 6: + ui->slotTypeHelpLabel->setText(trUtf8("Chose a profile to load when this slot is activated.")); + break; + + case 7: + ui->slotTypeHelpLabel->setText(trUtf8("Mouse mod action will modify all mouse speed settings " "by a specified percentage while the action is being processed. " "This can be useful for slowing down the mouse while " "sniping.")); - } - else if (index == static_cast(PauseSlot)) - { - ui->slotTypeHelpLabel->setText(trUtf8("Insert a pause that occurs in between key presses.")); - } - else if (index == static_cast(PressTimeSlot)) - { - ui->slotTypeHelpLabel->setText(trUtf8("Specify the time that keys past this slot should be " + break; + + case 8: + ui->slotTypeHelpLabel->setText(trUtf8("Insert a pause that occurs in between key presses.")); + break; + + case 9: + ui->slotTypeHelpLabel->setText(trUtf8("Specify the time that keys past this slot should be " "held down.")); - } - else if (index == static_cast(ReleaseSlot)) - { - ui->slotTypeHelpLabel->setText(trUtf8("Insert a release action. Slots after the action will only be " + break; + + case 10: + ui->slotTypeHelpLabel->setText(trUtf8("Insert a release action. Slots after the action will only be " "executed after a button release if the button was held " "past the interval specified.")); - } - else if (index == static_cast(SetChangeSlot)) - { - ui->slotTypeHelpLabel->setText(trUtf8("Change to selected set once slot is activated.")); - } - else if (index == static_cast(TextEntry)) - { - ui->slotTypeHelpLabel->setText(trUtf8("Full string will be typed when a " + break; + + case 11: + ui->slotTypeHelpLabel->setText(trUtf8("Change to selected set once slot is activated.")); + break; + + case 12: + ui->slotTypeHelpLabel->setText(trUtf8("Full string will be typed when a " "slot is activated.")); - } - else if (index == static_cast(ExecuteSlot)) - { - ui->slotTypeHelpLabel->setText(trUtf8("Execute program when slot is activated.")); + break; + } } + int AdvanceButtonDialog::getOldRow() const { return oldRow; } + JoyButton *AdvanceButtonDialog::getButton() const { - return button; + return m_button; } + AdvanceButtonDialogHelper const& AdvanceButtonDialog::getHelper() { return helper; } + AdvanceButtonDialogHelper& AdvanceButtonDialog::getHelperLocal() { return helper; diff --git a/src/advancebuttondialog.h b/src/advancebuttondialog.h old mode 100644 new mode 100755 index 757fd544f..74eddbe1b --- a/src/advancebuttondialog.h +++ b/src/advancebuttondialog.h @@ -43,9 +43,6 @@ class AdvanceButtonDialog : public QDialog JoyButton *getButton() const; AdvanceButtonDialogHelper const& getHelper(); - static const int MINIMUMTURBO; - - protected: void connectButtonEvents(SimpleKeyGrabberButton *button); void appendBlankKeyGrabber(); @@ -62,8 +59,6 @@ class AdvanceButtonDialog : public QDialog void populateSlotSetSelectionComboBox(); void findTurboModeComboIndex(); - - signals: void toggleChanged(bool state); void turboChanged(bool state); @@ -83,15 +78,7 @@ private slots: void deleteSlot(); void insertSlot(); - void insertPauseSlot(); - void insertHoldSlot(); void insertCycleSlot(); - void insertDistanceSlot(); - void insertReleaseSlot(); - void insertMouseSpeedModSlot(); - void insertKeyPressSlot(); - void insertDelaySlot(); - void insertSetChangeSlot(); void insertTextEntrySlot(); void insertExecuteSlot(); @@ -128,9 +115,11 @@ private slots: }; int oldRow; - JoyButton *button; + JoyButton *m_button; AdvanceButtonDialogHelper helper; + void insertKindOfSlot(int slotProperty, JoyButtonSlot::JoySlotInputAction inputAction); + }; #endif // ADVANCEBUTTONDIALOG_H diff --git a/src/advancebuttondialog.ui b/src/advancebuttondialog.ui old mode 100644 new mode 100755 diff --git a/src/advancestickassignmentdialog.cpp b/src/advancestickassignmentdialog.cpp old mode 100644 new mode 100755 index 87d1c41e8..7220ca1c9 --- a/src/advancestickassignmentdialog.cpp +++ b/src/advancestickassignmentdialog.cpp @@ -18,6 +18,7 @@ #include "advancestickassignmentdialog.h" #include "ui_advancestickassignmentdialog.h" +#include "globalvariables.h" #include "messagehandler.h" #include "joycontrolstick.h" #include "joystick.h" @@ -59,11 +60,10 @@ AdvanceStickAssignmentDialog::AdvanceStickAssignmentDialog(Joystick *joystick, Q ui->xAxisOneComboBox->addItem("", QVariant(0)); ui->yAxisOneComboBox->addItem("", QVariant(0)); - ui->xAxisTwoComboBox->addItem("", QVariant(0)); ui->yAxisTwoComboBox->addItem("", QVariant(0)); - for (int i=0; i < joystick->getNumberAxes(); i++) + for (int i = 0; i < joystick->getNumberAxes(); i++) { ui->xAxisOneComboBox->addItem(trUtf8("Axis %1").arg(i+1), QVariant(i)); ui->yAxisOneComboBox->addItem(trUtf8("Axis %1").arg(i+1), QVariant(i)); @@ -72,18 +72,16 @@ AdvanceStickAssignmentDialog::AdvanceStickAssignmentDialog(Joystick *joystick, Q ui->yAxisTwoComboBox->addItem(trUtf8("Axis %1").arg(i+1), QVariant(i)); } - refreshStickConfiguration(); - + JoyControlStick *stick1 = joystick->getActiveSetJoystick()->getJoyStick(0); + JoyControlStick *stick2 = joystick->getActiveSetJoystick()->getJoyStick(1); + refreshStickConfiguration(stick1, stick2); populateDPadComboBoxes(); - refreshVDPadConfiguration(); + refreshVDPadsConfiguration(); ui->versionTwoMessageLabel->setVisible(false); - - connect(ui->enableOneCheckBox, &QCheckBox::clicked, this, &AdvanceStickAssignmentDialog::changeStateStickOneWidgets); connect(ui->enableTwoCheckBox, &QCheckBox::clicked, this, &AdvanceStickAssignmentDialog::changeStateStickTwoWidgets); - connect(ui->vdpadEnableCheckBox, &QCheckBox::clicked, this, &AdvanceStickAssignmentDialog::changeStateVDPadWidgets); QSignalMapper *signalMapper = new QSignalMapper(this); @@ -95,7 +93,6 @@ AdvanceStickAssignmentDialog::AdvanceStickAssignmentDialog(Joystick *joystick, Q connect(ui->xAxisOneComboBox, static_cast(&QComboBox::currentIndexChanged), [signalMapper]() { signalMapper->map(); }); connect(ui->yAxisOneComboBox, static_cast(&QComboBox::currentIndexChanged), [signalMapper]() { signalMapper->map(); }); - connect(ui->quickAssignStick1PushButton, &QPushButton::clicked, this, &AdvanceStickAssignmentDialog::openQuickAssignDialogStick1); connect(ui->quickAssignStick2PushButton, &QPushButton::clicked, this, &AdvanceStickAssignmentDialog::openQuickAssignDialogStick2); @@ -103,7 +100,7 @@ AdvanceStickAssignmentDialog::AdvanceStickAssignmentDialog(Joystick *joystick, Q connect(this, &AdvanceStickAssignmentDialog::stickConfigurationChanged, this, &AdvanceStickAssignmentDialog::disableVDPadComboBoxes); connect(this, &AdvanceStickAssignmentDialog::stickConfigurationChanged, this, &AdvanceStickAssignmentDialog::populateDPadComboBoxes); - connect(this, &AdvanceStickAssignmentDialog::stickConfigurationChanged, this, &AdvanceStickAssignmentDialog::refreshVDPadConfiguration); + connect(this, &AdvanceStickAssignmentDialog::stickConfigurationChanged, this, &AdvanceStickAssignmentDialog::refreshVDPadsConfiguration); connect(this, &AdvanceStickAssignmentDialog::stickConfigurationChanged, this, &AdvanceStickAssignmentDialog::enableVDPadComboBoxes); connect(ui->vdpadUpPushButton, &QPushButton::clicked, this, &AdvanceStickAssignmentDialog::openAssignVDPadUp); @@ -114,6 +111,7 @@ AdvanceStickAssignmentDialog::AdvanceStickAssignmentDialog(Joystick *joystick, Q connect(this, &AdvanceStickAssignmentDialog::finished, this, &AdvanceStickAssignmentDialog::reenableButtonEvents); } + AdvanceStickAssignmentDialog::~AdvanceStickAssignmentDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -121,147 +119,105 @@ AdvanceStickAssignmentDialog::~AdvanceStickAssignmentDialog() delete ui; } + void AdvanceStickAssignmentDialog::checkForAxisAssignmentStickOne(QWidget* comboBox) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((ui->xAxisOneComboBox->currentIndex() > 0) && (ui->yAxisOneComboBox->currentIndex() > 0)) - { - if (ui->xAxisOneComboBox->currentIndex() != ui->yAxisOneComboBox->currentIndex()) - { - for (int i = 0; i < joystick->NUMBER_JOYSETS; i++) - { - SetJoystick *currentset = joystick->getSetJoystick(i); - JoyAxis *axis1 = currentset->getJoyAxis(ui->xAxisOneComboBox->currentIndex()-1); - JoyAxis *axis2 = currentset->getJoyAxis(ui->yAxisOneComboBox->currentIndex()-1); + checkForAxisAssignmentSticks(comboBox, ui->xAxisTwoComboBox, ui->yAxisTwoComboBox, 0); +} - if (axis1 && axis2) - { - JoyControlStick *controlstick = currentset->getJoyStick(0); - if (controlstick != nullptr) - { - controlstick->replaceAxes(axis1, axis2); - } - else - { - JoyControlStick *controlstick = new JoyControlStick(axis1, axis2, 0, i, currentset); - currentset->addControlStick(0, controlstick); - } - } - } - refreshStickConfiguration(); - emit stickConfigurationChanged(); - } - else - { - if (comboBox == ui->xAxisOneComboBox) - { - ui->yAxisOneComboBox->setCurrentIndex(0); - } - else if (comboBox == ui->yAxisOneComboBox) - { - ui->xAxisOneComboBox->setCurrentIndex(0); - } - } - } +void AdvanceStickAssignmentDialog::checkForAxisAssignmentStickTwo(QWidget* comboBox) +{ + qInstallMessageHandler(MessageHandler::myMessageOutput); + + checkForAxisAssignmentSticks(comboBox, ui->xAxisTwoComboBox, ui->yAxisTwoComboBox, 1); } -void AdvanceStickAssignmentDialog::checkForAxisAssignmentStickTwo(QWidget* comboBox) + +void AdvanceStickAssignmentDialog::checkForAxisAssignmentSticks(QWidget* comboBox, QComboBox* xAxisComboBox, QComboBox* yAxisComboBox, int controlStickNumber) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((ui->xAxisTwoComboBox->currentIndex() > 0) && (ui->yAxisTwoComboBox->currentIndex() > 0)) + if ((xAxisComboBox->currentIndex() > 0) && (yAxisComboBox->currentIndex() > 0)) { - if (ui->xAxisTwoComboBox->currentIndex() != ui->yAxisTwoComboBox->currentIndex()) + if (xAxisComboBox->currentIndex() != yAxisComboBox->currentIndex()) { - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + int originset = 0; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); - JoyAxis *axis1 = currentset->getJoyAxis(ui->xAxisTwoComboBox->currentIndex()-1); - JoyAxis *axis2 = currentset->getJoyAxis(ui->yAxisTwoComboBox->currentIndex()-1); - if ((axis1 != nullptr) && (axis2 != nullptr)) + SetJoystick *currentset = set.value(); + JoyAxis *axis1 = currentset->getJoyAxis(xAxisComboBox->currentIndex() - 1); + JoyAxis *axis2 = currentset->getJoyAxis(yAxisComboBox->currentIndex() - 1); + + if ((axis1 != nullptr) && (axis2 != nullptr) && (currentset->getJoyStick(controlStickNumber) != nullptr)) { - JoyControlStick *controlstick = currentset->getJoyStick(1); - if (controlstick != nullptr) - { - controlstick->replaceXAxis(axis1); - controlstick->replaceYAxis(axis2); - } - else - { - JoyControlStick *controlstick = new JoyControlStick(axis1, axis2, 1, i, currentset); - currentset->addControlStick(1, controlstick); - } + currentset->getJoyStick(controlStickNumber)->replaceAxes(axis1, axis2); } + else if ((axis1 != nullptr) && (axis2 != nullptr) && (currentset->getJoyStick(controlStickNumber) == nullptr)) + { + JoyControlStick *controlstick = new JoyControlStick(axis1, axis2, controlStickNumber, originset, currentset); + currentset->addControlStick(controlStickNumber, controlstick); + } + + originset++; } - refreshStickConfiguration(); + JoyControlStick *stick1 = joystick->getActiveSetJoystick()->getJoyStick(0); + JoyControlStick *stick2 = joystick->getActiveSetJoystick()->getJoyStick(1); + refreshStickConfiguration(stick1, stick2); emit stickConfigurationChanged(); } - else + else if (comboBox == xAxisComboBox) { - if (comboBox == ui->xAxisTwoComboBox) - { - ui->yAxisTwoComboBox->setCurrentIndex(0); - } - else if (comboBox == ui->yAxisTwoComboBox) - { - ui->xAxisTwoComboBox->setCurrentIndex(0); - } + yAxisComboBox->setCurrentIndex(0); + } + else if (comboBox == yAxisComboBox) + { + xAxisComboBox->setCurrentIndex(0); } } } -void AdvanceStickAssignmentDialog::changeStateVDPadWidgets(bool enabled) + +void AdvanceStickAssignmentDialog::changeStateVDPadWidgets(bool enabledVDPads) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (enabled) - { - ui->vdpadUpComboBox->setEnabled(true); - ui->vdpadDownComboBox->setEnabled(true); - ui->vdpadLeftComboBox->setEnabled(true); - ui->vdpadRightComboBox->setEnabled(true); + ui->vdpadUpComboBox->setEnabled(enabledVDPads); + ui->vdpadDownComboBox->setEnabled(enabledVDPads); + ui->vdpadLeftComboBox->setEnabled(enabledVDPads); + ui->vdpadRightComboBox->setEnabled(enabledVDPads); - ui->vdpadUpPushButton->setEnabled(true); - ui->vdpadDownPushButton->setEnabled(true); - ui->vdpadLeftPushButton->setEnabled(true); - ui->vdpadRightPushButton->setEnabled(true); + ui->vdpadUpPushButton->setEnabled(enabledVDPads); + ui->vdpadDownPushButton->setEnabled(enabledVDPads); + ui->vdpadLeftPushButton->setEnabled(enabledVDPads); + ui->vdpadRightPushButton->setEnabled(enabledVDPads); - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) - { - SetJoystick *currentset = joystick->getSetJoystick(i); - if (!currentset->getVDPad(0)) - { - VDPad *vdpad = new VDPad(0, i, currentset, currentset); - currentset->addVDPad(0, vdpad); - } - } - } - else - { - ui->vdpadUpComboBox->setEnabled(false); - ui->vdpadDownComboBox->setEnabled(false); - ui->vdpadLeftComboBox->setEnabled(false); - ui->vdpadRightComboBox->setEnabled(false); + QHash::iterator set; + int originset = 0; - ui->vdpadUpPushButton->setEnabled(false); - ui->vdpadDownPushButton->setEnabled(false); - ui->vdpadLeftPushButton->setEnabled(false); - ui->vdpadRightPushButton->setEnabled(false); + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) + { + SetJoystick *currentset = set.value(); - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + if (!currentset->getVDPad(0) && enabledVDPads) { - SetJoystick *currentset = joystick->getSetJoystick(i); - if (currentset->getVDPad(0)) - { - currentset->removeVDPad(0); - } + currentset->addVDPad(0, new VDPad(0, originset, currentset, currentset)); } + else + { + currentset->removeVDPad(0); + } + + originset++; } } + void AdvanceStickAssignmentDialog::changeStateStickOneWidgets(bool enabled) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -288,21 +244,15 @@ void AdvanceStickAssignmentDialog::changeStateStickOneWidgets(bool enabled) ui->enableTwoCheckBox->setChecked(false); ui->quickAssignStick1PushButton->setEnabled(false); - JoyControlStick *controlstick = joystick->getActiveSetJoystick()->getJoyStick(0); - JoyControlStick *controlstick2 = joystick->getActiveSetJoystick()->getJoyStick(1); - - if (controlstick2 != nullptr) - { + if (joystick->getActiveSetJoystick()->getJoyStick(1) != nullptr) joystick->removeControlStick(1); - } - if (controlstick != nullptr) - { + if (joystick->getActiveSetJoystick()->getJoyStick(0) != nullptr) joystick->removeControlStick(0); - } } } + void AdvanceStickAssignmentDialog::changeStateStickTwoWidgets(bool enabled) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -321,82 +271,61 @@ void AdvanceStickAssignmentDialog::changeStateStickTwoWidgets(bool enabled) ui->yAxisTwoComboBox->setCurrentIndex(0); ui->quickAssignStick2PushButton->setEnabled(false); - JoyControlStick *controlstick = joystick->getActiveSetJoystick()->getJoyStick(1); - if (controlstick != nullptr) + if (joystick->getActiveSetJoystick()->getJoyStick(1) != nullptr) { - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); - currentset->removeControlStick(1); + set.value()->removeControlStick(1); } } } } -void AdvanceStickAssignmentDialog::refreshStickConfiguration() + +void AdvanceStickAssignmentDialog::refreshStickConfiguration(JoyControlStick *stick1, JoyControlStick *stick2) { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyControlStick *stick1 = joystick->getActiveSetJoystick()->getJoyStick(0); - JoyControlStick *stick2 = joystick->getActiveSetJoystick()->getJoyStick(1); - if (stick1) + if ((stick1 != nullptr) && (stick1->getAxisX() != nullptr) && (stick1->getAxisY() != nullptr)) { - JoyAxis *axisX = stick1->getAxisX(); - JoyAxis *axisY = stick1->getAxisY(); - if ((axisX != nullptr) && (axisY != nullptr)) - { - ui->xAxisOneComboBox->setCurrentIndex(axisX->getRealJoyIndex()); - ui->yAxisOneComboBox->setCurrentIndex(axisY->getRealJoyIndex()); - ui->xAxisOneComboBox->setEnabled(true); - ui->yAxisOneComboBox->setEnabled(true); - ui->enableOneCheckBox->setEnabled(true); - ui->enableOneCheckBox->setChecked(true); - ui->enableTwoCheckBox->setEnabled(true); - ui->quickAssignStick1PushButton->setEnabled(true); - } + refreshSticksForAxes(true, stick1->getAxisX()->getRealJoyIndex(), stick1->getAxisY()->getRealJoyIndex(), ui->xAxisOneComboBox, ui->yAxisOneComboBox, ui->enableOneCheckBox, ui->quickAssignStick1PushButton); } else { - ui->xAxisOneComboBox->setCurrentIndex(0); - ui->xAxisOneComboBox->setEnabled(false); - ui->yAxisOneComboBox->setCurrentIndex(0); - ui->yAxisOneComboBox->setEnabled(false); - ui->enableOneCheckBox->setChecked(false); - ui->enableTwoCheckBox->setEnabled(false); - ui->quickAssignStick1PushButton->setEnabled(false); + refreshSticksForAxes(false, 0, 0, ui->xAxisOneComboBox, ui->yAxisOneComboBox, ui->enableOneCheckBox, ui->quickAssignStick1PushButton); } - if (stick2) + if ((stick2 != nullptr) && (stick2->getAxisX() != nullptr) && (stick2->getAxisY() != nullptr)) { - JoyAxis *axisX = stick2->getAxisX(); - JoyAxis *axisY = stick2->getAxisY(); - if ((axisX != nullptr) && (axisY != nullptr)) - { - ui->xAxisTwoComboBox->setCurrentIndex(axisX->getRealJoyIndex()); - ui->yAxisTwoComboBox->setCurrentIndex(axisY->getRealJoyIndex()); - ui->xAxisTwoComboBox->setEnabled(true); - ui->yAxisTwoComboBox->setEnabled(true); - ui->enableTwoCheckBox->setEnabled(true); - ui->enableTwoCheckBox->setChecked(true); - ui->quickAssignStick2PushButton->setEnabled(true); - } + refreshSticksForAxes(true, stick2->getAxisX()->getRealJoyIndex(), stick2->getAxisY()->getRealJoyIndex(), ui->xAxisTwoComboBox, ui->yAxisTwoComboBox, ui->enableTwoCheckBox, ui->quickAssignStick2PushButton); } else { - ui->xAxisTwoComboBox->setCurrentIndex(0); - ui->xAxisTwoComboBox->setEnabled(false); - ui->yAxisTwoComboBox->setCurrentIndex(0); - ui->yAxisTwoComboBox->setEnabled(false); - ui->enableTwoCheckBox->setChecked(false); - ui->quickAssignStick2PushButton->setEnabled(false); + refreshSticksForAxes(false, 0, 0, ui->xAxisTwoComboBox, ui->yAxisTwoComboBox, ui->enableTwoCheckBox, ui->quickAssignStick2PushButton); } } -void AdvanceStickAssignmentDialog::refreshVDPadConfiguration() + +void AdvanceStickAssignmentDialog::refreshSticksForAxes(bool axesExist, int xAxisComboBoxIndex, int yAxisComboBoxIndex, QComboBox* xAxisComboBox, QComboBox* yAxisComboBox, QCheckBox* enabledSticksCheckbox, QPushButton* quickAssignBtn) +{ + xAxisComboBox->setCurrentIndex(xAxisComboBoxIndex); + yAxisComboBox->setCurrentIndex(yAxisComboBoxIndex); + xAxisComboBox->setEnabled(axesExist); + yAxisComboBox->setEnabled(axesExist); + enabledSticksCheckbox->setEnabled(axesExist); + enabledSticksCheckbox->setChecked(axesExist); + quickAssignBtn->setEnabled(axesExist); +} + + +void AdvanceStickAssignmentDialog::refreshVDPadsConfiguration() { qInstallMessageHandler(MessageHandler::myMessageOutput); VDPad *vdpad = joystick->getActiveSetJoystick()->getVDPad(0); + if (vdpad != nullptr) { ui->vdpadEnableCheckBox->setChecked(true); @@ -411,128 +340,16 @@ void AdvanceStickAssignmentDialog::refreshVDPadConfiguration() ui->vdpadRightPushButton->setEnabled(true); JoyButton *upButton = vdpad->getVButton(JoyDPadButton::DpadUp); - if (upButton != nullptr) - { - int buttonindex = 0; - if (typeid(*upButton) == typeid(JoyAxisButton)) - { - JoyAxisButton *axisbutton = qobject_cast(upButton); // static_cast - JoyAxis *axis = axisbutton->getAxis(); - QList templist; - templist.append(QVariant(axis->getRealJoyIndex())); - templist.append(QVariant(axisbutton->getJoyNumber())); - buttonindex = ui->vdpadUpComboBox->findData(templist); - } - else - { - QList templist; - templist.append(QVariant(0)); - templist.append(QVariant(upButton->getRealJoyNumber())); - buttonindex = ui->vdpadUpComboBox->findData(templist); - } - - if (buttonindex == -1) - { - vdpad->removeVButton(upButton); - } - else - { - ui->vdpadUpComboBox->setCurrentIndex(buttonindex); - } - } + refreshVDPadConf(upButton, ui->vdpadUpComboBox); JoyButton *downButton = vdpad->getVButton(JoyDPadButton::DpadDown); - if (downButton != nullptr) - { - int buttonindex = 0; - if (typeid(*downButton) == typeid(JoyAxisButton)) - { - JoyAxisButton *axisbutton = qobject_cast(downButton); // static_cast - JoyAxis *axis = axisbutton->getAxis(); - QList templist; - templist.append(QVariant(axis->getRealJoyIndex())); - templist.append(QVariant(axisbutton->getJoyNumber())); - buttonindex = ui->vdpadDownComboBox->findData(templist); - } - else - { - QList templist; - templist.append(QVariant(0)); - templist.append(QVariant(downButton->getRealJoyNumber())); - buttonindex = ui->vdpadDownComboBox->findData(templist); - } - - if (buttonindex == -1) - { - vdpad->removeVButton(downButton); - } - else - { - ui->vdpadDownComboBox->setCurrentIndex(buttonindex); - } - } + refreshVDPadConf(downButton, ui->vdpadDownComboBox); JoyButton *leftButton = vdpad->getVButton(JoyDPadButton::DpadLeft); - if (leftButton != nullptr) - { - int buttonindex = 0; - if (typeid(*leftButton) == typeid(JoyAxisButton)) - { - JoyAxisButton *axisbutton = qobject_cast(leftButton); // static_cast - JoyAxis *axis = axisbutton->getAxis(); - QList templist; - templist.append(QVariant(axis->getRealJoyIndex())); - templist.append(QVariant(axisbutton->getJoyNumber())); - buttonindex = ui->vdpadLeftComboBox->findData(templist); - } - else - { - QList templist; - templist.append(QVariant(0)); - templist.append(QVariant(leftButton->getRealJoyNumber())); - buttonindex = ui->vdpadLeftComboBox->findData(templist); - } - - if (buttonindex == -1) - { - vdpad->removeVButton(leftButton); - } - else - { - ui->vdpadLeftComboBox->setCurrentIndex(buttonindex); - } - } + refreshVDPadConf(leftButton, ui->vdpadLeftComboBox); JoyButton *rightButton = vdpad->getVButton(JoyDPadButton::DpadRight); - if (rightButton != nullptr) - { - int buttonindex = 0; - if (typeid(*rightButton) == typeid(JoyAxisButton)) - { - JoyAxisButton *axisbutton = qobject_cast(rightButton); // static_cast - JoyAxis *axis = axisbutton->getAxis(); - QList templist; - templist.append(QVariant(axis->getRealJoyIndex())); - templist.append(QVariant(axisbutton->getJoyNumber())); - buttonindex = ui->vdpadRightComboBox->findData(templist); - } - else - { - QList templist; - templist.append(QVariant(0)); - templist.append(QVariant(rightButton->getRealJoyNumber())); - buttonindex = ui->vdpadRightComboBox->findData(templist); - } - - if (buttonindex == -1) - { - vdpad->removeVButton(rightButton); - } - else - { - ui->vdpadRightComboBox->setCurrentIndex(buttonindex); - } - } + refreshVDPadConf(rightButton, ui->vdpadRightComboBox); } else { @@ -557,6 +374,36 @@ void AdvanceStickAssignmentDialog::refreshVDPadConfiguration() } } + +void AdvanceStickAssignmentDialog::refreshVDPadConf(JoyButton *vdpadButton, QComboBox* vpadComboBox) +{ + if (vdpadButton != nullptr) + { + int buttonindex = 0; + + if (typeid(*vdpadButton) == typeid(JoyAxisButton)) + { + JoyAxisButton *axisbutton = qobject_cast(vdpadButton); + JoyAxis *axis = axisbutton->getAxis(); + QList templist; + templist.append(QVariant(axis->getRealJoyIndex())); + templist.append(QVariant(axisbutton->getJoyNumber())); + buttonindex = vpadComboBox->findData(templist); + } + else + { + QList templist; + templist.append(QVariant(0)); + templist.append(QVariant(vdpadButton->getRealJoyNumber())); + buttonindex = vpadComboBox->findData(templist); + } + + if (buttonindex == -1) vdpadButton->getVDPad()->removeVButton(vdpadButton); + else vpadComboBox->setCurrentIndex(buttonindex); + } +} + + void AdvanceStickAssignmentDialog::populateDPadComboBoxes() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -574,6 +421,7 @@ void AdvanceStickAssignmentDialog::populateDPadComboBoxes() for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if (!axis->isPartControlStick()) { QList templist; @@ -588,6 +436,7 @@ void AdvanceStickAssignmentDialog::populateDPadComboBoxes() templist.clear(); templist.append(QVariant(i+1)); templist.append(QVariant(1)); + ui->vdpadUpComboBox->addItem(trUtf8("Axis %1 +").arg(QString::number(i+1)), templist); ui->vdpadDownComboBox->addItem(trUtf8("Axis %1 +").arg(QString::number(i+1)), templist); ui->vdpadLeftComboBox->addItem(trUtf8("Axis %1 +").arg(QString::number(i+1)), templist); @@ -608,6 +457,7 @@ void AdvanceStickAssignmentDialog::populateDPadComboBoxes() } } + void AdvanceStickAssignmentDialog::changeVDPadUpButton(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -629,18 +479,23 @@ void AdvanceStickAssignmentDialog::changeVDPadUpButton(int index) QVariant temp = ui->vdpadUpComboBox->itemData(index); QList templist = temp.toList(); + if (templist.size() == 2) { int axis = templist.at(0).toInt(); int button = templist.at(1).toInt(); + if ((axis > 0) && (button >= 0)) { - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); + SetJoystick *currentset = set.value(); VDPad *vdpad = currentset->getVDPad(0); JoyAxis *currentaxis = currentset->getJoyAxis(axis-1); JoyButton *currentbutton = nullptr; + if (button == 0) { currentbutton = currentaxis->getNAxisButton(); @@ -655,11 +510,14 @@ void AdvanceStickAssignmentDialog::changeVDPadUpButton(int index) } else if (button > 0) { - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); + SetJoystick *currentset = set.value(); VDPad *vdpad = currentset->getVDPad(0); JoyButton *currentbutton = currentset->getJoyButton(button-1); + if (currentbutton != nullptr) { vdpad->addVButton(JoyDPadButton::DpadUp, currentbutton); @@ -670,10 +528,13 @@ void AdvanceStickAssignmentDialog::changeVDPadUpButton(int index) } else { - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); + SetJoystick *currentset = set.value(); VDPad *vdpad = currentset->getVDPad(0); + if ((vdpad != nullptr) && vdpad->getVButton(JoyDPadButton::DpadUp)) { vdpad->removeVButton(JoyDPadButton::DpadUp); @@ -703,18 +564,23 @@ void AdvanceStickAssignmentDialog::changeVDPadDownButton(int index) QVariant temp = ui->vdpadDownComboBox->itemData(index); QList templist = temp.toList(); + if (templist.size() == 2) { int axis = templist.at(0).toInt(); int button = templist.at(1).toInt(); + if ((axis > 0) && (button >= 0)) { - for (int i = 0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); + SetJoystick *currentset = set.value(); VDPad *vdpad = currentset->getVDPad(0); JoyAxis *currentaxis = currentset->getJoyAxis(axis-1); JoyButton *currentbutton = nullptr; + if (button == 0) { currentbutton = currentaxis->getNAxisButton(); @@ -729,11 +595,14 @@ void AdvanceStickAssignmentDialog::changeVDPadDownButton(int index) } else if (button > 0) { - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); + SetJoystick *currentset = set.value(); VDPad *vdpad = currentset->getVDPad(0); JoyButton *currentbutton = currentset->getJoyButton(button-1); + if (currentbutton != nullptr) { vdpad->addVButton(JoyDPadButton::DpadDown, currentbutton); @@ -744,10 +613,13 @@ void AdvanceStickAssignmentDialog::changeVDPadDownButton(int index) } else { - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); + SetJoystick *currentset = set.value(); VDPad *vdpad = currentset->getVDPad(0); + if ((vdpad != nullptr) && vdpad->getVButton(JoyDPadButton::DpadDown)) { vdpad->removeVButton(JoyDPadButton::DpadDown); @@ -777,18 +649,23 @@ void AdvanceStickAssignmentDialog::changeVDPadLeftButton(int index) QVariant temp = ui->vdpadLeftComboBox->itemData(index); QList templist = temp.toList(); + if (templist.size() == 2) { int axis = templist.at(0).toInt(); int button = templist.at(1).toInt(); + if ((axis > 0) && (button >= 0)) { - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); + SetJoystick *currentset = set.value(); VDPad *vdpad = currentset->getVDPad(0); JoyAxis *currentaxis = currentset->getJoyAxis(axis-1); JoyButton *currentbutton = nullptr; + if (button == 0) { currentbutton = currentaxis->getNAxisButton(); @@ -803,11 +680,14 @@ void AdvanceStickAssignmentDialog::changeVDPadLeftButton(int index) } else if (button > 0) { - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); + SetJoystick *currentset = set.value(); VDPad *vdpad = currentset->getVDPad(0); JoyButton *currentbutton = currentset->getJoyButton(button-1); + if (currentbutton != nullptr) { vdpad->addVButton(JoyDPadButton::DpadLeft, currentbutton); @@ -818,10 +698,13 @@ void AdvanceStickAssignmentDialog::changeVDPadLeftButton(int index) } else { - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); + SetJoystick *currentset = set.value(); VDPad *vdpad = currentset->getVDPad(0); + if ((vdpad != nullptr) && vdpad->getVButton(JoyDPadButton::DpadLeft)) { vdpad->removeVButton(JoyDPadButton::DpadLeft); @@ -851,18 +734,23 @@ void AdvanceStickAssignmentDialog::changeVDPadRightButton(int index) QVariant temp = ui->vdpadRightComboBox->itemData(index); QList templist = temp.toList(); + if (templist.size() == 2) { int axis = templist.at(0).toInt(); int button = templist.at(1).toInt(); + if ((axis > 0) && (button >= 0)) { - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); + SetJoystick *currentset = set.value(); VDPad *vdpad = currentset->getVDPad(0); JoyAxis *currentaxis = currentset->getJoyAxis(axis-1); JoyButton *currentbutton = nullptr; + if (button == 0) { currentbutton = currentaxis->getNAxisButton(); @@ -877,11 +765,14 @@ void AdvanceStickAssignmentDialog::changeVDPadRightButton(int index) } else if (button > 0) { - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); + SetJoystick *currentset = set.value(); VDPad *vdpad = currentset->getVDPad(0); JoyButton *currentbutton = currentset->getJoyButton(button-1); + if (currentbutton != nullptr) { vdpad->addVButton(JoyDPadButton::DpadRight, currentbutton); @@ -892,10 +783,13 @@ void AdvanceStickAssignmentDialog::changeVDPadRightButton(int index) } else { - for (int i=0; i < joystick->NUMBER_JOYSETS; i++) + QHash::iterator set; + + for (set = joystick->getJoystick_sets().begin(); set != joystick->getJoystick_sets().end(); ++set) { - SetJoystick *currentset = joystick->getSetJoystick(i); + SetJoystick *currentset = set.value(); VDPad *vdpad = currentset->getVDPad(0); + if ((vdpad != nullptr) && vdpad->getVButton(JoyDPadButton::DpadRight)) { vdpad->removeVButton(JoyDPadButton::DpadRight); @@ -931,25 +825,27 @@ void AdvanceStickAssignmentDialog::openQuickAssignDialogStick1() QMessageBox msgBox; msgBox.setText(trUtf8("Move stick 1 along the X axis")); msgBox.setStandardButtons(QMessageBox::Close); - for (int i=0; i < joystick->getNumberAxes(); i++) + + for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if (axis != nullptr) { connect(axis, &JoyAxis::active, &msgBox, &QMessageBox::close); connect(axis, &JoyAxis::active, this, [this, axis] { - ui->xAxisOneComboBox->setCurrentIndex(axis->getRealJoyIndex()); }); } } msgBox.exec(); - msgBox.setText(trUtf8("Move stick 1 along the Y axis")); - for (int i=0; i < joystick->getNumberAxes(); i++) + + for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if (axis != nullptr) { disconnect(axis, &JoyAxis::active, &msgBox, &QMessageBox::close); @@ -963,9 +859,11 @@ void AdvanceStickAssignmentDialog::openQuickAssignDialogStick1() } msgBox.exec(); - for (int i=0; i < joystick->getNumberAxes(); i++) + + for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if (axis != nullptr) { disconnect(axis, &JoyAxis::active, &msgBox, &QMessageBox::close); @@ -981,9 +879,11 @@ void AdvanceStickAssignmentDialog::openQuickAssignDialogStick2() QMessageBox msgBox; msgBox.setText(trUtf8("Move stick 2 along the X axis")); msgBox.setStandardButtons(QMessageBox::Close); - for (int i=0; i < joystick->getNumberAxes(); i++) + + for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if (axis != nullptr) { connect(axis, &JoyAxis::active, &msgBox, &QMessageBox::close); @@ -994,10 +894,9 @@ void AdvanceStickAssignmentDialog::openQuickAssignDialogStick2() } msgBox.exec(); - - msgBox.setText(trUtf8("Move stick 2 along the Y axis")); - for (int i=0; i < joystick->getNumberAxes(); i++) + + for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); if (axis != nullptr) @@ -1013,9 +912,11 @@ void AdvanceStickAssignmentDialog::openQuickAssignDialogStick2() } msgBox.exec(); - for (int i=0; i < joystick->getNumberAxes(); i++) + + for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if (axis != nullptr) { disconnect(axis, &JoyAxis::active, &msgBox, &QMessageBox::close); @@ -1043,6 +944,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadUp() for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if ((axis != nullptr) && !axis->isPartControlStick()) { JoyAxisButton* axbtn = axis->getNAxisButton(); @@ -1062,6 +964,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadUp() for (int i = 0; i < joystick->getNumberButtons(); i++) { JoyButton *button = joystick->getActiveSetJoystick()->getJoyButton(i); + if (button != nullptr) { connect(button, &JoyButton::clicked, &msgBox, &QMessageBox::close); @@ -1076,6 +979,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadUp() for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if ((axis != nullptr) && !axis->isPartControlStick()) { disconnect(axis->getNAxisButton(), &JoyAxisButton::clicked, &msgBox, &QMessageBox::close); @@ -1089,6 +993,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadUp() for (int i = 0; i < joystick->getNumberButtons(); i++) { JoyButton *button = joystick->getActiveSetJoystick()->getJoyButton(i); + if (button != nullptr) { disconnect(button, &JoyButton::clicked, &msgBox, &QMessageBox::close); @@ -1108,6 +1013,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadDown() for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if ((axis != nullptr) && !axis->isPartControlStick()) { JoyAxisButton* axbtn = axis->getNAxisButton(); @@ -1127,6 +1033,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadDown() for (int i = 0; i < joystick->getNumberButtons(); i++) { JoyButton *button = joystick->getActiveSetJoystick()->getJoyButton(i); + if (button != nullptr) { connect(button, &JoyButton::clicked, &msgBox, &QMessageBox::close); @@ -1141,6 +1048,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadDown() for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if ((axis != nullptr) && !axis->isPartControlStick()) { disconnect(axis->getNAxisButton(), &JoyAxisButton::clicked, &msgBox, &QMessageBox::close); @@ -1154,6 +1062,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadDown() for (int i = 0; i < joystick->getNumberButtons(); i++) { JoyButton *button = joystick->getActiveSetJoystick()->getJoyButton(i); + if (button != nullptr) { disconnect(button, &JoyButton::clicked, &msgBox, &QMessageBox::close); @@ -1173,6 +1082,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadLeft() for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if ((axis != nullptr) && !axis->isPartControlStick()) { JoyAxisButton* joyaxisN = axis->getNAxisButton(); @@ -1192,6 +1102,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadLeft() for (int i = 0; i < joystick->getNumberButtons(); i++) { JoyButton *button = joystick->getActiveSetJoystick()->getJoyButton(i); + if (button != nullptr) { connect(button, &JoyButton::clicked, &msgBox, &QMessageBox::close); @@ -1206,6 +1117,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadLeft() for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if ((axis != nullptr) && !axis->isPartControlStick()) { disconnect(axis->getNAxisButton(), &JoyAxisButton::clicked, &msgBox, &QMessageBox::close); @@ -1219,6 +1131,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadLeft() for (int i = 0; i < joystick->getNumberButtons(); i++) { JoyButton *button = joystick->getActiveSetJoystick()->getJoyButton(i); + if (button != nullptr) { disconnect(button, &JoyButton::clicked, &msgBox, &QMessageBox::close); @@ -1239,6 +1152,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadRight() for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if ((axis != nullptr) && !axis->isPartControlStick()) { JoyAxisButton* joyaxisbtnN = axis->getNAxisButton(); @@ -1258,6 +1172,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadRight() for (int i = 0; i < joystick->getNumberButtons(); i++) { JoyButton *button = joystick->getActiveSetJoystick()->getJoyButton(i); + if (button != nullptr) { connect(button, &JoyButton::clicked, &msgBox, &QMessageBox::close); @@ -1272,6 +1187,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadRight() for (int i = 0; i < joystick->getNumberAxes(); i++) { JoyAxis *axis = joystick->getActiveSetJoystick()->getJoyAxis(i); + if ((axis != nullptr) && !axis->isPartControlStick()) { disconnect(axis->getNAxisButton(), &JoyAxisButton::clicked, &msgBox, &QMessageBox::close); @@ -1285,6 +1201,7 @@ void AdvanceStickAssignmentDialog::openAssignVDPadRight() for (int i = 0; i < joystick->getNumberButtons(); i++) { JoyButton *button = joystick->getActiveSetJoystick()->getJoyButton(i); + if (button != nullptr) { disconnect(button, &JoyButton::clicked, &msgBox, &QMessageBox::close); @@ -1299,16 +1216,12 @@ void AdvanceStickAssignmentDialog::quickAssignVDPadUp(JoyAxisButton* joyaxisbtn) QList templist; templist.append(QVariant(joyaxisbtn->getAxis()->getRealJoyIndex())); - if (joyaxisbtn->getAxis()->getNAxisButton() == joyaxisbtn) - { - templist.append(QVariant(0)); - } - else - { - templist.append(QVariant(1)); - } + + if (joyaxisbtn->getAxis()->getNAxisButton() == joyaxisbtn) templist.append(QVariant(0)); + else templist.append(QVariant(1)); int index = ui->vdpadUpComboBox->findData(templist); + if (index > 0) { ui->vdpadUpComboBox->setCurrentIndex(index); @@ -1324,6 +1237,7 @@ void AdvanceStickAssignmentDialog::quickAssignVDPadUpBtn(JoyButton* joybtn) { templist.append(QVariant(joybtn->getJoyNumber()+1)); int index = ui->vdpadUpComboBox->findData(templist); + if (index > 0) { ui->vdpadUpComboBox->setCurrentIndex(index); @@ -1337,20 +1251,13 @@ void AdvanceStickAssignmentDialog::quickAssignVDPadDown(JoyAxisButton* axbtn) QList templist; templist.append(QVariant(axbtn->getAxis()->getRealJoyIndex())); - if (axbtn->getAxis()->getNAxisButton() == axbtn) - { - templist.append(QVariant(0)); - } - else - { - templist.append(QVariant(1)); - } + + if (axbtn->getAxis()->getNAxisButton() == axbtn) templist.append(QVariant(0)); + else templist.append(QVariant(1)); int index = ui->vdpadDownComboBox->findData(templist); - if (index > 0) - { - ui->vdpadDownComboBox->setCurrentIndex(index); - } + + if (index > 0) ui->vdpadDownComboBox->setCurrentIndex(index); } void AdvanceStickAssignmentDialog::quickAssignVDPadDownJbtn(JoyButton* joybtn) @@ -1360,10 +1267,8 @@ void AdvanceStickAssignmentDialog::quickAssignVDPadDownJbtn(JoyButton* joybtn) templist.append(QVariant(joybtn->getJoyNumber()+1)); int index = ui->vdpadDownComboBox->findData(templist); - if (index > 0) - { - ui->vdpadDownComboBox->setCurrentIndex(index); - } + + if (index > 0) ui->vdpadDownComboBox->setCurrentIndex(index); } void AdvanceStickAssignmentDialog::quickAssignVDPadLeft(JoyAxisButton* joyaxisbtn) @@ -1372,20 +1277,13 @@ void AdvanceStickAssignmentDialog::quickAssignVDPadLeft(JoyAxisButton* joyaxisbt QList templist; templist.append(QVariant(joyaxisbtn->getAxis()->getRealJoyIndex())); - if (joyaxisbtn->getAxis()->getNAxisButton() == joyaxisbtn) - { - templist.append(QVariant(0)); - } - else - { - templist.append(QVariant(1)); - } + + if (joyaxisbtn->getAxis()->getNAxisButton() == joyaxisbtn) templist.append(QVariant(0)); + else templist.append(QVariant(1)); int index = ui->vdpadLeftComboBox->findData(templist); - if (index > 0) - { - ui->vdpadLeftComboBox->setCurrentIndex(index); - } + + if (index > 0) ui->vdpadLeftComboBox->setCurrentIndex(index); } void AdvanceStickAssignmentDialog::quickAssignVDPadLeftJbtn(JoyButton* joybtn) @@ -1395,10 +1293,8 @@ void AdvanceStickAssignmentDialog::quickAssignVDPadLeftJbtn(JoyButton* joybtn) templist.append(QVariant(joybtn->getJoyNumber() + 1)); int index = ui->vdpadLeftComboBox->findData(templist); - if (index > 0) - { - ui->vdpadLeftComboBox->setCurrentIndex(index); - } + + if (index > 0) ui->vdpadLeftComboBox->setCurrentIndex(index); } void AdvanceStickAssignmentDialog::quickAssignVDPadRight(JoyAxisButton* joyaxisbtn) @@ -1407,20 +1303,13 @@ void AdvanceStickAssignmentDialog::quickAssignVDPadRight(JoyAxisButton* joyaxisb QList templist; templist.append(QVariant(joyaxisbtn->getAxis()->getRealJoyIndex())); - if (joyaxisbtn->getAxis()->getNAxisButton() == joyaxisbtn) - { - templist.append(QVariant(0)); - } - else - { - templist.append(QVariant(1)); - } + + if (joyaxisbtn->getAxis()->getNAxisButton() == joyaxisbtn) templist.append(QVariant(0)); + else templist.append(QVariant(1)); int index = ui->vdpadRightComboBox->findData(templist); - if (index > 0) - { - ui->vdpadRightComboBox->setCurrentIndex(index); - } + + if (index > 0) ui->vdpadRightComboBox->setCurrentIndex(index); } void AdvanceStickAssignmentDialog::quickAssignVDPadRightJbtn(JoyButton* joybtn) @@ -1430,10 +1319,8 @@ void AdvanceStickAssignmentDialog::quickAssignVDPadRightJbtn(JoyButton* joybtn) templist.append(QVariant(joybtn->getJoyNumber()+1)); int index = ui->vdpadRightComboBox->findData(templist); - if (index > 0) - { - ui->vdpadRightComboBox->setCurrentIndex(index); - } + + if (index > 0) ui->vdpadRightComboBox->setCurrentIndex(index); } Joystick *AdvanceStickAssignmentDialog::getJoystick() const { diff --git a/src/advancestickassignmentdialog.h b/src/advancestickassignmentdialog.h old mode 100644 new mode 100755 index c34823b15..4dc861a02 --- a/src/advancestickassignmentdialog.h +++ b/src/advancestickassignmentdialog.h @@ -23,7 +23,9 @@ class Joystick; class JoyAxisButton; class JoyButton; - +class QComboBox; +class QCheckBox; +class JoyControlStick; namespace Ui { class AdvanceStickAssignmentDialog; @@ -45,15 +47,15 @@ class AdvanceStickAssignmentDialog : public QDialog void vdpadConfigurationChanged(); private slots: - void refreshStickConfiguration(); - void refreshVDPadConfiguration(); + void refreshStickConfiguration(JoyControlStick *stick1, JoyControlStick *stick2); + void refreshVDPadsConfiguration(); void checkForAxisAssignmentStickOne(QWidget* comboBox); void checkForAxisAssignmentStickTwo(QWidget* comboBox); void changeStateStickOneWidgets(bool enabled); void changeStateStickTwoWidgets(bool enabled); - void changeStateVDPadWidgets(bool enabled); + void changeStateVDPadWidgets(bool enabledVDPads); void populateDPadComboBoxes(); @@ -89,6 +91,9 @@ private slots: Joystick *joystick; + void checkForAxisAssignmentSticks(QWidget* comboBox, QComboBox* xAxisComboBox, QComboBox* yAxisComboBox, int controlStickNumber); + void refreshSticksForAxes(bool axesExist, int xAxisComboBoxIndex, int yAxisComboBoxIndex, QComboBox* xAxisComboBox, QComboBox* yAxisComboBox, QCheckBox* enabledSticksCheckbox, QPushButton* quickAssignBtn); + void refreshVDPadConf(JoyButton *vdpadButton, QComboBox* vpadComboBox); }; #endif // ADVANCESTICKASSIGNMENTDIALOG_H diff --git a/src/advancestickassignmentdialog.ui b/src/advancestickassignmentdialog.ui old mode 100644 new mode 100755 diff --git a/src/antimicro.exe.manifest b/src/antimicro.exe.manifest old mode 100644 new mode 100755 diff --git a/src/antimicro.exe.uiaccess.manifest b/src/antimicro.exe.uiaccess.manifest old mode 100644 new mode 100755 diff --git a/src/antimicro.rc b/src/antimicro.rc old mode 100644 new mode 100755 index 8ee7fabe2..a836b9717 --- a/src/antimicro.rc +++ b/src/antimicro.rc @@ -1,6 +1,6 @@ #include "winuser.h" - IDI_ICON1 ICON DISCARDABLE "images/antimicro.ico" + IDI_ICON1 ICON DISCARDABLE "images/32x32/antimicro.ico" #ifndef PERFORM_SIGNING CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "antimicro.exe.manifest" #else diff --git a/src/antimicrosettings.cpp b/src/antimicrosettings.cpp old mode 100644 new mode 100755 index c4ae36809..cfb73f7c0 --- a/src/antimicrosettings.cpp +++ b/src/antimicrosettings.cpp @@ -21,10 +21,6 @@ #include -const bool AntiMicroSettings::defaultDisabledWinEnhanced = false; -const bool AntiMicroSettings::defaultAssociateProfiles = true; -const int AntiMicroSettings::defaultSpringScreen = -1; -const int AntiMicroSettings::defaultSDLGamepadPollRate = 10; // unsigned AntiMicroSettings::AntiMicroSettings(const QString &fileName, Format format, QObject *parent) : QSettings(fileName, format, parent) @@ -46,14 +42,9 @@ QVariant AntiMicroSettings::runtimeValue(const QString &key, const QVariant &def QVariant settingValue; QString inGroup = group(); QString fullKey = QString(inGroup).append("/").append(key); - if (cmdSettings.contains(fullKey)) - { - settingValue = cmdSettings.value(fullKey, defaultValue); - } - else - { - settingValue = value(key, defaultValue); - } + + if (cmdSettings.contains(fullKey)) settingValue = cmdSettings.value(fullKey, defaultValue); + else settingValue = value(key, defaultValue); return settingValue; } diff --git a/src/antimicrosettings.h b/src/antimicrosettings.h old mode 100644 new mode 100755 index 67d98568c..1a76a876e --- a/src/antimicrosettings.h +++ b/src/antimicrosettings.h @@ -37,11 +37,6 @@ class AntiMicroSettings : public QSettings QMutex* getLock(); QSettings& getCmdSettings(); - static const bool defaultDisabledWinEnhanced; - static const bool defaultAssociateProfiles; - static const int defaultSpringScreen; - static const int defaultSDLGamepadPollRate; // unsigned - protected: QSettings cmdSettings; QMutex lock; diff --git a/src/antkeymapper.cpp b/src/antkeymapper.cpp old mode 100644 new mode 100755 diff --git a/src/antkeymapper.h b/src/antkeymapper.h old mode 100644 new mode 100755 diff --git a/src/applaunchhelper.cpp b/src/applaunchhelper.cpp old mode 100644 new mode 100755 index 932adf5bc..1a61756a3 --- a/src/applaunchhelper.cpp +++ b/src/applaunchhelper.cpp @@ -17,6 +17,7 @@ #include "applaunchhelper.h" +#include "globalvariables.h" #include "messagehandler.h" #include "inputdevice.h" #include "joybutton.h" @@ -66,18 +67,21 @@ void AppLaunchHelper::enablePossibleMouseSmoothing() qInstallMessageHandler(MessageHandler::myMessageOutput); bool smoothingEnabled = settings->value("Mouse/Smoothing", false).toBool(); + if (smoothingEnabled) { int historySize = settings->value("Mouse/HistorySize", 0).toInt(); + if (historySize > 0) { - JoyButton::setMouseHistorySize(historySize); + JoyButton::setMouseHistorySize(historySize, GlobalVariables::JoyButton::MAXIMUMMOUSEHISTORYSIZE, GlobalVariables::JoyButton::mouseHistorySize, &GlobalVariables::JoyButton::mouseHistoryX, &GlobalVariables::JoyButton::mouseHistoryY); } double weightModifier = settings->value("Mouse/WeightModifier", 0.0).toDouble(); + if (weightModifier > 0.0) { - JoyButton::setWeightModifier(weightModifier); + JoyButton::setWeightModifier(weightModifier, GlobalVariables::JoyButton::MAXIMUMWEIGHTMODIFIER, GlobalVariables::JoyButton::weightModifier); } } } @@ -87,9 +91,10 @@ void AppLaunchHelper::changeMouseRefreshRate() qInstallMessageHandler(MessageHandler::myMessageOutput); int refreshRate = settings->value("Mouse/RefreshRate", 0).toInt(); + if (refreshRate > 0) { - JoyButton::setMouseRefreshRate(refreshRate); + JoyButton::setMouseRefreshRate(refreshRate, GlobalVariables::JoyButton::mouseRefreshRate, GlobalVariables::JoyButton::IDLEMOUSEREFRESHRATE, JoyButton::getMouseHelper(), &GlobalVariables::JoyButton::mouseHistoryX, &GlobalVariables::JoyButton::mouseHistoryY, JoyButton::getTestOldMouseTime(), JoyButton::getStaticMouseEventTimer()); } } @@ -98,10 +103,10 @@ void AppLaunchHelper::changeGamepadPollRate() qInstallMessageHandler(MessageHandler::myMessageOutput); int pollRate = settings->value("GamepadPollRate", - AntiMicroSettings::defaultSDLGamepadPollRate).toInt(); + GlobalVariables::AntimicroSettings::defaultSDLGamepadPollRate).toInt(); if (pollRate > 0) { - JoyButton::setGamepadRefreshRate(pollRate); + JoyButton::setGamepadRefreshRate(pollRate, GlobalVariables::JoyButton::gamepadRefreshRate, JoyButton::getMouseHelper()); } } @@ -117,6 +122,7 @@ void AppLaunchHelper::printControllerList(QMap *j outstream << QObject::trUtf8("---------------") << endl; QMapIterator iter(*joysticks); int indexNumber = 1; + while (iter.hasNext()) { InputDevice *tempdevice = iter.next().value(); @@ -146,18 +152,19 @@ void AppLaunchHelper::changeSpringModeScreen() QDesktopWidget deskWid; int springScreen = settings->value("Mouse/SpringScreen", - AntiMicroSettings::defaultSpringScreen).toInt(); + GlobalVariables::AntimicroSettings::defaultSpringScreen).toInt(); if (springScreen >= deskWid.screenCount()) { springScreen = -1; settings->setValue("Mouse/SpringScreen", - AntiMicroSettings::defaultSpringScreen); + GlobalVariables::AntimicroSettings::defaultSpringScreen); settings->sync(); } - JoyButton::setSpringModeScreen(springScreen); + JoyButton::setSpringModeScreen(springScreen, GlobalVariables::JoyButton::springModeScreen); } + #ifdef Q_OS_WIN void AppLaunchHelper::checkPointerPrecision() { @@ -165,7 +172,7 @@ void AppLaunchHelper::checkPointerPrecision() qInstallMessageHandler(MessageHandler::myMessageOutput); WinExtras::grabCurrentPointerPrecision(); bool disableEnhandedPoint = settings->value("Mouse/DisableWinEnhancedPointer", - AntiMicroSettings::defaultDisabledWinEnhanced).toBool(); + GlobalVariables::defaultDisabledWinEnhanced).toBool(); if (disableEnhandedPoint) { WinExtras::disablePointerPrecision(); @@ -177,7 +184,7 @@ void AppLaunchHelper::appQuitPointerPrecision() qInstallMessageHandler(MessageHandler::myMessageOutput); bool disableEnhancedPoint = settings->value("Mouse/DisableWinEnhancedPointer", - AntiMicroSettings::defaultDisabledWinEnhanced).toBool(); + GlobalVariables::defaultDisabledWinEnhanced).toBool(); if (disableEnhancedPoint && !WinExtras::isUsingEnhancedPointerPrecision()) { WinExtras::enablePointerPrecision(); @@ -190,14 +197,14 @@ void AppLaunchHelper::revertMouseThread() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyButton::indirectStaticMouseThread(QThread::currentThread()); + JoyButton::indirectStaticMouseThread(QThread::currentThread(), JoyButton::getStaticMouseEventTimer(), JoyButton::getMouseHelper()); } void AppLaunchHelper::changeMouseThread(QThread *thread) { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyButton::setStaticMouseThread(thread); + JoyButton::setStaticMouseThread(thread, JoyButton::getStaticMouseEventTimer(), JoyButton::getTestOldMouseTime(), GlobalVariables::JoyButton::IDLEMOUSEREFRESHRATE, JoyButton::getMouseHelper()); } void AppLaunchHelper::establishMouseTimerConnections() diff --git a/src/applaunchhelper.h b/src/applaunchhelper.h old mode 100644 new mode 100755 diff --git a/src/autoprofileinfo.cpp b/src/autoprofileinfo.cpp old mode 100644 new mode 100755 index 97abe6470..712f49ada --- a/src/autoprofileinfo.cpp +++ b/src/autoprofileinfo.cpp @@ -110,6 +110,7 @@ void AutoProfileInfo::setExe(QString exe) if (!exe.isEmpty()) { QFileInfo info(exe); + if ((exe != this->exe) && info.exists() && info.isExecutable()) { this->exe = exe; diff --git a/src/autoprofileinfo.h b/src/autoprofileinfo.h old mode 100644 new mode 100755 diff --git a/src/autoprofilewatcher.cpp b/src/autoprofilewatcher.cpp old mode 100644 new mode 100755 index 3f90b3f36..14f0a43d2 --- a/src/autoprofilewatcher.cpp +++ b/src/autoprofilewatcher.cpp @@ -37,6 +37,10 @@ #endif +AutoProfileWatcher* AutoProfileWatcher::_instance = nullptr; +QTimer AutoProfileWatcher::checkWindowTimer; + + AutoProfileWatcher::AutoProfileWatcher(AntiMicroSettings *settings, QObject *parent) : QObject(parent) { @@ -45,28 +49,47 @@ AutoProfileWatcher::AutoProfileWatcher(AntiMicroSettings *settings, QObject *par this->settings = settings; allDefaultInfo = nullptr; currentApplication = ""; + _instance = this; syncProfileAssignment(); - checkWindowTimer.setInterval(1000); - checkWindowTimer.start(); + connect(&(checkWindowTimer), &QTimer::timeout, _instance, &AutoProfileWatcher::runAppCheck); +} + +AutoProfileWatcher::~AutoProfileWatcher() +{ + if (checkWindowTimer.isActive()) { - connect(&(checkWindowTimer), &QTimer::timeout, this, &AutoProfileWatcher::runAppCheck); + checkWindowTimer.stop(); + disconnect(&(checkWindowTimer), &QTimer::timeout, _instance, nullptr); + } + _instance = nullptr; +} + +AutoProfileWatcher* AutoProfileWatcher::getAutoProfileWatcherInstance() +{ + return _instance; +} + +void AutoProfileWatcher::disconnectWindowTimer() +{ + checkWindowTimer.stop(); + disconnect(&(checkWindowTimer), &QTimer::timeout, _instance, nullptr); } void AutoProfileWatcher::startTimer() { qInstallMessageHandler(MessageHandler::myMessageOutput); - appTimer.start(CHECKTIME); + checkWindowTimer.start(CHECKTIME); } void AutoProfileWatcher::stopTimer() { qInstallMessageHandler(MessageHandler::myMessageOutput); - appTimer.stop(); + checkWindowTimer.stop(); } void AutoProfileWatcher::runAppCheck() @@ -74,7 +97,7 @@ void AutoProfileWatcher::runAppCheck() qInstallMessageHandler(MessageHandler::myMessageOutput); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << qApp->applicationFilePath(); + qDebug() << qApp->applicationFilePath(); #endif QString appLocation = QString(); @@ -100,7 +123,6 @@ void AutoProfileWatcher::runAppCheck() // More portable check for whether antimicro is the current application // with focus. QWidget *focusedWidget = qApp->activeWindow(); - QString nowWindow = QString(); QString nowWindowClass = QString(); QString nowWindowName = QString(); @@ -109,21 +131,21 @@ void AutoProfileWatcher::runAppCheck() nowWindowName = WinExtras::getCurrentWindowText(); #elif defined(Q_OS_UNIX) - long currentWindow = static_cast(X11Extras::getInstance()->getWindowInFocus()); + long currentWindow = X11Extras::getInstance()->getWindowInFocus(); + if (currentWindow > 0) { - long tempWindow = static_cast(X11Extras::getInstance()->findParentClient(static_cast(currentWindow))); - if (tempWindow > 0) - { - currentWindow = tempWindow; - } + long tempWindow = X11Extras::getInstance()->findParentClient(currentWindow); + + if (tempWindow > 0) currentWindow = tempWindow; + nowWindow = QString::number(currentWindow); nowWindowClass = X11Extras::getInstance()->getWindowClass(static_cast(currentWindow)); nowWindowName = X11Extras::getInstance()->getWindowTitle(static_cast(currentWindow)); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << nowWindowClass; - qDebug() << nowWindowName; + qDebug() << nowWindowClass; + qDebug() << nowWindowName; #endif } #endif @@ -155,9 +177,9 @@ void AutoProfileWatcher::runAppCheck() currentAppWindowTitle = nowWindowName; - Logger::LogDebug(QObject::trUtf8("Active window changed to: Title = \"%1\", " - "Class = \"%2\", Program = \"%3\" or \"%4\"."). - arg(nowWindowName, nowWindowClass, appLocation, baseAppFileName)); + Logger::LogDebug(QObject::trUtf8("Active window changed to: Title = \"%1\", " + "Class = \"%2\", Program = \"%3\" or \"%4\"."). + arg(nowWindowName, nowWindowClass, appLocation, baseAppFileName)); QSet fullSet; @@ -274,27 +296,25 @@ void AutoProfileWatcher::runAppCheck() } - if (numProps == numMatched) + if (numProps == numMatched && highestMatchCount.contains(info->getGUID())) { - if (highestMatchCount.contains(info->getGUID())) - { - int currentHigh = highestMatchCount.value(info->getGUID()); - if (numMatched > currentHigh) - { - highestMatchCount.insert(info->getGUID(), numMatched); - highestMatches.insert(info->getGUID(), info); - } - } - else + int currentHigh = highestMatchCount.value(info->getGUID()); + if (numMatched > currentHigh) { highestMatchCount.insert(info->getGUID(), numMatched); highestMatches.insert(info->getGUID(), info); } } + else if (numProps == numMatched && !highestMatchCount.contains(info->getGUID())) + { + highestMatchCount.insert(info->getGUID(), numMatched); + highestMatches.insert(info->getGUID(), info); + } } } QHashIterator highIter(highestMatches); + while (highIter.hasNext()) { AutoProfileInfo *info = highIter.next().value(); @@ -304,19 +324,18 @@ void AutoProfileWatcher::runAppCheck() if ((!getDefaultProfileAssignments().isEmpty() || allDefaultInfo) && !focusedWidget) { - if (allDefaultInfo != nullptr) + if (allDefaultInfo != nullptr && allDefaultInfo->isActive() && !getGuidSetLocal().contains("all")) { - if (allDefaultInfo->isActive() && !getGuidSetLocal().contains("all")) - { - emit foundApplicableProfile(allDefaultInfo); - } + emit foundApplicableProfile(allDefaultInfo); } QHashIterator iter(getDefaultProfileAssignments()); + while (iter.hasNext()) { iter.next(); AutoProfileInfo *info = iter.value(); + if (info->isActive() && !getGuidSetLocal().contains(info->getGUID())) { emit foundApplicableProfile(info); @@ -352,6 +371,7 @@ void AutoProfileWatcher::syncProfileAssignment() // Handle overall Default profile assignment bool defaultActive = allActive == "1" ? true : false; + if (defaultActive) { allDefaultInfo = new AutoProfileInfo("all", allProfile, defaultActive, 0, this); @@ -360,17 +380,18 @@ void AutoProfileWatcher::syncProfileAssignment() // Handle device specific Default profile assignments QStringListIterator iter(registeredGUIDs); + while (iter.hasNext()) { QString tempkey = iter.next(); QString guid = QString(tempkey).replace("GUID", ""); - QString profile = settings->value(QString("DefaultAutoProfile-%1/Profile").arg(guid), "").toString(); QString active = settings->value(QString("DefaultAutoProfile-%1/Active").arg(guid), "").toString(); if (!guid.isEmpty() && !profile.isEmpty()) { bool profileActive = active == "1" ? true : false; + if (profileActive && guid != "all") { AutoProfileInfo *info = new AutoProfileInfo(guid, profile, profileActive, 0, this); @@ -406,6 +427,7 @@ void AutoProfileWatcher::syncProfileAssignment() !guid.isEmpty()) { bool profileActive = active == "1" ? true : false; + if (profileActive) { AutoProfileInfo *info = new AutoProfileInfo(guid, profile, profileActive, partialTitleBool, this); @@ -415,16 +437,14 @@ void AutoProfileWatcher::syncProfileAssignment() info->setWindowClass(windowClass); QList templist; + if (getWindowClassProfileAssignments().contains(windowClass)) - { templist = getWindowClassProfileAssignments().value(windowClass); - } templist.append(info); windowClassProfileAssignments.insert(windowClass, templist); } - // look here! // partly watching is needed for window title if (!windowName.isEmpty()) { @@ -440,7 +460,6 @@ void AutoProfileWatcher::syncProfileAssignment() while(windows.hasNext()) { windows.next(); - qDebug() << windows.key(); } @@ -463,22 +482,20 @@ void AutoProfileWatcher::syncProfileAssignment() info->setExe(exe); QList templist; + if (getAppProfileAssignments().contains(exe)) - { templist = getAppProfileAssignments().value(exe); - } templist.append(info); appProfileAssignments.insert(exe, templist); - QString baseExe = QFileInfo(exe).fileName(); + if (!baseExe.isEmpty() && baseExe != exe) { QList templist; + if (getAppProfileAssignments().contains(baseExe)) - { templist = getAppProfileAssignments().value(baseExe); - } templist.append(info); appProfileAssignments.insert(baseExe, templist); @@ -501,36 +518,42 @@ void AutoProfileWatcher::clearProfileAssignments() qInstallMessageHandler(MessageHandler::myMessageOutput); QSet terminateProfiles; - QListIterator > iterDelete(getAppProfileAssignments().values()); + while (iterDelete.hasNext()) { QList templist = iterDelete.next(); terminateProfiles.unite(templist.toSet()); } + appProfileAssignments.clear(); QListIterator > iterClassDelete(getWindowClassProfileAssignments().values()); + while (iterClassDelete.hasNext()) { QList templist = iterClassDelete.next(); terminateProfiles.unite(templist.toSet()); } + windowClassProfileAssignments.clear(); QListIterator > iterNameDelete(getWindowNameProfileAssignments().values()); + while (iterNameDelete.hasNext()) { QList templist = iterNameDelete.next(); terminateProfiles.unite(templist.toSet()); } + windowNameProfileAssignments.clear(); QSetIterator iterTerminate(terminateProfiles); + while (iterTerminate.hasNext()) { AutoProfileInfo *info = iterTerminate.next(); - if (info) + if (info != nullptr) { delete info; info = nullptr; @@ -538,17 +561,18 @@ void AutoProfileWatcher::clearProfileAssignments() } QListIterator iterDefaultsDelete(getDefaultProfileAssignments().values()); + while (iterDefaultsDelete.hasNext()) { AutoProfileInfo *info = iterDefaultsDelete.next(); - if (info) + if (info != nullptr) { delete info; info = nullptr; } } - defaultProfileAssignments.clear(); + defaultProfileAssignments.clear(); allDefaultInfo = nullptr; getGuidSetLocal().clear(); } @@ -565,15 +589,8 @@ QString AutoProfileWatcher::findAppLocation() int pid = 0; currentWindow = X11Extras::getInstance()->getWindowInFocus(); - if (currentWindow) - { - pid = X11Extras::getInstance()->getApplicationPid(currentWindow); - } - - if (pid > 0) - { - exepath = X11Extras::getInstance()->getApplicationLocation(pid); - } + if (currentWindow) pid = X11Extras::getInstance()->getApplicationPid(currentWindow); + if (pid > 0) exepath = X11Extras::getInstance()->getApplicationLocation(pid); #endif #elif defined(Q_OS_WIN) @@ -592,11 +609,13 @@ QList* AutoProfileWatcher::getCustomDefaults() QList *temp = new QList(); QHashIterator iter(getDefaultProfileAssignments()); + while (iter.hasNext()) { iter.next(); temp->append(iter.value()); } + return temp; } diff --git a/src/autoprofilewatcher.h b/src/autoprofilewatcher.h old mode 100644 new mode 100755 index 141fa546c..a9bc376b5 --- a/src/autoprofilewatcher.h +++ b/src/autoprofilewatcher.h @@ -33,8 +33,12 @@ class AutoProfileWatcher : public QObject public: explicit AutoProfileWatcher(AntiMicroSettings *settings, QObject *parent = nullptr); + ~AutoProfileWatcher(); + void startTimer(); void stopTimer(); + static void disconnectWindowTimer(); + static AutoProfileWatcher* getAutoProfileWatcherInstance(); QList* getCustomDefaults(); AutoProfileInfo* getDefaultAllProfile(); bool isGUIDLocked(QString guid); @@ -45,6 +49,7 @@ class AutoProfileWatcher : public QObject static const int CHECKTIME = 500; // time in ms + protected: QString findAppLocation(); void clearProfileAssignments(); @@ -61,8 +66,8 @@ private slots: private: QSet& getGuidSetLocal(); - QTimer appTimer; - QTimer checkWindowTimer; + static AutoProfileWatcher* _instance; + static QTimer checkWindowTimer; AntiMicroSettings *settings; QHash > appProfileAssignments; QHash > windowClassProfileAssignments; diff --git a/src/axiseditdialog.cpp b/src/axiseditdialog.cpp old mode 100644 new mode 100755 index 1fb8090eb..2b7eb0d9f --- a/src/axiseditdialog.cpp +++ b/src/axiseditdialog.cpp @@ -41,27 +41,23 @@ AxisEditDialog::AxisEditDialog(JoyAxis *axis, QWidget *parent) : { ui->setupUi(this); qInstallMessageHandler(MessageHandler::myMessageOutput); - setAttribute(Qt::WA_DeleteOnClose); setAxisThrottleConfirm = new SetAxisThrottleDialog(axis, this); - - this->axis = axis; + m_axis = axis; updateWindowTitleAxisName(); initialThrottleState = axis->getThrottle(); bool actAsTrigger = false; + if ((initialThrottleState == static_cast(JoyAxis::PositiveThrottle)) || (initialThrottleState == static_cast(JoyAxis::PositiveHalfThrottle))) { actAsTrigger = true; } - if (actAsTrigger) - { - buildTriggerPresetsMenu(); - } + if (actAsTrigger) buildTriggerPresetsMenu(); ui->horizontalSlider->setValue(axis->getDeadZone()); ui->lineEdit->setText(QString::number(axis->getDeadZone())); @@ -115,19 +111,11 @@ AxisEditDialog::AxisEditDialog(JoyAxis *axis, QWidget *parent) : ui->joyValueLabel->setText(QString::number(axis->getCurrentRawValue())); ui->axisstatusBox->setValue(axis->getCurrentRawValue()); - if (!actAsTrigger) - { - selectAxisCurrentPreset(); - } - else - { - selectTriggerPreset(); - } + if (!actAsTrigger) selectAxisCurrentPreset(); + else selectTriggerPreset(); ui->axisNameLineEdit->setText(axis->getAxisName()); - - connect(ui->presetsComboBox, static_cast(&QComboBox::currentIndexChanged), this, &AxisEditDialog::implementPresets); connect(ui->horizontalSlider, &QSlider::valueChanged, this, &AxisEditDialog::updateDeadZoneBox); @@ -178,21 +166,16 @@ void AxisEditDialog::implementPresets(int index) qInstallMessageHandler(MessageHandler::myMessageOutput); bool actAsTrigger = false; - int currentThrottle = axis->getThrottle(); + int currentThrottle = m_axis->getThrottle(); + if ((currentThrottle == static_cast(JoyAxis::PositiveThrottle)) || (currentThrottle == static_cast(JoyAxis::PositiveHalfThrottle))) { actAsTrigger = true; } - if (actAsTrigger) - { - implementTriggerPresets(index); - } - else - { - implementAxisPresets(index); - } + if (actAsTrigger) implementTriggerPresets(index); + else implementAxisPresets(index); } void AxisEditDialog::implementAxisPresets(int index) @@ -203,74 +186,78 @@ void AxisEditDialog::implementAxisPresets(int index) JoyButtonSlot *pbuttonslot = nullptr; PadderCommon::lockInputDevices(); - InputDevice *tempDevice = axis->getParentSet()->getInputDevice(); + InputDevice *tempDevice = m_axis->getParentSet()->getInputDevice(); QMetaObject::invokeMethod(tempDevice, "haltServices", Qt::BlockingQueuedConnection); - if (index == 1) - { - nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - } - else if (index == 2) - { - nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - } - else if (index == 3) - { - nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - } - else if (index == 4) - { - nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - } - else if (index == 5) - { - nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Up), Qt::Key_Up, JoyButtonSlot::JoyKeyboard, this); - pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Down), Qt::Key_Down, JoyButtonSlot::JoyKeyboard, this); - } - else if (index == 6) - { - nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Left), Qt::Key_Left, JoyButtonSlot::JoyKeyboard, this); - pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Right), Qt::Key_Right, JoyButtonSlot::JoyKeyboard, this); - } - else if (index == 7) - { - nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_W), Qt::Key_W, JoyButtonSlot::JoyKeyboard, this); - pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_S), Qt::Key_S, JoyButtonSlot::JoyKeyboard, this); - } - else if (index == 8) - { - nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_A), Qt::Key_A, JoyButtonSlot::JoyKeyboard, this); - pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_D), Qt::Key_D, JoyButtonSlot::JoyKeyboard, this); - } - else if (index == 9) - { - nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); - pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); - } - else if (index == 10) - { - nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); - pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); - } - else if (index == 11) - { - JoyAxisButton *nbutton = axis->getNAxisButton(); - JoyAxisButton *pbutton = axis->getPAxisButton(); + switch(index) + { + case 1: + nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + break; + + case 2: + nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + break; + + case 3: + nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + break; + + case 4: + nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + break; + + case 5: + nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Up), Qt::Key_Up, JoyButtonSlot::JoyKeyboard, this); + pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Down), Qt::Key_Down, JoyButtonSlot::JoyKeyboard, this); + break; + + case 6: + nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Left), Qt::Key_Left, JoyButtonSlot::JoyKeyboard, this); + pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Right), Qt::Key_Right, JoyButtonSlot::JoyKeyboard, this); + break; + + case 7: + nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_W), Qt::Key_W, JoyButtonSlot::JoyKeyboard, this); + pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_S), Qt::Key_S, JoyButtonSlot::JoyKeyboard, this); + break; + + case 8: + nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_A), Qt::Key_A, JoyButtonSlot::JoyKeyboard, this); + pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_D), Qt::Key_D, JoyButtonSlot::JoyKeyboard, this); + break; + + case 9: + nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); + pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); + break; + + case 10: + nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); + pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); + break; + + case 11: + JoyAxisButton *nbutton = m_axis->getNAxisButton(); + JoyAxisButton *pbutton = m_axis->getPAxisButton(); + + QMetaObject::invokeMethod(nbutton, "clearSlotsEventReset"); + QMetaObject::invokeMethod(pbutton, "clearSlotsEventReset", Qt::BlockingQueuedConnection); - QMetaObject::invokeMethod(nbutton, "clearSlotsEventReset"); - QMetaObject::invokeMethod(pbutton, "clearSlotsEventReset", Qt::BlockingQueuedConnection); + refreshNButtonLabel(); + refreshPButtonLabel(); + break; - refreshNButtonLabel(); - refreshPButtonLabel(); } + if (nbuttonslot != nullptr) { - JoyAxisButton *button = axis->getNAxisButton(); + JoyAxisButton *button = m_axis->getNAxisButton(); QMetaObject::invokeMethod(button, "clearSlotsEventReset", Q_ARG(bool, false)); @@ -285,7 +272,7 @@ void AxisEditDialog::implementAxisPresets(int index) if (pbuttonslot != nullptr) { - JoyAxisButton *button = axis->getPAxisButton(); + JoyAxisButton *button = m_axis->getPAxisButton(); QMetaObject::invokeMethod(button, "clearSlotsEventReset", Q_ARG(bool, false)); QMetaObject::invokeMethod(button, "setAssignedSlot", Qt::BlockingQueuedConnection, @@ -319,6 +306,7 @@ void AxisEditDialog::updateThrottleUi(int index) qInstallMessageHandler(MessageHandler::myMessageOutput); int tempthrottle = 0; + if ((index == 0) || (index == 1)) { ui->nPushButton->setEnabled(true); @@ -338,7 +326,7 @@ void AxisEditDialog::updateThrottleUi(int index) tempthrottle = (index == 3) ? static_cast(JoyAxis::PositiveThrottle) : static_cast(JoyAxis::PositiveHalfThrottle); } - axis->setThrottle(tempthrottle); + m_axis->setThrottle(tempthrottle); ui->axisstatusBox->setThrottle(tempthrottle); } @@ -354,7 +342,8 @@ void AxisEditDialog::updateDeadZoneSlider(QString value) qInstallMessageHandler(MessageHandler::myMessageOutput); int temp = value.toInt(); - if ((temp >= this->axis->getAxisMinCal()) && (temp <= this->axis->getAxisMaxCal())) + + if ((temp >= m_axis->getAxisMinCal()) && (temp <= m_axis->getAxisMaxCal())) { ui->horizontalSlider->setValue(temp); } @@ -365,7 +354,8 @@ void AxisEditDialog::updateMaxZoneSlider(QString value) qInstallMessageHandler(MessageHandler::myMessageOutput); int temp = value.toInt(); - if ((temp >= this->axis->getAxisMinCal()) && (temp <= this->axis->getAxisMaxCal())) + + if ((temp >= m_axis->getAxisMinCal()) && (temp <= m_axis->getAxisMaxCal())) { ui->horizontalSlider_2->setValue(temp); } @@ -375,7 +365,7 @@ void AxisEditDialog::openAdvancedPDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); - ButtonEditDialog *dialog = new ButtonEditDialog(axis->getPAxisButton(), axis->getControlStick()->getParentSet()->getInputDevice(), this); + ButtonEditDialog *dialog = new ButtonEditDialog(m_axis->getPAxisButton(), m_axis->getPAxisButton()->getParentSet()->getInputDevice(), this); dialog->show(); connect(dialog, &ButtonEditDialog::finished, this, &AxisEditDialog::refreshPButtonLabel); @@ -386,7 +376,7 @@ void AxisEditDialog::openAdvancedNDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); - ButtonEditDialog *dialog = new ButtonEditDialog(axis->getNAxisButton(), axis->getControlStick()->getParentSet()->getInputDevice(), this); + ButtonEditDialog *dialog = new ButtonEditDialog(m_axis->getNAxisButton(), m_axis->getNAxisButton()->getParentSet()->getInputDevice(), this); dialog->show(); connect(dialog, &ButtonEditDialog::finished, this, &AxisEditDialog::refreshNButtonLabel); @@ -397,14 +387,14 @@ void AxisEditDialog::refreshNButtonLabel() { qInstallMessageHandler(MessageHandler::myMessageOutput); - ui->nPushButton->setText(axis->getNAxisButton()->getSlotsSummary()); + ui->nPushButton->setText(m_axis->getNAxisButton()->getSlotsSummary()); } void AxisEditDialog::refreshPButtonLabel() { qInstallMessageHandler(MessageHandler::myMessageOutput); - ui->pPushButton->setText(axis->getPAxisButton()->getSlotsSummary()); + ui->pPushButton->setText(m_axis->getPAxisButton()->getSlotsSummary()); } @@ -412,25 +402,24 @@ void AxisEditDialog::checkFinalSettings() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (axis->getThrottle() != initialThrottleState) - { + if (m_axis->getThrottle() != initialThrottleState) setAxisThrottleConfirm->exec(); - } } void AxisEditDialog::selectAxisCurrentPreset() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyAxisButton *naxisbutton = axis->getNAxisButton(); + JoyAxisButton *naxisbutton = m_axis->getNAxisButton(); QList *naxisslots = naxisbutton->getAssignedSlots(); - JoyAxisButton *paxisbutton = axis->getPAxisButton(); + JoyAxisButton *paxisbutton = m_axis->getPAxisButton(); QList *paxisslots = paxisbutton->getAssignedSlots(); if ((naxisslots->length() == 1) && (paxisslots->length() == 1)) { JoyButtonSlot *nslot = naxisslots->at(0); JoyButtonSlot *pslot = paxisslots->at(0); + if ((nslot->getSlotMode() == JoyButtonSlot::JoyMouseMovement) && (nslot->getSlotCode() == JoyButtonSlot::MouseLeft) && (pslot->getSlotMode() == JoyButtonSlot::JoyMouseMovement) && (pslot->getSlotCode() == JoyButtonSlot::MouseRight)) { @@ -500,12 +489,13 @@ void AxisEditDialog::selectTriggerPreset() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyAxisButton *paxisbutton = axis->getPAxisButton(); + JoyAxisButton *paxisbutton = m_axis->getPAxisButton(); QList *paxisslots = paxisbutton->getAssignedSlots(); if (paxisslots->length() == 1) { JoyButtonSlot *pslot = paxisslots->at(0); + if ((pslot->getSlotMode() == JoyButtonSlot::JoyMouseButton) && (pslot->getSlotCode() == JoyButtonSlot::MouseLB)) { ui->presetsComboBox->setCurrentIndex(1); @@ -545,8 +535,8 @@ void AxisEditDialog::implementTriggerPresets(int index) } else if (index == 3) { - JoyAxisButton *nbutton = axis->getNAxisButton(); - JoyAxisButton *pbutton = axis->getPAxisButton(); + JoyAxisButton *nbutton = m_axis->getNAxisButton(); + JoyAxisButton *pbutton = m_axis->getPAxisButton(); QMetaObject::invokeMethod(nbutton, "clearSlotsEventReset"); QMetaObject::invokeMethod(pbutton, "clearSlotsEventReset", Qt::BlockingQueuedConnection); @@ -557,9 +547,9 @@ void AxisEditDialog::implementTriggerPresets(int index) if (pbuttonslot != nullptr) { + JoyAxisButton *nbutton = m_axis->getNAxisButton(); + JoyAxisButton *pbutton = m_axis->getPAxisButton(); - JoyAxisButton *nbutton = axis->getNAxisButton(); - JoyAxisButton *pbutton = axis->getPAxisButton(); if (nbutton->getAssignedSlots()->length() > 0) { QMetaObject::invokeMethod(nbutton, "clearSlotsEventReset", Qt::BlockingQueuedConnection, @@ -598,7 +588,7 @@ void AxisEditDialog::openMouseSettingsDialog() ui->mouseSettingsPushButton->setEnabled(false); - MouseAxisSettingsDialog *dialog = new MouseAxisSettingsDialog(this->axis, this); + MouseAxisSettingsDialog *dialog = new MouseAxisSettingsDialog(m_axis, this); dialog->show(); connect(this, &AxisEditDialog::finished, dialog, &MouseAxisSettingsDialog::close); connect(dialog, &MouseAxisSettingsDialog::finished, this, &AxisEditDialog::enableMouseSettingButton); @@ -617,25 +607,22 @@ void AxisEditDialog::updateWindowTitleAxisName() QString temp = QString(trUtf8("Set")).append(" "); - if (!axis->getAxisName().isEmpty()) + if (!m_axis->getAxisName().isEmpty()) { - temp.append(axis->getPartialName(false, true)); + temp.append(m_axis->getPartialName(false, true)); } else { - temp.append(axis->getPartialName()); + temp.append(m_axis->getPartialName()); } - if (axis->getParentSet()->getIndex() != 0) + if (m_axis->getParentSet()->getIndex() != 0) { - int setIndex = axis->getParentSet()->getRealIndex(); + int setIndex = m_axis->getParentSet()->getRealIndex(); temp.append(" [").append(trUtf8("Set %1").arg(setIndex)); - QString setName = axis->getParentSet()->getName(); - if (!setName.isEmpty()) - { - temp.append(": ").append(setName); - } + QString setName = m_axis->getParentSet()->getName(); + if (!setName.isEmpty()) temp.append(": ").append(setName); temp.append("]"); } @@ -648,7 +635,6 @@ void AxisEditDialog::buildAxisPresetsMenu() qInstallMessageHandler(MessageHandler::myMessageOutput); ui->presetsComboBox->clear(); - ui->presetsComboBox->addItem(trUtf8("")); ui->presetsComboBox->addItem(trUtf8("Mouse (Horizontal)")); ui->presetsComboBox->addItem(trUtf8("Mouse (Inverted Horizontal)")); @@ -668,7 +654,6 @@ void AxisEditDialog::buildTriggerPresetsMenu() qInstallMessageHandler(MessageHandler::myMessageOutput); ui->presetsComboBox->clear(); - ui->presetsComboBox->addItem(trUtf8("")); ui->presetsComboBox->addItem(trUtf8("Left Mouse Button")); ui->presetsComboBox->addItem(trUtf8("Right Mouse Button")); @@ -682,7 +667,8 @@ void AxisEditDialog::presetForThrottleChange(int index) Q_UNUSED(index); bool actAsTrigger = false; - int currentThrottle = axis->getThrottle(); + int currentThrottle = m_axis->getThrottle(); + if ((currentThrottle == static_cast(JoyAxis::PositiveThrottle)) || (currentThrottle == static_cast(JoyAxis::PositiveHalfThrottle))) { @@ -690,6 +676,7 @@ void AxisEditDialog::presetForThrottleChange(int index) } disconnect(ui->presetsComboBox, static_cast(&QComboBox::currentIndexChanged), this, &AxisEditDialog::implementPresets); + if (actAsTrigger) { buildTriggerPresetsMenu(); diff --git a/src/axiseditdialog.h b/src/axiseditdialog.h old mode 100644 new mode 100755 index 9db808abd..be44bf71d --- a/src/axiseditdialog.h +++ b/src/axiseditdialog.h @@ -47,7 +47,7 @@ class AxisEditDialog : public QDialog private: Ui::AxisEditDialog *ui; - JoyAxis *axis; + JoyAxis *m_axis; SetAxisThrottleDialog *setAxisThrottleConfirm; int initialThrottleState; diff --git a/src/axiseditdialog.ui b/src/axiseditdialog.ui old mode 100644 new mode 100755 diff --git a/src/axisvaluebox.cpp b/src/axisvaluebox.cpp old mode 100644 new mode 100755 index b889088b7..e7ddeb1d3 --- a/src/axisvaluebox.cpp +++ b/src/axisvaluebox.cpp @@ -17,6 +17,7 @@ #include "axisvaluebox.h" +#include "globalvariables.h" #include "messagehandler.h" #include "joyaxis.h" @@ -33,15 +34,19 @@ AxisValueBox::AxisValueBox(QWidget *parent) : { qInstallMessageHandler(MessageHandler::myMessageOutput); - axis = nullptr; - deadZone = 0; - maxZone = 0; + m_axis = nullptr; + m_deadZone = 0; + m_maxZone = 0; joyValue = 0; - throttle = 0; + m_throttle = 0; lboxstart = 0; lboxend = 0; rboxstart = 0; rboxend = 0; + boxwidth = 0; + boxheight = 0; + singlewidth = 0; + singleend = 0; } void AxisValueBox::setThrottle(int throttle) @@ -57,9 +62,10 @@ void AxisValueBox::setThrottle(int throttle) #ifndef QT_DEBUG_NO_OUTPUT qDebug() << "throttle variable has been set in setThrottle with: " << throttle; #endif - this->throttle = throttle; + m_throttle = throttle; setValue(joyValue); } + update(); } @@ -69,34 +75,36 @@ void AxisValueBox::setValue(int value) #ifndef QT_DEBUG_NO_OUTPUT qDebug() << "Value for axis from value box at start is: " << value; - qDebug() << "throttle variable has value: " << throttle; + qDebug() << "throttle variable has value: " << m_throttle; #endif - if ((value >= JoyAxis::AXISMIN) && (value <= JoyAxis::AXISMAX)) + if ((value >= GlobalVariables::JoyAxis::AXISMIN) && (value <= GlobalVariables::JoyAxis::AXISMAX)) { #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Value for axis from value box is between : " << JoyAxis::AXISMIN << " and " << JoyAxis::AXISMAX; + qDebug() << "Value for axis from value box is between : " << GlobalVariables::JoyAxis::AXISMIN << " and " << GlobalVariables::JoyAxis::AXISMAX; #endif - if (throttle == static_cast(JoyAxis::NormalThrottle)) - { - this->joyValue = value; - } - else if (throttle == static_cast(JoyAxis::NegativeThrottle)) - { - this->joyValue = ((value + JoyAxis::AXISMIN) / 2); - } - else if (throttle == static_cast(JoyAxis::PositiveThrottle)) - { - this->joyValue = (value + JoyAxis::AXISMAX) / 2; - } - else if (throttle == static_cast(JoyAxis::NegativeHalfThrottle)) + switch(m_throttle) { - this->joyValue = (value <= 0) ? value : (-value); - } - else if (throttle == static_cast(JoyAxis::PositiveHalfThrottle)) - { - this->joyValue = (value >= 0) ? value : (-value); + case -2: + this->joyValue = (value <= 0) ? value : (-value); + break; + + case -1: + this->joyValue = ((value + GlobalVariables::JoyAxis::AXISMIN) / 2); + break; + + case 0: + this->joyValue = value; + break; + + case 1: + this->joyValue = (value + GlobalVariables::JoyAxis::AXISMAX) / 2; + break; + + case 2: + this->joyValue = (value >= 0) ? value : (-value); + break; } } @@ -107,11 +115,11 @@ void AxisValueBox::setValue(JoyAxis* axis, int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->axis = axis; + m_axis = axis; #ifndef QT_DEBUG_NO_OUTPUT qDebug() << "Value for axis from value box at start is: " << value; - qDebug() << "throttle variable has value: " << throttle; + qDebug() << "throttle variable has value: " << m_throttle; #endif if ((value >= axis->getAxisMinCal()) && (value <= axis->getAxisMaxCal())) @@ -120,25 +128,28 @@ void AxisValueBox::setValue(JoyAxis* axis, int value) qDebug() << "Value for axis from value box is between : " << axis->getAxisMinCal() << " and " << axis->getAxisMaxCal(); #endif - if (throttle == static_cast(JoyAxis::NormalThrottle)) + switch(m_throttle) { - this->joyValue = value; - } - else if (throttle == static_cast(JoyAxis::NegativeThrottle)) - { - this->joyValue = ((value + axis->getAxisMinCal()) / 2); - } - else if (throttle == static_cast(JoyAxis::PositiveThrottle)) - { - this->joyValue = (value + axis->getAxisMaxCal()) / 2; - } - else if (throttle == static_cast(JoyAxis::NegativeHalfThrottle)) - { - this->joyValue = (value <= 0) ? value : (-value); - } - else if (throttle == static_cast(JoyAxis::PositiveHalfThrottle)) - { - this->joyValue = (value >= 0) ? value : (-value); + + case -2: + this->joyValue = (value <= 0) ? value : (-value); + break; + + case -1: + this->joyValue = ((value + axis->getAxisMinCal()) / 2); + break; + + case 0: + this->joyValue = value; + break; + + case 1: + this->joyValue = (value + axis->getAxisMaxCal()) / 2; + break; + + case 2: + this->joyValue = (value >= 0) ? value : (-value); + break; } } @@ -149,9 +160,9 @@ void AxisValueBox::setDeadZone(int deadZone) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((deadZone >= JoyAxis::AXISMIN) && (deadZone <= JoyAxis::AXISMAX)) + if ((deadZone >= GlobalVariables::JoyAxis::AXISMIN) && (deadZone <= GlobalVariables::JoyAxis::AXISMAX)) { - this->deadZone = deadZone; + m_deadZone = deadZone; } update(); @@ -161,11 +172,11 @@ void AxisValueBox::setDeadZone(JoyAxis* axis, int deadZone) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->axis = axis; + m_axis = axis; if ((deadZone >= axis->getAxisMinCal()) && (deadZone <= axis->getAxisMaxCal())) { - this->deadZone = deadZone; + m_deadZone = deadZone; } update(); @@ -175,16 +186,16 @@ int AxisValueBox::getDeadZone() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return deadZone; + return m_deadZone; } void AxisValueBox::setMaxZone(int maxZone) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((maxZone >= JoyAxis::AXISMIN) && (maxZone <= JoyAxis::AXISMAX)) + if ((maxZone >= GlobalVariables::JoyAxis::AXISMIN) && (maxZone <= GlobalVariables::JoyAxis::AXISMAX)) { - this->maxZone = maxZone; + m_maxZone = maxZone; } update(); @@ -194,11 +205,11 @@ void AxisValueBox::setMaxZone(JoyAxis* axis, int maxZone) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->axis = axis; + m_axis = axis; if ((maxZone >= axis->getAxisMinCal()) && (maxZone <= axis->getAxisMaxCal())) { - this->maxZone = maxZone; + m_maxZone = maxZone; } update(); @@ -208,7 +219,7 @@ int AxisValueBox::getMaxZone() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return maxZone; + return m_maxZone; } int AxisValueBox::getJoyValue() @@ -222,7 +233,7 @@ int AxisValueBox::getThrottle() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return throttle; + return m_throttle; } void AxisValueBox::resizeEvent(QResizeEvent *event) @@ -256,7 +267,7 @@ void AxisValueBox::paintEvent(QPaintEvent *event) paint.setBrush(palette().base().color()); QBrush brush(palette().light().color()); - if (throttle == 0) + if (m_throttle == 0) { qDrawShadeRect(&paint, lboxstart, 0, lboxend, height(), palette(), true, 2, 0, &brush); qDrawShadeRect(&paint, rboxstart, 0, rboxend, height(), palette(), true, 2, 0, &brush); @@ -267,11 +278,11 @@ void AxisValueBox::paintEvent(QPaintEvent *event) } QColor innerColor; - if (abs(joyValue) <= deadZone) + if (abs(joyValue) <= m_deadZone) { innerColor = Qt::gray; } - else if (abs(joyValue) >= maxZone) + else if (abs(joyValue) >= m_maxZone) { innerColor = Qt::red; } @@ -279,15 +290,16 @@ void AxisValueBox::paintEvent(QPaintEvent *event) { innerColor = Qt::blue; } + paint.setPen(innerColor); paint.setBrush(innerColor); - int barwidth = (throttle == 0) ? boxwidth : singlewidth; + int barwidth = (m_throttle == 0) ? boxwidth : singlewidth; int barlength = abs((barwidth - 2) * joyValue) / getMaxAxValue(); if (joyValue > 0) { - paint.drawRect(((throttle == 0) ? rboxstart : lboxstart) + 2, 2, barlength, boxheight); + paint.drawRect(((m_throttle == 0) ? rboxstart : lboxstart) + 2, 2, barlength, boxheight); } else if (joyValue < 0) { @@ -295,14 +307,14 @@ void AxisValueBox::paintEvent(QPaintEvent *event) } // Draw marker for deadZone - int deadLine = abs((barwidth - 2) * deadZone) / getMaxAxValue(); - int maxLine = abs((barwidth - 2) * maxZone) / getMaxAxValue(); + int deadLine = abs((barwidth - 2) * m_deadZone) / getMaxAxValue(); + int maxLine = abs((barwidth - 2) * m_maxZone) / getMaxAxValue(); paint.setPen(Qt::blue); brush.setColor(Qt::blue); QBrush maxBrush(Qt::red); - if (throttle == static_cast(JoyAxis::NormalThrottle)) + if (m_throttle == static_cast(JoyAxis::NormalThrottle)) { qDrawPlainRect(&paint, rboxstart + 2 + deadLine, 2, 4, boxheight + 2, Qt::black, 1, &brush); qDrawPlainRect(&paint, lboxend - deadLine - 2, 2, 4, boxheight + 2, Qt::black, 1, &brush); @@ -311,14 +323,14 @@ void AxisValueBox::paintEvent(QPaintEvent *event) qDrawPlainRect(&paint, rboxstart + 2 + maxLine, 2, 4, boxheight + 2, Qt::black, 1, &maxBrush); qDrawPlainRect(&paint, lboxend - maxLine - 2, 2, 4, boxheight + 2, Qt::black, 1, &maxBrush); } - else if ((throttle == static_cast(JoyAxis::PositiveThrottle)) || (throttle == static_cast(JoyAxis::PositiveHalfThrottle))) + else if ((m_throttle == static_cast(JoyAxis::PositiveThrottle)) || (m_throttle == static_cast(JoyAxis::PositiveHalfThrottle))) { qDrawPlainRect(&paint, lboxstart + deadLine - 2, 2, 4, boxheight + 2, Qt::black, 1, &brush); paint.setPen(Qt::red); qDrawPlainRect(&paint, lboxstart + maxLine, 2, 4, boxheight + 2, Qt::black, 1, &maxBrush); } - else if ((throttle == static_cast(JoyAxis::NegativeThrottle)) || (throttle == static_cast(JoyAxis::NegativeHalfThrottle))) + else if ((m_throttle == static_cast(JoyAxis::NegativeThrottle)) || (m_throttle == static_cast(JoyAxis::NegativeHalfThrottle))) { qDrawPlainRect(&paint, singleend - deadLine - 2, 2, 4, boxheight + 2, Qt::black, 1, &brush); paint.setPen(Qt::red); @@ -330,17 +342,17 @@ void AxisValueBox::paintEvent(QPaintEvent *event) int AxisValueBox::getMaxAxValue() { bool axisDefined = false; - if (axis != nullptr) axisDefined = true; + if (m_axis != nullptr) axisDefined = true; - return (axisDefined && (axis->getAxisMaxCal() != -1)) ? axis->getAxisMaxCal() : JoyAxis::AXISMAX; + return (axisDefined && (m_axis->getAxisMaxCal() != -1)) ? m_axis->getAxisMaxCal() : GlobalVariables::JoyAxis::AXISMAX; } int AxisValueBox::getMinAxValue() { bool axisDefined = false; - if (axis != nullptr) axisDefined = true; + if (m_axis != nullptr) axisDefined = true; - return (axisDefined && (axis->getAxisMinCal() != -1)) ? axis->getAxisMinCal() : JoyAxis::AXISMIN; + return (axisDefined && (m_axis->getAxisMinCal() != -1)) ? m_axis->getAxisMinCal() : GlobalVariables::JoyAxis::AXISMIN; } diff --git a/src/axisvaluebox.h b/src/axisvaluebox.h old mode 100644 new mode 100755 index 944df8852..2659ef197 --- a/src/axisvaluebox.h +++ b/src/axisvaluebox.h @@ -51,11 +51,11 @@ public slots: void setMaxZone(JoyAxis* axis, int deadZone); private: - JoyAxis* axis; - int deadZone; - int maxZone; + JoyAxis* m_axis; + int m_deadZone; + int m_maxZone; int joyValue; - int throttle; + int m_throttle; int boxwidth; int boxheight; int lboxstart; diff --git a/src/buttoneditdialog.cpp b/src/buttoneditdialog.cpp old mode 100644 new mode 100755 index 1498ad1b3..8d57a8f69 --- a/src/buttoneditdialog.cpp +++ b/src/buttoneditdialog.cpp @@ -33,14 +33,12 @@ #include "common.h" #ifdef Q_OS_WIN -#include -#include "winextras.h" - + #include + #include "winextras.h" #elif defined(Q_OS_UNIX) -#include + #include #endif - #include #include #include @@ -59,9 +57,10 @@ ButtonEditDialog::ButtonEditDialog(InputDevice* joystick, QWidget *parent) : { ui->setupUi(this); + withoutQuickSetDialog = false; + setAttribute(Qt::WA_DeleteOnClose); setWindowTitle(trUtf8("Choose your keyboard key")); - ui->advancedPushButton->setEnabled(false); update(); instance = this; @@ -89,7 +88,7 @@ ButtonEditDialog::ButtonEditDialog(InputDevice* joystick, QWidget *parent) : ui->virtualKeyMouseTabWidget->hide(); ui->virtualKeyMouseTabWidget->deleteLater(); - ui->virtualKeyMouseTabWidget = new VirtualKeyboardMouseWidget(joystick ,&helper, currentQuickDialog, this); + ui->virtualKeyMouseTabWidget = new VirtualKeyboardMouseWidget(joystick , &helper, currentQuickDialog, nullptr, this); ui->verticalLayout->insertWidget(1, ui->virtualKeyMouseTabWidget); PadderCommon::inputDaemonMutex.unlock(); @@ -113,13 +112,15 @@ ButtonEditDialog::ButtonEditDialog(InputDevice* joystick, QWidget *parent) : ButtonEditDialog::ButtonEditDialog(JoyButton* button, InputDevice* joystick, QWidget *parent) : QDialog(parent, Qt::Window), + helper(), ui(new Ui::ButtonEditDialog) { ui->setupUi(this); + withoutQuickSetDialog = true; + setAttribute(Qt::WA_DeleteOnClose); setWindowTitle(trUtf8("Choose your keyboard key")); - ui->advancedPushButton->setEnabled(false); update(); instance = this; @@ -143,14 +144,13 @@ ButtonEditDialog::ButtonEditDialog(JoyButton* button, InputDevice* joystick, QWi ui->virtualKeyMouseTabWidget->hide(); ui->virtualKeyMouseTabWidget->deleteLater(); - ui->virtualKeyMouseTabWidget = new VirtualKeyboardMouseWidget(joystick, &helper, currentQuickDialog, this); + ui->virtualKeyMouseTabWidget = new VirtualKeyboardMouseWidget(joystick, &helper, currentQuickDialog, button, this); ui->verticalLayout->insertWidget(1, ui->virtualKeyMouseTabWidget); PadderCommon::inputDaemonMutex.unlock(); connect(qApp, &QApplication::focusChanged, this, &ButtonEditDialog::checkForKeyboardWidgetFocus); - connect(ui->virtualKeyMouseTabWidget, &VirtualKeyboardMouseWidget::selectionCleared, this, &ButtonEditDialog::refreshSlotSummaryLabel); connect(this, &ButtonEditDialog::keyGrabbed, this, &ButtonEditDialog::processSlotAssignment); @@ -194,12 +194,10 @@ ButtonEditDialog::~ButtonEditDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (instance != nullptr) { + if (instance != nullptr) instance = nullptr; - } delete ui; - } @@ -223,12 +221,11 @@ void ButtonEditDialog::keyPressEvent(QKeyEvent *event) ignore = true; break; } + default: + break; } - if (!ignore) - { - QDialog::keyPressEvent(event); - } + if (!ignore) QDialog::keyPressEvent(event); } void ButtonEditDialog::keyReleaseEvent(QKeyEvent *event) @@ -292,7 +289,6 @@ void ButtonEditDialog::keyReleaseEvent(QKeyEvent *event) int finalvirtual = 0; int checkalias = 0; - if (QApplication::platformName() == QStringLiteral("xcb")) { // Obtain group 1 X11 keysym. Removes effects from modifiers. @@ -306,8 +302,7 @@ void ButtonEditDialog::keyReleaseEvent(QKeyEvent *event) QtKeyMapperBase *x11KeyMapper = AntKeyMapper::getInstance()->getNativeKeyMapper(); Q_ASSERT(x11KeyMapper != nullptr); checkalias = x11KeyMapper->returnQtKey(finalvirtual); - // Find corresponding Linux input key for the Qt key. - finalvirtual = AntKeyMapper::getInstance()->returnVirtualKey(checkalias); + finalvirtual = AntKeyMapper::getInstance()->returnVirtualKey(checkalias); // Find corresponding Linux input key for the Qt key. } #endif @@ -317,9 +312,7 @@ void ButtonEditDialog::keyReleaseEvent(QKeyEvent *event) // Check for alias against group 1 keysym. checkalias = AntKeyMapper::getInstance()->returnQtKey(finalvirtual); } - #endif - } else { @@ -328,7 +321,6 @@ void ButtonEditDialog::keyReleaseEvent(QKeyEvent *event) checkalias = AntKeyMapper::getInstance()->returnQtKey(finalvirtual); } - #else int finalvirtual = 0; int checkalias = 0; @@ -348,42 +340,32 @@ void ButtonEditDialog::keyReleaseEvent(QKeyEvent *event) #endif - if (!ignoreRelease) + if (!ignoreRelease && (event->modifiers() & Qt::ControlModifier) && (event->key() == Qt::Key_X)) { - if ((event->modifiers() & Qt::ControlModifier) && (event->key() == Qt::Key_X)) - { - controlcode = 0; - ignoreRelease = true; - emit selectionCleared(); - } - else if (controlcode <= 0) - { - controlcode = 0; - } + controlcode = 0; + ignoreRelease = true; + emit selectionCleared(); } - else + else if (!ignoreRelease && (controlcode <= 0)) + { + controlcode = 0; + } + else if (ignoreRelease) { controlcode = 0; ignoreRelease = false; } - if (controlcode > 0) + if (controlcode > 0 && (checkalias > 0) && (finalvirtual > 0)) { - if ((checkalias > 0) && (finalvirtual > 0)) - { - JoyButtonSlot *tempslot = new JoyButtonSlot(finalvirtual, checkalias, JoyButtonSlot::JoyKeyboard, this); - emit keyGrabbed(tempslot); - } - else if (virtualactual > 0) - { - JoyButtonSlot *tempslot = new JoyButtonSlot(virtualactual, JoyButtonSlot::JoyKeyboard, this); - emit keyGrabbed(tempslot); - } - else - { - QDialog::keyReleaseEvent(event); - } + JoyButtonSlot *tempslot = new JoyButtonSlot(finalvirtual, checkalias, JoyButtonSlot::JoyKeyboard, this); + emit keyGrabbed(tempslot); + } + else if ((controlcode > 0) && (virtualactual > 0)) + { + JoyButtonSlot *tempslot = new JoyButtonSlot(virtualactual, JoyButtonSlot::JoyKeyboard, this); + emit keyGrabbed(tempslot); } else { @@ -400,24 +382,24 @@ void ButtonEditDialog::refreshSlotSummaryLabel() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (lastJoyButton != nullptr) ui->slotSummaryLabel->setText(lastJoyButton->getSlotsString().replace("&", "&&")); - else ui->slotSummaryLabel->setText(trUtf8("No button")); + if (lastJoyButton != nullptr) ui->slotSummaryLabel->setText(lastJoyButton->getSlotsString().replace("&", "&&")); + else ui->slotSummaryLabel->setText(trUtf8("No button")); } void ButtonEditDialog::changeToggleSetting() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (lastJoyButton != nullptr) lastJoyButton->setToggle(ui->toggleCheckBox->isChecked()); - else QMessageBox::information(this, trUtf8("Last button"), trUtf8("To change settings for last button, it must be at least one assignment from keyboard to gamepad")); + if (lastJoyButton != nullptr) lastJoyButton->setToggle(ui->toggleCheckBox->isChecked()); + else QMessageBox::information(this, trUtf8("Last button"), trUtf8("To change settings for last button, it must be at least one assignment from keyboard to gamepad")); } void ButtonEditDialog::changeTurboSetting() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (lastJoyButton != nullptr) lastJoyButton->setUseTurbo(ui->turboCheckBox->isChecked()); - else QMessageBox::information(this, trUtf8("Last button"), trUtf8("To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad")); + if (lastJoyButton != nullptr) lastJoyButton->setUseTurbo(ui->turboCheckBox->isChecked()); + else QMessageBox::information(this, trUtf8("Last button"), trUtf8("To change settings of turbo for last button, it must be at least one assignment from keyboard to gamepad")); } void ButtonEditDialog::openAdvancedDialog() @@ -427,28 +409,29 @@ void ButtonEditDialog::openAdvancedDialog() ui->advancedPushButton->setEnabled(false); if (lastJoyButton != nullptr) { - AdvanceButtonDialog *dialog = new AdvanceButtonDialog(lastJoyButton, this); - dialog->show(); - // Disconnect event to allow for placing slot to AdvanceButtonDialog - disconnect(this, &ButtonEditDialog::keyGrabbed, 0, 0); - disconnect(this, &ButtonEditDialog::selectionCleared, 0, 0); - disconnect(this, &ButtonEditDialog::selectionFinished, 0, 0); + AdvanceButtonDialog *dialog = new AdvanceButtonDialog(lastJoyButton, this); + dialog->show(); - connect(dialog, &AdvanceButtonDialog::finished, ui->virtualKeyMouseTabWidget, &VirtualKeyboardMouseWidget::establishVirtualKeyboardSingleSignalConnections); - connect(dialog, &AdvanceButtonDialog::finished, ui->virtualKeyMouseTabWidget, &VirtualKeyboardMouseWidget::establishVirtualMouseSignalConnections); - connect(dialog, &AdvanceButtonDialog::finished, this, &ButtonEditDialog::closedAdvancedDialog); - connect(dialog, &AdvanceButtonDialog::turboButtonEnabledChange, this, &ButtonEditDialog::setTurboButtonEnabled); + // Disconnect event to allow for placing slot to AdvanceButtonDialog + disconnect(this, &ButtonEditDialog::keyGrabbed, nullptr, nullptr); + disconnect(this, &ButtonEditDialog::selectionCleared, nullptr, nullptr); + disconnect(this, &ButtonEditDialog::selectionFinished, nullptr, nullptr); - connect(this, &ButtonEditDialog::sendTempSlotToAdvanced, dialog, &AdvanceButtonDialog::placeNewSlot); - connect(this, &ButtonEditDialog::keyGrabbed, dialog, &AdvanceButtonDialog::placeNewSlot); - connect(this, &ButtonEditDialog::selectionCleared, dialog, &AdvanceButtonDialog::clearAllSlots); - connect(ui->virtualKeyMouseTabWidget, static_cast(&VirtualKeyboardMouseWidget::selectionMade), dialog, &AdvanceButtonDialog::placeNewSlot); - connect(ui->virtualKeyMouseTabWidget, static_cast(&VirtualKeyboardMouseWidget::selectionMade), this, &ButtonEditDialog::createTempSlot); - connect(ui->virtualKeyMouseTabWidget, &VirtualKeyboardMouseWidget::selectionCleared, dialog, &AdvanceButtonDialog::clearAllSlots); + connect(dialog, &AdvanceButtonDialog::finished, ui->virtualKeyMouseTabWidget, &VirtualKeyboardMouseWidget::establishVirtualKeyboardSingleSignalConnections); + connect(dialog, &AdvanceButtonDialog::finished, ui->virtualKeyMouseTabWidget, &VirtualKeyboardMouseWidget::establishVirtualMouseSignalConnections); + connect(dialog, &AdvanceButtonDialog::finished, this, &ButtonEditDialog::closedAdvancedDialog); + connect(dialog, &AdvanceButtonDialog::turboButtonEnabledChange, this, &ButtonEditDialog::setTurboButtonEnabled); - connect(this, &ButtonEditDialog::finished, dialog, &AdvanceButtonDialog::close); - emit advancedDialogOpened(); + connect(this, &ButtonEditDialog::sendTempSlotToAdvanced, dialog, &AdvanceButtonDialog::placeNewSlot); + connect(this, &ButtonEditDialog::keyGrabbed, dialog, &AdvanceButtonDialog::placeNewSlot); + connect(this, &ButtonEditDialog::selectionCleared, dialog, &AdvanceButtonDialog::clearAllSlots); + connect(ui->virtualKeyMouseTabWidget, static_cast(&VirtualKeyboardMouseWidget::selectionMade), dialog, &AdvanceButtonDialog::placeNewSlot); + connect(ui->virtualKeyMouseTabWidget, static_cast(&VirtualKeyboardMouseWidget::selectionMade), this, &ButtonEditDialog::createTempSlot); + connect(ui->virtualKeyMouseTabWidget, &VirtualKeyboardMouseWidget::selectionCleared, dialog, &AdvanceButtonDialog::clearAllSlots); + + connect(this, &ButtonEditDialog::finished, dialog, &AdvanceButtonDialog::close); + emit advancedDialogOpened(); } else { @@ -470,19 +453,17 @@ void ButtonEditDialog::checkTurboSetting(bool state) qInstallMessageHandler(MessageHandler::myMessageOutput); if (lastJoyButton != nullptr) { - if (lastJoyButton->containsSequence()) - { - ui->turboCheckBox->setChecked(false); - ui->turboCheckBox->setEnabled(false); - } - else - { - ui->turboCheckBox->setChecked(state); - ui->turboCheckBox->setEnabled(true); - } - - getHelperLocal().setUseTurbo(state); + if (lastJoyButton->containsSequence()) + { + ui->turboCheckBox->setChecked(false); + ui->turboCheckBox->setEnabled(false); + } + else + { + ui->turboCheckBox->setChecked(state); + ui->turboCheckBox->setEnabled(true); + } } } @@ -497,9 +478,9 @@ void ButtonEditDialog::closedAdvancedDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); - ui->advancedPushButton->setEnabled(true); + refreshForLastBtn(); - disconnect(ui->virtualKeyMouseTabWidget, static_cast(&VirtualKeyboardMouseWidget::selectionMade), this, 0); + disconnect(ui->virtualKeyMouseTabWidget, static_cast(&VirtualKeyboardMouseWidget::selectionMade), this, nullptr); // Re-connect previously disconnected event connect(this, &ButtonEditDialog::keyGrabbed, this, &ButtonEditDialog::processSlotAssignment); @@ -510,26 +491,28 @@ void ButtonEditDialog::closedAdvancedDialog() void ButtonEditDialog::processSlotAssignment(JoyButtonSlot *tempslot) { - qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((currentQuickDialog == nullptr) && (buttonEventInterval.isNull() || (buttonEventInterval.elapsed() > 1000))) + if (withoutQuickSetDialog) { - // for better security, force pausing for 1 sec between key presses, - // because mapped joystick buttons and axes become keys too - // it's good for oversensitive buttons and axes, which can - // create QuickSetDialog windows many times for one key - if (buttonEventInterval.isNull()) - buttonEventInterval.start(); - else - buttonEventInterval.restart(); - - - currentQuickDialog = new QuickSetDialog(joystick, &helper, "setAssignedSlot", tempslot->getSlotCode(), tempslot->getSlotCodeAlias(), -1, tempslot->getSlotMode(), false, false, this); + invokeMethodLastBtn(lastJoyButton, &helper, "setAssignedSlot", tempslot->getSlotCode(), tempslot->getSlotCodeAlias(), -1, tempslot->getSlotMode(), false, false, Qt::QueuedConnection, Qt::QueuedConnection, Qt::QueuedConnection); + } + else + { + if ((currentQuickDialog == nullptr) && (buttonEventInterval.isNull() || (buttonEventInterval.elapsed() > 1000))) + { + // for better security, force pausing for 1 sec between key presses, + // because mapped joystick buttons and axes become keys too + // it's good for oversensitive buttons and axes, which can + // create QuickSetDialog windows many times for one key - currentQuickDialog->show(); + if (buttonEventInterval.isNull()) buttonEventInterval.start(); + else buttonEventInterval.restart(); - connect(currentQuickDialog, &QuickSetDialog::finished, this, &ButtonEditDialog::nullifyDialogPointer); + currentQuickDialog = new QuickSetDialog(joystick, &helper, "setAssignedSlot", tempslot->getSlotCode(), tempslot->getSlotCodeAlias(), -1, tempslot->getSlotMode(), false, false, this); + currentQuickDialog->show(); + connect(currentQuickDialog, &QuickSetDialog::finished, this, &ButtonEditDialog::nullifyDialogPointer); + } } tempslot->deleteLater(); @@ -561,26 +544,23 @@ void ButtonEditDialog::updateWindowTitleButtonName() QString temp = QString(trUtf8("As last gamepad button has been set")).append(" \"").append(lastJoyButton->getPartialName(false, true)).append("\" "); - if (lastJoyButton->getParentSet()->getIndex() != 0) - { - int setIndex = lastJoyButton->getParentSet()->getRealIndex(); - temp.append(" [").append(trUtf8("Index %1").arg(setIndex)); - QString setName = lastJoyButton->getParentSet()->getName(); - if (!setName.isEmpty()) + if (lastJoyButton->getParentSet()->getIndex() != 0) { - temp.append(": ").append(setName); - } + int setIndex = lastJoyButton->getParentSet()->getRealIndex(); + temp.append(" [").append(trUtf8("Index %1").arg(setIndex)); + QString setName = lastJoyButton->getParentSet()->getName(); - temp.append("]"); - } + if (!setName.isEmpty()) temp.append(": ").append(setName); - setWindowTitle(temp); + temp.append("]"); + } + + setWindowTitle(temp); } else { setWindowTitle(trUtf8("Choose your keyboard key")); } - } @@ -603,36 +583,109 @@ void ButtonEditDialog::refreshForLastBtn() { if (lastJoyButton != nullptr) { - ui->advancedPushButton->setEnabled(true); + ui->slotSummaryLabel->setText(lastJoyButton->getSlotsString()); + updateWindowTitleButtonName(); - ui->slotSummaryLabel->setText(lastJoyButton->getSlotsString()); - updateWindowTitleButtonName(); + ui->toggleCheckBox->setChecked(lastJoyButton->getToggleState()); + ui->turboCheckBox->setChecked(lastJoyButton->isUsingTurbo()); - ui->toggleCheckBox->setChecked(lastJoyButton->getToggleState()); - ui->turboCheckBox->setChecked(lastJoyButton->isUsingTurbo()); + if (!lastJoyButton->getActionName().isEmpty()) + ui->actionNameLineEdit->setText(lastJoyButton->getActionName()); - if (!lastJoyButton->getActionName().isEmpty()) - { - ui->actionNameLineEdit->setText(lastJoyButton->getActionName()); + if (!lastJoyButton->getButtonName().isEmpty()) + ui->buttonNameLineEdit->setText(lastJoyButton->getButtonName()); + + if ((lastJoyButton->getAssignedSlots()->count() > 0) || (ui->slotSummaryLabel->text() != trUtf8("[NO KEY]"))) + { + ui->advancedPushButton->setEnabled(true); + ui->advancedPushButton->setEnabled(true); + } + else + { + ui->advancedPushButton->setEnabled(false); + } + + if (lastJoyButton != nullptr) { + + QListIterator iter(*(lastJoyButton->getAssignedSlots())); + + ui->virtualKeyMouseTabWidget->disableMouseSettingButton(); + + while (iter.hasNext()) + { + JoyButtonSlot *buttonslot = iter.next(); + + switch(buttonslot->getSlotMode()) + { + case JoyButtonSlot::JoyMouseMovement: + case JoyButtonSlot::JoyMouseButton: + ui->virtualKeyMouseTabWidget->enableMouseSettingButton(); + break; + } + } + } + + connect(ui->actionNameLineEdit, &QLineEdit::textEdited, lastJoyButton, &JoyButton::setActionName); + connect(ui->buttonNameLineEdit, &QLineEdit::textEdited, lastJoyButton, &JoyButton::setButtonName); + + connect(lastJoyButton, &JoyButton::toggleChanged, ui->toggleCheckBox, &QCheckBox::setChecked); + connect(lastJoyButton, &JoyButton::turboChanged, this, &ButtonEditDialog::checkTurboSetting); + connect(lastJoyButton, &JoyButton::slotsChanged, this, &ButtonEditDialog::refreshSlotSummaryLabel); + connect(lastJoyButton, &JoyButton::buttonNameChanged, this, &ButtonEditDialog::updateWindowTitleButtonName); } - if (!lastJoyButton->getButtonName().isEmpty()) + update(); +} + +void ButtonEditDialog::invokeMethodLastBtn(JoyButton* lastJoyBtn, ButtonEditDialogHelper* helper, const char* invokeString, int code, int alias, int index, JoyButtonSlot::JoySlotInputAction mode, bool withClear, bool withTrue, Qt::ConnectionType connTypeForAlias, Qt::ConnectionType connTypeForNothing, Qt::ConnectionType connTypeForAll) +{ + QPointer lastBtn = lastJoyBtn; + if (helper != nullptr) helper = new ButtonEditDialogHelper(); + + QPointer btnEditDHelper = helper; + + if (lastJoyBtn != nullptr) { - ui->buttonNameLineEdit->setText(lastJoyButton->getButtonName()); - } + helper->setThisButton(lastJoyBtn); + helper->moveToThread(lastJoyBtn->thread()); + + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "Thread in QuickSetDialog"; + #endif + + if (withClear) QMetaObject::invokeMethod(lastJoyBtn, "clearSlotsEventReset", Q_ARG(bool, withTrue)); + + // when alias exists but not index + if ((alias != -1) && (index == -1)) { - connect(ui->actionNameLineEdit, &QLineEdit::textEdited, lastJoyButton, &JoyButton::setActionName); - connect(ui->buttonNameLineEdit, &QLineEdit::textEdited, lastJoyButton, &JoyButton::setButtonName); + QMetaObject::invokeMethod(helper, invokeString, connTypeForAlias, + Q_ARG(int, code), + Q_ARG(int, alias), + Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); - connect(lastJoyButton, &JoyButton::toggleChanged, ui->toggleCheckBox, &QCheckBox::setChecked); - connect(lastJoyButton, &JoyButton::turboChanged, this, &ButtonEditDialog::checkTurboSetting); - connect(lastJoyButton, &JoyButton::slotsChanged, this, &ButtonEditDialog::refreshSlotSummaryLabel); - connect(lastJoyButton, &JoyButton::buttonNameChanged, this, &ButtonEditDialog::updateWindowTitleButtonName); + // when alias doesn't exists and index too + } else if ((alias == -1) && (index == -1)) { + QMetaObject::invokeMethod(helper, invokeString, connTypeForNothing, + Q_ARG(int, code), + Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); + + // when all exist (code, alias, index) + } else { + + if (lastJoyBtn->isPartVDPad()) connTypeForAll = Qt::BlockingQueuedConnection; + + QMetaObject::invokeMethod(helper, invokeString, connTypeForAll, + Q_ARG(int, code), + Q_ARG(int, alias), + Q_ARG(int, index), + Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); + } } - update(); + if (lastBtn.isNull()) lastBtn.clear(); + if (btnEditDHelper.isNull()) btnEditDHelper.clear(); } diff --git a/src/buttoneditdialog.h b/src/buttoneditdialog.h old mode 100644 new mode 100755 index e23b1c0fc..847199dd1 --- a/src/buttoneditdialog.h +++ b/src/buttoneditdialog.h @@ -38,20 +38,22 @@ class ButtonEditDialog : public QDialog Q_OBJECT public: - explicit ButtonEditDialog(JoyButton* button, InputDevice* joystick, QWidget *parent = nullptr); - explicit ButtonEditDialog(InputDevice* joystick, QWidget *parent = nullptr); + explicit ButtonEditDialog(JoyButton* button, InputDevice* joystick, QWidget *parent = nullptr); // called for chosen button + explicit ButtonEditDialog(InputDevice* joystick, QWidget *parent = nullptr); // Accessed by pressing the "Quick Set" button ~ButtonEditDialog(); static ButtonEditDialog* getInstance(); JoyButton* getLastJoyButton(); void setUpLastJoyButton(JoyButton*); void refreshForLastBtn(); + void invokeMethodLastBtn(JoyButton* lastJoyBtn, ButtonEditDialogHelper* helper, const char* invokeString, int code, int alias, int index, JoyButtonSlot::JoySlotInputAction mode, bool withClear, bool withTrue, Qt::ConnectionType connTypeForAlias, Qt::ConnectionType connTypeForNothing, Qt::ConnectionType connTypeForAll); protected: virtual void keyReleaseEvent(QKeyEvent *event); virtual void keyPressEvent(QKeyEvent *event); private: + ButtonEditDialogHelper helper; Ui::ButtonEditDialog *ui; ButtonEditDialogHelper& getHelperLocal(); @@ -59,8 +61,9 @@ class ButtonEditDialog : public QDialog InputDevice *joystick; QuickSetDialog *currentQuickDialog; bool ignoreRelease; + bool withoutQuickSetDialog; JoyButton* lastJoyButton; - ButtonEditDialogHelper helper; + static ButtonEditDialog *instance; signals: diff --git a/src/buttoneditdialog.ui b/src/buttoneditdialog.ui old mode 100644 new mode 100755 diff --git a/src/calibration.cpp b/src/calibration.cpp old mode 100644 new mode 100755 index 4866e277c..e96abdc77 --- a/src/calibration.cpp +++ b/src/calibration.cpp @@ -1,6 +1,7 @@ #include "calibration.h" #include "ui_calibration.h" +#include "globalvariables.h" #include "joycontrolstick.h" #include "joytabwidget.h" #include "inputdevice.h" @@ -17,6 +18,7 @@ #include + Calibration::Calibration(QMap* joysticks, QWidget *parent) : QWidget(parent), ui(new Ui::Calibration), @@ -27,7 +29,6 @@ Calibration::Calibration(QMap* joysticks, QWidget qInstallMessageHandler(MessageHandler::myMessageOutput); setAttribute(Qt::WA_DeleteOnClose); - setWindowTitle(trUtf8("Calibration")); sumX = 0; @@ -48,15 +49,14 @@ Calibration::Calibration(QMap* joysticks, QWidget calibrated = this->stick->wasCalibrated(); ui->Informations->setText(stick->getCalibrationSummary()); - // temporarily, until functionality is implemented - ui->jstestgtkCheckbox->hide(); + ui->resetBtn->setEnabled(calibrated); + ui->saveBtn->setEnabled(false); controlstick.data()->getModifierButton()->establishPropertyUpdatedConnections(); helper.moveToThread(controlstick.data()->thread()); setProgressBars(0, 0, 0); ui->stickStatusBoxWidget->setFocus(); - ui->stickStatusBoxWidget->setStick(controlstick.data()); ui->stickStatusBoxWidget->update(); @@ -83,10 +83,10 @@ Calibration::Calibration(QMap* joysticks, QWidget connect(ui->cancelBtn, &QPushButton::clicked, this, &Calibration::close); connect(ui->controllersBox, &QComboBox::currentTextChanged, this, &Calibration::setController); connect(ui->axesBox, static_cast(&QComboBox::currentIndexChanged), this, &Calibration::createAxesConnection); - connect(ui->jstestgtkCheckbox, &QCheckBox::stateChanged, this, &Calibration::loadSetFromJstest); connect(ui->startButton, &QPushButton::clicked, this, &Calibration::startCalibration); - connect(ui->resetBtn, &QPushButton::clicked, this, &Calibration::resetSettings); - + connect(ui->resetBtn, &QPushButton::clicked, [this](bool clicked){ + resetSettings(false, clicked); + }); update(); } @@ -103,58 +103,74 @@ Calibration::~Calibration() * @brief Resets memory of all variables to default, updates window and shows message * @return Nothing */ -void Calibration::resetSettings() +void Calibration::resetSettings(bool silentReset, bool) { - QMessageBox msgBox; - msgBox.setText(trUtf8("Do you really want to reset settings of current axes?")); - msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); + if (!silentReset) { - switch(msgBox.exec()) - { - case QMessageBox::Ok: - sumX = 0; - sumY = 0; - center_calibrated_x = -1; - center_calibrated_y = -1; - max_axis_val_x = -1; - min_axis_val_x = -1; - max_axis_val_y = -1; - min_axis_val_y = -1; - deadzone_calibrated_x = -1; - deadzone_calibrated_y = -1; - calibrated = false; - x_es_val.clear(); - y_es_val.clear(); + QMessageBox msgBox; + msgBox.setText(trUtf8("Do you really want to reset settings of current axis?")); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); - joyAxisX->setAxisCenterCal(center_calibrated_x); - joyAxisY->setAxisCenterCal(center_calibrated_y); - joyAxisX->setDeadZone(JoyAxis::AXISDEADZONE); - joyAxisY->setDeadZone(JoyAxis::AXISDEADZONE); - joyAxisX->setAxisMinCal(min_axis_val_x); - joyAxisY->setAxisMinCal(min_axis_val_y); - joyAxisX->setAxisMaxCal(max_axis_val_x); - joyAxisY->setAxisMaxCal(max_axis_val_y); - joyAxisX->setMaxZoneValue(JoyAxis::AXISMAXZONE); - joyAxisY->setMaxZoneValue(JoyAxis::AXISMAXZONE); - stick->setDeadZone(JoyAxis::AXISDEADZONE); - stick->setMaxZone(JoyAxis::AXISMAXZONE); - calibrated = false; - stick->setCalibrationFlag(false); - stick->setCalibrationSummary(QString()); + switch(msgBox.exec()) + { + case QMessageBox::Yes: + restoreCalValues(); - update(); - ui->stickStatusBoxWidget->update(); - break; + break; - case QMessageBox::Cancel: - break; + case QMessageBox::No: + break; - default: - break; + default: + break; + } + } + else + { + restoreCalValues(); } } +void Calibration::restoreCalValues() +{ + sumX = 0; + sumY = 0; + center_calibrated_x = -1; + center_calibrated_y = -1; + max_axis_val_x = -1; + min_axis_val_x = -1; + max_axis_val_y = -1; + min_axis_val_y = -1; + deadzone_calibrated_x = -1; + deadzone_calibrated_y = -1; + calibrated = false; + x_es_val.clear(); + y_es_val.clear(); + + joyAxisX->setAxisCenterCal(center_calibrated_x); + joyAxisY->setAxisCenterCal(center_calibrated_y); + joyAxisX->setDeadZone(GlobalVariables::JoyAxis::AXISDEADZONE); + joyAxisY->setDeadZone(GlobalVariables::JoyAxis::AXISDEADZONE); + joyAxisX->setAxisMinCal(min_axis_val_x); + joyAxisY->setAxisMinCal(min_axis_val_y); + joyAxisX->setAxisMaxCal(max_axis_val_x); + joyAxisY->setAxisMaxCal(max_axis_val_y); + joyAxisX->setMaxZoneValue(GlobalVariables::JoyAxis::AXISMAXZONE); + joyAxisY->setMaxZoneValue(GlobalVariables::JoyAxis::AXISMAXZONE); + stick->setDeadZone(GlobalVariables::JoyAxis::AXISDEADZONE); + stick->setMaxZone(GlobalVariables::JoyAxis::AXISMAXZONE); + calibrated = false; + stick->setCalibrationFlag(false); + stick->setCalibrationSummary(QString()); + ui->Informations->setText(QString()); + + ui->saveBtn->setEnabled(false); + ui->resetBtn->setEnabled(false); + update(); + ui->stickStatusBoxWidget->update(); +} + /** * @brief Creates quadratic field in a case, when max value is not equal to negative min value. It always chooses less value * @param max value for X - positive value @@ -165,17 +181,11 @@ void Calibration::resetSettings() */ void Calibration::setQuadraticZoneCalibrated(int &max_axis_val_x, int &min_axis_val_x, int &max_axis_val_y, int &min_axis_val_y) { - if(max_axis_val_x > abs(min_axis_val_x)) { - max_axis_val_x = abs(min_axis_val_x); - } else { - min_axis_val_x = -(max_axis_val_x); - } + if (max_axis_val_x > abs(min_axis_val_x)) max_axis_val_x = abs(min_axis_val_x); + else min_axis_val_x = -(max_axis_val_x); - if(max_axis_val_y > abs(min_axis_val_y)) { - max_axis_val_y = abs(min_axis_val_y); - } else { - min_axis_val_y = -(max_axis_val_y); - } + if (max_axis_val_y > abs(min_axis_val_y)) max_axis_val_y = abs(min_axis_val_y); + else min_axis_val_y = -(max_axis_val_y); } /** @@ -207,6 +217,7 @@ void Calibration::startCalibration() { case QMessageBox::Ok: confirmed = true; + ui->resetBtn->setEnabled(false); break; case QMessageBox::Cancel: @@ -216,7 +227,6 @@ void Calibration::startCalibration() default: confirmed = true; break; - } } @@ -226,47 +236,43 @@ void Calibration::startCalibration() stick->setCalibrationFlag(false); calibrated = false; - ui->steps->setText(trUtf8("Place the joystick in the center position.\n\nIt's the part, where often you don't have to move. Just skip it in such situation.")); - update(); + ui->steps->setText(trUtf8("Place the joystick in the center position.\n\nIt's the part, where often you don't have to move. Just skip it in such situation.")); + this->setWindowTitle(trUtf8("Calibrating center")); + ui->startButton->setText(trUtf8("Start second step")); + update(); - this->setWindowTitle(trUtf8("Calibrating center")); - ui->startButton->setText(trUtf8("Start second step")); - update(); + for (int i = 0; i < x_es_val.count(); i++) + sumX += x_es_val.values().at(i); - for (int i = 0; i < x_es_val.count(); i++) { - sumX += x_es_val.values().at(i); - } + for (int i = 0; i < y_es_val.count(); i++) + sumY += y_es_val.values().at(i); - for (int i = 0; i < y_es_val.count(); i++) { - sumY += y_es_val.values().at(i); - } - if ((sumX != 0) && (sumY != 0)) { - center_calibrated_x = sumX / x_es_val.count(); - center_calibrated_y = sumY / y_es_val.count(); - } else { - center_calibrated_x = 0; - center_calibrated_y = 0; - } + if ((sumX != 0) && (sumY != 0)) { - // deadzone_calibrated_x = calibratedDeadZone(center_calibrated_x, joyAxisX->getDeadZone()); - // deadzone_calibrated_y = calibratedDeadZone(center_calibrated_y, joyAxisY->getDeadZone()); + center_calibrated_x = sumX / x_es_val.count(); + center_calibrated_y = sumY / y_es_val.count(); - QString text = QString(); - text.append(trUtf8("\n\nCenter X: %1").arg(center_calibrated_x)); - text.append(trUtf8("\nCenter Y: %1").arg(center_calibrated_y)); - ui->Informations->setText(text); - this->text = text; + } else { - x_es_val.clear(); - y_es_val.clear(); - sumX = 0; - sumY = 0; - update(); + center_calibrated_x = 0; + center_calibrated_y = 0; + } - disconnect(ui->startButton, &QPushButton::clicked, this, nullptr); - connect(ui->startButton, &QPushButton::clicked, this, &Calibration::startSecondStep); + QString text = QString(); + text.append(trUtf8("\n\nCenter X: %1").arg(center_calibrated_x)); + text.append(trUtf8("\nCenter Y: %1").arg(center_calibrated_y)); + ui->Informations->setText(text); + this->text = text; + + x_es_val.clear(); + y_es_val.clear(); + sumX = 0; + sumY = 0; + update(); + disconnect(ui->startButton, &QPushButton::clicked, this, nullptr); + connect(ui->startButton, &QPushButton::clicked, this, &Calibration::startSecondStep); } } @@ -281,8 +287,6 @@ void Calibration::startSecondStep() if ((joyAxisX != nullptr) && (joyAxisY != nullptr)) { ui->steps->setText(trUtf8("\nPlace the joystick in the top-left corner many times")); - update(); - this->setWindowTitle(trUtf8("Calibrating position")); update(); @@ -290,13 +294,12 @@ void Calibration::startSecondStep() qDebug() << "Y_ES_VAL: " << y_es_val.count(QString("-")); - if (enoughProb(x_es_val.count(QString("-")), y_es_val.count(QString("-")))) { + if (enoughProb(x_es_val.count(QString("-")), y_es_val.count(QString("-")), QString("-"))) { int min_x = 0; int min_y = 0; for (int i = 0; i < x_es_val.count(QString("-")); i++) { - // if ((abs(x_es_val.values(QString("-")).at(i)) > deadzone_calibrated_x)) if (i > 0) { if (x_es_val.values(QString("-")).at(i) < x_es_val.values(QString("-")).at(i-1)) { min_x = x_es_val.values(QString("-")).at(i); @@ -307,7 +310,6 @@ void Calibration::startSecondStep() } for (int i = 0; i < y_es_val.count(QString("-")); i++) { - // if ((abs(y_es_val.values(QString("-")).at(i)) > deadzone_calibrated_y)) if (i > 0) { if (y_es_val.values(QString("-")).at(i) < y_es_val.values(QString("-")).at(i-1)) { min_y = y_es_val.values(QString("-")).at(i); @@ -325,16 +327,17 @@ void Calibration::startSecondStep() text.append(trUtf8("\nY: %1").arg(min_axis_val_y)); ui->Informations->setText(text); this->text = text; - update(); x_es_val.clear(); y_es_val.clear(); sumX = 0; sumY = 0; + update(); disconnect(ui->startButton, &QPushButton::clicked, this, nullptr); connect(ui->startButton, &QPushButton::clicked, this, &Calibration::startLastStep); - } + + } } } @@ -349,19 +352,16 @@ void Calibration::startLastStep() if ((joyAxisX != nullptr) && (joyAxisY != nullptr)) { ui->steps->setText(trUtf8("\nPlace the joystick in the bottom-right corner")); - update(); - this->setWindowTitle(trUtf8("Calibrating position")); ui->startButton->setText(trUtf8("Start final step")); update(); - if (enoughProb(x_es_val.count(QString("+")), y_es_val.count(QString("+")))) { + if (enoughProb(x_es_val.count(QString("+")), y_es_val.count(QString("+")), QString("+"))) { int max_x = 0; int max_y = 0; for (int i = 0; i < x_es_val.count(QString("+")); i++) { - // if ((x_es_val.values(QString("+")).at(i) > deadzone_calibrated_x)) if (i > 0) { if (x_es_val.values(QString("+")).at(i) > x_es_val.values(QString("+")).at(i-1)) { max_x = x_es_val.values(QString("+")).at(i); @@ -372,7 +372,6 @@ void Calibration::startLastStep() } for (int i = 0; i < y_es_val.count(QString("+")); i++) { - // if ((y_es_val.values(QString("+")).at(i) > deadzone_calibrated_y)) if (i > 0) { if (y_es_val.values(QString("+")).at(i) > y_es_val.values(QString("+")).at(i-1)) { max_y = y_es_val.values(QString("+")).at(i); @@ -405,11 +404,21 @@ void Calibration::startLastStep() ui->Informations->setText(text3); this->text = text3; + if (stick != nullptr) + { + ui->saveBtn->setEnabled(true); + } + ui->steps->setText(trUtf8("\n---Calibration done!---\n")); ui->startButton->setText(trUtf8("Start calibration")); this->setWindowTitle(trUtf8("Calibration")); update(); + x_es_val.clear(); + y_es_val.clear(); + sumX = 0; + sumY = 0; + disconnect(ui->startButton, &QPushButton::clicked, this, nullptr); connect(ui->startButton, &QPushButton::clicked, this, &Calibration::startCalibration); @@ -425,7 +434,6 @@ void Calibration::saveSettings() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((joyAxisX != nullptr) && (joyAxisY != nullptr)) { joyAxisX->setAxisCenterCal(center_calibrated_x); @@ -444,37 +452,39 @@ void Calibration::saveSettings() stick->setCalibrationFlag(true); stick->setCalibrationSummary(this->text); + ui->resetBtn->setEnabled(true); + ui->saveBtn->setEnabled(false); + ui->stickStatusBoxWidget->update(); update(); QMessageBox::information(this, trUtf8("Save"), trUtf8("Calibration values have been saved")); } } -/** - * @brief Gets settings from gtk-jstest profile - * @return text of settings from found profile - */ -const QString Calibration::getSetfromGtkJstest() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); - - return QString(); -} - /** * @brief checks whether axes were moved at least 5 times in both ways. If not, it shows a message * @param counts of ax X moving values * @param counts of ax Y moving values * @return if counts of values for X and Y axes were greater than 4 */ -bool Calibration::enoughProb(int x_count, int y_count) +bool Calibration::enoughProb(int x_count, int y_count, QString character) { qInstallMessageHandler(MessageHandler::myMessageOutput); bool enough = true; - if (x_count < 5) { enough = false; QMessageBox::information(this, trUtf8("Dead zone calibration"), trUtf8("You must move X axis to the right at least five times! Keep moving!")); } - else if (y_count < 5) { enough = false; QMessageBox::information(this, trUtf8("Dead zone calibration"), trUtf8("You must move X axis to the left at least five times! Keep moving!")); } + if ((x_count < 5) || (y_count < 5)) { + if (character == QString("-")) + { + enough = false; + QMessageBox::information(this, trUtf8("Dead zone calibration"), trUtf8("You have to move axes to the top-left corner at least five times.")); + } + else if (character == QString("+")) + { + enough = false; + QMessageBox::information(this, trUtf8("Dead zone calibration"), trUtf8("You have to move axes to the bottom-right corner at least five times.")); + } + } return enough; } @@ -533,9 +543,14 @@ void Calibration::checkY(int value) qInstallMessageHandler(MessageHandler::myMessageOutput); if (value > 0) { - if (y_es_val.count(QString("+")) <= 100) y_es_val.insert(QString("+"), value); + + if (y_es_val.count(QString("+")) <= 100) + y_es_val.insert(QString("+"), value); + } else if (value < 0) { - if (y_es_val.count(QString("-")) <= 100) y_es_val.insert(QString("-"), value); + + if (y_es_val.count(QString("-")) <= 100) + y_es_val.insert(QString("-"), value); } axisBarY->setValue(value); @@ -589,44 +604,74 @@ void Calibration::updateAxesBox() } /** - * @brief Tries to load profile for gtk-jstest application + * @brief Initializes widget for moving axes (animations) and changes storing data for variables * @return nothing */ -void Calibration::loadSetFromJstest() +void Calibration::createAxesConnection() { qInstallMessageHandler(MessageHandler::myMessageOutput); -} + if (ui->saveBtn->isEnabled()) { -/** - * @brief Tries to find profile for gtk-jstest application - * @return if gtk-jstest profile for calibration was found - */ -bool Calibration::ifGtkJstestRunToday() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); + QMessageBox msgBox; + msgBox.setText(trUtf8("Do you want to save calibration of current axis?")); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); - return true; -} + switch(msgBox.exec()) + { + case QMessageBox::Yes: + saveSettings(); + break; -/** - * @brief Initializes widget for moving axes (animations) and changes storing data for variables - * @return nothing - */ -void Calibration::createAxesConnection() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); + case QMessageBox::No: + break; + + default: + break; + + } + } + + while(!ui->progressBarsLayout->isEmpty()) { + + QLayout *hb = ui->progressBarsLayout->takeAt(0)->layout(); - qDeleteAll(ui->axesWidget->findChildren()); + while(!hb->isEmpty()) { + + QWidget *w = hb->takeAt(0)->widget(); + delete w; + } + + delete hb; + } + + update(); QPointer controlstick = joysticks->value(ui->controllersBox->currentIndex())->getSetJoystick(0)->getJoyStick(ui->axesBox->currentIndex()); this->stick = controlstick.data(); + + center_calibrated_x = controlstick->getAxisX()->getAxisCenterCal(); + center_calibrated_y = controlstick->getAxisY()->getAxisCenterCal(); + deadzone_calibrated_x = controlstick->getAxisX()->getDeadZone(); + deadzone_calibrated_y = controlstick->getAxisY()->getDeadZone(); + min_axis_val_x = controlstick->getAxisX()->getAxisMinCal(); + min_axis_val_y = controlstick->getAxisY()->getAxisMinCal(); + max_axis_val_x = controlstick->getAxisX()->getAxisMaxCal(); + max_axis_val_y = controlstick->getAxisY()->getAxisMaxCal(); + calibrated = controlstick->wasCalibrated(); + text = controlstick->getCalibrationSummary(); + + if (calibrated) ui->resetBtn->setEnabled(true); + else ui->resetBtn->setEnabled(false); + controlstick.data()->getModifierButton()->establishPropertyUpdatedConnections(); helper.moveToThread(controlstick.data()->thread()); ui->stickStatusBoxWidget->setStick(controlstick.data()); ui->stickStatusBoxWidget->update(); setProgressBars(controlstick.data()); + update(); + if (controlstick.isNull()) controlstick.clear(); } @@ -652,24 +697,28 @@ void Calibration::setProgressBars(JoyControlStick* controlstick) QLabel *axisLabel = new QLabel(); QLabel *axisLabel2 = new QLabel(); + axisLabel->setText(trUtf8("Axis %1").arg(joyAxisX->getRealJoyIndex())); axisLabel2->setText(trUtf8("Axis %1").arg(joyAxisY->getRealJoyIndex())); + axisBarX = new QProgressBar(); axisBarY = new QProgressBar(); - axisBarX->setMinimum(JoyAxis::AXISMIN); - axisBarX->setMaximum(JoyAxis::AXISMAX); + axisBarX->setMinimum(GlobalVariables::JoyAxis::AXISMIN); + axisBarX->setMaximum(GlobalVariables::JoyAxis::AXISMAX); axisBarX->setFormat("%v"); axisBarX->setValue(joyAxisX->getCurrentRawValue()); - axisBarY->setMinimum(JoyAxis::AXISMIN); - axisBarY->setMaximum(JoyAxis::AXISMAX); + axisBarY->setMinimum(GlobalVariables::JoyAxis::AXISMIN); + axisBarY->setMaximum(GlobalVariables::JoyAxis::AXISMAX); axisBarY->setFormat("%v"); axisBarY->setValue(joyAxisY->getCurrentRawValue()); + hbox->addWidget(axisLabel); hbox->addWidget(axisBarX); hbox->addSpacing(10); hbox2->addWidget(axisLabel2); hbox2->addWidget(axisBarY); hbox2->addSpacing(10); + ui->progressBarsLayout->addLayout(hbox); ui->progressBarsLayout->addLayout(hbox2); @@ -710,22 +759,25 @@ void Calibration::setProgressBars(int inputDevNr, int setJoyNr, int stickNr) QLabel *axisLabel2 = new QLabel(); axisLabel->setText(trUtf8("Axis %1").arg(joyAxisX->getRealJoyIndex())); axisLabel2->setText(trUtf8("Axis %1").arg(joyAxisY->getRealJoyIndex())); + axisBarX = new QProgressBar(); axisBarY = new QProgressBar(); - axisBarX->setMinimum(JoyAxis::AXISMIN); - axisBarX->setMaximum(JoyAxis::AXISMAX); + axisBarX->setMinimum(GlobalVariables::JoyAxis::AXISMIN); + axisBarX->setMaximum(GlobalVariables::JoyAxis::AXISMAX); axisBarX->setFormat("%v"); axisBarX->setValue(joyAxisX->getCurrentRawValue()); - axisBarY->setMinimum(JoyAxis::AXISMIN); - axisBarY->setMaximum(JoyAxis::AXISMAX); + axisBarY->setMinimum(GlobalVariables::JoyAxis::AXISMIN); + axisBarY->setMaximum(GlobalVariables::JoyAxis::AXISMAX); axisBarY->setFormat("%v"); axisBarY->setValue(joyAxisY->getCurrentRawValue()); + hbox->addWidget(axisLabel); hbox->addWidget(axisBarX); hbox->addSpacing(10); hbox2->addWidget(axisLabel2); hbox2->addWidget(axisBarY); hbox2->addSpacing(10); + ui->progressBarsLayout->addLayout(hbox); ui->progressBarsLayout->addLayout(hbox2); diff --git a/src/calibration.h b/src/calibration.h old mode 100644 new mode 100755 index c4d8b229e..584325d5b --- a/src/calibration.h +++ b/src/calibration.h @@ -26,16 +26,14 @@ class Calibration : public QWidget ~Calibration(); int chooseMinMax(QString min_max_sign, QList ax_values); - bool ifGtkJstestRunToday(); - const QString getSetfromGtkJstest(); void setQuadraticZoneCalibrated(int &max_axis_val_x, int &min_axis_val_x, int &max_axis_val_y, int &min_axis_val_y); - protected: void setProgressBars(int inputDevNr, int setJoyNr, int stickNr); void setProgressBars(JoyControlStick* controlstick); void updateAxesBox(); - bool enoughProb(int x_count, int y_count); + void restoreCalValues(); + bool enoughProb(int x_count, int y_count, QString character); int calibratedDeadZone(int center, int deadzone); @@ -69,13 +67,12 @@ public slots: void checkY(int value); void createAxesConnection(); void setController(QString controllerName); - void loadSetFromJstest(); void startCalibration(); void startSecondStep(); void startLastStep(); protected slots: - void resetSettings(); + void resetSettings(bool silentReset, bool clicked = false); signals: void deadZoneChanged(int value); diff --git a/src/calibration.ui b/src/calibration.ui old mode 100644 new mode 100755 index f6e5efa6f..85c76ecfb --- a/src/calibration.ui +++ b/src/calibration.ui @@ -150,13 +150,6 @@ - - - - Use settings from jstest-gtk - - - diff --git a/src/capturedwindowinfodialog.cpp b/src/capturedwindowinfodialog.cpp old mode 100644 new mode 100755 index 680fd56af..a0fa19d2b --- a/src/capturedwindowinfodialog.cpp +++ b/src/capturedwindowinfodialog.cpp @@ -60,8 +60,10 @@ CapturedWindowInfoDialog::CapturedWindowInfoDialog(long window, QWidget *parent) ui->winClassLabel->setVisible(false); ui->winClassHeadLabel->setVisible(false); #elif defined(Q_OS_UNIX) + winClass = info->getWindowClass(static_cast(window)); ui->winClassLabel->setText(winClass); + if (winClass.isEmpty()) { ui->winClassCheckBox->setEnabled(false); @@ -84,6 +86,7 @@ CapturedWindowInfoDialog::CapturedWindowInfoDialog(long window, QWidget *parent) #endif ui->winTitleLabel->setText(winName); + if (winName.isEmpty()) { ui->winTitleCheckBox->setEnabled(false); @@ -114,13 +117,16 @@ CapturedWindowInfoDialog::CapturedWindowInfoDialog(long window, QWidget *parent) #elif defined(Q_OS_UNIX) int pid = info->getApplicationPid(static_cast(window)); + if (pid > 0) { QString exepath = X11Extras::getInstance()->getApplicationLocation(pid); + if (!exepath.isEmpty()) { ui->winPathLabel->setText(exepath); winPath = exepath; + if (!setRadioDefault) { ui->winTitleCheckBox->setChecked(true); @@ -162,27 +168,17 @@ void CapturedWindowInfoDialog::populateOption() qInstallMessageHandler(MessageHandler::myMessageOutput); if (ui->winClassCheckBox->isChecked()) - { selectedMatch = selectedMatch | WindowClass; - } if (ui->winTitleCheckBox->isChecked()) - { selectedMatch = selectedMatch | WindowName; - } if (ui->winPathCheckBox->isChecked()) { selectedMatch = selectedMatch | WindowPath; - if (ui->winPathChoiceComboBox->currentIndex() == 0) - { - fullWinPath = true; - } - else - { - fullWinPath = false; - } + if (ui->winPathChoiceComboBox->currentIndex() == 0) fullWinPath = true; + else fullWinPath = false; } } diff --git a/src/capturedwindowinfodialog.h b/src/capturedwindowinfodialog.h old mode 100644 new mode 100755 diff --git a/src/capturedwindowinfodialog.ui b/src/capturedwindowinfodialog.ui old mode 100644 new mode 100755 diff --git a/src/commandlineutility.cpp b/src/commandlineutility.cpp old mode 100644 new mode 100755 index 918a22433..2120d28a7 --- a/src/commandlineutility.cpp +++ b/src/commandlineutility.cpp @@ -31,7 +31,6 @@ QStringList CommandLineUtility::eventGeneratorsList = EventHandlerFactory::buildEventGeneratorList(); - CommandLineUtility::CommandLineUtility(QObject *parent) : QObject(parent) { @@ -58,6 +57,7 @@ CommandLineUtility::CommandLineUtility(QObject *parent) : eventGenerator = EventHandlerFactory::fallBackIdentifier(); } + void CommandLineUtility::parseArguments(QCommandLineParser* parser) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -86,57 +86,11 @@ void CommandLineUtility::parseArguments(QCommandLineParser* parser) { } else if (parser->isSet("profile")) { - - QFileInfo fileInfo(parser->value("profile")); - if (fileInfo.exists()) - { - if ((fileInfo.suffix() != "amgp") && (fileInfo.suffix() != "xml")) - { - setErrorMessage(QObject::trUtf8("Profile location %1 is not an XML file.").arg(parser->value("profile"))); - } - else - { - QString tempProfileLocation = fileInfo.absoluteFilePath(); - ControllerOptionsInfo tempInfo = getControllerOptionsList().at(currentListsIndex); - tempInfo.setProfileLocation(tempProfileLocation); - controllerOptionsList.replace(currentListsIndex, tempInfo); - } - } - else - { - setErrorMessage(QObject::trUtf8("Profile location %1 does not exist.").arg(parser->value("profile"))); - } + parseArgsProfile(parser); } else if (parser->isSet("profile-controller")) { - bool validNumber = false; - int tempNumber = parser->value("profile-controller").toInt(&validNumber); - if (validNumber) - { - if (controllerNumber == 0) - { - controllerNumber = tempNumber; - } - - ControllerOptionsInfo tempInfo = getControllerOptionsList().at(currentListsIndex); - tempInfo.setControllerNumber(tempNumber); - controllerOptionsList.replace(currentListsIndex, tempInfo); - } - else if (!parser->value("profile-controller").isEmpty()) - { - if (controllerIDString.isEmpty()) - { - controllerIDString = parser->value("profile-controller"); - } - - ControllerOptionsInfo tempInfo = getControllerOptionsList().at(currentListsIndex); - tempInfo.setControllerID(parser->value("profile-controller")); - controllerOptionsList.replace(currentListsIndex, tempInfo); - } - else - { - setErrorMessage(QObject::trUtf8("Controller identifier is not a valid value.")); - } + parseArgsPrControle(parser); } else if (parser->isSet("hidden")) { @@ -144,154 +98,35 @@ void CommandLineUtility::parseArguments(QCommandLineParser* parser) { } else if (parser->isSet("unload")) { - ControllerOptionsInfo tempInfo = getControllerOptionsList().at(currentListsIndex); - tempInfo.setProfileLocation(""); - tempInfo.setUnloadRequest(true); - controllerOptionsList.replace(currentListsIndex, tempInfo); - - QStringList values = QStringList() << parser->values("unload"); - QListIterator unloaded_profile(values); - QString temp = QString(); - - if (unloaded_profile.hasNext()) - { - - temp = unloaded_profile.next(); - - // A value has been passed. Attempt - // to validate the value. - bool validNumber = false; - int tempNumber = temp.toInt(&validNumber); - if (validNumber) - { - controllerNumber = tempNumber; - tempInfo = getControllerOptionsList().at(currentListsIndex); - tempInfo.setControllerNumber(controllerNumber); - controllerOptionsList.replace(currentListsIndex, tempInfo); - } - else if (!temp.isEmpty()) - { - controllerIDString = temp; - tempInfo = getControllerOptionsList().at(currentListsIndex); - tempInfo.setControllerID(controllerIDString); - controllerOptionsList.replace(currentListsIndex, tempInfo); - } - else - { - setErrorMessage(QObject::trUtf8("Controller identifier is not a valid value.")); - } - - } - else - { - unloadProfile = true; - profileLocation = ""; - } + parseArgsUnload(parser); } else if (parser->isSet("startSet")) { - QStringList values = QStringList() << parser->values("startSet"); - QListIterator unloaded_profile(values); - QString temp = QString(); - - if (unloaded_profile.hasNext()) - { - temp = unloaded_profile.next(); - - bool validNumber = false; - int tempNumber = temp.toInt(&validNumber); - if (validNumber && (tempNumber >= 1) && (tempNumber <= 8)) - { - startSetNumber = tempNumber; - ControllerOptionsInfo tempInfo = getControllerOptionsList().at(currentListsIndex); - tempInfo.setStartSetNumber(startSetNumber); - controllerOptionsList.replace(currentListsIndex, tempInfo); - } - else if (validNumber) - { - setErrorMessage(QObject::trUtf8("An invalid set number '%1' was specified.").arg(tempNumber)); - } - - if (unloaded_profile.hasNext()) - { - temp = unloaded_profile.next(); - - if (validNumber) - { - controllerNumber = tempNumber; - ControllerOptionsInfo tempInfo = getControllerOptionsList().at(currentListsIndex); - tempInfo.setControllerNumber(controllerNumber); - controllerOptionsList.replace(currentListsIndex, tempInfo); - } - else if (!temp.isEmpty()) - { - controllerIDString = temp; - ControllerOptionsInfo tempInfo = getControllerOptionsList().at(currentListsIndex); - tempInfo.setControllerID(controllerIDString); - controllerOptionsList.replace(currentListsIndex, tempInfo); - } - else - { - setErrorMessage(QObject::trUtf8("Controller identifier '%s'' is not a valid value.").arg(temp)); - } - } - } - else - { - setErrorMessage(QObject::trUtf8("No set number was specified.")); - } + parseArgsStartSet(parser); } else if (parser->isSet("next")) { currentListsIndex++; - ControllerOptionsInfo tempInfo; controllerOptionsList.append(tempInfo); - } - -#ifdef USE_SDL_2 + #ifdef USE_SDL_2 else if (parser->isSet("list")) { listControllers = true; } else if (parser->isSet("map")) { - QString temp = parser->value("map"); - - if (!temp.isEmpty()) { - - bool validNumber = false; - int tempNumber = temp.toInt(&validNumber); - if (validNumber) - { - controllerNumber = tempNumber; - mappingController = true; - } - else if (!temp.isEmpty()) - { - controllerIDString = temp; - mappingController = true; - } - else - { - setErrorMessage(QObject::trUtf8("Controller identifier is not a valid value.")); - } - } - else - { - setErrorMessage(QObject::trUtf8("No controller was specified.")); - } - + parseArgsMap(parser); } -#endif + #endif -#ifdef Q_OS_UNIX + #ifdef Q_OS_UNIX else if (parser->isSet("daemon")) { daemonMode = true; } - #ifdef WITH_X11 + #ifdef WITH_X11 else if (parser->isSet("display")) { if (!parser->value("display").isEmpty()) @@ -303,55 +138,39 @@ void CommandLineUtility::parseArguments(QCommandLineParser* parser) { setErrorMessage(QObject::trUtf8("No display string was specified.")); } } - #endif -#endif + #endif + #endif -#if (defined (Q_OS_UNIX) && defined(WITH_UINPUT) && defined(WITH_XTEST)) \ + #if (defined (Q_OS_UNIX) && defined(WITH_UINPUT) && defined(WITH_XTEST)) \ || (defined(Q_OS_WIN) && defined(WITH_VMULTI)) + else if (parser->isSet("eventgen")) { - QString temp = parser->value("eventgen"); + QString eventGenText = parser->value("eventgen"); - - if (!temp.isEmpty()) { - - if (!eventGeneratorsList.contains(temp)) - { - eventGenerator = ""; - setErrorMessage(QObject::trUtf8("An invalid event generator was specified.")); - } - else - { - eventGenerator = temp; - } + if (!eventGenText.isEmpty() && !eventGeneratorsList.contains(eventGenText)) + { + eventGenerator = ""; + setErrorMessage(QObject::trUtf8("An invalid event generator was specified.")); + } + else if (!eventGenText.isEmpty() && eventGeneratorsList.contains(eventGenText)) + { + eventGenerator = eventGenText; } else { setErrorMessage(QObject::trUtf8("No event generator string was specified.")); } } - -#endif - + #endif else if (parser->isSet("log-level")) { - QString temp = parser->value("log-level"); - if (temp == "debug") - { - currentLogLevel = Logger::LOG_DEBUG; - } - else if (temp == "info") - { - currentLogLevel = Logger::LOG_INFO; - } - else if (temp == "warn") - { - currentLogLevel = Logger::LOG_WARNING; - } - else if (temp == "error") - { - currentLogLevel = Logger::LOG_ERROR; - } + QString logLevelText = parser->value("log-level"); + + if (logLevelText == "debug") currentLogLevel = Logger::LOG_DEBUG; + else if (logLevelText == "info") currentLogLevel = Logger::LOG_INFO; + else if (logLevelText == "warn") currentLogLevel = Logger::LOG_WARNING; + else if (logLevelText == "error") currentLogLevel = Logger::LOG_ERROR; } else if (parser->isSet("log-file")) { @@ -369,6 +188,186 @@ void CommandLineUtility::parseArguments(QCommandLineParser* parser) { } } +void CommandLineUtility::parseArgsProfile(QCommandLineParser* parser) +{ + QFileInfo profileFileInfo(parser->value("profile")); + + if (profileFileInfo.exists() && (profileFileInfo.suffix() != "amgp") && (profileFileInfo.suffix() != "xml")) + { + setErrorMessage(QObject::trUtf8("Profile location %1 is not an XML file.").arg(parser->value("profile"))); + } + else if (profileFileInfo.exists() && ((profileFileInfo.suffix() == "amgp") || (profileFileInfo.suffix() == "xml"))) + { + QString tempProfileLocation = profileFileInfo.absoluteFilePath(); + ControllerOptionsInfo tempInfo = getControllerOptionsList().at(currentListsIndex); + tempInfo.setProfileLocation(tempProfileLocation); + controllerOptionsList.replace(currentListsIndex, tempInfo); + } + else + { + setErrorMessage(QObject::trUtf8("Profile location %1 does not exist.").arg(parser->value("profile"))); + } +} + +void CommandLineUtility::parseArgsPrControle(QCommandLineParser* parser) +{ + bool validNumber = false; + int tempNumber = parser->value("profile-controller").toInt(&validNumber); + + if (validNumber) + { + if (controllerNumber == 0) controllerNumber = tempNumber; + + ControllerOptionsInfo tempInfo = getControllerOptionsList().at(currentListsIndex); + tempInfo.setControllerNumber(tempNumber); + controllerOptionsList.replace(currentListsIndex, tempInfo); + } + else if (!parser->value("profile-controller").isEmpty()) + { + if (controllerIDString.isEmpty()) controllerIDString = parser->value("profile-controller"); + + ControllerOptionsInfo tempInfo = getControllerOptionsList().at(currentListsIndex); + tempInfo.setControllerID(parser->value("profile-controller")); + controllerOptionsList.replace(currentListsIndex, tempInfo); + } + else + { + setErrorMessage(QObject::trUtf8("Controller identifier is not a valid value.")); + } +} + +void CommandLineUtility::parseArgsUnload(QCommandLineParser* parser) +{ + ControllerOptionsInfo gameControllerOptionInfo = getControllerOptionsList().at(currentListsIndex); + gameControllerOptionInfo.setProfileLocation(""); + gameControllerOptionInfo.setUnloadRequest(true); + controllerOptionsList.replace(currentListsIndex, gameControllerOptionInfo); + + QStringList parserVals = QStringList() << parser->values("unload"); + QListIterator profileForUnload(parserVals); + QString unloadedProfText = QString(); + + if (profileForUnload.hasNext()) + { + unloadedProfText = profileForUnload.next(); + + // A value has been passed. Attempt + // to validate the value. + + bool validNumber = false; + int tempNumber = unloadedProfText.toInt(&validNumber); + + if (validNumber) + { + controllerNumber = tempNumber; + gameControllerOptionInfo = getControllerOptionsList().at(currentListsIndex); + gameControllerOptionInfo.setControllerNumber(controllerNumber); + controllerOptionsList.replace(currentListsIndex, gameControllerOptionInfo); + } + else if (!unloadedProfText.isEmpty()) + { + controllerIDString = unloadedProfText; + gameControllerOptionInfo = getControllerOptionsList().at(currentListsIndex); + gameControllerOptionInfo.setControllerID(controllerIDString); + controllerOptionsList.replace(currentListsIndex, gameControllerOptionInfo); + } + else + { + setErrorMessage(QObject::trUtf8("Controller identifier is not a valid value.")); + } + } + else + { + unloadProfile = true; + profileLocation = ""; + } +} + +void CommandLineUtility::parseArgsStartSet(QCommandLineParser* parser) +{ + QStringList parserValues = QStringList() << parser->values("startSet"); + QListIterator profileForStartset(parserValues); + QString startSetText = QString(); + + if (profileForStartset.hasNext()) + { + startSetText = profileForStartset.next(); + + bool validNumber = false; + int tempNumber = startSetText.toInt(&validNumber); + + if (validNumber && (tempNumber >= 1) && (tempNumber <= 8)) + { + startSetNumber = tempNumber; + ControllerOptionsInfo tempInfo = getControllerOptionsList().at(currentListsIndex); + tempInfo.setStartSetNumber(startSetNumber); + controllerOptionsList.replace(currentListsIndex, tempInfo); + } + else if (validNumber) + { + setErrorMessage(QObject::trUtf8("An invalid set number '%1' was specified.").arg(tempNumber)); + } + + if (profileForStartset.hasNext()) + { + startSetText = profileForStartset.next(); + + if (validNumber) + { + controllerNumber = tempNumber; + ControllerOptionsInfo tempInfo = getControllerOptionsList().at(currentListsIndex); + tempInfo.setControllerNumber(controllerNumber); + controllerOptionsList.replace(currentListsIndex, tempInfo); + } + else if (!startSetText.isEmpty()) + { + controllerIDString = startSetText; + ControllerOptionsInfo tempInfo = getControllerOptionsList().at(currentListsIndex); + tempInfo.setControllerID(controllerIDString); + controllerOptionsList.replace(currentListsIndex, tempInfo); + } + else + { + setErrorMessage(QObject::trUtf8("Controller identifier '%s'' is not a valid value.").arg(startSetText)); + } + } + } + else + { + setErrorMessage(QObject::trUtf8("No set number was specified.")); + } +} + +void CommandLineUtility::parseArgsMap(QCommandLineParser* parser) +{ + QString mapOptionText = parser->value("map"); + + if (!mapOptionText.isEmpty()) { + + bool validNumber = false; + int tempNumber = mapOptionText.toInt(&validNumber); + + if (validNumber) + { + controllerNumber = tempNumber; + mappingController = true; + } + else if (!mapOptionText.isEmpty()) + { + controllerIDString = mapOptionText; + mappingController = true; + } + else + { + setErrorMessage(QObject::trUtf8("Controller identifier is not a valid value.")); + } + } + else + { + setErrorMessage(QObject::trUtf8("No controller was specified.")); + } +} + bool CommandLineUtility::isLaunchInTrayEnabled() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -539,11 +538,12 @@ bool CommandLineUtility::hasProfileInOptions() qInstallMessageHandler(MessageHandler::myMessageOutput); bool result = false; - QListIterator iter(getControllerOptionsList()); + while (iter.hasNext()) { ControllerOptionsInfo temp = iter.next(); + if (temp.hasProfile()) { result = true; diff --git a/src/commandlineutility.h b/src/commandlineutility.h old mode 100644 new mode 100755 index 89e893747..dedff6ea8 --- a/src/commandlineutility.h +++ b/src/commandlineutility.h @@ -188,6 +188,12 @@ class CommandLineUtility : public QObject QList controllerOptionsList; static QStringList eventGeneratorsList; + + void parseArgsProfile(QCommandLineParser* parser); + void parseArgsPrControle(QCommandLineParser* parser); + void parseArgsUnload(QCommandLineParser* parser); + void parseArgsStartSet(QCommandLineParser* parser); + void parseArgsMap(QCommandLineParser* parser); }; diff --git a/src/common.cpp b/src/common.cpp old mode 100644 new mode 100755 index e2f50f3da..f4ba7d299 --- a/src/common.cpp +++ b/src/common.cpp @@ -40,27 +40,25 @@ namespace PadderCommon if (!defaultProfileDir.isEmpty()) { QFileInfo dirinfo(defaultProfileDir); - if (dirinfo.isDir() && dirinfo.isReadable()) - { - lookupDir = defaultProfileDir; - } + + if (dirinfo.isDir() && dirinfo.isReadable()) lookupDir = defaultProfileDir; } if (lookupDir.isEmpty() && !lastProfileDir.isEmpty()) { QFileInfo dirinfo(lastProfileDir); - if (dirinfo.isDir() && dirinfo.isReadable()) - { - lookupDir = lastProfileDir; - } + + if (dirinfo.isDir() && dirinfo.isReadable()) lookupDir = lastProfileDir; } if (lookupDir.isEmpty()) { #ifdef Q_OS_WIN #ifdef WIN_PORTABLE_PACKAGE + QString portableProDir = QDir::currentPath().append("/profiles"); QFileInfo portableProDirInfo(portableProDir); + if (portableProDirInfo.isDir() && portableProDirInfo.isReadable()) { lookupDir = portableProDir; @@ -86,9 +84,8 @@ namespace PadderCommon QStringList list = QStringList(); - for (int a = 0; a < argc; ++a) { + for (int a = 0; a < argc; ++a) list << QString::fromLocal8Bit(argv[a]); - } return list; } @@ -101,17 +98,13 @@ namespace PadderCommon QStringList tempList = tempString.split(QRegExp("\""), QString::SkipEmptyParts); QStringList finalList = QStringList(); QStringListIterator iter(tempList); + while (iter.hasNext()) { QString temp = iter.next(); - if (inside) - { - finalList.append(temp); - } - else - { - finalList.append(temp.split(QRegExp("\\s+"), QString::SkipEmptyParts)); - } + + if (inside) finalList.append(temp); + else finalList.append(temp.split(QRegExp("\\s+"), QString::SkipEmptyParts)); inside = !inside; } diff --git a/src/common.h b/src/common.h old mode 100644 new mode 100755 diff --git a/src/config.h.in b/src/config.h.in old mode 100644 new mode 100755 diff --git a/src/dpadcontextmenu.cpp b/src/dpadcontextmenu.cpp old mode 100644 new mode 100755 index 0d8f449e7..b72675839 --- a/src/dpadcontextmenu.cpp +++ b/src/dpadcontextmenu.cpp @@ -48,141 +48,64 @@ void DPadContextMenu::buildMenu() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QAction *action = nullptr; - QActionGroup *presetGroup = new QActionGroup(this); + QAction* action = nullptr; int presetMode = 0; int currentPreset = getPresetIndex(); - action = this->addAction(trUtf8("Mouse (Normal)")); - action->setCheckable(true); - action->setChecked(currentPreset == presetMode+1); - action->setData(QVariant(presetMode)); - connect(action, &QAction::triggered, this, [this, action] { - setDPadPreset(action); - }); - presetGroup->addAction(action); + generateActionPreset(action, trUtf8("Mouse (Normal)"), currentPreset, presetMode, presetGroup); + generateActionPreset(action, trUtf8("Mouse (Inverted Horizontal)"), currentPreset, presetMode, presetGroup); + generateActionPreset(action, trUtf8("Mouse (Inverted Vertical)"), currentPreset, presetMode, presetGroup); + generateActionPreset(action, trUtf8("Mouse (Inverted Horizontal + Vertical)"), currentPreset, presetMode, presetGroup); + generateActionPreset(action, trUtf8("Arrows"), currentPreset, presetMode, presetGroup); + generateActionPreset(action, trUtf8("Keys: W | A | S | D"), currentPreset, presetMode, presetGroup); + generateActionPreset(action, trUtf8("NumPad"), currentPreset, presetMode, presetGroup); + generateActionPreset(action, trUtf8("None"), currentPreset, presetMode, presetGroup); - presetMode++; - action = this->addAction(trUtf8("Mouse (Inverted Horizontal)")); - action->setCheckable(true); - action->setChecked(currentPreset == presetMode+1); - action->setData(QVariant(presetMode)); - connect(action, &QAction::triggered, this, [this, action] { - setDPadPreset(action); - }); - presetGroup->addAction(action); + this->addSeparator(); - presetMode++; - action = this->addAction(trUtf8("Mouse (Inverted Vertical)")); - action->setCheckable(true); - action->setChecked(currentPreset == presetMode+1); - action->setData(QVariant(presetMode)); - connect(action, &QAction::triggered, this, [this, action] { - setDPadPreset(action); - }); - presetGroup->addAction(action); + QActionGroup *modesGroup = new QActionGroup(this); - presetMode++; - action = this->addAction(trUtf8("Mouse (Inverted Horizontal + Vertical)")); - action->setCheckable(true); - action->setChecked(currentPreset == presetMode+1); - action->setData(QVariant(presetMode)); - connect(action, &QAction::triggered, this, [this, action] { - setDPadPreset(action); - }); - presetGroup->addAction(action); + generateActionMode(modesGroup, action, trUtf8("Standard"), static_cast(dpad->getJoyMode()), static_cast(JoyDPad::StandardMode)); + generateActionMode(modesGroup, action, trUtf8("Eight Way"), static_cast(dpad->getJoyMode()), static_cast(JoyDPad::EightWayMode)); + generateActionMode(modesGroup, action, trUtf8("4 Way Cardinal"), static_cast(dpad->getJoyMode()), static_cast(JoyDPad::FourWayCardinal)); + generateActionMode(modesGroup, action, trUtf8("4 Way Diagonal"), static_cast(dpad->getJoyMode()), static_cast(JoyDPad::FourWayDiagonal)); - presetMode++; - action = this->addAction(trUtf8("Arrows")); - action->setCheckable(true); - action->setChecked(currentPreset == presetMode+1); - action->setData(QVariant(presetMode)); - connect(action, &QAction::triggered, this, [this, action] { - setDPadPreset(action); - }); - presetGroup->addAction(action); + this->addSeparator(); - presetMode++; - action = this->addAction(trUtf8("Keys: W | A | S | D")); - action->setCheckable(true); - action->setChecked(currentPreset == presetMode+1); - action->setData(QVariant(presetMode)); - connect(action, &QAction::triggered, this, [this, action] { - setDPadPreset(action); - }); - presetGroup->addAction(action); + action = this->addAction(trUtf8("Mouse Settings")); + action->setCheckable(false); - presetMode++; - action = this->addAction(trUtf8("NumPad")); - action->setCheckable(true); - action->setChecked(currentPreset == presetMode+1); - action->setData(QVariant(presetMode)); - connect(action, &QAction::triggered, this, [this, action] { - setDPadPreset(action); - }); - presetGroup->addAction(action); + connect(action, &QAction::triggered, this, &DPadContextMenu::openMouseSettingsDialog); +} - presetMode++; - action = this->addAction(trUtf8("None")); +void DPadContextMenu::generateActionPreset(QAction* action, QString actionText, int currentPreset, int& presetMode, QActionGroup* presetGroup) +{ + action = this->addAction(actionText); action->setCheckable(true); - action->setChecked(currentPreset == presetMode+1); + action->setChecked(currentPreset == presetMode + 1); action->setData(QVariant(presetMode)); - connect(action, &QAction::triggered, this, [this, action] { - setDPadPreset(action); - }); - presetGroup->addAction(action); - - this->addSeparator(); - QActionGroup *modesGroup = new QActionGroup(this); - int mode = static_cast(JoyDPad::StandardMode); - - action = this->addAction(trUtf8("Standard")); - action->setCheckable(true); - action->setChecked(dpad->getJoyMode() == JoyDPad::StandardMode); - action->setData(QVariant(mode)); connect(action, &QAction::triggered, this, [this, action] { - setDPadMode(action); + setDPadPreset(action); }); - modesGroup->addAction(action); - action = this->addAction(trUtf8("Eight Way")); - action->setCheckable(true); - action->setChecked(dpad->getJoyMode() == JoyDPad::EightWayMode); - mode = static_cast(JoyDPad::EightWayMode); - action->setData(QVariant(mode)); - connect(action, &QAction::triggered, this, [this, action] { - setDPadMode(action); - }); - modesGroup->addAction(action); + presetGroup->addAction(action); + presetMode++; +} - action = this->addAction(trUtf8("4 Way Cardinal")); +void DPadContextMenu::generateActionMode(QActionGroup *modesGroup, QAction* action, QString actionText, int currentPreset, int presetMode) +{ + action = this->addAction(actionText); action->setCheckable(true); - action->setChecked(dpad->getJoyMode() == JoyDPad::FourWayCardinal); - mode = static_cast(JoyDPad::FourWayCardinal); - action->setData(QVariant(mode)); - connect(action, &QAction::triggered, this, [this, action] { - setDPadMode(action); - }); - modesGroup->addAction(action); + action->setChecked(currentPreset == presetMode); + action->setData(QVariant(presetMode)); - action = this->addAction(trUtf8("4 Way Diagonal")); - action->setCheckable(true); - action->setChecked(dpad->getJoyMode() == JoyDPad::FourWayDiagonal); - mode = static_cast(JoyDPad::FourWayDiagonal); - action->setData(QVariant(mode)); connect(action, &QAction::triggered, this, [this, action] { setDPadMode(action); }); modesGroup->addAction(action); - - this->addSeparator(); - - action = this->addAction(trUtf8("Mouse Settings")); - action->setCheckable(false); - connect(action, &QAction::triggered, this, &DPadContextMenu::openMouseSettingsDialog); } /** @@ -215,115 +138,134 @@ void DPadContextMenu::setDPadPreset(QAction* action) JoyButtonSlot *downLeftButtonSlot = nullptr; JoyButtonSlot *downRightButtonSlot = nullptr; - if (item == 0) + + switch(item) { - PadderCommon::inputDaemonMutex.lock(); + case 0: - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - dpad->setJoyMode(JoyDPad::StandardMode); + PadderCommon::inputDaemonMutex.lock(); - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 1) - { - PadderCommon::inputDaemonMutex.lock(); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + dpad->setJoyMode(JoyDPad::StandardMode); - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - dpad->setJoyMode(JoyDPad::StandardMode); + PadderCommon::inputDaemonMutex.unlock(); - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 2) - { - PadderCommon::inputDaemonMutex.lock(); + break; - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - dpad->setJoyMode(JoyDPad::StandardMode); + case 1: - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 3) - { - PadderCommon::inputDaemonMutex.lock(); + PadderCommon::inputDaemonMutex.lock(); - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - dpad->setJoyMode(JoyDPad::StandardMode); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + dpad->setJoyMode(JoyDPad::StandardMode); - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 4) - { - PadderCommon::inputDaemonMutex.lock(); + PadderCommon::inputDaemonMutex.unlock(); - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Up), Qt::Key_Up, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Down), Qt::Key_Down, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Left), Qt::Key_Left, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Right), Qt::Key_Right, JoyButtonSlot::JoyKeyboard, this); - dpad->setJoyMode(JoyDPad::StandardMode); + break; - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 5) - { - PadderCommon::inputDaemonMutex.lock(); + case 2: - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_W), Qt::Key_W, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_S), Qt::Key_S, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_A), Qt::Key_A, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_D), Qt::Key_D, JoyButtonSlot::JoyKeyboard, this); - dpad->setJoyMode(JoyDPad::StandardMode); + PadderCommon::inputDaemonMutex.lock(); - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 6) - { - PadderCommon::inputDaemonMutex.lock(); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + dpad->setJoyMode(JoyDPad::StandardMode); - if ((dpad->getJoyMode() == JoyDPad::StandardMode) || - (dpad->getJoyMode() == JoyDPad::FourWayCardinal)) - { - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); - } - else if (dpad->getJoyMode() == JoyDPad::EightWayMode) - { - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); - - upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); - upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); - downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); - downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); - } - else if (dpad->getJoyMode() == JoyDPad::FourWayDiagonal) - { - upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); - upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); - downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); - downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); - } + PadderCommon::inputDaemonMutex.unlock(); - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 7) - { - QMetaObject::invokeMethod(&helper, "clearButtonsSlotsEventReset", Qt::BlockingQueuedConnection); + break; + + case 3: + + PadderCommon::inputDaemonMutex.lock(); + + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + dpad->setJoyMode(JoyDPad::StandardMode); + + PadderCommon::inputDaemonMutex.unlock(); + + break; + + case 4: + + PadderCommon::inputDaemonMutex.lock(); + + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Up), Qt::Key_Up, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Down), Qt::Key_Down, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Left), Qt::Key_Left, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Right), Qt::Key_Right, JoyButtonSlot::JoyKeyboard, this); + dpad->setJoyMode(JoyDPad::StandardMode); + + PadderCommon::inputDaemonMutex.unlock(); + + break; + + case 5: + + PadderCommon::inputDaemonMutex.lock(); + + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_W), Qt::Key_W, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_S), Qt::Key_S, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_A), Qt::Key_A, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_D), Qt::Key_D, JoyButtonSlot::JoyKeyboard, this); + dpad->setJoyMode(JoyDPad::StandardMode); + + PadderCommon::inputDaemonMutex.unlock(); + + break; + + case 6: + + PadderCommon::inputDaemonMutex.lock(); + + if ((dpad->getJoyMode() == JoyDPad::StandardMode) || + (dpad->getJoyMode() == JoyDPad::FourWayCardinal)) + { + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); + } + else if (dpad->getJoyMode() == JoyDPad::EightWayMode) + { + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); + + upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); + upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); + downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); + downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); + } + else if (dpad->getJoyMode() == JoyDPad::FourWayDiagonal) + { + upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); + upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); + downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); + downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); + } + + PadderCommon::inputDaemonMutex.unlock(); + + break; + + case 7: + + QMetaObject::invokeMethod(&helper, "clearButtonsSlotsEventReset", Qt::BlockingQueuedConnection); + + break; } QHash tempHash; diff --git a/src/dpadcontextmenu.h b/src/dpadcontextmenu.h old mode 100644 new mode 100755 index 015fc81c5..55178a2de --- a/src/dpadcontextmenu.h +++ b/src/dpadcontextmenu.h @@ -46,6 +46,9 @@ private slots: JoyDPad *dpad; DPadContextMenuHelper helper; + + void generateActionPreset(QAction* action, QString actionText, int currentPreset, int& presetMode, QActionGroup* presetGroup); + void generateActionMode(QActionGroup *modesGroup, QAction* action, QString actionText, int currentPreset, int presetMode); }; #endif // DPADCONTEXTMENU_H diff --git a/src/dpadeditdialog.cpp b/src/dpadeditdialog.cpp old mode 100644 new mode 100755 index ce093bb61..fcf1b7076 --- a/src/dpadeditdialog.cpp +++ b/src/dpadeditdialog.cpp @@ -50,21 +50,25 @@ DPadEditDialog::DPadEditDialog(JoyDPad *dpad, QWidget *parent) : updateWindowTitleDPadName(); - if (dpad->getJoyMode() == JoyDPad::StandardMode) - { - ui->joyModeComboBox->setCurrentIndex(0); - } - else if (dpad->getJoyMode() == JoyDPad::EightWayMode) - { - ui->joyModeComboBox->setCurrentIndex(1); - } - else if (dpad->getJoyMode() == JoyDPad::FourWayCardinal) - { - ui->joyModeComboBox->setCurrentIndex(2); - } - else if (dpad->getJoyMode() == JoyDPad::FourWayDiagonal) + + switch(dpad->getJoyMode()) { - ui->joyModeComboBox->setCurrentIndex(3); + case JoyDPad::StandardMode: + ui->joyModeComboBox->setCurrentIndex(0); + break; + + case JoyDPad::EightWayMode: + ui->joyModeComboBox->setCurrentIndex(1); + break; + + case JoyDPad::FourWayCardinal: + ui->joyModeComboBox->setCurrentIndex(2); + break; + + case JoyDPad::FourWayDiagonal: + ui->joyModeComboBox->setCurrentIndex(3); + break; + } selectCurrentPreset(); @@ -72,7 +76,7 @@ DPadEditDialog::DPadEditDialog(JoyDPad *dpad, QWidget *parent) : ui->dpadNameLineEdit->setText(dpad->getDpadName()); int dpadDelay = dpad->getDPadDelay(); - ui->dpadDelaySlider->setValue(static_cast(dpadDelay * .1)); + ui->dpadDelaySlider->setValue(dpadDelay * .1); ui->dpadDelayDoubleSpinBox->setValue(dpadDelay * .001); PadderCommon::inputDaemonMutex.unlock(); @@ -109,123 +113,138 @@ void DPadEditDialog::implementPresets(int index) JoyButtonSlot *downLeftButtonSlot = nullptr; JoyButtonSlot *downRightButtonSlot = nullptr; - if (index == 1) + switch(index) { - PadderCommon::inputDaemonMutex.lock(); + case 1: + PadderCommon::inputDaemonMutex.lock(); - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - PadderCommon::inputDaemonMutex.unlock(); + PadderCommon::inputDaemonMutex.unlock(); - ui->joyModeComboBox->setCurrentIndex(0); - } - else if (index == 2) - { - PadderCommon::inputDaemonMutex.lock(); + ui->joyModeComboBox->setCurrentIndex(0); + break; - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + case 2: - PadderCommon::inputDaemonMutex.unlock(); + PadderCommon::inputDaemonMutex.lock(); - ui->joyModeComboBox->setCurrentIndex(0); - } - else if (index == 3) - { - PadderCommon::inputDaemonMutex.lock(); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + PadderCommon::inputDaemonMutex.unlock(); - PadderCommon::inputDaemonMutex.unlock(); + ui->joyModeComboBox->setCurrentIndex(0); - ui->joyModeComboBox->setCurrentIndex(0); - } - else if (index == 4) - { - PadderCommon::inputDaemonMutex.lock(); + break; - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + case 3: - PadderCommon::inputDaemonMutex.unlock(); + PadderCommon::inputDaemonMutex.lock(); - ui->joyModeComboBox->setCurrentIndex(0); - } - else if (index == 5) - { - PadderCommon::inputDaemonMutex.lock(); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Up), Qt::Key_Up, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Down), Qt::Key_Down, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Left), Qt::Key_Left, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Right), Qt::Key_Right, JoyButtonSlot::JoyKeyboard, this); + PadderCommon::inputDaemonMutex.unlock(); - PadderCommon::inputDaemonMutex.unlock(); + ui->joyModeComboBox->setCurrentIndex(0); - ui->joyModeComboBox->setCurrentIndex(0); - } - else if (index == 6) - { - PadderCommon::inputDaemonMutex.lock(); + break; - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_W), Qt::Key_W, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_S), Qt::Key_S, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_A), Qt::Key_A, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_D), Qt::Key_D, JoyButtonSlot::JoyKeyboard, this); + case 4: - PadderCommon::inputDaemonMutex.unlock(); + PadderCommon::inputDaemonMutex.lock(); - ui->joyModeComboBox->setCurrentIndex(0); - } - else if (index == 7) - { - PadderCommon::inputDaemonMutex.lock(); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - if ((ui->joyModeComboBox->currentIndex() == 0) || - (ui->joyModeComboBox->currentIndex() == 2)) - { - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); - } - else if (ui->joyModeComboBox->currentIndex() == 1) - { - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); - - upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); - upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); - downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); - downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); - } - else if (ui->joyModeComboBox->currentIndex() == 3) - { - upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); - upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); - downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); - downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); - } + PadderCommon::inputDaemonMutex.unlock(); - PadderCommon::inputDaemonMutex.unlock(); - } - else if (index == 8) - { - QMetaObject::invokeMethod(&helper, "clearButtonsSlotsEventReset", Qt::BlockingQueuedConnection); - } + ui->joyModeComboBox->setCurrentIndex(0); + + break; + + case 5: + + PadderCommon::inputDaemonMutex.lock(); + + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Up), Qt::Key_Up, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Down), Qt::Key_Down, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Left), Qt::Key_Left, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Right), Qt::Key_Right, JoyButtonSlot::JoyKeyboard, this); + + PadderCommon::inputDaemonMutex.unlock(); + ui->joyModeComboBox->setCurrentIndex(0); + + break; + + case 6: + + PadderCommon::inputDaemonMutex.lock(); + + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_W), Qt::Key_W, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_S), Qt::Key_S, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_A), Qt::Key_A, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_D), Qt::Key_D, JoyButtonSlot::JoyKeyboard, this); + + PadderCommon::inputDaemonMutex.unlock(); + + ui->joyModeComboBox->setCurrentIndex(0); + + break; + + case 7: + + PadderCommon::inputDaemonMutex.lock(); + + if ((ui->joyModeComboBox->currentIndex() == 0) || + (ui->joyModeComboBox->currentIndex() == 2)) + { + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); + } + else if (ui->joyModeComboBox->currentIndex() == 1) + { + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); + + upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); + upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); + downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); + downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); + } + else if (ui->joyModeComboBox->currentIndex() == 3) + { + upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); + upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); + downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); + downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); + } + + PadderCommon::inputDaemonMutex.unlock(); + + break; + + case 8: + + QMetaObject::invokeMethod(&helper, "clearButtonsSlotsEventReset", Qt::BlockingQueuedConnection); + + break; + } QHash tempHash; tempHash.insert(JoyDPadButton::DpadUp, upButtonSlot); @@ -241,6 +260,7 @@ void DPadEditDialog::implementPresets(int index) QMetaObject::invokeMethod(&helper, "setFromPendingSlots", Qt::BlockingQueuedConnection); } + void DPadEditDialog::implementModes(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -249,21 +269,23 @@ void DPadEditDialog::implementModes(int index) dpad->releaseButtonEvents(); - if (index == 0) + switch(index) { - dpad->setJoyMode(JoyDPad::StandardMode); - } - else if (index == 1) - { - dpad->setJoyMode(JoyDPad::EightWayMode); - } - else if (index == 2) - { - dpad->setJoyMode(JoyDPad::FourWayCardinal); - } - else if (index == 3) - { - dpad->setJoyMode(JoyDPad::FourWayDiagonal); + case 0: + dpad->setJoyMode(JoyDPad::StandardMode); + break; + + case 1: + dpad->setJoyMode(JoyDPad::EightWayMode); + break; + + case 2: + dpad->setJoyMode(JoyDPad::FourWayCardinal); + break; + + case 3: + dpad->setJoyMode(JoyDPad::FourWayDiagonal); + break; } PadderCommon::inputDaemonMutex.unlock(); @@ -275,10 +297,13 @@ void DPadEditDialog::selectCurrentPreset() JoyDPadButton *upButton = dpad->getJoyButton(JoyDPadButton::DpadUp); QList *upslots = upButton->getAssignedSlots(); + JoyDPadButton *downButton = dpad->getJoyButton(JoyDPadButton::DpadDown); QList *downslots = downButton->getAssignedSlots(); + JoyDPadButton *leftButton = dpad->getJoyButton(JoyDPadButton::DpadLeft); QList *leftslots = leftButton->getAssignedSlots(); + JoyDPadButton *rightButton = dpad->getJoyButton(JoyDPadButton::DpadRight); QList *rightslots = rightButton->getAssignedSlots(); @@ -373,7 +398,7 @@ void DPadEditDialog::updateDPadDelaySpinBox(int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - double temp = (value * 0.001); // static_cast + double temp = value * 0.001; ui->dpadDelayDoubleSpinBox->setValue(temp); } @@ -385,10 +410,11 @@ void DPadEditDialog::updateDPadDelaySlider(double value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - int temp = static_cast(value) * 100; - if (ui->dpadDelaySlider->value() != temp) + int currentDpadDelay = value * 100; + + if (ui->dpadDelaySlider->value() != currentDpadDelay) { - ui->dpadDelaySlider->setValue(temp); + ui->dpadDelaySlider->setValue(currentDpadDelay); } } @@ -398,21 +424,15 @@ void DPadEditDialog::updateWindowTitleDPadName() QString temp = QString(trUtf8("Set")).append(" "); - if (!dpad->getDpadName().isEmpty()) - { - temp.append(dpad->getName(false, true)); - } - else - { - temp.append(dpad->getName()); - } + if (!dpad->getDpadName().isEmpty()) temp.append(dpad->getName(false, true)); + else temp.append(dpad->getName()); if (dpad->getParentSet()->getIndex() != 0) { int setIndex = dpad->getParentSet()->getRealIndex(); temp.append(" [").append(trUtf8("Set %1").arg(setIndex)); - QString setName = dpad->getParentSet()->getName(); + if (!setName.isEmpty()) { temp.append(": ").append(setName); diff --git a/src/dpadeditdialog.h b/src/dpadeditdialog.h old mode 100644 new mode 100755 diff --git a/src/dpadeditdialog.ui b/src/dpadeditdialog.ui old mode 100644 new mode 100755 diff --git a/src/dpadpushbutton.cpp b/src/dpadpushbutton.cpp old mode 100644 new mode 100755 index 19c6ac100..a6a458b32 --- a/src/dpadpushbutton.cpp +++ b/src/dpadpushbutton.cpp @@ -23,7 +23,6 @@ #include - DPadPushButton::DPadPushButton(JoyDPad *dpad, bool displayNames, QWidget *parent) : FlashButtonWidget(displayNames, parent) { @@ -54,14 +53,9 @@ QString DPadPushButton::generateLabel() qInstallMessageHandler(MessageHandler::myMessageOutput); QString temp = QString(); - if (!dpad->getDpadName().isEmpty()) - { - temp.append(dpad->getName(false, ifDisplayNames())); - } - else - { - temp.append(dpad->getName()); - } + + if (!dpad->getDpadName().isEmpty()) temp.append(dpad->getName(false, ifDisplayNames())); + else temp.append(dpad->getName()); #ifndef QT_DEBUG_NO_OUTPUT qDebug() << "Dpad button name is: " << temp; @@ -76,6 +70,7 @@ void DPadPushButton::disableFlashes() disconnect(dpad, &JoyDPad::active, this, &DPadPushButton::flash); disconnect(dpad, &JoyDPad::released, this, &DPadPushButton::unflash); + this->unflash(); } @@ -93,6 +88,7 @@ void DPadPushButton::showContextMenu(const QPoint &point) QPoint globalPos = this->mapToGlobal(point); DPadContextMenu *contextMenu = new DPadContextMenu(dpad, this); + contextMenu->buildMenu(); contextMenu->popup(globalPos); } diff --git a/src/dpadpushbutton.h b/src/dpadpushbutton.h old mode 100644 new mode 100755 index 87be97a7c..5e374985a --- a/src/dpadpushbutton.h +++ b/src/dpadpushbutton.h @@ -37,11 +37,11 @@ class DPadPushButton : public FlashButtonWidget void tryFlash(); protected: - QString generateLabel(); + QString generateLabel() override; public slots: - void disableFlashes(); - void enableFlashes(); + void disableFlashes() override; + void enableFlashes() override; private slots: void showContextMenu(const QPoint &point); diff --git a/src/dpadpushbuttongroup.cpp b/src/dpadpushbuttongroup.cpp old mode 100644 new mode 100755 index a4fe4c0b0..ad0ea871c --- a/src/dpadpushbuttongroup.cpp +++ b/src/dpadpushbuttongroup.cpp @@ -29,7 +29,6 @@ #include #include - DPadPushButtonGroup::DPadPushButtonGroup(JoyDPad *dpad, bool displayNames, QWidget *parent) : QGridLayout(parent) { @@ -50,115 +49,36 @@ void DPadPushButtonGroup::generateButtons() QHash *buttons = dpad->getJoyButtons(); - JoyDPadButton *button = nullptr; - JoyDPadButtonWidget *pushbutton = nullptr; - - button = buttons->value(JoyDPadButton::DpadLeftUp); - upLeftButton = new JoyDPadButtonWidget(button, displayNames, parentWidget()); - pushbutton = upLeftButton; - connect(pushbutton, &JoyDPadButtonWidget::clicked, this, [this, pushbutton] { - openDPadButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - - connect(button, &JoyDPadButton::slotsChanged, this, &DPadPushButtonGroup::propogateSlotsChanged); - - addWidget(pushbutton, 0, 0); - - - button = buttons->value(JoyDPadButton::DpadUp); - upButton = new JoyDPadButtonWidget(button, displayNames, parentWidget()); - pushbutton = upButton; - connect(pushbutton, &JoyDPadButtonWidget::clicked, this, [this, pushbutton] { - openDPadButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - - connect(button, &JoyDPadButton::slotsChanged, this, &DPadPushButtonGroup::propogateSlotsChanged); - - addWidget(pushbutton, 0, 1); - - button = buttons->value(JoyDPadButton::DpadRightUp); - upRightButton = new JoyDPadButtonWidget(button, displayNames, parentWidget()); - pushbutton = upRightButton; - connect(pushbutton, &JoyDPadButtonWidget::clicked, this, [this, pushbutton] { - openDPadButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - - connect(button, &JoyDPadButton::slotsChanged, this, &DPadPushButtonGroup::propogateSlotsChanged); - - addWidget(pushbutton, 0, 2); - - button = buttons->value(JoyDPadButton::DpadLeft); - leftButton = new JoyDPadButtonWidget(button, displayNames, parentWidget()); - pushbutton = leftButton; - connect(pushbutton, &JoyDPadButtonWidget::clicked, this, [this, pushbutton] { - openDPadButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - - connect(button, &JoyDPadButton::slotsChanged, this, &DPadPushButtonGroup::propogateSlotsChanged); - - addWidget(pushbutton, 1, 0); + upLeftButton = generateBtnForGrid(buttons, 9, 0, 0); + upButton = generateBtnForGrid(buttons, 1, 0, 1); + upRightButton = generateBtnForGrid(buttons, 3, 0, 2); + leftButton = generateBtnForGrid(buttons, 8, 1, 0); dpadWidget = new DPadPushButton(dpad, displayNames, parentWidget()); dpadWidget->setIcon(QIcon::fromTheme(QString::fromUtf8("games-config-options"))); connect(dpadWidget, &DPadPushButton::clicked, this, &DPadPushButtonGroup::showDPadDialog); addWidget(dpadWidget, 1, 1); - button = buttons->value(JoyDPadButton::DpadRight); - rightButton = new JoyDPadButtonWidget(button, displayNames, parentWidget()); - pushbutton = rightButton; - connect(pushbutton, &JoyDPadButtonWidget::clicked, this, [this, pushbutton] { - openDPadButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - - connect(button, &JoyDPadButton::slotsChanged, this, &DPadPushButtonGroup::propogateSlotsChanged); - - addWidget(pushbutton, 1, 2); - - button = buttons->value(JoyDPadButton::DpadLeftDown); - downLeftButton = new JoyDPadButtonWidget(button, displayNames, parentWidget()); - pushbutton = downLeftButton; - connect(pushbutton, &JoyDPadButtonWidget::clicked, this, [this, pushbutton] { - openDPadButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - connect(button, &JoyDPadButton::slotsChanged, this, &DPadPushButtonGroup::propogateSlotsChanged); - - addWidget(pushbutton, 2, 0); - - button = buttons->value(JoyDPadButton::DpadDown); - downButton = new JoyDPadButtonWidget(button, displayNames, parentWidget()); - pushbutton = downButton; - connect(pushbutton, &JoyDPadButtonWidget::clicked, this, [this, pushbutton] { - openDPadButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - connect(button, &JoyDPadButton::slotsChanged, this, &DPadPushButtonGroup::propogateSlotsChanged); + rightButton = generateBtnForGrid(buttons, 2, 1, 2); + downLeftButton = generateBtnForGrid(buttons, 12, 2, 0); + downButton = generateBtnForGrid(buttons, 4, 2, 1); + downRightButton = generateBtnForGrid(buttons, 6, 2, 2); +} - addWidget(pushbutton, 2, 1); +JoyDPadButtonWidget* DPadPushButtonGroup::generateBtnForGrid(QHash *buttons, int dpadDirection, int cellRow, int cellCol) +{ + JoyDPadButton *button = buttons->value(static_cast(dpadDirection)); + JoyDPadButtonWidget *pushbutton = new JoyDPadButtonWidget(button, displayNames, parentWidget()); - button = buttons->value(JoyDPadButton::DpadRightDown); - downRightButton = new JoyDPadButtonWidget(button, displayNames, parentWidget()); - pushbutton = downRightButton; connect(pushbutton, &JoyDPadButtonWidget::clicked, this, [this, pushbutton] { openDPadButtonDialog(pushbutton); }); button->establishPropertyUpdatedConnections(); connect(button, &JoyDPadButton::slotsChanged, this, &DPadPushButtonGroup::propogateSlotsChanged); + addWidget(pushbutton, cellRow, cellCol); - addWidget(pushbutton, 2, 2); + return pushbutton; } void DPadPushButtonGroup::changeButtonLayout() diff --git a/src/dpadpushbuttongroup.h b/src/dpadpushbuttongroup.h old mode 100644 new mode 100755 index 44e82e55a..180ab437e --- a/src/dpadpushbuttongroup.h +++ b/src/dpadpushbuttongroup.h @@ -25,6 +25,7 @@ class QWidget; class JoyDPadButtonWidget; class DPadPushButton; class JoyButtonWidget; +class JoyDPadButton; class DPadPushButtonGroup : public QGridLayout { @@ -65,6 +66,8 @@ private slots: JoyDPadButtonWidget *downRightButton; DPadPushButton *dpadWidget; + + JoyDPadButtonWidget * generateBtnForGrid(QHash *buttons, int dpadDirection , int cellRow, int cellCol); }; #endif // DPADPUSHBUTTONGROUP_H diff --git a/src/editalldefaultautoprofiledialog.cpp b/src/editalldefaultautoprofiledialog.cpp old mode 100644 new mode 100755 index 56c36885e..3a1f2c597 --- a/src/editalldefaultautoprofiledialog.cpp +++ b/src/editalldefaultautoprofiledialog.cpp @@ -36,6 +36,7 @@ EditAllDefaultAutoProfileDialog::EditAllDefaultAutoProfileDialog(AutoProfileInfo ui(new Ui::EditAllDefaultAutoProfileDialog) { ui->setupUi(this); + qInstallMessageHandler(MessageHandler::myMessageOutput); setAttribute(Qt::WA_DeleteOnClose); @@ -44,9 +45,7 @@ EditAllDefaultAutoProfileDialog::EditAllDefaultAutoProfileDialog(AutoProfileInfo this->settings = settings; if (!info->getProfileLocation().isEmpty()) - { ui->profileLineEdit->setText(info->getProfileLocation()); - } connect(ui->profileBrowsePushButton, &QPushButton::clicked, this, &EditAllDefaultAutoProfileDialog::openProfileBrowseDialog); connect(this, &EditAllDefaultAutoProfileDialog::accepted, this, &EditAllDefaultAutoProfileDialog::saveAutoProfileInformation); @@ -63,12 +62,10 @@ void EditAllDefaultAutoProfileDialog::openProfileBrowseDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QString lookupDir = PadderCommon::preferredProfileDir(settings); - QString filename = QFileDialog::getOpenFileName(this, trUtf8("Open Config"), lookupDir, QString("Config Files (*.amgp *.xml)")); - if (!filename.isNull() && !filename.isEmpty()) - { - ui->profileLineEdit->setText(filename); - } + QString preferredProfileDir = PadderCommon::preferredProfileDir(settings); + QString profileFilename = QFileDialog::getOpenFileName(this, trUtf8("Open Config"), preferredProfileDir, QString("Config Files (*.amgp *.xml)")); + + if (!profileFilename.isNull() && !profileFilename.isEmpty()) ui->profileLineEdit->setText(profileFilename); } void EditAllDefaultAutoProfileDialog::saveAutoProfileInformation() @@ -93,11 +90,12 @@ void EditAllDefaultAutoProfileDialog::accept() bool validForm = true; QString errorString = QString(); + if (ui->profileLineEdit->text().length() > 0) { - QString profileFilename = ui->profileLineEdit->text(); - QFileInfo info(profileFilename); - if (!info.exists()) + QFileInfo profileInfo(ui->profileLineEdit->text()); + + if (!profileInfo.exists()) { validForm = false; errorString = trUtf8("Profile file path is invalid."); diff --git a/src/editalldefaultautoprofiledialog.h b/src/editalldefaultautoprofiledialog.h old mode 100644 new mode 100755 diff --git a/src/editalldefaultautoprofiledialog.ui b/src/editalldefaultautoprofiledialog.ui old mode 100644 new mode 100755 diff --git a/src/event.cpp b/src/event.cpp old mode 100644 new mode 100755 index 3611368b3..f602e171a --- a/src/event.cpp +++ b/src/event.cpp @@ -28,7 +28,7 @@ #include #include "event.h" - +#include "globalvariables.h" #include "messagehandler.h" #include "eventhandlerfactory.h" #include "joybutton.h" @@ -62,7 +62,7 @@ // based around a fixed bounding box resolution. void fakeAbsMouseCoordinates(double springX, double springY, int width, int height, - int &finalx, int &finaly, int screen=-1) + int &finalx, int &finaly, int screen) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -100,14 +100,13 @@ void fakeAbsMouseCoordinates(double springX, double springY, destMidWidth = destSpringWidth / 2; destMidHeight = destSpringHeight / 2; - finalx = (screenMidwidth + (static_cast(springX) * destMidWidth) + deskRect.x()); - finaly = (screenMidheight + (static_cast(springY) * destMidHeight) + deskRect.y()); + finalx = (screenMidwidth + (springX * destMidWidth) + deskRect.x()); + finaly = (screenMidheight + (springY * destMidHeight) + deskRect.y()); } // Create the event used by the operating system. void sendevent(JoyButtonSlot *slot, bool pressed) { - qInstallMessageHandler(MessageHandler::myMessageOutput); JoyButtonSlot::JoySlotInputAction device = slot->getSlotMode(); @@ -126,16 +125,15 @@ void sendevent(JoyButtonSlot *slot, bool pressed) } else if ((device == JoyButtonSlot::JoyExecute) && pressed && !slot->getTextData().isEmpty()) { - QString execString = slot->getTextData(); if (slot->getExtraData().canConvert()) { QString argumentsString = slot->getExtraData().toString(); QStringList argumentsTempList(PadderCommon::parseArgumentsString(argumentsString)); - QProcess::startDetached(execString, argumentsTempList); + QProcess::startDetached(slot->getTextData(), argumentsTempList); } else { - QProcess::startDetached(execString); + QProcess::startDetached(slot->getTextData()); } } } @@ -200,31 +198,25 @@ void sendSpringEventRefactor(PadderCommon::springModeInfo *fullSpring, int pivotY = 0; if (PadderCommon::mouseHelperObj.pivotPoint[0] != -1) - { pivotX = PadderCommon::mouseHelperObj.pivotPoint[0]; - } if (PadderCommon::mouseHelperObj.pivotPoint[1] != -1) - { pivotY = PadderCommon::mouseHelperObj.pivotPoint[1]; - } - if ((pivotX >= 0) && (pivotY >= 0)) { + if ((pivotX >= 0) && (pivotY >= 0)) + { + // Find a use for this routine in this context. int destRelativeWidth = relativeSpring->width; int destRelativeHeight = relativeSpring->height; - int xRelativeMoovCoor = 0; + int yRelativeMoovCoor = 0; + if (relativeSpring->displacementX >= -1.0) - { - xRelativeMoovCoor = (static_cast(relativeSpring->displacementX) * destRelativeWidth) / 2; - } + xRelativeMoovCoor = (relativeSpring->displacementX * destRelativeWidth) / 2; - int yRelativeMoovCoor = 0; if (relativeSpring->displacementY >= -1.0) - { - yRelativeMoovCoor = (static_cast(relativeSpring->displacementY) * destRelativeHeight) / 2; - } + yRelativeMoovCoor = (relativeSpring->displacementY * destRelativeHeight) / 2; xmovecoor += xRelativeMoovCoor; ymovecoor += yRelativeMoovCoor; @@ -239,7 +231,6 @@ void sendSpringEventRefactor(PadderCommon::springModeInfo *fullSpring, } else if (handler->getIdentifier() == "uinput") { - fakeAbsMouseCoordinates(displacementX, displacementY, springWidth, springHeight, xmovecoor, ymovecoor, fullSpring->screen); @@ -273,14 +264,17 @@ void sendSpringEvent(PadderCommon::springModeInfo *fullSpring, { int xmovecoor = 0; int ymovecoor = 0; + int width = 0; int height = 0; int midwidth = 0; int midheight = 0; + int destSpringWidth = 0; int destSpringHeight = 0; int destMidWidth = 0; int destMidHeight = 0; + int currentMouseX = 0; int currentMouseY = 0; @@ -335,6 +329,7 @@ void sendSpringEvent(PadderCommon::springModeInfo *fullSpring, int pivotX = currentMouseX; int pivotY = currentMouseY; + if (relativeSpring != nullptr) { if (PadderCommon::mouseHelperObj.pivotPoint[0] != -1) @@ -356,44 +351,36 @@ void sendSpringEvent(PadderCommon::springModeInfo *fullSpring, } } - xmovecoor = (fullSpring->displacementX >= -1.0) ? (midwidth + (static_cast(fullSpring->displacementX) * destMidWidth) + deskRect.x()): pivotX; - ymovecoor = (fullSpring->displacementY >= -1.0) ? (midheight + (static_cast(fullSpring->displacementY) * destMidHeight) + deskRect.y()) : pivotY; + xmovecoor = (fullSpring->displacementX >= -1.0) ? (midwidth + (fullSpring->displacementX * destMidWidth) + deskRect.x()): pivotX; + ymovecoor = (fullSpring->displacementY >= -1.0) ? (midheight + (fullSpring->displacementY * destMidHeight) + deskRect.y()) : pivotY; int fullSpringDestX = xmovecoor; int fullSpringDestY = ymovecoor; int destRelativeWidth = 0; int destRelativeHeight = 0; + if ((relativeSpring != nullptr) && (relativeSpring->width >= 2) && (relativeSpring->height >= 2)) { destRelativeWidth = relativeSpring->width; destRelativeHeight = relativeSpring->height; int xRelativeMoovCoor = 0; + int yRelativeMoovCoor = 0; + if (relativeSpring->displacementX >= -1.0) - { - xRelativeMoovCoor = (static_cast(relativeSpring->displacementX) * destRelativeWidth) / 2; - } + xRelativeMoovCoor = (relativeSpring->displacementX * destRelativeWidth) / 2; - int yRelativeMoovCoor = 0; if (relativeSpring->displacementY >= -1.0) - { - yRelativeMoovCoor = (static_cast(relativeSpring->displacementY) * destRelativeHeight) / 2; - } + yRelativeMoovCoor = (relativeSpring->displacementY * destRelativeHeight) / 2; xmovecoor += xRelativeMoovCoor; ymovecoor += yRelativeMoovCoor; } - if (mousePosX) - { - *mousePosX = xmovecoor; - } + if (mousePosX) *mousePosX = xmovecoor; - if (mousePosY) - { - *mousePosY = ymovecoor; - } + if (mousePosY) *mousePosY = ymovecoor; if ((xmovecoor != currentMouseX) || (ymovecoor != currentMouseY)) { @@ -404,6 +391,7 @@ void sendSpringEvent(PadderCommon::springModeInfo *fullSpring, if ((xmovecoor == (deskRect.x() + midwidth)) || (ymovecoor == (deskRect.y() + midheight))) { #if defined(Q_OS_UNIX) + BaseEventHandler *handler = EventHandlerFactory::getInstance()->handler(); if (fullSpring->screen <= -1) { @@ -481,8 +469,8 @@ void sendSpringEvent(PadderCommon::springModeInfo *fullSpring, } #endif PadderCommon::mouseHelperObj.mouseTimer.start( - qMax(JoyButton::getMouseRefreshRate(), - JoyButton::getGamepadRefreshRate()) + 1); + qMax(GlobalVariables::JoyButton::mouseRefreshRate, + GlobalVariables::JoyButton::gamepadRefreshRate) + 1); } else if (!PadderCommon::mouseHelperObj.springMouseMoving && ((diffx >= (destSpringWidth * .013)) || (diffy >= (destSpringHeight * .013)))) @@ -528,8 +516,8 @@ void sendSpringEvent(PadderCommon::springModeInfo *fullSpring, #endif PadderCommon::mouseHelperObj.mouseTimer.start( - qMax(JoyButton::getMouseRefreshRate(), - JoyButton::getGamepadRefreshRate()) + 1); + qMax(GlobalVariables::JoyButton::mouseRefreshRate, + GlobalVariables::JoyButton::gamepadRefreshRate) + 1); } else if (PadderCommon::mouseHelperObj.springMouseMoving && ((diffx < 2) && (diffy < 2))) @@ -577,8 +565,8 @@ void sendSpringEvent(PadderCommon::springModeInfo *fullSpring, #endif PadderCommon::mouseHelperObj.mouseTimer.start( - qMax(JoyButton::getMouseRefreshRate(), - JoyButton::getGamepadRefreshRate()) + 1); + qMax(GlobalVariables::JoyButton::mouseRefreshRate, + GlobalVariables::JoyButton::gamepadRefreshRate) + 1); } @@ -600,8 +588,8 @@ void sendSpringEvent(PadderCommon::springModeInfo *fullSpring, PadderCommon::mouseHelperObj.pivotPoint[1] = fullSpringDestY; PadderCommon::mouseHelperObj.mouseTimer.start( - qMax(JoyButton::getMouseRefreshRate(), - JoyButton::getGamepadRefreshRate()) + 1); + qMax(GlobalVariables::JoyButton::mouseRefreshRate, + GlobalVariables::JoyButton::gamepadRefreshRate) + 1); } } else @@ -653,6 +641,7 @@ int X11KeySymToKeycode(QString key) tempcode = VkKeyScan(ordinal); int modifiers = tempcode >> 8; tempcode = tempcode & 0xff; + if ((modifiers & 1) != 0) tempcode |= VK_SHIFT; if ((modifiers & 2) != 0) tempcode |= VK_CONTROL; if ((modifiers & 4) != 0) tempcode |= VK_MENU; @@ -689,6 +678,7 @@ QString keycodeToKeyString(int keycode, int alias) newkey = QString("0x%1").arg(keycode, 0, 16); QString tempkey = XKeysymToString(XkbKeycodeToKeysym(display, static_cast(keycode), 0, 0)); QString tempalias = X11Extras::getInstance()->getDisplayString(tempkey); + if (!tempalias.isEmpty()) { newkey = tempalias; @@ -696,7 +686,7 @@ QString keycodeToKeyString(int keycode, int alias) else { XKeyPressedEvent tempevent; - tempevent.keycode = static_cast(keycode); + tempevent.keycode = keycode; tempevent.type = KeyPress; tempevent.display = display; tempevent.state = 0; @@ -705,14 +695,15 @@ QString keycodeToKeyString(int keycode, int alias) memset(tempstring, 0, sizeof(tempstring)); int bitestoreturn = sizeof(tempstring) - 1; int numchars = XLookupString(&tempevent, tempstring, bitestoreturn, nullptr, nullptr); + if (numchars > 0) { tempstring[numchars] = '\0'; newkey = QString::fromUtf8(tempstring); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "NEWKEY:" << newkey << endl; - qDebug() << "NEWKEY LEGNTH:" << numchars << endl; + qDebug() << "NEWKEY:" << newkey << endl; + qDebug() << "NEWKEY LEGNTH:" << numchars << endl; #endif } else @@ -727,20 +718,14 @@ QString keycodeToKeyString(int keycode, int alias) if (handler->getIdentifier() == "uinput") { QString tempalias = UInputHelper::getInstance()->getDisplayString(keycode); - if (!tempalias.isEmpty()) - { - newkey = tempalias; - } - else - { - newkey = QString("0x%1").arg(keycode, 0, 16); - } + + if (!tempalias.isEmpty()) newkey = tempalias; + else newkey = QString("0x%1").arg(keycode, 0, 16); } #endif } #elif defined (Q_OS_WIN) - wchar_t buffer[50] = {0}; QString tempalias = WinExtras::getDisplayString(keycode); if (!tempalias.isEmpty()) @@ -757,15 +742,11 @@ QString keycodeToKeyString(int keycode, int alias) } else { + wchar_t buffer[50] = {0}; int length = GetKeyNameTextW(scancode << 16, buffer, sizeof(buffer)); - if (length > 0) - { - newkey = QString::fromWCharArray(buffer); - } - else - { - newkey.append(QString("0x%1").arg(keycode, 0, 16)); - } + + if (length > 0) newkey = QString::fromWCharArray(buffer); + else newkey.append(QString("0x%1").arg(keycode, 0, 16)); } } @@ -779,17 +760,21 @@ int X11KeyCodeToX11KeySym(int keycode) qInstallMessageHandler(MessageHandler::myMessageOutput); #ifdef Q_OS_WIN + Q_UNUSED(keycode); return 0; + #elif defined(Q_OS_UNIX) #ifdef WITH_X11 + Display* display = X11Extras::getInstance()->display(); - int tempcode = static_cast(XkbKeycodeToKeysym(display, static_cast(keycode), 0, 0)); - return tempcode; + return XkbKeycodeToKeysym(display, static_cast(keycode), 0, 0); + #else Q_UNUSED(keycode); return 0; + #endif #endif } @@ -809,10 +794,10 @@ QString keysymToKeyString(int keysym, int alias) { Display* display = X11Extras::getInstance()->display(); int keycode = 0; + if (keysym > 0) - { keycode = XKeysymToKeycode(display, static_cast(keysym)); - } + newkey = keycodeToKeyString(keycode); } else if (handler->getIdentifier() == "uinput") @@ -823,5 +808,6 @@ QString keysymToKeyString(int keysym, int alias) #elif defined(Q_OS_WIN) newkey = keycodeToKeyString(keysym, alias); #endif + return newkey; } diff --git a/src/event.h b/src/event.h old mode 100644 new mode 100755 index 9c57c0be1..0cb83ccec --- a/src/event.h +++ b/src/event.h @@ -37,6 +37,10 @@ void sendSpringEvent(PadderCommon::springModeInfo *fullSpring, PadderCommon::springModeInfo *relativeSpring=0, int* const mousePosX=0, int* const mousePos=0); +void fakeAbsMouseCoordinates(double springX, double springY, + int width, int height, + int &finalx, int &finaly, int screen=-1); + int X11KeySymToKeycode(QString key); QString keycodeToKeyString(int keycode, int alias=0); // .., .., unsigned int X11KeyCodeToX11KeySym(int keycode); // unsigned, unisigned diff --git a/src/eventhandlerfactory.cpp b/src/eventhandlerfactory.cpp old mode 100644 new mode 100755 index c474670eb..43ea21c58 --- a/src/eventhandlerfactory.cpp +++ b/src/eventhandlerfactory.cpp @@ -45,6 +45,8 @@ QHash handlerDisplayNames = buildDisplayNames(); EventHandlerFactory* EventHandlerFactory::instance = nullptr; + + EventHandlerFactory::EventHandlerFactory(QString handler, QObject *parent) : QObject(parent) { @@ -52,17 +54,17 @@ EventHandlerFactory::EventHandlerFactory(QString handler, QObject *parent) : #ifdef Q_OS_UNIX #ifdef WITH_UINPUT + if (handler == "uinput") - { eventHandler = new UInputEventHandler(this); - } - #endif + +#endif #ifdef WITH_XTEST + if (handler == "xtest") - { eventHandler = new XTestEventHandler(this); - } + #endif #elif defined(Q_OS_WIN) if (handler == "sendinput") @@ -96,14 +98,9 @@ EventHandlerFactory* EventHandlerFactory::getInstance(QString handler) if (instance == nullptr) { QStringList temp = buildEventGeneratorList(); - if (!handler.isEmpty() && temp.contains(handler)) - { - instance = new EventHandlerFactory(handler); - } - else - { - instance = new EventHandlerFactory(fallBackIdentifier()); - } + + if (!handler.isEmpty() && temp.contains(handler)) instance = new EventHandlerFactory(handler); + else instance = new EventHandlerFactory(fallBackIdentifier()); } return instance; @@ -169,11 +166,10 @@ QString EventHandlerFactory::handlerDisplayName(QString handler) { qInstallMessageHandler(MessageHandler::myMessageOutput); - QString temp = QString(); + QString handlerDispName = QString(); + if (handlerDisplayNames.contains(handler)) - { - temp = handlerDisplayNames.value(handler); - } + handlerDispName = handlerDisplayNames.value(handler); - return temp; + return handlerDispName; } diff --git a/src/eventhandlerfactory.h b/src/eventhandlerfactory.h old mode 100644 new mode 100755 diff --git a/src/eventhandlers/baseeventhandler.cpp b/src/eventhandlers/baseeventhandler.cpp old mode 100644 new mode 100755 index 65c9f98e4..37a05404d --- a/src/eventhandlers/baseeventhandler.cpp +++ b/src/eventhandlers/baseeventhandler.cpp @@ -35,9 +35,11 @@ BaseEventHandler::~BaseEventHandler() qInstallMessageHandler(MessageHandler::myMessageOutput); } + QString BaseEventHandler::getErrorString() { qInstallMessageHandler(MessageHandler::myMessageOutput); + return lastErrorString; } @@ -59,6 +61,7 @@ void BaseEventHandler::printPostMessages() void BaseEventHandler::sendMouseAbsEvent(int xDis, int yDis, int screen) { qInstallMessageHandler(MessageHandler::myMessageOutput); + Q_UNUSED(xDis); Q_UNUSED(yDis); Q_UNUSED(screen); @@ -75,6 +78,7 @@ void BaseEventHandler::sendMouseSpringEvent(int xDis, int yDis, int width, int height) { qInstallMessageHandler(MessageHandler::myMessageOutput); + Q_UNUSED(xDis); Q_UNUSED(yDis); Q_UNUSED(width); @@ -100,6 +104,3 @@ void BaseEventHandler::sendTextEntryEvent(QString maintext) Q_UNUSED(maintext); } - - - diff --git a/src/eventhandlers/baseeventhandler.h b/src/eventhandlers/baseeventhandler.h old mode 100644 new mode 100755 diff --git a/src/eventhandlers/uinputeventhandler.cpp b/src/eventhandlers/uinputeventhandler.cpp old mode 100644 new mode 100755 index 8a6077747..fe15ecf7e --- a/src/eventhandlers/uinputeventhandler.cpp +++ b/src/eventhandlers/uinputeventhandler.cpp @@ -27,7 +27,6 @@ #include #include - #include #include #include @@ -37,6 +36,7 @@ static const QString mouseDeviceName = PadderCommon::mouseDeviceName; static const QString keyboardDeviceName = PadderCommon::keyboardDeviceName; static const QString springMouseDeviceName = PadderCommon::springMouseDeviceName; + #ifdef WITH_X11 #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) #include @@ -45,9 +45,11 @@ static const QString springMouseDeviceName = PadderCommon::springMouseDeviceName #include #endif + #include "uinputeventhandler.h" #include "messagehandler.h" + UInputEventHandler::UInputEventHandler(QObject *parent) : BaseEventHandler(parent) { @@ -56,9 +58,10 @@ UInputEventHandler::UInputEventHandler(QObject *parent) : springMouseFileHandler = 0; } + UInputEventHandler::~UInputEventHandler() { - cleanup(); + cleanupUinputEvHand(); } /** @@ -72,68 +75,80 @@ bool UInputEventHandler::init() bool result = true; // Open file handle for keyboard emulation. - keyboardFileHandler = openUInputHandle(); - if (keyboardFileHandler > 0) - { - setKeyboardEvents(keyboardFileHandler); - populateKeyCodes(keyboardFileHandler); - createUInputKeyboardDevice(keyboardFileHandler); - } - else - { - result = false; - } + initDevice(keyboardFileHandler, "keyboardFileHandler", result); + // two separate statements for "result" are needed anyway because of possible changing its + // statement in "initDevice" method if (result) { // Open mouse file handle to use for relative mouse emulation. - mouseFileHandler = openUInputHandle(); - if (mouseFileHandler > 0) - { - setRelMouseEvents(mouseFileHandler); - createUInputMouseDevice(mouseFileHandler); - } - else - { - result = false; - } + initDevice(mouseFileHandler, "mouseFileHandler", result); } if (result) { // Open mouse file handle to use for absolute mouse emulation. - springMouseFileHandler = openUInputHandle(); - if (springMouseFileHandler > 0) - { - setSpringMouseEvents(springMouseFileHandler); - createUInputSpringMouseDevice(springMouseFileHandler); - } - else - { - result = false; - } + initDevice(springMouseFileHandler, "springMouseFileHandler", result); } #ifdef WITH_X11 + if (result) { - #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) + #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) + + if (QApplication::platformName() == QStringLiteral("xcb")) + { + + #endif - if (QApplication::platformName() == QStringLiteral("xcb")) - { - #endif // Some time needs to elapse after device creation before changing // pointer settings. Otherwise, settings will not take effect. QTimer::singleShot(2000, this, SLOT(x11ResetMouseAccelerationChange())); - #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) - } - #endif + + #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) + + } + + #endif } + #endif return result; } + +void UInputEventHandler::initDevice(int device, QString name, bool& result) +{ + device = openUInputHandle(); + + if (device > 0) + { + if (name == "springMouseFileHandler") + { + setSpringMouseEvents(device); + createUInputSpringMouseDevice(device); + } + else if (name == "mouseFileHandler") + { + setRelMouseEvents(device); + createUInputMouseDevice(device); + } + else if (name == "keyboardFileHandler") + { + setKeyboardEvents(device); + populateKeyCodes(device); + createUInputKeyboardDevice(device); + } + } + else + { + result = false; + } +} + + #ifdef WITH_X11 void UInputEventHandler::x11ResetMouseAccelerationChange() { @@ -144,7 +159,14 @@ void UInputEventHandler::x11ResetMouseAccelerationChange() } #endif + bool UInputEventHandler::cleanup() +{ + return cleanupUinputEvHand(); +} + + +bool UInputEventHandler::cleanupUinputEvHand() { if (keyboardFileHandler > 0) { @@ -167,6 +189,7 @@ bool UInputEventHandler::cleanup() return true; } + void UInputEventHandler::sendKeyboardEvent(JoyButtonSlot *slot, bool pressed) { JoyButtonSlot::JoySlotInputAction device = slot->getSlotMode(); @@ -178,6 +201,7 @@ void UInputEventHandler::sendKeyboardEvent(JoyButtonSlot *slot, bool pressed) } } + void UInputEventHandler::sendMouseButtonEvent(JoyButtonSlot *slot, bool pressed) { JoyButtonSlot::JoySlotInputAction device = slot->getSlotMode(); @@ -207,7 +231,7 @@ void UInputEventHandler::sendMouseButtonEvent(JoyButtonSlot *slot, bool pressed) } } - write_uinput_event(mouseFileHandler, EV_KEY, static_cast(tempcode), pressed ? 1 : 0); + write_uinput_event(mouseFileHandler, EV_KEY, tempcode, pressed ? 1 : 0); } else if (code == 4) { @@ -249,12 +273,14 @@ void UInputEventHandler::sendMouseButtonEvent(JoyButtonSlot *slot, bool pressed) } } + void UInputEventHandler::sendMouseEvent(int xDis, int yDis) { write_uinput_event(mouseFileHandler, EV_REL, REL_X, xDis, false); write_uinput_event(mouseFileHandler, EV_REL, REL_Y, yDis); } + void UInputEventHandler::sendMouseAbsEvent(int xDis, int yDis, int screen) { Q_UNUSED(screen); @@ -263,33 +289,34 @@ void UInputEventHandler::sendMouseAbsEvent(int xDis, int yDis, int screen) write_uinput_event(springMouseFileHandler, EV_ABS, ABS_Y, yDis); } + void UInputEventHandler::sendMouseSpringEvent(int xDis, int yDis, int width, int height) { if ((width > 0) && (height > 0)) { - double midwidth = static_cast(width) / 2.0; - double midheight = static_cast(height) / 2.0; + double midwidth = width / 2.0; + double midheight = height / 2.0; - int fx = static_cast(ceil(32767 * ((xDis - midwidth) / midwidth))); - int fy = static_cast(ceil(32767 * ((yDis - midheight) / midheight))); + int fx = ceil(32767 * ((xDis - midwidth) / midwidth)); + int fy = ceil(32767 * ((yDis - midheight) / midheight)); sendMouseAbsEvent(fx, fy, -1); } - - } + void UInputEventHandler::sendMouseSpringEvent(int xDis, int yDis) { if ((xDis >= -1.0) && (xDis <= 1.0) && (yDis >= -1.0) && (yDis <= 1.0)) { - int fx = static_cast(ceil(32767 * xDis)); - int fy = static_cast(ceil(32767 * yDis)); + int fx = ceil(32767 * xDis); + int fy = ceil(32767 * yDis); sendMouseAbsEvent(fx, fy, -1); } } + int UInputEventHandler::openUInputHandle() { int filehandle = -1; @@ -301,10 +328,12 @@ int UInputEventHandler::openUInputHandle() QString possibleLocation; QStringListIterator iter(locations); + while (iter.hasNext()) { QString temp = iter.next(); QFileInfo tempFileInfo(temp); + if (tempFileInfo.exists()) { possibleLocation = temp; @@ -322,6 +351,7 @@ int UInputEventHandler::openUInputHandle() { QByteArray tempArray = possibleLocation.toUtf8(); filehandle = open(tempArray.constData(), O_WRONLY | O_NONBLOCK); + if (filehandle < 0) { lastErrorString = tr("Could not open uinput device file\n" @@ -344,9 +374,9 @@ void UInputEventHandler::setKeyboardEvents(int filehandle) ioctl(filehandle, UI_SET_EVBIT, EV_SYN); } + void UInputEventHandler::setRelMouseEvents(int filehandle) { - ioctl(filehandle, UI_SET_EVBIT, EV_KEY); ioctl(filehandle, UI_SET_EVBIT, EV_SYN); ioctl(filehandle, UI_SET_EVBIT, EV_REL); @@ -363,9 +393,9 @@ void UInputEventHandler::setRelMouseEvents(int filehandle) ioctl(filehandle, UI_SET_KEYBIT, BTN_EXTRA); } + void UInputEventHandler::setSpringMouseEvents(int filehandle) { - ioctl(filehandle, UI_SET_EVBIT, EV_KEY); ioctl(filehandle, UI_SET_EVBIT, EV_SYN); @@ -379,20 +409,22 @@ void UInputEventHandler::setSpringMouseEvents(int filehandle) ioctl(filehandle, UI_SET_ABSBIT, ABS_X); ioctl(filehandle, UI_SET_ABSBIT, ABS_Y); ioctl(filehandle, UI_SET_KEYBIT, BTN_TOUCH); + // BTN_TOOL_PEN is required for the mouse to be seen as an // absolute mouse as opposed to a relative mouse. ioctl(filehandle, UI_SET_KEYBIT, BTN_TOOL_PEN); } + void UInputEventHandler::populateKeyCodes(int filehandle) { - - for (unsigned int i=KEY_ESC; i <= KEY_MICMUTE; i++) + for (unsigned int i = KEY_ESC; i <= KEY_MICMUTE; i++) { ioctl(filehandle, UI_SET_KEYBIT, i); } } + void UInputEventHandler::createUInputKeyboardDevice(int filehandle) { struct uinput_user_dev uidev; @@ -405,11 +437,11 @@ void UInputEventHandler::createUInputKeyboardDevice(int filehandle) uidev.id.product = 0x0; uidev.id.version = 1; - write(filehandle, &uidev, sizeof(uidev)); ioctl(filehandle, UI_DEV_CREATE); } + void UInputEventHandler::createUInputMouseDevice(int filehandle) { struct uinput_user_dev uidev; @@ -422,11 +454,11 @@ void UInputEventHandler::createUInputMouseDevice(int filehandle) uidev.id.product = 0x0; uidev.id.version = 1; - write(filehandle, &uidev, sizeof(uidev)); ioctl(filehandle, UI_DEV_CREATE); } + void UInputEventHandler::createUInputSpringMouseDevice(int filehandle) { struct uinput_user_dev uidev; @@ -447,14 +479,13 @@ void UInputEventHandler::createUInputSpringMouseDevice(int filehandle) uidev.absmax[ABS_Y] = 32767; uidev.absflat[ABS_Y] = 0; - write(filehandle, &uidev, sizeof(uidev)); ioctl(filehandle, UI_DEV_CREATE); } + void UInputEventHandler::closeUInputDevice(int filehandle) { - ioctl(filehandle, UI_DEV_DESTROY); close(filehandle); } @@ -468,8 +499,8 @@ void UInputEventHandler::write_uinput_event(int filehandle, int type, memset(&ev, 0, sizeof(struct input_event)); gettimeofday(&ev.time, nullptr); - ev.type = static_cast(type); - ev.code = static_cast(code); + ev.type = type; + ev.code = code; ev.value = value; write(filehandle, &ev, sizeof(struct input_event)); @@ -486,11 +517,13 @@ void UInputEventHandler::write_uinput_event(int filehandle, int type, } } + QString UInputEventHandler::getName() { return QString("uinput"); } + QString UInputEventHandler::getIdentifier() { return getName(); @@ -512,21 +545,24 @@ void UInputEventHandler::printPostMessages() } } + void UInputEventHandler::sendTextEntryEvent(QString maintext) { AntKeyMapper *mapper = AntKeyMapper::getInstance(); - if (mapper && mapper->getKeyMapper()) + if ((mapper != nullptr) && mapper->getKeyMapper()) { QtUInputKeyMapper *keymapper = qobject_cast(mapper->getKeyMapper()); QtX11KeyMapper *nativeWinKeyMapper = nullptr; + if (mapper->getNativeKeyMapper()) { nativeWinKeyMapper = qobject_cast(mapper->getNativeKeyMapper()); } QList tempList; - for (int i=0; i < maintext.size(); i++) + + for (int i = 0; i < maintext.size(); i++) { tempList.clear(); @@ -538,10 +574,11 @@ void UInputEventHandler::sendTextEntryEvent(QString maintext) { QtX11KeyMapper::charKeyInformation tempX11 = nativeWinKeyMapper->getCharKeyInformation(maintext.at(i)); tempX11.virtualkey = X11Extras::getInstance()->getGroup1KeySym(tempX11.virtualkey); - unsigned int tempQtKey = static_cast(nativeWinKeyMapper->returnQtKey(tempX11.virtualkey)); + unsigned int tempQtKey = nativeWinKeyMapper->returnQtKey(tempX11.virtualkey); + if (tempQtKey > 0) { - temp.virtualkey = keymapper->returnVirtualKey(static_cast(tempQtKey)); + temp.virtualkey = keymapper->returnVirtualKey(tempQtKey); temp.modifiers = tempX11.modifiers; } else @@ -558,32 +595,13 @@ void UInputEventHandler::sendTextEntryEvent(QString maintext) { if (temp.modifiers != Qt::NoModifier) { - if (temp.modifiers.testFlag(Qt::ShiftModifier)) - { - tempList.append(KEY_LEFTSHIFT); - write_uinput_event(keyboardFileHandler, EV_KEY, KEY_LEFTSHIFT, 1, false); - } - - if (temp.modifiers.testFlag(Qt::ControlModifier)) - { - tempList.append(KEY_LEFTCTRL); - write_uinput_event(keyboardFileHandler, EV_KEY, KEY_LEFTCTRL, 1, false); - } - - if (temp.modifiers.testFlag(Qt::AltModifier)) - { - tempList.append(KEY_LEFTALT); - write_uinput_event(keyboardFileHandler, EV_KEY, KEY_LEFTALT, 1, false); - } - - if (temp.modifiers.testFlag(Qt::MetaModifier)) - { - tempList.append(KEY_LEFTMETA); - write_uinput_event(keyboardFileHandler, EV_KEY, KEY_LEFTMETA, 1, false); - } + testAndAppend(temp.modifiers.testFlag(Qt::ShiftModifier), tempList, KEY_LEFTSHIFT); + testAndAppend(temp.modifiers.testFlag(Qt::ControlModifier), tempList, KEY_LEFTCTRL); + testAndAppend(temp.modifiers.testFlag(Qt::AltModifier), tempList, KEY_LEFTALT); + testAndAppend(temp.modifiers.testFlag(Qt::MetaModifier), tempList, KEY_LEFTMETA); } - tempList.append(static_cast(temp.virtualkey)); + tempList.append(temp.virtualkey); write_uinput_event(keyboardFileHandler, EV_KEY, temp.virtualkey, 1, true); } @@ -591,17 +609,29 @@ void UInputEventHandler::sendTextEntryEvent(QString maintext) { QListIterator tempiter(tempList); tempiter.toBack(); + while (tempiter.hasPrevious()) { unsigned int currentcode = tempiter.previous(); bool sync = !tempiter.hasPrevious() ? true : false; - write_uinput_event(keyboardFileHandler, EV_KEY, static_cast(currentcode), 0, sync); + write_uinput_event(keyboardFileHandler, EV_KEY, currentcode, 0, sync); } } } } } + +void UInputEventHandler::testAndAppend(bool tested, QList& tempList, unsigned int key) +{ + if (tested) + { + tempList.append(key); + write_uinput_event(keyboardFileHandler, EV_KEY, key, 1, false); + } +} + + int UInputEventHandler::getKeyboardFileHandler() { return keyboardFileHandler; diff --git a/src/eventhandlers/uinputeventhandler.h b/src/eventhandlers/uinputeventhandler.h old mode 100644 new mode 100755 index b28fc6272..0c03ceee0 --- a/src/eventhandlers/uinputeventhandler.h +++ b/src/eventhandlers/uinputeventhandler.h @@ -32,22 +32,22 @@ class UInputEventHandler : public BaseEventHandler explicit UInputEventHandler(QObject *parent = nullptr); ~UInputEventHandler(); - virtual bool init(); - virtual bool cleanup(); - virtual void sendKeyboardEvent(JoyButtonSlot *slot, bool pressed); - virtual void sendMouseButtonEvent(JoyButtonSlot *slot, bool pressed); - virtual void sendMouseEvent(int xDis, int yDis); - virtual void sendMouseAbsEvent(int xDis, int yDis, int screen); + virtual bool init() override; + virtual bool cleanup() override; + virtual void sendKeyboardEvent(JoyButtonSlot *slot, bool pressed) override; + virtual void sendMouseButtonEvent(JoyButtonSlot *slot, bool pressed) override; + virtual void sendMouseEvent(int xDis, int yDis) override; + virtual void sendMouseAbsEvent(int xDis, int yDis, int screen) override; virtual void sendMouseSpringEvent(int xDis, int yDis, - int width, int height); // unsigned, unsigned, unsigned, unsigned - virtual void sendMouseSpringEvent(int xDis, int yDis); + int width, int height) override; + virtual void sendMouseSpringEvent(int xDis, int yDis) override; - virtual QString getName(); - virtual QString getIdentifier(); - virtual void printPostMessages(); + virtual QString getName() override; + virtual QString getIdentifier() override; + virtual void printPostMessages() override; - virtual void sendTextEntryEvent(QString maintext); + virtual void sendTextEntryEvent(QString maintext) override; int getKeyboardFileHandler(); int getMouseFileHandler(); @@ -78,6 +78,10 @@ private slots: int springMouseFileHandler; QString uinputDeviceLocation; + bool cleanupUinputEvHand(); + void testAndAppend(bool tested, QList& tempList, unsigned int key); + void initDevice(int device, QString name, bool& result); + }; #endif // UINPUTEVENTHANDLER_H diff --git a/src/eventhandlers/winsendinputeventhandler.cpp b/src/eventhandlers/winsendinputeventhandler.cpp old mode 100644 new mode 100755 diff --git a/src/eventhandlers/winsendinputeventhandler.h b/src/eventhandlers/winsendinputeventhandler.h old mode 100644 new mode 100755 index 894bbedb4..c280b6e36 --- a/src/eventhandlers/winsendinputeventhandler.h +++ b/src/eventhandlers/winsendinputeventhandler.h @@ -32,17 +32,17 @@ class WinSendInputEventHandler : public BaseEventHandler public: explicit WinSendInputEventHandler(QObject *parent = nullptr); - virtual bool init(); - virtual bool cleanup(); - virtual void sendKeyboardEvent(JoyButtonSlot *slot, bool pressed); - virtual void sendMouseButtonEvent(JoyButtonSlot *slot, bool pressed); - virtual void sendMouseEvent(int xDis, int yDis); + virtual bool init() override; + virtual bool cleanup() override; + virtual void sendKeyboardEvent(JoyButtonSlot *slot, bool pressed) override; + virtual void sendMouseButtonEvent(JoyButtonSlot *slot, bool pressed) override; + virtual void sendMouseEvent(int xDis, int yDis) override; virtual void sendMouseSpringEvent(int xDis, int yDis, - int width, int height); // .., unsigned, unsigned, unsigned, unsigned - virtual void sendTextEntryEvent(QString maintext); + int width, int height) override; // .., unsigned, unsigned, unsigned, unsigned + virtual void sendTextEntryEvent(QString maintext) override; - virtual QString getName(); - virtual QString getIdentifier(); + virtual QString getName() override; + virtual QString getIdentifier() override; }; diff --git a/src/eventhandlers/winvmultieventhandler.cpp b/src/eventhandlers/winvmultieventhandler.cpp old mode 100644 new mode 100755 index 3f27dd80f..116531ec2 --- a/src/eventhandlers/winvmultieventhandler.cpp +++ b/src/eventhandlers/winvmultieventhandler.cpp @@ -42,7 +42,7 @@ WinVMultiEventHandler::WinVMultiEventHandler(QObject *parent) : WinVMultiEventHandler::~WinVMultiEventHandler() { - cleanup(); + cleanupWinVmEvHand(); } bool WinVMultiEventHandler::init() @@ -77,8 +77,11 @@ bool WinVMultiEventHandler::init() bool WinVMultiEventHandler::cleanup() { - bool result = true; + return cleanupWinVmEvHand(); +} +bool WinVMultiEventHandler::cleanupWinVmEvHand() +{ if (vmulti) { vmulti_disconnect(vmulti); @@ -89,7 +92,7 @@ bool WinVMultiEventHandler::cleanup() nativeKeyMapper = 0; - return result; + return true; } void WinVMultiEventHandler::sendKeyboardEvent(JoyButtonSlot *slot, bool pressed) diff --git a/src/eventhandlers/winvmultieventhandler.h b/src/eventhandlers/winvmultieventhandler.h old mode 100644 new mode 100755 index 195b5c1aa..67cc38399 --- a/src/eventhandlers/winvmultieventhandler.h +++ b/src/eventhandlers/winvmultieventhandler.h @@ -38,20 +38,20 @@ class WinVMultiEventHandler : public BaseEventHandler explicit WinVMultiEventHandler(QObject *parent = nullptr); ~WinVMultiEventHandler(); - virtual bool init(); - virtual bool cleanup(); - virtual void sendKeyboardEvent(JoyButtonSlot *slot, bool pressed); - virtual void sendMouseButtonEvent(JoyButtonSlot *slot, bool pressed); - virtual void sendMouseEvent(int xDis, int yDis); - virtual void sendMouseAbsEvent(int xDis, int yDis, int screen); + virtual bool init() override; + virtual bool cleanup() override; + virtual void sendKeyboardEvent(JoyButtonSlot *slot, bool pressed) override; + virtual void sendMouseButtonEvent(JoyButtonSlot *slot, bool pressed) override; + virtual void sendMouseEvent(int xDis, int yDis) override; + virtual void sendMouseAbsEvent(int xDis, int yDis, int screen) override; virtual void sendMouseSpringEvent(int xDis, int yDis, - int width, int height); // unsigned, unsigned, unsigned, unsigned + int width, int height) override; // unsigned, unsigned, unsigned, unsigned // TODO: Implement text event using information from QtWinKeyMapper. - virtual void sendTextEntryEvent(QString maintext); + virtual void sendTextEntryEvent(QString maintext) override; - virtual QString getName(); - virtual QString getIdentifier(); + virtual QString getName() override; + virtual QString getIdentifier() override; protected: pvmulti_client vmulti; @@ -63,6 +63,8 @@ class WinVMultiEventHandler : public BaseEventHandler WinSendInputEventHandler sendInputHandler; QtKeyMapperBase *nativeKeyMapper; + bool cleanupWinVmEvHand(); + }; #endif // WINVMULTIEVENTHANDLER_H diff --git a/src/eventhandlers/xtesteventhandler.cpp b/src/eventhandlers/xtesteventhandler.cpp old mode 100644 new mode 100755 index fc62bb700..7aa5c4663 --- a/src/eventhandlers/xtesteventhandler.cpp +++ b/src/eventhandlers/xtesteventhandler.cpp @@ -17,6 +17,7 @@ #include "xtesteventhandler.h" +#include "globalvariables.h" #include "joybuttonslot.h" #include "antkeymapper.h" #include "messagehandler.h" @@ -32,7 +33,6 @@ #include "x11extras.h" - XTestEventHandler::XTestEventHandler(QObject *parent) : BaseEventHandler(parent) { @@ -49,159 +49,154 @@ XTestEventHandler::~XTestEventHandler() bool XTestEventHandler::init() { qInstallMessageHandler(MessageHandler::myMessageOutput); + X11Extras *instance = X11Extras::getInstance(); + if (instance != nullptr) { - instance->x11ResetMouseAccelerationChange(X11Extras::xtestMouseDeviceName); + instance->x11ResetMouseAccelerationChange(GlobalVariables::X11Extras::xtestMouseDeviceName); } return true; } + bool XTestEventHandler::cleanup() { qInstallMessageHandler(MessageHandler::myMessageOutput); + return true; } + void XTestEventHandler::sendKeyboardEvent(JoyButtonSlot *slot, bool pressed) { qInstallMessageHandler(MessageHandler::myMessageOutput); + Display* display = X11Extras::getInstance()->display(); JoyButtonSlot::JoySlotInputAction device = slot->getSlotMode(); + int code = slot->getSlotCode(); if (device == JoyButtonSlot::JoyKeyboard) { - int tempcode = XKeysymToKeycode(display, static_cast(code)); + int tempcode = XKeysymToKeycode(display, static_cast(code)); + if (tempcode > 0) { - XTestFakeKeyEvent(display, static_cast(tempcode), pressed, 0); + XTestFakeKeyEvent(display, tempcode, pressed, 0); XFlush(display); } } } + void XTestEventHandler::sendMouseButtonEvent(JoyButtonSlot *slot, bool pressed) { qInstallMessageHandler(MessageHandler::myMessageOutput); + Display* display = X11Extras::getInstance()->display(); JoyButtonSlot::JoySlotInputAction device = slot->getSlotMode(); + int code = slot->getSlotCode(); if (device == JoyButtonSlot::JoyMouseButton) { - XTestFakeButtonEvent(display, static_cast(code), pressed, 0); + XTestFakeButtonEvent(display, code, pressed, 0); XFlush(display); } } + void XTestEventHandler::sendMouseEvent(int xDis, int yDis) { qInstallMessageHandler(MessageHandler::myMessageOutput); + Display* display = X11Extras::getInstance()->display(); XTestFakeRelativeMotionEvent(display, xDis, yDis, 0); XFlush(display); } + void XTestEventHandler::sendMouseAbsEvent(int xDis, int yDis, int screen) { qInstallMessageHandler(MessageHandler::myMessageOutput); + Display* display = X11Extras::getInstance()->display(); XTestFakeMotionEvent(display, screen, xDis, yDis, 0); XFlush(display); } + QString XTestEventHandler::getName() { qInstallMessageHandler(MessageHandler::myMessageOutput); + return QString("XTest"); } + QString XTestEventHandler::getIdentifier() { qInstallMessageHandler(MessageHandler::myMessageOutput); + return QString("xtest"); } + void XTestEventHandler::sendTextEntryEvent(QString maintext) { qInstallMessageHandler(MessageHandler::myMessageOutput); + AntKeyMapper *mapper = AntKeyMapper::getInstance(); if ((mapper != nullptr) && mapper->getKeyMapper()) { Display* display = X11Extras::getInstance()->display(); - QtX11KeyMapper *keymapper = qobject_cast(mapper->getKeyMapper()); // static_cast + QtX11KeyMapper *keymapper = qobject_cast(mapper->getKeyMapper()); - for (int i=0; i < maintext.size(); i++) + for (int i = 0; i < maintext.size(); i++) { QtX11KeyMapper::charKeyInformation temp = keymapper->getCharKeyInformation(maintext.at(i)); - int tempcode = XKeysymToKeycode(display, static_cast(temp.virtualkey)); + int tempcode = XKeysymToKeycode(display, static_cast(temp.virtualkey)); + if (tempcode > 0) { QList tempList; - if (temp.modifiers != Qt::NoModifier) + if ((temp.modifiers != Qt::NoModifier) && temp.modifiers.testFlag(Qt::ShiftModifier)) { - if (temp.modifiers.testFlag(Qt::ShiftModifier)) - { - int shiftcode = 0; - - if (shiftcode == 0) - { - shiftcode = XKeysymToKeycode(display, XK_Shift_L); - } - - int modifiercode = shiftcode; - XTestFakeKeyEvent(display, static_cast(modifiercode), 1, 0); - tempList.append(modifiercode); - } - - if (temp.modifiers.testFlag(Qt::ControlModifier)) - { - int controlcode = 0; - - if (controlcode == 0) - { - controlcode = XKeysymToKeycode(display, XK_Control_L); - } - - int modifiercode = controlcode; - XTestFakeKeyEvent(display, static_cast(modifiercode), 1, 0); - tempList.append(modifiercode); - } - - if (temp.modifiers.testFlag(Qt::AltModifier)) - { - int altcode = 0; - - if (altcode == 0) - { - altcode = XKeysymToKeycode(display, XK_Alt_L); - } - - int modifiercode = altcode; - XTestFakeKeyEvent(display, static_cast(modifiercode), 1, 0); - tempList.append(modifiercode); - } + int shiftcode = XKeysymToKeycode(display, XK_Shift_L); + int modifiercode = shiftcode; + XTestFakeKeyEvent(display, modifiercode, 1, 0); + tempList.append(modifiercode); + } - if (temp.modifiers.testFlag(Qt::MetaModifier)) - { - int metacode = 0; + if ((temp.modifiers != Qt::NoModifier) && temp.modifiers.testFlag(Qt::ControlModifier)) + { + int controlcode = XKeysymToKeycode(display, XK_Control_L); + int modifiercode = controlcode; + XTestFakeKeyEvent(display, modifiercode, 1, 0); + tempList.append(modifiercode); + } - if (metacode == 0) - { - metacode = XKeysymToKeycode(display, XK_Meta_L); - } + if ((temp.modifiers != Qt::NoModifier) && temp.modifiers.testFlag(Qt::AltModifier)) + { + int altcode = XKeysymToKeycode(display, XK_Alt_L); + int modifiercode = altcode; + XTestFakeKeyEvent(display, modifiercode, 1, 0); + tempList.append(modifiercode); + } - int modifiercode = metacode; - XTestFakeKeyEvent(display, static_cast(modifiercode), 1, 0); - tempList.append(modifiercode); - } + if ((temp.modifiers != Qt::NoModifier) && temp.modifiers.testFlag(Qt::MetaModifier)) + { + int metacode = XKeysymToKeycode(display, XK_Meta_L); + int modifiercode = metacode; + XTestFakeKeyEvent(display, modifiercode, 1, 0); + tempList.append(modifiercode); } - XTestFakeKeyEvent(display, static_cast(tempcode), 1, 0); + XTestFakeKeyEvent(display, tempcode, 1, 0); tempList.append(tempcode); XFlush(display); @@ -210,10 +205,11 @@ void XTestEventHandler::sendTextEntryEvent(QString maintext) { QListIterator tempiter(tempList); tempiter.toBack(); + while (tempiter.hasPrevious()) { int currentcode = tempiter.previous(); - XTestFakeKeyEvent(display, static_cast(currentcode), 0, 0); + XTestFakeKeyEvent(display, currentcode, 0, 0); } XFlush(display); @@ -227,6 +223,7 @@ void XTestEventHandler::sendTextEntryEvent(QString maintext) void XTestEventHandler::sendMouseSpringEvent(int xDis, int yDis, int width, int height) { qInstallMessageHandler(MessageHandler::myMessageOutput); + Q_UNUSED(xDis); Q_UNUSED(yDis); Q_UNUSED(width); @@ -234,17 +231,13 @@ void XTestEventHandler::sendMouseSpringEvent(int xDis, int yDis, int width, int } -void XTestEventHandler::sendMouseSpringEvent(int, int) { - +void XTestEventHandler::sendMouseSpringEvent(int, int) +{ qInstallMessageHandler(MessageHandler::myMessageOutput); - } -void XTestEventHandler::printPostMessages() { - +void XTestEventHandler::printPostMessages() +{ qInstallMessageHandler(MessageHandler::myMessageOutput); - } - - diff --git a/src/eventhandlers/xtesteventhandler.h b/src/eventhandlers/xtesteventhandler.h old mode 100644 new mode 100755 index 725674c72..bd57ea282 --- a/src/eventhandlers/xtesteventhandler.h +++ b/src/eventhandlers/xtesteventhandler.h @@ -20,6 +20,7 @@ #include "baseeventhandler.h" + class JoyButtonSlot; @@ -49,7 +50,6 @@ class XTestEventHandler : public BaseEventHandler QString getIdentifier() override; void printPostMessages() override; - }; #endif // XTESTEVENTHANDLER_H diff --git a/src/extraprofilesettingsdialog.cpp b/src/extraprofilesettingsdialog.cpp old mode 100644 new mode 100755 index 8015d2dc7..7e87b3727 --- a/src/extraprofilesettingsdialog.cpp +++ b/src/extraprofilesettingsdialog.cpp @@ -34,8 +34,8 @@ ExtraProfileSettingsDialog::ExtraProfileSettingsDialog(InputDevice *device, QWid setAttribute(Qt::WA_DeleteOnClose); this->device = device; - ui->pressValueLabel->setText(QString::number(0.10, 'g', 3).append("").append(trUtf8("s"))); + if (device->getDeviceKeyPressTime() > 0) { int temppress = device->getDeviceKeyPressTime(); @@ -44,9 +44,7 @@ ExtraProfileSettingsDialog::ExtraProfileSettingsDialog(InputDevice *device, QWid } if (!device->getProfileName().isEmpty()) - { ui->profileNameLineEdit->setText(device->getProfileName()); - } connect(ui->keyPressHorizontalSlider, &QSlider::valueChanged, this, &ExtraProfileSettingsDialog::changeDeviceKeyPress); connect(ui->profileNameLineEdit, &QLineEdit::textChanged, device, &InputDevice::setProfileName); diff --git a/src/extraprofilesettingsdialog.h b/src/extraprofilesettingsdialog.h old mode 100644 new mode 100755 diff --git a/src/extraprofilesettingsdialog.ui b/src/extraprofilesettingsdialog.ui old mode 100644 new mode 100755 diff --git a/src/flashbuttonwidget.cpp b/src/flashbuttonwidget.cpp old mode 100644 new mode 100755 index 094d37f86..3cfd490e6 --- a/src/flashbuttonwidget.cpp +++ b/src/flashbuttonwidget.cpp @@ -33,7 +33,7 @@ FlashButtonWidget::FlashButtonWidget(QWidget *parent) : qInstallMessageHandler(MessageHandler::myMessageOutput); isflashing = false; - displayNames = false; + m_displayNames = false; leftAlignText = false; } @@ -43,7 +43,7 @@ FlashButtonWidget::FlashButtonWidget(bool displayNames, QWidget *parent) : qInstallMessageHandler(MessageHandler::myMessageOutput); isflashing = false; - this->displayNames = displayNames; + m_displayNames = displayNames; leftAlignText = false; } @@ -78,7 +78,7 @@ void FlashButtonWidget::refreshLabel() setText(generateLabel()); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "label has been set: " << generateLabel(); + qDebug() << "label has been set: " << generateLabel(); #endif } @@ -93,7 +93,7 @@ void FlashButtonWidget::toggleNameDisplay() { qInstallMessageHandler(MessageHandler::myMessageOutput); - displayNames = !displayNames; + m_displayNames = !m_displayNames; refreshLabel(); } @@ -101,14 +101,14 @@ void FlashButtonWidget::setDisplayNames(bool display) { qInstallMessageHandler(MessageHandler::myMessageOutput); - displayNames = display; + m_displayNames = display; } bool FlashButtonWidget::isDisplayingNames() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return displayNames; + return m_displayNames; } void FlashButtonWidget::paintEvent(QPaintEvent *event) @@ -123,7 +123,8 @@ void FlashButtonWidget::paintEvent(QPaintEvent *event) QFontMetrics fm(tempScaledFont); bool reduce = false; - while ((this->width() < fm.width(text())) && tempScaledFont.pointSize() >= 7) + + while ((this->width() < fm.width(text())) && (tempScaledFont.pointSize() >= 7)) { tempScaledFont.setPointSize(tempScaledFont.pointSize()-1); painter.setFont(tempScaledFont); @@ -132,6 +133,7 @@ void FlashButtonWidget::paintEvent(QPaintEvent *event) } bool changeFontSize = this->font().pointSize() != tempScaledFont.pointSize(); + if (changeFontSize) { if (reduce && !leftAlignText) @@ -164,5 +166,5 @@ void FlashButtonWidget::retranslateUi() bool FlashButtonWidget::ifDisplayNames() { - return displayNames; + return m_displayNames; } diff --git a/src/flashbuttonwidget.h b/src/flashbuttonwidget.h old mode 100644 new mode 100755 index 30489b6b1..cf43939a0 --- a/src/flashbuttonwidget.h +++ b/src/flashbuttonwidget.h @@ -58,7 +58,7 @@ protected slots: private: bool isflashing; - bool displayNames; + bool m_displayNames; bool leftAlignText; }; diff --git a/src/gamecontroller/gamecontroller.cpp b/src/gamecontroller/gamecontroller.cpp old mode 100644 new mode 100755 index f70f85c65..c882d8103 --- a/src/gamecontroller/gamecontroller.cpp +++ b/src/gamecontroller/gamecontroller.cpp @@ -17,6 +17,7 @@ #include "gamecontroller.h" +#include "globalvariables.h" #include "gamecontrollerdpad.h" #include "gamecontrollerset.h" #include "antimicrosettings.h" @@ -33,19 +34,19 @@ #include - -const QString GameController::xmlName = "gamecontroller"; - GameController::GameController(SDL_GameController *controller, int deviceIndex, AntiMicroSettings *settings, QObject *parent) : InputDevice(deviceIndex, settings, parent) { + qInstallMessageHandler(MessageHandler::myMessageOutput); + this->controller = controller; + SDL_Joystick *joyhandle = SDL_GameControllerGetJoystick(controller); joystickID = SDL_JoystickInstanceID(joyhandle); - for (int i = 0; i < NUMBER_JOYSETS; i++) + for (int i = 0; i < GlobalVariables::InputDevice::NUMBER_JOYSETS; i++) { GameControllerSet *controllerset = new GameControllerSet(this, i, this); getJoystick_sets().insert(i, controllerset); @@ -53,16 +54,21 @@ GameController::GameController(SDL_GameController *controller, int deviceIndex, } } + QString GameController::getName() { qInstallMessageHandler(MessageHandler::myMessageOutput); + return QString(trUtf8("Game Controller")).append(" ").append(QString::number(getRealJoyNumber())); } + QString GameController::getSDLName() { qInstallMessageHandler(MessageHandler::myMessageOutput); + QString temp = QString(); + if (controller != nullptr) { temp = SDL_GameControllerName(controller); @@ -71,21 +77,25 @@ QString GameController::getSDLName() return temp; } + QString GameController::getGUIDString() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QString temp = getRawGUIDString(); - return temp; + return getRawGUIDString(); } + QString GameController::getRawGUIDString() { qInstallMessageHandler(MessageHandler::myMessageOutput); + QString temp = QString(); + if (controller != nullptr) { SDL_Joystick *joyhandle = SDL_GameControllerGetJoystick(controller); + if (joyhandle != nullptr) { SDL_JoystickGUID tempGUID = SDL_JoystickGetGUID(joyhandle); @@ -98,15 +108,19 @@ QString GameController::getRawGUIDString() return temp; } + QString GameController::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + + return GlobalVariables::GameController::xmlName; } + void GameController::closeSDLDevice() { qInstallMessageHandler(MessageHandler::myMessageOutput); + if ((controller != nullptr) && SDL_GameControllerGetAttached(controller)) { SDL_GameControllerClose(controller); @@ -114,12 +128,15 @@ void GameController::closeSDLDevice() } } + int GameController::getNumberRawButtons() { qInstallMessageHandler(MessageHandler::myMessageOutput); + return SDL_CONTROLLER_BUTTON_MAX; } + int GameController::getNumberRawAxes() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -131,15 +148,23 @@ int GameController::getNumberRawAxes() return SDL_CONTROLLER_AXIS_MAX; } + int GameController::getNumberRawHats() { qInstallMessageHandler(MessageHandler::myMessageOutput); + return 0; } + void GameController::readJoystickConfig(QXmlStreamReader *xml) { qInstallMessageHandler(MessageHandler::myMessageOutput); + + int index = 0; + int buttonIndex = 0; + QString temp = QString(); + if (xml->isStartElement() && (xml->name() == "joystick")) { transferReset(); @@ -148,51 +173,11 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) QHash axes; QList hatButtons; - for (int i = 0; i < SDL_JoystickNumHats(this->joyhandle); i++) - { - - SDL_GameControllerButton currentButton = static_cast(i); - SDL_GameControllerButtonBind bound = SDL_GameControllerGetBindForButton(this->controller, currentButton); - - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Hat " << (i + 1); - #endif - - if (bound.bindType == SDL_CONTROLLER_BINDTYPE_HAT) - { - hatButtons.append(bound); - } - } - - for (int i = 0; i < SDL_JoystickNumButtons(this->joyhandle); i++) - { - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Button " << (i + 1); - #endif - - SDL_GameControllerButton currentButton = static_cast(i); - SDL_GameControllerButtonBind bound = SDL_GameControllerGetBindForButton(this->controller, currentButton); - if (bound.bindType == SDL_CONTROLLER_BINDTYPE_BUTTON) - { - buttons.insert(bound.value.button, currentButton); - } - } + fillContainers(buttons, axes, hatButtons); - for (int i = 0; i < SDL_JoystickNumAxes(this->joyhandle); i++) - { - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Axis " << (i + 1); - #endif + xml->readNextStartElement(); - SDL_GameControllerAxis currentAxis = static_cast(i); - SDL_GameControllerButtonBind bound = SDL_GameControllerGetBindForAxis(this->controller, currentAxis); - if (bound.bindType == SDL_CONTROLLER_BINDTYPE_AXIS) - { - axes.insert(bound.value.axis, currentAxis); - } - } - xml->readNextStartElement(); while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != "joystick"))) { if ((xml->name() == "sets") && xml->isStartElement()) @@ -205,6 +190,7 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) { int index = xml->attributes().value("index").toString().toInt(); index = index - 1; + if ((index >= 0) && (index < getJoystick_sets().size())) { GameControllerSet *currentSet = qobject_cast(getJoystick_sets().value(index)); // static_cast @@ -226,17 +212,19 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) bool vdpadNameExists = false; xml->readNextStartElement(); - while (!xml->atEnd() && (!xml->isEndElement() && xml->name() != "names")) + + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != "names"))) { if ((xml->name() == "buttonname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; + assignVariablesShort(xml, index, temp); + + if ((index >= 0) && !temp.isEmpty()) { SDL_GameControllerButton current = buttons.value(index); - if (current) + + if (static_cast(current) != -1) { setButtonName(current, temp); } @@ -244,37 +232,30 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) } else if ((xml->name() == "axisbuttonname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - int buttonIndex = xml->attributes().value("button").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; - buttonIndex = buttonIndex - 1; + assignVariables(xml, index, buttonIndex, temp, true); + + if ((index >= 0) && !temp.isEmpty()) { SDL_GameControllerAxis current = axes.value(index); - if (current) + int currentInt = static_cast(current); + + switch (currentInt) { - if (current == SDL_CONTROLLER_AXIS_LEFTX) - { - setStickButtonName(0, buttonIndex, temp); - } - else if (current == SDL_CONTROLLER_AXIS_LEFTY) + case SDL_CONTROLLER_AXIS_LEFTX: + case SDL_CONTROLLER_AXIS_LEFTY: { setStickButtonName(0, buttonIndex, temp); + break; } - else if (current == SDL_CONTROLLER_AXIS_RIGHTX) - { - setStickButtonName(1, buttonIndex, temp); - } - else if (current == SDL_CONTROLLER_AXIS_RIGHTY) + case SDL_CONTROLLER_AXIS_RIGHTX: + case SDL_CONTROLLER_AXIS_RIGHTY: { setStickButtonName(1, buttonIndex, temp); + break; } - else if (current == SDL_CONTROLLER_AXIS_TRIGGERLEFT) - { - setAxisName(current, temp); - } - else if (current == SDL_CONTROLLER_AXIS_TRIGGERRIGHT) + case SDL_CONTROLLER_AXIS_TRIGGERLEFT: + case SDL_CONTROLLER_AXIS_TRIGGERRIGHT: { setAxisName(current, temp); } @@ -283,10 +264,9 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) } else if ((xml->name() == "controlstickbuttonname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - int buttonIndex = xml->attributes().value("button").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; + assignVariables(xml, index, buttonIndex, temp, false); + + if ((index >= 0) && !temp.isEmpty()) { setStickButtonName(index, buttonIndex, temp); @@ -294,18 +274,19 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) } else if ((xml->name() == "dpadbuttonname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - int buttonIndex = xml->attributes().value("button").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; + assignVariables(xml, index, buttonIndex, temp, false); + + if ((index >= 0) && !temp.isEmpty()) { bool found = false; QListIterator iter(hatButtons); SDL_GameControllerButtonBind current; + while (iter.hasNext()) { current = iter.next(); + if (current.value.hat.hat == index) { found = true; @@ -316,10 +297,12 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) if (found) { VDPad *dpad = getActiveSetJoystick()->getVDPad(0); + if (dpad != nullptr) { JoyDPadButton *dpadbutton = dpad->getJoyButton(buttonIndex); - if ((dpad != nullptr) && dpadbutton->getActionName().isEmpty()) + + if ((dpad != nullptr) && (dpadbutton != nullptr) && dpadbutton->getActionName().isEmpty()) { setVDPadButtonName(index, buttonIndex, temp); } @@ -329,15 +312,15 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) } else if ((xml->name() == "vdpadbuttonname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - int buttonIndex = xml->attributes().value("button").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; + assignVariables(xml, index, buttonIndex, temp, false); + + if ((index >= 0) && !temp.isEmpty()) { bool found = false; QListIterator iter(hatButtons); SDL_GameControllerButtonBind current; + while (iter.hasNext()) { current = iter.next(); @@ -351,10 +334,12 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) if (found) { VDPad *dpad = getActiveSetJoystick()->getVDPad(0); + if (dpad != nullptr) { JoyDPadButton *dpadbutton = dpad->getJoyButton(buttonIndex); - if ((dpad != nullptr) && dpadbutton->getActionName().isEmpty()) + + if ((dpad != nullptr) && (dpadbutton != nullptr) && dpadbutton->getActionName().isEmpty()) { setVDPadButtonName(index, buttonIndex, temp); } @@ -364,9 +349,9 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) } else if ((xml->name() == "axisname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; + assignVariablesShort(xml, index, temp); + + if ((index >= 0) && !temp.isEmpty()) { if (axes.contains(index)) @@ -378,9 +363,9 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) } else if ((xml->name() == "controlstickname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; + assignVariablesShort(xml, index, temp); + + if ((index >= 0) && !temp.isEmpty()) { setStickName(index, temp); @@ -388,73 +373,11 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) } else if ((xml->name() == "dpadname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; - if ((index >= 0) && !temp.isEmpty() && !vdpadNameExists) - { - bool found = false; - QListIterator iter(hatButtons); - SDL_GameControllerButtonBind current; - while (iter.hasNext()) - { - current = iter.next(); - if (current.value.hat.hat == index) - { - found = true; - iter.toBack(); - } - } - - if (found) - { - dpadNameExists = true; - - VDPad *dpad = getActiveSetJoystick()->getVDPad(0); - if (dpad != nullptr) - { - if (dpad->getDpadName().isEmpty()) - { - setVDPadName(index, temp); - } - } - } - } + readJoystickConfigXmlLong(hatButtons, dpadNameExists, vdpadNameExists, xml); } else if ((xml->name() == "vdpadname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; - if ((index >= 0) && !temp.isEmpty() && !dpadNameExists) - { - bool found = false; - QListIterator iter(hatButtons); - SDL_GameControllerButtonBind current; - while (iter.hasNext()) - { - current = iter.next(); - if (current.value.hat.hat == index) - { - found = true; - iter.toBack(); - } - } - - if (found) - { - vdpadNameExists = true; - - VDPad *dpad = getActiveSetJoystick()->getVDPad(0); - if (dpad != nullptr) - { - if (dpad->getDpadName().isEmpty()) - { - setVDPadName(index, temp); - } - } - } - } + readJoystickConfigXmlLong(hatButtons, dpadNameExists, vdpadNameExists, xml); } else { @@ -469,10 +392,9 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) { QString temptext = xml->readElementText(); int tempchoice = temptext.toInt(); - if (tempchoice >= 10) - { - this->setDeviceKeyPressTime(tempchoice); - } + + if (tempchoice >= 10) this->setDeviceKeyPressTime(tempchoice); + } else if ((xml->name() == "profilename") && xml->isStartElement()) { @@ -493,14 +415,139 @@ void GameController::readJoystickConfig(QXmlStreamReader *xml) } +inline void GameController::assignVariables(QXmlStreamReader *xml, int& index, int& buttonIndex, QString& temp, bool buttonDecreased) +{ + index = xml->attributes().value("index").toString().toInt(); + buttonIndex = xml->attributes().value("button").toString().toInt(); + temp = xml->readElementText(); + index = index - 1; + + if (buttonDecreased) buttonIndex = buttonIndex - 1; +} + + +inline void GameController::assignVariablesShort(QXmlStreamReader *xml, int& index, QString& temp) +{ + index = xml->attributes().value("index").toString().toInt(); + temp = xml->readElementText(); + index = index - 1; +} + + +void GameController::fillContainers(QHash &buttons, QHash &axes, QList &hatButtons) +{ + + for (int i = 0; i < SDL_JoystickNumHats(getJoyHandle()); i++) + { + SDL_GameControllerButton currentButton = static_cast(i); + SDL_GameControllerButtonBind bound = SDL_GameControllerGetBindForButton(this->controller, currentButton); + + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "Hat " << (i + 1); + #endif + + if (bound.bindType == SDL_CONTROLLER_BINDTYPE_HAT) + { + hatButtons.append(bound); + } + } + + for (int i = 0; i < SDL_JoystickNumButtons(getJoyHandle()); i++) + { + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "Button " << (i + 1); + #endif + + SDL_GameControllerButton currentButton = static_cast(i); + SDL_GameControllerButtonBind bound = SDL_GameControllerGetBindForButton(this->controller, currentButton); + + if (bound.bindType == SDL_CONTROLLER_BINDTYPE_BUTTON) + { + buttons.insert(bound.value.button, currentButton); + } + } + + for (int i = 0; i < SDL_JoystickNumAxes(getJoyHandle()); i++) + { + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "Axis " << (i + 1); + #endif + + SDL_GameControllerAxis currentAxis = static_cast(i); + SDL_GameControllerButtonBind bound = SDL_GameControllerGetBindForAxis(this->controller, currentAxis); + + if (bound.bindType == SDL_CONTROLLER_BINDTYPE_AXIS) + { + axes.insert(bound.value.axis, currentAxis); + } + } +} + + +void GameController::readJoystickConfigXmlLong(QList& hatButtons, bool& dpadNameExists, bool& vdpadNameExists, QXmlStreamReader *xml) +{ + int index = -1; + bool first = false; + bool second = false; + QString temp = QString(); + + assignVariablesShort(xml, index, temp); + + + if (xml->name() == "vdpadname") + { + first = dpadNameExists; + second = vdpadNameExists; + } + else if (xml->name() == "dpadname") + { + first = vdpadNameExists; + second = dpadNameExists; + } + + if ((index >= 0) && !temp.isEmpty() && !first) + { + bool found = false; + QListIterator iter(hatButtons); + SDL_GameControllerButtonBind current; + + while (iter.hasNext()) + { + current = iter.next(); + + if (current.value.hat.hat == index) + { + found = true; + iter.toBack(); + } + } + + if (found) + { + second = true; + VDPad *dpad = getActiveSetJoystick()->getVDPad(0); + + if (dpad != nullptr) + { + if (dpad->getDpadName().isEmpty()) + setVDPadName(index, temp); + } + } + } +} + + void GameController::readConfig(QXmlStreamReader *xml) { qInstallMessageHandler(MessageHandler::myMessageOutput); + + if (xml->isStartElement() && (xml->name() == getXmlName())) { transferReset(); xml->readNextStartElement(); + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != getXmlName()))) { if ((xml->name() == "sets") && xml->isStartElement()) @@ -513,6 +560,7 @@ void GameController::readConfig(QXmlStreamReader *xml) { int index = xml->attributes().value("index").toString().toInt(); index = index - 1; + if ((index >= 0) && (index < getJoystick_sets().size())) { getJoystick_sets().value(index)->readConfig(xml); @@ -530,83 +578,36 @@ void GameController::readConfig(QXmlStreamReader *xml) else if ((xml->name() == "names") && xml->isStartElement()) { xml->readNextStartElement(); + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != "names"))) { if ((xml->name() == "buttonname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; - if ((index >= 0) && !temp.isEmpty()) - { - setButtonName(index, temp); - } + readXmlNamesShort("buttonname", xml); } else if ((xml->name() == "triggerbuttonname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - int buttonIndex = xml->attributes().value("button").toString().toInt(); - QString temp = xml->readElementText(); - index = (index - 1) + SDL_CONTROLLER_AXIS_TRIGGERLEFT; - buttonIndex = buttonIndex - 1; - if (((index == SDL_CONTROLLER_AXIS_TRIGGERLEFT) || - (index == SDL_CONTROLLER_AXIS_TRIGGERRIGHT)) && !temp.isEmpty()) - { - setAxisButtonName(index, buttonIndex, temp); - } + readXmlNamesLong("triggerbuttonname", xml); } else if ((xml->name() == "controlstickbuttonname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - int buttonIndex = xml->attributes().value("button").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; - if ((index >= 0) && !temp.isEmpty()) - { - setStickButtonName(index, buttonIndex, temp); - } + readXmlNamesMiddle("controlstickbuttonname", xml); } else if ((xml->name() == "dpadbuttonname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - int buttonIndex = xml->attributes().value("button").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; - if ((index >= 0) && !temp.isEmpty()) - { - setVDPadButtonName(index, buttonIndex, temp); - } + readXmlNamesMiddle("dpadbuttonname", xml); } else if ((xml->name() == "triggername") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - QString temp = xml->readElementText(); - index = (index - 1) + SDL_CONTROLLER_AXIS_TRIGGERLEFT; - if ((index == SDL_CONTROLLER_AXIS_TRIGGERLEFT || - index == SDL_CONTROLLER_AXIS_TRIGGERRIGHT) && !temp.isEmpty()) - { - setAxisName(index, temp); - } + readXmlNamesLong("triggername", xml); } else if ((xml->name() == "controlstickname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; - if ((index >= 0) && !temp.isEmpty()) - { - setStickName(index, temp); - } + readXmlNamesShort("controlstickname", xml); } else if ((xml->name() == "dpadname") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - QString temp = xml->readElementText(); - index = index - 1; - if ((index >= 0) && !temp.isEmpty()) - { - setVDPadName(index, temp); - } + readXmlNamesShort("dpadname", xml); } else { @@ -621,6 +622,7 @@ void GameController::readConfig(QXmlStreamReader *xml) { QString temptext = xml->readElementText(); int tempchoice = temptext.toInt(); + if (tempchoice >= 10) { this->setDeviceKeyPressTime(tempchoice); @@ -641,6 +643,7 @@ void GameController::readConfig(QXmlStreamReader *xml) } reInitButtons(); + } else if (xml->isStartElement() && (xml->name() == "joystick")) { @@ -648,9 +651,63 @@ void GameController::readConfig(QXmlStreamReader *xml) } } + +void GameController::readXmlNamesShort(QString name, QXmlStreamReader *xml) +{ + int index = -1; + QString temp = QString(); + + assignVariablesShort(xml, index, temp); + + if ((index >= 0) && !temp.isEmpty()) + { + if (name == "buttonname") setButtonName(index, temp); + else if (name == "controlstickname") setStickName(index, temp); + else if (name == "dpadname") setVDPadName(index, temp); + } +} + + +void GameController::readXmlNamesMiddle(QString name, QXmlStreamReader *xml) +{ + int index = -1; + int buttonIndex = -1; + QString temp = QString(); + + assignVariables(xml, index, buttonIndex, temp, false); + + if ((name == "dpadbuttonname") && (index >= 0) && !temp.isEmpty()) setVDPadButtonName(index, buttonIndex, temp); + else if ((name == "controlstickbuttonname") && (index >= 0) && !temp.isEmpty()) setStickButtonName(index, buttonIndex, temp); +} + + +void GameController::readXmlNamesLong(QString name, QXmlStreamReader *xml) +{ + int index = xml->attributes().value("index").toString().toInt(); + QString temp = xml->readElementText(); + index = (index - 1) + SDL_CONTROLLER_AXIS_TRIGGERLEFT; + + if ((index == SDL_CONTROLLER_AXIS_TRIGGERLEFT || + index == SDL_CONTROLLER_AXIS_TRIGGERRIGHT) && !temp.isEmpty()) + { + if (name == "triggername") + { + setAxisName(index, temp); + } + else if (name == "triggerbuttonname") + { + int buttonIndex = xml->attributes().value("button").toString().toInt(); + buttonIndex = buttonIndex - 1; + setAxisButtonName(index, buttonIndex, temp); + } + } +} + + void GameController::writeConfig(QXmlStreamWriter *xml) { qInstallMessageHandler(MessageHandler::myMessageOutput); + xml->writeStartElement(getXmlName()); xml->writeAttribute("configversion", QString::number(PadderCommon::LATESTCONFIGFILEVERSION)); xml->writeAttribute("appversion", PadderCommon::programVersion); @@ -668,9 +725,38 @@ void GameController::writeConfig(QXmlStreamWriter *xml) xml->writeStartElement("names"); // SetJoystick *tempSet = getActiveSetJoystick(); - for (int i=0; i < getNumberButtons(); i++) + + writeXmlForButtons(tempSet, xml); + writeXmlForAxes(tempSet, xml); + writeXmlForSticks(tempSet, xml); + writeXmlForVDpad(xml); + + xml->writeEndElement(); // + + if ((keyPressTime > 0) && (keyPressTime != GlobalVariables::InputDevice::DEFAULTKEYPRESSTIME)) + { + xml->writeTextElement("keyPressTime", QString::number(keyPressTime)); + } + + xml->writeStartElement("sets"); + + for (int i = 0; i < getJoystick_sets().size(); i++) + { + getJoystick_sets().value(i)->writeConfig(xml); + } + + xml->writeEndElement(); + + xml->writeEndElement(); +} + + +void GameController::writeXmlForButtons(SetJoystick *tempSet, QXmlStreamWriter *xml) +{ + for (int i = 0; i < getNumberButtons(); i++) { JoyButton *button = tempSet->getJoyButton(i); + if ((button != nullptr) && !button->getButtonName().isEmpty()) { xml->writeStartElement("buttonname"); @@ -679,10 +765,15 @@ void GameController::writeConfig(QXmlStreamWriter *xml) xml->writeEndElement(); } } +} - for (int i=0; i < getNumberAxes(); i++) + +void GameController::writeXmlForAxes(SetJoystick *tempSet, QXmlStreamWriter *xml) +{ + for (int i = 0; i < getNumberAxes(); i++) { JoyAxis *axis = tempSet->getJoyAxis(i); + if (axis != nullptr) { if (!axis->getAxisName().isEmpty()) @@ -693,31 +784,33 @@ void GameController::writeConfig(QXmlStreamWriter *xml) xml->writeEndElement(); } - JoyAxisButton *naxisbutton = axis->getNAxisButton(); - if (!naxisbutton->getButtonName().isEmpty()) - { - xml->writeStartElement("axisbuttonname"); - xml->writeAttribute("index", QString::number(axis->getRealJoyIndex())); - xml->writeAttribute("button", QString::number(naxisbutton->getRealJoyNumber())); - xml->writeCharacters(naxisbutton->getButtonName()); - xml->writeEndElement(); - } + writeXmlAxBtn(axis, axis->getNAxisButton(), xml); + writeXmlAxBtn(axis, axis->getPAxisButton(), xml); - JoyAxisButton *paxisbutton = axis->getPAxisButton(); - if (!paxisbutton->getButtonName().isEmpty()) - { - xml->writeStartElement("axisbuttonname"); - xml->writeAttribute("index", QString::number(axis->getRealJoyIndex())); - xml->writeAttribute("button", QString::number(paxisbutton->getRealJoyNumber())); - xml->writeCharacters(paxisbutton->getButtonName()); - xml->writeEndElement(); - } } } +} - for (int i=0; i < getNumberSticks(); i++) + +void GameController::writeXmlAxBtn(JoyAxis *axis, JoyAxisButton *axisbutton, QXmlStreamWriter *xml) +{ + if (!axisbutton->getButtonName().isEmpty()) + { + xml->writeStartElement("axisbuttonname"); + xml->writeAttribute("index", QString::number(axis->getRealJoyIndex())); + xml->writeAttribute("button", QString::number(axisbutton->getRealJoyNumber())); + xml->writeCharacters(axisbutton->getButtonName()); + xml->writeEndElement(); + } +} + + +void GameController::writeXmlForSticks(SetJoystick *tempSet, QXmlStreamWriter *xml) +{ + for (int i = 0; i < getNumberSticks(); i++) { JoyControlStick *stick = tempSet->getJoyStick(i); + if (stick != nullptr) { if (!stick->getStickName().isEmpty()) @@ -730,10 +823,12 @@ void GameController::writeConfig(QXmlStreamWriter *xml) QHash *buttons = stick->getButtons(); QHashIterator iter(*buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); - if (button && !button->getButtonName().isEmpty()) + + if ((button != nullptr) && !button->getButtonName().isEmpty()) { xml->writeStartElement("controlstickbuttonname"); xml->writeAttribute("index", QString::number(stick->getRealJoyIndex())); @@ -744,189 +839,144 @@ void GameController::writeConfig(QXmlStreamWriter *xml) } } } +} - for (int i=0; i < getNumberVDPads(); i++) - { - VDPad *vdpad = getActiveSetJoystick()->getVDPad(i); - if (vdpad != nullptr) + +void GameController::writeXmlForVDpad(QXmlStreamWriter *xml) +{ + for (int i = 0; i < getNumberVDPads(); i++) { - if (!vdpad->getDpadName().isEmpty()) - { - xml->writeStartElement("dpadname"); - xml->writeAttribute("index", QString::number(vdpad->getRealJoyNumber())); - xml->writeCharacters(vdpad->getDpadName()); - xml->writeEndElement(); - } + VDPad *vdpad = getActiveSetJoystick()->getVDPad(i); - QHash *temp = vdpad->getButtons(); - QHashIterator iter(*temp); - while (iter.hasNext()) + if (vdpad != nullptr) { - JoyDPadButton *button = iter.next().value(); - if ((button != nullptr) && !button->getButtonName().isEmpty()) + if (!vdpad->getDpadName().isEmpty()) { - xml->writeStartElement("dpadbutton"); + xml->writeStartElement("dpadname"); xml->writeAttribute("index", QString::number(vdpad->getRealJoyNumber())); - xml->writeAttribute("button", QString::number(button->getRealJoyNumber())); - xml->writeCharacters(button->getButtonName()); + xml->writeCharacters(vdpad->getDpadName()); xml->writeEndElement(); } - } - } - } - xml->writeEndElement(); // - if ((keyPressTime > 0) && (keyPressTime != DEFAULTKEYPRESSTIME)) - { - xml->writeTextElement("keyPressTime", QString::number(keyPressTime)); - } + QHash *temp = vdpad->getButtons(); + QHashIterator iter(*temp); - xml->writeStartElement("sets"); - for (int i=0; i < getJoystick_sets().size(); i++) - { - getJoystick_sets().value(i)->writeConfig(xml); - } - xml->writeEndElement(); + while (iter.hasNext()) + { + JoyDPadButton *button = iter.next().value(); - xml->writeEndElement(); + if ((button != nullptr) && !button->getButtonName().isEmpty()) + { + xml->writeStartElement("dpadbutton"); + xml->writeAttribute("index", QString::number(vdpad->getRealJoyNumber())); + xml->writeAttribute("button", QString::number(button->getRealJoyNumber())); + xml->writeCharacters(button->getButtonName()); + xml->writeEndElement(); + } + } + } + } } + QString GameController::getBindStringForAxis(int index, bool) { qInstallMessageHandler(MessageHandler::myMessageOutput); + QString temp = QString(); + SDL_GameControllerButtonBind bind = SDL_GameControllerGetBindForAxis(controller, static_cast(index)); - if (bind.bindType != SDL_CONTROLLER_BINDTYPE_NONE) - { - if (bind.bindType == SDL_CONTROLLER_BINDTYPE_BUTTON) - { - temp.append(QString("Button %1").arg(bind.value.button)); // bind.value.button + offset - } - else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS) - { - temp.append(QString("Axis %1").arg(bind.value.axis + 1)); - } + + if (bind.bindType == SDL_CONTROLLER_BINDTYPE_BUTTON) + { + temp.append(QString("Button %1").arg(bind.value.button)); + } + else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS) + { + temp.append(QString("Axis %1").arg(bind.value.axis + 1)); } + return temp; } + QString GameController::getBindStringForButton(int index, bool trueIndex) { qInstallMessageHandler(MessageHandler::myMessageOutput); + QString temp = QString(); + SDL_GameControllerButtonBind bind = SDL_GameControllerGetBindForButton(controller, static_cast(index)); - if (bind.bindType != SDL_CONTROLLER_BINDTYPE_NONE) - { - int offset = trueIndex ? 0 : 1; - if (bind.bindType == SDL_CONTROLLER_BINDTYPE_BUTTON) - { - temp.append(QString("Button %1").arg(bind.value.button + offset)); - } - else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS) - { - temp.append(QString("Axis %1").arg(bind.value.axis + offset)); - } - else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_HAT) - { - temp.append(QString("Hat %1.%2").arg(bind.value.hat.hat + offset) + int offset = trueIndex ? 0 : 1; + int bindInt = static_cast(bind.bindType); + + switch(bindInt) { + + case SDL_CONTROLLER_BINDTYPE_BUTTON: + temp.append(QString("Button %1").arg(bind.value.button + offset)); + break; + + + case SDL_CONTROLLER_BINDTYPE_AXIS: + temp.append(QString("Axis %1").arg(bind.value.axis + offset)); + break; + + + case SDL_CONTROLLER_BINDTYPE_HAT: + temp.append(QString("Hat %1.%2").arg(bind.value.hat.hat + offset) .arg(bind.value.hat.hat_mask)); - } + break; } + return temp; } + SDL_GameControllerButtonBind GameController::getBindForAxis(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); - SDL_GameControllerButtonBind bind = SDL_GameControllerGetBindForAxis(controller, static_cast(index)); - return bind; + + return SDL_GameControllerGetBindForAxis(controller, static_cast(index)); } + SDL_GameControllerButtonBind GameController::getBindForButton(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); - SDL_GameControllerButtonBind bind = SDL_GameControllerGetBindForButton(controller, static_cast(index)); - return bind; + + return SDL_GameControllerGetBindForButton(controller, static_cast(index)); } -void GameController::buttonClickEvent(int buttonindex) + +void GameController::buttonClickEvent(int) { qInstallMessageHandler(MessageHandler::myMessageOutput); - SDL_GameControllerButtonBind bind = getBindForButton(buttonindex); // static_cast - if (bind.bindType != SDL_CONTROLLER_BINDTYPE_NONE) - { - if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS) - { - //emit rawAxisButtonClick(bind.value.axis, 0); - //emit rawAxisActivated(bind.value.axis, JoyAxis::AXISMAX); - } - else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_BUTTON) - { - //emit rawButtonClick(bind.value.button); - } - else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_HAT) - { - //emit rawDPadButtonClick(bind.value.hat.hat, bind.value.hat.hat_mask); - } - } } -void GameController::buttonReleaseEvent(int buttonindex) + +void GameController::buttonReleaseEvent(int) { qInstallMessageHandler(MessageHandler::myMessageOutput); - SDL_GameControllerButtonBind bind = getBindForButton(buttonindex); // static_cast - if (bind.bindType != SDL_CONTROLLER_BINDTYPE_NONE) - { - if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS) - { - //emit rawAxisButtonRelease(bind.value.axis, 0); - } - else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_BUTTON) - { - //emit rawButtonRelease(bind.value.button); - } - else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_HAT) - { - //emit rawDPadButtonRelease(bind.value.hat.hat, bind.value.hat.hat_mask); - } - } } -void GameController::axisActivatedEvent(int setindex, int axisindex, int value) + +void GameController::axisActivatedEvent(int, int, int) { qInstallMessageHandler(MessageHandler::myMessageOutput); - Q_UNUSED(setindex); - Q_UNUSED(value); - - SDL_GameControllerButtonBind bind = getBindForAxis(axisindex); // static_cast - if (bind.bindType != SDL_CONTROLLER_BINDTYPE_NONE) - { - if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS) - { - //emit rawAxisButtonClick(bind.value.axis, 0); - //emit rawAxisActivated(bind.value.axis, value); - } - else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_BUTTON) - { - //emit rawButtonClick(bind.value.button); - } - else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_HAT) - { - //emit rawDPadButtonClick(bind.value.hat.hat, bind.value.hat.hat_mask); - } - } } + SDL_JoystickID GameController::getSDLJoystickID() { qInstallMessageHandler(MessageHandler::myMessageOutput); + return joystickID; } @@ -937,9 +987,11 @@ SDL_JoystickID GameController::getSDLJoystickID() bool GameController::isGameController() { qInstallMessageHandler(MessageHandler::myMessageOutput); + return true; } + /** * @brief Check if GUID passed matches the expected GUID for a device. * Needed for xinput GUID abstraction. @@ -949,20 +1001,17 @@ bool GameController::isGameController() bool GameController::isRelevantGUID(QString tempGUID) { qInstallMessageHandler(MessageHandler::myMessageOutput); - bool result = false; - if (InputDevice::isRelevantGUID(tempGUID))// || isEmptyGUID(tempGUID)) - { - result = true; - } - - return result; + return InputDevice::isRelevantGUID(tempGUID); } + void GameController::rawButtonEvent(int index, bool pressed) { qInstallMessageHandler(MessageHandler::myMessageOutput); + bool knownbutton = getRawbuttons().contains(index); + if (!knownbutton && pressed) { rawbuttons.insert(index, pressed); @@ -975,9 +1024,11 @@ void GameController::rawButtonEvent(int index, bool pressed) } } + void GameController::rawAxisEvent(int index, int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); + bool knownaxis = getAxisvalues().contains(index); if (!knownaxis && (fabs(value) > rawAxisDeadZone)) @@ -994,10 +1045,13 @@ void GameController::rawAxisEvent(int index, int value) emit rawAxisMoved(index, value); } + void GameController::rawDPadEvent(int index, int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); + bool knowndpad = getDpadvalues().contains(index); + if (!knowndpad && (value != 0)) { dpadvalues.insert(index, value); @@ -1016,16 +1070,19 @@ QHash const& GameController::getRawbuttons() { return rawbuttons; } + QHash const& GameController::getAxisvalues() { return axisvalues; } + QHash const& GameController::getDpadvalues() { return dpadvalues; } + SDL_GameController* GameController::getController() const { return controller; diff --git a/src/gamecontroller/gamecontroller.h b/src/gamecontroller/gamecontroller.h old mode 100644 new mode 100755 index 325aa9c2e..7e1bd7022 --- a/src/gamecontroller/gamecontroller.h +++ b/src/gamecontroller/gamecontroller.h @@ -34,21 +34,21 @@ class GameController : public InputDevice public: explicit GameController(SDL_GameController *controller, int deviceIndex, AntiMicroSettings *settings, QObject *parent = nullptr); - virtual QString getName(); - virtual QString getSDLName(); + virtual QString getName() override; + virtual QString getSDLName() override; // GUID available on SDL 2. - virtual QString getGUIDString(); - virtual QString getRawGUIDString(); + virtual QString getGUIDString() override; + virtual QString getRawGUIDString() override; - virtual QString getXmlName(); - virtual bool isGameController(); - virtual void closeSDLDevice(); - virtual SDL_JoystickID getSDLJoystickID(); + virtual QString getXmlName() override; + virtual bool isGameController() override; + virtual void closeSDLDevice() override; + virtual SDL_JoystickID getSDLJoystickID() override; - virtual int getNumberRawButtons(); - virtual int getNumberRawAxes(); - virtual int getNumberRawHats(); + virtual int getNumberRawButtons() override; + virtual int getNumberRawAxes() override; + virtual int getNumberRawHats() override; QString getBindStringForAxis(int index, bool trueIndex=true); QString getBindStringForButton(int index, bool trueIndex=true); @@ -67,19 +67,17 @@ class GameController : public InputDevice SDL_GameController *getController() const; - static const QString xmlName; - protected: void readJoystickConfig(QXmlStreamReader *xml); public slots: - virtual void readConfig(QXmlStreamReader *xml); - virtual void writeConfig(QXmlStreamWriter *xml); + virtual void readConfig(QXmlStreamReader *xml) override; + virtual void writeConfig(QXmlStreamWriter *xml) override; protected slots: - virtual void axisActivatedEvent(int setindex, int axisindex, int value); - virtual void buttonClickEvent(int buttonindex); - virtual void buttonReleaseEvent(int buttonindex); + virtual void axisActivatedEvent(int setindex, int axisindex, int value) override; + virtual void buttonClickEvent(int buttonindex) override; + virtual void buttonReleaseEvent(int buttonindex) override; private: QHash rawbuttons; @@ -89,6 +87,21 @@ protected slots: SDL_JoystickID joystickID; SDL_GameController *controller; + void writeXmlForButtons(SetJoystick *tempSet, QXmlStreamWriter *xml); + void writeXmlForAxes(SetJoystick *tempSet, QXmlStreamWriter *xml); + void writeXmlAxBtn(JoyAxis *axis, JoyAxisButton *naxisbutton, QXmlStreamWriter *xml); + void writeXmlForSticks(SetJoystick *tempSet, QXmlStreamWriter *xml); + void writeXmlForVDpad(QXmlStreamWriter *xml); + void readXmlNamesShort(QString name, QXmlStreamReader *xml); + void readXmlNamesMiddle(QString name, QXmlStreamReader *xml); + void readXmlNamesLong(QString name, QXmlStreamReader *xml); + void readJoystickConfigXmlLong(QList& hatButtons, bool& dpadNameExists, bool& vdpadNameExists, QXmlStreamReader *xml); + void fillContainers(QHash &buttons, QHash &axes, QList &hatButtons); + + inline void assignVariables(QXmlStreamReader *xml, int& index, int& buttonIndex, QString& temp, bool buttonDecreased); + inline void assignVariablesShort(QXmlStreamReader *xml, int& index, QString& temp); + + }; #endif // GAMECONTROLLER_H diff --git a/src/gamecontroller/gamecontrollerdpad.cpp b/src/gamecontroller/gamecontrollerdpad.cpp old mode 100644 new mode 100755 index 909cf63e6..f24e983d0 --- a/src/gamecontroller/gamecontrollerdpad.cpp +++ b/src/gamecontroller/gamecontrollerdpad.cpp @@ -17,6 +17,7 @@ #include "gamecontrollerdpad.h" +#include "globalvariables.h" #include "messagehandler.h" #include "setjoystick.h" #include "joybutton.h" @@ -24,8 +25,6 @@ #include #include -const QString GameControllerDPad::xmlName = "dpad"; - GameControllerDPad::GameControllerDPad(JoyButton *upButton, JoyButton *downButton, JoyButton *leftButton, JoyButton *rightButton, int index, int originset, SetJoystick *parentSet, QObject *parent) : @@ -34,9 +33,11 @@ GameControllerDPad::GameControllerDPad(JoyButton *upButton, JoyButton *downButto qInstallMessageHandler(MessageHandler::myMessageOutput); } + QString GameControllerDPad::getName(bool forceFullFormat, bool displayName) { qInstallMessageHandler(MessageHandler::myMessageOutput); + QString label = QString(); if (!getDpadName().isEmpty() && displayName) @@ -66,21 +67,27 @@ QString GameControllerDPad::getName(bool forceFullFormat, bool displayName) return label; } + QString GameControllerDPad::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + + return GlobalVariables::GameControllerDPad::xmlName; } + void GameControllerDPad::readJoystickConfig(QXmlStreamReader *xml) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (xml->isStartElement() && (xml->name() == VDPad::xmlName)) + + if (xml->isStartElement() && (xml->name() == GlobalVariables::VDPad::xmlName)) { xml->readNextStartElement(); - while (!xml->atEnd() && (!xml->isEndElement() && xml->name() != VDPad::xmlName)) + + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != GlobalVariables::VDPad::xmlName))) { bool found = readMainConfig(xml); + if (!found) { xml->skipCurrentElement(); diff --git a/src/gamecontroller/gamecontrollerdpad.h b/src/gamecontroller/gamecontrollerdpad.h old mode 100644 new mode 100755 index 196443e31..b55b9363a --- a/src/gamecontroller/gamecontrollerdpad.h +++ b/src/gamecontroller/gamecontrollerdpad.h @@ -39,8 +39,6 @@ class GameControllerDPad : public VDPad void readJoystickConfig(QXmlStreamReader *xml); - static const QString xmlName; - }; #endif // GAMECONTROLLERDPAD_H diff --git a/src/gamecontroller/gamecontrollerset.cpp b/src/gamecontroller/gamecontrollerset.cpp old mode 100644 new mode 100755 index 7cba172e4..5e2e670c9 --- a/src/gamecontroller/gamecontrollerset.cpp +++ b/src/gamecontroller/gamecontrollerset.cpp @@ -26,16 +26,25 @@ #include #include + GameControllerSet::GameControllerSet(InputDevice *device, int index, QObject *parent) : SetJoystick(device, index, false, parent) { qInstallMessageHandler(MessageHandler::myMessageOutput); - reset(); + + resetSticks(); } + void GameControllerSet::reset() { qInstallMessageHandler(MessageHandler::myMessageOutput); + + resetSticks(); +} + +void GameControllerSet::resetSticks() +{ SetJoystick::reset(); populateSticksDPad(); } @@ -43,6 +52,7 @@ void GameControllerSet::reset() void GameControllerSet::populateSticksDPad() { qInstallMessageHandler(MessageHandler::myMessageOutput); + // Left Stick Assignment JoyAxis *axisX = getJoyAxis(SDL_CONTROLLER_AXIS_LEFTX); JoyAxis *axisY = getJoyAxis(SDL_CONTROLLER_AXIS_LEFTY); @@ -85,18 +95,72 @@ void GameControllerSet::populateSticksDPad() getJoyAxis(SDL_CONTROLLER_AXIS_TRIGGERRIGHT)->setDefaultAxisName(trUtf8("R Trigger")); } + +template +void readConf(T* x, QXmlStreamReader *xml) +{ + if (x != nullptr) + { + x->readConfig(xml); + } + else + { + xml->skipCurrentElement(); + } +} + + +void GameControllerSet::readConfDpad(QXmlStreamReader *xml, QList &hatButtons, bool vdpadExists, bool dpadExists) +{ + int index = xml->attributes().value("index").toString().toInt(); + index = index - 1; + bool found = false; + QListIterator iter(hatButtons); + SDL_GameControllerButtonBind current; + + while (iter.hasNext()) + { + current = iter.next(); + + if (current.value.hat.hat == index) + { + found = true; + iter.toBack(); + } + } + + VDPad *dpad = nullptr; + + if (found) + { + dpad = getVDPad(0); + } + + if ((dpad != nullptr) && !vdpadExists) + { + dpadExists = true; + dpad->readConfig(xml); + } + else + { + xml->skipCurrentElement(); + } +} + + void GameControllerSet::readJoystickConfig(QXmlStreamReader *xml, QHash &buttons, QHash &axes, QList &hatButtons) { + qInstallMessageHandler(MessageHandler::myMessageOutput); if (xml->isStartElement() && (xml->name() == "set")) { xml->readNextStartElement(); - while (!xml->atEnd() && (!xml->isEndElement() && xml->name() != "set")) + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != "set"))) { bool dpadExists = false; bool vdpadExists = false; @@ -105,25 +169,21 @@ void GameControllerSet::readJoystickConfig(QXmlStreamReader *xml, { int index = xml->attributes().value("index").toString().toInt(); JoyButton *button = nullptr; + if (buttons.contains(index-1)) { SDL_GameControllerButton current = buttons.value(index-1); button = getJoyButton(current); } - if (button != nullptr) - { - button->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } + readConf(button, xml); + } else if ((xml->name() == "axis") && xml->isStartElement()) { int index = xml->attributes().value("index").toString().toInt(); GameControllerTrigger *trigger = nullptr; + if (axes.contains(index-1)) { SDL_GameControllerAxis current = axes.value(index-1); @@ -141,96 +201,20 @@ void GameControllerSet::readJoystickConfig(QXmlStreamReader *xml, } else if ((xml->name() == "dpad") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - index = index - 1; - bool found = false; - QListIterator iter(hatButtons); - SDL_GameControllerButtonBind current; - while (iter.hasNext()) - { - current = iter.next(); - if (current.value.hat.hat == index) - { - found = true; - iter.toBack(); - } - } - - VDPad *dpad = nullptr; - if (found) - { - dpad = getVDPad(0); - } - - if ((dpad != nullptr) && !vdpadExists) - { - dpadExists = true; - dpad->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } + readConfDpad(xml, hatButtons, vdpadExists, dpadExists); } else if ((xml->name() == "stick") && xml->isStartElement()) { - int stickIndex = xml->attributes().value("index").toString().toInt(); - - if (stickIndex > 0) - { - stickIndex -= 1; - JoyControlStick *stick = getJoyStick(stickIndex); - if (stick != nullptr) - { - stick->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } - } - else - { - xml->skipCurrentElement(); - } + getElemFromXml("stick", xml); } else if ((xml->name() == "vdpad") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - index = index - 1; - bool found = false; - QListIterator iter(hatButtons); - SDL_GameControllerButtonBind current; - while (iter.hasNext()) - { - current = iter.next(); - if (current.value.hat.hat == index) - { - found = true; - iter.toBack(); - } - } - - VDPad *dpad = nullptr; - if (found) - { - dpad = getVDPad(0); - } - - if ((dpad != nullptr) && !dpadExists) - { - vdpadExists = true; - - dpad->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } + readConfDpad(xml, hatButtons, vdpadExists, dpadExists); } else if ((xml->name() == "name") && xml->isStartElement()) { QString temptext = xml->readElementText(); + if (!temptext.isEmpty()) { setName(temptext); @@ -247,6 +231,7 @@ void GameControllerSet::readJoystickConfig(QXmlStreamReader *xml, } } + void GameControllerSet::readConfig(QXmlStreamReader *xml) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -254,72 +239,29 @@ void GameControllerSet::readConfig(QXmlStreamReader *xml) if (xml->isStartElement() && (xml->name() == "set")) { xml->readNextStartElement(); + while (!xml->atEnd() && (!xml->isEndElement() && xml->name() != "set")) { if ((xml->name() == "button") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - JoyButton *button = getJoyButton(index-1); - if (button != nullptr) - { - button->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } + getElemFromXml("button", xml); } else if ((xml->name() == "trigger") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - GameControllerTrigger *axis = qobject_cast(getJoyAxis((index-1) + SDL_CONTROLLER_AXIS_TRIGGERLEFT)); - if (axis != nullptr) - { - axis->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } + getElemFromXml("trigger", xml); } else if ((xml->name() == "stick") && xml->isStartElement()) { - int stickIndex = xml->attributes().value("index").toString().toInt(); - - if (stickIndex > 0) - { - stickIndex -= 1; - JoyControlStick *stick = getJoyStick(stickIndex); - if (stick != nullptr) - { - stick->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } - } - else - { - xml->skipCurrentElement(); - } + getElemFromXml("stick", xml); } else if ((xml->name() == "dpad") && xml->isStartElement()) { - int index = xml->attributes().value("index").toString().toInt(); - GameControllerDPad *vdpad = qobject_cast(getVDPad(index-1)); - if (vdpad != nullptr) - { - vdpad->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } + getElemFromXml("dpad", xml); } else if ((xml->name() == "name") && xml->isStartElement()) { QString temptext = xml->readElementText(); + if (!temptext.isEmpty()) { setName(temptext); @@ -336,16 +278,48 @@ void GameControllerSet::readConfig(QXmlStreamReader *xml) } } + +void GameControllerSet::getElemFromXml(QString elemName, QXmlStreamReader *xml) +{ + int index = xml->attributes().value("index").toString().toInt(); + + if (elemName == "button") { + JoyButton *button = getJoyButton(index-1); + readConf(button, xml); + } + else if (elemName == "dpad") { + GameControllerDPad *vdpad = qobject_cast(getVDPad(index-1)); + readConf(vdpad, xml); + } + else if (elemName == "trigger") { + GameControllerTrigger *axis = qobject_cast(getJoyAxis((index-1) + SDL_CONTROLLER_AXIS_TRIGGERLEFT)); + readConf(axis, xml); + } + else if (elemName == "stick") { + if (index > 0) + { + index -= 1; + JoyControlStick *stick = getJoyStick(index); + readConf(stick, xml); + } + else + { + xml->skipCurrentElement(); + } + } +} + + void GameControllerSet::refreshAxes() { qInstallMessageHandler(MessageHandler::myMessageOutput); deleteAxes(); - for (int i=0; i < getInputDevice()->getNumberRawAxes(); i++) + for (int i = 0; i < getInputDevice()->getNumberRawAxes(); i++) { - if ((i == SDL_CONTROLLER_AXIS_TRIGGERLEFT) || - (i == SDL_CONTROLLER_AXIS_TRIGGERRIGHT)) + if ((i == static_cast(SDL_CONTROLLER_AXIS_TRIGGERLEFT)) || + (i == static_cast(SDL_CONTROLLER_AXIS_TRIGGERRIGHT))) { GameControllerTrigger *trigger = new GameControllerTrigger(i, getIndex(), this, this); getAxes()->insert(i, trigger); diff --git a/src/gamecontroller/gamecontrollerset.h b/src/gamecontroller/gamecontrollerset.h old mode 100644 new mode 100755 index 7fa39f340..9cc022a48 --- a/src/gamecontroller/gamecontrollerset.h +++ b/src/gamecontroller/gamecontrollerset.h @@ -48,6 +48,11 @@ class GameControllerSet : public SetJoystick public slots: virtual void reset(); + +private: + void getElemFromXml(QString elemName, QXmlStreamReader *xml); + void readConfDpad(QXmlStreamReader *xml, QList &hatButtons, bool vdpadExists, bool dpadExists); + void resetSticks(); }; #endif // GAMECONTROLLERSET_H diff --git a/src/gamecontroller/gamecontrollertrigger.cpp b/src/gamecontroller/gamecontrollertrigger.cpp old mode 100644 new mode 100755 index b76109855..1fa43ce88 --- a/src/gamecontroller/gamecontrollertrigger.cpp +++ b/src/gamecontroller/gamecontrollertrigger.cpp @@ -19,6 +19,7 @@ #include "gamecontrollertrigger.h" +#include "globalvariables.h" #include "messagehandler.h" #include "gamecontrollertriggerbutton.h" @@ -29,12 +30,8 @@ #include -const int GameControllerTrigger::AXISDEADZONE = 2000; -const int GameControllerTrigger::AXISMAXZONE = 32000; const GameControllerTrigger::ThrottleTypes GameControllerTrigger::DEFAULTTHROTTLE = GameControllerTrigger::PositiveHalfThrottle; -const QString GameControllerTrigger::xmlName = "trigger"; - GameControllerTrigger::GameControllerTrigger(int index, int originset, SetJoystick *parentSet, QObject *parent) : JoyAxis(index, originset, parentSet, parent) { @@ -45,13 +42,15 @@ GameControllerTrigger::GameControllerTrigger(int index, int originset, SetJoysti reset(index); } + QString GameControllerTrigger::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + return GlobalVariables::GameControllerTrigger::xmlName; } + QString GameControllerTrigger::getPartialName(bool forceFullFormat, bool displayNames) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -85,38 +84,46 @@ QString GameControllerTrigger::getPartialName(bool forceFullFormat, bool display return label; } + void GameControllerTrigger::readJoystickConfig(QXmlStreamReader *xml) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (xml->isStartElement() && (xml->name() == JoyAxis::xmlName)) + if (xml->isStartElement() && (xml->name() == GlobalVariables::JoyAxis::xmlName)) { xml->readNextStartElement(); - while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != JoyAxis::xmlName))) + + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != GlobalVariables::JoyAxis::xmlName))) { bool found = readMainConfig(xml); - if (!found && (xml->name() == JoyAxisButton::xmlName) && xml->isStartElement()) + + if (!found && (xml->name() == GlobalVariables::JoyAxisButton::xmlName) && xml->isStartElement()) { int index = xml->attributes().value("index").toString().toInt(); + GameControllerTriggerButton *triggerButton = nullptr; #ifndef QT_DEBUG_NO_OUTPUT qDebug() << "Index for axis in readJoystickConfig is: " << index; #endif - if (index == 1) - { - found = true; - GameControllerTriggerButton *triggerButton = - qobject_cast(naxisbutton); // static_cast - triggerButton->readJoystickConfig(xml); - } - else if (index == 2) - { - found = true; - GameControllerTriggerButton *triggerButton = - qobject_cast(paxisbutton); // static_cast - triggerButton->readJoystickConfig(xml); + switch (index) { + + case 1: + found = true; + triggerButton = + qobject_cast(naxisbutton); + triggerButton->readJoystickConfig(xml); + break; + + + case 2: + found = true; + triggerButton = + qobject_cast(paxisbutton); + triggerButton->readJoystickConfig(xml); + break; } + } if (!found) @@ -137,6 +144,7 @@ void GameControllerTrigger::readJoystickConfig(QXmlStreamReader *xml) } } + void GameControllerTrigger::correctJoystickThrottle() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -150,6 +158,7 @@ void GameControllerTrigger::correctJoystickThrottle() } } + void GameControllerTrigger::writeConfig(QXmlStreamWriter *xml) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -157,44 +166,48 @@ void GameControllerTrigger::writeConfig(QXmlStreamWriter *xml) bool currentlyDefault = isDefault(); xml->writeStartElement(getXmlName()); - xml->writeAttribute("index", QString::number((index+1)-SDL_CONTROLLER_AXIS_TRIGGERLEFT)); + xml->writeAttribute("index", QString::number((m_index+1)-SDL_CONTROLLER_AXIS_TRIGGERLEFT)); - if (!currentlyDefault) + + if (!currentlyDefault && (deadZone != GlobalVariables::GameControllerTrigger::AXISDEADZONE)) { - if (deadZone != AXISDEADZONE) - { - xml->writeTextElement("deadZone", QString::number(deadZone)); - } + xml->writeTextElement("deadZone", QString::number(deadZone)); + } - if (maxZoneValue != AXISMAXZONE) - { - xml->writeTextElement("maxZone", QString::number(maxZoneValue)); - } + if (!currentlyDefault && (maxZoneValue != GlobalVariables::GameControllerTrigger::AXISMAXZONE)) + { + xml->writeTextElement("maxZone", QString::number(maxZoneValue)); } - xml->writeStartElement("throttle"); - if (throttle == static_cast(JoyAxis::NegativeHalfThrottle)) - { - xml->writeCharacters("negativehalf"); - } - else if (throttle == static_cast(JoyAxis::NegativeThrottle)) - { - xml->writeCharacters("negative"); - } - else if (throttle == static_cast(JoyAxis::NormalThrottle)) - { - xml->writeCharacters("normal"); - } - else if (throttle == static_cast(JoyAxis::PositiveThrottle)) - { - xml->writeCharacters("positive"); - } - else if (throttle == static_cast(JoyAxis::PositiveHalfThrottle)) + xml->writeStartElement("throttle"); + + + switch(throttle) { - xml->writeCharacters("positivehalf"); + case -2: + xml->writeCharacters("negativehalf"); + break; + + case -1: + xml->writeCharacters("negative"); + break; + + case 0: + xml->writeCharacters("normal"); + break; + + case 1: + xml->writeCharacters("positive"); + break; + + case 2: + xml->writeCharacters("positivehalf"); + break; + } + xml->writeEndElement(); if (!currentlyDefault) @@ -207,20 +220,23 @@ void GameControllerTrigger::writeConfig(QXmlStreamWriter *xml) xml->writeEndElement(); } + int GameControllerTrigger::getDefaultDeadZone() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->AXISDEADZONE; + return GlobalVariables::GameControllerTrigger::AXISDEADZONE; } + int GameControllerTrigger::getDefaultMaxZone() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->AXISMAXZONE; + return GlobalVariables::GameControllerTrigger::AXISMAXZONE; } + JoyAxis::ThrottleTypes GameControllerTrigger::getDefaultThrottle() { qInstallMessageHandler(MessageHandler::myMessageOutput); diff --git a/src/gamecontroller/gamecontrollertrigger.h b/src/gamecontroller/gamecontrollertrigger.h old mode 100644 new mode 100755 index 817039a3d..e0b5af9fe --- a/src/gamecontroller/gamecontrollertrigger.h +++ b/src/gamecontroller/gamecontrollertrigger.h @@ -46,12 +46,8 @@ class GameControllerTrigger : public JoyAxis virtual void writeConfig(QXmlStreamWriter *xml); - static const int AXISDEADZONE; - static const int AXISMAXZONE; static const ThrottleTypes DEFAULTTHROTTLE; - static const QString xmlName; - protected: void correctJoystickThrottle(); diff --git a/src/gamecontroller/gamecontrollertriggerbutton.cpp b/src/gamecontroller/gamecontrollertriggerbutton.cpp old mode 100644 new mode 100755 index ed63d22c2..1b5933a01 --- a/src/gamecontroller/gamecontrollertriggerbutton.cpp +++ b/src/gamecontroller/gamecontrollertriggerbutton.cpp @@ -17,6 +17,7 @@ #include "gamecontrollertriggerbutton.h" +#include "globalvariables.h" #include "messagehandler.h" #include "setjoystick.h" #include "joyaxis.h" @@ -25,7 +26,6 @@ #include #include -const QString GameControllerTriggerButton::xmlName = "triggerbutton"; GameControllerTriggerButton::GameControllerTriggerButton(JoyAxis *axis, int index, int originset, SetJoystick *parentSet, QObject *parent) : JoyAxisButton(axis, index, originset, parentSet, parent) @@ -33,24 +33,31 @@ GameControllerTriggerButton::GameControllerTriggerButton(JoyAxis *axis, int inde qInstallMessageHandler(MessageHandler::myMessageOutput); } + QString GameControllerTriggerButton::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + + return GlobalVariables::GameControllerTriggerButton::xmlName; } + void GameControllerTriggerButton::readJoystickConfig(QXmlStreamReader *xml) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (xml->isStartElement() && (xml->name() == JoyAxisButton::xmlName)) + + if (xml->isStartElement() && (xml->name() == GlobalVariables::JoyAxisButton::xmlName)) { - disconnect(this, &GameControllerTriggerButton::slotsChanged, parentSet->getInputDevice(), &InputDevice::profileEdited); + disconnect(this, &GameControllerTriggerButton::slotsChanged, m_parentSet->getInputDevice(), &InputDevice::profileEdited); xml->readNextStartElement(); - while (!xml->atEnd() && (!xml->isEndElement() && xml->name() != JoyAxisButton::xmlName)) + + + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != GlobalVariables::JoyAxisButton::xmlName))) { bool found = readButtonConfig(xml); + if (!found) { xml->skipCurrentElement(); @@ -59,6 +66,6 @@ void GameControllerTriggerButton::readJoystickConfig(QXmlStreamReader *xml) xml->readNextStartElement(); } - connect(this, &GameControllerTriggerButton::slotsChanged, parentSet->getInputDevice(), &InputDevice::profileEdited); + connect(this, &GameControllerTriggerButton::slotsChanged, m_parentSet->getInputDevice(), &InputDevice::profileEdited); } } diff --git a/src/gamecontroller/gamecontrollertriggerbutton.h b/src/gamecontroller/gamecontrollertriggerbutton.h old mode 100644 new mode 100755 index 23360fb9a..57bf898fc --- a/src/gamecontroller/gamecontrollertriggerbutton.h +++ b/src/gamecontroller/gamecontrollertriggerbutton.h @@ -36,8 +36,6 @@ class GameControllerTriggerButton : public JoyAxisButton virtual QString getXmlName(); void readJoystickConfig(QXmlStreamReader *xml); - static const QString xmlName; - }; #endif // GAMECONTROLLERBUTTON_H diff --git a/src/gamecontrollerexample.cpp b/src/gamecontrollerexample.cpp old mode 100644 new mode 100755 index a9e327451..98b578dba --- a/src/gamecontrollerexample.cpp +++ b/src/gamecontrollerexample.cpp @@ -87,17 +87,22 @@ void GameControllerExample::paintEvent(QPaintEvent *event) ButtonImagePlacement current = buttonLocations[currentIndex]; paint.setOpacity(0.85); - if (current.buttontype == Button) + + switch(current.buttontype) { + + case Button: paint.drawImage(QRect(current.x, current.y, buttonimage.width(), buttonimage.height()), buttonimage); - } - else if (current.buttontype == AxisX) - { + break; + + case AxisX: paint.drawImage(QRect(current.x, current.y, axisimage.width(), axisimage.height()), axisimage); - } - else if (current.buttontype == AxisY) - { + break; + + case AxisY: paint.drawImage(QRect(current.x, current.y, rotatedaxisimage.width(), rotatedaxisimage.height()), rotatedaxisimage); + break; + } paint.setOpacity(1.0); diff --git a/src/gamecontrollerexample.h b/src/gamecontrollerexample.h old mode 100644 new mode 100755 diff --git a/src/gamecontrollermappingdialog.cpp b/src/gamecontrollermappingdialog.cpp old mode 100644 new mode 100755 index 41087b9ca..6760f7bff --- a/src/gamecontrollermappingdialog.cpp +++ b/src/gamecontrollermappingdialog.cpp @@ -134,6 +134,7 @@ GameControllerMappingDialog::GameControllerMappingDialog(InputDevice *device, QMetaObject::invokeMethod(&helper, "setupDeadZones", Qt::BlockingQueuedConnection); GameController *controller = qobject_cast(device); + if (controller != nullptr) { usingGameController = true; @@ -148,16 +149,13 @@ GameControllerMappingDialog::GameControllerMappingDialog(InputDevice *device, enableDeviceConnections(); ui->buttonMappingTableWidget->setCurrentCell(0, 0); - ui->axisDeadZoneComboBox->clear(); populateAxisDeadZoneComboBox(); currentDeadZoneValue = 20000; int index = ui->axisDeadZoneComboBox->findData(currentDeadZoneValue); - if (index != -1) - { - ui->axisDeadZoneComboBox->setCurrentIndex(index); - } + + if (index != -1) ui->axisDeadZoneComboBox->setCurrentIndex(index); connect(device, &InputDevice::destroyed, this, &GameControllerMappingDialog::obliterate); connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &GameControllerMappingDialog::saveChanges); @@ -181,9 +179,9 @@ void GameControllerMappingDialog::buttonAssign(int buttonindex) qInstallMessageHandler(MessageHandler::myMessageOutput); // Only perform assignment if no other control is currently active. + if (ui->buttonMappingTableWidget->currentRow() > -1) { - QTableWidgetItem* item = ui->buttonMappingTableWidget->currentItem(); int column = ui->buttonMappingTableWidget->currentColumn(); int row = ui->buttonMappingTableWidget->currentRow(); @@ -202,6 +200,7 @@ void GameControllerMappingDialog::buttonAssign(int buttonindex) foreach (const QModelIndex &index, matchlist) { QTableWidgetItem *existingItem = ui->buttonMappingTableWidget->item(index.row(), index.column()); + if (existingItem != nullptr) { existingItem->setText(""); @@ -217,9 +216,7 @@ void GameControllerMappingDialog::buttonAssign(int buttonindex) item->setText(QString("Button %1").arg(buttonindex+1)); if (row < (ui->buttonMappingTableWidget->rowCount() - 1)) - { ui->buttonMappingTableWidget->setCurrentCell(row + 1, column); - } ui->mappingStringPlainTextEdit->document()->setPlainText(generateSDLMappingString()); } @@ -231,13 +228,10 @@ void GameControllerMappingDialog::axisAssign(int axis, int value) bool skip = false; - if (usingGameController) + if (usingGameController && getEventTriggerAxesLocal().contains(axis) && (value < (-currentDeadZoneValue))) { - if (getEventTriggerAxesLocal().contains(axis) && (value < (-currentDeadZoneValue))) - { - skip = true; - getEventTriggerAxesLocal().removeAll(axis); - } + skip = true; + getEventTriggerAxesLocal().removeAll(axis); } if (!skip && (ui->buttonMappingTableWidget->currentRow() > -1)) @@ -246,20 +240,17 @@ void GameControllerMappingDialog::axisAssign(int axis, int value) int column = ui->buttonMappingTableWidget->currentColumn(); int row = ui->buttonMappingTableWidget->currentRow(); - if (usingGameController) - { - if ((value > currentDeadZoneValue) && !getEventTriggerAxesLocal().contains(axis)) - { - getEventTriggerAxesLocal().append(axis); - } - else if (value < currentDeadZoneValue) - { - skip = true; - } - } + if (usingGameController && (value > currentDeadZoneValue) && !getEventTriggerAxesLocal().contains(axis)) + { + getEventTriggerAxesLocal().append(axis); + } + else if (usingGameController && (value < currentDeadZoneValue)) + { + skip = true; + } - if (!skip) - { + if (!skip) + { if (item == nullptr) { item = new QTableWidgetItem(QString("Axis %1").arg(axis+1)); @@ -274,6 +265,7 @@ void GameControllerMappingDialog::axisAssign(int axis, int value) foreach (const QModelIndex &index, matchlist) { QTableWidgetItem *existingItem = ui->buttonMappingTableWidget->item(index.row(), index.column()); + if (existingItem != nullptr) { existingItem->setText(""); @@ -289,13 +281,10 @@ void GameControllerMappingDialog::axisAssign(int axis, int value) item->setText(QString("Axis %1").arg(axis+1)); if (row < (ui->buttonMappingTableWidget->rowCount()-1)) - { ui->buttonMappingTableWidget->setCurrentCell(row+1, column); - } ui->mappingStringPlainTextEdit->document()->setPlainText(generateSDLMappingString()); - } - + } else { skip = true; @@ -327,6 +316,7 @@ void GameControllerMappingDialog::dpadAssign(int dpad, int buttonindex) foreach (const QModelIndex &index, matchlist) { QTableWidgetItem *existingItem = ui->buttonMappingTableWidget->item(index.row(), index.column()); + if (existingItem != nullptr) { existingItem->setText(""); @@ -342,9 +332,7 @@ void GameControllerMappingDialog::dpadAssign(int dpad, int buttonindex) item->setText(QString("Hat %1.%2").arg(dpad+1).arg(buttonindex)); if (row < (ui->buttonMappingTableWidget->rowCount() - 1)) - { ui->buttonMappingTableWidget->setCurrentCell(row + 1, column); - } ui->mappingStringPlainTextEdit->document()->setPlainText(generateSDLMappingString()); } @@ -357,7 +345,6 @@ void GameControllerMappingDialog::saveChanges() QString mappingString = generateSDLMappingString(); settings->getLock()->lock(); - settings->setValue(QString("Mappings/").append(device->getGUIDString()), mappingString); settings->setValue(QString("Mappings/%1%2").arg(device->getGUIDString()).arg("Disable"), "0"); settings->sync(); @@ -410,7 +397,6 @@ void GameControllerMappingDialog::populateGameControllerBindings(GameController for (int i = 0; i < controller->getNumberAxes(); i++) { - int associatedRow = axisPlacement.value(static_cast(i)); SDL_GameControllerButtonBind bind = controller->getBindForAxis(i); QString temptext = bindingString(bind); @@ -437,22 +423,22 @@ QString GameControllerMappingDialog::bindingString(SDL_GameControllerButtonBind QString temp = QString(); - if (bind.bindType != SDL_CONTROLLER_BINDTYPE_NONE) - { - if (bind.bindType == SDL_CONTROLLER_BINDTYPE_BUTTON) + switch(bind.bindType) { - temp.append(QString("Button %1").arg(bind.value.button+1)); - } - else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS) - { - temp.append(QString("Axis %1").arg(bind.value.axis+1)); - } - else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_HAT) - { - temp.append(QString("Hat %1.%2").arg(bind.value.hat.hat+1) + case SDL_CONTROLLER_BINDTYPE_BUTTON: + temp.append(QString("Button %1").arg(bind.value.button+1)); + break; + + case SDL_CONTROLLER_BINDTYPE_AXIS: + temp.append(QString("Axis %1").arg(bind.value.axis+1)); + break; + + case SDL_CONTROLLER_BINDTYPE_HAT: + temp.append(QString("Hat %1.%2").arg(bind.value.hat.hat+1) .arg(bind.value.hat.hat_mask)); + break; + } - } return temp; } @@ -463,24 +449,24 @@ QList GameControllerMappingDialog::bindingValues(SDL_GameControllerBut QList temp; - if (bind.bindType != SDL_CONTROLLER_BINDTYPE_NONE) - { - if (bind.bindType == SDL_CONTROLLER_BINDTYPE_BUTTON) - { - temp.append(QVariant(0)); - temp.append(QVariant(bind.value.button)); - } - else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS) + switch(bind.bindType) { - temp.append(QVariant(bind.value.axis+1)); - temp.append(QVariant(0)); + case SDL_CONTROLLER_BINDTYPE_BUTTON: + temp.append(QVariant(0)); + temp.append(QVariant(bind.value.button)); + break; + + case SDL_CONTROLLER_BINDTYPE_AXIS: + temp.append(QVariant(bind.value.axis+1)); + temp.append(QVariant(0)); + break; + + case SDL_CONTROLLER_BINDTYPE_HAT: + temp.append(QVariant(-bind.value.hat.hat-1)); + temp.append(QVariant(bind.value.hat.hat_mask)); + break; } - else if (bind.bindType == SDL_CONTROLLER_BINDTYPE_HAT) - { - temp.append(QVariant(-bind.value.hat.hat-1)); - temp.append(QVariant(bind.value.hat.hat_mask)); - } - } + return temp; } @@ -491,6 +477,7 @@ void GameControllerMappingDialog::discardMapping(QAbstractButton *button) disableDeviceConnections(); QDialogButtonBox::ButtonRole currentRole = ui->buttonBox->buttonRole(button); + if (currentRole == QDialogButtonBox::DestructiveRole) { QMessageBox msgBox; @@ -499,6 +486,7 @@ void GameControllerMappingDialog::discardMapping(QAbstractButton *button) msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel); int status = msgBox.exec(); + if (status == QMessageBox::Yes) { removeControllerMapping(); @@ -577,16 +565,19 @@ QString GameControllerMappingDialog::generateSDLMappingString() templist.append(device->getSDLName()); templist.append(QString("platform:").append(device->getSDLPlatform())); - for (int i=0; i < ui->buttonMappingTableWidget->rowCount(); i++) + for (int i = 0; i < ui->buttonMappingTableWidget->rowCount(); i++) { QTableWidgetItem *item = ui->buttonMappingTableWidget->item(i, 0); + if (item != nullptr) { QString mapNative = QString(); QList tempassociation = item->data(Qt::UserRole).toList(); + if (tempassociation.size() == 2) { int bindingType = tempassociation.value(0).toInt(); + if (bindingType == 0) { mapNative.append("b"); @@ -687,6 +678,7 @@ void GameControllerMappingDialog::changeAxisDeadZone(int index) qInstallMessageHandler(MessageHandler::myMessageOutput); int value = ui->axisDeadZoneComboBox->itemData(index).toInt(); + if ((value >= 5000) && (value <= 32000)) { QMetaObject::invokeMethod(&helper, "raiseDeadZones", Qt::BlockingQueuedConnection, @@ -701,20 +693,21 @@ void GameControllerMappingDialog::updateLastAxisLineEdit(JoyAxis *tempAxis, int if (abs(value) >= 2000) { - QString temp = QString(); + QString axisText = QString(); + if (device->isGameController()) { - GameController *controller = qobject_cast(device); // static_cast - temp = QString("%1: %2").arg(controller->getBindStringForAxis(tempAxis->getIndex(), true)) + GameController *controller = qobject_cast(device); + axisText = QString("%1: %2").arg(controller->getBindStringForAxis(tempAxis->getIndex(), true)) .arg(value); } else { - temp = QString("Axis %1: %2").arg(tempAxis->getRealJoyIndex()) + axisText = QString("Axis %1: %2").arg(tempAxis->getRealJoyIndex()) .arg(value); } - ui->lastAxisEventLineEdit->setText(temp); + ui->lastAxisEventLineEdit->setText(axisText); } } @@ -724,11 +717,10 @@ void GameControllerMappingDialog::updateLastAxisLineEditRaw(int index, int value if (abs(value) >= 2000) { - QString temp = QString(); - temp = QString("Axis %1: %2").arg(index+1) + QString axisText = QString("Axis %1: %2").arg(index+1) .arg(value); - ui->lastAxisEventLineEdit->setText(temp); + ui->lastAxisEventLineEdit->setText(axisText); } } diff --git a/src/gamecontrollermappingdialog.h b/src/gamecontrollermappingdialog.h old mode 100644 new mode 100755 diff --git a/src/gamecontrollermappingdialog.ui b/src/gamecontrollermappingdialog.ui old mode 100644 new mode 100755 diff --git a/src/globalvariables.cpp b/src/globalvariables.cpp new file mode 100644 index 000000000..e7594fa71 --- /dev/null +++ b/src/globalvariables.cpp @@ -0,0 +1,214 @@ + + +#include "globalvariables.h" +#include "common.h" + +#include + + + +// ---- JOYBUTTON --- // + +const QString GlobalVariables::JoyButton::xmlName = "button"; + +// Set default values for many properties. +const int GlobalVariables::JoyButton::ENABLEDTURBODEFAULT = 100; +const double GlobalVariables::JoyButton::DEFAULTMOUSESPEEDMOD = 1.0; +double GlobalVariables::JoyButton::mouseSpeedModifier = GlobalVariables::JoyButton::DEFAULTMOUSESPEEDMOD; +const int GlobalVariables::JoyButton::DEFAULTKEYREPEATDELAY = 600; // 600 ms +const int GlobalVariables::JoyButton::DEFAULTKEYREPEATRATE = 40; // 40 ms. 25 times per second +const bool GlobalVariables::JoyButton::DEFAULTTOGGLE = false; +const int GlobalVariables::JoyButton::DEFAULTTURBOINTERVAL = 0; +const bool GlobalVariables::JoyButton::DEFAULTUSETURBO = false; +const int GlobalVariables::JoyButton::DEFAULTMOUSESPEEDX = 50; +const int GlobalVariables::JoyButton::DEFAULTMOUSESPEEDY = 50; +const int GlobalVariables::JoyButton::DEFAULTSETSELECTION = -1; +const int GlobalVariables::JoyButton::DEFAULTSPRINGWIDTH = 0; +const int GlobalVariables::JoyButton::DEFAULTSPRINGHEIGHT = 0; +const double GlobalVariables::JoyButton::DEFAULTSENSITIVITY = 1.0; +const int GlobalVariables::JoyButton::DEFAULTWHEELX = 20; +const int GlobalVariables::JoyButton::DEFAULTWHEELY = 20; +const bool GlobalVariables::JoyButton::DEFAULTCYCLERESETACTIVE = false; +const int GlobalVariables::JoyButton::DEFAULTCYCLERESET = 0; +const bool GlobalVariables::JoyButton::DEFAULTRELATIVESPRING = false; +const double GlobalVariables::JoyButton::DEFAULTEASINGDURATION = 0.5; +const double GlobalVariables::JoyButton::MINIMUMEASINGDURATION = 0.2; +const double GlobalVariables::JoyButton::MAXIMUMEASINGDURATION = 5.0; +const int GlobalVariables::JoyButton::MINCYCLERESETTIME = 10; +const int GlobalVariables::JoyButton::MAXCYCLERESETTIME = 60000; + +const int GlobalVariables::JoyButton::DEFAULTMOUSEHISTORYSIZE = 10; +const double GlobalVariables::JoyButton::DEFAULTWEIGHTMODIFIER = 0.2; +const int GlobalVariables::JoyButton::MAXIMUMMOUSEHISTORYSIZE = 100; +const double GlobalVariables::JoyButton::MAXIMUMWEIGHTMODIFIER = 1.0; +const int GlobalVariables::JoyButton::MAXIMUMMOUSEREFRESHRATE = 16; +int GlobalVariables::JoyButton::IDLEMOUSEREFRESHRATE = (5 * 20); +const int GlobalVariables::JoyButton::DEFAULTIDLEMOUSEREFRESHRATE = 100; +const double GlobalVariables::JoyButton::DEFAULTEXTRACCELVALUE = 2.0; +const double GlobalVariables::JoyButton::DEFAULTMINACCELTHRESHOLD = 10.0; +const double GlobalVariables::JoyButton::DEFAULTMAXACCELTHRESHOLD = 100.0; +const double GlobalVariables::JoyButton::DEFAULTSTARTACCELMULTIPLIER = 0.0; +const double GlobalVariables::JoyButton::DEFAULTACCELEASINGDURATION = 0.1; +const int GlobalVariables::JoyButton::DEFAULTSPRINGRELEASERADIUS = 0; + +// Keep references to active keys and mouse buttons. +QHash GlobalVariables::JoyButton::activeKeys; +QHash GlobalVariables::JoyButton::activeMouseButtons; + +// History buffers used for mouse smoothing routine. +QList GlobalVariables::JoyButton::mouseHistoryX; +QList GlobalVariables::JoyButton::mouseHistoryY; + +// Carry over remainder of a cursor move for the next mouse event. +double GlobalVariables::JoyButton::cursorRemainderX = 0.0; +double GlobalVariables::JoyButton::cursorRemainderY = 0.0; + +double GlobalVariables::JoyButton::weightModifier = 0; +// Mouse history buffer size +int GlobalVariables::JoyButton::mouseHistorySize = 1; + +int GlobalVariables::JoyButton::mouseRefreshRate = 5; +int GlobalVariables::JoyButton::springModeScreen = -1; +int GlobalVariables::JoyButton::gamepadRefreshRate = 10; + + +// ---- ANTIMICROSETTINGS --- // + +const bool GlobalVariables::AntimicroSettings::defaultDisabledWinEnhanced = false; +const bool GlobalVariables::AntimicroSettings::defaultAssociateProfiles = true; +const int GlobalVariables::AntimicroSettings::defaultSpringScreen = -1; +const int GlobalVariables::AntimicroSettings::defaultSDLGamepadPollRate = 10; // unsigned + +// ---- INPUTDEVICE ---- // + +const int GlobalVariables::InputDevice::NUMBER_JOYSETS = 8; +const int GlobalVariables::InputDevice::DEFAULTKEYPRESSTIME = 100; +const int GlobalVariables::InputDevice::RAISEDDEADZONE = 20000; +const int GlobalVariables::InputDevice::DEFAULTKEYREPEATDELAY = 660; // 660 ms +const int GlobalVariables::InputDevice::DEFAULTKEYREPEATRATE = 40; // 40 ms. 25 times per second + +QRegExp GlobalVariables::InputDevice::emptyGUID("^[0]+$"); + +// ---- JOYAXIS ---- // + +// Set default values for many properties. +const int GlobalVariables::JoyAxis::AXISMIN = -32767; +const int GlobalVariables::JoyAxis::AXISMAX = 32767; +const int GlobalVariables::JoyAxis::AXISDEADZONE = 6000; +const int GlobalVariables::JoyAxis::AXISMAXZONE = 32000; + +// Speed in pixels/second +const float GlobalVariables::JoyAxis::JOYSPEED = 20.0; + +const QString GlobalVariables::JoyAxis::xmlName = "axis"; + + +#if defined(Q_OS_UNIX) + #ifdef WITH_X11 + +// ---- X11EXTRAS ---- // + +const QString GlobalVariables::X11Extras::mouseDeviceName = PadderCommon::mouseDeviceName; +const QString GlobalVariables::X11Extras::keyboardDeviceName = PadderCommon::keyboardDeviceName; +const QString GlobalVariables::X11Extras::xtestMouseDeviceName = QString("Virtual core XTEST pointer"); + +QString GlobalVariables::X11Extras::_customDisplayString = QString(""); + + #endif +#endif + + +// ---- GameController ---- // + +const QString GlobalVariables::GameController::xmlName = "gamecontroller"; + + +// ---- GameControllerDPad ---- // + +const QString GlobalVariables::GameControllerDPad::xmlName = "dpad"; + + +// ---- GameControllerTrigger ---- // + +const int GlobalVariables::GameControllerTrigger::AXISDEADZONE = 2000; +const int GlobalVariables::GameControllerTrigger::AXISMAXZONE = 32000; + +const QString GlobalVariables::GameControllerTrigger::xmlName = "trigger"; + + +// ---- GameControllerTriggerButton ---- // + +const QString GlobalVariables::GameControllerTriggerButton::xmlName = "triggerbutton"; + + +// ---- InputDaemon ---- // + +const int GlobalVariables::InputDaemon::GAMECONTROLLERTRIGGERRELEASE = 16384; + + +// ---- VDPad ---- // + +const QString GlobalVariables::VDPad::xmlName = "vdpad"; + + +// ---- SetJoystick ---- // + +const int GlobalVariables::SetJoystick::MAXNAMELENGTH = 30; +const int GlobalVariables::SetJoystick::RAISEDDEADZONE = 20000; + + +// ---- Joystick ---- // + +const QString GlobalVariables::Joystick::xmlName = "joystick"; + + +// ---- JoyDPad ---- // + +const QString GlobalVariables::JoyDPad::xmlName = "dpad"; +const int GlobalVariables::JoyDPad::DEFAULTDPADDELAY = 0; + + +// ---- JoyControlStick ---- // + +// Define Pi here. +const double GlobalVariables::JoyControlStick::PI = acos(-1.0); + +// Set default values used for stick properties. +const int GlobalVariables::JoyControlStick::DEFAULTDEADZONE = 8000; +const int GlobalVariables::JoyControlStick::DEFAULTMAXZONE = GlobalVariables::GameControllerTrigger::AXISMAXZONE; +const int GlobalVariables::JoyControlStick::DEFAULTDIAGONALRANGE = 90; +const double GlobalVariables::JoyControlStick::DEFAULTCIRCLE = 0.0; +const int GlobalVariables::JoyControlStick::DEFAULTSTICKDELAY = 0; + + +// ---- JoyButtonSlot ---- // + +const int GlobalVariables::JoyButtonSlot::JOYSPEED = 20; +const QString GlobalVariables::JoyButtonSlot::xmlName = "slot"; +const int GlobalVariables::JoyButtonSlot::MAXTEXTENTRYDISPLAYLENGTH = 40; + + + +// ---- AdvanceButtonDialog ---- // + +const int GlobalVariables::AdvanceButtonDialog::MINIMUMTURBO = 2; + + +// ---- JoyAxisButton ---- // + +const QString GlobalVariables::JoyAxisButton::xmlName = "axisbutton"; + + +// ---- JoyControlStickButton ---- // + +const QString GlobalVariables::JoyControlStickButton::xmlName = "stickbutton"; + + +// ---- JoyControlStickModifierButton ---- // + +const QString GlobalVariables::JoyControlStickModifierButton::xmlName = "stickmodifierbutton"; + + +// ---- JoyDPadButton ---- // + +const QString GlobalVariables::JoyDPadButton::xmlName = "dpadbutton"; diff --git a/src/globalvariables.h b/src/globalvariables.h new file mode 100644 index 000000000..bc8782afa --- /dev/null +++ b/src/globalvariables.h @@ -0,0 +1,257 @@ +#ifndef GLOBALVARIABLES_H +#define GLOBALVARIABLES_H + +#include +#include + + +namespace GlobalVariables +{ + class JoyButton + { + public: + + static const QString xmlName; + + static int IDLEMOUSEREFRESHRATE; + static int mouseHistorySize; + // Get active mouse movement refresh rate + static int mouseRefreshRate; + static int springModeScreen; + // gamepad poll rate used by the application in ms + static int gamepadRefreshRate; + + static double cursorRemainderX; + static double cursorRemainderY; + static double mouseSpeedModifier; + // Weight modifier in the range of 0.0 - 1.0 + static double weightModifier; + + static const bool DEFAULTTOGGLE; + static const bool DEFAULTUSETURBO; + static const bool DEFAULTCYCLERESETACTIVE; + static const bool DEFAULTRELATIVESPRING; + + static const double DEFAULTMOUSESPEEDMOD; + static const double DEFAULTSENSITIVITY; + static const double DEFAULTEASINGDURATION; + static const double MINIMUMEASINGDURATION; + static const double MAXIMUMEASINGDURATION; + static const double DEFAULTWEIGHTMODIFIER; + static const double MAXIMUMWEIGHTMODIFIER; + static const double DEFAULTEXTRACCELVALUE; + static const double DEFAULTMINACCELTHRESHOLD; + static const double DEFAULTMAXACCELTHRESHOLD; + static const double DEFAULTSTARTACCELMULTIPLIER; + static const double DEFAULTACCELEASINGDURATION; + + // Define default values for many properties. + static const int ENABLEDTURBODEFAULT; + static const int DEFAULTKEYREPEATDELAY; // unsigned + static const int DEFAULTKEYREPEATRATE; // unsigned + static const int DEFAULTTURBOINTERVAL; + static const int DEFAULTMOUSESPEEDX; + static const int DEFAULTMOUSESPEEDY; + static const int DEFAULTSETSELECTION; + static const int DEFAULTSPRINGWIDTH; + static const int DEFAULTSPRINGHEIGHT; + static const int DEFAULTWHEELX; + static const int DEFAULTWHEELY; + static const int DEFAULTCYCLERESET; + static const int DEFAULTMOUSEHISTORYSIZE; + static const int MAXIMUMMOUSEHISTORYSIZE; + static const int MAXIMUMMOUSEREFRESHRATE; + static const int DEFAULTIDLEMOUSEREFRESHRATE; + static const int MINCYCLERESETTIME; // unsigned + static const int MAXCYCLERESETTIME; // unsigned + static const int DEFAULTSPRINGRELEASERADIUS; + + static QHash activeKeys; // QHash activeMouseButtons; // QHash mouseHistoryX; + static QList mouseHistoryY; + }; + + class AntimicroSettings + { + public: + + static const bool defaultDisabledWinEnhanced; + static const bool defaultAssociateProfiles; + static const int defaultSpringScreen; + static const int defaultSDLGamepadPollRate; // unsigned + }; + + class InputDevice + { + public: + + static const int NUMBER_JOYSETS; + static const int DEFAULTKEYPRESSTIME; + static const int RAISEDDEADZONE; + static const int DEFAULTKEYREPEATDELAY; // unsigned + static const int DEFAULTKEYREPEATRATE; // unsigned + + static QRegExp emptyGUID; + }; + + class JoyAxis + { + public: + + static const int AXISMIN; + static const int AXISMAX; + static const int AXISDEADZONE; + static const int AXISMAXZONE; + + static const float JOYSPEED; + + static const QString xmlName; + }; + +#if defined(Q_OS_UNIX) + #ifdef WITH_X11 + + class X11Extras + { + public: + + static const QString mouseDeviceName; + static const QString keyboardDeviceName; + static const QString xtestMouseDeviceName; + + static QString _customDisplayString; + }; + + #endif +#endif + + class GameController + { + public: + + static const QString xmlName; + }; + + class GameControllerDPad + { + public: + + static const QString xmlName; + }; + + class GameControllerTrigger + { + public: + + static const int AXISDEADZONE; + static const int AXISMAXZONE; + + static const QString xmlName; + }; + + class GameControllerTriggerButton + { + public: + + static const QString xmlName; + }; + + class InputDaemon + { + public: + + static const int GAMECONTROLLERTRIGGERRELEASE; + }; + + class VDPad + { + public: + + static const QString xmlName; + }; + + class SetJoystick + { + public: + + static const int MAXNAMELENGTH; + static const int RAISEDDEADZONE; + }; + + class Joystick + { + public: + + static const QString xmlName; + }; + + class JoyDPad + { + public: + + static const QString xmlName; + static const int DEFAULTDPADDELAY; // unsigned + }; + + class JoyControlStick + { + public: + + static const double PI; + + // Define default values for stick properties. + static const int DEFAULTDEADZONE; + static const int DEFAULTMAXZONE; + static const int DEFAULTDIAGONALRANGE; + static const double DEFAULTCIRCLE; + static const int DEFAULTSTICKDELAY; // unsigned + }; + + class JoyButtonSlot + { + public: + + static const int JOYSPEED; + static const QString xmlName; + static const int MAXTEXTENTRYDISPLAYLENGTH; + }; + + class AdvanceButtonDialog + { + public: + + static const int MINIMUMTURBO; + }; + + class JoyAxisButton + { + public: + + static const QString xmlName; + }; + + class JoyControlStickButton + { + public: + + static const QString xmlName; + }; + + class JoyControlStickModifierButton + { + public: + + static const QString xmlName; + }; + + class JoyDPadButton + { + public: + + static const QString xmlName; + }; + +} + +#endif // GLOBALVARIABLES_H diff --git a/src/icons/16x16/actions/application-exit.png b/src/icons/16x16/actions/application-exit.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/archive-insert.png b/src/icons/16x16/actions/archive-insert.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/dialog-cancel.png b/src/icons/16x16/actions/dialog-cancel.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/dialog-close.png b/src/icons/16x16/actions/dialog-close.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/dialog-ok.png b/src/icons/16x16/actions/dialog-ok.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/document-close.png b/src/icons/16x16/actions/document-close.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/document-open-folder.png b/src/icons/16x16/actions/document-open-folder.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/document-open.png b/src/icons/16x16/actions/document-open.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/document-revert-small.png b/src/icons/16x16/actions/document-revert-small.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/document-revert.png b/src/icons/16x16/actions/document-revert.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/document-save-as.png b/src/icons/16x16/actions/document-save-as.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/document-save.png b/src/icons/16x16/actions/document-save.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/edit-clear-list.png b/src/icons/16x16/actions/edit-clear-list.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/edit-clear.png b/src/icons/16x16/actions/edit-clear.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/edit-delete.png b/src/icons/16x16/actions/edit-delete.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/edit-select.png b/src/icons/16x16/actions/edit-select.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/edit-table-delete-row.png b/src/icons/16x16/actions/edit-table-delete-row.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/edit-table-insert-row-below.png b/src/icons/16x16/actions/edit-table-insert-row-below.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/games-config-custom.png b/src/icons/16x16/actions/games-config-custom.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/games-config-options.png b/src/icons/16x16/actions/games-config-options.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/help-about.png b/src/icons/16x16/actions/help-about.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/text-field.png b/src/icons/16x16/actions/text-field.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/view-fullscreen.png b/src/icons/16x16/actions/view-fullscreen.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/view-refresh.png b/src/icons/16x16/actions/view-refresh.png old mode 100644 new mode 100755 diff --git a/src/icons/16x16/actions/view-restore.png b/src/icons/16x16/actions/view-restore.png old mode 100644 new mode 100755 diff --git a/src/icons/README.txt b/src/icons/README.txt old mode 100644 new mode 100755 diff --git a/src/icons/index.theme b/src/icons/index.theme old mode 100644 new mode 100755 diff --git a/src/icons/lgpl-2.1.txt b/src/icons/lgpl-2.1.txt old mode 100644 new mode 100755 diff --git a/src/icons/lgpl-3.0.txt b/src/icons/lgpl-3.0.txt old mode 100644 new mode 100755 diff --git a/src/images/16x16/antimicro.ico b/src/images/16x16/antimicro.ico new file mode 100755 index 0000000000000000000000000000000000000000..55aa47a542d247cca4dd9adc706f9c18c90d78d7 GIT binary patch literal 1150 zcmZQzU<5(|0R|wcz>vYhz#zuJz@P!dKp~(AL>x%b97st?Gq`(r@Y>qh>6x0E2?8ZxtgNgA&A5C2 zf%wLao4%}FyY_!yU*G?vPM-Q-T2_9=-rm8~#Ke@<%-mei+`>`;$Yw@2@ZN)m zET_+$JH2%2Qn3B2RK4$A8- zm>b1rTm#*?_X=}rj;-!_8lo^2f86G`(#&qw&BgP#& z_b> zaB^>EX>4U6ba`-PAZ2)IW&i+q+TB-KlH4{7{pTri1Ong!9*5#ml^f*vd0eMw#`f5W z^AoXJgg^@01394JL8^hLqj4(|S_oW}anQ?OxIru=);qKVR7!qh@>muS-hoKUu{;TNYvpHKCHgOXYi@OdB1?G!N z#+`Au0u`Xc^FbXANz}U%ArA(dLoC_70=(usj%v@Ng7%&xJBrX$fHwJZ%lB5D;mV$H; zaQWIoQ*D~+3Mmvj81-p1;Hmn%P5gAL^21Kaup!yl$ zGd^AeR{?^4hFRfYw$G3N_#aPi$t4qL!A6gH)e*(I1t3JQz{404AYcQDr$9C`n@EH} zDgeqbol#H^U?K0h!bo-^0pOqtpd0T*np@fPVxtiP2rt1%1U5-Bz;ezbf1*?5Q1;@T z_dfXO)hC~Wgi&E3#4tK)juKt;F~k@(rkIV2I`tYfs%p}lI0-tgPpHSFDW#mDG(&R6 z+Zh{je)y5cJ^l$#eDq0AE^LYvS9}R27A>jd%2g`rxP}_5)>Lz&hE!^<`4(Di+EU9M zsn(^t?tAF5Yfq-kn>M@n z2`y&}`raICjgw^3w0Z2wytfBm3m*)Nr7sdi`e^Xe18<{G$goLQj`-Fw(|(V-r24D{ zhZ=nPb^*rn(vnm^t z4>bADW4jhXu}-B4)e=8iY5GENn0H|1i?5bL@p%D=Z>s9uwov2jYUz@fazVL@_Vo}^ z&GIbm*)!yHhT{r4?9QH=4kCGHEk6CoU&#laaN_^ml;-U_n)*$ju;mgO_iiH^BFVApIP!*j z=WgLi05`00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru;tT{25)Mh)aFzf702y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00L`CL_t(I%hi%UOcQY&#ozTxOQE5F_y;j)dx{}}VgQvv z1*3}z32r7VYKQ|9Q5TJa2@WQ7b(EO6Iw&QP2u=A@u$5jhQ6eCrg_ic(-jUMMR$A}A zKPM6r2S}WJ^LwA+y$AfGxWky@u}wV@88lTRS(bNOFJ3wruq7wTiRdm7^$<~0Dk@cN zrBcPRnj=3AJpbx!v;D1!=l=$5$qAk@HozErN<=lPszM`%cl`sPsD#3;8#wl>2%+oB z;BmqFoZlZ-lJPT)u}?&FUs05@@d+2ItE&(WN3f{Kh?MB?V|fYnZZC=*tyjV8-s|_m z$$0EM5lt2fg<3HXKq8TZ-QJ9fiVB3kE#hb>g7HWQH(T4_E-%NmOj;M5i*)J%K#E2z znx>5rQEfh-htX)n^{!5=1w;5SGK$8!I;gQ2%tiz1zb_+a;ILaLz~}pt(*pnz4Q_9z zt+JxPR9XtbX2XQbjpdaUR90Hh)NvW}JO`T?z>-F=H8){(Z7r3_q(5>S>%nSCif^uO zgiVqpf#-P$*3$@vHgK}`1hUyI=KcOyJRTQKCeta4#nQMLjjkt?$$MU}Z(h$ByATdX zOlGqgf*_!`w-=8eJ;d#v9*j7hzbB`r2J-p*u-`8h+uPeXosP3GLdGwO1OR$XRZBPy za5x<3>+3^zcQ=eiBNo0cV8-L=pPrr>-YZ%Z0}R0S{^fM4sxAmNYoVdx92`SK;B_2Y zTI_JS+`H*?`pu!P{CUpvQdQL_J3BkjGz}ilEM{ltUVDAM2L}Q40N`|vKFemaN-meX lla%EWMN!5`qZjxu^arZiJc+CiNP++W002ovPDHLkV1g}j_j~{V literal 0 HcmV?d00001 diff --git a/src/images/24x24/antimicro.ico b/src/images/24x24/antimicro.ico new file mode 100755 index 0000000000000000000000000000000000000000..cba452302541949b2a9696c4669abe1ede3a809f GIT binary patch literal 2462 zcmeHJYfPI}7(S(SNCv?y2D-(CX;jE?Mky31bCk&fgE9sM9cF<+w}_%MGASD=mw%;& zu{pU+5!=d`hRX;mj7?lIT3~E4HXZi>ErkNZDL?jun9|3$#QoqROV~g4e0jc;^PYU~ zbKd7XZ}Kt5p@+|B^xnY=T^RFVjQJ2K#9kvf;{TdHDr~lQ}ty?`M2~h{(u?!oa{1fB%4|dAz4K%;4?g!*1XC z#igUG+hFYMLi3eYv|haijqYnCCcd>O6bj#clKgINZtPzF;QkvoZ~d8-C5KoXhC@k7 zsIIw)^IudVR4g|52?QHH|G>})hfwro)mIP*1V~6ofKsVMR8%yYTUsGIddwOu5^Z;N zb=?rh(8#D$U;m)Crltlel?t`BwUEo@;Pd&otZzY;Mr)^guco_j_I}xiak<=OJRA;Z z*?Q$-WOSS}I6R^%Eh|G~V}A-ny^Q=9!> z7x0Mhg`nVIA+0^h1M8BEn=J?1zQ1m(tE+=rt%hS(qSG3hosZtm;8`7`S4 z8&F5+>Aeema|;v-1yWN}p)6G4Cu1j?^v(E$e2|tVBR)AkJy(h}nQSgdB=X<&>aJD! z9f7#Gcs4O&&L9=~=C1YT8abC@ZgkMytcUz5!5wpuV9I8chSXyH=nO*pg(PMUn!a&C3@fc~vA;Gw2%M_RT-ii8wQU5;X z>;Jd^Z3+Nj4%ocF7Tm$+|AxsK%)})yXEwhCE?b~KDFJL57qP~glk@6KQgUCQ$) H-=q02nZQmS literal 0 HcmV?d00001 diff --git a/src/images/24x24/com.github.juliagoda.antimicro.png b/src/images/24x24/com.github.juliagoda.antimicro.png new file mode 100755 index 0000000000000000000000000000000000000000..8a522e5dca9c6d154215bd2fb1d1040598bc4f2e GIT binary patch literal 7860 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 C-~Xfl literal 0 HcmV?d00001 diff --git a/src/images/32x32/com.github.juliagoda.antimicro.png b/src/images/32x32/com.github.juliagoda.antimicro.png new file mode 100755 index 0000000000000000000000000000000000000000..b1e4e5db8957076c4c33a11c0e36f0a5ed99808e GIT binary patch literal 4409 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 literal 0 HcmV?d00001 diff --git a/src/images/48x48/antimicro.ico b/src/images/48x48/antimicro.ico new file mode 100755 index 0000000000000000000000000000000000000000..82a5c718419af5d585505fffc7029438b2fe0191 GIT binary patch literal 9662 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 literal 0 HcmV?d00001 diff --git a/src/images/48x48/com.github.juliagoda.antimicro.png b/src/images/48x48/com.github.juliagoda.antimicro.png new file mode 100755 index 0000000000000000000000000000000000000000..4cd54d00883423b62715dacee1a74fdf672e3a84 GIT binary patch literal 3525 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 literal 0 HcmV?d00001 diff --git a/src/images/64x64/com.github.juliagoda.antimicro.png b/src/images/64x64/com.github.juliagoda.antimicro.png new file mode 100755 index 0000000000000000000000000000000000000000..699b24cd4bb5c2454f3995e30e2e86c966135afe GIT binary patch literal 13268 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 EwW`EhOa6+%)m}4J!=S}*4M)pjpc5Ys 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 F{ty3lqw)X% diff --git a/src/images/profile.jpg b/src/images/profile.jpg old mode 100644 new mode 100755 diff --git a/src/inputdaemon.cpp b/src/inputdaemon.cpp old mode 100644 new mode 100755 index 92b7583f2..7d6db021f --- a/src/inputdaemon.cpp +++ b/src/inputdaemon.cpp @@ -17,6 +17,7 @@ #include "inputdaemon.h" +#include "globalvariables.h" #include "messagehandler.h" #include "logger.h" #include "common.h" @@ -35,9 +36,6 @@ #define USE_NEW_REFRESH -const int InputDaemon::GAMECONTROLLERTRIGGERRELEASE = 16384; - - InputDaemon::InputDaemon(QMap *joysticks, AntiMicroSettings *settings, bool graphical, QObject *parent) : @@ -46,23 +44,20 @@ InputDaemon::InputDaemon(QMap *joysticks, { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->joysticks = joysticks; + m_joysticks = joysticks; this->stopped = false; - this->graphical = graphical; - this->settings = settings; + m_graphical = graphical; + m_settings = settings; eventWorker = new SDLEventReader(joysticks, settings); refreshJoysticks(); - sdlWorkerThread = nullptr; - if (graphical) + + if (m_graphical) { sdlWorkerThread = new QThread; eventWorker->moveToThread(sdlWorkerThread); - } - if (graphical) - { connect(sdlWorkerThread, &QThread::started, eventWorker, &SDLEventReader::performWork); connect(eventWorker, &SDLEventReader::eventRaised, this, &InputDaemon::run); @@ -78,8 +73,8 @@ InputDaemon::InputDaemon(QMap *joysticks, // poll. pollResetTimer.setSingleShot(true); pollResetTimer.setInterval( - qMax(JoyButton::getMouseRefreshRate(), - JoyButton::getGamepadRefreshRate()) + 1); + qMax(GlobalVariables::JoyButton::mouseRefreshRate, + GlobalVariables::JoyButton::gamepadRefreshRate) + 1); connect(&pollResetTimer, &QTimer::timeout, this, &InputDaemon::resetActiveButtonMouseDistances); @@ -90,10 +85,7 @@ InputDaemon::~InputDaemon() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (eventWorker != nullptr) - { - quit(); - } + if (eventWorker != nullptr) quit(); if (sdlWorkerThread != nullptr) { @@ -109,9 +101,7 @@ void InputDaemon::startWorker() qInstallMessageHandler(MessageHandler::myMessageOutput); if (!sdlWorkerThread->isRunning()) - { sdlWorkerThread->start(QThread::HighPriority); - } } void InputDaemon::run () @@ -125,25 +115,19 @@ void InputDaemon::run () if (!stopped) { - JoyButton::resetActiveButtonMouseDistances(); + JoyButton::resetActiveButtonMouseDistances(JoyButton::getMouseHelper()); QQueue sdlEventQueue; - firstInputPass(&sdlEventQueue); - modifyUnplugEvents(&sdlEventQueue); - secondInputPass(&sdlEventQueue); - clearBitArrayStatusInstances(); } if (stopped) { - if (joysticks->size() > 0) - { - emit complete(joysticks->value(0)); - } + if (m_joysticks->size() > 0) emit complete(m_joysticks->value(0)); + emit complete(); stopped = false; } @@ -160,11 +144,12 @@ void InputDaemon::refreshJoysticks() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QMapIterator iter(*joysticks); + QMapIterator iter(*m_joysticks); while (iter.hasNext()) { InputDevice *joystick = iter.next().value(); + if (joystick != nullptr) { delete joystick; @@ -172,14 +157,14 @@ void InputDaemon::refreshJoysticks() } } - joysticks->clear(); + m_joysticks->clear(); getTrackjoysticksLocal().clear(); trackcontrollers.clear(); - settings->getLock()->lock(); - settings->beginGroup("Mappings"); + m_settings->getLock()->lock(); + m_settings->beginGroup("Mappings"); - for (int i=0; i < SDL_NumJoysticks(); i++) + for (int i = 0; i < SDL_NumJoysticks(); i++) { #ifdef USE_NEW_REFRESH int index = i; @@ -188,29 +173,29 @@ void InputDaemon::refreshJoysticks() if (SDL_IsGameController(index)) { SDL_GameController *controller = SDL_GameControllerOpen(index); + if (controller != nullptr) { SDL_Joystick *sdlStick = SDL_GameControllerGetJoystick(controller); SDL_JoystickID tempJoystickID = SDL_JoystickInstanceID(sdlStick); // Check if device has already been grabbed. - if (!joysticks->contains(tempJoystickID)) + if (!m_joysticks->contains(tempJoystickID)) { - - QString temp = QString(); + QString guidText = QString(); SDL_JoystickGUID tempGUID = SDL_JoystickGetGUID(sdlStick); char guidString[65] = {'0'}; SDL_JoystickGetGUIDString(tempGUID, guidString, sizeof(guidString)); - temp = QString(guidString); + guidText = QString(guidString); - bool disableGameController = settings->value(QString("%1Disable").arg(temp), false).toBool(); + bool disableGameController = m_settings->value(QString("%1Disable").arg(guidText), false).toBool(); // Check if user has designated device Joystick mode. if (!disableGameController) { - GameController *damncontroller = new GameController(controller, index, settings, this); + GameController *damncontroller = new GameController(controller, index, m_settings, this); connect(damncontroller, &GameController::requestWait, eventWorker, &SDLEventReader::haltServices); - joysticks->insert(tempJoystickID, damncontroller); + m_joysticks->insert(tempJoystickID, damncontroller); trackcontrollers.insert(tempJoystickID, damncontroller); emit deviceAdded(damncontroller); @@ -218,27 +203,23 @@ void InputDaemon::refreshJoysticks() else { Joystick *joystick = openJoystickDevice(index); + if (joystick != nullptr) - { emit deviceAdded(joystick); - } - } } else - { - // Make sure to decrement reference count - SDL_GameControllerClose(controller); + { + SDL_GameControllerClose(controller); // Make sure to decrement reference count } } } else { Joystick *joystick = openJoystickDevice(index); + if (joystick != nullptr) - { emit deviceAdded(joystick); - } } @@ -252,45 +233,46 @@ void InputDaemon::refreshJoysticks() SDL_JoystickGetGUIDString(tempGUID, guidString, sizeof(guidString)); temp = QString(guidString); - bool disableGameController = settings->value(QString("%1Disable").arg(temp), false).toBool(); + bool disableGameController = m_settings->value(QString("%1Disable").arg(temp), false).toBool(); if (SDL_IsGameController(i) && !disableGameController) { SDL_GameController *controller = SDL_GameControllerOpen(i); - GameController *damncontroller = new GameController(controller, i, settings, this); + GameController *damncontroller = new GameController(controller, i, m_settings, this); connect(damncontroller, &GameController::requestWait, eventWorker, &SDLEventReader::haltServices); SDL_Joystick *sdlStick = SDL_GameControllerGetJoystick(controller); SDL_JoystickID joystickID = SDL_JoystickInstanceID(sdlStick); - joysticks->insert(joystickID, damncontroller); + m_joysticks->insert(joystickID, damncontroller); trackcontrollers.insert(joystickID, damncontroller); } else { - Joystick *curJoystick = new Joystick(joystick, i, settings, this); + Joystick *curJoystick = new Joystick(joystick, i, m_settings, this); connect(curJoystick, &Joystick::requestWait, eventWorker, &SDLEventReader::haltServices); SDL_JoystickID joystickID = SDL_JoystickInstanceID(joystick); - joysticks->insert(joystickID, curJoystick); + m_joysticks->insert(joystickID, curJoystick); trackjoysticks.insert(joystickID, curJoystick); } } #endif } - settings->endGroup(); - settings->getLock()->unlock(); + m_settings->endGroup(); + m_settings->getLock()->unlock(); - emit joysticksRefreshed(joysticks); + emit joysticksRefreshed(m_joysticks); } void InputDaemon::deleteJoysticks() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QMapIterator iter(*joysticks); + QMapIterator iter(*m_joysticks); while (iter.hasNext()) { InputDevice *joystick = iter.next().value(); + if (joystick != nullptr) { delete joystick; @@ -298,10 +280,9 @@ void InputDaemon::deleteJoysticks() } } - joysticks->clear(); + m_joysticks->clear(); getTrackjoysticksLocal().clear(); trackcontrollers.clear(); - } void InputDaemon::stop() @@ -315,6 +296,7 @@ void InputDaemon::stop() void InputDaemon::refresh() { qInstallMessageHandler(MessageHandler::myMessageOutput); + qDebug() << "REFRESH"; stop(); @@ -324,10 +306,7 @@ void InputDaemon::refresh() connect(eventWorker, &SDLEventReader::sdlStarted, &q, &QEventLoop::quit); QMetaObject::invokeMethod(eventWorker, "refresh", Qt::BlockingQueuedConnection); - if (eventWorker->isSDLOpen()) - { - q.exec(); - } + if (eventWorker->isSDLOpen()) q.exec(); disconnect(eventWorker, &SDLEventReader::sdlStarted, &q, &QEventLoop::quit); @@ -365,7 +344,7 @@ void InputDaemon::quit() // Wait for SDL to finish. Let worker destructor close SDL. // Let InputDaemon destructor close thread instance. - if (graphical) + if (m_graphical) { QMetaObject::invokeMethod(eventWorker, "stop"); QMetaObject::invokeMethod(eventWorker, "quit"); @@ -415,14 +394,14 @@ void InputDaemon::refreshMapping(QString mapping, InputDevice *device) { device->closeSDLDevice(); getTrackjoysticksLocal().remove(joystickID); - joysticks->remove(joystickID); + m_joysticks->remove(joystickID); SDL_GameController *controller = SDL_GameControllerOpen(i); - GameController *damncontroller = new GameController(controller, i, settings, this); + GameController *damncontroller = new GameController(controller, i, m_settings, this); connect(damncontroller, &GameController::requestWait, eventWorker, &SDLEventReader::haltServices); SDL_Joystick *sdlStick = SDL_GameControllerGetJoystick(controller); joystickID = SDL_JoystickInstanceID(sdlStick); - joysticks->insert(joystickID, damncontroller); + m_joysticks->insert(joystickID, damncontroller); trackcontrollers.insert(joystickID, damncontroller); emit deviceUpdated(i, damncontroller); } @@ -442,7 +421,7 @@ void InputDaemon::removeDevice(InputDevice *device) { SDL_JoystickID deviceID = device->getSDLJoystickID(); - joysticks->remove(deviceID); + m_joysticks->remove(deviceID); getTrackjoysticksLocal().remove(deviceID); trackcontrollers.remove(deviceID); @@ -460,14 +439,12 @@ void InputDaemon::refreshIndexes() { SDL_Joystick *joystick = SDL_JoystickOpen(i); SDL_JoystickID joystickID = SDL_JoystickInstanceID(joystick); - // Make sure to decrement reference count - SDL_JoystickClose(joystick); + SDL_JoystickClose(joystick); // Make sure to decrement reference count + InputDevice *tempdevice = m_joysticks->value(joystickID); - InputDevice *tempdevice = joysticks->value(joystickID); if (tempdevice != nullptr) - { tempdevice->setIndex(i); - } + } } @@ -486,10 +463,10 @@ void InputDaemon::addInputDevice(int index) SDL_JoystickID tempJoystickID = SDL_JoystickInstanceID(sdlStick); // Check if device has already been grabbed. - if (!joysticks->contains(tempJoystickID)) + if (!m_joysticks->contains(tempJoystickID)) { - settings->getLock()->lock(); - settings->beginGroup("Mappings"); + m_settings->getLock()->lock(); + m_settings->beginGroup("Mappings"); QString temp = QString(); SDL_JoystickGUID tempGUID = SDL_JoystickGetGUID(sdlStick); @@ -497,17 +474,17 @@ void InputDaemon::addInputDevice(int index) SDL_JoystickGetGUIDString(tempGUID, guidString, sizeof(guidString)); temp = QString(guidString); - bool disableGameController = settings->value(QString("%1Disable").arg(temp), false).toBool(); + bool disableGameController = m_settings->value(QString("%1Disable").arg(temp), false).toBool(); - settings->endGroup(); - settings->getLock()->unlock(); + m_settings->endGroup(); + m_settings->getLock()->unlock(); // Check if user has designated device Joystick mode. if (!disableGameController) { - GameController *damncontroller = new GameController(controller, index, settings, this); + GameController *damncontroller = new GameController(controller, index, m_settings, this); connect(damncontroller, &GameController::requestWait, eventWorker, &SDLEventReader::haltServices); - joysticks->insert(tempJoystickID, damncontroller); + m_joysticks->insert(tempJoystickID, damncontroller); trackcontrollers.insert(tempJoystickID, damncontroller); Logger::LogInfo(QString("New game controller found - #%1 [%2]") @@ -553,14 +530,15 @@ void InputDaemon::addInputDevice(int index) } #else SDL_Joystick *joystick = SDL_JoystickOpen(index); + if (joystick != nullptr) { - SDL_JoystickID tempJoystickID = SDL_JoystickInstanceID(joystick); + SDL_JoystickID tempJoystickID_local = SDL_JoystickInstanceID(joystick); - if (!joysticks->contains(tempJoystickID)) + if (!m_joysticks->contains(tempJoystickID_local)) { - settings->getLock()->lock(); - settings->beginGroup("Mappings"); + m_settings->getLock()->lock(); + m_settings->beginGroup("Mappings"); QString temp = QString(); SDL_JoystickGUID tempGUID = SDL_JoystickGetGUID(joystick); @@ -568,7 +546,7 @@ void InputDaemon::addInputDevice(int index) SDL_JoystickGetGUIDString(tempGUID, guidString, sizeof(guidString)); temp = QString(guidString); - bool disableGameController = settings->value(QString("%1Disable").arg(temp), false).toBool(); + bool disableGameController = m_settings->value(QString("%1Disable").arg(temp), false).toBool(); if (SDL_IsGameController(index) && !disableGameController) { @@ -579,34 +557,35 @@ void InputDaemon::addInputDevice(int index) if (controller != nullptr) { SDL_Joystick *sdlStick = SDL_GameControllerGetJoystick(controller); - SDL_JoystickID tempJoystickID = SDL_JoystickInstanceID(sdlStick); - if (!joysticks->contains(tempJoystickID)) + SDL_JoystickID tempJoystickID_local_2 = SDL_JoystickInstanceID(sdlStick); + + if (!m_joysticks->contains(tempJoystickID_local_2)) { - GameController *damncontroller = new GameController(controller, index, settings, this); + GameController *damncontroller = new GameController(controller, index, m_settings, this); connect(damncontroller, &GameController::requestWait, eventWorker, &SDLEventReader::haltServices); - joysticks->insert(tempJoystickID, damncontroller); - trackcontrollers.insert(tempJoystickID, damncontroller); + m_joysticks->insert(tempJoystickID_local_2, damncontroller); + trackcontrollers.insert(tempJoystickID_local_2, damncontroller); - settings->endGroup(); - settings->getLock()->unlock(); + m_settings->endGroup(); + m_settings->getLock()->unlock(); emit deviceAdded(damncontroller); } } else { - settings->endGroup(); - settings->getLock()->unlock(); + m_settings->endGroup(); + m_settings->getLock()->unlock(); } } else { - Joystick *curJoystick = new Joystick(joystick, index, settings, this); - joysticks->insert(tempJoystickID, curJoystick); - getTrackjoysticksLocal().insert(tempJoystickID, curJoystick); + Joystick *curJoystick = new Joystick(joystick, index, m_settings, this); + m_joysticks->insert(tempJoystickID_local, curJoystick); + getTrackjoysticksLocal().insert(tempJoystickID_local, curJoystick); - settings->endGroup(); - settings->getLock()->unlock(); + m_settings->endGroup(); + m_settings->getLock()->unlock(); emit deviceAdded(curJoystick); } @@ -627,12 +606,13 @@ Joystick *InputDaemon::openJoystickDevice(int index) // Check if joystick is considered connected. SDL_Joystick *joystick = SDL_JoystickOpen(index); Joystick *curJoystick = nullptr; + if (joystick != nullptr) { SDL_JoystickID tempJoystickID = SDL_JoystickInstanceID(joystick); - curJoystick = new Joystick(joystick, index, settings, this); - joysticks->insert(tempJoystickID, curJoystick); + curJoystick = new Joystick(joystick, index, m_settings, this); + m_joysticks->insert(tempJoystickID, curJoystick); getTrackjoysticksLocal().insert(tempJoystickID, curJoystick); } @@ -641,7 +621,6 @@ Joystick *InputDaemon::openJoystickDevice(int index) } - InputDeviceBitArrayStatus* InputDaemon::createOrGrabBitStatusEntry(QHash *statusHash, InputDevice *device, bool readCurrent) @@ -676,7 +655,6 @@ void InputDaemon::firstInputPass(QQueue *sdlEventQueue) case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: { - InputDevice *joy = getTrackjoysticksLocal().value(event.jbutton.which); if (joy != nullptr) @@ -752,13 +730,16 @@ void InputDaemon::firstInputPass(QQueue *sdlEventQueue) case SDL_CONTROLLERAXISMOTION: { InputDevice *joy = trackcontrollers.value(event.caxis.which); + if (joy != nullptr) { SetJoystick* set = joy->getActiveSetJoystick(); JoyAxis *axis = set->getJoyAxis(event.caxis.axis); + if (axis != nullptr) { InputDeviceBitArrayStatus *temp = createOrGrabBitStatusEntry(&releaseEventsGenerated, joy, false); + if ((event.caxis.axis != SDL_CONTROLLER_AXIS_TRIGGERLEFT) && (event.caxis.axis != SDL_CONTROLLER_AXIS_TRIGGERRIGHT)) { @@ -766,7 +747,7 @@ void InputDaemon::firstInputPass(QQueue *sdlEventQueue) } else { - temp->changeAxesStatus(event.caxis.axis, event.caxis.value == GAMECONTROLLERTRIGGERRELEASE); + temp->changeAxesStatus(event.caxis.axis, event.caxis.value == GlobalVariables::InputDaemon::GAMECONTROLLERTRIGGERRELEASE); } InputDeviceBitArrayStatus *pending = createOrGrabBitStatusEntry(&pendingEventValues, joy); @@ -781,6 +762,7 @@ void InputDaemon::firstInputPass(QQueue *sdlEventQueue) case SDL_CONTROLLERBUTTONUP: { InputDevice *joy = trackcontrollers.value(event.cbutton.which); + if (joy != nullptr) { SetJoystick* set = joy->getActiveSetJoystick(); @@ -808,6 +790,10 @@ void InputDaemon::firstInputPass(QQueue *sdlEventQueue) sdlEventQueue->append(event); break; } + default: + { + break; + } } } } @@ -818,6 +804,7 @@ void InputDaemon::modifyUnplugEvents(QQueue *sdlEventQueue) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator genIter(getReleaseEventsGeneratedLocal()); + while (genIter.hasNext()) { genIter.next(); @@ -826,13 +813,13 @@ void InputDaemon::modifyUnplugEvents(QQueue *sdlEventQueue) QBitArray tempBitArray = generatedTemp->generateFinalBitArray(); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "ARRAY: " << tempBitArray; + qDebug() << "ARRAY: " << tempBitArray; #endif int bitArraySize = tempBitArray.size(); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "ARRAY SIZE: " << bitArraySize; + qDebug() << "ARRAY SIZE: " << bitArraySize; #endif if ((bitArraySize > 0) && (tempBitArray.count(true) == device->getNumberAxes())) @@ -848,9 +835,11 @@ void InputDaemon::modifyUnplugEvents(QQueue *sdlEventQueue) (pendingBitArray == unplugBitArray)) { QQueue tempQueue; + while (!sdlEventQueue->isEmpty()) { SDL_Event event = sdlEventQueue->dequeue(); + switch (event.type) { case SDL_JOYBUTTONDOWN: @@ -876,7 +865,7 @@ void InputDaemon::modifyUnplugEvents(QQueue *sdlEventQueue) { if (axis->getThrottle() != static_cast(JoyAxis::NormalThrottle)) { - event.jaxis.value = static_cast(axis->getProperReleaseValue()); + event.jaxis.value = axis->getProperReleaseValue(); } } } @@ -900,16 +889,18 @@ void InputDaemon::modifyUnplugEvents(QQueue *sdlEventQueue) else { InputDevice *joy = trackcontrollers.value(event.caxis.which); + if (joy != nullptr) { SetJoystick* set = joy->getActiveSetJoystick(); JoyAxis *axis = set->getJoyAxis(event.caxis.axis); + if (axis != nullptr) { if ((event.caxis.axis == SDL_CONTROLLER_AXIS_TRIGGERLEFT) || (event.caxis.axis == SDL_CONTROLLER_AXIS_TRIGGERRIGHT)) { - event.caxis.value = static_cast(axis->getProperReleaseValue()); + event.caxis.value = axis->getProperReleaseValue(); } } } @@ -947,7 +938,6 @@ void InputDaemon::modifyUnplugEvents(QQueue *sdlEventQueue) } - QBitArray InputDaemon::createUnplugEventBitArray(InputDevice *device) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -957,10 +947,9 @@ QBitArray InputDaemon::createUnplugEventBitArray(InputDevice *device) for (int i = 0; i < device->getNumberRawAxes(); i++) { JoyAxis *axis = device->getActiveSetJoystick()->getJoyAxis(i); + if ((axis != nullptr) && (axis->getThrottle() != static_cast(JoyAxis::NormalThrottle))) - { tempStatus.changeAxesStatus(i, true); - } } QBitArray unplugBitArray = tempStatus.generateFinalBitArray(); @@ -983,7 +972,6 @@ void InputDaemon::secondInputPass(QQueue *sdlEventQueue) case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: { - InputDevice *joy = getTrackjoysticksLocal().value(event.jbutton.which); if (joy != nullptr) @@ -996,9 +984,7 @@ void InputDaemon::secondInputPass(QQueue *sdlEventQueue) button->queuePendingEvent(event.type == SDL_JOYBUTTONDOWN ? true : false); if (!activeDevices.contains(event.jbutton.which)) - { activeDevices.insert(event.jbutton.which, joy); - } } } else if (trackcontrollers.contains(event.jbutton.which)) @@ -1019,14 +1005,13 @@ void InputDaemon::secondInputPass(QQueue *sdlEventQueue) { SetJoystick* set = joy->getActiveSetJoystick(); JoyAxis *axis = set->getJoyAxis(event.jaxis.axis); + if (axis != nullptr) { axis->queuePendingEvent(event.jaxis.value); if (!activeDevices.contains(event.jaxis.which)) - { activeDevices.insert(event.jaxis.which, joy); - } } joy->rawAxisEvent(event.jaxis.which, event.jaxis.value); @@ -1048,14 +1033,13 @@ void InputDaemon::secondInputPass(QQueue *sdlEventQueue) { SetJoystick* set = joy->getActiveSetJoystick(); JoyDPad *dpad = set->getJoyDPad(event.jhat.hat); + if (dpad != nullptr) { dpad->joyEvent(event.jhat.value); if (!activeDevices.contains(event.jhat.which)) - { activeDevices.insert(event.jhat.which, joy); - } } } else if (trackcontrollers.contains(event.jhat.which)) @@ -1070,20 +1054,21 @@ void InputDaemon::secondInputPass(QQueue *sdlEventQueue) case SDL_CONTROLLERAXISMOTION: { InputDevice *joy = trackcontrollers.value(event.caxis.which); + if (joy != nullptr) { SetJoystick* set = joy->getActiveSetJoystick(); JoyAxis *axis = set->getJoyAxis(event.caxis.axis); + if (axis != nullptr) { axis->queuePendingEvent(event.caxis.value); if (!activeDevices.contains(event.caxis.which)) - { activeDevices.insert(event.caxis.which, joy); - } } } + break; } @@ -1091,6 +1076,7 @@ void InputDaemon::secondInputPass(QQueue *sdlEventQueue) case SDL_CONTROLLERBUTTONUP: { InputDevice *joy = trackcontrollers.value(event.cbutton.which); + if (joy != nullptr) { SetJoystick* set = joy->getActiveSetJoystick(); @@ -1101,9 +1087,7 @@ void InputDaemon::secondInputPass(QQueue *sdlEventQueue) button->queuePendingEvent(event.type == SDL_CONTROLLERBUTTONDOWN ? true : false); if (!activeDevices.contains(event.cbutton.which)) - { activeDevices.insert(event.cbutton.which, joy); - } } } @@ -1112,7 +1096,8 @@ void InputDaemon::secondInputPass(QQueue *sdlEventQueue) case SDL_JOYDEVICEREMOVED: { - InputDevice *device = joysticks->value(event.jdevice.which); + InputDevice *device = m_joysticks->value(event.jdevice.which); + if (device != nullptr) { Logger::LogInfo(QString("Removing joystick #%1 [%2]") @@ -1143,6 +1128,7 @@ void InputDaemon::secondInputPass(QQueue *sdlEventQueue) // Active possible queued events. QHashIterator activeDevIter(activeDevices); + while (activeDevIter.hasNext()) { InputDevice *tempDevice = activeDevIter.next().value(); @@ -1153,11 +1139,8 @@ void InputDaemon::secondInputPass(QQueue *sdlEventQueue) tempDevice->activatePossibleButtonEvents(); } - if (JoyButton::shouldInvokeMouseEvents()) - { - // Do not wait for next event loop run. Execute immediately. - JoyButton::invokeMouseEvents(); - } + if (JoyButton::shouldInvokeMouseEvents(JoyButton::getPendingMouseButtons(), JoyButton::getStaticMouseEventTimer(), JoyButton::getTestOldMouseTime())) + JoyButton::invokeMouseEvents(JoyButton::getMouseHelper()); // Do not wait for next event loop run. Execute immediately. } } @@ -1166,9 +1149,11 @@ void InputDaemon::clearBitArrayStatusInstances() qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator genIter(getReleaseEventsGeneratedLocal()); + while (genIter.hasNext()) { InputDeviceBitArrayStatus *temp = genIter.next().value(); + if (temp != nullptr) { delete temp; @@ -1179,9 +1164,11 @@ void InputDaemon::clearBitArrayStatusInstances() getReleaseEventsGeneratedLocal().clear(); QHashIterator pendIter(getPendingEventValuesLocal()); + while (pendIter.hasNext()) { InputDeviceBitArrayStatus *temp = pendIter.next().value(); + if (temp != nullptr) { delete temp; @@ -1198,7 +1185,7 @@ void InputDaemon::resetActiveButtonMouseDistances() pollResetTimer.stop(); - JoyButton::resetActiveButtonMouseDistances(); + JoyButton::resetActiveButtonMouseDistances(JoyButton::getMouseHelper()); } void InputDaemon::updatePollResetRate(int tempPollRate) @@ -1207,18 +1194,13 @@ void InputDaemon::updatePollResetRate(int tempPollRate) Q_UNUSED(tempPollRate); - bool wasActive = pollResetTimer.isActive(); pollResetTimer.stop(); - pollResetTimer.setInterval( - qMax(JoyButton::getMouseRefreshRate(), - JoyButton::getGamepadRefreshRate()) + 1); + qMax(GlobalVariables::JoyButton::mouseRefreshRate, + GlobalVariables::JoyButton::gamepadRefreshRate) + 1); - if (wasActive) - { - pollResetTimer.start(); - } + if (wasActive) pollResetTimer.start(); } QHash& InputDaemon::getTrackjoysticksLocal() { diff --git a/src/inputdaemon.h b/src/inputdaemon.h old mode 100644 new mode 100755 index 9ca82f0ea..031ded439 --- a/src/inputdaemon.h +++ b/src/inputdaemon.h @@ -57,8 +57,6 @@ class InputDaemon : public QObject void clearBitArrayStatusInstances(); - static const int GAMECONTROLLERTRIGGERRELEASE; - signals: void joystickRefreshed (InputDevice *joystick); void joysticksRefreshed(QMap *joysticks); @@ -93,7 +91,7 @@ private slots: QHash& getReleaseEventsGeneratedLocal(); QHash& getPendingEventValuesLocal(); - QMap *joysticks; + QMap *m_joysticks; QHash trackjoysticks; QHash trackcontrollers; @@ -101,11 +99,11 @@ private slots: QHash pendingEventValues; bool stopped; - bool graphical; + bool m_graphical; SDLEventReader *eventWorker; QThread *sdlWorkerThread; - AntiMicroSettings *settings; + AntiMicroSettings *m_settings; QTimer pollResetTimer; }; diff --git a/src/inputdevice.cpp b/src/inputdevice.cpp old mode 100644 new mode 100755 index a0750500b..7feeb25d8 --- a/src/inputdevice.cpp +++ b/src/inputdevice.cpp @@ -17,6 +17,7 @@ #include "inputdevice.h" +#include "globalvariables.h" #include "messagehandler.h" #include "common.h" #include "antimicrosettings.h" @@ -33,14 +34,6 @@ #include -const int InputDevice::NUMBER_JOYSETS = 8; -const int InputDevice::DEFAULTKEYPRESSTIME = 100; -const int InputDevice::DEFAULTKEYREPEATDELAY = 660; // 660 ms -const int InputDevice::DEFAULTKEYREPEATRATE = 40; // 40 ms. 25 times per second -const int InputDevice::RAISEDDEADZONE = 20000; - -QRegExp InputDevice::emptyGUID("^[0]+$"); - InputDevice::InputDevice(int deviceIndex, AntiMicroSettings *settings, QObject *parent) : QObject(parent) { @@ -60,8 +53,8 @@ InputDevice::InputDevice(int deviceIndex, AntiMicroSettings *settings, QObject * keyRepeatDelay = 0; keyRepeatRate = 0; - rawAxisDeadZone = RAISEDDEADZONE; - this->settings = settings; + rawAxisDeadZone = GlobalVariables::InputDevice::RAISEDDEADZONE; + m_settings = settings; } InputDevice::~InputDevice() @@ -69,9 +62,11 @@ InputDevice::~InputDevice() qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getJoystick_sets()); + while (iter.hasNext()) { SetJoystick *setjoystick = iter.next().value(); + if (setjoystick != nullptr) { delete setjoystick; @@ -105,7 +100,7 @@ void InputDevice::reset() deviceEdited = false; profileName = ""; - for (int i = 0; i < NUMBER_JOYSETS; i++) + for (int i = 0; i < GlobalVariables::InputDevice::NUMBER_JOYSETS; i++) { SetJoystick* set = getJoystick_sets().value(i); set->reset(); @@ -149,6 +144,7 @@ void InputDevice::reInitButtons() qInstallMessageHandler(MessageHandler::myMessageOutput); SetJoystick *current_set = getJoystick_sets().value(active_set); + for (int i = 0; i < current_set->getNumberButtons(); i++) { bool value = getButtonstatesLocal().at(i); @@ -185,7 +181,7 @@ void InputDevice::setActiveSetNumber(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (((index >= 0) && (index < NUMBER_JOYSETS)) && (index != active_set)) + if (((index >= 0) && (index < GlobalVariables::InputDevice::NUMBER_JOYSETS)) && (index != active_set)) { QList buttonstates; QList axesstates; @@ -214,6 +210,7 @@ void InputDevice::setActiveSetNumber(int index) tempSet->getJoyAxis(i)->copyRawValues(axis); tempSet->getJoyAxis(i)->copyThrottledValues(axis); JoyAxisButton *button = tempSet->getJoyAxis(i)->getAxisButtonByValue(axis->getCurrentRawValue()); + if (button != nullptr) { button->setUpdateInitAccel(false); @@ -256,7 +253,7 @@ void InputDevice::setActiveSetNumber(int index) // Activate all buttons in the switched set current_set = getJoystick_sets().value(active_set); - for (int i=0; i < current_set->getNumberSticks(); i++) + for (int i = 0; i < current_set->getNumberSticks(); i++) { JoyControlStick::JoyStickDirections value = stickstates.at(i); QList buttonList; @@ -370,7 +367,6 @@ void InputDevice::setActiveSetNumber(int index) oldButtonList.append(old_set->getVDPad(i)->getJoyButton(JoyDPadButton::DpadRight)); break; } - case JoyDPadButton::DpadRightDown: { buttonList.append(dpad->getJoyButton(JoyDPadButton::DpadRight)); @@ -409,10 +405,12 @@ void InputDevice::setActiveSetNumber(int index) } QHashIterator iter(*dpad->getJoyButtons()); + while (iter.hasNext()) { // Ensure that set change events are performed if needed. JoyDPadButton *button = iter.next().value(); + if (!buttonList.contains(button)) { button->setWhileHeldStatus(false); @@ -424,30 +422,19 @@ void InputDevice::setActiveSetNumber(int index) JoyDPadButton *button = buttonList.at(j); JoyDPadButton *oldButton = oldButtonList.at(j); - if ((button != nullptr) && (oldButton != nullptr)) + if ((button != nullptr) && (oldButton != nullptr) && (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) + && valueTrue && (oldButton->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) && oldButton->getWhileHeldStatus()) { - if (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) - { - if (valueTrue) - { - if ((oldButton->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) && oldButton->getWhileHeldStatus()) - { - // Button from old set involved in a while held set - // change. Carry over to new set button to ensure - // set changes are done in the proper order. - button->setWhileHeldStatus(true); - } - else if (!button->getWhileHeldStatus()) - { - // Ensure that set change events are performed if needed. - //tempignore = false; - } - } - else - { - button->setWhileHeldStatus(false); - } - } + // Button from old set involved in a while held set + // change. Carry over to new set button to ensure + // set changes are done in the proper order. + + button->setWhileHeldStatus(true); + } + else if ((button != nullptr) && (oldButton != nullptr) && (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) + && !valueTrue) + { + button->setWhileHeldStatus(false); } } } @@ -458,28 +445,24 @@ void InputDevice::setActiveSetNumber(int index) bool tempignore = false; JoyButton *button = current_set->getJoyButton(i); JoyButton *oldButton = old_set->getJoyButton(i); - if (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) + + if (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld && value && (oldButton->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) && oldButton->getWhileHeldStatus()) { - if (value) - { - if ((oldButton->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) && oldButton->getWhileHeldStatus()) - { - // Button from old set involved in a while held set - // change. Carry over to new set button to ensure - // set changes are done in the proper order. - button->setWhileHeldStatus(true); - } - else if (!button->getWhileHeldStatus()) - { - // Ensure that set change events are performed if needed. - tempignore = false; - } - } - else - { - // Ensure that set change events are performed if needed. - button->setWhileHeldStatus(false); - } + // Button from old set involved in a while held set + // change. Carry over to new set button to ensure + // set changes are done in the proper order. + + button->setWhileHeldStatus(true); + } + else if (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld && value && !button->getWhileHeldStatus()) + { + // Ensure that set change events are performed if needed. + tempignore = false; + } + else if (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld && !value) + { + // Ensure that set change events are performed if needed. + button->setWhileHeldStatus(false); } button->queuePendingEvent(value, tempignore); @@ -494,23 +477,20 @@ void InputDevice::setActiveSetNumber(int index) JoyAxisButton *oldButton = old_set->getJoyAxis(i)->getAxisButtonByValue(value); JoyAxisButton *button = axis->getAxisButtonByValue(value); - if ((button != nullptr) && (oldButton != nullptr)) + if ((button != nullptr) && (oldButton != nullptr) && (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) && + (oldButton->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) && oldButton->getWhileHeldStatus()) { - if (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) - { - if ((oldButton->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) && oldButton->getWhileHeldStatus()) - { - // Button from old set involved in a while held set - // change. Carry over to new set button to ensure - // set changes are done in the proper order. - button->setWhileHeldStatus(true); - } - else if (!button->getWhileHeldStatus()) - { - // Ensure that set change events are performed if needed. - tempignore = false; - } - } + // Button from old set involved in a while held set + // change. Carry over to new set button to ensure + // set changes are done in the proper order. + + button->setWhileHeldStatus(true); + } + else if ((button != nullptr) && (oldButton != nullptr) && (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) && + !button->getWhileHeldStatus()) + { + // Ensure that set change events are performed if needed. + tempignore = false; } else if (button == nullptr) { @@ -544,7 +524,6 @@ void InputDevice::setActiveSetNumber(int index) oldButtonList.append(old_set->getJoyDPad(i)->getJoyButton(JoyDPadButton::DpadRight)); break; } - case JoyDPadButton::DpadRightDown: { buttonList.append(dpad->getJoyButton(JoyDPadButton::DpadRight)); @@ -583,14 +562,14 @@ void InputDevice::setActiveSetNumber(int index) } QHashIterator iter(*dpad->getJoyButtons()); + while (iter.hasNext()) { // Ensure that set change events are performed if needed. JoyDPadButton *button = iter.next().value(); + if (!buttonList.contains(button)) - { button->setWhileHeldStatus(false); - } } for (int j = 0; j < buttonList.size(); j++) @@ -598,31 +577,25 @@ void InputDevice::setActiveSetNumber(int index) JoyDPadButton *button = buttonList.at(j); JoyDPadButton *oldButton = oldButtonList.at(j); - if ((button != nullptr) && (oldButton != nullptr)) + if ((button != nullptr) && (oldButton != nullptr) && (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) + && valueTrue && (oldButton->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) && oldButton->getWhileHeldStatus()) { - if (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) - { - if (valueTrue) - { - if ((oldButton->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) && oldButton->getWhileHeldStatus()) - { - // Button from old set involved in a while held set - // change. Carry over to new set button to ensure - // set changes are done in the proper order. - button->setWhileHeldStatus(true); - } - else if (!button->getWhileHeldStatus()) - { - // Ensure that set change events are performed if needed. - tempignore = false; - } - } - else - { - button->setWhileHeldStatus(false); - } + // Button from old set involved in a while held set + // change. Carry over to new set button to ensure + // set changes are done in the proper order. - } + button->setWhileHeldStatus(true); + } + else if ((button != nullptr) && (oldButton != nullptr) && (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) + && valueTrue && !button->getWhileHeldStatus()) + { + // Ensure that set change events are performed if needed. + tempignore = false; + } + else if ((button != nullptr) && (oldButton != nullptr) && (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld) + && !valueTrue) + { + button->setWhileHeldStatus(false); } } @@ -717,8 +690,8 @@ void InputDevice::readConfig(QXmlStreamReader *xml) if (xml->isStartElement() && (xml->name() == getXmlName())) { transferReset(); - xml->readNextStartElement(); + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != getXmlName()))) { if ((xml->name() == "sets") && xml->isStartElement()) @@ -731,10 +704,9 @@ void InputDevice::readConfig(QXmlStreamReader *xml) { int index = xml->attributes().value("index").toString().toInt(); index = index - 1; + if ((index >= 0) && (index < getJoystick_sets().size())) - { getJoystick_sets().value(index)->readConfig(xml); - } } else { @@ -762,6 +734,7 @@ void InputDevice::readConfig(QXmlStreamReader *xml) SetJoystick *currentset = getJoystick_sets().value(i); JoyAxis *axis1 = currentset->getJoyAxis(xAxis); JoyAxis *axis2 = currentset->getJoyAxis(yAxis); + if ((axis1 != nullptr) && (axis2 != nullptr)) { JoyControlStick *stick = new JoyControlStick(axis1, axis2, stickIndex, i, this); @@ -784,7 +757,8 @@ void InputDevice::readConfig(QXmlStreamReader *xml) for (int i = 0; i < getJoystick_sets().size(); i++) { SetJoystick *currentset = getJoystick_sets().value(i); - VDPad *vdpad = currentset->getVDPad(vdpadIndex-1); + VDPad *vdpad = currentset->getVDPad(vdpadIndex - 1); + if (vdpad == nullptr) { vdpad = new VDPad(vdpadIndex-1, i, currentset, currentset); @@ -793,6 +767,7 @@ void InputDevice::readConfig(QXmlStreamReader *xml) } xml->readNextStartElement(); + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != "vdpadButtonAssociations"))) { if ((xml->name() == "vdpadButtonAssociation") && xml->isStartElement()) @@ -804,29 +779,25 @@ void InputDevice::readConfig(QXmlStreamReader *xml) if ((vdpadAxisIndex > 0) && (vdpadDirection > 0)) { vdpadAxisIndex -= 1; - for (int i=0; i < getJoystick_sets().size(); i++) + + for (int i = 0; i < getJoystick_sets().size(); i++) { SetJoystick *currentset = getJoystick_sets().value(i); - VDPad *vdpad = currentset->getVDPad(vdpadIndex-1); + VDPad *vdpad = currentset->getVDPad(vdpadIndex - 1); + if (vdpad != nullptr) { JoyAxis *axis = currentset->getJoyAxis(vdpadAxisIndex); + if (axis != nullptr) { JoyButton *button = nullptr; - if (vdpadButtonIndex == 0) - { - button = axis->getNAxisButton(); - } - else if (vdpadButtonIndex == 1) - { - button = axis->getPAxisButton(); - } + + if (vdpadButtonIndex == 0) button = axis->getNAxisButton(); + else if (vdpadButtonIndex == 1) button = axis->getPAxisButton(); if (button != nullptr) - { vdpad->addVButton(static_cast(vdpadDirection), button); - } } } } @@ -838,14 +809,14 @@ void InputDevice::readConfig(QXmlStreamReader *xml) for (int i = 0; i < getJoystick_sets().size(); i++) { SetJoystick *currentset = getJoystick_sets().value(i); - VDPad *vdpad = currentset->getVDPad(vdpadIndex-1); + VDPad *vdpad = currentset->getVDPad(vdpadIndex - 1); + if (vdpad != nullptr) { JoyButton *button = currentset->getJoyButton(vdpadButtonIndex); + if (button != nullptr) - { vdpad->addVButton(static_cast(vdpadDirection), button); - } } } } @@ -860,22 +831,23 @@ void InputDevice::readConfig(QXmlStreamReader *xml) } } - for (int i=0; i < getJoystick_sets().size(); i++) + for (int i = 0; i < getJoystick_sets().size(); i++) { SetJoystick *currentset = getJoystick_sets().value(i); - for (int j=0; j < currentset->getNumberVDPads(); j++) + + for (int j = 0; j < currentset->getNumberVDPads(); j++) { VDPad *vdpad = currentset->getVDPad(j); + if ((vdpad != nullptr) && vdpad->isEmpty()) - { currentset->removeVDPad(j); - } } } } else if ((xml->name() == "names") && xml->isStartElement()) { xml->readNextStartElement(); + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != "names"))) { if ((xml->name() == "buttonname") && xml->isStartElement()) @@ -883,6 +855,7 @@ void InputDevice::readConfig(QXmlStreamReader *xml) int index = xml->attributes().value("index").toString().toInt(); QString temp = xml->readElementText(); index = index - 1; + if ((index >= 0) && !temp.isEmpty()) { setButtonName(index, temp); @@ -895,6 +868,7 @@ void InputDevice::readConfig(QXmlStreamReader *xml) QString temp = xml->readElementText(); index = index - 1; buttonIndex = buttonIndex - 1; + if ((index >= 0) && !temp.isEmpty()) { setAxisButtonName(index, buttonIndex, temp); @@ -906,6 +880,7 @@ void InputDevice::readConfig(QXmlStreamReader *xml) int buttonIndex = xml->attributes().value("button").toString().toInt(); QString temp = xml->readElementText(); index = index - 1; + if ((index >= 0) && !temp.isEmpty()) { setStickButtonName(index, buttonIndex, temp); @@ -917,6 +892,7 @@ void InputDevice::readConfig(QXmlStreamReader *xml) int buttonIndex = xml->attributes().value("button").toString().toInt(); QString temp = xml->readElementText(); index = index - 1; + if ((index >= 0) && !temp.isEmpty()) { setDPadButtonName(index, buttonIndex, temp); @@ -928,6 +904,7 @@ void InputDevice::readConfig(QXmlStreamReader *xml) int buttonIndex = xml->attributes().value("button").toString().toInt(); QString temp = xml->readElementText(); index = index - 1; + if ((index >= 0) && !temp.isEmpty()) { setVDPadButtonName(index, buttonIndex, temp); @@ -938,6 +915,7 @@ void InputDevice::readConfig(QXmlStreamReader *xml) int index = xml->attributes().value("index").toString().toInt(); QString temp = xml->readElementText(); index = index - 1; + if ((index >= 0) && !temp.isEmpty()) { setAxisName(index, temp); @@ -948,6 +926,7 @@ void InputDevice::readConfig(QXmlStreamReader *xml) int index = xml->attributes().value("index").toString().toInt(); QString temp = xml->readElementText(); index = index - 1; + if ((index >= 0) && !temp.isEmpty()) { setStickName(index, temp); @@ -958,6 +937,7 @@ void InputDevice::readConfig(QXmlStreamReader *xml) int index = xml->attributes().value("index").toString().toInt(); QString temp = xml->readElementText(); index = index - 1; + if ((index >= 0) && !temp.isEmpty()) { setDPadName(index, temp); @@ -968,6 +948,7 @@ void InputDevice::readConfig(QXmlStreamReader *xml) int index = xml->attributes().value("index").toString().toInt(); QString temp = xml->readElementText(); index = index - 1; + if ((index >= 0) && !temp.isEmpty()) { setVDPadName(index, temp); @@ -984,8 +965,8 @@ void InputDevice::readConfig(QXmlStreamReader *xml) } else if ((xml->name() == "keyPressTime") && xml->isStartElement()) { - QString temptext = xml->readElementText(); - int tempchoice = temptext.toInt(); + int tempchoice = xml->readElementText().toInt(); + if (tempchoice >= 10) { this->setDeviceKeyPressTime(tempchoice); @@ -993,8 +974,7 @@ void InputDevice::readConfig(QXmlStreamReader *xml) } else if ((xml->name() == "profilename") && xml->isStartElement()) { - QString temptext = xml->readElementText(); - this->setProfileName(temptext); + this->setProfileName(xml->readElementText()); } else { @@ -1023,13 +1003,12 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) xml->writeTextElement("guid", getGUIDString()); if (!profileName.isEmpty()) - { xml->writeTextElement("profilename", profileName); - } - for (int i=0; i < getNumberSticks(); i++) + for (int i = 0; i < getNumberSticks(); i++) { JoyControlStick *stick = getActiveSetJoystick()->getJoyStick(i); + xml->writeStartElement("stickAxisAssociation"); xml->writeAttribute("index", QString::number(stick->getRealJoyIndex())); xml->writeAttribute("xAxis", QString::number(stick->getAxisX()->getRealJoyIndex())); @@ -1037,20 +1016,20 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) xml->writeEndElement(); } - for (int i=0; i < getNumberVDPads(); i++) + for (int i = 0; i < getNumberVDPads(); i++) { VDPad *vdpad = getActiveSetJoystick()->getVDPad(i); xml->writeStartElement("vdpadButtonAssociations"); xml->writeAttribute("index", QString::number(vdpad->getRealJoyNumber())); - JoyButton *button = vdpad->getVButton(JoyDPadButton::DpadUp); + if (button != nullptr) { xml->writeStartElement("vdpadButtonAssociation"); if (typeid(*button) == typeid(JoyAxisButton)) { - JoyAxisButton *axisbutton = qobject_cast(button); // static_cast + JoyAxisButton *axisbutton = qobject_cast(button); xml->writeAttribute("axis", QString::number(axisbutton->getAxis()->getRealJoyIndex())); xml->writeAttribute("button", QString::number(button->getJoyNumber())); } @@ -1065,13 +1044,14 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) } button = vdpad->getVButton(JoyDPadButton::DpadDown); + if (button != nullptr) { xml->writeStartElement("vdpadButtonAssociation"); if (typeid(*button) == typeid(JoyAxisButton)) { - JoyAxisButton *axisbutton = qobject_cast(button); // static_cast + JoyAxisButton *axisbutton = qobject_cast(button); xml->writeAttribute("axis", QString::number(axisbutton->getAxis()->getRealJoyIndex())); xml->writeAttribute("button", QString::number(button->getJoyNumber())); } @@ -1086,13 +1066,14 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) } button = vdpad->getVButton(JoyDPadButton::DpadLeft); + if (button != nullptr) { xml->writeStartElement("vdpadButtonAssociation"); if (typeid(*button) == typeid(JoyAxisButton)) { - JoyAxisButton *axisbutton = qobject_cast(button); // static_cast + JoyAxisButton *axisbutton = qobject_cast(button); xml->writeAttribute("axis", QString::number(axisbutton->getAxis()->getRealJoyIndex())); xml->writeAttribute("button", QString::number(button->getJoyNumber())); } @@ -1107,13 +1088,14 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) } button = vdpad->getVButton(JoyDPadButton::DpadRight); + if (button != nullptr) { xml->writeStartElement("vdpadButtonAssociation"); if (typeid(*button) == typeid(JoyAxisButton)) { - JoyAxisButton *axisbutton = qobject_cast(button); // static_cast + JoyAxisButton *axisbutton = qobject_cast(button); xml->writeAttribute("axis", QString::number(axisbutton->getAxis()->getRealJoyIndex())); xml->writeAttribute("button", QString::number(button->getJoyNumber())); } @@ -1131,14 +1113,16 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) } bool tempHasNames = elementsHaveNames(); + if (tempHasNames) { xml->writeStartElement("names"); // - SetJoystick *tempSet = getActiveSetJoystick(); - for (int i=0; i < getNumberButtons(); i++) + + for (int i = 0; i < getNumberButtons(); i++) { JoyButton *button = tempSet->getJoyButton(i); + if ((button != nullptr) && !button->getButtonName().isEmpty()) { xml->writeStartElement("buttonname"); @@ -1148,9 +1132,10 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) } } - for (int i=0; i < getNumberAxes(); i++) + for (int i = 0; i < getNumberAxes(); i++) { JoyAxis *axis = tempSet->getJoyAxis(i); + if (axis != nullptr) { if (!axis->getAxisName().isEmpty()) @@ -1162,6 +1147,7 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) } JoyAxisButton *naxisbutton = axis->getNAxisButton(); + if (!naxisbutton->getButtonName().isEmpty()) { xml->writeStartElement("axisbuttonname"); @@ -1172,6 +1158,7 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) } JoyAxisButton *paxisbutton = axis->getPAxisButton(); + if (!paxisbutton->getButtonName().isEmpty()) { xml->writeStartElement("axisbuttonname"); @@ -1183,9 +1170,10 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) } } - for (int i=0; i < getNumberSticks(); i++) + for (int i = 0; i < getNumberSticks(); i++) { JoyControlStick *stick = tempSet->getJoyStick(i); + if (stick != nullptr) { if (!stick->getStickName().isEmpty()) @@ -1198,9 +1186,11 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) QHash *buttons = stick->getButtons(); QHashIterator iter(*buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); + if (button && !button->getButtonName().isEmpty()) { xml->writeStartElement("controlstickbuttonname"); @@ -1213,9 +1203,10 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) } } - for (int i=0; i < getNumberHats(); i++) + for (int i = 0; i < getNumberHats(); i++) { JoyDPad *dpad = tempSet->getJoyDPad(i); + if (dpad != nullptr) { if (!dpad->getDpadName().isEmpty()) @@ -1228,9 +1219,11 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) QHash *temp = dpad->getButtons(); QHashIterator iter(*temp); + while (iter.hasNext()) { JoyDPadButton *button = iter.next().value(); + if (button && !button->getButtonName().isEmpty()) { xml->writeStartElement("dpadbuttonname"); @@ -1243,9 +1236,10 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) } } - for (int i=0; i < getNumberVDPads(); i++) + for (int i = 0; i < getNumberVDPads(); i++) { VDPad *vdpad = getActiveSetJoystick()->getVDPad(i); + if (vdpad != nullptr) { if (!vdpad->getDpadName().isEmpty()) @@ -1258,9 +1252,11 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) QHash *temp = vdpad->getButtons(); QHashIterator iter(*temp); + while (iter.hasNext()) { JoyDPadButton *button = iter.next().value(); + if ((button != nullptr) && !button->getButtonName().isEmpty()) { xml->writeStartElement("vdpadbutton"); @@ -1276,20 +1272,16 @@ void InputDevice::writeConfig(QXmlStreamWriter *xml) xml->writeEndElement(); // } - - if ((keyPressTime > 0) && (keyPressTime != DEFAULTKEYPRESSTIME)) - { + if ((keyPressTime > 0) && (keyPressTime != GlobalVariables::InputDevice::DEFAULTKEYPRESSTIME)) xml->writeTextElement("keyPressTime", QString::number(keyPressTime)); - } xml->writeStartElement("sets"); + for (int i = 0; i < getJoystick_sets().size(); i++) - { getJoystick_sets().value(i)->writeConfig(xml); - } - xml->writeEndElement(); xml->writeEndElement(); + xml->writeEndElement(); } void InputDevice::changeSetAxisButtonAssociation(int button_index, int axis_index, int originset, int newset, int mode) @@ -1297,6 +1289,7 @@ void InputDevice::changeSetAxisButtonAssociation(int button_index, int axis_inde qInstallMessageHandler(MessageHandler::myMessageOutput); JoyAxisButton *button = nullptr; + if (button_index == 0) { button = getJoystick_sets().value(newset)->getJoyAxis(axis_index)->getNAxisButton(); @@ -1349,23 +1342,24 @@ void InputDevice::propogateSetAxisThrottleChange(int index, int originset) qInstallMessageHandler(MessageHandler::myMessageOutput); SetJoystick *currentSet = getJoystick_sets().value(originset); + if (currentSet != nullptr) { JoyAxis *axis = currentSet->getJoyAxis(index); + if (axis != nullptr) { int throttleSetting = axis->getThrottle(); - QHashIterator iter(getJoystick_sets()); + while (iter.hasNext()) { iter.next(); SetJoystick *temp = iter.value(); + // Ignore change for set axis that initiated the change if (temp != currentSet) - { temp->getJoyAxis(index)->setThrottle(throttleSetting); - } } } } @@ -1375,13 +1369,12 @@ void InputDevice::removeControlStick(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); - for (int i=0; i < NUMBER_JOYSETS; i++) + for (int i = 0; i < GlobalVariables::InputDevice::NUMBER_JOYSETS; i++) { SetJoystick *currentset = getSetJoystick(i); + if (currentset->getJoyStick(index)) - { currentset->removeControlStick(index); - } } } @@ -1401,10 +1394,9 @@ void InputDevice::buttonDownEvent(int setindex, int buttonindex) bool old = isActive(); buttonDownCount += 1; + if (isActive() != old) - { emit clicked(joyNumber); - } } void InputDevice::buttonUpEvent(int setindex, int buttonindex) @@ -1416,15 +1408,10 @@ void InputDevice::buttonUpEvent(int setindex, int buttonindex) bool old = isActive(); buttonDownCount -= 1; - if (buttonDownCount < 0) - { - buttonDownCount = 0; - } - if (isActive() != old) - { - emit released(joyNumber); - } + if (buttonDownCount < 0) buttonDownCount = 0; + + if (isActive() != old) emit released(joyNumber); } void InputDevice::buttonClickEvent(int buttonindex) @@ -1463,22 +1450,20 @@ void InputDevice::dpadButtonClickEvent(int buttonindex) { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyDPadButton *dpadbutton = qobject_cast(sender()); // static_cast + JoyDPadButton *dpadbutton = qobject_cast(sender()); + if (dpadbutton != nullptr) - { emit rawDPadButtonClick(dpadbutton->getDPad()->getIndex(), buttonindex); - } } void InputDevice::dpadButtonReleaseEvent(int buttonindex) { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyDPadButton *dpadbutton = qobject_cast(sender()); // static_cast + JoyDPadButton *dpadbutton = qobject_cast(sender()); + if (dpadbutton != nullptr) - { emit rawDPadButtonRelease(dpadbutton->getDPad()->getIndex(), buttonindex); - } } void InputDevice::dpadButtonDownEvent(int setindex, int dpadindex, int buttonindex) @@ -1522,15 +1507,16 @@ void InputDevice::setButtonName(int index, QString tempName) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getJoystick_sets()); + while (iter.hasNext()) { SetJoystick *tempSet = iter.next().value(); disconnect(tempSet, &SetJoystick::setButtonNameChange, this, &InputDevice::updateSetButtonNames); JoyButton *button = tempSet->getJoyButton(index); + if (button != nullptr) - { button->setButtonName(tempName); - } + connect(tempSet, &SetJoystick::setButtonNameChange, this, &InputDevice::updateSetButtonNames); } } @@ -1540,28 +1526,23 @@ void InputDevice::setAxisButtonName(int axisIndex, int buttonIndex, QString temp qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getJoystick_sets()); + while (iter.hasNext()) { SetJoystick *tempSet = iter.next().value(); disconnect(tempSet, &SetJoystick::setAxisButtonNameChange, this, &InputDevice::updateSetAxisButtonNames); JoyAxis *axis = tempSet->getJoyAxis(axisIndex); + if (axis != nullptr) { JoyAxisButton *button = nullptr; - if (buttonIndex == 0) - { - button = axis->getNAxisButton(); - } - else if (buttonIndex == 1) - { - button = axis->getPAxisButton(); - } - if (button != nullptr) - { - button->setButtonName(tempName); - } + if (buttonIndex == 0) button = axis->getNAxisButton(); + else if (buttonIndex == 1) button = axis->getPAxisButton(); + + if (button != nullptr) button->setButtonName(tempName); } + connect(tempSet, &SetJoystick::setAxisButtonNameChange, this, &InputDevice::updateSetAxisButtonNames); } } @@ -1571,19 +1552,21 @@ void InputDevice::setStickButtonName(int stickIndex, int buttonIndex, QString te qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getJoystick_sets()); + while (iter.hasNext()) { SetJoystick *tempSet = iter.next().value(); disconnect(tempSet, &SetJoystick::setStickButtonNameChange, this, &InputDevice::updateSetStickButtonNames); JoyControlStick *stick = tempSet->getJoyStick(stickIndex); + if (stick != nullptr) { JoyControlStickButton *button = stick->getDirectionButton(JoyControlStick::JoyStickDirections(buttonIndex)); + if (button != nullptr) - { button->setButtonName(tempName); - } } + connect(tempSet, &SetJoystick::setStickButtonNameChange, this, &InputDevice::updateSetStickButtonNames); } } @@ -1593,19 +1576,20 @@ void InputDevice::setDPadButtonName(int dpadIndex, int buttonIndex, QString temp qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getJoystick_sets()); + while (iter.hasNext()) { SetJoystick *tempSet = iter.next().value(); disconnect(tempSet, &SetJoystick::setDPadButtonNameChange, this, &InputDevice::updateSetDPadButtonNames); JoyDPad *dpad = tempSet->getJoyDPad(dpadIndex); + if (dpad != nullptr) { JoyDPadButton *button = dpad->getJoyButton(buttonIndex); - if (button != nullptr) - { - button->setButtonName(tempName); - } + + if (button != nullptr) button->setButtonName(tempName); } + connect(tempSet, &SetJoystick::setDPadButtonNameChange, this, &InputDevice::updateSetDPadButtonNames); } } @@ -1615,19 +1599,20 @@ void InputDevice::setVDPadButtonName(int vdpadIndex, int buttonIndex, QString te qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getJoystick_sets()); + while (iter.hasNext()) { SetJoystick *tempSet = iter.next().value(); disconnect(tempSet, &SetJoystick::setVDPadButtonNameChange, this, &InputDevice::updateSetVDPadButtonNames); VDPad *vdpad = tempSet->getVDPad(vdpadIndex); + if (vdpad != nullptr) { JoyDPadButton *button = vdpad->getJoyButton(buttonIndex); - if (button != nullptr) - { - button->setButtonName(tempName); - } + + if (button != nullptr) button->setButtonName(tempName); } + connect(tempSet, &SetJoystick::setVDPadButtonNameChange, this, &InputDevice::updateSetVDPadButtonNames); } } @@ -1637,15 +1622,15 @@ void InputDevice::setAxisName(int axisIndex, QString tempName) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getJoystick_sets()); + while (iter.hasNext()) { SetJoystick *tempSet = iter.next().value(); disconnect(tempSet, &SetJoystick::setAxisNameChange, this, &InputDevice::updateSetAxisNames); JoyAxis *axis = tempSet->getJoyAxis(axisIndex); - if (axis != nullptr) - { - axis->setAxisName(tempName); - } + + if (axis != nullptr) axis->setAxisName(tempName); + connect(tempSet, &SetJoystick::setAxisNameChange, this, &InputDevice::updateSetAxisNames); } } @@ -1655,15 +1640,15 @@ void InputDevice::setStickName(int stickIndex, QString tempName) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getJoystick_sets()); + while (iter.hasNext()) { SetJoystick *tempSet = iter.next().value(); disconnect(tempSet, &SetJoystick::setStickNameChange, this, &InputDevice::updateSetStickNames); JoyControlStick *stick = tempSet->getJoyStick(stickIndex); - if (stick != nullptr) - { - stick->setStickName(tempName); - } + + if (stick != nullptr) stick->setStickName(tempName); + connect(tempSet, &SetJoystick::setStickNameChange, this, &InputDevice::updateSetStickNames); } } @@ -1673,15 +1658,15 @@ void InputDevice::setDPadName(int dpadIndex, QString tempName) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getJoystick_sets()); + while (iter.hasNext()) { SetJoystick *tempSet = iter.next().value(); disconnect(tempSet, &SetJoystick::setDPadNameChange, this, &InputDevice::updateSetDPadNames); JoyDPad *dpad = tempSet->getJoyDPad(dpadIndex); - if (dpad != nullptr) - { - dpad->setDPadName(tempName); - } + + if (dpad != nullptr) dpad->setDPadName(tempName); + connect(tempSet, &SetJoystick::setDPadNameChange, this, &InputDevice::updateSetDPadNames); } } @@ -1691,15 +1676,15 @@ void InputDevice::setVDPadName(int vdpadIndex, QString tempName) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getJoystick_sets()); + while (iter.hasNext()) { SetJoystick *tempSet = iter.next().value(); disconnect(tempSet, &SetJoystick::setVDPadNameChange, this, &InputDevice::updateSetVDPadNames); VDPad *vdpad = tempSet->getVDPad(vdpadIndex); - if (vdpad != nullptr) - { - vdpad->setDPadName(tempName); - } + + if (vdpad != nullptr) vdpad->setDPadName(tempName); + connect(tempSet, &SetJoystick::setVDPadNameChange, this, &InputDevice::updateSetVDPadNames); } } @@ -1710,10 +1695,8 @@ void InputDevice::updateSetButtonNames(int index) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyButton *button = getActiveSetJoystick()->getJoyButton(index); - if (button != nullptr) - { - setButtonName(index, button->getButtonName()); - } + + if (button != nullptr) setButtonName(index, button->getButtonName()); } void InputDevice::updateSetAxisButtonNames(int axisIndex, int buttonIndex) @@ -1721,22 +1704,16 @@ void InputDevice::updateSetAxisButtonNames(int axisIndex, int buttonIndex) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyAxis *axis = getActiveSetJoystick()->getJoyAxis(axisIndex); + if (axis != nullptr) { JoyAxisButton *button = nullptr; - if (buttonIndex == 0) - { - button = axis->getNAxisButton(); - } - else if (buttonIndex == 1) - { - button = axis->getPAxisButton(); - } + + if (buttonIndex == 0) button = axis->getNAxisButton(); + else if (buttonIndex == 1) button = axis->getPAxisButton(); if (button != nullptr) - { setAxisButtonName(axisIndex, buttonIndex, button->getButtonName()); - } } } @@ -1745,13 +1722,13 @@ void InputDevice::updateSetStickButtonNames(int stickIndex, int buttonIndex) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyControlStick *stick = getActiveSetJoystick()->getJoyStick(stickIndex); + if (stick != nullptr) { JoyControlStickButton *button = stick->getDirectionButton(JoyControlStick::JoyStickDirections(buttonIndex)); + if (button != nullptr) - { setStickButtonName(stickIndex, buttonIndex, button->getButtonName()); - } } } @@ -1760,13 +1737,13 @@ void InputDevice::updateSetDPadButtonNames(int dpadIndex, int buttonIndex) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyDPad *dpad = getActiveSetJoystick()->getJoyDPad(dpadIndex); + if (dpad != nullptr) { JoyDPadButton *button = dpad->getJoyButton(buttonIndex); + if (button != nullptr) - { setDPadButtonName(dpadIndex, buttonIndex, button->getButtonName()); - } } } @@ -1775,13 +1752,13 @@ void InputDevice::updateSetVDPadButtonNames(int vdpadIndex, int buttonIndex) qInstallMessageHandler(MessageHandler::myMessageOutput); VDPad *vdpad = getActiveSetJoystick()->getVDPad(vdpadIndex); + if (vdpad != nullptr) { JoyDPadButton *button = vdpad->getJoyButton(buttonIndex); + if (button != nullptr) - { setVDPadButtonName(vdpadIndex, buttonIndex, button->getButtonName()); - } } } @@ -1790,10 +1767,9 @@ void InputDevice::updateSetAxisNames(int axisIndex) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyAxis *axis = getActiveSetJoystick()->getJoyAxis(axisIndex); + if (axis != nullptr) - { setAxisName(axisIndex, axis->getAxisName()); - } } void InputDevice::updateSetStickNames(int stickIndex) @@ -1801,10 +1777,9 @@ void InputDevice::updateSetStickNames(int stickIndex) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyControlStick *stick = getActiveSetJoystick()->getJoyStick(stickIndex); + if (stick != nullptr) - { setStickName(stickIndex, stick->getStickName()); - } } void InputDevice::updateSetDPadNames(int dpadIndex) @@ -1812,10 +1787,9 @@ void InputDevice::updateSetDPadNames(int dpadIndex) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyDPad *dpad = getActiveSetJoystick()->getJoyDPad(dpadIndex); + if (dpad != nullptr) - { setDPadName(dpadIndex, dpad->getDpadName()); - } } void InputDevice::updateSetVDPadNames(int vdpadIndex) @@ -1823,10 +1797,9 @@ void InputDevice::updateSetVDPadNames(int vdpadIndex) qInstallMessageHandler(MessageHandler::myMessageOutput); VDPad *vdpad = getActiveSetJoystick()->getVDPad(vdpadIndex); + if (vdpad != nullptr) - { setVDPadName(vdpadIndex, vdpad->getDpadName()); - } } void InputDevice::resetButtonDownCount() @@ -1901,14 +1874,8 @@ void InputDevice::setIndex(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (index >= 0) - { - joyNumber = index; - } - else - { - joyNumber = 0; - } + if (index >= 0) joyNumber = index; + else joyNumber = 0; } void InputDevice::setDeviceKeyPressTime(int newPressTime) @@ -1958,14 +1925,9 @@ QString InputDevice::getStringIdentifier() QString identifier = QString(); QString tempGUID = getGUIDString(); QString tempName = getSDLName(); - if (!tempGUID.isEmpty()) - { - identifier = tempGUID; - } - else if (!tempName.isEmpty()) - { - identifier = tempName; - } + + if (!tempGUID.isEmpty()) identifier = tempGUID; + else if (!tempName.isEmpty()) identifier = tempName; return identifier; } @@ -2022,7 +1984,8 @@ int InputDevice::getKeyRepeatDelay() { qInstallMessageHandler(MessageHandler::myMessageOutput); - int tempKeyRepeatDelay = DEFAULTKEYREPEATDELAY; + int tempKeyRepeatDelay = GlobalVariables::InputDevice::DEFAULTKEYREPEATDELAY; + if (keyRepeatDelay != 0) { tempKeyRepeatDelay = keyRepeatDelay; @@ -2035,7 +1998,8 @@ int InputDevice::getKeyRepeatRate() { qInstallMessageHandler(MessageHandler::myMessageOutput); - int tempKeyRepeatRate = DEFAULTKEYREPEATRATE; + int tempKeyRepeatRate = GlobalVariables::InputDevice::DEFAULTKEYREPEATRATE; + if (keyRepeatRate != 0) { tempKeyRepeatRate = keyRepeatRate; @@ -2084,7 +2048,6 @@ QString InputDevice::getSDLPlatform() return temp; } - /** * @brief Check if device is using the SDL Game Controller API * @return Status showing if device is using the Game Controller API @@ -2101,10 +2064,8 @@ bool InputDevice::hasCalibrationThrottle(int axisNum) qInstallMessageHandler(MessageHandler::myMessageOutput); bool result = false; - if (getCali().contains(axisNum)) - { - result = true; - } + + if (getCali().contains(axisNum)) result = true; return result; } @@ -2122,7 +2083,7 @@ void InputDevice::setCalibrationThrottle(int axisNum, JoyAxis::ThrottleTypes thr if (!getCali().contains(axisNum)) { - for (int i = 0; i < NUMBER_JOYSETS; i++) + for (int i = 0; i < GlobalVariables::InputDevice::NUMBER_JOYSETS; i++) { getJoystick_sets().value(i)->setAxisThrottle(axisNum, throttle); } @@ -2136,9 +2097,7 @@ void InputDevice::setCalibrationStatus(int axisNum, JoyAxis::ThrottleTypes throt qInstallMessageHandler(MessageHandler::myMessageOutput); if (!getCali().contains(axisNum)) - { getCali().insert(axisNum, throttle); - } } void InputDevice::removeCalibrationStatus(int axisNum) @@ -2146,9 +2105,7 @@ void InputDevice::removeCalibrationStatus(int axisNum) qInstallMessageHandler(MessageHandler::myMessageOutput); if (getCali().contains(axisNum)) - { getCali().remove(axisNum); - } } void InputDevice::sendLoadProfileRequest(QString location) @@ -2156,16 +2113,14 @@ void InputDevice::sendLoadProfileRequest(QString location) qInstallMessageHandler(MessageHandler::myMessageOutput); if (!location.isEmpty()) - { emit requestProfileLoad(location); - } } AntiMicroSettings* InputDevice::getSettings() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return settings; + return m_settings; } bool InputDevice::isKnownController() @@ -2173,23 +2128,19 @@ bool InputDevice::isKnownController() qInstallMessageHandler(MessageHandler::myMessageOutput); bool result = false; + if (isGameController()) { result = true; } else { - settings->beginGroup("Mappings"); - if (settings->contains(getGUIDString())) - { - result = true; - } - else if (settings->contains(QString("%1%2").arg(getGUIDString()).arg("Disabled"))) - { - result = true; - } + m_settings->beginGroup("Mappings"); + + if (m_settings->contains(getGUIDString())) result = true; + else if (m_settings->contains(QString("%1%2").arg(getGUIDString()).arg("Disabled"))) result = true; - settings->endGroup(); + m_settings->endGroup(); } return result; @@ -2211,9 +2162,11 @@ void InputDevice::activatePossibleControlStickEvents() qInstallMessageHandler(MessageHandler::myMessageOutput); SetJoystick *currentSet = getActiveSetJoystick(); - for (int i=0; i < currentSet->getNumberSticks(); i++) + + for (int i = 0; i < currentSet->getNumberSticks(); i++) { JoyControlStick *tempStick = currentSet->getJoyStick(i); + if ((tempStick != nullptr) && tempStick->hasPendingEvent()) { tempStick->activatePendingEvent(); @@ -2226,9 +2179,11 @@ void InputDevice::activatePossibleAxisEvents() qInstallMessageHandler(MessageHandler::myMessageOutput); SetJoystick *currentSet = getActiveSetJoystick(); - for (int i=0; i < currentSet->getNumberAxes(); i++) + + for (int i = 0; i < currentSet->getNumberAxes(); i++) { JoyAxis *tempAxis = currentSet->getJoyAxis(i); + if ((tempAxis != nullptr) && tempAxis->hasPendingEvent()) { tempAxis->activatePendingEvent(); @@ -2241,13 +2196,13 @@ void InputDevice::activatePossibleDPadEvents() qInstallMessageHandler(MessageHandler::myMessageOutput); SetJoystick *currentSet = getActiveSetJoystick(); - for (int i=0; i < currentSet->getNumberHats(); i++) + + for (int i = 0; i < currentSet->getNumberHats(); i++) { JoyDPad *tempDPad = currentSet->getJoyDPad(i); + if ((tempDPad != nullptr) && tempDPad->hasPendingEvent()) - { tempDPad->activatePendingEvent(); - } } } @@ -2256,13 +2211,13 @@ void InputDevice::activatePossibleVDPadEvents() qInstallMessageHandler(MessageHandler::myMessageOutput); SetJoystick *currentSet = getActiveSetJoystick(); - for (int i=0; i < currentSet->getNumberVDPads(); i++) + + for (int i = 0; i < currentSet->getNumberVDPads(); i++) { VDPad *tempVDPad = currentSet->getVDPad(i); + if ((tempVDPad != nullptr) && tempVDPad->hasPendingEvent()) - { tempVDPad->activatePendingEvent(); - } } } @@ -2271,13 +2226,13 @@ void InputDevice::activatePossibleButtonEvents() qInstallMessageHandler(MessageHandler::myMessageOutput); SetJoystick *currentSet = getActiveSetJoystick(); - for (int i=0; i < currentSet->getNumberButtons(); i++) + + for (int i = 0; i < currentSet->getNumberButtons(); i++) { JoyButton *tempButton = currentSet->getJoyButton(i); + if ((tempButton != nullptr) && tempButton->hasPendingEvent()) - { tempButton->activatePendingEvent(); - } } } @@ -2288,104 +2243,88 @@ bool InputDevice::elementsHaveNames() bool result = false; SetJoystick *tempSet = getActiveSetJoystick(); - for (int i=0; i < getNumberButtons() && !result; i++) + + for (int i = 0; i < getNumberButtons() && !result; i++) { JoyButton *button = tempSet->getJoyButton(i); - if ((button != nullptr) && !button->getButtonName().isEmpty()) - { - result = true; - } + + if ((button != nullptr) && !button->getButtonName().isEmpty()) result = true; } - for (int i=0; (i < getNumberAxes()) && !result; i++) + for (int i = 0; (i < getNumberAxes()) && !result; i++) { JoyAxis *axis = tempSet->getJoyAxis(i); + if (axis != nullptr) { - if (!axis->getAxisName().isEmpty()) - { - result = true; - } + if (!axis->getAxisName().isEmpty()) result = true; JoyAxisButton *naxisbutton = axis->getNAxisButton(); - if (!naxisbutton->getButtonName().isEmpty()) - { - result = true; - } + + if (!naxisbutton->getButtonName().isEmpty()) result = true; JoyAxisButton *paxisbutton = axis->getPAxisButton(); - if (!paxisbutton->getButtonName().isEmpty()) - { - result = true; - } + + if (!paxisbutton->getButtonName().isEmpty()) result = true; } } - for (int i=0; (i < getNumberSticks()) && !result; i++) + for (int i = 0; (i < getNumberSticks()) && !result; i++) { JoyControlStick *stick = tempSet->getJoyStick(i); + if (stick != nullptr) { - if (!stick->getStickName().isEmpty()) - { - result = true; - } + if (!stick->getStickName().isEmpty()) result = true; QHash *buttons = stick->getButtons(); QHashIterator iter(*buttons); + while (iter.hasNext() && !result) { JoyControlStickButton *button = iter.next().value(); - if (button && !button->getButtonName().isEmpty()) - { - result = true; - } + + if (button && !button->getButtonName().isEmpty()) result = true; } } } - for (int i=0; (i < getNumberHats()) && !result; i++) + for (int i = 0; (i < getNumberHats()) && !result; i++) { JoyDPad *dpad = tempSet->getJoyDPad(i); + if (dpad != nullptr) { - if (!dpad->getDpadName().isEmpty()) - { - result = true; - } + if (!dpad->getDpadName().isEmpty()) result = true; QHash *temp = dpad->getButtons(); QHashIterator iter(*temp); + while (iter.hasNext() && !result) { JoyDPadButton *button = iter.next().value(); - if (button && !button->getButtonName().isEmpty()) - { - result = true; - } + + if (button && !button->getButtonName().isEmpty()) result = true; } } } - for (int i=0; (i < getNumberVDPads()) && !result; i++) + for (int i = 0; (i < getNumberVDPads()) && !result; i++) { VDPad *vdpad = getActiveSetJoystick()->getVDPad(i); + if (vdpad != nullptr) { - if (!vdpad->getDpadName().isEmpty()) - { - result = true; - } + if (!vdpad->getDpadName().isEmpty()) result = true; QHash *temp = vdpad->getButtons(); QHashIterator iter(*temp); + while (iter.hasNext() && !result) { JoyDPadButton *button = iter.next().value(); - if ((button != nullptr) && !button->getButtonName().isEmpty()) - { - result = true; - } + + if ((button != nullptr) && !button->getButtonName().isEmpty()) result = true; } } } @@ -2404,10 +2343,7 @@ bool InputDevice::isEmptyGUID(QString tempGUID) bool result = false; - if (tempGUID.contains(emptyGUID)) - { - result = true; - } + if (tempGUID.contains(GlobalVariables::InputDevice::emptyGUID)) result = true; return result; } @@ -2423,10 +2359,8 @@ bool InputDevice::isRelevantGUID(QString tempGUID) qInstallMessageHandler(MessageHandler::myMessageOutput); bool result = false; - if (tempGUID == getGUIDString()) - { - result = true; - } + + if (tempGUID == getGUIDString()) result = true; return result; } @@ -2435,8 +2369,7 @@ QString InputDevice::getRawGUIDString() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QString temp = getGUIDString(); - return temp; + return getGUIDString(); } void InputDevice::haltServices() @@ -2458,13 +2391,13 @@ void InputDevice::setRawAxisDeadZone(int deadZone) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((deadZone > 0) && (deadZone <= JoyAxis::AXISMAX)) + if ((deadZone > 0) && (deadZone <= GlobalVariables::JoyAxis::AXISMAX)) { this->rawAxisDeadZone = deadZone; } else { - this->rawAxisDeadZone = RAISEDDEADZONE; + this->rawAxisDeadZone = GlobalVariables::InputDevice::RAISEDDEADZONE; } } @@ -2511,3 +2444,8 @@ QList& InputDevice::getDpadstatesLocal() { return dpadstates; } + +SDL_Joystick* InputDevice::getJoyHandle() const +{ + return m_joyhandle; +} diff --git a/src/inputdevice.h b/src/inputdevice.h old mode 100644 new mode 100755 index 36fd70560..4a9915c03 --- a/src/inputdevice.h +++ b/src/inputdevice.h @@ -124,24 +124,21 @@ class InputDevice : public QObject int getRawAxisDeadZone(); void rawAxisEvent(int index, int value); - static const int NUMBER_JOYSETS; - static const int DEFAULTKEYPRESSTIME; - static const int DEFAULTKEYREPEATDELAY; // unsigned - static const int DEFAULTKEYREPEATRATE; // unsigned - static const int RAISEDDEADZONE; + QHash& getJoystick_sets(); protected: void enableSetConnections(SetJoystick *setstick); bool elementsHaveNames(); + SDL_Joystick* getJoyHandle() const; + - QHash& getJoystick_sets(); QHash& getCali(); SDL_JoystickID* getJoystickID(); int rawAxisDeadZone; int keyPressTime; // unsigned QString profileName; - SDL_Joystick* joyhandle; + signals: void setChangeActivated(int index); @@ -221,9 +218,10 @@ protected slots: QList& getAxesstatesLocal(); QList& getDpadstatesLocal(); + SDL_Joystick* m_joyhandle; QHash joystick_sets; QHash cali; - AntiMicroSettings *settings; + AntiMicroSettings *m_settings; int active_set; int joyNumber; int buttonDownCount; @@ -237,8 +235,6 @@ protected slots: QList buttonstates; QList axesstates; QList dpadstates; - - static QRegExp emptyGUID; }; Q_DECLARE_METATYPE(InputDevice*) diff --git a/src/inputdevicebitarraystatus.cpp b/src/inputdevicebitarraystatus.cpp old mode 100644 new mode 100755 index 3af51e624..f5656cf0e --- a/src/inputdevicebitarraystatus.cpp +++ b/src/inputdevicebitarraystatus.cpp @@ -31,7 +31,7 @@ InputDeviceBitArrayStatus::InputDeviceBitArrayStatus(InputDevice *device, bool r { qInstallMessageHandler(MessageHandler::myMessageOutput); - for (int i=0; i < device->getNumberRawAxes(); i++) + for (int i = 0; i < device->getNumberRawAxes(); i++) { SetJoystick *currentSet = device->getActiveSetJoystick(); JoyAxis *axis = currentSet->getJoyAxis(i); @@ -46,10 +46,11 @@ InputDeviceBitArrayStatus::InputDeviceBitArrayStatus(InputDevice *device, bool r } } - for (int i=0; i < device->getNumberRawHats(); i++) + for (int i = 0; i < device->getNumberRawHats(); i++) { SetJoystick *currentSet = device->getActiveSetJoystick(); JoyDPad *dpad = currentSet->getJoyDPad(i); + if ((dpad != nullptr) && readCurrent) { hatButtonStatus.append(dpad->getCurrentDirection() != JoyDPadButton::DpadCentered ? true : false); @@ -63,10 +64,11 @@ InputDeviceBitArrayStatus::InputDeviceBitArrayStatus(InputDevice *device, bool r getButtonStatusLocal().resize(device->getNumberRawButtons()); getButtonStatusLocal().fill(0); - for (int i=0; i < device->getNumberRawButtons(); i++) + for (int i = 0; i < device->getNumberRawButtons(); i++) { SetJoystick *currentSet = device->getActiveSetJoystick(); JoyButton *button = currentSet->getJoyButton(i); + if ((button != nullptr) && readCurrent) { getButtonStatusLocal().setBit(i, button->getButtonState()); @@ -110,17 +112,16 @@ QBitArray InputDeviceBitArrayStatus::generateFinalBitArray() int totalArraySize = 0; totalArraySize = axesStatus.size() + hatButtonStatus.size() + getButtonStatusLocal().size(); - QBitArray aggregateBitArray(totalArraySize, false); int currentBit = 0; - for (int i=0; i < axesStatus.size(); i++) + for (int i = 0; i < axesStatus.size(); i++) { aggregateBitArray.setBit(currentBit, axesStatus.at(i)); currentBit++; } - for (int i=0; i < hatButtonStatus.size(); i++) + for (int i = 0; i < hatButtonStatus.size(); i++) { aggregateBitArray.setBit(currentBit, hatButtonStatus.at(i)); currentBit++; @@ -139,15 +140,11 @@ void InputDeviceBitArrayStatus::clearStatusValues() { qInstallMessageHandler(MessageHandler::myMessageOutput); - for (int i=0; i < axesStatus.size(); i++) - { + for (int i = 0; i < axesStatus.size(); i++) axesStatus.replace(i, false); - } - for (int i=0; i < hatButtonStatus.size(); i++) - { + for (int i = 0; i < hatButtonStatus.size(); i++) hatButtonStatus.replace(i, false); - } getButtonStatusLocal().fill(false); } diff --git a/src/inputdevicebitarraystatus.h b/src/inputdevicebitarraystatus.h old mode 100644 new mode 100755 diff --git a/src/joyaxis.cpp b/src/joyaxis.cpp old mode 100644 new mode 100755 index 6df8a6946..29b83b18f --- a/src/joyaxis.cpp +++ b/src/joyaxis.cpp @@ -17,6 +17,7 @@ #include "joyaxis.h" +#include "globalvariables.h" #include "messagehandler.h" #include "joycontrolstick.h" #include "setjoystick.h" @@ -31,18 +32,7 @@ #include #include -// Set default values for many properties. -const int JoyAxis::AXISMIN = -32767; -const int JoyAxis::AXISMAX = 32767; -const int JoyAxis::AXISDEADZONE = 6000; -const int JoyAxis::AXISMAXZONE = 32000; - -// Speed in pixels/second -const float JoyAxis::JOYSPEED = 20.0; const JoyAxis::ThrottleTypes JoyAxis::DEFAULTTHROTTLE = JoyAxis::NormalThrottle; -const QString JoyAxis::xmlName = "axis"; - - JoyAxis::JoyAxis(int index, int originset, SetJoystick *parentSet, QObject *parent) : @@ -50,26 +40,26 @@ JoyAxis::JoyAxis(int index, int originset, SetJoystick *parentSet, { qInstallMessageHandler(MessageHandler::myMessageOutput); - stick = nullptr; + m_stick = nullptr; lastKnownThottledValue = 0; lastKnownRawValue = 0; axis_max_cal = -1; axis_min_cal = -1; axis_center_cal = -1; - this->originset = originset; - this->parentSet = parentSet; + m_originset = originset; + m_parentSet = parentSet; naxisbutton = new JoyAxisButton(this, 0, originset, parentSet, this); paxisbutton = new JoyAxisButton(this, 1, originset, parentSet, this); - reset(); - this->index = index; + resetPrivateVars(); + m_index = index; } JoyAxis::~JoyAxis() { qInstallMessageHandler(MessageHandler::myMessageOutput); - reset(); + resetPrivateVars(); } void JoyAxis::queuePendingEvent(int value, bool ignoresets, bool updateLastValues) @@ -80,7 +70,7 @@ void JoyAxis::queuePendingEvent(int value, bool ignoresets, bool updateLastValue pendingValue = 0; pendingIgnoreSets = false; - if (this->stick != nullptr) + if (m_stick != nullptr) { stickPassEvent(value, ignoresets, updateLastValues); } @@ -126,7 +116,7 @@ void JoyAxis::stickPassEvent(int value, bool ignoresets, bool updateLastValues) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (this->stick != nullptr) + if (m_stick != nullptr) { if (updateLastValues) { @@ -150,14 +140,8 @@ void JoyAxis::stickPassEvent(int value, bool ignoresets, bool updateLastValues) emit released(value); } - if (!ignoresets) - { - stick->queueJoyEvent(ignoresets); - } - else - { - stick->joyEvent(ignoresets); - } + if (!ignoresets) m_stick->queueJoyEvent(ignoresets); + else m_stick->joyEvent(ignoresets); emit moved(currentRawValue); } @@ -167,7 +151,7 @@ void JoyAxis::joyEvent(int value, bool ignoresets, bool updateLastValues) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((this->stick != nullptr) && !pendingEvent) + if ((m_stick != nullptr) && !pendingEvent) { stickPassEvent(value, ignoresets, updateLastValues); } @@ -187,8 +171,9 @@ void JoyAxis::joyEvent(int value, bool ignoresets, bool updateLastValues) // If in joystick mode and this is the first detected event, // use the current value as the axis center point. If the value // is below -30,000 then consider it a trigger. - InputDevice *device = parentSet->getInputDevice(); - if (!device->isGameController() && !device->hasCalibrationThrottle(index)) + InputDevice *device = m_parentSet->getInputDevice(); + + if (!device->isGameController() && !device->hasCalibrationThrottle(m_index)) { performCalibration(currentRawValue); safezone = !inDeadZone(currentRawValue); @@ -205,7 +190,6 @@ void JoyAxis::joyEvent(int value, bool ignoresets, bool updateLastValues) { isActive = eventActive = false; emit released(value); - createDeskEvent(ignoresets); } else if (isActive) @@ -227,7 +211,7 @@ bool JoyAxis::inDeadZone(int value) if (abs(temp) <= deadZone) { #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Value of throttle is in (less than) dead zone: " << abs(temp) << " <= " << deadZone; + qDebug() << "Value of throttle is in (less than) dead zone: " << abs(temp) << " <= " << deadZone; #endif result = true; @@ -235,7 +219,7 @@ bool JoyAxis::inDeadZone(int value) } else { #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Value of throttle is not in (greater than) dead zone: " << abs(temp) << " > " << deadZone; + qDebug() << "Value of throttle is not in (greater than) dead zone: " << abs(temp) << " > " << deadZone; #endif } @@ -247,12 +231,12 @@ QString JoyAxis::getName(bool forceFullFormat, bool displayNames) qInstallMessageHandler(MessageHandler::myMessageOutput); QString label = getPartialName(forceFullFormat, displayNames); - label.append(": "); if (throttle == static_cast(NormalThrottle)) { label.append("-"); + if (!naxisbutton->getActionName().isEmpty() && displayNames) { label.append(naxisbutton->getActionName()); @@ -263,6 +247,7 @@ QString JoyAxis::getName(bool forceFullFormat, bool displayNames) } label.append(" | +"); + if (!paxisbutton->getActionName().isEmpty() && displayNames) { label.append(paxisbutton->getActionName()); @@ -275,6 +260,7 @@ QString JoyAxis::getName(bool forceFullFormat, bool displayNames) else if ((throttle == static_cast(PositiveThrottle)) || (throttle == static_cast(PositiveHalfThrottle))) { label.append("+"); + if (!paxisbutton->getActionName().isEmpty() && displayNames) { label.append(paxisbutton->getActionName()); @@ -287,6 +273,7 @@ QString JoyAxis::getName(bool forceFullFormat, bool displayNames) else if ((throttle == static_cast(NegativeThrottle)) || (throttle == static_cast(NegativeHalfThrottle))) { label.append("-"); + if (!naxisbutton->getActionName().isEmpty() && displayNames) { label.append(naxisbutton->getActionName()); @@ -304,7 +291,7 @@ int JoyAxis::getRealJoyIndex() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return index + 1; + return m_index + 1; } int JoyAxis::getCurrentThrottledValue() @@ -319,48 +306,53 @@ int JoyAxis::calculateThrottledValue(int value) qInstallMessageHandler(MessageHandler::myMessageOutput); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Throtted value at start of function is: " << value; + qDebug() << "Throtted value at start of function is: " << value; #endif int temp = value; - if (throttle == static_cast(NegativeHalfThrottle)) + switch(throttle) { - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "It's a negative half throttle"; - #endif - value = (value <= 0) ? value : -value; - temp = value; - } - else if (throttle == static_cast(NegativeThrottle)) - { - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "It's a negative throttle"; - #endif + case -2: + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "It's a negative half throttle"; + #endif - temp = (value + getAxisMinCal()) / 2; - } - else if (throttle == static_cast(PositiveThrottle)) - { - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "It's a positive throttle"; - #endif + value = (value <= 0) ? value : -value; + temp = value; + break; - temp = (value + getAxisMaxCal()) / 2; - } - else if (throttle == static_cast(PositiveHalfThrottle)) - { - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "It's a positive half throttle"; - #endif + case -1: + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "It's a negative throttle"; + #endif + + temp = (value + getAxisMinCal()) / 2; + break; + + case 1: + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "It's a positive throttle"; + #endif + + temp = (value + getAxisMaxCal()) / 2; + break; + + case 2: + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "It's a positive half throttle"; + #endif + + value = (value >= 0) ? value : -value; + temp = value; + break; - value = (value >= 0) ? value : -value; - temp = value; } + #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Calculated value of throttle is: " << temp; + qDebug() << "Calculated value of throttle is: " << temp; #endif return temp; @@ -370,14 +362,14 @@ void JoyAxis::setIndex(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->index = index; + m_index = index; } int JoyAxis::getIndex() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return index; + return m_index; } @@ -386,14 +378,9 @@ void JoyAxis::createDeskEvent(bool ignoresets) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyAxisButton *eventbutton = nullptr; - if (currentThrottledValue > deadZone) - { - eventbutton = paxisbutton; - } - else if (currentThrottledValue < -deadZone) - { - eventbutton = naxisbutton; - } + + if (currentThrottledValue > deadZone) eventbutton = paxisbutton; + else if (currentThrottledValue < -deadZone) eventbutton = naxisbutton; if ((eventbutton != nullptr) && !activeButton) { @@ -444,6 +431,7 @@ void JoyAxis::setMaxZoneValue(int value) qInstallMessageHandler(MessageHandler::myMessageOutput); value = abs(value); + if (value >=getAxisMaxCal()) { maxZoneValue = getAxisMaxCal(); @@ -472,7 +460,7 @@ void JoyAxis::setThrottle(int value) qInstallMessageHandler(MessageHandler::myMessageOutput); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Value of throttle for axis in setThrottle is: " << value; + qDebug() << "Value of throttle for axis in setThrottle is: " << value; #endif if ((value >= static_cast(JoyAxis::NegativeHalfThrottle)) && (value <= static_cast(JoyAxis::PositiveHalfThrottle))) @@ -480,7 +468,7 @@ void JoyAxis::setThrottle(int value) if (value != throttle) { #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Throttle value for variable \"throttle\" has been set: " << value; + qDebug() << "Throttle value for variable \"throttle\" has been set: " << value; #endif throttle = value; @@ -500,14 +488,12 @@ void JoyAxis::setInitialThrottle(int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((value >= static_cast(JoyAxis::NegativeHalfThrottle)) && (value <= static_cast(JoyAxis::PositiveHalfThrottle))) + if ((value >= static_cast(JoyAxis::NegativeHalfThrottle)) && (value <= static_cast(JoyAxis::PositiveHalfThrottle)) + && (value != throttle)) { - if (value != throttle) - { - throttle = value; - adjustRange(); - emit throttleChanged(); - } + throttle = value; + adjustRange(); + emit throttleChanged(); } } @@ -524,22 +510,19 @@ void JoyAxis::readConfig(QXmlStreamReader *xml) if (xml->isStartElement() && (xml->name() == getXmlName())) { - xml->readNextStartElement(); + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != getXmlName()))) { - bool found = false; - found = readMainConfig(xml); + bool found = readMainConfig(xml); + if (!found && (xml->name() == naxisbutton->getXmlName()) && xml->isStartElement()) { found = true; readButtonConfig(xml); } - if (!found) - { - xml->skipCurrentElement(); - } + if (!found) xml->skipCurrentElement(); xml->readNextStartElement(); } @@ -553,50 +536,46 @@ void JoyAxis::writeConfig(QXmlStreamWriter *xml) bool currentlyDefault = isDefault(); xml->writeStartElement(getXmlName()); - xml->writeAttribute("index", QString::number(index+1)); + xml->writeAttribute("index", QString::number(m_index+1)); if (!currentlyDefault) { - if (deadZone != AXISDEADZONE) - { + if (deadZone != GlobalVariables::JoyAxis::AXISDEADZONE) xml->writeTextElement("deadZone", QString::number(deadZone)); - } - if (maxZoneValue != AXISMAXZONE) - { + if (maxZoneValue != GlobalVariables::JoyAxis::AXISMAXZONE) xml->writeTextElement("maxZone", QString::number(maxZoneValue)); - } } - xml->writeTextElement("center_value", QString::number(axis_center_cal)); - xml->writeTextElement("min_value", QString::number(axis_min_cal)); - xml->writeTextElement("max_value", QString::number(axis_max_cal)); + xml->writeTextElement("center_value", QString::number(axis_center_cal)); + xml->writeTextElement("min_value", QString::number(axis_min_cal)); + xml->writeTextElement("max_value", QString::number(axis_max_cal)); + xml->writeStartElement("throttle"); + switch(throttle) + { + case -2: + xml->writeCharacters("negativehalf"); + break; - xml->writeStartElement("throttle"); + case -1: + xml->writeCharacters("negative"); + break; - if (throttle == static_cast(JoyAxis::NegativeHalfThrottle)) - { - xml->writeCharacters("negativehalf"); - } - else if (throttle == static_cast(JoyAxis::NegativeThrottle)) - { - xml->writeCharacters("negative"); - } - else if (throttle == static_cast(JoyAxis::NormalThrottle)) - { - xml->writeCharacters("normal"); - } - else if (throttle == static_cast(JoyAxis::PositiveThrottle)) - { - xml->writeCharacters("positive"); - } - else if (throttle == JoyAxis::PositiveHalfThrottle) - { - xml->writeCharacters("positivehalf"); + case 0: + xml->writeCharacters("normal"); + break; + + case 1: + xml->writeCharacters("positive"); + break; + + case 2: + xml->writeCharacters("positivehalf"); + break; } - xml->writeEndElement(); + xml->writeEndElement(); if (!currentlyDefault) { @@ -621,7 +600,7 @@ bool JoyAxis::readMainConfig(QXmlStreamReader *xml) int tempchoice = temptext.toInt(); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "From xml config dead zone is: " << tempchoice; + qDebug() << "From xml config dead zone is: " << tempchoice; #endif this->setDeadZone(tempchoice); @@ -633,7 +612,7 @@ bool JoyAxis::readMainConfig(QXmlStreamReader *xml) int tempchoice = temptext.toInt(); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "From xml config max zone is: " << tempchoice; + qDebug() << "From xml config max zone is: " << tempchoice; #endif this->setMaxZoneValue(tempchoice); @@ -645,7 +624,7 @@ bool JoyAxis::readMainConfig(QXmlStreamReader *xml) int tempchoice = temptext.toInt(); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "From xml config center value is: " << tempchoice; + qDebug() << "From xml config center value is: " << tempchoice; #endif this->setAxisCenterCal(tempchoice); @@ -657,7 +636,7 @@ bool JoyAxis::readMainConfig(QXmlStreamReader *xml) int tempchoice = temptext.toInt(); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "From xml config min value is: " << tempchoice; + qDebug() << "From xml config min value is: " << tempchoice; #endif this->setAxisMinCal(tempchoice); @@ -670,7 +649,7 @@ bool JoyAxis::readMainConfig(QXmlStreamReader *xml) int tempchoice = temptext.toInt(); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "From xml config max value is: " << tempchoice; + qDebug() << "From xml config max value is: " << tempchoice; #endif this->setAxisMaxCal(tempchoice); @@ -681,7 +660,7 @@ bool JoyAxis::readMainConfig(QXmlStreamReader *xml) QString temptext = xml->readElementText(); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "From xml config throttle name is: " << temptext; + qDebug() << "From xml config throttle name is: " << temptext; #endif if (temptext == "negativehalf") @@ -705,10 +684,11 @@ bool JoyAxis::readMainConfig(QXmlStreamReader *xml) this->setThrottle(static_cast(JoyAxis::PositiveHalfThrottle)); } - InputDevice *device = parentSet->getInputDevice(); - if (!device->hasCalibrationThrottle(index)) + InputDevice *device = m_parentSet->getInputDevice(); + + if (!device->hasCalibrationThrottle(m_index)) { - device->setCalibrationStatus(index, + device->setCalibrationStatus(m_index, static_cast(throttle)); } @@ -725,13 +705,14 @@ bool JoyAxis::readButtonConfig(QXmlStreamReader *xml) bool found = false; - int index = xml->attributes().value("index").toString().toInt(); - if (index == 1) + int index_local = xml->attributes().value("index").toString().toInt(); + + if (index_local == 1) { found = true; naxisbutton->readConfig(xml); } - else if (index == 2) + else if (index_local == 2) { found = true; paxisbutton->readConfig(xml); @@ -743,13 +724,17 @@ bool JoyAxis::readButtonConfig(QXmlStreamReader *xml) void JoyAxis::reset() { qInstallMessageHandler(MessageHandler::myMessageOutput); + resetPrivateVars(); +} - deadZone = getDefaultDeadZone(); +void JoyAxis::resetPrivateVars() +{ + deadZone = GlobalVariables::JoyAxis::AXISDEADZONE; isActive = false; eventActive = false; - maxZoneValue = getDefaultMaxZone(); - throttle = getDefaultThrottle(); + maxZoneValue = GlobalVariables::JoyAxis::AXISMAXZONE; + throttle = this->DEFAULTTHROTTLE; paxisbutton->reset(); naxisbutton->reset(); @@ -772,7 +757,7 @@ void JoyAxis::reset(int index) qInstallMessageHandler(MessageHandler::myMessageOutput); reset(); - this->index = index; + m_index = index; } JoyAxisButton* JoyAxis::getPAxisButton() @@ -837,19 +822,17 @@ double JoyAxis::getDistanceFromDeadZone(int value) qInstallMessageHandler(MessageHandler::myMessageOutput); double distance = 0.0; - int currentValue = value; - if (currentValue >= deadZone) + if (value >= deadZone) { - distance = static_cast((currentValue - deadZone)/(maxZoneValue - deadZone)); + distance = static_cast(value - deadZone)/(maxZoneValue - deadZone); } - else if (currentValue <= -deadZone) + else if (value <= -deadZone) { - distance = static_cast((currentValue + deadZone)/( (-maxZoneValue) + deadZone)); + distance = static_cast(value + deadZone)/( (-maxZoneValue) + deadZone); } - distance = qBound(0.0, distance, 1.0); - return distance; + return qBound(0.0, distance, 1.0); } /** @@ -862,27 +845,21 @@ double JoyAxis::getRawDistance(int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - double distance = 0.0; - int currentValue = value; - - distance = static_cast(currentValue / maxZoneValue); - distance = qBound(-1.0, distance, 1.0); - - return distance; + return qBound(-1.0, static_cast(value) / maxZoneValue, 1.0); } void JoyAxis::propogateThrottleChange() { qInstallMessageHandler(MessageHandler::myMessageOutput); - emit throttleChangePropogated(this->index); + emit throttleChangePropogated(m_index); } int JoyAxis::getCurrentlyAssignedSet() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return originset; + return m_originset; } void JoyAxis::setControlStick(JoyControlStick *stick) @@ -891,7 +868,7 @@ void JoyAxis::setControlStick(JoyControlStick *stick) removeVDPads(); removeControlStick(); - this->stick = stick; + m_stick = stick; emit propertyUpdated(); } @@ -899,28 +876,26 @@ bool JoyAxis::isPartControlStick() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return (this->stick != nullptr); + return (m_stick != nullptr); } JoyControlStick* JoyAxis::getControlStick() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->stick; + return m_stick; } void JoyAxis::removeControlStick(bool performRelease) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (stick != nullptr) + if (m_stick != nullptr) { if (performRelease) - { - stick->releaseButtonEvents(); - } + m_stick->releaseButtonEvents(); - this->stick = nullptr; + m_stick = nullptr; emit propertyUpdated(); } } @@ -931,6 +906,7 @@ bool JoyAxis::hasControlOfButtons() qInstallMessageHandler(MessageHandler::myMessageOutput); bool value = true; + if (paxisbutton->isPartVDPad() || naxisbutton->isPartVDPad()) { value = false; @@ -965,6 +941,7 @@ bool JoyAxis::isDefault() value = value && (maxZoneValue == getDefaultMaxZone()); value = value && (paxisbutton->isDefault()); value = value && (naxisbutton->isDefault()); + return value; } @@ -980,7 +957,7 @@ void JoyAxis::setCurrentRawValue(int value) if ((value >= getAxisMinCal()) && (value <= getAxisMaxCal())) { #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Raw value is less than " << getAxisMaxCal() << " and greather than " << getAxisMinCal(); + qDebug() << "Raw value is less than " << getAxisMaxCal() << " and greather than " << getAxisMinCal(); #endif currentRawValue = value; @@ -988,7 +965,7 @@ void JoyAxis::setCurrentRawValue(int value) else if (value > getAxisMaxCal()) { #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Raw value is greather than " << getAxisMaxCal(); + qDebug() << "Raw value is greather than " << getAxisMaxCal(); #endif currentRawValue = getAxisMaxCal(); @@ -996,14 +973,14 @@ void JoyAxis::setCurrentRawValue(int value) else if (value < getAxisMinCal()) { #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Raw value is less than " << getAxisMinCal(); + qDebug() << "Raw value is less than " << getAxisMinCal(); #endif currentRawValue = getAxisMinCal(); } #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Raw value for axis is: " << currentRawValue; + qDebug() << "Raw value for axis is: " << currentRawValue; #endif } @@ -1020,6 +997,7 @@ bool JoyAxis::hasSameButtonsMouseMode() qInstallMessageHandler(MessageHandler::myMessageOutput); bool result = true; + if (paxisbutton->getMouseMode() != naxisbutton->getMouseMode()) { result = false; @@ -1033,10 +1011,9 @@ JoyButton::JoyMouseMovementMode JoyAxis::getButtonsPresetMouseMode() qInstallMessageHandler(MessageHandler::myMessageOutput); JoyButton::JoyMouseMovementMode resultMode = JoyButton::MouseCursor; + if (paxisbutton->getMouseMode() == naxisbutton->getMouseMode()) - { resultMode = paxisbutton->getMouseMode(); - } return resultMode; } @@ -1098,9 +1075,7 @@ int JoyAxis::getButtonsPresetSpringWidth() int presetSpringWidth = 0; if (paxisbutton->getSpringWidth() == naxisbutton->getSpringWidth()) - { presetSpringWidth = paxisbutton->getSpringWidth(); - } return presetSpringWidth; } @@ -1112,9 +1087,7 @@ int JoyAxis::getButtonsPresetSpringHeight() int presetSpringHeight = 0; if (paxisbutton->getSpringHeight() == naxisbutton->getSpringHeight()) - { presetSpringHeight = paxisbutton->getSpringHeight(); - } return presetSpringHeight; } @@ -1134,9 +1107,7 @@ double JoyAxis::getButtonsPresetSensitivity() double presetSensitivity = 1.0; if (qFuzzyCompare(paxisbutton->getSensitivity(), naxisbutton->getSensitivity())) - { presetSensitivity = paxisbutton->getSensitivity(); - } return presetSensitivity; } @@ -1149,13 +1120,13 @@ JoyAxisButton* JoyAxis::getAxisButtonByValue(int value) int throttledValue = calculateThrottledValue(value); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "throttledValue in getAxisButtonByValue is: " << throttledValue; + qDebug() << "throttledValue in getAxisButtonByValue is: " << throttledValue; #endif if (throttledValue > deadZone) { #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "throtted value is positive"; + qDebug() << "throtted value is positive"; #endif eventbutton = paxisbutton; @@ -1195,16 +1166,16 @@ void JoyAxis::setButtonsWheelSpeedX(int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - paxisbutton->setWheelSpeedX(value); - naxisbutton->setWheelSpeedX(value); + paxisbutton->setWheelSpeed(value, 'X'); + naxisbutton->setWheelSpeed(value, 'X'); } void JoyAxis::setButtonsWheelSpeedY(int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - paxisbutton->setWheelSpeedY(value); - naxisbutton->setWheelSpeedY(value); + paxisbutton->setWheelSpeed(value, 'Y'); + naxisbutton->setWheelSpeed(value, 'Y'); } void JoyAxis::setDefaultAxisName(QString tempname) @@ -1242,6 +1213,7 @@ QString JoyAxis::getPartialName(bool forceFullFormat, bool displayNames) { label.append(trUtf8("Axis")).append(" "); } + label.append(defaultAxisName); } else @@ -1257,21 +1229,21 @@ QString JoyAxis::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + return GlobalVariables::JoyAxis::xmlName; } int JoyAxis::getDefaultDeadZone() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->AXISDEADZONE; + return GlobalVariables::JoyAxis::AXISDEADZONE; } int JoyAxis::getDefaultMaxZone() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->AXISMAXZONE; + return GlobalVariables::JoyAxis::AXISMAXZONE; } JoyAxis::ThrottleTypes JoyAxis::getDefaultThrottle() @@ -1285,7 +1257,7 @@ SetJoystick* JoyAxis::getParentSet() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return parentSet; + return m_parentSet; } void JoyAxis::establishPropertyUpdatedConnection() @@ -1317,9 +1289,7 @@ bool JoyAxis::isRelativeSpring() bool relative = false; if (paxisbutton->isRelativeSpring() == naxisbutton->isRelativeSpring()) - { relative = paxisbutton->isRelativeSpring(); - } return relative; } @@ -1328,16 +1298,17 @@ void JoyAxis::performCalibration(int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - InputDevice *device = parentSet->getInputDevice(); + InputDevice *device = m_parentSet->getInputDevice(); + if (value <= -30000) { // Assume axis is a trigger. Set default throttle to Positive. - device->setCalibrationThrottle(index, PositiveThrottle); + device->setCalibrationThrottle(m_index, PositiveThrottle); } else { // Ensure that default throttle is used when a device is reset. - device->setCalibrationThrottle(index, + device->setCalibrationThrottle(m_index, static_cast(throttle)); } } @@ -1354,9 +1325,7 @@ void JoyAxis::copyAssignments(JoyAxis *destAxis) naxisbutton->copyAssignments(destAxis->naxisbutton); if (!destAxis->isDefault()) - { emit propertyUpdated(); - } } void JoyAxis::setButtonsEasingDuration(double value) @@ -1371,7 +1340,8 @@ double JoyAxis::getButtonsEasingDuration() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double result = JoyButton::DEFAULTEASINGDURATION; + double result = GlobalVariables::JoyButton::DEFAULTEASINGDURATION; + if (qFuzzyCompare(paxisbutton->getEasingDuration(), naxisbutton->getEasingDuration())) { result = paxisbutton->getEasingDuration(); @@ -1439,6 +1409,7 @@ JoyButton::JoyExtraAccelerationCurve JoyAxis::getExtraAccelerationCurve() qInstallMessageHandler(MessageHandler::myMessageOutput); JoyButton::JoyExtraAccelerationCurve result = JoyButton::LinearAccelCurve; + if (paxisbutton->getExtraAccelerationCurve() == naxisbutton->getExtraAccelerationCurve()) { result = paxisbutton->getExtraAccelerationCurve(); @@ -1478,7 +1449,7 @@ void JoyAxis::setAxisMinCal(int value) { int JoyAxis::getAxisMinCal() { - return ((axis_min_cal != -1) ? axis_min_cal : JoyAxis::AXISMIN); + return ((axis_min_cal != -1) ? axis_min_cal : GlobalVariables::JoyAxis::AXISMIN); } void JoyAxis::setAxisMaxCal(int value) { @@ -1488,7 +1459,7 @@ void JoyAxis::setAxisMaxCal(int value) { int JoyAxis::getAxisMaxCal() { - return ((axis_max_cal != -1) ? axis_max_cal : JoyAxis::AXISMAX); + return ((axis_max_cal != -1) ? axis_max_cal : GlobalVariables::JoyAxis::AXISMAX); } void JoyAxis::setAxisCenterCal(int value) { diff --git a/src/joyaxis.h b/src/joyaxis.h old mode 100644 new mode 100755 index 5199f3118..a4d913119 --- a/src/joyaxis.h +++ b/src/joyaxis.h @@ -155,17 +155,8 @@ class JoyAxis : public QObject virtual void eventReset(); - // Define default values for many properties. - static const int AXISMIN; - static const int AXISMAX; - static const int AXISDEADZONE; - static const int AXISMAXZONE; static const ThrottleTypes DEFAULTTHROTTLE; - static const float JOYSPEED; - - static const QString xmlName; - protected: void createDeskEvent(bool ignoresets = false); void adjustRange(); @@ -189,7 +180,7 @@ class JoyAxis : public QObject int currentRawValue; int currentThrottledValue; int currentThrottledDeadValue; - int index; + int m_index; int axis_center_cal; int axis_min_cal; int axis_max_cal; @@ -225,11 +216,11 @@ public slots: bool eventActive; JoyAxisButton *activeButton; - int originset; + int m_originset; - JoyControlStick *stick; + JoyControlStick *m_stick; - SetJoystick *parentSet; + SetJoystick *m_parentSet; int lastKnownThottledValue; int lastKnownRawValue; @@ -237,6 +228,7 @@ public slots: bool pendingEvent; bool pendingIgnoreSets; + void resetPrivateVars(); }; #endif // JOYAXIS_H diff --git a/src/joyaxiscontextmenu.cpp b/src/joyaxiscontextmenu.cpp old mode 100644 new mode 100755 index 6c5548188..52e17b463 --- a/src/joyaxiscontextmenu.cpp +++ b/src/joyaxiscontextmenu.cpp @@ -27,7 +27,6 @@ #include #include - JoyAxisContextMenu::JoyAxisContextMenu(JoyAxis *axis, QWidget *parent) : QMenu(parent), helper(axis) @@ -56,118 +55,119 @@ void JoyAxisContextMenu::buildMenu() PadderCommon::inputDaemonMutex.unlock(); - if (actAsTrigger) - { - buildTriggerMenu(); - } - else - { - buildAxisMenu(); - } + if (actAsTrigger)buildTriggerMenu(); + else buildAxisMenu(); } void JoyAxisContextMenu::buildAxisMenu() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QAction *action = nullptr; - QActionGroup *presetGroup = new QActionGroup(this); int presetMode = 0; int currentPreset = getPresetIndex(); - action = this->addAction(trUtf8("Mouse (Horizontal)")); + QAction *action = this->addAction(trUtf8("Mouse (Horizontal)")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); + connect(action, &QAction::triggered, this, [this, action]() { setAxisPreset(action); }); presetGroup->addAction(action); - presetMode++; + action = this->addAction(trUtf8("Mouse (Inverted Horizontal)")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); + connect(action, &QAction::triggered, this, [this, action]() { setAxisPreset(action); }); presetGroup->addAction(action); - presetMode++; + action = this->addAction(trUtf8("Mouse (Vertical)")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); + connect(action, &QAction::triggered, this, [this, action]() { setAxisPreset(action); }); presetGroup->addAction(action); - presetMode++; + action = this->addAction(trUtf8("Mouse (Inverted Vertical)")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); + connect(action, &QAction::triggered, this, [this, action]() { setAxisPreset(action); }); presetGroup->addAction(action); - presetMode++; + action = this->addAction(trUtf8("Arrows: Up | Down")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); + connect(action, &QAction::triggered, this, [this, action]() { setAxisPreset(action); }); presetGroup->addAction(action); - presetMode++; + action = this->addAction(trUtf8("Arrows: Left | Right")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); + connect(action, &QAction::triggered, this, [this, action]() { setAxisPreset(action); }); presetGroup->addAction(action); - presetMode++; + action = this->addAction(trUtf8("Keys: W | S")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); + connect(action, &QAction::triggered, this, [this, action]() { setAxisPreset(action); }); presetGroup->addAction(action); - presetMode++; + action = this->addAction(trUtf8("Keys: A | D")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); + connect(action, &QAction::triggered, this, [this, action]() { setAxisPreset(action); }); presetGroup->addAction(action); - presetMode++; + action = this->addAction(trUtf8("NumPad: KP_8 | KP_2")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); + connect(action, &QAction::triggered, this, [this, action]() { setAxisPreset(action); }); @@ -184,12 +184,13 @@ void JoyAxisContextMenu::buildAxisMenu() }); presetGroup->addAction(action); - presetMode++; + action = this->addAction(trUtf8("None")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); + connect(action, &QAction::triggered, this, [this, action]() { setAxisPreset(action); }); @@ -200,6 +201,7 @@ void JoyAxisContextMenu::buildAxisMenu() action = this->addAction(trUtf8("Mouse Settings")); action->setCheckable(false); + connect(action, &QAction::triggered, this, &JoyAxisContextMenu::openMouseSettingsDialog); } @@ -217,6 +219,7 @@ int JoyAxisContextMenu::getPresetIndex() { JoyButtonSlot *nslot = naxisslots->at(0); JoyButtonSlot *pslot = paxisslots->at(0); + if ((nslot->getSlotMode() == JoyButtonSlot::JoyMouseMovement) && (nslot->getSlotCode() == JoyButtonSlot::MouseLeft) && (pslot->getSlotMode() == JoyButtonSlot::JoyMouseMovement) && (pslot->getSlotCode() == JoyButtonSlot::MouseRight)) { @@ -287,59 +290,61 @@ void JoyAxisContextMenu::setAxisPreset(QAction* action) JoyButtonSlot *nbuttonslot = nullptr; JoyButtonSlot *pbuttonslot = nullptr; - if (item == 0) - { - nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - } - else if (item == 1) - { - nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - } - else if (item == 2) - { - nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - } - else if (item == 3) - { - nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - } - else if (item == 4) + switch(item) { - nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Up), Qt::Key_Up, JoyButtonSlot::JoyKeyboard, this); - pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Down), Qt::Key_Down, JoyButtonSlot::JoyKeyboard, this); - } - else if (item == 5) - { - nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Left), Qt::Key_Left, JoyButtonSlot::JoyKeyboard, this); - pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Right), Qt::Key_Right, JoyButtonSlot::JoyKeyboard, this); - } - else if (item == 6) - { - nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_W), Qt::Key_W, JoyButtonSlot::JoyKeyboard, this); - pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_S), Qt::Key_S, JoyButtonSlot::JoyKeyboard, this); - } - else if (item == 7) - { - nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_A), Qt::Key_A, JoyButtonSlot::JoyKeyboard, this); - pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_D), Qt::Key_D, JoyButtonSlot::JoyKeyboard, this); - } - else if (item == 8) - { - nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); - pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); - } - else if (item == 9) - { - nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); - pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); - } - else if (item == 10) - { - QMetaObject::invokeMethod(&helper, "clearAndResetAxisButtons", Qt::BlockingQueuedConnection); + case 0: + nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + break; + + case 1: + nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + break; + + case 2: + nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + break; + + case 3: + nbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + break; + + case 4: + nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Up), Qt::Key_Up, JoyButtonSlot::JoyKeyboard, this); + pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Down), Qt::Key_Down, JoyButtonSlot::JoyKeyboard, this); + break; + + case 5: + nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Left), Qt::Key_Left, JoyButtonSlot::JoyKeyboard, this); + pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Right), Qt::Key_Right, JoyButtonSlot::JoyKeyboard, this); + break; + + case 6: + nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_W), Qt::Key_W, JoyButtonSlot::JoyKeyboard, this); + pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_S), Qt::Key_S, JoyButtonSlot::JoyKeyboard, this); + break; + + case 7: + nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_A), Qt::Key_A, JoyButtonSlot::JoyKeyboard, this); + pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_D), Qt::Key_D, JoyButtonSlot::JoyKeyboard, this); + break; + + case 8: + nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); + pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); + break; + + case 9: + nbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); + pbuttonslot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); + break; + + case 10: + QMetaObject::invokeMethod(&helper, "clearAndResetAxisButtons", Qt::BlockingQueuedConnection); + break; } if (nbuttonslot != nullptr) @@ -375,38 +380,39 @@ void JoyAxisContextMenu::buildTriggerMenu() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QAction *action = nullptr; - QActionGroup *presetGroup = new QActionGroup(this); int presetMode = 0; int currentPreset = getTriggerPresetIndex(); - action = this->addAction(trUtf8("Left Mouse Button")); + QAction *action = this->addAction(trUtf8("Left Mouse Button")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); + connect(action, &QAction::triggered, this, [this, action]() { setTriggerPreset(action); }); presetGroup->addAction(action); - presetMode++; + action = this->addAction(trUtf8("Right Mouse Button")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); + connect(action, &QAction::triggered, this, [this, action]() { setTriggerPreset(action); }); presetGroup->addAction(action); - presetMode++; + action = this->addAction(trUtf8("None")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); + connect(action, &QAction::triggered, this, [this, action]() { setTriggerPreset(action); }); @@ -434,6 +440,7 @@ int JoyAxisContextMenu::getTriggerPresetIndex() if (paxisslots->length() == 1) { JoyButtonSlot *pslot = paxisslots->at(0); + if ((pslot->getSlotMode() == JoyButtonSlot::JoyMouseButton) && (pslot->getSlotCode() == JoyButtonSlot::MouseLB)) { @@ -463,20 +470,23 @@ void JoyAxisContextMenu::setTriggerPreset(QAction* action) JoyButtonSlot *pbuttonslot = nullptr; - if (item == 0) - { - pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseLB, JoyButtonSlot::JoyMouseButton, this); - } - else if (item == 1) - { - pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseRB, JoyButtonSlot::JoyMouseButton, this); - } - else if (item == 2) + switch(item) { - JoyAxisButton *pbutton = axis->getPAxisButton(); - QMetaObject::invokeMethod(pbutton, "clearSlotsEventReset", Qt::BlockingQueuedConnection); + case 0: + pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseLB, JoyButtonSlot::JoyMouseButton, this); + break; + + case 1: + pbuttonslot = new JoyButtonSlot(JoyButtonSlot::MouseRB, JoyButtonSlot::JoyMouseButton, this); + break; + + case 2: + JoyAxisButton *pbutton = axis->getPAxisButton(); + QMetaObject::invokeMethod(pbutton, "clearSlotsEventReset", Qt::BlockingQueuedConnection); + break; } + if (pbuttonslot != nullptr) { QMetaObject::invokeMethod(&helper, "setPAssignedSlot", Qt::BlockingQueuedConnection, diff --git a/src/joyaxiscontextmenu.h b/src/joyaxiscontextmenu.h old mode 100644 new mode 100755 diff --git a/src/joyaxiswidget.cpp b/src/joyaxiswidget.cpp old mode 100644 new mode 100755 index af97c3c23..71c144cf7 --- a/src/joyaxiswidget.cpp +++ b/src/joyaxiswidget.cpp @@ -23,13 +23,12 @@ #include - JoyAxisWidget::JoyAxisWidget(JoyAxis *axis, bool displayNames, QWidget *parent) : FlashButtonWidget(displayNames, parent) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->axis = axis; + m_axis = axis; refreshLabel(); enableFlashes(); @@ -37,19 +36,19 @@ JoyAxisWidget::JoyAxisWidget(JoyAxis *axis, bool displayNames, QWidget *parent) this->setContextMenuPolicy(Qt::CustomContextMenu); connect(this, &JoyAxisWidget::customContextMenuRequested, this, &JoyAxisWidget::showContextMenu); - JoyAxisButton *nAxisButton = axis->getNAxisButton(); - JoyAxisButton *pAxisButton = axis->getPAxisButton(); + JoyAxisButton *nAxisButton = m_axis->getNAxisButton(); + JoyAxisButton *pAxisButton = m_axis->getPAxisButton(); tryFlash(); - connect(axis, &JoyAxis::throttleChanged, this, &JoyAxisWidget::refreshLabel); - connect(axis, &JoyAxis::axisNameChanged, this, &JoyAxisWidget::refreshLabel); + connect(m_axis, &JoyAxis::throttleChanged, this, &JoyAxisWidget::refreshLabel); + connect(m_axis, &JoyAxis::axisNameChanged, this, &JoyAxisWidget::refreshLabel); connect(nAxisButton, &JoyAxisButton::propertyUpdated, this, &JoyAxisWidget::refreshLabel); connect(pAxisButton, &JoyAxisButton::propertyUpdated, this, &JoyAxisWidget::refreshLabel); connect(nAxisButton, &JoyAxisButton::activeZoneChanged, this, &JoyAxisWidget::refreshLabel); connect(pAxisButton, &JoyAxisButton::activeZoneChanged, this, &JoyAxisWidget::refreshLabel); - axis->establishPropertyUpdatedConnection(); + m_axis->establishPropertyUpdatedConnection(); nAxisButton->establishPropertyUpdatedConnections(); pAxisButton->establishPropertyUpdatedConnections(); } @@ -58,15 +57,15 @@ JoyAxis* JoyAxisWidget::getAxis() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return axis; + return m_axis; } void JoyAxisWidget::disableFlashes() { qInstallMessageHandler(MessageHandler::myMessageOutput); - disconnect(axis, &JoyAxis::active, this, &JoyAxisWidget::flash); - disconnect(axis, &JoyAxis::released, this, &JoyAxisWidget::unflash); + disconnect(m_axis, &JoyAxis::active, this, &JoyAxisWidget::flash); + disconnect(m_axis, &JoyAxis::released, this, &JoyAxisWidget::unflash); this->unflash(); } @@ -74,8 +73,8 @@ void JoyAxisWidget::enableFlashes() { qInstallMessageHandler(MessageHandler::myMessageOutput); - connect(axis, &JoyAxis::active, this, &JoyAxisWidget::flash, Qt::QueuedConnection); - connect(axis, &JoyAxis::released, this, &JoyAxisWidget::unflash, Qt::QueuedConnection); + connect(m_axis, &JoyAxis::active, this, &JoyAxisWidget::flash, Qt::QueuedConnection); + connect(m_axis, &JoyAxis::released, this, &JoyAxisWidget::unflash, Qt::QueuedConnection); } /** @@ -86,11 +85,10 @@ QString JoyAxisWidget::generateLabel() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QString temp = QString(); - temp = axis->getName(false, ifDisplayNames()).replace("&", "&&"); + QString temp = m_axis->getName(false, ifDisplayNames()).replace("&", "&&"); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Name of joy axis is: " << temp; + qDebug() << "Name of joy axis is: " << temp; #endif return temp; @@ -101,7 +99,7 @@ void JoyAxisWidget::showContextMenu(const QPoint &point) qInstallMessageHandler(MessageHandler::myMessageOutput); QPoint globalPos = this->mapToGlobal(point); - JoyAxisContextMenu *contextMenu = new JoyAxisContextMenu(axis, this); + JoyAxisContextMenu *contextMenu = new JoyAxisContextMenu(m_axis, this); contextMenu->buildMenu(); contextMenu->popup(globalPos); } @@ -110,8 +108,8 @@ void JoyAxisWidget::tryFlash() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyAxisButton *nAxisButton = axis->getNAxisButton(); - JoyAxisButton *pAxisButton = axis->getPAxisButton(); + JoyAxisButton *nAxisButton = m_axis->getNAxisButton(); + JoyAxisButton *pAxisButton = m_axis->getPAxisButton(); if (nAxisButton->getButtonState() || pAxisButton->getButtonState()) { diff --git a/src/joyaxiswidget.h b/src/joyaxiswidget.h old mode 100644 new mode 100755 index ffc6c9d10..a316c648e --- a/src/joyaxiswidget.h +++ b/src/joyaxiswidget.h @@ -38,17 +38,17 @@ class JoyAxisWidget : public FlashButtonWidget void tryFlash(); protected: - virtual QString generateLabel(); + virtual QString generateLabel() override; public slots: - void disableFlashes(); - void enableFlashes(); + void disableFlashes() override; + void enableFlashes() override; private slots: void showContextMenu(const QPoint &point); private: - JoyAxis *axis; + JoyAxis *m_axis; }; #endif // JOYAXISWIDGET_H diff --git a/src/joybutton.cpp b/src/joybutton.cpp old mode 100644 new mode 100755 index 7660694a3..a281b6845 --- a/src/joybutton.cpp +++ b/src/joybutton.cpp @@ -29,68 +29,19 @@ #include "eventhandlerfactory.h" #endif -#include - #include #include -#include #include #include #include #include -const QString JoyButton::xmlName = "button"; - -// Set default values for many properties. -const int JoyButton::ENABLEDTURBODEFAULT = 100; -const double JoyButton::DEFAULTMOUSESPEEDMOD = 1.0; -double JoyButton::mouseSpeedModifier = JoyButton::DEFAULTMOUSESPEEDMOD; -const int JoyButton::DEFAULTKEYREPEATDELAY = 600; // 600 ms -const int JoyButton::DEFAULTKEYREPEATRATE = 40; // 40 ms. 25 times per second const JoyButton::JoyMouseCurve JoyButton::DEFAULTMOUSECURVE = JoyButton::EnhancedPrecisionCurve; -const bool JoyButton::DEFAULTTOGGLE = false; -const int JoyButton::DEFAULTTURBOINTERVAL = 0; -const bool JoyButton::DEFAULTUSETURBO = false; -const int JoyButton::DEFAULTMOUSESPEEDX = 50; -const int JoyButton::DEFAULTMOUSESPEEDY = 50; -const int JoyButton::DEFAULTSETSELECTION = -1; const JoyButton::SetChangeCondition JoyButton::DEFAULTSETCONDITION = JoyButton::SetChangeDisabled; const JoyButton::JoyMouseMovementMode JoyButton::DEFAULTMOUSEMODE = JoyButton::MouseCursor; -const int JoyButton::DEFAULTSPRINGWIDTH = 0; -const int JoyButton::DEFAULTSPRINGHEIGHT = 0; -const double JoyButton::DEFAULTSENSITIVITY = 1.0; -const int JoyButton::DEFAULTWHEELX = 20; -const int JoyButton::DEFAULTWHEELY = 20; -const bool JoyButton::DEFAULTCYCLERESETACTIVE = false; -const int JoyButton::DEFAULTCYCLERESET = 0; -const bool JoyButton::DEFAULTRELATIVESPRING = false; const JoyButton::TurboMode JoyButton::DEFAULTTURBOMODE = JoyButton::NormalTurbo; -const double JoyButton::DEFAULTEASINGDURATION = 0.5; -const double JoyButton::MINIMUMEASINGDURATION = 0.2; -const double JoyButton::MAXIMUMEASINGDURATION = 5.0; -const int JoyButton::MINCYCLERESETTIME = 10; -const int JoyButton::MAXCYCLERESETTIME = 60000; - -const int JoyButton::DEFAULTMOUSEHISTORYSIZE = 10; -const double JoyButton::DEFAULTWEIGHTMODIFIER = 0.2; -const int JoyButton::MAXIMUMMOUSEHISTORYSIZE = 100; -const double JoyButton::MAXIMUMWEIGHTMODIFIER = 1.0; -const int JoyButton::MAXIMUMMOUSEREFRESHRATE = 16; -int JoyButton::IDLEMOUSEREFRESHRATE = (5 * 20); -const int JoyButton::DEFAULTIDLEMOUSEREFRESHRATE = 100; -const double JoyButton::DEFAULTEXTRACCELVALUE = 2.0; -const double JoyButton::DEFAULTMINACCELTHRESHOLD = 10.0; -const double JoyButton::DEFAULTMAXACCELTHRESHOLD = 100.0; -const double JoyButton::DEFAULTSTARTACCELMULTIPLIER = 0.0; -const double JoyButton::DEFAULTACCELEASINGDURATION = 0.1; -const JoyButton::JoyExtraAccelerationCurve -JoyButton::DEFAULTEXTRAACCELCURVE = JoyButton::LinearAccelCurve; - -const int JoyButton::DEFAULTSPRINGRELEASERADIUS = 0; - -// Keep references to active keys and mouse buttons. -QHash JoyButton::activeKeys; -QHash JoyButton::activeMouseButtons; +const JoyButton::JoyExtraAccelerationCurve JoyButton::DEFAULTEXTRAACCELCURVE = JoyButton::LinearAccelCurve; + JoyButtonSlot* JoyButton::lastActiveKey = nullptr; // Keep track of active Mouse Speed Mod slots. @@ -114,26 +65,10 @@ JoyButtonMouseHelper JoyButton::mouseHelper; QTimer JoyButton::staticMouseEventTimer; QList JoyButton::pendingMouseButtons; -// History buffers used for mouse smoothing routine. -QList JoyButton::mouseHistoryX; -QList JoyButton::mouseHistoryY; - -// Carry over remainder of a cursor move for the next mouse event. -double JoyButton::cursorRemainderX = 0.0; -double JoyButton::cursorRemainderY = 0.0; - -double JoyButton::weightModifier = 0; -int JoyButton::mouseHistorySize = 1; - -int JoyButton::mouseRefreshRate = 5; -int JoyButton::springModeScreen = -1; -int JoyButton::gamepadRefreshRate = 10; - #ifdef Q_OS_WIN JoyKeyRepeatHelper JoyButton::repeatHelper; #endif -static const double PI = acos(-1.0); JoyButton::JoyButton(int index, int originset, SetJoystick *parentSet, QObject *parent) : @@ -145,7 +80,7 @@ JoyButton::JoyButton(int index, int originset, SetJoystick *parentSet, qDebug() << "Thread in Joybutton"; #endif - vdpad = nullptr; + m_vdpad = nullptr; slotiter = nullptr; turboTimer.setParent(this); @@ -161,10 +96,9 @@ JoyButton::JoyButton(int index, int originset, SetJoystick *parentSet, delayTimer.setParent(this); slotSetChangeTimer.setParent(this); activeZoneTimer.setParent(this); - setChangeTimer.setSingleShot(true); slotSetChangeTimer.setSingleShot(true); - this->parentSet = parentSet; + m_parentSet = parentSet; connect(&pauseWaitTimer, &QTimer::timeout, this, &JoyButton::pauseWaitEvent); connect(&keyPressTimer, &QTimer::timeout, this, &JoyButton::keyPressEvent); @@ -186,11 +120,10 @@ JoyButton::JoyButton(int index, int originset, SetJoystick *parentSet, establishMouseTimerConnections(); // Make sure to call before calling reset - this->resetProperties(); - - this->index = index; - this->originset = originset; + resetAllProperties(); + m_index = index; + m_originset = originset; quitEvent = true; } @@ -198,27 +131,17 @@ JoyButton::~JoyButton() { qInstallMessageHandler(MessageHandler::myMessageOutput); - reset(); + resetPrivVars(); } void JoyButton::queuePendingEvent(bool pressed, bool ignoresets) { qInstallMessageHandler(MessageHandler::myMessageOutput); - pendingEvent = false; - pendingPress = false; - pendingIgnoreSets = false; + updatePendingParams(false, false, false); - if (this->vdpad != nullptr) - { - vdpadPassEvent(pressed, ignoresets); - } - else - { - pendingEvent = true; - pendingPress = pressed; - pendingIgnoreSets = ignoresets; - } + if (m_vdpad != nullptr) vdpadPassEvent(pressed, ignoresets); + else updatePendingParams(true, pressed, ignoresets); } void JoyButton::activatePendingEvent() @@ -228,10 +151,7 @@ void JoyButton::activatePendingEvent() if (pendingEvent) { joyEvent(pendingPress, pendingIgnoreSets); - - pendingEvent = false; - pendingPress = false; - pendingIgnoreSets = false; + updatePendingParams(false, false, false); } } @@ -246,35 +166,22 @@ void JoyButton::clearPendingEvent() { qInstallMessageHandler(MessageHandler::myMessageOutput); - pendingEvent = false; - pendingPress = false; - pendingIgnoreSets = false; + updatePendingParams(false, false, false); } void JoyButton::vdpadPassEvent(bool pressed, bool ignoresets) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((this->vdpad != nullptr) && (pressed != isButtonPressed)) + if ((m_vdpad != nullptr) && (pressed != isButtonPressed)) { isButtonPressed = pressed; - if (isButtonPressed) - { - emit clicked(index); - } - else - { - emit released(index); - } - if (!ignoresets) - { - this->vdpad->queueJoyEvent(ignoresets); - } - else - { - this->vdpad->joyEvent(pressed, ignoresets); - } + if (isButtonPressed) emit clicked(m_index); + else emit released(m_index); + + if (!ignoresets) m_vdpad->queueJoyEvent(ignoresets); + else m_vdpad->joyEvent(pressed, ignoresets); } } @@ -282,24 +189,15 @@ void JoyButton::joyEvent(bool pressed, bool ignoresets) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((this->vdpad != nullptr) && !pendingEvent) + if ((m_vdpad != nullptr) && !pendingEvent) { vdpadPassEvent(pressed, ignoresets); } - else if (ignoreEvents) + else if (ignoreEvents && (pressed != isButtonPressed)) { - if (pressed != isButtonPressed) - { - isButtonPressed = pressed; - if (isButtonPressed) - { - emit clicked(index); - } - else - { - emit released(index); - } - } + isButtonPressed = pressed; + if (isButtonPressed) emit clicked(m_index); + else emit released(m_index); } else { @@ -307,29 +205,26 @@ void JoyButton::joyEvent(bool pressed, bool ignoresets) { if (pressed) { - emit clicked(index); + emit clicked(m_index); if (updateInitAccelValues) - { - oldAccelMulti = updateOldAccelMulti = 0.0; - accelTravel = 0.0; - } + oldAccelMulti = updateOldAccelMulti = accelTravel = 0.0; } else { - emit released(index); + emit released(m_index); } bool activePress = pressed; setChangeTimer.stop(); - if (toggle && pressed) + if (m_toggle && pressed) { isDown = true; toggleActiveState = !toggleActiveState; if (!isButtonPressed) { - this->ignoresets = ignoresets; + m_ignoresets = ignoresets; isButtonPressed = !isButtonPressed; ignoreSetQueue.enqueue(ignoresets); @@ -340,13 +235,13 @@ void JoyButton::joyEvent(bool pressed, bool ignoresets) activePress = false; } } - else if (toggle && !pressed && isDown) + else if (m_toggle && !pressed && isDown) { isDown = false; if (!toggleActiveState) { - this->ignoresets = ignoresets; + m_ignoresets = ignoresets; isButtonPressed = !isButtonPressed; ignoreSetQueue.enqueue(ignoresets); @@ -355,168 +250,123 @@ void JoyButton::joyEvent(bool pressed, bool ignoresets) } else { - this->ignoresets = ignoresets; + m_ignoresets = ignoresets; isButtonPressed = isDown = pressed; ignoreSetQueue.enqueue(ignoresets); isButtonPressedQueue.enqueue(isButtonPressed); } - if (useTurbo) + if (m_useTurbo) { if (isButtonPressed && activePress && !turboTimer.isActive()) { - if (cycleResetActive && - (cycleResetHold.elapsed() >= cycleResetInterval) && (slotiter != nullptr)) - { - slotiter->toFront(); - currentCycle = nullptr; - previousCycle = nullptr; - } - - buttonHold.restart(); - buttonHeldRelease.restart(); - keyPressHold.restart(); - cycleResetHold.restart(); - turboTimer.start(); - - // Newly activated button. Just entered safe zone. - if (updateInitAccelValues) - { - initializeDistanceValues(); - } - currentAccelerationDistance = getAccelerationDistance(); - - Logger::LogDebug(trUtf8("Processing turbo for #%1 - %2") - .arg(parentSet->getInputDevice()->getRealJoyNumber()) - .arg(getPartialName())); - + startSequenceOfPressActive(true, trUtf8("Processing turbo for #%1 - %2")); turboEvent(); } else if (!isButtonPressed && !activePress && turboTimer.isActive()) { turboTimer.stop(); Logger::LogDebug(trUtf8("Finishing turbo for button #%1 - %2") - .arg(parentSet->getInputDevice()->getRealJoyNumber()) + .arg(m_parentSet->getInputDevice()->getRealJoyNumber()) .arg(getPartialName())); - if (isKeyPressed) - { - turboEvent(); - } - else - { - lastDistance = getMouseDistanceFromDeadZone(); - } + if (isKeyPressed) turboEvent(); + else lastDistance = getMouseDistanceFromDeadZone(); activeZoneTimer.start(); } } // Toogle is enabled and a controller button change has occurred. // Switch to a different distance zone if appropriate - else if (toggle && !activePress && isButtonPressed) + else if (m_toggle && !activePress && isButtonPressed) { - bool releasedCalled = distanceEvent(); - if (releasedCalled) - { - quitEvent = true; - buttonHold.restart(); - buttonHeldRelease.restart(); - keyPressHold.restart(); - releaseDeskTimer.stop(); - if (!keyPressTimer.isActive()) - { - waitForDeskEvent(); - } - } + updateParamsAfterDistEvent(); } else if (isButtonPressed && activePress) { - if (cycleResetActive && - (cycleResetHold.elapsed() >= cycleResetInterval) && (slotiter != nullptr)) - { - slotiter->toFront(); - currentCycle = nullptr; - previousCycle = nullptr; - } - - buttonHold.restart(); - buttonHeldRelease.restart(); - cycleResetHold.restart(); - keyPressHold.restart(); - releaseDeskTimer.stop(); - - // Newly activated button. Just entered safe zone. - if (updateInitAccelValues) - { - initializeDistanceValues(); - } - - currentAccelerationDistance = getAccelerationDistance(); - - Logger::LogDebug(trUtf8("Processing press for button #%1 - %2") - .arg(parentSet->getInputDevice()->getRealJoyNumber()) - .arg(getPartialName())); + startSequenceOfPressActive(false, trUtf8("Processing press for button #%1 - %2")); if (!keyPressTimer.isActive()) { checkForPressedSetChange(); - if (!setChangeTimer.isActive()) - { - waitForDeskEvent(); - } - } - + if (!setChangeTimer.isActive()) waitForDeskEvent(); + } } else if (!isButtonPressed && !activePress) { Logger::LogDebug(trUtf8("Processing release for button #%1 - %2") - .arg(parentSet->getInputDevice()->getRealJoyNumber()) + .arg(m_parentSet->getInputDevice()->getRealJoyNumber()) .arg(getPartialName())); waitForReleaseDeskEvent(); } - if (updateInitAccelValues) - { - updateLastMouseDistance = false; - updateStartingMouseDistance = false; - updateOldAccelMulti = 0.0; - } - + if (updateInitAccelValues) updateMouseParams(false, false, 0.0); } - else if (!useTurbo && isButtonPressed) + else if (!m_useTurbo && isButtonPressed) { resetAccelerationDistances(); currentAccelerationDistance = getAccelerationDistance(); if (!setChangeTimer.isActive()) - { - bool releasedCalled = distanceEvent(); - if (releasedCalled) - { - Logger::LogDebug(trUtf8("Distance change for button #%1 - %2") - .arg(parentSet->getInputDevice()->getRealJoyNumber()) - .arg(getPartialName())); - - quitEvent = true; - buttonHold.restart(); - buttonHeldRelease.restart(); - keyPressHold.restart(); - releaseDeskTimer.stop(); - if (!keyPressTimer.isActive()) - { - waitForDeskEvent(); - } - } - } + updateParamsAfterDistEvent(); } } updateInitAccelValues = true; } + +void JoyButton::updateParamsAfterDistEvent() +{ + if (distanceEvent()) + { + Logger::LogDebug(trUtf8("Distance change for button #%1 - %2") + .arg(m_parentSet->getInputDevice()->getRealJoyNumber()) + .arg(getPartialName())); + + quitEvent = true; + buttonHold.restart(); + buttonHeldRelease.restart(); + keyPressHold.restart(); + releaseDeskTimer.stop(); + + if (!keyPressTimer.isActive()) waitForDeskEvent(); + } +} + + +void JoyButton::startSequenceOfPressActive(bool isTurbo, QString debugText) +{ + if (cycleResetActive && + (cycleResetHold.elapsed() >= cycleResetInterval) && (slotiter != nullptr)) + { + slotiter->toFront(); + currentCycle = nullptr; + previousCycle = nullptr; + } + + buttonHold.restart(); + buttonHeldRelease.restart(); + keyPressHold.restart(); + cycleResetHold.restart(); + if (isTurbo) turboTimer.start(); + else releaseDeskTimer.stop(); + + // Newly activated button. Just entered safe zone. + if (updateInitAccelValues) initializeDistanceValues(); + + currentAccelerationDistance = getAccelerationDistance(); + + Logger::LogDebug(debugText + .arg(m_parentSet->getInputDevice()->getRealJoyNumber()) + .arg(getPartialName())); + +} + + /** * @brief Get 0 indexed number of button * @return 0 indexed button index number @@ -525,7 +375,7 @@ int JoyButton::getJoyNumber() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return index; + return m_index; } /** @@ -536,23 +386,23 @@ int JoyButton::getRealJoyNumber() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return index + 1; + return m_index + 1; } void JoyButton::setJoyNumber(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->index = index; + m_index = index; } void JoyButton::setToggle(bool toggle) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (toggle != this->toggle) + if (toggle != m_toggle) { - this->toggle = toggle; + m_toggle = toggle; emit toggleChanged(toggle); emit propertyUpdated(); } @@ -562,61 +412,32 @@ void JoyButton::setTurboInterval(int interval) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((interval >= 10) && (interval != this->turboInterval)) - { - this->turboInterval = interval; - emit turboIntervalChanged(interval); - emit propertyUpdated(); - } - else if ((interval < 10) && (interval != this->turboInterval)) + if ((interval < 10) && (interval != this->turboInterval)) { - interval = 0; this->setUseTurbo(false); - this->turboInterval = interval; - emit turboIntervalChanged(interval); - emit propertyUpdated(); + interval = 0; } + + this->turboInterval = interval; + emit turboIntervalChanged(interval); + emit propertyUpdated(); } void JoyButton::reset() { qInstallMessageHandler(MessageHandler::myMessageOutput); - disconnectPropertyUpdatedConnections(); - - turboTimer.stop(); - pauseWaitTimer.stop(); - createDeskTimer.stop(); - releaseDeskTimer.stop(); - holdTimer.stop(); - mouseWheelVerticalEventTimer.stop(); - mouseWheelHorizontalEventTimer.stop(); - setChangeTimer.stop(); - keyPressTimer.stop(); - delayTimer.stop(); - -#ifdef Q_OS_WIN - repeatHelper.getRepeatTimer()->stop(); -#endif - - slotSetChangeTimer.stop(); - - if (slotiter != nullptr) - { - delete slotiter; - slotiter = nullptr; - } + resetPrivVars(); +} +void JoyButton::resetPrivVars() +{ + disconnectPropertyUpdatedConnections(); + stopTimers(false, false, true); releaseActiveSlots(); clearAssignedSlots(); - - isButtonPressedQueue.clear(); - ignoreSetQueue.clear(); - mouseEventQueue.clear(); - mouseWheelVerticalEventQueue.clear(); - mouseWheelHorizontalEventQueue.clear(); - - resetProperties(); // quitEvent changed here + clearQueues(); + resetAllProperties(); // quitEvent changed here } void JoyButton::reset(int index) @@ -624,14 +445,14 @@ void JoyButton::reset(int index) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyButton::reset(); - this->index = index; + m_index = index; } bool JoyButton::getToggleState() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return toggle; + return m_toggle; } int JoyButton::getTurboInterval() @@ -645,49 +466,38 @@ void JoyButton::turboEvent() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (!isKeyPressed) + if (!isKeyPressed) changeTurboParams(!isKeyPressed, isButtonPressed); + else changeTurboParams(isKeyPressed, isButtonPressed); +} + +void JoyButton::changeTurboParams(bool _isKeyPressed, bool isButtonPressed) +{ + if (!isButtonPressedQueue.isEmpty()) { - if (!isButtonPressedQueue.isEmpty()) + if (!_isKeyPressed) { ignoreSetQueue.clear(); isButtonPressedQueue.clear(); - - ignoreSetQueue.enqueue(false); isButtonPressedQueue.enqueue(isButtonPressed); } - - createDeskEvent(); - isKeyPressed = true; - if (turboTimer.isActive()) - { - int tempInterval = turboInterval / 2; - if (turboTimer.interval() != tempInterval) - { - turboTimer.start(tempInterval); - } - } - } - else - { - if (!isButtonPressedQueue.isEmpty()) + else { - ignoreSetQueue.enqueue(false); isButtonPressedQueue.enqueue(!isButtonPressed); } - releaseDeskEvent(); + ignoreSetQueue.enqueue(false); + } - isKeyPressed = false; - if (turboTimer.isActive()) - { - int tempInterval = turboInterval / 2; - if (turboTimer.interval() != tempInterval) - { - turboTimer.start(tempInterval); - } + if (!_isKeyPressed) createDeskEvent(); + else releaseDeskEvent(); + isKeyPressed = true; - } + if (turboTimer.isActive()) + { + int tempInterval = turboInterval / 2; + if (turboTimer.interval() != tempInterval) + turboTimer.start(tempInterval); } } @@ -701,9 +511,7 @@ bool JoyButton::distanceEvent() { QReadLocker tempLocker(&assignmentsLock); - bool distanceFound = containsDistanceSlots(); - - if (distanceFound) + if (containsDistanceSlots()) { double currentDistance = getDistanceFromDeadZone(); double tempDistance = 0.0; @@ -723,18 +531,13 @@ bool JoyButton::distanceEvent() { JoyButtonSlot *slot = iter.next(); int tempcode = slot->getSlotCode(); + if (slot->getSlotMode() == JoyButtonSlot::JoyDistance) { tempDistance += (tempcode / 100.0); - if (currentDistance < tempDistance) - { - iter.toBack(); - } - else - { - previousDistanceSlot = slot; - } + if (currentDistance < tempDistance) iter.toBack(); + else previousDistanceSlot = slot; } else if (slot->getSlotMode() == JoyButtonSlot::JoyCycle) { @@ -746,7 +549,7 @@ bool JoyButton::distanceEvent() // No applicable distance slot if (!previousDistanceSlot) { - if (this->currentDistance != nullptr) + if (m_currentDistance != nullptr) { // Distance slot is currently active. // Release slots, return iterator to @@ -759,19 +562,16 @@ bool JoyButton::distanceEvent() currentPause = currentHold = nullptr; slotiter->toFront(); - if (previousCycle != nullptr) - { - slotiter->findNext(previousCycle); - } + if (previousCycle != nullptr) slotiter->findNext(previousCycle); - this->currentDistance = nullptr; + m_currentDistance = nullptr; released = true; } } // An applicable distance slot was found else if (previousDistanceSlot) { - if (this->currentDistance != previousDistanceSlot) + if (m_currentDistance != previousDistanceSlot) { // Active distance slot is not the applicable slot. // Deactive slots in previous distance range and @@ -789,6 +589,7 @@ bool JoyButton::distanceEvent() #endif slotiter->toFront(); + if (previousCycle != nullptr) { #ifndef QT_DEBUG_NO_OUTPUT @@ -800,7 +601,7 @@ bool JoyButton::distanceEvent() slotiter->findNext(previousDistanceSlot); - this->currentDistance = previousDistanceSlot; + m_currentDistance = previousDistanceSlot; released = true; } } @@ -816,7 +617,7 @@ void JoyButton::createDeskEvent() quitEvent = false; - if (slotiter == nullptr) + if (slotiter == nullptr) { assignmentsLock.lockForRead(); slotiter = new QListIterator(*getAssignedSlots()); @@ -832,33 +633,28 @@ void JoyButton::createDeskEvent() { currentCycle = nullptr; distanceEvent(); - } assignmentsLock.lockForRead(); activateSlots(); assignmentsLock.unlock(); - if (currentCycle != nullptr) - { - quitEvent = true; - } - else if ((currentPause == nullptr) && (currentHold == nullptr) && !keyPressTimer.isActive()) - { - quitEvent = true; - } + if (currentCycle != nullptr) quitEvent = true; + else if ((currentPause == nullptr) && (currentHold == nullptr) && !keyPressTimer.isActive()) quitEvent = true; + } void JoyButton::activateSlots() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (slotiter != nullptr) + if (slotiter != nullptr) { QWriteLocker tempLocker(&activeZoneLock); bool exit = false; bool delaySequence = false; + #ifdef Q_OS_WIN bool changeRepeatState = false; #endif @@ -870,327 +666,344 @@ void JoyButton::activateSlots() int tempcode = slot->getSlotCode(); JoyButtonSlot::JoySlotInputAction mode = slot->getSlotMode(); - if (mode == JoyButtonSlot::JoyKeyboard) + switch(mode) { - i++; - - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyKeyboard with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif - - sendevent(slot, true); - getActiveSlotsLocal().append(slot); - int oldvalue = activeKeys.value(tempcode, 0) + 1; - activeKeys.insert(tempcode, oldvalue); - if (!slot->isModifierKey()) + case JoyButtonSlot::JoyKeyboard: { - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "There has been assigned a lastActiveKey"; - #endif + i++; - lastActiveKey = slot; - #ifdef Q_OS_WIN - changeRepeatState = true; - #endif - } - else - { #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "It's not modifier key. lastActiveKey is null pointer"; + qDebug() << i << ": It's a JoyKeyboard with code: " << tempcode << " and name: " << slot->getSlotString(); #endif - lastActiveKey = nullptr; - - #ifdef Q_OS_WIN - changeRepeatState = true; - #endif - } - } - else if (mode == JoyButtonSlot::JoyMouseButton) - { - i++; - - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyMouseButton with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif - - if ((tempcode == static_cast(JoyButtonSlot::MouseWheelUp)) || - (tempcode == static_cast(JoyButtonSlot::MouseWheelDown))) - { - slot->getMouseInterval()->restart(); - wheelVerticalTime.restart(); - currentWheelVerticalEvent = slot; - getActiveSlotsLocal().append(slot); - wheelEventVertical(); - currentWheelVerticalEvent = nullptr; - } - else if ((tempcode == static_cast(JoyButtonSlot::MouseWheelLeft)) || - (tempcode == static_cast(JoyButtonSlot::MouseWheelRight))) - { - slot->getMouseInterval()->restart(); - wheelHorizontalTime.restart(); - currentWheelHorizontalEvent = slot; - getActiveSlotsLocal().append(slot); - wheelEventHorizontal(); - currentWheelHorizontalEvent = nullptr; - } - else - { sendevent(slot, true); getActiveSlotsLocal().append(slot); - int oldvalue = activeMouseButtons.value(tempcode, 0) + 1; - activeMouseButtons.insert(tempcode, oldvalue); - } - } - else if (mode == JoyButtonSlot::JoyMouseMovement) - { - i++; - - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyMouseMovement with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif - - slot->getMouseInterval()->restart(); + int oldvalue = GlobalVariables::JoyButton::JoyButton::activeKeys.value(tempcode, 0) + 1; + GlobalVariables::JoyButton::JoyButton::activeKeys.insert(tempcode, oldvalue); - getActiveSlotsLocal().append(slot); + if (!slot->isModifierKey()) + { + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "There has been assigned a lastActiveKey"; + #endif - if (pendingMouseButtons.size() == 0) - { - mouseHelper.setFirstSpringStatus(true); - } + lastActiveKey = slot; + #ifdef Q_OS_WIN + changeRepeatState = true; + #endif + } + else + { + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "It's not modifier key. lastActiveKey is null pointer"; + #endif - pendingMouseButtons.append(this); - mouseEventQueue.enqueue(slot); + lastActiveKey = nullptr; - // Temporarily lower timer interval. Helps improve mouse control - // precision on the lower end of an axis. - if (!staticMouseEventTimer.isActive() || (staticMouseEventTimer.interval() != 0)) - { - if (!staticMouseEventTimer.isActive() || (staticMouseEventTimer.interval() == IDLEMOUSEREFRESHRATE)) - { - int tempRate = qBound(0, mouseRefreshRate - gamepadRefreshRate, MAXIMUMMOUSEREFRESHRATE); - staticMouseEventTimer.start(tempRate); - testOldMouseTime.restart(); - accelExtraDurationTime.restart(); + #ifdef Q_OS_WIN + changeRepeatState = true; + #endif } - } - } - else if (mode == JoyButtonSlot::JoyPause) - { - i++; - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyPause with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif - - if (!getActiveSlots().isEmpty()) + break; + } + case JoyButtonSlot::JoyMouseButton: { + i++; + #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "active slots QHash is not empty"; + qDebug() << i << ": It's a JoyMouseButton with code: " << tempcode << " and name: " << slot->getSlotString(); #endif - if (slotiter->hasPrevious()) + if ((tempcode == static_cast(JoyButtonSlot::MouseWheelUp)) || + (tempcode == static_cast(JoyButtonSlot::MouseWheelDown))) { - i--; - slotiter->previous(); + slot->getMouseInterval()->restart(); + wheelVerticalTime.restart(); + currentWheelVerticalEvent = slot; + getActiveSlotsLocal().append(slot); + wheelEventVertical(); + currentWheelVerticalEvent = nullptr; } - delaySequence = true; - exit = true; + else if ((tempcode == static_cast(JoyButtonSlot::MouseWheelLeft)) || + (tempcode == static_cast(JoyButtonSlot::MouseWheelRight))) + { + slot->getMouseInterval()->restart(); + wheelHorizontalTime.restart(); + currentWheelHorizontalEvent = slot; + getActiveSlotsLocal().append(slot); + wheelEventHorizontal(); + currentWheelHorizontalEvent = nullptr; + } + else + { + sendevent(slot, true); + getActiveSlotsLocal().append(slot); + int oldvalue = GlobalVariables::JoyButton::JoyButton::activeMouseButtons.value(tempcode, 0) + 1; + GlobalVariables::JoyButton::JoyButton::activeMouseButtons.insert(tempcode, oldvalue); + } + + break; } - // Segment can be ignored on a 0 interval pause - else if (tempcode > 0) + case JoyButtonSlot::JoyMouseMovement: { + i++; + #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "active slots QHash is empty"; + qDebug() << i << ": It's a JoyMouseMovement with code: " << tempcode << " and name: " << slot->getSlotString(); #endif - currentPause = slot; - pauseHold.restart(); - inpauseHold.restart(); - pauseWaitTimer.start(0); - exit = true; + slot->getMouseInterval()->restart(); + + getActiveSlotsLocal().append(slot); + + if (pendingMouseButtons.size() == 0) + mouseHelper.setFirstSpringStatus(true); + + pendingMouseButtons.append(this); + mouseEventQueue.enqueue(slot); + + // Temporarily lower timer interval. Helps improve mouse control + // precision on the lower end of an axis. + if (!staticMouseEventTimer.isActive() || (staticMouseEventTimer.interval() != 0)) + { + if (!staticMouseEventTimer.isActive() || (staticMouseEventTimer.interval() == GlobalVariables::JoyButton::IDLEMOUSEREFRESHRATE)) + { + int tempRate = qBound(0, GlobalVariables::JoyButton::mouseRefreshRate - GlobalVariables::JoyButton::gamepadRefreshRate, GlobalVariables::JoyButton::MAXIMUMMOUSEREFRESHRATE); + staticMouseEventTimer.start(tempRate); + testOldMouseTime.restart(); + accelExtraDurationTime.restart(); + } + } + + break; } - } - else if (mode == JoyButtonSlot::JoyHold) - { - i++; + case JoyButtonSlot::JoyPause: + { + i++; - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyHold with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << i << ": It's a JoyPause with code: " << tempcode << " and name: " << slot->getSlotString(); + #endif - currentHold = slot; - holdTimer.start(0); - exit = true; - } - else if (mode == JoyButtonSlot::JoyDelay) - { - i++; + if (!getActiveSlots().isEmpty()) + { + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "active slots QHash is not empty"; + #endif - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyDelay with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif + if (slotiter->hasPrevious()) + { + i--; + slotiter->previous(); + } - currentDelay = slot; - buttonDelay.restart(); - delayTimer.start(0); - exit = true; - } - else if (mode == JoyButtonSlot::JoyCycle) - { - i++; + delaySequence = true; + exit = true; + } + // Segment can be ignored on a 0 interval pause + else if (tempcode > 0) + { + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "active slots QHash is empty"; + #endif - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyCycle with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif + currentPause = slot; + pauseHold.restart(); + inpauseHold.restart(); + pauseWaitTimer.start(0); + exit = true; + } - currentCycle = slot; - exit = true; - } - else if (mode == JoyButtonSlot::JoyDistance) - { - i++; + break; + } + case JoyButtonSlot::JoyHold: + { + i++; - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyDistance with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << i << ": It's a JoyHold with code: " << tempcode << " and name: " << slot->getSlotString(); + #endif - exit = true; - } - else if (mode == JoyButtonSlot::JoyRelease) - { - i++; + currentHold = slot; + holdTimer.start(0); + exit = true; + break; + } + case JoyButtonSlot::JoyDelay: + { + i++; - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyRelease with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << i << ": It's a JoyDelay with code: " << tempcode << " and name: " << slot->getSlotString(); + #endif - if (currentRelease == nullptr) + currentDelay = slot; + buttonDelay.restart(); + delayTimer.start(0); + exit = true; + break; + } + case JoyButtonSlot::JoyCycle: { - findReleaseEventEnd(); + i++; + + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << i << ": It's a JoyCycle with code: " << tempcode << " and name: " << slot->getSlotString(); + #endif + + currentCycle = slot; + exit = true; + break; } - else if ((currentRelease != nullptr) && getActiveSlots().isEmpty()) + case JoyButtonSlot::JoyDistance: { + i++; + #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "current is release but activeSlots is empty"; + qDebug() << i << ": It's a JoyDistance with code: " << tempcode << " and name: " << slot->getSlotString(); #endif exit = true; + break; } - else if ((currentRelease != nullptr) && !getActiveSlots().isEmpty()) + case JoyButtonSlot::JoyRelease: { + i++; + #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "current is release and activeSlots is not empty"; + qDebug() << i << ": It's a JoyRelease with code: " << tempcode << " and name: " << slot->getSlotString(); #endif - if (slotiter->hasPrevious()) + if (currentRelease == nullptr) + { + findJoySlotsEnd(slotiter); + } + else if ((currentRelease != nullptr) && getActiveSlots().isEmpty()) { #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Back to previous slotiter from release"; + qDebug() << "current is release but activeSlots is empty"; #endif - i--; - slotiter->previous(); + exit = true; } - delaySequence = true; - exit = true; - } - } - else if (mode == JoyButtonSlot::JoyMouseSpeedMod) - { - i++; + else if ((currentRelease != nullptr) && !getActiveSlots().isEmpty()) + { + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "current is release and activeSlots is not empty"; + #endif - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyMouseSpeedMod with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif + if (slotiter->hasPrevious()) + { + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "Back to previous slotiter from release"; + #endif - mouseSpeedModifier = tempcode * 0.01; - mouseSpeedModList.append(slot); - getActiveSlotsLocal().append(slot); - } - else if (mode == JoyButtonSlot::JoyKeyPress) - { - i++; + i--; + slotiter->previous(); + } - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyKeyPress with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif + delaySequence = true; + exit = true; + } - if (getActiveSlots().isEmpty()) + break; + } + case JoyButtonSlot::JoyMouseSpeedMod: { + i++; + #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "activeSlots is empty. It's a true delaySequence and assigned currentKeyPress"; + qDebug() << i << ": It's a JoyMouseSpeedMod with code: " << tempcode << " and name: " << slot->getSlotString(); #endif - delaySequence = true; - currentKeyPress = slot; + GlobalVariables::JoyButton::mouseSpeedModifier = tempcode * 0.01; + mouseSpeedModList.append(slot); + getActiveSlotsLocal().append(slot); + + break; } - else + case JoyButtonSlot::JoyKeyPress: { + i++; + #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "activeSlots is not empty. It's a true delaySequence and exit"; + qDebug() << i << ": It's a JoyKeyPress with code: " << tempcode << " and name: " << slot->getSlotString(); #endif - if (slotiter->hasPrevious()) + if (getActiveSlots().isEmpty()) { #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Back to previous slotiter from JoyKeyPress"; + qDebug() << "activeSlots is empty. It's a true delaySequence and assigned currentKeyPress"; #endif - i--; - slotiter->previous(); + delaySequence = true; + currentKeyPress = slot; } - delaySequence = true; - exit = true; - } - } - else if (mode == JoyButtonSlot::JoyLoadProfile) - { - i++; + else + { + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "activeSlots is not empty. It's a true delaySequence and exit"; + #endif - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyLoadProfile with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif + if (slotiter->hasPrevious()) + { + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "Back to previous slotiter from JoyKeyPress"; + #endif - releaseActiveSlots(); - slotiter->toBack(); - exit = true; + i--; + slotiter->previous(); + } - QString location = slot->getTextData(); - if (!location.isEmpty()) - { - parentSet->getInputDevice()->sendLoadProfileRequest(location); + delaySequence = true; + exit = true; + } + + break; } - } - else if (mode == JoyButtonSlot::JoySetChange) - { - i++; + case JoyButtonSlot::JoyLoadProfile: + { + i++; - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoySetChange with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << i << ": It's a JoyLoadProfile with code: " << tempcode << " and name: " << slot->getSlotString(); + #endif - getActiveSlotsLocal().append(slot); - } - else if (mode == JoyButtonSlot::JoyTextEntry) - { - i++; + releaseActiveSlots(); + slotiter->toBack(); + exit = true; - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyTextEntry with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif + QString location = slot->getTextData(); - sendevent(slot, true); - } - else if (mode == JoyButtonSlot::JoyExecute) - { - i++; + if (!location.isEmpty()) + m_parentSet->getInputDevice()->sendLoadProfileRequest(location); - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << i << ": It's a JoyExecute with code: " << tempcode << " and name: " << slot->getSlotString(); - #endif + break; + } + case JoyButtonSlot::JoySetChange: + { + i++; - sendevent(slot, true); + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << i << ": It's a JoySetChange with code: " << tempcode << " and name: " << slot->getSlotString(); + #endif + + getActiveSlotsLocal().append(slot); + break; + } + case JoyButtonSlot::JoyTextEntry: + case JoyButtonSlot::JoyExecute: + { + i++; + + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << i << ": It's a JoyExecute or JoyTextEntry with code: " << tempcode << " and name: " << slot->getSlotString(); + #endif + + sendevent(slot, true); + break; + } } } @@ -1206,7 +1019,7 @@ void JoyButton::activateSlots() #ifdef Q_OS_WIN else if (handler && (handler->getIdentifier() == "sendinput") && - changeRepeatState && !useTurbo) + changeRepeatState && !m_useTurbo) { InputDevice *device = getParentSet()->getInputDevice(); if (device->isKeyRepeatEnabled()) @@ -1241,9 +1054,9 @@ void JoyButton::slotSetChange() currentSetChangeSlot = nullptr; // Ensure that a change to the current set is not attempted. - if (setChangeIndex != originset) + if (setChangeIndex != m_originset) { - emit released(index); + emit released(m_index); emit setChangeActivated(setChangeIndex); } } @@ -1259,6 +1072,7 @@ void JoyButton::mouseEvent() JoyButtonSlot *buttonslot = nullptr; bool singleShot = false; + if (currentMouseEvent != nullptr) { buttonslot = currentMouseEvent; @@ -1267,24 +1081,20 @@ void JoyButton::mouseEvent() if ((buttonslot != nullptr) || !mouseEventQueue.isEmpty()) { - updateLastMouseDistance = true; - updateStartingMouseDistance = true; - updateOldAccelMulti = 0.0; + updateMouseParams(true, true, 0.0); QQueue tempQueue; if (buttonslot == nullptr) - { buttonslot = mouseEventQueue.dequeue(); - } int timeElapsed = testOldMouseTime.elapsed(); // Presumed initial mouse movement. Use full duration rather than // partial. - if (staticMouseEventTimer.interval() < mouseRefreshRate) + if (staticMouseEventTimer.interval() < GlobalVariables::JoyButton::mouseRefreshRate) { - timeElapsed = getMouseRefreshRate() + (timeElapsed - staticMouseEventTimer.interval()); + timeElapsed = GlobalVariables::JoyButton::mouseRefreshRate + (timeElapsed - staticMouseEventTimer.interval()); } while (buttonslot != nullptr) @@ -1295,31 +1105,27 @@ void JoyButton::mouseEvent() JoyButton::JoyMouseMovementMode mousemode = getMouseMode(); bool isActive = getActiveSlots().contains(buttonslot); + if (isActive) { int mousespeed = 0; if (mousemode == JoyButton::MouseCursor) { - if (mousedirection == static_cast(JoyButtonSlot::MouseRight)) - { - mousespeed = mouseSpeedX; - } - else if (mousedirection == static_cast(JoyButtonSlot::MouseLeft)) - { - mousespeed = mouseSpeedX; - } - else if (mousedirection == static_cast(JoyButtonSlot::MouseDown)) + switch(mousedirection) { - mousespeed = mouseSpeedY; - } - else if (mousedirection == static_cast(JoyButtonSlot::MouseUp)) - { - mousespeed = mouseSpeedY; + case 1: + case 2: + mousespeed = mouseSpeedY; + break; + + case 3: + case 4: + mousespeed = mouseSpeedX; + break; } double difference = getMouseDistanceFromDeadZone(); - double mouse1 = 0; double mouse2 = 0; double sumDist = buttonslot->getMouseDistance(); @@ -1327,10 +1133,6 @@ void JoyButton::mouseEvent() switch (currentCurve) { - case LinearCurve: - { - break; - } case QuadraticCurve: { difference = difference * difference; @@ -1372,7 +1174,7 @@ void JoyButton::mouseEvent() // offset. difference = (difference - 0.252); } - else if (temp > 0.75) + else { // Perform mouse acceleration. Make up the difference // due to the previous two segments. Maxes out at 1.0. @@ -1413,12 +1215,12 @@ void JoyButton::mouseEvent() buttonslot->getEasingTime()->restart(); } } - else if (temp > 0.75) + else { // Gradually increase the mouse speed until the specified elapsed duration // time has passed. int easingElapsed = buttonslot->getEasingTime()->elapsed(); - double easingDuration = this->easingDuration; // Time in seconds + double easingDuration = m_easingDuration; // Time in seconds if (!buttonslot->isEasingActive()) { buttonslot->setEasingStatus(true); @@ -1452,15 +1254,16 @@ void JoyButton::mouseEvent() difference = (difference * 1.33067 - 0.496005); } break; - } + } + default: + break; } double distance = 0; - difference = (mouseSpeedModifier == 1.0) ? difference : (difference * mouseSpeedModifier); + difference = (GlobalVariables::JoyButton::mouseSpeedModifier == 1.0) ? difference : (difference * GlobalVariables::JoyButton::mouseSpeedModifier); double mintravel = minMouseDistanceAccelThreshold * 0.01; double minstop = qMax(0.05, mintravel); - //double currentTravel = getAccelerationDistance() - lastAccelerationDistance; // Last check ensures that acceleration is only applied for the same direction. if (extraAccelerationEnabled && isPartRealAxis() && @@ -1468,7 +1271,7 @@ void JoyButton::mouseEvent() (((getAccelerationDistance() - lastAccelerationDistance) >= 0) == (getAccelerationDistance() >= 0))) { double magfactor = extraAccelerationMultiplier; - double minfactor = qMax((DEFAULTSTARTACCELMULTIPLIER * 0.001) + 1.0, magfactor * (startAccelMultiplier * 0.01)); + double minfactor = qMax((GlobalVariables::JoyButton::DEFAULTSTARTACCELMULTIPLIER * 0.001) + 1.0, magfactor * (startAccelMultiplier * 0.01)); double maxtravel = maxMouseDistanceAccelThreshold * 0.01; double slope = (magfactor - minfactor)/(maxtravel - mintravel); double intercept = minfactor - (slope * mintravel); @@ -1483,7 +1286,7 @@ void JoyButton::mouseEvent() if (extraAccelCurve == EaseOutSineCurve) { double getMultiDiff2 = ((currentAccelMultiTemp - minfactor) / (extraAccelerationMultiplier - minfactor)); - currentAccelMultiTemp = (extraAccelerationMultiplier - minfactor) * sin(getMultiDiff2 * (PI/2.0)) + minfactor; + currentAccelMultiTemp = (extraAccelerationMultiplier - minfactor) * sin(getMultiDiff2 * (GlobalVariables::JoyControlStick::PI/2.0)) + minfactor; } else if (extraAccelCurve == EaseOutQuadAccelCurve) { @@ -1513,7 +1316,7 @@ void JoyButton::mouseEvent() updateStartingMouseDistance = true; double magfactor = extraAccelerationMultiplier; - double minfactor = qMax((DEFAULTSTARTACCELMULTIPLIER * 0.001) + 1.0, magfactor * (startAccelMultiplier * 0.01)); + double minfactor = qMax((GlobalVariables::JoyButton::DEFAULTSTARTACCELMULTIPLIER * 0.001) + 1.0, magfactor * (startAccelMultiplier * 0.01)); double maxtravel = maxMouseDistanceAccelThreshold * 0.01; double slope = (magfactor - minfactor)/(maxtravel - mintravel); double intercept = minfactor - (slope * mintravel); @@ -1532,35 +1335,44 @@ void JoyButton::mouseEvent() double elapsedDuration = accelDuration * ((currentAccelMultiTemp - minfactor) / (extraAccelerationMultiplier - minfactor)); - if (extraAccelCurve == EaseOutSineCurve) + switch(extraAccelCurve) { - double multiDiff = ((currentAccelMultiTemp - minfactor) / (extraAccelerationMultiplier - minfactor)); - double temp = sin(multiDiff * (PI/2.0)); - elapsedDuration = accelDuration * temp + 0; - currentAccelMultiTemp = (extraAccelerationMultiplier - minfactor) * sin(multiDiff * (PI/2.0)) + minfactor; - } - else if (extraAccelCurve == EaseOutQuadAccelCurve) - { - double getMultiDiff2 = ((currentAccelMultiTemp - minfactor) / (extraAccelerationMultiplier - minfactor)); - double temp = (getMultiDiff2 * (getMultiDiff2 - 2)); - elapsedDuration = -accelDuration * temp + 0; - currentAccelMultiTemp = -(extraAccelerationMultiplier - minfactor) * temp + minfactor; - } - else if (extraAccelCurve == EaseOutCubicAccelCurve) - { - double getMultiDiff = ((currentAccelMultiTemp - minfactor) / (extraAccelerationMultiplier - minfactor)) - 1; - double temp = ((getMultiDiff) * (getMultiDiff) * (getMultiDiff) + 1); - elapsedDuration = accelDuration * temp + 0; - currentAccelMultiTemp = (extraAccelerationMultiplier - minfactor) * temp + minfactor; + case EaseOutSineCurve: + { + double multiDiff = ((currentAccelMultiTemp - minfactor) / (extraAccelerationMultiplier - minfactor)); + double temp = sin(multiDiff * (GlobalVariables::JoyControlStick::PI/2.0)); + elapsedDuration = accelDuration * temp + 0; + currentAccelMultiTemp = (extraAccelerationMultiplier - minfactor) * sin(multiDiff * (GlobalVariables::JoyControlStick::PI/2.0)) + minfactor; + + break; + } + case EaseOutQuadAccelCurve: + { + double getMultiDiff2 = ((currentAccelMultiTemp - minfactor) / (extraAccelerationMultiplier - minfactor)); + double temp = (getMultiDiff2 * (getMultiDiff2 - 2)); + elapsedDuration = -accelDuration * temp + 0; + currentAccelMultiTemp = -(extraAccelerationMultiplier - minfactor) * temp + minfactor; + + break; + } + case EaseOutCubicAccelCurve: + { + double getMultiDiff = ((currentAccelMultiTemp - minfactor) / (extraAccelerationMultiplier - minfactor)) - 1; + double temp = ((getMultiDiff) * (getMultiDiff) * (getMultiDiff) + 1); + elapsedDuration = accelDuration * temp + 0; + currentAccelMultiTemp = (extraAccelerationMultiplier - minfactor) * temp + minfactor; + + break; + } } double tempAccel = currentAccelMultiTemp; double elapsedDiff = 1.0; + if ((elapsedDuration > 0.0) && ((elapsedElapsed * 0.001) < elapsedDuration)) { elapsedDiff = ((elapsedElapsed * 0.001) / elapsedDuration); elapsedDiff = (1.0 - tempAccel) * (elapsedDiff * elapsedDiff * elapsedDiff) + tempAccel; - difference = elapsedDiff * difference; // As acceleration is applied, do not update last @@ -1584,24 +1396,27 @@ void JoyButton::mouseEvent() accelTravel = 0.0; } - sumDist += difference * (mousespeed * JoyButtonSlot::JOYSPEED * timeElapsed) * 0.001; + sumDist += difference * (mousespeed * GlobalVariables::JoyButtonSlot::JOYSPEED * timeElapsed) * 0.001; distance = sumDist; - if (mousedirection == static_cast(JoyButtonSlot::MouseRight)) - { - mouse1 = distance; - } - else if (mousedirection == static_cast(JoyButtonSlot::MouseLeft)) - { - mouse1 = -distance; - } - else if (mousedirection == static_cast(JoyButtonSlot::MouseDown)) + switch(mousedirection) { - mouse2 = distance; - } - else if (mousedirection == static_cast(JoyButtonSlot::MouseUp)) - { - mouse2 = -distance; + case 1: + mouse2 = -distance; + break; + + case 2: + mouse2 = distance; + break; + + case 3: + mouse1 = -distance; + break; + + case 4: + mouse1 = distance; + break; + } mouseCursorInfo infoX; @@ -1623,77 +1438,40 @@ void JoyButton::mouseEvent() double mouse2 = -2.0; double difference = getMouseDistanceFromDeadZone(); - if (mousedirection == static_cast(JoyButtonSlot::MouseRight)) - { - mouse1 = difference; - if (mouseHelper.getFirstSpringStatus()) - { - mouse2 = 0.0; - mouseHelper.setFirstSpringStatus(false); - } - } - else if (mousedirection == static_cast(JoyButtonSlot::MouseLeft)) - { - mouse1 = -difference; - if (mouseHelper.getFirstSpringStatus()) - { - mouse2 = 0.0; - mouseHelper.setFirstSpringStatus(false); - } - } - else if (mousedirection == static_cast(JoyButtonSlot::MouseDown)) + switch(mousedirection) { - if (mouseHelper.getFirstSpringStatus()) - { - mouse1 = 0.0; - mouseHelper.setFirstSpringStatus(false); - } + case 1: - mouse2 = difference; - } - else if (mousedirection == static_cast(JoyButtonSlot::MouseUp)) - { - if (mouseHelper.getFirstSpringStatus()) - { - mouse1 = 0.0; - mouseHelper.setFirstSpringStatus(false); - } + setDistanceForSpring(mouseHelper, mouse1, mouse2, -difference); + break; - mouse2 = -difference; - } + case 2: - PadderCommon::springModeInfo infoX; - infoX.displacementX = mouse1; - infoX.springDeadX = 0.0; - infoX.width = springWidth; - infoX.height = springHeight; - infoX.relative = relativeSpring; - infoX.screen = springModeScreen; - springXSpeeds.append(infoX); - - PadderCommon::springModeInfo infoY; - infoY.displacementY = mouse2; - infoY.springDeadY = 0.0; - infoY.width = springWidth; - infoY.height = springHeight; - infoY.relative = relativeSpring; - infoY.screen = springModeScreen; - springYSpeeds.append(infoY); + setDistanceForSpring(mouseHelper, mouse1, mouse2, difference); + break; + case 3: + + setDistanceForSpring(mouseHelper, mouse2, mouse1, -difference); + break; + + case 4: + + setDistanceForSpring(mouseHelper, mouse2, mouse1, difference); + break; + } + + updateMouseProperties(mouse1, 0.0, springWidth, springHeight, relativeSpring, GlobalVariables::JoyButton::springModeScreen, springXSpeeds, 'X'); + updateMouseProperties(mouse2, 0.0, springWidth, springHeight, relativeSpring, GlobalVariables::JoyButton::springModeScreen, springYSpeeds, 'Y'); mouseInterval->restart(); } tempQueue.enqueue(buttonslot); } - if (!mouseEventQueue.isEmpty() && !singleShot) - { - buttonslot = mouseEventQueue.dequeue(); - } - else - { - buttonslot = nullptr; - } + if (!mouseEventQueue.isEmpty() && !singleShot) buttonslot = mouseEventQueue.dequeue(); + else buttonslot = nullptr; + } if (!tempQueue.isEmpty()) @@ -1707,19 +1485,62 @@ void JoyButton::mouseEvent() } } + +void JoyButton::setDistanceForSpring(JoyButtonMouseHelper& mouseHelper, double& mouseFirstAx, double& mouseSecondAx, double distanceFromDeadZone) +{ + if (mouseHelper.getFirstSpringStatus()) + { + mouseFirstAx = 0.0; + mouseHelper.setFirstSpringStatus(false); + } + + mouseSecondAx = distanceFromDeadZone; +} + + +void JoyButton::updateMouseProperties(double newAxisValue, double newSpringDead, int newSpringWidth, int newSpringHeight, bool relatived, int modeScreen, QList& springSpeeds, QChar axis, double newAxisValueY, double newSpringDeadY) +{ + PadderCommon::springModeInfo axisInfo; + + if (axis == 'X') { + + axisInfo.displacementX = newAxisValue; + axisInfo.springDeadX = newSpringDead; + + } else if (axis == 'Y') { + + axisInfo.displacementY = newAxisValue; + axisInfo.springDeadY = newSpringDead; + + } else { + + axisInfo.displacementX = newAxisValue; + axisInfo.springDeadX = newSpringDead; + axisInfo.displacementY = newAxisValueY; + axisInfo.springDeadY = newSpringDeadY; + } + + axisInfo.width = newSpringWidth; + axisInfo.height = newSpringHeight; + axisInfo.relative = relatived; + axisInfo.screen = modeScreen; + springSpeeds.append(axisInfo); +} + + void JoyButton::wheelEventVertical() { qInstallMessageHandler(MessageHandler::myMessageOutput); JoyButtonSlot *buttonslot = nullptr; + if (currentWheelVerticalEvent != nullptr) - { - buttonslot = currentWheelVerticalEvent; - } + buttonslot = currentWheelVerticalEvent; if (buttonslot && (wheelSpeedY != 0)) { bool isActive = getActiveSlots().contains(buttonslot); + if (isActive) { sendevent(buttonslot, true); @@ -1735,10 +1556,12 @@ void JoyButton::wheelEventVertical() else if (!mouseWheelVerticalEventQueue.isEmpty() && (wheelSpeedY != 0)) { QQueue tempQueue; + while (!mouseWheelVerticalEventQueue.isEmpty()) { buttonslot = mouseWheelVerticalEventQueue.dequeue(); bool isActive = getActiveSlots().contains(buttonslot); + if (isActive) { sendevent(buttonslot, true); @@ -1768,14 +1591,14 @@ void JoyButton::wheelEventHorizontal() qInstallMessageHandler(MessageHandler::myMessageOutput); JoyButtonSlot *buttonslot = nullptr; + if (currentWheelHorizontalEvent != nullptr) - { buttonslot = currentWheelHorizontalEvent; - } if (buttonslot && (wheelSpeedX != 0)) { bool isActive = getActiveSlots().contains(buttonslot); + if (isActive) { sendevent(buttonslot, true); @@ -1791,10 +1614,12 @@ void JoyButton::wheelEventHorizontal() else if (!mouseWheelHorizontalEventQueue.isEmpty() && (wheelSpeedX != 0)) { QQueue tempQueue; + while (!mouseWheelHorizontalEventQueue.isEmpty()) { buttonslot = mouseWheelHorizontalEventQueue.dequeue(); bool isActive = getActiveSlots().contains(buttonslot); + if (isActive) { sendevent(buttonslot, true); @@ -1823,28 +1648,20 @@ void JoyButton::setUseTurbo(bool useTurbo) { qInstallMessageHandler(MessageHandler::myMessageOutput); - bool initialState = this->useTurbo; + bool initialState = m_useTurbo; - if (useTurbo != this->useTurbo) + if (useTurbo != m_useTurbo) { - if (useTurbo && this->containsSequence()) - { - this->useTurbo = false; - } - else - { - this->useTurbo = useTurbo; - } + if (useTurbo && this->containsSequence()) m_useTurbo = false; + else m_useTurbo = useTurbo; - if (initialState != this->useTurbo) + if (initialState != m_useTurbo) { - emit turboChanged(this->useTurbo); + emit turboChanged(m_useTurbo); emit propertyUpdated(); - if (this->useTurbo && (this->turboInterval == 0)) - { - this->setTurboInterval(ENABLEDTURBODEFAULT); - } + if (m_useTurbo && (this->turboInterval == 0)) + this->setTurboInterval(GlobalVariables::JoyButton::ENABLEDTURBODEFAULT); } } } @@ -1853,14 +1670,14 @@ bool JoyButton::isUsingTurbo() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return useTurbo; + return m_useTurbo; } QString JoyButton::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + return GlobalVariables::JoyButton::xmlName; } void JoyButton::readConfig(QXmlStreamReader *xml) @@ -1870,17 +1687,13 @@ void JoyButton::readConfig(QXmlStreamReader *xml) if (xml->isStartElement() && (xml->name() == getXmlName())) { xml->readNextStartElement(); + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != getXmlName()))) { bool found = readButtonConfig(xml); - if (!found) - { - xml->skipCurrentElement(); - } - else - { - buildActiveZoneSummaryString(); - } + + if (!found) xml->skipCurrentElement(); + else buildActiveZoneSummaryString(); xml->readNextStartElement(); } @@ -1889,7 +1702,6 @@ void JoyButton::readConfig(QXmlStreamReader *xml) void JoyButton::writeConfig(QXmlStreamWriter *xml) { - qInstallMessageHandler(MessageHandler::myMessageOutput); if (!isDefault()) @@ -1897,212 +1709,167 @@ void JoyButton::writeConfig(QXmlStreamWriter *xml) xml->writeStartElement(getXmlName()); xml->writeAttribute("index", QString::number(getRealJoyNumber())); - if (toggle != DEFAULTTOGGLE) - { - xml->writeTextElement("toggle", toggle ? "true" : "false"); - } - - if (turboInterval != DEFAULTTURBOINTERVAL) - { - xml->writeTextElement("turbointerval", QString::number(turboInterval)); - } - - if (currentTurboMode != DEFAULTTURBOMODE) - { - if (currentTurboMode == GradientTurbo) - { - xml->writeTextElement("turbomode", "gradient"); - } - else if (currentTurboMode == PulseTurbo) - { - xml->writeTextElement("turbomode", "pulse"); - } - } - - if (useTurbo != DEFAULTUSETURBO) - { - xml->writeTextElement("useturbo", useTurbo ? "true" : "false"); - } + if (m_toggle != GlobalVariables::JoyButton::DEFAULTTOGGLE) + xml->writeTextElement("toggle", m_toggle ? "true" : "false"); - if (mouseSpeedX != DEFAULTMOUSESPEEDX) - { + if (turboInterval != GlobalVariables::JoyButton::DEFAULTTURBOINTERVAL) + xml->writeTextElement("turbointerval", QString::number(turboInterval)); + + if ((currentTurboMode != DEFAULTTURBOMODE) && (currentTurboMode == GradientTurbo)) xml->writeTextElement("turbomode", "gradient"); + else if ((currentTurboMode != DEFAULTTURBOMODE) && (currentTurboMode == PulseTurbo)) xml->writeTextElement("turbomode", "pulse"); + + if (m_useTurbo != GlobalVariables::JoyButton::DEFAULTUSETURBO) + xml->writeTextElement("useturbo", m_useTurbo ? "true" : "false"); + + if (mouseSpeedX != GlobalVariables::JoyButton::DEFAULTMOUSESPEEDX) xml->writeTextElement("mousespeedx", QString::number(mouseSpeedX)); - } - if (mouseSpeedY != DEFAULTMOUSESPEEDY) - { + if (mouseSpeedY != GlobalVariables::JoyButton::DEFAULTMOUSESPEEDY) xml->writeTextElement("mousespeedy", QString::number(mouseSpeedY)); - } - - if (mouseMode != DEFAULTMOUSEMODE) + if ((mouseMode != DEFAULTMOUSEMODE) && (mouseMode == MouseCursor)) { - if (mouseMode == MouseCursor) - { - xml->writeTextElement("mousemode", "cursor"); - } - else if (mouseMode == MouseSpring) - { - xml->writeTextElement("mousemode", "spring"); - xml->writeTextElement("mousespringwidth", QString::number(springWidth)); - xml->writeTextElement("mousespringheight", QString::number(springHeight)); - } + xml->writeTextElement("mousemode", "cursor"); + } + else if ((mouseMode != DEFAULTMOUSEMODE) && (mouseMode == MouseSpring)) + { + xml->writeTextElement("mousemode", "spring"); + xml->writeTextElement("mousespringwidth", QString::number(springWidth)); + xml->writeTextElement("mousespringheight", QString::number(springHeight)); } if (mouseCurve != DEFAULTMOUSECURVE) { - if (mouseCurve == LinearCurve) - { - xml->writeTextElement("mouseacceleration", "linear"); - } - else if (mouseCurve == QuadraticCurve) - { - xml->writeTextElement("mouseacceleration", "quadratic"); - } - else if (mouseCurve == CubicCurve) - { - xml->writeTextElement("mouseacceleration", "cubic"); - } - else if (mouseCurve == QuadraticExtremeCurve) - { - xml->writeTextElement("mouseacceleration", "quadratic-extreme"); - } - else if (mouseCurve == PowerCurve) - { - xml->writeTextElement("mouseacceleration", "power"); - xml->writeTextElement("mousesensitivity", QString::number(sensitivity)); - } - else if (mouseCurve == EnhancedPrecisionCurve) - { - xml->writeTextElement("mouseacceleration", "precision"); - } - else if (mouseCurve == EasingQuadraticCurve) - { - xml->writeTextElement("mouseacceleration", "easing-quadratic"); - } - else if (mouseCurve == EasingCubicCurve) + switch(mouseCurve) { - xml->writeTextElement("mouseacceleration", "easing-cubic"); + case LinearCurve: + xml->writeTextElement("mouseacceleration", "linear"); + break; + + case QuadraticCurve: + xml->writeTextElement("mouseacceleration", "quadratic"); + break; + + case CubicCurve: + xml->writeTextElement("mouseacceleration", "cubic"); + break; + + case QuadraticExtremeCurve: + xml->writeTextElement("mouseacceleration", "quadratic-extreme"); + break; + + case PowerCurve: + xml->writeTextElement("mouseacceleration", "power"); + xml->writeTextElement("mousesensitivity", QString::number(sensitivity)); + break; + + case EnhancedPrecisionCurve: + xml->writeTextElement("mouseacceleration", "precision"); + break; + + case EasingQuadraticCurve: + xml->writeTextElement("mouseacceleration", "easing-quadratic"); + break; + + case EasingCubicCurve: + xml->writeTextElement("mouseacceleration", "easing-cubic"); + break; } } - if (wheelSpeedX != DEFAULTWHEELX) - { + if (wheelSpeedX != GlobalVariables::JoyButton::DEFAULTWHEELX) xml->writeTextElement("wheelspeedx", QString::number(wheelSpeedX)); - } - if (wheelSpeedY != DEFAULTWHEELY) - { + if (wheelSpeedY != GlobalVariables::JoyButton::DEFAULTWHEELY) xml->writeTextElement("wheelspeedy", QString::number(wheelSpeedY)); - } if (!isModifierButton()) { if (setSelectionCondition != SetChangeDisabled) { xml->writeTextElement("setselect", QString::number(setSelection+1)); - QString temptext = QString(); - if (setSelectionCondition == SetChangeOneWay) - { - temptext = "one-way"; - } - else if (setSelectionCondition == SetChangeTwoWay) - { - temptext = "two-way"; - } - else if (setSelectionCondition == SetChangeWhileHeld) + + switch(setSelectionCondition) { - temptext = "while-held"; + case SetChangeOneWay: + temptext = "one-way"; + break; + + case SetChangeTwoWay: + temptext = "two-way"; + break; + + case SetChangeWhileHeld: + temptext = "while-held"; + break; } + xml->writeTextElement("setselectcondition", temptext); } } if (!actionName.isEmpty()) - { xml->writeTextElement("actionname", actionName); - } if (cycleResetActive) - { xml->writeTextElement("cycleresetactive", "true"); - } - if (cycleResetInterval >= MINCYCLERESETTIME) - { + if (cycleResetInterval >= GlobalVariables::JoyButton::MINCYCLERESETTIME) xml->writeTextElement("cycleresetinterval", QString::number(cycleResetInterval)); - } - if (relativeSpring == true) - { + if (relativeSpring) xml->writeTextElement("relativespring", "true"); - } - if (qFuzzyCompare(easingDuration, DEFAULTEASINGDURATION)) - { - xml->writeTextElement("easingduration", QString::number(easingDuration)); - } + if (!qFuzzyCompare(m_easingDuration, GlobalVariables::JoyButton::DEFAULTEASINGDURATION)) + xml->writeTextElement("easingduration", QString::number(m_easingDuration)); if (extraAccelerationEnabled) - { xml->writeTextElement("extraacceleration", "true"); - } - if (qFuzzyCompare(extraAccelerationMultiplier, DEFAULTEXTRACCELVALUE)) - { + if (!qFuzzyCompare(extraAccelerationMultiplier, GlobalVariables::JoyButton::DEFAULTEXTRACCELVALUE)) xml->writeTextElement("accelerationmultiplier", QString::number(extraAccelerationMultiplier)); - } - if (qFuzzyCompare(startAccelMultiplier, DEFAULTSTARTACCELMULTIPLIER)) - { + if (!qFuzzyCompare(startAccelMultiplier, GlobalVariables::JoyButton::DEFAULTSTARTACCELMULTIPLIER)) xml->writeTextElement("startaccelmultiplier", QString::number(startAccelMultiplier)); - } - if (qFuzzyCompare(minMouseDistanceAccelThreshold, DEFAULTMINACCELTHRESHOLD)) - { + if (!qFuzzyCompare(minMouseDistanceAccelThreshold, GlobalVariables::JoyButton::DEFAULTMINACCELTHRESHOLD)) xml->writeTextElement("minaccelthreshold", QString::number(minMouseDistanceAccelThreshold)); - } - if (qFuzzyCompare(maxMouseDistanceAccelThreshold, DEFAULTMAXACCELTHRESHOLD)) - { + if (!qFuzzyCompare(maxMouseDistanceAccelThreshold, GlobalVariables::JoyButton::DEFAULTMAXACCELTHRESHOLD)) xml->writeTextElement("maxaccelthreshold", QString::number(maxMouseDistanceAccelThreshold)); - } - if (qFuzzyCompare(accelDuration, DEFAULTACCELEASINGDURATION)) - { + if (!qFuzzyCompare(accelDuration, GlobalVariables::JoyButton::DEFAULTACCELEASINGDURATION)) xml->writeTextElement("accelextraduration", QString::number(accelDuration)); - } - if (springDeadCircleMultiplier != DEFAULTSPRINGRELEASERADIUS) - { + if (springDeadCircleMultiplier != GlobalVariables::JoyButton::DEFAULTSPRINGRELEASERADIUS) xml->writeTextElement("springreleaseradius", QString::number(springDeadCircleMultiplier)); - } if (extraAccelCurve != DEFAULTEXTRAACCELCURVE) { QString temp = QString(); - if (extraAccelCurve == LinearAccelCurve) - { - temp = "linear"; - } - else if (extraAccelCurve == EaseOutSineCurve) - { - temp = "easeoutsine"; - } - else if (extraAccelCurve == EaseOutQuadAccelCurve) - { - temp = "easeoutquad"; - } - else if (extraAccelCurve == EaseOutCubicAccelCurve) + + switch(extraAccelCurve) { - temp = "easeoutcubic"; + case LinearAccelCurve: + temp = "linear"; + break; + + case EaseOutSineCurve: + temp = "easeoutsine"; + break; + + case EaseOutQuadAccelCurve: + temp = "easeoutquad"; + break; + + case EaseOutCubicAccelCurve: + temp = "easeoutcubic"; + break; } if (!temp.isEmpty()) - { xml->writeTextElement("extraaccelerationcurve", temp); - } } // Write information about assigned slots. @@ -2110,15 +1877,16 @@ void JoyButton::writeConfig(QXmlStreamWriter *xml) { xml->writeStartElement("slots"); QListIterator iter(*getAssignedSlots()); + while (iter.hasNext()) { JoyButtonSlot *buttonslot = iter.next(); buttonslot->writeConfig(xml); } + xml->writeEndElement(); } - xml->writeEndElement(); } } @@ -2133,10 +1901,8 @@ bool JoyButton::readButtonConfig(QXmlStreamReader *xml) { found = true; QString temptext = xml->readElementText(); - if (temptext == "true") - { - this->setToggle(true); - } + + if (temptext == "true") this->setToggle(true); } else if ((xml->name() == "turbointerval") && xml->isStartElement()) { @@ -2149,27 +1915,17 @@ bool JoyButton::readButtonConfig(QXmlStreamReader *xml) { found = true; QString temptext = xml->readElementText(); - if (temptext == "normal") - { - this->setTurboMode(NormalTurbo); - } - else if (temptext == "gradient") - { - this->setTurboMode(GradientTurbo); - } - else if (temptext == "pulse") - { - this->setTurboMode(PulseTurbo); - } + + if (temptext == "normal") this->setTurboMode(NormalTurbo); + else if (temptext == "gradient") this->setTurboMode(GradientTurbo); + else if (temptext == "pulse") this->setTurboMode(PulseTurbo); } else if ((xml->name() == "useturbo") && xml->isStartElement()) { found = true; QString temptext = xml->readElementText(); - if (temptext == "true") - { - this->setUseTurbo(true); - } + + if (temptext == "true") this->setUseTurbo(true); } else if ((xml->name() == "mousespeedx") && xml->isStartElement()) { @@ -2189,35 +1945,34 @@ bool JoyButton::readButtonConfig(QXmlStreamReader *xml) { found = true; QString temptext = xml->readElementText(); - if (temptext == "true") - { - this->setCycleResetStatus(true); - } + + if (temptext == "true") this->setCycleResetStatus(true); } else if ((xml->name() == "cycleresetinterval") && xml->isStartElement()) { found = true; QString temptext = xml->readElementText(); int tempchoice = temptext.toInt(); - if (tempchoice >= MINCYCLERESETTIME) - { + + if (tempchoice >= GlobalVariables::JoyButton::MINCYCLERESETTIME) this->setCycleResetTime(tempchoice); - } } else if ((xml->name() == "slots") && xml->isStartElement()) { found = true; xml->readNextStartElement(); + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != "slots"))) { if ((xml->name() == "slot") && xml->isStartElement()) { JoyButtonSlot *buttonslot = new JoyButtonSlot(this); buttonslot->readConfig(xml); - bool validSlot = buttonslot->isValidSlot(); - if (validSlot) + + if (buttonslot->isValidSlot()) { bool inserted = insertAssignedSlot(buttonslot, false); + if (!inserted) { delete buttonslot; @@ -2245,10 +2000,9 @@ bool JoyButton::readButtonConfig(QXmlStreamReader *xml) found = true; QString temptext = xml->readElementText(); int tempchoice = temptext.toInt(); - if ((tempchoice >= 0) && (tempchoice <= InputDevice::NUMBER_JOYSETS)) - { + + if ((tempchoice >= 0) && (tempchoice <= GlobalVariables::InputDevice::NUMBER_JOYSETS)) this->setChangeSetSelection(tempchoice - 1, false); - } } } else if ((xml->name() == "setselectcondition") && xml->isStartElement()) @@ -2258,74 +2012,36 @@ bool JoyButton::readButtonConfig(QXmlStreamReader *xml) found = true; QString temptext = xml->readElementText(); SetChangeCondition tempcondition = SetChangeDisabled; - if (temptext == "one-way") - { - tempcondition = SetChangeOneWay; - } - else if (temptext == "two-way") - { - tempcondition = SetChangeTwoWay; - } - else if (temptext == "while-held") - { - tempcondition = SetChangeWhileHeld; - } + + if (temptext == "one-way") tempcondition = SetChangeOneWay; + else if (temptext == "two-way") tempcondition = SetChangeTwoWay; + else if (temptext == "while-held") tempcondition = SetChangeWhileHeld; if (tempcondition != SetChangeDisabled) - { this->setChangeSetCondition(tempcondition, false, false); - } } } else if ((xml->name() == "mousemode") && xml->isStartElement()) { found = true; QString temptext = xml->readElementText(); - if (temptext == "cursor") - { - setMouseMode(MouseCursor); - } - else if (temptext == "spring") - { - setMouseMode(MouseSpring); - } + + if (temptext == "cursor") setMouseMode(MouseCursor); + else if (temptext == "spring") setMouseMode(MouseSpring); } else if ((xml->name() == "mouseacceleration") && xml->isStartElement()) { found = true; QString temptext = xml->readElementText(); - if (temptext == "linear") - { - setMouseCurve(LinearCurve); - } - else if (temptext == "quadratic") - { - setMouseCurve(QuadraticCurve); - } - else if (temptext == "cubic") - { - setMouseCurve(CubicCurve); - } - else if (temptext == "quadratic-extreme") - { - setMouseCurve(QuadraticExtremeCurve); - } - else if (temptext == "power") - { - setMouseCurve(PowerCurve); - } - else if (temptext == "precision") - { - setMouseCurve(EnhancedPrecisionCurve); - } - else if (temptext == "easing-quadratic") - { - setMouseCurve(EasingQuadraticCurve); - } - else if (temptext == "easing-cubic") - { - setMouseCurve(EasingCubicCurve); - } + + if (temptext == "linear") setMouseCurve(LinearCurve); + else if (temptext == "quadratic") setMouseCurve(QuadraticCurve); + else if (temptext == "cubic") setMouseCurve(CubicCurve); + else if (temptext == "quadratic-extreme") setMouseCurve(QuadraticExtremeCurve); + else if (temptext == "power") setMouseCurve(PowerCurve); + else if (temptext == "precision") setMouseCurve(EnhancedPrecisionCurve); + else if (temptext == "easing-quadratic") setMouseCurve(EasingQuadraticCurve); + else if (temptext == "easing-cubic") setMouseCurve(EasingCubicCurve); } else if ((xml->name() == "mousespringwidth") && xml->isStartElement()) { @@ -2352,33 +2068,29 @@ bool JoyButton::readButtonConfig(QXmlStreamReader *xml) { found = true; QString temptext = xml->readElementText(); - if (!temptext.isEmpty()) - { - setActionName(temptext); - } + + if (!temptext.isEmpty()) setActionName(temptext); } else if ((xml->name() == "wheelspeedx") && xml->isStartElement()) { found = true; QString temptext = xml->readElementText(); int tempchoice = temptext.toInt(); - setWheelSpeedX(tempchoice); + setWheelSpeed(tempchoice, 'X'); } else if ((xml->name() == "wheelspeedy") && xml->isStartElement()) { found = true; QString temptext = xml->readElementText(); int tempchoice = temptext.toInt(); - setWheelSpeedY(tempchoice); + setWheelSpeed(tempchoice, 'Y'); } else if ((xml->name() == "relativespring") && xml->isStartElement()) { found = true; QString temptext = xml->readElementText(); - if (temptext == "true") - { - this->setSpringRelativeStatus(true); - } + + if (temptext == "true") this->setSpringRelativeStatus(true); } else if ((xml->name() == "easingduration") && xml->isStartElement()) { @@ -2391,10 +2103,8 @@ bool JoyButton::readButtonConfig(QXmlStreamReader *xml) { found = true; QString temptext = xml->readElementText(); - if (temptext == "true") - { - setExtraAccelerationStatus(true); - } + + if (temptext == "true") setExtraAccelerationStatus(true); } else if ((xml->name() == "accelerationmultiplier") && xml->isStartElement()) { @@ -2437,22 +2147,11 @@ bool JoyButton::readButtonConfig(QXmlStreamReader *xml) QString temptext = xml->readElementText(); JoyExtraAccelerationCurve tempcurve = DEFAULTEXTRAACCELCURVE; - if (temptext == "linear") - { - tempcurve = LinearAccelCurve; - } - else if (temptext == "easeoutsine") - { - tempcurve = EaseOutSineCurve; - } - else if (temptext == "easeoutquad") - { - tempcurve = EaseOutQuadAccelCurve; - } - else if (temptext == "easeoutcubic") - { - tempcurve = EaseOutCubicAccelCurve; - } + + if (temptext == "linear") tempcurve = LinearAccelCurve; + else if (temptext == "easeoutsine") tempcurve = EaseOutSineCurve; + else if (temptext == "easeoutquad") tempcurve = EaseOutQuadAccelCurve; + else if (temptext == "easeoutcubic") tempcurve = EaseOutCubicAccelCurve; setExtraAccelerationCurve(tempcurve); } @@ -2461,10 +2160,8 @@ bool JoyButton::readButtonConfig(QXmlStreamReader *xml) found = true; QString temptext = xml->readElementText(); int tempchoice = temptext.toInt(); - if (!relativeSpring) - { - setSpringDeadCircleMultiplier(tempchoice); - } + + if (!relativeSpring) setSpringDeadCircleMultiplier(tempchoice); } return found; @@ -2476,14 +2173,10 @@ QString JoyButton::getName(bool forceFullFormat, bool displayNames) QString newlabel = getPartialName(forceFullFormat, displayNames); newlabel.append(": "); - if (!actionName.isEmpty() && displayNames) - { - newlabel.append(actionName); - } - else - { - newlabel.append(getCalculatedActiveZoneSummary()); - } + + if (!actionName.isEmpty() && displayNames) newlabel.append(actionName); + else newlabel.append(getCalculatedActiveZoneSummary()); + return newlabel; } @@ -2492,20 +2185,19 @@ QString JoyButton::getPartialName(bool forceFullFormat, bool displayNames) const qInstallMessageHandler(MessageHandler::myMessageOutput); QString temp = QString(); + if (!buttonName.isEmpty() && displayNames) { if (forceFullFormat) - { temp.append(trUtf8("Button")).append(" "); - } + temp.append(buttonName); } else if (!defaultButtonName.isEmpty()) { if (forceFullFormat) - { temp.append(trUtf8("Button")).append(" "); - } + temp.append(defaultButtonName); } else @@ -2532,8 +2224,8 @@ QString JoyButton::getSlotsSummary() { QListIterator iter(*getAssignedSlots()); QStringList stringlist = QStringList(); - int i = 0; + while (iter.hasNext()) { JoyButtonSlot *slot = iter.next(); @@ -2567,17 +2259,15 @@ QString JoyButton::getActiveZoneSummary() qInstallMessageHandler(MessageHandler::myMessageOutput); QList tempList = getActiveZoneList(); - QString temp = buildActiveZoneSummary(tempList); - return temp; + return buildActiveZoneSummary(tempList); } QString JoyButton::getCalculatedActiveZoneSummary() { qInstallMessageHandler(MessageHandler::myMessageOutput); - activeZoneStringLock.lockForRead(); - QString temp = this->activeZoneString; - activeZoneStringLock.unlock(); + QString temp = QString(); + lockForWritedString(temp, activeZoneString); return temp; } @@ -2588,10 +2278,7 @@ void JoyButton::buildActiveZoneSummaryString() { qInstallMessageHandler(MessageHandler::myMessageOutput); - activeZoneStringLock.lockForWrite(); - this->activeZoneString = getActiveZoneSummary(); - activeZoneStringLock.unlock(); - + lockForWritedString(activeZoneString, getActiveZoneSummary()); emit activeZoneChanged(); } @@ -2602,9 +2289,7 @@ void JoyButton::localBuildActiveZoneSummaryString() { qInstallMessageHandler(MessageHandler::myMessageOutput); - activeZoneStringLock.lockForWrite(); - this->activeZoneString = getActiveZoneSummary(); - activeZoneStringLock.unlock(); + lockForWritedString(activeZoneString, getActiveZoneSummary()); } QString JoyButton::buildActiveZoneSummary(QList &tempList) @@ -2620,18 +2305,12 @@ QString JoyButton::buildActiveZoneSummary(QList &tempList) if (setSelectionCondition == SetChangeOneWay) { newlabel.append(trUtf8("[Set %1 1W]").arg(setSelection+1)); - if (iter.hasNext()) - { - newlabel.append(" "); - } + if (iter.hasNext()) newlabel.append(" "); } else if (setSelectionCondition == SetChangeTwoWay) { newlabel = newlabel.append(trUtf8("[Set %1 2W]").arg(setSelection+1)); - if (iter.hasNext()) - { - newlabel.append(" "); - } + if (iter.hasNext()) newlabel.append(" "); } if (setSelectionCondition == SetChangeWhileHeld) @@ -2641,10 +2320,12 @@ QString JoyButton::buildActiveZoneSummary(QList &tempList) else if (iter.hasNext()) { bool behindHold = false; + while (iter.hasNext()) { JoyButtonSlot *slot = iter.next(); JoyButtonSlot::JoySlotInputAction mode = slot->getSlotMode(); + switch (mode) { case JoyButtonSlot::JoyKeyboard: @@ -2652,6 +2333,7 @@ QString JoyButton::buildActiveZoneSummary(QList &tempList) case JoyButtonSlot::JoyMouseMovement: { QString temp = slot->getSlotString(); + if (behindHold) { temp.prepend("[H] "); @@ -2689,6 +2371,7 @@ QString JoyButton::buildActiveZoneSummary(QList &tempList) case JoyButtonSlot::JoyExecute: { QString temp = slot->getSlotString(); + if (behindHold) { temp.prepend("[H] "); @@ -2702,19 +2385,15 @@ QString JoyButton::buildActiveZoneSummary(QList &tempList) case JoyButtonSlot::JoyRelease: { if (currentRelease == nullptr) - { - findReleaseEventIterEnd(&iter); - } + findJoySlotsEnd(&iter); break; } - case JoyButtonSlot::JoyDistance: { iter.toBack(); break; } - case JoyButtonSlot::JoyDelay: { iter.toBack(); @@ -2753,7 +2432,6 @@ QList JoyButton::getActiveZoneList() QListIterator activeSlotsIter(getActiveSlots()); QListIterator assignmentsIter(*getAssignedSlots()); - QListIterator *iter = nullptr; QReadWriteLock *tempLock = nullptr; @@ -2795,15 +2473,12 @@ QList JoyButton::getActiveZoneList() { JoyButtonSlot *slot = iter->next(); JoyButtonSlot::JoySlotInputAction mode = slot->getSlotMode(); + switch (mode) { case JoyButtonSlot::JoyKeyboard: case JoyButtonSlot::JoyMouseButton: case JoyButtonSlot::JoyMouseMovement: - { - tempSlotList.append(slot); - break; - } case JoyButtonSlot::JoyKeyPress: case JoyButtonSlot::JoyHold: case JoyButtonSlot::JoyLoadProfile: @@ -2817,38 +2492,20 @@ QList JoyButton::getActiveZoneList() case JoyButtonSlot::JoyRelease: { if (currentRelease == nullptr) - { - findReleaseEventIterEnd(iter); - } + findJoySlotsEnd(iter); break; } case JoyButtonSlot::JoyDistance: + case JoyButtonSlot::JoyCycle: { iter->toBack(); break; } - case JoyButtonSlot::JoyCycle: + default: { - iter->toBack(); break; } - case JoyButtonSlot::JoyPause: - { - - break; - } - case JoyButtonSlot::JoyMouseSpeedMod: - { - - break; - } - case JoyButtonSlot::JoyDelay: - { - - break; - } - } } } @@ -2924,21 +2581,15 @@ bool JoyButton::setAssignedSlot(int code, JoyButtonSlot::JoySlotInputAction mode bool slotInserted = false; JoyButtonSlot *slot = new JoyButtonSlot(code, mode, this); - if (slot->getSlotMode() == JoyButtonSlot::JoyDistance) + + if (slot->getSlotMode() == JoyButtonSlot::JoyDistance && (slot->getSlotCode() >= 1) && (slot->getSlotCode() <= 100) && (getTotalSlotDistance(slot) <= 1.0)) { - if ((slot->getSlotCode() >= 1) && (slot->getSlotCode() <= 100)) - { - double tempDistance = getTotalSlotDistance(slot); - if (tempDistance <= 1.0) - { - assignmentsLock.lockForWrite(); - getAssignmentsLocal().append(slot); - assignmentsLock.unlock(); + assignmentsLock.lockForWrite(); + getAssignmentsLocal().append(slot); + assignmentsLock.unlock(); - buildActiveZoneSummaryString(); - slotInserted = true; - } - } + buildActiveZoneSummaryString(); + slotInserted = true; } else if (slot->getSlotCode() >= 0) { @@ -2955,13 +2606,10 @@ bool JoyButton::setAssignedSlot(int code, JoyButtonSlot::JoySlotInputAction mode checkTurboCondition(slot); emit slotsChanged(); } - else + else if (slot != nullptr) { - if (slot != nullptr) - { - delete slot; - slot = nullptr; - } + delete slot; + slot = nullptr; } return slotInserted; @@ -2983,21 +2631,14 @@ bool JoyButton::setAssignedSlot(int code, int alias, bool slotInserted = false; JoyButtonSlot *slot = new JoyButtonSlot(code, alias, mode, this); - if (slot->getSlotMode() == JoyButtonSlot::JoyDistance) + if (slot->getSlotMode() == JoyButtonSlot::JoyDistance && (slot->getSlotCode() >= 1) && (slot->getSlotCode() <= 100) && (getTotalSlotDistance(slot) <= 1.0)) { - if ((slot->getSlotCode() >= 1) && (slot->getSlotCode() <= 100)) - { - double tempDistance = getTotalSlotDistance(slot); - if (tempDistance <= 1.0) - { - assignmentsLock.lockForWrite(); - getAssignmentsLocal().append(slot); - assignmentsLock.unlock(); + assignmentsLock.lockForWrite(); + getAssignmentsLocal().append(slot); + assignmentsLock.unlock(); - buildActiveZoneSummaryString(); - slotInserted = true; - } - } + buildActiveZoneSummaryString(); + slotInserted = true; } else if (slot->getSlotCode() >= 0) { @@ -3014,13 +2655,10 @@ bool JoyButton::setAssignedSlot(int code, int alias, checkTurboCondition(slot); emit slotsChanged(); } - else + else if (slot != nullptr) { - if (slot != nullptr) - { - delete slot; - slot = nullptr; - } + delete slot; + slot = nullptr; } return slotInserted; @@ -3041,22 +2679,11 @@ bool JoyButton::setAssignedSlot(int code, int alias, int index, qInstallMessageHandler(MessageHandler::myMessageOutput); bool permitSlot = true; - JoyButtonSlot *slot = new JoyButtonSlot(code, alias, mode, this); - if (slot->getSlotMode() == JoyButtonSlot::JoyDistance) + + if ((slot->getSlotMode() == JoyButtonSlot::JoyDistance) && (slot->getSlotCode() >= 1) && (slot->getSlotCode() <= 100)) { - if ((slot->getSlotCode() >= 1) && (slot->getSlotCode() <= 100)) - { - double tempDistance = getTotalSlotDistance(slot); - if (tempDistance > 1.0) - { - permitSlot = false; - } - } - else - { - permitSlot = false; - } + if (getTotalSlotDistance(slot) > 1.0) permitSlot = false; } else if (slot->getSlotCode() < 0) { @@ -3071,7 +2698,7 @@ bool JoyButton::setAssignedSlot(int code, int alias, int index, { // Insert slot and move existing slots. JoyButtonSlot *temp = getAssignedSlots()->at(index); - if (temp) + if (temp != nullptr) { delete temp; temp = nullptr; @@ -3087,18 +2714,13 @@ bool JoyButton::setAssignedSlot(int code, int alias, int index, checkTurboCondition(slot); assignmentsLock.unlock(); - buildActiveZoneSummaryString(); - emit slotsChanged(); } - else + else if (slot != nullptr) { - if (slot != nullptr) - { - delete slot; - slot = nullptr; - } + delete slot; + slot = nullptr; } return permitSlot; @@ -3119,22 +2741,11 @@ bool JoyButton::insertAssignedSlot(int code, int alias, int index, qInstallMessageHandler(MessageHandler::myMessageOutput); bool permitSlot = true; - JoyButtonSlot *slot = new JoyButtonSlot(code, alias, mode, this); - if (slot->getSlotMode() == JoyButtonSlot::JoyDistance) + + if (slot->getSlotMode() == JoyButtonSlot::JoyDistance && (slot->getSlotCode() >= 1) && (slot->getSlotCode() <= 100)) { - if ((slot->getSlotCode() >= 1) && (slot->getSlotCode() <= 100)) - { - double tempDistance = getTotalSlotDistance(slot); - if (tempDistance > 1.0) - { - permitSlot = false; - } - } - else - { - permitSlot = false; - } + if (getTotalSlotDistance(slot) > 1.0) permitSlot = false; } else if (slot->getSlotCode() < 0) { @@ -3162,18 +2773,13 @@ bool JoyButton::insertAssignedSlot(int code, int alias, int index, checkTurboCondition(slot); assignmentsLock.unlock(); - buildActiveZoneSummaryString(); - emit slotsChanged(); } - else + else if (slot != nullptr) { - if (slot != nullptr) - { - delete slot; - slot = nullptr; - } + delete slot; + slot = nullptr; } return permitSlot; @@ -3185,32 +2791,16 @@ bool JoyButton::insertAssignedSlot(JoyButtonSlot *newSlot, bool updateActiveStri bool permitSlot = false; - if (newSlot->getSlotMode() == JoyButtonSlot::JoyDistance) - { - if ((newSlot->getSlotCode() >= 1) && (newSlot->getSlotCode() <= 100)) - { - double tempDistance = getTotalSlotDistance(newSlot); - if (tempDistance <= 1.0) - { - permitSlot = true; - } - } - } - else if (newSlot->getSlotMode() == JoyButtonSlot::JoyLoadProfile) - { - permitSlot = true; - } - else if (newSlot->getSlotMode() == JoyButtonSlot::JoyTextEntry && - !newSlot->getTextData().isEmpty()) + if ((newSlot->getSlotMode() == JoyButtonSlot::JoyDistance) && (newSlot->getSlotCode() >= 1) && (newSlot->getSlotCode() <= 100)) { - permitSlot = true; + if (getTotalSlotDistance(newSlot) <= 1.0) permitSlot = true; } - else if (newSlot->getSlotMode() == JoyButtonSlot::JoyExecute && + else if ((newSlot->getSlotMode() == JoyButtonSlot::JoyTextEntry || newSlot->getSlotMode() == JoyButtonSlot::JoyExecute) && !newSlot->getTextData().isEmpty()) { permitSlot = true; } - else if (newSlot->getSlotCode() >= 0) + else if ((newSlot->getSlotMode() == JoyButtonSlot::JoyLoadProfile) || newSlot->getSlotCode() >= 0) { permitSlot = true; } @@ -3223,10 +2813,7 @@ bool JoyButton::insertAssignedSlot(JoyButtonSlot *newSlot, bool updateActiveStri assignmentsLock.unlock(); if (updateActiveString) - { buildActiveZoneSummaryString(); - } - emit slotsChanged(); } @@ -3242,27 +2829,15 @@ bool JoyButton::setAssignedSlot(JoyButtonSlot *otherSlot, int index) bool permitSlot = false; JoyButtonSlot *newslot = new JoyButtonSlot(otherSlot, this); - if (newslot->getSlotMode() == JoyButtonSlot::JoyDistance) + if (newslot->getSlotMode() == JoyButtonSlot::JoyDistance && (newslot->getSlotCode() >= 1) && (newslot->getSlotCode() <= 100)) { - if ((newslot->getSlotCode() >= 1) && (newslot->getSlotCode() <= 100)) - { - double tempDistance = getTotalSlotDistance(newslot); - if (tempDistance <= 1.0) - { - permitSlot = true; - } - } + if (getTotalSlotDistance(newslot) <= 1.0) permitSlot = true; } else if (newslot->getSlotMode() == JoyButtonSlot::JoyLoadProfile) { permitSlot = true; } - else if ((newslot->getSlotMode() == JoyButtonSlot::JoyTextEntry) && - !newslot->getTextData().isEmpty()) - { - permitSlot = true; - } - else if ((newslot->getSlotMode() == JoyButtonSlot::JoyExecute) && + else if ((newslot->getSlotMode() == JoyButtonSlot::JoyExecute || newslot->getSlotMode() == JoyButtonSlot::JoyTextEntry) && !newslot->getTextData().isEmpty()) { permitSlot = true; @@ -3275,13 +2850,13 @@ bool JoyButton::setAssignedSlot(JoyButtonSlot *otherSlot, int index) if (permitSlot) { assignmentsLock.lockForWrite(); - checkTurboCondition(newslot); if ((index >= 0) && (index < getAssignedSlots()->count())) { // Slot already exists. Override code and place into desired slot JoyButtonSlot *temp = getAssignedSlots()->at(index); + if (temp != nullptr) { delete temp; @@ -3297,12 +2872,10 @@ bool JoyButton::setAssignedSlot(JoyButtonSlot *otherSlot, int index) } assignmentsLock.unlock(); - buildActiveZoneSummaryString(); - emit slotsChanged(); } - else + else if (newslot != nullptr) { delete newslot; newslot = nullptr; @@ -3375,9 +2948,7 @@ void JoyButton::setChangeSetSelection(int index, bool updateActiveString) setSelection = index; if (updateActiveString) - { buildActiveZoneSummaryString(); - } emit propertyUpdated(); } @@ -3402,12 +2973,12 @@ void JoyButton::setChangeSetCondition(SetChangeCondition condition, if ((condition == SetChangeWhileHeld) || (condition == SetChangeTwoWay)) { // Set new condition - emit setAssignmentChanged(index, setSelection, condition); + emit setAssignmentChanged(m_index, setSelection, condition); } else if ((setSelectionCondition == SetChangeWhileHeld) || (setSelectionCondition == SetChangeTwoWay)) { // Remove old condition - emit setAssignmentChanged(index, setSelection, SetChangeDisabled); + emit setAssignmentChanged(m_index, setSelection, SetChangeDisabled); } setSelectionCondition = condition; @@ -3418,16 +2989,12 @@ void JoyButton::setChangeSetCondition(SetChangeCondition condition, } if (setSelectionCondition == SetChangeDisabled) - { setChangeSetSelection(-1); - } if (setSelectionCondition != oldCondition) { if (updateActiveString) - { buildActiveZoneSummaryString(); - } emit propertyUpdated(); } @@ -3451,7 +3018,7 @@ int JoyButton::getOriginSet() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return originset; + return m_originset; } void JoyButton::pauseWaitEvent() @@ -3462,7 +3029,7 @@ void JoyButton::pauseWaitEvent() { if (!isButtonPressedQueue.isEmpty() && createDeskTimer.isActive()) { - if (slotiter != nullptr) + if (slotiter != nullptr) { slotiter->toBack(); @@ -3479,10 +3046,9 @@ void JoyButton::pauseWaitEvent() pauseWaitTimer.stop(); slotiter->toFront(); + if (previousCycle != nullptr) - { slotiter->findNext(previousCycle); - } quitEvent = true; keyPressHold.restart(); @@ -3495,16 +3061,11 @@ void JoyButton::pauseWaitEvent() // If release timer is active, temporarily // disable it if (releaseDeskTimer.isActive()) - { releaseDeskTimer.stop(); - } if (inpauseHold.elapsed() < currentPause->getSlotCode()) { - int proposedInterval = currentPause->getSlotCode() - inpauseHold.elapsed(); - proposedInterval = proposedInterval > 0 ? proposedInterval : 0; - int newTimerInterval = qMin(10, proposedInterval); - pauseWaitTimer.start(newTimerInterval); + startTimerOverrun(currentPause->getSlotCode(), &inpauseHold, &pauseWaitTimer, 0); } else { @@ -3516,9 +3077,7 @@ void JoyButton::pauseWaitEvent() // If release timer was disabled but if the button // is not pressed, restart the release timer. if (!releaseDeskTimer.isActive() && (isButtonPressedQueue.isEmpty() || !isButtonPressedQueue.last())) - { waitForReleaseDeskEvent(); - } } } else @@ -3540,72 +3099,18 @@ void JoyButton::checkForSetChange() { if (!tempFinalState && (setSelectionCondition == SetChangeOneWay) && (setSelection > -1)) { - // If either timer is currently active, - // stop the timer - if (createDeskTimer.isActive()) - { - createDeskTimer.stop(); - } - - if (releaseDeskTimer.isActive()) - { - releaseDeskTimer.stop(); - } - - isButtonPressedQueue.clear(); - ignoreSetQueue.clear(); - - emit released(index); - emit setChangeActivated(setSelection); + restartAllForSetChange(); } else if (!tempFinalState && (setSelectionCondition == SetChangeTwoWay) && (setSelection > -1)) { - // If either timer is currently active, - // stop the timer - if (createDeskTimer.isActive()) - { - createDeskTimer.stop(); - } - - if (releaseDeskTimer.isActive()) - { - releaseDeskTimer.stop(); - } - - isButtonPressedQueue.clear(); - ignoreSetQueue.clear(); - - emit released(index); - emit setChangeActivated(setSelection); + restartAllForSetChange(); } else if ((setSelectionCondition == SetChangeWhileHeld) && (setSelection > -1)) { - if (tempFinalState) - { - whileHeldStatus = true; - } - else if (!tempFinalState) - { - whileHeldStatus = false; - } - - // If either timer is currently active, - // stop the timer - if (createDeskTimer.isActive()) - { - createDeskTimer.stop(); - } - - if (releaseDeskTimer.isActive()) - { - releaseDeskTimer.stop(); - } - - isButtonPressedQueue.clear(); - ignoreSetQueue.clear(); + if (tempFinalState) whileHeldStatus = true; + else if (!tempFinalState) whileHeldStatus = false; - emit released(index); - emit setChangeActivated(setSelection); + restartAllForSetChange(); } } @@ -3613,25 +3118,38 @@ void JoyButton::checkForSetChange() if (!isButtonPressedQueue.isEmpty()) { isButtonPressedQueue.clear(); + if (tempFinalState) - { isButtonPressedQueue.enqueue(tempFinalState); - } } // Clear queue except for a press if it is last in if (!ignoreSetQueue.isEmpty()) { - bool tempFinalIgnoreSetsState = ignoreSetQueue.last(); + bool tempFinalIgnoreSetsState_local = ignoreSetQueue.last(); ignoreSetQueue.clear(); + if (tempFinalState) - { - ignoreSetQueue.enqueue(tempFinalIgnoreSetsState); - } + ignoreSetQueue.enqueue(tempFinalIgnoreSetsState_local); } } } +void JoyButton::restartAllForSetChange() +{ + if (createDeskTimer.isActive()) + createDeskTimer.stop(); + + if (releaseDeskTimer.isActive()) + releaseDeskTimer.stop(); + + isButtonPressedQueue.clear(); + ignoreSetQueue.clear(); + + emit released(m_index); + emit setChangeActivated(setSelection); +} + void JoyButton::waitForDeskEvent() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -3677,22 +3195,21 @@ void JoyButton::waitForReleaseDeskEvent() if (quitEvent && !keyPressTimer.isActive()) { if (releaseDeskTimer.isActive()) - { releaseDeskTimer.stop(); - } + createDeskTimer.stop(); keyPressTimer.stop(); releaseDeskEvent(); } else if (!releaseDeskTimer.isActive()) { -#ifdef Q_CC_MSVC - releaseDeskTimer.start(1); - createDeskTimer.stop(); -#else - releaseDeskTimer.start(1); - createDeskTimer.stop(); -#endif + #ifdef Q_CC_MSVC + releaseDeskTimer.start(1); + createDeskTimer.stop(); + #else + releaseDeskTimer.start(1); + createDeskTimer.stop(); + #endif } else if (releaseDeskTimer.isActive()) { @@ -3708,10 +3225,12 @@ bool JoyButton::containsSequence() assignmentsLock.lockForRead(); QListIterator tempiter(*getAssignedSlots()); + while (tempiter.hasNext()) { JoyButtonSlot *slot = tempiter.next(); JoyButtonSlot::JoySlotInputAction mode = slot->getSlotMode(); + if ((mode == JoyButtonSlot::JoyPause) || (mode == JoyButtonSlot::JoyHold) || (mode == JoyButtonSlot::JoyDistance) @@ -3721,6 +3240,7 @@ bool JoyButton::containsSequence() tempiter.toBack(); } } + assignmentsLock.unlock(); return result; @@ -3733,10 +3253,9 @@ void JoyButton::holdEvent() if (currentHold != nullptr) { bool currentlyPressed = false; + if (!isButtonPressedQueue.isEmpty()) - { currentlyPressed = isButtonPressedQueue.last(); - } // Activate hold event if (currentlyPressed && (buttonHold.elapsed() > currentHold->getSlotCode())) @@ -3759,11 +3278,7 @@ void JoyButton::holdEvent() qDebug() << "Elapsed time has not occurred, because buttonHold: " << buttonHold.elapsed() << " is not greater than currentHoldCode: " << currentHold->getSlotCode(); #endif - int holdTime = currentHold->getSlotCode(); - int proposedInterval = holdTime - buttonHold.elapsed(); - proposedInterval = (proposedInterval > 0) ? proposedInterval : 0; - int newTimerInterval = qMin(10, proposedInterval); - holdTimer.start(newTimerInterval); + startTimerOverrun(currentHold->getSlotCode(), &buttonHold, &holdTimer); } // Pre-emptive release else @@ -3775,13 +3290,13 @@ void JoyButton::holdEvent() currentHold = nullptr; holdTimer.stop(); - if (slotiter != nullptr) + if (slotiter != nullptr) { #ifndef QT_DEBUG_NO_OUTPUT qDebug() << "slotiter exists"; #endif - findHoldEventEnd(); + findJoySlotsEnd(slotiter); createDeskEvent(); } } @@ -3792,6 +3307,23 @@ void JoyButton::holdEvent() } } +void JoyButton::startTimerOverrun(int slotCode, QTime* currSlotTime, QTimer* currSlotTimer, bool releasedDeskTimer) +{ + int proposedInterval = slotCode - currSlotTime->elapsed(); + proposedInterval = (proposedInterval > 0) ? proposedInterval : 0; + int newTimerInterval = qMin(10, proposedInterval); + currSlotTimer->start(newTimerInterval); + + if (releasedDeskTimer) { + + // If release timer is active, push next run until + // after keyDelayTimer will timeout again. Helps + // reduce CPU usage of an excessively repeating timer. + if (releaseDeskTimer.isActive()) + releaseDeskTimer.start(proposedInterval); + } +} + void JoyButton::delayEvent() { @@ -3800,31 +3332,26 @@ void JoyButton::delayEvent() if (currentDelay != nullptr) { bool currentlyPressed = false; + if (!isButtonPressedQueue.isEmpty()) - { currentlyPressed = isButtonPressedQueue.last(); - } - // Delay time has elapsed. Continue processing slots. if ((currentDelay != nullptr) && (buttonDelay.elapsed() > currentDelay->getSlotCode())) { + // Delay time has elapsed. Continue processing slots. currentDelay = nullptr; delayTimer.stop(); buttonDelay.restart(); createDeskEvent(); } - // Elapsed time has not occurred else if (currentlyPressed) { - int delayTime = currentDelay->getSlotCode(); - int proposedInterval = delayTime - buttonDelay.elapsed(); - proposedInterval = (proposedInterval > 0) ? proposedInterval : 0; - int newTimerInterval = qMin(10, proposedInterval); - delayTimer.start(newTimerInterval); + // Elapsed time has not occurred + startTimerOverrun(currentDelay->getSlotCode(), &buttonDelay, &delayTimer); } - // Pre-emptive release else { + // Pre-emptive release currentDelay = nullptr; delayTimer.stop(); } @@ -3850,16 +3377,10 @@ void JoyButton::releaseDeskEvent(bool skipsetchange) repeatHelper.getRepeatTimer()->stop(); #endif setChangeTimer.stop(); - releaseActiveSlots(); - if (!isButtonPressedQueue.isEmpty() && (currentRelease == nullptr)) - { - releaseSlotEvent(); - } - else if (currentRelease != nullptr) - { - currentRelease = nullptr; - } + + if (!isButtonPressedQueue.isEmpty() && (currentRelease == nullptr)) releaseSlotEvent(); + else if (currentRelease != nullptr) currentRelease = nullptr; if (!skipsetchange && (setSelectionCondition != SetChangeDisabled) && !isButtonPressedQueue.isEmpty() && (currentRelease == nullptr)) @@ -3869,73 +3390,22 @@ void JoyButton::releaseDeskEvent(bool skipsetchange) if (!tempButtonPressed && !tempFinalIgnoreSetsState) { - if ((setSelectionCondition == SetChangeWhileHeld) && whileHeldStatus) - { - setChangeTimer.start(0); - } - else if (setSelectionCondition != SetChangeWhileHeld) - { - setChangeTimer.start(); - } + if ((setSelectionCondition == SetChangeWhileHeld) && whileHeldStatus) setChangeTimer.start(0); + else if (setSelectionCondition != SetChangeWhileHeld) setChangeTimer.start(); } else { - bool tempFinalState = false; - if (!isButtonPressedQueue.isEmpty()) - { - tempFinalState = isButtonPressedQueue.last(); - isButtonPressedQueue.clear(); - if (tempFinalState) - { - isButtonPressedQueue.enqueue(tempFinalState); - } - } - - if (!ignoreSetQueue.isEmpty()) - { - bool tempFinalIgnoreSetsState = ignoreSetQueue.last(); - ignoreSetQueue.clear(); - if (tempFinalState) - { - ignoreSetQueue.enqueue(tempFinalIgnoreSetsState); - } - } + changeStatesQueue(false); } } else { - bool tempFinalState = false; - if (!isButtonPressedQueue.isEmpty()) - { - tempFinalState = isButtonPressedQueue.last(); - isButtonPressedQueue.clear(); - if (tempFinalState || (currentRelease != nullptr)) - { - isButtonPressedQueue.enqueue(tempFinalState); - } - } - - if (!ignoreSetQueue.isEmpty()) - { - bool tempFinalIgnoreSetsState = ignoreSetQueue.last(); - ignoreSetQueue.clear(); - if (tempFinalState || (currentRelease != nullptr)) - { - ignoreSetQueue.enqueue(tempFinalIgnoreSetsState); - } - } + changeStatesQueue(true); } if (currentRelease == nullptr) { - lastAccelerationDistance = 0.0; - currentAccelMulti = 0.0; - currentAccelerationDistance = 0.0; - startingAccelerationDistance = 0.0; - oldAccelMulti = updateOldAccelMulti = 0.0; - accelTravel = 0.0; - accelExtraDurationTime.restart(); - + restartAccelParams(true, true, false); lastMouseDistance = 0.0; currentMouseDistance = 0.0; updateStartingMouseDistance = true; @@ -3974,9 +3444,11 @@ void JoyButton::releaseDeskEvent(bool skipsetchange) JoyButtonSlot *tempslot = nullptr; bool exit = false; + while (slotiter->hasNext() && !exit) { tempslot = slotiter->next(); + if (tempslot->getSlotMode() == JoyButtonSlot::JoyCycle) { currentCycle = tempslot; @@ -4017,12 +3489,43 @@ void JoyButton::releaseDeskEvent(bool skipsetchange) slotiter->toFront(); } - this->currentDistance = nullptr; + m_currentDistance = nullptr; this->currentKeyPress = nullptr; quitEvent = true; } +} + +void JoyButton::changeStatesQueue(bool currentReleased) +{ + bool tempFinalState = false; + + if (!isButtonPressedQueue.isEmpty()) + { + tempFinalState = isButtonPressedQueue.last(); + isButtonPressedQueue.clear(); + + if (currentReleased) { + + if (tempFinalState || (currentRelease != nullptr)) + isButtonPressedQueue.enqueue(tempFinalState); + } else { + if (tempFinalState) isButtonPressedQueue.enqueue(tempFinalState); + } + } + + if (!ignoreSetQueue.isEmpty()) + { + bool tempFinalIgnoreSetsState = ignoreSetQueue.last(); + ignoreSetQueue.clear(); + if (currentReleased) { + if (tempFinalState || (currentRelease != nullptr)) + ignoreSetQueue.enqueue(tempFinalIgnoreSetsState); + } else { + if (tempFinalState) ignoreSetQueue.enqueue(tempFinalIgnoreSetsState); + } + } } /** @@ -4034,13 +3537,7 @@ double JoyButton::getDistanceFromDeadZone() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double distance = 0.0; - if (isButtonPressed) - { - distance = 1.0; - } - - return distance; + return isButtonPressed ? 1.0 : 0.0; } double JoyButton::getAccelerationDistance() @@ -4068,23 +3565,22 @@ double JoyButton::getTotalSlotDistance(JoyButtonSlot *slot) double tempDistance = 0.0; QListIterator iter(*getAssignedSlots()); + while (iter.hasNext()) { JoyButtonSlot *currentSlot = iter.next(); int tempcode = currentSlot->getSlotCode(); JoyButtonSlot::JoySlotInputAction mode = currentSlot->getSlotMode(); + if (mode == JoyButtonSlot::JoyDistance) { tempDistance += tempcode / 100.0; + if (slot == currentSlot) - { - // Current slot found. Go to end of iterator - // so loop will exit iter.toBack(); - } + } - // Reset tempDistance - else if (mode == JoyButtonSlot::JoyCycle) + else if (mode == JoyButtonSlot::JoyCycle) // Reset tempDistance { tempDistance = 0.0; } @@ -4099,9 +3595,11 @@ bool JoyButton::containsDistanceSlots() bool result = false; QListIterator iter(*getAssignedSlots()); + while (iter.hasNext()) { JoyButtonSlot *slot = iter.next(); + if (slot->getSlotMode() == JoyButtonSlot::JoyDistance) { result = true; @@ -4117,9 +3615,11 @@ void JoyButton::clearAssignedSlots(bool signalEmit) qInstallMessageHandler(MessageHandler::myMessageOutput); QListIterator iter(*getAssignedSlots()); + while (iter.hasNext()) { JoyButtonSlot *slot = iter.next(); + if (slot != nullptr) { delete slot; @@ -4128,11 +3628,7 @@ void JoyButton::clearAssignedSlots(bool signalEmit) } getAssignmentsLocal().clear(); - - if (signalEmit) - { - emit slotsChanged(); - } + if (signalEmit) emit slotsChanged(); } void JoyButton::removeAssignedSlot(int index) @@ -4144,6 +3640,7 @@ void JoyButton::removeAssignedSlot(int index) if ((index >= 0) && (index < getAssignedSlots()->size())) { JoyButtonSlot *slot = getAssignedSlots()->takeAt(index); + if (slot != nullptr) { delete slot; @@ -4151,7 +3648,6 @@ void JoyButton::removeAssignedSlot(int index) } tempAssignLocker.unlock(); - buildActiveZoneSummaryString(); emit slotsChanged(); } @@ -4161,62 +3657,18 @@ void JoyButton::clearSlotsEventReset(bool clearSignalEmit) { qInstallMessageHandler(MessageHandler::myMessageOutput); - QWriteLocker tempAssignLocker(&assignmentsLock); - - turboTimer.stop(); - pauseWaitTimer.stop(); - createDeskTimer.stop(); - releaseDeskTimer.stop(); - holdTimer.stop(); - mouseWheelVerticalEventTimer.stop(); - mouseWheelHorizontalEventTimer.stop(); - setChangeTimer.stop(); - keyPressTimer.stop(); - delayTimer.stop(); - activeZoneTimer.stop(); - -#ifdef Q_OS_WIN - repeatHelper.getRepeatTimer()->stop(); -#endif - - if (slotiter != nullptr) - { - delete slotiter; - slotiter = nullptr; - } + QWriteLocker tempAssignLocker(&assignmentsLock); + resetSlotsProp(); + stopTimers(true, true, false); releaseActiveSlots(); clearAssignedSlots(clearSignalEmit); - - isButtonPressedQueue.clear(); - ignoreSetQueue.clear(); - mouseEventQueue.clear(); - mouseWheelVerticalEventQueue.clear(); - mouseWheelHorizontalEventQueue.clear(); + clearQueues(); #ifndef QT_DEBUG_NO_OUTPUT qDebug() << "all current slots and previous slots ale cleared"; #endif - currentCycle = nullptr; - previousCycle = nullptr; - currentPause = nullptr; - currentHold = nullptr; - currentDistance = nullptr; - currentRawValue = 0; - currentMouseEvent = nullptr; - currentRelease = nullptr; - currentWheelVerticalEvent = nullptr; - currentWheelHorizontalEvent = nullptr; - currentKeyPress = nullptr; - currentDelay = nullptr; - - isKeyPressed = isButtonPressed = false; - - activeZoneTimer.start(); - quitEvent = true; - - } void JoyButton::eventReset() @@ -4225,56 +3677,15 @@ void JoyButton::eventReset() QWriteLocker tempAssignLocker(&assignmentsLock); - turboTimer.stop(); - pauseWaitTimer.stop(); - createDeskTimer.stop(); - releaseDeskTimer.stop(); - holdTimer.stop(); - mouseWheelVerticalEventTimer.stop(); - mouseWheelHorizontalEventTimer.stop(); - setChangeTimer.stop(); - keyPressTimer.stop(); - delayTimer.stop(); - activeZoneTimer.stop(); - -#ifdef Q_OS_WIN - repeatHelper.getRepeatTimer()->stop(); -#endif - - if (slotiter != nullptr) - { - delete slotiter; - slotiter = nullptr; - } - - isButtonPressedQueue.clear(); - ignoreSetQueue.clear(); - mouseEventQueue.clear(); - mouseWheelVerticalEventQueue.clear(); - mouseWheelHorizontalEventQueue.clear(); + resetSlotsProp(); + stopTimers(false, true, false); + clearQueues(); #ifndef QT_DEBUG_NO_OUTPUT qDebug() << "all current slots and previous slots ale cleared"; #endif - currentCycle = nullptr; - previousCycle = nullptr; - currentPause = nullptr; - currentHold = nullptr; - currentDistance = nullptr; - currentRawValue = 0; - currentMouseEvent = nullptr; - currentRelease = nullptr; - currentWheelVerticalEvent = nullptr; - currentWheelHorizontalEvent = nullptr; - currentKeyPress = nullptr; - currentDelay = nullptr; - - isKeyPressed = isButtonPressed = false; - releaseActiveSlots(); - - quitEvent = true; } void JoyButton::releaseActiveSlots() @@ -4285,38 +3696,24 @@ void JoyButton::releaseActiveSlots() { QWriteLocker tempLocker(&activeZoneLock); - #ifdef Q_OS_WIN - bool changeRepeatState = false; - #endif - QListIterator iter(getActiveSlots()); + bool changeRepeatState = false; + QListIterator iter(getActiveSlots()); iter.toBack(); + while (iter.hasPrevious()) { JoyButtonSlot *slot = iter.previous(); int tempcode = slot->getSlotCode(); + int references = 0; JoyButtonSlot::JoySlotInputAction mode = slot->getSlotMode(); if (mode == JoyButtonSlot::JoyKeyboard) { - int referencecount = activeKeys.value(tempcode, 1) - 1; - if (referencecount <= 0) - { - sendevent(slot, false); - activeKeys.remove(tempcode); - #ifdef Q_OS_WIN - changeRepeatState = true; - #endif - } - else - { - activeKeys.insert(tempcode, referencecount); - } + countActiveSlots(tempcode, references, slot, GlobalVariables::JoyButton::activeKeys, changeRepeatState, true); - if ((lastActiveKey == slot) && (referencecount <= 0)) - { + if ((lastActiveKey == slot) && (references <= 0)) lastActiveKey = nullptr; - } } else if (mode == JoyButtonSlot::JoyMouseButton) { @@ -4325,16 +3722,7 @@ void JoyButton::releaseActiveSlots() (tempcode != static_cast(JoyButtonSlot::MouseWheelLeft)) && (tempcode != static_cast(JoyButtonSlot::MouseWheelRight))) { - int referencecount = (activeMouseButtons.value(tempcode, 1) - 1); - if (referencecount <= 0) - { - sendevent(slot, false); - activeMouseButtons.remove(tempcode); - } - else - { - activeMouseButtons.insert(tempcode, referencecount); - } + countActiveSlots(tempcode, references, slot, GlobalVariables::JoyButton::activeMouseButtons, changeRepeatState); } else if ((tempcode == static_cast(JoyButtonSlot::MouseWheelUp)) || (tempcode == static_cast(JoyButtonSlot::MouseWheelDown))) @@ -4353,52 +3741,13 @@ void JoyButton::releaseActiveSlots() else if (mode == JoyButtonSlot::JoyMouseMovement) { JoyMouseMovementMode mousemode = getMouseMode(); + if (mousemode == MouseCursor) { - QListIterator iterX(cursorXSpeeds); - int i = cursorXSpeeds.length(); - QList indexesToRemove; - while (iterX.hasNext()) - { - mouseCursorInfo info = iterX.next(); - if (info.slot == slot) - { - indexesToRemove.append(i); - } - - i++; - } - - QListIterator removeXIter(indexesToRemove); - while (removeXIter.hasPrevious()) - { - int index = removeXIter.previous(); - cursorXSpeeds.removeAt(index); - } - indexesToRemove.clear(); - - i = cursorYSpeeds.length(); - - QListIterator iterY(cursorYSpeeds); - while (iterY.hasNext()) - { - mouseCursorInfo info = iterY.next(); - if (info.slot == slot) - { - indexesToRemove.append(i); - } - i++; - } - - QListIterator removeYIter(indexesToRemove); - while (removeYIter.hasPrevious()) - { - int index = removeYIter.previous(); - cursorYSpeeds.removeAt(index); - } - indexesToRemove.clear(); + releaseMoveSlots(cursorXSpeeds, slot, indexesToRemove); + releaseMoveSlots(cursorYSpeeds, slot, indexesToRemove); slot->getEasingTime()->restart(); slot->setEasingStatus(false); } @@ -4410,84 +3759,13 @@ void JoyButton::releaseActiveSlots() tempcode == static_cast(JoyButtonSlot::MouseDown)) ? 0.0 : -2.0; double springDeadCircleX = 0.0; - if (getSpringDeadCircleMultiplier() > 0) - { - if (tempcode == static_cast(JoyButtonSlot::MouseLeft)) - { - double temp = getCurrentSpringDeadCircle(); - if (temp > getLastMouseDistanceFromDeadZone()) - { - springDeadCircleX = -getLastMouseDistanceFromDeadZone(); - } - else - { - springDeadCircleX = -temp; - } - } - else if (tempcode == static_cast(JoyButtonSlot::MouseRight)) - { - double temp = getCurrentSpringDeadCircle(); - if (temp > getLastMouseDistanceFromDeadZone()) - { - springDeadCircleX = getLastMouseDistanceFromDeadZone(); - } - else - { - springDeadCircleX = temp; - } - } - } - double springDeadCircleY = 0.0; - if (getSpringDeadCircleMultiplier() > 0) - { - if (tempcode == static_cast(JoyButtonSlot::MouseUp)) - { - double temp = getCurrentSpringDeadCircle(); - if (temp > getLastMouseDistanceFromDeadZone()) - { - springDeadCircleY = -getLastMouseDistanceFromDeadZone(); - } - else - { - springDeadCircleY = -temp; - } - } - else if (tempcode == static_cast(JoyButtonSlot::MouseDown)) - { - double temp = getCurrentSpringDeadCircle(); - if (temp > getLastMouseDistanceFromDeadZone()) - { - springDeadCircleY = getLastMouseDistanceFromDeadZone(); - } - else - { - springDeadCircleY = temp; - } - } - } - PadderCommon::springModeInfo infoX; - infoX.displacementX = mouse1; - infoX.displacementY = -2.0; - infoX.springDeadX = springDeadCircleX; - infoX.springDeadY = springDeadCircleY; - infoX.width = springWidth; - infoX.height = springHeight; - infoX.relative = relativeSpring; - infoX.screen = springModeScreen; - springXSpeeds.append(infoX); - - PadderCommon::springModeInfo infoY; - infoY.displacementX = -2.0; - infoY.displacementY = mouse2; - infoY.springDeadX = springDeadCircleX; - infoY.springDeadY = springDeadCircleY; - infoY.width = springWidth; - infoY.height = springHeight; - infoY.relative = relativeSpring; - infoY.screen = springModeScreen; - springYSpeeds.append(infoY); + checkSpringDeadCircle(tempcode, springDeadCircleX, JoyButtonSlot::MouseLeft, JoyButtonSlot::MouseRight); + checkSpringDeadCircle(tempcode, springDeadCircleY, JoyButtonSlot::MouseUp, JoyButtonSlot::MouseDown); + updateMouseProperties(mouse1, springDeadCircleX, springWidth, springHeight, relativeSpring, GlobalVariables::JoyButton::springModeScreen, springXSpeeds, 'n', -2.0, springDeadCircleY); + updateMouseProperties(-2.0, springDeadCircleX, springWidth, springHeight, relativeSpring, GlobalVariables::JoyButton::springModeScreen, springYSpeeds, 'n', mouse2, springDeadCircleY); + } mouseEventQueue.removeAll(slot); @@ -4497,6 +3775,7 @@ void JoyButton::releaseActiveSlots() else if (mode == JoyButtonSlot::JoyMouseSpeedMod) { int queueLength = mouseSpeedModList.length(); + if (!mouseSpeedModList.isEmpty()) { mouseSpeedModList.removeAll(slot); @@ -4504,9 +3783,7 @@ void JoyButton::releaseActiveSlots() } if (queueLength <= 0) - { - mouseSpeedModifier = DEFAULTMOUSESPEEDMOD; - } + GlobalVariables::JoyButton::mouseSpeedModifier = GlobalVariables::JoyButton::DEFAULTMOUSESPEEDMOD; } else if (mode == JoyButtonSlot::JoySetChange) { @@ -4516,12 +3793,10 @@ void JoyButton::releaseActiveSlots() } getActiveSlotsLocal().clear(); - currentMouseEvent = nullptr; + if (!mouseEventQueue.isEmpty()) - { mouseEventQueue.clear(); - } pendingMouseButtons.removeAll(this); currentWheelVerticalEvent = nullptr; @@ -4549,8 +3824,8 @@ void JoyButton::releaseActiveSlots() if ((pendingMouseButtons.length() == 0) && (cursorXSpeeds.length() == 0) && (springXSpeeds.length() == 0)) { - cursorRemainderX = 0; - cursorRemainderY = 0; + GlobalVariables::JoyButton::cursorRemainderX = 0; + GlobalVariables::JoyButton::cursorRemainderY = 0; } activeZoneTimer.start(); @@ -4559,7 +3834,7 @@ void JoyButton::releaseActiveSlots() BaseEventHandler *handler = EventHandlerFactory::getInstance()->handler(); if (handler && (handler->getIdentifier() == "sendinput") && - changeRepeatState && lastActiveKey && !useTurbo) + changeRepeatState && lastActiveKey && !m_useTurbo) { InputDevice *device = getParentSet()->getInputDevice(); if (device->isKeyRepeatEnabled()) @@ -4582,16 +3857,82 @@ void JoyButton::releaseActiveSlots() } } +void JoyButton::countActiveSlots(int tempcode, int& references, JoyButtonSlot* slot, QHash& activeSlotsHash, bool& changeRepeatState, bool activeSlotHashWindows) +{ + changeRepeatState = false; + references = activeSlotsHash.value(tempcode, 1) - 1; + + if (references <= 0) + { + sendevent(slot, false); + activeSlotsHash.remove(tempcode); + + // only if activeKeys + #ifdef Q_OS_WIN + if (activeSlotHashWindows) changeRepeatState = true; + #endif + } + else + { + activeSlotsHash.insert(tempcode, references); + } +} + +void JoyButton::setSpringDeadCircle(double& springDeadCircle, int mouseDirection) +{ + if (getCurrentSpringDeadCircle() > getLastMouseDistanceFromDeadZone()) + springDeadCircle = (mouseDirection == JoyButtonSlot::MouseLeft || mouseDirection == JoyButtonSlot::MouseUp) ? -getLastMouseDistanceFromDeadZone() : getLastMouseDistanceFromDeadZone(); + else + springDeadCircle = (mouseDirection == JoyButtonSlot::MouseLeft || mouseDirection == JoyButtonSlot::MouseUp) ? -getCurrentSpringDeadCircle() : getCurrentSpringDeadCircle(); +} + +void JoyButton::checkSpringDeadCircle(int tempcode, double& springDeadCircle, int mouseSlot1, int mouseSlot2) +{ + if (getSpringDeadCircleMultiplier() > 0) + { + if (tempcode == mouseSlot1) + { + setSpringDeadCircle(springDeadCircle, mouseSlot1); + } + else if (tempcode == mouseSlot2) + { + setSpringDeadCircle(springDeadCircle, mouseSlot2); + } + } +} + +void JoyButton::releaseMoveSlots(QList& cursorSpeeds, JoyButtonSlot *slot, QList& indexesToRemove) +{ + QListIterator iter(cursorSpeeds); + int i = cursorSpeeds.length(); + + while (iter.hasNext()) + { + mouseCursorInfo info = iter.next(); + if (info.slot == slot) indexesToRemove.append(i); + i++; + } + + QListIterator removeIter(indexesToRemove); + while (removeIter.hasPrevious()) + { + int index = removeIter.previous(); + cursorSpeeds.removeAt(index); + } + + indexesToRemove.clear(); +} + bool JoyButton::containsReleaseSlots() { qInstallMessageHandler(MessageHandler::myMessageOutput); bool result = false; QListIterator iter(*getAssignedSlots()); + while (iter.hasNext()) { - JoyButtonSlot *slot = iter.next(); - if (slot->getSlotMode() == JoyButtonSlot::JoyRelease) + if (iter.next()->getSlotMode() == JoyButtonSlot::JoyRelease) { result = true; iter.toBack(); @@ -4612,10 +3953,9 @@ void JoyButton::releaseSlotEvent() if (containsReleaseSlots()) { QListIterator iter(*getAssignedSlots()); + if (previousCycle != nullptr) - { iter.findNext(previousCycle); - } int tempElapsed = 0; @@ -4624,19 +3964,13 @@ void JoyButton::releaseSlotEvent() JoyButtonSlot *currentSlot = iter.next(); int tempcode = currentSlot->getSlotCode(); JoyButtonSlot::JoySlotInputAction mode = currentSlot->getSlotMode(); + if (mode == JoyButtonSlot::JoyRelease) { - - tempElapsed += tempcode; - if (tempElapsed <= timeElapsed) - { - temp = currentSlot; - } - else if (tempElapsed > timeElapsed) - { - iter.toBack(); - } + + if (tempElapsed <= timeElapsed) temp = currentSlot; + else iter.toBack(); } else if (mode == JoyButtonSlot::JoyCycle) { @@ -4650,8 +3984,8 @@ void JoyButton::releaseSlotEvent() slotiter->toFront(); slotiter->findNext(temp); currentRelease = temp; - activateSlots(); + if (!keyPressTimer.isActive() && !pauseWaitTimer.isActive()) { releaseActiveSlots(); @@ -4662,126 +3996,39 @@ void JoyButton::releaseSlotEvent() // a hold timer that could be activated // during a release event is stopped. holdTimer.stop(); + if (currentHold != nullptr) - { currentHold = nullptr; - } - } - } -} - - - -void JoyButton::findReleaseEventEnd() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); - - bool found = false; - while (!found && slotiter->hasNext()) - { - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "slotiter has next element"; - #endif - - JoyButtonSlot *currentSlot = slotiter->next(); - JoyButtonSlot::JoySlotInputAction mode = currentSlot->getSlotMode(); - - if (mode == JoyButtonSlot::JoyRelease) - { - found = true; - } - else if (mode == JoyButtonSlot::JoyCycle) - { - found = true; - } - else if (mode == JoyButtonSlot::JoyHold) - { - found = true; } } - - if (found && slotiter->hasPrevious()) - { - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "There has been found end release. Back to previous slotiter element"; - #endif - - slotiter->previous(); - } } -void JoyButton::findReleaseEventIterEnd(QListIterator *tempiter) +void JoyButton::findJoySlotsEnd(QListIterator *slotiter) { - qInstallMessageHandler(MessageHandler::myMessageOutput); + if (slotiter != nullptr) { - if (tempiter) - { bool found = false; - - while (!found && tempiter->hasNext()) - { - JoyButtonSlot *currentSlot = tempiter->next(); - JoyButtonSlot::JoySlotInputAction mode = currentSlot->getSlotMode(); - - if (mode == JoyButtonSlot::JoyRelease) - { - found = true; - } - else if (mode == JoyButtonSlot::JoyCycle) - { - found = true; - } - else if (mode == JoyButtonSlot::JoyHold) - { - found = true; - } - } - - if (found && tempiter->hasPrevious()) + while (!found && slotiter->hasNext()) { - tempiter->previous(); - } - } -} - -void JoyButton::findHoldEventEnd() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); - - bool found = false; + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "slotiter has next element"; + #endif - while (!found && slotiter->hasNext()) - { - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "There is next element in slotiter"; - #endif + JoyButtonSlot::JoySlotInputAction mode = slotiter->next()->getSlotMode(); - JoyButtonSlot *currentSlot = slotiter->next(); - JoyButtonSlot::JoySlotInputAction mode = currentSlot->getSlotMode(); + switch(mode) + { + case JoyButtonSlot::JoyRelease: + case JoyButtonSlot::JoyCycle: + case JoyButtonSlot::JoyHold: - if (mode == JoyButtonSlot::JoyRelease) - { - found = true; - } - else if (mode == JoyButtonSlot::JoyCycle) - { - found = true; - } - else if (mode == JoyButtonSlot::JoyHold) - { - found = true; + found = true; + break; + } } - } - - if (found && slotiter->hasPrevious()) - { - slotiter->previous(); - - } else { - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "There wasn't end for hold"; - #endif + if (found && slotiter->hasPrevious()) + slotiter->previous(); } } @@ -4790,7 +4037,7 @@ void JoyButton::setVDPad(VDPad *vdpad) qInstallMessageHandler(MessageHandler::myMessageOutput); joyEvent(false, true); - this->vdpad = vdpad; + m_vdpad = vdpad; emit propertyUpdated(); } @@ -4798,21 +4045,21 @@ bool JoyButton::isPartVDPad() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return (this->vdpad != nullptr); + return (m_vdpad != nullptr); } VDPad* JoyButton::getVDPad() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->vdpad; + return m_vdpad; } void JoyButton::removeVDPad() { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->vdpad = nullptr; + m_vdpad = nullptr; emit propertyUpdated(); } @@ -4825,36 +4072,37 @@ bool JoyButton::isDefault() qInstallMessageHandler(MessageHandler::myMessageOutput); bool value = true; - value = value && (toggle == DEFAULTTOGGLE); - value = value && (turboInterval == DEFAULTTURBOINTERVAL); + + value = value && (m_toggle == GlobalVariables::JoyButton::DEFAULTTOGGLE); + value = value && (turboInterval == GlobalVariables::JoyButton::DEFAULTTURBOINTERVAL); value = value && (currentTurboMode == NormalTurbo); - value = value && (useTurbo == DEFAULTUSETURBO); - value = value && (mouseSpeedX == DEFAULTMOUSESPEEDX); - value = value && (mouseSpeedY == DEFAULTMOUSESPEEDY); - value = value && (setSelection == DEFAULTSETSELECTION); + value = value && (m_useTurbo == GlobalVariables::JoyButton::DEFAULTUSETURBO); + value = value && (mouseSpeedX == GlobalVariables::JoyButton::DEFAULTMOUSESPEEDX); + value = value && (mouseSpeedY == GlobalVariables::JoyButton::DEFAULTMOUSESPEEDY); + value = value && (setSelection == GlobalVariables::JoyButton::DEFAULTSETSELECTION); value = value && (setSelectionCondition == DEFAULTSETCONDITION); value = value && (getAssignedSlots()->isEmpty()); value = value && (mouseMode == DEFAULTMOUSEMODE); value = value && (mouseCurve == DEFAULTMOUSECURVE); - value = value && (springWidth == DEFAULTSPRINGWIDTH); - value = value && (springHeight == DEFAULTSPRINGHEIGHT); - value = value && (qFuzzyCompare(sensitivity, DEFAULTSENSITIVITY)); + value = value && (springWidth == GlobalVariables::JoyButton::DEFAULTSPRINGWIDTH); + value = value && (springHeight == GlobalVariables::JoyButton::DEFAULTSPRINGHEIGHT); + value = value && qFuzzyCompare(sensitivity, GlobalVariables::JoyButton::DEFAULTSENSITIVITY); value = value && (actionName.isEmpty()); - value = value && (wheelSpeedX == DEFAULTWHEELX); - value = value && (wheelSpeedY == DEFAULTWHEELY); - value = value && (cycleResetActive == DEFAULTCYCLERESETACTIVE); - value = value && (cycleResetInterval == DEFAULTCYCLERESET); - value = value && (relativeSpring == DEFAULTRELATIVESPRING); - value = value && (qFuzzyCompare(easingDuration, DEFAULTEASINGDURATION)); - - value = value && (extraAccelerationEnabled == false); - value = value && (qFuzzyCompare(extraAccelerationMultiplier, DEFAULTEXTRACCELVALUE)); - value = value && (qFuzzyCompare(minMouseDistanceAccelThreshold, DEFAULTMINACCELTHRESHOLD)); - value = value && (qFuzzyCompare(maxMouseDistanceAccelThreshold, DEFAULTMAXACCELTHRESHOLD)); - value = value && (qFuzzyCompare(startAccelMultiplier, DEFAULTSTARTACCELMULTIPLIER)); - value = value && (qFuzzyCompare(accelDuration, DEFAULTACCELEASINGDURATION)); - value = value && (springDeadCircleMultiplier == DEFAULTSPRINGRELEASERADIUS); + value = value && (wheelSpeedX == GlobalVariables::JoyButton::DEFAULTWHEELX); + value = value && (wheelSpeedY == GlobalVariables::JoyButton::DEFAULTWHEELY); + value = value && (cycleResetActive == GlobalVariables::JoyButton::DEFAULTCYCLERESETACTIVE); + value = value && (cycleResetInterval == GlobalVariables::JoyButton::DEFAULTCYCLERESET); + value = value && (relativeSpring == GlobalVariables::JoyButton::DEFAULTRELATIVESPRING); + value = value && qFuzzyCompare(m_easingDuration, GlobalVariables::JoyButton::DEFAULTEASINGDURATION); + value = value && !extraAccelerationEnabled; + value = value && qFuzzyCompare(extraAccelerationMultiplier, GlobalVariables::JoyButton::DEFAULTEXTRACCELVALUE); + value = value && qFuzzyCompare(minMouseDistanceAccelThreshold, GlobalVariables::JoyButton::DEFAULTMINACCELTHRESHOLD); + value = value && qFuzzyCompare(maxMouseDistanceAccelThreshold, GlobalVariables::JoyButton::DEFAULTMAXACCELTHRESHOLD); + value = value && qFuzzyCompare(startAccelMultiplier, GlobalVariables::JoyButton::DEFAULTSTARTACCELMULTIPLIER); + value = value && qFuzzyCompare(accelDuration, GlobalVariables::JoyButton::DEFAULTACCELEASINGDURATION); + value = value && (springDeadCircleMultiplier == GlobalVariables::JoyButton::DEFAULTSPRINGRELEASERADIUS); value = value && (extraAccelCurve == DEFAULTEXTRAACCELCURVE); + return value; } @@ -5012,24 +4260,14 @@ QString JoyButton::getButtonName() return buttonName; } -void JoyButton::setWheelSpeedX(int speed) -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); - - if ((speed >= 1) && (speed <= 100)) - { - wheelSpeedX = speed; - emit propertyUpdated(); - } -} - -void JoyButton::setWheelSpeedY(int speed) +void JoyButton::setWheelSpeed(int speed, QChar ax) { qInstallMessageHandler(MessageHandler::myMessageOutput); if ((speed >= 1) && (speed <= 100)) { - wheelSpeedY = speed; + if (ax == 'X') wheelSpeedX = speed; + else if (ax == 'Y') wheelSpeedY = speed; emit propertyUpdated(); } } @@ -5066,30 +4304,23 @@ QString JoyButton::getDefaultButtonName() * @brief Take cursor mouse information provided by all buttons and * send a cursor mode mouse event to the display server. */ -void JoyButton::moveMouseCursor(int &movedX, int &movedY, int &movedElapsed) +void JoyButton::moveMouseCursor(int &movedX, int &movedY, int &movedElapsed, QList* mouseHistoryX, QList* mouseHistoryY, QTime* testOldMouseTime, QTimer* staticMouseEventTimer, int mouseRefreshRate, int mouseHistorySize, QList* cursorXSpeeds, QList* cursorYSpeeds, double& cursorRemainderX, double& cursorRemainderY, double weightModifier, int idleMouseRefrRate, QList* pendingMouseButtons) { // qInstallMessageHandler(MessageHandler::myMessageOutput); movedX = 0; movedY = 0; - int elapsedTime = testOldMouseTime.elapsed(); - + int elapsedTime = testOldMouseTime->elapsed(); movedElapsed = elapsedTime; - if (staticMouseEventTimer.interval() < mouseRefreshRate) - { - elapsedTime = mouseRefreshRate + (elapsedTime - staticMouseEventTimer.interval()); - movedElapsed = elapsedTime; - } - if (mouseHistoryX.size() >= mouseHistorySize) - { - mouseHistoryX.removeLast(); - } + if (staticMouseEventTimer->interval() < mouseRefreshRate) + movedElapsed = mouseRefreshRate + (elapsedTime - staticMouseEventTimer->interval()); - if (mouseHistoryY.size() >= mouseHistorySize) - { - mouseHistoryY.removeLast(); - } + if (mouseHistoryX->size() >= mouseHistorySize) + mouseHistoryX->removeLast(); + + if (mouseHistoryY->size() >= mouseHistorySize) + mouseHistoryY->removeLast(); /* * Combine all mouse events to find the distance to move the mouse @@ -5097,28 +4328,20 @@ void JoyButton::moveMouseCursor(int &movedX, int &movedY, int &movedElapsed) * The mouse smoothing technique used is an interpretation of the method * outlined at http://flipcode.net/archives/Smooth_Mouse_Filtering.shtml. */ - if ((cursorXSpeeds.length() == cursorYSpeeds.length()) && - (cursorXSpeeds.length() > 0)) + if ((cursorXSpeeds->length() == cursorYSpeeds->length()) && + (cursorXSpeeds->length() > 0)) { - int queueLength = cursorXSpeeds.length(); + int queueLength = cursorXSpeeds->length(); double finalx = 0.0; double finaly = 0.0; - for (int i=0; i < queueLength; i++) + for (int i = 0; i < queueLength; i++) { - mouseCursorInfo infoX = cursorXSpeeds.takeFirst(); - mouseCursorInfo infoY = cursorYSpeeds.takeFirst(); - if (qFuzzyCompare(infoX.code, 0)) - { - finalx = (infoX.code < 0) ? qMin(infoX.code, finalx) : - qMax(infoX.code, finalx); - } + mouseCursorInfo infoX = cursorXSpeeds->takeFirst(); + mouseCursorInfo infoY = cursorYSpeeds->takeFirst(); - if (qFuzzyCompare(infoY.code, 0)) - { - finaly = (infoY.code < 0) ? qMin(infoY.code, finaly) : - qMax(infoY.code, finaly); - } + distanceForMovingAx(finalx, infoX); + distanceForMovingAx(finaly, infoY); infoX.slot->getMouseInterval()->restart(); infoY.slot->getMouseInterval()->restart(); @@ -5126,133 +4349,60 @@ void JoyButton::moveMouseCursor(int &movedX, int &movedY, int &movedElapsed) // Only apply remainder if both current displacement and remainder // follow the same direction. - if ((cursorRemainderX >= 0) == (finalx >= 0)) - { - finalx += cursorRemainderX; - } + if ((cursorRemainderX >= 0) == (finalx >= 0)) finalx += cursorRemainderX; // Cap maximum relative mouse movement. - if (abs(finalx) > 127) - { - finalx = (finalx < 0) ? -127 : 127; - } + if (abs(finalx) > 127) finalx = (finalx < 0) ? -127 : 127; - mouseHistoryX.prepend(finalx); + mouseHistoryX->prepend(finalx); // Only apply remainder if both current displacement and remainder // follow the same direction. - if ((cursorRemainderY >= 0) == (finaly >= 0)) - { - finaly += cursorRemainderY; - } + if ((cursorRemainderY >= 0) == (finaly >= 0)) finaly += cursorRemainderY; // Cap maximum relative mouse movement. - if (abs(finaly) > 127) - { - finaly = (finaly < 0) ? -127 : 127; - } + if (abs(finaly) > 127) finaly = (finaly < 0) ? -127 : 127; - mouseHistoryY.prepend(finaly); + mouseHistoryY->prepend(finaly); cursorRemainderX = 0; cursorRemainderY = 0; - double adjustedX = 0; double adjustedY = 0; - QListIterator iterX(mouseHistoryX); - double currentWeight = 1.0; - double weightModifier = JoyButton::weightModifier; - double finalWeight = 0.0; - - while (iterX.hasNext()) - { - double temp = iterX.next(); - adjustedX += temp * currentWeight; - finalWeight += currentWeight; - currentWeight *= weightModifier; - } - - if (fabs(adjustedX) > 0) - { - adjustedX = adjustedX / finalWeight; - - if (adjustedX > 0) - { - double oldX = adjustedX; - adjustedX = floor(adjustedX); - cursorRemainderX = oldX - adjustedX; - } - else - { - double oldX = adjustedX; - adjustedX = static_cast(ceil(adjustedX)); - cursorRemainderX = oldX - adjustedX; - } - - } - - QListIterator iterY(mouseHistoryY); - currentWeight = 1.0; - finalWeight = 0.0; - - while (iterY.hasNext()) - { - double temp = iterY.next(); - adjustedY += temp * currentWeight; - finalWeight += currentWeight; - currentWeight *= weightModifier; - } - - if (fabs(adjustedY) > 0) - { - adjustedY = adjustedY / finalWeight; - if (adjustedY > 0) - { - double oldY = adjustedY; - adjustedY = floor(adjustedY); - cursorRemainderY = oldY - adjustedY; - } - else - { - double oldY = adjustedY; - adjustedY = ceil(adjustedY); - cursorRemainderY = oldY - adjustedY; - } - } + adjustAxForCursor(mouseHistoryX, adjustedX, cursorRemainderX, weightModifier); + adjustAxForCursor(mouseHistoryY, adjustedY, cursorRemainderY, weightModifier); // This check is more of a precaution than anything. No need to cause // a sync to happen when not needed. - if ((qFuzzyCompare(adjustedX, 0)) || (qFuzzyCompare(adjustedY, 0))) - { - sendevent(static_cast(adjustedX), static_cast(adjustedY)); - } + if (!qFuzzyIsNull(adjustedX) || !qFuzzyIsNull(adjustedY)) + sendevent(adjustedX, adjustedY); - movedX = static_cast(adjustedX); - movedY = static_cast(adjustedY); + movedX = adjustedX; + movedY = adjustedY; } else { - mouseHistoryX.prepend(0); - mouseHistoryY.prepend(0); + mouseHistoryX->prepend(0); + mouseHistoryY->prepend(0); } // Check if mouse event timer should use idle time. - if (pendingMouseButtons.length() == 0) + if (pendingMouseButtons->length() == 0) { - if (staticMouseEventTimer.interval() != IDLEMOUSEREFRESHRATE) + if (staticMouseEventTimer->interval() != idleMouseRefrRate) { - staticMouseEventTimer.start(IDLEMOUSEREFRESHRATE); + staticMouseEventTimer->start(idleMouseRefrRate); // Clear current mouse history - mouseHistoryX.clear(); - mouseHistoryY.clear(); + mouseHistoryX->clear(); + mouseHistoryY->clear(); // Fill history with zeroes. - for (int i=0; i < mouseHistorySize; i++) + for (int i = 0; i < mouseHistorySize; i++) { - mouseHistoryX.append(0); - mouseHistoryY.append(0); + mouseHistoryX->append(0); + mouseHistoryY->append(0); } } @@ -5261,29 +4411,61 @@ void JoyButton::moveMouseCursor(int &movedX, int &movedY, int &movedElapsed) } else { - if (staticMouseEventTimer.interval() != mouseRefreshRate) - { - // Restore intended QTimer interval. - staticMouseEventTimer.start(mouseRefreshRate); - } + if (staticMouseEventTimer->interval() != mouseRefreshRate) + staticMouseEventTimer->start(mouseRefreshRate); // Restore intended QTimer interval. + } + + cursorXSpeeds->clear(); + cursorYSpeeds->clear(); +} + +void JoyButton::distanceForMovingAx(double& finalAx, mouseCursorInfo infoAx) +{ + if (!qFuzzyIsNull(infoAx.code)) + { + finalAx = (infoAx.code < 0) ? qMin(infoAx.code, finalAx) : + qMax(infoAx.code, finalAx); + } +} + + +void JoyButton::adjustAxForCursor(QList* mouseHistoryList, double& adjustedAx, double& cursorRemainder, double weightModifier) +{ + double currentWeight = 1.0; + double finalWeight = 0.0; + + QListIterator mouseHist(*mouseHistoryList); + while (mouseHist.hasNext()) + { + adjustedAx += mouseHist.next() * currentWeight; + finalWeight += currentWeight; + currentWeight *= weightModifier; } + if (fabs(adjustedAx) > 0) + { + adjustedAx = adjustedAx / finalWeight; + double oldAx = adjustedAx; + + if (adjustedAx > 0) adjustedAx = floor(adjustedAx); + else adjustedAx = ceil(adjustedAx); - cursorXSpeeds.clear(); - cursorYSpeeds.clear(); + cursorRemainder = oldAx - adjustedAx; + } } /** * @brief Take spring mouse information provided by all buttons and * send a spring mode mouse event to the display server. */ -void JoyButton::moveSpringMouse(int &movedX, int &movedY, bool &hasMoved) +void JoyButton::moveSpringMouse(int &movedX, int &movedY, bool &hasMoved, int springModeScreen, QList* springXSpeeds, QList* springYSpeeds, QList* pendingMouseButtons, int mouseRefreshRate, int idleMouseRefrRate, QTimer* staticMouseEventTimer) { qInstallMessageHandler(MessageHandler::myMessageOutput); PadderCommon::springModeInfo fullSpring = { -2.0, -2.0, 0, 0, false, springModeScreen, 0.0, 0.0 }; + PadderCommon::springModeInfo relativeSpring = { -2.0, -2.0, 0, 0, false, springModeScreen, 0.0, 0.0 }; @@ -5292,37 +4474,34 @@ void JoyButton::moveSpringMouse(int &movedX, int &movedY, bool &hasMoved) int realMouseY = movedY = 0; hasMoved = false; - if ((springXSpeeds.length() == springYSpeeds.length()) && - (springXSpeeds.length() > 0)) + if ((springXSpeeds->length() == springYSpeeds->length()) && + (springXSpeeds->length() > 0)) { - int queueLength = springXSpeeds.length(); bool complete = false; - for (int i=queueLength-1; i >= 0 && !complete; i--) + + for (int i = (springXSpeeds->length() - 1); (i >= 0) && !complete; i--) { + double tempx = -2.0; double tempy = -2.0; - double tempSpringDeadX = 0.0; double tempSpringDeadY = 0.0; PadderCommon::springModeInfo infoX; PadderCommon::springModeInfo infoY; - infoX = springXSpeeds.takeLast(); - infoY = springYSpeeds.takeLast(); + infoX = springXSpeeds->takeLast(); + infoY = springYSpeeds->takeLast(); tempx = infoX.displacementX; tempy = infoY.displacementY; - tempSpringDeadX = infoX.springDeadX; tempSpringDeadY = infoY.springDeadY; if (infoX.relative) { if (qFuzzyCompare(relativeSpring.displacementX, -2.0)) - { relativeSpring.displacementX = tempx; - } relativeSpring.relative = true; @@ -5333,14 +4512,10 @@ void JoyButton::moveSpringMouse(int &movedX, int &movedY, bool &hasMoved) else { if (qFuzzyCompare(fullSpring.displacementX, -2.0)) - { fullSpring.displacementX = tempx; - } if (fullSpring.springDeadX == 0.0) - { fullSpring.springDeadX = tempSpringDeadX; - } // Use largest found width for spring // mode dimensions. @@ -5350,9 +4525,7 @@ void JoyButton::moveSpringMouse(int &movedX, int &movedY, bool &hasMoved) if (infoY.relative) { if (qFuzzyCompare(relativeSpring.displacementY, -2.0)) - { relativeSpring.displacementY = tempy; - } relativeSpring.relative = true; @@ -5363,22 +4536,18 @@ void JoyButton::moveSpringMouse(int &movedX, int &movedY, bool &hasMoved) else { if (qFuzzyCompare(fullSpring.displacementY, -2.0)) - { fullSpring.displacementY = tempy; - } if (fullSpring.springDeadY == 0.0) - { fullSpring.springDeadY = tempSpringDeadY; - } // Use largest found height for spring // mode dimensions. fullSpring.height = qMax(infoX.height, fullSpring.height); } - if (((qFuzzyCompare(relativeSpring.displacementX, -2.0)) && (qFuzzyCompare(relativeSpring.displacementY, -2.0))) && - ((qFuzzyCompare(fullSpring.displacementX, -2.0)) && (qFuzzyCompare(fullSpring.displacementY, -2.0)))) + if ((!qFuzzyCompare(relativeSpring.displacementX, -2.0) && !qFuzzyCompare(relativeSpring.displacementY, -2.0)) && + (!qFuzzyCompare(fullSpring.displacementX, -2.0) && !qFuzzyCompare(fullSpring.displacementY, -2.0))) { complete = true; } @@ -5398,17 +4567,13 @@ void JoyButton::moveSpringMouse(int &movedX, int &movedY, bool &hasMoved) } else { - if (!hasFutureSpringEvents()) + if (!hasFutureSpringEvents(JoyButton::getPendingMouseButtons())) { if (fullSpring.springDeadX != 0.0) - { fullSpring.displacementX = fullSpring.springDeadX; - } if (fullSpring.springDeadY != 0.0) - { fullSpring.displacementY = fullSpring.springDeadY; - } sendSpringEvent(&fullSpring, nullptr, &realMouseX, &realMouseY); } @@ -5416,7 +4581,6 @@ void JoyButton::moveSpringMouse(int &movedX, int &movedY, bool &hasMoved) { sendSpringEvent(&fullSpring, nullptr, &realMouseX, &realMouseY); } - } movedX = realMouseX; @@ -5425,42 +4589,36 @@ void JoyButton::moveSpringMouse(int &movedX, int &movedY, bool &hasMoved) } // Check if mouse event timer should use idle time. - if (pendingMouseButtons.length() == 0) + if (pendingMouseButtons->length() == 0) { - staticMouseEventTimer.start(IDLEMOUSEREFRESHRATE); + staticMouseEventTimer->start(idleMouseRefrRate); } else { - if (staticMouseEventTimer.interval() != mouseRefreshRate) - { + if (staticMouseEventTimer->interval() != mouseRefreshRate) // Restore intended QTimer interval. - staticMouseEventTimer.start(mouseRefreshRate); - } + staticMouseEventTimer->start(mouseRefreshRate); } - springXSpeeds.clear(); - springYSpeeds.clear(); + springXSpeeds->clear(); + springYSpeeds->clear(); } void JoyButton::keyPressEvent() { qInstallMessageHandler(MessageHandler::myMessageOutput); - //qDebug() << "RADIO EDIT: " << keyDelayHold.elapsed(); if (keyPressTimer.isActive() && (keyPressHold.elapsed() >= getPreferredKeyPressTime())) { currentKeyPress = nullptr; - keyPressTimer.stop(); keyPressHold.restart(); releaseActiveSlots(); - createDeskTimer.stop(); if (currentRelease != nullptr) { releaseDeskTimer.stop(); - createDeskEvent(); waitForReleaseDeskEvent(); } @@ -5472,19 +4630,7 @@ void JoyButton::keyPressEvent() else { createDeskTimer.stop(); - - int preferredDelay = getPreferredKeyPressTime(); - int proposedInterval = preferredDelay - keyPressHold.elapsed(); - proposedInterval = proposedInterval > 0 ? proposedInterval : 0; - int newTimerInterval = qMin(10, proposedInterval); - keyPressTimer.start(newTimerInterval); - // If release timer is active, push next run until - // after keyDelayTimer will timeout again. Helps - // reduce CPU usage of an excessively repeating timer. - if (releaseDeskTimer.isActive()) - { - releaseDeskTimer.start(proposedInterval); - } + startTimerOverrun(getPreferredKeyPressTime(), &keyPressHold, &keyPressTimer, true); } } @@ -5497,25 +4643,22 @@ bool JoyButton::checkForDelaySequence() qInstallMessageHandler(MessageHandler::myMessageOutput); bool result = false; - QListIterator tempiter(*getAssignedSlots()); // Move iterator to start of cycle. if (previousCycle != nullptr) - { tempiter.findNext(previousCycle); - } while (tempiter.hasNext()) { JoyButtonSlot *slot = tempiter.next(); - JoyButtonSlot::JoySlotInputAction mode = slot->getSlotMode(); - if ((mode == JoyButtonSlot::JoyPause) || (mode == JoyButtonSlot::JoyRelease)) + + if ((slot->getSlotMode() == JoyButtonSlot::JoyPause) || (slot->getSlotMode() == JoyButtonSlot::JoyRelease)) { result = true; tempiter.toBack(); } - else if (mode == JoyButtonSlot::JoyCycle) + else if (slot->getSlotMode() == JoyButtonSlot::JoyCycle) { result = false; tempiter.toBack(); @@ -5529,26 +4672,23 @@ SetJoystick* JoyButton::getParentSet() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return parentSet; + return m_parentSet; } void JoyButton::checkForPressedSetChange() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (!isButtonPressedQueue.isEmpty()) + if (!isButtonPressedQueue.isEmpty() && !whileHeldStatus) { bool tempButtonPressed = isButtonPressedQueue.last(); bool tempFinalIgnoreSetsState = ignoreSetQueue.last(); - if (!whileHeldStatus) - { - if (tempButtonPressed && !tempFinalIgnoreSetsState && + if (tempButtonPressed && !tempFinalIgnoreSetsState && (setSelectionCondition == SetChangeWhileHeld) && (currentRelease == nullptr)) - { - setChangeTimer.start(0); - quitEvent = true; - } + { + setChangeTimer.start(0); + quitEvent = true; } } } @@ -5563,36 +4703,28 @@ int JoyButton::getPreferredKeyPressTime() { qInstallMessageHandler(MessageHandler::myMessageOutput); - int tempPressTime = InputDevice::DEFAULTKEYPRESSTIME; if ((currentKeyPress != nullptr) && (currentKeyPress->getSlotCode() > 0)) { - tempPressTime = currentKeyPress->getSlotCode(); + return currentKeyPress->getSlotCode(); } - else if (parentSet->getInputDevice()->getDeviceKeyPressTime() > 0) + else if ((m_parentSet != nullptr) && (m_parentSet->getInputDevice()->getDeviceKeyPressTime() > 0)) { - tempPressTime = parentSet->getInputDevice()->getDeviceKeyPressTime(); + return m_parentSet->getInputDevice()->getDeviceKeyPressTime(); } - return tempPressTime; + return GlobalVariables::InputDevice::NUMBER_JOYSETS; } void JoyButton::setCycleResetTime(int interval) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (interval >= MINCYCLERESETTIME) - { - int ceiling = MAXCYCLERESETTIME; - int temp = qBound(MINCYCLERESETTIME, interval, ceiling); - cycleResetInterval = temp; - emit propertyUpdated(); - } + if (interval >= GlobalVariables::JoyButton::MINCYCLERESETTIME) + cycleResetInterval = qBound(GlobalVariables::JoyButton::MINCYCLERESETTIME, interval, GlobalVariables::JoyButton::MAXCYCLERESETTIME); else - { - interval = 0; cycleResetActive = false; - emit propertyUpdated(); - } + + emit propertyUpdated(); } int JoyButton::getCycleResetTime() @@ -5621,8 +4753,8 @@ void JoyButton::establishPropertyUpdatedConnections() { qInstallMessageHandler(MessageHandler::myMessageOutput); - connect(this, &JoyButton::slotsChanged, parentSet->getInputDevice(), &InputDevice::profileEdited); - connect(this, &JoyButton::propertyUpdated, parentSet->getInputDevice(), &InputDevice::profileEdited); + connect(this, &JoyButton::slotsChanged, m_parentSet->getInputDevice(), &InputDevice::profileEdited); + connect(this, &JoyButton::propertyUpdated, m_parentSet->getInputDevice(), &InputDevice::profileEdited); } void JoyButton::disconnectPropertyUpdatedConnections() @@ -5630,7 +4762,7 @@ void JoyButton::disconnectPropertyUpdatedConnections() qInstallMessageHandler(MessageHandler::myMessageOutput); disconnect(this, &JoyButton::slotsChanged, nullptr, nullptr); - disconnect(this, &JoyButton::propertyUpdated, parentSet->getInputDevice(), &InputDevice::profileEdited); + disconnect(this, &JoyButton::propertyUpdated, m_parentSet->getInputDevice(), &InputDevice::profileEdited); } /** @@ -5642,18 +4774,14 @@ void JoyButton::establishMouseTimerConnections() qInstallMessageHandler(MessageHandler::myMessageOutput); if (staticMouseEventTimer.timerType() != Qt::PreciseTimer) - { staticMouseEventTimer.setTimerType(Qt::PreciseTimer); - } // Only one connection will be made for each. connect(&staticMouseEventTimer, &QTimer::timeout, &mouseHelper, &JoyButtonMouseHelper::mouseEvent, Qt::UniqueConnection); - if (staticMouseEventTimer.interval() != IDLEMOUSEREFRESHRATE) - { - staticMouseEventTimer.setInterval(IDLEMOUSEREFRESHRATE); - } + if (staticMouseEventTimer.interval() != GlobalVariables::JoyButton::IDLEMOUSEREFRESHRATE) + staticMouseEventTimer.setInterval(GlobalVariables::JoyButton::IDLEMOUSEREFRESHRATE); } void JoyButton::setSpringRelativeStatus(bool value) @@ -5662,10 +4790,7 @@ void JoyButton::setSpringRelativeStatus(bool value) if (value != relativeSpring) { - if (value) - { - setSpringDeadCircleMultiplier(0); - } + if (value) setSpringDeadCircleMultiplier(0); relativeSpring = value; emit propertyUpdated(); @@ -5695,17 +4820,19 @@ void JoyButton::copyAssignments(JoyButton *destButton) assignmentsLock.lockForWrite(); QListIterator iter(*getAssignedSlots()); + while (iter.hasNext()) { JoyButtonSlot *slot = iter.next(); JoyButtonSlot *newslot = new JoyButtonSlot(slot, destButton); destButton->insertAssignedSlot(newslot, false); } + assignmentsLock.unlock(); - destButton->toggle = toggle; + destButton->m_toggle = m_toggle; destButton->turboInterval = turboInterval; - destButton->useTurbo = useTurbo; + destButton->m_useTurbo = m_useTurbo; destButton->mouseSpeedX = mouseSpeedX; destButton->mouseSpeedY = mouseSpeedY; destButton->wheelSpeedX = wheelSpeedX; @@ -5721,7 +4848,7 @@ void JoyButton::copyAssignments(JoyButton *destButton) destButton->cycleResetInterval = cycleResetInterval; destButton->relativeSpring = relativeSpring; destButton->currentTurboMode = currentTurboMode; - destButton->easingDuration = easingDuration; + destButton->m_easingDuration = m_easingDuration; destButton->extraAccelerationEnabled = extraAccelerationEnabled; destButton->extraAccelerationMultiplier = extraAccelerationMultiplier; destButton->minMouseDistanceAccelThreshold = minMouseDistanceAccelThreshold; @@ -5731,10 +4858,9 @@ void JoyButton::copyAssignments(JoyButton *destButton) destButton->extraAccelCurve = extraAccelCurve; destButton->buildActiveZoneSummaryString(); + if (!destButton->isDefault()) - { emit propertyUpdated(); - } } /** @@ -5778,11 +4904,12 @@ bool JoyButton::isPartRealAxis() * @param Mouse speed value * @return Final mouse speed */ -int JoyButton::calculateFinalMouseSpeed(JoyMouseCurve curve, int value) +int JoyButton::calculateFinalMouseSpeed(JoyMouseCurve curve, int value, const float joyspeed) { qInstallMessageHandler(MessageHandler::myMessageOutput); - int result = static_cast(JoyAxis::JOYSPEED) * value; + int result = joyspeed * value; + switch (curve) { case QuadraticExtremeCurve: @@ -5792,26 +4919,10 @@ int JoyButton::calculateFinalMouseSpeed(JoyMouseCurve curve, int value) result *= 1.5; break; } - case LinearCurve: - { - break; - } - case QuadraticCurve: - { - break; - } - case CubicCurve: - { - break; - } - case PowerCurve: - { - break; - } - default: - { - break; - } + default: + { + break; + } } return result; @@ -5821,10 +4932,10 @@ void JoyButton::setEasingDuration(double value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((value >= MINIMUMEASINGDURATION) && (value <= MAXIMUMEASINGDURATION) && - (qFuzzyCompare(value, easingDuration))) + if ((value >= GlobalVariables::JoyButton::MINIMUMEASINGDURATION) && (value <= GlobalVariables::JoyButton::MAXIMUMEASINGDURATION) && + (!qFuzzyCompare(value, m_easingDuration))) { - easingDuration = value; + m_easingDuration = value; emit propertyUpdated(); } } @@ -5833,7 +4944,7 @@ double JoyButton::getEasingDuration() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return easingDuration; + return m_easingDuration; } JoyButtonMouseHelper* JoyButton::getMouseHelper() @@ -5854,152 +4965,140 @@ QList* JoyButton::getPendingMouseButtons() return &pendingMouseButtons; } -bool JoyButton::hasCursorEvents() + +QList* JoyButton::getCursorXSpeeds() { - // qInstallMessageHandler(MessageHandler::myMessageOutput); + return &cursorXSpeeds; +} - return (cursorXSpeeds.length() != 0) || (cursorYSpeeds.length() != 0); + +QList* JoyButton::getCursorYSpeeds() +{ + return &cursorYSpeeds; } -bool JoyButton::hasSpringEvents() + +QList* JoyButton::getSpringXSpeeds() { - // qInstallMessageHandler(MessageHandler::myMessageOutput); + return &springXSpeeds; +} + - return (springXSpeeds.length() != 0) || (springYSpeeds.length() != 0); +QList* JoyButton::getSpringYSpeeds() +{ + return &springYSpeeds; } -/** - * @brief Get the weight modifier being used for mouse smoothing. - * @return Weight modifier in the range of 0.0 - 1.0. - */ -double JoyButton::getWeightModifier() + +QTimer* JoyButton::getStaticMouseEventTimer() { - qInstallMessageHandler(MessageHandler::myMessageOutput); + return &staticMouseEventTimer; +} - return weightModifier; + +QTime* JoyButton::getTestOldMouseTime() +{ + return &testOldMouseTime; } -/** - * @brief Set the weight modifier to use for mouse smoothing. - * @param Weight modifier in the range of 0.0 - 1.0. - */ -void JoyButton::setWeightModifier(double modifier) + +bool JoyButton::hasCursorEvents(QList* cursorXSpeedsList, QList* cursorYSpeedsList) { - qInstallMessageHandler(MessageHandler::myMessageOutput); + // qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((modifier >= 0.0) && (modifier <= MAXIMUMWEIGHTMODIFIER)) - { - weightModifier = modifier; - } + return (cursorXSpeedsList->length() != 0) || (cursorYSpeedsList->length() != 0); } -/** - * @brief Get mouse history buffer size. - * @return Mouse history buffer size - */ -int JoyButton::getMouseHistorySize() + +bool JoyButton::hasSpringEvents(QList* springXSpeedsList, QList* springYSpeedsList) { - qInstallMessageHandler(MessageHandler::myMessageOutput); + // qInstallMessageHandler(MessageHandler::myMessageOutput); - return mouseHistorySize; + return (springXSpeedsList->length() != 0) || (springYSpeedsList->length() != 0); } /** - * @brief Set mouse history buffer size used for mouse smoothing. - * @param Mouse history buffer size + * @brief Set the weight modifier to use for mouse smoothing. + * @param Weight modifier in the range of 0.0 - 1.0. */ -void JoyButton::setMouseHistorySize(int size) +void JoyButton::setWeightModifier(double modifier, double maxWeightModifier, double& weightModifier) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((size >= 1) && (size <= MAXIMUMMOUSEHISTORYSIZE)) - { - mouseHistoryX.clear(); - mouseHistoryY.clear(); - - mouseHistorySize = size; - } + if ((modifier >= 0.0) && (modifier <= maxWeightModifier)) + weightModifier = modifier; } /** - * @brief Get active mouse movement refresh rate. - * @return + * @brief Set mouse history buffer size used for mouse smoothing. + * @param Mouse history buffer size */ -int JoyButton::getMouseRefreshRate() +void JoyButton::setMouseHistorySize(int size, int maxMouseHistSize, int& mouseHistSize, QList* mouseHistoryX, QList* mouseHistoryY) { qInstallMessageHandler(MessageHandler::myMessageOutput); - return mouseRefreshRate; + if ((size >= 1) && (size <= maxMouseHistSize)) + { + mouseHistoryX->clear(); + mouseHistoryY->clear(); + mouseHistSize = size; + } } /** * @brief Set the mouse refresh rate when a mouse slot is active. * @param Refresh rate in ms. */ -void JoyButton::setMouseRefreshRate(int refresh) +void JoyButton::setMouseRefreshRate(int refresh, int& mouseRefreshRate, int idleMouseRefrRate, JoyButtonMouseHelper* mouseHelper, QList* mouseHistoryX, QList* mouseHistoryY, QTime* testOldMouseTime, QTimer* staticMouseEventTimer) { qInstallMessageHandler(MessageHandler::myMessageOutput); if ((refresh >= 1) && (refresh <= 16)) { mouseRefreshRate = refresh; - int temp = IDLEMOUSEREFRESHRATE; - if (staticMouseEventTimer.isActive()) + if (staticMouseEventTimer->isActive()) { - testOldMouseTime.restart(); - - int tempInterval = staticMouseEventTimer.interval(); + testOldMouseTime->restart(); - if (tempInterval != temp && - tempInterval != 0) + if (staticMouseEventTimer->interval() != idleMouseRefrRate && staticMouseEventTimer->interval() != 0) { - QMetaObject::invokeMethod(&staticMouseEventTimer, "start", + QMetaObject::invokeMethod(staticMouseEventTimer, "start", Q_ARG(int, mouseRefreshRate)); } else { // Restart QTimer to keep QTimer in line with QTime - QMetaObject::invokeMethod(&staticMouseEventTimer, "start", - Q_ARG(int, temp)); + QMetaObject::invokeMethod(staticMouseEventTimer, "start", + Q_ARG(int, idleMouseRefrRate)); } // Clear current mouse history - mouseHistoryX.clear(); - mouseHistoryY.clear(); + mouseHistoryX->clear(); + mouseHistoryY->clear(); } else { - staticMouseEventTimer.setInterval(IDLEMOUSEREFRESHRATE); + staticMouseEventTimer->setInterval(idleMouseRefrRate); } - mouseHelper.carryMouseRefreshRateUpdate(mouseRefreshRate); + mouseHelper->carryMouseRefreshRateUpdate(mouseRefreshRate); } } -/** - * @brief Get the gamepad poll rate used by the application. - * @return Poll rate in ms. - */ -int JoyButton::getGamepadRefreshRate() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); - - return gamepadRefreshRate; -} - /** * @brief Set the gamepad poll rate to be used in the application. * @param Poll rate in ms. */ -void JoyButton::setGamepadRefreshRate(int refresh) + +void JoyButton::setGamepadRefreshRate(int refresh, int& gamepadRefreshRate, JoyButtonMouseHelper* mouseHelper) { qInstallMessageHandler(MessageHandler::myMessageOutput); if ((refresh >= 1) && (refresh <= 16)) { gamepadRefreshRate = refresh; - mouseHelper.carryGamePollRateUpdate(gamepadRefreshRate); + mouseHelper->carryGamePollRateUpdate(gamepadRefreshRate); } } @@ -6012,6 +5111,7 @@ void JoyButton::checkTurboCondition(JoyButtonSlot *slot) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyButtonSlot::JoySlotInputAction mode = slot->getSlotMode(); + switch (mode) { case JoyButtonSlot::JoyPause: @@ -6024,42 +5124,10 @@ void JoyButton::checkTurboCondition(JoyButtonSlot *slot) setUseTurbo(false); break; } - case JoyButtonSlot::JoyMouseButton: - { - break; - } - case JoyButtonSlot::JoyMouseMovement: - { - break; - } - case JoyButtonSlot::JoyCycle: - { - break; - } - case JoyButtonSlot::JoyMouseSpeedMod: - { - break; - } - case JoyButtonSlot::JoyKeyPress: - { - break; - } - case JoyButtonSlot::JoyDelay: - { - break; - } - case JoyButtonSlot::JoyTextEntry: - { - break; - } - case JoyButtonSlot::JoyExecute: - { - break; - } - default: - { - break; - } + default: + { + break; + } } } @@ -6071,28 +5139,18 @@ void JoyButton::resetProperties() qDebug() << "all current slots and previous slots ale cleared"; #endif - currentCycle = nullptr; - previousCycle = nullptr; - currentPause = nullptr; - currentHold = nullptr; - currentDistance = nullptr; - currentRawValue = 0; - currentMouseEvent = nullptr; - currentRelease = nullptr; - currentWheelVerticalEvent = nullptr; - currentWheelHorizontalEvent = nullptr; - currentKeyPress = nullptr; - currentDelay = nullptr; - currentSetChangeSlot = nullptr; - - isKeyPressed = isButtonPressed = false; - quitEvent = true; + resetAllProperties(); +} - toggle = false; +void JoyButton::resetAllProperties() +{ + resetSlotsProp(true); + + m_toggle = false; turboInterval = 0; isDown = false; toggleActiveState = false; - useTurbo = false; + m_useTurbo = false; mouseSpeedX = 50; mouseSpeedY = 50; wheelSpeedX = 20; @@ -6104,7 +5162,7 @@ void JoyButton::resetProperties() sensitivity = 1.0; setSelection = -1; setSelectionCondition = SetChangeDisabled; - ignoresets = false; + m_ignoresets = false; ignoreEvents = false; whileHeldStatus = false; buttonName.clear(); @@ -6113,41 +5171,19 @@ void JoyButton::resetProperties() cycleResetInterval = 0; relativeSpring = false; lastDistance = 0.0; - currentAccelMulti = 0.0; - lastAccelerationDistance = 0.0; lastMouseDistance = 0.0; currentMouseDistance = 0.0; - updateLastMouseDistance = false; - updateStartingMouseDistance = false; - updateOldAccelMulti = 0.0; - updateInitAccelValues = true; - - currentAccelerationDistance = 0.0; - startingAccelerationDistance = 0.0; + updateMouseParams(false, false, 0.0); + restartAccelParams(false, false, true); lastWheelVerticalDistance = 0.0; lastWheelHorizontalDistance = 0.0; tempTurboInterval = 0; - oldAccelMulti = 0.0; - accelTravel = 0.0; currentTurboMode = DEFAULTTURBOMODE; - easingDuration = DEFAULTEASINGDURATION; - springDeadCircleMultiplier = DEFAULTSPRINGRELEASERADIUS; + m_easingDuration = GlobalVariables::JoyButton::DEFAULTEASINGDURATION; + springDeadCircleMultiplier = GlobalVariables::JoyButton::DEFAULTSPRINGRELEASERADIUS; - pendingEvent = false; - pendingPress = false; - pendingIgnoreSets = false; - - extraAccelerationEnabled = false; - extraAccelerationMultiplier = DEFAULTEXTRACCELVALUE; - minMouseDistanceAccelThreshold = DEFAULTMINACCELTHRESHOLD; - maxMouseDistanceAccelThreshold = DEFAULTMAXACCELTHRESHOLD; - startAccelMultiplier = DEFAULTSTARTACCELMULTIPLIER; - accelDuration = DEFAULTACCELEASINGDURATION; - extraAccelCurve = LinearAccelCurve; - - activeZoneStringLock.lockForWrite(); - activeZoneString = trUtf8("[NO KEY]"); - activeZoneStringLock.unlock(); + updatePendingParams(false, false, false); + lockForWritedString(activeZoneString, trUtf8("[NO KEY]")); } bool JoyButton::isModifierButton() @@ -6157,11 +5193,11 @@ bool JoyButton::isModifierButton() return false; } -void JoyButton::resetActiveButtonMouseDistances() +void JoyButton::resetActiveButtonMouseDistances(JoyButtonMouseHelper* mouseHelper) { qInstallMessageHandler(MessageHandler::myMessageOutput); - mouseHelper.resetButtonMouseDistances(); + mouseHelper->resetButtonMouseDistances(); } void JoyButton::resetAccelerationDistances() @@ -6278,7 +5314,7 @@ void JoyButton::setMinAccelThreshold(double value) if ((value >= 1.0) && (value <= 100.0) && (value <= maxMouseDistanceAccelThreshold)) { minMouseDistanceAccelThreshold = value; - emit propertyUpdated(); + //emit propertyUpdated(); } } @@ -6325,21 +5361,11 @@ double JoyButton::getStartAccelMultiplier() return startAccelMultiplier; } -int JoyButton::getSpringModeScreen() -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); - - return springModeScreen; -} - -void JoyButton::setSpringModeScreen(int screen) +void JoyButton::setSpringModeScreen(int screen, int& springModeScreen) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (screen >= -1) - { - springModeScreen = screen; - } + if (screen >= -1) springModeScreen = screen; } void JoyButton::setAccelExtraDuration(double value) @@ -6360,15 +5386,18 @@ double JoyButton::getAccelExtraDuration() return accelDuration; } -bool JoyButton::hasFutureSpringEvents() + +bool JoyButton::hasFutureSpringEvents(QList* pendingMouseButtons) { qInstallMessageHandler(MessageHandler::myMessageOutput); bool result = false; - QListIterator iter(pendingMouseButtons); + QListIterator iter(*pendingMouseButtons); + while (iter.hasNext()) { JoyButton *temp = iter.next(); + if (temp->getMouseMode() == MouseSpring) { result = true; @@ -6400,65 +5429,58 @@ double JoyButton::getCurrentSpringDeadCircle() return (springDeadCircleMultiplier * 0.01); } -void JoyButton::restartLastMouseTime() +void JoyButton::restartLastMouseTime(QTime* testOldMouseTime) { - testOldMouseTime.restart(); + testOldMouseTime->restart(); } -void JoyButton::setStaticMouseThread(QThread *thread) + +void JoyButton::setStaticMouseThread(QThread *thread, QTimer* staticMouseEventTimer, QTime* testOldMouseTime, int idleMouseRefrRate, JoyButtonMouseHelper* mouseHelper) { - int oldInterval = staticMouseEventTimer.interval(); + int oldInterval = staticMouseEventTimer->interval(); + if (oldInterval == 0) - { - oldInterval = IDLEMOUSEREFRESHRATE; - } + oldInterval = idleMouseRefrRate; - staticMouseEventTimer.moveToThread(thread); - mouseHelper.moveToThread(thread); + staticMouseEventTimer->moveToThread(thread); + mouseHelper->moveToThread(thread); - QMetaObject::invokeMethod(&staticMouseEventTimer, "start", + QMetaObject::invokeMethod(staticMouseEventTimer, "start", Q_ARG(int, oldInterval)); - testOldMouseTime.start(); + testOldMouseTime->start(); #ifdef Q_OS_WIN repeatHelper.moveToThread(thread); #endif + } -void JoyButton::indirectStaticMouseThread(QThread *thread) + +void JoyButton::indirectStaticMouseThread(QThread *thread, QTimer* staticMouseEventTimer, JoyButtonMouseHelper* mouseHelper) { - QMetaObject::invokeMethod(&staticMouseEventTimer, "stop"); + QMetaObject::invokeMethod(staticMouseEventTimer, "stop"); #ifdef Q_OS_WIN QMetaObject::invokeMethod(repeatHelper.getRepeatTimer(), "stop"); #endif - QMetaObject::invokeMethod(&mouseHelper, "changeThread", + QMetaObject::invokeMethod(mouseHelper, "changeThread", Q_ARG(QThread*, thread)); } -bool JoyButton::shouldInvokeMouseEvents() + +bool JoyButton::shouldInvokeMouseEvents(QList* pendingMouseButtons, QTimer* staticMouseEventTimer, QTime* testOldMouseTime) { bool result = false; - if ((pendingMouseButtons.size() > 0) && staticMouseEventTimer.isActive()) - { - int timerInterval = staticMouseEventTimer.interval(); - if (timerInterval == 0) - { - result = true; - } - else if (testOldMouseTime.elapsed() >= timerInterval) - { - result = true; - } - } + if ((staticMouseEventTimer->interval() == 0) && (pendingMouseButtons->size() > 0) && staticMouseEventTimer->isActive()) result = true; + else if ((testOldMouseTime->elapsed() >= staticMouseEventTimer->interval()) && (pendingMouseButtons->size() > 0) && staticMouseEventTimer->isActive()) result = true; return result; } -void JoyButton::invokeMouseEvents() +void JoyButton::invokeMouseEvents(JoyButtonMouseHelper* mouseHelper) { - mouseHelper.mouseEvent(); + mouseHelper->mouseEvent(); } bool JoyButton::hasActiveSlots() @@ -6492,9 +5514,7 @@ void JoyButton::copyExtraAccelerationState(JoyButton *srcButton) srcButton->accelExtraDurationTime.second(), srcButton->accelExtraDurationTime.msec()); - this->updateOldAccelMulti = srcButton->updateOldAccelMulti; - this->updateStartingMouseDistance = srcButton->updateStartingMouseDistance; - this->updateLastMouseDistance = static_cast(srcButton->lastMouseDistance); + updateMouseParams((srcButton->lastMouseDistance != 0.0), srcButton->updateStartingMouseDistance, srcButton->updateOldAccelMulti); } void JoyButton::setUpdateInitAccel(bool state) diff --git a/src/joybutton.h b/src/joybutton.h old mode 100644 new mode 100755 index 028aa9d4d..e36232082 --- a/src/joybutton.h +++ b/src/joybutton.h @@ -20,6 +20,7 @@ #include "joybuttonslot.h" +#include "globalvariables.h" #include "springmousemoveinfo.h" #include "joybuttonmousehelper.h" @@ -62,6 +63,12 @@ class JoyButton : public QObject EaseOutQuadAccelCurve, EaseOutCubicAccelCurve}; enum TurboMode {NormalTurbo=0, GradientTurbo, PulseTurbo}; + typedef struct _mouseCursorInfo + { + JoyButtonSlot *slot; + double code; + } mouseCursorInfo; + void joyEvent(bool pressed, bool ignoresets=false); void queuePendingEvent(bool pressed, bool ignoresets=false); void activatePendingEvent(); @@ -179,92 +186,42 @@ class JoyButton : public QObject TurboMode getTurboMode(); - - static int calculateFinalMouseSpeed(JoyMouseCurve curve, int value); - static int getMouseHistorySize(); - static int getSpringModeScreen(); - static int getMouseRefreshRate(); - static int getGamepadRefreshRate(); - - static double getWeightModifier(); - static double cursorRemainderX; - static double cursorRemainderY; - - static bool hasCursorEvents(); - static bool hasSpringEvents(); - static bool shouldInvokeMouseEvents(); - - static void setWeightModifier(double modifier); - static void moveMouseCursor(int &movedX, int &movedY, int &movedElapsed); - static void moveSpringMouse(int &movedX, int &movedY, bool &hasMoved); - static void setMouseHistorySize(int size); - static void setMouseRefreshRate(int refresh); - static void setSpringModeScreen(int screen); - static void resetActiveButtonMouseDistances(); - static void setGamepadRefreshRate(int refresh); - static void restartLastMouseTime(); - static void setStaticMouseThread(QThread *thread); - static void indirectStaticMouseThread(QThread *thread); - static void invokeMouseEvents(); + static int calculateFinalMouseSpeed(JoyMouseCurve curve, int value, const float joyspeed); + + static bool hasCursorEvents(QList* cursorXSpeedsList, QList* cursorYSpeedsList); + static bool hasSpringEvents(QList* springXSpeedsList, QList* springYSpeedsList); + static bool shouldInvokeMouseEvents(QList* pendingMouseButtons, QTimer* staticMouseEventTimer, QTime* testOldMouseTime); + + static void setWeightModifier(double modifier, double maxWeightModifier, double& weightModifier); + static void moveMouseCursor(int &movedX, int &movedY, int &movedElapsed, QList* mouseHistoryX, QList* mouseHistoryY, QTime* testOldMouseTime, QTimer* staticMouseEventTimer, int mouseRefreshRate, int mouseHistorySize, QList* cursorXSpeeds, QList* cursorYSpeeds, double& cursorRemainderX, double& cursorRemainderY, double weightModifier, int idleMouseRefrRate, QList* pendingMouseButtonse); + static void moveSpringMouse(int &movedX, int &movedY, bool &hasMoved, int springModeScreen, QList* springXSpeeds, QList* springYSpeeds, QList* pendingMouseButtons, int mouseRefreshRate, int idleMouseRefrRate, QTimer* staticMouseEventTimer); + static void setMouseHistorySize(int size, int maxMouseHistSize, int& mouseHistSize, QList* mouseHistoryX, QList* mouseHistoryY); + static void setMouseRefreshRate(int refresh, int& mouseRefreshRate, int idleMouseRefrRate, JoyButtonMouseHelper* mouseHelper, QList* mouseHistoryX, QList* mouseHistoryY, QTime* testOldMouseTime, QTimer* staticMouseEventTimer); + static void setSpringModeScreen(int screen, int& springModeScreen); + static void resetActiveButtonMouseDistances(JoyButtonMouseHelper* mouseHelper); + static void setGamepadRefreshRate(int refresh, int& gamepadRefreshRate, JoyButtonMouseHelper* mouseHelper); + static void restartLastMouseTime(QTime* testOldMouseTime); + static void setStaticMouseThread(QThread *thread, QTimer* staticMouseEventTimer, QTime* testOldMouseTime, int idleMouseRefrRate, JoyButtonMouseHelper* mouseHelper); + static void indirectStaticMouseThread(QThread *thread, QTimer* staticMouseEventTimer, JoyButtonMouseHelper* mouseHelper); + static void invokeMouseEvents(JoyButtonMouseHelper* mouseHelper); static JoyButtonMouseHelper* getMouseHelper(); static QList* getPendingMouseButtons(); - static QList mouseHistoryX; - static QList mouseHistoryY; + static QList* getCursorXSpeeds(); + static QList* getCursorYSpeeds(); + static QList* getSpringXSpeeds(); + static QList* getSpringYSpeeds(); + static QTimer* getStaticMouseEventTimer(); + static QTime* getTestOldMouseTime(); JoyExtraAccelerationCurve getExtraAccelerationCurve(); - static const QString xmlName; - - // Define default values for many properties. - static const int ENABLEDTURBODEFAULT; - static const double DEFAULTMOUSESPEEDMOD; - static const int DEFAULTKEYREPEATDELAY; // unsigned - static const int DEFAULTKEYREPEATRATE; // unsigned static const JoyMouseCurve DEFAULTMOUSECURVE; - static const bool DEFAULTTOGGLE; - static const int DEFAULTTURBOINTERVAL; - static const bool DEFAULTUSETURBO; - static const int DEFAULTMOUSESPEEDX; - static const int DEFAULTMOUSESPEEDY; - static const int DEFAULTSETSELECTION; static const SetChangeCondition DEFAULTSETCONDITION; static const JoyMouseMovementMode DEFAULTMOUSEMODE; - static const int DEFAULTSPRINGWIDTH; - static const int DEFAULTSPRINGHEIGHT; - static const double DEFAULTSENSITIVITY; - static const int DEFAULTWHEELX; - static const int DEFAULTWHEELY; - static const bool DEFAULTCYCLERESETACTIVE; - static const int DEFAULTCYCLERESET; - static const bool DEFAULTRELATIVESPRING; static const TurboMode DEFAULTTURBOMODE; - static const double DEFAULTEASINGDURATION; - static const double MINIMUMEASINGDURATION; - static const double MAXIMUMEASINGDURATION; - - static const int DEFAULTMOUSEHISTORYSIZE; - static const double DEFAULTWEIGHTMODIFIER; - - static const int MAXIMUMMOUSEHISTORYSIZE; - static const double MAXIMUMWEIGHTMODIFIER; - - static const int MAXIMUMMOUSEREFRESHRATE; - static const int DEFAULTIDLEMOUSEREFRESHRATE; - static int IDLEMOUSEREFRESHRATE; - - static const int MINCYCLERESETTIME; // unsigned - static const int MAXCYCLERESETTIME; // unsigned - - static const double DEFAULTEXTRACCELVALUE; - static const double DEFAULTMINACCELTHRESHOLD; - static const double DEFAULTMAXACCELTHRESHOLD; - static const double DEFAULTSTARTACCELMULTIPLIER; - static const double DEFAULTACCELEASINGDURATION; static const JoyExtraAccelerationCurve DEFAULTEXTRAACCELCURVE; - static const int DEFAULTSPRINGRELEASERADIUS; - protected: int getPreferredKeyPressTime(); // unsigned @@ -274,18 +231,14 @@ class JoyButton : public QObject bool distanceEvent(); bool checkForDelaySequence(); bool insertAssignedSlot(JoyButtonSlot *newSlot, bool updateActiveString=true); - void clearAssignedSlots(bool signalEmit=true); void releaseSlotEvent(); - void findReleaseEventEnd(); - void findReleaseEventIterEnd(QListIterator *tempiter); - void findHoldEventEnd(); void checkForPressedSetChange(); void checkTurboCondition(JoyButtonSlot *slot); void vdpadPassEvent(bool pressed, bool ignoresets=false); void localBuildActiveZoneSummaryString(); - static bool hasFutureSpringEvents(); + static bool hasFutureSpringEvents(QList* pendingMouseButtons); virtual double getCurrentSpringDeadCircle(); @@ -295,14 +248,6 @@ class JoyButton : public QObject QString buildActiveZoneSummary(QList &tempList); - - typedef struct _mouseCursorInfo - { - JoyButtonSlot *slot; - double code; - } mouseCursorInfo; - - static double mouseSpeedModifier; static QList mouseSpeedModList; static QList cursorXSpeeds; static QList cursorYSpeeds; @@ -310,22 +255,14 @@ class JoyButton : public QObject static QList springYSpeeds; static QList pendingMouseButtons; - static QHash activeKeys; // QHash activeMouseButtons; // QHashstop(); + #endif + + if (stoppedSlotSetTimer) slotSetChangeTimer.stop(); + + if (slotiter != nullptr) + { + delete slotiter; + slotiter = nullptr; + } + } + + inline void clearQueues() + { + isButtonPressedQueue.clear(); + ignoreSetQueue.clear(); + mouseEventQueue.clear(); + mouseWheelVerticalEventQueue.clear(); + mouseWheelHorizontalEventQueue.clear(); + } + + inline void restartAccelParams(bool updatedOldAccel, bool restartedAccelDurTimer, bool restartedRestParams) + { + lastAccelerationDistance = 0.0; + currentAccelMulti = 0.0; + currentAccelerationDistance = 0.0; + startingAccelerationDistance = 0.0; + + if (updatedOldAccel) oldAccelMulti = updateOldAccelMulti = 0.0; + else oldAccelMulti = 0.0; + + accelTravel = 0.0; + if (restartedAccelDurTimer) accelExtraDurationTime.restart(); + + if (restartedRestParams) + { + updateInitAccelValues = true; + extraAccelerationEnabled = false; + extraAccelerationMultiplier = GlobalVariables::JoyButton::DEFAULTEXTRACCELVALUE; + minMouseDistanceAccelThreshold = GlobalVariables::JoyButton::DEFAULTMINACCELTHRESHOLD; + maxMouseDistanceAccelThreshold = GlobalVariables::JoyButton::DEFAULTMAXACCELTHRESHOLD; + startAccelMultiplier = GlobalVariables::JoyButton::DEFAULTSTARTACCELMULTIPLIER; + accelDuration = GlobalVariables::JoyButton::DEFAULTACCELEASINGDURATION; + extraAccelCurve = LinearAccelCurve; + } + } + + inline void lockForWritedString(QString& param, QString value) + { + activeZoneStringLock.lockForWrite(); + param = value; + activeZoneStringLock.unlock(); + } + + void resetAllProperties(); + void resetPrivVars(); + void restartAllForSetChange(); + void startTimerOverrun(int slotCode, QTime* currSlotTime, QTimer* currSlotTimer, bool releasedDeskTimer = false); + void findJoySlotsEnd(QListIterator *slotiter); + void changeStatesQueue(bool currentReleased); + void countActiveSlots(int tempcode, int& references, JoyButtonSlot* slot, QHash& activeSlotsHash, bool& changeRepeatState, bool activeSlotHashWindows = false); + void releaseMoveSlots(QList& cursorSpeeds, JoyButtonSlot *slot, QList& indexesToRemove); + void setSpringDeadCircle(double& springDeadCircle, int mouseDirection); + void checkSpringDeadCircle(int tempcode, double& springDeadCircle, int mouseSlot1, int mouseSlot2); + static void distanceForMovingAx(double& finalAx, mouseCursorInfo infoAx); + static void adjustAxForCursor(QList* mouseHistoryList, double& adjustedAx, double& cursorRemainder, double weightModifier); + void setDistanceForSpring(JoyButtonMouseHelper& mouseHelper, double& mouseFirstAx, double& mouseSecondAx, double distanceFromDeadZone); + void changeTurboParams(bool _isKeyPressed, bool isButtonPressed); + void updateParamsAfterDistEvent(); + void startSequenceOfPressActive(bool isTurbo, QString debugText); QList& getAssignmentsLocal(); QList& getActiveSlotsLocal(); + void updateMouseProperties(double newAxisValue, double newSpringDead, int newSpringWidth, int newSpringHeight, bool relatived, int modeScreen, QList& springSpeeds, QChar axis, double newAxisValueY = 0, double newSpringDeadY = 0); - bool toggle; + bool m_toggle; bool quitEvent; bool isDown; bool toggleActiveState; - bool useTurbo; + bool m_useTurbo; bool lastUnlessInList; - bool ignoresets; + bool m_ignoresets; bool ignoreEvents; bool whileHeldStatus; bool updateLastMouseDistance; // Should lastMouseDistance be updated. Set after mouse event. @@ -467,7 +526,7 @@ private slots: int mouseSpeedX; int mouseSpeedY; - int originset; + int m_originset; int springWidth; int springHeight; int currentRawValue; @@ -487,7 +546,7 @@ private slots: double minMouseDistanceAccelThreshold; double maxMouseDistanceAccelThreshold; double startAccelMultiplier; - double easingDuration; + double m_easingDuration; double extraAccelerationMultiplier; QTimer pauseTimer; @@ -514,7 +573,7 @@ private slots: JoyButtonSlot *currentHold; JoyButtonSlot *currentCycle; JoyButtonSlot *previousCycle; - JoyButtonSlot *currentDistance; + JoyButtonSlot *m_currentDistance; JoyButtonSlot *currentMouseEvent; JoyButtonSlot *currentRelease; JoyButtonSlot *currentKeyPress; @@ -531,7 +590,7 @@ private slots: QTime cycleResetHold; static QTime testOldMouseTime; - VDPad *vdpad; + VDPad *m_vdpad; JoyMouseMovementMode mouseMode; JoyMouseCurve mouseCurve; JoyExtraAccelerationCurve extraAccelCurve; diff --git a/src/joybuttoncontextmenu.cpp b/src/joybuttoncontextmenu.cpp old mode 100644 new mode 100755 index d80cf115e..aaa13c8a0 --- a/src/joybuttoncontextmenu.cpp +++ b/src/joybuttoncontextmenu.cpp @@ -17,6 +17,7 @@ #include "joybuttoncontextmenu.h" +#include "globalvariables.h" #include "messagehandler.h" #include "inputdevice.h" #include "common.h" @@ -41,11 +42,9 @@ void JoyButtonContextMenu::buildMenu() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QAction *action = nullptr; - PadderCommon::inputDaemonMutex.lock(); - action = this->addAction(trUtf8("Toggle")); + QAction *action = this->addAction(trUtf8("Toggle")); action->setCheckable(true); action->setChecked(button->getToggleState()); connect(action, &QAction::triggered, this, &JoyButtonContextMenu::switchToggle); @@ -64,21 +63,21 @@ void JoyButtonContextMenu::buildMenu() this->addSeparator(); QMenu *setSectionMenu = this->addMenu(trUtf8("Set Select")); - action = setSectionMenu->addAction(trUtf8("Disabled")); + if (button->getChangeSetCondition() == JoyButton::SetChangeDisabled) { action->setCheckable(true); action->setChecked(true); } - connect(action, &QAction::triggered, this, &JoyButtonContextMenu::disableSetMode); + connect(action, &QAction::triggered, this, &JoyButtonContextMenu::disableSetMode); setSectionMenu->addSeparator(); - for (int i=0; i < InputDevice::NUMBER_JOYSETS; i++) + for (int i = 0; i < GlobalVariables::InputDevice::NUMBER_JOYSETS; i++) { QMenu *tempSetMenu = setSectionMenu->addMenu(trUtf8("Set %1").arg(i+1)); - int setSelection = i*3; + int setSelection = i * 3; if (i == button->getSetSelection()) { @@ -88,58 +87,38 @@ void JoyButtonContextMenu::buildMenu() } QActionGroup *tempGroup = new QActionGroup(tempSetMenu); + createActionForGroup(tempGroup, trUtf8("Set %1 1W"), action, tempSetMenu, setSelection, i, 0, 1); + createActionForGroup(tempGroup, trUtf8("Set %1 2W"), action, tempSetMenu, setSelection, i, 1, 2); + createActionForGroup(tempGroup, trUtf8("Set %1 WH"), action, tempSetMenu, setSelection, i, 2, 3); - action = tempSetMenu->addAction(trUtf8("Set %1 1W").arg(i+1)); - action->setData(QVariant(setSelection + 0)); - action->setCheckable(true); - if ((button->getSetSelection() == i) && - (button->getChangeSetCondition() == JoyButton::SetChangeOneWay)) - { - action->setChecked(true); - } - connect(action, &QAction::triggered, this, [this, action]() { - switchSetMode(action); - }); - - tempGroup->addAction(action); - - action = tempSetMenu->addAction(trUtf8("Set %1 2W").arg(i+1)); - action->setData(QVariant(setSelection + 1)); - action->setCheckable(true); - if ((button->getSetSelection() == i) && - (button->getChangeSetCondition() == JoyButton::SetChangeTwoWay)) - { - action->setChecked(true); - } - connect(action, &QAction::triggered, this, [this, action]() { - switchSetMode(action); - }); + if (i == button->getParentSet()->getIndex()) + tempSetMenu->setEnabled(false); + } - tempGroup->addAction(action); + PadderCommon::inputDaemonMutex.unlock(); +} - action = tempSetMenu->addAction(trUtf8("Set %1 WH").arg(i+1)); - action->setData(QVariant(setSelection + 2)); - action->setCheckable(true); - if ((button->getSetSelection() == i) && - (button->getChangeSetCondition() == JoyButton::SetChangeWhileHeld)) - { - action->setChecked(true); - } - connect(action, &QAction::triggered, this, [this, action]() { - switchSetMode(action); - }); - tempGroup->addAction(action); +void JoyButtonContextMenu::createActionForGroup(QActionGroup *tempGroup, QString actionText, QAction *action, QMenu *tempSetMenu, int setSelection, int currentSelection, int setDataInc, int setCondition) +{ + action = tempSetMenu->addAction(actionText.arg(currentSelection + 1)); + action->setData(QVariant(setSelection + setDataInc)); + action->setCheckable(true); - if (i == button->getParentSet()->getIndex()) - { - tempSetMenu->setEnabled(false); - } + if ((button->getSetSelection() == currentSelection) && + (button->getChangeSetCondition() == static_cast(setCondition))) + { + action->setChecked(true); } - PadderCommon::inputDaemonMutex.unlock(); + connect(action, &QAction::triggered, this, [this, action]() { + switchSetMode(action); + }); + + tempGroup->addAction(action); } + void JoyButtonContextMenu::switchToggle() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -167,20 +146,24 @@ void JoyButtonContextMenu::switchSetMode(QAction* action) int setChangeCondition = item % 3; JoyButton::SetChangeCondition temp = JoyButton::SetChangeOneWay; - if (setChangeCondition == 0) - { - temp = JoyButton::SetChangeOneWay; - } - else if (setChangeCondition == 1) - { - temp = JoyButton::SetChangeTwoWay; - } - else if (setChangeCondition == 2) + switch(setChangeCondition) { - temp = JoyButton::SetChangeWhileHeld; + case 0: + temp = JoyButton::SetChangeOneWay; + break; + + case 1: + temp = JoyButton::SetChangeTwoWay; + break; + + case 2: + temp = JoyButton::SetChangeWhileHeld; + break; } + PadderCommon::inputDaemonMutex.lock(); + // First, remove old condition for the button in both sets. // After that, make the new assignment. button->setChangeSetCondition(JoyButton::SetChangeDisabled); diff --git a/src/joybuttoncontextmenu.h b/src/joybuttoncontextmenu.h old mode 100644 new mode 100755 index 51f9c3093..68ee27b01 --- a/src/joybuttoncontextmenu.h +++ b/src/joybuttoncontextmenu.h @@ -41,6 +41,7 @@ private slots: void switchSetMode(QAction* action); void disableSetMode(); void clearButton(); + void createActionForGroup(QActionGroup *tempGroup, QString actionText, QAction *action, QMenu *tempSetMenu, int setSelection, int currentSelection, int setDataInc, int setCondition); }; #endif // JOYBUTTONCONTEXTMENU_H diff --git a/src/joybuttonmousehelper.cpp b/src/joybuttonmousehelper.cpp old mode 100644 new mode 100755 index fc6937cc3..d905aa5db --- a/src/joybuttonmousehelper.cpp +++ b/src/joybuttonmousehelper.cpp @@ -17,6 +17,7 @@ #include "joybuttonmousehelper.h" +#include "globalvariables.h" #include "messagehandler.h" #include "joybutton.h" @@ -42,11 +43,10 @@ void JoyButtonMouseHelper::moveMouseCursor() int finalx = 0; int finaly = 0; int elapsedTime = 5; - JoyButton::moveMouseCursor(finalx, finaly, elapsedTime); + JoyButton::moveMouseCursor(finalx, finaly, elapsedTime, &GlobalVariables::JoyButton::mouseHistoryX, &GlobalVariables::JoyButton::mouseHistoryY, JoyButton::getTestOldMouseTime(), JoyButton::getStaticMouseEventTimer(), GlobalVariables::JoyButton::mouseRefreshRate, GlobalVariables::JoyButton::mouseHistorySize, JoyButton::getCursorXSpeeds(), JoyButton::getCursorYSpeeds(), GlobalVariables::JoyButton::cursorRemainderX, GlobalVariables::JoyButton::cursorRemainderY, GlobalVariables::JoyButton::weightModifier, GlobalVariables::JoyButton::IDLEMOUSEREFRESHRATE, JoyButton::getPendingMouseButtons()); + if ((finalx != 0) || (finaly != 0)) - { emit mouseCursorMoved(finalx, finaly, elapsedTime); - } } /** @@ -59,11 +59,10 @@ void JoyButtonMouseHelper::moveSpringMouse() int finalx = 0; int finaly = 0; bool hasMoved = false; - JoyButton::moveSpringMouse(finalx, finaly, hasMoved); + JoyButton::moveSpringMouse(finalx, finaly, hasMoved, GlobalVariables::JoyButton::springModeScreen, JoyButton::getSpringXSpeeds(), JoyButton::getSpringYSpeeds(), JoyButton::getPendingMouseButtons(), GlobalVariables::JoyButton::mouseRefreshRate, GlobalVariables::JoyButton::IDLEMOUSEREFRESHRATE, JoyButton::getStaticMouseEventTimer()); + if (hasMoved) - { emit mouseSpringMoved(finalx, finaly); - } } /** @@ -73,10 +72,11 @@ void JoyButtonMouseHelper::mouseEvent() { // qInstallMessageHandler(MessageHandler::myMessageOutput); - if (!JoyButton::hasCursorEvents() && !JoyButton::hasSpringEvents()) + if (!JoyButton::hasCursorEvents(JoyButton::getCursorXSpeeds(), JoyButton::getCursorYSpeeds()) && !JoyButton::hasSpringEvents(JoyButton::getSpringXSpeeds(), JoyButton::getSpringYSpeeds())) { QList *buttonList = JoyButton::getPendingMouseButtons(); QListIterator iter(*buttonList); + while (iter.hasNext()) { JoyButton *temp = iter.next(); @@ -86,12 +86,12 @@ void JoyButtonMouseHelper::mouseEvent() moveMouseCursor(); - if (JoyButton::hasSpringEvents()) + if (JoyButton::hasSpringEvents(JoyButton::getSpringXSpeeds(), JoyButton::getSpringYSpeeds())) { moveSpringMouse(); } - JoyButton::restartLastMouseTime(); + JoyButton::restartLastMouseTime(JoyButton::getTestOldMouseTime()); firstSpringEvent = false; } @@ -101,6 +101,7 @@ void JoyButtonMouseHelper::resetButtonMouseDistances() QList *buttonList = JoyButton::getPendingMouseButtons(); QListIterator iter(*buttonList); + while (iter.hasNext()) { JoyButton *temp = iter.next(); @@ -140,5 +141,5 @@ void JoyButtonMouseHelper::changeThread(QThread *thread) { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyButton::setStaticMouseThread(thread); + JoyButton::setStaticMouseThread(thread, JoyButton::getStaticMouseEventTimer(), JoyButton::getTestOldMouseTime(), GlobalVariables::JoyButton::IDLEMOUSEREFRESHRATE, JoyButton::getMouseHelper()); } diff --git a/src/joybuttonmousehelper.h b/src/joybuttonmousehelper.h old mode 100644 new mode 100755 diff --git a/src/joybuttonslot.cpp b/src/joybuttonslot.cpp old mode 100644 new mode 100755 index 404db1db1..eb85de92b --- a/src/joybuttonslot.cpp +++ b/src/joybuttonslot.cpp @@ -17,6 +17,7 @@ #include "joybuttonslot.h" +#include "globalvariables.h" #include "messagehandler.h" #include "inputdevice.h" #include "antkeymapper.h" @@ -27,9 +28,6 @@ #include #include -const int JoyButtonSlot::JOYSPEED = 20; -const QString JoyButtonSlot::xmlName = "slot"; -const int JoyButtonSlot::MAXTEXTENTRYDISPLAYLENGTH = 40; JoyButtonSlot::JoyButtonSlot(QObject *parent) : QObject(parent), @@ -38,8 +36,8 @@ JoyButtonSlot::JoyButtonSlot(QObject *parent) : qInstallMessageHandler(MessageHandler::myMessageOutput); deviceCode = 0; - mode = JoyKeyboard; - distance = 0.0; + m_mode = JoyKeyboard; + m_distance = 0.0; previousDistance = 0.0; qkeyaliasCode = 0; easingActive = false; @@ -54,13 +52,10 @@ JoyButtonSlot::JoyButtonSlot(int code, JoySlotInputAction mode, QObject *parent) deviceCode = 0; qkeyaliasCode = 0; - if (code > 0) - { - deviceCode = code; - } + if (code > 0) deviceCode = code; - this->mode = mode; - distance = 0.0; + m_mode = mode; + m_distance = 0.0; easingActive = false; } @@ -73,18 +68,12 @@ JoyButtonSlot::JoyButtonSlot(int code, int alias, JoySlotInputAction mode, QObje deviceCode = 0; qkeyaliasCode = 0; - if (code > 0) - { - deviceCode = code; - } + if (code > 0) deviceCode = code; - if (alias > 0) - { - qkeyaliasCode = alias; - } + if (alias > 0) qkeyaliasCode = alias; - this->mode = mode; - distance = 0.0; + m_mode = mode; + m_distance = 0.0; easingActive = false; } @@ -96,10 +85,10 @@ JoyButtonSlot::JoyButtonSlot(JoyButtonSlot *slot, QObject *parent) : deviceCode = slot->deviceCode; qkeyaliasCode = slot->qkeyaliasCode; - mode = slot->mode; - distance = slot->distance; + m_mode = slot->m_mode; + m_distance = slot->m_distance; easingActive = false; - textData = slot->getTextData(); + m_textData = slot->getTextData(); extraData = slot->getExtraData(); } @@ -111,14 +100,15 @@ JoyButtonSlot::JoyButtonSlot(QString text, JoySlotInputAction mode, QObject *par deviceCode = 0; qkeyaliasCode = 0; - this->mode = mode; - distance = 0.0; + m_mode = mode; + m_distance = 0.0; easingActive = false; + if ((mode == JoyLoadProfile) || (mode == JoyTextEntry) || (mode == JoyExecute)) { - textData = text; + m_textData = text; } } @@ -137,7 +127,7 @@ void JoyButtonSlot::setSlotCode(int code, int alias) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((mode == JoyButtonSlot::JoyKeyboard) && (code > 0)) + if ((m_mode == JoyButtonSlot::JoyKeyboard) && (code > 0)) { deviceCode = code; qkeyaliasCode = alias; @@ -167,14 +157,14 @@ void JoyButtonSlot::setSlotMode(JoySlotInputAction selectedMode) { qInstallMessageHandler(MessageHandler::myMessageOutput); - mode = selectedMode; + m_mode = selectedMode; } JoyButtonSlot::JoySlotInputAction JoyButtonSlot::getSlotMode() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return mode; + return m_mode; } QString JoyButtonSlot::movementString() @@ -183,24 +173,27 @@ QString JoyButtonSlot::movementString() QString newlabel = QString(); - if (mode == JoyMouseMovement) + if (m_mode == JoyMouseMovement) { newlabel.append(trUtf8("Mouse")).append(" "); - if (deviceCode == JoyButtonSlot::MouseUp) - { - newlabel.append(trUtf8("Up")); - } - else if (deviceCode == JoyButtonSlot::MouseDown) - { - newlabel.append(trUtf8("Down")); - } - else if (deviceCode == JoyButtonSlot::MouseLeft) - { - newlabel.append(trUtf8("Left")); - } - else if (deviceCode == JoyButtonSlot::MouseRight) + + switch(deviceCode) { - newlabel.append(trUtf8("Right")); + case 1: + newlabel.append(trUtf8("Up")); + break; + + case 2: + newlabel.append(trUtf8("Down")); + break; + + case 3: + newlabel.append(trUtf8("Left")); + break; + + case 4: + newlabel.append(trUtf8("Right")); + break; } } @@ -211,14 +204,14 @@ void JoyButtonSlot::setDistance(double distance) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->distance = distance; + m_distance = distance; } double JoyButtonSlot::getMouseDistance() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return distance; + return m_distance; } QElapsedTimer* JoyButtonSlot::getMouseInterval() @@ -246,6 +239,7 @@ void JoyButtonSlot::readConfig(QXmlStreamReader *xml) QString extraStringData = QString(); xml->readNextStartElement(); + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != "slot"))) { if ((xml->name() == "code") && xml->isStartElement()) @@ -253,10 +247,8 @@ void JoyButtonSlot::readConfig(QXmlStreamReader *xml) QString temptext = xml->readElementText(); bool ok = false; int tempchoice = temptext.toInt(&ok, 0); - if (ok) - { - this->setSlotCode(tempchoice); - } + + if (ok) this->setSlotCode(tempchoice); } else if ((xml->name() == "profile") && xml->isStartElement()) { @@ -372,6 +364,7 @@ void JoyButtonSlot::readConfig(QXmlStreamReader *xml) else if ((this->getSlotMode() == JoyButtonSlot::JoyLoadProfile) && !profile.isEmpty()) { QFileInfo profileInfo(profile); + if (!profileInfo.exists() || !((profileInfo.suffix() == "amgp") || (profileInfo.suffix() == "xml"))) { this->setTextData(""); @@ -381,12 +374,9 @@ void JoyButtonSlot::readConfig(QXmlStreamReader *xml) this->setTextData(profile); } } - else if (this->getSlotMode() == JoySetChange) + else if (this->getSlotMode() == JoySetChange && !(this->getSlotCode() >= 0) && !(this->getSlotCode() < GlobalVariables::InputDevice::NUMBER_JOYSETS)) { - if (!(this->getSlotCode() >= 0) && !(this->getSlotCode() < InputDevice::NUMBER_JOYSETS)) - { - this->setSlotCode(-1); - } + this->setSlotCode(-1); } else if ((this->getSlotMode() == JoyTextEntry) && !tempStringData.isEmpty()) { @@ -395,13 +385,13 @@ void JoyButtonSlot::readConfig(QXmlStreamReader *xml) else if ((this->getSlotMode() == JoyExecute) && !tempStringData.isEmpty()) { QFileInfo tempFile(tempStringData); + if (tempFile.exists() && tempFile.isExecutable()) { this->setTextData(tempStringData); + if (!extraStringData.isEmpty()) - { this->setExtraData(QVariant(extraStringData)); - } } } } @@ -413,22 +403,20 @@ void JoyButtonSlot::writeConfig(QXmlStreamWriter *xml) xml->writeStartElement(getXmlName()); - if (mode == JoyKeyboard) + if (m_mode == JoyKeyboard) { int basekey = AntKeyMapper::getInstance()->returnQtKey(deviceCode); int qtkey = this->getSlotCodeAlias(); + if ((qtkey > 0) || (basekey > 0)) { // Did not add an alias to slot. If a possible Qt key value // was found, use it. - if ((qtkey == 0) && (basekey > 0)) - { - qtkey = basekey; - } + if ((qtkey == 0) && (basekey > 0)) qtkey = basekey; // Found a valid abstract keysym. #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "ANT KEY: " << QString::number(qtkey, 16); + qDebug() << "ANT KEY: " << QString::number(qtkey, 16); #endif xml->writeTextElement("code", QString("0x%1").arg(qtkey, 0, 16)); @@ -439,23 +427,24 @@ void JoyButtonSlot::writeConfig(QXmlStreamWriter *xml) int tempkey = deviceCode | QtKeyMapperBase::nativeKeyPrefix; #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "ANT KEY: " << QString::number(tempkey, 16); + qDebug() << "ANT KEY: " << QString::number(tempkey, 16); #endif xml->writeTextElement("code", QString("0x%1").arg(tempkey, 0, 16)); } } - else if ((mode == JoyLoadProfile) && !textData.isEmpty()) + else if ((m_mode == JoyLoadProfile) && !m_textData.isEmpty()) { - xml->writeTextElement("profile", textData); + xml->writeTextElement("profile", m_textData); } - else if ((mode == JoyTextEntry) && !textData.isEmpty()) + else if ((m_mode == JoyTextEntry) && !m_textData.isEmpty()) { - xml->writeTextElement("text", textData); + xml->writeTextElement("text", m_textData); } - else if ((mode == JoyExecute) && !textData.isEmpty()) + else if ((m_mode == JoyExecute) && !m_textData.isEmpty()) { - xml->writeTextElement("path", textData); + xml->writeTextElement("path", m_textData); + if (!extraData.isNull() && extraData.canConvert()) { xml->writeTextElement("arguments", extraData.toString()); @@ -467,69 +456,71 @@ void JoyButtonSlot::writeConfig(QXmlStreamWriter *xml) } xml->writeStartElement("mode"); - if (mode == JoyKeyboard) - { - xml->writeCharacters("keyboard"); - } - else if (mode == JoyMouseButton) - { - xml->writeCharacters("mousebutton"); - } - else if (mode == JoyMouseMovement) - { - xml->writeCharacters("mousemovement"); - } - else if (mode == JoyPause) - { - xml->writeCharacters("pause"); - } - else if (mode == JoyHold) - { - xml->writeCharacters("hold"); - } - else if (mode == JoyCycle) - { - xml->writeCharacters("cycle"); - } - else if (mode == JoyDistance) - { - xml->writeCharacters("distance"); - } - else if (mode == JoyRelease) - { - xml->writeCharacters("release"); - } - else if (mode == JoyMouseSpeedMod) - { - xml->writeCharacters("mousespeedmod"); - } - else if (mode == JoyKeyPress) - { - xml->writeCharacters("keypress"); - } - else if (mode == JoyDelay) - { - xml->writeCharacters("delay"); - } - else if (mode == JoyLoadProfile) - { - xml->writeCharacters("loadprofile"); - } - else if (mode == JoySetChange) - { - xml->writeCharacters("setchange"); - } - else if (mode == JoyTextEntry) - { - xml->writeCharacters("textentry"); - } - else if (mode == JoyExecute) + + switch(m_mode) { - xml->writeCharacters("execute"); + case JoyKeyboard: + xml->writeCharacters("keyboard"); + break; + + case JoyMouseButton: + xml->writeCharacters("mousebutton"); + break; + + case JoyMouseMovement: + xml->writeCharacters("mousemovement"); + break; + + case JoyPause: + xml->writeCharacters("pause"); + break; + + case JoyHold: + xml->writeCharacters("hold"); + break; + + case JoyCycle: + xml->writeCharacters("cycle"); + break; + + case JoyDistance: + xml->writeCharacters("distance"); + break; + + case JoyRelease: + xml->writeCharacters("release"); + break; + + case JoyMouseSpeedMod: + xml->writeCharacters("mousespeedmod"); + break; + + case JoyKeyPress: + xml->writeCharacters("keypress"); + break; + + case JoyDelay: + xml->writeCharacters("delay"); + break; + + case JoyLoadProfile: + xml->writeCharacters("loadprofile"); + break; + + case JoySetChange: + xml->writeCharacters("setchange"); + break; + + case JoyTextEntry: + xml->writeCharacters("textentry"); + break; + + case JoyExecute: + xml->writeCharacters("execute"); + break; } xml->writeEndElement(); - xml->writeEndElement(); } @@ -537,7 +528,7 @@ QString JoyButtonSlot::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + return GlobalVariables::JoyButtonSlot::xmlName; } QString JoyButtonSlot::getSlotString() @@ -548,186 +539,209 @@ QString JoyButtonSlot::getSlotString() if (deviceCode >= 0) { - if (mode == JoyButtonSlot::JoyKeyboard) + switch(m_mode) { - int tempDeviceCode = deviceCode; -#ifdef Q_OS_WIN - QtKeyMapperBase *nativeWinKeyMapper = AntKeyMapper::getInstance()->getNativeKeyMapper(); - if (nativeWinKeyMapper) + case JoyButtonSlot::JoyKeyboard: { - tempDeviceCode = nativeWinKeyMapper->returnVirtualKey(qkeyaliasCode); + int tempDeviceCode = deviceCode; + #ifdef Q_OS_WIN + QtKeyMapperBase *nativeWinKeyMapper = AntKeyMapper::getInstance()->getNativeKeyMapper(); + if (nativeWinKeyMapper) + tempDeviceCode = nativeWinKeyMapper->returnVirtualKey(qkeyaliasCode); + #endif + newlabel = newlabel.append(keysymToKeyString(tempDeviceCode, qkeyaliasCode).toUpper()); + break; + } -#endif - newlabel = newlabel.append(keysymToKeyString(tempDeviceCode, qkeyaliasCode).toUpper()); - } - else if (mode == JoyButtonSlot::JoyMouseButton) - { - newlabel.append(trUtf8("Mouse")).append(" "); - switch (deviceCode) + case JoyButtonSlot::JoyMouseButton: { - case 1: - newlabel.append(trUtf8("LB")); - break; - case 2: - newlabel.append(trUtf8("MB")); - break; - case 3: - newlabel.append(trUtf8("RB")); - break; -#ifdef Q_OS_WIN - case 8: - newlabel.append(trUtf8("B4")); - break; - case 9: - newlabel.append(trUtf8("B5")); - break; -#endif - default: - newlabel.append(QString::number(deviceCode)); - break; - } - } - else if (mode == JoyMouseMovement) - { - newlabel.append(movementString()); - } - else if (mode == JoyPause) - { - int minutes = deviceCode / 1000 / 60; - int seconds = (deviceCode / 1000 % 60); - int hundredths = deviceCode % 1000 / 10; + newlabel.append(trUtf8("Mouse")).append(" "); - newlabel.append(trUtf8("Pause")).append(" "); - if (minutes > 0) + switch (deviceCode) + { + case 1: + newlabel.append(trUtf8("LB")); + break; + case 2: + newlabel.append(trUtf8("MB")); + break; + case 3: + newlabel.append(trUtf8("RB")); + break; + #ifdef Q_OS_WIN + case 8: + newlabel.append(trUtf8("B4")); + break; + case 9: + newlabel.append(trUtf8("B5")); + break; + #endif + default: + newlabel.append(QString::number(deviceCode)); + break; + } + + break; + } + case JoyMouseMovement: { - newlabel.append(QString("%1:").arg(minutes, 2, 10, QChar('0'))); + newlabel.append(movementString()); + break; } + case JoyPause: + { + int minutes = deviceCode / 1000 / 60; + int seconds = (deviceCode / 1000 % 60); + int hundredths = deviceCode % 1000 / 10; - newlabel.append(QString("%1.%2") - .arg(seconds, 2, 10, QChar('0')) - .arg(hundredths, 2, 10, QChar('0'))); - } - else if (mode == JoyHold) - { - int minutes = deviceCode / 1000 / 60; - int seconds = (deviceCode / 1000 % 60); - int hundredths = deviceCode % 1000 / 10; + newlabel.append(trUtf8("Pause")).append(" "); - newlabel.append(trUtf8("Hold")).append(" "); - if (minutes > 0) - { - newlabel.append(QString("%1:").arg(minutes, 2, 10, QChar('0'))); - } + if (minutes > 0) + newlabel.append(QString("%1:").arg(minutes, 2, 10, QChar('0'))); - newlabel.append(QString("%1.%2") - .arg(seconds, 2, 10, QChar('0')) - .arg(hundredths, 2, 10, QChar('0'))); - } - else if (mode == JoyButtonSlot::JoyCycle) - { - newlabel.append(trUtf8("Cycle")); - } - else if (mode == JoyDistance) - { - QString temp(trUtf8("Distance")); - temp.append(" ").append(QString::number(deviceCode).append("%")); - newlabel.append(temp); - } - else if (mode == JoyRelease) - { - int minutes = deviceCode / 1000 / 60; - int seconds = (deviceCode / 1000 % 60); - int hundredths = deviceCode % 1000 / 10; + newlabel.append(QString("%1.%2") + .arg(seconds, 2, 10, QChar('0')) + .arg(hundredths, 2, 10, QChar('0'))); - newlabel.append(trUtf8("Release")).append(" "); - if (minutes > 0) - { - newlabel.append(QString("%1:").arg(minutes, 2, 10, QChar('0'))); + break; } + case JoyHold: + { + int minutes = deviceCode / 1000 / 60; + int seconds = (deviceCode / 1000 % 60); + int hundredths = deviceCode % 1000 / 10; - newlabel.append(QString("%1.%2") - .arg(seconds, 2, 10, QChar('0')) - .arg(hundredths, 2, 10, QChar('0'))); - } - else if (mode == JoyMouseSpeedMod) - { - QString temp = QString(); - temp.append(trUtf8("Mouse Mod")).append(" "); - temp.append(QString::number(deviceCode).append("%")); - newlabel.append(temp); - } - else if (mode == JoyKeyPress) - { - int minutes = deviceCode / 1000 / 60; - int seconds = (deviceCode / 1000 % 60); - int hundredths = deviceCode % 1000 / 10; + newlabel.append(trUtf8("Hold")).append(" "); + + if (minutes > 0) + newlabel.append(QString("%1:").arg(minutes, 2, 10, QChar('0'))); - QString temp = QString(); - temp.append(trUtf8("Press Time")).append(" "); - if (minutes > 0) + newlabel.append(QString("%1.%2") + .arg(seconds, 2, 10, QChar('0')) + .arg(hundredths, 2, 10, QChar('0'))); + + break; + } + case JoyButtonSlot::JoyCycle: { - temp.append(QString("%1:").arg(minutes, 2, 10, QChar('0'))); + newlabel.append(trUtf8("Cycle")); + break; } + case JoyDistance: + { + QString temp(trUtf8("Distance")); + temp.append(" ").append(QString::number(deviceCode).append("%")); + newlabel.append(temp); - temp.append(QString("%1.%2") - .arg(seconds, 2, 10, QChar('0')) - .arg(hundredths, 2, 10, QChar('0'))); + break; + } + case JoyRelease: + { + int minutes = deviceCode / 1000 / 60; + int seconds = (deviceCode / 1000 % 60); + int hundredths = deviceCode % 1000 / 10; - newlabel.append(temp); - } - else if (mode == JoyDelay) - { - int minutes = deviceCode / 1000 / 60; - int seconds = (deviceCode / 1000 % 60); - int hundredths = deviceCode % 1000 / 10; + newlabel.append(trUtf8("Release")).append(" "); + + if (minutes > 0) + newlabel.append(QString("%1:").arg(minutes, 2, 10, QChar('0'))); + + newlabel.append(QString("%1.%2") + .arg(seconds, 2, 10, QChar('0')) + .arg(hundredths, 2, 10, QChar('0'))); - QString temp = QString(); - temp.append(trUtf8("Delay")).append(" "); - if (minutes > 0) + break; + } + case JoyMouseSpeedMod: { - temp.append(QString("%1:").arg(minutes, 2, 10, QChar('0'))); + QString temp = QString(); + temp.append(trUtf8("Mouse Mod")).append(" "); + temp.append(QString::number(deviceCode).append("%")); + newlabel.append(temp); + + break; } + case JoyKeyPress: + { + int minutes = deviceCode / 1000 / 60; + int seconds = (deviceCode / 1000 % 60); + int hundredths = deviceCode % 1000 / 10; + QString temp(trUtf8("Press Time").append(" ")); - temp.append(QString("%1.%2") - .arg(seconds, 2, 10, QChar('0')) - .arg(hundredths, 2, 10, QChar('0'))); + if (minutes > 0) + temp.append(QString("%1:").arg(minutes, 2, 10, QChar('0'))); - newlabel.append(temp); - } - else if (mode == JoyLoadProfile) - { - if (!textData.isEmpty()) + temp.append(QString("%1.%2") + .arg(seconds, 2, 10, QChar('0')) + .arg(hundredths, 2, 10, QChar('0'))); + + newlabel.append(temp); + + break; + } + case JoyDelay: { - QFileInfo profileInfo(textData); - QString temp = QString(); - temp.append(trUtf8("Load %1").arg(PadderCommon::getProfileName(profileInfo))); + int minutes = deviceCode / 1000 / 60; + int seconds = (deviceCode / 1000 % 60); + int hundredths = deviceCode % 1000 / 10; + QString temp(trUtf8("Delay").append(" ")); + + if (minutes > 0) + temp.append(QString("%1:").arg(minutes, 2, 10, QChar('0'))); + + temp.append(QString("%1.%2") + .arg(seconds, 2, 10, QChar('0')) + .arg(hundredths, 2, 10, QChar('0'))); + newlabel.append(temp); + + break; } - } - else if (mode == JoySetChange) - { - newlabel.append(trUtf8("Set Change %1").arg(deviceCode+1)); - } - else if (mode == JoyTextEntry) - { - QString temp = textData; - if (temp.length() > MAXTEXTENTRYDISPLAYLENGTH) + case JoyLoadProfile: { - temp.truncate(MAXTEXTENTRYDISPLAYLENGTH - 3); - temp.append("..."); + if (!m_textData.isEmpty()) + { + QFileInfo profileInfo(m_textData); + QString temp(trUtf8("Load %1").arg(PadderCommon::getProfileName(profileInfo))); + newlabel.append(temp); + } + + break; } - newlabel.append(trUtf8("[Text] %1").arg(temp)); - } - else if (mode == JoyExecute) - { - QString temp = QString(); - if (!textData.isEmpty()) + case JoySetChange: { - QFileInfo tempFileInfo(textData); - temp.append(tempFileInfo.fileName()); + newlabel.append(trUtf8("Set Change %1").arg(deviceCode+1)); + + break; + } + case JoyTextEntry: + { + QString temp = m_textData; + + if (temp.length() > GlobalVariables::JoyButtonSlot::MAXTEXTENTRYDISPLAYLENGTH) + { + temp.truncate(GlobalVariables::JoyButtonSlot::MAXTEXTENTRYDISPLAYLENGTH - 3); + temp.append("..."); + } + + newlabel.append(trUtf8("[Text] %1").arg(temp)); + + break; } + case JoyExecute: + { + QString temp = QString(); + + if (!m_textData.isEmpty()) + { + QFileInfo tempFileInfo(m_textData); + temp.append(tempFileInfo.fileName()); + } + + newlabel.append(trUtf8("[Exec] %1").arg(temp)); - newlabel.append(trUtf8("[Exec] %1").arg(temp)); + break; + } } } else @@ -757,7 +771,8 @@ bool JoyButtonSlot::isModifierKey() qInstallMessageHandler(MessageHandler::myMessageOutput); bool modifier = false; - if ((mode == JoyKeyboard) && AntKeyMapper::getInstance()->isModifierKey(qkeyaliasCode)) + + if ((m_mode == JoyKeyboard) && AntKeyMapper::getInstance()->isModifierKey(qkeyaliasCode)) { modifier = true; } @@ -790,14 +805,14 @@ void JoyButtonSlot::setTextData(QString textData) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->textData = textData; + m_textData = textData; } QString JoyButtonSlot::getTextData() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return textData; + return m_textData; } void JoyButtonSlot::setExtraData(QVariant data) @@ -819,72 +834,27 @@ bool JoyButtonSlot::isValidSlot() qInstallMessageHandler(MessageHandler::myMessageOutput); bool result = true; - switch (mode) + + switch (m_mode) { case JoyLoadProfile: case JoyTextEntry: case JoyExecute: { - if (textData.isEmpty()) - { - result = false; - } + if (m_textData.isEmpty()) result = false; break; } case JoySetChange: { - if (deviceCode < 0) - { - result = false; - } + if (deviceCode < 0) result = false; break; } - case JoyKeyboard: - { - break; - } - case JoyMouseButton: - { - break; - } - case JoyMouseMovement: - { - break; - } - case JoyPause: - { - break; - } - case JoyHold: - { - break; - } - case JoyCycle: - { - break; - } - case JoyDistance: - { - break; - } - case JoyRelease: - { - break; - } - case JoyMouseSpeedMod: - { - break; - } - case JoyKeyPress: - { - break; - } - case JoyDelay: - { - break; - } + default: + { + break; + } } return result; diff --git a/src/joybuttonslot.h b/src/joybuttonslot.h old mode 100644 new mode 100755 index 76e80e866..8ab94bcb7 --- a/src/joybuttonslot.h +++ b/src/joybuttonslot.h @@ -80,23 +80,18 @@ class JoyButtonSlot : public QObject virtual void readConfig(QXmlStreamReader *xml); virtual void writeConfig(QXmlStreamWriter *xml); - - static const int JOYSPEED; - static const QString xmlName; private: int deviceCode; int qkeyaliasCode; // unsigned - JoySlotInputAction mode; - double distance; + JoySlotInputAction m_mode; + double m_distance; double previousDistance; QElapsedTimer mouseInterval; QTime easingTime; bool easingActive; - QString textData; + QString m_textData; QVariant extraData; - - static const int MAXTEXTENTRYDISPLAYLENGTH; }; diff --git a/src/joybuttonstatusbox.cpp b/src/joybuttonstatusbox.cpp old mode 100644 new mode 100755 index 16511f125..a192e725b --- a/src/joybuttonstatusbox.cpp +++ b/src/joybuttonstatusbox.cpp @@ -24,7 +24,6 @@ #include #include - JoyButtonStatusBox::JoyButtonStatusBox(JoyButton *button, QWidget *parent) : QPushButton(parent) { diff --git a/src/joybuttonstatusbox.h b/src/joybuttonstatusbox.h old mode 100644 new mode 100755 diff --git a/src/joybuttontypes/joyaxisbutton.cpp b/src/joybuttontypes/joyaxisbutton.cpp old mode 100644 new mode 100755 index cf43ffbe4..656e3f027 --- a/src/joybuttontypes/joyaxisbutton.cpp +++ b/src/joybuttontypes/joyaxisbutton.cpp @@ -17,6 +17,7 @@ #include "joyaxisbutton.h" +#include "globalvariables.h" #include "messagehandler.h" #include "joyaxis.h" #include "joybutton.h" @@ -28,20 +29,21 @@ #include -const QString JoyAxisButton::xmlName = "axisbutton"; JoyAxisButton::JoyAxisButton(JoyAxis *axis, int index, int originset, SetJoystick *parentSet, QObject *parent) : JoyGradientButton(index, originset, parentSet, parent) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->axis = axis; + + m_axis = axis; } -QString JoyAxisButton::getPartialName(bool forceFullFormat, bool displayNames) + +QString JoyAxisButton::getPartialName(bool forceFullFormat, bool displayNames) const { qInstallMessageHandler(MessageHandler::myMessageOutput); - QString temp = QString(axis->getPartialName(forceFullFormat, displayNames)); + QString temp = QString(m_axis->getPartialName(forceFullFormat, displayNames)); temp.append(": "); if (!buttonName.isEmpty() && displayNames) @@ -50,6 +52,7 @@ QString JoyAxisButton::getPartialName(bool forceFullFormat, bool displayNames) { temp.append(trUtf8("Button")).append(" "); } + temp.append(buttonName); } else if (!defaultButtonName.isEmpty() && displayNames) @@ -58,22 +61,28 @@ QString JoyAxisButton::getPartialName(bool forceFullFormat, bool displayNames) { temp.append(trUtf8("Button")).append(" "); } + temp.append(defaultButtonName); } else { QString buttontype = QString(); - if (index == 0) + + switch(m_index) { + + case 0: buttontype = trUtf8("Negative"); - } - else if (index == 1) - { + break; + + case 1: buttontype = trUtf8("Positive"); - } - else - { + break; + + default: buttontype = trUtf8("Unknown"); + break; + } temp.append(trUtf8("Button")).append(" ").append(buttontype); @@ -82,17 +91,20 @@ QString JoyAxisButton::getPartialName(bool forceFullFormat, bool displayNames) return temp; } + QString JoyAxisButton::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + return GlobalVariables::JoyAxisButton::xmlName; } + void JoyAxisButton::setChangeSetCondition(SetChangeCondition condition, bool passive, bool updateActiveString) { qInstallMessageHandler(MessageHandler::myMessageOutput); + SetChangeCondition oldCondition = setSelectionCondition; if ((condition != setSelectionCondition) && !passive) @@ -100,12 +112,12 @@ void JoyAxisButton::setChangeSetCondition(SetChangeCondition condition, bool pas if ((condition == SetChangeWhileHeld) || (condition == SetChangeTwoWay)) { // Set new condition - emit setAssignmentChanged(index, this->axis->getIndex(), setSelection, condition); + emit setAssignmentChanged(m_index, m_axis->getIndex(), setSelection, condition); } else if ((setSelectionCondition == SetChangeWhileHeld) || (setSelectionCondition == SetChangeTwoWay)) { // Remove old condition - emit setAssignmentChanged(index, this->axis->getIndex(), setSelection, SetChangeDisabled); + emit setAssignmentChanged(m_index, m_axis->getIndex(), setSelection, SetChangeDisabled); } setSelectionCondition = condition; @@ -140,7 +152,7 @@ double JoyAxisButton::getDistanceFromDeadZone() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return axis->getDistanceFromDeadZone(); + return m_axis->getDistanceFromDeadZone(); } /** @@ -154,13 +166,14 @@ double JoyAxisButton::getMouseDistanceFromDeadZone() return this->getDistanceFromDeadZone(); } + void JoyAxisButton::setVDPad(VDPad *vdpad) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (axis->isPartControlStick()) + if (m_axis->isPartControlStick()) { - axis->removeControlStick(); + m_axis->removeControlStick(); } JoyButton::setVDPad(vdpad); @@ -193,33 +206,32 @@ bool JoyAxisButton::isPartRealAxis() return true; } + double JoyAxisButton::getAccelerationDistance() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double distance = 0.0; - distance = axis->getRawDistance(axis->getCurrentThrottledValue()); - return distance; + return m_axis->getRawDistance(m_axis->getCurrentThrottledValue()); } + double JoyAxisButton::getLastAccelerationDistance() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double distance = 0.0; - distance = axis->getRawDistance(axis->getLastKnownThrottleValue()); - - return distance; + return m_axis->getRawDistance(m_axis->getLastKnownThrottleValue()); } + double JoyAxisButton::getLastMouseDistanceFromDeadZone() { qInstallMessageHandler(MessageHandler::myMessageOutput); double distance = 0.0; - if (axis->getAxisButtonByValue(axis->getLastKnownThrottleValue()) == this) + + if (m_axis->getAxisButtonByValue(m_axis->getLastKnownThrottleValue()) == this) { - distance = axis->getDistanceFromDeadZone(axis->getLastKnownThrottleValue()); + distance = m_axis->getDistanceFromDeadZone(m_axis->getLastKnownThrottleValue()); } return distance; @@ -228,5 +240,5 @@ double JoyAxisButton::getLastMouseDistanceFromDeadZone() JoyAxis* JoyAxisButton::getAxis() const { - return axis; + return m_axis; } diff --git a/src/joybuttontypes/joyaxisbutton.h b/src/joybuttontypes/joyaxisbutton.h old mode 100644 new mode 100755 index 182dace03..07d495b30 --- a/src/joybuttontypes/joyaxisbutton.h +++ b/src/joybuttontypes/joyaxisbutton.h @@ -34,7 +34,7 @@ class JoyAxisButton : public JoyGradientButton public: explicit JoyAxisButton(JoyAxis *axis, int index, int originset, SetJoystick *parentSet, QObject *parent=0); - virtual QString getPartialName(bool forceFullFormat=false, bool displayNames=false); + virtual QString getPartialName(bool forceFullFormat=false, bool displayNames=false) const; virtual QString getXmlName(); virtual double getDistanceFromDeadZone(); @@ -51,13 +51,12 @@ class JoyAxisButton : public JoyGradientButton virtual double getLastAccelerationDistance(); JoyAxis* getAxis() const; - static const QString xmlName; signals: void setAssignmentChanged(int current_button, int axis_index, int associated_set, int mode); private: - JoyAxis *axis; + JoyAxis *m_axis; }; #endif // JOYAXISBUTTON_H diff --git a/src/joybuttontypes/joycontrolstickbutton.cpp b/src/joybuttontypes/joycontrolstickbutton.cpp old mode 100644 new mode 100755 index 6769cfb75..cbc4c4f59 --- a/src/joybuttontypes/joycontrolstickbutton.cpp +++ b/src/joybuttontypes/joycontrolstickbutton.cpp @@ -17,6 +17,7 @@ #include "joycontrolstickbutton.h" +#include "globalvariables.h" #include "messagehandler.h" #include "joycontrolstick.h" #include "joycontrolstickmodifierbutton.h" @@ -29,8 +30,6 @@ #include -const QString JoyControlStickButton::xmlName = "stickbutton"; - JoyControlStickButton::JoyControlStickButton(JoyControlStick *stick, int index, int originset, SetJoystick *parentSet, QObject *parent) : JoyGradientButton(index, originset, parentSet, parent) { @@ -39,56 +38,63 @@ JoyControlStickButton::JoyControlStickButton(JoyControlStick *stick, int index, this->stick = stick; } + JoyControlStickButton::JoyControlStickButton(JoyControlStick *stick, JoyStickDirectionsType::JoyStickDirections index, int originset, SetJoystick *parentSet, QObject *parent) : - JoyGradientButton(static_cast(index), originset, parentSet, parent) + JoyGradientButton(index, originset, parentSet, parent) { qInstallMessageHandler(MessageHandler::myMessageOutput); this->stick = stick; } + QString JoyControlStickButton::getDirectionName() const { qInstallMessageHandler(MessageHandler::myMessageOutput); QString label = QString(); - if (index == static_cast(JoyControlStick::StickUp)) + + switch(m_index) { + case 1: label.append(trUtf8("Up")); - } - else if (index == static_cast(JoyControlStick::StickDown)) - { + break; + + case 2: + label.append(trUtf8("Up")).append("+").append(trUtf8("Right")); + break; + + case 3: + label.append(trUtf8("Right")); + break; + + case 4: + label.append(trUtf8("Down")).append("+").append(trUtf8("Right")); + break; + + case 5: label.append(trUtf8("Down")); - } - else if (index == static_cast(JoyControlStick::StickLeft)) - { + break; + + case 6: + label.append(trUtf8("Down")).append("+").append(trUtf8("Left")); + break; + + case 7: label.append(trUtf8("Left")); - } - else if (index == static_cast(JoyControlStick::StickRight)) - { - label.append(trUtf8("Right")); - } - else if (index == static_cast(JoyControlStick::StickLeftUp)) - { + break; + + case 8: label.append(trUtf8("Up")).append("+").append(trUtf8("Left")); - } - else if (index == static_cast(JoyControlStick::StickLeftDown)) - { - label.append(trUtf8("Down")).append("+").append(trUtf8("Left")); - } - else if (index == static_cast(JoyControlStick::StickRightUp)) - { - label.append(trUtf8("Up")).append("+").append(trUtf8("Right")); - } - else if (index == static_cast(JoyControlStick::StickRightDown)) - { - label.append(trUtf8("Down")).append("+").append(trUtf8("Right")); + break; + } return label; } -QString JoyControlStickButton::getPartialName(bool forceFullFormat, bool displayNames) + +QString JoyControlStickButton::getPartialName(bool forceFullFormat, bool displayNames) const { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -119,14 +125,16 @@ QString JoyControlStickButton::getPartialName(bool forceFullFormat, bool display temp.append(trUtf8("Button")).append(" "); temp.append(getDirectionName()); } + return temp; } + QString JoyControlStickButton::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + return GlobalVariables::JoyControlStickButton::xmlName; } /** @@ -152,8 +160,11 @@ double JoyControlStickButton::getMouseDistanceFromDeadZone() return stick->calculateMouseDirectionalDistance(this); } -void JoyControlStickButton::setChangeSetCondition(SetChangeCondition condition, bool passive) + +void JoyControlStickButton::setChangeSetCondition(SetChangeCondition condition, bool passive, bool updateActiveString) { + Q_UNUSED(updateActiveString); + qInstallMessageHandler(MessageHandler::myMessageOutput); SetChangeCondition oldCondition = setSelectionCondition; @@ -163,12 +174,12 @@ void JoyControlStickButton::setChangeSetCondition(SetChangeCondition condition, if ((condition == SetChangeWhileHeld) || (condition == SetChangeTwoWay)) { // Set new condition - emit setAssignmentChanged(index, this->stick->getIndex(), setSelection, condition); + emit setAssignmentChanged(m_index, this->stick->getIndex(), setSelection, condition); } else if ((setSelectionCondition == SetChangeWhileHeld) || (setSelectionCondition == SetChangeTwoWay)) { // Remove old condition - emit setAssignmentChanged(index, this->stick->getIndex(), setSelection, SetChangeDisabled); + emit setAssignmentChanged(m_index, this->stick->getIndex(), setSelection, SetChangeDisabled); } setSelectionCondition = condition; @@ -190,18 +201,20 @@ void JoyControlStickButton::setChangeSetCondition(SetChangeCondition condition, } } -int JoyControlStickButton::getRealJoyNumber() + +int JoyControlStickButton::getRealJoyNumber() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return index; + return m_index; } + JoyStickDirectionsType::JoyStickDirections JoyControlStickButton::getDirection() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return static_cast(index); + return static_cast(m_index); } /** @@ -231,6 +244,7 @@ bool JoyControlStickButton::isPartRealAxis() return true; } + double JoyControlStickButton::getLastAccelerationDistance() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -239,6 +253,7 @@ double JoyControlStickButton::getLastAccelerationDistance() return temp; } + double JoyControlStickButton::getAccelerationDistance() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -263,6 +278,7 @@ QString JoyControlStickButton::getActiveZoneSummary() return temp; } + QString JoyControlStickButton::getCalculatedActiveZoneSummary() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -291,6 +307,7 @@ QString JoyControlStickButton::getCalculatedActiveZoneSummary() return temp; } + double JoyControlStickButton::getLastMouseDistanceFromDeadZone() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -298,21 +315,23 @@ double JoyControlStickButton::getLastMouseDistanceFromDeadZone() return stick->calculateLastMouseDirectionalDistance(this); } + double JoyControlStickButton::getCurrentSpringDeadCircle() { qInstallMessageHandler(MessageHandler::myMessageOutput); double result = (springDeadCircleMultiplier * 0.01); - if ((index == static_cast(JoyControlStick::StickLeft)) || (index == static_cast(JoyControlStick::StickRight))) + + if ((m_index == static_cast(JoyControlStick::StickLeft)) || (m_index == static_cast(JoyControlStick::StickRight))) { result = stick->getSpringDeadCircleX() * (springDeadCircleMultiplier * 0.01); } - else if ((index == static_cast(JoyControlStick::StickUp)) || (index == static_cast(JoyControlStick::StickDown))) + else if ((m_index == static_cast(JoyControlStick::StickUp)) || (m_index == static_cast(JoyControlStick::StickDown))) { result = stick->getSpringDeadCircleY() * (springDeadCircleMultiplier * 0.01); } - else if ((index == static_cast(JoyControlStick::StickRightUp)) || (index == static_cast(JoyControlStick::StickRightDown)) || - (index == static_cast(JoyControlStick::StickLeftDown)) || (index == static_cast(JoyControlStick::StickLeftUp))) + else if ((m_index == static_cast(JoyControlStick::StickRightUp)) || (m_index == static_cast(JoyControlStick::StickRightDown)) || + (m_index == static_cast(JoyControlStick::StickLeftDown)) || (m_index == static_cast(JoyControlStick::StickLeftUp))) { result = 0.0; } diff --git a/src/joybuttontypes/joycontrolstickbutton.h b/src/joybuttontypes/joycontrolstickbutton.h old mode 100644 new mode 100755 index b7434f35b..17e18881d --- a/src/joybuttontypes/joycontrolstickbutton.h +++ b/src/joybuttontypes/joycontrolstickbutton.h @@ -34,15 +34,15 @@ class JoyControlStickButton : public JoyGradientButton explicit JoyControlStickButton(JoyControlStick *stick, int index, int originset, SetJoystick *parentSet, QObject *parent = nullptr); explicit JoyControlStickButton(JoyControlStick *stick, JoyStickDirectionsType::JoyStickDirections index, int originset, SetJoystick *parentSet, QObject *parent = nullptr); - virtual int getRealJoyNumber(); - virtual QString getPartialName(bool forceFullFormat=false, bool displayNames=false); + virtual int getRealJoyNumber() const; + virtual QString getPartialName(bool forceFullFormat=false, bool displayNames=false) const; virtual QString getXmlName(); virtual double getDistanceFromDeadZone(); virtual double getMouseDistanceFromDeadZone(); virtual double getLastMouseDistanceFromDeadZone(); - virtual void setChangeSetCondition(SetChangeCondition condition, bool passive=false); + virtual void setChangeSetCondition(SetChangeCondition condition, bool passive=false, bool updateActiveString=true); virtual void setTurboMode(TurboMode mode); virtual bool isPartRealAxis(); virtual QString getActiveZoneSummary(); @@ -55,8 +55,6 @@ class JoyControlStickButton : public JoyGradientButton QString getDirectionName() const; JoyStickDirectionsType::JoyStickDirections getDirection() const; - static const QString xmlName; - protected: virtual double getCurrentSpringDeadCircle(); diff --git a/src/joybuttontypes/joycontrolstickmodifierbutton.cpp b/src/joybuttontypes/joycontrolstickmodifierbutton.cpp old mode 100644 new mode 100755 index b8d3cc26d..64590e401 --- a/src/joybuttontypes/joycontrolstickmodifierbutton.cpp +++ b/src/joybuttontypes/joycontrolstickmodifierbutton.cpp @@ -17,6 +17,7 @@ #include "joycontrolstickmodifierbutton.h" +#include "globalvariables.h" #include "messagehandler.h" #include "joycontrolstick.h" #include "setjoystick.h" @@ -26,7 +27,6 @@ #include #include -const QString JoyControlStickModifierButton::xmlName = "stickmodifierbutton"; JoyControlStickModifierButton::JoyControlStickModifierButton(JoyControlStick *stick, int originset, SetJoystick *parentSet, QObject *parent) : JoyGradientButton(0, originset, parentSet, parent) @@ -36,7 +36,8 @@ JoyControlStickModifierButton::JoyControlStickModifierButton(JoyControlStick *st this->stick = stick; } -QString JoyControlStickModifierButton::getPartialName(bool forceFullFormat, bool displayNames) + +QString JoyControlStickModifierButton::getPartialName(bool forceFullFormat, bool displayNames) const { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -66,14 +67,16 @@ QString JoyControlStickModifierButton::getPartialName(bool forceFullFormat, bool { temp.append(trUtf8("Modifier")); } + return temp; } + QString JoyControlStickModifierButton::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + return GlobalVariables::JoyControlStickModifierButton::xmlName; } /** @@ -99,14 +102,17 @@ double JoyControlStickModifierButton::getMouseDistanceFromDeadZone() return getDistanceFromDeadZone(); } -void JoyControlStickModifierButton::setChangeSetCondition(SetChangeCondition condition, bool passive) + +void JoyControlStickModifierButton::setChangeSetCondition(SetChangeCondition condition, bool passive, bool updateActiveString) { qInstallMessageHandler(MessageHandler::myMessageOutput); + Q_UNUSED(updateActiveString); Q_UNUSED(condition); Q_UNUSED(passive); } + JoyControlStick* JoyControlStickModifierButton::getStick() const { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -141,6 +147,7 @@ bool JoyControlStickModifierButton::isPartRealAxis() return true; } + bool JoyControlStickModifierButton::isModifierButton() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -148,6 +155,7 @@ bool JoyControlStickModifierButton::isModifierButton() return true; } + double JoyControlStickModifierButton::getAccelerationDistance() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -156,6 +164,7 @@ double JoyControlStickModifierButton::getAccelerationDistance() return temp; } + double JoyControlStickModifierButton::getLastAccelerationDistance() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -164,6 +173,7 @@ double JoyControlStickModifierButton::getLastAccelerationDistance() return temp; } + double JoyControlStickModifierButton::getLastMouseDistanceFromDeadZone() { qInstallMessageHandler(MessageHandler::myMessageOutput); diff --git a/src/joybuttontypes/joycontrolstickmodifierbutton.h b/src/joybuttontypes/joycontrolstickmodifierbutton.h old mode 100644 new mode 100755 index 10c023de3..e82da5c61 --- a/src/joybuttontypes/joycontrolstickmodifierbutton.h +++ b/src/joybuttontypes/joycontrolstickmodifierbutton.h @@ -30,13 +30,13 @@ class JoyControlStickModifierButton : public JoyGradientButton public: explicit JoyControlStickModifierButton(JoyControlStick *stick, int originset, SetJoystick *parentSet, QObject *parent = nullptr); - virtual QString getPartialName(bool forceFullFormat=false, bool displayNames=false); + virtual QString getPartialName(bool forceFullFormat=false, bool displayNames=false) const; virtual QString getXmlName(); virtual double getDistanceFromDeadZone(); virtual double getMouseDistanceFromDeadZone(); virtual double getLastMouseDistanceFromDeadZone(); - virtual void setChangeSetCondition(SetChangeCondition condition, bool passive=false); + virtual void setChangeSetCondition(SetChangeCondition condition, bool passive=false, bool updateActiveString=true); virtual void setTurboMode(TurboMode mode); virtual bool isPartRealAxis(); @@ -47,8 +47,6 @@ class JoyControlStickModifierButton : public JoyGradientButton JoyControlStick *getStick() const; - static const QString xmlName; - private: JoyControlStick *stick; diff --git a/src/joybuttontypes/joydpadbutton.cpp b/src/joybuttontypes/joydpadbutton.cpp old mode 100644 new mode 100755 index 341e2bca0..630045733 --- a/src/joybuttontypes/joydpadbutton.cpp +++ b/src/joybuttontypes/joydpadbutton.cpp @@ -17,6 +17,7 @@ #include "joydpadbutton.h" +#include "globalvariables.h" #include "messagehandler.h" #include "joydpad.h" #include "setjoystick.h" @@ -24,7 +25,6 @@ #include -const QString JoyDPadButton::xmlName = "dpadbutton"; // Initially, qualify direction as the button's index JoyDPadButton::JoyDPadButton(int direction, int originset, JoyDPad* dpad, SetJoystick *parentSet, QObject *parent) : @@ -32,76 +32,85 @@ JoyDPadButton::JoyDPadButton(int direction, int originset, JoyDPad* dpad, SetJoy { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->direction = direction; - this->dpad = dpad; + m_direction = direction; + m_dpad = dpad; } + QString JoyDPadButton::getDirectionName() const { qInstallMessageHandler(MessageHandler::myMessageOutput); QString label = QString (); - if (direction == DpadUp) - { - label.append(trUtf8("Up")); - } - else if (direction == DpadDown) - { - label.append(trUtf8("Down")); - } - else if (direction == DpadLeft) - { - label.append(trUtf8("Left")); - } - else if (direction == DpadRight) - { - label.append(trUtf8("Right")); - } - else if (direction == DpadLeftUp) - { - label.append(trUtf8("Up")).append("+").append(trUtf8("Left")); - } - else if (direction == DpadLeftDown) - { - label.append(trUtf8("Down")).append("+").append(trUtf8("Left")); - } - else if (direction == DpadRightUp) - { - label.append(trUtf8("Up")).append("+").append(trUtf8("Right")); - } - else if (direction == DpadRightDown) + + switch(m_direction) { - label.append(trUtf8("Down")).append("+").append(trUtf8("Right")); + case 1: + label.append(trUtf8("Up")); + break; + + case 2: + label.append(trUtf8("Right")); + break; + + case 3: + label.append(trUtf8("Up")).append("+").append(trUtf8("Right")); + break; + + case 4: + label.append(trUtf8("Down")); + break; + + case 6: + label.append(trUtf8("Down")).append("+").append(trUtf8("Right")); + break; + + case 8: + label.append(trUtf8("Left")); + break; + + case 9: + label.append(trUtf8("Up")).append("+").append(trUtf8("Left")); + break; + + case 12: + label.append(trUtf8("Down")).append("+").append(trUtf8("Left")); + break; } return label; } + QString JoyDPadButton::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + return GlobalVariables::JoyDPadButton::xmlName; } -int JoyDPadButton::getRealJoyNumber() + +int JoyDPadButton::getRealJoyNumber() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return index; + return m_index; } -QString JoyDPadButton::getPartialName(bool forceFullFormat, bool displayNames) + +QString JoyDPadButton::getPartialName(bool forceFullFormat, bool displayNames) const { qInstallMessageHandler(MessageHandler::myMessageOutput); - QString temp = dpad->getName().append(" - "); + QString temp = m_dpad->getName().append(" - "); + if (!buttonName.isEmpty() && displayNames) { if (forceFullFormat) { temp.append(trUtf8("Button")).append(" "); } + temp.append(buttonName); } else if (!defaultButtonName.isEmpty() && displayNames) @@ -110,6 +119,7 @@ QString JoyDPadButton::getPartialName(bool forceFullFormat, bool displayNames) { temp.append(trUtf8("Button")).append(" "); } + temp.append(defaultButtonName); } else @@ -117,6 +127,7 @@ QString JoyDPadButton::getPartialName(bool forceFullFormat, bool displayNames) temp.append(trUtf8("Button")).append(" "); temp.append(getDirectionName()); } + return temp; } @@ -128,6 +139,7 @@ void JoyDPadButton::reset() JoyButton::reset(); } + void JoyDPadButton::reset(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -136,8 +148,11 @@ void JoyDPadButton::reset(int index) reset(); } -void JoyDPadButton::setChangeSetCondition(SetChangeCondition condition, bool passive) + +void JoyDPadButton::setChangeSetCondition(SetChangeCondition condition, bool passive, bool updateActiveString) { + Q_UNUSED(updateActiveString); + qInstallMessageHandler(MessageHandler::myMessageOutput); SetChangeCondition oldCondition = setSelectionCondition; @@ -147,12 +162,12 @@ void JoyDPadButton::setChangeSetCondition(SetChangeCondition condition, bool pas if ((condition == SetChangeWhileHeld) || (condition == SetChangeTwoWay)) { // Set new condition - emit setAssignmentChanged(index, this->dpad->getJoyNumber(), setSelection, condition); + emit setAssignmentChanged(m_index, m_dpad->getJoyNumber(), setSelection, condition); } else if ((setSelectionCondition == SetChangeWhileHeld) || (setSelectionCondition == SetChangeTwoWay)) { // Remove old condition - emit setAssignmentChanged(index, this->dpad->getJoyNumber(), setSelection, SetChangeDisabled); + emit setAssignmentChanged(m_index, m_dpad->getJoyNumber(), setSelection, SetChangeDisabled); } setSelectionCondition = condition; @@ -174,16 +189,18 @@ void JoyDPadButton::setChangeSetCondition(SetChangeCondition condition, bool pas } } + JoyDPad* JoyDPadButton::getDPad() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return dpad; + return m_dpad; } + int JoyDPadButton::getDirection() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return direction; + return m_direction; } diff --git a/src/joybuttontypes/joydpadbutton.h b/src/joybuttontypes/joydpadbutton.h old mode 100644 new mode 100755 index cd4ad4c0d..3363d9adb --- a/src/joybuttontypes/joydpadbutton.h +++ b/src/joybuttontypes/joydpadbutton.h @@ -30,11 +30,11 @@ class JoyDPadButton : public JoyButton public: JoyDPadButton(int direction, int originset, JoyDPad* dpad, SetJoystick *parentSet, QObject *parent=0); - virtual int getRealJoyNumber(); - virtual QString getPartialName(bool forceFullFormat=false, bool displayNames=false); - virtual QString getXmlName(); + virtual int getRealJoyNumber() const override; + virtual QString getPartialName(bool forceFullFormat=false, bool displayNames=false) const override; + virtual QString getXmlName() override; - virtual void setChangeSetCondition(SetChangeCondition condition, bool passive=false); + virtual void setChangeSetCondition(SetChangeCondition condition, bool passive=false, bool updateActiveString=true) override; enum JoyDPadDirections { DpadCentered = 0, DpadUp = 1, DpadRight = 2, @@ -46,18 +46,16 @@ class JoyDPadButton : public JoyButton int getDirection() const; JoyDPad *getDPad() const; - static const QString xmlName; - signals: void setAssignmentChanged(int current_button, int dpad_index, int associated_set, int mode); public slots: - virtual void reset(); - virtual void reset(int index); + virtual void reset() override; + virtual void reset(int index) override; private: - int direction; - JoyDPad *dpad; + int m_direction; + JoyDPad *m_dpad; }; #endif // JOYDPADBUTTON_H diff --git a/src/joybuttontypes/joygradientbutton.cpp b/src/joybuttontypes/joygradientbutton.cpp old mode 100644 new mode 100755 index 989882091..1646aab0d --- a/src/joybuttontypes/joygradientbutton.cpp +++ b/src/joybuttontypes/joygradientbutton.cpp @@ -25,6 +25,7 @@ #include + JoyGradientButton::JoyGradientButton(int index, int originset, SetJoystick *parentSet, QObject *parent) : JoyButton(index, originset, parentSet, parent) { @@ -62,6 +63,7 @@ void JoyGradientButton::turboEvent() if (isKeyPressed) { changeState = false; + if (!turboTimer.isActive() || (turboTimer.interval() != 5)) { turboTimer.start(5); @@ -88,25 +90,26 @@ void JoyGradientButton::turboEvent() { if (getTurboMode() == GradientTurbo) { - tempInterval2 = static_cast(floor((getMouseDistanceFromDeadZone() * turboInterval) + 0.5)); + tempInterval2 = floor((getMouseDistanceFromDeadZone() * turboInterval) + 0.5); } else { - tempInterval2 = static_cast(floor((turboInterval * 0.5) + 0.5)); + tempInterval2 = floor((turboInterval * 0.5) + 0.5); } } else { if (getTurboMode() == GradientTurbo) { - tempInterval2 = static_cast(floor(((1 - getMouseDistanceFromDeadZone()) * turboInterval) + 0.5)); + tempInterval2 = floor(((1 - getMouseDistanceFromDeadZone()) * turboInterval) + 0.5); } else { double distance = getMouseDistanceFromDeadZone(); + if (distance > 0.0) { - tempInterval2 = static_cast(floor(((turboInterval / getMouseDistanceFromDeadZone()) * 0.5) + 0.5)); + tempInterval2 = floor(((turboInterval / getMouseDistanceFromDeadZone()) * 0.5) + 0.5); } else { @@ -121,6 +124,7 @@ void JoyGradientButton::turboEvent() // remaining time left. tempTurboInterval = tempInterval2 - turboHold.elapsed(); int timerInterval = qMin(tempTurboInterval, 5); + if (!turboTimer.isActive() || (turboTimer.interval() != timerInterval)) { turboTimer.start(timerInterval); @@ -165,11 +169,11 @@ void JoyGradientButton::turboEvent() { if (getTurboMode() == GradientTurbo) { - tempTurboInterval = static_cast(floor((getMouseDistanceFromDeadZone() * turboInterval) + 0.5)); + tempTurboInterval = floor((getMouseDistanceFromDeadZone() * turboInterval) + 0.5); } else { - tempTurboInterval = static_cast(floor((turboInterval * 0.5) + 0.5)); + tempTurboInterval = floor((turboInterval * 0.5) + 0.5); } int timerInterval = qMin(tempTurboInterval, 5); @@ -198,18 +202,20 @@ void JoyGradientButton::turboEvent() releaseDeskEvent(); isKeyPressed = false; + if (turboTimer.isActive()) { if (getTurboMode() == GradientTurbo) { - tempTurboInterval = static_cast(floor(((1 - getMouseDistanceFromDeadZone()) * turboInterval) + 0.5)); + tempTurboInterval = floor(((1 - getMouseDistanceFromDeadZone()) * turboInterval) + 0.5); } else { double distance = getMouseDistanceFromDeadZone(); + if (distance > 0.0) { - tempTurboInterval = static_cast(floor(((turboInterval / getMouseDistanceFromDeadZone()) * 0.5) + 0.5)); + tempTurboInterval = floor(((turboInterval / getMouseDistanceFromDeadZone()) * 0.5) + 0.5); } else { @@ -282,9 +288,10 @@ void JoyGradientButton::wheelEventVertical() else if ((diff >= 0.1) && (wheelSpeedY != 0)) { double distance = getMouseDistanceFromDeadZone(); + if (distance > 0.0) { - tempInterval = 1000 / wheelSpeedY / static_cast(distance); + tempInterval = 1000 / wheelSpeedY / distance; } else { @@ -297,6 +304,7 @@ void JoyGradientButton::wheelEventVertical() // remaining time left. tempInterval = tempInterval - wheelVerticalTime.elapsed(); tempInterval = qMin(tempInterval, 5); + if (!mouseWheelVerticalEventTimer.isActive() || (mouseWheelVerticalEventTimer.interval() != tempInterval)) { mouseWheelVerticalEventTimer.start(tempInterval); @@ -313,15 +321,17 @@ void JoyGradientButton::wheelEventVertical() if ((buttonslot != nullptr) && (wheelSpeedY != 0)) { bool isActive = getActiveSlots().contains(buttonslot); + if (isActive && activateEvent) { sendevent(buttonslot, true); sendevent(buttonslot, false); mouseWheelVerticalEventQueue.enqueue(buttonslot); double distance = getMouseDistanceFromDeadZone(); + if (distance > 0.0) { - tempInterval = 1000 / wheelSpeedY / static_cast(distance); + tempInterval = 1000 / wheelSpeedY / distance; } else { @@ -329,6 +339,7 @@ void JoyGradientButton::wheelEventVertical() } tempInterval = qMin(tempInterval, 5); + if (!mouseWheelVerticalEventTimer.isActive() || (mouseWheelVerticalEventTimer.interval() != tempInterval)) { mouseWheelVerticalEventTimer.start(tempInterval); @@ -342,10 +353,12 @@ void JoyGradientButton::wheelEventVertical() else if (!mouseWheelVerticalEventQueue.isEmpty() && (wheelSpeedY != 0)) { QQueue tempQueue; + while (!mouseWheelVerticalEventQueue.isEmpty()) { buttonslot = mouseWheelVerticalEventQueue.dequeue(); bool isActive = getActiveSlots().contains(buttonslot); + if (isActive && activateEvent) { sendevent(buttonslot, true); @@ -362,9 +375,10 @@ void JoyGradientButton::wheelEventVertical() { mouseWheelVerticalEventQueue = tempQueue; double distance = getMouseDistanceFromDeadZone(); + if (distance > 0.0) { - tempInterval = 1000 / wheelSpeedY / static_cast(distance); + tempInterval = 1000 / wheelSpeedY / distance; } else { @@ -372,6 +386,7 @@ void JoyGradientButton::wheelEventVertical() } tempInterval = qMin(tempInterval, 5); + if (!mouseWheelVerticalEventTimer.isActive() || (mouseWheelVerticalEventTimer.interval() != tempInterval)) { mouseWheelVerticalEventTimer.start(tempInterval); @@ -436,9 +451,10 @@ void JoyGradientButton::wheelEventHorizontal() else if ((diff >= 0.1) && (wheelSpeedX != 0)) { double distance = getMouseDistanceFromDeadZone(); + if (distance > 0.0) { - tempInterval = 1000 / wheelSpeedX / static_cast(distance); + tempInterval = 1000 / wheelSpeedX / distance; } else { @@ -451,6 +467,7 @@ void JoyGradientButton::wheelEventHorizontal() // remaining time left. tempInterval = tempInterval - wheelHorizontalTime.elapsed(); tempInterval = qMin(tempInterval, 5); + if (!mouseWheelHorizontalEventTimer.isActive() || (mouseWheelHorizontalEventTimer.interval() != tempInterval)) { mouseWheelHorizontalEventTimer.start(tempInterval); @@ -473,9 +490,10 @@ void JoyGradientButton::wheelEventHorizontal() sendevent(buttonslot, false); mouseWheelHorizontalEventQueue.enqueue(buttonslot); double distance = getMouseDistanceFromDeadZone(); + if (distance > 0.0) { - tempInterval = 1000 / wheelSpeedX / static_cast(distance); + tempInterval = 1000 / wheelSpeedX / distance; } else { @@ -501,6 +519,7 @@ void JoyGradientButton::wheelEventHorizontal() { buttonslot = mouseWheelHorizontalEventQueue.dequeue(); bool isActive = getActiveSlots().contains(buttonslot); + if (isActive) { sendevent(buttonslot, true); @@ -513,9 +532,10 @@ void JoyGradientButton::wheelEventHorizontal() { mouseWheelHorizontalEventQueue = tempQueue; double distance = getMouseDistanceFromDeadZone(); + if (distance > 0.0) { - tempInterval = 1000 / wheelSpeedX / static_cast(distance); + tempInterval = 1000 / wheelSpeedX / distance; } else { diff --git a/src/joybuttontypes/joygradientbutton.h b/src/joybuttontypes/joygradientbutton.h old mode 100644 new mode 100755 index 5374d4e54..b9e6be150 --- a/src/joybuttontypes/joygradientbutton.h +++ b/src/joybuttontypes/joygradientbutton.h @@ -29,6 +29,9 @@ class JoyGradientButton : public JoyButton public: explicit JoyGradientButton(int index, int originset, SetJoystick *parentSet, QObject *parent=0); + using JoyButton::getPartialName; + using JoyButton::setChangeSetCondition; + protected slots: virtual void turboEvent(); virtual void wheelEventVertical(); diff --git a/src/joybuttonwidget.cpp b/src/joybuttonwidget.cpp old mode 100644 new mode 100755 index cd4c40f40..08e3b9ec7 --- a/src/joybuttonwidget.cpp +++ b/src/joybuttonwidget.cpp @@ -29,7 +29,7 @@ JoyButtonWidget::JoyButtonWidget(JoyButton *button, bool displayNames, QWidget * { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->button = button; + m_button = button; refreshLabel(); enableFlashes(); @@ -47,15 +47,16 @@ JoyButton* JoyButtonWidget::getJoyButton() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return button; + return m_button; } void JoyButtonWidget::disableFlashes() { qInstallMessageHandler(MessageHandler::myMessageOutput); - disconnect(button, &JoyButton::clicked, this, &JoyButtonWidget::flash); - disconnect(button, &JoyButton::released, this, &JoyButtonWidget::unflash); + disconnect(m_button, &JoyButton::clicked, this, &JoyButtonWidget::flash); + disconnect(m_button, &JoyButton::released, this, &JoyButtonWidget::unflash); + this->unflash(); } @@ -63,19 +64,18 @@ void JoyButtonWidget::enableFlashes() { qInstallMessageHandler(MessageHandler::myMessageOutput); - connect(button, &JoyButton::clicked, this, &JoyButtonWidget::flash, Qt::QueuedConnection); - connect(button, &JoyButton::released, this, &JoyButtonWidget::unflash, Qt::QueuedConnection); + connect(m_button, &JoyButton::clicked, this, &JoyButtonWidget::flash, Qt::QueuedConnection); + connect(m_button, &JoyButton::released, this, &JoyButtonWidget::unflash, Qt::QueuedConnection); } QString JoyButtonWidget::generateLabel() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QString temp = QString(); - temp = button->getName(false, ifDisplayNames()).replace("&", "&&"); + QString temp = m_button->getName(false, ifDisplayNames()).replace("&", "&&"); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Name of joy button is: " << temp; + qDebug() << "Name of joy button is: " << temp; #endif return temp; @@ -86,7 +86,7 @@ void JoyButtonWidget::showContextMenu(const QPoint &point) qInstallMessageHandler(MessageHandler::myMessageOutput); QPoint globalPos = this->mapToGlobal(point); - JoyButtonContextMenu *contextMenu = new JoyButtonContextMenu(button, this); + JoyButtonContextMenu *contextMenu = new JoyButtonContextMenu(m_button, this); contextMenu->buildMenu(); contextMenu->popup(globalPos); } @@ -95,8 +95,5 @@ void JoyButtonWidget::tryFlash() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (button->getButtonState()) - { - flash(); - } + if (m_button->getButtonState()) flash(); } diff --git a/src/joybuttonwidget.h b/src/joybuttonwidget.h old mode 100644 new mode 100755 index 391dee603..97634bc42 --- a/src/joybuttonwidget.h +++ b/src/joybuttonwidget.h @@ -36,17 +36,17 @@ class JoyButtonWidget : public FlashButtonWidget void tryFlash(); protected: - virtual QString generateLabel(); + virtual QString generateLabel() override; public slots: - void disableFlashes(); - void enableFlashes(); + void disableFlashes() override; + void enableFlashes() override; private slots: void showContextMenu(const QPoint &point); private: - JoyButton* button; + JoyButton* m_button; }; #endif // JOYBUTTONWIDGET_H diff --git a/src/joycontrolstick.cpp b/src/joycontrolstick.cpp old mode 100644 new mode 100755 index 22517d5da..8dbf61cb6 --- a/src/joycontrolstick.cpp +++ b/src/joycontrolstick.cpp @@ -17,14 +17,13 @@ #include "joycontrolstick.h" +#include "globalvariables.h" #include "messagehandler.h" #include "inputdevice.h" #include "joybuttontypes/joycontrolstickbutton.h" #include "joybuttontypes/joycontrolstickmodifierbutton.h" #include "joyaxis.h" -#include - #include #include #include @@ -32,17 +31,7 @@ #include #include -// Define Pi here. -const double JoyControlStick::PI = acos(-1.0); - -// Set default values used for stick properties. -const int JoyControlStick::DEFAULTDEADZONE = 8000; -const int JoyControlStick::DEFAULTMAXZONE = JoyAxis::AXISMAXZONE; -const int JoyControlStick::DEFAULTDIAGONALRANGE = 90; const JoyControlStick::JoyMode JoyControlStick::DEFAULTMODE = JoyControlStick::StandardMode; -const double JoyControlStick::DEFAULTCIRCLE = 0.0; -const int JoyControlStick::DEFAULTSTICKDELAY = 0; - JoyControlStick::JoyControlStick(JoyAxis *axis1, JoyAxis *axis2, int index, int originset, QObject *parent) : @@ -59,10 +48,9 @@ JoyControlStick::JoyControlStick(JoyAxis *axis1, JoyAxis *axis2, this->index = index; this->originset = originset; this->modifierButton = nullptr; - reset(); - - populateButtons(); + reset(); + populateStickBtns(); directionDelayTimer.setSingleShot(true); connect(&directionDelayTimer, &QTimer::timeout, this, &JoyControlStick::stickDirectionChangeEvent); @@ -93,42 +81,36 @@ void JoyControlStick::joyEvent(bool ignoresets) { isActive = true; emit active(axisX->getCurrentRawValue(), axisY->getCurrentRawValue()); + if (ignoresets || (stickDelay == 0)) { if (directionDelayTimer.isActive()) - { directionDelayTimer.stop(); - } createDeskEvent(ignoresets); } else { if (!directionDelayTimer.isActive()) - { directionDelayTimer.start(stickDelay); - } } } else if (!safezone && isActive) { isActive = false; emit released(axisX->getCurrentRawValue(), axisY->getCurrentRawValue()); + if (ignoresets || (stickDelay == 0)) { if (directionDelayTimer.isActive()) - { directionDelayTimer.stop(); - } createDeskEvent(ignoresets); } else { if (!directionDelayTimer.isActive()) - { directionDelayTimer.start(stickDelay); - } } } else if (isActive) @@ -136,28 +118,23 @@ void JoyControlStick::joyEvent(bool ignoresets) if (ignoresets || (stickDelay == 0)) { if (directionDelayTimer.isActive()) - { directionDelayTimer.stop(); - } createDeskEvent(ignoresets); } else { JoyStickDirections pendingDirection = calculateStickDirection(); + if (currentDirection != pendingDirection) { if (!directionDelayTimer.isActive()) - { directionDelayTimer.start(stickDelay); - } } else { if (directionDelayTimer.isActive()) - { directionDelayTimer.stop(); - } createDeskEvent(ignoresets); } @@ -194,6 +171,11 @@ void JoyControlStick::populateButtons() { qInstallMessageHandler(MessageHandler::myMessageOutput); + populateStickBtns(); +} + +void JoyControlStick::populateStickBtns() +{ JoyControlStickButton *button = new JoyControlStickButton(this, StickUp, originset, getParentSet(), this); buttons.insert(StickUp, button); @@ -269,21 +251,23 @@ void JoyControlStick::createDeskEvent(bool ignoresets) if (safezone) { - if (currentMode == StandardMode) - { - determineStandardModeEvent(eventbutton1, eventbutton2); - } - else if (currentMode == EightWayMode) - { - determineEightWayModeEvent(eventbutton1, eventbutton2, eventbutton3); - } - else if (currentMode == FourWayCardinal) - { - determineFourWayCardinalEvent(eventbutton1, eventbutton2); - } - else if (currentMode == FourWayDiagonal) + switch(currentMode) { - determineFourWayDiagonalEvent(eventbutton3); + case StandardMode: + determineStandardModeEvent(eventbutton1, eventbutton2); + break; + + case EightWayMode: + determineEightWayModeEvent(eventbutton1, eventbutton2, eventbutton3); + break; + + case FourWayCardinal: + determineFourWayCardinalEvent(eventbutton1, eventbutton2); + break; + + case FourWayDiagonal: + determineFourWayDiagonalEvent(eventbutton3); + break; } } else @@ -418,8 +402,7 @@ double JoyControlStick::calculateBearing(int axisXValue, int axisYValue) { double temp1 = axis1Value; double temp2 = axis2Value; - - double angle = (atan2(temp1, -temp2) * 180) / PI; + double angle = (atan2(temp1, -temp2) * 180) / GlobalVariables::JoyControlStick::PI ; if ((axis1Value >= 0) && (axis2Value <= 0)) { @@ -481,16 +464,16 @@ double JoyControlStick::getDistanceFromDeadZone(int axisXValue, int axisYValue) int squared_dist = (axis1Value * axis1Value) + (axis2Value * axis2Value); - int dist = static_cast(sqrt(squared_dist)); + int dist = sqrt(squared_dist); - double squareStickFullPhi = qMin(static_cast(ang_sin) ? 1/fabs(ang_sin) : 2, static_cast(ang_cos) ? 1/fabs(ang_cos) : 2); + double squareStickFullPhi = qMin((ang_sin != 0.0) ? 1/fabs(ang_sin) : 2, ang_cos != 0.0 ? 1/fabs(ang_cos) : 2); double circle = this->circle; double circleStickFull = (squareStickFullPhi - 1) * circle + 1; double adjustedDist = (circleStickFull > 1.0) ? (dist / circleStickFull) : dist; double adjustedDeadZone = (circleStickFull > 1.0) ? (deadZone / circleStickFull) : deadZone; - distance = (adjustedDist - adjustedDeadZone)/static_cast(maxZone - adjustedDeadZone); + distance = (adjustedDist - adjustedDeadZone)/(static_cast(maxZone) - adjustedDeadZone); distance = qBound(0.0, distance, 1.0); return distance; } @@ -531,9 +514,9 @@ double JoyControlStick::calculateYDistanceFromDeadZone(int axisXValue, double ang_sin = sin(angle2); double ang_cos = cos(angle2); - int deadY = static_cast(abs(floor(deadZone * ang_cos + 0.5))); + int deadY = abs(floor(deadZone * ang_cos + 0.5)); - double squareStickFullPhi = qMin(static_cast(ang_sin) ? 1/fabs(ang_sin) : 2, static_cast(ang_cos) ? 1/fabs(ang_cos) : 2); + double squareStickFullPhi = qMin(ang_sin != 0.0 ? 1/fabs(ang_sin) : 2, ang_cos != 0.0 ? 1/fabs(ang_cos) : 2); double circle = this->circle; double circleStickFull = (squareStickFullPhi - 1) * circle + 1; @@ -551,14 +534,13 @@ double JoyControlStick::calculateYDistanceFromDeadZone(int axisXValue, double minangle = tempangles.at(1); double square_dist = getAbsoluteRawDistance(axis1Value, axis2Value); - double mindeadY = fabs(square_dist * sin(minangle * PI / 180.0)); + double mindeadY = fabs(square_dist * sin(minangle * GlobalVariables::JoyControlStick::PI / 180.0)); double currentDeadY = qMax(adjustedDeadYZone, mindeadY); double maxRange = static_cast(maxZone) - currentDeadY; double tempdist4 = 0.0; + if (maxRange != 0.0) - { tempdist4 = (fabs(adjustedAxis2Value) - currentDeadY) / maxRange; - } distance = tempdist4; } @@ -568,14 +550,13 @@ double JoyControlStick::calculateYDistanceFromDeadZone(int axisXValue, double minangle = tempfuck.at(4); double square_dist = getAbsoluteRawDistance(axis1Value, axis2Value); - double mindeadY = fabs(square_dist * sin((minangle - 90.0) * PI / 180.0)); + double mindeadY = fabs(square_dist * sin((minangle - 90.0) * GlobalVariables::JoyControlStick::PI / 180.0)); double currentDeadY = qMax(adjustedDeadYZone, mindeadY); double maxRange = static_cast(maxZone) - currentDeadY; double tempdist4 = 0.0; + if (maxRange != 0.0) - { tempdist4 = (fabs(adjustedAxis2Value) - currentDeadY) / maxRange; - } distance = tempdist4; } @@ -585,14 +566,13 @@ double JoyControlStick::calculateYDistanceFromDeadZone(int axisXValue, double minangle = tempangles.at(6); double square_dist = getAbsoluteRawDistance(axis1Value, axis2Value); - double mindeadY = fabs(square_dist * sin((minangle - 180.0) * PI / 180.0)); + double mindeadY = fabs(square_dist * sin((minangle - 180.0) * GlobalVariables::JoyControlStick::PI / 180.0)); double currentDeadY = qMax(adjustedDeadYZone, mindeadY); double maxRange = static_cast(maxZone) - currentDeadY; double tempdist4 = 0.0; + if (maxRange != 0.0) - { tempdist4 = (fabs(adjustedAxis2Value) - currentDeadY) / maxRange; - } distance = tempdist4; } @@ -602,14 +582,13 @@ double JoyControlStick::calculateYDistanceFromDeadZone(int axisXValue, double minangle = tempangles.at(8); double square_dist = getAbsoluteRawDistance(axis1Value, axis2Value); - double mindeadY = fabs(square_dist * sin((minangle - 270.0) * PI / 180.0)); + double mindeadY = fabs(square_dist * sin((minangle - 270.0) * GlobalVariables::JoyControlStick::PI / 180.0)); double currentDeadY = qMax(adjustedDeadYZone, mindeadY); double maxRange = static_cast(maxZone) - currentDeadY; double tempdist4 = 0.0; + if (maxRange != 0.0) - { tempdist4 = (fabs(adjustedAxis2Value) - currentDeadY) / maxRange; - } distance = tempdist4; } @@ -618,10 +597,9 @@ double JoyControlStick::calculateYDistanceFromDeadZone(int axisXValue, // Backup plan. Should not arrive here. double maxRange = static_cast(maxZone) - adjustedDeadYZone; double tempdist4 = 0.0; + if (maxRange != 0.0) - { tempdist4 = (fabs(adjustedAxis2Value) - adjustedDeadYZone) / maxRange; - } distance = tempdist4; } @@ -631,10 +609,9 @@ double JoyControlStick::calculateYDistanceFromDeadZone(int axisXValue, // No interpolation desired or diagonal range is 90 degrees. double maxRange = static_cast(maxZone) - adjustedDeadYZone; double tempdist4 = 0.0; + if (maxRange != 0.0) - { tempdist4 = (fabs(adjustedAxis2Value) - adjustedDeadYZone) / maxRange; - } distance = tempdist4; } @@ -679,8 +656,8 @@ double JoyControlStick::calculateXDistanceFromDeadZone(int axisXValue, double ang_sin = sin(angle2); double ang_cos = cos(angle2); - int deadX = abs(static_cast(floor(deadZone * ang_sin + 0.5))); - double squareStickFullPhi = qMin(static_cast(ang_sin) ? 1/fabs(ang_sin) : 2, static_cast(ang_cos) ? 1/fabs(ang_cos) : 2); + int deadX = abs(floor(deadZone * ang_sin + 0.5)); + double squareStickFullPhi = qMin(ang_sin != 0.0 ? 1/fabs(ang_sin) : 2, ang_cos != 0.0 ? 1/fabs(ang_cos) : 2); double circle = this->circle; double circleStickFull = (squareStickFullPhi - 1) * circle + 1; @@ -692,20 +669,20 @@ double JoyControlStick::calculateXDistanceFromDeadZone(int axisXValue, if (interpolate && (diagonalRange < 90)) { JoyStickDirections direction = calculateStickDirection(axis1Value, axis2Value); + if ((direction == StickRightUp) || (direction == StickRight)) { QList tempangles = getDiagonalZoneAngles(); double maxangle = tempangles.at(3); double square_dist = getAbsoluteRawDistance(axis1Value, axis2Value); - double mindeadX = fabs(square_dist * cos(maxangle * PI / 180.0)); + double mindeadX = fabs(square_dist * cos(maxangle * GlobalVariables::JoyControlStick::PI / 180.0)); double currentDeadX = qMax(mindeadX, adjustedDeadXZone); double maxRange = static_cast(maxZone) - currentDeadX; double tempdist4 = 0.0; + if (maxRange != 0.0) - { tempdist4 = (fabs(adjustedAxis1Value) - currentDeadX) / maxRange; - } distance = tempdist4; } @@ -715,14 +692,13 @@ double JoyControlStick::calculateXDistanceFromDeadZone(int axisXValue, double maxangle = tempangles.at(5); double square_dist = getAbsoluteRawDistance(axis1Value, axis2Value); - double mindeadX = fabs(square_dist * cos((maxangle - 90.0) * PI / 180.0)); + double mindeadX = fabs(square_dist * cos((maxangle - 90.0) * GlobalVariables::JoyControlStick::PI / 180.0)); double currentDeadX = qMax(mindeadX, adjustedDeadXZone); double maxRange = static_cast(maxZone) - currentDeadX; double tempdist4 = 0.0; + if (maxRange != 0.0) - { tempdist4 = (fabs(adjustedAxis1Value) - currentDeadX) / maxRange; - } distance = tempdist4; } @@ -732,14 +708,13 @@ double JoyControlStick::calculateXDistanceFromDeadZone(int axisXValue, double maxangle = tempangles.at(7); double square_dist = getAbsoluteRawDistance(axis1Value, axis2Value); - double mindeadX = fabs(square_dist * cos((maxangle - 180.0) * PI / 180.0)); + double mindeadX = fabs(square_dist * cos((maxangle - 180.0) * GlobalVariables::JoyControlStick::PI / 180.0)); double currentDeadX = qMax(mindeadX, adjustedDeadXZone); double maxRange = static_cast(maxZone) - currentDeadX; double tempdist4 = 0.0; + if (maxRange != 0.0) - { tempdist4 = (fabs(adjustedAxis1Value) - currentDeadX) / maxRange; - } distance = tempdist4; } @@ -749,14 +724,13 @@ double JoyControlStick::calculateXDistanceFromDeadZone(int axisXValue, double maxangle = tempangles.at(1); double square_dist = getAbsoluteRawDistance(axis1Value, axis2Value); - double mindeadX = fabs(square_dist * cos((maxangle - 270.0) * PI / 180.0)); + double mindeadX = fabs(square_dist * cos((maxangle - 270.0) * GlobalVariables::JoyControlStick::PI / 180.0)); double currentDeadX = qMax(mindeadX, adjustedDeadXZone); double maxRange = static_cast(maxZone) - currentDeadX; double tempdist4 = 0.0; + if (maxRange != 0.0) - { tempdist4 = (fabs(adjustedAxis1Value) - currentDeadX) / maxRange; - } distance = tempdist4; } @@ -765,10 +739,9 @@ double JoyControlStick::calculateXDistanceFromDeadZone(int axisXValue, // Backup plan. Should not arrive here. double maxRange = static_cast(maxZone) - adjustedDeadXZone; double tempdist4 = 0.0; + if (maxRange != 0.0) - { tempdist4 = (fabs(adjustedAxis1Value) - adjustedDeadXZone) / maxRange; - } distance = tempdist4; } @@ -778,10 +751,9 @@ double JoyControlStick::calculateXDistanceFromDeadZone(int axisXValue, // No interpolation desired or diagonal range is 90 degrees. double maxRange = static_cast(maxZone) - adjustedDeadXZone; double tempdist4 = 0.0; + if (maxRange != 0.0) - { tempdist4 = (fabs(adjustedAxis1Value) - adjustedDeadXZone) / maxRange; - } distance = tempdist4; } @@ -808,39 +780,29 @@ double JoyControlStick::getAbsoluteRawDistance(int axisXValue, int axisYValue) { qInstallMessageHandler(MessageHandler::myMessageOutput); - double distance = 0.0; - int axis1Value = axisXValue; int axis2Value = axisYValue; int square_dist = (axis1Value * axis1Value) + (axis2Value * axis2Value); - distance = sqrt(square_dist); - return distance; + return sqrt(square_dist); } double JoyControlStick::getNormalizedAbsoluteDistance() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double distance = 0.0; - int axis1Value = axisX->getCurrentRawValue(); int axis2Value = axisY->getCurrentRawValue(); int square_dist = (axis1Value * axis1Value) + (axis2Value * axis2Value); - distance = sqrt(square_dist)/static_cast(maxZone); - if (distance > 1.0) - { - distance = 1.0; - } - else if (distance < 0.0) - { - distance = 0.0; - } + double distance = sqrt(square_dist)/static_cast(maxZone); + + if (distance > 1.0) distance = 1.0; + else if (distance < 0.0) distance = 0.0; return distance; } @@ -849,23 +811,16 @@ double JoyControlStick::getRadialDistance(int axisXValue, int axisYValue) { qInstallMessageHandler(MessageHandler::myMessageOutput); - double distance = 0.0; - int axis1Value = axisXValue; int axis2Value = axisYValue; int square_dist = (axis1Value * axis1Value) + (axis2Value * axis2Value); - distance = sqrt(square_dist)/static_cast(maxZone); - if (distance > 1.0) - { - distance = 1.0; - } - else if (distance < 0.0) - { - distance = 0.0; - } + double distance = sqrt(square_dist)/static_cast(maxZone); + + if (distance > 1.0) distance = 1.0; + else if (distance < 0.0) distance = 0.0; return distance; } @@ -899,56 +854,37 @@ QString JoyControlStick::getName(bool forceFullFormat, bool displayNames) label.append(": "); QStringList tempList = QStringList(); + if (buttons.contains(StickUp)) { JoyControlStickButton *button = buttons.value(StickUp); - if (!button->getButtonName().isEmpty()) - { - tempList.append(button->getButtonName()); - } - else - { - tempList.append(button->getSlotsSummary()); - } + + if (!button->getButtonName().isEmpty()) tempList.append(button->getButtonName()); + else tempList.append(button->getSlotsSummary()); } if (buttons.contains(StickLeft)) { JoyControlStickButton *button = buttons.value(StickLeft); - if (!button->getButtonName().isEmpty()) - { - tempList.append(button->getButtonName()); - } - else - { - tempList.append(button->getSlotsSummary()); - } + + if (!button->getButtonName().isEmpty()) tempList.append(button->getButtonName()); + else tempList.append(button->getSlotsSummary()); } if (buttons.contains(StickDown)) { JoyControlStickButton *button = buttons.value(StickDown); - if (!button->getButtonName().isEmpty()) - { - tempList.append(button->getButtonName()); - } - else - { - tempList.append(button->getSlotsSummary()); - } + + if (!button->getButtonName().isEmpty()) tempList.append(button->getButtonName()); + else tempList.append(button->getSlotsSummary()); } if (buttons.contains(StickRight)) { JoyControlStickButton *button = buttons.value(StickRight); - if (!button->getButtonName().isEmpty()) - { - tempList.append(button->getButtonName()); - } - else - { - tempList.append(button->getSlotsSummary()); - } + + if (!button->getButtonName().isEmpty()) tempList.append(button->getButtonName()); + else tempList.append(button->getSlotsSummary()); } label.append(tempList.join(", ")); @@ -964,24 +900,19 @@ QString JoyControlStick::getPartialName(bool forceFullFormat, bool displayNames) if (!stickName.isEmpty() && displayNames) { if (forceFullFormat) - { label.append(trUtf8("Stick")).append(" "); - } label.append(stickName); } else if (!defaultStickName.isEmpty()) { if (forceFullFormat) - { label.append(trUtf8("Stick")).append(" "); - } label.append(defaultStickName); } else { - label.append(trUtf8("Stick")).append(" "); label.append(QString::number(getRealJoyIndex())); } @@ -1024,7 +955,7 @@ void JoyControlStick::reset() qInstallMessageHandler(MessageHandler::myMessageOutput); deadZone = 8000; - maxZone = JoyAxis::AXISMAXZONE; + maxZone = GlobalVariables::JoyAxis::AXISMAXZONE; diagonalRange = 45; isActive = false; pendingStickEvent = false; @@ -1036,8 +967,9 @@ void JoyControlStick::reset() currentDirection = StickCentered; currentMode = StandardMode; stickName.clear(); - circle = DEFAULTCIRCLE; - stickDelay = DEFAULTSTICKDELAY; + circle = GlobalVariables::JoyControlStick::DEFAULTCIRCLE; + stickDelay = GlobalVariables::JoyControlStick::DEFAULTSTICKDELAY; + resetButtons(); } @@ -1046,10 +978,9 @@ void JoyControlStick::setDeadZone(int value) qInstallMessageHandler(MessageHandler::myMessageOutput); value = abs(value); + if (value > getAxisX()->getAxisMaxCal()) - { value = getAxisX()->getAxisMaxCal(); - } if ((value != deadZone) && (value <= maxZone)) { @@ -1064,10 +995,9 @@ void JoyControlStick::setMaxZone(int value) qInstallMessageHandler(MessageHandler::myMessageOutput); value = abs(value); + if (value >= getAxisX()->getAxisMaxCal()) - { value = getAxisX()->getAxisMaxCal(); - } if ((value != maxZone) && (value > deadZone)) { @@ -1107,14 +1037,8 @@ void JoyControlStick::setDiagonalRange(int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (value < 1) - { - value = 1; - } - else if (value > 90) - { - value = 90; - } + if (value < 1) value = 1; + else if (value > 90) value = 90; if (value != diagonalRange) { @@ -1147,6 +1071,7 @@ void JoyControlStick::deleteButtons() while (iter.hasNext()) { JoyButton *button = iter.next().value(); + if (button != nullptr) { delete button; @@ -1226,29 +1151,20 @@ void JoyControlStick::readConfig(QXmlStreamReader *xml) } else if ((xml->name() == "squareStick") && xml->isStartElement()) { - QString temptext = xml->readElementText(); - int tempchoice = temptext.toInt(); + int tempchoice = xml->readElementText().toInt(); if ((tempchoice > 0) && (tempchoice <= 100)) - { this->setCircleAdjust(tempchoice / 100.0); - } } - else if ((xml->name() == JoyControlStickButton::xmlName) && xml->isStartElement()) + else if ((xml->name() == GlobalVariables::JoyControlStickButton::xmlName) && xml->isStartElement()) { int index = xml->attributes().value("index").toString().toInt(); JoyControlStickButton *button = buttons.value(static_cast(index)); - if (button != nullptr) - { - button->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } + if (button != nullptr) button->readConfig(xml); + else xml->skipCurrentElement(); } - else if ((xml->name() == JoyControlStickModifierButton::xmlName) && xml->isStartElement()) + else if ((xml->name() == GlobalVariables::JoyControlStickModifierButton::xmlName) && xml->isStartElement()) { modifierButton->readConfig(xml); } @@ -1282,52 +1198,44 @@ void JoyControlStick::writeConfig(QXmlStreamWriter *xml) xml->writeStartElement("stick"); xml->writeAttribute("index", QString::number(index+1)); - if (deadZone != DEFAULTDEADZONE) - { + if (deadZone != GlobalVariables::JoyControlStick::DEFAULTDEADZONE) xml->writeTextElement("deadZone", QString::number(deadZone)); - } - if (maxZone != DEFAULTMAXZONE) - { + if (maxZone != GlobalVariables::JoyControlStick::DEFAULTMAXZONE) xml->writeTextElement("maxZone", QString::number(maxZone)); - } xml->writeTextElement("calibrated", (calibrated ? "true" : "false")); xml->writeTextElement("summary", (getCalibrationSummary().isEmpty() ? "" : calibrationSummary)); - if ((currentMode == StandardMode) || (currentMode == EightWayMode)) + if ((currentMode == StandardMode || currentMode == EightWayMode) && (diagonalRange != GlobalVariables::JoyControlStick::DEFAULTDIAGONALRANGE)) { - if (diagonalRange != DEFAULTDIAGONALRANGE) - { - xml->writeTextElement("diagonalRange", QString::number(diagonalRange)); - } + xml->writeTextElement("diagonalRange", QString::number(diagonalRange)); } - if (currentMode == EightWayMode) - { - xml->writeTextElement("mode", "eight-way"); - } - else if (currentMode == FourWayCardinal) - { - xml->writeTextElement("mode", "four-way"); - } - else if (currentMode == FourWayDiagonal) + switch(currentMode) { - xml->writeTextElement("mode", "diagonal"); + case EightWayMode: + xml->writeTextElement("mode", "eight-way"); + break; + + case FourWayCardinal: + xml->writeTextElement("mode", "four-way"); + break; + + case FourWayDiagonal: + xml->writeTextElement("mode", "diagonal"); + break; } - if (circle > DEFAULTCIRCLE) - { + if (circle > GlobalVariables::JoyControlStick::DEFAULTCIRCLE) xml->writeTextElement("squareStick", QString::number(circle * 100)); - } - if (stickDelay > DEFAULTSTICKDELAY) - { + if (stickDelay > GlobalVariables::JoyControlStick::DEFAULTSTICKDELAY) xml->writeTextElement("stickDelay", QString::number(stickDelay)); - } QHashIterator iter(buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); @@ -1335,9 +1243,7 @@ void JoyControlStick::writeConfig(QXmlStreamWriter *xml) } if (!modifierButton->isDefault()) - { modifierButton->writeConfig(xml); - } xml->writeEndElement(); } @@ -1352,19 +1258,16 @@ void JoyControlStick::resetButtons() qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(buttons); + while (iter.hasNext()) { JoyButton *button = iter.next().value(); - if (button != nullptr) - { - button->reset(); - } + + if (button != nullptr) button->reset(); } if (modifierButton != nullptr) - { modifierButton->reset(); - } } /** @@ -1379,6 +1282,7 @@ JoyControlStickButton* JoyControlStick::getDirectionButton(JoyStickDirections di qInstallMessageHandler(MessageHandler::myMessageOutput); JoyControlStickButton *button = buttons.value(direction); + return button; } @@ -1394,80 +1298,98 @@ double JoyControlStick::calculateMouseDirectionalDistance(JoyControlStickButton double finalDistance = 0.0; - if (currentDirection == StickUp) - { - finalDistance = calculateYDistanceFromDeadZone(true); - } - else if (currentDirection == StickRightUp) + switch(currentDirection) { - if ((activeButton1 != nullptr) && (activeButton1 == button)) - { - finalDistance = calculateXDistanceFromDeadZone(true); - } - else if ((activeButton2 != nullptr) && (activeButton2 == button)) + case StickUp: { finalDistance = calculateYDistanceFromDeadZone(true); + break; } - else if ((activeButton3 != nullptr) && (activeButton3 == button)) + case StickRightUp: { - finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(); + if ((activeButton1 != nullptr) && (activeButton1 == button)) + { + finalDistance = calculateXDistanceFromDeadZone(true); + } + else if ((activeButton2 != nullptr) && (activeButton2 == button)) + { + finalDistance = calculateYDistanceFromDeadZone(true); + } + else if ((activeButton3 != nullptr) && (activeButton3 == button)) + { + finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(); + } + + break; } - } - else if (currentDirection == StickRight) - { - finalDistance = calculateXDistanceFromDeadZone(true); - } - else if (currentDirection == StickRightDown) - { - if ((activeButton1 != nullptr) && (activeButton1 == button)) + case StickRight: { finalDistance = calculateXDistanceFromDeadZone(true); + + break; } - else if ((activeButton2 != nullptr) && (activeButton2 == button)) - { - finalDistance = calculateYDistanceFromDeadZone(true); - } - else if ((activeButton3 != nullptr) && (activeButton3 == button)) - { - finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(); - } - } - else if (currentDirection == StickDown) - { - finalDistance = calculateYDistanceFromDeadZone(true); - } - else if (currentDirection == StickLeftDown) - { - if ((activeButton1 != nullptr) && (activeButton1 == button)) + case StickRightDown: { - finalDistance = calculateXDistanceFromDeadZone(true); + if ((activeButton1 != nullptr) && (activeButton1 == button)) + { + finalDistance = calculateXDistanceFromDeadZone(true); + } + else if ((activeButton2 != nullptr) && (activeButton2 == button)) + { + finalDistance = calculateYDistanceFromDeadZone(true); + } + else if ((activeButton3 != nullptr) && (activeButton3 == button)) + { + finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(); + } + + break; } - else if ((activeButton2 != nullptr) && (activeButton2 == button)) + case StickDown: { finalDistance = calculateYDistanceFromDeadZone(true); + + break; } - else if ((activeButton3 != nullptr) && (activeButton3 == button)) + case StickLeftDown: { - finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(); + if ((activeButton1 != nullptr) && (activeButton1 == button)) + { + finalDistance = calculateXDistanceFromDeadZone(true); + } + else if ((activeButton2 != nullptr) && (activeButton2 == button)) + { + finalDistance = calculateYDistanceFromDeadZone(true); + } + else if ((activeButton3 != nullptr) && (activeButton3 == button)) + { + finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(); + } + + break; } - } - else if (currentDirection == StickLeft) - { - finalDistance = calculateXDistanceFromDeadZone(true); - } - else if (currentDirection == StickLeftUp) - { - if ((activeButton1 != nullptr) && (activeButton1 == button)) + case StickLeft: { finalDistance = calculateXDistanceFromDeadZone(true); + + break; } - else if ((activeButton2 != nullptr) && (activeButton2 == button)) - { - finalDistance = calculateYDistanceFromDeadZone(true); - } - else if ((activeButton3 != nullptr) && (activeButton3 == button)) + case StickLeftUp: { - finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(); + if ((activeButton1 != nullptr) && (activeButton1 == button)) + { + finalDistance = calculateXDistanceFromDeadZone(true); + } + else if ((activeButton2 != nullptr) && (activeButton2 == button)) + { + finalDistance = calculateYDistanceFromDeadZone(true); + } + else if ((activeButton3 != nullptr) && (activeButton3 == button)) + { + finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(); + } + + break; } } @@ -1483,6 +1405,7 @@ double JoyControlStick::calculateLastMouseDirectionalDistance(JoyControlStickBut JoyStickDirections direction = calculateStickDirection(axisX->getLastKnownThrottleValue(), axisY->getLastKnownThrottleValue()); + if ((direction == StickUp) && (button->getJoyNumber() == static_cast(StickUp))) { if (axisY->getLastKnownThrottleValue() >= 0) @@ -1711,68 +1634,88 @@ double JoyControlStick::calculateLastDirectionalDistance() JoyStickDirections direction = calculateStickDirection(axisX->getLastKnownThrottleValue(), axisY->getLastKnownThrottleValue()); - if (direction == StickUp) + + switch(direction) { - if (!(axisX->getLastKnownThrottleValue() >= 0)) + case StickUp: { - finalDistance = calculateYDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), - axisY->getLastKnownThrottleValue()); + if (!(axisX->getLastKnownThrottleValue() >= 0)) + { + finalDistance = calculateYDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), + axisY->getLastKnownThrottleValue()); + } + + break; } - } - else if (direction == StickRightUp) - { - if (!(axisY->getLastKnownThrottleValue() <= 0) && !(axisY->getLastKnownThrottleValue() >= 0)) + case StickRightUp: { - finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), - axisY->getLastKnownThrottleValue()); + if (!(axisY->getLastKnownThrottleValue() <= 0) && !(axisY->getLastKnownThrottleValue() >= 0)) + { + finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), + axisY->getLastKnownThrottleValue()); + } + + break; } - } - else if (direction == StickRight) - { - if (!(axisX->getLastKnownThrottleValue() <= 0)) + case StickRight: { - finalDistance = calculateXDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), - axisY->getLastKnownThrottleValue()); + if (!(axisX->getLastKnownThrottleValue() <= 0)) + { + finalDistance = calculateXDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), + axisY->getLastKnownThrottleValue()); + } + + break; } - } - else if (direction == StickRightDown) - { - if (!(axisY->getLastKnownThrottleValue() <= 0) && !(axisY->getLastKnownThrottleValue() <= 0)) + case StickRightDown: { - finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), - axisY->getLastKnownThrottleValue()); - } - } - else if (direction == StickDown) - { - if (!(axisY->getLastKnownThrottleValue() <= 0)) + if (!(axisY->getLastKnownThrottleValue() <= 0) && !(axisY->getLastKnownThrottleValue() <= 0)) + { + finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), + axisY->getLastKnownThrottleValue()); + } + + break; + } + case StickDown: { - finalDistance = calculateYDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), - axisY->getLastKnownThrottleValue()); + if (!(axisY->getLastKnownThrottleValue() <= 0)) + { + finalDistance = calculateYDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), + axisY->getLastKnownThrottleValue()); + } + + break; } - } - else if (direction == StickLeftDown) - { - if (!(axisY->getLastKnownThrottleValue() >= 0) && !(axisY->getLastKnownThrottleValue() <= 0)) + case StickLeftDown: { - finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), - axisY->getLastKnownThrottleValue()); + if (!(axisY->getLastKnownThrottleValue() >= 0) && !(axisY->getLastKnownThrottleValue() <= 0)) + { + finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), + axisY->getLastKnownThrottleValue()); + } + + break; } - } - else if (direction == StickLeft) - { - if (!(axisX->getLastKnownThrottleValue() >= 0)) + case StickLeft: { - finalDistance = calculateXDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), - axisY->getLastKnownThrottleValue()); + if (!(axisX->getLastKnownThrottleValue() >= 0)) + { + finalDistance = calculateXDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), + axisY->getLastKnownThrottleValue()); + } + + break; } - } - else if (direction == StickLeftUp) - { - if (!(axisY->getLastKnownThrottleValue() >= 0) && !(axisY->getLastKnownThrottleValue() >= 0)) + case StickLeftUp: { - finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), - axisY->getLastKnownThrottleValue()); + if (!(axisY->getLastKnownThrottleValue() >= 0) && !(axisY->getLastKnownThrottleValue() >= 0)) + { + finalDistance = calculateEightWayDiagonalDistanceFromDeadZone(axisX->getLastKnownThrottleValue(), + axisY->getLastKnownThrottleValue()); + } + + break; } } @@ -1785,61 +1728,65 @@ double JoyControlStick::calculateLastAccelerationDirectionalDistance() double finalDistance = 0.0; - if (currentDirection == StickUp) + switch(currentDirection) { - if (!(axisX->getLastKnownRawValue() >= 0)) + case StickUp: { - finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); + if (!(axisX->getLastKnownRawValue() >= 0)) + finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); + + break; } - } - else if (currentDirection == StickRightUp) - { - if (!(axisY->getLastKnownRawValue() <= 0) && !(axisY->getLastKnownRawValue() >= 0)) + case StickRightUp: { - finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + if (!(axisY->getLastKnownRawValue() <= 0) && !(axisY->getLastKnownRawValue() >= 0)) + finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + + break; } - } - else if (currentDirection == StickRight) - { - if (!(axisX->getLastKnownRawValue() <= 0)) + case StickRight: { - finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); + if (!(axisX->getLastKnownRawValue() <= 0)) + finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); + + break; } - } - else if (currentDirection == StickRightDown) - { - if (!(axisY->getLastKnownRawValue() <= 0) && !(axisY->getLastKnownRawValue() <= 0)) + case StickRightDown: { - finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + if (!(axisY->getLastKnownRawValue() <= 0) && !(axisY->getLastKnownRawValue() <= 0)) + finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + + break; } - } - else if (currentDirection == StickDown) - { - if (!(axisY->getLastKnownRawValue() <= 0)) + case StickDown: { - finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); + if (!(axisY->getLastKnownRawValue() <= 0)) + finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); + + break; } - } - else if (currentDirection == StickLeftDown) - { - if (!(axisY->getLastKnownRawValue() >= 0) && !(axisY->getLastKnownRawValue() <= 0)) + case StickLeftDown: { - finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + if (!(axisY->getLastKnownRawValue() >= 0) && !(axisY->getLastKnownRawValue() <= 0)) + finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + + break; } - } - else if (currentDirection == StickLeft) - { - if (!(axisX->getLastKnownRawValue() >= 0)) + case StickLeft: { - finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); + if (!(axisX->getLastKnownRawValue() >= 0)) + finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); + + break; } - } - else if (currentDirection == StickLeftUp) - { - if (!(axisY->getLastKnownRawValue() >= 0) && !(axisY->getLastKnownRawValue() >= 0)) + case StickLeftUp: { - finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + if (!(axisY->getLastKnownRawValue() >= 0) && !(axisY->getLastKnownRawValue() >= 0)) + finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + + break; } + } return finalDistance; @@ -1857,37 +1804,48 @@ double JoyControlStick::calculateDirectionalDistance() double finalDistance = 0.0; - if (currentDirection == StickUp) - { - finalDistance = calculateYDistanceFromDeadZone(); - } - else if (currentDirection == StickRightUp) - { - finalDistance = getDistanceFromDeadZone(); - } - else if (currentDirection == StickRight) - { - finalDistance = calculateXDistanceFromDeadZone(); - } - else if (currentDirection == StickRightDown) - { - finalDistance = getDistanceFromDeadZone(); - } - else if (currentDirection == StickDown) - { - finalDistance = calculateYDistanceFromDeadZone(); - } - else if (currentDirection == StickLeftDown) - { - finalDistance = getDistanceFromDeadZone(); - } - else if (currentDirection == StickLeft) - { - finalDistance = calculateXDistanceFromDeadZone(); - } - else if (currentDirection == StickLeftUp) + switch(currentDirection) { - finalDistance = getDistanceFromDeadZone(); + case StickUp: + { + finalDistance = calculateYDistanceFromDeadZone(); + break; + } + case StickRightUp: + { + finalDistance = getDistanceFromDeadZone(); + break; + } + case StickRight: + { + finalDistance = calculateXDistanceFromDeadZone(); + break; + } + case StickRightDown: + { + finalDistance = getDistanceFromDeadZone(); + break; + } + case StickDown: + { + finalDistance = calculateYDistanceFromDeadZone(); + break; + } + case StickLeftDown: + { + finalDistance = getDistanceFromDeadZone(); + break; + } + case StickLeft: + { + finalDistance = calculateXDistanceFromDeadZone(); + break; + } + case StickLeftUp: + { + finalDistance = getDistanceFromDeadZone(); + break; + } } return finalDistance; @@ -1932,10 +1890,9 @@ int JoyControlStick::getCircleXCoordinate() int axisXValue = axisX->getCurrentRawValue(); int axisYValue = axisX->getCurrentRawValue(); + if (this->circle > 0.0) - { axisXValue = calculateCircleXValue(axisXValue, axisYValue); - } return axisXValue; } @@ -1946,10 +1903,9 @@ int JoyControlStick::getCircleYCoordinate() int axisXValue = axisX->getCurrentRawValue(); int axisYValue = axisY->getCurrentRawValue(); + if (this->circle > 0.0) - { axisYValue = calculateCircleYValue(axisXValue, axisYValue); - } return axisYValue; } @@ -1959,6 +1915,7 @@ int JoyControlStick::calculateCircleXValue(int axisXValue, int axisYValue) qInstallMessageHandler(MessageHandler::myMessageOutput); int value = axisXValue; + if (this->circle > 0.0) { int axis1Value = axisXValue; @@ -1968,11 +1925,11 @@ int JoyControlStick::calculateCircleXValue(int axisXValue, int axisYValue) double ang_sin = sin(angle2); double ang_cos = cos(angle2); - double squareStickFull = qMin(static_cast(ang_sin) ? 1/fabs(ang_sin) : 2, static_cast(ang_cos) ? 1/fabs(ang_cos) : 2); + double squareStickFull = qMin(ang_sin != 0.0 ? 1/fabs(ang_sin) : 2, ang_cos != 0.0 ? 1/fabs(ang_cos) : 2); double circle = this->circle; double circleStickFull = (squareStickFull - 1) * circle + 1; - value = (circleStickFull > 1.0) ? static_cast(floor((axisXValue / circleStickFull) + 0.5)) : value; + value = (circleStickFull > 1.0) ? floor((axisXValue / circleStickFull) + 0.5) : value; } return value; @@ -1983,6 +1940,7 @@ int JoyControlStick::calculateCircleYValue(int axisXValue, int axisYValue) qInstallMessageHandler(MessageHandler::myMessageOutput); int value = axisYValue; + if (this->circle > 0.0) { int axis1Value = axisXValue; @@ -1992,11 +1950,11 @@ int JoyControlStick::calculateCircleYValue(int axisXValue, int axisYValue) double ang_sin = sin(angle2); double ang_cos = cos(angle2); - double squareStickFull = qMin(static_cast(ang_sin) ? 1/fabs(ang_sin) : 2, static_cast(ang_cos) ? 1/fabs(ang_cos) : 2); + double squareStickFull = qMin(ang_sin != 0.0 ? 1/fabs(ang_sin) : 2, ang_cos != 0.0 ? 1/fabs(ang_cos) : 2); double circle = this->circle; double circleStickFull = (squareStickFull - 1) * circle + 1; - value = (circleStickFull > 1.0) ? static_cast(floor((axisYValue / circleStickFull) + 0.5)) : value; + value = (circleStickFull > 1.0) ? floor((axisYValue / circleStickFull) + 0.5) : value; } return value; @@ -2053,6 +2011,7 @@ QList JoyControlStick::getFourWayCardinalZoneAngles() anglesList.append(downInitial); anglesList.append(leftInitial); anglesList.append(upInitial); + return anglesList; } @@ -2073,6 +2032,7 @@ QList JoyControlStick::getFourWayDiagonalZoneAngles() anglesList.append(downRightInitial); anglesList.append(downLeftInitial); anglesList.append(upLeftInitial); + return anglesList; } @@ -2159,6 +2119,7 @@ void JoyControlStick::releaseButtonEvents() qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); @@ -2171,14 +2132,15 @@ bool JoyControlStick::isDefault() qInstallMessageHandler(MessageHandler::myMessageOutput); bool value = true; - value = value && (deadZone == DEFAULTDEADZONE); - value = value && (maxZone == DEFAULTMAXZONE); - value = value && (diagonalRange == DEFAULTDIAGONALRANGE); + value = value && (deadZone == GlobalVariables::JoyControlStick::DEFAULTDEADZONE); + value = value && (maxZone == GlobalVariables::JoyControlStick::DEFAULTMAXZONE); + value = value && (diagonalRange == GlobalVariables::JoyControlStick::DEFAULTDIAGONALRANGE); value = value && (currentMode == DEFAULTMODE); - value = value && (qFuzzyCompare(circle, DEFAULTCIRCLE)); - value = value && (stickDelay == DEFAULTSTICKDELAY); + value = value && qFuzzyCompare(circle, GlobalVariables::JoyControlStick::DEFAULTCIRCLE); + value = value && (stickDelay == GlobalVariables::JoyControlStick::DEFAULTSTICKDELAY); QHashIterator iter(buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); @@ -2186,9 +2148,7 @@ bool JoyControlStick::isDefault() } if (modifierButton != nullptr) - { value = value && modifierButton->isDefault(); - } return value; } @@ -2198,6 +2158,7 @@ void JoyControlStick::setButtonsMouseMode(JoyButton::JoyMouseMovementMode mode) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); @@ -2212,9 +2173,9 @@ bool JoyControlStick::hasSameButtonsMouseMode() bool result = true; JoyButton::JoyMouseMovementMode initialMode = JoyButton::MouseCursor; - QHash temphash = getApplicableButtons(); QHashIterator iter(temphash); + while (iter.hasNext()) { if (!iter.hasPrevious()) @@ -2226,6 +2187,7 @@ bool JoyControlStick::hasSameButtonsMouseMode() { JoyControlStickButton *button = iter.next().value(); JoyButton::JoyMouseMovementMode temp = button->getMouseMode(); + if (temp != initialMode) { result = false; @@ -2242,9 +2204,9 @@ JoyButton::JoyMouseMovementMode JoyControlStick::getButtonsPresetMouseMode() qInstallMessageHandler(MessageHandler::myMessageOutput); JoyButton::JoyMouseMovementMode resultMode = JoyButton::MouseCursor; - QHash temphash = getApplicableButtons(); QHashIterator iter(temphash); + while (iter.hasNext()) { if (!iter.hasPrevious()) @@ -2256,6 +2218,7 @@ JoyButton::JoyMouseMovementMode JoyControlStick::getButtonsPresetMouseMode() { JoyControlStickButton *button = iter.next().value(); JoyButton::JoyMouseMovementMode temp = button->getMouseMode(); + if (temp != resultMode) { resultMode = JoyButton::MouseCursor; @@ -2272,6 +2235,7 @@ void JoyControlStick::setButtonsMouseCurve(JoyButton::JoyMouseCurve mouseCurve) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); @@ -2286,9 +2250,9 @@ bool JoyControlStick::hasSameButtonsMouseCurve() bool result = true; JoyButton::JoyMouseCurve initialCurve = JoyButton::LinearCurve; - QHash temphash = getApplicableButtons(); QHashIterator iter(temphash); + while (iter.hasNext()) { if (!iter.hasPrevious()) @@ -2300,6 +2264,7 @@ bool JoyControlStick::hasSameButtonsMouseCurve() { JoyControlStickButton *button = iter.next().value(); JoyButton::JoyMouseCurve temp = button->getMouseCurve(); + if (temp != initialCurve) { result = false; @@ -2316,9 +2281,9 @@ JoyButton::JoyMouseCurve JoyControlStick::getButtonsPresetMouseCurve() qInstallMessageHandler(MessageHandler::myMessageOutput); JoyButton::JoyMouseCurve resultCurve = JoyButton::LinearCurve; - QHash temphash = getApplicableButtons(); QHashIterator iter(temphash); + while (iter.hasNext()) { if (!iter.hasPrevious()) @@ -2330,6 +2295,7 @@ JoyButton::JoyMouseCurve JoyControlStick::getButtonsPresetMouseCurve() { JoyControlStickButton *button = iter.next().value(); JoyButton::JoyMouseCurve temp = button->getMouseCurve(); + if (temp != resultCurve) { resultCurve = JoyButton::LinearCurve; @@ -2346,6 +2312,7 @@ void JoyControlStick::setButtonsSpringWidth(int value) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); @@ -2358,6 +2325,7 @@ void JoyControlStick::setButtonsSpringHeight(int value) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); @@ -2373,6 +2341,7 @@ int JoyControlStick::getButtonsPresetSpringWidth() QHash temphash = getApplicableButtons(); QHashIterator iter(temphash); + while (iter.hasNext()) { if (!iter.hasPrevious()) @@ -2383,7 +2352,9 @@ int JoyControlStick::getButtonsPresetSpringWidth() else { JoyControlStickButton *button = iter.next().value(); + int temp = button->getSpringWidth(); + if (temp != presetSpringWidth) { presetSpringWidth = 0; @@ -2403,6 +2374,7 @@ int JoyControlStick::getButtonsPresetSpringHeight() QHash temphash = getApplicableButtons(); QHashIterator iter(temphash); + while (iter.hasNext()) { if (!iter.hasPrevious()) @@ -2414,6 +2386,7 @@ int JoyControlStick::getButtonsPresetSpringHeight() { JoyControlStickButton *button = iter.next().value(); int temp = button->getSpringHeight(); + if (temp != presetSpringHeight) { presetSpringHeight = 0; @@ -2430,6 +2403,7 @@ void JoyControlStick::setButtonsSensitivity(double value) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); @@ -2445,6 +2419,7 @@ double JoyControlStick::getButtonsPresetSensitivity() QHash temphash = getApplicableButtons(); QHashIterator iter(temphash); + while (iter.hasNext()) { if (!iter.hasPrevious()) @@ -2456,7 +2431,8 @@ double JoyControlStick::getButtonsPresetSensitivity() { JoyControlStickButton *button = iter.next().value(); double temp = button->getSensitivity(); - if (qFuzzyCompare(temp, presetSensitivity)) + + if (!qFuzzyCompare(temp, presetSensitivity)) { presetSensitivity = 1.0; iter.toBack(); @@ -2501,7 +2477,7 @@ void JoyControlStick::setStickName(QString tempName) { stickName = tempName; emit stickNameChanged(); - emit propertyUpdated(); + // emit propertyUpdated(); } } @@ -2517,10 +2493,11 @@ void JoyControlStick::setButtonsWheelSpeedX(int value) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); - button->setWheelSpeedX(value); + button->setWheelSpeed(value, 'X'); } } @@ -2529,10 +2506,11 @@ void JoyControlStick::setButtonsWheelSpeedY(int value) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); - button->setWheelSpeedY(value); + button->setWheelSpeed(value, 'Y'); } } @@ -2545,14 +2523,10 @@ SetJoystick* JoyControlStick::getParentSet() qInstallMessageHandler(MessageHandler::myMessageOutput); SetJoystick *temp = nullptr; - if (axisX != nullptr) - { - temp = axisX->getParentSet(); - } - else if (axisY != nullptr) - { - temp = axisY->getParentSet(); - } + + if (axisX != nullptr) temp = axisX->getParentSet(); + else if (axisY != nullptr) temp = axisY->getParentSet(); + return temp; } @@ -2819,15 +2793,15 @@ JoyControlStick::determineStandardModeDirection(int axisXValue, int axisYValue) double bearing = calculateBearing(axisXValue, axisYValue); QList anglesList = getDiagonalZoneAngles(); - int initialLeft = static_cast(anglesList.value(0)); - int initialRight = static_cast(anglesList.value(1)); - int upRightInitial = static_cast(anglesList.value(2)); - int rightInitial = static_cast(anglesList.value(3)); - int downRightInitial = static_cast(anglesList.value(4)); - int downInitial = static_cast(anglesList.value(5)); - int downLeftInitial = static_cast(anglesList.value(6)); - int leftInitial = static_cast(anglesList.value(7)); - int upLeftInitial = static_cast(anglesList.value(8)); + int initialLeft = anglesList.value(0); + int initialRight = anglesList.value(1); + int upRightInitial = anglesList.value(2); + int rightInitial = anglesList.value(3); + int downRightInitial = anglesList.value(4); + int downInitial = anglesList.value(5); + int downLeftInitial = anglesList.value(6); + int leftInitial = anglesList.value(7); + int upLeftInitial = anglesList.value(8); if ((bearing <= initialRight) || (bearing >= initialLeft)) { @@ -2955,9 +2929,7 @@ JoyControlStick::determineFourWayDiagonalDirection(int axisXValue, int axisYValu qInstallMessageHandler(MessageHandler::myMessageOutput); JoyStickDirections result = StickCentered; - double bearing = calculateBearing(axisXValue, axisYValue); - QList anglesList = getFourWayDiagonalZoneAngles(); int upRightInitial = anglesList.value(0); int downRightInitial = anglesList.value(1); @@ -3005,21 +2977,28 @@ JoyControlStick::calculateStickDirection(int axisXValue, int axisYValue) JoyStickDirections result = StickCentered; - if (currentMode == StandardMode) - { - result = determineStandardModeDirection(axisXValue, axisYValue); - } - else if (currentMode == EightWayMode) - { - result = determineEightWayModeDirection(axisXValue, axisYValue); - } - else if (currentMode == FourWayCardinal) - { - result = determineFourWayCardinalDirection(axisXValue, axisYValue); - } - else if (currentMode == FourWayDiagonal) + switch(currentMode) { - result = determineFourWayDiagonalDirection(axisXValue, axisYValue); + case StandardMode: + { + result = determineStandardModeDirection(axisXValue, axisYValue); + break; + } + case EightWayMode: + { + result = determineEightWayModeDirection(axisXValue, axisYValue); + break; + } + case FourWayCardinal: + { + result = determineFourWayCardinalDirection(axisXValue, axisYValue); + break; + } + case FourWayDiagonal: + { + result = determineFourWayDiagonalDirection(axisXValue, axisYValue); + break; + } } return result; @@ -3048,11 +3027,12 @@ bool JoyControlStick::hasSlotsAssigned() qInstallMessageHandler(MessageHandler::myMessageOutput); bool hasSlots = false; - QHashIterator iter(buttons); + while (iter.hasNext()) { JoyButton *button = iter.next().value(); + if (button != nullptr) { if (button->getAssignedSlots()->count() > 0) @@ -3071,6 +3051,7 @@ void JoyControlStick::setButtonsSpringRelativeStatus(bool value) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); @@ -3086,6 +3067,7 @@ bool JoyControlStick::isRelativeSpring() QHash temphash = getApplicableButtons(); QHashIterator iter(temphash); + while (iter.hasNext()) { if (!iter.hasPrevious()) @@ -3097,6 +3079,7 @@ bool JoyControlStick::isRelativeSpring() { JoyControlStickButton *button = iter.next().value(); bool temp = button->isRelativeSpring(); + if (temp != relative) { relative = false; @@ -3129,16 +3112,17 @@ void JoyControlStick::copyAssignments(JoyControlStick *destStick) destStick->stickDelay = stickDelay; QHashIterator iter(destStick->buttons); + while (iter.hasNext()) { JoyControlStickButton *destButton = iter.next().value(); + if (destButton != nullptr) { JoyControlStickButton *sourceButton = buttons.value(destButton->getDirection()); + if (sourceButton != nullptr) - { sourceButton->copyAssignments(destButton); - } } } @@ -3149,9 +3133,7 @@ void JoyControlStick::copyAssignments(JoyControlStick *destStick) } if (!destStick->isDefault()) - { emit propertyUpdated(); - } } /** @@ -3218,6 +3200,7 @@ void JoyControlStick::setButtonsEasingDuration(double value) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(buttons); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); @@ -3229,10 +3212,10 @@ double JoyControlStick::getButtonsEasingDuration() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double result = JoyButton::DEFAULTEASINGDURATION; - + double result = GlobalVariables::JoyButton::DEFAULTEASINGDURATION; QHash temphash = getApplicableButtons(); QHashIterator iter(temphash); + while (iter.hasNext()) { if (!iter.hasPrevious()) @@ -3244,9 +3227,10 @@ double JoyControlStick::getButtonsEasingDuration() { JoyControlStickButton *button = iter.next().value(); double temp = button->getEasingDuration(); - if (qFuzzyCompare(temp, result)) + + if (!qFuzzyCompare(temp, result)) { - result = JoyButton::DEFAULTEASINGDURATION; + result = GlobalVariables::JoyButton::DEFAULTEASINGDURATION; iter.toBack(); } } @@ -3303,13 +3287,13 @@ void JoyControlStick::setButtonsExtraAccelerationStatus(bool enabled) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getApplicableButtons()); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) - { button->setExtraAccelerationStatus(enabled); - } } } @@ -3323,9 +3307,11 @@ bool JoyControlStick::getButtonsExtraAccelerationStatus() while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) { bool temp = button->isExtraAccelerationEnabled(); + if (!temp) { result = false; @@ -3349,10 +3335,9 @@ void JoyControlStick::setButtonsExtraAccelerationMultiplier(double value) while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) - { button->setExtraAccelerationMultiplier(value); - } } } @@ -3360,28 +3345,30 @@ double JoyControlStick::getButtonsExtraAccelerationMultiplier() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double result = JoyButton::DEFAULTEXTRACCELVALUE; + double result = GlobalVariables::JoyButton::DEFAULTEXTRACCELVALUE; QHashIterator iter(getApplicableButtons()); + while (iter.hasNext()) { if (!iter.hasPrevious()) { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) - { result = button->getExtraAccelerationMultiplier(); - } } else { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) { double temp = button->getExtraAccelerationMultiplier(); - if (qFuzzyCompare(temp, result)) + + if (!qFuzzyCompare(temp, result)) { - result = JoyButton::DEFAULTEXTRACCELVALUE; + result = GlobalVariables::JoyButton::DEFAULTEXTRACCELVALUE; iter.toBack(); } } @@ -3397,13 +3384,13 @@ void JoyControlStick::setButtonsStartAccelerationMultiplier(double value) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getApplicableButtons()); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) - { button->setStartAccelMultiplier(value); - } } } @@ -3411,28 +3398,29 @@ double JoyControlStick::getButtonsStartAccelerationMultiplier() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double result = JoyButton::DEFAULTSTARTACCELMULTIPLIER; - + double result = GlobalVariables::JoyButton::DEFAULTSTARTACCELMULTIPLIER; QHashIterator iter(getApplicableButtons()); + while (iter.hasNext()) { if (!iter.hasPrevious()) { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) - { result = button->getStartAccelMultiplier(); - } } else { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) { double temp = button->getStartAccelMultiplier(); - if (qFuzzyCompare(temp, result)) + + if (!qFuzzyCompare(temp, result)) { - result = JoyButton::DEFAULTSTARTACCELMULTIPLIER; + result = GlobalVariables::JoyButton::DEFAULTSTARTACCELMULTIPLIER; iter.toBack(); } } @@ -3447,13 +3435,13 @@ void JoyControlStick::setButtonsMinAccelerationThreshold(double value) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getApplicableButtons()); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) - { button->setMinAccelThreshold(value); - } } } @@ -3461,28 +3449,30 @@ double JoyControlStick::getButtonsMinAccelerationThreshold() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double result = JoyButton::DEFAULTMINACCELTHRESHOLD; + double result = GlobalVariables::JoyButton::DEFAULTMINACCELTHRESHOLD; QHashIterator iter(getApplicableButtons()); + while (iter.hasNext()) { if (!iter.hasPrevious()) { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) - { result = button->getMinAccelThreshold(); - } } else { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) { double temp = button->getMinAccelThreshold(); - if (qFuzzyCompare(temp, result)) + + if (!qFuzzyCompare(temp, result)) { - result = JoyButton::DEFAULTMINACCELTHRESHOLD; + result = GlobalVariables::JoyButton::DEFAULTMINACCELTHRESHOLD; iter.toBack(); } } @@ -3497,13 +3487,13 @@ void JoyControlStick::setButtonsMaxAccelerationThreshold(double value) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getApplicableButtons()); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) - { button->setMaxAccelThreshold(value); - } } } @@ -3511,7 +3501,7 @@ double JoyControlStick::getButtonsMaxAccelerationThreshold() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double result = JoyButton::DEFAULTMAXACCELTHRESHOLD; + double result = GlobalVariables::JoyButton::DEFAULTMAXACCELTHRESHOLD; QHashIterator iter(getApplicableButtons()); while (iter.hasNext()) @@ -3519,20 +3509,21 @@ double JoyControlStick::getButtonsMaxAccelerationThreshold() if (!iter.hasPrevious()) { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) - { result = button->getMaxAccelThreshold(); - } } else { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) { double temp = button->getMaxAccelThreshold(); - if (qFuzzyCompare(temp, result)) + + if (!qFuzzyCompare(temp, result)) { - result = JoyButton::DEFAULTMAXACCELTHRESHOLD; + result = GlobalVariables::JoyButton::DEFAULTMAXACCELTHRESHOLD; iter.toBack(); } } @@ -3548,13 +3539,13 @@ void JoyControlStick::setButtonsAccelerationExtraDuration(double value) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getApplicableButtons()); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) - { button->setAccelExtraDuration(value); - } } } @@ -3562,7 +3553,7 @@ double JoyControlStick::getButtonsAccelerationEasingDuration() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double result = JoyButton::DEFAULTACCELEASINGDURATION; + double result = GlobalVariables::JoyButton::DEFAULTACCELEASINGDURATION; QHashIterator iter(getApplicableButtons()); while (iter.hasNext()) @@ -3570,10 +3561,9 @@ double JoyControlStick::getButtonsAccelerationEasingDuration() if (!iter.hasPrevious()) { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) - { result = button->getAccelExtraDuration(); - } } else { @@ -3581,9 +3571,9 @@ double JoyControlStick::getButtonsAccelerationEasingDuration() if (button != nullptr) { double temp = button->getAccelExtraDuration(); - if (qFuzzyCompare(temp, result)) + if (!qFuzzyCompare(temp, result)) { - result = JoyButton::DEFAULTACCELEASINGDURATION; + result = GlobalVariables::JoyButton::DEFAULTACCELEASINGDURATION; iter.toBack(); } } @@ -3612,7 +3602,7 @@ int JoyControlStick::getButtonsSpringDeadCircleMultiplier() { qInstallMessageHandler(MessageHandler::myMessageOutput); - int result = JoyButton::DEFAULTSPRINGRELEASERADIUS; + int result = GlobalVariables::JoyButton::DEFAULTSPRINGRELEASERADIUS; QHashIterator iter(getApplicableButtons()); while (iter.hasNext()) @@ -3633,7 +3623,7 @@ int JoyControlStick::getButtonsSpringDeadCircleMultiplier() int temp = button->getSpringDeadCircleMultiplier(); if (temp != result) { - result = JoyButton::DEFAULTSPRINGRELEASERADIUS; + result = GlobalVariables::JoyButton::DEFAULTSPRINGRELEASERADIUS; iter.toBack(); } } @@ -3649,32 +3639,9 @@ double JoyControlStick::calculateAccelerationDistance(JoyControlStickButton *but double finalDistance = 0.0; - if (currentDirection == StickUp) - { - if (axisY->getCurrentRawValue() >= 0) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateYAxisDistance(axisY->getCurrentRawValue()); - } - } - else if (currentDirection == StickRightUp) + switch(currentDirection) { - if (button->getJoyNumber() == static_cast(StickRight)) - { - if (axisX->getCurrentRawValue() < 0) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateXAxisDistance(axisX->getCurrentRawValue()); - } - - } - else if (button->getJoyNumber() == static_cast(StickUp)) + case StickUp: { if (axisY->getCurrentRawValue() >= 0) { @@ -3684,33 +3651,56 @@ double JoyControlStick::calculateAccelerationDistance(JoyControlStickButton *but { finalDistance = calculateYAxisDistance(axisY->getCurrentRawValue()); } + + break; } - else if (button->getJoyNumber() == static_cast(StickRightUp)) + case StickRightUp: { - if ((axisX->getCurrentRawValue() <= 0) || (axisY->getCurrentRawValue() >= 0)) - { - finalDistance = 0.0; - } - else + switch(button->getJoyNumber()) { - finalDistance = calculateEightWayDiagonalDistance(axisX->getCurrentRawValue(), axisY->getCurrentRawValue()); + case 1: + + if (axisY->getCurrentRawValue() >= 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateYAxisDistance(axisY->getCurrentRawValue()); + } + + break; + + case 2: + + if ((axisX->getCurrentRawValue() <= 0) || (axisY->getCurrentRawValue() >= 0)) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateEightWayDiagonalDistance(axisX->getCurrentRawValue(), axisY->getCurrentRawValue()); + } + + break; + + case 3: + + if (axisX->getCurrentRawValue() < 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateXAxisDistance(axisX->getCurrentRawValue()); + } + + break; } + + break; } - } - else if (currentDirection == StickRight) - { - if (axisX->getCurrentRawValue() < 0) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateXAxisDistance(axisX->getCurrentRawValue()); - } - } - else if (currentDirection == StickRightDown) - { - if (button->getJoyNumber() == static_cast(StickRight)) + case StickRight: { if (axisX->getCurrentRawValue() < 0) { @@ -3720,57 +3710,61 @@ double JoyControlStick::calculateAccelerationDistance(JoyControlStickButton *but { finalDistance = calculateXAxisDistance(axisX->getCurrentRawValue()); } + + break; } - else if (button->getJoyNumber() == static_cast(StickDown)) - { - if (axisY->getCurrentRawValue() < 0) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateYAxisDistance(axisY->getCurrentRawValue()); - } - } - else if (button->getJoyNumber() == static_cast(StickRightDown)) - { - if ((axisX->getCurrentRawValue() <= 0) || (axisY->getCurrentRawValue() <= 0)) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateEightWayDiagonalDistance(axisX->getCurrentRawValue(), axisY->getCurrentRawValue()); - } - } - } - else if (currentDirection == StickDown) - { - if (axisY->getCurrentRawValue() <= 0) - { - finalDistance = 0.0; - } - else + case StickRightDown: { - finalDistance = calculateYAxisDistance(axisY->getCurrentRawValue()); - } - } - else if (currentDirection == StickLeftDown) - { - if (button->getJoyNumber() == static_cast(StickLeft)) - { - if (axisX->getCurrentRawValue() >= 0) - { - finalDistance = 0.0; - } - else + + switch(button->getJoyNumber()) { - finalDistance = calculateXAxisDistance(axisX->getCurrentRawValue()); + + case 3: + + if (axisX->getCurrentRawValue() < 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateXAxisDistance(axisX->getCurrentRawValue()); + } + + break; + + case 4: + + if ((axisX->getCurrentRawValue() <= 0) || (axisY->getCurrentRawValue() <= 0)) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateEightWayDiagonalDistance(axisX->getCurrentRawValue(), axisY->getCurrentRawValue()); + } + + break; + + case 5: + + if (axisY->getCurrentRawValue() < 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateYAxisDistance(axisY->getCurrentRawValue()); + } + + break; + } + + break; } - else if (button->getJoyNumber() == static_cast(StickDown)) + case StickDown: { - if (axisY->getCurrentRawValue() < 0) + if (axisY->getCurrentRawValue() <= 0) { finalDistance = 0.0; } @@ -3778,33 +3772,58 @@ double JoyControlStick::calculateAccelerationDistance(JoyControlStickButton *but { finalDistance = calculateYAxisDistance(axisY->getCurrentRawValue()); } + + break; } - else if (button->getJoyNumber() == static_cast(StickLeftDown)) + case StickLeftDown: { - if ((axisX->getCurrentRawValue() >= 0) || (axisY->getCurrentRawValue() <= 0)) + switch(button->getJoyNumber()) { - finalDistance = 0.0; - } - else - { - finalDistance = calculateEightWayDiagonalDistance(axisX->getCurrentRawValue(), axisY->getCurrentRawValue()); + + case 5: + + if (axisY->getCurrentRawValue() < 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateYAxisDistance(axisY->getCurrentRawValue()); + } + + break; + + case 6: + + if ((axisX->getCurrentRawValue() >= 0) || (axisY->getCurrentRawValue() <= 0)) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateEightWayDiagonalDistance(axisX->getCurrentRawValue(), axisY->getCurrentRawValue()); + } + + break; + + case 7: + + if (axisX->getCurrentRawValue() >= 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateXAxisDistance(axisX->getCurrentRawValue()); + } + + break; + } + + break; } - } - else if (currentDirection == StickLeft) - { - if (axisX->getCurrentRawValue() >= 0) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateXAxisDistance(axisX->getCurrentRawValue()); - } - } - else if (currentDirection == StickLeftUp) - { - if (button->getJoyNumber() == static_cast(StickLeft)) + case StickLeft: { if (axisX->getCurrentRawValue() >= 0) { @@ -3814,31 +3833,62 @@ double JoyControlStick::calculateAccelerationDistance(JoyControlStickButton *but { finalDistance = calculateXAxisDistance(axisX->getCurrentRawValue()); } + + break; } - else if (button->getJoyNumber() == static_cast(StickUp)) - { - if (axisY->getCurrentRawValue() >= 0) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateYAxisDistance(axisY->getCurrentRawValue()); - } - } - else if (button->getJoyNumber() == static_cast(StickLeftUp)) + case StickLeftUp: { - if ((axisX->getCurrentRawValue() >= 0) || (axisY->getCurrentRawValue() >= 0)) - { - finalDistance = 0.0; - } - else + + switch(button->getJoyNumber()) { - finalDistance = calculateEightWayDiagonalDistance(axisX->getCurrentRawValue(), axisY->getCurrentRawValue()); + + case 1: + + if (axisY->getCurrentRawValue() >= 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateYAxisDistance(axisY->getCurrentRawValue()); + } + + break; + + case 7: + + if (axisX->getCurrentRawValue() >= 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateXAxisDistance(axisX->getCurrentRawValue()); + } + + break; + + case 8: + + if ((axisX->getCurrentRawValue() >= 0) || (axisY->getCurrentRawValue() >= 0)) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateEightWayDiagonalDistance(axisX->getCurrentRawValue(), axisY->getCurrentRawValue()); + } + + break; + } + + break; } } + + return finalDistance; } @@ -3849,32 +3899,9 @@ double JoyControlStick::calculateLastAccelerationButtonDistance(JoyControlStickB double finalDistance = 0.0; - if (currentDirection == StickUp) - { - if (axisY->getLastKnownRawValue() >= 0) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); - } - } - else if (currentDirection == StickRightUp) + switch(currentDirection) { - if (button->getJoyNumber() == static_cast(StickRight)) - { - if (axisX->getLastKnownRawValue() <= 0) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); - } - - } - else if (button->getJoyNumber() == static_cast(StickUp)) + case StickUp: { if (axisY->getLastKnownRawValue() >= 0) { @@ -3884,33 +3911,57 @@ double JoyControlStick::calculateLastAccelerationButtonDistance(JoyControlStickB { finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); } + + break; } - else if (button->getJoyNumber() == static_cast(StickRightUp)) + case StickRightUp: { - if ((axisX->getLastKnownRawValue() <= 0) || (axisY->getLastKnownRawValue() >= 0)) + switch(button->getJoyNumber()) { - finalDistance = 0.0; - } - else - { - finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + case StickRight: + { + if (axisX->getLastKnownRawValue() <= 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); + } + + break; + } + case StickUp: + { + if (axisY->getLastKnownRawValue() >= 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); + } + + break; + } + case StickRightUp: + { + if ((axisX->getLastKnownRawValue() <= 0) || (axisY->getLastKnownRawValue() >= 0)) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + } + + break; + } } + + break; } - } - else if (currentDirection == static_cast(StickRight)) - { - if (axisX->getLastKnownRawValue() <= 0) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); - } - } - else if (currentDirection == StickRightDown) - { - if (button->getJoyNumber() == static_cast(StickRight)) + case StickRight: { if (axisX->getLastKnownRawValue() <= 0) { @@ -3920,55 +3971,59 @@ double JoyControlStick::calculateLastAccelerationButtonDistance(JoyControlStickB { finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); } + + break; } - else if (button->getJoyNumber() == static_cast(StickDown)) - { - if (axisY->getLastKnownRawValue() <= 0) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); - } - } - else if (button->getJoyNumber() == static_cast(StickRightDown)) - { - if ((axisX->getLastKnownRawValue() <= 0) || (axisY->getLastKnownRawValue() <= 0)) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); - } - } - } - else if (currentDirection == StickDown) - { - if (axisY->getLastKnownRawValue() <= 0) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); - } - } - else if (currentDirection == StickLeftDown) - { - if (button->getJoyNumber() == static_cast(StickLeft)) + case StickRightDown: { - if (axisX->getLastKnownRawValue() >= 0) + switch(button->getJoyNumber()) { - finalDistance = 0.0; - } - else - { - finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); + + case StickRight: + { + if (axisX->getLastKnownRawValue() <= 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); + } + + break; + } + case StickDown: + { + if (axisY->getLastKnownRawValue() <= 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); + } + + break; + } + case StickRightDown: + { + if ((axisX->getLastKnownRawValue() <= 0) || (axisY->getLastKnownRawValue() <= 0)) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + } + + break; + } + } + + break; } - else if (button->getJoyNumber() == static_cast(StickDown)) + case StickDown: { if (axisY->getLastKnownRawValue() <= 0) { @@ -3978,33 +4033,59 @@ double JoyControlStick::calculateLastAccelerationButtonDistance(JoyControlStickB { finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); } + + break; } - else if (button->getJoyNumber() == static_cast(StickLeftDown)) + case StickLeftDown: { - if ((axisX->getLastKnownRawValue() >= 0) || (axisY->getLastKnownRawValue() <= 0)) - { - finalDistance = 0.0; - } - else + switch(button->getJoyNumber()) { - finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + + case 7: + { + if (axisX->getLastKnownRawValue() >= 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); + } + + break; + } + case 5: + { + if (axisY->getLastKnownRawValue() <= 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); + } + + break; + } + case 6: + { + if ((axisX->getLastKnownRawValue() >= 0) || (axisY->getLastKnownRawValue() <= 0)) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + } + + break; + } + } + + break; } - } - else if (currentDirection == StickLeft) - { - if (axisX->getLastKnownRawValue() >= 0) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); - } - } - else if (currentDirection == StickLeftUp) - { - if (button->getJoyNumber() == static_cast(StickLeft)) + case StickLeft: { if (axisX->getLastKnownRawValue() >= 0) { @@ -4014,28 +4095,57 @@ double JoyControlStick::calculateLastAccelerationButtonDistance(JoyControlStickB { finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); } + + break; } - else if (button->getJoyNumber() == static_cast(StickUp)) - { - if (axisY->getLastKnownRawValue() >= 0) - { - finalDistance = 0.0; - } - else - { - finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); - } - } - else if (button->getJoyNumber() == static_cast(StickLeftUp)) + case StickLeftUp: { - if ((axisX->getLastKnownRawValue() >= 0) || (axisY->getLastKnownRawValue() >= 0)) + switch(button->getJoyNumber()) { - finalDistance = 0.0; - } - else - { - finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + + case 7: + { + if (axisX->getLastKnownRawValue() >= 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateXAxisDistance(axisX->getLastKnownRawValue()); + } + + break; + } + case 1: + { + if (axisY->getLastKnownRawValue() >= 0) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateYAxisDistance(axisY->getLastKnownRawValue()); + } + + break; + } + case 8: + { + if ((axisX->getLastKnownRawValue() >= 0) || (axisY->getLastKnownRawValue() >= 0)) + { + finalDistance = 0.0; + } + else + { + finalDistance = calculateEightWayDiagonalDistance(axisX->getLastKnownRawValue(), axisY->getLastKnownRawValue()); + } + + break; + } + } + + break; } } @@ -4046,21 +4156,14 @@ double JoyControlStick::calculateXAxisDistance(int axisXValue) { qInstallMessageHandler(MessageHandler::myMessageOutput); - double distance = 0.0; int axis1Value = axisXValue; + double distance = axis1Value / static_cast(maxZone); - distance = axis1Value / static_cast(maxZone); - if (distance < -1.0) - { - distance = -1.0; - } - else if (distance > 1.0) - { - distance = 1.0; - } + if (distance < -1.0) distance = -1.0; + else if (distance > 1.0) distance = 1.0; #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "DISTANCE: " << distance; + qDebug() << "DISTANCE: " << distance; #endif return distance; @@ -4070,18 +4173,11 @@ double JoyControlStick::calculateYAxisDistance(int axisYValue) { qInstallMessageHandler(MessageHandler::myMessageOutput); - double distance = 0.0; int axis2Value = axisYValue; + double distance = axis2Value / static_cast(maxZone); - distance = axis2Value / static_cast(maxZone); - if (distance < -1.0) - { - distance = -1.0; - } - else if (distance > 1.0) - { - distance = 1.0; - } + if (distance < -1.0) distance = -1.0; + else if (distance > 1.0) distance = 1.0; return distance; } @@ -4090,9 +4186,8 @@ double JoyControlStick::calculateEightWayDiagonalDistanceFromDeadZone() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double temp = calculateEightWayDiagonalDistanceFromDeadZone(axisX->getCurrentRawValue(), + return calculateEightWayDiagonalDistanceFromDeadZone(axisX->getCurrentRawValue(), axisY->getCurrentRawValue()); - return temp; } double JoyControlStick::calculateEightWayDiagonalDistanceFromDeadZone(int axisXValue, int axisYValue) @@ -4100,16 +4195,13 @@ double JoyControlStick::calculateEightWayDiagonalDistanceFromDeadZone(int axisXV qInstallMessageHandler(MessageHandler::myMessageOutput); double distance = 0.0; - double radius = getDistanceFromDeadZone(axisXValue, axisYValue); double bearing = calculateBearing(axisXValue, axisYValue); int relativeBearing = static_cast(bearing) % 90; - int diagonalAngle = relativeBearing; + if (relativeBearing > 45) - { diagonalAngle = 90 - relativeBearing; - } distance = radius * (diagonalAngle / 45.0); @@ -4121,16 +4213,13 @@ double JoyControlStick::calculateEightWayDiagonalDistance(int axisXValue, int ax qInstallMessageHandler(MessageHandler::myMessageOutput); double distance = 0.0; - double radius = getRadialDistance(axisXValue, axisYValue); double bearing = calculateBearing(axisXValue, axisYValue); int relativeBearing = static_cast(bearing) % 90; - int diagonalAngle = relativeBearing; + if (relativeBearing > 45) - { diagonalAngle = 90 - relativeBearing; - } distance = radius * (diagonalAngle / 45.0); @@ -4151,7 +4240,7 @@ double JoyControlStick::calculateXDiagonalDeadZone(int axisXValue, int axisYValu QList tempangles = getDiagonalZoneAngles(); double maxangle = tempangles.at(3); - double mindeadX = fabs(deadZone * cos(maxangle * PI / 180.0)); + double mindeadX = fabs(deadZone * cos(maxangle * GlobalVariables::JoyControlStick::PI / 180.0)); diagonalDeadZone = mindeadX; } else if ((direction == StickRightDown) || (direction == StickDown)) @@ -4159,7 +4248,7 @@ double JoyControlStick::calculateXDiagonalDeadZone(int axisXValue, int axisYValu QList tempangles = getDiagonalZoneAngles(); double maxangle = tempangles.at(5); - double mindeadX = fabs(deadZone * cos((maxangle - 90.0) * PI / 180.0)); + double mindeadX = fabs(deadZone * cos((maxangle - 90.0) * GlobalVariables::JoyControlStick::PI / 180.0)); diagonalDeadZone = mindeadX; } else if ((direction == StickLeftDown) || (direction == StickLeft)) @@ -4167,7 +4256,7 @@ double JoyControlStick::calculateXDiagonalDeadZone(int axisXValue, int axisYValu QList tempangles = getDiagonalZoneAngles(); double maxangle = tempangles.at(7); - double mindeadX = fabs(deadZone * cos((maxangle - 180.0) * PI / 180.0)); + double mindeadX = fabs(deadZone * cos((maxangle - 180.0) * GlobalVariables::JoyControlStick::PI / 180.0)); diagonalDeadZone = mindeadX; } else if ((direction == StickLeftUp) || (direction == StickUp)) @@ -4175,7 +4264,7 @@ double JoyControlStick::calculateXDiagonalDeadZone(int axisXValue, int axisYValu QList tempangles = getDiagonalZoneAngles(); double maxangle = tempangles.at(1); - double mindeadX = fabs(deadZone * cos((maxangle - 270.0) * PI / 180.0)); + double mindeadX = fabs(deadZone * cos((maxangle - 270.0) * GlobalVariables::JoyControlStick::PI / 180.0)); diagonalDeadZone = mindeadX; } else @@ -4205,7 +4294,7 @@ double JoyControlStick::calculateYDiagonalDeadZone(int axisXValue, int axisYValu QList tempangles = getDiagonalZoneAngles(); double minangle = tempangles.at(1); - double mindeadY = fabs(deadZone * sin(minangle * PI / 180.0)); + double mindeadY = fabs(deadZone * sin(minangle * GlobalVariables::JoyControlStick::PI / 180.0)); diagonalDeadZone = mindeadY; } else if ((direction == StickRightDown) || (direction == StickRight)) @@ -4213,7 +4302,7 @@ double JoyControlStick::calculateYDiagonalDeadZone(int axisXValue, int axisYValu QList tempfuck = getDiagonalZoneAngles(); double minangle = tempfuck.at(4); - double mindeadY = fabs(deadZone * sin((minangle - 90.0) * PI / 180.0)); + double mindeadY = fabs(deadZone * sin((minangle - 90.0) * GlobalVariables::JoyControlStick::PI / 180.0)); diagonalDeadZone = mindeadY; } else if ((direction == StickLeftDown) || (direction == StickDown)) @@ -4221,7 +4310,7 @@ double JoyControlStick::calculateYDiagonalDeadZone(int axisXValue, int axisYValu QList tempangles = getDiagonalZoneAngles(); double minangle = tempangles.at(6); - double mindeadY = fabs(deadZone * sin((minangle - 180.0) * PI / 180.0)); + double mindeadY = fabs(deadZone * sin((minangle - 180.0) * GlobalVariables::JoyControlStick::PI / 180.0)); diagonalDeadZone = mindeadY; } else if ((direction == StickLeftUp) || (direction == StickLeft)) @@ -4229,7 +4318,7 @@ double JoyControlStick::calculateYDiagonalDeadZone(int axisXValue, int axisYValu QList tempangles = getDiagonalZoneAngles(); double minangle = tempangles.at(8); - double mindeadY = fabs(deadZone * sin((minangle - 270.0) * PI / 180.0)); + double mindeadY = fabs(deadZone * sin((minangle - 270.0) * GlobalVariables::JoyControlStick::PI / 180.0)); diagonalDeadZone = mindeadY; } else @@ -4250,7 +4339,6 @@ double JoyControlStick::getSpringDeadCircleX() qInstallMessageHandler(MessageHandler::myMessageOutput); double result = 0.0; - double angle2 = 0.0; int axis1Value = 0; int axis2Value = 0; @@ -4274,10 +4362,10 @@ double JoyControlStick::getSpringDeadCircleX() double ang_sin = sin(angle2); double ang_cos = cos(angle2); - int deadX = abs(static_cast(floor(deadZone * ang_sin + 0.5))); + int deadX = abs(floor(deadZone * ang_sin + 0.5)); double diagonalDeadX = calculateXDiagonalDeadZone(axis1Value, axis2Value); - double squareStickFullPhi = qMin(static_cast(ang_sin) ? 1/fabs(ang_sin) : 2, static_cast(ang_cos) ? 1/fabs(ang_cos) : 2); + double squareStickFullPhi = qMin(ang_sin != 0.0 ? 1/fabs(ang_sin) : 2, ang_cos != 0.0 ? 1/fabs(ang_cos) : 2); double circle = this->circle; double circleStickFull = (squareStickFullPhi - 1) * circle + 1; @@ -4286,9 +4374,7 @@ double JoyControlStick::getSpringDeadCircleX() double maxRange = static_cast(deadZone) - diagonalDeadX; if (maxRange != 0.0) - { result = finalDeadZoneX / maxRange; - } return result; } @@ -4298,7 +4384,6 @@ double JoyControlStick::getSpringDeadCircleY() qInstallMessageHandler(MessageHandler::myMessageOutput); double result = 0.0; - double angle2 = 0.0; int axis1Value = 0; int axis2Value = 0; @@ -4322,10 +4407,10 @@ double JoyControlStick::getSpringDeadCircleY() double ang_sin = sin(angle2); double ang_cos = cos(angle2); - int deadY = abs(static_cast(floor(deadZone * ang_cos + 0.5))); + int deadY = abs(floor(deadZone * ang_cos + 0.5)); double diagonalDeadY = calculateYDiagonalDeadZone(axis1Value, axis2Value); - double squareStickFullPhi = qMin(static_cast(ang_sin) ? 1/fabs(ang_sin) : 2, static_cast(ang_cos) ? 1/fabs(ang_cos) : 2); + double squareStickFullPhi = qMin(ang_sin != 0.0 ? 1/fabs(ang_sin) : 2, ang_cos != 0.0 ? 1/fabs(ang_cos) : 2); double circle = this->circle; double circleStickFull = (squareStickFullPhi - 1) * circle + 1; @@ -4334,9 +4419,7 @@ double JoyControlStick::getSpringDeadCircleY() double maxRange = static_cast(deadZone) - diagonalDeadY; if (maxRange != 0.0) - { result = finalDeadZoneY / maxRange; - } return result; } @@ -4412,56 +4495,68 @@ JoyControlStick::getButtonsForDirection(JoyControlStick::JoyStickDirections dire qInstallMessageHandler(MessageHandler::myMessageOutput); QHash temphash; - if (currentMode == StandardMode) + + switch(currentMode) { - if (direction & JoyControlStick::StickUp) + case StandardMode: { - JoyControlStickButton *button = this->buttons.value(JoyControlStick::StickUp); - temphash.insert(JoyControlStick::StickUp, button); - } + if (direction & JoyControlStick::StickUp) + { + JoyControlStickButton *button = this->buttons.value(JoyControlStick::StickUp); + temphash.insert(JoyControlStick::StickUp, button); + } - if (direction & JoyControlStick::StickRight) - { - JoyControlStickButton *button = this->buttons.value(JoyControlStick::StickRight); - temphash.insert(JoyControlStick::StickRight, button); - } + if (direction & JoyControlStick::StickRight) + { + JoyControlStickButton *button = this->buttons.value(JoyControlStick::StickRight); + temphash.insert(JoyControlStick::StickRight, button); + } - if (direction & JoyControlStick::StickDown) - { - JoyControlStickButton *button = this->buttons.value(JoyControlStick::StickDown); - temphash.insert(JoyControlStick::StickDown, button); - } + if (direction & JoyControlStick::StickDown) + { + JoyControlStickButton *button = this->buttons.value(JoyControlStick::StickDown); + temphash.insert(JoyControlStick::StickDown, button); + } - if (direction & JoyControlStick::StickLeft) - { - JoyControlStickButton *button = this->buttons.value(JoyControlStick::StickLeft); - temphash.insert(JoyControlStick::StickLeft, button); + if (direction & JoyControlStick::StickLeft) + { + JoyControlStickButton *button = this->buttons.value(JoyControlStick::StickLeft); + temphash.insert(JoyControlStick::StickLeft, button); + } + + break; } - } - else if (currentMode == EightWayMode) - { - temphash.insert(direction, buttons.value(direction)); - } - else if (currentMode == FourWayCardinal) - { - if ((direction == JoyControlStick::StickUp) || - (direction == JoyControlStick::StickDown) || - (direction == JoyControlStick::StickLeft) || - (direction == JoyControlStick::StickRight)) + case EightWayMode: { temphash.insert(direction, buttons.value(direction)); + break; } + case FourWayCardinal: + { + if ((direction == JoyControlStick::StickUp) || + (direction == JoyControlStick::StickDown) || + (direction == JoyControlStick::StickLeft) || + (direction == JoyControlStick::StickRight)) + { + temphash.insert(direction, buttons.value(direction)); + } - } - else if (currentMode == FourWayDiagonal) - { - if ((direction == JoyControlStick::StickRightUp) || - (direction == JoyControlStick::StickRightDown) || - (direction == JoyControlStick::StickLeftDown) || - (direction == JoyControlStick::StickLeftUp)) + break; + + } + case FourWayDiagonal: { - temphash.insert(direction, buttons.value(direction)); + if ((direction == JoyControlStick::StickRightUp) || + (direction == JoyControlStick::StickRightDown) || + (direction == JoyControlStick::StickLeftDown) || + (direction == JoyControlStick::StickLeftUp)) + { + temphash.insert(direction, buttons.value(direction)); + } + + break; } + } return temphash; diff --git a/src/joycontrolstick.h b/src/joycontrolstick.h old mode 100644 new mode 100755 index 3828a79df..b889e3abf --- a/src/joycontrolstick.h +++ b/src/joycontrolstick.h @@ -177,16 +177,7 @@ class JoyControlStick : public QObject, public JoyStickDirectionsType virtual void readConfig(QXmlStreamReader *xml); virtual void writeConfig(QXmlStreamWriter *xml); - static const double PI; - - // Define default values for stick properties. - static const int DEFAULTDEADZONE; - static const int DEFAULTMAXZONE; - static const int DEFAULTDIAGONALRANGE; static const JoyMode DEFAULTMODE; - static const double DEFAULTCIRCLE; - static const int DEFAULTSTICKDELAY; // unsigned - protected: virtual void populateButtons(); @@ -298,6 +289,8 @@ private slots: QHash buttons; JoyControlStickModifierButton *modifierButton; + + void populateStickBtns(); }; #endif // JOYCONTROLSTICK_H diff --git a/src/joycontrolstickbuttonpushbutton.cpp b/src/joycontrolstickbuttonpushbutton.cpp old mode 100644 new mode 100755 index 859940ecc..42e948306 --- a/src/joycontrolstickbuttonpushbutton.cpp +++ b/src/joycontrolstickbuttonpushbutton.cpp @@ -27,7 +27,6 @@ #include #include - JoyControlStickButtonPushButton::JoyControlStickButtonPushButton(JoyControlStickButton *button, bool displayNames, QWidget *parent) : FlashButtonWidget(displayNames, parent) { diff --git a/src/joycontrolstickbuttonpushbutton.h b/src/joycontrolstickbuttonpushbutton.h old mode 100644 new mode 100755 index adced37d7..cf7c717ad --- a/src/joycontrolstickbuttonpushbutton.h +++ b/src/joycontrolstickbuttonpushbutton.h @@ -38,11 +38,11 @@ class JoyControlStickButtonPushButton : public FlashButtonWidget void tryFlash(); protected: - virtual QString generateLabel(); + virtual QString generateLabel() override; public slots: - void disableFlashes(); - void enableFlashes(); + void disableFlashes() override; + void enableFlashes() override; private slots: void showContextMenu(const QPoint &point); diff --git a/src/joycontrolstickcontextmenu.cpp b/src/joycontrolstickcontextmenu.cpp old mode 100644 new mode 100755 index 6e1a4ad9f..cd8c814e5 --- a/src/joycontrolstickcontextmenu.cpp +++ b/src/joycontrolstickcontextmenu.cpp @@ -30,7 +30,6 @@ #include #include - JoyControlStickContextMenu::JoyControlStickContextMenu(JoyControlStick *stick, QWidget *parent) : QMenu(parent), helper(stick) @@ -47,13 +46,11 @@ void JoyControlStickContextMenu::buildMenu() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QAction *action = nullptr; - QActionGroup *presetGroup = new QActionGroup(this); int presetMode = 0; int currentPreset = getPresetIndex(); - action = this->addAction(trUtf8("Mouse (Normal)")); + QAction *action = this->addAction(trUtf8("Mouse (Normal)")); action->setCheckable(true); action->setChecked(currentPreset == presetMode+1); action->setData(QVariant(presetMode)); @@ -218,131 +215,153 @@ void JoyControlStickContextMenu::setStickPreset(QAction* action) JoyButtonSlot *downLeftButtonSlot = nullptr; JoyButtonSlot *downRightButtonSlot = nullptr; - if (item == 0) + + switch(item) { - PadderCommon::inputDaemonMutex.lock(); + case 0: + { + PadderCommon::inputDaemonMutex.lock(); - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - stick->setJoyMode(JoyControlStick::StandardMode); - stick->setDiagonalRange(65); + stick->setJoyMode(JoyControlStick::StandardMode); + stick->setDiagonalRange(65); - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 1) - { - PadderCommon::inputDaemonMutex.lock(); + PadderCommon::inputDaemonMutex.unlock(); - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + break; + } + case 1: + { + PadderCommon::inputDaemonMutex.lock(); - stick->setJoyMode(JoyControlStick::StandardMode); - stick->setDiagonalRange(65); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 2) - { - PadderCommon::inputDaemonMutex.lock(); + stick->setJoyMode(JoyControlStick::StandardMode); + stick->setDiagonalRange(65); - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + PadderCommon::inputDaemonMutex.unlock(); - stick->setJoyMode(JoyControlStick::StandardMode); - stick->setDiagonalRange(65); + break; + } + case 2: + { + PadderCommon::inputDaemonMutex.lock(); - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 3) - { - PadderCommon::inputDaemonMutex.lock(); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + stick->setJoyMode(JoyControlStick::StandardMode); + stick->setDiagonalRange(65); - stick->setJoyMode(JoyControlStick::StandardMode); - stick->setDiagonalRange(65); + PadderCommon::inputDaemonMutex.unlock(); - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 4) - { - PadderCommon::inputDaemonMutex.lock(); + break; + } + case 3: + { + PadderCommon::inputDaemonMutex.lock(); - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Up), Qt::Key_Up, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Down), Qt::Key_Down, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Left), Qt::Key_Left, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Right), Qt::Key_Right, JoyButtonSlot::JoyKeyboard, this); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - stick->setJoyMode(JoyControlStick::StandardMode); - stick->setDiagonalRange(45); + stick->setJoyMode(JoyControlStick::StandardMode); + stick->setDiagonalRange(65); - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 5) - { - PadderCommon::inputDaemonMutex.lock(); + PadderCommon::inputDaemonMutex.unlock(); - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_W), Qt::Key_W, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_S), Qt::Key_S, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_A), Qt::Key_A, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_D), Qt::Key_D, JoyButtonSlot::JoyKeyboard, this); + break; + } + case 4: + { + PadderCommon::inputDaemonMutex.lock(); - stick->setJoyMode(JoyControlStick::StandardMode); - stick->setDiagonalRange(45); + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Up), Qt::Key_Up, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Down), Qt::Key_Down, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Left), Qt::Key_Left, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Right), Qt::Key_Right, JoyButtonSlot::JoyKeyboard, this); - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 6) - { - PadderCommon::inputDaemonMutex.lock(); + stick->setJoyMode(JoyControlStick::StandardMode); + stick->setDiagonalRange(45); + + PadderCommon::inputDaemonMutex.unlock(); - if ((stick->getJoyMode() == JoyControlStick::StandardMode) || - (stick->getJoyMode() == JoyControlStick::FourWayCardinal)) + break; + } + case 5: { - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); + PadderCommon::inputDaemonMutex.lock(); + + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_W), Qt::Key_W, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_S), Qt::Key_S, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_A), Qt::Key_A, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_D), Qt::Key_D, JoyButtonSlot::JoyKeyboard, this); + + stick->setJoyMode(JoyControlStick::StandardMode); + stick->setDiagonalRange(45); + + PadderCommon::inputDaemonMutex.unlock(); + + break; } - else if (stick->getJoyMode() == JoyControlStick::EightWayMode) + case 6: { - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); - - upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); - upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); - downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); - downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); + PadderCommon::inputDaemonMutex.lock(); + + if ((stick->getJoyMode() == JoyControlStick::StandardMode) || + (stick->getJoyMode() == JoyControlStick::FourWayCardinal)) + { + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); + } + else if (stick->getJoyMode() == JoyControlStick::EightWayMode) + { + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); + + upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); + upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); + downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); + downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); + } + else if (stick->getJoyMode() == JoyControlStick::FourWayDiagonal) + { + upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); + upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); + downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); + downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); + } + + stick->setDiagonalRange(45); + + PadderCommon::inputDaemonMutex.unlock(); + + break; } - else if (stick->getJoyMode() == JoyControlStick::FourWayDiagonal) + case 7: { - upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); - upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); - downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); - downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); + QMetaObject::invokeMethod(&helper, "clearButtonsSlotsEventReset"); + QMetaObject::invokeMethod(stick, "setDiagonalRange", Q_ARG(int, 45)); + + break; } + } - stick->setDiagonalRange(45); - PadderCommon::inputDaemonMutex.unlock(); - } - else if (item == 7) - { - QMetaObject::invokeMethod(&helper, "clearButtonsSlotsEventReset"); - QMetaObject::invokeMethod(stick, "setDiagonalRange", Q_ARG(int, 45)); - } QHash tempHash; tempHash.insert(JoyControlStick::StickUp, upButtonSlot); diff --git a/src/joycontrolstickcontextmenu.h b/src/joycontrolstickcontextmenu.h old mode 100644 new mode 100755 diff --git a/src/joycontrolstickdirectionstype.h b/src/joycontrolstickdirectionstype.h old mode 100644 new mode 100755 diff --git a/src/joycontrolstickeditdialog.cpp b/src/joycontrolstickeditdialog.cpp old mode 100644 new mode 100755 index 01e50d638..46a839c17 --- a/src/joycontrolstickeditdialog.cpp +++ b/src/joycontrolstickeditdialog.cpp @@ -80,27 +80,36 @@ JoyControlStickEditDialog::JoyControlStickEditDialog(JoyControlStick *stick, QWi ui->distanceLabel->setText(QString::number(stick->getAbsoluteRawDistance())); ui->diagonalLabel->setText(QString::number(stick->calculateBearing())); - if (stick->getJoyMode() == JoyControlStick::StandardMode) - { - ui->joyModeComboBox->setCurrentIndex(0); - } - else if (stick->getJoyMode() == JoyControlStick::EightWayMode) - { - ui->joyModeComboBox->setCurrentIndex(1); - } - else if (stick->getJoyMode() == JoyControlStick::FourWayCardinal) - { - ui->joyModeComboBox->setCurrentIndex(2); - ui->diagonalRangeSlider->setEnabled(false); - ui->diagonalRangeSpinBox->setEnabled(false); - } - else if (stick->getJoyMode() == JoyControlStick::FourWayDiagonal) + + switch(stick->getJoyMode()) { - ui->joyModeComboBox->setCurrentIndex(3); - ui->diagonalRangeSlider->setEnabled(false); - ui->diagonalRangeSpinBox->setEnabled(false); + case JoyControlStick::StandardMode: + { + ui->joyModeComboBox->setCurrentIndex(0); + break; + } + case JoyControlStick::EightWayMode: + { + ui->joyModeComboBox->setCurrentIndex(1); + break; + } + case JoyControlStick::FourWayCardinal: + { + ui->joyModeComboBox->setCurrentIndex(2); + ui->diagonalRangeSlider->setEnabled(false); + ui->diagonalRangeSpinBox->setEnabled(false); + break; + } + case JoyControlStick::FourWayDiagonal: + { + ui->joyModeComboBox->setCurrentIndex(3); + ui->diagonalRangeSlider->setEnabled(false); + ui->diagonalRangeSpinBox->setEnabled(false); + break; + } } + ui->stickStatusBoxWidget->setStick(stick); selectCurrentPreset(); @@ -110,11 +119,11 @@ JoyControlStickEditDialog::JoyControlStickEditDialog(JoyControlStick *stick, QWi ui->fromSafeZoneValueLabel->setText(QString::number(validDistance)); double circleValue = stick->getCircleAdjust(); - ui->squareStickSlider->setValue(static_cast(circleValue) * 100); - ui->squareStickSpinBox->setValue(static_cast(circleValue) * 100); + ui->squareStickSlider->setValue(circleValue * 100); + ui->squareStickSpinBox->setValue(circleValue * 100); int stickDelay = stick->getStickDelay(); - ui->stickDelaySlider->setValue(static_cast(stickDelay * .1)); + ui->stickDelaySlider->setValue(stickDelay * .1); ui->stickDelayDoubleSpinBox->setValue(stickDelay * .001); ui->modifierPushButton->setText(stick->getModifierButton()->getSlotsSummary()); @@ -174,131 +183,152 @@ void JoyControlStickEditDialog::implementPresets(int index) JoyButtonSlot *downLeftButtonSlot = nullptr; JoyButtonSlot *downRightButtonSlot = nullptr; - if (index == 1) + switch(index) { - PadderCommon::inputDaemonMutex.lock(); - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + case 1: + { + PadderCommon::inputDaemonMutex.lock(); - PadderCommon::inputDaemonMutex.unlock(); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - ui->joyModeComboBox->setCurrentIndex(0); - ui->diagonalRangeSlider->setValue(65); - } - else if (index == 2) - { - PadderCommon::inputDaemonMutex.lock(); + PadderCommon::inputDaemonMutex.unlock(); - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + ui->joyModeComboBox->setCurrentIndex(0); + ui->diagonalRangeSlider->setValue(65); - PadderCommon::inputDaemonMutex.unlock(); + break; + } + case 2: + { + PadderCommon::inputDaemonMutex.lock(); - ui->joyModeComboBox->setCurrentIndex(0); - ui->diagonalRangeSlider->setValue(65); - } - else if (index == 3) - { - PadderCommon::inputDaemonMutex.lock(); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + PadderCommon::inputDaemonMutex.unlock(); - PadderCommon::inputDaemonMutex.unlock(); + ui->joyModeComboBox->setCurrentIndex(0); + ui->diagonalRangeSlider->setValue(65); - ui->joyModeComboBox->setCurrentIndex(0); - ui->diagonalRangeSlider->setValue(65); - } - else if (index == 4) - { - PadderCommon::inputDaemonMutex.lock(); + break; + } + case 3: + { + PadderCommon::inputDaemonMutex.lock(); - upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); - downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); - leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); - PadderCommon::inputDaemonMutex.unlock(); + PadderCommon::inputDaemonMutex.unlock(); - ui->joyModeComboBox->setCurrentIndex(0); - ui->diagonalRangeSlider->setValue(65); - } - else if (index == 5) - { - PadderCommon::inputDaemonMutex.lock(); + ui->joyModeComboBox->setCurrentIndex(0); + ui->diagonalRangeSlider->setValue(65); - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Up), Qt::Key_Up, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Down), Qt::Key_Down, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Left), Qt::Key_Left, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Right), Qt::Key_Right, JoyButtonSlot::JoyKeyboard, this); + break; + } + case 4: + { + PadderCommon::inputDaemonMutex.lock(); - PadderCommon::inputDaemonMutex.unlock(); + upButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseDown, JoyButtonSlot::JoyMouseMovement, this); + downButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseUp, JoyButtonSlot::JoyMouseMovement, this); + leftButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseRight, JoyButtonSlot::JoyMouseMovement, this); + rightButtonSlot = new JoyButtonSlot(JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); - ui->joyModeComboBox->setCurrentIndex(0); - ui->diagonalRangeSlider->setValue(45); - } - else if (index == 6) - { - PadderCommon::inputDaemonMutex.lock(); + PadderCommon::inputDaemonMutex.unlock(); - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_W), Qt::Key_W, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_S), Qt::Key_S, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_A), Qt::Key_A, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_D), Qt::Key_D, JoyButtonSlot::JoyKeyboard, this); + ui->joyModeComboBox->setCurrentIndex(0); + ui->diagonalRangeSlider->setValue(65); - PadderCommon::inputDaemonMutex.unlock(); + break; + } + case 5: + { + PadderCommon::inputDaemonMutex.lock(); - ui->joyModeComboBox->setCurrentIndex(0); - ui->diagonalRangeSlider->setValue(45); - } - else if (index == 7) - { - PadderCommon::inputDaemonMutex.lock(); + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Up), Qt::Key_Up, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Down), Qt::Key_Down, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Left), Qt::Key_Left, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_Right), Qt::Key_Right, JoyButtonSlot::JoyKeyboard, this); - if ((ui->joyModeComboBox->currentIndex() == 0) || - (ui->joyModeComboBox->currentIndex() == 2)) - { - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); + PadderCommon::inputDaemonMutex.unlock(); + + ui->joyModeComboBox->setCurrentIndex(0); + ui->diagonalRangeSlider->setValue(45); + + break; } - else if (ui->joyModeComboBox->currentIndex() == 1) + case 6: { - upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); - downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); - leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); - rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); - - upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); - upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); - downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); - downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); + PadderCommon::inputDaemonMutex.lock(); + + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_W), Qt::Key_W, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_S), Qt::Key_S, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_A), Qt::Key_A, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(Qt::Key_D), Qt::Key_D, JoyButtonSlot::JoyKeyboard, this); + + PadderCommon::inputDaemonMutex.unlock(); + + ui->joyModeComboBox->setCurrentIndex(0); + ui->diagonalRangeSlider->setValue(45); + + break; } - else if (ui->joyModeComboBox->currentIndex() == 3) + case 7: { - upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); - upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); - downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); - downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); + PadderCommon::inputDaemonMutex.lock(); + + if ((ui->joyModeComboBox->currentIndex() == 0) || + (ui->joyModeComboBox->currentIndex() == 2)) + { + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); + } + else if (ui->joyModeComboBox->currentIndex() == 1) + { + upButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_8), QtKeyMapperBase::AntKey_KP_8, JoyButtonSlot::JoyKeyboard, this); + downButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_2), QtKeyMapperBase::AntKey_KP_2, JoyButtonSlot::JoyKeyboard, this); + leftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_4), QtKeyMapperBase::AntKey_KP_4, JoyButtonSlot::JoyKeyboard, this); + rightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_6), QtKeyMapperBase::AntKey_KP_6, JoyButtonSlot::JoyKeyboard, this); + + upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); + upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); + downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); + downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); + } + else if (ui->joyModeComboBox->currentIndex() == 3) + { + upLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_7), QtKeyMapperBase::AntKey_KP_7, JoyButtonSlot::JoyKeyboard, this); + upRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_9), QtKeyMapperBase::AntKey_KP_9, JoyButtonSlot::JoyKeyboard, this); + downLeftButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_1), QtKeyMapperBase::AntKey_KP_1, JoyButtonSlot::JoyKeyboard, this); + downRightButtonSlot = new JoyButtonSlot(AntKeyMapper::getInstance()->returnVirtualKey(QtKeyMapperBase::AntKey_KP_3), QtKeyMapperBase::AntKey_KP_3, JoyButtonSlot::JoyKeyboard, this); + } + + PadderCommon::inputDaemonMutex.unlock(); + + ui->diagonalRangeSlider->setValue(45); + + break; } + case 8: + { + QMetaObject::invokeMethod(&helper, "clearButtonsSlotsEventReset", Qt::BlockingQueuedConnection); - PadderCommon::inputDaemonMutex.unlock(); + ui->diagonalRangeSlider->setValue(45); - ui->diagonalRangeSlider->setValue(45); - } - else if (index == 8) - { - QMetaObject::invokeMethod(&helper, "clearButtonsSlotsEventReset", Qt::BlockingQueuedConnection); + break; + } - ui->diagonalRangeSlider->setValue(45); } QHash tempHash; @@ -365,29 +395,40 @@ void JoyControlStickEditDialog::implementModes(int index) stick->releaseButtonEvents(); - if (index == 0) - { - stick->setJoyMode(JoyControlStick::StandardMode); - ui->diagonalRangeSlider->setEnabled(true); - ui->diagonalRangeSpinBox->setEnabled(true); - } - else if (index == 1) + switch(index) { - stick->setJoyMode(JoyControlStick::EightWayMode); - ui->diagonalRangeSlider->setEnabled(true); - ui->diagonalRangeSpinBox->setEnabled(true); - } - else if (index == 2) - { - stick->setJoyMode(JoyControlStick::FourWayCardinal); - ui->diagonalRangeSlider->setEnabled(false); - ui->diagonalRangeSpinBox->setEnabled(false); - } - else if (index == 3) - { - stick->setJoyMode(JoyControlStick::FourWayDiagonal); - ui->diagonalRangeSlider->setEnabled(false); - ui->diagonalRangeSpinBox->setEnabled(false); + case 0: + { + stick->setJoyMode(JoyControlStick::StandardMode); + ui->diagonalRangeSlider->setEnabled(true); + ui->diagonalRangeSpinBox->setEnabled(true); + + break; + } + case 1: + { + stick->setJoyMode(JoyControlStick::EightWayMode); + ui->diagonalRangeSlider->setEnabled(true); + ui->diagonalRangeSpinBox->setEnabled(true); + + break; + } + case 2: + { + stick->setJoyMode(JoyControlStick::FourWayCardinal); + ui->diagonalRangeSlider->setEnabled(false); + ui->diagonalRangeSpinBox->setEnabled(false); + + break; + } + case 3: + { + stick->setJoyMode(JoyControlStick::FourWayDiagonal); + ui->diagonalRangeSlider->setEnabled(false); + ui->diagonalRangeSpinBox->setEnabled(false); + + break; + } } PadderCommon::inputDaemonMutex.unlock(); @@ -555,7 +596,7 @@ void JoyControlStickEditDialog::updateStickDelaySpinBox(int value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - double temp = value * 0.001; // static_cast + double temp = value * 0.001; ui->stickDelayDoubleSpinBox->setValue(temp); } @@ -567,7 +608,8 @@ void JoyControlStickEditDialog::updateStickDelaySlider(double value) { qInstallMessageHandler(MessageHandler::myMessageOutput); - int temp = static_cast(value) * 100; + int temp = value * 100; + if (ui->stickDelaySlider->value() != temp) { ui->stickDelaySlider->setValue(temp); diff --git a/src/joycontrolstickeditdialog.h b/src/joycontrolstickeditdialog.h old mode 100644 new mode 100755 diff --git a/src/joycontrolstickeditdialog.ui b/src/joycontrolstickeditdialog.ui old mode 100644 new mode 100755 diff --git a/src/joycontrolstickpushbutton.cpp b/src/joycontrolstickpushbutton.cpp old mode 100644 new mode 100755 diff --git a/src/joycontrolstickpushbutton.h b/src/joycontrolstickpushbutton.h old mode 100644 new mode 100755 index adc5f7c68..1c4eff8f1 --- a/src/joycontrolstickpushbutton.h +++ b/src/joycontrolstickpushbutton.h @@ -37,11 +37,11 @@ class JoyControlStickPushButton : public FlashButtonWidget void tryFlash(); protected: - virtual QString generateLabel(); + virtual QString generateLabel() override; public slots: - void disableFlashes(); - void enableFlashes(); + void disableFlashes() override; + void enableFlashes() override; private slots: void showContextMenu(const QPoint &point); diff --git a/src/joycontrolstickstatusbox.cpp b/src/joycontrolstickstatusbox.cpp old mode 100644 new mode 100755 index b3ac1f0d6..2f732d72d --- a/src/joycontrolstickstatusbox.cpp +++ b/src/joycontrolstickstatusbox.cpp @@ -17,6 +17,7 @@ #include "joycontrolstickstatusbox.h" +#include "globalvariables.h" #include "messagehandler.h" #include "joycontrolstick.h" #include "joyaxis.h" @@ -146,8 +147,8 @@ void JoyControlStickStatusBox::drawEightWayBox() painter.drawRect(0, 0, side-1, side-1); painter.save(); - painter.scale(side / static_cast(JoyAxis::AXISMAX*2.0), side / static_cast(JoyAxis::AXISMAX*2.0)); - painter.translate(JoyAxis::AXISMAX, JoyAxis::AXISMAX); + painter.scale(side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0), side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0)); + painter.translate(GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX); // Draw diagonal zones QList anglesList = stick->getDiagonalZoneAngles(); @@ -157,10 +158,11 @@ void JoyControlStickStatusBox::drawEightWayBox() painter.setPen(penny); painter.setBrush(QBrush(Qt::green)); - painter.drawPie(-JoyAxis::AXISMAX, -JoyAxis::AXISMAX, JoyAxis::AXISMAX*2, JoyAxis::AXISMAX*2, static_cast(anglesList.value(2)*16), stick->getDiagonalRange()*16); - painter.drawPie(-JoyAxis::AXISMAX, -JoyAxis::AXISMAX, JoyAxis::AXISMAX*2, JoyAxis::AXISMAX*2, static_cast(anglesList.value(4)*16), stick->getDiagonalRange()*16); - painter.drawPie(-JoyAxis::AXISMAX, -JoyAxis::AXISMAX, JoyAxis::AXISMAX*2, JoyAxis::AXISMAX*2, static_cast(anglesList.value(6)*16), stick->getDiagonalRange()*16); - painter.drawPie(-JoyAxis::AXISMAX, -JoyAxis::AXISMAX, JoyAxis::AXISMAX*2, JoyAxis::AXISMAX*2, static_cast(anglesList.value(8)*16), stick->getDiagonalRange()*16); + painter.drawPie(-GlobalVariables::JoyAxis::AXISMAX, -GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX*2, GlobalVariables::JoyAxis::AXISMAX*2, static_cast(anglesList.value(2))*16, stick->getDiagonalRange()*16); + painter.drawPie(-GlobalVariables::JoyAxis::AXISMAX, -GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX*2, GlobalVariables::JoyAxis::AXISMAX*2, static_cast(anglesList.value(4))*16, stick->getDiagonalRange()*16); + painter.drawPie(-GlobalVariables::JoyAxis::AXISMAX, -GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX*2, GlobalVariables::JoyAxis::AXISMAX*2, static_cast(anglesList.value(6))*16, stick->getDiagonalRange()*16); + painter.drawPie(-GlobalVariables::JoyAxis::AXISMAX, -GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX*2, GlobalVariables::JoyAxis::AXISMAX*2, static_cast(anglesList.value(8)) + *16, stick->getDiagonalRange()*16); // Draw deadzone circle penny.setWidth(0); @@ -184,8 +186,8 @@ void JoyControlStickStatusBox::drawEightWayBox() painter.restore(); painter.save(); - painter.scale(side / static_cast(JoyAxis::AXISMAX*2.0), side / static_cast(JoyAxis::AXISMAX*2.0)); - painter.translate(JoyAxis::AXISMAX, JoyAxis::AXISMAX); + painter.scale(side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0), side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0)); + painter.translate(GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX); penny.setWidth(0); painter.setBrush(QBrush(Qt::black)); @@ -196,14 +198,14 @@ void JoyControlStickStatusBox::drawEightWayBox() int linexstart = stick->getXCoordinate()-1000; int lineystart = stick->getYCoordinate()-1000; - if (linexstart < JoyAxis::AXISMIN) + if (linexstart < GlobalVariables::JoyAxis::AXISMIN) { - linexstart = JoyAxis::AXISMIN; + linexstart = GlobalVariables::JoyAxis::AXISMIN; } - if (lineystart < JoyAxis::AXISMIN) + if (lineystart < GlobalVariables::JoyAxis::AXISMIN) { - lineystart = JoyAxis::AXISMIN; + lineystart = GlobalVariables::JoyAxis::AXISMIN; } painter.drawRect(linexstart, lineystart, 2000, 2000); @@ -215,14 +217,14 @@ void JoyControlStickStatusBox::drawEightWayBox() // Draw adjusted crosshair linexstart = stick->getCircleXCoordinate()-1000; lineystart = stick->getCircleYCoordinate()-1000; - if (linexstart < JoyAxis::AXISMIN) + if (linexstart < GlobalVariables::JoyAxis::AXISMIN) { - linexstart = JoyAxis::AXISMIN; + linexstart = GlobalVariables::JoyAxis::AXISMIN; } - if (lineystart < JoyAxis::AXISMIN) + if (lineystart < GlobalVariables::JoyAxis::AXISMIN) { - lineystart = JoyAxis::AXISMIN; + lineystart = GlobalVariables::JoyAxis::AXISMIN; } painter.drawRect(linexstart, lineystart, 2000, 2000); @@ -239,18 +241,18 @@ void JoyControlStickStatusBox::drawEightWayBox() paint.drawPixmap(pix.rect(), pix); paint.save(); - paint.scale(side / static_cast(JoyAxis::AXISMAX*2.0), side / static_cast(JoyAxis::AXISMAX*2.0)); - paint.translate(JoyAxis::AXISMAX, JoyAxis::AXISMAX); + paint.scale(side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0), side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0)); + paint.translate(GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX); // Draw max zone and initial inner clear circle int maxzone = stick->getMaxZone(); - int diffmaxzone = JoyAxis::AXISMAX - maxzone; + int diffmaxzone = GlobalVariables::JoyAxis::AXISMAX - maxzone; paint.setOpacity(0.5); paint.setBrush(Qt::darkGreen); - paint.drawEllipse(-JoyAxis::AXISMAX, -JoyAxis::AXISMAX, JoyAxis::AXISMAX*2, JoyAxis::AXISMAX*2); + paint.drawEllipse(-GlobalVariables::JoyAxis::AXISMAX, -GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX*2, GlobalVariables::JoyAxis::AXISMAX*2); paint.setCompositionMode(QPainter::CompositionMode_Clear); paint.setPen(Qt::NoPen); - paint.drawEllipse(-JoyAxis::AXISMAX+diffmaxzone, -JoyAxis::AXISMAX+diffmaxzone, JoyAxis::AXISMAX*2-(diffmaxzone*2), JoyAxis::AXISMAX*2-(diffmaxzone*2)); + paint.drawEllipse(-GlobalVariables::JoyAxis::AXISMAX+diffmaxzone, -GlobalVariables::JoyAxis::AXISMAX+diffmaxzone, GlobalVariables::JoyAxis::AXISMAX*2-(diffmaxzone*2), GlobalVariables::JoyAxis::AXISMAX*2-(diffmaxzone*2)); painter.setCompositionMode(QPainter::CompositionMode_SourceOver); paint.setOpacity(1.0); @@ -284,8 +286,8 @@ void JoyControlStickStatusBox::drawFourWayCardinalBox() painter.drawRect(0, 0, side-1, side-1); painter.save(); - painter.scale(side / static_cast(JoyAxis::AXISMAX*2.0), side / static_cast(JoyAxis::AXISMAX*2.0)); - painter.translate(JoyAxis::AXISMAX, JoyAxis::AXISMAX); + painter.scale(side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0), side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0)); + painter.translate(GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX); // Draw diagonal zones QList anglesList = stick->getFourWayCardinalZoneAngles(); @@ -295,8 +297,8 @@ void JoyControlStickStatusBox::drawFourWayCardinalBox() painter.setOpacity(0.25); painter.setBrush(QBrush(Qt::black)); - painter.drawPie(-JoyAxis::AXISMAX, -JoyAxis::AXISMAX, JoyAxis::AXISMAX*2, JoyAxis::AXISMAX*2, anglesList.value(1)*16, 90*16); - painter.drawPie(-JoyAxis::AXISMAX, -JoyAxis::AXISMAX, JoyAxis::AXISMAX*2, JoyAxis::AXISMAX*2, anglesList.value(3)*16, 90*16); + painter.drawPie(-GlobalVariables::JoyAxis::AXISMAX, -GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX*2, GlobalVariables::JoyAxis::AXISMAX*2, anglesList.value(1)*16, 90*16); + painter.drawPie(-GlobalVariables::JoyAxis::AXISMAX, -GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX*2, GlobalVariables::JoyAxis::AXISMAX*2, anglesList.value(3)*16, 90*16); painter.setOpacity(1.0); @@ -324,8 +326,8 @@ void JoyControlStickStatusBox::drawFourWayCardinalBox() painter.restore(); painter.save(); - painter.scale(side / static_cast(JoyAxis::AXISMAX*2.0), side / static_cast(JoyAxis::AXISMAX*2.0)); - painter.translate(JoyAxis::AXISMAX, JoyAxis::AXISMAX); + painter.scale(side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0), side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0)); + painter.translate(GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX); penny.setWidth(0); painter.setBrush(QBrush(Qt::black)); penny.setColor(Qt::black); @@ -335,14 +337,14 @@ void JoyControlStickStatusBox::drawFourWayCardinalBox() int linexstart = stick->getXCoordinate()-1000; int lineystart = stick->getYCoordinate()-1000; - if (linexstart < JoyAxis::AXISMIN) + if (linexstart < GlobalVariables::JoyAxis::AXISMIN) { - linexstart = JoyAxis::AXISMIN; + linexstart = GlobalVariables::JoyAxis::AXISMIN; } - if (lineystart < JoyAxis::AXISMIN) + if (lineystart < GlobalVariables::JoyAxis::AXISMIN) { - lineystart = JoyAxis::AXISMIN; + lineystart = GlobalVariables::JoyAxis::AXISMIN; } painter.drawRect(linexstart, lineystart, 2000, 2000); @@ -354,14 +356,14 @@ void JoyControlStickStatusBox::drawFourWayCardinalBox() // Draw adjusted crosshair linexstart = stick->getCircleXCoordinate()-1000; lineystart = stick->getCircleYCoordinate()-1000; - if (linexstart < JoyAxis::AXISMIN) + if (linexstart < GlobalVariables::JoyAxis::AXISMIN) { - linexstart = JoyAxis::AXISMIN; + linexstart = GlobalVariables::JoyAxis::AXISMIN; } - if (lineystart < JoyAxis::AXISMIN) + if (lineystart < GlobalVariables::JoyAxis::AXISMIN) { - lineystart = JoyAxis::AXISMIN; + lineystart = GlobalVariables::JoyAxis::AXISMIN; } painter.drawRect(linexstart, lineystart, 2000, 2000); @@ -378,18 +380,18 @@ void JoyControlStickStatusBox::drawFourWayCardinalBox() paint.drawPixmap(pix.rect(), pix); paint.save(); - paint.scale(side / static_cast(JoyAxis::AXISMAX*2.0), side / static_cast(JoyAxis::AXISMAX*2.0)); - paint.translate(JoyAxis::AXISMAX, JoyAxis::AXISMAX); + paint.scale(side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0), side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0)); + paint.translate(GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX); // Draw max zone and initial inner clear circle int maxzone = stick->getMaxZone(); - int diffmaxzone = JoyAxis::AXISMAX - maxzone; + int diffmaxzone = GlobalVariables::JoyAxis::AXISMAX - maxzone; paint.setOpacity(0.5); paint.setBrush(Qt::darkGreen); - paint.drawEllipse(-JoyAxis::AXISMAX, -JoyAxis::AXISMAX, JoyAxis::AXISMAX*2, JoyAxis::AXISMAX*2); + paint.drawEllipse(-GlobalVariables::JoyAxis::AXISMAX, -GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX*2, GlobalVariables::JoyAxis::AXISMAX*2); paint.setCompositionMode(QPainter::CompositionMode_Clear); paint.setPen(Qt::NoPen); - paint.drawEllipse(-JoyAxis::AXISMAX+diffmaxzone, -JoyAxis::AXISMAX+diffmaxzone, JoyAxis::AXISMAX*2-(diffmaxzone*2), JoyAxis::AXISMAX*2-(diffmaxzone*2)); + paint.drawEllipse(-GlobalVariables::JoyAxis::AXISMAX+diffmaxzone, -GlobalVariables::JoyAxis::AXISMAX+diffmaxzone, GlobalVariables::JoyAxis::AXISMAX*2-(diffmaxzone*2), GlobalVariables::JoyAxis::AXISMAX*2-(diffmaxzone*2)); painter.setCompositionMode(QPainter::CompositionMode_SourceOver); paint.setOpacity(1.0); @@ -423,8 +425,8 @@ void JoyControlStickStatusBox::drawFourWayDiagonalBox() painter.drawRect(0, 0, side-1, side-1); painter.save(); - painter.scale(side / static_cast(JoyAxis::AXISMAX*2.0), side / static_cast(JoyAxis::AXISMAX*2.0)); - painter.translate(JoyAxis::AXISMAX, JoyAxis::AXISMAX); + painter.scale(side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0), side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0)); + painter.translate(GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX); // Draw diagonal zones QList anglesList = stick->getFourWayDiagonalZoneAngles(); @@ -434,8 +436,8 @@ void JoyControlStickStatusBox::drawFourWayDiagonalBox() painter.setBrush(QBrush(Qt::black)); painter.setOpacity(0.25); - painter.drawPie(-JoyAxis::AXISMAX, -JoyAxis::AXISMAX, JoyAxis::AXISMAX*2, JoyAxis::AXISMAX*2, anglesList.value(1)*16, 90*16); - painter.drawPie(-JoyAxis::AXISMAX, -JoyAxis::AXISMAX, JoyAxis::AXISMAX*2, JoyAxis::AXISMAX*2, anglesList.value(3)*16, 90*16); + painter.drawPie(-GlobalVariables::JoyAxis::AXISMAX, -GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX*2, GlobalVariables::JoyAxis::AXISMAX*2, anglesList.value(1)*16, 90*16); + painter.drawPie(-GlobalVariables::JoyAxis::AXISMAX, -GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX*2, GlobalVariables::JoyAxis::AXISMAX*2, anglesList.value(3)*16, 90*16); painter.setOpacity(1.0); @@ -463,8 +465,8 @@ void JoyControlStickStatusBox::drawFourWayDiagonalBox() painter.restore(); painter.save(); - painter.scale(side / static_cast(JoyAxis::AXISMAX*2.0), side / static_cast(JoyAxis::AXISMAX*2.0)); - painter.translate(JoyAxis::AXISMAX, JoyAxis::AXISMAX); + painter.scale(side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0), side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0)); + painter.translate(GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX); penny.setWidth(0); painter.setBrush(QBrush(Qt::black)); penny.setColor(Qt::black); @@ -474,14 +476,14 @@ void JoyControlStickStatusBox::drawFourWayDiagonalBox() int linexstart = stick->getXCoordinate()-1000; int lineystart = stick->getYCoordinate()-1000; - if (linexstart < JoyAxis::AXISMIN) + if (linexstart < GlobalVariables::JoyAxis::AXISMIN) { - linexstart = JoyAxis::AXISMIN; + linexstart = GlobalVariables::JoyAxis::AXISMIN; } - if (lineystart < JoyAxis::AXISMIN) + if (lineystart < GlobalVariables::JoyAxis::AXISMIN) { - lineystart = JoyAxis::AXISMIN; + lineystart = GlobalVariables::JoyAxis::AXISMIN; } painter.drawRect(linexstart, lineystart, 2000, 2000); @@ -493,14 +495,14 @@ void JoyControlStickStatusBox::drawFourWayDiagonalBox() // Draw adjusted crosshair linexstart = stick->getCircleXCoordinate()-1000; lineystart = stick->getCircleYCoordinate()-1000; - if (linexstart < JoyAxis::AXISMIN) + if (linexstart < GlobalVariables::JoyAxis::AXISMIN) { - linexstart = JoyAxis::AXISMIN; + linexstart = GlobalVariables::JoyAxis::AXISMIN; } - if (lineystart < JoyAxis::AXISMIN) + if (lineystart < GlobalVariables::JoyAxis::AXISMIN) { - lineystart = JoyAxis::AXISMIN; + lineystart = GlobalVariables::JoyAxis::AXISMIN; } painter.drawRect(linexstart, lineystart, 2000, 2000); @@ -517,18 +519,18 @@ void JoyControlStickStatusBox::drawFourWayDiagonalBox() paint.drawPixmap(pix.rect(), pix); paint.save(); - paint.scale(side / static_cast(JoyAxis::AXISMAX*2.0), side / static_cast(JoyAxis::AXISMAX*2.0)); - paint.translate(JoyAxis::AXISMAX, JoyAxis::AXISMAX); + paint.scale(side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0), side / static_cast(GlobalVariables::JoyAxis::AXISMAX*2.0)); + paint.translate(GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX); // Draw max zone and initial inner clear circle int maxzone = stick->getMaxZone(); - int diffmaxzone = JoyAxis::AXISMAX - maxzone; + int diffmaxzone = GlobalVariables::JoyAxis::AXISMAX - maxzone; paint.setOpacity(0.5); paint.setBrush(Qt::darkGreen); - paint.drawEllipse(-JoyAxis::AXISMAX, -JoyAxis::AXISMAX, JoyAxis::AXISMAX*2, JoyAxis::AXISMAX*2); + paint.drawEllipse(-GlobalVariables::JoyAxis::AXISMAX, -GlobalVariables::JoyAxis::AXISMAX, GlobalVariables::JoyAxis::AXISMAX*2, GlobalVariables::JoyAxis::AXISMAX*2); paint.setCompositionMode(QPainter::CompositionMode_Clear); paint.setPen(Qt::NoPen); - paint.drawEllipse(-JoyAxis::AXISMAX+diffmaxzone, -JoyAxis::AXISMAX+diffmaxzone, JoyAxis::AXISMAX*2-(diffmaxzone*2), JoyAxis::AXISMAX*2-(diffmaxzone*2)); + paint.drawEllipse(-GlobalVariables::JoyAxis::AXISMAX+diffmaxzone, -GlobalVariables::JoyAxis::AXISMAX+diffmaxzone, GlobalVariables::JoyAxis::AXISMAX*2-(diffmaxzone*2), GlobalVariables::JoyAxis::AXISMAX*2-(diffmaxzone*2)); painter.setCompositionMode(QPainter::CompositionMode_SourceOver); paint.setOpacity(1.0); diff --git a/src/joycontrolstickstatusbox.h b/src/joycontrolstickstatusbox.h old mode 100644 new mode 100755 diff --git a/src/joydpad.cpp b/src/joydpad.cpp old mode 100644 new mode 100755 index c92bee159..2e29ce150 --- a/src/joydpad.cpp +++ b/src/joydpad.cpp @@ -17,6 +17,7 @@ #include "joydpad.h" +#include "globalvariables.h" #include "messagehandler.h" #include "inputdevice.h" @@ -26,23 +27,20 @@ #include -const QString JoyDPad::xmlName = "dpad"; -const int JoyDPad::DEFAULTDPADDELAY = 0; - JoyDPad::JoyDPad(int index, int originset, SetJoystick *parentSet, QObject *parent) : QObject(parent) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->index = index; + m_index = index; buttons = QHash (); activeDiagonalButton = nullptr; prevDirection = JoyDPadButton::DpadCentered; pendingDirection = prevDirection; - this->originset = originset; + m_originset = originset; currentMode = StandardMode; - this->parentSet = parentSet; - this->dpadDelay = DEFAULTDPADDELAY; + m_parentSet = parentSet; + this->dpadDelay = GlobalVariables::JoyDPad::DEFAULTDPADDELAY; populateButtons(); @@ -69,39 +67,39 @@ JoyDPad::~JoyDPad() buttons.clear(); } -JoyDPadButton *JoyDPad::getJoyButton(int index) +JoyDPadButton *JoyDPad::getJoyButton(int index_local) { qInstallMessageHandler(MessageHandler::myMessageOutput); - return buttons.value(index); + return buttons.value(index_local); } void JoyDPad::populateButtons() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyDPadButton* button = new JoyDPadButton (JoyDPadButton::DpadUp, originset, this, parentSet, this); + JoyDPadButton* button = new JoyDPadButton (JoyDPadButton::DpadUp, m_originset, this, m_parentSet, this); buttons.insert(JoyDPadButton::DpadUp, button); - button = new JoyDPadButton (JoyDPadButton::DpadDown, originset, this, parentSet, this); + button = new JoyDPadButton (JoyDPadButton::DpadDown, m_originset, this, m_parentSet, this); buttons.insert(JoyDPadButton::DpadDown, button); - button = new JoyDPadButton(JoyDPadButton::DpadRight, originset, this, parentSet, this); + button = new JoyDPadButton(JoyDPadButton::DpadRight, m_originset, this, m_parentSet, this); buttons.insert(JoyDPadButton::DpadRight, button); - button = new JoyDPadButton(JoyDPadButton::DpadLeft, originset, this, parentSet, this); + button = new JoyDPadButton(JoyDPadButton::DpadLeft, m_originset, this, m_parentSet, this); buttons.insert(JoyDPadButton::DpadLeft, button); - button = new JoyDPadButton(JoyDPadButton::DpadLeftUp, originset, this, parentSet, this); + button = new JoyDPadButton(JoyDPadButton::DpadLeftUp, m_originset, this, m_parentSet, this); buttons.insert(JoyDPadButton::DpadLeftUp, button); - button = new JoyDPadButton(JoyDPadButton::DpadRightUp, originset, this, parentSet, this); + button = new JoyDPadButton(JoyDPadButton::DpadRightUp, m_originset, this, m_parentSet, this); buttons.insert(JoyDPadButton::DpadRightUp, button); - button = new JoyDPadButton(JoyDPadButton::DpadRightDown, originset, this, parentSet, this); + button = new JoyDPadButton(JoyDPadButton::DpadRightDown, m_originset, this, m_parentSet, this); buttons.insert(JoyDPadButton::DpadRightDown, button); - button = new JoyDPadButton(JoyDPadButton::DpadLeftDown, originset, this, parentSet, this); + button = new JoyDPadButton(JoyDPadButton::DpadLeftDown, m_originset, this, m_parentSet, this); buttons.insert(JoyDPadButton::DpadLeftDown, button); } @@ -141,28 +139,28 @@ int JoyDPad::getJoyNumber() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return index; + return m_index; } int JoyDPad::getIndex() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return index; + return m_index; } int JoyDPad::getRealJoyNumber() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return index + 1; + return m_index + 1; } QString JoyDPad::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + return GlobalVariables::JoyDPad::xmlName; } void JoyDPad::readConfig(QXmlStreamReader *xml) @@ -194,8 +192,8 @@ bool JoyDPad::readMainConfig(QXmlStreamReader *xml) if ((xml->name() == "dpadbutton") && xml->isStartElement()) { found = true; - int index = xml->attributes().value("index").toString().toInt(); - JoyDPadButton* button = this->getJoyButton(index); + int index_local = xml->attributes().value("index").toString().toInt(); + JoyDPadButton* button = this->getJoyButton(index_local); if (button != nullptr) { button->readConfig(xml); @@ -240,7 +238,7 @@ void JoyDPad::writeConfig(QXmlStreamWriter *xml) if (!isDefault()) { xml->writeStartElement(getXmlName()); - xml->writeAttribute("index", QString::number(index+1)); + xml->writeAttribute("index", QString::number(m_index + 1)); if (currentMode == EightWayMode) { xml->writeTextElement("mode", "eight-way"); @@ -254,7 +252,7 @@ void JoyDPad::writeConfig(QXmlStreamWriter *xml) xml->writeTextElement("mode", "diagonal"); } - if (dpadDelay > DEFAULTDPADDELAY) + if (dpadDelay > GlobalVariables::JoyDPad::DEFAULTDPADDELAY) { xml->writeTextElement("dpadDelay", QString::number(dpadDelay)); } @@ -427,7 +425,7 @@ bool JoyDPad::isDefault() bool value = true; value = value && (currentMode == StandardMode); - value = value && (dpadDelay == DEFAULTDPADDELAY); + value = value && (dpadDelay == GlobalVariables::JoyDPad::DEFAULTDPADDELAY); QHashIterator iter(buttons); while (iter.hasNext()) @@ -701,7 +699,7 @@ double JoyDPad::getButtonsPresetSensitivity() { JoyDPadButton *button = iter.next().value(); double temp = button->getSensitivity(); - if (qFuzzyCompare(temp, presetSensitivity)) + if (!qFuzzyCompare(temp, presetSensitivity)) { presetSensitivity = 1.0; iter.toBack(); @@ -772,7 +770,7 @@ void JoyDPad::setButtonsWheelSpeedX(int value) while (iter.hasNext()) { JoyDPadButton *button = iter.next().value(); - button->setWheelSpeedX(value); + button->setWheelSpeed(value, 'X'); } } @@ -784,7 +782,7 @@ void JoyDPad::setButtonsWheelSpeedY(int value) while (iter.hasNext()) { JoyDPadButton *button = iter.next().value(); - button->setWheelSpeedY(value); + button->setWheelSpeed(value, 'Y'); } } @@ -807,7 +805,7 @@ SetJoystick* JoyDPad::getParentSet() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return parentSet; + return m_parentSet; } void JoyDPad::establishPropertyUpdatedConnection() @@ -1006,124 +1004,169 @@ void JoyDPad::createDeskEvent(bool ignoresets) } } - if (currentMode == StandardMode) + switch(currentMode) { - if ((value & JoyDPadButton::DpadUp) && (!(prevDirection & JoyDPadButton::DpadUp))) - { - curButton = buttons.value(JoyDPadButton::DpadUp); - curButton->joyEvent(true, ignoresets); - } - if ((value & JoyDPadButton::DpadDown) && (!(prevDirection & JoyDPadButton::DpadDown))) + case StandardMode: { - curButton = buttons.value(JoyDPadButton::DpadDown); - curButton->joyEvent(true, ignoresets); - } + if ((value & JoyDPadButton::DpadUp) && (!(prevDirection & JoyDPadButton::DpadUp))) + { + curButton = buttons.value(JoyDPadButton::DpadUp); + curButton->joyEvent(true, ignoresets); + } - if ((value & JoyDPadButton::DpadLeft) && (!(prevDirection & JoyDPadButton::DpadLeft))) - { - curButton = buttons.value(JoyDPadButton::DpadLeft); - curButton->joyEvent(true, ignoresets); - } + if ((value & JoyDPadButton::DpadDown) && (!(prevDirection & JoyDPadButton::DpadDown))) + { + curButton = buttons.value(JoyDPadButton::DpadDown); + curButton->joyEvent(true, ignoresets); + } - if ((value & JoyDPadButton::DpadRight) && (!(prevDirection & JoyDPadButton::DpadRight))) - { - curButton = buttons.value(JoyDPadButton::DpadRight); - curButton->joyEvent(true, ignoresets); - } - } - else if (currentMode == EightWayMode) - { - if (value == JoyDPadButton::DpadLeftUp) - { - activeDiagonalButton = buttons.value(JoyDPadButton::DpadLeftUp); - activeDiagonalButton->joyEvent(true, ignoresets); - } - else if (value == JoyDPadButton::DpadRightUp) - { - activeDiagonalButton = buttons.value(JoyDPadButton::DpadRightUp); - activeDiagonalButton->joyEvent(true, ignoresets); - } - else if (value == JoyDPadButton::DpadRightDown) - { - activeDiagonalButton = buttons.value(JoyDPadButton::DpadRightDown); - activeDiagonalButton->joyEvent(true, ignoresets); - } - else if (value == JoyDPadButton::DpadLeftDown) - { - activeDiagonalButton = buttons.value(JoyDPadButton::DpadLeftDown); - activeDiagonalButton->joyEvent(true, ignoresets); - } - else if (value == JoyDPadButton::DpadUp) - { - curButton = buttons.value(JoyDPadButton::DpadUp); - curButton->joyEvent(true, ignoresets); - } - else if (value == JoyDPadButton::DpadDown) - { - curButton = buttons.value(JoyDPadButton::DpadDown); - curButton->joyEvent(true, ignoresets); - } - else if (value == JoyDPadButton::DpadLeft) - { - curButton = buttons.value(JoyDPadButton::DpadLeft); - curButton->joyEvent(true, ignoresets); - } - else if (value == JoyDPadButton::DpadRight) - { - curButton = buttons.value(JoyDPadButton::DpadRight); - curButton->joyEvent(true, ignoresets); - } - } - else if (currentMode == FourWayCardinal) - { - if ((value == JoyDPadButton::DpadUp) || - (value == JoyDPadButton::DpadRightUp)) - { - curButton = buttons.value(JoyDPadButton::DpadUp); - curButton->joyEvent(true, ignoresets); - } - else if ((value == JoyDPadButton::DpadDown) || - (value == JoyDPadButton::DpadLeftDown)) - { - curButton = buttons.value(JoyDPadButton::DpadDown); - curButton->joyEvent(true, ignoresets); - } - else if ((value == JoyDPadButton::DpadLeft) || - (value == JoyDPadButton::DpadLeftUp)) - { - curButton = buttons.value(JoyDPadButton::DpadLeft); - curButton->joyEvent(true, ignoresets); - } - else if ((value == JoyDPadButton::DpadRight) || - (value == JoyDPadButton::DpadRightDown)) - { - curButton = buttons.value(JoyDPadButton::DpadRight); - curButton->joyEvent(true, ignoresets); - } - } - else if (currentMode == FourWayDiagonal) - { - if (value == JoyDPadButton::DpadLeftUp) - { - activeDiagonalButton = buttons.value(JoyDPadButton::DpadLeftUp); - activeDiagonalButton->joyEvent(true, ignoresets); + if ((value & JoyDPadButton::DpadLeft) && (!(prevDirection & JoyDPadButton::DpadLeft))) + { + curButton = buttons.value(JoyDPadButton::DpadLeft); + curButton->joyEvent(true, ignoresets); + } + + if ((value & JoyDPadButton::DpadRight) && (!(prevDirection & JoyDPadButton::DpadRight))) + { + curButton = buttons.value(JoyDPadButton::DpadRight); + curButton->joyEvent(true, ignoresets); + } + + break; } - else if (value == JoyDPadButton::DpadRightUp) + case EightWayMode: { - activeDiagonalButton = buttons.value(JoyDPadButton::DpadRightUp); - activeDiagonalButton->joyEvent(true, ignoresets); + switch(value) + { + + case JoyDPadButton::DpadLeftUp: + { + activeDiagonalButton = buttons.value(JoyDPadButton::DpadLeftUp); + activeDiagonalButton->joyEvent(true, ignoresets); + + break; + } + case JoyDPadButton::DpadRightUp: + { + activeDiagonalButton = buttons.value(JoyDPadButton::DpadRightUp); + activeDiagonalButton->joyEvent(true, ignoresets); + + break; + } + case JoyDPadButton::DpadRightDown: + { + activeDiagonalButton = buttons.value(JoyDPadButton::DpadRightDown); + activeDiagonalButton->joyEvent(true, ignoresets); + + break; + } + case JoyDPadButton::DpadLeftDown: + { + activeDiagonalButton = buttons.value(JoyDPadButton::DpadLeftDown); + activeDiagonalButton->joyEvent(true, ignoresets); + + break; + } + case JoyDPadButton::DpadUp: + { + curButton = buttons.value(JoyDPadButton::DpadUp); + curButton->joyEvent(true, ignoresets); + + break; + } + case JoyDPadButton::DpadDown: + { + curButton = buttons.value(JoyDPadButton::DpadDown); + curButton->joyEvent(true, ignoresets); + + break; + } + case JoyDPadButton::DpadLeft: + { + curButton = buttons.value(JoyDPadButton::DpadLeft); + curButton->joyEvent(true, ignoresets); + + break; + } + case JoyDPadButton::DpadRight: + { + curButton = buttons.value(JoyDPadButton::DpadRight); + curButton->joyEvent(true, ignoresets); + + break; + } + + } + + break; } - else if (value == JoyDPadButton::DpadRightDown) + case FourWayCardinal: { - activeDiagonalButton = buttons.value(JoyDPadButton::DpadRightDown); - activeDiagonalButton->joyEvent(true, ignoresets); + if ((value == JoyDPadButton::DpadUp) || + (value == JoyDPadButton::DpadRightUp)) + { + curButton = buttons.value(JoyDPadButton::DpadUp); + curButton->joyEvent(true, ignoresets); + } + else if ((value == JoyDPadButton::DpadDown) || + (value == JoyDPadButton::DpadLeftDown)) + { + curButton = buttons.value(JoyDPadButton::DpadDown); + curButton->joyEvent(true, ignoresets); + } + else if ((value == JoyDPadButton::DpadLeft) || + (value == JoyDPadButton::DpadLeftUp)) + { + curButton = buttons.value(JoyDPadButton::DpadLeft); + curButton->joyEvent(true, ignoresets); + } + else if ((value == JoyDPadButton::DpadRight) || + (value == JoyDPadButton::DpadRightDown)) + { + curButton = buttons.value(JoyDPadButton::DpadRight); + curButton->joyEvent(true, ignoresets); + } + + break; } - else if (value == JoyDPadButton::DpadLeftDown) + case FourWayDiagonal: { - activeDiagonalButton = buttons.value(JoyDPadButton::DpadLeftDown); - activeDiagonalButton->joyEvent(true, ignoresets); + switch(value) + { + case JoyDPadButton::DpadLeftUp: + { + activeDiagonalButton = buttons.value(JoyDPadButton::DpadLeftUp); + activeDiagonalButton->joyEvent(true, ignoresets); + + break; + } + case JoyDPadButton::DpadRightUp: + { + activeDiagonalButton = buttons.value(JoyDPadButton::DpadRightUp); + activeDiagonalButton->joyEvent(true, ignoresets); + + break; + } + case JoyDPadButton::DpadRightDown: + { + activeDiagonalButton = buttons.value(JoyDPadButton::DpadRightDown); + activeDiagonalButton->joyEvent(true, ignoresets); + + break; + } + case JoyDPadButton::DpadLeftDown: + { + activeDiagonalButton = buttons.value(JoyDPadButton::DpadLeftDown); + activeDiagonalButton->joyEvent(true, ignoresets); + + break; + } + } + + break; } + } prevDirection = pendingDirection; @@ -1173,7 +1216,7 @@ double JoyDPad::getButtonsEasingDuration() { qInstallMessageHandler(MessageHandler::myMessageOutput); - double result = JoyButton::DEFAULTEASINGDURATION; + double result = GlobalVariables::JoyButton::DEFAULTEASINGDURATION; QHash temphash = getApplicableButtons(); QHashIterator iter(temphash); @@ -1188,9 +1231,9 @@ double JoyDPad::getButtonsEasingDuration() { JoyDPadButton *button = iter.next().value(); double temp = button->getEasingDuration(); - if (qFuzzyCompare(temp, result)) + if (!qFuzzyCompare(temp, result)) { - result = JoyButton::DEFAULTEASINGDURATION; + result = GlobalVariables::JoyButton::DEFAULTEASINGDURATION; iter.toBack(); } } @@ -1216,7 +1259,7 @@ int JoyDPad::getButtonsSpringDeadCircleMultiplier() { qInstallMessageHandler(MessageHandler::myMessageOutput); - int result = JoyButton::DEFAULTSPRINGRELEASERADIUS; + int result = GlobalVariables::JoyButton::DEFAULTSPRINGRELEASERADIUS; QHash temphash = getApplicableButtons(); QHashIterator iter(temphash); @@ -1233,7 +1276,7 @@ int JoyDPad::getButtonsSpringDeadCircleMultiplier() int temp = button->getSpringDeadCircleMultiplier(); if (temp != result) { - result = JoyButton::DEFAULTSPRINGRELEASERADIUS; + result = GlobalVariables::JoyButton::DEFAULTSPRINGRELEASERADIUS; iter.toBack(); } } @@ -1290,54 +1333,68 @@ QHash JoyDPad::getDirectionButtons(JoyDPadButton::JoyDPadDi qInstallMessageHandler(MessageHandler::myMessageOutput); QHash temphash; - if (currentMode == StandardMode) + + switch(currentMode) { - if (direction & JoyDPadButton::DpadUp) - { - temphash.insert(JoyDPadButton::DpadUp, buttons.value(JoyDPadButton::DpadUp)); - } - if (direction & JoyDPadButton::DpadDown) + case StandardMode: { - temphash.insert(JoyDPadButton::DpadDown, buttons.value(JoyDPadButton::DpadDown)); - } + if (direction & JoyDPadButton::DpadUp) + { + temphash.insert(JoyDPadButton::DpadUp, buttons.value(JoyDPadButton::DpadUp)); + } - if (direction & JoyDPadButton::DpadLeft) - { - temphash.insert(JoyDPadButton::DpadLeft, buttons.value(JoyDPadButton::DpadLeft)); - } + if (direction & JoyDPadButton::DpadDown) + { + temphash.insert(JoyDPadButton::DpadDown, buttons.value(JoyDPadButton::DpadDown)); + } - if (direction & JoyDPadButton::DpadRight) - { - temphash.insert(JoyDPadButton::DpadRight, buttons.value(JoyDPadButton::DpadRight)); + if (direction & JoyDPadButton::DpadLeft) + { + temphash.insert(JoyDPadButton::DpadLeft, buttons.value(JoyDPadButton::DpadLeft)); + } + + if (direction & JoyDPadButton::DpadRight) + { + temphash.insert(JoyDPadButton::DpadRight, buttons.value(JoyDPadButton::DpadRight)); + } + + break; } - } - else if (currentMode == EightWayMode) - { - if (direction != JoyDPadButton::DpadCentered) + case EightWayMode: { - temphash.insert(direction, buttons.value(direction)); + if (direction != JoyDPadButton::DpadCentered) + { + temphash.insert(direction, buttons.value(direction)); + } + + break; } - } - else if (currentMode == FourWayCardinal) - { - if ((direction == JoyDPadButton::DpadUp) || - (direction == JoyDPadButton::DpadDown) || - (direction == JoyDPadButton::DpadLeft) || - (direction == JoyDPadButton::DpadRight)) + case FourWayCardinal: { - temphash.insert(direction, buttons.value(direction)); + if ((direction == JoyDPadButton::DpadUp) || + (direction == JoyDPadButton::DpadDown) || + (direction == JoyDPadButton::DpadLeft) || + (direction == JoyDPadButton::DpadRight)) + { + temphash.insert(direction, buttons.value(direction)); + } + + break; } - } - else if (currentMode == FourWayDiagonal) - { - if ((direction == JoyDPadButton::DpadRightUp) || - (direction == JoyDPadButton::DpadRightDown) || - (direction == JoyDPadButton::DpadLeftDown) || - (direction == JoyDPadButton::DpadLeftUp)) + case FourWayDiagonal: { - temphash.insert(direction, buttons.value(direction)); + if ((direction == JoyDPadButton::DpadRightUp) || + (direction == JoyDPadButton::DpadRightDown) || + (direction == JoyDPadButton::DpadLeftDown) || + (direction == JoyDPadButton::DpadLeftUp)) + { + temphash.insert(direction, buttons.value(direction)); + } + + break; } + } return temphash; diff --git a/src/joydpad.h b/src/joydpad.h old mode 100644 new mode 100755 index cba48d36d..afdf9ec5b --- a/src/joydpad.h +++ b/src/joydpad.h @@ -39,7 +39,7 @@ class JoyDPad : public QObject enum JoyMode {StandardMode=0, EightWayMode, FourWayCardinal, FourWayDiagonal}; - JoyDPadButton* getJoyButton(int index); + JoyDPadButton* getJoyButton(int index_local); QHash* getJoyButtons(); int getCurrentDirection(); @@ -116,9 +116,6 @@ class JoyDPad : public QObject virtual void eventReset(); - static const QString xmlName; - static const int DEFAULTDPADDELAY; // unsigned - signals: void active(int value); void released(int value); @@ -154,12 +151,12 @@ private slots: QString dpadName; QString defaultDPadName; - SetJoystick *parentSet; + SetJoystick *m_parentSet; QTimer directionDelayTimer; JoyMode currentMode; - int index; - int originset; + int m_index; + int m_originset; int dpadDelay; // unsigned int pendingEventDirection; diff --git a/src/joydpadbuttonwidget.cpp b/src/joydpadbuttonwidget.cpp old mode 100644 new mode 100755 index 43bd40ef8..a3129a671 --- a/src/joydpadbuttonwidget.cpp +++ b/src/joydpadbuttonwidget.cpp @@ -23,7 +23,6 @@ #include #include - JoyDPadButtonWidget::JoyDPadButtonWidget(JoyButton *button, bool displayNames, QWidget *parent) : JoyButtonWidget(button, displayNames, parent) { diff --git a/src/joydpadbuttonwidget.h b/src/joydpadbuttonwidget.h old mode 100644 new mode 100755 index bb2207de7..f0d5cef4b --- a/src/joydpadbuttonwidget.h +++ b/src/joydpadbuttonwidget.h @@ -31,7 +31,7 @@ class JoyDPadButtonWidget : public JoyButtonWidget explicit JoyDPadButtonWidget(JoyButton* button, bool displayNames, QWidget *parent = nullptr); protected: - virtual QString generateLabel(); + virtual QString generateLabel() override; }; diff --git a/src/joykeyrepeathelper.cpp b/src/joykeyrepeathelper.cpp old mode 100644 new mode 100755 diff --git a/src/joykeyrepeathelper.h b/src/joykeyrepeathelper.h old mode 100644 new mode 100755 diff --git a/src/joystick.cpp b/src/joystick.cpp old mode 100644 new mode 100755 index a8fefc14b..920e9b47d --- a/src/joystick.cpp +++ b/src/joystick.cpp @@ -17,6 +17,7 @@ #include "joystick.h" +#include "globalvariables.h" #include "messagehandler.h" #include "antimicrosettings.h" @@ -24,7 +25,6 @@ #include #include -const QString Joystick::xmlName = "joystick"; Joystick::Joystick(SDL_Joystick *joyhandle, int deviceIndex, @@ -33,11 +33,11 @@ Joystick::Joystick(SDL_Joystick *joyhandle, int deviceIndex, { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->joyhandle = joyhandle; + m_joyhandle = joyhandle; joystickID = SDL_JoystickInstanceID(joyhandle); - for (int i = 0; i < NUMBER_JOYSETS; i++) + for (int i = 0; i < GlobalVariables::InputDevice::NUMBER_JOYSETS; i++) { SetJoystick *setstick = new SetJoystick(this, i, this); getJoystick_sets().insert(i, setstick); @@ -58,9 +58,9 @@ QString Joystick::getSDLName() QString temp = QString(); - if (joyhandle != nullptr) + if (m_joyhandle != nullptr) { - temp = SDL_JoystickName(joyhandle); + temp = SDL_JoystickName(m_joyhandle); } return temp; @@ -72,7 +72,7 @@ QString Joystick::getGUIDString() QString temp = QString(); - SDL_JoystickGUID tempGUID = SDL_JoystickGetGUID(joyhandle); + SDL_JoystickGUID tempGUID = SDL_JoystickGetGUID(m_joyhandle); char guidString[65] = {'0'}; SDL_JoystickGetGUIDString(tempGUID, guidString, sizeof(guidString)); temp = QString(guidString); @@ -85,16 +85,16 @@ QString Joystick::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + return GlobalVariables::Joystick::xmlName; } void Joystick::closeSDLDevice() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((joyhandle != nullptr) && SDL_JoystickGetAttached(joyhandle)) + if ((m_joyhandle != nullptr) && SDL_JoystickGetAttached(m_joyhandle)) { - SDL_JoystickClose(joyhandle); + SDL_JoystickClose(m_joyhandle); } } @@ -102,7 +102,7 @@ int Joystick::getNumberRawButtons() { qInstallMessageHandler(MessageHandler::myMessageOutput); - int numbuttons = SDL_JoystickNumButtons(joyhandle); + int numbuttons = SDL_JoystickNumButtons(m_joyhandle); return numbuttons; } @@ -110,7 +110,7 @@ int Joystick::getNumberRawAxes() { qInstallMessageHandler(MessageHandler::myMessageOutput); - int numaxes = SDL_JoystickNumAxes(joyhandle); + int numaxes = SDL_JoystickNumAxes(m_joyhandle); return numaxes; } @@ -118,7 +118,7 @@ int Joystick::getNumberRawHats() { qInstallMessageHandler(MessageHandler::myMessageOutput); - int numhats = SDL_JoystickNumHats(joyhandle); + int numhats = SDL_JoystickNumHats(m_joyhandle); return numhats; } @@ -131,5 +131,5 @@ SDL_JoystickID Joystick::getSDLJoystickID() SDL_Joystick* Joystick::getJoyhandle() const { - return joyhandle; + return m_joyhandle; } diff --git a/src/joystick.h b/src/joystick.h old mode 100644 new mode 100755 index d9332876a..ebe6c2f71 --- a/src/joystick.h +++ b/src/joystick.h @@ -31,23 +31,21 @@ class Joystick : public InputDevice public: explicit Joystick(SDL_Joystick *joyhandle, int deviceIndex, AntiMicroSettings *settings, QObject *parent=0); - virtual QString getName(); - virtual QString getSDLName(); - virtual QString getGUIDString(); // GUID available on SDL 2. - virtual QString getXmlName(); - virtual void closeSDLDevice(); - virtual SDL_JoystickID getSDLJoystickID(); + virtual QString getName() override; + virtual QString getSDLName() override; + virtual QString getGUIDString() override; // GUID available on SDL 2. + virtual QString getXmlName() override; + virtual void closeSDLDevice() override; + virtual SDL_JoystickID getSDLJoystickID() override; - virtual int getNumberRawButtons(); - virtual int getNumberRawAxes(); - virtual int getNumberRawHats(); + virtual int getNumberRawButtons() override; + virtual int getNumberRawAxes() override; + virtual int getNumberRawHats() override; SDL_Joystick* getJoyhandle() const; - static const QString xmlName; - private: - SDL_Joystick *joyhandle; + SDL_Joystick *m_joyhandle; SDL_JoystickID joystickID; }; diff --git a/src/joystickstatuswindow.cpp b/src/joystickstatuswindow.cpp old mode 100644 new mode 100755 index 179b80547..d52ffd7a3 --- a/src/joystickstatuswindow.cpp +++ b/src/joystickstatuswindow.cpp @@ -18,6 +18,7 @@ #include "joystickstatuswindow.h" #include "ui_joystickstatuswindow.h" +#include "globalvariables.h" #include "messagehandler.h" #include "joybuttonstatusbox.h" #include "inputdevice.h" @@ -74,8 +75,8 @@ JoystickStatusWindow::JoystickStatusWindow(InputDevice *joystick, QWidget *paren QLabel *axisLabel = new QLabel(); axisLabel->setText(trUtf8("Axis %1").arg(axis->getRealJoyIndex())); QProgressBar *axisBar = new QProgressBar(); - axisBar->setMinimum(JoyAxis::AXISMIN); - axisBar->setMaximum(JoyAxis::AXISMAX); + axisBar->setMinimum(GlobalVariables::JoyAxis::AXISMIN); + axisBar->setMaximum(GlobalVariables::JoyAxis::AXISMAX); axisBar->setFormat("%v"); axisBar->setValue(axis->getCurrentRawValue()); hbox->addWidget(axisLabel); diff --git a/src/joystickstatuswindow.h b/src/joystickstatuswindow.h old mode 100644 new mode 100755 diff --git a/src/joystickstatuswindow.ui b/src/joystickstatuswindow.ui old mode 100644 new mode 100755 diff --git a/src/joytabwidget.cpp b/src/joytabwidget.cpp old mode 100644 new mode 100755 index f72e923b7..42cab0514 --- a/src/joytabwidget.cpp +++ b/src/joytabwidget.cpp @@ -17,6 +17,7 @@ #include "joytabwidget.h" +#include "globalvariables.h" #include "messagehandler.h" #include "joyaxiswidget.h" #include "joybuttonwidget.h" @@ -69,8 +70,8 @@ JoyTabWidget::JoyTabWidget(InputDevice *joystick, AntiMicroSettings *settings, Q { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->joystick = joystick; - this->settings = settings; + m_joystick = joystick; + m_settings = settings; tabHelper.moveToThread(joystick->thread()); @@ -502,14 +503,14 @@ void JoyTabWidget::openConfigFileDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); - settings->getLock()->lock(); + m_settings->getLock()->lock(); - int numberRecentProfiles = settings->value("NumberRecentProfiles", DEFAULTNUMBERPROFILES).toInt(); - QString lookupDir = PadderCommon::preferredProfileDir(settings); + int numberRecentProfiles = m_settings->value("NumberRecentProfiles", DEFAULTNUMBERPROFILES).toInt(); + QString lookupDir = PadderCommon::preferredProfileDir(m_settings); QString filename = QFileDialog::getOpenFileName(this, trUtf8("Open Config"), lookupDir, trUtf8("Config Files (*.amgp *.xml)")); - settings->getLock()->unlock(); + m_settings->getLock()->unlock(); if (!filename.isNull() && !filename.isEmpty()) { @@ -525,13 +526,13 @@ void JoyTabWidget::openConfigFileDialog() configBox->insertItem(1, PadderCommon::getProfileName(fileinfo), fileinfo.absoluteFilePath()); configBox->setCurrentIndex(1); saveDeviceSettings(); - emit joystickConfigChanged(joystick->getJoyNumber()); + emit joystickConfigChanged(m_joystick->getJoyNumber()); } else { configBox->setCurrentIndex(searchIndex); saveDeviceSettings(); - emit joystickConfigChanged(joystick->getJoyNumber()); + emit joystickConfigChanged(m_joystick->getJoyNumber()); } QString outputFilename = fileinfo.absoluteDir().absolutePath(); @@ -548,12 +549,12 @@ void JoyTabWidget::openConfigFileDialog() } #endif - settings->getLock()->lock(); + m_settings->getLock()->lock(); - settings->setValue("LastProfileDir", outputFilename); - settings->sync(); + m_settings->setValue("LastProfileDir", outputFilename); + m_settings->sync(); - settings->getLock()->unlock(); + m_settings->getLock()->unlock(); } } @@ -565,12 +566,12 @@ void JoyTabWidget::fillButtons() { qInstallMessageHandler(MessageHandler::myMessageOutput); - joystick->establishPropertyUpdatedConnection(); - connect(joystick, &InputDevice::setChangeActivated, this, &JoyTabWidget::changeCurrentSet, Qt::QueuedConnection); + m_joystick->establishPropertyUpdatedConnection(); + connect(m_joystick, &InputDevice::setChangeActivated, this, &JoyTabWidget::changeCurrentSet, Qt::QueuedConnection); - for (int i=0; i < Joystick::NUMBER_JOYSETS; i++) + for (int i=0; i < GlobalVariables::InputDevice::NUMBER_JOYSETS; i++) { - SetJoystick *currentSet = joystick->getSetJoystick(i); + SetJoystick *currentSet = m_joystick->getSetJoystick(i); fillSetButtons(currentSet); } @@ -584,7 +585,7 @@ void JoyTabWidget::showButtonDialog() JoyButtonWidget *buttonWidget = qobject_cast(sender()); // static_cast JoyButton *button = buttonWidget->getJoyButton(); - ButtonEditDialog *dialog = new ButtonEditDialog(button, joystick, this); + ButtonEditDialog *dialog = new ButtonEditDialog(button, m_joystick, this); dialog->show(); } @@ -605,21 +606,21 @@ void JoyTabWidget::saveConfigFile() int index = configBox->currentIndex(); - settings->getLock()->lock(); + m_settings->getLock()->lock(); - int numberRecentProfiles = settings->value("NumberRecentProfiles", DEFAULTNUMBERPROFILES).toInt(); + int numberRecentProfiles = m_settings->value("NumberRecentProfiles", DEFAULTNUMBERPROFILES).toInt(); QString filename = QString(); if (index == 0) { - QString lookupDir = PadderCommon::preferredProfileDir(settings); - settings->getLock()->unlock(); - QString tempfilename = QFileDialog::getSaveFileName(this, trUtf8("Save Config"), lookupDir, trUtf8("Config File (*.%1.amgp)").arg(joystick->getXmlName())); + QString lookupDir = PadderCommon::preferredProfileDir(m_settings); + m_settings->getLock()->unlock(); + QString tempfilename = QFileDialog::getSaveFileName(this, trUtf8("Save Config"), lookupDir, trUtf8("Config File (*.%1.amgp)").arg(m_joystick->getXmlName())); if (!tempfilename.isEmpty()) { filename = tempfilename; QFileInfo fileinfo(filename); - QString deviceTypeName = joystick->getXmlName(); + QString deviceTypeName = m_joystick->getXmlName(); QString fileSuffix = deviceTypeName.append(".amgp"); if ((fileinfo.suffix() != "xml") && (fileinfo.suffix() != "amgp")) { @@ -629,7 +630,7 @@ void JoyTabWidget::saveConfigFile() } else { - settings->getLock()->unlock(); + m_settings->getLock()->unlock(); filename = configBox->itemData(index).toString(); } @@ -665,11 +666,11 @@ void JoyTabWidget::saveConfigFile() configBox->removeItem(numberRecentProfiles); } - joystick->revertProfileEdited(); + m_joystick->revertProfileEdited(); QString tempProfileName = PadderCommon::getProfileName(fileinfo); - if (!joystick->getProfileName().isEmpty()) + if (!m_joystick->getProfileName().isEmpty()) { - oldProfileName = joystick->getProfileName(); + oldProfileName = m_joystick->getProfileName(); tempProfileName = oldProfileName; } @@ -684,20 +685,20 @@ void JoyTabWidget::saveConfigFile() configBox->setCurrentIndex(1); saveDeviceSettings(true); - emit joystickConfigChanged(joystick->getJoyNumber()); + emit joystickConfigChanged(m_joystick->getJoyNumber()); } else { - joystick->revertProfileEdited(); - if (!joystick->getProfileName().isEmpty()) + m_joystick->revertProfileEdited(); + if (!m_joystick->getProfileName().isEmpty()) { - oldProfileName = joystick->getProfileName(); + oldProfileName = m_joystick->getProfileName(); } configBox->setItemIcon(existingIndex, QIcon()); saveDeviceSettings(true); - emit joystickConfigChanged(joystick->getJoyNumber()); + emit joystickConfigChanged(m_joystick->getJoyNumber()); } } } @@ -707,65 +708,73 @@ void JoyTabWidget::resetJoystick() { qInstallMessageHandler(MessageHandler::myMessageOutput); - int currentIndex = configBox->currentIndex(); - if (currentIndex != 0) - { - QString filename = configBox->itemData(currentIndex).toString(); + QMessageBox msg; + msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + msg.setText(trUtf8("Do you really want to reset buttons settings for joystick?")); + int result = msg.exec(); - removeCurrentButtons(); + if (result == QMessageBox::Yes) { - QMetaObject::invokeMethod(&tabHelper, "readConfigFileWithRevert", Qt::BlockingQueuedConnection, - Q_ARG(QString, filename)); + int currentIndex = configBox->currentIndex(); + if (currentIndex != 0) + { + QString filename = configBox->itemData(currentIndex).toString(); - fillButtons(); - refreshSetButtons(); - refreshCopySetActions(); + removeCurrentButtons(); - XMLConfigReader *reader = tabHelper.getReader(); - if (!reader->hasError()) - { - configBox->setItemIcon(currentIndex, QIcon()); + QMetaObject::invokeMethod(&tabHelper, "reInitDevice", Qt::BlockingQueuedConnection); + + fillButtons(); + refreshSetButtons(); + refreshCopySetActions(); - QString tempProfileName = QString(); - if (!joystick->getProfileName().isEmpty()) + XMLConfigReader *reader = tabHelper.getReader(); + if (!reader->hasError()) { - tempProfileName = joystick->getProfileName(); - configBox->setItemText(currentIndex, tempProfileName); + configBox->setItemIcon(currentIndex, QIcon()); + + QString tempProfileName = QString(); + + if (!m_joystick->getProfileName().isEmpty()) + { + tempProfileName = m_joystick->getProfileName(); + configBox->setItemText(currentIndex, tempProfileName); + } + else + { + tempProfileName = oldProfileName; + configBox->setItemText(currentIndex, oldProfileName); + } + + oldProfileName = tempProfileName; } - else + else if (reader->hasError() && this->window()->isEnabled()) { - tempProfileName = oldProfileName; - configBox->setItemText(currentIndex, oldProfileName); + QMessageBox msg; + msg.setStandardButtons(QMessageBox::Close); + msg.setText(reader->getErrorString()); + msg.setModal(true); + msg.exec(); + } + else if (reader->hasError() && !this->window()->isEnabled()) + { + QTextStream error(stderr); + error << reader->getErrorString() << endl; } - - oldProfileName = tempProfileName; - } - else if (reader->hasError() && this->window()->isEnabled()) - { - QMessageBox msg; - msg.setStandardButtons(QMessageBox::Close); - msg.setText(reader->getErrorString()); - msg.setModal(true); - msg.exec(); } - else if (reader->hasError() && !this->window()->isEnabled()) + else { - QTextStream error(stderr); - error << reader->getErrorString() << endl; - } - } - else - { - configBox->setItemText(0, trUtf8("")); - configBox->setItemIcon(0, QIcon()); + configBox->setItemText(0, trUtf8("")); + configBox->setItemIcon(0, QIcon()); - removeCurrentButtons(); + removeCurrentButtons(); - QMetaObject::invokeMethod(&tabHelper, "reInitDevice", Qt::BlockingQueuedConnection); + QMetaObject::invokeMethod(&tabHelper, "reInitDevice", Qt::BlockingQueuedConnection); - fillButtons(); - refreshSetButtons(); - refreshCopySetActions(); + fillButtons(); + refreshSetButtons(); + refreshCopySetActions(); + } } } @@ -775,16 +784,16 @@ void JoyTabWidget::saveAsConfig() int index = configBox->currentIndex(); - settings->getLock()->lock(); + m_settings->getLock()->lock(); - int numberRecentProfiles = settings->value("NumberRecentProfiles", DEFAULTNUMBERPROFILES).toInt(); + int numberRecentProfiles = m_settings->value("NumberRecentProfiles", DEFAULTNUMBERPROFILES).toInt(); QString filename = QString(); if (index == 0) { - QString lookupDir = PadderCommon::preferredProfileDir(settings); - settings->getLock()->unlock(); + QString lookupDir = PadderCommon::preferredProfileDir(m_settings); + m_settings->getLock()->unlock(); - QString tempfilename = QFileDialog::getSaveFileName(this, trUtf8("Save Config"), lookupDir, trUtf8("Config File (*.%1.amgp)").arg(joystick->getXmlName())); + QString tempfilename = QFileDialog::getSaveFileName(this, trUtf8("Save Config"), lookupDir, trUtf8("Config File (*.%1.amgp)").arg(m_joystick->getXmlName())); if (!tempfilename.isEmpty()) { filename = tempfilename; @@ -792,11 +801,11 @@ void JoyTabWidget::saveAsConfig() } else { - settings->getLock()->unlock(); + m_settings->getLock()->unlock(); QString configPath = configBox->itemData(index).toString(); QFileInfo temp(configPath); - QString tempfilename = QFileDialog::getSaveFileName(this, trUtf8("Save Config"), temp.absoluteDir().absolutePath(), trUtf8("Config File (*.%1.amgp)").arg(joystick->getXmlName())); + QString tempfilename = QFileDialog::getSaveFileName(this, trUtf8("Save Config"), temp.absoluteDir().absolutePath(), trUtf8("Config File (*.%1.amgp)").arg(m_joystick->getXmlName())); if (!tempfilename.isEmpty()) { filename = tempfilename; @@ -806,7 +815,7 @@ void JoyTabWidget::saveAsConfig() if (!filename.isEmpty()) { QFileInfo fileinfo(filename); - QString deviceTypeName = joystick->getXmlName(); + QString deviceTypeName = m_joystick->getXmlName(); QString fileSuffix = deviceTypeName.append(".amgp"); if ((fileinfo.suffix() != "xml") && (fileinfo.suffix() != "amgp")) { @@ -844,11 +853,11 @@ void JoyTabWidget::saveAsConfig() configBox->removeItem(numberRecentProfiles); } - joystick->revertProfileEdited(); + m_joystick->revertProfileEdited(); QString tempProfileName = PadderCommon::getProfileName(fileinfo); - if (!joystick->getProfileName().isEmpty()) + if (!m_joystick->getProfileName().isEmpty()) { - oldProfileName = joystick->getProfileName(); + oldProfileName = m_joystick->getProfileName(); tempProfileName = oldProfileName; } @@ -859,19 +868,19 @@ void JoyTabWidget::saveAsConfig() configBox->setCurrentIndex(1); saveDeviceSettings(true); - emit joystickConfigChanged(joystick->getJoyNumber()); + emit joystickConfigChanged(m_joystick->getJoyNumber()); } else { - joystick->revertProfileEdited(); - if (!joystick->getProfileName().isEmpty()) + m_joystick->revertProfileEdited(); + if (!m_joystick->getProfileName().isEmpty()) { - oldProfileName = joystick->getProfileName(); + oldProfileName = m_joystick->getProfileName(); } configBox->setItemIcon(existingIndex, QIcon()); saveDeviceSettings(true); - emit joystickConfigChanged(joystick->getJoyNumber()); + emit joystickConfigChanged(m_joystick->getJoyNumber()); } } } @@ -881,7 +890,7 @@ void JoyTabWidget::changeJoyConfig(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); - disconnect(joystick, &InputDevice::profileUpdated, this, &JoyTabWidget::displayProfileEditNotification); + disconnect(m_joystick, &InputDevice::profileUpdated, this, &JoyTabWidget::displayProfileEditNotification); QString filename = QString(); if (index > 0) @@ -906,9 +915,9 @@ void JoyTabWidget::changeJoyConfig(int index) if (!reader->hasError()) { QString profileName = QString(); - if (!joystick->getProfileName().isEmpty()) + if (!m_joystick->getProfileName().isEmpty()) { - profileName = joystick->getProfileName(); + profileName = m_joystick->getProfileName(); oldProfileName = profileName; } else @@ -949,7 +958,7 @@ void JoyTabWidget::changeJoyConfig(int index) comboBoxIndex = index; - connect(joystick, &InputDevice::profileUpdated, this, &JoyTabWidget::displayProfileEditNotification); + connect(m_joystick, &InputDevice::profileUpdated, this, &JoyTabWidget::displayProfileEditNotification); } void JoyTabWidget::saveSettings() @@ -959,27 +968,27 @@ void JoyTabWidget::saveSettings() QString filename = ""; QString lastfile = ""; - settings->getLock()->lock(); + m_settings->getLock()->lock(); int index = configBox->currentIndex(); int currentjoy = 1; - QString identifier = joystick->getStringIdentifier(); + QString identifier = m_joystick->getStringIdentifier(); QString controlEntryPrefix = QString("Controller%1").arg(identifier); QString controlEntryString = QString("Controller%1ConfigFile%2").arg(identifier); QString controlEntryLastSelected = QString("Controller%1LastSelected").arg(identifier); - QString controlEntryProfileName = QString("Controller%1ProfileName%2").arg(joystick->getStringIdentifier()); + QString controlEntryProfileName = QString("Controller%1ProfileName%2").arg(m_joystick->getStringIdentifier()); // Remove current settings for a controller - QStringList tempkeys = settings->allKeys(); + QStringList tempkeys = m_settings->allKeys(); QStringListIterator iter(tempkeys); while (iter.hasNext()) { QString tempstring = iter.next(); if (!identifier.isEmpty() && tempstring.startsWith(controlEntryPrefix)) { - settings->remove(tempstring); + m_settings->remove(tempstring); } } @@ -1007,11 +1016,11 @@ void JoyTabWidget::saveSettings() } #endif - settings->setValue(controlEntryString.arg(currentjoy), outputFilename); + m_settings->setValue(controlEntryString.arg(currentjoy), outputFilename); if (PadderCommon::getProfileName(profileBaseFile) != profileText) { - settings->setValue(controlEntryProfileName.arg(currentjoy), profileText); + m_settings->setValue(controlEntryProfileName.arg(currentjoy), profileText); } } @@ -1047,11 +1056,11 @@ void JoyTabWidget::saveSettings() } } #endif - settings->setValue(controlEntryString.arg(currentjoy), outputFilename); + m_settings->setValue(controlEntryString.arg(currentjoy), outputFilename); if (PadderCommon::getProfileName(profileBaseFile) != profileText) { - settings->setValue(controlEntryProfileName.arg(currentjoy), profileText); + m_settings->setValue(controlEntryProfileName.arg(currentjoy), profileText); } } @@ -1078,10 +1087,10 @@ void JoyTabWidget::saveSettings() } #endif - settings->setValue(controlEntryLastSelected, outputFilename); + m_settings->setValue(controlEntryLastSelected, outputFilename); } - settings->getLock()->unlock(); + m_settings->getLock()->unlock(); } void JoyTabWidget::loadSettings(bool forceRefresh) @@ -1090,7 +1099,7 @@ void JoyTabWidget::loadSettings(bool forceRefresh) disconnect(configBox, static_cast(&QComboBox::currentIndexChanged), this, &JoyTabWidget::changeJoyConfig); - settings->getLock()->lock(); + m_settings->getLock()->lock(); if (configBox->count() > 1) { @@ -1103,29 +1112,30 @@ void JoyTabWidget::loadSettings(bool forceRefresh) configBox->setCurrentIndex(-1); } - int shouldisplaynames = settings->value("DisplayNames", "0").toInt(); + + int shouldisplaynames = m_settings->value("DisplayNames", "0").toInt(); if (shouldisplaynames == 1) { changeNameDisplay(shouldisplaynames); } - int numberRecentProfiles = settings->value("NumberRecentProfiles", DEFAULTNUMBERPROFILES).toInt(); - bool autoOpenLastProfile = settings->value("AutoOpenLastProfile", true).toBool(); + int numberRecentProfiles = m_settings->value("NumberRecentProfiles", DEFAULTNUMBERPROFILES).toInt(); + bool autoOpenLastProfile = m_settings->value("AutoOpenLastProfile", true).toBool(); - settings->beginGroup("Controllers"); + m_settings->beginGroup("Controllers"); - QString controlEntryString = QString("Controller%1ConfigFile%2").arg(joystick->getStringIdentifier()); - QString controlEntryLastSelected = QString("Controller%1LastSelected").arg(joystick->getStringIdentifier()); - QString controlEntryProfileName = QString("Controller%1ProfileName%2").arg(joystick->getStringIdentifier()); + QString controlEntryString = QString("Controller%1ConfigFile%2").arg(m_joystick->getStringIdentifier()); + QString controlEntryLastSelected = QString("Controller%1LastSelected").arg(m_joystick->getStringIdentifier()); + QString controlEntryProfileName = QString("Controller%1ProfileName%2").arg(m_joystick->getStringIdentifier()); bool finished = false; for (int i=1; !finished; i++) { QString tempfilepath = QString(); - if (!joystick->getStringIdentifier().isEmpty()) + if (!m_joystick->getStringIdentifier().isEmpty()) { - tempfilepath = settings->value(controlEntryString.arg(i), "").toString(); + tempfilepath = m_settings->value(controlEntryString.arg(i), "").toString(); } if (!tempfilepath.isEmpty()) @@ -1134,7 +1144,7 @@ void JoyTabWidget::loadSettings(bool forceRefresh) if (fileInfo.exists() && (configBox->findData(fileInfo.absoluteFilePath()) == -1)) { - QString profileName = settings->value(controlEntryProfileName.arg(i), "").toString(); + QString profileName = m_settings->value(controlEntryProfileName.arg(i), "").toString(); profileName = !profileName.isEmpty() ? profileName : PadderCommon::getProfileName(fileInfo); configBox->addItem(profileName, fileInfo.absoluteFilePath()); } @@ -1154,13 +1164,14 @@ void JoyTabWidget::loadSettings(bool forceRefresh) QString lastfile = QString(); - if (!joystick->getStringIdentifier().isEmpty() && autoOpenLastProfile) + if (!m_joystick->getStringIdentifier().isEmpty() && autoOpenLastProfile) { - lastfile = settings->value(controlEntryLastSelected, "").toString(); + lastfile = m_settings->value(controlEntryLastSelected, "").toString(); } - settings->endGroup(); - settings->getLock()->unlock(); + m_settings->endGroup(); + m_settings->getLock()->unlock(); + if (!lastfile.isEmpty()) { @@ -1175,18 +1186,19 @@ void JoyTabWidget::loadSettings(bool forceRefresh) if (lastindex > 0) { configBox->setCurrentIndex(lastindex); - emit joystickConfigChanged(joystick->getJoyNumber()); + emit joystickConfigChanged(m_joystick->getJoyNumber()); } else if (configBox->currentIndex() != 0) { configBox->setCurrentIndex(0); - emit joystickConfigChanged(joystick->getJoyNumber()); + emit joystickConfigChanged(m_joystick->getJoyNumber()); } + } else if (configBox->currentIndex() != 0) { configBox->setCurrentIndex(0); - emit joystickConfigChanged(joystick->getJoyNumber()); + emit joystickConfigChanged(m_joystick->getJoyNumber()); } } @@ -1263,7 +1275,7 @@ void JoyTabWidget::changeCurrentSet(int index) oldSetButton->style()->polish(oldSetButton); } - joystick->setActiveSetNumber(index); + m_joystick->setActiveSetNumber(index); stackedWidget_2->setCurrentIndex(index); switch (index) @@ -1347,7 +1359,7 @@ void JoyTabWidget::showStickAssignmentDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); - Joystick *temp = qobject_cast(joystick); // static_cast + Joystick *temp = qobject_cast(m_joystick); // static_cast AdvanceStickAssignmentDialog *dialog = new AdvanceStickAssignmentDialog(temp, this); connect(dialog, &AdvanceStickAssignmentDialog::finished, this, &JoyTabWidget::refreshButtons); dialog->show(); @@ -1359,9 +1371,9 @@ void JoyTabWidget::loadConfigFile(QString fileLocation) checkForUnsavedProfile(-1); - if (!joystick->isDeviceEdited()) + if (!m_joystick->isDeviceEdited()) { - int numberRecentProfiles = settings->value("NumberRecentProfiles", DEFAULTNUMBERPROFILES).toInt(); + int numberRecentProfiles = m_settings->value("NumberRecentProfiles", DEFAULTNUMBERPROFILES).toInt(); QFileInfo fileinfo(fileLocation); if (fileinfo.exists() && ((fileinfo.suffix() == "xml") || (fileinfo.suffix() == "amgp"))) { @@ -1382,12 +1394,12 @@ void JoyTabWidget::loadConfigFile(QString fileLocation) reconnectMainComboBoxEvents(); configBox->setCurrentIndex(1); - emit joystickConfigChanged(joystick->getJoyNumber()); + emit joystickConfigChanged(m_joystick->getJoyNumber()); } else if (searchIndex != configBox->currentIndex()) { configBox->setCurrentIndex(searchIndex); - emit joystickConfigChanged(joystick->getJoyNumber()); + emit joystickConfigChanged(m_joystick->getJoyNumber()); } } } @@ -1397,7 +1409,7 @@ void JoyTabWidget::showQuickSetDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); - ButtonEditDialog *dialog = new ButtonEditDialog(joystick, this); + ButtonEditDialog *dialog = new ButtonEditDialog(m_joystick, this); connect(dialog, &ButtonEditDialog::finished, this, &JoyTabWidget::refreshButtons); dialog->show(); } @@ -1406,7 +1418,7 @@ void JoyTabWidget::showKeyDelayDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); - ExtraProfileSettingsDialog *dialog = new ExtraProfileSettingsDialog(joystick, this); + ExtraProfileSettingsDialog *dialog = new ExtraProfileSettingsDialog(m_joystick, this); dialog->show(); } @@ -1414,7 +1426,7 @@ void JoyTabWidget::showSetNamesDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); - SetNamesDialog *dialog = new SetNamesDialog(joystick, this); + SetNamesDialog *dialog = new SetNamesDialog(m_joystick, this); connect(dialog, &SetNamesDialog::accepted, this, &JoyTabWidget::refreshSetButtons); connect(dialog, &SetNamesDialog::accepted, this, &JoyTabWidget::refreshCopySetActions); dialog->show(); @@ -1424,12 +1436,12 @@ void JoyTabWidget::removeCurrentButtons() { qInstallMessageHandler(MessageHandler::myMessageOutput); - joystick->disconnectPropertyUpdatedConnection(); - disconnect(joystick, &InputDevice::setChangeActivated, this, &JoyTabWidget::changeCurrentSet); + m_joystick->disconnectPropertyUpdatedConnection(); + disconnect(m_joystick, &InputDevice::setChangeActivated, this, &JoyTabWidget::changeCurrentSet); - for (int i=0; i < Joystick::NUMBER_JOYSETS; i++) + for (int i=0; i < GlobalVariables::InputDevice::NUMBER_JOYSETS; i++) { - SetJoystick *currentSet = joystick->getSetJoystick(i); + SetJoystick *currentSet = m_joystick->getSetJoystick(i); removeSetButtons(currentSet); } } @@ -1438,7 +1450,7 @@ InputDevice *JoyTabWidget::getJoystick() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return joystick; + return m_joystick; } void JoyTabWidget::removeConfig() @@ -1450,7 +1462,7 @@ void JoyTabWidget::removeConfig() { configBox->removeItem(currentIndex); saveDeviceSettings(true); - emit joystickConfigChanged(joystick->getJoyNumber()); + emit joystickConfigChanged(m_joystick->getJoyNumber()); } } @@ -1476,19 +1488,19 @@ void JoyTabWidget::saveDeviceSettings(bool sync) { qInstallMessageHandler(MessageHandler::myMessageOutput); - settings->getLock()->lock(); - settings->beginGroup("Controllers"); - settings->getLock()->unlock(); + m_settings->getLock()->lock(); + m_settings->beginGroup("Controllers"); + m_settings->getLock()->unlock(); saveSettings(); - settings->getLock()->lock(); - settings->endGroup(); + m_settings->getLock()->lock(); + m_settings->endGroup(); if (sync) { - settings->sync(); + m_settings->sync(); } - settings->getLock()->unlock(); + m_settings->getLock()->unlock(); } void JoyTabWidget::loadDeviceSettings() @@ -1519,11 +1531,11 @@ void JoyTabWidget::refreshSetButtons() { qInstallMessageHandler(MessageHandler::myMessageOutput); - for (int i = 0; i < InputDevice::NUMBER_JOYSETS; i++) + for (int i = 0; i < GlobalVariables::InputDevice::NUMBER_JOYSETS; i++) { QPushButton *tempSetButton = nullptr; QAction *tempSetAction = nullptr; - SetJoystick *tempSet = joystick->getSetJoystick(i); + SetJoystick *tempSet = m_joystick->getSetJoystick(i); switch (i) { case 0: @@ -1558,6 +1570,8 @@ void JoyTabWidget::refreshSetButtons() tempSetButton = setPushButton8; tempSetAction = setAction8; break; + default: + break; } if (!tempSet->getName().isEmpty()) @@ -1651,7 +1665,7 @@ void JoyTabWidget::checkForUnsavedProfile(int newindex) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (joystick->isDeviceEdited()) + if (m_joystick->isDeviceEdited()) { disconnectCheckUnsavedEvent(); disconnectMainComboBoxEvents(); @@ -1675,34 +1689,48 @@ void JoyTabWidget::checkForUnsavedProfile(int newindex) } int status = msg.exec(); - if (status == QMessageBox::Save) + + switch(status) { - saveConfigFile(); - reconnectCheckUnsavedEvent(); - reconnectMainComboBoxEvents(); - if (newindex > -1) + + case QMessageBox::Save: { - configBox->setCurrentIndex(newindex); + saveConfigFile(); + reconnectCheckUnsavedEvent(); + reconnectMainComboBoxEvents(); + + if (newindex > -1) + { + configBox->setCurrentIndex(newindex); + } + + break; + } + case QMessageBox::Discard: + { + m_joystick->revertProfileEdited(); + configBox->setItemText(comboBoxIndex, oldProfileName); + reconnectCheckUnsavedEvent(); + reconnectMainComboBoxEvents(); - } - else if (status == QMessageBox::Discard) - { - joystick->revertProfileEdited(); - configBox->setItemText(comboBoxIndex, oldProfileName); - reconnectCheckUnsavedEvent(); - reconnectMainComboBoxEvents(); - if (newindex > -1) + if (newindex > -1) + { + configBox->setCurrentIndex(newindex); + } + + break; + + } + case QMessageBox::Cancel: { - configBox->setCurrentIndex(newindex); + reconnectCheckUnsavedEvent(); + reconnectMainComboBoxEvents(); + + break; } } - else if (status == QMessageBox::Cancel) - { - reconnectCheckUnsavedEvent(); - reconnectMainComboBoxEvents(); - } } } @@ -1712,7 +1740,7 @@ bool JoyTabWidget::discardUnsavedProfileChanges() bool discarded = true; - if (joystick->isDeviceEdited()) + if (m_joystick->isDeviceEdited()) { disconnectCheckUnsavedEvent(); @@ -1731,23 +1759,34 @@ bool JoyTabWidget::discardUnsavedProfileChanges() } int status = msg.exec(); - if (status == QMessageBox::Save) + + switch(status) { - saveConfigFile(); - if ((currentIndex == 0) && (currentIndex == configBox->currentIndex())) + + case QMessageBox::Save: + { + saveConfigFile(); + if ((currentIndex == 0) && (currentIndex == configBox->currentIndex())) + { + discarded = false; + } + + break; + } + case QMessageBox::Discard: + { + m_joystick->revertProfileEdited(); + configBox->setItemText(currentIndex, oldProfileName); + resetJoystick(); + + break; + } + case QMessageBox::Cancel: { discarded = false; + break; } - } - else if (status == QMessageBox::Discard) - { - joystick->revertProfileEdited(); - configBox->setItemText(currentIndex, oldProfileName); - resetJoystick(); - } - else if (status == QMessageBox::Cancel) - { - discarded = false; + } disconnectMainComboBoxEvents(); @@ -1764,7 +1803,7 @@ void JoyTabWidget::disconnectMainComboBoxEvents() disconnect(configBox, static_cast(&QComboBox::currentIndexChanged), this, &JoyTabWidget::changeJoyConfig); disconnect(configBox, static_cast(&QComboBox::currentIndexChanged), this, &JoyTabWidget::removeProfileEditNotification); - disconnect(joystick, &InputDevice::profileNameEdited, this, &JoyTabWidget::editCurrentProfileItemText); + disconnect(m_joystick, &InputDevice::profileNameEdited, this, &JoyTabWidget::editCurrentProfileItemText); } void JoyTabWidget::reconnectMainComboBoxEvents() @@ -1773,7 +1812,7 @@ void JoyTabWidget::reconnectMainComboBoxEvents() connect(configBox, static_cast(&QComboBox::currentIndexChanged), this, &JoyTabWidget::changeJoyConfig, Qt::QueuedConnection); connect(configBox, static_cast(&QComboBox::currentIndexChanged), this, &JoyTabWidget::removeProfileEditNotification, Qt::QueuedConnection); - connect(joystick, &InputDevice::profileNameEdited, this, &JoyTabWidget::editCurrentProfileItemText); + connect(m_joystick, &InputDevice::profileNameEdited, this, &JoyTabWidget::editCurrentProfileItemText); } void JoyTabWidget::disconnectCheckUnsavedEvent() @@ -1806,7 +1845,7 @@ void JoyTabWidget::checkStickDisplay() JoyControlStick *stick = button->getStick(); if ((stick != nullptr) && stick->hasSlotsAssigned()) { - SetJoystick *currentSet = joystick->getActiveSetJoystick(); + SetJoystick *currentSet = m_joystick->getActiveSetJoystick(); removeSetButtons(currentSet); fillSetButtons(currentSet); } @@ -1820,7 +1859,7 @@ void JoyTabWidget::checkDPadButtonDisplay() JoyDPad *dpad = button->getDPad(); if ((dpad != nullptr) && dpad->hasSlotsAssigned()) { - SetJoystick *currentSet = joystick->getActiveSetJoystick(); + SetJoystick *currentSet = m_joystick->getActiveSetJoystick(); removeSetButtons(currentSet); fillSetButtons(currentSet); } @@ -1833,7 +1872,7 @@ void JoyTabWidget::checkAxisButtonDisplay() JoyAxisButton *button = qobject_cast(sender()); // static_cast if (button->getAssignedSlots()->count() > 0) { - SetJoystick *currentSet = joystick->getActiveSetJoystick(); + SetJoystick *currentSet = m_joystick->getActiveSetJoystick(); removeSetButtons(currentSet); fillSetButtons(currentSet); } @@ -1846,7 +1885,7 @@ void JoyTabWidget::checkButtonDisplay() JoyButton *button = qobject_cast(sender()); // static_cast if (button->getAssignedSlots()->count() > 0) { - SetJoystick *currentSet = joystick->getActiveSetJoystick(); + SetJoystick *currentSet = m_joystick->getActiveSetJoystick(); removeSetButtons(currentSet); fillSetButtons(currentSet); } @@ -1862,7 +1901,7 @@ void JoyTabWidget::checkStickEmptyDisplay() //JoyControlStick *stick = button->getStick(); if ((stick != nullptr) && !stick->hasSlotsAssigned()) { - SetJoystick *currentSet = joystick->getActiveSetJoystick(); + SetJoystick *currentSet = m_joystick->getActiveSetJoystick(); removeSetButtons(currentSet); fillSetButtons(currentSet); } @@ -1878,7 +1917,7 @@ void JoyTabWidget::checkDPadButtonEmptyDisplay() //JoyDPad *dpad = button->getDPad(); if ((dpad != nullptr) && !dpad->hasSlotsAssigned()) { - SetJoystick *currentSet = joystick->getActiveSetJoystick(); + SetJoystick *currentSet = m_joystick->getActiveSetJoystick(); removeSetButtons(currentSet); fillSetButtons(currentSet); } @@ -1891,7 +1930,7 @@ void JoyTabWidget::checkAxisButtonEmptyDisplay() JoyAxisButton *button = qobject_cast(sender()); // static_cast if (button->getAssignedSlots()->count() == 0) { - SetJoystick *currentSet = joystick->getActiveSetJoystick(); + SetJoystick *currentSet = m_joystick->getActiveSetJoystick(); removeSetButtons(currentSet); fillSetButtons(currentSet); } @@ -1904,7 +1943,7 @@ void JoyTabWidget::checkButtonEmptyDisplay() JoyButton *button = qobject_cast(sender()); // static_cast if (button->getAssignedSlots()->count() == 0) { - SetJoystick *currentSet = joystick->getActiveSetJoystick(); + SetJoystick *currentSet = m_joystick->getActiveSetJoystick(); removeSetButtons(currentSet); fillSetButtons(currentSet); } @@ -1914,7 +1953,7 @@ void JoyTabWidget::checkHideEmptyOption() { qInstallMessageHandler(MessageHandler::myMessageOutput); - bool currentHideEmptyButtons = settings->value("HideEmptyButtons", false).toBool(); + bool currentHideEmptyButtons = m_settings->value("HideEmptyButtons", false).toBool(); if (currentHideEmptyButtons != hideEmptyButtons) { hideEmptyButtons = currentHideEmptyButtons; @@ -1985,7 +2024,7 @@ void JoyTabWidget::fillSetButtons(SetJoystick *set) int stickGridColumn = 0; int stickGridRow = 0; - for (int j=0; j < joystick->getNumberSticks(); j++) + for (int j=0; j < m_joystick->getNumberSticks(); j++) { JoyControlStick *stick = currentSet->getJoyStick(j); stick->establishPropertyUpdatedConnection(); @@ -2053,7 +2092,7 @@ void JoyTabWidget::fillSetButtons(SetJoystick *set) QGroupBox *hatGroup = nullptr; int hatGridColumn = 0; int hatGridRow = 0; - for (int j = 0; j < joystick->getNumberHats(); j++) + for (int j = 0; j < m_joystick->getNumberHats(); j++) { JoyDPad *dpad = currentSet->getJoyDPad(j); dpad->establishPropertyUpdatedConnection(); @@ -2104,7 +2143,7 @@ void JoyTabWidget::fillSetButtons(SetJoystick *set) } } - for (int j = 0; j < joystick->getNumberVDPads(); j++) + for (int j = 0; j < m_joystick->getNumberVDPads(); j++) { VDPad *vdpad = currentSet->getVDPad(j); vdpad->establishPropertyUpdatedConnection(); @@ -2169,7 +2208,7 @@ void JoyTabWidget::fillSetButtons(SetJoystick *set) column = 0; - for (int j = 0; j < joystick->getNumberAxes(); j++) + for (int j = 0; j < m_joystick->getNumberAxes(); j++) { JoyAxis *axis = currentSet->getJoyAxis(j); @@ -2214,7 +2253,7 @@ void JoyTabWidget::fillSetButtons(SetJoystick *set) } } - for (int j = 0; j < joystick->getNumberButtons(); j++) + for (int j = 0; j < m_joystick->getNumberButtons(); j++) { JoyButton *button = currentSet->getJoyButton(j); if ((button != nullptr) && !button->isPartVDPad()) @@ -2310,6 +2349,10 @@ void JoyTabWidget::removeSetButtons(SetJoystick *set) current_layout = gridLayout8; break; } + default: + { + break; + } } while (current_layout && ((child = current_layout->takeAt(0)) != nullptr)) @@ -2320,7 +2363,7 @@ void JoyTabWidget::removeSetButtons(SetJoystick *set) child = nullptr; } - for (int j=0; j < joystick->getNumberSticks(); j++) + for (int j=0; j < m_joystick->getNumberSticks(); j++) { JoyControlStick *stick = currentSet->getJoyStick(j); stick->disconnectPropertyUpdatedConnection(); @@ -2336,7 +2379,7 @@ void JoyTabWidget::removeSetButtons(SetJoystick *set) } } - for (int j=0; j < joystick->getNumberHats(); j++) + for (int j=0; j < m_joystick->getNumberHats(); j++) { JoyDPad *dpad = currentSet->getJoyDPad(j); dpad->establishPropertyUpdatedConnection(); @@ -2352,7 +2395,7 @@ void JoyTabWidget::removeSetButtons(SetJoystick *set) } } - for (int j=0; j < joystick->getNumberVDPads(); j++) + for (int j=0; j < m_joystick->getNumberVDPads(); j++) { VDPad *vdpad = currentSet->getVDPad(j); vdpad->establishPropertyUpdatedConnection(); @@ -2368,7 +2411,7 @@ void JoyTabWidget::removeSetButtons(SetJoystick *set) } } - for (int j=0; j < joystick->getNumberAxes(); j++) + for (int j=0; j < m_joystick->getNumberAxes(); j++) { JoyAxis *axis = currentSet->getJoyAxis(j); @@ -2387,7 +2430,7 @@ void JoyTabWidget::removeSetButtons(SetJoystick *set) } } - for (int j=0; j < joystick->getNumberButtons(); j++) + for (int j=0; j < m_joystick->getNumberButtons(); j++) { JoyButton *button = currentSet->getJoyButton(j); if ((button != nullptr) && !button->isPartVDPad()) @@ -2427,13 +2470,13 @@ void JoyTabWidget::deviceKeyRepeatSettings() { qInstallMessageHandler(MessageHandler::myMessageOutput); - bool keyRepeatActive = settings->value("KeyRepeat/KeyRepeatEnabled", true).toBool(); - int keyRepeatDelay = settings->value("KeyRepeat/KeyRepeatDelay", InputDevice::DEFAULTKEYREPEATDELAY).toInt(); - int keyRepeatRate = settings->value("KeyRepeat/KeyRepeatRate", InputDevice::DEFAULTKEYREPEATRATE).toInt(); + bool keyRepeatActive = m_settings->value("KeyRepeat/KeyRepeatEnabled", true).toBool(); + int keyRepeatDelay = m_settings->value("KeyRepeat/KeyRepeatDelay", InputDevice::DEFAULTKEYREPEATDELAY).toInt(); + int keyRepeatRate = m_settings->value("KeyRepeat/KeyRepeatRate", InputDevice::DEFAULTKEYREPEATRATE).toInt(); - joystick->setKeyRepeatStatus(keyRepeatActive); - joystick->setKeyRepeatDelay(keyRepeatDelay); - joystick->setKeyRepeatRate(keyRepeatRate); + m_joystick->setKeyRepeatStatus(keyRepeatActive); + m_joystick->setKeyRepeatDelay(keyRepeatDelay); + m_joystick->setKeyRepeatRate(keyRepeatRate); } #endif @@ -2443,9 +2486,9 @@ void JoyTabWidget::refreshCopySetActions() copySetMenu->clear(); - for (int i=0; i < InputDevice::NUMBER_JOYSETS; i++) + for (int i=0; i < GlobalVariables::InputDevice::NUMBER_JOYSETS; i++) { - SetJoystick *tempSet = joystick->getSetJoystick(i); + SetJoystick *tempSet = m_joystick->getSetJoystick(i); QAction *newaction = nullptr; if (!tempSet->getName().isEmpty()) { @@ -2473,7 +2516,7 @@ void JoyTabWidget::performSetCopy() QAction *action = qobject_cast(sender()); // static_cast int sourceSetIndex = action->data().toInt(); - SetJoystick *sourceSet = joystick->getSetJoystick(sourceSetIndex); + SetJoystick *sourceSet = m_joystick->getSetJoystick(sourceSetIndex); QString sourceName = QString(); if (!sourceSet->getName().isEmpty()) { @@ -2486,7 +2529,7 @@ void JoyTabWidget::performSetCopy() sourceName = trUtf8("Set %1").arg(sourceSetIndex+1); } - SetJoystick *destSet = joystick->getActiveSetJoystick(); + SetJoystick *destSet = m_joystick->getActiveSetJoystick(); if ((sourceSet != nullptr) && (destSet != nullptr)) { QMessageBox msgBox; @@ -2515,7 +2558,7 @@ void JoyTabWidget::disableCopyCurrentSet() { qInstallMessageHandler(MessageHandler::myMessageOutput); - SetJoystick *activeSet = joystick->getActiveSetJoystick(); + SetJoystick *activeSet = m_joystick->getActiveSetJoystick(); QMenu *menu = qobject_cast(sender()); // static_cast QList actions = menu->actions(); QListIterator iter(actions); @@ -2537,7 +2580,7 @@ void JoyTabWidget::openGameControllerMappingWindow() { qInstallMessageHandler(MessageHandler::myMessageOutput); - GameControllerMappingDialog *dialog = new GameControllerMappingDialog(joystick, settings, this); + GameControllerMappingDialog *dialog = new GameControllerMappingDialog(m_joystick, m_settings, this); dialog->show(); connect(dialog, &GameControllerMappingDialog::mappingUpdate, this, &JoyTabWidget::propogateMappingUpdate); } @@ -2554,7 +2597,7 @@ void JoyTabWidget::refreshHelperThread() { qInstallMessageHandler(MessageHandler::myMessageOutput); - tabHelper.moveToThread(joystick->thread()); + tabHelper.moveToThread(m_joystick->thread()); } void JoyTabWidget::changeEvent(QEvent *event) diff --git a/src/joytabwidget.h b/src/joytabwidget.h old mode 100644 new mode 100755 index 044d15d94..318fb59cd --- a/src/joytabwidget.h +++ b/src/joytabwidget.h @@ -209,9 +209,9 @@ private slots: QPushButton *pushButton; QSpacerItem *verticalSpacer_3; - InputDevice *joystick; + InputDevice *m_joystick; bool displayingNames; - AntiMicroSettings *settings; + AntiMicroSettings *m_settings; int comboBoxIndex; bool hideEmptyButtons; QString oldProfileName; diff --git a/src/joytabwidgetcontainer.cpp b/src/joytabwidgetcontainer.cpp old mode 100644 new mode 100755 index 8ca8aab6f..dfa6b29ef --- a/src/joytabwidgetcontainer.cpp +++ b/src/joytabwidgetcontainer.cpp @@ -25,7 +25,6 @@ #include #include - JoyTabWidgetContainer::JoyTabWidgetContainer(QWidget *parent) : QTabWidget(parent) { diff --git a/src/joytabwidgetcontainer.h b/src/joytabwidgetcontainer.h old mode 100644 new mode 100755 diff --git a/src/keyboard/virtualkeyboardmousewidget.cpp b/src/keyboard/virtualkeyboardmousewidget.cpp old mode 100644 new mode 100755 index 86fe185a3..07264fd1e --- a/src/keyboard/virtualkeyboardmousewidget.cpp +++ b/src/keyboard/virtualkeyboardmousewidget.cpp @@ -39,9 +39,6 @@ #include - - - #include #include #include @@ -63,15 +60,15 @@ QHash VirtualKeyboardMouseWidget::topRowKeys = QHash (); - - -VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(InputDevice *joystick, ButtonEditDialogHelper* helper, QuickSetDialog* quickSetDialog, QWidget *parent) : +VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(InputDevice *joystick, ButtonEditDialogHelper* helper, QuickSetDialog* quickSetDialog, JoyButton* button, QWidget *parent) : QTabWidget(parent) { qInstallMessageHandler(MessageHandler::myMessageOutput); this->joystick = joystick; this->helper = helper; + this->withoutQuickSetDialog = (button != nullptr); + lastPressedBtn = button; currentQuickDialog = quickSetDialog; keyboardTab = new QWidget(this); mouseTab = new QWidget(this); @@ -82,7 +79,6 @@ VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(InputDevice *joystick, Bu this->addTab(keyboardTab, trUtf8("Keyboard")); this->addTab(mouseTab, trUtf8("Mouse")); - this->setTabPosition(QTabWidget::South); setupVirtualKeyboardLayout(); @@ -95,6 +91,7 @@ VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(InputDevice *joystick, Bu connect(mouseSettingsPushButton, &QPushButton::clicked, this, &VirtualKeyboardMouseWidget::openMouseSettingsDialog); } + VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(QWidget *parent) : QTabWidget(parent) { @@ -104,12 +101,13 @@ VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(QWidget *parent) : mouseTab = new QWidget(this); isLaptopDevice = isLaptop(); noneButton = createNoneKey(); + withoutQuickSetDialog = false; + lastPressedBtn = nullptr; populateTopRowKeys(); this->addTab(keyboardTab, trUtf8("Keyboard")); this->addTab(mouseTab, trUtf8("Mouse")); - this->setTabPosition(QTabWidget::South); setupVirtualKeyboardLayout(); @@ -118,7 +116,6 @@ VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(QWidget *parent) : establishVirtualMouseSignalConnections(); QTimer::singleShot(0, this, SLOT(setButtonFontSizes())); - } @@ -130,7 +127,7 @@ bool VirtualKeyboardMouseWidget::is_numlock_activated() #endif #ifdef Q_OS_UNIX - Display *dpy = XOpenDisplay(":0"); // X11Extras::getInstance()->display(); + Display *dpy = XOpenDisplay(X11Extras::getInstance()->getEnvVariable("DISPLAY")); XKeyboardState x; XGetKeyboardControl(dpy, &x); XCloseDisplay(dpy); @@ -138,13 +135,12 @@ bool VirtualKeyboardMouseWidget::is_numlock_activated() #endif } -bool VirtualKeyboardMouseWidget::isLaptop() { - +bool VirtualKeyboardMouseWidget::isLaptop() +{ int secs, pct; - if (SDL_GetPowerInfo(&secs, &pct) == SDL_POWERSTATE_UNKNOWN) - return false; - else - return true; + + if (SDL_GetPowerInfo(&secs, &pct) == SDL_POWERSTATE_UNKNOWN) return false; + else return true; } @@ -153,15 +149,16 @@ void VirtualKeyboardMouseWidget::setupVirtualKeyboardLayout() qInstallMessageHandler(MessageHandler::myMessageOutput); QVBoxLayout *finalVBoxLayout = new QVBoxLayout(keyboardTab); - QVBoxLayout *tempMainKeyLayout = setupMainKeyboardLayout(); QVBoxLayout *tempAuxKeyLayout = new QVBoxLayout(); QVBoxLayout *tempNumKeyPadLayout = new QVBoxLayout(); if (is_numlock_activated()) + { tempNumKeyPadLayout = setupKeyboardNumPadLayout(); - else { - + } + else + { QPushButton *othersKeysButton = createOtherKeysMenu(); tempNumKeyPadLayout->addWidget(noneButton); @@ -170,17 +167,19 @@ void VirtualKeyboardMouseWidget::setupVirtualKeyboardLayout() } QHBoxLayout *tempHBoxLayout = new QHBoxLayout(); - tempHBoxLayout->addLayout(tempMainKeyLayout); - if (!isLaptopDevice) { + if (!isLaptopDevice) + { tempAuxKeyLayout = setupAuxKeyboardLayout(); tempHBoxLayout->addLayout(tempAuxKeyLayout); - } else + } + else + { delete tempAuxKeyLayout; + } tempHBoxLayout->addLayout(tempNumKeyPadLayout); - finalVBoxLayout->addLayout(tempHBoxLayout); } @@ -190,8 +189,10 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() QHBoxLayout *tempHBoxLayout = new QHBoxLayout(); tempHBoxLayout->setSpacing(0); + QVBoxLayout *tempVBoxLayout = new QVBoxLayout(); tempVBoxLayout->setSpacing(0); + QVBoxLayout *finalVBoxLayout = new QVBoxLayout(); if (isLaptopDevice) finalVBoxLayout->setSpacing(0); @@ -212,7 +213,8 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() tempHBoxLayout->addWidget(createNewKey("F11")); tempHBoxLayout->addWidget(createNewKey("F12")); - if (isLaptopDevice) { + if (isLaptopDevice) + { tempHBoxLayout->addWidget(createNewKey("Print")); tempHBoxLayout->addWidget(createNewKey("Pause")); tempHBoxLayout->addWidget(createNewKey("Delete")); @@ -230,6 +232,7 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() { tempHBoxLayout->addWidget(createNewKey(QString::number(i))); } + tempHBoxLayout->addWidget(createNewKey("0")); tempHBoxLayout->addWidget(createNewKey("minus")); tempHBoxLayout->addWidget(createNewKey("equal")); @@ -243,8 +246,10 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() QVBoxLayout *tempMiddleVLayout = new QVBoxLayout(); tempMiddleVLayout->setSpacing(0); + QHBoxLayout *tempMiddleHLayout = new QHBoxLayout(); tempHBoxLayout = new QHBoxLayout(); + tempHBoxLayout->addWidget(createNewKey("Tab")); if (!isLaptopDevice) tempHBoxLayout->addSpacerItem(new QSpacerItem(10, 30, QSizePolicy::Fixed)); tempHBoxLayout->addWidget(createNewKey("q")); @@ -266,10 +271,13 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() tempHBoxLayout->addWidget(createNewKey("backslash")); } - if (isLaptopDevice) { + if (isLaptopDevice) + { tempHBoxLayout->addWidget(createNewKey("Prior")); tempVBoxLayout->addLayout(tempHBoxLayout); - } else { + } + else + { tempMiddleVLayout->addLayout(tempHBoxLayout); } @@ -294,21 +302,22 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() tempHBoxLayout->addWidget(createNewKey("asterisk")); } - if (!isLaptopDevice) { - + if (!isLaptopDevice) + { tempMiddleVLayout->addLayout(tempHBoxLayout); tempMiddleHLayout->addLayout(tempMiddleVLayout); tempMiddleHLayout->setSpacing(0); tempMiddleHLayout->addWidget(createNewKey("Return")); tempVBoxLayout->addLayout(tempMiddleHLayout); - - } else { - + } + else + { tempHBoxLayout->addWidget(createNewKey("Return")); tempHBoxLayout->addWidget(createNewKey("Next")); tempVBoxLayout->addLayout(tempHBoxLayout); + delete tempMiddleHLayout; delete tempMiddleVLayout; } @@ -334,7 +343,8 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() tempHBoxLayout->addWidget(createNewKey("slash")); tempHBoxLayout->addWidget(createNewKey("Shift_R")); - if (isLaptopDevice) { + if (isLaptopDevice) + { tempHBoxLayout->addWidget(createNewKey("Up")); tempHBoxLayout->addWidget(createNewKey("End")); } @@ -350,16 +360,21 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() VirtualKeyPushButton* altR = createNewKey("Alt_R"); - if (altR->getKeycode() <= 0) { + if (altR->getKeycode() <= 0) + { tempHBoxLayout->addWidget(createNewKey("ISO_Level3_Shift")); delete altR; - } else + } + else + { tempHBoxLayout->addWidget(altR); + } tempHBoxLayout->addWidget(createNewKey("Menu")); tempHBoxLayout->addWidget(createNewKey("Control_R")); - if (isLaptopDevice) { + if (isLaptopDevice) + { tempHBoxLayout->addWidget(createNewKey("Left")); tempHBoxLayout->addWidget(createNewKey("Down")); tempHBoxLayout->addWidget(createNewKey("Right")); @@ -367,19 +382,21 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() tempVBoxLayout->addLayout(tempHBoxLayout); - if (!isLaptopDevice) { - tempVBoxLayout->setStretch(0, 1); - tempVBoxLayout->setStretch(1, 2); - tempVBoxLayout->setStretch(2, 1); - tempVBoxLayout->setStretch(3, 1); + if (!isLaptopDevice) + { + tempVBoxLayout->setStretch(0, 1); + tempVBoxLayout->setStretch(1, 2); + tempVBoxLayout->setStretch(2, 1); + tempVBoxLayout->setStretch(3, 1); } finalVBoxLayout->addLayout(tempVBoxLayout); - if (!isLaptopDevice) { - finalVBoxLayout->setStretch(0, 1); - finalVBoxLayout->setStretch(1, 0); - finalVBoxLayout->setStretch(2, 2); + if (!isLaptopDevice) + { + finalVBoxLayout->setStretch(0, 1); + finalVBoxLayout->setStretch(1, 0); + finalVBoxLayout->setStretch(2, 2); } return finalVBoxLayout; @@ -396,9 +413,11 @@ QVBoxLayout* VirtualKeyboardMouseWidget::setupAuxKeyboardLayout() tempHBoxLayout->setSpacing(0); tempVBoxLayout->setSpacing(0); tempGridLayout->setSpacing(0); + tempHBoxLayout->addWidget(createNewKey("Print")); tempHBoxLayout->addWidget(createNewKey("Scroll_Lock")); tempHBoxLayout->addWidget(createNewKey("Pause")); + tempVBoxLayout->addLayout(tempHBoxLayout); tempVBoxLayout->addSpacerItem(new QSpacerItem(20, 45, QSizePolicy::Minimum, QSizePolicy::Fixed)); @@ -429,10 +448,13 @@ QVBoxLayout* VirtualKeyboardMouseWidget::setupKeyboardNumPadLayout() QHBoxLayout *tempHBoxLayout = new QHBoxLayout(); tempHBoxLayout->setSpacing(0); + QVBoxLayout *tempVBoxLayout = new QVBoxLayout(); tempVBoxLayout->setSpacing(0); + QGridLayout *tempGridLayout = new QGridLayout(); tempGridLayout->setSpacing(0); + QVBoxLayout *finalVBoxLayout = new QVBoxLayout(); finalVBoxLayout->setSpacing(0); @@ -466,6 +488,7 @@ QVBoxLayout* VirtualKeyboardMouseWidget::setupKeyboardNumPadLayout() tempHBoxLayout = new QHBoxLayout(); tempHBoxLayout->setSpacing(0); + tempGridLayout = new QGridLayout(); tempGridLayout->setSpacing(0); tempGridLayout->addWidget(createNewKey("KP_1"), 1, 1, 1, 1); @@ -473,6 +496,7 @@ QVBoxLayout* VirtualKeyboardMouseWidget::setupKeyboardNumPadLayout() tempGridLayout->addWidget(createNewKey("KP_3"), 1, 3, 1, 1); tempGridLayout->addWidget(createNewKey("KP_0"), 2, 1, 1, 2); tempGridLayout->addWidget(createNewKey("KP_Decimal"), 2, 3, 1, 1); + tempHBoxLayout->addLayout(tempGridLayout); tempHBoxLayout->addWidget(createNewKey("KP_Enter")); @@ -491,10 +515,9 @@ void VirtualKeyboardMouseWidget::setupMouseControlLayout() QVBoxLayout *tempVBoxLayout = new QVBoxLayout(); QGridLayout *tempGridLayout = new QGridLayout(); QVBoxLayout *finalVBoxLayout = new QVBoxLayout(mouseTab); - VirtualMousePushButton *pushButton = nullptr; QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - pushButton = new VirtualMousePushButton(trUtf8("Left", "Mouse"), JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); + VirtualMousePushButton *pushButton = new VirtualMousePushButton(trUtf8("Left", "Mouse"), JoyButtonSlot::MouseLeft, JoyButtonSlot::JoyMouseMovement, this); pushButton->setSizePolicy(sizePolicy); pushButton->setMinimumHeight(50); tempVBoxLayout->addSpacerItem(new QSpacerItem(20, 50, QSizePolicy::Minimum, QSizePolicy::Expanding)); @@ -744,12 +767,16 @@ void VirtualKeyboardMouseWidget::processSingleKeyboardSelection(int keycode, int { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (currentQuickDialog == nullptr) { - - currentQuickDialog = new QuickSetDialog(joystick, helper, "setAssignedSlot", keycode, alias, 0, JoyButtonSlot::JoyKeyboard, true, true, this); - currentQuickDialog->show(); - connect(currentQuickDialog, &QuickSetDialog::finished, this, &VirtualKeyboardMouseWidget::nullifyDialogPointer); - + if ((currentQuickDialog == nullptr) && !withoutQuickSetDialog) + { + currentQuickDialog = new QuickSetDialog(joystick, helper, "setAssignedSlot", keycode, alias, 0, JoyButtonSlot::JoyKeyboard, true, true, this); + currentQuickDialog->show(); + connect(currentQuickDialog, &QuickSetDialog::finished, this, &VirtualKeyboardMouseWidget::nullifyDialogPointer); + } + else if (withoutQuickSetDialog) + { + ButtonEditDialog::getInstance()->invokeMethodLastBtn(lastPressedBtn, helper, "setAssignedSlot", keycode, alias, 0, JoyButtonSlot::JoyKeyboard, true, true, Qt::QueuedConnection, Qt::QueuedConnection, Qt::QueuedConnection); + ButtonEditDialog::getInstance()->refreshForLastBtn(); } } @@ -764,12 +791,16 @@ void VirtualKeyboardMouseWidget::processSingleMouseSelection(JoyButtonSlot *temp { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (currentQuickDialog == nullptr) { - - currentQuickDialog = new QuickSetDialog(joystick, helper, "setAssignedSlot", tempslot->getSlotCode(), -1, -1, tempslot->getSlotMode(), true, true, this); - currentQuickDialog->show(); - connect(currentQuickDialog, &QuickSetDialog::finished, this, &VirtualKeyboardMouseWidget::nullifyDialogPointer); - + if ((currentQuickDialog == nullptr) && !withoutQuickSetDialog) + { + currentQuickDialog = new QuickSetDialog(joystick, helper, "setAssignedSlot", tempslot->getSlotCode(), -1, -1, tempslot->getSlotMode(), true, true, this); + currentQuickDialog->show(); + connect(currentQuickDialog, &QuickSetDialog::finished, this, &VirtualKeyboardMouseWidget::nullifyDialogPointer); + } + else if (withoutQuickSetDialog) + { + ButtonEditDialog::getInstance()->invokeMethodLastBtn(lastPressedBtn, helper, "setAssignedSlot", tempslot->getSlotCode(), -1, -1, tempslot->getSlotMode(), true, true, Qt::QueuedConnection, Qt::QueuedConnection, Qt::QueuedConnection); + ButtonEditDialog::getInstance()->refreshForLastBtn(); } } @@ -808,6 +839,7 @@ void VirtualKeyboardMouseWidget::establishVirtualKeyboardSingleSignalConnections QList newlist = keyboardTab->findChildren (); QListIterator iter(newlist); + while (iter.hasNext()) { VirtualKeyPushButton *keybutton = iter.next(); @@ -816,22 +848,23 @@ void VirtualKeyboardMouseWidget::establishVirtualKeyboardSingleSignalConnections } QListIterator iterActions(otherKeysMenu->actions()); + while (iterActions.hasNext()) { QAction *temp = iterActions.next(); disconnect(temp, &QAction::triggered, nullptr, nullptr); + connect(temp, &QAction::triggered, this, [this, temp](bool checked) { otherKeysActionSingle(temp, checked); }); } + disconnect(noneButton, &QPushButton::clicked, nullptr, nullptr); + connect(noneButton, &QPushButton::clicked, this, &VirtualKeyboardMouseWidget::clearButtonSlotsFinish); - disconnect(noneButton, &QPushButton::clicked, nullptr, nullptr); - connect(noneButton, &QPushButton::clicked, this, &VirtualKeyboardMouseWidget::clearButtonSlotsFinish); - - #ifndef QT_DEBUG_NO_OUTPUT + #ifndef QT_DEBUG_NO_OUTPUT qDebug() << "COUNT: " << newlist.count(); - #endif + #endif } void VirtualKeyboardMouseWidget::establishVirtualKeyboardAdvancedSignalConnections() @@ -840,6 +873,7 @@ void VirtualKeyboardMouseWidget::establishVirtualKeyboardAdvancedSignalConnectio QList newlist = keyboardTab->findChildren (); QListIterator iter(newlist); + while (iter.hasNext()) { VirtualKeyPushButton *keybutton = iter.next(); @@ -848,10 +882,12 @@ void VirtualKeyboardMouseWidget::establishVirtualKeyboardAdvancedSignalConnectio } QListIterator iterActions(otherKeysMenu->actions()); + while (iterActions.hasNext()) { QAction *temp = iterActions.next(); disconnect(temp, &QAction::triggered, nullptr, nullptr); + connect(temp, &QAction::triggered, this, [this, temp](bool checked) { otherKeysActionAdvanced(temp, checked); }); @@ -867,6 +903,7 @@ void VirtualKeyboardMouseWidget::establishVirtualMouseSignalConnections() QList newlist = mouseTab->findChildren(); QListIterator iter(newlist); + while (iter.hasNext()) { VirtualMousePushButton *mousebutton = iter.next(); @@ -881,6 +918,7 @@ void VirtualKeyboardMouseWidget::establishVirtualMouseAdvancedSignalConnections( QList newlist = mouseTab->findChildren(); QListIterator iter(newlist); + while (iter.hasNext()) { VirtualMousePushButton *mousebutton = iter.next(); @@ -893,14 +931,16 @@ void VirtualKeyboardMouseWidget::clearButtonSlots() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (ButtonEditDialog::getInstance() != nullptr) { - if (ButtonEditDialog::getInstance()->getLastJoyButton() != nullptr) - QMetaObject::invokeMethod(ButtonEditDialog::getInstance()->getLastJoyButton(), "clearSlotsEventReset", Qt::BlockingQueuedConnection); - - emit selectionCleared(); + if (ButtonEditDialog::getInstance() != nullptr) + { + if (ButtonEditDialog::getInstance()->getLastJoyButton() != nullptr) + QMetaObject::invokeMethod(ButtonEditDialog::getInstance()->getLastJoyButton(), "clearSlotsEventReset", Qt::BlockingQueuedConnection); - } else { + emit selectionCleared(); + } + else + { QMessageBox::information(this, trUtf8("Last button"), trUtf8("Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad")); } } @@ -909,14 +949,15 @@ void VirtualKeyboardMouseWidget::clearButtonSlotsFinish() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (ButtonEditDialog::getInstance() != nullptr) { - if (ButtonEditDialog::getInstance()->getLastJoyButton() != nullptr) - QMetaObject::invokeMethod(ButtonEditDialog::getInstance()->getLastJoyButton(), "clearSlotsEventReset", Qt::BlockingQueuedConnection); - - emit selectionFinished(); - - } else { + if (ButtonEditDialog::getInstance() != nullptr) + { + if (ButtonEditDialog::getInstance()->getLastJoyButton() != nullptr) + QMetaObject::invokeMethod(ButtonEditDialog::getInstance()->getLastJoyButton(), "clearSlotsEventReset", Qt::BlockingQueuedConnection); + emit selectionFinished(); + } + else + { QMessageBox::information(this, trUtf8("Last button"), trUtf8("Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad")); } } @@ -935,17 +976,18 @@ void VirtualKeyboardMouseWidget::openMouseSettingsDialog() mouseSettingsPushButton->setEnabled(false); // TODO instead of buttons, get pointer to static getInstance from ButtonEditDialog for last pressed button, and then getting button from public method - if (ButtonEditDialog::getInstance() != nullptr) { - if (ButtonEditDialog::getInstance()->getLastJoyButton() != nullptr) { - + if (ButtonEditDialog::getInstance() != nullptr) + { + if (ButtonEditDialog::getInstance()->getLastJoyButton() != nullptr) + { MouseButtonSettingsDialog *dialog = new MouseButtonSettingsDialog(ButtonEditDialog::getInstance()->getLastJoyButton(), this); dialog->show(); QDialog *parent = qobject_cast(this->parentWidget()); // static_cast connect(parent, &QDialog::finished, dialog, &MouseButtonSettingsDialog::close); connect(dialog, &MouseButtonSettingsDialog::finished, this, &VirtualKeyboardMouseWidget::enableMouseSettingButton); - - } else { - + } + else + { QMessageBox::information(this, QObject::trUtf8("Last button"), QObject::trUtf8("There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard?")); } } @@ -958,6 +1000,13 @@ void VirtualKeyboardMouseWidget::enableMouseSettingButton() mouseSettingsPushButton->setEnabled(true); } +void VirtualKeyboardMouseWidget::disableMouseSettingButton() +{ + qInstallMessageHandler(MessageHandler::myMessageOutput); + + mouseSettingsPushButton->setEnabled(false); +} + void VirtualKeyboardMouseWidget::resizeEvent(QResizeEvent *event) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -974,13 +1023,13 @@ void VirtualKeyboardMouseWidget::setButtonFontSizes() QList buttonList = this->findChildren(); QListIterator iter(buttonList); + while (iter.hasNext()) { VirtualKeyPushButton *temp = iter.next(); QFont tempFont(temp->font()); tempFont.setPointSize(temp->calculateFontSize()); temp->setFont(tempFont); - } } @@ -1137,8 +1186,8 @@ void VirtualKeyboardMouseWidget::nullifyDialogPointer() } } -InputDevice* VirtualKeyboardMouseWidget::getJoystick() const { - +InputDevice* VirtualKeyboardMouseWidget::getJoystick() const +{ return joystick; } @@ -1147,32 +1196,32 @@ ButtonEditDialogHelper* VirtualKeyboardMouseWidget::getHelper() const { return helper; } -QWidget* VirtualKeyboardMouseWidget::getKeyboardTab() const { - +QWidget* VirtualKeyboardMouseWidget::getKeyboardTab() const +{ return keyboardTab; } -QWidget* VirtualKeyboardMouseWidget::getMouseTab() const { - +QWidget* VirtualKeyboardMouseWidget::getMouseTab() const +{ return mouseTab; } -QPushButton* VirtualKeyboardMouseWidget::getNoneButton() const { - +QPushButton* VirtualKeyboardMouseWidget::getNoneButton() const +{ return noneButton; } -QPushButton* VirtualKeyboardMouseWidget::getMouseSettingsPushButton() const { - +QPushButton* VirtualKeyboardMouseWidget::getMouseSettingsPushButton() const +{ return mouseSettingsPushButton; } -QMenu* VirtualKeyboardMouseWidget::getOtherKeysMenu() const { - +QMenu* VirtualKeyboardMouseWidget::getOtherKeysMenu() const +{ return otherKeysMenu; } -QuickSetDialog* VirtualKeyboardMouseWidget::getCurrentQuickDialog() const { - +QuickSetDialog* VirtualKeyboardMouseWidget::getCurrentQuickDialog() const +{ return currentQuickDialog; } diff --git a/src/keyboard/virtualkeyboardmousewidget.h b/src/keyboard/virtualkeyboardmousewidget.h old mode 100644 new mode 100755 index 354379289..7a5acd156 --- a/src/keyboard/virtualkeyboardmousewidget.h +++ b/src/keyboard/virtualkeyboardmousewidget.h @@ -40,7 +40,7 @@ class VirtualKeyboardMouseWidget : public QTabWidget Q_OBJECT public: - explicit VirtualKeyboardMouseWidget(InputDevice *joystick, ButtonEditDialogHelper* helper, QuickSetDialog* quickSetDialog = nullptr, QWidget *parent = nullptr); + explicit VirtualKeyboardMouseWidget(InputDevice *joystick, ButtonEditDialogHelper* helper, QuickSetDialog* quickSetDialog = nullptr, JoyButton* button = nullptr, QWidget *parent = nullptr); explicit VirtualKeyboardMouseWidget(QWidget *parent = nullptr); bool isKeyboardTabVisible(); bool is_numlock_activated(); @@ -84,6 +84,8 @@ public slots: void establishVirtualMouseSignalConnections(); void establishVirtualKeyboardAdvancedSignalConnections(); void establishVirtualMouseAdvancedSignalConnections(); + void enableMouseSettingButton(); + void disableMouseSettingButton(); private slots: void processSingleKeyboardSelection(int keycode, int alias); // (.., unsigned) @@ -93,7 +95,6 @@ private slots: void clearButtonSlots(); void clearButtonSlotsFinish(); void openMouseSettingsDialog(); - void enableMouseSettingButton(); void setButtonFontSizes(); void otherKeysActionSingle(QAction* action, bool triggered); void otherKeysActionAdvanced(QAction* action, bool triggered); @@ -101,7 +102,9 @@ private slots: private: bool isLaptopDevice; + bool withoutQuickSetDialog; InputDevice *joystick; + JoyButton* lastPressedBtn; ButtonEditDialogHelper* helper; QWidget *keyboardTab; QWidget *mouseTab; diff --git a/src/keyboard/virtualkeypushbutton.cpp b/src/keyboard/virtualkeypushbutton.cpp old mode 100644 new mode 100755 index c0752ad54..f100bba0d --- a/src/keyboard/virtualkeypushbutton.cpp +++ b/src/keyboard/virtualkeypushbutton.cpp @@ -31,8 +31,6 @@ QHash VirtualKeyPushButton::knownAliases = QHash (); - - VirtualKeyPushButton::VirtualKeyPushButton(QString xcodestring, QWidget *parent) : QPushButton(parent) { @@ -214,10 +212,11 @@ int VirtualKeyPushButton::calculateFontSize() QFont tempScaledFont(this->font()); tempScaledFont.setPointSize(10); QFontMetrics fm(tempScaledFont); + int less_width = this->width() - 4; - while (((this->width()-4) < fm.boundingRect(this->rect(), Qt::AlignCenter, this->text()).width()) && tempScaledFont.pointSize() >= 6) + while ((less_width < fm.boundingRect(this->rect(), Qt::AlignCenter, this->text()).width()) && (tempScaledFont.pointSize() > 5)) { - tempScaledFont.setPointSize(tempScaledFont.pointSize()-1); + tempScaledFont.setPointSize(tempScaledFont.pointSize() - 1); fm = QFontMetrics(tempScaledFont); } diff --git a/src/keyboard/virtualkeypushbutton.h b/src/keyboard/virtualkeypushbutton.h old mode 100644 new mode 100755 diff --git a/src/keyboard/virtualmousepushbutton.cpp b/src/keyboard/virtualmousepushbutton.cpp old mode 100644 new mode 100755 diff --git a/src/keyboard/virtualmousepushbutton.h b/src/keyboard/virtualmousepushbutton.h old mode 100644 new mode 100755 diff --git a/src/localantimicroserver.cpp b/src/localantimicroserver.cpp old mode 100644 new mode 100755 index a509519b5..51f6d1904 --- a/src/localantimicroserver.cpp +++ b/src/localantimicroserver.cpp @@ -25,7 +25,6 @@ #include #include - LocalAntiMicroServer::LocalAntiMicroServer(QObject *parent) : QObject(parent) { diff --git a/src/localantimicroserver.h b/src/localantimicroserver.h old mode 100644 new mode 100755 diff --git a/src/logger.cpp b/src/logger.cpp old mode 100644 new mode 100755 diff --git a/src/logger.h b/src/logger.h old mode 100644 new mode 100755 diff --git a/src/main.cpp b/src/main.cpp old mode 100644 new mode 100755 index b893cbb94..677dc918a --- a/src/main.cpp +++ b/src/main.cpp @@ -33,10 +33,7 @@ #include "messagehandler.h" #include "logger.h" -#ifdef Q_OS_UNIX #include -#endif - #include #include #include @@ -49,18 +46,19 @@ #include #include #include +#include #include #ifdef Q_OS_UNIX -#include -#include + #include + #include -#include -#include + #include + #include - #ifdef WITH_X11 - #include "x11extras.h" - #endif + #ifdef WITH_X11 + #include "x11extras.h" + #endif #endif @@ -69,15 +67,16 @@ #undef main #endif - #ifdef Q_OS_WIN -#include "winextras.h" -#include -#include + #include "winextras.h" + #include + #include #endif + + #ifndef Q_OS_WIN static void termSignalTermHandler(int signal) { @@ -99,7 +98,8 @@ static void termSignalIntHandler(int signal) #endif -void deleteInputDevices(QMap *joysticks) +// was non static +static void deleteInputDevices(QMap *joysticks) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -108,7 +108,7 @@ void deleteInputDevices(QMap *joysticks) while (iter.hasNext()) { InputDevice *joystick = iter.next().value(); - if (joystick) + if (joystick != nullptr) { delete joystick; joystick = nullptr; @@ -122,7 +122,6 @@ int main(int argc, char *argv[]) { qInstallMessageHandler(MessageHandler::myMessageOutput); - QApplication antimicro(argc, argv); QCoreApplication::setApplicationName("antimicro"); QCoreApplication::setApplicationVersion(PadderCommon::programVersion); @@ -136,15 +135,16 @@ int main(int argc, char *argv[]) qRegisterMetaType("JoyButtonSlot::JoySlotInputAction"); #if defined(Q_OS_UNIX) && defined(WITH_X11) + if (QApplication::platformName() == QStringLiteral("xcb")) { - XInitThreads(); + XInitThreads(); } + #endif QFile logFile; QTextStream logFileStream; - QTextStream outstream(stdout); QTextStream errorstream(stderr); @@ -157,6 +157,7 @@ int main(int argc, char *argv[]) { char *tempchrstr = argv[i]; QString temp = QString::fromUtf8(tempchrstr); + if (temp == "-style") { styleChangeFound = true; @@ -168,7 +169,6 @@ int main(int argc, char *argv[]) parser.setApplicationDescription(QCoreApplication::translate("antimicro", "Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support.")); parser.addHelpOption(); parser.addVersionOption(); - parser.addOptions({ // A boolean option with a single name (-p) {"tray", @@ -223,33 +223,38 @@ int main(int argc, char *argv[]) Logger appLogger(&outstream, &errorstream); // If a log level wasn't specified at the command-line, then use a default. - if( cmdutility.getCurrentLogLevel() == Logger::LOG_NONE ) { - appLogger.setLogLevel( Logger::LOG_WARNING ); - } else if (cmdutility.getCurrentLogLevel() != appLogger.getCurrentLogLevel()) + if( cmdutility.getCurrentLogLevel() == Logger::LOG_NONE ) + { + appLogger.setLogLevel( Logger::LOG_WARNING ); + } + else if (cmdutility.getCurrentLogLevel() != appLogger.getCurrentLogLevel()) { appLogger.setLogLevel(cmdutility.getCurrentLogLevel()); } if( !cmdutility.getCurrentLogFile().isEmpty() ) { - appLogger.setCurrentLogFile( cmdutility.getCurrentLogFile() ); - appLogger.setCurrentErrorStream(nullptr); + + appLogger.setCurrentLogFile( cmdutility.getCurrentLogFile() ); + appLogger.setCurrentErrorStream(nullptr); + } Q_INIT_RESOURCE(resources); - #if defined(Q_OS_WIN) && defined(WIN_PORTABLE_PACKAGE) + // If in portable mode, make sure the current directory is the same as the // config directory. This is to ensure that all relative paths resolve // correctly when loading on startup. + QDir::setCurrent( PadderCommon::configPath() ); #endif QDir configDir(PadderCommon::configPath()); if (!configDir.exists()) { - configDir.mkpath(PadderCommon::configPath()); + configDir.mkpath(PadderCommon::configPath()); } QMap *joysticks = new QMap(); @@ -262,39 +267,43 @@ int main(int argc, char *argv[]) QLocalSocket socket; socket.connectToServer(PadderCommon::localSocketKey); socket.waitForConnected(1000); + if (socket.state() == QLocalSocket::ConnectedState) { // An instance of this program is already running. // Save app config and exit. AntiMicroSettings settings(PadderCommon::configFilePath(), QSettings::IniFormat); - // Update log info based on config values - if( cmdutility.getCurrentLogLevel() == Logger::LOG_NONE && - settings.contains("LogLevel")) { - appLogger.setLogLevel( static_cast(settings.value("LogLevel").toInt()) ); - } - if( cmdutility.getCurrentLogFile().isEmpty() && - settings.contains("LogFile")) { - appLogger.setCurrentLogFile( settings.value("LogFile").toString() ); - appLogger.setCurrentErrorStream(nullptr); - } + // Update log info based on config values + if( cmdutility.getCurrentLogLevel() == Logger::LOG_NONE && + settings.contains("LogLevel")) { + + appLogger.setLogLevel( static_cast(settings.value("LogLevel").toInt()) ); + } + + if( cmdutility.getCurrentLogFile().isEmpty() && + settings.contains("LogFile")) { + + appLogger.setCurrentLogFile( settings.value("LogFile").toString() ); + appLogger.setCurrentErrorStream(nullptr); + } InputDaemon *joypad_worker = new InputDaemon(joysticks, &settings, false); - MainWindow w(joysticks, &cmdutility, &settings, false); - w.fillButtons(); - w.alterConfigFromSettings(); + MainWindow mainWindow(joysticks, &cmdutility, &settings, false); + mainWindow.fillButtons(); + mainWindow.alterConfigFromSettings(); if (!cmdutility.hasError() && (cmdutility.hasProfile() || cmdutility.hasProfileInOptions())) { - w.saveAppConfig(); + mainWindow.saveAppConfig(); } else if (!cmdutility.hasError() && cmdutility.isUnloadRequested()) { - w.saveAppConfig(); + mainWindow.saveAppConfig(); } - w.removeJoyTabs(); + mainWindow.removeJoyTabs(); QObject::connect(&antimicro, &QApplication::aboutToQuit, joypad_worker, &InputDaemon::quit); QTimer::singleShot(50, &antimicro, &QApplication::quit); @@ -302,8 +311,8 @@ int main(int argc, char *argv[]) settings.sync(); socket.disconnectFromServer(); - deleteInputDevices(joysticks); + delete joysticks; joysticks = nullptr; @@ -319,9 +328,7 @@ int main(int argc, char *argv[]) if (cmdutility.launchAsDaemon()) { pid_t pid, sid; - - //Fork the Parent Process - pid = fork(); + pid = fork(); // Fork the Parent Process if (pid == 0) { @@ -340,8 +347,7 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } - //We got a good pid, Close the Parent Process - else if (pid > 0) + else if (pid > 0) // We got a good pid, Close the Parent Process { appLogger.LogInfo(QObject::trUtf8("Launching daemon"), true, true); @@ -358,46 +364,42 @@ int main(int argc, char *argv[]) if (QApplication::platformName() == QStringLiteral("xcb")) { - if (cmdutility.getDisplayString().isEmpty()) - { - X11Extras::getInstance()->syncDisplay(); - } - else - { - X11Extras::setCustomDisplay(cmdutility.getDisplayString()); - X11Extras::getInstance()->syncDisplay(); - if (X11Extras::getInstance()->display() == nullptr) + if (cmdutility.getDisplayString().isEmpty()) + { + X11Extras::getInstance()->syncDisplay(); + } + else { - appLogger.LogError(QObject::trUtf8("Display string \"%1\" is not valid.") - .arg(cmdutility.getDisplayString()), true, true); - //errorstream << QObject::trUtf8("Display string \"%1\" is not valid.").arg(cmdutility.getDisplayString()) << endl; + X11Extras::setCustomDisplay(cmdutility.getDisplayString()); + X11Extras::getInstance()->syncDisplay(); - deleteInputDevices(joysticks); - delete joysticks; - joysticks = nullptr; + if (X11Extras::getInstance()->display() == nullptr) + { + appLogger.LogError(QObject::trUtf8("Display string \"%1\" is not valid.") + .arg(cmdutility.getDisplayString()), true, true); - delete localServer; - localServer = nullptr; + deleteInputDevices(joysticks); + delete joysticks; + joysticks = nullptr; - X11Extras::getInstance()->closeDisplay(); + delete localServer; + localServer = nullptr; - exit(EXIT_FAILURE); - } - } + X11Extras::getInstance()->closeDisplay(); + exit(EXIT_FAILURE); + } + } } #endif - //Change File Mask - umask(0); + umask(0); //Change File Mask + sid = setsid(); //Create a new Signature Id for our child - //Create a new Signature Id for our child - sid = setsid(); if (sid < 0) { appLogger.LogError(QObject::trUtf8("Failed to set a signature id for the daemon"), true, true); - //errorstream << QObject::trUtf8("Failed to set a signature id for the daemon") << endl; deleteInputDevices(joysticks); delete joysticks; @@ -409,7 +411,7 @@ int main(int argc, char *argv[]) #ifdef WITH_X11 if (QApplication::platformName() == QStringLiteral("xcb")) { - X11Extras::getInstance()->closeDisplay(); + X11Extras::getInstance()->closeDisplay(); } #endif @@ -431,7 +433,7 @@ int main(int argc, char *argv[]) if (QApplication::platformName() == QStringLiteral("xcb")) { - X11Extras::getInstance()->closeDisplay(); + X11Extras::getInstance()->closeDisplay(); } #endif @@ -452,29 +454,28 @@ int main(int argc, char *argv[]) if (QApplication::platformName() == QStringLiteral("xcb")) { - if (!cmdutility.getDisplayString().isEmpty()) - { - X11Extras::getInstance()->syncDisplay(cmdutility.getDisplayString()); - if (X11Extras::getInstance()->display() == nullptr) + if (!cmdutility.getDisplayString().isEmpty()) { - appLogger.LogError(QObject::trUtf8("Display string \"%1\" is not valid.") - .arg(cmdutility.getDisplayString()), true, true); + X11Extras::getInstance()->syncDisplay(cmdutility.getDisplayString()); + if (X11Extras::getInstance()->display() == nullptr) + { + appLogger.LogError(QObject::trUtf8("Display string \"%1\" is not valid.") + .arg(cmdutility.getDisplayString()), true, true); - deleteInputDevices(joysticks); - delete joysticks; - joysticks = nullptr; + deleteInputDevices(joysticks); + delete joysticks; + joysticks = nullptr; - delete localServer; - localServer = nullptr; + delete localServer; + localServer = nullptr; - X11Extras::getInstance()->closeDisplay(); + X11Extras::getInstance()->closeDisplay(); - exit(EXIT_FAILURE); + exit(EXIT_FAILURE); + } } } - } - #endif } @@ -485,8 +486,6 @@ int main(int argc, char *argv[]) antimicro.setQuitOnLastWindowClosed(false); - //QString defaultStyleName = qApp->style()->objectName(); - // If running Win version and no explicit style was // defined, use the style Fusion by default. I find the // windowsvista style a tad ugly @@ -505,13 +504,16 @@ int main(int argc, char *argv[]) // Update log info based on config values if( cmdutility.getCurrentLogLevel() == Logger::LOG_NONE && - settings->contains("LogLevel")) { - appLogger.setLogLevel( static_cast(settings->value("LogLevel").toInt()) ); + settings->contains("LogLevel")) { + + appLogger.setLogLevel( static_cast(settings->value("LogLevel").toInt()) ); } + if( cmdutility.getCurrentLogFile().isEmpty() && - settings->contains("LogFile")) { - appLogger.setCurrentLogFile( settings->value("LogFile").toString() ); - appLogger.setCurrentErrorStream(nullptr); + settings->contains("LogFile")) { + + appLogger.setCurrentLogFile( settings->value("LogFile").toString() ); + appLogger.setCurrentErrorStream(nullptr); } QString targetLang = QLocale::system().name(); @@ -521,8 +523,19 @@ int main(int argc, char *argv[]) } QTranslator qtTranslator; + #if defined(Q_OS_UNIX) - qtTranslator.load(QString("qt_").append(targetLang), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + QString transPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath); + + if(QDir(transPath).entryInfoList(QDir::NoDotAndDotDot|QDir::AllEntries).count() == 0) + { + qtTranslator.load(QString("qt_").append(targetLang), "/app/share/antimicro/translations"); + } + else + { + qtTranslator.load(QString("qt_").append(targetLang), transPath); + } + #elif defined(Q_OS_WIN) #ifdef QT_DEBUG qtTranslator.load(QString("qt_").append(targetLang), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); @@ -534,8 +547,17 @@ int main(int argc, char *argv[]) antimicro.installTranslator(&qtTranslator); QTranslator myappTranslator; + #if defined(Q_OS_UNIX) - myappTranslator.load(QString("antimicro_").append(targetLang), QApplication::applicationDirPath().append("/../share/antimicro/translations")); + if(QDir("/app/share/antimicro").entryInfoList(QDir::NoDotAndDotDot|QDir::AllEntries).count() > 0) + { + myappTranslator.load(QString("antimicro_").append(targetLang), "app/share/antimicro/translations"); + } + else + { + myappTranslator.load(QString("antimicro_").append(targetLang), QApplication::applicationDirPath().append("/../share/antimicro/translations")); + } + #elif defined(Q_OS_WIN) myappTranslator.load(QString("antimicro_").append(targetLang), QApplication::applicationDirPath().append("\\share\\antimicro\\translations")); #endif @@ -582,7 +604,7 @@ int main(int argc, char *argv[]) if (QApplication::platformName() == QStringLiteral("xcb")) { - X11Extras::getInstance()->closeDisplay(); + X11Extras::getInstance()->closeDisplay(); } #endif @@ -595,10 +617,9 @@ int main(int argc, char *argv[]) InputDaemon *joypad_worker = new InputDaemon(joysticks, settings); inputEventThread = new QThread; + MainWindow *mainWindow = new MainWindow(joysticks, &cmdutility, settings); - MainWindow *w = new MainWindow(joysticks, &cmdutility, settings); - - QObject::connect(&antimicro, &QApplication::aboutToQuit, w, &MainWindow::removeJoyTabs); + QObject::connect(&antimicro, &QApplication::aboutToQuit, mainWindow, &MainWindow::removeJoyTabs); QObject::connect(&antimicro, &QApplication::aboutToQuit, joypad_worker, &InputDaemon::quit); QObject::connect(&antimicro, &QApplication::aboutToQuit, joypad_worker, &InputDaemon::deleteJoysticks, Qt::BlockingQueuedConnection); @@ -607,8 +628,8 @@ int main(int argc, char *argv[]) QObject::connect(&antimicro, &QApplication::aboutToQuit, joypad_worker, &InputDaemon::deleteLater, Qt::BlockingQueuedConnection); - w->makeJoystickTabs(); - QTimer::singleShot(0, w, &MainWindow::controllerMapOpening); + mainWindow->makeJoystickTabs(); + QTimer::singleShot(0, mainWindow, &MainWindow::controllerMapOpening); joypad_worker->startWorker(); @@ -616,10 +637,14 @@ int main(int argc, char *argv[]) PadderCommon::mouseHelperObj.moveToThread(inputEventThread); inputEventThread->start(QThread::HighPriority); + + int app_result = antimicro.exec(); - // Log any remaining messages if they exist. - appLogger.Log(); + + + + appLogger.Log(); // Log any remaining messages if they exist. inputEventThread->quit(); inputEventThread->wait(); @@ -627,7 +652,6 @@ int main(int argc, char *argv[]) delete joysticks; joysticks = nullptr; - //delete joypad_worker; // maybe hide joypad_worker = nullptr; delete localServer; @@ -640,13 +664,13 @@ int main(int argc, char *argv[]) if (QApplication::platformName() == QStringLiteral("xcb")) { - X11Extras::getInstance()->closeDisplay(); + X11Extras::getInstance()->closeDisplay(); } #endif - delete w; - w = nullptr; + delete mainWindow; + mainWindow = nullptr; return app_result; } @@ -655,6 +679,7 @@ int main(int argc, char *argv[]) QString eventGeneratorIdentifier = QString(); AntKeyMapper *keyMapper = nullptr; EventHandlerFactory *factory = EventHandlerFactory::getInstance(cmdutility.getEventGenerator()); + if (!factory) { status = false; @@ -669,6 +694,7 @@ int main(int argc, char *argv[]) #if (defined(Q_OS_UNIX) && defined(WITH_UINPUT) && defined(WITH_XTEST)) || \ defined(Q_OS_WIN) + // Use fallback event handler. if (!status && cmdutility.getEventGenerator() != EventHandlerFactory::fallBackIdentifier()) { @@ -677,7 +703,7 @@ int main(int argc, char *argv[]) appLogger.LogInfo(QObject::trUtf8("Attempting to use fallback option %1 for event generation.") .arg(eventDisplayName)); - if (keyMapper) + if (keyMapper != nullptr) { keyMapper->deleteInstance(); keyMapper = nullptr; @@ -685,6 +711,7 @@ int main(int argc, char *argv[]) factory->deleteInstance(); factory = EventHandlerFactory::getInstance(EventHandlerFactory::fallBackIdentifier()); + if (!factory) { status = false; @@ -711,7 +738,7 @@ int main(int argc, char *argv[]) delete localServer; localServer = nullptr; - if (keyMapper) + if (keyMapper != nullptr) { keyMapper->deleteInstance(); keyMapper = nullptr; @@ -721,7 +748,7 @@ int main(int argc, char *argv[]) if (QApplication::platformName() == QStringLiteral("xcb")) { - X11Extras::getInstance()->closeDisplay(); + X11Extras::getInstance()->closeDisplay(); } #endif @@ -738,24 +765,24 @@ int main(int argc, char *argv[]) InputDaemon *joypad_worker = new InputDaemon(joysticks, settings); inputEventThread = new QThread(); - MainWindow *w = new MainWindow(joysticks, &cmdutility, settings); + MainWindow *mainWindow = new MainWindow(joysticks, &cmdutility, settings); - w->setAppTranslator(&qtTranslator); - w->setTranslator(&myappTranslator); - AppLaunchHelper mainAppHelper(settings, w->getGraphicalStatus()); + mainWindow->setAppTranslator(&qtTranslator); + mainWindow->setTranslator(&myappTranslator); + AppLaunchHelper mainAppHelper(settings, mainWindow->getGraphicalStatus()); - QObject::connect(w, &MainWindow::joystickRefreshRequested, joypad_worker, &InputDaemon::refresh); - QObject::connect(joypad_worker, static_cast(&InputDaemon::joystickRefreshed), - [w](InputDevice* dev) { w->fillButtons(dev); }); + QObject::connect(mainWindow, &MainWindow::joystickRefreshRequested, joypad_worker, &InputDaemon::refresh); + QObject::connect(joypad_worker, SIGNAL(joystickRefreshed(InputDevice*)), + mainWindow, SLOT(fillButtons(InputDevice*))); QObject::connect(joypad_worker, - static_cast*)>(&InputDaemon::joysticksRefreshed), - [w](QMap* map) { w->fillButtons(map); }); + SIGNAL(joysticksRefreshed(QMap*)), + mainWindow, SLOT(fillButtons(QMap*))); QObject::connect(&antimicro, &QApplication::aboutToQuit, localServer, &LocalAntiMicroServer::close); - QObject::connect(&antimicro, &QApplication::aboutToQuit, w, &MainWindow::saveAppConfig); - QObject::connect(&antimicro, &QApplication::aboutToQuit, w, &MainWindow::removeJoyTabs); + QObject::connect(&antimicro, &QApplication::aboutToQuit, mainWindow, &MainWindow::saveAppConfig); + QObject::connect(&antimicro, &QApplication::aboutToQuit, mainWindow, &MainWindow::removeJoyTabs); QObject::connect(&antimicro, &QApplication::aboutToQuit, &mainAppHelper, &AppLaunchHelper::revertMouseThread); QObject::connect(&antimicro, &QApplication::aboutToQuit, joypad_worker, &InputDaemon::quit); QObject::connect(&antimicro, &QApplication::aboutToQuit, joypad_worker, &InputDaemon::deleteJoysticks); @@ -766,20 +793,22 @@ int main(int argc, char *argv[]) #ifdef Q_OS_WIN QObject::connect(&antimicro, &QApplication::aboutToQuit, &mainAppHelper, &AppLaunchHelper::appQuitPointerPrecision); #endif - QObject::connect(localServer, &LocalAntiMicroServer::clientdisconnect, w, &MainWindow::handleInstanceDisconnect); - QObject::connect(w, &MainWindow::mappingUpdated, + QObject::connect(localServer, &LocalAntiMicroServer::clientdisconnect, mainWindow, &MainWindow::handleInstanceDisconnect); + QObject::connect(mainWindow, &MainWindow::mappingUpdated, joypad_worker, &InputDaemon::refreshMapping); QObject::connect(joypad_worker, &InputDaemon::deviceUpdated, - w, &MainWindow::testMappingUpdateNow); + mainWindow, &MainWindow::testMappingUpdateNow); QObject::connect(joypad_worker, &InputDaemon::deviceRemoved, - w, &MainWindow::removeJoyTab); + mainWindow, &MainWindow::removeJoyTab); QObject::connect(joypad_worker, &InputDaemon::deviceAdded, - w, &MainWindow::addJoyTab); + mainWindow, &MainWindow::addJoyTab); #ifdef Q_OS_WIN + // Raise process priority. Helps reduce timer delays caused by // the running of other processes. + bool raisedPriority = WinExtras::raiseProcessPriority(); if (!raisedPriority) { @@ -788,9 +817,10 @@ int main(int argc, char *argv[]) #endif mainAppHelper.initRunMethods(); - QTimer::singleShot(0, [w]() { w->fillButtons(); }); - QTimer::singleShot(0, w, &MainWindow::alterConfigFromSettings); - QTimer::singleShot(0, w, &MainWindow::changeWindowStatus); + QTimer::singleShot(0, mainWindow, SLOT(fillButtons())); + QTimer::singleShot(0, mainWindow, SLOT(alterConfigFromSettings())); + QTimer::singleShot(0, mainWindow, SLOT(changeWindowStatus())); + mainAppHelper.changeMouseThread(inputEventThread); @@ -800,11 +830,14 @@ int main(int argc, char *argv[]) PadderCommon::mouseHelperObj.moveToThread(inputEventThread); inputEventThread->start(QThread::HighPriority); + + int app_result = antimicro.exec(); - // Log any remaining messages if they exist. - appLogger.Log(); + + + appLogger.Log(); // Log any remaining messages if they exist. appLogger.LogInfo(QObject::trUtf8("Quitting Program"), true, true); joypad_worker = nullptr; @@ -827,8 +860,7 @@ int main(int argc, char *argv[]) if (QApplication::platformName() == QStringLiteral("xcb")) { - - X11Extras::getInstance()->closeDisplay(); + X11Extras::getInstance()->closeDisplay(); } #endif @@ -836,8 +868,8 @@ int main(int argc, char *argv[]) EventHandlerFactory::getInstance()->handler()->cleanup(); EventHandlerFactory::getInstance()->deleteInstance(); - delete w; - w = nullptr; + delete mainWindow; + mainWindow = nullptr; delete settings; settings = nullptr; diff --git a/src/mainsettingsdialog.cpp b/src/mainsettingsdialog.cpp old mode 100644 new mode 100755 index 942ac5429..49ccfee18 --- a/src/mainsettingsdialog.cpp +++ b/src/mainsettingsdialog.cpp @@ -18,6 +18,7 @@ #include "mainsettingsdialog.h" #include "ui_mainsettingsdialog.h" +#include "globalvariables.h" #include "messagehandler.h" #include "addeditautoprofiledialog.h" #include "editalldefaultautoprofiledialog.h" @@ -154,6 +155,7 @@ MainSettingsDialog::MainSettingsDialog(AntiMicroSettings *settings, fillGUIDComboBox(); #endif + QString autoProfileActive = settings->value("AutoProfiles/AutoProfilesActive", "").toString(); if (autoProfileActive == "1") { @@ -284,23 +286,23 @@ MainSettingsDialog::MainSettingsDialog(AntiMicroSettings *settings, } int historySize = settings->value("Mouse/HistorySize", 0).toInt(); - if ((historySize > 0) && (historySize <= JoyButton::MAXIMUMMOUSEHISTORYSIZE)) + if ((historySize > 0) && (historySize <= GlobalVariables::JoyButton::MAXIMUMMOUSEHISTORYSIZE)) { ui->historySizeSpinBox->setValue(historySize); } double weightModifier = settings->value("Mouse/WeightModifier", 0).toDouble(); - if ((weightModifier > 0.0) && (weightModifier <= JoyButton::MAXIMUMWEIGHTMODIFIER)) + if ((weightModifier > 0.0) && (weightModifier <= GlobalVariables::JoyButton::MAXIMUMWEIGHTMODIFIER)) { ui->weightModifierDoubleSpinBox->setValue(weightModifier); } - for (int i = 1; i <= JoyButton::MAXIMUMMOUSEREFRESHRATE; i++) + for (int i = 1; i <= GlobalVariables::JoyButton::MAXIMUMMOUSEREFRESHRATE; i++) { ui->mouseRefreshRateComboBox->addItem(QString("%1 ms").arg(i), i); } - int refreshIndex = ui->mouseRefreshRateComboBox->findData(JoyButton::getMouseRefreshRate()); + int refreshIndex = ui->mouseRefreshRateComboBox->findData(GlobalVariables::JoyButton::mouseRefreshRate); if (refreshIndex >= 0) { ui->mouseRefreshRateComboBox->setCurrentIndex(refreshIndex); @@ -322,7 +324,7 @@ MainSettingsDialog::MainSettingsDialog(AntiMicroSettings *settings, ui->gamepadPollRateComboBox->addItem(QString("%1 ms").arg(i), QVariant(i)); } - int gamepadPollIndex = ui->gamepadPollRateComboBox->findData(JoyButton::getGamepadRefreshRate()); + int gamepadPollIndex = ui->gamepadPollRateComboBox->findData(GlobalVariables::JoyButton::gamepadRefreshRate); if (gamepadPollIndex >= 0) { ui->gamepadPollRateComboBox->setCurrentIndex(gamepadPollIndex); @@ -386,12 +388,14 @@ MainSettingsDialog::~MainSettingsDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); - delete ui; if (connectedDevices != nullptr) { delete connectedDevices; connectedDevices = nullptr; } + + delete ui; + } void MainSettingsDialog::fillControllerMappingsTable() @@ -745,18 +749,18 @@ void MainSettingsDialog::saveNewSettings() { if (historySize > 0) { - JoyButton::setMouseHistorySize(historySize); + JoyButton::setMouseHistorySize(historySize, GlobalVariables::JoyButton::MAXIMUMMOUSEHISTORYSIZE, GlobalVariables::JoyButton::mouseHistorySize, &GlobalVariables::JoyButton::mouseHistoryX, &GlobalVariables::JoyButton::mouseHistoryY); } - if (weightModifier) + if (weightModifier != 0.0) { - JoyButton::setWeightModifier(weightModifier); + JoyButton::setWeightModifier(weightModifier, GlobalVariables::JoyButton::MAXIMUMWEIGHTMODIFIER, GlobalVariables::JoyButton::weightModifier); } } else { - JoyButton::setMouseHistorySize(1); - JoyButton::setWeightModifier(0.0); + JoyButton::setMouseHistorySize(1, GlobalVariables::JoyButton::MAXIMUMMOUSEHISTORYSIZE, GlobalVariables::JoyButton::mouseHistorySize, &GlobalVariables::JoyButton::mouseHistoryX, &GlobalVariables::JoyButton::mouseHistoryY); + JoyButton::setWeightModifier(0.0, GlobalVariables::JoyButton::MAXIMUMWEIGHTMODIFIER, GlobalVariables::JoyButton::weightModifier); } if (historySize > 0) @@ -771,22 +775,22 @@ void MainSettingsDialog::saveNewSettings() int refreshIndex = ui->mouseRefreshRateComboBox->currentIndex(); int mouseRefreshRate = ui->mouseRefreshRateComboBox->itemData(refreshIndex).toInt(); - if (mouseRefreshRate != JoyButton::getMouseRefreshRate()) + if (mouseRefreshRate != GlobalVariables::JoyButton::mouseRefreshRate) { settings->setValue("Mouse/RefreshRate", mouseRefreshRate); - JoyButton::setMouseRefreshRate(mouseRefreshRate); + JoyButton::setMouseRefreshRate(mouseRefreshRate, GlobalVariables::JoyButton::mouseRefreshRate, GlobalVariables::JoyButton::IDLEMOUSEREFRESHRATE, JoyButton::getMouseHelper(), &GlobalVariables::JoyButton::mouseHistoryX, &GlobalVariables::JoyButton::mouseHistoryY, JoyButton::getTestOldMouseTime(), JoyButton::getStaticMouseEventTimer()); } int springIndex = ui->springScreenComboBox->currentIndex(); int springScreen = ui->springScreenComboBox->itemData(springIndex).toInt(); - JoyButton::setSpringModeScreen(springScreen); + JoyButton::setSpringModeScreen(springScreen, GlobalVariables::JoyButton::springModeScreen); settings->setValue("Mouse/SpringScreen", QString::number(springScreen)); int pollIndex = ui->gamepadPollRateComboBox->currentIndex(); - int gamepadPollRate = ui->gamepadPollRateComboBox->itemData(pollIndex).toUInt(); - if (gamepadPollRate != JoyButton::getGamepadRefreshRate()) + int gamepadPollRate = ui->gamepadPollRateComboBox->itemData(pollIndex).toInt(); + if (gamepadPollRate != GlobalVariables::JoyButton::gamepadRefreshRate) { - JoyButton::setGamepadRefreshRate(gamepadPollRate); + JoyButton::setGamepadRefreshRate(gamepadPollRate, GlobalVariables::JoyButton::gamepadRefreshRate, JoyButton::getMouseHelper()); settings->setValue("GamepadPollRate", QString::number(gamepadPollRate)); } @@ -839,53 +843,71 @@ void MainSettingsDialog::checkLocaleChange() else { QString newLocale = "en"; - if (row == 1) - { - newLocale = "br"; - } - else if (row == 2) - { - newLocale = "en"; - } - else if (row == 3) - { - newLocale = "fr"; - } - else if (row == 4) - { - newLocale = "de"; - } - else if (row == 5) - { - newLocale = "it"; - } - else if (row == 6) - { - newLocale = "ja"; - } - else if (row == 7) - { - newLocale = "ru"; - } - else if (row == 8) - { - newLocale = "sr"; - } - else if (row == 9) - { - newLocale = "zh_CN"; - } - else if (row == 10) - { - newLocale = "es"; - } - else if (row == 11) - { - newLocale = "uk"; - } - else if (row == 12) + + switch(row) { - newLocale = "pl"; + + case 1: + { + newLocale = "br"; + break; + } + case 2: + { + newLocale = "en"; + break; + } + case 3: + { + newLocale = "fr"; + break; + } + case 4: + { + newLocale = "de"; + break; + } + case 5: + { + newLocale = "it"; + break; + } + case 6: + { + newLocale = "ja"; + break; + } + case 7: + { + newLocale = "ru"; + break; + } + case 8: + { + newLocale = "sr"; + break; + } + case 9: + { + newLocale = "zh_CN"; + break; + } + case 10: + { + newLocale = "es"; + break; + } + case 11: + { + newLocale = "uk"; + break; + } + case 12: + { + newLocale = "pl"; + break; + } + } settings->setValue("Language", newLocale); @@ -1009,7 +1031,7 @@ void MainSettingsDialog::fillAutoProfilesTable(QString guid) { qInstallMessageHandler(MessageHandler::myMessageOutput); - for (int i = ui->autoProfileTableWidget->rowCount()-1; i >= 0; i--) + for (int i = ui->autoProfileTableWidget->rowCount() - 1; i >= 0; i--) { ui->autoProfileTableWidget->removeRow(i); } @@ -1035,11 +1057,13 @@ void MainSettingsDialog::fillAutoProfilesTable(QString guid) QString deviceName = info->getDeviceName(); QString guidDisplay = info->getGUID(); + if (!deviceName.isEmpty()) { guidDisplay = QString("%1 ").arg(info->getDeviceName()); guidDisplay.append(QString("(%1)").arg(info->getGUID())); } + item = new QTableWidgetItem(guidDisplay); item->setFlags(item->flags() & ~Qt::ItemIsEditable); item->setData(Qt::UserRole, info->getGUID()); @@ -1097,11 +1121,13 @@ void MainSettingsDialog::fillAutoProfilesTable(QString guid) QString deviceName = info->getDeviceName(); QString guidDisplay = info->getGUID(); + if (!deviceName.isEmpty()) { guidDisplay = QString("%1 ").arg(info->getDeviceName()); guidDisplay.append(QString("(%1)").arg(info->getGUID())); } + item = new QTableWidgetItem(guidDisplay); item->setFlags(item->flags() & ~Qt::ItemIsEditable); item->setData(Qt::UserRole, info->getGUID()); @@ -1487,10 +1513,11 @@ void MainSettingsDialog::openAddAutoProfileDialog() QList reservedGUIDs = defaultAutoProfiles.keys(); AutoProfileInfo *info = new AutoProfileInfo(this); AddEditAutoProfileDialog *dialog = new AddEditAutoProfileDialog(info, settings, connectedDevices, reservedGUIDs, false, this); - connect(dialog, &AddEditAutoProfileDialog::accepted, this, [this, dialog] { - addNewAutoProfile(dialog); - }); + // connect(dialog, &AddEditAutoProfileDialog::accepted, this, [this, dialog] { + // addNewAutoProfile(dialog); + // }); + connect(dialog, SIGNAL(accepted()), this, SLOT(addNewAutoProfile())); connect(dialog, &AddEditAutoProfileDialog::rejected, info, &AutoProfileInfo::deleteLater); dialog->show(); } @@ -1725,13 +1752,14 @@ void MainSettingsDialog::transferEditsToCurrentTableRow(AddEditAutoProfileDialog changeDeviceForProfileTable(currentIndex); } -void MainSettingsDialog::addNewAutoProfile(AddEditAutoProfileDialog *dialog) +void MainSettingsDialog::addNewAutoProfile() { qInstallMessageHandler(MessageHandler::myMessageOutput); + AddEditAutoProfileDialog *dialog = static_cast(sender()); AutoProfileInfo *info = dialog->getAutoProfile(); - bool found = false; + if (info->isCurrentDefault()) { if (defaultAutoProfiles.contains(info->getGUID())) @@ -1891,7 +1919,7 @@ void MainSettingsDialog::fillSpringScreenPresets() ui->springScreenComboBox->clear(); ui->springScreenComboBox->addItem(trUtf8("Default"), - QVariant(AntiMicroSettings::defaultSpringScreen)); + QVariant(GlobalVariables::AntimicroSettings::defaultSpringScreen)); QDesktopWidget deskWid; for (int i=0; i < deskWid.screenCount(); i++) @@ -1899,7 +1927,7 @@ void MainSettingsDialog::fillSpringScreenPresets() ui->springScreenComboBox->addItem(QString(":%1").arg(i), QVariant(i)); } - int screenIndex = ui->springScreenComboBox->findData(JoyButton::getSpringModeScreen()); + int screenIndex = ui->springScreenComboBox->findData(GlobalVariables::JoyButton::springModeScreen); if (screenIndex > -1) { ui->springScreenComboBox->setCurrentIndex(screenIndex); @@ -1921,7 +1949,7 @@ void MainSettingsDialog::refreshExtraMouseInfo() } else if (handler == "xtest") { - temp = X11Extras::getInstance()->getPointInformation(X11Extras::xtestMouseDeviceName); + temp = X11Extras::getInstance()->getPointInformation(GlobalVariables::X11Extras::xtestMouseDeviceName); } if (temp.id >= 0) @@ -2000,3 +2028,156 @@ QList* MainSettingsDialog::getConnectedDevices() const { return connectedDevices; } + +void MainSettingsDialog::on_resetBtn_clicked() +{ + QMessageBox msgBox; + msgBox.setText(trUtf8("Do you really want to reset setting?")); + msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); + + switch(msgBox.exec()) + { + case QMessageBox::Ok: + resetGeneralSett(); + resetAutoProfSett(); + resetMouseSett(); + resetAdvancedSett(); + ui->localeListWidget->setCurrentRow(0); + + break; + + case QMessageBox::Cancel: + + break; + + default: + + break; + } + + QMessageBox msgBox2; + msgBox2.setText(trUtf8("Would you like to reset mappings too?")); + msgBox2.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); + + switch(msgBox2.exec()) + { + case QMessageBox::Ok: + + ui->controllerMappingsTableWidget->setRowCount(0); + + break; + + case QMessageBox::Cancel: + + break; + + default: + + break; + } + + +} + + +void MainSettingsDialog::resetGeneralSett() +{ + ui->profileDefaultDirLineEdit->setText(PadderCommon::preferredProfileDir(settings)); + ui->numberRecentProfileSpinBox->setValue(5); + int gamepadPollIndex = ui->gamepadPollRateComboBox->findData(GlobalVariables::JoyButton::gamepadRefreshRate); + + if (gamepadPollIndex >= 0) + { + ui->gamepadPollRateComboBox->setCurrentIndex(gamepadPollIndex); + } + + ui->closeToTrayCheckBox->setChecked(false); + ui->launchAtWinStartupCheckBox->setChecked(false); + ui->traySingleProfileListCheckBox->setChecked(false); + ui->minimizeTaskbarCheckBox->setChecked(false); + ui->hideEmptyCheckBox->setChecked(false); + ui->autoLoadPreviousCheckBox->setChecked(true); + ui->launchInTrayCheckBox->setChecked(false); + ui->associateProfilesCheckBox->setChecked(true); + ui->keyRepeatEnableCheckBox->setChecked(false); + + ui->keyDelayHorizontalSlider->setValue(660); + ui->keyRateHorizontalSlider->setValue(25); +} + + +void MainSettingsDialog::resetAutoProfSett() +{ + + disconnect(ui->autoProfileTableWidget, &QTableWidget::itemChanged, this, &MainSettingsDialog::processAutoProfileActiveClick); + + ui->activeCheckBox->setChecked(false); + ui->devicesComboBox->setCurrentIndex(0); + + ui->autoProfileTableWidget->setRowCount(0); + + AutoProfileInfo *info = allDefaultProfile; + + ui->autoProfileTableWidget->insertRow(0); + QTableWidgetItem *item = new QTableWidgetItem(); + item->setCheckState(info->isActive() ? Qt::Checked : Qt::Unchecked); + ui->autoProfileTableWidget->setItem(0, 0, item); + + QString deviceName = info->getDeviceName(); + QString guidDisplay = info->getGUID(); + + if (!deviceName.isEmpty()) + { + guidDisplay = QString("%1 ").arg(info->getDeviceName()); + guidDisplay.append(QString("(%1)").arg(info->getGUID())); + } + + item = new QTableWidgetItem(guidDisplay); + item->setFlags(item->flags() & ~Qt::ItemIsEditable); + item->setData(Qt::UserRole, info->getGUID()); + item->setToolTip(info->getGUID()); + ui->autoProfileTableWidget->setItem(0, 1, item); + + item = new QTableWidgetItem("Default"); + item->setData(Qt::UserRole, "default"); + ui->autoProfileTableWidget->setItem(0, 6, item); + + item = new QTableWidgetItem("Instance"); + item->setData(Qt::UserRole, QVariant::fromValue(info)); + ui->autoProfileTableWidget->setItem(0, 7, item); + + if (ui->autoProfileTableWidget->rowCount() == 1) profileList.clear(); + + connect(ui->autoProfileTableWidget, &QTableWidget::itemChanged, this, &MainSettingsDialog::processAutoProfileActiveClick); +} + + +void MainSettingsDialog::resetMouseSett() +{ + ui->disableWindowsEnhancedPointCheckBox->setChecked(false); + ui->smoothingEnableCheckBox->setChecked(false); + ui->smoothingEnableCheckBox->setEnabled(true); + ui->historySizeSpinBox->setValue(10); + ui->historySizeSpinBox->setEnabled(false); + ui->weightModifierDoubleSpinBox->setValue(0.20); + ui->weightModifierDoubleSpinBox->setEnabled(false); + + int refreshIndex = ui->mouseRefreshRateComboBox->findData(GlobalVariables::JoyButton::mouseRefreshRate); + if (refreshIndex >= 0) + { + ui->mouseRefreshRateComboBox->setCurrentIndex(refreshIndex); + } + + int screenIndex = ui->springScreenComboBox->findData(GlobalVariables::JoyButton::springModeScreen); + if (screenIndex > -1) + { + ui->springScreenComboBox->setCurrentIndex(screenIndex); + } +} + + +void MainSettingsDialog::resetAdvancedSett() +{ + ui->logFilePathEdit->setText(""); + ui->logLevelComboBox->setCurrentIndex(0); +} diff --git a/src/mainsettingsdialog.h b/src/mainsettingsdialog.h old mode 100644 new mode 100755 index ba099d6a2..81dd5138c --- a/src/mainsettingsdialog.h +++ b/src/mainsettingsdialog.h @@ -88,13 +88,16 @@ protected slots: void changeAutoProfileButtonsState(); void transferEditsToCurrentTableRow(AddEditAutoProfileDialog *dialog); void transferAllProfileEditToCurrentTableRow(EditAllDefaultAutoProfileDialog* dialog); - void addNewAutoProfile(AddEditAutoProfileDialog *dialog); + void addNewAutoProfile(); void autoProfileButtonsActiveState(bool enabled); void changeKeyRepeatWidgetsStatus(bool enabled); void checkSmoothingWidgetStatus(bool enabled); void resetMouseAcceleration(); void selectLogFile(); +private slots: + void on_resetBtn_clicked(); + private: Ui::MainSettingsDialog *ui; @@ -109,6 +112,11 @@ protected slots: AutoProfileInfo* allDefaultProfile; QList *connectedDevices; + + void resetGeneralSett(); + void resetAutoProfSett(); + void resetMouseSett(); + void resetAdvancedSett(); }; #endif // MAINSETTINGSDIALOG_H diff --git a/src/mainsettingsdialog.ui b/src/mainsettingsdialog.ui old mode 100644 new mode 100755 index 8707a2cab..daf2affca --- a/src/mainsettingsdialog.ui +++ b/src/mainsettingsdialog.ui @@ -10,7 +10,7 @@ 0 0 706 - 582 + 627 @@ -92,7 +92,7 @@ - 3 + 0 @@ -110,7 +110,7 @@ - Profi&le Directory: + Profile Direc&tory: profileDefaultDirLineEdit @@ -1205,7 +1205,7 @@ values used by the virtual mouse. 10 9 481 - 31 + 36 @@ -1230,7 +1230,7 @@ values used by the virtual mouse. 9 69 481 - 31 + 34 @@ -1294,14 +1294,37 @@ values used by the virtual mouse. - - - Qt::Horizontal + + + 5 - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + 5 - + + 5 + + + 5 + + + + + Reset + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp old mode 100644 new mode 100755 index 8228045bd..87e2940c8 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -41,7 +41,7 @@ #include "calibration.h" #if defined(WITH_X11) || defined(Q_OS_WIN) -#include "autoprofileinfo.h" + #include "autoprofileinfo.h" #endif #ifdef Q_OS_WIN @@ -49,7 +49,7 @@ #endif #ifdef Q_OS_UNIX -#include + #include #endif #include @@ -69,11 +69,14 @@ #include #include #include +#include #ifdef Q_OS_WIN -#include + #include #endif + + MainWindow::MainWindow(QMap *joysticks, CommandLineUtility *cmdutility, AntiMicroSettings *settings, bool graphical, QWidget *parent) : @@ -85,11 +88,11 @@ MainWindow::MainWindow(QMap *joysticks, qInstallMessageHandler(MessageHandler::myMessageOutput); ui->stackedWidget->setCurrentIndex(0); - this->translator = nullptr; - this->appTranslator = nullptr; - this->cmdutility = cmdutility; - this->graphical = graphical; - this->settings = settings; + m_translator = nullptr; + m_appTranslator = nullptr; + m_cmdutility = cmdutility; + m_graphical = graphical; + m_settings = settings; ui->actionStick_Pad_Assign->setVisible(false); @@ -117,7 +120,7 @@ MainWindow::MainWindow(QMap *joysticks, showTrayIcon = !cmdutility->isTrayHidden() && graphical && !cmdutility->shouldListControllers() && !cmdutility->shouldMapController(); - this->joysticks = joysticks; + m_joysticks = joysticks; if (showTrayIcon) { @@ -178,10 +181,10 @@ MainWindow::MainWindow(QMap *joysticks, connect(ui->actionGameController_Mapping, &QAction::triggered, this, &MainWindow::openGameControllerMappingWindow); #if defined(Q_OS_UNIX) && defined(WITH_X11) - if (QApplication::platformName() == QStringLiteral("xcb")) - { - connect(appWatcher, &AutoProfileWatcher::foundApplicableProfile, this, &MainWindow::autoprofileLoad); - } + if (QApplication::platformName() == QStringLiteral("xcb")) + { + connect(appWatcher, &AutoProfileWatcher::foundApplicableProfile, this, &MainWindow::autoprofileLoad); + } #elif defined(Q_OS_WIN) connect(appWatcher, &AutoProfileWatcher::foundApplicableProfile, this, &MainWindow::autoprofileLoad); #endif @@ -221,29 +224,29 @@ void MainWindow::alterConfigFromSettings() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (cmdutility->shouldListControllers()) + if (m_cmdutility->shouldListControllers()) { - graphical = false; + m_graphical = false; } - else if (cmdutility->hasProfile()) + else if (m_cmdutility->hasProfile()) { - if (cmdutility->hasControllerNumber()) + if (m_cmdutility->hasControllerNumber()) { - loadConfigFile(cmdutility->getProfileLocation(), - cmdutility->getControllerNumber()); + loadConfigFile(m_cmdutility->getProfileLocation(), + m_cmdutility->getControllerNumber()); } - else if (cmdutility->hasControllerID()) + else if (m_cmdutility->hasControllerID()) { - loadConfigFile(cmdutility->getProfileLocation(), - cmdutility->hasControllerID()); + loadConfigFile(m_cmdutility->getProfileLocation(), + m_cmdutility->hasControllerID()); } else { - loadConfigFile(cmdutility->getProfileLocation()); + loadConfigFile(m_cmdutility->getProfileLocation()); } } - const QList tempList = cmdutility->getControllerOptionsList(); + const QList tempList = m_cmdutility->getControllerOptionsList(); //unsigned int optionListSize = tempList->size(); QListIterator optionIter(tempList); @@ -307,17 +310,17 @@ void MainWindow::controllerMapOpening() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (cmdutility->shouldMapController()) + if (m_cmdutility->shouldMapController()) { - graphical = false; + m_graphical = false; - const QList tempList = cmdutility->getControllerOptionsList(); + const QList tempList = m_cmdutility->getControllerOptionsList(); ControllerOptionsInfo temp = tempList.at(0); if (temp.hasControllerNumber()) { - int joypadIndex = cmdutility->getControllerNumber(); + int joypadIndex = m_cmdutility->getControllerNumber(); #ifndef QT_DEBUG_NO_OUTPUT qDebug() << "It was antimicro --map controllerNumber"; @@ -331,7 +334,7 @@ void MainWindow::controllerMapOpening() { - QString joypadGUID = cmdutility->getControllerID(); + QString joypadGUID = m_cmdutility->getControllerID(); #ifndef QT_DEBUG_NO_OUTPUT qDebug() << "It was antimicro --map controllerID"; @@ -359,7 +362,7 @@ void MainWindow::fillButtons() { qInstallMessageHandler(MessageHandler::myMessageOutput); - fillButtons(joysticks); + fillButtons(m_joysticks); } void MainWindow::makeJoystickTabs() @@ -372,7 +375,7 @@ void MainWindow::makeJoystickTabs() // Make temporary QMap with devices inserted using the device index as the // key rather than joystick ID. QMap temp; - QMapIterator iterTemp(*joysticks); + QMapIterator iterTemp(*m_joysticks); while (iterTemp.hasNext()) { @@ -389,13 +392,13 @@ void MainWindow::makeJoystickTabs() iter.next(); InputDevice *joystick = iter.value(); - JoyTabWidget *tabwidget = new JoyTabWidget(joystick, settings, this); + JoyTabWidget *tabwidget = new JoyTabWidget(joystick, m_settings, this); QString joytabName = joystick->getSDLName(); joytabName.append(" ").append(trUtf8("(%1)").arg(joystick->getName())); ui->tabWidget->addTab(tabwidget, joytabName); } - if (joysticks != nullptr) + if (m_joysticks != nullptr) { ui->tabWidget->setCurrentIndex(0); ui->stackedWidget->setCurrentIndex(1); @@ -438,7 +441,7 @@ void MainWindow::fillButtons(QMap *joysticks) InputDevice *joystick = iter.value(); - JoyTabWidget *tabwidget = new JoyTabWidget(joystick, settings, this); + JoyTabWidget *tabwidget = new JoyTabWidget(joystick, m_settings, this); QString joytabName = joystick->getSDLName(); joytabName.append(" ").append(trUtf8("(%1)").arg(joystick->getName())); ui->tabWidget->addTab(tabwidget, joytabName); @@ -472,6 +475,7 @@ void MainWindow::fillButtons(QMap *joysticks) ui->actionUpdate_Joysticks->setEnabled(true); ui->actionHide->setEnabled(true); ui->actionQuit->setEnabled(true); + } // Intermediate slot to be used in Form Designer @@ -496,12 +500,29 @@ void MainWindow::populateTrayIcon() trayIconMenu->clear(); profileActions.clear(); - int joystickCount = joysticks->size(); + + closeAction = new QAction(trUtf8("&Quit"), trayIconMenu); + closeAction->setIcon(QIcon::fromTheme("application-exit")); + connect(closeAction, &QAction::triggered, this, &MainWindow::quitProgram, Qt::DirectConnection); + + hideAction = new QAction(trUtf8("&Hide"), trayIconMenu); + hideAction->setIcon(QIcon::fromTheme("view-restore")); + connect(hideAction, &QAction::triggered, this, &MainWindow::hideWindow); + + restoreAction = new QAction(trUtf8("&Restore"), trayIconMenu); + restoreAction->setIcon(QIcon::fromTheme("view-fullscreen")); + connect(restoreAction, &QAction::triggered, this, &MainWindow::show); + + updateJoy = new QAction(trUtf8("&Update Joysticks"), trayIconMenu); + updateJoy->setIcon(QIcon::fromTheme("view-refresh")); + connect(updateJoy, &QAction::triggered, this, &MainWindow::startJoystickRefresh); + + int joystickCount = m_joysticks->size(); if (joystickCount > 0) { - QMapIterator iter(*joysticks); - bool useSingleList = settings->value("TrayProfileList", false).toBool(); + QMapIterator iter(*m_joysticks); + bool useSingleList = m_settings->value("TrayProfileList", false).toBool(); if (!useSingleList && (joystickCount == 1)) { useSingleList = true; @@ -544,7 +565,13 @@ void MainWindow::populateTrayIcon() newaction->setCheckable(true); newaction->setChecked(false); - if (configIter.key() == widget->getCurrentConfigIndex()) + QString identifier = current->getStringIdentifier(); + QString controlEntryLastSelected = QString("Controller%1LastSelected").arg(identifier); + + QFileInfo fileInfo(m_settings->value(controlEntryLastSelected).toString()); + + + if ((configIter.value() == fileInfo.baseName()) || (configIter.value() == widget->getCurrentConfigName())) { newaction->setChecked(true); } @@ -553,6 +580,7 @@ void MainWindow::populateTrayIcon() tempmap.insert(QString::number(i), QVariant (configIter.key())); QVariant tempvar (tempmap); newaction->setData(tempvar); + connect(newaction, &QAction::triggered, this, [this, newaction](bool checked) { profileTrayActionTriggered(newaction, checked); }); @@ -623,22 +651,6 @@ void MainWindow::populateTrayIcon() trayIconMenu->addSeparator(); } - hideAction = new QAction(trUtf8("&Hide"), trayIconMenu); - hideAction->setIcon(QIcon::fromTheme("view-restore")); - connect(hideAction, &QAction::triggered, this, &MainWindow::hideWindow); - - restoreAction = new QAction(trUtf8("&Restore"), trayIconMenu); - restoreAction->setIcon(QIcon::fromTheme("view-fullscreen")); - connect(restoreAction, &QAction::triggered, this, &MainWindow::show); - - closeAction = new QAction(trUtf8("&Quit"), trayIconMenu); - closeAction->setIcon(QIcon::fromTheme("application-exit")); - connect(closeAction, &QAction::triggered, this, &MainWindow::quitProgram); - - updateJoy = new QAction(trUtf8("&Update Joysticks"), trayIconMenu); - updateJoy->setIcon(QIcon::fromTheme("view-refresh")); - connect(updateJoy, &QAction::triggered, this, &MainWindow::startJoystickRefresh); - trayIconMenu->addAction(hideAction); trayIconMenu->addAction(restoreAction); trayIconMenu->addAction(updateJoy); @@ -654,16 +666,16 @@ void MainWindow::quitProgram() qInstallMessageHandler(MessageHandler::myMessageOutput); bool discard = true; - for (int i=0; i < ui->tabWidget->count() && discard; i++) + AutoProfileWatcher::getAutoProfileWatcherInstance()->disconnectWindowTimer(); + + for (int i = 0; (i < ui->tabWidget->count()) && discard; i++) { - JoyTabWidget *tab = qobject_cast(ui->tabWidget->widget(i)); // static_cast + JoyTabWidget *tab = qobject_cast(ui->tabWidget->widget(i)); discard = tab->discardUnsavedProfileChanges(); } - if (discard) - { - qApp->quit(); - } + if (discard) qApp->quit(); + } void MainWindow::refreshTrayIconMenu() @@ -720,13 +732,13 @@ void MainWindow::saveAppConfig() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (joysticks->size() > 0) + if (m_joysticks->size() > 0) { JoyTabWidget *temptabwidget = qobject_cast(ui->tabWidget->widget(0)); // static_cast - settings->setValue("DisplayNames", + m_settings->setValue("DisplayNames", temptabwidget->isDisplayingNames() ? "1" : "0"); - settings->beginGroup("Controllers"); + m_settings->beginGroup("Controllers"); QStringList tempIdentifierHolder = QStringList(); for (int i=0; i < ui->tabWidget->count(); i++) @@ -758,11 +770,11 @@ void MainWindow::saveAppConfig() } } - settings->endGroup(); + m_settings->endGroup(); } - settings->setValue("WindowSize", size()); - settings->setValue("WindowPosition", pos()); + m_settings->setValue("WindowSize", size()); + m_settings->setValue("WindowPosition", pos()); } void MainWindow::loadAppConfig(bool forceRefresh) @@ -960,8 +972,6 @@ void MainWindow::showEvent(QShowEvent *event) { qInstallMessageHandler(MessageHandler::myMessageOutput); - bool propogate = true; - // Check if hideEvent has been processed if (signalDisconnect && isVisible()) { @@ -989,10 +999,8 @@ void MainWindow::showEvent(QShowEvent *event) } } - if (propogate) - { - QMainWindow::showEvent(event); - } + QMainWindow::showEvent(event); + } void MainWindow::changeEvent(QEvent *event) @@ -1004,7 +1012,7 @@ void MainWindow::changeEvent(QEvent *event) QWindowStateChangeEvent *e = static_cast(event); if (e->oldState() != Qt::WindowMinimized && isMinimized()) { - bool minimizeToTaskbar = settings->value("MinimizeToTaskbar", false).toBool(); + bool minimizeToTaskbar = m_settings->value("MinimizeToTaskbar", false).toBool(); if (QSystemTrayIcon::isSystemTrayAvailable() && showTrayIcon && !minimizeToTaskbar) { this->hideWindow(); @@ -1037,7 +1045,7 @@ void MainWindow::loadConfigFile(QString fileLocation, int joystickIndex) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((joystickIndex > 0) && joysticks->contains(joystickIndex - 1)) + if ((joystickIndex > 0) && m_joysticks->contains(joystickIndex - 1)) { JoyTabWidget *widget = qobject_cast(ui->tabWidget->widget(joystickIndex-1)); // static_cast if (widget != nullptr) @@ -1103,7 +1111,7 @@ void MainWindow::handleInstanceDisconnect() { qInstallMessageHandler(MessageHandler::myMessageOutput); - settings->sync(); + m_settings->sync(); loadAppConfig(true); } @@ -1163,13 +1171,13 @@ void MainWindow::openCalibration() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (joysticks->isEmpty()) { + if (m_joysticks->isEmpty()) { QMessageBox::information(this, trUtf8("Calibration couldn't be opened"), trUtf8("You must connect at least one controller to open the window")); } else { - QPointer calibration = new Calibration(joysticks); + QPointer calibration = new Calibration(m_joysticks); calibration.data()->show(); if (calibration.isNull()) @@ -1183,7 +1191,7 @@ void MainWindow::unloadCurrentConfig(int joystickIndex) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((joystickIndex > 0) && joysticks->contains(joystickIndex - 1)) + if ((joystickIndex > 0) && m_joysticks->contains(joystickIndex - 1)) { JoyTabWidget *widget = qobject_cast (ui->tabWidget->widget(joystickIndex - 1)); // static_cast if (widget != nullptr) @@ -1273,7 +1281,7 @@ void MainWindow::changeStartSetNumber(int startSetNumber, int joystickIndex) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((joystickIndex > 0) && joysticks->contains(joystickIndex - 1)) + if ((joystickIndex > 0) && m_joysticks->contains(joystickIndex - 1)) { JoyTabWidget *widget = qobject_cast(ui->tabWidget->widget(joystickIndex - 1)); // static_cast if (widget != nullptr) @@ -1304,8 +1312,8 @@ void MainWindow::openMainSettingsDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QList *devices = new QList(joysticks->values()); - MainSettingsDialog *dialog = new MainSettingsDialog(settings, devices, this); + QList *devices = new QList(m_joysticks->values()); + MainSettingsDialog *dialog = new MainSettingsDialog(m_settings, devices, this); connect(dialog, &MainSettingsDialog::changeLanguage, this, &MainWindow::changeLanguage); if (appWatcher != nullptr) @@ -1348,9 +1356,9 @@ void MainWindow::changeLanguage(QString language) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((translator != nullptr) && (appTranslator != nullptr)) + if ((m_translator != nullptr) && (m_appTranslator != nullptr)) { - PadderCommon::reloadTranslations(translator, appTranslator, language); + PadderCommon::reloadTranslations(m_translator, m_appTranslator, language); } } @@ -1364,7 +1372,7 @@ void MainWindow::closeEvent(QCloseEvent *event) { qInstallMessageHandler(MessageHandler::myMessageOutput); - bool closeToTray = settings->value("CloseToTray", false).toBool(); + bool closeToTray = m_settings->value("CloseToTray", false).toBool(); if (closeToTray && QSystemTrayIcon::isSystemTrayAvailable() && showTrayIcon) { this->hideWindow(); @@ -1573,11 +1581,11 @@ void MainWindow::openGameControllerMappingWindow(bool openAsMain) InputDevice *joystick = joyTab->getJoystick(); if (joystick != nullptr) { - GameControllerMappingDialog *dialog = new GameControllerMappingDialog(joystick, settings, this); + GameControllerMappingDialog *dialog = new GameControllerMappingDialog(joystick, m_settings, this); if (openAsMain) { - dialog->setParent(0); + dialog->setParent(nullptr); dialog->setWindowFlags(Qt::Window); connect(dialog, &GameControllerMappingDialog::finished, qApp, &QApplication::quit); } @@ -1615,7 +1623,7 @@ void MainWindow::testMappingUpdateNow(int index, InputDevice *device) tab = nullptr; } - JoyTabWidget *tabwidget = new JoyTabWidget(device, settings, this); + JoyTabWidget *tabwidget = new JoyTabWidget(device, m_settings, this); QString joytabName = device->getSDLName(); joytabName.append(" ").append(trUtf8("(%1)").arg(device->getName())); ui->tabWidget->insertTab(index, tabwidget, joytabName); @@ -1689,7 +1697,7 @@ void MainWindow::addJoyTab(InputDevice *device) { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyTabWidget *tabwidget = new JoyTabWidget(device, settings, this); + JoyTabWidget *tabwidget = new JoyTabWidget(device, m_settings, this); QString joytabName = device->getSDLName(); joytabName.append(" ").append(trUtf8("(%1)").arg(device->getName())); ui->tabWidget->addTab(tabwidget, joytabName); @@ -1702,10 +1710,10 @@ void MainWindow::addJoyTab(InputDevice *device) JoyTabWidget *tab = qobject_cast(ui->tabWidget->widget(i)); // static_cast if (tab != nullptr) { - InputDevice *device = tab->getJoystick(); - QString joytabName = device->getSDLName(); - joytabName.append(" ").append(trUtf8("(%1)").arg(device->getName())); - ui->tabWidget->setTabText(i, joytabName); + InputDevice *device_in_loop = tab->getJoystick(); + QString joytabName_in_loop = device_in_loop->getSDLName(); + joytabName_in_loop.append(" ").append(trUtf8("(%1)").arg(device_in_loop->getName())); + ui->tabWidget->setTabText(i, joytabName_in_loop); } } @@ -1829,7 +1837,7 @@ void MainWindow::checkAutoProfileWatcherTimer() if (QApplication::platformName() == QStringLiteral("xcb")) { #endif - QString autoProfileActive = settings->value("AutoProfiles/AutoProfilesActive", "0").toString(); + QString autoProfileActive = m_settings->value("AutoProfiles/AutoProfilesActive", "0").toString(); if (autoProfileActive == "1") { appWatcher->startTimer(); @@ -1878,7 +1886,7 @@ void MainWindow::selectControllerJoyTab(int index) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((index > 0) && joysticks->contains(index - 1)) + if ((index > 0) && m_joysticks->contains(index - 1)) { JoyTabWidget *widget = qobject_cast (ui->tabWidget->widget(index - 1)); // static_cast if (widget != nullptr) @@ -1908,7 +1916,8 @@ void MainWindow::selectControllerJoyTab(QString GUID) if (!GUID.isEmpty()) { InputDevice *device = nullptr; - QMapIterator deviceIter(*joysticks); + QMapIterator deviceIter(*m_joysticks); + while (deviceIter.hasNext()) { deviceIter.next(); @@ -1943,15 +1952,16 @@ void MainWindow::changeWindowStatus() // Check flags to see if user requested for the main window and the tray icon // to not be displayed. - if (graphical) + + if (m_graphical) { - bool launchInTraySetting = settings->runtimeValue("LaunchInTray", false).toBool(); - if (!cmdutility->isHiddenRequested() && + bool launchInTraySetting = m_settings->runtimeValue("LaunchInTray", false).toBool(); + if (!m_cmdutility->isHiddenRequested() && (!launchInTraySetting || !QSystemTrayIcon::isSystemTrayAvailable())) { show(); } - else if (cmdutility->isHiddenRequested() && cmdutility->isTrayHidden()) + else if (m_cmdutility->isHiddenRequested() && m_cmdutility->isTrayHidden()) { // Window should already be hidden but make sure // to disable flashing buttons. @@ -1959,11 +1969,13 @@ void MainWindow::changeWindowStatus() setEnabled(false); // Should already be disabled. Do it again just to be sure. } - else if (cmdutility->isHiddenRequested() || launchInTraySetting) + else if (m_cmdutility->isHiddenRequested() || launchInTraySetting) { // Window should already be hidden but make sure // to disable flashing buttons. hideWindow(); + + setEnabled(true); } } } @@ -1972,35 +1984,35 @@ bool MainWindow::getGraphicalStatus() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return graphical; + return m_graphical; } void MainWindow::setTranslator(QTranslator *translator) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->translator = translator; + m_translator = translator; } QTranslator* MainWindow::getTranslator() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return translator; + return m_translator; } void MainWindow::setAppTranslator(QTranslator *translator) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->appTranslator = translator; + m_appTranslator = translator; } QTranslator* MainWindow::getAppTranslator() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return appTranslator; + return m_appTranslator; } void MainWindow::retranslateUi() diff --git a/src/mainwindow.h b/src/mainwindow.h old mode 100644 new mode 100755 index 15f215bfe..4b4927501 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -149,16 +149,16 @@ private slots: private: Ui::MainWindow *ui; - QMap *joysticks; + QMap *m_joysticks; QMap > profileActions; QSystemTrayIcon *trayIcon; QMenu *trayIconMenu; AboutDialog *aboutDialog; - CommandLineUtility *cmdutility; - AntiMicroSettings *settings; - QTranslator *translator; - QTranslator *appTranslator; + CommandLineUtility *m_cmdutility; + AntiMicroSettings *m_settings; + QTranslator *m_translator; + QTranslator *m_appTranslator; AutoProfileWatcher *appWatcher; QAction *hideAction; @@ -168,7 +168,7 @@ private slots: bool signalDisconnect; bool showTrayIcon; - bool graphical; + bool m_graphical; }; diff --git a/src/mainwindow.ui b/src/mainwindow.ui old mode 100644 new mode 100755 index 9721b0c74..856aa9cde --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -24,7 +24,7 @@ - :/images/antimicro.png:/images/antimicro.png + :/images/16x16/com.github.juliagoda.antimicro.png:/images/16x16/com.github.juliagoda.antimicro.png JoyButtonWidget[isflashing="true"], @@ -192,14 +192,13 @@ QPushButton#namesPushButton[isDisplayingNames="true"] { 0 0 650 - 22 + 29 &App - @@ -336,11 +335,6 @@ QPushButton#namesPushButton[isDisplayingNames="true"] { &Calibration - - - Import profile - - diff --git a/src/messagehandler.cpp b/src/messagehandler.cpp old mode 100644 new mode 100755 index 99aeacb36..88c7b4163 --- a/src/messagehandler.cpp +++ b/src/messagehandler.cpp @@ -27,10 +27,10 @@ namespace MessageHandler case QtFatalMsg: fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); abort(); + default: + break; } #endif } } - - diff --git a/src/messagehandler.h b/src/messagehandler.h old mode 100644 new mode 100755 diff --git a/src/mousedialog/mouseaxissettingsdialog.cpp b/src/mousedialog/mouseaxissettingsdialog.cpp old mode 100644 new mode 100755 index b1c61e073..22cfd8d63 --- a/src/mousedialog/mouseaxissettingsdialog.cpp +++ b/src/mousedialog/mouseaxissettingsdialog.cpp @@ -28,7 +28,6 @@ #include #include #include -#include MouseAxisSettingsDialog::MouseAxisSettingsDialog(JoyAxis *axis, QWidget *parent) : MouseSettingsDialog(parent), @@ -340,7 +339,8 @@ void MouseAxisSettingsDialog::calculateExtraAccelerationMultiplier() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (qFuzzyCompare(axis->getPAxisButton()->getExtraAccelerationMultiplier(), axis->getNAxisButton()->getExtraAccelerationMultiplier())) + if (qFuzzyCompare(axis->getPAxisButton()->getExtraAccelerationMultiplier(), + axis->getNAxisButton()->getExtraAccelerationMultiplier())) { double temp = axis->getPAxisButton()->getExtraAccelerationMultiplier(); ui->extraAccelDoubleSpinBox->setValue(temp); @@ -349,9 +349,11 @@ void MouseAxisSettingsDialog::calculateExtraAccelerationMultiplier() void MouseAxisSettingsDialog::calculateStartAccelerationMultiplier() { + qInstallMessageHandler(MessageHandler::myMessageOutput); - if (qFuzzyCompare(axis->getPAxisButton()->getStartAccelMultiplier(), axis->getNAxisButton()->getStartAccelMultiplier())) + if (qFuzzyCompare(axis->getPAxisButton()->getStartAccelMultiplier(), + axis->getNAxisButton()->getStartAccelMultiplier())) { double temp = axis->getPAxisButton()->getStartAccelMultiplier(); ui->minMultiDoubleSpinBox->setValue(temp); @@ -362,7 +364,8 @@ void MouseAxisSettingsDialog::calculateMinAccelerationThreshold() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (qFuzzyCompare(axis->getPAxisButton()->getMinAccelThreshold(), axis->getNAxisButton()->getMinAccelThreshold())) + if (qFuzzyCompare(axis->getPAxisButton()->getMinAccelThreshold(), + axis->getNAxisButton()->getMinAccelThreshold())) { double temp = axis->getPAxisButton()->getMinAccelThreshold(); ui->minThresholdDoubleSpinBox->setValue(temp); @@ -373,7 +376,8 @@ void MouseAxisSettingsDialog::calculateMaxAccelerationThreshold() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (qFuzzyCompare(axis->getPAxisButton()->getMaxAccelThreshold(), axis->getNAxisButton()->getMaxAccelThreshold())) + if (qFuzzyCompare(axis->getPAxisButton()->getMaxAccelThreshold(), + axis->getNAxisButton()->getMaxAccelThreshold())) { double temp = axis->getPAxisButton()->getMaxAccelThreshold(); ui->maxThresholdDoubleSpinBox->setValue(temp); @@ -384,7 +388,8 @@ void MouseAxisSettingsDialog::calculateAccelExtraDuration() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (qFuzzyCompare(axis->getPAxisButton()->getAccelExtraDuration(), axis->getNAxisButton()->getAccelExtraDuration())) + if (qFuzzyCompare(axis->getPAxisButton()->getAccelExtraDuration(), + axis->getNAxisButton()->getAccelExtraDuration())) { double temp = axis->getPAxisButton()->getAccelExtraDuration(); ui->accelExtraDurationDoubleSpinBox->setValue(temp); diff --git a/src/mousedialog/mouseaxissettingsdialog.h b/src/mousedialog/mouseaxissettingsdialog.h old mode 100644 new mode 100755 diff --git a/src/mousedialog/mousebuttonsettingsdialog.cpp b/src/mousedialog/mousebuttonsettingsdialog.cpp old mode 100644 new mode 100755 index 801095a91..95207c29c --- a/src/mousedialog/mousebuttonsettingsdialog.cpp +++ b/src/mousedialog/mousebuttonsettingsdialog.cpp @@ -30,7 +30,6 @@ #include #include - MouseButtonSettingsDialog::MouseButtonSettingsDialog(JoyButton *button, QWidget *parent) : MouseSettingsDialog(parent), helper(button) @@ -114,11 +113,15 @@ MouseButtonSettingsDialog::MouseButtonSettingsDialog(JoyButton *button, QWidget connect(ui->sensitivityDoubleSpinBox, static_cast(&QDoubleSpinBox::valueChanged), this, &MouseButtonSettingsDialog::updateSensitivity); - connect(ui->wheelHoriSpeedSpinBox, static_cast(&QSpinBox::valueChanged), button, &JoyButton::setWheelSpeedX); - connect(ui->wheelVertSpeedSpinBox, static_cast(&QSpinBox::valueChanged), button, &JoyButton::setWheelSpeedY); + QChar x = 'X'; + QChar y = 'Y'; - connect(ui->easingDoubleSpinBox, static_cast(&QDoubleSpinBox::valueChanged), button, &JoyButton::setEasingDuration); + connect(ui->wheelHoriSpeedSpinBox, static_cast(&QSpinBox::valueChanged), button, [button, x](int value) + { button->setWheelSpeed(value, x); }); + connect(ui->wheelVertSpeedSpinBox, static_cast(&QSpinBox::valueChanged), button, [button, y](int value) + { button->setWheelSpeed(value, y); }); + connect(ui->easingDoubleSpinBox, static_cast(&QDoubleSpinBox::valueChanged), button, &JoyButton::setEasingDuration); connect(ui->extraAccelerationGroupBox, &QGroupBox::clicked, &helper, &MouseButtonSettingsDialogHelper::updateExtraAccelerationStatus); connect(ui->extraAccelDoubleSpinBox, static_cast(&QDoubleSpinBox::valueChanged), &helper, &MouseButtonSettingsDialogHelper::updateExtraAccelerationMultiplier); connect(ui->minMultiDoubleSpinBox, static_cast(&QDoubleSpinBox::valueChanged), &helper, &MouseButtonSettingsDialogHelper::updateStartMultiPercentage); @@ -322,4 +325,3 @@ MouseButtonSettingsDialogHelper& MouseButtonSettingsDialog::getHelperLocal() { return helper; } - diff --git a/src/mousedialog/mousebuttonsettingsdialog.h b/src/mousedialog/mousebuttonsettingsdialog.h old mode 100644 new mode 100755 diff --git a/src/mousedialog/mousecontrolsticksettingsdialog.cpp b/src/mousedialog/mousecontrolsticksettingsdialog.cpp old mode 100644 new mode 100755 diff --git a/src/mousedialog/mousecontrolsticksettingsdialog.h b/src/mousedialog/mousecontrolsticksettingsdialog.h old mode 100644 new mode 100755 diff --git a/src/mousedialog/mousedpadsettingsdialog.cpp b/src/mousedialog/mousedpadsettingsdialog.cpp old mode 100644 new mode 100755 diff --git a/src/mousedialog/mousedpadsettingsdialog.h b/src/mousedialog/mousedpadsettingsdialog.h old mode 100644 new mode 100755 diff --git a/src/mousedialog/springmoderegionpreview.cpp b/src/mousedialog/springmoderegionpreview.cpp old mode 100644 new mode 100755 diff --git a/src/mousedialog/springmoderegionpreview.h b/src/mousedialog/springmoderegionpreview.h old mode 100644 new mode 100755 diff --git a/src/mousedialog/uihelpers/mouseaxissettingsdialoghelper.cpp b/src/mousedialog/uihelpers/mouseaxissettingsdialoghelper.cpp old mode 100644 new mode 100755 diff --git a/src/mousedialog/uihelpers/mouseaxissettingsdialoghelper.h b/src/mousedialog/uihelpers/mouseaxissettingsdialoghelper.h old mode 100644 new mode 100755 diff --git a/src/mousedialog/uihelpers/mousebuttonsettingsdialoghelper.cpp b/src/mousedialog/uihelpers/mousebuttonsettingsdialoghelper.cpp old mode 100644 new mode 100755 diff --git a/src/mousedialog/uihelpers/mousebuttonsettingsdialoghelper.h b/src/mousedialog/uihelpers/mousebuttonsettingsdialoghelper.h old mode 100644 new mode 100755 index ae9ce337b..441d05406 --- a/src/mousedialog/uihelpers/mousebuttonsettingsdialoghelper.h +++ b/src/mousedialog/uihelpers/mousebuttonsettingsdialoghelper.h @@ -40,7 +40,6 @@ public slots: void updateAccelExtraDuration(double value); void updateReleaseSpringRadius(int value); void updateSpringRelativeStatus(bool value); - //void updateExtraAccelerationCurve(int index); private: JoyButton *button; diff --git a/src/mousedialog/uihelpers/mousecontrolsticksettingsdialoghelper.cpp b/src/mousedialog/uihelpers/mousecontrolsticksettingsdialoghelper.cpp old mode 100644 new mode 100755 diff --git a/src/mousedialog/uihelpers/mousecontrolsticksettingsdialoghelper.h b/src/mousedialog/uihelpers/mousecontrolsticksettingsdialoghelper.h old mode 100644 new mode 100755 diff --git a/src/mousedialog/uihelpers/mousedpadsettingsdialoghelper.cpp b/src/mousedialog/uihelpers/mousedpadsettingsdialoghelper.cpp old mode 100644 new mode 100755 diff --git a/src/mousedialog/uihelpers/mousedpadsettingsdialoghelper.h b/src/mousedialog/uihelpers/mousedpadsettingsdialoghelper.h old mode 100644 new mode 100755 diff --git a/src/mousehelper.cpp b/src/mousehelper.cpp old mode 100644 new mode 100755 index 48df7e74d..afd713f74 --- a/src/mousehelper.cpp +++ b/src/mousehelper.cpp @@ -48,10 +48,7 @@ void MouseHelper::initDeskWid() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (deskWid == nullptr) - { - deskWid = new QDesktopWidget; - } + if (deskWid == nullptr) deskWid = new QDesktopWidget; } void MouseHelper::deleteDeskWid() diff --git a/src/mousehelper.h b/src/mousehelper.h old mode 100644 new mode 100755 diff --git a/src/mousesettingsdialog.cpp b/src/mousesettingsdialog.cpp old mode 100644 new mode 100755 index 5df94ed39..1de4159b9 --- a/src/mousesettingsdialog.cpp +++ b/src/mousesettingsdialog.cpp @@ -18,6 +18,7 @@ #include "mousesettingsdialog.h" #include "ui_mousesettingsdialog.h" +#include "globalvariables.h" #include "messagehandler.h" #include @@ -125,7 +126,7 @@ void MouseSettingsDialog::updateHorizontalSpeedConvertLabel(int value) int currentCurveIndex = ui->accelerationComboBox->currentIndex(); JoyButton::JoyMouseCurve tempCurve = getMouseCurveForIndex(currentCurveIndex); - int finalSpeed = JoyButton::calculateFinalMouseSpeed(tempCurve, value); + int finalSpeed = JoyButton::calculateFinalMouseSpeed(tempCurve, value, GlobalVariables::JoyAxis::JOYSPEED); label = label.append(" = ").append(QString::number(finalSpeed)).append(" pps"); ui->horizontalSpeedLabel->setText(label); @@ -139,7 +140,7 @@ void MouseSettingsDialog::updateVerticalSpeedConvertLabel(int value) int currentCurveIndex = ui->accelerationComboBox->currentIndex(); JoyButton::JoyMouseCurve tempCurve = getMouseCurveForIndex(currentCurveIndex); - int finalSpeed = JoyButton::calculateFinalMouseSpeed(tempCurve, value); + int finalSpeed = JoyButton::calculateFinalMouseSpeed(tempCurve, value, GlobalVariables::JoyAxis::JOYSPEED); label = label.append(" = ").append(QString::number(finalSpeed)).append(" pps"); ui->verticalSpeedLabel->setText(label); @@ -165,7 +166,6 @@ void MouseSettingsDialog::changeMouseSpeedBoxStatus(int index) ui->horizontalSpinBox->setEnabled(false); ui->verticalSpinBox->setEnabled(false); ui->changeMouseSpeedsTogetherCheckBox->setEnabled(false); - ui->extraAccelerationGroupBox->setChecked(false); ui->extraAccelerationGroupBox->setEnabled(false); } @@ -174,12 +174,10 @@ void MouseSettingsDialog::changeMouseSpeedBoxStatus(int index) ui->horizontalSpinBox->setEnabled(true); ui->verticalSpinBox->setEnabled(true); ui->changeMouseSpeedsTogetherCheckBox->setEnabled(true); - ui->extraAccelerationGroupBox->setEnabled(true); + if (ui->extraAccelerationGroupBox->isChecked()) - { ui->extraAccelerationGroupBox->setEnabled(true); - } } } @@ -223,37 +221,48 @@ void MouseSettingsDialog::updateAccelerationCurvePresetComboBox(JoyButton::JoyMo { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (mouseCurve == JoyButton::EnhancedPrecisionCurve) - { - ui->accelerationComboBox->setCurrentIndex(1); - } - else if (mouseCurve == JoyButton::LinearCurve) - { - ui->accelerationComboBox->setCurrentIndex(2); - } - else if (mouseCurve == JoyButton::QuadraticCurve) - { - ui->accelerationComboBox->setCurrentIndex(3); - } - else if (mouseCurve == JoyButton::CubicCurve) - { - ui->accelerationComboBox->setCurrentIndex(4); - } - else if (mouseCurve == JoyButton::QuadraticExtremeCurve) + switch(mouseCurve) { - ui->accelerationComboBox->setCurrentIndex(5); - } - else if (mouseCurve == JoyButton::PowerCurve) - { - ui->accelerationComboBox->setCurrentIndex(6); - } - else if (mouseCurve == JoyButton::EasingQuadraticCurve) - { - ui->accelerationComboBox->setCurrentIndex(7); - } - else if (mouseCurve == JoyButton::EasingCubicCurve) - { - ui->accelerationComboBox->setCurrentIndex(8); + case JoyButton::EnhancedPrecisionCurve: + { + ui->accelerationComboBox->setCurrentIndex(1); + break; + } + case JoyButton::LinearCurve: + { + ui->accelerationComboBox->setCurrentIndex(2); + break; + } + case JoyButton::QuadraticCurve: + { + ui->accelerationComboBox->setCurrentIndex(3); + break; + } + case JoyButton::CubicCurve: + { + ui->accelerationComboBox->setCurrentIndex(4); + break; + } + case JoyButton::QuadraticExtremeCurve: + { + ui->accelerationComboBox->setCurrentIndex(5); + break; + } + case JoyButton::PowerCurve: + { + ui->accelerationComboBox->setCurrentIndex(6); + break; + } + case JoyButton::EasingQuadraticCurve: + { + ui->accelerationComboBox->setCurrentIndex(7); + break; + } + case JoyButton::EasingCubicCurve: + { + ui->accelerationComboBox->setCurrentIndex(8); + break; + } } } @@ -263,37 +272,48 @@ JoyButton::JoyMouseCurve MouseSettingsDialog::getMouseCurveForIndex(int index) JoyButton::JoyMouseCurve temp = JoyButton::DEFAULTMOUSECURVE; - if (index == 1) - { - temp = JoyButton::EnhancedPrecisionCurve; - } - else if (index == 2) - { - temp = JoyButton::LinearCurve; - } - else if (index == 3) - { - temp = JoyButton::QuadraticCurve; - } - else if (index == 4) - { - temp = JoyButton::CubicCurve; - } - else if (index == 5) - { - temp = JoyButton::QuadraticExtremeCurve; - } - else if (index == 6) - { - temp = JoyButton::PowerCurve; - } - else if (index == 7) - { - temp = JoyButton::EasingQuadraticCurve; - } - else if (index == 8) + switch(index) { - temp = JoyButton::EasingCubicCurve; + case 1: + { + temp = JoyButton::EnhancedPrecisionCurve; + break; + } + case 2: + { + temp = JoyButton::LinearCurve; + break; + } + case 3: + { + temp = JoyButton::QuadraticCurve; + break; + } + case 4: + { + temp = JoyButton::CubicCurve; + break; + } + case 5: + { + temp = JoyButton::QuadraticExtremeCurve; + break; + } + case 6: + { + temp = JoyButton::PowerCurve; + break; + } + case 7: + { + temp = JoyButton::EasingQuadraticCurve; + break; + } + case 8: + { + temp = JoyButton::EasingCubicCurve; + break; + } } return temp; @@ -311,10 +331,9 @@ void MouseSettingsDialog::changeSensitivityStatusForMouseMode(int index) { int currentCurveIndex = ui->accelerationComboBox->currentIndex(); JoyButton::JoyMouseCurve temp = getMouseCurveForIndex(currentCurveIndex); + if (temp == JoyButton::PowerCurve) - { ui->sensitivityDoubleSpinBox->setEnabled(true); - } } else { @@ -400,21 +419,28 @@ JoyButton::JoyExtraAccelerationCurve MouseSettingsDialog::getExtraAccelCurveForI JoyButton::JoyExtraAccelerationCurve temp = JoyButton::LinearAccelCurve; - if (index == 1) - { - temp = JoyButton::LinearAccelCurve; - } - else if (index == 2) - { - temp = JoyButton::EaseOutSineCurve; - } - else if (index == 3) - { - temp = JoyButton::EaseOutQuadAccelCurve; - } - else if (index == 4) + switch(index) { - temp = JoyButton::EaseOutCubicAccelCurve; + case 1: + { + temp = JoyButton::LinearAccelCurve; + break; + } + case 2: + { + temp = JoyButton::EaseOutSineCurve; + break; + } + case 3: + { + temp = JoyButton::EaseOutQuadAccelCurve; + break; + } + case 4: + { + temp = JoyButton::EaseOutCubicAccelCurve; + break; + } } return temp; @@ -428,23 +454,29 @@ MouseSettingsDialog::updateExtraAccelerationCurvePresetComboBox int temp = 0; - if (curve == JoyButton::LinearAccelCurve) - { - temp = 1; - } - else if (curve == JoyButton::EaseOutSineCurve) - { - temp = 2; - } - else if (curve == JoyButton::EaseOutQuadAccelCurve) - { - temp = 3; - } - else if (curve == JoyButton::EaseOutCubicAccelCurve) + switch(curve) { - temp = 4; + case JoyButton::LinearAccelCurve: + { + temp = 1; + break; + } + case JoyButton::EaseOutSineCurve: + { + temp = 2; + break; + } + case JoyButton::EaseOutQuadAccelCurve: + { + temp = 3; + break; + } + case JoyButton::EaseOutCubicAccelCurve: + { + temp = 4; + break; + } } ui->extraAccelCurveComboBox->setCurrentIndex(temp); } - diff --git a/src/mousesettingsdialog.h b/src/mousesettingsdialog.h old mode 100644 new mode 100755 diff --git a/src/mousesettingsdialog.ui b/src/mousesettingsdialog.ui old mode 100644 new mode 100755 diff --git a/src/qkeydisplaydialog.cpp b/src/qkeydisplaydialog.cpp old mode 100644 new mode 100755 index 17eab1e20..ee53a19b5 --- a/src/qkeydisplaydialog.cpp +++ b/src/qkeydisplaydialog.cpp @@ -36,7 +36,6 @@ #include - #ifdef WITH_X11 #include "x11extras.h" #endif @@ -56,31 +55,6 @@ QKeyDisplayDialog::QKeyDisplayDialog(QWidget *parent) : BaseEventHandler *handler = EventHandlerFactory::getInstance()->handler(); ui->eventHandlerLabel->setText(handler->getName()); - -#ifdef Q_OS_UNIX - #if defined(WITH_UINPUT) - - if (QApplication::platformName() == QStringLiteral("xcb")) - { - - /*ui->formLayout->removeWidget(ui->nativeTitleLabel); - ui->formLayout->removeWidget(ui->nativeKeyLabel); - ui->nativeTitleLabel->setVisible(false); - ui->nativeKeyLabel->setVisible(false); - */ - - } - #endif - - -#else - /*ui->formLayout->removeWidget(ui->eventHandlerTitleLabel); - ui->formLayout->removeWidget(ui->eventHandlerLabel); - ui->eventHandlerTitleLabel->setVisible(false); - ui->eventHandlerLabel->setVisible(false); - */ -#endif - } QKeyDisplayDialog::~QKeyDisplayDialog() @@ -95,13 +69,13 @@ void QKeyDisplayDialog::keyPressEvent(QKeyEvent *event) switch (event->key()) { - case Qt::Key_Escape: - case Qt::Key_Enter: - case Qt::Key_Return: - break; + case Qt::Key_Escape: + case Qt::Key_Enter: + case Qt::Key_Return: + break; - default: - QDialog::keyPressEvent(event); + default: + QDialog::keyPressEvent(event); } } @@ -109,8 +83,8 @@ void QKeyDisplayDialog::keyReleaseEvent(QKeyEvent *event) { qInstallMessageHandler(MessageHandler::myMessageOutput); - int scancode = static_cast(event->nativeScanCode()); - int virtualkey = static_cast(event->nativeVirtualKey()); + int scancode = event->nativeScanCode(); + int virtualkey = event->nativeVirtualKey(); #ifdef Q_OS_WIN int finalvirtual = WinExtras::correctVirtualKey(scancode, virtualkey); @@ -120,13 +94,13 @@ void QKeyDisplayDialog::keyReleaseEvent(QKeyEvent *event) if (handler->getIdentifier() == "vmulti") { QtKeyMapperBase *nativeWinKeyMapper = AntKeyMapper::getInstance()->getNativeKeyMapper(); + if (nativeWinKeyMapper) { int tempQtKey = nativeWinKeyMapper->returnQtKey(finalvirtual); + if (tempQtKey > 0) - { tempvirtual = AntKeyMapper::getInstance()->returnVirtualKey(tempQtKey); - } } } #endif @@ -142,30 +116,25 @@ void QKeyDisplayDialog::keyReleaseEvent(QKeyEvent *event) finalvirtual = X11Extras::getInstance()->getGroup1KeySym(virtualkey); #ifdef WITH_UINPUT - int tempalias = 0; QtKeyMapperBase *nativeKeyMapper = AntKeyMapper::getInstance()->getNativeKeyMapper(); + if (nativeKeyMapper && (nativeKeyMapper->getIdentifier() == "xtest")) { - tempalias = nativeKeyMapper->returnQtKey(virtualkey); + int tempalias = nativeKeyMapper->returnQtKey(virtualkey); finalvirtual = AntKeyMapper::getInstance()->returnVirtualKey(tempalias); } #endif - - } else { finalvirtual = scancode; } - #else if (QApplication::platformName() == QStringLiteral("xcb")) { - - finalvirtual = AntKeyMapper::getInstance()->returnVirtualKey(event->key()); - + finalvirtual = AntKeyMapper::getInstance()->returnVirtualKey(event->key()); } else { diff --git a/src/qkeydisplaydialog.h b/src/qkeydisplaydialog.h old mode 100644 new mode 100755 diff --git a/src/qkeydisplaydialog.ui b/src/qkeydisplaydialog.ui old mode 100644 new mode 100755 index a5216b9ee..4f728240b --- a/src/qkeydisplaydialog.ui +++ b/src/qkeydisplaydialog.ui @@ -38,8 +38,8 @@ - <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="https://doc.qt.io/qt-4.8/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">https://doc.qt.io/qt-4.8/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> - + <html><head/><body><p>Press a key on your keyboard to see how the key is detected by this application. The window will show the system native key value, the original value given by Qt (if applicable), and the custom value used by antimicro.</p><p>The antimicro key value and the Qt key value will usually be the same. antimicro tries to use the key values defined in Qt when possible. Check the page <a href="http://doc.qt.io/qt-5/qt.html#Key-enum"><span style=" text-decoration: underline; color:#0057ae;">http://doc.qt.io/qt-5/qt.html#Key-enum</span></a> for a list of values defined by Qt. If you discover that a key is not natively supported by this program, please report the problem to antimicro's <a href="https://github.com/juliagoda/antimicro"><span style=" text-decoration: underline; color:#0057ae;">GitHub page</span></a> so that the program can be edited to support it directly. As it is, a custom prefix is added to unknown values so they can still be used; the main problem is that the profile will no longer be portable.</p></body></html> + Qt::AutoText diff --git a/src/qtkeymapperbase.cpp b/src/qtkeymapperbase.cpp old mode 100644 new mode 100755 index 5a1ac2fe1..075d7b71e --- a/src/qtkeymapperbase.cpp +++ b/src/qtkeymapperbase.cpp @@ -21,11 +21,11 @@ #include + const int QtKeyMapperBase::customQtKeyPrefix; const int QtKeyMapperBase::customKeyPrefix; const int QtKeyMapperBase::nativeKeyPrefix; - QtKeyMapperBase::QtKeyMapperBase(QObject *parent) : QObject(parent) { @@ -38,14 +38,14 @@ int QtKeyMapperBase::returnQtKey(int key, int scancode) Q_UNUSED(scancode); - return virtualKeyToQtKey.value(key); + return virtKeyToQtKeyHash.value(key); } int QtKeyMapperBase::returnVirtualKey(int qkey) { qInstallMessageHandler(MessageHandler::myMessageOutput); - return qtKeyToVirtualKey.value(qkey); + return qtKeyToVirtKeyHash.value(qkey); } bool QtKeyMapperBase::isModifier(int qkey) @@ -55,21 +55,28 @@ bool QtKeyMapperBase::isModifier(int qkey) bool modifier = false; int qtKeyValue = qkey & 0x0FFFFFFF; - if (qtKeyValue == Qt::Key_Shift) - { - modifier = true; - } - else if (qtKeyValue == Qt::Key_Control) - { - modifier = true; - } - else if (qtKeyValue == Qt::Key_Alt) - { - modifier = true; - } - else if (qtKeyValue == Qt::Key_Meta) + switch(qtKeyValue) { - modifier = true; + case Qt::Key_Shift: + { + modifier = true; + break; + } + case Qt::Key_Control: + { + modifier = true; + break; + } + case Qt::Key_Alt: + { + modifier = true; + break; + } + case Qt::Key_Meta: + { + modifier = true; + break; + } } return modifier; @@ -83,10 +90,8 @@ QtKeyMapperBase::charKeyInformation QtKeyMapperBase::getCharKeyInformation(QChar temp.virtualkey = 0; temp.modifiers = Qt::NoModifier; - if (virtualkeyToCharKeyInformation.contains(value.unicode())) - { - temp = virtualkeyToCharKeyInformation.value(value.unicode()); - } + if (virtkeyToCharKeyInfo.contains(value.unicode())) + temp = virtkeyToCharKeyInfo.value(value.unicode()); return temp; } diff --git a/src/qtkeymapperbase.h b/src/qtkeymapperbase.h old mode 100644 new mode 100755 index 31c4f2163..377ba0f82 --- a/src/qtkeymapperbase.h +++ b/src/qtkeymapperbase.h @@ -82,10 +82,10 @@ class QtKeyMapperBase : public QObject virtual void populateMappingHashes() = 0; virtual void populateCharKeyInformation() = 0; - QHash qtKeyToVirtualKey; // unsigned, unsigned - QHash virtualKeyToQtKey; // unsigned, unsigned + QHash qtKeyToVirtKeyHash; // unsigned, unsigned + QHash virtKeyToQtKeyHash; // unsigned, unsigned // Unicode representation -> VK+Modifier information - QHash virtualkeyToCharKeyInformation; // unsigned, .. + QHash virtkeyToCharKeyInfo; // unsigned, .. QString identifier; }; diff --git a/src/qtuinputkeymapper.cpp b/src/qtuinputkeymapper.cpp old mode 100644 new mode 100755 index 9ded84a4b..e8e6dc695 --- a/src/qtuinputkeymapper.cpp +++ b/src/qtuinputkeymapper.cpp @@ -1,4 +1,4 @@ -/* antimicro Gamepad to KB+M event mapper +/* antimicro Gamepad to KB+M event mapper * Copyright (C) 2015 Travis Nickles * * This program is free software: you can redistribute it and/or modify @@ -28,6 +28,7 @@ #include "messagehandler.h" + QtUInputKeyMapper::QtUInputKeyMapper(QObject *parent) : QtKeyMapperBase(parent) { @@ -39,190 +40,96 @@ QtUInputKeyMapper::QtUInputKeyMapper(QObject *parent) : void QtUInputKeyMapper::populateAlphaHashes() { // Map lowercase alpha keys - qtKeyToVirtualKey[Qt::Key_A] = KEY_A; - qtKeyToVirtualKey[Qt::Key_B] = KEY_B; - qtKeyToVirtualKey[Qt::Key_C] = KEY_C; - qtKeyToVirtualKey[Qt::Key_D] = KEY_D; - qtKeyToVirtualKey[Qt::Key_E] = KEY_E; - qtKeyToVirtualKey[Qt::Key_F] = KEY_F; - qtKeyToVirtualKey[Qt::Key_G] = KEY_G; - qtKeyToVirtualKey[Qt::Key_H] = KEY_H; - qtKeyToVirtualKey[Qt::Key_I] = KEY_I; - qtKeyToVirtualKey[Qt::Key_J] = KEY_J; - qtKeyToVirtualKey[Qt::Key_K] = KEY_K; - qtKeyToVirtualKey[Qt::Key_L] = KEY_L; - qtKeyToVirtualKey[Qt::Key_M] = KEY_M; - qtKeyToVirtualKey[Qt::Key_N] = KEY_N; - qtKeyToVirtualKey[Qt::Key_O] = KEY_O; - qtKeyToVirtualKey[Qt::Key_P] = KEY_P; - qtKeyToVirtualKey[Qt::Key_Q] = KEY_Q; - qtKeyToVirtualKey[Qt::Key_R] = KEY_R; - qtKeyToVirtualKey[Qt::Key_S] = KEY_S; - qtKeyToVirtualKey[Qt::Key_T] = KEY_T; - qtKeyToVirtualKey[Qt::Key_U] = KEY_U; - qtKeyToVirtualKey[Qt::Key_V] = KEY_V; - qtKeyToVirtualKey[Qt::Key_W] = KEY_W; - qtKeyToVirtualKey[Qt::Key_X] = KEY_X; - qtKeyToVirtualKey[Qt::Key_Y] = KEY_Y; - qtKeyToVirtualKey[Qt::Key_Z] = KEY_Z; + qtKeyToVirtKeyHash[Qt::Key_A] = KEY_A; + qtKeyToVirtKeyHash[Qt::Key_B] = KEY_B; + qtKeyToVirtKeyHash[Qt::Key_C] = KEY_C; + qtKeyToVirtKeyHash[Qt::Key_D] = KEY_D; + qtKeyToVirtKeyHash[Qt::Key_E] = KEY_E; + qtKeyToVirtKeyHash[Qt::Key_F] = KEY_F; + qtKeyToVirtKeyHash[Qt::Key_G] = KEY_G; + qtKeyToVirtKeyHash[Qt::Key_H] = KEY_H; + qtKeyToVirtKeyHash[Qt::Key_I] = KEY_I; + qtKeyToVirtKeyHash[Qt::Key_J] = KEY_J; + qtKeyToVirtKeyHash[Qt::Key_K] = KEY_K; + qtKeyToVirtKeyHash[Qt::Key_L] = KEY_L; + qtKeyToVirtKeyHash[Qt::Key_M] = KEY_M; + qtKeyToVirtKeyHash[Qt::Key_N] = KEY_N; + qtKeyToVirtKeyHash[Qt::Key_O] = KEY_O; + qtKeyToVirtKeyHash[Qt::Key_P] = KEY_P; + qtKeyToVirtKeyHash[Qt::Key_Q] = KEY_Q; + qtKeyToVirtKeyHash[Qt::Key_R] = KEY_R; + qtKeyToVirtKeyHash[Qt::Key_S] = KEY_S; + qtKeyToVirtKeyHash[Qt::Key_T] = KEY_T; + qtKeyToVirtKeyHash[Qt::Key_U] = KEY_U; + qtKeyToVirtKeyHash[Qt::Key_V] = KEY_V; + qtKeyToVirtKeyHash[Qt::Key_W] = KEY_W; + qtKeyToVirtKeyHash[Qt::Key_X] = KEY_X; + qtKeyToVirtKeyHash[Qt::Key_Y] = KEY_Y; + qtKeyToVirtKeyHash[Qt::Key_Z] = KEY_Z; } void QtUInputKeyMapper::populateFKeyHashes() { // Map F1 - F10 - for (int i=0; i <= (KEY_F10 - KEY_F1); i++) - { - qtKeyToVirtualKey[Qt::Key_F1 + i] = KEY_F1 + i; - } + for (int i = 0; i <= (KEY_F10 - KEY_F1); i++) + qtKeyToVirtKeyHash[Qt::Key_F1 + i] = KEY_F1 + i; // Map F11 and F12 - for (int i=0; i <= (KEY_F12 - KEY_F11); i++) - { - qtKeyToVirtualKey[Qt::Key_F11 + i] = KEY_F11 + i; - } + for (int i = 0; i <= (KEY_F12 - KEY_F11); i++) + qtKeyToVirtKeyHash[Qt::Key_F11 + i] = KEY_F11 + i; // Map F13 - F24 - for (int i=0; i <= (KEY_F24 - KEY_F13); i++) - { - qtKeyToVirtualKey[Qt::Key_F13 + i] = KEY_F13 + i; - } + for (int i = 0; i <= (KEY_F24 - KEY_F13); i++) + qtKeyToVirtKeyHash[Qt::Key_F13 + i] = KEY_F13 + i; } void QtUInputKeyMapper::populateNumPadHashes() { // Map Numpad 0 - qtKeyToVirtualKey[AntKey_KP_0] = KEY_KP0; + qtKeyToVirtKeyHash[AntKey_KP_0] = KEY_KP0; // Map Numpad 1 - 3 - for (int i=0; i <= (KEY_KP3 - KEY_KP1); i++) - { - qtKeyToVirtualKey[AntKey_KP_1 + i] = KEY_KP1 + i; - } + for (int i = 0; i <= (KEY_KP3 - KEY_KP1); i++) + qtKeyToVirtKeyHash[AntKey_KP_1 + i] = KEY_KP1 + i; // Map Numpad 4 - 6 - for (int i=0; i <= (KEY_KP6 - KEY_KP4); i++) - { - qtKeyToVirtualKey[AntKey_KP_4 + i] = KEY_KP4 + i; - } + for (int i = 0; i <= (KEY_KP6 - KEY_KP4); i++) + qtKeyToVirtKeyHash[AntKey_KP_4 + i] = KEY_KP4 + i; // Map Numpad 7 - 9 - for (int i=0; i <= (KEY_KP9 - KEY_KP7); i++) - { - qtKeyToVirtualKey[AntKey_KP_7 + i] = KEY_KP7 + i; - } + for (int i = 0; i <= (KEY_KP9 - KEY_KP7); i++) + qtKeyToVirtKeyHash[AntKey_KP_7 + i] = KEY_KP7 + i; } void QtUInputKeyMapper::populateSpecialCharHashes() { - qtKeyToVirtualKey[Qt::Key_QuoteLeft] = KEY_GRAVE; - qtKeyToVirtualKey[Qt::Key_Minus] = KEY_MINUS; - qtKeyToVirtualKey[Qt::Key_Equal] = KEY_EQUAL; - qtKeyToVirtualKey[Qt::Key_BracketLeft] = KEY_LEFTBRACE; - qtKeyToVirtualKey[Qt::Key_BracketRight] = KEY_RIGHTBRACE; - qtKeyToVirtualKey[Qt::Key_Semicolon] = KEY_SEMICOLON; - qtKeyToVirtualKey[Qt::Key_Apostrophe] = KEY_APOSTROPHE; - qtKeyToVirtualKey[Qt::Key_Comma] = KEY_COMMA; - qtKeyToVirtualKey[Qt::Key_Period] = KEY_DOT; - qtKeyToVirtualKey[Qt::Key_Slash] = KEY_SLASH; - qtKeyToVirtualKey[Qt::Key_Backslash] = KEY_BACKSLASH; + qtKeyToVirtKeyHash[Qt::Key_QuoteLeft] = KEY_GRAVE; + qtKeyToVirtKeyHash[Qt::Key_Minus] = KEY_MINUS; + qtKeyToVirtKeyHash[Qt::Key_Equal] = KEY_EQUAL; + qtKeyToVirtKeyHash[Qt::Key_BracketLeft] = KEY_LEFTBRACE; + qtKeyToVirtKeyHash[Qt::Key_BracketRight] = KEY_RIGHTBRACE; + qtKeyToVirtKeyHash[Qt::Key_Semicolon] = KEY_SEMICOLON; + qtKeyToVirtKeyHash[Qt::Key_Apostrophe] = KEY_APOSTROPHE; + qtKeyToVirtKeyHash[Qt::Key_Comma] = KEY_COMMA; + qtKeyToVirtKeyHash[Qt::Key_Period] = KEY_DOT; + qtKeyToVirtKeyHash[Qt::Key_Slash] = KEY_SLASH; + qtKeyToVirtKeyHash[Qt::Key_Backslash] = KEY_BACKSLASH; } void QtUInputKeyMapper::populateMappingHashes() { - if (qtKeyToVirtualKey.isEmpty()) + if (qtKeyToVirtKeyHash.isEmpty()) { - // misc keys - qtKeyToVirtualKey[Qt::Key_Escape] = KEY_ESC; - qtKeyToVirtualKey[Qt::Key_Tab] = KEY_TAB; - qtKeyToVirtualKey[Qt::Key_Backspace] = KEY_BACKSPACE; - qtKeyToVirtualKey[Qt::Key_Return] = KEY_ENTER; - qtKeyToVirtualKey[Qt::Key_Insert] = KEY_INSERT; - qtKeyToVirtualKey[Qt::Key_Delete] = KEY_DELETE; - qtKeyToVirtualKey[Qt::Key_Pause] = KEY_PAUSE; - qtKeyToVirtualKey[Qt::Key_Print] = KEY_PRINT; - qtKeyToVirtualKey[Qt::Key_Space] = KEY_SPACE; - - qtKeyToVirtualKey[Qt::Key_SysReq] = KEY_SYSRQ; - qtKeyToVirtualKey[Qt::Key_PowerOff] = KEY_POWER; - qtKeyToVirtualKey[Qt::Key_Stop] = KEY_STOP; - qtKeyToVirtualKey[Qt::Key_Refresh] = KEY_REFRESH; - qtKeyToVirtualKey[Qt::Key_Copy] = KEY_COPY; - qtKeyToVirtualKey[Qt::Key_Paste] = KEY_PASTE; - //qtKeyToVirtualKey[Qt::Key_Search] = KEY_FIND; - qtKeyToVirtualKey[Qt::Key_Cut] = KEY_CUT; - qtKeyToVirtualKey[Qt::Key_Sleep] = KEY_SLEEP; - qtKeyToVirtualKey[Qt::Key_Calculator] = KEY_CALC; - qtKeyToVirtualKey[Qt::Key_Launch0] = KEY_COMPUTER; - qtKeyToVirtualKey[Qt::Key_Launch1] = KEY_CALC; - qtKeyToVirtualKey[Qt::Key_Launch2] = KEY_PROG1; - qtKeyToVirtualKey[Qt::Key_Launch3] = KEY_PROG2; - qtKeyToVirtualKey[Qt::Key_Launch4] = KEY_PROG3; - qtKeyToVirtualKey[Qt::Key_Launch5] = KEY_PROG4; - qtKeyToVirtualKey[Qt::Key_HomePage] = KEY_HOMEPAGE; - qtKeyToVirtualKey[Qt::Key_LaunchMail] = KEY_MAIL; - qtKeyToVirtualKey[Qt::Key_Back] = KEY_BACK; - qtKeyToVirtualKey[Qt::Key_Favorites] = KEY_FAVORITES; - qtKeyToVirtualKey[Qt::Key_Forward] = KEY_FORWARD; - qtKeyToVirtualKey[Qt::Key_Suspend] = KEY_SUSPEND; - qtKeyToVirtualKey[Qt::Key_Close] = KEY_CLOSE; - //qtKeyToVirtualKey[Qt::Key_Search] = KEY_SEARCH; - qtKeyToVirtualKey[Qt::Key_Camera] = KEY_CAMERA; - qtKeyToVirtualKey[Qt::Key_MonBrightnessUp] = KEY_BRIGHTNESSUP; - qtKeyToVirtualKey[Qt::Key_MonBrightnessDown] = KEY_BRIGHTNESSDOWN; - qtKeyToVirtualKey[Qt::Key_Send] = KEY_SEND; - qtKeyToVirtualKey[Qt::Key_Reply] = KEY_REPLY; - qtKeyToVirtualKey[Qt::Key_Forward] = KEY_FORWARDMAIL; - qtKeyToVirtualKey[Qt::Key_Save] = KEY_SAVE; - qtKeyToVirtualKey[Qt::Key_Documents] = KEY_DOCUMENTS; - qtKeyToVirtualKey[Qt::Key_Battery] = KEY_BATTERY; - qtKeyToVirtualKey[Qt::Key_Bluetooth] = KEY_BLUETOOTH; - qtKeyToVirtualKey[Qt::Key_WLAN] = KEY_WLAN; - qtKeyToVirtualKey[Qt::Key_Cancel] = KEY_CANCEL; - qtKeyToVirtualKey[Qt::Key_Shop] = KEY_SHOP; - qtKeyToVirtualKey[Qt::Key_Finance] = KEY_FINANCE; - qtKeyToVirtualKey[Qt::Key_Question] = KEY_QUESTION; - qtKeyToVirtualKey[Qt::Key_BassBoost] = KEY_BASSBOOST; - - // cursor movement - qtKeyToVirtualKey[Qt::Key_Home] = KEY_HOME; - qtKeyToVirtualKey[Qt::Key_End] = KEY_END; - qtKeyToVirtualKey[Qt::Key_Left] = KEY_LEFT; - qtKeyToVirtualKey[Qt::Key_Up] = KEY_UP; - qtKeyToVirtualKey[Qt::Key_Right] = KEY_RIGHT; - qtKeyToVirtualKey[Qt::Key_Down] = KEY_DOWN; - qtKeyToVirtualKey[Qt::Key_PageUp] = KEY_PAGEUP; - qtKeyToVirtualKey[Qt::Key_PageDown] = KEY_PAGEDOWN; - - // modifiers - qtKeyToVirtualKey[Qt::Key_Shift] = KEY_LEFTSHIFT; - qtKeyToVirtualKey[Qt::Key_Control] = KEY_LEFTCTRL; - qtKeyToVirtualKey[Qt::Key_Alt] = KEY_LEFTALT; - - qtKeyToVirtualKey[Qt::Key_CapsLock] = KEY_CAPSLOCK; - qtKeyToVirtualKey[Qt::Key_NumLock] = KEY_NUMLOCK; - qtKeyToVirtualKey[Qt::Key_ScrollLock] = KEY_SCROLLLOCK; - qtKeyToVirtualKey[Qt::Key_Meta] = KEY_LEFTMETA; - qtKeyToVirtualKey[AntKey_Meta_R] = KEY_RIGHTMETA; - qtKeyToVirtualKey[Qt::Key_Menu] = KEY_COMPOSE; - qtKeyToVirtualKey[Qt::Key_Help] = KEY_HELP; - - // media keys - qtKeyToVirtualKey[Qt::Key_VolumeDown] = KEY_VOLUMEDOWN; - qtKeyToVirtualKey[Qt::Key_VolumeMute] = KEY_MUTE; - qtKeyToVirtualKey[Qt::Key_VolumeUp] = KEY_VOLUMEUP; - qtKeyToVirtualKey[Qt::Key_MediaPlay] = KEY_PLAYPAUSE; - qtKeyToVirtualKey[Qt::Key_MediaStop] = KEY_STOPCD; - qtKeyToVirtualKey[Qt::Key_MediaPrevious] = KEY_PREVIOUSSONG; - qtKeyToVirtualKey[Qt::Key_MediaNext] = KEY_NEXTSONG; - qtKeyToVirtualKey[Qt::Key_MediaRecord] = KEY_RECORD; - qtKeyToVirtualKey[Qt::Key_LaunchMedia] = KEY_MEDIA; + mapMiscKeysQtUinput(qtKeyToVirtKeyHash); + mapCursorMovesKeysQtUinput(qtKeyToVirtKeyHash); + mapModifiersKeysQtUinput(qtKeyToVirtKeyHash); + mapMediaKeysQtUinput(qtKeyToVirtKeyHash); // Map 0-9 keys - for (int i=0; i <= (KEY_9 - KEY_1); i++) - { - qtKeyToVirtualKey[Qt::Key_1 + i] = KEY_1 + i; - } - qtKeyToVirtualKey[Qt::Key_0] = KEY_0; + for (int i = 0; i <= (KEY_9 - KEY_1); i++) + qtKeyToVirtKeyHash[Qt::Key_1 + i] = KEY_1 + i; + + qtKeyToVirtKeyHash[Qt::Key_0] = KEY_0; populateSpecialCharHashes(); populateAlphaHashes(); @@ -230,140 +137,65 @@ void QtUInputKeyMapper::populateMappingHashes() populateNumPadHashes(); // Map custom defined keys - qtKeyToVirtualKey[AntKey_Shift_R] = KEY_RIGHTSHIFT; - qtKeyToVirtualKey[AntKey_Control_R] = KEY_RIGHTCTRL; - qtKeyToVirtualKey[AntKey_Alt_R] = KEY_RIGHTALT; - qtKeyToVirtualKey[AntKey_KP_Multiply] = KEY_KPASTERISK; - - // numeric and function keypad keys - qtKeyToVirtualKey[Qt::Key_Enter] = KEY_KPENTER; - qtKeyToVirtualKey[AntKey_KP_Home] = KEY_KP7; - qtKeyToVirtualKey[AntKey_KP_Left] = KEY_KP4; - qtKeyToVirtualKey[AntKey_KP_Up] = KEY_KP8; - qtKeyToVirtualKey[AntKey_KP_Right] = KEY_KP6; - qtKeyToVirtualKey[AntKey_KP_Down] = KEY_KP2; - qtKeyToVirtualKey[AntKey_KP_Prior] = KEY_KP9; - qtKeyToVirtualKey[AntKey_KP_Next] = KEY_KP3; - qtKeyToVirtualKey[AntKey_KP_End] = KEY_KP1; - - qtKeyToVirtualKey[AntKey_KP_Begin] = KEY_KP5; - qtKeyToVirtualKey[AntKey_KP_Insert] = KEY_KP0; - qtKeyToVirtualKey[AntKey_KP_Add] = KEY_KPPLUS; - qtKeyToVirtualKey[AntKey_KP_Subtract] = KEY_KPMINUS; - qtKeyToVirtualKey[AntKey_KP_Decimal] = KEY_KPDOT; - qtKeyToVirtualKey[AntKey_KP_Divide] = KEY_KPSLASH; + qtKeyToVirtKeyHash[AntKey_Shift_R] = KEY_RIGHTSHIFT; + qtKeyToVirtKeyHash[AntKey_Control_R] = KEY_RIGHTCTRL; + qtKeyToVirtKeyHash[AntKey_Alt_R] = KEY_RIGHTALT; + qtKeyToVirtKeyHash[AntKey_KP_Multiply] = KEY_KPASTERISK; + + mapKeypadKeysQtUinput(qtKeyToVirtKeyHash); // International input method support keys // Misc Functions - qtKeyToVirtualKey[Qt::Key_Mode_switch] = KEY_SWITCHVIDEOMODE; - - // Japanese keyboard support - // qtKeyToVirtualKey[Qt::Key_Kanji] = XK_Kanji; - qtKeyToVirtualKey[Qt::Key_Muhenkan] = KEY_MUHENKAN; - qtKeyToVirtualKey[Qt::Key_Henkan] = KEY_HENKAN; - qtKeyToVirtualKey[Qt::Key_Romaji] = KEY_RO; - qtKeyToVirtualKey[Qt::Key_Hiragana] = KEY_HIRAGANA; - qtKeyToVirtualKey[Qt::Key_Katakana] = KEY_KATAKANA; - qtKeyToVirtualKey[Qt::Key_Hiragana_Katakana] = KEY_KATAKANAHIRAGANA; - // qtKeyToVirtualKey[Qt::Key_Zenkaku] = XK_Zenkaku; - // qtKeyToVirtualKey[Qt::Key_Hankaku] = XK_Hankaku; - qtKeyToVirtualKey[Qt::Key_Zenkaku_Hankaku] = KEY_ZENKAKUHANKAKU; - /* qtKeyToVirtualKey[Qt::Key_Touroku] = XK_Touroku; - qtKeyToVirtualKey[Qt::Key_Massyo] = XK_Massyo; - qtKeyToVirtualKey[Qt::Key_Kana_Lock] = XK_Kana_Lock; - qtKeyToVirtualKey[Qt::Key_Kana_Shift] = XK_Kana_Shift; - qtKeyToVirtualKey[Qt::Key_Eisu_Shift] = XK_Eisu_Shift; - qtKeyToVirtualKey[Qt::Key_Eisu_toggle] = XK_Eisu_toggle; - qtKeyToVirtualKey[Qt::Key_Codeinput] = XK_Kanji_Bangou; - qtKeyToX11KeySym[Qt::Key_MultipleCandidate] = XK_Zen_Koho; - qtKeyToX11KeySym[Qt::Key_PreviousCandidate] = XK_Mae_Koho;*/ + qtKeyToVirtKeyHash[Qt::Key_Mode_switch] = KEY_SWITCHVIDEOMODE; -#ifdef XK_KOREAN - qtKeyToVirtualKey[Qt::Key_Hangul] = KEY_HANGEUL; - /* qtKeyToVirtualKey[Qt::Key_Hangul_Start] = XK_Hangul_Start; - qtKeyToVirtualKey[Qt::Key_Hangul_End] = XK_Hangul_End; - qtKeyToVirtualKey[Qt::Key_Hangul_Hanja] = KEY_HANJA; - qtKeyToVirtualKey[Qt::Key_Hangul_Jamo] = XK_Hangul_Jamo; - qtKeyToVirtualKey[Qt::Key_Hangul_Romaja] = XK_Hangul_Romaja; - //qtKeyToX11KeySym[Qt::Key_Codeinput] = XK_Hangul_Codeinput; - qtKeyToVirtualKey[Qt::Key_Hangul_Jeonja] = XK_Hangul_Jeonja; - qtKeyToVirtualKey[Qt::Key_Hangul_Banja] = XK_Hangul_Banja; - qtKeyToVirtualKey[Qt::Key_Hangul_PreHanja] = XK_Hangul_PreHanja; - qtKeyToVirtualKey[Qt::Key_Hangul_PostHanja] = XK_Hangul_PostHanja; - //qtKeyToX11KeySym[Qt::Key_SingleCandidate] = XK_Hangul_SingleCandidate; - //qtKeyToX11KeySym[Qt::Key_MultipleCandidate] = XK_Hangul_MultipleCandidate; - //qtKeyToX11KeySym[Qt::Key_PreviousCandidate] = XK_Hangul_PreviousCandidate; - qtKeyToVirtualKey[Qt::Key_Hangul_Special] = XK_Hangul_Special; - //qtKeyToX11KeySym[Qt::Key_Mode_switch] = XK_Hangul_switch;*/ + mapJapanKeysQtUinput(qtKeyToVirtKeyHash); +#ifdef XK_KOREAN + mapKoreanKeysQtUinput(qtKeyToVirtKeyHash); #endif // XK_KOREAN - - // Populate other hash. Flip key and value so mapping // goes VK -> Qt Key. - QHashIterator iter(qtKeyToVirtualKey); + QHashIterator iter(qtKeyToVirtKeyHash); while (iter.hasNext()) { iter.next(); - virtualKeyToQtKey[iter.value()] = iter.key(); + virtKeyToQtKeyHash[iter.value()] = iter.key(); } - /*int j = 0; - for (int i=KEY_ESC; i < KEY_UNKNOWN; i++) - { - if (!virtualKeyToQtKey.contains(i) && i != 84) - { - qDebug() << "KEY MISSING: " << QString::number(i); - j++; - } - } - - qDebug() << "TOTAL MISSING: " << j; - */ - // Override some entries. - virtualKeyToQtKey[KEY_KP0] = AntKey_KP_0; - virtualKeyToQtKey[KEY_KP1] = AntKey_KP_1; - virtualKeyToQtKey[KEY_KP2] = AntKey_KP_2; - virtualKeyToQtKey[KEY_KP3] = AntKey_KP_3; - virtualKeyToQtKey[KEY_KP4] = AntKey_KP_4; - virtualKeyToQtKey[KEY_KP5] = AntKey_KP_5; - virtualKeyToQtKey[KEY_KP6] = AntKey_KP_6; - virtualKeyToQtKey[KEY_KP7] = AntKey_KP_7; - virtualKeyToQtKey[KEY_KP8] = AntKey_KP_8; - virtualKeyToQtKey[KEY_KP9] = AntKey_KP_9; - virtualKeyToQtKey[KEY_CALC] = Qt::Key_Launch1; + virtKeyToQtKeyHash[KEY_KP0] = AntKey_KP_0; + virtKeyToQtKeyHash[KEY_KP1] = AntKey_KP_1; + virtKeyToQtKeyHash[KEY_KP2] = AntKey_KP_2; + virtKeyToQtKeyHash[KEY_KP3] = AntKey_KP_3; + virtKeyToQtKeyHash[KEY_KP4] = AntKey_KP_4; + virtKeyToQtKeyHash[KEY_KP5] = AntKey_KP_5; + virtKeyToQtKeyHash[KEY_KP6] = AntKey_KP_6; + virtKeyToQtKeyHash[KEY_KP7] = AntKey_KP_7; + virtKeyToQtKeyHash[KEY_KP8] = AntKey_KP_8; + virtKeyToQtKeyHash[KEY_KP9] = AntKey_KP_9; + virtKeyToQtKeyHash[KEY_CALC] = Qt::Key_Launch1; } } void QtUInputKeyMapper::populateCharKeyInformation() { - virtualkeyToCharKeyInformation.clear(); + virtkeyToCharKeyInfo.clear(); int unicodeTempValue = 0; int listIndex = 0; - - charKeyInformation temp; - temp.modifiers = Qt::NoModifier; - temp.virtualkey = 0; + charKeyInformation charKeyInfo; + charKeyInfo.modifiers = Qt::NoModifier; + charKeyInfo.virtualkey = 0; // Map 0-9 keys - for (int i=QChar('1').unicode(); i <= QChar('9').unicode(); i++) - { - temp.virtualkey = KEY_1 + i; - virtualkeyToCharKeyInformation.insert(i, temp); - } - - temp.virtualkey = KEY_0; - virtualkeyToCharKeyInformation.insert(QChar('0').unicode(), temp); - - temp.virtualkey = KEY_MINUS; - virtualkeyToCharKeyInformation.insert(QChar('-').unicode(), temp); + for (int i = QChar('1').unicode(); i <= QChar('9').unicode(); i++) + addVirtualKeyToHash(KEY_1 + i, i, charKeyInfo); - temp.virtualkey = KEY_EQUAL; - virtualkeyToCharKeyInformation.insert(QChar('=').unicode(), temp); + addVirtualKeyToHash(KEY_0, QChar('0'), charKeyInfo); + addVirtualKeyToHash(KEY_MINUS, QChar('-'), charKeyInfo); + addVirtualKeyToHash(KEY_EQUAL, QChar('='), charKeyInfo); QList tempKeys; tempKeys.append(KEY_A); @@ -395,27 +227,27 @@ void QtUInputKeyMapper::populateCharKeyInformation() unicodeTempValue = QChar('a').unicode(); QListIterator tempIter(tempKeys); + while (tempIter.hasNext()) { - temp.virtualkey = tempIter.next(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); + addVirtualKeyToHash(tempIter.next(), unicodeTempValue, charKeyInfo); unicodeTempValue++; } tempIter.toFront(); - temp.modifiers = Qt::ShiftModifier; + charKeyInfo.modifiers = Qt::ShiftModifier; unicodeTempValue = QChar('A').unicode(); + while (tempIter.hasNext()) { - temp.virtualkey = tempIter.next(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); + addVirtualKeyToHash(tempIter.next(), unicodeTempValue, charKeyInfo); unicodeTempValue++; } tempKeys.clear(); - temp.modifiers = Qt::ShiftModifier; + charKeyInfo.modifiers = Qt::ShiftModifier; tempKeys.append(QChar('!').unicode()); tempKeys.append(QChar('@').unicode()); tempKeys.append(QChar('#').unicode()); @@ -431,85 +263,192 @@ void QtUInputKeyMapper::populateCharKeyInformation() tempIter = QListIterator(tempKeys); listIndex = 0; + while (tempIter.hasNext()) { - unicodeTempValue = tempIter.next(); - temp.virtualkey = KEY_1 + listIndex; - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); + addVirtualKeyToHash(KEY_1 + listIndex, tempIter.next(), charKeyInfo); listIndex++; } tempKeys.clear(); - temp.modifiers = Qt::NoModifier; - temp.virtualkey = KEY_SPACE; - unicodeTempValue = QChar(' ').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); - - temp.virtualkey = KEY_LEFTBRACE; - unicodeTempValue = QChar('[').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); - - temp.virtualkey = KEY_RIGHTBRACE; - unicodeTempValue = QChar(']').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); - - temp.virtualkey = KEY_BACKSLASH; - unicodeTempValue = QChar('\\').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); - - temp.virtualkey = KEY_SEMICOLON; - unicodeTempValue = QChar(';').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); - - temp.virtualkey = KEY_APOSTROPHE; - unicodeTempValue = QChar('\'').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); - - temp.virtualkey = KEY_COMMA; - unicodeTempValue = QChar(',').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); - - temp.virtualkey = KEY_DOT; - unicodeTempValue = QChar('.').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); - - temp.virtualkey = KEY_SLASH; - unicodeTempValue = QChar('/').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); - - - temp.modifiers = Qt::ShiftModifier; + charKeyInfo.modifiers = Qt::NoModifier; + + addVirtualKeyToHash(KEY_SPACE, QChar(' '), charKeyInfo); + addVirtualKeyToHash(KEY_LEFTBRACE, QChar('['), charKeyInfo); + addVirtualKeyToHash(KEY_RIGHTBRACE, QChar(']'), charKeyInfo); + addVirtualKeyToHash(KEY_BACKSLASH, QChar('\\'), charKeyInfo); + addVirtualKeyToHash(KEY_SEMICOLON, QChar(';'), charKeyInfo); + addVirtualKeyToHash(KEY_APOSTROPHE, QChar('\''), charKeyInfo); + addVirtualKeyToHash(KEY_COMMA, QChar(','), charKeyInfo); + addVirtualKeyToHash(KEY_DOT, QChar('.'), charKeyInfo); + addVirtualKeyToHash(KEY_SLASH, QChar('/'), charKeyInfo); + addVirtualKeyToHash(KEY_LEFTBRACE, QChar('{'), charKeyInfo); + addVirtualKeyToHash(KEY_RIGHTBRACE, QChar('}'), charKeyInfo); + addVirtualKeyToHash(KEY_BACKSLASH, QChar('|'), charKeyInfo); + addVirtualKeyToHash(KEY_SEMICOLON, QChar(':'), charKeyInfo); + addVirtualKeyToHash(KEY_APOSTROPHE, QChar('"'), charKeyInfo); + addVirtualKeyToHash(KEY_COMMA, QChar('<'), charKeyInfo); + addVirtualKeyToHash(KEY_DOT, QChar('>'), charKeyInfo); + addVirtualKeyToHash(KEY_SLASH, QChar('?'), charKeyInfo); +} - temp.virtualkey = KEY_LEFTBRACE; - unicodeTempValue = QChar('{').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); +void QtUInputKeyMapper::addVirtualKeyToHash(int key, QChar character, charKeyInformation& charKeyInfo) +{ + charKeyInfo.virtualkey = key; + virtkeyToCharKeyInfo.insert(character.unicode(), charKeyInfo); +} - temp.virtualkey = KEY_RIGHTBRACE; - unicodeTempValue = QChar('}').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); +void QtUInputKeyMapper::mapMiscKeysQtUinput(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_Escape] = KEY_ESC; + qtKeyToVirtKeyHash[Qt::Key_Tab] = KEY_TAB; + qtKeyToVirtKeyHash[Qt::Key_Backspace] = KEY_BACKSPACE; + qtKeyToVirtKeyHash[Qt::Key_Return] = KEY_ENTER; + qtKeyToVirtKeyHash[Qt::Key_Insert] = KEY_INSERT; + qtKeyToVirtKeyHash[Qt::Key_Delete] = KEY_DELETE; + qtKeyToVirtKeyHash[Qt::Key_Pause] = KEY_PAUSE; + qtKeyToVirtKeyHash[Qt::Key_Print] = KEY_PRINT; + qtKeyToVirtKeyHash[Qt::Key_Space] = KEY_SPACE; + qtKeyToVirtKeyHash[Qt::Key_SysReq] = KEY_SYSRQ; + qtKeyToVirtKeyHash[Qt::Key_PowerOff] = KEY_POWER; + qtKeyToVirtKeyHash[Qt::Key_Stop] = KEY_STOP; + qtKeyToVirtKeyHash[Qt::Key_Refresh] = KEY_REFRESH; + qtKeyToVirtKeyHash[Qt::Key_Copy] = KEY_COPY; + qtKeyToVirtKeyHash[Qt::Key_Paste] = KEY_PASTE; + //qtKeyToVirtKeyHash[Qt::Key_Search] = KEY_FIND; + qtKeyToVirtKeyHash[Qt::Key_Cut] = KEY_CUT; + qtKeyToVirtKeyHash[Qt::Key_Sleep] = KEY_SLEEP; + qtKeyToVirtKeyHash[Qt::Key_Calculator] = KEY_CALC; + qtKeyToVirtKeyHash[Qt::Key_Launch0] = KEY_COMPUTER; + qtKeyToVirtKeyHash[Qt::Key_Launch1] = KEY_CALC; + qtKeyToVirtKeyHash[Qt::Key_Launch2] = KEY_PROG1; + qtKeyToVirtKeyHash[Qt::Key_Launch3] = KEY_PROG2; + qtKeyToVirtKeyHash[Qt::Key_Launch4] = KEY_PROG3; + qtKeyToVirtKeyHash[Qt::Key_Launch5] = KEY_PROG4; + qtKeyToVirtKeyHash[Qt::Key_HomePage] = KEY_HOMEPAGE; + qtKeyToVirtKeyHash[Qt::Key_LaunchMail] = KEY_MAIL; + qtKeyToVirtKeyHash[Qt::Key_Back] = KEY_BACK; + qtKeyToVirtKeyHash[Qt::Key_Favorites] = KEY_FAVORITES; + qtKeyToVirtKeyHash[Qt::Key_Forward] = KEY_FORWARD; + qtKeyToVirtKeyHash[Qt::Key_Suspend] = KEY_SUSPEND; + qtKeyToVirtKeyHash[Qt::Key_Close] = KEY_CLOSE; + //qtKeyToVirtKeyHash[Qt::Key_Search] = KEY_SEARCH; + qtKeyToVirtKeyHash[Qt::Key_Camera] = KEY_CAMERA; + qtKeyToVirtKeyHash[Qt::Key_MonBrightnessUp] = KEY_BRIGHTNESSUP; + qtKeyToVirtKeyHash[Qt::Key_MonBrightnessDown] = KEY_BRIGHTNESSDOWN; + qtKeyToVirtKeyHash[Qt::Key_Send] = KEY_SEND; + qtKeyToVirtKeyHash[Qt::Key_Reply] = KEY_REPLY; + qtKeyToVirtKeyHash[Qt::Key_Forward] = KEY_FORWARDMAIL; + qtKeyToVirtKeyHash[Qt::Key_Save] = KEY_SAVE; + qtKeyToVirtKeyHash[Qt::Key_Documents] = KEY_DOCUMENTS; + qtKeyToVirtKeyHash[Qt::Key_Battery] = KEY_BATTERY; + qtKeyToVirtKeyHash[Qt::Key_Bluetooth] = KEY_BLUETOOTH; + qtKeyToVirtKeyHash[Qt::Key_WLAN] = KEY_WLAN; + qtKeyToVirtKeyHash[Qt::Key_Cancel] = KEY_CANCEL; + qtKeyToVirtKeyHash[Qt::Key_Shop] = KEY_SHOP; + qtKeyToVirtKeyHash[Qt::Key_Finance] = KEY_FINANCE; + qtKeyToVirtKeyHash[Qt::Key_Question] = KEY_QUESTION; + qtKeyToVirtKeyHash[Qt::Key_BassBoost] = KEY_BASSBOOST; +} - temp.virtualkey = KEY_BACKSLASH; - unicodeTempValue = QChar('|').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); +void QtUInputKeyMapper::mapCursorMovesKeysQtUinput(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_Home] = KEY_HOME; + qtKeyToVirtKeyHash[Qt::Key_End] = KEY_END; + qtKeyToVirtKeyHash[Qt::Key_Left] = KEY_LEFT; + qtKeyToVirtKeyHash[Qt::Key_Up] = KEY_UP; + qtKeyToVirtKeyHash[Qt::Key_Right] = KEY_RIGHT; + qtKeyToVirtKeyHash[Qt::Key_Down] = KEY_DOWN; + qtKeyToVirtKeyHash[Qt::Key_PageUp] = KEY_PAGEUP; + qtKeyToVirtKeyHash[Qt::Key_PageDown] = KEY_PAGEDOWN; +} - temp.virtualkey = KEY_SEMICOLON; - unicodeTempValue = QChar(':').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); +void QtUInputKeyMapper::mapModifiersKeysQtUinput(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_Shift] = KEY_LEFTSHIFT; + qtKeyToVirtKeyHash[Qt::Key_Control] = KEY_LEFTCTRL; + qtKeyToVirtKeyHash[Qt::Key_Alt] = KEY_LEFTALT; + qtKeyToVirtKeyHash[Qt::Key_CapsLock] = KEY_CAPSLOCK; + qtKeyToVirtKeyHash[Qt::Key_NumLock] = KEY_NUMLOCK; + qtKeyToVirtKeyHash[Qt::Key_ScrollLock] = KEY_SCROLLLOCK; + qtKeyToVirtKeyHash[Qt::Key_Meta] = KEY_LEFTMETA; + qtKeyToVirtKeyHash[AntKey_Meta_R] = KEY_RIGHTMETA; + qtKeyToVirtKeyHash[Qt::Key_Menu] = KEY_COMPOSE; + qtKeyToVirtKeyHash[Qt::Key_Help] = KEY_HELP; +} - temp.virtualkey = KEY_APOSTROPHE; - unicodeTempValue = QChar('"').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); +void QtUInputKeyMapper::mapKeypadKeysQtUinput(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_Enter] = KEY_KPENTER; + qtKeyToVirtKeyHash[AntKey_KP_Home] = KEY_KP7; + qtKeyToVirtKeyHash[AntKey_KP_Left] = KEY_KP4; + qtKeyToVirtKeyHash[AntKey_KP_Up] = KEY_KP8; + qtKeyToVirtKeyHash[AntKey_KP_Right] = KEY_KP6; + qtKeyToVirtKeyHash[AntKey_KP_Down] = KEY_KP2; + qtKeyToVirtKeyHash[AntKey_KP_Prior] = KEY_KP9; + qtKeyToVirtKeyHash[AntKey_KP_Next] = KEY_KP3; + qtKeyToVirtKeyHash[AntKey_KP_End] = KEY_KP1; + qtKeyToVirtKeyHash[AntKey_KP_Begin] = KEY_KP5; + qtKeyToVirtKeyHash[AntKey_KP_Insert] = KEY_KP0; + qtKeyToVirtKeyHash[AntKey_KP_Add] = KEY_KPPLUS; + qtKeyToVirtKeyHash[AntKey_KP_Subtract] = KEY_KPMINUS; + qtKeyToVirtKeyHash[AntKey_KP_Decimal] = KEY_KPDOT; + qtKeyToVirtKeyHash[AntKey_KP_Divide] = KEY_KPSLASH; +} - temp.virtualkey = KEY_COMMA; - unicodeTempValue = QChar('<').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); +void QtUInputKeyMapper::mapJapanKeysQtUinput(QHash& qtKeyToVirtKeyHash) +{ + // qtKeyToVirtKeyHash[Qt::Key_Kanji] = XK_Kanji; + qtKeyToVirtKeyHash[Qt::Key_Muhenkan] = KEY_MUHENKAN; + qtKeyToVirtKeyHash[Qt::Key_Henkan] = KEY_HENKAN; + qtKeyToVirtKeyHash[Qt::Key_Romaji] = KEY_RO; + qtKeyToVirtKeyHash[Qt::Key_Hiragana] = KEY_HIRAGANA; + qtKeyToVirtKeyHash[Qt::Key_Katakana] = KEY_KATAKANA; + qtKeyToVirtKeyHash[Qt::Key_Hiragana_Katakana] = KEY_KATAKANAHIRAGANA; + // qtKeyToVirtKeyHash[Qt::Key_Zenkaku] = XK_Zenkaku; + // qtKeyToVirtKeyHash[Qt::Key_Hankaku] = XK_Hankaku; + qtKeyToVirtKeyHash[Qt::Key_Zenkaku_Hankaku] = KEY_ZENKAKUHANKAKU; + /* qtKeyToVirtKeyHash[Qt::Key_Touroku] = XK_Touroku; + qtKeyToVirtKeyHash[Qt::Key_Massyo] = XK_Massyo; + qtKeyToVirtKeyHash[Qt::Key_Kana_Lock] = XK_Kana_Lock; + qtKeyToVirtKeyHash[Qt::Key_Kana_Shift] = XK_Kana_Shift; + qtKeyToVirtKeyHash[Qt::Key_Eisu_Shift] = XK_Eisu_Shift; + qtKeyToVirtKeyHash[Qt::Key_Eisu_toggle] = XK_Eisu_toggle; + qtKeyToVirtKeyHash[Qt::Key_Codeinput] = XK_Kanji_Bangou; + qtKeyToX11KeySym[Qt::Key_MultipleCandidate] = XK_Zen_Koho; + qtKeyToX11KeySym[Qt::Key_PreviousCandidate] = XK_Mae_Koho;*/ +} - temp.virtualkey = KEY_DOT; - unicodeTempValue = QChar('>').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); +void QtUInputKeyMapper::mapKoreanKeysQtUinput(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_Hangul] = KEY_HANGEUL; + /* qtKeyToVirtKeyHash[Qt::Key_Hangul_Start] = XK_Hangul_Start; + qtKeyToVirtKeyHash[Qt::Key_Hangul_End] = XK_Hangul_End; + qtKeyToVirtKeyHash[Qt::Key_Hangul_Hanja] = KEY_HANJA; + qtKeyToVirtKeyHash[Qt::Key_Hangul_Jamo] = XK_Hangul_Jamo; + qtKeyToVirtKeyHash[Qt::Key_Hangul_Romaja] = XK_Hangul_Romaja; + //qtKeyToX11KeySym[Qt::Key_Codeinput] = XK_Hangul_Codeinput; + qtKeyToVirtKeyHash[Qt::Key_Hangul_Jeonja] = XK_Hangul_Jeonja; + qtKeyToVirtKeyHash[Qt::Key_Hangul_Banja] = XK_Hangul_Banja; + qtKeyToVirtKeyHash[Qt::Key_Hangul_PreHanja] = XK_Hangul_PreHanja; + qtKeyToVirtKeyHash[Qt::Key_Hangul_PostHanja] = XK_Hangul_PostHanja; + //qtKeyToX11KeySym[Qt::Key_SingleCandidate] = XK_Hangul_SingleCandidate; + //qtKeyToX11KeySym[Qt::Key_MultipleCandidate] = XK_Hangul_MultipleCandidate; + //qtKeyToX11KeySym[Qt::Key_PreviousCandidate] = XK_Hangul_PreviousCandidate; + qtKeyToVirtKeyHash[Qt::Key_Hangul_Special] = XK_Hangul_Special; + //qtKeyToX11KeySym[Qt::Key_Mode_switch] = XK_Hangul_switch;*/ +} - temp.virtualkey = KEY_SLASH; - unicodeTempValue = QChar('?').unicode(); - virtualkeyToCharKeyInformation.insert(unicodeTempValue, temp); +void QtUInputKeyMapper::mapMediaKeysQtUinput(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_VolumeDown] = KEY_VOLUMEDOWN; + qtKeyToVirtKeyHash[Qt::Key_VolumeMute] = KEY_MUTE; + qtKeyToVirtKeyHash[Qt::Key_VolumeUp] = KEY_VOLUMEUP; + qtKeyToVirtKeyHash[Qt::Key_MediaPlay] = KEY_PLAYPAUSE; + qtKeyToVirtKeyHash[Qt::Key_MediaStop] = KEY_STOPCD; + qtKeyToVirtKeyHash[Qt::Key_MediaPrevious] = KEY_PREVIOUSSONG; + qtKeyToVirtKeyHash[Qt::Key_MediaNext] = KEY_NEXTSONG; + qtKeyToVirtKeyHash[Qt::Key_MediaRecord] = KEY_RECORD; + qtKeyToVirtKeyHash[Qt::Key_LaunchMedia] = KEY_MEDIA; } diff --git a/src/qtuinputkeymapper.h b/src/qtuinputkeymapper.h old mode 100644 new mode 100755 index ad8f408ec..265b05aac --- a/src/qtuinputkeymapper.h +++ b/src/qtuinputkeymapper.h @@ -26,18 +26,29 @@ class QtUInputKeyMapper : public QtKeyMapperBase { Q_OBJECT + public: explicit QtUInputKeyMapper(QObject *parent = nullptr); protected: - void populateMappingHashes(); - void populateCharKeyInformation(); + void populateMappingHashes() override; + void populateCharKeyInformation() override; void populateAlphaHashes(); void populateFKeyHashes(); void populateNumPadHashes(); void populateSpecialCharHashes(); +private: + void addVirtualKeyToHash(int key, QChar character, charKeyInformation& charKeyInfo); + void mapMiscKeysQtUinput(QHash& qtKeyToVirtKeyHash); + void mapCursorMovesKeysQtUinput(QHash& qtKeyToVirtKeyHash); + void mapModifiersKeysQtUinput(QHash& qtKeyToVirtKeyHash); + void mapKeypadKeysQtUinput(QHash& qtKeyToVirtKeyHash); + void mapJapanKeysQtUinput(QHash& qtKeyToVirtKeyHash); + void mapKoreanKeysQtUinput(QHash& qtKeyToVirtKeyHash); + void mapMediaKeysQtUinput(QHash& qtKeyToVirtKeyHash); + }; #endif // QTUINPUTKEYMAPPER_H diff --git a/src/qtvmultikeymapper.cpp b/src/qtvmultikeymapper.cpp old mode 100644 new mode 100755 diff --git a/src/qtvmultikeymapper.h b/src/qtvmultikeymapper.h old mode 100644 new mode 100755 index 29bf0054f..50cfe5991 --- a/src/qtvmultikeymapper.h +++ b/src/qtvmultikeymapper.h @@ -33,8 +33,8 @@ class QtVMultiKeyMapper : public QtKeyMapperBase static const int consumerUsagePagePrefix = 0x12000; // unsigned protected: - void populateMappingHashes(); - void populateCharKeyInformation(); + void populateMappingHashes() override; + void populateCharKeyInformation() override; }; diff --git a/src/qtwinkeymapper.cpp b/src/qtwinkeymapper.cpp old mode 100644 new mode 100755 index 3ffabcdc4..f8c5576e1 --- a/src/qtwinkeymapper.cpp +++ b/src/qtwinkeymapper.cpp @@ -406,5 +406,5 @@ void QtWinKeyMapper::populateCharKeyInformation() } - //qDebug() << "TOTAL: " << total; + qDebug() << "TOTAL: " << total; } diff --git a/src/qtwinkeymapper.h b/src/qtwinkeymapper.h old mode 100644 new mode 100755 index a7baf1612..75a516b21 --- a/src/qtwinkeymapper.h +++ b/src/qtwinkeymapper.h @@ -31,11 +31,11 @@ class QtWinKeyMapper : public QtKeyMapperBase public: explicit QtWinKeyMapper(QObject *parent = nullptr); - virtual int returnQtKey(int key, int scancode=0); // unsigned (unsigned, unsigned) + virtual int returnQtKey(int key, int scancode=0) override; // unsigned (unsigned, unsigned) protected: - void populateMappingHashes(); - void populateCharKeyInformation(); + void populateMappingHashes() override; + void populateCharKeyInformation() override; }; diff --git a/src/qtx11keymapper.cpp b/src/qtx11keymapper.cpp old mode 100644 new mode 100755 index 2ffdd139f..a32fb47bf --- a/src/qtx11keymapper.cpp +++ b/src/qtx11keymapper.cpp @@ -57,259 +57,78 @@ void QtX11KeyMapper::populateMappingHashes() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (qtKeyToVirtualKey.isEmpty()) + if (qtKeyToVirtKeyHash.isEmpty()) { - // misc keys - qtKeyToVirtualKey[Qt::Key_Escape] = XK_Escape; - qtKeyToVirtualKey[Qt::Key_Tab] = XK_Tab; - qtKeyToVirtualKey[Qt::Key_Backtab] = XK_ISO_Left_Tab; - qtKeyToVirtualKey[Qt::Key_Backspace] = XK_BackSpace; - qtKeyToVirtualKey[Qt::Key_Return] = XK_Return; - qtKeyToVirtualKey[Qt::Key_Insert] = XK_Insert; - qtKeyToVirtualKey[Qt::Key_Delete] = XK_Delete; - //qtKeyToX11KeySym[Qt::Key_Delete] = XK_Clear; - qtKeyToVirtualKey[Qt::Key_Pause] = XK_Pause; - qtKeyToVirtualKey[Qt::Key_Print] = XK_Print; - - // cursor movement - qtKeyToVirtualKey[Qt::Key_Home] = XK_Home; - qtKeyToVirtualKey[Qt::Key_End] = XK_End; - qtKeyToVirtualKey[Qt::Key_Left] = XK_Left; - qtKeyToVirtualKey[Qt::Key_Up] = XK_Up; - qtKeyToVirtualKey[Qt::Key_Right] = XK_Right; - qtKeyToVirtualKey[Qt::Key_Down] = XK_Down; - qtKeyToVirtualKey[Qt::Key_PageUp] = XK_Prior; - qtKeyToVirtualKey[Qt::Key_PageDown] = XK_Next; - - // modifiers - qtKeyToVirtualKey[Qt::Key_Shift] = XK_Shift_L; - //qtKeyToX11KeySym[Qt::Key_Shift] = XK_Shift_R; - //qtKeyToX11KeySym[Qt::Key_Shift] = XK_Shift_Lock; - qtKeyToVirtualKey[Qt::Key_Control] = XK_Control_L; - //qtKeyToX11KeySym[Qt::Key_Control] = XK_Control_R; - //qtKeyToVirtualKey[Qt::Key_Meta] = XK_Meta_L; - //qtKeyToX11KeySym[Qt::Key_Meta] = XK_Meta_R; - qtKeyToVirtualKey[Qt::Key_Alt] = XK_Alt_L; - //qtKeyToX11KeySym[Qt::Key_Alt] = XK_Alt_R; - - qtKeyToVirtualKey[Qt::Key_CapsLock] = XK_Caps_Lock; - qtKeyToVirtualKey[Qt::Key_NumLock] = XK_Num_Lock; - qtKeyToVirtualKey[Qt::Key_ScrollLock] = XK_Scroll_Lock; - qtKeyToVirtualKey[Qt::Key_Meta] = XK_Super_L; - qtKeyToVirtualKey[AntKey_Meta_R] = XK_Super_R; - //qtKeyToVirtualKey[Qt::Key_Super_L] = XK_Super_L; - //qtKeyToVirtualKey[Qt::Key_Super_R] = XK_Super_R; - qtKeyToVirtualKey[Qt::Key_Menu] = XK_Menu; - qtKeyToVirtualKey[Qt::Key_Hyper_L] = XK_Hyper_L; - qtKeyToVirtualKey[Qt::Key_Hyper_R] = XK_Hyper_R; - qtKeyToVirtualKey[Qt::Key_Help] = XK_Help; - - // numeric and function keypad keys - //qtKeyToVirtualKey[Qt::Key_Space] = XK_KP_Space; - //qtKeyToX11KeySym[Qt::Key_Tab] = XK_KP_Tab; - qtKeyToVirtualKey[Qt::Key_Enter] = XK_KP_Enter; - qtKeyToVirtualKey[AntKey_KP_Home] = XK_KP_Home; - //qtKeyToX11KeySym[Qt::Key_Home] = XK_KP_Home; - qtKeyToVirtualKey[AntKey_KP_Left] = XK_KP_Left; - qtKeyToVirtualKey[AntKey_KP_Up] = XK_KP_Up; - qtKeyToVirtualKey[AntKey_KP_Right] = XK_KP_Right; - qtKeyToVirtualKey[AntKey_KP_Down] = XK_KP_Down; - qtKeyToVirtualKey[AntKey_KP_Prior] = XK_KP_Prior; - qtKeyToVirtualKey[AntKey_KP_Next] = XK_KP_Next; - qtKeyToVirtualKey[AntKey_KP_End] = XK_KP_End; - qtKeyToVirtualKey[AntKey_KP_Begin] = XK_KP_Begin; - qtKeyToVirtualKey[AntKey_KP_Insert] = XK_KP_Insert; - qtKeyToVirtualKey[AntKey_KP_Delete] = XK_KP_Delete; - //qtKeyToX11KeySym[AntKey_KP_Equal] = XK_KP_Equal; - qtKeyToVirtualKey[AntKey_KP_Add] = XK_KP_Add; - //qtKeyToX11KeySym[AntKey_KP_Separator] = XK_KP_Separator; - qtKeyToVirtualKey[AntKey_KP_Subtract] = XK_KP_Subtract; - - qtKeyToVirtualKey[AntKey_KP_Decimal] = XK_KP_Decimal; - qtKeyToVirtualKey[AntKey_KP_Divide] = XK_KP_Divide; - - // International input method support keys - - // International & multi-key character composition - qtKeyToVirtualKey[Qt::Key_AltGr] = XK_ISO_Level3_Shift; - qtKeyToVirtualKey[Qt::Key_Multi_key] = XK_Multi_key; - qtKeyToVirtualKey[Qt::Key_Codeinput] = XK_Codeinput; - qtKeyToVirtualKey[Qt::Key_SingleCandidate] = XK_SingleCandidate; - qtKeyToVirtualKey[Qt::Key_MultipleCandidate] = XK_MultipleCandidate; - qtKeyToVirtualKey[Qt::Key_PreviousCandidate] = XK_PreviousCandidate; + mapMiscKeysQtX11(qtKeyToVirtKeyHash); + mapCursorMovesKeysQtX11(qtKeyToVirtKeyHash); + mapModifiersKeysQtX11(qtKeyToVirtKeyHash); + mapAdditionalKeysQtX11(qtKeyToVirtKeyHash); + mapKeypadKeysQtX11(qtKeyToVirtKeyHash); + mapInternationKeysQtX11(qtKeyToVirtKeyHash); // Misc Functions - qtKeyToVirtualKey[Qt::Key_Mode_switch] = XK_Mode_switch; + qtKeyToVirtKeyHash[Qt::Key_Mode_switch] = XK_Mode_switch; //qtKeyToX11KeySym[Qt::Key_Mode_switch] = XK_script_switch; - // Japanese keyboard support - qtKeyToVirtualKey[Qt::Key_Kanji] = XK_Kanji; - qtKeyToVirtualKey[Qt::Key_Muhenkan] = XK_Muhenkan; - qtKeyToVirtualKey[Qt::Key_Henkan] = XK_Henkan_Mode; - //qtKeyToX11KeySym[Qt::Key_Henkan] = XK_Henkan; - qtKeyToVirtualKey[Qt::Key_Romaji] = XK_Romaji; - qtKeyToVirtualKey[Qt::Key_Hiragana] = XK_Hiragana; - qtKeyToVirtualKey[Qt::Key_Katakana] = XK_Katakana; - qtKeyToVirtualKey[Qt::Key_Hiragana_Katakana] = XK_Hiragana_Katakana; - qtKeyToVirtualKey[Qt::Key_Zenkaku] = XK_Zenkaku; - qtKeyToVirtualKey[Qt::Key_Hankaku] = XK_Hankaku; - qtKeyToVirtualKey[Qt::Key_Zenkaku_Hankaku] = XK_Zenkaku_Hankaku; - qtKeyToVirtualKey[Qt::Key_Touroku] = XK_Touroku; - qtKeyToVirtualKey[Qt::Key_Massyo] = XK_Massyo; - qtKeyToVirtualKey[Qt::Key_Kana_Lock] = XK_Kana_Lock; - qtKeyToVirtualKey[Qt::Key_Kana_Shift] = XK_Kana_Shift; - qtKeyToVirtualKey[Qt::Key_Eisu_Shift] = XK_Eisu_Shift; - qtKeyToVirtualKey[Qt::Key_Eisu_toggle] = XK_Eisu_toggle; - qtKeyToVirtualKey[Qt::Key_Codeinput] = XK_Kanji_Bangou; - //qtKeyToX11KeySym[Qt::Key_MultipleCandidate] = XK_Zen_Koho; - //qtKeyToX11KeySym[Qt::Key_PreviousCandidate] = XK_Mae_Koho; + mapJapanKeysQtX11(qtKeyToVirtKeyHash); #ifdef XK_KOREAN - qtKeyToVirtualKey[Qt::Key_Hangul] = XK_Hangul; - qtKeyToVirtualKey[Qt::Key_Hangul_Start] = XK_Hangul_Start; - qtKeyToVirtualKey[Qt::Key_Hangul_End] = XK_Hangul_End; - qtKeyToVirtualKey[Qt::Key_Hangul_Hanja] = XK_Hangul_Hanja; - qtKeyToVirtualKey[Qt::Key_Hangul_Jamo] = XK_Hangul_Jamo; - qtKeyToVirtualKey[Qt::Key_Hangul_Romaja] = XK_Hangul_Romaja; - //qtKeyToX11KeySym[Qt::Key_Codeinput] = XK_Hangul_Codeinput; - qtKeyToVirtualKey[Qt::Key_Hangul_Jeonja] = XK_Hangul_Jeonja; - qtKeyToVirtualKey[Qt::Key_Hangul_Banja] = XK_Hangul_Banja; - qtKeyToVirtualKey[Qt::Key_Hangul_PreHanja] = XK_Hangul_PreHanja; - qtKeyToVirtualKey[Qt::Key_Hangul_PostHanja] = XK_Hangul_PostHanja; - //qtKeyToX11KeySym[Qt::Key_SingleCandidate] = XK_Hangul_SingleCandidate; - //qtKeyToX11KeySym[Qt::Key_MultipleCandidate] = XK_Hangul_MultipleCandidate; - //qtKeyToX11KeySym[Qt::Key_PreviousCandidate] = XK_Hangul_PreviousCandidate; - qtKeyToVirtualKey[Qt::Key_Hangul_Special] = XK_Hangul_Special; - //qtKeyToX11KeySym[Qt::Key_Mode_switch] = XK_Hangul_switch; - + mapKoreanKeysQtX11(qtKeyToVirtKeyHash); #endif // XK_KOREAN - // dead keys - qtKeyToVirtualKey[Qt::Key_Dead_Grave] = XK_dead_grave; - qtKeyToVirtualKey[Qt::Key_Dead_Acute] = XK_dead_acute; - qtKeyToVirtualKey[Qt::Key_Dead_Circumflex] = XK_dead_circumflex; - qtKeyToVirtualKey[Qt::Key_Dead_Tilde] = XK_dead_tilde; - qtKeyToVirtualKey[Qt::Key_Dead_Macron] = XK_dead_macron; - qtKeyToVirtualKey[Qt::Key_Dead_Breve] = XK_dead_breve; - qtKeyToVirtualKey[Qt::Key_Dead_Abovedot] = XK_dead_abovedot; - qtKeyToVirtualKey[Qt::Key_Dead_Diaeresis] = XK_dead_diaeresis; - qtKeyToVirtualKey[Qt::Key_Dead_Abovering] = XK_dead_abovering; - qtKeyToVirtualKey[Qt::Key_Dead_Doubleacute] = XK_dead_doubleacute; - qtKeyToVirtualKey[Qt::Key_Dead_Caron] = XK_dead_caron; - qtKeyToVirtualKey[Qt::Key_Dead_Cedilla] = XK_dead_cedilla; - qtKeyToVirtualKey[Qt::Key_Dead_Ogonek] = XK_dead_ogonek; - qtKeyToVirtualKey[Qt::Key_Dead_Iota] = XK_dead_iota; - qtKeyToVirtualKey[Qt::Key_Dead_Voiced_Sound] = XK_dead_voiced_sound; - qtKeyToVirtualKey[Qt::Key_Dead_Semivoiced_Sound] = XK_dead_semivoiced_sound; - qtKeyToVirtualKey[Qt::Key_Dead_Belowdot] = XK_dead_belowdot; - qtKeyToVirtualKey[Qt::Key_Dead_Hook] = XK_dead_hook; - qtKeyToVirtualKey[Qt::Key_Dead_Horn] = XK_dead_horn; - - // Special multimedia keys - // currently only tested with MS internet keyboard - - // browsing keys - qtKeyToVirtualKey[Qt::Key_Back] = XF86XK_Back; - qtKeyToVirtualKey[Qt::Key_Forward] = XF86XK_Forward; - qtKeyToVirtualKey[Qt::Key_Stop] = XF86XK_Stop; - qtKeyToVirtualKey[Qt::Key_Refresh] = XF86XK_Refresh; - qtKeyToVirtualKey[Qt::Key_Favorites] = XF86XK_Favorites; - qtKeyToVirtualKey[Qt::Key_LaunchMedia] = XF86XK_AudioMedia; - qtKeyToVirtualKey[Qt::Key_OpenUrl] = XF86XK_OpenURL; - qtKeyToVirtualKey[Qt::Key_HomePage] = XF86XK_HomePage; - qtKeyToVirtualKey[Qt::Key_Search] = XF86XK_Search; - - // media keys - qtKeyToVirtualKey[Qt::Key_VolumeDown] = XF86XK_AudioLowerVolume; - qtKeyToVirtualKey[Qt::Key_VolumeMute] = XF86XK_AudioMute; - qtKeyToVirtualKey[Qt::Key_VolumeUp] = XF86XK_AudioRaiseVolume; - qtKeyToVirtualKey[Qt::Key_MediaPlay] = XF86XK_AudioPlay; - qtKeyToVirtualKey[Qt::Key_MediaStop] = XF86XK_AudioStop; - qtKeyToVirtualKey[Qt::Key_MediaPrevious] = XF86XK_AudioPrev; - qtKeyToVirtualKey[Qt::Key_MediaNext] = XF86XK_AudioNext; - qtKeyToVirtualKey[Qt::Key_MediaRecord] = XF86XK_AudioRecord; - - // launch keys - qtKeyToVirtualKey[Qt::Key_LaunchMail] = XF86XK_Mail; - qtKeyToVirtualKey[Qt::Key_Launch0] = XF86XK_MyComputer; - qtKeyToVirtualKey[Qt::Key_Launch1] = XF86XK_Calculator; - qtKeyToVirtualKey[Qt::Key_Standby] = XF86XK_Standby; - - qtKeyToVirtualKey[Qt::Key_Launch2] = XF86XK_Launch0; - qtKeyToVirtualKey[Qt::Key_Launch3] = XF86XK_Launch1; - qtKeyToVirtualKey[Qt::Key_Launch4] = XF86XK_Launch2; - qtKeyToVirtualKey[Qt::Key_Launch5] = XF86XK_Launch3; - qtKeyToVirtualKey[Qt::Key_Launch6] = XF86XK_Launch4; - qtKeyToVirtualKey[Qt::Key_Launch7] = XF86XK_Launch5; - qtKeyToVirtualKey[Qt::Key_Launch8] = XF86XK_Launch6; - qtKeyToVirtualKey[Qt::Key_Launch9] = XF86XK_Launch7; - qtKeyToVirtualKey[Qt::Key_LaunchA] = XF86XK_Launch8; - qtKeyToVirtualKey[Qt::Key_LaunchB] = XF86XK_Launch9; - qtKeyToVirtualKey[Qt::Key_LaunchC] = XF86XK_LaunchA; - qtKeyToVirtualKey[Qt::Key_LaunchD] = XF86XK_LaunchB; - qtKeyToVirtualKey[Qt::Key_LaunchE] = XF86XK_LaunchC; - qtKeyToVirtualKey[Qt::Key_LaunchF] = XF86XK_LaunchD; + mapDeadKeysQtX11(qtKeyToVirtKeyHash); + mapBrowseKeysQtX11(qtKeyToVirtKeyHash); + mapMediaKeysQtX11(qtKeyToVirtKeyHash); + mapLaunchKeysQtX11(qtKeyToVirtKeyHash); // Map initial ASCII keys - for (int i=0; i <= (XK_at - XK_space); i++) - { - qtKeyToVirtualKey[Qt::Key_Space + i] = XK_space + i; - } + for (int i = 0; i <= (XK_at - XK_space); i++) + qtKeyToVirtKeyHash[Qt::Key_Space + i] = XK_space + i; // Map lowercase alpha keys - for (int i=0; i <= (XK_z - XK_a); i++) - { - qtKeyToVirtualKey[Qt::Key_A + i] = XK_a + i; - } + for (int i = 0; i <= (XK_z - XK_a); i++) + qtKeyToVirtKeyHash[Qt::Key_A + i] = XK_a + i; // Map [ to ` ASCII keys - for (int i=0; i <= (XK_grave - XK_bracketleft); i++) - { - qtKeyToVirtualKey[Qt::Key_BracketLeft + i] = XK_bracketleft + i; - } + for (int i = 0; i <= (XK_grave - XK_bracketleft); i++) + qtKeyToVirtKeyHash[Qt::Key_BracketLeft + i] = XK_bracketleft + i; // Map { to ~ ASCII keys - for (int i=0; i <= (XK_asciitilde - XK_braceleft); i++) - { - qtKeyToVirtualKey[Qt::Key_BraceLeft + i] = XK_braceleft + i; - } + for (int i = 0; i <= (XK_asciitilde - XK_braceleft); i++) + qtKeyToVirtKeyHash[Qt::Key_BraceLeft + i] = XK_braceleft + i; // Map function keys - for (int i=0; i <= (XK_F35 - XK_F1); i++) - { - qtKeyToVirtualKey[Qt::Key_F1 + i] = XK_F1 + i; - } + for (int i = 0; i <= (XK_F35 - XK_F1); i++) + qtKeyToVirtKeyHash[Qt::Key_F1 + i] = XK_F1 + i; // Misc - //qtKeyToVirtualKey[Qt::KeyBri] + //qtKeyToVirtKeyHash[Qt::KeyBri] // Map custom defined keys - qtKeyToVirtualKey[AntKey_Shift_R] = XK_Shift_R; - qtKeyToVirtualKey[AntKey_Control_R] = XK_Control_R; + qtKeyToVirtKeyHash[AntKey_Shift_R] = XK_Shift_R; + qtKeyToVirtKeyHash[AntKey_Control_R] = XK_Control_R; //qtKeyToX11KeySym[AntKey_Shift_Lock] = XK_Shift_Lock; - //qtKeyToVirtualKey[AntKey_Meta_R] = XK_Meta_R; - qtKeyToVirtualKey[AntKey_Alt_R] = XK_Alt_R; - qtKeyToVirtualKey[AntKey_KP_Multiply] = XK_KP_Multiply; + //qtKeyToVirtKeyHash[AntKey_Meta_R] = XK_Meta_R; + qtKeyToVirtKeyHash[AntKey_Alt_R] = XK_Alt_R; + qtKeyToVirtKeyHash[AntKey_KP_Multiply] = XK_KP_Multiply; - // Map 0 to 9 - for (int i=0; i <= (XK_KP_9 - XK_KP_0); i++) - { - qtKeyToVirtualKey[AntKey_KP_0 + i] = XK_KP_0 + i; - } + // Map 0 to 9 + for (int i = 0; i <= (XK_KP_9 - XK_KP_0); i++) + qtKeyToVirtKeyHash[AntKey_KP_0 + i] = XK_KP_0 + i; + + // Map lower-case latin characters to their capital equivalents + for( int i = 0; i <= (XK_odiaeresis - XK_agrave); i++) + qtKeyToVirtKeyHash[ Qt::Key_Agrave + i ] = XK_agrave + i; - // Map lower-case latin characters to their capital equivalents - for( int i=0; i <= (XK_odiaeresis - XK_agrave); i++) { - qtKeyToVirtualKey[ Qt::Key_Agrave + i ] = XK_agrave + i; - } - for( int i=0; i <= (XK_thorn - XK_oslash); i++) { - qtKeyToVirtualKey[ Qt::Key_Ooblique + i ] = XK_oslash + i; - } + for( int i = 0; i <= (XK_thorn - XK_oslash); i++) + qtKeyToVirtKeyHash[ Qt::Key_Ooblique + i ] = XK_oslash + i; + + QHashIterator iter(qtKeyToVirtKeyHash); - QHashIterator iter(qtKeyToVirtualKey); while (iter.hasNext()) { iter.next(); - virtualKeyToQtKey[iter.value()] = iter.key(); + virtKeyToQtKeyHash[iter.value()] = iter.key(); } } } @@ -318,84 +137,270 @@ void QtX11KeyMapper::populateCharKeyInformation() { qInstallMessageHandler(MessageHandler::myMessageOutput); - virtualkeyToCharKeyInformation.clear(); + virtkeyToCharKeyInfo.clear(); Display* display = X11Extras::getInstance()->display(); - int total = 0; - for (int i=8; i <= 255; i++) + + for (int i = 8; i <= 255; i++) { - for (int j=0; j <= 3; j++) + for (int j = 0; j <= 3; j++) { Qt::KeyboardModifiers dicis; + if (j >= 2) - { dicis |= Qt::MetaModifier; - } if ((j == 1) || (j == 3)) - { dicis |= Qt::ShiftModifier; - } - int testsym = static_cast(XkbKeycodeToKeysym(display, static_cast(i), - dicis & Qt::MetaModifier ? 1 : 0, - dicis & Qt::ShiftModifier ? 1 : 0)); + int testsym = XkbKeycodeToKeysym(display, i, + (dicis & Qt::MetaModifier) ? 1 : 0, + (dicis & Qt::ShiftModifier) ? 1 : 0); + if (testsym != NoSymbol) { XKeyPressedEvent tempevent; - tempevent.keycode = static_cast(i); + tempevent.keycode = i; tempevent.type = KeyPress; tempevent.display = display; tempevent.state = 0; + if (dicis & Qt::ShiftModifier) - { tempevent.state |= ShiftMask; - } if (dicis & Qt::MetaModifier) - { tempevent.state |= Mod1Mask; - } char returnstring[256]; memset(returnstring, 0, sizeof(returnstring)); int bitestoreturn = sizeof(returnstring) - 1; int numchars = XLookupString(&tempevent, returnstring, bitestoreturn, nullptr, nullptr); + if (numchars > 0) { returnstring[numchars] = '\0'; QString tempstring = QString::fromUtf8(returnstring); + if (tempstring.length() == 1) { QChar tempchar(tempstring.at(0)); charKeyInformation testKeyInformation; testKeyInformation.modifiers = dicis; testKeyInformation.virtualkey = testsym; - if (!virtualkeyToCharKeyInformation.contains(tempchar.unicode())) + + if (!virtkeyToCharKeyInfo.contains(tempchar.unicode())) { - virtualkeyToCharKeyInformation.insert(tempchar.unicode(), testKeyInformation); - //qDebug() << "I FOUND SOMETHING: " << tempchar; + virtkeyToCharKeyInfo.insert(tempchar.unicode(), testKeyInformation); total++; } } - else - { - //qDebug() << "YOU FAIL: " << tempchar; - } } - } } } - //qDebug() << "TOTAL: " << total; - //qDebug() << ""; + qDebug() << "TOTAL: " << total; +} - QChar tempa('*'); - if (virtualkeyToCharKeyInformation.contains(tempa.unicode())) - { - //charKeyInformation projects = virtualkeyToCharKeyInformation.value(tempa.unicode()); - } +void QtX11KeyMapper::mapMiscKeysQtX11(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_Escape] = XK_Escape; + qtKeyToVirtKeyHash[Qt::Key_Tab] = XK_Tab; + qtKeyToVirtKeyHash[Qt::Key_Backtab] = XK_ISO_Left_Tab; + qtKeyToVirtKeyHash[Qt::Key_Backspace] = XK_BackSpace; + qtKeyToVirtKeyHash[Qt::Key_Return] = XK_Return; + qtKeyToVirtKeyHash[Qt::Key_Insert] = XK_Insert; + qtKeyToVirtKeyHash[Qt::Key_Delete] = XK_Delete; + //qtKeyToX11KeySym[Qt::Key_Delete] = XK_Clear; + qtKeyToVirtKeyHash[Qt::Key_Pause] = XK_Pause; + qtKeyToVirtKeyHash[Qt::Key_Print] = XK_Print; +} + +void QtX11KeyMapper::mapCursorMovesKeysQtX11(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_Home] = XK_Home; + qtKeyToVirtKeyHash[Qt::Key_End] = XK_End; + qtKeyToVirtKeyHash[Qt::Key_Left] = XK_Left; + qtKeyToVirtKeyHash[Qt::Key_Up] = XK_Up; + qtKeyToVirtKeyHash[Qt::Key_Right] = XK_Right; + qtKeyToVirtKeyHash[Qt::Key_Down] = XK_Down; + qtKeyToVirtKeyHash[Qt::Key_PageUp] = XK_Prior; + qtKeyToVirtKeyHash[Qt::Key_PageDown] = XK_Next; +} + +void QtX11KeyMapper::mapModifiersKeysQtX11(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_Shift] = XK_Shift_L; + //qtKeyToX11KeySym[Qt::Key_Shift] = XK_Shift_R; + //qtKeyToX11KeySym[Qt::Key_Shift] = XK_Shift_Lock; + qtKeyToVirtKeyHash[Qt::Key_Control] = XK_Control_L; + //qtKeyToX11KeySym[Qt::Key_Control] = XK_Control_R; + //qtKeyToVirtKeyHash[Qt::Key_Meta] = XK_Meta_L; + //qtKeyToX11KeySym[Qt::Key_Meta] = XK_Meta_R; + qtKeyToVirtKeyHash[Qt::Key_Alt] = XK_Alt_L; + //qtKeyToX11KeySym[Qt::Key_Alt] = XK_Alt_R; +} + +void QtX11KeyMapper::mapAdditionalKeysQtX11(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_CapsLock] = XK_Caps_Lock; + qtKeyToVirtKeyHash[Qt::Key_NumLock] = XK_Num_Lock; + qtKeyToVirtKeyHash[Qt::Key_ScrollLock] = XK_Scroll_Lock; + qtKeyToVirtKeyHash[Qt::Key_Meta] = XK_Super_L; + qtKeyToVirtKeyHash[AntKey_Meta_R] = XK_Super_R; + //qtKeyToVirtKeyHash[Qt::Key_Super_L] = XK_Super_L; + //qtKeyToVirtKeyHash[Qt::Key_Super_R] = XK_Super_R; + qtKeyToVirtKeyHash[Qt::Key_Menu] = XK_Menu; + qtKeyToVirtKeyHash[Qt::Key_Hyper_L] = XK_Hyper_L; + qtKeyToVirtKeyHash[Qt::Key_Hyper_R] = XK_Hyper_R; + qtKeyToVirtKeyHash[Qt::Key_Help] = XK_Help; +} + +void QtX11KeyMapper::mapKeypadKeysQtX11(QHash& qtKeyToVirtKeyHash) +{ + //qtKeyToVirtKeyHash[Qt::Key_Space] = XK_KP_Space; + //qtKeyToX11KeySym[Qt::Key_Tab] = XK_KP_Tab; + qtKeyToVirtKeyHash[Qt::Key_Enter] = XK_KP_Enter; + qtKeyToVirtKeyHash[AntKey_KP_Home] = XK_KP_Home; + //qtKeyToX11KeySym[Qt::Key_Home] = XK_KP_Home; + qtKeyToVirtKeyHash[AntKey_KP_Left] = XK_KP_Left; + qtKeyToVirtKeyHash[AntKey_KP_Up] = XK_KP_Up; + qtKeyToVirtKeyHash[AntKey_KP_Right] = XK_KP_Right; + qtKeyToVirtKeyHash[AntKey_KP_Down] = XK_KP_Down; + qtKeyToVirtKeyHash[AntKey_KP_Prior] = XK_KP_Prior; + qtKeyToVirtKeyHash[AntKey_KP_Next] = XK_KP_Next; + qtKeyToVirtKeyHash[AntKey_KP_End] = XK_KP_End; + qtKeyToVirtKeyHash[AntKey_KP_Begin] = XK_KP_Begin; + qtKeyToVirtKeyHash[AntKey_KP_Insert] = XK_KP_Insert; + qtKeyToVirtKeyHash[AntKey_KP_Delete] = XK_KP_Delete; + //qtKeyToX11KeySym[AntKey_KP_Equal] = XK_KP_Equal; + qtKeyToVirtKeyHash[AntKey_KP_Add] = XK_KP_Add; + //qtKeyToX11KeySym[AntKey_KP_Separator] = XK_KP_Separator; + qtKeyToVirtKeyHash[AntKey_KP_Subtract] = XK_KP_Subtract; + qtKeyToVirtKeyHash[AntKey_KP_Decimal] = XK_KP_Decimal; + qtKeyToVirtKeyHash[AntKey_KP_Divide] = XK_KP_Divide; +} + +void QtX11KeyMapper::mapInternationKeysQtX11(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_AltGr] = XK_ISO_Level3_Shift; + qtKeyToVirtKeyHash[Qt::Key_Multi_key] = XK_Multi_key; + qtKeyToVirtKeyHash[Qt::Key_Codeinput] = XK_Codeinput; + qtKeyToVirtKeyHash[Qt::Key_SingleCandidate] = XK_SingleCandidate; + qtKeyToVirtKeyHash[Qt::Key_MultipleCandidate] = XK_MultipleCandidate; + qtKeyToVirtKeyHash[Qt::Key_PreviousCandidate] = XK_PreviousCandidate; } +void QtX11KeyMapper::mapJapanKeysQtX11(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_Kanji] = XK_Kanji; + qtKeyToVirtKeyHash[Qt::Key_Muhenkan] = XK_Muhenkan; + qtKeyToVirtKeyHash[Qt::Key_Henkan] = XK_Henkan_Mode; + //qtKeyToX11KeySym[Qt::Key_Henkan] = XK_Henkan; + qtKeyToVirtKeyHash[Qt::Key_Romaji] = XK_Romaji; + qtKeyToVirtKeyHash[Qt::Key_Hiragana] = XK_Hiragana; + qtKeyToVirtKeyHash[Qt::Key_Katakana] = XK_Katakana; + qtKeyToVirtKeyHash[Qt::Key_Hiragana_Katakana] = XK_Hiragana_Katakana; + qtKeyToVirtKeyHash[Qt::Key_Zenkaku] = XK_Zenkaku; + qtKeyToVirtKeyHash[Qt::Key_Hankaku] = XK_Hankaku; + qtKeyToVirtKeyHash[Qt::Key_Zenkaku_Hankaku] = XK_Zenkaku_Hankaku; + qtKeyToVirtKeyHash[Qt::Key_Touroku] = XK_Touroku; + qtKeyToVirtKeyHash[Qt::Key_Massyo] = XK_Massyo; + qtKeyToVirtKeyHash[Qt::Key_Kana_Lock] = XK_Kana_Lock; + qtKeyToVirtKeyHash[Qt::Key_Kana_Shift] = XK_Kana_Shift; + qtKeyToVirtKeyHash[Qt::Key_Eisu_Shift] = XK_Eisu_Shift; + qtKeyToVirtKeyHash[Qt::Key_Eisu_toggle] = XK_Eisu_toggle; + qtKeyToVirtKeyHash[Qt::Key_Codeinput] = XK_Kanji_Bangou; + //qtKeyToX11KeySym[Qt::Key_MultipleCandidate] = XK_Zen_Koho; + //qtKeyToX11KeySym[Qt::Key_PreviousCandidate] = XK_Mae_Koho; +} + +void QtX11KeyMapper::mapKoreanKeysQtX11(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_Hangul] = XK_Hangul; + qtKeyToVirtKeyHash[Qt::Key_Hangul_Start] = XK_Hangul_Start; + qtKeyToVirtKeyHash[Qt::Key_Hangul_End] = XK_Hangul_End; + qtKeyToVirtKeyHash[Qt::Key_Hangul_Hanja] = XK_Hangul_Hanja; + qtKeyToVirtKeyHash[Qt::Key_Hangul_Jamo] = XK_Hangul_Jamo; + qtKeyToVirtKeyHash[Qt::Key_Hangul_Romaja] = XK_Hangul_Romaja; + //qtKeyToX11KeySym[Qt::Key_Codeinput] = XK_Hangul_Codeinput; + qtKeyToVirtKeyHash[Qt::Key_Hangul_Jeonja] = XK_Hangul_Jeonja; + qtKeyToVirtKeyHash[Qt::Key_Hangul_Banja] = XK_Hangul_Banja; + qtKeyToVirtKeyHash[Qt::Key_Hangul_PreHanja] = XK_Hangul_PreHanja; + qtKeyToVirtKeyHash[Qt::Key_Hangul_PostHanja] = XK_Hangul_PostHanja; + //qtKeyToX11KeySym[Qt::Key_SingleCandidate] = XK_Hangul_SingleCandidate; + //qtKeyToX11KeySym[Qt::Key_MultipleCandidate] = XK_Hangul_MultipleCandidate; + //qtKeyToX11KeySym[Qt::Key_PreviousCandidate] = XK_Hangul_PreviousCandidate; + qtKeyToVirtKeyHash[Qt::Key_Hangul_Special] = XK_Hangul_Special; + //qtKeyToX11KeySym[Qt::Key_Mode_switch] = XK_Hangul_switch; +} + +void QtX11KeyMapper::mapDeadKeysQtX11(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_Dead_Grave] = XK_dead_grave; + qtKeyToVirtKeyHash[Qt::Key_Dead_Acute] = XK_dead_acute; + qtKeyToVirtKeyHash[Qt::Key_Dead_Circumflex] = XK_dead_circumflex; + qtKeyToVirtKeyHash[Qt::Key_Dead_Tilde] = XK_dead_tilde; + qtKeyToVirtKeyHash[Qt::Key_Dead_Macron] = XK_dead_macron; + qtKeyToVirtKeyHash[Qt::Key_Dead_Breve] = XK_dead_breve; + qtKeyToVirtKeyHash[Qt::Key_Dead_Abovedot] = XK_dead_abovedot; + qtKeyToVirtKeyHash[Qt::Key_Dead_Diaeresis] = XK_dead_diaeresis; + qtKeyToVirtKeyHash[Qt::Key_Dead_Abovering] = XK_dead_abovering; + qtKeyToVirtKeyHash[Qt::Key_Dead_Doubleacute] = XK_dead_doubleacute; + qtKeyToVirtKeyHash[Qt::Key_Dead_Caron] = XK_dead_caron; + qtKeyToVirtKeyHash[Qt::Key_Dead_Cedilla] = XK_dead_cedilla; + qtKeyToVirtKeyHash[Qt::Key_Dead_Ogonek] = XK_dead_ogonek; + qtKeyToVirtKeyHash[Qt::Key_Dead_Iota] = XK_dead_iota; + qtKeyToVirtKeyHash[Qt::Key_Dead_Voiced_Sound] = XK_dead_voiced_sound; + qtKeyToVirtKeyHash[Qt::Key_Dead_Semivoiced_Sound] = XK_dead_semivoiced_sound; + qtKeyToVirtKeyHash[Qt::Key_Dead_Belowdot] = XK_dead_belowdot; + qtKeyToVirtKeyHash[Qt::Key_Dead_Hook] = XK_dead_hook; + qtKeyToVirtKeyHash[Qt::Key_Dead_Horn] = XK_dead_horn; +} +void QtX11KeyMapper::mapBrowseKeysQtX11(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_Back] = XF86XK_Back; + qtKeyToVirtKeyHash[Qt::Key_Forward] = XF86XK_Forward; + qtKeyToVirtKeyHash[Qt::Key_Stop] = XF86XK_Stop; + qtKeyToVirtKeyHash[Qt::Key_Refresh] = XF86XK_Refresh; + qtKeyToVirtKeyHash[Qt::Key_Favorites] = XF86XK_Favorites; + qtKeyToVirtKeyHash[Qt::Key_LaunchMedia] = XF86XK_AudioMedia; + qtKeyToVirtKeyHash[Qt::Key_OpenUrl] = XF86XK_OpenURL; + qtKeyToVirtKeyHash[Qt::Key_HomePage] = XF86XK_HomePage; + qtKeyToVirtKeyHash[Qt::Key_Search] = XF86XK_Search; +} + +void QtX11KeyMapper::mapMediaKeysQtX11(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_VolumeDown] = XF86XK_AudioLowerVolume; + qtKeyToVirtKeyHash[Qt::Key_VolumeMute] = XF86XK_AudioMute; + qtKeyToVirtKeyHash[Qt::Key_VolumeUp] = XF86XK_AudioRaiseVolume; + qtKeyToVirtKeyHash[Qt::Key_MediaPlay] = XF86XK_AudioPlay; + qtKeyToVirtKeyHash[Qt::Key_MediaStop] = XF86XK_AudioStop; + qtKeyToVirtKeyHash[Qt::Key_MediaPrevious] = XF86XK_AudioPrev; + qtKeyToVirtKeyHash[Qt::Key_MediaNext] = XF86XK_AudioNext; + qtKeyToVirtKeyHash[Qt::Key_MediaRecord] = XF86XK_AudioRecord; +} + +void QtX11KeyMapper::mapLaunchKeysQtX11(QHash& qtKeyToVirtKeyHash) +{ + qtKeyToVirtKeyHash[Qt::Key_LaunchMail] = XF86XK_Mail; + qtKeyToVirtKeyHash[Qt::Key_Launch0] = XF86XK_MyComputer; + qtKeyToVirtKeyHash[Qt::Key_Launch1] = XF86XK_Calculator; + qtKeyToVirtKeyHash[Qt::Key_Standby] = XF86XK_Standby; + qtKeyToVirtKeyHash[Qt::Key_Launch2] = XF86XK_Launch0; + qtKeyToVirtKeyHash[Qt::Key_Launch3] = XF86XK_Launch1; + qtKeyToVirtKeyHash[Qt::Key_Launch4] = XF86XK_Launch2; + qtKeyToVirtKeyHash[Qt::Key_Launch5] = XF86XK_Launch3; + qtKeyToVirtKeyHash[Qt::Key_Launch6] = XF86XK_Launch4; + qtKeyToVirtKeyHash[Qt::Key_Launch7] = XF86XK_Launch5; + qtKeyToVirtKeyHash[Qt::Key_Launch8] = XF86XK_Launch6; + qtKeyToVirtKeyHash[Qt::Key_Launch9] = XF86XK_Launch7; + qtKeyToVirtKeyHash[Qt::Key_LaunchA] = XF86XK_Launch8; + qtKeyToVirtKeyHash[Qt::Key_LaunchB] = XF86XK_Launch9; + qtKeyToVirtKeyHash[Qt::Key_LaunchC] = XF86XK_LaunchA; + qtKeyToVirtKeyHash[Qt::Key_LaunchD] = XF86XK_LaunchB; + qtKeyToVirtKeyHash[Qt::Key_LaunchE] = XF86XK_LaunchC; + qtKeyToVirtKeyHash[Qt::Key_LaunchF] = XF86XK_LaunchD; +} diff --git a/src/qtx11keymapper.h b/src/qtx11keymapper.h old mode 100644 new mode 100755 index 67a8ec5db..b7c383888 --- a/src/qtx11keymapper.h +++ b/src/qtx11keymapper.h @@ -31,8 +31,22 @@ class QtX11KeyMapper : public QtKeyMapperBase explicit QtX11KeyMapper(QObject *parent = nullptr); protected: - void populateMappingHashes(); - void populateCharKeyInformation(); + void populateMappingHashes() override; + void populateCharKeyInformation() override; + +private: + void mapMiscKeysQtX11(QHash& qtKeyToVirtKeyHash); + void mapCursorMovesKeysQtX11(QHash& qtKeyToVirtKeyHash); + void mapModifiersKeysQtX11(QHash& qtKeyToVirtKeyHash); + void mapAdditionalKeysQtX11(QHash& qtKeyToVirtKeyHash); + void mapKeypadKeysQtX11(QHash& qtKeyToVirtKeyHash); + void mapInternationKeysQtX11(QHash& qtKeyToVirtKeyHash); + void mapJapanKeysQtX11(QHash& qtKeyToVirtKeyHash); + void mapKoreanKeysQtX11(QHash& qtKeyToVirtKeyHash); + void mapDeadKeysQtX11(QHash& qtKeyToVirtKeyHash); + void mapBrowseKeysQtX11(QHash& qtKeyToVirtKeyHash); + void mapMediaKeysQtX11(QHash& qtKeyToVirtKeyHash); + void mapLaunchKeysQtX11(QHash& qtKeyToVirtKeyHash); }; diff --git a/src/quicksetdialog.cpp b/src/quicksetdialog.cpp old mode 100644 new mode 100755 index 8b76adbdf..e5dad42c5 --- a/src/quicksetdialog.cpp +++ b/src/quicksetdialog.cpp @@ -59,160 +59,13 @@ QuickSetDialog::QuickSetDialog(InputDevice *joystick, QWidget *parent) : temp = temp.arg(joystick->getSDLName()).arg(joystick->getName()); ui->joystickDialogLabel->setText(temp); - for (int i=0; i < currentset->getNumberSticks(); i++) - { - JoyControlStick *stick = currentset->getJoyStick(i); - QHash *stickButtons = stick->getButtons(); - QHashIterator iter(*stickButtons); - while (iter.hasNext()) - { - JoyControlStickButton *stickbutton = iter.next().value(); - - if (stick->getJoyMode() != JoyControlStick::EightWayMode) - { - if ((stickbutton->getJoyNumber() != static_cast(JoyControlStick::StickLeftUp)) && - (stickbutton->getJoyNumber() != static_cast(JoyControlStick::StickRightUp)) && - (stickbutton->getJoyNumber() != static_cast(JoyControlStick::StickLeftDown)) && - (stickbutton->getJoyNumber() != static_cast(JoyControlStick::StickRightDown))) - { - connect(stickbutton, &JoyControlStickButton::clicked, this, [this, stickbutton]() { - showStickButtonDialog(stickbutton); - }); - } - } - else - { - connect(stickbutton, &JoyControlStickButton::clicked, this, [this, stickbutton]() { - showStickButtonDialog(stickbutton); - }); - } - - if (!stickbutton->getIgnoreEventState()) - { - stickbutton->setIgnoreEventState(true); - } - } - } - - for (int i=0; i < currentset->getNumberAxes(); i++) - { - JoyAxis *axis = currentset->getJoyAxis(i); - - if (!axis->isPartControlStick() && axis->hasControlOfButtons()) - { - JoyAxisButton *naxisbutton = axis->getNAxisButton(); - JoyAxisButton *paxisbutton = axis->getPAxisButton(); - - connect(naxisbutton, &JoyAxisButton::clicked, this, [this, naxisbutton]() { - showAxisButtonDialog(naxisbutton); - }); - - connect(paxisbutton, &JoyAxisButton::clicked, this, [this, paxisbutton]() { - showAxisButtonDialog(paxisbutton); - }); - - if (!naxisbutton->getIgnoreEventState()) - { - naxisbutton->setIgnoreEventState(true); - } - - if (!paxisbutton->getIgnoreEventState()) - { - paxisbutton->setIgnoreEventState(true); - } - } - } - - for (int i = 0; i < currentset->getNumberHats(); i++) - { - JoyDPad *dpad = currentset->getJoyDPad(i); - QHash* dpadbuttons = dpad->getButtons(); - QHashIterator iter(*dpadbuttons); - while (iter.hasNext()) - { - JoyDPadButton *dpadbutton = iter.next().value(); - - if (dpad->getJoyMode() != JoyDPad::EightWayMode) - { - if ((dpadbutton->getJoyNumber() != JoyDPadButton::DpadLeftUp) && - (dpadbutton->getJoyNumber() != JoyDPadButton::DpadRightUp) && - (dpadbutton->getJoyNumber() != JoyDPadButton::DpadLeftDown) && - (dpadbutton->getJoyNumber() != JoyDPadButton::DpadRightDown)) - { - connect(dpadbutton, &JoyDPadButton::clicked, this, [this, dpadbutton] { - showDPadButtonDialog(dpadbutton); - }); - } - } - else - { - connect(dpadbutton, &JoyDPadButton::clicked, this, [this, dpadbutton] { - showDPadButtonDialog(dpadbutton); - }); - } + connectSticksForDialog(currentset); + connectAxesForDialog(currentset); + connectDpadForDialog(currentset); + connectVDpadForDialog(currentset); + connectBtnForDialog(currentset); - if (!dpadbutton->getIgnoreEventState()) - { - dpadbutton->setIgnoreEventState(true); - } - } - } - - for (int i=0; i < currentset->getNumberVDPads(); i++) - { - VDPad *dpad = currentset->getVDPad(i); - if (dpad != nullptr) - { - QHash* dpadbuttons = dpad->getButtons(); - QHashIterator iter(*dpadbuttons); - while (iter.hasNext()) - { - JoyDPadButton *dpadbutton = iter.next().value(); - - if (dpad->getJoyMode() != JoyDPad::EightWayMode) - { - if ((dpadbutton->getJoyNumber() != JoyDPadButton::DpadLeftUp) && - (dpadbutton->getJoyNumber() != JoyDPadButton::DpadRightUp) && - (dpadbutton->getJoyNumber() != JoyDPadButton::DpadLeftDown) && - (dpadbutton->getJoyNumber() != JoyDPadButton::DpadRightDown)) - { - connect(dpadbutton, &JoyDPadButton::clicked, this, [this, dpadbutton] { - showDPadButtonDialog(dpadbutton); - }); - } - } - else - { - connect(dpadbutton, &JoyDPadButton::clicked, this, [this, dpadbutton] { - showDPadButtonDialog(dpadbutton); - }); - } - - if (!dpadbutton->getIgnoreEventState()) - { - dpadbutton->setIgnoreEventState(true); - } - } - } - } - - for (int i = 0; i < currentset->getNumberButtons(); i++) - { - JoyButton *button = currentset->getJoyButton(i); - if ((button != nullptr) && !button->isPartVDPad()) - { - connect(button, &JoyButton::clicked, this, [this, button] { - showButtonDialog(button); - }); - - if (!button->getIgnoreEventState()) - { - button->setIgnoreEventState(true); - } - } - } - - connect(this, &QuickSetDialog::finished, this, &QuickSetDialog::restoreButtonStates); + connect(this, &QuickSetDialog::finished, this, &QuickSetDialog::restoreJoystickState); } @@ -239,7 +92,6 @@ QuickSetDialog::QuickSetDialog(InputDevice *joystick, ButtonEditDialogHelper* he lastButton = nullptr; setWindowTitle(trUtf8("Quick Set %1").arg(joystick->getName())); - setAttribute(Qt::WA_DeleteOnClose); setWindowModality(Qt::WindowModal); @@ -249,11 +101,24 @@ QuickSetDialog::QuickSetDialog(InputDevice *joystick, ButtonEditDialogHelper* he temp = temp.arg(joystick->getSDLName()).arg(joystick->getName()); ui->joystickDialogLabel->setText(temp); - for (int i=0; i < currentset->getNumberSticks(); i++) + connectSticksForDialog(currentset); + connectAxesForDialog(currentset); + connectDpadForDialog(currentset); + connectVDpadForDialog(currentset); + connectBtnForDialog(currentset); + + connect(this, &QuickSetDialog::finished, this, &QuickSetDialog::restoreJoystickState); +} + + +void QuickSetDialog::connectSticksForDialog(SetJoystick* currentset) +{ + for (int i = 0; i < currentset->getNumberSticks(); i++) { JoyControlStick *stick = currentset->getJoyStick(i); QHash *stickButtons = stick->getButtons(); QHashIterator iter(*stickButtons); + while (iter.hasNext()) { JoyControlStickButton *stickbutton = iter.next().value(); @@ -278,12 +143,14 @@ QuickSetDialog::QuickSetDialog(InputDevice *joystick, ButtonEditDialogHelper* he } if (!stickbutton->getIgnoreEventState()) - { stickbutton->setIgnoreEventState(true); - } } } +} + +void QuickSetDialog::connectAxesForDialog(SetJoystick* currentset) +{ for (int i = 0; i < currentset->getNumberAxes(); i++) { JoyAxis *axis = currentset->getJoyAxis(i); @@ -302,22 +169,23 @@ QuickSetDialog::QuickSetDialog(InputDevice *joystick, ButtonEditDialogHelper* he }); if (!naxisbutton->getIgnoreEventState()) - { naxisbutton->setIgnoreEventState(true); - } if (!paxisbutton->getIgnoreEventState()) - { paxisbutton->setIgnoreEventState(true); - } } } +} + - for (int i=0; i < currentset->getNumberHats(); i++) +void QuickSetDialog::connectDpadForDialog(SetJoystick* currentset) +{ + for (int i = 0; i < currentset->getNumberHats(); i++) { JoyDPad *dpad = currentset->getJoyDPad(i); QHash* dpadbuttons = dpad->getButtons(); QHashIterator iter(*dpadbuttons); + while (iter.hasNext()) { JoyDPadButton *dpadbutton = iter.next().value(); @@ -342,19 +210,23 @@ QuickSetDialog::QuickSetDialog(InputDevice *joystick, ButtonEditDialogHelper* he } if (!dpadbutton->getIgnoreEventState()) - { dpadbutton->setIgnoreEventState(true); - } } } +} + - for (int i=0; i < currentset->getNumberVDPads(); i++) +void QuickSetDialog::connectVDpadForDialog(SetJoystick* currentset) +{ + for (int i = 0; i < currentset->getNumberVDPads(); i++) { VDPad *dpad = currentset->getVDPad(i); + if (dpad != nullptr) { QHash* dpadbuttons = dpad->getButtons(); QHashIterator iter(*dpadbuttons); + while (iter.hasNext()) { JoyDPadButton *dpadbutton = iter.next().value(); @@ -379,16 +251,19 @@ QuickSetDialog::QuickSetDialog(InputDevice *joystick, ButtonEditDialogHelper* he } if (!dpadbutton->getIgnoreEventState()) - { dpadbutton->setIgnoreEventState(true); - } } } } +} + +void QuickSetDialog::connectBtnForDialog(SetJoystick* currentset) +{ for (int i = 0; i < currentset->getNumberButtons(); i++) { JoyButton *button = currentset->getJoyButton(i); + if ((button != nullptr) && !button->isPartVDPad()) { connect(button, &JoyButton::clicked, this, [this, button] { @@ -396,17 +271,12 @@ QuickSetDialog::QuickSetDialog(InputDevice *joystick, ButtonEditDialogHelper* he }); if (!button->getIgnoreEventState()) - { button->setIgnoreEventState(true); - } } } - - connect(this, &QuickSetDialog::finished, this, &QuickSetDialog::restoreButtonStates); - - } + QuickSetDialog::~QuickSetDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -414,56 +284,67 @@ QuickSetDialog::~QuickSetDialog() delete ui; } -void QuickSetDialog::showAxisButtonDialog(JoyAxisButton* joybtn) -{ - qInstallMessageHandler(MessageHandler::myMessageOutput); - - lastButton = joybtn; - if (helper != nullptr) { - helper = new ButtonEditDialogHelper(); - } +void QuickSetDialog::invokeMethodLastBtn(JoyButton* lastJoyBtn, Qt::ConnectionType connTypeForAlias, Qt::ConnectionType connTypeForNothing, Qt::ConnectionType connTypeForAll, bool possibleAxisAction) +{ + lastButton = lastJoyBtn; - helper->setThisButton(lastButton); + // sometimes appears situation, when we want to map an axis of stick, + // it's detected some state between pressing stick button and moving axis. + // It chooses a function for pressing a stick, but later appears a problem, + // because correct and prepared value is from the axis one, so static_cast + // for stick button is failing + // App can sometimes ask to three times for a button, but it's not going to crash this time + // if lastButton is still a null pointer, check possible value correctness coming from axis - helper->moveToThread(lastButton->thread()); + if (possibleAxisAction && (lastButton == nullptr)) + lastButton = qobject_cast(sender()); - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Thread in QuickSetDialog"; - #endif + if (helper != nullptr) helper = new ButtonEditDialogHelper(); - if (withClear) { + if (lastButton != nullptr) + { + helper->setThisButton(lastButton); + helper->moveToThread(lastButton->thread()); - QMetaObject::invokeMethod(lastButton, "clearSlotsEventReset", Q_ARG(bool, withTrue)); + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "Thread in QuickSetDialog"; + #endif - } + if (withClear) QMetaObject::invokeMethod(lastButton, "clearSlotsEventReset", Q_ARG(bool, withTrue)); + // when alias exists but not index + if ((alias != -1) && (index == -1)) { - // when alias exists but not index - if ((alias != -1) && (index == -1)) { + QMetaObject::invokeMethod(helper, invokeString, connTypeForAlias, + Q_ARG(int, code), + Q_ARG(int, alias), + Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); - QMetaObject::invokeMethod(helper, invokeString, Qt::QueuedConnection, - Q_ARG(int, code), - Q_ARG(int, alias), - Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); + // when alias doesn't exists and index too + } else if ((alias == -1) && (index == -1)) { - // when alias doesn't exists and index too - } else if ((alias == -1) && (index == -1)) { + QMetaObject::invokeMethod(helper, invokeString, connTypeForNothing, + Q_ARG(int, code), + Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); - QMetaObject::invokeMethod(helper, invokeString, Qt::QueuedConnection, - Q_ARG(int, code), - Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); + // when all exist (code, alias, index) + } else { - // when all exist (code, alias, index) - } else { + QMetaObject::invokeMethod(helper, invokeString, connTypeForAll, + Q_ARG(int, code), + Q_ARG(int, alias), + Q_ARG(int, index), + Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); + } + } +} - QMetaObject::invokeMethod(helper, invokeString, Qt::QueuedConnection, - Q_ARG(int, code), - Q_ARG(int, alias), - Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); +void QuickSetDialog::showAxisButtonDialog(JoyAxisButton* joybtn) +{ + qInstallMessageHandler(MessageHandler::myMessageOutput); - } + invokeMethodLastBtn(joybtn, Qt::QueuedConnection, Qt::QueuedConnection, Qt::QueuedConnection); this->close(); } @@ -472,56 +353,7 @@ void QuickSetDialog::showButtonDialog(JoyButton* joybtn) { qInstallMessageHandler(MessageHandler::myMessageOutput); - lastButton = joybtn; // static_cast - - if (helper == nullptr) { - helper = new ButtonEditDialogHelper(); - } - - helper->setThisButton(lastButton); - - helper->moveToThread(lastButton->thread()); - - - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Thread in QuickSetDialog"; - #endif - - - if (withClear) { - - QMetaObject::invokeMethod(lastButton, "clearSlotsEventReset", Q_ARG(bool, withTrue)); - - } - - - - // when alias exists but not index - if ((alias != -1) && (index == -1)) { - - QMetaObject::invokeMethod(helper, invokeString, Qt::QueuedConnection, - Q_ARG(int, code), - Q_ARG(int, alias), - Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); - - // when alias doesn't exists and index too - } else if ((alias == -1) && (index == -1)) { - - QMetaObject::invokeMethod(helper, invokeString, Qt::QueuedConnection, - Q_ARG(int, code), - Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); - - // when all exist (code, alias, index) - } else { - - QMetaObject::invokeMethod(helper, invokeString, Qt::QueuedConnection, - Q_ARG(int, code), - Q_ARG(int, alias), - Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); - - } - + invokeMethodLastBtn(joybtn, Qt::QueuedConnection, Qt::QueuedConnection, Qt::QueuedConnection); this->close(); } @@ -532,65 +364,7 @@ void QuickSetDialog::showStickButtonDialog(JoyControlStickButton* joyctrlstickbt lastButton = joyctrlstickbtn; - // sometimes appears situation, when we want to map an axis of stick, - // it's detected some state between pressing stick button and moving axis. - // It chooses a function for pressing a stick, but later appears problem, - // because correct and prepared value is from the axis one, so static_cast - // for stick button is failing - // App can sometimes ask to three times for a button, but it never is going to crash now - // if lastButton is still null pointer, check, if correct value comes from axis - if (lastButton == nullptr) lastButton = qobject_cast(sender()); - - if (helper == nullptr) { - helper = new ButtonEditDialogHelper(); - } - - // however when it's still a problem - // skip it and try again soon - // should be ok then - if (lastButton != nullptr) { - - helper->setThisButton(lastButton); - - helper->moveToThread(lastButton->thread()); - - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Thread in QuickSetDialog"; - #endif - - if (withClear) { - - QMetaObject::invokeMethod(lastButton, "clearSlotsEventReset", Q_ARG(bool, withTrue)); - - } - - // when alias exists but not index - if ((alias != -1) && (index == -1)) { - - QMetaObject::invokeMethod(helper, invokeString, Qt::QueuedConnection, - Q_ARG(int, code), - Q_ARG(int, alias), - Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); - - // when alias doesn't exists and index too - } else if ((alias == -1) && (index == -1)) { - - QMetaObject::invokeMethod(helper, invokeString, Qt::QueuedConnection, - Q_ARG(int, code), - Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); - - // when all exist (code, alias, index) - } else { - - QMetaObject::invokeMethod(helper, invokeString, Qt::QueuedConnection, - Q_ARG(int, code), - Q_ARG(int, alias), - Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); - - } - - } + invokeMethodLastBtn(joyctrlstickbtn, Qt::QueuedConnection, Qt::QueuedConnection, Qt::QueuedConnection, true); this->close(); } @@ -600,151 +374,134 @@ void QuickSetDialog::showDPadButtonDialog(JoyDPadButton* joydpadbtn) { qInstallMessageHandler(MessageHandler::myMessageOutput); - lastButton = joydpadbtn; - - if (helper == nullptr) { - helper = new ButtonEditDialogHelper(); - } - - helper->setThisButton(lastButton); - - helper->moveToThread(lastButton->thread()); - - - #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << "Thread in QuickSetDialog"; - #endif - - if (withClear) { - - QMetaObject::invokeMethod(lastButton, "clearSlotsEventReset", Q_ARG(bool, withTrue)); - - } - - // when alias exists but not index - if ((alias != -1) && (index == -1)) { - - QMetaObject::invokeMethod(helper, invokeString, Qt::QueuedConnection, - Q_ARG(int, code), - Q_ARG(int, alias), - Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); - - // when alias doesn't exists and index too - } else if ((alias == -1) && (index == -1)) { - - QMetaObject::invokeMethod(helper, invokeString, Qt::QueuedConnection, - Q_ARG(int, code), - Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); - - // when all exist (code, alias, index) - } else { - - QMetaObject::invokeMethod(helper, invokeString, Qt::BlockingQueuedConnection, - Q_ARG(int, code), - Q_ARG(int, alias), - Q_ARG(int, index), - Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); - - } - + invokeMethodLastBtn(joydpadbtn, Qt::QueuedConnection, Qt::QueuedConnection, Qt::BlockingQueuedConnection); this->close(); } -void QuickSetDialog::restoreButtonStates() +void QuickSetDialog::restoreJoystickState() { qInstallMessageHandler(MessageHandler::myMessageOutput); SetJoystick *currentset = joystick->getActiveSetJoystick(); + restoreSticksStates(currentset); + restoreAxesStates(currentset); + restoreHatsStates(currentset); + restoreVDPadsStates(currentset); + restoreButtonsStates(currentset); + + currentset->release(); +} + + +void QuickSetDialog::restoreSticksStates(SetJoystick *currentset) +{ for (int i = 0; i < currentset->getNumberSticks(); i++) { JoyControlStick *stick = currentset->getJoyStick(i); QHash *stickButtons = stick->getButtons(); QHashIterator iter(*stickButtons); + while (iter.hasNext()) { JoyControlStickButton *stickbutton = iter.next().value(); + if (stickbutton->getIgnoreEventState()) - { stickbutton->setIgnoreEventState(false); - } disconnect(stickbutton, &JoyControlStickButton::clicked, this, nullptr); } } +} + - for (int i=0; i < currentset->getNumberAxes(); i++) +void QuickSetDialog::restoreAxesStates(SetJoystick *currentset) +{ + for (int i = 0; i < currentset->getNumberAxes(); i++) { JoyAxis *axis = currentset->getJoyAxis(i); if (!axis->isPartControlStick() && axis->hasControlOfButtons()) { JoyAxisButton *naxisbutton = axis->getNAxisButton(); + if (naxisbutton->getIgnoreEventState()) - { naxisbutton->setIgnoreEventState(false); - } + JoyAxisButton *paxisbutton = axis->getPAxisButton(); + if (paxisbutton->getIgnoreEventState()) - { paxisbutton->setIgnoreEventState(false); - } + disconnect(naxisbutton, &JoyAxisButton::clicked, this, nullptr); disconnect(paxisbutton, &JoyAxisButton::clicked, this, nullptr); } } +} - for (int i=0; i < currentset->getNumberHats(); i++) + +void QuickSetDialog::restoreHatsStates(SetJoystick *currentset) +{ + for (int i = 0; i < currentset->getNumberHats(); i++) { JoyDPad *dpad = currentset->getJoyDPad(i); QHash* dpadbuttons = dpad->getButtons(); QHashIterator iter(*dpadbuttons); + while (iter.hasNext()) { JoyDPadButton *dpadbutton = iter.next().value(); + if (dpadbutton->getIgnoreEventState()) - { dpadbutton->setIgnoreEventState(false); - } + disconnect(dpadbutton, &JoyDPadButton::clicked, this, nullptr); } } +} + - for (int i=0; i < currentset->getNumberVDPads(); i++) +void QuickSetDialog::restoreVDPadsStates(SetJoystick *currentset) +{ + for (int i = 0; i < currentset->getNumberVDPads(); i++) { VDPad *dpad = currentset->getVDPad(i); + if (dpad != nullptr) { QHash* dpadbuttons = dpad->getButtons(); QHashIterator iter(*dpadbuttons); + while (iter.hasNext()) { JoyDPadButton *dpadbutton = iter.next().value(); + if (dpadbutton->getIgnoreEventState()) - { dpadbutton->setIgnoreEventState(false); - } + disconnect(dpadbutton, &JoyDPadButton::clicked, this, nullptr); } } } +} + - for (int i=0; i < currentset->getNumberButtons(); i++) +void QuickSetDialog::restoreButtonsStates(SetJoystick *currentset) +{ + for (int i = 0; i < currentset->getNumberButtons(); i++) { JoyButton *button = currentset->getJoyButton(i); + if ((button != nullptr) && !button->isPartVDPad()) { if (button->getIgnoreEventState()) - { button->setIgnoreEventState(false); - } + disconnect(button, &JoyButton::clicked, this, nullptr); } } - - currentset->release(); } diff --git a/src/quicksetdialog.h b/src/quicksetdialog.h old mode 100644 new mode 100755 index a2bbdffc0..8c7c3ccff --- a/src/quicksetdialog.h +++ b/src/quicksetdialog.h @@ -26,6 +26,8 @@ class InputDevice; class QWidget; +class SetJoystick; +class JoyControlStick; class JoyButton; class JoyControlStickButton; class JoyDPadButton; @@ -58,9 +60,21 @@ private slots: void showButtonDialog(JoyButton* joybtn); void showStickButtonDialog(JoyControlStickButton* joyctrlstickbtn); void showDPadButtonDialog(JoyDPadButton* joydpadbtn); - void restoreButtonStates(); + void restoreJoystickState(); private: + void invokeMethodLastBtn(JoyButton* lastJoyBtn, Qt::ConnectionType connTypeForAlias, Qt::ConnectionType connTypeForNothing, Qt::ConnectionType connTypeForAll, bool possibleAxisAction = false); + void restoreSticksStates(SetJoystick *currentset); + void restoreAxesStates(SetJoystick *currentset); + void restoreHatsStates(SetJoystick *currentset); + void restoreVDPadsStates(SetJoystick *currentset); + void restoreButtonsStates(SetJoystick *currentset); + void connectSticksForDialog(SetJoystick* currentset); + void connectAxesForDialog(SetJoystick* currentset); + void connectDpadForDialog(SetJoystick* currentset); + void connectVDpadForDialog(SetJoystick* currentset); + void connectBtnForDialog(SetJoystick* currentset); + Ui::QuickSetDialog *ui; InputDevice *joystick; diff --git a/src/quicksetdialog.ui b/src/quicksetdialog.ui old mode 100644 new mode 100755 diff --git a/src/resources.qrc b/src/resources.qrc old mode 100644 new mode 100755 index 9b1eda65d..54d32ead9 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -1,6 +1,10 @@ - images/antimicro.png + images/16x16/com.github.juliagoda.antimicro.png + images/24x24/com.github.juliagoda.antimicro.png + images/32x32/com.github.juliagoda.antimicro.png + images/48x48/com.github.juliagoda.antimicro.png + images/64x64/com.github.juliagoda.antimicro.png images/antimicro_trayicon.png images/controllermap.png images/axis.png diff --git a/src/resources_windows.qrc b/src/resources_windows.qrc old mode 100644 new mode 100755 diff --git a/src/sdleventreader.cpp b/src/sdleventreader.cpp old mode 100644 new mode 100755 index 2b4477971..c8eb6d60f --- a/src/sdleventreader.cpp +++ b/src/sdleventreader.cpp @@ -17,11 +17,11 @@ #include "sdleventreader.h" +#include "globalvariables.h" #include "messagehandler.h" #include "inputdevice.h" #include "antimicrosettings.h" #include "common.h" - //#include "logger.h" #include @@ -43,7 +43,7 @@ SDLEventReader::SDLEventReader(QMap *joysticks, this->settings = settings; settings->getLock()->lock(); this->pollRate = settings->value("GamepadPollRate", - AntiMicroSettings::defaultSDLGamepadPollRate).toUInt(); + GlobalVariables::AntimicroSettings::defaultSDLGamepadPollRate).toUInt(); settings->getLock()->unlock(); pollRateTimer.setParent(this); @@ -72,18 +72,19 @@ void SDLEventReader::initSDL() // SDL_INIT_GAMECONTROLLER should automatically initialize SDL_INIT_JOYSTICK // but it doesn't seem to be the case with v2.0.4 SDL_Init(SDL_INIT_GAMECONTROLLER | SDL_INIT_JOYSTICK); - SDL_JoystickEventState(SDL_ENABLE); - sdlIsOpen = true; + sdlIsOpen = true; settings->getLock()->lock(); settings->beginGroup("Mappings"); QStringList mappings = settings->allKeys(); QStringListIterator iter(mappings); + while (iter.hasNext()) { QString tempstring = iter.next(); QString mappingSetting = settings->value(tempstring, QString()).toString(); + if (!mappingSetting.isEmpty()) { QByteArray temparray = mappingSetting.toUtf8(); @@ -112,9 +113,8 @@ void SDLEventReader::closeSDL() closeDevices(); // Clear any pending events - while (SDL_PollEvent(&event) > 0) - { - } + while (SDL_PollEvent(&event) > 0) {} + SDL_Quit(); sdlIsOpen = false; @@ -124,16 +124,10 @@ void SDLEventReader::closeSDL() void SDLEventReader::performWork() { - - if (sdlIsOpen) + if (sdlIsOpen && (eventStatus() > 0)) { - int status = CheckForEvents(); - - if (status) - { - pollRateTimer.stop(); - emit eventRaised(); - } + pollRateTimer.stop(); + emit eventRaised(); } } @@ -158,7 +152,6 @@ void SDLEventReader::refresh() if (sdlIsOpen) { stop(); - QTimer::singleShot(0, this, SLOT(secondaryRefresh())); } } @@ -167,10 +160,7 @@ void SDLEventReader::secondaryRefresh() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (sdlIsOpen) - { - closeSDL(); - } + if (sdlIsOpen) closeSDL(); initSDL(); } @@ -182,9 +172,7 @@ void SDLEventReader::clearEvents() if (sdlIsOpen) { SDL_Event event; - while (SDL_PollEvent(&event) > 0) - { - } + while (SDL_PollEvent(&event) > 0) {} } } @@ -195,16 +183,17 @@ bool SDLEventReader::isSDLOpen() return sdlIsOpen; } -int SDLEventReader::CheckForEvents() +int SDLEventReader::eventStatus() { int result = 0; SDL_PumpEvents(); + switch (SDL_PeepEvents(nullptr, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT)) { case -1: { - Logger::LogError(QString("SDL Error: %1"). + Logger::LogError(QString("SDL Error: %1"). arg(QString(SDL_GetError())), true, true); result = 0; @@ -213,10 +202,7 @@ int SDLEventReader::CheckForEvents() } case 0: { - if (!pollRateTimer.isActive()) - { - pollRateTimer.start(); - } + if (!pollRateTimer.isActive()) pollRateTimer.start(); break; } @@ -236,16 +222,13 @@ void SDLEventReader::updatePollRate(int tempPollRate) if ((tempPollRate >= 1) && (tempPollRate <= 16)) { - bool wasActive = pollRateTimer.isActive(); + bool pollTimerWasActive = pollRateTimer.isActive(); pollRateTimer.stop(); this->pollRate = tempPollRate; pollRateTimer.setInterval(pollRate); - if (wasActive) - { - pollRateTimer.start(); - } + if (pollTimerWasActive) pollRateTimer.start(); } } @@ -271,17 +254,15 @@ void SDLEventReader::closeDevices() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (sdlIsOpen) + if (sdlIsOpen && (joysticks != nullptr)) { - if (joysticks) + QMapIterator iter(*joysticks); + + while (iter.hasNext()) { - QMapIterator iter(*joysticks); - while (iter.hasNext()) - { - iter.next(); - InputDevice *current = iter.value(); - current->closeSDLDevice(); - } + iter.next(); + InputDevice *current = iter.value(); + current->closeSDLDevice(); } } } diff --git a/src/sdleventreader.h b/src/sdleventreader.h old mode 100644 new mode 100755 index 6ea4b2e27..f8ab1651c --- a/src/sdleventreader.h +++ b/src/sdleventreader.h @@ -50,7 +50,7 @@ class SDLEventReader : public QObject void initSDL(); void closeSDL(); void clearEvents(); - int CheckForEvents(); + int eventStatus(); signals: void eventRaised(); diff --git a/src/setaxisthrottledialog.cpp b/src/setaxisthrottledialog.cpp old mode 100644 new mode 100755 index 3cab9573e..bf9ef32b2 --- a/src/setaxisthrottledialog.cpp +++ b/src/setaxisthrottledialog.cpp @@ -24,7 +24,6 @@ #include #include - SetAxisThrottleDialog::SetAxisThrottleDialog(JoyAxis *axis, QWidget *parent) : QDialog(parent), ui(new Ui::SetAxisThrottleDialog) diff --git a/src/setaxisthrottledialog.h b/src/setaxisthrottledialog.h old mode 100644 new mode 100755 diff --git a/src/setaxisthrottledialog.ui b/src/setaxisthrottledialog.ui old mode 100644 new mode 100755 diff --git a/src/setjoystick.cpp b/src/setjoystick.cpp old mode 100644 new mode 100755 index 44602e25a..76a6a8d31 --- a/src/setjoystick.cpp +++ b/src/setjoystick.cpp @@ -17,6 +17,7 @@ #include "setjoystick.h" +#include "globalvariables.h" #include "messagehandler.h" #include "inputdevice.h" #include "joycontrolstick.h" @@ -32,16 +33,13 @@ #include -const int SetJoystick::MAXNAMELENGTH = 30; -const int SetJoystick::RAISEDDEADZONE = 20000; - SetJoystick::SetJoystick(InputDevice *device, int index, QObject *parent) : QObject(parent) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->device = device; - this->index = index; + m_device = device; + m_index = index; reset(); } @@ -51,12 +49,10 @@ SetJoystick::SetJoystick(InputDevice *device, int index, bool runreset, QObject { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->device = device; - this->index = index; - if (runreset) - { - reset(); - } + m_device = device; + m_index = index; + + if (runreset) reset(); } SetJoystick::~SetJoystick() @@ -113,10 +109,10 @@ void SetJoystick::refreshButtons() deleteButtons(); - for (int i=0; i < device->getNumberRawButtons(); i++) + for (int i=0; i < m_device->getNumberRawButtons(); i++) { - JoyButton *button = new JoyButton (i, index, this, this); - buttons.insert(i, button); + JoyButton *button = new JoyButton (i, m_index, this, this); + m_buttons.insert(i, button); enableButtonConnections(button); } } @@ -130,7 +126,7 @@ void SetJoystick::refreshAxes() InputDevice *device = getInputDevice(); for (int i=0; i < device->getNumberRawAxes(); i++) { - JoyAxis *axis = new JoyAxis(i, index, this, this); + JoyAxis *axis = new JoyAxis(i, m_index, this, this); axes.insert(i, axis); if (device->hasCalibrationThrottle(i)) @@ -149,9 +145,9 @@ void SetJoystick::refreshHats() deleteHats(); - for (int i=0; i < device->getNumberRawHats(); i++) + for (int i=0; i < m_device->getNumberRawHats(); i++) { - JoyDPad *dpad = new JoyDPad(i, index, this, this); + JoyDPad *dpad = new JoyDPad(i, m_index, this, this); hats.insert(i, dpad); enableHatConnections(dpad); } @@ -162,17 +158,19 @@ void SetJoystick::deleteButtons() qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getButtons()); + while (iter.hasNext()) { JoyButton *button = iter.next().value(); - if (button) + + if (button != nullptr) { delete button; button = nullptr; } } - buttons.clear(); + m_buttons.clear(); } @@ -181,10 +179,12 @@ void SetJoystick::deleteAxes() qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(axes); + while (iter.hasNext()) { JoyAxis *axis = iter.next().value(); - if (axis) + + if (axis != nullptr) { delete axis; axis = nullptr; @@ -199,10 +199,12 @@ void SetJoystick::deleteSticks() qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getSticks()); + while (iter.hasNext()) { JoyControlStick *stick = iter.next().value(); - if (stick) + + if (stick != nullptr) { delete stick; stick = nullptr; @@ -217,10 +219,12 @@ void SetJoystick::deleteVDpads() qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getVdpads()); + while (iter.hasNext()) { VDPad *dpad = iter.next().value(); - if (dpad) + + if (dpad != nullptr) { delete dpad; dpad = nullptr; @@ -236,10 +240,12 @@ void SetJoystick::deleteHats() qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getHats()); + while (iter.hasNext()) { JoyDPad *dpad = iter.next().value(); - if (dpad) + + if (dpad != nullptr) { delete dpad; dpad = nullptr; @@ -293,7 +299,7 @@ void SetJoystick::reset() refreshAxes(); refreshButtons(); refreshHats(); - name = QString(); + m_name = QString(); } void SetJoystick::propogateSetChange(int index) @@ -307,50 +313,40 @@ void SetJoystick::propogateSetButtonAssociation(int button, int newset, int mode { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (newset != index) - { - emit setAssignmentButtonChanged(button, index, newset, mode); - } + if (newset != m_index) + emit setAssignmentButtonChanged(button, m_index, newset, mode); } void SetJoystick::propogateSetAxisButtonAssociation(int button, int axis, int newset, int mode) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (newset != index) - { - emit setAssignmentAxisChanged(button, axis, index, newset, mode); - } + if (newset != m_index) + emit setAssignmentAxisChanged(button, axis, m_index, newset, mode); } void SetJoystick::propogateSetStickButtonAssociation(int button, int stick, int newset, int mode) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (newset != index) - { - emit setAssignmentStickChanged(button, stick, index, newset, mode); - } + if (newset != m_index) + emit setAssignmentStickChanged(button, stick, m_index, newset, mode); } void SetJoystick::propogateSetDPadButtonAssociation(int button, int dpad, int newset, int mode) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (newset != index) - { - emit setAssignmentDPadChanged(button, dpad, index, newset, mode); - } + if (newset != m_index) + emit setAssignmentDPadChanged(button, dpad, m_index, newset, mode); } void SetJoystick::propogateSetVDPadButtonAssociation(int button, int dpad, int newset, int mode) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (newset != index) - { - emit setAssignmentVDPadChanged(button, dpad, index, newset, mode); - } + if (newset != m_index) + emit setAssignmentVDPadChanged(button, dpad, m_index, newset, mode); } /** @@ -362,16 +358,17 @@ void SetJoystick::release() qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iterAxes(axes); + while (iterAxes.hasNext()) { JoyAxis *axis = iterAxes.next().value(); axis->clearPendingEvent(); axis->joyEvent(axis->getCurrentThrottledDeadValue(), true); axis->eventReset(); - } QHashIterator iterDPads(getHats()); + while (iterDPads.hasNext()) { JoyDPad *dpad = iterDPads.next().value(); @@ -381,6 +378,7 @@ void SetJoystick::release() } QHashIterator iterButtons(getButtons()); + while (iterButtons.hasNext()) { JoyButton *button = iterButtons.next().value(); @@ -396,48 +394,33 @@ void SetJoystick::readConfig(QXmlStreamReader *xml) if (xml->isStartElement() && (xml->name() == "set")) { - xml->readNextStartElement(); + while (!xml->atEnd() && (!xml->isEndElement() && (xml->name() != "set"))) { if ((xml->name() == "button") && xml->isStartElement()) { int index = xml->attributes().value("index").toString().toInt(); - JoyButton *button = getJoyButton(index-1); - if (button) - { - button->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } + JoyButton *button = getJoyButton(index - 1); + + if (button != nullptr) button->readConfig(xml); + else xml->skipCurrentElement(); } else if ((xml->name() == "axis") && xml->isStartElement()) { int index = xml->attributes().value("index").toString().toInt(); - JoyAxis *axis = getJoyAxis(index-1); - if (axis) - { - axis->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } + JoyAxis *axis = getJoyAxis(index - 1); + + if (axis != nullptr) axis->readConfig(xml); + else xml->skipCurrentElement(); } else if ((xml->name() == "dpad") && xml->isStartElement()) { int index = xml->attributes().value("index").toString().toInt(); - JoyDPad *dpad = getJoyDPad(index-1); - if (dpad) - { - dpad->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } + JoyDPad *dpad = getJoyDPad(index - 1); + + if (dpad != nullptr) dpad->readConfig(xml); + else xml->skipCurrentElement(); } else if ((xml->name() == "stick") && xml->isStartElement()) { @@ -447,14 +430,9 @@ void SetJoystick::readConfig(QXmlStreamReader *xml) { stickIndex -= 1; JoyControlStick *stick = getJoyStick(stickIndex); - if (stick) - { - stick->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } + + if (stick != nullptr) stick->readConfig(xml); + else xml->skipCurrentElement(); } else { @@ -464,28 +442,20 @@ void SetJoystick::readConfig(QXmlStreamReader *xml) else if ((xml->name() == "vdpad") && xml->isStartElement()) { int index = xml->attributes().value("index").toString().toInt(); - VDPad *vdpad = getVDPad(index-1); - if (vdpad) - { - vdpad->readConfig(xml); - } - else - { - xml->skipCurrentElement(); - } + VDPad *vdpad = getVDPad(index - 1); + + if (vdpad != nullptr) vdpad->readConfig(xml); + else xml->skipCurrentElement(); } else if ((xml->name() == "name") && xml->isStartElement()) { QString temptext = xml->readElementText(); - if (!temptext.isEmpty()) - { - setName(temptext); - } + + if (!temptext.isEmpty()) setName(temptext); } else - { - // If none of the above, skip the element - xml->skipCurrentElement(); + { + xml->skipCurrentElement(); // If none of the above, skip the element } xml->readNextStartElement(); @@ -500,48 +470,45 @@ void SetJoystick::writeConfig(QXmlStreamWriter *xml) if (!isSetEmpty()) { xml->writeStartElement("set"); + xml->writeAttribute("index", QString::number(m_index+1)); - xml->writeAttribute("index", QString::number(index+1)); + if (!m_name.isEmpty()) + xml->writeTextElement("name", m_name); - if (!name.isEmpty()) - { - xml->writeTextElement("name", name); - } - - for (int i=0; i < getNumberSticks(); i++) + for (int i = 0; i < getNumberSticks(); i++) { JoyControlStick *stick = getJoyStick(i); stick->writeConfig(xml); } - for (int i=0; i < getNumberVDPads(); i++) + for (int i = 0; i < getNumberVDPads(); i++) { VDPad *vdpad = getVDPad(i); - if (vdpad) - { - vdpad->writeConfig(xml); - } + + if (vdpad != nullptr) vdpad->writeConfig(xml); } - for (int i=0; i < getNumberAxes(); i++) + for (int i = 0; i < getNumberAxes(); i++) { JoyAxis *axis = getJoyAxis(i); + if (!axis->isPartControlStick() && axis->hasControlOfButtons()) { axis->writeConfig(xml); } } - for (int i=0; i < getNumberHats(); i++) + for (int i = 0; i < getNumberHats(); i++) { JoyDPad *dpad = getJoyDPad(i); dpad->writeConfig(xml); } - for (int i=0; i < getNumberButtons(); i++) + for (int i = 0 ; i < getNumberButtons(); i++) { JoyButton *button = getJoyButton(i); - if (button && !button->isPartVDPad()) + + if ((button != nullptr) && !button->isPartVDPad()) { button->writeConfig(xml); } @@ -557,53 +524,48 @@ bool SetJoystick::isSetEmpty() bool result = true; QHashIterator iter(getButtons()); + while (iter.hasNext() && result) { JoyButton *button = iter.next().value(); - if (!button->isDefault()) - { - result = false; - } + + if (!button->isDefault()) result = false; } QHashIterator iter2(axes); + while (iter2.hasNext() && result) { JoyAxis *axis = iter2.next().value(); - if (!axis->isDefault()) - { - result = false; - } + + if (!axis->isDefault()) result = false; } QHashIterator iter3(getHats()); + while (iter3.hasNext() && result) { JoyDPad *dpad = iter3.next().value(); - if (!dpad->isDefault()) - { - result = false; - } + + if (!dpad->isDefault()) result = false; } QHashIterator iter4(getSticks()); + while (iter4.hasNext() && result) { JoyControlStick *stick = iter4.next().value(); - if (!stick->isDefault()) - { - result = false; - } + + if (!stick->isDefault()) result = false; } QHashIterator iter5(getVdpads()); + while (iter5.hasNext() && result) { VDPad *vdpad = iter5.next().value(); - if (!vdpad->isDefault()) - { - result = false; - } + + if (!vdpad->isDefault()) result = false; } return result; @@ -614,10 +576,9 @@ void SetJoystick::propogateSetAxisThrottleSetting(int index) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyAxis *axis = axes.value(index); - if (axis) - { + + if (axis != nullptr) emit setAssignmentAxisThrottleChanged(index, axis->getCurrentlyAssignedSet()); - } } void SetJoystick::addControlStick(int index, JoyControlStick *stick) @@ -628,9 +589,11 @@ void SetJoystick::addControlStick(int index, JoyControlStick *stick) connect(stick, &JoyControlStick::stickNameChanged, this, &SetJoystick::propogateSetStickNameChange); QHashIterator iter(*stick->getButtons()); + while (iter.hasNext()) { JoyControlStickButton *button = iter.next().value(); + if (button != nullptr) { connect(button, &JoyControlStickButton::setChangeActivated, this, &SetJoystick::propogateSetChange); @@ -663,10 +626,12 @@ void SetJoystick::addVDPad(int index, VDPad *vdpad) connect(vdpad, &VDPad::dpadNameChanged, this, &SetJoystick::propogateSetVDPadNameChange); QHashIterator iter(*vdpad->getButtons()); + while (iter.hasNext()) { JoyDPadButton *button = iter.next().value(); - if (button) + + if (button != nullptr) { connect(button, &JoyDPadButton::setChangeActivated, this, &SetJoystick::propogateSetChange); connect(button, &JoyDPadButton::setAssignmentChanged, this, &SetJoystick::propogateSetVDPadButtonAssociation); @@ -694,14 +659,14 @@ int SetJoystick::getIndex() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return index; + return m_index; } int SetJoystick::getRealIndex() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return index + 1; + return m_index + 1; } void SetJoystick::propogateSetButtonClick(int button) @@ -709,18 +674,16 @@ void SetJoystick::propogateSetButtonClick(int button) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyButton* jButton = qobject_cast(sender()); - if (jButton != nullptr) + + if (jButton != nullptr && !jButton->getIgnoreEventState()) { - if (!jButton->getIgnoreEventState()) - { - emit setButtonClick(index, button); - lastClickedButtons.append(jButton); + emit setButtonClick(m_index, button); + lastClickedButtons.append(jButton); - #ifndef QT_DEBUG_NO_OUTPUT + #ifndef QT_DEBUG_NO_OUTPUT qDebug() << "Added button " << jButton->getPartialName(false,true) << " to list"; qDebug() << "List has " << getLastClickedButtons().count() << " buttons"; - #endif - } + #endif } } @@ -733,7 +696,6 @@ void SetJoystick::removeAllBtnFromQueue() { if (!getLastClickedButtons().isEmpty()) lastClickedButtons.clear(); - } int SetJoystick::getCountBtnInList(QString partialName) { @@ -741,7 +703,9 @@ int SetJoystick::getCountBtnInList(QString partialName) { int count = 0; foreach(const JoyButton* joyBtn, getLastClickedButtons()) { - if (joyBtn->getPartialName(false, true) == partialName) count++; + + if (joyBtn->getPartialName(false, true) == partialName) + count++; } return count; @@ -751,13 +715,12 @@ void SetJoystick::propogateSetButtonRelease(int button) { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyButton *jButton = qobject_cast(sender()); // static_cast - if (jButton) + JoyButton *jButton = qobject_cast(sender()); + + if (jButton != nullptr) { if (!jButton->getIgnoreEventState()) - { - emit setButtonRelease(index, button); - } + emit setButtonRelease(m_index, button); } } @@ -765,14 +728,14 @@ void SetJoystick::propogateSetAxisButtonClick(int button) { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyAxisButton *axisButton = qobject_cast(sender()); // static_cast - if (axisButton) + JoyAxisButton *axisButton = qobject_cast(sender()); + + if (axisButton != nullptr) { JoyAxis *axis = axisButton->getAxis(); + if (!axisButton->getIgnoreEventState()) - { - emit setAxisButtonClick(index, axis->getIndex(), button); - } + emit setAxisButtonClick(m_index, axis->getIndex(), button); } } @@ -780,14 +743,14 @@ void SetJoystick::propogateSetAxisButtonRelease(int button) { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyAxisButton *axisButton = qobject_cast(sender()); // static_cast - if (axisButton) + JoyAxisButton *axisButton = qobject_cast(sender()); + + if (axisButton != nullptr) { JoyAxis *axis = axisButton->getAxis(); + if (!axisButton->getIgnoreEventState()) - { - emit setAxisButtonRelease(index, axis->getIndex(), button); - } + emit setAxisButtonRelease(m_index, axis->getIndex(), button); } } @@ -795,14 +758,14 @@ void SetJoystick::propogateSetStickButtonClick(int button) { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyControlStickButton *stickButton = qobject_cast(sender()); // static_cast - if (stickButton) + JoyControlStickButton *stickButton = qobject_cast(sender()); + + if (stickButton != nullptr) { JoyControlStick *stick = stickButton->getStick(); + if (stick && !stickButton->getIgnoreEventState()) - { - emit setStickButtonClick(index, stick->getIndex(), button); - } + emit setStickButtonClick(m_index, stick->getIndex(), button); } } @@ -810,14 +773,14 @@ void SetJoystick::propogateSetStickButtonRelease(int button) { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyControlStickButton *stickButton = qobject_cast(sender()); // static_cast - if (stickButton) + JoyControlStickButton *stickButton = qobject_cast(sender()); + + if (stickButton != nullptr) { JoyControlStick *stick = stickButton->getStick(); + if (!stickButton->getIgnoreEventState()) - { - emit setStickButtonRelease(index, stick->getIndex(), button); - } + emit setStickButtonRelease(m_index, stick->getIndex(), button); } } @@ -825,14 +788,16 @@ void SetJoystick::propogateSetDPadButtonClick(int button) { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyDPadButton *dpadButton = qobject_cast(sender()); // static_cast + JoyDPadButton *dpadButton = qobject_cast(sender()); + if (dpadButton) { JoyDPad *dpad = dpadButton->getDPad(); + if (dpad && dpadButton->getButtonState() && !dpadButton->getIgnoreEventState()) { - emit setDPadButtonClick(index, dpad->getIndex(), button); + emit setDPadButtonClick(m_index, dpad->getIndex(), button); } } } @@ -841,14 +806,16 @@ void SetJoystick::propogateSetDPadButtonRelease(int button) { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyDPadButton *dpadButton = qobject_cast(sender()); // static_cast - if (dpadButton) + JoyDPadButton *dpadButton = qobject_cast(sender()); + + if (dpadButton != nullptr) { JoyDPad *dpad = dpadButton->getDPad(); + if (dpad && !dpadButton->getButtonState() && !dpadButton->getIgnoreEventState()) { - emit setDPadButtonRelease(index, dpad->getIndex(), button); + emit setDPadButtonRelease(m_index, dpad->getIndex(), button); } } } @@ -857,7 +824,7 @@ void SetJoystick::propogateSetButtonNameChange() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyButton *button = qobject_cast(sender()); // static_cast + JoyButton *button = qobject_cast(sender()); disconnect(button, &JoyButton::buttonNameChanged, this, &SetJoystick::propogateSetButtonNameChange); emit setButtonNameChange(button->getJoyNumber()); connect(button, &JoyButton::buttonNameChanged, this, &SetJoystick::propogateSetButtonNameChange); @@ -867,7 +834,7 @@ void SetJoystick::propogateSetAxisButtonNameChange() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyAxisButton *button = qobject_cast(sender()); // static_cast + JoyAxisButton *button = qobject_cast(sender()); disconnect(button, &JoyAxisButton::buttonNameChanged, this, &SetJoystick::propogateSetAxisButtonNameChange); emit setAxisButtonNameChange(button->getAxis()->getIndex(), button->getJoyNumber()); connect(button, &JoyAxisButton::buttonNameChanged, this, &SetJoystick::propogateSetAxisButtonNameChange); @@ -877,7 +844,7 @@ void SetJoystick::propogateSetStickButtonNameChange() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyControlStickButton *button = qobject_cast(sender()); // static_cast + JoyControlStickButton *button = qobject_cast(sender()); disconnect(button, &JoyControlStickButton::buttonNameChanged, this, &SetJoystick::propogateSetStickButtonNameChange); emit setStickButtonNameChange(button->getStick()->getIndex(), button->getJoyNumber()); connect(button, &JoyControlStickButton::buttonNameChanged, this, &SetJoystick::propogateSetStickButtonNameChange); @@ -887,7 +854,7 @@ void SetJoystick::propogateSetDPadButtonNameChange() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyDPadButton *button = qobject_cast(sender()); // static_cast + JoyDPadButton *button = qobject_cast(sender()); disconnect(button, &JoyDPadButton::buttonNameChanged, this, &SetJoystick::propogateSetDPadButtonNameChange); emit setDPadButtonNameChange(button->getDPad()->getIndex(), button->getJoyNumber()); connect(button, &JoyDPadButton::buttonNameChanged, this, &SetJoystick::propogateSetDPadButtonNameChange); @@ -897,7 +864,7 @@ void SetJoystick::propogateSetVDPadButtonNameChange() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyDPadButton *button = qobject_cast(sender()); // static_cast + JoyDPadButton *button = qobject_cast(sender()); disconnect(button, &JoyDPadButton::buttonNameChanged, this, &SetJoystick::propogateSetVDPadButtonNameChange); emit setVDPadButtonNameChange(button->getDPad()->getIndex(), button->getJoyNumber()); connect(button, &JoyDPadButton::buttonNameChanged, this, &SetJoystick::propogateSetVDPadButtonNameChange); @@ -907,7 +874,7 @@ void SetJoystick::propogateSetAxisNameChange() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyAxis *axis = qobject_cast(sender()); // static_cast + JoyAxis *axis = qobject_cast(sender()); disconnect(axis, &JoyAxis::axisNameChanged, this, &SetJoystick::propogateSetAxisNameChange); emit setAxisNameChange(axis->getIndex()); connect(axis, &JoyAxis::axisNameChanged, this, &SetJoystick::propogateSetAxisNameChange); @@ -917,7 +884,7 @@ void SetJoystick::propogateSetStickNameChange() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyControlStick *stick = qobject_cast(sender()); // static_cast + JoyControlStick *stick = qobject_cast(sender()); disconnect(stick, &JoyControlStick::stickNameChanged, this, &SetJoystick::propogateSetStickNameChange); emit setStickNameChange(stick->getIndex()); connect(stick, &JoyControlStick::stickNameChanged, this, &SetJoystick::propogateSetStickNameChange); @@ -927,7 +894,7 @@ void SetJoystick::propogateSetDPadNameChange() { qInstallMessageHandler(MessageHandler::myMessageOutput); - JoyDPad *dpad = qobject_cast(sender()); // static_cast + JoyDPad *dpad = qobject_cast(sender()); disconnect(dpad, &JoyDPad::dpadNameChanged, this, &SetJoystick::propogateSetDPadButtonNameChange); emit setDPadNameChange(dpad->getIndex()); connect(dpad, &JoyDPad::dpadNameChanged, this, &SetJoystick::propogateSetDPadButtonNameChange); @@ -937,7 +904,7 @@ void SetJoystick::propogateSetVDPadNameChange() { qInstallMessageHandler(MessageHandler::myMessageOutput); - VDPad *vdpad = qobject_cast(sender()); // static_cast + VDPad *vdpad = qobject_cast(sender()); disconnect(vdpad, &VDPad::dpadNameChanged, this, &SetJoystick::propogateSetVDPadNameChange); emit setVDPadNameChange(vdpad->getIndex()); connect(vdpad, &VDPad::dpadNameChanged, this, &SetJoystick::propogateSetVDPadNameChange); @@ -948,20 +915,21 @@ void SetJoystick::setIgnoreEventState(bool ignore) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator iter(getButtons()); + while (iter.hasNext()) { JoyButton *button = iter.next().value(); - if (button) - { - button->setIgnoreEventState(ignore); - } + + if (button != nullptr) button->setIgnoreEventState(ignore); } QHashIterator iter2(axes); + while (iter2.hasNext()) { JoyAxis *axis = iter2.next().value(); - if (axis) + + if (axis != nullptr) { JoyAxisButton *naxisbutton = axis->getNAxisButton(); naxisbutton->setIgnoreEventState(ignore); @@ -972,33 +940,36 @@ void SetJoystick::setIgnoreEventState(bool ignore) } QHashIterator iter3(getHats()); + while (iter3.hasNext()) { JoyDPad *dpad = iter3.next().value(); - if (dpad) + if (dpad != nullptr) { QHash* dpadbuttons = dpad->getButtons(); QHashIterator iterdpadbuttons(*dpadbuttons); + while (iterdpadbuttons.hasNext()) { JoyDPadButton *dpadbutton = iterdpadbuttons.next().value(); - if (dpadbutton) - { - dpadbutton->setIgnoreEventState(ignore); - } + + if (dpadbutton) dpadbutton->setIgnoreEventState(ignore); } } } QHashIterator iter4(getSticks()); + while (iter4.hasNext()) { JoyControlStick *stick = iter4.next().value(); - if (stick) + + if (stick != nullptr) { QHash *stickButtons = stick->getButtons(); QHashIterator iterstickbuttons(*stickButtons); + while (iterstickbuttons.hasNext()) { JoyControlStickButton *stickbutton = iterstickbuttons.next().value(); @@ -1008,13 +979,16 @@ void SetJoystick::setIgnoreEventState(bool ignore) } QHashIterator iter5(getVdpads()); + while (iter5.hasNext()) { VDPad *vdpad = iter5.next().value(); - if (vdpad) + + if (vdpad != nullptr) { QHash* dpadbuttons = vdpad->getButtons(); QHashIterator itervdpadbuttons(*dpadbuttons); + while (itervdpadbuttons.hasNext()) { JoyDPadButton *dpadbutton = itervdpadbuttons.next().value(); @@ -1022,7 +996,6 @@ void SetJoystick::setIgnoreEventState(bool ignore) } } } - } void SetJoystick::propogateSetAxisActivated(int value) @@ -1030,7 +1003,7 @@ void SetJoystick::propogateSetAxisActivated(int value) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyAxis *axis = qobject_cast(sender()); // static_cast - emit setAxisActivated(this->index, axis->getIndex(), value); + emit setAxisActivated(m_index, axis->getIndex(), value); } void SetJoystick::propogateSetAxisReleased(int value) @@ -1038,7 +1011,7 @@ void SetJoystick::propogateSetAxisReleased(int value) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyAxis *axis = qobject_cast(sender()); // static_cast - emit setAxisReleased(this->index, axis->getIndex(), value); + emit setAxisReleased(m_index, axis->getIndex(), value); } void SetJoystick::enableButtonConnections(JoyButton *button) @@ -1048,9 +1021,9 @@ void SetJoystick::enableButtonConnections(JoyButton *button) connect(button, &JoyButton::setChangeActivated, this, &SetJoystick::propogateSetChange); connect(button, &JoyButton::setAssignmentChanged, this, &SetJoystick::propogateSetButtonAssociation); connect(button, &JoyButton::clicked, this, &SetJoystick::propogateSetButtonClick, Qt::QueuedConnection); - connect(button, &JoyButton::clicked, device, &InputDevice::buttonClickEvent, Qt::QueuedConnection); + connect(button, &JoyButton::clicked, m_device, &InputDevice::buttonClickEvent, Qt::QueuedConnection); connect(button, &JoyButton::released, this, &SetJoystick::propogateSetButtonRelease); - connect(button, &JoyButton::released, device, &InputDevice::buttonReleaseEvent); + connect(button, &JoyButton::released, m_device, &InputDevice::buttonReleaseEvent); connect(button, &JoyButton::buttonNameChanged, this, &SetJoystick::propogateSetButtonNameChange); } @@ -1086,6 +1059,7 @@ void SetJoystick::enableHatConnections(JoyDPad *dpad) QHash *buttons = dpad->getJoyButtons(); QHashIterator iter(*buttons); + while (iter.hasNext()) { JoyDPadButton *button = iter.next().value(); @@ -1093,9 +1067,9 @@ void SetJoystick::enableHatConnections(JoyDPad *dpad) connect(button, &JoyDPadButton::setAssignmentChanged, this, &SetJoystick::propogateSetDPadButtonAssociation); connect(button, &JoyDPadButton::clicked, this, &SetJoystick::propogateSetDPadButtonClick, Qt::QueuedConnection); - connect(button, &JoyDPadButton::clicked, device, &InputDevice::dpadButtonClickEvent, Qt::QueuedConnection); + connect(button, &JoyDPadButton::clicked, m_device, &InputDevice::dpadButtonClickEvent, Qt::QueuedConnection); connect(button, &JoyDPadButton::released, this, &SetJoystick::propogateSetDPadButtonRelease, Qt::QueuedConnection); - connect(button, &JoyDPadButton::released, device, &InputDevice::dpadButtonReleaseEvent, Qt::QueuedConnection); + connect(button, &JoyDPadButton::released, m_device, &InputDevice::dpadButtonReleaseEvent, Qt::QueuedConnection); connect(button, &JoyDPadButton::buttonNameChanged, this, &SetJoystick::propogateSetDPadButtonNameChange); } } @@ -1104,23 +1078,22 @@ InputDevice* SetJoystick::getInputDevice() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return device; + return m_device; } void SetJoystick::setName(QString name) { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (name.length() <= MAXNAMELENGTH) + if (name.length() <= GlobalVariables::SetJoystick::MAXNAMELENGTH) { - this->name = name; + m_name = name; emit propertyUpdated(); } - else if (name.length() > MAXNAMELENGTH) - { - // Truncate name to 27 characters. Add ellipsis at the end. - name.truncate(MAXNAMELENGTH-3); - this->name = QString(name).append("..."); + else + { + name.truncate(GlobalVariables::SetJoystick::MAXNAMELENGTH - 3); // Truncate name to 27 characters. Add ellipsis at the end. + m_name = QString(name).append("..."); emit propertyUpdated(); } } @@ -1129,67 +1102,63 @@ QString SetJoystick::getName() const { qInstallMessageHandler(MessageHandler::myMessageOutput); - return name; + return m_name; } void SetJoystick::copyAssignments(SetJoystick *destSet) { qInstallMessageHandler(MessageHandler::myMessageOutput); - for (int i=0; i < device->getNumberAxes(); i++) + for (int i = 0; i < m_device->getNumberAxes(); i++) { JoyAxis *sourceAxis = axes.value(i); JoyAxis *destAxis = destSet->axes.value(i); - if (sourceAxis && destAxis) - { - sourceAxis->copyAssignments(destAxis); - } + + if (sourceAxis && destAxis) sourceAxis->copyAssignments(destAxis); } QHashIterator stickIter(getSticks()); + while (stickIter.hasNext()) { stickIter.next(); int index = stickIter.key(); JoyControlStick *sourceStick = stickIter.value(); JoyControlStick *destStick = destSet->getSticks().value(index); + if (sourceStick && destStick) - { sourceStick->copyAssignments(destStick); - } } - for (int i=0; i < device->getNumberHats(); i++) + for (int i = 0; i < m_device->getNumberHats(); i++) { JoyDPad *sourceDPad = getHats().value(i); JoyDPad *destDPad = destSet->getHats().value(i); + if (sourceDPad && destDPad) - { sourceDPad->copyAssignments(destDPad); - } } QHashIterator vdpadIter(getVdpads()); + while (vdpadIter.hasNext()) { vdpadIter.next(); int index = vdpadIter.key(); VDPad *sourceVDpad = vdpadIter.value(); VDPad *destVDPad = destSet->getVdpads().value(index); + if (sourceVDpad && destVDPad) - { sourceVDpad->copyAssignments(destVDPad); - } } - for (int i=0; i < device->getNumberButtons(); i++) + for (int i = 0; i < m_device->getNumberButtons(); i++) { JoyButton *sourceButton = getButtons().value(i); JoyButton *destButton = destSet->getButtons().value(i); + if (sourceButton && destButton) - { sourceButton->copyAssignments(destButton); - } } } @@ -1198,14 +1167,9 @@ QString SetJoystick::getSetLabel() qInstallMessageHandler(MessageHandler::myMessageOutput); QString temp = QString(); - if (!name.isEmpty()) - { - temp = trUtf8("Set %1: %2").arg(index+1).arg(name); - } - else - { - temp = trUtf8("Set %1").arg(index+1); - } + + if (!m_name.isEmpty()) temp = trUtf8("Set %1: %2").arg(m_index+1).arg(m_name); + else temp = trUtf8("Set %1").arg(m_index+1); return temp; } @@ -1233,12 +1197,12 @@ void SetJoystick::raiseAxesDeadZones(int deadZone) qInstallMessageHandler(MessageHandler::myMessageOutput); int tempDeadZone = deadZone; + if ((deadZone <= 0) || (deadZone > 32767)) - { - tempDeadZone = RAISEDDEADZONE; - } + tempDeadZone = GlobalVariables::SetJoystick::RAISEDDEADZONE; QHashIterator axisIter(axes); + while (axisIter.hasNext()) { JoyAxis *temp = axisIter.next().value(); @@ -1253,6 +1217,7 @@ void SetJoystick::currentAxesDeadZones(QList *axesDeadZones) qInstallMessageHandler(MessageHandler::myMessageOutput); QHashIterator axisIter(axes); + while (axisIter.hasNext()) { JoyAxis *temp = axisIter.next().value(); @@ -1266,9 +1231,11 @@ void SetJoystick::setAxesDeadZones(QList *axesDeadZones) QListIterator iter(*axesDeadZones); int axisNum = 0; + while (iter.hasNext()) { int deadZoneValue = iter.next(); + if (axes.contains(axisNum)) { JoyAxis *temp = getJoyAxis(axisNum); @@ -1299,7 +1266,7 @@ QHash* SetJoystick::getAxes() { QHash const& SetJoystick::getButtons() const { - return buttons; + return m_buttons; } QHash const& SetJoystick::getHats() const { diff --git a/src/setjoystick.h b/src/setjoystick.h old mode 100644 new mode 100755 index 699be7e3d..2f8955401 --- a/src/setjoystick.h +++ b/src/setjoystick.h @@ -88,9 +88,6 @@ class SetJoystick : public QObject virtual void readConfig(QXmlStreamReader *xml); virtual void writeConfig(QXmlStreamWriter *xml); - static const int MAXNAMELENGTH; - static const int RAISEDDEADZONE; - protected: bool isSetEmpty(); void deleteButtons(); @@ -173,7 +170,7 @@ protected slots: void propogateSetVDPadNameChange(); private: - QHash buttons; + QHash m_buttons; QHash axes; QHash hats; QHash sticks; @@ -181,9 +178,9 @@ protected slots: QList lastClickedButtons; - int index; - InputDevice *device; - QString name; + int m_index; + InputDevice *m_device; + QString m_name; }; Q_DECLARE_METATYPE(SetJoystick*) diff --git a/src/setnamesdialog.cpp b/src/setnamesdialog.cpp old mode 100644 new mode 100755 index 87334c165..d23269837 --- a/src/setnamesdialog.cpp +++ b/src/setnamesdialog.cpp @@ -18,6 +18,7 @@ #include "setnamesdialog.h" #include "ui_setnamesdialog.h" +#include "globalvariables.h" #include "messagehandler.h" #include "inputdevice.h" @@ -34,10 +35,9 @@ SetNamesDialog::SetNamesDialog(InputDevice *device, QWidget *parent) : qInstallMessageHandler(MessageHandler::myMessageOutput); setAttribute(Qt::WA_DeleteOnClose); - this->device = device; - for (int i=0; i < InputDevice::NUMBER_JOYSETS; i++) + for (int i = 0; i < GlobalVariables::InputDevice::NUMBER_JOYSETS; i++) { QString tempSetName = device->getSetJoystick(i)->getName(); ui->setNamesTableWidget->setItem(i, 0, new QTableWidgetItem(tempSetName)); @@ -57,15 +57,14 @@ void SetNamesDialog::saveSetNameChanges() { qInstallMessageHandler(MessageHandler::myMessageOutput); - for (int i=0; i < ui->setNamesTableWidget->rowCount(); i++) + for (int i = 0; i < ui->setNamesTableWidget->rowCount(); i++) { QTableWidgetItem *setNameItem = ui->setNamesTableWidget->item(i, 0); QString setNameText = setNameItem->text(); QString oldSetNameText = device->getSetJoystick(i)->getName(); + if (setNameText != oldSetNameText) - { device->getSetJoystick(i)->setName(setNameText); - } } } diff --git a/src/setnamesdialog.h b/src/setnamesdialog.h old mode 100644 new mode 100755 diff --git a/src/setnamesdialog.ui b/src/setnamesdialog.ui old mode 100644 new mode 100755 diff --git a/src/simplekeygrabberbutton.cpp b/src/simplekeygrabberbutton.cpp old mode 100644 new mode 100755 index 2da7f83b4..db8a78d50 --- a/src/simplekeygrabberbutton.cpp +++ b/src/simplekeygrabberbutton.cpp @@ -18,6 +18,10 @@ #include "simplekeygrabberbutton.h" +#include +#include +#include + #include "messagehandler.h" #include "event.h" #include "antkeymapper.h" @@ -31,14 +35,11 @@ #include #endif -#include -#include #include #include #include - SimpleKeyGrabberButton::SimpleKeyGrabberButton(QWidget *parent) : QPushButton(parent) { @@ -55,10 +56,7 @@ void SimpleKeyGrabberButton::keyPressEvent(QKeyEvent *event) qInstallMessageHandler(MessageHandler::myMessageOutput); // Do not allow closing of dialog using Escape key - if (event->key() == Qt::Key_Escape) - { - return; - } + if (event->key() == Qt::Key_Escape) return; QPushButton::keyPressEvent(event); } @@ -70,20 +68,14 @@ bool SimpleKeyGrabberButton::eventFilter(QObject *obj, QEvent *event) Q_UNUSED(obj); int controlcode = 0; + if (grabNextAction && (event->type() == QEvent::MouseButtonRelease)) { QMouseEvent *mouseEve = static_cast(event); - if (mouseEve->button() == Qt::RightButton) - { - controlcode = 3; - } - else if (mouseEve->button() == Qt::MiddleButton) - { - controlcode = 2; - } - else { - controlcode = static_cast(mouseEve->button()); - } + + if (mouseEve->button() == Qt::RightButton) controlcode = 3; + else if (mouseEve->button() == Qt::MiddleButton) controlcode = 2; + else controlcode = mouseEve->button(); buttonslot.setSlotCode(controlcode); buttonslot.setSlotMode(JoyButtonSlot::JoyMouseButton); @@ -95,11 +87,11 @@ bool SimpleKeyGrabberButton::eventFilter(QObject *obj, QEvent *event) grabNextAction = grabbingWheel = false; emit buttonCodeChanged(controlcode); } - else if (grabNextAction && (event->type() == QEvent::KeyRelease)) + else if (grabNextAction && (event->type() == static_cast(7))) { QKeyEvent *keyEve = static_cast(event); - int tempcode = static_cast(keyEve->nativeScanCode()); - int virtualactual = static_cast(keyEve->nativeVirtualKey()); + int tempcode = keyEve->nativeScanCode(); + int virtualactual = keyEve->nativeVirtualKey(); BaseEventHandler *handler = EventHandlerFactory::getInstance()->handler(); @@ -114,10 +106,9 @@ bool SimpleKeyGrabberButton::eventFilter(QObject *obj, QEvent *event) checkalias = AntKeyMapper::getInstance()->returnQtKey(finalvirtual); QtKeyMapperBase *nativeWinKeyMapper = AntKeyMapper::getInstance()->getNativeKeyMapper(); int tempQtKey = 0; + if (nativeWinKeyMapper) - { tempQtKey = nativeWinKeyMapper->returnQtKey(finalvirtual); - } if (tempQtKey > 0) { @@ -145,29 +136,26 @@ bool SimpleKeyGrabberButton::eventFilter(QObject *obj, QEvent *event) #if defined(WITH_X11) if (QApplication::platformName() == QStringLiteral("xcb")) - { - // Obtain group 1 X11 keysym. Removes effects from modifiers. - finalvirtual = X11KeyCodeToX11KeySym(tempcode); + { + finalvirtual = X11KeyCodeToX11KeySym(tempcode); // Obtain group 1 X11 keysym. Removes effects from modifiers. - #ifdef WITH_UINPUT - if (handler->getIdentifier() == "uinput") - { - // Find Qt Key corresponding to X11 KeySym. - QtKeyMapperBase *x11KeyMapper = AntKeyMapper::getInstance()->getNativeKeyMapper(); - checkalias = x11KeyMapper->returnQtKey(finalvirtual); - // Find corresponding Linux input key for the Qt key. - finalvirtual = AntKeyMapper::getInstance()->returnVirtualKey(checkalias); - } - #endif + #ifdef WITH_UINPUT - #ifdef WITH_XTEST - if (handler->getIdentifier() == "xtest") - { - // Check for alias against group 1 keysym. - checkalias = AntKeyMapper::getInstance()->returnQtKey(finalvirtual); - } - #endif + if (handler->getIdentifier() == "uinput") + { + QtKeyMapperBase *x11KeyMapper = AntKeyMapper::getInstance()->getNativeKeyMapper(); // Find Qt Key corresponding to X11 KeySym. + checkalias = x11KeyMapper->returnQtKey(finalvirtual); + finalvirtual = AntKeyMapper::getInstance()->returnVirtualKey(checkalias); // Find corresponding Linux input key for the Qt key. + } + + #endif + #ifdef WITH_XTEST + + if (handler->getIdentifier() == "xtest") + checkalias = AntKeyMapper::getInstance()->returnQtKey(finalvirtual); // Check for alias against group 1 keysym. + + #endif } else { @@ -179,8 +167,8 @@ bool SimpleKeyGrabberButton::eventFilter(QObject *obj, QEvent *event) #else if (QApplication::platformName() == QStringLiteral("xcb")) { - finalvirtual = AntKeyMapper::getInstance()->returnVirtualKey(keyEve->key()); - checkalias = AntKeyMapper::getInstance()->returnQtKey(finalvirtual); + finalvirtual = AntKeyMapper::getInstance()->returnVirtualKey(keyEve->key()); + checkalias = AntKeyMapper::getInstance()->returnQtKey(finalvirtual); } else { @@ -207,26 +195,23 @@ bool SimpleKeyGrabberButton::eventFilter(QObject *obj, QEvent *event) valueUpdated = true; edited = true; } - else + else if ((checkalias > 0) && (finalvirtual > 0)) { - if ((checkalias > 0) && (finalvirtual > 0)) - { - buttonslot.setSlotCode(finalvirtual, checkalias); - buttonslot.setSlotMode(JoyButtonSlot::JoyKeyboard); - setText(keysymToKeyString(finalvirtual, checkalias).toUpper()); + buttonslot.setSlotCode(finalvirtual, checkalias); + buttonslot.setSlotMode(JoyButtonSlot::JoyKeyboard); + setText(keysymToKeyString(finalvirtual, checkalias).toUpper()); - edited = true; - valueUpdated = true; - } - else if (virtualactual > 0) - { - buttonslot.setSlotCode(virtualactual); - buttonslot.setSlotMode(JoyButtonSlot::JoyKeyboard); - setText(keysymToKeyString(virtualactual).toUpper()); + edited = true; + valueUpdated = true; + } + else if (virtualactual > 0) + { + buttonslot.setSlotCode(virtualactual); + buttonslot.setSlotMode(JoyButtonSlot::JoyKeyboard); + setText(keysymToKeyString(virtualactual).toUpper()); - edited = true; - valueUpdated = true; - } + edited = true; + valueUpdated = true; } grabNextAction = false; @@ -235,9 +220,7 @@ bool SimpleKeyGrabberButton::eventFilter(QObject *obj, QEvent *event) releaseKeyboard(); if (valueUpdated) - { emit buttonCodeChanged(controlcode); - } } else if (grabNextAction && (event->type() == QEvent::Wheel) && !grabbingWheel) { @@ -283,6 +266,7 @@ bool SimpleKeyGrabberButton::eventFilter(QObject *obj, QEvent *event) else if (event->type() == QEvent::MouseButtonRelease) { QMouseEvent *mouseEve = static_cast(event); + if (mouseEve->button() == Qt::LeftButton) { grabNextAction = true; @@ -293,7 +277,6 @@ bool SimpleKeyGrabberButton::eventFilter(QObject *obj, QEvent *event) } } - return false; } @@ -334,54 +317,10 @@ void SimpleKeyGrabberButton::setValue(QString value, JoyButtonSlot::JoySlotInput edited = true; break; } - case JoyButtonSlot::JoyKeyboard: - { - break; - } - case JoyButtonSlot::JoyMouseButton: - { - break; - } - case JoyButtonSlot::JoyMouseMovement: - { - break; - } - case JoyButtonSlot::JoyPause: - { - break; - } - case JoyButtonSlot::JoyHold: - { - break; - } - case JoyButtonSlot::JoyCycle: - { - break; - } - case JoyButtonSlot::JoyDistance: - { - break; - } - case JoyButtonSlot::JoyRelease: - { - break; - } - case JoyButtonSlot::JoyMouseSpeedMod: - { - break; - } - case JoyButtonSlot::JoyKeyPress: - { - break; - } - case JoyButtonSlot::JoyDelay: - { - break; - } - case JoyButtonSlot::JoySetChange: - { - break; - } + default: + { + break; + } } setText(buttonslot.getSlotString()); diff --git a/src/simplekeygrabberbutton.h b/src/simplekeygrabberbutton.h old mode 100644 new mode 100755 diff --git a/src/slotitemlistwidget.cpp b/src/slotitemlistwidget.cpp old mode 100644 new mode 100755 index f8ceaf173..4c5f0c41b --- a/src/slotitemlistwidget.cpp +++ b/src/slotitemlistwidget.cpp @@ -26,6 +26,7 @@ #include + SlotItemListWidget::SlotItemListWidget(QWidget *parent) : QListWidget(parent) { @@ -41,12 +42,11 @@ void SlotItemListWidget::keyPressEvent(QKeyEvent *event) QListWidgetItem *currentItem = this->item(this->currentRow()); SimpleKeyGrabberButton *tempbutton = nullptr; - if (currentItem) - { + + if (currentItem != nullptr) tempbutton = currentItem->data(Qt::UserRole).value(); - } - if (tempbutton && tempbutton->isGrabbing()) + if (tempbutton != nullptr && tempbutton->isGrabbing()) { switch (event->key()) { @@ -56,11 +56,11 @@ void SlotItemListWidget::keyPressEvent(QKeyEvent *event) propogate = false; break; } + + default: + break; } } - if (propogate) - { - QListWidget::keyPressEvent(event); - } + if (propogate) QListWidget::keyPressEvent(event); } diff --git a/src/slotitemlistwidget.h b/src/slotitemlistwidget.h old mode 100644 new mode 100755 diff --git a/src/springmousemoveinfo.h b/src/springmousemoveinfo.h old mode 100644 new mode 100755 index aac1fd74d..c9ed2ebea --- a/src/springmousemoveinfo.h +++ b/src/springmousemoveinfo.h @@ -19,6 +19,7 @@ #define SPRINGMOUSEMOVEINFO_H namespace PadderCommon { + typedef struct _springModeInfo { // Displacement of the X axis @@ -35,6 +36,7 @@ namespace PadderCommon { int screen; double springDeadX; double springDeadY; + } springModeInfo; } diff --git a/src/stickpushbuttongroup.cpp b/src/stickpushbuttongroup.cpp old mode 100644 new mode 100755 index 2e2b4ca2d..58e70b2a5 --- a/src/stickpushbuttongroup.cpp +++ b/src/stickpushbuttongroup.cpp @@ -31,6 +31,7 @@ #include + StickPushButtonGroup::StickPushButtonGroup(JoyControlStick *stick, bool displayNames, QWidget *parent) : QGridLayout(parent) { @@ -49,58 +50,12 @@ void StickPushButtonGroup::generateButtons() { qInstallMessageHandler(MessageHandler::myMessageOutput); - QHash *stickButtons = stick->getButtons(); - - JoyControlStickButton *button = nullptr; JoyControlStickButtonPushButton *pushbutton = nullptr; - button = stickButtons->value(JoyControlStick::StickLeftUp); - upLeftButton = new JoyControlStickButtonPushButton(button, displayNames, parentWidget()); - pushbutton = upLeftButton; - connect(pushbutton, &JoyControlStickButtonPushButton::clicked, this, [this, pushbutton] { - openStickButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - connect(button, &JoyControlStickButton::slotsChanged, this, &StickPushButtonGroup::propogateSlotsChanged); - - addWidget(pushbutton, 0, 0); - - button = stickButtons->value(JoyControlStick::StickUp); - upButton = new JoyControlStickButtonPushButton(button, displayNames, parentWidget()); - pushbutton = upButton; - connect(pushbutton, &JoyControlStickButtonPushButton::clicked, this, [this, pushbutton] { - openStickButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - connect(button, &JoyControlStickButton::slotsChanged, this, &StickPushButtonGroup::propogateSlotsChanged); - - addWidget(pushbutton, 0, 1); - - button = stickButtons->value(JoyControlStick::StickRightUp); - upRightButton = new JoyControlStickButtonPushButton(button, displayNames, parentWidget()); - pushbutton = upRightButton; - connect(pushbutton, &JoyControlStickButtonPushButton::clicked, this, [this, pushbutton] { - openStickButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - connect(button, &JoyControlStickButton::slotsChanged, this, &StickPushButtonGroup::propogateSlotsChanged); - - addWidget(pushbutton, 0, 2); - - button = stickButtons->value(JoyControlStick::StickLeft); - leftButton = new JoyControlStickButtonPushButton(button, displayNames, parentWidget()); - pushbutton = leftButton; - connect(pushbutton, &JoyControlStickButtonPushButton::clicked, this, [this, pushbutton] { - openStickButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - connect(button, &JoyControlStickButton::slotsChanged, this, &StickPushButtonGroup::propogateSlotsChanged); - - addWidget(pushbutton, 1, 0); + upLeftButton = generateBtnToGrid(pushbutton, stick, JoyControlStick::StickLeftUp, 0, 0); + upButton = generateBtnToGrid(pushbutton, stick, JoyControlStick::StickUp, 0, 1); + upRightButton = generateBtnToGrid(pushbutton, stick, JoyControlStick::StickRightUp, 0, 2); + leftButton = generateBtnToGrid(pushbutton, stick, JoyControlStick::StickLeft, 1, 0); stickWidget = new JoyControlStickPushButton(stick, displayNames, parentWidget()); stickWidget->setIcon(QIcon::fromTheme(QString::fromUtf8("games-config-options"))); @@ -108,46 +63,17 @@ void StickPushButtonGroup::generateButtons() addWidget(stickWidget, 1, 1); - button = stickButtons->value(JoyControlStick::StickRight); - rightButton = new JoyControlStickButtonPushButton(button, displayNames, parentWidget()); - pushbutton = rightButton; - connect(pushbutton, &JoyControlStickButtonPushButton::clicked, this, [this, pushbutton] { - openStickButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - connect(button, &JoyControlStickButton::slotsChanged, this, &StickPushButtonGroup::propogateSlotsChanged); - - addWidget(pushbutton, 1, 2); - - button = stickButtons->value(JoyControlStick::StickLeftDown); - downLeftButton = new JoyControlStickButtonPushButton(button, displayNames, parentWidget()); - pushbutton = downLeftButton; - connect(pushbutton, &JoyControlStickButtonPushButton::clicked, this, [this, pushbutton] { - openStickButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - - connect(button, &JoyControlStickButton::slotsChanged, this, &StickPushButtonGroup::propogateSlotsChanged); - - addWidget(pushbutton, 2, 0); - - button = stickButtons->value(JoyControlStick::StickDown); - downButton = new JoyControlStickButtonPushButton(button, displayNames, parentWidget()); - pushbutton = downButton; - connect(pushbutton, &JoyControlStickButtonPushButton::clicked, this, [this, pushbutton] { - openStickButtonDialog(pushbutton); - }); - - button->establishPropertyUpdatedConnections(); - connect(button, &JoyControlStickButton::slotsChanged, this, &StickPushButtonGroup::propogateSlotsChanged); + rightButton = generateBtnToGrid(pushbutton, stick, JoyControlStick::StickRight, 1, 2); + downLeftButton = generateBtnToGrid(pushbutton, stick, JoyControlStick::StickLeftDown, 2, 0); + downButton = generateBtnToGrid(pushbutton, stick, JoyControlStick::StickDown, 2, 1); + downRightButton = generateBtnToGrid(pushbutton, stick, JoyControlStick::StickRightDown, 2, 2); +} - addWidget(pushbutton, 2, 1); +JoyControlStickButtonPushButton* StickPushButtonGroup::generateBtnToGrid(JoyControlStickButtonPushButton *pushbutton, JoyControlStick *stick, JoyStickDirectionsType::JoyStickDirections stickValue, int gridRow, int gridCol) +{ + JoyControlStickButton* button = stick->getButtons()->value(stickValue); + pushbutton = new JoyControlStickButtonPushButton(button, displayNames, parentWidget()); - button = stickButtons->value(JoyControlStick::StickRightDown); - downRightButton = new JoyControlStickButtonPushButton(button, displayNames, parentWidget()); - pushbutton = downRightButton; connect(pushbutton, &JoyControlStickButtonPushButton::clicked, this, [this, pushbutton] { openStickButtonDialog(pushbutton); }); @@ -155,7 +81,8 @@ void StickPushButtonGroup::generateButtons() button->establishPropertyUpdatedConnections(); connect(button, &JoyControlStickButton::slotsChanged, this, &StickPushButtonGroup::propogateSlotsChanged); - addWidget(pushbutton, 2, 2); + addWidget(pushbutton, gridRow, gridCol); + return pushbutton; } void StickPushButtonGroup::changeButtonLayout() diff --git a/src/stickpushbuttongroup.h b/src/stickpushbuttongroup.h old mode 100644 new mode 100755 index 4fed9547c..c4e275fc3 --- a/src/stickpushbuttongroup.h +++ b/src/stickpushbuttongroup.h @@ -18,8 +18,11 @@ #ifndef STICKPUSHBUTTONGROUP_H #define STICKPUSHBUTTONGROUP_H +#include "joycontrolstickdirectionstype.h" + #include + class JoyControlStick; class QWidget; class JoyControlStickButtonPushButton; @@ -77,6 +80,8 @@ private slots: JoyControlStickButtonPushButton *downRightButton; JoyControlStickPushButton *stickWidget; + + JoyControlStickButtonPushButton * generateBtnToGrid(JoyControlStickButtonPushButton *pushbutton, JoyControlStick *stick, JoyStickDirectionsType::JoyStickDirections stickValue, int gridRow, int gridCol); }; #endif // STICKPUSHBUTTONGROUP_H diff --git a/src/uihelpers/advancebuttondialoghelper.cpp b/src/uihelpers/advancebuttondialoghelper.cpp old mode 100644 new mode 100755 index db599b768..23632b395 --- a/src/uihelpers/advancebuttondialoghelper.cpp +++ b/src/uihelpers/advancebuttondialoghelper.cpp @@ -22,7 +22,6 @@ #include - AdvanceButtonDialogHelper::AdvanceButtonDialogHelper(JoyButton *button, QObject *parent) : QObject(parent) diff --git a/src/uihelpers/advancebuttondialoghelper.h b/src/uihelpers/advancebuttondialoghelper.h old mode 100644 new mode 100755 diff --git a/src/uihelpers/buttoneditdialoghelper.cpp b/src/uihelpers/buttoneditdialoghelper.cpp old mode 100644 new mode 100755 index e7bdba6c8..9d5493651 --- a/src/uihelpers/buttoneditdialoghelper.cpp +++ b/src/uihelpers/buttoneditdialoghelper.cpp @@ -21,7 +21,6 @@ #include "joybutton.h" #include -#include ButtonEditDialogHelper::ButtonEditDialogHelper(JoyButton *button, QObject *parent) : @@ -38,7 +37,6 @@ ButtonEditDialogHelper::ButtonEditDialogHelper(QObject *parent) : QObject(parent) { qInstallMessageHandler(MessageHandler::myMessageOutput); - } void ButtonEditDialogHelper::setAssignedSlot(int code, @@ -48,7 +46,6 @@ void ButtonEditDialogHelper::setAssignedSlot(int code, button->clearSlotsEventReset(false); button->setAssignedSlot(code, mode); - } void ButtonEditDialogHelper::setAssignedSlot(int code, int alias, @@ -58,7 +55,6 @@ void ButtonEditDialogHelper::setAssignedSlot(int code, int alias, button->clearSlotsEventReset(false); button->setAssignedSlot(code, alias, mode); - } void ButtonEditDialogHelper::setAssignedSlot(int code, int alias, int index, @@ -68,7 +64,6 @@ void ButtonEditDialogHelper::setAssignedSlot(int code, int alias, int index, button->clearSlotsEventReset(false); button->setAssignedSlot(code, alias, index, mode); - } void ButtonEditDialogHelper::setUseTurbo(bool useTurbo) diff --git a/src/uihelpers/buttoneditdialoghelper.h b/src/uihelpers/buttoneditdialoghelper.h old mode 100644 new mode 100755 index b02a2662a..6258e4756 --- a/src/uihelpers/buttoneditdialoghelper.h +++ b/src/uihelpers/buttoneditdialoghelper.h @@ -35,10 +35,8 @@ class ButtonEditDialogHelper : public QObject explicit ButtonEditDialogHelper(QObject *parent = nullptr); void setThisButton(JoyButton *btn); - protected: JoyButton *button; - bool firstStart; public slots: void setAssignedSlot(int code, diff --git a/src/uihelpers/dpadcontextmenuhelper.cpp b/src/uihelpers/dpadcontextmenuhelper.cpp old mode 100644 new mode 100755 index eac43e6d1..e95577562 --- a/src/uihelpers/dpadcontextmenuhelper.cpp +++ b/src/uihelpers/dpadcontextmenuhelper.cpp @@ -24,7 +24,6 @@ #include #include - DPadContextMenuHelper::DPadContextMenuHelper(JoyDPad *dpad, QObject *parent) : QObject(parent) { diff --git a/src/uihelpers/dpadcontextmenuhelper.h b/src/uihelpers/dpadcontextmenuhelper.h old mode 100644 new mode 100755 index 597cc8680..83821030e --- a/src/uihelpers/dpadcontextmenuhelper.h +++ b/src/uihelpers/dpadcontextmenuhelper.h @@ -30,6 +30,7 @@ class JoyButtonSlot; class DPadContextMenuHelper : public QObject { Q_OBJECT + public: explicit DPadContextMenuHelper(JoyDPad *dpad, QObject *parent = nullptr); void setPendingSlots(QHash *tempSlots); diff --git a/src/uihelpers/dpadeditdialoghelper.cpp b/src/uihelpers/dpadeditdialoghelper.cpp old mode 100644 new mode 100755 index 18fdfa992..95b425c6e --- a/src/uihelpers/dpadeditdialoghelper.cpp +++ b/src/uihelpers/dpadeditdialoghelper.cpp @@ -23,7 +23,6 @@ #include #include - DPadEditDialogHelper::DPadEditDialogHelper(JoyDPad *dpad, QObject *parent) : QObject(parent) { diff --git a/src/uihelpers/dpadeditdialoghelper.h b/src/uihelpers/dpadeditdialoghelper.h old mode 100644 new mode 100755 diff --git a/src/uihelpers/gamecontrollermappingdialoghelper.cpp b/src/uihelpers/gamecontrollermappingdialoghelper.cpp old mode 100644 new mode 100755 index bfbbcd259..3722391d5 --- a/src/uihelpers/gamecontrollermappingdialoghelper.cpp +++ b/src/uihelpers/gamecontrollermappingdialoghelper.cpp @@ -17,12 +17,12 @@ #include "gamecontrollermappingdialoghelper.h" +#include "globalvariables.h" #include "messagehandler.h" #include "inputdevice.h" #include - GameControllerMappingDialogHelper::GameControllerMappingDialogHelper(InputDevice *device, QObject *parent) : QObject(parent) @@ -37,7 +37,7 @@ void GameControllerMappingDialogHelper::raiseDeadZones() { qInstallMessageHandler(MessageHandler::myMessageOutput); - device->setRawAxisDeadZone(InputDevice::RAISEDDEADZONE); + device->setRawAxisDeadZone(GlobalVariables::InputDevice::RAISEDDEADZONE); device->getActiveSetJoystick()->raiseAxesDeadZones(); } @@ -59,7 +59,7 @@ void GameControllerMappingDialogHelper::setupDeadZones() device->getActiveSetJoystick()->currentAxesDeadZones(&originalAxesDeadZones); device->getActiveSetJoystick()->raiseAxesDeadZones(); - device->setRawAxisDeadZone(InputDevice::RAISEDDEADZONE); + device->setRawAxisDeadZone(GlobalVariables::InputDevice::RAISEDDEADZONE); } void GameControllerMappingDialogHelper::restoreDeviceDeadZones() @@ -70,5 +70,5 @@ void GameControllerMappingDialogHelper::restoreDeviceDeadZones() device->getActiveSetJoystick()->release(); device->getActiveSetJoystick()->setAxesDeadZones(&originalAxesDeadZones); - device->setRawAxisDeadZone(InputDevice::RAISEDDEADZONE); + device->setRawAxisDeadZone(GlobalVariables::InputDevice::RAISEDDEADZONE); } diff --git a/src/uihelpers/gamecontrollermappingdialoghelper.h b/src/uihelpers/gamecontrollermappingdialoghelper.h old mode 100644 new mode 100755 diff --git a/src/uihelpers/joyaxiscontextmenuhelper.cpp b/src/uihelpers/joyaxiscontextmenuhelper.cpp old mode 100644 new mode 100755 index 9a20a3278..778f74384 --- a/src/uihelpers/joyaxiscontextmenuhelper.cpp +++ b/src/uihelpers/joyaxiscontextmenuhelper.cpp @@ -22,7 +22,6 @@ #include - JoyAxisContextMenuHelper::JoyAxisContextMenuHelper(JoyAxis *axis, QObject *parent) : QObject(parent) { diff --git a/src/uihelpers/joyaxiscontextmenuhelper.h b/src/uihelpers/joyaxiscontextmenuhelper.h old mode 100644 new mode 100755 diff --git a/src/uihelpers/joycontrolstickcontextmenuhelper.cpp b/src/uihelpers/joycontrolstickcontextmenuhelper.cpp old mode 100644 new mode 100755 index faa2a0670..521d0a440 --- a/src/uihelpers/joycontrolstickcontextmenuhelper.cpp +++ b/src/uihelpers/joycontrolstickcontextmenuhelper.cpp @@ -24,7 +24,6 @@ #include #include - JoyControlStickContextMenuHelper::JoyControlStickContextMenuHelper(JoyControlStick *stick, QObject *parent) : QObject(parent) { diff --git a/src/uihelpers/joycontrolstickcontextmenuhelper.h b/src/uihelpers/joycontrolstickcontextmenuhelper.h old mode 100644 new mode 100755 diff --git a/src/uihelpers/joycontrolstickeditdialoghelper.cpp b/src/uihelpers/joycontrolstickeditdialoghelper.cpp old mode 100644 new mode 100755 index 6686b4212..51c37ac2a --- a/src/uihelpers/joycontrolstickeditdialoghelper.cpp +++ b/src/uihelpers/joycontrolstickeditdialoghelper.cpp @@ -23,7 +23,6 @@ #include - JoyControlStickEditDialogHelper::JoyControlStickEditDialogHelper(JoyControlStick *stick, QObject *parent) : QObject(parent) { diff --git a/src/uihelpers/joycontrolstickeditdialoghelper.h b/src/uihelpers/joycontrolstickeditdialoghelper.h old mode 100644 new mode 100755 diff --git a/src/uihelpers/joytabwidgethelper.cpp b/src/uihelpers/joytabwidgethelper.cpp old mode 100644 new mode 100755 index 9f4f5e866..de819db3e --- a/src/uihelpers/joytabwidgethelper.cpp +++ b/src/uihelpers/joytabwidgethelper.cpp @@ -26,7 +26,6 @@ #include - JoyTabWidgetHelper::JoyTabWidgetHelper(InputDevice *device, QObject *parent) : QObject(parent) { @@ -44,13 +43,13 @@ JoyTabWidgetHelper::~JoyTabWidgetHelper() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (this->reader) + if (this->reader != nullptr) { delete this->reader; this->reader = nullptr; } - if (this->writer) + if (this->writer != nullptr) { delete this->writer; this->writer = nullptr; @@ -112,7 +111,7 @@ bool JoyTabWidgetHelper::readConfigFile(QString filepath) } device->resetButtonDownCount(); - if (this->reader) + if (this->reader != nullptr) { this->reader->deleteLater(); this->reader = nullptr; @@ -144,7 +143,7 @@ bool JoyTabWidgetHelper::writeConfigFile(QString filepath) bool result = false; - if (this->writer) + if (this->writer != nullptr) { this->writer->deleteLater(); this->writer = nullptr; diff --git a/src/uihelpers/joytabwidgethelper.h b/src/uihelpers/joytabwidgethelper.h old mode 100644 new mode 100755 diff --git a/src/uinputhelper.cpp b/src/uinputhelper.cpp old mode 100644 new mode 100755 index b3ee5533c..d3f69002b --- a/src/uinputhelper.cpp +++ b/src/uinputhelper.cpp @@ -22,9 +22,10 @@ #include "uinputhelper.h" #include "messagehandler.h" -UInputHelper* UInputHelper::_instance = nullptr; +UInputHelper* UInputHelper::_instance = nullptr; + UInputHelper::UInputHelper(QObject *parent) : QObject(parent) { @@ -40,248 +41,252 @@ UInputHelper::~UInputHelper() void UInputHelper::populateKnownAliases() { if (getKnownAliasesX11SymVK().isEmpty()) - { - knownAliasesX11SymVK.insert("a", KEY_A); - knownAliasesX11SymVK.insert("b", KEY_B); - knownAliasesX11SymVK.insert("c", KEY_C); - knownAliasesX11SymVK.insert("d", KEY_D); - knownAliasesX11SymVK.insert("e", KEY_E); - knownAliasesX11SymVK.insert("f", KEY_F); - knownAliasesX11SymVK.insert("g", KEY_G); - knownAliasesX11SymVK.insert("h", KEY_H); - knownAliasesX11SymVK.insert("i", KEY_I); - knownAliasesX11SymVK.insert("j", KEY_J); - knownAliasesX11SymVK.insert("k", KEY_K); - knownAliasesX11SymVK.insert("l", KEY_L); - knownAliasesX11SymVK.insert("m", KEY_M); - knownAliasesX11SymVK.insert("n", KEY_N); - knownAliasesX11SymVK.insert("o", KEY_O); - knownAliasesX11SymVK.insert("p", KEY_P); - knownAliasesX11SymVK.insert("q", KEY_Q); - knownAliasesX11SymVK.insert("r", KEY_R); - knownAliasesX11SymVK.insert("s", KEY_S); - knownAliasesX11SymVK.insert("t", KEY_T); - knownAliasesX11SymVK.insert("u", KEY_U); - knownAliasesX11SymVK.insert("v", KEY_V); - knownAliasesX11SymVK.insert("w", KEY_W); - knownAliasesX11SymVK.insert("x", KEY_X); - knownAliasesX11SymVK.insert("y", KEY_Y); - knownAliasesX11SymVK.insert("z", KEY_Z); - - knownAliasesX11SymVK.insert("Escape", KEY_ESC); - knownAliasesX11SymVK.insert("F1", KEY_F1); - knownAliasesX11SymVK.insert("F2", KEY_F2); - knownAliasesX11SymVK.insert("F3", KEY_F3); - knownAliasesX11SymVK.insert("F4", KEY_F4); - knownAliasesX11SymVK.insert("F5", KEY_F5); - knownAliasesX11SymVK.insert("F6", KEY_F6); - knownAliasesX11SymVK.insert("F7", KEY_F7); - knownAliasesX11SymVK.insert("F8", KEY_F8); - knownAliasesX11SymVK.insert("F9", KEY_F9); - knownAliasesX11SymVK.insert("F10", KEY_F10); - knownAliasesX11SymVK.insert("F11", KEY_F11); - knownAliasesX11SymVK.insert("F12", KEY_F12); - - knownAliasesX11SymVK.insert("grave", KEY_GRAVE); - knownAliasesX11SymVK.insert("1", KEY_1); - knownAliasesX11SymVK.insert("2", KEY_2); - knownAliasesX11SymVK.insert("3", KEY_3); - knownAliasesX11SymVK.insert("4", KEY_4); - knownAliasesX11SymVK.insert("5", KEY_5); - knownAliasesX11SymVK.insert("6", KEY_6); - knownAliasesX11SymVK.insert("7", KEY_7); - knownAliasesX11SymVK.insert("8", KEY_8); - knownAliasesX11SymVK.insert("9", KEY_9); - knownAliasesX11SymVK.insert("0", KEY_0); - knownAliasesX11SymVK.insert("minus", KEY_MINUS); - knownAliasesX11SymVK.insert("equal", KEY_EQUAL); - knownAliasesX11SymVK.insert("BackSpace", KEY_BACKSPACE); - knownAliasesX11SymVK.insert("Tab", KEY_TAB); - knownAliasesX11SymVK.insert("bracketleft", KEY_LEFTBRACE); - knownAliasesX11SymVK.insert("bracketright", KEY_RIGHTBRACE); - knownAliasesX11SymVK.insert("backslash", KEY_BACKSLASH); - knownAliasesX11SymVK.insert("Caps_Lock", KEY_CAPSLOCK); - knownAliasesX11SymVK.insert("semicolon", KEY_SEMICOLON); - knownAliasesX11SymVK.insert("apostrophe", KEY_APOSTROPHE); - knownAliasesX11SymVK.insert("Return", KEY_ENTER); - knownAliasesX11SymVK.insert("Shift_L", KEY_LEFTSHIFT); - knownAliasesX11SymVK.insert("comma", KEY_COMMA); - knownAliasesX11SymVK.insert("period", KEY_DOT); - knownAliasesX11SymVK.insert("slash", KEY_SLASH); - knownAliasesX11SymVK.insert("Control_L", KEY_LEFTCTRL); - knownAliasesX11SymVK.insert("Super_L", KEY_MENU); - knownAliasesX11SymVK.insert("Alt_L", KEY_LEFTALT); - knownAliasesX11SymVK.insert("space", KEY_SPACE); - knownAliasesX11SymVK.insert("Alt_R", KEY_RIGHTALT); - knownAliasesX11SymVK.insert("Menu", KEY_COMPOSE); - knownAliasesX11SymVK.insert("Control_R", KEY_RIGHTCTRL); - knownAliasesX11SymVK.insert("Shift_R", KEY_RIGHTSHIFT); - - knownAliasesX11SymVK.insert("Up", KEY_UP); - knownAliasesX11SymVK.insert("Left", KEY_LEFT); - knownAliasesX11SymVK.insert("Down", KEY_DOWN); - knownAliasesX11SymVK.insert("Right", KEY_RIGHT); - knownAliasesX11SymVK.insert("Print", KEY_PRINT); - knownAliasesX11SymVK.insert("Insert", KEY_INSERT); - knownAliasesX11SymVK.insert("Delete", KEY_DELETE); - knownAliasesX11SymVK.insert("Home", KEY_HOME); - knownAliasesX11SymVK.insert("End", KEY_END); - knownAliasesX11SymVK.insert("Prior", KEY_PAGEUP); - knownAliasesX11SymVK.insert("Next", KEY_PAGEDOWN); - - knownAliasesX11SymVK.insert("Num_Lock", KEY_NUMLOCK); - knownAliasesX11SymVK.insert("KP_Divide", KEY_KPSLASH); - knownAliasesX11SymVK.insert("KP_Multiply", KEY_KPASTERISK); - knownAliasesX11SymVK.insert("KP_Subtract", KEY_KPMINUS); - knownAliasesX11SymVK.insert("KP_Add", KEY_KPPLUS); - knownAliasesX11SymVK.insert("KP_Enter", KEY_KPENTER); - - knownAliasesX11SymVK.insert("KP_1", KEY_KP1); - knownAliasesX11SymVK.insert("KP_2", KEY_KP2); - knownAliasesX11SymVK.insert("KP_3", KEY_KP3); - knownAliasesX11SymVK.insert("KP_4", KEY_KP4); - knownAliasesX11SymVK.insert("KP_5", KEY_KP5); - knownAliasesX11SymVK.insert("KP_6", KEY_KP6); - knownAliasesX11SymVK.insert("KP_7", KEY_KP7); - knownAliasesX11SymVK.insert("KP_8", KEY_KP8); - knownAliasesX11SymVK.insert("KP_9", KEY_KP9); - knownAliasesX11SymVK.insert("KP_0", KEY_KP0); - knownAliasesX11SymVK.insert("KP_Decimal", KEY_KPDOT); - - knownAliasesX11SymVK.insert("Scroll_Lock", KEY_SCROLLLOCK); - knownAliasesX11SymVK.insert("Pause", KEY_PAUSE); - knownAliasesX11SymVK.insert("Multi_key", KEY_RIGHTALT); - } + populateX11SymVk(knownAliasesX11SymVK); if (getKnownAliasesVKStrings().isEmpty()) - { - knownAliasesVKStrings.insert(KEY_A, tr("a")); - knownAliasesVKStrings.insert(KEY_B, tr("b")); - knownAliasesVKStrings.insert(KEY_C, tr("c")); - knownAliasesVKStrings.insert(KEY_D, tr("d")); - knownAliasesVKStrings.insert(KEY_E, tr("e")); - knownAliasesVKStrings.insert(KEY_F, tr("f")); - knownAliasesVKStrings.insert(KEY_G, tr("g")); - knownAliasesVKStrings.insert(KEY_H, tr("h")); - knownAliasesVKStrings.insert(KEY_I, tr("i")); - knownAliasesVKStrings.insert(KEY_J, tr("j")); - knownAliasesVKStrings.insert(KEY_K, tr("k")); - knownAliasesVKStrings.insert(KEY_L, tr("l")); - knownAliasesVKStrings.insert(KEY_M, tr("m")); - knownAliasesVKStrings.insert(KEY_N, tr("n")); - knownAliasesVKStrings.insert(KEY_O, tr("o")); - knownAliasesVKStrings.insert(KEY_P, tr("p")); - knownAliasesVKStrings.insert(KEY_Q, tr("q")); - knownAliasesVKStrings.insert(KEY_R, tr("r")); - knownAliasesVKStrings.insert(KEY_S, tr("s")); - knownAliasesVKStrings.insert(KEY_T, tr("t")); - knownAliasesVKStrings.insert(KEY_U, tr("u")); - knownAliasesVKStrings.insert(KEY_V, tr("v")); - knownAliasesVKStrings.insert(KEY_W, tr("w")); - knownAliasesVKStrings.insert(KEY_X, tr("x")); - knownAliasesVKStrings.insert(KEY_Y, tr("y")); - knownAliasesVKStrings.insert(KEY_Z, tr("z")); - - knownAliasesVKStrings.insert(KEY_ESC, tr("Esc")); - knownAliasesVKStrings.insert(KEY_F1, tr("F1")); - knownAliasesVKStrings.insert(KEY_F2, tr("F2")); - knownAliasesVKStrings.insert(KEY_F3, tr("F3")); - knownAliasesVKStrings.insert(KEY_F4, tr("F4")); - knownAliasesVKStrings.insert(KEY_F5, tr("F5")); - knownAliasesVKStrings.insert(KEY_F6, tr("F6")); - knownAliasesVKStrings.insert(KEY_F7, tr("F7")); - knownAliasesVKStrings.insert(KEY_F8, tr("F8")); - knownAliasesVKStrings.insert(KEY_F9, tr("F9")); - knownAliasesVKStrings.insert(KEY_F10, tr("F10")); - knownAliasesVKStrings.insert(KEY_F11, tr("F11")); - knownAliasesVKStrings.insert(KEY_F12, tr("F12")); - - knownAliasesVKStrings.insert(KEY_GRAVE, tr("`")); - knownAliasesVKStrings.insert(KEY_1, tr("1")); - knownAliasesVKStrings.insert(KEY_2, tr("2")); - knownAliasesVKStrings.insert(KEY_3, tr("3")); - knownAliasesVKStrings.insert(KEY_4, tr("4")); - knownAliasesVKStrings.insert(KEY_5, tr("5")); - knownAliasesVKStrings.insert(KEY_6, tr("6")); - knownAliasesVKStrings.insert(KEY_7, tr("7")); - knownAliasesVKStrings.insert(KEY_8, tr("8")); - knownAliasesVKStrings.insert(KEY_9, tr("9")); - knownAliasesVKStrings.insert(KEY_0, tr("0")); - knownAliasesVKStrings.insert(KEY_MINUS, tr("-")); - knownAliasesVKStrings.insert(KEY_EQUAL, tr("=")); - knownAliasesVKStrings.insert(KEY_BACKSPACE, tr("BackSpace")); - knownAliasesVKStrings.insert(KEY_TAB, tr("Tab")); - knownAliasesVKStrings.insert(KEY_LEFTBRACE, tr("[")); - knownAliasesVKStrings.insert(KEY_RIGHTBRACE, tr("]")); - knownAliasesVKStrings.insert(KEY_BACKSLASH, tr("\\")); - knownAliasesVKStrings.insert(KEY_CAPSLOCK, tr("CapsLock")); - knownAliasesVKStrings.insert(KEY_SEMICOLON, tr(";")); - knownAliasesVKStrings.insert(KEY_APOSTROPHE, tr("'")); - knownAliasesVKStrings.insert(KEY_ENTER, tr("Enter")); - knownAliasesVKStrings.insert(KEY_LEFTSHIFT, tr("Shift_L")); - knownAliasesVKStrings.insert(KEY_COMMA, tr(",")); - knownAliasesVKStrings.insert(KEY_DOT, tr(".")); - knownAliasesVKStrings.insert(KEY_SLASH, tr("/")); - knownAliasesVKStrings.insert(KEY_LEFTCTRL, tr("Ctrl_L")); - knownAliasesVKStrings.insert(KEY_MENU, tr("Super_L")); - knownAliasesVKStrings.insert(KEY_LEFTALT, tr("Alt_L")); - knownAliasesVKStrings.insert(KEY_SPACE, tr("Space")); - knownAliasesVKStrings.insert(KEY_RIGHTALT, tr("Alt_R")); - knownAliasesVKStrings.insert(KEY_COMPOSE, tr("Menu")); - knownAliasesVKStrings.insert(KEY_RIGHTCTRL, tr("Ctrl_R")); - knownAliasesVKStrings.insert(KEY_RIGHTSHIFT, tr("Shift_R")); - - knownAliasesVKStrings.insert(KEY_UP, tr("Up")); - knownAliasesVKStrings.insert(KEY_LEFT, tr("Left")); - knownAliasesVKStrings.insert(KEY_DOWN, tr("Down")); - knownAliasesVKStrings.insert(KEY_RIGHT, tr("Right")); - knownAliasesVKStrings.insert(KEY_PRINT, tr("PrtSc")); - knownAliasesVKStrings.insert(KEY_INSERT, tr("Ins")); - knownAliasesVKStrings.insert(KEY_DELETE, tr("Del")); - knownAliasesVKStrings.insert(KEY_HOME, tr("Home")); - knownAliasesVKStrings.insert(KEY_END, tr("End")); - knownAliasesVKStrings.insert(KEY_PAGEUP, tr("PgUp")); - knownAliasesVKStrings.insert(KEY_PAGEDOWN, tr("PgDn")); - - knownAliasesVKStrings.insert(KEY_NUMLOCK, tr("NumLock")); - knownAliasesVKStrings.insert(KEY_KPSLASH, tr("/")); - knownAliasesVKStrings.insert(KEY_KPASTERISK, tr("*")); - knownAliasesVKStrings.insert(KEY_KPMINUS, tr("-")); - knownAliasesVKStrings.insert(KEY_KPPLUS, tr("+")); - knownAliasesVKStrings.insert(KEY_KPENTER, tr("KP_Enter")); - - knownAliasesVKStrings.insert(KEY_KP1, tr("KP_1")); - knownAliasesVKStrings.insert(KEY_KP2, tr("KP_2")); - knownAliasesVKStrings.insert(KEY_KP3, tr("KP_3")); - knownAliasesVKStrings.insert(KEY_KP4, tr("KP_4")); - knownAliasesVKStrings.insert(KEY_KP5, tr("KP_5")); - knownAliasesVKStrings.insert(KEY_KP6, tr("KP_6")); - knownAliasesVKStrings.insert(KEY_KP7, tr("KP_7")); - knownAliasesVKStrings.insert(KEY_KP8, tr("KP_8")); - knownAliasesVKStrings.insert(KEY_KP9, tr("KP_9")); - knownAliasesVKStrings.insert(KEY_KP0, tr("KP_0")); - - knownAliasesVKStrings.insert(KEY_SCROLLLOCK, tr("SCLK")); - knownAliasesVKStrings.insert(KEY_PAUSE, tr("Pause")); - knownAliasesVKStrings.insert(KEY_KPDOT, tr(".")); - knownAliasesVKStrings.insert(KEY_LEFTMETA, tr("Super_L")); - knownAliasesVKStrings.insert(KEY_RIGHTMETA, tr("Super_R")); - knownAliasesVKStrings.insert(KEY_MUTE, tr("Mute")); - knownAliasesVKStrings.insert(KEY_VOLUMEDOWN, tr("VolDn")); - knownAliasesVKStrings.insert(KEY_VOLUMEUP, tr("VolUp")); - knownAliasesVKStrings.insert(KEY_PLAYPAUSE, tr("Play")); - knownAliasesVKStrings.insert(KEY_STOPCD, tr("Stop")); - knownAliasesVKStrings.insert(KEY_PREVIOUSSONG, tr("Prev")); - knownAliasesVKStrings.insert(KEY_NEXTSONG, tr("Next")); - } + populateXVkStrings(knownAliasesVKStrings); +} + +void UInputHelper::populateX11SymVk(QHash& knownAliasesX11SymVK) +{ + knownAliasesX11SymVK.insert("a", KEY_A); + knownAliasesX11SymVK.insert("b", KEY_B); + knownAliasesX11SymVK.insert("c", KEY_C); + knownAliasesX11SymVK.insert("d", KEY_D); + knownAliasesX11SymVK.insert("e", KEY_E); + knownAliasesX11SymVK.insert("f", KEY_F); + knownAliasesX11SymVK.insert("g", KEY_G); + knownAliasesX11SymVK.insert("h", KEY_H); + knownAliasesX11SymVK.insert("i", KEY_I); + knownAliasesX11SymVK.insert("j", KEY_J); + knownAliasesX11SymVK.insert("k", KEY_K); + knownAliasesX11SymVK.insert("l", KEY_L); + knownAliasesX11SymVK.insert("m", KEY_M); + knownAliasesX11SymVK.insert("n", KEY_N); + knownAliasesX11SymVK.insert("o", KEY_O); + knownAliasesX11SymVK.insert("p", KEY_P); + knownAliasesX11SymVK.insert("q", KEY_Q); + knownAliasesX11SymVK.insert("r", KEY_R); + knownAliasesX11SymVK.insert("s", KEY_S); + knownAliasesX11SymVK.insert("t", KEY_T); + knownAliasesX11SymVK.insert("u", KEY_U); + knownAliasesX11SymVK.insert("v", KEY_V); + knownAliasesX11SymVK.insert("w", KEY_W); + knownAliasesX11SymVK.insert("x", KEY_X); + knownAliasesX11SymVK.insert("y", KEY_Y); + knownAliasesX11SymVK.insert("z", KEY_Z); + + knownAliasesX11SymVK.insert("Escape", KEY_ESC); + knownAliasesX11SymVK.insert("F1", KEY_F1); + knownAliasesX11SymVK.insert("F2", KEY_F2); + knownAliasesX11SymVK.insert("F3", KEY_F3); + knownAliasesX11SymVK.insert("F4", KEY_F4); + knownAliasesX11SymVK.insert("F5", KEY_F5); + knownAliasesX11SymVK.insert("F6", KEY_F6); + knownAliasesX11SymVK.insert("F7", KEY_F7); + knownAliasesX11SymVK.insert("F8", KEY_F8); + knownAliasesX11SymVK.insert("F9", KEY_F9); + knownAliasesX11SymVK.insert("F10", KEY_F10); + knownAliasesX11SymVK.insert("F11", KEY_F11); + knownAliasesX11SymVK.insert("F12", KEY_F12); + + knownAliasesX11SymVK.insert("grave", KEY_GRAVE); + knownAliasesX11SymVK.insert("1", KEY_1); + knownAliasesX11SymVK.insert("2", KEY_2); + knownAliasesX11SymVK.insert("3", KEY_3); + knownAliasesX11SymVK.insert("4", KEY_4); + knownAliasesX11SymVK.insert("5", KEY_5); + knownAliasesX11SymVK.insert("6", KEY_6); + knownAliasesX11SymVK.insert("7", KEY_7); + knownAliasesX11SymVK.insert("8", KEY_8); + knownAliasesX11SymVK.insert("9", KEY_9); + knownAliasesX11SymVK.insert("0", KEY_0); + knownAliasesX11SymVK.insert("minus", KEY_MINUS); + knownAliasesX11SymVK.insert("equal", KEY_EQUAL); + knownAliasesX11SymVK.insert("BackSpace", KEY_BACKSPACE); + knownAliasesX11SymVK.insert("Tab", KEY_TAB); + knownAliasesX11SymVK.insert("bracketleft", KEY_LEFTBRACE); + knownAliasesX11SymVK.insert("bracketright", KEY_RIGHTBRACE); + knownAliasesX11SymVK.insert("backslash", KEY_BACKSLASH); + knownAliasesX11SymVK.insert("Caps_Lock", KEY_CAPSLOCK); + knownAliasesX11SymVK.insert("semicolon", KEY_SEMICOLON); + knownAliasesX11SymVK.insert("apostrophe", KEY_APOSTROPHE); + knownAliasesX11SymVK.insert("Return", KEY_ENTER); + knownAliasesX11SymVK.insert("Shift_L", KEY_LEFTSHIFT); + knownAliasesX11SymVK.insert("comma", KEY_COMMA); + knownAliasesX11SymVK.insert("period", KEY_DOT); + knownAliasesX11SymVK.insert("slash", KEY_SLASH); + knownAliasesX11SymVK.insert("Control_L", KEY_LEFTCTRL); + knownAliasesX11SymVK.insert("Super_L", KEY_MENU); + knownAliasesX11SymVK.insert("Alt_L", KEY_LEFTALT); + knownAliasesX11SymVK.insert("space", KEY_SPACE); + knownAliasesX11SymVK.insert("Alt_R", KEY_RIGHTALT); + knownAliasesX11SymVK.insert("Menu", KEY_COMPOSE); + knownAliasesX11SymVK.insert("Control_R", KEY_RIGHTCTRL); + knownAliasesX11SymVK.insert("Shift_R", KEY_RIGHTSHIFT); + + knownAliasesX11SymVK.insert("Up", KEY_UP); + knownAliasesX11SymVK.insert("Left", KEY_LEFT); + knownAliasesX11SymVK.insert("Down", KEY_DOWN); + knownAliasesX11SymVK.insert("Right", KEY_RIGHT); + knownAliasesX11SymVK.insert("Print", KEY_PRINT); + knownAliasesX11SymVK.insert("Insert", KEY_INSERT); + knownAliasesX11SymVK.insert("Delete", KEY_DELETE); + knownAliasesX11SymVK.insert("Home", KEY_HOME); + knownAliasesX11SymVK.insert("End", KEY_END); + knownAliasesX11SymVK.insert("Prior", KEY_PAGEUP); + knownAliasesX11SymVK.insert("Next", KEY_PAGEDOWN); + + knownAliasesX11SymVK.insert("Num_Lock", KEY_NUMLOCK); + knownAliasesX11SymVK.insert("KP_Divide", KEY_KPSLASH); + knownAliasesX11SymVK.insert("KP_Multiply", KEY_KPASTERISK); + knownAliasesX11SymVK.insert("KP_Subtract", KEY_KPMINUS); + knownAliasesX11SymVK.insert("KP_Add", KEY_KPPLUS); + knownAliasesX11SymVK.insert("KP_Enter", KEY_KPENTER); + + knownAliasesX11SymVK.insert("KP_1", KEY_KP1); + knownAliasesX11SymVK.insert("KP_2", KEY_KP2); + knownAliasesX11SymVK.insert("KP_3", KEY_KP3); + knownAliasesX11SymVK.insert("KP_4", KEY_KP4); + knownAliasesX11SymVK.insert("KP_5", KEY_KP5); + knownAliasesX11SymVK.insert("KP_6", KEY_KP6); + knownAliasesX11SymVK.insert("KP_7", KEY_KP7); + knownAliasesX11SymVK.insert("KP_8", KEY_KP8); + knownAliasesX11SymVK.insert("KP_9", KEY_KP9); + knownAliasesX11SymVK.insert("KP_0", KEY_KP0); + knownAliasesX11SymVK.insert("KP_Decimal", KEY_KPDOT); + + knownAliasesX11SymVK.insert("Scroll_Lock", KEY_SCROLLLOCK); + knownAliasesX11SymVK.insert("Pause", KEY_PAUSE); + knownAliasesX11SymVK.insert("Multi_key", KEY_RIGHTALT); +} + +void UInputHelper::populateXVkStrings(QHash& knownAliasesVKStrings) +{ + knownAliasesVKStrings.insert(KEY_A, tr("a")); + knownAliasesVKStrings.insert(KEY_B, tr("b")); + knownAliasesVKStrings.insert(KEY_C, tr("c")); + knownAliasesVKStrings.insert(KEY_D, tr("d")); + knownAliasesVKStrings.insert(KEY_E, tr("e")); + knownAliasesVKStrings.insert(KEY_F, tr("f")); + knownAliasesVKStrings.insert(KEY_G, tr("g")); + knownAliasesVKStrings.insert(KEY_H, tr("h")); + knownAliasesVKStrings.insert(KEY_I, tr("i")); + knownAliasesVKStrings.insert(KEY_J, tr("j")); + knownAliasesVKStrings.insert(KEY_K, tr("k")); + knownAliasesVKStrings.insert(KEY_L, tr("l")); + knownAliasesVKStrings.insert(KEY_M, tr("m")); + knownAliasesVKStrings.insert(KEY_N, tr("n")); + knownAliasesVKStrings.insert(KEY_O, tr("o")); + knownAliasesVKStrings.insert(KEY_P, tr("p")); + knownAliasesVKStrings.insert(KEY_Q, tr("q")); + knownAliasesVKStrings.insert(KEY_R, tr("r")); + knownAliasesVKStrings.insert(KEY_S, tr("s")); + knownAliasesVKStrings.insert(KEY_T, tr("t")); + knownAliasesVKStrings.insert(KEY_U, tr("u")); + knownAliasesVKStrings.insert(KEY_V, tr("v")); + knownAliasesVKStrings.insert(KEY_W, tr("w")); + knownAliasesVKStrings.insert(KEY_X, tr("x")); + knownAliasesVKStrings.insert(KEY_Y, tr("y")); + knownAliasesVKStrings.insert(KEY_Z, tr("z")); + + knownAliasesVKStrings.insert(KEY_ESC, tr("Esc")); + knownAliasesVKStrings.insert(KEY_F1, tr("F1")); + knownAliasesVKStrings.insert(KEY_F2, tr("F2")); + knownAliasesVKStrings.insert(KEY_F3, tr("F3")); + knownAliasesVKStrings.insert(KEY_F4, tr("F4")); + knownAliasesVKStrings.insert(KEY_F5, tr("F5")); + knownAliasesVKStrings.insert(KEY_F6, tr("F6")); + knownAliasesVKStrings.insert(KEY_F7, tr("F7")); + knownAliasesVKStrings.insert(KEY_F8, tr("F8")); + knownAliasesVKStrings.insert(KEY_F9, tr("F9")); + knownAliasesVKStrings.insert(KEY_F10, tr("F10")); + knownAliasesVKStrings.insert(KEY_F11, tr("F11")); + knownAliasesVKStrings.insert(KEY_F12, tr("F12")); + + knownAliasesVKStrings.insert(KEY_GRAVE, tr("`")); + knownAliasesVKStrings.insert(KEY_1, tr("1")); + knownAliasesVKStrings.insert(KEY_2, tr("2")); + knownAliasesVKStrings.insert(KEY_3, tr("3")); + knownAliasesVKStrings.insert(KEY_4, tr("4")); + knownAliasesVKStrings.insert(KEY_5, tr("5")); + knownAliasesVKStrings.insert(KEY_6, tr("6")); + knownAliasesVKStrings.insert(KEY_7, tr("7")); + knownAliasesVKStrings.insert(KEY_8, tr("8")); + knownAliasesVKStrings.insert(KEY_9, tr("9")); + knownAliasesVKStrings.insert(KEY_0, tr("0")); + knownAliasesVKStrings.insert(KEY_MINUS, tr("-")); + knownAliasesVKStrings.insert(KEY_EQUAL, tr("=")); + knownAliasesVKStrings.insert(KEY_BACKSPACE, tr("BackSpace")); + knownAliasesVKStrings.insert(KEY_TAB, tr("Tab")); + knownAliasesVKStrings.insert(KEY_LEFTBRACE, tr("[")); + knownAliasesVKStrings.insert(KEY_RIGHTBRACE, tr("]")); + knownAliasesVKStrings.insert(KEY_BACKSLASH, tr("\\")); + knownAliasesVKStrings.insert(KEY_CAPSLOCK, tr("CapsLock")); + knownAliasesVKStrings.insert(KEY_SEMICOLON, tr(";")); + knownAliasesVKStrings.insert(KEY_APOSTROPHE, tr("'")); + knownAliasesVKStrings.insert(KEY_ENTER, tr("Enter")); + knownAliasesVKStrings.insert(KEY_LEFTSHIFT, tr("Shift_L")); + knownAliasesVKStrings.insert(KEY_COMMA, tr(",")); + knownAliasesVKStrings.insert(KEY_DOT, tr(".")); + knownAliasesVKStrings.insert(KEY_SLASH, tr("/")); + knownAliasesVKStrings.insert(KEY_LEFTCTRL, tr("Ctrl_L")); + knownAliasesVKStrings.insert(KEY_MENU, tr("Super_L")); + knownAliasesVKStrings.insert(KEY_LEFTALT, tr("Alt_L")); + knownAliasesVKStrings.insert(KEY_SPACE, tr("Space")); + knownAliasesVKStrings.insert(KEY_RIGHTALT, tr("Alt_R")); + knownAliasesVKStrings.insert(KEY_COMPOSE, tr("Menu")); + knownAliasesVKStrings.insert(KEY_RIGHTCTRL, tr("Ctrl_R")); + knownAliasesVKStrings.insert(KEY_RIGHTSHIFT, tr("Shift_R")); + + knownAliasesVKStrings.insert(KEY_UP, tr("Up")); + knownAliasesVKStrings.insert(KEY_LEFT, tr("Left")); + knownAliasesVKStrings.insert(KEY_DOWN, tr("Down")); + knownAliasesVKStrings.insert(KEY_RIGHT, tr("Right")); + knownAliasesVKStrings.insert(KEY_PRINT, tr("PrtSc")); + knownAliasesVKStrings.insert(KEY_INSERT, tr("Ins")); + knownAliasesVKStrings.insert(KEY_DELETE, tr("Del")); + knownAliasesVKStrings.insert(KEY_HOME, tr("Home")); + knownAliasesVKStrings.insert(KEY_END, tr("End")); + knownAliasesVKStrings.insert(KEY_PAGEUP, tr("PgUp")); + knownAliasesVKStrings.insert(KEY_PAGEDOWN, tr("PgDn")); + + knownAliasesVKStrings.insert(KEY_NUMLOCK, tr("NumLock")); + knownAliasesVKStrings.insert(KEY_KPSLASH, tr("/")); + knownAliasesVKStrings.insert(KEY_KPASTERISK, tr("*")); + knownAliasesVKStrings.insert(KEY_KPMINUS, tr("-")); + knownAliasesVKStrings.insert(KEY_KPPLUS, tr("+")); + knownAliasesVKStrings.insert(KEY_KPENTER, tr("KP_Enter")); + + knownAliasesVKStrings.insert(KEY_KP1, tr("KP_1")); + knownAliasesVKStrings.insert(KEY_KP2, tr("KP_2")); + knownAliasesVKStrings.insert(KEY_KP3, tr("KP_3")); + knownAliasesVKStrings.insert(KEY_KP4, tr("KP_4")); + knownAliasesVKStrings.insert(KEY_KP5, tr("KP_5")); + knownAliasesVKStrings.insert(KEY_KP6, tr("KP_6")); + knownAliasesVKStrings.insert(KEY_KP7, tr("KP_7")); + knownAliasesVKStrings.insert(KEY_KP8, tr("KP_8")); + knownAliasesVKStrings.insert(KEY_KP9, tr("KP_9")); + knownAliasesVKStrings.insert(KEY_KP0, tr("KP_0")); + + knownAliasesVKStrings.insert(KEY_SCROLLLOCK, tr("SCLK")); + knownAliasesVKStrings.insert(KEY_PAUSE, tr("Pause")); + knownAliasesVKStrings.insert(KEY_KPDOT, tr(".")); + knownAliasesVKStrings.insert(KEY_LEFTMETA, tr("Super_L")); + knownAliasesVKStrings.insert(KEY_RIGHTMETA, tr("Super_R")); + knownAliasesVKStrings.insert(KEY_MUTE, tr("Mute")); + knownAliasesVKStrings.insert(KEY_VOLUMEDOWN, tr("VolDn")); + knownAliasesVKStrings.insert(KEY_VOLUMEUP, tr("VolUp")); + knownAliasesVKStrings.insert(KEY_PLAYPAUSE, tr("Play")); + knownAliasesVKStrings.insert(KEY_STOPCD, tr("Stop")); + knownAliasesVKStrings.insert(KEY_PREVIOUSSONG, tr("Prev")); + knownAliasesVKStrings.insert(KEY_NEXTSONG, tr("Next")); } UInputHelper* UInputHelper::getInstance() { - if (_instance == nullptr) - { + if (!_instance) _instance = new UInputHelper(); - } return _instance; } @@ -297,15 +302,10 @@ void UInputHelper::deleteInstance() QString UInputHelper::getDisplayString(int virtualkey) { - QString temp; - if (virtualkey <= 0) - { - temp = tr("[NO KEY]"); - } - else if (getKnownAliasesVKStrings().contains(virtualkey)) - { - temp = getKnownAliasesVKStrings().value(virtualkey); - } + QString temp = QString(); + + if (virtualkey <= 0) temp = tr("[NO KEY]"); + else if (getKnownAliasesVKStrings().contains(virtualkey)) temp = getKnownAliasesVKStrings().value(virtualkey); return temp; } @@ -313,10 +313,9 @@ QString UInputHelper::getDisplayString(int virtualkey) int UInputHelper::getVirtualKey(QString codestring) { int temp = 0; + if (getKnownAliasesX11SymVK().contains(codestring)) - { temp = getKnownAliasesX11SymVK().value(codestring); - } return temp; } diff --git a/src/uinputhelper.h b/src/uinputhelper.h old mode 100644 new mode 100755 index d2a06d1ec..08537f375 --- a/src/uinputhelper.h +++ b/src/uinputhelper.h @@ -45,6 +45,10 @@ class UInputHelper : public QObject QHash knownAliasesX11SymVK; // <.., unsigned> QHash knownAliasesVKStrings; // +private: + void populateXVkStrings(QHash& knownAliasesVKStrings); + void populateX11SymVk(QHash& knownAliasesX11SymVK); + }; #endif // UINPUTHELPER_H diff --git a/src/unixcapturewindowutility.cpp b/src/unixcapturewindowutility.cpp old mode 100644 new mode 100755 index 659dfb16d..16bd35c9d --- a/src/unixcapturewindowutility.cpp +++ b/src/unixcapturewindowutility.cpp @@ -60,8 +60,8 @@ void UnixCaptureWindowUtility::attemptWindowCapture() Window target_window = None; int status = 0; Display *display = nullptr; - QString potentialXDisplayString = X11Extras::getInstance()->getXDisplayString(); + if (!potentialXDisplayString.isEmpty()) { QByteArray tempByteArray = potentialXDisplayString.toLocal8Bit(); @@ -78,6 +78,7 @@ void UnixCaptureWindowUtility::attemptWindowCapture() status = XGrabPointer(display, rootWin, False, ButtonPressMask, GrabModeSync, GrabModeAsync, None, cursor, CurrentTime); + if (status == Success) { XGrabKey(display, XKeysymToKeycode(display, static_cast(x11KeyMapper.returnVirtualKey(Qt::Key_Escape))), 0, rootWin, @@ -86,17 +87,18 @@ void UnixCaptureWindowUtility::attemptWindowCapture() XEvent event; XAllowEvents(display, SyncPointer, CurrentTime); XWindowEvent(display, rootWin, ButtonPressMask|KeyPressMask, &event); + switch (event.type) { case (ButtonPress): + target_window = event.xbutton.subwindow; + if (target_window == None) - { target_window = event.xbutton.window; - } #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << QString::number(target_window, 16); + qDebug() << QString::number(target_window, 16); #endif break; @@ -106,6 +108,9 @@ void UnixCaptureWindowUtility::attemptWindowCapture() escaped = true; break; } + + default: + break; } XUngrabKey(display, XKeysymToKeycode(display, static_cast(x11KeyMapper.returnVirtualKey(Qt::Key_Escape))), @@ -114,14 +119,8 @@ void UnixCaptureWindowUtility::attemptWindowCapture() XFlush(display); } - if (target_window != None) - { - targetWindow = static_cast(target_window); - } - else if (!escaped) - { - failed = true; - } + if (target_window != None) targetWindow = target_window; + else if (!escaped) failed = true; XCloseDisplay(display); emit captureFinished(); diff --git a/src/unixcapturewindowutility.h b/src/unixcapturewindowutility.h old mode 100644 new mode 100755 diff --git a/src/unixwindowinfodialog.cpp b/src/unixwindowinfodialog.cpp old mode 100644 new mode 100755 diff --git a/src/unixwindowinfodialog.h b/src/unixwindowinfodialog.h old mode 100644 new mode 100755 diff --git a/src/unixwindowinfodialog.ui b/src/unixwindowinfodialog.ui old mode 100644 new mode 100755 diff --git a/src/vdpad.cpp b/src/vdpad.cpp old mode 100644 new mode 100755 index bc6551c68..fdd6120d8 --- a/src/vdpad.cpp +++ b/src/vdpad.cpp @@ -17,12 +17,11 @@ #include "vdpad.h" +#include "globalvariables.h" #include "messagehandler.h" #include -const QString VDPad::xmlName = "vdpad"; - VDPad::VDPad(int index, int originset, SetJoystick *parentSet, QObject *parent) : JoyDPad(index, originset, parentSet, parent) @@ -91,7 +90,7 @@ QString VDPad::getXmlName() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return this->xmlName; + return GlobalVariables::VDPad::xmlName; } QString VDPad::getName(bool forceFullFormat, bool displayName) @@ -103,18 +102,15 @@ QString VDPad::getName(bool forceFullFormat, bool displayName) if (!getDpadName().isEmpty() && displayName) { if (forceFullFormat) - { label.append(trUtf8("VDPad")).append(" "); - } label.append(getDpadName()); } else if (!getDefaultDpadName().isEmpty()) { if (forceFullFormat) - { label.append(trUtf8("VDPad")).append(" "); - } + label.append(getDefaultDpadName()); } else @@ -134,28 +130,19 @@ void VDPad::joyEvent(bool pressed, bool ignoresets) int tempDirection = static_cast(JoyDPadButton::DpadCentered); - /* - * Check which buttons are currently active - */ + // Check which buttons are currently active + if ((upButton != nullptr) && upButton->getButtonState()) - { tempDirection |= JoyDPadButton::DpadUp; - } if (downButton && downButton->getButtonState()) - { tempDirection |= JoyDPadButton::DpadDown; - } if (leftButton && leftButton->getButtonState()) - { tempDirection |= JoyDPadButton::DpadLeft; - } if (rightButton && rightButton->getButtonState()) - { tempDirection |= JoyDPadButton::DpadRight; - } JoyDPad::joyEvent(tempDirection, ignoresets); @@ -166,41 +153,48 @@ void VDPad::addVButton(JoyDPadButton::JoyDPadDirections direction, JoyButton *bu { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (direction == JoyDPadButton::DpadUp) + switch(direction) { - if (upButton != nullptr) + case JoyDPadButton::DpadUp: { - upButton->removeVDPad(); + if (upButton != nullptr) + upButton->removeVDPad(); + + upButton = button; + upButton->setVDPad(this); + + break; } - upButton = button; - upButton->setVDPad(this); - } - else if (direction == JoyDPadButton::DpadDown) - { - if (downButton != nullptr) + case JoyDPadButton::DpadDown: { - downButton->removeVDPad(); + if (downButton != nullptr) + downButton->removeVDPad(); + + downButton = button; + downButton->setVDPad(this); + + break; } - downButton = button; - downButton->setVDPad(this); - } - else if (direction == JoyDPadButton::DpadLeft) - { - if (leftButton != nullptr) + case JoyDPadButton::DpadLeft: { - leftButton->removeVDPad(); + if (leftButton != nullptr) + leftButton->removeVDPad(); + + leftButton = button; + leftButton->setVDPad(this); + + break; } - leftButton = button; - leftButton->setVDPad(this); - } - else if (direction == JoyDPadButton::DpadRight) - { - if (rightButton != nullptr) + case JoyDPadButton::DpadRight: { - rightButton->removeVDPad(); + if (rightButton != nullptr) + rightButton->removeVDPad(); + + rightButton = button; + rightButton->setVDPad(this); + + break; } - rightButton = button; - rightButton->setVDPad(this); } } @@ -275,21 +269,29 @@ JoyButton* VDPad::getVButton(JoyDPadButton::JoyDPadDirections direction) qInstallMessageHandler(MessageHandler::myMessageOutput); JoyButton *button = nullptr; - if (direction == JoyDPadButton::DpadUp) - { - button = upButton; - } - else if (direction == JoyDPadButton::DpadDown) - { - button = downButton; - } - else if (direction == JoyDPadButton::DpadLeft) - { - button = leftButton; - } - else if (direction == JoyDPadButton::DpadRight) + + switch(direction) { - button = rightButton; + case JoyDPadButton::DpadUp: + { + button = upButton; + break; + } + case JoyDPadButton::DpadDown: + { + button = downButton; + break; + } + case JoyDPadButton::DpadLeft: + { + button = leftButton; + break; + } + case JoyDPadButton::DpadRight: + { + button = rightButton; + break; + } } return button; @@ -319,11 +321,10 @@ void VDPad::activatePendingEvent() { // Always use true. The proper direction value will be determined // in the joyEvent method. - joyEvent(true); + joyEvent(true); pendingVDPadEvent = false; } - } void VDPad::clearPendingEvent() diff --git a/src/vdpad.h b/src/vdpad.h old mode 100644 new mode 100755 index 3e38435a5..e608b9451 --- a/src/vdpad.h +++ b/src/vdpad.h @@ -37,8 +37,8 @@ class VDPad : public JoyDPad void removeVButton(JoyButton *button); JoyButton* getVButton(JoyDPadButton::JoyDPadDirections direction); bool isEmpty(); - virtual QString getName(bool forceFullFormat=false, bool displayName=false); - virtual QString getXmlName(); + virtual QString getName(bool forceFullFormat=false, bool displayName=false) override; + virtual QString getXmlName() override; void queueJoyEvent(bool ignoresets=false); bool hasPendingEvent(); @@ -50,8 +50,6 @@ class VDPad : public JoyDPad JoyButton *getRightButton() const; bool getPendingVDPadEvent() const; - static const QString xmlName; - public slots: void activatePendingEvent(); diff --git a/src/winappprofiletimerdialog.cpp b/src/winappprofiletimerdialog.cpp old mode 100644 new mode 100755 diff --git a/src/winappprofiletimerdialog.h b/src/winappprofiletimerdialog.h old mode 100644 new mode 100755 diff --git a/src/winappprofiletimerdialog.ui b/src/winappprofiletimerdialog.ui old mode 100644 new mode 100755 diff --git a/src/winextras.cpp b/src/winextras.cpp old mode 100644 new mode 100755 index 07d7c66d0..b8728831e --- a/src/winextras.cpp +++ b/src/winextras.cpp @@ -481,15 +481,7 @@ QString WinExtras::getCurrentWindowText() bool WinExtras::raiseProcessPriority() { - bool result = false; - result = SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS); - /*if (!result) - { - qDebug() << "COULD NOT RAISE PROCESS PRIORITY"; - } - */ - - return result; + return SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS); } QPoint WinExtras::getCursorPos() diff --git a/src/winextras.h b/src/winextras.h old mode 100644 new mode 100755 diff --git a/src/x11extras.cpp b/src/x11extras.cpp old mode 100644 new mode 100755 index 779c23316..45d344e39 --- a/src/x11extras.cpp +++ b/src/x11extras.cpp @@ -17,14 +17,12 @@ #include "common.h" +#include "globalvariables.h" #include "messagehandler.h" #include #include #include -#include -#include - #include #include @@ -34,13 +32,6 @@ #include "x11extras.h" - -const QString X11Extras::mouseDeviceName = PadderCommon::mouseDeviceName; -const QString X11Extras::keyboardDeviceName = PadderCommon::keyboardDeviceName; -const QString X11Extras::xtestMouseDeviceName = QString("Virtual core XTEST pointer"); - -QString X11Extras::_customDisplayString = QString(""); - static QThreadStorage displays; X11Extras* X11Extras::_instance = nullptr; @@ -62,18 +53,37 @@ X11Extras::~X11Extras() { qInstallMessageHandler(MessageHandler::myMessageOutput); + freeDisplay(); +} + + +template +void freeWindow(T* window) +{ + if (window != nullptr) + { + XFree(window); + window = nullptr; + } +} + + +void X11Extras::freeDisplay() +{ if (_display != nullptr) { - XCloseDisplay(display()); + XCloseDisplay(_display); _display = nullptr; } } + X11Extras *X11Extras::getInstance() { qInstallMessageHandler(MessageHandler::myMessageOutput); X11Extras *temp = nullptr; + if (!displays.hasLocalData()) { temp = new X11Extras(); @@ -99,6 +109,19 @@ void X11Extras::deleteInstance() } } +#ifdef Q_OS_UNIX +const char* X11Extras::getEnvVariable( const char* var ) const +{ + const char * val = ::getenv( var ); + if ( val == 0 ) { + return ""; + } + else { + return val; + } +} +#endif + /** * @brief Get display instance * @return Display struct @@ -114,8 +137,7 @@ bool X11Extras::hasValidDisplay() { qInstallMessageHandler(MessageHandler::myMessageOutput); - bool result = (_display != nullptr); - return result; + return (_display != nullptr); } /** @@ -125,11 +147,7 @@ void X11Extras::closeDisplay() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (_display != nullptr) - { - XCloseDisplay(display()); - _display = nullptr; - } + freeDisplay(); } /** @@ -159,7 +177,7 @@ void X11Extras::setCustomDisplay(QString displayString) { qInstallMessageHandler(MessageHandler::myMessageOutput); - _customDisplayString = displayString; + GlobalVariables::X11Extras::_customDisplayString = displayString; } /** @@ -185,10 +203,9 @@ QString X11Extras::getDisplayString(QString xcodestring) qInstallMessageHandler(MessageHandler::myMessageOutput); QString temp = QString(); + if (knownAliases.contains(xcodestring)) - { temp = knownAliases.value(xcodestring); - } return temp; } @@ -223,58 +240,7 @@ Window X11Extras::findParentClient(Window window) Window finalwindow = 0; Display *display = this->display(); - if (windowIsViewable(display, window) && - isWindowRelevant(display, window)) - { - finalwindow = window; - } - else - { - bool quitTraversal = false; - while (!quitTraversal) - { - children = nullptr; - - if (XQueryTree(display, window, &root, &parent, &children, &num_children)) - { - if (children) - { - // must be a test for NULL - XFree(children); - } - - if (parent) - { - if (windowIsViewable(display, parent) && - isWindowRelevant(display, parent)) - { - quitTraversal = true; - finalwindow = parent; - } - else if (parent == 0) - { - quitTraversal = true; - } - else if (parent == root) - { - quitTraversal = true; - } - else - { - window = parent; - } - } - else - { - quitTraversal = true; - } - } - else - { - quitTraversal = true; - } - } - } + checkPropertyOnWin(windowIsViewable(display, window) && isWindowRelevant(display, window), window, parent, finalwindow, root, children, display, num_children); return finalwindow; } @@ -295,19 +261,41 @@ int X11Extras::getApplicationPid(Window window) unsigned char *prop = nullptr; int pid = 0; Window finalwindow = 0; - + Window parent = 0; + Window root = 0; + Window *children = nullptr; + unsigned int num_children; Display *display = this->display(); atom = XInternAtom(display, "_NET_WM_PID", True); - if (windowHasProperty(display, window, atom)) + + checkPropertyOnWin(windowHasProperty(display, window, atom), window, parent, finalwindow, root, children, display, num_children); + + if (finalwindow) + { + int status = 0; + + status = XGetWindowProperty(display, finalwindow, atom, 0, 1024, false, AnyPropertyType, &actual_type, &actual_format, &nitems, &bytes_after, &prop); + + if ((status == 0) && (prop != nullptr)) + { + pid = prop[1] << 8; + pid += prop[0]; + XFree(prop); + } + } + + return pid; +} + + +void X11Extras::checkPropertyOnWin(bool windowCorrected, Window& window, Window& parent, Window& finalwindow, Window& root, Window *children, Display *display, unsigned int& num_children) +{ + if (windowCorrected) { finalwindow = window; } else { - Window parent = 0; - Window root = 0; - Window *children; - unsigned int num_children; bool quitTraversal = false; while (!quitTraversal) @@ -316,7 +304,7 @@ int X11Extras::getApplicationPid(Window window) if (XQueryTree(display, window, &root, &parent, &children, &num_children)) { - if (children) + if (children != nullptr) { // must be a test for NULL XFree(children); @@ -324,7 +312,7 @@ int X11Extras::getApplicationPid(Window window) if (parent) { - if (windowHasProperty(display, parent, atom)) + if (windowCorrected) { quitTraversal = true; finalwindow = parent; @@ -353,21 +341,6 @@ int X11Extras::getApplicationPid(Window window) } } } - - if (finalwindow) - { - int status = 0; - - status = XGetWindowProperty(display, finalwindow, atom, 0, 1024, false, AnyPropertyType, &actual_type, &actual_format, &nitems, &bytes_after, &prop); - if ((status == 0) && prop) - { - pid = prop[1] << 8; - pid += prop[0]; - XFree(prop); - } - } - - return pid; } /** @@ -380,27 +353,25 @@ QString X11Extras::getApplicationLocation(int pid) qInstallMessageHandler(MessageHandler::myMessageOutput); QString exepath = QString(); + if (pid > 0) { QString procString = QString("/proc/%1/exe").arg(pid); QFileInfo procFileInfo(procString); + if (procFileInfo.exists()) { char buf[1024]; QByteArray tempByteArray = procString.toLocal8Bit(); ssize_t len = readlink(tempByteArray.constData(), buf, sizeof(buf)-1); - if (len != -1) - { - buf[len] = '\0'; - } + + if (len != -1) buf[len] = '\0'; if (len > 0) { QString temp = QString::fromUtf8(buf); - if (!temp.isEmpty()) - { - exepath = temp; - } + + if (!temp.isEmpty()) exepath = temp; } } } @@ -435,7 +406,8 @@ Window X11Extras::findClientWindow(Window window) else { XQueryTree(display, window, &root, &parent, &children, &num_children); - if (children) + + if (children != nullptr) { for (unsigned int i = 0; (i < num_children) && !finalwindow; i++) { @@ -447,7 +419,7 @@ Window X11Extras::findClientWindow(Window window) } } - if (!finalwindow && children) + if (!finalwindow && (children != nullptr)) { for (unsigned int i = 0; (i < num_children) && !finalwindow; i++) { @@ -455,11 +427,7 @@ Window X11Extras::findClientWindow(Window window) } } - if (children) - { - XFree(children); - children = nullptr; - } + freeWindow(children); } return finalwindow; @@ -481,16 +449,12 @@ bool X11Extras::windowHasProperty(Display *display, Window window, Atom atom) &actual_type, &actual_format, &nitems, &bytes_after, &prop); - if ((status == Success) && prop) + if ((status == Success) && (prop != nullptr)) { result = true; } - if (prop != nullptr) - { - XFree(prop); - prop = nullptr; - } + freeWindow(prop); return result; } @@ -502,6 +466,7 @@ bool X11Extras::windowIsViewable(Display *display, Window window) bool result = false; XWindowAttributes xwa; XGetWindowAttributes(display, window, &xwa); + if ((xwa.c_class == InputOutput) && (xwa.map_state == IsViewable)) { result = true; @@ -530,9 +495,11 @@ bool X11Extras::isWindowRelevant(Display *display, Window window) temp.append(XInternAtom(display, "_NW_WM_NAME", True)); QListIterator iter(temp); + while (iter.hasNext()) { Atom current_atom = iter.next(); + if (windowHasProperty(display, window, current_atom)) { iter.toBack(); @@ -569,9 +536,11 @@ QString X11Extras::getWindowTitle(Window window) tempList.append(wm_name); tempList.append(net_wm_name); QListIterator iter(tempList); + while (iter.hasNext()) { Atom temp_atom = iter.next(); + if (windowHasProperty(display, window, temp_atom)) { iter.toBack(); @@ -583,21 +552,17 @@ QString X11Extras::getWindowTitle(Window window) &actual_type, &actual_format, &nitems, &bytes_after, &prop); - if ((status == Success) && prop) + if ((status == Success) && (prop != nullptr)) { - char *tempprop = (char*)prop; + char *tempprop = reinterpret_cast(prop); temp.append(QString::fromUtf8(tempprop)); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << temp; + qDebug() << temp; #endif } - if (prop != nullptr) - { - XFree(prop); - prop = nullptr; - } + freeWindow(prop); return temp; } @@ -621,52 +586,46 @@ QString X11Extras::getWindowClass(Window window) &actual_type, &actual_format, &nitems, &bytes_after, &prop); - if ((status == Success) && prop) + if ((status == Success) && (prop != nullptr)) { #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << nitems; + qDebug() << nitems; #endif - char *null_char = strchr((char*)prop, '\0'); - if ((((char*)prop) + nitems - 1) > null_char) + char *null_char = strchr(reinterpret_cast(prop), '\0'); + if (((reinterpret_cast(prop)) + nitems - 1) > null_char) { *(null_char) = ' '; } - char *tempprop = (char*)prop; + char *tempprop = reinterpret_cast(prop); temp.append(QString::fromUtf8(tempprop)); #ifndef QT_DEBUG_NO_OUTPUT - qDebug() << temp; - qDebug() << (char*)prop; + qDebug() << temp; + qDebug() << reinterpret_cast(prop); #endif } - if (prop != nullptr) - { - XFree(prop); - prop = nullptr; - } + freeWindow(prop); return temp; } + unsigned long X11Extras::getWindowInFocus() { qInstallMessageHandler(MessageHandler::myMessageOutput); unsigned long result = 0; - Window currentWindow = 0; int focusState = 0; - Display *display = this->display(); + XGetInputFocus(display, ¤tWindow, &focusState); if (currentWindow > 0) - { - result = static_cast(currentWindow); - } + result = static_cast(currentWindow); return result; } @@ -679,20 +638,17 @@ QString X11Extras::getXDisplayString() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return _customDisplayString; + return GlobalVariables::X11Extras::_customDisplayString; } int X11Extras::getGroup1KeySym(int virtualkey) { qInstallMessageHandler(MessageHandler::myMessageOutput); - int result = 0; Display *display = this->display(); + int temp = XKeysymToKeycode(display, virtualkey); - int temp = XKeysymToKeycode(display, static_cast(virtualkey)); - result = static_cast(XkbKeycodeToKeysym(display, static_cast(temp), 0, 0)); - - return result; + return XkbKeycodeToKeysym(display, temp, 0, 0); } void X11Extras::x11ResetMouseAccelerationChange(QString pointerName) @@ -702,8 +658,8 @@ void X11Extras::x11ResetMouseAccelerationChange(QString pointerName) int xi_opcode, event, error; xi_opcode = event = error = 0; Display *display = this->display(); - bool result = XQueryExtension(display, "XInputExtension", &xi_opcode, &event, &error); + if (!result) { Logger::LogInfo(trUtf8("xinput extension was not found. No mouse acceleration changes will occur.")); @@ -711,6 +667,7 @@ void X11Extras::x11ResetMouseAccelerationChange(QString pointerName) else { int ximajor = 2, ximinor = 0; + if (XIQueryVersion(display, &ximajor, &ximinor) != Success) { Logger::LogInfo(trUtf8("xinput version must be at least 2.0. No mouse acceleration changes will occur.")); @@ -726,16 +683,8 @@ void X11Extras::x11ResetMouseAccelerationChange(QString pointerName) int num_devices = 0; all_devices = XIQueryDevice(display, XIAllDevices, &num_devices); - for (int i=0; i < num_devices; i++) - { - current_devices = &all_devices[i]; - if ((current_devices->use == XISlavePointer) && - (QString::fromUtf8(current_devices->name) == pointerName)) - { - Logger::LogInfo(trUtf8("Virtual pointer found with id=%1.").arg(current_devices->deviceid)); - mouse_device = current_devices; - } - } + + findVirtualPtr(num_devices, current_devices, mouse_device, all_devices, pointerName); if (mouse_device != nullptr) { @@ -745,18 +694,8 @@ void X11Extras::x11ResetMouseAccelerationChange(QString pointerName) int feedback_id = -1; XFeedbackState *feedbacks = XGetFeedbackControl(display, device, &num_feedbacks); XFeedbackState *temp = feedbacks; - for (int i=0; (i < num_feedbacks) && (feedback_id == -1); i++) - { - if (temp->c_class == PtrFeedbackClass) - { - feedback_id = static_cast(temp->id); - } - if ((i + 1) < num_feedbacks) - { - temp = (XFeedbackState*) ((char*) temp + temp->length); - } - } + checkFeedback(temp, num_feedbacks, feedback_id); XFree(feedbacks); feedbacks = temp = nullptr; @@ -781,7 +720,7 @@ void X11Extras::x11ResetMouseAccelerationChange(QString pointerName) feedback.accelDenom = 1; XChangeFeedbackControl(display, device, DvAccelNum|DvAccelDenom|DvThreshold, - (XFeedbackControl*) &feedback); + reinterpret_cast(&feedback)); XSync(display, false); } @@ -789,10 +728,7 @@ void X11Extras::x11ResetMouseAccelerationChange(QString pointerName) XCloseDevice(display, device); } - if (all_devices) - { - XIFreeDeviceInfo(all_devices); - } + if (all_devices != nullptr) XIFreeDeviceInfo(all_devices); } } @@ -800,7 +736,7 @@ void X11Extras::x11ResetMouseAccelerationChange() { qInstallMessageHandler(MessageHandler::myMessageOutput); - x11ResetMouseAccelerationChange(mouseDeviceName); + x11ResetMouseAccelerationChange(GlobalVariables::X11Extras::mouseDeviceName); } struct X11Extras::ptrInformation X11Extras::getPointInformation(QString pointerName) @@ -814,9 +750,11 @@ struct X11Extras::ptrInformation X11Extras::getPointInformation(QString pointerN Display *display = this->display(); bool result = XQueryExtension(display, "XInputExtension", &xi_opcode, &event, &error); + if (result) { int ximajor = 2, ximinor = 0; + if (XIQueryVersion(display, &ximajor, &ximinor) != Success) { Logger::LogInfo(QObject::trUtf8("xinput version must be at least 2.0. No mouse acceleration changes will occur.")); @@ -832,17 +770,10 @@ struct X11Extras::ptrInformation X11Extras::getPointInformation(QString pointerN int num_devices = 0; all_devices = XIQueryDevice(display, XIAllDevices, &num_devices); - for (int i=0; i < num_devices; i++) - { - current_devices = &all_devices[i]; - if ((current_devices->use == XISlavePointer) && - (QString::fromUtf8(current_devices->name) == pointerName)) - { - mouse_device = current_devices; - } - } - if (mouse_device) + findVirtualPtr(num_devices, current_devices, mouse_device, all_devices, pointerName); + + if (mouse_device != nullptr) { XDevice *device = XOpenDevice(display, static_cast(mouse_device->deviceid)); @@ -850,18 +781,8 @@ struct X11Extras::ptrInformation X11Extras::getPointInformation(QString pointerN int feedback_id = -1; XFeedbackState *feedbacks = XGetFeedbackControl(display, device, &num_feedbacks); XFeedbackState *temp = feedbacks; - for (int i=0; (i < num_feedbacks) && (feedback_id == -1); i++) - { - if (temp->c_class == PtrFeedbackClass) - { - feedback_id = static_cast(temp->id); - } - if ((feedback_id == -1) && ((i + 1) < num_feedbacks)) - { - temp = (XFeedbackState*) ((char*) temp + temp->length); - } - } + checkFeedback(temp, num_feedbacks, feedback_id); if (feedback_id <= -1) { @@ -881,20 +802,49 @@ struct X11Extras::ptrInformation X11Extras::getPointInformation(QString pointerN XCloseDevice(display, device); } - if (all_devices) + if (all_devices != nullptr) XIFreeDeviceInfo(all_devices); + } + + return tempInfo; +} + + +void X11Extras::findVirtualPtr(int num_devices, XIDeviceInfo *current_devices, XIDeviceInfo *mouse_device, XIDeviceInfo *all_devices, QString pointerName) +{ + for (int i = 0; i < num_devices; i++) + { + current_devices = &all_devices[i]; + + if ((current_devices->use == XISlavePointer) && + (QString::fromUtf8(current_devices->name) == pointerName)) { - XIFreeDeviceInfo(all_devices); + mouse_device = current_devices; } } +} - return tempInfo; + +void X11Extras::checkFeedback(XFeedbackState *temp, int& num_feedbacks, int& feedback_id) +{ + for (int i = 0; (i < num_feedbacks) && (feedback_id == -1); i++) + { + if (temp->c_class == PtrFeedbackClass) + { + feedback_id = temp->id; + } + + if ((i + 1) < num_feedbacks) + { + temp = (XFeedbackState*) ((char*) temp + temp->length); + } + } } struct X11Extras::ptrInformation X11Extras::getPointInformation() { qInstallMessageHandler(MessageHandler::myMessageOutput); - return getPointInformation(mouseDeviceName); + return getPointInformation(GlobalVariables::X11Extras::mouseDeviceName); } QPoint X11Extras::getPos() diff --git a/src/x11extras.h b/src/x11extras.h old mode 100644 new mode 100755 index d5adaee44..8d2dc76cc --- a/src/x11extras.h +++ b/src/x11extras.h @@ -23,9 +23,12 @@ #include #include +#include +#include #include + class X11Extras : public QObject { Q_OBJECT @@ -72,16 +75,15 @@ class X11Extras : public QObject static void setCustomDisplay(QString displayString); + #ifdef Q_OS_UNIX + const char* getEnvVariable(const char* var) const; + #endif + static X11Extras* getInstance(); static void deleteInstance(); QHash const& getKnownAliases(); - static const QString mouseDeviceName; - static const QString keyboardDeviceName; - static const QString xtestMouseDeviceName; - - protected: explicit X11Extras(QObject *parent = nullptr); @@ -91,12 +93,16 @@ class X11Extras : public QObject bool isWindowRelevant(Display *display, Window window); static X11Extras *_instance; - static QString _customDisplayString; public slots: QPoint getPos(); private: + void checkPropertyOnWin(bool windowCorrected, Window& window, Window& parent, Window& finalwindow, Window& root, Window *children, Display *display, unsigned int& num_children); + void freeDisplay(); + void checkFeedback(XFeedbackState *temp, int& num_feedbacks, int& feedback_id); + void findVirtualPtr(int num_devices, XIDeviceInfo *current_devices, XIDeviceInfo *mouse_device, XIDeviceInfo *all_devices, QString pointerName); + QHash knownAliases; Display *_display; }; diff --git a/src/xmlconfigmigration.cpp b/src/xmlconfigmigration.cpp old mode 100644 new mode 100755 index 02af686f5..f2580f0b8 --- a/src/xmlconfigmigration.cpp +++ b/src/xmlconfigmigration.cpp @@ -37,6 +37,7 @@ XMLConfigMigration::XMLConfigMigration(QXmlStreamReader *reader, QObject *parent qInstallMessageHandler(MessageHandler::myMessageOutput); this->reader = reader; + if (reader->device() && reader->device()->isOpen()) { this->fileVersion = reader->attributes().value("configversion").toString().toInt(); @@ -52,11 +53,8 @@ bool XMLConfigMigration::requiresMigration() qInstallMessageHandler(MessageHandler::myMessageOutput); bool toMigrate = false; - if (fileVersion == 0) - { - toMigrate = false; - } - else if ((fileVersion >= 2) && (fileVersion <= PadderCommon::LATESTCONFIGMIGRATIONVERSION)) + + if ((fileVersion >= 2) && (fileVersion <= PadderCommon::LATESTCONFIGMIGRATIONVERSION)) { toMigrate = true; } @@ -69,17 +67,17 @@ QString XMLConfigMigration::migrate() qInstallMessageHandler(MessageHandler::myMessageOutput); QString tempXmlString = QString(); + if (requiresMigration()) { - int tempFileVersion = fileVersion; QString initialData = readConfigToString(); reader->clear(); reader->addData(initialData); - if ((tempFileVersion >= 2) && (tempFileVersion <= 5)) + if ((fileVersion >= 2) && (fileVersion <= 5)) { tempXmlString = version0006Migration(); - tempFileVersion = PadderCommon::LATESTCONFIGFILEVERSION; + fileVersion = PadderCommon::LATESTCONFIGFILEVERSION; } } @@ -93,6 +91,7 @@ QString XMLConfigMigration::readConfigToString() QString tempXmlString = QString(); QXmlStreamWriter writer(&tempXmlString); writer.setAutoFormatting(true); + while (!reader->atEnd()) { writer.writeCurrentToken(*reader); @@ -156,6 +155,7 @@ QString XMLConfigMigration::version0006Migration() slotcode = AntKeyMapper::getInstance()->returnQtKey(slotcode); #elif defined(Q_OS_UNIX) BaseEventHandler *handler = EventHandlerFactory::getInstance()->handler(); + if (handler->getIdentifier() == "xtest") { slotcode = AntKeyMapper::getInstance()->returnQtKey(X11KeyCodeToX11KeySym(slotcode)); @@ -183,12 +183,14 @@ QString XMLConfigMigration::version0006Migration() writer.writeTextElement("mode", slotmode); } + writer.writeCurrentToken(*reader); } else { writer.writeCurrentToken(*reader); } + reader->readNext(); } diff --git a/src/xmlconfigmigration.h b/src/xmlconfigmigration.h old mode 100644 new mode 100755 diff --git a/src/xmlconfigreader.cpp b/src/xmlconfigreader.cpp old mode 100644 new mode 100755 index 1dcf2f970..a0f69e91b --- a/src/xmlconfigreader.cpp +++ b/src/xmlconfigreader.cpp @@ -17,6 +17,7 @@ #include "xmlconfigreader.h" +#include "globalvariables.h" #include "messagehandler.h" #include "inputdevice.h" #include "xmlconfigmigration.h" @@ -34,7 +35,6 @@ #include - XMLConfigReader::XMLConfigReader(QObject *parent) : QObject(parent) { @@ -42,7 +42,7 @@ XMLConfigReader::XMLConfigReader(QObject *parent) : xml = new QXmlStreamReader(); configFile = nullptr; - joystick = nullptr; + m_joystick = nullptr; initDeviceTypes(); } @@ -53,9 +53,7 @@ XMLConfigReader::~XMLConfigReader() if (configFile != nullptr) { if (configFile->isOpen()) - { configFile->close(); - } delete configFile; configFile = nullptr; @@ -72,7 +70,7 @@ void XMLConfigReader::setJoystick(InputDevice *joystick) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->joystick = joystick; + m_joystick = joystick; } void XMLConfigReader::setFileName(QString filename) @@ -80,6 +78,7 @@ void XMLConfigReader::setFileName(QString filename) qInstallMessageHandler(MessageHandler::myMessageOutput); QFile *temp = new QFile(filename); + if (temp->exists()) { configFile = temp; @@ -95,7 +94,7 @@ void XMLConfigReader::configJoystick(InputDevice *joystick) { qInstallMessageHandler(MessageHandler::myMessageOutput); - this->joystick = joystick; + m_joystick = joystick; read(); } @@ -105,7 +104,7 @@ bool XMLConfigReader::read() bool error = false; - if ((configFile != nullptr) && configFile->exists() && (joystick != nullptr)) + if ((configFile != nullptr) && configFile->exists() && (m_joystick != nullptr)) { xml->clear(); @@ -116,29 +115,27 @@ bool XMLConfigReader::read() } xml->readNextStartElement(); + if (!deviceTypes.contains(xml->name().toString())) { xml->raiseError("Root node is not a joystick or controller"); } - else if (xml->name() == Joystick::xmlName) + else if (xml->name() == GlobalVariables::Joystick::xmlName) { XMLConfigMigration migration(xml); + if (migration.requiresMigration()) { QString migrationString = migration.migrate(); + if (migrationString.length() > 0) { - // Remove QFile from reader and clear state - xml->clear(); - // Add converted XML string to reader - xml->addData(migrationString); - // Skip joystick root node - xml->readNextStartElement(); - // Close current config file - configFile->close(); - - // Write converted XML to file - configFile->open(QFile::WriteOnly | QFile::Text); + xml->clear(); // Remove QFile from reader and clear state + xml->addData(migrationString); // Add converted XML string to reader + xml->readNextStartElement(); // Skip joystick root node + configFile->close(); // Close current config file + configFile->open(QFile::WriteOnly | QFile::Text); // Write converted XML to file + if (configFile->isOpen()) { configFile->write(migrationString.toLocal8Bit()); @@ -156,7 +153,7 @@ bool XMLConfigReader::read() { if (xml->isStartElement() && deviceTypes.contains(xml->name().toString())) { - joystick->readConfig(xml); + m_joystick->readConfig(xml); } else { @@ -168,9 +165,7 @@ bool XMLConfigReader::read() } if (configFile->isOpen()) - { configFile->close(); - } if (xml->hasError() && (xml->error() != QXmlStreamReader::PrematureEndOfDocumentError)) { @@ -190,10 +185,9 @@ const QString XMLConfigReader::getErrorString() qInstallMessageHandler(MessageHandler::myMessageOutput); QString temp = QString(); + if (xml->hasError()) - { temp = xml->errorString(); - } return temp; } @@ -210,9 +204,8 @@ void XMLConfigReader::initDeviceTypes() qInstallMessageHandler(MessageHandler::myMessageOutput); deviceTypes.clear(); - deviceTypes.append(Joystick::xmlName); - deviceTypes.append(GameController::xmlName); - + deviceTypes.append(GlobalVariables::Joystick::xmlName); + deviceTypes.append(GlobalVariables::GameController::xmlName); } const QXmlStreamReader* XMLConfigReader::getXml() { @@ -232,7 +225,7 @@ const QFile* XMLConfigReader::getConfigFile() { const InputDevice* XMLConfigReader::getJoystick() { - return joystick; + return m_joystick; } QStringList const& XMLConfigReader::getDeviceTypes() { diff --git a/src/xmlconfigreader.h b/src/xmlconfigreader.h old mode 100644 new mode 100755 index 1b0469831..d3ec3ff76 --- a/src/xmlconfigreader.h +++ b/src/xmlconfigreader.h @@ -53,7 +53,7 @@ public slots: QXmlStreamReader *xml; QString fileName; QFile *configFile; - InputDevice* joystick; + InputDevice* m_joystick; QStringList deviceTypes; }; diff --git a/src/xmlconfigwriter.cpp b/src/xmlconfigwriter.cpp old mode 100644 new mode 100755 index ad60c5d97..c2a400e97 --- a/src/xmlconfigwriter.cpp +++ b/src/xmlconfigwriter.cpp @@ -27,7 +27,6 @@ #include - XMLConfigWriter::XMLConfigWriter(QObject *parent) : QObject(parent) { @@ -36,7 +35,7 @@ XMLConfigWriter::XMLConfigWriter(QObject *parent) : xml = new QXmlStreamWriter(); xml->setAutoFormatting(true); configFile = nullptr; - joystick = nullptr; + m_joystick = nullptr; writerError = false; } @@ -44,18 +43,16 @@ XMLConfigWriter::~XMLConfigWriter() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (configFile) + if (configFile != nullptr) { if (configFile->isOpen()) - { configFile->close(); - } delete configFile; configFile = nullptr; } - if (xml) + if (xml != nullptr) { delete xml; xml = nullptr; @@ -87,12 +84,9 @@ void XMLConfigWriter::write(InputDevice *joystick) } if (configFile->isOpen()) - { configFile->close(); - } } - void XMLConfigWriter::setFileName(QString filename) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -133,5 +127,5 @@ const QFile *XMLConfigWriter::getConfigFile() { const InputDevice* XMLConfigWriter::getJoystick() { - return joystick; + return m_joystick; } diff --git a/src/xmlconfigwriter.h b/src/xmlconfigwriter.h old mode 100644 new mode 100755 index 4cd5fafa2..9f6a9c051 --- a/src/xmlconfigwriter.h +++ b/src/xmlconfigwriter.h @@ -48,7 +48,7 @@ public slots: QXmlStreamWriter *xml; QString fileName; QFile *configFile; - InputDevice* joystick; + InputDevice* m_joystick; bool writerError; QString writerErrorString; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 000000000..5ce7bb8db --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 2.8.11) +project(aboutdialogClass) + +# Tell CMake to run moc when necessary: +set(CMAKE_AUTOMOC ON) + +# As moc files are generated in the binary dir, tell CMake +# to always look for includes there: +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +find_package(Qt5Test REQUIRED) + +add_executable(aboutdialogClass testaboutdialog.cpp) +target_link_libraries(aboutdialogClass antilib Qt5::Test) + +add_test (NAME testAboutDialog COMMAND aboutdialogClass) diff --git a/tests/testaboutdialog.cpp b/tests/testaboutdialog.cpp new file mode 100644 index 000000000..9422a2d7d --- /dev/null +++ b/tests/testaboutdialog.cpp @@ -0,0 +1,71 @@ +#include "aboutdialog.h" + +#include +#include +#include +#include + +class TestAboutDialog: public QObject +{ + Q_OBJECT + +public: + TestAboutDialog(QObject* parent = 0); + +private slots: + void testVersion(); + void infoTextBrowserEmpty(); + void changelogPlainEmpty(); + void textBrowserDevsEmpty(); + void licenseInfoEmpty(); + void creditsInfoEmpty(); + +private: + AboutDialog aboutDialog; +}; + +TestAboutDialog::TestAboutDialog(QObject* parent) : + QObject(parent), + aboutDialog() +{ + QTestEventLoop::instance().enterLoop(1); +} + +void TestAboutDialog::infoTextBrowserEmpty() +{ + QTextBrowser* infoTextBrowser = aboutDialog.findChild("infoTextBrowser"); + QVERIFY2(!infoTextBrowser->toPlainText().isEmpty(), "infoTextBrowser is empty"); +} + +void TestAboutDialog::changelogPlainEmpty() +{ + QPlainTextEdit* changelogPlainTextEdit = aboutDialog.findChild("changelogPlainTextEdit"); + QVERIFY2(!changelogPlainTextEdit->toPlainText().isEmpty(), "changelogPlainTextEdit is empty"); +} + +void TestAboutDialog::textBrowserDevsEmpty() +{ + QPlainTextEdit* developersInfo = aboutDialog.findChild("plainTextEdit"); + QVERIFY2(!developersInfo->toPlainText().isEmpty(), "plainTextEdit for info about developers is empty"); +} + +void TestAboutDialog::licenseInfoEmpty() +{ + QTextBrowser* licenseInfo = aboutDialog.findChild("textBrowser_2"); + QVERIFY2(!licenseInfo->toPlainText().isEmpty(), "textBrowser_2 about license information is empty"); +} + +void TestAboutDialog::creditsInfoEmpty() +{ + QTextBrowser* creditsInfo = aboutDialog.findChild("textBrowser"); + QVERIFY2(!creditsInfo->toPlainText().isEmpty(), "textBrowser about credits is empty"); +} + +void TestAboutDialog::testVersion() +{ + QLabel* versionLabel = aboutDialog.findChild("versionLabel"); + QCOMPARE(versionLabel->text(), QString("2.24.0")); +} + +QTEST_MAIN(TestAboutDialog) +#include "testaboutdialog.moc" diff --git a/windows/AntiMicro.wxs b/windows/AntiMicro.wxs old mode 100644 new mode 100755 diff --git a/windows/AntiMicro_64.wxs b/windows/AntiMicro_64.wxs old mode 100644 new mode 100755

    `K9GeC1469{5YFTp;o?5 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�g-L+>y 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%0AjgmZPIP+?3y%QNk&4a5}EXHP^*0rNKKg@abKX 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

  • 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 BNo)WB literal 0 HcmV?d00001 diff --git a/other/appdata/screenshots/controller_main_window_dark_theme_2.png b/other/appdata/screenshots/controller_main_window_dark_theme_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7089fe8325486ef021a8fd311e6b41cafdfb77c8 GIT binary patch literal 139418 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