mirror of
https://github.com/ksherlock/ample.git
synced 2024-10-31 15:04:56 +00:00
3d5a2951bb
commit 78c81626670fdf41fa6bdd71a4243a89a0746615 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Mon Jun 7 00:33:48 2021 -0400 check if software set has a particular entry. commit ef5ab6b6948dc3bbbe2947ea099fcacd08435e86 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 22:20:34 2021 -0400 fix scroller background on recent disk images window. commit dee56fa50e87299b396b48361bd0a780aaaaa768 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 21:26:23 2021 -0400 update cheat sheet javascript to work with 10.11 * => functions not supported * NodeList.prototype.forEach not supported. commit b00cc05413f4ebd6d6d58f96e24303008608f3a6 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 17:10:41 2021 -0400 default full machine name for bookmark entry. commit a671cafdc98051b56b12cdd3ccd13c22f54f605a Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 15:39:32 2021 -0400 loading a bookmark wasn't updating the media. commit 3000e0eb1b10bede3345aaab8478e9ec209f328c Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 15:38:53 2021 -0400 bump copyright year. commit 45222dacd4aa0047fae63a9112509de57139df63 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 13:38:23 2021 -0400 add reset w/ value for setting the item explicitely. commit cc7fde1253b71c4d8655eb4c010bbf4e61333a15 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 13:37:48 2021 -0400 add checkboxes for bitbanger/share directory. The general idea is it's easier to toggle a checkbox than to type/retype a path. commit 5674b2d7f6b0e2f0b973197bf3493ad61bf46428 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sat Jun 5 19:11:43 2021 -0400 commentary on searches with diacritics. commit ec60634dcd9c573130dc34673b4d3fe597ea2b42 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sat Jun 5 19:11:22 2021 -0400 clean up auto-complete a little bit when setting a value directly. commit 1a182bbdab237c89d355d8294b5a4a64b785783a Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sat Jun 5 13:08:29 2021 -0400 fix text color when value is set. There are still some bugs relating to multiple copies of the value being stored. commit 49c0bc15c73446259d8cc151cf52d6058644db76 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sat Jun 5 12:09:44 2021 -0400 reset all controls first. commit 059797ad85b057e296cc707b4645f839bfccac13 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sat Jun 5 10:52:06 2021 -0400 more bookmark loading. commit e5a612d9f8e7414dd15c66dbaa540b637765eeec Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Fri Jun 4 23:52:38 2021 -0400 bookmark - restore the software commit f9411a1e84df7bd46e352cc5ca995b585c2a0523 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Fri Jun 4 23:52:25 2021 -0400 clean up software / name logic. commitf628d99e4a
Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Fri Jun 4 00:21:08 2021 -0400 load bookmark... commit0b248e6aad
Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Fri Jun 4 00:20:42 2021 -0400 stringValue can't be nil. commit94aac38af4
Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Thu Jun 3 23:04:37 2021 -0400 add bookmark menu commit6215a0df12
Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Thu Jun 3 23:03:29 2021 -0400 slot view needs to know the machine. commitd348c15dc5
Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Thu Jun 3 23:02:58 2021 -0400 transformer to enable/disable control based on string length. commite14336a009
Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Thu Jun 3 23:02:14 2021 -0400 shut up compiler warning. commit4baf545245
Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Thu Jun 3 23:01:15 2021 -0400 bookmark manager commit0f3e6c8307
Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Mon May 31 23:54:29 2021 -0400 more (untested) bookmark code commit8fdb149eb3
Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Mon May 31 16:13:43 2021 -0400 start of bookmarking support. Untested. commit787eac87f6
Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Mon May 31 16:12:45 2021 -0400 shut up warnings about content clipping. maybe it's a 10.11 thing. The size was chosen by interface builder.
232 lines
6.0 KiB
Objective-C
232 lines
6.0 KiB
Objective-C
//
|
|
// AppDelegate.m
|
|
// Ample
|
|
//
|
|
// Created by Kelvin Sherlock on 8/16/2020.
|
|
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
|
//
|
|
#import "Ample.h"
|
|
#import "AppDelegate.h"
|
|
#import "LaunchWindowController.h"
|
|
#import "PreferencesWindowController.h"
|
|
#import "DownloadWindowController.h"
|
|
#import "DiskImagesWindowController.h"
|
|
#import "CheatSheetWindowController.h"
|
|
#import "Transformers.h"
|
|
#import "BookmarkManager.h"
|
|
|
|
#import "LogWindowController.h"
|
|
|
|
@interface AppDelegate ()
|
|
@property (weak) IBOutlet NSWindow *installWindow;
|
|
|
|
@end
|
|
|
|
@implementation AppDelegate {
|
|
NSWindowController *_prefs;
|
|
NSWindowController *_launcher;
|
|
NSWindowController *_downloader;
|
|
NSWindowController *_diskImages;
|
|
NSWindowController *_cheatSheet;
|
|
}
|
|
|
|
|
|
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
|
|
// Insert code here to initialize your application
|
|
|
|
NSBundle *bundle = [NSBundle mainBundle];
|
|
NSString *path;
|
|
NSDictionary *dict;
|
|
|
|
|
|
RegisterTransformers();
|
|
|
|
BookmarkManager *bm = [BookmarkManager sharedManager];
|
|
[bm loadBookmarks];
|
|
[bm updateMenu];
|
|
|
|
path = [bundle pathForResource: @"Defaults" ofType: @"plist"];
|
|
dict = [NSDictionary dictionaryWithContentsOfFile: path];
|
|
|
|
if (dict)
|
|
{
|
|
[[NSUserDefaults standardUserDefaults] registerDefaults: dict];
|
|
}
|
|
|
|
|
|
|
|
_diskImages = [DiskImagesWindowController sharedInstance]; //[DiskImagesWindowController new];
|
|
|
|
if ([self installMameComponents]) {
|
|
|
|
[self displayLaunchWindow];
|
|
}
|
|
|
|
}
|
|
|
|
-(void)displayLaunchWindow {
|
|
|
|
if (!_launcher) {
|
|
_launcher = [LaunchWindowController new];
|
|
}
|
|
[_launcher showWindow: nil];
|
|
}
|
|
|
|
-(BOOL)installMameComponents {
|
|
|
|
/* install the mame data components. */
|
|
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
|
NSBundle *bundle = [NSBundle mainBundle];
|
|
NSURL *sd = SupportDirectory();
|
|
|
|
NSURL *ample_url = [sd URLByAppendingPathComponent: @"Ample.plist"];
|
|
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithContentsOfURL: ample_url];
|
|
|
|
NSDate *oldDate = [d objectForKey: kMameComponentsDate];
|
|
NSDate *newDate = [defaults objectForKey: kMameComponentsDate];
|
|
if (![newDate isKindOfClass: [NSDate class]])
|
|
newDate = nil;
|
|
|
|
if (!newDate) return YES; //????
|
|
if (oldDate && [oldDate compare: newDate] >= 0) return YES;
|
|
|
|
NSString *path = [bundle pathForResource: @"mame-data" ofType: @"tgz"];
|
|
if (!path) return YES; // Ample Lite?
|
|
|
|
|
|
NSWindow *win = _installWindow;
|
|
[win makeKeyAndOrderFront: nil];
|
|
NSTask *task = [NSTask new];
|
|
NSArray *argv = @[
|
|
@"xfz",
|
|
path
|
|
];
|
|
if (@available(macOS 10.13, *)) {
|
|
[task setExecutableURL: [NSURL fileURLWithPath: @"/usr/bin/tar"]];
|
|
[task setCurrentDirectoryURL: sd];
|
|
} else {
|
|
[task setLaunchPath: @"/usr/bin/tar"];
|
|
[task setCurrentDirectoryPath: SupportDirectoryPath()];
|
|
}
|
|
[task setArguments: argv];
|
|
|
|
|
|
dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
|
|
[task setTerminationHandler: ^(NSTask *task){
|
|
|
|
dispatch_after(when, dispatch_get_main_queue(), ^{
|
|
|
|
int st = [task terminationStatus];
|
|
|
|
if (st) {
|
|
NSAlert *alert = [NSAlert new];
|
|
[alert setMessageText: @"An error occurred extracting MAME components"];
|
|
[alert runModal];
|
|
[win close];
|
|
return;
|
|
}
|
|
|
|
if (d) {
|
|
[d setObject: newDate forKey: kMameComponentsDate];
|
|
[d writeToURL: ample_url atomically: YES];
|
|
} else {
|
|
[@{ kMameComponentsDate: newDate } writeToURL: ample_url atomically: YES];
|
|
}
|
|
[win close];
|
|
[self displayLaunchWindow];
|
|
[self displayROMS: nil];
|
|
});
|
|
|
|
}];
|
|
[task launch];
|
|
|
|
return NO;
|
|
}
|
|
|
|
|
|
- (void)applicationWillTerminate:(NSNotification *)aNotification {
|
|
// Insert code here to tear down your application
|
|
}
|
|
|
|
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender {
|
|
return YES;
|
|
}
|
|
|
|
|
|
-(BOOL)application:(NSApplication *)sender openFile:(NSString *)filename {
|
|
|
|
NSString *ext = [[filename pathExtension] lowercaseString];
|
|
|
|
if ([ext isEqualToString: @"vgm"] || [ext isEqualToString: @"vgz"]) {
|
|
// run mame...
|
|
NSArray *args = @[ @"vgmplay", @"-window", @"-nomax", @"-skip_gameinfo", @"-quik", filename ];
|
|
|
|
[LogWindowController controllerForArgs: args];
|
|
}
|
|
return NO;
|
|
}
|
|
|
|
|
|
#pragma mark - IBActions
|
|
|
|
|
|
- (IBAction)displayPreferences:(id)sender {
|
|
if (!_prefs) {
|
|
_prefs = [PreferencesWindowController new];
|
|
}
|
|
[_prefs showWindow: sender];
|
|
}
|
|
|
|
|
|
- (IBAction)displayROMS:(id)sender {
|
|
if (!_downloader) {
|
|
_downloader = [DownloadWindowController sharedInstance];
|
|
}
|
|
[_downloader showWindow: sender];
|
|
}
|
|
|
|
- (IBAction)displayRecentDiskImages:(id)sender {
|
|
if (!_diskImages) {
|
|
_diskImages = [DiskImagesWindowController sharedInstance];
|
|
}
|
|
[_diskImages showWindow: sender];
|
|
}
|
|
|
|
- (IBAction)displayCheatSheet:(id)sender {
|
|
if (!_cheatSheet) {
|
|
_cheatSheet = [CheatSheetWindowController new];
|
|
}
|
|
[_cheatSheet showWindow: sender];
|
|
}
|
|
|
|
- (IBAction)displaySupportDirectory:(id)sender {
|
|
NSURL *url = SupportDirectory();
|
|
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
|
[ws openURL: url];
|
|
}
|
|
- (IBAction)mameDocumentation:(id)sender {
|
|
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
|
|
|
NSURL *url = [NSURL URLWithString: @"https://docs.mamedev.org"];
|
|
[ws openURL: url];
|
|
}
|
|
|
|
- (IBAction)mameAppleWiki:(id)sender {
|
|
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
|
|
|
NSURL *url = [NSURL URLWithString: @"https://wiki.mamedev.org/index.php/Driver:Apple_II"];
|
|
[ws openURL: url];
|
|
}
|
|
|
|
- (IBAction)mameMac68kWiki:(id)sender {
|
|
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
|
|
|
NSURL *url = [NSURL URLWithString: @"https://wiki.mamedev.org/index.php/Driver:Mac_68K"];
|
|
[ws openURL: url];
|
|
}
|
|
|
|
|
|
|
|
|
|
@end
|