From f628d99e4a70d65ea8703f3c182103cd3bfea969 Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Fri, 4 Jun 2021 00:21:08 -0400 Subject: [PATCH] load bookmark... --- Ample/Ample.h | 3 +++ Ample/LaunchWindowController.m | 35 ++++++++++++++++++++-------------- Ample/MachineViewController.m | 33 +++++++++++++++++++++++++------- Ample/MediaViewController.m | 9 +++++++++ Ample/SlotViewController.m | 21 ++++++++++++++++---- 5 files changed, 76 insertions(+), 25 deletions(-) diff --git a/Ample/Ample.h b/Ample/Ample.h index 883f382..5dd804a 100644 --- a/Ample/Ample.h +++ b/Ample/Ample.h @@ -44,6 +44,9 @@ extern NSString *kDefaultDownloadExtension; @protocol Bookmark -(BOOL)loadBookmark: (NSDictionary *)bookmark; -(BOOL)saveBookmark: (NSMutableDictionary *)bookmark; + +-(void)willLoadBookmark: (NSDictionary *)bookmark; +-(void)didLoadBookmark: (NSDictionary *)bookmark; @end #endif /* Ample_h */ diff --git a/Ample/LaunchWindowController.m b/Ample/LaunchWindowController.m index b67ee77..d058683 100644 --- a/Ample/LaunchWindowController.m +++ b/Ample/LaunchWindowController.m @@ -24,7 +24,9 @@ static NSString *kMyContext = @"kMyContext"; static NSString *kContextMachine = @"kContextMachine"; -@interface LaunchWindowController () +@interface LaunchWindowController () { + BOOL _loadingBookmark; +} @property (strong) IBOutlet MediaViewController *mediaController; @property (strong) IBOutlet SlotViewController *slotController; @property (strong) IBOutlet MachineViewController *machineViewController; @@ -128,7 +130,8 @@ static NSString *EffectsStrings[] = { NSArray *keys = @[ - @"mameMachine", @"mameSquarePixels", @"mameWindowMode", + //@"mameMachine", // - handled + @"mameSquarePixels", @"mameWindowMode", @"mameMouse", @"mameSamples", @"mameDebug", @"mameSpeed", @@ -163,8 +166,11 @@ static NSString *EffectsStrings[] = { -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (context == (__bridge void *)kMyContext) { + if (_loadingBookmark) return; [self buildCommandLine]; } else if (context == (__bridge void *)kContextMachine) { + if (_loadingBookmark) return; + NSString *machine = [_machineViewController machine]; [self setMameMachine: machine]; [_slotController setMachine: machine]; @@ -619,25 +625,26 @@ static NSString *ShellQuote(NSString *s) { NSString *machine = [d objectForKey: @"machine"]; if (!machine) return; -#if 0 - _bookmark = YES; - [_machineViewController willLoadBookmark]; - [_slotController willLoadBookmark]; - [_mediaController willLoadBookmark]; + _loadingBookmark = YES; + [_machineViewController willLoadBookmark: d]; + [_slotController willLoadBookmark: d]; + [_mediaController willLoadBookmark: d]; [self setMameMachine: machine]; - + [self updateSoftwareList]; + [_softwareListControl setStringValue: [d objectForKey: @"software"]]; + [_machineViewController loadBookmark: d]; [_slotController loadBookmark: d]; [_mediaController loadBookmark: d]; - _bookmark = NO; - [_machineViewController didLoadBookmark]; - [_slotController didLoadBookmark]; - [_mediaController didLoadBookmark]; - -#endif + [_machineViewController didLoadBookmark: d]; + [_slotController didLoadBookmark: d]; + [_mediaController didLoadBookmark: d]; + + _loadingBookmark = NO; + [self buildCommandLine]; } diff --git a/Ample/MachineViewController.m b/Ample/MachineViewController.m index 1b96638..035d1ba 100644 --- a/Ample/MachineViewController.m +++ b/Ample/MachineViewController.m @@ -123,25 +123,38 @@ NSUInteger ix[2] = {0, 0 }; for (NSDictionary *d in _data) { - NSString *value = [d objectForKey: @"value"]; NSArray *children = [d objectForKey: @"children"]; - if ([machine isEqualToString: value]) { - path = [NSIndexPath indexPathWithIndexes: ix length: 1]; - [browser setSelectionIndexPath: path]; - return YES; - } for (NSDictionary *dd in children) { NSString *value = [dd objectForKey: @"value"]; if ([machine isEqualToString: value]) { path = [NSIndexPath indexPathWithIndexes: ix length: 2]; - [browser setSelectionIndexPath: path]; + [browser selectRow: ix[0] inColumn: 0]; + [browser selectRow: ix[1] inColumn: 1]; + + //[browser setSelectionIndexPath: path]; return YES; } ++ix[1]; } ix[1] = 0; + + + // check parent after. + NSString *value = [d objectForKey: @"value"]; + if ([machine isEqualToString: value]) { + path = [NSIndexPath indexPathWithIndexes: ix length: 1]; + [browser selectRow: ix[0] inColumn: 0]; + // "setSelectionIndexPath: is not supported for browsers with matrix delegates." + //[browser setSelectionIndexPath: path]; + return YES; + } + + + + + ++ix[0]; } @@ -154,4 +167,10 @@ return YES; } +-(void)willLoadBookmark:(NSDictionary *)bookmark { +} + +-(void)didLoadBookmark:(NSDictionary *)bookmark { +} + @end diff --git a/Ample/MediaViewController.m b/Ample/MediaViewController.m index 60e309e..2ef7663 100644 --- a/Ample/MediaViewController.m +++ b/Ample/MediaViewController.m @@ -262,6 +262,8 @@ MediaCategory *_data[CATEGORY_COUNT]; NSArray *_root; Media _media; + + BOOL _loadingBookmark; } @end @@ -744,4 +746,11 @@ static NSString *kDragType = @"private.ample.media"; return YES; } +-(void)willLoadBookmark:(NSDictionary *)bookmark { + _loadingBookmark = YES; +} +-(void)didLoadBookmark:(NSDictionary *)bookmark { + _loadingBookmark = NO; +} + @end diff --git a/Ample/SlotViewController.m b/Ample/SlotViewController.m index 2689643..50426b6 100644 --- a/Ample/SlotViewController.m +++ b/Ample/SlotViewController.m @@ -49,6 +49,7 @@ static unsigned RootKey = 0; IBOutlet NSPopover *_popover; + BOOL _loadingBookmark; } - (void)viewDidLoad { @@ -142,8 +143,10 @@ static unsigned RootKey = 0; [_outlineView reloadData]; - [self rebuildMedia]; - [self rebuildArgs]; + if (!_loadingBookmark) { + [self rebuildMedia]; + [self rebuildArgs]; + } } -(void)setMachine: (NSString *)machine { @@ -281,8 +284,10 @@ static unsigned RootKey = 0; #ifdef SLOT_TREE [_outlineView reloadData]; #endif - [self rebuildMedia]; - [self rebuildArgs]; + if (!_loadingBookmark) { + [self rebuildMedia]; + [self rebuildArgs]; + } } @end @@ -383,4 +388,12 @@ static unsigned RootKey = 0; return YES; } + +-(void)willLoadBookmark:(NSDictionary *)bookmark { + _loadingBookmark = YES; +} +-(void)didLoadBookmark:(NSDictionary *)bookmark { + _loadingBookmark = NO; +} + @end