load bookmark...

This commit is contained in:
Kelvin Sherlock 2021-06-04 00:21:08 -04:00
parent 0b248e6aad
commit f628d99e4a
5 changed files with 76 additions and 25 deletions

View File

@ -44,6 +44,9 @@ extern NSString *kDefaultDownloadExtension;
@protocol Bookmark <NSObject>
-(BOOL)loadBookmark: (NSDictionary *)bookmark;
-(BOOL)saveBookmark: (NSMutableDictionary *)bookmark;
-(void)willLoadBookmark: (NSDictionary *)bookmark;
-(void)didLoadBookmark: (NSDictionary *)bookmark;
@end
#endif /* Ample_h */

View File

@ -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<NSKeyValueChangeKey,id> *)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];
}

View File

@ -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

View File

@ -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

View File

@ -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