reimplemented addAction: and addOutlet: in the class manager.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/gorm/trunk@20430 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Gregory John Casamento 2004-12-09 00:56:57 +00:00
parent b1efb8b092
commit d84f889c8d
5 changed files with 53 additions and 37 deletions

View file

@ -1,3 +1,12 @@
2004-12-08 19:52 Gregory John Casamento <greg_casamento@yahoo.com>
* GormClassEditor.m: Use new ivar to store selected class.
* GormClassManager.m: Reimplement addAction:toClassNamed: and
addOutlet:forClassNamed:.
* GormImageEditor.m: Release the objects in dealloc.
* GormPrivate.h: Added new ivar for GormClassEditor to store
selected class in.
2004-12-05 18:21 Gregory John Casamento <greg_casamento@yahoo.com> 2004-12-05 18:21 Gregory John Casamento <greg_casamento@yahoo.com>
* GormClassEditor.m: Added new methods moved from GormDocument. * GormClassEditor.m: Added new methods moved from GormDocument.

View file

@ -96,6 +96,12 @@
return AUTORELEASE([(GormClassEditor *)[self alloc] initWithDocument: doc]); return AUTORELEASE([(GormClassEditor *)[self alloc] initWithDocument: doc]);
} }
- (void) dealloc
{
RELEASE(selectedClass);
[super dealloc];
}
- (void) setSelectedClassName: (NSString*)cn - (void) setSelectedClassName: (NSString*)cn
{ {
[self selectClass: cn]; [self selectClass: cn];
@ -122,6 +128,8 @@
NSEnumerator *en; NSEnumerator *en;
int row = 0; int row = 0;
ASSIGN(selectedClass, className);
if(className != nil) if(className != nil)
{ {
if([className isEqual: @"CustomView"] || if([className isEqual: @"CustomView"] ||
@ -192,6 +200,7 @@
int row = [self selectedRow]; int row = [self selectedRow];
if (row >= 0) if (row >= 0)
{ {
selectedClass = [self selectedClassName];
[document setSelectionFromEditor: (id)self]; [document setSelectionFromEditor: (id)self];
} }
} }
@ -231,16 +240,14 @@
- (NSArray*) selection - (NSArray*) selection
{ {
NSString *selectedClassName = [self selectedClassName];
// when asked for a selection, it returns a class proxy // when asked for a selection, it returns a class proxy
if (selectedClassName != nil) if (selectedClass != nil)
{ {
NSArray *array; NSArray *array;
GormClassProxy *classProxy; GormClassProxy *classProxy;
classProxy = [[GormClassProxy alloc] initWithClassName: classProxy = [[GormClassProxy alloc] initWithClassName:
selectedClassName]; selectedClass];
array = [NSArray arrayWithObject: classProxy]; array = [NSArray arrayWithObject: classProxy];
RELEASE(classProxy); RELEASE(classProxy);
return array; return array;

View file

@ -48,10 +48,20 @@
@end @end
@interface NSMutableArray (Private) @interface NSMutableArray (Private)
- (void) mergeObject: (id)object;
- (void) mergeObjectsFromArray: (NSArray *)array; - (void) mergeObjectsFromArray: (NSArray *)array;
@end @end
@implementation NSMutableArray (Private) @implementation NSMutableArray (Private)
- (void) mergeObject: (id)object
{
if ([self containsObject: object] == NO)
{
[self addObject: object];
[self sortUsingSelector: @selector(compare:)];
}
}
- (void) mergeObjectsFromArray: (NSArray *)array - (void) mergeObjectsFromArray: (NSArray *)array
{ {
NSEnumerator *enumerator = [array objectEnumerator]; NSEnumerator *enumerator = [array objectEnumerator];
@ -61,10 +71,7 @@
{ {
while ((obj = [enumerator nextObject]) != nil) while ((obj = [enumerator nextObject]) != nil)
{ {
if ([self containsObject: obj] == NO) [self mergeObject: obj];
{
[self addObject: obj];
}
} }
} }
} }
@ -277,17 +284,13 @@
{ {
NSMutableDictionary *info = [classInformation objectForKey: className]; NSMutableDictionary *info = [classInformation objectForKey: className];
NSMutableArray *extraActions = [info objectForKey: @"ExtraActions"]; NSMutableArray *extraActions = [info objectForKey: @"ExtraActions"];
NSMutableArray *allActions = nil; NSMutableArray *allActions = [info objectForKey: @"AllActions"];
NSString *anAction = [action copy]; NSString *anAction = [action copy];
NSEnumerator *en = [[self subClassesOf: className] objectEnumerator]; NSArray *subClasses = [self allSubclassesOf: className];
NSEnumerator *en = [subClasses objectEnumerator];
NSString *subclassName = nil; NSString *subclassName = nil;
// regenerate the key... // check all
[info removeObjectForKey: @"AllActions"];
[self allActionsForClassNamed: className];
allActions = [info objectForKey: @"AllActions"];
// check all actions...
if ([allActions containsObject: anAction]) if ([allActions containsObject: anAction])
{ {
return; return;
@ -307,9 +310,8 @@
[info setObject: extraActions forKey: @"ExtraActions"]; [info setObject: extraActions forKey: @"ExtraActions"];
} }
[extraActions addObject: anAction]; [extraActions mergeObject: anAction];
[allActions insertObject: anAction atIndex: 0]; [allActions mergeObject: anAction];
[allActions sortUsingSelector: @selector(compare:)];
if(![className isEqualToString: @"FirstResponder"]) if(![className isEqualToString: @"FirstResponder"])
{ {
@ -318,7 +320,9 @@
while((subclassName = [en nextObject]) != nil) while((subclassName = [en nextObject]) != nil)
{ {
[self addAction: anAction forClassNamed: subclassName]; NSDictionary *subInfo = [classInformation objectForKey: subclassName];
NSMutableArray *subAll = [subInfo objectForKey: @"AllActions"];
[subAll mergeObject: anAction];
} }
[self touch]; [self touch];
@ -333,16 +337,12 @@
{ {
NSMutableDictionary *info = [classInformation objectForKey: className]; NSMutableDictionary *info = [classInformation objectForKey: className];
NSMutableArray *extraOutlets = [info objectForKey: @"ExtraOutlets"]; NSMutableArray *extraOutlets = [info objectForKey: @"ExtraOutlets"];
NSMutableArray *allOutlets = nil; NSMutableArray *allOutlets = [info objectForKey: @"AllOutlets"];
NSString *anOutlet = [outlet copy]; NSString *anOutlet = [outlet copy];
NSEnumerator *en = [[self subClassesOf: className] objectEnumerator]; NSArray *subClasses = [self allSubclassesOf: className];
NSEnumerator *en = [subClasses objectEnumerator];
NSString *subclassName = nil; NSString *subclassName = nil;
// regenerate the key...
[info removeObjectForKey: @"AllOutlets"];
[self allOutletsForClassNamed: className];
allOutlets = [info objectForKey: @"AllOutlets"];
// check all // check all
if ([allOutlets containsObject: anOutlet]) if ([allOutlets containsObject: anOutlet])
{ {
@ -355,13 +355,14 @@
[info setObject: extraOutlets forKey: @"ExtraOutlets"]; [info setObject: extraOutlets forKey: @"ExtraOutlets"];
} }
[extraOutlets addObject: anOutlet]; [extraOutlets mergeObject: anOutlet];
[allOutlets insertObject: anOutlet atIndex: 0]; [allOutlets mergeObject: anOutlet];
[allOutlets sortUsingSelector: @selector(compare:)];
while((subclassName = [en nextObject]) != nil) while((subclassName = [en nextObject]) != nil)
{ {
[self addOutlet: outlet forClassNamed: subclassName]; NSDictionary *subInfo = [classInformation objectForKey: subclassName];
NSMutableArray *subAll = [subInfo objectForKey: @"AllOutlets"];
[subAll mergeObject: anOutlet];
} }
[self touch]; [self touch];
@ -402,7 +403,6 @@
{ {
int all_index = [allActions indexOfObject: oldAction]; int all_index = [allActions indexOfObject: oldAction];
[allActions replaceObjectAtIndex: all_index withObject: newAction]; [allActions replaceObjectAtIndex: all_index withObject: newAction];
[allActions sortUsingSelector: @selector(compare:)];
} }
[self touch]; [self touch];
@ -687,7 +687,6 @@
[allActions mergeObjectsFromArray: extraActions]; [allActions mergeObjectsFromArray: extraActions];
} }
[allActions sortUsingSelector: @selector(compare:)];
[info setObject: allActions forKey: @"AllActions"]; [info setObject: allActions forKey: @"AllActions"];
RELEASE(allActions); RELEASE(allActions);
} }
@ -809,7 +808,6 @@
[allOutlets mergeObjectsFromArray: extraOutlets]; [allOutlets mergeObjectsFromArray: extraOutlets];
} }
[allOutlets sortUsingSelector: @selector(compare:)];
[info setObject: allOutlets forKey: @"AllOutlets"]; [info setObject: allOutlets forKey: @"AllOutlets"];
RELEASE(allOutlets); RELEASE(allOutlets);
} }

View file

@ -264,6 +264,7 @@ static int handled_mask= NSDragOperationCopy|NSDragOperationGeneric|NSDragOperat
// TODO: This is a band-aid fix until I find the actual problem. // TODO: This is a band-aid fix until I find the actual problem.
// This *WILL* leak, but I don't want it crashing on people. // This *WILL* leak, but I don't want it crashing on people.
RELEASE(objects);
NSLog(@"Released..."); NSLog(@"Released...");
} }

View file

@ -170,6 +170,7 @@ extern NSString *GormResizeCellNotification;
{ {
GormDocument *document; GormDocument *document;
GormClassManager *classManager; GormClassManager *classManager;
NSString *selectedClass;
} }
- (GormClassEditor*) initWithDocument: (GormDocument*)doc; - (GormClassEditor*) initWithDocument: (GormDocument*)doc;
+ (GormClassEditor*) classEditorForDocument: (GormDocument*)doc; + (GormClassEditor*) classEditorForDocument: (GormDocument*)doc;