shift-command-D will update the current bookmark.

This commit is contained in:
Kelvin Sherlock 2022-03-18 15:23:56 -04:00
parent 781d8ada60
commit 4e05ff7e8c
4 changed files with 71 additions and 37 deletions

View File

@ -16,6 +16,7 @@
<customObject id="rSq-qV-SGy" customClass="BookmarkManager">
<connections>
<outlet property="menu" destination="ha0-nx-PIl" id="Ozd-ID-egK"/>
<outlet property="updateMenuItem" destination="30b-vT-HIa" id="AgZ-LE-no6"/>
</connections>
</customObject>
<customObject id="Voe-Tx-rLC" customClass="AppDelegate">
@ -416,6 +417,11 @@
<action selector="addBookmark:" target="-1" id="cqp-ko-BfQ"/>
</connections>
</menuItem>
<menuItem title="Update Bookmark" keyEquivalent="D" id="30b-vT-HIa">
<connections>
<action selector="updateBookmark:" target="-1" id="Au0-Sp-cUD"/>
</connections>
</menuItem>
<menuItem title="Set Default" hidden="YES" id="vbR-vS-lqO">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>

View File

@ -10,6 +10,7 @@
#import <CoreData/CoreData.h>
@class NSMenu;
@class NSMenuItem;
@class Bookmark;
@class DiskImage;
@ -18,8 +19,11 @@ NS_ASSUME_NONNULL_BEGIN
@interface BookmarkManager : NSObject
@property (weak) IBOutlet NSMenu *menu;
@property (weak) IBOutlet NSMenuItem *updateMenuItem;
@property (readonly) NSManagedObjectContext *managedObjectContext;
@property (nullable) Bookmark *currentBookmark;
+(instancetype)sharedManager;
-(NSString *)uniqueBookmarkName: (NSString *)name;
@ -28,13 +32,13 @@ NS_ASSUME_NONNULL_BEGIN
//-(NSError *)saveDefault: (NSDictionary *)bookmark;
-(Bookmark *)defaultBookmark;
-(NSDictionary *)loadDefault;
-(NSError *)setAutomatic: (Bookmark *)bookmark;
-(BOOL)addDiskImage: (NSObject *)pathOrURL;
//-(void)convertLegacyBookmarks;
@end

View File

@ -28,6 +28,8 @@
NSArrayController *_items;
NSUInteger _newMenuGeneration;
NSUInteger _currentMenuGeneration;
Bookmark *_currentBookmark;
}
@end
@ -235,7 +237,8 @@ static BookmarkManager *singleton = nil;
}
-(NSDictionary *)loadDefault {
-(Bookmark *)defaultBookmark {
NSFetchRequest *req;
NSError *error;
NSArray *array;
@ -245,10 +248,12 @@ static BookmarkManager *singleton = nil;
[req setPredicate: [NSPredicate predicateWithFormat: @"automatic == TRUE"]];
array = [_moc executeFetchRequest: req error: &error];
b = [array firstObject];
return [b dictionary];
return [array firstObject];
}
-(NSDictionary *)loadDefault {
Bookmark *b = [self defaultBookmark];
return [b dictionary];
}
/* save as .Default */
@ -557,17 +562,37 @@ static NSString *kMenuContext = @"";
{
}
-(Bookmark *)currentBookmark {
return _currentBookmark;
}
-(void)setCurrentBookmark:(Bookmark *)currentBookmark {
if (currentBookmark == _currentBookmark) return;
_currentBookmark = currentBookmark;
_newMenuGeneration++;
}
-(void)menuNeedsUpdate:(NSMenu *)menu {
if (_currentMenuGeneration == _newMenuGeneration) return;
_currentMenuGeneration = _newMenuGeneration;
if (_currentBookmark && _updateMenuItem) {
NSString *title = [NSString stringWithFormat: @"Update “%@”", [_currentBookmark name]];
[_updateMenuItem setHidden: NO];
[_updateMenuItem setTitle: title];
[_updateMenuItem setRepresentedObject: _currentBookmark];
} else {
[_updateMenuItem setHidden: YES];
[_updateMenuItem setRepresentedObject: nil];
}
NSArray *menus = [menu itemArray];
for (NSMenuItem *item in [menus reverseObjectEnumerator]) {
if ([item tag] == 0xdeadbeef) [_menu removeItem: item];
}
NSArray *array = [_items arrangedObjects];
for (Bookmark *b in array) {

View File

@ -29,6 +29,7 @@ static NSString *kContextMachine = @"kContextMachine";
BOOL _loadingBookmark;
NSString *_machine;
NSDictionary *_machineDescription;
BookmarkManager *_manager;
}
@property (strong) IBOutlet MediaViewController *mediaController;
@property (strong) IBOutlet SlotViewController *slotController;
@ -189,6 +190,8 @@ static int EffectsIndex(NSString *str) {
-(void)windowWillLoad {
_manager = [BookmarkManager sharedManager];
// if this calls [self window], it will recurse. that is bad.
//[self defaultLoad: nil];
[self reset];
@ -731,6 +734,7 @@ static NSString *ShellQuote(NSString *s) {
-(IBAction)resetAll:(id)sender {
[_manager setCurrentBookmark: nil];
[self reset];
[self resetSoftware];
[_slotController resetSlots: sender];
@ -779,37 +783,40 @@ static NSString *ShellQuote(NSString *s) {
-(IBAction)defaultSave:(id)sender {
#if 0
BookmarkManager *bm = [BookmarkManager sharedManager];
#if 0
NSDictionary *d = [self makeBookmark];
[bm saveDefault: d];
[_manager saveDefault: d];
#endif
}
-(IBAction)defaultLoad:(id)sender {
BookmarkManager *bm = [BookmarkManager sharedManager];
Bookmark *b = [_manager defaultBookmark];
NSDictionary *d = [bm loadDefault];
if (!d) {
if (!b) {
[self resetAll: sender];
[self setMachine: nil];
[_machineViewController reset];
[_slotController setMachine: nil];
return;
}
[self loadBookmark: d];
[self loadBookmark: b];
}
-(IBAction)updateBookmark: (id)sender {
Bookmark *b = [sender representedObject];
if (!b) return;
NSDictionary *d = [self makeBookmark];
[b setDictionary: d];
}
-(IBAction)addBookmark:(id)sender {
if (!_machine) return;
BookmarkManager *bm = [BookmarkManager sharedManager];
NSString *name = nil;
if (_machineDescription) name = [_machineDescription objectForKey:@"description"];
if (!name) name = _machine;
@ -819,7 +826,7 @@ static NSString *ShellQuote(NSString *s) {
name = [name stringByAppendingFormat: @" - %@", [_software title]];
}
name = [bm uniqueBookmarkName: name];
name = [_manager uniqueBookmarkName: name];
[self setBookmarkName: name];
[self setBookmarkDefault: NO];
@ -836,10 +843,9 @@ static NSString *ShellQuote(NSString *s) {
-(IBAction)bookmarkSave:(id)sender {
BookmarkManager *bm = [BookmarkManager sharedManager];
#if 0
if (![bm validateName: _bookmarkName]) {
if (![_manager validateName: _bookmarkName]) {
[_bookmarkTextField selectText: nil];
NSBeep();
return;
@ -849,7 +855,7 @@ static NSString *ShellQuote(NSString *s) {
NSDictionary *d = [self makeBookmark];
NSError *e;
if (( e = [bm saveBookmark: d name: _bookmarkName automatic: _bookmarkDefault])) {
if (( e = [_manager saveBookmark: d name: _bookmarkName automatic: _bookmarkDefault])) {
// probably a duplicate name...
[_bookmarkTextField selectText: nil];
[_bookmarkErrorField setStringValue: [e localizedDescription]];
@ -866,31 +872,24 @@ static NSString *ShellQuote(NSString *s) {
-(void)bookmarkNotification: (NSNotification *)notification {
Bookmark *b = [notification object];
NSDictionary *d = [b dictionary];
[self loadBookmark: d];
[self loadBookmark: b];
}
-(IBAction)bookmarkMenu:(id)sender {
#if 0
NSURL *url = [sender representedObject];
if (!url) return;
NSDictionary *d = [NSDictionary dictionaryWithContentsOfURL: url];
if (!d) return; // oops...
#endif
// represented object is a Bookmark.
NSDictionary *d = [(Bookmark *)[sender representedObject] dictionary];
[self loadBookmark: d];
Bookmark *b = [sender representedObject];
[self loadBookmark: b];
}
-(void)loadBookmark: (NSDictionary *)d {
-(void)loadBookmark: (Bookmark *)b {
Class StringClass = [NSString class];
Class NumberClass = [NSNumber class];
NSDictionary *d = [b dictionary];
[_manager setCurrentBookmark: b];
NSString *machine = [d objectForKey: @"machine"];
if (!machine) return;