From 50da58441736257ceba6fe21b3aa3f07b0807ac2 Mon Sep 17 00:00:00 2001 From: Matthias Neeracher Date: Tue, 3 Oct 2006 17:52:54 +0000 Subject: [PATCH] Chord editing mostly works again --- English.lproj/VLDocument.nib/classes.nib | 2 +- English.lproj/VLDocument.nib/keyedobjects.nib | Bin 14526 -> 14757 bytes Sources/VLDocument.h | 15 +- Sources/VLDocument.mm | 21 +- Sources/VLSheetView.h | 6 +- Sources/VLSheetView.mm | 42 +- Sources/VLSheetViewChords.h | 4 +- Sources/VLSheetViewChords.mm | 212 +++- Vocalese.xcodeproj/neeri.mode1v3 | 641 ++++++---- Vocalese.xcodeproj/neeri.pbxuser | 1043 ++++++++++++++++- 10 files changed, 1614 insertions(+), 372 deletions(-) diff --git a/English.lproj/VLDocument.nib/classes.nib b/English.lproj/VLDocument.nib/classes.nib index b7d3ec6..ea32267 100644 --- a/English.lproj/VLDocument.nib/classes.nib +++ b/English.lproj/VLDocument.nib/classes.nib @@ -7,7 +7,7 @@ ACTIONS = {hideFieldEditor = id; setDivisions = id; setKey = id; setTime = id; }; CLASS = VLSheetView; LANGUAGE = ObjC; - OUTLETS = {fChords = id; fFieldBeingEdited = id; fFieldEditor = id; }; + OUTLETS = {fFieldEditor = id; }; SUPERCLASS = NSView; } ); diff --git a/English.lproj/VLDocument.nib/keyedobjects.nib b/English.lproj/VLDocument.nib/keyedobjects.nib index 346099aeeed20ddd79c231de45eebec58927495c..b007baab93300b1d915c732bccc1e2c39f38588d 100644 GIT binary patch literal 14757 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 YQ--CCjeMF%QIWqgOXP3!HD%oY0GPJE#{d8T diff --git a/Sources/VLDocument.h b/Sources/VLDocument.h index e555adc..0004e3e 100644 --- a/Sources/VLDocument.h +++ b/Sources/VLDocument.h @@ -6,13 +6,23 @@ // Copyright __MyCompanyName__ 2005 . All rights reserved. // - -#import #import "VLModel.h" +#import + +@interface VLEditable : NSObject +{ +} + +- (NSString *) stringValue; +- (void) setStringValue:(NSString*)val; +- (BOOL) validValue:(NSString*)val; + +@end @interface VLDocument : NSDocument { VLSong * song; + VLEditable *editTarget; } - (VLSong *) song; @@ -23,4 +33,5 @@ - (void) setKey:(int)key transpose:(BOOL)transpose; - (void) setTimeNum:(int)num denom:(int)denom; - (void) setDivisions:(int)divisions; + @end diff --git a/Sources/VLDocument.mm b/Sources/VLDocument.mm index 3c7c7a1..bc67728 100644 --- a/Sources/VLDocument.mm +++ b/Sources/VLDocument.mm @@ -8,6 +8,24 @@ #import "VLDocument.h" +@implementation VLEditable + +- (NSString *) stringValue +{ + return @""; +} + +- (void) setStringValue:(NSString*)val +{ +} + +- (BOOL) validValue:(NSString*)val +{ + return YES; +} + +@end + @implementation VLDocument - (id)init @@ -18,7 +36,8 @@ // Add your subclass-specific initialization here. // If an error occurs here, send a [self release] message and return nil. - song = new VLSong; + song = new VLSong; + editTarget = nil; } return self; } diff --git a/Sources/VLSheetView.h b/Sources/VLSheetView.h index 0ad9355..5a0bb24 100644 --- a/Sources/VLSheetView.h +++ b/Sources/VLSheetView.h @@ -53,20 +53,18 @@ enum VLRegion { float fDisplayScale; NSPoint fLastNoteCenter; NSTrackingRectTag fCursorTracking; + VLRegion fCursorRegion; int fCursorMeasure; VLFract fCursorAt; int fCursorPitch; - id fFieldBeingEdited; BOOL fShowFieldEditor; - IBOutlet id fChords; IBOutlet id fFieldEditor; } - (IBAction) setKey:(id)sender; - (IBAction) setTime:(id)sender; - (IBAction) setDivisions:(id)sender; -- (IBAction) showFieldEditor:(id)sender withAction:(SEL)selector; - (IBAction) hideFieldEditor:(id)sender; - (VLDocument *) document; @@ -83,6 +81,8 @@ enum VLRegion { - (void) mouseEntered:(NSEvent *)event; - (void) mouseExited:(NSEvent *)event; +- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor; + @end // Local Variables: diff --git a/Sources/VLSheetView.mm b/Sources/VLSheetView.mm index e4a7ee7..41c33c6 100644 --- a/Sources/VLSheetView.mm +++ b/Sources/VLSheetView.mm @@ -346,15 +346,6 @@ static float sFlatPos[] = { [self setNeedsDisplay: YES]; } -- (IBAction)showFieldEditor:(id)sender withAction:(SEL)selector -{ - fFieldBeingEdited = sender; - [fFieldEditor setObjectValue:[sender title]]; - [fFieldEditor setAction:selector]; - [self setValue: [NSNumber numberWithBool:YES] - forKey: @"fShowFieldEditor"]; -} - - (IBAction)hideFieldEditor:(id)sender { [fFieldEditor setAction:nil]; @@ -386,14 +377,14 @@ static int sSemiToPitch[] = { loc = [self convertPoint:loc fromView:nil]; if (loc.y < 0.0f || loc.y >= fNumSystems*kSystemH) - return kRegionNowhere; + return fCursorRegion = kRegionNowhere; int system = fNumSystems - static_cast(loc.y / kSystemH) - 1; loc.y = fmodf(loc.y, kSystemH); loc.x -= fClefKeyW; if (loc.x < 0.0f || loc.x >= fMeasPerSystem*fMeasureW) - return kRegionNowhere; + return fCursorRegion = kRegionNowhere; int measure = static_cast(loc.x / fMeasureW); loc.x -= measure*fMeasureW; @@ -404,16 +395,25 @@ static int sSemiToPitch[] = { fCursorAt = VLFraction(div+group*fDivPerGroup, 4*prop.fDivisions); fCursorMeasure = measure+system*fMeasPerSystem; - if (loc.y >= kSystemY+kChordY) - return kRegionChord; - else if (loc.y < kSystemY+kLyricsY) - return kRegionLyrics; + if (fCursorMeasure > [self song]->fMeasures.size()) + return fCursorRegion = kRegionNowhere; + + if (loc.y >= kSystemY+kChordY) { + // + // Chord, round to quarters + // + int scale = fCursorAt.fDenom / 4; + fCursorAt = VLFraction(fCursorAt.fNum / scale, 4); + return fCursorRegion = kRegionChord; + } else if (loc.y < kSystemY+kLyricsY) { + return fCursorRegion = kRegionLyrics; + } loc.y -= kSystemY+kSemiFloor; int semi = static_cast(roundf(loc.y / (0.5f*kLineH))); fCursorPitch = sSemiToPitch[semi]; - return kRegionNote; + return fCursorRegion = kRegionNote; } - (void) mouseMoved:(NSEvent *)event @@ -446,6 +446,9 @@ static int sSemiToPitch[] = { case kRegionNote: [self addNoteAtCursor]; break; + case kRegionChord: + [self editChord]; + break; default: break; } @@ -470,4 +473,11 @@ static int sSemiToPitch[] = { } } +- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor +{ + VLDocument * doc = [self document]; + VLEditable * editable = [[self document] valueForKey: @"editTarget"]; + return [editable validValue:[fFieldEditor stringValue]]; +} + @end diff --git a/Sources/VLSheetViewChords.h b/Sources/VLSheetViewChords.h index da3fe49..b3d500a 100644 --- a/Sources/VLSheetViewChords.h +++ b/Sources/VLSheetViewChords.h @@ -8,9 +8,7 @@ @interface VLSheetView (Chords) -- (IBAction) editChord:(id)sender; -- (IBAction) doneEditingChord:(id)sender; - +- (void) editChord; - (void) drawChordsForSystem:(int)system; @end diff --git a/Sources/VLSheetViewChords.mm b/Sources/VLSheetViewChords.mm index 67f5638..25bd9d2 100644 --- a/Sources/VLSheetViewChords.mm +++ b/Sources/VLSheetViewChords.mm @@ -12,10 +12,49 @@ #import "VLModel.h" #import "VLSoundOut.h" +#import "VLDocument.h" -@implementation VLSheetView (Chords) +std::string NormalizeName(NSString* rawName) +{ + std::string chordName = + (const char *)[[rawName lowercaseString] UTF8String]; + // + // Normalize # and b + // + for (;;) { + size_t found; -- (NSAttributedString *) attributedStringWithCppString:(const std::string &)s + found = chordName.find("\xE2\x99\xAF", 0, 3); + if (found != std::string::npos) { + chordName.replace(found, 3, 1, '#'); + continue; + } + found = chordName.find("\xE2\x99\xAD", 0, 3); + if (found != std::string::npos) { + chordName.replace(found, 3, 1, 'b'); + continue; + } + found = chordName.find(" ", 0, 1); + if (found != std::string::npos) { + chordName.erase(found); + continue; + } + break; + } + + return chordName; +} + +@interface NSAttributedString (Chords) + ++ (NSAttributedString *) attributedStringWithCppString:(const std::string &)s + attributes:(NSDictionary *)a; + +@end + +@implementation NSAttributedString (Chords) + ++ (NSAttributedString *) attributedStringWithCppString:(const std::string &)s attributes:(NSDictionary *)a { return [[[NSAttributedString alloc] @@ -24,6 +63,98 @@ autorelease]; } +@end + +@interface VLChordEditable : VLEditable { + NSView * fView; + VLSong * fSong; + int fMeasure; + VLFract fAt; +} + +- (VLChordEditable *)initWithView:(NSView *)view + song:(VLSong *)song + measure:(int)measure + at:(VLFract)at; +- (NSString *) stringValue; +- (void) setStringValue:(NSString*)val; +- (BOOL) validValue:(NSString*)val; + +@end + +@implementation VLChordEditable + +- (VLChordEditable *)initWithView:(NSView *)view + song:(VLSong *)song + measure:(int)measure + at:(VLFract)at; +{ + self = [super init]; + fView = view; + fSong = song; + fMeasure= measure; + fAt = at; + + return self; +} + +- (NSString *) stringValue +{ + const VLMeasure measure = fSong->fMeasures[fMeasure]; + const VLChordList & chords = measure.fChords; + VLFraction at(0); + for (VLChordList::const_iterator chord = chords.begin(); + chord != chords.end() && at <= fAt; + ++chord + ) { + if (at == fAt && chord->fPitch != VLNote::kNoPitch) { + // + // Found it! + // + const VLProperties & prop = fSong->fProperties.front(); + std::string name, ext, root; + chord->Name(name, ext, root, prop.fKey > 0); + + return [NSString stringWithFormat:@"%s%s%s", + name.c_str(), ext.c_str(), + root.size() ? ("/"+root).c_str() : ""]; + } + at += chord->fDuration; + } + return @""; +} + +- (void) setStringValue:(NSString *)val +{ + std::string chordName = NormalizeName(val); + if (!chordName.size()) { + fSong->DelChord(fMeasure, fAt); + } else { + VLChord chord(chordName); + VLSoundOut::Instance()->PlayChord(chord); + fSong->AddChord(chord, fMeasure, fAt); + [fView setNeedsDisplay:YES]; + } +} + +- (BOOL) validValue:(NSString *)val +{ + std::string chordName = NormalizeName(val); + if (!chordName.size()) + return YES; + + // + // Check for valid chord + // + VLChord chord(chordName); + + return chord.fPitch != VLNote::kNoPitch; +} + +@end + +@implementation VLSheetView (Chords) + - (NSAttributedString *) stringWithChord:(const VLChord &)chord { const VLSong * song = [self song]; @@ -53,14 +184,14 @@ NSMutableAttributedString * s = [[[NSMutableAttributedString alloc] init] autorelease]; [s appendAttributedString: - [self attributedStringWithCppString: name + [NSAttributedString attributedStringWithCppString: name attributes: sBigFont]]; [s appendAttributedString: - [self attributedStringWithCppString: ext.size() ? ext : " " + [NSAttributedString attributedStringWithCppString: ext.size() ? ext : " " attributes: sSuperFont]]; if (root.size()) [s appendAttributedString: - [self attributedStringWithCppString: "/" + root + [NSAttributedString attributedStringWithCppString: "/" + root attributes: sBigFont]]; return s; @@ -68,7 +199,8 @@ - (void) drawChordsForSystem:(int)system { - const VLSong * song = [self song]; + const VLSong * song = [self song]; + const float kSystemY = [self systemY:system]; // // Build new list @@ -86,69 +218,25 @@ ) { NSAttributedString * chordName = [self stringWithChord:*chord]; NSPoint chordLoc = - NSMakePoint(kClefX+kClefW+(m+at)*fMeasureW+0.5f*kNoteW, + NSMakePoint(fClefKeyW+(m+at)*fMeasureW+0.5f*kNoteW, kSystemY+kChordY); [chordName drawAtPoint:chordLoc]; + at += chord->fDuration; } } } -- (IBAction) editChord:(id)sender +- (void) editChord { - [self showFieldEditor:sender withAction:@selector(doneEditingChord:)]; -} - -- (IBAction) doneEditingChord:(id)sender -{ - VLSong * song = [self song]; - - std::string chordName = - (const char *)[[[sender stringValue] lowercaseString] UTF8String]; - // - // Normalize # and b - // - for (;;) { - size_t found; - - found = chordName.find("\xE2\x99\xAF", 0, 3); - if (found != std::string::npos) { - chordName.replace(found, 3, 1, '#'); - continue; - } - found = chordName.find("\xE2\x99\xAD", 0, 3); - if (found != std::string::npos) { - chordName.replace(found, 3, 1, 'b'); - continue; - } - found = chordName.find(" ", 0, 1); - if (found != std::string::npos) { - chordName.erase(found); - continue; - } - break; - } - // - // Check for valid chord - // - VLChord chord(chordName); - if (!chordName.size()) { - [sender setTextColor: [NSColor blackColor]]; - } else if (chord.fPitch == VLChord::kNoPitch) { - if (chordName.size()) { - NSBeep(); - [sender setTextColor: [NSColor redColor]]; - } - int tag = [sender tag]; - song->DelChord(tag >> 8, VLFraction(tag & 0xFF, 4)); - } else { - NSAttributedString * s = [self stringWithChord:chord]; - [sender setAttributedStringValue: s]; - [fFieldBeingEdited setTitle: s]; - [sender setTextColor: [NSColor blackColor]]; - VLSoundOut::Instance()->PlayChord(chord); - int tag = [fFieldBeingEdited tag]; - song->AddChord(chord, tag >> 8, VLFraction(tag & 0xFF, 4)); - } + VLDocument * doc= [self document]; + VLEditable * e = + [[VLChordEditable alloc] + initWithView:self + song:[self song] + measure:fCursorMeasure + at:fCursorAt]; + [doc setValue:e forKey:@"editTarget"]; + [self setValue:[NSNumber numberWithBool:YES] forKey:@"fShowFieldEditor"]; } @end diff --git a/Vocalese.xcodeproj/neeri.mode1v3 b/Vocalese.xcodeproj/neeri.mode1v3 index 9f06094..e9b308f 100644 --- a/Vocalese.xcodeproj/neeri.mode1v3 +++ b/Vocalese.xcodeproj/neeri.mode1v3 @@ -200,47 +200,7 @@ Content PBXProjectModuleGUID - 95DFE83A0AD105A300375606 - PBXProjectModuleLabel - VLSheetView.mm - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 95DFE83B0AD105A300375606 - PBXProjectModuleLabel - VLSheetView.mm - _historyCapacity - 0 - bookmark - 95DFE83E0AD105C900375606 - history - - 95DFE8370AD1053A00375606 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {763, 552}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 164 91 763 593 0 0 1024 746 - - - - Content - - PBXProjectModuleGUID - 95D1F82E0AB694EC00EE6AC8 + 95B042FC0ACE431A00236B52 PBXProjectModuleLabel <No Editor> PBXSplitModuleInNavigatorKey @@ -262,117 +222,7 @@ Content PBXProjectModuleGUID - 95D1F7FE0AB68C8C00EE6AC8 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {763, 552}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 242 153 763 593 0 0 1024 746 - - - - Content - - PBXProjectModuleGUID - 95D1F8130AB6908400EE6AC8 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {763, 552}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 186 75 763 593 0 0 1024 746 - - - - Content - - PBXProjectModuleGUID - 95D1F8850AB69B6700EE6AC8 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {763, 552}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 168 116 763 593 0 0 1024 746 - - - - Content - - PBXProjectModuleGUID - 95D1F8660AB6970400EE6AC8 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {763, 552}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 15 148 763 593 0 0 1024 746 - - - - Content - - PBXProjectModuleGUID - 95D1F8310AB694EC00EE6AC8 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {763, 552}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 164 91 763 593 0 0 1024 746 - - - - Content - - PBXProjectModuleGUID - 95B042FA0ACE431A00236B52 + 95B042FB0ACE431A00236B52 PBXProjectModuleLabel <No Editor> PBXSplitModuleInNavigatorKey @@ -416,7 +266,7 @@ Content PBXProjectModuleGUID - 95B042FB0ACE431A00236B52 + 95B042FA0ACE431A00236B52 PBXProjectModuleLabel <No Editor> PBXSplitModuleInNavigatorKey @@ -438,7 +288,315 @@ Content PBXProjectModuleGUID - 95B042FC0ACE431A00236B52 + 95D1F8310AB694EC00EE6AC8 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 164 91 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95D1F8660AB6970400EE6AC8 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 15 148 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95D1F8850AB69B6700EE6AC8 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 168 116 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95D1F8130AB6908400EE6AC8 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 186 75 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95D1F7FE0AB68C8C00EE6AC8 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 242 153 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95D1F82E0AB694EC00EE6AC8 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 15 148 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95DFE83A0AD105A300375606 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 164 91 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95E725400AD25B5700407A9B + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 164 91 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95E725560AD25CA500407A9B + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 164 91 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95E725270AD2587900407A9B + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 15 148 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95E7B5000AD2CBD800753F9B + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 15 148 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95E7B51C0AD2CDC800753F9B + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 171 132 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95E7B5280AD2CE8800753F9B + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 171 132 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95E7B54E0AD2D12A00753F9B + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {763, 552}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 171 132 763 593 0 0 1024 746 + + + + Content + + PBXProjectModuleGUID + 95E7B5510AD2D12A00753F9B PBXProjectModuleLabel <No Editor> PBXSplitModuleInNavigatorKey @@ -490,6 +648,8 @@ Layout + BecomeActive + ContentConfiguration PBXBottomSmartGroupGIDs @@ -535,7 +695,7 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 9 + 4 1 0 @@ -605,8 +765,6 @@ 0pt - BecomeActive - ContentConfiguration PBXProjectModuleGUID @@ -643,9 +801,9 @@ TableOfContents - 95DFE81B0AD0F18B00375606 + 95E7B4FB0AD2CBD800753F9B 1CE0B1FE06471DED0097A5F4 - 95DFE81C0AD0F18B00375606 + 95E7B4FC0AD2CBD800753F9B 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -779,24 +937,37 @@ 5 WindowOrderList - 95DFE82C0AD0F29C00375606 - 95DFE82D0AD0F29C00375606 - 95DFE82E0AD0F29C00375606 - 95B042FC0ACE431A00236B52 - 95B042FB0ACE431A00236B52 - 95B042F70ACE431A00236B52 - 95B042FA0ACE431A00236B52 - 95D1F8310AB694EC00EE6AC8 - 95D1F8660AB6970400EE6AC8 - 95D1F8850AB69B6700EE6AC8 - 95D1F8130AB6908400EE6AC8 - 95D1F7FE0AB68C8C00EE6AC8 - 95D1F82E0AB694EC00EE6AC8 - 1CD10A99069EF8BA00B06720 + 95E7B5B20AD2DA4F00753F9B + 95E7B5A10AD2D8EE00753F9B + 95E7B5A20AD2D8EE00753F9B + 95E7B56A0AD2D24400753F9B + 95E7B5510AD2D12A00753F9B + 95E7B54E0AD2D12A00753F9B + 1C530D57069F1CE1000CFCEE + 95E7B5280AD2CE8800753F9B + 95E7B51C0AD2CDC800753F9B + 95E7B5100AD2CC9400753F9B + 95E7B5110AD2CC9400753F9B + 95E7B5120AD2CC9400753F9B 95D7BFC80AA6C1A500D5E02C - /Development/Vocalese/Vocalese.xcodeproj - 95DFE83A0AD105A300375606 95D7BFC00AA6C1A500D5E02C + 95E7B5000AD2CBD800753F9B + 1CD10A99069EF8BA00B06720 + 95E725270AD2587900407A9B + 95E725560AD25CA500407A9B + 95E725400AD25B5700407A9B + 95DFE83A0AD105A300375606 + 95D1F82E0AB694EC00EE6AC8 + 95D1F7FE0AB68C8C00EE6AC8 + 95D1F8130AB6908400EE6AC8 + 95D1F8850AB69B6700EE6AC8 + 95D1F8660AB6970400EE6AC8 + 95D1F8310AB694EC00EE6AC8 + 95B042FA0ACE431A00236B52 + 95B042F70ACE431A00236B52 + 95B042FB0ACE431A00236B52 + 95B042FC0ACE431A00236B52 + /Development/Vocalese/Vocalese.xcodeproj WindowString 167 326 690 397 0 0 1024 746 @@ -815,12 +986,14 @@ Dock + BecomeActive + ContentConfiguration PBXProjectModuleGUID 1CD0528F0623707200166675 PBXProjectModuleLabel - VLSheetView.mm + VLSheetViewChords.mm StatusBarVisibility @@ -837,8 +1010,6 @@ 293pt - BecomeActive - ContentConfiguration PBXProjectModuleGUID @@ -878,7 +1049,7 @@ TableOfContents 95D7BFC00AA6C1A500D5E02C - 95DFE81D0AD0F18B00375606 + 95E7B5010AD2CBD800753F9B 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -889,7 +1060,7 @@ WindowToolGUID 95D7BFC00AA6C1A500D5E02C WindowToolIsVisible - + FirstTimeWindowDisplayed @@ -920,8 +1091,8 @@ yes sizes - {{0, 0}, {308, 203}} - {{308, 0}, {386, 203}} + {{0, 0}, {412, 239}} + {{412, 0}, {516, 239}} VerticalSplitView @@ -936,8 +1107,8 @@ yes sizes - {{0, 0}, {694, 203}} - {{0, 203}, {694, 178}} + {{0, 0}, {928, 239}} + {{0, 239}, {928, 210}} @@ -957,7 +1128,7 @@ DebugSTDIOWindowFrame {{200, 200}, {500, 300}} Frame - {{0, 0}, {694, 381}} + {{0, 0}, {928, 449}} PBXDebugSessionStackFrameViewKey DebugVariablesTableConfiguration @@ -967,24 +1138,24 @@ Value 85 Summary - 156 + 286 Frame - {{308, 0}, {386, 203}} + {{412, 0}, {516, 239}} RubberWindowFrame - 254 208 694 422 0 0 1024 746 + 56 117 928 490 0 0 1024 746 RubberWindowFrame - 254 208 694 422 0 0 1024 746 + 56 117 928 490 0 0 1024 746 Module PBXDebugSessionModule Proportion - 381pt + 449pt Proportion - 381pt + 449pt Name @@ -998,26 +1169,30 @@ TableOfContents 1CD10A99069EF8BA00B06720 - 95DFE81E0AD0F18B00375606 + 95E7B5020AD2CBD800753F9B 1C162984064C10D400B95A72 - 95DFE81F0AD0F18B00375606 - 95DFE8200AD0F18B00375606 - 95DFE8210AD0F18B00375606 - 95DFE8220AD0F18B00375606 - 95DFE8230AD0F18B00375606 + 95E7B5030AD2CBD800753F9B + 95E7B5040AD2CBD800753F9B + 95E7B5050AD2CBD800753F9B + 95E7B5060AD2CBD800753F9B + 95E7B5070AD2CBD800753F9B ToolbarConfiguration xcode.toolbar.config.debugV3 WindowString - 254 208 694 422 0 0 1024 746 + 56 117 928 490 0 0 1024 746 WindowToolGUID 1CD10A99069EF8BA00B06720 WindowToolIsVisible + FirstTimeWindowDisplayed + Identifier windowTool.find + IsVertical + Layout @@ -1032,26 +1207,16 @@ PBXProjectModuleGUID 1CDD528C0622207200134675 PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CD0528D0623707200166675 - - SplitCount - 1 - + StatusBarVisibility - 1 + GeometryConfiguration Frame - {{0, 0}, {781, 167}} + {{0, 0}, {781, 212}} RubberWindowFrame - 62 385 781 470 0 0 1440 878 + 185 191 781 470 0 0 1024 746 Module PBXNavigatorGroup @@ -1060,11 +1225,9 @@ Proportion - 50% + 212pt - BecomeActive - 1 ContentConfiguration PBXProjectModuleGUID @@ -1075,18 +1238,18 @@ GeometryConfiguration Frame - {{8, 0}, {773, 254}} + {{0, 217}, {781, 212}} RubberWindowFrame - 62 385 781 470 0 0 1440 878 + 185 191 781 470 0 0 1024 746 Module PBXProjectFindModule Proportion - 50% + 212pt Proportion - 428pt + 429pt Name @@ -1096,23 +1259,21 @@ PBXProjectFindModule StatusbarIsVisible - 1 + TableOfContents 1C530D57069F1CE1000CFCEE - 1C530D58069F1CE1000CFCEE - 1C530D59069F1CE1000CFCEE + 95E7B5410AD2D02200753F9B + 95E7B5420AD2D02200753F9B 1CDD528C0622207200134675 - 1C530D5A069F1CE1000CFCEE - 1CE0B1FE06471DED0097A5F4 1CD0528E0623707200166675 WindowString - 62 385 781 470 0 0 1440 878 + 185 191 781 470 0 0 1024 746 WindowToolGUID 1C530D57069F1CE1000CFCEE WindowToolIsVisible - 0 + Identifier @@ -1168,7 +1329,7 @@ TableOfContents 95D7BFC80AA6C1A500D5E02C - 95DFE82B0AD0F29400375606 + 95E7B50E0AD2CC9400753F9B 1C78EAAC065D492600B07095 WindowString @@ -1351,18 +1512,18 @@ 743 379 452 308 0 0 1280 1002 + FirstTimeWindowDisplayed + Identifier windowTool.breakpoints IsVertical - 0 + Layout Dock - BecomeActive - 1 ContentConfiguration PBXBottomSmartGroupGIDs @@ -1404,7 +1565,7 @@ PBXTopSmartGroupGIDs XCIncludePerspectivesSwitch - 0 + GeometryConfiguration @@ -1416,7 +1577,7 @@ 168 RubberWindowFrame - 315 424 744 409 0 0 1440 878 + 117 147 744 409 0 0 1024 746 Module PBXSmartGroupTreeModule @@ -1424,6 +1585,8 @@ 185pt + BecomeActive + ContentConfiguration PBXProjectModuleGUID @@ -1436,7 +1599,7 @@ Frame {{190, 0}, {554, 368}} RubberWindowFrame - 315 424 744 409 0 0 1440 878 + 117 147 744 409 0 0 1024 746 Module XCDetailModule @@ -1460,22 +1623,22 @@ XCDetailModule StatusbarIsVisible - 1 + TableOfContents - 1CDDB66807F98D9800BB5817 - 1CDDB66907F98D9800BB5817 + 95E7B56A0AD2D24400753F9B + 95E7B56B0AD2D24400753F9B 1CE0B1FE06471DED0097A5F4 1CA1AED706398EBD00589147 ToolbarConfiguration xcode.toolbar.config.breakpointsV3 WindowString - 315 424 744 409 0 0 1440 878 + 117 147 744 409 0 0 1024 746 WindowToolGUID - 1CDDB66807F98D9800BB5817 + 95E7B56A0AD2D24400753F9B WindowToolIsVisible - 1 + Identifier diff --git a/Vocalese.xcodeproj/neeri.pbxuser b/Vocalese.xcodeproj/neeri.pbxuser index a2464cb..a8f5fed 100644 --- a/Vocalese.xcodeproj/neeri.pbxuser +++ b/Vocalese.xcodeproj/neeri.pbxuser @@ -8,7 +8,6 @@ 8D15AC270486D014006FF6A4 /* Vocalese */, ); breakpoints = ( - 95B66671096E64FD00FE18C9 /* VLSheetViewNotes.mm:21 */, ); codeSenseManager = 954D7414095406B2007D9571 /* Code sense */; executables = ( @@ -18,6 +17,30 @@ 959408A1096922CA007CCCF8 /* TVLEdit */, ); perUserDictionary = { + "PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 20, + 198, + 20, + 99, + 99, + 29, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXBreakpointsDataSource_ActionID, + PBXBreakpointsDataSource_TypeID, + PBXBreakpointsDataSource_BreakpointID, + PBXBreakpointsDataSource_UseID, + PBXBreakpointsDataSource_LocationID, + PBXBreakpointsDataSource_ConditionID, + PBXBreakpointsDataSource_IgnoreCountID, + PBXBreakpointsDataSource_ContinueID, + ); + }; PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = 1; PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; @@ -62,12 +85,96 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 181465162; - PBXWorkspaceStateSaveDate = 181465162; + PBXPerProjectTemplateStateSaveDate = 181586793; + PBXWorkspaceStateSaveDate = 181586793; }; perUserProjectItems = { - 95DFE8370AD1053A00375606 /* PBXBookmark */ = 95DFE8370AD1053A00375606 /* PBXBookmark */; - 95DFE83E0AD105C900375606 /* PBXTextBookmark */ = 95DFE83E0AD105C900375606 /* PBXTextBookmark */; + 956674AB0AD25F48007D5997 = 956674AB0AD25F48007D5997 /* PBXTextBookmark */; + 956674AC0AD25F48007D5997 = 956674AC0AD25F48007D5997 /* PBXTextBookmark */; + 956674AD0AD25F48007D5997 = 956674AD0AD25F48007D5997 /* PBXTextBookmark */; + 956674B60AD262F5007D5997 = 956674B60AD262F5007D5997 /* PBXTextBookmark */; + 956674B70AD262F5007D5997 = 956674B70AD262F5007D5997 /* PBXTextBookmark */; + 956674B80AD262F5007D5997 = 956674B80AD262F5007D5997 /* PBXTextBookmark */; + 95E725470AD25C2500407A9B = 95E725470AD25C2500407A9B /* PBXTextBookmark */; + 95E725480AD25C2500407A9B = 95E725480AD25C2500407A9B /* PBXTextBookmark */; + 95E7254C0AD25C3E00407A9B = 95E7254C0AD25C3E00407A9B /* PBXTextBookmark */; + 95E725600AD25CDD00407A9B = 95E725600AD25CDD00407A9B /* PBXTextBookmark */; + 95E725700AD25EA500407A9B = 95E725700AD25EA500407A9B /* PBXTextBookmark */; + 95E725710AD25EA500407A9B = 95E725710AD25EA500407A9B /* PBXTextBookmark */; + 95E7B4FD0AD2CBD800753F9B /* PBXTextBookmark */ = 95E7B4FD0AD2CBD800753F9B /* PBXTextBookmark */; + 95E7B4FE0AD2CBD800753F9B /* PBXTextBookmark */ = 95E7B4FE0AD2CBD800753F9B /* PBXTextBookmark */; + 95E7B4FF0AD2CBD800753F9B /* PBXTextBookmark */ = 95E7B4FF0AD2CBD800753F9B /* PBXTextBookmark */; + 95E7B50B0AD2CC9400753F9B /* PBXTextBookmark */ = 95E7B50B0AD2CC9400753F9B /* PBXTextBookmark */; + 95E7B50C0AD2CC9400753F9B /* PBXTextBookmark */ = 95E7B50C0AD2CC9400753F9B /* PBXTextBookmark */; + 95E7B50D0AD2CC9400753F9B /* PBXTextBookmark */ = 95E7B50D0AD2CC9400753F9B /* PBXTextBookmark */; + 95E7B5190AD2CDC800753F9B /* PBXTextBookmark */ = 95E7B5190AD2CDC800753F9B /* PBXTextBookmark */; + 95E7B51A0AD2CDC800753F9B /* PBXTextBookmark */ = 95E7B51A0AD2CDC800753F9B /* PBXTextBookmark */; + 95E7B51B0AD2CDC800753F9B /* PBXTextBookmark */ = 95E7B51B0AD2CDC800753F9B /* PBXTextBookmark */; + 95E7B51D0AD2CDDF00753F9B /* PBXTextBookmark */ = 95E7B51D0AD2CDDF00753F9B /* PBXTextBookmark */; + 95E7B51E0AD2CDDF00753F9B /* PBXTextBookmark */ = 95E7B51E0AD2CDDF00753F9B /* PBXTextBookmark */; + 95E7B51F0AD2CDDF00753F9B /* PBXTextBookmark */ = 95E7B51F0AD2CDDF00753F9B /* PBXTextBookmark */; + 95E7B5260AD2CE8800753F9B /* PBXTextBookmark */ = 95E7B5260AD2CE8800753F9B /* PBXTextBookmark */; + 95E7B5270AD2CE8800753F9B /* PBXTextBookmark */ = 95E7B5270AD2CE8800753F9B /* PBXTextBookmark */; + 95E7B52E0AD2CED100753F9B /* PBXTextBookmark */ = 95E7B52E0AD2CED100753F9B /* PBXTextBookmark */; + 95E7B52F0AD2CED100753F9B /* PBXTextBookmark */ = 95E7B52F0AD2CED100753F9B /* PBXTextBookmark */; + 95E7B5370AD2CF2F00753F9B /* PBXTextBookmark */ = 95E7B5370AD2CF2F00753F9B /* PBXTextBookmark */; + 95E7B5380AD2CF2F00753F9B /* PBXTextBookmark */ = 95E7B5380AD2CF2F00753F9B /* PBXTextBookmark */; + 95E7B53B0AD2CF8900753F9B /* PBXTextBookmark */ = 95E7B53B0AD2CF8900753F9B /* PBXTextBookmark */; + 95E7B53C0AD2CF8900753F9B /* PBXTextBookmark */ = 95E7B53C0AD2CF8900753F9B /* PBXTextBookmark */; + 95E7B53D0AD2CF9A00753F9B /* PBXTextBookmark */ = 95E7B53D0AD2CF9A00753F9B /* PBXTextBookmark */; + 95E7B53E0AD2CF9A00753F9B /* PBXTextBookmark */ = 95E7B53E0AD2CF9A00753F9B /* PBXTextBookmark */; + 95E7B5470AD2D05B00753F9B /* PBXTextBookmark */ = 95E7B5470AD2D05B00753F9B /* PBXTextBookmark */; + 95E7B54B0AD2D0E300753F9B /* PBXBookmark */ = 95E7B54B0AD2D0E300753F9B /* PBXBookmark */; + 95E7B54C0AD2D10400753F9B /* PBXBookmark */ = 95E7B54C0AD2D10400753F9B /* PBXBookmark */; + 95E7B5500AD2D12A00753F9B /* PBXTextBookmark */ = 95E7B5500AD2D12A00753F9B /* PBXTextBookmark */; + 95E7B5530AD2D12A00753F9B /* PBXTextBookmark */ = 95E7B5530AD2D12A00753F9B /* PBXTextBookmark */; + 95E7B5540AD2D12A00753F9B /* PBXTextBookmark */ = 95E7B5540AD2D12A00753F9B /* PBXTextBookmark */; + 95E7B5580AD2D19100753F9B /* PBXTextBookmark */ = 95E7B5580AD2D19100753F9B /* PBXTextBookmark */; + 95E7B5590AD2D19100753F9B /* PBXTextBookmark */ = 95E7B5590AD2D19100753F9B /* PBXTextBookmark */; + 95E7B55A0AD2D19100753F9B /* PBXTextBookmark */ = 95E7B55A0AD2D19100753F9B /* PBXTextBookmark */; + 95E7B55B0AD2D19100753F9B /* PBXTextBookmark */ = 95E7B55B0AD2D19100753F9B /* PBXTextBookmark */; + 95E7B55C0AD2D19100753F9B /* PBXTextBookmark */ = 95E7B55C0AD2D19100753F9B /* PBXTextBookmark */; + 95E7B55D0AD2D19100753F9B /* PBXTextBookmark */ = 95E7B55D0AD2D19100753F9B /* PBXTextBookmark */; + 95E7B5670AD2D24400753F9B /* PBXTextBookmark */ = 95E7B5670AD2D24400753F9B /* PBXTextBookmark */; + 95E7B5680AD2D24400753F9B /* PBXTextBookmark */ = 95E7B5680AD2D24400753F9B /* PBXTextBookmark */; + 95E7B5690AD2D24400753F9B /* PBXTextBookmark */ = 95E7B5690AD2D24400753F9B /* PBXTextBookmark */; + 95E7B56D0AD2D42000753F9B /* PBXTextBookmark */ = 95E7B56D0AD2D42000753F9B /* PBXTextBookmark */; + 95E7B56E0AD2D42000753F9B /* PBXTextBookmark */ = 95E7B56E0AD2D42000753F9B /* PBXTextBookmark */; + 95E7B56F0AD2D42000753F9B /* PBXTextBookmark */ = 95E7B56F0AD2D42000753F9B /* PBXTextBookmark */; + 95E7B5700AD2D49800753F9B /* PBXTextBookmark */ = 95E7B5700AD2D49800753F9B /* PBXTextBookmark */; + 95E7B5710AD2D49800753F9B /* PBXTextBookmark */ = 95E7B5710AD2D49800753F9B /* PBXTextBookmark */; + 95E7B5720AD2D49800753F9B /* PBXTextBookmark */ = 95E7B5720AD2D49800753F9B /* PBXTextBookmark */; + 95E7B5750AD2D4D500753F9B /* PBXTextBookmark */ = 95E7B5750AD2D4D500753F9B /* PBXTextBookmark */; + 95E7B5760AD2D4D500753F9B /* PBXTextBookmark */ = 95E7B5760AD2D4D500753F9B /* PBXTextBookmark */; + 95E7B5770AD2D4D500753F9B /* PBXTextBookmark */ = 95E7B5770AD2D4D500753F9B /* PBXTextBookmark */; + 95E7B57A0AD2D54200753F9B /* PBXTextBookmark */ = 95E7B57A0AD2D54200753F9B /* PBXTextBookmark */; + 95E7B57B0AD2D54200753F9B /* PBXTextBookmark */ = 95E7B57B0AD2D54200753F9B /* PBXTextBookmark */; + 95E7B57C0AD2D54200753F9B /* PBXTextBookmark */ = 95E7B57C0AD2D54200753F9B /* PBXTextBookmark */; + 95E7B57D0AD2D57B00753F9B /* PBXTextBookmark */ = 95E7B57D0AD2D57B00753F9B /* PBXTextBookmark */; + 95E7B57E0AD2D57B00753F9B /* PBXTextBookmark */ = 95E7B57E0AD2D57B00753F9B /* PBXTextBookmark */; + 95E7B57F0AD2D57B00753F9B /* PBXTextBookmark */ = 95E7B57F0AD2D57B00753F9B /* PBXTextBookmark */; + 95E7B5840AD2D5DB00753F9B /* PBXTextBookmark */ = 95E7B5840AD2D5DB00753F9B /* PBXTextBookmark */; + 95E7B5850AD2D5DB00753F9B /* PBXTextBookmark */ = 95E7B5850AD2D5DB00753F9B /* PBXTextBookmark */; + 95E7B5860AD2D5DB00753F9B /* PBXTextBookmark */ = 95E7B5860AD2D5DB00753F9B /* PBXTextBookmark */; + 95E7B58B0AD2D66900753F9B /* PBXTextBookmark */ = 95E7B58B0AD2D66900753F9B /* PBXTextBookmark */; + 95E7B58C0AD2D66900753F9B /* PBXTextBookmark */ = 95E7B58C0AD2D66900753F9B /* PBXTextBookmark */; + 95E7B58D0AD2D66900753F9B /* PBXTextBookmark */ = 95E7B58D0AD2D66900753F9B /* PBXTextBookmark */; + 95E7B5930AD2D79500753F9B /* PBXTextBookmark */ = 95E7B5930AD2D79500753F9B /* PBXTextBookmark */; + 95E7B5940AD2D79500753F9B /* PBXTextBookmark */ = 95E7B5940AD2D79500753F9B /* PBXTextBookmark */; + 95E7B5950AD2D79500753F9B /* PBXTextBookmark */ = 95E7B5950AD2D79500753F9B /* PBXTextBookmark */; + 95E7B5960AD2D79500753F9B /* PBXTextBookmark */ = 95E7B5960AD2D79500753F9B /* PBXTextBookmark */; + 95E7B5970AD2D79500753F9B /* PBXTextBookmark */ = 95E7B5970AD2D79500753F9B /* PBXTextBookmark */; + 95E7B5980AD2D79800753F9B /* PBXTextBookmark */ = 95E7B5980AD2D79800753F9B /* PBXTextBookmark */; + 95E7B5990AD2D79800753F9B /* PBXTextBookmark */ = 95E7B5990AD2D79800753F9B /* PBXTextBookmark */; + 95E7B59A0AD2D7B400753F9B /* PBXTextBookmark */ = 95E7B59A0AD2D7B400753F9B /* PBXTextBookmark */; + 95E7B59B0AD2D7B400753F9B /* PBXTextBookmark */ = 95E7B59B0AD2D7B400753F9B /* PBXTextBookmark */; + 95E7B59F0AD2D8EE00753F9B /* PBXTextBookmark */ = 95E7B59F0AD2D8EE00753F9B /* PBXTextBookmark */; + 95E7B5A00AD2D8EE00753F9B /* PBXTextBookmark */ = 95E7B5A00AD2D8EE00753F9B /* PBXTextBookmark */; + 95E7B5A30AD2D90E00753F9B /* PBXTextBookmark */ = 95E7B5A30AD2D90E00753F9B /* PBXTextBookmark */; + 95E7B5A40AD2D90E00753F9B /* PBXTextBookmark */ = 95E7B5A40AD2D90E00753F9B /* PBXTextBookmark */; + 95E7B5A50AD2D90E00753F9B /* PBXTextBookmark */ = 95E7B5A50AD2D90E00753F9B /* PBXTextBookmark */; + 95E7B5A60AD2D90E00753F9B /* PBXTextBookmark */ = 95E7B5A60AD2D90E00753F9B /* PBXTextBookmark */; + 95E7B5A70AD2D90E00753F9B /* PBXTextBookmark */ = 95E7B5A70AD2D90E00753F9B /* PBXTextBookmark */; }; sourceControlManager = 954D7413095406B2007D9571 /* Source Control */; userBuildSettings = { @@ -75,17 +182,17 @@ }; 2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1748, 1568}}"; - sepNavSelRange = "{539, 0}"; - sepNavVisRect = "{{0, 440}, {818, 338}}"; + sepNavIntBoundsRect = "{{0, 0}, {1736, 1834}}"; + sepNavSelRange = "{339, 0}"; + sepNavVisRect = "{{0, 42}, {704, 497}}"; sepNavWindowFrame = "{{171, 76}, {763, 649}}"; }; }; 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {724, 520}}"; - sepNavSelRange = "{347, 0}"; - sepNavVisRect = "{{0, 0}, {724, 520}}"; + sepNavIntBoundsRect = "{{0, 0}, {704, 532}}"; + sepNavSelRange = "{231, 104}"; + sepNavVisRect = "{{0, 0}, {704, 497}}"; sepNavWindowFrame = "{{15, 92}, {763, 649}}"; }; }; @@ -159,10 +266,10 @@ }; 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {703, 1400}}"; - sepNavSelRange = "{3987, 0}"; - sepNavVisRect = "{{0, 1125}, {703, 261}}"; - sepNavWindowFrame = "{{15, 92}, {763, 649}}"; + sepNavIntBoundsRect = "{{0, 0}, {867, 1848}}"; + sepNavSelRange = "{5101, 0}"; + sepNavVisRect = "{{0, 1668}, {867, 178}}"; + sepNavWindowFrame = "{{164, 35}, {763, 649}}"; }; }; 954D740509540691007D9571 /* Vocalese */ = { @@ -192,6 +299,45 @@ sourceDirectories = ( ); variableFormatDictionary = { + $cr = 1; + $ctr = 1; + $lr = 1; + $mq = 1; + $pc = 1; + $ps = 1; + $r0 = 1; + $r1 = 1; + $r10 = 1; + $r11 = 1; + $r12 = 1; + $r13 = 1; + $r14 = 1; + $r15 = 1; + $r16 = 1; + $r17 = 1; + $r18 = 1; + $r19 = 1; + $r2 = 1; + $r20 = 1; + $r21 = 1; + $r22 = 1; + $r23 = 1; + $r24 = 1; + $r25 = 1; + $r26 = 1; + $r27 = 1; + $r28 = 1; + $r29 = 1; + $r3 = 1; + $r30 = 1; + $r31 = 1; + $r4 = 1; + $r5 = 1; + $r6 = 1; + $r7 = 1; + $r8 = 1; + $r9 = 1; + $xer = 1; }; }; 954D7413095406B2007D9571 /* Source Control */ = { @@ -260,6 +406,63 @@ sepNavWindowFrame = "{{84, 29}, {763, 649}}"; }; }; + 956674AB0AD25F48007D5997 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 180"; + rLen = 0; + rLoc = 4043; + rType = 0; + vrLen = 946; + vrLoc = 4468; + }; + 956674AC0AD25F48007D5997 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + rLen = 0; + rLoc = 301; + rType = 1; + }; + 956674AD0AD25F48007D5997 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 180"; + rLen = 0; + rLoc = 4043; + rType = 0; + vrLen = 946; + vrLoc = 4468; + }; + 956674B60AD262F5007D5997 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 302"; + rLen = 0; + rLoc = 7323; + rType = 0; + vrLen = 1029; + vrLoc = 6828; + }; + 956674B70AD262F5007D5997 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 476"; + rLen = 0; + rLoc = 11589; + rType = 0; + vrLen = 725; + vrLoc = 10842; + }; + 956674B80AD262F5007D5997 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 228"; + rLen = 0; + rLoc = 5438; + rType = 0; + vrLen = 951; + vrLoc = 4468; + }; 9594089F096922CA007CCCF8 /* TVLEdit */ = { activeExec = 0; executables = ( @@ -323,22 +526,6 @@ sepNavWindowFrame = "{{38, 71}, {763, 649}}"; }; }; - 95B66671096E64FD00FE18C9 /* VLSheetViewNotes.mm:21 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - countType = 0; - delayBeforeContinue = 0; - fileReference = 95B66657096BCA1F00FE18C9 /* VLSheetViewNotes.mm */; - functionName = "-restoreCursorLocation"; - hitCount = 0; - ignoreCount = 0; - lineNumber = 21; - modificationTime = 181470420.561138; - state = 2; - }; 95BDA15709540BF1009F9D65 /* VLSheetView.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {704, 1190}}"; @@ -349,24 +536,790 @@ }; 95BDA15809540BF1009F9D65 /* VLSheetView.mm */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {703, 3584}}"; - sepNavSelRange = "{11149, 30}"; - sepNavVisRect = "{{0, 3262}, {703, 261}}"; - sepNavWindowFrame = "{{164, 35}, {763, 649}}"; + sepNavIntBoundsRect = "{{0, 0}, {704, 4074}}"; + sepNavSelRange = "{11734, 0}"; + sepNavVisRect = "{{0, 2770}, {704, 497}}"; + sepNavWindowFrame = "{{15, 92}, {763, 649}}"; }; }; - 95DFE8370AD1053A00375606 /* PBXBookmark */ = { - isa = PBXBookmark; - fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; - }; - 95DFE83E0AD105C900375606 /* PBXTextBookmark */ = { + 95E725470AD25C2500407A9B /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; - name = "VLSheetView.mm: 394"; - rLen = 0; - rLoc = 9493; + name = "VLSheetView.mm: 473"; + rLen = 79; + rLoc = 11376; rType = 0; - vrLen = 1225; - vrLoc = 9100; + vrLen = 639; + vrLoc = 10905; + }; + 95E725480AD25C2500407A9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 228"; + rLen = 0; + rLoc = 5438; + rType = 0; + vrLen = 907; + vrLoc = 4512; + }; + 95E7254C0AD25C3E00407A9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 480"; + rLen = 0; + rLoc = 11637; + rType = 0; + vrLen = 1158; + vrLoc = 9304; + }; + 95E725600AD25CDD00407A9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 480"; + rLen = 0; + rLoc = 11637; + rType = 0; + vrLen = 662; + vrLoc = 10905; + }; + 95E725700AD25EA500407A9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 476"; + rLen = 0; + rLoc = 11589; + rType = 0; + vrLen = 681; + vrLoc = 10886; + }; + 95E725710AD25EA500407A9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 228"; + rLen = 0; + rLoc = 5438; + rType = 0; + vrLen = 949; + vrLoc = 4470; + }; + 95E7B4FD0AD2CBD800753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 476"; + rLen = 0; + rLoc = 11589; + rType = 0; + vrLen = 709; + vrLoc = 10886; + }; + 95E7B4FE0AD2CBD800753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 228"; + rLen = 0; + rLoc = 5438; + rType = 0; + vrLen = 827; + vrLoc = 2730; + }; + 95E7B4FF0AD2CBD800753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 476"; + rLen = 0; + rLoc = 11589; + rType = 0; + vrLen = 753; + vrLoc = 10842; + }; + 95E7B50B0AD2CC9400753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 476"; + rLen = 0; + rLoc = 11589; + rType = 0; + vrLen = 709; + vrLoc = 10886; + }; + 95E7B50C0AD2CC9400753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 228"; + rLen = 0; + rLoc = 5438; + rType = 0; + vrLen = 780; + vrLoc = 2730; + }; + 95E7B50D0AD2CC9400753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 476"; + rLen = 0; + rLoc = 11589; + rType = 0; + vrLen = 748; + vrLoc = 10842; + }; + 95E7B5190AD2CDC800753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 475"; + rLen = 0; + rLoc = 11499; + rType = 0; + vrLen = 790; + vrLoc = 10842; + }; + 95E7B51A0AD2CDC800753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 477"; + rLen = 0; + rLoc = 11589; + rType = 0; + vrLen = 751; + vrLoc = 10886; + }; + 95E7B51B0AD2CDC800753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 228"; + rLen = 0; + rLoc = 5438; + rType = 0; + vrLen = 827; + vrLoc = 2730; + }; + 95E7B51D0AD2CDDF00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 475"; + rLen = 0; + rLoc = 11499; + rType = 0; + vrLen = 789; + vrLoc = 10842; + }; + 95E7B51E0AD2CDDF00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 477"; + rLen = 0; + rLoc = 11589; + rType = 0; + vrLen = 746; + vrLoc = 10886; + }; + 95E7B51F0AD2CDDF00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 228"; + rLen = 0; + rLoc = 5438; + rType = 0; + vrLen = 780; + vrLoc = 2730; + }; + 95E7B5260AD2CE8800753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 152"; + rLen = 0; + rLoc = 3168; + rType = 0; + vrLen = 592; + vrLoc = 2564; + }; + 95E7B5270AD2CE8800753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 475"; + rLen = 42; + rLoc = 11458; + rType = 0; + vrLen = 746; + vrLoc = 10886; + }; + 95E7B52E0AD2CED100753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 229"; + rLen = 0; + rLoc = 5421; + rType = 0; + vrLen = 951; + vrLoc = 4532; + }; + 95E7B52F0AD2CED100753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 475"; + rLen = 42; + rLoc = 11458; + rType = 0; + vrLen = 746; + vrLoc = 10886; + }; + 95E7B5370AD2CF2F00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 229"; + rLen = 0; + rLoc = 5421; + rType = 0; + vrLen = 951; + vrLoc = 4532; + }; + 95E7B5380AD2CF2F00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 475"; + rLen = 42; + rLoc = 11458; + rType = 0; + vrLen = 746; + vrLoc = 10886; + }; + 95E7B53B0AD2CF8900753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 233"; + rLen = 0; + rLoc = 5421; + rType = 0; + vrLen = 1001; + vrLoc = 4492; + }; + 95E7B53C0AD2CF8900753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 475"; + rLen = 42; + rLoc = 11458; + rType = 0; + vrLen = 751; + vrLoc = 10886; + }; + 95E7B53D0AD2CF9A00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 233"; + rLen = 0; + rLoc = 5421; + rType = 0; + vrLen = 998; + vrLoc = 4492; + }; + 95E7B53E0AD2CF9A00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 475"; + rLen = 42; + rLoc = 11458; + rType = 0; + vrLen = 746; + vrLoc = 10886; + }; + 95E7B5470AD2D05B00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 475"; + rLen = 42; + rLoc = 11458; + rType = 0; + vrLen = 746; + vrLoc = 10886; + }; + 95E7B54B0AD2D0E300753F9B /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */; + }; + 95E7B54C0AD2D10400753F9B /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + }; + 95E7B5500AD2D12A00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */; + name = "VLDocument.mm: 25"; + rLen = 0; + rLoc = 339; + rType = 0; + vrLen = 596; + vrLoc = 33; + }; + 95E7B5530AD2D12A00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 670; + vrLoc = 0; + }; + 95E7B5540AD2D12A00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 475"; + rLen = 42; + rLoc = 11458; + rType = 0; + vrLen = 751; + vrLoc = 10886; + }; + 95E7B5580AD2D19100753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */; + name = "VLDocument.mm: 25"; + rLen = 0; + rLoc = 339; + rType = 0; + vrLen = 570; + vrLoc = 33; + }; + 95E7B5590AD2D19100753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + rLen = 0; + rLoc = 89; + rType = 1; + }; + 95E7B55A0AD2D19100753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */; + name = "VLDocument.mm: 25"; + rLen = 0; + rLoc = 339; + rType = 0; + vrLen = 570; + vrLoc = 33; + }; + 95E7B55B0AD2D19100753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 89"; + rLen = 0; + rLoc = 1884; + rType = 0; + vrLen = 752; + vrLoc = 1485; + }; + 95E7B55C0AD2D19100753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 665; + vrLoc = 0; + }; + 95E7B55D0AD2D19100753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 475"; + rLen = 42; + rLoc = 11458; + rType = 0; + vrLen = 746; + vrLoc = 10886; + }; + 95E7B5670AD2D24400753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 132"; + rLen = 0; + rLoc = 2908; + rType = 0; + vrLen = 830; + vrLoc = 2212; + }; + 95E7B5680AD2D24400753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 670; + vrLoc = 0; + }; + 95E7B5690AD2D24400753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 475"; + rLen = 42; + rLoc = 11458; + rType = 0; + vrLen = 751; + vrLoc = 10886; + }; + 95E7B56D0AD2D42000753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 240"; + rLen = 0; + rLoc = 5560; + rType = 0; + vrLen = 957; + vrLoc = 4559; + }; + 95E7B56E0AD2D42000753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 670; + vrLoc = 0; + }; + 95E7B56F0AD2D42000753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 484"; + rLen = 0; + rLoc = 11734; + rType = 0; + vrLen = 1212; + vrLoc = 9400; + }; + 95E7B5700AD2D49800753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 242"; + rLen = 0; + rLoc = 5560; + rType = 0; + vrLen = 964; + vrLoc = 4585; + }; + 95E7B5710AD2D49800753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 665; + vrLoc = 0; + }; + 95E7B5720AD2D49800753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 484"; + rLen = 0; + rLoc = 11734; + rType = 0; + vrLen = 1211; + vrLoc = 9400; + }; + 95E7B5750AD2D4D500753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 245"; + rLen = 0; + rLoc = 5623; + rType = 0; + vrLen = 1223; + vrLoc = 3379; + }; + 95E7B5760AD2D4D500753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 670; + vrLoc = 0; + }; + 95E7B5770AD2D4D500753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 484"; + rLen = 0; + rLoc = 11734; + rType = 0; + vrLen = 1212; + vrLoc = 9400; + }; + 95E7B57A0AD2D54200753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 245"; + rLen = 0; + rLoc = 5623; + rType = 0; + vrLen = 1223; + vrLoc = 3379; + }; + 95E7B57B0AD2D54200753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 670; + vrLoc = 0; + }; + 95E7B57C0AD2D54200753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 484"; + rLen = 0; + rLoc = 11734; + rType = 0; + vrLen = 1212; + vrLoc = 9400; + }; + 95E7B57D0AD2D57B00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 241"; + rLen = 0; + rLoc = 5623; + rType = 0; + vrLen = 1086; + vrLoc = 3538; + }; + 95E7B57E0AD2D57B00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 665; + vrLoc = 0; + }; + 95E7B57F0AD2D57B00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 484"; + rLen = 0; + rLoc = 11734; + rType = 0; + vrLen = 1211; + vrLoc = 9400; + }; + 95E7B5840AD2D5DB00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 241"; + rLen = 0; + rLoc = 5623; + rType = 0; + vrLen = 1086; + vrLoc = 3497; + }; + 95E7B5850AD2D5DB00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 665; + vrLoc = 0; + }; + 95E7B5860AD2D5DB00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 484"; + rLen = 0; + rLoc = 11734; + rType = 0; + vrLen = 1211; + vrLoc = 9400; + }; + 95E7B58B0AD2D66900753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 241"; + rLen = 0; + rLoc = 5623; + rType = 0; + vrLen = 1086; + vrLoc = 3497; + }; + 95E7B58C0AD2D66900753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 665; + vrLoc = 0; + }; + 95E7B58D0AD2D66900753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 484"; + rLen = 0; + rLoc = 11734; + rType = 0; + vrLen = 1211; + vrLoc = 9400; + }; + 95E7B5930AD2D79500753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 463"; + rLen = 30; + rLoc = 11249; + rType = 0; + vrLen = 350; + vrLoc = 11108; + }; + 95E7B5940AD2D79500753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "warning: incomplete implementation of class 'VLChordEditable'"; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + rLen = 0; + rLoc = 152; + rType = 1; + }; + 95E7B5950AD2D79500753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 240"; + rLen = 0; + rLoc = 5560; + rType = 0; + vrLen = 413; + vrLoc = 4403; + }; + 95E7B5960AD2D79500753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 463"; + rLen = 30; + rLoc = 11249; + rType = 0; + vrLen = 350; + vrLoc = 11108; + }; + 95E7B5970AD2D79500753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 153"; + rLen = 0; + rLoc = 3246; + rType = 0; + vrLen = 321; + vrLoc = 5275; + }; + 95E7B5980AD2D79800753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 665; + vrLoc = 0; + }; + 95E7B5990AD2D79800753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 484"; + rLen = 0; + rLoc = 11734; + rType = 0; + vrLen = 1211; + vrLoc = 9400; + }; + 95E7B59A0AD2D7B400753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 665; + vrLoc = 0; + }; + 95E7B59B0AD2D7B400753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 484"; + rLen = 0; + rLoc = 11734; + rType = 0; + vrLen = 1211; + vrLoc = 9400; + }; + 95E7B59F0AD2D8EE00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 484"; + rLen = 0; + rLoc = 11734; + rType = 0; + vrLen = 1211; + vrLoc = 9400; + }; + 95E7B5A00AD2D8EE00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 665; + vrLoc = 0; + }; + 95E7B5A30AD2D90E00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 484"; + rLen = 0; + rLoc = 11734; + rType = 0; + vrLen = 1211; + vrLoc = 9400; + }; + 95E7B5A40AD2D90E00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 665; + vrLoc = 0; + }; + 95E7B5A50AD2D90E00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + rLen = 0; + rLoc = 236; + rType = 1; + }; + 95E7B5A60AD2D90E00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */; + name = "VLDocument.h: 16"; + rLen = 104; + rLoc = 231; + rType = 0; + vrLen = 665; + vrLoc = 0; + }; + 95E7B5A70AD2D90E00753F9B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; + name = "VLSheetViewChords.mm: 236"; + rLen = 0; + rLoc = 5525; + rType = 0; + vrLen = 723; + vrLoc = 2524; }; }