mirror of
https://github.com/microtherion/VocalEasel.git
synced 2024-12-22 03:04:00 +00:00
Store and load print properties
This commit is contained in:
parent
07f118ada0
commit
93a34a71f2
|
@ -9,7 +9,7 @@
|
|||
}
|
||||
|
||||
\paper {
|
||||
#(set-paper-size "<{PAPERSIZE}>")
|
||||
#(set-paper-size <{PAPERSIZE}>)
|
||||
indent = 0.0\cm
|
||||
pagenumber = no
|
||||
page-top-space = #.1
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
#import "VLLilypondDocument.h"
|
||||
#import "VLLilypondWriter.h"
|
||||
|
||||
#import <algorithm>
|
||||
|
||||
@interface NSMutableString (VLLilypond)
|
||||
|
||||
- (void) substituteMacro:(NSString *)macro withValue:(NSString *)value;
|
||||
|
@ -103,6 +105,14 @@
|
|||
|
||||
@end
|
||||
|
||||
static NSSize sPaperSizes[] = {
|
||||
{842.0f, 1191.0f}, {595.0f, 842.0f}, {421.0f, 595.0f}, {298.0f, 421.0f},
|
||||
{612.0f, 1008.0f}, {612.0f, 792.0f}, {792.0f, 1224.0f}
|
||||
};
|
||||
static const char * sPaperNames[] = {
|
||||
"a3", "a4", "a5", "a6", "letter", "legal", "11x17", 0
|
||||
};
|
||||
|
||||
@implementation VLDocument (Lilypond)
|
||||
|
||||
- (NSData *)lilypondDataWithError:(NSError **)outError
|
||||
|
@ -116,13 +126,36 @@
|
|||
NSStringEncoding enc = NSUTF8StringEncoding;
|
||||
NSMutableString * ly =
|
||||
[NSMutableString stringWithContentsOfFile:tmpl encoding:enc error:outError];
|
||||
NSPrintInfo * pi = [self printInfo];
|
||||
NSSize sz = [pi paperSize];
|
||||
int bestPaper = -1;
|
||||
float bestDist = 1e10f;
|
||||
|
||||
if ([pi orientation] == NSLandscapeOrientation)
|
||||
std::swap(sz.width, sz.height);
|
||||
|
||||
for (int paper = 0; sPaperNames[paper]; ++paper) {
|
||||
float dist = hypotf(sz.width - sPaperSizes[paper].width,
|
||||
sz.height- sPaperSizes[paper].height);
|
||||
if (dist < bestDist) {
|
||||
bestPaper = paper;
|
||||
bestDist = dist;
|
||||
}
|
||||
}
|
||||
|
||||
NSString * paper = [NSString stringWithFormat:
|
||||
[pi orientation] == NSLandscapeOrientation ? @"\"%s\" 'landscape" : @"\"%s\"",
|
||||
sPaperNames[bestPaper]];
|
||||
float scaling= [[[pi dictionary] objectForKey:NSPrintScalingFactor]
|
||||
floatValue];
|
||||
|
||||
[ly substituteMacro:@"TITLE" withValue:songTitle];
|
||||
[ly substituteMacro:@"POET" withValue:songLyricist];
|
||||
[ly substituteMacro:@"COMPOSER" withValue:songComposer];
|
||||
[ly substituteMacro:@"ARRANGER" withValue:songArranger];
|
||||
[ly substituteMacro:@"VLVERSION" withValue:
|
||||
[bndl objectForInfoDictionaryKey:@"CFBundleVersion"]];
|
||||
[ly substituteMacro:@"PAPERSIZE" withValue:@"letter"];
|
||||
[ly substituteMacro:@"PAPERSIZE" withValue:paper];
|
||||
[ly substituteMacro:@"FORMATTING" withValue:@"ragged-last-bottom = ##f"];
|
||||
[ly substituteMacro:@"VLVERSION" withValue:
|
||||
[bndl objectForInfoDictionaryKey:@"CFBundleVersion"]];
|
||||
|
@ -131,7 +164,7 @@
|
|||
[ly substituteMacro:@"LYRICSIZE" withValue:
|
||||
[NSString stringWithFormat:@"%.1f", lyricSize]];
|
||||
[ly substituteMacro:@"STAFFSIZE" withValue:
|
||||
[NSString stringWithFormat:@"%.1f", staffSize]];
|
||||
[NSString stringWithFormat:@"%.1f", staffSize*scaling]];
|
||||
[ly substituteMacro:@"CHORDS" withValue:
|
||||
[NSString stringWithUTF8String:writer.Chords().c_str()]];
|
||||
[ly substituteMacro:@"NOTES" withValue:
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
|
||||
- (NSFileWrapper *)XMLFileWrapperWithError:(NSError **)outError flat:(BOOL)flat;
|
||||
{
|
||||
static NSArray * sPropertyKeys = nil;
|
||||
|
||||
NSFileWrapper * contents = [self fileWrapperWithFilter:@"VLMusicXMLType" error:outError];
|
||||
|
||||
if (!contents) {
|
||||
|
@ -30,6 +32,17 @@
|
|||
[wrap addFileWrapper:contents];
|
||||
if (vcsWrapper)
|
||||
[wrap addFileWrapper:vcsWrapper];
|
||||
NSData * pd = [NSArchiver archivedDataWithRootObject:
|
||||
[self printInfo]];
|
||||
[wrap addRegularFileWithContents:pd preferredFilename:@"PrintInfo"];
|
||||
if (!sPropertyKeys)
|
||||
sPropertyKeys = [[NSArray alloc] initWithObjects:
|
||||
@"staffSize", @"chordSize", @"lyricSize", nil];
|
||||
NSData * prop = [NSPropertyListSerialization dataFromPropertyList:
|
||||
[self dictionaryWithValuesForKeys:sPropertyKeys]
|
||||
format:NSPropertyListXMLFormat_v1_0
|
||||
errorDescription:nil];
|
||||
[wrap addRegularFileWithContents:prop preferredFilename:@"Properties"];
|
||||
|
||||
return wrap;
|
||||
}
|
||||
|
@ -44,7 +57,7 @@
|
|||
)
|
||||
[vcsWrapper retain];
|
||||
//
|
||||
// Read properties dictionary for backward compatibility
|
||||
// Read properties dictionary
|
||||
//
|
||||
NSFileWrapper * prop = [wrappers objectForKey:@"Properties"];
|
||||
if (prop) {
|
||||
|
@ -57,6 +70,17 @@
|
|||
format:nil errorDescription:nil]];
|
||||
[undoMgr enableUndoRegistration];
|
||||
}
|
||||
//
|
||||
// Read print info
|
||||
NSFileWrapper * print = [wrappers objectForKey:@"PrintInfo"];
|
||||
if (print) {
|
||||
NSUndoManager * undoMgr = [self undoManager];
|
||||
[undoMgr disableUndoRegistration];
|
||||
NSPrintInfo * pi = [NSUnarchiver unarchiveObjectWithData:
|
||||
[print regularFileContents]];
|
||||
[self setPrintInfo:pi];
|
||||
[undoMgr enableUndoRegistration];
|
||||
}
|
||||
return [self readFromFileWrapper:[wrappers objectForKey:@"Song"] withFilter:@"VLMusicXMLType"
|
||||
error:outError];
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue
Block a user