From 94aac38af45c3c95cb86b176393a469279c2539e Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Thu, 3 Jun 2021 23:04:37 -0400 Subject: [PATCH] add bookmark menu --- Ample/AppDelegate.m | 5 ++ Ample/Base.lproj/LaunchWindow.xib | 74 ++++++++++++++++++++++++ Ample/Base.lproj/MainMenu.xib | 21 +++++++ Ample/LaunchWindowController.m | 95 ++++++++++++++++++++++++++++++- 4 files changed, 194 insertions(+), 1 deletion(-) diff --git a/Ample/AppDelegate.m b/Ample/AppDelegate.m index 518f876..fab1b8a 100644 --- a/Ample/AppDelegate.m +++ b/Ample/AppDelegate.m @@ -13,6 +13,7 @@ #import "DiskImagesWindowController.h" #import "CheatSheetWindowController.h" #import "Transformers.h" +#import "BookmarkManager.h" #import "LogWindowController.h" @@ -40,6 +41,10 @@ RegisterTransformers(); + BookmarkManager *bm = [BookmarkManager sharedManager]; + [bm loadBookmarks]; + [bm updateMenu]; + path = [bundle pathForResource: @"Defaults" ofType: @"plist"]; dict = [NSDictionary dictionaryWithContentsOfFile: path]; diff --git a/Ample/Base.lproj/LaunchWindow.xib b/Ample/Base.lproj/LaunchWindow.xib index 547f03e..4f337c4 100644 --- a/Ample/Base.lproj/LaunchWindow.xib +++ b/Ample/Base.lproj/LaunchWindow.xib @@ -8,6 +8,8 @@ + + @@ -487,6 +489,78 @@ DQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bookmark name + + + + + + + + diff --git a/Ample/Base.lproj/MainMenu.xib b/Ample/Base.lproj/MainMenu.xib index 43d1ed4..2141885 100644 --- a/Ample/Base.lproj/MainMenu.xib +++ b/Ample/Base.lproj/MainMenu.xib @@ -19,6 +19,11 @@ + + + + + @@ -389,6 +394,22 @@ + + + + + + + + + + + + + + + + diff --git a/Ample/LaunchWindowController.m b/Ample/LaunchWindowController.m index e170174..b67ee77 100644 --- a/Ample/LaunchWindowController.m +++ b/Ample/LaunchWindowController.m @@ -15,6 +15,7 @@ #import "AutocompleteControl.h" #import "SoftwareList.h" +#import "BookmarkManager.h" #include #include @@ -64,6 +65,12 @@ static NSString *kContextMachine = @"kContextMachine"; @property (weak) IBOutlet AutocompleteControl *softwareListControl; @property SoftwareSet *softwareSet; @property Software *software; + + + +@property (strong) IBOutlet NSWindow *addBookmarkWindow; +@property (strong) NSString *bookmarkName; +@property (weak) IBOutlet NSTextField *bookmarkTextField; @end @interface LaunchWindowController (SoftwareList) @@ -72,6 +79,13 @@ static NSString *kContextMachine = @"kContextMachine"; @end + +@interface LaunchWindowController (Bookmark) + +-(IBAction)addBookmark:(id)sender; + +@end + static NSString *BackendStrings[] = { @"", @"metal", @@ -456,7 +470,12 @@ static NSString *ShellQuote(NSString *s) { if (cmd == @selector(exportShellScript:)) { return [_args count] ? YES : NO; } - return [super validateMenuItem: menuItem]; + if (cmd == @selector(addBookmark:)) { + return _mameMachine ? YES : NO; + } + + return YES; + //return [super validateMenuItem: menuItem]; // not implemented? } # pragma mark - IBActions @@ -548,6 +567,80 @@ static NSString *ShellQuote(NSString *s) { @implementation LaunchWindowController (Bookmark) +-(IBAction)addBookmark:(id)sender { + + if (!_mameMachine) return; + + NSString *name = _mameMachine; + if (_software) { + name = [name stringByAppendingFormat: @" - %@", [_software title]]; + } + [self setBookmarkName: name]; + [_bookmarkTextField selectText: nil]; + [[self window] beginSheet: _addBookmarkWindow completionHandler: nil]; +} + +-(IBAction)bookmarkCancel:(id)sender { + [[self window] endSheet: _addBookmarkWindow]; + [_addBookmarkWindow orderOut: nil]; +} + +-(IBAction)bookmarkSave:(id)sender { + + + BookmarkManager *bm = [BookmarkManager sharedManager]; + + if (![bm validateName: _bookmarkName]) { + [_bookmarkTextField selectText: nil]; + NSBeep(); + return; + } + + + //NSLog(@"%@", _bookmarkName); + NSDictionary *d = [self makeBookmark]; + //NSLog(@"%@", d); + + [bm saveBookmark: d name: _bookmarkName]; + + [[self window] endSheet: _addBookmarkWindow]; + [_addBookmarkWindow orderOut: nil]; + [self setBookmarkName: nil]; +} + + +-(IBAction)loadBookmark:(id)sender { + NSURL *url = [sender representedObject]; + if (!url) return; + + NSDictionary *d = [NSDictionary dictionaryWithContentsOfURL: url]; + if (!d) return; // oops... + + NSString *machine = [d objectForKey: @"machine"]; + if (!machine) return; + +#if 0 + _bookmark = YES; + [_machineViewController willLoadBookmark]; + [_slotController willLoadBookmark]; + [_mediaController willLoadBookmark]; + + + [self setMameMachine: machine]; + + [_machineViewController loadBookmark: d]; + [_slotController loadBookmark: d]; + [_mediaController loadBookmark: d]; + + _bookmark = NO; + [_machineViewController didLoadBookmark]; + [_slotController didLoadBookmark]; + [_mediaController didLoadBookmark]; + +#endif + [self buildCommandLine]; +} + -(NSDictionary *)makeBookmark { [[self window] makeFirstResponder: nil];