From 74a6637574408c0137abe02abfa2347ebd9118ef Mon Sep 17 00:00:00 2001 From: Matthias Neeracher Date: Mon, 2 Oct 2006 08:32:25 +0000 Subject: [PATCH] Draw by system, reorganize event handling --- Sources/VLModel.h | 5 + Sources/VLSheetView.h | 26 ++- Sources/VLSheetView.mm | 290 +++++++++++++++++++++---------- Sources/VLSheetViewChords.h | 6 +- Sources/VLSheetViewChords.mm | 55 ++---- Sources/VLSheetViewInternal.h | 6 +- Sources/VLSheetViewNotes.h | 15 +- Sources/VLSheetViewNotes.mm | 210 +++++++--------------- Vocalese.xcodeproj/neeri.mode1v3 | 249 +++++++++++++++----------- Vocalese.xcodeproj/neeri.pbxuser | 42 +++-- 10 files changed, 491 insertions(+), 413 deletions(-) diff --git a/Sources/VLModel.h b/Sources/VLModel.h index 1bf0aaf..9b50e7f 100644 --- a/Sources/VLModel.h +++ b/Sources/VLModel.h @@ -31,6 +31,11 @@ private: VLFraction & Normalize(); }; +inline float operator*(VLFraction f, float sc) +{ + return sc*f.fNum/f.fDenom; +} + inline VLFraction operator+(VLFraction one, VLFraction other) { return one += other; diff --git a/Sources/VLSheetView.h b/Sources/VLSheetView.h index 7284012..0ad9355 100644 --- a/Sources/VLSheetView.h +++ b/Sources/VLSheetView.h @@ -33,25 +33,29 @@ enum VLMusicElement { kMusicElements }; +enum VLRegion { + kRegionNowhere, + kRegionNote, + kRegionChord, + kRegionLyrics +}; + @interface VLSheetView : NSView { BOOL fNeedsRecalc; + BOOL fIsRest; float fClefKeyW; float fMeasureW; - float fLineH; int fGroups; int fQuarterBeats; int fDivPerGroup; int fMeasPerSystem; int fNumSystems; float fDisplayScale; - NSImageRep * fNoteCursorCache; - NSPoint fNoteCursorLocation; NSPoint fLastNoteCenter; - NSRect fNoteRect; - NSTrackingRectTag fNoteRectTracker; - int fNoteCursorMeasure; - VLFract fNoteCursorAt; - int fNoteCursorPitch; + NSTrackingRectTag fCursorTracking; + int fCursorMeasure; + VLFract fCursorAt; + int fCursorPitch; id fFieldBeingEdited; BOOL fShowFieldEditor; @@ -71,8 +75,14 @@ enum VLMusicElement { - (float) systemY:(int)system; - (float) noteYWithPitch:(int)pitch; +- (float) noteYInMeasure:(int)measure withPitch:(int)pitch; - (float) noteXInMeasure:(int)measure at:(VLFraction)at; +- (void) mouseMoved:(NSEvent *)event; +- (void) mouseDown:(NSEvent *)event; +- (void) mouseEntered:(NSEvent *)event; +- (void) mouseExited:(NSEvent *)event; + @end // Local Variables: diff --git a/Sources/VLSheetView.mm b/Sources/VLSheetView.mm index e640a56..e4a7ee7 100644 --- a/Sources/VLSheetView.mm +++ b/Sources/VLSheetView.mm @@ -10,6 +10,7 @@ #import "VLSheetViewInternal.h" #import "VLSheetViewChords.h" #import "VLSheetViewNotes.h" +#import "VLSoundOut.h" #import "VLDocument.h" @@ -79,11 +80,10 @@ static float sFlatPos[] = { } } fNeedsRecalc = YES; + fIsRest = NO; fShowFieldEditor = NO; fDisplayScale = 1.0f; - fNoteRectTracker = 0; - fNoteCursorCache = nil; - fNoteCursorMeasure = -1; + fCursorPitch = VLNote::kNoPitch; } return self; } @@ -148,6 +148,11 @@ static float sFlatPos[] = { } } +- (float) noteYInMeasure:(int)measure withPitch:(int)pitch +{ + return [self systemY:measure/fMeasPerSystem]+[self noteYWithPitch:pitch]; +} + - (float) noteXInMeasure:(int)measure at:(VLFraction)at { const VLProperties & prop = [self song]->fProperties.front(); @@ -161,11 +166,12 @@ static float sFlatPos[] = { - (void) recalculateDimensions { + NSScrollView * scroll = [self enclosingScrollView]; fNeedsRecalc = NO; - NSSize sz = [[self enclosingScrollView] contentSize]; - sz.width /= fDisplayScale; - sz.height/= fDisplayScale; + NSSize sz = [scroll contentSize]; + sz.width /= fDisplayScale; + sz.height /= fDisplayScale; const VLSong * song = [self song]; const VLProperties & prop = song->fProperties.front(); @@ -179,21 +185,16 @@ static float sFlatPos[] = { fNumSystems = (song->CountMeasures()+fMeasPerSystem-1)/fMeasPerSystem; sz.height = fNumSystems*kSystemH; -#if 0 - noteRect = NSMakeRect(clefKeyW, kLineY-kMaxLedgers*kLineH, - visibleMeasures*fMeasureW, - (4.0f+2.0f*kMaxLedgers)*kLineH); + NSRect r = [scroll bounds]; NSPoint mouse = - [self convertPoint:[[self window] mouseLocationOutsideOfEventStream] + [scroll convertPoint:[[self window] mouseLocationOutsideOfEventStream] fromView: nil]; - BOOL inNoteRect = [self mouse:mouse inRect:noteRect]; + BOOL within = [scroll mouse:mouse inRect:r]; - [self removeTrackingRect:noteRectTracker]; - noteRectTracker = [self addTrackingRect:noteRect owner:self - userData:nil assumeInside:inNoteRect]; - [[self window] setAcceptsMouseMovedEvents:inNoteRect]; -#endif - + [self removeTrackingRect:fCursorTracking]; + fCursorTracking = [self addTrackingRect:r owner:self + userData:nil assumeInside:within]; + [[self window] setAcceptsMouseMovedEvents:within]; [[self window] makeFirstResponder:self]; NSSize frameSz = {sz.width * fDisplayScale, sz.height * fDisplayScale}; @@ -203,7 +204,7 @@ static float sFlatPos[] = { [self setNeedsDisplay:YES]; } -- (void)drawRect:(NSRect)rect +- (void)drawGridForSystem:(int)system { static NSDictionary * sMeasNoFont = nil; if (!sMeasNoFont) @@ -213,6 +214,9 @@ static float sFlatPos[] = { NSFontAttributeName, nil]; + const float kSystemY = [self systemY:system]; + const float kLineW = fClefKeyW + fMeasPerSystem*fMeasureW; + const VLSong * song = [self song]; const VLProperties & prop = song->fProperties.front(); @@ -222,17 +226,10 @@ static float sFlatPos[] = { // Draw lines // [bz setLineWidth:0.0]; - if (fNeedsRecalc) - [self recalculateDimensions]; - for (int system = 0; system 0) { - float x = kClefX+kClefW; - for (int i=0; iprop.fKey; ++i) { - [[self musicElement: kMusicFlat] - compositeToPoint: NSMakePoint(x, kLineY+sFlatPos[i]+kFlatY) - operation: NSCompositeSourceOver]; - x += kAccW; + for (int measure = 0; measure 0) { + float x = kClefX+kClefW; + for (int i=0; iprop.fKey; ++i) { + [[self musicElement: kMusicFlat] + compositeToPoint: + NSMakePoint(x, kSystemY+sFlatPos[i]+kFlatY) + operation: NSCompositeSourceOver]; + x += kAccW; + } + } +} + +- (void)drawRect:(NSRect)rect +{ + if (fNeedsRecalc) + [self recalculateDimensions]; + + const float kLineW = fClefKeyW + fMeasPerSystem*fMeasureW; + for (int system = 0; systemfProperties.front(); + NSPoint loc = [event locationInWindow]; + loc = [self convertPoint:loc fromView:nil]; + + if (loc.y < 0.0f || loc.y >= fNumSystems*kSystemH) + return 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; + + int measure = static_cast(loc.x / fMeasureW); + loc.x -= measure*fMeasureW; + int group = static_cast(loc.x / ((fDivPerGroup+1)*kNoteW)); + loc.x -= group*(fDivPerGroup+1)*kNoteW; + int div = static_cast(roundf(loc.x / kNoteW))-1; + div = std::min(std::max(div, 0), fDivPerGroup-1); + 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; + + loc.y -= kSystemY+kSemiFloor; + int semi = static_cast(roundf(loc.y / (0.5f*kLineH))); + fCursorPitch = sSemiToPitch[semi]; + + return kRegionNote; +} + +- (void) mouseMoved:(NSEvent *)event +{ + if ([event modifierFlags] & NSAlphaShiftKeyMask) + return; // Keyboard mode, ignore mouse + + bool hadCursor = fCursorPitch != VLNote::kNoPitch; + [self findRegionForEvent:event]; + bool hasCursor = fCursorPitch != VLNote::kNoPitch; + + [self setNeedsDisplay:(hadCursor || hasCursor)]; +} + +- (void) mouseEntered:(NSEvent *)event +{ + [[self window] setAcceptsMouseMovedEvents:YES]; + [self mouseMoved:event]; +} + +- (void) mouseExited:(NSEvent *)event +{ + [[self window] setAcceptsMouseMovedEvents:NO]; + [self mouseMoved:event]; +} + +- (void) mouseDown:(NSEvent *)event +{ + switch ([self findRegionForEvent:event]) { + case kRegionNote: + [self addNoteAtCursor]; + break; + default: + break; + } +} + +- (void) keyDown:(NSEvent *)event +{ + NSString * k = [event charactersIgnoringModifiers]; + + switch ([k characterAtIndex:0]) { + case '\r': + [self startKeyboardCursor]; + [self addNoteAtCursor]; + break; + case ' ': + [self startKeyboardCursor]; + VLSoundOut::Instance()->PlayNote(VLNote(1, fCursorPitch)); + break; + case 'r': + fIsRest = !fIsRest; + break; + } +} + @end diff --git a/Sources/VLSheetViewChords.h b/Sources/VLSheetViewChords.h index 5e18fbe..da3fe49 100644 --- a/Sources/VLSheetViewChords.h +++ b/Sources/VLSheetViewChords.h @@ -11,6 +11,10 @@ - (IBAction) editChord:(id)sender; - (IBAction) doneEditingChord:(id)sender; -- (void) setupChords; +- (void) drawChordsForSystem:(int)system; @end + +// Local Variables: +// mode:ObjC +// End: diff --git a/Sources/VLSheetViewChords.mm b/Sources/VLSheetViewChords.mm index b4bf8bb..67f5638 100644 --- a/Sources/VLSheetViewChords.mm +++ b/Sources/VLSheetViewChords.mm @@ -66,52 +66,31 @@ return s; } -- (void) setupChords +- (void) drawChordsForSystem:(int)system { -#if 0 const VLSong * song = [self song]; - const VLProperties & prop = song->fProperties.front(); - NSView * chordView = [chords contentView]; - - // - // Delete old list of chord boxes - // - for (NSEnumerator * e = [[chordView subviews] objectEnumerator]; - NSView * subview = [e nextObject]; - ) - [subview removeFromSuperview]; // // Build new list // - NSFont * chordFont = [NSFont controlContentFontOfSize: 14]; - int beatsPerGroup = quarterBeats / groups; - for (int m = 0; mfMeasures[measure].fChords.begin(); - VLChordList::const_iterator cEnd = song->fMeasures[measure].fChords.end(); - VLFraction at(0); - for (int beat = 0; beatfDuration; - if (cCur != cEnd && at == VLFraction(beat, 4) && cCur->fPitch != VLNote::kNoPitch) - [chord setTitle: [self stringWithChord:*cCur]]; - [chord release]; + for (int m = 0; m= song->CountMeasures()) + break; + const VLMeasure measure = song->fMeasures[measIdx]; + const VLChordList & chords = measure.fChords; + VLFraction at(0); + for (VLChordList::const_iterator chord = chords.begin(); + chord != chords.end(); + ++chord + ) { + NSAttributedString * chordName = [self stringWithChord:*chord]; + NSPoint chordLoc = + NSMakePoint(kClefX+kClefW+(m+at)*fMeasureW+0.5f*kNoteW, + kSystemY+kChordY); + [chordName drawAtPoint:chordLoc]; } } - [chords setNeedsDisplay: YES]; -#endif } - (IBAction) editChord:(id)sender diff --git a/Sources/VLSheetViewInternal.h b/Sources/VLSheetViewInternal.h index 30265ae..863c177 100644 --- a/Sources/VLSheetViewInternal.h +++ b/Sources/VLSheetViewInternal.h @@ -6,8 +6,8 @@ // Copyright 2006 __MyCompanyName__. All rights reserved. // -const float kLineX = 5; -const float kLineH = 10; +const float kLineX = 5.0; +const float kLineH = 10.0; const float kSystemH = 15.0f*kLineH; const float kSystemY = 3.0f*kLineH; const float kClefX = 20.5f; @@ -21,8 +21,10 @@ const float kAccW = 10.0f; const float kSharpY =-15.0f; const float kFlatY = -7.0f; const float kImgScale = 0.04f; +const float kChordY = 7.0f*kLineH; const float kChordW = 40.0f; const float kChordH = 25.0f; +const float kLyricsY = -3.0*kLineH; const float kNoteX = 7.0f; const float kNoteY = 5.0f; const float kStemX = 0.0f; diff --git a/Sources/VLSheetViewNotes.h b/Sources/VLSheetViewNotes.h index 59fc4ca..3aa40f9 100644 --- a/Sources/VLSheetViewNotes.h +++ b/Sources/VLSheetViewNotes.h @@ -10,14 +10,11 @@ @interface VLSheetView (Notes) -- (void) mouseMoved:(NSEvent *)event; -- (void) mouseDown:(NSEvent *)event; -- (void) mouseEntered:(NSEvent *)event; -- (void) mouseExited:(NSEvent *)event; - -- (void) drawNotes; - -- (void) setNoteCursorMeasure:(int)measure at:(VLFraction)at pitch:(int)pitch; -- (void) hideNoteCursor; +- (void) drawNotesForSystem:(int)system; +- (void) addNoteAtCursor; @end + +// Local Variables: +// mode:ObjC +// End: diff --git a/Sources/VLSheetViewNotes.mm b/Sources/VLSheetViewNotes.mm index 9ef57fc..107dc77 100644 --- a/Sources/VLSheetViewNotes.mm +++ b/Sources/VLSheetViewNotes.mm @@ -15,112 +15,35 @@ @implementation VLSheetView (Notes) -static int sSemiToPitch[] = { - 53, // F - 55, 57, // A - 59, 60, // Middle C - 62, 64, // E - 65, 67, // G - 69, 71, // B - 72, 74, // D - 76, 77, // F - 79, 81, // A - 83, 84, // C - 86, 88 // E -}; - -- (void) mouseMoved:(NSEvent *)event -{ - if ([event modifierFlags] & NSAlphaShiftKeyMask) - return; // Keyboard mode, ignore mouse - const VLProperties & prop = [self song]->fProperties.front(); - NSPoint loc = [event locationInWindow]; - loc = [self convertPoint:loc fromView:nil]; - - loc.x -= fNoteRect.origin.x; - int measure = static_cast(loc.x / fMeasureW); - loc.x -= measure*fMeasureW; - int group = static_cast(loc.x / ((fDivPerGroup+1)*kNoteW)); - loc.x -= group*(fDivPerGroup+1)*kNoteW; - int div = static_cast(roundf(loc.x / kNoteW))-1; - div = std::min(std::max(div, 0), fDivPerGroup-1); - VLFraction at(div+group*fDivPerGroup, 4*prop.fDivisions); - - loc.y -= fNoteRect.origin.y; - int semi = static_cast(roundf(loc.y / (0.5f*kLineH))); - int pitch = sSemiToPitch[semi]; - - [self setNoteCursorMeasure:measure at:at pitch:pitch]; -} - -- (void) addNoteAtCursor:(BOOL)isRest +- (void) addNoteAtCursor { - if (fNoteCursorMeasure > -1) { - VLNote newNote(1, !isRest ? fNoteCursorPitch : VLNote::kNoPitch); + if (fCursorMeasure > -1) { + VLNote newNote(1, !fIsRest ? fCursorPitch : VLNote::kNoPitch); - [self song]->AddNote(newNote, fNoteCursorMeasure, fNoteCursorAt); + [self song]->AddNote(newNote, fCursorMeasure, fCursorAt); [self setNeedsDisplay:YES]; VLSoundOut::Instance()->PlayNote(newNote); + + fIsRest = NO; } } -- (void) mouseDown:(NSEvent *)event -{ - [self mouseMoved:event]; - [self addNoteAtCursor: ([event modifierFlags] & NSShiftKeyMask) != 0]; -} - -- (void) mouseEntered:(NSEvent *)event -{ - [[self window] setAcceptsMouseMovedEvents:YES]; - [self mouseMoved:event]; -} - -- (void) mouseExited:(NSEvent *)event -{ - [[self window] setAcceptsMouseMovedEvents:NO]; - if (!([event modifierFlags] & NSAlphaShiftKeyMask)) - [self hideNoteCursor]; -} - - (void) startKeyboardCursor { - if (fNoteCursorMeasure < 0) { - fNoteCursorMeasure = 0; - fNoteCursorPitch = VLNote::kMiddleC; - fNoteCursorAt = VLFraction(0); + if (fCursorMeasure < 0) { + fCursorMeasure = 0; + fCursorPitch = VLNote::kMiddleC; + fCursorAt = VLFraction(0); } } -- (void) keyDown:(NSEvent *)event -{ - NSString * k = [event charactersIgnoringModifiers]; - - switch ([k characterAtIndex:0]) { - case '\r': - [self startKeyboardCursor]; - [self addNoteAtCursor]; - break; - case ' ': - [self startKeyboardCursor]; - VLSoundOut::Instance()->PlayNote(VLNote(1, fNoteCursorPitch)); - break; - } -} - -- (void) hideNoteCursor -{ - fNoteCursorMeasure = -1; - [self setNeedsDisplay:YES]; -} - - (void) drawNoteCursor { NSPoint note = - NSMakePoint([self noteXInMeasure:fNoteCursorMeasure at:fNoteCursorAt], - [self noteYWithPitch:fNoteCursorPitch]); + NSMakePoint([self noteXInMeasure:fCursorMeasure at:fCursorAt], + [self noteYInMeasure:fCursorMeasure withPitch:fCursorPitch]); NSRect noteCursorRect = NSMakeRect(note.x-kNoteX, note.y-kNoteY, 2.0f*kNoteX, 2.0f*kNoteY); [[self musicElement:kMusicNoteCursor] @@ -245,7 +168,7 @@ static int sSemiToPitch[] = { operation: NSCompositeSourceOver]; } -- (void) drawNotes +- (void) drawNotesForSystem:(int)system { const VLSong * song = [self song]; const VLProperties & prop = song->fProperties.front(); @@ -253,79 +176,64 @@ static int sSemiToPitch[] = { VLFraction swung(3, prop.fDivisions*8, true); // Which notes to swing VLFraction swingGrid(2*swung); // Alignment of swing notes - for (int system = 0; system= song->CountMeasures()) - break; - const VLMeasure measure = song->fMeasures[measIdx]; - const VLNoteList & melody = measure.fMelody; - VLFraction at(0); - for (VLNoteList::const_iterator note = melody.begin(); - note != melody.end(); - ++note - ) { - VLFraction dur = note->fDuration; - BOOL first = !m || !note->fTied; - int pitch = note->fPitch; - while (dur > 0) { - VLFraction partialDur; // Actual value of note drawn - measure.fProperties->PartialNote(at, dur, &partialDur); + float kSystemY = [self systemY:system]; + for (int m = 0; m= song->CountMeasures()) + break; + const VLMeasure measure = song->fMeasures[measIdx]; + const VLNoteList & melody = measure.fMelody; + VLFraction at(0); + for (VLNoteList::const_iterator note = melody.begin(); + note != melody.end(); + ++note + ) { + VLFraction dur = note->fDuration; + BOOL first = !m || !note->fTied; + int pitch = note->fPitch; + while (dur > 0) { + VLFraction partialDur; // Actual value of note drawn + measure.fProperties->PartialNote(at, dur, &partialDur); - BOOL triplet = !(partialDur.fDenom % 3); - VLFraction noteDur(1); // Visual value of note + BOOL triplet = !(partialDur.fDenom % 3); + VLFraction noteDur(1); // Visual value of note - if (triplet) { - if (swing) { // Swing 8ths / 16ths are written as straight 8ths - if (partialDur == 4*swung/3 && (at % swingGrid) == 0) { - noteDur = swung; - triplet = NO; - } else if (partialDur == 2*swung/3 && ((at+partialDur) % swingGrid) == 0) { - noteDur = swung; - triplet = NO; - } else { - noteDur = 4*partialDur/3; - } + if (triplet) { + if (swing) { // Swing 8ths / 16ths are written as straight 8ths + if (partialDur == 4*swung/3 && (at % swingGrid) == 0) { + noteDur = swung; + triplet = NO; + } else if (partialDur == 2*swung/3 && ((at+partialDur) % swingGrid) == 0) { + noteDur = swung; + triplet = NO; } else { noteDur = 4*partialDur/3; } } else { - noteDur = partialDur; + noteDur = 4*partialDur/3; } - if (pitch != VLNote::kNoPitch) - [self drawNote:noteDur - at: NSMakePoint( - [self noteXInMeasure:m at:at], - kLineY+[self noteYWithPitch:pitch]) - tied:!first]; - else - [self drawRest:noteDur - at: NSMakePoint( - [self noteXInMeasure:m at:at], - kLineY+[self noteYWithPitch:65])]; - dur -= partialDur; - at += partialDur; - first = NO; + } else { + noteDur = partialDur; } + if (pitch != VLNote::kNoPitch) + [self drawNote:noteDur + at: NSMakePoint( + [self noteXInMeasure:m at:at], + kSystemY+[self noteYWithPitch:pitch]) + tied:!first]; + else + [self drawRest:noteDur + at: NSMakePoint( + [self noteXInMeasure:m at:at], + kSystemY+[self noteYWithPitch:65])]; + dur -= partialDur; + at += partialDur; + first = NO; } } } - if (fNoteCursorMeasure > -1) + if (fCursorPitch != VLNote::kNoPitch && fCursorMeasure/fMeasPerSystem == system) [self drawNoteCursor]; } -- (void) setNoteCursorMeasure:(int)measure at:(VLFraction)at pitch:(int)pitch -{ - if (measure != fNoteCursorMeasure || at != fNoteCursorAt - || pitch != fNoteCursorPitch - ) { - fNoteCursorMeasure = measure; - fNoteCursorAt = at; - fNoteCursorPitch = pitch; - - [self setNeedsDisplay:YES]; - } -} - @end diff --git a/Vocalese.xcodeproj/neeri.mode1v3 b/Vocalese.xcodeproj/neeri.mode1v3 index 6ae65b8..9f06094 100644 --- a/Vocalese.xcodeproj/neeri.mode1v3 +++ b/Vocalese.xcodeproj/neeri.mode1v3 @@ -200,7 +200,47 @@ Content PBXProjectModuleGUID - 95B042FC0ACE431A00236B52 + 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 PBXProjectModuleLabel <No Editor> PBXSplitModuleInNavigatorKey @@ -222,7 +262,7 @@ Content PBXProjectModuleGUID - 95B042FB0ACE431A00236B52 + 95D1F7FE0AB68C8C00EE6AC8 PBXProjectModuleLabel <No Editor> PBXSplitModuleInNavigatorKey @@ -244,7 +284,73 @@ Content PBXProjectModuleGUID - 95B042F70ACE431A00236B52 + 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 @@ -288,7 +394,7 @@ Content PBXProjectModuleGUID - 95D1F8310AB694EC00EE6AC8 + 95B042F70ACE431A00236B52 PBXProjectModuleLabel <No Editor> PBXSplitModuleInNavigatorKey @@ -310,73 +416,7 @@ 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 + 95B042FB0ACE431A00236B52 PBXProjectModuleLabel <No Editor> PBXSplitModuleInNavigatorKey @@ -398,7 +438,7 @@ Content PBXProjectModuleGUID - 95D1F82E0AB694EC00EE6AC8 + 95B042FC0ACE431A00236B52 PBXProjectModuleLabel <No Editor> PBXSplitModuleInNavigatorKey @@ -450,8 +490,6 @@ Layout - BecomeActive - ContentConfiguration PBXBottomSmartGroupGIDs @@ -497,7 +535,7 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 10 + 9 1 0 @@ -567,6 +605,8 @@ 0pt + BecomeActive + ContentConfiguration PBXProjectModuleGUID @@ -603,9 +643,9 @@ TableOfContents - 9529DCA60AD0E18200C9D67E + 95DFE81B0AD0F18B00375606 1CE0B1FE06471DED0097A5F4 - 9529DCA70AD0E18200C9D67E + 95DFE81C0AD0F18B00375606 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -739,23 +779,24 @@ 5 WindowOrderList - 9529DCB30AD0E40700C9D67E - 9529DCB40AD0E40700C9D67E - 9529DCB50AD0E40700C9D67E - 95D7BFC80AA6C1A500D5E02C - 95D1F82E0AB694EC00EE6AC8 - 95D1F7FE0AB68C8C00EE6AC8 - 95D1F8130AB6908400EE6AC8 - 95D1F8850AB69B6700EE6AC8 - 95D1F8660AB6970400EE6AC8 - 95D1F8310AB694EC00EE6AC8 - 95B042FA0ACE431A00236B52 - 95B042F70ACE431A00236B52 - 95B042FB0ACE431A00236B52 + 95DFE82C0AD0F29C00375606 + 95DFE82D0AD0F29C00375606 + 95DFE82E0AD0F29C00375606 95B042FC0ACE431A00236B52 + 95B042FB0ACE431A00236B52 + 95B042F70ACE431A00236B52 + 95B042FA0ACE431A00236B52 + 95D1F8310AB694EC00EE6AC8 + 95D1F8660AB6970400EE6AC8 + 95D1F8850AB69B6700EE6AC8 + 95D1F8130AB6908400EE6AC8 + 95D1F7FE0AB68C8C00EE6AC8 + 95D1F82E0AB694EC00EE6AC8 1CD10A99069EF8BA00B06720 - 95D7BFC00AA6C1A500D5E02C + 95D7BFC80AA6C1A500D5E02C /Development/Vocalese/Vocalese.xcodeproj + 95DFE83A0AD105A300375606 + 95D7BFC00AA6C1A500D5E02C WindowString 167 326 690 397 0 0 1024 746 @@ -774,14 +815,12 @@ Dock - BecomeActive - ContentConfiguration PBXProjectModuleGUID 1CD0528F0623707200166675 PBXProjectModuleLabel - VLSheetViewNotes.mm + VLSheetView.mm StatusBarVisibility @@ -798,6 +837,8 @@ 293pt + BecomeActive + ContentConfiguration PBXProjectModuleGUID @@ -837,7 +878,7 @@ TableOfContents 95D7BFC00AA6C1A500D5E02C - 9529DCA80AD0E18200C9D67E + 95DFE81D0AD0F18B00375606 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -957,13 +998,13 @@ TableOfContents 1CD10A99069EF8BA00B06720 - 9529DCA90AD0E18200C9D67E + 95DFE81E0AD0F18B00375606 1C162984064C10D400B95A72 - 9529DCAA0AD0E18200C9D67E - 9529DCAB0AD0E18200C9D67E - 9529DCAC0AD0E18200C9D67E - 9529DCAD0AD0E18200C9D67E - 9529DCAE0AD0E18200C9D67E + 95DFE81F0AD0F18B00375606 + 95DFE8200AD0F18B00375606 + 95DFE8210AD0F18B00375606 + 95DFE8220AD0F18B00375606 + 95DFE8230AD0F18B00375606 ToolbarConfiguration xcode.toolbar.config.debugV3 @@ -1090,6 +1131,8 @@ Dock + BecomeActive + ContentConfiguration PBXProjectModuleGUID @@ -1125,7 +1168,7 @@ TableOfContents 95D7BFC80AA6C1A500D5E02C - 9529DCB20AD0E40700C9D67E + 95DFE82B0AD0F29400375606 1C78EAAC065D492600B07095 WindowString @@ -1133,7 +1176,7 @@ WindowToolGUID 95D7BFC80AA6C1A500D5E02C WindowToolIsVisible - + Identifier diff --git a/Vocalese.xcodeproj/neeri.pbxuser b/Vocalese.xcodeproj/neeri.pbxuser index 76df6a7..a2464cb 100644 --- a/Vocalese.xcodeproj/neeri.pbxuser +++ b/Vocalese.xcodeproj/neeri.pbxuser @@ -62,8 +62,12 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 181460906; - PBXWorkspaceStateSaveDate = 181460906; + PBXPerProjectTemplateStateSaveDate = 181465162; + PBXWorkspaceStateSaveDate = 181465162; + }; + perUserProjectItems = { + 95DFE8370AD1053A00375606 /* PBXBookmark */ = 95DFE8370AD1053A00375606 /* PBXBookmark */; + 95DFE83E0AD105C900375606 /* PBXTextBookmark */ = 95DFE83E0AD105C900375606 /* PBXTextBookmark */; }; sourceControlManager = 954D7413095406B2007D9571 /* Source Control */; userBuildSettings = { @@ -155,9 +159,9 @@ }; 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {703, 2114}}"; - sepNavSelRange = "{4746, 0}"; - sepNavVisRect = "{{0, 1851}, {703, 261}}"; + sepNavIntBoundsRect = "{{0, 0}, {703, 1400}}"; + sepNavSelRange = "{3987, 0}"; + sepNavVisRect = "{{0, 1125}, {703, 261}}"; sepNavWindowFrame = "{{15, 92}, {763, 649}}"; }; }; @@ -313,9 +317,9 @@ }; 95B66657096BCA1F00FE18C9 /* VLSheetViewNotes.mm */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {703, 4130}}"; - sepNavSelRange = "{1225, 0}"; - sepNavVisRect = "{{0, 479}, {703, 261}}"; + sepNavIntBoundsRect = "{{0, 0}, {703, 2534}}"; + sepNavSelRange = "{5830, 0}"; + sepNavVisRect = "{{0, 1499}, {703, 261}}"; sepNavWindowFrame = "{{38, 71}, {763, 649}}"; }; }; @@ -332,7 +336,7 @@ hitCount = 0; ignoreCount = 0; lineNumber = 21; - modificationTime = 181461973.028078; + modificationTime = 181470420.561138; state = 2; }; 95BDA15709540BF1009F9D65 /* VLSheetView.h */ = { @@ -345,10 +349,24 @@ }; 95BDA15809540BF1009F9D65 /* VLSheetView.mm */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {703, 2814}}"; - sepNavSelRange = "{8722, 0}"; - sepNavVisRect = "{{0, 2553}, {703, 261}}"; + sepNavIntBoundsRect = "{{0, 0}, {703, 3584}}"; + sepNavSelRange = "{11149, 30}"; + sepNavVisRect = "{{0, 3262}, {703, 261}}"; sepNavWindowFrame = "{{164, 35}, {763, 649}}"; }; }; + 95DFE8370AD1053A00375606 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + }; + 95DFE83E0AD105C900375606 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; + name = "VLSheetView.mm: 394"; + rLen = 0; + rLoc = 9493; + rType = 0; + vrLen = 1225; + vrLoc = 9100; + }; }