mirror of
https://github.com/mauiaaron/apple2.git
synced 2024-09-08 10:54:35 +00:00
145 lines
4.2 KiB
Objective-C
145 lines
4.2 KiB
Objective-C
/*
|
|
* Copyright (c) 2007 Dave Dribin
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person
|
|
* obtaining a copy of this software and associated documentation
|
|
* files (the "Software"), to deal in the Software without
|
|
* restriction, including without limitation the rights to use, copy,
|
|
* modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
* of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be
|
|
* included in all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
* SOFTWARE.
|
|
*/
|
|
|
|
#import "HidBrowserController.h"
|
|
#import "DDHidUsageTables.h"
|
|
#import "DDHidDevice.h"
|
|
#import "DDHidElement.h"
|
|
#import "WatcherWindowController.h"
|
|
|
|
@implementation HidBrowserController
|
|
|
|
static BOOL sSleepAtExit = NO;
|
|
|
|
static void exit_sleeper()
|
|
{
|
|
while (sSleepAtExit) sleep(60);
|
|
}
|
|
|
|
- (void) awakeFromNib
|
|
{
|
|
sSleepAtExit = [[NSUserDefaults standardUserDefaults] boolForKey: @"SleepAtExit"];
|
|
atexit(exit_sleeper);
|
|
|
|
[self willChangeValueForKey: @"devices"];
|
|
mDevices = [[DDHidDevice allDevices] retain];
|
|
[self didChangeValueForKey: @"devices"];
|
|
|
|
[mWindow center];
|
|
[mWindow makeKeyAndOrderFront: self];
|
|
}
|
|
|
|
//===========================================================
|
|
// dealloc
|
|
//===========================================================
|
|
- (void) dealloc
|
|
{
|
|
[mDevices release];
|
|
|
|
mDevices = nil;
|
|
[super dealloc];
|
|
}
|
|
|
|
//===========================================================
|
|
// - devices
|
|
//===========================================================
|
|
- (NSArray *) devices
|
|
{
|
|
return mDevices;
|
|
}
|
|
|
|
- (DDHidDevice *) selectedDevice;
|
|
{
|
|
NSArray * selectedDevices = [mDevicesController selectedObjects];
|
|
if ([selectedDevices count] > 0)
|
|
return [selectedDevices objectAtIndex: 0];
|
|
else
|
|
return nil;
|
|
}
|
|
|
|
- (IBAction) watchSelected: (id) sender;
|
|
{
|
|
NSArray * selectedElements = [mElementsController selectedObjects];
|
|
if ([selectedElements count] == 0)
|
|
return;
|
|
|
|
WatcherWindowController * controller =
|
|
[[WatcherWindowController alloc] init];
|
|
[controller setDevice: [self selectedDevice]];
|
|
[controller setElements: selectedElements];
|
|
[controller showWindow: self];
|
|
}
|
|
|
|
- (IBAction) exportPlist: (id) sender;
|
|
{
|
|
DDHidDevice * selectedDevice = [self selectedDevice];
|
|
if (selectedDevice == nil)
|
|
return;
|
|
|
|
NSSavePanel * panel = [NSSavePanel savePanel];
|
|
|
|
/* set up new attributes */
|
|
[panel setRequiredFileType: @"plist"];
|
|
[panel setAllowsOtherFileTypes: NO];
|
|
[panel setCanSelectHiddenExtension: YES];
|
|
|
|
/* display the NSSavePanel */
|
|
[panel beginSheetForDirectory: NSHomeDirectory()
|
|
file: @""
|
|
modalForWindow: [NSApp mainWindow]
|
|
modalDelegate: self
|
|
didEndSelector: @selector(exportPlistPanelDidEnd:returnCode:contextInfo:)
|
|
contextInfo: selectedDevice];
|
|
}
|
|
|
|
- (void) exportPlistPanelDidEnd: (NSSavePanel *) panel
|
|
returnCode: (int) returnCode
|
|
contextInfo: (void *) contextInfo;
|
|
{
|
|
DDHidDevice * selectedDevice = contextInfo;
|
|
|
|
/* if successful, save file under designated name */
|
|
if (returnCode != NSOKButton)
|
|
return;
|
|
|
|
NSDictionary * deviceProperties = [selectedDevice properties];
|
|
if (![deviceProperties writeToFile: [panel filename] atomically: YES])
|
|
NSBeep();
|
|
}
|
|
|
|
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication
|
|
{
|
|
return YES;
|
|
}
|
|
|
|
- (void)applicationWillTerminate:(NSNotification *)aNotification
|
|
{
|
|
[self willChangeValueForKey: @"devices"];
|
|
[mDevices release];
|
|
mDevices = nil;
|
|
[self didChangeValueForKey: @"devices"];
|
|
}
|
|
|
|
@end
|