mirror of https://github.com/ksherlock/ample.git
shift-command-D will update the current bookmark.
This commit is contained in:
parent
781d8ada60
commit
4e05ff7e8c
|
@ -16,6 +16,7 @@
|
||||||
<customObject id="rSq-qV-SGy" customClass="BookmarkManager">
|
<customObject id="rSq-qV-SGy" customClass="BookmarkManager">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="menu" destination="ha0-nx-PIl" id="Ozd-ID-egK"/>
|
<outlet property="menu" destination="ha0-nx-PIl" id="Ozd-ID-egK"/>
|
||||||
|
<outlet property="updateMenuItem" destination="30b-vT-HIa" id="AgZ-LE-no6"/>
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate">
|
<customObject id="Voe-Tx-rLC" customClass="AppDelegate">
|
||||||
|
@ -416,6 +417,11 @@
|
||||||
<action selector="addBookmark:" target="-1" id="cqp-ko-BfQ"/>
|
<action selector="addBookmark:" target="-1" id="cqp-ko-BfQ"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</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">
|
<menuItem title="Set Default" hidden="YES" id="vbR-vS-lqO">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#import <CoreData/CoreData.h>
|
#import <CoreData/CoreData.h>
|
||||||
|
|
||||||
@class NSMenu;
|
@class NSMenu;
|
||||||
|
@class NSMenuItem;
|
||||||
@class Bookmark;
|
@class Bookmark;
|
||||||
@class DiskImage;
|
@class DiskImage;
|
||||||
|
|
||||||
|
@ -18,8 +19,11 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
@interface BookmarkManager : NSObject
|
@interface BookmarkManager : NSObject
|
||||||
|
|
||||||
@property (weak) IBOutlet NSMenu *menu;
|
@property (weak) IBOutlet NSMenu *menu;
|
||||||
|
@property (weak) IBOutlet NSMenuItem *updateMenuItem;
|
||||||
@property (readonly) NSManagedObjectContext *managedObjectContext;
|
@property (readonly) NSManagedObjectContext *managedObjectContext;
|
||||||
|
|
||||||
|
@property (nullable) Bookmark *currentBookmark;
|
||||||
|
|
||||||
+(instancetype)sharedManager;
|
+(instancetype)sharedManager;
|
||||||
|
|
||||||
-(NSString *)uniqueBookmarkName: (NSString *)name;
|
-(NSString *)uniqueBookmarkName: (NSString *)name;
|
||||||
|
@ -28,13 +32,13 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
//-(NSError *)saveDefault: (NSDictionary *)bookmark;
|
//-(NSError *)saveDefault: (NSDictionary *)bookmark;
|
||||||
|
|
||||||
|
-(Bookmark *)defaultBookmark;
|
||||||
-(NSDictionary *)loadDefault;
|
-(NSDictionary *)loadDefault;
|
||||||
|
|
||||||
-(NSError *)setAutomatic: (Bookmark *)bookmark;
|
-(NSError *)setAutomatic: (Bookmark *)bookmark;
|
||||||
|
|
||||||
-(BOOL)addDiskImage: (NSObject *)pathOrURL;
|
-(BOOL)addDiskImage: (NSObject *)pathOrURL;
|
||||||
|
|
||||||
|
|
||||||
//-(void)convertLegacyBookmarks;
|
//-(void)convertLegacyBookmarks;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,8 @@
|
||||||
NSArrayController *_items;
|
NSArrayController *_items;
|
||||||
NSUInteger _newMenuGeneration;
|
NSUInteger _newMenuGeneration;
|
||||||
NSUInteger _currentMenuGeneration;
|
NSUInteger _currentMenuGeneration;
|
||||||
|
|
||||||
|
Bookmark *_currentBookmark;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -235,7 +237,8 @@ static BookmarkManager *singleton = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
-(NSDictionary *)loadDefault {
|
-(Bookmark *)defaultBookmark {
|
||||||
|
|
||||||
NSFetchRequest *req;
|
NSFetchRequest *req;
|
||||||
NSError *error;
|
NSError *error;
|
||||||
NSArray *array;
|
NSArray *array;
|
||||||
|
@ -245,10 +248,12 @@ static BookmarkManager *singleton = nil;
|
||||||
[req setPredicate: [NSPredicate predicateWithFormat: @"automatic == TRUE"]];
|
[req setPredicate: [NSPredicate predicateWithFormat: @"automatic == TRUE"]];
|
||||||
array = [_moc executeFetchRequest: req error: &error];
|
array = [_moc executeFetchRequest: req error: &error];
|
||||||
|
|
||||||
b = [array firstObject];
|
return [array firstObject];
|
||||||
|
}
|
||||||
return [b dictionary];
|
|
||||||
|
|
||||||
|
-(NSDictionary *)loadDefault {
|
||||||
|
Bookmark *b = [self defaultBookmark];
|
||||||
|
return [b dictionary];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* save as .Default */
|
/* 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 {
|
-(void)menuNeedsUpdate:(NSMenu *)menu {
|
||||||
|
|
||||||
if (_currentMenuGeneration == _newMenuGeneration) return;
|
if (_currentMenuGeneration == _newMenuGeneration) return;
|
||||||
_currentMenuGeneration = _newMenuGeneration;
|
_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];
|
NSArray *menus = [menu itemArray];
|
||||||
for (NSMenuItem *item in [menus reverseObjectEnumerator]) {
|
for (NSMenuItem *item in [menus reverseObjectEnumerator]) {
|
||||||
if ([item tag] == 0xdeadbeef) [_menu removeItem: item];
|
if ([item tag] == 0xdeadbeef) [_menu removeItem: item];
|
||||||
}
|
}
|
||||||
|
|
||||||
NSArray *array = [_items arrangedObjects];
|
NSArray *array = [_items arrangedObjects];
|
||||||
for (Bookmark *b in array) {
|
for (Bookmark *b in array) {
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||||
BOOL _loadingBookmark;
|
BOOL _loadingBookmark;
|
||||||
NSString *_machine;
|
NSString *_machine;
|
||||||
NSDictionary *_machineDescription;
|
NSDictionary *_machineDescription;
|
||||||
|
BookmarkManager *_manager;
|
||||||
}
|
}
|
||||||
@property (strong) IBOutlet MediaViewController *mediaController;
|
@property (strong) IBOutlet MediaViewController *mediaController;
|
||||||
@property (strong) IBOutlet SlotViewController *slotController;
|
@property (strong) IBOutlet SlotViewController *slotController;
|
||||||
|
@ -189,6 +190,8 @@ static int EffectsIndex(NSString *str) {
|
||||||
|
|
||||||
-(void)windowWillLoad {
|
-(void)windowWillLoad {
|
||||||
|
|
||||||
|
_manager = [BookmarkManager sharedManager];
|
||||||
|
|
||||||
// if this calls [self window], it will recurse. that is bad.
|
// if this calls [self window], it will recurse. that is bad.
|
||||||
//[self defaultLoad: nil];
|
//[self defaultLoad: nil];
|
||||||
[self reset];
|
[self reset];
|
||||||
|
@ -731,6 +734,7 @@ static NSString *ShellQuote(NSString *s) {
|
||||||
|
|
||||||
-(IBAction)resetAll:(id)sender {
|
-(IBAction)resetAll:(id)sender {
|
||||||
|
|
||||||
|
[_manager setCurrentBookmark: nil];
|
||||||
[self reset];
|
[self reset];
|
||||||
[self resetSoftware];
|
[self resetSoftware];
|
||||||
[_slotController resetSlots: sender];
|
[_slotController resetSlots: sender];
|
||||||
|
@ -779,37 +783,40 @@ static NSString *ShellQuote(NSString *s) {
|
||||||
|
|
||||||
-(IBAction)defaultSave:(id)sender {
|
-(IBAction)defaultSave:(id)sender {
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
||||||
BookmarkManager *bm = [BookmarkManager sharedManager];
|
|
||||||
|
|
||||||
NSDictionary *d = [self makeBookmark];
|
NSDictionary *d = [self makeBookmark];
|
||||||
|
|
||||||
[bm saveDefault: d];
|
[_manager saveDefault: d];
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
-(IBAction)defaultLoad:(id)sender {
|
-(IBAction)defaultLoad:(id)sender {
|
||||||
|
|
||||||
BookmarkManager *bm = [BookmarkManager sharedManager];
|
Bookmark *b = [_manager defaultBookmark];
|
||||||
|
|
||||||
NSDictionary *d = [bm loadDefault];
|
if (!b) {
|
||||||
if (!d) {
|
|
||||||
[self resetAll: sender];
|
[self resetAll: sender];
|
||||||
[self setMachine: nil];
|
[self setMachine: nil];
|
||||||
[_machineViewController reset];
|
[_machineViewController reset];
|
||||||
[_slotController setMachine: nil];
|
[_slotController setMachine: nil];
|
||||||
return;
|
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 {
|
-(IBAction)addBookmark:(id)sender {
|
||||||
|
|
||||||
if (!_machine) return;
|
if (!_machine) return;
|
||||||
|
|
||||||
BookmarkManager *bm = [BookmarkManager sharedManager];
|
|
||||||
|
|
||||||
NSString *name = nil;
|
NSString *name = nil;
|
||||||
if (_machineDescription) name = [_machineDescription objectForKey:@"description"];
|
if (_machineDescription) name = [_machineDescription objectForKey:@"description"];
|
||||||
if (!name) name = _machine;
|
if (!name) name = _machine;
|
||||||
|
@ -819,7 +826,7 @@ static NSString *ShellQuote(NSString *s) {
|
||||||
name = [name stringByAppendingFormat: @" - %@", [_software title]];
|
name = [name stringByAppendingFormat: @" - %@", [_software title]];
|
||||||
}
|
}
|
||||||
|
|
||||||
name = [bm uniqueBookmarkName: name];
|
name = [_manager uniqueBookmarkName: name];
|
||||||
|
|
||||||
[self setBookmarkName: name];
|
[self setBookmarkName: name];
|
||||||
[self setBookmarkDefault: NO];
|
[self setBookmarkDefault: NO];
|
||||||
|
@ -836,10 +843,9 @@ static NSString *ShellQuote(NSString *s) {
|
||||||
|
|
||||||
-(IBAction)bookmarkSave:(id)sender {
|
-(IBAction)bookmarkSave:(id)sender {
|
||||||
|
|
||||||
BookmarkManager *bm = [BookmarkManager sharedManager];
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (![bm validateName: _bookmarkName]) {
|
if (![_manager validateName: _bookmarkName]) {
|
||||||
[_bookmarkTextField selectText: nil];
|
[_bookmarkTextField selectText: nil];
|
||||||
NSBeep();
|
NSBeep();
|
||||||
return;
|
return;
|
||||||
|
@ -849,7 +855,7 @@ static NSString *ShellQuote(NSString *s) {
|
||||||
NSDictionary *d = [self makeBookmark];
|
NSDictionary *d = [self makeBookmark];
|
||||||
NSError *e;
|
NSError *e;
|
||||||
|
|
||||||
if (( e = [bm saveBookmark: d name: _bookmarkName automatic: _bookmarkDefault])) {
|
if (( e = [_manager saveBookmark: d name: _bookmarkName automatic: _bookmarkDefault])) {
|
||||||
// probably a duplicate name...
|
// probably a duplicate name...
|
||||||
[_bookmarkTextField selectText: nil];
|
[_bookmarkTextField selectText: nil];
|
||||||
[_bookmarkErrorField setStringValue: [e localizedDescription]];
|
[_bookmarkErrorField setStringValue: [e localizedDescription]];
|
||||||
|
@ -866,31 +872,24 @@ static NSString *ShellQuote(NSString *s) {
|
||||||
-(void)bookmarkNotification: (NSNotification *)notification {
|
-(void)bookmarkNotification: (NSNotification *)notification {
|
||||||
|
|
||||||
Bookmark *b = [notification object];
|
Bookmark *b = [notification object];
|
||||||
NSDictionary *d = [b dictionary];
|
[self loadBookmark: b];
|
||||||
|
|
||||||
[self loadBookmark: d];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
-(IBAction)bookmarkMenu:(id)sender {
|
-(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.
|
// represented object is a Bookmark.
|
||||||
NSDictionary *d = [(Bookmark *)[sender representedObject] dictionary];
|
Bookmark *b = [sender representedObject];
|
||||||
[self loadBookmark: d];
|
[self loadBookmark: b];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
-(void)loadBookmark: (NSDictionary *)d {
|
-(void)loadBookmark: (Bookmark *)b {
|
||||||
Class StringClass = [NSString class];
|
Class StringClass = [NSString class];
|
||||||
Class NumberClass = [NSNumber class];
|
Class NumberClass = [NSNumber class];
|
||||||
|
|
||||||
|
NSDictionary *d = [b dictionary];
|
||||||
|
|
||||||
|
[_manager setCurrentBookmark: b];
|
||||||
|
|
||||||
NSString *machine = [d objectForKey: @"machine"];
|
NSString *machine = [d objectForKey: @"machine"];
|
||||||
if (!machine) return;
|
if (!machine) return;
|
||||||
|
|
Loading…
Reference in New Issue