mirror of
https://github.com/microtherion/VocalEasel.git
synced 2024-12-22 03:04:00 +00:00
Handle lilypond path
This commit is contained in:
parent
32ef9e2386
commit
90f7099af9
3
English.lproj/MainMenu.nib/classes.nib
generated
3
English.lproj/MainMenu.nib/classes.nib
generated
|
@ -2,9 +2,10 @@
|
|||
IBClasses = (
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
|
||||
{
|
||||
ACTIONS = {playNewPitch = id; };
|
||||
ACTIONS = {playNewPitch = id; selectLilypondPath = id; };
|
||||
CLASS = VLAppController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {lilypondPath = id; };
|
||||
SUPERCLASS = NSObject;
|
||||
}
|
||||
);
|
||||
|
|
2
English.lproj/MainMenu.nib/info.nib
generated
2
English.lproj/MainMenu.nib/info.nib
generated
|
@ -13,8 +13,8 @@
|
|||
<string>452.0</string>
|
||||
<key>IBOpenObjects</key>
|
||||
<array>
|
||||
<integer>217</integer>
|
||||
<integer>29</integer>
|
||||
<integer>217</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>9A283</string>
|
||||
|
|
BIN
English.lproj/MainMenu.nib/keyedobjects.nib
generated
BIN
English.lproj/MainMenu.nib/keyedobjects.nib
generated
Binary file not shown.
|
@ -4,6 +4,8 @@
|
|||
<dict>
|
||||
<key>VLHighPitch</key>
|
||||
<integer>75</integer>
|
||||
<key>VLLilypondPath</key>
|
||||
<string>/sw/bin/lilypond</string>
|
||||
<key>VLLowPitch</key>
|
||||
<integer>57</integer>
|
||||
</dict>
|
||||
|
|
|
@ -9,9 +9,17 @@
|
|||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface VLAppController : NSObject {
|
||||
IBOutlet id lilypondPath;
|
||||
|
||||
NSString * toolPath;
|
||||
NSString * appPath;
|
||||
}
|
||||
|
||||
- (IBAction) playNewPitch:(id)sender;
|
||||
|
||||
- (IBAction) selectLilypondPath:(id)sender;
|
||||
|
||||
@end
|
||||
|
||||
// Local Variables:
|
||||
// mode:ObjC
|
||||
// End:
|
||||
|
|
|
@ -53,6 +53,110 @@
|
|||
[self setupTransformers];
|
||||
}
|
||||
|
||||
- (id)init
|
||||
{
|
||||
if (self = [super init]) {
|
||||
toolPath = nil;
|
||||
appPath = nil;
|
||||
}
|
||||
}
|
||||
|
||||
- (NSString*)getLineFromCommand:(NSString*)command
|
||||
{
|
||||
char line[1000];
|
||||
FILE * output = popen([command UTF8String], "r");
|
||||
if (fgets(line, 1000, output)) {
|
||||
fprintf(stderr, "Line %s", line);
|
||||
size_t len = strlen(line);
|
||||
if (len && line[len-1]=='\n') {
|
||||
line[len-1] = 0;
|
||||
return [NSString stringWithUTF8String:line];
|
||||
}
|
||||
} else
|
||||
NSLog(@"Failed command: %@ (%d)\n", command, errno);
|
||||
pclose(output);
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSString *)lilypondVersion:(NSString *)path
|
||||
{
|
||||
NSString * cmd =
|
||||
[NSString stringWithFormat:
|
||||
@"%@ --version | awk '{ print $3 }'",
|
||||
path];
|
||||
return [self getLineFromCommand:cmd];
|
||||
}
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
[lilypondPath setAutoenablesItems:NO];
|
||||
|
||||
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSFileManager * fileManager = [NSFileManager defaultManager];
|
||||
NSString * lilyPath = [defaults stringForKey:@"VLLilypondPath"];
|
||||
NSRange app = [lilyPath rangeOfString:@".app"];
|
||||
bool wantTool = app.location == NSNotFound;
|
||||
|
||||
if ([fileManager isExecutableFileAtPath:lilyPath]) {
|
||||
//
|
||||
// Path still valid, figure out what it is
|
||||
//
|
||||
if (wantTool)
|
||||
toolPath = lilyPath;
|
||||
else
|
||||
appPath = lilyPath;
|
||||
}
|
||||
if (!appPath)
|
||||
appPath =
|
||||
[[[NSWorkspace sharedWorkspace]
|
||||
absolutePathForAppBundleWithIdentifier:@"org.lilypond.lilypond"]
|
||||
stringByAppendingPathComponent:@"Contents/Resources/bin/lilypond"];
|
||||
if (!toolPath)
|
||||
toolPath = [self getLineFromCommand:@"bash -l which lilypond"];
|
||||
|
||||
NSString * appVersion = nil;
|
||||
NSString * toolVersion = nil;
|
||||
|
||||
if (appPath) {
|
||||
appVersion = [self lilypondVersion:appPath];
|
||||
if (!appVersion)
|
||||
appPath = nil;
|
||||
}
|
||||
if (toolPath) {
|
||||
toolVersion = [self lilypondVersion:toolPath];
|
||||
if (!toolVersion)
|
||||
toolPath = nil;
|
||||
}
|
||||
|
||||
NSMenuItem * toolItem = [lilypondPath itemAtIndex:0];
|
||||
NSMenuItem * appItem = [lilypondPath itemAtIndex:1];
|
||||
|
||||
if (toolPath) {
|
||||
[toolItem setTitle:
|
||||
[NSString stringWithFormat:@"%@ (%@)", toolPath, toolVersion]];
|
||||
} else {
|
||||
[toolItem setTitle:@"lilypond tool not installed"];
|
||||
[toolItem setEnabled:NO];
|
||||
}
|
||||
if (appPath) {
|
||||
NSRange r = [appPath rangeOfString:@"/Contents/Resources"];
|
||||
[appItem setTitle:
|
||||
[NSString stringWithFormat:@"%@ (%@)",
|
||||
[appPath substringToIndex:r.location], appVersion]];
|
||||
} else {
|
||||
[appItem setTitle:@"Lilypond.app not installed"];
|
||||
[appItem setEnabled:NO];
|
||||
}
|
||||
if (!toolPath && appPath) {
|
||||
wantTool = false;
|
||||
[defaults setObject:appPath forKey:@"VLLilypondPath"];
|
||||
} else if (toolPath && !appPath) {
|
||||
wantTool = true;
|
||||
[defaults setObject:toolPath forKey:@"VLLilypondPath"];
|
||||
}
|
||||
[lilypondPath selectItemWithTag:wantTool ? 0 : 1];
|
||||
}
|
||||
|
||||
- (IBAction) playNewPitch:(id)sender
|
||||
{
|
||||
VLNote note(VLFraction(1,4), [sender intValue]);
|
||||
|
@ -60,4 +164,20 @@
|
|||
VLSoundOut::Instance()->PlayNote(note);
|
||||
}
|
||||
|
||||
- (IBAction) selectLilypondPath:(id)sender
|
||||
{
|
||||
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
switch ([sender tag]) {
|
||||
case 0:
|
||||
[defaults setObject:toolPath forKey:@"VLLilypondPath"];
|
||||
break;
|
||||
case 1:
|
||||
[defaults setObject:toolPath forKey:@"VLLilypondPath"];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
Loading…
Reference in New Issue
Block a user