Skip to content

Commit

Permalink
Merge pull request #221 from VladimirTechMan/flex_evidencesource_init
Browse files Browse the repository at this point in the history
Give more flexibility to subclasses of EvidenceSource with panel init
  • Loading branch information
dustinrue committed Feb 27, 2013
2 parents 142b3f3 + cdcfd0a commit e8dd58c
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 32 deletions.
3 changes: 3 additions & 0 deletions Source/EvidenceSource.h
Expand Up @@ -24,6 +24,9 @@

@property (readwrite) BOOL screenIsLocked;

+ (NSPanel *)getPanelFromNibNamed:(NSString *)name instantiatedWithOwner:(id)owner;

- (id)initWithPanel:(NSPanel *)initPanel;
- (id)initWithNibNamed:(NSString *)name;
- (void)dealloc;
- (void)goingToSleep:(id)arg;
Expand Down
80 changes: 48 additions & 32 deletions Source/EvidenceSource.m
Expand Up @@ -23,48 +23,25 @@ @implementation EvidenceSource

@synthesize screenIsLocked;

- (id)initWithNibNamed:(NSString *)name
{
- (id)initWithPanel:(NSPanel *)initPanel {
if ([[self class] isEqualTo:[EvidenceSource class]]) {
[NSException raise:@"Abstract Class Exception"
format:@"Error, attempting to instantiate EvidenceSource directly."];
format:@"Error, attempting to instantiate EvidenceSource directly."];
}

if (!(self = [super init]))
return nil;

running = NO;
dataCollected = NO;
startAfterSleep = NO;
goingToSleep = NO;
screenIsLocked = NO;

oldDescription = nil;

// load nib
NSNib *nib = [[[NSNib alloc] initWithNibNamed:name bundle:nil] autorelease];
if (!nib) {
NSLog(@"%@ >> failed loading nib named '%@'!", [self class], name);
return nil;
}
NSArray *topLevelObjects = [NSArray array];
if (![nib instantiateNibWithOwner:self topLevelObjects:&topLevelObjects]) {
NSLog(@"%@ >> failed instantiating nib (named '%@')!", [self class], name);
return nil;
}

// Look for an NSPanel
NSEnumerator *en = [topLevelObjects objectEnumerator];
NSObject *obj;
while ((obj = [en nextObject]) && !([obj isKindOfClass:[NSPanel class]])) {
}
if (!obj) {
NSLog(@"%@ >> failed to find an NSPanel in nib named '%@'!", [self class], name);
return nil;
}

panel = (NSPanel *) [obj retain];

panel = initPanel;

// Get notified when we go to sleep, and wake from sleep
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(goingToSleep:)
Expand All @@ -75,15 +52,15 @@ - (id)initWithNibNamed:(NSString *)name
selector:@selector(wakeFromSleep:)
name:@"systemDidWake"
object:nil];

// Monitor screensaver status
[[NSDistributedNotificationCenter defaultCenter] addObserver:self
selector:@selector(screenSaverDidBecomeInActive:)
name:@"com.apple.screensaver.didstop"
object:nil];

[[NSDistributedNotificationCenter defaultCenter] addObserver:self
selector:@selector(screenSaverDidBecomeActive:)
selector:@selector(screenSaverDidBecomeActive:)
name:@"com.apple.screensaver.didstart"
object:nil];

Expand All @@ -103,6 +80,45 @@ - (id)initWithNibNamed:(NSString *)name
return self;
}

+ (NSPanel *)getPanelFromNibNamed:(NSString *)name instantiatedWithOwner:(id)owner {
// load nib
NSNib *nib = [[[NSNib alloc] initWithNibNamed:name bundle:nil] autorelease];
if (!nib) {
NSLog(@"%@ >> failed loading nib named '%@'!", [self class], name);
return nil;
}

NSArray *topLevelObjects = [NSArray array];
if (![nib instantiateNibWithOwner:owner topLevelObjects:&topLevelObjects]) {
NSLog(@"%@ >> failed instantiating nib (named '%@')!", [self class], name);
return nil;
}

// Look for an NSPanel
for (NSObject *obj in topLevelObjects) {
if ([obj isKindOfClass:[NSPanel class]]) {
return (NSPanel *) [obj retain];
}
}

NSLog(@"%@ >> failed to find an NSPanel in nib named '%@'!", [self class], name);
return nil;
}

- (id)initWithNibNamed:(NSString *)name
{
if (!(self = [self initWithPanel:nil])) {
return nil;
}

panel = [[self class] getPanelFromNibNamed:name instantiatedWithOwner:self];
if (!panel) {
return nil;
}

return self;
}

- (void)dealloc
{
[panel release];
Expand Down

0 comments on commit e8dd58c

Please sign in to comment.