From 85ffca39922db2e3d90bea5e1eeb39ecad58c422 Mon Sep 17 00:00:00 2001 From: XiaoMigros Date: Sat, 3 Feb 2024 19:23:44 +0100 Subject: [PATCH] New Courtesy Accidentals plugin --- share/extensions/courtesy_accidentals/LICENSE | 674 ++++++++++ .../extensions/courtesy_accidentals/README.md | 9 + share/extensions/courtesy_accidentals/add.js | 292 ----- .../assets/AddAccItem.qml | 57 + .../assets/BracketBox.qml | 58 + .../assets/CancelModeItem.qml | 52 + .../assets/DurationModeItem.qml | 69 + .../assets/DynamicImage.qml | 43 + .../assets/GraceNotesCheckBox.qml | 32 + .../assets/MainMenuSection.qml | 45 + .../assets/MenuButton.qml | 44 + .../assets/OptionalCancelModeItem.qml | 56 + .../assets/PluginStyle.qml | 27 + .../assets/StyledFrame.qml | 28 + .../assets/StyledLabel.qml | 26 + .../assets/StyledSeparatorLine.qml | 29 + .../assets/SubMenuSection.qml | 61 + .../assets/accidentals.js | 511 ++++++++ .../assets}/accidentals.png | Bin .../assets/defaultsettings.js | 98 ++ .../examples/setting0/example-false.svg | 79 ++ .../assets/examples/setting0/example-true.svg | 79 ++ .../assets/examples/setting0/example.mscz | Bin 0 -> 18914 bytes .../assets/examples/setting1/example-00.svg | 63 + .../assets/examples/setting1/example-01.svg | 60 + .../assets/examples/setting1/example-02.svg | 61 + .../assets/examples/setting1/example-10.svg | 71 ++ .../assets/examples/setting1/example-11.svg | 62 + .../assets/examples/setting1/example-12.svg | 65 + .../assets/examples/setting1/example-20.svg | 71 ++ .../assets/examples/setting1/example-21.svg | 62 + .../assets/examples/setting1/example-22.svg | 65 + .../examples/setting1/example-false.svg | 59 + .../assets/examples/setting1/example.mscz | Bin 0 -> 18586 bytes .../assets/examples/setting2/example-00.svg | 105 ++ .../assets/examples/setting2/example-01.svg | 102 ++ .../assets/examples/setting2/example-02.svg | 104 ++ .../assets/examples/setting2/example-10.svg | 117 ++ .../assets/examples/setting2/example-11.svg | 108 ++ .../assets/examples/setting2/example-12.svg | 114 ++ .../assets/examples/setting2/example-20.svg | 117 ++ .../assets/examples/setting2/example-21.svg | 108 ++ .../assets/examples/setting2/example-22.svg | 114 ++ .../examples/setting2/example-false.svg | 100 ++ .../assets/examples/setting2/example.mscz | Bin 0 -> 21661 bytes .../assets/examples/setting3/example-00.svg | 107 ++ .../assets/examples/setting3/example-01.svg | 103 ++ .../assets/examples/setting3/example-02.svg | 106 ++ .../assets/examples/setting3/example-10.svg | 119 ++ .../assets/examples/setting3/example-11.svg | 107 ++ .../assets/examples/setting3/example-12.svg | 116 ++ .../assets/examples/setting3/example-20.svg | 119 ++ .../assets/examples/setting3/example-21.svg | 107 ++ .../assets/examples/setting3/example-22.svg | 116 ++ .../examples/setting3/example-false.svg | 101 ++ .../assets/examples/setting3/example.mscz | Bin 0 -> 22328 bytes .../assets/examples/setting4a/example-00.svg | 54 + .../assets/examples/setting4a/example-01.svg | 56 + .../assets/examples/setting4a/example-02.svg | 56 + .../assets/examples/setting4a/example-10.svg | 55 + .../assets/examples/setting4a/example-11.svg | 59 + .../assets/examples/setting4a/example-12.svg | 59 + .../examples/setting4a/example-false.svg | 53 + .../assets/examples/setting4a/example.mscz | Bin 0 -> 18388 bytes .../assets/examples/setting4b/example-00.svg | 59 + .../assets/examples/setting4b/example-01.svg | 61 + .../assets/examples/setting4b/example-02.svg | 61 + .../assets/examples/setting4b/example-10.svg | 60 + .../assets/examples/setting4b/example-11.svg | 64 + .../assets/examples/setting4b/example-12.svg | 64 + .../examples/setting4b/example-false.svg | 58 + .../assets/examples/setting4b/example.mscz | Bin 0 -> 18411 bytes .../assets/examples/setting5a/example-1.svg | 82 ++ .../assets/examples/setting5a/example-2.svg | 83 ++ .../assets/examples/setting5a/example-3.svg | 85 ++ .../assets/examples/setting5a/example-4.svg | 85 ++ .../assets/examples/setting5a/example.mscz | Bin 0 -> 20193 bytes .../assets/examples/setting5b/example-1.svg | 54 + .../assets/examples/setting5b/example-2.svg | 56 + .../assets/examples/setting5b/example-3.svg | 60 + .../assets/examples/setting5b/example-4.svg | 60 + .../assets/examples/setting5b/example.mscz | Bin 0 -> 18397 bytes .../assets/examples/setting6/example-1.svg | 68 + .../assets/examples/setting6/example-2.svg | 69 + .../assets/examples/setting6/example-3.svg | 71 ++ .../assets/examples/setting6/example-4.svg | 71 ++ .../assets/examples/setting6/example.mscz | Bin 0 -> 18888 bytes .../assets/examples/setting7/example-000.svg | 61 + .../assets/examples/setting7/example-001.svg | 62 + .../assets/examples/setting7/example-002.svg | 63 + .../assets/examples/setting7/example-010.svg | 67 + .../assets/examples/setting7/example-011.svg | 70 + .../assets/examples/setting7/example-012.svg | 73 ++ .../assets/examples/setting7/example-020.svg | 67 + .../assets/examples/setting7/example-021.svg | 70 + .../assets/examples/setting7/example-022.svg | 73 ++ .../assets/examples/setting7/example-100.svg | 62 + .../assets/examples/setting7/example-101.svg | 63 + .../assets/examples/setting7/example-102.svg | 64 + .../assets/examples/setting7/example-110.svg | 70 + .../assets/examples/setting7/example-111.svg | 73 ++ .../assets/examples/setting7/example-112.svg | 76 ++ .../assets/examples/setting7/example-120.svg | 70 + .../assets/examples/setting7/example-121.svg | 73 ++ .../assets/examples/setting7/example-122.svg | 76 ++ .../examples/setting7/example-false.svg | 58 + .../assets/examples/setting7/example.mscz | Bin 0 -> 18981 bytes .../assets/examples/setting8/example-00.svg | 36 + .../assets/examples/setting8/example-01.svg | 37 + .../assets/examples/setting8/example-02.svg | 38 + .../assets/examples/setting8/example-10.svg | 40 + .../assets/examples/setting8/example-11.svg | 43 + .../assets/examples/setting8/example-12.svg | 46 + .../assets/examples/setting8/example-20.svg | 40 + .../assets/examples/setting8/example-21.svg | 43 + .../assets/examples/setting8/example-22.svg | 46 + .../examples/setting8/example-false.svg | 34 + .../assets/examples/setting8/example.mscz | Bin 0 -> 18353 bytes .../assets/examples/setting9a/example-1.svg | 95 ++ .../assets/examples/setting9a/example-2.svg | 98 ++ .../assets/examples/setting9a/example.mscz | Bin 0 -> 19995 bytes .../assets/examples/setting9b/example-1.svg | 60 + .../assets/examples/setting9b/example-2.svg | 62 + .../assets/examples/setting9b/example.mscz | Bin 0 -> 17840 bytes .../courtesy_accidentals/configure.qml | 1125 +++++++++-------- .../extensions/courtesy_accidentals/remove.js | 289 ----- .../addCourtesyAccidentals.qml_disabled | 358 ++---- .../configureCourtesyAccidentals.qml | 675 ++++++++++ .../removeCourtesyAccidentals.qml_disabled | 285 +---- 129 files changed, 9947 insertions(+), 1655 deletions(-) create mode 100644 share/extensions/courtesy_accidentals/LICENSE create mode 100644 share/extensions/courtesy_accidentals/README.md delete mode 100644 share/extensions/courtesy_accidentals/add.js create mode 100644 share/extensions/courtesy_accidentals/assets/AddAccItem.qml create mode 100644 share/extensions/courtesy_accidentals/assets/BracketBox.qml create mode 100644 share/extensions/courtesy_accidentals/assets/CancelModeItem.qml create mode 100644 share/extensions/courtesy_accidentals/assets/DurationModeItem.qml create mode 100644 share/extensions/courtesy_accidentals/assets/DynamicImage.qml create mode 100644 share/extensions/courtesy_accidentals/assets/GraceNotesCheckBox.qml create mode 100644 share/extensions/courtesy_accidentals/assets/MainMenuSection.qml create mode 100644 share/extensions/courtesy_accidentals/assets/MenuButton.qml create mode 100644 share/extensions/courtesy_accidentals/assets/OptionalCancelModeItem.qml create mode 100644 share/extensions/courtesy_accidentals/assets/PluginStyle.qml create mode 100644 share/extensions/courtesy_accidentals/assets/StyledFrame.qml create mode 100644 share/extensions/courtesy_accidentals/assets/StyledLabel.qml create mode 100644 share/extensions/courtesy_accidentals/assets/StyledSeparatorLine.qml create mode 100644 share/extensions/courtesy_accidentals/assets/SubMenuSection.qml create mode 100644 share/extensions/courtesy_accidentals/assets/accidentals.js rename share/{plugins/courtesy_accidentals => extensions/courtesy_accidentals/assets}/accidentals.png (100%) mode change 100755 => 100644 create mode 100644 share/extensions/courtesy_accidentals/assets/defaultsettings.js create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting0/example-false.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting0/example-true.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting0/example.mscz create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting1/example-00.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting1/example-01.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting1/example-02.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting1/example-10.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting1/example-11.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting1/example-12.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting1/example-20.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting1/example-21.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting1/example-22.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting1/example-false.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting1/example.mscz create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting2/example-00.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting2/example-01.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting2/example-02.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting2/example-10.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting2/example-11.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting2/example-12.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting2/example-20.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting2/example-21.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting2/example-22.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting2/example-false.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting2/example.mscz create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting3/example-00.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting3/example-01.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting3/example-02.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting3/example-10.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting3/example-11.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting3/example-12.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting3/example-20.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting3/example-21.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting3/example-22.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting3/example-false.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting3/example.mscz create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4a/example-00.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4a/example-01.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4a/example-02.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4a/example-10.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4a/example-11.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4a/example-12.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4a/example-false.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4a/example.mscz create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4b/example-00.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4b/example-01.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4b/example-02.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4b/example-10.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4b/example-11.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4b/example-12.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4b/example-false.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting4b/example.mscz create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting5a/example-1.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting5a/example-2.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting5a/example-3.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting5a/example-4.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting5a/example.mscz create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting5b/example-1.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting5b/example-2.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting5b/example-3.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting5b/example-4.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting5b/example.mscz create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting6/example-1.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting6/example-2.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting6/example-3.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting6/example-4.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting6/example.mscz create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-000.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-001.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-002.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-010.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-011.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-012.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-020.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-021.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-022.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-100.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-101.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-102.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-110.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-111.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-112.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-120.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-121.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-122.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example-false.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting7/example.mscz create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting8/example-00.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting8/example-01.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting8/example-02.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting8/example-10.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting8/example-11.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting8/example-12.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting8/example-20.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting8/example-21.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting8/example-22.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting8/example-false.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting8/example.mscz create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting9a/example-1.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting9a/example-2.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting9a/example.mscz create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting9b/example-1.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting9b/example-2.svg create mode 100644 share/extensions/courtesy_accidentals/assets/examples/setting9b/example.mscz delete mode 100644 share/extensions/courtesy_accidentals/remove.js create mode 100644 share/plugins/courtesy_accidentals/configureCourtesyAccidentals.qml diff --git a/share/extensions/courtesy_accidentals/LICENSE b/share/extensions/courtesy_accidentals/LICENSE new file mode 100644 index 0000000000000..e62ec04cdeece --- /dev/null +++ b/share/extensions/courtesy_accidentals/LICENSE @@ -0,0 +1,674 @@ +GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + 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. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/share/extensions/courtesy_accidentals/README.md b/share/extensions/courtesy_accidentals/README.md new file mode 100644 index 0000000000000..fff21b70f3b6f --- /dev/null +++ b/share/extensions/courtesy_accidentals/README.md @@ -0,0 +1,9 @@ +# Courtesy Accidentals +A plugin for MuseScore 4 that adds courtesy accidentals to your score. +Choose from a wide range of settings, to control when to add them and how they look! + +## Features +- Add or remove courtesy accidentals from your score +- Choose from a wide variety of settings +- Live updating settings previews, to show you exactly what you get +- Sleek & modern UI styled after MuseScore 4 diff --git a/share/extensions/courtesy_accidentals/add.js b/share/extensions/courtesy_accidentals/add.js deleted file mode 100644 index a07f743687b9b..0000000000000 --- a/share/extensions/courtesy_accidentals/add.js +++ /dev/null @@ -1,292 +0,0 @@ -//============================================== -// add courtesy accidentals v1.0 -// -// Copyright (C)2012-2019 Jörn Eichler (heuchi) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -//============================================== - - -function main() { - curScore.startCmd() - addAcc() - curScore.endCmd() - - quit() -} - -// configuration -// This has changed for MuseScore v3 -// 0 = no bracket, 1 = parenthesis, 2 = bracket -var useBracket = 0 - -// if nothing is selected process whole score -var processAll = false - -// function tpcName -// -// return name of note -const TPC_NAMES = [ - "Fbb", "Cbb", "Gbb", "Dbb", "Abb", "Ebb", "Bbb", - "Fb", "Cb", "Gb", "Db", "Ab", "Eb", "Bb", - "F", "C", "G", "D", "A", "E", "B", - "F#", "C#", "G#", "D#", "A#", "E#", "B#", - "F##", "C##", "G##", "D##", "A##", "E##", "B##" - ]; - -function tpcName(tpc) { - return(TPC_NAMES[tpc+1]); -} - -// function getEndStaffOfPart -// -// return the first staff that does not belong to -// the part containing given start staff. - -function getEndStaffOfPart(startStaff) { - var startTrack = startStaff * 4; - var parts = curScore.parts; - - for(var i = 0; i < parts.length; i++) { - var part = parts[i]; - - if( (part.startTrack <= startTrack) - && (part.endTrack > startTrack) ) { - return(part.endTrack/4); - } - } - - // not found! - console.log("error: part for " + startStaff + " not found!"); - quit(); -} - -// function processNote -// -// for each measure we create a table that contains -// the actual 'noteName' of each 'noteClass' -// -// a 'noteClass' is the natural name of a space -// or line of the staff and the octave: -// C5, F6, B3 are 'noteClass' -// -// a 'noteName' would be C, F#, Bb for example -// (we don't need the octave here) -// -// curMeasureArray[] = - -function processNote(note,prevMeasureArray,curMeasureArray) { - var octave=Math.floor(note.pitch/12); - - // use tpc1 instead of tpc for octave correction - // since this will also work for transposing instruments - // correct octave for Cb and Cbb - if(note.tpc1 == 7 || note.tpc1 == 0) { - octave++; // belongs to higher octave - } - // correct octave for B# and B## - if(note.tpc1 == 26 || note.tpc1 == 33) { - octave--; // belongs to lower octave - } - - var noteName = tpcName(note.tpc); - var noteClass = noteName.charAt(0)+octave; - - // remember note for next measure - curMeasureArray[noteClass]=noteName; - - // check if current note needs courtesy acc - if(typeof prevMeasureArray[noteClass] !== 'undefined') { - if(prevMeasureArray[noteClass] != noteName) { - // this note needs an accidental - // if there's none present anyway - if(note.accidental == null) { - // calculate type of needed accidental - var accidental=Accidental.NONE; - if(note.tpc < 6) { - accidental = Accidental.FLAT2; - } else if(note.tpc < 13) { - accidental = Accidental.FLAT; - } else if(note.tpc < 20) { - accidental = Accidental.NATURAL; - } else if(note.tpc < 27) { - accidental = Accidental.SHARP; - } else { - accidental = Accidental.SHARP2; - } - note.accidentalType = accidental; - // put bracket on accidental - note.accidental.accidentalBracket = useBracket; - } - } - // delete entry to make sure we don't create the - // same accidental again in the same measure - delete prevMeasureArray[noteClass]; - } -} - -// function processPart -// -// do the actual work: process all given tracks in parallel -// add courtesy accidentals where needed. -// -// We go through all tracks simultaneously, because we also want courtesy -// accidentals for notes across different staves when they are in the -// same octave and for notes of different voices in the same octave - -function processPart(cursor,endTick,startTrack,endTrack) { - if(processAll) { - // we need to reset track first, otherwise - // rewind(0) doesn't work correctly - cursor.track=0; - cursor.rewind(0); - } else { - cursor.rewind(1); - } - - var segment = cursor.segment; - - // we use the cursor to know measure boundaries - cursor.nextMeasure(); - - var curMeasureArray = []; - var prevMeasureArray = []; - - // we use a segment, because the cursor always proceeds to - // the next element in the given track and we don't know - // in which track the element is. - var inLastMeasure=false; - while(segment && (processAll || segment.tick < endTick)) { - // check if still inside same measure - if(!inLastMeasure && !(segment.tick < cursor.tick)) { - // new measure - prevMeasureArray = curMeasureArray; - curMeasureArray = []; - if(!cursor.nextMeasure()) { - inLastMeasure=true; - } - } - - // we search for key signatures in first voice of - // first staff: - var keySigTrack = startTrack - (startTrack % 4); - - for(var track=startTrack; track 0) { - var graceChords = segment.elementAt(track).graceNotes; - - for(var j=0;j endStaff) { - curEndStaff = endStaff; - } - - // do the work - processPart(cursor,endTick,curStartStaff*4,curEndStaff*4); - - // next part - curStartStaff = curEndStaff; - } - - console.log("end add courtesy accidentals"); -} - - - diff --git a/share/extensions/courtesy_accidentals/assets/AddAccItem.qml b/share/extensions/courtesy_accidentals/assets/AddAccItem.qml new file mode 100644 index 0000000000000..f69c594f2b143 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/AddAccItem.qml @@ -0,0 +1,57 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.9 +import QtQuick.Layouts 1.2 +import MuseScore.Ui 1.0 +import MuseScore.UiComponents 1.0 as MU + +Item { + id: root + + height: bracketBox.height //childrenRect.height + //requires indicated width + + property alias checked: checkBox.checked + property alias currentValue: bracketBox.currentValue + + signal clicked + signal setv(bool checked, int value) + + MU.CheckBox { + id: checkBox + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + text: qsTr("Add Courtesy Accidentals") + onClicked: {checked = !checked; root.clicked()} + signal setv(bool checked) + onSetv: function(value) {checked = value; root.clicked()} + } + BracketBox { + id: bracketBox + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + enabled: checkBox.checked + onActivated: root.clicked() + } + onSetv: function(checked, value) { + checkBox.setv(checked) + bracketBox.setv(value) + } +} diff --git a/share/extensions/courtesy_accidentals/assets/BracketBox.qml b/share/extensions/courtesy_accidentals/assets/BracketBox.qml new file mode 100644 index 0000000000000..e093296afeb41 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/BracketBox.qml @@ -0,0 +1,58 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.9 +import QtQuick.Layouts 1.2 +import MuseScore.Ui 1.0 +import MuseScore.UiComponents 1.0 as MU + +Row { + id: layout + spacing: 6 + signal activated(int index, var value) + property var currentValue: control.currentValue + opacity: enabled ? 1.0 : ui.theme.itemOpacityDisabled + signal setv(int index) + + MU.StyledTextLabel { + id: label + text: qsTr("Brackets:") + anchors.verticalCenter: control.verticalCenter + } + + MU.StyledDropdown { + id: control + textRole: "text" + valueRole: "fact" + currentIndex: 0 + model: [ + {text: qsTr("None"), fact: 0}, + {text: qsTr("Parentheses"), fact: 1}, + {text: qsTr("Brackets"), fact: 2} + ] + onActivated: function(index, value) { + currentIndex = index + layout.activated(index, value) + } + } + onSetv: function(index) { + control.currentIndex = index + control.activated(index, Utils.getItemValue(control.model, index, control.valueRole, "")) + } +} diff --git a/share/extensions/courtesy_accidentals/assets/CancelModeItem.qml b/share/extensions/courtesy_accidentals/assets/CancelModeItem.qml new file mode 100644 index 0000000000000..16e2a220676ef --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/CancelModeItem.qml @@ -0,0 +1,52 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.9 +import MuseScore.Ui 1.0 +import MuseScore.UiComponents 1.0 as MU + +Column { + id: layout + property int value: radioButton1.checked ? 1 : 2 + spacing: style.regSpace + opacity: enabled ? 1.0 : ui.theme.itemOpacityDisabled + width: parent.width + + signal clicked + signal setv(int value) + + MU.RoundedRadioButton { + id: radioButton1 + implicitWidth: parent.width + text: qsTr("Stop after note is cancelled in original octave") + onClicked: layout.clicked() + checked: true + } + MU.RoundedRadioButton { + id: radioButton2 + implicitWidth: parent.width + text: qsTr("Always cancel in all octaves") + onClicked: layout.clicked() + } + onSetv: function (nvalue) { + radioButton1.checked = nvalue == 1 + radioButton2.checked = nvalue == 2 + clicked() + } +} diff --git a/share/extensions/courtesy_accidentals/assets/DurationModeItem.qml b/share/extensions/courtesy_accidentals/assets/DurationModeItem.qml new file mode 100644 index 0000000000000..dd677f74d6343 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/DurationModeItem.qml @@ -0,0 +1,69 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import MuseScore.Ui 1.0 +import MuseScore.UiComponents 1.0 as MU + +GroupBox { + id: root + spacing: style.regSpace + anchors.topMargin: style.minSpace + opacity: enabled ? 1.0 : ui.theme.itemOpacityDisabled + + property int value: radioButton0.checked ? 0 : (radioButton1.checked ? 1 : 2) + + signal clicked + signal setv(int nvalue) + + label: StyledLabel {text: qsTr("Add cautionary accidentals to:")} + + Column { + spacing: style.regSpace + //leftPadding: style.regSpace + width: parent.width + + MU.RoundedRadioButton { + id: radioButton0 + implicitWidth: parent.width + text: qsTr("All notes after the note with accidental") + onClicked: root.clicked() + checked: true + } + MU.RoundedRadioButton { + id: radioButton1 + implicitWidth: parent.width + text: qsTr("Notes on the same beat as the note with accidental") + onClicked: root.clicked() + } + MU.RoundedRadioButton { + id: radioButton2 + implicitWidth: parent.width + text: qsTr("Notes played any time throughout the note with accidental") + onClicked: root.clicked() + } + } + onSetv: function (nvalue) { + radioButton0.checked = nvalue == 0 + radioButton1.checked = nvalue == 1 + radioButton2.checked = nvalue == 2 + clicked() + } +} diff --git a/share/extensions/courtesy_accidentals/assets/DynamicImage.qml b/share/extensions/courtesy_accidentals/assets/DynamicImage.qml new file mode 100644 index 0000000000000..84c3839ec85ed --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/DynamicImage.qml @@ -0,0 +1,43 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.9 +import QtQuick.Layouts 1.2 +import MuseScore.Ui 1.0 + +Rectangle { + property int realWidth: 400 + property int cornerRadius: style.regSpace + property var source: "logo.png" // something + radius: cornerRadius + border.color: ui.theme.accentColor + border.width: 2 + //Layout.preferredWidth: realWidth + width: parent.width + height: image.height + cornerRadius + //anchors.horizontalCenter: parent.horizontalCenter + Image { + id: image + source: parent.source + width: parent.width - cornerRadius + anchors.centerIn: parent + fillMode: Image.PreserveAspectFit // ensure it fits + mipmap: true // smoothing + } +} diff --git a/share/extensions/courtesy_accidentals/assets/GraceNotesCheckBox.qml b/share/extensions/courtesy_accidentals/assets/GraceNotesCheckBox.qml new file mode 100644 index 0000000000000..ddb3d303b635f --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/GraceNotesCheckBox.qml @@ -0,0 +1,32 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.15 +import MuseScore.UiComponents 1.0 as MU + + +MU.CheckBox { + property bool key: false + text: key ? qsTr("Add courtesy if note before key change is a grace note") + : qsTr("Add courtesy if note with accidental is a grace note") + signal changed + onClicked: {checked = !checked; changed()} + signal setv(bool checked) + onSetv: function(value) {checked = value; changed()} +} diff --git a/share/extensions/courtesy_accidentals/assets/MainMenuSection.qml b/share/extensions/courtesy_accidentals/assets/MainMenuSection.qml new file mode 100644 index 0000000000000..97709d5180f45 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/MainMenuSection.qml @@ -0,0 +1,45 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.9 +import MuseScore.UiComponents 1.0 as MU +import MuseScore.Ui 1.0 + +Column { + id: root + property alias title: menuButton.title + property alias isExpanded: menuButton.isExpanded + default property alias content: column.children + + width: parent.width + spacing: 0 + + MenuButton { + id: menuButton + } + Column { + id: column + spacing: 0 + padding: style.regSpace + topPadding: 0 + bottomPadding: 0 + width: parent.width + visible: root.isExpanded + } +} diff --git a/share/extensions/courtesy_accidentals/assets/MenuButton.qml b/share/extensions/courtesy_accidentals/assets/MenuButton.qml new file mode 100644 index 0000000000000..f51637c78f15c --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/MenuButton.qml @@ -0,0 +1,44 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.9 +import MuseScore.UiComponents 1.0 as MU +import MuseScore.Ui 1.0 + +Item { + height: toggle.height + 2 * style.regSpace + width: parent.width //fix + + property alias title: toggle.title + property alias isExpanded: toggle.isExpanded + + MU.ExpandableBlankSection { + id: toggle + isExpanded: false + anchors { + verticalCenter: parent.verticalCenter + left: parent.left + leftMargin: style.regSpace + } + } + MouseArea { + anchors.fill: parent + onClicked: toggle.isExpanded = !toggle.isExpanded + } +} diff --git a/share/extensions/courtesy_accidentals/assets/OptionalCancelModeItem.qml b/share/extensions/courtesy_accidentals/assets/OptionalCancelModeItem.qml new file mode 100644 index 0000000000000..38e2fe048128b --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/OptionalCancelModeItem.qml @@ -0,0 +1,56 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import MuseScore.Ui 1.0 +import MuseScore.UiComponents 1.0 as MU + +GroupBox { + id: root + opacity: enabled ? 1.0 : ui.theme.itemOpacityDisabled + + property alias checked: checkBox.checked // both values are currently needed separately, but may be combinable in future + property alias value: cancelModeItem.value + + signal clicked + signal setv(bool checked, int value) + + label: MU.CheckBox { + id: checkBox + enabled: root.enabled + opacity: enabled ? 1.0 : ui.theme.itemOpacityDisabled + text: qsTr("Add cautionary accidentals to notes in any octave") + checked: false + onClicked: {checked = !checked; root.clicked()} + signal setv(bool checked) + onSetv: function(value) {checked = value} + } + + CancelModeItem { + id: cancelModeItem + enabled: root.enabled && checkBox.checked + onClicked: root.clicked() + } + + onSetv: function(checked, value) { + checkBox.setv(checked) + cancelModeItem.setv(value) + } +} diff --git a/share/extensions/courtesy_accidentals/assets/PluginStyle.qml b/share/extensions/courtesy_accidentals/assets/PluginStyle.qml new file mode 100644 index 0000000000000..f840778fbe93e --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/PluginStyle.qml @@ -0,0 +1,27 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.9 +import MuseScore.Ui 1.0 + +QtObject { + readonly property int maxSpace: 15 + readonly property int regSpace: 10 + readonly property int minSpace: 5 +} diff --git a/share/extensions/courtesy_accidentals/assets/StyledFrame.qml b/share/extensions/courtesy_accidentals/assets/StyledFrame.qml new file mode 100644 index 0000000000000..e79a8415eb78e --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/StyledFrame.qml @@ -0,0 +1,28 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.9 +import QtQuick.Controls 2.2 +import MuseScore.Ui 1.0 + +Frame { + background: Rectangle {color: "transparent"; border.color: ui.theme.strokeColor} + padding: style.regSpace + width: parent.width +} diff --git a/share/extensions/courtesy_accidentals/assets/StyledLabel.qml b/share/extensions/courtesy_accidentals/assets/StyledLabel.qml new file mode 100644 index 0000000000000..9e4d00d506497 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/StyledLabel.qml @@ -0,0 +1,26 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.9 +import QtQuick.Controls 2.2 +import MuseScore.Ui 1.0 + +Label { + font: ui.theme.bodyFont +} diff --git a/share/extensions/courtesy_accidentals/assets/StyledSeparatorLine.qml b/share/extensions/courtesy_accidentals/assets/StyledSeparatorLine.qml new file mode 100644 index 0000000000000..e4a72c01ed6cf --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/StyledSeparatorLine.qml @@ -0,0 +1,29 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.9 +import QtQuick.Layouts 1.2 +import MuseScore.UiComponents 1.0 as MU + +MU.SeparatorLine { + anchors.leftMargin: 0 + anchors.rightMargin: 0 + anchors.topMargin: style.regSpace + anchors.bottomMargin: style.regSpace +} diff --git a/share/extensions/courtesy_accidentals/assets/SubMenuSection.qml b/share/extensions/courtesy_accidentals/assets/SubMenuSection.qml new file mode 100644 index 0000000000000..1cd08a5fad441 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/SubMenuSection.qml @@ -0,0 +1,61 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.9 +import MuseScore.UiComponents 1.0 as MU +import MuseScore.Ui 1.0 + +Column { + id: root + property alias title: menuButton.title + property alias isExpanded: menuButton.isExpanded + default property alias content: column.children + + property alias source: dynamicImage.source + + width: parent.width + spacing: 0 + anchors.margins: 0 + + MenuButton { + id: menuButton + } + StyledFrame { + visible: root.isExpanded + width: parent.width - 2 * root.parent.padding + padding: style.regSpace + bottomPadding: 0 + + Column { + spacing: 0 + width: parent.width + //height: childrenRect.height + + DynamicImage {id: dynamicImage} + + Column { + id: column + spacing: style.regSpace + width: parent.width + //height: childrenRect.height + padding: style.regSpace + } + } + } +} diff --git a/share/extensions/courtesy_accidentals/assets/accidentals.js b/share/extensions/courtesy_accidentals/assets/accidentals.js new file mode 100644 index 0000000000000..824ef9c2fec58 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/accidentals.js @@ -0,0 +1,511 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +function tpcToName(tpc) { + var tpcNames = [ //-1 thru 33 + "Fbb", "Cbb", "Gbb", "Dbb", "Abb", "Ebb", "Bbb", + "Fb", "Cb", "Gb", "Db", "Ab", "Eb", "Bb", + "F", "C", "G", "D", "A", "E", "B", + "F#", "C#", "G#", "D#", "A#", "E#", "B#", + "F##", "C##", "G##", "D##", "A##", "E##", "B##" + ] + return tpcNames[tpc+1] +} + +function runPlugin(type) { + curScore.startCmd() + var full = false; + if (!curScore.selection.elements.length) { + console.log("No selection. Applying plugin to all notes...") + cmd("select-all") + full = true; + } else { + console.log("Applying plugin to selection") + } + switch (type) { + case "add": { + addCourtesyAccidentals() + break; + } + case "remove": { + removeCourtesyAccidentals() + break; + } + default: console.warn("Unknown action requested.") + } + if (full) { + curScore.selection.clear() + } + curScore.endCmd() +} + +function addCourtesyAccidentals() { + if (options.uSettings && JSON.parse(options.uSettings).edited) { + loadSettings(JSON.parse(options.uSettings)) + } else { + loadSettings(DSettings.read()) + } + var notes = [] + for (var i in curScore.selection.elements) { + if (curScore.selection.elements[i].type == Element.NOTE && !curScore.selection.elements[i].staff.part.hasDrumStaff) { + notes.push(curScore.selection.elements[i]) + } + } + + // Exception: Only 1 note is selected + if (notes.length == 1) { + restateAccidental(notes[0], false, 0) + return + } + + notes.sort(function (a,b) { + //sort notes by tick, prioritise notes with accidentals, prioritise non-doubles to avoid excessive brackets + if (isSameTick(a,b)) { + var testCount = 0 + if (a.accidental) { + testCount-- + } + if (b.accidental) { + testCount++ + } + if (testCount == 0) { + if (a.accidentalType == Accidental.SHARP2 || a.accidentalType == Accidental.FLAT2) { + testCount++ + } + if (b.accidentalType == Accidental.SHARP2 || b.accidentalType == Accidental.FLAT2) { + testCount++//-- ?? + } + } + return testCount + } else { + return (tickOfNote(a) - tickOfNote(b)) + } + }) + + for (var i = notes.length-1; i >= 0; i--) { + if (notes[i].accidental && notes[i].accidental.visible) { + var notes2 = notes.slice(0) + addAccidentals(notes2.splice(i, notes2.length)) //notes.subarray non-functional + } else { + if (setting7.addAccidentals || setting8.addAccidentals) { + var notes2 = notes.slice(0) + keySigTest(notes2.splice(i, notes2.length)) + } + } + } +} + +function addAccidentals(noteList) { + var testNote = noteList.shift() + var testName = tpcToNote(testNote.tpc) + console.log("Note with accidental found (" + tpcToName(testNote.tpc) + ").\r\n" + + "Attempting to add cautionary accidentals to " + noteList.length + " note(s).") + var cancelledNotes = [] + for (var j in noteList) { + var note = noteList[j] + var changeNote = false + var changeBracket = [] + if (!note.tieBack) { + if (setting1.addAccidentals) { + if (isSameNoteName(note, testNote) && !isSamePitch(note, testNote) && + isSameMeasure(note, testNote) && isSameStaff(note, testNote) && (setting1.parseGraceNotes || !isGraceNote(testNote))) { + if (durationModeIsValid(setting1.durationMode, note, testNote)) { + var check = true + for (var k in cancelledNotes) { + if (isSameNoteName(note, cancelledNotes[k]) && ((setting9.a && isSamePitch(testNote, cancelledNotes[k])) ? isOctavedPitch(note, cancelledNotes[k]) : isSamePitch(note, cancelledNotes[k])) && + isSameStaff(note, cancelledNotes[k]) && isSameMeasure(note, cancelledNotes[k])) { + console.log("The accidental in question has been cancelled, no need to add further cautionary accidentals") + check = false + break + } + } + if (check) { + changeNote = true + changeBracket.push(setting1.bracketType) + if (isSameNoteName(note, testNote) && isSameStaff(note, testNote)) { + //isSameStaff might not be needed here + cancelledNotes.push(note) + } + } + } + } + } + + if (setting2.addAccidentals) { + if (isSameNoteName(note, testNote) && !isSamePitch(note, testNote) && isSameOctave(note, testNote) && isSameMeasure(note, testNote) && + !isSameStaff(note, testNote) && isSamePart(note, testNote) && (setting2.parseGraceNotes || !isGraceNote(testNote))) { + if (durationModeIsValid(setting2.durationMode, note, testNote)) { + var check = true + for (var k in cancelledNotes) { + if (isSameNoteName(note, cancelledNotes[k]) && ((setting9.a && isSamePitch(testNote, cancelledNotes[k])) ? isOctavedPitch(note, cancelledNotes[k]) : isSamePitch(note, cancelledNotes[k])) && + isSameStaff(note, cancelledNotes[k]) && isSameMeasure(note, cancelledNotes[k])) { + console.log("The accidental in question has been cancelled, no need to add further cautionary accidentals") + check = false + break + } + } + if (check) { + changeNote = true + changeBracket.push(setting2.bracketType) + if (isSameNoteName(note, testNote) && isSamePart(note, testNote)) { + //isSamePart might not be needed here + cancelledNotes.push(note) + } + } + } + } + } + + if (setting3.addAccidentals) { + if (isSameNoteName(note, testNote) && !isSamePitch(note, testNote) && !isSameOctave(note, testNote) && isSameMeasure(note, testNote) && + !isSameStaff(note, testNote) && isSamePart(note, testNote) && (setting3.parseGraceNotes || !isGraceNote(testNote))) { + if (durationModeIsValid(setting3.durationMode, note, testNote)) { + var check = true + for (var k in cancelledNotes) { + if (isSameNoteName(note, cancelledNotes[k]) && ((setting9.a && isSamePitch(testNote, cancelledNotes[k])) ? isOctavedPitch(note, cancelledNotes[k]) : isSamePitch(note, cancelledNotes[k])) && + isSameStaff(note, cancelledNotes[k]) && isSameMeasure(note, cancelledNotes[k])) { + console.log("The accidental in question has been cancelled, no need to add further cautionary accidentals") + check = false + break + } + } + if (check) { + changeNote = true + changeBracket.push(setting3.bracketType) + if (isSameNoteName(note, testNote) && isSamePart(note, testNote)) { + //isSamePart might not be needed here + cancelledNotes.push(note) + } + } + } + } + } + + if (setting4.a.addAccidentals) { + if (isSameNoteName(note, testNote) && !isSamePitch(note, testNote) && + (isNextMeasure(note, testNote) || isNextMeasure(note, testNote.lastTiedNote)) && isSameStaff(note, testNote)) { + var check = true + for (var k in cancelledNotes) { + if (isSameNoteName(note, cancelledNotes[k]) && ((setting9.b && isSamePitch(testNote, cancelledNotes[k])) ? isOctavedPitch(note, cancelledNotes[k]) : isSamePitch(note, cancelledNotes[k])) && + isSameStaff(note, cancelledNotes[k]) && isSameMeasure(note, cancelledNotes[k])) { + console.log("The accidental in question has been cancelled, no need to add further cautionary accidentals") + check = false + break + } + } + if (check) { + if (isSameOctave(note, testNote) && (setting4.parseGraceNotes || !isGraceNote(testNote))) { + changeNote = true + changeBracket.push(setting4.bracketType) + } else if (setting4.b.addAccidentals && (setting4.b.parseGraceNotes || !isGraceNote(testNote))) { + changeNote = true + changeBracket.push(setting4.bracketType) + } + if (isSameNoteName(note, testNote) && isSameStaff(note, testNote)) { + //isSameStaff might not be needed here + cancelledNotes.push(note) + } + } + } + } + + if (setting5.a.addAccidentals) { + if (isSameNoteName(note, testNote) && !isSamePitch(note, testNote) && + (isNextMeasure(note, testNote) || isNextMeasure(note, testNote.lastTiedNote)) && !isSameStaff(note, testNote) && isSamePart(note, testNote)) { + var check = true + for (var k in cancelledNotes) { + if (isSameNoteName(note, cancelledNotes[k]) && ((setting9.b && isSamePitch(testNote, cancelledNotes[k])) ? isOctavedPitch(note, cancelledNotes[k]) : isSamePitch(note, cancelledNotes[k])) && + isSameStaff(note, cancelledNotes[k]) && isSameMeasure(note, cancelledNotes[k])) { + console.log("The accidental in question has been cancelled, no need to add further cautionary accidentals") + check = false + break + } + } + if (check) { + if (isSameOctave(note, testNote) && (setting5.a.parseGraceNotes || !isGraceNote(testNote))) { + changeNote = true + changeBracket.push(setting5.bracketType) + } else if (setting5.b.addAccidentals && (setting5.b.parseGraceNotes || !isGraceNote(testNote))) { + changeNote = true + changeBracket.push(setting5.b.bracketType) + } + if (isSameNoteName(note, testNote) && isSamePart(note, testNote)) { + //isSamePart might not be needed here + cancelledNotes.push(note) + } + } + } + } + + if (setting6.a.addAccidentals) { + if (isSameNoteName(note, testNote) && isSamePitch(note, testNote) && isGraceNote(testNote) && !isGraceNote(note) && + isSameMeasure(note, testNote) && (setting6.b.addAccidentals ? isSamePart(note, testNote) : isSameStaff(note, testNote))) { + var check = true + for (var k in cancelledNotes) { + if (isSameNoteName(note, cancelledNotes[k]) && isSamePitch(note, cancelledNotes[k]) && isSameStaff(note, cancelledNotes[k])) { + //optional: change isSameStaff to (setting6.b.addAccidentals ? isSamePart(note, testNote) : isSameStaff(note, testNote)) + console.log("The accidental in question has been cancelled, no need to add further cautionary accidentals") + check = false + break + } + } + if (check) { + changeNote = true + cancelledNotes.push(note) + if (isSameStaff(note, testNote)) { + changeBracket.push(setting6.a.bracketType) + } else { + changeBracket.push(setting6.b.bracketType) + } + } + } + } + + if (changeNote) { + if (isSameTick(note, testNote) && (testNote.tpc > 26 || testNote.tpc < 6)) { + changeBracket.push(0) //dont add brackets to reduced accidentals on same beat //TODO: same measure? + } + changeBracket.sort() + restateAccidental(note, shouldCancelDouble(testNote), changeBracket[0]) + if (isSameNoteName(note, testNote) && isSameOctave(note, testNote)) { + cancelledNotes.push(note) + //only stop adding cautionary accidentals if note is of the same octave + } + } + } + } +} + +function keySigTest(noteList) { + var testNote = noteList.shift() + var testName = tpcToNote(testNote.tpc) + console.log("Testing for key signature changes") + var cancelledNotes = [] + for (var j in noteList) { + var note = noteList[j] + var changeNote = false + var changeBracket = [] + if (!note.tieBack) { + if (setting7.addAccidentals) { + if (isSameNoteName(note, testNote) && (setting7.cancelOctaves ? !isOctavedPitch(note, testNote) : (isSameOctave(note, testNote) && !isSamePitch(note, testNote))) && + note.accidentalType == Accidental.NONE && isNextMeasure(note, testNote) && isSameStaff(note, testNote) && (setting7.parseGraceNotes || !isGraceNote(testNote))) { + var check = true + for (var k in cancelledNotes) { + if (isSameNoteName(note, cancelledNotes[k]) && (setting7.cancelMode ? isOctavedPitch(note, cancelledNotes[k]) : isSamePitch(note, cancelledNotes[k])) && + isSameStaff(note, cancelledNotes[k])) { + console.log("The accidental in question has been cancelled, no need to add further cautionary accidentals") + check = false + break + } + } + if (check) { + changeNote = true + changeBracket.push(setting7.bracketType) + if (isSameNoteName(note, testNote) && isSameStaff(note, testNote) && (!setting7.cancelMode || isSameOctave(note, testNote))) { + cancelledNotes.push(note) + } + } + } + } + + if (setting8.addAccidentals) { + if (isSameNoteName(note, testNote) && (setting8.cancelOctaves ? !isOctavedPitch(note, testNote) : (isSameOctave(note, testNote) && !isSamePitch(note, testNote))) && + note.accidentalType == Accidental.NONE && isSameMeasure(note, testNote) && isSameStaff(note, testNote) && (setting8.parseGraceNotes || !isGraceNote(testNote))) { + var check = true + for (var k in cancelledNotes) { + if (isSameNoteName(note, cancelledNotes[k]) && (setting8.cancelMode ? isOctavedPitch(note, cancelledNotes[k]) : isSamePitch(note, cancelledNotes[k])) && + isSameStaff(note, cancelledNotes[k])) { + console.log("The accidental in question has been cancelled, no need to add further cautionary accidentals") + check = false + break + } + } + if (check) { + changeNote = true + changeBracket.push(setting8.bracketType) + if (isSameNoteName(note, testNote) && isSameStaff(note, testNote) && (!setting8.cancelMode || isSameOctave(note, testNote))) { + cancelledNotes.push(note) + } + } + } + } + + if (changeNote) { + if (isSameTick(note, testNote) && (testNote.tpc > 26 || testNote.tpc < 6)) { + changeBracket.push(0) + } + changeBracket.sort() + restateAccidental(note, shouldCancelDouble(testNote), changeBracket[0]) + } + } + } +} + +function loadSettings(settingObj) { + setting0 = settingObj.setting0 + setting1 = settingObj.setting1 + setting2 = settingObj.setting2 + setting3 = settingObj.setting3 + setting4 = settingObj.setting4 + setting5 = settingObj.setting5 + setting6 = settingObj.setting6 + setting7 = settingObj.setting7 + setting8 = settingObj.setting8 + setting9 = settingObj.setting9 +} + +function tpcToNote(tpc) { + var noteNames = ["C", "G", "D", "A", "E", "B", "F"] + return noteNames[(tpc+7) % 7] +} + +function removeCourtesyAccidentals() { + var notes = [] + for (var i in curScore.selection.elements) { + if (curScore.selection.elements[i].type == Element.NOTE) { + destateAccidental(curScore.selection.elements[i]) + } + } +} + +function tickOfNote(note) { + return isGraceNote(note) ? note.parent.parent.parent.tick : note.parent.parent.tick +} +function isGraceNote(note) { + return note.noteType != 0 +} + +function isSameNoteName(note1, note2) { + return tpcToNote(note1.tpc) == tpcToNote(note2.tpc) +} + +function isSamePitch(note1, note2) { + return note1.pitch == note2.pitch +} + +function isSameOctave(note1, note2) { + //return 12 * Math.round(note1.pitch/12) == 12 * Math.round(note2.pitch/12) + return Math.abs(note1.pitch - note2.pitch) < 5 + //only to be used in conjunction with isSameNoteName +} + +function isOctavedPitch(note1, note2) { + return note1.pitch % 12 == note2.pitch % 12 +} + +function isSameTick(note1, note2) { + return tickOfNote(note1) == tickOfNote(note2) +} + +function isSameBeat(note1, note2) { + return tickOfNote(note1) < (tickOfNote(note2) + durationOfNote(note2)) +} + +function durationOfNote(note) { + return isGraceNote(note) ? 0 : note.parent.duration.ticks +} + +function isSameMeasure(note1, note2) { + return measureOf(note1).is(measureOf(note2)) +} + +function isNextMeasure(note1, note2) { // order is relevant here + return measureOf(note1).is(curScore.firstMeasure) ? false : measureOf(note1).prevMeasure.is(measureOf(note2)) +} + +function measureOf(note) { + return isGraceNote(note) ? note.parent.parent.parent.parent : note.parent.parent.parent +} + +function isSameStaff(note1, note2) { + return note1.staff.is(note2.staff) +} + +function isSamePart(note1, note2) { + return note1.staff.part.is(note2.staff.part) +} + +function durationModeIsValid(durationMode, note, testNote) { // order is relevant here + return durationMode == 0 || (durationMode == 1 && isSameTick(note, testNote)) || (durationMode == 2 && isSameBeat(note, testNote)) +} + +function shouldCancelDouble(note) { + return setting0.addNaturals ? (note.tpc > 26 || note.tpc < 6) : false +} + +function restateAccidental(note, cancelDouble, bracketType) { + var oldAccidental = note.accidentalType + var accidental = Accidental.NONE + switch (true) { + case (note.tpc > 26): { + accidental = Accidental.SHARP2 + break + } + case (note.tpc > 19): { + if (cancelDouble) { + accidental = Accidental.NATURAL_SHARP + } else { + accidental = Accidental.SHARP + } + break + } + case (note.tpc > 12): { + accidental = Accidental.NATURAL + break + } + case (note.tpc > 5): { + if (cancelDouble) { + accidental = Accidental.NATURAL_FLAT + } else { + accidental = Accidental.FLAT + } + break + } + default: { + accidental = Accidental.FLAT2 + } + } + if (accidental != oldAccidental) { + note.accidentalType = accidental + note.accidental.visible = note.visible + note.accidental.accidentalBracket = bracketType + console.log("Added a cautionary accidental to note " + tpcToName(note.tpc)) + //0 = none, 1 = parentheses, 2 = brackets + } +} + +function destateAccidental(note) { + if (note.accidental) { + var oldAccidental = note.accidentalType + if (note.accidentalType == Accidental.NATURAL_FLAT) { + oldAccidental = Accidental.FLAT + } + if (note.accidentalType == Accidental.NATURAL_SHARP) { + oldAccidental = Accidental.SHARP + } + } + var oldPitch = note.pitch + note.accidentalType = Accidental.NONE + if (note.pitch != oldPitch) { + note.accidentalType = oldAccidental + console.log("Keeping existing accidental for note " + tpcToName(note.tpc)) + } else { + console.log("Removing accidental from note " + tpcToName(note.tpc)) + } +} diff --git a/share/plugins/courtesy_accidentals/accidentals.png b/share/extensions/courtesy_accidentals/assets/accidentals.png old mode 100755 new mode 100644 similarity index 100% rename from share/plugins/courtesy_accidentals/accidentals.png rename to share/extensions/courtesy_accidentals/assets/accidentals.png diff --git a/share/extensions/courtesy_accidentals/assets/defaultsettings.js b/share/extensions/courtesy_accidentals/assets/defaultsettings.js new file mode 100644 index 0000000000000..fdc2e5d680647 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/defaultsettings.js @@ -0,0 +1,98 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +function read () { + var settings = { + version: "4.0-beta", + setting0: { + addNaturals: false + }, + setting1: { + addAccidentals: true, + bracketType: 0, + parseGraceNotes: true, + durationMode: 0 + }, + setting2: { + addAccidentals: true, + bracketType: 0, + parseGraceNotes: true, + durationMode: 0 + }, + setting3: { + addAccidentals: true, + bracketType: 0, + parseGraceNotes: false, + durationMode: 0 + }, + setting4: { + a: { + addAccidentals: true, + bracketType: 0, + parseGraceNotes: false + }, + b: { + addAccidentals: false, + bracketType: 0, + parseGraceNotes: false + } + }, + setting5: { + a: { + addAccidentals: true, + bracketType: 0, + parseGraceNotes: false + }, + b: { + addAccidentals: false, + bracketType: 0, + parseGraceNotes: false + } + }, + setting6: { + a: { + addAccidentals: true, + bracketType: 0 + }, + b: { + addAccidentals: false, + bracketType: 0 + } + }, + setting7: { + addAccidentals: true, + bracketType: 0, + cancelOctaves: false, + parseGraceNotes: true, + cancelMode: true + }, + setting8: { + addAccidentals: true, + bracketType: 0, + cancelOctaves: true, + parseGraceNotes: true, + cancelMode: true + }, + setting9: { + a: true, + b: true + } + } + return settings +} diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting0/example-false.svg b/share/extensions/courtesy_accidentals/assets/examples/setting0/example-false.svg new file mode 100644 index 0000000000000..65181e2a846fa --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting0/example-false.svg @@ -0,0 +1,79 @@ + + +example (1) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting0/example-true.svg b/share/extensions/courtesy_accidentals/assets/examples/setting0/example-true.svg new file mode 100644 index 0000000000000..6a2d91e57333e --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting0/example-true.svg @@ -0,0 +1,79 @@ + + +example (2) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting0/example.mscz b/share/extensions/courtesy_accidentals/assets/examples/setting0/example.mscz new file mode 100644 index 0000000000000000000000000000000000000000..7c299f57144b65b357d1e7f44e68c96c48e29168 GIT binary patch literal 18914 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 Z;=fmhz0EFxAMXUXJBh0yTgxA}{{Yq@L;L^$ literal 0 HcmV?d00001 diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting1/example-00.svg b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-00.svg new file mode 100644 index 0000000000000..c29fb15ff35a1 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-00.svg @@ -0,0 +1,63 @@ + + +Cautionary Accidentals - Examples4 (2) +Generated by MuseScore 4.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting1/example-01.svg b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-01.svg new file mode 100644 index 0000000000000..e91dd03cb1134 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-01.svg @@ -0,0 +1,60 @@ + + +Cautionary Accidentals - Examples4 (5) +Generated by MuseScore 4.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting1/example-02.svg b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-02.svg new file mode 100644 index 0000000000000..04c1433d73bd9 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-02.svg @@ -0,0 +1,61 @@ + + +Cautionary Accidentals - Examples4 (8) +Generated by MuseScore 4.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting1/example-10.svg b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-10.svg new file mode 100644 index 0000000000000..8c8c66c1b6129 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-10.svg @@ -0,0 +1,71 @@ + + +Cautionary Accidentals - Examples4 (3) +Generated by MuseScore 4.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting1/example-11.svg b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-11.svg new file mode 100644 index 0000000000000..2b9a78f565fac --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-11.svg @@ -0,0 +1,62 @@ + + +Cautionary Accidentals - Examples4 (6) +Generated by MuseScore 4.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting1/example-12.svg b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-12.svg new file mode 100644 index 0000000000000..80de5503591e9 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-12.svg @@ -0,0 +1,65 @@ + + +Cautionary Accidentals - Examples4 (9) +Generated by MuseScore 4.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting1/example-20.svg b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-20.svg new file mode 100644 index 0000000000000..edfe789b42b5e --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-20.svg @@ -0,0 +1,71 @@ + + +Cautionary Accidentals - Examples4 (4) +Generated by MuseScore 4.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting1/example-21.svg b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-21.svg new file mode 100644 index 0000000000000..6eca984b56b2a --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-21.svg @@ -0,0 +1,62 @@ + + +Cautionary Accidentals - Examples4 (7) +Generated by MuseScore 4.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting1/example-22.svg b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-22.svg new file mode 100644 index 0000000000000..7e55ecd1eb797 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-22.svg @@ -0,0 +1,65 @@ + + +Cautionary Accidentals - Examples4 (10) +Generated by MuseScore 4.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting1/example-false.svg b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-false.svg new file mode 100644 index 0000000000000..dc3fbd480f014 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting1/example-false.svg @@ -0,0 +1,59 @@ + + +Cautionary Accidentals - Examples4 (1) +Generated by MuseScore 4.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting1/example.mscz b/share/extensions/courtesy_accidentals/assets/examples/setting1/example.mscz new file mode 100644 index 0000000000000000000000000000000000000000..559cd20a1b484da1e24211e53fcb7daa379bf610 GIT binary patch literal 18586 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 literal 0 HcmV?d00001 diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting2/example-00.svg b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-00.svg new file mode 100644 index 0000000000000..eae2f6eebcbcc --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-00.svg @@ -0,0 +1,105 @@ + + +example (2) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting2/example-01.svg b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-01.svg new file mode 100644 index 0000000000000..a9e20b88b8f20 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-01.svg @@ -0,0 +1,102 @@ + + +example (3) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting2/example-02.svg b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-02.svg new file mode 100644 index 0000000000000..45739db932207 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-02.svg @@ -0,0 +1,104 @@ + + +example (4) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting2/example-10.svg b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-10.svg new file mode 100644 index 0000000000000..36d810678919a --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-10.svg @@ -0,0 +1,117 @@ + + +example (5) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting2/example-11.svg b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-11.svg new file mode 100644 index 0000000000000..8b6db60b42962 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-11.svg @@ -0,0 +1,108 @@ + + +example (6) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting2/example-12.svg b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-12.svg new file mode 100644 index 0000000000000..0deade0e1e396 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-12.svg @@ -0,0 +1,114 @@ + + +example (7) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting2/example-20.svg b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-20.svg new file mode 100644 index 0000000000000..121fc6ac78947 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-20.svg @@ -0,0 +1,117 @@ + + +example (8) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting2/example-21.svg b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-21.svg new file mode 100644 index 0000000000000..6db5926db8666 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-21.svg @@ -0,0 +1,108 @@ + + +example (9) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting2/example-22.svg b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-22.svg new file mode 100644 index 0000000000000..2b062214ab815 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-22.svg @@ -0,0 +1,114 @@ + + +example (10) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting2/example-false.svg b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-false.svg new file mode 100644 index 0000000000000..807497de103fa --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting2/example-false.svg @@ -0,0 +1,100 @@ + + +example (1) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting2/example.mscz b/share/extensions/courtesy_accidentals/assets/examples/setting2/example.mscz new file mode 100644 index 0000000000000000000000000000000000000000..51e8ac3410df35ba2bc515ed1ec94e892032cc62 GIT binary patch literal 21661 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 N8G6ehV&lJe{{eW?dnNz? literal 0 HcmV?d00001 diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting3/example-00.svg b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-00.svg new file mode 100644 index 0000000000000..f99047a465c92 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-00.svg @@ -0,0 +1,107 @@ + + +example (2) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting3/example-01.svg b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-01.svg new file mode 100644 index 0000000000000..f07cc383b2b12 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-01.svg @@ -0,0 +1,103 @@ + + +example (3) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting3/example-02.svg b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-02.svg new file mode 100644 index 0000000000000..ce146398507fa --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-02.svg @@ -0,0 +1,106 @@ + + +example (4) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting3/example-10.svg b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-10.svg new file mode 100644 index 0000000000000..fb5714c994c65 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-10.svg @@ -0,0 +1,119 @@ + + +example (5) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting3/example-11.svg b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-11.svg new file mode 100644 index 0000000000000..a2850ba0e6057 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-11.svg @@ -0,0 +1,107 @@ + + +example (6) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting3/example-12.svg b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-12.svg new file mode 100644 index 0000000000000..c6bf6d9002a8f --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-12.svg @@ -0,0 +1,116 @@ + + +example (7) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting3/example-20.svg b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-20.svg new file mode 100644 index 0000000000000..818542bf8f08f --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-20.svg @@ -0,0 +1,119 @@ + + +example (8) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting3/example-21.svg b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-21.svg new file mode 100644 index 0000000000000..7f05e3bce09e3 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-21.svg @@ -0,0 +1,107 @@ + + +example (9) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting3/example-22.svg b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-22.svg new file mode 100644 index 0000000000000..945eebffb7de0 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-22.svg @@ -0,0 +1,116 @@ + + +example (10) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting3/example-false.svg b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-false.svg new file mode 100644 index 0000000000000..d3c3540d34f05 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting3/example-false.svg @@ -0,0 +1,101 @@ + + +example (1) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting3/example.mscz b/share/extensions/courtesy_accidentals/assets/examples/setting3/example.mscz new file mode 100644 index 0000000000000000000000000000000000000000..b9b3272a6317a0ae697af3c65eff9bb50f978ffb GIT binary patch literal 22328 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 literal 0 HcmV?d00001 diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-00.svg b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-00.svg new file mode 100644 index 0000000000000..7499487e2ca3c --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-00.svg @@ -0,0 +1,54 @@ + + +example (2) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-01.svg b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-01.svg new file mode 100644 index 0000000000000..a73ea04125e4c --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-01.svg @@ -0,0 +1,56 @@ + + +example (3) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-02.svg b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-02.svg new file mode 100644 index 0000000000000..d46191259de6b --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-02.svg @@ -0,0 +1,56 @@ + + +example (4) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-10.svg b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-10.svg new file mode 100644 index 0000000000000..8579098b3fb58 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-10.svg @@ -0,0 +1,55 @@ + + +example (5) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-11.svg b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-11.svg new file mode 100644 index 0000000000000..da48fa66fdf57 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-11.svg @@ -0,0 +1,59 @@ + + +example (6) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-12.svg b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-12.svg new file mode 100644 index 0000000000000..310fc6ba3d1cb --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-12.svg @@ -0,0 +1,59 @@ + + +example (7) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-false.svg b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-false.svg new file mode 100644 index 0000000000000..f91ff44644da0 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example-false.svg @@ -0,0 +1,53 @@ + + +example (1) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4a/example.mscz b/share/extensions/courtesy_accidentals/assets/examples/setting4a/example.mscz new file mode 100644 index 0000000000000000000000000000000000000000..393913e67d6fa70bad1695467c826349e3037e84 GIT binary patch literal 18388 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 + +example (2) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-01.svg b/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-01.svg new file mode 100644 index 0000000000000..d822c67ecf602 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-01.svg @@ -0,0 +1,61 @@ + + +example (3) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-02.svg b/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-02.svg new file mode 100644 index 0000000000000..7b4b461f1101b --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-02.svg @@ -0,0 +1,61 @@ + + +example (4) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-10.svg b/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-10.svg new file mode 100644 index 0000000000000..ab8c9e117bb7e --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-10.svg @@ -0,0 +1,60 @@ + + +example (5) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-11.svg b/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-11.svg new file mode 100644 index 0000000000000..818668917ad6a --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-11.svg @@ -0,0 +1,64 @@ + + +example (6) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-12.svg b/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-12.svg new file mode 100644 index 0000000000000..b606c9fdc1f58 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-12.svg @@ -0,0 +1,64 @@ + + +example (7) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-false.svg b/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-false.svg new file mode 100644 index 0000000000000..8e814021717c7 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting4b/example-false.svg @@ -0,0 +1,58 @@ + + +example (1) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting4b/example.mscz b/share/extensions/courtesy_accidentals/assets/examples/setting4b/example.mscz new file mode 100644 index 0000000000000000000000000000000000000000..4898e78816c46c30ddcebd28ec054677b52b6024 GIT binary patch literal 18411 zcmagEQ;=;<7cAQLZrir4-L`G_ZriqP+qP}nwr%V7|DAgu&eM&km5~!GqejiD7*!)u zP7)Xd82|tR0w6toQAHnq^$3yz0H7KH5C9GU0Kmb}#@j&Bp<`*mmMrNcz`;an*(BquwDPGlzMC`7uA2G)i5@6X261)j>x&&N3(@AXW{ zr@Nwx+w3&$aKVYHkK6O*$i=&UN=8q5Pt2P3_ltq%j;=HvZOO#k>j)YkR6LuTor|t+ z6m4?FktMTTJ}OK(oU&bM!wgr>zP%eq4rkr2|5-}S+n$xTX3s=<$Nns~0k=-nh9v}T z>b6bGBvby|J~8jSwA-cB9z5XTzLWaOk{`5;=bo}n zn3h9pE`Bj5Q5tzxw9Z4?8Pn2h+ZCic5YEA$dQkl(o#heI%^f@{Q$b8?ey$#%S8yro zONaSme*{xc@lGnoSCpII3}|lfEw1!Z#WJXyI z$A@p~S1CJ$D9{m$PX8Su292jMqN1W*^HBC{@-PpbIn`ZMfA^1ro(^_|l&@y;T-Hll z`!8(TLo(>Qxxcl2rt^M$FFX`4d%vE&!6lr~75>Y*8MonQLp9 zY(UyaOr#I4w`WL0LR;*if!!kNJBiR!dUtScw~2Slz`IU2={q%8KI6!vUURWgXNVy4 zCDE!1y6s({-@K^LS7qZ3 zyVtf`H(_0?(0(xeh?!X{>w|6UAyWdZ#FGL=f)$o?JD1@|UvLoRbi$lO;6)qwcB7WX zYiK9O!s{UO%S}G!cx~ritjSPtdYX9Fv^%9v1PH#^|4GkaM>LOsY8tzKV%TVuWeP0- z#?I)>e&IbC`K&ck=9BV8tgB*3lAITL7_6{YRhgmG~dod=XOIL>nQm;H6Z-kNzlu&f=p~T2KnzzEgMcViwT@);G!c> zb!vUN&sb>K^yg>uJ132}b*T}?E|U>VU8s;z?OeZ70tlBFvq~ORDtLq{q)30Zi7oiw zD45@PDy#;qATWgH5Pt!bRv%vigtnjHMDOlXH~*Z6=4MufXUDV*8Cv0o!HezFv@_mH zjkl+t+tF8pRT^FDf$Xvl8Hf#yoDl)Jd^n zowld~k#y%-JTbXUe-Yo1Vor6eiu6<5(jV*a>lq`jEWCzs?nP;E7gkJZ)u}(Sp+b~w zLwEnK@xVQM>dz6|tR*h0FSI0-CU&x1oa{D_tZtMKuKwC(B6<9nb=QSA?v_dsZ!B)uI`F3|3C&70UN99m^58 zCrj~kED+PVk3)8V8e%#zvw9aK{RD^qq7c@GWs~km|3kr2B&jF!O5($g;v%)ai5%4I zV)xTlIzv`|7@M#(#FG+6Tg=-%%f6s%Q?LDfxgk3#|RIgGS-FvvP?C(Z{!PtmS>&Xx1jRXTl|;Mknh{z|cqkEZpe zLlIZ4u_>u+^38mSoaWNWl=hoxj&PwGtC?Xx8{i~K!2m@wLNDJAgx=|^fq4dy+Pi%N zg_PvqjkrcMhYNtr2b}c6(}4k=0OD2S%_ap;p8?n$yGY2bw+{IjxTCZ45Cl81dM6dw zw&@DO7C%yWT8s78r2#yvi!(=^P>053%ew>Ja54e-$xmnp>*iK*RizM^Hg(zN0r zf5E+u?KHpKd!=1yZGLa#AQLz+>MxON4a)MvBse6RUKQ22R*iJi=L zxjp-+7Ei2j`BU2HlsvZ(vKIOPi+R%>L-axss%>f z_pBvHKJO#^4@|mjwlC-qJ%Uiyi_KNl{WtipU7g!W)d4a-&3(3`(KXX0?VB5pHsiV# z1{M~UVvb&^#mP+p_*c5PsB9kAD7&O=rz6GgXm$khHCFEw`RORRintZWgXQZj{@bf( zI0?|BdI?^Kd`NES;!s%aw#*9>Cs|&HO)Js@8l@&Q{k?!oUEG%GCPy=GR?Ck$Qcv(? zhQ}=@#qx8B*~Ns`;j=I#eI#{(+iXcKS)-Bi>!#IbSZs~N_cG{K9~RkoHsc-GII(tC zRT(VOkZiSbm(Dg3Uh*COQ4l6=GvViI*sIhD{jJO_Gsw&a`QqY}f&j!UQKv%oOcWQv z?w8zvBdOQQZlzxa0r({J2_IxzgOX-jO9J*vD*Y0dBZef!GFg#>KuTmV!+MI1GQF_c z(yb9NCT|x@7OS<&JBK?K>}`dv*?63%<@7X016853sEo7a`ZOia}^Cui}-#fEH9 z@g=?IcT!BySvCCxXpa)g=O-m`g9ptj-y-D`E_twz$hA>PkwQ>Dvr|lMVF&SrR+=aq zHO-xC)iR?sQlf<>)|qP!D9DuCLQ0g?bdwMVbyZyJVJO+HC@;W3AJvS-@s&!Yj3Q9j zW|6LMziTk#jJ5w0RYXrIKKIQ<5XDXyQD~xrgR7xpW7}KD$G#s>vBB=+LI<$SRxcUJ26-z(`}o*XH4HZM@YvEqGO0-(>*z zF+&n=@V>e$(I)l>dIf)~ls=BQ{>q<(&}72NfFw!-3)LP-)mZ*(7-^piyVs~!9*`G0{sh#ph zJR-xfVL(0#(!~_Co1%Yv=cZc<3f6(@3p1}bA~ZPY|94zul6aL!Yw$GS@BjK1pv?ge z+F^P%n*LWrbc*ND5Zf`lSGM*JINhDduZQncq3wuwalu%o1Qc`3h zel`dNo*k$4OA)cm@Ko0X6eFAksL{y$j9&&g`qve4i*!%B__kD?^rV9PPsE(D^x)`% zeo!FbcVorBD?GqMo72fGzMgDDdA7ZkFARuf{Ubhj?G@wxtA8uc@j3i@V6ZZ(R?Bp|1QB_H=0Ze`S+9K`U%9zM1cnkcK$PN0?@ERuaS>n*Yz=nB>=*^Q!>ipP3F zQug_`&*pNkYz^r@7R?<{7JeXrQdb#KhWh$++>FOZ)-G1dL#-@Asb(`H)Tm4ofKu|c z@BZXv81Y6Ph}<){gp3XS3uP)*<$~)l zhv2}ek{e%VVLj_XgfvUv5Y_jV$pcOm^c^4|<%iVLfRqeV7(wd~78>|2*MI7QAbW2U zZhg3rjk{?+uh=`h8MrJP%q?iE-O|`AEfQN>KGRi;X-HrYpYB&qwqP~kkr-93tsgo% z@|8FigxFP*@K|5Y*@2wyFSXdL`rB7K$D@U_uEKvFA_xr=nXV^2c5Bj~MIW>%sJMpB zV?gZm8E!OEBW(rwHY!=}(r{!ixsgS*>UO$lNAVNELr+gW8_U8A zI20v0_I{YhbUb%%GzyRrdbCSipd`(hLkHqR zMcyz%be~7w`)c+bFaB{H7u{@Q)L4j2Z)&oDm>GEll%kXYEv>t(olRso8RtyFlc7aq zinZXb(%ueX|4kMTtM<`y20sXF^fcGtJ3@Q@z6#_-!4uET5*F5B?bEo{q6lzdmYFZ; zzEN6p@gbt?I3Pq!6F;z~?J}5>uA8!2WLExAZJAdUkZEP1iohK9>tQ+SJYP0gQx!&R zlAcZM4ZOHD)mUn!!Q2#OmZlXYDjoevC(7Dn z^Kko-Bo4CNOm%MAFb2Wxa+79PyL3H`A{$R2^H|UMKEio3z#p8k`>tmYRSh2vy}gDe zU%a41c;k7rWVR|0uY5b+M2ustVx3BY+iXP1Ptb&Lx3Sm0{q5|L;Kh1}eAFNGb5wi9 z$gI&$b(5FtuIjqV8AAUDd>U3#CMHVV#;w z@Pkq;@&)pd}uh@DTgXoMZ46;})jqCGM(M7O@jBmF@P#Ei%ry&}YiS)*T)KkOG zmf-zAw#K@G8{^8$bE|F(MswV_czxIgm7vp{w4Lq4u~~7a8(k;ug=e(CY??Re(+ye3 zXz(cUw9Me^56W@ce(Ls%rd~*jmgXV;fC+ z`^4h6IiBFNXe+6)sR*Bv7%dWbzghcX$Hd}S{AWdl&)bZ&n`fyM#;a_(S5YILy2fFA zkYF61e-b!hpqzK%nWN~N#`QUM8|^x!RF?5J!N;BOtGH1ha1%* z^ey*hb#sA4Gr&x~{bf#o!0Cw{2jL89F~`#A@jz?0QPiTOjO|Qr6r)a{F{nP9S}U5VPgKwqUq&6CQ<-6 zeq_-s0iCPFliedY=Aec?3&<|@CjpWhC?p6F$8TUCYRzc*r@i9m;<5H;rQ^K^`>ww2 z63lZh|8PIfX$_a@qA6m411}SuDLlguiK*ak+~P8MlH;;Mnec8eq^Rs3w(-UHe=KR{`Pg0DiR{lr!u3fNLi3;$>1ySHa1(2o$Ch7>nc^AL@thXS z{f3|jhqHZN;nLi5|K7Y6WagS2Z+YVu7Fk$8B~B8DT`JN2GdWvj^TNo|skdauDcXx+ zzsc;=+l$B8n7WAH^L-Uls{=EfpRa-d#Pc%jzx^oAm>UI+Y=rU^CUo=T*_9(yOPI-r ztl$F8)N2O&tjWJ0ziT}pQvCdts6Xg|k`#WfOMDlVA->T6lne38lJ-%0v|Nh`D6KYx zT@QZK;G?lO>nf&uf zdBAckPT{}hf|AE}@J~2@H1)&CYEzT;S29!MFd2AjTYA|>URlE;#B=QASd7nA5RjWN z)nzM7XWKJbnY#?_#U@yl-#eOb$Cy(XPlO8fapTa$ms z6))j;TtB2b3mNYd9dlhJ%;kz8v*RIE);eAoh=qdwR@jjlcg(f_v@f2O;&s#>ULDR2 z+0)W?xVyB`#OjaAS=P^ILwlJ^h(WF?BJGan_AC8mfxOH~hfEWyQ9uUsFyc7phnjgCzg>btf}GMFI-M zP?HJ|EY)Z~&rTl*B~ie)-4mZ*&A+77(LvU($pD3^=prLt@Df9{rX49SPt;KW$&(JC zt%G1#VC+*;ptZREQ4M_4+eNH}Mtz{k6kPqsF!RJ`=EKmw(KJU{_g3>FuikN^YRot* zFljZ$M=X*;cmp<QMrSUne1SYKm29E`9r2pQ~; zMH`&YA9K4K-;!efxNXb>D|OOZRhmq4z_ivaRGXBoI3yB$q!uo#IbACP>T~UCcXk+L z0jzst8~JGXq|0qFDN^zS521zVM=S1|5e0UEe_nV7A`|Z{te22dj$zi~xn9tGe2>U# zl72)A!y6D#$@c4<@VSY>&VIgywLTHOn!zmK(>XSBe3V)f+E<;s8i;8))c#0)_;&F5 z;<&_fpygm~tv3rTNf)6zMx=S=3k&zfPZu zkoMp%Sk3F0Bk>;AYFnBYX*f{(s!afp-e1MdU&XzaW_f(Hm#u{Sqz?FID#V|IhA(_w zc94yof}#B-M%C9VUS>*}Xe-owKK$d1Kzy*&(_?&0@ZegC&|m!@WBf&yPsQI7Fs}D$ z#J=aCKnB(7N;f;@bQD+% zn4g*tniOL%aS!CMo!;&a@Bw)&+y|=K3Fa$Ft+Ry{##TB27}huyK{4H^pj&)5)0;qoyM}8ip9I;7X7{x!Ly)cM>cYxt~|4wo8H=i5Pr5BN2 zda@%pD|FD}Y@?wOAszQ{$cT*9b4p$p@8(XhJRlXr-Z^=vMJ~N8h|UV4vZ@n>gz6$2 zp#Dx5Uv`GeN+^uYO7Iehks#m#LvkkZ{eS~E!dZNe5(`i?c5L7KtNm4hKkyd<(&mp$ zKxo*MxVrNXh4W)o#*%}tYtHD9sYUSE`P*lUfizPQN}24Sfrw-|KJB7+A&*!Wd_DAR zDn1xqOSMrzfE>F$L9#cs`Fk+aZVPB_9z`gHK;b|oH;geS6n{gY z5HnTWK|nO{6BdW&1M@;i3xyfaBN@BfD?-O&SkNb(6pqwyg=9j|{Lv>n!)C3P*u2}f zt-RmpY_~>q`3UWzt;nF{%A5@K-SXra>L9*uIDhT)Zq6OOPPZIaKsh>az8_122cg^ zXVu5MRmR@MeRadm7U&$6DB7Ij6%d&$Q%2^?R5K@DGQX0Qz>lYINQzM=6HAaO_An)T zb49FMCn0nrrYqApX1F2}uUH3z+7E;I<8Bb;$w5Ubl?hSlm%AG$WGjuV_%|NCJg)XQ zF3@o*5G96~sWUj9g1ai2u-6qwcY+Ba}$TM_A~pl+Udd8jG%M zj&*XlQa>F;ag;1%HUHmZuBq*noiZ~AZzXD8Y~2kxEK}bcb1vWZAOz(ME0#@!oIDYp zS;WH}$SJyJWK{aVsYYak#z#zr*-fo=#M`)Q=jY&Q=~_xII(Sxn53b1pxJcJCZoR92 z_YLkrZj+5kLWi8ZKjNtjOiyU%!aVZPzRLEUEX2O}?6pr~^u_=_Ut(m&2OKECL#~0- zq(Tv8|8Qls)KqMYHwV3BVktYuU-Hz&o4jz+6J93t|8+3rnNeG&KVM^zP}g9VG$J_< z9fjo{4t@B|6zDM_n1R(C7LOy+PTt~Y2G{(iHmUP439s2zYhMF5IYu(p;t0qdAYgC~ z@g5m2{*+XMd34B2RkFpN^&9!!FB5ewPri~L|5$Py0a(gWzHQi#fSPKBJoZIbO-4Il zpW(;5@;+gWTvLQtFLp?j#J5OCh?I1fpU;se-*?OrAzaVw)a@()Fj_@SBV7#+wQnAu z%6|QhxI`Elz(3Cq#UBDZst}(KEZtMzm%Z_k7QX*wkT8$)D%HN3a|ciIi4X)hXx67I zj7W$?H!wC;3cl+Ihoq=&V@V!gX!*mcTLfAXSU)te(_tP*rz_Y%{*IAUu$21gUZo^9 z2jd9H=>$ch2A9SXD30+iyEw2Yvny|mpMvDZ*j@|@yfbM{J-92`MDS?4QwlmFAU8J* z?T;T7I3;O%A9y%QS|AA7V0g@6lF=xQZM3UjerLU3e-VVyJgD^k`n_r1L%ZXg1EUrI zOUX?TWhCMVsy01fSXF&2CDewipE3yRAF9s5*G0lfovN&geiRP=t~3ndBw0%fRQ=ql zt;tJ;wpCh_kIw3G!8TRp1XABVRY^<~b9oYeY#e|{$wE-_IBRC0T!C$-)Xr>W7yuM| z4h;f`yyzJDK%~4PtX#2a3D)A+s6=xi{0O=^2$A6JqO=XLB%|jpR-C8MNc0X28!3PU zN)QBEXKpogT%;kyi+67XuvPaRtoJM)gaJnrz;ekeLO{ezowI29-dFKNWhuaejMh8p zc?eB%KEG>tx|P_lHKDiYIR-AOlhjCcakmkrN%q`L$&1>0o1Ozl8eY;f)^-f19k=jX zX2^(8=^4Vv`Z7*%x!J=DEC55`a(djj-9S$xKU*WW@hK_qvwRe}U~ z0KbzA?g2>c+{gtR@fP2dD5epJ6scKssh0WiO2#d~azR4m9Er;-@Ul*Z$~Vu?MV$dW zs&OD3-4tp|IZ#mYXPWZmuRb_^Q)57Z0w$`xZRmM>RN3kLAF^VBdeo zU{(#FSSE@22H({3=t=%GE4L~ZV}OKoafX6u_uP-*E69_yadUYCZKr`~)zH6B|jgCta*s~0W^11 znajxLX#g-2W${WWa|i=j#+(ad78p9g0%o~8aXh*{NQC0m_6=uS1L`&-FQY~0a|0y%ItQrq zH&X$GDlGb4`0t_{_SEu6+Lx!ZHNtSjs|>KhCnL;(NQ4{g?tOYYJ^ek5_`a?XHw{}Bz9xGpDQNW(`T3Qw57beY?Sh8kHE+T9Oz9awV3lW2n&GN65?X zKF!rtK#`7y12Tug$Z5RsKHMG@vJFhEVu-Mxc5k7QDY>jwwlHD=gxSi>1q)I`CivaG z^jS$k%Morp67U6ep3pqFtLH%rlpdgXjAB%60)`(}#*ZM^$BpA6jP6r;fe;DajOT2C z{RL2?o@=u6g@^61>;7`$Km5n_H6yJw=HEw8dl3%&fkT`RFD6z9D!@AqX`!lVhac*` zjZ74zJ;ev2&)sT8YpUhI7plfgr4%X-11$yNbqFOi>ONB80`n2B>M>%LXdkKdT29#$ z7o!3-2{~nw_Q=TSCsB5z3Ke>O=uHl#6y|U2?63T6?Wy>CUUcDtp&I@mMhFi_`p|0q zoV`toMZDJ*XRd~EJV6Mfv|H5{GLTsJ0gv0oSni>k&=|?#D{B16&;PBKKi?sj&I@&Q z{;t0695Q^$%Z->igHCbAyi&E`9H~f`H;}@>&V>>?quec?U!~JmaVhZ+moI-4xmT3E zE2~$3$;6lquN-;_gPPD)rhYLAkW3XI@!>**g$81`VIZDHae7G4+b9r@a9V!ymfgti zC&ob*9O~f&eAUVk49qZyArlOU++u{(m`_XY2341~F6P*%0Np%+T!7&mk ze&Q7q@;_?1d60J6Z;XE+f$G#M0nzmgBw3MRVgBs}3;22V-v8Ohe8maqa7eOQS);ft zzPtW4R=m9@z3uxO=h1mO3J#3t@^k`Xcw)caMKywuA@lSC+8Uj?;Z2uxV*YGz22|kb z2KGRbUC_Zo<<+#Y3n=YNQ2rKOs&z6GkFUca14o0kNH|zU`SQb8!~?HUo5Vu10jl6Z z2#qQ!XKND^B>4Ol&LesP3u|5a;F9@^wpU4sWylC+$jD{L@MXv-|HEIxE<;wvK2*rO zz@C-Mo(0p|iiBK(gi(^M)I?*<5=G>a1wb^H@O?+h1IP5}g|g@cipYhs@CAzB z7QJ9bEK@=*Q$jCO!ucN#95}u=vS-DyXN9q6<*{e^v1gV2hreWxJ*#LRIbmMvz%h8= zk#%=}S}t??U*`0@9p{1_XMi22q8+E89p``@XT;zc%+MLk@R`)e|IpGkb2=Nf!~wCy z0inbJxx@j!!~x|${3X~W4@#K^3h8E<)AE_q;98p;;R|h%3vQe;C%=te=7dt_gk0u? zUFPJsQw8i<1MFEB{~=t=!rQ{WBmcf5!M>y4z9ZniW8Q!GOZ*NTD?2-zx%xbyJYQ4;A$Nw;R@^8JWKKgR6J{Xh(s1HbA0KnPv91_pnK#@&6(+xPz3 z6{dqfMahjv3J8dnh}h406$ZWwM2Ejb^>%#%MZZPePkjOnT7;i=f5;KLXb3`nMCrXX zQ)K}n^*~x~Ybku^kPK6$Rm#>VxwS!0DtZG^GVA;mRq8k@9t)QW8dUVwp=LDyq__4n zsk)z^*R@eGyP>3Y0WGMyep9mgp=9;-E2_nDP&0?2qz$=`GcO~Z)D1flT2PzR58F~& zL>|`%LPk;? zk)1J@BZ=VUNzQTt{;Y9?F_`Vlq;ohOPEidpE@aey-jlM?jj+bm-I@b2acJ%o($gwe zWGvz=S!5&%bz9}?dC{%$%!TW@w?jLMY2Eyh4t4%8sW$cyNPynn40}&|V`l02Lx^iy zrka|3Kl2DEpm`edhFp2Hr|1c_xc`l}LsVRX{G$u2iIntQF6FgNettM&+2Z3;y`*6t zWYJbbk38CR?xBwf78W2uG!{VI@6ty+I@Hy}b95M&F1WBsdI9U}09^5xnS9XQ=}_v3 zyJ-!&i>483j=i;`5^)a3CDa_GZylZz(f9nr;c0Jw3$%xfQNUC=`zRsqc z0vmnQWf2+b5V$)_L<^Xg{WLRQg1?q&^LUA;f(bsJs6Lvf^iWYc;x&G2Ert$Y8#DbQ zR`rs@0?mkWajc=7mi0tiF~t`Sc1X;Q_$VNfY0E^|iFznIgYf54bTYg$uVpgu0G4{c~LpUN+X^!H0*nE?1VX?`mm1i>l%1Rr>j@eHCwO zLI6`~U-iga7dNmKR9#*Pb3+eiaoKRX@{8S49&!5MDId7W>!KqFe->0G7l~ zT+L7RoxD{Mh(cOKp#JNc({AHB*Zd<#17`-jIL7uemBe@>x3!6uK^OArXnuY*S9*p9 zP)zf7($1a!JV6(7`9Qm~Za`Pp+&^K{@KDX;HBR-=HCS;r>ZzveE3@ugSUrq3aa=d| zWxol%<7sn!`Iflx;#&QE|0DN*xh73E{O}II001g70RUirU6V$x`c}68IVKHVud*~9 zGC1K!c0MT3w~;JM+NR(+#XT4oIIKt)T2Htq)S6lPLWu&Aa%6W<^k|RM+0krS>FS)( z>ONKdkJy~dz1_4p*TbQ5>|O-$aA6&z+F5fLUA*&taCPxA&vYwgj~Q>zvZg?#4SDfk z!P}q27o=ow+wdoR2xCB_2mH(|)tUTyPQ!)cP6iIvY|{rxVNtNNWxV`nct_L28PY5) z-SY&)iQS|T4-W`||X@t4oj`7!9KXdS(a!&PCSnHIwzwzQeoqb&EjKAWa}og!T{-E$Au(9=@PO|bjf~w%Au`G zb`}9f2|;aCP^5vDH@fwOYvwSsNxu2;rY6a16^lQWlxP~nJ^Ds)0273G@Q^sILxNVa zlzmzbF;+jKa<^=iM|-v{VR48~qWg3jt|6CW@tedCv{#|#iY*jmu|w)-G*tM_(8RP6l=)? zq6Krclp^C4ihJL`;U>vuj-=m=dg0$n>ttVNCt6h%iX^whgvHU)<4n>}o#o5_g7e4T zgi^{3^GuMzO$M|4PbimveM!$-0wOQ`+Q?cs6PJ&&&%zTpO|j4Do`WDseeQ{E1T-|PbdC0OOgaP0UPEoH@ZOJm87 z&A)3L{9Z!NKF6lXFbtbryiAXvn-*7Np0Y=_jE>AxIomDq>p{Ycvy$e?4en)-3i7E< zr4$L-oJi@4Yw#8(=zK8zoz7RXF#qFbXYD0!=8xCSL|5g?QdKu3kNXSgw?@ran`-Qq z#9boW@$}`&d$nmxN{;Sg3Rm*hYW9Kp*TO|3S5|8R{@4ODv76XEWq;fui3qXVjZO+& zpTM&qIk6iKHB>w|v0ELUxQ@>6B~6e({EEUaslyQ0G5F>D@v0l;P`F+`#GhNm30;to zu??DZ8@!dT<6d}(qnmAUe1v{NK=QG84M3a z;UYpd7)ll(P_d-=C99EY3=9M+msl#9rMzVPMz1Lh`!PfK|6*QcF%ifK<)}aLQ-GlCLh6 z21pnr90K`25tjd7g-x{F)giiG!Y!fpG)@F9!d4;Mu-*FGfL+E5k^iw4r#JXh6W%}p z+qJ%Y{MJe19Zh%t-TERq2wF|3p#MV*A9Q>tXnlrI&q(K|7T1oF!XX~l+MM>Sqac(P z;Qa`Jsvtx`($Nw8x;=h_5?cQa%I`O*P`>{KHGmIfMS)B>`y15%A*-FL5RDPKP$Iuk zFgrQB6+OfHb)WtW8TPuTPURE8SmM4(8DhLL<9-AF-^q~HJbRfP5da|a_lN$Q43$is ztPHI6%`6@09REK`Yin&{q~^k{{PV*rvUv%&zs^Rh{n5UbVHy8xz>A8{it8d;6F?L= zc0y1m;Nq&NZx{=Y9sTb5`2O(V#eM0X!F$;paqH2kIpLgna$KSqOC7_9$X{HPWAMcX zvW46VMDV{UIFXRo>o~90KZfK-eEIQ$NEKM>1+D5V4v&wsS$1wtz}*5d)O@!BX^Of@ zg0%wbK@6Eg662kHl}L$-WDelzrd?Xq!RKEJyW*|5Pk6>%5S4;mStabg6V65OaWG3g z1AS96W%gQvugT^iQSq+n@=+d2wKOJ@-sy%9-{Bgyc`SIR4DPDp=f zRm={obGCGPdYCkqRaZx+q_}uyN&$_Rk6T%Cr&ZQ}J)F#(o|cA&jy_$igaijKE1!*3 z4^}9ztoZ_`8N(GqYkJv^Sj(<#S2%2Qah|K|?#nK?SJyYToBOypqrpBg*N?xe93LGW z9XI<8Bn832!j_kpXX9F{_SE|QjU|CM>b^SHkk`4+FF>2puG zBRd3k)pY2Mvuk@p5tG;CVr5{EuWTNODR9x#v+(k&?{lbPD@OYAGCwzWwYIaf^YrZO zdRd{jk;$?*gr$J%7|2ls6y@^&{9K|NB(XY(ysPl&J|HnBe;*DGeuWdQ@*Ba`JUF7@ zZh3)&JNm1Vf7K<6VooY~>q>=YScBlS=60y-R6fZ1DzP<8HX_|f()r}zOIKNc4TmN-*_h!gGd;*u3+ zNnxQD2`n3uhj6ZQ1;OcKSh;y2!#C};SjY&y?2KckF}ozCL5dg+EV`?6OHnlA4)TOf$|Oi@SAtTL+I86FghHS`Ysc>3m*#(6o z@iCtd*7J`u1+=z|3@jp|f?jQ=da)yJLvAdrjClxBB6S&==&-Oc08yLcs{;p7QBmX` zJbSxMCN3^6=EL>7N6OT&8sV0T0;|-62y=5-+G$z3i;;EsWk-_{3yvG=4Bf}IG43~t zv!?7p&8M7`V>T_x2+vAL@77P9FRY+gkgpyK4g#2eamAy|RZHE8ScJpC7Ck{#8ksm- zjg5`eG$--t*_0<{_*|r8i-ko+WvfO7U4(;~!@sjo3c8rrOM#=rJuTVzMj|aPPF_c6 z`vUM51$nVj!e%rjc*sC}_1GCH^S#7!)^`0ww!`we1%$QJYom^M1_YXn)H0?_FGK)g zj)m2jKYubYBw95L(r~uc*3Rxulk3RHh~?=?MVVDq2NMl_mpS$W99)mCo{Qt}-}SU9 zDe*9JLp{CImVwfWiV{wPEbWY?`y_Oov(MCWZ}PqOE&UO1slC>sqM&p^9?A6%tS*F>V-d;YBkEH}&O^X~R>-UaUpXM~HN7gSP0RaWOo--o_#N2^I9zcElC+j|T z9sa&L-acRGvr`c~PK_pzcN#DEX~I1y{%ao>G%F88MjdQy-1hd?%_GT;wY9wbe8#Wh zWgfPb`9g{i`i(PoAuE?;Bjn^yHQh(U3kh zg(9;w<=ZF%`py)9)c9m$YtyzTBlGgTz1xg%C;~19jI@PMA-Bku zq>Tcf2tG3xkK$}e(&7%yKT30hgCPEqufqlyL31|LU6p$WQ-Ez*MDS4=#tw?_ zv$JKQqfP7g`}t(>oiGkx;%C zmr!_}qD;V}yKz2w;0q83E<&p)&Y-NG4 z009A4_KNM&$`ED4^YZfg&t@`Skths}kpB`Cnpk`1ThLBUSS+7DiODlCv#Mx{hv66F zb9p>tP1m-ysmpy&#bn{QeS9y<&uhGv8q%<_we+u9lg+ltr?oCG!=s>}(9@NdYvaTn z25h_(oYqDPpc1v@jK5tUCns^-&^Z0+L_W;-lUGo{-0dxp_7wmCrS`ZLS)Li5l4ke9 zCnVeto~E(@{Ojcv7aPI%naP3veR+8agOiO8Wk3=WOnua8b8sM7BV;W;DDC}0dfsBw z!Wg&FQS0lvY^HK>oAZOJPP~VE@%Z={(6?d$${B;Zr=dv)&8!GZ{2VhgJ`Q5cCV8{Z z!NE}ga%^k@ieVt^sQ&C}#DHN(c%CxSv*I5Rum?!s?d?rTnS*U9ph-t}4O!$NVZ3GI zK0muCH1%V>=r;_78ZBmoO-w*i<^A*RWPDtNmHm=N8lMc1pI3Awbtc$b7$9R#>Atf8 z*BJ*Fo<^hPoZ`uzSQL~0V#iPsj!omK1J;pZKDqLd{gph_d!l zE37H#{?T(qv>HvS2DT6wVcL@*olh@h%rplEkbRhDX?dBInK@UdW&=~PwdT2GX(?>P z>5vRDv_lF>Fubpi#yCi0eZ7Fmpr1G#8M>rLBcjLJ(a9-Jp{~EQtjZi`O z_6XEu!EOZr)i^y52ejbZWI_36Vp(P)Fbft zANmy9>1isDZl0dwL6sSvV0KxRX6VgTkbkeoQ&_Yi+i^|d^^7Rl(LH|m@c#(@`4?(y z|5lmYd!QPF=&BkEi8VNCE_J$MYil!tWm#ZfuucEv^|>*fra+n0!^W5d42>Ho{MtDM z0=PKtTOLIHoWDQckZL=>?(Kzzh4}#yF+4%XLCNXpN|5cErQHW1_~C- zbTUm>xB#>GdkvJfpNZ|^`L8Fo?!duyoNpfGMiY6=s1eW;-rd8#(%JPc_xCT$OTtgJ z@%}2r%TDIJF){)F<936TTX3J5e7P~<1yhIZ6k8n}9E62~Yl1Q}bh#tFk$e27+gbnx zNCq?-9?tji{5X;R`4}A?y@!BMU}2}$%I?8NMMgA9*T;s>Cn9m~mhxwJi&qm#OTjZa zIoX$7C=I-$oscDV5-J87hPB-QgC$P)ec=_)+dIi*5WMid9C51q1`S+ZTU*;epose~ zGk0|%2uh8yslmLVqSLFzwiVoSUcSJK&*sl|Hn*m#{|C`&w)#^**_b$Ura@Y8fvhUU zE2jFtAq0d#SWb@8N+B!-&A*(F-_6$r02 zaYNUn1a7W6Ci67Zw3K$FF{`3Df%4hLkZ}lt(0m_&Wh{T!ws*Fgsu@9fw8g|m0Zx{1 zy@ivt)wDb}U9!lbCPq`cYxT5EbJKVwBqb#m8a|8Uuu2Qo;W?B1wWonSvg~Xj2~+;Qt7dw_*`H~de80vN;EMG0^j>+#X_RRMzziSq z&xcNk>9JC~GW8?Yo%)_0T{$_vF~aMM8@y=xrdoF3Ct2wtlV~z|359jw+yxo5cxavn zP#tHU+ZQW*(LsrbhzLF=F-|3R(UTL7+}TQMmDo;PFPeTzEf0K<$Ql4(UOe4M6#^z5 zOh`g-`o!>Ve3`cPcK?4s^|-Zs%!62ENU-@)yj7OL`w8%xkOnL9xTTjd#axe?aKDU=+K<_P#zgdb}yPU)PPLPDh>` zsyTK8jcx@N!SqH)L%VzQ`wIAVbh7DainlQRAFsCtuy*-QGT{%1h#-R1L;x3N8I95x zA0G>Fqv7fBauU0f#>dBJXJ?yPg&`p!k6l?nr01znnTE1fhjZHhpb9Y4>#9EwX8V36 zRltK-4jhcc@G}iIi#*DGe!gsPn7zL)niw0ST6;sWp`f2%WRyD@{Og4(f}_3}!>cLO zYZDh29~&EUJ8NQQ&gV}a29_PPWVPoYRpWR}IyIBYV4CyqD1?RED%S`Dj23Wq zZXPpXSM0ZXtfHi!gg|eVCI7qo62spsIT;2h>**ic4`flUQ|vSm|}x?meX z8XD`*cJ0S}TPZ28fQKy495rH}EiI7=R<{wE@v-8xjHJ9`TwF}(RJ-&|rmO#4-(z_E z@qvWu-%g*4w6b2w^widOIKMljb1XH=Byw@Wyk4VlI*Og0}o6gPd5pR~;la>C!({kR|nd%Lb;`XPdrOcTz%gXMC!I9tQ z-d?x9z3tLqVrH1rwvvItGND#baN=qE?u@XoZTq?Ai#?iCroX=I|9){}6`_D@j}Llx ze3ALA{8QxU|M#hrm#tdo)w-$l$A7fZrm97+Zh0{=Ft7pVU4R2l42h*Fnfb-3B_)}8 z>BV|k#rb(h!(#Jq8Hm(A4|l0tx9URRwKuuVxvSK6Wd+W6Yn}6?Ey_3NwET({uj=Q& zysKaxA}EG$vQDa)zqxf4b#>YRmklf@Lf$-`cp^0Zwde41Zd-U=X#>7WFTlpqlzmgUI+hbjVef{IraCb~(Fz=ef~uQOlX!Xz3_4ZOVG-oc|45Ef|8OOPaO1-@KQZXtU#J$AxthcE4WP zDbZ&y_bEj+YWc6nDhi^rm8?^KaJ-(PG_SijO?#){>vONtYZ|>CF07gT>RIub=W89G z7yswEJw<#)lIn+61EKv1RXXuE%-+5h{o+(^zb=1srF#FdSr=Y~Gfuo-mh&uP`TVuN zj(HuplaOn&{k;8-aF#fskh*nW%1vTjo*zDaV&3TrncicIFJ7%yDC}voyYiQ({iCZ$ ze9Y0u^Hx>8zwz?_rTuexjgOc!NW9aFzcA_CmN_ax-L2AWQ#Xn6ugqx+|GYcDYjO8O z!!633`xF{C>n+sqYW*Cg$hGR=6-|NrJ_lYNS;%x!b79oK-&{vdK9o8BF_R(o|5}MX zJpUL_$2sjTKAo%!OmXHwEC|G9nW^O{32*hYAO@zTd;Uy1GU?188&&PrtPLCyTXc-K z-Z8gV71dZ3GGWHNRV>q1Jze#b3C--;kF3gO0nPMaWMB{j(!Q=Cj=G+HZu-gjc_oRN zd8tKu6}dUJ7kv4e3m`&b#Em%!jjBZxvfWCmR``s^x1D+9xmMl;|^HOO + +example (1) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting5a/example-2.svg b/share/extensions/courtesy_accidentals/assets/examples/setting5a/example-2.svg new file mode 100644 index 0000000000000..b5d6c06c70bbe --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting5a/example-2.svg @@ -0,0 +1,83 @@ + + +example (2) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting5a/example-3.svg b/share/extensions/courtesy_accidentals/assets/examples/setting5a/example-3.svg new file mode 100644 index 0000000000000..dc02cb95378ca --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting5a/example-3.svg @@ -0,0 +1,85 @@ + + +example (3) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting5a/example-4.svg b/share/extensions/courtesy_accidentals/assets/examples/setting5a/example-4.svg new file mode 100644 index 0000000000000..c53cfb45680e0 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting5a/example-4.svg @@ -0,0 +1,85 @@ + + +example (4) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting5a/example.mscz b/share/extensions/courtesy_accidentals/assets/examples/setting5a/example.mscz new file mode 100644 index 0000000000000000000000000000000000000000..84d416d87934748d7144b54153e85f79e4f433db GIT binary patch literal 20193 zcmY(pV{k6t6D=IuPEKq)C$??piEZb^wr%Ugw(aD^wr%U?|GV$|;Z}96Sv7l4*RHPF zYj*dvf;1=?8W0c^6p*_3qMB9!Fyt#G5Kt;IFc2aT5Rj9Roui4Kle4?E3B8SzQ!zl> zX`Lg(J6A7W%0~85&4#;Oy8842dBC^>$^Oxj;k_yUoja~qd|Ft7f zVovHH7bX%Zzh5iz$8Asdbu&Zv(PACtGk+IuZnSRq=yS_q$;$Tk!yUo0osUM>M@?kU zM=LkpeZ_kHc%ZB6Z~U&#mx)MBe%-~`^^K3k5AV^ddtZ#qx7~u>()q=`5p`gggcf&) zZw0-m8PokkXG1mw*n(Kqx|)W}Dku4wl)~A&jRcT;mYyjF3^S+Wo4923cOyWy>udKH@A@IZ)m4nUjZ$c9ld)cR z()v*?k3+E5ZS{&CFaEjL@oloA)yi1IH3-44CLw@a^H7)cal5ly8s1 z*46}i&kwG8p7--Z1!Z>$T2jk~lO#X^8eF)NGjn~o(4iF;N!U$FtZcrAvUNvAkNF`; zIOc)ZNvHo*xxpP6vO_zm$#CSjGmXT`H7MvpO4c+#KhE^BI9hk2|Gb%^oZx+ zvU(vE*HE<9+Ld3dcU_Lyv_2#7E7O*cA3P&iS1t^n0CBDhS*2u*0Q z!M`T<5aUq@|M4^gEd*guDD5G^LKvMsfkY^Pzwkuw&SSUWtf%@$Zn;;(bd30~q7K9N zKeyeN!qp7EUcv5%pYv=pn3J~@R*k3u>==ysGM7_!nQA0Q(5>|^_Nr-Cz%5g=Pvx&m zz4aDApew~TjI+q*a8OTG>(B14)(EzNMvKih*v7%^nunkj$gjC6n@Oc5ZnZ}^z^ z@bOc}C1!P+;z}fRou>(;lydzggo7ZB1JS8p{qZY=|@UhU@`R@EedX%RZu#7VrO%a^rZ zOqaEDq}(z(_61Ao-pXEd8GNnSUyRHCUn&6=Bb!6BqL#4CT?WaAi18-`T6d*!A7f;> zYbbc6xf0N&3Or6ZOC|iq{k}l6xk?L%H_aA`4NS!*PG#Wc$$EDqMh-KL(JJ{@zprc~ z-kgi15HvLb7mn#ChHv{c(JY^fHqBFdUhk)eFNcwk_t!Lfo7VK1o!`8^*7D4768gkC zAcBp&w0&KND`%tdmSx2|11(2RF+pbe|m(Ct#8p)W?Y$LdN(Z*u(M}-L|OlxW$P}f9s!n63> zYtFY<;eXp-mh2DFj)Dg&eVZxrdrg)f74RI4h_R$VCW2&2tTw`&Q0ed{Z4Z-|rrFaC z-lEuq9 zQY^oaLpNjzPbrSdUjV7gcHa*$~2uSsJSEzvC=WSJr{Btt|;S|B2v> zCG>~T<4#4*S*-KjZnz}IVVprnG8zlG)I7ILHQXJ4&|9_3mw1FFGTnD5&lj0X$txpY zt6s&Cru+*nxwAE6HcI-PVfD6zKpozRDz^TWa~yhp$7iRE&S{!e;nGk-We|!Marp$O zqp{SkMK+*A)KtWa;LX%m!b&YENed90WTFaphw>{bLC%)2B{%W;^h*~$#F_`Bysz!r zv@J3wzEf-tN?U9m5_00x7?3@Y)S)Ps$_?uSm!m=y)=+6t{6o-^ZHit(% zbAQd2rK-d;gNSFVnwC=UuO?y+d#YrvG4Z)m4$;*5TuaRckE2YMdL00eacIamIzE>e0(2giHjOHyCB|8kQ=L9#M7Y}` zBc?F~6Ds+XniKBL8Ah`ucdAXql>&@1=>h{LN#b-UjWfSn0N+*JkNQ#6T{}fjr|Da` zBSf@7goef)0Vcm{heAZO{MkMx-%&kH21(_@K`EnS71|$3bEdp}QLMtLZ%*f5xelSy zaJd7#G-p{q8D(+zTS^?-Q+0cwiNX*-U6zG5sfSz~B%c{TEMC;>l40(7ZZ+#ndY*tM zYoL=+4jLea>mY+Ky;!}$-(7aG5M&c*KZ>Z`)f9x&me9&#yp1Oqnox3iMZQ`jX*VUb@+(@Riud!tBZEeG_WjGX% zV!W=>n?7>==v6s$VXRBPmbno;&cXt8d@EC#efP)(-_dCN65VrSGl??d)F_bV@QsyL zCy=$UUnJq;th9luC|u;QO0u+K@sqyK>Qx~CxA~P1inLLjr`AyAK!4}Hncnnc8IiTG_0^{Z`{=c}>rG>46&ny=u^_XF zZ&0m2dI>+?NB5vzg9*n4t!6sNb!u4!;HMerP!;KIO~^>d!YBmC#j|48y{Wve!dX&(rGYz_|HR@@bWhlR7Nm7^JfG?QGLP5rT} zQXX6NX>l`Y4=>%14p7Kj>H{%pewE;Kq3f&kpbrJ%^Au22kOf07S|R}&KE9;w$#>)3 zWFmjU)zB`$X1M_S5_;{_FfB-reNC<-W6{M@PAf@!5+@dNVix5F03PPsbm`W2su|OO zE{@P|tZRV-1LLWh#7Nh!Mcot-1rQFxcH=XxO4CHpj}ZE$3RhR~UQPumGl)dY%-|Z* zq+@%@V3>BiOwVSP;elu-k+Pn+ZUA)McUO+?e6hb7(xD< zY*yNCfx0wwY2r$GX082^tA~nRSm|J;3)W-3Mlj`6T)D=y^dy0ViE*D2JO;%MwqQ~f zK67Dje4Nj?7T$2L_*imIGrsk78@u@=D+rO#BOtL2+pf zI@0;@>ABxDH5%-l8$u}8%o3&*Ppwepor~Ag2{5~Cz}`DBj7L3P0?ib23Mw37rkZ_> zow(A^ic6W1h5h@{uiKfeP`XC~-Kwc_V1inCxRk>DM|_`@_bgN{+54IOu9KUdI6j^A z>S&H;X#*{@GdiQh^4szp4O(+|xRTZq3-)U%>AqY$(nK9&*do(!vu3xY`FKSwiy+N> z;qnAYwN=bQAneYmnfK79gG(90 z;59nZbGxR8A)0%$%`#+^MK&TI%{}GpJ(~bCcJiD8oz|P43wA)rfi~lIw}GgSr{weAWX<~CA8V~l6Elv6*jB7-)E6@c-yZLz zMmD3EoEj|3xICIamlM+J@XJ|1-tjP~^q(Ki0Lm;j8+n$+86P*qF{6%DS?)L6;c@z{ z!*%k)BV;PHCh5fB8T?CDf-Td@h*Ae88oSU(GK7sGlcz zBi0CZ+tYTje;l=`;6hPYCi))BHNKO*PDJ{46h%lEzYHo7rc&ejeIQlJ=6s-iP@G-O zeQDXA)3zbBtEO>Hb|yUSSKK82bL`6o3QnMFMWu|N8**`?Sb)9axlmhHB-6HEE^w^O z4HPmTxf&J`4Y?NT9>D7EHxAJ694|w=|&BauvspJk7)?jcHrDC ztLyvYFM<8*&vI>2;&CEa@dDysX$crl#2mq`Tnq?jAOz(BW02Th0|No^o!VBR%lfk(+w&eg0yp2Tns3waP9h%UDNbw~D z&&kRe`lnJad&5aeTL`(ys4EdA?Lw6~P3dBcsm!(^=C*HM^mkc@OoB+jgIAY4ImU$1 zwumyPYHB<=4zIUeQrY8}CG(=WuB^s{N~X92z*=q$cE_8!PDAaTJY&49y_|LS)t?8yGZhnDHwmbZk zY!(x=vfr8Pg0;bp0Zans673#QMzS=Uj@pw1C0XlhE@`k#tCPA|kjj-8sl=oU1$I6E zc|Y{?iAe_nMyc*%07^yb^Gq4ItODtc2}dP7AV(%Z^~p9nKIm_)8R}-lr#Am@`!yd~ z0De0O6b_dSVK_eWLhXD$F99?a(fK=&4z|R#c)rxdJ3ox_+!in49`;j&qU-#$m3(HF zn=g0CxSK53=950^{T;GknmNGd*-kq16AEo|p>YSYj`jtC95jTcCYc*fb730mH4mIJ zZe38SWnIf4q+l8Y)j$m=B?gzgf zoM~M0rrP1{33=^W88-WVnF7ss0>AF7ET>kPfKHBlXq9Hu%%seF+y(t_zW{k_N`MM&ZURX1+*AA?IgyUaX06b1Wt_&+=BM zd_>uw;Ch;a=wPd)m4}l1e+nxbNUgo+OY#KbXRvFk9`3rc**z66-YNt(lo}Ff<-u>5G~kF80BFbh&h3^8ChWfac;J zO{C6T8SW$KK2lxe>02vfYFH-gZwrf9dwEN{AtxG`p7?2XxBa48r=<=}a09fH?w()`-2?H;6BlMbU0Jyz45_6fGQC;p zHRMw1RAVua(<_pCk^;8Y0t6-^@85*RL2S|)ou^M#S_KL$Wnqp9 zB?0r^0@Z1v;k4uI6b+)Zt7U6-jJ=#NdZCY;1qBfvh$MSQ7*4OiHag^;+bvg3lER`x zx9?h6!y60mi*PckA_WIwvco2VNHe#R*zZNs62Jk!`>Mh}!+CnLYU554|4eD^Z{oRl zClahqe)k5#B1H(`9t$M>koygDu-C1vz|jW3J01n|c`Whyxi?3mGQn-}${ou)y|_sVmEX?=u^@r#0PkBq~^qJ{zqc z#}Rf#ikP6UcVkG1iTL`WLQ)D#0kC(9nAq=|LceIx#YI0B3)Bu2sN@GC$JS3E_}=4S zyg~GJKpPG9eyDJQ|2Rlpm(&((A@|FNKTJlNe}3lH0pl1{e9QYz!^jiqck4l;KHz0& zSsoYz=^MwL{Rc*w(6BRzRv&*O0#^S5B+AJAfS_pWsT)Op79Of6FPg1t7a_qh0v-<5 zeiM_3+)z2A>~;2X!X4ceR3_q`O<+dy)ZG;SFgq-#E=63RF{~MkZ>H?3J48WNW^7)Z zi&T^V73&X{EtU5j2)q``=4*_SkJg;IaTlP$tBSNAAOZpqjQVlA!FhQa5Qgagr0`1t zsjfM*L#`ItbDOT$9vgM0B8)o4NeczldVHE)=Ufq`F2uI$$yjnQq855RkqnvU&2HqW zCRHR^A}02Zhz}_?q>oDC^(JGwW4EUt6=i49JBHYu=7zvgB}aeS%9u>En&n zFZM`(KYu~Mw)7E)iN?#!n`vgrqzxTgqeO@hUx2bJ^2Gza9>^xiu0VQ$LAFBrz=xJ1 zG1Mzjv0ul=Av;;3gCkL-;7B%Uy(glCkxp74DlbCM6(yeHuSxRdh*Y|UOXQ47m#4T( zy^GA1H~RVMA;OHglKEMwzQxy z+n3KL7`2GU!x_Q>Gwd$HW$G2dOt!+s>aTZ<266umK3rg<#J|4|rRLA@t}_ty_MJq}=YTaRDsN`bZtuwT{iUOUyt4^WQ#lm1&LM8I8 z`J~#U26k3X%Ho4f83f5)zZPchiQ476H3fG@hWY+ILQ3;JQQ@6&|A=tY8-GJla-u%y zx;+vH6KqG=N)p{X${OoDdn%!HXTikQW**IxPI|yYB^;)})Tw7aOyOXiD5i{nVFhhb zME`GHeRO}>0T>1*z80tkb*tlYdr>)sYZC~`L)4B8Q7m&O&-82>%=H87)MeE+2Dfs{ zIWWc-OUXhZx^mL6LQp@4@J1lAxo9yUl~GTK#N~zv;5;FEaT+k9ga?C$Kgl;!QivaqY{b4F4Xv*fOxQmZ0|`5zT%chH*kEyky z93sdFwg!Wkw0VviSZM{L98^MI`MX>I3(__@@iKP3l3o=Sh;ei;)E$`iv7Q?N`VUfL zyto!{B6LTgr3TKMYiXxovjrK+V|X^7(33_fdhfs9j>@z^u{8rxIM(1R>i+yReEZIdLpOo=BFu?CJusG^zQjEJOkVi+!b#eH5Z zF_q^l);~L6OBers$p9+l0;<5je@c;IZzdhwEP7rc?uj}<|obE z7MAW)l6#&;$x901Z2%(;{(K(4OYx5+*$6qbbV%%N;)yDdinCe_Acqee+*K+8Lrl0K zDg8MU`M~85*he43Y?mdd~{>6j5j35`ZnBG4ok% ze~xyAhwng9X&Yf2RzCV@CasB^I)k%-;g<0aU9|V6_iKgnK#sdRfCl zOtF5t&8kQS3o+1INrQ0V78fQ&NED9&^+`!l39uRRCp>dkjzV)~14RzH-LZ8N+|K|N z8Z6Mv7m_j5&=)!(Q705y;@0glT2b%Zz$;Z8XL8)FDE|=a)}&&jVa+v}n-~S7F7DQ& zA}mjQ&!E&|!8z@a74kB($|Z-^%=tFIOa) zY=cv4XWzJglG?wBI3B7D3&o2VSWlC5C8)~{9ApzTRS&I252nkep}#4sasY{NxjY#Q z2O@l+2@4vZ6j{w!A}-Q%W?$RgSQCP*ji||{Mzz+Z5(jPX;H{W2A(ABtqH_9QP;0eU zbO@NgM&$w!9An)h4h$qjy`^xz0H6LPgaiCXSl?&aIQ#hpR`c8+Ul(n)*S9$@Tfv5Z znBA@U1||x6n|^S72p@N1S^=mqdfPy)^$(qhrAE5ZzIIoAL$Nje+d+wsn2^E$mUVu% zfCCviIVzYs!%xA*Z3s-rShzX?H;sf)ap;^>$c;veR7BoS4GJWlSqV_cGqP>||z zNKZ&3{R*H&Lii-Xp{t(>KM3pQKFkfVs_$j;-)?&Zin`48b@=g02%oTc`hsrQ^C_MBn%oXh{i z9}=KDl^>cExkz$H6!sxoqlHhiiwbc*(4Bd4q=rOIff%2=h! zc>lxsT?a02-K=SetZ9*~X@#t5fvjnj|L}*{XH6?PL`YhcIB*F&aQ(7(Fr$<+W0o^J z<;ecAK91}%j_iDn>|Ks*(LLvoJ!go0=aT*Z;cp%}vzf?w&hYuRuzAjidCsu;w*T;l zaK_BLQ_C??O|i-yQ_3BK(qG{Yo$3sq^5B&^{TNoM6MCr=TB#Fm>HW{56tkucvZh`B z!_bk_4|j)lLWg!Fhjsynb|8m#h5zt}^g6Ul3{jC6rw^Zk44oSG4gvBw0HYj$qJ8K5 zeP`ew+;jH-v3+Oc@OkivdGM(D;F$m6&^nbpa_~|(c+l@X{6y_1nm@rhCX|~I%*xs4;FbUX zBJdOOdtl7xpBZgY^Y_kKIp-X_p$;C^|M#Jo`Jce%6#m~^`wzIor>{30yuP|wG2+g7 zzNF%B;`V=i!3-AzylQ>H3S4-E20jZ%|9n$&?!;=EmJl@<319U8GO&8 z?thUm-thO6e3S4#@C((QEAYPXM~Kvr9Nc_E4c7#|g7rd))dq&j0!QUw4_MbrO{wjk zQgi5mlUMFUp=Z@cOlcNVROMtffy}G@*|PjMh@R6nr>rhN1;`((7`;GG>+Zi-uY;~U zfy2n@kC-&bm#iG6U2-a^%i)Y=D?!yX;!I=_RH;uFq!M(gWiJ!{G zjUpqoqrI*FTxCSaG`6MDnV8RTlxxN)&aZ%48hvp zK^|avZ%;a2Jf6P8cHwYHTCwIxVM8s8K%g=go|Zqldk4=J4D#xCU4p#a8w;;h`d1Oj z8s5#lY2pm7av3k)tgCb3{ zXSiQYc`zmeNe)w+e+7p7^iW=J-9@q$G}wh!WOVyZTNp%`r) zea6R}K9YQ#(dNJbkyO=F)L%cAxA`9rTVsZ*_@4DKE_{*F)VfywQkqDcrqL z6a-)gt5d$lQiMQga~Q~eFq-l+0VMGhd#tbyn3E+|f(1b&IJjLTC|CA6+g5U(M?feT zYkUV{_|-$jk+_4^??BL0Ix(@S2asV2HR>Setm5Yji9<_fToQC(*Gtp5N@feB-6{_sO-hHLR7tIKjopQr6q+J|NOUpK77iv zV-slNDS}s^>G3wNPI3=Ed&_VAte=S$Z%HL1)am12JnUoD^I0`xU-z0%@d$5wqwkrJ zTYr1uteGrDVKBWEw*ogWuKwl1#HamRKKd&4Q1^Ao)5%DFq|-a{c#q*5QQ`mTk~Cw# zc@hE#0?LpF0)qSLk~H~aU}OJZhosS;OC5l6g#?oKv${g3c!GI>8c~Z5prW#?q>|0; z**yq49mRCTAk5VF^AfmU9YujDUgI8Y-WzM$`PrFWg4MV4EvLDchcrs}EO5WO+Q5<} zRN-0ao2~0I`<%a$WIk5t!<;3?>EiS@uSQ!u!xSQ`4fpk%6bBY<#C!g)1Z;25Z2;+L zWS{wOduHpBxSbc*JGg1z0-ap zj8JGl@U(H7eIw$#I)OP{w4=5KIgjA)L`S76xf0N9kQR;O9011xC9b$Aqw zmXOa~$r}DEc>1%NJAKE@py-BoYkzP1b<(@s49S{*%EUYyPzaZ-^e#}#K0Ww&e0eFmFw9Pr^lPHT+E*BJ9a>=s_#nvP6M3f}uQPvOype z5)#m1%s^blax4b-iF-$ns3t!L<3FQ<$pvWbDuRIn7FZY9GTj|YB%Ui(aE4%!za=Ss zz*;x7hISPXQ+_S6Z!Evfp}Ae|rn^|-4DG6A2(1|tm--ThG0%^J(~RQ5gU24&hNq%R z=r~B?7uq_6SZ4_n$~wgBQ*y`5t8q;;P01L`pu7>nKk38wA;13h6R0V({>Kj~@mnYN zpqzDVF+{R@JQ0nEv|&8khiB)K897vZOIA@N{vBNv%|Rb;${aiG#a>zr=qWz`(y(PlxUkU_Jz(6X#7FPvly zTCvY3S`ereHPT_TOGzl1!r!=t651$ydoEX4S3@X7Dl6Ys8c|P1k?7GQAy_sg_t;Ds z9wp&24WWGTla0TPGs`-+WtW{qsGg)&9>N8+2^sq9=YEm7v=#+uwCIZLoDyRvT{ZqL zwm1-Fsz?m6cAASZQ+6}jGC~vU)R@MIS~*nx3{H(5q>C`#)L$6Z@tZyq9HNGs;4u2M zR9>_39$p*>Z}h$8Bx8qmpujM`erYXfuah%cluhmp>F^iEa-$ZY*sI&#LpbVzf(zwz zrWLh#4S+^Pk9V%19e3c9oG$l3Ua5V~OY}2RHLIMV!~^8Fd)^gl-BEOq@nc24zNa6{ z`l^x@l6WM1HU%^Pqq9~FOHt|e39j?*PL7wejAlJ4h(}oN0<5T3rRgm&^IHvV{4KJc z|7-lnZt@y^Zbs~Lh)Q53!y>+QQCPxxzMNsYqB{TA(xLTKL^aaxa*O_gT9vLjLrfJ` zl@5U_`>*9~)#iFIptyWU?Ppqk`4CYtsw!P~lV?Y5g-X+kWyZ8xB!2=TYk4pH9=k@} zOW)vd4cEf9i=!qLR_zD%#X#nPvs%s6|);Ui{5~DDN{q~ zR*%U+_OjMa*BM6oVMj|^+Vd%Pc1JU^_m{nY(n7YXRU5`)#w};{l$~Af~tt-2yAqg>q8%`RjI`> zdNz;K>*D=fp3>6tUn+_|e-x|R1yxsj5<1QxdO|uP(&;u3NwmwjR)=iu|F#RFABN%{ zdWNNMdi$9hf1gaV*84V?;eA5AejC@y0>M6s}l$f-hmaWR;PKvD246&^{pgd{sE z)hSlkg6I38cZ^Y#_s*)5oz}!)81+^Qo zg8*jNP=TV!@2+Ylu(ANXv>n7aDF|JH78Y-KTWnodd(>SNR5b2amumN4>z)I{ldnFh z74NBRP02EBQ#-smRO9ec=RSP&p7cEyAC)~8-NP0gtq0QgXwkqXRoQ-t?065Duu)-m zgoGd-HwN)jynxE=dko-Y$A72phA7R8-j})=4a)1`*H@x`G~5?lyj|RjZIF@*wPA&e zGM!-*B`KGua-*;!*Beu_el5|YxeOi8wWvYs9YMH}#ol(7mTOs+8rB{r{F=751_sFL42evg;q3XxJ3Ea2 zZI@&AYH#!>L~s zbtcuHR=VSOG~#)Yi*H)ZKZ>o%X;>NpIZ<-V4J{*{EiT>aSD`(;O2(2|^YY@^6LNEN z{hBPAG_tZPTl#f;>Gd>JRhw#Sd+k|&f1$)eli_~e7OEIpx;D3U`^-tTF8n>?LStbr z(0*z)cHVza^{<#f1#2~C87uBgScG-{(@VlFk)bA&0Wl}Rl9=h^<9hC4ub}sF1r>Oh z-jWp@KdV9D_n3?!_H zP5RM8Ny-Dwee!~3LzwaOd96o~a-qSkqO43pM1Dn=7|w0`%>Bv4Jptwq1+B_4?bF6VEwX^F2|fSo zCi-|IR^g>1=ehFRyClH3o!Arddl|h&1dR111`p$|Aw1vo%AGE&w3w&q1KeVPf)Vp(;RFjiC0%>vmM`{1Mr^>+8Ye zxST`DRt@|q$lH;5VPXauNFC4W3x52vzV7P4^9vi>!u*uqR$KYH^TlKRn|o>rRs?0K za<*z`FD{Bu1#xq)>HD4mKdQ92;k7BOI;$K(yT2h3z*tEJ+U6{T;ktMF`kLj;WS4_P z+(N;A8-k93*&|I|-(k;z`=>PC-O9+;)`#Y> zBl%`!B@NlTK}`+-00;_V4NJ9eamX4OI@aGfgztN{47bI{$2b2DjshW?_^pHmCnlz5 zW_@>}=#Q`E=Qkr*-vj7OSD2HMZ1LTj#NNs<6Gt z%E-`~fFTvvE75{r<(ir>wI1kC>Vv4OBdWgC0}YtBBoaY?Z0#5FIZ)F}Bj#38RaF%g zE!pDGP>iRcLOwILn;GoY*Rerm%Y&5vxR35B=;-j2+CfHS+q3pK`S|b(k4}lHuC0yR z@3&NaxVuZ>xM(jScU)f`qw-=QW?TF>K0ZDgwgrk&4|b$BS^&PV@1D|AbRUrAxhMPY zJ-^Ad#=EtZL&BY3Ua7bp|rx_N0iyc6+d(AYA(wOa;u0?9igQaZb;|wXoNx-d;?GKe1=q zd_)(vR*;cATwG@(iEDPNdt}5^l0eY)e_PvE;EVj6^B!S))>=1veDy>RO-s~v!|+h} z5+>%%ONJy}LL(>(Cf@%TU77wMw}v}ZHZVFm`UJ8dHLSk8L@jgf z_GAzEci#F`0h_NN133*2;*N?@vP#l)Th?5S(6L8OU*~Z?3!fJ2n(T*JE zfd!36z;?@(5D?Je%(>}ev26u_A;N0=d$>c0v`sPm^!)IEKv8NK-G-lmgMwCblPa!Y zZw8I(aXg(pI4JTpQY>0r?1+EPC7(bCew);jo;{Bmq%daL#S1>xPRCD`A0 z!T;s47mQPj<`N!#>PUE!6|U=;D?ssbMOx6?%BrXyE5VpBMTfAu6c!$S2xg2>B^nf} zms3M@Mw1&H5_EEUO1GHCk|_RA(}^a}z*PA{x^L^*%9Y2zx9S&X3ZYsE3c4AEgjqvJ zc~bXzovP-nvoU?WEn7VSCb@#Ke7MEe+}l=GhM1n7uBnNJuFbIl^^z2iTo^h7GM<+9 zLV&LNcy5zOX*^2ZlutQ(0HFS}_oh?mDInm-vHx^9w5oe$`;J~QA6s>b(+|AMaflll zjB(wtf2m%ho4&+tVv0s$tDFOHb#^9ounIid*88kf{R0aD9ti6H=k>*FdL~p*cyDhn z=V|EC*{y?hy36+)|0Qt#0(0bcPdr#Fod`YblpzKi!pk6)So<5IZt- ztkgJ*<`kGBdCtHhAzR6R>ylDV3JWVsy%WD3MiYIX0TRZKq5=G4>=s{LqW|r(Ime4Z zK}iW``p^5*%9x< z0eC$;oV*<34eRRHAiufkV>Twf&g2OKl6J(>>gf@ijKOJ_Adgu;4kL}zn1`D~))(u^ z&*mwXSfg(YyCp{BZ>GIih$ha?&IVV~_G~N9nAZ<=MQrJ_P++8ThI@xe_zk2EQ@87?>dr^>{ph}S!tokm;+TN$X9qTkI z3k&zlb(3dbEko{IpvZo@n#N+>DaACN`);Sb_@_;%q^GSI%zM>3emiMh&XV9fa*tLu zWMPi&I6yEL$&@*~`!+W>b1duyoo>J7;?X2;|H$I>0y8UtG#=!i&CA0(32q)$bNa$#J(EUrjfol?}hdusc+FYqt$R0o9DiyhU+&-cknSaTWy z0m0Rk%Ztk2SG+-FXiy_6IiTJCN8ZozWn1v;1Otdk40J80b|eWT(6Mfsnj2*}CCCl( zk%szbUoq^SC+?NuAO@-)narJf{1GlL5-H^QK9-I+Qb-^8b9|xBT6h}IqHDMx{ zwhIaSXKtgX^=h&a##pV2xo z@I@wBI7%26zD5hJDWz;uy{u?xZ-{QUQ1{+3%``NDo-=;d)12Jz}Uv- zM{@~yF+1OL!inQYtAf=^?!v&7gdC3ug%aienRK{51~@k`U3naKBAbHu@Jp`2^c_q` z+QiHRSM$y3x52%T`mHhh#_b%@S5`Xrb$5V*#ONzAqTpj7$Ja%@-c0_Tqvm)}aBFk^ zUhZCQvRdAojz<+9-eE=1t3Fp}Am@EA_hF1Ggt?ah%)N znur)%c)o^=4I13^~h3qMttfzaKdFgghWX+9_CuQ&ibl9QDLMla8B zH5c#)tVObJ_zynZ+}^Xy&a2BUS_ZIkFcO*{9xehUXd3N1EAJXE&WEXQ>x(NF0)u;q z#34j)vbb|{^80@ON$~`$BK99Hgpb!>6=G{$Qd94%{4JWV5b?{oS72a^Eh0h?h*nV) z7$hTXOLH8?@)6#{oApm)jA4Q!h!8Z?5(})!IO!?lNBxyS`A$Ve>{WYv`%Xi4;l5Yk zc|BzFfD~5m<a7{To~NsmhPbdtn-ZrZJBlw%tYQ!AnUx;7QnHTpXGnvI9_Wm)gZqZDcN#un^5 zVg+oHXwz5n9ooZ95<~jp#rfCPGWJSo%icjTB`-q}gn02fiw4Kxza722w93<*_v|3u zPUAIv;15iUm?;@ai&at55ycmbZf!2Be;-QQ>FK3Jc`|reaJ_oW5Q0;kiZAvKd+G(d zfIkRL$eigW_`)W9b?q%d`O8>vpq<`)zy}kyS!XODJ;y@rhP~| z;N4-lZKk)&HQ-llrT}CBwpTWm9MlA@x$frdm>@H+F(jV`E%$%wIPYLMyEcsPu3mzy zAYOuCbs`~%wuorEy6C+|U91QaWp!5c9w7wFicNIU!y=+4MA;CXL?=r0&-;CUWM1=r z=b1BSo|*HzXU;R%oSA2?Yi>3R2$m_tx@XVa%IaL@DLmIymWyBUtnT6yi>{iMUiY(% zfrcrB9TR4@JV8;jwpAFU^~}ST{fDiK4r+Iex)jW2zB;rdY7&z-pN!z=z;dI<4#j)Y z$xckX=z}k-c9EmFATO>^qVoBVAy4|^P8&lyd3d=2bxcm&V$nkag+z*?Q1;AXZ$^&$ zfFBX?DNAo)pqG$zhF)DW&ge`M&{f*7*_}f{wUxbT>`AJS@)o_ev3>xt**LVwGg`FaX2xd*d{=I z6Q^LQueY_g&J-UvC~f|#8n*loGD69Tv}W^{zI$811b;IRw4Q; zR^oS{_}g&;;ZvIOLh;pO9euG;_)t};+|U3`XNI1e&dCgyG5eYFwWq&7T$9G^v(k(fy)$x42|{T#MFXijVU970k+gR;j^{78!nYbqPhv>2W2!#95Q z74wdK9upJ(T#sE&!g*F^E31F%gALUhspzxZ zvB|Al6N3XAuEEfr2s;lK&vVLX3VkD+SSzDR%H4up@(|W*H;~is!+OTQP4jZzELBIB zyE`9_w-%U#P4?*kX~60IBk8y}IEjS@9TuOV1c=azS(wU?Z8zpGu255h!8&F~KiysO zl~Bx6eXoyvRPrunI25qdOlx#|@I@yxnS!XdapI&Id(W_;RD`X~f@mh^TWZ&5F6WfA ztr7yVGBPaGjrA^U;Fe(Tg081ru4?7mwD!cf@_f`AUn{~d7iQrR8hiqa1}HgPGzF#( z8$Lg<`dZfCJ!h2XGO6XV-V87u*$7g|$Y>qC`6@i1*F^SdZD_sp4UqeER_T03Qqon1 za@-r%+>P)&^R1m7ko}Ez+pt0H5h|>i*>d?H`mx`|Us{=~ODZ2sP+$c!FJ3Q|{4TCy z)qpxqAov>WV%t0N6^_%6@$u*YV4108-ff zSGCUi<2TaFjR%{~=jJ!`I0ghQJYR;uxwyE1bz#4jRL!FlI2*9LF?mGOpzWOr%8-=E zNYX?F{DXuoKmRb#^V+~0JSi-?GYpjN2T&P6(Ujyh+_U(M;PqmA-32J1&7O5RG>(kY^=*lLs$?7l6(wzl%+G+pjYFJq<& z+hP@T$7zYi_PvfVie6vlrw+X=E6uov4N{ zf1ui{$c04@C$dwe*U%txHxgD&ron-}A0@PN<^YNx@=FEbs90QK6p-Qgx#r%!>?(bLcr z(_MOcu=oD<2;&{x8A)iMUi;k=y*DnoK&#jQQ~>HxBSn>WM4r-958U474cD*D&)bFQ z=4&#py!+B`+Xjo?R5=;Pql=S@6WCeV;yvcZG6w64T}O6QITaj-lb74EzzwJ~m`z9j(1>@ji;B}pKD=^BkW8Qq{UG`FQQ&vzY(pL+QN#XQgRs!- zg~vR<=;>!Yu>R}oXx}+9Owb%Z2Wwnws#@zI9#d2PYG&z^?L9EtNzv5xOax;}L5Lyz<0X*5R1*3nVrbhaa@!u}d>^oFdT4-!cVj_;mF z4tWdk4Lnh}=RKtRHqXjXZrx6cqp$+!0=O$PkySUJ0%jV-L5awYB!Z13Qe;~aGzlaH zCR{HluA7s&1G+$4Y^I8eiaLI^;_#3Rqn<;&WzOyQmOM^pA|bhZ>%B~YZ_WMPCm0zS zKdFz66;9a9s8!$Q@cj8(XOf5KW|B2G{qnPiO6f2W!oyzD&KXbbM|NyKS9ppss_dy7 zYf=xH1L4|E_O=a@0k0(*zo}d+Ji_YDI_{&W!&*f5LP=)5l%4DLCjR;25;rg;AiU)uvY7!iz{nbnl*g|85vl z8|60)yEo8OD&ZJ+I@ePCfJIDRI{ToWShg&wErTC6xgin}3Ln;`omOY9akN;dzQL(-4GHmu){G<~C=>lzPe)?X<1bFh-S-B8tK~(}1N6P0o zcwcZEq#H)RpntPo>Fe6bwPfzuxqUaQhkbsau@8`n?Z#p)uHZf_R z+HWmp0k=*eMHqW}*I4QPax-nOLG_-GE2C6-re;XF1Kl(38}w>5@g1qDCe=sb$0zps zTgMosJo|#z1*!O>pvtO_)NkSVAH@9v(07el1NneSt*^2ea($YmbJq|B9VJDmcE#`c z`P$Z2m|JIbZi{7YW(;jt=^zDxfB0M?`Ef56JYk|u~%KkX)knZT3 zdzd?xr@=)xPbDH}A<|USt(U!|WF zp-CDWaj`m9!&yUv=QFYdp#C(IQ)=@c6?HnrGEvH8u(8FW1*wN%Wy~hJwM26-1b^jD z$Fu&5LRsB7T@e}HstPGY`aYFm+weOs1zgq?vgkhJ8v|H#XnZ0=V$RN(bpF_3TTVWw zu@)cymY$cK;NIqxqqph)w6s8^pedHJxO8GaeNVWF!S|WaxqHI?&!GDsC@GwQC+X8u z$yI5FRL4b8Wp7+|EO4qyYLXK4AjrwN2I}+4|1t zAzWhPYH7^%cqrSBJ;W4qG|$b!@Pbpu{x|t*DrYVl=_vUA>gvFX(=(LDZ2q$sD@(|} z<#NSk@XRHhPJ$X0|XxYas9$ZA|-eU)KX=?N5vsPgAc=*k{iF#;xy`MNC`WAe(6 zx-{A*t=+}z2BGyv#Fk)#Al&W~aSP?;j^2;Cy?(6EyIz0(`jo>fE>eEvlsanr!8I%M z&iPzyz~=bR^DnJ0uZZC#0oOM~tcH>Ys&lyY&=D-8X_bt$rEZZ%zZwy-uhFx&tGOsz zI8aq0`Ft7?zf5mZVn2-V(@n$Me&X{%J^cBmXUCNIo>|uJZD)YRdHMAw>NCJU?O6HG ziz&hvij%yUS1+cov%`~r2(N5O4*)7^I!VSS_npW>1S4GDksDVFiPcO>LLm%%ScAmO zTr6=qb`iS>x>WncoV0KDMNKsz0Kj;$YCbSf6js+#xn+m&@Ue0BaPSuKb9W0I(xeF$ zr6ZYf0n{`$k>_LDx^!;i9*v`e7|~es1-{?Z8&xR${`EFXfk%J1>TzwH%yj^^<3KBdIhQ)VWuj( zGTi;xm9ci7Rpil2rAzzE_4jhAwc2I)a>nR?C;+g4;^F^i;^;DY*)jh^CX4)k|NL^5%U8^wDj4;D uyKpY^mxc0&zX|^r*<8jiYvB(bc!B@BGIU@hq<`-ty?8<{Gz8Q9`|UrVyrUNY literal 0 HcmV?d00001 diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting5b/example-1.svg b/share/extensions/courtesy_accidentals/assets/examples/setting5b/example-1.svg new file mode 100644 index 0000000000000..5273ed04e4526 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting5b/example-1.svg @@ -0,0 +1,54 @@ + + +example (1) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting5b/example-2.svg b/share/extensions/courtesy_accidentals/assets/examples/setting5b/example-2.svg new file mode 100644 index 0000000000000..61d81cc24ffa5 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting5b/example-2.svg @@ -0,0 +1,56 @@ + + +example (2) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting5b/example-3.svg b/share/extensions/courtesy_accidentals/assets/examples/setting5b/example-3.svg new file mode 100644 index 0000000000000..5fe81cba08828 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting5b/example-3.svg @@ -0,0 +1,60 @@ + + +example (3) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting5b/example-4.svg b/share/extensions/courtesy_accidentals/assets/examples/setting5b/example-4.svg new file mode 100644 index 0000000000000..abbbcc864427a --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting5b/example-4.svg @@ -0,0 +1,60 @@ + + +example (4) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting5b/example.mscz b/share/extensions/courtesy_accidentals/assets/examples/setting5b/example.mscz new file mode 100644 index 0000000000000000000000000000000000000000..313c450249a03cab9413c705ce308a61aceb401e GIT binary patch literal 18397 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 J4Y|94cmUGZH8cPK literal 0 HcmV?d00001 diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting6/example-1.svg b/share/extensions/courtesy_accidentals/assets/examples/setting6/example-1.svg new file mode 100644 index 0000000000000..f47fafe614d6b --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting6/example-1.svg @@ -0,0 +1,68 @@ + + +example (1) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting6/example-2.svg b/share/extensions/courtesy_accidentals/assets/examples/setting6/example-2.svg new file mode 100644 index 0000000000000..3e984ce5c01c8 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting6/example-2.svg @@ -0,0 +1,69 @@ + + +example (2) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting6/example-3.svg b/share/extensions/courtesy_accidentals/assets/examples/setting6/example-3.svg new file mode 100644 index 0000000000000..f94497fbd2515 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting6/example-3.svg @@ -0,0 +1,71 @@ + + +example (3) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting6/example-4.svg b/share/extensions/courtesy_accidentals/assets/examples/setting6/example-4.svg new file mode 100644 index 0000000000000..2facd8a086eb8 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting6/example-4.svg @@ -0,0 +1,71 @@ + + +example (4) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting6/example.mscz b/share/extensions/courtesy_accidentals/assets/examples/setting6/example.mscz new file mode 100644 index 0000000000000000000000000000000000000000..8d4045acd5468f1ebdb151c77e2419fa9bf88454 GIT binary patch literal 18888 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 + +example (2) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-001.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-001.svg new file mode 100644 index 0000000000000..89a26469c91a7 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-001.svg @@ -0,0 +1,62 @@ + + +example (3) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-002.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-002.svg new file mode 100644 index 0000000000000..a3d0112e8a5a3 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-002.svg @@ -0,0 +1,63 @@ + + +example (4) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-010.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-010.svg new file mode 100644 index 0000000000000..403c69dd26ff0 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-010.svg @@ -0,0 +1,67 @@ + + +example (5) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-011.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-011.svg new file mode 100644 index 0000000000000..002b588577167 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-011.svg @@ -0,0 +1,70 @@ + + +example (6) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-012.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-012.svg new file mode 100644 index 0000000000000..68c7bb5f524a2 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-012.svg @@ -0,0 +1,73 @@ + + +example (7) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-020.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-020.svg new file mode 100644 index 0000000000000..0d9d7a55a53d7 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-020.svg @@ -0,0 +1,67 @@ + + +example (8) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-021.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-021.svg new file mode 100644 index 0000000000000..2697f91a3af1b --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-021.svg @@ -0,0 +1,70 @@ + + +example (9) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-022.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-022.svg new file mode 100644 index 0000000000000..b402016570af5 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-022.svg @@ -0,0 +1,73 @@ + + +example (10) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-100.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-100.svg new file mode 100644 index 0000000000000..9c37adc8b04a3 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-100.svg @@ -0,0 +1,62 @@ + + +example (11) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-101.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-101.svg new file mode 100644 index 0000000000000..d38982e1bcf70 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-101.svg @@ -0,0 +1,63 @@ + + +example (12) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-102.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-102.svg new file mode 100644 index 0000000000000..826bfdbd059a6 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-102.svg @@ -0,0 +1,64 @@ + + +example (13) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-110.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-110.svg new file mode 100644 index 0000000000000..c806401aa7889 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-110.svg @@ -0,0 +1,70 @@ + + +example (14) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-111.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-111.svg new file mode 100644 index 0000000000000..2d5765b883074 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-111.svg @@ -0,0 +1,73 @@ + + +example (15) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-112.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-112.svg new file mode 100644 index 0000000000000..763bab9ebc974 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-112.svg @@ -0,0 +1,76 @@ + + +example (16) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-120.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-120.svg new file mode 100644 index 0000000000000..f1dbb4c520072 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-120.svg @@ -0,0 +1,70 @@ + + +example (17) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-121.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-121.svg new file mode 100644 index 0000000000000..f7f1019c2d630 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-121.svg @@ -0,0 +1,73 @@ + + +example (18) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-122.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-122.svg new file mode 100644 index 0000000000000..01db242d39507 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-122.svg @@ -0,0 +1,76 @@ + + +example (19) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example-false.svg b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-false.svg new file mode 100644 index 0000000000000..8ca8286bfc846 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting7/example-false.svg @@ -0,0 +1,58 @@ + + +example (1) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting7/example.mscz b/share/extensions/courtesy_accidentals/assets/examples/setting7/example.mscz new file mode 100644 index 0000000000000000000000000000000000000000..570a6917250e868f719cfdb4c0b2666cd4067c70 GIT binary patch literal 18981 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 literal 0 HcmV?d00001 diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting8/example-00.svg b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-00.svg new file mode 100644 index 0000000000000..25f843b9a350d --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-00.svg @@ -0,0 +1,36 @@ + + +example (2) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting8/example-01.svg b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-01.svg new file mode 100644 index 0000000000000..0fa4a805cfb0f --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-01.svg @@ -0,0 +1,37 @@ + + +example (3) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting8/example-02.svg b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-02.svg new file mode 100644 index 0000000000000..deb47f5eb808b --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-02.svg @@ -0,0 +1,38 @@ + + +example (4) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting8/example-10.svg b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-10.svg new file mode 100644 index 0000000000000..055176488a6de --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-10.svg @@ -0,0 +1,40 @@ + + +example (5) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting8/example-11.svg b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-11.svg new file mode 100644 index 0000000000000..1e24fdbcc72f2 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-11.svg @@ -0,0 +1,43 @@ + + +example (6) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting8/example-12.svg b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-12.svg new file mode 100644 index 0000000000000..db4d3d7492a36 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-12.svg @@ -0,0 +1,46 @@ + + +example (7) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting8/example-20.svg b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-20.svg new file mode 100644 index 0000000000000..a2b2744f16b3f --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-20.svg @@ -0,0 +1,40 @@ + + +example (8) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting8/example-21.svg b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-21.svg new file mode 100644 index 0000000000000..a1ede50707a40 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-21.svg @@ -0,0 +1,43 @@ + + +example (9) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting8/example-22.svg b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-22.svg new file mode 100644 index 0000000000000..ad44c2891f427 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-22.svg @@ -0,0 +1,46 @@ + + +example (10) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting8/example-false.svg b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-false.svg new file mode 100644 index 0000000000000..c9c0a4fde91ad --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting8/example-false.svg @@ -0,0 +1,34 @@ + + +example (1) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting8/example.mscz b/share/extensions/courtesy_accidentals/assets/examples/setting8/example.mscz new file mode 100644 index 0000000000000000000000000000000000000000..1e47460c9789b01ef4b776233f193953718ed000 GIT binary patch literal 18353 zcmY(qV{~NS6Q~_eY}+dau1U z>TI>5EI0%@2naMZ2(jXd`UeEbH3kg`NIeQD2oeYgh_kW1lc~P5i>Hk#qph=ZiLQ0> z7QpSJw{P%RrX;CSPRG6?ITNUr_s_%XvSDiHZ|+M<5rrFM%?-OasECi1wx+5 zSnf{`D`!R>+Ora9l2!x#uZkGqJa651gs16M8_S8I3=w`WSwy=hZ4X`5opgxusE7Zo zw#`J>gU&wOrr61{nCy;dc2dTG=tFW2=GzNmx_#Rm?RRd)h{%YEi=?;n?!Glp4e`Pq#<8uGm;7Z5K4s-X&=YFODe?!MJo zL2Mg=9y&pf;df@0>M9}VhQL~6 zi3QXnn7KeH94E71?pijPxhk+wW$3vvIV$5mG{%OG`&YkMJto3Sd3qS#bkCXSbpztM zz00F!&W9Mcjwk^$4C%;ZX=Um8Q*|#**Mj`^o0sAFd0)()pCZbuFSYNO)G7lW8W|_F zVy5ZE{h`Axq`N#Mw1%jIiW-cR&P74*Z6k%=)XzRBG0Oh4z^B;kwwL`{Puv(rGlG1) z6!Nz#3OdSvP{c4LEy%bYIHQl9)fVSa5vclEuRE%%DxYtjUmcc|{Q6oZEIZp+*-YW@ zF04p=+Uf)SS7N<%z_;nno=pyjSCIlsPL+bd_VNl!(Uxhs%rf<{OAyKLvRCrcRu%>P{u)Q6$RNg zdizduUM|5OPzM?(uibr~zGo1%R>MS~B%o~(sdSL{u-kj6T}}ScGQ|t$eY-Y)vwvK= zoA6=GiVC|PG+ZLj(V#Wy);+1P%4_68l1!wEC-r)2CeoEF4s(ZSpK*nf{^Cf zUNf5+ocQ};XI{Cf(KP`l31#z3uE5wUX7DlHIR;8kz7RMw<0UEM~|K2{Vt~aDeYcu)6xXw zdG9*^&z>gm@rNoReS@yW&yB}vEV+MFf9ue|uNe%2Q8%*fz17J|VcL_P9n>_pKwEp1 zbgX)L>up~9K^sR3N5lb0DSQupkS$hO@zr(?Dz5&FfB(K`sGStrLA5t6 zSae$1c?6MnZ=;VTclhJq98Oj`JMAp5>TXCf5J_{CDe^h*R*U;fjroHt<|i#5J1pH-Z4@i3bU~a%=--B` zIF6Oi$SYZRV?E_Zzxou(A#!W$UO1n-uzdUr9mVjeSaI|;@;Ab z-~GxGT(^dIMqNji5yJMNDTZ)ir!5rfcGOBUfq7$v@(J+rT1#^16thgeHme#eSf8yR zj>gRV`7`;aT)T2sMQ}DPoty31LV1L?D9mJZ1CNOT3z!;8Hd@xiVdsQYa`@g9kAKh9 zl?^!jzgokYr_TlxyyYu*>prF`9>Jg46|}~bg2BOV5ca2j*_taaTm=RT(C+0Kjvt}}FR_XDb~zMuWjK=Q zz*2t-7MgWp!Xl<#dzn)PO{y4LPYBl*i*pe<~eo*rd>ZS;8YO77gG!a*Xh7MC3BkVd(?7FNg}^og=u&YaH~hiIn#7| z`p#)Rs!-|~foFWsc3P^ku$)&)Vplm2-|;&oFcOGLu5BvblL~U zTs+sYZXBvfYwOBPR&7YOCbe5v+emM@?uY~wRmWV^A5Hvq+T=k1N6Rcaz^G7KX<8Jd zJxju4a7S*jvx2Y-*v~TRtww0ow?nK5Gkx|c&Gk=p)2$^TCpER6^zB76vO<=MtpQ{u zZUEnAvYKGMq6$VM@tj^?ucs72=TZK%CoEcaa`sM?N*ANF!ln}gr#VEf*-CTi1HB50 zqvPp_76Tzmi(2zReIM)FI0rr>^AYAY90zOEP|`FHe}w7Sl-%X*e1fx||yvq)d4; zvl)XDRzmm|YJr?Cwf*FG8@u>2;A)ggaWEyD6Bc$scn_(Ux+AP*VZVY+Mid?* zia4dz`Y1xRJr3>C-j^XO&_uU!8GW>(f|J-mEXw#+v-0tHf8X_ZmGUQ1h^XJ@pIEjV zP^f+#;m011`HJF-9Z^Vlz5B}ZEc?3a=&en?_0+8;3MHYowemAWQ>>{d4Z}F?)VGV9 zH_v>HBJR;JH`W@<_Fm4m_MJaNi;s|3Knyl(gJ#h+cAwJUJ2fu6&DY4O04JWWEIP_pYpqYy6}H&ZM=S4FFDyg`4a~ zKl;VB#P8>%zPaDd-_Osb^r^mYqV8SU7uPDJ^aZ&W*M`V)1vGuw`z9a9E)-3=gNcK5 zv);$SahoL|yrMtfb?F*MM*Y@UndnI zx!MVx=M+Mm zWvW3_()l@QB@u<}F8oJw8$bO`8w{1BhzLI!{gaQh%n&qmhKaqf?(r&^O?Lse*9xab^~>9Y}o4oso;Swy4jFz$va!J zeo#S~0Dx`_w}aqW$%^jg$(#Z6n}F@s@0cBhOgoJ^Ni5kcfx1uK!N6|Vj)mnXHN&*| zE^kT_!4-oQCnJ%7EV(iYh_mssx7%#b3i@tta%3@Ye}^p{jP+SpNSiJWoq@W|HU(~M zzBX@#O>~_({Fnr3Ao^|^RH#2&*Gr#SS5-Zh6m~$lZ<8ZE`9-LtnPUDeZc>Q3TnJnmoS&c^Gn%XBXSWu@%=BDcsWgrl+;IO5HwYlBqWe-y9(+ zd(+TTgE~W%=qCKp5Ackl%g_6;zRg(Dnu-q;)#DAD@V{<`Zio<-XEoU<#$!H9IZEX{ zy`?{#PIr-YGC<%3BR}lJ2dmpc`*LTl^rsQGsyDL+IhfGGePdCdlJxH;?@L02it;{R zySEHs8be}IySCo1YN^#`n@Nh*j>BhqWF!mX@^b%{DrjP5Yiu->H|hTK_fs*MJ__Nz zBYdtZ{aWDDn4Fw#*i0d2BtOxGOGaUYw#aUw6lgk()D0gzBc831T-ma#rk30)6MXDi zgUk%M1tIy!$>&saWY@5gk9!u3-HN_`)1^xxFKTdod-&UN1rs}W1wV_q2K1Kw)VPIHp zfLV7qx4`c%v?rFn_8Ob+eZ+QOEQ(8zQ|5McEJyKkjc~RpEwNwf?*R2-xDQq@=&k4x z-)kyP)!MM8dTEoGd4F8ZhwWXAFL35um&8kA+m^8thrG~iR&J?k$9Q8dLi~PJ2MdqaZ9Q(T;qlh2Rm#yboP~~0OmdaZ#7TS1A zY#q4qazBdSj$`EiZt=bQnW6`_d_?hV*|37m?RcBv+jMj}kLa=vC+ew7ercW>11$DQ z+XXYEe({DJhPXe9r<}7NALZJ2^B`_XHNt9lq!$m(%px?63_Z$GP?vL(`tkl;+uF0U zZ=9pdD{57|>BDc;4U>@7xFv+Gb`Ld|AB{UM?6(^I<=RV;jE#DaRFqw`#caRVK-$M& z;_Z5}rt8SV(KFMC)?61fe6c&Q7v0sh6U@%b(z@^$0}T?@hAz+7_q?-#14~H1WH4;i zzqbJ|w5jykGVOKa`ijJ}@yF)+hC7>v+XLqw2M$NPl%*kTlSb%Ge&(LuQLJIYpWVJc zVWpQ$Ubd|}9Kq&Y)QrS3WNZ0cVckAFg&8kL$sh(#7>0FW7%I0%>K?yeSEB5PD?M>_Ak-ds;g4yMELyL>?3)N`Yy^hFyr;cgD>UG-Yw@&V8IeJQReY-;g##&Hxr46D$QRTpVV@cJ-^X z>g(@){nuL8YhTX3smcYE&q7i0&3La(eCEgI$bJrz+i1vvnSr@kE7gH*YXNmS!k<`M z&W#}5K%QvRmbxWXpjw4;*}~r^k@Fe_^<+J?hqL3t;Rd3LBnDk>X^rCYCRGHYv?h+} zjaN(VWL7N-*Hw#4q$>7U>Jq-7PX^1YeoGz(ae_(Sj%+l@`vOb}A2J4ts)G1BRU1hkT5sHs0c zQB#L$bh>#;gr)5yiDRZDC=lIL{*^t2?}$=E!74Z64?(Lce{|)8DVHFRvf!!$2c#$s z)o$(f5<{pP%&~S7KXil`9WL5S8RKX36mm~ayZmPznwi(BDHo#Ym_fv5?5Atv>kxBkiHJg` z(kr;OEFmkJkuyE)rOx3wIn!9dj}a~!*IF^TRG~ZHD9dpPTP{NIA^YiYiF97C8rbY9 zK;&+Qwf6MLhmfrmr*!akcloB%B|ps01N&=P!K_j-2OSb#&S@r2l?v6YAj#U>Vu^uU z=GPK+bjn6>gQC@@RLRLMTc03u1*=SnRLY+N>Drf$z}};^*Bc@8=Z^C2VNWR%A$r+I zmbI1wSn$l>KflY>M-En1`I7Bl(&D(vV&DNyh43*N9|f8^#r5u30y4#;%_u=;uEgKZ zzuik(g6j20mq!aDPK;5yJzd-C z19zkH+2L5&$_uYk1rcmxby#N<|OGW!pTG1`0 za>UHcIXGQzC_vIilq)-%zy0PRJRxozH(oBqE%g-lR_o1Mou?W{Jad=2St~nnj_f)v z0XTQvR?n25Gi>(WashELSN249YDgO3fcQ-t^F(vAZD;002oELv!b8Q4Vl9_lJmC?> z?(e&Im+4$J_-2hJ>S3mebACq9xW{_cA6WFG<-dm^ z=)V5lhc^<^fdSKalqR60n*d9EXc6!dC86s*DW#PHvr7IQw4Is^7+4i|pwh3Wc(x7Q zn9L#(H%YX|a`4U`QnT2okKDM;qQzZz0*fDc6#HQYID%O$@U|HvmY+}Ef|Tabk6I6q zeJzBzvhLei7pu~mi68Ib!`LeKmmrk{!MnQOa~zj=U?_{#+}md3L}zX8mjUw}SPeDo zlBzmKg0QTV>3n_Z+s#@5_4^YbTCD!vf;X1TOPvr;z%i8wsPu!kBB62LhZekFI>#edxjm-v}H=ytVauD&~EP zFp7Z-ZxFDe^nNc`{6zL$NyYl&rQJXf3XXd?2=d4eZwNisYF>v=pI|WM{j4kPQ^?b# z@e2c#9B8On;RwphesQdF+@qsjg}t;|vNRol&gi9PI)A)wK$Nv{4>=?l>opDu9P+|$ z!e}7zeE>V`*@rj3D#wNEx|2V>!fT6TsCDPH7j=U3F(@&}cZv>Fm;IrFn-YOJ+fQ;) zX;&iaS5oisbC1D3BrtBhlF=jCrn5I={uZh~@pB)5hbS5Tlc@{TmG!+^lWh!BwQR=zR}=niZhn32yR zM6#PT(0@B9Z|B6_#)UBX&}Fs+C4G@+jspk%BE*&i^<8i4=UM4z3T%z=U9L!1o_Yc8vi`cA? zxLjhh5P^3Jn&Yu~ae;93>udrtOtnlF2`w_o%>p{j@}#aZR^O&yIz=zHyx z4ajrqnRdl4VSXIp0hFvo1b$Zmg!pgn0NbM7lQN}zGlE7j5h`8OAlwZrQjIIS`RKy! z%vGuJ98?j>ZcF^l$&c;PntxFX`I6FA>F%(fP}VA20z=x93xySm6Pe6MA|l}e8IZ~O z4j|gZSXRkq6{ADA;{l5dXl8r|W*%@9{CqX3qsv!&lyXmClImK-f66C&{j71S` z`Y6i0bc%#mg9EZwtq3~Ci}i9r@={b~>qVm$MHWt%j_S*~`RdUb3H8_Xh-d>F?EONU z!|=3ooZ0r#8AT!jOPFnv1oPaj8632TP1Y~eWKOBS`}^7TMe=UqNd%zrrye`M8F z7%bH`5$_x>mdC6SWl>Qb7c{{BFN+Geqt!}|&*O&En5mCn7lo^cTNAQ+FNWD;6t(Au zZ|xA=8g|4#m>uF;6Ur|7#oOkKgn?IGI-Mm=FJ;V#M`noxxFg^Fv9|`uiV|_i>YHtE7@ReD12V1WX|b$cPneO? zKUPXnYKDhf^|6F}oMQ;rQw$l|cy-P|sVol#mBFOh-T9+};v{!AZt_U*-N_5`A-$=l zLMMB@($E#*jDiRagg`pTO3KY3v?#Sq2uNO|70Ck`)+0=Sc(;gBS5n|)3A{`(UDj~R z(SppW=XvF+MLU>Pb}v>Xs|>!Z%Ls%7eQK&|W_^r?rfGkXVQM;bzINzFRg1G)2PsxL z5?ioD3EEheIKAR3p_yBS>P1SEub#$n;dWK2G+sbImn<%Z%>ubFJ_X1L#UjK}ads?7 zdBGDr<(xSJxDcf7tU7eC!PqJFVCeiNf})r?2VQnU%(B&YT+{!B5(Cj=&6bW(Id$P} z%kw9Zh4ezby8$#pl_Fx@=zL)E2Ak%j8t+Y%-blDT^3eKlFzhqLe_jX-EScqdEY5PXf4DhEi;H`WRpbB#yRzr?o%Vf) zE)0T{=ZKv+u6v$Q>lJX(5u$UXm=r3uh|I!?_Vyq#kmUm&AwdK$qhR|ow<+0~?~CGJ zrKBbz?CA3aV)^UuXq?mw*%?w?NCTLeBWm!zf|^SK4)psoBEu0S&C&ss^l&qv>;_6- zr9#j@2vd^@fL+y$YDgfO3Bw9^V4Anb4*0kRq-VtO?BJa+W5294VP6r;x`iGsOT=%{ zsC+{%8ieTr3ImX|8W3R512D7-sNpqG5Gg)>RQ-GkLF->$MU0cNS|1-Enf!}bTBO5O zAj~b9&2gYk@ub5BLC(f?mcg*j{fkoOWDYe{i5B35K-7|!Lwt+Q&E-N;C+hDYKTs{S zk%tUQLke(4uziPyavjauJwY*WEX~?oM)@6RUd~^*nn4!zKqrfiKCEbpEuvXINc@v0 z%$|HCMj3xs*eGIL{W{$QSD=<=fVH~_o1u;hzp(j8ID~<$;b~dfg&>idL0nxFKx%og zLJcF!?e~>_q=&@gs4DbCmm&2!>+qlzJ{Ypv)%_$M$XN=YglIj!7X%rWW+m67mpAU}?mepF7DK^xkdP%Vzluyi0@LMk_L8KrV`BjB-& zgnaA;sV$bRfv!4;(@Uk{?#Yx|%$sGDXSI~Kpb_0wb5hO!^{S?qIyz_cM@l-D5Y;BiAhbGiuJw8 zRj|pr)6Zkw{MZBo*zACbdN-FqsYPc#NQIB(N7!Rpb z!O`W{_A`Y{W2HYZ<0EJ)qk*p!T1xIdsEXMMH`1q9l2`IE5av=FgiYl$(${Vy=P3lO zR&~{!Ai`~w<-)?4YS0Jcg6*;2gP27IA~4l??_Jipbc9Z3Xt!=dB<^3ayx#*Ej@$JR zli~(RDDr=?0zrud?uT=x!Gs|6X=l3t17uilhu#lY;j<&a$DF+CMAQH?@NXsf8v%6@ zs+80-SRqjhjOCiPBXNS)F1l!_=!^mMu!qCe&-wO~0OAG<^>X55Y|ISe*Kv%9f`>Sb zI_yV`y2rRB>SJu0=SteX#CUbsX_OiB%zIAOK$%J+4cLg=BTs5rRiH2z?|<_~KNXRb z^(O$l?C2>u3K|8~Y=^^3;XWOS_)%Gs#ZQ>C2{Kf*BZtn2Vf2yc z8LKC8@j%5a{6iYW7qMU6?P?Pr00p6xb$5K@iRT0pqaqU=zeOCPTNo*nmjZ=D8KH3B z@06Htk~4}PiC!UR3U25Ix3+E|)64l8pNt2~QLM#>OQ$1;2iW?snD!g3H4i1|uRQ-2 z!#`p%!|+CMjU-J_J{*ij09w946VP}`$aNTEilGyECFy*&Gmx7kh$o}~BnYB|c@Dqv zqC+@Hu6F{29{LHeM^0o573|d8OOtD`!H#~m;D`?Ob8p8b)`Mdis)RvscRVTg{*rVv zQzXMG2412W^C6QTh#UL? z0I4PCzaDx?(Ky`8_I7wUjK1M&n0So-?f^QBamZ=Z(xKAf1@{LMG*>cm#37u;DM#D* zpfGg1lqk+^72+cIU>3o|$kN90fngN6>|m%Vs`?-QExFM7CBRocNN|!k@}M~K2s`qC zI`Sy}kKe|CBaie54W|rC>=I1W(nP>uZUG>79FSXl=u&j(0`|=Vm!NMwbU}^$&jTiA zDKhRqPTT-;`51s@P;Aj2Ku(`#*jg0AN`KU_^qZ)R9Nrk%vIBT?M^N1*dGu zB?su512oJ5s^tKca)6FGK(haNggWx9IP!dxfUs<-Y~(y<_*`!I9Dd{+{@eH;zYX}Y zb9#)jb?OmzpgA?r930j??7)Tc&?PNyDKl;fCuS)#Y6<6CN`4^3WwSO2sC{2)9fYy=)3Jv`fsfGsUq}ZtPrn>>PFUTzTXi z^;^fzSyBJ|9*4;==rW~ zim3m6#RFtA%+W)PUz+-E1Ri2kuaZus{t#ualEmr+<5X{w#M)zI>^p){(@*h9XrJqq zM>doGAx3U|xU4GtK~0}z9G8M#CcFL+l%J9wC;r7{pOVyWI;skv@uUk|xJUP2(4+Qn zcaQ-nF~2bhTOpXejNqF_Xj`;H)2n`aVQAI|(WyI3(6*YT>NR`0tiaOi?7LP8!)bUN z%P{Hkx4MO5){$0e7`(vN>5pL67tv{Yz|b{@g<>|4R%t3|jd~sMtY$Ep#2(A6Vl$e? zE@-c6GMU9LSgm3+n8%X+)jB*1QXj57q7U28TJ;z&TE(ulid|`3eNJ?(VbNU2Jxr}> z(A&fvYN>HFakR$Q*})w;u3^#J!wrV4WzpNm6*P>reh=ZO)z$Nd;LRql9^VId1v8d= zk>-iD8apF%foXF4Eyzp7B60bq#Woh#?O9SScV9~1*F7;a)gW&|&zIdFGyBLz6QiQ}uuCbPXpcv&xhLxeY-VK^;D_V^teK0ViF&`YnK!W&N(XYe7x|e9$j{gXNBq$K z`@K2*&gR=+Kyg3h1G{>ELn8ob<@6PQjk2Ip`Nb4o6DgxZtCG(Z#q-Ltb-9;o-IA{T zy|{q~59w6k8NNi)g9chtSE0)<0vu&<=S zhaPudMu$BE@6DA^1s4RIr4&gE*Q0HptO!)GAt#YF#tYORsmLckr|oRSGlA^FX1yh7 zTyR@+nbIyVG*vQkp6V{81t1}g#E?>y1Y=Tl{CxM`4q|5%&GeDeIP&4!OvOXNt3j*0z(!#58GX5|7;?A`}urocB zy?nfG@}rjz+6k_)vNA^$Us?ne**)pX*qau|CZH$*nX|sK5;X{r6k zj14V<3T*PJ%P~U5gfSeLBLWxekoU)1zLOzf}T@3VCQ&j6@wNy+Dc1Ga2ZM)Fp zR?jGgYJ+uN?s9TpZo@6eBJ=@YUf_C?m(FxAx4Vj-Nf-6w;kbOXSdM`UD5-fl?c~e) zoMH;UxMSSgv|? hkCjx~moNous?#8Lm1X_t8`fh}%Rgt{ugiI%!z=aB9WsecRpM zxT9&i{`d3a_zP6=|2aVk&yapy1_=TZ?F<3}|9yhe)Wgu$;eV$mjXf@Nx9qk6$YIxa z=s{Nm8$f3;6AZg1&>-6&gF~A-%Sg8fsp7Pv9FP27(Oe3mlu_WS-dyTTrv8zG8M&Vo z%KGOk?(=BOWCV-=v-gu*?T*~|1py)~CO_#woS z3>nn-TrYeFe0SR_!y4$XBDOSIChxN3JPixDa7?PHbNic*ADJrLq$4Fr+>=#0vCrTA6)u?Hd5?bks%Fpk+K9Ye?)k|GJ{Zo;WyXdWQ`H|Uhg*L7Z47Lef zY6)46m((4P%zQ0Hy4I)E%rk9^W4%FVr@O^qk!xVgg@g^cU=i+FaH3rR$Y z&>mHkbb~!2VBGci%wL9*6cG5Si#Bq8dPItJSXd&tHMAiSZ&cYPu!* z^1vfKPi|&e(*>6y^eR z&f%g*pIlAp^G^YOt7x&+YV{Q|iv^Gx2DaAkb7O3|ilGg@TFSDYNa2>fq|qVU@`lkYZ zcLc}v2WMq-Zf6bLr-|)NPi&CA^#Ra+OIPjzZ+mG}9$$vX+h5;}({|c)s?KU!jXo3b z%cHvO9GPJfDP|vg7k3{t;{|h7i=T||+QMOkT%Pl!zl(T{30G}v3-8)T_wWJO>bK_e zi@Y6!&~?;hlK9G~+mLsql_>lgIIiVxE7I$8VSJ?G?)5rR@-^q?wfohdrHx=!UjyYy z97!B$;zy41Er};!$AWK+8(rwDuWoH4o5P#a8KS@W ze?;R9DFZ%1AyJ`<^k``~$S3MsvTza=5RR65_|y{=oDX}`Zjhf{?5%^vdYW2 z)5X6jQM4;qbanl^AxKPDVVvZKW>N28`*;i063LQD2lJc%N9yK@m~n{nN%Pgk$IBui zU(mmWosBdfcf8Eovzj>nWYm{opXBCzcNHqq%iQ{|Q0#-@gQ26;A@T*`M)w1T2m7ec z#!_eG+KNZA59I$1=$pv7S&V2PAcNl@?C*fCYT;^YWM^n;cjRQK$iRRU7p{n3kT8~hb$egG zpY+ydXI)!!pSb6o1)qEcqnFlJ3dqe#!igi4WmRTCf}s0pip3?M;}nnyw|`$&mX%f@ zK}hqzJdqm2ss5m9?$x%MlnAuc$sqRCez%NXE;`Yv)zrJ9mNdmFj5+<;rbdYC%j-Jr zzhrq(pzbu%>0wmg>9o5Z0|7(lQcTs6WG?X#YjDgE9~eW-ghaz~%a9X|g;R1*z&1y- zMkOM4_zS-yQsHdJ4q*GLyU%iZE< zSS3h?a!Fdmh!kP%722}`mD=x*|k&#e@Fnw+9 z&2@_#UA)Qh-=t#N9Ybbx)U_u<>0W7RIoLamK|w)_%I;ikHL66)&eJWgGxBCw15sOHr$;yzBx6kJ1eR4{CKcz8ra|DJSPHPPVq z|6SRg4pe(bMn>lBf1ebC;lRK+s9jTTzm+MhuV?1D-JYDBEG>0;ut|{Sx#dN{Dnvv? zBq1RoBqT&ZK?xa`%2A8{c{o&_zw6qDt=FRS_VR{@hjWec$>JM znTZqr>B5eyd)us(79W2f%TwiftX;h{lNJc-OGQQH@9)pmmUMP@78bU|gnZMUv%QV?{@$?ZqY)9gaTPZA+o2r>gTT)gBZxZHyt1-#baWI5QEenW?C#(0t%6#_hgI)$jA$|A&i<+gE1&N|n~Eb!iQw-^`Son|pcv21^xOZT)W$ zCzPRBSir{XidfL+`6gdW?I|RXlTI9Jd3~KatW@gEMD0-d7}$BuvR6EmyuP*8*4^#n z=XXVs8y4#)(64O4&LJQmz{|_am*b1t$l|6WC3V(q&e#9D{R86{E|Po>E;yO7p!UyS zGhpbb%hc$(%PXSJ!o4#|6AM0UQJ5PEs&O(}PAQ(E0EC!C9SNRcbG@@tk4W#O;Lt%Wo6+4?#Lx)c;JuX&z8Mk$d%7)I)cg|h=KOlAm1lqZ2%T3)o*bJP( zBAfmsSTfRdFi@J^WR|dDnvYNtoo(REAx7nBTc=TdT=@U(5ig{y8*m}GiZrp3hVb?A z@qyy!YrTvsF3yacsHD)B03(5SQeKYQ+11tKcec}~f8ECsDyl2pX^GQ`_Yot|Xf6(4 zGXuAFP_&wtVy(4~n~}$O<#d~3=DkAL$I(PA5_JGv?uJrSInDJR7?Kl^C923nn4~8q zJ(z%w?!j|9%WBnlEEeWp`~7|)w`gl+;*b!Qs1zK%*~T6dmz&%3a!WeAnN^mSn)vV9 zX;62^gvyGP<+vuWgFC|;7MFpHY)SJLmc6pQy?t<$N@s5@!GV_~efjH|A7~ zpf&U}{}YFW{jchd&hGcOr)x@mn?pZ7neoY~ru=s!4Hq=}J1dQ)()rHmB6KKQxQ_n* z{`nq(3Qg=Tna6_X6N3f(hq0rhe-$(vH$*ixv?1f6v9Z>Q#kdL@?rm*-g5|V7zQ6?q z1r-!R*h?KNWx!78ICt(;`p3xSy5AwP;bISsx5p54ALX=&*d+cva@X@=S-T`Cav8ARg# z&Q~vGqXRV+-Tq&)mvvWCwkxV?v2pQOdoy?i;bSj)dLiOf@NqFx9@7(|2~ADTl6_BC zi#Fu?mlm7M7MJ+oev3dv;7y+eQhZ z#M;%!;ag2h$;sAJQ)2b&+^)n3NQC!d`o`0flZ~wnhUlI=YtBgcSL@a>zl*N00wGr^*5F?F6J zRwthOj{57McybB~bFYF*r< zNs)OA-a^4X?SP01z{!xmHZkceNhsiqaB4C2jg$RGmIYD{2z`yp7ONA^A3RXO9ZT^4 zdh&C!oy+Vn&txyOUNqWMD=KJCZHtU>G$xkatc!t&TvE#V`b2ng;5$)!-Z#HN&$>U3 z-lL+PY@_42P^W`}gC8IT+UpX;tE5VIfmfhXsb))%uIn2#@h~FRUtpM~GOoD-WOUY+ z&Cd>*E^HlkSi!uAfm<8=~PI5=EWO~m)D@Nj+pm^l%V z(}m?{qW`*__@#46N2u#5_ohtY>}p+ATt7dtle>%@fqSf&j>7gMysPOhfo(^i9J!n{ z;Z+jJ+smuIKkB`rx;9KnsYm%x>5PV+ad&+ie&_9Bv>ov*Cw@+^RYGJ6jfRGX=eGFh z=>3qMs~*MAKE?StfgHj7A>T8W@fDwV2-kY?(RF`SCshuVgoJcRp`zmJtTe}Cl@O+^ z1akA}sV88(3#j*Vdn{EgCbDSeIlE^4=Egyd>)FG@O?E58izX^8 zShNB92czO{M;cp|s*?I6-m;>Y<~o3hmU7gyD;5!v$_1<6ev*zlg7x85kDr~DqXzsv zM3*kgU%GO-`d`A5`ZPMU&verRpMb~q+{%DWkBjFCIU-=Ylb9u6SXdz-EgHb>jo}AZ8J5u4N4Sfaey`8Qz!<0r5xX8Y|4m%xt0WviRULCKm9D|IK^0~OoVE?r z+-2iW=P)M7W)j@GUk#i7aZ+`Tq`YEMiPZ+S4~U21zT)*&$90{aS^r{Xiv0c20%hCn zJtVN4{Q2;UV!ZtA(AIfpF3OIVsRkKMS|q+=qBm8*vi*6>$I{%qt+ejtX5XOD@bfPP zo<<HTF}TUs@td91oR37$7$QRZ&(Er_ZLp$?FgYk4x=e&bN0BhU?AC0}o1M z3Rp5X^emfzOViJ_9;C(aj6%iL1`Gvm|e|>RQFTqS<^-B1q_454ha6Tc>@80h_ z#;SI4Ae)Egb^Z=6diUx6sr5FfGlMVG1xY+=c7y+Fs2_6TD-1{NpEob{+v5;ES#JPu-fiwHj7rKM3>WDFW0!6Pv`=LGui$@#@@+acQ?Huy`9%waoRW!#U4UqGTr0K6|m=m`uR z7d;Ln4FLvra%KVthe(p;t@X9KK?b9QI)zpdM|8;0z$}y6$ZufV zM#iRmY;;uUJ}N3oMcx}E=)JppGdJQNVyeX8_fQ{9H};fK%er?!A>TTY zptVUnaqVFLzIpMfHo(OF}Heu7a==T@n*uOPb8x4ooX+dZ>tnSmoCa;o=bzBDVSpQa%L6JbT7!H4IflW!G6crW+xu-a7O%NmutWpTW4~S##82eRRvR~Cr=GHQe;-Sb*$MCOU*r_h zwo48p^3(E!9>N z!n?4ws8jH&zTLkYlfaIf+1y~5>e%e;Ex}@AfFgj0r?YPVv=Icds7UX6lW;KsrD`(a zPbYH#%Jj8$TUe);B-)izSuAbv&bgnNibkC9zN*u7j|M#Kz#HW8G4GI<`xX{|M@Pq# z-$O%VLtuPYXJ^09{PMC1Ad+Pne5s1^x+^ag5o(JmG9Upq_L1~`?2`@h2)sFs9mE5u z4d`yEnE}GrXuj$_dM)~T#Ty%$)Qesc_WJwS(C;!&iC_azJ#w-fSTo4L0|u&VR%#~| zMldij5{C?uCac3hK{>Lzcm4c+1;t2O6Ry?j9)|MHl%wg|d*2O*L|A@!A!CGhqbd|V zk2L>vY1yJN80fBCmw3we=mvDAzj$a=**-uiTNb<_!33W1i`Bs~3{@@ItyLBM=-&Ym zU20wLqB+=i0$!Y*l>TnHmk(x}c5g@>j*Ekg`DZK6rH4MM1ugkA=l|PDm8`nW$C_f8 ziZ%-EV0soF=)SxC^t?;1i{=@aWv)2+$#LC5r{V)*#rYo}Z<&!3{t~yOrhDtZc}nxE-a8xydri$YR`plS@bOr&V}S!hlUve`#_P-1EKR;|e7tETm3CQJTen&%Xtn6;dJ;5VG-CPI$ilihTBFTdS7YwI{7Ox!8TN zv2py~@Ligbs*4vb=1zXIDEQcc%MFU+6}QT=+c*DQ^h8>1<}aT;vqg>sMjXjjOnQ_r z^w$3TtDQS~CX@tZpZov6pr*V&#^|Wc=QpqZ|68m z8*s)%2sp-;SelZVUz}P}l9`uYtd~`spLaAYHvg7^NbU1*m&$dkE(BhCliQrTN^MtG z;C#2%IZxW6d~;6AuUPS_e*W7FCJnxqGI{J<@4UZL+*c{b@~cH-as?}AsLKAQTMnqU z%x@}K#=`P#DaU!UzE_^nb+_f8*_iuZ^O<_(+1u&YCM*(~cqXOy+_$wyFF#>Se8jVr zZ{qbUS@FL;)+N~2Kb}5Q%f6ED&RvhkCmaKg8qa8SVfViNbm3zZ`LG&Da1720ZleSbHtDC*mNE3G!|s8w9cR^I$J?W^t{(Xtwy|GE9&Ue-Au zte4LD->}t!Ay~Sk zS*!cadzpzgJC1f-ST|w!>y@1nefDynQdFas|9Y&VAUa#gI^_q)>nTd}x{K4acM85f z_bR=n(d*&Dn%S?O6`y&&*714qf1cY@#8)J#erPoi+MiIR6Mw_(?Q795PUZIN@;6ti z_aB>e;Z-=}#Oq}_&mxx3U;FEr*MU0;xhC7s+wTZxi4zK`Tlb~hB-Z8m;nOGPovx7S zJ+}Db)oO*po;JHHe|g$Jx{Acd9DO`*Rn_|&FaKZKKbP0|h&hAAJH7Y|lg@3KqY~8J zD$O=^lNkTXoVM`KyYssicRw`TqRhEZp>ea`LJhCh&ryn8s}5e#6u9qm;N_8pOeZxL zM*aKEb>!qjnd2Wb8DjshmDt1c4=v@{U3@xO7ntJAfmjfT%Q92TQ4-$jXF&{1OZWVl zbY#+*KQ^k`tyvp5BDUxlZ@pt~uPUmsDrCZpd8=5at$MoZDHEF6vmaTN%>tU~!N|ZM z2BdvmLmYKI{oM4E^Ycm)GxJi5^eS?5YA^WmH5mx7KCoS$v1|F&x!p|G{tel|i4$g( zwUux^di&SY$H4IJS?_(@E0SlKR%~=gagR8;_m(H)jllOGqD}@^>+o+{$$eQ+?X^Hs zEJvbJpwt}py5+uNhu_p%-ZTlDWZhNp?8}D*Oq;Jra2Iy@)}WQtpJUz(LoKo=_0_Ke}K^ hHt5>X(*i=fuPd&U5#Y_r22#fcgblznB<%*`0RTP^8)g6i literal 0 HcmV?d00001 diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting9a/example-1.svg b/share/extensions/courtesy_accidentals/assets/examples/setting9a/example-1.svg new file mode 100644 index 0000000000000..53614cc35ba93 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting9a/example-1.svg @@ -0,0 +1,95 @@ + + +example (1) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting9a/example-2.svg b/share/extensions/courtesy_accidentals/assets/examples/setting9a/example-2.svg new file mode 100644 index 0000000000000..a6fbbafdd0e33 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting9a/example-2.svg @@ -0,0 +1,98 @@ + + +example (2) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting9a/example.mscz b/share/extensions/courtesy_accidentals/assets/examples/setting9a/example.mscz new file mode 100644 index 0000000000000000000000000000000000000000..b013aeb950b6d507df393c54e3a231a2285163e7 GIT binary patch literal 19995 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 K3}MdwZv6*1a3gsD literal 0 HcmV?d00001 diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting9b/example-1.svg b/share/extensions/courtesy_accidentals/assets/examples/setting9b/example-1.svg new file mode 100644 index 0000000000000..37aa50875413a --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting9b/example-1.svg @@ -0,0 +1,60 @@ + + +example (1) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting9b/example-2.svg b/share/extensions/courtesy_accidentals/assets/examples/setting9b/example-2.svg new file mode 100644 index 0000000000000..32d256ccbb9e8 --- /dev/null +++ b/share/extensions/courtesy_accidentals/assets/examples/setting9b/example-2.svg @@ -0,0 +1,62 @@ + + +example (2) +Generated by MuseScore 4.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/extensions/courtesy_accidentals/assets/examples/setting9b/example.mscz b/share/extensions/courtesy_accidentals/assets/examples/setting9b/example.mscz new file mode 100644 index 0000000000000000000000000000000000000000..cf9c36a3fabb4a9f36ed57195d5417504c051bae GIT binary patch literal 17840 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 literal 0 HcmV?d00001 diff --git a/share/extensions/courtesy_accidentals/configure.qml b/share/extensions/courtesy_accidentals/configure.qml index 5404462cd4e3a..4b133625ed03d 100644 --- a/share/extensions/courtesy_accidentals/configure.qml +++ b/share/extensions/courtesy_accidentals/configure.qml @@ -1,7 +1,7 @@ //============================================== -// courtesy accidentals v1.0 -// -// Copyright (C)2012-2019 Jörn Eichler (heuchi) +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -17,618 +17,659 @@ // along with this program. If not, see . //============================================== -import QtQuick 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 - +import QtQuick 2.9 +import QtQuick.Controls 2.2 +import QtQuick.Dialogs 1.2 +import QtQuick.Layouts 1.2 import MuseScore 3.0 -import Muse.UiComponents 1.0 +import MuseScore.UiComponents 1.0 as MU +import MuseScore.Ui 1.0 +import "assets" +import "assets/defaultsettings.js" as DSettings MuseScore { + title: qsTr("Configure Courtesy Accidentals") + description: qsTr("Choose when to add courtesy accidentals to your scores, and how they look.") + version: "4.0" + categoryCode: "composing-arranging-tools" + thumbnailName: "assets/accidentals.png" + requiresScore: false + + //onRun: mainWindow.show() + + ApplicationWindow { + id: mainWindow + minimumHeight: 400 + minimumWidth: 480 + background: Rectangle {color: ui.theme.backgroundSecondaryColor} + title: qsTr("Courtesy Accidentals: Settings") + flags: Qt.Dialog + + MU.StyledFlickable { + id: flickable + anchors.fill: parent + focus: true + contentWidth: contentItem.childrenRect.width + 2 * mainColumn.x + contentHeight: contentItem.childrenRect.height + 2 * mainColumn.y + Keys.onUpPressed: scrollBar.decrease() + Keys.onDownPressed: scrollBar.increase() + ScrollBar.vertical: MU.StyledScrollBar {id: scrollBar} + Column { + id: mainColumn + spacing: 0 + width: mainWindow.width + + MainMenuSection { + title: qsTr("General Settings") + isExpanded: true + + SubMenuSection { + id: setting0Image + title: qsTr("Double accidentals") + + MU.CheckBox { + id: setting0Box + anchors.leftMargin: style.regSpace + text: qsTr("Use natural flats/sharps when cancelling double accidentals") + onClicked: {checked = !checked; updatesetting0Img()} + signal setv(bool checked) + onSetv: function(value) {checked = value; updatesetting0Img()} + } + } - width: 344 - height: 330 - - // configuration - property bool useBracket: false - - property var typeNextMeasure: 1 - property var typeNumMeasures: 2 - property var typeEvent: 3 - property var typeDodecaphonic: 4 - - property var eventFullRest: 1 - property var eventDoubleBar: 2 - property var eventRehearsalMark: 4 - property var eventEndScore: 8 // we don't really need this, but... - - property var operationMode; - property var numMeasures; - property var eventTypes; - - Component.onCompleted: { - console.log("MuseScore Version = "+mscoreVersion); - console.log("MajorVersion = "+mscoreMajorVersion); - console.log("MinorVersion = "+mscoreMinorVersion); - console.log("UpdateVersion= "+mscoreUpdateVersion); - - // These options don't work in MuseScore v3 - optDoubleBar.checked = false; - optDoubleBar.enabled = false; - optDoubleBar.opacity = 0.5; - optFullRest.checked = false; - optFullRest.enabled = false; - optFullRest.opacity = 0.5; - optRehearsalMark.checked = false; - optRehearsalMark.enabled = false; - optRehearsalMark.opacity = 0.5; - } + SubMenuSection { + id: setting6Image + title: qsTr("Restating grace note accidentals") - // Error dialog + Column { + spacing: style.minSpace + width: parent.width - MessageDialog { - id: errorDialog - visible: false - //icon: StandardIcon.Warning - } + StyledLabel {text: qsTr("In same staff:")} - // Dialog window + AddAccItem { + id: setting6aAcc + anchors.leftMargin: style.regSpace + anchors.rightMargin: style.regSpace + width: parent.width - anchors.leftMargin - anchors.rightMargin + onClicked: updatesetting6Img() + } + } - function setUseBracketState() { - if (optDodecaphonic.checked == true) { - // disable brackets - optUseBracket.enabled = false; - optUseBracket.opacity = 0.5; - } else { - optUseBracket.enabled = true; - optUseBracket.opacity = 1.0; - } - } + Column { + spacing: style.minSpace + width: parent.width - Item { - id: rect1 - anchors.fill: parent - anchors.margins: 8 + StyledLabel {text: qsTr("In different staves of same instrument:")} - ColumnLayout { - id: col1 - anchors.left: parent.left - anchors.right: parent.right + AddAccItem { + id: setting6bAcc + anchors.leftMargin: style.regSpace + anchors.rightMargin: style.regSpace + width: parent.width - anchors.leftMargin - anchors.rightMargin + } + } + } - ButtonGroup {id: typeGroup} + SubMenuSection { + id: setting9aImage + title: qsTr("Cancelling in the same measure") - Label { - text: "Add courtesy accidentals for" - } + CancelModeItem { + id: setting9aCancel + width: parent.width - anchors.leftMargin + onClicked: updatesetting9aImg() + } + } + + SubMenuSection { + id: setting9bImage + title: qsTr("Cancelling in the next measure") - RowLayout { - Rectangle { // for indentation - width: 10 + CancelModeItem { + id: setting9bCancel + width: parent.width - anchors.leftMargin + onClicked: updatesetting9bImg() + } + bottomPadding: isExpanded ? style.regSpace : 0 + } } - ColumnLayout { + MU.SeparatorLine {width: mainWindow.width} - Rectangle {height: 2} - RadioButton { - id: optNextMeasure - text: "notes up to the next measure" - checked: true - ButtonGroup.group: typeGroup - onClicked: { setUseBracketState(); } - } + MainMenuSection { + title: qsTr("Notes in the same staff") - Rectangle {height: 2} - RowLayout { - RadioButton { - id: optNumMeasures - text: "notes up to the next" - ButtonGroup.group: typeGroup - onClicked: { setUseBracketState(); } - } + SubMenuSection { + title: qsTr("Notes in the same octave in the next measure") + id: setting4aColumn + property bool accOn: setting4aAcc.checked - SpinBox { - id: valNumMeasures - implicitWidth: 45 - from: 2 - to: 99 + AddAccItem { + id: setting4aAcc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting4aImg() } - Label { - text: "measures" + GraceNotesCheckBox { + id: setting4a3Box + enabled: setting4aColumn.accOn + onChanged: updatesetting4aImg() } } - RowLayout { - RadioButton { - Layout.alignment: Qt.AlignTop | Qt.AlignLeft - id: optEvent - text: "notes up to the" - ButtonGroup.group: typeGroup - onClicked: { setUseBracketState(); } + SubMenuSection { + title: qsTr("Notes in different octaves in the same measure") + id: setting1Column + property bool accOn: setting1Acc.checked + + AddAccItem { + id: setting1Acc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting1Img() } - ColumnLayout { - CheckBox { - id: optFullRest - text: "next full measure rest" - checked: true - } - CheckBox { - id: optDoubleBar - text: "next double bar line" - checked: true - } - CheckBox { - id: optRehearsalMark - text: "next rehearsal mark" - checked: false - } - CheckBox { - id: optEndScore - text: "end of the score" - checked: true - } + GraceNotesCheckBox { + id: setting13Box + enabled: setting1Column.accOn + onChanged: updatesetting1Img() } - } - Rectangle {height: 2} - RadioButton { - id: optDodecaphonic - text:"all notes (dodecaphonic style)" - ButtonGroup.group: typeGroup - onClicked: { setUseBracketState(); } + DurationModeItem { + id: setting1Duration + width: parent.width + enabled: setting1Column.accOn + onClicked: updatesetting1Img() + } } - } - } - Rectangle {height: 4} + SubMenuSection { + title: qsTr("Notes in different octaves in the next measure") + id: setting4bColumn + property bool accOn: setting4bAcc.checked - // Parenthesis option - CheckBox { - id: optUseBracket - text: "Put accidentals in parenthesis" - checked: false - } + AddAccItem { + id: setting4bAcc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting4bImg() + } - // preserve user settings - Settings { - category: "CourtesyAccidentalPlugin" - property alias typeNextMeasure: optNextMeasure.checked - property alias typeNumMeasures: optNumMeasures.checked - property alias valueNumMeasure: valNumMeasures.value - property alias typeEvent: optEvent.checked - property alias typeFullRest: optFullRest.checked - property alias typeDoubleBar: optDoubleBar.checked - property alias typeRehearsalM: optRehearsalMark.checked - property alias typeEndScore: optEndScore.checked - property alias valueDodecaphonic: optDodecaphonic.checked - property alias valueUseBracket: optUseBracket.checked - } - } - // The buttons - - FlatButton { - text:"Add accidentals" - anchors { - top: col1.bottom - topMargin: 15 - left: rect1.left - leftMargin: 10 - } - onClicked: { - var hasError = false; - - // set configuration - useBracket = optUseBracket.checked; - - // set type - if (optNextMeasure.checked) { - operationMode = typeNextMeasure; - } else if (optNumMeasures.checked) { - operationMode = typeNumMeasures; - numMeasures = valNumMeasures.value; - } else if (optEvent.checked) { - operationMode = typeEvent; - eventTypes = 0; - if (optFullRest.checked) { - eventTypes |= eventFullRest; - } - if (optDoubleBar.checked) { - eventTypes |= eventDoubleBar; - } - if (optRehearsalMark.checked) { - eventTypes |= eventRehearsalMark; - } - if (optEndScore.checked) { - eventTypes |= eventEndScore; - } - if (!eventTypes) { - // show error: at least one item needs to be selected - //console.log("ERROR: configuration"); - hasError = true; - errorDialog.text = "No terminating event selected"; - errorDialog.visible = true; + GraceNotesCheckBox { + id: setting4b3Box + enabled: setting4bColumn.accOn + onChanged: updatesetting4bImg() + } + + bottomPadding: isExpanded ? style.regSpace : 0 } - } else if (optDodecaphonic.checked) { - operationMode = typeDodecaphonic; } - if (!hasError) { - curScore.startCmd(); - addAcc(); - curScore.endCmd(); - } - quit(); - } - } + MU.SeparatorLine {width: mainWindow.width} - FlatButton { - text: "Cancel" - anchors { - top: col1.bottom - topMargin: 15 - right: rect1.right - rightMargin: 10 - } - onClicked: { - quit(); - } - } - } + MainMenuSection { + title: qsTr("Notes in different staves of the same instrument") - // if nothing is selected process whole score - property bool processAll: false + SubMenuSection { + title: qsTr("Notes in the same octave in the same measure") + id: setting2Column + property bool accOn: setting2Acc.checked - // function tpcName - // - // return name of note - - function tpcName(tpc) { - var tpcNames = new Array( - "Fbb", "Cbb", "Gbb", "Dbb", "Abb", "Ebb", "Bbb", - "Fb", "Cb", "Gb", "Db", "Ab", "Eb", "Bb", - "F", "C", "G", "D", "A", "E", "B", - "F#", "C#", "G#", "D#", "A#", "E#", "B#", - "F##", "C##", "G##", "D##", "A##", "E##", "B##" - ); + AddAccItem { + id: setting2Acc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting2Img() + } - return(tpcNames[tpc+1]); - } + GraceNotesCheckBox { + id: setting23Box + enabled: setting2Column.accOn + onChanged: updatesetting2Img() + } - // function getEndStaffOfPart - // - // return the first staff that does not belong to - // the part containing given start staff. + DurationModeItem { + id: setting2Duration + width: parent.width + enabled: setting2Column.accOn + onClicked: updatesetting2Img() + } + } - function getEndStaffOfPart(startStaff) { - var startTrack = startStaff * 4; - var parts = curScore.parts; + SubMenuSection { + title: qsTr("Notes in the same octave in the next measure") + id: setting5aColumn + property bool accOn: setting5aAcc.checked - for(var i = 0; i < parts.length; i++) { - var part = parts[i]; + AddAccItem { + id: setting5aAcc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting5aImg() + } - if( (part.startTrack <= startTrack) - && (part.endTrack > startTrack) ) { - return(part.endTrack/4); - } - } + GraceNotesCheckBox { + id: setting5a3Box + enabled: setting5aColumn.accOn + onChanged: updatesetting5aImg() + } - // not found! - console.log("error: part for " + startStaff + " not found!"); - quit(); - } + } - // function addAccidental - // - // add correct accidental to note - - function addAccidental(note) { - if(note.accidental == null) { - // calculate type of needed accidental - var accidental=Accidental.NONE; - if(note.tpc < 6) { - accidental = Accidental.FLAT2; - } else if(note.tpc < 13) { - accidental = Accidental.FLAT; - } else if(note.tpc < 20) { - accidental = Accidental.NATURAL; - } else if(note.tpc < 27) { - accidental = Accidental.SHARP; - } else { - accidental = Accidental.SHARP2; - } - note.accidentalType = accidental; - // put bracket on accidental if not in dodecaphonic mode - if (operationMode != typeDodecaphonic - && note.accidental) { - if(useBracket) { - note.accidental.accidentalBracket = 1; - } else { - note.accidental.accidentalBracket = 0; - } - } - } - } + SubMenuSection { + title: qsTr("Notes in different octaves in the same measure") + id: setting3Column + property bool accOn: setting3Acc.checked - // function processNote - // - // for each measure we create a table that contains - // the actual 'noteName' of each 'noteClass' - // - // a 'noteClass' is the natural name of a space - // or line of the staff and the octave: - // C5, F6, B3 are 'noteClass' - // - // a 'noteName' would be C, F#, Bb for example - // (we don't need the octave here) - // - // we also remember the measure number that note was found - // if we operate in typeNumMeasures mode. Thus: - // - // curMeasureArray[] = [,] - - function processNote(note,prevMeasureArray,curMeasureArray,curMeasureNum) { - var octave=Math.floor(note.pitch/12); - - // use tpc1 instead of tpc for octave correction - // since this will also work for transposing instruments - // correct octave for Cb and Cbb - if(note.tpc1 == 7 || note.tpc1 == 0) { - octave++; // belongs to higher octave - } - // correct octave for B# and B## - if(note.tpc1 == 26 || note.tpc1 == 33) { - octave--; // belongs to lower octave - } + AddAccItem { + id: setting3Acc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting3Img() + } - var noteName = tpcName(note.tpc); - var noteClass = noteName.charAt(0)+octave; + GraceNotesCheckBox { + id: setting33Box + enabled: setting3Column.accOn + onChanged: updatesetting3Img() + } - // remember note for next measure - curMeasureArray[noteClass]=[noteName,curMeasureNum]; + DurationModeItem { + id: setting3Duration + width: parent.width + enabled: setting3Column.accOn + onClicked: updatesetting3Img() + } + } - if (operationMode == typeDodecaphonic) { - addAccidental(note); - } else if (typeof prevMeasureArray[noteClass] !== 'undefined') { - // check if current note needs courtesy acc - if(prevMeasureArray[noteClass][0] != noteName) { - // this note needs an accidental - // if there's none present anyway - addAccidental(note); - } - // delete entry to make sure we don't create the - // same accidental again in the same measure - delete prevMeasureArray[noteClass]; - } - } + SubMenuSection { + title: qsTr("Notes in different octaves in the next measure") + id: setting5bColumn + property bool accOn: setting5bAcc.checked - // function processPart - // - // do the actual work: process all given tracks in parallel - // add courtesy accidentals where needed. - // - // We go through all tracks simultaneously, because we also want courtesy - // accidentals for notes across different staves when they are in the - // same octave and for notes of different voices in the same octave - - function processPart(cursor,endTick,startTrack,endTrack) { - if(processAll) { - // we need to reset track first, otherwise - // rewind(0) doesn't work correctly - cursor.track=0; - cursor.rewind(0); - } else { - cursor.rewind(1); - } + AddAccItem { + id: setting5bAcc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting5bImg() + } - var curMeasureNum = 0; - var segment = cursor.segment; - - var curMeasureArray = new Array(); - var prevMeasureArray = new Array(); - - // we use a segment, because the cursor always proceeds to - // the next element in the given track and we don't know - // in which track the next element is. - - while(segment && (processAll || segment.tick < endTick)) { - // we search for key signatures and bar lines - // in first voice of first staff: - var keySigTrack = startTrack - (startTrack % 4); - - // check for new measure - if(segment.elementAt(keySigTrack) - && segment.elementAt(keySigTrack).type == Element.BAR_LINE) { - // if double bar line and in nextEvent mode check - // if this leads to reset of prevMeasureArray - - curMeasureNum++; - - // depending on operationMode: update prevMeasureArray - switch (operationMode) { - case typeNextMeasure: - prevMeasureArray = curMeasureArray; - break; - - case typeNumMeasures: - // delete all entries that are too old - var toDelete = []; - for (var n in prevMeasureArray) { - if (curMeasureNum - prevMeasureArray[n][1] > numMeasures) { - toDelete.push(n); + GraceNotesCheckBox { + id: setting5b3Box + enabled: setting5bColumn.accOn + onChanged: updatesetting5bImg() } - } - // now delete, otherwise iterating (n in prevMeasureArray) will not work - for (var x = 0; x < toDelete.length; x++) - delete prevMeasureArray[toDelete[x]]; - // fall through! - case typeEvent: - // copy entries from curMeasureArray - for (var n in curMeasureArray) { - prevMeasureArray[n] = curMeasureArray[n]; - } - break; - } - // if barline is double, might need to forget - // previous mesaure... - var barLine = segment.elementAt(keySigTrack); - if ((operationMode==typeEvent) - && (eventTypes & eventDoubleBar) - && (barLine.barLineType == BarLine.DOUBLE)) { - prevMeasureArray = new Array(); + bottomPadding: isExpanded ? style.regSpace : 0 + } } - // reset curMeasureArray - curMeasureArray = new Array(); - } + MU.SeparatorLine {width: mainWindow.width} - // check for new key signature - // we only do this for the first track of the first staff - // this means we miss the event of having two different - // key signatures in different staves of the same part - // This remains for future version if needed - // we look inside this loop to make sure we don't miss - // any segments. This could be improved for speed. - // A KeySig that has generated == true was created by - // layout, and is probably at the beginning of a new line - // so we don't need it. - - if (segment.elementAt(keySigTrack) - && segment.elementAt(keySigTrack).type == Element.KEYSIG - && (!segment.elementAt(keySigTrack).generated)) { - //console.log("found KEYSIG"); - // just forget the previous measure info - // to not generate any courtesy accidentals - prevMeasureArray = new Array(); - } + MainMenuSection { + title: qsTr("Notes after key signature changes") - // BUG: access to annotations is broken in 2.0.3 - // - // check for rehearsal mark - //var annotations = segment.annotations; - - //if (annotations && annotations.length > 0) { - // for (var i = 0; i < annotations.length; i++) { - // var mark = annotations[i]; - // if (mark.type == Element.REHEARSAL_MARK) { - // if (operationMode == typeEvent - // && (eventTypes & eventRehearsalMark)) { - // // reset array - // prevMeasureArray = new Array(); - // } - // console.log("found rehearsal mark"); - // } - // } - //} - - // if we find a full measure rest, it needs to be in the whole part - var allTracksFullMeasureRest = true; - var restFound = false; - - // scann music - for(var track=startTrack; track 0) { - var graceChords = segment.elementAt(track).graceNotes; - - for(var j=0;j endStaff) { - curEndStaff = endStaff; + settingObj.setting5 = { + a: { + addAccidentals: setting5aAcc.checked, + bracketType: setting5aAcc.currentValue, + parseGraceNotes: setting5a3Box.checked + }, + b: { + addAccidentals: setting5bAcc.checked, + bracketType: setting5bAcc.currentValue, + parseGraceNotes: setting5b3Box.checked } - - // do the work - processPart(cursor,endTick,curStartStaff*4,curEndStaff*4); - - // next part - curStartStaff = curEndStaff; } + settingObj.setting6 = { + a: { + addAccidentals: setting6aAcc.checked, + bracketType: setting6aAcc.currentValue + }, + b: { + addAccidentals: setting6bAcc.checked, + bracketType: setting6bAcc.currentValue + } + } + settingObj.setting7 = { + addAccidentals: setting7Acc.checked, + bracketType: setting7Acc.currentValue, + cancelOctaves: setting7Cancel.checked, + parseGraceNotes: setting74Box.checked, + cancelMode: setting7Cancel.value == 1 + } + settingObj.setting8 = { + addAccidentals: setting8Acc.checked, + bracketType: setting8Acc.currentValue, + cancelOctaves: setting8Cancel.checked, + parseGraceNotes: setting84Box.checked, + cancelMode: setting8Cancel.value == 1 + } + settingObj.setting9 = { + a: setting9aCancel.value == 1, + b: setting9bCancel.value == 1 + } + return settingObj + } + function updatesetting0Img() { + setting0Image.source = "examples/setting0/example-" + setting0Box.checked.toString() + ".svg" + } + function updatesetting1Img() { + var imgsource = "examples/setting1/example-" + if (setting1Acc.checked) { + imgsource += setting1Acc.currentValue.toString() + imgsource += setting1Duration.value.toString() + } else { + imgsource += "false" + } + imgsource += ".svg" + setting1Column.source = imgsource + } + function updatesetting2Img() { + var imgsource = "examples/setting2/example-" + if (setting2Acc.checked) { + imgsource += setting2Acc.currentValue.toString() + imgsource += setting2Duration.value.toString() + } else { + imgsource += "false" + } + imgsource += ".svg" + setting2Column.source = imgsource + } + function updatesetting3Img() { + var imgsource = "examples/setting3/example-" + if (setting3Acc.checked) { + imgsource += setting3Acc.currentValue.toString() + imgsource += setting3Duration.value.toString() + } else { + imgsource += "false" + } + imgsource += ".svg" + setting3Column.source = imgsource + } + function updatesetting4aImg() { + var imgsource = "examples/setting4a/example-" + if (setting4aAcc.checked) { + imgsource += setting4a3Box.checked ? "1" : "0" + imgsource += setting4aAcc.currentValue.toString() + } else { + imgsource += "false" + } + imgsource += ".svg" + setting4aColumn.source = imgsource + } + function updatesetting4bImg() { + var imgsource = "examples/setting4b/example-" + if (setting4bAcc.checked) { + imgsource += setting4b3Box.checked ? "1" : "0" + imgsource += setting4bAcc.currentValue.toString() + } else { + imgsource += "false" + } + imgsource += ".svg" + setting4bColumn.source = imgsource + } + function updatesetting5aImg() { + var imgsource = "examples/setting5a/example-" + imgsource += setting5aAcc.checked ? (setting5aAcc.currentValue + 2).toString() : "1" + imgsource += ".svg" + setting5aColumn.source = imgsource + } + function updatesetting5bImg() { + var imgsource = "examples/setting5b/example-" + imgsource += setting5bAcc.checked ? (setting5bAcc.currentValue + 2).toString() : "1" + imgsource += ".svg" + setting5bColumn.source = imgsource + } + function updatesetting6Img() { + var imgsource = "examples/setting6/example-" + imgsource += setting6aAcc.checked ? (setting6aAcc.currentValue + 2).toString() : "1" + imgsource += ".svg" + setting6Image.source = imgsource + } + function updatesetting7Img() { + var imgsource = "examples/setting7/example-" + if (setting7Acc.checked) { + imgsource += setting74Box.checked ? "1" : "0" + imgsource += setting7Acc.currentValue.toString() + imgsource += setting7Cancel.checked ? setting7Cancel.value.toString() : "0" + } else { + imgsource += "false" + } + imgsource += ".svg" + setting7Column.source = imgsource + } + function updatesetting8Img() { + var imgsource = "examples/setting8/example-" + if (setting8Acc.checked) { + imgsource += setting8Acc.currentValue.toString() + imgsource += setting8Cancel.checked ? setting8Cancel.value.toString() : "0" + } else { + imgsource += "false" + } + imgsource += ".svg" + setting8Column.source = imgsource + } + function updatesetting9aImg() { + setting9aImage.source = "examples/setting9a/example-" + setting9aCancel.value.toString() + ".svg" + } + function updatesetting9bImg() { + setting9bImage.source = "examples/setting9b/example-" + setting9bCancel.value.toString() + ".svg" + } + Settings { + id: options + category: "Courtesy Accidentals Plugin" + property var uSettings: '{ + "version": "4.0-beta", + "edited": false + }' + //Qt.labs.settings doesn't like working with object types + } + function smartQuit() { + mainWindow.close() + quit() } } diff --git a/share/extensions/courtesy_accidentals/remove.js b/share/extensions/courtesy_accidentals/remove.js deleted file mode 100644 index b71d99827f3ca..0000000000000 --- a/share/extensions/courtesy_accidentals/remove.js +++ /dev/null @@ -1,289 +0,0 @@ -//============================================== -// remove courtesy accidentals v1.0 -// -// Copyright (C)2012-2019 Jörn Eichler (heuchi) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -//============================================== - -function main() { - curScore.startCmd() - removeAcc() - curScore.endCmd() - - quit() -} - -// if nothing is selected process whole score -var processAll = false - -// function tpcName -// -// return name of note -var TPC_NAMES = [ - "Fbb", "Cbb", "Gbb", "Dbb", "Abb", "Ebb", "Bbb", - "Fb", "Cb", "Gb", "Db", "Ab", "Eb", "Bb", - "F", "C", "G", "D", "A", "E", "B", - "F#", "C#", "G#", "D#", "A#", "E#", "B#", - "F##", "C##", "G##", "D##", "A##", "E##", "B##" - ]; - -function tpcName(tpc) { - - return(TPC_NAMES[tpc+1]); -} - -// function processNote -// -// for each measure we create a table that contains -// the actual 'noteName' of each 'noteClass' -// -// a 'noteClass' is the natural name of a space -// or line of the staff and the octave: -// C5, F6, B3 are 'noteClass' -// -// a 'noteName' would be C, F#, Bb for example -// (we don't need the octave here) -// -// curMeasureArray[] = - -function processNote(note,curMeasureArray,keySig) { - var octave=Math.floor(note.pitch/12); - - // correct octave for Cb and Cbb - if(note.tpc1 == 7 || note.tpc1 == 0) { - octave++; // belongs to higher octave - } - // correct octave for B# and B## - if(note.tpc1 == 26 || note.tpc1 == 33) { - octave--; // belongs to lower octave - } - - var noteName = tpcName(note.tpc); - var noteClass = noteName.charAt(0)+octave; - - // a tied back note never needs an accidental - if (note.tieBack != null) { - if(note.accidental != null) { - // security checks - var thisPitch = note.pitch; - var thisAcc = note.accidentalType; - - // remove - note.accidentalType = Accidental.NONE; - - // if pitch changed, we were wrong... - if(note.pitch != thisPitch) { - console.log("ERROR1: pitch of note changed!"); - //note.color = "#ff0000"; - note.accidentalType = thisAcc; - } - } - // if the tied back note is not part of - // the current key sig, we need to remember it. - //if( ! (note.tpc > keySig+12 && note.tpc < keySig+20)) { - // curMeasureArray[noteClass]=noteName; - //} - - // we're done for a tied back note. - return; - } - - // check if current note needs acc - if(typeof curMeasureArray[noteClass] !== 'undefined') { - // we have information on the previous note - // in the same measure: - // if this note is the same noteClass and noteName - // it doesn't need an accidental - if(curMeasureArray[noteClass] == noteName) { - // remove accidental if present - if(note.accidental != null) { - // security checks - var thisPitch = note.pitch; - var thisAcc = note.accidentalType; - - // remove - note.accidentalType = Accidental.NONE; - - // if pitch changed, we were wrong... - if(note.pitch != thisPitch) { - console.log("ERROR2: pitch of note changed!"); - //note.color = "#ff0000"; - note.accidentalType = thisAcc; - } - } - } - } else { - // we don't have this note in the current measure - // so it depends on the current key signature - if(note.tpc > keySig+12 && note.tpc < keySig+20) { - // we don't need an accidental in the current key sig - // remove accidental if present - if(note.accidental != null) { - // security checks - var thisPitch = note.pitch; - var thisAcc = note.accidentalType; - - // remove - note.accidentalType = Accidental.NONE; - - // if pitch changed, we were wrong... - if(note.pitch != thisPitch) { - console.log("ERROR3: pitch of note changed!"); - //note.color = "#ff0000"; - note.accidentalType = thisAcc; - console.log("KeySig="+keySig+", tpc="+note.tpc); - } - } - } - } - - curMeasureArray[noteClass]=noteName; -} - -// function processPart -// -// do the actual work: process all given tracks in parallel -// add courtesy accidentals where needed. -// -// We go through all tracks simultaneously, because we also want courtesy -// accidentals for notes across different staves when they are in the -// same octave and for notes of different voices in the same octave - -function processPart(cursor,endTick,startTrack,endTrack) { - if(processAll) { - // we need to reset track first, otherwise - // rewind(0) doesn't work correctly - // we need to set staffIdx and voice to - // get correct key signature. - cursor.staffIdx = startTrack / 4; - cursor.voice = 0; - cursor.rewind(0); - } else { - cursor.rewind(1); - // we need to set staffIdx and voice to - // get correct key signature. - cursor.staffIdx = startTrack / 4; - cursor.voice = 0; - } - - var segment = cursor.segment; - - // we use the cursor to know measure boundaries - // and to get the current key signature - var keySig = cursor.keySignature; - cursor.nextMeasure(); - - var curMeasureArray = []; - - // we use a segment, because the cursor always proceeds to - // the next element in the given track and we don't know - // in which track the element is. - var inLastMeasure=false; - while(segment && (processAll || segment.tick < endTick)) { - // check if still inside same measure - if(!inLastMeasure && !(segment.tick < cursor.tick)) { - // new measure - curMeasureArray = []; - keySig = cursor.keySignature; - if(!cursor.nextMeasure()) { - inLastMeasure=true; - } - } - - for(var track=startTrack; track 0) { - var graceChords = segment.elementAt(track).graceNotes; - - for(var j=0;j startTrack) ) { - return(part.endTrack/4); - } - } - - // not found! - console.log("error: part for " + startStaff + " not found!"); - quit(); + // Notes in same measure at different octave + property var setting1: { + "addAccidentals": true, // If to cancel, bracket type + "bracketType": 0, // 0 = no brackets, 1 = round, 2 = square + "parseGraceNotes": true, // Include grace notes in calculations and adding + "durationMode": 0 // How to parse durations (0": not before, 1": instantaneous, 2": during) } - // function processNote - // - // for each measure we create a table that contains - // the actual 'noteName' of each 'noteClass' - // - // a 'noteClass' is the natural name of a space - // or line of the staff and the octave: - // C5, F6, B3 are 'noteClass' - // - // a 'noteName' would be C, F#, Bb for example - // (we don't need the octave here) - // - // curMeasureArray[] = - - function processNote(note,prevMeasureArray,curMeasureArray) { - var octave=Math.floor(note.pitch/12); - - // use tpc1 instead of tpc for octave correction - // since this will also work for transposing instruments - // correct octave for Cb and Cbb - if(note.tpc1 == 7 || note.tpc1 == 0) { - octave++; // belongs to higher octave - } - // correct octave for B# and B## - if(note.tpc1 == 26 || note.tpc1 == 33) { - octave--; // belongs to lower octave - } - - var noteName = tpcName(note.tpc); - var noteClass = noteName.charAt(0)+octave; - - // remember note for next measure - curMeasureArray[noteClass]=noteName; - - // check if current note needs courtesy acc - if(typeof prevMeasureArray[noteClass] !== 'undefined') { - if(prevMeasureArray[noteClass] != noteName) { - // this note needs an accidental - // if there's none present anyway - if(note.accidental == null) { - // calculate type of needed accidental - var accidental=Accidental.NONE; - if(note.tpc < 6) { - accidental = Accidental.FLAT2; - } else if(note.tpc < 13) { - accidental = Accidental.FLAT; - } else if(note.tpc < 20) { - accidental = Accidental.NATURAL; - } else if(note.tpc < 27) { - accidental = Accidental.SHARP; - } else { - accidental = Accidental.SHARP2; - } - note.accidentalType = accidental; - // put bracket on accidental - note.accidental.accidentalBracket = useBracket; - } - } - // delete entry to make sure we don't create the - // same accidental again in the same measure - delete prevMeasureArray[noteClass]; - } + // Notes in same measure in different staves (of same instrument) + property var setting2: { + "addAccidentals": true, + "bracketType": 0, + "parseGraceNotes": true, + "durationMode": 0 } - // function processPart - // - // do the actual work: process all given tracks in parallel - // add courtesy accidentals where needed. - // - // We go through all tracks simultaneously, because we also want courtesy - // accidentals for notes across different staves when they are in the - // same octave and for notes of different voices in the same octave - - function processPart(cursor,endTick,startTrack,endTrack) { - if(processAll) { - // we need to reset track first, otherwise - // rewind(0) doesn't work correctly - cursor.track=0; - cursor.rewind(0); - } else { - cursor.rewind(1); - } - - var segment = cursor.segment; - - // we use the cursor to know measure boundaries - cursor.nextMeasure(); - - var curMeasureArray = new Array(); - var prevMeasureArray = new Array(); - - // we use a segment, because the cursor always proceeds to - // the next element in the given track and we don't know - // in which track the element is. - var inLastMeasure=false; - while(segment && (processAll || segment.tick < endTick)) { - // check if still inside same measure - if(!inLastMeasure && !(segment.tick < cursor.tick)) { - // new measure - prevMeasureArray = curMeasureArray; - curMeasureArray = new Array(); - if(!cursor.nextMeasure()) { - inLastMeasure=true; - } - } - - // we search for key signatures in first voice of - // first staff: - var keySigTrack = startTrack - (startTrack % 4); - - for(var track=startTrack; track 0) { - var graceChords = segment.elementAt(track).graceNotes; - - for(var j=0;j endStaff) { - curEndStaff = endStaff; - } - - // do the work - processPart(cursor,endTick,curStartStaff*4,curEndStaff*4); + // Notes over a key change (new bar) + property var setting7: { + "addAccidentals": true, // If to run + "bracketType": 0, // Bracket type + "cancelOctaves": false, // Cancel in different octaves + "parseGraceNotes": true, // Include grace notes in calculation and adding + "cancelMode": true // Excessive cancelling mode (see setting9) + } - // next part - curStartStaff = curEndStaff; - } + // Notes over a key change (mid bar) + property var setting8: { + "addAccidentals": true, + "bracketType": 0, + "cancelOctaves": false, + "parseGraceNotes": true, + "cancelMode": true + } - console.log("end add courtesy accidentals"); + // How to handle excessive cancelling + property var setting9: { + "a": true, // In same measure + "b": true // In different measures } + //option true: add accidentals as needed until cancelled in original octave + // notes of same tick get cancelled + // cancelling has to happen in original staff + //option false: continue to add accidentals as needed if not previously cancelled in same octave - onRun: { - curScore.startCmd() - addAcc() - curScore.endCmd() + onRun: Accidentals.runPlugin("add") - quit() + Settings { + id: options + category: "Courtesy Accidentals Plugin" + property var uSettings } } diff --git a/share/plugins/courtesy_accidentals/configureCourtesyAccidentals.qml b/share/plugins/courtesy_accidentals/configureCourtesyAccidentals.qml new file mode 100644 index 0000000000000..07fb7dca9ec6a --- /dev/null +++ b/share/plugins/courtesy_accidentals/configureCourtesyAccidentals.qml @@ -0,0 +1,675 @@ +//============================================== +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//============================================== + +import QtQuick 2.9 +import QtQuick.Controls 2.2 +import QtQuick.Dialogs 1.2 +import QtQuick.Layouts 1.2 +import MuseScore 3.0 +import Muse.UiComponents 1.0 as MU +import Muse.Ui 1.0 +import "assets" +import "assets/defaultsettings.js" as DSettings + +MuseScore { + title: qsTr("Configure Courtesy Accidentals") + description: qsTr("Choose when to add courtesy accidentals to your scores, and how they look.") + version: "4.0" + categoryCode: "composing-arranging-tools" + thumbnailName: "assets/accidentals.png" + requiresScore: false + + onRun: mainWindow.show() + + ApplicationWindow { + id: mainWindow + minimumHeight: 400 + minimumWidth: 480 + background: Rectangle {color: ui.theme.backgroundSecondaryColor} + title: qsTr("Courtesy Accidentals: Settings") + flags: Qt.Dialog + + MU.StyledFlickable { + id: flickable + anchors.fill: parent + focus: true + contentWidth: contentItem.childrenRect.width + 2 * mainColumn.x + contentHeight: contentItem.childrenRect.height + 2 * mainColumn.y + Keys.onUpPressed: scrollBar.decrease() + Keys.onDownPressed: scrollBar.increase() + ScrollBar.vertical: MU.StyledScrollBar {id: scrollBar} + Column { + id: mainColumn + spacing: 0 + width: mainWindow.width + + MainMenuSection { + title: qsTr("General Settings") + isExpanded: true + + SubMenuSection { + id: setting0Image + title: qsTr("Double accidentals") + + MU.CheckBox { + id: setting0Box + anchors.leftMargin: style.regSpace + text: qsTr("Use natural flats/sharps when cancelling double accidentals") + onClicked: {checked = !checked; updatesetting0Img()} + signal setv(bool checked) + onSetv: function(value) {checked = value; updatesetting0Img()} + } + } + + SubMenuSection { + id: setting6Image + title: qsTr("Restating grace note accidentals") + + Column { + spacing: style.minSpace + width: parent.width + + StyledLabel {text: qsTr("In same staff:")} + + AddAccItem { + id: setting6aAcc + anchors.leftMargin: style.regSpace + anchors.rightMargin: style.regSpace + width: parent.width - anchors.leftMargin - anchors.rightMargin + onClicked: updatesetting6Img() + } + } + + Column { + spacing: style.minSpace + width: parent.width + + StyledLabel {text: qsTr("In different staves of same instrument:")} + + AddAccItem { + id: setting6bAcc + anchors.leftMargin: style.regSpace + anchors.rightMargin: style.regSpace + width: parent.width - anchors.leftMargin - anchors.rightMargin + } + } + } + + SubMenuSection { + id: setting9aImage + title: qsTr("Cancelling in the same measure") + + CancelModeItem { + id: setting9aCancel + width: parent.width - anchors.leftMargin + onClicked: updatesetting9aImg() + } + } + + SubMenuSection { + id: setting9bImage + title: qsTr("Cancelling in the next measure") + + CancelModeItem { + id: setting9bCancel + width: parent.width - anchors.leftMargin + onClicked: updatesetting9bImg() + } + bottomPadding: isExpanded ? style.regSpace : 0 + } + } + + MU.SeparatorLine {width: mainWindow.width} + + MainMenuSection { + title: qsTr("Notes in the same staff") + + SubMenuSection { + title: qsTr("Notes in the same octave in the next measure") + id: setting4aColumn + property bool accOn: setting4aAcc.checked + + AddAccItem { + id: setting4aAcc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting4aImg() + } + + GraceNotesCheckBox { + id: setting4a3Box + enabled: setting4aColumn.accOn + onChanged: updatesetting4aImg() + } + } + + SubMenuSection { + title: qsTr("Notes in different octaves in the same measure") + id: setting1Column + property bool accOn: setting1Acc.checked + + AddAccItem { + id: setting1Acc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting1Img() + } + + GraceNotesCheckBox { + id: setting13Box + enabled: setting1Column.accOn + onChanged: updatesetting1Img() + } + + DurationModeItem { + id: setting1Duration + width: parent.width + enabled: setting1Column.accOn + onClicked: updatesetting1Img() + } + } + + SubMenuSection { + title: qsTr("Notes in different octaves in the next measure") + id: setting4bColumn + property bool accOn: setting4bAcc.checked + + AddAccItem { + id: setting4bAcc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting4bImg() + } + + GraceNotesCheckBox { + id: setting4b3Box + enabled: setting4bColumn.accOn + onChanged: updatesetting4bImg() + } + + bottomPadding: isExpanded ? style.regSpace : 0 + } + } + + MU.SeparatorLine {width: mainWindow.width} + + MainMenuSection { + title: qsTr("Notes in different staves of the same instrument") + + SubMenuSection { + title: qsTr("Notes in the same octave in the same measure") + id: setting2Column + property bool accOn: setting2Acc.checked + + AddAccItem { + id: setting2Acc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting2Img() + } + + GraceNotesCheckBox { + id: setting23Box + enabled: setting2Column.accOn + onChanged: updatesetting2Img() + } + + DurationModeItem { + id: setting2Duration + width: parent.width + enabled: setting2Column.accOn + onClicked: updatesetting2Img() + } + } + + SubMenuSection { + title: qsTr("Notes in the same octave in the next measure") + id: setting5aColumn + property bool accOn: setting5aAcc.checked + + AddAccItem { + id: setting5aAcc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting5aImg() + } + + GraceNotesCheckBox { + id: setting5a3Box + enabled: setting5aColumn.accOn + onChanged: updatesetting5aImg() + } + + } + + SubMenuSection { + title: qsTr("Notes in different octaves in the same measure") + id: setting3Column + property bool accOn: setting3Acc.checked + + AddAccItem { + id: setting3Acc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting3Img() + } + + GraceNotesCheckBox { + id: setting33Box + enabled: setting3Column.accOn + onChanged: updatesetting3Img() + } + + DurationModeItem { + id: setting3Duration + width: parent.width + enabled: setting3Column.accOn + onClicked: updatesetting3Img() + } + } + + SubMenuSection { + title: qsTr("Notes in different octaves in the next measure") + id: setting5bColumn + property bool accOn: setting5bAcc.checked + + AddAccItem { + id: setting5bAcc + anchors.rightMargin: style.regSpace + width: parent.width - anchors.rightMargin + onClicked: updatesetting5bImg() + } + + GraceNotesCheckBox { + id: setting5b3Box + enabled: setting5bColumn.accOn + onChanged: updatesetting5bImg() + } + + bottomPadding: isExpanded ? style.regSpace : 0 + } + } + + MU.SeparatorLine {width: mainWindow.width} + + MainMenuSection { + title: qsTr("Notes after key signature changes") + + SubMenuSection { + title: qsTr("Notes after measure key signature changes") + id: setting7Column + property bool accOn: setting7Acc.checked + + AddAccItem { + id: setting7Acc + anchors.rightMargin: style.regSpace + width: parent.width - 2 * parent.padding + onClicked: updatesetting7Img() + } + GraceNotesCheckBox { + id: setting74Box + key: true + enabled: setting7Column.accOn + onChanged: updatesetting7Img() + } + OptionalCancelModeItem { + id: setting7Cancel + enabled: setting7Column.accOn + width: parent.width - 2 * parent.padding + onClicked: updatesetting7Img() + } + } + + SubMenuSection { + title: qsTr("Notes after mid-measure key signature changes") + id: setting8Column + property bool accOn: setting8Acc.checked + + AddAccItem { + id: setting8Acc + anchors.rightMargin: style.regSpace + width: parent.width - 2 * parent.padding + onClicked: updatesetting8Img() + } + GraceNotesCheckBox { + id: setting84Box + key: true + enabled: setting8Column.accOn + onChanged: updatesetting8Img() + } + OptionalCancelModeItem { + id: setting8Cancel + enabled: setting8Column.accOn + width: parent.width - 2 * parent.padding + onClicked: updatesetting8Img() + } + bottomPadding: isExpanded ? style.regSpace : 0 + } + } + } + } + Rectangle { + height: style.maxSpace + anchors.top: flickable.top + anchors.left: flickable.left + anchors.right: flickable.right + anchors.rightMargin: scrollBar.width + visible: !flickable.atYBeginning + gradient: Gradient { + GradientStop {position: 0.0; color: ui.theme.backgroundSecondaryColor} + GradientStop {position: 1.0; color: "transparent"} + } + } + Rectangle { + height: style.maxSpace + anchors.left: flickable.left + anchors.right: flickable.right + anchors.rightMargin: scrollBar.width + anchors.bottom: flickable.bottom + visible: !flickable.atYEnd + gradient: Gradient { + GradientStop {position: 0.0; color: "transparent"} + GradientStop {position: 1.0; color: ui.theme.backgroundSecondaryColor} + } + } + footer: Rectangle { + color: ui.theme.backgroundPrimaryColor + height: okButton.height + (2 * style.regSpace) + 1 + MU.SeparatorLine { + anchors.top: parent.top + } + MU.FlatButton { + anchors.left: parent.left + anchors.bottom: parent.bottom + anchors.margins: style.regSpace + text: qsTr("Reset Settings") + onClicked: loadSettings(DSettings.read()) + } + Row { + id: okButton + spacing: style.regSpace + anchors.margins: style.regSpace + anchors.right: parent.right + anchors.bottom: parent.bottom + + MU.FlatButton { + text: qsTr("Cancel") + onClicked: smartQuit() + } + MU.FlatButton { + text: qsTr("OK") + accentButton: true + onClicked: { + options.uSettings = JSON.stringify(writeSettings()) + smartQuit() + } + } + } + } + Component.onCompleted: { + if (JSON.parse(options.uSettings).edited) { + loadSettings(JSON.parse(options.uSettings)) + } else { + loadSettings(DSettings.read()) + } + } + } + + PluginStyle {id: style} + + function loadSettings(settingObj) { + setting0Box.setv(settingObj.setting0.addNaturals) + // + setting1Acc.setv(settingObj.setting1.addAccidentals, settingObj.setting1.bracketType) + setting13Box.setv(settingObj.setting1.parseGraceNotes) + setting1Duration.setv(settingObj.setting1.durationMode) + // + setting2Acc.setv(settingObj.setting2.addAccidentals, settingObj.setting2.bracketType) + setting23Box.setv(settingObj.setting2.parseGraceNotes) + setting2Duration.setv(settingObj.setting2.durationMode) + // + setting3Acc.setv(settingObj.setting3.addAccidentals, settingObj.setting3.bracketType) + setting33Box.setv(settingObj.setting3.parseGraceNotes) + setting3Duration.setv(settingObj.setting3.durationMode) + // + setting4aAcc.setv(settingObj.setting4.a.addAccidentals, settingObj.setting4.a.bracketType) + setting4a3Box.setv(settingObj.setting4.a.parseGraceNotes) + // + setting4bAcc.setv(settingObj.setting4.b.addAccidentals, settingObj.setting4.b.bracketType) + setting4b3Box.setv(settingObj.setting4.b.parseGraceNotes) + // + setting5aAcc.setv(settingObj.setting5.a.addAccidentals, settingObj.setting5.a.bracketType) + setting5a3Box.setv(settingObj.setting5.a.parseGraceNotes) + // + setting5bAcc.setv(settingObj.setting5.b.addAccidentals, settingObj.setting5.b.bracketType) + setting5b3Box.setv(settingObj.setting5.b.parseGraceNotes) + // + setting6aAcc.setv(settingObj.setting6.a.addAccidentals, settingObj.setting6.a.bracketType) + // + setting6bAcc.setv(settingObj.setting6.b.addAccidentals, settingObj.setting6.b.bracketType) + // + setting7Acc.setv(settingObj.setting7.addAccidentals, settingObj.setting7.bracketType) + setting7Cancel.setv(settingObj.setting7.cancelOctaves, settingObj.setting7.cancelMode ? 1 : 2) + setting74Box.setv(settingObj.setting7.parseGraceNotes) + // + setting8Acc.setv(settingObj.setting8.addAccidentals, settingObj.setting8.bracketType) + setting8Cancel.setv(settingObj.setting8.cancelOctaves, settingObj.setting8.cancelMode ? 1 : 2) + setting84Box.setv(settingObj.setting8.parseGraceNotes) + // + setting9aCancel.setv(settingObj.setting9.a ? 1 : 2) + // + setting9bCancel.setv(settingObj.setting9.a ? 1 : 2) + } + function writeSettings() { + var settingObj = {} + settingObj.edited = true + settingObj.setting0 = { + addNaturals: setting0Box.checked + } + settingObj.setting1 = { + addAccidentals: setting1Acc.checked, + bracketType: setting1Acc.currentValue, + parseGraceNotes: setting13Box.checked, + durationMode: setting1Duration.value + } + settingObj.setting2 = { + addAccidentals: setting1Acc.checked, + bracketType: setting1Acc.currentValue, + parseGraceNotes: setting13Box.checked, + durationMode: setting1Duration.value + } + settingObj.setting3 = { + addAccidentals: setting3Acc.checked, + bracketType: setting3Acc.currentValue, + parseGraceNotes: setting33Box.checked, + durationMode: setting3Duration.value + } + settingObj.setting4 = { + a: { + addAccidentals: setting4aAcc.checked, + bracketType: setting4aAcc.currentValue, + parseGraceNotes: setting4a3Box.checked + }, + b: { + addAccidentals: setting4bAcc.checked, + bracketType: setting4bAcc.currentValue, + parseGraceNotes: setting4b3Box.checked + } + } + settingObj.setting5 = { + a: { + addAccidentals: setting5aAcc.checked, + bracketType: setting5aAcc.currentValue, + parseGraceNotes: setting5a3Box.checked + }, + b: { + addAccidentals: setting5bAcc.checked, + bracketType: setting5bAcc.currentValue, + parseGraceNotes: setting5b3Box.checked + } + } + settingObj.setting6 = { + a: { + addAccidentals: setting6aAcc.checked, + bracketType: setting6aAcc.currentValue + }, + b: { + addAccidentals: setting6bAcc.checked, + bracketType: setting6bAcc.currentValue + } + } + settingObj.setting7 = { + addAccidentals: setting7Acc.checked, + bracketType: setting7Acc.currentValue, + cancelOctaves: setting7Cancel.checked, + parseGraceNotes: setting74Box.checked, + cancelMode: setting7Cancel.value == 1 + } + settingObj.setting8 = { + addAccidentals: setting8Acc.checked, + bracketType: setting8Acc.currentValue, + cancelOctaves: setting8Cancel.checked, + parseGraceNotes: setting84Box.checked, + cancelMode: setting8Cancel.value == 1 + } + settingObj.setting9 = { + a: setting9aCancel.value == 1, + b: setting9bCancel.value == 1 + } + return settingObj + } + function updatesetting0Img() { + setting0Image.source = "examples/setting0/example-" + setting0Box.checked.toString() + ".svg" + } + function updatesetting1Img() { + var imgsource = "examples/setting1/example-" + if (setting1Acc.checked) { + imgsource += setting1Acc.currentValue.toString() + imgsource += setting1Duration.value.toString() + } else { + imgsource += "false" + } + imgsource += ".svg" + setting1Column.source = imgsource + } + function updatesetting2Img() { + var imgsource = "examples/setting2/example-" + if (setting2Acc.checked) { + imgsource += setting2Acc.currentValue.toString() + imgsource += setting2Duration.value.toString() + } else { + imgsource += "false" + } + imgsource += ".svg" + setting2Column.source = imgsource + } + function updatesetting3Img() { + var imgsource = "examples/setting3/example-" + if (setting3Acc.checked) { + imgsource += setting3Acc.currentValue.toString() + imgsource += setting3Duration.value.toString() + } else { + imgsource += "false" + } + imgsource += ".svg" + setting3Column.source = imgsource + } + function updatesetting4aImg() { + var imgsource = "examples/setting4a/example-" + if (setting4aAcc.checked) { + imgsource += setting4a3Box.checked ? "1" : "0" + imgsource += setting4aAcc.currentValue.toString() + } else { + imgsource += "false" + } + imgsource += ".svg" + setting4aColumn.source = imgsource + } + function updatesetting4bImg() { + var imgsource = "examples/setting4b/example-" + if (setting4bAcc.checked) { + imgsource += setting4b3Box.checked ? "1" : "0" + imgsource += setting4bAcc.currentValue.toString() + } else { + imgsource += "false" + } + imgsource += ".svg" + setting4bColumn.source = imgsource + } + function updatesetting5aImg() { + var imgsource = "examples/setting5a/example-" + imgsource += setting5aAcc.checked ? (setting5aAcc.currentValue + 2).toString() : "1" + imgsource += ".svg" + setting5aColumn.source = imgsource + } + function updatesetting5bImg() { + var imgsource = "examples/setting5b/example-" + imgsource += setting5bAcc.checked ? (setting5bAcc.currentValue + 2).toString() : "1" + imgsource += ".svg" + setting5bColumn.source = imgsource + } + function updatesetting6Img() { + var imgsource = "examples/setting6/example-" + imgsource += setting6aAcc.checked ? (setting6aAcc.currentValue + 2).toString() : "1" + imgsource += ".svg" + setting6Image.source = imgsource + } + function updatesetting7Img() { + var imgsource = "examples/setting7/example-" + if (setting7Acc.checked) { + imgsource += setting74Box.checked ? "1" : "0" + imgsource += setting7Acc.currentValue.toString() + imgsource += setting7Cancel.checked ? setting7Cancel.value.toString() : "0" + } else { + imgsource += "false" + } + imgsource += ".svg" + setting7Column.source = imgsource + } + function updatesetting8Img() { + var imgsource = "examples/setting8/example-" + if (setting8Acc.checked) { + imgsource += setting8Acc.currentValue.toString() + imgsource += setting8Cancel.checked ? setting8Cancel.value.toString() : "0" + } else { + imgsource += "false" + } + imgsource += ".svg" + setting8Column.source = imgsource + } + function updatesetting9aImg() { + setting9aImage.source = "examples/setting9a/example-" + setting9aCancel.value.toString() + ".svg" + } + function updatesetting9bImg() { + setting9bImage.source = "examples/setting9b/example-" + setting9bCancel.value.toString() + ".svg" + } + Settings { + id: options + category: "Courtesy Accidentals Plugin" + property var uSettings: '{ + "version": "4.0-beta", + "edited": false + }' + //Qt.labs.settings doesn't like working with object types + } + function smartQuit() { + mainWindow.close() + quit() + } +} diff --git a/share/plugins/courtesy_accidentals/removeCourtesyAccidentals.qml_disabled b/share/plugins/courtesy_accidentals/removeCourtesyAccidentals.qml_disabled index 8b4484ccdde97..01035d009b231 100644 --- a/share/plugins/courtesy_accidentals/removeCourtesyAccidentals.qml_disabled +++ b/share/plugins/courtesy_accidentals/removeCourtesyAccidentals.qml_disabled @@ -1,7 +1,7 @@ //============================================== -// remove courtesy accidentals v1.0 -// -// Copyright (C)2012-2019 Jörn Eichler (heuchi) +// Cautionary Accidentals v4.0 +// https://github.com/XiaoMigros/Cautionary-Accidentals +// Copyright (C)2023 XiaoMigros // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -19,282 +19,15 @@ import QtQuick 2.0 import MuseScore 3.0 +import "assets/accidentals.js" as Accidentals MuseScore { - version: "1.0" - description: "This plugin removes courtesy accidentals" - title: "Remove Courtesy Accidentals" + title: qsTr("Remove Courtesy Accidentals") + version: "4.0" + description: qsTr("This plugin removes cautionary accidentals from the score") categoryCode: "composing-arranging-tools" - thumbnailName: "accidentals.png" - - //pluginType: "dock" + thumbnailName: "assets/accidentals.png" requiresScore: true - // if nothing is selected process whole score - property bool processAll: false - - // function tpcName - // - // return name of note - - function tpcName(tpc) { - var tpcNames = new Array( - "Fbb", "Cbb", "Gbb", "Dbb", "Abb", "Ebb", "Bbb", - "Fb", "Cb", "Gb", "Db", "Ab", "Eb", "Bb", - "F", "C", "G", "D", "A", "E", "B", - "F#", "C#", "G#", "D#", "A#", "E#", "B#", - "F##", "C##", "G##", "D##", "A##", "E##", "B##" - ); - - return(tpcNames[tpc+1]); - } - - // function processNote - // - // for each measure we create a table that contains - // the actual 'noteName' of each 'noteClass' - // - // a 'noteClass' is the natural name of a space - // or line of the staff and the octave: - // C5, F6, B3 are 'noteClass' - // - // a 'noteName' would be C, F#, Bb for example - // (we don't need the octave here) - // - // curMeasureArray[] = - - function processNote(note,curMeasureArray,keySig) { - var octave=Math.floor(note.pitch/12); - - // correct octave for Cb and Cbb - if(note.tpc1 == 7 || note.tpc1 == 0) { - octave++; // belongs to higher octave - } - // correct octave for B# and B## - if(note.tpc1 == 26 || note.tpc1 == 33) { - octave--; // belongs to lower octave - } - - var noteName = tpcName(note.tpc); - var noteClass = noteName.charAt(0)+octave; - - // a tied back note never needs an accidental - if (note.tieBack != null) { - if(note.accidental != null) { - // security checks - var thisPitch = note.pitch; - var thisAcc = note.accidentalType; - - // remove - note.accidentalType = Accidental.NONE; - - // if pitch changed, we were wrong... - if(note.pitch != thisPitch) { - console.log("ERROR1: pitch of note changed!"); - //note.color = "#ff0000"; - note.accidentalType = thisAcc; - } - } - // if the tied back note is not part of - // the current key sig, we need to remember it. - //if( ! (note.tpc > keySig+12 && note.tpc < keySig+20)) { - // curMeasureArray[noteClass]=noteName; - //} - - // we're done for a tied back note. - return; - } - - // check if current note needs acc - if(typeof curMeasureArray[noteClass] !== 'undefined') { - // we have information on the previous note - // in the same measure: - // if this note is the same noteClass and noteName - // it doesn't need an accidental - if(curMeasureArray[noteClass] == noteName) { - // remove accidental if present - if(note.accidental != null) { - // security checks - var thisPitch = note.pitch; - var thisAcc = note.accidentalType; - - // remove - note.accidentalType = Accidental.NONE; - - // if pitch changed, we were wrong... - if(note.pitch != thisPitch) { - console.log("ERROR2: pitch of note changed!"); - //note.color = "#ff0000"; - note.accidentalType = thisAcc; - } - } - } - } else { - // we don't have this note in the current measure - // so it depends on the current key signature - if(note.tpc > keySig+12 && note.tpc < keySig+20) { - // we don't need an accidental in the current key sig - // remove accidental if present - if(note.accidental != null) { - // security checks - var thisPitch = note.pitch; - var thisAcc = note.accidentalType; - - // remove - note.accidentalType = Accidental.NONE; - - // if pitch changed, we were wrong... - if(note.pitch != thisPitch) { - console.log("ERROR3: pitch of note changed!"); - //note.color = "#ff0000"; - note.accidentalType = thisAcc; - console.log("KeySig="+keySig+", tpc="+note.tpc); - } - } - } - } - - curMeasureArray[noteClass]=noteName; - } - - // function processPart - // - // do the actual work: process all given tracks in parallel - // add courtesy accidentals where needed. - // - // We go through all tracks simultaneously, because we also want courtesy - // accidentals for notes across different staves when they are in the - // same octave and for notes of different voices in the same octave - - function processPart(cursor,endTick,startTrack,endTrack) { - if(processAll) { - // we need to reset track first, otherwise - // rewind(0) doesn't work correctly - // we need to set staffIdx and voice to - // get correct key signature. - cursor.staffIdx = startTrack / 4; - cursor.voice = 0; - cursor.rewind(0); - } else { - cursor.rewind(1); - // we need to set staffIdx and voice to - // get correct key signature. - cursor.staffIdx = startTrack / 4; - cursor.voice = 0; - } - - var segment = cursor.segment; - - // we use the cursor to know measure boundaries - // and to get the current key signature - var keySig = cursor.keySignature; - cursor.nextMeasure(); - - var curMeasureArray = new Array(); - - // we use a segment, because the cursor always proceeds to - // the next element in the given track and we don't know - // in which track the element is. - var inLastMeasure=false; - while(segment && (processAll || segment.tick < endTick)) { - // check if still inside same measure - if(!inLastMeasure && !(segment.tick < cursor.tick)) { - // new measure - curMeasureArray = new Array(); - keySig = cursor.keySignature; - if(!cursor.nextMeasure()) { - inLastMeasure=true; - } - } - - for(var track=startTrack; track 0) { - var graceChords = segment.elementAt(track).graceNotes; - - for(var j=0;j