mirror of
https://github.com/microtherion/VocalEasel.git
synced 2024-12-22 19:23:59 +00:00
Implemented groove selection sheet
This commit is contained in:
parent
7c5f28ede9
commit
a5f43d16d1
2
English.lproj/VLDocument.nib/classes.nib
generated
2
English.lproj/VLDocument.nib/classes.nib
generated
|
@ -31,6 +31,7 @@
|
||||||
ACTIONS = {
|
ACTIONS = {
|
||||||
endRepeatSheet = id;
|
endRepeatSheet = id;
|
||||||
hideFieldEditor = id;
|
hideFieldEditor = id;
|
||||||
|
selectGroove = id;
|
||||||
setDivisions = id;
|
setDivisions = id;
|
||||||
setKey = id;
|
setKey = id;
|
||||||
setTime = id;
|
setTime = id;
|
||||||
|
@ -41,6 +42,7 @@
|
||||||
fEndingMsg = id;
|
fEndingMsg = id;
|
||||||
fEndingSheet = id;
|
fEndingSheet = id;
|
||||||
fFieldEditor = id;
|
fFieldEditor = id;
|
||||||
|
fGrooveMenu = id;
|
||||||
fRepeatMsg = id;
|
fRepeatMsg = id;
|
||||||
fRepeatSheet = id;
|
fRepeatSheet = id;
|
||||||
};
|
};
|
||||||
|
|
8
English.lproj/VLDocument.nib/info.nib
generated
8
English.lproj/VLDocument.nib/info.nib
generated
|
@ -1,17 +1,19 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>IBDocumentLocation</key>
|
<key>IBDocumentLocation</key>
|
||||||
<string>427 29 356 240 0 0 1280 778 </string>
|
<string>427 29 356 240 0 0 1280 778 </string>
|
||||||
<key>IBFramework Version</key>
|
<key>IBFramework Version</key>
|
||||||
<string>454.0</string>
|
<string>460.0</string>
|
||||||
<key>IBOpenObjects</key>
|
<key>IBOpenObjects</key>
|
||||||
<array>
|
<array>
|
||||||
<integer>5</integer>
|
<integer>5</integer>
|
||||||
<integer>144</integer>
|
<integer>144</integer>
|
||||||
|
<integer>196</integer>
|
||||||
|
<integer>216</integer>
|
||||||
</array>
|
</array>
|
||||||
<key>IBSystem Version</key>
|
<key>IBSystem Version</key>
|
||||||
<string>9A321</string>
|
<string>9A412</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
BIN
English.lproj/VLDocument.nib/keyedobjects.nib
generated
BIN
English.lproj/VLDocument.nib/keyedobjects.nib
generated
Binary file not shown.
13
English.lproj/VLGroove.nib/classes.nib
generated
Normal file
13
English.lproj/VLGroove.nib/classes.nib
generated
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
16
English.lproj/VLGroove.nib/info.nib
generated
Normal file
16
English.lproj/VLGroove.nib/info.nib
generated
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IBDocumentLocation</key>
|
||||||
|
<string>59 9 356 240 0 0 1280 778 </string>
|
||||||
|
<key>IBFramework Version</key>
|
||||||
|
<string>460.0</string>
|
||||||
|
<key>IBOpenObjects</key>
|
||||||
|
<array>
|
||||||
|
<integer>13</integer>
|
||||||
|
</array>
|
||||||
|
<key>IBSystem Version</key>
|
||||||
|
<string>9A412</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
BIN
English.lproj/VLGroove.nib/keyedobjects.nib
generated
Normal file
BIN
English.lproj/VLGroove.nib/keyedobjects.nib
generated
Normal file
Binary file not shown.
32
Sources/VLGrooveController.h
Normal file
32
Sources/VLGrooveController.h
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
//
|
||||||
|
// VLGrooveController.h
|
||||||
|
// Vocalese
|
||||||
|
//
|
||||||
|
// Created by Matthias Neeracher on 2/1/07.
|
||||||
|
// Copyright 2007 __MyCompanyName__. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@class VLSheetView;
|
||||||
|
|
||||||
|
@interface VLGrooveController : NSWindowController {
|
||||||
|
NSDictionary * fGrooves;
|
||||||
|
IBOutlet NSBrowser * fBrowser;
|
||||||
|
IBOutlet NSTextField * fDescription;
|
||||||
|
IBOutlet NSButton * fOKButton;
|
||||||
|
NSString * fStyle;
|
||||||
|
NSDictionary * fSubStyles;
|
||||||
|
NSArray * fSubStyleList;
|
||||||
|
NSPredicate * fSubStyleFilter;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) initWithSheetView:(VLSheetView *)view;
|
||||||
|
- (IBAction)endSheet:(id)sender;
|
||||||
|
- (IBAction)updateDescription:(id)sender;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
// Local Variables:
|
||||||
|
// mode:ObjC
|
||||||
|
// End:
|
111
Sources/VLGrooveController.mm
Normal file
111
Sources/VLGrooveController.mm
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
//
|
||||||
|
// VLGrooveController.mm
|
||||||
|
// Vocalese
|
||||||
|
//
|
||||||
|
// Created by Matthias Neeracher on 2/1/07.
|
||||||
|
// Copyright 2007 __MyCompanyName__. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "VLGrooveController.h"
|
||||||
|
#import "VLSheetView.h"
|
||||||
|
|
||||||
|
@implementation VLGrooveController
|
||||||
|
|
||||||
|
- (id) initWithSheetView:(VLSheetView *)view;
|
||||||
|
{
|
||||||
|
self = [super initWithWindowNibName:@"VLGroove"];
|
||||||
|
fGrooves = [[NSDictionary alloc] initWithContentsOfFile:
|
||||||
|
[[NSBundle mainBundle] pathForResource:@"Grooves" ofType:@"plist"]];
|
||||||
|
fSubStyleFilter =
|
||||||
|
[[NSPredicate predicateWithFormat:
|
||||||
|
@"!(SELF like[c] '.DESC') AND !(SELF matches[c] '.*(Intro|End)\\\\d*$')"]
|
||||||
|
retain];
|
||||||
|
|
||||||
|
[NSApp beginSheet: [self window]
|
||||||
|
modalForWindow: [view window]
|
||||||
|
modalDelegate: self
|
||||||
|
didEndSelector: @selector(didEndSheet:returnCode:contextInfo:)
|
||||||
|
contextInfo: view];
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) dealloc
|
||||||
|
{
|
||||||
|
[fGrooves release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)endSheet:(id)sender
|
||||||
|
{
|
||||||
|
[NSApp endSheet:[self window] returnCode:[sender tag]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)didEndSheet:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
|
||||||
|
{
|
||||||
|
if (returnCode == NSAlertFirstButtonReturn)
|
||||||
|
[(VLSheetView *)contextInfo setGroove:[[fBrowser selectedCellInColumn:1] stringValue]];
|
||||||
|
|
||||||
|
[[self window] orderOut:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)browser:(NSBrowser *)sender titleOfColumn:(NSInteger)column
|
||||||
|
{
|
||||||
|
if (!column)
|
||||||
|
return @"Style";
|
||||||
|
else
|
||||||
|
return @"Substyle";
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)updateStyle
|
||||||
|
{
|
||||||
|
[fStyle autorelease];
|
||||||
|
[fSubStyleList release];
|
||||||
|
fStyle = [[[fBrowser selectedCellInColumn:0] stringValue] retain];
|
||||||
|
fSubStyles = [fGrooves objectForKey:fStyle];
|
||||||
|
fSubStyleList = [[[fSubStyles allKeys]
|
||||||
|
filteredArrayUsingPredicate:fSubStyleFilter]
|
||||||
|
retain];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSInteger)browser:(NSBrowser *)sender numberOfRowsInColumn:(NSInteger)column
|
||||||
|
{
|
||||||
|
[fBrowser setTakesTitleFromPreviousColumn:NO];
|
||||||
|
[fBrowser setDoubleAction:@selector(endSheet:)];
|
||||||
|
|
||||||
|
if (!column) {
|
||||||
|
return [fGrooves count];
|
||||||
|
} else {
|
||||||
|
[self updateStyle];
|
||||||
|
return [fSubStyleList count];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)browser:(NSBrowser *)sender willDisplayCell:(id)cell atRow:(NSInteger)row column:(NSInteger)column
|
||||||
|
{
|
||||||
|
if (!column) {
|
||||||
|
[cell setStringValue:
|
||||||
|
[[[fGrooves allKeys]
|
||||||
|
sortedArrayUsingSelector:@selector(compare:)]
|
||||||
|
objectAtIndex:row]];
|
||||||
|
} else {
|
||||||
|
[cell setStringValue:[fSubStyleList objectAtIndex:row]];
|
||||||
|
[cell setLeaf:YES];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)updateDescription:(id)sender
|
||||||
|
{
|
||||||
|
BOOL validStyle = [fBrowser selectedColumn];
|
||||||
|
[fOKButton setEnabled:validStyle];
|
||||||
|
if (validStyle)
|
||||||
|
[fDescription setStringValue:
|
||||||
|
[NSString stringWithFormat:@"%@\n\n%@",
|
||||||
|
[fSubStyles objectForKey:@".DESC"],
|
||||||
|
[fSubStyles objectForKey:
|
||||||
|
[[fBrowser selectedCellInColumn:1] stringValue]]]];
|
||||||
|
else
|
||||||
|
[fDescription setStringValue:[fSubStyles objectForKey:@".DESC"]];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
|
@ -87,6 +87,7 @@ enum VLRecalc {
|
||||||
IBOutlet id fEndingSheet;
|
IBOutlet id fEndingSheet;
|
||||||
IBOutlet id fRepeatMsg;
|
IBOutlet id fRepeatMsg;
|
||||||
IBOutlet id fEndingMsg;
|
IBOutlet id fEndingMsg;
|
||||||
|
IBOutlet id fGrooveMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction) setKey:(id)sender;
|
- (IBAction) setKey:(id)sender;
|
||||||
|
@ -94,6 +95,7 @@ enum VLRecalc {
|
||||||
- (IBAction) setDivisions:(id)sender;
|
- (IBAction) setDivisions:(id)sender;
|
||||||
- (IBAction) hideFieldEditor:(id)sender;
|
- (IBAction) hideFieldEditor:(id)sender;
|
||||||
- (IBAction) endRepeatSheet:(id)sender;
|
- (IBAction) endRepeatSheet:(id)sender;
|
||||||
|
- (IBAction) selectGroove:(id)sender;
|
||||||
|
|
||||||
- (VLDocument *) document;
|
- (VLDocument *) document;
|
||||||
- (VLSong *) song;
|
- (VLSong *) song;
|
||||||
|
@ -118,6 +120,8 @@ enum VLRecalc {
|
||||||
- (void) setEditTarget:(VLEditable *)editable;
|
- (void) setEditTarget:(VLEditable *)editable;
|
||||||
- (VLRegion) findRegionForEvent:(NSEvent *) event;
|
- (VLRegion) findRegionForEvent:(NSEvent *) event;
|
||||||
|
|
||||||
|
- (void) setGroove:(NSString *)groove;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// Local Variables:
|
// Local Variables:
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#import "VLSheetViewLyrics.h"
|
#import "VLSheetViewLyrics.h"
|
||||||
#import "VLSheetViewSelection.h"
|
#import "VLSheetViewSelection.h"
|
||||||
#import "VLSoundOut.h"
|
#import "VLSoundOut.h"
|
||||||
|
#import "VLGrooveController.h"
|
||||||
|
|
||||||
#import "VLDocument.h"
|
#import "VLDocument.h"
|
||||||
|
|
||||||
|
@ -521,6 +522,17 @@ VLMusicElement sSemi2Accidental[12][12] = {
|
||||||
[[self editTarget] highlightCursor];
|
[[self editTarget] highlightCursor];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)setKey:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(id)sender
|
||||||
|
{
|
||||||
|
if (returnCode == NSAlertAlternateReturn)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int key = [[sender selectedItem] tag];
|
||||||
|
[[self document] setKey:key transpose:returnCode==NSAlertDefaultReturn];
|
||||||
|
fNeedsRecalc = kRecalc;
|
||||||
|
[self setNeedsDisplay: YES];
|
||||||
|
}
|
||||||
|
|
||||||
- (IBAction) setKey:(id)sender
|
- (IBAction) setKey:(id)sender
|
||||||
{
|
{
|
||||||
if ([self song]->IsNonEmpty())
|
if ([self song]->IsNonEmpty())
|
||||||
|
@ -538,17 +550,6 @@ VLMusicElement sSemi2Accidental[12][12] = {
|
||||||
[self setKey:nil returnCode:NSAlertOtherReturn contextInfo:sender];
|
[self setKey:nil returnCode:NSAlertOtherReturn contextInfo:sender];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setKey:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(id)sender
|
|
||||||
{
|
|
||||||
if (returnCode == NSAlertAlternateReturn)
|
|
||||||
return;
|
|
||||||
|
|
||||||
int key = [[sender selectedItem] tag];
|
|
||||||
[[self document] setKey:key transpose:returnCode==NSAlertDefaultReturn];
|
|
||||||
fNeedsRecalc = kRecalc;
|
|
||||||
[self setNeedsDisplay: YES];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction) setTime:(id)sender
|
- (IBAction) setTime:(id)sender
|
||||||
{
|
{
|
||||||
int time = [[sender selectedItem] tag];
|
int time = [[sender selectedItem] tag];
|
||||||
|
@ -892,6 +893,7 @@ static int8_t sSharpAcc[] = {
|
||||||
{
|
{
|
||||||
[[self document] addObserver:self forKeyPath:@"song" options:0 context:nil];
|
[[self document] addObserver:self forKeyPath:@"song" options:0 context:nil];
|
||||||
[[self document] addObserver:self forKeyPath:@"songKey" options:0 context:nil];
|
[[self document] addObserver:self forKeyPath:@"songKey" options:0 context:nil];
|
||||||
|
[self setGroove:[[self document] valueForKey:@"songGroove"]];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)o change:(NSDictionary *)c context:(id)ctx
|
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)o change:(NSDictionary *)c context:(id)ctx
|
||||||
|
@ -906,4 +908,28 @@ static int8_t sSharpAcc[] = {
|
||||||
[NSApp endSheet:[sender window] returnCode:[sender tag]];
|
[NSApp endSheet:[sender window] returnCode:[sender tag]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (IBAction)selectGroove:(id)sender
|
||||||
|
{
|
||||||
|
if ([sender tag])
|
||||||
|
[[VLGrooveController alloc] initWithSheetView:self];
|
||||||
|
else
|
||||||
|
[self setGroove:[sender title]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setGroove:(NSString *)groove
|
||||||
|
{
|
||||||
|
[[self document] setValue:groove forKey:@"songGroove"];
|
||||||
|
int removeIndex = [fGrooveMenu indexOfItemWithTitle:groove];
|
||||||
|
if (removeIndex < 0 && [fGrooveMenu numberOfItems] > 11)
|
||||||
|
removeIndex = 11;
|
||||||
|
if (removeIndex >= 0)
|
||||||
|
[fGrooveMenu removeItemAtIndex:removeIndex];
|
||||||
|
[[[fGrooveMenu menu] insertItemWithTitle:groove action:@selector(selectGroove:)
|
||||||
|
keyEquivalent:@"" atIndex:2] setTarget:self];
|
||||||
|
[fGrooveMenu selectItemAtIndex:2];
|
||||||
|
NSArray * grooves = [fGrooveMenu itemTitles];
|
||||||
|
grooves = [grooves subarrayWithRange:NSMakeRange(2, [grooves count]-2)];
|
||||||
|
[[NSUserDefaults standardUserDefaults] setObject:grooves forKey:@"VLGrooves"];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -260,6 +260,14 @@ const char * sSteps = "C DbD EbE F GbG AbA BbB ";
|
||||||
objectForInfoDictionaryKey:@"CFBundleVersion"]]]];
|
objectForInfoDictionaryKey:@"CFBundleVersion"]]]];
|
||||||
[identification addChild:encoding];
|
[identification addChild:encoding];
|
||||||
|
|
||||||
|
NSXMLElement * misc = [NSXMLNode elementWithName:@"miscellaneous"];
|
||||||
|
NSXMLElement * groove = [NSXMLNode elementWithName:@"miscellaneous-field"
|
||||||
|
stringValue:songGroove];
|
||||||
|
[groove addAttribute: [NSXMLNode attributeWithName:@"name"
|
||||||
|
stringValue:@"VocalEasel-groove"]];
|
||||||
|
[misc addChild: groove];
|
||||||
|
[identification addChild: misc];
|
||||||
|
|
||||||
return identification;
|
return identification;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -674,6 +682,12 @@ int8_t sStepToPitch[] = {
|
||||||
error: outError] retain];
|
error: outError] retain];
|
||||||
songLyricist= [[doc stringForXPath:@".//creator[@type=\"poet\"]"
|
songLyricist= [[doc stringForXPath:@".//creator[@type=\"poet\"]"
|
||||||
error: outError] retain];
|
error: outError] retain];
|
||||||
|
id groove = [doc stringForXPath:@".//miscellaneous-field[@name=\"VocalEasel-groove\"]"
|
||||||
|
error: outError];
|
||||||
|
if (groove) {
|
||||||
|
[songGroove autorelease];
|
||||||
|
songGroove = [groove retain];
|
||||||
|
}
|
||||||
|
|
||||||
NSXMLElement * chords = [doc nodeForXPath:@".//part[@id=\"HARM\"]"
|
NSXMLElement * chords = [doc nodeForXPath:@".//part[@id=\"HARM\"]"
|
||||||
error:outError];
|
error:outError];
|
||||||
|
|
83
Tools/rebuildGrooves
Executable file
83
Tools/rebuildGrooves
Executable file
|
@ -0,0 +1,83 @@
|
||||||
|
#!/usr/bin/ruby
|
||||||
|
#
|
||||||
|
# rebuildGrooves
|
||||||
|
# Vocalese
|
||||||
|
#
|
||||||
|
# Created by Matthias Neeracher on 2/5/07.
|
||||||
|
# Copyright (c) 2007 __MyCompanyName__. All rights reserved.
|
||||||
|
#
|
||||||
|
|
||||||
|
require 'find'
|
||||||
|
|
||||||
|
grooves = {}
|
||||||
|
Find.find(ARGV[0]) do |f|
|
||||||
|
if File.directory?(f)
|
||||||
|
Find.prune if File.exist?("f/MMAIGNORE")
|
||||||
|
elsif f =~ %r|.*/(\S+?).mma$|
|
||||||
|
style = $1
|
||||||
|
g = {}
|
||||||
|
doc = ""
|
||||||
|
groove= ""
|
||||||
|
File.open(f) do |file|
|
||||||
|
inDoc = false
|
||||||
|
inCont= false
|
||||||
|
file.each do |line|
|
||||||
|
if line =~ /^\s*Begin\s+Doc\s*$/
|
||||||
|
inDoc = true
|
||||||
|
elsif inDoc
|
||||||
|
if line =~ /^\s*End\s*$/
|
||||||
|
inDoc = false
|
||||||
|
else
|
||||||
|
doc = doc+" "+line.strip
|
||||||
|
end
|
||||||
|
elsif line =~ /^\s*DefGroove\s+(\S+)\s+(.+?)\s*$/
|
||||||
|
groove = $1
|
||||||
|
gdoc = $2
|
||||||
|
if gdoc =~ /(.*?)\s+\\\s*$/
|
||||||
|
gdoc = $1
|
||||||
|
inCont = true
|
||||||
|
end
|
||||||
|
g[groove] = gdoc
|
||||||
|
elsif inCont
|
||||||
|
if line =~ /^\s*(.*?)\s*(\\)?\s*$/
|
||||||
|
g[groove] = g[groove] + " " + $1
|
||||||
|
inCont = $2 != nil
|
||||||
|
else
|
||||||
|
inCont = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
unless g.empty?
|
||||||
|
g[".DESC"] = doc.lstrip
|
||||||
|
grooves[style] = g
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
OUT = File.new(ARGV[1], "w")
|
||||||
|
|
||||||
|
OUT.print <<'END_HEADER'
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
END_HEADER
|
||||||
|
|
||||||
|
def xmlesc(s)
|
||||||
|
s.gsub('&', '&').gsub('<', '<').gsub('>', '&rt;')
|
||||||
|
end
|
||||||
|
|
||||||
|
grooves.each do |style,grooves|
|
||||||
|
OUT.puts "\t<key>#{xmlesc(style)}</key>"
|
||||||
|
OUT.puts "\t<dict>"
|
||||||
|
grooves.each do |name,desc|
|
||||||
|
OUT.puts "\t\t<key>#{xmlesc(name)}</key>"
|
||||||
|
OUT.puts "\t\t<string>#{xmlesc(desc)}</string>"
|
||||||
|
end
|
||||||
|
OUT.puts "\t</dict>"
|
||||||
|
end
|
||||||
|
|
||||||
|
OUT.puts "</dict>"
|
||||||
|
OUT.puts "</plist>"
|
||||||
|
|
|
@ -46,6 +46,9 @@
|
||||||
959408AE096922F7007CCCF8 /* VLModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955E58E4095658AB0045FDA5 /* VLModel.cpp */; };
|
959408AE096922F7007CCCF8 /* VLModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955E58E4095658AB0045FDA5 /* VLModel.cpp */; };
|
||||||
959420EB0B44E769006BC62C /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 954DD4DA0B44E6000056C504 /* MainMenu.nib */; };
|
959420EB0B44E769006BC62C /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 954DD4DA0B44E6000056C504 /* MainMenu.nib */; };
|
||||||
959420EC0B44E77A006BC62C /* VLDocument.nib in Resources */ = {isa = PBXBuildFile; fileRef = 954DD4DF0B44E61E0056C504 /* VLDocument.nib */; };
|
959420EC0B44E77A006BC62C /* VLDocument.nib in Resources */ = {isa = PBXBuildFile; fileRef = 954DD4DF0B44E61E0056C504 /* VLDocument.nib */; };
|
||||||
|
9599ED960B73185800A6A2F7 /* VLGroove.nib in Resources */ = {isa = PBXBuildFile; fileRef = 9599ED940B73185800A6A2F7 /* VLGroove.nib */; };
|
||||||
|
9599ED9C0B731CC500A6A2F7 /* VLGrooveController.h in Copy MMA Library */ = {isa = PBXBuildFile; fileRef = 9599ED9A0B731CC500A6A2F7 /* VLGrooveController.h */; };
|
||||||
|
9599ED9D0B731CC500A6A2F7 /* VLGrooveController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9599ED9B0B731CC500A6A2F7 /* VLGrooveController.mm */; };
|
||||||
95A1C37C0AF1D4370076597D /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95A1C37B0AF1D4370076597D /* Quartz.framework */; };
|
95A1C37C0AF1D4370076597D /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95A1C37B0AF1D4370076597D /* Quartz.framework */; };
|
||||||
95A1C3860AF2ACE20076597D /* VLSheetWindow.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95A1C3850AF2ACE20076597D /* VLSheetWindow.mm */; };
|
95A1C3860AF2ACE20076597D /* VLSheetWindow.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95A1C3850AF2ACE20076597D /* VLSheetWindow.mm */; };
|
||||||
95B3E1A70960E58B000E9C0D /* Music in Resources */ = {isa = PBXBuildFile; fileRef = 95B3E1980960E58B000E9C0D /* Music */; };
|
95B3E1A70960E58B000E9C0D /* Music in Resources */ = {isa = PBXBuildFile; fileRef = 95B3E1980960E58B000E9C0D /* Music */; };
|
||||||
|
@ -57,6 +60,7 @@
|
||||||
95C461FE0B04432700649F92 /* MMA in Copy MMA Library */ = {isa = PBXBuildFile; fileRef = 95C461DD0B04430F00649F92 /* MMA */; };
|
95C461FE0B04432700649F92 /* MMA in Copy MMA Library */ = {isa = PBXBuildFile; fileRef = 95C461DD0B04430F00649F92 /* MMA */; };
|
||||||
95C462000B04472E00649F92 /* mmaWrapper in Copy Tools */ = {isa = PBXBuildFile; fileRef = 95C461FF0B04472900649F92 /* mmaWrapper */; };
|
95C462000B04472E00649F92 /* mmaWrapper in Copy Tools */ = {isa = PBXBuildFile; fileRef = 95C461FF0B04472900649F92 /* mmaWrapper */; };
|
||||||
95C462830B045CB700649F92 /* lilyWrapper in Copy Tools */ = {isa = PBXBuildFile; fileRef = 95C4627A0B045C8E00649F92 /* lilyWrapper */; };
|
95C462830B045CB700649F92 /* lilyWrapper in Copy Tools */ = {isa = PBXBuildFile; fileRef = 95C4627A0B045C8E00649F92 /* lilyWrapper */; };
|
||||||
|
95D0C2FC0B785D020061080E /* rebuildGrooves in Copy Tools */ = {isa = PBXBuildFile; fileRef = 95D0C2FB0B785D020061080E /* rebuildGrooves */; };
|
||||||
95E04DA70AEB486E006F30A0 /* TVLLilypond.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95E04DA60AEB486E006F30A0 /* TVLLilypond.mm */; };
|
95E04DA70AEB486E006F30A0 /* TVLLilypond.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95E04DA60AEB486E006F30A0 /* TVLLilypond.mm */; };
|
||||||
95E04DA80AEB4878006F30A0 /* VLDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */; };
|
95E04DA80AEB4878006F30A0 /* VLDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */; };
|
||||||
95E04DA90AEB487A006F30A0 /* VLLilypondDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 953722660AE9F0E100B6E483 /* VLLilypondDocument.mm */; };
|
95E04DA90AEB487A006F30A0 /* VLLilypondDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 953722660AE9F0E100B6E483 /* VLLilypondDocument.mm */; };
|
||||||
|
@ -93,6 +97,7 @@
|
||||||
95C461FE0B04432700649F92 /* MMA in Copy MMA Library */,
|
95C461FE0B04432700649F92 /* MMA in Copy MMA Library */,
|
||||||
95C461C40B043E8900649F92 /* includes in Copy MMA Library */,
|
95C461C40B043E8900649F92 /* includes in Copy MMA Library */,
|
||||||
95C461C50B043E8900649F92 /* lib in Copy MMA Library */,
|
95C461C50B043E8900649F92 /* lib in Copy MMA Library */,
|
||||||
|
9599ED9C0B731CC500A6A2F7 /* VLGrooveController.h in Copy MMA Library */,
|
||||||
);
|
);
|
||||||
name = "Copy MMA Library";
|
name = "Copy MMA Library";
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
@ -103,6 +108,7 @@
|
||||||
dstPath = bin;
|
dstPath = bin;
|
||||||
dstSubfolderSpec = 7;
|
dstSubfolderSpec = 7;
|
||||||
files = (
|
files = (
|
||||||
|
95D0C2FC0B785D020061080E /* rebuildGrooves in Copy Tools */,
|
||||||
95C462830B045CB700649F92 /* lilyWrapper in Copy Tools */,
|
95C462830B045CB700649F92 /* lilyWrapper in Copy Tools */,
|
||||||
95C462000B04472E00649F92 /* mmaWrapper in Copy Tools */,
|
95C462000B04472E00649F92 /* mmaWrapper in Copy Tools */,
|
||||||
95C461D80B0440A300649F92 /* mma.py in Copy Tools */,
|
95C461D80B0440A300649F92 /* mma.py in Copy Tools */,
|
||||||
|
@ -167,6 +173,9 @@
|
||||||
9593E4E70AE0ED1F00035816 /* vocalese.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = vocalese.icns; path = Resources/vocalese.icns; sourceTree = "<group>"; };
|
9593E4E70AE0ED1F00035816 /* vocalese.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = vocalese.icns; path = Resources/vocalese.icns; sourceTree = "<group>"; };
|
||||||
959408A0096922CA007CCCF8 /* TVLEdit */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = TVLEdit; sourceTree = BUILT_PRODUCTS_DIR; };
|
959408A0096922CA007CCCF8 /* TVLEdit */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = TVLEdit; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
959408AC096922EA007CCCF8 /* TVLEdit.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = TVLEdit.cpp; path = Tests/TVLEdit.cpp; sourceTree = "<group>"; };
|
959408AC096922EA007CCCF8 /* TVLEdit.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = TVLEdit.cpp; path = Tests/TVLEdit.cpp; sourceTree = "<group>"; };
|
||||||
|
9599ED950B73185800A6A2F7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/VLGroove.nib; sourceTree = "<group>"; };
|
||||||
|
9599ED9A0B731CC500A6A2F7 /* VLGrooveController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLGrooveController.h; path = Sources/VLGrooveController.h; sourceTree = "<group>"; };
|
||||||
|
9599ED9B0B731CC500A6A2F7 /* VLGrooveController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLGrooveController.mm; path = Sources/VLGrooveController.mm; sourceTree = "<group>"; };
|
||||||
95A1C37B0AF1D4370076597D /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = /System/Library/Frameworks/Quartz.framework; sourceTree = "<absolute>"; };
|
95A1C37B0AF1D4370076597D /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = /System/Library/Frameworks/Quartz.framework; sourceTree = "<absolute>"; };
|
||||||
95A1C3840AF2ACE20076597D /* VLSheetWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLSheetWindow.h; path = Sources/VLSheetWindow.h; sourceTree = "<group>"; };
|
95A1C3840AF2ACE20076597D /* VLSheetWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLSheetWindow.h; path = Sources/VLSheetWindow.h; sourceTree = "<group>"; };
|
||||||
95A1C3850AF2ACE20076597D /* VLSheetWindow.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = VLSheetWindow.mm; path = Sources/VLSheetWindow.mm; sourceTree = "<group>"; };
|
95A1C3850AF2ACE20076597D /* VLSheetWindow.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = VLSheetWindow.mm; path = Sources/VLSheetWindow.mm; sourceTree = "<group>"; };
|
||||||
|
@ -182,6 +191,7 @@
|
||||||
95C461DD0B04430F00649F92 /* MMA */ = {isa = PBXFileReference; lastKnownFileType = folder; name = MMA; path = mma/MMA; sourceTree = "<group>"; };
|
95C461DD0B04430F00649F92 /* MMA */ = {isa = PBXFileReference; lastKnownFileType = folder; name = MMA; path = mma/MMA; sourceTree = "<group>"; };
|
||||||
95C461FF0B04472900649F92 /* mmaWrapper */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; name = mmaWrapper; path = Tools/mmaWrapper; sourceTree = "<group>"; };
|
95C461FF0B04472900649F92 /* mmaWrapper */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; name = mmaWrapper; path = Tools/mmaWrapper; sourceTree = "<group>"; };
|
||||||
95C4627A0B045C8E00649F92 /* lilyWrapper */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; name = lilyWrapper; path = Tools/lilyWrapper; sourceTree = "<group>"; };
|
95C4627A0B045C8E00649F92 /* lilyWrapper */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; name = lilyWrapper; path = Tools/lilyWrapper; sourceTree = "<group>"; };
|
||||||
|
95D0C2FB0B785D020061080E /* rebuildGrooves */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; fileEncoding = 4; name = rebuildGrooves; path = Tools/rebuildGrooves; sourceTree = "<group>"; };
|
||||||
95E04DA00AEB4837006F30A0 /* TVLLilypond */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = TVLLilypond; sourceTree = BUILT_PRODUCTS_DIR; };
|
95E04DA00AEB4837006F30A0 /* TVLLilypond */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = TVLLilypond; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
95E04DA60AEB486E006F30A0 /* TVLLilypond.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = TVLLilypond.mm; path = Tests/TVLLilypond.mm; sourceTree = "<group>"; };
|
95E04DA60AEB486E006F30A0 /* TVLLilypond.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = TVLLilypond.mm; path = Tests/TVLLilypond.mm; sourceTree = "<group>"; };
|
||||||
95E04DCA0AEB4D9B006F30A0 /* Templates */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Templates; path = Resources/Templates; sourceTree = "<group>"; };
|
95E04DCA0AEB4D9B006F30A0 /* Templates */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Templates; path = Resources/Templates; sourceTree = "<group>"; };
|
||||||
|
@ -352,6 +362,8 @@
|
||||||
955CBA4D0B2366DD001CF4A1 /* VLKeyValueUndo.mm */,
|
955CBA4D0B2366DD001CF4A1 /* VLKeyValueUndo.mm */,
|
||||||
954DD4B70B444B220056C504 /* VLSheetViewSelection.h */,
|
954DD4B70B444B220056C504 /* VLSheetViewSelection.h */,
|
||||||
954DD4E50B44E67F0056C504 /* VLSheetViewSelection.mm */,
|
954DD4E50B44E67F0056C504 /* VLSheetViewSelection.mm */,
|
||||||
|
9599ED9A0B731CC500A6A2F7 /* VLGrooveController.h */,
|
||||||
|
9599ED9B0B731CC500A6A2F7 /* VLGrooveController.mm */,
|
||||||
);
|
);
|
||||||
name = Classes;
|
name = Classes;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -388,6 +400,7 @@
|
||||||
2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */,
|
2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */,
|
||||||
8D15AC360486D014006FF6A4 /* Info.plist */,
|
8D15AC360486D014006FF6A4 /* Info.plist */,
|
||||||
089C165FFE840EACC02AAC07 /* InfoPlist.strings */,
|
089C165FFE840EACC02AAC07 /* InfoPlist.strings */,
|
||||||
|
9599ED940B73185800A6A2F7 /* VLGroove.nib */,
|
||||||
);
|
);
|
||||||
name = Resources;
|
name = Resources;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -435,6 +448,7 @@
|
||||||
95C4627A0B045C8E00649F92 /* lilyWrapper */,
|
95C4627A0B045C8E00649F92 /* lilyWrapper */,
|
||||||
95C461FF0B04472900649F92 /* mmaWrapper */,
|
95C461FF0B04472900649F92 /* mmaWrapper */,
|
||||||
95C461D50B04406300649F92 /* mma.py */,
|
95C461D50B04406300649F92 /* mma.py */,
|
||||||
|
95D0C2FB0B785D020061080E /* rebuildGrooves */,
|
||||||
);
|
);
|
||||||
name = Tools;
|
name = Tools;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -583,6 +597,7 @@
|
||||||
959420EB0B44E769006BC62C /* MainMenu.nib in Resources */,
|
959420EB0B44E769006BC62C /* MainMenu.nib in Resources */,
|
||||||
959420EC0B44E77A006BC62C /* VLDocument.nib in Resources */,
|
959420EC0B44E77A006BC62C /* VLDocument.nib in Resources */,
|
||||||
950795E10B4A34D9008911A6 /* stop.tiff in Resources */,
|
950795E10B4A34D9008911A6 /* stop.tiff in Resources */,
|
||||||
|
9599ED960B73185800A6A2F7 /* VLGroove.nib in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -600,7 +615,7 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "$BUILT_PRODUCTS_DIR/VocalEasel.app/Contents/Resources/bin/mmaWrapper -g\n";
|
shellScript = "$BUILT_PRODUCTS_DIR/VocalEasel.app/Contents/Resources/bin/mmaWrapper -g\n$SRCROOT/Tools/rebuildGrooves $BUILT_PRODUCTS_DIR/VocalEasel.app/Contents/Resources/share/mma/lib $BUILT_PRODUCTS_DIR/VocalEasel.app/Contents/Resources/Grooves.plist\n";
|
||||||
};
|
};
|
||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
|
@ -634,6 +649,7 @@
|
||||||
95E299C00B2006F5001977D2 /* VLSheetViewLyrics.mm in Sources */,
|
95E299C00B2006F5001977D2 /* VLSheetViewLyrics.mm in Sources */,
|
||||||
955CBA4F0B2366DD001CF4A1 /* VLKeyValueUndo.mm in Sources */,
|
955CBA4F0B2366DD001CF4A1 /* VLKeyValueUndo.mm in Sources */,
|
||||||
954DD4E60B44E67F0056C504 /* VLSheetViewSelection.mm in Sources */,
|
954DD4E60B44E67F0056C504 /* VLSheetViewSelection.mm in Sources */,
|
||||||
|
9599ED9D0B731CC500A6A2F7 /* VLGrooveController.mm in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -700,6 +716,14 @@
|
||||||
name = Credits.rtf;
|
name = Credits.rtf;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
9599ED940B73185800A6A2F7 /* VLGroove.nib */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
9599ED950B73185800A6A2F7 /* English */,
|
||||||
|
);
|
||||||
|
name = VLGroove.nib;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXVariantGroup section */
|
/* End PBXVariantGroup section */
|
||||||
|
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user