mirror of
https://github.com/ksherlock/ample.git
synced 2024-10-31 15:04:56 +00:00
0616991a1b
- bookmark edit window - rom window now shows machine description, tooltip is name - fix split floppy logic to work with a2superdrive - fix software list loading from default - mame 241 machine updates
171 lines
3.5 KiB
Objective-C
171 lines
3.5 KiB
Objective-C
//
|
|
// BookmarkWindowController.m
|
|
// Ample
|
|
//
|
|
// Created by Kelvin Sherlock on 2/6/2022.
|
|
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
|
//
|
|
|
|
#import "BookmarkWindowController.h"
|
|
#import "BookmarkManager.h"
|
|
#import "Bookmark.h"
|
|
#import "Ample.h"
|
|
|
|
|
|
|
|
@interface BookmarkWindowController ()
|
|
@property (strong) IBOutlet NSArrayController *arrayController;
|
|
@property (strong) IBOutlet BookmarkManager *bookmarkManager;
|
|
|
|
@property (weak) IBOutlet NSTableView *tableView;
|
|
|
|
@end
|
|
|
|
@implementation BookmarkWindowController
|
|
|
|
|
|
+(instancetype)sharedInstance {
|
|
static BookmarkWindowController *me = nil;
|
|
if (!me) {
|
|
me = [self new];
|
|
}
|
|
return me;
|
|
}
|
|
|
|
-(NSString *)windowNibName {
|
|
return @"BookmarkWindow";
|
|
}
|
|
|
|
|
|
- (void)windowDidLoad {
|
|
[super windowDidLoad];
|
|
|
|
NSSortDescriptor *s = [NSSortDescriptor sortDescriptorWithKey: @"name" ascending: YES selector: @selector(caseInsensitiveCompare:)];
|
|
|
|
[_arrayController setSortDescriptors: @[s]];
|
|
|
|
}
|
|
|
|
-(BOOL)windowShouldClose: (NSWindow *)sender {
|
|
|
|
NSManagedObjectContext *moc = [_arrayController managedObjectContext];
|
|
NSError *error;
|
|
|
|
if (![_arrayController commitEditing]) return NO;
|
|
|
|
if ([moc save: &error]) return YES;
|
|
NSLog(@"%@", error);
|
|
|
|
#if 0
|
|
NSDictionary *dict = [error userInfo];
|
|
NSArray *array = [dict objectForKey: @"conflictList"];
|
|
for (NSConstraintConflict *c in array) {
|
|
|
|
NSArray * arr = [c conflictingObjects];
|
|
for (NSManagedObject *o in arr) {
|
|
|
|
}
|
|
}
|
|
#endif
|
|
return YES;
|
|
|
|
//[self presentError: error];
|
|
//return NO;
|
|
}
|
|
|
|
-(void)keyDown:(NSEvent *)event {
|
|
/* Carbon/Events.h */
|
|
enum {
|
|
kVK_Delete = 0x33,
|
|
kVK_ForwardDelete = 0x75,
|
|
|
|
};
|
|
unsigned short keyCode = [event keyCode];
|
|
|
|
if (keyCode == kVK_Delete || keyCode == kVK_ForwardDelete) {
|
|
|
|
// arraycontroller selected object / selected index doesn't work right.
|
|
|
|
NSInteger row = [_tableView selectedRow];
|
|
if (row >= 0)
|
|
[_arrayController removeObjectAtArrangedObjectIndex: row];
|
|
|
|
}
|
|
}
|
|
|
|
-(Bookmark *)clickedItem {
|
|
|
|
NSArray *array = [_arrayController arrangedObjects];
|
|
NSInteger row = [_tableView clickedRow];
|
|
if (row < 0 || row >= [array count]) return nil;
|
|
return [array objectAtIndex: row];
|
|
}
|
|
|
|
-(IBAction)doubleClick:(id)sender {
|
|
|
|
Bookmark *b = [self clickedItem];
|
|
if (!b) return;
|
|
|
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
|
|
|
[nc postNotificationName: kNotificationBookmarkMagicRoute object: b];
|
|
}
|
|
|
|
-(IBAction)toggleDefault:(id)sender {
|
|
NSLog(@"%@", sender);
|
|
|
|
|
|
}
|
|
|
|
-(IBAction)setDefault:(id)sender {
|
|
|
|
Bookmark *b = [self clickedItem];
|
|
if (!b) return;
|
|
|
|
[_bookmarkManager setAutomatic: b];
|
|
}
|
|
|
|
-(IBAction)clearDefault:(id)sender {
|
|
|
|
Bookmark *b = [self clickedItem];
|
|
if (!b) return;
|
|
|
|
[b setAutomatic: NO];
|
|
}
|
|
|
|
|
|
-(IBAction)deleteBookmark:(id)sender {
|
|
|
|
//Bookmark *b = [self clickedItem];
|
|
//if (!b) return;
|
|
|
|
NSInteger row = [_tableView clickedRow];
|
|
if (row >= 0)
|
|
[_arrayController removeObjectAtArrangedObjectIndex: row];
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation BookmarkWindowController (Menu)
|
|
|
|
-(BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
|
|
|
Bookmark *b = [self clickedItem];
|
|
|
|
if (!b) return NO;
|
|
SEL action = [menuItem action];
|
|
|
|
if (action == @selector(clearDefault:)) {
|
|
return [b automatic];
|
|
}
|
|
|
|
if (action == @selector(setDefault:)) {
|
|
return ![b automatic];
|
|
}
|
|
|
|
|
|
return YES;
|
|
}
|
|
|
|
@end
|