diff --git a/.DS_Store b/.DS_Store
index 092ccc8..b816989 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/English.lproj/VLDocument.xib b/English.lproj/VLDocument.xib
index 022a33c..0466d09 100644
--- a/English.lproj/VLDocument.xib
+++ b/English.lproj/VLDocument.xib
@@ -1,7271 +1,1234 @@
-
-
- 1070
- 14C109
- 7519
- 1344.72
- 757.30
-
-
- NSBox
- NSButton
- NSButtonCell
- NSComboBox
- NSComboBoxCell
- NSCustomObject
- NSCustomView
- NSMenu
- NSMenuItem
- NSNumberFormatter
- NSPopUpButton
- NSPopUpButtonCell
- NSProgressIndicator
- NSScrollView
- NSScroller
- NSStepper
- NSStepperCell
- NSTableColumn
- NSTableHeaderView
- NSTableView
- NSTextField
- NSTextFieldCell
- NSToolbar
- NSToolbarFlexibleSpaceItem
- NSToolbarItem
- NSToolbarSpaceItem
- NSUserDefaultsController
- NSView
- NSWindowTemplate
-
-
- com.apple.InterfaceBuilder.CocoaPlugin
-
-
-
-
-
-
-
- 7
- 2
- {{515, 195}, {338, 127}}
- 1886912512
- Window
-
- NSWindow
-
-
- View
-
-
- {213, 107}
-
-
- 256
-
-
-
- 256
- {{17, 90}, {208, 17}}
-
- YES
-
- 67108864
- 272629760
- UmVwZWF0IG1lYXN1cmVzIDEgdGhvdWdoIDE0Cg
-
-
-
-
-
- NO
- 1
-
-
-
- 256
- {{20, 60}, {27, 22}}
-
- YES
-
- -1804599231
- -1874852864
- 2
-
-
-
-
-
- 0
-
-
- .
-
- '
-
- 0
- 1
- NO
- YES
- 1
- EAAAAAAAAAAAAAAAAAAAAA
-
-
- 0
- 1
- NO
- YES
- 1
- AgAAAAAAAAAAAAAAAAAAAA
-
- -0
- -∞
-
- 0
- +∞
-
-
- 0
- -0
-
-
-
-
-
-
-
- NaN
-
-
-
-
-
- .
- '
- NO
- YES
- YES
-
-
- YES
-
-
-
- NO
- 1
-
-
-
- 256
- {{52, 57}, {19, 27}}
-
- YES
-
- 786464
- 0
-
- 2
- 2
- 16
- 1
- YES
-
- NO
-
-
-
- 256
- {{73, 65}, {114, 17}}
-
- YES
-
- 67108864
- 272629760
- times.
-
-
-
-
-
- NO
- 1
-
-
-
- 256
- {{14, 12}, {121, 32}}
-
- 1002
- YES
-
- 67108864
- 134217728
- Don't Repeat
-
-
- 1002
- -2038284288
- 1
-
-
-
- 200
- 25
-
- NO
-
-
-
- 256
- {{159, 12}, {82, 32}}
-
- 1001
- YES
-
- 67108864
- 134217728
- Cancel
-
-
- 1001
- -2038284288
- 1
-
-
- Gw
- 200
- 25
-
- NO
-
-
-
- 256
- {{241, 12}, {83, 32}}
-
- 1000
- YES
-
- -2080374784
- 134217728
- Repeat
-
-
- 1000
- -2038284288
- 1
-
-
- DQ
- 200
- 25
-
- NO
-
-
- {338, 127}
-
- {{0, 0}, {1440, 878}}
- {213, 129}
- {10000000000000, 10000000000000}
- YES
-
-
- 7
- 2
- {{503, 135}, {372, 142}}
- 1886912512
- Window
- NSWindow
-
- View
-
-
- {213, 107}
-
-
- 256
-
-
-
- 256
- {{17, 105}, {354, 17}}
-
- YES
-
- 67108864
- 272629760
- RW5kaW5nIGluIG1lYXN1cmVzIDEgdGhyb3VnaCAxMCBhcHBsaWVzIHRvIHJlcGVhdHM6Cg
-
-
-
-
-
- NO
- 1
-
-
-
- 256
- {{14, 12}, {128, 32}}
-
- 1002
- YES
-
- 67108864
- 134217728
- Delete Ending
-
-
- 1002
- -2038284288
- 1
-
-
-
- 200
- 25
-
- NO
-
-
-
- 256
- {{163, 12}, {82, 32}}
-
- 1001
- YES
-
- 67108864
- 134217728
- Cancel
-
-
- 1001
- -2038284288
- 1
-
-
- Gw
- 200
- 25
-
- NO
-
-
-
- 256
- {{245, 12}, {113, 32}}
-
- 1000
- YES
-
- -2080374784
- 134217728
- Add Ending
-
-
- 1000
- -2038284288
- 1
-
-
- DQ
- 200
- 25
-
- NO
-
-
-
- 256
-
-
-
- 2304
-
-
-
- 256
- {184, 19}
-
- YES
- NO
- YES
-
-
-
- 256
- {{-26, 0}, {16, 17}}
-
-
-
- 1
- 20
- 20
- 20
-
-
- 67108864
- 0
-
-
- YES
- 12
- 4883
-
-
- 1211912448
- 2
-
- 549453824
- {18, 18}
-
-
-
-
-
- TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAADAAAAAwAAAAMAAAAD
-AAAAAwAAAAMAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABE1NTW4ZmZm/29vb/9zc3P/
-c3Nz/3Jycv9ycnL/cnJy/3Jycv9vb2//ZWVl/yUlJZ8AAAAiAAAAAAAAAAAAAAAAAAAAAkNDQ5W3t7f/
-+fn5//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz/+fn5/8DAwP9UVFS7AAAAAgAAAAAAAAAB
-AAAACJGRkf/c3Nz/8/Pz//T09P/19fX/9fX1//T09P/09PT/9PT0//T09P/09PT/8/Pz/97e3v+JiYn/
-AAAACAAAAAEAAAABAAAAEIGBgf/f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//u7u7/
-7u7u/9/f3/+SkpL/AAAAEAAAAAEAAAABAAAAFZGRkf/d3d3/7Ozs/+zs7P/t7e3/7e3t/+3t7f/t7e3/
-7Ozs/+7u7v/t7e3/7Ozs/9/f3/+QkJD/AAAAFAAAAAEAAAABAAAAGJ6env/b29v/6enp/+np6f/q6ur/
-6+vr/+rq6v/q6ur/6urq/+rq6v/q6ur/6Ojo/9jY2P+bm5v/AAAAGAAAAAEAAAABAAAAG6CgoP/T09P/
-2tra/9ra2v/b29v/29vb/9vb2//Z2dn/29vb/9nZ2f/a2tr/2tra/9HR0f+ioqL/AAAAGwAAAAEAAAAB
-AAAAHKurq//a2tr/39/f/9/f3//g4OD/4ODg/+Dg4P/h4eH/39/f/9/f3//f39//4ODg/9fX1/+mpqb/
-AAAAHAAAAAEAAAACAAAAHrS0tP/j4+P/5ubm/+Xl5f/m5ub/5+fn/+fn5//n5+f/6enp/+fn5//n5+f/
-6Ojo/93d3f+tra3/AAAAHgAAAAIAAAACAAAAILi4uP/p6en/7e3t//Dw8P/w8PD/8PDw/+3t7f/t7e3/
-8fHx/+zs7P/v7+//7e3t/+bm5v+0tLT/AAAAIAAAAAIAAAABAAAAILu7u//v7+//9/f3//b29v/4+Pj/
-9vb2//b29v/29vb/9/f3//f39//39/f/9/f3//Dw8P+7u7v/AAAAIAAAAAEAAAABAAAAHY2Njej4+Pj/
-/////////////////////////////////////////////////v7+//n5+f+Tk5PoAAAAHQAAAAEAAAAB
-AAAAEjo6Oq28vLz3/////////////////////////////////////////////////////7u7u/c/Pz+r
-AAAAEgAAAAEAAAAAAAAACAAAAEEAAACZAAAAxgAAANMAAADVAAAA1gAAANQAAADWAAAA2AAAANgAAADT
-AAAAxQAAAJkAAABBAAAACAAAAAAAAAAAAAAAAgAAAA0AAAAlAAAANgAAAEEAAABDAAAAQwAAAEMAAABE
-AAAAQwAAAEQAAABBAAAANgAAACUAAAANAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAYAAAAG
-AAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAwAAAAMAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB
-AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES
-AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS
-AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAA+4AAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAPuGFw
-cGwCAAAAbW50clJHQiBYWVogB9YADAAHABEAFQAbYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAPbWAAEAAAAA0y1hcHBsJNLJy134Mnx572GDPUg6gwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA
-AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAYSbmRpbgAA
-B+wAAAY+ZGVzYwAADiwAAABkZHNjbQAADpAAAADQbW1vZAAAD2AAAAAoY3BydAAAD4gAAAAtWFlaIAAA
-AAAAAFt8AAA0xwAABrNYWVogAAAAAAAAc8UAALNEAAAe9FhZWiAAAAAAAAAnlAAAGBAAAK1+WFlaIAAA
-AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1
-cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD
-AQAAAgAAAYUDGgSmBjEHuQlGCtEMXA3sD28Q+BKDFBMVmhckGKsaNBu3HTwewyBHIcYjSCTEJkYnvyk5
-KrAsKC2aLw0wejHlM080szYZN3c41DovO4U82j4sP3hAwUIKQ1BEkEXORwtIQ0l7Sq9L4k0RTj9Pa1CV
-Ub5S5VQLVTBWU1d1WJZZtlrWW/NdEV4vX0tgaGGDYp5juWTSZexnBWgeaTZqTWtlbHttkW6lb7lwzHHe
-cu9z/3UNdht3J3gyeTt6Q3tKfE99UX5Tf1OAUYFNgkeDQIQ3hS2GIIcSiAOI8onfisuLtoyfjYeObo9T
-kDeRGpH8kt6TvpSdlXuWWZc1mBGY7JnHmqGbepxTnSqeAp7Zn6+ghaFaoi6jAqPWpKmlfKZOpyCn8qjD
-qZSqY6szrAOs0q2hrm+vPbALsNixprJzs0C0DLTYtaS2cLc7uAe40rmdume7Mrv8vMe9kb5avyO/7cC2
-wX7CR8MPw9fEn8Vnxi7G9ce8yILJSMoOytPLmMxdzSHN5c6pz2zQL9Dy0bXSd9M40/rUu9V81jzW/de8
-2HzZO9n72rrbeNw33PbdtN5z3zLf8eCx4XHiMuLz47XkeOU95gLmyeeS6FzpJ+n16sXrl+xs7UPuHO73
-79bwt/Gb8oLza/RX9UX2Nfco+Bz5E/oM+wb8APz7/fr++v//AAABWwLzBGwF7QdpCOMKVwvVDUsOyBA+
-EbcTLRSpFhsXkxkIGn8b8x1lHtUgSSG1IyQkjyX4J2AoxiorK4os6S5GL50w8zJGM5c04zYuN3Q4tzn1
-OzI8bD2hPtNABEEwQlpDf0SjRcVG40f/SRpKMktHTFtNbE58T4xQmVGmUrFTvVTGVc5W11ffWOZZ7lr0
-W/pdAV4GXwxgEmEYYh1jImQnZSxmMmc2aDppP2pDa0ZsSW1Lbk5vT3BQcVByT3NOdEx1SHZEdz94OXkx
-eih7H3wUfQh9+37tf96AzoG9gquDl4SDhW2GVoc/iCaJDInyiteLuoyejYCOYY9CkCGRAJHekryTmZR1
-lVGWLJcGl+CYuZmSmmqbQpwZnPCdx56dn3OgSaEeofSiyaOepHKlR6YcpvCnxaiZqW6qQqsWq+uswK2U
-rmivPbASsOaxu7KQs2W0OrUQteW2ureQuGa5PboTuuq7wLyXvW++R78fv/jA0sGswobDYcQ9xRnF9sbU
-x7LIkslyylPLNcwYzPzN4c7Hz67QltF/0mnTVNRA1S7WHNcL1/vY7Nnf2tLbxty63bDept+c4JPhiuKB
-43jkb+Vm5lznUehG6TrqLOse7A7s/O3o7tLvuvCf8YPyZPNC9B/0+fXP9qT3dvhG+RT54Pqp+3D8N/z9
-/cH+g/9D//8AAAEDAiwDPwRVBW0GigehCLkJzwrnDAINFw4tD0AQWBFtEoETkxSoFbsWzRfeGO8Z/xsN
-HBsdKB4yHzkgQSFJIksjTiRQJU4mSidFKD0pNConKxgsCSz0Ld8uxy+tMJExczJTMzA0CjTjNbs2kDdk
-ODg5BznWOqQ7cTw+PQc90D6ZP2FAKUDvQbVCe0NBRAVEykWPRlNHF0fcSKBJZEopSu5Lskx3TT1OAU7G
-T4xQU1EYUd5SpVNsVDNU+lXBVolXUVgZWOFZqlpyWztcBFzNXZZeYF8qX/RgvmGJYlNjHmPqZLZlgmZO
-Zxpn52i0aYFqT2sca+psuG2GblRvIm/xcL9xjnJbcylz93TFdZN2YHctd/l4xXmRel17J3vxfLt9hX5N
-fxV/3YCkgWqCMIL1g7qEfoVChgWGx4eKiEuJDYnOio+LT4wPjM6Njo5Ojw2PzZCMkUySC5LLk4qUSpUK
-lcuWjJdNmA6Y0JmTmlabGZvdnKGdZ54tnvSfu6CDoUyiFqLho6ykeaVHpham5qe3qIqpXqo0qwur5Ky/
-rZyufK9fsEOxK7IWswWz+LTvteu27LfzuQG6FbswvFO9fr6yv/HBOsKNw+zFWMbOyFXJ5suIzTnO99DE
-0qLUj9aL2Jfas9zb3xXhXeOx5hLoger47XvwB/Kf9TP30vp7/TL//wAAbmRpbgAAAAAAAAY2AACXkQAA
-WLgAAFVBAACMFQAAKFcAABaoAABQDQAAVDkAAvCjAAK1wgABqPUAAwEAAAIAAAABAAUACgARABkAIwAv
-ADsASQBZAGkAewCOAKIAuADPAOcBAAEaATUBUgFvAY4BrgHPAfECFQI5Al8ChQKtAtYDAAMsA1gDhgO1
-A+QEFgRIBHwEsQTnBR4FVwWRBcwGCQZIBocGyAcLB08HlAfcCCQIbwi7CQkJWAmpCfwKUQqoCwELWwu3
-DBYMdgzZDT0NpA4MDncO4w9SD8MQNhCrESIRmxIWEpMTEhOTFBYUmxUiFasWNRbCF1EX4RhzGQcZnBo0
-Gs0baBwFHKQdRB3mHoofMB/YIIEhLSHaIoojOyPvJKUlXSYXJtQnkyhUKRkp3yqpK3UsRC0WLewuxC+f
-MH4xYDJGMy80HDUMNgA2+DfzOPI59Tr7PAY9FD4mPztAVUFyQpJDt0TfRgpHOUhsSaJK3EwZTVlOnU/l
-US9SfVPPVSRWfFfYWTdamVv/XWhe1WBEYbhjLmSnZiRnpWkoaq9sOG3Fb1Vw6XJ/dBh1tXdUePd6nXxG
-ffF/oIFSgwiEwIZ8iDuJ/YvCjYuPV5EnkvqU0ZasmIqaa5xRnjqgJ6IXpAymBKgAqgCsBK4LsBeyJrQ4
-tk64aLqEvKO+xMDnwwvFMMdWyXvLn83Bz+HR/dQX1i3YPtpK3FHeVOBS4krkPuYt6Bfp/uvg7b/vm/F1
-80z1IPby+Mj6m/xr/jn//wAAAAIABQALABIAHAAmADIAQABPAGAAcgCFAJoAsADHAOAA+gEVATIBTwFu
-AY8BsAHTAfcCHAJCAmoCkwK9AukDFQNDA3MDowPVBAgEPQRzBKoE4wUdBVkFlgXVBhUGVwabBuAHJwdv
-B7oIBghUCKQI9glKCaEJ+QpTCrALDwtwC9MMOQyhDQwNeQ3oDloOzw9GD78QOxC6ETsRvxJFEs0TWBPl
-FHUVBhWaFjEWyRdkGAAYnxk/GeIahxstG9YcgB0sHdoeih88H/AgpSFcIhYi0SOOJE0lDyXSJpgnXygp
-KPUpxCqVK2gsPi0XLfIu0C+xMJUxfDJlM1I0QjU1Nis3JDggOSA6IzspPDM9QD5QP2RAe0GVQrND1ET4
-RiBHS0h6SaxK4UwaTVZOlU/YUR5SZ1O0VQRWV1etWQZaYlvBXSNeh1/vYVlixmQ1ZadnG2iSagtrh20E
-boRwB3GLcxJ0m3Ymd7N5QnrTfGZ9/H+TgSuCxoRihgCHoIlAiuKMho4qj8+RdZMclMOWa5gUmb2bZp0P
-nrigYaIKo7OlXKcFqK2qVqv+raWvTbD0spu0QrXpt4+5NrrdvIS+LL/UwX3DJ8TSxn/ILsney5HNR87/
-0LvSe9Q/1gfX1dmo24LdYt9K4TnjMOUv5zfpSutl7YrvufHx9DP2fvjN+yX9iP//AAAAAwAJABMAIAAw
-AEIAVwBvAIkApgDFAOYBCgEwAVkBgwGwAd8CEQJFAnoCswLtAyoDaQOqA+4ENAR8BMcFFQVlBbcGDQZl
-Br8HHQd+B+IISQizCSEJkgoGCn8K+wt7C/8Mhw0TDaQOOQ7SD3AQEhC4EWQSExLHE38UPBT9FcIWixdY
-GCkY/RnWGrEbkRxzHVkeQh8tIBwhDiICIvoj9CTwJfAm8if2KP0qBysULCMtNC5IL18weDGUMrIz0zT1
-Nhs3QzhtOZk6xzv4PSs+YD+XQNBCDENKRIpFzUcSSFlJo0rvTD9NkU7mUD5RmVL4VFpVv1coWJVaBVt6
-XPJeb1/vYXRi/WSKZhtnsWlLauhsim4wb9lxh3M4dOx2pHheehx73H2ff2WBLIL2hMGGjohciiyL/Y3P
-j6KRdZNIlR2W8ZjFmpqcbp5BoBSh5qO3pYenVakhquuss653sDex9LOttWG3D7i4ulu7972NvxvAosIh
-w5jFCMZwx9HJKsp6y8LNBM5Az3TQoNHH0unUAtUX1ifXMNg12TXaMNso3BrdCt303tzfv+Ch4X7iWeMw
-5Abk1+Wo5nXnQugJ6NLplupa6xzr3Oyc7VjuFe7P74jwQfD48a/yZPMY88z0fvUx9eD2kPdB9/P4pflU
-+gT6s/tg/A78uv1k/g7+tf9a//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AABtbHVjAAAAAAAAAAUAAAAMZW5VUwAAABIAAABMZnJGUgAAAEIAAABeZGVERQAAABAAAACgamFKUAAA
-AA4AAACwZXNFUwAAABIAAAC+AEMAbwBsAG8AcgAgAEwAQwBEAMkAYwByAGEAbgAgAOAAIABjAHIAaQBz
-AHQAYQB1AHgAIABsAGkAcQB1AGkAZABlAHMAIABjAG8AdQBsAGUAdQByAEYAYQByAGIALQBMAEMARDCr
-MOkw/AAgAEwAQwBEAEwAQwBEACAAYwBvAGwAbwBybW1vZAAAAAAAAAYQAACcXwAAAADAHWWAAAAAAAAA
-AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA
-
-
-
-
-
- 3
- MCAwAA
-
-
-
- NSSwitch
-
- 400
- 75
-
- YES
-
-
-
- 2
- 20
- 20
- 20
-
-
- 67108864
- 0
-
-
-
- 1211912448
- 2
-
- NSImage
- NSSwitch
-
-
-
- 400
- 75
-
- YES
-
-
-
- 4
- 20
- 20
- 20
-
-
- 67108864
- 0
-
-
-
- 1211912448
- 2
-
-
-
- 400
- 75
-
- YES
-
-
-
- 8
- 20
- 20
- 20
-
-
- 67108864
- 0
-
-
-
- 1211912448
- 2
-
-
-
- 400
- 75
-
- YES
-
-
-
- 16
- 20
- 20
- 20
-
-
- 67108864
- 0
-
-
-
- 1211912448
- 2
-
-
-
- 400
- 75
-
- YES
-
-
-
- 32
- 20
- 20
- 20
-
-
- 67108864
- 0
-
-
-
- 1211912448
- 2
-
-
-
- 400
- 75
-
- YES
-
-
-
- 64
- 20
- 20
- 20
-
-
- 67108864
- 0
-
-
-
- 1211912448
- 2
-
-
-
- 400
- 75
-
- YES
-
-
-
- 128
- 19.955570000000002
- 14.95557
- 20
-
-
- 67108864
- 0
-
-
-
- 1211912448
- 2
-
-
-
- 400
- 75
-
- YES
-
-
-
- 3
- 2
-
- 6
- System
- controlBackgroundColor
-
-
-
- 6
- System
- gridColor
-
- 3
- MC41AA
-
-
- 17
- 306184192
-
-
- 4
- -1
- 0
- YES
- 0
- 1
-
-
- {{1, 17}, {184, 19}}
-
-
-
-
- 4
- YES
-
-
-
- -2147483392
- {{-100, -100}, {15, 37}}
-
- NO
- _doScroller:
-
-
- _doScroller:
- 0.19473679999999999
-
-
-
- -2147483392
- {{-100, -100}, {143, 15}}
-
- NO
- _doScroller:
-
- 1
-
- _doScroller:
- 0.99047620000000003
-
-
-
- 2304
-
-
-
- {{1, 0}, {184, 17}}
-
-
-
- YES
-
-
- {{95, 60}, {186, 37}}
-
-
- 133122
-
-
-
-
- QSAAAEEgAABBmAAAQZgAAA
- 0.25
- 4
- 1
-
-
- {372, 142}
-
- {{0, 0}, {1440, 878}}
- {213, 129}
- {10000000000000, 10000000000000}
- YES
-
-
- 7
- 2
- {{417, 204}, {537, 336}}
- 1886912512
- Window
- NSWindow
-
- View
-
-
- {213, 107}
-
-
- 256
-
-
-
- 256
- {{334, 12}, {82, 32}}
-
-
- 1001
- YES
-
- 67108864
- 134217728
- Cancel
-
-
- 1001
- -2038284288
- 1
-
-
- Gw
- 200
- 25
-
- NO
-
-
-
- 256
- {{416, 12}, {113, 32}}
-
- 1000
- YES
-
- -2080374784
- 134217728
- OK
-
-
- 1000
- -2038284288
- 1
-
-
- DQ
- 200
- 25
-
- NO
-
-
-
- 36
-
-
-
- 274
-
-
-
- 256
- {{109, 72}, {69, 17}}
-
-
- YES
-
- 67108864
- 272629760
- Top:
-
-
-
-
-
- NO
- 1
-
-
-
-
- 256
- {{109, 46}, {62, 17}}
-
-
- YES
-
- 67108864
- 272629760
- Qm90dG9tOgogCkxlZGdlciBMaW5lcw
-
-
-
-
-
- NO
- 1
-
-
-
-
- 256
- {{15, 72}, {92, 17}}
-
-
- YES
-
- 67108864
- 272629760
- Ledger Lines
-
-
-
-
-
- NO
- 1
-
-
-
- 256
- {{15, 14}, {114, 17}}
-
-
- YES
-
- 67108864
- 272629760
- Lyrics Stanzas:
-
-
-
-
-
- NO
- 1
-
-
-
- {{1, 1}, {244, 100}}
-
-
-
-
- {{17, 200}, {246, 116}}
-
-
- {0, 0}
-
- 67108864
- 0
- Display Options
-
-
-
-
-
- 1
- 0
- 2
- NO
-
-
-
- 36
-
-
-
- 274
-
-
-
- 268
- {{156, 153}, {60, 26}}
-
-
- YES
-
- 342884416
- 272630784
- 6
-
-
- YES
-
-
- 5
- YES
-
- -1
- 0
- 1
- 2
-
-
-
-
- 274
- {13, 84}
-
-
- YES
- NO
- YES
- tableViewAction:
-
-
-
- 10
- 10
- 1000
-
-
- 338690112
- 268436480
- 2
-
-
- YES
-
-
-
- 3
- YES
-
-
-
- 3
- 2
-
-
- 19
- tableViewAction:
- -765427712
-
-
-
- 1
- 15
- 0
- YES
- 0
- 1
-
-
- NO
- 1
-
-
-
- 268
- {{99, 158}, {54, 17}}
-
-
- YES
-
- 67108928
- 71304192
- Lyrics:
-
-
-
-
-
- NO
- 1
-
-
-
- 268
- {{97, 214}, {54, 17}}
-
-
- YES
-
- 67108928
- 272630784
-
-
-
-
-
-
- NO
- 1
-
-
-
- 268
- {{15, 185}, {69, 17}}
-
-
- YES
-
- 67108928
- 272630784
- Font Sizes
-
-
-
-
-
- NO
- 1
-
-
-
- 268
- {{99, 185}, {54, 17}}
-
-
- YES
-
- 67108928
- 71304192
- Chords:
-
-
-
-
-
- NO
- 1
-
-
-
- 268
- {{156, 181}, {60, 26}}
-
-
- YES
-
- 342884416
- 272630784
- 6
-
-
- YES
-
-
- 5
- YES
-
- 4
- 5
- 6
- 7
-
-
-
-
- 274
- {13, 84}
-
-
- YES
- NO
- YES
- tableViewAction:
-
-
-
- 10
- 10
- 1000
-
-
- 338690112
- 268436480
- 7
-
-
- YES
-
-
-
- 3
- YES
-
-
-
- 3
- 2
-
-
- 19
- tableViewAction:
- -765427712
-
-
-
- 1
- 15
- 0
- YES
- 0
- 1
-
-
- NO
- 1
-
-
-
- 268
- {{76, 103}, {77, 17}}
-
-
- YES
-
- 67108928
- 71304192
- Below Title:
-
-
-
-
-
- NO
- 1
-
-
-
- 268
- {{15, 130}, {55, 17}}
-
-
- YES
-
- 67108928
- 272630784
- Padding
-
-
-
-
-
- NO
- 1
-
-
-
- 268
- {{120, 130}, {33, 17}}
-
-
- YES
-
- 67108928
- 71304192
- Top:
-
-
-
-
-
- NO
- 1
-
-
-
- 268
- {{156, 126}, {60, 26}}
-
-
- YES
-
- 342884416
- 272630784
- 6
-
-
- YES
-
-
- 5
- YES
-
- 0
- 1
- 2
- 3
- 4
-
-
-
-
- 274
- {13, 105}
-
-
- YES
- NO
- YES
- tableViewAction:
-
-
-
- 10
- 10
- 1000
-
-
- 338690112
- 268436480
- 4
-
-
- YES
-
-
-
- 3
- YES
-
-
-
- 3
- 2
-
-
- 19
- tableViewAction:
- -765427712
-
-
-
- 1
- 15
- 0
- YES
- 0
- 1
-
-
- NO
- 1
-
-
-
- 268
- {{156, 99}, {60, 26}}
-
-
- YES
-
- 342884416
- 272630784
- 6
-
-
- YES
-
-
- 5
- YES
-
- 0
- 1
- 2
- 3
- 4
-
-
-
-
- 274
- {13, 105}
-
-
- YES
- NO
- YES
- tableViewAction:
-
-
-
- 10
- 10
- 1000
-
-
- 338690112
- 268436480
- 4
-
-
- YES
-
-
-
- 3
- YES
-
-
-
- 3
- 2
-
-
- 19
- tableViewAction:
- -765427712
-
-
-
- 1
- 15
- 0
- YES
- 0
- 1
-
-
- NO
- 1
-
-
-
- 268
- {{55, 75}, {98, 17}}
-
-
- YES
-
- 67108928
- 71304192
- Between Lines:
-
-
-
-
-
- NO
- 1
-
-
-
- 268
- {{156, 71}, {60, 26}}
-
-
- YES
-
- 342884416
- 272630784
- 6
-
-
- YES
-
-
- 5
- YES
-
- 0
- 1
- 2
- 3
- 4
-
-
-
-
- 274
- {13, 105}
-
-
- YES
- NO
- YES
- tableViewAction:
-
-
-
- 10
- 10
- 1000
-
-
- 338690112
- 268436480
- 4
-
-
- YES
-
-
-
- 3
- YES
-
-
-
- 3
- 2
-
-
- 19
- tableViewAction:
- -765427712
-
-
-
- 1
- 15
- 0
- YES
- 0
- 1
-
-
- NO
- 1
-
-
-
- 268
- {{59, 47}, {94, 17}}
-
-
- YES
-
- 67108928
- 71304192
- Below Chords:
-
-
-
-
-
- NO
- 1
-
-
-
- 268
- {{156, 43}, {60, 26}}
-
-
- YES
-
- 342884416
- 272630784
- 6
-
-
- YES
-
-
- 5
- YES
-
- 0
- 1
- 2
- 3
- 4
-
-
-
-
- 274
- {13, 105}
-
-
- YES
- NO
- YES
- tableViewAction:
-
-
-
- 10
- 10
- 1000
-
-
- 338690112
- 268436480
- 4
-
-
- YES
-
-
-
- 3
- YES
-
-
-
- 3
- 2
-
-
- 19
- tableViewAction:
- -765427712
-
-
-
- 1
- 15
- 0
- YES
- 0
- 1
-
-
- NO
- 1
-
-
-
- 268
- {{65, 19}, {88, 17}}
-
-
- YES
-
- 67108928
- 71304192
- Above Lyrics:
-
-
-
-
-
- NO
- 1
-
-
-
- 268
- {{156, 15}, {60, 26}}
-
-
- YES
-
- 342884416
- 272630784
- 6
-
-
- YES
-
-
- 5
- YES
-
- 0
- 1
- 2
- 3
- 4
-
-
-
-
- 274
- {13, 105}
-
-
- YES
- NO
- YES
- tableViewAction:
-
-
-
- 10
- 10
- 1000
-
-
- 338690112
- 268436480
- 4
-
-
- YES
-
-
-
- 3
- YES
-
-
-
- 3
- 2
-
-
- 19
- tableViewAction:
- -765427712
-
-
-
- 1
- 15
- 0
- YES
- 0
- 1
-
-
- NO
- 1
-
-
-
- 268
- {{156, 209}, {60, 26}}
-
-
- YES
-
- 342884416
- 272630784
- 19.5
-
-
- YES
-
-
- 5
- YES
-
- 16
- 18
- 20
- 22
-
-
-
-
- 274
- {13, 84}
-
-
- YES
- NO
- YES
- tableViewAction:
-
-
-
- 10
- 10
- 1000
-
-
- 338690112
- 268436480
- 22
-
-
- YES
-
-
-
- 3
- YES
-
-
-
- 3
- 2
-
-
- 19
- tableViewAction:
- -765427712
-
-
-
- 1
- 15
- 0
- YES
- 0
- 1
-
-
- NO
- 1
-
-
-
- 268
- {{15, 214}, {69, 17}}
-
-
- YES
-
- 67108928
- 272630784
- Staff Size
-
-
-
-
-
- NO
- 1
-
-
- {{1, 1}, {231, 243}}
-
-
-
-
- {{293, 56}, {233, 259}}
-
-
- {0, 0}
-
- 67108864
- 0
- Print Options
-
-
-
-
-
- 1
- 0
- 2
- NO
-
-
- {537, 336}
-
-
- {{0, 0}, {1440, 878}}
- {213, 129}
- {10000000000000, 10000000000000}
- YES
-
-
- VLLogWindow
-
-
- VLPDFWindow
-
-
- NSApplication
-
-
- YES
-
-
-
-
-
-
- window
-
-
-
- 158
-
-
-
- sheetView
-
-
-
- 100385
-
-
-
- progressIndicator
-
-
-
- 100513
-
-
-
- logWin
-
-
-
- 100519
-
-
-
- pdfWin
-
-
-
- 100520
-
-
-
- displaySheet
-
-
-
- 100526
-
-
-
- printDocument:
-
-
-
- 100503
-
-
-
- showLog:
-
-
-
- 100504
-
-
-
- zoomIn:
-
-
-
- 100505
-
-
-
- zoomOut:
-
-
-
- 100506
-
-
-
- showOutput:
-
-
-
- 100508
-
-
-
- editDisplayOptions:
-
-
-
- 100510
-
-
-
- playStop:
-
-
-
- 100514
-
-
-
- playMusic:
-
-
-
- 100515
-
-
-
- playMusic:
-
-
-
- 100516
-
-
-
- playMusic:
-
-
-
- 100533
-
-
-
- delegate
-
-
-
- 17
-
-
-
- setTime:
-
-
-
- 69
-
-
-
- setKey:
-
-
-
- 70
-
-
-
- setDivisions:
-
-
-
- 85
-
-
-
- hideFieldEditor:
-
-
-
- 110
-
-
-
- hideFieldEditor:
-
-
-
- 111
-
-
-
- fFieldEditor
-
-
-
- 134
-
-
-
- fRepeatSheet
-
-
-
- 208
-
-
-
- fRepeatMsg
-
-
-
- 212
-
-
-
- fEndingSheet
-
-
-
- 240
-
-
-
- fEndingMsg
-
-
-
- 241
-
-
-
- selectGroove:
-
-
-
- 260
-
-
-
- fGrooveMenu
-
-
-
- 262
-
-
-
- selectGroove:
-
-
-
- 265
-
-
-
- endSheetWithButton:
-
-
-
- 331
-
-
-
- endSheetWithButton:
-
-
-
- 332
-
-
-
- endSheetWithButton:
-
-
-
- 333
-
-
-
- endSheetWithButton:
-
-
-
- 334
-
-
-
- endSheetWithButton:
-
-
-
- 335
-
-
-
- endSheetWithButton:
-
-
-
- 336
-
-
-
- endSheetWithButton:
-
-
-
- 337
-
-
-
- endSheetWithButton:
-
-
-
- 338
-
-
-
- fKeyMenu
-
-
-
- 100348
-
-
-
- fTimeMenu
-
-
-
- 100349
-
-
-
- fDivisionMenu
-
-
-
- 100350
-
-
-
- selectText:
-
-
-
- 112
-
-
-
- value: editTarget.stringValue
-
-
-
-
-
- value: editTarget.stringValue
- value
- editTarget.stringValue
- 2
-
-
- 135
-
-
-
- delegate
-
-
-
- 136
-
-
-
- nextKeyView
-
-
-
- 100386
-
-
-
- hidden: editTarget
-
-
-
-
-
- hidden: editTarget
- hidden
- editTarget
-
- NSValueTransformerName
- NSIsNil
-
- 2
-
-
- 141
-
-
-
- hidden2: editTarget.hidden
-
-
-
-
-
- hidden2: editTarget.hidden
- hidden2
- editTarget.hidden
-
-
-
-
-
-
-
- 2
-
-
- 100528
-
-
-
- value: document.songTitle
-
-
-
-
-
- value: document.songTitle
- value
- document.songTitle
- 2
-
-
- 168
-
-
-
- value: document.songComposer
-
-
-
-
-
- value: document.songComposer
- value
- document.songComposer
- 2
-
-
- 169
-
-
-
- value: document.songLyricist
-
-
-
-
-
- value: document.songLyricist
- value
- document.songLyricist
- 2
-
-
- 170
-
-
-
- value: document.songTempo
-
-
-
-
-
- value: document.songTempo
- value
- document.songTempo
- 2
-
-
- 180
-
-
-
- value: document.songTempo
-
-
-
-
-
- value: document.songTempo
- value
- document.songTempo
- 2
-
-
- 179
-
-
-
- value: document.repeatVolta
-
-
-
-
-
- value: document.repeatVolta
- value
- document.repeatVolta
- 2
-
-
- 203
-
-
-
- value: document.repeatVolta
-
-
-
-
-
- value: document.repeatVolta
- value
- document.repeatVolta
- 2
-
-
- 204
-
-
-
- dataSource
-
-
-
- 247
-
-
-
- delegate
-
-
-
- 248
-
-
-
- selectedIndex: sheetView.numTopLedgers
-
-
-
-
-
- selectedIndex: sheetView.numTopLedgers
- selectedIndex
- sheetView.numTopLedgers
- 2
-
-
- 100523
-
-
-
- selectedIndex: sheetView.numBotLedgers
-
-
-
-
-
- selectedIndex: sheetView.numBotLedgers
- selectedIndex
- sheetView.numBotLedgers
- 2
-
-
- 100524
-
-
-
- selectedIndex: sheetView.numStanzas
-
-
-
-
-
- selectedIndex: sheetView.numStanzas
- selectedIndex
- sheetView.numStanzas
- 2
-
-
- 100525
-
-
-
- value: document.chordSize
-
-
-
-
-
- value: document.chordSize
- value
- document.chordSize
- 2
-
-
- 100381
-
-
-
- value: document.lyricSize
-
-
-
-
-
- value: document.lyricSize
- value
- document.lyricSize
- 2
-
-
- 100450
-
-
-
- value: document.staffSize
-
-
-
-
-
- value: document.staffSize
- value
- document.staffSize
- 2
-
-
- 100384
-
-
-
- value: document.topPadding
-
-
-
-
-
- value: document.topPadding
- value
- document.topPadding
- 2
-
-
- 100481
-
-
-
- value: document.titlePadding
-
-
-
-
-
- value: document.titlePadding
- value
- document.titlePadding
- 2
-
-
- 100482
-
-
-
- value: document.staffPadding
-
-
-
-
-
- value: document.staffPadding
- value
- document.staffPadding
- 2
-
-
- 100483
-
-
-
- value: document.chordPadding
-
-
-
-
-
- value: document.chordPadding
- value
- document.chordPadding
- 2
-
-
- 100484
-
-
-
- value: document.lyricPadding
-
-
-
-
-
- value: document.lyricPadding
- value
- document.lyricPadding
- 2
-
-
- 100485
-
-
-
- sheetWin
-
-
-
- 100521
-
-
-
-
-
- 0
-
-
-
-
-
- -2
-
-
- File's Owner
-
-
- -1
-
-
- First Responder
-
-
- 5
-
-
-
-
-
-
- Sheet Music Window
-
-
- 6
-
-
-
-
-
-
-
-
-
- 102
-
-
-
-
-
-
-
-
-
- 114
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 130
-
-
-
-
-
-
-
-
-
- 22
-
-
-
-
- 196
-
-
-
-
-
- Repeat
-
-
- 197
-
-
-
-
-
-
-
-
-
-
-
-
-
- 198
-
-
-
-
-
-
-
- 199
-
-
-
-
-
-
-
- 201
-
-
-
-
-
-
-
- 202
-
-
-
-
-
-
-
- 205
-
-
-
-
-
-
-
- 206
-
-
-
-
-
-
-
- 207
-
-
-
-
-
-
-
- 216
-
-
-
-
-
- Endings
-
-
- 217
-
-
-
-
-
-
-
-
-
-
-
- 218
-
-
-
-
-
-
-
- 219
-
-
-
-
-
-
-
- 220
-
-
-
-
-
-
-
- 221
-
-
-
-
-
-
-
- 222
-
-
-
-
-
-
-
-
-
-
- 223
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 224
-
-
-
-
-
-
-
- 225
-
-
-
-
-
-
-
- 233
-
-
-
-
- 226
-
-
-
-
-
-
-
- 234
-
-
-
-
- 227
-
-
-
-
-
-
-
- 235
-
-
-
-
- 228
-
-
-
-
-
-
-
- 236
-
-
-
-
- 229
-
-
-
-
-
-
-
- 237
-
-
-
-
- 230
-
-
-
-
-
-
-
- 238
-
-
-
-
- 231
-
-
-
-
-
-
-
- 239
-
-
-
-
- 266
-
-
-
-
-
- Display
-
-
- 267
-
-
-
-
-
-
-
-
-
-
- 268
-
-
-
-
-
-
-
- 270
-
-
-
-
-
-
-
- 100198
-
-
-
-
- 100199
-
-
-
-
-
-
-
- 100201
-
-
-
-
- 100202
-
-
-
-
- 100205
-
-
-
-
- 100206
-
-
-
-
- 100207
-
-
-
-
- 100218
-
-
-
-
- 100219
-
-
-
-
- 100220
-
-
-
-
- 100221
-
-
-
-
- 100268
-
-
-
-
- 100270
-
-
-
-
- 100224
-
-
-
-
- 200
-
-
-
-
- 100340
-
-
-
-
- 100341
-
-
-
-
- 100342
-
-
-
-
- 100343
-
-
-
-
- 100344
-
-
-
-
- -3
-
-
- Application
-
-
- 97
-
-
-
-
-
-
-
- 100097
-
-
-
-
- 100
-
-
-
-
-
-
-
- 100100
-
-
-
-
- 101
-
-
-
-
-
-
-
- 100101
-
-
-
-
- 23
-
-
-
-
-
-
-
- 100023
-
-
-
-
-
-
-
- 24
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 25
-
-
-
-
- 26
-
-
-
-
- 27
-
-
-
-
- 29
-
-
-
-
- 30
-
-
-
-
- 31
-
-
-
-
- 32
-
-
-
-
- 33
-
-
-
-
- 34
-
-
-
-
- 35
-
-
-
-
- 36
-
-
-
-
- 37
-
-
-
-
- 38
-
-
-
-
- 39
-
-
-
-
- 40
-
-
-
-
- 43
-
-
-
-
- 44
-
-
-
-
- 45
-
-
-
-
- 46
-
-
-
-
- 47
-
-
-
-
- 48
-
-
-
-
- 61
-
-
-
-
-
-
-
- 100061
-
-
-
-
-
-
-
- 62
-
-
-
-
-
-
-
-
-
-
-
- 63
-
-
-
-
- 64
-
-
-
-
- 65
-
-
-
-
- 66
-
-
-
-
- 67
-
-
-
-
- 73
-
-
-
-
-
-
-
- 100073
-
-
-
-
-
-
-
- 74
-
-
-
-
-
-
-
-
-
-
-
-
- 75
-
-
-
-
- 76
-
-
-
-
- 77
-
-
-
-
- 78
-
-
-
-
- 79
-
-
-
-
- 80
-
-
-
-
- 162
-
-
-
-
-
-
-
- 100162
-
-
-
-
- 163
-
-
-
-
-
-
-
- 100163
-
-
-
-
- 164
-
-
-
-
-
-
-
- 100164
-
-
-
-
- 165
-
-
-
-
-
-
-
- 100165
-
-
-
-
- 166
-
-
-
-
-
-
-
- 100166
-
-
-
-
- 167
-
-
-
-
-
-
-
- 100167
-
-
-
-
- 176
-
-
-
-
-
-
-
- 100176
-
-
-
-
- 177
-
-
-
-
-
-
-
- 100177
-
-
-
-
- 178
-
-
-
-
-
-
-
- 100178
-
-
-
-
- 181
-
-
-
-
-
-
-
- 100181
-
-
-
-
- 254
-
-
-
-
-
-
-
- 100254
-
-
-
-
-
-
-
- 255
-
-
-
-
-
-
-
-
-
-
- 256
-
-
-
-
- 257
-
-
-
-
- 258
-
-
-
-
- 259
-
-
-
-
- 100351
-
-
-
-
-
-
-
-
-
-
-
-
-
- 305
-
-
-
-
-
-
-
- 100305
-
-
-
-
- 290
-
-
-
-
-
-
-
- 100290
-
-
-
-
-
-
-
- 291
-
-
-
-
-
-
-
-
-
-
-
- 292
-
-
-
-
- 293
-
-
-
-
- 294
-
-
-
-
- 295
-
-
-
-
- 303
-
-
-
-
- 296
-
-
-
-
-
-
-
- 100296
-
-
-
-
- 306
-
-
-
-
-
-
-
- 100306
-
-
-
-
-
-
-
- 307
-
-
-
-
-
-
-
-
-
-
-
- 308
-
-
-
-
- 309
-
-
-
-
- 310
-
-
-
-
- 311
-
-
-
-
- 312
-
-
-
-
- 269
-
-
-
-
-
-
-
- 100269
-
-
-
-
- 313
-
-
-
-
-
-
-
- 100313
-
-
-
-
- 314
-
-
-
-
-
-
-
- 100314
-
-
-
-
-
-
-
- 315
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 316
-
-
-
-
- 317
-
-
-
-
- 318
-
-
-
-
- 319
-
-
-
-
- 320
-
-
-
-
- 321
-
-
-
-
- 322
-
-
-
-
- 323
-
-
-
-
- 324
-
-
-
-
- 100368
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 100358
-
-
-
-
-
-
-
- 100361
-
-
-
-
- 100359
-
-
-
-
-
-
-
- 100360
-
-
-
-
- 100364
-
-
-
-
-
-
-
- 100365
-
-
-
-
- 100354
-
-
-
-
-
-
-
- 100355
-
-
-
-
- 100356
-
-
-
-
-
-
-
- 100357
-
-
-
-
- 100352
-
-
-
-
-
-
-
- 100353
-
-
-
-
- 100363
-
-
-
-
-
-
-
- 100366
-
-
-
-
- 100362
-
-
-
-
-
-
-
- 100367
-
-
-
-
- 100371
-
-
-
-
- 100416
-
-
-
-
- 100417
-
-
-
-
- 100419
-
-
-
-
- 100420
-
-
-
-
- 100421
-
-
-
-
- 100422
-
-
-
-
- 100423
-
-
-
-
- 100425
-
-
-
-
- 100426
-
-
-
-
- 100427
-
-
-
-
- 100452
-
-
-
-
-
-
-
- 100453
-
-
-
-
-
-
-
- 100454
-
-
-
-
-
-
-
- 100455
-
-
-
-
-
-
-
- 100456
-
-
-
-
- 100457
-
-
-
-
- 100458
-
-
-
-
- 100459
-
-
-
-
- 100463
-
-
-
-
-
-
-
- 100464
-
-
-
-
- 100466
-
-
-
-
-
-
-
- 100467
-
-
-
-
-
-
-
- 100468
-
-
-
-
- 100469
-
-
-
-
- 100471
-
-
-
-
-
-
-
- 100472
-
-
-
-
-
-
-
- 100473
-
-
-
-
- 100474
-
-
-
-
- 100476
-
-
-
-
-
-
-
- 100477
-
-
-
-
-
-
-
- 100478
-
-
-
-
- 100479
-
-
-
-
- 100486
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 100489
-
-
-
-
- 100490
-
-
-
-
- 100491
-
-
-
-
- 100493
-
-
-
-
- 100494
-
-
-
-
- 100495
-
-
-
-
- 100496
-
-
-
-
- 100499
-
-
-
-
-
-
-
- 100497
-
-
-
-
-
-
-
- 100498
-
-
-
-
- 100500
-
-
-
-
-
- Toolbar Item - >>
-
-
- 100501
-
-
-
-
-
-
-
- 100502
-
-
-
-
- 100492
-
-
-
-
- 100509
-
-
-
-
- 100512
-
-
-
-
-
-
-
- 100511
-
-
-
-
- 100517
-
-
-
-
- 100518
-
-
- PDF Window
-
-
- 100529
-
-
-
-
-
-
-
- 100530
-
-
-
-
-
-
-
- 100531
-
-
-
-
-
-
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
-
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
-
- 0
- 1
- 2
- 3
- 4
-
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
-
- 0
- 1
- 2
- 3
- 4
-
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
-
- 0
- 1
- 2
- 3
- 4
-
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
-
- 0
- 1
- 2
- 3
- 4
-
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
-
- 0
- 1
- 2
- 3
- 4
-
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- VLToolbarButton
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- VLToolbarButton
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- VLToolbarButton
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- {{245, 314}, {543, 189}}
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- {{0, 337}, {971, 397}}
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
-
-
-
-
-
- 100533
-
-
-
-
- FirstResponder
-
- playMusic:
- id
-
-
- playMusic:
-
- playMusic:
- id
-
-
-
- IBUserSource
-
-
-
-
- VLLogWindow
- NSWindowController
-
- log
- id
-
-
- log
-
- log
- id
-
-
-
- IBProjectSource
- ../Sources/VLLogWindow.h
-
-
-
- VLLogWindow
-
- printDocument:
- id
-
-
- printDocument:
-
- printDocument:
- id
-
-
-
- IBProjectSource
- ../Sources/VLLogWindow.mm
-
-
-
- VLPDFWindow
- NSWindowController
-
- PDFView
- NSWindowController
-
-
-
- pdfView
- PDFView
-
-
- sheetWin
- NSWindowController
-
-
-
- IBProjectSource
- ../Sources/VLPDFWindow.h
-
-
-
- VLPDFWindow
-
- id
- id
-
-
-
- printDocument:
- id
-
-
- showWindow:
- id
-
-
-
- IBProjectSource
- ../Sources/VLPDFWindow.mm
-
-
-
- VLSheetView
- NSView
-
- id
- id
- id
- id
- id
- id
- id
- id
- id
-
-
-
- endSheetWithButton:
- id
-
-
- hideFieldEditor:
- id
-
-
- selectGroove:
- id
-
-
- setDivisions:
- id
-
-
- setKey:
- id
-
-
- setTime:
- id
-
-
- transposeOctave:
- id
-
-
- zoomIn:
- id
-
-
- zoomOut:
- id
-
-
-
- id
- id
- id
- id
- id
- id
- id
- id
- id
-
-
-
- fDivisionMenu
- id
-
-
- fEndingMsg
- id
-
-
- fEndingSheet
- id
-
-
- fFieldEditor
- id
-
-
- fGrooveMenu
- id
-
-
- fKeyMenu
- id
-
-
- fRepeatMsg
- id
-
-
- fRepeatSheet
- id
-
-
- fTimeMenu
- id
-
-
-
- IBProjectSource
- ../Sources/VLSheetView.h
-
-
-
- VLSheetView
-
- id
- id
- id
- id
- id
- id
- id
- id
- id
-
-
-
- endSheetWithButton:
- id
-
-
- hideFieldEditor:
- id
-
-
- selectGroove:
- id
-
-
- setDivisions:
- id
-
-
- setKey:
- id
-
-
- setTime:
- id
-
-
- transposeOctave:
- id
-
-
- zoomIn:
- id
-
-
- zoomOut:
- id
-
-
-
- IBProjectSource
- ../Sources/VLSheetView.mm
-
-
-
- VLSheetView
-
- id
- id
- id
- id
- id
- id
- id
- id
- id
- id
-
-
-
- copy:
- id
-
-
- cut:
- id
-
-
- delete:
- id
-
-
- editRepeat:
- id
-
-
- editRepeatEnding:
- id
-
-
- insertBreak:
- id
-
-
- insertJumpToCoda:
- id
-
-
- insertMeasure:
- id
-
-
- insertStartCoda:
- id
-
-
- paste:
- id
-
-
-
- IBProjectSource
- ../Sources/VLSheetViewSelection.h
-
-
-
- VLSheetView
-
- id
- id
- id
- id
- id
- id
- id
- id
- id
- id
- id
-
-
-
- copy:
- id
-
-
- cut:
- id
-
-
- delete:
- id
-
-
- editRepeat:
- id
-
-
- editRepeatEnding:
- id
-
-
- insertBreak:
- id
-
-
- insertJumpToCoda:
- id
-
-
- insertMeasure:
- id
-
-
- insertStartCoda:
- id
-
-
- paste:
- id
-
-
- selectAll:
- id
-
-
-
- IBProjectSource
- ../Sources/VLSheetViewSelection.mm
-
-
-
- VLSheetWindow
- NSWindowController
-
- id
- id
- id
- id
- id
- id
- id
- id
-
-
-
- adjustTempo:
- id
-
-
- playMusic:
- id
-
-
- playStop:
- id
-
-
- showOutput:
- id
-
-
- stop:
- id
-
-
- togglePlayElements:
- id
-
-
- zoomIn:
- id
-
-
- zoomOut:
- id
-
-
-
- NSWindow
- VLLogWindow
- VLPDFWindow
- NSProgressIndicator
- VLSheetView
-
-
-
- displaySheet
- NSWindow
-
-
- logWin
- VLLogWindow
-
-
- pdfWin
- VLPDFWindow
-
-
- progressIndicator
- NSProgressIndicator
-
-
- sheetView
- VLSheetView
-
-
-
- IBProjectSource
- ../Sources/VLSheetWindow.h
-
-
-
- VLSheetWindow
-
- id
- id
- id
- id
- id
- id
- id
- id
- id
- id
-
-
-
- adjustTempo:
- id
-
-
- editDisplayOptions:
- id
-
-
- playMusic:
- id
-
-
- playStop:
- id
-
-
- showLog:
- id
-
-
- showOutput:
- id
-
-
- stop:
- id
-
-
- togglePlayElements:
- id
-
-
- zoomIn:
- id
-
-
- zoomOut:
- id
-
-
-
- IBProjectSource
- ../Sources/VLSheetWindow.mm
-
-
-
- VLToolbarButton
- NSButton
-
- IBProjectSource
- ../Sources/VLToolbarButton.h
-
-
-
-
- 0
- IBCocoaFramework
- NO
-
- com.apple.InterfaceBuilder.CocoaPlugin.macosx
-
-
-
- com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3
-
-
- YES
- 3
-
- {12, 12}
- {10, 2}
- {15, 15}
- {32, 32}
- {512, 512}
- {48, 48}
- {512, 512}
- {512, 512}
- {512, 512}
- {512, 512}
- {512, 512}
- {512, 512}
- {512, 512}
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Title:
+
+
+
+
+
+
+
+
+
+
+ Composer:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Groove:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NSIsNil
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Repeat measures 1 though 14
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ending in measures 1 through 10 applies to repeats:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bottom:
+
+Ledger Lines
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -1
+ 0
+ 1
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 4
+ 5
+ 6
+ 7
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 1
+ 2
+ 3
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 1
+ 2
+ 3
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 1
+ 2
+ 3
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 1
+ 2
+ 3
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 1
+ 2
+ 3
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 16
+ 18
+ 20
+ 22
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Filters/VLMusicXMLType.writer b/Filters/VLMusicXMLType.writer
index 612bfed..f5f374d 100755
--- a/Filters/VLMusicXMLType.writer
+++ b/Filters/VLMusicXMLType.writer
@@ -575,22 +575,15 @@ def _score
return score
end
-NEW_REXML = REXML::VERSION > "3.1.7"
-
xml = REXML::Document.new
xml.add REXML::XMLDecl.new('1.0', 'UTF-8')
xml.add REXML::DocType.new(['score-partwise', 'PUBLIC',
- '"-//Recordare//DTD MusicXML 1.1 Partwise//EN"',
- NEW_REXML ? 'http://www.musicxml.org/dtds/partwise.dtd' :
- '"http://www.musicxml.org/dtds/partwise.dtd"'])
+ '-//Recordare//DTD MusicXML 1.1 Partwise//EN',
+ 'http://www.musicxml.org/dtds/partwise.dtd'])
xml.add_element(_score)
-if NEW_REXML
- formatter = REXML::Formatters::Pretty.new(2)
- formatter.compact = true
- formatter.write(xml, $stdout)
-else
- xml.write($stdout, 0)
-end
+formatter = REXML::Formatters::Pretty.new(2)
+formatter.compact = true
+formatter.write(xml, $stdout)
# Local Variables:
# mode:ruby
diff --git a/Sources/VLDocument.mm b/Sources/VLDocument.mm
index 88100b9..da75366 100644
--- a/Sources/VLDocument.mm
+++ b/Sources/VLDocument.mm
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2005-2011 Matthias Neeracher
+// Copyright © 2005-2018 Matthias Neeracher
//
#import "VLDocument.h"
@@ -470,7 +470,7 @@
NewMusicSequence(&musicSequence);
MusicSequenceFileLoad(musicSequence, (CFURLRef)[self fileURLWithExtension:@"mid"],
- 0, 0);
+ kMusicSequenceFile_MIDIType, 0);
size_t countIn = 0;
if (playElements & kVLPlayCountIn)
diff --git a/Sources/VLLilypondWriter.cpp b/Sources/VLLilypondWriter.cpp
index 42c561c..2e8ba1a 100644
--- a/Sources/VLLilypondWriter.cpp
+++ b/Sources/VLLilypondWriter.cpp
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2007-2011 Matthias Neeracher
+// Copyright © 2007-2018 Matthias Neeracher
//
#include "VLLilypondWriter.h"
@@ -41,7 +41,7 @@ void VLLilypondWriter::Visit(VLSong & song)
fMelody += fSeenEnding ? "}}\n" : "}\n";
}
-void VLLilypondWriter::VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas)
+void VLLilypondWriter::VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas)
{
char measNo[8];
if (!(m % 4))
@@ -166,8 +166,10 @@ void VLLilypondWriter::VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas
fAccum.erase(trip, 15);
while ((trip = fAccum.find(" ~ } \\times 2/3 { ")) != std::string::npos)
fAccum.erase(trip+2, 17);
- while ((trip = fAccum.find(" ~.")) != std::string::npos)
- fAccum.erase(trip, 2);
+ while ((trip = fAccum.find("~.")) != std::string::npos)
+ fAccum.erase(trip, 1);
+ while ((trip = fAccum.find("~(.")) != std::string::npos)
+ fAccum.replace(trip, 3, ".(");
if (fSong->fGoToCoda == m+1)
fAccum += "\n"
@@ -257,25 +259,43 @@ void VLLilypondWriter::VisitNote(VLLyricsNote & n)
nm = "s";
}
const char * space = fAccum.size() ? " " : "";
- const char * tie = n.fTied & VLNote::kTiedWithNext ? " ~" : "";
+ const char * tie;
+ switch (n.fTied & (VLNote::kTiedWithNext|VLNote::kSlurWithNext|VLNote::kStartSlur|VLNote::kEndSlur)) {
+ case VLNote::kTiedWithNext|VLNote::kSlurWithNext|VLNote::kStartSlur:
+ tie = "(";
+ break;
+ case VLNote::kTiedWithNext|VLNote::kStartSlur:
+ tie = "~(";
+ break;
+ case VLNote::kTiedWithNext:
+ tie = "~";
+ break;
+ case VLNote::kEndSlur:
+ tie = ")";
+ break;
+ case VLNote::kTiedWithNext|VLNote::kSlurWithNext:
+ default:
+ tie = "";
+ break;
+ }
char duration[32];
- if (n.fTied == VLNote::kTiedWithPrev && n.fVisual == fPrevNote.fVisual+1
+ if ((n.fTied & VLNote::kTiedWithPrev) && n.fVisual == fPrevNote.fVisual+1
&& n.fPitch == fPrevNote.fPitch
- )
+ ) {
strcpy(duration, ".");
- else if (n.fVisual & VLNote::kTupletMask)
- sprintf(duration, "%s\\times %d/%d { %s%d%s }",
- space, VLNote::TupletDenom(n.fVisual), VLNote::TupletNum(n.fVisual),
+ } else if (n.fVisual & VLNote::kTupletMask) {
+ sprintf(duration, "%s\\times %d/%d { %s%d%s }",
+ space, VLNote::TupletDenom(n.fVisual), VLNote::TupletNum(n.fVisual),
nm.c_str(), kValue[n.fVisual & VLNote::kNoteHeadMask], tie);
- else
- sprintf(duration, "%s%s%d%s",
- space, nm.c_str(), kValue[n.fVisual & VLNote::kNoteHeadMask], tie);
+ } else {
+ sprintf(duration, "%s%s%d%s",
+ space, nm.c_str(), kValue[n.fVisual & VLNote::kNoteHeadMask], tie);
+ }
+ fAccum += duration;
+ fPrevNote = n;
- fAccum += duration;
- fPrevNote= n;
-
- if (n.fPitch != VLNote::kNoPitch && !(n.fTied & VLNote::kTiedWithPrev))
- for (size_t i=0; i(fStanza), n.fVisual, fAt};
MusicTrackNewUserEvent(fTrack, fNoteTime,
reinterpret_cast(&event));
}
@@ -109,7 +109,7 @@ void VLMIDIWriter::VisitNote(VLLyricsNote & n)
void VLMIDIWriter::VisitChord(VLChord & c)
{
if (c.fPitch != VLNote::kNoPitch) {
- VLMIDIUserEvent event = {12, 0, fStanza, 0, fAt};
+ VLMIDIUserEvent event = {12, 0, static_cast(fStanza), 0, fAt};
MusicTrackNewUserEvent(fTrack, fChordTime,
reinterpret_cast(&event));
}
diff --git a/Sources/VLMIDIWriter.h b/Sources/VLMIDIWriter.h
index 78d01ae..429a0f8 100644
--- a/Sources/VLMIDIWriter.h
+++ b/Sources/VLMIDIWriter.h
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2008-2011 Matthias Neeracher
+// Copyright © 2008-2018 Matthias Neeracher
//
#include "VLModel.h"
@@ -35,10 +35,10 @@ public:
VLMIDIWriter(MusicSequence music, size_t countIn)
: fMusic(music), fCountIn(countIn) {}
- virtual void Visit(VLSong & song);
- virtual void VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas);
- virtual void VisitNote(VLLyricsNote & n);
- virtual void VisitChord(VLChord & c);
+ void Visit(VLSong & song) override;
+ void VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas) override;
+ void VisitNote(VLLyricsNote & n) override;
+ void VisitChord(VLChord & c) override;
private:
MusicSequence fMusic;
size_t fCountIn;
diff --git a/Sources/VLMMAWriter.cpp b/Sources/VLMMAWriter.cpp
index c8bb018..a774f5c 100644
--- a/Sources/VLMMAWriter.cpp
+++ b/Sources/VLMMAWriter.cpp
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2007 Matthias Neeracher
+// Copyright © 2007-2018 Matthias Neeracher
//
#include "VLMMAWriter.h"
@@ -22,7 +22,7 @@ void VLMMAWriter::Visit(VLSong & song)
VisitMeasures(song, true);
}
-void VLMMAWriter::VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas)
+void VLMMAWriter::VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas)
{
if (fPreview)
if (meas.fPropIdx < fBeginSection || meas.fPropIdx >= fEndSection)
diff --git a/Sources/VLMMAWriter.h b/Sources/VLMMAWriter.h
index 5079719..ae9f301 100644
--- a/Sources/VLMMAWriter.h
+++ b/Sources/VLMMAWriter.h
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2007 Matthias Neeracher
+// Copyright © 2007-2018 Matthias Neeracher
//
#include "VLModel.h"
@@ -16,10 +16,10 @@ public:
: fPreview(preview), fBeginSection(beginSection), fEndSection(endSection)
{}
- virtual void Visit(VLSong & song);
- virtual void VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas);
- virtual void VisitNote(VLLyricsNote & n);
- virtual void VisitChord(VLChord & c);
+ void Visit(VLSong & song) override;
+ void VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas) override;
+ void VisitNote(VLLyricsNote & n) override;
+ void VisitChord(VLChord & c) override;
const std::string & Measures() const { return fMeasures; }
private:
diff --git a/Sources/VLModel.cpp b/Sources/VLModel.cpp
index 24a3933..64079c1 100644
--- a/Sources/VLModel.cpp
+++ b/Sources/VLModel.cpp
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2005-2017 Matthias Neeracher
+// Copyright © 2005-2018 Matthias Neeracher
//
#include "VLModel.h"
@@ -107,11 +107,13 @@ VLNote::VLNote(VLFraction dur, int pitch, uint16_t visual)
std::string VLNote::Name(uint16_t accidental) const
{
- if (uint16_t acc = (fVisual & kAccidentalsMask))
- if (acc == kWantNatural)
+ if (uint16_t acc = (fVisual & kAccidentalsMask)) {
+ if (acc == kWantNatural) {
accidental |= acc;
- else
+ } else {
accidental = acc;
+ }
+ }
return VLPitchName(fPitch, accidental);
}
@@ -603,6 +605,57 @@ void VLSong::DelChord(VLLocation at)
fMeasures.pop_back();
}
+VLSong::note_iterator::note_iterator(const VLMeasureList::iterator &meas, const VLNoteList::iterator ¬e)
+ : fMeasIter(meas), fNoteIter(note)
+{
+}
+
+VLSong::note_iterator &
+VLSong::note_iterator::operator--()
+{
+ if (fNoteIter == fMeasIter->fMelody.begin()) {
+ --fMeasIter;
+ fNoteIter = fMeasIter->fMelody.end();
+ }
+ --fNoteIter;
+ return *this;
+}
+
+VLSong::note_iterator &
+VLSong::note_iterator::operator++()
+{
+ ++fNoteIter;
+ if (fNoteIter == fMeasIter->fMelody.end()) {
+ ++fMeasIter;
+ fNoteIter = fMeasIter->fMelody.begin();
+ }
+ return *this;
+}
+
+bool
+VLSong::note_iterator::operator==(const note_iterator &other)
+{
+ return fMeasIter == other.fMeasIter && fNoteIter == other.fNoteIter;
+}
+
+VLSong::note_iterator
+VLSong::begin_note(size_t measure)
+{
+ return note_iterator(fMeasures.begin()+measure, fMeasures[measure].fMelody.begin());
+}
+
+VLSong::note_iterator
+VLSong::end_note(size_t measure)
+{
+ return note_iterator(fMeasures.begin()+measure, fMeasures[measure].fMelody.end());
+}
+
+VLSong::note_iterator
+VLSong::end_note()
+{
+ return end_note(fMeasures.size()-1);
+}
+
VLLyricsNote VLSong::FindNote(VLLocation at)
{
VLNoteList::iterator i = fMeasures[at.fMeasure].fMelody.begin();
@@ -781,15 +834,19 @@ void VLSong::AddNote(VLLyricsNote note, VLLocation at)
++i;
}
i->fTied = 0;
- if (note.fTied & VLNote::kTiedWithPrev) // kTiedWithNext is NEVER user set
- if (at.fMeasure && i == fMeasures[at.fMeasure].fMelody.begin()) {
- VLNoteList::iterator j = fMeasures[at.fMeasure-1].fMelody.end();
- --j;
- if (j->fPitch == i->fPitch) {
- j->fTied |= VLNote::kTiedWithNext;
- i->fTied |= VLNote::kTiedWithPrev;
- }
- }
+ if (note.fTied & VLNote::kTiedWithPrev) {// kTiedWithNext is NEVER user set
+ auto j = i;
+ if (at.fAt != VLFraction(0) || at.fMeasure) {
+ if (at.fAt == VLFraction(0)) {
+ j = fMeasures[at.fMeasure-1].fMelody.end();
+ }
+ --j;
+ if (note.fPitch != VLNote::kNoPitch && j->fPitch != VLNote::kNoPitch) {
+ j->fTied |= VLNote::kTiedWithNext;
+ i->fTied |= VLNote::kTiedWithPrev;
+ }
+ }
+ }
}
void VLSong::DelNote(VLLocation at)
@@ -906,6 +963,97 @@ VLNote VLSong::ExtendNote(VLLocation at)
return *i;
}
+VLLocation VLSong::TieNote(VLLocation at, bool tieWithPrev)
+{
+ VLNoteList::iterator i = fMeasures[at.fMeasure].fMelody.begin();
+ VLNoteList::iterator end= fMeasures[at.fMeasure].fMelody.end();
+
+ if (i==end)
+ return VLLocation(); // Empty song, do nothing
+
+ for (VLFraction t(0); i != end && t+i->fDuration <= at.fAt; ++i)
+ t += i->fDuration;
+
+ if (i == end)
+ --i;
+ if (i->fPitch == VLNote::kNoPitch)
+ return VLLocation(); // Don't tie rests
+
+ VLNoteList::iterator j=i;
+ auto startMeasure = at.fMeasure;
+ if (tieWithPrev) {
+ if (j != fMeasures[at.fMeasure].fMelody.begin()) {
+ --j;
+ //
+ // Extend across next note/rest
+ //
+ if (i->fPitch == j->fPitch) {
+ // Consolidate identical pitches
+ j->fDuration += i->fDuration;
+ fMeasures[at.fMeasure].fMelody.erase(i);
+ i = j;
+ } else {
+ i->fTied |= VLNote::kTiedWithPrev;
+ j->fTied |= VLNote::kTiedWithNext;
+ i->fLyrics.clear();
+ }
+ } else if (at.fMeasure-- > 0) {
+ //
+ // Extend into previous measure
+ //
+ j = fMeasures[at.fMeasure].fMelody.end();
+ --j;
+ if (j->fPitch != VLNote::kNoPitch) { // Don't tie with rests
+ i->fTied |= VLNote::kTiedWithPrev;
+ j->fTied |= VLNote::kTiedWithNext;
+ i->fLyrics.clear();
+ }
+ }
+ } else {
+ ++j;
+ if (j != fMeasures[at.fMeasure].fMelody.end()) {
+ //
+ // Extend across next note/rest
+ //
+ if (i->fPitch == j->fPitch) {
+ // Consolidate identical pitches
+ i->fDuration += j->fDuration;
+ fMeasures[at.fMeasure].fMelody.erase(j);
+ } else {
+ i->fTied |= VLNote::kTiedWithNext;
+ j->fTied |= VLNote::kTiedWithPrev;
+ j->fLyrics.clear();
+ }
+ } else if (++at.fMeasure < fMeasures.size()) {
+ //
+ // Extend into next measure
+ //
+ j = fMeasures[at.fMeasure].fMelody.begin();
+ if (j->fPitch != VLNote::kNoPitch) { // Don't tie with rests
+ i->fTied |= VLNote::kTiedWithNext;
+ j->fTied |= VLNote::kTiedWithPrev;
+ j->fLyrics.clear();
+ }
+ }
+ }
+ while (i->fTied & VLNote::kTiedWithPrev) {
+ if (i == fMeasures[startMeasure].fMelody.begin()) {
+ if (startMeasure) {
+ i = fMeasures[--startMeasure].fMelody.end();
+ } else {
+ break;
+ }
+ }
+ --i;
+ }
+ at.fMeasure = startMeasure;
+ at.fAt = VLFraction();
+ for (j = fMeasures[startMeasure].fMelody.begin(); j != i; ++j) {
+ at.fAt = at.fAt+j->fDuration;
+ }
+ return at;
+}
+
bool VLSong::IsNonEmpty() const
{
for (size_t measure=0; measure= endMeasure
- )
+ ) {
if (rp.fEndings[0].fEnd == endMeasure) {
//
// Exact match, just change times
@@ -1569,6 +1714,7 @@ void VLSong::AddRepeat(size_t beginMeasure, size_t endMeasure, int times)
break;
}
+ }
}
VLRepeat rep;
@@ -1795,13 +1941,15 @@ bool VLSong::DoesBeginEnding(size_t measure, bool * repeat, size_t * volta) cons
size_t v = (1<begin_note(&measure-&fSong->fMeasures[0]);
+ bool seenNote = false;
+ do {
+ --predecessor;
+ if (predecessor->fPitch != decomp.front().fPitch) {
+ inSlur = true;
+ if (!seenNote) {
+ decomp.front().fTied |= VLNote::kSlurWithPrev;
+ }
+ break;
+ }
+ seenNote = true;
+ } while (predecessor->fTied & VLNote::kTiedWithPrev);
+ }
+ VLLyricsNote *firstInTie = nullptr;
+ VLLyricsNote *prevInTie = nullptr;
+ for (auto ¬e: decomp) {
+ if ((note.fTied & VLNote::kTiedWithPrev) && note.fPitch != prevPitch) {
+ if (prevInTie) {
+ prevInTie->fTied |= VLNote::kSlurWithNext;
+ }
+ note.fTied |= VLNote::kSlurWithPrev;
+ inSlur = true;
+ }
+ if (note.fTied & VLNote::kTiedWithNext) {
+ if (!inTie) {
+ firstInTie = ¬e;
+ inTie = true;
+ }
+ prevInTie = ¬e;
+ prevPitch = note.fPitch;
+ } else {
+ if (inSlur) {
+ if (firstInTie) {
+ firstInTie->fTied |= VLNote::kStartSlur;
+ }
+ note.fTied |= VLNote::kEndSlur;
+ }
+ inSlur = false;
+ inTie = false;
+ }
+ }
+ if (inTie) {
+ // Find out if measure-final tie contains slur
+ auto successor = fSong->begin_note(&measure-&fSong->fMeasures[0]+1);
+ if (successor->fPitch != prevPitch) {
+ prevInTie->fTied |= VLNote::kSlurWithNext;
+ }
+ while (!inSlur) {
+ if (successor->fPitch != prevPitch) {
+ inSlur = true;
+ } else if (!(successor->fTied & VLNote::kTiedWithNext)) {
+ break;
+ } else {
+ ++successor;
+ }
+ }
+ }
+ if (inSlur && firstInTie) {
+ firstInTie->fTied |= VLNote::kStartSlur;
+ }
+
n = decomp.begin();
e = decomp.end();
} else {
diff --git a/Sources/VLModel.h b/Sources/VLModel.h
index e9cc72c..4b71f4b 100644
--- a/Sources/VLModel.h
+++ b/Sources/VLModel.h
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2005-2011 Matthias Neeracher
+// Copyright © 2005-2018 Matthias Neeracher
//
#include
@@ -159,14 +159,18 @@ struct VLNote {
kOctave = 12
};
//
- // We only allow ties BETWEEN measures. Within measures, we just store
- // a combined note length.
+ // We only allow ties BETWEEN measures or different pitches. Within measures, we
+ // just store a combined note length.
//
- uint8_t fTied; // Tied with note in adjacent measure
+ uint8_t fTied; // Tied with adjacent note
enum {
kNotTied = 0,
kTiedWithNext = 1,
kTiedWithPrev = 2,
+ kSlurWithNext = 4,
+ kSlurWithPrev = 8,
+ kStartSlur = 16,
+ kEndSlur = 32,
};
//
// Hint at visual representation (Computed in DecomposeNotes)
@@ -198,8 +202,8 @@ struct VLNote {
kTupletMask = 0xFF00
};
- static int TupletNum(uint16_t visual) { return visual >> 12; }
- static int TupletDenom(uint16_t visual) { return (visual >> 8) & 0x0F; }
+ static uint16_t TupletNum(uint16_t visual) { return visual >> 12; }
+ static uint16_t TupletDenom(uint16_t visual) { return (visual >> 8) & 0x0F; }
static uint16_t Tuplet(int num, int denom) { return (num << 12) | (denom << 8); }
VLNote(VLFraction dur=0, int pitch=kNoPitch, uint16_t visual=0);
VLNote(std::string name);
@@ -342,6 +346,8 @@ struct VLMeasure {
bool IsEmpty() const;
bool NoChords() const;
bool CanSkipRests() const;
+ bool SlurAtStart() const;
+ bool SlurAtEnd() const;
void DecomposeNotes(const VLProperties & prop, VLNoteList & decomposed) const;
};
@@ -420,6 +426,26 @@ public:
iterator begin() { return iterator(*this, false); }
iterator end() { return iterator(*this, true); }
+ // Iterate over all notes in song
+ class note_iterator {
+ public:
+ note_iterator(const VLMeasureList::iterator &meas, const VLNoteList::iterator ¬e);
+
+ VLLyricsNote &operator*() { return *fNoteIter; }
+ VLLyricsNote *operator->() { return &*fNoteIter; }
+ note_iterator &operator--();
+ note_iterator &operator++();
+ bool operator==(const note_iterator &other);
+ bool operator!=(const note_iterator &other) { return !(*this == other); }
+ private:
+ VLNoteList::iterator fNoteIter;
+ VLMeasureList::iterator fMeasIter;
+ };
+
+ note_iterator begin_note(size_t measure=0);
+ note_iterator end_note(size_t measure);
+ note_iterator end_note();
+
VLLyricsNote FindNote(VLLocation at);
bool PrevNote(VLLocation & at);
bool NextNote(VLLocation & at);
@@ -428,6 +454,7 @@ public:
void DelChord(VLLocation at);
void DelNote(VLLocation at);
VLNote ExtendNote(VLLocation at);
+ VLLocation TieNote(VLLocation at, bool tieWithPrev);
void AddRepeat(size_t beginMeasure, size_t endMeasure, int times);
void DelRepeat(size_t beginMeasure, size_t endMeasure);
void AddEnding(size_t beginMeasure, size_t endMeasure, size_t volta);
@@ -493,10 +520,10 @@ class VLSongVisitor {
public:
virtual ~VLSongVisitor();
- virtual void Visit(VLSong & song) {}
- virtual void VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas) {}
- virtual void VisitNote(VLLyricsNote & n) {}
- virtual void VisitChord(VLChord & c) {}
+ virtual void Visit(VLSong & song) {}
+ virtual void VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas) {}
+ virtual void VisitNote(VLLyricsNote & n) {}
+ virtual void VisitChord(VLChord & c) {}
protected:
VLSongVisitor() {}
@@ -504,6 +531,8 @@ protected:
void VisitNotes(VLMeasure & measure, const VLProperties & prop,
bool decomposed);
void VisitChords(VLMeasure & measure);
+private:
+ VLSong *fSong;
};
#endif
diff --git a/Sources/VLPDFView.mm b/Sources/VLPDFView.mm
index 14abc4d..382abdc 100644
--- a/Sources/VLPDFView.mm
+++ b/Sources/VLPDFView.mm
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2005-2007 Matthias Neeracher
+// Copyright © 2005-2018 Matthias Neeracher
//
#import "VLPDFView.h"
@@ -45,14 +45,14 @@
{
// Display single page mode.
if ([self displayMode] > kPDFDisplaySinglePageContinuous)
- [self setDisplayMode: [self displayMode] - 2];
+ [self setDisplayMode: static_cast([self displayMode] - 2)];
}
- (IBAction) displayTwoUp: (id) sender
{
// Display two-up.
if ([self displayMode] < kPDFDisplayTwoUp)
- [self setDisplayMode: [self displayMode] + 2];
+ [self setDisplayMode: static_cast([self displayMode] + 2)];
}
- (IBAction) zoomToFit: (id) sender
diff --git a/Sources/VLPListDocument.mm b/Sources/VLPListDocument.mm
index a284760..7e4483f 100644
--- a/Sources/VLPListDocument.mm
+++ b/Sources/VLPListDocument.mm
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2007-2011 Matthias Neeracher
+// Copyright © 2007-2018 Matthias Neeracher
//
#import "VLPListDocument.h"
@@ -26,11 +26,11 @@ public:
VLPlistVisitor(NSMutableDictionary * plist, bool performanceOrder)
: fPlist(plist), fPerfOrder(performanceOrder) {}
- virtual void Visit(VLSong & song);
+ void Visit(VLSong & song) override;
protected:
- virtual void VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas);
- virtual void VisitNote(VLLyricsNote & n);
- virtual void VisitChord(VLChord & c);
+ void VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas) override;
+ void VisitNote(VLLyricsNote & n) override;
+ void VisitChord(VLChord & c) override;
NSArray * EncodeProperties(const std::vector & properties);
NSDictionary * EncodeProperties(const VLProperties & properties);
@@ -82,7 +82,7 @@ void VLPlistVisitor::Visit(VLSong & song)
[fPlist setObject:fMeasures forKey:@"measures"];
}
-void VLPlistVisitor::VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas)
+void VLPlistVisitor::VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas)
{
fNotes = [NSMutableArray arrayWithCapacity:1];
fChords= [NSMutableArray arrayWithCapacity:1];
@@ -303,7 +303,7 @@ enum {
kPotentialSwing16th
};
-- (void)readMelody:(NSArray *)melody inMeasure:(size_t)measNo onsets:(int *)onsets lyrics:(uint8_t *)prevKind
+- (void)readMelody:(NSArray *)melody inMeasure:(uint32_t)measNo onsets:(int *)onsets lyrics:(uint8_t *)prevKind
{
VLLocation at = {measNo, VLFraction(0)};
int lastOnset = 0;
@@ -328,7 +328,7 @@ enum {
[[ndict objectForKey:@"normalNotes"] intValue]);
if ([[ndict objectForKey:@"tied"] intValue] & VLNote::kTiedWithPrev) {
- if (at.fAt != VLFraction(0)) {
+ if (at.fAt != VLFraction(0) && note.fPitch == tiedNote.fPitch) {
//
// Extend preceding note
//
@@ -339,9 +339,9 @@ enum {
goto advanceAt;
} else {
//
- // Extend previous measure
+ // Slur or extend previous measure
//
- note.fTied |= VLNote::kTiedWithPrev;
+ note.fTied |= VLNote::kTiedWithPrev;
}
} else {
for (NSEnumerator * le = [[ndict objectForKey:@"lyrics"] objectEnumerator];
@@ -402,7 +402,7 @@ advanceAt:
}
}
-- (void)readChords:(NSArray *)chords inMeasure:(size_t)measNo
+- (void)readChords:(NSArray *)chords inMeasure:(uint32_t)measNo
{
VLLocation at = {measNo, VLFraction(0)};
diff --git a/Sources/VLSheetView.h b/Sources/VLSheetView.h
index 5052935..899934f 100644
--- a/Sources/VLSheetView.h
+++ b/Sources/VLSheetView.h
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2005-2012 Matthias Neeracher
+// Copyright © 2005-2018 Matthias Neeracher
//
#import
@@ -109,6 +109,7 @@ const uint32_t kNoMeasure = (uint32_t)-1;
IBOutlet id fKeyMenu;
IBOutlet id fTimeMenu;
IBOutlet id fDivisionMenu;
+ IBOutlet NSMenu *fNoteActionMenu;
}
@property (nonatomic) int numTopLedgers;
diff --git a/Sources/VLSheetView.mm b/Sources/VLSheetView.mm
index fafaf76..7f1793c 100644
--- a/Sources/VLSheetView.mm
+++ b/Sources/VLSheetView.mm
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2005-2008 Matthias Neeracher
+// Copyright © 2005-2018 Matthias Neeracher
//
#import "VLSheetView.h"
@@ -804,6 +804,11 @@ const float kSemiFloor = -1.0f*kLineH;
if ([event modifierFlags] & NSAlphaShiftKeyMask)
return; // Keyboard mode, ignore mouse
+ if ([event modifierFlags] & NSControlKeyMask) {
+ [[NSCursor contextualMenuCursor] set];
+ } else {
+ [[NSCursor arrowCursor] set];
+ }
bool hadCursor = fCursorRegion == kRegionNote;
[self findRegionForEvent:event];
bool hasCursor = fCursorRegion == kRegionNote;
@@ -830,17 +835,36 @@ const float kSemiFloor = -1.0f*kLineH;
fCursorRegion = kRegionNowhere;
[[self window] setAcceptsMouseMovedEvents:NO];
[self setNeedsDisplay:YES];
+ [[NSCursor arrowCursor] set];
+}
+
+- (void) rightMouseDown:(NSEvent *)event
+{
+ [[self document] endSong];
+ VLRegion region = [self findRegionForEvent:event];
+ switch (region) {
+ case kRegionNote:
+ [NSMenu popUpContextMenu:fNoteActionMenu withEvent:event forView:self];
+ break;
+ default:
+ break;
+ }
}
- (void) mouseDown:(NSEvent *)event
{
+ if ([event modifierFlags] & NSControlKeyMask) {
+ [self rightMouseDown:event];
+ return;
+ }
+
[[self document] endSong];
BOOL extend = ([event modifierFlags] & NSShiftKeyMask) != 0;
VLRegion region = [self findRegionForEvent:event];
if (extend && [[self editTarget] canExtendSelection:region])
[[self editTarget] extendSelection:fCursorLocation];
- else
+ else
switch (region) {
case kRegionNote:
[self setEditTarget:nil];
diff --git a/Sources/VLSheetViewChords.mm b/Sources/VLSheetViewChords.mm
index 8e63eb9..1a44c82 100644
--- a/Sources/VLSheetViewChords.mm
+++ b/Sources/VLSheetViewChords.mm
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2006-2017 Matthias Neeracher
+// Copyright © 2006-2018 Matthias Neeracher
//
#import "VLSheetView.h"
@@ -224,7 +224,7 @@ std::string NormalizeName(NSString* rawName)
// Build new list
//
for (int m = 0; m= song->CountMeasures())
break;
const VLMeasure measure = song->fMeasures[measIdx];
diff --git a/Sources/VLSheetViewLyrics.mm b/Sources/VLSheetViewLyrics.mm
index 1ec58b3..a36b44f 100644
--- a/Sources/VLSheetViewLyrics.mm
+++ b/Sources/VLSheetViewLyrics.mm
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2006-2007 Matthias Neeracher
+// Copyright © 2006-2018 Matthias Neeracher
//
#import "VLSheetView.h"
@@ -211,7 +211,7 @@ float VLCocoaFontHandler::Width(const char * utf8Text)
// Build new list
//
for (int m = 0; m= song->CountMeasures())
break;
const VLMeasure measure = song->fMeasures[measIdx];
diff --git a/Sources/VLSheetViewNotes.h b/Sources/VLSheetViewNotes.h
index 7eb881e..9a2c188 100644
--- a/Sources/VLSheetViewNotes.h
+++ b/Sources/VLSheetViewNotes.h
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2005-2011 Matthias Neeracher
+// Copyright © 2005-2018 Matthias Neeracher
//
#import
@@ -19,6 +19,11 @@
- (void) moveCursorToNextNote;
- (void) moveCursorToPrevNote;
+- (IBAction) tieNoteWithPrev:(id)sender;
+- (IBAction) tieNoteWithNext:(id)sender;
+- (IBAction) addRest:(id)sender;
+- (IBAction) deleteNote:(id)sender;
+
@end
// Local Variables:
diff --git a/Sources/VLSheetViewNotes.mm b/Sources/VLSheetViewNotes.mm
index 0ec795f..922d89d 100644
--- a/Sources/VLSheetViewNotes.mm
+++ b/Sources/VLSheetViewNotes.mm
@@ -5,7 +5,7 @@
//
// (MN) Matthias Neeracher
//
-// Copyright © 2005-2011 Matthias Neeracher
+// Copyright © 2005-2018 Matthias Neeracher
//
#import "VLSheetView.h"
@@ -19,6 +19,43 @@
@implementation VLSheetView (Notes)
+- (IBAction)tieNoteWithPrev:(id)sender
+{
+ if (fCursorLocation.fMeasure != kNoMeasure) {
+ [[self document] willChangeSong];
+ [self song]->TieNote(fCursorLocation, true);
+ [[self document] didChangeSong];
+ }
+}
+
+- (IBAction)tieNoteWithNext:(id)sender
+{
+ if (fCursorLocation.fMeasure != kNoMeasure) {
+ [[self document] willChangeSong];
+ [self song]->TieNote(fCursorLocation, false);
+ [[self document] didChangeSong];
+ }
+}
+
+- (IBAction)addRest:(id)sender
+{
+ if (fCursorLocation.fMeasure != kNoMeasure) {
+ VLLyricsNote note;
+ [[self document] willChangeSong];
+ [self song]->AddNote(note, fCursorLocation);
+ [[self document] didChangeSong];
+ }
+}
+
+- (IBAction)deleteNote:(id)sender
+{
+ if (fCursorLocation.fMeasure != kNoMeasure) {
+ [[self document] willChangeSong];
+ [self song]->DelNote(fCursorLocation);
+ [[self document] didChangeSong];
+ }
+}
+
- (void) addNoteAtCursor
{
if (fCursorLocation.fMeasure != kNoMeasure && fCursorVertPos != kCursorNoPitch) {
@@ -349,7 +386,7 @@
for (int m = 0; m= song->CountMeasures())
break;
const VLMeasure & measure = song->fMeasures[measIdx];
diff --git a/Sources/VLSoundOut.cpp b/Sources/VLSoundOut.cpp
index a1ae84b..12f9bc8 100644
--- a/Sources/VLSoundOut.cpp
+++ b/Sources/VLSoundOut.cpp
@@ -132,8 +132,8 @@ void VLSoundScheduler::Schedule(VLSoundEvent * what, float when)
what->Perform();
}
-static std::auto_ptr sSoundOut;
-static std::auto_ptr sSoundScheduler;
+static std::unique_ptr sSoundOut;
+static std::unique_ptr sSoundScheduler;
VLSoundOut * VLSoundOut::Instance()
{
@@ -160,7 +160,7 @@ void VLSoundOut::PlayFile(CFDataRef file)
MusicSequence music;
NewMusicSequence(&music);
- MusicSequenceFileLoadData(music, file, 0, 0);
+ MusicSequenceFileLoadData(music, file, kMusicSequenceFile_MIDIType, 0);
PlaySequence(music);
}
@@ -517,7 +517,7 @@ void VLAUSoundOut::Play(const int8_t * note, size_t numNotes)
const int8_t kNoteVelocity = 127;
for (int i=0; i(note[i]), kNoteVelocity, 0, 1.0};
MusicTrackNewMIDINoteEvent(track, 0.0, &n);
}
diff --git a/TestData/.DS_Store b/TestData/.DS_Store
deleted file mode 100644
index dfe7b45..0000000
Binary files a/TestData/.DS_Store and /dev/null differ
diff --git a/VocalEasel.xcodeproj/project.pbxproj b/VocalEasel.xcodeproj/project.pbxproj
index 5dbe470..a6f2d06 100644
--- a/VocalEasel.xcodeproj/project.pbxproj
+++ b/VocalEasel.xcodeproj/project.pbxproj
@@ -1642,6 +1642,8 @@
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ CLANG_CXX_LIBRARY = "libc++";
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
@@ -1665,6 +1667,8 @@
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ CLANG_CXX_LIBRARY = "libc++";
COPY_PHASE_STRIP = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
@@ -1686,6 +1690,8 @@
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ CLANG_CXX_LIBRARY = "libc++";
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = Sources/VocalEasel_Prefix.pch;
diff --git a/VocalEasel.xcodeproj/xcuserdata/neeri.xcuserdatad/xcschemes/VocalEasel.xcscheme b/VocalEasel.xcodeproj/xcuserdata/neeri.xcuserdatad/xcschemes/VocalEasel.xcscheme
index 94c2bab..59001c4 100644
--- a/VocalEasel.xcodeproj/xcuserdata/neeri.xcuserdatad/xcschemes/VocalEasel.xcscheme
+++ b/VocalEasel.xcodeproj/xcuserdata/neeri.xcuserdatad/xcschemes/VocalEasel.xcscheme
@@ -22,8 +22,8 @@