Any operations dealing with Supplemental Unicode must operate on high & low surrogates simulatenously, since they belong together as a pair:
-Text::insert method has a new version of which takes two QChars as input (the high & low surrogates), and inserts them together before incrementing the cursor.
-TextBlock::fragment method now has return parameter ridx (relative QChar index) in addition to rcol (relative cursor position). For Basic Unicode TextFragments, ridx will be same as rcol, since each Basic Unicode char is one QChar. But for text that has Supplemental Unicode, ridx will be be different since each Supplemental Unicode char is two QChars.
-TextBlock::text method now includes any high surrogate QChars in the returned string. Previously, this method simply skipped over QChars that were high surrogates. When iterating over the TextFragment, only increments col when comming across a QChar that is not a high surrogate.
-Text::createLayout, Text::paste and Text::drop methods now uses the new Text::insert method to insert both high & low surrogates together. Previously, the cursor position would get messed up when each QChar was added seperately.
-TextBlock::remove(int start, int n) will now add both QChars of the surrogate pair to the return string.
Also was issue with adding text after a SMUFL symbol if the cursor mode was already in SMUFL. Fixed by making sure to append a new TextFragment regardless of state of cursor, and also making TextFragment::TextFragment(TextCursor* cursor, const QString& s) constructor set the type to CharFormatType::TEXT.
Previously TextBlock::remove() did not delete Supplementary Multilingual Plane Unicode chars correctly.
Added tests using deletePreviousChar() for SMP Unicode as well as regular BMP Unicode as well as for text that has mixed BMP, SMP, and SMUFL symbols.
If enabled, then also update the beam properties for shorter duration notes at the same tick when dropping a beam property from palette or when clicking on a note.
1. When moving right, ensure the left edge of system won't be right of frame's left edge margin.
2. Never move left if entire system already fits entirely within the frame.
3. When moving left, ensure the right edge of system won't be left of frame's right edge margin.
Also resets scrolling when time sig's numerator or denominator value changed.
Previously included a clef, even though clef is irrelevant for this UI, and would not reflect the clef of the time sig's staff anyway, so I've removed.
Previously included an explicit time signature, but that time sig never reflected the designated symbol or custom text for num/denom, so I've removed that time sig for simplity from this UI.
Previously had 5-staff line, but since only dealing with beam properties, pitches are irrelevant, so 1-staff is sufficient.
1. The beam properties palette is no longer ever-expanding horizontally, but rather fixed at minimum required pixels (114) in order to display only the 4 beam property cells. This prevents a noticeable artifact when resizing, and also makes the ui cleaner.
2. The Beam Properties palette in a QGroupBox named as such, that way it is clear what those 4 cells are.
3. The Reset button and the Beam Properties now share the same horizontal layout space.