mirror of
https://github.com/microtherion/VocalEasel.git
synced 2024-12-23 03:34:00 +00:00
Model, input, display repeats & endings
This commit is contained in:
parent
6dec6c2b82
commit
93d8aaba73
2
English.lproj/MainMenu.nib/classes.nib
generated
2
English.lproj/MainMenu.nib/classes.nib
generated
|
@ -2,6 +2,8 @@
|
||||||
IBClasses = (
|
IBClasses = (
|
||||||
{
|
{
|
||||||
ACTIONS = {
|
ACTIONS = {
|
||||||
|
editRepeat = id;
|
||||||
|
editRepeatEnding = id;
|
||||||
zoomIn = id;
|
zoomIn = id;
|
||||||
zoomOut = id;
|
zoomOut = id;
|
||||||
zoomToActualSize = id;
|
zoomToActualSize = id;
|
||||||
|
|
8
English.lproj/MainMenu.nib/info.nib
generated
8
English.lproj/MainMenu.nib/info.nib
generated
|
@ -3,20 +3,20 @@
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>IBDocumentLocation</key>
|
<key>IBDocumentLocation</key>
|
||||||
<string>62 66 356 240 0 0 1024 746 </string>
|
<string>86 70 356 240 0 0 1280 778 </string>
|
||||||
<key>IBEditorPositions</key>
|
<key>IBEditorPositions</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>29</key>
|
<key>29</key>
|
||||||
<string>232 309 349 44 0 0 1024 746 </string>
|
<string>320 324 349 44 0 0 1280 778 </string>
|
||||||
</dict>
|
</dict>
|
||||||
<key>IBFramework Version</key>
|
<key>IBFramework Version</key>
|
||||||
<string>453.0</string>
|
<string>454.0</string>
|
||||||
<key>IBOpenObjects</key>
|
<key>IBOpenObjects</key>
|
||||||
<array>
|
<array>
|
||||||
<integer>217</integer>
|
<integer>217</integer>
|
||||||
<integer>29</integer>
|
<integer>29</integer>
|
||||||
</array>
|
</array>
|
||||||
<key>IBSystem Version</key>
|
<key>IBSystem Version</key>
|
||||||
<string>9A300</string>
|
<string>9A321</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
BIN
English.lproj/MainMenu.nib/keyedobjects.nib
generated
BIN
English.lproj/MainMenu.nib/keyedobjects.nib
generated
Binary file not shown.
25
English.lproj/VLDocument.nib/classes.nib
generated
25
English.lproj/VLDocument.nib/classes.nib
generated
|
@ -1,7 +1,14 @@
|
||||||
{
|
{
|
||||||
IBClasses = (
|
IBClasses = (
|
||||||
{
|
{
|
||||||
ACTIONS = {engrave = id; showLog = id; showOutput = id; zoomIn = id; zoomOut = id; };
|
ACTIONS = {
|
||||||
|
endRepeatSheet = id;
|
||||||
|
engrave = id;
|
||||||
|
showLog = id;
|
||||||
|
showOutput = id;
|
||||||
|
zoomIn = id;
|
||||||
|
zoomOut = id;
|
||||||
|
};
|
||||||
CLASS = FirstResponder;
|
CLASS = FirstResponder;
|
||||||
LANGUAGE = ObjC;
|
LANGUAGE = ObjC;
|
||||||
SUPERCLASS = NSObject;
|
SUPERCLASS = NSObject;
|
||||||
|
@ -21,10 +28,22 @@
|
||||||
SUPERCLASS = NSWindowController;
|
SUPERCLASS = NSWindowController;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ACTIONS = {hideFieldEditor = id; setDivisions = id; setKey = id; setTime = id; };
|
ACTIONS = {
|
||||||
|
endRepeatSheet = id;
|
||||||
|
hideFieldEditor = id;
|
||||||
|
setDivisions = id;
|
||||||
|
setKey = id;
|
||||||
|
setTime = id;
|
||||||
|
};
|
||||||
CLASS = VLSheetView;
|
CLASS = VLSheetView;
|
||||||
LANGUAGE = ObjC;
|
LANGUAGE = ObjC;
|
||||||
OUTLETS = {fFieldEditor = id; };
|
OUTLETS = {
|
||||||
|
fEndingMsg = id;
|
||||||
|
fEndingSheet = id;
|
||||||
|
fFieldEditor = id;
|
||||||
|
fRepeatMsg = id;
|
||||||
|
fRepeatSheet = id;
|
||||||
|
};
|
||||||
SUPERCLASS = NSView;
|
SUPERCLASS = NSView;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
8
English.lproj/VLDocument.nib/info.nib
generated
8
English.lproj/VLDocument.nib/info.nib
generated
|
@ -3,15 +3,17 @@
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>IBDocumentLocation</key>
|
<key>IBDocumentLocation</key>
|
||||||
<string>43 29 356 240 0 0 1280 778 </string>
|
<string>372 26 356 240 0 0 1280 778 </string>
|
||||||
<key>IBFramework Version</key>
|
<key>IBFramework Version</key>
|
||||||
<string>453.0</string>
|
<string>454.0</string>
|
||||||
<key>IBOpenObjects</key>
|
<key>IBOpenObjects</key>
|
||||||
<array>
|
<array>
|
||||||
|
<integer>216</integer>
|
||||||
|
<integer>196</integer>
|
||||||
<integer>5</integer>
|
<integer>5</integer>
|
||||||
<integer>144</integer>
|
<integer>144</integer>
|
||||||
</array>
|
</array>
|
||||||
<key>IBSystem Version</key>
|
<key>IBSystem Version</key>
|
||||||
<string>9A300</string>
|
<string>9A321</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.
|
@ -26,6 +26,7 @@
|
||||||
NSNumber * songTempo;
|
NSNumber * songTempo;
|
||||||
NSString * tmpPath;
|
NSString * tmpPath;
|
||||||
NSFileWrapper * vcsWrapper;
|
NSFileWrapper * vcsWrapper;
|
||||||
|
int repeatVolta;
|
||||||
|
|
||||||
VLSheetWindow * sheetWin;
|
VLSheetWindow * sheetWin;
|
||||||
VLLogWindow * logWin;
|
VLLogWindow * logWin;
|
||||||
|
@ -37,10 +38,12 @@
|
||||||
- (NSNumber *) songKey;
|
- (NSNumber *) songKey;
|
||||||
- (NSNumber *) songTime;
|
- (NSNumber *) songTime;
|
||||||
- (NSNumber *) songDivisions;
|
- (NSNumber *) songDivisions;
|
||||||
|
- (int) repeatVolta;
|
||||||
|
|
||||||
- (void) setKey:(int)key transpose:(BOOL)transpose;
|
- (void) setKey:(int)key transpose:(BOOL)transpose;
|
||||||
- (void) setTimeNum:(int)num denom:(int)denom;
|
- (void) setTimeNum:(int)num denom:(int)denom;
|
||||||
- (void) setDivisions:(int)divisions;
|
- (void) setDivisions:(int)divisions;
|
||||||
|
- (void) setRepeatVolta:(int)repeatVolta;
|
||||||
|
|
||||||
- (IBAction) engrave:(id)sender;
|
- (IBAction) engrave:(id)sender;
|
||||||
- (IBAction) showOutput:(id)sender;
|
- (IBAction) showOutput:(id)sender;
|
||||||
|
|
|
@ -72,6 +72,7 @@
|
||||||
logWin = nil;
|
logWin = nil;
|
||||||
tmpPath = nil;
|
tmpPath = nil;
|
||||||
vcsWrapper = nil;
|
vcsWrapper = nil;
|
||||||
|
repeatVolta = 2;
|
||||||
[self setHasUndoManager:YES];
|
[self setHasUndoManager:YES];
|
||||||
undo =
|
undo =
|
||||||
[[VLKeyValueUndo alloc] initWithOwner:self
|
[[VLKeyValueUndo alloc] initWithOwner:self
|
||||||
|
@ -217,6 +218,16 @@
|
||||||
[self updateChangeCount:NSChangeDone];
|
[self updateChangeCount:NSChangeDone];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (int) repeatVolta
|
||||||
|
{
|
||||||
|
return repeatVolta;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setRepeatVolta:(int)volta
|
||||||
|
{
|
||||||
|
repeatVolta = volta;
|
||||||
|
}
|
||||||
|
|
||||||
- (NSString *) tmpPath
|
- (NSString *) tmpPath
|
||||||
{
|
{
|
||||||
if (!tmpPath) {
|
if (!tmpPath) {
|
||||||
|
|
|
@ -1154,6 +1154,8 @@ bool VLSong::PrevWord(size_t stanza, size_t & measure, VLFraction & at)
|
||||||
}
|
}
|
||||||
} while (measure-- > 0);
|
} while (measure-- > 0);
|
||||||
|
|
||||||
|
measure = 0;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1164,7 +1166,6 @@ bool VLSong::NextWord(size_t stanza, size_t & measure, VLFraction & at)
|
||||||
VLMeasure & meas = fMeasures[measure];
|
VLMeasure & meas = fMeasures[measure];
|
||||||
VLNoteList::iterator note = fMeasures[measure].fMelody.begin();
|
VLNoteList::iterator note = fMeasures[measure].fMelody.begin();
|
||||||
VLNoteList::iterator end = fMeasures[measure].fMelody.end();
|
VLNoteList::iterator end = fMeasures[measure].fMelody.end();
|
||||||
bool hasWord = false;
|
|
||||||
VLFraction now(0);
|
VLFraction now(0);
|
||||||
|
|
||||||
while (note != meas.fMelody.end()) {
|
while (note != meas.fMelody.end()) {
|
||||||
|
@ -1191,11 +1192,11 @@ std::string VLSong::GetWord(size_t stanza, size_t measure, VLFraction at)
|
||||||
|
|
||||||
do {
|
do {
|
||||||
VLMeasure & meas = fMeasures[measure];
|
VLMeasure & meas = fMeasures[measure];
|
||||||
VLNoteList::iterator note = fMeasures[measure].fMelody.begin();
|
VLNoteList::iterator note = meas.fMelody.begin();
|
||||||
VLNoteList::iterator end = fMeasures[measure].fMelody.end();
|
VLNoteList::iterator end = meas.fMelody.end();
|
||||||
VLFraction now(0);
|
VLFraction now(0);
|
||||||
|
|
||||||
while (note != meas.fMelody.end()) {
|
while (note != end) {
|
||||||
if (now >= at && note->fPitch != VLNote::kNoPitch) {
|
if (now >= at && note->fPitch != VLNote::kNoPitch) {
|
||||||
if (word.size())
|
if (word.size())
|
||||||
word += '-';
|
word += '-';
|
||||||
|
@ -1261,3 +1262,268 @@ void VLSong::SetWord(size_t stanza, size_t measure, VLFraction at, std::string w
|
||||||
} while (++measure < fMeasures.size());
|
} while (++measure < fMeasures.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VLSong::AddRepeat(size_t beginMeasure, size_t endMeasure, int times)
|
||||||
|
{
|
||||||
|
for (size_t r=0; r<fRepeats.size(); ++r)
|
||||||
|
if (fRepeats[r].fEndings[0].fBegin == beginMeasure
|
||||||
|
&& fRepeats[r].fEndings[0].fEnd >= endMeasure
|
||||||
|
)
|
||||||
|
if (fRepeats[r].fEndings[0].fEnd == endMeasure) {
|
||||||
|
//
|
||||||
|
// Exact match, just change times
|
||||||
|
//
|
||||||
|
size_t mask = ((1<<times)-1) ^ ((1<<fRepeats[r].fTimes)-1);
|
||||||
|
if (fRepeats[r].fTimes < times)
|
||||||
|
fRepeats[r].fEndings[0].fVolta |= mask;
|
||||||
|
else if (fRepeats[r].fTimes > times)
|
||||||
|
for (size_t e=0; e<fRepeats[r].fEndings.size(); ++e)
|
||||||
|
fRepeats[r].fEndings[e].fVolta &= ~mask;
|
||||||
|
fRepeats[r].fTimes = times;
|
||||||
|
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
fRepeats.erase(fRepeats.begin()+r);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
VLRepeat rep;
|
||||||
|
|
||||||
|
rep.fTimes = times;
|
||||||
|
rep.fEndings.push_back(VLRepeat::Ending(beginMeasure, endMeasure,
|
||||||
|
(1<<times)-1));
|
||||||
|
fRepeats.push_back(rep);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VLSong::DelRepeat(size_t beginMeasure, size_t endMeasure)
|
||||||
|
{
|
||||||
|
for (size_t r=0; r<fRepeats.size(); ++r)
|
||||||
|
if (fRepeats[r].fEndings[0].fBegin == beginMeasure
|
||||||
|
&& fRepeats[r].fEndings[0].fEnd >= endMeasure
|
||||||
|
) {
|
||||||
|
fRepeats.erase(fRepeats.begin()+r);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VLSong::AddEnding(size_t beginMeasure, size_t endMeasure, size_t volta)
|
||||||
|
{
|
||||||
|
for (size_t r=0; r<fRepeats.size(); ++r)
|
||||||
|
if (fRepeats[r].fEndings[0].fBegin < beginMeasure
|
||||||
|
&& fRepeats[r].fEndings[0].fEnd >= beginMeasure
|
||||||
|
) {
|
||||||
|
VLRepeat & repeat = fRepeats[r];
|
||||||
|
for (size_t e=1; e<repeat.fEndings.size(); ++e)
|
||||||
|
if (repeat.fEndings[e].fBegin == beginMeasure
|
||||||
|
&& repeat.fEndings[e].fEnd == endMeasure
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
// Found it, just edit volta
|
||||||
|
//
|
||||||
|
repeat.fEndings[0].fVolta |= repeat.fEndings[e].fVolta;
|
||||||
|
volta &= repeat.fEndings[0].fVolta;
|
||||||
|
repeat.fEndings[0].fVolta &= ~volta;
|
||||||
|
repeat.fEndings[e].fVolta = volta;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Not found, add new ending
|
||||||
|
//
|
||||||
|
volta &= fRepeats[r].fEndings[0].fVolta;
|
||||||
|
fRepeats[r].fEndings[0].fVolta &= ~volta;
|
||||||
|
fRepeats[r].fEndings[0].fEnd =
|
||||||
|
std::max<int8_t>(fRepeats[r].fEndings[0].fEnd, endMeasure);
|
||||||
|
fRepeats[r].fEndings.push_back(
|
||||||
|
VLRepeat::Ending(beginMeasure, endMeasure, volta));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VLSong::DelEnding(size_t beginMeasure, size_t endMeasure)
|
||||||
|
{
|
||||||
|
for (size_t r=0; r<fRepeats.size(); ++r)
|
||||||
|
if (fRepeats[r].fEndings[0].fBegin <= beginMeasure
|
||||||
|
&& fRepeats[r].fEndings[0].fEnd > beginMeasure
|
||||||
|
)
|
||||||
|
for (size_t e=1; e<fRepeats[r].fEndings.size(); ++e)
|
||||||
|
if (fRepeats[r].fEndings[e].fBegin == beginMeasure) {
|
||||||
|
fRepeats[r].fEndings[0].fVolta |= fRepeats[r].fEndings[e].fVolta;
|
||||||
|
if (e > 1 && e == fRepeats[r].fEndings.size()-1)
|
||||||
|
fRepeats[r].fEndings[0].fEnd = fRepeats[r].fEndings[e].fBegin;
|
||||||
|
fRepeats[r].fEndings.erase(fRepeats[r].fEndings.begin()+e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool VLSong::CanBeRepeat(size_t beginMeasure, size_t endMeasure, int * times)
|
||||||
|
{
|
||||||
|
for (size_t r=0; r<fRepeats.size(); ++r) {
|
||||||
|
if (fRepeats[r].fEndings[0].fBegin == beginMeasure) {
|
||||||
|
//
|
||||||
|
// Look for exact match & return
|
||||||
|
//
|
||||||
|
if (times)
|
||||||
|
*times = fRepeats[r].fTimes;
|
||||||
|
if (fRepeats[r].fEndings[0].fEnd == endMeasure)
|
||||||
|
return true;
|
||||||
|
if (fRepeats[r].fEndings.size() > 1) {
|
||||||
|
if (fRepeats[r].fEndings[1].fBegin == endMeasure)
|
||||||
|
return true;
|
||||||
|
if (fRepeats[r].fEndings[1].fEnd == endMeasure)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Look for overlap and reject
|
||||||
|
//
|
||||||
|
if (fRepeats[r].fEndings[0].fBegin >= beginMeasure
|
||||||
|
&& fRepeats[r].fEndings[0].fBegin < endMeasure
|
||||||
|
)
|
||||||
|
return false;
|
||||||
|
if (fRepeats[r].fEndings[0].fEnd > beginMeasure
|
||||||
|
&& fRepeats[r].fEndings[0].fEnd <= endMeasure
|
||||||
|
)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Virgin territory, accept
|
||||||
|
//
|
||||||
|
if (times)
|
||||||
|
*times = 2;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool VLSong::CanBeEnding(size_t beginMeasure, size_t endMeasure,
|
||||||
|
size_t * volta, size_t * voltaOK)
|
||||||
|
{
|
||||||
|
for (size_t r=0; r<fRepeats.size(); ++r)
|
||||||
|
if (beginMeasure > fRepeats[r].fEndings[0].fBegin
|
||||||
|
&& beginMeasure <= fRepeats[r].fEndings[0].fEnd
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
// Found right repeat
|
||||||
|
//
|
||||||
|
VLRepeat & repeat = fRepeats[r];
|
||||||
|
|
||||||
|
//
|
||||||
|
// Append new repeat, or carve out from ending
|
||||||
|
//
|
||||||
|
if (beginMeasure == repeat.fEndings[0].fEnd) {
|
||||||
|
for (size_t r2=0; r2<fRepeats.size(); ++r2)
|
||||||
|
if (r2 != r
|
||||||
|
&& fRepeats[r2].fEndings[0].fBegin >= beginMeasure
|
||||||
|
&& fRepeats[r2].fEndings[0].fBegin < endMeasure
|
||||||
|
)
|
||||||
|
return false; // Overlap
|
||||||
|
if (volta)
|
||||||
|
*volta = repeat.fEndings[0].fVolta;
|
||||||
|
if (voltaOK)
|
||||||
|
*voltaOK = repeat.fEndings[0].fVolta;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else if (repeat.fEndings.size() == 1
|
||||||
|
&& endMeasure >= repeat.fEndings[0].fEnd
|
||||||
|
) {
|
||||||
|
if (volta)
|
||||||
|
*volta = repeat.fEndings[0].fVolta;
|
||||||
|
if (voltaOK)
|
||||||
|
*voltaOK = repeat.fEndings[0].fVolta;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Otherwise must match existing
|
||||||
|
//
|
||||||
|
for (size_t e=1; e<repeat.fEndings.size(); ++e)
|
||||||
|
if (beginMeasure == repeat.fEndings[e].fBegin
|
||||||
|
&& endMeasure == repeat.fEndings[e].fEnd
|
||||||
|
) {
|
||||||
|
if (volta)
|
||||||
|
*volta = repeat.fEndings[e].fVolta;
|
||||||
|
if (voltaOK)
|
||||||
|
*voltaOK = repeat.fEndings[e].fVolta
|
||||||
|
| repeat.fEndings[0].fVolta;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool VLSong::DoesBeginRepeat(size_t measure) const
|
||||||
|
{
|
||||||
|
for (size_t r=0; r<fRepeats.size(); ++r)
|
||||||
|
if (fRepeats[r].fEndings[0].fBegin == measure)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool VLSong::DoesEndRepeat(size_t measure, int * times) const
|
||||||
|
{
|
||||||
|
for (size_t r=0; r<fRepeats.size(); ++r)
|
||||||
|
if (fRepeats[r].fEndings[0].fEnd == measure
|
||||||
|
&& fRepeats[r].fEndings.size() == 1
|
||||||
|
) {
|
||||||
|
*times = fRepeats[r].fTimes;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool VLSong::DoesBeginEnding(size_t measure, size_t * volta) const
|
||||||
|
{
|
||||||
|
for (size_t r=0; r<fRepeats.size(); ++r)
|
||||||
|
if (fRepeats[r].fEndings[0].fEnd >= measure
|
||||||
|
&& fRepeats[r].fEndings.size() > 1
|
||||||
|
) {
|
||||||
|
*volta = (1<<fRepeats[r].fTimes)-1;
|
||||||
|
for (size_t e=1; e<fRepeats[r].fEndings.size(); ++e)
|
||||||
|
if (fRepeats[r].fEndings[e].fBegin == measure) {
|
||||||
|
*volta = fRepeats[r].fEndings[e].fVolta;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else
|
||||||
|
*volta&= ~fRepeats[r].fEndings[e].fVolta;
|
||||||
|
if (*volta && fRepeats[r].fEndings[0].fEnd == measure) {
|
||||||
|
//
|
||||||
|
// Implied ending for all not mentioned
|
||||||
|
//
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool VLSong::DoesEndEnding(size_t measure, bool * repeat) const
|
||||||
|
{
|
||||||
|
for (size_t r=0; r<fRepeats.size(); ++r)
|
||||||
|
if (fRepeats[r].fEndings[0].fEnd+1 >= measure
|
||||||
|
&& fRepeats[r].fEndings.size() > 1
|
||||||
|
) {
|
||||||
|
size_t volta = (1<<fRepeats[r].fTimes)-1;
|
||||||
|
for (size_t e=1; e<fRepeats[r].fEndings.size(); ++e)
|
||||||
|
if (fRepeats[r].fEndings[e].fEnd == measure) {
|
||||||
|
if (e == fRepeats[r].fEndings.size()-1
|
||||||
|
&& fRepeats[r].fEndings[e].fVolta == volta
|
||||||
|
)
|
||||||
|
*repeat = false; // Don't repeat after last alternative
|
||||||
|
else
|
||||||
|
*repeat = true;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else
|
||||||
|
volta &= ~fRepeats[r].fEndings[e].fVolta;
|
||||||
|
if (volta && fRepeats[r].fEndings[0].fEnd+1 == measure) {
|
||||||
|
//
|
||||||
|
// Implied ending for all not mentioned
|
||||||
|
//
|
||||||
|
*repeat = false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
|
@ -243,17 +243,43 @@ struct VLMeasure {
|
||||||
void MMAChords(std::string & chords, const VLProperties & prop) const;
|
void MMAChords(std::string & chords, const VLProperties & prop) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct VLRepeat {
|
||||||
|
int8_t fTimes;
|
||||||
|
|
||||||
|
struct Ending {
|
||||||
|
Ending(int8_t begin, int8_t end, uint16_t volta)
|
||||||
|
: fBegin(begin), fEnd(end), fVolta(volta) {}
|
||||||
|
int8_t fBegin;
|
||||||
|
int8_t fEnd;
|
||||||
|
uint16_t fVolta;
|
||||||
|
};
|
||||||
|
std::vector<Ending> fEndings;
|
||||||
|
};
|
||||||
|
|
||||||
struct VLSong {
|
struct VLSong {
|
||||||
VLSong();
|
VLSong();
|
||||||
void swap(VLSong & other);
|
void swap(VLSong & other);
|
||||||
|
|
||||||
std::vector<VLProperties> fProperties;
|
std::vector<VLProperties> fProperties;
|
||||||
std::vector<VLMeasure> fMeasures;
|
std::vector<VLMeasure> fMeasures;
|
||||||
|
std::vector<VLRepeat> fRepeats;
|
||||||
|
|
||||||
|
|
||||||
void AddChord(VLChord chord, size_t measure, VLFraction at);
|
void AddChord(VLChord chord, size_t measure, VLFraction at);
|
||||||
void AddNote(VLLyricsNote note, size_t measure, VLFraction at);
|
void AddNote(VLLyricsNote note, size_t measure, VLFraction at);
|
||||||
void DelChord(size_t measure, VLFraction at);
|
void DelChord(size_t measure, VLFraction at);
|
||||||
void DelNote(size_t measure, VLFraction at);
|
void DelNote(size_t measure, VLFraction at);
|
||||||
|
void AddRepeat(size_t beginMeasure, size_t endMeasure, int times);
|
||||||
|
void DelRepeat(size_t beginMeasure, size_t endMeasure);
|
||||||
|
void AddEnding(size_t beginMeasure, size_t endMeasure, size_t volta);
|
||||||
|
void DelEnding(size_t beginMeasure, size_t endMeasure);
|
||||||
|
bool CanBeRepeat(size_t beginMeasure, size_t endMeasure, int * times = 0);
|
||||||
|
bool CanBeEnding(size_t beginMeasure, size_t endMeasure,
|
||||||
|
size_t * volta = 0, size_t * voltaOK = 0);
|
||||||
|
bool DoesBeginRepeat(size_t measure) const;
|
||||||
|
bool DoesEndRepeat(size_t measure, int * times) const;
|
||||||
|
bool DoesBeginEnding(size_t measure, size_t * volta) const;
|
||||||
|
bool DoesEndEnding(size_t measure, bool * repeat) const;
|
||||||
void Transpose(int semitones);
|
void Transpose(int semitones);
|
||||||
|
|
||||||
bool FindWord(size_t stanza, size_t & measure, VLFraction & at);
|
bool FindWord(size_t stanza, size_t & measure, VLFraction & at);
|
||||||
|
|
|
@ -78,14 +78,21 @@ enum VLRecalc {
|
||||||
size_t fCursorStanza;
|
size_t fCursorStanza;
|
||||||
int fSelStart;
|
int fSelStart;
|
||||||
int fSelEnd;
|
int fSelEnd;
|
||||||
|
size_t fVolta;
|
||||||
|
size_t fVoltaOK;
|
||||||
|
|
||||||
IBOutlet id fFieldEditor;
|
IBOutlet id fFieldEditor;
|
||||||
|
IBOutlet id fRepeatSheet;
|
||||||
|
IBOutlet id fEndingSheet;
|
||||||
|
IBOutlet id fRepeatMsg;
|
||||||
|
IBOutlet id fEndingMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction) setKey:(id)sender;
|
- (IBAction) setKey:(id)sender;
|
||||||
- (IBAction) setTime:(id)sender;
|
- (IBAction) setTime:(id)sender;
|
||||||
- (IBAction) setDivisions:(id)sender;
|
- (IBAction) setDivisions:(id)sender;
|
||||||
- (IBAction) hideFieldEditor:(id)sender;
|
- (IBAction) hideFieldEditor:(id)sender;
|
||||||
|
- (IBAction) endRepeatSheet:(id)sender;
|
||||||
|
|
||||||
- (VLDocument *) document;
|
- (VLDocument *) document;
|
||||||
- (VLSong *) song;
|
- (VLSong *) song;
|
||||||
|
@ -108,6 +115,7 @@ enum VLRecalc {
|
||||||
|
|
||||||
- (VLEditable *) editTarget;
|
- (VLEditable *) editTarget;
|
||||||
- (void) setEditTarget:(VLEditable *)editable;
|
- (void) setEditTarget:(VLEditable *)editable;
|
||||||
|
- (VLRegion) findRegionForEvent:(NSEvent *) event;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#import "VLSheetViewChords.h"
|
#import "VLSheetViewChords.h"
|
||||||
#import "VLSheetViewNotes.h"
|
#import "VLSheetViewNotes.h"
|
||||||
#import "VLSheetViewLyrics.h"
|
#import "VLSheetViewLyrics.h"
|
||||||
|
#import "VLSheetViewSelection.h"
|
||||||
#import "VLSoundOut.h"
|
#import "VLSoundOut.h"
|
||||||
|
|
||||||
#import "VLDocument.h"
|
#import "VLDocument.h"
|
||||||
|
@ -320,14 +321,99 @@ VLMusicElement sSemi2Accidental[12][12] = {
|
||||||
// Draw measure lines
|
// Draw measure lines
|
||||||
//
|
//
|
||||||
[bz setLineWidth:2.0];
|
[bz setLineWidth:2.0];
|
||||||
for (int measure = 0; measure<=fMeasPerSystem; ++measure) {
|
int m = system*fMeasPerSystem;
|
||||||
|
for (int measure = 0; measure<=fMeasPerSystem; ++measure, ++m) {
|
||||||
|
const float kDblLineOff = 1.5f;
|
||||||
|
const float kThick = 2.5f;
|
||||||
|
const float kThin = 1.0f;
|
||||||
|
const float kDotOff = 4.5f;
|
||||||
|
const float kDotRadius = 2.0f;
|
||||||
|
const float kVoltaTextOff = 7.0f;
|
||||||
const float x = fClefKeyW+measure*fMeasureW;
|
const float x = fClefKeyW+measure*fMeasureW;
|
||||||
const float yy = kSystemY+4.0f*kLineH;
|
const float yy = kSystemY+4.0f*kLineH;
|
||||||
|
bool repeat;
|
||||||
|
int times;
|
||||||
|
size_t volta;
|
||||||
|
bool dotsPrecede= measure != 0 &&
|
||||||
|
(song->DoesEndRepeat(m, ×)
|
||||||
|
|| (song->DoesEndEnding(m, &repeat) && repeat));
|
||||||
|
bool dotsFollow = measure<fMeasPerSystem && song->DoesBeginRepeat(m);
|
||||||
|
if (!dotsPrecede && !dotsFollow) {
|
||||||
|
//
|
||||||
|
// Regular
|
||||||
|
//
|
||||||
[bz moveToPoint: NSMakePoint(x, kSystemY)];
|
[bz moveToPoint: NSMakePoint(x, kSystemY)];
|
||||||
[bz lineToPoint: NSMakePoint(x, yy)];
|
[bz lineToPoint: NSMakePoint(x, yy)];
|
||||||
}
|
|
||||||
[bz stroke];
|
[bz stroke];
|
||||||
[bz removeAllPoints];
|
[bz removeAllPoints];
|
||||||
|
} else {
|
||||||
|
[bz stroke];
|
||||||
|
[bz removeAllPoints];
|
||||||
|
[bz setLineWidth: dotsFollow ? kThick : kThin];
|
||||||
|
[bz moveToPoint: NSMakePoint(x-kDblLineOff, kSystemY)];
|
||||||
|
[bz lineToPoint: NSMakePoint(x-kDblLineOff, yy)];
|
||||||
|
[bz stroke];
|
||||||
|
[bz removeAllPoints];
|
||||||
|
[bz setLineWidth: dotsPrecede ? kThick : kThin];
|
||||||
|
[bz moveToPoint: NSMakePoint(x+kDblLineOff, kSystemY)];
|
||||||
|
[bz lineToPoint: NSMakePoint(x+kDblLineOff, yy)];
|
||||||
|
[bz stroke];
|
||||||
|
[bz removeAllPoints];
|
||||||
|
[bz setLineWidth:2.0];
|
||||||
|
if (dotsPrecede) {
|
||||||
|
[bz appendBezierPathWithOvalInRect:
|
||||||
|
NSMakeRect(x-kDotOff-kDotRadius,
|
||||||
|
kSystemY+1.5*kLineH-kDotRadius,
|
||||||
|
2.0f*kDotRadius, 2.0f*kDotRadius)];
|
||||||
|
[bz appendBezierPathWithOvalInRect:
|
||||||
|
NSMakeRect(x-kDotOff-kDotRadius,
|
||||||
|
kSystemY+2.5*kLineH-kDotRadius,
|
||||||
|
2.0f*kDotRadius, 2.0f*kDotRadius)];
|
||||||
|
}
|
||||||
|
if (dotsFollow) {
|
||||||
|
[bz appendBezierPathWithOvalInRect:
|
||||||
|
NSMakeRect(x+kDotOff-kDotRadius,
|
||||||
|
kSystemY+1.5*kLineH-kDotRadius,
|
||||||
|
2.0f*kDotRadius, 2.0f*kDotRadius)];
|
||||||
|
[bz appendBezierPathWithOvalInRect:
|
||||||
|
NSMakeRect(x+kDotOff-kDotRadius,
|
||||||
|
kSystemY+2.5*kLineH-kDotRadius,
|
||||||
|
2.0f*kDotRadius, 2.0f*kDotRadius)];
|
||||||
|
}
|
||||||
|
[bz fill];
|
||||||
|
[bz removeAllPoints];
|
||||||
|
}
|
||||||
|
if (measure<fMeasPerSystem) {
|
||||||
|
if (song->DoesBeginEnding(m, &volta)) {
|
||||||
|
[bz setLineWidth:kThin];
|
||||||
|
[bz moveToPoint: NSMakePoint(x+kDblLineOff, yy+0.5f*kLineH)];
|
||||||
|
[bz lineToPoint: NSMakePoint(x+kDblLineOff, yy+2.0f*kLineH)];
|
||||||
|
[bz lineToPoint: NSMakePoint(x+0.5f*fMeasureW, yy+2.0f*kLineH)];
|
||||||
|
[bz stroke];
|
||||||
|
[bz removeAllPoints];
|
||||||
|
[bz setLineWidth:2.0];
|
||||||
|
NSString * vs = nil;
|
||||||
|
for (size_t v=0; v<8; ++v)
|
||||||
|
if (volta & (1<<v))
|
||||||
|
if (vs)
|
||||||
|
vs = [NSString stringWithFormat:@"%@, %d", vs, v+1];
|
||||||
|
else
|
||||||
|
vs = [NSString stringWithFormat:@"%d", v+1];
|
||||||
|
[vs drawAtPoint: NSMakePoint(x+kVoltaTextOff, kSystemY+kMeasNoY)
|
||||||
|
withAttributes: sMeasNoFont];
|
||||||
|
}
|
||||||
|
if (song->DoesEndEnding(m+1, &repeat)) {
|
||||||
|
[bz setLineWidth:kThin];
|
||||||
|
[bz moveToPoint: NSMakePoint(x+0.5f*fMeasureW, yy+2.0f*kLineH)];
|
||||||
|
[bz lineToPoint: NSMakePoint(x+fMeasureW-kDblLineOff, yy+2.0f*kLineH)];
|
||||||
|
if (repeat)
|
||||||
|
[bz lineToPoint: NSMakePoint(x+fMeasureW-kDblLineOff, yy+0.5f*kLineH)];
|
||||||
|
[bz stroke];
|
||||||
|
[bz removeAllPoints];
|
||||||
|
[bz setLineWidth:2.0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Draw division lines
|
// Draw division lines
|
||||||
|
@ -701,8 +787,7 @@ static int8_t sSharpAcc[] = {
|
||||||
[self editLyrics];
|
[self editLyrics];
|
||||||
break;
|
break;
|
||||||
case kRegionMeasure:
|
case kRegionMeasure:
|
||||||
fSelStart = fSelEnd = fCursorMeasure;
|
[self editSelection];
|
||||||
[self setNeedsDisplay:YES];
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -714,36 +799,7 @@ static int8_t sSharpAcc[] = {
|
||||||
if (fCursorRegion != kRegionMeasure)
|
if (fCursorRegion != kRegionMeasure)
|
||||||
[super mouseDragged:event];
|
[super mouseDragged:event];
|
||||||
[self autoscroll:event];
|
[self autoscroll:event];
|
||||||
int prevMeasure = fCursorMeasure;
|
[self adjustSelection:event];
|
||||||
switch ([self findRegionForEvent:event]) {
|
|
||||||
case kRegionNote:
|
|
||||||
case kRegionChord:
|
|
||||||
case kRegionLyrics:
|
|
||||||
if (fCursorAt.fNum)
|
|
||||||
++fCursorMeasure;
|
|
||||||
//
|
|
||||||
// Fall through
|
|
||||||
//
|
|
||||||
case kRegionMeasure:
|
|
||||||
if (fCursorMeasure > fSelEnd) {
|
|
||||||
fSelEnd = fCursorMeasure;
|
|
||||||
[self setNeedsDisplay:YES];
|
|
||||||
} else if (fCursorMeasure < fSelStart) {
|
|
||||||
fSelStart = fCursorMeasure;
|
|
||||||
[self setNeedsDisplay:YES];
|
|
||||||
} else if (prevMeasure == fSelEnd && fCursorMeasure<prevMeasure) {
|
|
||||||
fSelEnd = fCursorMeasure;
|
|
||||||
[self setNeedsDisplay:YES];
|
|
||||||
} else if (prevMeasure == fSelStart && fCursorMeasure>prevMeasure) {
|
|
||||||
fSelStart = fCursorMeasure;
|
|
||||||
[self setNeedsDisplay:YES];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
fCursorMeasure = prevMeasure;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
fCursorRegion = kRegionMeasure;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) keyDown:(NSEvent *)event
|
- (void) keyDown:(NSEvent *)event
|
||||||
|
@ -841,4 +897,9 @@ static int8_t sSharpAcc[] = {
|
||||||
[self setNeedsDisplay: YES];
|
[self setNeedsDisplay: YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (IBAction)endRepeatSheet:(id)sender
|
||||||
|
{
|
||||||
|
[NSApp endSheet:[sender window] returnCode:[sender tag]];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#import "VLSheetView.h"
|
#import "VLSheetView.h"
|
||||||
#import "VLSheetViewChords.h"
|
#import "VLSheetViewChords.h"
|
||||||
#import "VLSheetViewInternal.h"
|
#import "VLSheetViewInternal.h"
|
||||||
|
#import "VLDocument.h"
|
||||||
|
|
||||||
#import "VLModel.h"
|
#import "VLModel.h"
|
||||||
#import "VLSoundOut.h"
|
#import "VLSoundOut.h"
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#import "VLSheetView.h"
|
#import "VLSheetView.h"
|
||||||
#import "VLSheetViewLyrics.h"
|
#import "VLSheetViewLyrics.h"
|
||||||
#import "VLSheetViewInternal.h"
|
#import "VLSheetViewInternal.h"
|
||||||
|
#import "VLDocument.h"
|
||||||
|
|
||||||
#import "VLModel.h"
|
#import "VLModel.h"
|
||||||
#import "VLSoundOut.h"
|
#import "VLSoundOut.h"
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#import "VLSheetView.h"
|
#import "VLSheetView.h"
|
||||||
#import "VLSheetViewNotes.h"
|
#import "VLSheetViewNotes.h"
|
||||||
#import "VLSheetViewInternal.h"
|
#import "VLSheetViewInternal.h"
|
||||||
|
#import "VLDocument.h"
|
||||||
#import "VLSoundOut.h"
|
#import "VLSoundOut.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
27
Sources/VLSheetViewSelection.h
Normal file
27
Sources/VLSheetViewSelection.h
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
//
|
||||||
|
// VLSheetViewSelection.h
|
||||||
|
// Vocalese
|
||||||
|
//
|
||||||
|
// Created by Matthias Neeracher on 12/28/06.
|
||||||
|
// Copyright 2006 __MyCompanyName__. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
@interface VLSheetView (Selection)
|
||||||
|
|
||||||
|
- (void)editSelection;
|
||||||
|
- (void)adjustSelection:(NSEvent *)event;
|
||||||
|
|
||||||
|
- (BOOL)validateUserInterfaceItem:(id)item;
|
||||||
|
- (IBAction)cut:(id)sender;
|
||||||
|
- (IBAction)copy:(id)sender;
|
||||||
|
- (IBAction)paste:(id)sender;
|
||||||
|
- (IBAction)delete:(id)sender;
|
||||||
|
|
||||||
|
- (IBAction)editRepeat:(id)sender;
|
||||||
|
- (IBAction)editRepeatEnding:(id)sender;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
// Local Variables:
|
||||||
|
// mode:ObjC
|
||||||
|
// End:
|
188
Sources/VLSheetViewSelection.mm
Normal file
188
Sources/VLSheetViewSelection.mm
Normal file
|
@ -0,0 +1,188 @@
|
||||||
|
//
|
||||||
|
// VLSheetViewSelection.mm
|
||||||
|
// Vocalese
|
||||||
|
//
|
||||||
|
// Created by Matthias Neeracher on 12/28/06.
|
||||||
|
// Copyright 2006 __MyCompanyName__. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "VLSheetView.h"
|
||||||
|
#import "VLSheetViewSelection.h"
|
||||||
|
#import "VLDocument.h"
|
||||||
|
|
||||||
|
@implementation VLSheetView (Selection)
|
||||||
|
|
||||||
|
- (void)editSelection
|
||||||
|
{
|
||||||
|
fSelStart = fSelEnd = fCursorMeasure;
|
||||||
|
[self setNeedsDisplay:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)adjustSelection:(NSEvent *)event
|
||||||
|
{
|
||||||
|
int prevMeasure = fCursorMeasure;
|
||||||
|
switch ([self findRegionForEvent:event]) {
|
||||||
|
case kRegionNote:
|
||||||
|
case kRegionChord:
|
||||||
|
case kRegionLyrics:
|
||||||
|
if (fCursorAt.fNum)
|
||||||
|
++fCursorMeasure;
|
||||||
|
//
|
||||||
|
// Fall through
|
||||||
|
//
|
||||||
|
case kRegionMeasure:
|
||||||
|
if (fCursorMeasure > fSelEnd) {
|
||||||
|
fSelEnd = fCursorMeasure;
|
||||||
|
[self setNeedsDisplay:YES];
|
||||||
|
} else if (fCursorMeasure < fSelStart) {
|
||||||
|
fSelStart = fCursorMeasure;
|
||||||
|
[self setNeedsDisplay:YES];
|
||||||
|
} else if (prevMeasure == fSelEnd && fCursorMeasure<prevMeasure) {
|
||||||
|
fSelEnd = fCursorMeasure;
|
||||||
|
[self setNeedsDisplay:YES];
|
||||||
|
} else if (prevMeasure == fSelStart && fCursorMeasure>prevMeasure) {
|
||||||
|
fSelStart = fCursorMeasure;
|
||||||
|
[self setNeedsDisplay:YES];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fCursorMeasure = prevMeasure;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fCursorRegion = kRegionMeasure;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)validateUserInterfaceItem:(id) item
|
||||||
|
{
|
||||||
|
SEL action = [item action];
|
||||||
|
if (action == @selector(cut:)
|
||||||
|
|| action == @selector(copy:)
|
||||||
|
|| action == @selector(delete:)
|
||||||
|
)
|
||||||
|
return fSelStart < fSelEnd;
|
||||||
|
else if (action == @selector(editRepeat:))
|
||||||
|
return fSelEnd > fSelStart
|
||||||
|
&& [self song]->CanBeRepeat(fSelStart, fSelEnd);
|
||||||
|
else if (action == @selector(editRepeatEnding:))
|
||||||
|
return fSelEnd > fSelStart
|
||||||
|
&& [self song]->CanBeEnding(fSelStart, fSelEnd);
|
||||||
|
else if (action == @selector(paste:))
|
||||||
|
return fSelStart <= fSelEnd;
|
||||||
|
else
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)cut:(id)sender
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)copy:(id)sender
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)paste:(id)sender
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)delete:(id)sender
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)editRepeat:(id)sender
|
||||||
|
{
|
||||||
|
int volta;
|
||||||
|
[self song]->CanBeRepeat(fSelStart, fSelEnd, &volta);
|
||||||
|
|
||||||
|
[fRepeatMsg setStringValue:
|
||||||
|
[NSString stringWithFormat:@"Repeat measures %d through %d",
|
||||||
|
fSelStart+1, fSelEnd]];
|
||||||
|
[NSApp beginSheet:fRepeatSheet modalForWindow:[self window]
|
||||||
|
modalDelegate:self
|
||||||
|
didEndSelector:@selector(didEndRepeatSheet:returnCode:contextInfo:)
|
||||||
|
contextInfo:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)didEndRepeatSheet:(NSWindow *)sheet returnCode:(int)returnCode
|
||||||
|
contextInfo:(void *)ctx
|
||||||
|
{
|
||||||
|
switch (returnCode) {
|
||||||
|
case NSAlertFirstButtonReturn:
|
||||||
|
[[self document] willChangeSong];
|
||||||
|
[self song]->AddRepeat(fSelStart, fSelEnd, [[self document] repeatVolta]);
|
||||||
|
[self setNeedsDisplay:YES];
|
||||||
|
[[self document] didChangeSong];
|
||||||
|
break;
|
||||||
|
case NSAlertThirdButtonReturn:
|
||||||
|
[[self document] willChangeSong];
|
||||||
|
[self song]->DelRepeat(fSelStart, fSelEnd);
|
||||||
|
[[self document] didChangeSong];
|
||||||
|
[self setNeedsDisplay:YES];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
[sheet orderOut:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)editRepeatEnding:(id)sender
|
||||||
|
{
|
||||||
|
[self song]->CanBeEnding(fSelStart, fSelEnd, &fVolta, &fVoltaOK);
|
||||||
|
|
||||||
|
[fEndingMsg setStringValue:
|
||||||
|
[NSString stringWithFormat:@"Ending in measures %d through %d applies to repeats:",
|
||||||
|
fSelStart+1, fSelEnd]];
|
||||||
|
|
||||||
|
[NSApp beginSheet:fEndingSheet modalForWindow:[self window]
|
||||||
|
modalDelegate:self
|
||||||
|
didEndSelector:@selector(didEndEndingSheet:returnCode:contextInfo:)
|
||||||
|
contextInfo:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)didEndEndingSheet:(NSWindow *)sheet returnCode:(int)returnCode
|
||||||
|
contextInfo:(void *)ctx
|
||||||
|
{
|
||||||
|
switch (returnCode) {
|
||||||
|
case NSAlertFirstButtonReturn:
|
||||||
|
[[self document] willChangeSong];
|
||||||
|
[self song]->AddEnding(fSelStart, fSelEnd, fVolta);
|
||||||
|
[self setNeedsDisplay:YES];
|
||||||
|
[[self document] didChangeSong];
|
||||||
|
break;
|
||||||
|
case NSAlertThirdButtonReturn:
|
||||||
|
[[self document] willChangeSong];
|
||||||
|
[self song]->DelEnding(fSelStart, fSelEnd);
|
||||||
|
[[self document] didChangeSong];
|
||||||
|
[self setNeedsDisplay:YES];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
[sheet orderOut:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Data source for endings
|
||||||
|
//
|
||||||
|
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)tableView:(NSTableView*)tv objectValueForTableColumn:(NSTableColumn *)col
|
||||||
|
row:(NSInteger)rowIndex
|
||||||
|
{
|
||||||
|
int mask = [[col identifier] intValue];
|
||||||
|
return (fVoltaOK & mask) ? [NSNumber numberWithBool:(fVolta & mask)] : nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)tableView:(NSTableView *)tv setObjectValue:(id)val forTableColumn:(NSTableColumn *)col row:(NSInteger)rowIndex
|
||||||
|
{
|
||||||
|
int mask = [[col identifier] intValue];
|
||||||
|
|
||||||
|
if ([val boolValue])
|
||||||
|
fVolta |= mask;
|
||||||
|
else
|
||||||
|
fVolta &= ~mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
|
@ -8,8 +8,6 @@
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */; };
|
8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */; };
|
||||||
8D15AC2D0486D014006FF6A4 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 2A37F4B6FDCFA73011CA2CEA /* MainMenu.nib */; };
|
|
||||||
8D15AC2E0486D014006FF6A4 /* VLDocument.nib in Resources */ = {isa = PBXBuildFile; fileRef = 2A37F4B4FDCFA73011CA2CEA /* VLDocument.nib */; };
|
|
||||||
8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165FFE840EACC02AAC07 /* InfoPlist.strings */; };
|
8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165FFE840EACC02AAC07 /* InfoPlist.strings */; };
|
||||||
8D15AC310486D014006FF6A4 /* VLDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */; settings = {ATTRIBUTES = (); }; };
|
8D15AC310486D014006FF6A4 /* VLDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */; settings = {ATTRIBUTES = (); }; };
|
||||||
8D15AC320486D014006FF6A4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4B0FDCFA73011CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
|
8D15AC320486D014006FF6A4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4B0FDCFA73011CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
|
||||||
|
@ -40,6 +38,8 @@
|
||||||
95498DBD0AE3812F006B5F81 /* VLSoundSched.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95498DBC0AE3812F006B5F81 /* VLSoundSched.mm */; };
|
95498DBD0AE3812F006B5F81 /* VLSoundSched.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95498DBC0AE3812F006B5F81 /* VLSoundSched.mm */; };
|
||||||
954BBD860AEDDE5300BBFD5F /* VLAppController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 954BBD850AEDDE5300BBFD5F /* VLAppController.mm */; };
|
954BBD860AEDDE5300BBFD5F /* VLAppController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 954BBD850AEDDE5300BBFD5F /* VLAppController.mm */; };
|
||||||
954BBD9A0AEDE81500BBFD5F /* VLPitchTransformer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 954BBD990AEDE81500BBFD5F /* VLPitchTransformer.mm */; };
|
954BBD9A0AEDE81500BBFD5F /* VLPitchTransformer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 954BBD990AEDE81500BBFD5F /* VLPitchTransformer.mm */; };
|
||||||
|
954DD4B90B444B220056C504 /* VLSheetViewSelection.h in Copy MMA Library */ = {isa = PBXBuildFile; fileRef = 954DD4B70B444B220056C504 /* VLSheetViewSelection.h */; };
|
||||||
|
954DD4E60B44E67F0056C504 /* VLSheetViewSelection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 954DD4E50B44E67F0056C504 /* VLSheetViewSelection.mm */; };
|
||||||
955CBA4E0B2366DD001CF4A1 /* VLKeyValueUndo.h in Copy MMA Library */ = {isa = PBXBuildFile; fileRef = 955CBA4C0B2366DD001CF4A1 /* VLKeyValueUndo.h */; };
|
955CBA4E0B2366DD001CF4A1 /* VLKeyValueUndo.h in Copy MMA Library */ = {isa = PBXBuildFile; fileRef = 955CBA4C0B2366DD001CF4A1 /* VLKeyValueUndo.h */; };
|
||||||
955CBA4F0B2366DD001CF4A1 /* VLKeyValueUndo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 955CBA4D0B2366DD001CF4A1 /* VLKeyValueUndo.mm */; };
|
955CBA4F0B2366DD001CF4A1 /* VLKeyValueUndo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 955CBA4D0B2366DD001CF4A1 /* VLKeyValueUndo.mm */; };
|
||||||
955E58E5095658AB0045FDA5 /* VLModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955E58E4095658AB0045FDA5 /* VLModel.cpp */; };
|
955E58E5095658AB0045FDA5 /* VLModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955E58E4095658AB0045FDA5 /* VLModel.cpp */; };
|
||||||
|
@ -51,6 +51,8 @@
|
||||||
9593E4E90AE0ED1F00035816 /* vocalese.icns in Resources */ = {isa = PBXBuildFile; fileRef = 9593E4E70AE0ED1F00035816 /* vocalese.icns */; };
|
9593E4E90AE0ED1F00035816 /* vocalese.icns in Resources */ = {isa = PBXBuildFile; fileRef = 9593E4E70AE0ED1F00035816 /* vocalese.icns */; };
|
||||||
959408AD096922EA007CCCF8 /* TVLEdit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 959408AC096922EA007CCCF8 /* TVLEdit.cpp */; };
|
959408AD096922EA007CCCF8 /* TVLEdit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 959408AC096922EA007CCCF8 /* TVLEdit.cpp */; };
|
||||||
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 */; };
|
||||||
|
959420EC0B44E77A006BC62C /* VLDocument.nib in Resources */ = {isa = PBXBuildFile; fileRef = 954DD4DF0B44E61E0056C504 /* VLDocument.nib */; };
|
||||||
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 */; };
|
||||||
|
@ -109,6 +111,7 @@
|
||||||
95009B650B0ED18700EB33A4 /* CAMath.h in Copy MMA Library */,
|
95009B650B0ED18700EB33A4 /* CAMath.h in Copy MMA Library */,
|
||||||
95E299BF0B2006F5001977D2 /* VLSheetViewLyrics.h in Copy MMA Library */,
|
95E299BF0B2006F5001977D2 /* VLSheetViewLyrics.h in Copy MMA Library */,
|
||||||
955CBA4E0B2366DD001CF4A1 /* VLKeyValueUndo.h in Copy MMA Library */,
|
955CBA4E0B2366DD001CF4A1 /* VLKeyValueUndo.h in Copy MMA Library */,
|
||||||
|
954DD4B90B444B220056C504 /* VLSheetViewSelection.h in Copy MMA Library */,
|
||||||
);
|
);
|
||||||
name = "Copy MMA Library";
|
name = "Copy MMA Library";
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
@ -135,8 +138,6 @@
|
||||||
2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLDocument.mm; path = Sources/VLDocument.mm; sourceTree = "<group>"; };
|
2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLDocument.mm; path = Sources/VLDocument.mm; sourceTree = "<group>"; };
|
||||||
2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLDocument.h; path = Sources/VLDocument.h; sourceTree = "<group>"; };
|
2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLDocument.h; path = Sources/VLDocument.h; sourceTree = "<group>"; };
|
||||||
2A37F4B0FDCFA73011CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Sources/main.m; sourceTree = "<group>"; };
|
2A37F4B0FDCFA73011CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Sources/main.m; sourceTree = "<group>"; };
|
||||||
2A37F4B5FDCFA73011CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/VLDocument.nib; sourceTree = "<group>"; };
|
|
||||||
2A37F4B7FDCFA73011CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = "<group>"; };
|
|
||||||
2A37F4BAFDCFA73011CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = "<group>"; };
|
2A37F4BAFDCFA73011CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = "<group>"; };
|
||||||
2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
|
2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
|
||||||
2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
|
2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
|
||||||
|
@ -170,6 +171,10 @@
|
||||||
954BBD850AEDDE5300BBFD5F /* VLAppController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLAppController.mm; path = Sources/VLAppController.mm; sourceTree = "<group>"; };
|
954BBD850AEDDE5300BBFD5F /* VLAppController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLAppController.mm; path = Sources/VLAppController.mm; sourceTree = "<group>"; };
|
||||||
954BBD980AEDE81500BBFD5F /* VLPitchTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLPitchTransformer.h; path = Sources/VLPitchTransformer.h; sourceTree = "<group>"; };
|
954BBD980AEDE81500BBFD5F /* VLPitchTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLPitchTransformer.h; path = Sources/VLPitchTransformer.h; sourceTree = "<group>"; };
|
||||||
954BBD990AEDE81500BBFD5F /* VLPitchTransformer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLPitchTransformer.mm; path = Sources/VLPitchTransformer.mm; sourceTree = "<group>"; };
|
954BBD990AEDE81500BBFD5F /* VLPitchTransformer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLPitchTransformer.mm; path = Sources/VLPitchTransformer.mm; sourceTree = "<group>"; };
|
||||||
|
954DD4B70B444B220056C504 /* VLSheetViewSelection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLSheetViewSelection.h; path = Sources/VLSheetViewSelection.h; sourceTree = "<group>"; };
|
||||||
|
954DD4DA0B44E6000056C504 /* MainMenu.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = MainMenu.nib; path = English.lproj/MainMenu.nib; sourceTree = "<group>"; };
|
||||||
|
954DD4DF0B44E61E0056C504 /* VLDocument.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = VLDocument.nib; path = English.lproj/VLDocument.nib; sourceTree = "<group>"; };
|
||||||
|
954DD4E50B44E67F0056C504 /* VLSheetViewSelection.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = VLSheetViewSelection.mm; path = Sources/VLSheetViewSelection.mm; sourceTree = "<group>"; };
|
||||||
955CBA4C0B2366DD001CF4A1 /* VLKeyValueUndo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLKeyValueUndo.h; path = Sources/VLKeyValueUndo.h; sourceTree = "<group>"; };
|
955CBA4C0B2366DD001CF4A1 /* VLKeyValueUndo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLKeyValueUndo.h; path = Sources/VLKeyValueUndo.h; sourceTree = "<group>"; };
|
||||||
955CBA4D0B2366DD001CF4A1 /* VLKeyValueUndo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLKeyValueUndo.mm; path = Sources/VLKeyValueUndo.mm; sourceTree = "<group>"; };
|
955CBA4D0B2366DD001CF4A1 /* VLKeyValueUndo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLKeyValueUndo.mm; path = Sources/VLKeyValueUndo.mm; sourceTree = "<group>"; };
|
||||||
955E58E3095658AB0045FDA5 /* VLModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLModel.h; path = Sources/VLModel.h; sourceTree = "<group>"; };
|
955E58E3095658AB0045FDA5 /* VLModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLModel.h; path = Sources/VLModel.h; sourceTree = "<group>"; };
|
||||||
|
@ -363,6 +368,8 @@
|
||||||
954BBD990AEDE81500BBFD5F /* VLPitchTransformer.mm */,
|
954BBD990AEDE81500BBFD5F /* VLPitchTransformer.mm */,
|
||||||
955CBA4C0B2366DD001CF4A1 /* VLKeyValueUndo.h */,
|
955CBA4C0B2366DD001CF4A1 /* VLKeyValueUndo.h */,
|
||||||
955CBA4D0B2366DD001CF4A1 /* VLKeyValueUndo.mm */,
|
955CBA4D0B2366DD001CF4A1 /* VLKeyValueUndo.mm */,
|
||||||
|
954DD4B70B444B220056C504 /* VLSheetViewSelection.h */,
|
||||||
|
954DD4E50B44E67F0056C504 /* VLSheetViewSelection.mm */,
|
||||||
);
|
);
|
||||||
name = Classes;
|
name = Classes;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -379,6 +386,8 @@
|
||||||
2A37F4B8FDCFA73011CA2CEA /* Resources */ = {
|
2A37F4B8FDCFA73011CA2CEA /* Resources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
954DD4DF0B44E61E0056C504 /* VLDocument.nib */,
|
||||||
|
954DD4DA0B44E6000056C504 /* MainMenu.nib */,
|
||||||
95FC66BC0AF0A4D4003D9C11 /* console.icns */,
|
95FC66BC0AF0A4D4003D9C11 /* console.icns */,
|
||||||
95FC66BD0AF0A4D4003D9C11 /* music.tiff */,
|
95FC66BD0AF0A4D4003D9C11 /* music.tiff */,
|
||||||
95FC66BE0AF0A4D4003D9C11 /* nextpage.tiff */,
|
95FC66BE0AF0A4D4003D9C11 /* nextpage.tiff */,
|
||||||
|
@ -394,8 +403,6 @@
|
||||||
95F5F51E0ADCCFBB003980B2 /* DTD */,
|
95F5F51E0ADCCFBB003980B2 /* DTD */,
|
||||||
95B3E1980960E58B000E9C0D /* Music */,
|
95B3E1980960E58B000E9C0D /* Music */,
|
||||||
2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */,
|
2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */,
|
||||||
2A37F4B6FDCFA73011CA2CEA /* MainMenu.nib */,
|
|
||||||
2A37F4B4FDCFA73011CA2CEA /* VLDocument.nib */,
|
|
||||||
8D15AC360486D014006FF6A4 /* Info.plist */,
|
8D15AC360486D014006FF6A4 /* Info.plist */,
|
||||||
089C165FFE840EACC02AAC07 /* InfoPlist.strings */,
|
089C165FFE840EACC02AAC07 /* InfoPlist.strings */,
|
||||||
);
|
);
|
||||||
|
@ -575,8 +582,6 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */,
|
8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */,
|
||||||
8D15AC2D0486D014006FF6A4 /* MainMenu.nib in Resources */,
|
|
||||||
8D15AC2E0486D014006FF6A4 /* VLDocument.nib in Resources */,
|
|
||||||
8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */,
|
8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */,
|
||||||
95B3E1A70960E58B000E9C0D /* Music in Resources */,
|
95B3E1A70960E58B000E9C0D /* Music in Resources */,
|
||||||
95F5F5340ADCCFBB003980B2 /* DTD in Resources */,
|
95F5F5340ADCCFBB003980B2 /* DTD in Resources */,
|
||||||
|
@ -592,6 +597,8 @@
|
||||||
95FC66C70AF0A4D5003D9C11 /* run.icns in Resources */,
|
95FC66C70AF0A4D5003D9C11 /* run.icns in Resources */,
|
||||||
95FC66C80AF0A4D5003D9C11 /* zoomin.tiff in Resources */,
|
95FC66C80AF0A4D5003D9C11 /* zoomin.tiff in Resources */,
|
||||||
95FC66C90AF0A4D5003D9C11 /* zoomout.tiff in Resources */,
|
95FC66C90AF0A4D5003D9C11 /* zoomout.tiff in Resources */,
|
||||||
|
959420EB0B44E769006BC62C /* MainMenu.nib in Resources */,
|
||||||
|
959420EC0B44E77A006BC62C /* VLDocument.nib in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -642,6 +649,7 @@
|
||||||
95009B500B0ED0BB00EB33A4 /* CADebugMacros.cpp in Sources */,
|
95009B500B0ED0BB00EB33A4 /* CADebugMacros.cpp in Sources */,
|
||||||
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 */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -700,22 +708,6 @@
|
||||||
name = InfoPlist.strings;
|
name = InfoPlist.strings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
2A37F4B4FDCFA73011CA2CEA /* VLDocument.nib */ = {
|
|
||||||
isa = PBXVariantGroup;
|
|
||||||
children = (
|
|
||||||
2A37F4B5FDCFA73011CA2CEA /* English */,
|
|
||||||
);
|
|
||||||
name = VLDocument.nib;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
2A37F4B6FDCFA73011CA2CEA /* MainMenu.nib */ = {
|
|
||||||
isa = PBXVariantGroup;
|
|
||||||
children = (
|
|
||||||
2A37F4B7FDCFA73011CA2CEA /* English */,
|
|
||||||
);
|
|
||||||
name = MainMenu.nib;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */ = {
|
2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
|
|
Loading…
Reference in New Issue
Block a user