It is now possible to edit classes in the class view. Some more work needs to be done, but it is useful now.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/gorm/trunk@14135 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Gregory John Casamento 2002-07-12 05:46:29 +00:00
parent 1d6d8ea8ab
commit 06c961ce51
7 changed files with 147 additions and 20 deletions

View file

@ -1,3 +1,17 @@
2002-07-12 Gregory John Casamento <greg_casamento@yahoo.com>
* Gorm.m: [-removeAttributeFromClass] added method to be
used by new menu item "Delete Outlet/Action". Removed some
NSLog statements.
* GormClassManager.[hm]: Added methods to support adding and
replacing actions and outlets.
* GormDocument.m: Modified data source methods to use the methods
added to the class manager to edit the contents of the class list.
* GormOutlineView.[hm]: Added methods to add actions and outlets
to the data source from the outline view. Also changed the drawing
code so that the outlet/action being edited doesn't shift when
clicked.
2002-07-11 Gregory John Casamento <greg_casamento@yahoo.com>
* GormClassManager.m: Added stubs for two new method to add actions

10
Gorm.m
View file

@ -415,11 +415,14 @@ NSString *GormLinkPboardType = @"GormLinkPboardType";
- (id) addAttributeToClass: (id)sender
{
NSLog(@"add outlet/action");
// return self;
return [(id)[self activeDocument] addAttributeToClass: sender];
}
- (id) removeAttributeFromClass: (id)sender
{
return [(id)[self activeDocument] revoveAttributeFromClass: sender];
}
- (id) editClass: (id)sender
{
[self inspector: self];
@ -639,6 +642,9 @@ NSString *GormLinkPboardType = @"GormLinkPboardType";
[aMenu addItemWithTitle: @"Add Outlet/Action.."
action: @selector(addAttributeToClass:)
keyEquivalent: @""];
[aMenu addItemWithTitle: @"Delete Outlet/Action.."
action: @selector(removeAttributeFromClass:)
keyEquivalent: @""];
menuItem = [mainMenu addItemWithTitle: @"Classes"
action: NULL
keyEquivalent: @""];

View file

@ -17,7 +17,10 @@
- (NSArray*) subClassesOf: (NSString *)superclass;
- (void) removeAction: (NSString*)anAction forObject: (NSObject*)anObject;
- (void) removeOutlet: (NSString*)anOutlet forObject: (NSObject*)anObject;
- (void) addOutlet: (NSString *)anOutlet forClassNamed: (NSString *)className;
- (void) addAction: (NSString *)anAction forClassNamed: (NSString *)className;
- (void) replaceAction: (NSString *)oldAction withAction: (NSString *)newAction forClassNamed: className;
- (void) replaceOutlet: (NSString *)oldOutlet withOutlet: (NSString *)newOutlet forClassNamed: className;
- (BOOL) renameClassNamed: (NSString*)oldName newName: (NSString*)name;
- (NSString*) addClassWithSuperClassName: (NSString*)name;
- (BOOL) addClassNamed: (NSString*)className

View file

@ -147,12 +147,78 @@ NSString *IBClassNameChangedNotification = @"IBClassNameChangedNotification";
[[info objectForKey: @"AllOutlets"] addObject: anOutlet];
}
- (void) addAction: (NSString *)anOutlet forClassNamed: (NSString *)className
- (void) addAction: (NSString *)anAction forClassNamed: (NSString *)className
{
NSMutableDictionary *info = [classInformation objectForKey: className];
NSMutableArray *extraActions = [info objectForKey: @"ExtraActions"];
NSArray *allActions = [self allActionsForClassNamed: className];
if([allActions containsObject: anAction])
{
return;
}
if(extraActions == nil)
{
extraActions = [[NSMutableArray alloc] initWithCapacity: 1];
[info setObject: extraActions forKey: @"ExtraActions"];
RELEASE(extraActions);
}
[extraActions addObject: anAction];
[[info objectForKey: @"AllActions"] insertObject: anAction atIndex: 0];
}
- (void) addOutlet: (NSString *)anOutlet forClassNamed: (NSString *)className
{
NSMutableDictionary *info = [classInformation objectForKey: className];
NSMutableArray *extraOutlets = [info objectForKey: @"ExtraOutlets"];
NSArray *allOutlets = [self allOutletsForClassNamed: className];
if([allOutlets containsObject: anOutlet])
{
return;
}
if(extraOutlets == nil)
{
extraOutlets = [[NSMutableArray alloc] initWithCapacity: 1];
[info setObject: extraOutlets forKey: @"ExtraOutlets"];
RELEASE(extraOutlets);
}
[extraOutlets addObject: anOutlet];
[[info objectForKey: @"AllOutlets"] insertObject: anOutlet atIndex: 0];
}
- (void) replaceAction: (NSString *)oldAction withAction: (NSString *)newAction forClassNamed: className
{
NSMutableDictionary *info = [classInformation objectForKey: className];
NSMutableArray *extraActions = [info objectForKey: @"ExtraActions"];
NSArray *allActions = [self allActionsForClassNamed: className];
if([extraActions containsObject: oldAction])
{
int all_index = [allActions indexOfObject: oldAction];
int extra_index = [allActions indexOfObject: oldAction];
[extraActions replaceObjectAtIndex: extra_index withObject: newAction];
[[info objectForKey: @"AllActions"] replaceObjectAtIndex: all_index withObject: newAction];
}
}
- (void) replaceOutlet: (NSString *)oldOutlet withOutlet: (NSString *)newOutlet forClassNamed: className
{
NSMutableDictionary *info = [classInformation objectForKey: className];
NSMutableArray *extraOutlets = [info objectForKey: @"ExtraOutlets"];
NSArray *allOutlets = [self allOutletsForClassNamed: className];
if([extraOutlets containsObject: oldOutlet])
{
int all_index = [allOutlets indexOfObject: oldOutlet];
int extra_index = [allOutlets indexOfObject: oldOutlet];
[extraOutlets replaceObjectAtIndex: extra_index withObject: newOutlet];
[[info objectForKey: @"AllOutlets"] replaceObjectAtIndex: all_index withObject: newOutlet];
}
}
- (NSArray*) allActionsForObject: (NSObject*)obj

View file

@ -707,6 +707,12 @@ static NSImage *classesImage = nil;
return self;
}
- (id) removeAttributeFromClass: (id)sender
{
[classesView removeAttributeFromClass];
return self;
}
- (id) loadClass: (id)sender
{
NSArray *fileTypes = [NSArray arrayWithObjects: @"h", @"H", nil];
@ -1221,6 +1227,7 @@ static NSImage *classesImage = nil;
[classesView setIndentationPerLevel: 10];
[classesView setAttributeOffset: 30];
[classesView setBackgroundColor: salmonColor ];
[classesView setRowHeight: 18];
[classesScrollView setDocumentView: classesView];
RELEASE(classesView);
@ -2193,19 +2200,22 @@ objectValueForTableColumn: (NSTableColumn *)aTableColumn
forTableColumn: (NSTableColumn *)aTableColumn
byItem: (id)item
{
NSLog(@"Edit item %@",item);
if([item isKindOfClass: [GormOutletActionHolder class]])
{
if([anOutlineView editType] == Actions)
{
NSLog(@"the action %@",[item getName]);
[classManager replaceAction: [item getName] withAction: anObject forClassNamed: [anOutlineView itemBeingEdited]];
}
else if([anOutlineView editType] == Outlets)
{
NSLog(@"the outlet %@",[item getName]);
[classManager replaceOutlet: [item getName] withOutlet: anObject forClassNamed: [anOutlineView itemBeingEdited]];
}
[item setName: anObject];
NSLog(@"Replaced by %@",anObject);
}
else
{
[classManager renameClassNamed: item newName: anObject];
[anOutlineView reloadData];
}
}
@ -2269,5 +2279,19 @@ numberOfChildrenOfItem: (id)item
NSArray *outlets = [classManager allOutletsForClassNamed: item];
return outlets;
}
- (void)outlineView: (NSOutlineView *)anOutlineView
addAction: (NSString *)action
forClass: (id)item
{
[classManager addAction: action forClassNamed: item];
}
- (void)outlineView: (NSOutlineView *)anOutlineView
addOutlet: (NSString *)outlet
forClass: (id)item
{
[classManager addOutlet: outlet forClassNamed: item];
}
@end

View file

@ -73,6 +73,12 @@ typedef enum {None, Outlets, Actions} GSAttributeType;
actionsForItem: (id)item;
- (NSArray *) outlineView: (GormOutlineView *)ov
outletsForItem: (id)item;
- (void)outlineView: (NSOutlineView *)anOutlineView
addAction: (NSString *)action
forClass: (id)item;
- (void)outlineView: (NSOutlineView *)anOutlineView
addOutlet: (NSString *)outlet
forClass: (id)item;
@end
// a class to hold the outlet/actions so that the

View file

@ -183,10 +183,10 @@ static NSColor *darkGreyBlueColor = nil;
{
int insertionPoint = 0;
GormOutletActionHolder *holder = [[GormOutletActionHolder alloc] initWithName: actionname];
NSLog(@"Adding an action: %@", actionname);
_numberOfRows += 1;
insertionPoint = [_items indexOfObject: item];
[_items insertObject: holder atIndex: insertionPoint + 1];
[_dataSource outlineView: self addAction: actionname forClass: _itemBeingEdited];
[self setNeedsDisplay: YES];
[self noteNumberOfRowsChanged];
}
@ -236,11 +236,10 @@ static NSColor *darkGreyBlueColor = nil;
{
int insertionPoint = 0;
GormOutletActionHolder *holder = [[GormOutletActionHolder alloc] initWithName: outletname];
NSLog(@"Adding an outlet: %@", outletname);
_numberOfRows += 1;
insertionPoint = [_items indexOfObject: item];
[_items insertObject: holder atIndex: insertionPoint + 1];
// [self editColumn: 0 row: insertionPoint+1 withEvent: nil select: YES];
[_dataSource outlineView: self addOutlet: outletname forClass: _itemBeingEdited];
[self setNeedsDisplay: YES];
[self noteNumberOfRowsChanged];
}
@ -491,16 +490,13 @@ static NSColor *darkGreyBlueColor = nil;
_clickedItem = [self itemAtRow: _clickedRow];
isActionOrOutlet = [_clickedItem isKindOfClass: [GormOutletActionHolder class]];
NSLog(@"clickedItem = %@",_clickedItem);
tb = [_tableColumns objectAtIndex: _clickedColumn];
if(tb == _actionColumn)
{
NSLog(@"setting action image");
image = action;
}
else if (tb == _outletColumn)
{
NSLog(@"setting outlet image");
image = outlet;
}
@ -532,7 +528,6 @@ static NSColor *darkGreyBlueColor = nil;
if(_clickedItem != [self itemBeingEdited] &&
!isActionOrOutlet)
{
NSLog(@"RESETTING......");
[self setItemBeingEdited: nil];
[self setIsEditing: NO];
[self setBackgroundColor: salmonColor];
@ -542,7 +537,6 @@ static NSColor *darkGreyBlueColor = nil;
else if(isActionOrOutlet)
{
NSString *name = [_clickedItem getName];
NSLog(@"clicked on action/outlet: %@",name);
}
[super mouseDown: theEvent];
@ -616,7 +610,6 @@ static NSColor *darkGreyBlueColor = nil;
- (void)addAttributeToClass
{
NSLog(@"got it here 2");
if(_isEditing == YES)
{
if(_edittype == Actions)
@ -632,6 +625,11 @@ static NSColor *darkGreyBlueColor = nil;
}
}
- (void)removeAttributeFromClass
{
NSLog(@"Remove attribute not yet implemented.");
}
- (void) editColumn: (int) columnIndex
row: (int) rowIndex
withEvent: (NSEvent *) theEvent
@ -647,6 +645,7 @@ static NSColor *darkGreyBlueColor = nil;
NSImage *image = nil;
NSCell *imageCell = nil;
id value = nil;
BOOL isOutletOrAction = NO;
// We refuse to edit cells if the delegate can not accept results
// of editing.
@ -696,6 +695,7 @@ static NSColor *darkGreyBlueColor = nil;
byItem: item];
if([value isKindOfClass: [GormOutletActionHolder class]])
{
isOutletOrAction = YES;
value = [value getName];
}
@ -755,9 +755,17 @@ static NSColor *darkGreyBlueColor = nil;
level = [self levelForItem: item];
indentationFactor = _indentationPerLevel * level;
drawingRect = [self frameOfCellAtColumn: columnIndex row: rowIndex];
drawingRect.origin.x += indentationFactor + 5 + [image size].width;
drawingRect.size.width -= indentationFactor + 5 + [image size].width;
if(isOutletOrAction)
{
drawingRect.origin.x += _attributeOffset;
drawingRect.size.width -= _attributeOffset;
}
else
{
drawingRect.origin.x += indentationFactor + 5 + [image size].width;
drawingRect.size.width -= indentationFactor + 5 + [image size].width;
}
// create the image cell..
imageCell = [[NSCell alloc] initImageCell: image];
if(_indentationMarkerFollowsCell)