ample/Ample/TableCellView.m

213 lines
5.2 KiB
Mathematica
Raw Normal View History

//
// TableCellView.m
// Ample
//
// Created by Kelvin Sherlock on 9/13/2020.
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
//
#import "TableCellView.h"
2021-08-07 19:12:20 +00:00
#import "MidiManager.h"
#import "Menu.h"
2021-08-07 19:12:20 +00:00
@implementation MediaTableCellView
#if 0
{
NSTrackingRectTag _trackingRect;
}
2021-08-07 19:12:20 +00:00
#endif
2021-06-13 16:26:56 +00:00
-(void)awakeFromNib {
// need to do it here for 10.11 compatibility.
if (@available(macOS 10.14, *)) {
NSValueTransformer *t;
NSDictionary *options;
t = [NSValueTransformer valueTransformerForName: @"ValidColorTransformer"];
options = @{ NSValueTransformerBindingOption: t};
[_ejectButton bind: @"contentTintColor" toObject: self withKeyPath: @"objectValue.valid" options: options];
} else {
// El Capitan TODO...
}
}
2021-08-07 19:12:20 +00:00
-(void)prepareView: (NSInteger)category {
}
2021-06-13 16:26:56 +00:00
#if 0
-(void)awakeFromNib {
// this is apparently necessary for setTintColor to work.
NSImage *img;
img = [_ejectButton image];
[img setTemplate: YES];
img = [_ejectButton alternateImage];
[img setTemplate: YES];
}
#endif
/* mouse tracking to enable/disable dragger image -- no longer used.*/
Squashed commit of the following: commit 78c81626670fdf41fa6bdd71a4243a89a0746615 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Mon Jun 7 00:33:48 2021 -0400 check if software set has a particular entry. commit ef5ab6b6948dc3bbbe2947ea099fcacd08435e86 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 22:20:34 2021 -0400 fix scroller background on recent disk images window. commit dee56fa50e87299b396b48361bd0a780aaaaa768 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 21:26:23 2021 -0400 update cheat sheet javascript to work with 10.11 * => functions not supported * NodeList.prototype.forEach not supported. commit b00cc05413f4ebd6d6d58f96e24303008608f3a6 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 17:10:41 2021 -0400 default full machine name for bookmark entry. commit a671cafdc98051b56b12cdd3ccd13c22f54f605a Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 15:39:32 2021 -0400 loading a bookmark wasn't updating the media. commit 3000e0eb1b10bede3345aaab8478e9ec209f328c Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 15:38:53 2021 -0400 bump copyright year. commit 45222dacd4aa0047fae63a9112509de57139df63 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 13:38:23 2021 -0400 add reset w/ value for setting the item explicitely. commit cc7fde1253b71c4d8655eb4c010bbf4e61333a15 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sun Jun 6 13:37:48 2021 -0400 add checkboxes for bitbanger/share directory. The general idea is it's easier to toggle a checkbox than to type/retype a path. commit 5674b2d7f6b0e2f0b973197bf3493ad61bf46428 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sat Jun 5 19:11:43 2021 -0400 commentary on searches with diacritics. commit ec60634dcd9c573130dc34673b4d3fe597ea2b42 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sat Jun 5 19:11:22 2021 -0400 clean up auto-complete a little bit when setting a value directly. commit 1a182bbdab237c89d355d8294b5a4a64b785783a Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sat Jun 5 13:08:29 2021 -0400 fix text color when value is set. There are still some bugs relating to multiple copies of the value being stored. commit 49c0bc15c73446259d8cc151cf52d6058644db76 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sat Jun 5 12:09:44 2021 -0400 reset all controls first. commit 059797ad85b057e296cc707b4645f839bfccac13 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Sat Jun 5 10:52:06 2021 -0400 more bookmark loading. commit e5a612d9f8e7414dd15c66dbaa540b637765eeec Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Fri Jun 4 23:52:38 2021 -0400 bookmark - restore the software commit f9411a1e84df7bd46e352cc5ca995b585c2a0523 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Fri Jun 4 23:52:25 2021 -0400 clean up software / name logic. commit f628d99e4a70d65ea8703f3c182103cd3bfea969 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Fri Jun 4 00:21:08 2021 -0400 load bookmark... commit 0b248e6aad16cba848f88d294a1366cea5760aa0 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Fri Jun 4 00:20:42 2021 -0400 stringValue can't be nil. commit 94aac38af45c3c95cb86b176393a469279c2539e Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Thu Jun 3 23:04:37 2021 -0400 add bookmark menu commit 6215a0df120b6cd97f1ffea2d2db9aaa5ae61f29 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Thu Jun 3 23:03:29 2021 -0400 slot view needs to know the machine. commit d348c15dc56d9cee01e5417435dd236e0e541902 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Thu Jun 3 23:02:58 2021 -0400 transformer to enable/disable control based on string length. commit e14336a0094af7aa84e91da69ff59ebb9e8eea9b Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Thu Jun 3 23:02:14 2021 -0400 shut up compiler warning. commit 4baf545245d8d3debf8f436b36b14cca23bf7a33 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Thu Jun 3 23:01:15 2021 -0400 bookmark manager commit 0f3e6c83075a145a456728b57a499cfa35707002 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Mon May 31 23:54:29 2021 -0400 more (untested) bookmark code commit 8fdb149eb38952b13c4a78d7a6940c43d90870f1 Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Mon May 31 16:13:43 2021 -0400 start of bookmarking support. Untested. commit 787eac87f6ac13cd677630cbaf2538cecab27b1f Author: Kelvin Sherlock <ksherlock@gmail.com> Date: Mon May 31 16:12:45 2021 -0400 shut up warnings about content clipping. maybe it's a 10.11 thing. The size was chosen by interface builder.
2021-06-07 04:34:26 +00:00
#if 0
-(void)viewDidMoveToSuperview {
if (_trackingRect) {
[self removeTrackingRect: _trackingRect];
}
NSRect rect = [_dragHandle frame];
_trackingRect = [self addTrackingRect: rect owner: self userData: NULL assumeInside:NO];
}
-(void)mouseEntered:(NSEvent *)event {
[_dragHandle setHidden: NO];
}
-(void)mouseExited:(NSEvent *)event {
[_dragHandle setHidden: YES];
}
#endif
@end
2021-08-07 19:12:20 +00:00
@implementation PathTableCellView
-(void)prepareView: (NSInteger)category {
[_pathControl setTag: category + 1];
}
- (void)pathControl:(NSPathControl *)pathControl willPopUpMenu:(NSMenu *)menu {
// if this is an output path, replace the "choose..." button with a save panel.
NSMenuItem *item = [menu itemAtIndex: 0];
if (item) {
[item setTarget: self];
[item setAction: @selector(choosePath:)];
}
}
-(IBAction)choosePath:(id)sender {
NSPathControl *pc = _pathControl;
NSURL *url = [pc URL];
NSSavePanel *p = [NSSavePanel savePanel];
if (url) {
NSFileManager *fm = [NSFileManager defaultManager];
BOOL dir = NO;
NSString *str = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
[fm fileExistsAtPath: str isDirectory: &dir];
if (!dir) {
[p setNameFieldStringValue: [str lastPathComponent]];
url = [url URLByDeletingLastPathComponent];
}
[p setDirectoryURL: url];
}
[p setExtensionHidden: NO];
[p beginWithCompletionHandler: ^(NSModalResponse response){
if (response != NSModalResponseOK) return;
NSURL *url = [p URL];
[pc setURL: url];
}];
}
@end
@interface EmptyStringTransformer : NSValueTransformer
@end
static NSString *kNone = @"—None—";
@implementation EmptyStringTransformer
+(void)load {
[self setValueTransformer: [self new] forName: @"EmptyStringTransformer"];
}
+ (Class)transformedValueClass {
return [NSString class];
}
+ (BOOL)allowsReverseTransformation {
return YES;
}
- (id)transformedValue:(id)value {
if (value == nil) return kNone;
if ([kNone isEqualToString: value]) return nil;
return value;
}
@end
@implementation MidiTableCellView {
NSInteger _category;
}
/* binding should be able to handle the menu but i couldn't make it work. */
-(void)prepareView: (NSInteger)category {
_category = category;
// 10.11 + doesn't need to remove the observer in the -dealloc
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver: self selector: @selector(midiChanged:) name: category == kIndexMidiIn ? kMidiSourcesChangedNotification : kMidiDestinationsChangedNotification object: nil];
[self updateMenus: NO];
}
-(void)updateMenus: (BOOL)notification {
NSMenu *menu = [_popUpButton menu];
MidiManager *mgr = [MidiManager sharedManager];
NSArray *array = _category == kIndexMidiIn ? [mgr sources] : [mgr destinations];
NSString *selected = [[_popUpButton selectedItem] title];
[menu removeAllItems];
2021-08-07 19:12:20 +00:00
int selectedIndex = -1;
NSMenuItem *item;
item = [[NSMenuItem alloc] initWithTitle: kNone action: NULL keyEquivalent: @""];
[item setAttributedTitle: ItalicMenuString(kNone)];
[menu addItem: item];
selectedIndex = 0;
#if 0
if (!selected || [@"" isEqualToString: selected]) {
selectedIndex = 0;
}
#endif
int ix = 1;
for (NSString *s in array) {
item = [[NSMenuItem alloc] initWithTitle: s action: NULL keyEquivalent: @""];
[item setRepresentedObject: s];
[menu addItem: item];
if ([s isEqualToString: selected]) {
selectedIndex = ix;
}
++ix;
}
// does this propogate?
[_popUpButton selectItemAtIndex: selectedIndex];
if (notification) [_popUpButton sendAction: [_popUpButton action] to: [_popUpButton target]];
}
-(void)midiChanged: (NSNotification *)notification {
[self updateMenus: YES];
}
-(void)prepareForReuse {
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc removeObserver: self];
_category = 0;
[super prepareForReuse];
}
@end