mirror of
https://github.com/gnustep/libs-gdl2.git
synced 2025-02-15 16:10:46 +00:00
* Apps/EOModelEditor/Inspectors/AttributeInspector.m include missing header git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@36328 72102866-910b-0410-8b05-ffd578937521
232 lines
4.9 KiB
Objective-C
232 lines
4.9 KiB
Objective-C
/**
|
|
EOMInspector.m <title>EOMInspector Class</title>
|
|
|
|
Copyright (C) 2005 Free Software Foundation, Inc.
|
|
|
|
Author: Matt Rice <ratmice@gmail.com>
|
|
Date: April 2005
|
|
|
|
This file is part of the GNUstep Database Library.
|
|
|
|
<license>
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 3 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
</license>
|
|
**/
|
|
|
|
#include <AppKit/AppKit.h>
|
|
|
|
#ifdef NeXT_Foundation_LIBRARY
|
|
#include <Foundation/Foundation.h>
|
|
#else
|
|
#include <Foundation/NSArray.h>
|
|
#endif
|
|
|
|
#include "EOModeler/EOMInspector.h"
|
|
#include "EOModeler/EOMInspectorController.h"
|
|
|
|
#include <GNUstepBase/GNUstep.h>
|
|
#include <GNUstepBase/GSObjCRuntime.h>
|
|
|
|
#include <Renaissance/Renaissance.h>
|
|
|
|
static NSMapTable *_inspectorsByClass;
|
|
|
|
|
|
@implementation EOMInspector
|
|
|
|
- (id) init
|
|
{
|
|
self = [super init];
|
|
|
|
return self;
|
|
}
|
|
|
|
/* this method currently assumes that allRegisteredInspectors has been called *after* all bundles have been loaded. */
|
|
|
|
+ (NSArray *) allRegisteredInspectors
|
|
{
|
|
if (!_inspectorsByClass)
|
|
{
|
|
NSArray *inspectorClasses = GSObjCAllSubclassesOfClass([self class]);
|
|
int i,c;
|
|
_inspectorsByClass = NSCreateMapTableWithZone(NSObjectMapKeyCallBacks,
|
|
NSObjectMapValueCallBacks,
|
|
[inspectorClasses count],
|
|
[self zone]);
|
|
|
|
for (i = 0, c = [inspectorClasses count]; i < c; i++)
|
|
{
|
|
[[inspectorClasses objectAtIndex:i] sharedInspector];
|
|
}
|
|
}
|
|
|
|
return [NSAllMapTableValues(_inspectorsByClass) sortedArrayUsingSelector:@selector(_compareDisplayOrder:)];
|
|
}
|
|
|
|
+ (NSArray *) allInspectorsThatCanInspectObject:(id)selectedObject
|
|
{
|
|
int i,c;
|
|
NSMutableArray *inspectors = [[NSMutableArray alloc] init];
|
|
NSArray *_allInspectors = [self allRegisteredInspectors];
|
|
|
|
for (i = 0, c = [_allInspectors count]; i < c; i++)
|
|
{
|
|
id gadget = [_allInspectors objectAtIndex:i];
|
|
|
|
if ([gadget canInspectObject:selectedObject])
|
|
{
|
|
[inspectors addObject:gadget];
|
|
}
|
|
}
|
|
return inspectors;
|
|
}
|
|
|
|
+ (EOMInspector *)sharedInspector
|
|
{
|
|
EOMInspector *_sharedInspector = NSMapGet(_inspectorsByClass, [self class]);
|
|
|
|
if (!_sharedInspector)
|
|
{
|
|
id foo = [[self alloc] init];
|
|
NSMapInsert(_inspectorsByClass,[self class], foo);
|
|
_sharedInspector = foo;
|
|
}
|
|
|
|
return _sharedInspector;
|
|
}
|
|
|
|
+ (BOOL) usesControlActionForValidation
|
|
{
|
|
return YES;
|
|
}
|
|
|
|
+ (NSArray *) selectionBeingValidated
|
|
{
|
|
return nil; // FIXME
|
|
}
|
|
|
|
- (NSString *) displayName
|
|
{
|
|
return [window title];
|
|
}
|
|
|
|
- (NSImage *) image
|
|
{
|
|
if (!image)
|
|
image = [NSImage imageNamed:NSStringFromClass([self class])];
|
|
return image;
|
|
}
|
|
|
|
- (NSImage *) hilightedImage
|
|
{
|
|
return [self image];
|
|
}
|
|
|
|
- (float) displayOrder
|
|
{
|
|
return 10.0;
|
|
}
|
|
|
|
- (NSComparisonResult) _compareDisplayOrder:(EOMInspector *)inspector
|
|
{
|
|
float itsResult, myResult;
|
|
|
|
myResult = [self displayOrder];
|
|
itsResult = [inspector displayOrder];
|
|
|
|
return (myResult < itsResult)
|
|
? NSOrderedAscending
|
|
: (myResult == itsResult)
|
|
? NSOrderedSame
|
|
: NSOrderedDescending;
|
|
|
|
}
|
|
|
|
- (BOOL) canInspectObject:(id)selectedObject
|
|
{
|
|
return NO;
|
|
}
|
|
|
|
- (void) load
|
|
{
|
|
|
|
if (![NSBundle loadGSMarkupNamed:NSStringFromClass([self class])
|
|
owner:self])
|
|
{
|
|
NSLog(@"failed to load: %@.gsmarkup", NSStringFromClass([self class]));
|
|
}
|
|
|
|
|
|
// if (![NSBundle loadNibNamed:NSStringFromClass([self class])
|
|
// owner: self])
|
|
// NSLog(@"failed to load: %@.gorm", NSStringFromClass([self class]));
|
|
}
|
|
|
|
- (void) unload
|
|
{
|
|
|
|
}
|
|
|
|
- (void) prepareForDisplay
|
|
{
|
|
if (!view)
|
|
{
|
|
[self load];
|
|
}
|
|
}
|
|
|
|
/* returns the 'view' ivar if it exists otherwise the 'window' ivars content view */
|
|
- (NSView *) view
|
|
{
|
|
/* yes we leak this but these live throughout the applictions lifespan,
|
|
* we'll only leak one because inspectors are singletons.
|
|
* and theres no good way to release it in all cases. */
|
|
if (!view && window)
|
|
view = RETAIN([window contentView]);
|
|
|
|
return view;
|
|
}
|
|
|
|
- (void) refresh
|
|
{
|
|
return;
|
|
}
|
|
|
|
- (NSArray *) selectedObjects
|
|
{
|
|
|
|
id currentDocument = [[NSDocumentController sharedDocumentController] currentDocument];
|
|
NSArray *sel = [currentDocument selectedObjects];
|
|
|
|
return sel;
|
|
}
|
|
|
|
- (id) selectedObject
|
|
{
|
|
NSArray *selection = [self selectedObjects];
|
|
|
|
if ([selection count]) {
|
|
return [selection objectAtIndex:0];
|
|
}
|
|
return nil;
|
|
}
|
|
|
|
- (BOOL) isAdvanced
|
|
{
|
|
return NO;
|
|
}
|
|
|
|
|
|
@end
|