From 3ae47015446ee185d77f6b6bc7ed171b69307351 Mon Sep 17 00:00:00 2001 From: Matthias Neeracher Date: Mon, 23 Apr 2007 05:46:37 +0000 Subject: [PATCH] Further refine groove selection --- English.lproj/VLGroove.nib/classes.nib | 13 - English.lproj/VLGroove.nib/designable.nib | 845 ++++++++++++++++++++ English.lproj/VLGroove.nib/info.nib | 16 - English.lproj/VLGroove.nib/keyedobjects.nib | Bin 5400 -> 6703 bytes Sources/VLDocument.h | 3 + Sources/VLDocument.mm | 12 + Sources/VLGrooveController.h | 4 + Sources/VLGrooveController.mm | 22 +- Sources/VLMMADocument.mm | 2 +- Sources/VLModel.cpp | 13 +- Sources/VLModel.h | 4 +- Sources/VLSheetView.mm | 8 +- 12 files changed, 900 insertions(+), 42 deletions(-) delete mode 100644 English.lproj/VLGroove.nib/classes.nib create mode 100644 English.lproj/VLGroove.nib/designable.nib delete mode 100644 English.lproj/VLGroove.nib/info.nib diff --git a/English.lproj/VLGroove.nib/classes.nib b/English.lproj/VLGroove.nib/classes.nib deleted file mode 100644 index 917f133..0000000 --- a/English.lproj/VLGroove.nib/classes.nib +++ /dev/null @@ -1,13 +0,0 @@ -{ - IBClasses = ( - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, - { - ACTIONS = {endSheet = id; updateDescription = id; }; - CLASS = VLGrooveController; - LANGUAGE = ObjC; - OUTLETS = {fBrowser = NSBrowser; fDescription = NSTextField; fOKButton = NSButton; }; - SUPERCLASS = NSWindowController; - } - ); - IBVersion = 1; -} \ No newline at end of file diff --git a/English.lproj/VLGroove.nib/designable.nib b/English.lproj/VLGroove.nib/designable.nib new file mode 100644 index 0000000..a14e51a --- /dev/null +++ b/English.lproj/VLGroove.nib/designable.nib @@ -0,0 +1,845 @@ + + + + 1050 + 9A412 + 599 + 902 + 304.00 + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + VLGrooveController + + + FirstResponder + + + 3 + 2 + {{176, 165}, {634, 396}} + 1886912512 + + Panel + + + NSPanel + + + View + + + + 256 + + YES + + + 256 + {{20, 98}, {390, 298}} + + + 1000 + YES + + 67239488 + 2048 + + + LucidaGrande + 1.200000e+01 + 16 + + + + / + + Style + 150 + 2 + 1 + 3.000000e+02 + YES + 402800640 + + + + 256 + {{380, 249}, {224, 257}} + + + YES + + 67239424 + 272629760 + System Font Text + + LucidaGrande + 1.300000e+01 + 1044 + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2OQA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 256 + {{538, 12}, {82, 32}} + + + 1000 + YES + + 604110336 + 134217728 + OK + + 1000 + + -2038284033 + 1 + + + DQ + 200 + 25 + + + + + 256 + {{442, 12}, {82, 32}} + + + 1001 + YES + + 67239424 + 134217728 + Cancel + + 1001 + + -2038284033 + 1 + + + Gw + 200 + 25 + + + + + 256 + {{415, 98}, {202, 276}} + + + YES + + 71433728 + 272629760 + + + + YES + + + + + + + 268 + {{18, 14}, {152, 32}} + + + YES + + 604110336 + 0 + Play Selected Groove + + + 1211912703 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + + + {634, 396} + + + + {{0, 0}, {1280, 778}} + {213, 129} + {3.40282e+38, 3.40282e+38} + + + NSApplication + + + + + YES + + + window + + + + 19 + + + + endSheet: + + + + 20 + + + + endSheet: + + + + 21 + + + + delegate + + + + 22 + + + + fBrowser + + + + 23 + + + + fDescription + + + + 25 + + + + updateDescription: + + + + 26 + + + + fOKButton + + + + 27 + + + + togglePlay: + + + + 100028 + + + + fPlayButton + + + + 100029 + + + + + YES + + 0 + + YES + + + + + + -2 + + + RmlsZSdzIE93bmVyA + + + -1 + + + First Responder + + + 13 + + + YES + + + + Panel + + + 14 + + + YES + + + + + + + + + + + 15 + + + + + 16 + + + YES + + + + + + 17 + + + YES + + + + + + 18 + + + YES + + + + + + 24 + + + YES + + + + + + 100016 + + + + + 100017 + + + + + 100018 + + + + + 100024 + + + + + -3 + + + Application + + + 100025 + + + YES + + + + + + 100026 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + 100025.IBPluginDependency + 100026.IBPluginDependency + 13.IBPluginDependency + 13.IBWindowTemplateEditedContentRect + 13.ImportedFromIB2 + 13.editorWindowContentRectSynchronizationRect + 14.IBPluginDependency + 14.ImportedFromIB2 + 15.IBPluginDependency + 15.ImportedFromIB2 + 16.IBPluginDependency + 16.ImportedFromIB2 + 17.IBPluginDependency + 17.ImportedFromIB2 + 18.IBPluginDependency + 18.ImportedFromIB2 + 24.IBPluginDependency + 24.ImportedFromIB2 + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{173, 57}, {634, 396}} + + {{173, 57}, {634, 396}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + YES + + YES + + + YES + + + + + YES + + YES + + + YES + + + + 100029 + + + + YES + + YES + FirstResponder + VLGrooveController + + + YES + + FirstResponder + NSObject + + YES + + YES + alignCenter: + alignJustified: + alignLeft: + alignRight: + arrangeInFront: + centerSelectionInVisibleArea: + changeFont: + checkSpelling: + clear: + clearRecentDocuments: + complete: + copy: + copyFont: + copyRuler: + cut: + delete: + deminiaturize: + fax: + hide: + hideOtherApplications: + loosenKerning: + lowerBaseline: + makeKeyAndOrderFront: + miniaturize: + newDocument: + openDocument: + orderBack: + orderFront: + orderFrontColorPanel: + orderFrontHelpPanel: + orderOut: + outline: + paste: + pasteAsPlainText: + pasteAsRichText: + pasteFont: + pasteRuler: + pause: + performClose: + performFindPanelAction: + performMiniaturize: + performZoom: + play: + print: + printDocument: + raiseBaseline: + record: + redo: + resume: + revertDocumentToSaved: + run: + runPageLayout: + runToolbarCustomizationPalette: + saveAllDocuments: + saveDocument: + saveDocumentAs: + saveDocumentTo: + selectAll: + selectText: + showGuessPanel: + showHelp: + start: + startSpeaking: + stop: + stopSpeaking: + subscript: + superscript: + terminate: + tightenKerning: + toggleContinuousSpellChecking: + togglePlay: + toggleRuler: + toggleToolbarShown: + turnOffKerning: + turnOffLigatures: + underline: + undo: + unhideAllApplications: + unscript: + useAllLigatures: + useStandardKerning: + useStandardLigatures: + + + YES + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + + + + + + VLGrooveController + NSWindowController + + YES + + YES + endSheet: + togglePlay: + updateDescription: + + + YES + id + id + id + + + + YES + + YES + fBrowser + fDescription + fOKButton + fPlayButton + + + YES + NSBrowser + NSTextField + NSButton + NSButton + + + + + + + 0 + + YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA +AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxCbAAsADAAxADUANgA8AD0A +QQBFAFIAWgByAHMAdwB7AH4AgQALAI8AmAC0ALUAvwDAAMgAyQDMANAA0wDUANoA4gDjAO8A8AD1AP8B +AAEBAQUBBwEMAQ0BEAEUARcBHwEgATQBNQE2ATcBOgE9AUYBRwFPAVABUQFZAVoBZAFtAW4BegF7AYAB +gQGCAYUBgQGJAYwBkAALAZEBkwGUAZUBlgGZAZoBngGjAaQBqQGqAa8BsAGzAbgBvQG+AcMBxAHJAcoB +zwHQAdUB1gHnAeoB6wHtAf4CEAIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQB2Ai4CLwIwAjMCNgJSAm4C +bwJwAnEBKwJyAnMCdADHAnUCdgJ3AngCeQJ6ALMCewJ8An0CfgJ/AoACgQKCAoMChAKHAooCjVUkbnVs +bN8QEgANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAo +ACkAKgArACwALQAuAC8AMFZOU1Jvb3RWJGNsYXNzXU5TT2JqZWN0c0tleXNfEA9OU0NsYXNzZXNWYWx1 +ZXNfEBlOU0FjY2Vzc2liaWxpdHlPaWRzVmFsdWVzXU5TQ29ubmVjdGlvbnNbTlNOYW1lc0tleXNbTlNG +cmFtZXdvcmtdTlNDbGFzc2VzS2V5c1pOU09pZHNLZXlzXU5TTmFtZXNWYWx1ZXNfEBlOU0FjY2Vzc2li +aWxpdHlDb25uZWN0b3JzXU5TRm9udE1hbmFnZXJfEBBOU1Zpc2libGVXaW5kb3dzXxAPTlNPYmplY3Rz +VmFsdWVzXxAXTlNBY2Nlc3NpYmlsaXR5T2lkc0tleXNZTlNOZXh0T2lkXE5TT2lkc1ZhbHVlc4ACgJqA +ZIB7gJmACIBpgAWAeoB8gGqAl4AAgAaAaICYEgABhr6AfdIADgAyADMANFtOU0NsYXNzTmFtZYAEgANf +EBJWTEdyb292ZUNvbnRyb2xsZXLSADcAOAA5ADpYJGNsYXNzZXNaJGNsYXNzbmFtZaIAOgA7Xk5TQ3Vz +dG9tT2JqZWN0WE5TT2JqZWN0XxAQSUJDb2NvYUZyYW1ld29ya9IADgA+AD8AQFpOUy5vYmplY3RzgAeg +0gA3ADgAQgBDowBDAEQAO1xOU011dGFibGVTZXRVTlNTZXTSAA4APgBGAEeASKoASABJAEoASwBMAE0A +TgBPAFAAUYAJgFKAVIBWgFmAWoBcgF6AYIBi1AAOAFMAVABVAFYAVwAfAFldTlNEZXN0aW5hdGlvblhO +U1NvdXJjZVdOU0xhYmVsgFGACoACgFDcAFsADgBcAF0AXgBfAGAAYQBiAGMAZABlAGYAZwBoAGkAagBr +AGwAbQBuAG8AcABxXE5TV2luZG93Vmlld1xOU1NjcmVlblJlY3RdTlNXaW5kb3dUaXRsZVlOU1dURmxh +Z3NdTlNXaW5kb3dDbGFzc1xOU1dpbmRvd1JlY3RZTlNNYXhTaXplXxAPTlNXaW5kb3dCYWNraW5nXxAR +TlNXaW5kb3dTdHlsZU1hc2tZTlNNaW5TaXplW05TVmlld0NsYXNzgBCAT4BMgAwScHgAAIAOgAuAThAC +EAOATYAPXxAYe3sxNzYsIDE2NX0sIHs2MzQsIDM5Nn190gAOAHQAdQB2WU5TLnN0cmluZ4ANVVBhbmVs +0gA3ADgAeAB5owB5AHoAO18QD05TTXV0YWJsZVN0cmluZ1hOU1N0cmluZ9IADgB0AHUAfYANV05TUGFu +ZWzSAA4AdAB1AICADVRWaWV31wCCAA4AgwCEAIUAhgCHAIgAiQCKAIsAjACIAI5fEA9OU05leHRSZXNw +b25kZXJaTlNTdWJ2aWV3c1hOU3ZGbGFnc1tOU0ZyYW1lU2l6ZVhOU1dpbmRvd1tOU1N1cGVydmlld4AR +gEuAEhEBAIBJgBGAStIADgA+AEYAkYBIpgCSAJMAlACVAJYAl4ATgB6ALYA1gDqAPd8QEQCCAA4AmQCa +AJsAnACdAJ4AnwCEAKAAhgChAKIAhwCjAKQAZgCmAKcAqACpAKoAqwCsAK0AiwCtAIgAsABuAGYAsgCz +V05TRnJhbWVfEA9OU1BhdGhTZXBhcmF0b3JZTlNCckZsYWdzXxASTlNGaXJzdENvbHVtblRpdGxlXxAP +TlNDZWxsUHJvdG90eXBlXxAVTlNQcmVmZXJlZENvbHVtbldpZHRoXxASTlNBbGxvd3NUeXBlU2VsZWN0 +WU5TRW5hYmxlZF8QEE5TTWluQ29sdW1uV2lkdGhfEBhOU051bWJlck9mVmlzaWJsZUNvbHVtbnNVTlNU +YWdfEBROU0NvbHVtblJlc2l6aW5nVHlwZYAQgB2AFIAbEhgCQACAHIAVI0BywAAAAAAACQmAERCWgBAR +A+gQAV8QFnt7MjAsIDk4fSwgezM5MCwgMjk4fX3VALYADgC3ALgAuQC6ALsAvAC9AL5bTlNDZWxsRmxh +Z3NaTlNDb250ZW50c1lOU1N1cHBvcnRcTlNDZWxsRmxhZ3MyEgQB/kCAGoAWgBcRCABRINQADgDBAMIA +wwDEAMUAxgDHVk5TU2l6ZVZOU05hbWVYTlNmRmxhZ3OAGSNAKAAAAAAAAIAYEBBcTHVjaWRhR3JhbmRl +0gA3ADgAygDLogDLADtWTlNGb2500gA3ADgAzQDOowDOAM8AO11OU0Jyb3dzZXJDZWxsVk5TQ2VsbNIA +DgB0AHUA0oANUS9VU3R5bGXSADcAOADVANalANYA1wDYANkAO1lOU0Jyb3dzZXJZTlNDb250cm9sVk5T +Vmlld1tOU1Jlc3BvbmRlctgAggAOAJkAzwCEAKAAhgCHAGYA3ADdAN4AiwCtAIgAZoAQgCyAH4AgCYAR +gBBfEBh7ezM4MCwgMjQ5fSwgezIyNCwgMjU3fX3YALYADgDkALcAuADlALkA5gDnAOgA6QDqAOsAkwDt +AO5fEBFOU0JhY2tncm91bmRDb2xvcl1OU0NvbnRyb2xWaWV3W05TVGV4dENvbG9yEgQB/gCAK4AjgCGA +IoAeEhBAAACAKF8QEFN5c3RlbSBGb250IFRleHTUAA4AwQDCAMMAxADyAMYA9IAZI0AqAAAAAAAAgBgR +BBTVAA4A9gD3APgA+QD6APsA/AD9AP5XTlNDb2xvclxOU0NvbG9yU3BhY2VbTlNDb2xvck5hbWVdTlND +YXRhbG9nTmFtZYAngCYQBoAlgCRWU3lzdGVtXGNvbnRyb2xDb2xvctMADgD3AQIA+gBvAQRXTlNXaGl0 +ZYAnSzAuNjY2NjY2NjkA0gA3ADgBBgD2ogD2ADvVAA4A9gD3APgA+QD6AQkA/AEKAP6AJ4AqgCmAJF8Q +EGNvbnRyb2xUZXh0Q29sb3LTAA4A9wECAPoAbwEPgCdCMADSADcAOAERARKkARIBEwDPADtfEA9OU1Rl +eHRGaWVsZENlbGxcTlNBY3Rpb25DZWxs0gA3ADgBFQEWpQEWANcA2ADZADtbTlNUZXh0RmllbGTZAIIA +DgCZAM8AhACgAIYAhwCjAGYBGQEaARsAiwCtAIgAZgCygBCANIAugC8JgBGAEF8QFXt7NTM4LCAxMn0s +IHs4MiwgMzJ9fd4AtgAOASEBIgEjASQBJQC3ALgA5QEmALkBJwCjASgBKQEqASsAswDrAS0BLgDrAJQB +MQEyATMAsl8QE05TQWx0ZXJuYXRlQ29udGVudHNfEBJOU1BlcmlvZGljSW50ZXJ2YWxeTlNCdXR0b25G +bGFnczJfEBBOU0FsdGVybmF0ZUltYWdlXxAPTlNLZXlFcXVpdmFsZW50XxAPTlNQZXJpb2RpY0RlbGF5 +XU5TQnV0dG9uRmxhZ3MSJAH+AIAzgDEQGYAigDKAMIAigC0QyBIIAAAAE/////+GgkD/Uk9LUFEN0gA3 +ADgBOAE5pAE5ARMAzwA7XE5TQnV0dG9uQ2VsbNIANwA4ATsBPKUBPADXANgA2QA7WE5TQnV0dG9u2QCC +AA4AmQDPAIQAoACGAIcAowBmARkBQAFBAIsArQCIAGYBRYAQgDSANoA3CYARgBARA+lfEBV7ezQ0Miwg +MTJ9LCB7ODIsIDMyfX3eALYADgEhASIBIwEkASUAtwC4AOUBJgC5AScAowDnASkBKgErALMA6wFLAUwA +6wCVATEBMgEzAUWAM4AxgCKAOYA4gCKANVZDYW5jZWxRG9gAggAOAJkAzwCEAKAAhgCHAGYA3AFUAVUA +iwCtAIgAZoAQgCyAO4A8CYARgBBfEBd7ezQxNSwgOTh9LCB7MjAyLCAyNzZ9fdkAtgAOAOQAtwC4AOUA +uQFbAOYBXADoAOkBKgDrAJYA7QCtAO5fEBFOU0RyYXdzQmFja2dyb3VuZBIEQf4AgCuAI4AxgCKAOgmA +KNgAggAOAJkAzwCEAKAAhgCHAGYBGQFnAWgBaQCtAIgAZoAQgDSAPoA/EQEMCYARgBBfEBV7ezE4LCAx +NH0sIHsxNTIsIDMyfX3eALYADgEhAW8BIgEjASQBJQC3ALgA5QEmALkBJwEoASkBKgFyASsAbgFzASoB +dQDrAJcBMQF4AXldTlNOb3JtYWxJbWFnZYAzgDGAQYBFgDGAQIAigD0QABJIPFH/XxAUUGxheSBTZWxl +Y3RlZCBHcm9vdmXTAA4AMgF8AX0BfgF/Xk5TUmVzb3VyY2VOYW1lgESAQoBDV05TSW1hZ2VYTlNTd2l0 +Y2jSADcAOAGDAYSiAYQAO18QEE5TQ3VzdG9tUmVzb3VyY2XSAA4BhgGHAYhbTlNJbWFnZU5hbWWAR4BG +0gA3ADgBigGLogGLADtfEBNOU0J1dHRvbkltYWdlU291cmNl0gA3ADgBjQGOowGOAY8AO15OU011dGFi +bGVBcnJheVdOU0FycmF5Wns2MzQsIDM5Nn3SADcAOAGSANijANgA2QA7XxAVe3swLCAwfSwgezEyODAs +IDc3OH19WnsyMTMsIDEyOX1fEBp7My40MDI4MmUrMzgsIDMuNDAyODJlKzM4fdIANwA4AZcBmKIBmAA7 +XxAQTlNXaW5kb3dUZW1wbGF0ZVZ3aW5kb3fSADcAOAGbAZyjAZwBnQA7XxAUTlNOaWJPdXRsZXRDb25u +ZWN0b3JeTlNOaWJDb25uZWN0b3LUAA4AUwBUAFUAVgCSAB8BooBRgBOAAoBTWGZCcm93c2Vy1AAOAFMA +VABVAFYAHwCSAaiAUYACgBOAVVhkZWxlZ2F0ZdQADgBTAFQAVQGrAB8AlAGugFiAAoAtgFdZZW5kU2hl +ZXQ60gA3ADgBsQGyowGyAZ0AO18QFU5TTmliQ29udHJvbENvbm5lY3RvctQADgBTAFQAVQGrAB8AlQGu +gFiAAoA1gFfUAA4AUwBUAFUAVgCWAB8BvIBRgDqAAoBbXGZEZXNjcmlwdGlvbtQADgBTAFQAVQGrAB8A +kgHCgFiAAoATgF1fEBJ1cGRhdGVEZXNjcmlwdGlvbjrUAA4AUwBUAFUAVgCUAB8ByIBRgC2AAoBfWWZP +S0J1dHRvbtQADgBTAFQAVQGrAB8AlwHOgFiAAoA9gGFbdG9nZ2xlUGxheTrUAA4AUwBUAFUAVgCXAB8B +1IBRgD2AAoBjW2ZQbGF5QnV0dG9u0gAOAD4B1wHYgGeuAJIBVQBmARsBaADeAJQAlQCXAeIAVwCWAUEA +k4ATgDyAEIAvgD+AIIAtgDWAPYBlgAqAOoA3gB7SAA4AMgAzAemABIBmXU5TQXBwbGljYXRpb27SADcA +OAHsAY+iAY8AO9IADgA+AdcB74BnrgBmAJYAVwCUAJcAkwBmAGYAZgAfAB8AZgCVAGaAEIA6gAqALYA9 +gB6AEIAQgBCAAoACgBCANYAQ0gAOAD4B1wIAgGevEA8AkgFVAGYBGwFoAN4AHwCUAJUB4gCXAUEAVwCW +AJOAE4A8gBCAL4A/gCCAAoAtgDWAZYA9gDeACoA6gB7SAA4APgHXAhKAZ68QDwITAhQCFQIWAhcCGAIZ +AhoCGwIcAh0CHgIfAiACIYBrgGyAbYBugG+AcIBxgHKAc4B0gHWAdoB3gHiAeVdCcm93c2VyXxAPVGV4 +dCBGaWVsZCBDZWxsXENvbnRlbnQgVmlld18QEEJ1dHRvbiBDZWxsIChPSylfECJCdXR0b24gQ2VsbCAo +UGxheSBTZWxlY3RlZCBHcm9vdmUpXxAiVGV4dCBGaWVsZCBDZWxsIChTeXN0ZW0gRm9udCBUZXh0KVxG +aWxlJ3MgT3duZXJfEBBQdXNoIEJ1dHRvbiAoT0spXxAUUHVzaCBCdXR0b24gKENhbmNlbClbQXBwbGlj +YXRpb25fECBDaGVjayBCb3ggKFBsYXkgU2VsZWN0ZWQgR3Jvb3ZlKV8QFEJ1dHRvbiBDZWxsIChDYW5j +ZWwpWlRleHQgRmllbGRfEB5TdGF0aWMgVGV4dCAoU3lzdGVtIEZvbnQgVGV4dCnSAA4APgHXAjKAZ6DS +AA4APgHXAjWAZ6DSAA4APgHXAjiAZ68QGQBMAEgATgBKAE0AZgBJAeIAkwCSAFEBVQEbAWgA3gAfAJQA +lQBPAJcAUABXAJYBQQBLgFmACYBcgFSAWoAQgFKAZYAegBOAYoA8gC+AP4AggAKALYA1gF6APYBggAqA +OoA3gFbSAA4APgHXAlSAZ68QGQJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgC +aQJqAmsCbAJtgH6Af4CAgIGAgoCDgISAhYCGgIeAiICJgIqAi4CMgI2AjoCPgJCAkYCSgJOAlICVgJYQ +FBATEBoQFhAOEBcT//////////0QDxIAAYa9EgABhrgSAAGGsRIAAYa6EgABhrAQERASEBsSAAGGuRIA +AYa8EA0QGBIAAYayEBXSAA4APgBGAoaASKDSAA4APgHXAomAZ6DSAA4APgHXAoyAZ6DSADcAOAKOAo+i +Ao8AO15OU0lCT2JqZWN0RGF0YQAIABkAIgAnADEAOgA/AEQAUgBUAGYBnwGlAfAB9wH+AgwCHgI6AkgC +VAJgAm4CeQKHAqMCsQLEAtYC8AL6AwcDCQMLAw0DDwMRAxMDFQMXAxkDGwMdAx8DIQMjAyUDJwMsAy4D +NwNDA0UDRwNcA2UDbgN5A34DjQOWA6kDsgO9A78DwAPJA9AD3QPjA+wD7gQDBAUEBwQJBAsEDQQPBBEE +EwQVBBcEKAQ2BD8ERwRJBEsETQRPBIAEjQSaBKgEsgTABM0E1wTpBP0FBwUTBRUFFwUZBRsFIAUiBSQF +JgUoBSoFLAUuBUkFUgVcBV4FZAVtBXQFhgWPBZgFmgWiBasFrQWyBc8F4QXsBfUGAQYKBhYGGAYaBhwG +HwYhBiMGJQYuBjAGPQY/BkEGQwZFBkcGSQaQBpgGqga0BskG2wbzBwgHEgclB0AHRgddB18HYQdjB2UH +agdsB24Hdwd4B3kHewd9B38HggeEB50Hsge+B8kH0wfgB+UH5wfpB+sH7gfwCAEICAgPCBgIGggjCCUI +Jwg0CD0IQghJCFIIWQhnCG4Idwh5CHsIgQiKCJUInwipCLAIvAjdCN8I4QjjCOUI5gjoCOoJBQkmCToJ +SAlUCVkJWwldCV8JYQljCWgJagl9CY4JkAmZCZsJngmzCbsJyAnUCeIJ5AnmCegJ6gnsCfMKAAoNChUK +FwojCiwKMQpGCkgKSgpMCk4KYQpuCnAKcwp8CoUKlwqkCq0KuArECukK6wrtCu8K8QryCvQK9gsOC0cL +XQtyC4ELlAumC7gLxgvLC80LzwvRC9ML1QvXC9kL2wvdC+IL6wvuC+8L8Qv6DAMMEAwZDCQMLQxSDFQM +VgxYDFoMWwxdDF8MYgx6DLMMtQy3DLkMuwy9DL8MwQzIDMoM6wztDO8M8QzzDPQM9gz4DRINNw1LDVAN +Ug1UDVYNWA1aDVsNXQ1+DYANgg2EDYYNiQ2KDYwNjg2mDd8N7Q3vDfEN8w31DfcN+Q37Df0N/w4EDhsO +KA43DjkOOw49DkUOTg5XDlwObw54DoQOhg6IDpEOlg6sDrUOvA7LDtMO3g7nDu4PBg8RDy4PNw88D08P +Vg9fD2YPfQ+MD50Pnw+hD6MPpQ+uD78PwQ/DD8UPxw/QD+EP4w/lD+cP6Q/zD/wQAxAbECwQLhAwEDIQ +NBBFEEcQSRBLEE0QWhBrEG0QbxBxEHMQiBCZEJsQnRCfEKEQqxC8EL4QwBDCEMQQ0BDhEOMQ5RDnEOkQ +9RD+EQARHREfESERIxElEScRKRErES0RLxExETMRNRE3ETkRQhFEEUYRVBFdEWIRaxFtEYoRjBGOEZAR +khGUEZYRmBGaEZwRnhGgEaIRpBGmEa8RsRHSEdQR1hHYEdoR3BHeEeAR4hHkEeYR6BHqEewR7hHwEfkR ++xIcEh4SIBIiEiQSJhIoEioSLBIuEjASMhI0EjYSOBI6EkISVBJhEnQSmRK+EssS3hL1EwETJBM7E0YT +ZxNwE3ITcxN8E34TfxOIE4oTvxPBE8MTxRPHE8kTyxPNE88T0RPTE9UT1xPZE9sT3RPfE+ET4xPlE+cT +6RPrE+0T7xPxE/oT/BQxFDMUNRQ3FDkUOxQ9FD8UQRRDFEUURxRJFEsUTRRPFFEUUxRVFFcUWRRbFF0U +XxRhFGMUZRRnFGkUaxRtFG8UeBR6FH8UhBSJFI4UkxSVFJcUmRSeFKMUpRSnFKwUrhS3FLkUuhTDFMUU +xhTPFNEU0hTbFOAAAAAAAAACAgAAAAAAAAKQAAAAAAAAAAAAAAAAAAAU7w + + + diff --git a/English.lproj/VLGroove.nib/info.nib b/English.lproj/VLGroove.nib/info.nib deleted file mode 100644 index b053b83..0000000 --- a/English.lproj/VLGroove.nib/info.nib +++ /dev/null @@ -1,16 +0,0 @@ - - - - - IBDocumentLocation - 59 9 356 240 0 0 1280 778 - IBFramework Version - 460.0 - IBOpenObjects - - 13 - - IBSystem Version - 9A412 - - diff --git a/English.lproj/VLGroove.nib/keyedobjects.nib b/English.lproj/VLGroove.nib/keyedobjects.nib index 2fd578f37125671e9fed56a099d6dbc71a53679f..94fbb279f1d77826d14b574effc8f622698c1a7b 100644 GIT binary patch literal 6703 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 C;@VmO delta 3692 zcmZ`*2Urx>7CvWYcFNA|%msS|W5I$2!GfScR8UcnAS!|)$cpGvTo#eXBYP7y1woA) zTTD|zp3fv|G|||JJE z{2VXg&#(vY;9b0j_u)PK1>4~Re2Bl|Z}L9IYx~m7jCpdg942Kag5@KK!jD}chK{CjH2xHWjE83+0meci_`!HrXThHgrDn>}A=Qw?9#4d1*I1#miwet{M$)IL z=9@PMfa+AGg9%4?8sQ2wwR74b9~?=s2|e;1_N<&tYDpZEmSeS@fPT;)WSPm;-CAt zZQMS>UIp%t;)9^Lilq*X*0Vr2z()8GHo<222tI}_u1!)%s}{5gZR#UKyuUkf+h9BF zfSs@lcEcVQ%FUh4+edWvKmlz=NXn>!saY9m(e^Z^i#HK_Vc#0q2VvuwNVz!<@67{n zumTRkAqblkn-FQwEzGythgfYkX5>E9=jA`t65lg1!BJ$Z1N#DwR>D#E5{|)f2xGZ- zt&lr(I$I~u@#b^)n`BoyU4tl9o<0{&xJ?i*@xgK2S-G99|s>)<0a zKF#L24d25L@FV;LKf@ik3-?@`m0n6G+L4H~18wiRr8FP;Jv?O3v*9;ZL*u7sIjpo( zOs^h&y`NClJ>0eYJKSEw(8B%)6anra!adrFcA=daT&%fS+d4QDX{X3uUT>69c?T6V z!y(sPbAVGr%e!bnyI7*vrib!ctiM z6gV8YIqtfd#NvN)iPzxo+4aNzUUnGfVb_QDW$b+T8y zNKl_Z7g`#*V|Y@^I0i0ayt|mupUt?C6>}wAO(j0D2}A8^h53Nn7U=kFq+CKpNF>3GstcETKaglrJ4QA;W63W~Mo;4J}H+ z59cxqUuH9E!nC?>)6ilevv`?VgfffRlxah)`BUv#d5)~y9Oq**Pt>Kj$P=|M9g|9Y z3-U79R1K^LJhoaKg(e{_U-!fBMr`v(y<%Z0vN|4O=SCp;cUO)$Mz1R885di zBf!aYffyRkf;Y1bgu*ru9NSEcW>nou4Rb3+N7O@q?SaEuyn^50RlJ7Z;&r@%-{DQX zg}3p0`~iQ&pXgMYL9KKe&7{+57M($7QX9>tIW(8%(OJ|^S`iCrMjDZpq{$$n6N5A- zjfpSuAx%9KK@^8Hyq*syJmJGho^#f+IfXN?;mod@#+{wx*&c2!Zon=9B>-f zoa@8|aZhu}To(6FZXvgp+r;hRKIQgt2e?DrXWS9)3+_wqICqje&7I}WaTmCY+$HX7 z?h1E{d%*q5J>q@%mVA4@2OrEw@-h5mK9jfe4!(eYmY>fr;aBjh`3n9cehdGJli$wo zulysSyD&hA77~S2AzS!|Fi%(}tP?&Gs)W75e&L{S zSolKtQaCQ06iy3gg>%9M;lA*vNinG=A5%+HJ5#VJ+%(J-ZHhBZFikY2n(|D~n@UYf zP0LLyO{+|AnBFz5H90q%J~nMNZ8PmK?Gi!s6Eb)_cjkQ z$Cz#A9CM!8Zg!Xp%!TGf=ELS1^Bt8_o2UV5s2Z(~P-E25YMdIcCa8((cr{6#tY)e+ z)R}6wI$M2CU8ugUR;nA-ZR&ZoTCGtptF`JC^{RSZ11(ew(*|l!YlF2R+Au9zi`B+x z*-kB2o2BJz1=?(Fj)FJ1N1I>H@&+)NRQAX^`Ux{ z9;Z*y)AbB}nm%2hr9ZFF)15EqFX^TFa(%77PJdrtuW!^3=x6k=^z(YPUZY>vf70(5 zoFN#ZAsc2xGjxL(EsVBCfYHV1ZwxTPjX_3)5oruHqKr5r-k4&f8yUtlW4bZJuo*c< zp;2VKWRx0Z#zJGUvBY@QSY}ih>y4epLF1%R?KEnPOU8BMJL9Ht*SJqwu=l$S@gwa> zd(x2vkS?Sf=}vl*AQDXakbWeTM3SK-lVp*ZB%9=tStOqnkU~;Kib)A^lIO@=GM~Ii zUM34jIax$rAuh6%EGH|;D)I(-i>xN=$ou32vW0v?wvoLgU_UuPj*^q!%^}Ct9aZnK Iek8U31=R8?&j0`b diff --git a/Sources/VLDocument.h b/Sources/VLDocument.h index b036d69..e8d33ee 100644 --- a/Sources/VLDocument.h +++ b/Sources/VLDocument.h @@ -52,6 +52,8 @@ - (IBAction) showOutput:(id)sender; - (IBAction) showLog:(id)sender; +- (IBAction) play:(id)sender; +- (IBAction) stop:(id)sender; - (NSString *) tmpPath; - (NSString *) workPath; @@ -64,6 +66,7 @@ - (void) didChangeSong; - (void) addObserver:(id)observer; - (VLLogWindow *)logWin; +- (void) playWithGroove:(NSString *)groove; @end diff --git a/Sources/VLDocument.mm b/Sources/VLDocument.mm index 935395d..52d4089 100644 --- a/Sources/VLDocument.mm +++ b/Sources/VLDocument.mm @@ -418,6 +418,18 @@ [self fileURLWithExtension:@"mid"]])); } +- (void) playWithGroove:(NSString *)groove +{ + NSString * savedGroove = songGroove; + songGroove = groove; + [validTmpFiles removeObjectForKey:@"mma"]; + [validTmpFiles removeObjectForKey:@"mid"]; + [self play:groove]; + songGroove = savedGroove; + [validTmpFiles removeObjectForKey:@"mma"]; + [validTmpFiles removeObjectForKey:@"mid"]; +} + - (IBAction) stop:(id)sender { VLSoundOut::Instance()->Stop(); diff --git a/Sources/VLGrooveController.h b/Sources/VLGrooveController.h index 779d7a4..6b71696 100644 --- a/Sources/VLGrooveController.h +++ b/Sources/VLGrooveController.h @@ -9,21 +9,25 @@ #import @class VLSheetView; +@class VLDocument; @interface VLGrooveController : NSWindowController { NSDictionary * fGrooves; IBOutlet NSBrowser * fBrowser; IBOutlet NSTextField * fDescription; IBOutlet NSButton * fOKButton; + IBOutlet NSButton * fPlayButton; NSString * fStyle; NSDictionary * fSubStyles; NSArray * fSubStyleList; NSPredicate * fSubStyleFilter; + VLDocument * fDocument; } - (id) initWithSheetView:(VLSheetView *)view; - (IBAction)endSheet:(id)sender; - (IBAction)updateDescription:(id)sender; +- (IBAction) togglePlay:(id)sender; @end diff --git a/Sources/VLGrooveController.mm b/Sources/VLGrooveController.mm index de3be91..0b622d5 100644 --- a/Sources/VLGrooveController.mm +++ b/Sources/VLGrooveController.mm @@ -8,6 +8,7 @@ #import "VLGrooveController.h" #import "VLSheetView.h" +#import "VLDocument.h" @implementation VLGrooveController @@ -20,6 +21,7 @@ [[NSPredicate predicateWithFormat: @"!(SELF like[c] '.DESC') AND !(SELF matches[c] '.*(Intro|End)\\\\d*$')"] retain]; + fDocument = [view document]; [NSApp beginSheet: [self window] modalForWindow: [view window] @@ -36,6 +38,14 @@ [super dealloc]; } +- (IBAction) togglePlay:(id)sender +{ + if ([sender state]) + [fDocument playWithGroove:[[fBrowser selectedCellInColumn:1] stringValue]]; + else + [fDocument stop:sender]; +} + - (IBAction)endSheet:(id)sender { [NSApp endSheet:[self window] returnCode:[sender tag]]; @@ -43,9 +53,12 @@ - (void)didEndSheet:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo { + [fDocument stop:self]; if (returnCode == NSAlertFirstButtonReturn) [(VLSheetView *)contextInfo setGroove:[[fBrowser selectedCellInColumn:1] stringValue]]; - + else + [(VLSheetView *)contextInfo setGroove:nil]; + [[self window] orderOut:self]; } @@ -98,13 +111,16 @@ { BOOL validStyle = [fBrowser selectedColumn]; [fOKButton setEnabled:validStyle]; - if (validStyle) + [fPlayButton setEnabled:validStyle]; + if (validStyle) { [fDescription setStringValue: [NSString stringWithFormat:@"%@\n\n%@", [fSubStyles objectForKey:@".DESC"], [fSubStyles objectForKey: [[fBrowser selectedCellInColumn:1] stringValue]]]]; - else + [fDocument stop:self]; + [self togglePlay:fPlayButton]; + } else [fDescription setStringValue:[fSubStyles objectForKey:@".DESC"]]; } diff --git a/Sources/VLMMADocument.mm b/Sources/VLMMADocument.mm index 2d308e9..2f2e6fb 100644 --- a/Sources/VLMMADocument.mm +++ b/Sources/VLMMADocument.mm @@ -37,7 +37,7 @@ size_t m = *i; sprintf(buf, "%-5d", ++meas); mmaFile += buf; - song->fMeasures[m].MMAChords(mmas, prop); + song->fMeasures[m].MMAChords(mmas, prop, i==song->begin()); mmaFile += mmas; song->fMeasures[m].MMANotes(mmas, prop, song->TiedDuration(m+1)); mmaFile += "\t{ " + mmas + " }\n"; diff --git a/Sources/VLModel.cpp b/Sources/VLModel.cpp index 95e2839..4790305 100644 --- a/Sources/VLModel.cpp +++ b/Sources/VLModel.cpp @@ -619,15 +619,15 @@ static const VLChordModifier kMMAModifiers[] = { {NULL, 0, 0} }; -void VLChord::MMAName(std::string & name, bool useSharps) const +bool VLChord::MMAName(std::string & name, bool useSharps, bool initial) const { VLFraction dur = fDuration; int quarters = static_cast(dur*4.0f+0.5f); name = ""; if (!quarters--) - return; + return initial; if (fPitch == kNoPitch) { - name = '/'; + name = initial ? 'z' : '/'; } else { std::string base, ext; VLNote::Name(base, useSharps); @@ -675,6 +675,8 @@ void VLChord::MMAName(std::string & name, bool useSharps) const } while (quarters--) name += " /"; + + return false; } static VLFraction MaxNote(VLFraction d) @@ -799,7 +801,8 @@ void VLMeasure::MMANotes(std::string & notes, const VLProperties & prop, notes += "<>;"; } -void VLMeasure::MMAChords(std::string & chords, const VLProperties & prop) const +void VLMeasure::MMAChords(std::string & chords, const VLProperties & prop, + bool initial) const { VLChordList::const_iterator i = fChords.begin(); VLChordList::const_iterator e = fChords.end(); @@ -807,7 +810,7 @@ void VLMeasure::MMAChords(std::string & chords, const VLProperties & prop) const chords.clear(); for (; i!=e; ++i) { std::string chord; - i->MMAName(chord, prop.fKey >= 0); + initial = i->MMAName(chord, prop.fKey >= 0, initial); if (chords.size()) chords += ' '; chords += chord; diff --git a/Sources/VLModel.h b/Sources/VLModel.h index db382c8..79065c9 100644 --- a/Sources/VLModel.h +++ b/Sources/VLModel.h @@ -202,7 +202,7 @@ struct VLChord : VLNote { VLChord(std::string name); void Name(std::string & base, std::string & ext, std::string & root, bool useSharps = false) const; void LilypondName(std::string & name, bool useSharps = false) const; - void MMAName(std::string & name, bool useSharps) const; + bool MMAName(std::string & name, bool useSharps, bool initial) const; }; struct VLProperties { @@ -245,7 +245,7 @@ struct VLMeasure { VLMeasure(); void MMANotes(std::string & notes, const VLProperties & prop, VLFraction extra) const; - void MMAChords(std::string & chords, const VLProperties & prop) const; + void MMAChords(std::string & chords, const VLProperties & prop, bool initial) const; }; struct VLRepeat { diff --git a/Sources/VLSheetView.mm b/Sources/VLSheetView.mm index 4b0e3f3..c10d839 100644 --- a/Sources/VLSheetView.mm +++ b/Sources/VLSheetView.mm @@ -982,8 +982,12 @@ static int8_t sSharpAcc[] = { - (void)setGroove:(NSString *)groove { - [[self document] setValue:groove forKey:@"songGroove"]; - [self setGrooveMenu:groove]; + if (groove) { + [[self document] setValue:groove forKey:@"songGroove"]; + [self setGrooveMenu:groove]; + } else { + [fGrooveMenu selectItemAtIndex:2]; + } } - (void)setGrooveMenu:(NSString *)groove